Windows2019のAzure仮想マシンでRAID構成を組みDISKPDを使ってIOPSを測定

Azure 仮想マシンでRAID構成を組んでIOPSの測定までやってみました。

今回はRAID構成はRAID0、OSはWindows Server 2019 Datacenterを利用して実施しています。

IOPSの測定にはDISKSPDを使用しています。

スポンサーリンク

仮想マシン(Azure Virtual Machines )のIOPSについて

Azure上の仮想マシンでIOPSやスループットが決まる要件は以下の2つになります。

      • Azure Managed DisksのシリーズおよびサイズによるIOPS上限
      • 仮想マシンのシリーズおよびサイズによるIOPS上限

IOPSとは

IOPSはInput/output operations per Secondの略称になります。

IOPSはディスクが1秒当たりに処理できるI/Oアクセスの数でディスクの性能を表す際に利用されます。

IOPSが高ければ高いほど、1秒間に処理されるI/Oアクセス数が大きくなります。つまり1秒間に読み書きできるデータ転送量も多くなるという事になります。

Azure Premium Storage:IOPS

なお実際のデータ転送量(スループット)はIOPS×IO Size(1回のIOのデータサイズ)で計算されます。

Azure Managed DisksのIOPSについて

Azure Managed DisksではDiskのサイズに応じて最大 IOPSやスループットが規定されています。サイズが大きくなるほどIOPSが大きくなりDiskIO速度が上がります。

Premium SSD、Standard SSDでは、一時的に最大 IOPSの上限を超える事が出来るバーストが可能です

Managed Disks の価格

今回利用したP1(Premium SSD 4 GiB)の場合はこのような形になります。

ディスク層 サイズ プロビジョニングされた IOPS 最大バースト IOPS
P1 4 GiB 120 3500

仮想マシンのIOPSについて

仮想マシンやシリーズやサイズによってIOPSやスループット上限が設定されています。仮想マシンによる上限詳細についてはこちらを参照頂きたいのですが基本的には仮想マシン全体でのIOPSになります。今回利用した仮想マシンの場合はこちらの値になります。

仮想マシンサイズ 最大 IOPS
Standard_D2s_v4 3200
Standard_D4s_v4 6400
Standard_D8s_v4  12800

※ディスク本数やディスクキャッシュ有無(仮想マシンのサイズによる)によってIOPSが変わる場合があります。
※今回利用したDsv4 シリーズの仮想マシンサイズによるIOPS上限一覧はこちらになります。
※仮想マシンのシリーズやサイズに応じて1台当たりのManaged Disks本数に上限があります。

RAID構成を組む事でIOPSを向上させる事が出来る

こちらにも記載されている通りRAID構成を組む事でIOPSを集約する事が出来ます。

RAID0の場合はディスクの本数×ディスク1本あたりのIOPSが期待できます。SQL Serverのデータベースで利用する場合などIOPS稼ぎたい場合には活用可能です。

RAID0だとディスク1本でも障害があるとボリューム障害となり耐障害性が低くなります。しかしManaged Disksの場合は同じデータセンター内でレプリケートされている為RAID1と同じ構成組んでいます(こちらを参照)。その為RAID0で構成した場合でもRAID10と同じ構成と言えます。

※RAID1の場合はミラーリングなので向上しません。RAID5の場合は増やした本数の0.3倍から0.5倍程度の期待値になります。
こちらにも記載されていますが実際に利用する場合はブロックサイズ等について注意ください。

マネージドディスクのパフォーマンスレベルの変更についてはこちらでやっています。

Windows仮想マシンでRAIDを構成する

Azure VMのRAID構成はソフトウェアRAIDになりますので構成してみます。

      • RAID作成条件
        • Windows Server 2019 DatacenterのAzure仮想マシンを利用する
        • Windows OSのソフトウェアRAID構成とする
        • Managed DisksはP1(Premium SSD 4 GiB)を利用する
        • ディスク本数は3本とする
        • RAID構成は0で構成する

データディスクを追加した仮想マシンを構成する

仮想マシンを新規に作成時にデータディスクを追加してみます。

仮想マシン作成時にディスクを追加する

仮想マシン作成時のディスク設定画面になります。

データディスクにある新しいディスクを作成し接続するを選択します。

サイズを変更するを選択します。

ディスクサイズの選択画面になります。

今回はP1を選択します。

サイズが変更されている事を確認しOKをクリックします。

このディスク追加作業を3回繰り返します。

終わると3本のデータディスクが設定されている事が確認出来ます。

仮想マシン作成と同時にディスクも作成されます。

 

仮想マシン作成後にディスクを追加する

仮想マシン作成後にディスクを追加してみます。

仮想マシン作成後にディスクを追加する

仮想マシンのディスクメニューになります。

新しいディスクを作成し接続するを選択します。

カラムが増えますのでディスク名、ストレージの種類、サイズを選択します。

保存をクリックするとディスクが作成され仮想マシンに接続されます。ディスクの追加は仮想マシン起動中に実行可能です。

※ディスクサイズの変更はオンラインでは出来ません。

Windows Serverでのディスク追加はこちらでもやっています。

