この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
Amazon EC2で利用するディスクストレージであるAmazon EBSは、一般的なRAID構成は全て使用できます。が、RAID5とRAID6はパリティ書き込み操作によってIOPSが消費されるため推奨されておらず、RAID0とRAID1を利用するのがEBSにおけるグッドノウハウです
RAID0は複数のボリュームをストライピングし、使用できるボリュームサイズもスループットも合計されますが、データの冗長性が無く、単一のボリュームに障害が発生した場合データが完全に失われます。RAID1は複数のボリュームをミラーリングするため、パフォーマンスもボリュームサイズも単一ボリュームと同等ですが、単一のボリュームに障害が発生した場合にもデータが失われません。オンプレミスのディスクストレージだとRAID0+1を構成できるものもありますね。
今回はAmazon EC2上に構築したWindows Server 2012で、EBSをRAID0で構成し、パフォーマンスを計測してみました。
やってみた
構成
以下のような100GBのSSD(300IOPS)のボリュームを、3つ用意しました。
インスタンスタイプは ベンチマークのためにEBS-optimizedなm4.largeを使用しています。
RAID0ボリュームを作成する
Amazon EC2には以下のように100GBのSSDが3つともアタッチされています。
コマンドプロンプトを起動し、diskprtを実行します。
C:\Users\Administrator>diskpart
Microsoft DiskPart バージョン 6.3.9600
Copyright (C) 1999-2013 Microsoft Corporation.
ディスクの一覧を確認します。
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 35 GB 0 B
ディスク 1 オンライン 100 GB 0 B
ディスク 2 オンライン 100 GB 0 B
ディスク 3 オンライン 100 GB 0 B
このうち、ディスク1と2をRAID0構成とします。まずはディスク1を選択し、ダイナミックフォーマットに変換します。
DISKPART> select disk 1
ディスク 1 が選択されました。
DISKPART> convert dynamic
DiskPart は選択されたディスクをダイナミック フォーマットに正常に変換しました。
ディスクの状態を確認します。以下のようにボリュームが存在する状態になっています。
DISKPART> detail disk
AWS PVDISK SCSI Disk Device
ディスク ID: 6A409C71
種類 : SCSI
状態 : オンライン
パス : 0
ターゲット : 5
LUN ID : 0
場所のパス : PCIROOT(0)#PCI(1F00)#PCI(1F00)#SCSI(P00T05L00)
現在の読み取り専用状態: いいえ
読み取り専用 : いいえ
ブート ディスク : いいえ
ページ ファイル ディスク : いいえ
休止状態ファイル ディスク : いいえ
クラッシュ ダンプ ディスク : いいえ
クラスター化ディスク : いいえ
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ---- ---------- ------- --------- --------
Volume 2 D NTFS シンプル 99 GB 正常
このボリュームを削除します。
DISKPART> select volume 2
ボリューム 2 が選択されました。
DISKPART> delete volume
DiskPart はボリュームを正常に削除しました。
同じようにディスク2もダイナミックフォーマットに変換し、存在するボリュームを削除します。
すると以下のように、ディスク1とディスク2がダイナミックフォーマットになっており、GPT(GUID パーティション テーブル)にマークが付いていることが確認出来ます。
DISKPART> list disk
ディスク 状態 サイズ 空き ダイナ GPT
### ミック
------------ ------------- ------- ------- --- ---
ディスク 0 オンライン 35 GB 0 B
ディスク 1 オンライン 100 GB 99 GB *
* ディスク 2 オンライン 100 GB 99 GB *
ディスク 3 オンライン 100 GB 0 B
ディスクの管理画面で見ると、以下のようにディスク1と2が未割り当てになっています。
では、RAID0ボリュームを作成してみましょう。以下のようにstripeと指定してボリュームを作成します。ちなみにRAID1の場合は mirrorと指定します。
DISKPART> create volume stripe disk=1,2
DiskPart はボリュームを正常に作成しました。
ボリュームを一覧表示すると、ボリューム2としてタイプがストライプとなっているボリュームが作成されています。元のディスクサイズがそれぞれ100GBだったので、2つを結合して199GBになっています。
DISKPART> list volume
Volume ### Ltr Label Fs Type Size Status Info
---------- --- ----------- ---- ---------- ------- --------- --------
Volume 0 NTFS Partition 350 MB 正常 システム
Volume 1 C NTFS Partition 34 GB 正常 ブート
* Volume 2 RAW ストライプ 199 GB 正常
Volume 4 F NTFS Partition 99 GB 正常
このボリュームをラベルをつけてフォーマットし、さらにEドライブとして割り当てます。
DISKPART> select volume 2
ボリューム 2 が選択されました。
DISKPART> format quick recommended label="raid0"
100% 完了しました
DiskPart は、ボリュームのフォーマットを完了しました。
DISKPART> assign letter e
DiskPart はドライブ文字またはマウント ポイントを正常に割り当てました。
では、ディスクの管理画面で確認してみます。このようにraid0というラベルで、Eドライブとしてマウントされています。
もちろんエクスプローラ上でもEドライブとして利用可能です。
ベンチマーク
それではお待ちかね、RAID0化したEBSボリュームとそのままのEBSボリュームで、ベンチマークを測ってみます。Windowsでのベンチマークなので、CrystalDiskMarkを使いました。
ベンチマーク前に事前ウォーミングをしておきます。
C:\Users\Administrator>format e: /p:1
C:\Users\Administrator>format f: /p:1
そして実行結果がこちら。RAID0構成にしたEBSボリューム(200GB/600IOPS)
RAIOD0構成にしていない、ただのEBSボリューム(100GB/300IOPS)
シーケンシャルアクセスでは大差が無いものの、4KiBランダムアクセス(Queues=32、Threads=1)では2倍の性能差があります。想定通りですね!
さいごに
さらっとですが、RAID0構成にすることでボリュームサイズもパフォーマンスも向上することが確認出来ました。今回くらいの小さなボリュームサイズだと単体でIOPSを向上させる手段(ボリュームサイズを上げる、プロビジョンドIOPSにする、等)がありますが、汎用SSDの最大IOPSが10,000、プロビジョンドIOPSのSSDの最大IOPSが20,000という制限がありますので、RAID0化することでそれぞれIOPSを向上させることが出来ます。高いIOPSを求められるシステムではEBSのRAID0構成は選択肢の一つとして有用です。