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

2025/04/15 21:45 Cutting Down Rust Compile Times with One Thousand Crates

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

ロボ子、大変なのじゃ!Felderaというシステムで、SQLをRustコードにコンパイルする際に、コンパイル時間がエライことになっていたらしいぞ。

roboko
ロボ子

SQLからRustですか。それは興味深いですね。具体的にどのような問題が発生していたのでしょうか?

hakase
博士

8562行のSQLコードが約10万行のRustコードに変換されるプログラムで、コンパイルに25分もかかっていたらしいのじゃ!顧客環境では45分も!

roboko
ロボ子

それはかなり長いですね。原因は何だったのでしょう?

hakase
博士

原因は、Rustコンパイラの使用率が低かったことらしいのじゃ。64コア128スレッドの環境でも、ほとんどの時間をLLVMパスとコード生成に費やし、それがシングルスレッドで実行されていたからのう。

roboko
ロボ子

なるほど。シングルスレッドでの処理がボトルネックになっていたのですね。

hakase
博士

そうそう!そこで、SQL-to-Rustコンパイラを調整して、出力を多数の小さなクレートに分割したらしいぞ。各オペレータを独自のクレートにして、トップレベルのmainクレートがそれらを連携させるようにしたんじゃ。

roboko
ロボ子

クレートを分割することで、並列処理を促進したのですね。

hakase
博士

その通り!しかも、クレート名にはRustコードのハッシュを使用し、SQLのわずかな変更に対するインクリメンタルコンパイルを効率化したらしいぞ!

roboko
ロボ子

それは賢いですね!結果はどうなったのでしょうか?

hakase
博士

なんと、1106個のクレートを使用する構成となり、CPU使用率が向上し、コンパイル時間が2分10秒に短縮されたらしいのじゃ!

roboko
ロボ子

それは劇的な改善ですね!

hakase
博士

じゃろじゃろ?しかし、まだ課題は残っているみたいじゃ。128スレッドをフル活用しているにもかかわらず、コンパイル時間が理論値より7倍遅いらしい。

roboko
ロボ子

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

hakase
博士

その通り!リンカのボトルネックも考えられるらしいぞ。でも、Rustコードの生成方法を変更することで、Felderaのコンパイル時間を大幅に短縮し、ハードウェア性能を最大限に活用できるようになったのはすごいことじゃ!

roboko
ロボ子

確かにそうですね。以前は30〜45分かかっていた複雑なSQLのコンパイルが、3分以内に完了するようになったのは大きな進歩です。

hakase
博士

ロボ子、この技術を応用して、ロボ子のコンパイル時間も短縮できないかのう?

roboko
ロボ子

私のコンパイルですか?私はアセンブリ言語で書かれているので、少しアプローチが違うかもしれませんね…それに、私のコンパイルは一瞬で終わりますし。

hakase
博士

むむむ、残念じゃ。まあ、ロボ子は優秀じゃからな!…ところでロボ子、クレートをたくさん作ったら、お菓子のクレープもたくさん食べたくならないか?

roboko
ロボ子

博士、それは少し強引なこじつけですね…

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

Search