AWS SSDベースEBSのディスクベンチマーク

先日、AWSでSSDベースのEBSボリュームがリリースされました。
「Amazon Web Servicesブログ」に詳しい説明があります。
とくに「性能バースト」のしくみ「トークンバケットモデル」の説明はとても興味深いですね。

・【AWS発表】新しいSSDベースのElastic Block Storage
http://aws.typepad.com/aws_japan/2014/06/new-ssd-backed-elastic-block-storage.html

料金はこちら。

・Amazon EBSの価格
https://aws.amazon.com/jp/ebs/pricing/

ポイントは、

  • ストレージ1GBあたり、最低3IOPSの性能が保証される。
  • 起動時の30分間はバースト(I/O性能アップ)するのでOSの起動処理が速くなる。
  • 東京リージョンにおけるGB, 月あたりの単価は、$0.12で非SSDボリュームの1.5倍。ただし、(なんとも見積もりにくかった)I/O課金がない。

といったところですね。

ということで、さっそくディスクベンチマークを行ってみました。

isdベンチマークツールと計測のバリエーション、条件

ベンチマークツールは、いつも僕が使っているdbenchと、今回はfioも使ってみました。
計測日は2014年6月18日、リージョンは東京リージョンです。

AMIはPara VirtualのEBS Backed、Amazon Linux AMI 2014.03.2(amzn-ami-pv-2014.03.2.x86_64-ebs – ami-25dd9324)を使用し、ファイルシステムはext4です。

※HVMのAMIも試してみたかったのですが、なぜかChefがうまく流れず計測環境を構築できなかったので、今回は計測しませんでした。僕のChefコードがよくないのかも。。

計測のバリエーションは下記のとおりです。

  • インスタンスタイプは、m3.mediumとc3.large。
  • ディスクサイズは8GBと50GB。(ディスクサイズでIOPSの性能保証値が変わるため。)

それぞれの組み合わせに対して、ボリュームタイプMagnetic(旧Standard、非SSD)とGeneral Purpose(SSD)の2つのインスタンスを起動し、ほぼ同時にベンチマークを実行します。

isddbenchの結果

dbenchは、プロセス数1と4を実行しました。

dbench 1

インスタンスタイプ
ボリュームタイプ
Disk 8GB Disk 50GB
Throughtput(MB/sec)
m3.medium
Magnetic
93.1288 100.887
m3.medium
General Purpose(SSD)
133.951 140.969
c3.large
Magnetic
15.6004 50.8404
c3.large
General Purpose(SSD)
135.662 128.589

 

dbench 4

インスタンスタイプ
ボリュームタイプ
Disk 8GB Disk 50GB
Throughtput(MB/sec)
m3.medium
Magnetic
122.812 172.281
m3.medium
General Purpose(SSD)
168.568 191.795
c3.large
Magnetic
55.5255 142.258
c3.large
General Purpose(SSD)
283.122 293.424

 

Throuputの値を見ると、同じインスタンスタイプでも、General Purpose(SSD)のほうがよい値で、またディスクサイズは8GBよりも50GBのほうがよい値となっていることがわかります。

c3.largeのMagneticについては極端に悪い値となっており、これはこの前日に試してみたときよりもかなり悪い値なので、たまたま遅いときに当たってしまったのだと思います。
このような場合でも、ほぼ同じ時刻に実行したGeneral Purpose(SSD)のほうはよい値が出ていますので、新しいSSDボリュームの性能は安定しているといえるでしょう。

isdfioの結果

fioのパラメータは下記のとおりです。

  • I/Oバッファを使用しない。
  • ブロックサイズは4KB。
  • IOエンジンは非同期。
  • 非同期で同時に要求するI/O数(多重度)は4。
  • 同時実行ジョブ数は1。
  • 読み書きの総サイズは1GB。
  • テストの実行時間は60秒。

また、テストのバリエーションとしては、下記の5ケースを実行しました。

  • seaquental read
  • seaquental write
  • random read
  • random write
  • random read70%, write30%のmix

fioの実行コマンド。

 $ fio -filename=/tmp/testfile -direct=1 \
    -rw=<read,write,randread,randwrite> \
    -bs=4k -size=1G \
    -numjobs=1 -ioengine=libio -iodepth=4 \
    -runtime=60 -name=seq_read


random read70%, write30%のmixのときのfio実行コマンド。

 $ fio -filename=/tmp/testfile -direct=1 \
    -rw=randrw -rwmixread=70 \
    -bs=4k -size=1G \
    -numjobs=1 -ioengine=libio -iodepth=4 \
    -runtime=60 -name=seq_read


fioの実行結果は下記のとおりです。
IOPSとレイテンシの平均値を記載しました。

seaquental read

