Windows OS Hub
  • Windows
    • Windows 11
    • Windows 10
    • Windows Server 2025
    • Windows Server 2022
    • Windows Server 2019
    • Windows Server 2016
  • Microsoft
    • Active Directory (AD DS)
    • Group Policies (GPOs)
    • Exchange Server
    • Azure and Microsoft 365
    • Microsoft Office
  • Virtualization
    • VMware
    • Hyper-V
    • Proxmox
  • PowerShell
  • Linux
  • Home
  • About

Windows OS Hub

  • Windows
    • Windows 11
    • Windows 10
    • Windows Server 2025
    • Windows Server 2022
    • Windows Server 2019
    • Windows Server 2016
  • Microsoft
    • Active Directory (AD DS)
    • Group Policies (GPOs)
    • Exchange Server
    • Azure and Microsoft 365
    • Microsoft Office
  • Virtualization
    • VMware
    • Hyper-V
    • Proxmox
  • PowerShell
  • Linux

 Windows OS Hub / Windows 11 / How to Measure Disk Speed, Performance and IOPS on Windows

April 24, 2026

How to Measure Disk Speed, Performance and IOPS on Windows

The basic metrics for evaluating storage performance are data transfer rate (throughput, how much data can be read or written per unit of time) and IOPS (Input/Output Operations Per Second). In simple terms, IOPS is the number of read and write operations that a storage, disk, or file system can perform per second. Throughput is important when working with large files, while IOPS is more important in workloads with many small files and random access (databases or virtual machines). Another important storage metric is latency, which is the time required for a disk to complete a request, since it directly affects system responsiveness.

In this article, we will look at several ways to measure the storage performance (IOPS, latency, throughput) in Windows (you can use this manual to test the performance of a local hard drive, SSD, SMB network folder, CSV volume, or LUN on SAN/iSCSI storage).

Contents:
  • Check Storage I/O Performance Using PerfMon in Windows
  • Quick Disk Speed Test with WinSat Command
  • DiskSpd: Testing Storage Performance and IOPS in Windows
  • How to Measure Storage IOPS, Throughput, and Latency Using PowerShell

Check Storage I/O Performance Using PerfMon in Windows

The Task Manager is a simple tool that allows you to quickly assess disk performance in real time. Press Ctrl+Shift+Esc, then go to the Performance tab and select the physical disk.

View current disk usage read/write speed and latency in Task Manager

Here you can see the current Write and Read speeds, as well as the Average response time (latency).

To check the current disk queue length, open the Resource Monitor (resmon). The current Disk Queue Length value is displayed in the Storage section of the Disk tab.

Check current disk queue length in resource monitor

You can estimate the current storage I/O load in Windows by using the built-in disk performance counters from Performance Monitor. To collect these counter data:

  1. Run Perfmon
  2. Create a new Data Collector Set and select Create manually.perfmon measure disk / storage performance windows
  3. Check the box Create data logs -> Performance counter.create data collector set in performance monitor
  4. Now, in the properties of the new data collection set, add the following performance counters for the Physical Disk object (you can select counters for a specific disk, or for all the local disks connected):
    • Avg. Disk Sec./Transfer (latency)
    • Avg. Disk Queue Length
    • Avg Disk Bytes/Transfer
    • Disk Bytes/sec (disk speed/throughput)
    • Disk Transfers/sec (IOPS)
    • Split IO/sec
  5. You can also change the other data collection properties. Counter values are collected by default every 15 seconds.
    To display real-time disk performance graphs, add the specified Perfmon counters in the Monitoring Tools -> Performance Monitor section.
    perfmon: add physicaldisk performance counters
  6. The next step is to start collecting performance counter data by selecting Start and waiting for sufficient information to be collected for analysis. After that, right-click your data collector set and select Stop.collect performance couters data
  7. To view the collected performance data, go to the Perfmon -> Reports -> User Defined -> Data_Disk_IO -> select_your_set. By default, disk performance data is displayed in the form of graphs.
  8. Press Ctrl + G to switch to the Report mode.disk-perfmon collected storage performance data

How can you interpret the storage performance results collected by Perfmon? To quickly analyse disk/storage performance, you need to look at the values of at least the following five counters.

When analyzing the performance 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 taken to perform a single 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 systems, the disk latency value should not exceed 10 milliseconds (0.1).
  • Disk Transfers/sec – (IOPS) The number of read/write operations per second. This is the main indicator of the disk access intensity (the reference IOPS values for the various disk types can be found at the end of the article).
  • Disk Bytes/Sec – disk throughput (read+write) per second. The maximum values depend on the disk type (150-250 MB/s for a regular HDD disk and 500-10000 MB/s for an SSD).
  • Split IO/sec –the disk fragmentation indicator shows when the operating system has to split a single  I/O operation into multiple disk requests. This may also indicate that the application is requesting data in blocks that are too large to be transferred in one operation.
  • Avg. Disk Queue Length – disk queue length (the average number of transactions that were queued and waiting to be processed). 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.

Quick Disk Speed Test with WinSat Command

