🏎️

sccacheでどのくらいRustのビルドを高速化できるのか (Windows)

2024/06/27に公開

背景

sccacheはMozillaが開発しているコンパイラー・キャッシング・ツールです。ccacheのようにコンパイラのラッパーとして使用することができます。Rustにも対応しています。

https://github.com/mozilla/sccache

目的

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のコミットID06582776a564c88a7b4c6f9e3d7c0ebd0ef3f34bを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