(57)【要約】      （修正有）【課題】キャッシュのコヒーレンシを保持するためのスヌープ発行数を削減して、アクセス要求処理時間を短縮する。【解決手段】複数のノードが接続されたコンピュータシステムにおいて、キャッシュの所定単位のアドレスと、アドレスのメモリデータコピーを何れのプロセッサが持っているかを表す状態情報を管理する細粒度スヌープフィルタと、メモリ領域を複数メモリ空間に分割して、各メモリ空間に含まれるメモリ空間のデータコピーが、プロセッサのキャッシュエントリ内に存在することを表す状態情報を管理するエントリを全メモリ領域分有する粗粒度スヌープフィルタと、を有する。アクセス要求に伴うデータコピーのキャッシュアドレスと、アドレスをキャッシュしているプロセッサを示す状態情報について、細粒度スヌープフィルタ及び粗粒度スヌープフィルタを照合し、その照合結果に従って関係するプロセッサに対してスヌープの発行を行う。【選択図】図４
2008310414.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードが接続されたコンピュータシステムであって、各ノードはメインメモリと、キャッシュメモリを有する少なくとも１つのプロセッサと、ノード間の制御を行うノードコントローラと、キャッシュコヒーレンスを保つためのスヌープ発行を管理するスヌープフィルタを有し、あるノードのプロセッサは他のノードのメインメモリをアクセスすることができるコンピュータシステムにおいて、
該スヌープフィルタとして、該プロセッサがメモリアクセスして取得したキャッシュの所定単位のアドレスと、該アドレスのメモリデータコピーを何れのプロセッサが持っているかを表す状態情報を管理する細粒度スヌープフィルタと、
メモリ領域をキャッシュの所定単位のサイズより大きい複数メモリ空間に分割して、各メモリ空間に含まれるメモリ空間のデータコピーが、プロセッサのキャッシュエントリ内に存在することを表す状態情報を管理するエントリを全メモリ領域分有する粗粒度スヌープフィルタと、
アクセス要求に伴うキャッシュの所定単位のアドレスと該状態情報を、該細粒度スヌープフィルタ及び該粗粒度スヌープフィルタに登録する登録制御部と、
アクセス要求に伴うデータコピーのキャッシュアドレスと、該アドレスをキャッシュしているプロセッサを示す状態情報について、該細粒度スヌープフィルタ及び粗粒度スヌープフィルタに登録された情報と照合する照合部と、
該照合部による照合の結果に従って、関係するプロセッサに対してスヌープの発行を制御するスヌープ発行制御部と、を有するコンピュータシステム。
【請求項２】
複数のノードが接続されたコンピュータシステムであって、各ノードはメインメモリと、キャッシュメモリを有する少なくとも１つのプロセッサと、ノード間の制御を行うノードコントローラと、キャッシュコヒーレンスを保つためのスヌープ発行を管理するスヌープフィルタを有し、あるノードのプロセッサは他のノードのメインメモリをアクセスすることができるコンピュータシステムにおいて、
該スヌープフィルタとして、該ノードのプロセッサがメモリアクセスして取得したキャッシュの所定単位のアドレスと、該アドレスのメモリデータコピーを何れのノードが持っているかを表す状態情報を管理する細粒度スヌープフィルタと、
メモリ領域をキャッシュの所定単位のサイズより大きい複数メモリ空間に分割して、各メモリ空間に含まれるメモリ空間のデータコピーが、ノードのキャッシュエントリ内に存在することを表す状態情報を管理するエントリを全メモリ領域分有する粗粒度スヌープフィルタと、
アクセス要求に伴うキャッシュの所定単位のアドレスと該状態情報を、該細粒度スヌープフィルタ及び該粗粒度スヌープフィルタに登録制御部と、
アクセス要求に伴うデータコピーのキャッシュアドレスと、該アドレスをキャッシュしているプロセッサを示す状態情報について、該細粒度スヌープフィルタ及び粗粒度スヌープフィルタに登録された情報と照合する照合部と、
該照合部による照合の結果に従って、関係するノードに対してスヌープの発行を制御するスヌープ発行制御部と、を有するコンピュータシステム。
【請求項３】
前記キャッシュの所定単位は、キャッシュのライン、又はブロック、又はページ単位であることを特徴とする請求項１又は２のコンピュータシステム。
【請求項４】
システムの起動時又は初期化時に、前記粗粒度スヌープフィルタ及び前記細粒度スヌープフィルタに登録されたエントリの情報を実質的に無効にするリセット制御部を有することを特徴とする請求項１乃至３のいずれかのコンピュータシステム。
【請求項５】
前記粗粒度スヌープフィルタは、全メモリ空間をキャッシュラインサイズより大きい複数メモリ空間に分割し、複数の各プロセッサがその空間内のラインを一つ以上保持している可能性があることを示す状態情報を登録し、
前記細粒度スヌープフィルタは、キャッシュタグを格納するラインアドレス格納部と、複数の各プロセッサがキャッシュラインを保持しているかを示す状態情報部と、アドレスが有効であることを示すバリッドビットを登録する、ことを特徴とする請求項１のコンピュータシステム。
【請求項６】
前記照合部によるヒット又はミスの結果によって、該粗粒度スヌープフィルタ又は該細粒度スヌープフィルタのいずれかのキャッシュ情報を出力させるセレクタを有し、
ヒットした時に、該セレクタは、該細粒度スヌープフィルタからアクセス要求のアドレスと一致したキャッシュ情報を出力させ、
ミスした時に、該セレクタは、該粗粒度スヌープフィルタからアクセス要求のアドレスを含む領域のキャッシュ情報を出力させることを特徴とする請求項１乃至４のいずれかのコンピュータシステム。
【請求項７】
前記照合部による照合の結果、要求されたアドレスが、前記粗粒度スヌープフィルタの状態情報に登録されていない場合、前記スヌープ発行制御部はスヌープの発行を行わないことを特徴とする請求項５のコンピュータシステム。
【請求項８】
前記照合部による照合の結果、要求されたアドレスが、前記粗粒度スヌープフィルタの状態情報にヒットし、前記細粒度スヌープフィルタの該アドレス格納部にも登録されているが、該状態情報部にセットされているプロセッサが無かった場合、前記スヌープ発行制御部はスヌープの発行を行わないことを特徴とする請求項５のコンピュータシステム。
【請求項９】
前記照合部による照合の結果、要求されたアドレスが、前記粗粒度スヌープフィルタの状態情報にヒットしたが、前記細粒度スヌープフィルタの該アドレス格納部にヒットしなかった場合、前記スヌープ発行制御部は、前記粗粒度スヌープフィルタに登録されているプロセッサに対してのみスヌープをマルチキャストして発行することを特徴とする請求項５のコンピュータシステム。
【請求項１０】
前記照合部による照合の結果、要求されたアドレスが、前記粗粒度スヌープフィルタの状態情報に登録されていて、かつ前記細粒度スヌープフィルタの該アドレス格納部にヒットして該状態情報部にも登録されている場合、前記スヌープ発行制御部は、該アドレスラインの保持者となるプロセッサに対してのみスヌープを発行することを特徴とする請求項５のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータシステムに係り、特に、マルチプロセッサシステムにおけるスヌープフィルタを用いたスヌープの発行制御に関するものである。
【背景技術】
【０００２】
メインメモリと、キャッシュメモリを有する１つ以上のプロセッサを有する複数のノードが、ネットワークを介して接続された、共有メモリアーキテクチャを有するマルチプロセッサシステムが知られている。
【０００３】
複数のプロセッサを有するマルチプロセッサシステムでは、１のプロセッサがある計算タスクを実行している間に、他のプロセッサは別の計算タスクを実行することができる。また、特定の計算タスクを複数のプロセッサに分散して実行させることによって、システム全体の実行時間を減少することができる。
【０００４】
処理速度を高速化するために、キャッシュと呼ばれる小規模で高速メモリを含む、複数階層構造からなるメモリシステムが採用されている。このキャッシュは通常、プロセッサ集積回路に物理的に組み込まれるか、又は物理的にプロセッサの近くに実装される。また、命令キャッシュとデータ・キャッシュが別々に存在する場合や、複数レベルのキャッシュが存在する場合もある。
【０００５】
一部のキャッシュを複数のプロセッサが共用してもよく、全てのプロセッサとキャッシュは、同一のメインメモリを共用することができる。特定のラインは、メモリと複数のプロセッサのキャッシュ階層に同時に存在できる。ただしキャッシュしたメモリコピーは、共有しているプロセッサ間で同一かつ最新でなければならない。この特性はコヒーレンシと呼ばれる。
【０００６】
ラインには唯一の保持者「オーナー」が存在し得る。キャッシュがラインを「保持」するとは、キャッシュが更なるコヒーレンシ・トランザクションを発行することなくラインを変更することを許可されている場合である。いかなるキャッシュ・コヒーレンシ・プロトコルも、キャッシュラインの最新のコピーをオーナー（存在する場合）から取得し、このデータのコピーをリクエスタに提供する必要がある。ラインを更新・取得する場合は、リクエスタが所有権を取得する必要があり、共用のコピーをすべて無効にする必要がある。
【０００７】
ラインのオーナーが存在する場所を確認するには、スヌープベースのキャッシュ・コヒーレンシ・プロトコルまたはディレクトリベースのキャッシュ・コヒーレンシ・プロトコルのいずれかを用いる。
スヌープベースのプロトコルでは、メモリのデータコピーの保持者（オーナー）が不明であり、すべてのキャッシュに問い合わせ（スヌープ）を行って要求されたラインの最新コピーの位置を決定する必要がある。システム内のあらゆる装置によるキャッシュラインへのすべてのアクセス要求は、システム内のすべてのキャッシュに転送される。最終的に、ラインの最新コピーが存在する場所が特定され、リクエスタにコピーが提供される。
【０００８】
ディレクトリベースのプロトコルでは、メモリ内の各ラインの状態に関する情報を保持するためにメモリが提供される。例えば、メモリ内の各ラインについて、キャッシュ階層ごとにそのキャッシュ階層がラインのコピーを保持するかどうかを示すビットと、そのキャッシュ階層が所有権を有するかどうかを示すビットをディレクトリに含めることができる。キャッシュラインへのアクセス要求ごとに、ディレクトリに問い合わせてオーナーを決定する必要がある。それから、ラインの最新コピーを取得してリクエスタにそれを提供する。一般に、ディレクトリのタグとステータスビットはメインメモリに保存されるので、状態情報の要求はメインメモリのサイクルを起動し、メインメモリの呼び出し時間が発生する。
【０００９】
スヌープを発行した場合、レスポンスを全て受け取ってからリクエストに対する完了処理が行われるので、スヌープの発行数が多いとリクエスト処理にかかる時間がかかってしまう。そこで、スヌープのブロードキャストを防ぐために、スヌープフィルタを用いる方法が知られている。例えば、特許文献1（特開平１０−２２２４２３号公報）には、キャッシュメモリに存在する全てのデータのキャッシュ状態を示すコピータグを持ち、データが最新の値のときのみキャッシュメモリへのスヌープを行うスヌープフィルタが開示されている。
このように、スヌープフィルタを使用することでスヌープの発行数を削減することができ、マルチプロセッサシステムにおいてプロセッサがメモリアクセスに要する時間を短縮することが出来る。
【００１０】
【特許文献１】特開平１０−２２２４２３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
通常、スヌープフィルタにおいて、ラインアドレスとそのアドレスをキャッシュしているプロセッサを示す状態情報を比較して、アドレスがヒットしてラインを保持していることが判明した場合にスヌープを限定することができる。またアドレスがヒットしてもラインの所有者がいない場合にはスヌープの発行を阻止できる。
【００１２】
しかし、エントリに登録されていないアドレスのリクエストを受信したときは、スヌープはブロードキャストされてしまう。通常、物理的なサイズ、実装のコストの問題から、全メモリ空間に関する情報を格納するだけのエントリをスヌープフィルタに用意することは困難である。プロセッサが実際にアクセスするメモリ空間のサイズが、スヌープフィルタが対応できるメモリ空間のサイズを越える場合、スヌープフィルタの上書きが発生する。このスヌープフィルタエントリの上書きによってスヌープフィルタミスが生じ、スヌープのブロードキャストが生じることがある。
【００１３】
また、通常のスヌープフィルタでは、リクエストの受信に起因してエントリへの登録、更新が行われる。エントリに登録情報が無い起動時又は初期化後などにヒットせず、スヌープをブロードキャストしてしまう。
【００１４】
本発明の目的は、キャッシュのコヒーレンシを保持するためのスヌープ発行数を削減して、リクエスト処理時間を短縮し、マルチプロセッサシステムを効率よく機能させることにある。
【課題を解決するための手段】
【００１５】
本発明に係るコンピュータシステムは、好ましくは、複数のノードが接続されたコンピュータシステムであって、各ノードはメインメモリと、キャッシュメモリを有する少なくとも１つのプロセッサと、ノード間の制御を行うノードコントローラと、キャッシュコヒーレンスを保つためのスヌープ発行を管理するスヌープフィルタを有し、あるノードのプロセッサは他のノードのメインメモリをアクセスすることができるコンピュータシステムにおいて、
該スヌープフィルタとして、該プロセッサがメモリアクセスして取得したキャッシュの所定単位のアドレスと、該アドレスのメモリデータコピーを何れのプロセッサが持っているかを表す状態情報を管理する細粒度スヌープフィルタと、
メモリ領域をキャッシュの所定単位のサイズより大きい複数メモリ空間に分割して、各メモリ空間に含まれるメモリ空間のデータコピーが、プロセッサのキャッシュエントリ内に存在することを表す状態情報を管理するエントリを全メモリ領域分有する粗粒度スヌープフィルタと、
アクセス要求に伴うキャッシュの所定単位のアドレスと該状態情報を、該細粒度スヌープフィルタ及び該粗粒度スヌープフィルタに登録する登録制御部と、
アクセス要求に伴うデータコピーのキャッシュアドレスと、該アドレスをキャッシュしているプロセッサを示す状態情報について、該細粒度スヌープフィルタ及び粗粒度スヌープフィルタに登録された情報と照合する照合部と、
該照合部による照合の結果に従って、関係するプロセッサに対してスヌープの発行を制御するスヌープ発行制御部と、を有するコンピュータシステムとして構成される。
【００１６】
また、本発明は、複数のノードが接続されたコンピュータシステムにおける、リモートノードからのアクセス要求に対するグローバルなヌープフィルタにも適用できる。
好ましい例では、前記キャッシュの所定単位はキャッシュのラインとして説明されるが、キャッシュのブロック又はページ単位にも適用できる。
キャッシュラインの場合、粗粒度スヌープフィルタは、全メモリ空間をキャッシュラインサイズより大きい複数メモリ空間に分割し、複数の各プロセッサがその空間内のラインを一つ以上保持している可能性があることを示す状態情報を登録し、
細粒度スヌープフィルタは、キャッシュタグを格納するラインアドレス格納部と、複数の各プロセッサがキャッシュラインを保持しているかを示す状態情報部と、アドレスが有効であることを示すバリッドビットを登録する。
また、好ましい例では、システムの起動時又は初期化時に、粗粒度スヌープフィルタ及び細粒度スヌープフィルタに登録されたエントリの情報を実質的に無効にするリセット制御部を有する。
【発明の効果】
【００１７】
本発明によれば、全アドレスを複数メモリ空間に分割した粗粒度スヌープフィルタと、細粒度スヌープフィルタを用いて、アクセスされたアドレスのメモリコピーの保持情報を管理しそれに基づいてスヌープの発行制御することにより、メモリコピーを保持しているプロセッサ以外のプロセッサに対するスヌープ発行数を減らすことができる。これにより、システム内のトランザクション数を削減して、システム全体の効率を上げることが出来る。また、起動時にスヌープフィルタのエントリ登録をクリアすることにより、起動時からスヌープ発行数を削減することができる。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照して、本発明の一実施例について説明する。
図１に示すコンピュータシステムを参照する。
このコンピュータシステムは、４つのノード１００a〜１００ｄがそれぞれ接続線１６０によって接続され、お互いに他のノードのメインメモリをアクセスすることができるＳＭＰ（共有メモリ）形式のシステムを構成する。各ノードは同じ構成を持ち、それぞれ、キャッシュメモリ１２０を有する３つのプロセッサＣＰＵＡ１１０ａ、ＣＰＵＢ１１０ｂ、ＣＰＵＣ１１０ｃと、メインメモリ１３０と、スヌープフィルタ１５０を持つノードコントローラ１４０とを有する。ノードコントローラ１４０は各ノード間の制御を行う。
【００１９】
ＣＰＵ１１０は、それぞれ自ノード内のメインメモリ１３０に接続線１８０a〜１８０cにより接続され、直接メモリアクセスすることが出来る。ＣＰＵ１１０がリモートのノード１００ｂ〜ｄに在るメインメモリ１３０へアクセスする場合には、接続線１７０a〜１７０cよりノードコントローラ１４０を経由して行う。
【００２０】
図２はスヌープフィルタ１５０の構成を示す。
スヌープフィルタ１５０はその内部に、粗粒度スヌープフィルタ（Coarse grain）３２と、細粒度スヌープフィルタ（Fine grain）３４の２つのスヌープフィルタを持っている。アクセス要求されているアドレスは、入力３０よりスヌープフィルタ１５０に入力され、さらに粗粒度スヌープフィルタ３２と細粒度スヌープフィルタ３４にそれぞれ入力して処理が行われる。粗粒度スヌープフィルタ３２及び細粒度スヌープフィルタ３４で処理された結果は統合してスヌープの発行先を出力３１より出力する。
【００２１】
図３は、粗粒度スヌープフィルタと細粒度スヌープフィルタの構成を示し、それぞれのフィルタが登録する情報を表している。
粗粒度スヌープフィルタ３２ａは、全メモリ空間をキャッシュラインサイズより大きい複数メモリ空間に分割し、プロセッサがその空間内のラインを一つ以上保持している可能性があることを表す状態情報部３３が存在する。
【００２２】
図示の例では、システム内の全ノードの全アドレス空間を５１２単位で分割していることを示し、状態情報部３３はプロセッサの毎に１ビット設けていることを示している。本実施例では、ノード内に３個のプロセッサがあるので３ビットとなる。「１」にセットされている場合は、その領域内においてセットされているプロセッサがラインを１つ以上持っている可能性があることを示している。
細粒度スヌープフィルタ３４ａは、キャッシュタグを格納するラインアドレス格納部３５と、何れのプロセッサがそのラインを保持しているのかを表す状態情報部３６と、アドレスが有効であることを示すバリッドビット３７からなる。エントリ数は実装に依存する。ラインアドレス格納部３５はラインアドレスのビット幅分用意する。状態情報部３６も状態情報部３３と同様にプロセッサの個数分のビット幅がある。
【００２３】
図４はスヌープフィルタの具体的な制御ブロックの構成を示す。
粗粒度スヌープフィルタ３２は、アクセス要求５０から要求されているアドレスが含まれる領域の状態情報３３を出力する。比較器５１は、入力されるアクセス要求５０のアドレスと細粒度スヌープフィルタ３４のアドレス格納部３５を１ラインずつ比較していき、ヒット又はミスを出力する。細粒度スヌープフィルタ３４はラインの状態情報３６を出力する。
【００２４】
セレクタ５２は、比較器５１から出力されたヒットチェック結果によって粗粒度スヌープフィルタ３２又は細粒度スヌープフィルタ３４のどちらのキャッシュ情報を出力させるかを選択する。ヒットした場合に、セレクタ５２は細粒度スヌープフィルタ３４のキャッシュ情報を出力するように選択する。この時、細粒度スヌープフィルタ３４はアクセス要求のアドレスと一致したキャッシュ情報を出力する。一方、ミスした場合にはセレクタ５２は粗粒度スヌープフィルタ３２のキャッシュ情報を選択する。この場合は、粗粒度スヌープフィルタ３２のアクセス要求のアドレスを含む領域のキャッシュ情報が出力される。
【００２５】
アクセス要求５０はスヌープ発行制御部５４にも入力され、スヌープ発行の要否が判断される。ここでは、ＲＥＡＤ要求の場合はスヌープ発行が必要と判断され、ＷＲＩＴＥ要求の場合にはそれが不要と判断される。スヌープ発行制御部５４における判断結果はスヌープジェネレータ５３に入力され、スヌープ生成、発行を制御する。スヌープ発行が必要と判断された場合、生成したスヌープを出力５５から出力する。不要と判断された場合にはスヌープの生成、発行は行わない。
レスポンスの集計論理５６はアクセス要求のレスポンスを集計し、何れのプロセッサがキャッシュラインを所有しているかを出力する。粗粒度スヌープフィルタ３２はレスポンスの集計論理５６からの結果から、アクセス要求のアドレスが含まれる領域の所有者情報を更新する。
【００２６】
情報登録制御部５７は、細粒度スヌープフィルタ３４に情報を登録するための制御を行い、アドレス格納部３５、状態情報部３６、バリッドビット３７から成るエントリを構成して登録する。より具体的に言えば、アクセス要求５０が入力した時に、アクセス要求５０のアドレスをアドレス格納部３５に登録する。レスポンス集計論理５６から出力されたラインの所有者情報は、情報登録制御部５７の状態情報部３６に登録される。エントリ情報はバリッドビット３７を「1」にセットされスヌープフィルタの空きエントリに追加される。空きが無い場合にはＦＩＦＯもしくはＬＲＵ方式でエントリを追い出してから追加する。
【００２７】
リセット制御部５８は、起動時や初期化時にリセット命令を受信し、粗粒度スヌープフィルタと細粒度スヌープフィルタ３４のエントリをリセット制御する。リセット指示を受けた粗粒度スヌープフィルタ３２は全エントリ状態情報をクリアする。また、リセット指示を受けた細粒度スヌープフィルタ３４は全エントリのバリッドビット３７を「０」にリセットする。
【００２８】
図５は、細粒度スヌープフィルタのキャッシュミス・ヒットを判断する、セットアソシアティブ方式の例を示す。
４０はメモリアドレスの上位ビットであるタグ、４１はメモリアドレスの最下位ラインサイズのビットを除いたメモリアドレス中間のインデックス、４２はオフセットアドレスを示す。細粒度スヌープフィルタは、セットアソシアティブ方式やダイレクトマップ方式、フルアソシアビリティ方式を採用することができる。
【００２９】
ローカルプロセッサが、リモートノードに属するメモリのコピーを、キャッシュしようとするとき、粗粒度スヌープフィルタと細粒度スヌープフィルタに登録を行う。図３の粗粒度スヌープフィルタ３２ａにおいては、当該アドレスに対応するエントリのキャッシュ状態情報３３のうち、当該ラインのコピーを保持するプロセッサに対応するビットを「1」にセットして情報登録を行う。
【００３０】
図３の細粒度スヌープフィルタ３４ａにおいては、エントリに登録があるかを探す。エントリ登録が無かった場合には空きエントリを探し、エントリが有ればバリッドビット３７を「１」にセットする。そして該当アドレスに対応するエントリのアドレス部３５を登録し、キャッシュ状態情報のうち、該当ラインのコピーを保持するプロセッサに対応するビットを「１」にセットして情報登録を行う。空きエントリが無かった場合には、有効エントリをクリアして、登録を行う。細粒度スヌープフィルタ３４aにエントリ登録があった場合には、要求されているプロセッサに対応するビットを「１」にセットし、それ以外は「０」にセットする。
【００３１】
例えば図1において、ＣＰＵ１１０ｃがリモートノードの「００００１１００００００」のメモリアドレスに読み出し要求を発行した場合には、図６のように、粗粒度スヌープフィルタ３２ｂには「００００００００００００」から「０００１００００００００」の複数メモリ空間においてプロセッサＣのビットをセットし、細粒度スヌープフィルタ３４ｂにはアドレス「００００１１００００００」のＣのビットをセットする。
初期化時とリセット時には、粗粒度スヌープフィルタ３２ａの状態情報３３と、細粒度スヌープフィルタ３４ａのエントリ有効ビットが全てクリアされる。
【００３２】
図２の入力３０が示すように、メモリに要求のあったアドレスが入力され、粗粒度スヌープフィルタ３２で要求されているアドレスが、図３の状態情報３３に登録があるかを判断する。同時に、細粒度スヌープフィルタ３４のアドレス格納部３５との一致確認と状態情報３６にも登録があるかを判断する。粗粒度スヌープフィルタ３２と細粒度スヌープフィルタ３４の出力結果から判断してスヌープの発行するプロセッサを決める。
【００３３】
図６の例では、粗粒度スヌープフィルタ３２ｂのアドレス「００００００００００００」から「０００１００００００００」の領域のキャッシュラインはＣＰＵ１１０ｃが持っている可能性があることを示している。細粒度スヌープフィルタ３４ｂから、「００００１１００００００」のラインはＣＰＵ１００cが所持し、「００１１０１００００００」のラインはＣＰＵ１１０ａが所持していると、要求されているアドレスに対する所持者（プロセッサ）を判断する。
【００３４】
プロセッサがリモートノードのメインメモリに対してＲＥＡＤ要求を発行した場合には、粗粒度スヌープフィルタ３２と細粒度スヌープフィルタ３４によってラインの所有者がノード内にいるかをチェックする。アクセス要求が来た時、粗粒度スヌープフィルタと細粒度スヌープフィルタのエントリ登録情報からスヌープの発行先が決まる。
【００３５】
要求されたアドレスが粗粒度スヌープフィルタ３２ａの状態情報３３に登録されていない場合、要求されているアドレスに対応する粗粒度スヌープフィルタ３２ａの状態情報３３が全て「０」になっていると、何れのプロセッサもそのラインは保持していないと判断することができる。よって、この場合にはスヌープの発行を行わない。
また、要求されたアドレスが粗粒度スヌープフィルタ３２ａの状態情報３３にヒットし、細粒度スヌープフィルタ３４ａのアドレス格納部３５にも登録されているが、状態情報部３６にセットされているプロセッサが無かった場合にも、状態情報に登録が無いことからラインの保持者がいないと判断できるので、スヌープの発行は一切行わない。
【００３６】
スヌープを発行する場合とは、要求されたアドレスが粗粒度スヌープフィルタ３２ａの状態情報３３にヒットしたが、細粒度スヌープフィルタ３４ａのアドレス格納部３５にヒットしなかった場合である。この場合には、粗粒度スヌープフィルタ３２aに登録されているプロセッサに対してのみスヌープをマルチキャストする。
【００３７】
また、要求されたアドレスが粗粒度スヌープフィルタ３２ａの状態情報３３に登録されていて、細粒度スヌープフィルタ３４ａのアドレス格納部３５にもヒットして状態情報部３６にも登録されている場合には、ラインアドレスに対して保持者の情報まで登録されているので、そのアドレスラインの保持者に対してのみスヌープを発行する。
【００３８】
図７はローカルノードからリモートノードへメモリアクセス要求の動作例を示す。
図示の例は、ノード１００aからリモートノード１００bのメモリへｒｅａｄトランザクション１７０ｃを発行する場合を示す。ノード１００aのＣＰＵ１１０ｃからノード１００ｂにメモリアクセスのアクセス要求１６０ｂが発行される。まず、ノードコントローラ１５０にアクセスする。ここで、ノード１００ｂのメモリ「００００１１００００００」にアクセスすると、アドレスと状態情報は図８の粗粒度スヌープフィルタ３２ｃと細粒度スヌープフィルタ３４ｃのように登録される。
【００３９】
図９の例は、粗粒度スヌープフィルタ３２ｄではプロセッサ１００a、ｂ共にコピーを持っていることを示しているが、細粒度スヌープフィルタ３４ｄにもヒットすると、当該ラインをプロセッサ１００ｃ以外の誰も持っていないことを示している。この場合、粗粒度スヌープフィルタ３２ｄの保持情報は、粗粒度スヌープフィルタが管理する同一メモリ領域内の別のキャッシュラインに関する情報であると判断でき、細粒度スヌープフィルタ３４ｄの情報を用いてスヌープを抑止することができる。
【００４０】
図１０の例は、粗粒度スヌープフィルタ３２ｅの状態情報には登録されているが、細粒度スヌープフィルタ３４ｅにはアドレス登録と保有者の登録が無いことを示している。細粒度スヌープフィルタ３４eには登録できるエントリ数に限りがあり、インデックスで競合があったアドレスは、細粒度スヌープフィルタ３４eのエントリから上書きされることがある。この場合、粗粒度スヌープフィルタ３２eが当該ラインを所有している可能性があることを示しているので、図１１のように、スヌープは１７０ａ及び１７０ｂによりプロセッサ１１０aと１１０ｂへブロードキャストされる。
【００４１】
図１２は、細粒度スヌープフィルタ３４ｆにヒットして、精度が向上を示する場合を示す。細粒度スヌープフィルタ３４ｆの登録状況から、アドレス「００００１１００００００」のラインをＣＰＵ１００aが所有していることが判るので、図１３のように、ＣＰＵ １１０ａにスヌープ１７０ａを発行する。
【００４２】
図１４の例は、ラインが複数のＣＰＵに共有されている場合を示す。粗粒度スヌープフィルタ３２ｇと細粒度スヌープフィルタ３４ｇの状態情報には登録されており、細粒度スヌープフィルタ３４ｇは「００００１１００００００」のラインがＣＰＵ１１０ａとＣＰＵ１１０ｂによって共有されている。この場合には、ラインを共有しているそれぞれのＣＰＵ１１０ａとＣＰＵ１１０ｂに対してスヌープが発行される。
【００４３】
起動時又は初期化時にリセット命令を受けるとリセット制御部５８の制御により、両者のスヌープフィルタのエントリ登録情報は、図１５のようにリセットされる。粗粒度スヌープフィルタ３２ｈをリセットする時には、細粒度スヌープフィルタ３４ｈのリセットとキャッシュを全てパージする必要がある。
また、粗粒度スヌープフィルタの性能を向上させるために、プロセッサやパーティションのリセット時、又は粗粒度スヌープフィルタの効果が低下した場合にリセットを行うのが好ましい。その時、複数のラインで粗粒度スヌープフィルタの１エントリを共有しているため、ハードウェアでのリセットは困難であり、ソフトウェアでキャッシュ・パージを行った上で、粗粒度スヌープフィルタのリセット命令を発行することによりリセットを行う。
【００４４】
図１６は、リモートのノード１００ｂからノード１００ａにＲＥＡＤトランザクションが発行されてきたことを示している。ノードコントローラ２４０からアクセス要求がＣＰＵ１１０ａに発行され、グローバルな性質を持ったスヌープフィルタ２５０を介してスヌープを発行する。
【００４５】
このグローバルスヌープフィルタの構成を図１７に示す。グローバルな性質を持った粗粒度スヌープフィルタ７０の領域は、ローカルのメインメモリのアドレスを分割した複数メモリ空間であり、その所有者７１はノードになる。図中のＲ１、Ｒ２、Ｒ３はそれぞれリモードノード１（１００ｂ）、リモードノード２（１００ｃ）、リモードノード３（１００ｄ）を示し、Ｌはローカルノードを示す。
【００４６】
グローバルな性質を持った細粒度スヌープフィルタ７５のアドレス格納部７２に対する保有者７３も同様に、ノードを示している。７４はラインが有効かどうかを示すバリッドビットである。フィルタの登録は先の説明と同様に、リモートのプロセッサからリクエストを発行されて来たことに起因して粗粒度スヌープフィルタ７０と細粒度スヌープフィルタ７５に登録を行う。リモートノードのリクエストを受けたときに、要求されたアドレスが含まれる領域に要求があったノードを粗粒度スヌープフィルタ７０に登録し、参照されたアドレスと要求してきたノードを細粒度スヌープフィルタ７５に記録する。
【００４７】
図１６の例において、ノード１からのアクセス要求が「００００１１００００００」のラインを要求しているとすると、図１７のエントリ情報からノード２とノード３が所有していることが判る。粗粒度スヌープフィルタ７０の「００００００００００００」から「０００１００００００００」の領域のエントリに、ノード１が所有したことを登録し、細粒度スヌープフィルタ７５のエントリに「００００１１００００００」のラインをノード１が所有したことを登録する。そして図１６のようにノード２とノード３に対してスヌープを発行する。
【００４８】
なお、本発明は上記した実施例に限定されないで、種々変形して実施することができる。例えば、上記実施例では、キャッシュがラインと呼ばれるメモリ量を中心にして構成される場合を前提にしてスヌープの発行制御を行う。しかし、キャッシュがブロック又はページと呼ばれるメモリ量を中心にして構成されることがある。この場合には、上記実施例におけるラインは、ブロック又はページ等の所定のメモリ単位となり、この所定のメモリ単位でスヌープの制御が行われる。これについては格別に説明せずとも容易に理解できよう。
【図面の簡単な説明】
【００４９】
【図１】一実施例におけるコンピュータシステムの構成を示す図、
【図２】一実施例における粗粒度スヌープフィルタと細粒度スヌープフィルタを併せ持つスヌープフィルタの構成を示す図、
【図３】一実施例における粗粒度スヌープフィルタと細粒度スヌープフィルタの構成を示す図、
【図４】一実施例におけるスヌープフィルタの具体的な制御ブロック図、
【図５】一実施例におけるセットアソシアティブ方式における動作例を示す図、
【図６】一実施例における粗粒度スヌープフィルタと細粒度スヌープフィルタのエントリ登録の動作例を示す図、
【図７】一実施例におけるローカルノードからリモートノードへメモリアクセス要求の動作例を示す図、
【図８】一実施例における初起動時及びリセット時のエントリ登録の動作例を示す図、
【図９】一実施例における該当するラインがどこにあるか特定できない場合のエントリ例を示す図、
【図１０】一実施例における該当するラインがエントリ内に存在しない場合のエントリ例を示す図、
【図１１】一実施例におけるスヌープをブロードキャストする場合の動作例を示す図、
【図１２】一実施例における該当ラインのデータをローカルノード内のプロセッサが所持するエントリ例を示す図、
【図１３】一実施例における細粒度スヌープフィルタの登録情報からラインの保有者のみにスヌープを発行する動作例を示す図、
【図１４】一実施例におけるリモートのラインをローカルノード内のプロセッサが共有している場合のエントリ例を示す図、
【図１５】一実施例における初期化時及びリセット時のエントリ例を示す図、
【図１６】一実施例におけるグローバルスヌープフィルタにおける動作例を示す図、
【図１７】一実施例におけるグローバルスヌープフィルタの構成を示す図。
【符号の説明】
【００５０】
１００ａ、１００ｂ、１００ｃ、１００ｄ：ノード、  
１１０ａ、１１０ｂ、１１０ｃ：プロセッサ、
１２０ａ、１２０ｂ、１２０ｃ：キャッシュメモリ、
１３０：メインメモリ、    １４０：ノードコントローラ、  １５０：スヌープフィルタ、
１６０：ノード間の接続、  １７０：ノードコントローラ−プロセッサ間の接続線、
１８０：プロセッサ−メモリ間の接続線、  
３０：スヌープフィルタの入力、
３１：スヌープフィルタの出力、
３２、３２ａ〜３２ｈ：粗粒度スヌープフィルタ、      ３３：状態情報、
３４、３４ａ〜３４ｈ：細粒度スヌープフィルタ、      ３５：アドレス格納部、
３６：状態情報、          ３７：バリッドビット、    ４０：キャッシュタグ、      ４１：インデックス、      ４２：データフィールド、  ５０：アクセス要求、
５１：比較器、            ５２：セレクタ、    
５３：スヌープジェネレータ、        ５４：スヌープ発行制御部、
５５：スヌープ、                    ５６：レスポンス集計論理部、
５７：情報登録制御部、              ５８：リセット制御部、
７０：グローバルな性質を持った粗粒度スヌープフィルタ、
７１：状態情報、
７５：グローバルな性質を持った細粒度スヌープフィルタ、
７２：アドレス格納部、            ７３：状態情報、    ７４：バリッドビット。
【図１】
2008310414.tif 000003
【図２】
2008310414.tif 000004
【図３】
2008310414.tif 000005
【図４】
2008310414.tif 000006
【図５】
2008310414.tif 000007
【図６】
2008310414.tif 000008
【図７】
2008310414.tif 000009
【図８】
2008310414.tif 000010
【図９】
2008310414.tif 000011
【図１０】
2008310414.tif 000012
【図１１】
2008310414.tif 000013
【図１２】
2008310414.tif 000014
【図１３】
2008310414.tif 000015
【図１４】
2008310414.tif 000016
【図１５】
2008310414.tif 000017
【図１６】
2008310414.tif 000018
【図１７】
2008310414.tif 000019