新宿区で働くプロジェクトマネージャーのブログ

新宿区で働くプロジェクトマネージャーのブログ

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のみでの以下の比較をしてみようと思います。

検証パターン

検証する際のその他諸条件

  • インスタンスタイプはすべてのパターンで同じ「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)が一番早い。
  • ①EBS+マグネティックが一番遅い。

検証結果

f:id:utan1999:20160222004656p:plain

考察

以下の事象は本来逆の状態になるはず。設定がなにか違っている感じがする。
  • なぜか、SSD(プロビジョンドIOPS)のほうがIOPSが下がっている。
  • シーケンシャルとランダムで差がない。

改めて、設定を見直して検証したいと思います。 続報はまた今度。