Amazon EBSをRAID0構成にしてディスクI/O性能を上げる

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

RAID0とは

RAID0は、複数のディスクを1台のディスクのように扱い読み書きを高速化します。ストライピングと呼びます。Amazon EBSは、既に高い耐障害性を持っていますので、これをRAID0構成にすることで、Amazon EC2インスタンスの性能を引き出そうというのが今回の実験です。

下準備

RAID構成を組むためにセットアップします。

$ sudo yum update -y
$ sudo yum install mdadm xfsprogs -y
$ sudo yum install bonnie++  --enablerepo=epel -y

RAID0構成の組み方

RAID0構成を組むための基本操作をご紹介します。下記の例はRAID0で2台構成で2つのドライブを指定しています。

$ sudo mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=2 /dev/sdf /dev/sdg 
$ sudo blockdev --setra 65536 /dev/md0
$ sudo mkfs.xfs /dev/md0 -f
$ echo DEVICE /dev/sdf /dev/sdg | sudo tee /etc/mdadm.conf
DEVICE /dev/sdf /dev/sdg
$ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf 
ARRAY /dev/md0 metadata=1.2 name=ip-10-156-99-253:0 UUID=650b41fe:9261e9c8:da982ef0:74f04579
$ sudo mkdir -p /mnt/md0 && sudo mount -o noatime /dev/md0 /mnt/md0

実際にI/O性能を計測するためにbonnie++を用います。

$ sudo bonnie++ -d /mnt/md0/ -u root -q |  sudo bon_csv2html > output.html

4台構成の場合は以下のように変更してください。

$ sudo mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=4 /dev/sdf /dev/sdg  /dev/sdh  /dev/sdi

実際にRAID構成を確認するために以下コマンドを実行します。

$ sudo mdadm /dev/md0 
/dev/md0: 15.100GiB raid0 4 devices, 0 spares. Use mdadm --detail for more detail.

Microインスタンス(EBS)RAID0 2台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:34970 kB/Sec
  • ブロックリライト:27271 kB/Sec
  • ブロック読み込み:162178 kB/Sec
  • ランダムシーク :4549 /Sec

Largeインスタンス(EBS)RAID0 2台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:78498 kB/Sec
  • ブロックリライト:75381 kB/Sec
  • ブロック読み込み:1123610 kB/Sec
  • ランダムシーク :10670 /Sec

Extra Largeインスタンス(EBS)RAID0 2台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:81722 kB/Sec
  • ブロックリライト:86559 kB/Sec
  • ブロック読み込み:1573818 kB/Sec
  • ランダムシーク :12684 /Sec

High-Memory Extra Largeインスタンス(EBS)RAID0 2台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:70917 kB/Sec
  • ブロックリライト:71262 kB/Sec
  • ブロック読み込み:1961041 kB/Sec
  • ランダムシーク :13252 /Sec

Microインスタンス(EBS)RAID0 4台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:36763 kB/Sec
  • ブロックリライト:26447 kB/Sec
  • ブロック読み込み:173878 kB/Sec
  • ランダムシーク :4507 /Sec

Largeインスタンス(EBS)RAID0 4台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:86972 kB/Sec
  • ブロックリライト:80442 kB/Sec
  • ブロック読み込み:1135758 kB/Sec
  • ランダムシーク :11368 /Sec

Extra Largeインスタンス(EBS)RAID0 4台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:113565 kB/Sec
  • ブロックリライト:107232 kB/Sec
  • ブロック読み込み:1551414 kB/Sec
  • ランダムシーク :14466 /Sec

High-Memory Extra Largeインスタンス(EBS)RAID0 4台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:82137 kB/Sec
  • ブロックリライト:80513 kB/Sec
  • ブロック読み込み:1961634 kB/Sec
  • ランダムシーク :16166 /Sec

RAID0 平均値を一覧表示する

Micro(t1.micro) ブロック書き込み(KB/Sec) ブロックリライト(KB/Sec) ブロック読み込み(KB/Sec) ランダムシーク(/Sec) 単価($/h) Linux, Tokyo
1台 28395 21940 138660 7528 0.027
RAID0 2台 34970 27271 162178 4549 -
RAID0 4台 36763 26447 173878 4507 -
Large(m1.large) ブロック書き込み(KB/Sec) ブロックリライト(KB/Sec) ブロック読み込み(KB/Sec) ランダムシーク(/Sec) 単価($/h) Linux, Tokyo
1台 40685 47039 1141063 9474 0.40
RAID0 2台 78498 75381 1123610 10670 -
RAID0 4台 86972 80442 1135758 11368 -
Extra Large (m1.xlarge) ブロック書き込み(KB/Sec) ブロックリライト(KB/Sec) ブロック読み込み(KB/Sec) ランダムシーク(/Sec) 単価($/h) Linux, Tokyo
1台 34706 42305 1625674 7723 0.80
RAID0 2台 81722 86559 1573818 12684 -
RAID0 4台 113565 107232 1551414 14466 -
High-Memory Double Extra Large (m2.2xlarge) ブロック書き込み(KB/Sec) ブロックリライト(KB/Sec) ブロック読み込み(KB/Sec) ランダムシーク(/Sec) 単価($/h) Linux, Tokyo
1台 42641 50221 2066364 13876 1.20
RAID0 2台 70917 71262 1961041 13252 -
RAID0 4台 82137 80513 1961634 16166 -

まとめ

えー、今回も人柱的な実験を行いました。Largeインスタンス以上であれば、1台よりも2台の方がディスクI/O性能が目に見えて上がりました。Microインスタンスは多少改善程度です。また、2台と4台の違いは小さかったです。おそらくですが、ディスクの性能よりも、EC2内でインスタンス毎に割り当てられているネットワークの性能が影響しているのではと思いました。次回は、最後の楽園、EphemeralディスクのRAID0を行ってみたいと思います。