(57)【要約】【課題】データセンタ及び他のバックアップ環境において符号化を使用するための方法及び装置が本明細書で開示されている。【解決手段】一実施形態では、複数のマシンのメモリ状態を１組の１つ又は複数のバックアップノード上に同期させるための方法は、事前に符号化された変更を１つ又は複数のバックアップノードの各々において受信するステップであって、事前に符号化された変更が、複数のマシンの各１つ又は複数についてのメモリ状態に対する変更を事前に符号化することによって生成されるステップと、複数のマシンの２つ以上にわたって、事前に符号化された変更を符号化することによって、符号化されたメモリ状態を生成するステップとを含む。【選択図】図１３
2012033169.tif 000002
【特許請求の範囲】
【請求項１】
複数のマシンのメモリ状態を１組の１つ又は複数のバックアップノード上に同期させるための方法であって、
事前に符号化された変更を前記１つ又は複数のバックアップノードの各々において受信するステップであって、事前に符号化された変更が、前記複数のマシンの各１つ又は複数についての前記メモリ状態に対する変更を事前に符号化することによって生成されるステップと、
前記複数のマシンの２つ以上にわたって、前記事前に符号化された変更を符号化することによって、符号化されたメモリ状態を生成するステップと、
を含む方法。
【請求項２】
前記複数のマシンの前記１つ又は複数についての前記メモリ状態に対する、前記事前に符号化された変更が、各マシンのメモリ状態に対する更新と、前記各マシンの前記メモリ状態の直前のバージョンとに基づいて計算される、請求項１に記載の方法。
【請求項３】
各マシンの前記メモリ状態に対する前記更新と、前記各マシンの前記メモリ状態の前記直前のバージョンとの間のビット毎の排他的ＯＲ（ＸＯＲ）演算を実行して、前記事前に符号化された変更を生成するステップと、
前記事前に符号化された変更を前記１つ又は複数のバックアップノードの各々に送信するステップと、
をさらに含む、請求項１に記載の方法。
【請求項４】
前記事前に符号化された変更を符号化することによって、前記符号化されたメモリ状態を生成するステップが、前記１つ又は複数のバックアップノードの前記各々において行われる、請求項１に記載の方法。
【請求項５】
前記符号化されたメモリ状態を生成するステップが、
前記複数のマシンのうちの異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行するサブステップ
を含む、請求項４に記載の方法。
【請求項６】
１つの物理ロケーションに配置された前記バックアップノードの１つにおいて、前記複数のマシンの１つについてのメモリ状態を、前記１つのマシンが故障した場合に、復旧するステップと、
その後、前記物理ロケーションにおいて、前記復旧されたメモリ状態を用いて、仮想マシンを活動化するステップと、
をさらに含む、請求項５に記載の方法。
【請求項７】
１つの物理ロケーションに配置された前記バックアップノードの１つにおいて、前記複数のマシンの１つについてのメモリ状態を、前記１つのマシンが故障した場合に、復旧されたメモリ状態のサブセットを復号することによって復旧するステップと、
その後、復旧されたメモリ状態の前記サブセットを用いて、仮想マシンを活動化するステップと、
をさらに含む、請求項１に記載の方法。
【請求項８】
前記符号化されたメモリ状態を生成するステップが、
前記複数のマシンと前記１つ又は複数のバックアップノードとの間に通信可能に結合された仲介ノードにおいて、ネットワーク符号化を実行するサブステップであって、前記複数のマシンのうちの異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することを含むサブステップを含み、
前記方法が、前記符号化されたメモリ状態を前記１つ又は複数のバックアップノードに送信するステップをさらに含む、
請求項１に記載の方法。
【請求項９】
前記１つ又は複数のバックアップノードの１つにおいて、前記複数のマシンのうちの故障した１つについての１つ又は複数のメモリ状態を、
前記複数のマシンのうちの故障していない異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、前記仲介ノードにおいて、ネットワーク符号化を実行して、新しい符号化されたメモリ状態を生成し、
前記新しい符号化されたメモリ状態を前記１つ又は複数のバックアップノードのうちの少なくとも１つに送信し、
前記新しい符号化されたメモリ状態と、前記少なくとも１つのバックアップノードに以前に記憶された符号化されたメモリ状態との間のビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、故障した前記マシンのメモリページを生成する
ことによって復旧するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
前記マシンが、仮想マシン又は物理マシンである、請求項１に記載の方法。
【請求項１１】
１組の１つ又は複数のバックアップノードに通信可能に結合された複数のマシンを備え、
前記複数のマシンが、事前に符号化された変更を生成し、前記１つ又は複数のバックアップノードの各々に送信し、複数のマシンが、前記複数のマシンの各１つ又は複数についての前記メモリ状態に対する変更を事前に符号化することによって、事前に符号化された変更を生成し、
さらに、前記１組のうちの少なくとも１つのバックアップノードが、前記複数のマシンの２つ以上にわたって、前記事前に符号化された変更を符号化することによって、符号化されたメモリ状態を生成する、
ネットワーク環境。
【請求項１２】
少なくとも１つのマシンが、各マシンのメモリ状態に対する更新と、前記各マシンの前記メモリ状態の直前のバージョンとに基づいて、前記複数のマシンの前記１つ又は複数についての前記メモリ状態に対する、前記事前に符号化された変更を計算する、請求項１１に記載のネットワーク環境。
【請求項１３】
前記複数のマシンのうちの少なくとも１つのマシンが、前記１つのマシンの前記メモリ状態に対する前記更新と、前記１つのマシンの前記メモリ状態の前記直前のバージョンとの間のビット毎の排他的ＯＲ（ＸＯＲ）演算を実行して、前記事前に符号化された変更を生成し、その後、前記事前に符号化された変更を前記１つ又は複数のバックアップノードの各々に送信する、請求項１１に記載のネットワーク環境。
【請求項１４】
前記１組のうちの少なくとも１つのバックアップノードが、前記事前に符号化された変更を符号化することによって、前記符号化されたメモリ状態を生成し、この生成が、前記１つ又は複数のバックアップノードの前記各々において行われる、請求項１１に記載のネットワーク環境。
【請求項１５】
前記少なくとも１つのバックアップノードが、前記複数のマシンのうちの異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、前記符号化されたメモリ状態を生成する、請求項１４に記載のネットワーク環境。
【請求項１６】
前記１組のうちの前記バックアップノードの前記少なくとも１つが、１つの物理ロケーションに配置され、前記複数のマシンの１つについてのメモリ状態を、前記１つのマシンが故障した場合に、復旧し、その後、前記物理ロケーションにおいて、前記復旧されたメモリ状態を用いて、仮想マシンを活動化する、請求項１５に記載のネットワーク環境。
【請求項１７】
１つ又は複数の仲介ノードを介して、１組の１つ又は複数のバックアップノードに通信可能に結合された複数のマシンを備え、
前記複数のマシンが、事前に符号化された変更を生成し、前記１つ又は複数のバックアップノードの各々に送信し、複数のマシンが、前記複数のマシンの各１つ又は複数についての前記メモリ状態に対する変更を事前に符号化することによって、事前に符号化された変更を生成し、
さらに、前記仲介ノードの少なくとも１つが、前記複数のマシンのうちの異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することを含むネットワーク符号化を実行することによって、符号化されたメモリ状態を生成し、前記符号化されたメモリ状態を前記１つ又は複数のバックアップノードに送信する、
ネットワーク環境。
【請求項１８】
前記１つ又は複数のバックアップノードのうちの１つが、前記複数のマシンのうちの故障した１つのマシンについての１つ又は複数のメモリ状態を、新しい符号化されたメモリデータを使用し、前記新しい符号化されたメモリ状態と、前記少なくとも１つのバックアップノードに以前に記憶された符号化されたメモリ状態との間のビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、故障した前記マシンのメモリページを生成することによって復旧し、さらに、前記新しい符号化されたメモリデータが、前記複数のマシンのうちの故障していない異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、新しい符号化されたメモリ状態を生成した前記仲介ノードの１つから受信される、請求項１７に記載のネットワーク環境。
【請求項１９】
前記マシンが、仮想マシン又は物理マシンである、請求項１７に記載のネットワーク環境。
【請求項２０】
システムによって実行された場合に、複数のマシンのメモリ状態を１組の１つ又は複数のバックアップノード上に同期させるための方法を前記システムに実行させる命令が記憶された、１つ又は複数の非一時的なコンピュータ可読記憶媒体を有する製造物品であって、前記方法が、
事前に符号化された変更を前記１つ又は複数のバックアップノードの各々において受信するステップであって、事前に符号化された変更が、前記複数のマシンの各１つ又は複数についての前記メモリ状態に対する変更を事前に符号化することによって生成されるステップと、
前記複数のマシンの２つ以上にわたって、前記事前に符号化された変更を符号化することによって、符号化されたメモリ状態を生成するステップと、
を含む、製造物品。
【請求項２１】
前記方法が、
各マシンの前記メモリ状態に対する更新と、前記各マシンの前記メモリ状態の直前のバージョンとの間のビット毎の排他的ＯＲ（ＸＯＲ）演算を実行して、前記事前に符号化された変更を生成するステップと、
前記事前に符号化された変更を前記１つ又は複数のバックアップノードの各々に送信するステップと、
をさらに含む、請求項２０に記載の製造物品。
【請求項２２】
前記符号化されたメモリ状態を生成するステップが、前記複数のマシンのうちの異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行するサブステップを含む、請求項２０に記載の製造物品。
【請求項２３】
前記符号化されたメモリ状態を生成するステップが、前記複数のマシンと前記１つ又は複数のバックアップノードとの間に通信可能に結合された仲介ノードにおいて、ネットワーク符号化を実行するサブステップであって、前記複数のマシンのうちの異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することを含むサブステップを含み、
前記方法が、前記符号化されたメモリ状態を前記１つ又は複数のバックアップノードに送信するステップをさらに含む、
請求項２０に記載の製造物品。
【請求項２４】
前記方法が、前記１つ又は複数のバックアップノードの１つにおいて、前記複数のマシンのうちの故障した１つについての１つ又は複数のメモリ状態を、
前記複数のマシンのうちの故障していない異なるマシンのメモリページにわたって、ビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、前記仲介ノードにおいて、ネットワーク符号化を実行して、新しい符号化されたメモリ状態を生成し、
前記新しい符号化されたメモリ状態を前記１つ又は複数のバックアップノードのうちの少なくとも１つに送信し、
前記新しい符号化されたメモリ状態と、前記少なくとも１つのバックアップノードに以前に記憶された符号化されたメモリ状態との間のビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、故障した前記マシンのメモリページを生成する
ことによって復旧するステップをさらに含む、請求項２３に記載の製造物品。
【発明の詳細な説明】
【技術分野】
【０００１】
（優先権）
[0001]本特許出願は、対応する、２０１０年７月２９日に出願された「Ａ  Ｍｅｔｈｏｄ  ｔｏ  Ｐｒｏｖｉｄｅ  Ｌｉｖｅ  Ｃｈｅｃｋ−Ｐｏｉｎｔｉｎｇ  ｆｏｒ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ  Ｕｓｉｎｇ  Ｌｉｎｅａｒ  Ｃｏｄｉｎｇ」と題する特許仮出願第６１／３６９０２８号、及び２０１０年７月２９日に出願された「Ａ  Ｍｅｔｈｏｄ  ｔｏ  Ｍｉｎｉｍｉｚｅ  ｔｈｅ  Ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ａｎｄ  Ｒｅｃｏｖｅｒｙ  Ｂａｎｄｗｉｄｔｈ  ｏｆ  ａ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ  Ｂａｃｋ−Ｕｐ  Ｓｙｓｔｅｍ」と題する特許仮出願第６１／３６９０３０号の優先権を主張し、これらの特許仮出願を参照することにより組み込む。
【０００２】
（発明の分野）
[0002]本発明は、物理マシン及び／又は仮想マシンを含む、バックアップストレージを使用するデータセンタ及びシステムの信頼性、並びにそれらの同期の分野に関し、より詳細には、本発明は、仮想ネットワーク、分散システムにおけるフォールトトレランス、及びインフラストラクチャ仮想化に関する。
【０００３】
（発明の背景）
[0003]信頼性は、今日のデータセンタの重要な特徴である。必要な信頼性を獲得するため、これらのデータセンタは、しばしばバックアップを使用する。既存の技術は、各サーバ専用のバックアップを有することによって、又はいくつかのバックアップをバックアップノードのより大量のメモリ上に多重化することによって、信頼性を提供する（例えば、ＲＥＭＵＳは、各ＶＭのレプリカのために十分なメモリを含むバックアップノード上の、いくつかのＶＭの信頼性を提供する）。
【０００４】
[0004]信頼性の高い通信及びディスク信頼性では、パケットロスから復旧するために、線形符号化を通信ネットワークにおいて使用する。しかし、ＶＭ故障に対する防御は、システム要件及び必要とされるオペレーションステップの観点から、パケットロスに対する防御とは同じではない。ディスク又はデータ信頼性では、符号化は、フォールトトレランス目的で、例えばＲＡＩＤレベル５及び６システム上で使用される。しかし、ＲＡＩＤでは、符号化されたデータ（パリティ）は、バックアップの際、ディスク書き込みのたびに再計算され、その複雑な計算のせいで、しばしば性能低下を引き起こす。
【０００５】
[0005]信頼性は、複数のマシン上のメモリ状態を同期させることによってしばしば達成され、同期は、マシン間でデータを送信することによって達成される。しかし、仮想マシンの信頼性のための同期帯域幅（ｓｙｎｃｈｒｏｎｉｚａｔｉｏｎ  ｂａｎｄｗｉｄｔｈ）は、コストがかかる。ＲＥＭＵＳのようなシステムは、仮想マシンの状態とそのレプリカの状態を同期させて維持するために、数Ｍｂｐｓのデータストリームを生成することができる。
【０００６】
[0006]既存の技術は、更新レートを制限することによって、同期帯域幅を制限しようと試みる。更新レートが低すぎる場合、バックアップノードにおける状態情報は時に陳腐化することがあるので、これは都合が悪いが、さもなければ、同期帯域幅（したがってネットワーク利用に及ぼす負の影響）が、かなり高いものになる。
【０００７】
[0007]分散ストレージの分野における別の関連技術は、再生成符号の２つのクラスであり、すなわち、ＭＳＲ（最小ストレージ再生成（ｍｉｎｉｍｕｍ  ｓｔｏｒａｇｅ  ｒｅｇｅｎｅｒａｔｉｎｇ））符号、及びＭＢＲ（最小帯域幅再生成（ｍｉｎｉｍｕｍ  ｂａｎｄｗｉｄｔｈ  ｒｅｇｅｎｅｒａｔｉｎｇ））符号である。これらの符号は、１つのバックアップノードが故障した場合に使用されて、修復帯域幅（ｒｅｐａｉｒ  ｂａｎｄｗｉｄｔｈ）を最低限に抑える。そのような場合、ネットワークトポロジは、無視され、符号化は、プライマリノード及びバックアップノードのみで実行される。さらに、ＭＳＲ符号は、ｎ＞ｋである場合に、プライマリノードの正確な修復を実行できるにすぎない。ＭＢＲ符号は、プライマリノードに、オリジナルデータの代わりに符号化されたメモリを記憶するよう要求する。さらに、符号化されたメモリのサイズは、オリジナルデータよりも常に大きい。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、物理マシン及び／又は仮想マシンを含む、バックアップストレージを使用するデータセンタ及びシステムの信頼性、並びにそれらの同期の分野に関し、より詳細には、本発明は、仮想ネットワーク、分散システムにおけるフォールトトレランス、及びインフラストラクチャ仮想化に関する。
【課題を解決するための手段】
【０００９】
[0008]データセンタ及び他のバックアップ環境において符号化を使用するための方法及び装置が、本明細書で開示される。一実施形態では、複数のマシンのメモリ状態を１組の１つ又は複数のバックアップノード上に同期させるための方法は、事前に符号化された変更を１つ又は複数のバックアップノードの各々において受信するステップであって、複数のマシンの各１つ又は複数についてのメモリ状態に対する変更を事前に符号化することによって、事前に符号化された変更が生成されるステップと、複数のマシンの２つ以上にわたって、事前に符号化された変更を符号化することによって、符号化されたメモリ状態を生成するステップとを含む。
【発明の効果】
【００１０】
本発明の実施形態の１つの利点は、本発明が、ちょうど適正な数のプライマリノードの間でバックアップリソースを共用することによって、適切な量のリソースを使用して、特定のレベルの信頼性（例えば９９．９９％の稼働時間）を提供することを可能にすることである。別の利点は、本明細書で説明される技法を使用して、異なる仮想サーバの信頼性を独自のバックアップノード上に多重化することによって、事業者は、効率的でコスト効果のよい方式で、仮想サーバを運営するアプリケーションプロバイダに信頼性を提供することができるので、事業者がサービスとして信頼性を提供することを可能にすることである。
【図面の簡単な説明】
【００１１】
[0009]本発明は、以下で与えられる詳細な説明から、また本発明の様々な実施形態についての添付の図面から、より十分に理解されるが、そのような図面は、本発明を特定の実施形態に限定するものと解釈されるべきではなく、説明及び理解のためのものにすぎない。
【図１】メモリ書き込みプロセス、及び、パリティノードにおいて符号化を更新するためのプロセスの、データフロー図の一実施形態を示す図である。
【図２】プライマリノードとして４つの仮想マシン（ＶＭ）を、またパリティノードとして２つの物理マシン（ＰＭ）を、用いて例示的に示された、故障検出後の復旧ステージを表すデータフロー図の一実施形態を示す図である。
【図３】本発明の一実施形態のネットワーク符号化プロセスを説明する同期例を示す図である。
【図４】本発明の一実施形態の復旧プロセスを説明する復旧例を示す図である。
【図５】バックアップが１つの場合にソースＶＭのメモリページにわたって符号化を行うためのアルゴリズムの一実施形態を示す図である。
【図６】（Ａ）及び（Ｂ）図５のアルゴリズムの例を示す図である。
【図７】図５のアルゴリズムの解法を示す図である。
【図８】ツリー及び複数のバックアップノードの、別のアルゴリズムの一実施形態を示す図である。
【図９】図８のアルゴリズムのｅｖａｌＡｌｌＳｕｂＴｒｅｅｓプロシージャの一実施形態を示す図である。
【図１０】図８のアルゴリズムのｇｅｔＭｉｎＳｅｔＲａｔｅプロシージャの一実施形態を示す図である。
【図１１】仲介ルータにおいて使用するためのアップリンクプロシージャの一実施形態を示す図である。
【図１２】仲介ルータによって使用するためのダウンリンクプロシージャの一実施形態を示す図である。
【図１３】複数のマシンのメモリ状態を１組の１つ又は複数のバックアップノード上に同期させるためのプロセスの一実施形態を示す図である。
【図１４】ネットワーク符号化を使用して、複数の異なる符号化を複数の異なるバックアップノード上に記憶する一例を示す図である。
【発明を実施するための形態】
【００１２】
（本発明の詳細な説明）
[0010]本発明の実施形態は、複数のライブ（すなわち実際に動作中の）マシンを１組のバックアップノード上に同期させる方法を含み、その結果、バックアップノードの数が削減される。一実施形態では、これは、ライブマシンにわたってメモリ状態を符号化し、線形独立な符号化を各バックアップノードに記憶することによって達成される。一般性を失うことなく、本開示の残りの部分は、もっぱら仮想マシンの観点から本発明を開示するが、本明細書で説明される技法は、仮想マシン及び物理マシンの両方に適用される。
【００１３】
[0011]開示される本発明の実施形態は、ライブチェックポインティング（ｌｉｖｅ  ｃｈｅｃｋｐｏｉｎｔｉｎｇ）のために、すべての仮想マシン（ＶＭ）にわたって非同期及び分散方式で行うことができる高速な符号化方式及び復号方式を提供する。アベイラビリティを高めるためにライブチェックポインティングを提供するこれらの既存のシステムとは対照的に、本発明の実施形態は、バックアップロケーションにおけるメモリフットプリント（ｍｅｍｏｒｙ  ｆｏｏｔｐｒｉｎｔ）を削減する。この利点は、プライマリノード故障が、バックアップノードに記憶された符号化されたメモリ状態からメモリを復旧するステージを必要とするため、アベイラビリティの減少という犠牲を払って実現される。
【００１４】
[0012]本発明の実施形態は、ネットワーク符号化（ｎｅｔｗｏｒｋ  ｃｏｄｉｎｇ）を使用することによって、ネットワークにおける同期帯域幅の量を削減するための機構を含む。本発明の実施形態は、ｎ個の複数のプライマリノードを任意の個数ｋのバックアップノード上に記憶することを可能にするネットワーク符号化を提供するために、ネットワーク符号（ｎｅｔｗｏｒｋ  ｃｏｄｅ）を計算する。個数ｋは、信頼性要件及び故障確率に基づいて、計算することができる。
【００１５】
[0013]以下の説明では、本発明のより完全な説明を提供するために、多くの詳細が説明される。しかし、これらの特定の詳細を伴わずとも本発明を実施できることは、当業者には明らかであろう。他の例では、本発明を曖昧にすることを避けるため、よく知られた構造及びデバイスは、詳細にではなくブロック図形式で示される。
【００１６】
[0014]以下の詳細な説明には、コンピュータメモリ内のデータビットに施される操作のアルゴリズム及びシンボル表現によって提示される部分がある。これらのアルゴリズムによる説明及び表現は、仕事の内容を他の当業者に最も効果的に伝えるために、データ処理分野の当業者によって使用される手段である。アルゴリズムは、ここでは、また一般には、所望の結果をもたらす自己矛盾のないステップ系列であると考えられている。ステップは、物理的な量の物理的な操作を必要とするステップである。必ずしも必要ではないが、通常、これらの量は、記憶、転送、組み合わせ、比較、及び他の操作が可能な、電気的信号又は磁気的信号の形態を取る。主として一般的な用法上の理由から、これらの信号をビット、値、要素、シンボル、文字、項、又は数などと呼ぶことが、時に便利であることが分かっている。
【００１７】
[0015]しかし、これらの用語及び類似の用語はすべて、適切な物理的な量に関連付けられており、これらの量に付けられた便利なラベルであるにすぎないことに留意されたい。別途特別に述べられない限り、以下の説明から明らかなように、説明の全体において、「処理する」、「計算する」、「算定する」、「決定する」又は「表示する」などの用語を利用した説明は、コンピュータシステムのレジスタ及びメモリ内の物理的な（電子的な）量として表現されたデータを操作及び変形して、コンピュータシステムメモリ若しくはレジスタ、又は他のそのような情報記憶、伝送、若しくは表示デバイス内の物理的な量として同様に表現される他のデータに変える、コンピュータシステム又は類似の電子的コンピューティングデバイスのアクション及びプロセスを指していることが理解されよう。
【００１８】
[0016]本発明は、本明細書のオペレーションを実行するための装置にも関する。この装置は、必要な目的のために特別に構成することができ、又はコンピュータ内に記憶されたコンピュータプログラムによって選択的に活動化若しくは再構成される汎用コンピュータを含むことができる。そのようなコンピュータプログラムは、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ、及び磁気光ディスクを含む任意のタイプのディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気カード若しくは光カード、又は電子的命令を記憶するのに適した任意のタイプの媒体などの、しかしそれらに限定されない、コンピュータ可読記憶媒体内に記憶することができ、各コンピュータ可読記憶媒体は、コンピュータシステムバスに結合される。
【００１９】
[0017]本明細書で提示されるアルゴリズム及び表示は、いずれか特定のコンピュータ又は他の装置に、本質的に関連するわけではない。本明細書の教示に従ったプログラムとともに、様々な汎用システムを使用することができ、又はより専門化された装置を構成して、必要な方法ステップを実行することが便利であると分かることもある。様々なこれらのシステムに必要な構成は、以下の説明から明らかになる。加えて、本発明は、いずれか特定のプログラミング言語に関連して説明されず、様々なプログラミング言語を使用して、本明細書で説明される本発明の教示を実施できることが理解されよう。
【００２０】
[0018]マシン可読媒体は、マシン（例えばコンピュータ）によって可読な形式で情報を記憶又は伝送するための任意の機構を含む。例えば、マシン可読媒体は、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイスなどを含む。
【００２１】
（概要）
[0019]本発明の実施形態は、複数のアクティブな物理マシン又は仮想マシン（本明細書ではプライマリノードと呼ばれる）の現在のメモリ状態を、同じ１組のバックアップノード（本明細書ではパリティノードと呼ばれる）上に同期させるための機構を提供する。一実施形態では、この同期は、プライマリノードのメモリ状態に対して実行された変更を複数のバックアップノードにストリーミングすることによって実行される。重要なことに、本発明の実施形態は、バックアップノードにおいて、いくつかのストリームが受信され、一緒に符号化されて、任意の目標信頼性レベル（すなわち故障から復旧する確率）でマシン故障からの復旧を可能にするのに必要なメモリ量を圧縮するという点で、ライブチェックポインティングにおける現在の最先端技術とは対照的である。
【００２２】
[0020]一実施形態では、バックアップノードにおける符号化は、次元がｋ×ｎのファンデルモンド行列（Ｖａｎｄｅｒｍｏｎｄｅ  ｍａｔｒｉｘ）（又はコーシー行列（Ｃａｕｃｈｙ  ｍａｔｒｉｘ））の係数に基づいた線形符号化であり、ここで、ｎは、プライマリノードの数であり、ｋは、システムを復旧できる故障の数である。一実施形態では、本方法は、他のバックアップノードからデータを送信し、ファンデルモンド行列の逆行列を効率的に求めてデータを復旧することによって、故障の場合に復旧機構を使用して復旧を実行するステップも含む。
【００２３】
[0021]各プライマリノードが、１〜Ｌまでのインデックスを付けられた同じサイズのメモリページを有する場合に、Ｎ個のプライマリノードのメモリ状態をＫ個のバックアップノード上にライブチェックポインティングする一実施形態では、異なるプライマリノードが、様々な数のメモリページを有する場合、最も多数のメモリページを有するプライマリノードが、基準として使用され、パリティノードのメモリページは、すべてのプライマリノードにおける最大のメモリフットプリントに従って設定される。本発明の実施形態は、パリティノードｚにおけるインデックスｊのメモリページに対して、以下の線形符号化を使用する。
【数１】
2012033169.tif 000003
ここで、
【数２】
2012033169.tif 000004
は、ビット毎のＸＯＲ演算を表し、乗算は、線形独立な符号化を保証するために、十分に大きなガロア体、例えばＧＦ（２１６）上で実行され、また、α値は、ファンデルモンド行列（又はバックアップノードにおけるプライマリイメージの線形結合）の係数である。
【００２４】
[0022]図１は、一実施形態による、完全な分散及び非同期方式でライブチェックポイントがどのように実行されるかについてのデータフロー図を示している。図１を参照すると、時刻Ｔ１において、仮想マシン１（ＶＭ１）において動作するプロセスが、メモリページｉを変更する書き込みオペレーションを実行する。この書き込みイベントは、メモリページに対してコミットされる前に捕捉される。メモリページが、値ｍ（１，ｉ）を有し、書き込み要求をコミットした後にｍ’（１，ｉ）に更新される場合、ＶＭ１は、
【数３】
2012033169.tif 000005
を計算し、すなわち、現在の値と新しい値の間のＸＯＲを計算する。したがって、ＶＭ１は、データを事前に符号化して、符号化されたデータ（メモリページデータ）を生成する。
【００２５】
[0023]その後、ＶＭ１は、信頼できる通信（例えばネットワークを介した有線又は無線通信）を使用して、ｕｐｄａｔｅ（１，ｉ）を各パリティノードに送信する。ｕｐｄａｔｅ（１，ｉ）をパリティノードに送信するのと平行して、又はその後に、ＶＭ１は、書き込みオペレーションをメモリに対してコミットして、現在のメモリページ値ｍ（１，ｉ）を新しいメモリページ値ｍ□（１，ｉ）で置き換える。メッセージは、中継に異なる時間を費やすので、各パリティノードは、ある期間の後、最終的にｕｐｄａｔｅ（１，ｉ）を受信する。
【００２６】
[0024]いったんパリティノードでは、各パリティノードが、線形符号化を実行する。一実施形態では、パリティノードｚは、以下に従って新しいパリティ値を計算する。
【数４】
2012033169.tif 000006
上記の演算を展開した場合、これは以下の式と等価である。
【数５】
2012033169.tif 000007
言い換えると、古いエントリｍ（１，ｉ）は、新しいエントリｍ’（１，ｉ）によって置き換えられる。したがって、最終的な書き込みオペレーション
【数６】
2012033169.tif 000008
は、ＶＭ１においてコミットされた書き込みオペレーションと同期して、符号化値を正常に維持する。
【００２７】
[0025]ＸＯＲ演算では、交換則及び結合則が成り立ち、これは、同じＶＭからの更新の順序を入れ替えることができ、又は複数のＶＭが更新を非同期に送信できることを意味することに留意されたい。図１は、２つのＶＭが、２つの異なる時刻に、パリティノードにおいて一緒に符号化されるそれぞれのローカルメモリページを更新しているケースを示している。時刻がＴ２＊＜Ｔ１＊である場合でも、ステップ（６）の後に最後にコミットされる状態に変わりはないことに留意されたい。一実施形態では、プライマリノードは、特定の更新がコミットされたことを通知する肯定応答をパリティノードから受信するまで、タイムスタンプを有する更新をローカルに記憶する。
【００２８】
（復旧）
[0026]１つ又は複数のＶＭ故障が検出された場合、システムは、復旧ステージに入る。故障ＶＭの数がＫよりも、すなわちパリティノードの数よりも少ない場合、システムは、故障から正常に復旧することができる。故障復旧は、複数の方法で実行することができる。２つのそのような実施形態が、以下で開示される。
【００２９】
[0027]一実施形態では、最初に、故障ＶＭのすべてのメモリ状態が、異なるパリティノードにおいて復旧され、その後、ＶＭが、パリティノードと同じ物理ロケーションにおいて活動化される。このモードは、復旧時間に関して時間がかかり、したがって、システム稼働時間は、負の影響を受ける。一実施形態では、復旧プロセスは、以下のように進行する。
【００３０】
[0028]ステップ１：すべての機能中のＶＭは、未決の更新メッセージ（すなわち、パリティノードによってコミットされた旨の肯定応答を受信していない上述のように計算された更新）と、各メモリページの現在の値を、すべての機能中のパリティノードに送信する。
【００３１】
[0029]ステップ２：各パリティノードｚは、ＶＭｘによって送信されたいずれかの未決の更新メッセージがすでにコミットされているかどうかを、シーケンス番号及びタイムスタンプを使用してチェックする。すでにコミットされている場合、対応するメッセージは無視される。コミットされていない更新は、現在の値との間でＸＯＲを求められ、今度は、その値と現在のパリティ値との間でＸＯＲが求められ、そのＸＯＲはαｘ（ｚ−１）倍され、この最後の値と各メモリページにおける現在のパリティ値ｅ（ｚ，ｉ）との間のＸＯＲは、現在の符号化からＶＭｘの情報を排除する。したがって、各パリティノードｚのメモリページｉにおける現在のパリティ値は、
【数７】
2012033169.tif 000009
であり、ここで、Ｆは、故障ＶＭの集合である。
【００３２】
[0030]ステップ３：各パリティノードｚは、すべてのｉについてのｅ”（ｚ，ｉ）を、他のパリティノードに送信し、行列Ｅ”＝Ｐｒ・ＭＦ（ｉ）がもたらされ、ここで、Ｐｒは、エントリがＰｉｊ＝αｊ（ｉ−１）の、Ｋ×Ｎのパリティ行列Ｐの縮小行列（ｒｅｄｕｃｅｄ  ｍａｔｒｉｘ）であり、故障しなかったプライマリノードに対応する列を排除することによって獲得され、ＭＦ（ｉ）は、ｘ∈Ｆについてのエントリｍｘ＝（ｘ，ｉ）を有する、Ｆ×１の列ベクトルである。パリティ行列Ｐは事前に知られているので、Ｐｒも知られている。パリティ行列Ｐは、後で以下において、行列ＧのＶ部分として示される。
【００３３】
[0031]ステップ４：各パリティノードは、（Ｐｒ）−１・Ｅ”を計算して、紛失シンボルを復旧し、パリティノードｘは、その第ｉのメモリページを、第ｘの故障ノードを用いて更新する。
【００３４】
[0032]別の実施形態では、ステップ３及びステップ４が、以下のように変更される。
【００３５】
ステップ３：各パリティノードは、各ｚ□≠ｚについて、（Ｐｒ）−１（ｘ，ｚ）・ｅ”（ｚ）を計算し、計算結果をパリティノードｚ□に送信し、ここで、（Ｐｒ）−１（ｘ，ｚ）は、行列の逆行列の第ｘ行第ｘ列である。
【００３６】
ステップ４：各パリティノードｚは、各メモリページｉについて、各ｚ□≠ｚから（Ｐｒ）−１（ｘ，ｚ）・ｅ”（ｚ）を収集し、ｍ（ｘ，ｉ）＝Σ（Ｐｒ）−１（ｘ，ｚ）・ｅ”（ｚ）を計算し、ここで、総和記号は、ＸＯＲ演算を表す。
【００３７】
[0033]別の実施形態では、復旧速度又は稼動時間を改善するため、各ＶＭのメモリページには優先順位が付けられ、優先順位が記憶される。故障が検出された後、各故障ＶＭについて、優先順位が最も高いメモリページが、上に列挙されたステップ１〜ステップ４を使用して最初に復旧され、ＶＭは、上位Ｄ個のメモリページが復号された後に活動化され、ここで、Ｄは、事前に設定された整数である（例えば１、２、３など）。プロセスが復号されていないメモリページにアクセスしようと試みた場合、要求されたメモリページが復号されるまで、プロセスはブロックされる。優先順位は、どのメモリページが最も頻繁にアクセスされるか、及び／又は直近にアクセスされたかを監視することによって、設定することができる。
【００３８】
[0034]一実施形態では、本明細書で説明される技法は、多くの仮想マシンがサーバとして使用されるデータセンタ及びその信頼性に関する状況において使用され、本明細書で説明される技法は、低いハードウェアリソースコストで信頼性を提供するための方法を含む。他の実施形態は、データセンタの外部の分散ネットワーク環境において、仮想マシンに信頼性を与えることを含む。
【００３９】
[0035]本発明の実施形態の１つの利点は、本発明が、ちょうど適正な数のプライマリノードの間でバックアップリソースを共用することによって、適切な量のリソースを使用して、特定のレベルの信頼性（例えば９９．９９％の稼働時間）を提供することを可能にすることである。別の利点は、本明細書で説明される技法を使用して、異なる仮想サーバの信頼性を独自のバックアップノード上に多重化することによって、事業者は、効率的でコスト効果のよい方式で、仮想サーバを運営するアプリケーションプロバイダに信頼性を提供することができるので、事業者がサービスとして信頼性を提供することを可能にすることである。
【００４０】
（ネットワーク同期）
[0036]本発明のいくつかの実施形態は、複数のバックアップノードが、複数のプライマリマシン（例えば、仮想マシン上でホストされ、ＲＥＭＵＳに類似した機構によって同期が取られるサーバ）の符号化されたバックアップ状態を保持することを仮定する。本発明の実施形態は、バックアップ状態の符号化を、ネットワーク符号化の使用によってネットワークに分散させるための機構を含む。これは、バックアップノードにおける符号化処理を削減し、ネットワークにおける帯域幅利用を削減する。
【００４１】
[0037]図３は、これらの技法の一例を示している。図３を参照すると、プライマリノードＳ１及びＳ２が、ノードＢによってバックアップされ、ネットワーク内の経路が、Ｓ１からＢ及びＳ２からＢへのトラフィックがＲを通過するように、ルータＲを含む場合、Ｒは、符号化ポイントとして識別され、ＲがＳ１からＢへの同期ストリームをＳ２からＢへの同期ストリームと合同で符号化できるように、符号化係数がＲに分配される。この例では、メモリページｓ１及びｓ２は、Ｒにおいて、ｂ＝ＸＯＲ（ｓ１，ｓ２）として符号化され、したがって、ＲからＢへのトラフィックは、ｐ１及びｐ２ではなくｂである。このケースでは、帯域幅削減は２分の１である。本発明の実施形態は、単一バックアップの場合における任意のトポロジを扱う。すなわち、本明細書で説明される技法は、任意のトポロジにおいてＢによってバックアップされる任意の集合Ｐ１，．．．，ＰＮのための符号化パラメータを識別できるように使用することができる。本発明の実施形態は、ツリートポロジの場合の複数バックアップケースも扱うことができる。複数のバックアップを有する他のトポロジの場合、既存のトポロジを利用して、トポロジ内のｘ個のツリーを見出し、見出されたすべてのツリーに本発明の実施形態を適用する拡張を使用することができる。
【００４２】
[0038]本発明の実施形態を用いて構成された同じ符号を使用して、復旧帯域幅を削減し、可能性としては最小化することができる。例えば、ノードＢが、３つのプライマリノードを、ＸＯＲ（ｓ１，ｓ２，ｓ３）という符号化を用いてバックアップする場合に、プライマリノードＳ３が故障したとき、仲介ルータＲにおける（故障ノードＳ３が存在しない）同じ符号化を使用して、バックアップノードＢにおいてｓ３のメモリページを復旧することができる。ルータＲにおいて符号化が実行されない場合、このケースにおける帯域幅削減は、２分の１である。
【００４３】
[0039]本発明の実施形態は、ｘ＞１であるｘ個のプライマリノードが故障した場合は、復旧の第２ステージを規定する。このステージは、部分的に復号されたデータをｘ個のバックアップノードの間で交換することによって、ｘ個のプライマリノードを完全に復旧するために必要である。基本的に、それは、逆行列を求めるための分散実行である。ネットワーク内で実行される場合、それは、ｘ個のバックアップノードを用いる同期方法の、ｘ個のバックアップノード自体への適用である。
【００４４】
[0040]少なくとも１つの実施形態は、ＷＡＮ又はワイヤレスインタフェースを介したネットワークなど、（同期帯域幅と比較した場合に）帯域幅が制限されたネットワークを介して、１組のプライマリノードが、別の１組のバックアップノードを使用するためのものである。
【００４５】
[0041]少なくとも１つの実施形態の１つの利点は、（おそらく）最少量の帯域幅を使用して、プライマリノードとバックアップノードを同期させることである。本発明の少なくとも１つの実施形態の別の利点は、その実施形態が、故障したバックアップされたノードの状態を（最大でｋ個まで）復旧するための、ネットワーク分散型の復旧機構を提供することである。
【００４６】
（同期のための符号化）
[0042]以下の式は、バックアップノードにおける符号化方式の一実施形態を記述している。
【数８】
2012033169.tif 000010
ここで、ｓ１．．．ｓｎは、それぞれプライマリノードＳ１．．．Ｓｎのメモリページの列ベクトルであり、ｂ１．．．ｂｋは、それぞれバックアップノードＢ１．．．Ｂｋの符号化されたメモリページの列ベクトルであり、Ｇは、符号を生成する生成行列であり、
【数９】
2012033169.tif 000011
単位行列Ｉとファンデルモンド行列Ｖの連結を表す。Ｇの第（ｎ＋ｊ）列は、メモリページｓ１．．．ｓｎがどのように符号化され、バックアップノードＢｊに記憶されるかを表す。一実施形態では、復号を効率的に行うことができるので、ファンデルモンド行列がここで選択される。別の実施形態では、コーシー行列を使用することができる。
【００４７】
[0043]データｂｊがバックアップノードＢｊに記憶されることを保証するための１つの明らかな方法は、すべてのプライマリノードＳ１．．．Ｓｎにそれぞれのデータｓ１．．．ｓｎをノードＢ１．．．Ｂｋにユニキャストさせ、符号化がバックアップノードのみで実行されるようにすることである。これは、ｎｋ個の接続を使用する帯域幅集約的な動作である。マルチキャストは、帯域幅を削減するのに役立つことがあるが、ネットワーク内での符号化の実行は、帯域幅をさらに削減し、また符号化タスクをネットワークに委譲する。本発明の実施形態は、バックアップノードが、Ｇに従って符号化された適切なデータを受信するように、ネットワークにおいて符号化を実行するための方法を提供する。これは、後により詳細に説明される。
【００４８】
（プライマリノード故障が１つの場合の復旧手順）
[0044]プライマリノードＳｉをノードＢｊ上で復旧する場合、その目標は、符号化されたデータ
【数１０】
2012033169.tif 000012
を、Ｓｉ内の元のメモリページであるｓｉに復号することである。それを行うため、残りのｎ−１個のプライマリノードは、それらのメモリページを、同期のために設計された同じネットワーク符号を使用して、バックアップノードＢｊに送信する。その後、ノードＢｊは、
【数１１】
2012033169.tif 000013
に等しい符号化されたデータを受信する。
【００４９】
[0045]バックアップノードＢｊは、この符号化されたデータと（それ自体の符号化されたデータ）ｂｊとの間のＸＯＲを求め、ＸＯＲ演算の結果を係数を用いて正規化することによって、プライマリノードＳｉへの復旧を完了する。
【００５０】
[0046]図４は、復旧の一例を示している。図４を参照すると、ノードＢは、一緒にＸＯＲを求めたＳ１、Ｓ２、Ｓ３を表す符号化されたデータを記憶する。ノードＳ３が故障した場合、Ｒは、Ｓ１及びＳ２からのデータの間でＸＯＲを求めて、それらのデータを符号化し、符号化されたデータをノードＢに送信する。ノードＢは、Ｒから受信した符号化されたデータとノードＢに記憶された符号化されたデータとの間でＸＯＲを求めて、Ｓ３を復旧する。
【００５１】
（プライマリノード故障が２つ以上の場合の復旧手順）
[0047]Ｓが、故障したＶＭのインデックス集合を表すとし、Ｂが、復旧を行うためのそれぞれのバックアップノードのインデックス集合を表すとする。一実施形態では、復旧は、２つのステージにおいて実行される。第１のステージは、上で説明された１つのプライマリノード故障から復旧する際のステージと同じである。正常に動作しているｎ−｜Ｓ｜個のプライマリノードは、同期のために設計された同じネットワーク符号を使用して、それぞれのメモリページをＢに属するバックアップノードに送信し、その後、Ｂに属するバックアップノードは、受信した符号化されたデータとそれ自体の符号化されたデータとの間のＸＯＲを求める。その結果、各バックアップノードＢｊは、以下のような部分的に復号されたデータｂ□ｊを有するようになる。
【数１２】
2012033169.tif 000014
[0048]上のものは、基本的に、ファンデルモンド行列Ｖの部分行列である。それは、行列ＧＳ，Ｂによって記述することができ、ここで、各エントリ（ｉ，ｊ）は、以下のようになる。
【数１３】
2012033169.tif 000015
これは、一般化ファンデルモンド行列としても知られており、逆行列ＧＳ，Ｂ−１を効率的に計算することができる。
【００５２】
[0049]第２のステージは、Ｂに属するすべてのバックアップノードが、それらの部分的に復号されたデータを交換することを必要とし、逆行列を乗算することによって、ｂ□ｊを効率的に復号する。最初に、バックアップノードＢｊ□が、その部分的に復号されたデータｂ□ｊ□を分配のためにネットワークに送信し、それを
【数１４】
2012033169.tif 000016
を用いて正規化する。その後、
【数１５】
2012033169.tif 000017
という形式のすべての「符号化された」データについて、バックアップノードＢｊ□は、別のバックアップノードＢｊから受信し、ＸＯＲ演算を実行し、正規化されたデータを上記の「符号化された」データで置き換える。復旧は、Ｂｊ□が「符号化された」データの｜Ｂ｜−１個の部分を受信した後に完了する。
【００５３】
[0050]ネットワークは、行列ＶをＧＳ，Ｂに設定し、ノードがデータをそれ自体の上に「同期」させるように符号を構成することによって、すべてのｂ□ｊの様々な符号化されたコピーを分配することができる。したがって、ツリートポロジの場合に複数のバックアップに同期させるための以下で説明されるのと同じアルゴリズムを使用することができる。
【００５４】
[0051]図１４は、ネットワーク符号化を使用して、複数の異なる符号化を複数の異なるバックアップノード上に記憶する一例を示している。図１４を参照すると、ＶＭ１〜ＶＭ４が、Ｘ１１、Ｘ２１、Ｘ３１、Ｘ４１と呼ばれるそれぞれのデータを提供する。ネットワーク符号化の結果、データの２つの異なる符号化が生じ、２つの異なるバックアップノードに記憶される。具体的には、２つの符号化は、
【数１６】
2012033169.tif 000018
【数１７】
2012033169.tif 000019
であり、これらの符号化は、バックアップノードである物理マシン１（ＰＭ１）及び物理マシン２（ＰＭ２）上にそれぞれ記憶される。
【００５５】
[0052]ＶＭ１及びＶＭ３が故障した場合、復旧手順は、ＰＭ１がデータＸ１１を復旧し、そのデータにＶＭを介してアクセスできるようにすることを可能にし、またＰＭ２がデータＸ３１を復旧し、そのデータにＶＭを介してアクセスできるようにすることを可能にする。
【００５６】
（１つのバックアップノードに同期させるケース）
[0053]図５は、ｎ個のプライマリノードＳ１．．．Ｓｎを、レートｒ１、ｒ２、．．．、ｒｎで、１つのバックアップノードＢに同期させるためのアルゴリズムの一実施形態を示している。これは、レートが整数単位であることを仮定する。一実施形態では、仲介ルータでは、ＸＯＲ演算のみが必要とされる。
【００５７】
[0054]一実施形態では、アルゴリズムは、４つの主要ステップを含む。
【００５８】
[0055]ステップ１：すべてのプライマリノードについて、プライマリノードＳｉからＢへの最大フロー（ｍａｘ  ｆｌｏｗ）を計算し、ｒｉ個の最短経路を選択するために、エドモンズ−カープ（Ｅｄｍｏｎｄｓ−Ｋａｒｐ）などの最大フローアルゴリズムを使用する。
【００５９】
[0056]ステップ２：すべての選択された経路に基づいて、リンク依存グラフ（ｌｉｎｋ  ｄｅｐｅｎｄｅｎｃｙ  ｇｒａｐｈ）を構築する（図５の４行〜７行）。リンク依存グラフの一例が、図６のＡ及び図６のＢに示されている。Ｓ１からＢへの最大フローは、（黒矢印によって示される）｛５，１｝及び｛８，６，４，２｝であり、Ｓ２からＢへの最大フローは、（白抜き矢印によって示される）｛７，２｝及び｛９，６，３，１｝である。
【００６０】
[0057]ステップ３：各ソースにおいて、リンクに、符号化されていない符号語、すなわち、サイズがｒｉ×ｒｉの単位行列の行を供給し（１０行）、リンク依存グラフをトポロジカルに辿る（図５の１１行〜１４行）。リンク依存グラフ内の各ノードの出力は、その子ノードのすべての符号語の間でＸＯＲを求めた結果である。このステップは、データが符号化されずにプライマリノードから送信された場合に、バックアップノードで受信される符号語を評価する。
【００６１】
[0058]ステップ４：各リンクからの符号語をプライマリノードＩＤによってグループ化する（図５の１６行）これは、ノードｉについて、サイズがｒｉ×ｒｉの正方行列を形成する。例えば、グループ化の後に形成されたｎ個の行列は、各ノードｉに対して
【数１８】
2012033169.tif 000020
である。これらの行列は、逆行列が求められ（図５の１７行）、その結果は、バックアップノードＢにおいて正しいパリティが受信されるように、プライマリノードにおいて各リンクに対してどのページを符号化すべきであるかを与える。図６のＡ及び図６のＢの例では、Ｓ１の逆行列は、
【数１９】
2012033169.tif 000021
であり、Ｓ２の逆行列は、
【数２０】
2012033169.tif 000022
である。
【００６２】
[0059]図７は、図６の例に対して図５のアルゴリズムを適用した結果を示している。
【００６３】
（ツリートポロジの場合に複数のバックアップに同期させるためのアルゴリズム）
[0060]上で説明された符号構成アルゴリズムは、すべてのノードにおけるすべてのリンクについて、データのどの部分を符号化せずに転送すべきか、及び、データのどの部分を符号化し、既存の符号化されたストリームと組み合わせて、ツリーの残りに分配するべきか、を決定する。決定は、そのリンクを通過しているレートｒ１．．．ｒｎと、ツリーの他方の側のバックアップノードのサイズに依存する。この決定と、したがって最小化された帯域幅とは、以下の最適化によって評価することができる。
【数２１】
2012033169.tif 000023
ここで、
【数２２】
2012033169.tif 000024
であり、ここで、Ｓは、ツリーの一方の側のプライマリノードの集合であり、Ｂは、ツリーの他方の側のバックアップノードの集合である。最適化から評価された集合Ｘは、プライマリノードからのどのデータをその仲介ノードにおいて符号化すべきかを示す。最適化手順の一実施形態が、図８にコード形式で示されている。
【００６４】
[0061]データが符号化される場合、ファンデルモンド行列Ｖの適切なエントリから係数がコピーされる。仲介ノードにおける各リンクに対する符号化オペレーションは、サイズがｎ×ｋの行列Ｍと、１×ｎの２値ベクトルｆによって記述することができる。
【数２３】
2012033169.tif 000025
ここで、Ｆは、符号化すべきではないが、そのリンク上で転送すべきプライマリノードからのフローを表し、ｆは、そのリンクについて、その仲介ノードにおいて符号化すべきプライマリノードからのフローを表し、ｇは、符号化オペレーションの出力であり、行列Ｍは、符号化手順の係数を与え、ｇＩＮは、それ以前のノードからのすでに符号化されているフローを表す。ｇ及びｇＩＮの第ｊのエントリは、バックアップノードｊに向かう符号化されたデータを表す。
【００６５】
[0062]図８は、以下の３つの主要ステップを有する主要アルゴリズムの一実施形態をコード形式で示している。
【００６６】
[0063]ステップ１：ノードηにルートを有する各サブツリーについて、ネットワークの残りに寄与すべきプライマリノードデータの集合ｃηと、ネットワークの残りから得る必要があるプライマリノードデータの集合ｄηと、そのサブツリー内のバックアップノードの数βηとを計算する。図９のリストは、ツリーの底部から上方に向けての１回のスイープで、この計算アクションを実行する。
【００６７】
[0064]アルゴリズムは、深さＨのノードであるツリーのリーフにおいて開始し、ここで、Ｈは、ツリーのレベルの数である（Ｈはリーフであり、０はツリーのルートである）。このレベルにおける各ノードついて、アルゴリズムは、ノードがソースであるか、それともバックアップであるかをチェックする（３行）。ノードがソースである場合（３行）、アルゴリズムは、このノードをデータソースのリストに追加し、ノードがバックアップである場合（４行）、アルゴリズムは、このノードをバックアップのリストに追加し（５行）、このツリーの外部のノードを潜在的ソースのリストに追加する（５行）。
【００６８】
[0065]その後、アルゴリズムは、１度に１レベルだけツリーを上昇することによって、再帰的に進行する。各レベルにおいて、アルゴリズムは、このレベルのすべてのノードを検討する（８行）。各ノードについて、アルゴリズムは、そのサブツリー内のすべてのソース（９行）と、そのサブツリー内のすべてのバックアップ（１０行）とを調べる。サブツリー内にバックアップノードが存在する場合（１１行）、これらのソースのインデックスを除去することによって、１組のデマンド（ｄｅｍａｎｄ）を計算する。これは、集合ｄ＼ｅｔａが、そのサブツリーの外部のソースのインデックスのみから構成されることを意味する。そのサブツリー内にソースが存在する場合、ソースのリストには、これらのソースのインデックスが投入される（１２行）。
【００６９】
[0066]したがって、このアルゴリズムの結果は、グラフ内の各ノードについての、そのサブツリーの内部のバックアップのリスト＼ｂｅｔａと、そのサブツリーの外部のソースのリストｄと、そのサブツリーの内部のソースのリストｃである。
【００７０】
[0067]ステップ２：アップリンクのレート及び符号化決定を、ツリーの最低ノードから開始して最高ノードまで、図８に示されたアルゴリズムを使用して評価する。
【００７１】
[0068]アルゴリズムは以下のように機能し、すなわち、アルゴリズムは、ツリーの最低レベル（上で説明されたようにレベルＨ）から開始して、その後、各レベルを再帰的に検討し、最後に、ルート直下のレベルに到達する（６行）。各ノードについて、アルゴリズムは、図１０のアルゴリズムを使用して、最小達成可能レートを計算する（８行）。アルゴリズムは、図１０のアルゴリズムに、入力として、サブツリー内のバックアップの数とサブツリー内のソースの集合とを与え、この図１０のアルゴリズムから、戻りとして、符号化されるソースの集合Ｘとしてのソースの集合の一区分と、符号化されないソースの集合Ｆ＿＼ｅｔａ＾Ｕと、最小達成可能レートを受け取る。
【００７２】
[0069]その後、図８のアルゴリズムは、この最小達成可能レートをサポートするのに十分な帯域幅が存在するかどうかをチェックする（１０行）。存在しない場合は、ソース／バックアップ同期をネットワークによってサポートすることができず、存在する場合は、アルゴリズムは、図１１のアルゴリズムを使用して、レートを更新する。
【００７３】
[0070]図１１のアルゴリズムは、入力として、Ｘ内の符号化されるソースからのフローの集合ｆと、Ｆ＿＼ｅｔａ＾∪内の符号化されないソースからのフローの集合Ｆを取る。ｆ内の各フローについて、アルゴリズムは、この特定のフローのため、及びサブツリーの外部の宛先の集合のため、ファンデルモンド係数を使用することによって符号を計算する（４行、ここで、ｉは、ｆ内のフローに対応し、ｊは、サブツリーの外部のバックアップインデックスに対応する）。
【００７４】
[0071]符号化決定が行われると、図１１に示されたアルゴリズムは、アップリンクのためにそのノードに符号を植え付ける。集合Λは、すでに符号化されたフローを記録する。
【００７５】
[0072]ステップ３：ツリーのルートからリーフノードに向かう各ダウンリンクのレートを評価する。符号化決定は、図８の１２行〜１９行に示されたアルゴリズムを使用して獲得される。図１２に示されるアルゴリズムは、符号化係数を適切に設定するためのアルゴリズムの一実施形態である。
【００７６】
[0073]ダウンリンクを設定するため、図８のアルゴリズムは、ツリーを下降し（１２行）、各ノードについて、アルゴリズムは、親ノードからの寄与を受ける符号化されていないフローＦ＾Ｄ＿＼ｅｔａと、子ノードからの符号化されていないフローＦ＾Ｕ＿＼ｅｔａ’の和集合としての、符号化されていないフローのその集合をチェックする（１４行）。各子ノードについて、ノードは、その子ノードのサブツリー内のバックアップソースの数と、この子ノードのサブツリーの内部のバックアップに寄与する、この子ノードのサブツリーの外部のソースとに基づいて、最小レートをチェックする（１６行）。そのレートが利用可能な帯域幅よりも大きい場合（１８行）、ソース／バックアップの組み合わせは達成可能ではない。それが達成可能な場合、符号化されたフローは、図１２のアルゴリズムを使用して計算される。
【００７７】
[0074]図１２のアルゴリズムは、符号化されないフローＦを手付かずのまま残し（１行）、符号化されるフローのうちのフローｆについて（２行）、アルゴリズムは、フローｉの寄与がどのバックアップノードｊに行くかを考慮して（３行）、ファンデルモンド行列Ｖ（ｉ，ｊ）から適切な係数を抽出する。
【００７８】
[0075]ステップ２及びステップ３のいかなる時点でも、それらのリンクの残余の帯域幅が、同期レートｒ１．．．ｒｎをサポートするのに十分でない場合、アルゴリズムは、これを検出し、エラーを返す。
【００７９】
（例示的な同期プロセス）
[0076]図１３は、複数のマシンのメモリ状態を１組の１つ又は複数のバックアップノード上に同期させるためのプロセスの一実施形態を示している。プロセスは、ハードウェア（回路、専用ロジックなど）、（汎用コンピュータシステム若しくは専用マシン上で実行される）ソフトウェア、又は両方の組み合わせを含み得る、処理ロジックによって実行される。一実施形態では、このプロセスは、１組の１つ又は複数のバックアップノードに通信可能に結合された複数のマシンを有するネットワーク環境において生じる。一実施形態では、マシンは、仮想マシン又は物理マシンである。
【００８０】
[0077]図１３を参照すると、プロセスは、処理ロジックが、各マシンのメモリ状態に対する更新と各マシンのメモリ状態の直前のバージョンとの間でビット毎の排他的ＯＲ（ＸＯＲ）演算を実行して、事前に符号化された変更を生成することによって開始する（処理ブロック１３０１）。一実施形態では、これは、プライマリノードによって実行される。一実施形態では、メモリ状態は、メモリページを含む。
【００８１】
[0078]次に、処理ロジックは、事前に符号化された変更を１つ又は複数のバックアップノードの各々に送信する（処理ブロック１３０２）。一実施形態では、これは、プライマリノードによって実行される。
【００８２】
[0079]次に、処理ロジックは、事前に符号化された変更を１つ又は複数のバックアップノードの各々において受信し、事前に符号化された変更は、複数のマシンの各１つ又は複数についてのメモリ状態に対する変更を事前に符号化することによって生成される（処理ブロック１３０３）。一実施形態では、マシンの１つ又は複数についてのメモリ状態に対する事前に符号化された変更は、各マシンのメモリ状態に対する変更と、前記各マシンのメモリ状態の直前のバージョンとに基づいて計算される。
【００８３】
[0080]次に、処理ロジックは、マシンの２つ以上にわたって、事前に符号化された変更を符号化することによって、符号化されたメモリ状態を生成する（処理ブロック１３０４）。
【００８４】
[0081]その後、処理ロジックは、１つ又は複数のバックアップノードの１つにおいて、マシンのうちの故障した１つについての１つ又は複数のメモリ状態を復旧する（処理ブロック１３０５）。
【００８５】
[0082]一実施形態では、事前に符号化された変更を符号化することによって符号化されたメモリ状態を生成するステップは、１つ又は複数のバックアップノードの各々において行われ、符号化されたメモリ状態を生成するステップは、複数のマシンのうちの異なるマシンのメモリページの間でビット毎の排他的ＯＲ（ＸＯＲ）演算を実行するサブステップを含む。そのようなケースでは、少なくとも１つのマシンのメモリ状態の復旧は、１つの物理ロケーションに配置されたバックアップノードの１つにおいて行われ、その後、仮想マシンが、復旧されたメモリ状態を用いて、その物理ロケーションにおいて活動化されて、故障したマシンに取って代わる。
【００８６】
[0083]一実施形態では、符号化されたメモリ状態を生成するステップは、複数のマシンと１つ又は複数のバックアップノードの間に通信可能に結合された仲介ノードにおいてネットワーク符号化を実行するサブステップを含み、そのサブステップは、複数のマシンのうちの異なるマシンのメモリページの間でビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することを含む。そのようなケースでは、符号化されたメモリ状態は、１つ又は複数のバックアップノードに送信される。複数のマシンのうちの故障した１つについての１つ又は複数のメモリ状態を復旧する場合、復旧は、１つ又は複数のバックアップノードにおいて行われ、複数のマシンのうちの故障していない異なるマシンのメモリページの間でビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、仲介ノードにおいてネットワーク符号化を実行して、新しい符号化されたメモリ状態を生成し、新しい符号化されたメモリ状態を１つ又は複数のバックアップノードのうちの少なくとも１つに送信し、新しい符号化されたメモリ状態と、少なくとも１つのバックアップノードに以前に記憶された符号化されたメモリ状態との間でビット毎の排他的ＯＲ（ＸＯＲ）演算を実行することによって、故障したマシンのメモリページを生成することによって実行される。
【００８７】
[0084]物理マシン、仮想マシン、プライマリノード、及びバックアップノードの各々は、情報を伝達するための通信機構又は機能、上で説明されたように情報を処理するための１つ又は複数のプロセッサ又は処理コア、並びに情報及びプロセッサ又は処理コアによって実行される命令を記憶するためのランダムアクセスメモリ（ＲＡＭ）又は他のストレージを含むことに留意されたい。
【００８８】
[0085]上述の説明を読んだ後には、本発明の多くの修正形態及び変更形態が、当業者には疑いもなく明らかになるが、例として示され、説明されたどの特定の実施形態も、限定と見なされることを決して意図していないことを理解されたい。したがって、様々な実施形態の詳細についての言及は、本発明に必須と見なされる特徴のみをそれこそが列挙する特許請求の範囲を限定することを意図してしない。
【図１】
2012033169.tif 000026
【図２】
2012033169.tif 000027
【図３】
2012033169.tif 000028
【図４】
2012033169.tif 000029
【図５】
2012033169.tif 000030
【図６】
2012033169.tif 000031
【図７】
2012033169.tif 000032
【図８】
2012033169.tif 000033
【図９】
2012033169.tif 000034
【図１０】
2012033169.tif 000035
【図１１】
2012033169.tif 000036
【図１２】
2012033169.tif 000037
【図１３】
2012033169.tif 000038
【手続補正書】
【提出日】平成23年11月8日(2011.11.8)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
[0009]本発明は、以下で与えられる詳細な説明から、また本発明の様々な実施形態についての添付の図面から、より十分に理解されるが、そのような図面は、本発明を特定の実施形態に限定するものと解釈されるべきではなく、説明及び理解のためのものにすぎない。
【図１】メモリ書き込みプロセス、及び、パリティノードにおいて符号化を更新するためのプロセスの、データフロー図の一実施形態を示す図である。
【図２】プライマリノードとして４つの仮想マシン（ＶＭ）を、またパリティノードとして２つの物理マシン（ＰＭ）を、用いて例示的に示された、故障検出後の復旧ステージを表すデータフロー図の一実施形態を示す図である。
【図３】本発明の一実施形態のネットワーク符号化プロセスを説明する同期例を示す図である。
【図４】本発明の一実施形態の復旧プロセスを説明する復旧例を示す図である。
【図５】バックアップが１つの場合にソースＶＭのメモリページにわたって符号化を行うためのアルゴリズムの一実施形態を示す図である。
【図６】（Ａ）及び（Ｂ）図５のアルゴリズムの例を示す図である。
【図７】図５のアルゴリズムの解法を示す図である。
【図８】ツリー及び複数のバックアップノードの、別のアルゴリズムの一実施形態を示す図である。
【図９】図８のアルゴリズムのｅｖａｌＡｌｌＳｕｂＴｒｅｅｓプロシージャの一実施形態を示す図である。
【図１０】図８のアルゴリズムのｇｅｔＭｉｎＳｅｔＲａｔｅプロシージャの一実施形態を示す図である。
【図１１】仲介ルータにおいて使用するためのアップリンクプロシージャの一実施形態を示す図である。
【図１２】仲介ルータによって使用するためのダウンリンクプロシージャの一実施形態を示す図である。
【図１３】複数のマシンのメモリ状態を１組の１つ又は複数のバックアップノード上に同期させるためのプロセスの一実施形態を示す図である。
【手続補正書】
【提出日】平成23年11月8日(2011.11.8)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００５４
【補正方法】変更
【補正の内容】
【００５４】
[0051]ネットワーク符号化を使用して、複数の異なる符号化を複数の異なるバックアップノード上に記憶する一例を示している。ＶＭ１〜ＶＭ４が、Ｘ１１、Ｘ２１、Ｘ３１、Ｘ４１と呼ばれるそれぞれのデータを提供する。ネットワーク符号化の結果、データの２つの異なる符号化が生じ、２つの異なるバックアップノードに記憶される。具体的には、２つの符号化は、
【数１６】
2012033169.tif 000039
【数１７】
2012033169.tif 000040
であり、これらの符号化は、バックアップノードである物理マシン１（ＰＭ１）及び物理マシン２（ＰＭ２）上にそれぞれ記憶される。
【外国語明細書】
2012033169000001.pdf