AmazonWebService実践入門を読んで実践する「その1:I/Oの高速化」続き
前編はこちらへ
前回の続きで、 AmazonWebService実践入門の本にあるI/O高速化の方法をベンチマークを使って試してみる。 のですが、まずは、その方法と取りうる選択肢を列挙してみます。
AWSでのI/O高速化の方法
手段 | 解説 | 遅い→→→→ | →→→→→→→→ | →→→→早い | |
---|---|---|---|---|---|
1. | EC2のストレージタイプの選択 | EBS | インスタンスストア | ||
2. | EC2のボリュームタイプの選択 | マグネティック | SSD(汎用) | SSD(プロビジョンドIOPS) | |
3. | EBS最適化オプションの選択 | EC2とEBSの間のネットワークを占有できるオプション。 ロビジョンドIOPSを使用するときは ネットワークがボトルネックになる場合が多いので、 このオプションを併用するようにしましょう。 また、EBS最適化オプションは比較的大きなサイズの インスタンスでないと利用できない。 |
なし | あり | |
4. | RAID0によるスクレイピング | EBSでは1つのボリュームにおける容量や IOPSには限界があります。 それを超えたパフォーマンスを求める場合、 RAID0でのストライピングが有効です。 |
なし | あり | |
5. | ボリュームの暖機 | EBSボリュームでは、 そのブロックへ初めてアクセスされる前に、 準備処理が行われます。 あらかじめこの準備処理を済ませておくことで、 最初からベストパフォーマンスで 稼働させることができます。 |
なし | あり |
3,4,5はすべてEBSボリュームについてのことであり、特定の条件下で効果を発揮するものの様子なので、 まずは、基本的な1,2のみでの以下の比較をしてみようと思います。
検証パターン
- ①EBS+マグネティック
- ②EBS+SSD汎用
- ③EBS+SSD(プロビジョンドIOPS)
- ④インスタンスストア+マグネティック
- ⑤インスタンスストア+SSD汎用
- ⑥インスタンスストア+SSD(プロビジョンドIOPS)
検証する際のその他諸条件
- インスタンスタイプはすべてのパターンで同じ「t2.micro」にする。
- ボリュームのサイズはすべてのパターンで同じ「8 GiB」にする。
- プロビジョンドIOPSのIOPS設定値は、100/3000とする。(100~20000でないといけないため)
jobファイルその1-(/home/ec2-user/fio-scenario1.fio)
[Sequential-Read] rw=read directory=/tmp/ size=1G blocksize=512k ioengine=libaio buffered=0 [Sequential-Writes] rw=write directory=/tmp/ size=1G blocksize=512k ioengine=libaio buffered=0 [Random-Read] rw=randread directory=/tmp/ size=1G blocksize=512k ioengine=libaio buffered=0 [Random -Writes] rw=randwrite directory=/tmp/ size=1G blocksize=512k ioengine=libaio buffered=0
jobファイルその2-ioengine=sync(/home/ec2-user/fio-scenario1.fio)
[Sequential-Read] rw=read directory=/tmp/ size=1G blocksize=512k ioengine=sync buffered=0 [Sequential-Writes] rw=write directory=/tmp/ size=1G blocksize=512k ioengine=sync buffered=0 [Random-Read] rw=randread directory=/tmp/ size=1G blocksize=512k ioengine=sync buffered=0 [Random -Writes] rw=randwrite directory=/tmp/ size=1G blocksize=512k ioengine=sync buffered=0
jobファイルその3 buffered=1 -ioengine=sync(/home/ec2-user/fio-scenario3.fio)
[Sequential-Read] rw=read directory=/tmp/ size=1G blocksize=512k ioengine=sync buffered=1 [Sequential-Writes] rw=write directory=/tmp/ size=1G blocksize=512k ioengine=sync buffered=1 [Random-Read] rw=randread directory=/tmp/ size=1G blocksize=512k ioengine=sync buffered=1 [Random -Writes] rw=randwrite directory=/tmp/ size=1G blocksize=512k ioengine=sync buffered=1
実行コマンド
fio /home/ec2-user/fio-scenario1.fio > /home/ec2-user/PATTERN1-`date +%Y%m%d_%H-%M-%S`.log fio /home/ec2-user/fio-scenario2.fio > /home/ec2-user/PATTERN2-`date +%Y%m%d_%H-%M-%S`.log fio /home/ec2-user/fio-scenario3.fio > /home/ec2-user/PATTERN3-`date +%Y%m%d_%H-%M-%S`.log
- パターンの番号は別途記載しなおす。
検証前仮説
検証結果
考察
以下の事象は本来逆の状態になるはず。設定がなにか違っている感じがする。
- なぜか、SSD(プロビジョンドIOPS)のほうがIOPSが下がっている。
- シーケンシャルとランダムで差がない。
改めて、設定を見直して検証したいと思います。 続報はまた今度。