CPU 虚拟化着重于性能,只要有可能就会直接在处理器上运行。只要有可能就会使用基础物理资源,且虚拟化层仅在需要时才运行指令,使得虚拟机就像直接在物理机上运行一样。

CPU 虚拟化与仿真不同。ESXi 不使用仿真来运行虚拟 CPU。采用仿真时,所有操作均由仿真器在软件中运行。软件仿真器允许程序在不同于最初编写时所针对的计算机系统上运行。仿真器通过接受相同的数据或输入并获得相同的结果,来模拟或再现原始计算机的行为,从而实现仿真。仿真提供了可移植能力,并在几个不同平台上运行针对一个平台而设计的软件。

CPU 资源超额分配时,ESXi 主机将在所有虚拟机之间对物理处理器进行时间划分,以便每个虚拟机在运行时就如同具有指定数目的虚拟处理器一样。运行多个虚拟机的 ESXi 主机会为各虚拟机分配一定份额的物理资源。如果使用默认资源分配设置,与同一主机关联的所有虚拟机都将在每个虚拟 CPU 上收到相同份额的 CPU。这意味着单处理器虚拟机分配到的资源只有双处理器虚拟机的一半。

基于软件的 CPU 虚拟化

采用基于软件的 CPU 虚拟化后,客户机应用程序代码直接在处理器上运行,同时转换客户机特权代码并在处理器上运行转换后的代码。

转换后的代码有点大,通常比本机版本的运行速度慢。因此,具有少量特权代码组件的客户机应用程序的运行速度与本机应用程序非常接近。而具有大量特权代码组件(如系统调用、陷阱或页面表更新)的应用程序在虚拟环境中的运行速度可能较慢。

硬件辅助的 CPU 虚拟化

某些处理器为 CPU 虚拟化提供硬件辅助。

使用此辅助时,客户机可以使用独立的执行模式(称为客户机模式)。应用程序代码或特权代码等客户机代码均在客户机模式中运行。出现某些事件时,处理器退出客户机模式而进入 root 模式。管理程序将在 root 模式中执行,确定退出的原因,采取任何必需的措施,并在客户机模式中重新启动客户机。

将硬件辅助用于虚拟化时,不需要再转换代码。因此,系统调用或陷阱密集型工作负载在运行时的速度非常接近本机速度。但是,诸如涉及更新页面表之类的一些工作负载会导致多次退出客户机模式而进入 root 模式。根据退出的次数和退出所用的总时间,硬件辅助的 CPU 虚拟化可明显提高执行的速度。

虚拟化和特定于处理器的行为

尽管 VMware 软件会虚拟化 CPU,虚拟机仍然能检测出它在其上运行的处理器的具体型号。

处理器型号可能在其提供的 CPU 功能方面不同,在虚拟机中运行的应用程序可以利用这些功能。因此,无法使用 vMotion® 在具有不同功能集的处理器上运行的系统之间迁移虚拟机。在某些情况下,通过将增强型 vMotion 兼容性 (EVC) 用于支持此功能的处理器,可以避免此限制。有关更多信息,请参见《vCenter Server 和主机管理》文档。

CPU 虚拟化的性能影响

根据工作负载和使用的虚拟化类型,CPU 虚拟化会增加不同的开销量。

如果应用程序的大多数时间用于执行指令而不是等待用户交互、设备输入或数据检索等外部事件,则应用程序是受 CPU 约束的。对于此类应用程序,CPU 虚拟化开销包括必须执行的额外指令。此开销消耗应用程序本身可以使用的 CPU 处理时间。CPU 虚拟化开销通常会导致整体性能下降。

对于不受 CPU 约束的应用程序,CPU 虚拟化可能会提高 CPU 利用率。如果备用 CPU 容量可用于吸收开销,则仍然可以在整体吞吐量方面提供不错的性能。

在每台虚拟机上,ESXi 最多支持 128 个虚拟处理器 (CPU)。

注: 在单处理器虚拟机(而不是带有多个 CPU 的 SMP 虚拟机)上部署单线程应用程序可获得最佳的性能和资源利用率。

单线程应用程序只能利用单个 CPU。在双处理器虚拟机中部署这些应用程序不会加快应用程序的速度。相反,这样会使得第二个虚拟 CPU 使用本该由其他虚拟机以其他方式使用的物理资源。