Windows是否相当于Unix的“ CPU窃取时间”?


24

为了评估性能的虚拟化平台监测精度,占用CPU时间已成为一个日益相关的指标-见EC2监控:被盗CPU的情况下,在上下文中的启发总结亚马逊EC2和IBM的纸张上的CPU时间占了一该概念的更深入的技术说明(包括插图):

窃取时间是在管理程序为另一个虚拟处理器提供服务时,虚拟CPU等待实际CPU的时间的百分比。

因此,它在当今大多数相关的Unix / Linux监视工具中都已公开-例如,参见%stealst in sar或列top

st-窃取时间
虚拟机管理程序从此虚拟机“偷”用于其他任务(例如运行其他虚拟机)的CPU数量。

我一直无法弄清楚如何在Windows上捕获相同的指标,这是否可能?(理想情况下,对于EC2上的Windows 2008 Server R2 AMI,当然也可以通过相应的Windows性能计数器。)

Answers:


33

编辑:2013年10月1日更新-我的一些原始答案此后已过时。

我不确定您是否仍然在该站点上活跃或者是否会看到此消息,但我想让您知道我今天读了这个问题,它使我着迷,所以我整整度过了(当我应该一直在研究)Hyper-V和Windows内部,甚至深入研究虚拟化本身的概念,希望我可以准备回答您的问题。

首先,我要说的是,我来自Hyper-V作为虚拟化平台的观点,因为这是我最有经验的地方。正如我们所知,尽管可能存在某些虚拟化原则,但这些原则不能被偏离,但是Microsoft和VMware和Xen都在如何设计虚拟机管理程序方面拥有不同的策略。

这是使您的问题具有挑战性的第一件事。您提出的问题好像是与虚拟机管理程序无关的,实际上并非如此。例如,Amazon EC2使用Xen虚拟机管理程序,并且top在该虚拟机管理程序上运行的Linux VM内发出的命令输出中看到的“ CPU窃取时间”指标是该来宾OS上安装的集成服务的结果(或客户机上的虚拟化感知工具)与该特定虚拟机管理程序提供的数据结合使用。

首先,让我直接回答您的问题:在运行Windows的虚拟机内部,无法看到属于运行管理程序的物理机的处理器花了多少时间做其他事情,除非特定的虚拟工具/来宾VM中安装了针对特定虚拟机管理程序的服务或支持虚拟化的工具,并且来宾运行的特定虚拟机管理程序会将数据公开给来宾。即使是在Hyper-V虚拟机管理程序上运行的Windows来宾,也无法立即访问有关虚拟机管理程序上的物理处理器执行其他操作所花费的时间的信息。(引用voretaq7,这“打破了第四道墙。”)即使Windows客户端和服务器操作系统在Hyper-V中作为虚拟来宾运行并安装了正确的集成服务/工具,也使用了“启示”(实际上是内核)密码的改变尤其是对于虚拟机)是显著增加使用物理主机的资源,他们的表现让,底线是管理程序不具有向访客操作系统提供比其期望更多的信息。这意味着管理程序不具有告诉客户VM还有什么它除了服务该VM ...除非它想干什么。从VM的角度得出度量标准,例如“ CPU Steal Time:vCPU等待物理CPU的时间百分比”,有关物理处理器正在做什么的信息是必需的。

如果来宾OS甚至没有意识到它实际上是虚拟化的,如何知道呢?

换句话说,如果在客户机上未安装正确的集成工具,则客户机OS甚至不会知道其CPU实际上是v CPU。它甚至不知道在其自身之外还有其他力量在“窃取” CPU周期,因此该指标将不存在于来宾VM上。

VMware已开始将此数据公开给Windows guest虚拟机和ESXi 5.0。VMware集成工具也需要在客户机上进行更新。这是参考 ; 他们将其称为“ CPU被盗时间”。

诸如Hyper-V之类的管理程序无法使访客直接访问诸如物理处理器或处理器核心之类的物理资源。相反,管理程序为它们提供了vDev-虚拟设备-如vCPU。

原因的一个典型示例:假设虚拟机来宾OS进行调用以刷新TLB(转换后备缓冲区),后者是物理CPU的物理组件。如果允许来宾OS清除物理处理器上的整个 TLB,则这对于共享相同物理TLB的所有其他VM也会产生负面性能影响。对于Windows,将来宾OS中的该呼叫转换为由管理程序解释的“超级呼叫”或“启迪”呼叫,以便仅刷新与该虚拟机相关的TLB部分。


