DiskSpdの使い方(Azure Managed DisksのパフォーマンスをWindows Serverの記憶域スペース(RAID)で測定)

2021-08-15Azure,Managed Disks,Others,Virtual Machines,Windows

DiskSpdの利用手順です。
Windows Server 2025の記憶域スペースを利用してRAID構成を組んだ場合のIOPSやスループットを測定しています。
Azure環境上に作成した仮想マシンを使用して測定しています。

※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンと表記しています。
※本記事では、Azure Managed Disksをマネージドディスクとして表記しています。
※一般的なディスクドライブの場合や、メニューを指定する場合はディスクと表記しています。

スポンサーリンク

DiskSpdの概要、設定手順、コマンド実行方法

概要

DiskSpd(DiskSPD)は Microsoft が提供する Windows 向けのストレージ負荷・性能測定ツールです。
指定したパラメーターでディスクI/Oを発生させ、IOPS / スループット(MB/s)/ レイテンシなどを計測することができます。

DiskSpd/wiki
DISKSPD(ディスクのベンチマークの実行)

設定手順

GitHubからDiskSpdをダウンロードして利用します。

DiskSpd/Releases

任意のフォルダにZIPファイルを解凍して使用します。
今回はCドライブ直下に配置しています。

DiskSpd設定手順
公式サイトからDiskSpd.ZIPをダウンロードします。 ダウンロードサイトの画面(DiskSpdの利用手順)
任意のディレクトリにダウンロードしたファイルを展開します。 ファイルの解凍画面(DiskSpdの利用手順)
ファイルの解凍画面(DiskSpdの利用手順)
ファイルの解凍画面(DiskSpdの利用手順)

利用手順(コマンド実行方法)

PowerShellまたはコマンドプロンプトからコマンドを実行します。
PowerShellやコマンドプロンプトは、管理者権限で起動します。

DiskSpdはテスト用のファイルを生成します。
そのため、対象のディスクに十分な空き容量があるかを確認します。
また、ウイルス対策ソフトのリアルタイムスキャンから除外するなどの注意が必要です。

公式サイトにサンプルのコマンドラインが記載されています。

Sample command lines

※Disk I/Oを消費するため、本番環境での実行は注意が必要です。

コマンドの実行結果例

# DiskSpdコマンド
## diskspd.exe [オプション] 対象ファイルパス

PS C:\> C:\DiskSpd\x86\diskspd.exe -t4 -o8 -b4k -r4k -w0 -d60 -W5 -Sh -L -c10G d:\IO.dat
Command Line: C:\DiskSpd\x86\diskspd.exe -t4 -o8 -b4k -r4k -w0 -d60 -W5 -Sh -L -c10G d:\IO.dat
Input parameters:

timespan: 1
————-
duration: 60s
warm up time: 5s
cool down time: 0s
measuring latency
random seed: 0
path: 'd:\IO.dat’
think time: 0ms
burst size: 0
software cache disabled
hardware write cache disabled, writethrough on
performing read test
block size: 4KiB
using random I/O (alignment: 4KiB)
number of outstanding I/O operations per thread: 8
threads per file: 4
using I/O Completion Ports
IO priority: normal

System information:

computer name: vm-01
start time: 2026/01/12 05:22:57 UTC

cpu count: 2
core count: 1
group count: 1
node count: 1
socket count: 1
heterogeneous cores: n

Results for timespan 1:
*********************************

actual test time: 60.01s
thread count: 4

Core | CPU | Usage | User | Kernel | Idle
———————————————–
0| 0| 2.14%| 0.81%| 1.33%| 97.86%
0| 1| 2.03%| 1.04%| 0.99%| 97.97%
———————————————–
avg.| 2.08%| 0.92%| 1.16%| 97.92%

Total IO
thread | bytes | I/Os | MiB/s | I/O per s |
———————————————–
0 | 187924480 | 45880 | 2.99 | 764.52 | 10.460 | 4.133 |
1 | 188076032 | 45917 | 2.99 | 765.14 | 10.451 | 4.162 |
2 | 187998208 | 45898 | 2.99 | 764.82 | 10.456 | 4.156 |
3 | 188162048 | 45938 | 2.99 | 765.49 | 10.447 | 4.155 |
———————————————–
total: 752160768 | 183633 | 11.95 | 3059.98 | 10.454 | 4.151

