Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

rustc-perf によるプロファイリング

Rust benchmark suite は、Rust コンパイラをプロファイリングおよびベンチマークするための包括的な方法を提供します。 このスイートの使用方法については、そのマニュアルに手順があります。

ただし、このスイートを手動で使用するのは少し面倒な場合があります。 rustc コントリビューターがこれをより簡単に使えるようにするため、 コンパイラビルドシステム(bootstrap)もベンチマークスイートとの組み込み連携を提供しており、 スイートのダウンロードとビルド、ローカルのコンパイラツールチェーンのビルドを行い、簡略化されたコマンドラインインターフェイスを使用してそれをプロファイリングできるようにします。

この連携を使用するには、./x perf <command> [options] コマンドを使用できます。

このコマンドには、たとえば --stage 1--stage 2 などの通常の bootstrap フラグを使用して、作成される sysroot のステージを変更できます。また、プロファイリングをより適切にサポートするために bootstrap.toml を設定すると役立つ場合があります。たとえば、ビルドされたコンパイラにソース行情報を追加するには rust.debuginfo-level = 1 を設定します。

x perf は現在、次のコマンドをサポートしています。

  • benchmark <id>: コンパイラのベンチマークを実行し、結果を渡された id の下に保存します。
  • compare <baseline> <modified>: 渡された 2 つの id を持つ 2 つのコンパイラのベンチマーク結果を比較します。
  • eprintln: コンパイラを実行し、その stderr 出力をキャプチャするだけです。 コンパイラは通常、stderr に何も出力しないことに注意してください。 そのため、何らかの出力を得るには eprintln! 呼び出しをいくつか追加するとよいかもしれません。
  • samply: samply サンプリングプロファイラを使用してコンパイラをプロファイリングします。
  • cachegrind: Cachegrind を使用して、コンパイラ実行の詳細なシミュレーショントレースを生成します。

プロファイラのより詳細な説明は、rustc-perf マニュアルにあります。

x perf コマンドには、次のオプションを使用できます。これらは、このスイートで使用できる profile_local コマンドおよび bench_local コマンドの対応するオプションを反映しています。

  • --include: プロファイリングまたはベンチマークすべきベンチマークを選択します。
  • --profiles: プロファイリングまたはベンチマークすべきプロファイル(Check, Debug, Opt, Doc)を選択します。
  • --scenarios: プロファイリングまたはベンチマークすべきシナリオ(Full, IncrFull, IncrPatched, IncrUnchanged)を選択します。

外部クレート向けプロファイリング差分の例

外部クレートに対して、コンパイラの 2 つのコミットのローカル差分を生成することに関心があるかもしれません。 まず、rustc-perf リポジトリで、Rust コンパイラのベンチマークを実行する collector を次のようにビルドします。

cargo build --release -p collector

その後、collector バイナリを指定して、cargo を使用して collector を実行できます。 これは次の引数を想定しています。

  • <PROFILE>: パフォーマンスをどのように測定すべきかを表すプロファイラの選択。 この例では、Cachegrind を使用します。
  • <RUSTC>: ベンチマーク対象の Rust コンパイラのリビジョンで、rust-lang/rust のコミット SHA として指定します。 任意引数により、上記のようにプロファイルとシナリオを実行できます。 必須引数および任意引数に関する詳細は、rustc-perf-readme-profilers にあります。

次に、rust-lang/rust リポジトリの 2 つのコミット <SHA1><SHA2> について、クレート serve_derive-1.0.136 のプロファイル差分を生成する場合は、 rustc-perf リポジトリで次を実行します。

cargo run --release --bin collector profile_local cachegrind +<SHA1> --rustc2 +<SHA2> --exact-match serde_derive-1.0.136 --profiles Check --scenarios IncrUnchanged