元RX-7乗りの適当な日々 このページをアンテナに追加 RSSフィード Twitter

RX-7(FD3S)WRX STI関連のキーワードで検索されて来られた方へ。
右サイドのカテゴリ『』をクリックすると関連する項目だけが表示されます。
日々の写真は『Flickr』で公開しています。

2012/07/27

High I/O Instance ベンチマーク

噂の高速SSDを積んだAmazon EC2インスタンスのI/Oベンチマークをとってみた


先日、Amazon EC2で使える、2TB分のSSDを積んだ新しいインスタンスタイプ(High I/O Instances / High I/O Quadruple Extra Large Instance)が発表されました。

ディスクI/O性能が高速なインスタンスは初登場なので、I/Oがシビアに要求されるデータベース等の利用においては、期待を寄せちゃいますよねー。


というわけで、このSSDのディスクI/Oパフォーマンスがどのくらい速いのかを試してみちゃいました。厳密なベンチマークではないですが、参考になれば幸いです。


・・・ちなみに、過去のベンチマークエントリもあわせてどうぞ。


ベンチマーク対象

ベンチマークをかける対象は、もちろん発表されたばかりの「High I/O Quadruple Extra Large Instance (hi1.4xlarge)」のEC2インスタンスです。

発表されているスペックは以下の通り。

High I/O Quadruple Extra Large Instance

60.5 GB of memory
35 EC2 Compute Units (16 virtual cores*)
2 SSD-based volumes each with 1024 GB of instance storage
64-bit platform
I/O Performance: Very High (10 Gigabit Ethernet)
Storage I/O Performance: Very High**
API name: hi1.4xlarge

*8 cores + 8 hyperthreads for 16 virtual cores 

そのインスタンスで起動させるAMIは、「Amazon Linux AMI 2012.03」の64bitにしてみました。

f:id:rx7:20120726212210p:image:w480


さて、肝心のディスク(ストレージ)ですが、エフェメラルディスクであっても、最近はAWS Management Consoleからアタッチとかできたりします。便利になりましたね。


というわけで、以下のような感じのディスク構成にしてみました。


f:id:rx7:20120726235131p:image

SSDのデバイス2つに加えて、比較対象として、(小さいですが)10GBのEBSのデバイスも2つほどアタッチして、インスタンスを起動させます。


利用ツール(fio)のインストール/実行


EC2インスタンスが起動したら、次はベンチマークをかける環境を作ります。

と、その前に、起動したインスタンスで、デバイスが↑で設定した通りに認識しているかを確認します。


# ll /dev/sd*
lrwxrwxrwx 1 root root 5 Jul 25 12:44 /dev/sda1 -> xvda1
lrwxrwxrwx 1 root root 4 Jul 25 12:44 /dev/sdf -> xvdf
lrwxrwxrwx 1 root root 4 Jul 25 12:44 /dev/sdg -> xvdg
lrwxrwxrwx 1 root root 4 Jul 25 12:44 /dev/sdh -> xvdh
lrwxrwxrwx 1 root root 4 Jul 25 12:44 /dev/sdi -> xvdi

OK。認識できていますねー。


ちなみにCPUはIntel Xeon E5620が積まれていました。8core x2 (HT)で見えたので、CPU2つ分かな。


さて、閑話休題。

今回、ディスクI/Oを計測するツールは「fio」で測ってみることにしたので、そのツールを以下の要領でインストールします。

# wget http://pkgs.repoforge.org/fio/fio-2.0.7-1.rf.src.rpm

src.rpmをダウンロードして、、、


# yum -y install rpm-build libaio-devel gcc make

ビルドに必要になる関連パッケージをyumでインストール。


# rpmbuild --rebuild fio-2.0.7-1.rf.src.rpm

からのrpmbuildでRPMを作りーの、、、


# rpm -Uvh rpmbuild/RPMS/x86_64/fio-2.0.7-1.amzn1.x86_64.rpm

RPMをインストール。


# fio -v
fio 2.0.7

はい、ベンチマークできる環境が整いました。


ちなみに今回ベンチマークを取るのに使ったコマンドは以下の6つです。

