为Hyper-V主机禁用SpeedStep最佳做法?

我正在分析一个问题,即虚拟机中的CPU绑定工作负载的性能经常(并非总是)低于我们对基础硬件的预期。

我们在Windows Server 2012 R2上使用Hyper-V。 该服务器采用双Intel Xeon E5-2643 v2 @ 3.50 GHz。

以下是一些看起来相关的数字:

  • Hyper-Vpipe理程序逻辑处理器,%总运行时间,实例_Total:平均20%
  • Hyper-V虚拟机pipe理程序虚拟处理器,CPU等待时间每次调度,实例_Total:平均20000(这个数字看起来完全是安全的,所以看起来虚拟机pipe理程序似乎并不需要从虚拟CPU“炼”到调度时间到另一个虚拟机的逻辑CPU;似乎翻译在2%的开销)
  • Hyper-Vpipe理程序逻辑处理器,最大频率百分比,实例_Total:平均34%
  • CPU-Z工具显示两个处理器的Core#0在1200 MHz左右的大部分时间(几乎与性能监视器报告的最大频率的百分比相匹配)

在只有less量内核的台式机上,核心速度立即上升,一旦CPU限制活动开始。

然而,在我们的Hyper-V主机上,核心速度似乎只有在整个系统负载似乎高达几秒钟的情况下才会上升。 现在,例如,如果虚拟机中共有24个物理虚拟CPU(打开超线程),并且该虚拟机需要CPU电源,虚拟机内部的任务pipe理器显示接近100%的CPU使用率,大部分时间物理CPU的速度不会boost,性能也不好。

显然这是不想要的行为。 考虑一个数据库服务器需要3倍的时间来回答查询,因为服务器没有足够的负载来提高CPU频率。 这没有任何意义。

从2011年起,我发现了一篇博客文章,描述了VMWare和思科刀片服务器的完全相同的行为 。我没有在其他任何地方find这方面的信息。

我实际上可以通过切换到powercfg.cpl的Windows“高性能”电源计划来消除这种行为,耗电量大约高出30%。 我实际上获得了更好和更一致的性能,性能监视器显示更低的负载数字。

(在较旧的服务器上,我find了一个额外的设置“处理器电源pipe理|最小处理器状态”,可以设置为100%,而不禁用所有其他省电选项,新的只显示“系统冷却策略” “即使是”平衡“计划,所以我唯一的select是select”高性能“。)

这是Hyper-V主机的最佳做法,还是有其他的解决方法吗? 如果SpeedStep真的是一个问题,我想知道为什么他们甚至将它构build到服务器CPU中,并默认启用它,为什么我从来没有阅读Hyper-Vconfiguration指南中的这个设置?

经过多次search,似乎这是现代服务器CPU的一个普遍问题,甚至与虚拟化无关, 主要服务器供应商以及软件供应商(如Microsoft和VMWare)都会将其产品的默认设置用于人为限制您的CPU性能 。 我仍然觉得很难相信。

任何关心每个内核能够立即获得全部CPU功率而不是所有内核都在忙碌的人的解决scheme是禁用省电function(Intel SpeedStep / EIST或AMD Cool'n'Quiet)。 根据您的BIOS设置,可以在操作系统级别(如Windows powercfg.cpl “高性能”计划)或通过BIOS进行控制,在这种情况下,操作系统设置将显示为灰色。

布伦特·奥扎尔(Brent Ozar)在2011年写道: “节能CPU上的SQL Server不是那么快”

在过去的几个星期里,我看到了一些服务器升级导致性能下降的情况,而其中一个关键因素是节制CPU。 从理论上讲,服务器应该根据需求来挑选果汁,但事实上,情况很less。 服务器制造商正在BIOS中隐藏省电设置,而Windows Server则提供了一个默认的省电选项,可以频繁地节制CPU。

微软在KB2207548中表示:

在某些情况下,使用默认(平衡)电源计划运行时,Windows Server 2008 R2计算机上的整体性能可能会降低。 不pipe平台如何,都可能会出现问题,并且可能会在本机环境和虚拟环境中展示。 性能下降可能会增加某些任务的平均响应时间,并导致CPU密集型应用程序的性能问题。 […]如果“电源选项”设置设置为“平衡”,则可能会发生此问题。 默认情况下,Windows Server 2008 R2设置平衡(推荐)电源计划

有一个修补程序可用于Win2008R2,并build议BIOS更新,但由于这仍然是与Win2012R2的问题,似乎没有办法绕过第二个build议,“高性能”的计划。

KB2534356中也描述了一个类似症状的问题,该问题也仅为Win2008R2提供了修补程序。 所以对我来说,只有通常的解决方法适用(高性能计划),但听起来像将来可能会有修复。 (它在桌面CPU上效果很好,所以我不明白为什么它不应该在服务器上。)

我会更新这个答案,以防我可能会find一个更好的解决scheme(或当然会改变接受的答案,如果别人发布的解决scheme)。

仍然想知道,如果EC2或Azure可能有相同的问题(在这种情况下,你将无法做任何事情,因为你需要控制主机,改变虚拟机的设置不会有任何影响)。

更多的参考资料:

  • 虚拟化时考虑CPU功耗优化与性能 (2011; 2013年后续 )
  • DBPM如何影响访客虚拟机性能 (2013)
  • 高CPU就绪,CPU利用率低? (当遇到“CPU准备就绪”高的数字时,VMWare的build议也是一样的)

我只是偶尔看到这一点。 理论上讲,speedstep(它似乎越来越成为一个不可configuration的选项)不应该影响你的性能。 然而,当它下台时,你突然在一台虚拟机上忙碌起来,有时候似乎处理器似乎不足够。 我不确定这是微软的问题,因为正如你所提到的,VMware和思科有同样的问题。

它是一个在服务器上删除speedstep的BIOSfunction。 在IBM刀片上,它是一个默认的bios选项:没有speedstep,有时没有turbo。 检查博客的技术细节:

https://workinghardinit.wordpress.com/tag/c-states/

“根据您的发现和需求,您可能只想在BIOS或Windows中closuresSpeedStep或Cool'n'Quiet”所以,如果您遇到问题,请将其closures。

并在BIOS中检查虚拟指令没有closures坏的BIOS。

不要忘记在旧的操作系统上添加“hyperv工具”,以获得更好的“虚拟感知操作系统”。