Azure,Managed Disks,Others,Virtual Machines,Windows
Windowsの仮想マシン(Azure VM)でソフトウェアRAID構成を組む手順です。
RAID構成を組んだ場合と、組んでない場合でのディスクのIOPS測定も実施しています。
RAID構成は、RAID0としています。
Windows Serverは、2019 Datacenter Editionを利用しています
※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンと表記しています。
※本記事では、Azure Managed Disksをマネージドディスクとして表記しています。
※一般的なディスクドライブの場合や、メニューを指定する場合はディスクと表記しています。
※IOPSの測定にはDiskSpdを使用しています。
仮想マシンに接続されているマネージドディスクのIOPSについて
仮想マシンでIOPSやスループットが決まる要件は以下の2つになります。
どちらか低い方の上限が実際のパフォーマンスの上限となります。
-
- マネージドディスクの種類およびサイズによるIOPS/スループットの上限
- 仮想マシンのシリーズおよびサイズによるIOPS/スループットの上限
IOPSとは
IOPSは、"Input/Output Operations Per Second"の略称です。
IOPS(Azure Premium Storage)
IOPSはディスクが1秒あたりに処理できるI/O(入力・出力)アクセスの回数を表し、ディスクの性能を評価する際の指標となります。
一般的に、IOPSの値が高いほど、1秒間により多くのI/Oアクセスを処理できるため、ディスクのパフォーマンスが高いことを示します。
1秒間に読み書きできるデータ転送量(スループット)も増える傾向があります。
なお、実際のデータ転送量(スループット)は、次の式で計算されます。
スループット = IOPS × IO Size(1回のI/Oのデータサイズ)
スループット(Azure Premium Storage)
マネージドディスクのIOPSについて
マネージドディスクでは、マネージドディスクのサイズに応じて最大IOPSやスループットが規定されています。
マネージドディスクサイズが大きくなるほど、最大IOPSやスループットの上限も高くなり、マネージドディスクI/O性能が向上します。
Premium SSDやStandard SSDでは、一時的に最大IOPSやスループットの上限を超えてパフォーマンスを引き上げるバースト機能が利用可能です。
サイズによっては、オンデマンド バーストを有効にするための追加料金が発生します。
今回使用したP1(Premium SSD)(4 GiB)では、以下のようなスペックとなっています。
| ディスク層 |
サイズ |
プロビジョニングされた IOPS |
最大バースト IOPS |
最大スループット |
| P1 |
4 GiB |
120 |
3500 |
25 MB/秒 |
仮想マシンのIOPSについて
仮想マシンのシリーズやサイズによって、IOPSやスループットの上限が設定されています。
仮想マシンとマネージドディスクのパフォーマンス
基本的には、仮想マシン全体で利用可能なIOPSやスループットの上限が定められています。
今回使用した仮想マシンの構成における上限値は、以下の通りです。
| 仮想マシンサイズ |
最大 IOPS |
| Standard_D2s_v4 |
3200 |
| Standard_D4s_v4 |
6400 |
| Standard_D8s_v4 |
12800 |
※仮想マシンのサイズやマネージドディスクの構成(本数やキャッシュ)によってマネージドディスク性能(IOPS)が変わります。
※シリーズやサイズによって1台のVMに接続できるマネージドディスクの数やIOPSにも上限があります。
※Dsv4シリーズの各サイズごとのIOPS上限は、公式サイトに記載されています。
Dv4 シリーズのサイズ
RAID構成を組む事でIOPSを向上させることができる
RAID構成を組むことでIOPSを集約することができます。
マネージドディスク ストライピング
たとえば、RAID0の場合はマネージドディスク本数 × 各マネージドディスクのIOPSが、理論上の総IOPSとなります。
そのため、SQL Serverのデータベース用マネージドディスクなど、高いIOPSが求められる用途ではRAID0の活用が有効です。
RAID0ではマネージドディスク1本でも障害が発生するとボリューム全体が障害となり、耐障害性は非常に低くなります。
マネージドディスクは同一データセンター内でのレプリケーションにより、ある程度の冗長性を持っています。
※マネージドディスクのレプリケーションはプラットフォームレベルのデータ保護です。RAID1と同一の冗長性や即時性は保証されません。
マネージドディスクのパフォーマンスレベルの変更については、こちらで紹介しています。
—広告—
Windows仮想マシンでソフトウェアRAIDを構成する手順
仮想マシンにディスクを追加する手順
Windows Serverの仮想マシンにデータディスクを追加する手順については、こちらの記事で紹介しています。
Windows Server 2019 Datacenter上でRAIDを構成する手順
Windows Server 2019 Datacenter上でRAIDを構成します。
3本のマネージドディスクを使用してRAID 0(ストライピング)を構成します。
-
- ディスクの構成
- P1(Premium SSD 4 GiB)を利用
- 追加したディスクは3本
| Windows ServerでRAID構成を作成する |
| Windowsのメニューでディスクの管理を選択します。 |

|
|
ディスクの初期化画面が表示されます。
すべてのディスクにチェックが付いていることを確認し、OKをクリックします。
|

|
|
ディスクの初期化が完了した後、追加したマネージドディスクを右クリックするとメニューが表示されます。
- 新しいスパンボリューム:ディスク1本で構成される通常のボリューム
- 新しいストライプボリューム:RAID0で構成されるボリューム
- 新しいミラーボリューム:RAID1で構成されるボリューム
- 新しいRAID-5ボリューム:RAID5で構成されるボリューム
今回はRAID0なので、新しいストライプボリュームを選択します。
|

