使用虚拟 CPU 性能监控计数器
search cancel

使用虚拟 CPU 性能监控计数器

book

Article ID: 311259

calendar_today

Updated On:

Products

VMware Desktop Hypervisor VMware vCenter Server VMware vSphere ESXi

Issue/Introduction

Symptoms:
免责声明:本文为 Using Virtual CPU Performance Monitoring Counters (2030221) 的翻译版本。尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。有关最新内容,请参见英文版本。


CPU 性能监控计数器 (PMC) 为软件提供了一种监控和衡量处理器性能的方法。这些计数器通常由诸如软件探查器等工具使用。从具有 ESX 5.1 及更高版本兼容性(硬件软件 9)的虚拟机开始,可以启用虚拟性能监控计数器 (vPMC) 功能以允许在虚拟机中运行的软件访问此性能信息,如在物理机中运行一样。

最低要求

  • Intel Nehalem Generation 或更高版本处理器,或 AMD Opteron Generation 3 (Greyhound) 或更高版本处理器。
  • 必须在 BIOS 中启用 Intel VT-x 或 AMD-V 才能使硬件辅助虚拟化可行。

虚拟性能计数器型号特定的寄存器 (MSR)

启用虚拟 CPU 性能监控计数器后,以下 MSR 会虚拟化并可用于客户机操作系统。

Intel CPU
  • IA32_PERFEVTSELx
  • IA32_PMCx
  • IA32_FIXED_CTRx
  • IA32_PERF_GLOBAL_CTRL
  • IA32_PERF_GLOBAL_STATUS
  • IA32_PERF_GLOBAL_OVF_CTRL
  • IA32_FIXED_CTR_CTRL

AMD CPU

  • PERF_CTLx
  • PERF_CTRx


Environment

VMware vCenter Server 5.1.x
VMware Workstation 9.x (Linux)
VMware Workstation 9.x (Windows)
VMware Fusion 5.x
VMware vSphere ESXi 5.1

Resolution

虚拟 PMC 的访问方式与基础物理 CPU 的 PMC 访问方式相同。有关详细信息,请参见《Intel 64 和 IA-32 体系结构软件开发人员手册》和《AMD BIOS 和内核开发人员指南 (BKDG)》

启用虚拟 CPU 性能监控计数器

可以通过 vSphere Web Client 启用虚拟 CPU 性能监控计数器。请参见 Enable Virtual CPU Performance Counters in the vSphere Web Client

事件计数

虚拟 PMC 可以与物理 CPU 的 PMC 一样对相同的处理器核心事件进行计数。但是,由于虚拟机的虚拟 CPU 可以取消调度一段时间,并且某些客户机指令可以由管理程序仿真,而不是直接由物理 CPU 停用,因此 PMC 无法直接传递到虚拟机。相反,通过管理程序访问 PMC。通过设置 .vmx 文件中的以下虚拟机配置选项,可以控制虚拟 PMC 事件计数行为:
选项描述

vpmc.freezeMode=hybrid

这是默认行为。instructions retired branches retired 事件仅对客户机指令进行计数。当 CPU 执行管理程序指令时,这些事件不会增加。所有其他事件都会增加,无论物理 CPU 代表虚拟机执行客户机指令还是管理程序指令。当虚拟机未在物理 CPU 上调度时,其虚拟 PMC 始终停止增加。通过这种方式,涉及客户机指令的比率的衡量指标可用于计算在虚拟机上执行这些指令的成本。例如,每个周期的指令数 (IPC) 表示物理 CUP 用来执行虚拟机的每个周期停用的客户指令的平均数量。

vpmc.freezeMode=guest

仅当直接在物理 CPU 上执行客户机指令时,所有事件才会增加。当管理程序代码正在执行时,不会增加任何事件。

vpmc.freezeMode=vcpu

当物理 CPU 正在用于代表虚拟机执行客户机代码或管理程序代码时,所有事件都会增加。仅当虚拟机取消调度时,事件才会停止增加。


可用的性能监控计数器

在某些情况下,性能监控计数器无法虚拟化。当主机已在使用物理 CPU 性能计数器用于其他用途(如以下情况)时会出现此情况:

  • 主机 BIOS 可能使用了一个或多个 PMC。
  • 在 ESX 上,VMkernel 可能使用 PMC 供内部使用。
  • 在 Workstation 和 Fusion 上,主机操作系统或主机上正在运行的探查器可能使用了一个或多个 PMC。
  • Fault Tolerance 功能可能使用了一个或多个 PMC。
一般而言,如果物理 CPU PMC 正在使用中,相应的虚拟 CPU PMC 可能会不起作用,并且不可供客户机使用。通过在虚拟机打开电源时检查非零事件选择 MSR 值,客户机操作系统软件检测到不可用的常规用途的 PMC。通过检查 IA32_FIXED_CTR_CTRL MSR 中相应的非零启用位,客户机软件检测到不可用的固定功能的 PMC。
如果主机正在使用以下固定功能的性能计数器,则可以仿真该虚拟 PMC:
  • 未暂停的核心周期
  • 未暂停的引用周期
仿真周期计数器时,仅当编程为在操作系统和用户模式下计数时,计数器才可正常运行。此外,仿真的核心周期计数器可以对引用周期而不是核心周期进行计数。


vMotion 和检查点兼容性

启用虚拟 PMC 功能时,还会在虚拟机在主机间迁移之前执行其他 CPU 兼容性检查。源和目标 CPU 的性能监控事件必须可兼容。源和目标 CPU 上的性能监控事件列表必须相同。一般而言,如果两个 CPU 属于同一微架构,则它们拥有可兼容的性能监控事件。有关每个 CPU 的性能监控事件列表,请参见《Intel 64 和 IA-32 体系结构软件开发人员手册》和《AMD BIOS 和内核开发人员指南 (BKDG)》。此外,要成功迁移虚拟机,源 CPU 上可用的所有计数器也必须在目标 CPU 上可用。

Enhanced vMotion Compatibility

无法在使用 Enhanced vMotion Compatibility 的虚拟机中启用虚拟性能监控计数器。


Additional Information

Using Virtual CPU Performance Monitoring Counters