Microsoft.SystemCenter.VirtualMachineManager.HyperVHost.PercentProcessorTime (Rule)

Element properties:

TargetMicrosoft.SystemCenter.VirtualMachineManager.Discovery.HyperVHost
CategoryPerformanceHealth
EnabledTrue
Alert GenerateFalse
RemotableTrue

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.SystemCenter.VirtualMachineManager.Report.TimedPowerShell.PerformanceProvider Default
WriteToDB WriteAction Microsoft.SystemCenter.CollectPerformanceData Default
WriteToDW WriteAction Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData Default

Source Code:

<Rule ID="Microsoft.SystemCenter.VirtualMachineManager.HyperVHost.PercentProcessorTime" Enabled="true" Target="VMMDiscovery!Microsoft.SystemCenter.VirtualMachineManager.Discovery.HyperVHost" ConfirmDelivery="false" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>PerformanceHealth</Category>
<DataSources>
<DataSource ID="DS" TypeID="Microsoft.SystemCenter.VirtualMachineManager.Report.TimedPowerShell.PerformanceProvider">
<IntervalSeconds>600</IntervalSeconds>
<ScriptName>GetHyperVHostCPU.ps1</ScriptName>
<ScriptBody><Script># Copyright (c) Microsoft Corporation. All rights reserved.
# Powershell source code
# GetHyperVHostCPU.ps1

$momAPI = new-object -comObject MOM.ScriptAPI
$error.Clear();
$oBag = $momAPI.CreatePropertyBag();

$timeout = 540000;
$F, $T1, $P1, $T2, $P2, $CPU;

$colItems = gcim Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor;
$LPCount = $colItems.Count - 1;

if($LPCount -lt 1){
Exit-PSSession;
}

$colItems = gcim Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor -Filter "Name='_Total'"
foreach($objItem in $colItems){
$T1 = $objItem.PercentTotalRunTime;
$P1 = $objItem.Timestamp_PerfTime;
}

Start-Sleep -m $timeout;

$colItems = gcim Win32_PerfRawData_HvStats_HyperVHypervisorLogicalProcessor -Filter "Name='_Total'";

foreach($objItem in $colItems){
$F = $objItem.Frequency_PerfTime;
$T2 = $objItem.PercentTotalRunTime;
$P2 = $objItem.Timestamp_PerfTime;
}

# Calculate CPU readings with formula
$CPU = ($T2 - $T1) / ($P2 - $P1);
$CPU = ($F * $CPU) / $LPCount;
$CPU = [int]($CPU / 100000);

if($CPU -gt 100){
$CPU = 100;
}

if($CPU -lt 0){
$CPU = 0;
}

$oBag.AddValue("CPUUtilization", [int]$CPU);
$oBag;</Script></ScriptBody>
<TimeoutSeconds>600</TimeoutSeconds>
<ObjectName>HyperV Logical Processor</ObjectName>
<CounterName>%Total Run Time</CounterName>
<InstanceName>_Total</InstanceName>
<Value>$data/Property[@Name='CPUUtilization']$</Value>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="WriteToDB" TypeID="SC!Microsoft.SystemCenter.CollectPerformanceData"/>
<WriteAction ID="WriteToDW" TypeID="SCDW!Microsoft.SystemCenter.DataWarehouse.PublishPerformanceData"/>
</WriteActions>
</Rule>