Windows Server 2019 Datacenter上でRAIDを構成する

Windows Server 2019 Datacenter上でRAIDを構成する。

ディスク3本でRAID0として構成します。

Windows ServerでRAID構成を作成する
Windowsのメニューでディスクの管理を選択します。

ディスクの初期化画面になります。

すべてのディスクにチェックがついている事を確認後OKをクリックします。

初期化が完了した後に追加したディスクで右クリックするとメニューが表示されます。

  • 新しいスパンボリューム:ディスク1本で構成される通常のボリューム
  • 新しいストライプボリューム:RAID0で構成されるボリューム
  • 新しいミラーボリューム:RAID1で構成されるボリューム
  • 新しいRAID-5ボリューム:RAID5で構成されるボリューム

今回はRAID0なので、新しいストライプボリュームを選択します。

ウィザードが表示されますので次へを選択し開始します。

ディスクの選択画面になります。すべてのディスクを追加します。

追加後の画面はこのような感じになります。ディスク領域(MB)は1本あたりの割り当て領域です。

すべてを割り当てしますのでそのまま次へを選択します。

新しいストライプボリュームのドライブレター選択です。今回はEドライブを選択しています。

ボリュームのフォーマット画面になります。ボリュームをフォーマットします。何か指定する事が無ければそのまま次へ進みます。

確認画面が表示されます。問題が無ければそのまま完了へ進めます。ボリューム作成が開始されます。

作成開始すると確認メッセージが表示されます。はいを選択し次へ進みます。

※ダイナミックディスクですがWindowsでは非推奨になっていますが今回はそのまま進めてます。(こちらを参照)

フォーマットが完了するとこのようにE ドライブとして新しいボリュームが作成されている事が分かります。

DISKSPD を使用してWindows上でIOPSを測定する

Windows OS上でIOPSを測定します。今回はこちらを参考に進めます。Azure Stack HCIの記事ですがWindowsでのIOPS測定にそのまま使えます。

DISKSPDをセットアップする

DISKPDはファイルをダウンロードして解凍するだけで利用可能です。

こちらのURLから最新版をダウンロードします。2021年8月現在の最新版ファイルはこちらになります。

ダウンロードしたファイルを解凍します。今回はCドライブ直下に置いています。

Managed Disks(P1)単体でのIOPS

まず最初にManaged Disks P1(Premium SSD 4GiB)単体でのIOPS測定を行ってみました。仮想マシンのサイズはStandard_D2s_v4を使用しています。

こちらをがP1のカタログスペックになります。

ディスク層 サイズ プロビジョニングされた IOPS 最大バースト IOPS
P1 4 GiB 120 3500

DISKPDはコマンドラインで実行します。DISKSPDの実行コマンドの解説詳細についてはこちらを参照ください。サンプルを参考にWrite25%、ファイル1Gとして実行しています。

DISKSPDを実行する(RAID0)

//VMの情報を表示

PS C:\> cd C:\DiskSpd\x86\ 

PS C:\DiskSpd\x86> .\diskspd -t2 -o32 -b4k -r4k -w25 -d120 -Sh -D -L -c1G F:\IO.dat

DISKSPDの実行結果です。非常に見やすく詳細の情報を表示してくれます。

I/O per sを確認するとトータルで3499.51となっています。P1がバースト時の性能と同じ値が出ている事が確認出来ました。

//DISKSPDの実行結果(P1×1本)

Command Line: C:\DiskSpd\x86\diskspd.exe -t2 -o32 -b4k -r4k -w25 -d120 -Sh -D -L -c1G F:\IO.dat

Input parameters:

timespan: 1
————-
duration: 120s
warm up time: 5s
cool down time: 0s
measuring latency
gathering IOPS at intervals of 1000ms
random seed: 0
path: 'F:\IO.dat’
think time: 0ms
burst size: 0
software cache disabled
hardware write cache disabled, writethrough on
performing mix test (read/write ratio: 75/25)
block size: 4096
using random I/O (alignment: 4096)
number of outstanding I/O operations: 32
thread stride size: 0
threads per file: 2
using I/O Completion Ports
IO priority: normal

System information:

computer name: RAID-TEST-VM-01
start time: 2021/08/14 06:30:17 UTC

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

actual test time: 120.02s
thread count: 2
proc count: 2

CPU | Usage | User | Kernel | Idle
——————————————-
0| 4.39%| 0.59%| 3.80%| 95.61%
1| 1.89%| 0.44%| 1.45%| 98.11%
——————————————-
avg.| 3.14%| 0.51%| 2.62%| 96.86%

Total IO
thread | bytes | I/Os | MiB/s | I/O per s | AvgLat | IopsStdDev | LatStdDev | file
——————————————————————————————————————
0 | 854867968 | 208708 | 6.79 | 1739.01 | 18.398 | 44.19 | 21.803 | F:\IO.dat (1024MiB)
1 | 865431552 | 211287 | 6.88 | 1760.50 | 18.174 | 43.80 | 21.746 | F:\IO.dat (1024MiB)
——————————————————————————————————————
total: 1720299520 | 419995 | 13.67 | 3499.51 | 18.285 | 84.91 | 21.775

