Amazon EBSのGeneral Purpose(SSD)のバーストルールを理解する

Amazon EBS

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
先週追加された、EBSの新しいgp2(General Purpose(SSD))タイプ、皆さん試していますか?
従来のStandardタイプで注意するべきI/O課金がかからないなど、注目ポイントがいくつかあると思います。その中でも大きなメリットとして挙げられるのが、I/Oのバーストです。
非常にシンプルなバーストルールでOS起動時など一時的にたくさんのI/Oが必要なときに活用できる便利な機能ですが、パッと見るとルールが見えにくいかもしれないので、ちょっとした例え話で説明してみたいと思います。

I/Oクレジットは必殺技のゲージと心得よ

格闘ゲーム、ありますよね。ちょっと難しい操作だけど、決まると相手に大ダメージを与えることができる超必殺技!!を狙いたくなるところだと思います(強引)。超必殺技は連発できると一方的になってしまうため、一定の時間間隔をもたせるために必殺技ゲージを設定し、ゲージに貯まったポイントを消費して必殺技を発動するルールになっていることがあると思います。
今回のI/Oバーストルールも、これと共通するところがあります。若干こじつけ感はありますが気にせずに。

gauge2

まずは、I/Oバーストルールを確認しておきましょう。AWSのドキュメントには、いろいろなパターンが例示されていますが、ルールは以下4点に集約できます。

  • EBSボリュームごとに、I/Oリクエストの権利をI/Oクレジットとして貯めることができる。上限は540万I/Oリクエスト
  • スタート時、I/Oクレジットは満タン(540万I/Oリクエスト)。
  • ボリュームサイズの3倍のI/Oリクエストが毎秒、I/Oクレジットにチャージされる。
  • I/Oリクエスト数の上限は、毎秒3000I/Oリクエスト(IOPS)。

これだけです。I/Oクレジットを超必殺技のゲージ、必殺技発動がI/Oリクエスト発行と読み替えていただければ、ほら見えてきましたよね?w

必殺技を発動するためには、それまである程度ゲージを溜めなければいけません。I/Oクレジットも、大量のI/Oリクエストを発行するために定常時はI/Oリクエストとチャージのバランスを考える必要があります。必殺技と違い、I/Oリクエストはちょっとずつ発行する場合もあるため、チャージされたI/Oクレジットを都度、I/Oリクエストを発行して消費するというケースもあります(AWSドキュメントでは、base performance levelと表記されます)。

考察

最初からゲージは満タンなので、スタートのタイミングで必殺技が使えますが、そのあとは毎秒のチャージでなんとかやりくりしていくことになります。ボリュームサイズがチャージに直結するので、チャージ目当てでボリュームサイズを大きめにすると言うケースももしかしたらあるかもしれませんが、サイジングがしんどくなるのでわかりやすいProvisioned IOPSを選ぶケースの方が多そうです。

用途として見ると、常にI/Oを発行するようなDBのデータディスクであまりカリカリにチューニング(必要最小限のIOPSで設計)してしまうとチャージによるI/Oクレジットが溜まらず、バーストの恩恵があまり受けられないかもしれません。向いているのはやはり、一時的/突発的にI/Oリクエストが発生する用途、OSのブートボリュームや、意外とファイルサーバーのファイルを保管するボリュームにも向いているかもしれませんね。