まず、上から4つは、それぞれシーケンシャルリード/ライトランダムリード/ライト、ブロックサイズは4kで設定しています。IOPSのチェックが主目的です。

# fio -filename=/data/test2g -direct=1 -rw=read -bs=4k -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1
# fio -filename=/data/test2g -direct=1 -rw=write -bs=4k -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1
# fio -filename=/data/test2g -direct=1 -rw=randread -bs=4k -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1
# fio -filename=/data/test2g -direct=1 -rw=randwrite -bs=4k -size=2G -numjobs=64 -runtime=10 -group_reporting -name=file1

あとの2つは、ブロックサイズを大きくして、主にbandwidth(転送レート)をチェックしています。

# fio -filename=/data/test2g -direct=1 -rw=read -bs=32m -size=2G -numjobs=16 -runtime=10 -group_reporting -name=file1
# fio -filename=/data/test2g -direct=1 -rw=write -bs=32m -size=2G -numjobs=16 -runtime=10 -group_reporting -name=file1

SSDディスク単体のパフォーマンス

High I/O Quadruple Extra Large Instance では、1TBのSSDが2本積まれていますので、まずは1本単体の性能チェックをしてみます。


# fdisk /dev/sdf

まずは、パーティションを切って"/dev/sdf1"を作ります。(fdiskの使い方はググってちょ)

今回は、xfsファイルシステムで統一してベンチマークを取ってみたいので、、、


# yum -y install xfsprogs

安定のyumでxfs関連のパッケージをインスコ。


# mkfs.xfs -f -b size=4096 -i size=512 -l size=64m /dev/sdf1

とりあえず、こんな感じで"/dev/sdf1"にxfsファイルシステムを作成すべくmkfsします。


# mkdir /data
# mount -t xfs -o noatime,logbufs=8 /dev/sdf1 /data

で、こんな感じのパラメータでマウントします。


ここで、先ほど書いた6つのfioコマンドを流して計測した結果が以下です。


Benchmark TypeBandwidthIOPS
4k, sequential read270.1MB/s67536
4k, sequential write82.8MB/s20696
4k, randam read339.8MB/s84945
4k, randam write86.4MB/s21608
32m, sequential read623.5MB/s19
32m, sequential write564.7MB/s17

なかなか優秀です。さすがSSD・・・。


SSD2つでRAID0(ストライピング)でのパフォーマンス

このインスタンスは、せっかくSSDデバイスが2つ付いているので、それならRAID0で束ねなきゃね、って発想は誰もが思うはずなので、こちらもベンチマークをとってみます。

というわけで、さっきの↑と同じ感じで準備します。

(当然、さっき使ったデータが残っていたりする場合は、umountして、パーティション情報を削除して、、、みたいなことをしましょう。)


# /sbin/mdadm --create /dev/md0 --chunk=256 --level=0 --raid-devices=2 /dev/sdf /dev/sdg
# mkfs.xfs -f -b size=4096 -i size=512 -l size=64m /dev/md0
# mount -t xfs -o noatime,logbufs=8 /dev/md0 /data

こんな感じで、ソフトウェアRAID0で"/dev/md0"を作成、xfsファイルシステムを作成&マウントって感じです。

で、、、先ほど同様に6コマンドを実行した結果は以下の通り。


Benchmark TypeBandwidthIOPS
4k, sequential read442.4MB/s110611
4k, sequential write85.4MB/s21345
4k, randam read471.4MB/s117840
4k, randam write74.9MB/s18719
32m, sequential read1268.7MB/s39
32m, sequential write1129.5MB/s35

なぜかライトは伸びていませんが、リードは4kでシーケンシャル/ランダムアクセスともに100,000IOPSを超えています!BSが4kで100,000IOPS超えはなかなか優秀じゃないでしょうか。素晴らしい・・・!


EBSボリューム2つでRAID0(ストライピング)でのパフォーマンス

せっかく比較対象で、EBSボリュームを2つアタッチしているので、こちらでもRAID0(ストライピング)を組んでベンチマークをとってみます。


