ビルドの最適化
ここでは環境設定を変更してご利用環境で Incredibuild のパフォーマンスをさらに向上させる方法をみていきます。環境やプロジェクトによって効果が異なるので、様々な構成を試してみるのが一番の近道です。
Visual Studio のパフォーマンス改善のヒントはこちらをご覧ください。
ローカルマシンのタスク実行を回避する
ビルドを開始した Agent は、リモート Agent とファイルを同期したり、ビルド出力の書き込みを管理したりするため、I/O 負荷が高くなることがあります。次の場合に特に当てはまります。
-
開始マシンがビルドで複数の CPU を使用している。
-
たくさんのリモート Agent がビルドに参加するように設定されている。この場合、リモート Agent で実行可能なタスク (ソースファイルのコンパイルなど) はリモート Agent に任せ、開始マシンのリソースをビルド管理とファイルの同期に集中させると症状が改善される場合があります。
Avoid task execution on local machine whenever possible オプションはAgent Settings ダイアログボックス、Initiator->General ページで有効にすることができます。
リモート プロセスをローカルマシンで再開する
このオプション (デフォルトでは有効) を使用すると、ローカルマシンがアイドル状態の場合、ローカルマシンでリモートマシンと同じタスクを実行します (「競合モード」)。このモードでは両方のマシンでタスクを同時に実行することで高速に処理することができます。最初にタスクを完了したマシンの出力がビルドに適用されます。
開始マシンの I/O 負荷が高い場合は、このオプションは使用しないでください。
[Agent Settings] ダイアログを開いて [Initiator] > [General] > [Restart remote processes on local machine when possible] で有効 / 無効に設定できます。
マルチ CPU / コアを活用する
Incredibuild は複数の CPU やコアを活用して分散処理を実行します。これには (複数の CPU / コアを持つ) マシンごとに、マルチ CPU ライセンスが必要です (試用版ライセンスでは、すべての Agent で最大 8 個の CPU / コアを自動的に使用します)。ライセンスを購入すると、Agent の使用状況に応じて、利用可能な CPU / コアでタスクが分散 実行されます。
マシンのハードウェアがハイパースレッドに対応していれば、すべての論理コアを使用してパフォーマンスを向上させることもできます。この設定は [Agent Settings] を開いて [Agent] > [CPU Utilization] で行います。
ビルドの出力フォルダを高速なファイル システム ロケーションに移動する
大量のデータを出力するビルドでは、出力ファイルの書き込みがボトルネックとなり、分散プロセスが遅くなることがあります。次の場合に特に当てはまります。
-
開始マシンがビルドで複数の CPU を使用している。
-
たくさんのリモート Agent がビルドに参加するように設定されている。この場合、プロジェクトの出力フォルダをできるだけ高速に実行できる場所するのが効果的です(ローカルの Windows システムが動作していない高性能なドライブが理想的です)。
ディレクトリへのアクセスを最小限にする
環境によっては、ビルド時に行うディレクトリへのアクセス回数を抑えることで、パフォーマンスを向上させることができます。次の場合に特に当てはまります。
-
入力ファイルをネットワークベースのファイル システムに保存するビルド。
-
入力ファイルが膨大なディレクトリにまたがるプロジェクト。
Visual Studioビルドの場合のみ、最低限のディレクトリ同期モードを使用できます。この機能を有効化すると、Incredibuild はソースファイルのタイムスタンプ チェックを 1 回しか行いません。ただし、コンパイル以外のビルド ステップがビルド開始後に、ソースファイルを 「生成」 するカスタムビルド ステップなど、ソースファイルやディレクトリを変更した可能性がある場合は例外です。[Agent Settings] ダイアログの [Initiator] > [Advanced] で有効にできます。
ネットワーク接続テストを実施する
コーディネーター モニターから [Network Connectivity Test] を実施してネットワークに問題があるマシンを特定し、更新するか、リモートビルドに参加しないようにします。
中間フォルダと出力フォルダで Windows の検索インデックスを無効にする
中間フォルダと出力フォルダにファイル検索のインデックスを付けないことで、ディスクへのアクセスを減らし、ビルドを高速化できます。
高性能な Agent を優先的に割り当てる
Incredibuild は分散ジョブのリモート リソースとして高性能なハードウェアを持つ Agent を優先的に割り当てますが、Coordinator の割り当てロジックを調整して、特定の Agent の優先度を上げた方が良いこともあります。
例えば、コンピューティング リソースを提供することに「特化」した Agent やIncredibuild が何らかの理由で過小評価しているハードウェア上の Agent を優先的に割り当てることができます。
性能が低いハードウェアの Agent を無効化する
低性能の CPU やイーサネット カードを搭載したマシンが全体のビルド速度に悪影響を及ぼしている場合、
そのようなマシン上の Agent を無効にしてビルドに参加させないことと症状が改善します。当該マシンがリモート リソースとしてのみ使用されている場合は、サブスクライブ解除してビルド速度が改善するかどうかを確認してください。
ファイルやネットワーク スキャン アプリの設定を見直す
ウイルス対策ソフトやファイアウォール ソフトなど、一部の「リアルタイム スキャン」アプリケーションがビルドのパフォーマンスに悪影響を及ぼすことがあります。該当するアプリケーションで、ビルドでよく使われる拡張子 (.obj、.pdb、.idb、.cpp、.c、.h、.sbr、.lib) を持つファイルやプロジェクトの中間フォルダをスキャン対象外に設定するとパフォーマンスが向上する場合があります。
ビルドの優先度を調整する
ビルドの優先度を設定することで、特定の Agent が開始したビルドのパフォーマンスを調整できます。優先度の高い Agent が開始したビルドには、ほかのビルドよりも多くの Agent が割り当てられます。コーディネーター モニターから設定します。
バックグラウンド プロセスと並行して Incredibuild を動作させる
アプリの中には、未使用の CPU を使ってバックグラウンドで動作するものがあります。SETI@home プロジェクトはその代表例です。
Incredibuild Agent もプロセスの優先度が低いため、これらのアプリと CPU を奪い合い、ビルドが遅くなることがあります。Agent として使用しているマシン上でバックグラウンド アプリを実行している場合、[Agent Settings] ダイアログから [Helper] > [CPU Availability] に移動して該当のアプリと Incredibuild を並行して実行できるように設定してください。
キャッシュのサイズを増やす
Incredibuild はリモート Agent からのファイルをインストール フォルダの下に格納されているファイルに一時保存します。十分なスペースがない場合、ネットワーク上で追加の同期を行うため、ネットワークの負荷が増えてパフォーマンスが低下します。
ファイル キャッシュのサイズは コーディネーター モニターの [Agent] > [File Cache] で管理できます。
「バッチ ビルド」機能に並列 / 逐次ビルドを構成する
複数の構成を同時にビルドする際に問題が発生する場合は、バッチ ビルドの「BatchBuildParallelExecution2010」レジストリキー (HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Xoreax\Incredibuild\Builder) を使用できます。
この値はデフォルトでは「1」(並列ビルド) に構成されていますが、「0」にすると構成ごとにビルドを実行します (逐次ビルド)。