How To Measure Storage Performance and IOPS On Windows - Windows OS Hub
How To Measure Storage Performance and IOPS On Windows - Windows OS Hub
| Windows OS Hub
In this article, we will look at several ways to measure the storage performance (IOPS, latency, throughput) in Windows (you
can use this manual for a local hard drive, SSD, SMB network folder, CSV volume or LUN on SAN/iSCSI storage).
Contents:
woshub.com/how-to-measure-disk-iops-using-powershell/ 1/8
26/01/2022 16:05 How to Measure Storage Performance and IOPS on Windows? | Windows OS Hub
4. Now in the properties of the new data collection set, add the following performance counters for the Physical
Disk object (you can select the counters for a specific disk or for all available local disks):
1. Avg. Disk Sec./Transfer
2. Avg. Disk Queue Length
3. Avg Disk Bytes/Transfer
4. Disk Bytes/sec
5. Disk Transfers/sec
6. Split IO/sec
5. You can change other data collection properties. By default, counter values are collected every 15 seconds.
woshub.com/how-to-measure-disk-iops-using-powershell/ 2/8
26/01/2022 16:05 How to Measure Storage Performance and IOPS on Windows? | Windows OS Hub
To display real time disk performance, you need to add the specified Perfmon counters in the Monitoring
6. It remains to start collecting performance counters data (select Start) and wait for the collection of sufficient
information for analysis. After that, right click your data collector set and select Stop;
7. To view the collected performance data go to the Perfmon -> Reports -> User Defined -> Data_Disk_IO —>
woshub.com/how-to-measure-disk-iops-using-powershell/ 3/8
26/01/2022 16:05 How to Measure Storage Performance and IOPS on Windows? | Windows OS Hub
How to understand storage performance counters collected by Perfmon? For a quick analysis of the disk/storage performance,
you need to look at the values of at least the following 5 counters.
When analyzing the counter data, it is advisable for you to understand the current physical disks (storage)
configuration (whether RAID or Stripe is used, the number and types of disks, cache size, etc.).
Disk sec/Transfer – the time required to perform one write/read operation with the storage device or disk (disk
latency). If the delay is more than 25 ms (0.25), then the disk array cannot handle the I/O operation on time. For high
load servers, the disk latency value should not exceed 10 ms (0.1);
Disk Transfers/sec – (IOPS). The number of read/write operations per second. This is the main indicator of the disk
access intensity (approximate IOPS values for different disk types are listed at the end of the article);
Disk Bytes/Sec – Total disk throughput (read+write) per second. Maximum values depend on the disk type (150-250
Mb/s – for a regular HDD disk and 500-10000 for SSD);
Split IO/sec – a disk fragmentation indicator when the operating system has to split one I/O operation into multiple
disk requests. It may also indicate that the application is requesting too large blocks of data that cannot be transferred
in one operation;
Avg. Disk Queue Length – average number of read/write requests that were queued. For a single disk, the queue
length should not exceed 2. For a RAID array of 4 disks, the threshold value of disk queue length is 8.
woshub.com/how-to-measure-disk-iops-using-powershell/ 4/8
26/01/2022 16:05 How to Measure Storage Performance and IOPS on Windows? | Windows OS Hub
The DiskSpd does not require installation, just download and extract the archive to a local disk. For x64 bit systems, use the
version of diskspd.exe from the amd64fre directory.
diskspd.exe –c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E:\diskpsdtmp.dat > DiskSpeedResults.txt
Important. When using diskspd.exe, quite a considerable load is generated on the disks and CPU of the tested
system. To eliminate the performance degradation for users, it is not recommended to start it on productive systems in
peak hours.
-c50G – file size 50 GB (it is better to use a large file size so that it does not fit in the cache of the storage controller);
-r – random read/write operations (if you need to test sequential access, use –s);
woshub.com/how-to-measure-disk-iops-using-powershell/ 5/8
26/01/2022 16:05 How to Measure Storage Performance and IOPS on Windows? | Windows OS Hub
-L — measure latency;
After the stress test is completed, average storage performance values can be obtained from the output tables.
In my test, the following performance data (check the Total IO table) was obtained:
You can get individual values for read (section Read IO) or write (section Write IO) operations.
Having tested several disks or storage LUNs using diskspd, you can compare them or select an array with the desired
performance for your tasks.
Note. In December, 2015, Microsoft announced the end of support for this tool and replacement of SQLIO with a
more universal tool Diskspd, and removed SQLIO distribution files from its website. So you will have to search for
sqlio.exe by yourself, or download it from our website (it is located in the archive with the PowerShell script).
woshub.com/how-to-measure-disk-iops-using-powershell/ 6/8
26/01/2022 16:05 How to Measure Storage Performance and IOPS on Windows? | Windows OS Hub
–TestFileSizeInGB 1 – the test file size. Possible values are 1.5, 10, 50, 100, 500, 1,000 GB. The file size has to be
larger than the size of the storage system cache. Otherwise, IOPS will be measured for the cache data, instead of the
disk;
-TestFilepath C:\Temp – here you specify the disk to measure the performance for and the folder on the disk, in
which a test file will be created. You can also specify an UNC path to the network shared folder (SMB);
-TestMode Get-LargeIO – there are two options of input-output measurement. Get-SmallIO allows to measure IOPS,
and Get-LargeIO measures data transfer rate. The difference between SmallIO and LargeIO arguments is in the block
size of 8 KB and 512 KB while measuring the rate, and the type of access, Random or Sequential, correspondingly;
-FastMode True – in the Fastmode, each test runs 10 seconds, otherwise it takes 60 seconds;
-RemoveTestFile True – remove the test file after the test is over;
-OutputFormat Out-GridView – the test results can be displayed either in PowerShell console (Format-Table) or in a
separate graphic chart window (Out-Gridview).
woshub.com/how-to-measure-disk-iops-using-powershell/ 7/8
26/01/2022 16:05 How to Measure Storage Performance and IOPS on Windows? | Windows OS Hub
In our case (a vmdk virtual disk on the VMFS datastore on HP MSA 2040 connected over SAN is used) the disk array showed
the average IOPS value of about 15,000 and the data transmission rate (throughput) about 5 Gbit/s.
In the following table, the approximate IOPS values for different disk types are shown:
Type IOPS
SSD(SLC) 6000
SSD(MLC) 1000
I have found some recommendations for disk performance in IOPS for some popular Microsoft services:
1. Microsoft Exchange 2010 with 5,000 users, each of them receives 75 and sends 30 emails per day, will require at least
3,750 IOPS;
2. Microsoft SQL 2008 Server with 3,500 SQL transactions per second (TPS) requires 28,000 IOPS;
woshub.com/how-to-measure-disk-iops-using-powershell/ 8/8