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

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

Ephemeral Storeは一時的なメモリドライブのようなもの

Ephemeral Store(Instance Store)は、EBSブートのEC2インスタンス(Smallインスタンス以上)を立ち上げた際にオマケのように付いてくる領域です。インスタンスをTerminateすると一緒に消えてしまいます。とはいえ、インスタンスが起動中はずっと使うことができますので、ある程度高速に動作させたい場合には最適かもしれません。Management Consoleからは操作できないため、あまり知られていないかと思いますが、ドキュメントにはしっかり書いてあります。今回はこのEphemeral Storeを用いてRAID0構成を組みたいと思います。

Epemeral Storeを指定してインスタンスを起動する

Epemeral Storeを使用するために起動オプションを付けます。今回はRAID0用に4ドライブ使いたいため、Extra Largeインスタンスを指定しました。

$ ec2-run-instances ami-e8fa4ee9 -b /dev/sdb=ephemeral0 -b /dev/sdc=ephemeral1 --region ap-northeast-1 -t m1.small -k mykey1 --user-data-file config.txt

必要となるアプリをインストールします。

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

RAID0設定をする

インタンスが起動したらdfコマンドでEpemeral Storeがマウントされていることを確認してください。起動時にconfigを指定していないとデフォルト動作として勝手にマウントしてしまいます。これをアンマウントしておきましょう。続いてmdadmを使ってRAID0構成を作成します。この例は2台の場合です。

$ sudo mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=2 /dev/sdb /dev/sdc 
$ sudo blockdev --setra 65536 /dev/md0
$ sudo mkfs.xfs /dev/md0 -f
$ echo DEVICE /dev/sdb /dev/sdc | sudo tee /etc/mdadm.conf
DEVICE /dev/sdb /dev/sdc
$ 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

サクッと出来上がりました。4台の場合には以下のように設定してください。

$ ec2-run-instances ami-e8fa4ee9 -b /dev/sdb=ephemeral0 -b /dev/sdc=ephemeral1 -b /dev/sdd=ephemeral2 -b /dev/sde=ephemeral3 --region ap-northeast-1 -t m1.xlarge -k mykey1 --user-data-file config.txt

$ sudo mdadm --create --verbose /dev/md0 --level=0 -c256 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

測定はいつものとおりです。

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

Largeインスタンス(Ephemeral Store)1台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:66479 kB/Sec
  • ブロックリライト:76964 kB/Sec
  • ブロック読み込み:1149932 kB/Sec
  • ランダムシーク :3834 /Sec

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

以下は平均値です。

  • ブロック書き込み:143447 kB/Sec
  • ブロックリライト:166711 kB/Sec
  • ブロック読み込み:1135717 kB/Sec
  • ランダムシーク :6993 /Sec

Extra Largeインスタンス(Ephemeral Store)1台構成 - 64bit

以下は平均値です。

  • ブロック書き込み:66283 kB/Sec
  • ブロックリライト:82933 kB/Sec
  • ブロック読み込み:1614461 kB/Sec
  • ランダムシーク :4262 /Sec

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

以下は平均値です。

  • ブロック書き込み:133287 kB/Sec
  • ブロックリライト:150758 kB/Sec
  • ブロック読み込み:1545761 kB/Sec
  • ランダムシーク :8005 /Sec

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

以下は平均値です。

  • ブロック書き込み:93643 kB/Sec
  • ブロックリライト:221281 kB/Sec
  • ブロック読み込み:1565134 kB/Sec
  • ランダムシーク :13679 /Sec

RAID0 平均値を一覧表示する

Large(m1.large) ブロック書き込み(KB/Sec) ブロックリライト(KB/Sec) ブロック読み込み(KB/Sec) ランダムシーク(/Sec) 単価($/h) Linux, Tokyo
1台 66479 76964 1149932 3834 0.40
RAID0 2台 143447 166711 1135717 6993 -
Extra Large (m1.xlarge) ブロック書き込み(KB/Sec) ブロックリライト(KB/Sec) ブロック読み込み(KB/Sec) ランダムシーク(/Sec) 単価($/h) Linux, Tokyo
1台 66283 82933 1614461 4262 0.80
RAID0 2台 133287 150758 1545761 8005 -
RAID0 4台 93643 221281 1565134 13679 -

まとめ

えー、今回で人柱的な実験は最後となります。これらの結果を踏まえまして、次回はグラフで比較をしたいと思います。お楽しみに!

参考資料

Instance Families and Types