Windows2019のAzure VMでRAID構成を組みDiskSpdを使ってIOPSを測定

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を構成する手順

仮想マシンでのRAID構成はソフトウェアRAIDとなります。
検証用の構成としています。

    • 構成内容
      • Windows OSのソフトウェアRAID(マネージドディスクのストライピング)を使用
      • P1(Premium SSD 4 GiB)を利用
      • マネージドディスク本数は3本
      • RAID構成はRAID0(ストライピング)

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

仮想マシンを作成する際に、データディスクを追加する手順です。

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

仮想マシン作成時のマネージドディスク設定画面です。
“データディスク"で"新しいマネージドディスクを作成して接続する"を選択します。

ディスクの作成画面が表示されます。
“サイズを変更します"を選択します。

ディスクサイズの選択画面が表示されます。
P1(4 GiB)を選択します。

ディスクサイズが変更されていることを確認します。
“OK"を選択します。

ディスク追加作業を合計3回繰り返します。
作業が完了すると、3本のデータディスクが設定されていることを確認できます。
仮想マシンの作成と同時に、これらのデータディスクも自動的に作成され、接続されます。

 

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

仮想マシン作成後にデータディスクを追加する手順です。

仮想マシン作成後にマネージドディスクを追加

ディスクのメニューを開きます。
“新しいディスクを作成して接続する"を選択します。
新しい行が追加されるので、ディスク名、ストレージの種類、サイズなどを指定します。
最後に保存を選択します。
新規にマネージドディスクが作成され、仮想マシンに接続されます。

※ディスクの追加は仮想マシンが起動中でも実行可能です。

Windows Serverのデータディスク追加手順は、こちらで紹介しています。

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

Windows Server 2019 Datacenter上でRAIDを構成します。
3本のマネージドディスクを使用してRAID 0(ストライピング)を構成します。

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を測定しています。

スポンサーリンク