Read IO
thread | bytes | I/Os | MiB/s | I/O per s |
———————————————–
0 | 187924480 | 45880 | 2.99 | 764.52 | 10.460 | 4.133 |
1 | 188076032 | 45917 | 2.99 | 765.14 | 10.451 | 4.162 |
2 | 187998208 | 45898 | 2.99 | 764.82 | 10.456 | 4.156 |
3 | 188162048 | 45938 | 2.99 | 765.49 | 10.447 | 4.155 |
———————————————–
total: 752160768 | 183633 | 11.95 | 3059.98 | 10.454 | 4.151

Write IO
thread | bytes | I/Os | MiB/s | I/O per s |
———————————————–
0 | 0 | 0 | 0.00 | 0.00 | 0.000 | N/A |
1 | 0 | 0 | 0.00 | 0.00 | 0.000 | N/A |
2 | 0 | 0 | 0.00 | 0.00 | 0.000 | N/A |
3 | 0 | 0 | 0.00 | 0.00 | 0.000 | N/A |
———————————————–
total: 0 | 0 | 0.00 | 0.00 | 0.000 | N/A

Total latency distribution:
%-ile | Read (ms) | Write (ms) | Total (ms)
———————————————-
min | 0.139 | N/A | 0.139
25th | 10.240 | N/A | 10.240
50th | 10.367 | N/A | 10.367
75th | 10.787 | N/A | 10.787
90th | 10.846 | N/A | 10.846
95th | 11.079 | N/A | 11.079
99th | 11.959 | N/A | 11.959
3-nines | 83.740 | N/A | 83.740
4-nines | 124.027 | N/A | 124.027
5-nines | 124.323 | N/A | 124.323
6-nines | 124.408 | N/A | 124.408
7-nines | 124.408 | N/A | 124.408
8-nines | 124.408 | N/A | 124.408
9-nines | 124.408 | N/A | 124.408
max | 124.408 | N/A | 124.408

コマンドオプション概要

コマンドのオプションについては、公式サイトに記載があります。

Command line and parameters

オプション 概要
-c<size> テストファイルのサイズ
-d<sec> 計測時間(秒)
-W<sec> ウォームアップ時間(秒)
-b<size> I/O サイズ(例:-b4K, -b64K, -b1M)
-r ランダムアクセス
-o<num> 同時に発行されているI/Oリクエストの数
-t<num> スレッド数
-L レイテンシ統計を詳細表示
-Sh OS ファイルキャッシュを無効化

—広告—

Windows Serverの記憶域スペースを利用してRAID構成したディスクのIOPSを測定

Azure環境上の仮想マシンを利用して、ディスクのIOPSを測定します。
Windows Server 2025の記憶域スペースを使用して、RAID構成した場合の結果を測定しています。

Windows Server 2025でのRAID構築手順については、こちらで紹介しています。

測定環境の構成

サイズがStandard_D2as_v6の仮想マシンを使用しています。
マネージドディスクにはPremium SSD v2を3本使用しています。

    • サイズおよびパフォーマンス設定
      • サイズ : 32(GiB)
      • ディスクIOPS : 3000

マネージドディスクの概要については、こちらで紹介しています。
マネージドディスク単体でのIOPSやスループット測定もしています。

使用したDiskSpdコマンド

IOPSおよびスループット測定時のコマンドです。
今回は、読み取り70%、書き込み30%、ファイルサイズ10GiBの条件で実行しています。

使用したDiskSpdコマンド

# IOPSを測定時のコマンド(ランダムアクセス、ブロックサイズ4k)
PS C:\> C:\DiskSpd\x86\diskspd.exe -t4 -o8 -b4k -r4k -w30 -d60 -W5 -Sh -c10G d:\IO.dat
# スループットを測定時のコマンド(シーケンシャルアクセス、ブロックサイズ1m)
PS C:\> C:\DiskSpd\x86\diskspd.exe -t4 -o8 -b1M -w30 -d60 -W5 -Sh -c10G d:\IO.dat

 Simple(RAID0相当)の場合

Simple(RAID0相当)の場合です。
IOPS、スループットと共に期待値(9000IOPS、375(MB/s))に近い値が確認できました。

DiskSpdの実行結果(抜粋)

