Are you trying to know the process to measure storage performance and IOPS on Windows?
This guide is for you.
IOPS, however, are different; they are measured as an integer number. It refers to the maximum number of reads and writes to non-contiguous storage locations.
Here at Ibmi Media, as part of our Server Management Services, we regularly help our Customers to fix Windows related errors.
In this context, we will look into the steps to measure storage performance and IOPS on Windows.
The process of Capturing Storage I/O Using Disk Performance Counters in Windows?
Now let us take a look at how to measure the storage performance.
We can roughly estimate the current storage I/O workload in Windows using the built-in disk performance counters from Performance Monitor. To collect these counters data, we follow the below steps.
i. First, we start the Perfmon
ii. Next, we create a new Data Collector Set and select Create manually
iii. After that, we select the checkbox Create data logs >> Performance counter
iv. Now in the properties of the new data collection set, we add the following performance counters for the Physical Disk object:
Average Disk Sec/Transfer, Disk Bytes/sec, Average Disk Queue Length, Average Disk Bytes/Transfer, Disk Transfers/sec, Split IO/sec
v. Also, we can change other data collection properties. By default, counter values are collected every 15 seconds.
To display real-time disk performance, we need to add a specific Perfmon counter in the Monitoring Tools >> Performance Monitor section.
vi. Then it remains to start collecting performance counters data (select Start) and wait for the collection of sufficient information for analysis. After that, we right-click the data collector set and select Stop
vii. In order to view the collected performance data we go to the Perfmon >> Reports >> User Defined >> Data_Disk_IO >> check_the_last_set. By default, disk data displays as graphs.
viii. Finally, we use Ctrl + G to switch to the Report mode.
DiskSpd: Testing Disk Performance and IOPS in Windows
Microsoft recommends using the DiskSpd (https://aka.ms/diskspd) utility for generating a load on a disk system and measuring its performance. It is a command-line interface tool. Moreover, it can perform I/O operations with the specified drive target in several threads. We quite often use DiskSpd to measure the storage performance and get the maximum available read/write speed and IOPS from the specific server.
Moreover, the DiskSpd does not require installation. So we just download and extract the archive to a local disk. For x64 bit systems, we use the version of diskspd.exe from the amd64fre directory.
We use the following command to test the performance of the disk:
diskspd.exe –c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E:\diskpsdtmp.dat > DiskSpeedResults.txt
After the stress test completes, we can obtain the average storage performance values from the output tables.
In our test, the following performance data (check the Total IO table) was obtained:
MiB/s — 241 (about 252 Mb/s, not bad);
IOPS — 3866 (perfectly well!);
Average latency — 66.206 ms (quite a big latency!).
Also, we can get individual values for reading (section Read IO) or write (section Write IO) operations.
After testing several disks or storage LUNs using diskspd, we can compare them or select an array with the desired performance for tasks.
How to Measure Storage IOPS, Throughput, and Latency Using PowerShell?
First, we download the archive containing 2 files: SQLIO.exe and DiskPerformance.ps1 (disk_perf_iops.ZIP — 74 KB) and extract it to any folder.
Here is an example of running a PowerShell script to estimate disk performance and IOPS:
.\DiskPerformance.ps1 -TestFileName test.dat –TestFileSizeInGB 1 -TestFilepath C:\temp -TestMode Get-LargeIO -FastMode True -RemoveTestFile True -OutputFormat Out-GridView
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.