(57)【特許請求の範囲】
【請求項１】
コンピュータシステムのローカルチャネル上のアドレスエラーを検出するステップと、
前記ローカルチャネルに関連付けられたキャッシュメモリのラインのコヒーレンシ状態を読出すステップと、
回復ルーチンを実行するステップと、及び
前記ラインのコヒーレンシ状態が変更された状態または排他的な状態である場合に、主記憶装置の対応するデータをポイズニングするステップとからなり、
前記ポイズニングするステップが、検出可能であるが修正不可能なエラーを有するデータパターンを書込むことを含む、方法。
【請求項２】
前記回復ルーチンが、
前記ラインのコヒーレンシ状態が共用された状態または無効な状態である場合に、前記キャッシュメモリのラインを無視するステップを含む、請求項１の方法。
【請求項３】
前記コヒーレンシ状態が、ＭＥＳＩベースのプロトコルに従った状態である、請求項１の方法。
【請求項４】
前記検出するステップに応答して、前記ローカルチャネルを障害状態に置くステップを更に含む、請求項１の方法。
【請求項５】
切離されていないプロセッサに前記エラーを通知するステップと、及び
前記通知するステップに応答して、前記切離されていないプロセッサでエラー回復ルーチンを実行するステップとを更に含む、請求項１の方法。
【請求項６】
前記回復ルーチンが、
データ構造を修復するステップを含む、請求項１の方法。
【請求項７】
前記読出すステップが、コヒーレンシディレクトリを読出すことを含む、請求項１の方法。
【請求項８】
コンピュータシステムのローカルチャネル上のアドレスエラーを検出するステップと、
前記ローカルチャネルに関連付けられたキャッシュメモリのラインのコヒーレンシ状態を読出すステップと、
回復ルーチンを実行するステップと、及び
前記ラインのコヒーレンシ状態が変更された状態または排他的な状態である場合に、システムバスにハードエラーを通知するステップとからなる、方法。
【請求項９】
スヌープ要求を受信するステップを更に含み、
前記読出すステップが、前記スヌープ要求の受信に応答して実行され、前記読出すステップが、前記キャッシュメモリのライン内のコヒーレンシビットを読出すことを含む、請求項８の方法。
【請求項１０】
コンピュータシステムであって、
第１のチャネルと、
第２のチャネルと、
前記第１のチャネルと前記第２のチャネルとの間に接続されたキャッシュと、
前記第１のチャネルに接続されたアドレスエラー検出器と、
前記アドレスエラー検出器に接続され、前記キャッシュのラインについてコヒーレンシ状態を返すキャッシュチェッカと、及び
前記キャッシュチェッカおよび前記第２のチャネルに接続され、前記キャッシュのラインのコヒーレンシ状態が変更された状態または排他的な状態である場合に、前記第２のチャネルの対応するデータに所定のデータパターンを選択的に書込むデータポイズナとからなる、コンピュータシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータおよびプロセッサシステムに関する。より詳細には、本発明はキャッシュメモリを有するマルチプロセッサコンピューティングシステムにおけるアドレスチャネルエラーからの回復に関する。
【０００２】
【従来の技術】
コンピュータシステムにおいて、プロセッサとメモリとの間のインタフェースは、システムのパフォーマンスに対して非常に重要である。高速なメモリが非常に高価であるため、一般に、プロセッサをサポートするために必要な容量を有するメモリは、プロセッサよりかなり低速である。そこで、高速なプロセッサのサイクル時間と低速なメモリのアクセス時間との間のギャップを埋めるために、キャッシュメモリが開発された。キャッシュは、容量の小さい非常に高速な、待ち状態ゼロのメモリであり、主記憶装置から頻繁にアクセスされるデータおよび命令のコピーを格納するために使用される。マイクロプロセッサは、この非常に高速なメモリから動作することができ、それによってメモリアクセス中に挿入されなければならない待ち状態の数を低減することができる。プロセッサがメモリからのデータを要求し、そのデータがキャッシュ内にある場合、キャッシュ読出し「ヒット」が発生し、メモリアクセスからのデータを、待ち状態を招くことなくキャッシュからプロセッサに返すことができる。そのデータがキャッシュ内に無い場合、キャッシュ読出し「ミス（miss）」が発生し、キャッシュが存在しない場合に通常行われるように、メモリ要求がシステムに送信され、データが主記憶装置から検索される。キャッシュミスの場合、主記憶装置から検索されるデータは、プロセッサに供給されると共に、このデータがプロセッサによって再度要求されるという統計的な見込みによりキャッシュに書込まれる。
【０００３】
キャッシュメモリに格納される個々のデータ要素を、「ライン」と言う。キャッシュの各ラインは、主記憶装置内のデータのアドレス可能な１つの単位に対応することになる。このため、キャッシュラインはデータを含み、何らかの方法で主記憶装置のアドレスに関連付けられている。主記憶装置のアドレスをキャッシュデータのラインに関連付ける方法には、直接マッピング、フルアソシエーションおよびセットアソシエーションがあり、それらはすべて本技術分野において周知である。
【０００４】
キャッシュの存在はシステム全体に透過的であるべきであり、このような透過性を達成するために、ライトスループロトコルおよびライトバックプロトコルを含む各種プロトコルが実現されている。ライトスルーアクションでは、格納されるべきデータは、キャッシュラインと主記憶装置とに同時に書込まれる。ライトバックアクションでは、格納されるべきデータは、キャッシュには書込まれるが、主記憶装置には後に、キャッシュのラインが最後のデータのラインに置換される必要がある場合、または別のプロセッサがそのキャッシングされたラインを必要とする場合にのみ書込まれる。ライトバックプロトコルでは、ラインは排他的にキャッシュに書込まれる場合があるため、後に詳述するように、ライトバックキャッシュにおけるデータの状態を管理するには注意しなければならない。
【０００５】
キャッシュ管理は、一般に、キャッシュコントローラと呼ばれる装置によって実行される。キャッシュ管理の主な目的は、キャッシュコヒーレンシの保持である。独立したバスマスタがメモリにアクセスすることができるコンピュータシステムでは、別のプロセッサ、ネットワークインタフェース、ディスクインタフェースまたはビデオグラフィックスカード等のバスマスタが、キャッシュに複製されている主記憶装置の記憶場所の内容を変更する可能性がある。これが発生する場合、キャッシュは、古いかまたは無効なデータを保持することになる。キャッシュコヒーレンシを維持するためには、別のバスマスタが主記憶装置をアクセスしているか否かを確認するために、プロセッサがシステムバスを所有していない場合、キャッシュコントローラが、システムバスを監視する必要がある。このバスの監視方法を、「スヌーピング」と言う。
【０００６】
ライトバックキャッシュ設計では、前のプロセッサの書込みにより、キャッシュにおいて主記憶装置では更新されていないデータのコピーが変更される可能性があるため、キャッシュコントローラは、バスマスタによるメモリの読出し中にシステムバスを監視しなければならない。これを、読出しスヌーピングと言う。「読出しスヌープヒット」が発生した場合、これは、キャッシュが主記憶装置においてまだ更新されていないデータを有する場合であり、キャッシュコントローラは一般に主記憶装置にその個々のデータを供給し、要求しているバスマスタは、一般にキャッシュコントローラから主記憶装置までの途中でこのデータを読み出す。この動作を、「スナーフィング（snarfing）」と呼ぶ。また、別のバスマスタがキャッシュ内にある記憶場所に対して書込みまたは変更を行う可能性があるため、キャッシュコントローラは、メモリ書込み中にシステムバスを監視しなければならない。これを、書込みスヌーピングと言う。「書込みスヌープヒット」が発生した場合、キャッシュコントローラにより、キャッシュディレクトリにおいてそのキャッシュエントリが無効であるとマーキングされ、このエントリがもはや正しくないということが示されるか、あるいは、主記憶装置と共にキャッシュが更新される。従って、ライトバックキャッシュ設計において、別のバスマスタが主記憶装置に対して読出しまたは書込みを行うか、またはライトスルーキャッシュ設計において主記憶装置に書込みを行う場合、キャッシュコントローラは、システムアドレスをラッチし、キャッシュルックアップを実行して、アクセスされる主記憶装置の記憶場所がキャッシュにも存在するか否かを確認しなければならない。この記憶場所からのデータのコピーがキャッシュ内に存在する場合、キャッシュコントローラは、読出しまたは書込みスヌープヒットが発生しているかにより適切な動作（アクション）を取る。これにより、一貫性の無いデータが主記憶装置とキャッシュとに格納されることが防止され、キャッシュコヒーレンシが保持される。
【０００７】
キャッシュコヒーレンシの保持における別の考慮事項は、プロセッサによるメモリへの書込み処理である。プロセッサが主記憶装置に書込む場合、記憶場所をチェックして、この記憶場所からのデータのコピーがキャッシュにも存在するか否かを判断しなければならない。ライトバックキャッシュ設計においてプロセッサ書込みヒットが発生する場合、キャッシュの記憶場所は新たなデータによって更新され、主記憶装置は、後にまたは必要時に新たなデータによって更新される。ライトスルーキャッシュにおいて、主記憶装置の記憶場所は、一般にプロセッサ書込みヒット時にキャッシュの記憶場所と共に更新される。ライトスルーキャッシュ設計において、プロセッサ書込みミスが発生した場合、この設計ではキャッシュは影響を受けないため、キャッシュコントローラはこの書込みミスを無視することができる。代案として、キャッシュコントローラは「書込み割当て（write-allocate）」を実行することができ、これによってキャッシュコントローラは、データを主記憶装置に渡すだけでなく、キャッシュに新たなラインを割当てる。ライトバックキャッシュ設計では、一般にキャッシュコントローラは、プロセッサ書込みミスが発生した場合、キャッシュに新たなラインを割当てる。この際、概して、キャッシュに書込みデータを供給する前またはその時同時に、ラインを埋めるための残りのエントリが主記憶装置から読出される。主記憶装置は、後にまたは必要時に更新される。
【０００８】
キャッシュは、マイクロプロセッサとは無関係に設計することができる。その場合、コンピュータシステムの設計時に、キャッシュはマイクロプロセッサのローカルバス上に配置されて、プロセッサとシステムバス間をインタフェースする。しかしながら、トランジスタまたはプロセスチップの密度が増大するに従い、メモリアクセス時間を更に短縮させるために、プロセッサを１つまたは複数の内部キャッシュを用いて設計することも可能である。これらプロセッサにおいて使用される内部キャッシュは一般に小さく、一例としてのサイズは８Ｋ（８１９２バイト）である。１つまたは複数の内部キャッシュを有するプロセッサを利用するコンピュータシステムでは、メモリアクセス時間を更に向上させるためにしばしば外部キャッシュがシステムに追加される。この外部キャッシュは、一般に内部キャッシュよりかなり大きく、内部キャッシュと共に使用される場合は、内部キャッシュのみを用いる場合より全体のヒットの割合が大きくなる。
【０００９】
複数レベルのキャッシュを組込んだシステムでは、プロセッサがメモリからのデータを要求すると、まず内部または第１のレベルキャッシュがチェックされ、そのデータのコピーが存在するか否かを確認する。そこに存在する場合、第１のレベルキャッシュのヒットが発生し、その第１のレベルキャッシュがプロセッサに適切なデータを供給する。第１のレベルキャッシュのミスが発生した場合、第２のレベルキャッシュがチェックされる。第２のレベルキャッシュのヒットが発生した場合、データは第２のレベルキャッシュからプロセッサに供給される。第２のレベルキャッシュのミスが発生した場合、データは主記憶装置から検索される。このプロセスは、存在する限りより上位レベルのキャッシュまで継続する。書込み動作も同様であり、上述した動作の混合およびマッチングが可能である。
【００１０】
複数のプロセッサと共にマルチレベルのキャッシュ階層構造が存在する多くの例では、階層中にマルチレベル包含（inclusion）と呼ばれるプロパティが求められる。マルチレベル包含によれば、第２のレベル（例えば、外部）キャッシュが、第１のレベル（例えば、内部）キャッシュ内にあるもののコピーを有することが保証されている。この場合、第２のレベルキャッシュは、第１のレベルキャッシュの上位集合を保持する。マルチレベル包含では、すべてのレベルのキャッシュがシステムバスをスヌープする必要を無くし、それによってキャッシュがより効率的に実行できるようにする。マルチレベル包含は、マルチプロセッサシステムにおいて最も広く普及している。この場合、より上位レベルのキャッシュが、より下位レベルのキャッシュをキャッシュコヒーレンシ問題から保護することができ、それによりマルチレベル包含が実現されなかった場合に下位レベルのキャッシュで発生する不要なスヌープを防止することができる。
【００１１】
各プロセッサが包含と共にマルチレベルキャッシュシステムを利用するマルチプロセッサシステムでは、例えば、各プロセッサに関連付けられたレベル１（Ｌ１）ライトスルーキャッシュと、より大きく低速なレベル２（Ｌ２）ライトバックキャッシュとがある。なお、後者は、それでもまだ主記憶装置よりはかなり高速である。このＬ２およびＬ１キャッシュは、各キャッシュラインの状態を管理するために、ＭＥＳＩ（「メシィ（messy）」と発音する）プロトコルを以下のように利用する。各キャッシュラインについて、システムのキャッシュラインの現在の状態を示すＭ、Ｅ、ＳまたはＩ状態がある。この周知のプロトコルによれば、排他的（Exclusive）（Ｅ）ビットは、ラインがこのキャッシュのみに存在することを示し、共用（Shared）（Ｓ）ビットは、ラインが一度に複数のユーザによって共用され得ることを示し、無効（Invalid）（Ｉ）ビットは、ラインがキャッシュにおいて使用できないことを示し、変更（Modified）（Ｍ）ビットは、ラインがキャッシュに最初に書かれて以来変更または修正されていることを示す。この管理システムでは、変更されていないラインはシステムの主記憶装置に書き戻される必要がないため、システムパフォーマンスが向上する。
【００１２】
Ｌ２キャッシュの責任によりラインのＭＥＳＩ状態の変化が管理されるシステムでは、Ｌ１キャッシュには排他的（Ｅ）ビットは必要ない。従って、Ｌ１キャッシュは、ＭＳＩプロトコルを実現することとなる。これらシステムにおいて、L２において排他的（Ｅ）とマーキングされたラインは、Ｌ１において共用（Ｓ）とマーキングされることになる。別のプロセッサがこのラインのコピーを共用したい場合、Ｌ２キャッシュはそのスヌープ応答により、そのラインが共用（Ｓ）であることを示し、ラインのＬ２コピーの状態を共用（Ｓ）に変更する。Ｌ１ライン状態を変更する必要がなかったため、Ｌ１キャッシュがライン状態変更に関与する必要はなく、それによってパフォーマンスが向上する。
【００１３】
マルチプロセッサ環境において、スヌープ待ち時間を固定することが可能である。これは、プロセッサがシステムバス上で記憶を要求する場合、他のすべてのプロセッサまたはバス装置が、固定された時間内に応答しなければならないことを意味する。記憶要求がライン読出しである場合、そのラインのコピーを有する他のプロセッサまたは装置は、共用（Ｓ）または変更（Ｍ）のみを用いて応答することができる。この場合、プロセッサは、そのラインの排他的所有権を維持することができない。スヌープ応答が変更（Ｍ）である場合、そのラインの現在の状態を所有するプロセッサは、スヌープを行うバスのプロトコルに従って、要求側に現在のコピーを供給し、ラインのそのコピーの状態を共有（Ｓ）または無効（Ｉ）に変更しなければならない。Ｌ１キャッシュをスヌープすることができないか、またはＬ１キャッシュのスヌープ応答がスヌープを行うバスの固定された応答時間要件を満たすことができないシステムでは、Ｌ２キャッシュは、あらゆるプロセッサがラインに記憶する前にそのラインに変更（Ｍ）をマーキングしなければならない。
【００１４】
スヌープを行うプロトコルの代替物には、ディレクトリベースのキャッシュコヒーレンシプロトコルがある。ディレクトリベースのコヒーレンシ方式では、一般にシステムは主記憶装置内のアドレスごとに１つのエントリを有する単一のディレクトリを含む。各ディレクトリのエントリは主記憶装置の各ラインの所有権およびデータ状態情報を識別する。すなわち、ディレクトリ内容はタグである。ディレクトリコヒーレンシシステムにおいて追跡されるデータ状態は、スヌープを行うシステム（例えば、ＭＥＳＩベースの状態または同様なもの）において追跡されるデータ状態と同様とすることができる。
【００１５】
【発明が解決しようとする課題】
本発明の目的は、マルチプロセッサコンピューティングシステムにおいて、アドレスエラーに反応してキャッシュコヒーレンシ情報を利用することである。
【００１６】
コンピュータシステムにおける最も重大なタイプのエラーの１つは、コンピュータバスにおけるアドレスエラーである。独立したアドレスバス（データバスおよび制御ラインと同様）を含む一般的なコンピュータバスにおいて、アドレスバスはより広い幅に設計されているため、アドレスエラーの危険性はより脅威になってきている。エラーを報告するバスエージェントが、真のメモリアドレスのターゲットが何であったかについて知らないと仮定しなければならないため、アドレスエラーは重大である。その結果、メモリコントローラが誤ったデータを供給するか、またはさらに悪いことには、正しいデータを誤った記憶場所に書込むことになる。マルチプロセッサシステムにおいてアドレスエラーが発生すると、１つまたは複数のプロセッサが、メモリに関して首尾一貫しない見方をする可能性がある。破壊されたデータを継続して処理することを避けるために、大抵のコンピュータは、オペレーティングシステムの即時の障害をもたらす致命的なエラーを生成することによって、アドレスエラーに反応する。これは、アプリケーションが正常にシャットダウンすることができないため不利である。
【００１７】
正常でないシャットダウンにより、データベース等のアプリケーションの回復時間が大幅に増大することとなる。特に、正常でないシャットダウンは、システムがオープンバッファをフラッシュしオープンファイルを閉じる機会を有する前に発生する可能性がある。その結果、Ｉ／Ｏ（入力／出力）装置に常駐する格納ファイルが破壊され一貫性のないものとなる場合がある。そのため、コンピュータファイルシステムを周知の良好な状態に戻すために、多くの時間と努力が必要となる。一般に、記憶システムのアーカイバルバックアップおよび／または更新ログが必要である。更に、最後のバックアップ以来入力されたデータによっては、可能であれば再生成する必要のあるものもある。
【００１８】
本発明の利点は、アドレスエラーに反応して、アドレスエラーの結果としてシステムをダウンさせる必要を無くすか、または重要な動作をより順序立ててシャットダウンするようなウィンドウの機会を提供するという可能性がより高いということである。
【００１９】
【課題を解決するための手段】
本発明は、包含的キャッシュによって提供される包含のプロパティ、コヒーレンシディレクトリまたは他のコヒーレンシフィルタが、エラー回復に対する一意の機会を与えるという認識に基づいている。従来からのバスベースのＭＥＳＩコヒーレンシシステムでは、キャッシュラインの所有者だけがそれを所有していることを知っている。従って、その所有者が消失するかまたはそのシステムへの接続に失敗すると、メモリの正確な状態が完全に未知の状態になる。包含的システムが包含を追跡するために使用するデータ構造（キャッシュのアドレスタグおよびディレクトリのディレクトリエントリ）には、ラインの所有権に関する冗長な情報と、場合によっては変更されたデータの最新のコピーとが含まれる。本発明は、時に、アプリケーションがパリティエラー等のアドレスエラーから回復することができるように、メモリの状態に関する十分なデータを提供することが可能である。提供される情報は、完全な回復を可能にするには十分であるが、しばしばその提供される情報により、システムが、データの破壊を避け、使命の重要なアプリケーションの正常なシャットダウンを可能にするほど十分長く実行することができる。
【００２０】
本発明の方法によれば、ローカルバス等のローカルチャネル上のアドレスエラーが検出される。そして、そのローカルチャネルに関連付けられたキャッシュメモリの１つまたは複数のラインのコヒーレンシ状態が読出され、それに応じて動作がとられる。コヒーレンシ状態の読出しは、すべてのキャッシュラインについての完全かつ能動的な問合せから、スヌープ要求に応答する場合等、選択的かつ受動的な問合せまで及ぶ。ＭＥＳＩ状態が変更（Ｍ）または排他的（Ｅ）である場合等、データ状態の整合性が未知である場合、主記憶装置の対応するデータがポイズニング（毒化）される（poisoned）。ポイズニング（poisoning）は、主記憶装置に検出可能であるが回復不能なエラーパターンを書込むことで実行される。代案として、システムバスにハードエラーを通知することによっても同じ結果が得られる。問合されたキャッシュラインのデータ状態の整合性が共用（Ｓ）または無効（Ｉ）である場合、そのラインは無視されるか、または無効であるとマーキングされる。キャッシュラインの状態が、ＭｕＭＥＳＩプロトコルにおける「変更・非キャッシュ」（Modified uncached）（Ｍｕ）状態等のように有効かつ整合性がある場合、そのラインは主記憶装置に書込まれるか、またはスヌープの要求側に供給される。
【００２１】
【発明の実施の形態】
図１は、マルチプロセッサコンピューティングシステム１００のブロック図である。ここでは、システムバス１０５が、主なシステム要素を相互接続している。なお、バスとしてシステムバス１０５が示されているが、バスは、主なシステム要素を相互接続する任意のチャネル（例えば、リング）の一例である。このシステムバス１０５には、主記憶装置１１０が接続されている。また、システムバス１０５には、１つまたは複数の入力／出力（Ｉ／Ｏ）装置１１５が接続されてもよい。Ｉ／Ｏ装置には、例として、ディスクドライブ、グラフィックス装置およびネットワークインタフェースが含まれる。また、システムバス１０５には、キャッシュ１２０、１２５が接続されている。なお、２つのキャッシュが示されているが、サポート可能な数であればキャッシュの数はいくつでも可能である。キャッシュ１２０、１２５には、それぞれローカルバス１３０、１３５が接続されている。システムバス１０５と同様に、ローカルバス１３０、１３５に関して示されるバス構造は、任意のタイプのチャネルの一例である。ローカルバス１３０には、プロセッサ１４０、１４５が接続されている。また、ローカルバス１３５には、プロセッサ１５０、１５５が接続されている。なお、各ローカルバスに２つのプロセッサが示されているが、プロセッサの数はシステムの制限内で任意であり、単一のプロセッサのみを含む。
【００２２】
図２および図３は、マルチプロセッサコンピューティングシステム１００のアドレスエラー回復方法のフローチャートである。図２および図３のフローチャートは、本方法を、以下の例に関連して示している。プロセッサ１４０は、所定のメモリアドレスからの読出しを実行するものと仮定する。プロセッサ１４５は、ローカルバス１３０上でこの読出しを調べ、そのアドレスが誤りであることを検出する。そのアドレスは本当に誤りであり、再送信やその他のプロトコルによって訂正することができない。これにより、キャッシュ１２０は整合性がなくなる。
【００２３】
図２に示す方法２００によれば、まず、検出するステップ２０５が実行され、ローカルバス１３０で検査されたアドレスが誤っていると判断される。一般に、この検出するステップ２０５には、アドレスフィールドに亙るパリティチェックが含まれる。エラーが検出された後、配置する（placing）ステップ２１０により、ローカルバス１３０が障害状態に置かれる。それによって、ローカルバス１３０がシステム１００の残りの部分から切離される。配置するステップ２１０により、プロセッサ１４０、１４５が静止することとなり、プロセッサ１４０、１４５またはローカルバス１３０に存在するいかなる破壊されたデータも、主記憶装置１１０またはシステム１００の他の部分に転送されないことが保証される。次に、通知するステップ２１５が実行され、他のプロセッサにエラーが通知される。通知を受けるプロセッサは、プロセッサ１５０、または１５５等の別のプロセッサか、あるいは、マスタプロセッサまたはメンテナンスプロセッサ（図示せず）等の独立したプロセッサでありうる。通知を受けたプロセッサが回復ルーチンを実行することができるように、それらプロセッサがキャッシュ１２０または主記憶装置１１０から切離されていないことが必要である。この切離されていないプロセッサに到達させるために、いかなる通知方法をも利用することができる。通知方法の一例として、割込みライン、好ましくは優先順位の高い割込みラインに信号を送る方法がある。
【００２４】
通知するステップ２１５に応答して、切離されていないプロセッサが、キャッシュ１２０の各ラインに対して問合せるステップ２２０を実行する。この時、ラインのコヒーレンシ状態に基づき、アドレスエラーの影響を最小限にするために適切な動作がとられる。問合せされたコヒーレンシ状態は、スヌープを行うシステムの場合はキャッシュ１２０内に格納され、ディレクトリベースのコヒーレンシシステムの場合はディレクトリ（図示せず）に格納される。好ましい実施態様では、考えられるコヒーレンシ状態は、ＭＳＩ、ＭＥＳＩ、ＭＯＥＳＩ、ＭｕＭＥＳＩまたは同様のプロトコルに基づいており、それらをまとめてＭＥＳＩベース方式と言う。所定のラインのＭＥＳＩ状態が変更・非キャッシュ（Ｍｕ）である場合（この状態が実施されている場合）、主記憶装置に書込むステップ２２５が実行され、所定のキャッシュラインが主記憶装置１１０に書込まれる。Ｍｕ−ＭＥＳＩプロトコルは、追加の「変更・非キャッシュ」（Ｍｕ）状態を利用することにより、基本のＭＥＳＩプロトコルを拡大させる。この状態は、基本的に、キャッシュラインが有効でかつ整合性があることを示している。これについては、「Optimization of MESI/MSI Protocol to Improve L3 Cache Performance」と題された係属中の米国特許出願第０９／２９０４３０号（代理人整理番号ＨＰ１０９８１２６０−１）により詳細に記載されており、この引用をもってその開示内容を本明細書に包含させたものとする。ＭＯＥＳＩプロトコルは、ＭＥＳＩプロトコルの別の変形であり、当業者には周知である。
【００２５】
所定ラインのＭＥＳＩ状態が、このデータの整合性が未知であることを示す変更（Ｍ）である場合、ポイズニング（毒化）するステップ２３０が実行される。このポイズニングするステップ２３０の目的は、破壊されたデータがシステム１００により後続の演算において使用されないことを保証することである。このポイズニングするステップ２３０により、検出可能であるが修正不可能なエラーパターンが、主記憶装置１１０のこのラインに対応するデータフィールドに書込まれる。従って、ポイズニングされたデータは他のプロセッサによって利用されることができず、正常にシャットダウンすることを可能にする十分な長さのポイズニングされたデータのその部分に関して重要な必要性なしに、他のプロセッサが実行を継続することができる。これは、ポイズニングされたデータがアプリケーションプログラムのユーザデータである場合にあり得る。好ましい実施態様では、データフィールドは、ＣＲＣ（巡回冗長検査）チェックビット、あるいは１つまたは複数のパリティビット等、冗長なエラー修正ビットを含む。この場合、好ましくは一意の予約されたシンドロームを有する周知の一意のエラーパターンを用いて、データフィールドにおける同じパターンをもたらす実際のエラーの可能性を最小化するようデータをポイズニングすることができる。
【００２６】
所定ラインのＭＥＳＩ状態が、このデータの整合性が未知であることを示す排他的（Ｅ）である場合、この状態が実施されているとすれば、ポイズニングするステップ２３０が同様に実行される。所定ラインのＭＥＳＩ状態が、そのラインの有効なコピーが既にメモリにあることを意味する共用（Ｓ）である場合、またはそのラインが使用不可能であることを示す無効（Ｉ）である場合、無視するステップ２３５が実行される。すなわち、この場合、回復ルーチンはいかなる動作も行わない。
【００２７】
システム１００についての別のアドレスエラー回復方法３００を、図３に示す。方法３００では、検出するステップ２０５および配置するステップ２１０は、方法２００と同様である。しかしながら、アドレスエラーを検出しローカルバス１３０を障害状態に置いた後、方法３００では、異なる回復ルーチンを実行する。特に、スヌープ要求に応答する以外は肯定的なステップを全くとらない。すなわち、キャッシュ１２０には、要求された場合にのみ要求された範囲まで問合せがなされる。より詳細には、キャッシュ１２０（特に、その中のキャッシュコントローラ）は、スヌープ要求の受信を継続し、以下のようにスヌープ応答するステップ３０５を実行する。すなわち、スヌープ要求がキャッシュ１２０のラインに関係し、そのラインのＭＥＳＩ状態が「変更・非キャッシュ」（Ｍｕ）である場合、回復ルーチンは無効マーキングステップ３１０およびダーティデータ配信ステップ３１５を実行する。無効マーキングステップ３１０により、ラインはキャッシュ１２０内において無効（Ｉ）であるとマーキングされる。ダーティデータ配信ステップ３１５により、データのラインが要求側に供給されるが、回復ルーチンはまた、要求側にそのデータが「ダーティ」であることを通知する。これは、キャッシュ１２０に保持されている値が、主記憶装置１０５と異なっている（すなわち、変更されている）ということを意味する。例えば、Intel Pentium（商標名）プロセッサが使用されている場合、データの特別な特性を示すためにＨＩＴＭ信号ラインをアサートすることができる。スヌープ要求が、変更（Ｍ）または排他的（Ｅ）コヒーレンシ状態等、未知の整合性を有するキャッシュ１２０のラインに関する場合、通知するステップ３２０が実行され、ハードエラーを示す信号がシステムバス１０５に送信される。スヌープ要求が、共用（Ｓ）または無効（Ｉ）ＭＥＳＩ状態を有するラインに関する場合、無視または無効マーキングステップ３２５が実行される。この場合、スヌープ要求は無視されるか、またはキャッシュ１２０の対応するラインが無効（Ｉ）とマーキングされる。方法３００は、スヌープを行うコヒーレンシプロトコルが使用される場合にのみ適用可能であり、ディレクトリベースのコヒーレンシプロトコルが使用される場合は適用不可能である。
【００２８】
図４は、本発明による別のアドレスエラー回復方法４００のフローチャートである。図４において、検出するステップ２０５および配置するステップ２１０は、図２または図３と同様である。図４の方法４００によれば、ローカルバス１２０上にアドレスエラーをもたらしたアドレスをラッチするために、ラッチするステップ４０５が実行される。この誤ったアドレスに基づき、方法４００では正しいアドレスを決定するステップ４１０が実行される。この正しいアドレスを決定するステップ４１０は、そのアドレスがラッチされる場合に応じて各種形式をとることができる。キャッシュ１２０がアドレスをラッチし、そのアドレス内のエラーを検出しなかった場合、キャッシュ１２０によってラッチされたアドレスは正しいアドレスである可能性が高い。エラーが検出された後にアドレスがラッチされる場合、正しいアドレスが、ラッチされた誤ったアドレスに非常に似ている可能性が統計的に高い。実際には、最も可能性のあるエラーは、シングルビットエラーである。例えば、アドレスフィールドが６４ビット幅である場合、ラッチされたアドレスからのハミング距離（すなわち、異なるビットの数の基準）が１である６４個の可能性のあるアドレスが存在する。このため、まず、キャッシュ１２０において、ラッチされたアドレスからのハミング距離が０または１であるアドレスを有するラインを探索し、見つからなかった場合、ラッチされたアドレスからのハミング距離が２であるアドレスを有するラインを探索することにより、キャッシュ１２０内で正しいアドレスが見つかる可能性が高い。必要であれば、キャッシュラインが見つかるまでより大きいハミング距離において探索を続けることができるが、ハミング距離が増大するほど、真の正しいアドレスを見つける可能性が減少し、間違った決定をする可能性が増大する。
【００２９】
正しいアドレスが決定されたと仮定すると、方法４００は、プロセッサ決定ステップ４１５を実行するために進む。ある形式では、プロセッサ決定ステップ４１５において、タグがラインの所有者を示す場合、キャッシュ１２０内にあるラインのタグが検査される。別の形式では、プロセッサ決定ステップ４１５において、ローカルバス１３０上の各プロセッサの下位レベルキャッシュを検査して、いずれのプロセッサが、正しいアドレスと認められたアドレスを有するラインをキャッシングしたかを判断する。包含のため、少なくとも１つのそのようなプロセッサを決定するべきである。
【００３０】
次に、再始動するステップ４２０により、ローカルバス１３０上の、下位レベルのキャッシュにそのラインを含まないプロセッサが再始動される。そして、例えば、図２のステップ２２０〜ステップ２３５または図３のステップ３０５〜ステップ３２５を必要とする、エラー回復ステップ４２５が実行される。このように、潜在的にローカルバス１３０に接続されるプロセッサのいくつかは、正常なシャットダウンを行うことができるまで動作を継続することができる。
【００３１】
回復方法４００の最後のステップは、修復するステップ４３０である。修復するステップ４３０によれば、ポイズニングしなければならなかった破壊されたデータを修復する試みがなされる。ステップ４０５〜ステップ４２５が概して、破壊されている可能性のあるデータをポイズニングすることに向けられているのに対し、修復するステップ４３０は、その問題を解決しようとするものである。例えば、タスク指名待ち行列ロック（dispatch-queue-lock）のアドレスが上述したようにポイズニングされている場合、タスク指名待ち行列ロックが保護するデータ構造をスキャンして、それが整合性があるかが判断され、その後ロックを修復することができる。このようなわずかなデータ構造を修正することにより、システムの寿命が大幅に増大すると信じられている。タスク指名待ち行列ロックについて上述したことと同様に、他のポイズン（poison）回復ルーチンもまた、他の重要なオペレーティングシステムまたはアプリケーション構造に対し、修復するステップ４３０の一部として書込むことが可能である。
【００３２】
修復するステップ４３０は、隠喩的に以下のように理解することができる。すなわち、病気にかかったデータを削除することにより、システムが尊厳を持って死ぬことができるまでシステム全体の寿命が長くなることが望まれる。これは、不健全なまたは破壊されたデータがシステム動作に対して重要でない場合にあり得る。しかしながら、破壊されたデータがシステムに重要である場合は、システムが動作を継続することができるようにそのデータを修復することができる。すなわち、そのような場合、診断に加えてその病気を治すことができる。
【００３３】
図５は、本発明のモジュールの観点からマルチプロセッサコンピューティングシステム１００を部分的に示したものである。ローカルバス１３０等の第１のチャネルには、アドレスエラー検出器モジュール５０５が接続されており、検出するステップ２０５および場合によっては配置するステップ２１０を実行する。アドレスエラー検出器モジュール５０５には、キャッシュコヒーレンシチェッカモジュール（キャッシュコヒーレンシ検査モジュール）５１０が接続されており、問合せするステップ２２０またはスヌープに応答するステップ３０５またはそれらの組合せを実行する。キャッシュコヒーレンシチェッカモジュール５１０およびシステムバス１０５等の第２のチャネルには、データポイズナ（poisoner）モジュール５１５が接続されており、ポイズニングするステップ２２５および／またはエラー信号を送信するステップ３２０を実施する。修復モジュール５２０は、方法４００の一部またはすべてのステップを実施する。図５に示すモジュールは、ソフトウェア、ハードウェア、ファームウェアまたはいくつかの組合せである。
【００３４】
本明細書で使用した用語および記述は、説明の目的のみのために示されるものであり、限定を意味してはいない。特に、本発明の方法を、例を用いて説明したが、その方法のステップは上述したものとは異なる順序でまたは同時に実行されるようにしてもよい。当業者は、特許請求の範囲およびそれらの等価物において定義されるような本発明の思想および範囲内において、これらおよび他の変形例が可能であるということを認識するであろう。
【００３５】
以下においては、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
１．コンピュータシステム（100）のローカルチャネル（130）上のアドレスエラーを検出するステップ（205）と、
前記ローカルチャネルに関連付けられたキャッシュメモリのラインのコヒーレンシ状態を読出すステップ（220、305）と、及び
回復ルーチンを実行するステップと、
を含む、方法。
２．前記回復ルーチンが、前記ラインのコヒーレンシ状態が変更された状態または排他的な状態である場合、主記憶装置（110）の対応するデータをポイズニングするステップ（230、320）
を含む、前記１記載の方法。
３．前記ポイズニングするステップが、検出可能であるが修正不可能なエラーを有するデータパターンを書込むステップを含む、前記２記載の方法。
４．前記ポイズニングするステップが、システムバス（105）のハードエラーを通知するステップ（320）を含む、前記２記載の方法。
５．前記回復ルーチンが、
前記ラインのコヒーレンシ状態が共用された状態または無効な状態である場合、前記キャッシュメモリ（120）のラインを無視するステップ（235、325）と、
前記ラインのコヒーレンシ状態が変更されキャッシングされていない状態である場合、主記憶装置（110）に前記ラインを書込むステップ（225）と、
を含む、前記１記載の方法。
６．前記コヒーレンシ状態が、ＭＥＳＩベースのプロトコルによる状態である、上記１記載の方法。
７．前記検出するステップに応答して、前記ローカルチャネルを障害状態に置くステップ（210）を更に含む、上記１記載の方法。
８．前記読出すステップ（220、305）が、コヒーレンシディレクトリを読出すステップを含む、上記１記載の方法。
９．スヌープ要求を受信するステップを更に含み、
読出すステップ（220、305）が、前記スヌープ要求の受信に応答して実行されるものであり、その読出すステップが、キャッシュメモリ（120）のライン内のコヒーレンシビットを読出すステップを含む、上記１記載の方法。
１０．第１のチャネル（130）と、
第２のチャネル（105）と、
第１のチャネル（130）と第２のチャネル（105）との間に接続されたキャッシュ（120）と、
第１のチャネル（130）に接続されたアドレスエラー検出器（505）と、
アドレスエラー検出器（505）に接続され、キャッシュ（120）のラインについてコヒーレンシ状態を返すキャッシュチェッカ（510）と、及び
キャッシュチェッカ（510）および第２のチャネル（105）に接続され、キャッシュ（120）のラインのコヒーレンシ状態に基づき、第２のチャネル（105）に予め決められたデータパターンを選択的に書込むデータポイズナ（515）と、
を含む、コンピュータシステム。
【００３６】
【発明の効果】
本発明によれば、マルチプロセッサコンピューティングシステムにおいて、ローカルバス等のローカルチャネルでアドレスエラーが検出され、そのローカルチャネルに関連づけられたキャッシュメモリの１つまたは複数のラインのコヒーレンシ状態が読出されて、それに応じて動作が取られる。即ち、アドレスエラーに反応してキャッシュコヒーレンシ情報を利用することが可能となり、アドレスエラーの結果としてシステムをダウンさせる必要を無くすか、または重要な動作をより順序立ててシャットダウンするようなウィンドウの機会を提供するという可能性が高くなる。
【図面の簡単な説明】
【図１】本発明によるマルチプロセッサコンピューティングシステムのブロック図である。
【図２】本発明による第１の方法のフローチャートである。
【図３】本発明による第２の方法のフローチャートである。
【図４】本発明による第３の方法のフローチャートである。
【図５】本発明によるモジュールのブロック図である。
【符号の説明】
100  マルチプロセッサコンピューティングシステム
105  システムバス
110  主記憶装置
120  キャッシュ
130  ローカルバス
205  検出するステップ
210  配置するステップ
220  問合せするステップ
225  主記憶装置に書込むステップ
230  ポイズニングするステップ
235  無視するステップ
305  スヌープ応答するステップ
320  通知するステップ
325  無視または無効マーキングするステップ
505  アドレスエラー検出器モジュール
510  コヒーレンシチェッカモジュール
515  データポイズナモジュール
【図１】
0003693555.tif 000002
【図２】
0003693555.tif 000003
【図３】
0003693555.tif 000004
【図４】
0003693555.tif 000005
【図５】
0003693555.tif 000006