# DiskSpdの実行結果(3000IOPS 125MB/s×3本)(Simpleで構成)
## IOPS(ランダムアクセス)
Total IO
thread | bytes | I/Os | MiB/s | I/O per s |  
——————————————–
0 | 565583872 | 138082 | 8.99 | 2300.79 | 
1 | 564428800 | 137800 | 8.97 | 2296.09 | 
2 | 562229248 | 137263 | 8.93 | 2287.14 | 
3 | 565813248 | 138138 | 8.99 | 2301.72 | 
——————————————–
total: 2258055168 | 551283 | 35.88 | 9185.74 |

Read IO
thread | bytes | I/Os | MiB/s | I/O per s | 
——————————————–
0 | 397017088 | 96928 | 6.31 | 1615.06 | 
1 | 396419072 | 96782 | 6.30 | 1612.63 | 
2 | 392478720 | 95820 | 6.24 | 1596.60 | 
3 | 396468224 | 96794 | 6.30 | 1612.83 | 
——————————————–
total: 1582383104 | 386324 | 25.14 | 6437.12 |

Write IO
thread | bytes | I/Os | MiB/s | I/O per s |
——————————————–
0 | 168566784 | 41154 | 2.68 | 685.73 |
1 | 168009728 | 41018 | 2.67 | 683.46 | 
2 | 169750528 | 41443 | 2.70 | 690.54 | 
3 | 169345024 | 41344 | 2.69 | 688.89 | 
——————————————–
total: 675672064 | 164959 | 10.74 | 2748.63

## スループット(シーケンシャルアクセス)
Total IO
thread | bytes | I/Os | MiB/s | I/O per s | file
——————————————–
0 | 5736759296 | 5471 | 91.17 | 91.17 | 
1 | 5740953600 | 5475 | 91.23 | 91.23 | 
2 | 5738856448 | 5473 | 91.20 | 91.20 |
3 | 5735710720 | 5470 | 91.15 | 91.15 | 
——————————————–
total: 22952280064 | 21889 | 364.75 | 364.75

Read IO
thread | bytes | I/Os | MiB/s | I/O per s | 
——————————————–
0 | 4030726144 | 3844 | 64.05 | 64.05 |
1 | 4007657472 | 3822 | 63.69 | 63.69 |
2 | 4025483264 | 3839 | 63.97 | 63.97 |
3 | 4031774720 | 3845 | 64.07 | 64.07 |
——————————————–
total: 16095641600 | 15350 | 255.79 | 255.79

Write IO
thread | bytes | I/Os | MiB/s | I/O per s | file
——————————————–
0 | 1706033152 | 1627 | 27.11 | 27.11 |
1 | 1733296128 | 1653 | 27.54 | 27.54 |
2 | 1713373184 | 1634 | 27.23 | 27.23 |
3 | 1703936000 | 1625 | 27.08 | 27.08 |
——————————————–
total: 6856638464 | 6539 | 108.96 | 108.96

※結果は抜粋です。AvgLat、LatStdDev、fileなどの項目が表示されます。

Parity(RAID5相当)の場合

Parity(RAID5相当)の場合です。
4KiBのランダムI/Oでは、IOPSの低下が確認できます。
既存データと既存パリティを読み出して更新する必要があるため、4KiBのような小さいサイズのランダムアクセス時には性能低下が見られます。
一方で、1MiBのシーケンシャルアクセス時のスループットは、ほとんど低下が見られないことが確認できます。

DiskSpdの実行結果(抜粋)

# DiskSpdの実行結果(3000IOPS 125MB/s×3本)(Parityで構成)
## IOPS(ランダムアクセス)
Total IO
thread | bytes | I/Os | MiB/s | I/O per s |
——————————————–
0 | 158945280 | 38805 | 2.53 | 646.73 | 
1 | 159866880 | 39030 | 2.54 | 650.48 | 
2 | 160444416 | 39171 | 2.55 | 652.83 | 
3 | 161550336 | 39441 | 2.57 | 657.33 | 
——————————————–
total: 640806912 | 156447 | 10.18 | 2607.36

## スループット(シーケンシャルアクセス)
Total IO
thread | bytes | I/Os | MiB/s | I/O per s | 
——————————————–
0 | 3850371072 | 3672 | 61.20 | 61.20 |
1 | 4552916992 | 4342 | 72.37 | 72.37 |
2 | 5469372416 | 5216 | 86.93 | 86.93 |
3 | 4055891968 | 3868 | 64.47 | 64.47 |
——————————————–
total: 17928552448 | 17098 | 284.97 | 284.97

※Total IOの結果のみ抜粋しています。

