![禁用 Hyper-V 主机的 SpeedStep 的最佳做法是什么?](https://linux22.com/image/650131/%E7%A6%81%E7%94%A8%20Hyper-V%20%E4%B8%BB%E6%9C%BA%E7%9A%84%20SpeedStep%20%E7%9A%84%E6%9C%80%E4%BD%B3%E5%81%9A%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我正在分析一个问题,其中虚拟机内部受 CPU 限制的工作负载的性能通常(并非总是)远低于我们基于底层硬件所预期的性能。
我们在 Windows Server 2012 R2 上使用 Hyper-V。该服务器具有双 Intel Xeon E5-2643 v2 @ 3.50 GHz。
以下是一些看似相关的数字:
- Hyper-V 虚拟机管理程序逻辑处理器,% 总运行时间,实例 _Total:平均 20%
- Hyper-V 虚拟机管理程序虚拟处理器,每次调度的 CPU 等待时间,实例 _Total:平均 20000(这个数字似乎完全是安全的,因此虚拟机管理程序似乎不必从虚拟 CPU “转移” 到另一个虚拟机的逻辑 CPU 来安排时间;似乎转化为 2% 的开销)
- Hyper-V 虚拟机管理程序逻辑处理器,最大频率的百分比,实例 _Total:平均 34%
- CPU-Z 工具显示,两个处理器的核心 #0 大部分时间都在 1200 MHz 左右(与性能监视器报告的最大频率百分比非常吻合)
在只有几个核心的桌面上,一旦 CPU 密集型活动开始,核心速度就会立即加快。
然而,在我们的 Hyper-V 主机上,核心速度似乎只有在以下情况下才会提高:系统总体负载几秒钟内似乎很高。例如,如果您的虚拟机总共有 24 个物理 CPU,其中有 4 个是虚拟 CPU(启用了超线程),并且该虚拟机需要 CPU 能力,而虚拟机内的任务管理器显示 CPU 使用率接近 100%,则大多数情况下物理 CPU 的时钟速度不会提高,性能很差。
显然,这是不受欢迎的行为。想象一下,由于服务器的负载“不够”以增加 CPU 频率,数据库服务器需要 3 倍的时间来回答查询。这毫无意义。
我发现了一个博客文章描述了 VMWare 和 Cisco 刀片的完全相同的行为,从 2011 年开始。我没有在其他地方找到有关此信息。
实际上,我可以通过切换到 Windows“高性能”电源计划来摆脱这种现象powercfg.cpl
,但代价是功耗增加约 30%。实际上,我获得了更好、更一致的性能,并且性能监视器显示更低的负载数字。
(在较旧的服务器上,我发现了一个附加设置“处理电源管理 | 最低处理器状态”,可以将其设置为 100%,而无需禁用所有其他省电选项。新设置仅显示“系统冷却策略”,即使对于“平衡”计划也处于“活动”状态,所以我唯一的选择是选择“高性能”。)
这真的是 Hyper-V 主机的最佳实践吗?还是还有其他解决方法?如果 SpeedStep 真的是个问题,我想知道他们为什么还要将其内置到服务器 CPU 中并默认启用它,以及为什么我从未在 Hyper-V 配置指南中看到过此设置?
答案1
经过进一步的搜索,我发现这似乎是现代服务器 CPU 的一个普遍问题,甚至与虚拟化无关,并且主流服务器供应商以及 Microsoft 和 VMWare 等软件供应商在其产品中都采用了默认设置,人为地限制了 CPU 性能。我还是觉得难以置信。
对于任何想要立即获得全部 CPU 能力的人来说,这都是一个解决方案每个核心一开始,所有内核都不忙,禁用省电(Intel SpeedStep/EIST 或 AMD Cool'n'Quiet)。根据您的 BIOS 设置,可以在操作系统级别(如 Windows powercfg.cpl
“高性能”计划)或通过 BIOS 进行控制,在这种情况下,操作系统设置将变灰。
Brent Ozar 对此写道(“SQL Server 在节能 CPU 上运行?没那么快。”) 在2011年:
在过去的几周里,我看到了多起服务器升级导致性能下降的案例,其中一个关键因素就是 CPU 的节流。理论上,服务器应该根据需求增加功率,但实际上,情况很少如此。服务器制造商在 BIOS 中隐藏了节能设置,而 Windows Server 附带的默认节能选项会过于频繁地降低 CPU 功率。
微软表示KB2207548:
在某些情况下,在运行默认(平衡)电源计划时,Windows Server 2008 R2 计算机的整体性能可能会下降。无论平台如何,都可能出现此问题,并且可能在本机和虚拟环境中都出现。性能下降可能会增加某些任务的平均响应时间,并导致 CPU 密集型应用程序的性能问题。[...] 如果将电源选项设置为平衡,则可能会出现此问题。默认情况下,Windows Server 2008 R2 设置平衡(推荐)电源计划
Win2008R2 有一个可用的修补程序,并且建议更新 BIOS,但由于这仍然是 Win2012R2 的一个问题,因此似乎没有办法绕过第二个建议“高性能”计划。
具有类似症状的问题描述KB2534356它还提供了仅适用于 Win2008R2 的修补程序。因此对我来说,只有常用的解决方法(高性能计划)才适用,但听起来未来可能会修复。(它在台式机 CPU 上运行良好,所以我不明白为什么它不能在服务器上使用。)
如果我找到更好的解决方案,我会更新这个答案(或者如果其他人发布了解决方案,当然会更改接受的答案)。
仍然想知道 EC2 或 Azure 是否可能存在同样的问题(在这种情况下您将无法对此采取任何措施,因为您需要控制主机,更改 VM 中的设置不会产生任何影响)。
更多参考资料:
- 虚拟化时考虑 CPU 功率优化与性能(2011;2013 年的后续行动)
- DBPM 如何影响客户虚拟机性能(2013 年)
- 是否已实现高 CPU 就绪且 CPU 利用率低?(当 VMWare 遇到较高的“CPU 就绪”数字时,也给出同样的建议)
答案2
我只是偶尔看到这种情况。理论上,speedstep(似乎越来越成为不可配置的选项)不会影响您的性能。但是,当它降低时,您突然在单个虚拟机中变得繁忙,有时似乎处理器认为它不够用。我不确定这是 Microsoft 的问题,因为正如您所提到的,VMware 和 Cisco 有同样的问题。
答案3
这是服务器上用于移除 speedstep 的 bios 功能。在 IBM blade 上,这是默认 bios 选项:无 speedstep,有时无 turbo。查看博客技术细节:
https://workinghardinit.wordpress.com/tag/c-states/
“根据您的发现和需求,您可能只想在 BIOS 或 Windows 中关闭 SpeedStep 或 Cool'n'Quiet”因此,如果您遇到问题,只需将其关闭即可。
并且在 BIOS 中检查错误的 BIOS 中未关闭的虚拟指令。
不要忘记添加“hyperv 工具”,以便在旧操作系统上实现更好的“虚拟感知操作系统”。