📀

Azure VM のManagedDiskのバースト機能

2022/05/12に公開

はじめに

AzureのManaged DiskでどのSKUを使うか、いつも悩みます。その中でも特に頭を悩ませるのがバースト機能の存在です。バーストを理解していないと、ちょうど良いサイズ・性能のディスクを選択できません。
今回はAzureのディスクのバースト機能について情報整理します。
※VMレベルのバースト機能もあるのですが、単純化するため今回はディスクの話のみを対象としています。

バースト機能とは

Azureのマネージドディスクには性能(IOPSとスループット(MB/s))のベースラインがSKUごとに規定されています。基本的には、この性能を向上させるにはより高い種類のDiskを選択するか(Standard HDD -> Standard SSD -> Premium SSD -> Ultra Disk)、同じ種類の中でもより大きなサイズのディスクを選択することになります。

ただそうすると「普段は遅くていいんだけど、特定の処理の時だけスループットが欲しい」とか「容量は小さくていいんだけど、IOPSを稼ぎたい」といった用途に対して、無駄に高いお金を払ってしまうことになってしまいます。

VMだったら、ロードバランサ配下で、負荷が高まったら台数を増やす/下がったら台数を減らすといったスケーリングが常識なっている中で、ディスクだけ常に高いスペックで用意するとしたら、もったいないですよね。

そう言った時に活躍するのがバースト機能です。Azureのマネージドディスクには、2種類のバースト機能が存在します。
https://docs.microsoft.com/ja-jp/azure/virtual-machines/disk-bursting

クレジットバースト

ディスクを休ませておくと力(クレジット)を蓄えておけて、貯めたクレジットを使って瞬間的に性能向上させることができる、という機能です。バーストは、IOPS・スループットそれぞれに対して計算され、効果があります。

対応しているディスク

  • Premium SSDの512GiB(P20)以下のディスク
  • Standard SSDの1024GiB(E30)以下のディスク

価格

無償で利用できます。

有効化

対象のディスクは、規定で有効になっています。

クレジット

クレジットの考え方は、蛇口とバケツの絵で説明されることが多いです。上に出てきた公式ドキュメントの図を引用すると、下記のように説明されています。

例えば、PremiumSSDの128GiB(P10)のディスクで、IOPSを例に考えてみましょう。スペックは下記の通りです。

サイズ 月額 最大IOPS (通常/バースト時) 最大スループット(通常/バースト時)
P10 128 GiB $22.67 500 / 3,500 100MB/s / 170MB/s

※東日本リージョン、LRSの場合を引用
https://azure.microsoft.com/ja-jp/pricing/details/managed-disks/

  • 上の蛇口(クレジット補給)

上の蛇口から、常に水(クレジット)が補給されてきます。この水量は、ディスクのベースライン性能分となっています。P10ディスクであれば、500IOPS分のクレジットが常に供給されている、と考えられます。

  • バケツ(クレジット残)

真ん中のバケツに、未使用の水(クレジット)溜まっています。このバケツは、最大で30分のバースト出力を行うことができるサイズとなっています。
P10ディスクは、バーストで3500IOPSを発揮することができますので、下記の分のクレジットが貯められるということです。
(3,500-500)[IOPS]*1,800[秒]=5,400,000[IO]
※マイナスしている「500」は、上の蛇口から常に供給されているクレジット分です

  • 下の蛇口(出力)

ディスクごとに定義されている「バースト時の最大IOPS」分の出力をすることができます。すなわち、P10ディスクの場合は3,500IOPSです。
このバーストはバケツが空になるまで続けることができますが、バケツが空になっても常に上の蛇口から500IOPS分のクレジットが補給されていますので、最低でも500IOPSの出力をすることができます。

クレジットはベースライン性能分補給されているため、大きいサイズのディスクの方が早くクレジットが溜まり、結果として高頻度・長時間バーストを使うことができるということも特徴です。

補足(AWS)

AWSのEBSにおいても、gp2のディスクが同じような機能を持っています。下記のドキュメントを見ると、そっくりな絵がありますね・・・。AWSをご存知の方は、こちらを見ると理解が進むかと思います。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ebs-volume-types.html

オンデマンドバースト

オンデマンドバーストは、「ベースライン性能を超えることができ、超えて使った分利用料がかかる」という機能です。クレジットを貯めたり、時間制約を考える必要がない代わりに、お金がかかります。

対応しているディスク

  • Premium SSDの1024GiB(P30)以上のディスク

※StandardSSDは対応していません(クレジットバーストとの違い)

価格

ディスクあたり$24.576のバースト有効化料金と、10,000 トランザクション ユニットあたり $0.005のトランザクション料金が課金されます。(トランザクションは、書き込み/読み込み両方でカウントされます)

有効化

オンデマンドバーストを有効化するためには、ディスク毎に設定を行う必要があります。
手順は下記のドキュメントをご参照ください。
https://docs.microsoft.com/ja-jp/azure/virtual-machines/disks-enable-bursting?tabs=azure-powershell

設定を行うためには、ディスク接続先のVMを停止するか、またはディスクをVMから切断する必要があります。
また、一度有効化すると、再度無効化するのは12時間以上時間を空ける必要もあります。
ですので、ワークロードに応じてオンデマンドバーストを有効化/無効化するような運用をイメージされていると期待はずれになってしまいますので注意が必要です。

補足(コスト)

オンデマンドバーストを常に利用するような使い方の場合、コストパフォーマンスには優れておらず、その場合はディスクサイズを上げてベース性能を引き上げた方が良い・・・という主旨で先ほどのドキュメントにも記載されています。
あくまで「バースト」ですので、短時間のみ出力が必要な場合に使う機能と理解しましょう。

おわりに

求められる性能水準を見切り適切なディスクを選択するのが重要です。
無駄に高いお金を払ってしまった…となるくらいならまだましな方で、「クレジットが尽きて全然性能が出ない!遅くなってしまって話にならない!」と言うのはシステムの利用者にも影響が出てかなり残念なことになってしまいます。
以上の通りバースト機能理解したうえで、スペックを最適化して進めましょう。

Discussion