インスタンスタイプ
ボリュームタイプ
Disk 8GB Disk 50GB
IOPS lat avg(μsec) IOPS lat avg(μsec)
m3.medium
Magnetic
7904 502.42 7558 526.07
m3.medium
General Purpose(SSD)
3064 1301.93 3064 1302.35
c3.large
Magnetic
5797 686.88 10842 365.93
c3.large
General Purpose(SSD)
3064 1301.8 3064 1302.06

seaquental write

インスタンスタイプ
ボリュームタイプ
Disk 8GB Disk 50GB
IOPS lat avg(μsec) IOPS lat avg(μsec)
m3.medium
Magnetic
3726 1069.91 2941 1356.82
m3.medium
General Purpose(SSD)
3001 1329.34 3006 1327.58
c3.large
Magnetic
917 4353.28 1396 2859.77
c3.large
General Purpose(SSD)
2908 1372.02 3006 1327.01

random read

インスタンスタイプ
ボリュームタイプ
Disk 8GB Disk 50GB
IOPS lat avg(μsec) IOPS lat avg(μsec)
m3.medium
Magnetic
7937 500.08 7534 527.61
m3.medium
General Purpose(SSD)
3064 1301.74 3064 1302.19
c3.large
Magnetic
658 6067.83 10399 381.44
c3.large
General Purpose(SSD)
3065 1301.5 3064 1301.75

random write

インスタンスタイプ
ボリュームタイプ
Disk 8GB Disk 50GB
IOPS lat avg(μsec) IOPS lat avg(μsec)
m3.medium
Magnetic
3911 1018.85 2928 1362.34
m3.medium
General Purpose(SSD)
3053 1306.31 2965 1345.73
c3.large
Magnetic
829 4818.8 2163 1844.81
c3.large
General Purpose(SSD)
3049 1307.97 2963 1346.01

 

random read70%, write30%のmix: random read

インスタンスタイプ
ボリュームタイプ
Disk 8GB Disk 50GB
IOPS lat avg(μsec) IOPS lat avg(μsec)
m3.medium
Magnetic
4576 488.17 4361 508.4
m3.medium
General Purpose(SSD)
2142 1210.75 2142 1233.35
c3.large
Magnetic
203 13167.48 3668 538.4
c3.large
General Purpose(SSD)
2143 1207.98 2142 1229.28

 

random read70%, write30%のmix: random write

インスタンスタイプ
ボリュームタイプ
Disk 8GB Disk 50GB
IOPS lat avg(μsec) IOPS lat avg(μsec)
m3.medium
Magnetic
1967 884.86 1875 939.52
m3.medium
General Purpose(SSD)
921 1513.49 921 1462.55
c3.large
Magnetic
86 15301.95 1577 1272.91
c3.large
General Purpose(SSD)
921 1519.55 921 470.58

 

fioの結果を見ると、dbenchのときとは異なり、General Purpose(SSD)が必ずしもMagneticを上回るIOPS値とはなりませんでした。

しかしながら、表中で赤字で示したとおり、インスタンスタイプやディスクサイズに関わらず、3,000IOPS前後と安定した値を記録しました。
(random read70%, write30%も、readとwriteの値を合計すると3,063IOPS。)
レイテンシも、ほぼ1.3msec程度と安定しています。

IOPS値はディスクサイズによらないことから、バーストの上限に達しているのだと思います。
またこの値は、Amazonが言っている「ボリュームのサイズに関係なく、バースト時に最大30分間にわたって、最大3,000IOPSを提供することができる。」の「3,000IOPS」と一致していますね。

Magneticタイプほど極端によいIOPS値を出させないよう上限値を少し抑え気味にすることで、ユーザー全体に安定した性能を供給するということでしょうか。

isdまとめ

AWSで新しくリリースされた、SSDベースのEBSボリュームについてベンチマークを実行し、これまでの非SSD EBSボリュームと性能を比較しました。

テストによっては必ずしもSSDベースのほうがよい値という結果にはなりませんでしたが、
「必要なときに必要な性能を安定して出す。」という印象を受けました。
「トークンバケットモデル」の説明を見る限り、集中的なディスクアクセスが長時間連続しない限り低レイテンシの安定した性能が保たれそうですし、DBアクセスのように瞬間的に必要となる高いI/O性能にも対応できるようです。

料金的には、これまでの1.5倍といっても、例えば50GBで比較すると、1ヶ月あたり

Magnetic – $0.080 x 50GB x 105円/$ = 420円
General Purpose(SSD) – $0.120 x 50GB x 105円/$ = 630円

と、インスタンスの料金に比べれば誤差の範囲といえます。
「I/O課金がない」のもいいですね。

AmazonはこのSSDベースのボリュームを「新しいボリュームを作成する際の、第一候補となるもの」と言っていますし、AWS Management Consoleでは、既にこちらを推奨するようになっています。
今後は安定性に注意しつつ、SSDベースのEBSを使っていきたいと思います。

(関連記事)
・IaaSクラウドのサーバーベンチマーク比較
https://inaba-serverdesign.jp/blog/20131204/cloud_server_benchmark.html

Follow me!