(57)【要約】  仮想マルチパスアクセス用の技術は、リカバリパーティションがホストメモリまたはデータストレージのようなホストパーティションの１つ又は複数のリソースにアクセスすることを可能にする一方で、リカバリパーティションをホストパーティションから隔離するように構成されたコンピューティングデバイスを含む。リモートコンピューティングデバイスは、ホストパーティションが応答性であるかどうかを決定する。リカバリパーティションは、ホストパーティションが応答性ではないとの決定に応答して、リモートコンピューティングデバイスからホストパーティションのホスト状態データの要求を受信する。リカバリパーティションは、ホストパーティションによって保有されているホスト状態インデックスを用いて、要求されたホスト状態データを取得し、要求されたホスト状態データをリモートコンピューティングデバイスに送信する。ホスト状態インデックスは、要求されたホスト状態データの位置を識別し得る。リモートコンピューティングデバイスは、受信されたホスト状態データに基づいてリカバリ操作を実行し得る。他の複数の実施形態が説明され、請求される。
2017504083.tif 000002
【特許請求の範囲】
【請求項１】
仮想マルチパス状態アクセスを提供するコンピューティングデバイスであって、
リカバリパーティションをホストパーティションから隔離する分離モジュールであり、前記ホストパーティションの１つ又は複数のリソースは、前記リカバリパーティションにアクセス可能である、分離モジュールと、
前記リカバリパーティションによって確立されるリカバリモジュールと
を備え、
前記リカバリモジュールは、
前記ホストパーティションのホスト状態データの要求をリモートコンピューティングデバイスから受信し、前記要求は前記ホストパーティションが故障したことの指標であり、
前記ホストパーティションによって保有されるホスト状態インデックスを用いて、前記要求によって要求された前記ホスト状態データを取得し、前記ホスト状態インデックスは前記ホスト状態データの位置を識別し、
前記要求されたホスト状態データを前記リモートコンピューティングデバイスに送信する、
コンピューティングデバイス。
【請求項２】
前記リカバリパーティションを前記ホストパーティションから隔離することは、前記コンピューティングデバイスのメモリをホストメモリセグメントおよびリカバリメモリセグメントへとパーティションすることを含み、
前記ホストメモリセグメントは、（ｉ）前記ホスト状態データおよび前記ホスト状態インデックスを含み、（ｉｉ）前記リカバリパーティションにアクセス可能であり、
前記リカバリメモリセグメントは、前記ホストパーティションにアクセス可能ではない、
請求項１に記載のコンピューティングデバイス。
【請求項３】
前記ホストパーティションは、前記ホストメモリセグメントにおける前記ホスト状態インデックスのベース物理アドレスを初期化するためのものであり、
前記リカバリモジュールは更に、前記ホスト状態インデックスの前記ベース物理アドレスを読み取るためのものである、
請求項２に記載のコンピューティングデバイス。
【請求項４】
前記ホストパーティションは更に、前記ホストメモリセグメントにおけるページ変換テーブルのベース物理アドレスを初期化するためのものであり、
前記リカバリモジュールは更に、前記ページ変換テーブルの前記ベース物理アドレスを読み取るためのものであり、
前記ホスト状態データを取得することは、前記ホスト状態インデックスおよび前記ページ変換テーブルを用いて前記ホストメモリセグメントの１つ又は複数のメモリページを取得することを含む、
請求項３に記載のコンピューティングデバイス。
【請求項５】
前記リカバリパーティションを前記ホストパーティションから隔離することは、前記コンピューティングデバイスのデータストレージデバイスをホストデータパーティションへとパーティションすることを含み、
前記ホストデータパーティションは、（ｉ）前記ホスト状態データおよび前記ホスト状態インデックスを含み、（ｉｉ）前記リカバリパーティションにアクセス可能である、
請求項１に記載のコンピューティングデバイス。
【請求項６】
前記ホストパーティションは、前記ホストデータパーティションにおける前記ホスト状態インデックスのベースストレージアドレスを初期化するためのものであり、
前記リカバリモジュールは、前記ホスト状態インデックスの前記ベースストレージアドレスを読み取るためのものである、
請求項５に記載のコンピューティングデバイス。
【請求項７】
前記リカバリパーティションを前記ホストパーティションから隔離することは、
前記コンピューティングデバイスの複数のプロセッサコアのうちの１つのプロセッサコアをリカバリパーティションに隔離し、
前記複数のプロセッサコアのうちの残余を前記ホストパーティションに割り当てることを含み、
前記隔離されたプロセッサコアは、前記ホストパーティションにアクセス不可能であり、前記複数のプロセッサコアのうちの前記残余は、前記リカバリパーティションにアクセス不可能である、
請求項１から６の何れか一項に記載のコンピューティングデバイス。
【請求項８】
前記リカバリパーティションを前記ホストパーティションから隔離することは、
前記リカバリパーティションにアクセス不可能な、前記コンピューティングデバイスの第１のネットワークインターフェースを前記ホストパーティションに割り当て、
前記ホストパーティションにアクセス不可能な、前記コンピューティングデバイスの第２のネットワークインターフェースを前記リカバリパーティションに割り当てることを含み、
前記ホスト状態データの前記要求を受信することは、前記第２のネットワークインターフェースを用いて前記ホスト状態データの前記要求を受信することを含む、
請求項１から６の何れか一項に記載のコンピューティングデバイス。
【請求項９】
前記リカバリモジュールは更に、前記リカバリパーティションのリアルタイムオペレーティングシステムを用いて、前記ホスト状態データの前記要求用に、前記コンピューティングデバイスの前記第２のネットワークインターフェースをポーリングするためのものである、
請求項８に記載のコンピューティングデバイス。
【請求項１０】
前記ホストパーティションによって保有され、（ｉ）前記ホスト状態インデックスにおいてホスト状態更新情報のログを記録し、（ｉｉ）前記ホスト状態更新情報に基づいて前記ホストパーティションの前記ホスト状態データを更新する、状態更新モジュールを更に備える、
請求項１から６の何れか一項に記載のコンピューティングデバイス。
【請求項１１】
仮想マルチパス用のリモートコンピューティングデバイスであって、
コンピューティングデバイスのホストパーティションからホスト状態データを受信する状態同期モジュールと、
前記コンピューティングデバイスの前記ホストパーティションが応答性であるかどうかを決定するホスト監視モジュールと、
（ｉ）前記コンピューティングデバイスの前記ホストパーティションが応答性ではないとの決定に応答して、前記コンピューティングデバイスのリカバリパーティションから前記ホスト状態データの更新情報を要求し、（ｉｉ）前記要求に応答して前記リカバリパーティションから前記要求されたホスト状態データを受信するリカバリモジュールと
を備えるリモートコンピューティングデバイス。
【請求項１２】
前記リカバリモジュールは更に、前記受信されたホスト状態データに基づいてリカバリ操作を実行するためのものである、
請求項１１に記載のリモートコンピューティングデバイス。
【請求項１３】
前記状態同期モジュールは更に、（ｉ）前記ホストパーティションからの前記ホスト状態データを前記リモートコンピューティングデバイスのリモート状態データに格納し、（ｉｉ）前記リカバリパーティションから受信された前記要求されたホスト状態データを用いて前記リモート状態データを更新するためのものであり、
前記リカバリ操作を実行することは、前記リモート状態データを用いて前記リカバリ操作を実行することを含む、
請求項１２に記載のリモートコンピューティングデバイス。
【請求項１４】
前記リカバリ操作を実行することは、前記ホストパーティションを再起動することを含む、
請求項１２に記載のリモートコンピューティングデバイス。
【請求項１５】
前記ホストパーティションを再起動することは、前記コンピューティングデバイス上、前記リモートコンピューティングデバイス上、又は、第２のコンピューティングデバイス上で前記ホストパーティションを再起動することを含む、
請求項１４に記載のリモートコンピューティングデバイス。
【請求項１６】
仮想マルチパス状態アクセスを提供する方法であり、
コンピューティングデバイスが、リカバリパーティションをホストパーティションから隔離する段階であり、前記ホストパーティションの１つ又は複数のリソースは前記リカバリパーティションにアクセス可能である、段階と、
前記コンピューティングデバイスの前記リカバリパーティションが、リモートコンピューティングデバイスから前記ホストパーティションのホスト状態データの要求を受信する段階であり、前記要求は、前記ホストパーティションが故障したことを示している、段階と、
前記コンピューティングデバイスの前記リカバリパーティションが、前記ホストパーティションによって保有されているホスト状態インデックスを用いて、前記要求によって要求された前記ホスト状態データを取得する段階であり、前記ホスト状態インデックスは前記ホスト状態データの位置を識別する、段階と、
前記コンピューティングデバイスの前記リカバリパーティションが、前記要求されたホスト状態データを前記リモートコンピューティングデバイスに送信する段階と
を含む方法。
【請求項１７】
前記リカバリパーティションを前記ホストパーティションから隔離する段階は、前記コンピューティングデバイスのメモリをホストメモリセグメントおよびリカバリメモリセグメントへとパーティションする段階を含み、
前記ホストメモリセグメントは、（ｉ）前記ホスト状態データおよび前記ホスト状態インデックスを含み、（ｉｉ）前記リカバリパーティションにアクセス可能であり、
前記リカバリメモリセグメントは、前記ホストパーティションにアクセス可能ではない、
請求項１６に記載の方法。
【請求項１８】
前記リカバリパーティションを前記ホストパーティションから隔離する段階は、
前記コンピューティングデバイスの複数のプロセッサコアのうちの１つのプロセッサコアを前記リカバリパーティションに隔離する段階と、
前記複数のプロセッサコアのうちの残余を前記ホストパーティションに割り当てる段階と
を含み、
前記隔離されたプロセッサコアは、前記ホストパーティションにアクセス不可能であり、前記複数のプロセッサコアのうちの前記残余は、前記リカバリパーティションにアクセス不可能である、
請求項１６に記載の方法。
【請求項１９】
前記リカバリパーティションを前記ホストパーティションから隔離する段階は、
前記コンピューティングデバイスの第１のネットワークインターフェースを前記ホストパーティションに割り当てる段階であり、前記第１のネットワークインターフェースは前記リカバリパーティションにアクセス不可能である、段階と、
前記コンピューティングデバイスの第２のネットワークインターフェースを前記リカバリパーティションに割り当てる段階であり、前記第２のネットワークインターフェースは前記ホストパーティションにアクセス不可能である、段階と
を含み、
前記ホスト状態データの前記要求を受信する段階は、前記第２のネットワークインターフェースを用いて前記ホスト状態データの前記要求を受信する段階を含む、
請求項１６に記載の方法。
【請求項２０】
仮想マルチパス用の方法であり、
リモートコンピューティングデバイスが、コンピューティングデバイスのホストパーティションからホスト状態データを受信する段階と、
前記リモートコンピューティングデバイスが、前記コンピューティングデバイスの前記ホストパーティションが応答性であるかどうかを決定する段階と、
前記リモートコンピューティングデバイスが、前記コンピューティングデバイスの前記ホストパーティションが応答性ではないとの決定に応答して、前記コンピューティングデバイスのリカバリパーティションから前記ホスト状態データの更新情報を要求する段階と、
前記リモートコンピューティングデバイスが、前記要求に応答して、前記リカバリパーティションから前記要求されたホスト状態データを受信する段階と
を含む方法。
【請求項２１】
前記リモートコンピューティングデバイスが、前記受信されたホスト状態データに基づいてリカバリ操作を実行する段階を更に含む、
請求項２０に記載の方法。
【請求項２２】
前記リモートコンピューティングデバイスが、前記ホストパーティションからの前記ホスト状態データを前記リモートコンピューティングデバイスのリモート状態データに格納する段階と、
前記リモートコンピューティングデバイスが、前記リカバリパーティションから受信された前記ホスト状態データの前記更新情報を用いて前記リモート状態データを更新する段階と
を更に含み、
前記リカバリ操作を実行する段階は、前記リモート状態データを用いて前記リカバリ操作を実行する段階を含む、
請求項２１に記載の方法。
【請求項２３】
プロセッサと、
前記プロセッサが実行した場合に、前記コンピューティングデバイスに請求項１６から２２の何れか一項に記載の方法を実行させる複数の命令が格納されたメモリと
を備えるコンピューティングデバイス。
【請求項２４】
実行されたことに応答してコンピューティングデバイスが請求項１６から２２の何れか一項に記載の方法を実行することになる複数の命令を格納されて備える、
１つ又は複数の機械可読記憶媒体。
【請求項２５】
請求項１６から２２の何れか一項に記載の方法を実行する手段を備えるコンピューティングデバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
クラウドコンピューティングクラスタを含むコンピューティングクラスタ内で実行する多くの典型的なアプリケーションは、高いレベルの利用可能性、冗長性、又は、堅牢性の他の尺度を必要とする。そのようなアプリケーションにおいて、状態データは、典型的には、障害のポイントとして単一ノードを導入することを阻止すべく、コンピューティングクラスタの全体に渡って伝達される。例えば、売上および顧客支払請求システムなどの業務上不可欠なアプリケーションは、典型的には、障害の単一ポイントに対してフェールセーフでなくてはいけない。コンピューティングクラスタにおけるノードは、ハードウェア障害、ソフトウェア障害、ネットワーク障害、電力障害、又は、他の予期せぬ停電の任意の組み合わせに起因して、ダウンされ得る。但し、（ソフトウェアバグ、ソフトウェア不良コンフィギュレーション、一時的なハードウェアエラーに起因するクラッシュ、及び、すべての他のソフトウェア障害を含む）ソフトウェア障害は、典型的には、任意の他の障害ソースよりもよく発生する。
【０００２】
幾つかのシステムにおいて、アプリケーション状態は、クラスタの全てのノード間で送信される同期更新メッセージによって、コンピューティングクラスタを通じて伝達され得る。追加的に又は代替的に、幾つかのシステムにおいて、アプリケーション状態は、同期的に、ストレージエリアネットワークまたはネットワーク接続ストレージボリュームなどの大域ストレージにログを記録され得る。そのようなアプリケーションにおいて、複数のノードおよび／または大域ストレージ間の同期化は、通信オーバヘッド、機器並びに施設コスト、及び、複雑性の主要な原因であり、これはまた、システムの柔軟性を低減させる。これに加えて、そのようなシステムは、クラウドコンピューテイングアプリケーションに必要とされるもののような多数のノードにスケーリングすることができない。
【図面の簡単な説明】
【０００３】
本明細書で説明される複数の概念は、添付の図面において例として示されるのであって、限定として示されるのではない。例示の簡略化及び明確化のため、図面において示される要素は、必ずしも縮尺通りに描写されていない。適切と見なされる場合には、複数の参照符号は、複数の対応する又は類似の要素を示すべく、複数の図の間で繰り返されている。
【０００４】
【図１】順応性のある仮想マルチパスリソースアクセス用のシステムの少なくとも１つの実施形態の簡略ブロック図である。
【０００５】
【図２】図１のシステムによって確立され得る様々な環境の少なくとも１つの実施形態の簡略ブロック図である。
【０００６】
【図３】図１および２のシステムのコンピューティングデバイスによって実行され得るパーティション分離方法の少なくとも１つの実施形態の簡易フロー図である。
【０００７】
【図４】図１および２のコンピューティングデバイスにおける、パーティションされたメモリの模式図である。
【０００８】
【図５】図１および２のシステムのコンピューティングデバイスによって実行され得る、ホスト状態データを更新する方法の少なくとも１つの実施形態の簡易フロー図である。
【０００９】
【図６】図１および２のシステムのコンピューティングデバイスによって実行され得る、ホスト状態データをリカバーする方法の少なくとも１つの実施形態の簡易フロー図である。
【００１０】
【図７】図１および２のシステムの他のコンピューティングデバイスによって実行され得る、ホスト状態データを遠隔で受信してリカバーする方法の少なくとも１つの実施形態の簡易フロー図である。
【発明を実施するための形態】
【００１１】
本開示の複数の概念は、様々な変更及び代替的な形態の対象たり得るものである一方で、それらの複数の具体的実施形態は、図面において例として示され、本明細書で詳細に説明されるだろう。しかしながら、本開示の複数の概念を開示される複数の特定形態に制限する意図は無く、それどころか、本開示及び添付の特許請求の範囲と相反しない全ての変更、均等物及び代替案を包含する意図であることを理解されるべきである。
【００１２】
明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等についての複数の言及は、説明される実施形態が特有の機能、構造または特性を含み得ることを示しているが、いずれの実施形態も、それら特有の機能、構造または特性を含んでもよく、又は、必ずしも含まなくてもよい。更に、そのような複数の表現は、必ずしも同じ実施形態について言及していない。更に、特有の機能、構造または特性が実施形態に関連して説明される場合、明示的に説明されているか否かに拘らず、他の複数の実施形態に関連してそのような特徴、構造または特性を達成することは、当業者の知識の範囲内であるとされる。追加的に、「Ａ、ＢおよびＣの少なくとも１つ」という形でリストに含まれる複数の項目は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、（ＢおよびＣ）、又は、（Ａ、ＢおよびＣ）を意味し得ることが理解されるべきである。同様に、「Ａ、ＢまたはＣの少なくとも１つ」という形で列挙される複数の項目は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＡおよびＣ）、（ＢおよびＣ）、又は、（Ａ、ＢおよびＣ）を意味し得る。
【００１３】
開示される複数の実施形態は、場合によっては、ハードウェア、ファームウェア、ソフトウェア、又は、それらの任意の組み合わせにおいて実装されてもよい。開示される複数の実施形態はまた、１つ又は複数のプロセッサによって読み取られて実行され得る、１つ又は複数の一時的又は非一時的機械可読（例えばコンピュータ可読）記憶媒体によって伝達又は格納される複数の命令として実装されてもよい。機械可読記憶媒体は、情報を機械で読み取り可能な形で格納又は送信する、任意のストレージデバイス、メカニズム、又は、他の物理的構造として具現化されてもよい（例えば、揮発性若しくは非揮発性メモリ、メディアディスク、又は、他のメディアデバイス）。
【００１４】
図面において、幾つかの構造的又は方法的な特徴は、複数の特定の配置および／または順序で示され得る。しかしながら、そのような複数の特定の配置および／または順序が必要とされなくてもよいことが理解されるべきである。むしろ、幾つかの実施形態において、そのような複数の特徴は、例示的な図面で示されるものと異なる態様および／または順序で構成されてもよい。追加的に、特定の図面において構造的又は方法的な特徴を含ませることは、そのような特徴が全ての実施形態において必要とされることを示唆するつもりではなく、幾つかの実施形態においては含まれなくても良く、又は、他の複数の特徴と組み合わされてもよい。
【００１５】
ここで図１を参照すると、一実施形態において、仮想マルチパスリソースアクセス用のシステム１００は、ネットワーク１０６経由の通信において、多数のコンピューティングデバイス１０２を含む。作動中は、以下でより詳細に議論されるように、各コンピューティングデバイス１０２は、隔離された２つのコンピューテイングドメイン、ホストパーティション、及び、リカバリパーティションを確立すべく、プラットフォームファームウェアおよび／またはハードウェアを用いてもよい。ホストパーティションは、複数のホストアプリケーション、ホストオペレーティングシステム、および／または、仮想マシンモニタを実行し、システム１００の複数の他のコンピューティングデバイス１０２を通じて、複数の状態変化を非同期的にリモート状態データ１０４へと伝達する。ホストパーティションがクラッシュし、又は、非応答性となった場合、リカバリパーティションは、複数の他のコンピューティングデバイス１０２からの、ホスト状態データの複数の要求に応答する。リカバリパーティションは、メモリおよび／またはデータストレージなどの、ホストパーティションの複数のリソースにアクセスし、要求されたデータを複数のリモートコンピューティングデバイス１０２に返す。ホストパーティションおよびリカバリパーティションを隔離する複数の技術の、複数の特定の実施形態が、以下で更に説明される。複数のリモートコンピューティングデバイス１０２は、受信されたホスト状態データを用いて、リモート状態データ１０４を更新し、又は、複数の他のリカバリ操作を実行してもよい。例示的なシステム１００は多数のホモジニアスコンピューティングデバイス１０２を含む。但し、幾つかの実施形態において、システム１００は、複数の専用のバックアップ／高い利用可能性／障害復旧デバイスのような複数の他のデバイスを含んでもよい。
【００１６】
リカバリパーティションによってホスト状態データへの非同期アクセスを可能にすることで、システム１００は、通常のサーバハードウェアを用いた状態データへのオンデマンドマルチパスアクセスを可能にする。通常のハードウェアを用いることは、例えば複数のマルチポートメモリまたはデータストレージデバイスを含む比較的新奇なハードウェアと比較して、コストを低減し得る。これに加えて、オンデマンドマルチパスアクセスは、複数のコンピューティングデバイス１０２の各々が、リモート状態データ１０４を完全に同期することなく、複数のホストアプリケーションを処理し続けることを可能にする。従って、システム１００は、スケーラビリティおよび性能を高めたかもしれない。システム１００の堅牢性および／または正確性は、同期された複数のリモート状態更新情報を有する複数のシステムと比較して、大して変わらないかもしれない。なぜならば、コンピューティングデバイス１０２全体を無効にする複数のハードウェア障害は、ホストパーティションのみを無効にする複数のソフトウェア又は他の一時的障害と比べて、発生可能性が殆ど無いからである。更に、リカバリパーティションおよびホストパーティションを分離することは、リカバリパーティションが小さく信頼性があるものになることを可能にする。これは、システム１００の堅牢性を高め得る。
【００１７】
各コンピューティングデバイス１０２は、これらに限定されないが、コンピュータ、マルチプロセッサシステム、サーバ、ラックマウントサーバ、ブレードサーバ、ラップトップコンピュータ、ノートブックコンピュータ、ネットワーク電気機器、ウェブ電気機器、分散コンピューテイングシステム、プロセッサベースのシステム、および／または、消費者向け電子デバイスを含む、本明細書で説明される複数の機能を実行可能な任意のタイプのコンピューティングデバイスとして具現化されてもよい。図１に示されるように、コンピューティングデバイス１０２は、マルチコアプロセッサ１２０、入力／出力サブシステム１２４、メモリ１２６、データストレージデバイス１３０、及び、ネットワークインターフェース１３４を含む。勿論、複数の他の実施形態においては、コンピューティングデバイス１０２は、サーバデバイス（例えば様々な入力／出力デバイス）に一般に見られるもののような、他の又は追加の複数のコンポーネントを含んでもよい。幾つかの実施形態においては、これに加えて、例示的な複数のコンポーネントの１つ又は複数が、他のコンポーネントに組み込まれ、又はそうでなければその一部を形成してもよい。例えば、幾つかの実施形態において、メモリ１２６は、又はその複数の部分は、１つ又は複数のプロセッサ１２０に組み込まれてもよい。
【００１８】
プロセッサ１２０は、本明細書で説明される複数の機能を実行可能な任意のタイププロセッサとして具現化されてもよい。例示的なプロセッサ１２０は、マルチコアプロセッサである。但し、複数の他の実施形態においては、各プロセッサ１２０は、シングルコアプロセッサ若しくはマルチコアプロセッサ、デジタル信号プロセッサ、マイクロコントローラ、又は、他のプロセッサ若しくは処理／制御回路として具現化されてもよい。例示的なプロセッサ１２０は、各々が複数のプログラムされた命令を実行可能な独立の処理ユニットである４つのプロセッサコア１２２を含む。例示的なプロセッサ１２０は４つのプロセッサコア１２２ａから１１２ｄを含むが、複数の他の実施形態においては、プロセッサ１２０は、それより少ない又はそれより多い数のプロセッサコア１２２を含んでもよい。
【００１９】
メモリ１２６は、本明細書で説明される複数の機能を実行可能な、任意のタイプの揮発性又は不揮発性メモリまたはデータストレージとして具現化されてもよい。動作中、メモリ１２６は、複数のオペレーティングシステム、複数のアプリケーション、複数のプログラム、複数のライブラリおよび複数のドライバなどの、コンピューティングデバイス１０２の動作中に用いられる様々なデータおよびソフトウェアを格納してもよい。メモリ１２６はまた、以下で更に説明されるように、クラッシュした場合には、システム１００に亘って複製されてリカバーされ得るホスト状態１２８を格納してもよい。メモリ１２６は、コンピューティングデバイス１０２のプロセッサ１２０、メモリ１２６および複数の他のコンポーネントとの複数の入力／出力動作を容易にする回路および／または複数のコンポーネントとして具現化され得るＩ／Ｏサブシステム１２４を介して、プロセッサ１２０と通信可能に結合される。例えば、Ｉ／Ｏサブシステム１２４は、複数のメモリコントローラハブ、複数の入力／出力制御ハブ、複数のファームウェアデバイス、複数の通信リンク（すなわち、複数のポイントツーポイントリンク、複数のバスリンク、複数の有線、複数のケーブル、複数のライトガイド、複数のプリント回路基板トレース等）、および／または、複数の入力／出力動作を容易にする複数の他のコンポーネント並びにサブシステムとして具現化されてもよく、又はそうでなければこれらを含んでもよい。幾つかの実施形態において、Ｉ／Ｏサブシステム１２４は、システムオンチップ（ＳｏＣ）の一部を形成してもよく、コンピューティングデバイス１０２のプロセッサ１２０、メモリ１２６および複数の他のコンポーネントと共に、単一の集積回路チップに組み込まれてもよい。
【００２０】
データストレージデバイス１３０は、例えば、複数のメモリデバイス並びに回路、複数のメモリカード、複数のハードディスクドライブ、複数のソリッドステートドライブ、又は、複数の他のデータストレージデバイスなどの、データの短期間若しくは長期間保存用に構成された任意のタイプのデバイスまたは複数のデバイスとして具現化されてもよい。データストレージデバイス１３０は、以下で更に説明されるように、クラッシュした場合には、システム１００に亘って複製されてリカバーされ得るホスト状態１３２を格納してもよい。データストレージデバイス１３０のホスト状態１３２は、メモリ１２６のホスト状態１２８用のバッキングストア（例えばスワップ領域）として機能し、若しくはそうでなければそれをコピーし、又は、一意のものであってもよい。
【００２１】
コンピューティングデバイス１０２のネットワークインターフェース１３４は、ネットワーク１０６経由の、コンピューティングデバイス１０２および複数の他のリモートデバイスの間における複数の通信を実現可能な、任意の通信回路、デバイス、又は、それらの集合として具現化されてもよい。ネットワークインターフェース１３４は、そのような通信を達成する、任意の１つ又は複数の通信技術（例えば、有線または無線通信）、及び、複数の関連付けられたプロトコル（例えば、イーサネット（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｗｉ−Ｆｉ（登録商標）、ＷｉＭＡＸ（登録商標）等）を用いるように構成されてもよい。例示的なネットワークインターフェース１３４は、２つのポート１３６を含むイーサネット（登録商標）アダプタとして具現化される。複数のポート１３６ａ、１３６ｂの各々は、ネットワーク１０６経由の、複数のリモートホストへの独立アクセスを可能にし、複数のポート１３６は、互いから隔離され、パーティションされ、および／または、そうでなければ分離されてもよい。複数の他の実施形態においては、ネットワークインターフェース１３４は、少なくとも２つの仮想ネットワークインターフェースを有する仮想マシンデバイス・キューイネーブル・ネットワークインターフェースカードとして具現化されてもよく、一組の物理ネットワークアダプタとして具現化されてもよく、又は、ネットワーク１０６への隔離されたおよび／または独立したアクセスを可能にする任意の他のネットワークインターフェースとして具現化されてもよい。
【００２２】
リモート状態データ１０４は、システム１００の複数の異なるエンティティ間での状態の整合用に伝達される情報を格納する。これには、複数の分散アプリケーションの状態、複数のデータベース、複数の特定のコンピューティングデバイス１０２の状態１２８、１３２、又は、他の分散データが含まれる。リモート状態データ１０４は、システム１００用に整合状態を保持可能な、専用データベースサーバ、分散データストレージ、又は、任意の他のデータストレージシステムとして具現化されてもよい。そのように、リモート状態データ１０４の複数の部分またはその複数のコピーは、各コンピューティングデバイス１０２のデータストレージデバイス１３０および／またはメモリ１２６に格納されてもよい。リモート状態データ１０４は、リモート状態データ１０４が最終的に個々のコンピューティングデバイス１０２の状態に対応するように、非同期的に複製され又は更新されてもよい。
【００２３】
以下でより詳細に議論されるように、複数のコンピューティングデバイス１０２は、ネットワーク１０６経由で、互いと、リモート状態データ１０４と、および／または、システム１００の複数の他のデバイスと、データを送信および受信するように構成される。ネットワーク１０６は、任意の数の様々な有線ネットワークおよび／または無線ネットワークとして具現化されてもよい。例えば、ネットワーク１０６は、有線または無線ローカルエリアネットワーク（ＬＡＮ）、有線または無線広域エリアネットワーク（ＷＡＮ）、セルラーネットワーク、および／または、インターネットのような公衆アクセス可能なグローバルネットワークとして具現化されてもよく、又はそうでなければこれらを含んでもよい。そのように、ネットワーク１０６は、システム１００の複数のデバイス間の複数の通信を容易にすべく、追加の複数のコンピュータ、複数のルータ、及び、複数のスイッチなどの任意の数の追加デバイスを含んでもよい。
【００２４】
ここで図２を参照すると、例示的な実施形態において、コンピューティングデバイス１０２ａは、動作中に環境２００を確立する。例示的な環境２００は、分離モジュール２０２、ホストパーティション２０４、及び、リカバリパーティション２０６を含む。環境２００の様々なモジュールは、ハードウェア、ファームウェア、ソフトウェア、又は、それらの組み合わせとして具現化されてもよい。
【００２５】
分離モジュール２０２は、リカバリパーティション２０６をホストパーティション２０４から隔離するように構成される。複数のパーティション２０４、２０６を隔離することは、厳密な計算および／またはストレージ分離と、コンピューティングデバイス１０２ａのハードウェアおよび／またはファームウェアによって強制され得るアクセス制御とを確立し得る。従って、隔離は、ホストパーティション２０４および／またはリカバリパーティション２０６の間における、複数のリソースの無制御な共有を阻止する。但し、隔離は非対称であり、これは、リカバリパーティション２０６が、メモリ１２６および／またはデータストレージデバイス１３０の複数のセグメントを含むホストパーティション２０４の複数のリソースに、少なくとも読み取り専用でアクセスできることを意味している。分離モジュール２０２は、仮想マシンマネージャー（ＶＭＭ）またはオペレーティングシステムに頼ることなくコンピューティングデバイス１０２ａの複数のコンポーネントを隔離する、ハードウェア、プレブートファームウェア、又は、任意の他の技術を用いてもよい。従って、そのような低いレベルの隔離は、ＶＭＭおよび／またはオペレーティングシステム内での複数のソフトウェア障害を許容し得る。
【００２６】
ホストパーティション２０４は、コンピューティングデバイス１０２ａの複数のハードウェアリソースのサブセットに割り当てられる。例示的な実施形態において、ホストパーティション２０４は、ネットワークポート１３６ａおよび複数のプロセッサコア１２２ａ、１２２ｂ、１２２ｃに割り当てられている。従って、ホストパーティション２０４の何れのモジュールに対しても、コンピューティングデバイス１０２ａは、３コアプロセッサ１２０およびシングルポートネットワークインターフェース１３４を有するものとして表わされ、および／または、検出され得る。ホストパーティション２０４は更に、ＶＭＭ／ホストオペレーティングシステム２０８、状態更新モジュール２１０、ホスト状態インデックス２１２、及び、ホスト状態データ２１４を含む。勿論、複数の他の実施形態においては、他の又は追加のリソースが、ホストパーティション２０４に割り当てられてもよい。
【００２７】
ＶＭＭ／ホストオペレーティングシステム（ＯＳ）２０８は、アプリケーションワークロードがコンピューティングデバイス１０２ａ上で実行されることを可能にする、仮想マシンモニタ、ハイパーバイザ、汎用オペレーティングシステム、専用オペレーティングシステム、又は、他のコンポーネントとして具現化されてもよい。ＶＭＭ／ホストＯＳ２０８は、複数の計算を実行し、および／または、複数のサービスを提供すべく、多数の仮想マシンインスタンス、デーモン、サーバ処理、又は、任意の他のアプリケーションをホスティングし、および／または、それらを実行してもよい。例えば、ＶＭＭ／ホストＯＳ２０８は、顧客支払請求を処理するようなビジネスアプリケーションを提供する多数の仮想マシンをホスティングしてもよい。実行中に、ＶＭＭ／ホストＯＳ２０８、又は、その中でホスティングされる任意の複数のアプリケーションは、ホストパーティション２０４のホスト状態データ２１４に対する複数の変更を生成してもよい。
【００２８】
状態更新モジュール２１０は、ホスト状態インデックス２１２を管理してホスト状態データ２１４を更新するように構成される。状態更新モジュール２１０は、ホスト状態データ２１４を更新する前に、ホスト状態インデックス２１２内のホスト状態データ２１４に対する複数の更新情報のログを記録してもよい。幾つかの実施形態において、状態更新モジュール２１０は、複数のホスト状態更新情報を、１つ又は複数のリモートコンピューティングデバイス１０２に送信してもよい。例えば、状態更新モジュール２１０は、以下で説明されるように、複数のホスト状態更新情報を、１つ又は複数の高い利用可能性／障害復旧ピアコンピューティングデバイス１０２ｂに送信してもよい。従って、状態更新モジュール２１０は、ホスト状態インデックス２１２およびホスト状態データ２１４が、ホストパーティション２０４内において、整合状態で保有されていることを保証しており、システム１００の複数の他のコンピューティングデバイス１０２を更新すべくホスト状態データを送信してもよい。
【００２９】
ホスト状態データ２１４は、ＶＭＭ／ホストＯＳ２０８、又は、その中でホスティングされる任意の複数のアプリケーションの状態を、定義し、説明し、又はそうでなければそれに関係する、ホストパーティション２０４にアクセス可能な任意のデータを含む。例えば、ホスト状態データ２１４は、メモリ１２６内に格納されるホスト状態１２８、データストレージデバイス１３０内に格納されるホスト状態１３２、又は、それらのデータの任意の組み合わせを含んでもよい。幾つかの実施形態において、ホスト状態データ２１４は、生データを含んでもよい。追加的に又は代替的に、ホスト状態データ２１４は、論理アプリケーションデータを含んでもよい。例えば、ホスト状態データ２１４は、複数の変数、複数のデータ構造、複数のデータベース、複数のデータベースレコード、複数のファイル、複数の記憶ボリューム、又は、同様の複数のアプリケーションオブジェクトなどの、任意の数の指定されたアプリケーションオブジェクトの状態を定義し又は説明してもよい。ホスト状態インデックス２１２は、コンピューティングデバイス１０２ａがホスト状態データ２１４を通じてナビゲートし、そこからデータを取得することを可能にする、任意のデータ構造として具現化されてもよい。ホスト状態インデックス２１２は、複数のアプリケーションオブジェクト間の階層および複数の他の関係を説明してもよく、複数のアプリケーションオブジェクトの位置を、メモリ１２６および／またはデータストレージデバイス１３０に格納してもよい。ホスト状態インデックス２１２は、リカバリパーティション２０６を含む、コンピューティングデバイス１０２ａの全てのコンポーネントによって利用可能な態様でデータを格納する。例えば、ホスト状態インデックス２１２は、複数のアプリケーションオブジェクト識別子をメモリ１２６内の複数の仮想アドレスに関連付けるキー値マップとして具現化されてもよい。その例では、ホスト状態インデックス２１２は更に、複数の仮想アドレスをメモリ１２６内の複数の物理アドレスへと変換する複数のページ変換テーブルを含んでもよい。リカバリパーティション２０６は、コンピューティングデバイス１０２ａの複数のハードウェアリソースのサブセットに割り当てられる。例示的な実施形態において、リカバリパーティション２０６は、ネットワークポート１３６ｂおよびプロセッサコア１２２ｄに割り当てられている。従って、リカバリパーティション２０６の何れのモジュールに対しても、コンピューティングデバイス１０２ａは、シングルコアプロセッサ１２０およびシングルポートネットワークインターフェース１３４を有するものとして表わされ、および／または、検出され得る。リカバリパーティション２０６は更に、リカバリモジュール２１６を含む。勿論、複数の他の実施形態においては、他の又は追加のリソースが、リカバリパーティション２０６に割り当てられてもよい。
【００３０】
リカバリモジュール２１６は、リモートコンピューティングデバイス１０２（例えば図２のコンピューティングデバイス１０２ｂ）からホスト状態データ２１４の要求を受信し、要求されたホスト状態データ２１４を取得し、要求されたホスト状態データ２１４をリモートコンピューティングデバイス１０２へと返信するように構成される。幾つかの実施形態において、ホストパーティション２０４が応答性ではないことを高い利用可能性／障害復旧ピアコンピューティングデバイス１０２ｂが検出した後に、リカバリモジュール２１６は、そのコンピューティングデバイス１０２ｂから複数の要求を受信してもよい。上記で説明したように、リカバリモジュール２１６は、ホストパーティション２０４の状態に関わらず、要求されたホスト状態データ２１４を探し出すべくホスト状態インデックス２１２にアクセスしてもよい。
【００３１】
リカバリモジュール２１６は更に、リアルタイムオペレーティングシステム（ＲＴＯＳ）２１８を含んでもよく、又は、そのものとして具現化されてもよい。ＲＴＯＳ２１８は、堅牢で決定的な実行用に設計された簡単な実行環境として具現化されてもよい。例えば、ＲＴＯＳ２１８は、ＲＴＯＳ２１８の動作が検証可能な形で正しいものとなることを可能にし得る、有限状態オートマンアーキテクチャとして具現化されてもよい。従って、リカバリモジュール２１６の複数の機能は、分離されたリカバリパーティション２０６内で実行する、検証可能な形で正しいＲＴＯＳ２１８によって実行されてもよい。その全ては、コンピューティングデバイス１０２ａの堅牢性を高め得る。
【００３２】
更に図２を参照すると、例示的な実施形態において、コンピューティングデバイス１０２ａは、ネットワーク１０６経由で、高い利用可能性または障害復旧ピアとして動作するコンピューティングデバイス１０２ｂと通信していてもよい。コンピューティングデバイス１０２ｂは、動作中、環境２２０を確立してもよい。例示的な環境２２０は、状態同期モジュール２２２、ホスト監視モジュール２２４、及び、リカバリモジュール２２６を含む。環境２２０の様々なモジュールは、ハードウェア、ファームウェア、ソフトウェア、又は、それらの組み合わせとして具現化されてもよい。
【００３３】
状態同期モジュール２２２は、コンピューティングデバイス１０２ａから更新されたホスト状態データ２１４を受信するように構成される。状態同期モジュール２２２は、これらのホスト状態更新情報をリモート状態データ１０４に適用し、これにより、システム１００のリモート状態をコンピューティングデバイス１０２ａのローカル状態と同期してもよい。幾つかの実施形態において、状態同期モジュール２２２は、複数のホスト状態更新情報を、追加の複数のコンピューティングデバイス１０２に送信し、これにより、システム１００を通じて、ホスト状態データ２１４における複数の変化を伝達してもよい。ホスト監視モジュール２２４は、コンピューティングデバイス１０２ａを監視し、ホストパーティション２０４が応答性であるかどうかを決定するように構成される。ホストパーティション２０４は、ソフトウェアクラッシュ、ネットワーク障害、ハードウェア障害、電力損失、又は、他の障害を含む多数の条件に応じて、非応答性であってもよい。ホスト監視モジュール２２４は、ホストパーティション２０４からのハートビート信号を監視すること、ホストパーティション２０４からの最終通信に基づいてタイムアウトを確立すること、ホストパーティション２０４へと能動的にＰｉｎｇを打つこと、又は、複数の他の技術を含む、任意の利用可能な技術を用いて、ホストパーティション２０４を監視してもよい。
【００３４】
リカバリモジュール２２６は、ホストパーティション２０４が応答性ではないとホスト監視モジュール２２４が決定したことに応答して、ホスト状態データ２１４の要求をコンピューティングデバイス１０２ａのリカバリパーティション２０６に送信するように構成される。リカバリモジュール２２６は更に、リカバリパーティション２０６から要求されたホスト状態データ２１４を受信するように構成される。勿論、リカバリモジュール２２６は、リカバリパーティション２０６が動作可能なままである複数の条件下で、応答を受信するのみであろう。但し、（複数のソフトウェアクラッシュのような）多くの典型的な障害条件では、リカバリパーティション２０６は動作可能なままであり得る。幾つかの実施形態において、リカバリモジュール２２６は、ホスト状態データ２１４を受信した後に、リモート状態データ１０４を更新すること、又は、コンピューティングデバイス１０２ａ上または他のコンピューティングデバイス１０２上でホストパーティション２０４の複数のアプリケーションを再起動することなどの、１つ又は複数のリカバリ操作を実行してもよい。
【００３５】
ここで図３を参照すると、作動中は、コンピューティングデバイス１０２ａは、ホストパーティション２０４およびリカバリパーティション２０６を分離する方法３００を実行してもよい。方法３００は、ブロック３０２で開始し、ここでは、コンピューティングデバイス１０２ａが起動される。コンピューティングデバイス１０２ａは、デバイスへの電力供給に応答して、ハード若しくはソフトリセットに応答して、又は、コンピューティングデバイス１０２ａに処理を開始させる任意の他のイベントに応答して、起動されてもよい。コンピューティングデバイス１０２ａは、全てのハードウェアコンポーネントおよび周辺機器デバイスの完全制御を含む、コンピューティングデバイス１０２ａの完全制御を可能にするモードで起動されてもよい。例えば、コンピューティングデバイス１０２ａは、コンピューティングデバイス１０２ａの、任意のオペレーティングシステム、ハイパーバイザ、仮想マシンモニタ、又は、他の制御システムのブートより前に、ファームウェア実行環境で起動されてもよい。
【００３６】
ブロック３０４では、コンピューティングデバイス１０２ａは、ホストパーティション２０４およびリカバリパーティション２０６を隔離する。ホストパーティション２０４およびリカバリパーティション２０６を隔離することは、複数のプロセッサコア１２２、メモリ１２６、又は、データストレージ１３０などの、コンピューティングデバイス１０２ａの複数のハードウェアリソースへのアクセスを制御する。例えば、ホストパーティション２０４のＶＭＭ／ホストＯＳ２０８（又はＶＭＭ／ホストＯＳ２０８によって実行される複数のアプリケーション）は、特定のメモリ１２６または複数のプロセッサコア１２２にアクセスしてもよく、他のメモリ１２６または複数のプロセッサコア１２２へのアクセスを拒否されてもよい。複数のハードウェアリソースは、複数の異なるアクセス権を有する複数の異なるパーティション間で共有されてもよい。例えば、リカバリパーティション２０６は、ＶＭＭ／ホストＯＳ２０８によってアクセス可能なメモリ１２６の複数のセグメントへの、読み取り専用のアクセスを可能にされてもよい。幾つかの実施形態において、複数のパーティション２０４、２０６間の通信は、複数のファームウェアメールボックスまたはプロセス間通信などの制御された複数の通信チャネルによって実行されてもよい。複数のハードウェアリソースへの複数のアクセス制御は、プラットフォームファームウェアによって、又は、Ｉ／Ｏサブシステム１２４のようなハードウェアによって、強制されてもよい。従って、隔離後に、リカバリパーティション２０６は、ホストパーティション２０４のデータおよび／または複数の処理によって、危険に晒されないように、又はそうでなければそれらに干渉されないようにできる。対照的に、隔離後に、リカバリパーティション２０６は、ホストパーティション２０４の特定のデータおよび／または複数の処理への、少なくとも読み取り専用のアクセスが可能であってもよい。
【００３７】
ブロック３０６では、コンピューティングデバイス１０２ａは、ホストパーティション２０４およびリカバリパーティション２０６用に、複数の特定のプロセッサコア１２２を隔離してもよい。例えば、コンピューティングデバイス１０２ａは、ファームウェアにおける複数のプロセッサコア１２２を隔離してもよい。複数のプロセッサコア１２２を隔離することは、複数のプロセッサコア１２２の複数のサブセット間における、厳密に計算的に分離するパーティション（仮想パーティションではない。）を確立する。例えば、幾つかの実施形態において、プロセッサコア１２２ｄは、複数のプロセッサコア１２２ａ、１２２ｂ、１２２ｃから隔離されてもよい。その例では、ファームウェアは、コンピューティングデバイス１０２ａを、シングルコアプロセッサ１２０を有するものと見なすべく、プロセッサコア１２２ｄによって実行される複数の処理を可能にしてもよい。ファームウェアは、コンピューティングデバイス１０２ａを、３コアプロセッサ１２０を有するものと見なすべく、複数のプロセッサコア１２２ａ、１２２ｂ、１２２ｃによって実行される複数の処理を可能にしてもよい。コンピューティングデバイス１０２ａは、複数のプロセッサコア１２２のより小さなサブセットをリカバリパーティション２０６に割り当ててもよい。例えば、プロセッサコア１２２ｄは、リカバリパーティション２０６に割り当てられてもよく、複数のプロセッサコア１２２ａ、１２２ｂ、１２２ｃは、ホストパーティション２０４に割り当てられてもよい。コンピューティングデバイス１０２ａは、複数のプロセッサコア１２２に加えて、複数の物理プロセッサまたは複数のハードウェアスレッドなどの、厳密に分離可能な任意の処理リソースを同様に隔離してもよいことが理解されるべきである。
【００３８】
幾つかの実施形態において、ブロック３０８では、コンピューティングデバイス１０２ａは、ホストパーティション２０４およびリカバリパーティション２０６の間において、メモリ１２６を隔離してもよい。隔離後に、メモリ１２６は、ホストパーティション２０４およびリカバリパーティション２０６の間で非対称的に共有されてもよい。幾つかの実施形態において、ホストパーティション２０４は、リカバリパーティション２０６によって用いられるメモリのセグメントにアクセスすることを阻止されてもよく、その一方で、リカバリパーティション２０６は、ホストパーティション２０４によって用いられるメモリ１２６のセグメントへの読み取り専用のアクセスが可能であってもよい。メモリ１２６へのアクセスは、ファームウェア、複数のページテーブル、複数のメモリ管理ユニット、又は、任意の他のメモリアクセス制御メカニズムによって制御されてもよい。ここで図４を参照すると、ダイアグラム４００は、隔離後のメモリ１２６を示している。示されるように、メモリ１２６は、ホストセグメント４０２およびリカバリセグメント４０４へとパーティションされている。ホストパーティション２０４のＶＭＭ／ホストＯＳ２０８は、ホストセグメント４０２に完全にアクセス（すなわち、読み取り／書き込みアクセス）でき、リカバリセグメント４０４にはアクセスできない。リカバリパーティション２０６のリカバリモジュール２１６は、ホストセグメント４０２に読み取り専用でアクセスでき、リカバリセグメント４０４に完全にアクセスできる。ホストセグメント４０２は更に、ホスト状態インデックス２１２を含み得るサブセグメント４０６を含む。以下で更に説明されるように、リカバリモジュール２１６は、サブセグメント４０６にも読み取り専用でアクセスできる。
【００３９】
図３への参照に戻り、幾つかの実施形態において、ブロック３１０では、コンピューティングデバイス１０２ａは、ホストパーティション２０４およびリカバリパーティション２０６の間において、データストレージデバイス１３０を隔離してもよい。メモリ１２６をパーティションすることと同様に、隔離後、データストレージデバイス１３０は、ホストパーティション２０４およびリカバリパーティション２０６の間で非対称的に共有されてもよい。従って、データストレージデバイス１３０のセグメントは、ホストパーティション２０４にアクセス不可能であってもよく、その一方で、リカバリパーティション２０６は、データストレージデバイス１３０の全てに少なくとも読み取り専用でアクセスできてもよい。データストレージデバイス１３０の隔離は、データストレージデバイス１３０へのアクセスを制御する、ファームウェア、ボリュームパーティション、又は、任意の他のメカニズムによって強制されてもよい。
【００４０】
ホストパーティション２０４およびリカバリパーティション２０６を隔離した後、方法３００は、複数のブロック３１２、３１４へと同時に進む。ブロック３１２では、コンピューティングデバイス１０２ａはホストパーティション２０４を起動し、ブロック３１４では、コンピューティングデバイス１０２ａはリカバリパーティション２０６を起動する。複数のパーティション２０４、２０６の各々は、適切なファームウェアブート処理、オペレーティングシステムローダー、又は、パーティションを開始する他の方法を開始することによって、起動されてもよい。起動された後、複数のパーティション２０４、２０６の各々は、コンピューティングデバイス１０２ａが電力供給されなくなる又はリセットされるまで、駆動し続けてもよい。複数のパーティション２０４、２０６は、独立して実行する。従って、以下で更に説明されるように、複数のパーティション２０４、２０６の一方がクラッシュした又は危険に晒された状態は、他方のパーティションに影響しない。
【００４１】
ここで図５を参照すると、作動中、コンピューティングデバイス１０２ａは、ホスト状態データを更新する方法５００を実行してもよい。方法５００は、コンピューティングデバイス１０２ａのホストパーティション２０４を用いて実行される。例えば、方法５００は、複数のプロセッサコア１２２ａ、１２２ｂ、１２２ｃを用い、メモリ１２６のホストセグメント４０２（図４を参照）を参照して、実行されてもよい。方法５００は、ブロック５０２で開始する。ここでは、コンピューティングデバイス１０２ａは、ホスト起動イベントに応答する。ホスト起動イベントは、図３のブロック３１２に関連して上記で説明されたように、ホストパーティション２０４が最初に起動された際に生成されてもよい。追加的に又は代替的に、ホスト起動イベントは、ソフトウェア又はハードウェアリセットイベントに応答して生成されてもよい。幾つかの実施形態において、ホスト起動イベントは、クラウドコンピューティングコントローラ（図示せず）から受信されたホストインスタンスを開始するコマンドに応答して生成されてもよい。ブロック５０４では、コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２を初期化する。コンピューティングデバイス１０２ａは、ホストパーティション２０４の複数のアプリケーションオブジェクトを参照するホストナビゲーションマップを割り当て、初期化し、又はそうでなければそれをポピュレートしてもよい。追加的に又は代替的に、コンピューティングデバイス１０２ａは、コンピューティングデバイス１０２ａの複数の物理アドレスを、ホストパーティション２０４内で用いられる複数の仮想アドレスに変換する複数のページ変換テーブルを割り当て、初期化し、又はそうでなければそれをポピュレートしてもよい。コンピューティングデバイス１０２ａはまた、データストレージデバイス１３０用の複数の同様のデータ構造を初期化してもよい。追加的に、コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２を、リカバリパーティション２０６へとアクセス可能にしてもよい。幾つかの実施形態において、ブロック５０６では、コンピューティングデバイス１０２ａは、ホストナビゲーションマップおよび複数のページ変換テーブルの複数の物理アドレスをリカバリパーティション２０６に送信してもよい。ホストパーティション２０４は、ファームウェアメールボックスを通じて送信すること、又は、データを明確に定義された物理アドレスに配置することを含む、データをリカバリパーティション２０６に通信する任意の方法を用いてもよい。同様に、幾つかの実施形態において、ブロック５０８では、コンピューティングデバイス１０２ａは、ホストマップのデータストレージアドレスをリカバリパーティション２０６に送信してもよい。
【００４２】
ブロック５１０では、コンピューティングデバイス１０２ａは、ホストパーティション２０４内のアプリケーションを起動する。コンピューティングデバイス１０２ａは、システム１００と共に用いることが望まれる任意のアプリケーションを起動してもよい。例えば、コンピューティングデバイス１０２ａは、クラウドコンピューティングコントローラ（図示せず）によって指定される仮想イメージを立ち上げる。幾つかの実施形態において、コンピューティングデバイス１０２ａは、ＶＭＭ／ホストＯＳ２０８を起動してもよく、ＶＭＭ／ホストＯＳ２０８は、複数の特定のアプリケーションを順に起動して管理してもよい。アプリケーション、複数のアプリケーション、又は、ＶＭＭ／ホストＯＳ２０８は、方法５００を同時に実行し続ける。
【００４３】
ブロック５１２では、コンピューティングデバイス１０２ａは、ホスト状態更新情報用に、ホストパーティション２０４内のアプリケーションを監視する。ホスト状態更新情報は、アプリケーション、複数のアプリケーション、仮想マシン、オペレーティングシステム、又は、ホストパーティション２０４内で動作している任意の他のエンティティの状態における変化を含めた、ホストパーティション２０４の状態における任意の変化を含む。複数のホスト状態更新情報の監視は、能動的または受動的であってもよい。すなわち、能動的な監視は、耐久状態の修正を受ける、複数のメモリアドレス、複数のページアドレス、複数のディスクブロック、及び、複数のページテーブルエントリを登録すべく、全てのソフトウェア（例えばＶＭＭ／ホストオペレーティングシステム２０８および複数のアプリケーションレイヤー）に指定のライブラリプロシージャを呼び出させることによって、明示的に実行されてもよい。受動的な監視は、耐久状態を同様に含んでいる、複数のページアドレスまたは複数のディスクブロックアドレスをトラップしてログを記録するべく、ＶＭＭ／ホストオペレーティングシステム２０８の複数のページ保護技術を用いることによって実行されてもよい。従って、幾つかの実施形態において、ホスト状態更新情報は、メモリ１２６の一部に対する変更、又は、データストレージデバイス１３０に対する変更を含んでもよい。追加的に又は代替的に、幾つかの実施形態において、状態変化は、アプリケーションオブジェクトの論理状態への変化を含んでもよい。上記で説明されたように、コンピューティングデバイス１０２ａは、複数の状態変化用にポーリングすること、複数の状態変化をトラップすること、又は、複数の状態変化を受信するアプリケーションプログラミングインターフェース（ＡＰＩ）を確立することなどの、複数の状態変化を監視する任意の技術を用いてもよい。ブロック５１４では、コンピューティングデバイス１０２ａは、状態変化が検出されたかどうかを決定する。検出されていない場合、方法５００は、ブロック５１２に折り返し、複数の状態変化を監視し続ける。状態変化が検出された場合、方法５００はブロック５１６に進む。
【００４４】
ブロック５１６では、コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２へと状態更新情報のログを記録する。コンピューティングデバイス１０２ａは、状態変化を反映すべく、メタデータ、複数のオブジェクト名、複数のポインタ参照、又は、他のインデキシング情報を更新してもよい。幾つかの実施形態において、ホスト状態インデックス２１２は、状態更新が保留にされていることを反映すべく更新され、ホスト状態更新を完了する前にクラッシュした場合において、ホスト状態が整合したままであることを可能にしてもよい。幾つかの実施形態において、コンピューティングデバイス１０２ａは、ファイルシステムジャーナル又は同様のデータ構造を更新してもよい。
【００４５】
ブロック５１８では、コンピューティングデバイス１０２ａは、ホスト状態更新情報をリモートコンピューティングデバイス１０２ｂに送信する。コンピューティングデバイス１０２ａは、例えばポート１３６ａといった、隔離された又はそうでなければホストパーティション２０４に割り当てられたネットワークインターフェース１３４のポート１３６を用いて、ホスト状態データを送信してもよい。リモートコンピューティングデバイス１０２ｂは、システム１００の任意の他のコンピューティングデバイス１０２であってもよい。例示的な実施形態において、リモートコンピューティングデバイス１０２ｂは、リモート状態データ１０４へとホスト状態データ２１４をコピーすること又は複製することを管理する、高い利用可能性または障害復旧ピアとして具現化されてもよい。追加的に又は代替的に、リモートコンピューティングデバイス１０２ｂは、コンピューティングデバイス１０２ａ、クラウドコンピューティングコントローラ、又は、コンピューティングデバイス１０２ａの状態またはリモート状態データ１０４に頼る任意の他のコンピューティングデバイス１０２上で実行する１つ又は複数のアプリケーションに関して、クライアントまたはサーバであってもよい。幾つかの実施形態において、ブロック５２０では、コンピューティングデバイス１０２ａは、非同期伝送用に状態更新情報をキューに入れる。すなわち、コンピューティングデバイス１０２ａは、受信確認を受信すること、ハンドシェイク、又は、リモートコンピューティングデバイス１０２ｂによって状態更新情報が成功裏に受信されたことの他の指標を待たずに、状態更新情報をリモートコンピューティングデバイス１０２ｂに送信してもよい。状態更新情報を送信した後、方法はブロック５２２に進む。
【００４６】
ブロック５２２では、コンピューティングデバイス１０２ａは、ホスト状態データ２１４を更新する。ホスト状態データ２１４を更新した後、ローカル状態は、コンピューティングデバイス１０２ａ上でローカルに実行する任意の複数のアプリケーションに利用可能である。例えば、メモリ１２６またはデータストレージデバイス１３０は、ホスト状態データ２１４に対する複数の更新情報を含むべく、更新されてもよい。ホスト状態データ２１４を更新した後、方法５００は、ブロック５１２に折り返し、複数の状態更新情報を監視し続ける。
【００４７】
ブロック５２０への参照に戻り、幾つかの実施形態において、コンピューティングデバイス１０２ａは、非同期伝送用に状態更新情報をキューに入れてもよい。これらの実施形態において、方法５００は、ブロック５２４に進み、状態更新情報を送信してもよい。コンピューティングデバイス１０２ａは、新しいスレッドを生み出し、処理し、又は、状態更新情報を送信する任意の他の同時実行メカニズムを用いてもよい。ブロック５２４では、コンピューティングデバイス１０２ａは、状態更新情報をリモートコンピューティングデバイス１０２ｂに送信する。暫くの後、ブロック５２６では、コンピューティングデバイス１０２ａは、リモートコンピューティングデバイス１０２ｂから受信確認を受信する。受信確認は、リモートコンピューティングデバイス１０２ｂによって状態更新情報が成功裏に受信されたことを示す。ブロック５２８では、コンピューティングデバイス１０２ａは、受信確認を受信したことに応答して、ホスト状態インデックス２１２をトリミングしてもよい。コンピューティングデバイス１０２ａは、更新リストから状態更新情報を除去し、状態更新情報をメタデータに適用し、又はそうでなければ、状態更新情報がもはや未決定ではなくて成功裏に適用されたことを示すことによって、ホスト状態インデックス２１２をトリミングしてもよい。ホスト状態インデックス２１２をトリミングした後、方法５００の当分岐は完了されてもよい。状態更新情報は非同期的に送信されているので、ブロック５１２から５２２までのメインループに復帰すること、又はそうでなければそれらを更新することは、もはや必要無くてもよい。
【００４８】
ここで図６を参照すると、作動中は、コンピューティングデバイス１０２ａは、ホスト状態データ２１４をリカバーする方法６００を実行してもよい。方法６００は、コンピューティングデバイス１０２ａのリカバリパーティション２０６を用いて実行される。例えば、方法６００は、プロセッサコア１２２ｄを用い、メモリ１２６（図４を参照）のリカバリセグメント４０４からのコードを参照して、実行されてもよい。方法６００はブロック６０２で開始し、ここでは、コンピューティングデバイス１０２ａは、ホスト起動イベントに応答する。ホスト起動イベントは、図３のブロック３１４に関連して上記で説明されたように、リカバリパーティション２０６が最初に起動される際に生成されてもよい。追加的に又は代替的に、ホスト起動イベントは、ソフトウェア又はハードウェアリセットイベントに応答して生成されてもよい。幾つかの実施形態において、ホスト起動イベントは、クラウドコンピューティングコントローラ（図示せず）から受信されたホストインスタンスを開始するコマンドに応答して生成されてもよい。
【００４９】
ブロック６０４では、コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２の複数の初期状況を受信して格納する。複数の初期状況を受信して格納した後、コンピューティングデバイス１０２ａのリカバリパーティション２０６は、ホスト状態インデックス２１２にアクセスして、それを解析することが可能である。上記で説明されたように、ホスト状態インデックス２１２は、ホストパーティション２０４の複数のアプリケーションオブジェクトを参照するホストナビゲーションマップを含んでもよく、ホストパーティション２０４によって用いられる複数の仮想メモリアドレスとコンピューティングデバイス１０２ａの複数の物理アドレスとの間を変換する複数のページ変換テーブルを含んでもよい。幾つかの実施形態において、ホスト状態インデックス２１２は、データストレージデバイス１３０用に複数の同様のデータ構造を含んでもよい。幾つかの実施形態において、ブロック６０６では、コンピューティングデバイス１０２ａは、ホストナビゲーションマップおよび複数のページ変換テーブルの複数の物理アドレスを受信してもよい。複数の物理アドレスは、ファームウェアメールボックス、明確に定義された物理メモリアドレスでの共有メモリ、又は、任意の他の技術などの、情報共有用の任意の技術を用いて、ホストパーティション２０４からリカバリパーティション２０６に転送されてもよい。幾つかの実施形態において、ブロック６０８では、コンピューティングデバイス１０２ａは、データストレージデバイス１３０用にホストナビゲーションマップのデータストレージアドレスを受信してもよい。同様に、コンピューティングデバイス１０２ａは、ホストパーティション２０４からのデータストレージアドレスをリカバリパーティション２０６に共有する任意の利用可能な技術を用いてもよい。
【００５０】
ブロック６１０では、コンピューティングデバイス１０２ａは、リモートコンピューティングデバイス１０２ｂからのリカバリコマンド用に、ネットワークインターフェース１３４をポーリングする。コンピューティングデバイス１０２ａは、リカバリパーティション２０６のＲＴＯＳ２１８を用いてネットワークインターフェース１３４をポーリングしてもよい。リアルタイム環境でのポーリングは、割り込ベースのアプローチまたはマルチタスキングアプローチとは対照的に、コンピューティングデバイス１０２ａの動作が、予測可能であって検証可能な形で正しいものとなることを可能にする。コンピューティングデバイス１０２ａは、ポート１３６ｂのような、隔離された又はそうでなければリカバリパーティション２０６の専用にされた、ネットワークインターフェース１３４のポート１３６をポーリングしてもよい。専用ポートを用いることによって、コンピューティングデバイス１０２ａは、ホストパーティション２０４におけるソフトウェア障害に耐性があり得る独立ネットワークパスを可能にする。勿論、幾つかの実施形態において、コンピューティングデバイス１０２ａは、ホストパーティション２０４およびリカバリパーティション２０６の両方に対して、同じポート１３６および／またはネットワークインターフェース１３４を用いてもよい。
【００５１】
ブロック６１２では、コンピューティングデバイス１０２ａは、リカバリコマンドがリモートコンピューティングデバイス１０２ｂから受信されたかどうかを決定する。コマンドが１つも受信されていない場合、方法６００は、ブロック６１０に折り返し、複数のリカバリコマンド用にポーリングし続ける。リカバリコマンドが受信されている場合、方法６００はブロック６１４に進む。
【００５２】
ブロック６１４では、コンピューティングデバイス１０２ａは、リカバリパーティション２０６内からのホスト状態インデックス２１２にアクセスする。コンピューティングデバイス１０２ａは、リカバリパーティション２０６内からのホスト状態インデックス２１２を読み取り、コピーし、開き、又はそうでなければそれにアクセスしてもよい。ホスト状態インデックス２１２は、メモリ１２６、データストレージデバイス１３０、又は、これらのデバイスの任意の組み合わせに格納されてもよい。例えば、コンピューティングデバイス１０２ａは、メモリ１２６内のホスト状態インデックス２１２をアドレス指定すべく、ブロック６０４で受信されて格納されたホストナビゲーションマップおよび／または複数のページ変換テーブルの複数の物理メモリアドレスを用いてもよい。
【００５３】
ブロック６１６では、コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２を用いて、リカバリコマンドによって要求されたホスト状態データ２１４を取得する。リカバリコマンドは、取得すべく１つ又は複数のアプリケーションオブジェクトを指定してもよい。幾つかの実施形態において、リカバリコマンドは、メモリに基づくホスト状態データ２１４、又は、ホストパーティション２０４によって用いられる複数のデータアドレスおよび複数のオフセットを要求してもよい。コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２内の複数の要求されたアプリケーションオブジェクトをルックアップし、インデックス情報を用いて、ホスト状態データ２１４からの要求されたデータをコピーし、又はそうでなければそれを取得してもよい。幾つかの実施形態において、リカバリコマンドは単に、ホスト状態データ２１４の全てを要求してもよい。これらの実施形態において、コンピューティングデバイス１０２ａは単に、ホスト状態インデックス２１２内の各エントリを通じて反復し、要求されたホスト状態データ２１４を取得してもよい。
【００５４】
幾つかの実施形態において、ブロック６１８では、コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２のホストナビゲーションマップエントリおよびページ変換テーブルエントリに基づいて、コンピューティングデバイス１０２ａの物理メモリ１２６にアクセスしてもよい。例えば、コンピューティングデバイス１０２ａは、特有のアプリケーションオブジェクトと関連付けられたホスト状態データ２１４の要求を受信してもよい。コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２のホストナビゲーションマップ内のアプリケーションオブジェクトをルックアップし、ホストパーティション２０４によって用いられる仮想メモリアドレスを決定してもよい。コンピューティングデバイス１０２ａは、ページ変換テーブルにおける仮想メモリアドレスを順にルックアップし、メモリ１２６内の物理メモリアドレスを決定してもよい。コンピューティングデバイス１０２ａは、その物理アドレスでのデータをコピーすることによって、要求されたホスト状態データ２１４を取得してもよい。
【００５５】
追加的に又は代替的に、ブロック６２０では、コンピューティングデバイス１０２ａは、ホストナビゲーションマップに基づいて、コンピューティングデバイス１０２ａのデータストレージデバイス１３０にアクセスしてもよい。例えば、コンピューティングデバイス１０２ａは、特有のアプリケーションオブジェクトと関連付けられたホスト状態データ２１４の要求を受信してもよい。コンピューティングデバイス１０２ａは、ホスト状態インデックス２１２のホストナビゲーションマップ内のアプリケーションオブジェクトをルックアップし、ホストパーティション２０４によって用いられるストレージアドレスを決定してもよい。ストレージアドレスは、Ｉノード番号、論理ブロック番号、シリンダ‐ヘッド‐セクタ番号、又は、データストレージデバイス１３０からデータを取得するのに利用可能な他のアドレスとして具現化されてもよい。コンピューティングデバイス１０２ａは、そのストレージアドレスでのデータをコピーすることによって、要求されたホスト状態データ２１４を取得してもよい。
【００５６】
ブロック６２２では、コンピューティングデバイス１０２ａは、要求されたホスト状態データ２１４をリモートコンピューティングデバイス１０２ｂに送信する。コンピューティングデバイス１０２ａは、複数のメモリページまたは複数のデータストレージブロックなどの生データを送信してもよい。コンピューティングデバイス１０２ａは、ネットワークインターフェース１３４の隔離された又は専用のポート１３６を用いてデータを送信してもよい。要求されたホスト状態データ２１４を送信した後、方法６００はブロック６１０に折り返し、複数の追加リカバリコマンド用にポーリングし続ける。
【００５７】
ここで図７を参照すると、作動中は、リモートコンピューティングデバイス１０２ｂは、ホスト状態データ２１４を遠隔で受信してリカバーする方法７００を実行してもよい。方法７００はブロック７０２で開始し、ここでは、リモートコンピューティングデバイス１０２ｂは、コンピューティングデバイス１０２ａ上のホストパーティション２０４を監視し、それが応答性であるかどうかを決定する。ホストパーティション２０４は、ホストパーティション２０４のＶＭＭ／ホストＯＳ２０８、又は、任意の複数のアプリケーションの障害を含む、ハードウェア又はソフトウェア障害に起因して、非応答性になってもよい。リモートコンピューティングデバイス１０２ｂは、任意の方法を用いて、ホストパーティション２０４が応答性であるかどうかを決定してもよい。例えば、リモートコンピューティングデバイス１０２ｂは、ホストパーティション２０４から受信されたハートビート信号を監視し、ホストパーティション２０４から最終通信が受信されるまでタイマーを管理し、又は、例えばホストパーティションにＰｉｎｇを打つことによってホストパーティション２０４を能動的に探ってもよい。追加的に又は代替的に、例えば、ホストパーティション２０４がそのような外部支援を必要としていると自ら決定した場合に、ホストパーティション２０４は、自身がＶＭＭ／ホストオペレーティングシステム２０８を有することで非応答性として扱われるべきであること、又は、ホストパーティション２０４を非応答性として扱うようにせよとのメッセージを、リモートコンピューティングデバイス１０２ｂに対してアプリケーションが発行すべきであることを、自ら要求してもよい。ブロック７０４では、リモートコンピューティングデバイス１０２ｂは、ホストパーティション２０４が応答性であるかどうかを決定する。応答性ではない場合、方法７００は、以下で説明される、ブロック７１４へと分岐して進む。応答性である場合、方法７００はブロック７０６に進む。
【００５８】
ブロック７０６では、リモートコンピューティングデバイス１０２ｂは、更新されたホスト状態データ２１４がコンピューティングデバイス１０２ａ用に利用可能であるかどうかを決定する。リモートコンピューティングデバイス１０２ｂは、複数の状態更新情報を要求し、ホストパーティション２０４からの複数の接続を待機し、ホストパーティション２０４から複数のマルチキャスト状態更新情報を受信し、又は、任意の他の動作を実行してホスト状態更新情報を検出すべく、ホストパーティション２０４をポーリングしてもよい。ホスト状態更新情報が１つも利用可能ではない場合、方法７００はブロック７０２に折り返し、応答性用にホストパーティション２０４を監視し続ける。ホスト状態更新情報が利用可能である場合、方法７００はブロック７０８に進む。
【００５９】
ブロック７０８では、リモートコンピューティングデバイス１０２ｂは、ホストパーティション２０４から更新されたホスト状態データ２１４を受信する。リモートコンピューティングデバイス１０２ｂは、隔離された又はそうでなければホストパーティション２０４の専用にされた、コンピューティングデバイス１０２ａのポート１３６からホスト状態更新情報を受信してもよい。ホスト状態更新情報を受信した後、リモートコンピューティングデバイス１０２ｂは、ホストパーティション２０４および／またはシステム１００のアプリケーションによって必要とされる任意の動作を実行してもよい。例えば、例示的な実施形態において、リモートコンピューティングデバイス１０２ｂは、コンピューティングデバイス１０２ａの高い利用可能性／障害復旧ピアである。従って、リモートコンピューティングデバイス１０２ｂは、ホストパーティション２０４から受信された全てのホスト状態データ２１４を記録する。幾つかの実施形態において、ブロック７１０では、リモートコンピューティングデバイス１０２ｂは、更新されたホスト状態データ２１４をリモート状態データ１０４へと書き込む。上記で説明されたように、リモート状態データ１０４は、リモートコンピューティングデバイス１０２ｂによって格納され、又はそうでなければ、例えばクラウドストレージのように、リモートコンピューティングデバイス１０２ｂにアクセス可能であってもよい。幾つかの実施形態において、リモート状態データ１０４を書き込んだ後、ブロック７１２では、リモートコンピューティングデバイス１０２ｂは、受信確認をコンピューティングデバイス１０２ａのホストパーティション２０４に非同期的に送信する。ホスト状態更新情報を受信した後、方法７００はブロック７０２に折り返し、応答性用にホストパーティション２０４を監視し続ける。
【００６０】
ブロック７０４への参照に戻り、ホストパーティション２０４が応答性ではないとリモートコンピューティングデバイス１０２ｂが決定する場合、方法７００はブロック７１４へと分岐して進む。ブロック７１４では、リモートコンピューティングデバイス１０２ｂは、コンピューティングデバイス１０２ａのリカバリパーティション２０６からホスト状態データ２１４を要求する。リモートコンピューティングデバイス１０２ｂは、ホスト状態データ２１４を要求するリカバリコマンドを、隔離された又はそうでなければリカバリパーティション２０６の専用にされたネットワークポート１３６に送信してもよい。リモートコンピューティングデバイス１０２ｂにとっては、その隔離されたネットワークポート１３６は、ネットワーク１０６上の別個のホストのように見えてもよい。リモートコンピューティングデバイス１０２ｂは、ホスト状態データ２１４内で、複数の特有のアプリケーションオブジェクトまたはアドレスを要求してもよい。幾つかの実施形態において、ブロック７１６では、リモートコンピューティングデバイス１０２ｂは、複数の状態更新情報を必要とする複数のアプリケーションオブジェクトを要求してもよい。例えば、リモートコンピューティングデバイス１０２ｂは、ホストパーティションが非応答性になった際に能動的であったトランザクションに関する全てのアプリケーションオブジェクト用に、複数の状態更新情報を要求してもよい。幾つかの実施形態において、ブロック７１８では、リモートコンピューティングデバイス１０２ｂは、リカバリパーティション２０６から全てのホスト状態データ２１４を要求してもよい。
【００６１】
ブロック７２０では、リモートコンピューティングデバイス１０２ｂは、要求されたホスト状態データ２１４をコンピューティングデバイス１０２ａのリカバリパーティション２０６から受信する。受信されたホスト状態データ２１４は、コンピューティングデバイス１０２ａ上に格納されたホスト状態データ２１４の完全なコピー、又は、複数の要求されたアプリケーションオブジェクトに基づくホスト状態データ２１４のサブセットであってもよい。
【００６２】
ブロック７２２では、リモートコンピューティングデバイス１０２ｂは、受信されたホスト状態データ２１４に基づいてリカバリ操作を実行する。リモートコンピューティングデバイス１０２ｂは、任意のリカバリ操作を実行して、システム１００が、進んで、ホストパーティション２０４のソフトウェア障害からリカバリすることを可能にしてもよい。幾つかの実施形態において、ブロック７２４では、リモートコンピューティングデバイス１０２ｂは、受信されたホスト状態データ２１４をリモート状態データ１０４に書き込み、リモート状態データ１０４は、システム１００の複数のコンピューティングデバイス１０２の全ての間で順に複製されてもよい。リモート状態データ１０４を書き込むことは、システム１００の複数の他のコンピューティングデバイス１０２が、障害発生より前にホストパーティション２０４によってホスト状態データ２１４に作られた如何なる変更も見逃すことなく、通常に動作し続けることを可能にしてもよい。幾つかの実施形態において、ブロック７２６では、リモートコンピューティングデバイス１０２ｂは、ホストパーティション２０４のアプリケーションを再起動せよとのメッセージを送信してもよい。リモートコンピューティングデバイス１０２ｂは、そのメッセージをコンピューティングデバイス１０２ａおよび／またはホストパーティション２０４に直接送信してもよく、そのメッセージをリモートコンピューティングデバイス１０２ｂ上で確立されたホストパーティション２０４に内部で送信してもよく、又は、そのメッセージを、クラウドコンピューティングコントローラのような第３のコンピューティングデバイスに送信してもよい。アプリケーションを再起動することは、例えば、コンピューティングデバイス１０２ａを再起動させる、又は、ホストパーティション２０４並びに／若しくはその複数のアプリケーションとリカバリパーティション２０６とをリセットさせて通常動作を継続させるホスト起動イベントを、コンピューティングデバイス１０２ａに送信することによって実現されてもよい。更に、幾つかの実施形態において、リカバリパーティション２０６が要求されたホスト状態データ２１４を読み取った後に、リカバリパーティション２０６は、コンピューティングデバイス１０２ａに対し、自己診断及び自己修復モードに入る安全な再起動を実行するように指示してもよい。追加的に又は代替的に、アプリケーションを再起動することは、ホスト起動メッセージを、リモートコンピューティングデバイス１０２ｂまたは第３のコンピューティングデバイス１０２などの、システム１００の異なるコンピューティングデバイス１０２に送信することによって実現されてもよい。そのような複数の実施形態において、ホスト起動メッセージは、リカバリパーティション２０６から受信されたホスト状態データ２１４を含むリモート状態データ１０４を用いてアプリケーションを迅速に再起動することが可能である、「ホットスワップ」又は「フェールオーバ」コンピューティングデバイス１０２に送信されてもよい。従って、システム１００は、複数の障害から迅速にリカバリすることが可能であってもよい。リカバリ操作を実行した後に、方法７００はブロック７０２に折り返し、応答性用にコンピューティングデバイス１０２ａを監視し続ける。
【００６３】
例示的な方法７００は、ブロック７０６−７１２においてリモートホスト状態データ２１４をホストパーティション２０４からから受信することと、ブロック７０２−７０４、７１４−７２６において応答性用にホストパーティション２０４を監視してホスト状態データ２１４をリカバーすることとの両方を含むが、幾つかの実施形態においては、これらの機能は複数の処理によって実行されてもよいことが理解されるべきである。例えば、１つの処理は、応答性用にコンピューティングデバイス１０２ａを監視してもよく、その他の同時並行処理は、ホスト状態データ２１４をコンピューティングデバイス１０２ａから受信および／または要求することを管理してもよい。
【００６４】
［複数の例］
【００６５】
本明細書で開示される複数の技術の複数の例示的な例が以下で提供される。複数の技術の実施形態は、以下で説明される任意の１つ又は複数の例、及び、それらの任意の組み合わせを含んでもよい。
【００６６】
例１は、仮想マルチパス状態アクセスを提供するコンピューティングデバイスを含み、コンピューティングデバイスは、リカバリパーティションをホストパーティションから隔離する分離モジュールであり、ホストパーティションの１つ又は複数のリソースは、リカバリパーティションにアクセス可能である、分離モジュールと、リカバリパーティションによって確立されるリカバリモジュールとを備え、リカバリモジュールは、ホストパーティションのホスト状態データの要求をリモートコンピューティングデバイスから受信し、当該要求はホストパーティションが故障したことの指標であり、ホストパーティションによって保有されるホスト状態インデックスを用いて、当該要求によって要求されたホスト状態データを取得し、ホスト状態インデックスはホスト状態データの位置を識別し、要求されたホスト状態データをリモートコンピューティングデバイスに送信する。
【００６７】
例２は、例１の主題を含み、リカバリパーティションをホストパーティションから隔離することは、コンピューティングデバイスのメモリをホストメモリセグメントおよびリカバリメモリセグメントへとパーティションすることを含み、ホストメモリセグメントは、（ｉ）ホスト状態データおよびホスト状態インデックスを含み、（ｉｉ）リカバリパーティションにアクセス可能であり、リカバリメモリセグメントは、ホストパーティションにアクセス可能ではない。
【００６８】
例３は、例１および２の何れかの主題を含み、ホストパーティションは、ホストメモリセグメントにおけるホスト状態インデックスのベース物理アドレスを初期化するためのものであり、リカバリモジュールは更に、ホスト状態インデックスのベース物理アドレスを読み取るためのものである。
【００６９】
例４は、例１−３の何れかの主題を含み、ホスト状態データを取得することは、ホスト状態インデックスを用いてホストメモリセグメントの１つ又は複数のメモリページを取得することを含む。
【００７０】
例５は、例１−４の何れかの主題を含み、ホストパーティションは更に、ホストメモリセグメントにおけるページ変換テーブルのベース物理アドレスを初期化するためのものであり、リカバリモジュールは更に、ページ変換テーブルのベース物理アドレスを読み取るためのものであり、１つ又は複数のメモリページを取得することは、ホスト状態インデックスおよびページ変換テーブルを用いてホストメモリセグメントの１つ又は複数のメモリページを取得することを含む。
【００７１】
例６は、例１−５の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離することは、コンピューティングデバイスのデータストレージデバイスをホストデータパーティションへとパーティションすることを含み、ホストデータパーティションは、（ｉ）ホスト状態データおよびホスト状態インデックスを含み、（ｉｉ）リカバリパーティションにアクセス可能である。
【００７２】
例７は、例１−６の何れかの主題を含み、ホストパーティションは、ホストデータパーティションにおけるホスト状態インデックスのベースストレージアドレスを初期化するためのものであり、リカバリモジュールは、ホスト状態インデックスのベースストレージアドレスを読み取るためのものである。
【００７３】
例８は、例１−７の何れかの主題を含み、ホスト状態データを取得することは、ホスト状態インデックスを用いてホストデータパーティションの１つ又は複数のブロックを取得することを含む。
【００７４】
例９は、例１−８の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離することは、コンピューティングデバイスの複数のプロセッサコアのうちの１つのプロセッサコアをリカバリパーティションに隔離し、複数のプロセッサコアのうちの残余をホストパーティションに割り当てることを含み、隔離されたプロセッサコアは、ホストパーティションにアクセス不可能であり、複数のプロセッサコアのうちの残余は、リカバリパーティションにアクセス不可能である。
【００７５】
例１０は、例１−９の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離することは、リカバリパーティションにアクセス不可能な、コンピューティングデバイスの第１のネットワークインターフェースをホストパーティションに割り当て、ホストパーティションにアクセス不可能な、コンピューティングデバイスの第２のネットワークインターフェースをリカバリパーティションに割り当てることを含み、ホスト状態データの要求を受信することは、第２のネットワークインターフェースを用いてホスト状態データの要求を受信することを含む。
【００７６】
例１１は、例１−１０の何れかの主題を含み、ホストパーティションによって保有され、第１のネットワークインターフェースを用いてホスト状態データをリモートコンピューティングデバイスに送信する状態更新モジュールを更に含む。
【００７７】
例１２は、例１−１１の何れかの主題を含み、リカバリモジュールは更に、リカバリパーティションのリアルタイムオペレーティングシステムを用いて、ホスト状態データの要求用に、コンピューティングデバイスの第２のネットワークインターフェースをポーリングするためのものである。
【００７８】
例１３は、例１−１２の何れかの主題を含み、ホストパーティションによって保有され、（ｉ）ホスト状態インデックスにおいてホスト状態更新情報のログを記録し、（ｉｉ）ホスト状態更新情報に基づいてホストパーティションのホスト状態データを更新する、状態更新モジュールを更に含む。
【００７９】
例１４は、仮想マルチパス用のリモートコンピューティングデバイスを含み、リモートコンピューティングデバイスは、コンピューティングデバイスのホストパーティションからホスト状態データを受信する状態同期モジュールと、コンピューティングデバイスのホストパーティションが応答性であるかどうかを決定するホスト監視モジュールと、（ｉ）コンピューティングデバイスのホストパーティションが応答性ではないとの決定に応答して、コンピューティングデバイスのリカバリパーティションからホスト状態データの更新情報を要求し、（ｉｉ）要求に応答してリカバリパーティションから要求されたホスト状態データを受信するリカバリモジュールと、を備える。
【００８０】
例１５は、例１４の主題を含み、ホスト状態データの更新情報を要求することは、アプリケーションオブジェクトを要求することを含む。
【００８１】
例１６は、例１４および１５の何れかの主題を含み、ホスト状態データの更新情報を要求することは、リカバリパーティションから全てのホスト状態データを要求することを含む。
【００８２】
例１７は、例１４−１６の何れかの主題を含み、リカバリモジュールは更に、受信されたホスト状態データに基づいてリカバリ操作を実行するためのものである。
【００８３】
例１８は、例１４−１７の何れかの主題を含み、状態同期モジュールは更に、（ｉ）ホストパーティションからのホスト状態データをリモートコンピューティングデバイスのリモート状態データに格納し、（ｉｉ）リカバリパーティションから受信された、要求されたホスト状態データを用いてリモート状態データを更新するためのものであり、リカバリ操作を実行することは、リモート状態データを用いてリカバリ操作を実行することを含む。
【００８４】
例１９は、例１４−１８の何れかの主題を含み、リカバリ操作を実行することは、ホストパーティションを再起動することを含む。
【００８５】
例２０は、例１４−１９の何れかの主題を含み、ホストパーティションを再起動することは、コンピューティングデバイス上、リモートコンピューティングデバイス上、又は、第２のコンピューティングデバイス上でホストパーティションを再起動することを含む。
【００８６】
例２１は、仮想マルチパス状態アクセスを提供する方法を含み、当該方法は、コンピューティングデバイスが、リカバリパーティションをホストパーティションから隔離する段階であり、ホストパーティションの１つ又は複数のリソースはリカバリパーティションにアクセス可能である、段階と、コンピューティングデバイスのリカバリパーティションが、リモートコンピューティングデバイスからホストパーティションのホスト状態データの要求を受信する段階であり、当該要求は、ホストパーティションが故障したことを示している、段階と、コンピューティングデバイスのリカバリパーティションが、ホストパーティションによって保有されているホスト状態インデックスを用いて、当該要求によって要求されたホスト状態データを取得する段階であり、ホスト状態インデックスはホスト状態データの位置を識別する、段階と、コンピューティングデバイスのリカバリパーティションが、要求されたホスト状態データをリモートコンピューティングデバイスに送信する段階とを含む。
【００８７】
例２２は、例２１の主題を含み、リカバリパーティションをホストパーティションから隔離する段階は、コンピューティングデバイスのメモリをホストメモリセグメントおよびリカバリメモリセグメントへとパーティションする段階を含み、ホストメモリセグメントは、（ｉ）ホスト状態データおよびホスト状態インデックスを含み、（ｉｉ）リカバリパーティションにアクセス可能であり、リカバリメモリセグメントは、ホストパーティションにアクセス可能ではない。
【００８８】
例２３は、例２１および２２の何れかの主題を含み、コンピューティングデバイスのホストパーティションが、ホストメモリセグメントにおけるホスト状態インデックスのベース物理アドレスを初期化する段階と、コンピューティングデバイスのリカバリパーティションが、ホスト状態インデックスのベース物理アドレスを読み取る段階とを更に含む。
【００８９】
例２４は、例２１−２３の何れかの主題を含み、ホスト状態データを取得する段階は、ホスト状態インデックスを用いてホストメモリセグメントの１つ又は複数のメモリページを取得する段階を含む。
【００９０】
例２５は、例２１−２４の何れかの主題を含み、コンピューティングデバイスのホストパーティションが、ホストメモリセグメントにおけるページ変換テーブルのベース物理アドレスを初期化する段階と、コンピューティングデバイスのリカバリパーティションが、ページ変換テーブルのベース物理アドレスを読み取る段階とを更に含み、１つ又は複数のメモリページを取得する段階は、ホスト状態インデックスおよびページ変換テーブルを用いてホストメモリセグメントの１つ又は複数のメモリページを取得する段階を含む。
【００９１】
例２６は、例２１−２５の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離する段階は、コンピューティングデバイスのデータストレージデバイスをホストデータパーティションへとパーティションする段階を含み、ホストデータパーティションは、（ｉ）ホスト状態データおよびホスト状態インデックスを含み、（ｉｉ）リカバリパーティションにアクセス可能である。
【００９２】
例２７は、例２１−２６の何れかの主題を含み、コンピューティングデバイスのホストパーティションが、ホストデータパーティションにおけるホスト状態インデックスのベースストレージアドレスを初期化する段階と、コンピューティングデバイスのリカバリパーティションが、ホスト状態インデックスのベースストレージアドレスを読み取る段階とを更に含む。
【００９３】
例２８は、例２１−２７の何れかの主題を含み、ホスト状態データを取得する段階は、ホスト状態インデックスを用いてホストデータパーティションの１つ又は複数のブロックを取得する段階を含む。
【００９４】
例２９は、例２１−２８の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離する段階は、コンピューティングデバイスの複数のプロセッサコアのうちの１つのプロセッサコアをリカバリパーティションに隔離する段階と、複数のプロセッサコアのうちの残余をホストパーティションに割り当てる段階とを含み、隔離されたプロセッサコアは、ホストパーティションにアクセス不可能であり、複数のプロセッサコアのうちの残余は、リカバリパーティションにアクセス不可能である。
【００９５】
例３０は、例２１−２９の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離する段階は、リカバリパーティションにアクセス不可能な、コンピューティングデバイスの第１のネットワークインターフェースをホストパーティションに割り当てる段階と、ホストパーティションにアクセス不可能な、コンピューティングデバイスの第２のネットワークインターフェースをリカバリパーティションに割り当てる段階とを含み、ホスト状態データの要求を受信する段階は、第２のネットワークインターフェースを用いてホスト状態データの要求を受信する段階を含む。
【００９６】
例３１は、例２１−３０の何れかの主題を含み、コンピューティングデバイスのホストパーティションが、第１のネットワークインターフェースを用いてホスト状態データをリモートコンピューティングデバイスに送信する段階を更に含む。
【００９７】
例３２は、例２１−３１の何れかの主題を含み、コンピューティングデバイスのリカバリパーティションが、リカバリパーティションのリアルタイムオペレーティングシステムを用いて、ホスト状態データの要求用に、コンピューティングデバイスの第２のネットワークインターフェースをポーリングする段階を更に含む。
【００９８】
例３３は、例２１−３２の何れかの主題を含み、コンピューティングデバイスのホストパーティションが、ホストパーティションのホスト状態インデックスにおいてホスト状態更新情報のログを記録する段階と、コンピューティングデバイスのホストパーティションが、ホスト状態更新情報に基づいてホストパーティションのホスト状態データを更新する段階とを更に含む。
【００９９】
例３４は、仮想マルチパス用の方法を含み、当該方法は、リモートコンピューティングデバイスが、コンピューティングデバイスのホストパーティションからホスト状態データを受信する段階と、リモートコンピューティングデバイスが、コンピューティングデバイスのホストパーティションが応答性であるかどうかを決定する段階と、リモートコンピューティングデバイスが、コンピューティングデバイスのホストパーティションが応答性ではないとの決定に応答して、コンピューティングデバイスのリカバリパーティションからホスト状態データの更新情報を要求する段階と、リモートコンピューティングデバイスが、当該要求に応答して、リカバリパーティションから要求されたホスト状態データを受信する段階とを含む。
【０１００】
例３５は、例３４の主題を含み、ホスト状態データの更新情報を要求する段階は、アプリケーションオブジェクトを要求する段階を含む。
【０１０１】
例３６は、例３４および３５の何れかの主題を含み、ホスト状態データの更新情報を要求する段階は、リカバリパーティションから全てのホスト状態データを要求する段階を含む。
【０１０２】
例３７は、例３４−３６の何れかの主題を含み、リモートコンピューティングデバイスが、受信されたホスト状態データに基づいてリカバリ操作を実行する段階を更に含む。
【０１０３】
例３８は、例３４−３７の何れかの主題を含み、リモートコンピューティングデバイスが、ホストパーティションからのホスト状態データをリモートコンピューティングデバイスのリモート状態データに格納する段階と、リモートコンピューティングデバイスが、リカバリパーティションから受信されたホスト状態データの更新情報を用いてリモート状態データを更新する段階とを更に含み、リカバリ操作を実行する段階は、リモート状態データを用いてリカバリ操作を実行する段階を含む。
【０１０４】
例３９は、例３４−３８の何れかの主題を含み、リカバリ操作を実行する段階は、ホストパーティションを再起動する段階を含む。
【０１０５】
例４０は、例３４−３９の何れかの主題を含み、ホストパーティションを再起動する段階は、コンピューティングデバイス上、リモートコンピューティングデバイス上、又は、第２のコンピューティングデバイス上でホストパーティションを再起動する段階を含む。
【０１０６】
例４１は、コンピューティングデバイスを含み、コンピューティングデバイスは、プロセッサと、プロセッサが実行した場合に、コンピューティングデバイスに例２１−４０の何れかの方法を実行させる複数の命令が格納されたメモリとを備える。
【０１０７】
例４２は、実行されたことに応答してコンピューティングデバイスが例２１−４０の何れかの方法を実行することになる複数の命令を格納されて備える、１つ又は複数の機械可読記憶媒体を含む。
【０１０８】
例４３は、例２１−４０の何れかの方法を実行する手段を備えるコンピューティングデバイスを含む。
【０１０９】
例４４は、仮想マルチパス状態アクセスを提供するコンピューティングデバイスを含み、コンピューティングデバイスは、リカバリパーティションをホストパーティションから隔離する手段であり、ホストパーティションの１つ又は複数のリソースがリカバリパーティションにアクセス可能である、手段と、リカバリパーティションが、リモートコンピューティングデバイスからホストパーティションのホスト状態データの要求を受信する手段であり、当該要求はホストパーティションが故障したことを示す、手段と、リカバリパーティションが、ホストパーティションによって保有されるホスト状態インデックスを用いて、当該要求によって要求されたホスト状態データを取得する手段であり、ホスト状態インデックスはホスト状態データの位置を識別する、手段と、リカバリパーティションが、要求されたホスト状態データをリモートコンピューティングデバイスに送信する手段とを備える。
【０１１０】
例４５は、例４４の主題を含み、リカバリパーティションをホストパーティションから隔離する手段は、コンピューティングデバイスのメモリをホストメモリセグメントおよびリカバリメモリセグメントへとパーティションする手段を含み、ホストメモリセグメントは、（ｉ）ホスト状態データおよびホスト状態インデックスを含み、（ｉｉ）リカバリパーティションにアクセス可能であり、リカバリメモリセグメントは、ホストパーティションにアクセス可能ではない。
【０１１１】
例４６は、例４４および４５の何れかの主題を含み、ホストパーティションが、ホストメモリセグメントにおいてホスト状態インデックスのベース物理アドレスを初期化する手段と、リカバリパーティションが、ホスト状態インデックスのベース物理アドレスを読み取る手段とを更に含む。
【０１１２】
例４７は、例４４−４６の何れかの主題を含み、ホスト状態データを取得する手段は、ホスト状態インデックスを用いてホストメモリセグメントの１つ又は複数のメモリページを取得する手段を含む。
【０１１３】
例４８は、例４４−４７の何れかの主題を含み、ホストパーティションが、ホストメモリセグメントにおいてページ変換テーブルのベース物理アドレスを初期化する手段と、リカバリパーティションが、ページ変換テーブルのベース物理アドレスを読み取る手段とを更に含み、１つ又は複数のメモリページを取得する手段は、ホスト状態インデックスおよびページ変換テーブルを用いてホストメモリセグメントの１つ又は複数のメモリページを取得する手段を含む。
【０１１４】
例４９は、例４４−４８の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離する手段は、コンピューティングデバイスのデータストレージデバイスをホストデータパーティションへとパーティションする手段を含み、ホストデータパーティションは、（ｉ）ホスト状態データおよびホスト状態インデックスを含み、（ｉｉ）リカバリパーティションにアクセス可能である。
【０１１５】
例５０は、例４４−４９の何れかの主題を含み、ホストパーティションが、ホストデータパーティションにおいてホスト状態インデックスのベースストレージアドレスを初期化する手段と、リカバリパーティションが、ホスト状態インデックスのベースストレージアドレスを読み取る手段とを更に含む。
【０１１６】
例５１は、例４４−５０の何れかの主題を含み、ホスト状態データを取得する手段は、ホスト状態インデックスを用いてホストデータパーティションの１つ又は複数のブロックを取得する手段を含む。
【０１１７】
例５２は、例４４−５１の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離する手段は、コンピューティングデバイスの複数のプロセッサコアのうちの１つのプロセッサコアをリカバリパーティションに隔離する手段と、複数のプロセッサコアのうちの残余をホストパーティションに割り当てる手段とを含み、隔離されたプロセッサコアは、ホストパーティションにアクセス不可能であり、複数のプロセッサコアのうちの残余は、リカバリパーティションにアクセス不可能である。
【０１１８】
例５３は、例４４−５２の何れかの主題を含み、リカバリパーティションをホストパーティションから隔離する手段は、リカバリパーティションにアクセス不可能な、コンピューティングデバイスの第１のネットワークインターフェースをホストパーティションに割り当てる手段と、ホストパーティションにアクセス不可能な、コンピューティングデバイスの第２のネットワークインターフェースをリカバリパーティションに割り当てる手段とを含み、ホスト状態データの要求を受信する手段は、第２のネットワークインターフェースを用いてホスト状態データの要求を受信する手段を含む。
【０１１９】
例５４は、例４４−５３の何れかの主題を含み、ホストパーティションが、第１のネットワークインターフェースを用いてホスト状態データをリモートコンピューティングデバイスに送信する手段を更に含む。
【０１２０】
例５５は、例４４−５４の何れかの主題を含み、リカバリパーティションが、リカバリパーティションのリアルタイムオペレーティングシステムを用いて、ホスト状態データの要求用に、コンピューティングデバイスの第２のネットワークインターフェースをポーリングする手段を更に含む。
【０１２１】
例５６は、例４４−５５の何れかの主題を含み、ホストパーティションが、ホストパーティションのホスト状態インデックスにおいてホスト状態更新情報のログを記録する手段と、ホストパーティションが、ホスト状態更新情報に基づいて、ホストパーティションのホスト状態データを更新する手段とを更に含む。
【０１２２】
例５７は、仮想マルチパス用のリモートコンピューティングデバイスを含み、リモートコンピューティングデバイスは、ホスト状態データをコンピューティングデバイスのホストパーティションから受信する手段と、コンピューティングデバイスのホストパーティションが応答性であるかどうかを決定する手段と、コンピューティングデバイスのホストパーティションが応答性ではないとの決定に応答して、コンピューティングデバイスのリカバリパーティションからホスト状態データの更新情報を要求する手段と、当該要求に応答して、リカバリパーティションから要求されたホスト状態データを受信する手段と、を備える。
【０１２３】
例５８は、例５７の主題を含み、ホスト状態データの更新情報を要求する手段は、アプリケーションオブジェクトを要求する手段を含む。
【０１２４】
例５９は、例５７および５８の何れかの主題を含み、ホスト状態データの更新情報を要求する手段は、リカバリパーティションから全てのホスト状態データを要求する手段を含む。
【０１２５】
例６０は、例５７−５９の何れかの主題を含み、受信されたホスト状態データに基づいてリカバリ操作を実行する手段を更に含む。
【０１２６】
例６１は、例５７−６０の何れかの主題を含み、ホストパーティションからのホスト状態データをリモートコンピューティングデバイスのリモート状態データに格納する手段と、リカバリパーティションから受信されたホスト状態データの更新情報を用いてリモート状態データを更新する手段とを更に含み、リカバリ操作を実行する手段は、リモート状態データを用いてリカバリ操作を実行する手段を含む。
【０１２７】
例６２は、例５７−６１の何れかの主題を含み、リカバリ操作を実行する手段は、ホストパーティションを再起動する手段を含む。
【０１２８】
例６３は、例５７−６２の何れかの主題を含み、ホストパーティションを再起動する手段は、コンピューティングデバイス上、リモートコンピューティングデバイス上、又は、第２のコンピューティングデバイス上でホストパーティションを再起動する手段を含む。
【図１】
2017504083.tif 000003
【図２】
2017504083.tif 000004
【図３】
2017504083.tif 000005
【図４】
2017504083.tif 000006
【図５】
2017504083.tif 000007
【図６】
2017504083.tif 000008
【図７】
2017504083.tif 000009
【手続補正書】
【提出日】平成28年6月7日(2016.6.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
仮想マルチパス状態アクセスを提供するコンピューティングデバイスであって、
リカバリパーティションをホストパーティションから隔離する分離モジュールであり、前記ホストパーティションの１つ又は複数のリソースは、前記リカバリパーティションにアクセス可能である、分離モジュールと、
前記リカバリパーティションによって確立されるリカバリモジュールと
を備え、
前記リカバリモジュールは、
前記ホストパーティションのホスト状態データの要求をリモートコンピューティングデバイスから受信し、前記要求は前記ホストパーティションが失敗したことの指標であり、
前記ホストパーティションによって保有されるホスト状態インデックスを用いて、前記要求によって要求された前記ホスト状態データを取得し、前記ホスト状態インデックスは前記ホスト状態データの位置を識別し、
前記要求されたホスト状態データを前記リモートコンピューティングデバイスに送信する、
コンピューティングデバイス。
【請求項２】
前記リカバリパーティションを前記ホストパーティションから隔離することは、前記コンピューティングデバイスのメモリをホストメモリセグメントおよびリカバリメモリセグメントへとパーティションすることを含み、
前記ホストメモリセグメントは、（ｉ）前記ホスト状態データおよび前記ホスト状態インデックスを含み、（ｉｉ）前記リカバリパーティションにアクセス可能であり、
前記リカバリメモリセグメントは、前記ホストパーティションにアクセス可能ではない、
請求項１に記載のコンピューティングデバイス。
【請求項３】
前記ホストパーティションは、前記ホストメモリセグメントにおける前記ホスト状態インデックスのベース物理アドレスを初期化するためのものであり、
前記リカバリモジュールは更に、前記ホスト状態インデックスの前記ベース物理アドレスを読み取るためのものである、
請求項２に記載のコンピューティングデバイス。
【請求項４】
前記ホストパーティションは更に、前記ホストメモリセグメントにおけるページ変換テーブルのベース物理アドレスを初期化するためのものであり、
前記リカバリモジュールは更に、前記ページ変換テーブルの前記ベース物理アドレスを読み取るためのものであり、
前記ホスト状態データを取得することは、前記ホスト状態インデックスおよび前記ページ変換テーブルを用いて前記ホストメモリセグメントの１つ又は複数のメモリページを取得することを含む、
請求項３に記載のコンピューティングデバイス。
【請求項５】
前記リカバリパーティションを前記ホストパーティションから隔離することは、前記コンピューティングデバイスのデータストレージデバイスをホストデータパーティションへとパーティションすることを含み、
前記ホストデータパーティションは、（ｉ）前記ホスト状態データおよび前記ホスト状態インデックスを含み、（ｉｉ）前記リカバリパーティションにアクセス可能である、
請求項１に記載のコンピューティングデバイス。
【請求項６】
前記ホストパーティションは、前記ホストデータパーティションにおける前記ホスト状態インデックスのベースストレージアドレスを初期化するためのものであり、
前記リカバリモジュールは、前記ホスト状態インデックスの前記ベースストレージアドレスを読み取るためのものである、
請求項５に記載のコンピューティングデバイス。
【請求項７】
前記リカバリパーティションを前記ホストパーティションから隔離することは、
前記コンピューティングデバイスの複数のプロセッサコアのうちの１つのプロセッサコアをリカバリパーティションに隔離し、
前記複数のプロセッサコアのうちの残余を前記ホストパーティションに割り当てることを含み、
前記隔離されたプロセッサコアは、前記ホストパーティションにアクセス不可能であり、前記複数のプロセッサコアのうちの前記残余は、前記リカバリパーティションにアクセス不可能である、
請求項１から６の何れか一項に記載のコンピューティングデバイス。
【請求項８】
前記リカバリパーティションを前記ホストパーティションから隔離することは、
前記リカバリパーティションにアクセス不可能な、前記コンピューティングデバイスの第１のネットワークインターフェースを前記ホストパーティションに割り当て、
前記ホストパーティションにアクセス不可能な、前記コンピューティングデバイスの第２のネットワークインターフェースを前記リカバリパーティションに割り当てることを含み、
前記ホスト状態データの前記要求を受信することは、前記第２のネットワークインターフェースを用いて前記ホスト状態データの前記要求を受信することを含む、
請求項１から６の何れか一項に記載のコンピューティングデバイス。
【請求項９】
前記リカバリモジュールは更に、前記リカバリパーティションのリアルタイムオペレーティングシステムを用いて、前記ホスト状態データの前記要求用に、前記コンピューティングデバイスの前記第２のネットワークインターフェースをポーリングするためのものである、
請求項８に記載のコンピューティングデバイス。
【請求項１０】
前記ホストパーティションによって保有され、（ｉ）前記ホスト状態インデックスにおいてホスト状態更新情報のログを記録し、（ｉｉ）前記ホスト状態更新情報に基づいて前記ホストパーティションの前記ホスト状態データを更新する、状態更新モジュールを更に備える、
請求項１から６の何れか一項に記載のコンピューティングデバイス。
【請求項１１】
仮想マルチパス用のリモートコンピューティングデバイスであって、
コンピューティングデバイスのホストパーティションからホスト状態データを受信する状態同期モジュールと、
前記コンピューティングデバイスの前記ホストパーティションが応答性であるかどうかを決定するホスト監視モジュールと、
（ｉ）前記コンピューティングデバイスの前記ホストパーティションが応答性ではないとの決定に応答して、前記コンピューティングデバイスのリカバリパーティションから前記ホスト状態データの更新情報を要求し、（ｉｉ）前記要求に応答して前記リカバリパーティションから前記要求されたホスト状態データを受信するリカバリモジュールと
を備えるリモートコンピューティングデバイス。
【請求項１２】
前記リカバリモジュールは更に、前記受信されたホスト状態データに基づいてリカバリ操作を実行するためのものである、
請求項１１に記載のリモートコンピューティングデバイス。
【請求項１３】
前記状態同期モジュールは更に、（ｉ）前記ホストパーティションからの前記ホスト状態データを前記リモートコンピューティングデバイスのリモート状態データに格納し、（ｉｉ）前記リカバリパーティションから受信された前記要求されたホスト状態データを用いて前記リモート状態データを更新するためのものであり、
前記リカバリ操作を実行することは、前記リモート状態データを用いて前記リカバリ操作を実行することを含む、
請求項１２に記載のリモートコンピューティングデバイス。
【請求項１４】
前記リカバリ操作を実行することは、前記ホストパーティションを再起動することを含む、
請求項１２に記載のリモートコンピューティングデバイス。
【請求項１５】
前記ホストパーティションを再起動することは、前記コンピューティングデバイス上、前記リモートコンピューティングデバイス上、又は、第２のコンピューティングデバイス上で前記ホストパーティションを再起動することを含む、
請求項１４に記載のリモートコンピューティングデバイス。
【請求項１６】
仮想マルチパス状態アクセスを提供する方法であり、
コンピューティングデバイスが、リカバリパーティションをホストパーティションから隔離する段階であり、前記ホストパーティションの１つ又は複数のリソースは前記リカバリパーティションにアクセス可能である、段階と、
前記コンピューティングデバイスの前記リカバリパーティションが、リモートコンピューティングデバイスから前記ホストパーティションのホスト状態データの要求を受信する段階であり、前記要求は、前記ホストパーティションが失敗したことを示している、段階と、
前記コンピューティングデバイスの前記リカバリパーティションが、前記ホストパーティションによって保有されているホスト状態インデックスを用いて、前記要求によって要求された前記ホスト状態データを取得する段階であり、前記ホスト状態インデックスは前記ホスト状態データの位置を識別する、段階と、
前記コンピューティングデバイスの前記リカバリパーティションが、前記要求されたホスト状態データを前記リモートコンピューティングデバイスに送信する段階と
を含む方法。
【請求項１７】
前記リカバリパーティションを前記ホストパーティションから隔離する段階は、前記コンピューティングデバイスのメモリをホストメモリセグメントおよびリカバリメモリセグメントへとパーティショニングする段階を含み、
前記ホストメモリセグメントは、（ｉ）前記ホスト状態データおよび前記ホスト状態インデックスを含み、（ｉｉ）前記リカバリパーティションにアクセス可能であり、
前記リカバリメモリセグメントは、前記ホストパーティションにアクセス可能ではない、
請求項１６に記載の方法。
【請求項１８】
前記リカバリパーティションを前記ホストパーティションから隔離する段階は、
前記コンピューティングデバイスの複数のプロセッサコアのうちの１つのプロセッサコアを前記リカバリパーティションに隔離する段階と、
前記複数のプロセッサコアのうちの残余を前記ホストパーティションに割り当てる段階と
を含み、
前記隔離されたプロセッサコアは、前記ホストパーティションにアクセス不可能であり、前記複数のプロセッサコアのうちの前記残余は、前記リカバリパーティションにアクセス不可能である、
請求項１６に記載の方法。
【請求項１９】
前記リカバリパーティションを前記ホストパーティションから隔離する段階は、
前記コンピューティングデバイスの第１のネットワークインターフェースを前記ホストパーティションに割り当てる段階であり、前記第１のネットワークインターフェースは前記リカバリパーティションにアクセス不可能である、段階と、
前記コンピューティングデバイスの第２のネットワークインターフェースを前記リカバリパーティションに割り当てる段階であり、前記第２のネットワークインターフェースは前記ホストパーティションにアクセス不可能である、段階と
を含み、
前記ホスト状態データの前記要求を受信する段階は、前記第２のネットワークインターフェースを用いて前記ホスト状態データの前記要求を受信する段階を含む、
請求項１６に記載の方法。
【請求項２０】
仮想マルチパス用の方法であり、
リモートコンピューティングデバイスが、コンピューティングデバイスのホストパーティションからホスト状態データを受信する段階と、
前記リモートコンピューティングデバイスが、前記コンピューティングデバイスの前記ホストパーティションが応答性であるかどうかを決定する段階と、
前記リモートコンピューティングデバイスが、前記コンピューティングデバイスの前記ホストパーティションが応答性ではないとの決定に応答して、前記コンピューティングデバイスのリカバリパーティションから前記ホスト状態データの更新情報を要求する段階と、
前記リモートコンピューティングデバイスが、前記要求に応答して、前記リカバリパーティションから前記要求されたホスト状態データを受信する段階と
を含む方法。
【請求項２１】
前記リモートコンピューティングデバイスが、前記受信されたホスト状態データに基づいてリカバリ操作を実行する段階を更に含む、
請求項２０に記載の方法。
【請求項２２】
前記リモートコンピューティングデバイスが、前記ホストパーティションからの前記ホスト状態データを前記リモートコンピューティングデバイスのリモート状態データに格納する段階と、
前記リモートコンピューティングデバイスが、前記リカバリパーティションから受信された前記ホスト状態データの前記更新情報を用いて前記リモート状態データを更新する段階と
を更に含み、
前記リカバリ操作を実行する段階は、前記リモート状態データを用いて前記リカバリ操作を実行する段階を含む、
請求項２１に記載の方法。
【請求項２３】
プロセッサと、
前記プロセッサが実行した場合に、前記コンピューティングデバイスに請求項１６から２２の何れか一項に記載の方法を実行させる複数の命令が格納されたメモリと
を備えるコンピューティングデバイス。
【請求項２４】
コンピューティングデバイスに、請求項１６から２２のいずれか一項に記載の方法を実行させるプログラム。
【請求項２５】
請求項２４に記載のプログラムを格納する１つ又は複数の機械可読記録媒体。
【請求項２６】
請求項１６から２２の何れか一項に記載の方法を実行する手段を備えるコンピューティングデバイス。
【国際調査報告】
2017504083.tif 000010
2017504083.tif 000011