在虚拟机内运行高 CPU 使用率应用程序时,可以充分利用虚拟机管理程序的物理 CPU 核心的性能吗?

在虚拟机内运行高 CPU 使用率应用程序时,可以充分利用虚拟机管理程序的物理 CPU 核心的性能吗?

我目前有一个 IIS 应用程序池运行在一台物理服务器上,该服务器有 2 个四核处理器,所有核心的平均利用率为 50%。我需要使此应用程序具有高可用性,在研究了我们的选项后,我决定在虚拟机中使用此应用程序创建一个 Hyper V 集群。

我担心的是,VM 只有 4 个 vCPU,根据我之前在另一台 Hyper V 服务器上看到的特性,似乎 1 个 vCPU 只能充分利用物理 CPU 的一个核心。即使 vCPU 达到 100%,也无法利用其他物理核心的处理能力。如果这个观察是正确的,那么根据我目前 8 个核心的 50% 利用率(不考虑虚拟化本身固有的开销),我已经 100% 利用了 4 个核心。

在研究这个问题时,我观察了 Brian EhlertYoutube 视频有关 Hypervisor CPU 利用率的信息,请参阅 Hyper-v 概念 vCPUTecknet 维基百科条目。根据我对 Brian 所说内容的理解,由于运行应用程序池的 w3wp.exe 进程正在启动和拆除工作线程以处理与我们网站的各个用户连接,因此这些离散连接应该提供断点,其中 vCPU 可以从一个物理处理器快速移动到下一个物理处理器,这样当 VM 只有 4 个 vCPU 时,我就能够利用物理系统所有 8 个核心的性能。

这对我来说仍然说不通,而且与我所见的情况相悖。由于单个 vCPU 必须完成其当前处理才能切换到另一个物理 CPU,这意味着单个 vCPU 无法实现高于一个核心 100% 的物理 CPU 净利用率。如果应用程序线程没有断点,那么这将是一个物理核心的 100%,如果应用程序线程有断点,允许虚拟机管理程序将 vCPU 移动到下一个物理核心,那么利用率可能约为四核系统中每个物理核心的 25%,最终总利用率仍限制为单个核心的 100%。

基于此推理,当将所有核心的物理核心的 vCPU 利用率相加时,1 个 vCPU 对所有物理核心的利用率总和似乎永远不会大于单个核心的 100%。

最终,这意味着即使 VM 有 4 个 vCPU 并在具有 16、32 甚至 64 个物理核心的系统上运行,我也无法从 VM 内部实现 8 核系统的性能水平。

有没有办法在单个虚拟机中实现我想要的性能?

答案1

根据我对 Brian 所说内容的理解,由于运行应用程序池的 w3wp.exe 进程正在启动和拆除工作线程以处理与我们网站的各个用户连接,因此这些离散连接应该提供断点,其中 vCPU 可以从一个物理处理器快速移动到下一个物理处理器,以便让我在虚拟机只有 4 个 vCPU 时利用物理系统所有 8 个核心的性能。

回过头来阅读一些关于处理器工作原理的基础知识。要点。没有办法 (!) 欺骗 4 个虚拟核心将 8 个物理核心使用到 100%。虚拟机外部没有可见的“断点”。

每个虚拟机基本上只能有 4 个虚拟核心。现在,您可以集群/NLB 并使用多个虚拟机。

答案2

实际上,使用最新一代的 CPU,您可以预期处理能力会降低 1% 到 3%(假设没有出现奇怪的现象),如果您分配 4 个 vCPU,您的 VM 将像拥有 4 个物理核心一样做出响应(HTT 核心仅适用于坚持使用 ALU 的应用程序)。

附注:Technet Wiki 条目非常令人困惑,我认为其中有很多错误信息。

相关内容