(57)【特許請求の範囲】
【請求項１】
キャッシュ（１２４、６２４）と、前記キャッシュにバスを通じて接続された下位レベルのメモリシステム（１７０、６５０）とを含むメモリ階層を持つデータ処理システム（１００、６００）において用いられる方法であって、
データ・エレメントと関連付けられたライト・ウイズ・インジェクト属性を持つデータ・エレメントをデータ・プロデューサ（１６０、６４０）から前記バスとは別の入力部を経て受信する（５２、５０２）ステップと、
前記下位レベルのメモリシステム（１７０、６５０）へアクセスせずに、前記ライト・ウイズ・インジェクト属性に応答して前記データ・エレメントを前記キャッシュ（１２４、６２４）へ選択的に送信する（５４、５６、５８、６０、６２、６４、５０４、５０６、５０８、５１０、５１２、５１４）ステップと、
前記キャッシュ（１２４、６２４）の前記データ・エレメントを含む少なくとも１つのキャッシュラインをアップデートするステップとを含む方法。
【請求項２】
前記データ・エレメントを受信する（５２、５０２）前記ステップは、実質的にＨｙｐｅｒＴｒａｎｓｐｏｒｔ（商標）  Ｉ／Ｏ  Ｌｉｎｋ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、  Ｒｅｖｉｓｉｏｎ  １．０３に準拠したリンクを用いて、前記ライト・ウイズ・インジェクト属性を持つ前記データ・エレメントを受信する（５２、５０２）前記ステップを含む、請求項１記載の方法。
【請求項３】
前記受信する（５２、５０２）ステップは更に、リクエストパケットにおいてエンコードを行う予約コマンドフィールドからライト・ウイズ・インジェクト属性を検出するステップを含む、請求項１記載の方法。
【請求項４】
前記選択的に送信する（５４、５６、５８、６０、６２、６４、５０４、５０６、５０８、５１０、５１２、５１４）ステップは、前記データ・エレメントをバッファ（２４２）に一時的に格納（５４、５０４）するステップを含む、請求項１記載の方法。
【請求項５】
前記データ処理システム（１００、６００）が、前記選択的に送信する（５４、５６、５８、６０、６２、６４、５０４、５０６、５０８、５１０、５１２、５１４）ステップが行われる前に、前記バッファ（２４２）を別の目的のために必要とする場合には、前記データ・エレメントを前記下位レベルのメモリシステム（１７０、６５０）に書き込むステップを更に含む、請求項４記載の方法。
【請求項６】
前記選択的に送信する（５４、５６、５８、６０、６２、６４、５０４、５０６、５０８、５１０、５１２、５１４）ステップは更に、
前記キャッシュ（１２４、６２４）と結合された中央処理ユニット（ＣＰＵ）（１２２、６２２）へプローブ・プリフェッチを送信する（５６、５０６）ステップと、
前記プローブ・プリフェッチに応答して、前記ＣＰＵ（１２２、６２２）によりリード・リクエストを発行する（６０、５１０）ステップと、
前記リード・リクエストに応答して、前記キャッシュ（１２４、６２４）へ前記データ・エレメントを送信する（６４、５１４）ステップと、
前記バッファ（２４２）から前記データ・エレメントを取り除く（６２、５１２）ステップとを更に含む請求項４記載の方法。
【請求項７】
データ・プロセッサ（１２０、６２０）であって、
キャッシュ（１２４、６２４）を含むＣＰＵ（１２２，６２２）と、
前記ＣＰＵ（１２２）と結合され、データ・プロデューサ（１６０、６４０）からデータ・エレメント用のライト・ウイズ・インジェクトパケットを前記データ・プロセッサ（１２０、６２０）の入力部を経て受信するように構成されたホスト・ブリッジと、
前記ＣＰＵ（１２２）と、前記ホスト・ブリッジ（１３０）と結合され、前記入力部とは別のバスを通じて下位レベルのメモリシステム（１７０、６５０）と結合されるとともに、前記ＣＰＵと前記下位レベルのメモリシステムの間に位置するように構成され、前記ライト・ウイズ・インジェクトパケットに応答して前記データ・エレメントを前記ＣＰＵ（１２２、６２２）へ選択的に送り、前記下位レベルのメモリシステム（１７０、６５）へアクセスせずに前記キャッシュ（１２４、６２４）に格納する手段（メモリ・コントローラ）（１２６、６３６）とを有する、データ・プロセッサ。
【請求項８】
前記ＣＰＵ（１２２）はプローブ・プリフェッチの受信に応答して、プリフェッチ・リードを開始するように構成されており、かつ、選択的な送信（１２６）のための前記手段には、バッファ（２４２）を含むメモリ・コントローラ（１２６）が含まれ、前記メモリ・コントローラ（１２６）は前記ホスト・ブリッジからの前記データ・エレメントを前記バッファ（２４２）に格納し、前記データ・エレメントの受信に応答して、前記プローブ・プリフェッチを前記ＣＰＵ（１２２）へ送り、前記ＣＰＵ（１２２）からの前記プリフェッチ・リードに応答して前記バッファ（２４２）から前記データ・エレメントを送る、請求項７記載のデータ・プロセッサ（１２０）。
【請求項９】
前記選択的な送信（１２６）のための前記手段には、ディレクトリ／メモリ・コントローラ（６３６）が含まれ、前記ディレクトリ／メモリ・コントローラ（６３６）は前記ライト・ウイズ・インジェクトパケットに反応して、そのディレクトリのチェックを行い、前記データ・エレメントに関連付けられたラインのキャッシュステートが、所定のステートにあるかどうか、そして、前記キャッシュ（６２４）によって所有されているかがどうかを確認し、そうである場合は、前記下位レベルのメモリシステム（６５０）にアクセスせずに、前記キャッシュ（６２４）に格納するために、前記データ・エレメントを前記ＣＰＵ（６２２）へ送る、請求項７記載のデータ・プロセッサ（１２０）。
【請求項１０】
前記ホスト・ブリッジ（１３０）は、実質的にＨｙｐｅｒＴｒａｎｓｐｏｒｔ（商標）  Ｉ／Ｏ  Ｌｉｎｋ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、Ｒｅｖｉｓｉｏｎ  １．０３に準拠しているリンクを用いて、前記データ・プロデューサ（１６０、６４０）と結合されるように構成されている、請求項７記載のデータ・プロセッサ（１２０、６２０）。
【発明の詳細な説明】
【技術分野】
【０００１】
一般的に本発明はデータ処理システムに関し、より具体的にはキャッシュを備えたデータ処理システムに関する。
【背景技術】
【０００２】
コンピュータ・システムの性能を高める周知の方法として、ローカルの高速メモリをコンピュータ・システムに含める、キャッシュが知られている。キャッシュによってシステム性能が向上する。その理由は、中央処理装置（ＣＰＵ）が特定のアドレスにおけるデータ・エレメントにアクセスすると、その次のアクセスは隣接するアドレスへのアクセスである確率が高いからである。キャッシュによって、リクエストされているデータの一部に隣接して配置されているデータが、遅いメイン・メモリ、つまり下位レベルのキャッシュからフェッチされ、格納される。非常に高性能のコンピュータ・システムでは、階層式で設けられうるキャッシュもある。ＣＰＵに最も近く、また、上位の、又は“Ｌ１”キャッシュとして周知のキャッシュは階層の最上位のキャッシュであり、一般的に最速である。その他の、通常はより遅いキャッシュは “Ｌ２”キャッシュなどから始まり、メイン・メモリと接続された最も低いレベルのキャッシュまで、階層式で上から下へ順番に設けられる。
【０００３】
データを格納する場合と破棄する場合は、キャッシュはある方法に従う。例えば、多くのプロセッサは“アロケート・オン・ライト”（allocate-on-write）法に従う。この方法は、ＣＰＵによって書き込みされる、メモリ・ロケーションに対応するキャッシュラインが、キャッシュに格納されるように指示を行うものである。一般にキャッシュは、ＬＲＵ（least-recently-used：使用頻度が最も低い）として知られる方法に従い、すべてのロケーションが一杯になると、破棄すべきロケーションを判断し、新たなデータ・エレメント用にスペースを設ける。
【０００４】
一般にキャッシュには複数のステータス・ビットが含まれ、キャッシュラインのステータスが示され、システム全体を通じて、データの整合性、つまりコヒーレンシが維持される。１つの一般のコヒーレンシ・プロトコルは、“ＭＯＥＳＩ”プロトコルとして周知のプロトコルである。このプロトコルによれば、各キャッシュラインにはステータス・ビットが含まれ、ラインがどのＭＯＥＳＩステートにあるかが示される。ビットには、キャッシュラインが修正されたことを示すビット（Ｍ：Modified）、キャッシュラインは排他的である（Ｅ：Exclusive）、又は共用されている（Ｓ：Shared）ことを示すビット、又は、キャッシュラインは無効である（Ｉ：Invalid）ことを示すビットが含まれる。所有（Ｏ：Owned）ステートでは、ラインが１つのキャッシュの中で修正されていることと、他のキャッシュに共用コピーがあり得ることと、メモリにあるデータは陳腐化(stale)されていることを示す。
【０００５】
一般の構成では、すべてのキャッシュは同じ集積回路において、ＣＰＵと結合されており、また、メイン・メモリは外部に設けられている。メイン・メモリはシステムにおいて、最も遅く安価なメモリであり、低価格で、比較的遅いダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）チップにより構成されることができる。この特性により、外部ＤＲＡＭのメイン・メモリへのアクセス時にボトルネックが生じる。そのため、可能な限りは、これらのボトルネックを回避することが望ましい。更に近年、マイクロプロセッサの速度はＤＲＡＭのアクセス速度よりも速くなっており、このボトルネック問題である、いわゆる“メモリ・ウォール”を悪化させている。そのため、システムの性能を高めるために、メイン・メモリのアクセスの要件を低減することが可能な方法とデータ・プロセッサが所望されている。そのような方法及びデータ・プロセッサが本発明によって提供される。その特徴や利点は、添付の図面とあわせて、以下の詳細な説明からより明白に理解されることであろう。
【発明の開示】
【発明の詳細な説明】
【０００６】
本発明により、１つの態様では、キャッシュと下位レベルのメモリシステムとを有するメモリ階層を持つデータ処理システムにおいて使用するための方法が提供される。固有のライト・ウイズ・インジェクト属性を持つデータ・エレメントがデータ・プロデューサから受信される。データ・エレメントは下位レベルのメモリへアクセスせずにキャッシュへと送られる。次に、そのデータ・エレメントを含む少なくとも１つのキャッシュラインがそのキャッシュ内で更新される。
【０００７】
別の態様では、本発明により、各々がＣＰＵと関連のキャッシュを含む複数のノードを持つデータ処理システムにおいて使用するための方法が提供される。ライト・ウイズ・インジェクトパケットと関連付けられたデータ・エレメントを持つライト・ウイズ・インジェクトパケットがデータ・プロデューサから受信される。ディレクトリのチェックが行われ、データ・エレメントが所定のステートでディレクトリに既に存在するかどうかが確認される。データ・エレメントが所定のステートでディレクトリに存在しない場合、ディレクトリ・エントリがデータ・エレメントに対して生成され、データ・エレメントは下位レベルのメモリシステムに書き込まれる。データ・エレメントが所定のステートで既にディレクトリに存在する場合、データ・エレメントはデータ・エレメントのオーナーであるキャッシュへ、下位レベルのメモリシステムへアクセスせずに送られる。
【０００８】
更に別の態様では、本発明により、キャッシュと、ホスト・ブリッジと、メモリ・コントローラとを含むＣＰＵを持つデータ・プロセッサが提供される。ＣＰＵはプローブ・プリフェッチの受信に応答して、プリフェッチ・リードを開始するように構成されている。ホスト・ブリッジはＣＰＵと結合され、データ・プロデューサからのデータ・エレメントに対するライト・ウイズ・インジェクトパケットを受信するように構成される。メモリ・コントローラはＣＰＵ、及び、ホスト・ブリッジと結合され、また、低レベルのメモリシステムと結合されるように構成されている。更にメモリ・コントローラにはＣＰＵと結合されている出力部が含まれる。メモリ・コントローラにはバッファが含まれ、ホスト・ブリッジからのデータ・エレメントが格納される。メモリ・コントローラはデータ・エレメントの受信に応答してＣＰＵへプローブ・プリフェッチを送り、ＣＰＵからのプリフェッチ・リードに応答して、バッファからデータ・エレメントを送る。
【０００９】
更に別の態様では、本発明により、キャッシュと、ホスト・ブリッジと、ディレクトリ／メモリ・コントローラとを含むＣＰＵを有するデータ・プロセッサが提供される。ホスト・ブリッジはＣＰＵと結合され、また、データ・プロデューサからのデータ・エレメントに対するライト・ウイズ・インジェクトパケットを受信するように構成されている。ディレクトリ／メモリ・コントローラはＣＰＵ及びホスト・ブリッジと結合され、また、低レベルのメモリシステムと結合されるように構成され、更に、ＣＰＵと結合される出力部を備えている。ディレクトリ／メモリ・コントローラはライト・ウイズ・インジェクトパケットに応答し、そのディレクトリのチェックを行い、データ・エレメントに関連付けられているラインのキャッシュ・ステートが所定のステートにあるかどうかが確認される。所定のステートにある場合、ディレクトリ／メモリ・コントローラはデータ・エレメントをＣＰＵへ送り、低レベルのメモリシステムへアクセスせずに、キャッシュへ格納する。
【００１０】
更に別の態様では、本発明により、キャッシュと、ホスト・ブリッジと、送信用手段とを備えたＣＰＵを有するデータ・プロセッサが提供される。ホスト・ブリッジはＣＰＵと結合され、また、データ・プロデューサからのデータ・エレメントに対するライト・ウイズ・インジェクトパケットを受信するように構成される。送信用手段はＣＰＵと、ホスト・ブリッジと、下位レベルのメモリシステムとに結合されており、また、データ・エレメントをＣＰＵへ送信し、下位レベルのメモリシステムへアクセスせずに、キャッシュへ格納する。
【００１１】
本発明は添付の図面と併せて以下に説明されており、同じ参照符号は同じ要素を表わす。
【発明を実施するための最良の形態】
【００１２】
図１に、従来技術において周知の、プローブ・ベースの(probe-based)データ処理システムにおけるデータ信号と制御信号の流れ、つまり、フローに関連付けられたタイミング図１０を例示する。図１に示すように、縦軸には上から下へと流れる時間が示されている。図１には３つのデバイス（ノード）が描かれており、水平方向に沿って垂直線が配置されている。“ＮＯＤＥ  Ｃ”と表示されている第１ノードはデータ・プロデューサである。例えば、ＮＯＤＥ  Ｃは、データ通信チャネルの受信機などの入力／出力デバイスに対応することもできる。“ＮＯＤＥ  Ｂ”と表示されている第２ノードは、下位レベルのメモリシステムであり、ＮＯＤＥ  Ｂには、メイン・メモリが含まれ、また場合によっては１つ以上の下位レベルのキャッシュも含まれる。“ＮＯＤＥ  Ａ”と表示されている第３ノードは、アプリケーションプログラムを実行するＣＰＵなどのキャッシュを持つ、データ・コンシューマである。データ通信の点から言えば、ＮＯＤＥ  Ｃはフレーム単位でデータを受信し、ＮＯＤＥ  Ｂにおけるメモリにそのデータを格納し、これによりＮＯＤＥ  Ａにおいて、アプリケーションプログラムによる指示に基づき、プロセッサがデータを利用可能になる。
【００１３】
データ信号と制御信号のフローを以下に説明する。まずＮＯＤＥ  ＣにおけるＩ／Ｏデバイスは、その通信リンクを介してデータ・フレームを受け取る。ＮＯＤＥ  Ｃにおける関連のＤＭＡコントローラは、矢印１２によって示されているように、ＤＭＡライト・オペレーションをメモリ・ロケーションへ行うことによって、データ・フレームに対しデータの書き込みを行う。時間１４の間に、ＮＯＤＥ  Ｂにおけるメモリ・コントローラは、メモリへデータの書き込みを行うとともに、同時に矢印１６によって示されているように、ＮＯＤＥ  Ａへインバリデート・プローブ(invalidating probe)を発行する。このインバリデート・プローブによって、ＮＯＤＥ  Ａにおけるキャッシュに、データが修正されることが通知される。また、関連付けられている１つ又は複数のキャッシュラインのコピーをＮＯＤＥ  Ａが有している場合は、その１つ又は複数のキャッシュラインは無効状態にされる。１８によって示されているように、ＮＯＤＥ  Ａはプローブ・レスポンスで応答する。矢印２０によって示されているように、その後、ＮＯＤＥ  Ａ上に実行しているアプリケーション・ソフトウエアによって、データに対しリード・リクエストが開始される。ＮＯＤＥ  Ｂにおけるメモリ・コントローラによって、時間２２の間にデータの読み出しが行われ、その後、矢印２４によって示されているように、メモリ・コントローラによって、ＮＯＤＥ  Ａへデータが送信される。最後に、時間２６の間に、ＮＯＤＥ  Ａによるキャッシュラインフィルが完了される。
【００１４】
この従来のオペレーションでは、メイン・メモリへの１書き込みと１読み出しが必要とされる。従って、時間１４と２２の間にメイン・メモリ・バスが使用され、それぞれ書き込みと読み出しが行われる。高帯域の通信プロトコルを実装しているシステムに対しては、このオペレーションが多くの場合において繰り返され、利用可能な帯域の大部分が消費される。近年では、メイン・メモリの速度は速くなっているが、プロセッサの速度ほどは高速ではなく、また、このオペレーションに必要とされるメイン・メモリ・バスの帯域を低減することが望ましい。
【００１５】
メイン・メモリ・バスの帯域要件を低減するために、発明者たちは以下の点を理解した。それは、通信オペレーションというのは、メイン・メモリへデータを格納する必要なしに、データがプロセッサのキャッシュ内だけで動作することができる特殊な場合である、ということである。より詳細には、データ通信受信バッファは、一般にはメモリにおける循環バッファであり、データ・プロデューサは循環バッファへデータの書き込みを行い、また、入力／出力ドライバは循環バッファからプロトコル・ヘッダ情報（コンシューマ１）の読み出しを行い、また、アプリケーションプログラムは循環バッファからペイロード・データ（コンシューマ２）の読み出しを行う。メイン・メモリへデータを格納しないようにするために、そのような状態を通知し、メイン・メモリへのアクセスが生じないようにするための方法と対応のデータ処理システムが発明者たちによって考案されている。このデータ処理システムは、データ・プロセッサに単純な修正を加えることで実装されることができる。このデータ処理システムを少し変更することによって、受信したデータ・パケットの特殊なライト・ウイズ・インジェクト属性を認識し、メイン・メモリへのアクセスを抑制し、CPUのキャッシュへ直接データを送信し、キャッシュラインをある種の状態にすることによって、その属性に応答することができる。このような方法は図２を参照することで理解することができる。図２には本発明によるブローブベースのデータ処理システムのデータ信号と制御信号のフローに関連したタイミング図５０が例示されている。
【００１６】
オペレーションはＮＯＤＥ  ＣにおけるＩ／Ｏデバイスと、ＮＯＤＥ  Ｂにおけるメモリ・コントローラとの間で、“ＷＲＩＴＥ  ＷＩＴＨ  ＩＮＪＥＣＴ”（ライト・ウィズ・インジェクト）パケットとして周知の、特定のＤＭＡライト・リクエストから開始される。この特定のライト・リクエストに応答して、ＮＯＤＥ  Ｂにおけるメモリ・コントローラにより、時間５４の間にディレクトリの読み出しが行われ、矢印５６によって示されている、スヌープ・プレフェッチとしても周知の、ブロードキャスト(broadcast)・プローブ・プレフェッチが、ＮＯＤＥ  Ａとシステムの他のプロセッサすべてに送信され、ＮＯＤＥ  Ａにおけるキャッシュの中に書き込みされる、つまり注入されるデータの存在が通知される。ＮＯＤＥ  Ａはすでにそのローカル・キャッシュへメモリアドレスを割り当てているが、このＮＯＤＥ  Ａは５８によって示されている、プローブ・レスポンスで応答する。データはメモリ・コントローラにおけるストア・バッファに保持され、また、低レベルのメモリ・システムへの書き込みは遅延される。その後、ＮＯＤＥ  Ａにおけるデータ・プロセッサによって、矢印６０によって示されているように、ＮＯＤＥ  Ｂへプレフェッチ・リードが送信される。ＮＯＤＥ  Ｂのメモリ・コントローラは時間６２の間にストア・バッファからデータ・エレメントの読み出しを行い、矢印６４によって示されているように、ＮＯＤＥ  Ａへデータを送信することにより、応答する。ＮＯＤＥ  Ａにおけるデータ・プロセッサが正常にプレフェッチ・リードを送信することができる場合、ＮＯＤＥ  Ｂにおけるメモリ・コントローラは、メイン・メモリへアクセスせずに、データを送ることが可能である。しかし、ＮＯＤＥ  Ｂにおけるメモリ・コントローラが、別の目的のためにそのストア・バッファを再度用いる必要がある場合（プロセッサがプレフェッチ・リードを送信する前にその他すべてのバッファがフル状態である場合に、通常のライト・リクエストを満足させるため、などの場合）、メモリではなく、メモリ・コントローラによってデータの書き込みが行われる。最後に、ＮＯＤＥ  Ａによって時間６６の間にキャッシュラインフィルが完了する。データが引き続きＮＯＤＥ  Ａ上で用いられる場合、キャッシュラインは、ＬＲＵなどのキャッシュのデアロケーション(deallocation)法を用いて、通常のプロセス・フロー中に、デアロケーションに用いることができる。データ・エレメントはプロセッサによって１度だけ用いられるので、キャッシュではラインは修正されず、そのために、メイン・メモリへラインをライトバックする必要はない。従って、この方法によって通常はメイン・メモリへの任意の書き込みがなくされ、また、この方法によって、NODE  Bにおけるメイン・メモリ・コントローラへの少ない帯域量で、ディレクトリ・リード・オペレーションとリード・バッファ・オペレーションを行うことができる。
【００１７】
図３には本発明による複数のプロセッサを備えた、ブローブベース(probe-based)のデータ処理システム８０のブロック図が例示されている。データ処理システム８０には、“Ａ”、“Ｂ”、“Ｃ”、“Ｄ”と表示されている単一のプロセッサ８１、８２、８３、８４がそれぞれ含まれ、これらのプロセッサはいわゆる、コヒーレント型のＨｙｐｅｒＴｒａｎｓｐｏｒｔ通信プロトコルを用いて、環状(ring fashion)に接続されている。図３に示すように、プロセッサ８１から８４には、プロセッサ８１から８４と関連付けられている対応のデータ・プロデューサが含まれる。このデータ・プロデューサはそれぞれ、“Ｉ／Ｏ  Ａ”、“Ｉ／Ｏ  Ｂ”、“Ｉ／Ｏ  Ｃ”、“Ｉ／Ｏ  Ｄ”と表示されているＩ／Ｏコントローラ８５から８８の形状のデータ・プロデューサであり、各データ・プロデューサは、いわゆる非コヒーレント型のＨｙｐｅｒＴｒａｎｓｐｏｒｔプロトコルを用いて、直接、プロセッサ８１から８４のうちの対応する１つと結合されている。プロセッサ８１から８４の各々は更に、ローカル・メモリ９１から９４とも関連付けられている。ＨｙｐｅｒＴｒａｎｓｐｏｒｔプロトコルにより、リング周辺の様々なポイントで処理を分配することができる。例えば、Ｉ／Ｏコントローラ８７は、Ｉ／Ｏコントローラ８７と関連付けられたローカル・プロセッサ８３へのライト・ウィズ・インジェクト・オペレーションを開始することができる。また、プロセッサ８３のホーム・ノードにおけるメモリ・コントローラは、そのローカル・キャッシュのデータに対してだけではなく、コヒーレントＨｙｐｅｒＴｒａｎｓｐｏｒｔを用いて、システムの全キャッシュに対してプローブを送信する。別の例では、Ｉ／Ｏドライバ又はアプリケーションは別のプロセッサ８１上に動作していてもよく、また、そのデータに対するホーム・ノードはプロセッサ８２などの別のプロセッサであってもよい。図３に示すように、Ｉ／Ｏコントローラ８７は、プロセッサ８３へライト・ウィズ・インジェクト・パケットを実際に送信するコントローラでありうる。
【００１８】
図４は、本発明による単一のプロセッサを有する、プローブベースのデータ処理システム１００のブロック図を例示している。データ処理システム１００には通常、シングルチップのマイクロプロセッサ１２０の形状のデータ・プロセッサと、入力／出力（Ｉ／Ｏ）デバイス１６０と、ＤＲＡＭ（ダイナミック・ランダム・アクセス・メモリ）１７０とが含まれる。マイクロプロセッサ１２０には通常、中央処理装置（ＣＰＵ）１２２と、メモリ・コントローラ１２６と、“ＸＢＡＲ”と表示されているクロスバ・スイッチ１２８と、それぞれが“ＨＴ”（ＨｙｐｅｒＴｒａｎｓｐｏｒｔ）と表示されている、３つのホスト・ブリッジ１３０、１４０、１５０とが含まれ、詳細を以下に説明する。ＣＰＵ１２２はいわゆるｘ８６命令セットの命令を実行するように構成されているプロセッサである。ｘ８６命令セットは８０８６マイクロプロセッサの命令セットを基礎としたものであり、この命令セットは、米国カリフォルニア州サンタクララのインテルコーポレーションが最初に製造したものである。しかしＣＰＵ１２２には、ｘ８６命令セットのプログラムを高性能に実行するための多くの優れた機能が搭載されており、その優れた機能としてはパイプライン化の機能やスーパースカラ設計機能などが挙げられる。ＣＰＵ１２２には少なくとも１つのキャッシュ１２４が含まれ、頻繁に使用されるデータが格納される。好ましい形状では、ＣＰＵには実際には２つのＬ１キャッシュ（１つは命令用、もう１つはデータ用）と、命令ストリームとデータ・ストリームによって共用されるＬ２キャッシュとが含まれる。この態様では、共用Ｌ２キャッシュはライト・ウィズ・インジェクト属性が与えられているデータを格納する。しかし、本発明は少なくとも１つのキャッシュを持つ任意のＣＰＵに応用可能である。
【００１９】
メモリ・コントローラ１２６はマイクロプロセッサ１２０とＤＲＡＭ１７０との間でデータ伝送を行うための機構である。メモリ・コントローラ１２６はＣＰＵ１２２からのメモリアクセスの開始及び終了タスクのオフロードを行う。メモリ・コントローラ１２６には内部キューが含まれ、ＤＲＡＭ１７０への外部バスを効率的に利用することができる。他の実施形態では、ＤＲＡＭ１７０は１つ以上の付加的キャッシュとメイン・メモリを含む下位レベルのメモリシステムや、スタティックＲＡＭ、不揮発性メモリなどに置き換えることができる。
【００２０】
ＸＢＡＲ１２８はスイッチング／マルチプレキシング回路(switching/multiplexing circuit)であり、マイクロプロセッサ１２０内のバスをまとめて連結するように設計されている。
【００２１】
ホスト・ブリッジ１３０、１４０、１５０はそれぞれの出力チャネル１３２、１４２、１５２を介して、また、それぞれの入力チャネル１３４、１４４、１５４を介して、マイクロプロセッサ１２０の外側にあるデバイスと結合されている。ホスト・ブリッジ１３０、１４０、１５０の各々は、コピーライト：２００１  ＨｙｐｅｒＴｒａｎｓｐｏｒｔ  Ｔｅｃｈｎｏｌｏｇｙ  Ｃｏｎｓｏｒｔｉｕｍの、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ（商標）  Ｉ／Ｏ  Ｌｉｎｋ  Ｓｐｅｃｉｆｉｃａｔｉｏｎ、Ｒｅｖｉｓｉｏｎ  １．０３に準拠しており、１６００ＭＨｚのデータ転送率を用いる場合に、１秒当たり３．２ＧＢのスループットを実現することができる。ＨｙｐｅｒＴｒａｎｓｐｏｒｔ技術はパケットベースのリンクであり、それぞれが独立した２本の単方向性のワイヤセット上に実装される。そのため、例えば、ホスト・ブリッジ１３０は出力接続部１３２と入力接続部１３４とを介して、Ｉ／Ｏデバイス１６０との通信を行う。ＨｙｐｅｒＴｒａｎｓｐｏｒｔリンクは、名目上はポイント・ツー・ポイントであり、２つのデバイスを接続する。ＨｙｐｅｒＴｒａｎｓｐｏｒｔのチェーンはI/Oデバイスとブリッジとをホスト・システムに結合するI/Oチャネルとしても利用することができる。
【００２２】
ＨｙｐｅｒＴｒａｎｓｐｏｒｔリンクはＣＰＵ、メモリとＩ／Ｏデバイスとの間に、高性能でスケーラブルな相互接続をするように設計されている。ＨｙｐｅｒＴｒａｎｓｐｏｒｔリンクは差動終端部が内蔵された（オンダイの）低振幅の差動信号を用いて、非常に高速なデータ転送率を実現する。ＨｙｐｅｒＴｒａｎｓｐｏｒｔリンクはスケーラブルな周波数とデータ幅を用いて、スケーラブルな帯域幅を実現する。
【００２３】
Ｉ／Ｏデバイス１６０はデータ・プロデューサとして機能する入力／出力デバイスである。例示の実施形態では、Ｉ／Ｏデバイス１６０はＬＡＮ（ローカルエリアネットワーク）通信プロトコルを実装しているコントローラである。この通信プロトコルは一般に“イーサネット”（Ｅｔｈｅｒｎｅｔ）と呼ばれる、電気電子学会（ＩＥＥＥ：Institute of Electrical and Electronics Engineers）によるＩＥＥＥ８０２．３委員会の下で規格化されている。しかし、本発明は他のデータ・プロデューサにも同様に応用できる。
【００２４】
実際の動作では、Ｉ／Ｏデバイス１６０はイーサネット・プロトコルを実行する間に、定期的にフレームを受信する。フレームを受信すると、Ｉ／Ｏデバイス１６０内のＤＭＡコントローラは、特定のライト・ウィズ・インジェクト・パケットを送信することによって、キャッシュ１２４へデータの書き込みを行う。この場合、データ・フレームは２つの部分から構成され、１つの部分にはプロトコル・ヘッダ情報が含まれ、もう１つの部分にはペイロード・データが含まれる。別の実施形態では、１つのマイクロプロセッサは、ヘッダ情報を処理し、一方でもう１つのプロセッサはペイロード・データを消費する。しかし、図４に示している１つのプロセッサシステムでは、Ｉ／Ｏドライバとアプリケーションプログラムの双方がＣＰＵ１２０上に起動する。
【００２５】
ＤＭＡ・ライトは、入力部１３４を介して、ＨｙｐｅｒＴｒａｎｓｐｏｒｔプロトコルを用いて行われる。まずホスト・ブリッジ１３０がデータを受信し、そのデータを、ＸＢＡＲ１２８を介してメモリ・コントローラ１２６へ送信する。次いでメモリ・コントローラ１２８はパケットのライト・ウィズ・インジェクト属性を認識し、そのデータをローカル・バッファに格納する。メモリ・コントローラ１２６はＣＰＵ１２２へプローブを送信し、キャッシュ１２４に書き込まれるデータが存在することをＣＰＵ１２２へ通知する。その後、ＣＰＵから送信されるプリフェッチ・リード信号に応答して、メモリ・コントローラ１２６は、ＤＲＡＭ１７０への書き込みと、その後のＤＲＡＭ１７０からの読み出しを行わずに、ＣＰＵ１２２へデータを送り、キャッシュ１２４にそのデータを格納する。
【００２６】
このオペレーションは図５を参照すると更に理解することができる。図５には図４のデータ処理システム１００のブロック図１８０が例示されており、ライト・ウィズ・インジェクト・オペレーションを行う間のデータ・フローが破線で示されている。上述のように、データ・フローはＩ／Ｏデバイス１６０から開始し、ホスト・ブリッジへと流れ、ＸＢＡＲ１２８を介してメモリ・コントローラ１２６へ、そして最後にメモリ・コントローラ１２６からＸＢＡＲ１２８を介してＣＰＵ１２２へと流れる。
【００２７】
図６では、メモリ・コントローラ１２６内のライト・ウィズ・インジェクト・オペレーション中のデータ・フローがより具体的に説明されている。図６にはメモリ・コントローラ１２６を含む図４のデータ処理システム１００の１部のブロック図が例示されている。メモリ・コントローラ１２６には一般に、一連のリード・リクエスト・バッファ２２２と、一連のライト・リクエスト・バッファ２２４と、マルチプレクサ２２６と、ＤＲＡＭコントローラ２２８と、ドライバ２３０と、ライト・データ・バッファ２４２と、リクエスト・オーダリング・バッファ２６２と、制御ブロック２６４と、ドライバ２４４、２４６と、リード・データ・バッファ２４８と、マルチプレクサ２５０とが含まれる。メモリ・コントローラ１２６がＸＢＡＲ１２８からメモリ・アクセス・リクエストを受け取ると、メモリ・コントローラ１２６は必要に応じてそのリクエストをリード・リクエスト・バッファ２２２又はライト・リクエスト・バッファ２２４に、及び、リクエスト・オーダリング・バッファ２６２に配置する。これらのバッファによって、アクセスに関するアドレス及びシーケンス情報が格納される。次いで制御ブロック２６４によって順序が制御され、その順序でバッファ２２２と２２４からリクエストの読み出しが行われ、ＤＲＡＭコントローラ２２８へ送られる。この機構によって、メモリ・コントローラ１２６に、より古いデータの読み出しをパスする手法が実装され、これにより性能が向上する。アクセス・リクエストがライト・アクセスの場合、ライト・バッファ２４２のうちの、対応するバッファによって、メモリへ書き込みされるデータが格納される。制御ブロック２６４はリクエスト・オーダリング・バッファ２６２を用いて、アクセスを適切に調整する。ドライバ２３０はＤＲＡＭ１７０へアドレスを出力する。ライト・データはバッファ２４２から読み出され、対応のアドレスを用いて、ドライバ２４４によってＤＲＡＭデータ・バスの中へ運ばれる。リード・オペレーション中に、リード入力データは入力ドライバ２４６を介してＤＲＡＭ１７０から受信され、リード・データ・バッファ２４８に格納される。制御ブロック２６４により、このようにして格納されたリード・データは、マルチプレクサ２５０の第２入力部を選択することによって、ＸＢＡＲ１２８を介してＣＰＵ１２２へ送られる。
【００２８】
ライト・ウィズ・インジェクト（ＷＲＩＴＥ  ＷＩＴＨ  ＩＮＪＥＣＴ）パケットの受信に応答して、メモリ・コントローラ１２６はライト・アドレスとライト・データをバッファ２２４と２４２にそれぞれ格納する。このライト・バッファは同じアドレスへの書き込みをまとめ、すべての読み出しをスヌープする。重要なことには、リードがライト・バッファでヒットすると、そのデータはマルチプレクサ２５０を介してＸＢＡＲ１２８へ戻され、そのライト・バッファのエントリはデアロケートされることである。ライト・バッファが一杯になり、プリフェッチ・リードがメモリ・コントローラ１２６に到達する前にライト・オペレーションが行われると、メモリ・コントローラ１２６はＤＲＡＭ１７０からのデータの読み出しだけを進める。しかし実際には、ライト・バッファが十分に大きく作られている場合、データがＤＲＡＭ１７０へ格納されることはあまりない。
【００２９】
図７に、キャッシュ１２４を含む図４の、ＣＰＵ１２２の部位３００のブロック図を例示する。部位３００にはプリフェッチャ３０２と、ロード／ストアユニット３０４と、マルチプレクサ３０６と、プローブ・バッファ３０８と、リクエスト未解決用のバッファ、つまり、リクエスト・アウトスタンディング・バッファ(request outstanding buffer)３１０と、犠牲の、つまり、ビクティム・バッファ３１２と、プローブ・レスポンス・データ・バッファ３１４と、マルチプレクサ３１６と、リード・レスポンス・データ・バッファ３１８と、ストア・データ・バッファ３２０と、マルチプレクサ３２２とが含まれる。プローブはＸＢＡＲ１２８から受信され、バッファ３０８に格納される。プローブの処理が行われると、それらのプローブはマルチプレクサ３０６を介してキャッシュからのリード・リクエストでありうる。このデータがキャッシュに存在する場合はプローブ・ヒットとなる。キャッシュ１２４への、プローブ・イニシエイト(probe-initiated)のアクセスに加え、マルチプレクサ３０６はロード／ストアユニット３０４から生じたキャッシュ・リード・リクエストも、キャッシュ１２４のリード入力部へ送信する。ライトの場合、ロード／ストアユニット３０４はキャッシュ１２４のライト・ポートへアドレスを送り、格納データをストア・バッファ３２０の中に配置し、格納データはマルチプレクサ３２２を介してキャッシュ１２４の中に入力される。キャッシュ１２４はまた、下位レベルのメモリシステムへ読み出しを行った結果として、リード・レスポンス・データを受信し、このようなデータをリード・レスポンス・データ・バッファ３１８に格納し、データはマルチプレクサ３２２の第１入力部を介して、キャッシュ１２４のライト・データ・ポートに格納される。
【００３０】
ライト・ウィズ・インジェクト（ＷＲＩＴＥ  ＷＩＴＨ  ＩＮＪＥＣＴ）パケットに応答して発行されるプローブ・プリフェッチは、プローブ・バッファ３０８を介し、プリフェッチャ３０２へと向かう、破線により示されている経路に従う。プリフェッチ・プローブに応答して、第１ＣＰＵ１２２は、プローブ・レスポンス・データ・バッファ３１４を介してプローブ・レスポンスを発行し、次にメモリ・コントローラ１２６へプリフェッチ・ロードを発行する。プリフェッチ・リード・データが戻されると、プリフェッチ・リード・データはバッファ３１８に格納され、その後、マルチプレクサ３２２の第１入力部を介してキャッシュ１２４へ書き込みされ、修正した（Ｍ）状態で、適切なキャッシュラインにインストールされ、Ｉ／Ｏドライバソフトウエアによってその後すぐに利用される。ラインはＭ状態でインストールされ、ＬＲＵなどの、キャッシュの通常の置換え法を用いてラインがデアロケートされる際に、メモリに確実に書き込みが行われるようにする。
【００３１】
表１に、マイクロプロセッサ１２０で利用可能ないくつかのプローブのタイプと、それらに関連付けられたリスポンスを例示する。
【００３２】
【表１】
0004663329.tif 000002
メモリ・コントローラ１２６はライト・ウィズ・インジェクト（ＷＲＩＴＥ  ＷＩＴＨ  ＩＮＪＥＣＴ）パケットに応答して、“プリフェッチ”属性セットを持つプローブを発行する。表１に示すように、キャッシュ１２４のアクションは、ビクティム・ステートに応じて変化する。
【００３３】
図８にＨｙｐｅｒＴｒａｎｓｐｏｒｔパケット２００の図を例示する。Ｉ／Ｏデバイス１６０はこのＨｙｐｅｒＴｒａｎｓｐｏｒｔパケット２００によって、ライト・ウィズ・インジェクト・パケットを形成することができる。利用されるパケット構造は、アドレスを持つリクエストパケットとして周知である。パケットは４バイト長であり、付加的な４バイトのアドレス拡張を有す。以下に更に説明するように、本発明によれば、Ｉ／Ｏデバイス１６０は、コマンドフィールドに新たなライト・ウィズ・インジェクト・エンコーディングを追加することによって、ライト・ウィズ・インジェクト属性を知らせる。
【００３４】
このライト・ウィズ・インジェクト・パケットに関連付けられている様々なフィールドを以下に説明する。ＳｅｑＩＤ［３：０］（ビット−タイム０のビット７と６及びビット−タイム１のビット６と５を連結して形成される）は、順序付けされたシーケンスの一部としてデバイスにより発行されており、仮想チャネル内でしっかりと順序付けされる必要のある、複数のリクエストグループをタグ付けするように用いられる。マッチング・ノンゼロ・ＳｅｑＩＤフィールド（matching nonzero SeqID field）を持つ、同一のＩ／Ｏストリームと仮想チャネル内のすべてのリクエストは、その順序を維持する必要がある。０×０のＳｅｑＩＤ値が予約され、トランザクションはシーケンスの一部ではないことが示される。この値を用いたトランザクションは、シーケンス・オーダリングの、つまり順序付けの制限は設けられていないが、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ規格のチャプター６で説明しているように、その他の理由によって順序付けられることもできる。
【００３５】
Ｃｍｄ［５：０］フィールドはＨｙｐｅｒＴｒａｎｓｐｏｒｔプロトコルの様々なコマンドを知らせるために用いられる。２００１ＨｙｐｅｒＴｒａｎｓｐｏｒｔ規格によれば、Ｃｍｄ［５：０］フィールドの様々なエンコードが規定され、その他のエンコードが予約される（その他のエンコードもある）。表２に、その規定されたエンコードと予約されたエンコードとを示す。
【００３６】
【表２】
0004663329.tif 000003
【００３７】
ＰａｓｓＰＷはこのパケットが同一のＩ／Ｏストリームの受信（posted）リクエストチャネルのパケットを送ることができることを示している。別の態様では、このパケットは同一のＩ／Ｏストリームの受信チャネルのパケットの後ろの順番に留まっておく必要がある。ＨｙｐｅｒＴｒａｎｓｐｏｒｔ技術の標準のＰＣＩ（personal computer interface）のようなオーダリング・モデルを維持するために、このビットはクリア(clear)される必要がある。ＰＣＩのようなオーダリングを必要としないシステムは、高性能のためにＰａｓｓＰＷを設定することができる。
【００３８】
ＵｎｉｔＩＤ［４：０］フィールドは、トランザクションのパーティシパントを識別するように機能する。すべてのパケットは、構造（fabric）の端部におけるホスト・ブリッジへ、又はホスト・ブリッジから伝送されるので、ソース・ノード又は宛先ノードのいずれかが示される。値０はホスト・ブリッジのＵｎｉｔＩＤ用に予約される。ＵｎｉｔＩＤの利用の更なる詳細については、２００１ＨｙｐｅｒＴｒａｎｓｐｏｒｔ規格のセクション４．２を参照されたい。複数の論理Ｉ／Ｏストリームを持つノードは、複数のＵｎｉｔＩＤ値を持つことができる。
【００３９】
ＨｙｐｅｒＴｒａｎｓｐｏｒｔプロトコルは、そのコマンドに固有となるように、ビットタイム２と３の間に送られた２つのバイトを予約する。
【００４０】
Ａｄｄｒ［３９：２］はリクエストによりアクセスされるダブルワードのアドレスを表わす。すべてのアドレス・ビットが全リクエストタイプに含まれるわけではない。より細かな粒度（granularity）が要求される場合は、バイトマスクが用いられる。
【００４１】
Ｉ／Ｏデバイス１６０は好適には“Ｒｅｓｅｒｖｅｄ−Ｉ／Ｏ”とマークされているＣｍｄ［５：０］フィールド定義のうちの、任意の１つを用いることによって、ライト・ウィズ・インジェクト・リクエストを送るのが望ましい。また、しかし、Ｉ／Ｏデバイスに対して予約されたコマンドエンコーディングは非常に少ないので、新たなライト・ウィズ・インジェクト・パケットが好適には１つのＲｅｓｅｒｖｅｄ−Ｉ／Ｏコマンドエンコーディングを用いて、その他の新たなパケットフォーマットと組み合わせられるのが望ましい。この目的は、４ビットのＳｅｑＩＤを用いることにより実現され、追加条件がエンコードされ、その他の新たなパケットタイプ間が区別される。
【００４２】
図９に、本発明によるディレクトリベースのデータ処理システムにおける、データ信号と制御信号のフローに関連付けられたタイミング図５００を例示する。この実施形態では、ＮＯＤＥ  Ｂにおいて、低レベルのメモリシステムは、ディレクトリベースのキャッシュコヒーレンシープロトコルを維持する。前述のように、データ・プロデューサ、低レベルのメモリシステム、及びキャッシュを備えたプロセッサはすべて、別々のノードを占有することができる。
【００４３】
矢印５０２によって例示されているように、ライト・ウィズ・インジェクト・パケットを与えているＮＯＤＥ  Ｃにおけるデータ・プロデューサに応答して、ＮＯＤＥ  Ｂにおけるディレクトリ／メモリ・コントローラはそのディレクトリをチェックし、時間５０４の間に、その関連付けられた１つの、又は複数のキャッシュ（以下にさらに説明する）にアドレス指定されたラインの存在を確認する。通信レシーバ用に用いられる回路バッファと同様に、このような１つの、又は複数のキャッシュにエントリが既に割り当てられており、エントリが特定の状態（修正又は排他状態）にある場合、メモリ・コントローラは矢印５０６によって示されるプローブ・フェッチをＮＯＤＥ  Ａに送り、ＮＯＤＥ  Ａにおけるキャッシュに注入されるデータが存在することを知らせる。しかし、図２に示すシステムとは違い、図９のディレクトリベースのシステムは、システムの全プロセッサのうち、データをキャッシュし、プリフェッチを同時送信せずにデータ・オーナーへ有向（directed）プリフェッチを送るプロセッサの経過を知ることができる。ＮＯＤＥ  Ａ（データ・オーナー）は矢印５０８で示されるプローブレスポンスで応答する。データはメモリ・コントローラのストア・バッファに保持され、低レベルのメモリシステムへの書き込みは遅延される。その後、ＮＯＤＥ  Ａにおけるデータ・プロセッサは矢印５１０によって示されているようにＮＯＤＥ  Ｂへプリフェッチ・リードを送る。ＮＯＤＥ  Ｂのメモリ・コントローラは時間５１２の間にストア・バッファからデータ・エレメントの読み出しを行い、矢印５１４によって示されているように、ＮＯＤＥ  Ａにデータを送ることにより応答する。ＮＯＤＥ  Ａにおけるデータ・プロセッサがプリフェッチ・リードを正常に送ることができる場合、ＮＯＤＥ  Ｂのメモリ・コントローラはメイン・メモリへアクセスせずにデータを送ることができる。しかし、ＮＯＤＥ  Ｂにおけるメモリ・コントローラが、別の目的のために（プロセッサがプリフェッチ・リードを送る前に、その他すべてのライト・バッファが一杯になった場合に、通常の書き込み要求を実行する、など）ストア・バッファを再度利用する必要がある場合、メモリ・コントローラがメモリの代わりにデータの書き込みを行う。最後に、ＮＯＤＥ  Ａは時間５１６の間にキャッシュラインフィルを完了する。続いてＮＯＤＥ  Ａにおいてデータが利用される場合、ＬＲＵなどのキャッシュのデアロケーション法を用いて、通常のプロセス・フローの間にキャッシュラインは割り当ての解除にも利用することができる。プロセッサによるデータ・エレメントの利用は１度だけであるので、キャッシュにおいてラインは修正されず、また、メイン・メモリに戻ってラインの書き込みを行う必要はない。従って、この方法により、通常はメイン・メモリへのいずれの書き込みもなくなり、そのため、ＮＯＤＥ  Ｂにおけるメモリ・コントローラへの少量の帯域幅のみが消費され、ディレクトリ・リード・オペレーションと、リード・バッファ・オペレーションが実行される。
【００４４】
図１０に、本発明によるディレクトリベースのデータ処理システム６００のブロック図を例示する。データ処理システム６００には、システム相互接続６０２によりまとめて接続されているＮノードが含まれる。図１０に例示されているのは、典型的なノードであり、それらはノード６０４、６０６、６０８、６１０、６１２であり、それぞれが“ＮＯＤＥ  １”、“ＮＯＤＥ  ２”、“ＮＯＤＥ  ３”、“ＮＯＤＥ  Ｎ−１”、“ＮＯＤＥ  Ｎ”と表示されている。例示的なノードとして、６０８の詳細が示されている。ＮＯＤＥ  ６０８には、キャッシュ６２４と６２８とそれぞれ関連付けられている２つのＣＰＵコア６２２と６２６と、“ＸＢＡＲ”６３０と表示されているクロスバスイッチと、“ＨＴ”６３２と表示されているＩ／Ｏコントローラと、ネットワーク・インターフェース６３４と、ディレクトリ／メモリ・コントローラ６３６とを備えたマイクロプロセッサ６２０が含まれる。Ｉ／Ｏコントローラ６３２は外部インターフェースによって関連の入力／出力デバイス６４０と結合されている。Ｉ／Ｏコントローラ６３２はいわゆる、非コヒーレントＨｙｐｅｒＴｒａｎｓｐｏｒｔプロトコルを実装している。ネットワーク・インターフェース６３４はシステム相互接続６０２と結合され、いわゆる、コヒーレントＨｙｐｅｒＴｒａｎｓｐｏｒｔプロトコルを実装している。ディレクトリ／メモリ・コントローラ６３６はＤＲＡＭ６５０の形状で低レベルのメモリシステムと結合されている。
【００４５】
処理の際に、ノード６０８はキャッシュコヒーレントの非一様メモリアクセス（“ＣＣ  ＮＵＭＡ：cache coherent non-uniform memory access”）を実装している。ノード６０８のようなシステムの各ノードには、プロセッサ６２０のように、キャッシュを備えたＣＰＵと、ＤＲＡＭコントローラと、ディレクトリ・コントローラと、入力／出力デバイスとを持つプロセッサが含まれる。ノード６０８は、そのローカル・キャッシュのいずれか一方に直接的に書き込みデータを注入することができ、又は、データが既にＭ（修正）状態かＥ（排他）状態でキャッシュされている場合には、システム相互接続６２０を介して別のノードに設けられているキャッシュへ間接的に書き込みデータを注入することができる。データを格納するキャッシュはこのキャッシュラインへ連続して行われるリード又はライトリクエストを満足させる必要がある。このキャッシィング機構が目的とするのは、図９に示しているように、ＤＲＡＭメモリの帯域幅を低減することと、ラインがキャッシュに既に存在する場合は、システムの任意のキャッシュへＤＭＡライト・データを送り、これによりキャッシュに既に存在するデータをアップデートすることである。
【００４６】
ノード６０８は各ラインに対し、ディレクトリに存在する３つの基本ステートをサポートする。Ｉｎｖａｌｉｄ（Ｉ）ステートは、ラインがシステムのいずれのキャッシュにもキャッシュされないことを示す。Ｉステートのラインへのリード・リクエストにより、低レベルのメモリシステムへのアクセスが生じる。Ｕｎｃａｃｈｅｄ（Ｕ）ステートは、低レベルのメモリシステムへライトバックされた、読み出し専用アクセス用のキャッシング・エージェント（caching agent）によりラインの読み出しが行われたことを示す。Ｍｏｄｉｆｉｅｄ／Ｅｘｃｌｕｓｉｖｅ（ＭＥ）ステートは、リード／ライトアクセスのために、キャッシング・エージェントによりラインの読み出しが行われたことを示す。特定のキャッシュラインに対するディレクトリ・エントリがＭＥステートにある場合、キャッシング・エージェントは、Ｅステート、又は、Ｍステートのいずれかで、そのローカル・キャッシュにデータを有すことができる。キャッシング・エージェントがＥステートのラインを有する場合、そのキャッシィング・エージェントはそのラインのコピーに対し、リード／ライト許可を有するが、ラインへの書き込みは行われていない。キャッシング・エージェントがＭステートのラインを有する場合、キャッシング・エージェントはキャッシュされたラインのコピーに対してリード／ライト許可を有し、キャッシング・エージェントによってデータの修正が既に行われている。キャッシング・エージェントがＭステートのラインをそのキャッシュに有している場合、メモリ内のデータは陳腐化(stale)している。ラインはまず、Ｅステートでキャッシング・エージェントにインストールされ、その後、修正されるとＭステートへと遷移する。システムの１ノードは正確にラインへのリード／ライトアクセスを有することができる。ディレクトリにおいて、ＭＥステートのラインへのいずれのリード・リクエストによって、まず、最新のコピーがシステムのどこに存在するのかがチェックされ、確認される必要がある。最新のデータがプロセッサキャッシュに存在する場合、そのプロセッサはラインを与える必要がある。プロセッサがＥステートのキャッシュラインを有する場合、ラインはプロセッサキャッシュにて無効にされ（Ｉステートにおかれる）、メモリ・エージェントによりラインが与えられる。
【００４７】
ＭＥステートのラインが読み出されると、ディレクトリ・エントリはＯｗｎ（Ｏ）ステートへと遷移し、メモリ内のデータが陳腐化されるとともに、シェアラ(sharer)が存在することも示す。
【００４８】
キャッシュが読み出し専用のデータのコピーを有している場合、いずれのディレクトリ・エントリも割り当てられない。ディレクトリ・エントリが存在しないということは、ラインがシステムにキャッシュされうることである。スパース・ディレクトリ・キャッシュでミスするストアは、すべてのキャッシュへプローブの同時送信を行い、共用コピーを無効にする。
【００４９】
ディレクトリの可用性により、プロセッサ６２０はより一般的な例をサポートすることができ、具体的には、図９のＮＯＤＥ  Ａ、ＮＯＤＥ  Ｂ、ＮＯＤＥ  Ｃは、システム内の全キャッシュにデータの存在をチェックするために、同時にプローブ送信をせずに、識別が可能である。プロセッサ６２０により、ディレクトリ／メモリ・コントローラ６３６のディレクトリが用いられ、現在のところラインがキャッシュされているかが判断される。ラインがキャッシュされており、Ｍステート又はＥステートにある場合、Ｉ／Ｏデバイス６４０からのデータは適切なキャッシュの中に保存される。別の態様では、データはメモリへ書き込まれる。
【００５０】
より詳細には、ディレクトリ／メモリ・コントローラ６３６は新たなディレクトリ・ステートを実装しており、それにより機構がサポートされる。ディレクトリ・エントリなしに、ラインへのライト・ウィズ・インジェクト・パケットを受け取るＩ／Ｏコントローラ６３２に応答して、ディレクトリ／メモリコントローラ６３６はＤＲＡＭ６５０へラインの書き込みを行う。キャッシュ・エントリの追い出しを行わずにディレクトリ・エントリが生成される限り（つまり、Ｕエントリ又はＩエントリを置き換えることによって）、ディレクトリ・エントリは新たなステート、書き込み済（Ｗ）ステートに生成される。この場合、ディレクション・エントリの“ソフト・アロケーション”(soft allocation)が用いられる。この、ソフト・アロケーションにより、キャッシュのワーキング・セットを破壊する(trash)ライト・インジェクトによる、性能上の問題を引き起こす可能性が回避される。その後、ＣＰＵがラインの読み出しをすると、ラインは別の新たなステート、予約（Ｒ）ステートにインストールされ、ディレクトリ・エントリはＷステートからＲステートへと遷移する。Ｒステートにインストールされたラインへのその後の書き込みが、プロセッサキャッシュの中に直接インジェクトされ、ディレクトリ・エントリはメイン・メモリへの書き込みを行わずに、また別の新たなディレクトリ・ステート、ＭＯＤＩＦＩＥＤ（Ｍ）ステートに遷移する。プロセッサはそのキャッシュのＲエントリに上書きする場合はいつでも、リプレースメント通知を送る。
【００５１】
図１１に図１０のディレクトリ／メモリコントローラ６３４のエントリ６５０を例示する。エントリ６５０などの各エントリには３つのフィールドが含まれ、それらは、ＴＡＧフィールド６５２、ＳＴＡＴＥフィールド６５４、ＯＷＮＥＲ（オーナー）フィールド６５６、である。ＴＡＧフィールドはディレクトリ・エントリを物理アドレスと関連づけるために用いられる。ＯＷＮＥＲフィールドは、ラインがＭＥステート、又はＯステートにある場合のオーナー（owner）を示す。３つの付加的なディレクトリ・ステートには、このＷＲＩＴＥ  ＷＩＴＨ  ＩＮＪＥＣＴ機構、つまり、Ｗステートと、Ｒステートと、Ｍステートとを実装することが要求される。ＳＴＡＴＥフィールドにより示される、フルセットのディレクトリ・ステートは以下の表３に示されており、新たなステートはイタリック体で示されている。
【００５２】
【表３】
0004663329.tif 000004
【００５３】
この、ディレクトリベースの機構をサポートするために、１つの付加的なプロセッサのキャッシュステート、Ｒステートが導入される。フルセットのプロセッサキャッシュステートが表４に示されており、新たなステートはイタリック体で示されている。
【００５４】
【表４】
0004663329.tif 000005
【００５５】
ライト・ウィズ・インジェクト・シグナリング(signaling)についての前述の議論は、ＨｙｐｅｒＴｒａｎｓｐｏｒｔプロトコルに固有のものであることは明らかである。しかし、本発明のその他の実施形態では、ライト・ウィズ・インジェクト条件をシグナリングするその他の方法も用いることができる。例えば、ビット・フィールドや、既存の、または付加的な入力／出力ピン、などの特別エンコーディングが用いられ、ライト・ウィズ・インジェクト条件を知らせることができる。ライト・ウィズ・インジェクト・シグナリングは、その他のバス（ＰＣＩ、ＰＣＩ−X、ＰＣＩＥなど）に、Ｉ／Ｏ  ＤＭＡリード・リクエスト・パケットに予約された、またはメーカに固有のフィールドを用いて実現されることができる。
【００５６】
本発明を好ましい実施形態に関連して説明してきたが、様々な変形は当業者にとっては明らかであろう。例えば、本明細書に開示している方法を用いたデータ処理システムは、メイン・メモリや下位レベルキャッシュへ直接接続しているシステムにも応用することができる。更に、本発明は１つ以上の上位レベルキャッシュにも応用することができる。メイン・メモリはＤＲＡＭ、ＳＲＡＭ、不揮発性メモリ、または、その他の任意のメモリのタイプを用いて構成されることができる。更に、プリフェッチ・リードを待つ間、一時的にデータを格納するいくつかの方法も可能である。従って、本発明は添付の請求項によって規定されている発明の範疇に属するすべての変形例をカバーするものである。
【図面の簡単な説明】
【００５７】
【図１】従来技術で周知の、プローブベースのデータ処理システムにおける、データ信号と制御信号のフローに関連付けられたタイミング図。
【図２】本発明による、ブローブベースのデータ処理システムにおける、データ信号と制御信号のフローに関連付けられたタイミング図。
【図３】本発明による複数のプロセッサを有するプローブベースのデータ処理システムのブロック図。
【図４】本発明による単一のプロセッサを有するプローブベースのデータ処理システムのブロック図。
【図５】ライト・ウイズ・インジェクト・オペレーションを実行している間のデータ・フローを示す、図４のデータ処理システムのブロック図。
【図６】メモリ・コントローラを含む図４のデータ処理システム一部のブロック図。
【図７】キャッシュを含む図４のＣＰＵの一つのブロック図。
【図８】ライト・ウィズ・インジェクト・パケットを形成するために用いることができる、ＨｙｐｅｒＴｒａｎｓｐｏｒｔパケットのエンコーディングテーブルを例示した説明図。
【図９】本発明によるディレクトリベースのデータ処理システムのデータ信号と制御信号のフローに関連付けられたタイミング図。
【図１０】本発明によるディレクトリベースのデータ処理システムのブロック図。
【図１１】図１０のディレクトリ／メモリ・コントローラのエントリを例示した説明図。
【図１】
0004663329.tif 000006
【図２】
0004663329.tif 000007
【図３】
0004663329.tif 000008
【図４】
0004663329.tif 000009
【図５】
0004663329.tif 000010
【図６】
0004663329.tif 000011
【図７】
0004663329.tif 000012
【図８】
0004663329.tif 000013
【図９】
0004663329.tif 000014
【図１０】
0004663329.tif 000015
【図１１】
0004663329.tif 000016