|
|
ウィザードが表示されるので、次へをクリックして構成を開始します。
|

|
|
ディスクの選択画面が表示されます。
利用可能なディスクに表示されているディスクをすべて選択し追加します。
次へを選択します。
|

|
|

|
|
新しいストライプ ボリュームのドライブレター選択画面が表示されます。
今回は"E"ドライブを選択しています。
|

|
|
ボリュームのフォーマット画面が表示されます。
“このボリュームを次の設定でフォーマットする"を選択します。
|
 |
|
確認画面が表示されます。
内容を確認し、ボリューム作成を開始します。
確認メッセージが表示されます。
はいを選択し次へ進みます。
※Windows Serverでダイナミックディスクは非推奨となっています。今回は検証目的ですので、そのまま次に進めています。
ダイナミック マネージドディスクからベーシック マネージドディスクへの再変換
|
 |
 |
|
フォーマットが完了すると、Eドライブとして新しいボリュームが作成されていることが確認できます。
|
 |
—広告—
DiskSpdを使用してRAID構成した場合のディスクIOPSを測定する
Windows OS上でIOPSを測定します。
Use DiskSpd to test workload storage performance
Azure Stack HCI向けの記事ですが、Windows環境でのIOPS測定にもそのまま利用できます。
DiskSpdのセットアップ手順
DiskSpdは、ファイルをダウンロードして解凍するだけで利用できます。
GitHubからダウンロード可能です。
microsoft/diskspd
今回は、ダウンロードしたZipファイルを解凍し、Cドライブ直下に配置しています。

マネージドディスク単体でのIOPSを測定
最初に、マネージドディスクのP1(Premium SSD 4GiB)単体でIOPSを測定します。
仮想マシンのサイズにはStandard_D2s_v4を使用しています。
DiskSpdはコマンドラインで実行します。
DiskSpdの実行コマンドやパラメータの詳細については、公式サイトを参照ください。
Command line and parameters
今回はサンプルを参考に、書き込み(Write)25%、ファイルサイズ1GiBの条件で実行しています
| DiskSpdを実行 |
|
# DISKPDを解凍したディレクトリでコマンドを実行します
PS C:\DiskSpd\x86>
.\diskspd -t2 -o32 -b4k -r4k -w25 -d120 -Sh -D -L -c1G F:\IO.dat
|
|
|
DiskSpdの実行結果です。
非常に見やすく、詳細な情報が表示されます。
I/O per s(IOPS)の項目を確認すると、合計で3,499.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
|
|
RAID0を構成した場合のIOPSを測定
DiskSpdを利用して、P1×3本でRAID0を構成した場合のIOPSを測定してみました。
| DiskSpdを実行する |
|
# DiskSpdの実行結果(P1×3本)(RAID 0)
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
|
|
結果は4,079.92となり、P1単体バースト時のIOPS上限値を上回る性能が発揮されていることが分かりました。
RAID0を構成することでIOPSを向上できることが確認できましたが、今回は約4,000 IOPSという結果となっています。
この値は理論値より控えめであり、仮想マシンのIOPS上限やマネージドディスクのバースト制御の影響を受けている可能性があります。
マネージドディスクの種類や仮想マシンのサイズを変更し、IOPSの測定を継続します。
仮想マシンサイズを変更してIOPSを測定
マネージドディスクバーストの影響を排除するため、今回はP30(Managed Disks)を使用して測定します。
-
- RAID構成内容
- Windows OSのソフトウェアRAID(ディスクのストライピング)を使用
- P30(Premium SSD 1024 GiB)を利用
- マネージドディスク本数は3本
- RAID構成はRAID0(ストライピング)
| マネージドディスク層 |
サイズ |
プロビジョニングされた IOPS |
最大バースト IOPS |
| P30 |
1024 GiB |
5000 |
30000 |
仮想マシンサイズごとの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 |
単体の場合は、マネージドディスク上限IOPSに達している
RAID0の場合のは仮想マシン上限IOPSに達している |
| Standard_D8s_v4 |
12800 |
5099.78 |
14959.04 |
単体の場合もRAID0の場合もマネージドディスク上限IOPSに達している |
RAID構成によって、IOPSが向上していることが確認できました。
仮想マシンのIOPS上限によって性能が頭打ちになっていることも確認できました。
一部の測定結果では、仮想マシンの本来のIOPS上限値を上回る数値(D2s_v4で約+800、D4s_v4で約+1,600)が記録されています。
これは測定ツールの影響によるものなのかどうかは分かりませんでした。
—広告—
最後に
Windowsの仮想マシン(Azure VM)でソフトウェアRAID構成を組む手順を確認しました。
IOPS測定した結果、ソフトウェアRAIDの構成を組むことで性能向上の効果がありそうでした。
利用には注意が必要ですが、検証目的や性能測定時のみに利用するなどに使えるかもと思いました。
引き続き、いろいろ試してみたいと思います。
Windows ServerのOSマネージドディスクサイズ変更手順については、こちらで紹介しています。
Linuxの仮想マシンのデータディスク拡張手順は、こちらで紹介しています。
マネージドディスク拡張後にIOPSを測定しています。