(57)【特許請求の範囲】
【請求項１】
オリジナル仮想マシンから１つまたは複数のクローン仮想マシンに分岐させて分岐する状態を考察するためのコンピュータに実装される方法であって、
前記オリジナル仮想マシン上の実行用のアプリケーションコードを受け取るステップであって、前記アプリケーションコードは、前記オリジナル仮想マシンの２つまたはそれ以上の可能な状態をもたらす少なくとも１つの分岐を含む、ステップと、
前記受け取ったアプリケーションコードを含む前記オリジナル仮想マシンを実行するステップと、
前記アプリケーションコードが複数の可能な状態に分岐するであろう場所を示す情報を、前記アプリケーションコードから得ることにより、前記オリジナル仮想マシンの２つまたはそれ以上の可能な状態をもたらす前記オリジナル仮想マシン上で稼働する前記アプリケーションコード内の分岐を識別するステップと、
１つまたは複数のクローン仮想マシンを作成するステップであって、前記クローン仮想マシンは、前記オリジナル仮想マシンの現在の状態を複製し、次に、それぞれが前記分岐の１つの経路を処理して、作成された当該クローン仮想マシンにおける後続の状態を探索する、ステップと、
前記識別された分岐の異なる経路を実行するために、各クローン仮想マシンをセットアップするステップと、
前記識別された分岐の少なくとも２つの経路を並列して探索するために、前記オリジナル仮想マシンおよびクローン化仮想マシンを実行するステップと、
前記クローン化仮想マシンから少なくとも１つの実行結果を受け取るステップと、
を含み、
前述のステップが少なくとも１つのプロセッサにより実行され、
前記オリジナル仮想マシンを実行するステップが、
所定の動作の実行により前記オリジナル仮想マシンの状態を変化させる可能性がある分岐が識別されるまで前記オリジナル仮想マシンを実行するステップと、
前記クローン化仮想マシンが、前記オリジナル仮想マシンのインスタンスの外部の任意のリソースに影響を与えることになるかどうかを判定するステップと、
を含む、
方法。  
【請求項２】
前記アプリケーションコードを受け取るステップが、前記オリジナル仮想マシンの前記状態を変化させ、かつ、ランタイムで評価される条件に基づく分岐を含む、アプリケーションコードを受け取るステップを含む、請求項１に記載の方法。
【請求項３】
前記オリジナル仮想マシンを実行するステップが、同じ物理リソースを共有する複数の仮想マシンの実行を指示するハイパーバイザを含む、請求項１に記載の方法。
【請求項４】
前記分岐を識別するステップが、コード解析ツールを使用して前記分岐を自動的に識別するステップを含む、請求項１に記載の方法。
【請求項５】
前記分岐を識別するステップは、アプリケーションプログラミングインターフェース（ＡＰＩ）を起動するステップであって、該ＡＰＩにより２つまたはそれ以上の分岐経路が識別される、ステップを含む、請求項１に記載の方法。
【請求項６】
クローン仮想マシンを作成するステップが、仮想ハードウェアを識別する１つまたは複数の仮想マシン仕様をセットアップするステップと、前記オリジナル仮想マシンのメモリの状態をコピーするステップと、前記オリジナル仮想マシンにアタッチされた１つまたは複数のディスクをコピーするステップとを含む、請求項１に記載の方法。
【請求項７】
前記クローン仮想マシンを作成するステップが、前記オリジナル仮想マシンの実行を中断するステップと、前記オリジナル仮想マシンに関連する１つまたは複数の物理マシンファイルをコピーするステップとを含む、請求項１に記載の方法。
【請求項８】
各クローンをセットアップするステップが、各クローンがどの経路を探索する責任があるのかについての情報を用いて前記クローンをセットアップするステップと、次に、前記クローンおよびオリジナル仮想マシンそれぞれにその割り当てられた経路を探索させるために、クローンおよびオリジナル仮想マシンそれぞれを実行するステップとを含む、請求項１に記載の方法。
【請求項９】
各クローンをセットアップするステップが、前記クローン仮想マシンが実行するであろうソフトウェアコードを識別するステップと、前記クローン仮想マシンの命令ポインタ及びレジスタの状態を、特定の場所に設定するステップとを含む、請求項１に記載の方法。
【請求項１０】
前記少なくとも１つの実行結果は、前記クローン化仮想マシンが到達した状態を含む、請求項１に記載の方法。
【請求項１１】
仮想マシンの分岐および並列実行のためのコンピュータシステムであって、
以下のコンポーネント内で具現化されるソフトウェア命令を実行するべく構成されるプロセッサおよびメモリと、
２つまたはそれ以上の仮想マシンに物理コンピュータ装置のリソースを割り当て、かつ、仮想マシンをクローン化するためのサポートを提供するハイパーバイザコンポーネントと、
物理マシン上でのリソース使用と、オリジナル仮想マシンおよびクローン化仮想マシンを含む２つまたはそれ以上の仮想マシン間のリソース分離と、のスケジューリングを提供するスケジューリングコンポーネントと、
２つまたはそれ以上の仮想マシン間に１つまたは複数の通信のチャネルを提供するＶＭ通信コンポーネントと、
１つまたは複数のクローン仮想マシンにおいて後続の状態を評価するために、ソフトウェアコードを実行するオリジナル仮想マシンを分岐させるための候補である、現在の状態と、前記ソフトウェアコードの１つまたは複数の前記後続の状態を識別する、分岐識別コンポーネントと、
状態情報を前記オリジナル仮想マシンからコピーして、同様の状態を有する１つまたは複数のクローン仮想マシンを作成する、状態クローニングコンポーネントと、
各作成された前記クローン仮想マシンを開始させ、かつ、各クローンが追跡する実行の分岐を識別することにより、前記分岐を実行するＶＭ分岐コンポーネントと、
各クローン仮想マシンおよび前記オリジナル仮想マシンの動作を調整して、不要な分岐の廃棄または分岐結果の統合を可能にするクローン調整コンポーネントと、
各仮想マシンが生成する結果を処理し、その結果を前記クローン調整コンポーネントに提供する結果処理コンポーネントと
を備え、
前記ＶＭ分岐コンポーネントは、
所定の動作の実行により前記オリジナル仮想マシンを変化させる可能性がある分岐が識別されるまで前記オリジナル仮想マシンを実行し、
前記クローン化仮想マシンが、前記オリジナル仮想マシンのインスタンスの外部の任意のリソースに影響を与えることになるかどうかを判定する、
システム。
【請求項１２】
前記ＶＭ通信コンポーネントが、前記オリジナル仮想マシンから調整情報を受け取り、調整命令を１つまたは複数のクローン仮想マシンに提供する、請求項１１に記載のシステム。
【請求項１３】
前記分岐識別コンポーネントは、前記ソフトウェアコードを解析することにより前記ハイパーバイザコンポーネントを介して潜在的な分岐を自動的に識別する、請求項１１に記載のシステム。
【請求項１４】
状態クローニングコンポーネントは、各クローンが追跡するであろう分岐する状態を探索に使用される前記オリジナル仮想マシンの前記状態情報のサブセットを選択し、前記選択したサブセットを複製する、請求項１１に記載のシステム。
【請求項１５】
前記ＶＭ分岐コンポーネントは、各クローン仮想マシンに、自身が考察する分岐を知らせ、次に、各仮想マシンに前記分岐の後の状態の探索を実行させる、請求項１１に記載のシステム。
【請求項１６】
前記クローン調整コンポーネントは、各クローン仮想マシンの結果を考察し、前記状態の探索が完了した後に、前記オリジナル仮想マシンに実行を戻す、請求項１１に記載のシステム。
【請求項１７】
前記各仮想マシンが生成する結果は、各仮想マシンに対して発生するさらなる状態変化を含む、請求項１１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
［背景技術］
分岐とは、コンピュータプログラムにおける任意のポイントであって、実行が複数の可能性のある経路に進むポイントを意味する。コンピュータ科学には様々なタイプの分岐が存在する。機械レベルでは、ソフトウェアアセンブリ言語命令には、条件付き飛越しが含まれることが多い。条件が成立すると、プロセッサはジャンプにより指定される場所のコードを実行するであろう。条件が失敗すると、プロセッサはジャンプの後に続くコードの実行を継続するであろう。今日の重度にパイプライン化されたマルチコアプロセッサでは、分岐した両方の経路の実行を投機的に開始することがよくある。実行が分岐条件に到達し、条件が評価されると、分岐条件が成立する分岐を保持し、投機的に実行した他方の分岐の中間結果をフラッシュする。分岐はプロセスレベルでも発生する。ＵＮＩＸ（登録商標）のようなオペレーティングシステムには、アプリケーションプログラミングインターフェース（ＡＰＩ）が含まれ、例えば、ｆｏｒｋ（）があり、これは、プロセスのコピーを作成して新しいプロセスの実行を継続するものである。これを使用して、マルチスレッディング又はプロセスの分岐する可能性のある経路の追跡を行うことが可能である。
【０００２】
複雑なシステムのテストにはしばしば、システムを特定の条件に合うようにして、その後、様々な誘発要因に対するシステム反応をテストするための、かなりの量のセットアップを伴う。誘発要因には、ファズテストの形式で、様々な入力を、提供すること、接続されたハードウェアを操作してシステムの反応をテストすることなどが含まれてもよい。システムの機能が、実質的な状態変化を生み出してしまい、以前の状態に戻すことは難しいことがある。他の例では、複雑なシステムにおいて、データが必要でなかった、または、分岐が成立してデータが重要でなくなってしまう、ということを検知するだけのために、データのバッチを処理するのに長時間かかる場合がある。
【０００３】
今日、分岐は、これらの刺激に対して有用であるには低すぎるレベルで適用される。複雑なシステムおよび他フィールドのテストでは、それほど多くの時間を要することなく、かつ、面倒なセットアップを必要とすることなく、既知の状態から開始され、複数の潜在的な将来の状態を探索する方法が必要とされる。典型的には、今日、テストハーネスでは、複数の可能なテストパスをシリアルで走らせ、または、さらに効率的な場合には、複数のマシンを活用してパラレルでテストを実行することができる。これでもまだ、特にテストハーネスが、複数のテストを開始するために各マシンを共通の状態に置く必要がある場合には、時間を要する。複雑な状態の評価では、必要とされる時間は、ソフトウェア開発者が望むだけの多くの順列（permutation）でシステムをテストする時間が少なくなることを意味し、その結果、より多くのエラーがソフトウェア製品に生じる。
【発明の概要】
【課題を解決するための手段】
【０００４】
本明細書において、開始状態のセットアップに投じられる時間を活用しつつ、複雑な状態遷移の並列実行を可能にする状態分岐システムについて説明する。システムは、ハイパーバイザを修正することにより、仮想マシンレベルでの分岐を可能にする。仮想マシンレベルでの分岐を可能にすることにより、状態分岐システムでは、仮想マシンにおける特定の条件または状態のセットアップを可能にし、仮想マシンの並列インスタンスへのコピーおよび分岐がなされ種々の可能な後続の状態が探索される。より大きくかつより複雑な評価に対して問題が起こることが多く、特に、マシンの状態がこれらの評価により劇的に影響を受ける場合である。結果が予測できない大規模な状態変化の検出または通知があると、状態分岐システムはハイパーバイザに命令して、実行中の仮想マシンを１つまたは複数の別々の仮想マシンにコピーさせる。そして、システムでは、２つまたはそれ以上の仮想マシン（オリジナルおよびコピー）間の分岐のブランチング（branching）によって、同様の開始ポイントからの異なる状態を探索することを可能にする。実行が次の状態に到達すると、システムは、調整を行ってどのコピー（単数または複数）が実行を継続するのかを判定する。従って、状態分岐システムでは、コンピュータシステムの状態を実質的に修正する複雑な状態変化をより速く探索することを可能にする。
【０００５】
この要約は、以下の「発明を実施するための形態」でさらに述べる概念を選択して簡略化した形式で紹介するために提供するものである。この要約は、請求の主題の重要な特徴または主要な特徴を特定することを意図しておらず、請求の主題の範囲を制限するものとして使用されることも意図していない。
【図面の簡単な説明】
【０００６】
【図１】一実施形態における、状態分岐システムのコンポーネントを例示するブロック図である。
【図２】一実施形態における、オリジナル仮想マシンから１つまたは複数のクローン仮想マシンへブランチングして分岐の状態を考察する、状態分岐システムの処理を例示するフロー図である。
【図３】一実施形態における、１つまたは複数のクローン仮想マシンを出て実行を収束させてオリジナル仮想マシンに戻る、状態分岐システムの処理を例示するフロー図である。
【図４】一実施形態における、状態分岐システムによる分岐経路の並列処理を例示するタイムライン図である。
【発明を実施するための形態】
【０００７】
本明細書において、開始状態のセットアップに投じられる時間を活用しつつ、複雑な状態遷移の並列実行を可能にする状態分岐システムについて説明する。システムは、ハイパーバイザを修正することにより仮想マシンレベルでの分岐を可能にする。ハイパーバイザは、物理マシンのリソース（例えば、プロセッサ、メモリ、ディスク、およびネットワーク）を共有する１つまたは複数の仮想マシンプロセスを管理する。仮想マシンの全てが同じ物理マシン上で稼働するが、それぞれが、他の仮想マシンのことを知らずにおりかつ分離されている。仮想マシンレベルでの分岐を可能にすることにより、状態分岐システムでは、仮想マシンにおける特定の条件または状態のセットアップを可能にし、仮想マシンの並列インスタンスへのコピーおよび分岐がなされ異なる可能な後続の状態が探索される。より大きくかつより複雑な評価に対して問題が起こることが多く、特に、マシンの状態がこれらの評価により劇的に影響を受ける場合である。一例としてファジングがあり、仮想マシン内のオペレーティングシステム全体を分岐させることが可能であることで、ソフトウェア開発者は、ファジングされる次の反復のセットアップに費やす時間を劇的に減少させることができるようになり、また、ファジングされる可能な実行経路がより速く探索されるようになる。
【０００８】
結果が予測できない大規模な状態変化の検出または通知があると、状態分岐システムはハイパーバイザに命令して、実行中の仮想マシンを１つまたは複数の別々の仮想マシンにコピーさせる。そして、システムでは、２つまたはそれ以上の仮想マシン（オリジナルおよびコピー）間の分岐のブランチングによって、同様の開始ポイントからの異なる状態を探索することを可能にする。いくつかの実施形態において、アプリケーションは、ハイパーバイザを呼び出して、ハイパーバイザに既存の仮想マシンの状態をスポーンさせ、かつ、複製したコピー（単数または複数）を新しい仮想マシンにスポーンさせるようにすることができる。そして、システムは、コピーにその決定木の調整をさせて重ならないようにする。実行が次の状態に到達すると、システムは、調整を行ってどのコピー（単数または複数）が実行を継続するのかを判定する。いくつかの場合、次の重要な状態変化によってプロセスが繰り返されるまで、システムは、大まかに複数の仮想マシンに分岐し、いくつかの状態を探索し、そして、結果を組み合わせてオリジナル仮想マシンに戻すことができる。
【０００９】
いくつかの実施形態において、状態分岐システムは、ハイパーバイザおよびオペレーティングシステム両方の修正に依存して、仮想マシンレベルの分岐を可能にする。オペレーティングシステムは、分岐が望ましいのはいつであるかを検出する能力を有する。これには、多くの潜在的なトリガが含まれてよく、例えば、ファーストチャンス例外通知、アプリケーション要求、ユーザモードセカンドチャンス例外、などがある。操作にはまた、ＡＰＩ、または、分岐インスタンスごとにどの決定ポイントを修正すべきであるかをアプリケーションが特定するための他の手段が含まれてよい。ハイパーバイザは修正されて、コマンドをエクスポーズしてホストまたはゲストのオペレーティングシステムが既存のゲストオペレーティングシステムのインスタンスの複製を要求することを許可する。ハイパーバイザはまた、ゲストオペレーティングシステムの実行を凍結することが可能であり、任意のハードウェア割り込みがゲストオペレーティングシステム上で実行されることを防ぐ。加えて、ハイパーバイザは、メモリ管理装置（ＭＭＵ）に命令して、新しい分岐インスタンスについてゲスト操作メモリ割当て全体の複製を行わせる。いくつかの場合、システムは、全てのメモリを複製しなくともよく、ハイパーバイザが提供する分岐サポートのレベルに応じて、むしろいくつかのデータページのみを複製し、場合によっては実行可能なページは含まれない。このように、ホストまたはゲストの操作のどちらかが、いつ決定ポイントが到達されるかを判定し、これは、分岐経路を並列して評価することの利点であり、また、仮想マシンレベルでの分岐をハイパーバイザおよび／またはオペレーティングシステムに要求する。従って、状態分岐システムでは、コンピュータシステムの状態を実質的に修正する複雑な状態変化をより速く探索することを可能にする。
【００１０】
図１は、一実施形態における、状態分岐システムのコンポーネントを例示するブロック図である。システム１００には、ハイパーバイザコンポーネント１１０、スケジューリングコンポーネント１２０、ＶＭ通信コンポーネント１３０、分岐識別コンポーネント１４０、状態クローニングコンポーネント１５０、ＶＭ分岐コンポーネント１６０、クローン調整コンポーネント１７０、および、結果処理コンポーネント１８０が含まれる。これらのコンポーネントのそれぞれについて、本明細書においてさらに詳細に説明する。
【００１１】
ハイパーバイザコンポーネント１１０は、２つまたはそれ以上の仮想コンピュータ装置間に物理コンピュータ装置のリソースを割り当てる。今日、多くのデータセンタで、仮想マシンを使用して、複数のプロダクションアプリケーションを単一のサーバ上で稼働させることを可能にし、各仮想マシンが仮想環境内にあるため、各アプリケーションはマシンを排他的に使用していると想定している。それよりむしろ、アプリケーションは典型的には、仮想マシンを排他的に使用するが、物理リソースを共有する。仮想マシンは、アプリケーションに、中央処理装置（ＣＰＵ）速度、メモリサイズ、ディスク容量、ネットワーク帯域幅などの保障される量のハードウェアリソースを提供する。ハイパーバイザは、複数の仮想マシンが同一のコンピュータ上で隣り合って稼働することを可能にする商品ハードウェアで広く利用可能である（例えば、Ｘｅｎ、Ｈｙｐｅｒ−Ｖ、およびＶＭＷａｒｅ）。ハイパーバイザは、ＣＰＵ、メモリ、ディスク、および、ネットワークなどの物理リソースへのアクセスを多重化する（スケジューリングすることもある）。ハイパーバイザは、ＣＰＵおよびＩ／Ｏリソース双方のためのスケジューラを提供し、２つまたはそれ以上の仮想マシン間に全てのリソースの固定のパーティションを提供することができる。これは、多くの方法で、例えば、ハードリアルタイムスケジューリングアルゴリズムを使用して、行うことができる。
【００１２】
スケジューリングコンポーネント１２０は、物理マシン上でのリソース使用のスケジューリング、及び、オリジナル仮想マシンおよびクローン化仮想マシンを含む２つまたはそれ以上の仮想マシン間のリソース分離する機能を提供する。スケジューリングコンポーネント１２０は、ハイパーバイザ内で動作してよく、また、仮想マシン分離を提供して、各仮想マシンが、リソース利用可能性について仮想マシンに対して与えられる任意の保証が満たされる方法で物理マシンリソースを使用することができるようにしてよい。例えば、物理マシンが２ＧＨｚのプロセッサを有し、２つの仮想マシンそれぞれがプロセッサの時間の内、同等の特定の部分を保証されている場合、スケジューリングコンポーネント１２０は、各仮想マシンが物理マシンのプロセッサ時間の二分の一を使用する状態になることを保証することができる。スケジューリングコンポーネント１２０は、物理マシンのメモリ、ディスク空間、ネットワーク帯域幅、および他のリソースの同様の分割を提供可能である。
【００１３】
ＶＭ通信コンポーネント１３０は、２つまたはそれ以上の仮想マシン間に１つまたは複数の通信のチャネルを提供する。ＶＭ相互の通信には様々な技術が存在し、例えば、共有物理メモリ、ハイパーバイザを呼び出すハイパーコール、物理ディスク上の共通の場所におけるファイルの格納、などが含まれる。ＶＭ通信コンポーネント１３０は、オリジナル仮想マシンからの調整情報を受け取ること、また、調整命令を１つまたは複数のクローン仮想マシンに与えることができる。調整情報により、確実に、各仮想マシンが異なる分岐を進み、複数の可能な状態を評価するようにできる。ハイパーバイザは、共有される通信チャネルの管理、および、仮想マシンに対するセキュリティまたは他の制約の実施、を行ってもよい。オリジナル仮想マシンは、クローンの作成、および、それらの間の活動の調整のための、ハイパーバイザ内のサポートを活用してもよい。
【００１４】
分岐識別コンポーネント１４０は、現在の状態と、ソフトウェアコードを実行するオリジナル仮想マシンを分岐させるための候補である、ソフトウェアコードの１つまたは複数の後続の状態と、を識別して、１つまたは複数のクローン仮想マシンにおける後続の状態を評価する。分岐識別コンポーネント１４０は、ソフトウェアコードを分析することにより潜在的な分岐を自動的に識別してよく、または、アプリケーションによりどこで分岐すべきかを指示されてもよい。今日、分岐の自動識別は、ＣＰＵと同様に発生し、そこでは解析エンジンは、次に来る命令ストリーム内で複数のステップを検証すること、および、命令、機能、または、他の挙動であって、マシンの状態を実質的に変えてしまうものを識別すること、ができる。手動識別は、ソフトウェア開発者により、テスト、または、特定の場所における分岐を要求する他のアプリケーション、をプログラミングして発生させることができる。例えば、テストは、数テストに共通の状態をセットアップし、そして、ホストオペレーティングシステムに通知して、分岐を要求し、各テストが追跡する分岐経路を実行することができる。
【００１５】
状態クローニングコンポーネント１５０は、状態情報をオリジナル仮想マシンからコピーして、同様の状態を有する１つまたは複数のクローン仮想マシンを作成する。コピーでは、メモリ全体、および、オリジナル仮想マシンの他の仮想ハードウェアをコピーしてよく、または、各クローンが追跡するであろう分岐の状態の探索に使用されるサブセットのみを選択してもよい。例えば、テストは、開くことに長時間を要する種々のタイプの多数のオペレーティングシステムのハンドルを閉じてもよい。オリジナル仮想マシンは、ハンドル全てを開く作業を実行することができ、一方、クローン仮想マシンはそれぞれ特定のタイプのハンドルを閉じて種々の条件をテストする。本例では、各クローン仮想マシンは、別個の状態を追跡するが、ハンドル、または、より一般的には仮想マシン上で稼働するテストアプリケーション、に関連する状態のコピーを必要とするだけであって、全ての状態情報または他のアプリケーションに関連する状態のコピーを必要としない。
【００１６】
ＶＭ分岐コンポーネント１６０は、各作成されたクローン仮想マシンを開始させ、かつ、各クローンが追跡する実行の分岐を識別することにより、分岐を実行する。例えば、分岐識別コンポーネント１４０が、ソフトウェアコードに上がってくる５個の可能な経路であって、それぞれが結果として実質的に異なる状態をもたらす経路、を識別する場合、テストアプリケーションは状態クローニングコンポーネント１５０に指示して４つのクローンを作成させてよく、その場合、オリジナル仮想マシンは状態の内の１つを追跡し、一方、４つのクローン仮想マシンは残りの４つの状態を追跡する。ＶＭ分岐コンポーネント１６０は、命令ポインタおよび他のマシン状態を、分岐を取り巻く場所および状態に直接設定することなどにより、各クローン仮想マシンに該マシンが考察するであろう分岐を通知する。そして、ＶＭ分岐コンポーネント１６０は、分岐の状態を探索するために各仮想マシンに実行させる。
【００１７】
クローン調整コンポーネント１７０は、各クローン仮想マシンおよびオリジナル仮想マシンの動作を調整して、不要な分岐の廃棄または分岐結果の統合を可能にする。異なる分岐を実行する目的は、実行がどこで終了するのかを発見することである。多くの場合、ソフトウェアコードは、いくつかの分岐の内の１つを追跡し、分岐の成立に基づき異なる結果を伴うが最終的には共通の場所で終了し得る。従って、分岐後の短い期間に大幅に分岐するコードを実行するが、後に共通の場所で収束して結果を考察することは一般的である。クローン調整コンポーネント１７０は、テストまたは他のアプリケーションコードに、種々の状態を考察するためにいくつかの作業を行わせるべく複数のクローン仮想マシンを送り出すが、各クローン仮想マシンの結果を考察することにより、かつ、状態の探索が完了する時にオリジナル仮想マシンに実行を戻すことにより、周期を完了させる。これは、今日、ＣＰＵがいくつかの分岐を投機的に実行して、結局は成立しなかった分岐をフラッシュすることと同様であるが、仮想マシンレベルでもっと広いスケールで状態分岐システム１００により応用される。
【００１８】
結果処理コンポーネント１８０は、各仮想マシンが生成する結果を処理し、その結果をクローン調整コンポーネント１７０に提供する。各仮想マシン、すなわちオリジナルおよびクローンは、単純な数値、またはテキストの結果、または仮想マシンに対して発生するさらなる状態変化などの複雑な結果を含む様々な結果を生成することができる。一例として、アンチウィルスプログラムは、悪意のあるコードを探すためにスキャンされているコンピュータ装置上で見つかるいくつかの識別されたソフトウェアコードモジュールを実行して、そのコードモジュールがコンピュータ装置に対して何らかの害をなすかどうかを判定しようとする。アンチウィルスプログラムは、オリジナルコンピュータ装置の特徴の全てを有するクローン仮想マシンにおいて各ソフトウェアコードモジュールをスポーンすることができ、その結果は、ソフトウェアコードがクローンに対して成す任意の変化である。アンチウィルスプログラムは、結果をスキャンして、何らかの害がある（例えば、重要なファイルを削除する、連絡先にスパムを送信する）かどうかを判定することができ、かつ、真偽値をオリジナルのアプリケーションに提供して有害な結果が見つかったかどうかを示すことができる。これにより、各クローンは、何らかの方法でクローン仮想マシンの状態を混乱させてしまう可能性があるが、特定の結果が得られた後にアンチウィルスプログラムにより廃棄される。別の例として、システムを使用する組込み装置を、ネットワークの接続を確認（ping）して何らかの複雑な動作を実行すべきかまたどのように実行すべきかを判定するように、設計することが可能である。この分岐により、高レイテンシ要求がなされていても、装置は物理装置のアイドルな処理パワーを使用することができる。恐らく、これには、センサまたはアンテナアレイの再較正する計算を伴い、組込み装置は、ネットワーク応答を受け取る前に可能な計算を開始することができる。
【００１９】
状態分岐システムが実装されるコンピュータ装置には、中央処理装置、メモリ、入力装置（例えば、キーボードおよびポインティングデバイス）、出力装置（例えば、表示装置）、および記憶装置（例えば、ディスクドライブまたは他の不揮発性記憶媒体）が含まれてよい。メモリおよび記憶装置は、システムを実装するまたは有効にするコンピュータ実行可能命令（例えば，ソフトウェア）が符号化されてよいコンピュータ可読記憶媒体である。加えて、データ構造およびメッセージ構造は、記憶されているか、又は、通信リンク上の信号などのデータ伝送媒体を介して伝送されてもよい。インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク、２地点間ダイアルアップ接続、携帯電話ネットワーク、などの種々の通信リンクを使用することができる。
【００２０】
システムの実施形態は種々の動作環境において実装されてよく、該動作環境には、パーソナルコンピュータ、サーバコンピュータ、ハンドヘルドまたはラップトップの装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラマブル家庭用電子機器、デジタルカメラ、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、上記のシステムまたは装置のいずれかを含む分散コンピュータ環境、セットトップボックス、システムオンチップ（ＳＯＣ）、などが含まれる。コンピュータシステムは、携帯電話、携帯情報端末（ＰＤＡ）、スマートフォン、パーソナルコンピュータ、プログラマブル家庭用電子機器、デジタルカメラ、などとしてよい。
【００２１】
システムについて、１つまたは複数のコンピュータまたは他の装置により実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的文脈で説明することができる。一般的に、プログラムモジュールには、特定のタスクを実行、または、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などが含まれる。典型的には、プログラムモジュールの機能性は、種々の実施形態において所望の通りに組み合わせまたは分散されてよい。
【００２２】
図２は、一実施形態における、オリジナル仮想マシンから１つまたは複数のクローン仮想マシンへ分岐して分岐の状態を考察する、状態分岐システムの処理を例示するフロー図である。ブロック２１０にて開始され、システムは、オリジナル仮想マシン上での実行するためのアプリケーションコードを受け取り、それにおいて、アプリケーションコードには、仮想マシンの状態を２つまたはそれ以上の可能な状態とさせる少なくとも１つの分岐が含まれる。システムは、マシンの状態を変化させるテストまたは他のアプリケーションコードを受け取ってよく、また、分岐は、ランタイム時に評価される条件に基づき発生してよい。システムは、オリジナル仮想マシンの状態を実質的に変えてしまう分岐を識別し、かつ、１つまたは複数のクローン仮想マシンを並列して実行して分岐から導かれる経路を評価する。
【００２３】
ブロック２２０へ続き、システムは、受け取ったアプリケーションコードを含むオリジナル仮想マシンを実行する。例えば、システムは、ハイパーバイザ内で動作し、同じ物理リソースを共有する複数の仮想マシンの実行を指示することができる。システムは、分岐が、仮想マシンの状態を大幅に変化させてしまう可能性があると識別されるまで、オリジナル仮想マシンを実行する。例えば、分岐は、ファイルの削除、長時間の計算の実行、大量のデータの作成、または、状態を変化させる他の動作の実行、を行うかもしれない。
【００２４】
ブロック２３０へ続き、システムは、オリジナル仮想マシン上で稼働するアプリケーションコード内の、仮想マシンの２つまたはそれ以上の可能な状態をもたらす分岐を識別する。例えば、システムは、従来技術において周知のコード分析ツールを使用してソフトウェアコード内の分岐する経路を発見することにより、分岐を自動的に識別することができる。多くの静的およびランタイムの分析ツールが、ソフトウェアコードを、バイナリおよび／またはソースコードのレベルで調査し、アプリケーションの状態における重要な分岐する位置を識別する。いくつかの実施形態において、システムにより、アプリケーションは、アプリケーションが複数の可能な状態に分岐するであろう場所を示すことができるようになる。例えば、テストアプリケーションは、２つまたはそれ以上の分岐経路を識別するオペレーティングシステムＡＰＩを起動して、システムが仮想マシンをクローン化し、経路を並列して実行できるようにすることができる。
【００２５】
ブロック２４０へ続き、システムは、１つまたは複数のクローン仮想マシンを作成するが、当該マシンは、オリジナル仮想マシンの現在の状態を複製して、次に、分岐の１つの経路を処理して作成されるクローン仮想マシンにおける後続の状態を探索する。クローン化には、仮想ハードウェアを識別する仮想マシンの仕様のセットアップ、オリジナル仮想マシンのメモリの状態のコピー、オリジナル仮想マシンにアタッチされたディスクのコピー、などが含まれてよい。仮想化ソフトウェアには、仮想マシンを単一のファイルに記憶するものがあり、このファイルには、任意の組込みファイルシステム（例えばマイクロソフト（商標）のＶｉｒｔｕａｌ  ＰＣおよびＨｙｐｅｒ−Ｖで使用されるＶＨＤファイル）が含まれる。システムは、オリジナル仮想マシンの実行を中断し、仮想マシンに関連する１つまたは複数のファイルをコピーすることにより、仮想マシンをクローン化してもよい。
【００２６】
ブロック２５０へ続き、システムは、各クローン仮想マシンをセットアップして、識別された分岐の異なる経路を実行する。クローンがオリジナルの完全なクローンであれば、該クローンは、オリジナルが次に行うのと同じことを行うであろう。しかし、状態分岐システムの目的の１つは、各クローンに分岐の異なる経路を並列して追跡させることである。従って、システムは、各クローンがどの経路を探索する責任があるのかについての情報を用いて該クローンをセットアップし、次に、クローンとオリジナルそれぞれを実行して、該クローンとオリジナルにその割り当てられた経路を探索させる。各クローンのセットアップには、仮想マシンが実行するであろうソフトウェアコードの識別、特定の場所への命令ポインタ及びレジスタの状態の設定、などが含まれてよい。
【００２７】
ブロック２６０へ続き、システムは、オリジナル仮想マシンおよびクローン化仮想マシンを実行して、識別された分岐の少なくとも２つの経路を並列して探索する。分岐の特定の経路がマシン状態を大幅に変えてしまう場合、その分岐を実行する仮想マシンのみが影響を受けることになる。その一方、オリジナル仮想マシンは、クローン化仮想マシンを実行して、オリジナル仮想マシンの状態に影響を与えることなく分岐経路についての情報を集める効果を判定するべく待ってもよい。アプリケーションコードが、条件が分岐経路の成立を満たさないと判定する場合、その経路に関する仮想マシンを単に廃棄することが可能であり、オリジナル仮想マシンは継続可能である。いくつかの場合、システムは、クローン仮想マシンを選択して、主要な仮想マシン（すなわち、オリジナル仮想マシンの役割を引き継ぐ）として継続させ、オリジナル仮想マシンを終了してもよい。
【００２８】
ブロック２７０へ続き、システムは、クローン化仮想マシンから少なくとも１つの実行結果を受け取る。その結果として、クローン化仮想マシンより到達される状態、交差ＶＭ通信チャネルを介してクローン化仮想マシンから通信される情報、クローン化仮想マシンにより実行される分岐経路を実行することにより生成される出力、などを示すことができる。オリジナル仮想マシンは、実行結果を使用して、次に何をすべきかを判定すること、または、オリジナル仮想マシンが処理を続けるであろう結果をもたらす仮想マシンを選択することができる。クローン化仮想マシンが並列して実行されるため、システムが、オリジナル仮想マシン内で各分岐を試すよりも早く結果に到達することが期待できる。ブロック２７０の後、これらのステップは完了する。
【００２９】
図３は、一実施形態における、１つまたは複数のクローン仮想マシンを出て実行を収束させてオリジナル仮想マシンに戻す、状態分岐システムの処理を例示するフロー図である。ブロック３１０にて開始され、システムは、オリジナル仮想マシン内のアプリケーションコードの分岐を前もって検出すること、かつ、各分岐経路を実行するクローン化仮想マシンをスポーンすることにより作成された、第１のクローン化仮想マシンを選択する。後に続く繰り返しにおいて、システムは次のクローン化仮想マシンを選択する。
【００３０】
ブロック３２０へ続き、システムは、選択されたクローン化仮想マシンが、同マシンが割り当てられていた分岐経路の実行を完了したことを検出する。いくつかの場合、分岐経路は、より大きな本体部分のコードの内の小さなサブセクションを表すことができ、すなわち、サブセクションは、結果又は状態変更をもたらし、ある意味においては、より大きなコード本体の外部の結果を決定するために、分岐の実行を隔離することは有益となる。クローン化仮想マシンのセットアップ中、システムは、クローン化仮想マシンが分岐経路の実行を完了するであろう時点で、命令（例えば、中止または割り込み）または他の標示を挿入してもよい。ハイパーバイザまたは他のコードが命令を監視または検出して、クローン化仮想マシンの完了を検出することが可能である。
【００３１】
ブロック３３０へ続き、システムは、クローン化仮想マシンの実行の結果状態を識別する。結果には、数値結果、クローン化仮想マシンにより生成されるデータ、クローン化仮想マシンに対する状態変化、などが含まれてよい。システムは、クローン化仮想マシンをオリジナル仮想マシンと比較して、クローン化仮想マシンが実行した分岐経路を探索することにより生成される変化を識別することができる。オリジナル仮想マシンが、分岐により投機的に実行される経路を採用すると決定すると、オリジナル仮想マシンは、選択されたクローン化仮想マシンの状態の相違または識別された結果をコピーすることが可能である。
【００３２】
決定ブロック３４０へ続き、システムは、現在の分岐に関連するクローン化仮想マシンがまだ存在するかどうかを判定する。存在する場合、システムは、ブロック３１０へループして次のクローン化仮想マシンを選択し、そうでない場合、システムは、各クローン化仮想マシンが処理された後にブロック３５０へ続く。
【００３３】
ブロック３５０へ続き、システムは、オリジナル仮想マシン上で稼働するアプリケーションコードにおける１つまたは複数の条件に基づき、成立させる分岐を選択する。いくつかの実施形態において、クローン化仮想マシンは、オリジナル仮想マシンが採用し得る分岐経路を投機的に実行するための投機的実行エンジンとして動作する。オリジナル仮想マシンが、どのパスを成立させるか判断するために、全ての条件が評価されたポイントまで実行した後に、オリジナル仮想マシンは、分岐の内の１つを正しい分岐として選択し、他を廃棄することが可能である。他の実施形態において、クローン化仮想マシンは、オリジナル仮想マシンにより全てが使用される累積結果を表してよいが、それは、結果により早く到達するために並列して実行される。そのような場合、オリジナル仮想マシンは、各クローン化仮想マシンから結果を受け取り、任意のさらなる処理を受け取った結果に対して実行し、クローン化仮想マシンが完了した後にも処理を継続する。
【００３４】
ブロック３６０へ続き、システムは、識別された結果状態を、選択された分岐を実行したクローン化仮想マシンからコピーする。このように、オリジナル仮想マシンは、個々のクローン化仮想マシンが実行する並列実行により恩恵を受ける。どの分岐を成立させようと、オリジナル仮想マシンは、各分岐のテストによる影響を受けず、また、先行するコードが完了した後に分岐を引き続き実行するべく待つ必要もない。むしろ、先行するコードがオリジナル仮想マシンにおいて完了し、一方で、クローン化仮想マシンはそれぞれ分岐の内の１つを実行し、また、選択された仮想マシンは、結果をオリジナル仮想マシンに、準備が整い次第（また、オリジナル仮想マシン自身で結果を達成することができる前に）提供する。
【００３５】
ブロック３７０へ続き、システムは、クローン化仮想マシンからのコピーした結果を使用して、オリジナル仮想マシンの実行を継続する。いくつかの実施形態において、システムは、オリジナル仮想マシンを廃棄し、かつ、選択されたクローン化仮想マシンを介して実行を継続してよい。システムは、成立させなかった分岐経路を表す任意のクローン化仮想マシンを廃棄または「フラッシュ」することが可能である。ブロック３７０の後、これらのステップは完了する。
【００３６】
図４は、一実施形態における、状態分岐システムによる分岐経路の並列処理を例示するタイムライン図である。タイムラインの第１の列４１０は、本明細書に記載されるオリジナル仮想マシンの処理を表す。従来のシステムでは、オリジナル仮想マシンまたは物理マシンは、処理の全てを実行することになる。オリジナル仮想マシンは、オリジナル仮想マシンが実行中のアプリケーションコード内の分岐４５０に遭遇する前に、１つまたは複数のタスク４４０を処理する。分岐前の何らかのポイントで、オリジナル仮想マシンが分岐を識別して、分岐の潜在経路を並列して実行する２つのクローン化仮想マシンをスポーンする。第２の行４２０は、第１のクローン化仮想マシンの処理を表し、第３の行４３０は第２のクローン化仮想マシンの処理を表す。オリジナル仮想マシンが分岐前タスク４４０を完了する一方、第１のクローン化仮想マシンが第１の分岐経路４６０に関連するコードを実行し、第２のクローン化仮想マシンが第２の分岐経路４７０に関連するコードを並列して実行する。オリジナル仮想マシンは分岐４５０に到達すると、オリジナル仮想マシンの現在の状態および分岐４５０の任意の条件に基づき採用すべき分岐の経路を判定する。オリジナル仮想マシンは、判定を勝ち抜いた分岐を選択し、結果４８０をオリジナル仮想マシンにコピーする。そして、オリジナル仮想マシンは実行を継続し、クローン化仮想マシンを廃棄する。このように、クローン化仮想マシンは、オリジナル仮想マシンの将来の状態を並列して準備し、オリジナル仮想マシンを各分岐経路の評価時に関与していた侵略的な状態変化から分離する。
【００３７】
いくつかの実施形態において、状態分岐システムは、デバイスドライバテストのためのフレームワークを提供する。デバイスドライバテストは、不正確に操作すると、オペレーティングシステムのカーネル空間においてデッドロックしてしまう状態変化および物理ハードウェアを伴うために、困難であることが多い。状態分岐システムにより、物理ハードウェアの状態変化を仮想化することが可能になるため、並列して動作する複数のクローン仮想マシンが、種々の潜在的なハードウェア入力の結果および対応するドライバ応答を評価できる。これにより、デバイスドライバソフトウェアコードのより速くよりロバストな開発が容易にされる。
【００３８】
いくつかの実施形態において、状態分岐システムは、分岐経路を探索する追加の仮想マシンをスポーンするための閾値を判定する。仮想マシンの作成とセットアップには、時間およびリソース使用の点である程度のコストが発生する。小さな分岐については、クローン化仮想マシンのセットアップに伴う時間は、該マシンから得られる恩恵に値する価値はないかもしれない。従って、システムは、クローン化仮想マシンを使用することの恩恵に関する閾値を判定して、トレードオフにより実行時間が最終的に節約される、または、他のポジティブな結果がもたらされる場合に限り、新しいクローン化仮想マシンをスポーンしてもよい。アプリケーションは、アプリケーションに固有の考察事項に基づく閾値を設定または調整することができてよい。同様に、いくつかの実施形態において、状態分岐システムは、分岐経路を探索するクローン化仮想マシンを使用することの恩恵を評価する際に、クローン化仮想マシンが、クローン化仮想マシンの外部の任意のリソースに影響を与える（すなわち、外部のまたはリンクされる物理装置にコマンドを発行する、ネットワーク上にパケットを送信する、など）かどうかを考慮してもよい。
【００３９】
いくつかの実施形態において、状態分岐システムは、オリジナル仮想マシンとは異なる物理マシン上にクローン化仮想マシンをスポーンする。仮想マシンは、物理マシン間の容易な移動に良好に適しており、システムは、クローン化仮想マシンのいくつかまたは全てを分離した物理マシン上で実行することにより、種々の分岐経路の探索を、他の物理マシンに任せてもよい。クローン化仮想マシンは、必要に応じて、ネットワークまたは物理マシン間の他の通信チャネルを介して、オリジナル仮想マシンと通信することができる。
【００４０】
いくつかの実施形態において、状態分岐システムは、分岐経路を探索するクローン化仮想マシンを使用する機会を検出する際に、ハイパーバイザからの通知を提供する。ハイパーバイザは、仮想マシンにおける各実行中の処理の監視、および、並列して、分離した仮想マシンが分岐経路に対して備えることができるインスタンスの自動的な検出、を行うことが可能である。そのような場合、ハイパーバイザがクローン化仮想マシンをスポーンすることをアプリケーションが意図するかどうかの標示をアプリケーションが登録することおよびそれに応答することが可能である、というアプリケーション通知をハイパーバイザは提供することができる。
【００４１】
いくつかの実施形態において、状態分岐システムは、仮想マシン上で稼働するアプリケーションの種々の状態に戻す効果を備える、新しい形式のデバッグを提供する。システムは、クローン化仮想マシンの形式でアプリケーションの実行時の種々のポイントで、チェックポイントを作成する。各クローン化仮想マシンは、アプリケーションの状態を特定の時間ポイントにおいて表し、アプリケーションに対して発生する任意の後続の変化から分離される。これにより、ソフトウェア開発者は、問題が発生する前または発生中の１つまたは複数の時間ポイントにおいて、デバッガをアタッチして、アプリケーションの状態を検査することができる。
【００４２】
いくつかの実施形態において、状態分岐システムは、種々のタスクを実行するための同様のアルゴリズムを比較するためのＡ−Ｂテストを提供する。例えば、システムは、オペレーティングシステムのページングまたはスケジューリングアルゴリズムを、それぞれを別個のクローン化仮想マシンにおいて、管理する処理の同様セットを用いてセットアップすること、そして、各クローン化仮想マシンを並列して実行して、どちらのアルゴリズムアがより良い結果を提供するかを、実行速度、または他の要因の観点から、判定することにより、テストすることができる。今日、そのようなテストを再び稼働させることで、順次新しい状態が導入される。テストハーネスが毎回同じ状態をセットアップしようと試みても、常に何らかの変化があり比較を困難にする。状態分岐システムを使用すると、各テストは既知のクローン化状態で開始され、予想外の状態変化による影響が少ない状態で、結果を比較することが可能である。
【００４３】
上記より、状態分岐システムの特定の実施形態が例示の目的で本明細書に記載されるが、本発明の精神および範囲から逸脱することなく種々の修正がなされてよいことは理解されるであろう。従って、本発明は添付の請求の範囲による場合を除いて制限されない。
【図１】
0005960161.tif 000002
【図２】
0005960161.tif 000003
【図３】
0005960161.tif 000004
【図４】
0005960161.tif 000005