(57)【特許請求の範囲】
【請求項１】
プライマリ・サーバでパーティションを実行するステップであって、前記パーティションは、前記プライマリ・サーバの第一メモリ・ブロック・アドレスの第一メモリ・ロケーションにアクセスする、前記実行するステップと、
前記プライマリ・サーバの前記パーティションがミラーされた、実行されないパーティションを含むセカンダリ・サーバの第一対応メモリ・ロケーションが前記プライマリ・サーバの前記第一メモリ・ロケーションに対応していて、前記セカンダリ・サーバの前記第一対応メモリ・ロケーションがエラーを有する場合、前記プライマリ・サーバの前記第一メモリ・ロケーションから前記プライマリ・サーバの第二メモリ・ロケーションにオブジェクトを移動させるステップと、
前記プライマリ・サーバが故障したことを検出するのに応じて、前記セカンダリ・サーバ上で前記ミラーされたパーティションの実行を開始するステップと、
前記セカンダリ・サーバが故障したことを検出するのに応じて、前記プライマリ・サーバの前記第一メモリ・ロケーションにオブジェクトを格納するのを可能にするステップと、
を含む方法。
【請求項２】
前記オブジェクトを移動させるステップが、
前記プライマリ・サーバの前記第一メモリ・ロケーションから、前記セカンダリ・サーバの第二対応メモリ・ロケーションに対応する、前記プライマリ・サーバの前記第二メモリ・ロケーションに前記オブジェクトを移動させるステップをさらに含み、前記セカンダリ・サーバの前記第二対応メモリ・ロケーションはエラーを有しない、
請求項１に記載の方法。
【請求項３】
前記セカンダリ・サーバの前記第一対応メモリ・ロケーションは、前記プライマリ・サーバの前記第一メモリ・ロケーションの前記第一メモリ・ブロック・アドレスが、前記セカンダリ・サーバの前記第一対応メモリ・ロケーションの第一対応メモリ・ブロック・アドレスと一致するときに、前記プライマリ・サーバの前記第一メモリ・ロケーションに対応する、請求項１に記載の方法。
【請求項４】
複数のセカンダリ・サーバの間から、エラーを有するメモリ・ブロックの数が最少のセカンダリ・サーバを選択するステップをさらに含む、請求項１に記載の方法。
【請求項５】
前記エラーが訂正されたエラーまたは訂正不可能なエラーを含む、請求項１に記載の方法。
【請求項６】
プログラムが記録されたコンピュータ可読ストレージ媒体であって、前記プログラムはコンピュータに、
プライマリ・サーバでパーティションを実行するステップであって、前記パーティションは、前記プライマリ・サーバの第一メモリ・ブロック・アドレスの第一メモリ・ロケーションにアクセスする、前記実行するステップと、
前記プライマリ・サーバの前記パーティションがミラーされた、実行されないパーティションを含むセカンダリ・サーバの第一対応メモリ・ロケーションが前記プライマリ・サーバの前記第一メモリ・ロケーションに対応していて、前記セカンダリ・サーバの前記第一対応メモリ・ロケーションがエラーを有する場合、前記プライマリ・サーバの前記第一メモリ・ロケーションから前記プライマリ・サーバの第二メモリ・ロケーションにオブジェクトを移動させるステップであって、前記オブジェクトを、前記プライマリ・サーバの前記第一メモリ・ロケーションから、前記セカンダリ・サーバの第二対応メモリ・ロケーションに対応する前記プライマリ・サーバの前記第二メモリ・ロケーションに移動させるステップをさらに含み、前記セカンダリ・サーバの前記第二対応メモリ・ロケーションはエラーを有しない、前記移動させるステップと、
前記プライマリ・サーバが故障したことを検出するのに応じて、前記セカンダリ・サーバ上で前記ミラーされたパーティションの実行を開始するステップと、
前記セカンダリ・サーバが故障したことを検出するのに応じて、前記プライマリ・サーバの前記第一メモリ・ロケーションにオブジェクトを格納するのを可能にするステップと、
を実行させる、
コンピュータ可読ストレージ媒体。
【請求項７】
前記セカンダリ・サーバの前記第一対応メモリ・ロケーションは、前記プライマリ・サーバの前記第一メモリ・ロケーションの前記第一メモリ・ブロック・アドレスが、前記セカンダリ・サーバの前記第一対応メモリ・ロケーションの第一対応メモリ・ブロック・アドレスと一致するときに、前記プライマリ・サーバの前記第一メモリ・ロケーションに対応する、請求項６に記載のコンピュータ可読ストレージ媒体。
【請求項８】
複数のセカンダリ・サーバの間から、エラーを有するメモリ・ブロックの数が最少のセカンダリ・サーバを選択するステップをさらに前記コンピュータに実行させる、請求項６に記載のコンピュータ可読ストレージ媒体。
【請求項９】
前記エラーが訂正されたエラーまたは訂正不可能なエラーを含む、請求項６に記載のコンピュータ可読ストレージ媒体。
【請求項１０】
プロセッサと、
前記プロセッサに通信可能に接続されたメモリであって、前記メモリはプログラムを含み、前記プログラムは前記プロセッサに、
プライマリ・サーバでパーティションを実行するステップであって、前記パーティションは、前記プライマリ・サーバの第一メモリ・ブロック・アドレスの第一メモリ・ロケーションにアクセスする、前記実行するステップと、
前記プライマリ・サーバの前記パーティションがミラーされたパーティションを含むセカンダリ・サーバの第一対応メモリ・ロケーションが前記プライマリ・サーバの前記第一メモリ・ロケーションに対応していて、前記セカンダリ・サーバの前記第一対応メモリ・ロケーションがエラーを有する場合、前記プライマリ・サーバの前記第一メモリ・ロケーションから前記プライマリ・サーバの第二メモリ・ロケーションにオブジェクトを移動させるステップであって、前記オブジェクトを、前記プライマリ・サーバの前記第一メモリ・ロケーションから、前記セカンダリ・サーバの第二対応メモリ・ロケーションに対応する前記プライマリ・サーバの前記第二メモリ・ロケーションに移動させるステップをさらに含み、前記セカンダリ・サーバの前記第二対応メモリ・ロケーションはエラーを有せず、前記セカンダリ・サーバの前記第一対応メモリ・ロケーションは、前記プライマリ・サーバの前記第一メモリ・ロケーションの前記第一メモリ・ブロック・アドレスが、前記セカンダリ・サーバの前記第一対応メモリ・ロケーションの第一対応メモリ・ブロック・アドレスと一致するときに、前記プライマリ・サーバの前記第一メモリ・ロケーションに対応し、前記セカンダリ・サーバの前記第一対応メモリ・ロケーションがエラーを有すると判定された時に、前記ミラーされたパーティションは前記セカンダリ・サーバで実行されていない、前記移動させるステップと、
前記プライマリ・サーバが故障したことを検出するのに応じて、前記セカンダリ・サーバ上で前記ミラーされたパーティションの実行を開始するステップであって、前記プライマリ・サーバが故障したことは、前記セカンダリ・サーバが特定の期間内に前記プライマリ・サーバからメッセージを受信しなかったことにより検出される、前記開始するステップと、
前記セカンダリ・サーバが故障したのを検出するのに応じて、前記プライマリ・サーバの前記第一メモリ・ロケーションにオブジェクトを格納するのを可能にするステップであって、前記セカンダリ・サーバが故障したことは、前記プライマリ・サーバが特定の期間内に前記セカンダリ・サーバからメッセージを受信しなかったことにより検出される、前記可能にするステップと、
を実行させる、
前記メモリと、
を含むコンピュータ。
【請求項１１】
前記プログラムが、
複数のセカンダリ・サーバの間から、エラーを有するメモリ・ブロックの数が最少のセカンダリ・サーバを選択するステップ、
をさらに前記プロセッサに実行させる、請求項１０に記載のコンピュータ。
【請求項１２】
前記エラーが訂正されたエラーまたは訂正不可能なエラーを含む、請求項１０に記載のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般にコンピュータ・システムに関し、さらに具体的には、ミラーリングを用いるコンピュータ・システムに関する。
【背景技術】
【０００２】
コンピュータ・システムは、通常、ハードウェア（半導体、トランジスタ、チップ、および回路基板など）とコンピュータ・プログラムとの組み合わせを含む。コンピュータおよびそれらが格納するデータの重要性が高まるにつれ、ユーザは、それらコンピュータの可用性のいかなる中断についても、ますます耐えられないようになってきた。ユーザの高い可用性への要求を満たすために、コンピュータに冗長なコンポーネントを備え、一つのコンポーネントが障害を起こしまたは利用できなくなった場合に、コンピュータが別のコンポーネントの使用に自動的に切り替えるようにすることができる。
【０００３】
一つの高可用性技法にミラーリングまたはチェック・ポインティングと呼ばれる技法があり、この技法では、プライマリ・コンピュータは、そのメモリの内容およびプロセッサの状態を定期的にセカンダリ・コンピュータにコピーする。ミラーリングは、パーティションがアクセスするメモリの変化およびプライマリ・コンピュータでパーティションを実行するプロセッサの状態の変化を追跡することと、プライマリ・コンピュータでのパーティションの実行を定期的に休止することと、追跡された変化を、ネットワークを介してセカンダリ・コンピュータに送信することと、セカンダリ・コンピュータが該追跡された変化の受信を確認するのを待つことと、休止していたパーティションの実行を再開することと、を含む。プライマリ・コンピュータが故障した場合、セカンダリ・コンピュータは、追跡済みの変化およびプロセッサ状態を用い、パーティション中で実行されているアプリケーションには透過的な仕方で、プライマリ・コンピュータによって実行されていたパーティションの実行を開始する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
セカンダリ・コンピュータ中のメモリ・エラーに応じ、プライマリ・コンピュータ中のオブジェクトを移動させる技術を提供する。
【課題を解決するための手段】
【０００５】
上記のための方法、コンピュータ可読ストレージ媒体、およびコンピュータが提供される。本発明の一つの実施形態において、プライマリ・サーバでパーティションが実行され、該パーティションがプライマリ・サーバの第一メモリ・ブロック・アドレスの第一メモリ・ロケーションにアクセスする。セカンダリ・サーバの第一対応メモリ・ロケーションがプライマリ・サーバの第一メモリ・ロケーションに対応していて、セカンダリ・サーバの該第一対応メモリ・ロケーションがエラーを有する場合、プライマリ・サーバの第一メモリ・ロケーションからプライマリ・サーバの第二メモリ・ロケーションにオブジェクトが移動される。
【図面の簡単な説明】
【０００６】
【図１】本発明の一つの実施形態を実装するための例示的なシステムのハイレベルのブロック図を示す。
【図２】本発明の一つの実施形態による、ネットワークおよびセカンダリ・ストレージ・デバイスを介して接続された例示的なサーバ・コンピュータ群のハイレベルのブロック図を示す。
【図３】本発明の一つの実施形態による、メモリ・テーブルのための例示的なデータ構造体のブロック図を示す。
【図４】本発明の一つの実施形態による、チェックポイントに対する例示的な処理のフロー・チャートを示す。
【図５】本発明の一つの実施形態による、メモリ・エラーに対処するための例示的な処理のフロー・チャートを示す。
【図６】本発明の一つの実施形態による、プライマリ・サーバの故障に対処するための例示的な処理のフロー・チャートを示す。
【図７】本発明の一つの実施形態による、セカンダリ・サーバの故障に対処するための例示的な処理のフロー・チャートを示す。
【発明を実施するための形態】
【０００７】
添付の図面は、本発明の単なる例示的な実施形態を表しているだけであり、したがって、本発明の他の実施形態の範囲を限定するものではない。
【０００８】
図面を参照すると（図面中の同様の番号は同様な部分を表している）、図１は、本発明の一つの実施形態による、ネットワーク１３０に接続されたサーバ・コンピュータ・システム１００のハイレベルのブロック図表現を示す。本発明の諸実施形態のメカニズムおよび装置は、任意の適切なコンピューティング・システムにも同様に適用される。サーバ・コンピュータ・システム１００の主要コンポーネントには、一つ以上のプロセッサ１０１、メモリ１０２、ターミナル・インターフェース・ユニット１１１、ストレージ・インターフェース・ユニット１１２、Ｉ／Ｏ（入出力）デバイス・インターフェース・ユニット１１３、およびネットワーク・インターフェース・ユニット１１４が含まれ、これらの全ては、内部コンポーネント間の通信のため、メモリ・バス１０３、Ｉ／Ｏバス１０４、およびＩ／Ｏバス・インターフェース・ユニット１０５を介して、直接または間接的に通信可能に接続されている。
【０００９】
サーバ・コンピュータ・システム１００は、一つ以上の汎用プログラム可能中央処理ユニット（ＣＰＵ）１０１Ａ、１０１Ｂ、１０１Ｃ、および１０１Ｄを含み、本明細書ではこれらを総称してプロセッサ１０１と言う。一つの実施形態において、サーバ・コンピュータ・システム１００は、比較的大きなシステムでは、通常、複数のプロセッサを備えるが、また一方、別の実施形態では、サーバ・コンピュータ・システム１００は、上記に換えて単一ＣＰＵのシステムであってよい。各プロセッサ１０１は、メモリ１０２に格納された命令を実行し、一つ以上のレベルのオンボード・キャッシュを含むことが可能である。
【００１０】
一つの実施形態において、メモリ１０２には、データおよびプログラムを格納またはエンコードするためのランダムアクセス半導体メモリ、ストレージ・デバイス、またはストレージ媒体（揮発性あるいは不揮発性）を含めることができる。別の実施形態において、メモリ１０２は、サーバ・コンピュータ・システム１００の仮想メモリ全体を表し、また、サーバ・コンピュータ・システム１００に直接、またはネットワーク１３０を介して接続された他のコンピュータ・システムの仮想メモリを含んでよい。メモリ１０２は、概念上は単一のモノリシック・エンティティであるが、他の実施形態において、メモリ１０２は、キャッシュおよび他のメモリ・デバイスの階層など、もっと複雑な機構である。例えば、メモリは複数レベルのキャッシュを含むことができ、これらのキャッシュは、機能別にさらに分割し、一つのキャッシュは命令を保持し、別のキャッシュは一つまたは複数のプロセッサにより使用される非命令のデータを保持するようにすることができる。さらに、メモリは、様々ないわゆる不均一メモリ・アクセス（ＮＵＭＡ）コンピュータ・アーキテクチャにおいて知られるように、分散させ、相異なるＣＰＵ群またはＣＰＵ群のセットに関連付けることが可能である。
【００１１】
メモリ１０２は、複数のパーティション１３４、ハイパーバイザ１３６、およびメモリ・テーブル１４０を含んで示されている。パーティション１３４、ハイパーバイザ１３６、およびメモリ・テーブル１４０は、サーバ・コンピュータ・システム１００中のメモリ１０２内に格納されて示されているが、別の実施形態では、これらの一部または全部を異なるコンピュータ・システムに置き、リモートから、例えばネットワーク１３０を介してアクセスすることもできる。さらに、サーバ・コンピュータ・システム１００は、サーバ・コンピュータ・システム１００のプログラムが、複数の小型ストレージ・エンティティへのアクセスの代わりに、あたかも大きな単一のストレージ・エンティティにだけアクセスできるように動作することを可能にする仮想アドレッシング・メカニズムを用いることが可能である。従って、パーティション１３４、ハイパーバイザ１３６、およびメモリ・テーブル１４０は、メモリ１０２中に所在するものとして示されているが、これらの構成要素は、必ずしも、すべてが揃って同じストレージ・デバイスに同時に含まれている必要はない。
【００１２】
パーティション１３４の各々は、アプリケーション（ＡＰＰ）１４４、オペレーティング・システム（ＯＳ）１４６、およびパーティション・データ１４８を含む。任意の数のパーティション１３４をサポートでき、パーティション１３４がコンピュータ１００に追加されたりこれから削除されたりするのに応じて、何時においてもコンピュータ１００中に所在するパーティション１３４の数を動的に変更することが可能である。パーティション１３４の各々は、別個のまたは独立したメモリ空間においてプロセッサ１０１上で実行される命令を含む。様々な実施形態において、アプリケーション１４４は、ユーザ・アプリケーション、第三者アプリケーション、またはこれらの任意の部分、複合体もしくは組み合わせとして実装される。アプリケーション１４４およびオペレーティング・システム１４６は、プロセッサ１０１上で実行される命令、またはプロセッサ１０１上で実行される命令によって解釈されるステートメントを含む。アプリケーション１４４の各々は、相互に同じであっても異なっていてもよく、オペレーティング・システム１４６の各々も、相互に同じであっても異なっていてもよく、そして、データ１４８の各々も、相互に同じであっても異なっていてもよい。
【００１３】
ハイパーバイザ１３６は、メモリ１０２内に格納されているものとして示されているが、他の実施形態では、ハイパーバイザ１３６の全部または一部をファームウェアまたはハードウェアに実装することが可能である。ハイパーバイザ１３６は、ページ・テーブル管理などの低レベルの管理機能と、また、パーティション１３４の生成および削除、同時Ｉ／Ｏメンテナンス、並びに、様々なパーティション１３４へのプロセッサ、メモリ、および他のハードウェアまたはプログラム・リソースの割り当て／割り当て解除などの高レベルな管理機能との双方を実施することができる。ハイパーバイザ１３６は、パーティション１３４への共用リソースの割り当て、ロッキング、およびロッキング解除、並びにパーティション１３４による共用リソースへのアクセスを制御し、サーバ・コンピュータ・システム１００内のパーティション１３４のセキュリティおよび分離性を確実にする。ハイパーバイザは、プロセッサ１０１上のパーティション１３４の実行を開始、停止、および一時中止（サスペンド）する。
【００１４】
ハイパーバイザ１３６は、コンピュータ１００中の利用可能なリソースの一部を、静的または動的に、各パーティション１３４に割り当てる。例えば、各パーティション１３４に、一つ以上のプロセッサ１０１、その上で実行される一つ以上のハードウェア・スレッド、およびアクセスのために利用可能なメモリ空間の一部を割り当てることができる。パーティション１３４は、特定のプログラムおよびプロセッサ１０１などのハードウェア・リソースを共用することができ、そのため所与のリソースを複数のパーティション１３４で利用することができる。上記に換えて、プログラムおよびハードウェア・リソースを、一回に一つだけのパーティション１３４に割り当てることも可能である。さらなるリソース、例えば大容量ストレージ、バックアップ・ストレージ、ユーザ・インプット、ネットワーク接続、およびそれらのＩ／Ｏアダプタなどが、通常、一つ以上のパーティション１３４に割り当てられる。リソースは、複数のパーティション１３４が同じバス上のリソースを共用している状態において、例えば、バス単位の割り当てまたはリソース単位の割り当てなど、多くの方法で割り当てることが可能である。いくつかのリソースを、同時に複数のパーティション１３４に割り当てることができる。本明細書で挙げるリソースは単なる例であって、割り当て可能な任意の適切なリソースを用いることができる。
【００１５】
一つの実施形態において、パーティション１３４もしくはハイパーバイザ１３６またはその両方は、以下で図２、３、４、５、６、および７を参照してさらに説明するように、諸機能を実施するため、プロセッサ１０１上で実行される命令、またはプロセッサ１０１上で実行される命令によって解釈されるステートメントを含む。別の実施形態において、パーティション１３４もしくはハイパーバイザ１３６またはその両方は、マイクロコードまたはファームウェアで実装することができる。別の実施形態において、ハイパーバイザ１３６は、論理ゲート、半導体デバイス、チップ、回路、回路カード、もしくは他の物理ハードウェア・デバイスまたはこれらの組み合わせを用いてハードウェアで実装することが可能である。
【００１６】
メモリ・バス１０３は、プロセッサ１０１、メモリ１０２、およびＩ／Ｏバス・インターフェース・ユニット１０５の間でデータを転送するためのデータ通信経路または通信ファブリックを提供する。Ｉ／Ｏバス・インターフェース・ユニット１０５は、様々なＩ／Ｏユニットとの間でデータを転送するためのＩ／Ｏバス１０４にさらに接続される。Ｉ／Ｏバス・インターフェース・ユニット１０５は、Ｉ／Ｏバス１０４を介して、Ｉ／Ｏプロセッサ（ＩＯＰ）またはＩ／Ｏアダプタ（ＩＯＡ）とも呼ばれる、複数のＩ／Ｏインターフェース・ユニット１１１、１１２、１１３、および１１４と通信する。
【００１７】
Ｉ／Ｏインターフェース・ユニットは、様々なストレージおよびＩ／Ｏデバイスとの通信をサポートする。例えば、ターミナル・インターフェース・ユニット１１１は、一つ以上のユーザＩ／Ｏデバイスの接続をサポートし、これらデバイスは、（ビデオ・ディスプレイ・デバイス、プロジェクタ、スピーカ、テレビジョン・セットなどの）ユーザ出力デバイスおよび（カメラ、キーボード、マウス、キーパッド、タッチパッド、トラックボール、ボタン、無線識別タグ、ライトペン、指、スタイラスペン、他のポインティング・デバイスなどの）ユーザ入力デバイスを含み得る。ユーザは、ユーザＩ／Ｏデバイス１２１およびサーバ・コンピュータ・システム１００に入力データおよびコマンドを供給するために、ユーザ・インターフェースを使ってユーザ入力デバイスを操作することができ、ユーザ出力デバイスを介して出力データを受け取ることができる。例えば、ユーザ・インターフェースは、ディスプレイ・デバイス上に表示するなど、ユーザＩ／Ｏデバイス１２１を介して提供することが可能である。ユーザＩ／Ｏデバイス１２１は、任意のサイズとすることができ、複数のユーザが同時にまたは協働してディスプレイ・デバイスを見たりこれにタッチしたりするように調整することが可能で、一つの実施形態では、任意のユーザがディスプレイ・デバイスの任意の場所にタッチすることができる。
【００１８】
ストレージ・インターフェース・ユニット１１２は、一つ以上のディスク・ドライブまたは直接アクセス・ストレージ・デバイス１２５（これらは、一般に回転磁気ディスク・ドライブ・ストレージ・デバイスであるが、これに換えて、ホスト・コンピュータには単一の大容量ストレージ・デバイスのように見えるよう構成されたディスク・ドライブのアレイを含め、他のストレージ・デバイスにすることもできよう）の接続をサポートする。別の実施形態において、ストレージ・デバイス１２５は、任意の種類のセカンダリ・ストレージ・デバイスを用いて実装することが可能である。メモリ１０２の内容、またはその任意の部分を、必要に応じストレージ・デバイス１２５に格納し、これから読み出すことができる。Ｉ／Ｏデバイス・インターフェース・ユニット１１３は、プリンタまたはファックス・マシンなど、様々な他の入出力デバイスまたは他の種類のデバイスのいずれに対してもインターフェースを提供する。ネットワーク・インターフェース・ユニット１１４は、サーバ・コンピュータ・システム１００から他のデジタル・デバイスおよびコンピュータ・システムへの一つ以上の通信経路を提供し、かかる経路は、例えば、一つ以上のネットワーク１３０を含み得る。
【００１９】
図１中に示されたメモリ・バス１０３は、プロセッサ１０１、メモリ１０２、およびＩ／Ｏバス・インターフェース・ユニット１０５の間に直接の通信経路を提供する、比較的簡単な単一のバス構造体として示されているが、実際は、メモリ・バス１０３は、複数の相異なるバスまたは通信経路を含み得、これらは、階層的、星状、またはウェブ構成中のポイントツーポイント・リンク、複数階層バス、並列および冗長経路、または任意の他の適切な種類の構成など、任意の様々な形に配置することができる。さらに、Ｉ／Ｏバス・インターフェース・ユニット１０５およびＩ／Ｏバス１０４は、単一の個別ユニットとして示されているが、実際は、サーバ・コンピュータ・システム１００は、複数のＩ／Ｏバス・インターフェース・ユニット１０５および複数のＩ／Ｏバス１０４を含み得る。複数のＩ／Ｏインターフェース・ユニットが示されており、これらが、様々なＩ／Ｏデバイスに及ぶ様々な通信経路からのＩ／Ｏバス１０４を分離しているが、他の実施形態では、Ｉ／Ｏデバイスの一部または全部が、一つ以上のシステムＩ／Ｏバスに直接接続される。
【００２０】
様々な実施形態において、サーバ・コンピュータ・システム１００は、マルチユーザ・メインフレーム・コンピュータ・システムであるか、シングルユーザ・システムであるか、または、直接のユーザ・インターフェースをほとんどもしくは全く持たないが、他のコンピュータ・システム（クライアント）からの要求を受信するサーバ・コンピュータもしくは類似のデバイスである。他の実施形態において、サーバ・コンピュータ・システム１００は、デスクトップ・コンピュータ、携帯コンピュータ、ラップトップ・コンピュータまたはノートブック・コンピュータ、タブレット・コンピュータ、ポケット・コンピュータ、電話、スマートフォン、ページャ、自動車、テレビ会議システム、電気器具、または、任意の他の適切な種類の電子デバイスとして実装される。
【００２１】
ネットワーク１３０は、任意の適切なバス、ネットワーク、またはこれらの複合体または組み合わせであってよく、サーバ・コンピュータ・システム１００に出入りするデータもしくはコードまたはその両方の通信に適した任意の適切なプロトコルをサポートすることができる。様々な実施形態において、ネットワーク１３０は、サーバ・コンピュータ・システム１００に直接にまたは間接的に接続されたストレージ・デバイスまたはストレージ・デバイスの組み合わせを表し得る。別の実施形態において、ネットワーク１３０は、無線通信をサポートすることが可能である。別の実施形態では、ネットワーク１３０は、電話回線またはケーブルなど、有線の通信をサポートすることができる。別の実施形態では、ネットワーク１３０は、インターネットであってよく、ＩＰ（インターネット・プロトコル）をサポートすることが可能である。別の実施形態では、ネットワーク１３０は、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）として実装される。別の実施形態では、ネットワーク１３０は、ホットスポット・サービス・プロバイダのネットワークとして実装される。別の実施形態では、ネットワーク１３０は、イントラネットとして実装される。別の実施形態では、ネットワーク１３０は、任意の適切なセル方式データ・ネットワーク、セルベースの無線ネットワーク技術、または無線ネットワークとして実装される。別の実施形態では、ネットワーク１３０は、任意の適切なバス、ネットワーク、またはこれらの任意の複合体または組み合わせとして実装される。
【００２２】
図１は、サーバ・コンピュータ・システム１００およびネットワーク１３０の代表的な主要コンポーネントを示すことを意図している。但し、個別のコンポーネントは図１に表されたよりも高い複雑性を有し得、図１に示された以外のまたはこれらに追加されたコンポーネントが存在し得て、かかるコンポーネントの数、種類、および構成は多種多様であり得る。かかるさらなる複雑性またはさらなる変形のいくつかの具体例が本明細書で開示され、これらは例示のためだけのものであり、これらだけが必ずしもかかる変形なのではない。図１に示され、本発明の様々な実施形態を実装する多様なプログラム・コンポーネントは、様々なコンピュータ・アプリケーション、ルーティン、コンポーネント、プログラム、オブジェクト、モジュール、データ構造体などの使用を含め、多くの仕方で実装することができ、以降、これらを「コンピュータ・プログラム」または単に「プログラム」と言う。
【００２３】
これらコンピュータ・プログラムは一つ以上の命令またはステートメントを含み、様々な時点でサーバ・コンピュータ・システム１００中の様々なメモリおよびストレージ・デバイスに常駐し、サーバ・コンピュータ・システム１００中の一つ以上のプロセッサによって読み取られ実行されたとき、または一つ以上のプロセッサによって実行された命令によって解釈されたとき、サーバ・コンピュータ１００に、本発明の諸実施形態の様々な態様を含むステップまたは要素を実行するのに必要な動作を遂行させる。本発明の実施形態の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化することができる。したがって、本発明の実施形態の態様は、全体がハードウェアの実施形態、全体がプログラムの実施形態（ファームウェア、常駐プログラム、マイクロコードなどを含み、これらはストレージ・デバイスに格納される）、あるいは、プログラムおよびハードウェア態様を組み合わせた実施形態の形を取ることができ、これらは本明細書では一般に全て「回路」、「モジュール」、または「システム」と称されることがある。さらに、本発明の諸実施形態は、具現化されたコンピュータ可読プログラム・コードを有する、一つ以上のコンピュータ可読媒体中に具現化されたコンピュータ・プログラム製品の形を取ることも可能である。
【００２４】
一つ以上のコンピュータ可読媒体の任意の組み合わせを用いることが可能である。コンピュータ可読媒体は、コンピュータ可読信号媒体であっても、コンピュータ可読ストレージ媒体であってもよい。コンピュータ可読ストレージ媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的、または半導体の、システム、装置、またはデバイス、あるいは前述の任意の適切な組み合わせであってよい。コンピュータ可読ストレージ媒体のさらに具体的な例（非包括的リスト）は、一つ以上の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク（例えば、ストレージ・デバイス１２５）、ランダム・アクセス・メモリ（ＲＡＭ）（例えば、メモリ１０２）、読み取り専用メモリ（ＲＯＭ）、消去およびプログラム可能読み取り専用メモリ（ＥＰＲＯＭ）またはフラッシュ・メモリ、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、または前述の任意の適切な組み合わせを含み得る。本明細書の文脈において、コンピュータ可読ストレージ媒体は、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連させて使用するためのプログラムを包含または格納できる任意の有形媒体であってよい。
【００２５】
コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現化されたコンピュータ可読プログラム・コードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、さまざまな形態の任意の形を取ることが可能である。コンピュータ可読信号媒体は、コンピュータ可読ストレージ媒体ではないが、命令実行システム、装置、もしくはデバイスによって、またはこれらに関連させて使用するためのプログラムの通信、伝播、または伝送を行う任意のコンピュータ可読媒体であってよい。コンピュータ可読媒体上に具現化されたプログラム・コードは、以下に限らないが、ワイヤレス、有線、光ファイバ・ケーブル、無線周波、または前述の任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【００２６】
本発明の実施形態の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、オブジェクト指向プログラミング言語および手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合わせで記述することができる。このプログラム・コードは、ユーザのコンピュータで専ら実行してもよく、遠隔のコンピュータで部分的に実行してもよく、あるいは遠隔のコンピュータまたはサーバで専ら実行してもよい。後者の場合は、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することもでき、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことも可能である。
【００２７】
方法、装置（システム）およびコンピュータ・プログラム製品のフロー・チャートおよびブロック図を参照しながら、本発明の実施形態の態様が以下に説明される。フロー・チャートおよびブロック図の各ブロック、ならびに、フロー・チャートおよびブロック図のブロックの組み合わせは、コンピュータ可読媒体中に具現化されたコンピュータ・プログラム命令によって実装することが可能である。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに提供し、そのコンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フロー・チャートおよびブロック図のブロック中に特定されている機能／動作を実装するための手段を生成するようにすることができる。また、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令することが可能なこれらのコンピュータ・プログラム命令を、コンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フロー・チャートおよびブロック図のブロック中に特定されている機能／動作を実装する命令群を含む製造品を作り出せるようにすることが可能である。
【００２８】
本発明の様々な実施形態の機能を定義するコンピュータ・プログラムを、動作可能にまたは通信可能に（直接または間接的に）一つまたは複数のプロセッサと接続できる様々な有形のコンピュータ可読ストレージ媒体を用いて、コンピュータ・システムに供給することができる。さらに、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードし、そのコンピュータ上、他のプログラム可能装置上、または他のデバイス上で一連のオペレーション・ステップを実行させて、コンピュータ実装のプロセスを作り出し、当該コンピュータ上もしくは他のプログラム可能装置上で実行される命令が、フロー・チャートおよびブロック図のブロック中に特定されている機能／動作を実装するためのプロセスを提供するようにすることも可能である。
【００２９】
図面中のフロー・チャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品から可能となる実装のアーキテクチャ、機能性、およびオペレーションを示している。この点に関し、フロー・チャートまたはブロック図中の各ブロックは、特定の論理機能を実装するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。一部の実施形態では、ブロック中に記載された機能が、図面に記載された順序から外れて行われることがある。例えば、連続して示された２つのブロックが、関与する機能性によっては、実際にはほぼ同時に実行されることがあり、時にはこれらのブロックが逆の順序で実行されることもあり得る。ブロック図およびフロー・チャートの各ブロック、およびそれらのブロックの組み合わせは、特定の機能または動作を実施する特殊用途ハードウェア・ベースのシステム、または特殊用途ハードウェアとコンピュータ命令との組み合わせによって実装が可能である。
【００３０】
また、本発明の諸実施形態は、クライアント企業、ノンプロフィット組織、政府機関、または内部組織構造体とのサービス契約の一部として提供することもできる。これらの実施形態の態様は、本明細書に記載の方法の一部または全部を実装するコンピューティング・サービス（例えば、コンピュータ可読コード、ハードウェア、およびウェブ・サービス）を実施するためのコンピュータ・システムを構成すること、およびそれらのサービスを展開することを含み得る。また、これらの実施形態の態様には、クライアント会社を分析すること、分析に応じて提案を生成すること、それら提案の部分を実装するためのコンピュータ可読コードを作成すること、そのコンピュータ可読コードを既存のプロセス、コンピュータ・システム、およびコンピューティング・インフラストラクチャに組み込むこと、本明細書に記載の方法およびシステムの使用を計量すること、ユーザに費用を割り当てること、およびユーザにこれらの方法およびシステムの使用の費用を請求することを含めることもできよう。さらに、以降で説明する様々なプログラムは、それらが本発明の特定の実施形態中に実装された対象のアプリケーションに基づいて識別することができよう。但し、以下のどの特定のプログラム用語も単に便宜上使用されているものであり、従って、本発明の実施形態は、かかる用語によって識別または暗示されるいかなる特定のアプリケーションにおける使用にだけ限定されるものではない。図１中に示された例示的な実施形態は、本発明を限定することは意図されていない。実際上、本発明の実施形態の範囲から逸脱することなく、他の代替ハードウェアもしくはプログラム環境またはその両方を用いることが可能である。
【００３１】
図２は、本発明の一つの実施形態による、ネットワーク１３０およびストレージ・デバイス１２５を介して接続された、例示的なサーバ・コンピュータ・システムＡ１００−１、例示的なサーバ・コンピュータ・システムＢ１００−２、例示的なサーバ・コンピュータ・システムＣ１００−３、および例示的なサーバ・コンピュータ・システムＤ１００−４のハイレベルのブロック図を示す。サーバ・コンピュータ・システム１００−１、１００−２、１００−３、および１００−４は、サーバ・コンピュータ・システム１００の例であり、サーバ・コンピュータ・システム１００と総称される。サーバ・コンピュータＡ１００−１は、パーティション１３４−１、パーティション１３４−２、ハイパーバイザ１３６、およびメモリ・テーブル１４０−１を含む。パーティション１３４−１は、アプリケーション１４４−１、オペレーティング・システム１４６−１、およびデータ１４８−１を含み、本明細書ではこれらをオブジェクトと言う。パーティション１３４−２は、パーティション１３４−１、１３４−３、１３４−４、１３４−５、１３４−６、１３４−７、および１３４−８と同一のまたは相異なるアプリケーション、オペレーティング・システム、およびデータを含んでよい。
【００３２】
サーバ・コンピュータＢ１００−２は、パーティション１３４−３、パーティション１３４−４、ハイパーバイザ１３６、およびメモリ・テーブル１４０−２を含む。パーティション１３４−３は、アプリケーション１４４−２、オペレーティング・システム１４６−２、およびデータ１４８−２を含み、本明細書ではこれらをオブジェクトと言う。パーティション１３４−３は、パーティション１３４−１、１３４−２、１３４−４、１３４−５、１３４−６、１３４−７、および１３４−８と同一のまたは相異なるアプリケーション、オペレーティング・システム、およびデータを含んでよい。サーバ・コンピュータＣ１００−３は、パーティション１３４−５、パーティション１３４−６、ハイパーバイザ１３６、およびメモリ・テーブル１４０−３を含む。パーティション１３４−５は、アプリケーション１４４−３、オペレーティング・システム１４６−３、およびデータ１４８−３を含み、本明細書ではこれらをオブジェクトと言う。パーティション１３４−６は、パーティション１３４−１、１３４−２、１３４−３、１３４−４、１３４−５、１３４−７、および１３４−８と同一のまたは相異なるアプリケーション、オペレーティング・システム、およびデータを含んでよい。サーバ・コンピュータＤ１００−４は、パーティション１３４−７、パーティション１３４−８、ハイパーバイザ１３６、およびメモリ・テーブル１４０−４を含む。パーティション１３４−７は、アプリケーション１４４−４、オペレーティング・システム１４６−４、およびデータ１４８−４を含み、本明細書ではこれらをオブジェクトと言う。パーティション１３４−８は、パーティション１３４−１、１３４−２、１３４−３、１３４−４、１３４−５、１３４−６、および１３４−７と同一のまたは相異なるアプリケーション、オペレーティング・システム、およびデータを含んでよい。
【００３３】
パーティション１３４−１、１３４−２、１３４−３、１３４−４、１３４−５、１３４−６、１３４−７、および１３４−８は、パーティション１３４（図１）の例であり、パーティション１３４と総称される。メモリ・テーブル１４０−１、１４０−２、１４０−３、および１４０−４は、メモリ・テーブル１４０（図１）の例であり、メモリ・テーブル１４０と総称される。アプリケーション１４４−１、１４４−２、１４４−３、および１４４−４は、アプリケーション１４４（図１）の例であり、アプリケーション１４４と総称される。アプリケーション１４４−１、１４４−２、１４４−３、および１４４−４は互に同一であっても異なっていてもよい。オペレーティング・システム１４６−１、１４６−２、１４６−３、および１４６−４は、オペレーティング・システム１４６（図１）の例であり、オペレーティング・システム１４６と総称される。オペレーティング・システム１４６−１、１４６−２、１４６−３、および１４６−４は互に同一であっても異なっていてもよい。データ１４８−１、１４８−２、１４８−３、および１４８−４は、データ１４８（図１）の例であり、データ１４８と総称される。データ１４８−１、１４８−２、１４８−３、および１４８−４は互に同一であっても異なっていてもよい。
【００３４】
データ１４８−１、１４８−２、１４８−３、および１４８−４は、それぞれのパーティション１３４−１、１３４−３、１３４−５、および１３４−７の実行の現在状態を表す状態情報を含むことができる。パーティション１３４−１、１３４−３、１３４−５、および１３４−７は、それぞれのデータ１４８−１、１４８−２、１４８−３、および１４８−４を含むが、さらに各パーティションがまだネットワーク１３０にまたはストレージ・デバイス１２５に書き込んでいないバッファ・データも含み得る。
【００３５】
パーティション１３４が実行されているサーバ・コンピュータは、当該パーティション１３４に対するプライマリ・サーバである。パーティション１３４は、そのセカンダリ・サーバ上では実行されない。代わりに、パーティション１３４はセカンダリ・サーバにミラーされる。すなわち、パーティション１３４のアプリケーションおよびオペレーティング・システム１４６がセカンダリ・サーバのメモリ中にインストールされて存在し、プライマリ・サーバは、定期的に、プライマリ・サーバのパーティション１３４からセカンダリ・サーバのパーティション１３４にデータをコピーして、プライマリ・サーバの故障に対応してセカンダリ・サーバが新しいプライマリ・サーバとなることを可能にし、この新しいプライマリ・サーバのパーティション１３４は、故障したプライマリ・サーバのパーティション１３４が停止した点から、最低限の中断でパーティション１３４のユーザにはほぼ透過的に、実行を開始することができる。かくして、フェイルオーバ・オペレーションに先立って、或るサーバをパーティション１３４に対するセカンダリ・サーバとすることができ、フェイルオーバ・オペレーション後は、該サーバが同じパーティション１３４の新しいプライマリ・サーバになることができる。さらに、或るサーバが一つのパーティション１３４に対するプライマリ・サーバとなり、同時に、別のパーティション１３４に対するセカンダリ・サーバとなることも可能である。以下でさらに説明するように、パーティション１３４は、該パーティション１３４が実行されているプライマリ・サーバに所在するメモリ・テーブル１４０を使用する。サーバ１００−１、１００−２、１００−３、または１００−４のいずれもが、諸パーティションに対するセカンダリ・サーバでありながら、一つ以上のパーティションに対するプライマリ・サーバであることができる。さらに、或るサーバが、或る時点では或るパーティションに対するプライマリ・サーバであり、別の時点では同じパーティションに対しセカンダリ・サーバであってもよい。
【００３６】
図３は、本発明の一つの実施形態による、プライマリ・サーバＡのメモリ・テーブル１４０−１に対する例示的なデータ構造のブロック図を示す。メモリ・テーブル１４０−１は、プライマリ・サーバＡでのパーティション１３４の実行によってアクセスされた、プライマリ・サーバＡのメモリ１０２中の各々のメモリ・ブロック・アドレスに対し各一つの、任意の数のエントリを含む。これらエントリの各々は、メモリ・ブロック・アドレスのフィールド３０２を含む。また、これらエントリの各々は、プライマリ・サーバＡのエラーのフィールド３０４、セカンダリ・サーバＢのエラーのフィールド３０６、セカンダリ・サーバＣのエラーのフィールド３０８、およびセカンダリ・サーバＤのエラーのフィールド３１０を含むが、他の実施形態においては、ネットワーク１３０に接続されたプライマリおよびセカンダリ・サーバの数に対応して、これより多いまたは少ないフィールドが存在し得る。
【００３７】
各エントリのメモリ・ブロック・アドレスのフィールド３０２は、サーバのメモリ１０２内のメモリ・ロケーションまたはメモリ・ブロックのアドレスを指定する。様々なサーバにおける同じメモリ・ブロック・アドレス３０２は対応している。すなわち、これらは、相異なるサーバ中の相異なるメモリ中ではあるが、同一のメモリ・ブロック・アドレスを有する。様々な実施形態において、メモリ・ブロック・アドレスのフィールド３０２によって指定されるアドレスは、論理アドレス、物理アドレス、仮想アドレス、絶対アドレス、または相対アドレスであってよい。プライマリ・サーバＡのエラーのフィールド３０４、セカンダリ・サーバＢのエラーのフィールド３０６、セカンダリ・サーバＣのエラーのフィールド３０８、およびセカンダリ・サーバＤのエラーのフィールド３１０は、それぞれのサーバでの各エントリ中の、同じメモリ・ブロック・アドレス３０２によって指定されたそれぞれのメモリ・ロケーションのそれぞれのエラー状態を特定する。様々な実施形態において、このエラー状態は；それぞれのサーバのメモリ・ブロック・アドレス３０２のメモリ・ロケーションにエラーがないこと、それぞれのサーバのメモリ・ブロック・アドレス３０２のメモリ・ロケーションにエラーがあったが訂正されたこと、または当該メモリ・ブロック・アドレスのメモリ・ロケーションに訂正不可能なエラー、すなわち訂正できないエラーがあること；を示すことができる。
【００３８】
様々な実施形態において、訂正されたエラーは、エラーに遭遇したオペレーションの再試行を介し（そしてその再試行において問題に遭遇することなく）、もしくは、メモリ中のシングルビットまたはダブルビット・エラーを判定してエラーに遭遇したメモリ・ロケーションに訂正されたデータを再書き込みする、ＥＣＣ（エラー訂正符号）の使用によって、再書き込みでさらなるエラーに遭遇することなくサーバが訂正した、一時的、軽度な、または間欠的エラーであって、サーバは、そのエラーの訂正後、訂正されたエラーに遭遇したメモリ・ブロック・アドレスには継続してアクセスをすることが可能になる。様々な実施形態において、訂正されたエラーは、電磁ノイズ、宇宙線により、または、時間とともに劣化が続き、遂にはメモリに訂正不可能なエラーを引き起こすことになるメモリ・セルの劣化により生じた可能性がある。様々な実施形態において、訂正不可能なエラーは、ハード・エラー、非一時的エラー、サーバが訂正、修理、または回復することができないメモリ回路中の欠陥に起因したエラーであって、サーバは、訂正不可能なエラーを検出した後、またはエラーの訂正を試みて不成功だった後、当該メモリ・ロケーションへのアクセスを停止することになる。
【００３９】
メモリ・テーブル１４０−１は、セカンダリ・サーバＢのエラーを有するメモリ・ブロック数のフィールド３１２、セカンダリ・サーバＣのエラーを有するメモリ・ブロック数のフィールド３１４、セカンダリ・サーバＤのエラーを有するメモリ・ブロック数のフィールド３１６、をさらに含む。セカンダリ・サーバＢのエラーを有するメモリ・ブロック数のフィールド３１２、セカンダリ・サーバＣのエラーを有するメモリ・ブロック数のフィールド３１４、セカンダリ・サーバＤのエラーを有するメモリ・ブロック数のフィールド３１６は、それぞれのサーバにおける、訂正されたもしくは訂正不可能なエラーあるいはその両方のエラーを有するメモリ・ブロックの数をカウントする。
【００４０】
図４は、本発明の一つの実施形態による、チェックポイントの例示的な処理のフロー・チャートを示す。図４の論理は、サーバ１００−１、１００−２、１００−３、および１００−４など、任意のプライマリ・サーバで、任意の回数実施することができる。図４の論理は、図５、６、および７の論理とともに、同じまたは異なるサーバの同じまたは異なるプロセッサ上で、同時に、並行して、または交互に実行することが可能である。制御はブロック４００で開始される。次いで制御はブロック４０５に続き、プライマリ・サーバで実行されているパーティション１３４がチェックポイントに達する。チェックポイントは、或る時間期間の満了によって、または別のチェックポイント限界決定イベントによって示される。一つの実施形態において、ハイパーバイザ１３６は、タイマの発信を検出することによって、チェックポイントに到達したことを判断することができる。次いで、制御はブロック４１０に続き、チェックポイントに到達したのに応じ、プライマリ・サーバのハイパーバイザ１３６は、一つ又は複数のセカンダリ・サーバにパーティションのデータ１４８を送信し、セカンダリ・サーバは、そのパーティションのデータ１４８を受信し、それぞれのメモリに格納する。このような仕方で、プライマリ・サーバは、定期的にパーティションのデータ１４８をセカンダリ・サーバに送信する。次いで制御はブロック４１５に続き、プライマリ・サーバのハイパーバイザ１３６は（次のチェックポイントに到達するまでの期間の間）待つ。次いで制御は前述で説明したブロック４０５に戻る。
【００４１】
図５は、本発明の一つの実施形態による、メモリ・エラーに対処するための例示的な処理のフロー・チャートを示す。図５の論理は、サーバ１００−１、１００−２、１００−３、および１００−４など、任意のプライマリ・サーバで任意の回数実施することができる。制御はブロック５００で開始される。次いで制御はブロック５０５に続き、プライマリ・サーバで実行されるパーティション１３４は、プライマリ・サーバのメモリ１０２中のメモリ・ブロック・アドレスのメモリ・ロケーションにあるオブジェクトにアクセスする（読み取りまたは書き込み）。
【００４２】
次いで制御はブロック５１０に続き、プライマリ・サーバのオペレーティング・システム１４６は、実行中のパーティション１３４によってアクセス（読み取りまたは書き込み）される、プライマリ・サーバの第一メモリ・ロケーションが訂正されたエラーを有したか、またはセカンダリ・サーバの対応する（プライマリ・サーバの第一メモリ・ロケーションに対応する）メモリ・ロケーションがエラー（訂正済みまたは訂正不可能）を有するもしくは有したかどうかを判定する。ブロック５１０での判定が真の場合、実行中のパーティション１３４によってアクセス（読み取りまたは書き込み）される、プライマリ・サーバの第一メモリ・ロケーションは、訂正されたエラーを有したか、またはセカンダリ・サーバの対応するメモリ・ロケーション（プライマリ・サーバの第一メモリ・ロケーションに対応する）がエラーを有したかもしくは訂正不可能エラーを有し、したがって、制御はブロック５１５へと続き、実行中のパーティション１３４中のオペレーティング・システム１４６は、読み取りまたは書き込みオブジェクトをプライマリ・サーバの第一メモリ・ロケーションからプライマリ・サーバの第二メモリ・ロケーションに移動させる。この第二メモリ・ロケーションは、訂正不可能エラーを有することなく、または訂正されたエラーを有したこともなく、そして（随意的に）第二メモリ・ロケーションに対応するメモリ・ロケーション（この対応するメモリ・ロケーションはセカンダリ・サーバにある）は訂正不可能なエラーを有さず、訂正されたエラーを有したこともない。パーティションは、第一メモリ・ロケーションがエラーを有していたと判定されたとき、セカンダリ・サーバの対応するメモリ・ロケーションがエラーを有していたと判定されたとき、および、プライマリ・サーバにおいてオブジェクトを第一メモリ・ロケーションから第二メモリ・ロケーションに移動させているときには、セカンダリ・サーバで実行されない。オペレーティング・システム１４６は、エラー（訂正されたまたは訂正不可能）のあるセカンダリ・サーバの対応メモリ・ロケーションを有するプライマリ・サーバの第二メモリ・ロケーションへは、たとえそのプライマリ・サーバの第二メモリ・ロケーションにエラーがなくても、オブジェクトを移動させるのを避ける。
【００４３】
次いで制御はブロック５２０に続き、プライマリ・サーバのハイパーバイザ１３６は、プライマリ・サーバに接続された全ての他のサーバに対し、該プライマリ・サーバのメモリ中の訂正されたまたは訂正不可能なエラーを有するロケーション、および訂正されたまたは訂正不可能なエラーを有する該プライマリ・サーバのメモリ・ブロックの数を送信する。他のサーバは、それらのロケーションおよび数を受信し、それぞれのメモリ・テーブル中に格納する。次いで制御はブロック５０５に続き、パーティション１３４は、前述のように、プライマリ・サーバ上での実行を継続し、同一のまたは異なるメモリ・ロケーションの同一のまたは異なるオブジェクトにアクセスする。
【００４４】
ブロック５１０での判定が偽の場合は、プライマリ・サーバで実行中のパーティション１３４によってアクセスされたどのメモリ・ロケーションも訂正されたエラーを有したことがなく、プライマリ・サーバで実行中のパーティション１３４によってアクセスされたメモリ・ロケーションに対応する、セカンダリ・サーバのメモリ・ロケーションも訂正されたエラーを有したことがなく、訂正不可能なエラーを有したことがなかったので、制御はブロック５０５に戻り、パーティション１３４は、プライマリ・サーバ上での実行を継続し、ブロック５１５および５２０で述べた処理を行うことなく、前述のように、同一のまたは異なるメモリ・ロケーションの同一のまたは異なるオブジェクトにアクセスする。
【００４５】
図６は、本発明の一つの実施形態による、プライマリ・サーバの故障に対処するための例示的な処理のフロー・チャートを示す。図６に示された論理は、任意の回数実行することが可能で、サーバ・コンピュータ１００−１、１００−２、１００−３、および１００−４など、任意のサーバ・コンピュータで、実行することができる。制御はブロック６００で開始される。次いで制御はブロック６０５に続き、或るサーバ・コンピュータ１００のハイパーバイザ１３６が、プライマリ・サーバが故障したことを検出する。様々な実施形態において、ハイパーバイザ１３６は、特定の期間内に、プライマリ・サーバからメッセージ、パケット、信号、または他の通知を受信しないのに応じて、プライマリ・サーバが故障したと判定する。様々な実施形態において、ハイパーバイザ１３６は、ユーザＩ／Ｏデバイス１２１から、ネットワーク１３０から、またはハイパーバイザ１３６の設計者から、上記の期間の指定を受信する。一つの実施形態において、ハイパーバイザ１３６は、ハートビート・プロトコルを介してプライマリ・サーバが故障したことを判定する。様々な実施形態において、プライマリ・サーバは、プライマリ・サーバでの無限ループ、プライマリ・サーバへの（意図的なまたは意図的でない）電力の喪失、またはプライマリ・サーバでのプログラムまたはハードウェア・エラーに起因して故障した可能性がある。
【００４６】
このとき、制御はブロック６１０に続き、サーバ・コンピュータ１００のハイパーバイザ１３６は、（該故障したプライマリ・サーバに対するセカンダリ・サーバである全てのサーバの間から）他の全てのセカンダリ・サーバに比べて、訂正されたまたは訂正不可能なエラーを有するメモリ・ブロックの数が最少の、選択されたセカンダリ・サーバを選ぶ。
【００４７】
次いで制御はブロック６１５に続き、サーバ・コンピュータ１００のハイパーバイザ１３６は、故障したサーバ・コンピュータ上で（故障したサーバ・コンピュータの故障の前に）実行されていたパーティション１３４に対する新しいプライマリ・サーバとして、該選択されたセカンダリ・サーバを指定し、その新しいプライマリ・サーバ（選択されたセカンダリ・サーバ）上でパーティション１３４の実行を開始し、そして、該新しいプライマリ・サーバのパーティション１３４は、新しいプライマリ・サーバからパーティション・データ１４８を読み取り、そのパーティション・データ１４８を使って、パーティション１３４が実行されているプロセッサの状態、もしくはパーティション１３４が処理しているトランザクションもしくは要求の状態、またはその両方の状態を判断する。パーティション１３４は、新しいプライマリ・サーバのメモリ・テーブル１４０を用い、図４および図５の論理に沿って、新しいプライマリ・サーバ上で実行される。次いで制御はブロック６９９に続き、図６の論理は始めに戻る。
【００４８】
図７は、本発明の一つの実施形態による、セカンダリ・サーバの故障に対処するための例示的な処理のフロー・チャートを示す。図７に表された論理は、任意の回数実行することが可能で、サーバ・コンピュータ１００−１、１００−２、１００−３、および１００−４など、任意のプライマリ・サーバ・コンピュータで実行することができる。制御はブロック７００で開始される。次いで制御はブロック７０５に続き、プライマリ・サーバのハイパーバイザ１３６が、或るセカンダリ・サーバが故障したことを検出する。様々な実施形態において、ハイパーバイザ１３６は、特定の期間内に、セカンダリ・サーバからメッセージ、パケット、信号、または他の通知を受信しないのに応じて、プライマリ・サーバが故障したと判定する。一つの実施形態において、ハイパーバイザ１３６は、ハートビート・プロトコルを介してセカンダリ・サーバが故障したことを判定する。様々な実施形態において、セカンダリ・サーバは、セカンダリ・サーバでの無限ループ、セカンダリ・サーバへの（意図的なまたは意図的でない）電力の喪失、またはセカンダリ・サーバでのプログラムまたはハードウェア・エラーに起因して故障した可能性がある。次いで制御はブロック７１０に続き、セカンダリ・サーバが故障したことの検出に応じ、ハイパーバイザ１３６は、プライマリ・サーバのメモリ・テーブル１４０から、故障したセカンダリ・サーバに対する訂正されたおよび訂正不可能なエラーの表示を削除する。
【００４９】
次いで制御はブロック７１５に続き、セカンダリ・サーバが故障したことの検出に応じ、ハイパーバイザ１３６は、プライマリ・サーバのオペレーティング・システム１４６に当該セカンダリ・サーバが故障したことを通知する。この通知の受信を受けて、プライマリ・サーバのオペレーティング・システム１４６は、故障したセカンダリ・サーバのエラーのあったメモリ・ロケーションの回避を中止する。すなわち、プライマリ・サーバのオペレーティング・システム１４６は、セカンダリ・サーバに（訂正されたまたは訂正不可能な）エラーのある対応ロケーションを有していたプライマリ・サーバのメモリ・ロケーションへの、オブジェクトの格納を可能にする。次いで制御はブロック７９９に続き、図７の論理は始めに戻る。
【００５０】
このような仕方で、一つの実施形態において、パーティションは、フェイルオーバ・オペレーションの直後にメモリ・エラーに遭遇するのを避けることができる。
【００５１】
本明細書で使用される用語は、単に特定の実施形態を説明する目的のためのものであり、本発明を限定することは意図されていない。本明細書で用いられる、単数形「或る、一つの（“ａ”、“ａｎ”）」、および「該（“ｔｈｅ”）」は、文脈上明確に別途に示されていなければ、複数形も同じように含むことが意図されている。さらに、当然のことながら本明細書で用いられる「含む（“ｃｏｍｐｒｉｓｅ”）」および「含んでいる（“ｃｏｍｐｒｉｓｉｎｇ”）」は、述べられた特徴、整数、ステップ、オペレーション、要素、もしくはコンポーネント、またはこれらの組み合わせの存在を特定するが、一つ以上の他の特徴、整数、ステップ、オペレーション、要素、コンポーネント、もしくはこれらの群、またはこれらの組み合わせの存在または追加を排除するものではない。本発明の例示的な諸実施形態の前述の詳細な説明において、添付の図面（図中の同様な番号は同様な要素を表す）への参照が行われており、これらは本明細書の一部を形成し、これら図中では例証として本発明が実践可能な具体的な例示の実施形態が示されている。これらの実施形態は、当業者が本発明を実践することができるよう十分な詳しさで説明したが、他の実施形態を用いることも可能で、本発明の範囲から逸脱することなく、論理的、機械的、電気的なおよび他の変更を加えることが可能である。前述の説明において、本発明の実施形態の徹底的理解を提供するために、数々の具体的詳細が述べられた。但し、本発明の実施形態は、これらの具体的詳細がなくても実践することができる。他の諸例においては、本発明の実施形態を分かり難くしないために周知の回路、構造体、および技法は示さなかった。
【００５２】
本明細書内で用いた用語「実施形態」の種々の例は必ずしも同じ実施形態を言及しないが、するものもある。本明細書で例示された、または説明された一切のデータおよびデータ構造は、例示のためだけのものであり、他の実施形態では、異なるデータの量、データの種類、フィールド、フィールドの数および種類、フィールドの名称、行の数および種類、記録、エントリ、またはデータの編成を用いることが可能である。さらに、別個のデータ構造が必要ないように、任意のデータと論理と組み合わせることができる。したがって、前述の詳細な説明は限定する意味として取るべきではない。
【図１】
0006444400.tif 000002
【図２】
0006444400.tif 000003
【図３】
0006444400.tif 000004
【図４】
0006444400.tif 000005
【図５】
0006444400.tif 000006
【図６】
0006444400.tif 000007
【図７】
0006444400.tif 000008