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

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

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

当 VM 获得一些处理时间时,VM 是使用单核还是多核并不重要,因为处理来自 Hyper-V 主机上的处理器阵列。但是,当我Number of logical processors在 Hyper-V 中为特定 VM 将设置从 1 设置为 4 时,我看到性能大幅提升。

我当前设置的规格大约如下:

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

  • 虚拟机分配有 6 GB RAM、1 或 4 个核心、几百 GB 空间并运行 2008 R2。

我在过去的 Hyper-V 设置中也遇到过类似的事情。

答案1

据我所知,每个虚拟机管理程序中的虚拟机都能够使用额外的虚拟 CPU 来调度额外的并发执行线程。

正是物理机和虚拟机之间的抽象层使得它不是按照您描述的方式工作。VM 不知道物理机有多少个核心。VM 不会“看到”物理机上的物理 CPU(或核心)。虚拟机管理程序为 VM 提供任意数量的虚拟 CPU,而客户操作系统使用这些虚拟 CPU 来调度其他并发线程……虚拟机管理程序分配给虚拟机的虚拟 CPU 总数甚至可以超过机器中的物理 CPU/核心数量。

换句话说,当虚拟机分配单个 vCPU 时,它会像只有一个 CPU 一样调度其线程。底层物理机器中有多少个内核并不重要。(但值得注意的是,物理机器可能会在一个线程量或时间片内将一个 VM 线程调度到一个物理内核上,然后在下次调度运行时在另一个物理内核上运行它。但虚拟机不知道正在发生的一切。它只知道它一次只能调度一个线程,一个接一个,因为它只有一个虚拟 CPU。)

让我们在这里非常清楚地说明一下我们的术语。您为虚拟机分配的是 vCPU 或虚拟 CPU,而不是“核心”。核心(我假设您指的是共享单个物理插槽的物理处理单元)不等于 vCPU。它们之间有一个抽象层。如果虚拟机只分配了 1 个 vCPU,则它一次只能安排一个线程运行。这就是为什么您的虚拟机在分配了 2-4 个虚拟 CPU 后运行速度更快的原因 - 因为它现在能够安排多个线程同时运行。

然而,这里肯定存在着收益递减规律,因为过多的虚拟 CPU 会在同步等方面产生越来越高的开销成本。

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

答案2

分配的虚拟 CPU 数量确实很重要。在虚拟机中运行的软件不知道它是在虚拟机中,并且主机能够处理比虚拟机更多的任务。因此,如果您运行的软件可以利用多个 CPU 核心,那么在仅分配了一个核心的虚拟机中,软件将只为其任务安排一个核心,并且虚拟机一次也只会使用一个主机核心。一旦您为虚拟机分配了更多核心,软件就可以安排更多并行任务,主机的 CPU 将为虚拟机安排这些任务。

注意不要给虚拟机太多,以免引起争用,如果一个虚拟机比主机拥有更多的虚拟核心,则虚拟机将与自己争用,并且在像 vmware 这样的成群调度的虚拟机管理程序的情况下,虚拟机将永远无法执行任何东西(过度分配的选项当然被管理层阻止)。

相关内容