(57)【要約】【課題】マルチプロセッサ、マルチクラスタシステムにおけるデータアクセスの効率を増す方法および装置を提供する。【解決手段】さまざまなトランザクションをローカルに完了させることができるメカニズムは、システム中のさまざまなクラスタに関連付けられたリモートデータキャッシュを提供することによって実現される。このリモートデータキャッシュは、リモートクラスタにおいて保持されるメモリラインについてのデータおよび状態情報を受け取る。状態情報は、コヒーレンスディレクトリおよび拡張されたソース完了メッセージを含むさまざまなメカニズムを用いてリモートデータキャッシュに提供される。【選択図】図１０
2007501479.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
第１複数ノードおよびキャッシュコヒーレンスコントローラを含むリクエストクラスタであって、前記第１複数ノードは、第１複数プロセッサおよび前記第１複数プロセッサに関連付けられた第１複数キャッシュを有し、前記リクエストキャッシュコヒーレンスコントローラはリモートデータキャッシュに関連付けられ、前記リモートデータキャッシュは、非リクエストクラスタのメモリライン中にデータを保持する、リクエストクラスタ、
第２複数プロセッサおよびリクエストキャッシュコヒーレンスコントローラを含むホームクラスタであって、前記第２複数プロセッサはポイントツーポイントアーキテクチャで相互接続されるホームクラスタ
を備えるコンピュータシステム。
【請求項２】
請求項１に記載のコンピュータシステムであって、非リクエストクラスタは、前記ホームクラスタおよび１つ以上のリモートクラスタを備えるコンピュータシステム。
【請求項３】
請求項１に記載のコンピュータシステムであって、前記リモートデータキャッシュは、メモリラインがデータを保持し、前記第１複数キャッシュから追い出されるときに、非リクエストクラスタに関連付けられたメモリラインをキャッシュするのに用いられるコンピュータシステム。
【請求項４】
請求項１に記載のコンピュータシステムであって、キャッシュラインがダーティデータを保持し、前記第１複数キャッシュから追い出されるときに、ライトバックが発生されるコンピュータシステム。
【請求項５】
請求項４に記載のコンピュータシステムであって、前記ラインが変更または所有状態で保持されるとき、データがダーティであるコンピュータシステム。
【請求項６】
請求項４に記載のコンピュータシステムであって、メモリラインを追い出すことは、データをメモリにライトバックすることを含むコンピュータシステム。
【請求項７】
請求項１に記載のコンピュータシステムであって、複数のリモートデータキャッシュが、前記コンピュータシステム中の複数のキャッシュコヒーレンスコントローラに関連付けられるコンピュータシステム。
【請求項８】
請求項１に記載のコンピュータシステムであって、データが前記リモートデータキャッシュ中に変更、排他、所有、共有、および無効の状態で保持されえるコンピュータシステム。
【請求項９】
請求項８に記載のコンピュータシステムであって、データはさらに、ペンディングの状態で保持されえるコンピュータシステム。
【請求項１０】
請求項９に記載のコンピュータシステムであって、データは、前記キャッシュコヒーレンスコントローラがライトバックを前記第１複数プロセッサのうちの１つから受け取った後に、ペンディング状態で前記リモートデータキャッシュに書き込まれるコンピュータシステム。
【請求項１１】
請求項９に記載のコンピュータシステムであって、データは、ソース完了が前記第１複数プロセッサのうちの１つから受け取られた後に、もし前記ソース完了が前記ラインが無効化されたことを示すなら、無効状態で前記リモートデータキャッシュに書き込まれるコンピュータシステム。
【請求項１２】
請求項９に記載のコンピュータシステムであって、データは、ソース完了が前記第１複数プロセッサのうちの１つから受け取られた後に、もし前記ソース完了が前記ラインが無効化されていないことを示すなら、前記変更、排他、所有、または共有状態で前記リモートデータキャッシュに書き込まれるコンピュータシステム。
【請求項１３】
請求項１に記載のコンピュータシステムであって、前記リクエストキャッシュコヒーレンスコントローラは、前記メモリラインが前記共有または所有状態で保持されたかを示す情報を前記ホームクラスタから受け取るコンピュータシステム。
【請求項１４】
請求項１に記載のコンピュータシステムであって、データは、前記ホームクラスタがリードブロックリクエストに応答した後に、共有状態で前記リモートデータキャッシュに書き込まれるコンピュータシステム。
【請求項１５】
コヒーレンシを維持する方法であって、前記方法は、
リクエストキャッシュコヒーレンスコントローラにおいてリクエストクラスタプロセッサからライトバックを受け取ることであって、前記ライトバックは、前記リクエストクラスタプロセッサに対応するキャッシュから追い出されたメモリラインに関連付けられる、ライトバックを受け取ること、
前記メモリラインに関連付けられたデータをリモートデータキャッシュに書き込むことであって、前記リモートデータキャッシュは、非リクエストクラスタのアドレス空間中のメモリラインにデータを保持する、データを書き込むこと、
前記メモリラインが変更または所有状態で保持されたかを示す情報を受け取ること
を含む方法。
【請求項１６】
請求項１５に記載の方法であって、前記メモリラインが変更または所有状態で保持されたかを示す情報が、コヒーレンスディレクトリを有するホームクラスタキャッシュコヒーレンスコントローラから受け取られる方法。
【請求項１７】
請求項１５に記載の方法であって、前記メモリラインが変更または所有状態で保持されたかを示す情報が、前記リクエストクラスタプロセッサから受け取られる方法。
【請求項１８】
請求項１５に記載の方法であって、前記メモリラインが変更または所有状態で保持されたかを示す情報が、前記リクエストクラスタプロセッサからソース完了メッセージにおいて受け取られる方法。
【請求項１９】
請求項１５に記載の方法であって、前記メモリラインが中間リクエストによって無効化されたかを示す情報を受け取ることをさらに含む方法。
【請求項２０】
請求項１９に記載の方法であって、もし前記メモリラインが中間リクエストによって無効化されたなら、前記リモートデータキャッシュ中の前記メモリラインの状態は無効にセットされる方法。
【請求項２１】
請求項２０に記載の方法であって、もし前記メモリラインが無効化されていないなら、前記リモートデータキャッシュ中の前記メモリラインの状態は共有または排他にセットされる方法。
【請求項２２】
請求項２１に記載の方法であって、もし前記メモリラインが前記ライトバックの受領の前に所有状態で保持されたなら、前記リモートデータキャッシュ中の前記メモリラインの状態は共有にセットされる方法。
【請求項２３】
請求項２１に記載の方法であって、もし前記メモリラインが前記ライトバックの受領の前に変更状態で保持されたなら、前記リモートデータキャッシュ中の前記メモリラインの状態は排他にセットされる方法。
【請求項２４】
コヒーレンシを維持する方法であって、前記方法は、
リクエストキャッシュコヒーレンスコントローラにおいてホームクラスタからリードブロックレスポンスを受け取ることであって、前記リードブロックレスポンスは、メモリラインに関連付けられる、リードブロックレスポンスを受け取ること、および
前記リードブロックレスポンスに関連付けられたデータをリモートデータキャッシュに書き込むことであって、前記リモートデータキャッシュは、非リクエストクラスタのアドレス空間中のメモリラインにデータを保持する、データを書き込むこと
を含む方法。
【請求項２５】
請求項２４に記載の方法であって、前記リードブロックレスポンスに関連付けられたデータは、共有状態で前記リモートデータキャッシュに書き込まれる方法。
【請求項２６】
請求項２４に記載の方法であって、前記リードブロックレスポンスに関連付けられたデータは、排他状態で前記リモートデータキャッシュに書き込まれる方法。
【請求項２７】
コンピュータシステムであって、
第１複数ノードおよびリクエストキャッシュコヒーレンスコントローラを含むリクエストクラスタであって、前記第１複数ノードは、第１複数プロセッサおよび前記第１複数プロセッサに関連付けられた第１複数キャッシュを有し、前記リクエストキャッシュコヒーレンスコントローラはリモートデータキャッシュに関連付けられ、前記リモートデータキャッシュは、非リクエストクラスタのメモリライン中にデータを保持する、リクエストクラスタ、
第２複数プロセッサおよびリクエストキャッシュコヒーレンスコントローラを含むホームクラスタであって、前記第２複数プロセッサはポイントツーポイントアーキテクチャで相互接続されるホームクラスタ
を備えるコンピュータシステムであって、
前記第１複数プロセッサは、前記リモートデータキャッシュ中のエントリを変更するために、キャッシュラインが所有または変更されているかを示す情報を前記リクエストキャッシュコヒーレンスコントローラへ送るよう動作可能である
コンピュータシステム。
【請求項２８】
請求項２７に記載のコンピュータシステムであって、前記第１複数プロセッサは、前記キャッシュラインが無効であるかを示す情報を前記リクエストキャッシュコヒーレンスコントローラに送るようさらに動作可能であるコンピュータシステム。
【請求項２９】
請求項２７に記載のコンピュータシステムであって、非リクエストクラスタは、前記ホームクラスタおよび１つ以上のリモートクラスタを備えるコンピュータシステム。
【請求項３０】
請求項２７に記載のコンピュータシステムであって、前記リモートデータキャッシュは、メモリラインがデータを保持し、前記第１複数キャッシュから追い出されるときに、非リクエストクラスタに関連付けられたメモリラインをキャッシュするために用いられるコンピュータシステム。
【請求項３１】
請求項２７に記載のコンピュータシステムであって、キャッシュラインが追い出されるときに、キャッシュラインが所有または変更されているかを示す情報が送られるコンピュータシステム。
【請求項３２】
請求項３１に記載のコンピュータシステムであって、キャッシュラインを追い出すことは、データをメモリにライトバックすることを含むコンピュータシステム。
【請求項３３】
請求項２７に記載のコンピュータシステムであって、複数のリモートデータキャッシュは、前記コンピュータシステム中の複数のキャッシュコヒーレンスコントローラに関連付けられるコンピュータシステム。
【請求項３４】
請求項２７に記載のコンピュータシステムであって、データは、前記リモートデータキャッシュ中に変更、排他、所有、共有、または無効の状態で保持されえるコンピュータシステム。
【請求項３５】
請求項３４に記載のコンピュータシステムであって、データはさらに、ペンディングの状態で保持されえるコンピュータシステム。
【請求項３６】
請求項３５に記載のコンピュータシステムであって、データは、前記キャッシュコヒーレンスコントローラがライトバックを前記第１複数プロセッサのうちの１つから受け取った後に、ペンディング状態で前記リモートデータキャッシュに書き込まれるコンピュータシステム。
【請求項３７】
コンピュータシステムであって、
リクエストキャッシュコヒーレンスコントローラにおいてリクエストクラスタプロセッサからライトバックを受け取る手段であって、前記ライトバックは、前記リクエストクラスタプロセッサに対応するキャッシュから追い出されたメモリラインに関連付けられる、ライトバックを受け取る手段、
前記メモリラインに関連付けられたデータをリモートデータキャッシュに書き込む手段であって、前記リモートデータキャッシュは、非リクエストクラスタのアドレス空間中のメモリラインにデータを保持する、データを書き込む手段、
前記メモリラインが変更または所有状態で保持されたかを示す情報を受け取る手段
を備えるコンピュータシステム。
【請求項３８】
請求項３７に記載のコンピュータシステムであって、前記メモリラインが変更または所有状態で保持されたかを示す情報が、コヒーレンスディレクトリを有するホームクラスタキャッシュコヒーレンスコントローラから受け取られるコンピュータシステム。
【請求項３９】
請求項３７に記載のコンピュータシステムであって、前記メモリラインが変更または所有状態で保持されたかを示す情報が、前記リクエストクラスタプロセッサから受け取られるコンピュータシステム。
【請求項４０】
請求項３７に記載のコンピュータシステムであって、前記メモリラインが変更または所有状態で保持されたかを示す情報が、前記リクエストクラスタプロセッサからソース完了メッセージにおいて受け取られるコンピュータシステム。
【請求項４１】
請求項３７に記載のコンピュータシステムであって、前記メモリラインが中間リクエストによって無効化されたかを示す情報を受け取ることをさらに含むコンピュータシステム。
【請求項４２】
請求項４１に記載のコンピュータシステムであって、もし前記メモリラインが中間リクエストによって無効化されたなら、前記リモートデータキャッシュ中の前記メモリラインの状態は無効にセットされるコンピュータシステム。
【請求項４３】
コンピュータシステムであって、
リクエストキャッシュコヒーレンスコントローラにおいてホームクラスタからリードブロックレスポンスを受け取る手段であって、前記リードブロックレスポンスは、メモリラインに関連付けられる、リードブロックレスポンスを受け取る手段、および
前記リードブロックレスポンスに関連付けられたデータをリモートデータキャッシュに書き込む手段であって、前記リモートデータキャッシュは、非リクエストクラスタのアドレス空間中のメモリラインにデータを保持する、データを書き込む手段
を備えるコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２００２年１１月４日に出願されたDavid B. Glascoによる共に「Methods And Apparatus For Managing Probe Requests」と題された米国特許出願第１０／２８８，３４７号および第１０／２８８，３９９号に関し、これらの全体が全ての目的のためにここで参照によって援用される。
【０００２】
本発明は一般にマルチプロセッサシステムにおいてデータにアクセスすることに関する。より具体的には、本発明は、マルチクラスタアーキテクチャを有するマルチプロセッサシステムにおいてキャッシュコヒーレンシを維持しつつ、データアクセス効率を改良する技術を提供する。
【背景技術】
【０００３】
パフォーマンスの制限のために、単一のメモリ空間でシステム中のプロセッサ群を接続するポイントツーポイントアーキテクチャが開発されるようになっている。ある例では、個別プロセッサは、互いに複数のポイントツーポイントリンクを通して直接に接続されることによってプロセッサ群のクラスタを形成しえる。プロセッサ群の別個のクラスタも接続されえる。ポイントツーポイントリンクは、コプロセッシングおよびマルチプロセッシング機能のための帯域幅を大きく増加させる。
【０００４】
そのようなマルチプロセッサ、マルチクラスタシステムにおいては、プロセッサは、ローカルまたはリモートノード内でキャッシュされえる特定のメモリライン上で操作を実行するためにプローブリクエストを送る。一部の共通の操作は、メモリライン上でのリードブロック、リードブロックシェアド、およびリードブロックモディファイド操作を含む。多くの例において、トランザクションは、もし追加のメカニズムが提供されたならトランザクションがローカルに取り扱えるときでさえ、リモートクラスタに転送される。しかしトランザクションをローカルに扱うメカニズムは制限される。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
したがって、ポイントツーポイントリンクを用いて接続されたマルチプロセッサのマルチクラスタを有するシステムにおいて、キャッシュアクセスリクエスト効率を改善する技術を提供するのが望ましい。
【課題を解決するための手段】
【０００６】
本発明によれば、マルチプロセッサ、マルチクラスタシステムにおけるデータアクセスの効率を増す方法および装置が提供される。さまざまなトランザクションをローカルに完了させることができるメカニズムは、システム中のさまざまなクラスタに関連付けられたリモートデータキャッシュを提供することによって実現される。このリモートデータキャッシュは、リモートクラスタにおいて保持されるメモリラインについてのデータおよび状態情報を受け取る。状態情報は、コヒーレンスディレクトリおよび拡張されたソース完了メッセージを含むさまざまなメカニズムを用いてリモートデータキャッシュに提供される。
【０００７】
ある実施形態において、コンピュータシステムが提供される。このコンピュータシステムは、リクエストクラスタおよびホームクラスタを含む。リクエストクラスタは、第１複数ノードおよびキャッシュコヒーレンスコントローラを含む。前記第１複数ノードは、第１複数プロセッサおよび前記第１複数プロセッサに関連付けられた第１複数キャッシュを有する。前記リクエストキャッシュコヒーレンスコントローラはリモートデータキャッシュに関連付けられる。前記リモートデータキャッシュは、非リクエストクラスタのメモリライン中にデータを保持する。ホームクラスタは、第２複数プロセッサおよびリクエストキャッシュコヒーレンスコントローラを含む。前記第２複数プロセッサはポイントツーポイントアーキテクチャで相互接続される。
【０００８】
他の実施形態において、コヒーレンシを維持する方法が提供される。ライトバックは、リクエストキャッシュコヒーレンスコントローラにおいてリクエストクラスタプロセッサから受け取られる。前記ライトバックは、前記リクエストクラスタプロセッサに対応するキャッシュから追い出されたメモリラインに関連付けられる。前記メモリラインに関連付けられたデータはリモートデータキャッシュに書き込まれる。前記リモートデータキャッシュは、非リクエストクラスタのアドレス空間中のメモリラインにデータを保持する。前記メモリラインが変更または所有状態で保持されたかを示す情報が受け取られる。
【０００９】
他の実施形態において、コヒーレンシを維持する方法が提供される。リードブロックレスポンスがリクエストキャッシュコヒーレンスコントローラにおいてホームクラスタからを受け取られる。前記リードブロックレスポンスは、メモリラインに関連付けられる。前記リードブロックレスポンスに関連付けられたデータは、リモートデータキャッシュに書き込まれる。前記リモートデータキャッシュは、非リクエストクラスタのアドレス空間中のメモリラインにデータを保持する。
【００１０】
さらに他の実施形態において、コンピュータシステムは、リクエストクラスタおよびホームクラスタを含む。リクエストクラスタは、第１複数ノードおよびリクエストキャッシュコヒーレンスコントローラを含む。前記第１複数ノードは、第１複数プロセッサおよび前記第１複数プロセッサに関連付けられた第１複数キャッシュを有する。前記リクエストキャッシュコヒーレンスコントローラはリモートデータキャッシュに関連付けられる。前記リモートデータキャッシュは、非リクエストクラスタのメモリライン中にデータを保持する。ホームクラスタは、第２複数プロセッサおよびリクエストキャッシュコヒーレンスコントローラを含む。前記第２複数プロセッサはポイントツーポイントアーキテクチャで相互接続される。前記第１複数プロセッサは、前記リモートデータキャッシュ中のエントリを変更するために、キャッシュラインが所有または変更されているかを示す情報を前記リクエストキャッシュコヒーレンスコントローラへ送るよう動作可能である。
【００１１】
本発明の性質および優位性のさらなる理解は、明細書および図面の残りの部分を参照することによって実現されよう。
【発明を実施するための最良の形態】
【００１２】
本発明は、以下の説明を添付の図面と併せて参照することによって最もよく理解されえ、図面は本発明の具体的な実施形態を図示するものである。
【００１３】
本発明を実施するための発明者によって考えられたベストモードを含む本発明のいくつかの具体的な実施形態が詳細にここで参照される。これら具体的な実施形態の例は、添付の図面に示される。本発明は、これら具体的な実施形態について説明されるが、本発明を記載された実施形態に限定するよう意図されてはいないことが理解されよう。むしろ、代替物、改変、および等価物を、添付の特許請求の範囲によって規定される本発明の精神および範囲内に含まれるとしてカバーするよう意図される。そのプロセッサ間でポイントツーポイント通信を有するマルチプロセッサアーキテクチャは、本発明の具体的な実施形態を実現するのに適する。以下の記載において、本発明の完全な理解を促すために多くの具体的な詳細が述べられている。本発明は、これら具体的な詳細の一部または全てなしでも実施されえる。本発明の趣旨を不必要にぼかさないために、よく知られたプロセス操作は詳細には記載されていない。さらに本発明が単一のエンティティを参照する場合、本発明の方法および装置は、文脈上明らかにそうでないと表されない限り、１より多いエンティティを用いて実現可能である。
【００１４】
マルチプロセッサ、マルチクラスタシステムにおいてデータアクセス効率を増す技術が提供される。ポイントツーポイントアーキテクチャにおいて、プロセッサ群のクラスタは、ポイントツーポイントリンクを通して互いに直接に接続されたマルチプロセッサを含む。従来のシェアドバスまたは外部ネットワークの代わりにポイントツーポイントリンクを用いることによって、マルチプロセッサは、同じメモリ空間を共有するシステムにおいて効率的に用いられる。従来のバスおよび外部ネットワークベースのマルチプロセッサアーキテクチャの帯域幅およびレイテンシの制限の多くを回避することによって、処理およびネットワーク効率も改善される。しかしさまざまな実施形態によれば、ポイントツーポイントアーキテクチャ中でプロセッサの個数が直線的に増加することは、マルチプロセッサを接続するために用いられるリンクの個数が指数関数的に増加することにつながる。用いられるリンクの個数を減らし、ポイントツーポイントアーキテクチャを用いたマルチプロセッサをさらにモジュラー化するために、マルチクラスタが用いられる。
【００１５】
さまざまな実施形態によれば、マルチプロセッサクラスタは、ポイントツーポイントアーキテクチャを用いて相互接続される。プロセッサのそれぞれのクラスタは、クラスタ群間の通信を扱うのに用いられるキャッシュコヒーレンスコントローラを含む。ある実施形態においては、プロセッサ群を接続するのに用いられるポイントツーポイントアーキテクチャは、クラスタ群を接続するのにも用いられる。
【００１６】
キャッシュコヒーレンスコントローラを用いることによって、マルチクラスタを必ずしもサポートしないかもしれないプロセッサ群を用いてマルチクラスタシステムが構築されえる。そのようなマルチクラスタシステムは、キャッシュコヒーレンスコントローラを用いて、ローカルトランザクションにおいて非ローカルノードを表現することで、ローカルノードがローカルクラスタの外にあるノードの存在を知る必要がないようにすることによって構築されえる。キャッシュコヒーレンスコントローラのさらなる詳細が以下に述べられる。
【００１７】
単一のクラスタシステムにおいて、キャッシュコヒーレンシは、全てのデータアクセスリクエストをシリアライゼーションポイントを通して送ることによって維持されえる。データアクセスリクエストを順序付けるための任意のメカニズムはここでは、シリアライゼーションポイントと呼ばれる。シリアライゼーションポイントの一例はメモリコントローラである。単一のクラスタシステムにおけるさまざまなプロセッサ群は、データアクセスリクエストをメモリコントローラに送る。ある例では、メモリコントローラは、データアクセスリクエストをシリアライズまたはロックすることによって、与えられたメモリラインについて一つのデータアクセスリクエストだけが任意の特定の時刻において許容されるよう構成される。もし他のプロセッサが同じメモリラインにアクセスすることを試みるなら、データアクセスの試みは、メモリラインがアンロックされるまでブロックされる。メモリコントローラは、キャッシュコヒーレンシがマルチプロセッサ、シングルクラスタシステムにおいて維持されることを可能にする。
【００１８】
シリアライゼーションポイントは、さまざまなクラスタ群中のプロセッサ群が単一のアドレス空間を共有するマルチプロセッサ、マルチクラスタシステムにおいても用いられえる。単一のアドレス空間を用いることによって、内部ポイントツーポイントリンクは、従来の外部ネットワークベースのマルチクラスタシステムに対してクラスタ間通信を大幅に改善するために用いられえる。さまざまなクラスタ中のさまざまなプロセッサは、ホームクラスタのような特定のクラスタに関連付けられたメモリコントローラにデータアクセスリクエストを送る。メモリコントローラは、異なるクラスタからの全てのデータリクエストを同様にシリアライズしえる。しかしマルチプロセッサ、マルチクラスタシステム中のシリアライゼーションポイントは、マルチプロセッサ、シングルクラスタシステムにおけるシリアライゼーションポイントほど効率的ではないかもしれない。すなわち、クラスタ間で転送することから生じるレイテンシのようなファクタから生じるディレイが、さまざまなデータアクセスリクエストに対する応答時間に悪影響を及ぼしえる。ディレイは、マルチプロセッサ環境でのプローブの使用からも生じることに注意されたい。
【００１９】
共有メモリ空間を用いるアーキテクチャにおけるクラスタ間トランザクションのディレイは、イーサネット（登録商標）またはトークンリングのような外部ネットワークを用いる従来のメッセージ引き渡し環境におけるディレイより大幅に小さいが、最小ディレイでさえも大きなファクタである。一部の応用例では、一瞬にしてプロセッサから何百万のデータアクセスリクエストが存在しえる。ディレイが少しでもあるとプロセッサパフォーマンスに悪影響を与えうる。
【００２０】
さまざまな実施形態によれば、プローブ管理は、マルチプロセッサ、マルチクラスタシステムにおいてデータにアクセスする効率を高めるために用いられる。システムにおいてキャッシュコヒーレンシを維持するためにノードからレスポンスを引き出すメカニズムはここではプローブと呼ばれる。ある例では、キャッシュをスヌープするメカニズムがプローブと呼ばれる。プローブに対するレスポンスは、起動するリクエストのソースまたはターゲットに向けられえる。さまざまなノードへ送信されるプローブの個数およびプローブのリクエストをフィルタリングまたは低減する任意のメカニズムは、ここではプローブを管理することと呼ばれる。ある例では、プローブを管理することは、プローブが少なくなった個数のエンティティに送信されえるかを決定するためにプローブリクエストを特徴付けることを伴う。
【００２１】
典型的な実現例において、リクエストは、システム中のさまざまなノードにプローブをブロードキャストするメモリコントローラに送られる。そのようなシステムにおいては、キャッシュライン状態の情報は知られていない。システム中の全てのノードは、プローブされ、リクエストクラスタは、それぞれのノードからレスポンスを受け取る。コヒーレンスディレクトリを持つシステムにおいて、さまざまなメモリラインに関連付けられた状態情報は、トランザクションの個数を減らすために用いられえる。さまざまなメモリラインに関連付けられた状態情報を維持する任意のメカニズムは、ここではコヒーレンスディレクトリと呼ばれる。コヒーレンスディレクトリは、リモートクラスタ内にキャッシュされたローカルクラスタ中のメモリラインについての情報を典型的には含む。さまざまな実施形態によれば、コヒーレンスディレクトリは、ローカルキャッシュの状態を推測することによってリモートクラスタへのプローブの個数を減らすために用いられる。他の実施形態においては、コヒーレンスディレクトリは、ホームクラスタにおいてメモリコントローラへのリクエストの送信をなくすために用いられる。
【００２２】
図１Ａは、本発明の技術を採用しえるマルチクラスタ、マルチプロセッサシステムの一例の概略図である。それぞれの処理クラスタ１０１、１０３、１０５、および１０７は、複数のプロセッサを含む。処理クラスタ１０１、１０３、１０５、および１０７は、互いにポイントツーポイントリンク１１１ａ〜ｆを通して接続される。ある実施形態において、図１Ａに示されるマルチクラスタアーキテクチャ中のマルチプロセッサは、同じメモリ空間を共有する。この例では、ポイントツーポイントリンク１１１ａ〜ｆは、マルチクラスタ１０１、１０３、１０５、および１０７内のマルチプロセッサを接続するために従来のフロントサイドバスに代わって用いられる内部システム接続である。このポイントツーポイントリンクは、任意のポイントツーポイントのコヒーレンスプロトコルをサポートしえる。
【００２３】
図１Ｂは、本発明の技術を採用しえるマルチクラスタ、マルチプロセッサシステムの他の例の概略図である。それぞれの処理クラスタ１２１、１２３、１２５、および１２７は、ポイントツーポイントリンク１４１ａ〜ｄを通してスイッチ１３１に結合される。スイッチおよびポイントツーポイントリンクを用いることは、システム内でマルチクラスタを接続するとき、より少ないポイントツーポイントリンクで実現することを可能にすることに注意されたい。スイッチ１３１は、コヒーレンスプロトコルインタフェースを持つプロセッサを含みえる。さまざまな実現例によれば、図１Ａに示されるマルチクラスタシステムは、図１Ｂに示されるスイッチ１３１を用いて拡張されえる。
【００２４】
図２は、例えば図１Ａに示されるクラスタ１０１のようなマルチプロセッサクラスタの概略図である。クラスタ２００は、プロセッサ２０２ａ〜２０２ｄ、１つ以上の基本Ｉ／Ｏシステム（ＢＩＯＳ）２０４、メモリバンク２０６ａ〜２０６ｄを備えるメモリサブシステム、ポイントツーポイント通信リンク２０８ａ〜２０８ｅ、およびサービスプロセッサ２１２を含む。ポイントツーポイント通信リンクは、プロセッサ２０２ａ〜２０２ｄ、Ｉ／Ｏスイッチ２１０、および相互接続コントローラ２３０の間で相互接続を可能にするよう構成される。サービスプロセッサ２１２は、リンク２１４ａ〜２１４ｆによって図２に表されるＪＴＡＧインタフェースを介してプロセッサ２０２ａ〜２０２ｄ、Ｉ／Ｏスイッチ２１０、および相互接続コントローラ２３０と通信を可能にするよう構成される。他のインタフェースがサポートされることに注意されたい。ある実現例においては、サービスプロセッサは、マルチプロセッサクラスタに含まれないことにも注意されたい。Ｉ／Ｏスイッチ２１０は、システムの残りをＩ／Ｏアダプタ２１６および２２０に接続する。
【００２５】
具体的な実施形態によれば、本発明のサービスプロセッサは、システムリソースを以前に特定されたパーティションスキーマに従って分割する（partition）ためのインテリジェンスを有する。パーティショニングは、システムプロセッサに関連付けられたルーティングテーブルをサービスプロセッサによって直接に操作することによって達成されえ、これはポイントツーポイント通信インフラストラクチャによって可能になる。ルーティングテーブルは、さまざまなシステムリソースを制御および分離するために用いられ、リソース間の接続がテーブル中で定義される。
【００２６】
プロセッサ２０２ａ〜ｄは、キャッシュコヒーレンスコントローラ２３０にもポイントツーポイントリンク２３２ａ〜ｄを通して結合される。キャッシュコヒーレンスを維持しつつ、マルチプロセッサクラスタ間の通信を提供するのに用いられえるメカニズムまたは装置は、ここではキャッシュコヒーレンスコントローラと呼ばれる。キャッシュコヒーレンスコントローラ２３０は、他のマルチプロセッサクラスタ群に関連付けられたキャッシュコヒーレンスコントローラ群に結合されえる。１つのクラスタにこのようなキャッシュコヒーレンスコントローラが１つより多く存在しえることに注意されたい。キャッシュコヒーレンスコントローラ２３０は、リモートクラスタと共にプロセッサ２０２ａ〜ｄともポイントツーポイントプロトコルを用いて通信する。
【００２７】
より一般には、図２に示される具体的なアーキテクチャは、単に例示的であって、本発明の実施形態は、異なる構成およびリソース相互結合、および示されたシステムリソースのそれぞれについてさまざまな代替物を有すると想定されることが理解されよう。しかし例示する目的のためにサーバ２００の特定の詳細が想定される。例えば、図２に示されるリソースのほとんどは、単一の電子アセンブリ上に常駐すると想定される。加えて、メモリバンク２０６ａ〜２０６ｄは、デュアルインラインメモリモジュール（ＤＩＭＭ）として物理的に提供されるダブルデータレート（ＤＤＲ）メモリを備えうる。Ｉ／Ｏアダプタ２１６は、例えば、永久記憶デバイスにアクセスを提供するウルトラダイレクトメモリアクセス（ＵＤＭＡ）コントローラ、またはスモールコンピュータシステムインタフェース（ＳＣＳＩ）コントローラでありえる。Ｉ／Ｏアダプタ２２０は、例えばローカルエリアネットワーク（ＬＡＮ）またはインターネットのようなネットワークと通信を提供するよう構成されたイーサネットカードでありえる。
【００２８】
図２に示される特定の実施形態によれば、Ｉ／Ｏアダプタ２１６および２２０の両方が対称Ｉ／Ｏアクセスを提供する。すなわち、それぞれはＩ／Ｏの等価なセットにアクセスを提供する。理解されるように、そのような構成は、マルチパーティションが同じタイプのＩ／Ｏにアクセスを有するパーティショニングスキームを促進する。しかし、Ｉ／Ｏのないパーティションが作られる実施形態も想定されることが理解されよう。例えば、１つ以上のプロセッサおよび関連するメモリリソース、すなわちメモリコンプレックスを含むパーティションが、メモリコンプレックスを試験する目的で作られえる。
【００２９】
ある実施形態によれば、サービスプロセッサ２１２は、集積化されたチップセット機能を含むモトローラＭＰＣ８５５Ｔマイクロプロセッサである。キャッシュコヒーレンスコントローラ２３０は、ローカルポイントツーポイントコヒーレンスプロトコルをサポートする特定用途向け集積回路（ＡＳＩＣ）である。キャッシュコヒーレンスコントローラ２３０は、Ｉ／Ｏデバイスとの通信を可能にするために非コヒーレントプロトコルを扱うようにも構成されえる。ある実施形態において、キャッシュコヒーレンスコントローラ２３０は、プログラマブルロジックデバイスまたはフィールドプログラマブルゲートアレイのような特別に構成されたプログラマブルチップである。
【００３０】
図３は、キャッシュコヒーレンスコントローラ２３０の一例の概略図である。さまざまな実施形態によれば、キャッシュコヒーレンスコントローラは、マルチプロセッサシステムのさまざまなクラスタ中のプロセッサ群から受け取られたプローブおよびリクエストのようなパケットを扱うよう構成されたプロトコルエンジン３０５を含む。プロトコルエンジン３０５の機能は、パフォーマンスを改善するためにいくつかのエンジンにわたって分割されえる。ある例では、パーティショニングは、パケットタイプ（リクエスト、プローブおよびレスポンス）、方向（着信および発信）、またはトランザクションフロー（リクエストフロー、プローブフローなど）に基づいてなされえる。
【００３１】
プロトコルエンジン３０５は、最近のリクエストおよびプローブのようなトランザクションをキャッシュコヒーレンスコントローラが追跡し、これらトランザクションを特定のプロセッサ群と関連付けることを可能にするペンディングバッファ３０９へのアクセスを有する。ペンディングバッファ３０９で維持されるトランザクション情報は、トランザクション宛先ノード、後で起こるコリジョン検出およびプロトコル最適化のためのリクエストのアドレス、レスポンス情報、タグ、および状態情報を含みえる。
【００３２】
キャッシュコヒーレンスコントローラは、外部プロセッサクラスタと共に、クラスタ中の他のプロセッサとキャッシュコヒーレンスコントローラが通信することを可能にするコヒーレントプロトコルインタフェース３０７を有する。さまざまな実施形態によれば、それぞれのインタフェース３０７および３１１は、フルクロスバーとして、またはマルチプレクサおよびバッファのような要素を用いた別個の受信および送信ユニットとしてのいずれかで実現される。またキャッシュコヒーレンスコントローラは、Ｉ／Ｏデバイスと通信する非コヒーレントプロトコルインタフェース３１１のような他のインタフェースを含みえる。キャッシュコヒーレンスコントローラ２３０は、コヒーレントおよび非コヒーレントプロトコルインタフェースの両方を提供する必要は必ずしもないことに注意されたい。またあるクラスタ内のキャッシュコヒーレンスコントローラは、他のクラスタ内のキャッシュコヒーレンスコントローラと通信しえることにも注意されたい。
【００３３】
図４は、キャッシュコヒーレンスコントローラを用いることのない単一のクラスタを有するシステムにおけるプロセッサからのキャッシュリクエストについてのトランザクションを示す概略図である。プロセッサ４０１−１は、リードメモリラインリクエストのようなアクセスリクエストをメモリコントローラ４０３−１に送る。メモリコントローラ４０３−１は、このプロセッサ、単一のクラスタ中の他のプロセッサに関連付けられえ、またはＡＳＩＣまたは特別に構成されたプログラマブルロジックデバイス（ＰＬＤ）のような別個の要素でありえる。キャッシュコヒーレンスを簡単にするために、任意の与えられた時刻において、典型的には１つのプロセッサだけが共有アドレス空間（shared address space）に対応するメモリラインにアクセスすることを許される。他のプロセッサが同じメモリラインにアクセスするのを防ぐために、メモリラインは、メモリコントローラ４０３−１によってロックされえる。同じメモリラインへの全ての他のリクエストはブロックされるか、またはキューに入れられる。他のプロセッサによるアクセスは、典型的にはメモリコントローラ４０３−１がメモリラインをアンロックするときだけ許される。
【００３４】
それからメモリコントローラ４０３−１は、プローブをローカルキャッシュメモリ４０５、４０７、および４０９に送ってキャッシュ状態を決定する。それからローカルキャッシュメモリ４０５、４０７、および４０９は、今度はプローブレスポンスを同じプロセッサ４０１−２に送る。メモリコントローラ４０３−１は、リードレスポンスのようなアクセスレスポンスも同じプロセッサ４０１−３に送る。それからプロセッサ４０１−３は、完了レスポンス（done response）をメモリコントローラ４０３−２に送ることによって、メモリコントローラ４０３−２が後続のリクエストについてメモリラインをアンロックすることを許す。ＣＰＵ４０１−１、ＣＰＵ４０１−２、およびＣＰＵ４０１−３は同じプロセッサを指すことに注意されたい。
【００３５】
図５Ａ〜５Ｄは、キャッシュコヒーレンスコントローラ動作を示す概略図である。マルチプロセッサクラスタ中のキャッシュコヒーレンスコントローラの使用によって、それぞれのクラスタ中のプロセッサおよびメモリコントローラのようなローカルノードの機能に影響を与えることなく、マルチプロセッサ、マルチクラスタのコヒーレントドメインが可能になる。場合によっては、プロセッサは、マルチクラスタを許さないシングルクラスタ中の限られた個数のプロセッサだけを許すプロトコルしかサポートしないかもしれない。キャッシュコヒーレンスコントローラは、非ローカルノード群はキャッシュコヒーレンスコントローラ中に実現された単一のローカルノードに過ぎないとローカルプロセッサが信じるようにさせることによって、マルチクラスタを許すように用いられえる。ある例では、クラスタ中のプロセッサは、他のクラスタ中のプロセッサのことを知る必要がない。代わりに、クラスタ中のプロセッサ群は、キャッシュコヒーレンスコントローラが全ての非ローカルノードを代表しているかのように、キャッシュコヒーレンスコントローラと通信する。
【００３６】
リモートクラスタ中のノードは、ここでは非ローカルノードまたはリモートノードと呼ばれることに注意されたい。しかし、非ローカルノードは、リクエストクラスタ中にないノードを指し、リモートクラスタおよびホームクラスタの両方にあるノードを含む。データアクセスまたはキャッシュアクセスリクエストが発生するクラスタは、ここではリクエストクラスタと呼ばれる。シリアライゼーションポイントを含むクラスタは、ここではホームクラスタと呼ばれる。他のクラスタは、リモートクラスタと呼ばれる。ホームクラスタおよびリモートクラスタは、ここでは非ローカルクラスタとも呼ばれる。
【００３７】
図５Ａは、集合リモートキャッシュ（aggregate remote cache）として振る舞うキャッシュコヒーレンスコントローラを示す。プロセッサ５０１−１がローカルメモリコントローラ５０３−１にデータアクセスリクエストを発生するとき、キャッシュコヒーレンスコントローラ５０９は、ローカルメモリコントローラ５０３−１からプローブを受け入れ、それを非ローカルノード部５１１に転送する。コヒーレンスプロトコルは、いくつかのタイプのメッセージを含みえることに注意されたい。ある例では、コヒーレンスプロトコルは、４つのタイプのメッセージを含み、すなわち、データまたはキャッシュアクセスリクエスト、プローブ、レスポンスまたはプローブレスポンス、およびデータパケットである。データまたはキャッシュアクセスリクエストは、ふつうはホームノードメモリコントローラをターゲットにする。プローブは、システム中のそれぞれのキャッシュをクエリーするのに用いられる。プローブパケットは、特定のラインについてキャッシュが適切にキャッシュ状態を遷移できるようにする情報を運びえる。レスポンスは、プローブレスポンス情報を運ぶため、かつノードが他のノードに与えられたトランザクションの状態を知らせるために用いられる。データパケットは、ライトリクエストおよびリードレスポンスの両方についてのリクエストデータを運ぶ。
【００３８】
さまざまな実施形態によれば、メモリアドレスは、ローカルメモリコントローラに存在する。上述のように、ローカルクラスタの外にプロセッサおよびキャッシュコヒーレンスコントローラを含むノードはここでは非ローカルノードと呼ばれる。それからキャッシュコヒーレンスコントローラ５０９は、非ローカルノードからのレスポンスを累積（accumulate）し、キャッシュブロック５０５および５０７に関連付けられたローカルノードがプロセッサ５０１ー２に単一のレスポンスを送るのと同じやり方で単一のレスポンスを送る。ローカルプロセッサは、プローブされたそれぞれのローカルノードについて単一のプローブレスポンスを期待しえる。キャッシュコヒーレンスコントローラの使用によって、非ローカルノードが存在するかについて気にすることなくローカルプロセッサが動作できるようになる。
【００３９】
プロセッサ５０１−１およびプロセッサ５０１−２のような要素は、トランザクションシーケンスのあいだの異なる時刻における同じ要素をここでは指すことに注意されたい。例えば、プロセッサ５０１−１は、データアクセスリクエストをイニシエートでき、同じプロセッサ５０１−２がそのリクエストから生じたプローブレスポンスを後に受け取れる。
【００４０】
図５Ｂは、プローブするエージェントペアとして働くキャッシュコヒーレンスコントローラ示す。キャッシュコヒーレンスコントローラ５２１−１がプローブを非ローカルノード５３１から受け取るとき、キャッシュコヒーレンスコントローラ５２１−１は、プローブを受け入れ、プローブをキャッシュブロック５２３、５２５、および５２７に関連付けられたローカルノードに転送する。それからキャッシュコヒーレンスコントローラ５２１−２は、最終レスポンスを非ローカルノード部５３１に転送する。この例では、キャッシュコヒーレンスコントローラは、プローブの送信元および宛先の両方である。キャッシュブロック５２３、５２５、および５２７に関連付けられたローカルノードは、キャッシュコヒーレンスコントローラがあたかもローカルメモリリクエストを持つローカルプロセッサであるかのように振る舞う。
【００４１】
図５Ｃは、リモートメモリとして働くキャッシュコヒーレンスコントローラを示す。ローカルプロセッサ５４１−１がリモートメモリをターゲットとするアクセスリクエストを発生するとき、キャッシュコヒーレンスコントローラ５４３−１は、そのリクエストを非ローカルノード５５３に転送する。リモートリクエストがローカルプロービングを特定するとき、キャッシュコヒーレンスコントローラ５４３−１は、ローカルノードへのプローブを発生し、プローブされたノードは、プロセッサ５４１−２にレスポンスを提供する。いったんキャッシュコヒーレンスコントローラ５４３−１がデータを非ローカルノード部５５３から受け取ると、それはリードレスポンスをプロセッサ５４１−３に転送する。キャッシュコヒーレンスコントローラはまた、最終のレスポンスを非ローカルノード５５３に関連付けられたリモートメモリコントローラに転送する。
【００４２】
図５Ｄは、リモートプロセッサとして働くキャッシュコヒーレンスコントローラを示す。第１クラスタにおけるキャッシュコヒーレンスコントローラ５６１−１が第２クラスタ中のプロセッサからのリクエストを受け取るとき、キャッシュコヒーレンスコントローラは、第２クラスタプロセッサに代わって第１クラスタプロセッサとして働く。キャッシュコヒーレンスコントローラ５６１−１は、部分５７５からリクエストを受け入れ、それをメモリコントローラ５６３−１に転送する。それからキャッシュコヒーレンスコントローラ５６１−２は、フェッチされたデータと共に全てのプローブレスポンスを累積し、最終レスポンスを非ローカルノード５７５と共にメモリコントローラ５６３−２に転送する。
【００４３】
キャッシュコヒーレンスコントローラが集合リモートキャッシュとして働くことを許すことによって、プロービングエージェントペア、リモートメモリ、およびリモートプロセッサ、マルチクラスタシステムは、マルチクラスタを必ずしもサポートしないかもしれないプロセッサを用いて構築されえる。キャッシュコヒーレンスコントローラは、ローカルノードがローカルクラスタの外のノードの存在を知る必要がないように、ローカルトランザクションにおいて非ローカルノードを代表するために用いられえる。
【００４４】
図６は、キャッシュコヒーレンスコントローラを用いて非ローカルクラスタへ送られたローカルプロセッサからのデータリクエストについてのトランザクションを示す概略図である。マルチクラスタシステムは、リクエストクラスタ６００、ホームクラスタ６２０、およびリモートクラスタ６４０を含む。上述のように、リクエストクラスタ６００を除く任意の他のクラスタと共にホームクラスタ６２０およびリモートクラスタ６４０は、ここでは非ローカルクラスタと呼ばれる。ローカルおよび非ローカルクラスタに関連付けられたプロセッサおよびキャッシュコヒーレンスコントローラは、それぞれ、ローカルプロセッサ、ローカルキャッシュコヒーレンスコントローラ、非ローカルプロセッサ、および非ローカルキャッシュコヒーレンスコントローラとここでは同様に呼ばれる。
【００４５】
さまざまな実施形態によれば、ローカルクラスタ６００中のプロセッサ６０１−１は、リードリクエストのようなデータアクセスリクエストをキャッシュコヒーレンスコントローラ６０３−１に送る。キャッシュコヒーレンスコントローラ６０３−１は、図３のペンディングバッファ中のトランザクションをトラック（track）し、そのリクエストをホームクラスタ６２０中のキャッシュコヒーレンスコントローラ６２１−１に転送する。ホームクラスタにおけるキャッシュコヒーレンスコントローラ６２１−１は、アクセスリクエストを受け取り、そのペンディングバッファ中のリクエストをトラックする。ある例では、リクエストに関連付けられた情報は、ペンディングバッファ中に記憶される。キャッシュコヒーレンスコントローラ６２１−１は、アクセスリクエストを、ホームクラスタ６２０にやはり関連付けられたメモリコントローラ６２３−１に転送する。この時点において、メモリコントローラ６２３−１は、リクエストに関連付けられたメモリラインをロックする。ある例では、メモリラインは、リクエストクラスタ６００、ホームクラスタ６２０、およびリモートクラスタ６４０中のマルチプロセッサによって共有されたメモリ空間中のユニークなアドレスである。メモリコントローラ６２３−１は、データアクセスリクエストに関連付けられたプローブを発生し、そのプローブを、キャッシュコヒーレンスコントローラ６２１−２と共に、キャッシュブロック６２５および６２７に関連付けられたローカルノードに転送する。
【００４６】
リクエスト、プローブ、レスポンス、およびデータに関連付けられたメッセージは、あるノードから他へ転送されると記載されるが、メッセージそのものはさまざまなものを含みえることに注意されたい。ある例では、マルチクラスタアーキテクチャがさまざまなローカルノードに対してトランスペアレントであることができるように、改変がメッセージになされる。ライトリクエストも扱われえることに注意されたい。ライトリクエストにおいて、ターゲットとされたメモリコントローラは、レスポンス群を集め、集めるのが終わると、そのレスポンス群をプロセッサに送る。
【００４７】
リモートクラスタ６４０に関連付けられたキャッシュコヒーレンスコントローラ６４１−１は、キャッシュコヒーレンスコントローラ６２１−２からプローブを受け取り、キャッシュブロック６４５、６４７、および６４９に関連付けられたローカルノードをプローブする。同様に、リクエストクラスタ６００に関連付けられたキャッシュコヒーレンスコントローラ６０３−２は、プローブを受け取り、そのプローブをキャッシュブロック６０５、６０７、および６０９に関連付けられたローカルノードに転送し、リクエストクラスタ６００中のキャッシュブロックをプローブする。プロセッサ６０１−２は、キャッシュブロック６０５、６０７、および６０９に関連付けられたローカルノードからプローブレスポンスを受け取る。
【００４８】
さまざまな実施形態によれば、キャッシュコヒーレンスコントローラ６２１−３は、プローブレスポンス群を累積し、それらプローブレスポンス群をキャッシュコヒーレンスコントローラ６０３−３に送り、このキャッシュコヒーレンスコントローラが今度はプローブレスポンス群をプロセッサ６０１−３に転送する。キャッシュコヒーレンスコントローラ６２１−４はまたリードレスポンスをキャッシュコヒーレンスコントローラ６０３−４に送り、このキャッシュコヒーレンスコントローラはリードレスポンスをプロセッサ６０１−４に転送する。プローブおよびプローブレスポンスがシステム中のキャッシュコヒーレンシを維持するための情報を運ぶのに対し、リードレスポンスは実際のフェッチされたデータを運びえる。フェッチされたデータを受け取ったあと、プロセッサ６０１−４は、ソース完了レスポンス（source done response）をキャッシュコヒーレンスコントローラ６０３−５に送りえる。さまざまな実施形態によれば、トランザクションは、これでリクエストするクラスタ６００においては完了である。キャッシュコヒーレンスコントローラ６０３−５は、ソース完了メッセージ（source done message）をキャッシュコヒーレンスコントローラ６２１−５に転送する。今度はキャッシュコヒーレンスコントローラ６２１−５は、ソース完了メッセージをメモリコントローラ６２３−２に送る。ソース完了メッセージを受け取ると、メモリコントローラ６２３−２は、メモリラインをアンロックでき、ホームクラスタ６２０におけるトランザクションはこれで完了である。他のプロセッサは、これでアンロックされたメモリラインにアクセスできる。
【００４９】
キャッシュコヒーレンスコントローラ６２１−３は、プローブレスポンスをキャッシュコヒーレンスコントローラ６０３−３に送る前に、リモートクラスタプローブレスポンスを待つので、ディレイがシステムに発生する。さまざまな実施形態によれば、プローブレスポンスは、キャッシュコヒーレンスコントローラ６０３−３において集められる。リモートクラスタにプローブレスポンスをホームクラスタを通じて送らせることによって、ホームクラスタプローブレスポンスおよびリモートクラスタプローブレスポンスの両方がホームキャッシュコヒーレンスコントローラにおいて遅延されえる。ある例では、リモートクラスタプローブレスポンスは、リクエストクラスタに届くためにはさらなるホップを移動しなければならない。リモートクラスタおよびリクエストクラスタ間のプローブレスポンスの送信のためのレイテンシは、ホームクラスタを通したリモートクラスタおよびリクエストクラスタ間のプローブレスポンスの送信についてのレイテンシより実質的に小さいかもしれない。ホームクラスタプローブレスポンスもこの追加されたホップの結果、遅延される。
【００５０】
当業者には理解されるように、リクエスト、プローブ、およびレスポンスメッセージを伴う具体的なトランザクションシーケンスは、特定の実現例に依存して変わりえる。ある例では、キャッシュコヒーレンスコントローラ６２１−３は、プローブレスポンスメッセージおよびリードレスポンスメッセージの両方をキャッシュコヒーレンスコントローラ６０３−３に送信する前に、メモリコントローラ６２３−１からのリードレスポンスメッセージを受け取るのを待ってもよい。他の例では、キャッシュコヒーレンスコントローラは、リクエストを発生する実際のプロセッサでありえる。いくつかのプロセッサは、プロセッサおよびキャッシュコヒーレンスコントローラの両方として動作しえる。さらに、リードおよびライトに関連付けられたさまざまなデータアクセスリクエストメッセージ、プローブ、およびレスポンスが考えられる。上述のように、キャッシュをスヌープするための任意のメッセージがプローブとして呼ばれえる。同様に、メモリラインがアンロックされるべきであることをメモリコントローラに示すための任意のメッセージは、ソース完了メッセージと呼ばれえる。
【００５１】
図６に示されるトランザクションは、図５Ａ〜５Ｄを参照して説明されたリモートプロセッサ、集合ローカルキャッシュ、プロービングエージェントペア、およびリモートメモリを含む多くの異なる機能を実行するキャッシュコヒーレンスコントローラの例を示すことに注意されたい。
【００５２】
ホームクラスタにおけるキャッシュコヒーレンスコントローラ６２１−１は、リモートプロセッサとして働いている。キャッシュコヒーレンスコントローラがリクエストをリクエストクラスタプロセッサから受け取るとき、キャッシュコヒーレンスコントローラは、リクエストクラスタプロセッサの代わりにリクエストするプロセッサ（requesting processor）として働くよう指示される。この場合、キャッシュコヒーレンスコントローラ６２１−１は、転送されたリクエストをプロセッサ６０１−１から受け入れ、それをメモリコントローラ６２３−１に送り、全てのローカルノードおよびメモリコントローラ６２３−１からのレスポンスを累積し、累積されたレスポンスおよびデータをリクエストするプロセッサ６０１−３に戻して転送する。キャッシュコヒーレンスコントローラ６２１−５は、ソース完了をローカルメモリコントローラ６２３−２に転送することも行う。
【００５３】
リクエストクラスタ６００におけるキャッシュコヒーレンスコントローラ６０３−１は、リモートメモリとして働く。リモートメモリとして、キャッシュコヒーレンスコントローラは、プロセッサからのリクエストを適切なリモートクラスタに転送し、ローカルノードがプローブされることを確実にするよう設計される。この場合、キャッシュコヒーレンスコントローラ６０３−１は、プローブをホームクラスタ６２０におけるキャッシュコヒーレンスコントローラ６２１−１に転送する。キャッシュコヒーレンスコントローラ６０３−２はまたローカルノード６０５、６０７、および６０９をプローブする。
【００５４】
リクエストクラスタ６４０におけるキャッシュコヒーレンスコントローラ６４１−１は、プロービングエージェントペア（probing agent pair）として働いている。上述のように、プロービングエージェントペアとして働いているキャッシュコヒーレンスコントローラがプローブをリモートクラスタから受け取るとき、キャッシュコヒーレンスコントローラは、プローブを受け入れ、それを全てのローカルノードへ転送する。キャッシュコヒーレンスコントローラは、レスポンスを累積し、最終レスポンスをリクエストクラスタに戻して送る。ここで、キャッシュコヒーレンスコントローラ６４１−１は、プローブをキャッシュブロック６４５、６４７、および６４９に関連付けられたローカルノードに送り、プローブレスポンスを集め、プローブレスポンスをホームクラスタ６２０におけるキャッシュコヒーレンスコントローラ６２１−３に送る。同様に、キャッシュコヒーレンスコントローラ６０３−２は、リクエストクラスタ６００におけるプロービングエージェントペアとしても働く。キャッシュコヒーレンスコントローラ６０３−２は、プローブリクエストをキャッシュブロック６０５、６０７、および６０９に関連付けられたローカルノードを含むローカルノードに転送する。
【００５５】
キャッシュコヒーレンスコントローラ６２１−２および６２１−３は、集合リモートキャッシュとしても働いている。キャッシュコヒーレンスコントローラ６２１−２は、メモリコントローラ６２３−１からのプローブを受け入れ、そのプローブを他のプロセッサクラスタ６００および６４０に転送する責任をもつ。より具体的には、キャッシュコヒーレンスコントローラ６２１−２は、プローブをリクエストクラスタ６００に対応するキャッシュコヒーレンスコントローラ６０３−２、およびリモートクラスタ６４０に対応するキャッシュコヒーレンスコントローラ６４１−１に転送する。上述のように、マルチクラスタアーキテクチャを用いることは、増加されたトラフィックおよび処理オーバヘッドのような他の不要な要素と共に、遅延を招きえる。
【００５６】
全てのクラスタがプローブされる必要はないが、プローブはマルチクラスタシステム中の全てのクラスタに送信される。例えば、もしプローブリクエストに関連付けられたメモリラインが無効（invalid）またはキャッシュからは存在しないなら、さまざまなクラスタに関連付けられたキャッシュの全てをプローブする必要はないかもしれない。コヒーレンスディレクトリがないシステムにおいては、典型的には全てのクラスタをスヌープすることが必要である。しかし、コヒーレンスディレクトリを用いることによって、システム中のトランザクション数は、トラフィックおよび処理オーバヘッドを最小化するためにシステム中のクラスタのサブセットだけをプローブすることによって、減らすことができる。
【００５７】
コヒーレンスディレクトリを用いることによって、特定のクラスタにおいて、グローバルメモリライン状態情報（それぞれのクラスタについての）はメモリコントローラまたはキャッシュコヒーレンスコントローラによって維持されアクセスされえる。さまざまな実施形態によれば、コヒーレンスディレクトリは、レスポンスの受領と共にプローブの分配をトラックし、かつ管理する。もしコヒーレンスディレクトリ情報が、特定のクラスタのプロービングが必要とされないことを示すなら、その特定のクラスタへのプローブは除去されえる。ある例では、コヒーレンスディレクトリは、リクエストするクラスタおよびリモートクラスタのプロービングが必要ではないことを示す。ホームクラスタにおけるキャッシュコヒーレンスコントローラは、プローブをリクエストおよびリモートクラスタに転送することなく、ローカルノードをプローブする。それからホームクラスタにおけるキャッシュコヒーレンスコントローラは、プローブレスポンスが受け取られた後に、レスポンスをリクエストクラスタに送る。しかし、典型的なマルチクラスタシステムにおいては、リクエストするクラスタは、所定の個数のレスポンスをさまざまなプローブされたクラスタから期待する。ある例では、もしマルチクラスタシステムが４つのクラスタを含むなら、リクエストクラスタは、全ての４つのクラスタ中のノードに関連付けられたプローブレスポンスを期待する。
【００５８】
図７は、プローブの管理およびフィルタリングを可能にするために用いられえるコヒーレンスディレクトリのある例である。さまざまなコヒーレンスディレクトリが利用可能である。ある例では、フルディレクトリがシステム中のそれぞれのメモリラインについてのエントリを提供する。この例では、コヒーレンスディレクトリは、メモリコントローラにおいて維持され、キャッシュコヒーレンスコントローラによってアクセス可能である。しかし、大きな量のシステムメモリを持つシステムにおいては、フルディレクトリは、効率的または実用的ではないかもしれない。さまざまな実施形態によれば、疎なディレクトリが、メモリラインの選択されたセットに関連付けられた限定された個数のエントリについて提供される。ある例では、コヒーレンスディレクトリ７０１は、メモリライン７１１に関連付けられた状態情報７１３、ダーティデータオーナー情報７１５、およびオキュパンシ−ベクタ７１７を含む。ある実施形態において、メモリライン状態は、変更され（modified）、所有され（owned）、共有され（shared）、および無効である（invalid）。
【００５９】
無効状態において、メモリラインは、任意のリモートクラスタに関連付けられたキャッシュ中にそのときはキャッシュされていない。共有状態において、メモリラインは、１つより多いキャッシュ中に存在しえ、しかしメモリラインはクリーンであり、これらキャッシュのどれにおいても変更されえない。メモリラインが共有状態にあるとき、どのキャッシュが関連するデータを共有するかを決定するために、オキュパンシーベクタ７１７がチェックされえる。オキュパンシーベクタ７１７は、Ｎビットのストリングとして実現されえ、ここでそれぞれのビットは、Ｎクラスタ中のキャッシュにおけるデータの利用可能性を表現する。どのクラスタがキャッシュ中で関連するメモリラインのコピーを保持するかをトラックするためのメカニズムは、ここではオキュパンシーベクタと呼ばれる。アドレス７４１を持つメモリラインは、共有された状態であり、オキュパンシーベクタ７１７は、クラスタ１および３がそれぞれ共有されたメモリラインをキャッシュ中に有することを示す。
【００６０】
変更された状態において、メモリラインは、変更されており、変更されたコピーが特定のクラスタに関連付けられたキャッシュ中に存在する。メモリラインが変更されるとき、ダーティデータオーナー情報フィールド７１５は、ダーティデータのオーナーを決定するためにチェックされえる。どのクラスタがキャッシュ中のメモリラインの変更されたコピーを所有するかを示すための任意のメカニズムは、ここではダーティデータオーナー情報フィールドと呼ばれる。ある例では、アドレス７８１に関連付けられたメモリラインが変更され、ダーティデータオーナーフィールド７１５はクラスタ２がメモリラインを所有することを示す。
【００６１】
所有された状態において、ダーティメモリラインは、単一のキャッシュによって所有されるが、複数の他のキャッシュ中で共有されて保持されているかもしれない。キャッシュを所有することによって変更されてはいるが、いまやリードオンリーである。この場合、メモリライン中に保持されたコピーは古くなっている。もしメモリラインが所有された状態にあるなら、ダーティデータオーナーフィールド７１５は、どのクラスタがダーティデータを所有するかを決定するためにアクセスされえる。ある例では、アドレス７６１に関連付けられたメモリラインは、所有された状態にあり、クラスタ４によって所有される。どの他のキャッシュが関連するデータを有しえるかを決定するためにオキュパンシーベクタ７１７もチェックされえる。この例では、オキュパンシーベクタ７１７は、クラスタ２、３、および４がそれぞれキャッシュ中のメモリラインに関連付けられたデータのコピーを有することを示す。
【００６２】
コヒーレンスディレクトリ７０１は、変更、所有、共有、および無効の４つの状態を含むが、特定の実現例は、異なる状態のセットを用いえることに注意されたい。ある例では、システムは、変更、排他、所有、共有、および無効の５つの状態を有しえる。排他状態においては、メモリラインは、リモートクラスタ中の特定のノードにアクセス可能であるかもしれないが、リモートクラスタ中のノードは、データをキャッシュラインにまだ書き込みしていない。本発明の技術は、さまざまな異なる可能なメモリライン状態と共に用いられえる。
【００６３】
リクエストクラスタ中のプロセッサが特定のメモリラインに対してリードリクエストのようなトランザクションを実行するとき、そのプロセッサは関連するキャッシュにアクセスする。多くの実現例において、特定のクラスタ中のそれぞれのプロセッサは、関連するキャッシュを有する。もしメモリラインがキャッシュ中で利用可能でなければ、リクエストはキャッシュコヒーレンスコントローラを通してホームクラスタへ転送される。ある実施形態においては、ホームクラスタは、リクエストのメモリラインを含むアドレス空間を有するプロセッサのクラスタである。それからキャッシュコヒーレンスコントローラは、どのクラスタがリクエストに答えるためにプローブされなければならないかを決定するために、コヒーレンスディレクトリにアクセスしえる。コヒーレンスディレクトリは、クラスタ間で送信されるプローブの個数を減少させることを可能にする。
【００６４】
コヒーレンスディレクトリにアクセスすることによってシステム中のトランザクションの個数を減少させるためのメカニズムは、出願日２００２年１１月４日の共に「Methods and Apparatus for Managing Probe Requests」と題された、David B. Glascoによる米国特許出願第１０／２８８，３９９号および第１０／２８８，３４７号に記載されており、それらの全体が全ての目的のために参照によって援用される。クラスタ間のトランザクションの個数を減らすことによって、帯域幅が確保されトランザクションレイテンシが減るので、システム効率は改善される。コヒーレンスディレクトリは、クラスタ間トランザクションを減らす一つのメカニズムを提供する。さまざまな実施形態によれば、リモートデータキャッシュは、クラスタ間トランザクションを減らすもう一つのメカニズムである。
【００６５】
さまざまな実施形態によれば、それぞれのクラスタ中にキャッシングのもう１つのレベルが提供されることによって、もしそれぞれのプロセッサに関連付けられたキャッシュがメモリライン中にリクエストを保持しないなら、プローブをホームクラスタに転送する前に、クラスタに関連付けられたキャッシュがチェックされえる。ある例では、リモートデータキャッシュは、それぞれのクラスタ中に含まれ、それぞれのクラスタのキャッシュコヒーレンスコントローラによってアクセス可能である。それぞれのプロセッサに関連付けられたキャッシュとは異なり、この例では、単一のリモートデータキャッシュがクラスタ中の複数のプロセッサのために提供される。もし特定のプロセッサによってリクエストされたメモリラインがそのプロセッサに関連付けられたキャッシュ中に見つからないなら、キャッシュコヒーレンスコントローラは、そのリクエストをホームクラスタに転送する必要は必ずしもない。その代わりキャッシュコヒーレンスコントローラは、メモリラインがリモートデータキャッシュ中に存在するかを決定するためにリモートデータキャッシュをチェックしえる。もしメモリラインがリモートデータキャッシュ中に存在するなら、ホームクラスタにはプローブが転送される必要はなく、キャッシュコヒーレンスコントローラはその代わりにリモートデータキャッシュ中のデータを用いてトランザクションに応答することができる。
【００６６】
本発明の技術を用いることによって、リモートデータキャッシュは、リクエストをホームクラスタに転送することなく、リードブロック、リードブロックシェアド（read block shared）、およびリードブロックモディファイド（read block modified）のようなリクエストに応答しえる。
【００６７】
図８は、リモートデータキャッシュの概略図である。リモートデータキャッシュは、プローブをリモートクラスタに転送する必要なく、キャッシュコヒーレンスコントローラが効率的にある種のトランザクションをローカルに扱うことを可能にする。ローカルキャッシュの後に、しかしホームクラスタメモリコントローラの前にアクセスされる、ローカルプロセッサによってアクセスされるリモートクラスタからのデータを保持する任意のキャッシュは、ここではリモートデータキャッシュと呼ばれる。ある例では、リモートデータキャッシュは、リード、リードブロックシェアド、またはリードブロックモディファイドリクエストのようなリクエストがホームクラスタに転送される前に、キャッシュコヒーレンスコントローラによってアクセスされる。リモートデータキャッシュは、プローブをリモートクラスタに転送する必要なしに、トランザクションがローカルクラスタにおいて扱われることを可能にする。
【００６８】
さまざまな実施形態によれば、リモートデータキャッシュ８０１は、メモリラインフィールド８１１を含む。さまざまなメモリラインのアドレスは、特定のメモリラインがリモートデータキャッシュ中に存在するかを決定するために、キャッシュコヒーレンスコントローラによる効率的なアクセスを可能にするよう、このフィールド内に提供される。エントリは、典型的には、メモリラインがプロセッサキャッシュから追い出されるときに、リモートデータキャッシュに追加される。リモートデータキャッシュ８０１は、状態情報８１３および実際のキャッシュされたデータ８１５も含む。ある例では、アドレス８２１は、無効の状態を有し、関連付けられたキャッシュデータを有しない。典型的な場合においては、無効な状態にあるメモリラインは、リモートデータキャッシュ中に単に含まれないことに注意されたい。アドレス８４１は、共有された状態で保持されるデータ８４３を含む。ある例では、リモートデータキャッシュ中に共有された状態で保持されるデータは、そのリクエストをホームクラスタに転送することなしに、リードブロックおよびリードブロックシェアドリクエストを満たすために用いられえる。アドレス８６１は、所有された状態で保持されるデータ８６３を有する。さまざまな実施形態によれば、所有された状態で保持されるデータもリードブロックおよびリードブロックシェアドトランザクションを満たすために用いられえる。
【００６９】
場合によっては、変更された状態においてはリモートデータキャッシュ８０１にデータが保持されないことに注意されたい。リモートデータキャッシングを持つシステムについては、リモートデータキャッシュは、リモートクラスタからデータをキャッシュするために用いられえる。そのようなシステムにおいては、表示的なＭＥＯＳＩキャッシュコヒーレンスプロトコルが典型的には採用される。そのようなプロトコルにおいては、ローカルプロセッサキャッシュは、メモリラインをキャッシュから追い出しえ、もしそのラインがダーティなら（変更されたか、所有された状態）、データはメモリにライトバックされる。リモートデータキャッシュは、プロセッサキャッシュおよびシステムメモリの間に位置するが、ライトバックを守り、しかしラインをどのようにリモートデータキャッシュにインストールするかを決定するための充分な情報を有しない。典型的なプロセッサキャッシュは、この情報を有する。
【００７０】
しかし、リモートデータキャッシュは、キャッシュコヒーレンスコントローラと関連付けられる。場合によっては、キャッシュコヒーレンスコントローラは、プロセッサキャッシュから追い出されつつあるラインが変更された、または共有された状態にあったかについての情報を有しない。その結果、リモートデータキャッシュは、保守的なアプローチをとり、そのメモリラインがひょっとすると変更された状態でインストールされたかもしれなくても、所有された状態でメモリラインをインストールする。同じやり方で、リモートデータキャッシュは、そのメモリラインがひょっとすると排他的状態でインストールされたかもしれなくても、時には保守的にメモリラインを共有された状態でインストールする。保守的なアプローチをとることによって、もしメモリラインが排他的または変更された状態であるとわかっていたなら扱えたであろうリードブロックモディファイドのようなトランザクションが、リモートデータキャッシュによっては扱えず、その結果、ホームクラスタに転送される。ホームクラスタに転送することは、必ずしも用いられなければならないわけではないシステムリソースを使う。
【００７１】
本発明の技術は、リモートデータキャッシュがメモリラインを共有された状態および所有された状態でインストールするだけでなく、排他的状態および変更された状態でインストールすることも可能にするいくつかのメカニズムを提供する。ある例では、メモリラインをリモートデータキャッシュにインストールするために用いられる変更された、または所有された状態の情報は、コヒーレンスディレクトリから得られる。他の例では、状態情報は、プロセッサからの拡張されたソース完了メッセージ（augmented source done message）から得られる。
【００７２】
本発明の技術は、リモートデータキャッシュ中の全てのデータが共有されたまたは所有された状態で保持されることを可能にするだけでなく、変更された状態および排他的状態にデータを保持するメカニズムを提供する。変更された状態または排他的状態に保持されるリモートデータキャッシュ中のデータは、リードブロック、リードブロックシェアド、およびリードブロックモディファイドトランザクションを満たすことができる。
【００７３】
リモートデータデータキャッシュ８０１は、ペンディング状態で情報を保持もする。ペンディング状態は、リモートデータキャッシュに初めに入れられるが、まだソース完了によって確認されていないデータを保持するために用いられる。ペンディング状態で保持されるデータは、そのデータが初めにリモートデータキャッシュに書き込まれた後、しかし最終レスポンストランザクションが受け取られる前に、プロセッサによって受け取られたプローブによって無効にされえる。
【００７４】
図９は、リモートデータキャッシュが用いられえるトランザクションフローを示す概略図である。さまざまな実施形態によれば、リクエストクラスタ９００中のプロセッサ９０１−１は、リードリクエストのようなデータアクセスリクエストをキャッシュコヒーレンスコントローラ９０３−１に送る。キャッシュコヒーレンスコントローラ９０３−１は、ペンディングバッファ中のトランザクションをトラックし、リモートデータキャッシュ９０５を用いてリクエストがローカルに扱えるかを決定する。さまざまな実施形態によれば、もしリクエストが特定のメモリラインについてのリードブロックまたはリードブロックシェアドである場合、リクエストは、もしメモリラインがリモートデータキャッシュ中に変更、所有、排他、または共有状態のいずれかで保持されるならローカルに扱いえる。換言すれば、リクエストは、もしメモリラインの有効なコピーがリモートデータキャッシュ中にあるならローカルに扱いえる。しかし、もしリクエストがリードブロックモディファイドのようなトランザクションであるなら、リクエストは、メモリラインがリモートデータキャッシュ中に変更または排他状態で保持される場合のみローカルに扱いえる。もしリクエストがローカルに扱いえるなら、リモートデータキャッシュは、データレスポンスをプロセッサ９０１−３へ送るキャッシュコヒーレンスコントローラ９０３−３へ情報を提供する。しかし、もしリクエストがローカルに扱えないなら、キャッシュコヒーレンスコントローラ９０３−３は、リクエストをホームクラスタ９２０に転送する。
【００７５】
いったんリモートデータデータキャッシュが、それがリクエストを満たしえることを決定すると、トランザクションが完了するまで、それはラインをロックし、全ての入プローブリクエストをブロックする。リモートデータキャッシュは、メモリラインについてのテンポラリシリアライゼーションポイントをリモートデータキャッシュにおいて効果的に作る。すなわち、メモリコントローラがするようにトランザクションが完了するまで、ラインをロックする。
【００７６】
図９は、システム中のトランザクション数を減らすためにリモートデータキャッシュ中のエントリが用いられるトランザクションフローである。図１０および１１は、リモートデータキャッシュ中にエントリがインストールされるトランザクションフローを示す概略図である。図１０は、エントリがリモートデータキャッシュに追加され、データがシステムメモリにライトバックされるトランザクションを示す。図１１は、システムメモリにデータを書き込むことなく、エントリがリモートデータキャッシュに追加されるトランザクションを示す。
【００７７】
図１０を参照して、リクエストクラスタ１０００中のプロセッサ１００１−１は、ライトバックトランザクションをキャッシュコヒーレンスコントローラ１００３ー１に送る。ライトバックトランザクションは、メモリラインがプロセッサに関連付けられたキャッシュから追い出されるときに典型的には発生される。キャッシュコヒーレンスコントローラ１００３−１は、データをペンディング状態でリモートデータキャッシュ１００５−１に書き込み、ライトバックをホームクラスタに転送する。ホームクラスタ１０２０中のキャッシュコヒーレンスコントローラ１０２１−１は、ライトバックを、データをシステムメモリに書き込むメモリコントローラ１０２３ー１に転送する。メモリコントローラ１０２３−１は、それから、完了メッセージをキャッシュコヒーレンスコントローラ１０２１−３に送り、これが完了メッセージをリクエストクラスタ１０００プロセッサ１００１−２にキャッシュコヒーレンスコントローラ１００３−２を通して転送する。プロセッサ１００１ー２は、ソース完了メッセージをキャッシュコヒーレンスコントローラ１００３−３に送る。ソース完了メッセージは典型的には、メモリラインが中間プローブによって無効にされたかを記す指示子を含む。もしソース完了が、ラインが無効にされたことを示すなら、メモリラインはリモートデータキャッシュから除去されるか、または無効状態に置かれる。もしラインが無効にされなかったなら、リモートデータキャッシュ中のエントリの状態は、共有に保守的にアップデートされる。それからソース完了はホームクラスタメモリコントローラ１０２３−２にキャッシュコヒーレンスコントローラ１００３ー３および１０２１−５を通して転送される。
【００７８】
図１０は、データがメモリにライトバックされる場合を示す。場合によっては、データはメモリにライトバックされる必要は必ずしもない。ある例では、所有された状態のメモリラインの追い出しは、所有された状態におけるリモートデータキャッシュ中のメモリラインのインストールにつながる。この特定の場合において、リモートデータキャッシュは、ダーティデータを保持しない。これは、リモートデータキャッシュが静かにエントリを追い出すことを可能にする。
【００７９】
図１１は、メモリラインをメモリにライトバックすることなく、リモートデータキャッシュ中にメモリラインをインストールするトランザクションフローを示す概略図である。プロセッサ１１０１−１は、ライトバックをキャッシュコヒーレンスコントローラ１１０３−１に送る。メモリラインは、リモートデータキャッシュ１１０５−１にインストールされ、使用可能になる。完了メッセージは、プロセッサ１１０１−２に送られ、これは今度はソース完了をキャッシュコヒーレンスコントローラ１１０３−３に送る。この場合、リモートデータキャッシュは、もしエントリがリモートデータキャッシュから追い出されるなら、メモリにライトバックされるダーティデータを保持しえる。
【００８０】
図１２は、コヒーレンスディレクトリが状態情報を提供するライトバックについてのトランザクションフローを示す概略図である。さまざまな実施形態によれば、リモートデータキャッシュは、ライトバックされつつあるメモリラインが所有または変更状態にあるかを知らず、その結果、それが所有状態であることを保守的に推定しなければならない。本発明の技術は、ホームクラスタが、メモリラインが所有または変更状態にあったかについての情報をリモートデータキャッシュに提供することを可能にする。リクエストクラスタ１２００中のプロセッサ１２０１−１は、ライトバックをキャッシュコヒーレンスコントローラ１２０３−１に送る。このデータは、ペンディング状態でリモートデータキャッシュ１２０５−１に書き込まれる。キャッシュコヒーレンスコントローラ１２０３−１は、ライトバックをホームクラスタ１２２０中のキャッシュコヒーレンスコントローラ１２２１−１を通してメモリコントローラ１２２３−１に転送することも行う。
【００８１】
メモリコントローラ１２２３−１は、メモリラインをシステムメモリにライトバックし、完了メッセージをキャッシュコヒーレンスコントローラ１２２１−３に送る。キャッシュコヒーレンスコントローラ１２２１−３は、状態情報をコヒーレンスディレクトリから得て、完了メッセージ中のその状態情報をキャッシュコヒーレンスコントローラ１２０３−２に送る。さまざまな実施形態によれば、状態情報は、メモリラインが所有状態または変更状態で保持されたかを示す所有／変更ビットの形で送られる。キャッシュコヒーレンスコントローラ１２０３−２は、状態情報をそのペンディングバッファに書き込み、完了メッセージをプロセッサ１２０１ー２に送る。プロセッサ１２０１−２は、ソース完了メッセージをキャッシュコヒーレンスコントローラ１２０３−３に送る。リモートデータキャッシュ１２０５−３中のメモリラインの状態は、ここでペンディングから所有／変更ビットによって提供された任意の状態へと変換されえる。ソース完了は、メモリコントローラ１２２３−２にキャッシュコヒーレンスコントローラ１２２１−５を通して転送される。
【００８２】
図１３は、コヒーレンスディレクトリを用いたリモートデータキャッシュの管理を示すフロープロセス図である。１３０１において、ライトバックトランザクションがプロセッサから受け取られる。ある例によっては、ライトバックは、ダーティメモリラインの追い出しの結果、発生される。１３０３において、データがリモートデータキャッシュに書き込まれ、状態がペンディングに設定される。ペンディング状態は、ソース完了がプロセッサによって送られる前に起こりえる中間無効化トランザクション（intervening invalidating transactions）を意味する。１３０５において、ライトバックがホームクラスタに転送される。ライトバックは、データが実際にメモリにライトバックされるときに、ホームクラスタに転送されることに注意されたい。１３０７において、ホームクラスタのコヒーレンスディレクトリから取り出された所有または変更状態情報と共に完了メッセージがホームクラスタから受け取られる。１３１１において、所有または変更情報がペンディングバッファ中に記憶される。１３１３において、完了メッセージがプロセッサに転送される。１３１５において、ソース完了メッセージがプロセッサから受け取られる。この時点で、１３１７においてペンディングバッファは、メモリラインに関連付けられた状態情報についてアクセスされえる。
【００８３】
無効なビットがセットされているかを決定するためにソース完了メッセージもチェックされる。無効なビットは、ライトバックが発生された後に、しかしデータがメモリコントローラにおいてコミットされる前にオーバライトされたために、ライトバックデータが無効であることをメモリコントローラに知らせるために用いられる。もし無効ビットが１３１９においてソース完了にセットされるなら、リモートデータキャッシュ状態は、１３２１において無効にセットされる。ある例では、データは、リモートデータキャッシュから除去される。もし無効ビットが１３１９においてセットされないなら、１３２３においてメモリラインが所有状態で保持されたかが決定される。コヒーレンスディレクトリからの所有または変更情報によって示されるように、もしメモリラインが所有状態で保持されたなら、リモートデータキャッシュ状態は、１３２５において共有にセットされる。もし所有または変更情報が１３２３において変更にセットされるなら、メモリラインについてのリモートデータキャッシュ状態は、１３２７において排他にセットされる。所有または変更情報を提供することによって、本発明の技術は、リモートデータキャッシュの状態が排他にセットされえることを可能にする。リモートデータキャッシュ状態を排他にセットすることによって、リードブロックモディファイドを含むより多くのトランザクションがリクエストクラスタ中で扱われえる。
【００８４】
図１４は、プロセッサが拡張されたソース完了を提供するライトバックについてのトランザクションフローを示す概略図である。リクエストクラスタ１４００中のプロセッサ１４０１−１は、ライトバックをキャッシュコヒーレンスコントローラ１４０３−１に送る。このデータは、ペンディング状態のリモートデータキャッシュ１４０５−１に書き込まれる。キャッシュコヒーレンスコントローラ１４０３−１は、ライトバックをメモリコントローラ１４２３−１にホームクラスタ１４２０中のキャッシュコヒーレンスコントローラ１４２１−１を通して転送する。
【００８５】
メモリコントローラ１４２３−１は、メモリラインをシステムメモリにライトバックし、完了メッセージをキャッシュコヒーレンスコントローラ１４２１−３に送る。キャッシュコヒーレンスコントローラ１４２１−３は、完了メッセージをキャッシュコヒーレンスコントローラ１４０３−２に送る。キャッシュコヒーレンスコントローラ１４０３−２は、完了メッセージをプロセッサ１４０１−２に送る。プロセッサ１４０１−２は、拡張されたソース完了メッセージ（augmented source done message）をキャッシュコヒーレンスコントローラ１４０３−３に送る。トランザクションが完了したことを示し、メモリラインが所有または変更状態であったかについての情報を提供する、プロセッサからメモリコントローラに送られる任意のメッセージは、ここでは拡張されたソース完了メッセージと呼ばれる。さまざまな実施形態によれば、拡張されたソース完了メッセージは、追い出しの前にプロセッサキャッシュ中でメモリラインの状態が所有または変更だったかを示す所有／変更ビットを含む。リモートデータキャッシュ１４０５−３中のメモリラインの状態は、ここでペンディングから所有／変更ビットによって提供された任意の状態へと変換されえる。ソース完了は、メモリコントローラ１４２３−２にキャッシュコヒーレンスコントローラ１４２１−５を通して転送される。コヒーレンスディレクトリが必要ではないので、拡張されたソース完了メッセージは、データがホームクラスタにライトバックされないときでさえも、所有／変更情報を提供するのに用いられえる。
【００８６】
図１５は、拡張されたソース完了情報を用いたリモートデータキャッシュの管理を示すフロープロセス図である。１５０１において、ライトバックトランザクションがプロセッサから受け取られる。１５０３において、データがリモートデータキャッシュに書き込まれ、状態がペンディングに設定される。１５０５において、データがメモリにライトバックされるかが決定される。１５０５においてもしデータがメモリにライトバックされるなら、ライトバックは１５１１においてホームクラスタに転送される。完了メッセージは、１５１３においてホームクラスタから受け取られる。完了メッセージは、１５１５においてプロセッサに転送され、拡張されたソース完了は、プロセッサから１５１７において受け取られる。
【００８７】
拡張されたソース完了から無効ビットがセットされたかが１５２１において決定される。もし無効ビットがセットされたなら、リモートデータキャッシュ状態は、１５５１において無効にセットされる。そうでなければ、所有または変更ビットが所有にセットされているかが１５５３において決定される。もし所有または変更ビットが所有にセットされたなら、リモートデータキャッシュ状態は、１５５５において共有にセットされる。もし所有または変更ビットが変更にセットされたなら、リモートデータキャッシュ状態は、１５５７において排他にセットされる。拡張されたソース完了情報を用いてリモートデータキャッシュエントリを管理することは、データがメモリにライトバックされないときでさえも、効果的な管理を可能にする。ある例では、もし所有または変更メモリラインが追い出されるなら、ライトバックが１５０５において必要である。他の例では、もし共有または排他メモリラインが追い出されるなら、１５０５においてライトバックは必要ではない。しかし、リモートデータキャッシュは、後の時点でメモリにライトバックするいくつかの他のメカニズムを有しえる。もしライトバックが必要とされないなら、完了メッセージがプロセッサに１５３１において送られる。１５３３において、拡張されたソース完了がプロセッサから受け取られる。１５３５において、無効ビットが拡張されたソース完了中でセットされたかが決定される。もし無効ビットがセットされたなら、リモートデータキャッシュ状態は、１５４１において無効にセットされる。そうでなければ、所有または変更ビットが所有にセットされたかが決定される。もし１５４３において所有または変更ビットが所有にセットされたなら、リモートデータキャッシュ状態は所有にセットされる。もし所有または変更情報が変更にセットされたなら、リモートデータキャッシュ状態は、１５４７において変更にセットされる。
【００８８】
データは、さまざまなやり方でリモートデータキャッシュにロードされえる。上述のある例では、データは、キャッシュラインがプロセッサキャッシュから追い出されるときにロードされる。しかし、データは、他のやり方でロードされてもよい。例えば、データは、リードブロックに対するメモリコントローラからのデータレスポンスと共に、リモートデータキャッシュにロードされえる。この場合、ラインは、共有状態でリモートデータキャッシュにインストールされる。例えば、図６において、メモリコントローラからのデータレスポンスがリクエストしているクラスタのキャッシュコヒーレンスコントローラ６０３−４において受け取られるとき、データは、プロセッサ６０１−４に加えてリモートデータキャッシュに送られえる。
【００８９】
本発明は、その具体的な実施形態を参照して示され記述されてきたが、記載された実施形態の形態および詳細の変更が本発明の精神または範囲から逸脱することなくなされえることが当業者には理解されよう。例えば本発明の実施形態は、ポイントツーポイント、スイッチ、またはバスアーキテクチャを通して接続されたマルチプロセッサクラスタと共に採用されえる。他の例では、プロセッサのマルチクラスタは、単一のキャッシュコヒーレンスコントローラを共有しえ、または複数のキャッシュコヒーレンスコントローラが単一のクラスタ中で用いられえる。従って本発明の範囲は添付の特許請求の範囲を参照して決定されるべきである。
【図面の簡単な説明】
【００９０】
【図１Ａ】マルチクラスタを有するシステムを示す概略図である。
【図１Ｂ】マルチクラスタを有するシステムを示す概略図である。
【図２】複数のプロセッサを有するクラスタの概略図である。
【図３】キャッシュコヒーレンスコントローラの概略図である。
【図４】単一のクラスタ中のプロセッサからのデータアクセスリクエストについてのトランザクションフローを示す概略図である。
【図５Ａ】キャッシュコヒーレンスコントローラの機能を示す概略図である。
【図５Ｂ】キャッシュコヒーレンスコントローラの機能を示す概略図である。
【図５Ｃ】キャッシュコヒーレンスコントローラの機能を示す概略図である。
【図５Ｄ】キャッシュコヒーレンスコントローラの機能を示す概略図である。
【図６】複数のプローブ応答を持つプローブリクエストについてのトランザクションフローを示す概略図である。
【図７】キャッシュコヒーレンスディレクトリを示す概略図である。
【図８】リモートデータキャッシュを示す概略図である。
【図９】リモートデータキャッシュを用いたトランザクションフローを示す概略図である。
【図１０】メモリへのライトバックでリモートデータキャッシュをアップデートするトランザクションフローを示す概略図である。
【図１１】メモリへのライトバックなしでリモートデータキャッシュをアップデートするトランザクションフローを示す概略図である。
【図１２】コヒーレンスディレクトリを用いてリモートデータキャッシュをアップデートするトランザクションフローを示す概略図である。
【図１３】コヒーレンスディレクトリを用いてリモートデータキャッシュアップデートを示すフロープロセス図である。
【図１４】拡張されたソース完了情報を用いてリモートデータキャッシュをアップデートするトランザクションフローを示す概略図である。
【図１５】拡張されたソース完了情報を用いてリモートデータキャッシュアップデートを示すフロープロセス図である。
【図１Ａ】
2007501479.tif 000003
【図１Ｂ】
2007501479.tif 000004
【図２】
2007501479.tif 000005
【図３】
2007501479.tif 000006
【図４】
2007501479.tif 000007
【図５Ａ】
2007501479.tif 000008
【図５Ｂ】
2007501479.tif 000009
【図５Ｃ】
2007501479.tif 000010
【図５Ｄ】
2007501479.tif 000011
【図６】
2007501479.tif 000012
【図７】
2007501479.tif 000013
【図８】
2007501479.tif 000014
【図９】
2007501479.tif 000015
【図１０】
2007501479.tif 000016
【図１１】
2007501479.tif 000017
【図１２】
2007501479.tif 000018
【図１３】
2007501479.tif 000019
【図１４】
2007501479.tif 000020
【図１５】
2007501479.tif 000021
【国際調査報告】
2007501479.tif 000022