How SCVMM Determines CPU Average Displayed in the Admin Console

This article describes the performance metrics details that SCVMM collects and how to make sense of performance information that is displayed in SCVMM.

VMM uses a periodically running performance refresher that gathers performance data from Hosts and virtual machines (VMs) and stores it in the VMM database to be used by the Intelligent Placement feature (this is the nifty star rating prioritization of hosts that you see when you try to migrate a VM or when you try to create a new VM). Besides Intelligent placement purposes, the UI (SCVMM Administrator Console) also displays this performance data. This refresh happens every 9 minutes by default and can also be triggered as a side effect of certain SCVMM actions (explained below). With every refresh, SCVMM gets the average of every metric over the past 9 minutes. Here is how it’s done on different platforms.

Hyper-V – Hyper-V hosts** expose certain performance counters for a physical host and the virtual machines residing on it. SCVMM Server talks to each Hyper-V host over WSMAN to gather these performance metrics for the host and its VMs. SCVMM collects virtual machine performance metrics directly from its host because of some limitations of what a virtual machine understands about its true performance. Here a few interesting metrics explained.

1- Host CPU Average is exposed in SCVMM console as the “%Total Run Time” counter of “Hyper-V Hypervisor Logical Processors(_Total)” counter set*** averaged over past 9 minutes. This counter captures processor utilization being caused on the host (parent partition) and by the VMs. This value and other host performance metrics could be refreshed on demand as part of Refresh-VMHost or Refresh task in the SCVMM Console. Note that this value is different than what the Host’s Task Manager or %Processor Time(_Total) counter would show, which only considers parent partition utilization.

2- VM CPU Average is exposed in SCVMM console as the “%Guest Run Time” counter of “Hyper-V Hypervisor Virtual Processor(_Total)” counter set . This is the percent of time spent by the virtual processor(s) that run the VM. Since Hyper-V allows control of how many processors and what percent of their capacity can be assigned to a VM, the Guest Run Time counter value can never exceed the specified limit. Note that this is very different from the VM CPU% displayed in Hyper-V console, in which CPU utilization is displayed as VM Host Logical Processors utilization.

For example: The Hyper-V VM settings shown in the image below have been intentionally allotted 60% of 2 processors capacity. So, if this VM’s utilization is 100% from inside the guest, this VM is actually using 60% of the 2 virtual processors assigned to it from a Host perspective. The SCVMM console would show ~60% in this case, Hyper-V console will show ~30% for this VM.

The reason the Hyper-V console shows 30% is because the physical system has 4 logical processors. Thus 60% of 2 logical processors assigned to the VM is 30%. The 60% that SCVMM shows in the UI is averaged/tiered over the last 9 minutes and is not an instant value for a point-in-time CPU percentage of a VM.

*= default time interval of performance refresh, which is configurable through registry for troubleshooting purposes

**= Windows Server computer with HyperV role enabled

***= All counter sets on a computer can be seen using Performance Monitor (perfmon.exe).

VMware – SCVMM talks to Virtual Center server to get performance metrics for all its Hosts and their VMs.