(57)【特許請求の範囲】
【請求項１】
プロセッサコアと、
１つ以上のプロセッサコアによってアクセス可能なデータを記憶するための複数の共有エントリを備えている共有キャッシュメモリサブシステムと、
前記共有キャッシュメモリサブシステムのための共有キャッシュ制御器と、
第１のシステムメモリとを備えたコンピュータシステムであって、
前記共有エントリは、プロセッサデータ又はグローバルコヒーレンスプロトコルを制御するためのディレクトリ情報を備えているディレクトリエントリのいずれか一方を選択的に記憶するように構成されており、
前記共有キャッシュ制御器は、前記共有エントリの少なくとも幾つかがプロセッサデータ又はディレクトリ情報のいずれを記憶するかを制御するための値を記憶するように構成されており、
いかなる種類のメモリアクセス要求に対する前記ディレクトリエントリの対応するミスに続く、プロセッサデータの最初のキャッシュされたコピーは、その対応するディレクトリエントリ内に置かれた排他的な修正された（ＥＭ）状態を有しており、
第１のシステムメモリ内のロケーションにマッピングされたアドレスロケーションに対応するデータの各キャッシュされたコピーは、対応するディレクトリエントリを有しており、
前記ディレクトリ情報は、前記キャッシュされたコピーが、前記ＥＭ状態、所有された状態、共有された状態、共有１状態、又は無効にされた状態のいずれであるかを示しており、
前記共有１状態は、前記対応するデータの全てのキャッシュされたコピーが単一のノード内に存在することを示し、
前記共有１状態を有するディレクトリエントリは、キャッシュ交換アルゴリズムにおいて、前記所有された状態又は前記共有された状態よりも、退避に対する高い優先度を有する、コンピュータシステム。
【請求項２】
前記共有キャッシュメモリサブシステムの所与の記憶のラインは複数のディレクトリエントリを含む、請求項１に記載のコンピュータシステム。
【請求項３】
前記プロセッサコア、前記キャッシュメモリサブシステム、及び前記共有キャッシュメモリサブシステムは第１の処理ノードの一部を形成し、前記第１の処理ノードは第２のシステムメモリを含む第２の処理ノードに結合される、請求項１に記載のコンピュータシステム。
【請求項４】
前記キャッシュされたコピーが、対応するデータの全てのキャッシュされたコピーが単一のノード内に存在することを示す共有１状態にあるかどうかを前記ディレクトリ情報が更に示す、請求項１に記載のコンピュータシステム。
【請求項５】
前記共有キャッシュメモリサブシステムの指定されたウエイがディレクトリ情報を記憶することを選択的に可能にされる、請求項３に記載のコンピュータシステム。
【請求項６】
プローブ命令を選択的に送信するための方法であって、
プロセッサデータ又はグローバルコヒーレンスプロトコルを制御するためのディレクトリ情報を備えているディレクトリエントリのいずれか一方を選択的に共有キャッシュメモリサブシステム内に記憶することと、
共有エントリの少なくとも幾つかがプロセッサデータ又はディレクトリ情報のいずれを記憶するかを制御するための値を記憶することと、
排他的な修正された（ＥＭ）状態を、いかなる種類のメモリアクセス要求に対する前記ディレクトリエントリの対応するミスに続く、プロセッサデータの最初のキャッシュされたコピーの対応するディレクトリエントリにセットすることと、
第１のシステムメモリ内にマッピングされたアドレスロケーションに対応するデータのキャッシュされたコピーごとに、ディレクトリエントリを記憶することと、
前記ディレクトリ情報に応じて、１つ以上の処理ノードに対してプローブ命令を選択的に送信することと、
前記キャッシュされたコピーが、前記ＥＭ状態、所有された状態、共有された状態、共有１状態、又は無効にされた状態のいずれであるかを示すことと、を備え、
前記共有１状態は、前記対応するデータの全てのキャッシュされたコピーが単一のノード内に存在することを示し、
前記ＥＭ状態又は前記共有１状態を有するディレクトリエントリは、キャッシュ交換アルゴリズムにおいて、前記所有された状態又は前記共有された状態よりも、退避に対する高い優先度を有する、方法。
【請求項７】
１つ以上のキャッシュメモリサブシステムと通信するように構成されるインタフェースと、
複数の共有エントリと、
キャッシュ制御器とを備え、
前記共有エントリはプロセッサデータ又はグローバルコヒーレンスプロトコルを制御するためのディレクトリ情報を備えているディレクトリエントリのいずれか一方を記憶するように構成されており、
前記キャッシュ制御器は前記共有エントリの少なくとも幾つかがプロセッサデータ又はディレクトリ情報のいずれを記憶するかを制御するための値を記憶するように構成されており、
いかなる種類のメモリアクセス要求に対する前記ディレクトリエントリの対応するミスに続く、プロセッサデータの最初のキャッシュされたコピーは、その対応するディレクトリエントリ内に置かれた排他的な修正された（ＥＭ）状態を有しており、
第１のシステムメモリ内にマッピングされたアドレスロケーションに対応するデータの各キャッシュされたコピーは、対応するディレクトリエントリを有しており、
前記ディレクトリ情報は、１つ以上の処理ノードに対してプローブ命令を選択的に送信するために、パケット処理論理回路に接続されたメモリ制御器に送られ、
前記ディレクトリ情報は、前記キャッシュされたコピーが、前記ＥＭ状態、所有された状態、共有された状態、共有１状態、又は無効にされた状態のいずれであるかを示しており、
前記共有１状態は、前記対応するデータの全てのキャッシュされたコピーが単一のノード内に存在することを示し、
前記ＥＭ状態又は前記共有１状態を有するディレクトリエントリは、キャッシュ交換アルゴリズムにおいて、前記所有された状態又は前記共有された状態よりも、退避に対する高い優先度を有する、共有キャッシュメモリサブシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は高性能なコンピュータネットワークシステムに関し、更に特定的には多重化プロセッサノードにわたり効率的なキャッシュコヒーレンシを維持することに関する。
【背景技術】
【０００２】
最新のマイクロプロセッサでは、１つ以上のプロセッサコア又はプロセッサがマイクロプロセッサ内に含まれていることがあり、各プロセッサはスーパースケーラパイプライン(superscalar pipeline)において命令を実行することが可能である。マイクロプロセッサは、読み出し又は書き込み動作に対するメモリ内でのマイクロプロセッサによるデータ要求の待ち時間を短縮するために、１つ以上のレベルのキャッシュ階層(cache hierarchy)に結合されることがある。一般的に、キャッシュは１つ以上のブロックを記憶することができ、各ブロックはシステムメモリ内の対応するアドレスで記憶されているデータのコピーである。ここで用いられる「ブロック」は、連続したメモリロケーションに記憶される一連のバイトであり、これらはコヒーレンシ目的(coherency purposes)に対する単位として取り扱われる。幾つかの実施形態では、ブロックはまたキャッシュ内での割り当て及び割り当て解除(allocation and deallocation)の単位でもある。１つのブロック内のバイト数は設計上の選択に従って異なっていてよく、従って任意のサイズであってよい。例として３２バイト及び６４バイトブロックがよく用いられる。
【０００３】
計算性能を高めるために、コンピュータシステムは、各々が１つ以上のマイクロプロセッサを含む複数の処理ノードのようなサブシステムを備えることによって、並列処理を増やすことができる。処理ノード内の各プロセッサ、又はノードは、それ自身のキャッシュ階層を有することができる。また各ノードは、多重化マイクロプロセッサ間で共有される上位レベルのキャッシュ階層を有することができる。例えば１つの形態では、対応するレベル１（Ｌ１）キャッシュを各々が有する２つのマイクロプロセッサを１つのノードが備えることができる。そのノードはそれら２つのマイクロプロセッサによって共有されるＬ２キャッシュを有することができる。メモリ制御器又は他のインタフェースは、各ノードを、コンピュータシステム内の他のノード、多重化ノード間で共有されるＬ３キャッシュ等の上位レベルのキャッシュ階層、及びダイナミックランダムアクセスメモリ（ＤＲＡＭ）、デュアルインラインメモリモジュール（ｄｉｍｍｓ）、ハードディスク、その他に結合することができる。代替的な形態では、異なる種類のコンポーネント及びコンポーネント間の結合が用いられるかもしれない。
【０００４】
与えられたブロックは１つ以上のキャッシュに記憶されることがあり、更にキャッシュされたコピーの１つはメモリシステム内のコピーに対して修正されていることがあるので、コンピュータシステムは多くの場合、キャッシュとメモリシステムの間でのコヒーレンシを維持する。ブロックに対する更新が所定のコヒーレンシプロトコルに従うそのブロックの他のキャッシュコピーに反映される場合、コヒーレンシは維持されている。種々の具体的なコヒーレンシプロトコルがよく知られている。
【０００５】
多くのコヒーレンシプロトコルは、コンピュータシステム内の種々のキャッシュの間で通信するためのメモリ制御器のようなコヒーレンシ点から渡されるメッセージ、即ちプローブ(probes)の使用を含む。コヒーレンシ点は、ブロックを読み出し又は書き込むためのコンポーネント（例えばプロセッサ）からの命令に応答してプローブを送信することができる。プローブはキャッシュがブロックのコピーを有しているかどうかを決定するために用いることができ、また随意的にはキャッシュがブロックを収納すべき状態であることを表示するために用いることができる。各プローブ受信機がプローブに応答し、そして全てのプローブ応答が一旦受信されると次いで命令は完了に向かうことができる。
【０００６】
コンピュータシステムは一般的に、ブロードキャストキャッシュコヒーレンシプロトコル又はディレクトリベースのキャッシュコヒーレンシプロトコルのいずれかを採用している。ブロードキャストプロトコルを採用しているシステムにおいては、プローブは全てのプロセッサ（又はキャッシュサブシステム）にブロードキャストされる。共有されているデータコピーを有しているサブシステムがブロックへの排他的なアクセスに対する命令からもたらされるプローブを観測した場合、そのコピーは典型的には無効にされる。同様に、データのブロックを目下のところ所有しているサブシステムが当該ブロックに対応するプローブを観測した場合、その所有しているサブシステムは典型的には、要求元にデータを供給すると共に必要であればそのコピーを無効にすることによって応答する。
【０００７】
一方、ディレクトリベースのプロトコルを採用しているシステムは、キャッシュされたデータコピーの存在を示す情報を含むディレクトリを保持する。プローブを無条件にブロードキャストするよりもむしろ、ディレクトリ情報は、具体的なコヒーレンシアクションを生じさせるためにプローブが伝達されることを要する特定のサブシステム（キャッシュされたデータコピーを含んでいることがある）を決定するために用いられる。例えばディレクトリは、種々のサブシステムがデータのブロックの共有されるコピーを含んでいることを示す情報を含むことができる。当該ブロックへの排他的なアクセスのための命令に応答して、共有しているサブシステムに対して無効化プローブが伝達されるであろう。ディレクトリはまた、データの特定のブロックを目下のところ所有しているサブシステムを示す情報を含むことがある。従って命令への応答は、所有中のサブシステムに要求中のサブシステムへデータを送らせるプローブを付加的に含むことができる。キャッシュコヒーレンシプロトコルに基く多くの種類のディレクトリがよく知られている。
【０００８】
プローブはブロードキャストキャッシュコヒーレンシプロトコルを採用しているシステム内の全ての他のプロセッサに対してブロードキャストされる必要があるので、それらのプロセッサを相互接続しているネットワークに関する帯域は、特に多数のプロセッサを採用しているシステムに対して、あるいは多数のプローブが短期間の間に送信される場合に、急速に性能の制限因子(limiting factor)になり得る。見込まれる帯域問題に加えて、メモリアクセスの待ち時間が複数のプローブに起因して増大するかもしれない。例えばプロセッサがそのプロセッサのキャッシュ階層においてミスするメモリ要求を実行する場合、その要求されたデータは全てのプローブの完了に先立ちＤＲＡＭから回収され且つメモリ制御器へ返されるであろう。その結果、メモリアクセスの待ち時間が増大する。
【０００９】
ディレクトリベースのプロトコルは、プローブを無条件に送るよりはむしろ条件付でそれらを送ることによって、ネットワークトラフィックに寄与するプローブの数を減少させる。従ってディレクトリベースのプロトコルを採用しているシステムは、ネットワークトラフィックの縮小及びメモリ要求の待ち時間の減少により、全体的に高い性能を達成することができる。しかし、ディレクトリベースのシステムがより効果的なキャッシュコヒーレンシプロトコルを可能にするであろう一方で、多くの場合に付加的なハードウエアが必要になる。
【００１０】
ディレクトリベースのプロトコルは多くの場合、プロセッサとは別の特定用途向け集積回路（ＡＳＩＣ）又は他のセミカスタムチップに実装されているであろうディレクトリキャッシュを含む。ディレクトリキャッシュが別のチップに実装される場合、システムの全体的なコストが上昇するだけでなく、ボード要求、電力消費、及び冷却上の要求も増大する。一方、プロセッサコアと同じチップへのディレクトリキャッシュの組み込みは、特に単一プロセッサ又は多重化プロセッサのシステムの両方での使用が意図されている汎用マイクロプロセッサ(commodity microprocessor)に対して望ましくはないであろう。ディレクトリキャッシュは単一プロセッサシステムにおいて使用される場合に役に立たないかもしれず、その結果、貴重なダイ面積(die area)を浪費すると共に収率の減少(decreased yield)によりコストを増大させてしまう可能性がある。
【００１１】
第３の代替案は、プロセッサコアに付随するＬ２キャッシュのようなキャッシュメモリサブシステムの指定されたロケーション内にディレクトリエントリを記憶させる。例えば記憶するディレクトリエントリに対してキャッシュメモリサブシステムの指定されたウエイ(way)が割り当てられてよい一方で、キャッシュの残りのウエイは通常のプロセッサデータを記憶するために用いられる。１つの特定的な実装においては、ディレクトリエントリは、キャッシュメモリサブシステム内に記憶されることで、修正されてキャッシュされてよく、排他的であってよく、あるいは所有されたコヒーレンシ状態であってよい複数のライン（又は複数のブロック）の表示を提供する。特定のブロックに対するディレクトリエントリの不在は、共有された状態又は無効な状態のいずれかでブロックがキャッシュされていることを暗示することができる。更なる詳細は、ピー・コンウエイ、統合化されたディレクトリ及びプロセッサキャッシュを有するコンピュータシステム、米国特許番号６，８６８，４８５、１６００５(P. Conway, Computer System with Integrated Directory and Processor Cache, U.S. Patent Number 6,868,485, 16005)において見出されるであろう。
【００１２】
しかし、第３の代替案は、頻繁に用いられるキャッシュのかなりの部分を占めることなしには、高い補償率(coverage ratio)を提供することができない。かなりの部分がディレクトリのために用いられる場合、キャッシュ内で使用することのできるデータ用ラインはより少なくなるであろう。その結果、より多くのキャッシュミス、例えば容量及び矛盾のミス(capacity and conflict misses)が生じる可能性がある。ディレクトリのために用いるキャッシュスペースの量を減らすために、所定の状態にあるラインはキャッシュされないように決定されるかもしれない。しかし、ブロックに対するディレクトリの不在は、プローブが送信されそれによりネットワークトラフィックを増大させることを引き起こす可能性がある。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
上述に鑑み、多重化プロセッサノードにわたるキャッシュコヒーレンシプロトコルのための効果的な方法及びメカニズムが要望されている。
【課題を解決するための手段】
【００１４】
選択的にプローブ命令を送信すると共にネットワークトラフィックを低減するためのシステム及び方法が検討される。
【００１５】
１つの実施形態では、互いに結合される多重化処理ノードを備えたコンピュータシステムが提供される。各処理ノードは、１つ以上の処理コア、１つ以上の対応するキャッシュメモリサブシステム、及びＬ３キャッシュ構造のような共有キャッシュメモリサブシステムを含んでいてよい。共有キャッシュメモリサブシステム内の記憶エントリは、プロセッサデータ又はグローバルコヒーレンスプロトコルを制御するためのディレクトリ情報を備えているディレクトリエントリのいずれか一方を選択的に記憶するように構成されてよい。共有キャッシュメモリサブシステムのためのキャッシュ制御器は、エントリの少なくとも幾つかがプロセッサデータ又はディレクトリ情報のいずれを記憶するかを制御するための値を記憶するように構成されてよい。
【００１６】
ディレクトリエントリは、特定のキャッシュコヒーレントトランザクション(cache coherent transactions)のためのプローブ命令及び応答トラフィックをフィルタリングするために維持される。共有キャッシュメモリサブシステム内にエントリを記憶することによって、専用のディレクトリ記憶に対する特別な記憶場所(real estate)は必要とされない。Ｌ３キャッシュ構造の一部が、例えばキャッシュの残りのウエイの間に通常のプロセッサデータを記憶するために用いられる。１つの特定の実装においては、ディレクトリエントリはキャッシュメモリサブシステム内に記憶されて、排他的な修正された状態、所有された状態、共有された状態、共有１状態、又は無効なコヒーレンシ状態でキャッシュされてよいライン（又はブロック）の表示を提供する。共有１状態は、対応するデータの全てのキャッシュされたコピーが単一の処理ノード内に存在していることを示す。特定のブロックに対するディレクトリエントリの不在は、そのブロックがコンピュータシステム内のどこにもキャッシュされていないことを暗示することができる。コンピュータシステム内の全ての最初のキャッシュされたコピーは、排他的な修正された状態を与えられてよい。従って、対応するキャッシュブロックが修正される場合、プローブ命令は送信される必要がない。
【００１７】
ディレクトリエントリの記憶のための共有キャッシュメモリサブシステムの利用が、サブシステムが単一プロセッサ環境内又は多重化プロセッサ環境内のいずれにおいて展開されているかに基いて選択的に可能にされてよい実施形態があり得る。従って、単一プロセッサ環境内で展開される場合には、共有キャッシュメモリサブシステムの記憶ロケーションはプロセッサのキャッシュ動作のために排他的に利用することができ、専用のディレクトリ記憶装置の非利用を回避することができる。
【図面の簡単な説明】
【００１８】
【図１】図１はコンピュータシステムの１つの実施形態を示す一般化されたブロック図である。
【００１９】
【図２】図２は例示的な処理ノードの１つの実施形態を示す一般化されたブロック図である。
【００２０】
【図３】図３はメモリ制御器の１つの実施形態を示す一般化されたブロック図である。
【００２１】
【図４】図４はディレクトリエントリが４ウエイキャッシュ構成を用いて記憶される記憶配置の１つの実施形態を示す一般化されたブロック図である。
【００２２】
【図５Ａ】図５Ａは単一プローブ命令を必要とする例示的な一連の動作を示すプローブフィルタリングコンピュータシステムの１つの実施形態の一般化されたブロック図である。
【００２３】
【図５Ｂ】図５Ｂはプローブ命令を必要としない例示的な一連の動作を示すプローブフィルタリングコンピュータシステムの１つの実施形態の一般化されたブロック図である。
【００２４】
【図５Ｃ】図５Ｃは連続的な(back-to-back)ロード動作及び対応するプローブ命令の送信を示すプローブフィルタリングコンピュータシステムの１つの実施形態の一般化されたブロック図である。
【００２５】
本発明が種々の修正及び代替的な形態を許容し得る一方で、具体的な実施形態が例示の目的で図面に示されており、またここに詳細に説明されている。しかし、図面及びそれに対する詳細な説明は、開示された特定の形態に本発明を限定することを意図しているのではなく、むしろ添付の特許請求の範囲により画定されるような本発明の精神及び範囲内にある全ての修正、均等なもの及び代替案を網羅する意図であることが理解されるべきである。
【発明を実施するための形態】
【００２６】
以下の記述においては、本発明の完全な理解を提供するために種々の特定の詳細が説明されている。しかし、当業者であれば、これらの特定の詳細がなくとも本発明が実施され得ることを認識すべきである。幾つかの例では、本発明を不明瞭にすることを避けるために、周知の回路、構造、及び技術は詳細には示されていない。
【００２７】
図１を参照すると、コンピュータシステム１００の１つの実施形態が示されている。コンピュータシステム１００は複数の処理ノード１１０ａ〜１１０ｄを含む。図１内には４つのノードが示されているが、他の実施形態は、各々が１つ以上のプロセッサコアを備えた異なる数のノードを備えていてよい。ここで用いられるような、その後に１文字が続く参照番号によって参照される要素は、当該番号のみによって総称的に参照されることがある。例えば処理ノード１１０ａ〜１１０ｄは、処理ノード１１０又はノード１１０として総称的に参照されることがある。各ノード１１０はそれぞれのメモリ制御器１２０を介してそれぞれのメモリ１３０に結合されていてよい。また各処理ノード１１０は、他の処理ノード１１０と通信するために用いられるインタフェース論理１４０を含んでいてよい。例えば処理ノード１１０ａは、処理ノード１１０ｂ及び１１０ｃと通信するためのインタフェース論理１４０ａを含む。同様に、処理ノード１１０ｂは処理ノード１１０ａ及び１１０ｄと通信するためのインタフェース論理１４０ｂを含み、以下同様である。図１の実施形態においては、処理ノード１１０ｄは、インタフェース論理１４０ｄを介して入力／出力（Ｉ／Ｏ）デバイス１６０ａと結合されてこれと通信するように図示されており、またＩ／Ｏデバイス１６０ａは更に第２のＩ／Ｏデバイス１６０ｂに結合されている。他の複数の処理ノードが同様にして他の複数のＩ／Ｏデバイスと通信してよい。代替的には、処理ノードはＩ／Ｏバスに結合されるＩ／Ｏブリッジと通信してよい。
【００２８】
コンピュータシステム１００は、ノード間(inter-node)通信のためのパケットベースのリンクを実装していてよい。図示された実施形態では、リンクは一連の単方向線として実装されている（例えば、線１５０ａが処理ノード１１０ａから処理ノード１１０ｂへパケットを送信するために用いられ、また線１５０ｂが処理ノード１１０ｂから処理ノード１１０ａへパケットを送信するために用いられる）。他の一連の線１５０ｃ〜１５０ｈが、図１に示される他の処理ノードの間でパケットを送信するために用いられる。リンクは、処理ノード間での通信に対してキャッシュコヒーレントなやり方で動作させられてよく、あるいはＩ／Ｏデバイス１６０ａ，１６０ｂ（及び必要に応じて追加的なＩ／Ｏデバイス）の間でのデイジーチェイン(daisy-chain)構造として非コヒーレントなやり方で動作させられてよい。尚、１つの処理ノード１１０から他へ送信されるべきパケットは、１つ以上の中間ノードを通過してよい。例えば処理ノード１１０ａによって処理ノード１１０ｄへ送信されるパケットは、図１に示されるように処理ノード１１０ｂ又は処理ノード１１０ｃのいずれかを通過することができる。任意の適切な経路設定アルゴリズムが用いられてよい。コンピュータシステム１００の他の実施形態は、図１に示される実施形態よりも多い又は少ない処理ノードを含んでいてよい。また、各処理ノードが点対点(point-to-point)ネットワークを介して全ての他の処理ノードに結合される他の実施形態も可能である。
【００２９】
各処理ノード１１０は、図示されたメモリ制御器及びインタフェース論理に加えて１つ以上のプロセッサ及び付随するキャッシュを含んでいてよく、これについては更に後述する。概して処理ノード１１０は、少なくとも１つのプロセッサを備えており、また必要に応じてメモリ及び他の論理と通信するためのメモリ制御器を随意的に含むことができる。
【００３０】
メモリ１３０は任意の適切なメモリデバイスを備えていてよい。例えばメモリ１３０は、１つ以上のＲＡＭＢＵＳダイナミックランダムアクセスメモリ（ＤＲＡＭｓ）、同期ＤＲＡＭｓ（ＳＤＲＡＭｓ）、ＤＲＡＭ、スタティックＲＡＭ等を備えていてよい。コンピュータシステム１００のアドレス空間は複数のメモリ１３０の間で分けられている。各処理ノード１１０は、どのアドレスがどのメモリ１３０にマッピングされているか、またそれによりどの処理ノード１１０に対して特定のアドレスに対するメモリ要求が経路付けられるべきかを決定するために用いられるメモリマップを含んでいてよい。１つの実施形態では、コンピュータシステム１００内におけるアドレスに対するコヒーレンシ点は、そのアドレスに対応するバイトを記憶しているメモリに接続されるメモリ制御器１２０である。メモリ制御器１２０はメモリ１３０とインタフェースするための制御回路を備えていてよい。またメモリ制御器１２０は、メモリ要求を列に並ばせるための要求キュー(queues)を含んでいてよい。
【００３１】
一般的にインタフェース論理１４０は、リンクからパケットを受け取ると共にリンク上へ送信されるべきパケットをバッファリングするための複数のバッファを備えていてよい。コンピュータシステム１００はパケットを送信するための任意の適切なフロー制御メカニズムを採用していてよい。Ｉ／Ｏデバイス１６０は任意の所望の周辺デバイスの例示である。例えばＩ／Ｏデバイス１６０は、ネットワークインタフェースカード、ビデオアクセレレータ、オーディオカード、ハード若しくはフロッピディスクドライブ又はドライブ制御器、スモールコンピュータシステムインタフェース（ＳＣＳＩ）アダプタ及びテレホンカード、モデム、音源カード、及び汎用インタフェースバス（ＧＰＩＢ）又はフィールドバスインタフェースカードのような種々のデータ取得用カードを備えていてよい。
【００３２】
図２は例示的な処理ノード１１０の１つの実施形態のブロック図である。図１の回路部分に対応する回路部分には同一の符号が付されている。処理ノード１１０は、メモリ制御器１２０と、インタフェース論理１４０と、プロセッサコア１１２及び対応するキャッシュメモリサブシステム１１４を含んでいてよい１つ以上の処理ユニット１１５と、パケット処理論理１１６と、共有キャッシュメモリサブシステム１１８とを含んでいてよい。１つの実施形態では、処理ノード１１０の図示された機能性は単一の集積回路に組み込まれている。
【００３３】
一般的にパケット処理論理１１６は、処理ノード１１０が結合されているリンクで受け取られた制御パケットに応答し、プロセッサコア１１２及び／又はキャッシュメモリサブシステム１１４に応答して制御パケットを生成し、メモリ制御器１２０によってサービスのために選択されるトランザクションに応答してプローブ命令及び応答パケットを生成し、そしてノード１１０がインタフェース論理１４０を介して他のノードに対する中間ノードとなっているパケットを経路付けるように構成されている。インタフェース論理１４０は、パケットを受信すると共にそれらパケットをパケット処理論理１１６によって用いられる内部クロックに同期させるための論理を含んでいてよい。
【００３４】
キャッシュサブシステム１１４及び１１８は、データのブロックを記憶するように構成される高速キャッシュメモリを備えていてよい。キャッシュメモリサブシステム１１４はそれぞれのプロセッサコア１１２内に一体化されていてよい。代替的には、キャッシュメモリサブシステム１１４は必要に応じてバックサイドキャッシュ構成又はインライン構成でプロセッサコア１１２に結合されていてよい。更には、キャッシュメモリサブシステム１１４はキャッシュの１つの階層として実装されてよい。プロセッサコア１１２により近い（当該階層内で）キャッシュは、所望によりプロセッサコア１１２内に一体化されていてよい。１つの実施形態においては、キャッシュメモリサブシステム１１４は各々Ｌ２キャッシュ構造を代表し、そして共有キャッシュサブシステム１１８はＬ３キャッシュ構造を代表する。
【００３５】
キャッシュメモリサブシステム１１４及び共有キャッシュメモリサブシステム１１８の両方は、対応するキャッシュ制御器に結合されるキャッシュメモリを含んでいてよい。共有キャッシュメモリサブシステム１１８に対しては、キャッシュ制御器は、サブシステム１１８のロケーション内におけるディレクトリエントリの記憶をプログラム的に可能にするためにプログラム可能論理を含んでいてよい。尚、サブシステム１１８の全ての記憶ロケーションは、単一のプロセッサ環境内で展開されたときに、通常のキャッシュエントリに対して用いられてよい。サブシステム１１８の幾つかのロケーションは、多重化プロセッサ環境内で展開されたときに、ディレクトリエントリを記憶するために用いられてよい。ディレクトリエントリはコヒーレンシ動作を制御するためのコヒーレンシ制御回路によって保持され且つアクセスされてよく、これについては後述する。
【００３６】
プロセッサコア１１２は所定の命令セットに従う命令を実行するための回路を含む。例えばｘ８６命令セットアーキテクチャが選択されてよい。代替的には、アルファ(Alpha)、パワーＰＣ(PowerPC)、又は任意の他の命令セットアーキテクチャが選択されてよい。一般的にプロセッサコア１１２は、それぞれデータ及び命令に対してキャッシュメモリサブシステム１１４にアクセスする。要求されたブロックがキャッシュメモリサブシステム１１４内又は共有キャッシュメモリサブシステム１１８内に見つからない場合には、読み出し要求が生成され、そしてミスしているブロックがマッピングされているノード内のメモリ制御器に対して送信されてよい。
【００３７】
以下に更に詳細に説明されるように、コンピュータシステム１００の１つの実施形態においては、特定のトランザクションに対するプローブ命令及び応答トラフィックをフィルタリングするために、ディレクトリエントリが保持されてよい。ディレクトリエントリを専用のディレクトリ記憶装置内に記憶するよりはむしろ、ディレクトリエントリは共有キャッシュメモリサブシステム１１８の指定されたロケーション内に記憶されてよい。ディレクトリエントリの記憶のために共有キャッシュメモリサブシステム１１８を利用することによって、別個のディレクトリ記憶装置に対する必要性を回避することができる。結果として、全体的なコストの他に、要求されるボード面積、電力消費、及び冷却の必要性を低減することができる。１つの実施形態においては、Ｌ３キャッシュ構造がディレクトリを記憶するために利用されてよい。尚、高性能コンピューティング（ＨＰＣ）アプリケーションは典型的にはＬ３キャッシュに頼らない。従って、ディレクトリエントリを記憶するためにＬ３キャッシュの一部分を利用することは、性能に影響を及ぼすことはないであろう。
【００３８】
次いで図３を参照すると、メモリ制御器１２０の１つの実施形態のブロック図が示されている。図３の実施形態においては、メモリ制御器１２０は要求キュー１２２、コヒーレンシ制御回路１２４、及びメモリアクセス制御回路１２６を含む。
【００３９】
メモリ制御器１２０はパケット処理論理１１６から要求キュー１２２内への命令パケットを受け取る。命令によって影響を受けるアドレスがメモリ１３０内のメモリロケーションに対応する場合には、命令パケットはパケット処理論理１１６によってメモリ制御器１２０へ経路付けられてよい。換言すれば、命令パケットのアドレスがメモリ１３０内に記憶されているブロックをアドレス指定する場合には、その命令パケットはメモリ制御器１２０へ経路付けられる。メモリ制御器１２０は命令情報を要求キュー１２２内で並ばせ、次いで当該命令を処理する。コヒーレンシ制御回路１２４は、命令がコヒーレントなやり方で実行されることを確実にする。命令に対してプローブが要求される場合には、コヒーレンシ制御回路１２４はプローブ表示をパケット処理論理１１６へ送信する。例えばプローブ表示は、対応する命令、アドレス、命令の種類、及び他の情報からのソースノード及びソースタグを含んでいてよい。パケット処理論理１１６はプローブ表示に応答してプローブ命令を送信することができる。コヒーレンシ制御回路１２４は更に、対応するトランザクションが完了したことを示すパケットをパケット処理論理１１６から受け取ることができ、また書き込み命令に対するプローブ応答を受け取ることができる。メモリアクセス制御回路１２６はメモリ１３０とインタフェースしてコヒーレンシ制御回路１２４によって委ねられた命令を実行することができる（例えばコヒーレンシ動作が送信され且つ他のノードから受け取られるべき任意の応答が受け取られた後）。命令が読み出し動作である場合には、データは、応答パケット内でソースノードへ転送するために、メモリ１３０からパケット処理論理１１６へ戻されてよい。
【００４０】
コヒーレンシ制御回路１２４は加えて特定のデータブロックに対するディレクトリエントリを保持するように構成される。既に論じられたように、１つの実施形態においては、これらのディレクトリエントリは共有キャッシュメモリサブシステム１１８の指定されたロケーション内に記憶される。このために、コヒーレンシ制御回路１２４は共有キャッシュメモリサブシステム１１８に対するインタフェースを含んでいてよい。コヒーレンシ制御回路１２４は、命令の種類に基いて、またその命令によって特定されるアドレスに対するディレクトリエントリの存在に基いて、プローブがその命令に対して要求されているかどうかを決定することができる。ディレクトリエントリは、実装に応じて種々のコヒーレンシ情報を含んでいてよい。例えばディレクトリエントリは、所与のブロックのオーナ、ブロックが特定のモードにおいて修正されているかどうか、及び／又はブロックの共有コピーを有するノードの存在を表示することができる。種々の例示的なディレクトリエントリフォーマットに関する更なる詳細は後述する。
【００４１】
コンピュータシステム１００の１つの実施形態においては、プローブフィルタ内のディレクトエントリは、以下の状態、即ち排他的な修正された状態（ＥＭ）、所有されている状態（Ｏ）、１つのノード内のみで共有されている状態（Ｓ１）、２つ以上のノードにわたって共有されている状態（Ｓ）、又は無効にされた状態（Ｉ）のうちの１つを有しているであろうキャッシュブロックを追跡するために用いられる。Ｓ及びＳ１状態は共有され修正された状態である。これら２つの状態のいずれかを有するキャッシュラインの読み出し動作は、キャッシュラインの他のコピーを無効にするためのプローブ命令を必要としない。読み出し動作に対しては、無効化は要求されないであろう。しかし、Ｓ状態を有するキャッシュラインの書き込み動作は、他の処理ノードにおける他のコピーのブロードキャスト無効化を実行するためのプローブ命令を必要とするであろう。Ｓ１状態を有するキャッシュラインの書き込み動作は、同じ処理ノード内のキャッシュラインのコピーの指図された無効化を実行するためのプローブ命令を必要とするであろう。この実施形態はＭＯＥＳＩコヒーレンシプロトコルの１つの変形である。尚、プロセッサはブロックをプローブ命令なしに排他的な状態から修正された状態へ静かに移行させることができるので、ＥＭ状態を有するキャッシュブロックは、プロセッサ及び対応するキャッシュメモリサブシステムの外側からは区別がつかないであろう。
【００４２】
プローブフィルタ内におけるディレクトリエントリの存在は、対応するメモリブロックが、キャッシュされたコピーを有することを暗示している。ここで用いられるキャッシュブロック及びキャッシュラインの用語は、以下の種々の実施形態の説明に際して交換可能である。ディレクトリエントリの不在は、ブロックがキャッシュメモリサブシステム１１４内に記憶されていないことを暗示する。１つの実施形態においては、任意の処理ノードにおいてキャッシュ矛盾ミスが生じている場合には、影響を受けるキャッシュブロックに対する全ての処理ノード内の全ての対応するディレクトリエントリは更新されてよい。例えばＥＭ又はＯ状態を有する対応するディレクトリエントリは、キャッシュブロックに対応するメモリに再度コピーされたキャッシュブロックのデータを有していてよく、またディレクトリ状態フィールドはＩ状態に移行してよい。Ｓ１又はＳ状態を有する対応するディレクトリエントリは、メモリに再度コピーされたキャッシュブロックのデータを有していなくてよく、またディレクトリ状態フィールドはＩ状態に移行してよい。
【００４３】
ディレクトリエントリは種々の方法で共有キャッシュメモリ１１８内に記憶されてよい。例えば図４は、ディレクトリエントリが４ウエイキャッシュ構成を用いて記憶される記憶配置４００の１つの実施形態を示している。プローブフィルタはまた、４ウエイセットアソシアティブ(set associative)であってよいが、プローブフィルタディレクトリエントリはキャッシュライン又はキャッシュブロックよりも小さくてよい。例えば１つの実施形態では、各ディレクトリエントリ４６０は３２ビット（又は４バイト）を含んでいてよい。タグフィールド４６２は２２ビットを含んでいてよく、またタグフィールド４６２はディレクトリエントリをディレクトリセット４５０内の他の３エントリから区別するために用いることができる。ディレクトリ状態フィールド４６４は３ビットを含んでいてよく、またディレクトリ状態フィールド４６４は、ＥＭ、Ｏ、Ｓ１、Ｓ、又はＩのような対応するキャッシュブロックの状態を識別するために用いることができる。
【００４４】
１つの実施形態においては、オーナフィールド４６６は３ビットを含んでいてよく、またオーナフィールド４６６は、どの処理ノード１１０が対応するキャッシュブロックを記憶しまた場合によっては所有しているかを示すことができる。オーナフィールド４６６によって示される処理ノード１１０は、ＥＭ状態を有するキャッシュブロックの唯一のコピーを記憶することができる。代替的には、オーナフィールド４６６はＯ状態を有するキャッシュブロックのコピーを記憶している処理ノード１１０を示すことができ、一方、他のノード１１０はキャッシュメモリサブシステム１１４内の同一のキャッシュブロックのコピーを記憶することができる。３ビットのオーナフィールド４６６は８つのノードを支持するのに十分である。予備フィールド４６８は４ビットを含んでいてよく、また予備フィールド４６８は、退去(eviction)のための、最後に使用されてから最も長い時間が経過した(Least Recently Used)（ＬＲＵ）情報を示すために用いることができる。ＬＲＵ情報は、ディレクトリセット内のどのエントリが最も長い間参照されていないかを示すために用いることができ、またキャッシュ制御器によって採用されるキャッシュ交換アルゴリズムと併せて用いることができる。
【００４５】
４ウエイセットアソシアティブスキームにおいては、ディレクトリセット４５０は４つのディレクトリエントリ４６０を含む。所与のディレクトリセット４５０は、共有キャッシュメモリサブシステム１１８にアクセスするために用いられるアドレス４１０のディレクトリインデックス４１６部分によって、他のセットとの間で選択されてよい。ブロックタグ４３６及びディレクトリタグ４６２の両方が、キャッシュにアクセスするために用いられるアドレスの対応するタグ部分（例えばブロックタグ４１２及びディレクトリタグ４１４）に一致するときに、ディレクトリエントリ４６０ヒットが生じる。ディレクトリエントリの存在はブロックがキャッシュされていることを暗示する。ディレクトリエントリの不在はブロックがキャッシュされていないことを暗示する。
【００４６】
図示される実施形態では、４つのディレクトリセット４５０は各々４つのディレクトリエントリ４６０を含む。各ディレクトリエントリ４６０は４バイトからなる。プローブフィルタ以外には、ディレクトリエントリ４３８部分が、４ウエイセットアソシアティブキャッシュ４３０内のキャッシュラインのデータ部分であって、共有キャッシュメモリサブシステム１１８の１つの実施形態であり得る。キャッシュラインのデータ部分、即ちディレクトリエントリ部分４３８は、６４バイト（４バイト×４ディレクトリエントリ×４ディレクトリセット）を記憶する。４ウエイのキャッシュ４３０の各々はまた、有効ビット及びキャッシュラインの他の状態情報を備えていてよい状態情報４３４と、選択されたキャッシュセット４３２内で４キャッシュラインのうちのどのキャッシュラインがアクセスされているかを決定するために用いられるブロックタグ４３６とを有している。また、アドレス４１０のオフセット４２０が、キャッシュライン内の特定のバイト又はワードを示すために用いられてよい。ディレクトリエントリ４６０に対しては、オフセット４２０は用いられなくてよい。尚、ディレクトリエントリはメモリブロックの多重化キャッシュコピーによって共有されてよく、それによりプローブフィルタの補償率(coverage ratio)が高まる。
【００４７】
キャッシュセット４３２はアドレス４１０のブロックインデックス４１８によって選択される。ディレクトリタグ４６２はディレクトリエントリ４６０の他の構成部分と共に連続したビット内に記憶されてよいが、１つの実施形態においては、ブロック状態４３４及びブロックタグ４３６は、ディレクトリエントリ４３８のような同一のアレイ内よりはむしろ別のアレイ内に記憶されてよい。
【００４８】
次に図５Ａを参照すると、単一プローブ命令を必要とする例示的な一連の動作を示すプローブフィルタリングコンピュータシステム５００の１つの実施形態のブロック図が示されている。図１の回路部分に対応する回路部分には同一の符号が付されている。１つの実施形態においては、システム５００は４つのノード１１０を備えているが、代替的な実施形態は異なる数のノードを備えていてよい。ディレクトリ０〜３は、処理ノード１１０内のＬ３キャッシュのような共有キャッシュメモリサブシステム１１８内に記憶されていてよいディレクトリエントリを示す。システム５００内のキャッシュに記憶される各メモリラインは、対応するディレクトリエントリを有している。例えば、システム５００内のキャッシュに記憶されているメモリ１３０ａ内のデータの各ブロックは、ディレクトリ０(Dir_0)内の対応するディレクトリエントリを有している。システム５００内のキャッシュに記憶されているメモリ１３０ｂ内のデータの各ブロックは、ディレクトリ１(Dir_1)内の対応するディレクトリエントリを有しており、以下同様である。
【００４９】
１つの実施形態においては、システム５００内のキャッシュブロックに対する５つの状態は、無効にされている（Ｉ）、所有されている（Ｏ）、２つ以上のノード内で共有されている（Ｓ）、１つのノード内のみで共有されている（Ｓ１）、及び排他的な修正されている（ＥＭ）であってよい。一般的には、後続のプローブ命令を必要とするであろう要求動作には３種類あってよい。これらの要求動作はフェッチ、ロード、及びストアであってよい。フェッチ要求はキャッシュラインのリードオンリコピーを得るために利用することができる。１つの実施形態では、命令キャッシュ（ｉキャッシュ）がフェッチ要求を送ることができる。フェッチ要求を送るキャッシュは、キャッシュラインの最新のコピーをずっと記憶しているために頼られなくてよい。また、このキャッシュはキャッシュラインを修正する許可を得なくてよい。ロード要求は読み出し動作であり、またストア要求は書き込み動作である。
【００５０】
一般的に、要求を発行している処理ノード１１０は「要求中」ノードと称されることがある。処理ノード１１０は、当該処理ノードに結合されるメモリ１３０に要求のメモリアドレスがマッピングされている場合に「ホーム」ノードと称されてよい。処理ノードは、当該処理ノード内のキャッシュがメモリブロックの最新のコピーをその時点で記憶している場合に「オーナ」ノードと称されてよい。例えばノード１１０ｄは、メモリ１３０ａをマッピングしているアドレスを有するメモリのブロックのロード要求を発行することができる。しかし、ノード１１０ｂ内のキャッシュは、データのブロックの最新のコピーを記憶することができる。この例では、ノード１１０ｄは「要求中」ノードであり、ノード１１０ａは「ホーム」ノードであり、そしてノード１１０ｂは「オーナ」ノードである。
【００５１】
図５Ａにおける一連の動作は、「要求中」ノードであるノード１１０ｄから、メモリ１３０ａをマッピングしているアドレスを有するデータのブロックへのストア要求を含む。この場合、ノード１１０ａは「ホーム」ノードである。ステップ１〜２では、ストア要求がノード１１０ｄからノード１１０ｃを介してノード１１０ａへ経路付けられる。ノード１１０ｃを介した要求の経路付けが例示されており、またノード１１０ｂを介した要求の経路付けのような他の経路付けの代替案が利用されてもよい。ステップ３〜４は、ノード１１０ａによって（例えば図３における対応するコヒーレンシ制御回路１２４によって）実行されるディレクトリルックアップを含む。ルックアップは、要求されたメモリブロックに対して、ディレクトリエントリが共有キャッシュメモリサブシステム１１８又はディレクトリ０内に存在するかどうかを決定する。後続のディレクトリヒットは、共有キャッシュメモリサブシステムの対応するエントリ内で生じる。そのディレクトリエントリは、ブロックが「オーナ」ノードである処理ノード１１０ｂ内のＥＭ状態にあることを示す。ステップ５では、処理ノード１１０ａのコヒーレンシ制御回路１２４が従って、プローブ命令を処理ノード１１０ｂへ転送する。このプローブ命令は、ステップ６において処理ノード１１０ｄへデータを転送させることをノード１１０ｂにさせる。また、このプローブ命令は、ノード１１０ｂ内の対応するキャッシュラインを無効にする（ＤＩ）ように指示されてよい。
【００５２】
データはＥＭ状態にあるノード１１０内のキャッシュ内にインストールされてよい。ストア動作が開始すると共に対応するキャッシュブロック内のデータを修正してよい。「ホーム」ノードであるノード１１０ａのコヒーレンシ制御回路１２４は、ブロックに対する対応するディレクトリエントリを更新して、キャッシュブロックの最新のコピーがその時点でＥＭ状態のノード１１０ｄ内にあることを示してよい。この場合、ディレクトリ０内のディレクトリ状態フィールド４６４はＥＭ状態を示し続けてよいが、オーナフィールド４６６はノード１１０ｂの表示からノード１１０ｄの表示へ変化させられてよい。尚、この例では、ＥＭ状態にあるキャッシュブロックに対してディレクトリヒットはノード１１０ａ内で生じるので、処理ノード１１０ａは、システム５００内の全てのノードへ多重化プローブをブロードキャストすることを要求されたよりはむしろ、１つのノード（例えばノード１１０ｂ）に対して単一指向のプローブを送信することのみを要求されたことになる。処理ノード１１０ｄがデータを受け取った場合、ソース完了メッセージが処理ノード１１０ｄから例えば処理ノード１１０ｃを介して処理ノード１１０ａへ送信されてよい。これによりトランザクションが完了する。
【００５３】
図５Ａに対して説明した上述のステップは、要求されたキャッシュブロックがディレクトリ０内でＳ１状態を有していたとしても同じであってよい。しかし、ディレクトリ０内の更新は、ディレクトリ状態フィールド４６４がＳ１状態の表示からＥＭ状態の表示へ変化することを要求するであろう一方、対応するオーナフィールド４６６は更にノード１１０ｂの表示からノード１１０ｄの表示へ変化する。このことは、特定の場合に（この場合のように）、要求元に提供するために生成されるべきＤＲＡＭ応答に対しても必要とされるであろう。この点が上述の、所有しているノード(owning node)はデータと共に応答することが保証されていた（ＭＥ状態に起因して）ことによりＤＲＡＭ応答が必要とされなかったのと対照的である。このことは全てディレクトリ（プローブフィルタ）状態に基いて知ることができる。
【００５４】
図５Ｂは同様の例を示しており、その例においては、「要求中」ノードである処理ノード１１０ｄが、メモリ１３０ａをマッピングしているアドレスを有するメモリのブロックへのストア要求を発行する。ノード１１０ａは「ホーム」ノードである。この例では、対応するメモリブロックは、システム５００内のキャッシュ内においてＩ状態にある。ステップ１〜２では、ストア要求がノード１１０ｄからノード１１０ｃを介してノード１１０ａへ経路付けられる。ステップ３〜４は、ノード１１０ａ内の対応するコヒーレンシ制御回路１２４によって実行されるディレクトリルックアップを含む。ルックアップは、要求されたメモリブロックに対して、ディレクトリエントリが共有キャッシュメモリサブシステム１１８又はディレクトリ０内に存在するかどうかを決定する。後続のディレクトリヒットは、ディレクトリ０内の対応するエントリ内で生じる。対応するディレクトリ状態フィールド４６４はブロックがＩ状態にあることを示してよい。
【００５５】
ステップ５〜８では、ノード１１０ａは要求されたデータをメモリ１３０ａから回収すると共に、処理ノード１１０ｃを介してそのデータを処理ノード１１０ｄへ供給する。データはＥＭ状態にあるノード１１０ｄ内のキャッシュ内にインストールされてよい。ストア動作が開始すると共に対応するキャッシュブロック内のデータを修正してよい。「ホーム」ノードであるノード１１０ａのコヒーレンシ制御回路１２４は、ブロックに対する対応するディレクトリエントリを更新して、キャッシュブロックの最新のコピーがその時点でＥＭ状態のノード１１０ｄ内にあることを示してよい。この場合、ディレクトリ０内の対応するディレクトリ状態フィールド４６４は、Ｉ状態の表示からＥＭ状態の表示へ変化してよい。オーナフィールド４６６はノード１１０ｄを示すように変化させられてよい。
【００５６】
尚、この例では、Ｉ状態にあるキャッシュブロックに対してディレクトリヒットはノード１１０ａ内で生じるので、処理ノード１１０ａは、任意のプローブをシステム５００内の任意のノードへ送信することは要求されなかったことになる。このことはまた表１に示されており、対応するＩ状態でのエントリへのディレクトリヒットの後には、いずれのノードへ送られるプローブもない。送られるプローブ命令がないことによる同じ影響が、ディレクトリミスからも同様にもたらされる。全てのプローブは、メモリアクセス要求の種類にかかわらず、この種のディレクトリヒットの間にフィルタリングされる。その結果、ネットワークトラフィックを大幅に低減することができる。処理ノード１１０ｄがデータを受け取った場合、ソース完了メッセージが処理ノード１１０ｄから例えば処理ノード１１０ｃを介して処理ノード１１０ａへ送信されてよい。これによりトランザクションが完了する。
【００５７】
図５Ｃは、「要求中」ノードである処理ノード１１０ｄが、メモリ１３０ａをマッピングしているアドレスを有するメモリのブロックへのロード要求を発行する例を示している。ノード１１０ａは「ホーム」ノードである。この場合、メモリブロックはシステム５００内のいずれのキャッシュにも記憶されていない。ステップ１〜２では、ロード要求がノード１１０ｄからノード１１０ｃを介してノード１１０ａへ経路付けられる。ステップ３〜４は、ノード１１０ａ内の対応するコヒーレンシ制御回路１２４によって実行されるディレクトリ０のディレクトリルックアップを含む。ルックアップは、要求されたメモリブロックのためのディレクトリエントリが、要求されたメモリブロックに対する共有キャッシュメモリサブシステム１１８又はディレクトリ０内に存在するかどうかを決定する。後続のディレクトリミスが生じる。ディレクトリエントリは存在しないので、メモリブロックはシステム５００内のキャッシュ内に記憶されない。
【００５８】
ステップ５〜９では、ノード１１０ａは要求されたデータをメモリ１３０ａから回収すると共に、処理ノード１１０ｃを介してそのデータを処理ノード１１０ｄへ供給する。データはＥＭ状態にあるノード１１０ｄ内のキャッシュ内にインストールされてよい。ロード動作が開始すると共に対応するキャッシュブロックからデータを読み出してよい。「ホーム」ノードであるノード１１０ａのコヒーレンシ制御回路１２４は、ブロックに対する新たな対応するディレクトリエントリを入力して、キャッシュブロックの最新のコピーがその時点でＥＭ状態のノード１１０ｄ内にあることを示してよい。新たな対応するディレクトリエントリがディレクトリ０内へ入力されているとき、矛盾ミス(conflict miss)が生じて異なるディレクトリエントリは退去させられる必要があるかもしれない。退去に関する詳細は後で更に論じられる。新たなディレクトリエントリに対するディレクトリ０内の対応するディレクトリ状態フィールド４６４はＥＭ状態を示してよい。オーナフィールド４６６はノード１１０ｄを示してよい。
【００５９】
尚、要求されたキャッシュブロックに対してノード１１０ａ内でディレクトリミスが生じたので、処理ノード１１０ａは、任意のプローブをシステム５００内の任意のノードへ送信することは要求されなかったことになる。処理ノード１１０ｄがデータを受け取った場合、ソース完了メッセージが処理ノード１１０ｄから例えば処理ノード１１０ｃを介して処理ノード１１０ａへ送信されてよい。これによりトランザクションが完了する。しかし、その後にステップ１０において、ノード１１０ｄ内のプロセッサはこのキャッシュブロックを修正するかもしれない。尚、プローブは送られなくてよい。ディレクトリ０内の対応するディレクトリエントリは、このキャッシュブロックがＥＭ状態であることを継続して示していてよい。
【００６０】
ステップ１１では、同じメモリブロックに対するロード要求がノード１１０ｂからノード１１０ａへ経路付けられてよい。ステップ１２〜１３は、ノード１１０ａ内の対応するコヒーレンシ制御回路１２４によって実行されるディレクトリ０のディレクトリルックアップを含む。ルックアップは、要求されたメモリブロックのためのディレクトリエントリが、要求されたメモリブロックに対する共有キャッシュメモリサブシステム１１８又はディレクトリ０内に存在するかどうかを決定する。後続のディレクトリヒットは、共有キャッシュメモリサブシステムの対応するエントリ内で生じる。そのディレクトリエントリは、「オーナ」ノードである処理ユニット１１０ｄ内でブロックがＥＭ状態にあることを示す。ステップ１４〜１５では、従って処理ノード１１０ａのコヒーレンシ制御回路１２４が、単一指向プローブ命令（Ｄ）を処理ノード１１０ｄへ転送する。このプローブ命令により、ステップ１６においてノード１１０ｄが、要求されたデータを処理ノード１１０ｂへ転送する。尚、ノード１１０ａは、プローブのブロードキャストをシステム５００内の全てのノードへ送る必要はない。
【００６１】
ステップ１７では、データはＳ状態にあるノード１１０ｂ内のキャッシュ内にインストールされてよい。ロード動作が開始すると共に対応するキャッシュブロック内のデータを読み出してよい。「ホーム」ノードであるノード１１０ａのコヒーレンシ制御回路１２４は、ブロックに対する対応するディレクトリエントリを更新して、キャッシュブロックの最新のコピーがまだノード１１０ｄ内にあるがその時点ではＯ状態であることを示してよい。この場合、ディレクトリ０内の対応するディレクトリ状態フィールド４６４は、ＥＭ状態の表示からＯ状態の表示へ変化させられてよい。オーナフィールド４６６はノード１１０ｄを示し続けてよい。また、処理ノード１１０ｂがデータを受け取った場合、ソース完了メッセージが処理ノード１１０ｂから処理ノード１１０ａへ送信されてよい。これによりトランザクションが完了する。
【００６２】
尚、システム５００内で送られるプローブの数は減らされてよい。考察のため、図５Ａ〜５Ｃに示される実施形態におけるステップはその順序で生じてよい。しかし、幾つかのステップは、図示されたのとは異なる順で生じてよく、幾つかのステップは同時に実行されてよく、幾つかのステップは他のステップと組み合わされてよく、そして幾つかのステップは他の実施形態ではなくてよい。
【００６３】
処理ノードによって開始される他のトランザクションに応答して、種々の他の特定のコヒーレンシ動作が起動されてよい。上述した例と同様に、プローブ命令及びネットワーク応答トラフィックは、アクセスされているブロックに対するディレクトリエントリの存在に基いて、及び／又はディレクトリエントリ内で示されるブロックの状態に基いてフィルタリングされてよい。また、メモリアクセス待ち時間は、プローブ命令及びネットワーク応答トラフィックの減少に起因して低減され得る。トランザクションの種類、ディレクトリエントリの存在、及びディレクトリエントリ内のブロックの状態に応じて種々の他の特定のコヒーレンシ動作が必要に応じて同様に実行されてよい。
【００６４】
多くの他のディレクトリエントリフォーマットが他の実施形態において可能である。ディレクトリエントリの特定のフォーマットは、特に、維持されている状態情報の量、システムの拡張可能性、及びディレクトリ記憶装置の経費に基いているであろう。
【００６５】
下の表１は「オーナ」処理ノード内のディレクトリにおけるプローブフィルタヒットに対するトランザクションシナリオを表している。トランザクションシナリオは、最上行のキャッシュブロック状態と左端列のメモリアクセス要求の組み合わせによって示されている。１つの実施形態では、無効にされている（Ｉ）、所有されている（Ｏ）、２つ以上のノード内で共有されている（Ｓ）、１つのノード内のみで共有されている（Ｓ１）、及び排他的な修正されている（ＥＭ）のような５つの状態がキャッシュブロックに対してあってよい。１つの実施形態においては、メモリアクセス要求の例はフェッチ、ロード、ストア、及びチェンジツーダーティ(Change-to-Dirty)（ＣｔｏＤ）を含んでいてよい。これらの要求の更なる詳細は以下に簡潔に与えられる。これら４つの要求は例示を目的として示されている。他の実施形態は、異なる数の要求を有していてよく、そして図示されているのと同一の要求の１つ若しくは複数を含んでいてよく又は含まなくてよい。
【００６６】
キャッシュライン状態及び要求動作の各組み合わせに対するプローブ命令に関して、「ホーム」ノードのような処理ノードによってとられる見込みのある動作が表１の項目に示されている。プローブ命令はフィルタリング（−）であってよく、この場合プローブは送られない。「要求中」ノードのような他のノードへキャッシュラインのコピーを転送し、またキャッシュラインの状態を無効（Ｉ）以外の状態に変化させるために、プローブ命令は「オーナ」ノードのような特定のノードに指向されて（Ｄ）いてよい。プローブ命令は特定のノード内のキャッシュラインを無効にする（ＤＩ）よう指向されてよい。最後にプローブ命令は、キャッシュラインの多重化コピーを無効にするための全てのノードへのブロードキャスト（Ｂ）であってよい。
【表１】
0005679969.tif 000002
【００６７】
フェッチ要求はキャッシュラインのリードオンリコピーを得るために利用することができる。１つの実施形態では、命令キャッシュ（ｉキャッシュ）がフェッチ要求を送ることができる。フェッチ要求を送るキャッシュは、キャッシュラインの最新のコピーをずっと有しているために頼られなくてよい。また、このキャッシュはキャッシュラインを修正する許可を得なくてよい。ロード要求は読み出し動作であり、またストア要求は書き込み動作である。ＣｔｏＤ要求は、ノード内のプロセッサが書き込み許可を必要としているが、対応するＳ状態又はＯ状態を有していてよいブロックの有効なコピーをすでに有している場合に生成される。対照的にストア要求は、要求中プロセッサがキャッシュブロックの有効なコピーをすでに有していない場合に生成される。ＣｔｏＤ要求では、応答はＤＲＡＭのようなシステムメモリからのデータを返さない。表１に示される状態、動作要求、及び動作の説明が以下に提供される。１つの実施形態では、プローブフィルタは処理ノード１１０内のキャッシュ４３０内に記憶されていてよい。１つの実施形態においては、Ｌ３キャッシュであってよい共有キャッシュメモリサブシステム１１８は、プローブフィルタディレクトリを記憶するように選択されたキャッシュであってよい。表１においてとられる動作を強調するための例が、図５Ａ〜図５Ｃを参照して以下に提供される。
【００６８】
１つの実施形態の例として図５Ａを取り上げると、各処理ノード１１０はプローブフィルタディレクトリを含んでいてよい。プローブフィルタディレクトリは対応するメモリ１３０からのブロックの状態を記憶することができ、この場合、ブロックのアドレスはノードの対応するメモリ１３０をマッピングしており、またブロックはその時点ではコンピュータシステム１００内の任意の処理ノード１１０におけるキャッシュ内に存在している。表１はキャッシュブロックに対して取られる動作を表しており、その対応するアドレスは「ホーム」ノードをマッピングしている。メモリブロックのコピーが「オーナ」ノードとして指定された他のノード内のキャッシュ内にある場合には、この情報は「ホーム」ノード内のプローブフィルタディレクトリ内に記憶される。従って、「ホーム」ノードはオーナフィールド４６６のようなプローブフィルタディレクトリ内に記憶される表示を有しており、表示における他のノードは、対応するキャッシュブロックの「オーナ」ノードであってよく、また「オーナ」ノード内のキャッシュブロックの状態の、状態フィールド４６４のようなプローブフィルタディレクトリ内に記憶される表示であってよい。全ての要求に対して、「ホーム」ノードのプローブフィルタ内に記憶される、Ｉ状態を有する対応するキャッシュラインは、表１に示されるように、プローブ命令を要求しない。要求されたキャッシュブロックのデータは、対応するメモリ１３０からロードされ、そして「要求中」ノードへ送られる。プローブは不要である。
【００６９】
「要求中」ノードはフェッチ又はロード要求を「ホーム」ノードへ送ることができる。後続のプローブフィルタヒットが「ホーム」ノードのディレクトリ内にあってよい。対応するディレクトリエントリは、要求されたキャッシュブロックが「オーナ」ノードのような他のノード内にあることを示してよい。１つの実施形態においては、「オーナ」ノード内のキャッシュブロックのコピーの状態はＯであってよい。表１は、「要求中」ノードからのフェッチ又はロード要求が「ホーム」ノードのディレクトリ内に後続のプローブフィルタヒットを有しており且つ「オーナ」ノード内のキャッシュラインがＯ状態を有している場合に、指向されたプローブ（Ｄ）が必要であることを示している。要求されたデータを「オーナ」ノードが「要求中」ノードへ転送するために、「ホーム」ノードは、指向されたプローブ命令（Ｄ）を「オーナ」ノードへ送る必要があるかもしれない。指向されたプローブ命令が唯一のプローブである。ブロードキャストプローブ命令は必要とされない。キャッシュラインの他のコピーが「オーナ」ノード内及び他のノード内に存在していてよいが、最新のコピーは「ホーム」ノードのプローブフィルタ内の対応するコピーである。
【００７０】
同様に、「オーナ」ノード内のキャッシュブロックのコピーの状態はＥＭであってよい。表１は、「要求中」ノードからのフェッチ又はロード要求が「ホーム」ノードのディレクトリ内に後続のプローブフィルタヒットを有しており且つ「オーナ」ノード内のキャッシュラインがＥＭ状態を有している場合に、指向されたプローブ（Ｄ）が必要であることを示している。要求されたデータを「オーナ」ノードが「要求中」ノードへ転送するために、「ホーム」ノードは、指向されたプローブ命令（Ｄ）を「オーナ」ノードへ送る必要があるかもしれない。指向されたプローブ命令が唯一のプローブである。
【００７１】
図５Ａを参照すると、１つの実施形態においては、メモリ１３０ａ内のメモリブロックは、ノード１１０ｄのような「オーナ」ノード内のキャッシュ内に記憶されているそのデータのコピーを有していてよく、また「オーナ」ノード内のキャッシュラインは上述の例ではＯ状態又はＥＭ状態を有していてよい。この実施形態及び当該シナリオにおいては、「ホーム」ノードのプローブフィルタ内に記憶されているようなキャッシュブロックがＳ又はＳ１状態を有することは不可能であるかもしれない。例えば、メモリ１３０ａ内のキャッシュされていないメモリブロックのフェッチ又はロードのような読み出し要求をノード１１０ｄが実行する場合、メモリブロックはまだキャッシュされていないから、読み出し要求がノード１１０ｄからノード１１０ａへ送られた後にディレクトリ０内でプローブフィルタミスが生じることになる。メモリブロックは、ノード１１０ａによってメモリ１３０ａから読み出されてよく、そしてノード１１０ｄへ送られてよい。キャッシュブロックはノード１１０ｄ内にＥＭ状態で記憶される。また、ディレクトリエントリ４６０のようなディレクトリ０内のディレクトリエントリは、このキャッシュブロックのために更新されてよい。キャッシュ矛盾ミスがディレクトリセット４５０内で生じる可能性があり、従って個々のディレクトリエントリは退避させられる必要がある。このシナリオに関する更なる詳細が以下に提供される。
【００７２】
続いて、同じメモリブロックのフェッチ又はロードのような読み出し要求をノード１１０ｂが実行する場合、メモリブロックはノード１１０ｄ内に既にキャッシュされているから、ディレクトリ０内にプローブフィルタヒットが生じることになる。要求されたキャッシュラインのデータのコピーをノード１１０ｂに提供するようにノード１１０ｄに命令する単一指向性のプローブ命令（Ｄ）が、ノード１１０ａからノード１１０ｄへ送られてよい。このデータはノード１１０ｂ内にＳ状態で記憶されてよい。このキャッシュラインに対するディレクトリ０内の対応する情報は、オーナがまだノード１１０ｄであり且つ状態がＥＭからＯに変化させられることを示すために更新されてよい。単一指向性のプローブ命令（Ｄ）は、表１内の表項目フェッチ−ＥＭ及びロード−ＥＭに示されている。
【００７３】
「要求中」ノードはストア要求を「ホーム」ノードへ送ることができる。後続のプローブフィルタヒットが「ホーム」ノードのディレクトリ内にあってよい。対応するディレクトリエントリは、要求されたキャッシュブロックが「オーナ」ノードのような他のノード内にあることを示してよい。１つの実施形態においては、「オーナ」ノード内のキャッシュブロックのコピーの状態はＯ又はＳであってよい。この場合、キャッシュブロックの他のコピーが他の処理ノード内に存在していてよい。要求されたデータを「オーナ」ノードが「要求中」ノードへ転送するために、「ホーム」ノードは、指向されたプローブ命令を「オーナ」ノードへ送る必要があるかもしれない。続いて、「要求中」ノードが新たな「オーナ」ノードになり、そしてキャッシュブロックはその状態をＯ又はＳからＥＭに変化させられる。また、要求されたキャッシュブロックのいかなる他のコピーをも無効にするために、ブロードキャストプローブ命令（Ｂ）が全ての処理ノードへ送られる。キャッシュブロックの他のコピーを無効にするためのブロードキャストプローブ命令（Ｂ）は、表１内の表項目ストア−Ｏ及びストア−Ｓに示されている。
【００７４】
同様に、「オーナ」ノード内のキャッシュブロックのコピーの状態がＳ１又はＥＭである場合には、「オーナ」ノード以外の他の処理ノード内にはキャッシュブロックの他のコピーは存在しない。要求されたデータを「オーナ」ノードが「要求中」ノードへ転送するために、「ホーム」ノードは、指向されたプローブ命令を「オーナ」ノードへ送る必要があるかもしれない。続いて、「要求中」ノードが新たな「オーナ」ノードになり、そしてキャッシュブロックはその状態をＳ１からＥＭに変化させられる。対応する状態が既にＥＭである場合には、状態は変化しない。また、要求されたキャッシュブロックのコピーを「オーナ」ノード内で無効にするために、無効にするための単一指向性のプローブ命令（ＤＩ）が「ホーム」ノードから「オーナ」ノードへ送られる。無効にするための単一指向性のプローブ命令（ＤＩ）は、表１内の表項目ストア−Ｓ１及びストア−ＥＭに示されている。
【００７５】
下の表２は「ホーム」処理ノード内のディレクトリエントリのプローブフィルタ退避に対するトランザクションのシナリオを表している。表２における状態、動作要求、及び動作は、表１に対するのと同一の定義を有している。
【表２】
0005679969.tif 000003
【００７６】
上で論じられるように、ディレクトリエントリ４６０内の予備フィールド４６８は、ＬＲＵ情報を含んでいてよい。ＬＲＵ情報は、ディレクトリセット４５０内のどのディレクトリエントリ４６０が最も長い間参照されていないかを示すために用いることができる。ＬＲＵ情報は、キャッシュ制御器によって採用されるキャッシュ交換アルゴリズムと併せて用いることができる。１つの実施形態においては、ディレクトリ状態フィールド４６４がキャッシュ交換アルゴリズム内で用いられてよい。例えば、ディレクトリエントリ４６０がＩ状態を有している場合、この情報がキャッシュ置換アルゴリズム内で用いられてよく、無効にされたディレクトリエントリを他の状態のエントリの前に確実に退去させることができる。また、そのアルゴリズムは、有効ディレクトリ状態の１つの群に有効ディレクトリ状態の第２の群よりも高い退避に対する優先度を与えてよい。例えば、ＥＭ又はＳ１ディレクトリ状態を有するディレクトリエントリは、対応するデータをキャッシュしている可能性のあるノードの数に起因して、Ｏ又はＳ状態を有するディレクトリエントリよりも退避に対する高い優先度を有していてよい。
【００７７】
図５Ａにおけるノード１１０ｄのような「要求中」ノードは、ノード１１０ａのような「ホーム」ノードに要求（例えばフェッチ、ロード、又はストア）を送ることができる。対応するデータがコンピュータシステム１００内のどのキャッシュにも記憶されていない場合、後続のプローブフィルタミスが「ホーム」ノードのディレクトリ内で生じることがある。要求されたデータは、ノード１１０ａによってメモリ１３０ａから読み出されてよく、そしてノード１１０ｄへ転送されてよい。対応するキャッシュブロックは、「要求中」ノード内のキャッシュ内にＥＭ状態で記憶されてよい。また、「ホーム」ノードのディレクトリ０内のディレクトリエントリ４６０のようなディレクトリエントリは、このキャッシュブロックのために更新されてよい。この更新の間、ディレクトリ矛盾ミスがディレクトリセット４５０内で生じ、従って既存のディレクトリエントリは退去させられる必要がある可能性がある。
【００７８】
「要求中」ノードから「ホーム」ノードへの全ての要求（例えばフェッチ、ロード、ストア、ＣｔｏＤ、等）に対して、「ホーム」ノードのプローブフィルタ内に記憶されＩ状態を有する退去させられるべく選択されたディレクトリエントリは、「ホーム」ノードから送られるべきいかなるプローブをも要求しなくてよい。Ｉ状態を有する退去させられるディレクトリエントリに対するプローブのフィルタリング（−）は、表２の第１列に示されている。この退去の場合に対していかなるプローブをも送らない能力は、ネットワークトラフィックを低減することができる。
【００７９】
退去させられるべく選択されるディレクトリエントリがＯ状態又はＳ状態を有している場合には、対応するキャッシュブロックのいかなる他のコピーをも無効にするために、ブロードキャストプローブ命令（Ｂ）が「ホーム」ノードから全ての他の処理ノードへ送られる。Ｏ状態を有するキャッシュブロックに対するデータは、その対応する処理ノード内の対応するメモリに書き込み戻されてよい。Ｏ状態又はＳ状態を有する退避させられるディレクトリエントリに対応するキャッシュブロックのコピーを無効にするためのブロードキャストプローブ命令（Ｂ）は表２に示されている。
【００８０】
同様に、退去させられるべく選択されるディレクトリエントリがＳ１状態又はＥＭ状態を有している場合には、「オーナ」ノード内の要求されたキャッシュブロックのコピーを無効にするために、無効にするための単一指向のプローブ命令（ＤＩ）が「ホーム」ノードから「オーナ」ノードへ送られる。ＥＭ状態を有するキャッシュブロックに対するデータは、その対応する処理ノード内の対応するメモリに書き込み戻されてよく、この場合、対応する処理ノードは「ホーム」ノードである。Ｓ１状態又はＥＭ状態を有する退避させられるディレクトリエントリに対応するキャッシュブロックのコピーを無効にするための単一指向のプローブ命令（ＤＩ）は表２に示されている。
【００８１】
上述の実施形態は相当詳細に説明されてきたが、上述の開示が完全に理解されたならば、多くの変形及び修正が当業者にとって明らかであろう。以下の特許請求の範囲は、そのような変形及び修正の全てに及ぶように解釈されることが意図されている。
【産業上の利用可能性】
【００８２】
概してこの発明は高性能なコンピュータネットワークシステムに適用可能である。
【図１】
0005679969.tif 000004
【図２】
0005679969.tif 000005
【図３】
0005679969.tif 000006
【図４】
0005679969.tif 000007
【図５Ａ】
0005679969.tif 000008
【図５Ｂ】
0005679969.tif 000009
【図５Ｃ】
0005679969.tif 000010