If you want to quickly evaluate the performance of your HDD or SSD drive in Windows, you can use the built-in winsat (Windows System Assessment Tool) console command. This tool was previously used to obtain the Windows Experience Index (WEI) score.

To run the speed test against the C: drive, open a command prompt, and run:

winsat disk -drive C

winsat command: check disk speed and latency

This command runs a set of sequential and random read/write tests and reports the read and write throughput in MB/s, along with average and maximum latency. For each value, an overall rating is returned on a 10-point scale (this is the Windows performance index shown in earlier versions of Windows).

> Disk  Random 16.0 Read                       114.07 MB/s          7.2
> Disk  Sequential 64.0 Read                   988.37 MB/s          8.4
> Disk  Sequential 64.0 Write                  1303.69 MB/s          8.7
> Average Read Time with Sequential Writes     0.381 ms          8.2
> Latency: 95th Percentile                     0.626 ms          8.6
> Latency: Maximum                             1.371 ms          8.9
> Average Read Time with Random Writes         0.388 ms          8.7

Disk assessment tests can be run for certain I/O workloads:

  • sequential read assess: winsat disk -seq -read -drive F
  • sequential write assess: winsat disk -seq -write -drive F
  • random read: winsat disk -ran -read -drive F
  • random write: winsat disk -ran -write -drive F

DiskSpd: Testing Storage Performance and IOPS in Windows

