据我了解,虚拟机(假设Relative Weight相等)得到处理器的平等份额。
当虚拟机得到一些处理时间时,虚拟机是否看到一个单独的内核使用或多个内核无关紧要,因为处理是从Hyper-V主机上的一系列处理器发出的,无论如何。 但是,当我在Hyper-V中将特定虚拟机Number of logical processors设置从1设置为4时,性能会有很大的提升。
我目前的设置规格约为:
Hyper-V主机具有32 GB的RAM,24个逻辑处理器(错误的字?),几TB的空间。
虚拟机分配6 GB RAM,1或4个核心,几百GB的空间和运行2008 R2。
在过去的Hyper-V设置中,我经历过类似的事情。
我所知道的每个虚拟机pipe理程序中的虚拟机都可以使用额外的虚拟CPU来安排额外的并发执行线程。
正是物理机器和虚拟机之间的抽象层,使得它不能像你所描述的那样工作。 虚拟机不知道物理机器有多less个内核。 虚拟机不“查看”物理机上的物理CPU(或核心)。 pipe理程序为虚拟机提供了多less个虚拟CPU,而客户机操作系统使用这些虚拟CPU来安排额外的并发线程……虚拟机pipe理程序向虚拟机发出的虚拟CPU总数甚至可以超过物理CPU /机器内核。
换句话说,一个虚拟机在分配了一个vCPU的时候,就像它只有一个CPU一样安排它的线程。 不pipe底层物理机器中有多less个核心都没关系。 (虽然值得注意的是,物理机器可以在一个物理内核上为一个线程量或时间片调度一个虚拟机线程,然后在下次计划运行的时候在不同的物理内核上运行虚拟机。没有任何想法发生,只知道它只能一次调度一个线程,因为它只有一个虚拟CPU。)
让我们在这里很清楚我们的条款。 您将vCPU或虚拟CPU分配给VM,而不是“核心”。 内核(我假设你是指共享一个物理插槽的物理处理单元)不等于vCPU。 它们之间有一层抽象。 如果一个虚拟机只有一个vCPU分配给它,它一次只能安排一个线程运行。 这就是为什么你的虚拟机运行速度更快,分配给它2 -4个虚拟CPU–因为现在可以调度多个线程同时运行。
然而,这里肯定有收益递减的规律,因为虚拟CPU数量过多会导致同步等事件的开销成本越来越高。
Hyper-V和VMware虚拟机pipe理程序如何计划虚拟机线程的执行方式略有不同,它们在物理资源“超额订购”方法上有所不同,但这是一个很好的通用概念。
分配的虚拟CPU数量很重要。 在虚拟机中运行的软件并不知道它在虚拟机中的事实,并且主机能够胜过虚拟机所呈现的内容。 因此,如果您正在运行可以利用多个CPU核心的软件,则在仅分配了一个核心的VM中,该软件将仅调度一个核心的任务,而VM也将仅使用一个主核心一次。 一旦为虚拟机提供了更多的内核,软件就可以安排更多的并行任务,主机的CPU将为该虚拟机进行调度。
注意不要让虚拟机过多,为了不引起争用,如果一个虚拟机拥有的虚拟内核数多于主机虚拟机数量,那么虚拟机将会与自己竞争,而在虚拟机pipe理程序组合的情况下,如虚拟机,虚拟机将会永远不能执行任何操作(当然,pipe理层会阻止超额定位选项)。