为什么增加Hyper-V托管VM的“逻辑处理器数”会提高该VM的性能?


9

据我了解,虚拟机(假设Relative Weight相等)获得处理器的平等份额。

给虚拟机一定的处理时间后,该虚拟机是使用单个核心还是使用多个核心都没有关系,因为处理来自Hyper-V主机上的一系列处理器。但是,当我Number of logical processors在Hyper-V中将特定VM 的设置从1设置为4时,我看到了巨大的性能提升。

我当前设置的规格大约是:

  • Hyper-V主机具有32 GB的RAM,24个逻辑处理器(错误的单词?)和几TB的空间。

  • VM被分配了6 GB RAM,1个或4个内核,数百GB的空间并运行2008 R2。

在过去的Hyper-V设置中,我经历了类似的事情。

Answers:


20

据我所知,每个虚拟机管理程序中的虚拟机都可以使用其他虚拟CPU来调度其他并行执行线程。

正是物理机和虚拟机之间的抽象层使它无法按照您的描述方式工作。VM不知道物理机有多少个内核。VM无法“看到”物理计算机上的物理CPU(或核心)。系统管理程序为VM提供了多少个虚拟CPU,来宾操作系统使用这些虚拟CPU来调度其他并发线程...系统管理程序交付给虚拟机的虚拟CPU的总数甚至可以超过物理CPU /机器中的核心。

换句话说,虚拟机在分配了单个vCPU时,将其线程安排为好像只有一个CPU。底层物理计算机中有多少个内核无关紧要。(尽管值得注意的是,物理机可能会在一个物理核心上为一个线程量子或时间片安排一个VM线程,然后在下一次计划运行时在另一个物理核心上运行它。虚拟机具有不过,这一切都没有发生。它只知道一次只能调度一个线程,一个线程又一个线程,因为它只有一个虚拟CPU。)

并且让我们在这里非常清楚我们的条款。您将vCPU或虚拟CPU分配给VM,而不是“核心”。内核(假设内核是指共享一个物理套接字的物理处理单元)不等于vCPU。它们之间有一层抽象。如果虚拟机仅分配了1个vCPU,则它只能调度一次运行一个线程。这就是为您的VM分配2个-4个虚拟CPU来使其运行更快的原因-因为它现在可以调度多个线程同时运行。

但是,这里肯定有一条收益递减的法则,因为过多的虚拟CPU会在同步等事务中产生越来越高的开销成本。

Hyper-V和VMware虚拟机管理程序调度虚拟机线程执行的方式之间略有不同,并且它们在物理资源“超额订购”方面的方法也有所不同,但这是一个很好的通用概念。


7
@ Flapjack00不,这与我刚才所说的完全相反。并且让我们在这里非常清楚我们的条款。您将vCPU或虚拟CPU分配给VM,而不是“核心”。内核(我假设您是指共享一个插槽的物理处理单元)不等于vCPU。它们之间有一层抽象。如果VM仅分配了1个vCPU,则它只能调度一次运行一个线程。
瑞安·里斯

1
啊! 因此,在这种情况下,配置有4个vCPU的VM可以一次调度4个线程。假设我的主机有足够的vCPU,那么可以同时处理这4个线程吗?
Blackjack00

1
@ Flapjack00 “假设我的主机有足够的vCPU可用” -主机没有vCPU,VM则有。主机具有分配给vCPU的内核(或更准确地说,逻辑处理器-单个内核可能具有多个逻辑处理器,例如带有超线程的逻辑处理器)
BlueRaja13年

2
@Dan,这是VMware特有的问题。它不会影响Hyper-V。
杰克·奥辛斯

1
VMware已在ESX 3.5中删除了“ x vCpu需要Y cpu锁”,因此,这实际上不再适用于任何现代管理程序。话虽如此,您应该小心不要为虚拟机分配不必要的资源,而vCpu尤为重要。它们太多了,您将整体失去性能。
pauska,

3

分配的虚拟CPU的数量确实很重要。在VM中运行的软件不知道它在VM中的事实,并且主机具有的功能超出了所提供的VM。因此,如果您正在运行可利用多个CPU内核的软件,则在仅分配了一个内核的VM中,该软件将仅为其任务安排一个内核,并且该VM也将仅使用一个主机内核,一个时间。一旦为VM提供了更多核心,该软件便可以调度更多并行任务,主机的CPU将为VM调度这些任务。

注意不要给虚拟机过多,以免引起争用,如果一个虚拟机具有比主机更多的虚拟核,则该虚拟机将与自身竞争,并且如果是像vmware这样的排定调度的虚拟机管理程序,则该虚拟机将根本无法执行任何操作(集成选项当然会受到管理层的限制)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.