マネージドディスクのIOPSをアップグレードして測定

マネージドディスクのIOPSやスループットをアップグレードして測定します。

    • パフォーマンス設定(Premium SSD v2)
      • ディスクIOPS : 16000

Simple(RAID0相当)で構成しています。
結果は、期待値である48000IOPSおよび3000(MB/s)には達していません。

DiskSpdの実行結果(抜粋)

# DiskSpdの実行結果(16000IOPS 1000MB/s×3本)(Simpleで構成)
## IOPS

Total IO
thread | bytes | I/Os | MiB/s | I/O per s |
——————————————–
0 | 1240481792 | 302852 | 19.72 | 5047.41 | 
1 | 1239044096 | 302501 | 19.69 | 5041.56 | 
2 | 1244307456 | 303786 | 19.78 | 5062.98 | 
3 | 1240477696 | 302851 | 19.72 | 5047.40 | 
——————————————–
total: 4964311040 | 1211990 | 78.90 | 20199.35

## スループット

Total IO
thread | bytes | I/Os | MiB/s | I/O per s | 
——————————————–
0 | 19120783360 | 18235 | 303.90 | 303.90 |
1 | 19116589056 | 18231 | 303.84 | 303.84 |
2 | 19121831936 | 18236 | 303.92 | 303.92 |
3 | 19121831936 | 18236 | 303.92 | 303.92 |
——————————————–
total: 76481036288 | 72938 | 1215.58 | 1215.58

※Total IOの結果のみ抜粋しています。

仮想マシンサイズごとにIOPS、スループットの上限がある

仮想マシンのシリーズやサイズごとにパフォーマンス(IOPS、スループット)上限が設定されています。

仮想マシンとマネージドディスクのパフォーマンス

今回のStandard_D2as_v6場合は以下の通りとなります。

    • 通常時
      • IOPS : 4000
    • バースト時
      • IOPS : 20000

Dasv6 シリーズのサイズ

今回は、仮想マシンの上限に達してしまったため、期待通りの結果とならなかったと考えられます。

仮想マシンのシリーズ(サイズ)を変更して測定

仮想マシンをStandard_D2s_v6に変更して再測定します。

    • 通常時
      • IOPS : 4167
    • バースト時
      • IOPS : 44444

Dsv6 サイズ シリーズ

仮想マシンの上限値に合わせて、IOPSが20199.35から42776.38へ変化していることが確認できます。
スループットも1215.58(MB/s)から1420.94(MB/s)へ変化しています。

DiskSpdの実行結果(抜粋)

# DiskSpdの実行結果(16000IOPS 1000MB/s×3本)(Simpleで構成)
## IOPS

Total IO
thread | bytes | I/Os | MiB/s | I/O per s |
——————————————–
0 | 2628247552 | 641662 | 41.77 | 10694.35 | 
1 | 2626519040 | 641240 | 41.75 | 10687.32 | 
2 | 2630897664 | 642309 | 41.82 | 10705.13 | 
3 | 2627076096 | 641376 | 41.76 | 10689.58 | 
——————————————–
total: 10512740352 | 2566587 | 167.10 | 42776.38 | 0.746 | 0.547

## スループット

Total IO
thread | bytes | I/Os | MiB/s | I/O per s | 
——————————————–
0 | 22347251712 | 21312 | 355.20 | 355.20 |
1 | 22350397440 | 21315 | 355.25 | 355.25 |
2 | 22350397440 | 21315 | 355.25 | 355.25 |
3 | 22350397440 | 21315 | 355.25 | 355.25 |
——————————————–
total: 89398444032 | 85257 | 1420.94 | 1420.94

※Total IOの結果のみ抜粋しています。

—広告—

最後に

DiskSpdの利用手順を簡単にまとめてみました。
手順確認に合わせて、Windows Server 2025の記憶域スペースを利用してRAID構成を組んだ場合のIOPSやスループットを測定しました。
DiskSpdにはさまざまなパラメーターが用意されており、ブロックサイズや読み書きの割合などを指定して測定できることが分かりました。
また、仮想マシンにはIOPSやスループットの上限があることも確認できました。

引き続き、いろいろ試してみたいと思います。

Windows ServerのOSマネージドディスクサイズ変更手順については、こちらで紹介しています。

Linuxの仮想マシンのデータディスク拡張手順は、こちらで紹介しています。
マネージドディスク拡張後にIOPSを測定しています。

スポンサーリンク