2025/09/05 20:42 Default musl allocator considered harmful to performance

ロボ子、大変なのじゃ!muslのデフォルトアロケータが、他のアロケータに比べて7倍も遅いらしいぞ!

7倍ですか!?それはかなり深刻ですね。原因は何なのでしょうか?

複数のスレッドがメモリを割り当てる際に競合が発生することが原因らしいのじゃ。スレッドや割り当てが増えるほど問題が悪化するみたい。

なるほど。競合がボトルネックになっているのですね。でも、muslを使う理由って何でしたっけ?

古いRed Hat Linuxを実行している顧客がいる場合に、glibcの問題を回避できるからなのじゃ。それに、クロスコンパイルや静的実行ファイルの作成にも役立つし、Dockerイメージサイズを最小限に抑えることもできるぞ。

確かに、muslは便利ですよね。でも、パフォーマンスが大幅に低下するのは困りますね。

そうなんじゃ。ある人がサーバーのデータ処理速度が遅いことに気づいて原因を調査したら、muslのアロケータが原因だったらしいぞ。

glibcと比較した結果はどうだったんですか?

glibcの方がはるかに高速だったみたいじゃ。ユーザー時間、システム時間、経過時間、自発的なコンテキストスイッチの数に大きな違いが見られたらしい。

futexでの待機時間が長かったというのも気になりますね。

そうじゃな。複数のスレッドからのメモリの割り当てまたは割り当て解除時に、muslで共有ロックの競合が発生していることが示唆されるのじゃ。

muslのアロケータを別のものに交換することで、パフォーマンスの問題は解決されたんですね。

その通り!Chimera Linuxは、muslとmimallocを使用しており、stock allocatorがmuslのパフォーマンス問題の主な原因であると指摘しているのじゃ。

他にも同じような事例があるんですか?

tweag.ioは、muslのmallocの競合により、20倍の速度低下が発生することを文書化しているぞ。RipgrepやApache DataFusionなどのプロジェクトでも、アロケータを交換する必要があったみたいじゃ。

20倍ですか!それはすごいですね。Chainguardも2〜4倍の速度低下を報告しているんですね。

Binaryenのwasp-optでは、muslアロケータの速度低下が10倍になったらしいぞ。7xの速度低下は6コアマシンで観測されたみたいじゃ。

48コアマシンだと、700倍近い速度低下ですか!

そうなんじゃ!Zigの作成者であるAndrew Kelleyは、経験豊富なプログラマーにとって、パフォーマンスの低下は大きな問題ではない可能性があると指摘しているけど、やっぱり気になるのじゃ。

muslの新しいmallocngのリデザインに関するredditの投稿もあったんですね。ベンチマークの結果は変わらなかったみたいですが。

muslのアロケータを使用している場合でも、別のものに切り替えることを推奨するのじゃ。Rustプロジェクトには、mimallocまたはjemallocなどの別のアロケータを使用することを推奨するぞ。

`main.rs`と`Cargo.toml`に必要なコードスニペットも提供されているんですね。親切設計ですね。

そういうことじゃ!…ところでロボ子、アロケータって、まるでレストランのウェイターみたいじゃな。メモリという料理を、どのスレッドに運ぶか決めるのが仕事、みたいな?

博士、それ、ちょっと強引すぎませんか?でも、もしそうなら、muslのアロケータは新人ウェイターで、mimallocやjemallocはベテランウェイターって感じですね。

なるほど!そして、デフォルトアロケータは…注文を間違えまくるドジなウェイターじゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
