しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure B-Series VM の挙動と CPU クレジットの仕様を確認する

Azure サポートに B-Series の core 申請を投げていたのが通ったので、前回の続きとして実際に B-Series VM を作成して調べてみることにします。

基本的な B-Series と t2 に関する違いは前回のエントリを見てください。

まずは個人的に AWS でよく使っている t2.small と同じサイズの B1ms の VM を作ります。

f:id:shiba-yan:20170916010720p:plain

プレビュー中ですが、1 時間当たりの金額はかなり安いです。コスパが非常に高いです。

f:id:shiba-yan:20170916010806p:plain

作成した B-Series VM の CPU クレジットは Azure Monitor から 1 分間隔で確認できるようになっていました。CloudWatch は 5 分だった気がするので、Azure のが少し細かいですね。

CPU クレジットとは

まだ Azure の公式ドキュメントには CPU クレジットについては言及がないので、AWS t2 インスタンスの方を読んだ方がいいかも知れません。考え方はほぼ同じになっているはずです。

CPU クレジットとは何ですか。

1 個の CPU クレジットは、1 台の vCPU を使用率 100% で 1 分間実行することに相当します。たとえば、1 台の vCPU を使用率 50% で 2 分間実行したり、2 台の vCPU を使用率 25% で 2 分間実行したりなど、他の vCPU、使用率、時間の組み合わせでも、1 個の CPU クレジットに相当します。

T2 インスタンス - Amazon Elastic Compute Cloud

t2 と同じように複数の vCPU がある場合には少し計算が分かりにくいかも知れません。

バーストと CPU クレジットの使用

B1ms はベースラインパフォーマンスが 20% ですが、CPU クレジットが残っている場合には 100% まで利用することが出来ます。実際に負荷を掛けてみると 100% まで問題なく使われます。

f:id:shiba-yan:20170916013408p:plain

Azure Monitor で CPU クレジットを確認すると、CPU クレジットが消費されていることが分かります。

f:id:shiba-yan:20170916014301p:plain

何故か 1 vCPU を 100% 使用しても、CPU クレジットは 0.5 しか消費されませんでした。これは B-Series の不具合っぽいので、質問を投げていますがよくわかりません。追記:直ってました。

ちなみに Azure Monitor 上は CPU 使用率も 50% になっていました。明らかにおかしいですね。

ベースラインパフォーマンスの確認

今は CPU クレジットの消費が何故か半分になっているので、なかなか CPU クレジットを消費しきれませんでしたが、数時間かけて何とかクレジットを使い切ることが出来ました。

f:id:shiba-yan:20170916230819p:plain

しかし、CPU クレジットが完全に 0 になることはありませんでした。

そしてベースラインパフォーマンスにまで落とされていても、タスクマネージャー上は 100% のままになります。正しい値を読み取るには Azure Monitor から参照する必要があります。

f:id:shiba-yan:20170916231514p:plain

ベースラインパフォーマンスが 20% とはいえ、ハイパーバイザによって 20% きっちりに上限が設定されるわけではないみたいです。平均値が 20% になるように調整されているように見えます。

とはいえ、Azure Monitor の値に不安があるので再検証が必要な気もします。

VM の再起動と CPU クレジット

t2 インスタンスは VM を再起動すると貯まっていた CPU クレジットが初期化されるようになってますが、Azure B-Series でも同様の挙動となっています。

たまたま何故かインスタンスが再起動した結果、Azure Monitor の値にその痕跡がありました。

f:id:shiba-yan:20170916023045p:plain

CPU クレジットが 30 を下回っていましたが、再起動後には 30 に戻っていることが分かります。この挙動を知らないと不具合かと思ってしまいそうですが、多分これは意図した動作です。

f:id:shiba-yan:20170916210456p:plain

逆に CPU クレジットが初期クレジット以上に貯まっていても、再起動で初期化されています。

インスタンスサイズと初期 CPU クレジット

Azure のドキュメントには初期 CPU クレジットが記載されておらず、Twitter ではいろいろと話が飛び交ってましたが、実際に別のインスタンスサイズで作って確認します。

申請時に 8 cores しか要求しなかったので、仕方なく Standard B4ms を作りました。

f:id:shiba-yan:20170916203152p:plain

4 vCPU と 16GB メモリの仮想マシンがプレビュー中は 7000 円程、GA になっても 14000 円程で使えるのは非常に嬉しいですね。本当にもう A-Series VM は要らないです。

Azure Monitor で確認すると、120 CPU クレジットが与えられていました。つまり 1 vCPU あたり 30 CPU クレジットが予め与えられるようです。

f:id:shiba-yan:20170916203300p:plain

このあたりの仕様も AWS の t2 インスタンスと同じようなので、ある意味予想通りという感じです。

気になる部分については確認しましたが、バースト周りの仕様については t2 と同じようです。ただし Azure B-Series はストレージパフォーマンスにも言及されてるので、そこは注意したいです。

追記:CPU クレジットの消費が直ってました

起動したまま放置していた 1 vCPU を持った B-Series インスタンスがあったので、久し振りに負荷を目いっぱいかけてみたところ、正しく CPU クレジットが消費されるようになっていました。

以前は CPU 使用率が 100% であっても、CPU クレジットは 0.5 しか消費されていませんでしたが、今は正しくほぼ 1 が消費されていることが確認できます。

f:id:shiba-yan:20171016183436p:plain

これまでは 0.5 CPU クレジットしか消費されなかったので、ある意味お得ではあったのですが、ちゃんと Azure Monitor で正しい値が確認出来るようになって良かったです。