如何找到虚拟化性能的瓶颈?

如何找到虚拟化性能的瓶颈?

我们最近开始将我们的 C++ 构建服务器从真实机器转移到虚拟机中。(MS Hyper-V)

我们遇到了一些性能问题,目前我不知道该如何解决。我们有:

  • Test-Box- 这是我的同事在我们将其移至实际的服务器硬件之前用来设置虚拟机的桌面工作站硬件
  • Srv-Box- 这是服务器硬件
  • Test-Box-Real- 这是直接在 Test-Box HW 上运行的 Windows
  • Test-Box-VM- 这是 Test-Box HW 上的 Hyper-V VM 中的 Windows
  • Srv-Box-Real- 这是在 Srv-Box HW 上运行的 Server2008R2。
  • Srv-Box-VM- 这是在 Srv-Box HW(即 Srv-Box-Real)上的 Hyper-V VM 中运行的 Windows。

现在,问题是我们比较了Test-Box-Real和之间的构建时间Test-Box-VM,它们基本相等(约 2% 以内)。

然后我们将虚拟机移至 Srv-Box 机器,我们发现Srv-Box-Real和之间的性能显著下降Srv-Box-VM,也就是说,我们在测试硬件上没有看到任何差异,但现在我们看到实际服务器硬件上的性能存在重大差异。(在虚拟机内部构建速度慢约 50%。)

我应该补充一点,Test-Box 和 Srv-Box 都只运行这一个单个虚拟机不做任何其他事。

我还应该注意,“真实”操作系统是 Win2008R2(64 位),而 VM 托管操作系统是 Wind2003R2(32 位)。

硬件规格:

  • Srv-Box

    • Intel XEON E5640 @ 2.67Ghz(这意味着真实系统上有 8 个具有超线程的内核,而 VM 上“仅”有 4 个内核,因为 Hyper-V 不允许超线程,但内核数量似乎并不能解释这里的问题。)
    • 16GB RAM(我们为虚拟机分配了 4GB)
    • 虚拟 DELL RAID 1(2x 450GB HUS156045VLS600 Hitachi 15k SAS 驱动器)
  • Test-Box

    • 英特尔至强 E31245 @ 3.3GHz
    • 16GB 内存
    • WD VelociRaptor 600GB 10k RPM SATA

请再次注意,我只关心 Srv-Box-Real 和 Srv-Box-VM(高)之间的差异以及 Test-Box-Real 和 Test-Box-VM(低)之间的差异。

为什么在比较 VM 与实际性能时,一台机器具有相同的性能,而另一台机器(服务器级硬件不低于)却存在很大差异?(两者都是 XEON CPU...)

答案1

从显而易见的开始 - 监控性能计数器,如果可能的话,使用 Ressource MOnitor。CPU、IO 处理如何?“标准”瓶颈几乎是 IO,对于任何拥有超过 2-3 个 VM 的东西来说,您的 2 个驱动器听起来像是相当糟糕的 IO,尤其是当像 C++ 的构建服务器这样的残酷事物击中它时(这是基于重度 IO 的,编译器通常都是这样,但 C++ 在这方面相当广泛 - 我仅使用 SSD 进行构建)。

这是标准管理员 - 此时虚拟机没有什么特别之处。基本上,要找到瓶颈,首先要找到它。

IO 也可能是动态磁盘。有助于仅将非动态磁盘放入构建步骤(工作文件)。那里发生大量 IO。

现在,是的,Raptor 的 IOPS 比 15k SAS 少,但它很可能是非共享的。

SRV-HW 会用尽所有 CPU 核心吗?那么还有一件事……

顺便说一下,关于您的 CPU 限制,Hyper-V 的当前版本支持每个 VM 超过 4 个内核,因此可能需要升级... Server 2012 几乎可供所有现在不在商店购买盒装产品的人使用,我于 8 月 16 日从 MS 存储库获得了我的副本。

但首先你要一步一步地进行正常操作——通过使用资源监视器和性能来找出瓶颈所在

答案2

我以前也遇到过类似的问题,我们后来找到了写缓存 在您的物理服务器上禁用它并再试一次。

另一件要记住的事情是,你只是在与许多分歧作斗争,

  1. 虚拟机
  2. 不同的记忆
  3. 不同的磁盘(VHD 与物理)

消除尽可能多的内容并重试。

答案3

检查 BIOS 设置的性能。(我们将其从“自定义”更改为“全性能”。)

我们发现,在这台服务器上,当满载来自 Hyper-V VM 时,系统无法检测到满载,这意味着处理器以 1.6GHz 的速度运行,而不是以最大潜力运行。在“真实”操作系统上运行时,Speed Stepping 确实有效——据我们所知,这就是差异的来源。

相关内容