我有一个专用的 Hyper-V 服务器设置,带有 4 个虚拟机。
登录到运行 XP 并安装了集成服务的虚拟机之一。
所有其他虚拟机都处于空闲状态。
使用 Windows 任务管理器监控服务器和虚拟机上的 CPU 使用情况。
例如,如果我启动 Visual Studio,则虚拟机上的 CPU 会一直保持在 100%,直到应用程序加载完成。然而在此期间,Hyper-V 服务器上的所有核心都不会波动。几乎就像什么都没发生一样。
我如何才能让我的虚拟机利用更多主机的 CPU 时间?
答案1
任务管理器不显示总处理器时间,它仅显示根分区的处理器时间。请参阅以下文章,了解如何确定总处理器使用量:
看:http://blogs.msdn.com/tvoellm/archive/2009/04/23/monitoring-hyper-v-performance.aspx 去引用:
处理器:
通过“Hyper-V 虚拟机管理程序”计数器集了解了整个系统的功能和配置后,您将需要监控系统上的处理器。要监控的最重要的计数器集是“Hyper-V 虚拟机管理程序逻辑处理器”。此计数器集允许您确定物理处理器的使用量。虚拟处理器计数器集仅显示“Hyper-V 虚拟机管理程序逻辑处理器”的一部分。
Hyper-V 虚拟机管理程序逻辑处理器
Hyper-V 虚拟机管理程序根虚拟处理器
Hyper-V 虚拟机管理程序虚拟处理器
答案2
我不确定你在这种情况下是否需要担心。也许客户机 CPU 在自旋锁上浪费了时间。而主机正在优化它们。摘自 Windows Server 性能团队博客
然而,操作系统内核和驱动程序使用自旋锁,这种锁不会阻塞,而是一直旋转直到获得锁为止,前提是锁只保持一小段时间。虚拟化打破了这一假设,因为虚拟处理器 (VP) 是按时间分片的。如果某个 VP 在保持自旋锁时被抢占,其他 VP 可能会旋转很长时间,从而浪费 CPU 周期。
我们对虚拟机管理程序和 Windows Server 2008 内核进行了创新,试图防止长时间旋转等待的情况,并在发生这种情况时有效地检测和处理它们......
要检查这一点。尝试运行一个使用 CPU 进行计算的程序(具有最少的内存访问),并查看主机如何反应。