我们最近开始将我们的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-Real和Test-Box-VM之间的构build时间,它们基本相等(大约在2%以内)。
然后我们把虚拟机移动到了Srv-Box机器上,我们看到的是在Srv-Box-Real和Srv-Box-VM之间有一个显着的性能下降,也就是说,现在看到在实际的服务器硬件上的性能的主要差异。 (在虚拟机内部构build慢了大约50%。)
我应该补充一点,Test-Box和Srv-Box都只运行这一个单独的虚拟机,而且什么都不做。
我还应该注意到,“Real”操作系统是Win2008R2(64位),VM托pipe的操作系统是Wind2003R2(32位)。
硬件规格:
Srv-Box :
Test-Box :
再次注意,我只关心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在你的物理服务器上禁用它,再给它一个。
另一件需要记住的就是你只是在和许多不同之处作斗争,
尽可能地消除,然后再试一次。
检查BIOS设置wrt。 性能。 (我们将其从“自定义”改为“完整性能”)。
我们发现,在这台服务器上,当Hyper-V虚拟机内部满负荷时,系统并没有检测到满负荷,这意味着处理器在1.6GHz处发出巨大声音,而不是充分发挥其潜力。 在“真正的”操作系统上运行时,Speed Stepping确实起作用了 – 就我们所知,差异来自于这个差异。