(57)【要約】      （修正有）【課題】マルチプロセッサ・システムにおけるマルチプル・キャッシュのためのデータ・コヒーレンス情報を保持するスヌープフィルタのエントリ除去によるキャッシュラインのインバリデーションの防止。【解決手段】スヌープフィルタが、マルチプロセッサ・システムのマルチプル・キャッシュのためのデータ・コヒーレンス情報を保持する。排他的所有権のスヌープフィルタだけが、プロセッサにより排他的に所有されるエントリを記憶する。コヒーレンス・エンジンは、前記エントリが排他状態で出力される場合に前記スヌープフィルタからエントリが除去されるように、前記スヌープフィルタ中の前記エントリをアップデートする。データ・コヒーレンスを確実にするために、前記コヒーレンス・エンジンは、読出リクエストを書込リクエストから分離するシーケンス・ルールをインプリメントする。【選択図】図２
2008027435.tif 000002
【特許請求の範囲】
【請求項１】
排他状態を有するエントリだけをスヌープフィルタに記憶することと、
リクエストが前記エントリと関連するラインの排他的所有権を変更すると、前記スヌープフィルタのエントリをアップデートすること、
を備える方法。
【請求項２】
前記スヌープフィルタをアップデートする際に、読出リクエストを書込リクエストから分離すること、
を更に備える請求項１に記載の方法。
【請求項３】
前記エントリをアップデートすることは、
読出リクエストが受信されると、前記スヌープフィルタの前記エントリを削除すること、
を有する請求項１に記載の方法。
【請求項４】
前記エントリをアップデートすることは、
プロセッサの書き込みリクエストが結果としてヒットになると、前記ラインの所有者を変更すること、
を更に有する請求項１に記載の方法。
【請求項５】
前記エントリをアップデートすることは、
プロセッサが結果としてミスになる書込リクエストを発行すると、前記スヌープフィルタの新規なエントリを前記プロセッサに割り当てること、
を更に有する請求項１に記載の方法。
【請求項６】
前記エントリをアップデートすることは、
ダイレクト・メモリ・アクセス（ＤＭＡ）のリクエストが結果として前記スヌープフィルタのヒットになると、前記スヌープフィルタの前記エントリを削除すること、
を更に有する請求項１に記載の方法。
【請求項７】
書込リクエストが結果としてミスであると、キャッシュ・ラインが前記スヌープフィルタにより追跡される全てのプロセッサに、インバリッド・メッセージを送信すること、
を更に備える請求項１に記載の方法。
【請求項８】
書込リクエストが結果としてヒットになると、前記ラインの現在の所有者にインバリッド・メッセージを送信すること、
を更に備える請求項１に記載の方法。
【請求項９】
複数のプロセッサと、
前記プロセッサに接続され、排他状態を有するエントリだけを記憶しているスヌープフィルタと、
前記スヌープフィルタの前記エントリをアップデートするコヒーレンス・エンジンと、
を備える装置。
【請求項１０】
前記コヒーレンス・エンジンは、
読出リクエストを書込リクエストから分離するシーケンス・ルールをインプリメントする回路、
を有する請求項９に記載の装置。
【請求項１１】
前記コヒーレンス・エンジンは、
読出リクエストが前記コヒーレンス・エンジンにより受信されると、前記スヌープフィルタからエントリを除去するための、スヌープフィルタアップデートユニットを
を更に有する請求項９に記載の装置。
【請求項１２】
前記コヒーレンス・エンジンは、
ラインの排他状態をシェアード状態に変更するためのＧｏｔｏ＿Ｓユニット、
を更に有する請求項１１に記載の装置。
【請求項１３】
前記コヒーレンス・エンジンは、
書込リクエストが前記コヒーレンス・エンジンにより受信されると、少なくとも一つの前記プロセッサにインバリッド・メッセージを送信するためのインバリッドユニット、
を更に有する請求項９に記載の装置。
【請求項１４】
前記複数のプロセッサは、
ＭＥＳＩ（モディファイド、排他的、シェアード、又は、インバリッド）状態を使用するキャッシュ・コヒーレンス・プロトコルをサポートする複数のキャッシュ、
を有する請求項９に記載の装置。
【請求項１５】
ダイレクト・メモリ・アクセス（ＤＭＡ）リクエストを発行するために、前記スヌープフィルタに接続された複数の入出力（Ｉ／Ｏ）デバイス、
を更に有する請求項９に記載の装置。
【請求項１６】
複数のプロセッサ、
前記複数のプロセッサにより一部がキャッシュに格納されるサーバ・メモリ、
外部リクエストを受信して応答する少なくとも一つのサーバ入出力（Ｉ／Ｏ）デバイスと、
排他状態を含むエントリだけを記憶するためのスヌープフィルタと、
前記スヌープフィルタの前記エントリをアップデートするためのコヒーレンス・エンジンと、
を有するチップセット、
を備えるシステム。
【請求項１７】
前記コヒーレンス・エンジンは、
読出リクエストを書込リクエストから分離するシーケンス・ルールをインプリメントするための回路、
を有する請求項１６に記載のシステム。
【請求項１８】
前記コヒーレンス・エンジンは、
前記コヒーレンス・エンジンにより読出リクエストが受信されると、前記スヌープフィルタからエントリを除去するためのスヌープフィルタ・アップデートユニット、
を更に有する請求項１６に記載のシステム。
【請求項１９】
前記コヒーレンス・エンジンは、
ラインの排他状態をシェアード状態に変更するＧｏｔｏ＿Ｓユニット、
を更に有する請求項１８に記載のシステム。
【請求項２０】
前記コヒーレンス・エンジンは、
前記コヒーレンス・エンジンにより書込リクエストが受信されると、少なくとも一つのプロセッサにインバリッド・メッセージを送信するためのインバリッドユニット、
を更に有する請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ・システムにおけるキャッシュのコヒーレンスに関する。
【背景技術】
【０００２】
マルチプル・キャッシュを備えるマルチプロセッサ・システムにおいて、各々のキャッシュは、メモリに格納されたわずかなデータのコピーを有している場合がある。キャッシュ内のマルチプル・データ・コピーがコヒーレントではないときに、問題が生じる。多様な技術が、データ・コヒーレンスを確保するために開発された。例えば、１つのキャッシュ内のデータが変更されるときに、データの他のコピーは、それらが使用されないようにインバリッドとマークされる。
【０００３】
キャッシュ内のデータのコピーは、しばしばキャッシュ・ライン、メモリ・ライン、ラインとして参照される。スヌーピング・オペレーションは、例えば、キャッシュの中にも存在する可能性のあるメイン・メモリのロケーションに対するリード／ライト・オペレーションのように、バスのエージェントが、メモリ・トランザクションのためのバスをモニタするプロセスに関する。エージェントは、例えば、スヌープフィルタのように、ディレクトリ内のメモリ・トランザクションに関係しているキャッシュ・ラインの状態を記録してもよい。キャッシュ・ラインの状態は、そのラインが、メイン・メモリの外側に１つだけバリッドなコピーを有しているか否か、マルチプル・キャッシュにより共有される複数のバリッドなコピーを有しているか否か、又は、インバリッドにされたか否かを示してもよい。スヌープフィルタ内のデータエントリは、メイン・メモリ内のそのアドレスによりしばしばインデックスを付けられる。
【０００４】
大きいスヌープフィルタは、プロセッサ・キャッシュのトータル・サイズの数倍のカバレージを提供できることが一般に求められる（例えば、８倍のカバレージというのは、そのスヌープフィルタが、スヌープフィルタが保持できるキャッシュの約８倍のキャッシュラインが記載された情報を保持できることを示す技術用語である）。大きいスヌープフィルタは、プロセッサ・キャッシュのヒット率を増大させ、システム性能を改善できる可能性がある。しかし、プロセッサ・キャッシュのサイズは時間とともに増加しているので、回路設計者には、ダイ・サイズの制限により同等な１ｘカバレージで供給することが強く求められている。したがって、スヌープフィルタは、新規なメモリ・トランザクションのためのラインの状態を記録するためのスペースがときどき無くなる場合があり、そして、新規なトランザクションを収容するために、スヌープフィルタからエントリを立ち退かせる必要がある場合がある。エントリが一旦スヌープフィルタから立ち退かせられると、バック−インバリデーション・メッセージが、立ち退かせられたエントリと関連するラインのバリッドなコピーを保持している可能性のある全てのプロセッサ・キャッシュに送信される。実験は、使用されようとしていたキャッシュ・ラインのバック・インバリデーションのため、大量（例えば２０％）のキャッシュがミスしたことを示している。
【発明を実施するための最良の形態】
【０００５】
図１に示されたように、マルチプロセッサ・システム１０の実施形態は、チップセット１３と相互接続した複数の処理ノード１７を備えていてよい。各々の処理ノード１７は、一つ以上のプロセッサ１１（処理ノードにつき２つのプロセッサが示される）と、キャッシュ１２を有していてもよい。各々のキャッシュ１２は、「ホーム・ノード」（このキャッシュが配置された処理ノード）のプロセッサ１１によって、局所的にアクセス可能であってもよく、「リモートノード」（ホーム・ノード以外の処理ノード）のプロセッサ１１によって、遠く離れてアクセス可能であってもよい。キャッシュ１２は、ホーム・ノードのプロセッサ１１に関するローカルキャッシュとして参照される。処理ノード１７は、一つ以上のフロントサイド・バス（ＦＳＢ）１４（２つのＦＳＢだけが示される）、又は、他のタイプのデータ・パス（例えば２地点間接続）を経由してチップセット１３に接続されてもよい。一つ以上の処理ノード１７は、シングルチップ上でインプリメントされてもよい。システム１０は、それが持つ高い集合的な処理能力のため、サーバーシステムとして使用されてもよい。しかし、システム１０は、また、デスクトップコンピュータ、又は、他のいかなるコンピューティング・システムとして使用されてもよい。
【０００６】
チップセット１３は、各ＦＳＢ１４から受け取るリクエストを処理し、そして、各キャッシュ１２間のデータ・コヒーレンスを維持するためのコヒーレンス・コントローラ１３２を有してもよい。コヒーレンス・コントローラ１３２のファンクションは、図２により詳細を後述する。チップセット１３は、各処理ノード１７とメモリ１５の記憶場所にアクセスするためのシステム１０の他のコンポーネントとのインタフェースを供給するメモリーコントローラ１３４を有していてもよい。メモリ１５は、例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）デバイス、シンクロナス・ダイナミック・ランダム・アクセス・メモリ（ＳＤＲＡＭ）デバイス、ダブル・データレート（ＤＤＲ）ＳＤＲＡＭデバイス、又は、サーバ又は一般的なアプリケーションに適している他の揮発性、又は、不揮発性メモリ・デバイスのようなメモリー素子の一つ以上のタイプを含んでもよい。いくつかのサーバー・アプリケーションにおいて、メモリ１５に記憶されるデータビットは、エラー訂正コード（ＥＣＣ）によりエラープロテクトされてもよい。
【０００７】
チップセット１３は、また、処理ノード１７と、一つ以上の入出力デバイス１６にアクセスするためのシステム１０の他のコンポーネントとのインタフェースを提供するＩ／Ｏコントローラ１３６を有していてもよい。入出力デバイス１６は、インダストリー・スタンダード・アーキテクチャー（ＩＳＡ）デバイス、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ）デバイス、ＰＣＩ・エクスプレス・デバイス、ユニバーサル・シリアルバス（ＵＳＢ）デバイス、スモール・コンピュータ・システム・インタフェース（ＳＣＳＩ）デバイス、又は、サーバ又は一般的なアプリケーションに適している他の標準又は専用の入出力デバイスを含んでもよい。いくつかの実施形態において、チップセット１３は、シングルチップとしてインプリメントされてもよい。いくつかの実施形態において、チップセット１３は、２つ以上のチップとしてインプリメントされてもよい。チップセット１３は、時にはメモリ制御ハブ（ＭＣＨ）又は、ノース・ブリッジ（ＮＢ）として参照されてもよい。マルチ−チップ・インプリメンテーションにおいて、チップセット１３の二次チップは、入出力ハブ（ＩＯＨ）、入出力コントローラ・ハブ（ＩＣＨ）、及び／又は、サウス・ブリッジ（ＳＢ）として参照されてもよい。
【０００８】
プロセッサ１１は、短時間のアクセスを容易にするために、それぞれのローカルキャッシュ１２のメモリのラインを記憶してもよい。キャッシュ１２は、データ、命令、又は、両方の組合せを記憶してもよい。各々のキャッシュ・ラインのために、キャッシュ１２は、メモリ１５の対応するラインとキャッシュ・ラインを関連させるか、又は、マップ化するためのタグ（例えば、メモリ・アドレスの一部）を記憶してもよい。キャッシュ１２は、また、各々のキャッシュ・ラインのためのコヒーレンス状態を記憶して、アップデートしてもよい。例えば、キャッシュ１２は、キャッシュ・ラインが、モディファイド（Ｍ）状態、排他的（Ｅ）状態、シェアード（Ｓ）状態、又は、インバリッド（Ｉ）状態を有することができるＭＥＳＩコヒーレンス状態をサポートしてもよい。
【０００９】
ＭＥＳＩ状態を使用しているキャッシュ・コヒーレンス・プロトコルの実例によれば、インバリッド状態（Ｉ）は、その関連したキャッシュ・ラインが、ラインの現在のコピーでないことを示す。ラインの現在のコピーは、メモリ１５内、及び／又は、リモートノード内の他のキャッシュ１２のうちの１つに存在してもよい。シェアード状態（Ｓ）は、その関連したキャッシュ・ラインが、ラインの現在のコピーであることと、０個以上の他のキャッシュ１２は、また、シェアード状態のラインの現在のコピーを有してもよいことを示す。排他状態（Ｅ）は、関連したキャッシュ・ラインをその中に有するキャッシュ１２が、ラインの所有権を獲得し、そして、ラインの現在のコピーを有することを示す。更に、Ｅ状態は、もはや他のキャッシュ１２が、Ｍ、Ｅ、又は、Ｓ状態のラインのコピーを有さないことを示す。モディファイド状態（Ｍ）は、関連したキャッシュ・ラインをその中に有するキャッシュ１２が、モディファイドされたラインの現在のコピーを有することを示す。Ｅ状態と同様に、Ｍ状態は、もはや他のキャッシュ１２は、Ｍ、Ｅ、又は、Ｓ状態のラインのコピーを有さないことを示す。更に、Ｍ状態は、関連したラインが、メモリ１５の対応するデータラインよりもより最近のものであってよいことを示す。Ｍ状態、又は、Ｅ状態のいずれも有しているラインは、キャッシュ１２のうちの１つと排他的（例えば、所有される、又は、モディファイド）に関連され、Ｍ状態及びＥ状態は、Ｅ／Ｍ状態に結合されてもよく、時に排他状態として参照される。
【００１０】
キャッシュ・ラインの状態は、例えば、システム１０の集中化した配置のスヌープフィルタ又は他の任意のメモリ・コンポーネントのように、集中化したディレクトリにより記録されてもよい。図２に関して、本実施形態におけるコヒーレンス・コントローラ１３２は、キャッシュ・ラインのコヒーレンス情報を提供するためのスヌープフィルタ２４を含んでもよい。図２に示すように、コヒーレンス・コントローラ１３２の実施形態では、いくつかのＦＳＢポート（ＦＳＢ＿Ｐｏｒｔ＿０  ２１及びＦＳＢ＿Ｐｏｒｔ＿１  ２２）、コヒーレンス・エンジン２３、及び、スヌープフィルタ２４を含んでもよい。
【００１１】
スヌープフィルタ２４は、コヒーレンス情報を記憶するためのウェイ、又は、ラインを含んで、例えば、完全に結合したアレー、セット結合したアレー、又は、直接にマップ化されたアレーのような一つ以上のストレージ・アレーを含んでもよい。一実施形態において、スヌープフィルタ２４は、９６キャッシュ・ラインのコヒーレンス情報を記憶するために、各４Ｋのセットがいずれも９６のスロット（又は、ウェイ）２２５（１つだけが示される）を含む、９６−ウェイ・セット結合アレーを有している。キャッシュラインは、各４Ｋのセットのうちの１つにより、例えば、メモリ・アドレスの最後の１２のビットを使用することでマップ化されてもよい。各々のウェイ２２５は、ラインのための情報を記憶してもよい。情報は、アドレスタグ及びプレゼンス・ベクトルを含んでもよい。アドレス・タグは、各ラインのメモリ・アドレスの全部、又は、一部を含んでもよい。最後の１２のメモリ・アドレスビットがセットの位置を決めるために使用される上記の実例において、アドレス・タグは、それらの１２のアドレスビットに先んじている他のメモリ・アドレスビットであってもよい。プレゼンス・ベクトルは、どのＦＳＢ１４を、キャッシュ・ラインを有する可能性があるキャッシュ１２に接続するか否かを示してもよい。
【００１２】
一実施形態において、スヌープフィルタ２４は、Ｅ／Ｍ状態を有しているラインに関するエントリだけを記憶してもよい。そのようなスヌープフィルタエントリは、時にはＥ／Ｍエントリとして参照される。すなわち、例えば、メイン・メモリ１５の外側のラインの排他的・コピーを含むか、又は、含んでもよいなんらかのキャッシュ１２がある場合に、スヌープフィルタ２４は、ラインのＥ／Ｍエントリを記憶してもよい。Ｅ／Ｍエントリだけを記憶することは、スヌープフィルタ２４に記憶されるエントリの合計数を減らす可能性があり、そして、スヌープフィルタの大きさを効果的に広くする可能性がある。トレードオフとして、Ｅ／Ｍエントリだけを記憶することは、スヌープフィルタ２４により生成されるスヌープの数を増加させる可能性がある。しかし、特に読出が集中するアプリケーションに対して、全体的なシステム性能が一般に改善される。
【００１３】
一実施形態において、メモリ・トランザクションのためのリクエストがコヒーレンス・コントローラ１３２に到着するときに、コヒーレンスエンジン２３が、リクエストをどこへ発送するかを決定してもよい。メモリ・トランザクションは、メモリ１５、又は、任意のキャッシュ１２にアクセスを要求するトランザクションに関する。コヒーレンス・エンジン２３は、スヌープフィルタがリクエストされたラインの情報を有するか否か決定するために、スヌープフィルタ２４をルックアップしてもよい。スヌープフィルタ２４が情報を有する場合、コヒーレンス・エンジン２３は、ラインのプレゼンス・ベクトルに基づくラインの現在のコピーを有するキャッシュ１２に接続するＦＳＢポート（２１、又は、２２）に、リクエストを発送する。トランザクションがリクエストされたラインの状態を変更する可能性がある場合、コヒーレンス・エンジン２３は、変更を反映するためにスヌープフィルタ２４の情報をアップデートする。スヌープフィルタ２４がラインの情報を有していない場合、コヒーレンス・エンジンは、リクエストされたラインのコヒーレンス情報を記録するために、スヌープフィルタにエントリを加えてもよい。
【００１４】
スヌープフィルタ２４におけるＥ／Ｍだけのストレージをサポートするために、コヒーレンス・エンジン２３は、データ・コヒーレンスを保持するためのシーケンス・ルールをインプリメントする。シーケンス・ルールは、メモリーリクエストタイプを読出リクエスト及び書込リクエストに分析する。読出リクエストは、書込リクエストから分離される。プロセッサ１１及び入出力デバイス１６（図１）は、各々読出リクエスト及び書込リクエストを発行してもよい。プロセッサ・リクエストのために、書込リクエストは、書込（別名所有権のための読出）と書込インバリッドを含んでもよい。各々のリクエスト・タイプのために、異なるコヒーレンス・アクションは、スヌープフィルタのヒット及びスヌープフィルタのミスの場合に用いられる。コヒーレンス・エンジン２３は、ハードウエア、又は、埋め込まれたファームウェアによるシーケンス・ルールをインプリメントしてもよい。
【００１５】
【表１】
2008027435.tif 000003
【００１６】
シーケンス・ルールの実例がテーブル１に記載されている。各々のリクエスト・タイプ（例えば、読出、又は、書込）に対して、そして、各々のスヌープフィルタの結果（例えば、ヒット、又は、ミス）に対して、コヒーレンス・エンジン２３は、データ・コヒーレンスを保持するために、スヌープフィルタ・アクション及びコヒーレンス・アクションを実施する。スヌープフィルタ・アクションは、スヌープフィルタエントリをアップデートするアクションに関する。コヒーレンス・アクションは、キャッシュ・ラインのコヒーレンス状態をアップデートするための一つ以上のプロセッサにスヌープ・メッセージを送信するアクションに関する。一実施形態において、コヒーレンス・エンジン２３は、スヌープフィルタアップデートユニット２５、インバリッドユニット２６、そして、スヌープフィルタ・アクションとコヒーレンス・アクションをインプリメントするためのＧｏｔｏ＿Ｓユニット２７を含む回路を有していてもよい。
【００１７】
例えば、プロセッサがメイン・メモリからラインを読みとることをリクエストし、そして、リクエストがスヌープフィルタ２４においてヒットする結果になると仮定する。スヌープフィルタ２４のヒットは、そのエントリが排他状態（Ｅ／Ｍ）であり、関連したラインがプロセッサ・キャッシュによって、現在所有されることを意味する。このように、他のプロセッサからの新規な読出リクエストは、ラインにおいて、Ｅ／Ｍ状態を終了させて、Ｓ状態に入らせる。スヌープフィルタ２４がＥ／Ｍエントリを記憶するだけであり、新しくリクエストされたエントリであり、現在Ｓ状態であるならば、スヌープフィルタから除去されなければならない。このように、スヌープフィルタアップデートユニット２５は、スヌープフィルタからそのエントリを削除するように、スヌープフィルタ２４に指示する。更に、Ｇｏｔｏ＿Ｓユニット２７は、ラインがシェアードになったことをそのラインの現在の所有者に知らせるための「Ｇｏｔｏ＿Ｓ」スヌープ・メッセージを送信する。従って、現在の所有者は、Ｅ／ＭからＳまでラインの状態を変更してもよい。
【００１８】
読出リクエストが、結果としてスヌープフィルタ２４のミスになる場合、リクエストされたエントリは、０以上のキャッシュにより現在所有されていてもよい。メイン・メモリの現在のコピーは、最新であり、新規な読出リクエストは、その現在の状態を変更しない。このように、スヌープフィルタ２４は、アップデートされず、そして、コヒーレンス・アクションは実施されない。
【００１９】
プロセッサが、ラインをメイン・メモリへ書き込むリクエストをして、そのリクエストが結果としてスヌープフィルタ２４のヒットとなる場合、スヌープフィルタアップデートユニット２５は、そのリクエストしているプロセッサがラインの新規な所有者であることを示すスヌープフィルタエントリをアップデートする。スヌープフィルタ２４は、排他的所有権が変わったにもかかわらず、エントリがまだＥ／Ｍ状態であるので、エントリを保持する。ユニット２６をインバリッドにすることは、現在のローカルコピーはもはや最新でないことを示すために、インバリッド・メッセージをラインの現在の所有者に送信する。このように、排他的アクセス権が、リクエストしているプロセッサに許可され、現在の所有者により所有されるコピーは、インバリッドにされる。
【００２０】
プロセッサは、ラインをメイン・メモリへ書込むようリクエストして、そのリクエストは、スヌープフィルタ２４のミスに結果としてなると仮定する。ミスは、任意のプロセッサによりラインが排他的に所有されないことを示す。なぜならば、書込リクエストは、リクエストするプロセッサにより排他的に所有されるラインを発生させ、スヌープフィルタアップデートユニット２５は、スヌープフィルタエントリをリクエストされたラインに割り当てる。メイン・メモリの外側でキャッシュに入れられる可能性のあるラインのコピーは、インバリッドにされる。従って、インバリッドユニット２６は、インバリッドにするメッセージを、現在のローカルコピーがもはや最新でないことを示すプロセッサの全てに発行する。その結果として、排他的アクセス権が、リクエストしているプロセッサに許可される。
【００２１】
他のシナリオにおいて、プロセッサは、ラインを書込インバリッドにすることをリクエストしてもよい。書込インバリッドオペレーションは、メイン・メモリに対する書込操作であり、加えて、プロセッサのローカルキャッシュ内の全てのコピーをインバリッドにする。書込インバリッドの後、メイン・メモリは、システムの現在のコピーだけを保持する。このように、関連するスヌープフィルタエントリは、もしあれば、エントリが現在の所有者によりもはや排他的に所有されないことを示すために削除される。従って、書込インバリッドリクエストが結果としてスヌープフィルタ２４のヒットになる場合、インバリッドユニット２６は、現在の所有者にインバリッドにするメッセージを送信する。書込インバリッドリクエストが結果としてミスになる場合、インバリッドユニット２６は、メイン・メモリの外側のそのコピーは、もはや最新でないことを示すためのインバリッドにするメッセージをプロセッサの全てに送信する。書込インバリッドリクエストの結果としては、ラインのコピーを有するキャッシュ１２が無くなる。
【００２２】
入出力デバイスは、時にはダイレクト・メモリ・アクセス（ＤＭＡ）読出リクエストを発行してもよい。Ｉ／Ｏ  ＤＭＡ読出リクエストは、プロセッサ読出リクエストと同様にして扱われる。このように、スヌープフィルタ２４のヒットがある場合、関連されたスヌープフィルタエントリは削除され、現在の所有者により所有されるコピーは、Ｓ状態に変更される。ミスがある場合、スヌープフィルタ・アクション、又は、コヒーレンス・アクションは実施されない。
【００２３】
入出力デバイスがＤＭＡ書込リクエストを発行し、そのリクエストがヒットという結果になる場合、スヌープフィルタアップデートユニット２５は、その関連されたラインがもはやＥ／Ｍ状態にないことを示すエントリを削除する。インバリッドにするメッセージは、現在ラインを所有するプロセッサに送信される。リクエストが結果としてミスになる場合、インバリデートメッセージは、全てのプロセッサの各々がラインのコピーを所有する可能性があるので、全てのプロセッサに送信される。Ｉ／Ｏ転送は、コヒーレンス・アクションが完了された後に発生する。
【００２４】
コヒーレンス・エンジン２３により実行されるある一例のプロセスが図３に示される。図１を同様に参照して、ブロック３１０において、コヒーレンス・エンジン２３は、メモリ・トランザクションのためのプロセッサ、又は、入出力デバイスのうちの１つからリクエストを受信する。ブロック３２０において、コヒーレンス・エンジン２３は、リクエストされたラインがスヌープフィルタのエントリを有するか否かを決定するために、スヌープフィルタ２４を調べる。スヌープフィルタ２４のリクエストされたラインのためのエントリがある場合、ブロック３３０において、コヒーレンス・エンジン２３は、リクエストがエントリの排他的所有権を変更するか否かを決定する。ブロック３４０において、排他的所有権の変更がある場合、コヒーレンス・エンジン２３は、スヌープフィルタエントリをアップデートする。排他的所有権の変更がない場合、コヒーレンス・エンジン２３は、スヌープフィルタ２４をアップデートしない。ブロック３２０に戻り、リクエストされたラインがスヌープフィルタ２４のエントリを有さない場合、コヒーレンス・エンジン２３は、リクエストが、ブロック３５０において、プロセッサにより排他的に所有されるラインを発生させるか否かを決定する。ラインがプロセッサにより排他的に所有される場合、ブロック３６０において、コヒーレンス・エンジン２３は、エントリをリクエストされたラインに割り当てる。コヒーレンス・エンジン２３は、ラインがプロセッサにより排他的に所有されない場合、スヌープフィルタ２４をアップデートしない。
【００２５】
ブロック３７０において、リクエストされたトランザクションが結果としてミスになる読出である状況を除いて、コヒーレンス・エンジン２３は、一つ以上のプロセッサにスヌープ・メッセージを発行する。スヌープ・メッセージは、そのラインがＳ状態に変わったことをラインの現在の所有者に通知する「Ｇｏｔｏ＿Ｓ」メッセージであってもよい。スヌープ・メッセージは、そのラインがもはやバリッドでないことをラインの現在の所有者に通知するインバリデートメッセージであってもよい。スヌープ・メッセージは、いくつかがラインのコピーを所有する可能性がある全てのプロセッサについて、ライン又はいくつかのシナリオの現在の所有者に送信されてもよい。スヌープ・メッセージのタイプと、スヌープ・メッセージの宛先は、リクエスト・タイプとスヌープフィルタの結果（例えばヒット、又は、ミス）に依存してもよい。ブロック３８０において、スヌープ・メッセージが送信された後で、リクエストしているエージェントは、リクエストされたトランザクションの実行を進めてもよい。
【００２６】
前述の本明細書においては、特定の実施形態が記載されている。しかし、それに対して、添付の請求の範囲と広義の趣旨とから逸脱することなく、多様な形態変更と改変ができることは明白である。本明細書及び図面は、このように、制限的な意味よりもむしろ実例と考えられるものである。
【図面の簡単な説明】
【００２７】
本実施形態は、例により示されるが、限定するものではなく、添付図面において、同様な参照番号は同様な要素を示す。本明細書中に記載される「一」又は「一つの」の実施形態とは、同じ実施形態である必要は無く、そして、そのような記載は、少なくとも１つの実施形態を意味することに注意しなければならない。
【００２８】
【図１】複数のキャッシュを含むマルチプロセッサ・システムの実施形態のブロック図である。
【００２９】
【図２】図１のマルチプロセッサ・システムにおける、スヌープフィルタ及びコヒーレンス・エンジンを含むコヒーレンス・コントローラの実施形態のブロック図である。
【００３０】
【図３】図２のコヒーレンス・エンジンによりインプリメントされるシーケンス・ルールのプロセスを示しているフローチャートの一例である。
【図１】
2008027435.tif 000004
【図２】
2008027435.tif 000005
【図３】
2008027435.tif 000006
【外国語明細書】
2008027435.tif 000007
2008027435.tif 000008
2008027435.tif 000009
2008027435.tif 000010
2008027435.tif 000011
2008027435.tif 000012
2008027435.tif 000013
2008027435.tif 000014
2008027435.tif 000015
2008027435.tif 000016
2008027435.tif 000017
2008027435.tif 000018
2008027435.tif 000019
2008027435.tif 000020
2008027435.tif 000021
2008027435.tif 000022
2008027435.tif 000023
2008027435.tif 000024
2008027435.tif 000025