EC2 の Instance Store を RAID で束ねてディスク I/O 性能を上げる
Posted on
- #aws
EC2 の現行世代のインスタンスには Instance Store に SSD が搭載されています。「DigitalOcean と Amazon EC2 のディスク I/O を比較してみた」にも書きましたが、SSD と比べて EBS はかなり遅いので、一時的なファイルは Instance Store に書き込んだほうがパフォーマンスが出ます。
c3.large には 16 GB の SSD が 2 つ載っています。個別にマウントしてもいいのですが、せっかくなので RAID 0 でストライピングしてどれくらい I/O 性能が上がるか検証してみました。
検証条件
- インスタンスタイプは c3.large (2 x 16 GB)
- OS は Amazon Linux AMI 2014.03.1 (64 bit)
- hdparm コマンドを 3 回実行して平均値を採用
- ファイルシステムは ext3
RAID なしの単体で計測
まず単体でテストしてみます。 Amazon Linux を使っていると CloudInit が自動的に Instance Store をマウントしてくれます。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 1.1G 6.7G 14% /
devtmpfs 1.9G 20K 1.9G 1% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/xvdb 16G 167M 15G 2% /media/ephemeral0
# mount | grep /dev/xvdb
/dev/xvdb on /media/ephemeral0 type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
/dev/xvdb
が SSD の 1 本目です。マウントしていないので df コマンドには出てきませんが、/dev/xvdc
に 2 本目の SSD があります。ファイルシステムは ext3 でした。
/dev/xvdb
に対して計測。
# for n in `seq 1 3`; do hdparm -t /dev/xvdb; sleep 10; done
/dev/xvdb:
Timing buffered disk reads: 2976 MB in 3.00 seconds = 991.59 MB/sec
/dev/xvdb:
Timing buffered disk reads: 3190 MB in 3.00 seconds = 1063.27 MB/sec
/dev/xvdb:
Timing buffered disk reads: 3118 MB in 3.00 seconds = 1039.09 MB/sec
EBS と比べるとかなり速いことが確認できます。平均すると 1031.31 MB/sec です。
RAID を組む
次に SSD 2 本で RAID 0 を組みます。 /dev/xvdb
をアンマウントして、mdadm でソフトウェア RAID を組みます。
# umount /media/ephemeral0
# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/xvd[bc]
mdadm: /dev/xvdb appears to contain an ext2fs file system
size=15996416K mtime=Sat May 10 12:53:16 2014
mdadm: /dev/xvdc appears to contain an ext2fs file system
size=15996416K mtime=Thu Jan 1 00:00:00 1970
Continue creating array? yes
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
条件を合わせるために ext3 でフォーマットし、マウントオプションも揃えます。
# mkfs.ext3 /dev/md0
# mount -o rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered /dev/md0 /media/ephemeral0
確認してみます。 RAID 0 なので容量がほぼ倍になっています。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 1.1G 6.6G 14% /
devtmpfs 1.9G 28K 1.9G 1% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/md0 31G 177M 29G 1% /media/ephemeral0
# mount | grep /dev/md0
/dev/md0 on /media/ephemeral0 type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
RAID 0 で計測
/dev/md0
に対して計測してみます。
# for n in `seq 1 3`; do hdparm -t /dev/md0; sleep 10; done
/dev/md0:
Timing buffered disk reads: 4956 MB in 3.00 seconds = 1651.41 MB/sec
/dev/md0:
Timing buffered disk reads: 4948 MB in 3.00 seconds = 1649.29 MB/sec
/dev/md0:
Timing buffered disk reads: 5108 MB in 3.00 seconds = 1702.59 MB/sec
ストライピングしたおかげで単体よりも性能が上がりました。平均すると 1667.76 MB/sec で 162 % の性能アップです。 EBS が 37.49 MB/sec だったので約 45 倍の違いがあります。
ちなみに ext4 でも試してみましたが、ほぼ同じ結果になりました。
まとめ
Instance Store と RAID を組み合わせることで EBS とは比べ物にならない I/O 性能を得られます。しかも、EBS と違い無料で使えます(EC2 のインスタンス料金に含まれている)。
自分もまだ活用しきれていないので、活用方法を考えてみようと思います。