(有趣的是,这提示我,没有适当集成工具和/或服务的来宾VM可能具有影响同一主机上所有其他VM的性能的能力,但这完全不在本主题的讨论范围内。 )


所有这一切说,你可以在Hyper-V主机仍然检测到一个虚拟处理器花在等待一个真正的处理器可用,以便它可以调度运行的时间。但是您只能在Windows Hyper-V管理程序上看到该数据。如果有可能在其他虚拟机监控程序中看到此消息,我敦促其他人告诉我们如何在该虚拟机监控程序中看到此消息,以及是否将其暴露给来宾。 (编辑2013年10月1日,谢谢您的这么做!)

我的测试机器是Hyper-V Server 2012,它是Server 2012的免费版本,仅运行Core和Hyper-V角色。它实际上与任何运行Hyper-V的Windows Server 2012相同。

在父分区(也称为物理主机)上启动Perfmon。加载此计数器:

Hyper-V Hypervisor Virtual Processor\CPU Wait Time Per Dispatch\*

您会注意到,该虚拟机管理程序上的每个虚拟机以及_Total都有该计数器的一个实例。该Perfmon计数器的Microsoft定义是:

等待将虚拟处理器分派到逻辑处理器上的平均时间(以纳秒为单位)。

显然,您希望该数字尽可能低。对于计算机,等待几乎不是一件好事。

在管理程序的其他性能计数器,你将要调查的Hyper-V Hypervisor Root Virtual Processor\% Guest Run Time% Hypervisor Run Time% Total Run Time。这些计数器为您提供可用于确定事实,如“真实”的处理器花了多少时间做的事情百分比其他比维护一个虚拟机或所有虚拟机。

因此,总而言之,您在来宾虚拟机中寻找的指标取决于其运行的虚拟机监控程序,该虚拟机监控程序是否选择提供有关其如何花费时间而不是为该VM提供服务的数据,以及该来宾虚拟机是否操作系统拥有正确的虚拟化集成工具/服务/驱动程序,足以意识到管理程序正在使该数据可用。

我不知道是否在Windows guest虚拟机上安装或未安装集成工具,以查看VM主机花费了多少时间(以秒或百分比为单位),分别占总物理处理器时间的多少。 (2013年1月1日编辑:ESXi 5.0或更高版本通过集成工具将此数据公开给来宾VM。不过,在Hyper-V上仍然没有。)


1
+1-史诗般的答案是史诗般的
马克·亨德森

1
+1的确是深入探索,非常感谢。因此,对于EC2来说,显然可以归结Xen paravirtual为以半虚拟化模式运行的Unix / Linux来宾,该模式是半虚拟化域(即,不是完全虚拟化,来宾OS已修改为可以在主机上运行),与Windows / FreeBSD相比,这里具有窃取时间。 / ...在中运行的guest 虚拟机Xen HVM,这是一个硬件仿真域(即,未修改guest虚拟机操作系统以使其在主机上运行),显然不是-在肯定的否定答案中,这才是最重要的。我是否正确阅读了有关它最终会被添加的信息?
斯特芬·欧宝

2
从理论上讲,它可以使您屏住呼吸。就像我说的那样,这要求特定于供应商的虚拟机管理程序和特定于供应商的来宾OS协同工作,以使有关物理主机的数据在来宾VM中可用和可访问。 wiki.xen.org/wiki/Xen_Kernel_Feature_Matrix
Ryan Ries

2
切线:VMware虚拟机管理程序将窃取团队称为准备时间,即虚拟CPU等待由物理资源提供服务的时间。
Yolo Perdiem

1
这是大型机上的一个众所周知的话题。该指标已经使用了数十年。它称为“ CPU等待”。

2

FWIW,我只是查看了在Hyper-V下运行的Windows 2008r2服务器的Perfmon计数器,没有发现任何与盗用时间相关的信息(或与此相关的虚拟化)。


感谢您的检查-Hyper-V的虚拟计数器显然应该真正可用,也许必须首先以某种方式安装/激活它们?但是,我仍然无法识别/推断出类似/相关的指标。
斯特芬·欧宝
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.