Microsoft recommends using the DiskSpd tool (https://aka.ms/diskspd) to generate a load on a disk (storage) device and measure its performance. This console command can be used to perform I/O load testing of your storage subsystem with a specified target, using multiple threads. I often use this tool to load the storage system and measure its real-world performance in terms of IOPS, throughput, maximum read and write speeds, and latency.

The DiskSpd does not require installation; just download and extract the archive. For x64-bit systems, use the version of diskspd.exe from the amd64fre directory.

The following command template can be used to run your storage performance benchmarking:

diskspd.exe –c50G -d300 -r -w40 -t8 -o32 -b64K -Sh -L E:\diskpsdtmp.dat > DiskSpeedResults.txt

Important. The storage and CPU of the tested system may experience a significant workload when diskspd.exe is running. To avoid performance degradation for users, it is not recommended to start tests on productive systems during peak or working hours.

DiskSpd tool to generate disk load

  • -c50G – file size 50 GB (a large file size is preferable so that it does not fit into the storage controller cache)
  • -d300 – test duration in seconds
  • -r – test by random read/write operations (if you need to test sequential access, use –s)
  • -t8 – number of threads
  • -w40 – ratio of write to read operations 40%/60%
  • -o32 — queue length
  • -b64K — block size
  • -Sh — do not use cache
  • -L — measure latency
  • E:\diskpsdtmp.dat – test file path.

The resulting tables show the average performance values after the stress test has been completed.  The following performance data was obtained in my test for an HDD storage array (see the values in the Total IO table):

  • MiB/s — 241 (not bad)
  • IOPS — 3866 (perfectly well!)
  • Average latency — 66.206 ms (quite a big latency!)

diskspd: get disk average iops and latency values

You can get individual values for read (section Read IO) or write (section Write IO) operations.

After testing several disks or storage LUNs with DiskSpd, you can compare the results and choose the storage array that provides the performance necessary for your workloads.

How to Measure Storage IOPS, Throughput, and Latency Using PowerShell

To measure storage performance, you can use a PowerShell script by Mikael Nystrom, Microsoft MVP, which acts as a wrapper around SQLIO.exe, a file storage performance testing tool.

Note. In December 2015, Microsoft announced that it would no longer support this tool, replacing it with the more universal Diskspd, and removed the SQLIO distribution files from its website. You will therefore need to search for sqlio.exe yourself or download it from our website (it is located in the archive with the PowerShell script).

Download the archive containing two files: SQLIO.exe and DiskPerformance.ps1 (disk_perf_iops.ZIP, 74 KB) and extract it to any folder.

disk perfomance iops powershell script

Here’s an example of a PowerShell script that can be used to estimate disk performance and IOPS using SQLIO.exe:

.\DiskPerformance.ps1 -TestFileName test.dat –TestFileSizeInGB 1 -TestFilepath C:\temp -TestMode Get-LargeIO -FastMode True -RemoveTestFile True -OutputFormat Out-GridView

DiskPerformance.ps1

Let’s consider the script arguments:

  • –TestFileName test.dat – the file name created by the FSUTIL tool.
  • –TestFileSizeInGB 1 – the test file size. Possible values are 1.5, 10, 50, 100, 500, 1,000 GB. The file size must be larger than the storage system cache size. Otherwise, IOPS will be measured for cached data rather than real disk performance.
  • -TestFilepath C:\Temp – specify the driver for measuring performance and the folder on the disk in which the test file will be created. It is possible to specify an UNC path to the shared network folder (SMB).
  • -TestMode Get-LargeIO – there are two options for input-output measurement. Get-SmallIO allows to measure IOPS, and Get-LargeIO measures data transfer rate. The difference between the SmallIO and LargeIO arguments is in the block sizes 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 for 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 the PowerShell console (Format-Table) or in a separate graphic chart window (with Out-Gridview cmdlet).

test iops

I ran a storage performance test on a virtual machine stored on a VMDK virtual disk on a VMFS datastore connected from an HP MSA 2040 over a SAN. My storage returned an average IOPS value of around 15,000 and a data transmission rate (throughput) of about 5 GB/s.

The approximate IOPS values for different disk types are shown in the following table:

TypeIOPS
SSD(SLC)6000
SSD(MLC)1000
15K RPM175-200
10K RPM125-150
7.2K RPM50-75
Raid5 of 6 drives with 10K RPM1000

I have found some recommendations for disk performance in IOPS for some popular Microsoft services:

  • A Microsoft Exchange server with 5,000 users, each of them receives 75 and sends 30 emails per day, will require at least 3,750 IOPS.
  • Microsoft SQL Server with 3,500 SQL transactions per second (TPS) requires 28,000 IOPS.
  • A common Windows application server for 10-100 users requires 10-40 IOPS.

In addition to the built-in Windows utilities, one of the best-known third-party tools for testing drive performance is CrystalDiskMark. This is a simple graphical tool for benchmarking storage with sequential and random read/write speeds (MB/s).

crystaldiskmark - disk benchmark tool

7 comments
7
Facebook Twitter Google + Pinterest
PowerShellWindows 10Windows 11Windows Server 2022
previous post
Implementing Dynamic Groups in Active Directory with PowerShell
next post
Configure Start Menu and Taskbar Pined Apps in Windows 11 via GPO

Related Reading

How to Disable UAC for a Specific Program

February 19, 2026

How to Upgrade Windows Build from an ISO...

November 7, 2024

Software RAID1 (Mirror) for Boot Drive on Windows

February 24, 2025

How to Connect L2TP/IPSec VPN Server From Windows

September 22, 2023

Disks and Partitions Management with PowerShell on Windows

July 11, 2025

How to Create Multiple Partitions on a USB...

March 13, 2024

Fix: DNS Resolution over VPN Doesn’t Work on...

December 27, 2023

How to Create and Use a RAM Drive...

December 18, 2023

7 comments

Johan Hendriks February 27, 2017 - 8:58 am

If the first column shows Megabits per second, it should be MbSec instead of MBSec. Now it’s Megabytes per second.

Reply
Henning May 4, 2017 - 8:28 am

Hi, how much Disks are attacht to the MSA2040? And what kind of Disks? SSDs,15k or 10k … 🙂

Reply
Tomasz Rupiewicz August 24, 2018 - 8:06 am

thanks for your post how can i export to csv or html this data

Reply
Cosme April 29, 2020 - 8:09 pm

Hi, does the diskpsdtmp.dat needs to be created? I have tried the command, but there is nothing about this file
where to get it? does the exe created it? In my case, there are errors telling that the file don’t exist , and I created one, but it also says that the size is too small

Reply
admin May 7, 2020 - 3:35 pm

The diskpsdtmp.dat file is created automatically by the diskspd tool. Verify that the specified directory path exists and that there is sufficient free space on the disk.

Reply
Vic October 6, 2022 - 10:54 am

Version with diskspd.exe
https://social.technet.microsoft.com/wiki/contents/articles/32776.powershell-test-diskspdblock-script-for-storage-performance-testing.aspx

Reply
Que valent les disques Azure ? – Jean-Loup & Azure January 17, 2023 - 8:14 pm

[…] Windows OS Hub […]

Reply

Leave a Comment Cancel Reply

join us telegram channel https://t.me/woshub
Join WindowsHub Telegram channel to get the latest updates!

Recent Posts

  • Security Warnings When Opening RDP Files in Windows 11

    April 17, 2026
  • Find Computers with Pending Reboot Status Using PowerShell

    April 15, 2026
  • Mounting NFS Shares in Windows Using the Built-in Client

    March 26, 2026
  • Monitor Windows Log Files in Real Time with PowerShell

    March 17, 2026
  • Pin and Unpin Apps to Taskbar in Windows 11 via PowerShell

    March 10, 2026
  • Load and Initialize Network Drivers in Windows PE or Recovery Environment

    February 25, 2026
  • How to Set a Custom Drive Icon in Windows

    February 17, 2026
  • Managing Per-User Services in Windows

    February 11, 2026
  • Change Default OU for New Computers and Users in AD

    February 2, 2026
  • Where Windows Stores Certificates and Private Keys

    January 22, 2026

Follow us

  • Facebook
  • Twitter
  • Youtube
  • Telegram
Popular Posts
  • Managing Printers and Drivers on Windows with PowerShell
  • Protecting Remote Desktop (RDP) Host from Brute Force Attacks
  • How to Set a User Thumbnail Photo in Active Directory
  • Implementing Dynamic Groups in Active Directory with PowerShell
  • Match Windows Disks to VMWare VMDK Files
  • Using SSL/TLS Certificates for Remote Desktop (RDP)
  • How to View and Close Open Files on Windows Server
Footer Logo

@2014 - 2026 - Windows OS Hub. All about operating systems for sysadmins


Back To Top