(57)【要約】【課題】通常のコンピュータ動作に制約を加えることなく、主メモリ内に一貫した周期的更新状態を維持するための機構を提供し、これによって、コンピュータ・システムが、データまたは処理の連続性を損なうことなく、障害から回復できるようにする。【解決手段】典型的なコンピュータ・システムでは、プロセッサおよび入出力素子は、基本メモリを含む主メモリ・サブシステムに接続されている。本発明の実施形態では、この主メモリ・サブシステムにリード・バッファも添付される。通常処理の間、基本メモリに書き込まれたデータの予備画像が、リード・バッファによって捕獲される。リード・バッファ内に捕獲されたデータは、システムを以前のチェックポイントに復元させることができる。この構造およびプロトコルは、主メモリにおける一貫した状態を保証することができ、こうしてフォールト・トレラント処理を可能にする。【選択図】  図１
2007128540.tif 000002
【特許請求の範囲】
【請求項１】
チェツクポイント・メモリ（２１３）と基本メモリ（２１２）を有するコンピュータ・システム２００の稼動中のチェックポイント状態を維持する方法であって、該チェツクポイント・メモリが、後入れ先出しリード・バッファ・メモリ（２１６）を含み、該基本メモリと該後入れ先出しリード・バッファ・メモリが同じポートに接続され、更に該コンピュータ・システム（２００）が、各プロッセサが関連したプロッセサ・キャッシュ・メモリ（４２）を有する少なくとも１つのプロセッサ（２１８）を含む、該方法において、以下のステップをそなえることを特徴とする、
該プロッセサ・キャッシュ・メモリに記憶されたデータを該基本メモリにコピーして該基本メモリにおけるチェックポイントを確立し（２５０）、該後入れ先出しリード・バッファ・メモリに記憶されたデータを廃棄するステップ（２５２）であって、該チェックポイントが該コンピュータシステム２００の稼働中のチェックポイント状態を表す該ステップと
該基本メモリからデータを読出すステップ（２５４）、
該後入れ先出しリード・バッファ・メモリ内に該読出したデータを記憶することにより該読出されたデータを捕獲するステップ（２５６）、
一定の期間が経過するか又は障害が発生するまで該読出すステップと捕獲するステップを繰り返すステップ（２５８）、および
該プロッセサ・キャッシュ・メモリに記憶されたデータを該基本メモリにコピー該基本メモリにおけるチェックポイントを確立し、一定の期間が経過した時に、該後入れ先出しリード・バッファ・メモリに記憶されたデータを廃棄するステップ、
を備えることを特徴とする該方法。
【請求項２】
前記コンピュータ・システムにおける前記障害の検出に応答して、前記後入れ先出しリード・バッファ・メモリに記憶された前記読出されたデータを前記基本メモリにコピーすることにより、障害が生じたより前に確立されたチェックポイントに前記基本メモリを戻すステップ（２６６）と、正常動作を再開するステップとを更に含む請求項１に記載の方法。
【請求項３】
前記基本メモリと同じポートに接続され、さらに前記後入れ先出しリード・バッファ・メモリに接続されたシャドウ・メモリ（２２２）を更に備え、
該シャドウ・メモリの内容が前記基本メモリの内容を複写する様に、前記基本メモリに書き込まれた全てのデータを、最初に後入れ先出しリード・バッファ・メモリに記憶させないで、該シャドウ・メモリに記憶することにより、直接捕獲し、
前記コンピュータ・システムにおける障害の検出に応答して、該基本メモリが動作可能か否かをテストし（２６０）、
該基本メモリが動作可能で無い場合は、該後入れ先出しバッファ・メモリの内容を該シャドウ・メモリにコピーし、該障害が生じたより前に該基本メモリに対して確立されたチェックポイントに該シャドウ・メモリを戻し（２６２）、
該障害のある基本メモリの役割を該シャドウ・メモリに割り当て（２６４）、
該障害のある基本メモリの役割を実行する該シャドウ・メモリにより該コンピュータ・システムの動作を再開する
ことを特徴とする請求項２に記載の方法。
【請求項４】
前記コンピュータ・システムが、複数のプロッセサを含み、各プロッセサが関連したプロッセサ・キャッシュ・メモリ（４２）を有し、
前記コピーするステップは、同期した状態でプロッセサがに関連したプロッセサ・キャッシュ・メモリをコピーする該プロセッサを含む、請求項３に記載の方法。
【請求項５】
前記プロッセサ・キャッシュ・メモリをコピーするプロセッサの同期は、全てのプロッセサが、プロッセサに関連したプロッセサ・キャッシャ・、メモリのコピーが完了するまでプロッセサが正常稼働へ復帰するのを妨げることにより達成される請求項４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特にフォールト・トレラント・コンピュータ・システムのための、コンピュータ・メモリ・システムおよびチェックポインティング・プロトコル(checkpointing protocol)に関するものである。
【背景技術】
【０００２】
コンピュータにおけるフォールト・トレランスは、通常、マスキングと呼ばれるハードウエア集約的な技法、またはチェックポインティングと呼ばれるソフトウエアに基づく手法のいずれかによって実現されている。マスキングを達成するには、同一ハードウエアを複数系統備え、コンピュータ・プログラムを数個の独立した装置で並列に実行する。次に、これら装置の出力を比較し、それらの有効性を判定する。この技法の最も単純かつ古い実施形態では、３台の完全なコンピュータを装備し、それらの出力に単純な多数決方式を用いて、「正しい」出力を判定する。これらのコンピュータの内少なくとも２台が適正に動作しており、投票システム自体が正しく稼働している場合、誤動作しているコンピュータの潜在的に正しくない可能性がある出力は排除(outvote)され、実際には正しい答えがユーザに提示される。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
これよりはいくらか効率的なマスキングの別の実施形態もあるが、マスキング・システムは通常、障害を発生した構成要素の影響を排除するためにハードウエアを追加しなければならないため、コストが著しく増大するという問題がある。加えて、マスキングは、ハードウエアの障害に対する保護を行うに過ぎない。１つの装置に誤動作を発生させるソフトウエアのバグは、同じソフトウエアを実行する他の装置にも、同様に誤動作を発生させる。全ての出力が同じエラーを含み、その結果、このエラーは検出されずに通過してしまうことになる。
【０００４】
チェックポインティングと呼ばれる代替技法は、格段にコスト効率が高い方法で、障害に対する耐性を与える潜在的可能性を有する。この技法は、コンピュータ全体の状態を、周期的に、チェックポイントとして指定した時間間隔で記録する必要がある。障害は、ハードウエアの障害モニタによって（例えば、エラー検出コードを用いてエンコードされたデータに作用するデコーダ、温度または電圧センサ、あるいは別の同一の装置を監視する１つの装置によって）検出するか、またはソフトウエアの障害モニタ（例えば、データ構造内のスタック・ポインタまたはアドレス上で、範囲外状態をチェックする実行コードの一部として実行されるアサーション(assertion)）によって検出することができる。障害が検出された場合、回復するには、まず最初に診断を行い、可能であれば誤動作装置を迂回し、次いでシステムを最後のチェックポイントに戻し、このポイントから正常な動作を再開することが必要である。
【０００５】
回復が可能なのは、障害を発生したと識別されたあらゆる要素を、回復過程の間に迂回し、その後に十分なハードウエアが動作可能状態であり続ける場合である。例えば、マルチプロセッサ・システムでは、プロセッサの内少なくとも１つが機能し続ける限り、システムは動作し続けることができる。同様に、メモリのリマップを行うことができるシステム、あるいは代替ポートを通じてＩ／Ｏを割り当てなおすことができるシステムは、同様に、メモリまたはＩ／Ｏ資源の損失を克服することができる。更に、コンピュータ・システムにおいて見られる殆どの障害は、性質上瞬時的または間欠的であり、それら自体が一時的なグリッチ(glitch)に過ぎない。したがって、通常は、ハードウエアの迂回を全く行うことなく、かかる障害からの回復は可能である。しかしながら、瞬時的な障害および間欠的な障害は、永続的な障害と同様、障害時に操作されているデータを変転させる可能性があるので、かかるイベントの後にコンピュータが常に戻ってくる状態を有する必要がある。これが、周期的なチェックポイント状態(checkpointed state)の目的である。
【０００６】
チェックポイントは、典型的に５０ミリ秒程度毎に設けられているので、実行中のプログラムをその最後のチェックポイントまで後退させることは、通常ユーザには完全に透過的（トランスペアレント）である。適正に処理すれば、連続性の損失やデータの汚染(contamination)を発生することなく、全てのアプリケーションをその最後のチェックポイントから再開することができる。
【０００７】
チェックポインティングには、マスキングに比較して、２つの主要な利点がある。第１に、チェックポインティングは、実装にかかる費用が非常に少なくて済む。第２にチェックポインティングは、ハードウエア障害だけでなくソフトウエア障害に対する保護も提供する。第１の利点は、単純に、チェックポインティングは大量の同一ハードウエアの装備を必要としないという事実を反映したに過ぎない。第２の利点は、十分に検査され完成度の高いソフトウエアにおいては、殆どのソフトウエア・バグは例外的な状況においてのみ露見されるだけであるという事実の結果である。これが正しくなければ、バグは通常の検査時に発見され、除去されるであろう。かかる例外的な状況は、一般的に、非同期的なイベントによって発生する。非同期的なイベントとは、割り込みが発生して、あるシーケンスに続いてプログラムの実行を強制するが、割り込みが発生しなければそのシーケンスに続いて実行するようなことはない場合である。システムを一貫性のある状態に強制的に戻し、動作させ続けた場合、即ち、ソフトウエア・バグをハードウエアの過渡現象(transient)として扱った場合、システムが以前と正確に同じ状態で正確に同じ例外に遭遇する可能性は非常に低い。その結果、同じバグに２回遭遇する可能性は非常に低い。
【０００８】
また、チェックポインティングには、マスキングに比較して、２つの潜在的な欠点がある。第１に、マスキングは通常障害から瞬時的またはほぼ瞬時的に回復する。結果的に発生するあらゆるエラーは、単純にマスクしてしまうので、明確な回復は不要である。チェックポインティングは、ある種のソフトウエア・ルーチンを実行し、問題を診断し、コンピュータの永続的に誤動作を発生するあらゆる構成要素を迂回する必要がある。その結果、回復に要する時間は、典型的に、１秒程度であり、応答時間がミリ秒未満の単位であることを要求するリアル・タイム・アプリケーションでは、フォールト・トレランスを達成するためにこの技法を用いることができない場合がある。しかしながら、人が直接コンピュータと双方向処理を行う用途、例えば、トランザクション処理の用途では、１秒程度の一時的な割り込みは、問題なく容認可能であり、実際、通常では気付かれもしない。したがって、このチェックポインティングの潜在的な欠点は、この種の用途には無関係である。
【０００９】
第２に、チェックポインティングは、従来より、アプリケーション・レベルで達成されていた。したがって、アプリケーション・プログラマは、どのデータについてチェックポイント処理を行うのか、いつそれを行うべきかについて関与しなければならなかった。この要求は、プログラマにとっては重大な負担であり、フォールト・トレランスを達成する手段としての、チェックポインティングの使用普及を著しく妨げていた。
【００１０】
近年になって、システム・ソフトウエア・レベルでチェックポインティングを可能にする技法が開発されたので、アプリケーション・プログラマは、チェックポイント処理対象とすべきデータを識別しようとすることに気を使うことはなくなり、チェックポインティングが行われることを知る必要すらなくなった。これを可能にするには、システム自体が、実行させ得るアプリケーションには無関係に、周期的なチェックポイントを設けることができなければならない。Stifflerの米国特許第４，６５４，８１９号および第４，８１９，１５４号は、正しくこれを行うことができるコンピュータ・システムについて記載するものである。このシステムは、この種のチェックポインティングを達成するために、そのプロセッサの各々に、新しいチェックポイントを確立し、全ての変更データを主メモリにフラッシュ(flush out)できるようになるまで、全ての変更データをそのローカル・キャッシュに保持することを要求する。このようなキャッシュのことを、時としてブロッキング・キャッシュ(blocking cache)と呼ぶこともある。プロセッサは、そのブロッキング・キャッシュをフラッシュする前に、内容切り替え(context switch)を行い、この間に、そのプログラム・カウンタを含むその内部レジスタの内容を、スタック上に置き、このスタックを他の変更データ全てと共にフラッシュ（flush）する。その結果、内部的に一貫性のあるデータによって、一度でメモリを更新することにより、その後システムに障害が発生した場合でも、システムが安全に戻ることができるチェックポイントを確立する。主メモリ障害およびフラッシュ動作自体の間に発生する障害の双方を克服する機能を保証するためには、メモリを２系統備え、各データ項目を、主要位置およびシャドウ位置(shadow location)の双方に格納する。
【００１１】
この技法は、アプリケーション・プログラマに負担をかけずに、チェックポイントを確立するという目標は達成するものの、そのブロッキング・キャッシュの使用に依存することによる、ある種の欠点を有する。プロセッサは、現在変更されているラインを同時に全て書き戻す場合以外は、いずれのキャッシュ・ラインも主メモリに書き戻すことができないので、キャッシュのオーバーフローが発生したとき、またはあるプロセッサによって他のプロセッサのキャッシュに保持されているデータに対する要求が行われたときはいつでも、データをフラッシュしているプロセッサに、そのキャッシュ全体を書き出すように要求することなる。この要件は、標準的なキャッシュ・コヒーレンシ・プロトコル（例えば、Gallagherの米国特許第５，２７６，８４８号に記載されているプロトコル）の使用を妨げ、プログラムがかかる標準的プロトコルに基づいて実行される場合、潜在的なポーティング(porting)や性能上の問題を生ずる。
【００１２】
例えば、Kirrmann（米国特許第４，９０５，１９６号）およびLee et al.（"A Recovery Cache for the PDP-11" （ＰＤＰ−１１用回復キャッシュ）,  IEEE Trans. on Computers, １９８０年６月）によって、チェックポインティングの目的のためにデータを捕獲する別の方法が提案されている。Kirrmannの方法は、カスケード状メモリ格納素子を用いる。これは、主メモリと、それに続く２つのアーカイブ・メモリから成り、各アーカイブ・メモリは主メモリと同じサイズとなっている。主メモリへの書込みは、プロセッサによってライト・バッファにも行われる。チェックポイントを確立する時刻になった場合、バッファされたデータをプロセッサがまずアーカイブ・メモリの一方にコピーし、次いで第２のアーカイブ・メモリにコピーする。しかし、これらのコピーの一方の必要をなくする技法についても記載されている。２つのアーカイブ・メモリは、バッファからメモリへのコピーが行われている最中に障害が発生しても、それらの少なくとも一方が有効なチェックポイントを含むことを保証する。このアーキテクチャに伴う問題には、３系統のメモリを備えなければならないこと、アーカイブ・メモリのために速度の遅いメモリを使用すること、および３つのメモリ素子が同一バス上の異なるポートとなるためのプロセッサの処理能力に影響が及ぶことが含まれる。
【００１３】
Lee et al. による論文では、アプリケーションによって特定されるアドレス範囲内に該当する全てのメモリ位置について、更新データがメモリに書き込まれる前に、データを回復キャッシュにセーブする方法が論じられている。この方法は、アプリケーションによって指定される範囲内のメモリに対する全てのライトを、ライト前リード動作(read-before-write operations)に変換する。アプリケーションの実行の間に障害が発生した場合、回復キャッシュの内容を主メモリに格納し戻すことによって、アプリケーションがその現実行を開始した時点における状態に、それを回復する。この方法の問題の１つに、ライト後リード動作によるメモリ・サイクルの干渉のために、ホスト・システムの速度低下を招き、これによってバス・プロトコルの変更が余儀なくされることがあげられる。また、これもアプリケーション・プログラマがチェックポインティングの処理または考慮に関与することを要求する。
【００１４】
主メモリ以外に、ディスク上にデータのミラー(mirror)を作成する、別の技法が開発されている。ディスクのアクセスは主メモリのアクセスより数桁遅いので、このような方式は、データ・ファイルのミラー作成に限定されている。即ち、障害によってこれらのファイルへの主要アクセス経路が絶たれた場合に、バックアップをディスク・ファイルに供給する場合に限定されている。システムのユーザに対して透過的に、プログラムの連続性を保持したり、あるいは実行中のアプリケーションを回復する試みはなされていない。場合によっては、ミラー・ファイル同士の一貫性を保つことを保証するのでさえ不可能であり、それらは同一ファイルの別のコピーと一貫性があるに過ぎない。米国特許第５，２４７，６１８号は、かかる方式の一例を開示している。
【課題を解決するための手段】
【００１５】
本発明の実施形態は、主メモリ装置、およびコンピュータ・システムにおいて、従来のキャッシュ・コヒーレンシ・プロトコルおよび非ブロッキング・キャッシュの使用を許しつつ、コンピュータ・システムの主メモリにおいて、一貫性があり、周期的に更新されるチェックポイント状態を維持するためのプロセスを提供する。主メモリ装置は、１つ以上の論理ポートを介してアクセスされる。主メモリは、基本メモリ素子およびチェックポイント・メモリ素子を含み、これら双方はポートに結合されている。基本メモリ素子は、標準的な主メモリと同様にアクセスされる。チェックポイント・メモリ素子は、主メモリからのある種のデータ・アクセスを捕獲する。このデータ・アクセスが検出可能なのは、チェックポイント・メモリ素子が、基本メモリ素子と同じポートに接続されているからである。チェックポイント・メモリ素子は、基本メモリ素子とは物理的に別個のメモリ・モジュールとしてもよく、あるいはチェックポイント・メモリ素子および基本メモリ素子が、同一メモリ・モジュール内の異なるアドレスに位置していてもよい。これらの捕獲（capture）されたアクセスを用いて、次に主メモリにおける一貫したチェックポイント状態の存在を保証する。かかる主メモリ装置を用い、適切な検出および迂回手順を有するコンピュータ・システムは、データの保全性や処理の連続性を損なうことなく、障害から回復することが可能である。
【００１６】
典型的なコンピュータ・システムでは、プロセッサおよび入出力素子は、主メモリに接続されている。この接続は、典型的に、１系統以上のメモリ・バス、交差点スイッチ、またはその他の機構によって与えられる。主メモリは、１つ以上の論理ポートを有し、主メモリへのアクセスは、全てこれらを通じて行われる。
【００１７】
本発明の一実施形態では、コンピュータ・システムは、主メモリとバッファ・メモリとを有する。バッファ・メモリは、通常、後入れ先出しメモリまたはスタックであり、全てのデータの予備画像(pre-image)を捕獲する。これは、続いてコンピュータ・システムの主メモリに書き戻される。チェックポイントは、主メモリ内において周期的に確立される。バッファ・メモリ内に格納されているデータは、各チェックポイント処理の後に破棄される。障害の場合、主メモリは、バッファ・メモリ内に格納されているデータを、コンピュータ・システムの主メモリにコピーすることによって、以前のチェックポイントの状態に戻ることができる。本実施形態のコンピュータ・システムは、シャドウ・メモリを含み、主メモリの障害に対するフォールト・トレランスを与えることも可能である。本実施形態のシャドウ・メモリは、バッファ・メモリに最初に格納されるデータ以外は、主メモリに書き込まれる全てのデータを捕獲する。主メモリの障害の場合、バッファ・メモリを用いて、シャドウ・メモリを、最後のチェックポイントにおける主メモリの状態に再現することができ、シャドウ・メモリを主メモリの代用とすることができる。
【００１８】
本発明によるシステムでは、入出力（Ｉ／Ｏ）動作は、通常以下のように処理される。通常動作の間、Ｉ／Ｏ要求はいずれかの標準的な方法で行われ、オペレーティング・システムによって適切なＩ／Ｏキューに入力される。しかしながら、実際の物理的Ｉ／Ｏ動作は、次のチェックポイントまで開始されない。したがって、障害および続くチェックポイント状態への後退の場合、全ての保留のＩ／Ｏ動作もチェックポイント処理の対象となる。ディスクおよびその他のアイデンポネント（idempotent）Ｉ／Ｏ動作、即ち、結果を変化させることなく繰り返し可能な動作は、単に再起動することができる。
【００１９】
通信Ｉ／Ｏ動作の適切な処置は、通信プロトコルに依存する。可能なメッセージの複製に対処するプロトコルでは、保留のＩ／Ｏを再起動することができる。欠落したメッセージを処理するプロトコルでは、Ｉ／Ｏを保留のキューから削除することができる。欠落メッセージも繰り返しメッセージも処理しないプロトコルでは、保留のＩ／Ｏは保留キュー（保留待ち行列：pending queue）から削除される。障害の前にメッセージが実際に送出されなかった場合、または障害の結果として中止された場合、過渡通信リンク障害と影響は同一であり、同じ結果がアプリケーションまたはユーザにもたらされる。通信リンク割り込みは、通常、コンピュータ障害よりもかなり多く発生するので、かかるイベントを透過的にすることができないプロトコルの使用は、おそらく、ユーザまたはアプリケーションは、いずれにせよ、それらと対処する準備がなされていることを意味する。
【００２０】
ここに記載する機構は、コンピュータが障害に続いて動作を再開することができる、一貫性のあるチェックポイント状態の存在を保証することができ、こうしてフォールト・トレラント動作を可能にする。
【発明を実施するための最良の形態】
【００２１】
本発明は、添付図面と関連付けて読むべき、以下の詳細な説明によって一層深く理解されよう。尚、添付図面では、同様の参照番号は同様の構造を示すものとする。１９９４年６月１０日に出願された、同一出願人の同時係属中の米国特許出願番号第０８／２５８，１６５号を引用する。この言及により、これは本願にも含まれるものとする。
【００２２】
図１は、本発明の使用が概ね可能なコンピュータ・システム１１のブロック図である。１つ以上の処理素子１４および１６が、バスまたは交差点スイッチのような相互接続機構１０および１２を介して、１つ以上の主メモリ・システム１８および２０に接続されている。１つ以上の入出力（Ｉ／Ｏ）サブシステム２２および２４も、相互接続機構１０（１２）に接続されている。各Ｉ／Ｏサブシステムは、入出力（Ｉ／Ｏ）素子またはブリッジ２６（２８）、および１系統以上のバス３０および３２（３４および３６）から成る。Ｉ／Ｏ素子２６（２８）も、ＶＭＥバスのような、いずれかの標準的なＩ／Ｏバス３８（４０）に接続することができる。記載を簡単にするために、以下では、これらのシステム群およびサブシステム群は、各々その１つのみについて言及することにする。
【００２３】
各処理素子、例えば、１４は、キャッシュ４２に接続された処理ユニット４４を含む。この接続は、処理ユニット４４およびキャッシュ４２を相互接続機構１０に接続するものでもある。処理ユニット４４は、いずれかの標準的なマイクロプロセッサ・ユニット（ＭＰＵ：microprocessor unit）とすればよい。例えば、Intel Corporationから入手可能なPENTIUM（登録商標）マイクロプロセッサは、この目的に適している。処理ユニット４４は、従来と同様、いずれかの適切なオペレーティング・システムにしたがって動作する。処理素子１４は、自己検査の目的のために、二重処理ユニット４４を含んでもよい。
【００２４】
キャッシュ４２は、ライト・スルーまたはライト・バック型のキャッシュであり、任意のサイズおよび連想性(associativity)を有し、１キャッシュ・レベル以上の階層構造から成るものとしてもよい。処理ユニット４４は、キャッシュ４２内に、データのみを格納することも、コンピュータ・プログラムの命令およびデータ双方を格納することも可能である。前者の場合、同様の命令キャッシュ４３を追加として処理ユニット４４に接続し、処理ユニット４４がコンピュータ・プログラム命令を格納するようにしてもよい。この接続は、命令キャッシュ４３を相互接続機構１０に接続するものでもある。このシステムが多重処理コンピュータ・システムである場合、各処理ユニット４４は、バス・スヌーピング(bus snooping)のような、従来のいずれかの機構を用いてキャッシュ・コヒーレンシを保持することができる。キャッシュ４２は、例えば、相互接続機構１０を介して、主メモリ・システムに接続されている。
【００２５】
本発明によるチェックポイントに基づくフォールト・トレラント・コンピュータ・システム２００の一実施形態を図２に示す。図２に示す実施形態では、チェックポイント・メモリ素子２１３は、後入れ先出し（ＬＩＦＯ：last-in, first-out)リード・バッファ・メモリ２１６を利用し、障害の後、シャドウ・メモリ２２２をチェックポイント状態に戻す。図２に示すフォールト・トレラント・コンピュータ・システム２００は、メモリ・バス２１４に結合された基本メモリ２１２、メモリ・バスに結合されたプロセッサ２１８、チェックポイント・メモリ２１３から成り、チェックポイント・メモリ２１３は、基本メモリと同一の論理ポートを用いてメモリ・バスに結合されたＬＩＦＯリード・バッファ・メモリ２１６、基本メモリと同一の論理ポートを用いてメモリ・バス２１４に結合されたシャドウ・メモリ２２２、メモリ・バス、ＬＩＦＯリード・バッファ・メモリおよびシャドウ・メモリに結合されたメモリ制御ロジック２１７を含む。バス２１４を介して、プロセッサにＩ／Ｏ装置を結合することも可能である。バス２１４は、交差点スイッチのような、別の種類の相互接続機構としてもよい。図１に示すように、図２におけるシステム２は、多数のおよび／または冗長なプロセッサ、Ｉ／Ｏ素子、相互接続部等を有することも可能である。
【００２６】
本実施形態の動作について、図３を参照しながら説明する。ＬＩＦＯリード・バッファ・メモリ２１６は、基本メモリ２１２から読み出したある種のデータを、関連するアドレスとともに格納する（ステップ２５４および２５６）。基本メモリに書き込まれたデータは、基本メモリ２１２およびシャドウ・メモリ２２２双方によって格納されるので、シャドウ・メモリの内容は、「ミラー」形態となっている。即ち、基本メモリの内容と同じデータを含む。メモリ制御ロジック２１７は、メモリ間のデータ転送を制御する。
【００２７】
プロセッサ２１８、およびメモリ・バス２１４に結合された他のいずれのプロセッサも、それらのキャッシュを周期的に基本メモリ２１２にフラッシュし、チェックポイントを確立する（ステップ２５０）。新しいチェックポイントが引き渡されるとき、ＬＩＦＯリード・バッファ・メモリの内容は破棄される（ステップ２５２）。ＬＩＦＯリード・バッファ・メモリ２１６の内容をシャドウ・メモリ２２２に書き込む必要はない。キャッシュフラッシュについての説明は、図１および図４ないし図６に関連付けて行う。
【００２８】
一貫性のあるシステム状態のチェックポイント処理を行うために、プロセッサは同期してキャッシュをフラッシュする。一旦処理素子１４がフラッシュを開始したなら、他の全ての処理素子１４がそれらのフラッシュを完了するまで、以下で論ずるある種の条件下を除いて、通常の動作を再開することができない。コンピュータ・システム内の全ての処理ユニット４４が全てのバス、または主メモリへの通信経路へのアクセスを有する場合、各処理ユニット４４は従来のバス・スヌーピング法を用いて、キャッシュ・コヒーレンシを保証してもよい。全ての処理ユニット４４が全てのシステム・バスにアクセスを有するのではない場合、処理ユニット４４は、代わりに、他のよく知られているキャッシュ・コヒーレンシ技法(cache coherency technique)を用いても良い。
【００２９】
プロセッサのキャッシュフラッシュを同期させるのは、バッファ・メモリがフラッシュ後データおよびフラッシュ前データ間の区別をする必要があるためである。したがって、バッファがこの区別を行うことができない場合、全てのプロセッサは、通常動作を開始可能となる前に、それらのフラッシュを完了させ、一貫性を保持するようにしなければならない。同期を制御するには、好ましくは、図４の８０に示すように、主メモリ内の指定された位置を用いて、検査および設定ロック処理または同等の処理を用い、ロック値を格納する。基本メモリ素子の障害およびその他の障害からの回復が可能であることを保証するために、この指定位置は、シャドウ・メモリ素子内のステータス・レジスタの一部として実施することが好ましい。シャドウ・メモリ素子内の障害は、通常の動作を中断させることはない。その結果、このデータ構造は、このイベントでは不要となる。
【００３０】
周期的な間隔で、各処理ユニットは、図５のステップ９０に示すように、フラッシュ処理を開始すべきか否かについて判定を行う。処理ユニット４４は、この判定を多数の異なる方法で行うことができる。典型的に、フラッシュは、固定時間期間が経過した後に開始すればよい。
【００３１】
この処理ユニット４４がフラッシュを開始する必要がない場合、指定メモリ位置８０を検査し、他の処理ユニット４４が既にロックを設定しているか否かについて判定を行う（ステップ９２）。ロックが設定されていない場合、このプロセスは、９４に示すように終了する。逆に、ロックが設定されている場合、この処理ユニット４４はステップ９６においてそのキャッシュ４２をフラッシュする。フラッシュ処理の効果は、キャッシュ内の全ライン（または、好ましくは、最後のフラッシュ以降変更されたラインのみ）を基本メモリ素子２１２、およびチェックポイント・メモリ素子２１３のシャドウ・メモリ２２２（ある場合）にも同様に格納することである。実際のフラッシュ処理に先立って、処理ユニット４４は、その状態をキャッシュ４２にセーブし、この情報も同様にフラッシュされるようにする。
【００３２】
入出力（Ｉ／Ｏ）動作は、通常、以下のように処理される。通常動作の間、Ｉ／Ｏ要求は、オペレーティング・システムによって、いずれかの標準的な方法で発せられ、適切なＩ／Ｏキューに入力される。しかしながら、実際の物理的なＩ／Ｏ動作は、次のチェックポイントまで開始されない。したがって、障害およびそれに続くチェックポイント処理済み状態(checkpointed state)への後退の場合、全ての保留のＩ／Ｏ動作にも、チェックポイント処理が行われる。ディスクおよびその他のアイデンポネントＩ／Ｏ動作、即ち、結果を変化させることなく繰り返すことができる動作は、単に再起動することができる。
【００３３】
通信Ｉ／Ｏ動作の適切な処置は、通信プロトコルに依存する。可能なメッセージの複製に対処するプロトコルでは、保留のＩ／Ｏを再起動することができる。欠落したメッセージを処理するプロトコルでは、Ｉ／Ｏを保留のキューから削除することができる。欠落メッセージも繰り返しメッセージも処理しないプロトコルでは、保留のＩ／Ｏは保留キューから削除される。障害の前にメッセージが実際に送出されなかった場合、または障害の結果として中止された場合、過渡通信リンク障害と影響は同一であり、同じ結果がアプリケーションまたはユーザにもたらされる。通信リンク割り込みは、通常、コンピュータ障害よりもかなり多く発生するので、かかるイベントを透過的にすることができないプロトコルの使用は、おそらく、ユーザまたはアプリケーションは、いずれにせよ、それらと対処する準備がなされていることを意味する。
【００３４】
処理ユニット４４がステップ９０において、フラッシュを開始すべきと判定した場合、ステップ９２と同様、ステップ９８において、ロックが既に設定されているか否かについて判定を行う。ロックが既に設定されている場合、処理ユニット４４は、ステップ９６において、そのキャッシュ４２のフラッシュを継続する。その他の場合、ステップ１００においてロックを設定し、他のプロセッサにメッセージを送り、それらのフラッシュライン動作をトリガすることによって、そのキャッシュ４２をフラッシュする前に、それ自体をフラッシュのイニシェータ（initiator）として識別する。
【００３５】
処理ユニット４４がステップ９６においてそのキャッシュ４２をフラッシュした後、ステップ１０２においてその対応するフラッシュカウンタを増分する。図４に示すように、各処理ユニット４４は、８２および８４で示すようなフラッシュカウンタを有し、これらは、主メモリ１８内の所定の指定された位置である。フラッシュカウンタ（例えば８２）を増分した後、処理ユニット４４は、それがこのフラッシュシーケンスのイニシェータであるか否かについて判定を行う（ステップ１０４）。イニシェータでない場合、ステップ１０６において、ロックが解除されるまで待つ。ロックが解除されたなら、このプロセスはステップ１０８において終了し、処理ユニット４４は通常動作を再開することができる。
【００３６】
ステップ１０４の判定において、処理ユニット４４がフラッシュのイニシェータであった場合、ステップ１０５において、全てのフラッシュカウンタ（８２〜８４）が増分されるまで待つ。一旦全てのフラッシュカウンタが増分されたなら、この処理ユニット４４は、委託コマンド(commit command)をチェックポイント・メモリ素子に送ることにより、チェックポイント・メモリ素子２３１にリード・バッファ２１６をクリアするように命令する。コマンドの受信は、チェックポイント・メモリ素子２１３に、フラッシュが完了したことを通知する。一旦この命令が送られたなら、フラッシュロックが解除され、処理ユニット４４は通常の処理を再開することができる。ステップ１０６ないし１１０間のループは、タイム・アウト保護を有し、フラッシュ動作中の障害の場合に、障害回復手順をトリガするようにすべきである。
【００３７】
ここに記載するフラッシュカウンタは、１ビット・カウンタとすればよく、したがってチェックポイント・メモリ素子２１３内のステータス・レジスタの一部として容易に実装可能であることを注記しておく。ビットは、各プロセッサによって個別に設定し、イニシェータが委託コマンドを送った場合には自動的にリセットすることができる。
【００３８】
ある種の非標準的バス・プロトコルも実装した場合、処理能力上の利点を得ることができる。例えば、バス・プロトコルが、チェックポイント・メモリ素子２１３に処理素子１４間で識別すること、または格納対象のラインに書き込みを行ったのは、ｉ回目のフラッシュを完了した処理素子１４か、またはｉ回目のフラッシュを未だ実行中の処理素子かを少なくとも識別すること、あるいはフラッシュ後データからフラッシュ前データを少なくとも識別することを可能にする場合、処理素子１４は、通常の動作を開始する前に、他の全ての処理素子がそれらのフラッシュを完了するまで待つ必要はない。この場合、処理素子１４に、そのｉ回目のフラッシュを完了した後に、全ての処理素子１６も少なくともそのｉ回目のフラッシュを開始する（しかし、完了するまでの必要はない）まで、正常動作を保留することを要求することによって、主メモリにおける一貫性を保持する。
【００３９】
このように同期の制約を緩和してもなお、一貫したチェックポイント状態の存在は保証される。即ち、フラッシュを開始していない処理素子１６は、フラッシュを完了し通常処理を再開した他の処理素子１４から、フラッシュ後の変更されたデータを受け取らないことを保証する。この同期に対する制約が緩いプロトコルが許されるのは、恐らくバス・プロトコルを用いる、チェックポイント・メモリ素子２１３に関連するロジックが、フラッシュ動作の一部として書き込まれるデータと、フラッシュを完了した処理素子１４によって読み出されているデータまたは書き込まれているデータとの間で区別することができる場合である。この種のキャッシュフラッシュ同期を実施するためには、図５のステップ９６および１０２の順番および配置を、図６に示すように逆にすればよい。
【００４０】
フォールト・トレラント・コンピュータ・システム２００における障害の場合（ステップ２５８）、リード・バッファ・メモリ２１６から捕獲したデータを用いて、チェックポイント処理の時点において、それらの状態に対する最後のチェックポイント処理以降変更された、基本メモリおよびシャドウ・メモリの全ラインを回復する（ステップ２５６）。ＬＩＦＯリード・バッファ・メモリは、最後のチェックポイント以降変更された基本メモリ内のいずれのラインについても、最後のチェックポイント時におけるこれらラインの状態を含む。最後のチェックポイント以降何回も変更されている基本メモリ２１２内のラインの場合、ＬＩＦＯリード・バッファ・メモリは、中間段階および最後のチェックポイント時におけるラインの状態を含む。ＬＩＦＯメモリの内容は、それらが書き込まれたときとは逆の順序で読み出されるので、何回も変更されたラインは、基本メモリ内のチェックポイント状態に戻る（ステップ２６４）。
【００４１】
基本メモリにおいて障害が発生した場合（ステップ２６０）、シャドウ・メモリを用いて、損傷を受けしかもＬＩＦＯリード・バッファ・メモリ内に含まれていない基本メモリ内のデータのあらゆる部分を置き換える。あるいは、シャドウ・メモリは、基本メモリの障害の後、基本メモリの役割を引き受けてもよい。
【００４２】
本実施形態を実施する代わりの方法に、シャドウ・メモリ２２２を用いないものがある。この実施形態の場合、リード・バッファ・メモリ２１６は、この場合も、障害の場合直前のチェックポイントの状態に基本メモリを回復するために用いられる。しかしながら、コンピュータ・システムは、基本メモリ２１２のいずれの部分にしろ損失を発生するに至り、最後のチェックポイント以降ＬＩＦＯリード・バッファ・メモリ内にその内容が捕獲されていない場合、障害から回復することはできない。
【００４３】
図２に示す本発明の実施形態のリード・バッファリング方式の欠点は、ライト・バッファリング方式とは逆に、プロセッサは通常書き込みよりもかなり多いデータを読み取るので、リード・バッファ・メモリ２１６は、対応するライト・バッファ・メモリよりもかなり大きくしなければならない場合もあることである。この欠点は、メモリ制御ロジック２１７がコード・アクセスとデータ・アクセスの間、または以降変更されることはないデータへのアクセスと、以降変更されるデータへのアクセスとの間の区別ができないシステムでは悪化する。読み取られたデータは、いずれかのキャッシュにおいて有効である可能性がある限り、保持されなければならないので、全てのキャッシュの内容全体を周期的に無効化し、ＬＩＦＯリード・バッファが無限に大きくなるのを防止する必要がある場合もある。
【００４４】
本発明の一実施形態では、キャッシュ・コヒーレンシ・プロトコルを用いて、いずれかのキャッシュ・ラインを変更する最初の試行でも、システムの残り部分に可視化することによって、この欠点を免れている。変更前のラインの状態に対応する、変更対象のラインの予備画像(pre-image)は、変更されたキャッシュ・ラインが基本メモリに再度書き込まれる前に、基本メモリから、また好ましくは、存在するのであればシャドウ・メモリから、ＬＩＦＯリード・バッファ・メモリにコピーすればよい。これは、コンピュータ・システムによっては、全てのメモリを共有として扱うことによって達成可能なものもある。したがって、各プロセッサは、いずれかのデータ・ラインを変更するときはいつでも、書き込みの意図があるリード動作(read-with-intent-to-write operation)または無効化動作のいずれかを実行するように強制される。これらの動作は、チェックポイント・メモリ素子には見ることができ、関連するアドレスを用いて、バッファすべきものを決定することができる。この方式では、キャッシュ・コヒーレンシ・プロトコルは、キャッシュ内に既にあるあらゆるラインのメモリへの最初の書き込みは全て、ＬＩＦＯリード・バッファ・メモリ内への、当該ラインの予備画像のメモリからのリードとなることを保証するものでなければならない。あるいは、キャッシュフラッシュ動作の間に行われるものも含む、メモリへのあらゆるライトにおいて、メモリ制御ロジックは、最初に、書き込むべきメモリ位置を読み取り、そのリード・データおよびＬＩＦＯバッファ内におけるそれに関連するアドレスを捕獲することができる。この手順は標準的でなく、事実上メモリ帯域が減少する結果となる。尚、アクセスはキャッシュ・ライン全体だけでなく、キャッシュ・ラインの一部に対しても行われる場合があることを理解されたい。
【００４５】
バス・プロトコルの変更を必要としない本発明の他の実施形態は、全てのリードをリード・バッファに捕獲するというものである。この場合、各プロセッサのキャッシュ全体を、フラッシュ時点において無効化する。
【００４６】
本発明のこの実施形態の一変形に、リード・バッファに書き込むべきいずれかのラインのアドレスが、当該バッファに既に格納されているか否かを判定するために最初にチェックを行い、格納されている場合その書込みを禁止することによって、リード・バッファ・メモリにデータを書き込む回数を減らすことができる。この方式は、リード・バッファ・メモリとして、ＬＩＦＯでなく連想メモリ(content addressable memory)を用いることによって、実施可能である。
【００４７】
上述の本発明の実施形態では、プロセッサ、メモリおよびＩ／Ｏ装置を含む、コンピュータ・システムの個々の要素について、１系統以上のメモリ・バスによって相互接続されたものとして説明した。これらのメモリ・バスは、交差点スイッチのような、データを転送し同じ機能を行う他の相互接続機構で置き換えてもよいことは理解されよう。
【００４８】
本発明の多数の実施形態および変形について説明してきたが、それらは、各々、互いに対して、それ自体の利点および欠点を有すること、およびそれらの内、あらゆる状況においてそれ以外の全てより勝っているものはないことは認められよう。所与の状況に対してどれが最も適切な実施形態であるかは、当該実施形態が適用される基礎となるコンピュータ・プラットフォーム、および所望のレベルのフォールト・トレランスによって異なる。
【効果】
【００４９】
本発明の従来技術に対する利点の１つは、基礎となるコンピュータ・プラットフォームに、特殊な要件を加えることなく、チェックポイントが確立されることである。第２の利点は、アプリケーション・プログラムもユーザも、チェックポイント処理プロセスに関与する必要がなく、また知る必要もないことである。また、本システムは、メモリの二重化とも適合性がある。これは必ずしも必要ではないが、このために、メモリ障害のみならず、その他のハードウエアおよびソフトウエア障害からも回復が可能となる。この実施形態は、特に、ロー・エンド・システムにおいて、二重化メモリを必要とせずに、ソフトウエア・エラーおよび瞬時的なハードウエア障害から回復する機能を設けるために、特に有用である。
【００５０】
ここに説明した本発明の実施形態から、上述の実施形態は単に例示的であり限定的なものではなく、単に一例として提示したに過ぎないことは、当業者には認められよう。多数の変更およびその他の実施形態は、当業者の範囲内であり、添付の請求の範囲に規定された本発明の範囲およびその均等物に該当するものと見做す。
【図面の簡単な説明】
【００５１】
【図１】図１は、本発明の一実施形態の主メモリ構造を用いた、コンピュータ・システムのブロック図である。
【図２】図２は、本発明の一実施形態によるリード・バッファ・メモリを利用した、フォールト・トレラント・コンピュータ・システムのブロック図である。
【図３】図３は、図２のコンピュータ・システムの動作を記述するフローチャートである。
【図４】図４は、処理ユニットが主メモリの一貫性を保持するために用いられるメモリ位置の図である。
【図５】図５は、各処理ユニットがどのようにして、そのキャッシュのフラッシュを制御し、主メモリの一貫性を保持するのかを記述するフローチャートである。
【図６】図６は、各処理ユニットがそのキャッシュの主メモリへのフラッシュを制御する、別の方法を記述するフローチャートである。
【図１】
2007128540.tif 000003
【図２】
2007128540.tif 000004
【図３】
2007128540.tif 000005
【図４】
2007128540.tif 000006
【図５】
2007128540.tif 000007
【図６】
2007128540.tif 000008