Windows on Amazon EC2でEBSをRAID0で構成する

はじめに

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つ用意しました。

EC2_Management_Console

インスタンスタイプは ベンチマークのためにEBS-optimizedなm4.largeを使用しています。

EC2_Management_Console 2

RAID0ボリュームを作成する

Amazon EC2には以下のように100GBのSSDが3つともアタッチされています。

tokyo-mywin

コマンドプロンプトを起動し、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が未割り当てになっています。

tokyo-mywin 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ドライブとしてマウントされています。

tokyo-mywin 3

もちろんエクスプローラ上でもEドライブとして利用可能です。

tokyo-mywin 4

ベンチマーク

それではお待ちかね、RAID0化したEBSボリュームとそのままのEBSボリュームで、ベンチマークを測ってみます。Windowsでのベンチマークなので、CrystalDiskMarkを使いました。

ベンチマーク前に事前ウォーミングをしておきます。

C:\Users\Administrator>format e: /p:1
C:\Users\Administrator>format f: /p:1

そして実行結果がこちら。RAID0構成にしたEBSボリューム(200GB/600IOPS)

tokyo-mywin 5

RAIOD0構成にしていない、ただのEBSボリューム(100GB/300IOPS)

tokyo-mywin 6

シーケンシャルアクセスでは大差が無いものの、4KiBランダムアクセス(Queues=32、Threads=1)では2倍の性能差があります。想定通りですね!

さいごに

さらっとですが、RAID0構成にすることでボリュームサイズもパフォーマンスも向上することが確認出来ました。今回くらいの小さなボリュームサイズだと単体でIOPSを向上させる手段(ボリュームサイズを上げる、プロビジョンドIOPSにする、等)がありますが、汎用SSDの最大IOPSが10,000、プロビジョンドIOPSのSSDの最大IOPSが20,000という制限がありますので、RAID0化することでそれぞれIOPSを向上させることが出来ます。高いIOPSを求められるシステムではEBSのRAID0構成は選択肢の一つとして有用です。

参考