当虚拟机仅提供两个核心而不是四个核心时,其性能能否更好?

当虚拟机仅提供两个核心而不是四个核心时,其性能能否更好?

我们在工作时有一台 VMWare VM,它分配了两个核心,在 IIS 中运行了一个相当烦人的进程。在负载下,该进程使两个核心的 CPU 使用率达到最大值,因此我们要求系统工程师将物理处理器的另外两个核心提供给 VM。工程师立即表示,这根本不会提高性能,但会使 VM 性能更差。他否认他的说法与 ESX 服务器的容量或资源争用有关。

这句话对我来说没有多大意义,我很好奇工程师说的话怎么可能是真的。实际上是否存在这样的情况:在相同的物理硬件上,为虚拟机提供四个核心会导致比两个核心更差的性能?让我们假设一个理想情况,即主机服务器上只有一个虚拟机,因此没有与其他操作系统实例共享任何东西。

我相信物理服务器有一个四核处理器,并且很可能托管多个虚拟机。我并不清楚主机上运行的是哪个版本的 ESX,也不确定物理处理器的配置是什么,但从我访问的虚拟机中,我看到了两个 3.33 GHz AMD 处理器。

最后,我从未测试过工程师的断言,因为(当我们尝试升级 VM 时)我们能够优化流程并降低其 CPU 消耗,并且 2)我们最终迁移到另一台 ESX 服务器上的不同 VM,该服务器具有四个核心。

答案1

我在这里插话说,您的工程师可能谈论的是具有多个 vCPU 的 VM 在调度 CPU 周期时具有明显的劣势。1 vCPU VM 可以在单个核心可用时立即执行指令。如果 VM 有 4 个 vCPU,那么它实际上无法执行任何指令,直到有 4 个核心可用。

如果您的机器上有大量虚拟机,这肯定会减慢您的速度,因为您的虚拟机必须排队等待 4 个核心释放。它还可能减慢其他虚拟机的速度,因为它会同时占用所有 4 个核心。

我不想深入讨论超线程之类的东西,但上面只是对我认为你的人可能提到的内容进行了简单的解释。尽管他可能没有很好地解释这一点。

答案2

vSphere 的最佳实践每个 VMWare是使用尽可能少的虚拟 CPU。如果应用程序不是为 SMP 应用程序构建的,则为客户机分配多个 vCPU 可能会产生负面影响。

即使某些 vCPU 未被使用,使用它们配置虚拟机仍会对 ESX 产生一些小的资源需求:* 未使用的 vCPU 仍会消耗计时器中断。* 在多个 vCPU 之间维护一致的内存视图会消耗资源。* 一些较旧的客户操作系统在未使用的 vCPU 上执行空闲循环,从而消耗原本可用于其他用途(其他虚拟机、VMkernel、控制台等)的资源。* 客户调度程序可能会在多个 vCPU 之间迁移单线程工作负载,从而失去缓存局部性。

如果主机耗尽了所有物理 CPU 周期,则可能会导致其他性能问题,因为主机开始陷入困境,进而导致所有客户机开始陷入困境。

编辑:您的工程师至少应该愿意进行测试。

再次阅读你的帖子时,你说它只有 1 个四核 CPU。如果是这样的话,我可能会和你的工程师一起说,将所有 4 个物理 CPU 分配给一个客户机是坏的想法。当只有 4 个物理核心时,主机管理所有 4 个 vCPU 的开销会降低整体性能。

问题是,当主机总共只有 4 个核心时,在 gust 上添加 4 个 vCPU 意味着您将所有物理 CPU 资源分配给一台机器。让虚拟机管理程序管理所有 4 个 vCPU 的开销最终会占用资源,您实现的收益很可能微乎其微

答案3

到目前为止我学到的一个经验法则是,分配给单个虚拟机的虚拟 CPU 数量始终小于主机中物理存在的虚拟 CPU 数量。

造成这种情况的一个原因是(在 esxi 之前)控制台虚拟机一直在运行。出于调度原因,只有当虚拟 CPU 数量同时空闲时,您才会将 CPU 周期提供给虚拟机。否则您的“CPU 等待时间”将增加

因此,如果主机配备四核 CPU,我只会为虚拟机分配最多 2 个 CPU。

答案4

这取决于其他哪些程序正在使用这些其他内核。如果内核处于空闲状态,那么将这些内核添加到虚拟机中确实可以提高性能(我假设虚拟机上运行的应用程序是多线程的,并且能够使用所有 4 个内核)。如果内核处于繁忙状态,那么它可能不会有帮助,或者至少没有人们想象的那么有帮助。

相关内容