仮想マシンにパススルー接続した NVMe SSD と容量固定 VHDX の IO パフォーマンス測定
こんにちは。 今回は DDA で接続した NVMe SSD と VHDX ファイルのボリュームでどちらのパフォーマンスが良いか比較してみました。
仮想マシンの構成
DDA で接続した NVMe SSD を E ドライブ、容量固定 VHDX を F ドライブとして NTFS でフォーマットしました。
ドライブ | ディスク |
---|---|
E:\ | NVMe SSD |
F:\ | 容量固定 VHDX |
DISKSPD
パフォーマンス測定にはマイクロソフト社の DISKSPD を利用しました。
DISKSPD とは
Docs.com に記載のある内容を引用します。ワークロードの負荷を実行できるツールということがわかります。
DISKSPD は、カスタマイズして独自の合成ワークロードを生成し、アプリケーションをデプロイする前にテストすることができるツールです。 このツールの優れた点は、実際のワークロードに似た特定のシナリオを作成するために、パラメーターの構成と調整を自由に行うことができる点です。 DISKSPD を使用することで、システムをデプロイする前に、その能力をおおまかに把握することができます。 DISKSPD によって行われるのは、根本的には数多くの読み取りと書き込み操作の発行です。
DISKSPD のダウンロード
DISKSPD はインターネットからダウンロードできますが、Powershell でダウンロードする方法で進めてみます。
- DISKSPD を実行するサーバーにログインし、管理者権限で Powershell を実行します。
- DISKSPD をダウンロードし、解凍します。
Invoke-WebRequest -Uri "https://github.com/microsoft/diskspd/releases/download/v2.0.21a/DiskSpd.zip" -OutFile DiskSpd.zip Expand-Archive -Path C:\DiskSpd.zip cd .\DiskSpd\
- 実行するサーバーによって、利用するバイナリを使い分けてください。
DSKSPD の実行
DISKSPD を実行するパラメータは下記のものがあります。
パラメータ | 説明 |
---|---|
-t2 | これは、ターゲット/テスト ファイルあたりのスレッドの数を示します。 この数は多くの場合、CPU コアの数に基づいています。 ここでは、すべての CPU コアに負荷をかけるため、2 つのスレッドが使用されました。 |
-o32 | これは、スレッドごとのターゲットあたりの未処理 I/O 要求の数を示します。 これは、キューの深さとも呼ばれます。ここでは、CPU に負荷をかけるため、32 個が使用されました。 |
-b4K | これは、ブロック サイズをバイト、KiB、MiB、または GiB で示します。 ここでは、ランダム I/O テストをシミュレートするために 4K ブロック サイズが使用されました。 |
-r4K | これは、指定されたサイズ (バイト、KiB、MiB、Gib、またはブロック) に対応したランダム I/O を示します ( -s パラメーターをオーバーライドします)。 一般的な4K バイト サイズは、ブロック サイズに適切に対応するために使用されていました。 |
-w0 | これを使用して、操作における書き込み要求の割合を指定します (-w0 は 100% 読み取りに相当します)。 ここでは、単純なテストの目的で 0% 書き込みが使用されました。 |
-d120 | これは、クールダウンやウォームアップを含まない、テストの期間を指定します。 既定値は 10 秒ですが、重要なワークロードには少なくとも 60 秒を使用することをお勧めします。 ここでは、外れ値を最小化するために 120 秒が使用されました。 |
-Suw | ソフトウェアおよびハードウェアの書き込みキャッシュを無効にします ( -Sh に相当します)。 |
-D | 標準偏差などの IOPS の統計情報をミリ秒単位 (スレッドごと、ターゲット単位) でキャプチャします。 |
-L | 待機時間の統計を測定します。 |
-c5g | テストで使用されるサンプル ファイルのサイズを設定します。 これは、バイト、KiB、MiB、GiB、またはブロックで設定できます。 ここでは、5 GB のターゲット ファイルが使用されました。 |
今回は、下記のパラメーターで実行してみます。
.\diskspd -t2 -o32 -b4k -r4k -w40 -d120 -Sh -D -L -c5G E:\IO.dat > test01.txt
実行結果
- NVMe に対する測定結果の抜粋
- Total IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 39494254592 9642152 313.87 80350.16 0.397 732.52 0.105 E:\IO.dat (5120MiB) 1 39487418368 9640483 313.81 80336.25 0.397 724.26 0.090 E:\IO.dat (5120MiB) total 78981672960 19282635 627.68 160686.40 0.397 1406.71 0.097 - Read IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 23701483520 5786495 188.36 48220.13 0.429 481.92 0.106 E:\IO.dat (5120MiB) 1 23695867904 5785124 188.32 48208.70 0.429 446.65 0.092 E:\IO.dat (5120MiB) total 47397351424 11571619 376.68 96428.83 0.429 880.00 0.099 - Write IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 15792771072 3855657 125.51 32130.03 0.350 297.12 0.082 E:\IO.dat (5120MiB) 1 15791550464 3855359 125.50 32127.55 0.350 326.31 0.062 E:\IO.dat (5120MiB) total 31584321536 7711016 251.01 64257.58 0.350 583.02 0.073 - ログデータは下記にアップロードしてありますので、ご参照ください。
NVMe SSD performance
- VHDX に対する測定結果の抜粋
- Total IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 18685411328 4561868 148.48 38010.73 0.841 1402.61 0.456 F:\IO.dat (5120MiB) 1 24736432128 6039168 196.56 50320.00 0.635 1850.14 0.395 F:\IO.dat (5120MiB) total 43421843456 10601036 345.04 88330.73 0.724 2473.50 0.434 - Read IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 11210981376 2737056 89.09 22805.90 0.735 838.17 0.382 F:\IO.dat (5120MiB) 1 14839906304 3623024 117.92 30188.03 0.539 1115.86 0.321 F:\IO.dat (5120MiB) total 26050887680 6360080 207.01 52993.93 0.623 1499.35 0.362 - Write IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 7474429952 1824812 59.39 15204.83 0.999 578.32 0.509 F:\IO.dat (5120MiB) 1 9896525824 2416144 78.64 20131.97 0.780 744.97 0.447 F:\IO.dat (5120MiB) total 17370955776 4240956 138.03 35336.81 0.875 990.60 0.487 - ログデータは下記にアップロードしてありますので、ご参照ください。
VHDX performance
実行結果のおまけ
仮想マシンに VHDX 2つ接続し、Storage Space でミラーリングしたボリュームで計測してみました。
- ミラーしたVHDX に対する測定結果の抜粋
- Total IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 9261477888 2261103 73.60 18841.34 1.696 1673.56 1.383 F:\IO.dat (5120MiB) 1 21545037824 5260019 171.21 43830.73 0.729 3472.12 0.710 F:\IO.dat (5120MiB) total 30806515712 7521122 244.81 62672.07 1.020 4906.94 1.060 - Read IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 5554102272 1355982 44.14 11299.14 1.499 1015.36 1.234 F:\IO.dat (5120MiB) 1 12925665280 3155680 102.72 26295.68 0.594 2085.76 0.605 F:\IO.dat (5120MiB) total 18479767552 4511662 146.85 37594.82 0.866 2954.78 0.941 - Write IO
thread bytes I/Os MiB/s I/O per s AvgLat IopsStdDev LatStdDev file 0 3707375616 905121 29.46 7542.20 1.991 663.77 1.534 F:\IO.dat (5120MiB) 1 8619372544 2104339 68.50 17535.06 0.932 1390.70 0.801 F:\IO.dat (5120MiB) total 12326748160 3009460 97.96 25077.26 1.251 1957.01 1.180 - ログデータは下記にアップロードしてありますので、ご参照ください。
Mirrored VHDX performance
まとめ
トータル IOPS では、やはり NVMe SSD のパフォーマンスがよいことがわかります。
種類 | Total IOPS | Read IOPS | Write IOPS |
---|---|---|---|
NVMe | 160686.40 | 96428.83 | 64257.58 |
VHDX | 88330.73 | 52993.93 | 35336.81 |
Mirror VHDX | 62672.07 | 37594.82 | 25077.26 |
サーバーの集約率を上げたいけれど、物理で準備するほどでもないという状況があった場合は、DDA を試してみてください!