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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

博士の部屋は、最適化される前のFelderaのコンパイル時間よりも時間がかかりそうですね…。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
