Windows Performance Monitor and Disk usage
How to use Windows Performance Monitor to see the amounts of IOPS, the average disk latency, the average IO size and the throughput of the disk subsystem.
Please see this post for a detailed description of what these terms mean. We will need to have that information before having any use of Performance Monitor.
We will use this classic tool, which has been available in all versions of Windows since a very long time.
Once started, begin with removing any counters already present. Different versions of Perfmon has different pre-loaded counters and to make to output more clear please select them all and press the DEL key. Read also this post for more information on tweaking Performance Monitor be more useful.
Now press the + sign above the graphs and select “Performance Objects”. (This is the view on Windows Server 2008 R2, different versions of Microsoft operating systems has slightly different interfaces here). Among all of these objects you should find “Physical Disk“, select that and a list of available counters should appear below.
Important: Begin with selecting the correct instance! This is just the physical disk that you want monitor, see picture above. By default it will select _Total, which will be the sum of all physical disks you have available and the data will be more or less useless. If not changing this from the start we have to redo the adding of the counters. Always begin by selecting the instance you want to monitor, in the example above the Disk 1 (containing the D: partition).
This GUI also looks somewhat different between Windows Server 2003 and 2008 R2.
Now select the four counters below and we will then look what they represents.
Avg. Disk Bytes / Transfer
Avg. Disk sec / Transfer
Disk Bytes / sec
Disk Transfers / sec
Remember to click Add when selecting each one, it is easy to forget. Now if you like you can do some changes on the Perfmon window. If you would like to just observe the current values only, go to the graph tab and change “view” from Line to Report.
This will give a very clear view similar to this below, where you can observe the actual values only, (a bit like RESXTOP if having worked with the tool in Vmware).
If you would like to see both actual, minimum, maximum and average it is best to leave default graph style to Line.
So, how do these numbers shown here relate to more commonly used storage terms?
Common term | Perfmon Counter name |
Average IO Size | = Avg. Disk Bytes / Transfer |
Average Latency | = Avg. Disk sec / Transfer |
Throughput | = Disk Bytes / sec |
IOPS | = Disk Transfers / sec |
Some notes regarding these values:
Latency is normally expressed in milliseconds (ms), but Perfmon does display the value in seconds, for example 0.015 seconds = 15 ms.
Throughput is often expressed in MB/sec, but Perfmon in Windows 2003 displays this in Bytes/second, e.g. 382,090,819 meaning 382 MB/s. It would be nice to have to possibility to customize the output of this in Perfmon, but unfortunately that is not an option.
We can observe the current value of the selected counter, here Disk Bytes/sec, i.e. throughput and also the average as well as Min/Max. To change the observation time see this.
If we want the see differences between read and write request then all four of these values are available in separated Read/Write settings. This means that for example see the differences in latency between read and write request you could select “Avg. Disk sec/Read” and “Avg. Disk sec/Write” instead of “Avg. Disk sec/Transfer” (which gives the total).
If you have any questions or comments, please add a comment below.
Hi Rickard Nobel,
Really good and simple.
Good job!
Thanks for your comment Dhakshinamoorthy, I hope you have good use for the performance counters.
Really Helpful .. Thanks a lot.
Hi Rickard Nobel,
Great article ! My laptop disk is SATA 5400 rpm, so its max IOPS is 90. But when I use PerfMon to monitor IOPS (Disk Transfers / sec), this number can reach 200. I don’t understand why IOPS can exceed its max IOPS.
Please help to explain for me.
Many thanks
Hello Duy,
and thank you for your message.
The fact that you see higher than expected IOPS from a simple SATA disk comes from the actual access patern. The “IOPS” expected from a certain disk is often a worst case number coming from pure “random” access that forces the disk arm to move very often.
However, if your application is doing sequential reads or writes then the IO per seconds could be greatly higher. Even a SATA disk could have very high number in this case.
Hope this explain your question.
Regards, Rickard
Hi Rickard Nobel,
Thanks so much ! But how can I see the amounts of “random” IOPS ?
Thanks,
Duy
Hello Rickard Nobel ,
So, a SATA disk 5.4k rpm has about 70 “random” IOPS. Is there any way to calculate the maximum value of its “sequential” IOPS ?
Many thanks,
Duy