当Windows 操作系统运行在Hyper-V平台上时,任务管理器很可能无法正确报告系统的资源信息,因为CPU等系统资源都是由Hypervisor层来管理和分配的。比如,我们在虚机中看到操作系统的CPU使用率是100%,那CPU使用率真的是100%吗?

“在 Hyper-V 虚拟机中运行来宾操作系统时所产生的CPU 开销的范围是 9% 到 12%。例如,在 Hyper-V 虚拟机中运行的来宾操作系统通常有 88–91% 的空闲 CPU 资源可用于在物理硬件上运行的对等操作系统。”

http://msdn.microsoft.com/en-us/library/cc768536(v=bts.10).aspx

那有什么工具可以很直观地呈现Hyper-V平台下各虚拟机的性能以帮助理解和必要时候的排查呢?MVP Tim Mangan 开发了HyperV_Mon这个工具,而且是免费发布的,现在的最新版本是2010年12月29日发布的1.8版本,可以到这里下载。

http://www.tmurgent.com/Tools.aspx

这个工具支持Hyper-V和Hyper-V R2,免安装,双击就可以运行。在WMI访问允许Hyper-V父分区的条件下,你可以直接在装有Hyper-V的Server 2008/2008 R2的主机上本地运行此工具,或点选Configure按钮配置你需要连接的Hyper-V主机名称或IP地址实现远程访问。出于对服务器影响最小化的考虑,推荐后者的访问方式。

7

初看这个界面你就会觉得界面的布局和下面一张Hyper-V的架构图很相似。界面的最下面黑色区域代表硬件层,包含了硬件信息的描述,中间的Hypervisor层区域,Total代表看到物理CPU的总使用率, Guest代表包括了父分区以及其他正在运行的VM操作系统的总使用率,注意,关键词是包括了父分区和正在运行。HvOh表示Hypervisor Overhead,这里的HvOh表示Hypervisor层自己的开销,它的开销数据代表着父分区和其他VM的开销。
 
左上方蓝色区域为父分区,它的HvOh开销多为文件或者网络的I/O,更多地最终表现为与虚拟机沟通过程相关的开销。而右上方黄色区域描述了正在运行的虚拟机的信息,这些将在下面的例子中展开说明。稍稍说明一下的是,
Memory和I/O功能显示在工具新版本中的功能,在看使用文档HyperV_Mon.pdf和看我的截图的时候,你可能有这样的疑问,例如会问为什么我截图中4台虚拟机有3台的Memory和I/O信息没有显示出来。这是正常的,因为这些虚拟机没有开启对父分区的WMI访问允许。
 

1


4

 

面我们做一个压力测试,分配Win7 虚拟机1个虚拟处理器,将CPU使用率提高,从任务管理器中可以看到CPU的资源使用率已经稳定地保持在100%了,事实上是这样吗?

2


我们从工具中看到,100%的CPU使用率,其实我们被任务管理器骗了。其实作者想说明 Win7这个虚拟机在CPU中的总使用率上占了40%左右 (第一次发文时候说80%,是错的)。为什么是40%呢,VM中的CPU使用率是与分给CPU的虚拟处理器相关的。我这里例子中,我只分了给这个VM 1个虚拟处理器,我的测试机是Dell的台式机,CPU是一个双核的单一CPU,所以Hypervisor层Logical显示为2,那80%除以2就是40%了。还不明白的话我下面的例子会做进一步对比说明。

3

 
我们再做一个压力测试,这次分配Win7 虚机2个虚拟CPU,从任务管理器中可以看到CPU的资源使用率稳定地保持在100%了,实际上呢?

6

 
Ok,这里再展开解释一下CPU的Guest,第1个VM, 8% 代表一个处理器的8% (或者说占了CPU总可用资源的4%),第2个VM分了2个虚拟处理器,那占了CPU资源的70%,所以,从图中可以得出,CPU的使用率为父分区14%,VM1 4%,VM2 70%, VM3 0%, VM4 0%的总和88%。下面Hypervisor层直接报告了CPU的使用率为89%,但是这个数字不是加起来的因为不可能同时要求所有组件报告当前信息。另外,这个开销是动态的,一直在变动。
 
7

 
为了更好地理解Hyper-V中CPU的性能,在使用文档HyperV_Mon.pdf第5页也做了一个展示。因为Hyper-V 中CPU是虚拟的,和物理CPU 没有一对一的必然关系,所以假如将压力都转移给其中一个虚拟CPU,在Hypervisor层可以看到对物理CPU 的开销几乎没有影响。

image

 
相信随着版本的更新,HyperV_Mon的功能将会越来越完善。介绍微软虚拟化工具的中文文档不多,此文作为新年一个开篇,给大家有需要的时候可以用作一个参考。

 

参考文档:
1. HyperV_Mon.pdf
2. http://msdn.microsoft.com/en-us/library/cc768536(v=bts.10).aspx