Veeam Hyper-V: VM CPU Scheduling Analysis

Veeam.Virt.Extensions.HyperV.VM.Monitor.AvgDispatchWaitTime (UnitMonitor)

Knowledge Base article:

Summary

This monitor tracks threshold breaches for the following metric:

Causes

This is a normal behavior for a Hyper-V host to take some time to schedule its shared CPU resources across all VMs. However, hidh CPU dispatch wait time values may indicate a lack of CPU resources or a scheduling bottleneck.

Resolutions

Review CPU demands from all VM workloads on this host. Although this is a VM-level alert, check average dispatch wait time and CPU usage statistics for all VMs on this host.

High dispatch wait time values for one VM on the host may indicate inappropriate or misconfigured CPU settings for the VM, or excessive CPU demand which the host cannot meet.

Ops Mgr 2012 and 2016 customers can use the in-context dashboards, available in the Navigation section of the Tasks pane, to drill down into historical performance data and current alerts. These dashboards will show relevant metrics for this object and for contained objects, and further dashboards will become available by selecting within the dashboard. Drill-down from dashboard to dashboard to arrive at the detailed metrics that can assist in finding root-cause.

In particular the 'VM CPU Analysis' dashboard will show historical values of CPU metrics. The dashboard will also display all alerts triggered for the VM and the in-guest Ops Mgr agent (if installed), so that you can review in-guest alerts to understand CPU demands from application workloads inside the VM.

Use the Alerts View to see all current open issues for this object. Use the Events View to review any error and warning events for this object. Open a Performance View to see the performance metrics for this object and all contained objects. Open a Diagram View to analyze the relationships of this object to other components.

External

See the Help Center for more information including reference lists of all Rules and Monitors and User Guide for the Veeam Hyper-V MP.

See the Microsoft Online Documentation for more information on Microsoft Hyper-V.

Element properties:

TargetVeeam.Virt.Extensions.HyperV.VirtualMachine
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityMatchMonitorHealth
Alert PriorityHigh
Alert Auto ResolveTrue
Monitor TypeVeeam.Virt.Extensions.HyperV.MonitorType.VMPerf.CPUScheduling
RemotableTrue
AccessibilityPublic
Alert Message
Veeam Hyper-V: VM CPU Scheduling Analysis

The virtual machine {0} running on Host {1} has high CPU Dispatch Wait time of {2}\% over {3} samples. With maximum wait time across all vCPUs {4}\% This could indicate potential issues with resources on the host.

Virtual CPU Core Usage:
{5}

Use in-context Dashboard VM CPU Analysis to review VM resource consumption and in-guest performance metrics.
RunAsDefault

Source Code:

<UnitMonitor ID="Veeam.Virt.Extensions.HyperV.VM.Monitor.AvgDispatchWaitTime" Accessibility="Public" Enabled="onEssentialMonitoring" Target="VVEHL!Veeam.Virt.Extensions.HyperV.VirtualMachine" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Veeam.Virt.Extensions.HyperV.MonitorType.VMPerf.CPUScheduling" ConfirmDelivery="true">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Veeam.Virt.Extensions.HyperV.VM.Monitor.AvgDispatchWaitTime_AlertMessageResourceID">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>High</AlertPriority>
<AlertSeverity>MatchMonitorHealth</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type="System!System.Entity"]/DisplayName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type="VVEHL!Veeam.Virt.Extensions.HyperV.VirtualMachine"]/HostName$</AlertParameter2>
<AlertParameter3>$Data/Context/DataItem/Property[@Name='AvgValue']$</AlertParameter3>
<AlertParameter4>$Data/Context/DataItem/Property[@Name='SampleCount']$</AlertParameter4>
<AlertParameter5>$Data/Context/DataItem/Property[@Name='MaxValue']$</AlertParameter5>
<AlertParameter6>$Data/Context/DataItem/Property[@Name='UsageByCore']$</AlertParameter6>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="UnderThreshold1" HealthState="Success" MonitorTypeStateID="UnderThreshold1"/>
<OperationalState ID="OverThreshold1UnderThreshold2" HealthState="Warning" MonitorTypeStateID="OverThreshold1UnderThreshold2"/>
<OperationalState ID="OverThreshold2" HealthState="Error" MonitorTypeStateID="OverThreshold2"/>
</OperationalStates>
<Configuration>
<VMID>$Target/Property[Type="VVEHL!Veeam.Virt.Extensions.HyperV.VirtualMachine"]/id$</VMID>
<VMName>$Target/Property[Type="VVEHL!Veeam.Virt.Extensions.HyperV.VirtualMachine"]/VMName$</VMName>
<Threshold1>8</Threshold1>
<Threshold2>10</Threshold2>
<NumSamples>3</NumSamples>
<Frequency>300</Frequency>
</Configuration>
</UnitMonitor>