🏎️
sccacheでどのくらいRustのビルドを高速化できるのか (Windows)
背景
sccacheはMozillaが開発しているコンパイラー・キャッシング・ツールです。ccacheのようにコンパイラのラッパーとして使用することができます。Rustにも対応しています。
目的
sccacheを使用することでWindow上でのRustプロジェクトのビルドをどのくらい高速化できるのか検証します。
環境
- OS: Windows 11 Home (10.0.22631.0)
- Powershell: 7.4.2
- CPU: Core i7-12700
- メモリ: DDR4-3200 16GBx2
- ストレージ(Cドライブ): Samsung SSD 980 PRO 1TB
Cargo
> cargo --version -v
cargo 1.79.0 (ffa9cf99a 2024-06-03)
release: 1.79.0
commit-hash: ffa9cf99a594e59032757403d4c780b46dc2c43a
commit-date: 2024-06-03
host: x86_64-pc-windows-msvc
libgit2: 1.7.2 (sys:0.18.3 vendored)
libcurl: 8.6.0-DEV (sys:0.4.72+curl-8.6.0 vendored ssl:Schannel)
os: Windows 10.0.22631 (Windows 11 Core) [64-bit]
MSVCのバージョンはv143 (VS 2022 17.10.3)
sccacheはCドライブにキャッシュを作成するように設定してあります。
> sccache --version
sccache 0.8.1
測定方法
通常、sccache初回 (sccache1)、sccache二回目 (sccache2) の3種類の時間を測定する。
-
tokio-rs/tokioのコミットID
06582776a564c88a7b4c6f9e3d7c0ebd0ef3f34b
をCドライブ上にクローンしてビルドする。 - クレートのダウンロードは終わっている状態で計測する。
- 通常、sccache1、sccache2; sccache1、sccache2、通常; sccache2、通常、sccahce1の順に3回ずつ測定する
- 測定ごとに
cargo clean
を実行し、sccacheのキャッシュも削除する - 測定用のコマンドはコピペにより手動で実行するので、測定ごとのインターバルは十分だと思われる
通常
Measure-Command { $env:RUSTC_WRAPPER=""; cargo b --workspace --features full }
sccache1
sccache -z
Measure-Command { $env:RUSTC_WRAPPER="sccache"; cargo b --workspace --features full }
sccache2
$env:RUSTC_WRAPPER="sccache"
cargo b --workspace --features full
cargo clean
sccache -z
Measure-Command { $env:RUSTC_WRAPPER="sccache"; cargo b --workspace --features full }
結果
単位はミリ秒
通常 | sccache1 | sccache2 | |
---|---|---|---|
1回目 | 9145 | 10570 | 8230 |
2回目 | 9015 | 10509 | 8190 |
3回目 | 9000 | 10756 | 8153 |
結論
- キャッシュがほとんどヒットしない場合 (sccache1)、ビルドが1割くらい遅くなる
- キャッシュがほぼ全てヒットする場合 (sccahce2)、ビルドが1割くらい速くなる
感想
他の人のベンチマーク結果を見るともっと速くなっているが、私の環境だと控え目な結果だった。なんで??
Discussion