Build Cache

概要

Build Cacheは、以前のビルドの一部を再利用することで、時間とリソースを節約します。ビルドを実行ごとに、その出力をキャッシュに保存します。今後ビルドを実行する際には、変更のない部分を再生成しないよう、キャッシュを確認します。

Build Cacheに保存された以前のビルドデータを再利用することで、帯域幅に影響を与えることなくビルド時間を大幅に短縮することが可能であるため、このキャッシングは作業の効率化に大きく影響します。

1 台のマシンからコンテンツを作成し再利用することで、Build Cache は、ローカルで使用することも、複数の Initiator 用に共有キャッシュを作成すること(ベータ機能)、またはローカルと共有の両方を使用することも可能です。

プロジェクトの実行時にBuild Cacheを使用するには、ビルド コマンドに以下のパラメータを追加します。この動作では、キャッシュの中に有用なものがあるかどうかをチェックし、将来の使用のために実行中のビルドをキャッシュに保存します。共有キャッシュを使用する場合は、専用マシンにBuild Cache Serviceもインストールする必要があります。

ローカルのビルドキャッシュを使用するには、Initiator マシンに追加のストレージ領域が必要となります。プロジェクト出力フォルダの最低 2 倍を目安にしてください。

デプロイタイプ

Build cacheは、ClientがどのようにEndpointに接続するかによって、さまざまな方法で展開できます。単一のClientはそれ自身のEndpoint(ローカル)として機能し、複数のClientは単一のEndpoint(リモート)に接続でき、より複雑な、または動的なデプロイも可能です。

使用例とベストプラクティス

開発者用マシン -在宅またはオフィスでの作業

ほとんどのマシンでは、ローカルキャッシュと共有キャッシュの両方を有効にすることを推奨しています。これは、これらのマシンが永続的であり(ラップトップ、デスクトップ、または永続的なVM)、共有キャッシュのみを使用し、そのキャッシュに書き込んでいる他のマシン(通常はCIサーバー)があることを前提としています。共有キャッシュを独占的に使用して書き込みを行うマシンがない場合、開発者マシンはローカルキャッシュのみを使用するべきです。

エージェント上でローカルキャッシュと共有キャッシュの両方を有効化した場合、そのエージェントはローカルキャッシュにのみ寄与できます。

ビルドが実行されると、まずローカル キャッシュがチェックされます。ヒットするとキャッシュが使用されます。そうでない場合、Incredibuildは共有キャッシュをチェックします。ヒットした場合はそのキャッシュを使用、もしくは、ローカル キャッシュを更新して、今後の実行でローカル キャッシュを使用するようにすることでネットワーク トラフィックを削減します。アップロード帯域幅が少ないため、在宅勤務のユーザーが作業する場合は特に便利です。ヒットししない場合、ビルドが実行され、情報がローカルキャッシュに追加されます。

CIマシン

CIビルドは通常、「真実のソース」と考えることがでできます。つまり、CIビルドはあんていして織り、信頼することができ、他のCIビルドや開発者によって共有されているコードが含まれています。ほとんどの場合、CIビルドの一部となるように差し込まれたコードは、変更頻度が少なくなります。その結果、オブジェクトファイルなど、そのコンパイルされた成果物は他の人にも使用される可能性が高くなり、ビルドキャッシュの効率が向上して、全てのユーザーにとってビルドの効率が上がります。CIユースケースにマシンを使用する場合は、共有キャッシュのみを使用することを推奨しています。その後、各マシンは、共有キャッシュへの読み書きを実行します。従って、多くのユースケースで行われるように、CIマシンが崩壊したとしても、コンテンツが利用可能であることが保証されます。また、このキャッシュを在宅やオフィスで働く開発者と共有することも可能です。

Shared Cache Service

共有キャッシュ サービスをホストするマシンでは、パフォーマンスを最大化するために以下の推奨事項を使用してください。

  • Incredibuild をエージェントにインストールしますが、エージェントにライセンスを割り当てません。従って、ビルドを支援または開始しないようにします。

  • このマシンでは他のプログラムを実行しないでください。

  • エージェントの説明を追加し、共有キャッシュであることを明確にします。

Build Cache Serviceのインストール

共有キャッシュを使用する場合は、専用マシンにBuild Cache Serviceをインストールする必要があります。以下のフォーマットを使用してください。

sudo bash ./incredibuild_<version>.ubin install -Y -O <Primary_Coordinator_Machine_IP_or_Hostname> -A <Path_to_Incredibuild_Installation_Directory> -Q <size of cache>

詳細は、コンポーネントのインストール を参照してください。

Build Cache Parameter

Build Cacheを使用するには、ビルド コマンドに以下のパラメータを追加します。Build Cacheが有効化している場合でも、Build Cacheを使用するすべてのビルドでパラメータを使用する必要があります。

項目 説明 備考

--build-cache-local-user

--build-cache-local-shared

--build-cache-local-group="groupname"

ローカルのBuild Cacheを使用するには、次に示す3つのコマンドのいずれかを追加してください。キャッシュが、このマシン上の単一のユーザー(-user)、このイニシエータ上の全員(-shared)、または現在のユーザーを含む特定のユーザーグループ(-group)のいずれかを通じてアクセス可能で共有されているかを指定できます。

これは単独で使用することも、Shared Cacheに加えて使用することも可能です。

注意: これらのパラメータはバージョン3.19で変更されました。このパラメータは、以前は--avoid-local-user|group|sharedでした。オリジナルのパラメータはまだ使用できますが、将来のリリースでは非推奨になる可能性があります。

 

--build-cache-service[= <URL>]

ホストマシンのプロトコル、IPまたはホスト名、ポート番号で定義されたBuild Cache Service上で動作するShared Cacheを使用します。例:http://build-cache-service:8080

プロトコルはhttpでもhttpsでも構いませんが、パフォーマンスを向上させるためにhttpプロトコルを使用することをお勧めします。

デフォルトのBuild Cache Serviceは、エージェント設定またはCLIで定義できます。デフォルトを定義している場合、このパラメータはURLなしで使用できます。デフォルトを定義し、パラメータで異なるURLを使用した場合、パラメータで指定された値が使用されます。

 

--build-cache-basedir=<path>

たとえ同一のファイルであっても、Incredibuildは、異なるパスから発生したファイルをキャッシュミスと見なします。このパラメータを使用すると、同じようなビルドを実行している他のユーザーと共有しないパスの部分を定義できます。Incredibuildは、2つのファイルが同一であるかどうかを判断する際に、パスのこの部分を無視します。

たとえば、パスの一部にユーザー名を含む場合 (例: /home/bill_gates/windows_vista/libs/src/pm-functions.cpp)、 /home/bill_gates/windows_vista/としてbasedirを定義できます。

このパラメータは必須です。

注意: バージョン3.19でこのパラメータを変更しました。以前のパラメータは、--avoid-basedirでした。オリジナルのパラメータはまだ機能しますが、将来のリリースでは非推奨となる可能性があります。

 

ビルドの例

イニシエータ上のすべてのユーザーに対してのみローカルキャッシュを実行する

ib_console --build-cache-local-shared --build-cache-basedir=/home/myuser/opencv make -j 40

ローカルキャッシュと共有キャッシュを実行する

ib_console --build-cache-local-shared --build-cache-service=http://192.54.11.9:8080 --build-cache-basedir=/home/myuser/opencv make -j 40

ローカルキャッシュの設定

ローカルビルドキャッシュサイズは、[Agent Settings] > [General] > [Local Build Cache Size] 設定で編集できます。これは、Initiator をインストールする際にも設定できます。

また、ローカル Build Cache を使用している Initiator 上で以下のコマンドを実行し、他のローカルキャッシュ設定を構成することも可能です。

  • ローカルのBuild Cachにおける場所とサイズに関する情報を返します。

    /opt/incredibuild/management/build_avoid_cache.sh <user|shared|group='groupname'> info

  • ローカルビルドキャッシュのサイズを設定します。デフォルトでは100GBですが、変更可能です。

    /opt/incredibuild/management/build_avoid_cache.sh <user|shared|group='groupname'> set_size <size in GB>

  • ローカルのBuild Cacheを削除します。

    /opt/incredibuild/management/build_avoid_cache.sh <user|shared|group='groupname'> clear

Shared Cache の設定

[Agent Settings] > [General] > [Build Cache Service URL] 設定で、デフォルトの Build Cache Service を定義できます。-build-cache-serviceパラメータに値を指定せずに使用すると、ここで定義した値が使用されます。異なる値を指定すると、エージェント設定の値が上書きされます。

この設定は、コマンドラインインターフェース を使用して変更することもできます。

Build Cache Serviceマシンで以下のコマンドを実行して、その他の構成を行うこともできます。

  • 共有ビルドキャッシュのサイズを取得します。デフォルトでは、キャッシュのサイズは100GBです。

    sudo /opt/incredibuild/management/build_cache_service.py get-size-limit

  • 共有ビルドキャッシュのサイズを設定します。デフォルトでは、キャッシュのサイズは100GBです。

    sudo /opt/incredibuild/management/build_cache_service.py set-size-limit <size>

  • Build Cache Serviceマシン上の共有ビルド キャッシュの場所を返します。

    sudo /opt/incredibuild/management/build_cache_service.py get-path

  • 共有ビルドキャッシュを削除します。

    sudo /opt/incredibuild/management/build_cache_service.py clear

  • Build Cache Serviceマシンで現在使用されているBuild Cacheのサイズを返します。

    sudo /opt/incredibuild/management/build_cache_service.py get-used-size

利用情報と統計

以下のコマンドを使用して、どのビルドでもキャッシュのヒットとミスに関する情報を得られます。

/opt/incredibuild/management/show_build_cache_statistics.sh <build number>

例:

/opt/incredibuild/management/show_build_cache_statistics.sh 45

Build NumberはBuild History で確認できます。Build Titleの欄で、タイトルの一部である番号を取得します。例えば、タイトルが 「Build - 45 」であれば、単純に、「45」を使用してください。