(57)【要約】【課題】部分的且つ非コヒーレントなメモリアクセスの観点からキャッシュ・コヒーレンス・リンクに基づく相互接続においてメモリ順序付けを保つ方法及び装置を提供する。【解決手段】一実施例で、例えば部分読出のような、部分的なメモリアクセスは、読出無効化メッセージ及び／又はスヌープ無効化メッセージを用いて実施される。ピアノードがデータを参照するスヌープ無効化メッセージを要求ノードから受信する場合に、ピアノードはそのデータに関連するキャッシュラインを無効化し、データを要求ノードへ直接転送しない。一実施例で、ピアノードが参照されるキャッシュラインを変形コヒーレンス状態で保持する場合に、スヌープ無効化メッセージの受信に応答して、ピアノードは、データに関連するホームノードへデータをライトバックする。【選択図】図４ｂ
2010015572.tif 000002
【特許請求の範囲】
【請求項１】
データ要素の読出に関連し、ピアエージェントに、前記データ要素に関連するキャッシュラインが無効にされるべきであり、前記ピアエージェントが前記キャッシュラインを要求エージェントに転送すべきでないことを示すことができる第１のメッセージを生成するプロトコルレイヤロジックと、
スヌープメッセージを前記ピアエージェントへ送信するよう前記プロトコルレイヤロジックへ結合される物理レイヤロジックと
を有する装置。
【請求項２】
前記第１のメッセージはSnoop  Invalidate  No  Forwardメッセージを含む、請求項１記載の装置。
【請求項３】
前記プロトコルレイヤロジックは、更に、前記データ要素に関連するホームエージェントへ送られるRead  Invalidate  No  Forwardメッセージを生成することができる、請求項２記載の装置。
【請求項４】
前記第１のメッセージはスヌープ無効化メッセージを含む、請求項１記載の装置。
【請求項５】
前記データ要素の前記読出は、前記キャッシュラインからの前記データ要素の部分的な読出を含む、請求項１記載の装置。
【請求項６】
前記プロトコルレイヤロジックは、相互接続レイヤスタックが前記物理レイヤロジック、リンクレイヤロジック、及び前記プロトコルレイヤロジックを有するように、前記相互接続レイヤスタックで前記物理レイヤロジックへ結合される、請求項１記載の装置。
【請求項７】
前記物理レイヤロジックは、前記ピアエージェントへのシリアル・ポイント・ツー・ポイントリンクへ結合することができ、前記プロトコルレイヤロジックは、ＭＥＳＩＦキャッシュ・コヒーレンス・プロトコルを実施することができる、請求項６記載の装置。
【請求項８】
データを参照するスヌープ無効化メッセージを受け取る受信ロジックと、
前記データを保持するキャッシュラインを有するキャッシュメモリと、
前記受信ロジック及び前記キャッシュメモリへ結合されるプロトコルロジックと
を有し、
前記プロトコルロジックは、前記受信ロジックが前記データを参照する前記スヌープ無効化メッセージを受け取り且つ前記キャッシュラインが第１のキャッシュ・コヒーレンス状態で保持されることに応答して、前記データに関連するホームノードへの前記データのライトバックを生成し、前記第１のキャッシュ・コヒーレンス状態から無効キャッシュ・コヒーレンス状態への前記キャッシュラインの遷移を開始する、装置。
【請求項９】
前記プロトコルロジックは、前記受信ロジックが前記データを参照する前記スヌープ無効化メッセージを受け取ることに応答して、更に、前記キャッシュラインが如何なるキャッシュ・コヒーレンス状態で保持されていようとも、前記スヌープ無効化メッセージに関連する要求エージェントへ前記データを直接には供給することができない、請求項８記載の装置。
【請求項１０】
前記第１のキャッシュ・コヒーレンス状態は変形キャッシュ・コヒーレンス状態である、請求項９記載の装置。
【請求項１１】
前記プロトコルロジックは、前記受信ロジックが前記データを参照する前記スヌープ無効化メッセージを受け取り且つ前記キャッシュラインが排他的状態又は共有状態で保持されることに応答して、更に、前記データに関連するホームノードへ前記データに関連するホームノードへResponse  Invalidateメッセージを供給することができる、請求項１０記載の装置。
【請求項１２】
前記スヌープ無効化メッセージは、Snoop  Invalidate  No  Forwardメッセージ、Snoop  Invalidate  Invalid  to  Exclusiveメッセージ、及びSnoop  Invalidate  X  to  Invalidメッセージを含むグループから選択される、請求項８記載の装置。
【請求項１３】
前記プロトコルロジック及び前記受信ロジックは、論理的に相互接続レイヤスタックに編成され、該相互接続レイヤスタックは、少なくとも、前記受信ロジックを含む物理レイヤと、リンクレイヤと、前記プロトコルロジックを含むプロトコルレイヤとを有する、請求項８記載の装置。
【請求項１４】
前記受信ロジックは高速ポイント・ツー・ポイントリンクへ結合され得る、請求項８記載の装置。
【請求項１５】
データ要素を参照する第１のメッセージ及び第２のメッセージを生成する第１のプロトコルレイヤと、前記第１のメッセージをホームノードへ及び前記第２のメッセージを第２のピアノードへ送信する第１の物理レイヤとを有する第１の相互接続スタックを実施する第１のピアノードを有し、
前記第２のピアノードは、
ポイント・ツー・ポイントリンクを介して前記第１のピアノードへ結合され、前記データ要素のキャッシュコピーを保持するキャッシュメモリを有し、
前記第２のメッセージを受け取る第２の物理レイヤと、前記第１のピアノードへ直接に前記データ要素の前記キャッシュコピーを転送せず、前記第２の物理レイヤが前記第２のメッセージを受け取ることに応答して前記データ要素の前記キャッシュコピーを無効コヒーレンス状態へ移す第２のプロトコルレイヤとを有する第２の相互接続スタックを実施し、
前記ホームノードは、
ポイント・ツー・ポイントリンクを介して前記第１のピアノードへ結合され、
前記第１のメッセージを受け取る第３の物理レイヤと、該第３の物理レイヤが前記第１のメッセージを受け取ることに応答して前記データ要素の正確なコピーを前記第１のピアノードへ供給するデータメッセージを生成する第３のプロトコルレイヤとを有する第３の相互接続スタックを実施する、システム。
【請求項１６】
前記第２のプロトコルレイヤは、更に、前記キャッシュコピーが無効状態のままにされることを前記ホームノードに示す応答メッセージを生成し、
前記第２の物理レイヤは、更に、当該第２の物理レイヤが前記第２のメッセージを受け取り且つ前記データ要素の前記キャッシュコピーが前記キャッシュメモリに排他的又は共有コヒーレンス状態で保持されることに応答して、前記応答メッセージを前記ホームノードへ送信する、請求項１５記載のシステム。
【請求項１７】
前記第２のプロトコルレイヤは、更に、前記データ要素の前記キャッシュコピーを前記ホームノードへ供給するライトバックメッセージを生成し、
前記第２の物理レイヤは、当該第２の物理レイヤが前記第２のメッセージを受け取り且つ前記データ要素の前記キャッシュコピーが前記キャッシュメモリに変形コヒーレンス状態で保持されることに応答して、前記データ要素の前記キャッシュコピーを前記ホームノードへ供給するよう前記ライトバックメッセージを送信する、請求項１５記載のシステム。
【請求項１８】
前記データ要素の前記正確なコピーを前記第１のピアノードへ供給するよう前記データメッセージを生成する前記第３のプロトコルレイヤは、前記第３の物理レイヤが前記第１のメッセージを受け取り且つ前記第２のピアノードから前記データ要素の前記キャッシュコピーを受け取ることに応答して、前記データ要素の前記キャッシュコピーを供給するよう前記データメッセージを生成する前記第３のプロトコルレイヤを有する、請求項１７記載のシステム。
【請求項１９】
前記第１のメッセージは読出無効化メッセージを含み、
前記第２のメッセージはスヌープ無効化メッセージを含み、
前記データメッセージはライトバックマーカーメッセージ及びライトバックデータメッセージを含み、
前記第１のプロトコルレイヤは、前記データ要素の部分的な読出に応答して前記読出無効化メッセージ及び前記スヌープ無効化メッセージを生成する、請求項１８記載のシステム。
【請求項２０】
前記読出無効化メッセージはRead  Invalidate  No  Forward（RdInvNoFwd）メッセージを含み、
前記スヌープ無効化メッセージはSnoop  Invalidate  No  Forward（SnpInvNoFwd）メッセージを含み、
前記ライトバックマーカーメッセージはResponse  Invalid  Writeback（RspIWb）メッセージを含み、
前記ライトバックデータメッセージはWriteback  Invalid  Data（WbIData）メッセージを含む、請求項１９記載のシステム。
【請求項２１】
データを参照する第１のメッセージを要求ノードにより生成する段階と、
前記データを参照する前記第１のメッセージをピアノードにより受信する段階と、
前記ピアノードによる前記第１のメッセージの受信に応答して、前記ピアノードにあるキャッシュメモリのキャッシュラインに保持されている前記データのコピーを前記要求ノードへ直接に転送せず、前記キャッシュラインを無効化する段階と
を有する方法。
【請求項２２】
前記データを参照する第１のメッセージを要求ノードにより生成する段階は、前記要求ノードによる部分読出要求に応答して前記要求ノードに実装されている相互接続状態のプロトコルレイヤで前記データを参照する前記第１のメッセージを生成する段階を有する、請求項２１記載の方法。
【請求項２３】
前記ピアノードによる前記第１のメッセージの受信に応答して、前記キャッシュメモリが変形キャッシュ・コヒーレンス状態にあるかどうかを決定する段階と、
前記キャッシュメモリが前記変形キャッシュ・コヒーレンス状態にあるとの決定に応答して、前記ピアノードにある前記キャッシュメモリの前記キャッシュラインに保持されている前記データの前記コピーをホームノードへ転送する段階と
を更に有する請求項２１記載の方法。
【請求項２４】
前記キャッシュラインが前記変形キャッシュ・コヒーレンス状態にないとの決定に応答して、前記データの前記コピーが無効キャッシュ・コヒーレンス状態でキャッシュラインに保持されていることを示すよう前記ピアノードから前記ホームノードへ応答メッセージを送信する段階を更に有する、請求項２３記載の方法。
【請求項２５】
前記ホームノードから前記ピアノードから前記応答メッセージを受信することに応答して、前記ホームノードから前記要求ノードへ前記データを転送する段階と、
前記ホームノードが前記ピアノードから当該ホームノードに転送された前記データの前記コピーを受け取ることに応答して、前記ホームノードから前記要求ノードへ、前記ピアノードから前記ホームノードへ転送された前記データの前記コピーを転送する段階と
を更に有する請求項２４記載の方法。
【請求項２６】
前記第１のメッセージはSnoop  Invalidate  No  Forward（SnpInvFwd）メッセージを含む、請求項２５記載の方法。
【請求項２７】
前記要求ノード、前記ピアノード及び前記ホームノードは夫々、ポイント・ツー・ポイントシリアルリンクを通して互いに相互接続される、請求項２５記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高速ポイント・ツー・ポイント相互接続リンクに関し、より具体的には、コヒーレント相互接続アーキテクチャを実施するコヒーレンス・プロトコルに関する。
【背景技術】
【０００２】
電子システムが複数のキャッシュメモリを有する場合に、システムに保持されているデータの妥当性、すなわちコヒーレンスは、データ演算のインテグリティを確かにするよう保たれている。コヒーレンスは、しばしば、キャッシュ・コヒーレンス・プロトコルに従ってデータを扱うことによって達成される。キャッシュ及び／又はプロセッサの数が増えるにつれて、コヒーレンスを保つ複雑性は増す。これにより、潜在的に、システムの複数のコンポーネントの間でのコンフリクトの数は増大することとなる。
【０００３】
例えば、複数のコンポーネント（例えば、キャッシュメモリ、プロセッサ）が同じデータブロックを要求する場合に、これらの複数のコンポーネントの間のコンフリクトは、データの妥当性を保つように解消される。以前のキャッシュ・コヒーレンス・プロトコルは、通常、コンフリクト解決に関与する単一コンポーネントを有する。しかし、システムの複雑性が増すにつれ、コンフリクト解決のための単一コンポーネントへの依存はシステム全体の性能を低下させうる。
【０００４】
一般に、キャッシュ・コヒーレンスを提供する２つの基本的なスキームがある。それは、スヌーピング（現在、しばしば、対称型マルチプロセッシング（ＳＭＰ）と呼ばれる。）及びディレクトリ（しばしば、分散共有メモリ（ＤＳＭ）と呼ばれる。）である。これら２つのスキームの間の基本的な違いは、メタ情報、すなわち、どこにキャッシュラインのコピーが保持されているかに関する情報への配置及びアクセスを中心に展開する。
【０００５】
ディレクトリに基づくスキームに関して、キャッシュ無しデータが記憶されている固定位置に加えて、どこにキャッシュコピーが存在するかを示す固定ロケーション、すなわちディレクトリがある。新しい方法でキャッシュラインにアクセスするために、ノードは、ディレクトリを有するノード（通常、キャッシュ無しデータを有する同じノードである。）と通信すべきであり、主記憶コピーが有効である場合に応答ノードがデータを供給することを可能にする。ディレクトリシステムにおけるこのようなノードは、ホームノードと呼ばれる。
【０００６】
ディレクトリは、二通りに分配され得る。第１に、主記憶データ（キャッシュ無しリポジトリ）は、しばしば、ノード間で分配され、一方、ディレクトリも同じように分配される。第２に、ラインがキャッシュされるかどうか及びラインがキャッシュされる場合にはどこに単一コピーが存在するかについて、少ない情報としてホームノードに保持しながら、メタ情報自体が分配され得る。例えば、ＳＣＩはこのスキームを使用し、キャッシュコピーを有する各ノードは、キャッシュコピーを有する他のノードへのリンクを保ち、集合的に完全なディレクトリを保持する。
【０００７】
スヌーピングキャッシュに関して、メタ情報は、キャッシュラインの有効なコピーの夫々が、キャッシュラインにアクセスして然るべく応答する要求を認識すべきユニットによって保持されるように、キャッシュコピー自体を有して分配される。通常、データがキャッシュされない状態で、すなわち、その元のロケーションに、保持されているリポジトリがある。しばしば、この元のロケーションに関与するエージェント又はユニットは、ホームノードと呼ばれる。キャッシュラインへのアクセスを要求する場合に、要求ノードは、しばしば、必要とされるパーミッションと共に、要求されるキャッシュラインのアドレスを送信し、要求されるキャッシュラインのコピーを保持するノードは然るべく応答する。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、現在のコヒーレンス及びメッセージングプロトコルの幾つかで、キャッシュラインの部分読出及び非スヌープメモリアクセス、すなわち、コヒーレントなアーキテクチャでの非コヒーレントアクセスは、或る環境下で、潜在的に、要求側へ無効なデータを転送する事態を生じさせる。しばしば、かかる環境は、プロトコル内のメモリ順序付け規則の違反に起因する。結果として、不正な動作が、無効なデータを受け取ったエージェントによって行われる。これは、潜在的に、システム内の不安定性につながる。
【課題を解決するための手段】
【０００９】
本発明の一実施形態で、データ要素の読出に関連し、ピアエージェントに、前記データ要素に関連するキャッシュラインが無効にされるべきであり、前記ピアエージェントが前記キャッシュラインを要求エージェントに転送すべきでないことを示すことができる第１のメッセージを生成するプロトコルレイヤロジックと、スヌープメッセージを前記ピアエージェントへ送信するよう前記プロトコルレイヤロジックへ結合される物理レイヤロジックとを有する装置が提供される。
【００１０】
また、本発明の一実施形態で、データを参照するスヌープ無効化メッセージを受け取る受信ロジックと、前記データを保持するキャッシュラインを有するキャッシュメモリと、前記受信ロジック及び前記キャッシュメモリへ結合されるプロトコルロジックとを有し、前記プロトコルロジックは、前記受信ロジックが前記データを参照する前記スヌープ無効化メッセージを受け取り且つ前記キャッシュラインが第１のキャッシュ・コヒーレンス状態で保持されることに応答して、前記データに関連するホームノードへの前記データのライトバックを生成し、前記第１のキャッシュ・コヒーレンス状態から無効キャッシュ・コヒーレンス状態への前記キャッシュラインの遷移を開始する、装置が提供される。
【００１１】
また、本発明の一実施形態で、データ要素を参照する第１のメッセージ及び第２のメッセージを生成する第１のプロトコルレイヤと、前記第１のメッセージをホームノードへ及び前記第２のメッセージを第２のピアノードへ送信する第１の物理レイヤとを有する第１の相互接続スタックを実施する第１のピアノードを有し、前記第２のピアノードは、ポイント・ツー・ポイントリンクを介して前記第１のピアノードへ結合され、前記データ要素のキャッシュコピーを保持するキャッシュメモリを有し、前記第２のメッセージを受け取る第２の物理レイヤと、前記第１のピアノードへ直接に前記データ要素の前記キャッシュコピーを転送せず、前記第２の物理レイヤが前記第２のメッセージを受け取ることに応答して前記データ要素の前記キャッシュコピーを無効コヒーレンス状態へ移す第２のプロトコルレイヤとを有する第２の相互接続スタックを実施し、前記ホームノードは、ポイント・ツー・ポイントリンクを介して前記第１のピアノードへ結合され、前記第１のメッセージを受け取る第３の物理レイヤと、該第３の物理レイヤが前記第１のメッセージを受け取ることに応答して前記データ要素の正確なコピーを前記第１のピアノードへ供給するデータメッセージを生成する第３のプロトコルレイヤとを有する第３の相互接続スタックを実施する、システムが提供される。
【００１２】
また、本発明の一実施形態で、データを参照する第１のメッセージを要求ノードにより生成する段階と、前記データを参照する前記第１のメッセージをピアノードにより受信する段階と、前記ピアノードによる前記第１のメッセージの受信に応答して、前記ピアノードにあるキャッシュメモリのキャッシュラインに保持されている前記データのコピーを前記要求ノードへ直接に転送せず、前記キャッシュラインを無効化する段階とを有する方法が提供される。
【発明の効果】
【００１３】
本発明の実施形態により、部分的且つ非コヒーレントなメモリアクセスの観点からキャッシュ・コヒーレンス・リンクに基づく相互接続においてメモリ順序付けを保つことが可能となる。
【図面の簡単な説明】
【００１４】
【図１】プロトコルアーキテクチャの実施例を表す。
【図２】ポイント・ツー・ポイント相互接続を用いてチップセットへ結合される複数のプロセッサを有するシステムの実施例を表す。
【図３】階層化入出力（Ｉ／Ｏ）スタックを用いる双方向相互接続アーキテクチャに係るブロック図の実施例を表す。
【図４ａ】潜在的に無効なデータへのアクセスを生じさせる複数のノード間のメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図４ｂ】部分的な非スヌープメモリアクセスに応答して有効なデータを提供するプロトコルダイアグラムの実施例を表す。
【図５ａ】潜在的に無効なデータへのアクセスを生じさせる複数のノード間のメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図５ｂ】部分的な非スヌープメモリアクセスに応答して有効なデータを提供するプロトコルダイアグラムの他の実施例を表す。
【発明を実施するための形態】
【００１５】
以下、添付の図面を参照して、一例として本発明の実施形態をあらわす。なお、本発明はこの実施形態に限定されない。
【００１６】
以下の記載で、特定の相互接続アーキテクチャ、特定のメッセージ、特定の擬似コード、特定の相互接続アーキテクチャレイヤ等の例のような多数の特定の詳細が、本発明の徹底的な理解を与えるために挙げられている。なお、当業者には明らかなように、これらの特定の詳細が本発明を実施するために用いられる必要はない。他の例で、特定の相互接続レイヤの構造上の詳細や、特定の非適合メッセージ及びプロトコルや、プロセッサ及びキャッシュの特定の動作上の詳細等、よく知られているコンポーネント又は方法は、本発明を不必要に不明りょうとすることを避けるために、詳細には記載されていない。
【００１７】
ここで記載される方法及び装置は、相互接続アーキテクチャにおいて部分アクセスと非スヌープメモリアクセスとの間で適切なメモリ順序付けを提供するためものである。特に、メモリ順序付け要件の順守は、主として、実例となるキャッシュ−コヒーレントリンクに基づく相互接続アーキテクチャに関して論じられている。なお、適切なメモリ順序付け要件を提供する方法及び装置はそのように限定されず、それらは如何なる相互接続アーキテクチャにより実施されてもよい。
【００１８】
［実例となる相互接続アーキテクチャの実施例］
図１は、高レベル簡易プロトコルアーキテクチャの実施例を表す。一実施例で、プロトコルアーキテクチャは、衝突する要求の間と同様に、通常のトランザクションの間、アーキテクチャ内のキャッシュにおいてデータ間のデータ整合性を保つべきである。更に、プロトコルアーキテクチャは、一実施例で、また、それぞれの要求が満足され引っ込められるように、夫々の要求についてフォワード・プログレス（forward  progress）を提供する。
【００１９】
プロトコルアーキテクチャは、ノード又はエージェントを幾つ有してもよい。一実施例で、ノードは、内部キャッシュメモリ、外部キャッシュメモリ、及び／又は外部メモリと関連するプロセッサを有する。なお、ノード又はエージェントは、例えば、プロセッサ、メモリコントローラハブ、及びＩ／Ｏハブ、汎用コントローラハブ、Ｉ／Ｏデバイス、Ｉ／Ｏデバイスの一群、あるいは、メモリにアクセス可能ないずれかの他のデバイス／コンポーネント等、相互接続アーキテクチャにおける如何なる装置又はそのような装置の一群であってもよい。他の実施例で、ノードは他の電子システムと相互接続されている電子システム（例えば、コンピュータシステム、モバイルデバイス）である。また、他のタイプのノード構成が使用されてもよい。
【００２０】
表されるように、アーキテクチャ１００は、キャッシングノード／エージェント１０５及び１０６と、ホームエージェント１１０乃至１１２とを有する。一実施例で、ホームエージェント１１０乃至１１２は、コヒーレントなメモリ空間の最終リポジトリであるメモリロケーションを保護すべきである。言い換えると、エージェント１１０は、コヒーレントなメモリ空間のデータについて複数の元の物理的なメモリロケーションに関与するホームエージェントである。ホームエージェント１１０乃至１１２は、キャッシングエージェント１０５及び１０６からのキャッシュ状態トランザクションの追跡と、キャッシングエージェント１０５及び１０６の間のコンフリクトの管理と、メモリへのインターフェースと、データ及び／又はオーナーシップの提供と、いずれかの他のホームエージェントに関連するタスクとを含むタスクの如何なる組合せも実行することができる。
【００２１】
一実施例で、キャッシングエージェント１０５及び１０６は、キャッシュメモリ及びキャッシングＩ／Ｏプロキシエンティティを含むプロセッサ等、キャッシュメモリと関連するエージェントを有する。キャッシングエージェント１０５及び１０６は、コヒーレントメモリ空間への読出及び書込要求の実行、コヒーレントメモリ空間からのデータのキャッシュコピーの保持、及び他のピアキャッシングエージェントへのキャッシュコピーの供給等のタスク及びいずれかの他のタスクの如何なる組合せも実行することができる。キャッシングエージェント又はノードは、また、他のキャッシングエージェントに関してピアエージェント／ノードと呼ばれることがある。図１に具体的に現されていないが、プロトコルアーキテクチャは、入出力（Ｉ／Ｏ）デバイスに代わってトランザクションに参加し又はそれを経験するＩ／Ｏハブ等の非キャッシングエージェントを更に有してよい。
【００２２】
一実施例で、キャッシングエージェント１０５及び１０６並びにホームエージェント１１０乃至１１２は、ネットワーク構造１０１を介するメッセージの交換を通して、データ整合性を保持しフォワード・プログレスを提供する。一実施例で、構造１０１は、ポイント・ツー・ポイント相互接続ネットワークを通して１つのエージェント／ノードから他のエージェント／ノードへのメッセージの伝送を助ける。しばしば、図１は、基盤ネットワークのキャッシュ・コヒーレンス・プロトコルの抽象的な見方を表すと言われる。
【００２３】
一実施例で、相互接続アーキテクチャ１００は、下記の同時係属出願で記載されるように、新規の特徴の如何なる組合せも組み入れてよい。例えば、米国特許第６，９２２，７５６号（発明の名称「forward  State  for  Use  in  Cache  Coherency  in  a  Multi-Node  System」）は、フォワードキャッシュ・コヒーレンス状態（Ｆステート）の利用について記載する。更に、様々な状況でのコヒーレンス・プロトコルの例は、２００４年４月２７日に出願された米国特許出願第１０／８３３，９６３号（事件整理番号Ｐ１５９２５）（発明の名称「A  Two-Hop  Cache  Coherency  Protocol」）、２００４年４月２７日に出願された米国特許出願第１０／８３３，９６５号（事件整理番号Ｐ１８８９０）（発明の名称「A  Messaging  Protocol」）、２００４年４月２７日に出願された米国特許出願第１０／８３３，９７７号（事件整理番号Ｐ１８８９１）（発明の名称「A  Cache  Coherence  Protocol」）、２００６年１月１１日に出願された米国特許出願第１１／３３０，９７７号（事件整理番号Ｐ２２３７６）（発明の名称「A  Two-Hop  Source  Snoop  Based  Cache  Coherence  Protocol」）、及び２００６年１月１１日に出願された米国特許出願第１１／３３１，３０１号（事件整理番号Ｐ２３１０６）（発明の名称「A  Two-Hop  Source  Snoop  Based  Messaging  Protocol」）で論じられている。
【００２４】
他の例は、２００２年１２月１９日に出願された米国特許出願第１０／３２５，４２７号（事件整理番号Ｐ１３９２３）（発明の名称「Speculative  Distributed  Conflict  Resolution  for  a  Cache  Coherency  Protocol」）、２００２年１２月１９日に出願された米国特許出願第１０／３２６，２３４号（事件整理番号Ｐ１３９８４）（発明の名称「Hierarchical  Directories  for  Cache  Coherency  in  a  Multiprocessor  System」）、２００２年１２月１９日に出願された米国特許出願第１０／３２４，７１１号（事件整理番号Ｐ１３９８５）（発明の名称「Hierarchical  Virtual  Model  of  a  Cache  Hierarchy  in  a  Multiprocessor  System」）、及び２００２年１２月１９日に出願された米国特許出願第１０／３２６，２３２号（事件整理番号Ｐ１３９８６）（発明の名称「Non-Speculative  Distributed  Conflict  Resolution  for  a  Cache  Coherency  Protocol」）を含む。
【００２５】
前述の同時係属出願に記載される特徴は、本願明細書等に記載される実施例に組み込まれ得る点に留意すべきである。なお、本願明細書等に記載される実施例はそのように限定されず、それらは、潜在的に前述の特徴のいずれも有さないだけではなく、付加的な特徴を有してよい。
【００２６】
図２は、ポイント・ツー・ポイント相互接続アーキテクチャを利用するチップセットへ結合されている複数のプロセッサを有するシステムの実施例を表す。図２のシステムは、また、複数のプロセッサを有してよい。それらのプロセッサのうち２つのプロセッサ２０５及び２１０しか、明りょうさのために、示されない。表されるように、プロセッサ２０５及び２１０は、夫々、２つの処理要素（ＰＥ）２０６及び２０７又は２１１及び２１２を有する。なお、プロセッサ２０５及び２１０には処理要素が幾つ含まれてもよい。
【００２７】
処理要素は、スレッドユニット、処理ユニット、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、及び／又はいずれかの他の要素を言い、例えば実行状態又は構造上の状態等のプロセッサの状態を保つことができる。言い換えると、処理要素は、一実施例で、例えば、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、又は他のコード等のコードと独立して関わることができる如何なるハードウェアも言う。一例として、通常、物理プロセッサは集積回路を表し、これは潜在的にコア又はハードウェアスレッド等の他の処理要素を幾つでも有する。
【００２８】
コアは、しばしば、独立した構造上の状態を保つことができる集積回路に配置されるロジックを言う。夫々の独立して保たれる構造上の状態は、少なくとも幾つかの専用の実行リソースと関連する。コアとは対照的に、物理スレッドと呼ばれることもあるハードウェアスレッドは、通常、独立した構造上の状態を保つことができる集積回路に配置されるあらゆるロジックを言う。独立して保たれる構造上の状態は、実行リソースへのアクセスを共有する。そのため、明らかなように、例えば単一スレッド・アプリケーションの複数の複製等の複数のソフトウェアスレッドは、一実施例で、コア又はハードウェアスレッド等の前述の処理要素のいずれかの組合せを含む複数の処理要素で並行して実行され得る。
【００２９】
また、プロセッサ２０５及び２１０の中にはリソース２０８及び２１３が表されている。リソース２０８及び２１３は、通常、レジスタ、ユニット、ロジック、ファームウェア、メモリ、及び他のリソースを有し、コードを実行し又は他のデバイスとインターフェース接続する。上述されるように、リソースの幾つかは、部分的に又は完全に処理要素のために設けられてよく、一方、残りのリソースは、処理要素の間で共有される。例えば、命令ポインタ及びリネームロジック等のより小さいリソースは、物理スレッドについて複製されてよい。リオーダー／リタイアメント・ユニットにおけるリオーダーバッファ、命令ルックアサイド・トランスレーション・バッファ（ＩＬＴＢ）、負荷／記憶バッファ、及びキュー等の幾つかのリソースは、パーティショニングを通して共有されてよい。汎用内部レジスタ、ページテーブル・ベース・レジスタ、低レベルデータキャッシュ、データＴＬＢ、実行ユニット、及びアウト・オブ・オーダー・ユニット等の他のリソースは、潜在的に完全にスレッドの間で共有される。対照的に、コアは、第２レベルキャッシュ（Ｌ２）等のより高いレベルのキャッシュの少なくとも一部を共有しながら、専用の実行リソースを有してよい。
【００３０】
一実施例で、リソース２０８及び２１３はプロセッサ・パイプラインを有する。プロセッサ・パイプラインは、パイプライン段を幾つでも有してよい。パイプライン段の一般的な例には、命令ポインタ段、フェッチ段、デコード段、ドライブ段、及び割当て段、リネーム段、キュー段、リオーダー段、スケジュール段、ディスパッチ段、実行段、メモリアクセス段、並びにレジスタアクセス段が含まれる。ここに列挙される段は、あらゆる既知のパイプライン段がプロセッサ１００に含まれうる場合に、プロセッサ・パイプライン段の例となる非包括的な羅列を有する点に留意すべきである。
【００３１】
プロセッサ２０５及び２１０は、夫々、メモリコントローラ又はローカルメモリコントローラハブ（ＭＣＨ）を更に有してよく、然るべくメモリ２０９又は２１４とインターフェース接続する。メモリ２０９及び２１４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、キャッシュメモリ、フラッシュメモリ、又は他のメモリデバイス等のあらゆるメモリデバイスを有する。一実施例で、メモリ２１４は上位キャッシュメモリを有し、一方、リソース２１３は下位キャッシュメモリを有する。他の実施例で、メモリ２０９は、プロセッサ２０５に付随する動的ランダムアクセスメモリ（ＤＲＡＭ）を有する。プロセッサ２０５は、ＤＲＡＭ２０９からのデータをキャッシュに格納するようキャッシュメモリを有する。これは実例となる実施形態である点に留意すべきであり、メモリ２０９及び２１４は、潜在的に如何なるスタイルメモリデバイスも有する。
【００３２】
一実施例で、メモリ２０９及び２１４が、プロセッサ２０５及び２１０に含まれているか又は（表されるように）その外部にあるキャッシュメモリを有する場合に、プロセッサ２０５及び２１０は、ピアキャッシングノードはもちろんホームノードであることができる。例えば、トランザクションがメモリ２０９内のメモリロケーションを参照する場合に、メモリ２０９に関与するエージェント、すなわちプロセッサ２０５は、トランザクション及びメモリロケーションに関してホームエージェントであると判断される。同様に、トランザクションが他のメモリロケーション（例えば、メモリ２１４でのロケーション）を参照する場合に、プロセッサ２０５はピアキャッシングエージェントであると判断される。
【００３３】
明らかなように、ポイント・ツー・ポイントリンク２２０乃至２２２は、ポイント・ツー・ポイント形式でコンポーネントを連結させる。物理リンク２２０乃至２２２は、一実施例で、夫々、図３を参照して以下で論じられる物理レイヤと関連する物理リンク等の、双方向の差動シグナリング相互接続を有する。結果として、プロセッサ２０５及び２１０並びにチップセット２３０は、互いに直接に通信することができる。
【００３４】
チップセット２３０は、しばしば、入出力（Ｉ／Ｏ）ハブへ結合されているメモリコントローラハブ等の、複数の集積回路への総称指示である。なお、一実施例で、エージェントが夫々メモリとインターフェース接続するメモリコントローラハブのバージョンを有する場合に、チップセット２３０はＩ／Ｏハブ又は他のコントローラハブを言う。一実施例で、チップセット２３０は、上述されるように、トランザクションに参加し又はそれを経験する非キャッシングエージェントである。なお、チップセット２３０はそのように限定されず、他の実施例では、チップセット２３０は、キャッシュメモリを有するキャッシングエージェント及び／又はデータの元のメモリロケーション・リポジトリを有するメモリを有するホームエージェントである。
【００３５】
表されるように、チップセット２３０は、また、例えば、周辺コンポーネント相互接続（ＰＣＩ）又はＰＣＩエクスプレス（ＰＣＩ−Ｅ）デバイス２６１、集積デバイスエレクトロニクス（ＩＤＥ）又はアドバンスト・トランスファー・アタッチメント（ＡＴＡ）デバイス２６２、ユニバーサル・シリアル・バス（ＵＳＢ）デバイス２６３、ローカルエリアネットワーク（ＬＡＮ）又は無線ＬＡＮ（ＷＬＡＮ）デバイス２６４、オーディオデバイス２６５、及び他のＩ／Ｏデバイス２６６等の複数の相互接続及びＩ／Ｏデバイスとインターフェース接続すべきである。チップセット２３０は、また、ここで記載されるようにＩ／Ｏデバイスを結合する他の相互接続アーキテクチャを有してよい。
【００３６】
図３を参照すると、階層化相互接続スタックを利用する双方向相互接続アーキテクチャに係るブロック図の実施例が表されている。例えば物理レイヤ３０２等の図３のレイヤへの言及には、例えば物理レイヤ３０２ａ及び物理レイヤ３０２ｂ等の、異なるエージェントで実施され得る一般的なレイヤの議論が含まれる。表されるように、相互接続スタックは５つのレイヤに分けられる。かかるレイヤのうち１又はそれ以上は、潜在的に、設計実施に基づいて任意である。例えば、ルーティングレイヤ３０４は、一実施例で、リンクレイヤ３０３の機能性に組み込まれる。従って、ルーティングレイヤは、一実施例では、別個のレイヤでない。
【００３７】
一実施例で、物理レイヤ３０２は、物理媒体での情報の電気伝送に関与する。例えば、物理的なポイント・ツー・ポイントリンクがリンクレイヤエンティティ３０３ａ及び３０３ｂの間で利用される。実例として、物理リンクは、双方向差動シグナリング対３５１及び３５２を有する差動シグナリングスキームを有する。この場合に、物理レイヤは、潜在的に論理的に電気サブブロック及び論理サブブロックに分けられ、これにより、物理レイヤは、情報の電気伝送から残りのスタックを分離し且つリンクレイヤ３０３と通信することができる。
【００３８】
一実施例で、リンクレイヤ３０３は、スタックの上位レイヤから物理レイヤ３０２を抽出し、例えば、接続されるエージェント／エンティティの間の信頼できるデータ伝送及びフロー制御並びに多重仮想チャネル又はメッセージクラスへの物理チャネル／インターフェースの仮想化等のリンク関連サービスを提供する。ここで、仮想チャネルは、スタックの上位層による使用のための多重仮想ネットワークと考えられてよい。例えば、プロトコルレイヤ３０６は、プロトコルメッセージをメッセージクラスに、ひいては、１又はそれ以上の仮想チャネルへマッピングするよう、潜在的に、リンクレイヤ３０３によって提供されるアブストラクションに依存する。
【００３９】
ルーティングレイヤ３０４は、一実施例で、ソースからあて先へパケットを送るための柔軟な方法を提供する。上述されるように、極めて簡単なトポロジで、ルーティングレイヤ３０４は明示的でなく、むしろリンクレイヤ３０３の機能性に組み込まれうる。例えば、ルーティングレイヤ３０４は、パケットを送るべく＜ポート，仮想ネットワーク＞対を特定するためにリンクレイヤ３０３のアブストラクションに依存してよい。ここで、ルーティングテーブル情報は、パケットにルーティング情報を提供するよう保持される。
【００４０】
一実施例で、トランスポートレイヤ３０５は、エンド・ツー・エンドの信頼できる伝送サービスを提供する。ルーティングレイヤ３０４と同じく、トランスポートレイヤ３０５も設計実施に基づいて任意である。一例として、トランスポートレイヤ３０５は、プロトコルレイヤ３０６に信頼できる伝送サポートを提供するようルーティングレイヤ３０４サービスに依存する。相互接続アーキテクチャ内で、一実施例で、一部のコンポーネントはトランスポートレイヤ３０５を有する。結果として、この一部のコンポーネントは、トランスポートレイヤ３０５に関するパケットのサブフィールドを定義し、一方、他のコンポーネントは、潜在的にかかるサブフィールドを定義しない。
【００４１】
プロトコルレイヤ３０６は、一実施例で、例えばキャッシュ・コヒーレンス、順序付け、ピア・ツー・ピア通信、割り込み転送等の、ノード／エージェント間の上位通信プロトコルを実施することができる。言い換えると、プロトコルレイヤ３０６は、ホームノード、ピアノード、キャッシングノード、及び非キャッシングノード等のノード又はエージェントについて、然るべく、許容されるメッセージ、要求、応答、フェーズ、コヒーレンス状態等を定義する。ホームノードメッセージ、スヌープメッセージ、応答メッセージ等のメッセージの例については以下で論じる。
【００４２】
レイヤ及びそれに関連するロジックの議論は如何なる方法で結合されてもよい点に留意すべきである。例えば、プロトコルロジックは物理レイヤ、すなわち、送信又は受信ロジックへ結合されてもよい。ここで、図３から分かるように、一実施例で、プロトコルロジックは、物理レイヤロジックへ直接には結合されずに、むしろ他のレイヤロジックを介して結合されてよい。更に、相互接続スタックは、一実施例で、適切なキャッシュ・コヒーレンス動作を開始するよう、例えばキャッシュ制御又はキャッシュメモリロジック等の内部コンポーネントロジックへ結合される。
【００４３】
［ＭＥＳＩＦプロトコルの実施例の概説］
一実施例で、基本ＭＥＳＩＦ（Modified  Exclusive  Shared  Invalid  Forward）プロトコルは、単一のシリアライジング・バスの潜在的な制限を伴わずにスヌープ・プロトコルと同様のプロトコルを提供する。スヌーピング・キャッシュ・プロトコルのように、ＭＥＳＩＦは、コヒーレンスを保つために、データのキャッシュコピーを有するノードに依存する。同期集中ブロードバンドよりむしろポイント・ツー・ポイントリンクの使用は、タイムワープの問題、すなわち、事象が異なるノードの側からすれば異なる順序で起こるように見えるという事実を持ち込む。一例として、ＭＥＳＩＦプロトコルは、タイムワープに起因する潜在的エラーの認識を通してタイムワープを扱い、そのプロトコル又はソフトウェアソリューションを提供する。
【００４４】
ホームノードは、しばしば、データのキャッシュ無しコピーと関連する。結果として、ホームノードは、そのホームノードと関連するデータに関するトランザクションに関与する。しかし、ホームノードは、トランザクションと関連する“クリティカルパス”に含まれる必要はなく、むしろ、ホームノードは、コンフリクト及びタイムワープ問題を解決するようトランザクションに介入する。かかるスキームの同時ブロードキャスト性のために、一実施例で、ＭＥＳＩＦは、スヌーピング・プロトコルと関連する低レイテンシーを達成し、一方で、ある場合には、最低限のレイテンシー、すなわち、単一ラウンドトリップ要求−応答で、データのキャッシュ可能なコピーを取得する。
【００４５】
一実施例で、ＭＥＳＩＦプロトコルに関する基本的なトランザクションは、ホームノードはもちろん全てのピアノードへ最初の要求を送信することを伴う。コピーがステートＥ、Ｆ又はＭコヒーレンス状態でキャッシュされる場合に、それは応答に含まれる。次いで、第２のメッセージがホームノードへ送信され、要求が満足されたことをホームノードに知らせる。要求されるラインがキャッシュされない場合、又はＳステートのコピーしか存在しない場合は、ホームノードへ送信される第２の要求は、前の要求を確認するために使用される。この前の要求をホームノードは既に自身のメモリからフェッチしていてよい。いずれの場合にも、ホームノードは、同期及びコンフリクトの解消のために第２の要求（及び潜在的に、たとえそれらが時々結合され得るとしても、第１の要求）に応答する。ホームノードは１又はそれ以上のキャッシュを有してよい点に留意すべきであり、従って、それは、いずれの他のノードとも同じように最初の要求に応答することができる。
【００４６】
一実施例で、コンフリクトは分散的に扱われる。タイムワープ問題は、個々の要求が任意に長い時間遅延しうるので、コンフリクトを検出することを困難にする。しかし、コンフリクトは、夫々のノードが要求後にコンフリクトについて監視する場合に検出される。複数のノードが潜在的にコンフリクトを検出してよいが、一例として、それらのノードのうちの少なくとも１つがコンフリクトを検出しうる。結果として、ノードからの応答は、一実施例で、潜在的にコンフリクト情報を有する。
【００４７】
一実施例で、応答からデータのコピーを受け取ったノードは、受け取った直後に内部データを使用することを許可されるが、ノードが確認を受け取るまでは、他のシステムにとって可視的な、すなわち、グローバルに可視的なデータを使用するという作用を引き起こさない。確認は、また、要求ノードがそのコピーを他のノードへ転送すべき命令を含み、ことによると、そのノードを自身のキャッシュから退かせる。
【００４８】
最後に、ノードがキャッシュデータを供給することによって他のノードからの要求に応答する場合に、ノードは、一実施例で、ノードがデータを転送したと認めるホームノードからの応答をノードが受け取るまで、同じキャッシュラインについて自身が受け取る他の要求を留保し、このようにして、全てのノードが（場合により書込可能な）キャッシュラインの伝送の同じ順序を守ることを確かにする。
【００４９】
ホームノードは、上述されるように、キャッシュ無しデータのリポジトリであるが、ホームノードは、また、プロセッサ及びキャッシュを有してよい。ここで、ホームノードのプロセッサがキャッシュを逃す場合に、ホームノードは他の全ての（ピア）ノードへ要求を送信し、ホームノードは、ホームノードに到着したいずれの他の要求と同じく内部でその要求を扱う。これは、ホームノードが自身（ホームノード）へメッセージを明示的に送信する特別の場合である点に留意すべきである。更に、外部からの要求が、局所的にキャッシュされるデータについて到着する場合に、ホームノードは適切に応答する。
【００５０】
開示されているメッセージプロトコルは、コヒーレンス（キャッシュ及びホーム）エージェント、非キャッシングエージェント、及び他のエージェント（メモリコントローラ、プロセッサ等）の間の許容されているメッセージの組を定義する。コヒーレンス・プロトコルは、考えられるコヒーレントを表すアルゴリズムでワード及び文法としてメッセージを使用する。このアルゴリズムは、分別よく要求を順序付け、コンフリクトを解消し、キャッシングエージェント間の相互作用を表す。ＭＥＳＩＦプロトコルについて上述されたが、ＭＥＳＩＦキャッシュ・コヒーレンス・プロトコルは利用される必要がない。例えば、既知のＭＥＳＩＦプロトコルの利用をもたらすフォワード状態は利用されなくてよい。更に、上記にはＭＥＳＩＦプロトコルにかかる実施例の典型的な概説が含まれる点に留意すべきである。結果として、上述される様々なコンポーネントは別々の実施例で相違しうる。メッセージング及び／又はコヒーレンス・プロトコルで利用される潜在的なメッセージの非包括的な例となる羅列は以下に含まれる。
【００５１】
［スヌープメッセージ］
一実施例で、スヌープメッセージは、例えばピアキャッシングエージェント等のキャッシングエージェントへ向けられる。通常、スヌープメッセージはホームノード識別子（ＩＤ）を有さず、これより、それらはホームノードには送られずにピアキャッシングエージェントに送られる。
【００５２】
Snoop  Data（SnpData）：これは、Ｅ、Ｆ又はＳステートでデータを得るスヌープである。
【００５３】
Snoop  Invalidation  Own（SnpInvOwn）：これは、Ｅ又はＭステートでデータを得るスヌープである。一実施例で、ピアエージェントは、データを自身のローカルメモリにＥ又はＭステートで保持することに応答してデータを提供することができる。
【００５４】
Snoop  Invalidation  Invalid  to  Exclusive（SnpInvItoE）：これは、ピアキャッシングエージェントを無効にし、ホームノードへのあらゆるＭステートデータをフラッシュ（flush）するスヌープである。
【００５５】
Snoop  Invalidation  X  to  Invalid（SnpInvXtoI）：これは、ピアキャッシングエージェントを無効にし、ホームノードへのあらゆるＭステートデータをフラッシュするスヌープである。
【００５６】
Snoop  Invalidation  No  Forward（SnpInvNoFwd）：これは、ピアエージェントに（１）あるキャッシュ・コヒーレンス状態で保持されているメモリへデータをライトバックさせ、（２）ローカルメモリに保持されているデータを無効にさせ、（３）要求ノードへ直接にデータを供給させないデータを得るスヌープである。一実施例で、ピアエージェントは、Ｍステートで保持されているデータをライトバックすることができる。他の実施例で、ピアエージェントは、また、Ｅ状態、Ｓ状態、Ｆ状態、又はそれらの組合せで保持されているデータをライトバックすることもできる。
【００５７】
［ホームメッセージ］
下記のメッセージはホームノードと関連する。一例として、下記の幾つかはホームノードへの要求メッセージである。実際には、スヌープメッセージ及びホームメッセージのうち幾つかの間の類似性に留意すべきである。例えば、上記SnpInvNoFwd及び下記RdInvNoFwdは、スヌープメッセージがピアキャッシングエージェントへ向けられ且つ読み出しメッセージがホームエージェントへ向けられる点を除き、類似している。結果として、SnpInvNoFwd及びRdInvNoFwdは両方とも、例えばRead  Invalidateタイプ、Snoop  Invalidateタイプ、Read  Invalidate  No  Forwardタイプ、及びSnoop  Invalidate  No  Forwardタイプ等の同じメッセージタイプであると言われている。
【００５８】
他のホームメッセージは、ホーム・ライトバック・マーカーメッセージを含む。ここで、データは、WbDataメッセージを介して別個に送信されてよく、マーカーメッセージに対して如何なる順序で受信されてもよい。以下に含まれるホームメッセージの他の例は、キャッシングエージェントからホームエージェントへのホームスヌープ応答メッセージ、及びコンフリクトフェーズの開始を知らせるコンフリクトメッセージのホーム確認応答である。
【００５９】
Read  Data（RdData）；これは、排他的（Exclusive）（Ｅ）状態、更には、潜在的に、実施例に依存してフォワード（Forward）（Ｆ）状態又は共有（Shared）（Ｓ）状態でのデータの要求である。
【００６０】
Read  Invalidate  Own（RdInvOwn）：これは、Ｍ又はＥステートでのキャッシュラインの要求である。
【００６１】
Invalidate  Invalid  to  Exclusive（InvItoE）：これは、データを有さないキャッシュラインの要求である。
【００６２】
Non-Snoop  Read（NonSnpRd）：これは、メモリからのコヒーレントでない読出を実行する要求である。
【００６３】
Non-Snoop  Write（NonSnpW）：これは、メモリへのコヒーレントでない書込を実行する要求である。
【００６４】
Read  Invalidate  No  Forward（RdInvNoFwd）：これは、メモリからデータを読み出す要求である。一実施例で、ホームノードは、データがこのメッセージの受信に応答してキャッシングエージェントからライトバックされるのを待ち、次いで、ライトバックされたデータを受信した後に要求エージェントへ正確なデータを供給することができる。他の実施例で、ホームノードは、参照ラインが無効状態に保たれているというピアキャッシングエージェントからの応答メッセージを受信することができる。ここで、ホームノードは、自身のローカルメモリ又は元のメモリリポジトリから正確なデータを供給することができる。
【００６５】
留意すべきは、上述されるように、RdInvNoFwdはSnpInvNoFwdメッセージと類似しているが、しばしば、スヌープメッセージにより、ホームノード識別子（ＩＤ）がそのメッセージに含まれない点である。これより、スヌープはホームノードへは送られず、一方、RdInvNoFwdはホームノードへ送られる。
【００６６】
WriteBack  Modified  to  Invalid、Shared、又はExclusive（WbMtoI、WbMtoS、及びWbMtoE）：これは、Ｍステートにあるキャッシュラインをメモリにライトバックして、然るべくキャッシュラインの状態を無効状態、共有状態、又は排他状態へ遷移させる要求である。一実施例で、かかるメッセージは、データが送信されるべきことを示すマーカーメッセージであり、一方、データは、実際には、別々のメッセージ（例えば、Wb*Data*メッセージ）を介して伝送される。
【００６７】
Response  Invalid又はShared（RspI又はRspS）：ピアエージェントは、然るべく無効状態で又は共有状態でキャッシュを持ち続ける。
【００６８】
Response  Forward  Invalid又はShared（RspFwdI又はRspFwdS）：ピアはデータを要求側へ送信しており、ラインは然るべく無効状態又は共有状態のままである。
【００６９】
Response  Forward  Invalid又はShared  WriteBack（RspFwdIwb又はRspFwdSWb）：ピアはデータを要求側へ及びWbIDataをホームノードへ送信しており、ラインは然るべく無効状態又は共有状態のままである。
【００７０】
Response  Invalid又はShared  WriteBack（RespIWb又はRespSWb）：ピアはインフライト（in-flight）のWbIDataメッセージを有するデータをホームへ退かせており、如何なるメッセージも要求側へ送信していない。
【００７１】
Response  Conflict（RspCnflt）：ピアは無効状態でラインを持ち続け、ピアはコンフリクトする対抗する要求を有する。
【００７２】
Acknowledge  Conflict（AckCnflt）：データ完了（completion）／グラント（grant）及び完了／フォース（force）確認応答コンフリクトの確認応答受信。
【００７３】
［無データ応答メッセージ］
一実施例で、無データ応答メッセージは、データを送信することなくラインのオーナーシップを認めるグラントメッセージを有する。無データ応答メッセージは、また、完了を知らせる完了メッセージを有し、潜在的に、コンフリクト状態下でオーナーからデータを取り出す。
【００７４】
Grant_Completion（GntCmp）：データによらずに排他的オーナーシップを付与。
【００７５】
Grant  Force  Acknowledge  Conflict（Gnt_FrcAckCnflt）：データ及びフォース確認応答コンフリクトによらずに排他的オーナーシップを付与。
【００７６】
Completion（CMP）：全てのスヌープ応答が収集され、コンフリクトは検出されない。
【００７７】
Force  Acknowledge  Conflict（FrcAckCnflt）：確認応答コンフリクトについて、スヌープ応答が収集される。
【００７８】
Complete  Forward  Invalidate  Own（Cmp_FwdInvOwn）：要求を完了し、排他的状態又は変形（Modified）（Ｍ）状態でのラインを要求側へ転送し、ローカルコピーを無効化。
【００７９】
［データ応答メッセージ］
DataC_*：対応するＭＥＳＩＦ状態でのデータ。
【００８０】
DataC_*_Cmp：完了を伴う対応するＥＳＩＦ状態でのデータ。
【００８１】
DataC_*_FrcAckCnflt：FrcAckCnfltを伴う対応するＥＳＩＦ状態でのデータ。
【００８２】
Wb*Data：データをライトバックし、対応するＥ、Ｓ又はＩステートへ遷移。
【００８３】
Non-Snoop  Write  Data（NonSnpWr）：これは、メモリへの非コヒーレントな書込である。
【００８４】
図４ａを参照すると、複数のノードの間でのメッセージングのためのプロトコルダイアグラムの実施例が表されている。４つのノード又はエージェントが表されている。すなわち、Ｉ／Ｏハブ、ホームノード、キャッシュを有するプロセッサＡ、及びキャッシュを有するプロセッサＢである。留意すべきは、表されるように、プロセッサＡ及びＢはピアキャッシングエージェントを有し、一方、Ｉ／Ｏハブは非キャッシングエージェント、すなわち、ウィットネス（witness）である点である。
【００８５】
図４ａに表されるプロトコルは、下記の単純化し過ぎた相互作用パターンに応答する：
ProcessorB:X=1            //ＢはデータＸに書込
ProcessorA:if(X==1)Y=1    //ＡはＸの部分読出を実行しＹへ書込
IOH:if(Y==1)assert(X==1)  //Ｉ／ＯハブはＹ及びＸの非スヌープ読出を実行
ここで、留意すべきは、一実施例で、相互接続アーキテクチャは部分的なメモリアクセス及び非スヌープメモリアクセスをサポートする点である。一例として、部分メモリアクセス（キャッシュ不可（ＵＣ）メモリアクセスとも呼ばれる。）はキャッシュラインの一部へのアクセスを有する。ここで、キャッシュラインの一部は潜在的に無効データを有するので、メモリアクセスに従って、一部は更新又は読出のいずれかをされる。更に、非スヌープメモリアクセスは、例えばＩ／Ｏハブ等の非キャッシングエージェントからの非コヒーレントメモリアクセスを言う。
【００８６】
図４ａに対する具体的な参照で、プロセッサＢはデータＸへの書込（すなわち、Ｘ＝１）を実行する。プロセッサＡからのデータＸの部分読出に応答して、RdInvOwn(X)メッセージがホームノードへ送信され、SnpInvOwn(X)メッセージがピアエージェントＢへ送信される。Ｂは目下、データＸと関連するキャッシュラインを変形状態に保持しているので、SnpInvOwn(X)の受信に応答して、エージェントＢは、DataC_M(X=1)メッセージでデータＸを要求エージェントＡへ供給し、更に、データを要求エージェントＡへ供給し且つキャッシュラインを無効状態（すなわち、ＬＬＣ＝Ｍ，Ｉ）で持ち続けていることを示すようRspFwdI(X)メッセージをホームノードへ送信する。ここで、ホームノードは、トランザクションの完了を示すようプロセッサＡへCmp(X)メッセージを送信する。
【００８７】
しかし、エージェントＢがデータを要求エージェントＡへ送信した後であって、エージェントＡが完了メッセージを受信する前に、エージェントＢは、要求メッセージ、すなわちSnpInvOwn(X)を発してデータＸを要求する。これは、破線で別個のトランザクションとして表されている。結果として、エージェントＡはデータＸに関するコンフリクトを検出する。その結果、エージェントＡは、RspCnfltをホームノードへ送信し、後にデータ／完了メッセージの受信に応答してAckCnflt(X)をホームノードへ送信する。
【００８８】
結果として、ホームノードは、コンフリクトのアービトレータ（arbitrator）として、Cmp_FwdInvOwnをエージェントＡへ送信する。それに応じて、エージェントＡは、メッセージマーカーRspIWb(X)及びデータメッセージWbIData(X=1)によりＸ＝１をホームノードへライトバックし、エージェントＡはＹへのキャッシュ可能な書き込み（すなわち、Ｙ＝１）を実行する。ここで、Ｙ＝１は、マーカーWbMtoI(Y)及びデータメッセージWbIData(Y=1)によりホームエージェントへライトバックされる。
【００８９】
しかし、Ｘの値を１として与えるエージェントＡからのライトバックメッセージは幾つかの理由により遅延する。一方、非キャッシングエージェントＩ／Ｏハブは、Ｙの非スヌープ読出、すなわちNonSnpRd(Y)、及びＸの非スヌープ読出、すなわちNonSnpRd(X)を実行する。図から明らかなように、NonSnpRd(X)に応答するDataC_I_Cmp(X=0)メッセージで、Ｘは、エージェントＡからホームノードへのライトバックメッセージの遅延に起因して、１ではなく０の値を有する。原則的に、無効値０は、コンフリクトに関わる先の部分読出と、正確なデータがホームノードで受信される前に非キャッシングエージェントによって実行される非スヌープ読出との結果である有効値１の代わりに、Ｉ／Ｏハブへ供給される。
【００９０】
ここで、潜在的な問題は次のようにまとめられ得る。Read  Invalidate  Ownメッセージは、潜在的に、ピアエージェントにメモリへのライトバックを伴わずに変形コピーを部分読出の要求側（Ａ）へ転送させ、また、Ａがグローバルな観測に達してＸの正確な値をホームノードへ返す時までに、ホームノードは、既に、潜在的に、誤った値をＩ／Ｏハブへ供給している。
【００９１】
従って、一実施例で、特定のメッセージタイプは、例えば部分読出等の部分メモリアクセスのために利用される。一実施例で、メッセージタイプは、関連するキャッシュラインが無効にされるべきであって部分読出の要求側へ転送されるべきでないことを示すよう、ピアエージェントに向けられたスヌープ無効化メッセージを有する。更に、他の実施例で、メッセージは、また、例えば変形状態等の特定のキャッシュ・コヒーレンス状態でのデータがメモリ（すなわち、ホームノード）にライトバックされるべきことをピアエージェントに示すことができる。
【００９２】
同様に、特定のメッセージタイプは、一実施例で、ピアエージェントに向けられるスヌープ無効化メッセージに代えて、ホームノードに向けられる読出無効化メッセージを有する。一実施例で、ホームノードは、読出無効化メッセージの受信に応答して、正確なデータを部分読出の要求側へ供給することができる。ここで、正確なデータを供給することは、潜在的に、スヌープメッセージを受け取ったキャッシュエージェントが例えば変形状態等の特定のキャッシュ・コヒーレンス状態で保持されているデータに係るそれ自体のコピーをライトバックするのを待つこと、及びそのコピーを部分読出の要求側へ与えることを含む。他の実施例で、正確なデータを供給することは、潜在的に、キャッシュラインを無効状態に保つピアエージェントからの応答を受信すること、及びホームノードでのデータのローカルコピー又はホームノードと関連する元のリポジトリから部分読出の要求側へデータのコピーを与えることを含む。
【００９３】
第１の例として、メッセージタイプはRead  Invalidate  No  Forward（RdInvNoFwd）メッセージを有する。この場合に、ピアエージェントへのスヌープ無効化メッセージはSnoop  Invalidate  No  Forward（SnpInvNoFwd）メッセージを有し、ホームノードへの読出無効化メッセージはRead  Invalidate  No  Forwardメッセージを有する。しかし、メッセージタイプ及びメッセージはそのように限定されない。実際には、他の実施例では、他のスヌープ無効化メッセージ（例えば、SnpInvItoE等）が使用される。ここで、上述されるように、スヌープは無効にしており、メッセージ自体を通して、又は一般的なプロトコルの実施を通して、データが受信エージェントから部分読出要求エージェントへ直接に転送されるべきでないことを示す。
【００９４】
図４ｂは、部分的な非スヌープメモリアクセスに応答して有効データを供給するプロトコルダイアグラムの実施例を表す。図４ａのダイアグラムと同様に、同じエージェントが前述の相互接続パターンに関与する。しかし、ここでは、エージェントＡによる部分読出要求に応答してRdInvOwn(X)メッセージをホームノードへ及びSnpInvOwn(X)メッセージをピアエージェントＢへ送信することに代えて、部分読出要求に応答して、RdInvNoFwd(X)メッセージがホームノードへ送信され、SnpInvNoFwd(X)メッセージがピアエージェントＢへ送信される。
【００９５】
ここで、ピアエージェントＢがSnpInvOwn(X)メッセージを受信するとき、データに関連するキャッシュラインは変形キャッシュ・コヒーレンス状態に保たれる。従って、データの変形コピー（すなわち、Ｘ＝０）は、図４ａでのようにデータを部分読出要求エージェントＡへ供給することに代えて、メッセージRspIWb(X)及びWbIData(X=1)を介してホームノードへライトバック（すなわち、プッシュバック）される。
【００９６】
次いで、図４ａと同様のプロトコルフローがコンフリクトフェーズを続ける。しかし、NonSnpRd(X)（すなわち、非スヌープ読出）がＩ／Ｏハブによって要求される場合に、Ｘ＝１の有効データは、RspI(X)の遅延がその非スヌープ読出の後に起こっても、既にメモリへライトバックされている点に留意すべきである。従って、この実施例で、部分読出のためのSnoop  Invalidate  Ownメッセージに代わるSnoop  Invalidate  No  Forwardメッセージの使用は、前述の潜在的な問題の是正をもたらす。言い換えると、部分読出のためのSnoop  Invalidate  No  Forwardメッセージに応答して、データは部分読出の要求側へ直接に転送されず、変形データのライトバックは、Ｉ／Ｏハブによる非スヌープ読出の前に起こる。
【００９７】
図５ａを参照すると、潜在的にメモリ順序付け違反を引き起こす異なるシナリオのためのプロトコルダイアグラムの実施例が表されている。図５ａに表されるプロトコルは、下記の例となる相互作用パターンに応答する：
IOH:Data=New;Flag=New;            //データ及びフラグへＮｅｗ書込
A:If(Flag==New)assert(Data==New);  //データ及びフラグの部分読出
B:ReadData==Old;                    //データのキャッシュ可能な読出
最初に、エージェントＢは、データのキャッシュ・コヒーレント読出トランザクションを開始する。RdDataメッセージ及びSnpDataメッセージはホームノード及びピアエージェントＡへ送信される。ピアノードＡは、データと関連するキャッシュラインが無効状態のままであることを示すようRspIによりホームノードに応答する。結果として、ホームノードは、DataC_E_CmpメッセージをエージェントＢへ供給する。エージェントＢは、零に等しいデータ（すなわち、Ｏｌｄ）を有してキャッシュラインを排他的状態へ遷移させる。更に、Ｉ／Ｏハブ又はプロデューサ（producer）は、ホームノードとの非スヌープ書込トランザクションを開始する。これにより、データ及びフラグは夫々、Ｎｅｗ（すなわち、１の値）に更新される。
【００９８】
次いで、コンシューマ（consumer）エージェントＡは、フラグ及びデータの部分読出トランザクションを開始する。しかし、ピアエージェントＢがSnpInvOwn(D)を受信するとき、エージェントＢは、データと関連するキャッシュラインを排他的状態に保つ。結果として、ピアエージェントＢは、データに係る自身のキャッシュコピー（すなわち、Ｄａｔａ＝Ｏｌｄ）及びRspFwdIメッセージをホームノードへ供給する。残念なことに、プロデューサであるＩ／Ｏハブがメモリに預けたデータの最近のコピーをフェッチすることに代えて、エージェントＡのデータ読出は、エージェントＢのキャッシュにあるステール（stale）データを、たとえＡのフラグ読出が最新のコピーをメモリから得ているとしても、Ａへ転送させる。
【００９９】
一例として、Ｉ／ＯハブはプロセッサＡと通信するＩ／Ｏデバイスに代わって非スヌープ書込を実行しているとする。理想的には、プロセッサＡは、いつ新しいデータが届いたかを確かめるべくフラグを確認する。これは、データが操作される状態となるまでプロセッサが他の動作を実行することを可能にする。しかし、表される条件設定では、プロセッサＡは、新しいデータが到着したことを示すようＮｅｗとしてフラグを読み出し、新しいフラグ値に基づいてそれが新しいデータであると信じて無効な／古いデータに作用する。結果として、このメモリ順序付け違反は、潜在的に、無効な実行を生じさせる。
【０１００】
図５ｂを参照すると、前述の相互作用パターンに適切なメモリ順序付けを提供するプロトコルダイアグラムの実施例が表されている。ここで、元のコヒーレント読み出しトランザクションは、要求、応答及び完了フェーズにより実行される。同様に、非キャッシングエージェントからの非スヌープ書込は、データ及びフラグを更新するよう実行される。なお、フラグ及びデータの部分読出のために、Read  Invalidate  No  Forwardメッセージ及びSnoop  Invalidate  No  Forwardメッセージが利用される。結果として、ピアエージェントＢは、いずれの場合にも、コンシューマ／部分読出要求エージェントＡへ直接にデータを転送しない。代わりに、排他的状態に保たれているデータにより、本実施例で、RspIはホームノードへ送信され、キャッシュラインは無効状態へと遷移する。更に、ホームノードは、Ｉ／Ｏハブプロデューサによって預けられた正確なデータ（すなわち、Ｄａｔａ＝Ｎｅｗ）を供給する。
【０１０１】
従って、上記から明らかなように、部分読出及び非コヒーレントメモリアクセスにより生ずるメモリ順序付け違反は、部分読出がピアエージェントに無効にさせてそれらのキャッシュコピーを転送させないためのプロトコルメッセージの使用を通して回避される。メモリ順序付け違反及びどのようにそれらが是正され得るかに係る幾つかの事例について論じてきた。更に、部分アクセス及び非コヒーレントアクセスの間の潜在的に多数の更なる相互接続パターンは、このようなメッセージの使用を通して修正可能である。更に、一実施例におけるプロトコルロジック内でのかかるプロトコルメッセージの実施は、潜在的に、レガシーソフトウェアがメモリ順序付け違反を引き起こす危険性の低下をもたらし、メモリ順序付けを強制すべくソフトウェア制約に従うソフトウェアプログラマの負担を減らし、新しいハードウェア及びソフトウェア使用モデルを可能にする。
【０１０２】
ここで使用されるモジュールは、如何なるハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せも言う。しばしば、別個なものとして表されるモジュール境界は一般的に変化し、潜在的には重なる。例えば、第１及び第２のモジュールは、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せを共有しながら、潜在的に或る独立したハードウェア、ソフトウェア、又はファームウェアを保ってよい。一実施例で、用語「ロジック」の使用は、例えばトランジスタや抵抗等のハードウェア、及び例えばプログラム可能なロジックデバイス等の他のハードウェアを含む。なお、他の実施例で、「ロジック」は、また、例えばファームウェア又はミクロコード等の、ハードウェアと一体化したソフトウェア又はコードを含む。
【０１０３】
ここで使用される「値」は、数、状態（ステート）、論理状態、又は２進論理状態のあらゆる既知の表現を含む。しばしば、論理レベル、論理変数、又は論理値の使用は、“１”及び“０”と呼ばれることがある。これは容易に２進論理状態を表す。例えば、“１”は高論理レベルに言及し、“０”は低論理レベルに言及する。一実施例で、トランジスタ又はフラッシュセル等の記憶セルは、単一の論理値又は複数の論理値を保持する能力を有してよい。なお、コンピュータシステムでの値の他の表現が使用されている。例えば、１０進数“１０”は、また、“１０１０”の２進値及び１６進文字“Ａ”として表されてもよい。従って、「値」は、コンピュータシステムで保持され得る情報のあらゆる表現を含む。
【０１０４】
更に、「状態（ステート）」は値又は値の一部分によって表され得る。一例として、論理“１”等の第１の値はデフォルト又は初期状態を表すことができ、一方、論理“０”等の第２の値は非デフォルト状態を表すことができる。更に、用語「リセット」及び「設定（セット）」は、一実施例で、夫々、デフォルトの及び更新された値又は状態を言う。例えば、デフォルト値は、潜在的に、高論理値、すなわちリセットを有し、一方、更新される値は、潜在的に、低論理値、すなわちセットを有する。留意すべきは、値の如何なる組合せも、あらゆる数の状態を表現するために利用される点である。
【０１０５】
前述の方法、ハードウェア、ソフトウェア、ファームウェア又はコードの実施例は、処理要素によって実行可能である機械アクセス可能な又は機械読出可能な媒体に格納されている命令又はコードを介して実施されてよい。機械アクセス可能／読出可能な媒体は、コンピュータ又は電子システム等の機械によって読出可能な形式で情報を提供（すなわち、記憶及び／又は送信）するあらゆるメカニズムを有する。例えば、機械アクセス可能な媒体には、静的ＲＡＭ（ＳＲＡＭ）又は動的ＲＡＭ（ＤＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、ＲＯＭ、磁気若しくは光記憶媒体、フラッシュメモリデバイス、電気記憶デバイス、光記憶デバイス、音響記憶デバイス、又は他の形態の伝播信号（例えば、搬送波、赤外線信号、デジタル信号）記憶デバイス等がある。例えば、機械は、例えば搬送波等の伝播信号で送信される情報を保持することができる媒体から伝播信号を受信することにより記憶媒体にアクセスしてよい。
【０１０６】
本明細書の全体を通して“一実施例”又は“実施例”との言及は、その実施形態に関連して記載される特定の特徴、構造、又は事項が本発明の少なくとも１つの実施例に含まれることを意味する。このように、本明細書の全体を通して様々な場所でのフレーズ“一実施例で”又は“実施例で”の出現は、必ずしも全て同じ実施形態に言及しているわけではない。更に、特定の特徴、構成、又は事項は、１又はそれ以上の実施例で何らかの適切な方法で組み合わされてよい。
【０１０７】
以上、詳細な記載が特定の具体的な実施形態を参照して与えられた。なお、様々な改良及び変形が、添付の特許請求の範囲に記載される本発明の幅広い精神及び適用範囲から外れることなく行われてよいことは明らかである。従って、明細書及び図面は、限定の観点よりむしろ例示の観点で受け止められるべきである。更に、実施例及び他の例となる用語の使用は、必ずしも同じ実施例又は同じ例に言及しているわけではなく、潜在的に同じ実施例はもちろん異なる個別の実施例に言及していることがある。
【符号の説明】
【０１０８】
１００  相互接続アーキテクチャ
１０１  ネットワーク構造
１０５，１０６  キャッシングエージェント
１１０〜１１２  ホームエージェント
２０５，２１０  プロセッサ
２０６，２０７，２１１，２１２  処理要素（ＰＥ）
２０８，２１３  リソース
２０９，２１４  メモリ
２２０〜２２２  ポイント・ツー・ポイントリンク
２３０  チップセット
２６１〜２６６  相互接続及びＩ／Ｏデバイス
３０２ａ，３０２ｂ  物理レイヤ
３０３ａ，３０３ｂ  リンクレイヤ
３０４ａ，３０４ｂ  ルーティングレイヤ
３０５ａ，３０５ｂ  トランスポートレイヤ
３０６ａ，３０６ｂ  プロトコルレイヤ
３５１，３５２  双方向差動シグナリング対
【図１】
2010015572.tif 000003
【図２】
2010015572.tif 000004
【図３】
2010015572.tif 000005
【図４ａ】
2010015572.tif 000006
【図４ｂ】
2010015572.tif 000007
【図５ａ】
2010015572.tif 000008
【図５ｂ】
2010015572.tif 000009
【外国語明細書】
2010015572000001.pdf
2010015572000002.pdf
2010015572000003.pdf
2010015572000004.pdf