AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 392216
Accepted
Steffen Opel
Steffen Opel
Asked: 2012-05-25 03:38:42 +0800 CST2012-05-25 03:38:42 +0800 CST 2012-05-25 03:38:42 +0800 CST

Windows 是否有等同于 Unix 的“CPU 窃取时间”?

  • 772

为了评估虚拟化平台上的性能监控准确性,CPU 窃取时间已成为一个越来越重要的指标 - 请参阅EC2 监控:在Amazon EC2和 IBM 关于CPU时间占概念的更深入的技术解释(包括插图):

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

因此,它在当今大多数相关的 Unix/Linux 监控工具中都有公开——参见例如列%steal或st insar或top:

st -- Steal Time
管理程序从该虚拟机“窃取”的 CPU 数量用于其他任务(例如运行另一个虚拟机)。

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

windows monitoring amazon-ec2 metrics cpu-usage
  • 2 2 个回答
  • 8683 Views

2 个回答

  • Voted
  1. Best Answer
    Ryan Ries
    2012-12-06T19:42:01+08:002012-12-06T19:42:01+08:00

    编辑:2013 年 10 月 1 日更新 - 我原来的一些答案已经过时了。

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

    首先让我说,我是从 Hyper-V 作为虚拟化平台的角度出发的,因为这是我最有经验的地方。尽管可能有某些虚拟化原则,正如我们所知,不能偏离,但 Microsoft 和 VMware 以及 Xen 在如何设计他们的虚拟机管理程序方面都有不同的策略。

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

    首先,让我直接回答你的问题:没有办法从运行 Windows 的虚拟机内部看到属于运行管理程序的物理机的处理器花费了多少时间做其他事情,除非特定的虚拟工具/您的特定管理程序的服务或虚拟化感知工具安装在来宾 VM 中,并且来宾运行的特定虚拟机管理程序将该数据公开给来宾。即使是在 Hyper-V 虚拟机管理程序上运行的 Windows 客户机也无法立即访问有关虚拟机管理程序上的物理处理器执行其他操作所花费时间的信息。(引用 voretaq7,“打破第四面墙”的东西。)即使 Windows 客户端和服务器操作系统在 Hyper-V 中作为虚拟化来宾运行,并安装了正确的集成服务/工具,也会使用“启蒙”(字面意思是内核专门针对 VM 进行的代码更改)显着提高了它们在使用物理主机资源方面的性能,底线是管理程序没有向客户操作系统提供比它想要的更多的信息。这意味着管理程序不必告诉访客 VM 除了为该 VM 提供服务之外它还在做什么……除非它愿意。关于物理处理器正在做什么的信息对于从 VM 的角度得出一个指标是必要的,例如“CPU 窃取时间:vCPU 等待物理 CPU 的时间百分比”。

    如果来宾操作系统甚至没有意识到它实际上是虚拟化的,它怎么会知道呢?

    换句话说,如果来宾没有安装正确的集成工具,来宾操作系统甚至不知道它的 CPU 实际上是一个v CPU。它甚至不知道在自身之外还有另一种力量从它那里“窃取”CPU 周期,因此该指标不会存在于来宾 VM 上。

    VMware 已开始将此数据公开给 Windows 来宾以及 ESXi 5.0。还需要在来宾上更新 VMware 集成工具。这是一个参考;他们将其称为“CPU 被盗时间”。

    诸如 Hyper-V 之类的虚拟机管理程序不会让来宾直接访问物理资源,例如物理处理器或处理器内核。相反,管理程序为他们提供 vDevs——虚拟设备——比如 vCPU。

    原因的一个主要示例:假设虚拟机来宾操作系统调用刷新 TLB(转换后备缓冲区),它是物理 CPU 的物理组件。如果来宾操作系统被允许清除物理处理器上的整个TLB,这将对所有其他也共享同一物理 TLB 的 VM 产生负面性能影响。在 Windows 的情况下,来宾操作系统中的该调用被翻译成由管理程序解释的“hypercall”或“启发式”调用,以便仅刷新与该虚拟机相关的 TLB 部分。


    (有趣的是,这向我暗示,没有适当集成工具和/或服务的来宾 VM 可能会影响同一主机上所有其他 VM 的性能,但这完全超出了本主题的范围.)


    综上所述,您仍然可以在 Hyper-V 主机中检测到虚拟处理器等待真实处理器可用的时间,以便它可以安排运行。但是您只能在 Windows Hyper-V 管理程序上看到该数据。如果可以在其他管理程序中看到它,我敦促其他人告诉我们如何在该管理程序中看到它,以及它是否暴露给来宾。 (编辑 10/1/2013 感谢 evilensky 这样做!)

    我的测试机器是 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 或所有 VM 之外的其他事情。

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

    我不知道在 Windows 客户机上,无论是否安装了集成工具,都无法查看 VM 的主机花费了多少时间(以秒或百分比表示)为它提供服务或不为它提供服务相对于总物理处理器时间。 (编辑 2013 年 10 月 1 日:ESXi 5.0 或更高版本通过集成工具将此数据公开给来宾 VM。不过在 Hyper-V 上仍然没有任何内容。)

    • 34
  2. uSlackr
    2012-05-25T04:49:37+08:002012-05-25T04:49:37+08:00

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

    • 2

相关问题

  • 知道任何适用于 Windows 的快速可编写脚本的 ftp 客户端吗?[关闭]

  • 如果 Windows 服务崩溃,如何自动重新启动它?

  • 无法安排任务(访问被拒绝)

  • 物理机重启时自动重启虚拟机(VMWare)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve