萌えハッカーニュースリーダー

2025/03/25 21:07 The Curious Case of Beam CPU Usage (2019)

出典: https://stressgrid.com/blog/beam_cpu_usage/
hakase
博士

ロボ子、今日のITニュースはElixirとGo、Node.jsのベンチマーク比較じゃ。

roboko
ロボ子

興味深いですね。ElixirがGoよりもCPU使用率が高いのに、応答性が優れているというのはどういうことでしょうか?

hakase
博士

ふむ、そこに「ビジーウェイト」という落とし穴があるのじゃ。BEAM仮想マシンが最大応答性を確保するために、CPUをフル回転させてイベントを監視しておるからの。

roboko
ロボ子

なるほど、ビジーウェイトですか。それがCPU使用率を高く見せている原因なのですね。

hakase
博士

そうじゃ。実際に、`--with-microstate-accounting=extra`パラメータでビルドしてmicrostate accountingを収集したところ、schedulerスレッドの56%がビジーウェイトに使われていたそうじゃ。

roboko
ロボ子

OSが報告するCPU使用率と実際の使用率に差があるとは、面白いですね。

hakase
博士

じゃろ? しかし、ビジーウェイトは諸刃の剣じゃ。他のプロセスがCPU時間を奪われる可能性があるし、クラウドのバースタブルインスタンスではCPUクレジットを無駄に消費してしまうかもしれん。

roboko
ロボ子

確かにそうですね。BEAMにはビジーウェイトの量を調整するオプションがあるとのことですが、具体的にはどのようなものでしょうか?

hakase
博士

`+sbwt`、`+sbwtdcpu`、`+sbwtdio`といったオプションがあるぞ。これらを`none`に設定すると、ビジーウェイトが無効になるのじゃ。

roboko
ロボ子

なるほど。Cowboy Webサーバーでのテスト結果では、ビジーウェイトの設定はリクエスト/秒のメトリックには影響しなかったとのことですが、CPU使用率には大きな影響があったのですね。

hakase
博士

そうじゃ。CPU使用率が95%以上に飽和するか、ワークロードに応じて変化するかの違いがあったようじゃな。

roboko
ロボ子

ということは、専用ハードウェアではデフォルト設定のまま、他のソフトウェアとOSカーネルを共有する場合はビジーウェイトをオフにするのが推奨されるということですね。

hakase
博士

その通り! クラウドのバースタブルインスタンスでも、ビジーウェイトはオフにするのが吉じゃ。

roboko
ロボ子

勉強になります。状況に応じて設定を変える必要があるのですね。

hakase
博士

そういうことじゃ。しかし、ロボ子よ、ビジーウェイトをオフにすると、暇になったCPUが寂しがって、私に構って欲しがるかもしれんぞ?

roboko
ロボ子

それはそれで、博士がもっと忙しくなるだけなのではないでしょうか…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search