EBSにSSDタイプが追加されてしばらく経ちましたが、
「でも、お高いんでしょ?」
「値段調べたけど、そんなに高く無いし、SSDだったら絶対に早いよね!HDDよりは」
という先入観があると思いますが、ちゃんと調べてみました。
素晴らしいドキュメント
それはAWSのドキュメントです。
これを読めば、このエントリはもう用済みです。#説明書読まない病は直さんとイカンです。
EBSのクレジット
General PurposeにはEBS I/O クレジットというものが有ります。他方でも紹介されていますが、ディスクI/Oが少ない時にクレジットがたまり、大規模なディスクI/Oが発生した時にそのクレジット分だけバーストするというものです。同じような考え方が t2系インスタンスのCPUクレジットですが、考え方が少し異なる点があります。
EBSクレジットの目的、CPUクレジットとの違い
使わない時にクレジットがたまる(但し上限あり)という考え方は両方同じです。しかし、EBSクレジットは、最初からかなりクレジットを持った状態から始まりますつまり。
- CPUクレジット 起動直後はほとんど溜まってない
- EBSクレジット 起動直後からそこそこある
どんなシステムでも確実にEBSのI/Oがホットになる瞬間があります。それはOSの起動時です。EBSクレジットの目的はここにあります。
General Purpose (gp2) と Provisioned IOPS (io1)
gp2にはEBSクレジットが存在し、これを使うことによって3000IOPSまで、EBSクレジットが続く限りバーストできます。それに対してio1は、予め指定したIOPSを買うイメージです。では、gp2のクレジットが尽きたらどうなるのでしょうか?ここがベースラインです。ベースラインは一律ボリュームサイズ(GB)の3倍です。つまり100GBならば300IOPSがベースラインとなります。io1はこの容量/IOPSのレートを変えたい用途でも使えます。
- 100GBだけど 1000 IOPSは絶対欲しい
EC2のEBSでは、GB容量の30倍という極端な例(5GB – 150 IPOSとか) が作れますが、Amazon RDSの io1は 100GB – 1000 IOPSが下限となるため、RDS用途の主たる目的はパフォーマンスを保証したいときだと思います。
ベースラインとバースト
gp2のベースラインは GB容量 * 3 となります。バーストして、クレジットを使い切ると、ベースラインとなるのは書きましたが、計算ルールがCPUと異なります。バーストの上限は3000 IOPSで、ベースラインとの差分で計算されます。つまり、1TB の gp2 の場合、ベースラインは 3000 IOPSなので、そもそもバーストの必要がありません。対して100GBの gp2の場合、ベースラインは 300 IOPS 、さらに 200GBの場合は 600 IOPS となり、バーストはこのベースラインとの差分で計算されます。つまり、ベースラインが高い = 容量が大きいほど、クレジット消費は緩やかになります。
ボリュームサイズ(GiB) | ベースパフォーマンス(IOPS) | 3,000 IOPS での最大のバースト期間(秒数) | 空のクレジットバランスを補充する秒数 |
---|---|---|---|
1 | 3 | 1,802 | 1,800,000 |
100 | 300 | 2,000 | 18,000 |
250 | 750 | 2,400 | 7,200 |
500 | 1,500 | 3,600 | 3,600 |
750 | 2,250 | 7,200 | 2,400 |
1,000 | 3,000 | 該当しない* | 該当しない* |
Amazon EBS ボリュームの種類 – Amazon Elastic Compute Cloudより抜粋
ご利用は計画的に
ほとんどのユースケースにおいて、gp2がコストパフォーマンス的には有利でしょう。ただし、ディスクIOがある程度見積もれる状態かつ、gp2のベースラインでは足りない場合、io1という選択を考慮します。magneticについては、極端に少ない容量の場合は有利であると思います。
元記事はこちらです。
「RDSをSSD(General Purpose)で運用するときに注意すべきこと」