Profile XML ファイルの作成
プロファイル XML ファイルは、インターセプション インターフェイスで分散ジョブ関連の各種プロセスの処理方法を定義するのに使用します。
使用例
ここでは「MainProcess.exe」で実行するメイン プロセスを分散する例をみていきます。このメイン プロセスはいくつかのサブプロセス (DummySubprocess.exe) を行った後、リンク ステップ (link.exe) で終了します。
この場合、サブプロセス (DummySubProcess.exe) のみを分散した方が良いでしょう。というのも、リンク タスク (link.exe) をリモートマシンに分散した場合、比較的大きなデータ (.obj ファイルなど) をネットワーク経由でやり取りすることになるからです。
コマンドラインの構文規則
次の profile.xml ファイルはインターセプション インターフェイスを実行します。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
<Tools>
<Tool Filename="MainProcess" AllowIntercept="true" />
<Tool Filename="DummySubProcess" AllowRemote="true" />
<Tool Filename="link" AllowRemote="false" />
</Tools>
</Profile>
次のコマンドは「DummySubProcess.exe」を 10 回実行するように指定しています。
IBConsole /command="MainProcess.exe DummySubProcess.exe 10" /profile="profile.xml"
コマンドの詳細:
-
「MainProcess.exe」は実行中のメインプロセスです。このプロセスは Incredibuild に実行を分散させたいサブプロセス (DummySubProcess.exe とlink.exe) を生成するため、このプロセスにはAllowIntercept 属性をTrue に設定してマークされます。
-
DummySubProcess.exe の実行をリモートマシンに分散させるため、DummySubProcess を指定し、AllowRemote をTrue" に設定します。
-
link.exe をローカルで実行させるため、AllowRemote をFalse に指定しています。AllowIntercept とAllowRemote の両方のデフォルトがFalse であるため、profile.xml ファイルからこの行を省略しても同じ効果があります。
使い方
Profile.xml ファイルの準備ができたら、以下のツールでインターセプション インターフェイスを使ってビルドを分散します。
-
標準の Make などのビルドツールやサポートされているコンパイラの定義済みセットのビルド時間を短縮するカスタムツール、および Visual Studio ではインターセプトするためのレンダリングを行う(カスタムステップで)ツール(Accelerating Custom Build Steps, Custom Build Events and Custom Build Tools in Visual Studio を参照ください)。
サンプルとリソース
Profile XML ファイルの注意点と仕様は次の通りです。
-
Incredibuild のインストール フォルダ下には、Profile XML ファイルの検証用に標準的な .xsd スキーマ ファイル (「Schema for XML Interface.xsd」) が用意されています。.xsd ファイルは Visual Studio や XML 関連のエディタで開くことができます。
-
オートマティックインターセプション インターフェイス を使用した、プロジェクト(Profile XML ファイルを含む) のいくつかののビルド済みワーキングサンプルが、Incredibuild とともにインストールされています。
Profile XML ファイルの仕様
Profile XML ファイルは次のように記述します。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Profile FormatVersion="1">
<Tools>
<Tool ATTRIBUTES />
...
</Tools>
</Profile>
-
ツール 要素は、分散処理中に Incredibuild が扱うべきツール、または、ツールを定義します。
-
Tool 要素下には複数の Tool 要素を含めることができます。
次の場合に Tool 要素を追加します。
説明 | AllowRemote の値 | AllowIntercept 値 |
---|---|---|
リモートマシンに分散したいツール (実行ファイル) | True | False |
リモートで実行されるツールの実行を直接または間接的に担当するツール (実行ファイル) | False | True |
ローカルで処理するツール (実行ファイル) (任意) | False | False |
Tool 要素の属性
-
Filename: ツール名 (拡張子は省略可)。ワイルドカード(例えば "TOOL*.exe")は、複数のツール名をカバーする単一のツール定義のサポート向けに許可されています。
-
AllowRemote:「True」に設定されたツールの実行はリモートマシンに分散されます。
<Tool Filename="cl" AllowRemoteIf="-c,/c" />
-
AllowRemoteIf: [任意] コマンドラインに従って、タスクを分散するか、ローカルで実行するかを決定する条件値。この属性が指定されたタスクは分散が許可されたものとみなされます。以下は、その使用例です。上記をプロファイルファイル内で使用すると、コマンドラインに「-c 」または「/c 」文字列(引用符なし)を含むcl.exeのタスクだけがリモートマシンに配布されます。
-
AllowIntercept:「True」に設定されたツールの実行はインターセプション インターフェイスによってモニターされます。リモートで実行されるツール (AllowRemote が「True」に設定されているツール) の実行を直接または間接的に担当するツールは AllowIntercept を「True」に設定する必要があります。
-
DeriveCaptionFrom:この属性は、Progress Viewビルドモニターのタスクのビルドバーに表示されるキャプションをコントロールします。この属性は2つの定義された値を受け入れます。
-
firstparam: タスクのコマンドラインの最初のパラメーターを表示します。
-
lastparam: タスクのコマンドラインの最後のパラメーターを表示します。
-
-
SingleInstancePerAgent:「True」に設定されたツールは (Agent がマルチプロセッサやマルチコアでも) 単一の Agent 上で同時に実行されることはありません。この属性は、異なるエージェント上でのツールの同時実行を防止するわけではありません。
-
AllowRestartOnLocal:この属性が 「True」に設定されているツールでは、開始する Agent は、「Restart remote processes on local machine when possible」 のAgent Settings オプションで有効にしたパフォーマンスの最適化を適用することが許可され ます。重要: ツールのローカル インスタンスの終了時に「中途半端な」出力が残る可能性があるため、出力ファイルに増分を書き込むツールでは「True」に設定しないでください。
-
SuccessExitCodes: ツールが正しく終了した場合の終了コードを指定します。コンマで区切って数値を入力します。範囲指定も可能です(例:「2...19」)。指定しない場合、成功時の終了コードは「0」(既定値) となります。
-
WarningExitCodes: ツールが異常終了した場合の終了コードを指定します。この終了コードを返したタスクは「ビルドモニター プログレス」ページで黄色いバーで表示され、「サマリー」ページで警告としてカウントされます。コンマで区切って数値を入力します。範囲指定も可能です(例:「2...19」)。
-
IdentifyTaskOutput : Build Monitor Progress 表示の進行状況バーをダブルクリックしても、Submission InterfaceまたはAutomatic Interception Interfaceを使用して実行が分散される特定のツールで機能しない場合、この属性に使用してください。「True」に設定すると、ツールの出力にテキストの識別子が追加され、ビルド出力テキストからツールを特定しやすくなります。この識別子は最終的なビルド出力テキストからは削除されます。以下は使用例です。
<Tool Filename="cl" AllowRemote="true" DeriveCaptionFrom="lastparam" IdentifyTaskOutput="true"/>
-
AutoRecover: ツールの出力で検出した場合、Incredibuild はタスクを別のAgentに再割り当てして、前の出力を破棄します (リストはコマンド区切り)。
-
TimeLimit: リモート タスクが自動的に取り消され、別の Agent に再割り当てされるまでの時間 (秒単位)。
-
VCCompiler:「True」に設定 (デフォルトは「False」) すると、当該ツールとそのサブプロセスが PDB と PCH の処理に関して、Visual Studio C/C++ コンパイラと同じ方法で処理されます。Incredibuild インターフェイスを使って Visual Studio C/C++ コンパイラの実行を分散したい場合に使用します。このオプションは Visual Studio C/C++ ビルドシステム拡張パッケージでのみご利用になれます。
-
AutoReserveMemory: ツールがファイルのメモリ マッピングを利用するように指定します。通常、プリコンパイル済みヘッダーをサポートするためにコンパイラによって使用されます。メモリ マッピングで使用するファイルの拡張子 (通常はプリコンパイル済みヘッダー ファイルの拡張子) を指定する必要があります。例えば、「gcc」というツールで「.gch」という拡張子を持つプリコンパイル済みヘッダーを作成する際に、メモリ マッピングを使用したい場合は、プロファイル XML で gcc を次のように定義します。
<Tool Filename="gcc" AllowRemote="true" DeriveCaptionFrom="lastparam" AutoReserveMemory="*.gch"/>
複数のファイル拡張子を指定する場合は、カンマ区切りで入力します。例:「*.gch」、「*.pch」<
-
AdditionalOutputMask: 提供されたマスクに従って、追加のファイルを開始マシンに返すようにツールに指示します。例えば、「gcc」というツールが生成したすべての .log ファイルを開始マシンに返したい場合は、Profile XML 内の「gcc」を次のように定義します。
<Tool Filename="gcc" AllowRemote="true" DeriveCaptionFrom="lastparam" AdditionalOutputMask="*.log"/>
注意点
-
デフォルトで開始マシンに返されるファイルリストを作成することが可能です。HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Xoreax\Incredibuild\Builderの「AdditionalOutputMasks」 という名称のレジストリ文字列の値を作成します。複数のファイル拡張子を指定する場合は、カンマ区切りで入力してください(例:"*.log,*.dat")。
-
メインビルドツールの実行ファイルは、プロファイル XML でAllowIntercept 属性を 「True」 に設定して定義する必要があります (サンプルプロジェクトの XML プロファイル を参照してください)。IBConsole.exeを「/COMMAND=」構文で実行している場合、/COMMAND引数で指定したツール(ツールが.batファイルの場合はcmd.exe)には、暗黙的にAllowInterceptの動作が与えられるので、注意してください。
-
メインのビルド ツールの子プロセスが生成したプロセスをリモートに分散する場合、メインのビルド ツールの下位プロセスの AllowIntercept 属性を「True」に設定する必要があります。例えば、「runner.exe」を実行するメインのビルド ツール「make.exe」があり、「runner.exe」が「MyTool.exe」(分散実行したいプロセス) を実行する場合、「make.exe」と「runner.exe」の AllowIntercept 属性を「True」に設定する必要があります。
-
AllowRemote を「True」に設定したツールから生成された実行ファイルは AllowRemote 属性を「True」にする必要はありません。リモートの子プロセスは Incredibuild によって自動的に処理されます。
-
Visual Studio 2010 以降では Profile XML を使って、カスタム ステップ、実行タスク、特殊なビルドツールを分散できます。詳しくは、BuildConsoleセクションの最後の項目をご覧ください。
インターセプション インターフェイスの XML スキーマ
以下ではインターセプション インターフェイス用の構成ファイルを作成の XML スキーマについて説明します。XMLスキーマの詳細については、「XMLインターフェイスの使用」セクションを参照してください。
XML ファイルにはインターセプション インターフェイスを使った統合の動作が定義されており、分散できるプロセスとローカルで実行するプロセスが含まれています。XML ファイルには Incredibuild が実行するタスクに適用するルールを記述します。ルールは同じ名前の全タスクに適用されます。例えば、XML で「Render」というタスクを AllowRemote として定義した場合、ジョブは Render のインスタンスを複数の含むことができ、それぞれがルールに従ってリモートで処理されます。IBConsole はこの XML ファイルをプロファイルとして使ってプロセスの処理方法を定義します。
<Tool Filename="SubProcess" AllowRemote="true" DeriveCaptionFrom="lastparam" IdentifyTaskOutput="true"/>
コマンド例 1
LogMe という名前のツールが生成するすべての .log と .dat ファイルを開始マシンに返すように指定するには、プロファイル XML でLogMe を次のように定義する必要があります。
<Tool Filename="LogMe" AllowRemote="true" DeriveCaptionFrom="lastparam" AdditionalOutputMask="*.log"/>,*.dat
例2
あらゆる種類のファイルを返す「LogMe」というツールに .log ファイルだけ返すようにこの場合、LogMe をプロファイル XML で次のように定義する必要があります。
<Tool Filename="LogMe" AllowRemote="true" DeriveCaptionFrom="lastparam" OutputFileMasks="*.log"/>
ツールは、ルールが適用されるプロセスの名前です。
属性 |
説明 |
値 備考 |
---|---|---|
Filename |
ツール名 (拡張子は省略可)。ワイルドカード (例:「TOOL*.exe」) を使って複数のツール名を一度に定義できます。 |
|
AllowRemote |
「True」に設定されたツールの実行はリモートマシンに分散されます。 |
True/False |
AllowRemoteIf |
(オプション)タスクのコマンドラインに基づいて、タスクを配布するか、ローカルエージェントで実行するようにマークするかを決定する条件付き値です。 この属性が指定されたタスクは分散が許可されたものとみなされます。 |
「AllowRemote」属性の代わりに使用する必要があります。 コンマで区切って複数の値を指定できます。 |
AllowPredictedBatch |
Visual Studio 2010 以降では、この属性を持つツールを並列実行できます。このオプションが付いたツールは、早期実行のためにスケジュールされ、このツールを使用には、いくつかの前提条件があります。
|
True/Falseは 定義されたprofile.xmlファイルを持つVisual Studioソリューションに対してのみ動作します。この設定は、通常のDev Toolsビルドでは無視されます。 |
AllowIntercept |
「True」に設定されたツールの実行はインターセプション インターフェイスによってモニターされます。リモートで実行されるツール (AllowRemote が「True」に設定されているツール) の実行を直接または間接的に担当するツールは AllowIntercept を「True」に設定する必要があります。 |
True または False |
SkipIfProjectFailed |
(オプション)障害が発生した場合の動作を定義します。(例: コンパイルが失敗した場合にリンク タスクをスキップする)。Tool 要素と Task 要素に関連付けらています。 |
|
WorkingDir |
(オプション) タスクに使用される作業ディレクトリを定義します。最深部の定義が親の定義を上書きします。例えば、サンプルの XML ファイルではアプリに渡されたファイル名にはフルパスが含まれていませんが、Project 要素で WorkingDir が定義されているためアプリはファイルを見つけることができます。プロジェクト、タスク グループ、タスクの各要素に関連付けられています。 |
|
DeriveCaptionFrom |
ビルドモニターのプログレス ビューでタスクバーに表示されるキャプションを制御します。 |
firstparam: タスクのコマンドラインの最初のパラメーターを表示します。 lastparam: タスクのコマンドラインの最後のパラメーターを表示します。 |
SingleInstancePerAgent |
この属性が 「True 」に設定されているツールは、エージェントがマルチプロセッサ、または、マルチコアハードウェアであっても、単一のエージェント上で同時に実行されることはありません。この属性は、異なるエージェント上でのツールの同時実行を防止するわけではありません。 |
True/False |
AllowRestartOnLocal |
「True」に設定されたツールでは、タスクを開始する Agent はパフォーマンスを最適化するために [Restart remote processes on local machine when possible] を適用できます。 重要: 出力ファイルにインクリメンタルに書き込むツールでは、この属性を 「True」 に設定しないでください: ツールのローカルインスタンスが終了した場合、不完全な出力ファイルになることがあります。 |
True/False |
SuccessExitCodes |
(オプション)ツールの成功終了コードとみなされるコード。 |
カンマで区切られた数値のリスト。範囲指定も可能(例: 「2..19」) デフォルトの成功終了コード。0 |
WarningExitCodes |
[オプション] ツールの警告終了コードとみなされるコード。 この終了コードを返したタスクは「実行モニター プログレス」ページで黄色いバーで表示され、「サマリー」ページで警告としてカウントされます。 |
コンマで区切りの数値リスト。範囲指定も可能です |
IdentifyTaskOutput |
「True」に設定すると、ツールの出力にテキストの識別子が追加され、出力テキストからツールを特定しやすくなります。識別子は最終的な出力テキストから削除されます。実行モニターの進行状況表示の進行状況バーをダブルクリックしても、手動インターフェイスまたは自動インターフェイスのいずれかを使用して、実行が分散されている特定のツールで機能しない場合は、常にこの属性を使用する必要があります。 |
True/False |
AutoRecover |
ツールの出力で検出した場合、Incredibuild はタスクを別の Agent に再割り当てして、前の出力を破棄します。 |
コンマ区切りのリスト。 |
TimeLimit |
リモート タスクが自動的に取り消され、別の Agent に再割り当てされるまでの時間 (秒単位)。 |
1 ~ 20,000 (整数) |
AdditionalOutputMask |
提供されたマスクに従って、追加のファイルを開始マシンに返すようにツールに指示します。 |
コンマで区切って複数の拡張子を指定できます (例: *.log,*.dat)。 |
その他 |
||
OutputPrefix / GroupPrefix |
[任意] 実行モニターやログに表示されるテキストを指定します。 |
|
OutputFileMasks |
ビルダーに返すファイル タイプ群。例: アプリがジョブが必要としない一時ファイルを使用する場合、ネットワーク上で不要なファイルが同期されないように、必要なファイルを絞り込むファイル マスクを定義できます。複数のマスクを指定できます (例:「*.o,*.d」)。 |