プロセス仮想化とは
Incredibuild は時間のかかるプロセスをローカル ネットワーク内の (Incredibuild がインストールされた) マシン上のアイドル コアに分散して高速に処理します。例えば、4 コアのローカルマシンで実行していたプロセスをネットワーク上の 400 個のコアで行って処理時間を大幅に短縮します。
Incredibuild はリモートマシン上のプロセスやアプリケーションを、あたかもローカルマシン上で実行しているかのように仮想化する独自技術「プロセス仮想化」によって処理を高速化しています。
注意: プロセス仮想化と VMware は似ていますが、後者 (VMware) がある目的のために用意されたリモートマシン上でプロセスを仮想化するのに対し、プロセス仮想化ではリモートマシン上でオンデマンドにプロセスを処理します。
プロセス仮想化により、リモートマシンの環境やファイル システム、ソフトウェアを問わず、タスクはジョブを開始したマシン (Initiator マシン) 上で実行されているかのように処理されます。
リモートマシンにソフトウェアをインストールしたり、Initiator マシンからファイルをコピーしたりする必要はなく、Incredibuild Agent がインストールされていればそれで十分です。リモート プロセスで必要なファイル (DLL など) は Initiator マシンから自動的に転送されます。
プロセス仮想化にはローカルマシン上で行われる「インターセプト」という追加機能があります。親プロセスが生成する複数の子プロセスをリモートマシンで実行したい場合、Incredibuild は親プロセスの全プロセスの実行を待ち受けします。Incredibuild はリモート実行するプロセスが定義された XML ファイルを使って、親プロセスの生成をすべてモニタリングし、生成されたプロセスと事前に定義された XML ファイルを見比べてリモートで実行するように定義されているかどうかを確認します。
プロセス仮想化はすべての Incredibuild ソリューション (Visual Studio、Make & Build ツール、DevTools) に導入されていますが、それぞれにほかにはない特徴があります。
- Visual Studio (VS): プラグインとして VS に統合されており、コンパイルの最適化機能をプラスで提供しています。
- Make & Build ツール: Make の一般的な問題に対処するために、動作確認済みのプロファイルが用意されています。
- DevTools: 各種インターフェイスを使って統合を行います。
リモートの仮想環境
Helper Agent はジョブの一部 (「タスク」) を仮想環境で実行し、ローカルマシンに結果を返すクライアント プログラムです。リソース (コア) の空き状況は Coordinator に随時報告され、タスクの割り当てに利用されます。
注意: Incredibuild は Helper マシン上のアイドル CPU を使って処理を行うため、作業中のユーザーが影響を受けることはありません。マシンの必要なリソースを確保したまま、利用可能なリソースのみ Incredibuild に提供されます。
Helper Agent 上に割り当てられたタスクは Helper (リモート) マシン上に作られた仮想環境内で実行されます。このプロセスによって実行される子プロセスもすべて仮想化されたプロセスです。
Incredibuild によってファイル システム、レジストリ、プロセス DLL、標準出力、ディレクトリ情報など、Initiator マシンの環境が完全にエミュレートされ、このカプセル化された環境でタスクが実行されます。Initiator マシンからファイルをコピーしたり、リモートマシンにアプリをインストールしたりする必要はありません。Incredibuild はネットワーク上の Windows ベース (OS のバージョンは問わない) の全 Agent との通信をサポートします。
仮想化処理のデータの流れ
Helper の実行するプロセスは、オリジナルのマシン環境をシミュレートした仮想化環境内で処理されます。Helper マシンでは OS に対する呼び出しが仮想化環境によってインターセプトされます。呼び出しがファイル システムに関連している場合、タスクの開始マシンからリモートマシンにファイルが同期され、専用フォルダに一時保存されます。仮想化環境ではオリジナル パス (例: c:\a.txt) がキャッシュのパス (例: c:\Incredibuild\cache\a.txt) に置き換えられます。レジストリへのアクセスや DLL の読み込みなども同様に処理されます。
プロセスの最後に Initiator マシンによって Agent が初期状態に戻され、別のタスクを実行させるか、Coordinator に戻すかを決定します。
開始マシン上で動作するホスト ソフトウェア (Visual Studio など) にとって、このプロセス全体は完全に透過的 (プロセスがローカルの OS で処理されたように動作) です。Helper マシンでは、タスクは仮想化されたプロセスとして Incredibuild によって処理されます。
Helper マシンが使用中の場合でも、大抵の場合 CPU パワーはほとんど消費されないので、(Incredibuild による) 処理が使用中のユーザーに気付かれることはないでしょう。Incredibuild は社内のマシンが使用していない CPU の空き時間を活用します。Helper マシンで実行されるリモート (仮想化) プロセスは、待機中の CPU サイクルで処理されます。一般的に中規模の企業であれば、いつでも数百の未使用のコアを活用して、社内のプロセスを高速化することができます。つまり社内でプロセスを開始するマシンは、(8 コアや 16 コアではなく) 200 コアのパワーを持つワークステーションとして動作するというとです。
Helper マシンにはファイルや DLL など、タスクに必要なリソースを Initiator マシンに必要に応じてリクエストしながらタスクを処理します。受け取ったリソースは Helper マシンの Incredibuild ファイル キャッシュに保存されます。これらのリソースは次回仮想環境でプロセスを実行する際に使用されます (最後の実行から変更されていない場合)。
Incredibuild はシンプルなインターフェイスを介して、Helper でコマンドを直接実行させたり、事前に定義したプロセス名を検出すると Incredibuild を自動的に実行さたりすることができます。
例えば、Incredibuild は、Visual Studio のコンパイラ、cl.exe プロセス、C++ を仮想化する定義済みプロセス名のリストに追加することで、Visual Studio のビルドを高速化します。これにより、VS が cl.exe プロセスを実行するたびに、Incredibuild は自動的にリモート PC でこのプロセスを実行します。詳しくは「インターセプション インターフェイス」ご覧ください。
バッチ ファイルを実行し、そのバッチ ファイルで複数のテストを実行する場合、すべてのプロセスをリモートマシン上で並列実行するように指定することができます。詳しくは「サブミッション インターフェイス」をご覧ください。