This feature allows running multiple IncrediBuild executions in parallel on the same Initiator machine.
Users can execute parallel Visual Studio compilations, BuildConsole commands, IBConsole commands or any combination of the above.
Support for parallel execution of multiple IncrediBuild executions is off by default, in order to turn this feature on, navigate to the IncrediBuild Agent Settings -> Initiator -> Multiple Builds and select the configuration that best suits your needs.
Scenarios relevant for concurrent IncrediBuild executions
This feature is especially useful in the following scenarios:
- Concurrent builds being executed from a build server - when several developers working against a single build server or in continuous integration and continuous delivery cycles, it is common to require builds to run concurrently, especially in scenarios where more than one developer issues a build to be executed on a build machine at the same time.
- Executing multiple solutions in parallel - there are various scenarios, especially in C# development, where multiple C# solutions can be executed in parallel. Being able to execute multiple such solutions in parallel in conjunction with IncrediBuild’s capability of distributing the compilation tasks of solution’s projects to remote machines can highly accelerate the overall time it takes to execute the full build cycle.
- There are various scenarios in which executing jobs in parallel with IncrediBuild can highly reduce the overall time of the build cycle. For example, running unit tests and integration tests in parallel or generating assets while executing post build steps.
- In game development, it is common for developers to execute other compute-intensive jobs with IncrediBuild (such as shader compilations, rendering, etc.) in parallel to executing compilation tasks. This parallel build execution feature, allows developers to execute shader compilations and at the same time continue developing and compiling their source code while the compilation of the shaders is taking place.
Precautions when running concurrent IncrediBuild executions
Some precautions need to be taken into account when running multiple concurrent IncrediBuild executions on the same initiating machine:
- Make sure that the initiating machine can handle multiple job executions without getting over-provisioned in terms of resources, especially memory consumption and I/O access. For example, with IncrediBuild, a link task will only be executed on the local machine. Executing too many links in parallel on a machine without sufficient memory resources can lead to out of memory issues or result in high swapping that may cause a negative impact on performance.
- If multiple builds are to be executed in parallel, make sure these builds do not write to the same files or folders.
- It is recommended to experiment with enabling the “Avoid task execution on local machine when possible” flag under the IncrediBuild Agent Settings -> Initiator -> General section. Enabling this flag instructs IncrediBuild to prefer executing tasks on remote machines when possible, making the initiating machine’s resources available to execute tasks that can only execute locally and leave as much of the machine’s resources free to service the remote machine’s synchronization requests.
Limiting the number of concurrent IncrediBuild executions
In order to allow users to limit the number of IncrediBuild concurrent executions on an Initiator machine according to the resources available on that machine, two new flags were added to Agent Settings -> Initiator -> Multiple Builds. The maximum number of IncrediBuild commands that can run in parallel is capped by these two values:
Limit number of concurrent builds to (default is 1, meaning only a single build will be allowed to execute each time) - in order to be able to run concurrent IncrediBuild executions, either specify a value higher than 1, or simply uncheck this option, so there won’t be a limit to the number of concurrent IncrediBuild executions you can run.
Note that the number of concurrent builds is still capped by the number of cores licensed to this Agent and the value set to the “minimum number of cores per build” flag(see below).
Minimum local cores per build (default is 4) - controls the minimum number of local cores that must be available (i.e. not occupied by another IncrediBuild execution) in order for another IncrediBuild execution to start concurrently.
Figure 1: Agent Settings flags that control the concurrent IncrediBuild executions feature
...
- The first IncrediBuild execution, will use all of the 10 local cores (along with additional Helper cores).
- When the second IncrediBuild execution starts, the 10 local cores will be split evenly between the 2 IncrediBuild executions and each will use 5 local cores (along with additional Helper cores), which meets the requirement of minimum number of 4 local cores per build. Both builds will run concurrently.
- The third build will not start and will be added to the IncrediBuild execution queue, as it won’t have enough local cores to start in parallel with the other executions: If the 10 local cores will be split between the 3 builds (4 + 4 + 2), the last build will only have 2 local cores which is not enough to start a new build, so it will have to wait until one of the currently running builds will finish and release its used local cores.
Note that the first build is not affected by the value of minimum local cores per build.
e.g. if the machine only has two cores and the minimum required number is set to 4, it is still possible to run a single build, that will only use two cores.この機能を使うと 1 台のイニシエーター マシンで Visual Studio のコンパイル、BuildConsole コマンド、IBConsole コマンドやそれらの組み合わせなど、複数の処理を同時実行することができます。
この機能はデフォルトではオフになっています。設定するには Agent Settings で [Initiator] > [Multiple Builds] の順に移動して、適切な値を選択してください。
IncrediBuild の同時実行処理に関連する使用例
この機能は次のようなケースで特に役立ちます。
- 1 つのビルド サーバーから同時にビルドを行う場合: 複数の開発者が単一のビルド サーバーで作業する場合や継続的インテグレーション、継続的デリバリー サイクルでは、一般的にビルドを同時に実行する必要があります。複数の開発者が 1 台のマシンに対して同時にビルドを発行する場合は特に有効です。
- 複数のソリューションビルドを並列に行う場合: 特に C# 開発で複数の C# ソリューションを同時に実行する可能性のある場合に使用できます。プロジェクトのコンパイルをリモ-ト マシンに分散できる IncrediBuild の機能と連携して、複数のソリューションビルドの同時実行を可能にすることで、フルビルド サイクルにかかる時間を大幅に高速化します。
- さまざまなケースでジョブを同時に処理することで、ビルド サイクル全体の時間を大幅に短縮できます。たとえば、ユニットテストと統合テストを同時に実行したり、ポストビルド ステップを実行しながらアセットを作成できたりします。
- ゲーム開発では、一般的にコンパイル処理と並行して他にCPU高負荷のジョブ (シェーダーのコンパイルやレンダリングなど) が行われます。この同時ビルド実行機能により、シェーダーのコンパイルを処理中でも、ゲームのソースコードのコンパイルを継続できます。
IncrediBuild で同時実行処理を行う際の注意事項
単一のイニシエーター マシンで同時実行処理を行う場合は次に注意してください。
- イニシエーター マシンがリソース (特にメモリ消費と I/O アクセス) をオーバープロビジョニングすることなく、複数のジョブを実行できることを確認してください。たとえば、IncrediBuild でリンク タスクが実行できるのはローカル マシンのみです。マシンの許容量を超えるリンク タスクを同時に行うと、メモリ不足やスワップアウトによりパフォーマンスが低下することがあります。
- 複数のビルドを同時に行う場合は同じファイルやフォルダに書き込みを行わないでください。
- Agent Settings の [Initiator] > [General] で [Avoid task execution on local machine when possible] のチェックボックスをオンにすることをお勧めします。これにより、可能な場合はリモート マシンで優先してタスクを処理します。イニシエーター マシンのリソースをローカルでしか実行できないタスクに使用して、リモート マシンの同期リクエストに対応するためのリソースを確保します。
IncrediBuild で行う同時実行処理数を制限する
イニシエーター マシンのリソースに応じた同時実行処理の上限を Agent Settings の [Initiator] > [Multiple Builds] で設定できます。同時に実行できる IncrediBuild コマンドの上限数は次の 2 つの値で決まります。
Limit number of concurrent builds to: デフォルト値は 1 です。この場合、同時に実行できるビルドは 1 つのみです。同時実行処理を行いたい場合は、1 より大きい値を指定するか、チェックボックスをオフにして制限機能を無効にします。無効にした場合は同時に行える実行処理数に制限はありません (同時実行ビルドの上限)。
注意: 同時実行できるビルド数は Agent に付与されているライセンスのコアの数と [Minimum local cores per build] (後述) の設定により制限されます。
Minimum local cores per build: デフォルト値は 4 です。IncrediBuild で別の処理を同時に開始するのに必要な (IncrediBuild の別の処理に使用されない) ローカル コアの最小数を設定します (ビルドごとの最小ローカル コア)。
画像 1: IncrediBuild の同時実行処理の設定画面 (Agent Settings)
例: 10 個のローカル コアを持つマシンで、同時実行ビルドの上限が「3」、ビルドごとの最小ローカル コアが「4」に設定されている場合。
- IncrediBuild で最初のビルドを実行すると 10 コアすべてが使用されます (追加のヘルパー コアも使用)。
- 2 つ目のビルドを開始すると 10 コアが均等に分割され、それぞれのビルドにローカル コアが 5 個ずつ割り当てられます (追加のヘルパー コアも使用)。ビルドごとの最小ローカル コアは 4 なので、ビルドは同時並列に実行されます。
- 3 つ目のビルドはローカル コアが不足しているため実行されず、IncrediBuild の実行キューに追加されます。10 個のローカル コアを 3 つのビルドで分割する場合は、コアの割り当てが 4 + 4 + 2 となります。最後のビルドには 2 つのローカル コアしか割り当てることができず、新しいビルドを開始するには不十分なため、実行中のビルドが完了してローカル コアが解放されるまでビルドを待機します。
最初のビルドは「ビルドごとの最小ローカル コア」の設定値の影響を受けません。
たとえば、マシンにコアが 2 つしかなく、設定値が「4」の場合でも 2 つのコアを使ってビルドを実行できます。