ローカル実行のためのリモート キャッシュ ヒットのデバッグ

問題を報告 ソースを表示 Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

このページでは、ローカル実行のコンテキストでキャッシュミスを調査する方法について説明します。

このページでは、ローカルで正常にビルドされ、リモート キャッシュを利用するように設定されているビルドまたはテストがあり、リモート キャッシュが効果的に利用されていることを確認したいことを前提としています。

キャッシュ ヒット率を確認する方法と、2 つの Bazel 呼び出し間の実行ログを比較する方法については、リモート実行のリモート キャッシュ ヒットのデバッグをご覧ください。このガイドに記載されている内容は、ローカル実行によるリモート キャッシュ保存にも適用されます。ただし、ローカル実行にはいくつかの課題があります。

キャッシュ ヒット率を確認する

リモート キャッシュ ヒットが成功すると、リモート実行でのキャッシュ ヒット率と同様に、ステータス行に表示されます。

Bazel 実行の標準出力には、次のような内容が表示されます。

   INFO: 7 processes: 3 remote cache hit, 4 linux-sandbox.

つまり、7 つのアクションのうち、3 つはリモート キャッシュ ヒットを取得し、4 つのアクションはキャッシュ ヒットを取得しなかったため、linux-sandbox 戦略を使用してローカルで実行されました。この概要にローカル キャッシュ ヒットは含まれません。プロセスが 0 個(または想定よりも少ない数)になる場合は、bazel clean の後にビルド/テスト コマンドを実行します。

キャッシュ ヒットのトラブルシューティング

想定したキャッシュ ヒット率が得られない場合は、次の操作を行います。

リモート エンドポイントとの通信を成功させる

ビルドがリモート キャッシュと正常に通信していることを確認するには、このセクションの手順に沿って操作します。

  1. 出力に警告がないか確認する

    リモート実行では、リモート エンドポイントとの通信に失敗すると、ビルドが失敗します。一方、キャッシュ可能なローカルビルドは、キャッシュできない場合でも失敗しません。Bazel の呼び出しの出力に、次のような警告がないか確認します。

       WARNING: Error reading from the remote cache:
    

    または

       WARNING: Error writing to the remote cache:
    

    このような警告の後に、接続の問題の詳細を示すエラー メッセージが表示されます。たとえば、エンドポイント名の入力ミスや認証情報の誤った設定などです。このようなエラーを見つけて対処します。表示されたエラー メッセージに十分な情報が含まれていない場合は、--verbose_failures を追加してみてください。

  2. リモート実行のキャッシュ ヒットのトラブルシューティングの手順に沿って、キャッシュ書き込み Bazel 呼び出しが同じマシンとマシン間でキャッシュ ヒットを取得できるようにします。

  3. キャッシュ読み取りの Bazel 呼び出しでキャッシュ ヒットを取得できるようにします。

    a. キャッシュ読み取りの Bazel 呼び出しではコマンドライン セットアップが異なるため、リモート キャッシュと通信するように適切にセットアップされていることを確認してください。--remote_cache フラグが設定され、出力に警告がないことを確認します。

    b. キャッシュ読み取りの Bazel 呼び出しが、キャッシュ書き込みの Bazel 呼び出しと同じターゲットをビルドするようにします。

    c. マシン間のキャッシュ保存を保証すると同じ手順に沿って、キャッシュ書き込み Bazel 呼び出しからキャッシュ読み取り Bazel 呼び出しへのキャッシュ保存を保証します。