如何find虚拟化性能瓶颈?

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

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

  • Test-Box – 这是我的同事用来设置虚拟机的台式机工作站硬件,在我们将其移动到实际的服务器硬件之前
  • Srv-Box – 这是服务器硬件
  • Test-Box-Real – 这是直接在Test-Box HW上运行的Windows
  • Test-Box-VM – 这是testing盒HW上的Hyper-V VM中的Windows
  • Srv-Box-Real – 这是运行在Srv-Box HW上的Server2008R2。
  • Srv-Box-VM – 这是在Srv-Box HW上的Hyper-V虚拟机上运行的Windows,即在Srv-Box-Real上。

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

然后我们把虚拟机移动到了Srv-Box机器上,我们看到的是在Srv-Box-RealSrv-Box-VM之间有一个显着的性能下降,也就是说,现在看到在实际的服务器硬件上的性能的主要差异。 (在虚拟机内部构build慢了大约50%。)

我应该补充一点,Test-Box和Srv-Box都只运行这一个单独的虚拟机,而且什么都不做。

我还应该注意到,“Real”操作系统是Win2008R2(64位),VM托pipe的操作系统是Wind2003R2(32位)。

硬件规格:

  • Srv-Box

    • 英特尔XEON E5640 @ 2.67Ghz(这意味着8个内核在Real系统上具有超线程,而在虚拟机上只有4个内核,因为Hyper-V不允许超线程,但内核数量似乎不能解释问题这里。)
    • 16GB内存(我们有4GB分配给虚拟机)
    • 虚拟DELL RAID 1(2x 450GB HUS156045VLS600日立15k SAS硬盘)
  • Test-Box

    • 英特尔XEON E31245 @ 3.3GHz
    • 16GB RAM
    • WD VelociRaptor 600GB 10k RPM SATA

再次注意,我只关心Srv-Box-Real和Srv-Box-VM(高)之间的区别, Test-Box-Real和Test-Box-VM(低)。

为什么一台机器在比较虚拟机和实际性能时会有平价,而另一台机器(服务器级硬件不低于)会有很大的差距? (都是XEON CPU …)

从明显的监视器性能计数器开始,如果可能的话使用Ressource MOnitor。 CPU,IO处理如何? 标准的瓶颈几乎是IO,而你的2个驱动器听起来好像是对于那些拥有2到3个虚拟机的任何东西来说都是非常糟糕的IO,特别是当C ++的构build服务器这样残酷的事情发生的时候(这是基于HEAVY IO的编译器一般来说,但是C ++在这个领域相当广泛 – 我只是为了构build而使用SSD)。

这是标准的pipe理员 – 在这一点上没有什么特别的虚拟机。 基本上find你首先find的瓶颈。

IO也可以 – dynamic光盘。 有助于将非dynamic光盘放入构build步骤(工作文件)。 在那里发生了一个IO的TON。

现在,是的,Raptor的IOPS比15k SAS要less,但是很可能是不共享的。

SRV-HW是否耗尽了所有的CPU核心? 另一个项目,然后…

关于你的CPU限制,顺便说一句,当前版本的Hyper-V支持多于4个虚拟机的核心,所以升级可能是为了…服务器2012几乎每个人都可以不买一个商店的盒子现在,我从MS存储库中获得了我8月16日的副本。

但是,首先你要一步一步做正常的操作 – 通过使用资源监视器和性能找出瓶颈的位置

过去我也遇到过类似的问题,我们把这个问题跟踪下来, 写下caching在你的物理服务器上禁用它,再给它一个。

另一件需要记住的就是你只是在和许多不同之处作斗争,

  1. VM
  2. 不同的记忆
  3. 不同的磁盘(VHD vs物理)

尽可能地消除,然后再试一次。

检查BIOS设置wrt。 性能。 (我们将其从“自定义”改为“完整性能”)。

我们发现,在这台服务器上,当Hyper-V虚拟机内部满负荷时,系统并没有检测到满负荷,这意味着处理器在1.6GHz处发出巨大声音,而不是充分发挥其潜力。 在“真正的”操作系统上运行时,Speed Stepping确实起作用了 – 就我们所知,差异来自于这个差异。