# /sbin/mdadm --create /dev/md1 --chunk=256 --level=0 --raid-devices=2 /dev/sdh /dev/sdi
# mkfs.xfs -f -b size=4096 -i size=512 -l size=64m /dev/md1
# mount -t xfs -o noatime,logbufs=8 /dev/md1 /data

さっき同様に準備。

からの6コマンドを実行した結果が以下。


Benchmark TypeBandwidthIOPS
4k, sequential read100.0MB/s24993
4k, sequential write12.5MB/s3113
4k, randam read83.2MB/s20803
4k, randam write14.5MB/s3614
32m, sequential read198.9MB/s6
32m, sequential write69.1MB/s2

意外とIOPSが出ております。ランダムリードでも20,000IOPSを超えている。

EBSボリュームって普通のハードディスクとかではなさそうな感じですね。SSDキャッシュとかがついてるのかしら?


通常のエフェメラルディスク2つでRAID0(ストライピング)でのパフォーマンス

せっかくなので、さらに同様な感じで、通常のエフェメラルディスク(これまでAWSで使えたもの)についても、同様にディスク2本でRAID0を組んでベンチマークを取ってみました。

使用したインスタンスタイプは、↑で使ったものに近いスペックであるHigh-Memory Quadruple Extra Large Instance(スペックは以下)を使用し、AMIは↑と同じものを使っています。

High-Memory Quadruple Extra Large Instance

68.4 GB of memory
26 EC2 Compute Units (8 virtual cores with 3.25 EC2 Compute Units each)
1690 GB of instance storage
64-bit platform
I/O Performance: High
API name: m2.4xlarge

f:id:rx7:20120726235132p:image

ちなみにストレージ構成はこんな感じで、↑のインスタンスで使えるエフェメラルディスクをフルに使います。

OSが起動したら、早速RAID0なボリュームを作るべく準備します。

# /sbin/mdadm --create /dev/md0 --chunk=256 --level=0 --raid-devices=2 /dev/sdf /dev/sdg
# mkfs.xfs -f -b size=4096 -i size=512 -l size=64m /dev/md0

# mkdir /data
# mount -t xfs -o noatime,logbufs=8 /dev/md0 /data

とはいっても、先ほどと同じ要領・パラメータです。

そして、6コマンドを実行した結果が以下となります。


Benchmark TypeBandwidthIOPS
4k, sequential read32.8MB/s8189
4k, sequential write6.3MB/s1590
4k, randam read2.9MB/s722
4k, randam write3.2MB/s796
32m, sequential read185.1MB/s5
32m, sequential write85.1MB/s2

こちらはシーケンシャルアクセスに関してはそこそこですが、ランダムアクセスとなると700〜800IOPSとなっているので、通常のディスクに近い感覚ですね。


ベンチマークのまとめ

というわけで、ベンチマーク結果をまとめたグラフがこちらになります。

IOPS

f:id:rx7:20120726235133p:image

※ 単位はIOPS、ブロックサイズ4k


Bandwidth

f:id:rx7:20120726235134p:image

※ 単位はMB/s


結論

そこそこのI/Oリソースが要求されるケースでも、これだけのシーケンシャル/ランダムアクセス性能があれば、ある程度は、このインスタンスで十分こなせるのではないでしょうか。IOPSで100,000以上、帯域幅は1GB/sを超えていますので。

今までのエフェメラルディスクで使えるディスクのI/Oパフォーマンスを比較しても、特にランダムアクセスに関してはかなり優秀な結果となっています。というわけで当然の結果ではありますが、、、

EC2で使えるSSDは速かった!


それでは!それでは!=͟͟͞͞(๑•̀=͟͟͞͞(๑•̀д•́=͟͟͞͞(๑•̀д•́๑)=͟͟͞͞(๑•̀д•́


参考



まとめ


はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。


オススメ (一部は、最近読んでいる本とも言う)
Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus) クラウド Amazon EC2/S3のすべて~実践者から学ぶ設計/構築/運用ノウハウ~ [Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ) エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド [24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 Linux-DB システム構築/運用入門 (DB Magazine SELECTION) キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置 スケーラブルWebサイト 実践ハイパフォーマンスMySQL 第3版 ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE) SQLアンチパターン インターネットのカタチ―もろさが織り成す粘り強い世界― ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化 Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)