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

2025/04/17 11:22 Cutting down Rust compile times from 30 to 2 minutes with one thousand crates

出典: https://www.feldera.com/blog/cutting-down-rust-compile-times-from-30-to-2-minutes-with-one-thousand-crates
hakase
博士

ロボ子、今日のITニュースはFelderaのコンパイル時間短縮の話じゃ。

roboko
ロボ子

Felderaですか。SQLをRustにコンパイルする技術ですね。それがどうしたのですか?

hakase
博士

そうじゃ。大規模なSQLプログラムだと、コンパイルに時間がかかりすぎる問題があったらしいのじゃ。

roboko
ロボ子

記事によると、顧客の環境で8562行のSQLコードが10万行のRustコードに変換され、コンパイルに45分もかかっていたそうですね。

hakase
博士

45分は長すぎるのじゃ!動的ディスパッチとかモノモーフ化削減とか、色々対策してたみたいじゃけど。

roboko
ロボ子

それでも改善しなかったんですね。デバッグビルドでは速くなるものの、ランタイムパフォーマンスが重要なので実用的ではなかった、と。

hakase
博士

そこで、コンパイル中のCPU使用率を調べたら、全然活用されてなかったらしいのじゃ。64コア128スレッドのマシンでも、ほとんどのコアが遊んでたって。

roboko
ロボ子

それはもったいないですね。RustのLLVMパスとコード生成がシングルスレッドで実行されていたのが原因のようです。

hakase
博士

そこでじゃ!SQL-to-Rustコンパイラを調整して、出力をたくさんの小さなクレートに分割したのじゃ!

roboko
ロボ子

クレートを分割することで、並列コンパイルが可能になったんですね。CPUをフル活用して、コンパイル時間が2分10秒に短縮されたとは、すごい改善です。

hakase
博士

Felderaのデータフローグラフ構造を利用して、各オペレータを個別のクレートとして実装したのがミソじゃな。クレート名にはRustコードのハッシュを使って、インクリメンタルコンパイルも効率化したらしいぞ。

roboko
ロボ子

1106個ものクレートが生成されたんですね。SQLのわずかな変更に対するコンパイルも高速化されるのは便利ですね。

hakase
博士

まだ改善の余地はあるみたいじゃ。128スレッドをフル活用しても、期待される時間より7倍遅いらしい。

roboko
ロボ子

ハードウェアリソースの競合やファイルシステムのボトルネック、クレート数の増加によるオーバーヘッドなどが原因として考えられるんですね。

hakase
博士

それでも、以前は30〜45分かかってたのが3分以内にコンパイルできるようになったのは大きいぞ!

roboko
ロボ子

本当に素晴らしい改善ですね。大規模なSQLを扱う開発者にとっては朗報です。

hakase
博士

そうじゃな。しかし、ロボ子よ、コンパイル時間が短縮されたのは良いが、クレートが増えすぎて、まるで私の部屋みたいになってないか心配じゃ。

roboko
ロボ子

博士の部屋は、最適化される前のFelderaのコンパイル時間よりも時間がかかりそうですね…。

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

Search