VMware - 1 vCPU VM 可以同时使用多个物理核心吗?

VMware - 1 vCPU VM 可以同时使用多个物理核心吗?

假设我有一台物理 ESX 主机,该主机配备一个四核处理器,并且禁用了超线程。这意味着它总共有 4 个物理核心或 pCPU。我在此 VMware 主机上创建了一个 VM。我为该 VM 分配了 1 个 vCPU,并且没有设置 CPU 限制。

问题:如果虚拟机正在运行一个“CPU 杀手”应用程序,并且该应用程序不断要求越来越多的 CPU 周期,那么虚拟机是否会在任何给定时刻完全消耗所有 4 个底层物理核心?

我认为答案是否定的。单个 vCPU VM 在任何给定时刻最多只能消耗 1 个物理核心的容量。因此,在我的示例中,由于没有其他 VM 正在运行,VMware 将安排 VM 在一个物理核心上运行,当该物理核心被 100% 消耗时,VM 的 CPU 利用率将锁定为 100%,仅此而已。其他 3 个核心大部分时间处于空闲状态。对吗?

答案1

如果虚拟机正在运行一个“CPU 杀手”应用程序,并且该应用程序不断要求越来越多的 CPU 周期,那么虚拟机是否会在任何给定时刻完全消耗所有 4 个底层物理核心?

不。

因此,在我的示例中,由于没有其他虚拟机正在运行,VMware 将安排虚拟机在一个物理核心上运行,当该物理核心被 100% 消耗时,虚拟机的 CPU 利用率将锁定为 100%,仅此而已。其他 3 个核心将大部分处于空闲状态。对吗?

对,那是正确的。

虚拟化不是魔术 - 一个核心仍然是一个核心,如果分配一个 CPU,您的 VM 将只能消耗 1 个核心的 CPU 周期。

答案2

这取决于您的程序是否使用多线程编码。例如,您可能要求一个线程并行计算某些任务,而另一个线程则执行其他任务。

现在,如果您只有一个核心..那么您的程序线程只能串联运行(一个接一个)..并且它们根本无法并行执行。

但是,如果您身处虚拟机世界,您的“核心”实际上就是您的 vCPU。VMware 非常聪明,能够识别出 vCPU 上的串联线程可以分布在多个物理核心上。假设您没有启用 CPU 亲和性,并且假设当时有空闲核心,VMware 将能够利用这个机会。

相关内容