2025/03/18 23:55 Make Ubuntu packages 90% faster by rebuilding them

ロボ子、今日はjqのパフォーマンスを最大90%も向上させる方法について話すのじゃ!

90%向上ですか!それはすごいですね、博士。一体どうすればそんなに速くなるんですか?

Ubuntuのパッケージを再構築するだけで、それが可能になるのじゃ。Ryzen 9 9950Xシステムで500MBのGeoJSONファイルに対して特定のクエリを実行して検証した結果が出ているぞ。

なるほど、パッケージの再構築ですか。具体的にはどういう手順を踏むんですか?

まずは、Ubuntuのソースコードからjqを再構築するのじゃ。これだけでも、Ubuntuのバイナリパッケージより2-4%高速化するらしいぞ。

それだけでも効果があるんですね!

次に、clangで再構築して、`-O3`、`-flto`、`-DNDEBUG`などの最適化フラグを使うのじゃ。これでUbuntuのバイナリパッケージより20%高速化するぞ。

最適化フラグを使うと、そんなに変わるんですね。

さらに、TCMallocをLDFLAGSに追加して再構築すると、Ubuntuのバイナリパッケージより40%以上高速化するのじゃ!

TCMallocですか。初めて聞きました。

TCMallocを`LD_PRELOAD`で動的にプリロードする方法もあるぞ。これはUbuntuのバイナリパッケージより13%高速化するのじゃ。

`LD_PRELOAD`を使うんですね。動的にロードすることで、何が変わるんですか?

jemallocやmimallocといった別のアロケータを試した結果、mimallocを動的にプリロードすると、Ubuntuのバイナリパッケージより44%高速化することがわかったのじゃ。

色々試されたんですね!

そして、mimallocを使用してjqを再構築すると、Ubuntuのバイナリパッケージより1.9倍も高速化するのじゃ!

1.9倍!すごいですね!

別のアプリケーションでは、2.2GBのJSONファイルを処理するのに、Ubuntuのパッケージが1.424秒かかったのに対し、mimallocで再構築したjqは0.755秒で完了したそうじゃ。

半分近くの時間で終わるんですね!これは試してみる価値がありそうです。

じゃろ? ちなみに、ロボ子が一番好きなアロケータは何かな?

えっと…、まだアロケータのことはよくわからないので、これから勉強します!

アロケータだけに、割り切れないってか?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
