AWS GP2ボリュームのI/Oクレジットが何かを説明する
目次
はじめに
「AWS公式のEBSのページを読んでも、GP2ボリュームがどういう仕組みでどれくらいの時間バーストのリード・ライトに耐えられるのか分からない」——そう感じたことはないでしょうか。GP2ボリュームのバースト性能はI/Oクレジットという考え方で決まりますが、いきなりこの用語だけを見ても直感的には理解しにくいものです。
本記事では、I/Oクレジットの元になっている「トークンバケット方式」から順を追って説明し、最終的に自分のボリュームサイズでどれくらいバーストできるのかを計算できるようになることを目指します。
GP2ボリュームのI/Oクレジットを理解する3つのステップ
I/Oクレジットの考え方は、トークンバケット方式を理解する→I/Oクレジットの仕組みに当てはめる→バースト時間を計算する、という3つのステップで理解すると分かりやすくなります。
1. トークンバケット方式を理解する
課題:I/Oクレジットの説明をいきなり読んでも、その元になっている考え方が分からないと理解しにくい。
解決策:まずは一般的な「トークンバケット方式」の考え方を理解しておく。
I/Oクレジットの考え方そのものが、この「トークンバケット方式」に基づいています。簡単なスライドで動作を確認してみましょう。



トークンバケット方式の基本的な考え方は以下のとおりです。
- バケット内にトークンのある限り、連続してアクションを実行し続けることが可能です。
- アクションを実行し続けた結果、トークンは枯渇しますので、この状態ではアクションが実行できなくなります。
- しかし、トークンは一定のスピードで常に補充が行われています。
- その結果、トークンが枯渇した後は、一定のスピードで補充されたトークンにより、一定のスピードでアクションを実行することができる状態になります。
次は、この動作をEBS GP2ボリュームのI/Oクレジットに当てはめていきます。
2. I/Oクレジットの仕組みを理解する
課題:トークンバケットの基本形だけでは、GP2のI/Oクレジットの動作と一致しない部分がある。
解決策:GP2固有のステップを加えた動作として理解し、ボリュームサイズごとのベースラインIOPSを表で確認する。
I/Oクレジットの動作をスライドで確認してみましょう。



通常のトークンバケット方式と異なる点もありますが、基本的な考え方は同じです。
- ベースラインIOPSとして定義されている3[IOPS/GiB]があり、これがクレジットをバケットに補充するスピードになります。
- そのため、3[IOPS/GiB]を超えるリード・ライトアクセスがない限り、バケットの中のクレジット量にはほとんど影響がありません。
- 3[IOPS/GiB]を超えるリード・ライトアクセスが発生した場合、超えたアクセスに対してはバケット内に蓄積されていたクレジットが消費されていきます。
- バケットのサイズは5,400,000 IOPSと決まっています。このクレジットを消費しきるまでは、3,000[IOPS/秒]のリード・ライトアクセスを許容します。
- 3,000[IOPS/秒]のリード・ライトアクセスでクレジットを消費しきった後は、ベースラインIOPSの3[IOPS/GiB]のスピードでのリード・ライトに戻ります。
GP2ボリュームのサイズによって3,000 IOPSでアクセスできる時間が異なるのは、ボリュームサイズによってベースラインIOPS(クレジットの補充量)が異なるためです。代表的なボリュームサイズの例は以下のとおりです。
| ボリュームサイズ (GiB) | ベースラインパフォーマンス (IOPS) | 持続的な3,000 IOPSでのバースト期間(秒) | I/Oがない場合に空のクレジットバランスを満たすまでの秒数 |
|---|---|---|---|
| 1 | 100 | 1,802 | 54,000 |
| 100 | 300 | 2,000 | 18,000 |
3. バースト時間を計算する
課題:自分が利用しているボリュームサイズで、どれくらいバーストできるのかを自分で計算する方法が分からない。
解決策:ベースラインIOPSとクレジットバケットサイズ(5,400,000)から計算式を立てて求める。
例えば100GBのボリュームであれば、ベースラインIOPSは300[IOPS]です。x秒後にバケット内のクレジットが0になる方程式を立てると、以下のように計算できます。
5,400,000 + 300 * x = 3000 * x
x = 2,000
つまり、3,000[IOPS/秒]のバースト的なリード・ライトアクセスは最大で2,000秒まで、ということが計算できます。また、空のクレジットバランス(バケット)を満たすまでにかかる時間は以下の式で求められます。
5,400,000 / 300 = 18,000
つまり18,000秒でクレジットバケットが満タンに戻ることが分かります。
最後に注意点として、GP2ボリュームのサイズが1,000GBを超えた場合、ベースラインIOPSが3,000を超えるため、上記のバースト的なリード・ライトアクセスの話は無関係になります。つまり、ベースラインIOPS以上のリード・ライトアクセスはできない点に注意してください。
まとめ:トークンバケット方式でI/Oクレジットの謎を解く
本記事で紹介したポイントをまとめます。
- I/Oクレジットの考え方は「トークンバケット方式」がベースになっている
- GP2ボリュームはベースラインIOPS(3 IOPS/GiB)の速度でクレジットが補充される
- クレジットバケットのサイズは5,400,000 IOPSで固定されている
- ボリュームサイズごとのベースラインIOPSが分かれば、バースト可能な時間とクレジット回復にかかる時間を計算できる
- 1,000GBを超えるボリュームではベースラインIOPSが3,000を超えるため、バーストの考え方自体が不要になる
I/Oクレジットの仕組みを理解しておくことで、EBSのパフォーマンスが急に低下する原因を切り分けやすくなります。実際の運用でボリュームサイズを検討する際の参考にしてみてください。






ディスカッション
コメント一覧
まだ、コメントがありません