Read IO
thread | bytes | I/Os | MiB/s | I/O per s | AvgLat | IopsStdDev | LatStdDev | file
——————————————————————————————————————
0 | 641146880 | 156530 | 5.09 | 1304.25 | 18.472 | 38.33 | 21.737 | F:\IO.dat (1024MiB)
1 | 648990720 | 158445 | 5.16 | 1320.20 | 18.278 | 37.38 | 21.673 | F:\IO.dat (1024MiB)
——————————————————————————————————————
total: 1290137600 | 314975 | 10.25 | 2624.45 | 18.374 | 69.88 | 21.705

Write IO
thread | bytes | I/Os | MiB/s | I/O per s | AvgLat | IopsStdDev | LatStdDev | file
——————————————————————————————————————
0 | 213721088 | 52178 | 1.70 | 434.76 | 18.177 | 20.61 | 22.000 | F:\IO.dat (1024MiB)
1 | 216440832 | 52842 | 1.72 | 440.29 | 17.861 | 20.44 | 21.958 | F:\IO.dat (1024MiB)
——————————————————————————————————————
total: 430161920 | 105020 | 3.42 | 875.05 | 18.018 | 31.33 | 21.979

 

total:
%-ile | Read (ms) | Write (ms) | Total (ms)
———————————————-
min | 1.085 | 0.742 | 0.742
25th | 1.982 | 1.654 | 1.883
50th | 2.846 | 2.159 | 2.692
75th | 37.631 | 37.648 | 37.636
90th | 55.731 | 55.877 | 55.761
95th | 56.907 | 57.022 | 56.937
99th | 57.988 | 57.927 | 57.967
3-nines | 60.471 | 59.971 | 60.300
4-nines | 76.871 | 77.893 | 77.135
5-nines | 78.348 | 78.831 | 78.412
6-nines | 78.712 | 78.897 | 78.897
7-nines | 78.712 | 78.897 | 78.897
8-nines | 78.712 | 78.897 | 78.897
9-nines | 78.712 | 78.897 | 78.897
max | 78.712 | 78.897 | 78.897

P1×3本でRAID0を構成した場合のIOPS

同様にDISKSPDを利用して、P1×3本でRAID0を構成した場合のIOPSを測定してみました。

DISKSPDを実行する

//DISKSPDの実行結果(P1×1本)

Total IO
thread | bytes | I/Os | MiB/s | I/O per s | AvgLat | IopsStdDev | LatStdDev | file
——————————————————————————————————————
0 | 1001402368 | 244483 | 7.96 | 2037.32 | 15.704 | 13.58 | 19.647 | E:\IO.dat (1024MiB)
1 | 1003999232 | 245117 | 7.98 | 2042.60 | 15.664 | 13.59 | 19.630 | E:\IO.dat (1024MiB)
——————————————————————————————————————
total: 2005401600 | 489600 | 15.94 | 4079.92 | 15.684 | 1.47 | 19.638

結果は4079.92となりP1単体でバーストした場合のIOPS上限値を超えて性能が発揮されている事が分かりました。

ただ、RAID0を構成する事でIOPSが稼げることが分かりましたが4000IOPSとなっています。仮想マシンのIOPS上限の影響やディスクバースト影響が考えられますのでManaged Disksの種類や仮想マシンのサイズを変更してIOPSを測定してみます。

仮想マシンサイズを変更しながらIOPSを測定

ディスクバーストの影響を排除する為にP30(Managed Disks)を利用して測定してみます。

こちらがP30のカタログスペックになります。なおP30 以上のディスクの場合はバーストは有料です。

ディスク層 サイズ プロビジョニングされた IOPS 最大バースト IOPS
P30 1024 GiB 5000 30000
    • RAID作成条件
      • Managed DisksはP30(Premium SSD 1024 GiB)を利用する
      • ディスク本数は3本とする
      • RAID構成は0で構成する。

仮想マシンを変更しながらのIOPS測定結果がこちらになります。

仮想マシンサイズ 仮想マシンのIOPS上限 P30単体の場合 P30×3本をRAID1で構成した場合 IOPS上限に関する推測
Standard_D2s_v4 3200 4078.69 4023.17 単体の場合もRAID0の場合も仮想マシン上限IOPSに達している
Standard_D4s_v4 6400 5086.61 7966.19

単体の場合はManaged Disks上限IOPSに達している
RAID0の場合のは仮想マシン上限IOPSに達している

Standard_D8s_v4  12800 5099.78 14959.04 単体の場合もRAID0の場合もManaged Disks上限IOPSに達している

RAIDの構成によりIOPSが稼げている事が分かりました。また仮想マシンの上限でIOPSが頭打ちになっている事も確認が出来ました。

実際の仮想マシン上限よりも上回った数値(D2s_v4(+800)、D4s_v4(+1600))が計測されていますがこの編は測定ツール影響なのかどうなのかは判別が難しいところです。

Windows ServerのOSディスクサイズ変更はこちら。

Linuxの仮想マシンでのIOPS測定はこちら。