おそらく、すべての Bazel ユーザーが、 あります。個々のビルドのパフォーマンスを向上させることに特に価値がある 影響の大きい
頻繁に反復処理と(再)ビルドが行われる中核的なデベロッパー ターゲット。
他のターゲットから広く依存している共通ライブラリ。
ターゲット クラスの代表的なターゲット(カスタムルールなど) 1 つのビルドで問題を診断して修正すると、 より大規模に管理できます。
ビルドのパフォーマンスを向上させるための重要なステップは、ビルドのパフォーマンスを向上させるための重要なステップです。 費用を節約できますこのページでは、収集できるさまざまな指標について説明します。 ビルド パフォーマンスの内訳の紹介 これらの指標を使用してビルドのパフォーマンスの問題を検出して修正する方法を確認しましょう。
Bazel ビルドから指標を抽出する主な方法はいくつかあります。次に例を示します。
Build Event Protocol(BEP)
Bazel はさまざまなプロトコル バッファを出力します。
build_event_stream.proto
Build Event Protocol(BEP)を
指定したバックエンドで集計できます。ユースケースに応じて
さまざまな方法で指標を集計できますが、ここでは
いくつかの概念と proto フィールドを確認します。
Bazel の query / cquery / aquery コマンド
Bazel には、3 種類のクエリモード(query、 cquery や aquery など)を使用して、 ターゲット グラフ、構成済みのターゲット グラフ、アクション グラフをクエリする できます。クエリ言語には、 さまざまな機能のスイートの クエリモードを使用すると、ニーズに合わせてクエリをカスタマイズできます。
JSON トレース プロファイル
ビルドのような Bazel が呼び出されるたびに、Bazel はトレース プロファイルを JSON で書き込みます 使用できます。JSON トレース プロファイルは、 Bazel が調査中に何に費やしたのかをすばやく把握するのに非常に役立ちます。 呼び出すことができます。
実行ログ
実行ログは、トラブルシューティングと修正に役立ちます。
マシンや環境の違いによるリモート キャッシュ ヒットの欠落
決定論的ではないからです。フラグを渡すと
--experimental_execution_log_spawn_metrics
(Bazel 5.2 以降で使用可能)このオブジェクトには、詳細な Spawn 指標(
アクションを実行できることです。これらの指標は
ローカルマシンとリモートマシンのパフォーマンスを比較したり
Spawn の実行のうち、常に想定よりも遅い部分(
例に挙げられます。
実行グラフログ
JSON トレース プロファイルにはクリティカル パス情報が含まれていますが、
実行されたアクションの依存関係グラフに関する追加情報が必要な場合。
Bazel 6.0 以降では、次のフラグを
--experimental_execution_graph_log
、
--experimental_execution_graph_log_dep_type=all
を使用して、
実行されたアクションとその相互依存関係
この情報を使用して、ノードが追加するドラッグを 決定しますドラッグによって節約できる可能性のある時間が表示されます。 実行グラフから特定のノードを削除します
このデータは、ビルドとアクションのグラフに対する変更の影響を予測するのに役立ちます。 確認しましょう
bazel-bench によるベンチマーク
Bazel ベンチは ベンチマーク ツールを使用して、Git プロジェクト内でのビルド パフォーマンスを 次のようなケースがあります。
プロジェクト ベンチマーク: 2 つの Git commit のベンチマークを 1 つの Bazel バージョンを消費します。ビルドの回帰を検出するために使用(多くの場合、 依存関係の追加など)が含まれます。
Bazel ベンチマーク: 2 つのバージョンの Bazel を 単一の Git commit をトリガーしますBazel 自体内の回帰の検出に使用されます( Bazel のメンテナンスやフォークなど)。
ベンチマークで経過時間、CPU 時間、システム時間、Bazel の保持時間をモニタリング 最適化されます。
Bazel ベンチは、次の要件を満たす専用の物理マシンで実行することも ばらつきの要因を減らすため、他のプロセスを実行していません。