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課金がない。
といったところですね。
ということで、さっそくディスクベンチマークを行ってみました。
ベンチマークツールと計測のバリエーション、条件
ベンチマークツールは、いつも僕が使っている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つのインスタンスを起動し、ほぼ同時にベンチマークを実行します。
dbenchの結果
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ボリュームの性能は安定しているといえるでしょう。
fioの結果
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値を出させないよう上限値を少し抑え気味にすることで、ユーザー全体に安定した性能を供給するということでしょうか。
まとめ
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