(57)【要約】【課題】マルチプロセッサ、マルチクラスタシステムにおけるデータアクセスの効率を向上させるための方法および装置を提供する。【解決手段】システム中のさまざまなクラスタに関連付けられるリモートデータキャッシュを提供することによって、さまざまなトランザクションがローカルに完了することを可能にするメカニズムが実現される。このリモートデータキャッシュは、リモートクラスタ中に保持されるメモリラインについてのデータおよび状態情報を受け取る。もしリクエストに応答するための情報がリモートデータキャッシュ中で利用可能なら、完了指示子を持つレスポンスがリクエストするプロセッサに提供される。完了指示子は、ローカルまたはリモートノードをプローブする必要なしに、リクエストが満たされることを可能にする。【選択図】図９
2007501466.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュアクセスリクエストへのレスポンスを提供する方法であって、
キャッシュコヒーレンスコントローラにおけるメモリラインに関連付けられるキャッシュアクセスリクエストをプロセッサ群のクラスタ中のプロセッサから受け取ることであって、前記プロセッサ群のクラスタは、ポイントツーポイントアーキテクチャにおいて相互接続される、受け取ること、
前記キャッシュアクセスリクエストについてのレスポンス情報を、前記キャッシュコヒーレンスコントローラに関連付けられるリモートデータキャッシュから得ること、および
前記プロセッサへ完了指示子を持つレスポンス情報を提供すること
を含む方法。
【請求項２】
請求項１に記載の方法であって、レスポンス情報は、レスポンスパケット中に提供される方法。
【請求項３】
請求項１〜２のいずれかに記載の方法であって、レスポンス情報は状態情報を含む方法。
【請求項４】
請求項２に記載の方法であって、レスポンス情報は、データを含む方法。
【請求項５】
請求項１〜４のいずれかに記載の方法であって、前記完了指示子は、前記キャッシュコヒーレンスコントローラからの前記レスポンスが唯一のレスポンスであることを前記プロセッサに知らせる方法。
【請求項６】
請求項１〜５のいずれかに記載の方法であって、前記プロセッサは、リクエストクラスタ中のリクエストプロセッサである方法。
【請求項７】
請求項１〜６のいずれかに記載の方法であって、前記完了指示子は、前記キャッシュコヒーレンスコントローラがローカルまたはリモートノードをプローブすることを避けることを可能にする方法。
【請求項８】
請求項１〜７のいずれかに記載の方法であって、前記レスポンス中に前記完了指示子を識別すると、前記プロセッサはソース完了を送る方法。
【請求項９】
請求項８に記載の方法であって、前記プロセッサは、前記ソース完了を前記キャッシュコヒーレンスコントローラに送る方法。
【請求項１０】
請求項９に記載の方法であって、前記プロセッサは、前記ソース完了をメモリコントローラとして働く前記キャッシュコヒーレンスコントローラに送る方法。
【請求項１１】
処理クラスタであって、
ポイントツーポイントアーキテクチャで相互接続される複数のプロセッサ群、
前記複数のプロセッサの中の第１プロセッサからのメモリラインに関連付けられるキャッシュアクセスリクエストを受け取り、前記キャッシュコヒーレンスコントローラに関連付けられるリモートデータキャッシュからの前記キャッシュアクセスリクエストについてのレスポンス情報を得て、かつ前記プロセッサに完了指示子を持つレスポンス情報を提供するよう構成されるキャッシュコヒーレンスコントローラ
を備える処理クラスタ。
【請求項１２】
請求項１１に記載の処理クラスタであって、レスポンス情報は、レスポンスパケット中に提供される処理クラスタ。
【請求項１３】
請求項１１〜１２のいずれかに記載の処理クラスタであって、レスポンス情報は、状態情報を含む処理クラスタ。
【請求項１４】
請求項１２に記載の処理クラスタであって、レスポンス情報は、データを含む処理クラスタ。
【請求項１５】
請求項１１〜１４のいずれかに記載の処理クラスタであって、前記完了指示子は、前記キャッシュコヒーレンスコントローラからの前記レスポンスが唯一のレスポンスになることを前記第１プロセッサに通知する処理クラスタ。
【請求項１６】
請求項１１〜１５のいずれかに記載の処理クラスタであって、前記第１プロセッサは、リクエストクラスタ中のリクエストプロセッサである処理クラスタ。
【請求項１７】
請求項１１〜１６のいずれかに記載の処理クラスタであって、前記完了指示子は、前記キャッシュコヒーレンスコントローラがローカルまたはリモートノードをプローブすることを避けることを可能にする処理クラスタ。
【請求項１８】
請求項１〜７のいずれかに記載の処理クラスタであって、前記レスポンス中に前記完了指示子を識別すると、前記第１プロセッサはソース完了を送る処理クラスタ。
【請求項１９】
請求項１８に記載の処理クラスタであって、前記第１プロセッサは、前記ソース完了を前記キャッシュコヒーレンスコントローラに送る処理クラスタ。
【請求項２０】
キャッシュコヒーレンスコントローラであって、
キャッシュコヒーレンスコントローラにおけるメモリラインに関連付けられるキャッシュアクセスリクエストをプロセッサ群のクラスタ中のプロセッサから受け取る手段であって、前記プロセッサ群のクラスタは、ポイントツーポイントアーキテクチャにおいて相互接続される、受け取る手段、
前記キャッシュアクセスリクエストについてのレスポンス情報を、前記キャッシュコヒーレンスコントローラに関連付けられるリモートデータキャッシュから得る手段、および
前記プロセッサへ完了指示子を持つレスポンス情報を提供する手段
を備えるキャッシュコヒーレンスコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、２００２年１１月４日に出願されたDavid B. GlascoによるMethods And Apparatus For Managing Probe Requestsと共に題された米国特許出願第１０／２８８，３４７号および第１０／２８８，３９９号に関し、これらの全体が全ての目的のためにここで参照によって援用される。本発明は、２００３年５月２０日に出願されたDavid B. GlascoによるMethods And Apparatus For Providing Cache State Informationと題された米国特許出願第１０／４４２，８４５号にも関し、この全体が全ての目的のためにここで参照によって援用される。
【０００２】
本発明は一般にマルチプロセッサシステムにおいてデータにアクセスすることに関する。より具体的には、本発明は、マルチクラスタアーキテクチャを有するマルチプロセッサシステムにおいてキャッシュコヒーレンシを維持しつつ、データアクセス効率を改良する技術を提供する。
【背景技術】
【０００３】
パフォーマンスの制限のために、単一のメモリ空間でシステム中のプロセッサ群を接続するポイントツーポイントアーキテクチャが開発されるようになっている。ある例では、個別プロセッサは、互いに複数のポイントツーポイントリンクを通して直接に接続されることによってプロセッサ群のクラスタを形成しえる。プロセッサ群の別個のクラスタも接続されえる。ポイントツーポイントリンクは、コプロセッシングおよびマルチプロセッシング機能のための帯域幅を大きく増加させる。
【０００４】
それぞれのクラスタにおいてコンピュータシステム中のクラスタ内およびクラスタ間のトランザクションの個数を減らすことを可能にするメカニズムが提供される。しかし、多くの場合において、このメカニズムはトランザクションの個数を最適には減らさない。マルチプロセッサ、マルチクラスタシステムにおいては、プロセッサは、ローカルまたはリモートノード内でキャッシュされえる特定のメモリライン上で操作を実行するためにプローブリクエストを送る。一部の共通の操作は、メモリライン上でのリードブロック、リードブロックシェアド、およびリードブロックモディファイド操作を含む。多くの例において、トランザクションは、もし追加のメカニズムが提供されたならトランザクションがローカルに取り扱えるときでさえ、リモートクラスタに転送される。しかしトランザクションをローカルに扱うメカニズムは制限される。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
したがって、ポイントツーポイントリンクを用いて接続されたマルチプロセッサのマルチクラスタを有するシステムにおいて、キャッシュアクセスリクエスト効率を改善する技術を提供するのが望ましい。
【課題を解決するための手段】
【０００６】
本発明によれば、マルチプロセッサ、マルチクラスタシステムにおけるデータアクセスの効率を増すための方法および装置が提供される。システム中のさまざまなクラスタに関連付けられるリモートデータキャッシュを提供することによって、さまざまなトランザクションがローカルに完了することを可能にするメカニズムが実現される。このリモートデータキャッシュは、リモートクラスタ中に保持されるメモリラインについてのデータおよび状態情報を受け取る。もしリクエストに応答するための情報がリモートデータキャッシュ中で利用可能なら、完了指示子を持つレスポンスがリクエストするプロセッサに提供される。完了指示子は、ローカルまたはリモートノードをプローブする必要なしに、リクエストが満たされることを可能にする。
【０００７】
ある実施形態において、キャッシュアクセスリクエストへのレスポンスを提供する方法が提供される。キャッシュコヒーレンスコントローラにおけるメモリラインに関連付けられるキャッシュアクセスリクエストがプロセッサ群のクラスタ中のプロセッサから受け取られ、前記プロセッサ群のクラスタは、ポイントツーポイントアーキテクチャにおいて相互接続される。前記キャッシュアクセスリクエストについてのレスポンス情報が、前記キャッシュコヒーレンスコントローラに関連付けられるリモートデータキャッシュから得られる。前記プロセッサへ完了指示子を持つレスポンス情報が提供される。
【０００８】
他の実施形態において、処理クラスタが提供される。この処理クラスタは、複数のプロセッサおよびキャッシュコヒーレンスコントローラを含む。複数のプロセッサ群は、ポイントツーポイントアーキテクチャで相互接続される。キャッシュコヒーレンスコントローラは、前記複数のプロセッサの中の第１プロセッサからのメモリラインに関連付けられるキャッシュアクセスリクエストを受け取り、前記キャッシュコヒーレンスコントローラに関連付けられるリモートデータキャッシュからの前記キャッシュアクセスリクエストについてのレスポンス情報を得て、かつ前記プロセッサに完了指示子を持つレスポンス情報を提供するよう構成される。
【０００９】
本発明の性質および優位性のさらなる理解は、明細書および図面の残りの部分を参照することによって実現されよう。
【発明を実施するための最良の形態】
【００１０】
本発明は、以下の説明を添付の図面と併せて参照することによって最もよく理解されえ、図面は本発明の具体的な実施形態を図示するものである。
【００１１】
本発明を実施するための発明者によって考えられたベストモードを含む本発明のいくつかの具体的な実施形態が詳細にここで参照される。これら具体的な実施形態の例は、添付の図面に示される。本発明は、これら具体的な実施形態について説明されるが、本発明を記載された実施形態に限定するよう意図されてはいないことが理解されよう。むしろ、代替物、改変、および等価物を、添付の特許請求の範囲によって規定される本発明の精神および範囲内に含まれるとしてカバーするよう意図される。そのプロセッサ間でポイントツーポイント通信を有するマルチプロセッサアーキテクチャは、本発明の具体的な実施形態を実現するのに適する。以下の記載において、本発明の完全な理解を促すために多くの具体的な詳細が述べられている。本発明は、これら具体的な詳細の一部または全てなしでも実施されえる。本発明の趣旨を不必要にぼかさないために、よく知られたプロセス操作は詳細には記載されていない。さらに本発明が単一のエンティティを参照する場合、本発明の方法および装置は、文脈上明らかにそうでないと表されない限り、１より多いエンティティを用いて実現可能である。
【００１２】
マルチプロセッサ、マルチクラスタシステムにおいてデータアクセス効率を増す技術が提供される。ポイントツーポイントアーキテクチャにおいて、プロセッサ群のクラスタは、ポイントツーポイントリンクを通して互いに直接に接続されたマルチプロセッサを含む。従来のシェアドバスまたは外部ネットワークの代わりにポイントツーポイントリンクを用いることによって、マルチプロセッサは、同じメモリ空間を共有するシステムにおいて効率的に用いられる。従来のバスおよび外部ネットワークベースのマルチプロセッサアーキテクチャの帯域幅およびレイテンシの制限の多くを回避することによって、処理およびネットワーク効率も改善される。しかしさまざまな実施形態によれば、ポイントツーポイントアーキテクチャ中でプロセッサの個数が直線的に増加することは、マルチプロセッサを接続するために用いられるリンクの個数が指数関数的に増加することにつながる。用いられるリンクの個数を減らし、ポイントツーポイントアーキテクチャを用いたマルチプロセッサをさらにモジュラー化するために、マルチクラスタが用いられる。
【００１３】
さまざまな実施形態によれば、マルチプロセッサクラスタは、ポイントツーポイントアーキテクチャを用いて相互接続される。プロセッサのそれぞれのクラスタは、クラスタ群間の通信を扱うのに用いられるキャッシュコヒーレンスコントローラを含む。ある実施形態においては、プロセッサ群を接続するのに用いられるポイントツーポイントアーキテクチャは、クラスタ群を接続するのにも用いられる。
【００１４】
キャッシュコヒーレンスコントローラを用いることによって、マルチクラスタを必ずしもサポートしないかもしれないプロセッサ群を用いてマルチクラスタシステムが構築されえる。そのようなマルチクラスタシステムは、キャッシュコヒーレンスコントローラを用いて、ローカルトランザクションにおいて非ローカルノードを表現することで、ローカルノードがローカルクラスタの外にあるノードの存在を知る必要がないようにすることによって構築されえる。キャッシュコヒーレンスコントローラのさらなる詳細が以下に述べられる。
【００１５】
単一のクラスタシステムにおいて、キャッシュコヒーレンシは、全てのデータアクセスリクエストをシリアライゼーションポイントを通して送ることによって維持されえる。データアクセスリクエストを順序付けるための任意のメカニズムはここでは、シリアライゼーションポイントと呼ばれる。シリアライゼーションポイントの一例はメモリコントローラである。単一のクラスタシステムにおけるさまざまなプロセッサ群は、データアクセスリクエストをメモリコントローラに送る。ある例では、メモリコントローラは、データアクセスリクエストをシリアライズまたはロックすることによって、与えられたメモリラインについて一つのデータアクセスリクエストだけが任意の特定の時刻において許容されるよう構成される。もし他のプロセッサが同じメモリラインにアクセスすることを試みるなら、データアクセスの試みは、メモリラインがアンロックされるまでブロックされる。メモリコントローラは、キャッシュコヒーレンシがマルチプロセッサ、シングルクラスタシステムにおいて維持されることを可能にする。
【００１６】
シリアライゼーションポイントは、さまざまなクラスタ群中のプロセッサ群が単一のアドレス空間を共有するマルチプロセッサ、マルチクラスタシステムにおいても用いられえる。単一のアドレス空間を用いることによって、内部ポイントツーポイントリンクは、従来の外部ネットワークベースのマルチクラスタシステムに対してクラスタ間通信を大幅に改善するために用いられえる。さまざまなクラスタ中のさまざまなプロセッサは、ホームクラスタのような特定のクラスタに関連付けられたメモリコントローラにデータアクセスリクエストを送る。メモリコントローラは、異なるクラスタからの全てのデータリクエストを同様にシリアライズしえる。しかしマルチプロセッサ、マルチクラスタシステム中のシリアライゼーションポイントは、マルチプロセッサ、シングルクラスタシステムにおけるシリアライゼーションポイントほど効率的ではないかもしれない。すなわち、クラスタ間で転送することから生じるレイテンシのようなファクタから生じるディレイが、さまざまなデータアクセスリクエストに対する応答時間に悪影響を及ぼしえる。ディレイは、マルチプロセッサ環境でのプローブの使用からも生じることに注意されたい。
【００１７】
共有メモリ空間を用いるアーキテクチャにおけるクラスタ間トランザクションのディレイは、イーサネット（登録商標）またはトークンリングのような外部ネットワークを用いる従来のメッセージ引き渡し環境におけるディレイより大幅に小さいが、最小ディレイでさえも大きなファクタである。一部の応用例では、一瞬にしてプロセッサから何百万のデータアクセスリクエストが存在しえる。ディレイが少しでもあるとプロセッサパフォーマンスに悪影響を与えうる。
【００１８】
さまざまな実施形態によれば、プローブ管理は、マルチプロセッサ、マルチクラスタシステムにおいてデータにアクセスする効率を高めるために用いられる。システムにおいてキャッシュコヒーレンシを維持するためにノードからレスポンスを引き出すメカニズムはここではプローブと呼ばれる。ある例では、キャッシュをスヌープするメカニズムがプローブと呼ばれる。プローブに対するレスポンスは、起動するリクエストのソースまたはターゲットに向けられえる。さまざまなノードへ送信されるプローブの個数およびプローブのリクエストをフィルタリングまたは低減する任意のメカニズムは、ここではプローブを管理することと呼ばれる。ある例では、プローブを管理することは、プローブが少なくなった個数のエンティティに送信されえるかを決定するためにプローブリクエストを特徴付けることを伴う。
【００１９】
典型的な実現例において、リクエストは、システム中のさまざまなノードにプローブをブロードキャストするメモリコントローラに送られる。そのようなシステムにおいては、キャッシュライン状態の情報は知られていない。システム中の全てのノードは、プローブされ、リクエストクラスタは、それぞれのノードからレスポンスを受け取る。コヒーレンスディレクトリを持つシステムにおいて、さまざまなメモリラインに関連付けられた状態情報は、トランザクションの個数を減らすために用いられえる。さまざまなメモリラインに関連付けられた状態情報を維持する任意のメカニズムは、ここではコヒーレンスディレクトリと呼ばれる。コヒーレンスディレクトリは、リモートクラスタ内にキャッシュされたローカルクラスタ中のメモリラインについての情報を典型的には含む。さまざまな実施形態によれば、コヒーレンスディレクトリは、ローカルキャッシュの状態を推測することによってリモートクラスタへのプローブの個数を減らすために用いられる。他の実施形態においては、コヒーレンスディレクトリは、ホームクラスタにおいてメモリコントローラへのリクエストの送信をなくすために用いられる。
【００２０】
さまざまな実施形態によれば、それぞれのクラスタ内にキャッシングの他のレベルが提供され、それによってもしそれぞれのプロセッサに関連付けられるキャッシュがリクエストされたメモリラインを保持しないなら、プローブをホームクラスタに転送する前に、そのクラスタに関連付けられるキャッシュがチェックされえる。ある例では、リモートデータキャッシュはそれぞれのクラスタに含まれ、それぞれのクラスタのキャッシュコヒーレンスコントローラによってアクセス可能である。リモートデータキャッシュは、ローカルまたはリモートノードをプローブすることなく、またはそのリクエストをホームメモリコントローラに送ることなく、トランザクションがローカルに完了することを可能にする。
【００２１】
図１Ａは、本発明の技術を採用しえるマルチクラスタ、マルチプロセッサシステムの一例の概略図である。それぞれの処理クラスタ１０１、１０３、１０５、および１０７は、複数のプロセッサを含む。処理クラスタ１０１、１０３、１０５、および１０７は、互いにポイントツーポイントリンク１１１ａ〜ｆを通して接続される。ある実施形態において、図１Ａに示されるマルチクラスタアーキテクチャ中のマルチプロセッサは、同じメモリ空間を共有する。この例では、ポイントツーポイントリンク１１１ａ〜ｆは、マルチクラスタ１０１、１０３、１０５、および１０７内のマルチプロセッサを接続するために従来のフロントサイドバスに代わって用いられる内部システム接続である。このポイントツーポイントリンクは、任意のポイントツーポイントのコヒーレンスプロトコルをサポートしえる。
【００２２】
図１Ｂは、本発明の技術を採用しえるマルチクラスタ、マルチプロセッサシステムの他の例の概略図である。それぞれの処理クラスタ１２１、１２３、１２５、および１２７は、ポイントツーポイントリンク１４１ａ〜ｄを通してスイッチ１３１に結合される。スイッチおよびポイントツーポイントリンクを用いることは、システム内でマルチクラスタを接続するとき、より少ないポイントツーポイントリンクで実現することを可能にすることに注意されたい。スイッチ１３１は、コヒーレンスプロトコルインタフェースを持つプロセッサを含みえる。さまざまな実現例によれば、図１Ａに示されるマルチクラスタシステムは、図１Ｂに示されるスイッチ１３１を用いて拡張されえる。
【００２３】
図２は、例えば図１Ａに示されるクラスタ１０１のようなマルチプロセッサクラスタの概略図である。クラスタ２００は、プロセッサ２０２ａ〜２０２ｄ、１つ以上の基本Ｉ／Ｏシステム（ＢＩＯＳ）２０４、メモリバンク２０６ａ〜２０６ｄを備えるメモリサブシステム、ポイントツーポイント通信リンク２０８ａ〜２０８ｅ、およびサービスプロセッサ２１２を含む。ポイントツーポイント通信リンクは、プロセッサ２０２ａ〜２０２ｄ、Ｉ／Ｏスイッチ２１０、および相互接続コントローラ２３０の間で相互接続を可能にするよう構成される。サービスプロセッサ２１２は、リンク２１４ａ〜２１４ｆによって図２に表されるＪＴＡＧインタフェースを介してプロセッサ２０２ａ〜２０２ｄ、Ｉ／Ｏスイッチ２１０、および相互接続コントローラ２３０と通信を可能にするよう構成される。他のインタフェースがサポートされることに注意されたい。ある実現例においては、サービスプロセッサは、マルチプロセッサクラスタに含まれないことにも注意されたい。Ｉ／Ｏスイッチ２１０は、システムの残りをＩ／Ｏアダプタ２１６および２２０に接続する。
【００２４】
具体的な実施形態によれば、本発明のサービスプロセッサは、システムリソースを以前に特定されたパーティションスキーマに従って分割する（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）から得られる。
【００７１】
これらメカニズムは、リモートデータキャッシュ中の全てのデータが共有されたまたは所有された状態で保持されることを可能にするだけでなく、変更された状態および排他的状態にデータを保持するメカニズムを提供する。変更された状態または排他的状態に保持されるリモートデータキャッシュ中のデータは、リードブロック、リードブロックシェアド、およびリードブロックモディファイドトランザクションを満たすことができる。リモートデータキャッシュを満たす他のメカニズムは、２００３年５月２０日に出願されたDavid B. GlascoによるMethods And Apparatus For Providing Cache State Informationと題された米国特許出願第１０／４４２，８４５号に記載され、この全体が全ての目的のためにここで参照によって援用される。
【００７２】
リモートデータデータキャッシュ８０１は、ペンディング状態で情報を保持もする。ペンディング状態は、リモートデータキャッシュに初めに入れられるが、まだソース完了によって確認されていないデータを保持するために用いられる。ペンディング状態で保持されるデータは、そのデータが初めにリモートデータキャッシュに書き込まれた後、しかし最終レスポンストランザクションが受け取られる前に、プロセッサによって受け取られたプローブによって無効にされえる。
【００７３】
図９は、リモートデータキャッシュが用いられえるトランザクションフローを示す概略図である。さまざまな実施形態によれば、リクエストクラスタ９００中のプロセッサ９０１−１は、リードリクエストのようなデータアクセスリクエストをキャッシュコヒーレンスコントローラ９０３−１に送る。キャッシュコヒーレンスコントローラ９０３−１は、ペンディングバッファ中のトランザクションをトラックし、リモートデータキャッシュ９０５を用いてリクエストがローカルに扱えるかを決定する。さまざまな実施形態によれば、もしリクエストが特定のメモリラインについてのリードブロックまたはリードブロックシェアドである場合、リクエストは、もしメモリラインがリモートデータキャッシュ中に変更、所有、排他、または共有状態のいずれかで保持されるならローカルに扱いえる。換言すれば、リクエストは、もしメモリラインの有効なコピーがリモートデータキャッシュ中にあるならローカルに扱いえる。しかし、もしリクエストがリードブロックモディファイドのようなトランザクションであるなら、リクエストは、メモリラインがリモートデータキャッシュ中に変更または排他状態で保持される場合のみローカルに扱いえる。もしリクエストがローカルに扱いえるなら、リモートデータキャッシュは、データレスポンスをプロセッサ９０１−３へ送るキャッシュコヒーレンスコントローラ９０３−３へ情報を提供する。
【００７４】
典型的な実現例において、リクエストする処理ノードは、トランザクションが完了しえる前に他の処理ノードから応答を期待する。もしトランザクションが、リモートデータキャッシュによってローカルに満たされるなら、他の処理ノードは、最適な場合にはプローブされる必要はなく、その結果、応答を発生しない。トランザクションがリモートデータキャッシュによってローカルに満たされえるシナリオにおいては、キャッシュコヒーレンスコントローラは、プローブされたノードからリクエストするノードへ戻る応答となる、システム中の他のノードへのプローブを発生するか、またはキャッシュコヒーレンスコントローラは、システム中の他のノードの代わりに応答を発生する。しかし、外部へのプローブおよびプローブ応答を送ることは、リモートデータキャッシュがトランザクションをローカルに満足するようにさせることの利点を減らす。キャッシュコヒーレンスコントローラは、リモートデータキャッシュを用いてトランザクションを完了するのに必要な情報の全てを有し、トランザクションが完了したことをリクエストするプロセッサに知らせることができるはずである。
【００７５】
その結果、本発明の技術は、リモートデータキャッシュを持つキャッシュコヒーレンスコントローラが、外部のプローブまたはプローブレスポンスを送る必要なく、トランザクションをローカルに満足することを可能にするメカニズムを提供する。ある実施形態においては、本発明の技術は、リクエストする処理ノードへ、完了指示子と共にレスポンス情報で応答するキャッシュコヒーレンスコントローラを提供する。他のレスポンスが予期されないリクエストする処理ノードに通知する任意のメカニズムは、ここでは完了指示子と呼ばれる。ある例では、完了指示子は、キャッシュコヒーレンスコントローラからレスポンス情報と共に提供される完了ビットである。このレスポンス情報は、リモートデータキャッシュからのデータと共に状態情報を含みえる。さまざまな実施形態によれば、レスポンス情報は、リクエストするプロセッサ９０１−３に提供される。それからリクエストするプロセッサ９０１−３は、完了ビットを認識すると、ソース完了をキャッシュコヒーレンスコントローラ９０３−５に送る。もし完了ビットが提供されないなら、リクエストするプロセッサ９０１−３は、それから典型的にはシステム中の他のノードからのレスポンスを期待する。ある例では、リクエストするプロセッサ９０１−３は、ホームクラスタキャッシュコヒーレンスコントローラからのレスポンスと共に、リクエストするプロセッサのクラスタ中のノードからのレスポンスを期待する。
【００７６】
本発明は、その具体的な実施形態を参照して示され記述されてきたが、記載された実施形態の形態および詳細の変更が本発明の精神または範囲から逸脱することなくなされえることが当業者には理解されよう。例えば本発明の実施形態は、ポイントツーポイント、スイッチ、またはバスアーキテクチャを通して接続されたマルチプロセッサクラスタと共に採用されえる。他の例では、プロセッサのマルチクラスタは、単一のキャッシュコヒーレンスコントローラを共有しえ、または複数のキャッシュコヒーレンスコントローラが単一のクラスタ中で用いられえる。従って本発明の範囲は添付の特許請求の範囲を参照して決定されるべきである。
【図面の簡単な説明】
【００７７】
【図１Ａ】マルチクラスタを有するシステムを示す概略図である。
【図１Ｂ】マルチクラスタを有するシステムを示す概略図である。
【図２】複数のプロセッサを有するクラスタの概略図である。
【図３】キャッシュコヒーレンスコントローラの概略図である。
【図４】単一のクラスタ中のプロセッサからのデータアクセスリクエストについてのトランザクションフローを示す概略図である。
【図５Ａ】キャッシュコヒーレンスコントローラの機能を示す概略図である。
【図５Ｂ】キャッシュコヒーレンスコントローラの機能を示す概略図である。
【図５Ｃ】キャッシュコヒーレンスコントローラの機能を示す概略図である。
【図５Ｄ】キャッシュコヒーレンスコントローラの機能を示す概略図である。
【図６】複数のプローブ応答を持つプローブリクエストについてのトランザクションフローを示す概略図である。
【図７】キャッシュコヒーレンスディレクトリを示す概略図である。
【図８】リモートデータキャッシュを示す概略図である。
【図９】リモートデータキャッシュを用いたトランザクションフローを示す概略図である。
【図１Ａ】
2007501466.tif 000003
【図１Ｂ】
2007501466.tif 000004
【図２】
2007501466.tif 000005
【図３】
2007501466.tif 000006
【図４】
2007501466.tif 000007
【図５Ａ】
2007501466.tif 000008
【図５Ｂ】
2007501466.tif 000009
【図５Ｃ】
2007501466.tif 000010
【図５Ｄ】
2007501466.tif 000011
【図６】
2007501466.tif 000012
【図７】
2007501466.tif 000013
【図８】
2007501466.tif 000014
【図９】
2007501466.tif 000015
【国際調査報告】
2007501466.tif 000016
2007501466.tif 000017
2007501466.tif 000018