PowerShell for Windows Admins

Feb 28 2011   3:11PM GMT

WMI and performance counters II

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

 

In this post http://itknowledgeexchange.techtarget.com/powershell/wmi-and-performance-counters-i/ we looked at using WMI to retrieve performance counter information and looked at the

Win32_PerfFormattedData_PerfOS_Processor
Win32_PerfRawData_PerfOS_Processor

classes. We used the formatted data because the raw data needed some calculations performing.  The draw back to the formatted data is that it doesn’t contain the timestamp.  if we want the exact timestamp we need to work with the raw data.

If you run this

Get-WmiObject -Class Win32_PerfRawData_PerfOS_Processor -Filter "Name=’_Total’"

you will see similar results to the formatted data except that the numbers don’t seem to make sense – for instance I got

PercentProcessorTime  : 88950912194

Man that processor is busy!

OK we need to perform some calculations on this data.  We start by looking at the class documentation.  For each counter it will give something like this

PercentProcessorTime

Data type: uint64
Access type: Read-only
Qualifiers: DisplayName ( "% Processor Time") , PerfDefault, CounterType ( 558957824) , DefaultScale ( 0) , PerfDetail ( 100)

Percentage of time that the processor is executing a non-idle thread. This property was designed as a primary indicator of processor activity. It is calculated by measuring the time that the processor spends executing the thread of the idle process in each sample interval and subtracting that value from 100%. Each processor has an idle thread which consumes cycles when no other threads are ready to run. It can be viewed as the percentage of the sample interval spent doing useful work. This property displays the average percentage of busy time observed during the sample interval. It is calculated by monitoring the time the service was inactive, and then subtracing that value from 100%.

The important point is the counter type. The list of counter types can be found here

http://msdn.microsoft.com/en-us/library/aa389383(v=VS.85).aspx

Our counter type translates as PERF_100NSEC_TIMER_INV

OK that means a lot. Now what do we do with it. If we look up the type we get this

This counter type shows the average percentage of active time observed during the sample interval. This is an inverse counter. Counters of this type calculate active time by measuring the time that the service was inactive and then subtracting the percentage of active time from 100 percent.

and a formula of (1- ((N1 - N0) / (D1 - D0))) x 100

This means we need two measurements

$count1 = Get-WmiObject -Class Win32_PerfRawData_PerfOS_Processor -Filter "Name=’_Total’"
Start-Sleep -Seconds 10
$count2 = Get-WmiObject -Class Win32_PerfRawData_PerfOS_Processor -Filter "Name=’_Total’"

$ppt = (($count2.PercentProcessorTme – $count1.PercentProcessorTme) / ($count2.TimeStamp_sys100NS – $count1.TimeStamp_sys100NS)) * 100

"Percent processor time is $ppt"

 

This doesn’t give sensible answers so need to go back and dig a bit deeper.  I’m beginning to think that using the raw counters is too hard

 Comment on this Post

 
There was an error processing your information. Please try again later.
Thanks. We'll let you know when a new response is added.
Send me notifications when other members comment.

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Forgot Password

No problem! Submit your e-mail address below. We'll send you an e-mail containing your password.

Your password has been sent to: