Build Cache - 概要
現在、この機能は、Incredibuild のEnterprise、および、Business Plans でのみ利用可能で、限定的に提供されています。詳しくは、カスタマーサクセスマネージャーにご相談ください。
Build Cacheは、以前のビルドの一部を再利用することで、時間とリソースを節約します。ビルドを実行ごとに、その出力をキャッシュに保存します。今後ビルドを実行する際には、変更のない部分を再生成しないよう、キャッシュを確認します。
Build Cacheに保存された以前のビルドデータを再利用することで、帯域幅に影響を与えることなくビルド時間を大幅に短縮することが可能であるため、このキャッシングは作業の効率化に大きく影響します。
これを実現するために、Build Cache には特定のシステム要件 と対応ツール 含まれています。
メリットとユースケース
-
場所を選ばずに、開発者の生産性を向上させる
すでに別の場所でビルドされている場合でも、ブランチを切り替えるたびにゼロからビルドを実行ししないことをお勧めします。Build Cacheは、以前のビルドデータを自動的に保存し、ローカルビルド時間を大幅に短縮します。 -
スピードに影響を与えることなく、自宅からビルドすることが可能
自宅での作業は、アップストリームの帯域幅が制限されるため、構築速度に影響します。Build Cacheは、下流の帯域幅に更に依存することができ、新しいビルドを開始する際に、より高速でより良いパフォーマンスを提供します。 -
CIビルドの間にキャッシュされたデータを使用する
Build Cacheを使用して、ひとつのCIサーバーで生成されたビルドアーティファクトを別のCIサーバーと共有し、時間とリソースを節約します。CIに対する構築体験が逐次向上します。 -
CI結果を再利用して開発ビルドを高速化
バージョン管理からビルドを再開する際に、変更点をすべて取り込む必要があります。しかし、Build Cacheを使うことで、以前のバージョンで作業していても、後のCIビルドやワークフローで生成されたアウトプットを再利用することが可能です。
ライセンスモデル
Build Cacheは、キャッシュ コアと呼ばれる特別なライセンスを使用します。Build Cacheを使用することで、ヘルパー コアの実行時間を1時間節約することができるたびに、1つのキャッシュ コアが消費されます。キャッシュコアは再利用可能で、1時間ごとにリフレッシュされます。
キャッシュ コアを使い切っても、データはキャッシュに書き込まれますが、キャッシュ コアがリフレッシュされるまでは読み取ることができません。ライセンス使用に関する情報は、エージェントリストの上部に表示されます。
オンプレミス ライセンスに加えて Incredibuild Cloud を使用している場合は、Incredibuild CloudでBuild Cacheを使用する を参照して、これらのライセンスの相互作用について理解を深めてください。
Build Cacheの仕組み
Build Cacheは、各タスク(コンパイルまたはその他)を検査し、既存のキャッシュ コンテンツを使用できるか、また、タスクを実行する必要があるかどうかを判断します。タスクのインプット(ソースファイル、ヘッダーファイル、プリコンパイルされたヘッダーなど)に変更がなければ、結果の成果物(オブジェクトファイル、PDBなど)にも大きな変更はないと仮定しています。ほとんどのタスクは決定論的であり、ビルド全体も決定論的であるという前提があります。ビルドが決定論的でない部分は、ビルドのたびに再実行する必要があり、Build Cacheによって改善されることはありません。
決定論的ビルドとは、同じソースコードを同じビルド環境とビルド手順でビルドして、2つのビルドで同じバイナリを生成するプロセスのことで、マシンやビルドディレクトリ、ビルド名が異なっていても問題ありません。また、異なるフォルダからコンパイルしても同じバイナリが生成されることが保証されている場合は、再現可能ビルドや密封ビルドと呼ばれることもあります。
キャッシュの作成と管理
多くの場合、コード内の依存関係に基づき、ツリー状の構造でビルドが処理されます。レイヤー 1 のファイルはレイヤー 2 のファイルを作成するために、レイヤー 2 はレイヤー 3 のファイルを作成するため、と、最終的な出力が生成されるまで同様に使用されます。
ビルドが処理されると、Incredibuild は今後使用するためにプロセスの詳細を保存します。他のファイルから生成された各処理部分は、入力ファイルと出力ファイルのペアとしてキャッシュに保存されます。幾つかのファイルを変更してからビルドを実行した場合、Build Cacheは同一部分を再利用して、プロセスの一部を実行しないようにすることができます。
Build Cacheは、重複ファイルの削除や自動クリーンアップなど、さまざまな方法で最適化されます。
ソースコードの変更
ソース ファイルが変更された場合は、当然コンパイルを再実行する必要があります。Build Cacheは、ソース ファイルの内容がキャッシュのどこにも一致しないことを識別し、これを「キャッシュ ミス」と宣言します。この時点で、タスクはビルドの一部として再実行される必要があり、新しい結果は今後使用するためにBuild Cacheに保存されます。
ソース ファイルが含まれているヘッダー ファイルが変更されたり、ヘッダーによってヘッダーが含まれている場合でも、同様の現象が発生します。Build Cacheは、各タスクでどのファイルが読み込まれたかを正確に把握しており、それらが変更されていないか確認することが可能です。コードを変更すればするほど、Build Cacheが見つけるキャッシュヒットは少なくなります。
Build Cacheはプロジェクトのフォルダ構造を認識しています。しかし、プロジェクトのルートフォルダは、すべての イニシエータ 上で同一である必要はありません。あるイニシエータはプロジェクトを C:\Project に配置し、別のイニシエータは D:\Projectを使うことができます。これらのイニシエータは共有キャッシュを効率的に使うことができます。
キャッシュ コンポーネントの構築
Build Cache を使用する Incredibuild イニシエータエージェント は、Build Cache Client と呼ばれます。Build Cacheを保存し提供する Incredibuild エージェントは、Build Cache Endpoint と呼ばれます。Build Cacheサービスはすべての Incredibuild エージェントにインストールされます。エージェントは、1つ以上のクライアントがEndpointとして使用するとEndpointになります。
デフォルトでは、Build Cache が有効になっているイニシエータエージェントは、それ自身の Endpoint として動作します。AgentのBuild Cache Client設定を変更することで、複数のクライアントで共有できるリモートEndpointで作業できます。
デプロイタイプ
Build cacheは、ClientがどのようにEndpointに接続するかによって、さまざまな方法で展開できます。単一のClientはそれ自身のEndpoint(ローカル)として機能し、複数のClientは単一のEndpoint(リモート)に接続することができ、より複雑な、または動的なデプロイも可能です。
Local CacheとRemote Cacheの両方を有効化できます。両方が有効な場合、Incredibuild は、各タスクに対してビルドが実行されるたびに以下のロジックを使用します。
-
ローカルキャッシュをチェックする。キャッシュヒットがあれば、使用される。キャッシュ ミスがあれば、リモート キャッシュがチェックされる。
-
リモートキャッシュヒットがあれば、そのデータを使用し、ローカルキャッシュを更新する。
-
リモートキャッシュヒットがなければ、タスクを実行し、ローカルキャッシュを更新する。
Build CacheとHelper Cacheの違いについて
ヘルパーにタスクが与えられると、処理に必要な入力ファイル(ソースファイルやヘッダーファイルなど)はヘルパーキャッシュに保存されます。全く同じファイルが送られてきた場合でも、Helperは再度処理を行いますが、ファイルの再転送は必要ありません。
Build Cache では、 イニシエータは既に処理されたタスクを認識し、完全に省略されます。出力ファイル(オブジェクトファイルなど)を再転送する必要はなく、タスクを再実行する必要もありません。
対応ツール
-
ビルドシステム: Incredibuild がサポートするすべてのビルドシステム。
-
コンパイラ:
-
cl.exe(Visual Studio2012以上)
-
2012年から2015年までのサポートには制限があり、ビルド時にフラグ を追加する必要があります。
-
-
clang-cl.exe (beta)
-
prospero-clang.exe (PlayStation PS5 SDK)
-
orbis-clang.exe (Playstation PS4 SDK)
-
clang ++(Nintendo SwitchSDK)
-
リンカ: link.exe (Visual Studio 2012以上)。Build CacheのLink.exeサポートはデフォルトで無効になっています。プロジェクトに多くのDLLや実行可能ファイルがあり、稀にしか変更されない場合は有効にしてください。2012-2015のサポートには、ビルド時にフラグ を追加する必要があります。
-
/Z7 に完全に対応しています。Build Cacheを使用すると、/Ziは自動的に/Z7に変換されます。