VMware – 1个vCPU虚拟机可以同时使用多个物理内核吗?

假设我有一个具有一个四核处理器并禁用超线程的物理ESX主机。 这意味着它总共有4个物理内核或者pCPU。 我在这个VMware主机上创build一个虚拟机。 我分配这个虚拟机有1vCPU,并没有CPU限制。

问题:如果虚拟机正在运行一个“cpu killer”应用程序,这个应用程序需要越来越多的cpu周期,那么虚拟机最终能够在任何特定时刻完全消耗所有4个底层物理内核?

我想答案是否定的。 单个vCPU虚拟机在任何时刻最多只能消耗1个物理核心的容量。 因此,在我的示例中,由于没有其他虚拟机在运行,因此VMware将调度虚拟机在一个物理内核上运行。当物理内核被100%占用时,虚拟机的CPU利用率将locking到100%。 其他3个核心将大部分闲置。 正确?

如果虚拟机正在运行一个“cpu killer”应用程序,这个应用程序需要越来越多的cpu周期,那么虚拟机最终能够在任何特定时刻完全消耗所有4个底层物理内核?

没有。

因此,在我的示例中,由于没有其他虚拟机在运行,因此VMware将调度虚拟机在一个物理内核上运行。当物理内核被100%占用时,虚拟机的CPU利用率将locking到100%。 其他3个核心将大部分闲置。 正确?

对,那是正确的。

虚拟化并不神奇 – 一个核心仍然是一个核心,如果分配一个CPU,虚拟机将只能消耗1个核心的CPU周期。

这取决于你的程序是用multithreading编码的。 例如,您可能会要求一个线程与另一个正在执行其他任务的线程并行计算某些内容。

现在,如果你只有一个核心,那么你的程序线程只能串联(一个在另一个之后),而且它们不会被并行执行。

但是,如果您处于虚拟机世界,您的“核心”实际上就是您的vCPU。 VMware足够聪明地认识到vCPU上的串联线程可以分布在多个物理核心上。 假设您尚未打开CPU关联,并假设当时有备用内核,VMware将能够利用此机会。