我正在分析一个问题,即虚拟机中受 CPU 限制的工作负载的性能通常(并非总是)远低于我们基于底层硬件的预期。
我们在 Windows Server 2012 R2 上使用 Hyper-V。该服务器具有双 Intel Xeon E5-2643 v2 @ 3.50 GHz。
以下是一些似乎相关的数字:
- Hyper-V 管理程序逻辑处理器,% 总运行时间,实例 _Total:平均 20%
- Hyper-V Hypervisor Virtual Processor, CPU Wait Time Per Dispatch, Instance _Total: Average 20000到另一个 VM 的逻辑 CPU;似乎转换为 2% 的开销)
- Hyper-V 管理程序逻辑处理器,最大频率百分比,实例 _Total:平均 34%
- CPU-Z 工具显示两个处理器的核心 #0 的大部分时间都在 1200 MHz 左右(与性能监视器报告的最大频率百分比非常匹配)
在只有几个内核的桌面上,一旦 CPU 密集型活动开始,内核速度就会立即提高。
然而,在我们的 Hyper-V 主机上,核心速度似乎只有在整体系统负载似乎高了几秒钟的情况下才会上升。现在,例如,如果您的 VM 具有总共 24 个物理 CPU 中的 4 个虚拟 CPU(启用了超线程),并且该 VM 需要 CPU 电源,并且 VM 内的任务管理器显示几乎 100% 的 CPU 使用率,大部分时间是时钟物理CPU的速度不会上升,性能很差。
显然这是不受欢迎的行为。考虑一个数据库服务器,它需要 3 倍的时间来回答查询,因为服务器没有“足够”的负载来提高 CPU 频率。这没有任何意义。
我发现一篇博客文章描述了 2011 年以来 VMWare 和 Cisco 刀片的完全相同的行为。我在其他任何地方都没有找到这方面的信息。
实际上,我可以通过切换到 Windows 中的“高性能”电源计划来摆脱这种行为powercfg.cpl
,但代价是用电量增加了大约 30%。我实际上获得了更好和更一致的性能,并且性能监视器显示了更低的负载数字。
(在较旧的服务器上,我发现了一个附加设置“处理电源管理 | 最低处理器状态”,可以设置为 100% 而无需禁用所有其他省电选项。新的仅显示“系统冷却策略”,它处于“活动”状态“即使是“平衡”计划,所以我唯一的选择是选择“高性能”。)
这真的是 Hyper-V 主机的最佳实践,还是有其他解决方法?如果 SpeedStep 真的是个问题,我想知道为什么他们甚至将其构建到服务器 CPU 中并默认启用它,以及为什么我从未在 Hyper-V 配置指南中阅读过有关此设置的信息?