rea*_*idt 6 intel hyper-v hyper-v-server-2012-r2
我正在分析一个问题,即虚拟机内受 CPU 限制的工作负载的性能通常(并非总是)低于我们基于底层硬件的预期。
我们在 Windows Server 2012 R2 上使用 Hyper-V。该服务器具有双 Intel Xeon E5-2643 v2 @ 3.50 GHz。
以下是一些似乎相关的数字:
在只有几个核心的台式机上,一旦开始受 CPU 限制的活动,核心速度就会立即提高。
然而,在我们的 Hyper-V 主机上,只有当整个系统负载似乎很高几秒钟时,核心速度才会上升。现在,例如,如果您有一个虚拟机,在总共 24 个物理 CPU 中有 4 个虚拟 CPU(打开超线程),并且此虚拟机需要 CPU 功率,并且虚拟机内的任务管理器显示接近 100% 的 CPU 使用率,大部分时间是时钟物理CPU的速度不会上升,性能很差。
显然,这是不需要的行为。想想一个数据库服务器需要 3 倍的时间来回答查询,因为服务器没有“足够”的负载来提高 CPU 频率。那没有任何意义。
我发现了一篇博客文章,描述了2011 年VMWare 和 Cisco 刀片的完全相同的行为。我没有在其他任何地方找到有关此的信息。
我实际上能够通过切换到powercfg.cpl
. 我实际上获得了更好和更一致的性能,性能监视器显示了更低的负载数字。
(在较旧的服务器上,我发现了一个额外的设置“处理电源管理 | 最低处理器状态”,它可以设置为 100%,而不会禁用所有其他节能选项。新的只显示“系统冷却策略”,即“活动” ”即使是“平衡”计划,所以我唯一的选择是选择“高性能”。)
这真的是 Hyper-V 主机的最佳实践,还是有其他解决方法?如果 SpeedStep 真的是个问题,我想知道为什么他们甚至将它构建到服务器 CPU 中并默认启用它,为什么我从未在 Hyper-V 配置指南中阅读过有关此设置的信息?
经过更多的搜索,这似乎是现代服务器 CPU 的普遍问题,甚至与虚拟化无关,主要服务器供应商以及 Microsoft 和 VMWare 等软件供应商都使用默认设置来人为地限制您的 CPU 性能。我仍然觉得这很难相信。
对于任何关心立即访问每个内核的完整 CPU 功率而所有内核最初都不忙的人来说,解决方案是禁用节能(英特尔 SpeedStep/EIST 或 AMD Cool'n'Quiet)。根据您的 BIOS 设置,这可以在操作系统级别(如 Windows powercfg.cpl
“高性能”计划)或通过 BIOS 进行控制,在这种情况下,操作系统设置为灰色。
Brent Ozar 在 2011 年写道(“节能 CPU 上的 SQL Server?没那么快。”):
在过去的几周里,我看到了几个服务器升级导致性能下降的情况,其中一个关键因素是 CPU 的节流。理论上,服务器应该根据需求启动果汁,但实际上,情况很少如此。服务器制造商在 BIOS 中隐藏了省电设置,而 Windows Server 附带了一个默认的省电选项,该选项经常会降低 CPU 的速度。
微软在KB2207548 中说:
在某些情况下,使用默认(平衡)电源计划运行时,您可能会遇到 Windows Server 2008 R2 计算机的整体性能下降。无论平台如何,该问题都可能发生,并且可能在本机和虚拟环境中出现。性能下降可能会增加某些任务的平均响应时间,并导致 CPU 密集型应用程序出现性能问题。[...] 如果电源选项设置设置为平衡,则可能会出现此问题。默认情况下,Windows Server 2008 R2 设置平衡(推荐)电源计划
Win2008R2 有可用的修补程序,建议更新 BIOS,但由于 Win2012R2 仍然存在此问题,因此似乎无法绕过第二个建议,即“高性能”计划。
KB2534356中描述了一个具有类似症状的问题,它还提供了仅适用于 Win2008R2 的修补程序。所以对我来说,只有通常的解决方法适用(高性能计划),但听起来将来可能会修复。(它在台式机 CPU 上效果很好,所以我不明白为什么它不能在服务器上实现。)
如果我可能找到更好的解决方案,我将更新此答案(或者,如果其他人发布解决方案,当然会更改已接受的答案)。
仍然想知道 EC2 或 Azure 是否可能有同样的问题(在这种情况下,您将无法对此做任何事情,因为您需要控制主机,更改 VM 中的设置不会产生任何影响)。
还有一些参考:
归档时间: |
|
查看次数: |
12724 次 |
最近记录: |