(57)【要約】【課題】２個以上のノードを有するコンピュータシステムにおいて、複数ノード間の伝送路内や、同一ノード内のスヌープの個数を削減し、トラフィックの増加を抑える機構を提供する。【解決手段】２個以上のノードを有するマルチプロセッサコンピュータシステムにおいて、キャッシュコヒーレンスを保つために、あるノードから異なるノードへスヌープを送信する際に、一度Ｒｅａｄ要求やスヌープ要求によりアクセスされたキャッシュラインのアドレスを、ノードコントローラ内のスヌープフィルタが記憶しておくことで、２回目以降のアクセスの際に、スヌープフィルタの情報を用いて無駄なスヌープを削減し、システム内のトラフィックの増加を抑える。【選択図】  図１
2008276339.tif 000002
【特許請求の範囲】
【請求項１】
複数のノードから成り、各ノードは、キャッシュメモリを有する１つ以上のＣＰＵと、他ノードと共通に使用するメインメモリと、該メインメモリに接続され何れかのＣＰＵからの要求に対するデータ対応処理を行うメモリコントローラと、自ノードのＣＰＵを制御すると共に他ノードと相互に接続してデータ転送を行うノードコントローラを備え、該ノードコントローラは自ノード内の各キャッシュへのスヌープ送信を制御するローカルスヌープフィルタを有することを特徴とするマルチプロセッサコンピュータシステム。
【請求項２】
複数のノードから成り、各ノードは、キャッシュメモリを有する１つ以上のＣＰＵと、他ノードと共通に使用するメインメモリと、該メインメモリに接続され何れかのＣＰＵからの要求に対するデータ対応処理を行うメモリコントローラと、自ノードのＣＰＵを制御すると共に他ノードと相互に接続してデータ転送を行うノードコントローラを備え、該ノードコントローラは他ノード内のキャッシュへのスヌープ送信を制御するグローバルスヌープフィルタを有することを特徴とするマルチプロセッサコンピュータシステム。
【請求項３】
前記ノードコントローラは他ノード内のキャッシュへのスヌープ送信を制御するグローバルスヌープフィルタを有することを特徴とする請求項１記載のマルチプロセッサコンピュータシステム。
【請求項４】
前記ローカルスヌープフィルタは、自ノード内のキャッシュメモリから他ノード内のメインメモリへのＲｅａｄ要求をトリガとして要求されたキャッシュラインのアドレスを登録するアドレス記憶部と前記登録されたアドレスに対して自ノード内の各キャッシュの当該キャッシュラインの所有の有無を示す情報を登録するキャッシュステート記憶部を有することを特徴とする請求項１記載のマルチプロセッサコンピュータシステム。
【請求項５】
前記ローカルスヌープフィルタは、他ノードから自ノードコントローラに接続されているＣＰＵ内のキャッシュメモリへのスヌープ要求をトリガとして要求されたキャッシュラインのアドレスを登録するアドレス記憶部と前記登録されたアドレスに対して自ノード内の各キャッシュの当該キャッシュラインの所有の有無を示す情報を登録するキャッシュステート記憶部を有することを特徴とする請求項１記載のマルチプロセッサコンピュータシステム。
【請求項６】
前記グローバルスヌープフィルタは、他ノード内のキャッシュメモリから自ノード内のメインメモリへのＲｅａｄ要求をトリガとして要求されたキャッシュラインのアドレスを登録するアドレス記憶部と前記登録されたアドレスに対して他ノードが自ノード内のメインメモリの当該キャッシュラインの所有の有無を示す情報を登録するプレゼンス記憶部を有することを特徴とする請求項２記載のマルチプロセッサコンピュータシステム。
【請求項７】
前記グローバルスヌープフィルタは、自ノード内のメモリコントローラから他ノード内のキャッシュメモリへのスヌープ要求をトリガとして要求されたキャッシュラインのアドレスを登録するアドレス記憶部と前記登録されたアドレスに対して他ノードが自ノード内のメインメモリの当該キャッシュラインの所有の有無を示す情報を登録するプレゼンス記憶部を有することを特徴とする請求項２記載のマルチプロセッサコンピュータシステム。
【請求項８】
前記アドレス記憶部により格納されたアドレスと要求アドレスがヒットした場合、前記キャッシュステート記憶部がキャッシュラインの無所有を示しているキャッシュメモリに対して、スヌープ送信をフィルタリングするスヌープ処理部を備えたことを特徴とする請求項４又は５記載のマルチプロセッサコンピュータシステム。
【請求項９】
前記アドレス記憶部により格納されたアドレスと要求アドレスがヒットした場合、前記プレゼンス記憶部がキャッシュラインの無所有を示しているノードに対して、スヌープ送信をフィルタリングするスヌープ処理部を備えたことを特徴とする請求項６又は７記載のマルチプロセッサコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、キャッシュメモリを有する１つ以上のＣＰＵと、メインメモリに接続され何れかのＣＰＵからの要求に対するデータ対応処理を行うメモリコントローラと、ＣＰＵに接続され１つ以上のＣＰＵ間の制御を行うノードコントローラから構成されるノードと、２つ以上のノードから構成されるマルチプロセッサコンピュータシステムにおいて、
ＣＰＵからのメモリアクセス要求に対する応答として、自ノード及び他ノードに対するスヌープ要求のブロードキャストを実行する前に、自ノード配下におけるメインメモリの特定のデータブロック（以後、キャッシュラインと記す）が、どの他ノード内のキャッシュも所有していないという無所有情報や、１つ以上の他ノード内のキャッシュが所有しているという所有情報を保持し、なおかつ他ノード配下におけるメインメモリの特定のキャッシュラインが、どの自ノード内のキャッシュも所有していないという無所有情報や、１つ以上の自ノード内のキャッシュが所有しているという所有情報を保持する専用のスヌープフィルタをアクセスすることにより、マルチプロセッサコンピュータシステムにおける、システム内のスヌープの個数を削減した、キャッシュメモリの一貫性の保証を行うノード制御装置及び制御方法に関する。
【背景技術】
【０００２】
近年、企業における基幹業務など特に高い処理能力を要求されるサーバ等のコンピュータシステムにおいては、大規模ＳＭＰ（Ｓｙｍｍｅｔｒｉｃ  Ｍｕｌｔｉ−Ｐｒｏｃｅｓｓｏｒ：対称型マルチプロセッサ）構成に代表される、１個以上のＣＰＵ、メインメモリと、複数のＣＰＵの制御を行うノードコントローラから構成される、複数のノードが相互結合されたシステムを構築し、処理能力の向上を図るようになった。
【０００３】
このような大規模ＳＭＰ構成等の高性能コンピュータシステムにおいて、ＣＰＵやＩ／Ｏ装置からメインメモリに対するメモリアクセス要求が発生した場合には、複数のノード間を接続する伝送路を経由して前記メモリアクセス要求に対応するスヌープを各ノードのノードコントローラに送信し、次に各ノードコントローラが自ノード配下のキャッシュに対しマルチキャストを実行することにより、ブロードキャストが実行される。その後、各ノードにおけるノードコントローラが互いに前記スヌープの検索結果を再度伝送路経由により送受信することにより、前記アクセス要求に対する処理内容が決定される。
【０００４】
従って、システム内におけるプロセッサ数が増加すると、ブロードキャストによりスヌープの個数が増加し、システム内のトラフィックが増加することにより、結果的にシステム全体の性能低下を引き起こす結果となる。
【０００５】
また、伝送路上の伝播時間もメモリアクセス時間に対してレイテンシが付加されることにより、システム性能に対して悪影響を与える等の問題がある。
【０００６】
特許文献１には、サーバやＰＣ等のチップセットを構成し、メインメモリ及びＣＰＵ内部のキャッシュメモリとの間のデータ共有に関する制御を、自ノード配下のＣＰＵ内部のキャッシュメモリに登録されているデータを管理するデータタグにより行うシステム・コントローラＬＳＩ等のメモリ制御装置において、ＣＰＵからのメモリアクセス要求対して応答すべきデータに対するキャッシュミスがＣＰＵ内部のキャッシュメモリにおいて発生した場合において、自ノード配下のＤＴＡＧ及び他ノード配下のＤＴＡＧに対するブロードキャストを実行する前に、自ノード配下におけるメインメモリの特定のキャッシュラインが自ノード配下におけるＣＰＵの２次キャッシュメモリに保持されていないという無主情報を保持する専用のタグメモリであるリテンションタグ（ＲＴＡＧ）をアクセスすることにより、ブロードキャスト等の不要な伝送路経由のアクセスを削減し、メモリアクセスにおけるスループットを向上する技術が開示されている。
【０００７】
しかし、特許文献１が開示しているのは、ノード間の、伝送路のトラフィックの削減を目的として、自ノード配下のＣＰＵ内部のキャッシュメモリに登録されているデータを管理するＤＴＡＧのほかに、対象データが自ノード配下のどのＣＰＵ内部のキャッシュメモリにも保持されていないという無主情報を保持するリテンションタグ（ＲＴＡＧ）を使用して、キャッシュミスが発生した場合にＲＴＡＧをアクセスすることにより、多ノード間の伝送路のトラフィックを削減する技術であり、ノード内のキャッシュメモリが要求されたキャッシュラインを保持している場合には、ノード内の全キャッシュメモリに対してマルチキャストを実行しなければならない。
【０００８】
さらに、特許文献１が開示している、対象データが自ノード配下のどのＣＰＵ内部のキャッシュメモリにも保持されていないという無主情報を保持するリテンションタグ（ＲＴＡＧ）は、ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）により制御されるため、ＬＲＵ制御によりＲＴＡＧから追い出されたキャッシュラインのアクセスに対しては、ブロードキャストを行う必要がある。
【０００９】
従って、特許文献１に開示されている技術では、要求されたキャッシュラインの無所有情報のみを保持しているため、ノード内のトラフィックを十分に削減できないことに加え、ＲＴＡＧをミスヒットした際の効果的なスヌープの削減手法を開示していないという問題がある。
【００１０】
【特許文献１】特開２００６−２０２２１５
【発明の開示】
【発明が解決しようとする課題】
【００１１】
本発明は、キャッシュメモリを有する１つ以上のＣＰＵと、メインメモリに接続され何れかのＣＰＵからの要求に対するデータ対応処理を行うメモリコントローラと、ＣＰＵに接続され１つ以上のＣＰＵ間の制御を行うノードコントローラから構成されるノードと、２つ以上のノードから構成されるマルチプロセッサコンピュータシステムにおいて、ノード間のブロードキャストによるスヌープの個数と、ノード内のマルチキャストによるスヌープの個数を削減し、メモリアクセスにおけるトラフィックを減少させたノード制御装置及び制御方法を提供する。
【課題を解決するための手段】
【００１２】
上記目標を解決するために本発明は、複数のノードから成り、各ノードは、キャッシュメモリを有する１つ以上のＣＰＵと、他ノードと共通に使用するメインメモリと、該メインメモリに接続され何れかのＣＰＵからの要求に対するデータ対応処理を行うメモリコントローラと、自ノードのＣＰＵを制御すると共に他ノードと相互に接続してデータ転送を行うノードコントローラを備え、該ノードコントローラは自ノード内の各キャッシュへのスヌープ送信を制御するローカルスヌープフィルタと他ノード内のキャッシュへのスヌープ送信を制御するグローバルスヌープフィルタを有することを特徴とするマルチプロセッサコンピュータシステムである。
さらに、本発明は、前記ローカルスヌープフィルタが、自ノード内のキャッシュメモリから他ノード内のメインメモリへのＲｅａｄ要求をトリガとして、又は他ノードから自ノードコントローラに接続されているＣＰＵ内のキャッシュメモリへのスヌープ要求をトリガとして要求されたキャッシュラインのアドレスを登録するアドレス記憶部と前記登録されたアドレスに対して自ノード内の各キャッシュの当該キャッシュラインの所有の有無を示す情報を登録するキャッシュステート記憶部を有することを特徴とするマルチプロセッサコンピュータシステムである。
さらに、本発明は、前記グローバルスヌープフィルタが、他ノード内のキャッシュメモリから自ノード内のメインメモリへのＲｅａｄ要求をトリガとして、又は自ノード内のメモリコントローラから他ノード内のキャッシュメモリへのスヌープ要求をトリガとして要求されたキャッシュラインのアドレスを登録するアドレス記憶部と前記登録されたアドレスに対して他ノードが自ノード内のメインメモリの当該キャッシュラインの所有の有無を示す情報を登録するプレゼンス記憶部を有することを特徴とするマルチプロセッサコンピュータシステムである。
【発明の効果】
【００１３】
本発明によれば、他ノードから自ノードへの特定のキャッシュラインに対するスヌープ要求が到着した際に、そのノード内でマルチキャストを実行する前に、前記ローカルスヌープフィルタをアクセスすることにより、そのノード内に当該キャッシュラインを所有しているキャッシュメモリが存在しない場合はそのノード内にスヌープを送信せずに済み、また、そのノード内の特定のキャッシュメモリが当該キャッシュラインを所有する場合は、当該キャッシュラインを所有する特定のキャッシュメモリにのみスヌープを送信することで、ノード内のマルチキャスト実行せずに済み、スヌープの個数を削減できる。
【００１４】
さらに、本発明によれば、自ノードから他ノードへの特定のキャッシュラインに対してスヌープ要求のブロードキャストを実行する前に、グローバルスヌープフィルタをアクセスすることにより、他ノードが当該キャッシュラインを所有しない場合は、他ノードに対してスヌープを発行せずに済み、また、特定の他ノードが当該キャッシュラインを所有する場合は、当該キャッシュラインを所有する特定の他ノードにのみスヌープを発行することで、ノード間に渡るブロードキャストにおけるスヌープの個数を削減できる。
【００１５】
このように、メモリコントローラがディレクトリを持たないようなコンピュータシステムであっても、ローカルスヌープフィルタが、他ノードが自ノード配下のメインメモリにおけるデータブロックの所有・無所有情報を保持しているため、自ノードから他ノードへデータブロックのコピーが転送されたライン、他ノードから自ノードへデータブロックのコピーが転送されたライン、他ノードから他ノードへデータブロックのコピーが転送されたラインの、ノード間参照が発生する場合の全てにおいて情報を管理することができるため、ローカルスヌープフィルタをディレクトリの代わりとして用いることでスヌープの個数を削減することができる。
【発明を実施するための最良の形態】
【００１６】
図１に、本発明におけるスヌープフィルタを使用したコンピュータシステム全体の構成の一例を示す。
【００１７】
ノード０  １０１ａは、２つのメインメモリ（メインメモリ０，１  １１３ａ，１１３ｂ）と、２つのＣＰＵ（ＣＰＵ０，１  １０８ａ，１０８ｂ）と、前記メインメモリと前記ＣＰＵに接続されている２つのメモリコントローラ（メモリコントローラ０，１  １１０ａ，１１０ｂ）と、前記２つのＣＰＵ０，ＣＰＵ１と、ノード０とは異なるノード内のノードコントローラに接続された、前記２つのＣＰＵとノード間の制御を行う、ノードコントローラ（ノードコントローラ０  １０２ａ）から構成される。同様なノードがさらに２つ存在し（ノード１，２  １０１ｂ，１０１ｃ）、この前記３つのノードは伝送路  １００ａにより相互に接続されている。
【００１８】
前記ＣＰＵ０は、内部にキャッシュメモリ（キャッシュ０  １０９ａ）と、アドレスデコーダ（アドレスデコーダ０  １０７ａ）を有しており，伝送路  １００ｅにより相互に接続されている。ここで、前記アドレスデコーダ０は、前記ＣＰＵ０から入力としてメモリアクセスのターゲットキャッシュラインアドレス（以後、キャッシュラインアドレスと略記する）を受け取り、そのキャッシュラインアドレスが同一ノード内のメインメモリ中に含まれるのであるならば、そのメインメモリに直接接続されたメモリコントローラを指し示す情報を、前記伝送路  １００ｅを通して前記ＣＰＵ０に出力する機能を有し、また、前記ＣＰＵ０から受け取ったキャッシュラインアドレスが自ノードとは異なるノード内のメインメモリ中のアドレスであるならば、同一ノード内のノードコントローラを指し示す情報を前記伝送路  １００ｅを通して前記ＣＰＵ０に出力する機能を有す。
【００１９】
また、前記ＣＰＵ０において、ある特定のメインメモリに含まれるデータ（キャッシュライン）に対してのメモリアクセス要求が発生し、当該メモリアクセス要求に対して応答すべきデータに対するキャッシュミスが前記ＣＰＵ０内の前記キャッシュ０において発生した場合において、前記ＣＰＵ０は、当該キャッシュラインアドレスを前記アドレスデコーダ０に入力し、出力結果が指し示す同一ノード内の前記メモリコントローラ０，１、または前記ノードコントローラ０のいずれかへＲｅａｄ要求を発行する機能を有す。また、ある特定のキャッシュラインに対してのＳｎｏｏｐ要求を前記ＣＰＵ０が受信した場合において、前記ＣＰＵ０は、前記ＣＰＵ０の内部にある前記キャッシュ０が保持しているメモリコピーを調べ、その結果から前記Ｓｎｏｏｐ要求に対する応答を生成し、前記Ｓｎｏｏｐ要求の発行元へ返信する機能を有す。
【００２０】
同様に、前記ＣＰＵ１も、内部にキャッシュメモリ（キャッシュ１  １０９ｂ）と、アドレスデコーダ（アドレスデコーダ１  １０７ｂ）から構成され、前記ＣＰＵ０と同様な機能を有する。
【００２１】
前記メモリコントローラ０は、コヒーレンスコントローラ（コヒーレンスコントローラ０  １１１ａ）とディレクトリ（ディレクトリ０  １１２ａ）により構成され、前記コヒーレンスコントローラ０と前記ディレクトリ０は伝送路  １００ｆにより相互に接続されている。ここで、前記ディレクトリ０は、前記コヒーレンスコントローラ０から、前記メモリコントローラ０と直接接続されている前記メインメモリ０に含まれるキャッシュラインアドレスを入力として受け取り、前記コヒーレンスコントローラ０に、当該キャッシュラインを所有しているキャッシュが自ノード内のキャッシュであるならば、そのキャッシュを指し示す情報のリストと、当該キャッシュラインを所有しているキャッシュが他ノード内のキャッシュであるならば、自ノード内の前記ノードコントローラを指し示す情報を出力する機能を有す。
【００２２】
また、前記メモリコントローラ０内部の前記コヒーレンスコントローラ０が、前記メモリコントローラ０と直接接続されている前記メインメモリ０中の特定のキャッシュラインアドレスに対するＲｅａｄ要求を受信した場合において、前記コヒーレンスコントローラ０は、伝送路  １００ｆを通じて前記ディレクトリ０に前記Ｒｅａｄ要求に含まれるキャッシュラインアドレスを入力し、得られたリストが空集合である場合は、当該キャッシュラインアドレスのキャッシュラインを前記Ｒｅａｄ要求の返信として、前記Ｒｅａｄ要求の要求元へ返信する機能を有す。また、前記メモリコントローラ０内部の前記コヒーレンスコントローラ０が、前記メモリコントローラ０と直接接続されている前記メインメモリ０中の特定のキャッシュラインアドレスに対するＲｅａｄ要求を受信した場合において、前記コヒーレンスコントローラ０は、伝送路  １００ｆを通じて前記ディレクトリ０に前記Ｒｅａｄ要求に含まれるキャッシュラインアドレスを入力し、得られたリストが空集合でない場合は、当該キャッシュラインアドレスへのＳｎｏｏｐ要求を生成し、前記リストに含まれる情報が指し示すコンポーネントへ送信する機能を有する。また、前記Ｓｎｏｏｐ要求を発行した場合において、前記メモリコントローラ０内部の前記コヒーレンスコントローラ０は、発行した前記Ｓｎｏｏｐ要求に対する返答を集計する機能を有し、前記Ｓｎｏｏｐ要求に対する返答の集計後、前記Ｒｅａｄ要求の要求元へ、当該キャッシュラインアドレスのキャッシュラインを返信する機能を有す。
【００２３】
同様に前記メモリコントローラ１も、コヒーレンスコントローラ（コヒーレンスコントローラ１  １１１ｂ）とディレクトリ（ディレクトリ１  １１２ｂ）により構成され、前記メモリコントローラ０と同様な機能を有する。
【００２４】
前記ノードコントローラ（ノードコントローラ０  １０２ａ）は、プロキシコヒーレンスコントローラ（プロキシコヒーレンスコントローラ  １０３ａ）、スヌープフィルタ（スヌープフィルタ０  １０４ａ）とアドレスデコーダ（アドレスデコーダ６  １０７ｇ）により構成され、前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０と伝送路  １００ｂにより相互に接続され、前記プロキシコヒーレンスコントローラ０は、前記アドレスデコーダ６と伝送路  １００ｃにより相互に接続されている。ここで、前記アドレスデコーダ６は、前記プロキシコヒーレンスコントローラ０から入力としてキャッシュラインアドレスを受け取り、そのキャッシュラインアドレスが同一ノード内のメインメモリ中のアドレスであるならば、そのメインメモリに直接接続されたメモリコントローラを指し示す情報を、前記伝送路  １００ｃを通して前記プロキシコヒーレンスコントローラ０に出力する機能を有し、また、前記ＣＰＵから受け取ったメモリアドレスが自ノードとは異なるノード内のメインメモリ中のアドレスであるならば、その異なるノード内のノードコントローラを指し示すの情報を前記伝送路  １００ｃを通して前記プロキシコヒーレンスコントローラ０に出力する機能を有す。
【００２５】
また、前記プロキシコヒーレンスコントローラ０が特定のキャッシュラインアドレスに対するＲｅａｄ要求を受信した場合において、前記プロキシコヒーレンスコントローラ０は、前記アドレスデコーダ６に入力として当該キャッシュラインアドレスを伝送路  １００ｃを通じて送信し、出力として得られた情報が指し示すノードコントローラもしくは、メモリコントローラへ前記Ｒｅａｄ要求を転送する機能を有する。また、同時に前記Ｒｅａｄ要求を受信した場合において、前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０へ入力として前記Ｒｅａｄ要求を前記伝送路  １００ｂを通して送信し、返信としてコンポーネントを指し示す情報のリストを受け取り、受け取った前記リストが空集合でない場合は当該キャッシュラインアドレスに対するＳｎｏｏｐ要求を生成し、前記リストに含まれる情報が指し示すコンポーネントの内、前記Ｒｅａｄ要求の送信元を除く全コンポーネントへ送信する機能を有する。（スヌープフィルタの動作は後述する。）
また、前記プロキシコヒーレンスコントローラ０が特定のキャッシュラインアドレスに対するＳｎｏｏｐ要求を受信した場合において、前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０へ入力として前記Ｓｎｏｏｐ要求を前記伝送路  １００ｂを通して送信し、返信としてコンポーネントを指し示す情報のリストを受け取り、受け取った前記リストが空集合でない場合は当該キャッシュラインアドレスに対するＳｎｏｏｐ要求を生成し、前記リストに含まれる情報が指し示すコンポーネントへ生成したＳｎｏｏｐ要求を送信する機能を有する。（スヌープフィルタの動作は後述する。）また、受け取った前記リストが空集合であった場合は、Ｓｎｏｏｐ要求を生成することはなく、受信した前記Ｓｎｏｏｐ要求の返信を前記Ｓｎｏｏｐ要求の送信元へ返信する機能を有する。
【００２６】
さらに前記プロキシコヒーレンスコントローラ０は、発行した前記Ｓｎｏｏｐ要求に対する返答を集計する機能を有する。さらに、前記プロキシコヒーレンスコントローラ０は、前記Ｓｎｏｏｐ要求がＲｅａｄ要求をトリガとして発行された場合は、前記Ｒｅａｄ要求の返答を受信するまで前記Ｓｎｏｏｐ要求の返信の集計結果を保持する機能を有し、前記Ｒｅａｄ要求の返答を受信した場合に、前記プロキシコヒーレンスコントローラ０は前記Ｒｅａｄ要求の要求元へ、受信した前記Ｒｅａｄ要求の返答と前記Ｓｎｏｏｐ要求の返信の集計結果を比較し、適切な前記Ｒｅａｄ要求の返答を生成し、転送する機能を有し、さらに前記Ｒｅａｄ要求の返答を前記スヌープフィルタ０へ送信する機能を有する。（スヌープフィルタの動作は後述する。）
また、前記プロキシコヒーレンスコントローラ０は、前記Ｓｎｏｏｐ要求が転送されてきたＳｎｏｏｐ要求をトリガとして発行された場合は、前記Ｓｎｏｏｐ要求に対する返答の集計後、前記Ｓｎｏｏｐ要求に含まれるキャッシュラインアドレスを前記アドレスデコーダ６に入力として送信し、前記アドレスデコーダ６から出力された情報が指し示すコンポーネントへ前記Ｓｎｏｏｐ要求の集計結果を送信する機能を有し、さらに前記Ｓｎｏｏｐ要求の返答を前記スヌープフィルタ０へ送信する機能を有する。（スヌープフィルタの動作は後述する。）
また、前記プロキシコヒーレンスコントローラ０が特定のキャッシュラインアドレスに対するＲｅａｄ要求の返答を受信した場合において、前記プロキシコヒーレンスコントローラ０は前記Ｒｅａｄ要求の要求元へ、受信した前記Ｒｅａｄ要求の返答を転送する機能を有し、さらに前記Ｒｅａｄ要求の返答を前記スヌープフィルタ０へ送信する機能を有する。（スヌープフィルタの動作は後述する。）
図１では、メインメモリに接続されたメモリコントローラがＣＰＵに接続する構成例を用いているが、メインメモリと、前記メインメモリと接続するメモリコントローラがノードの外部に存在し、ノードコントローラと接続される構成を用いても、本発明に対し何ら支障はない。
【００２７】
図２に、図１で示したコンピュータシステムを構成した際における、本発明におけるスヌープフィルタの概念図の一例を示す。
【００２８】
スヌープフィルタ  ２０１は、ローカルスヌープフィルタ  ２０２と、グローバルスヌープフィルタ  ２０３、要求種別・受信方向判定部  ２０４、外部接続部  ２０５により構成される。
【００２９】
前記外部接続部は、図１中のプロキシコヒーレンスコントローラ  １０３と伝送路  １００ｂにより相互に接続され、前記プロキシコヒーレンスコントローラから入力として受信した各種要求をリンク  ２１２を通して前記要求種別・受信方向判定部へ転送する機能を有し、さらに前記ローカルスヌープフィルタと前記グローバルスヌープフィルタから受信したＳｎｏｏｐ要求転送先を指し示す情報のリストを前記プロキシコヒーレンスコントローラへ返信する機能を有する。
【００３０】
また、前記外部接続部は、前記ローカルスヌープフィルタ内のＳｎｏｏｐ要求転送先特定部  ２０８ａと、前記グローバルローカルスヌープフィルタ内のＳｎｏｏｐ要求転送先特定部  ２０８ｂから、Ｓｎｏｏｐ要求の発行先のリストをリンク２１７ａ，２１７ｂを通して受信し、同時にプロキシコヒーレンスコントローラへ受信した前記リストを伝送路  １０７ｂを通じて転送する機能を有する。
【００３１】
前記要求種別・受信方向判定部は、リンク  ２１２を通じて前記外部接続部より受信した各種要求の要求元が自ノードであるか、あるいは他ノードであるか判定する機能を有し、受信した前記要求が、どの種別の要求であるのか判定する機能を有し、前記受信した要求の種別と受信方向の組み合わせにより、リンク  ２１３ａ，２１３ｂ，２１８ａ，２１８ｂの何れかを通じ、前記ローカルスヌープフィルタ内のアドレス比較部  ２０６ａ，エントリ情報更新部  ２０７ａ，前記グローバルスヌープフィルタ内のアドレス比較部  ２０６ｂ，エントリ情報更新部  ２０７ｂの何れかへ前記要求に含まれるキャッシュラインアドレスを転送する機能を有する。
【００３２】
ここで、前記要求種別・受信方向判定部が受信した要求が、要求元が自ノード内のキャッシュである、かつ、Ｒｅａｄ要求であるならば、前記受信した要求は２１３ａへ排出され、
前記要求種別・受信方向判定部が受信した要求が、要求元が他ノードのノードコントローラである、かつ、Ｒｅａｄ要求であるならば、前記受信した要求は２１３ｂへ排出され、
前記要求種別・受信方向判定部が受信した要求が、要求元が自ノード内のキャッシュである、かつ、Ｓｎｏｏｐ要求であるならば、前記受信した要求は２１３ｂへ排出され、
前記要求種別・受信方向判定部が受信した要求が、要求元が他ノードのノードコントローラである、かつ、Ｓｎｏｏｐ要求であるならば、前記受信した要求は２１３ａへ排出され、
前記要求種別・受信方向判定部が受信した要求が、要求元が自ノード内のキャッシュである、かつ、Ｒｅａｄ要求に対する返信であるならば、前記受信した要求は２１８ｂへ排出され、
前記要求種別・受信方向判定部が受信した要求が、要求元が他ノードのノードコントローラである、かつ、Ｒｅａｄ要求に対する返信であるならば、前記受信した要求は２１８ａへ排出され、
前記要求種別・受信方向判定部が受信した要求が、要求元が自ノード内のキャッシュである、かつ、Ｓｎｏｏｐ要求に対する返信であるならば、前記受信した要求は２１８ａへ排出され、
前記要求種別・受信方向判定部が受信した要求が、要求元が他ノードのノードコントローラである、かつ、Ｓｎｏｏｐ要求に対する返信であるならば、前記受信した要求は２１８ｂへ排出される。
前記ローカルスヌープフィルタは、アドレス比較部  ２０６ａと、エントリ情報更新部  ２０７ａと、Ｓｎｏｏｐ要求転送先特定部  ２０８ａと、エントリが有効か否かの情報保持する領域  ２０９ａと、キャッシュラインアドレスを記憶する領域  ２１０ａと、その記憶されたキャッシュラインのアドレスにおけるキャッシュステートを記憶する領域  ２１１ａから構成される。また、前記キャッシュラインのアドレスにおけるキャッシュステートを記憶する領域は、同一ノード内に存在するキャッシュメモリの個数分用意しており、プレゼンスビットとして扱われる。
前記領域２０９ａは、当該エントリが有効である場合、０ｂ１がセットされ、当該エントリが無効である場合０ｂ０がセットされる。また、初期値は０ｂ０がセットされているものとする。
前記領域２１０ａには、キャッシュラインアドレスが記録され、前記領域２１１ａには、前記プレゼンスビットに対応するコンポーネントが前記キャッシュラインを所有している場合には０ｂ１がセットされ、前記プレゼンスビットに対応するコンポーネントが前記キャッシュラインを所有していない場合には０ｂ０がセットされる。
前記アドレス比較部は、リンク２１３ａから受信した要求内のキャッシュラインアドレスと、リンク  ２１４ａを通して得た、前記領域２０９ａの値が０ｂ１であるエントリの前記領域２１０ａに登録されているキャッシュラインアドレスとの比較を行う機能を有する。以後アドレスヒットチェックと呼ぶこととする。比較の結果、同一アドレスがエントリに登録されていた場合をヒットと呼び、ヒットしたという情報をリンク  ２１５ａを通して前記Ｓｎｏｏｐ要求転送先特定部へ転送する機能を有する。また、同一アドレスがエントリに登録されていなかった場合をミスと呼び、ミスしたという情報をリンク  ２１５ａを通して前記Ｓｎｏｏｐ要求転送先特定部へ転送する機能を有する。
前記Ｓｎｏｏｐ要求転送先特定部は、入力として、リンク  ２１５ａからアドレスヒットチェックの結果と、前記アドレスヒットチェックの結果がヒットであった場合は、ヒットしたエントリの前記領域２１１ａを受け取る。その結果、前記アドレスヒットチェックの結果がヒットであった場合は、ヒットしたエントリの前記領域２１１ａのうち、値が０ｂ１である領域に対応したキャッシュを指し示す情報のリストを作成し、リンク  ２１７ａを通じて前記外部接続部へ前記リストを転送する機能を有する。また、前記アドレスヒットチェックの結果がミスであった場合は、自ノード内に存在する全てのキャッシュを指し示す情報のリストを生成し、リンク  ２１７ａを通じて前記外部接続部へ前記リストを転送する機能を有する。
前記エントリ情報更新部は、入力として前記前記要求種別・受信方向判定部から要求を受信し、エントリ内容を更新する機能を有する。
例として、前記エントリ情報更新部が受信した要求種がＳｎｏｏｐ要求の返答である場合、前記エントリ情報更新部はエントリ内に登録されているキャッシュラインアドレスと、前記Ｓｎｏｏｐ要求の返答のキャッシュラインアドレスを比較し、一致するキャッシュラインアドレス登録されているエントリが存在しない場合、前記領域２０９ａが０ｂ０であるエントリを１つ選択する。その後、当該エントリの前記領域２０９ａを０ｂ１にセットし、前記領域２１０ａに前記Ｓｎｏｏｐ要求の返答のキャッシュラインを登録し、前記領域２１１ａの内、前記Ｓｎｏｏｐ要求の返答の送信元に対応するプレゼンスビットの値を更新する。このとき、前記プレゼンスビットの値は、前記Ｓｎｏｏｐ要求の返答が当該キャッシュラインのメモリコピーの所有を示すものならば０ｂ１が、前記Ｓｎｏｏｐ要求の返答が当該キャッシュラインのメモリコピーの無所有を示すものならば０ｂ０がセットされる。
また、前記エントリ情報更新部が受信した要求種がＲｅａｄ要求の返答である場合、前記エントリ情報更新部はエントリ内に登録されているキャッシュラインアドレスと、前記Ｒｅａｄ要求の返答のキャッシュラインアドレスを比較し、一致するキャッシュラインアドレスが登録されているエントリが存在する場合、当該エントリが選択される。その後、当該エントリの前記領域２０９ａを０ｂ１にセットし、前記領域２１０ａに前記Ｒｅａｄ要求の返答のキャッシュラインを登録し、前記領域２１１ａの内、前記Ｒｅａｄ要求の返答の送信先に対応するプレゼンスビットの値を前記と同様に更新する。
また、スヌープフィルタにシステム内のすべてのキャッシュラインに関する情報を保持させることは現実的には困難である。そのため、前記エントリ情報更新部は、スヌープフィルタのすべてのエントリにキャッシュラインの情報が登録されており、さらに新規のキャッシュラインを登録する場合は、既に登録されている情報を消去しなければならない。この場合にＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）などのアルゴリズムを用いて、既存の情報の追い出し制御を行う。
例として、図２におけるローカルスヌープフィルタとグローバルスヌープフィルタの両方とも、キャッシュラインのアドレスを記憶する領域と、その記憶されたキャッシュラインのアドレスにおけるキャッシュステートを記憶する領域の組をｎ個用意することにより、ｎウェイ構成をもつものとする。
また、ローカルスヌープフィルタを用いないシステム構成の場合、前記メッセージ種別・受信方向判定部において、リンク２１３ａへ排出されるような要求を前記スヌープフィルタが受信した場合は、前記メッセージ種別・受信方向判定部は、リンク  ２１９を通じて自ノード内の全キャッシュを指し示す情報のリストを返信する機能を有するものとする。
前記グローバルスヌープフィルタは、アドレス比較部  ２０６ｂと、エントリ情報更新部  ２０７ｂと、Ｓｎｏｏｐ要求転送先特定部  ２０８ｂと、エントリが有効か否かの情報保持する領域  ２０９ｂと、キャッシュラインアドレスを記憶する領域  ２１０ｂと、その記憶されたキャッシュラインのアドレスにおけるキャッシュステートを記憶する領域  ２１１ｂから構成される。また、前記キャッシュラインのアドレスにおけるキャッシュステートを記憶する領域は、自身を除く、システム内に存在するノードコントローラの個数分用意しており、プレゼンスビットとして扱われる。
前記領域２０９ｂ、前記領域２１０ｂ、前記領域２１１ｂ、前記アドレス比較部は、前記ローカルスヌープフィルタ内の前記領域２０９ａ、前記領域２１０ａ、前記領域２１１ａ、前記アドレス比較部、前記エントリ情報更新部と同様な機能を有する。
また、前記Ｓｎｏｏｐ要求転送先特定部も、前記ローカルスヌープフィルタ内の、前記Ｓｎｏｏｐ要求転送先特定部と同様な機能を有するが、前記アドレスヒットチェックの結果がミスであった場合は、システム内に存在する、自身を除く全てのノードコントローラを指し示す情報のリストを生成し、リンク  ２１７ｂを通じて前記外部接続部へ前記リストを転送する機能を有する。
また、グローバルスヌープフィルタを用いないシステム構成の場合、前記メッセージ種別・受信方向判定部において、リンク２１３ｂへ排出されるような要求を前記スヌープフィルタが受信した場合は、前記メッセージ種別・受信方向判定部は、リンク  ２１９を通じて他ノード内の全ノードコントローラを指し示す情報のリストを返信する機能を有するものとする。
【実施例１】
【００３３】
図３に前記請求項１におけるコンピュータシステムの構成例を、図４に前記請求項１におけるスヌープフィルタの構成例を示す。
【００３４】
（本発明の実施例その１における動作例）
ここでは、前記請求項１における、ローカルスヌープフィルタを備えたコンピュータシステムにおいて、システム内の全キャッシュが、当該キャッシュラインを所有していなく、なおかつ、どのノードコントローラ内のスヌープフィルタに何も登録されていない場合に、あるＣＰＵから特定のキャッシュラインに対するＲｅａｄ要求が発生し、続いて異なるＣＰＵから同一のキャッシュラインに対するＲｅａｄ要求が発生した場合の動作例について示す。
【００３５】
まず、ノード０  １０１ａ配下のＣＰＵ０  １０８ａにおいて、ノード１  １０１ｂ配下のメインメモリ２  １１３ｃに含まれるデータ（キャッシュライン）に対してのメモリアクセス要求が発生し、当該メモリアクセス要求に対して応答すべきデータに対するキャッシュミスがキャッシュ０  １０９ａにおいて発生した場合、前記ＣＰＵ０は、アドレスデコーダ０  １０７ａへキャッシュラインアドレスを送信し（アクセスし）、その出力の情報が指し示すノードコントローラ０  １０２ａに対し、Ｒｅａｄ要求を発行する。
前記Ｒｅａｄ要求を受信した前記ノードコントローラ０は、前記Ｒｅａｄ要求を、前記ノードコントローラ０内のプロキシコヒーレンスコントローラ０  １０３ａに送信する。ここで、前記Ｒｅａｄ要求を受信した前記ノードコントローラ０は、アドレスデコーダ６  １０７ｇにアクセスし、その結果の情報が指し示す前記ノード１内のノードコントローラ１  １０２ｂへ前記Ｒｅａｄ要求を転送する。転送された前記Ｒｅａｄ要求は、伝送路  １００ａを経由し、前記ノードコントローラ１内の前記プロキシコヒーレンスコントローラ１に到着し、同様に前記Ｒｅａｄ要求を受信した前記プロキシコヒーレンスコントローラ１は、アドレスデコーダ７  １０７ｈにアクセスし、前記Ｒｅａｄ要求は、最終的に前記メモリコントローラ２に転送される。
ここで、前記Ｒｅａｄ要求が前記プロキシコヒーレンスコントローラ０に到着した際に、前記プロキシコヒーレンスコントローラはスヌープフィルタ０  １０５ａにアクセスし、前記Ｒｅａｄ要求を入力する。前記Ｒｅａｄ要求を受信した前記スヌープフィルタ０は、外部接続部  ２０５、リンク  ２１２を経由して、前記Ｒｅａｄ要求を要求種別・受信方向判定部へ転送する。要求種別・受信方向判定部は、前記Ｒｅａｄ要求が自ノード内から到着したと判定し、前記Ｒｅａｄ要求をリンク２１３ａに排出し、アドレス比較部  ２０６ａへ転送する。ここでは、前記ローカルスヌープフィルタ０内に当該キャッシュラインの情報は何も登録されていないため、前記アドレス比較部のアドレスヒットチェックの結果がミスとなり、その結果がリンク  ２１５ａを経由してＳｎｏｏｐ要求転送先特定部  ２０８ａに転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、前記ノード０内に存在するキャッシュを指し示す情報のリストを生成し、前記リストを前記外部接続部へ送信する。結果として、前記スヌープフィルタは前記リストを前記プロキシコヒーレンスコントローラへ出力する。この結果より、前記プロキシコヒーレンスコントローラは、前記Ｒｅａｄ要求の送信元を除くノード０配下の全キャッシュ（ここではキャッシュ１  １０９ｂ）へのＳｎｏｏｐ要求を生成し送信する。
その後、前記Ｓｎｏｏｐ要求を受信した前記キャッシュ１は、当該キャッシュラインのメモリコピーを所有していないため、無所有であることを示す、前記Ｓｎｏｏｐ要求に対する返答を生成し、前記ノードコントローラ０に送信する。
前記Ｓｎｏｏｐ要求の返答を受信した前記ノードコントローラ０は、前記Ｓｎｏｏｐ要求の返答を前記プロキシコヒーレンスコントローラ０に転送する。前記Ｓｎｏｏｐ要求の返答を受信した前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０にアクセスし、前記Ｓｎｏｏｐ要求の返答を入力する。
前記Ｓｎｏｏｐ要求の返答を受信した前記スヌープフィルタ０は、外部接続部  ２０５、リンク  ２１２を経由して、前記Ｓｎｏｏｐ要求の返答を要求種別・受信方向判定部へ転送する。前記Ｓｎｏｏｐ要求の返答を受信した要求種別・受信方向判定部は、前記Ｓｎｏｏｐ要求の返答が自ノード内から到着したと判定し、前記Ｓｎｏｏｐ要求の返答をリンク２１８ａへ排出する。ここでは、スヌープフィルタ０には何も情報が登録されていないため、エントリ情報更新部  ２０７ａにより、空きエントリが１つ選択され、領域２０９ａに０ｂ１、領域２１０ａに前記Ｓｎｏｏｐ要求のアドレス、領域２１１ａの内、前記キャッシュ１に対応する領域に０ｂ０がセットされることでローカルスヌープフィルタの内容が更新される。
同様に前記Ｒｅａｄ要求がプロキシコヒーレンスコントローラ１  １０２ｂへ転送された際に、前記Ｒｅａｄ要求を受信した前記プロキシコヒーレンスコントローラ１は、スヌープフィルタ１  １０４ｂにアクセスし、同様に前記Ｒｅａｄ要求は、前記スヌープフィルタ１内の前記要求種別・受信方向判定部に転送される。
ここで、前記要求種別・受信方向判定部が受信した前記Ｒｅａｄ要求は、要求元が他ノードのノードコントローラである、かつ、Ｒｅａｄ要求であるため、前記受信した要求は２１３ｂへ排出されるが、本システム構成はグローバルスヌープフィルタを用いない構成のため、前記スヌープフィルタ１は他ノードの全ノードコントローラを指し示す情報のリストを出力する。この結果、前記Ｒｅａｄ要求の送信元を除くノードコントローラ、ここではノードコントローラ２  １０１ｃへのＳｎｏｏｐ要求が生成され送信される。
前記Ｓｎｏｏｐ要求を受信した前記ノードコントローラ２は、前記Ｓｎｏｏｐ要求をプロキシコヒーレンスコントローラ２  １０３ｃへ転送する。前記Ｓｎｏｏｐ要求を受信した前記プロキシコヒーレンスコントローラ２は、スヌープフィルタ２  １０４ｃにアクセスし、前記Ｓｎｏｏｐ要求を前記スヌープフィルタ２へ入力し、前記Ｓｎｏｏｐ要求は、同様に前記スヌープフィルタ内の前記要求種別・受信方向判定部に転送される。ここで、前記要求種別・受信方向判定部が受信した前記Ｓｎｏｏｐ要求は、要求元が他ノードのノードコントローラである、かつ、Ｓｎｏｏｐ要求であるため、前記受信した要求は２１３ａへ排出し、アドレス比較部へ転送する。ここでは、ローカルスヌープフィルタ２  １０５ｃ内に当該キャッシュラインの情報は何も登録されていないため、前記ローカルスヌープフィルタ内のアドレス比較部のアドレスヒットチェックの結果がミスとなり、その結果がリンク２１５ａを経由してＳｎｏｏｐ要求転送先特定部に転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、前記ノード２内に存在するキャッシュを指し示す情報のリストを生成し、前記リストを前記外部接続部へ送信する。この結果、前記ノード２内の全キャッシュにＳｎｏｏｐ要求が送信される（ブロードキャストされる）。
前記Ｓｎｏｏｐ要求を受信したキャッシュ４  １０９ｃ，キャッシュ５  １０９ｅは当該キャッシュラインのメモリコピーを所有していないため、無所有であることを示す、前記Ｓｎｏｏｐ要求に対する返答を、前記ノードコントローラ２に送信する。
前記Ｓｎｏｏｐ要求の返答を受信した前記ノードコントローラ２は、前記Ｓｎｏｏｐ要求の返答を前記プロキシコヒーレンスコントローラ２に転送する。前記Ｓｎｏｏｐ要求の返答を受信した前記プロキシコヒーレンスコントローラ２は、前記スヌープフィルタ２にアクセスし、前記Ｓｎｏｏｐ要求の返答を入力する。
前記Ｓｎｏｏｐ要求の返答を受信した前記スヌープフィルタ２は、外部接続部、リンク２１２を経由して、前記Ｓｎｏｏｐ要求の返答を要求種別・受信方向判定部へ転送する。前記Ｓｎｏｏｐ要求の返答を受信した要求種別・受信方向判定部は、前記Ｓｎｏｏｐ要求の返答が自ノード内から到着したと判定し、前記Ｓｎｏｏｐ要求の返答をリンク２１８ａへ排出する。ここでは、スヌープフィルタ２には何も情報が登録されていないため、エントリ情報更新部により、空きエントリが１つ選択され、領域２０９ａに０ｂ１、領域２１０ａに前記Ｓｎｏｏｐ要求のアドレス、領域２１１ａの内、前記キャッシュ４，前記キャッシュ５に対応する領域に０ｂ０がセットされることでローカルスヌープフィルタの内容が更新される。
前記ノードコントローラ２は、発行したＳｎｏｏｐ要求の集計完了後、集計結果を前記ノードコントローラ１へ送信する。
続いて、前記Ｒｅａｄ要求を受信した前記メモリコントローラ２は、ディレクトリ１１２ｃへアクセスし、当該キャッシュラインを所持しているコンポーネントが存在しないため、その結果、前記メモリコントローラ２は前記ノードコントローラ１へ前記Ｒｅａｄ要求の返信として当該キャッシュラインを送信する。
前記Ｒｅａｄ要求の返信を受信した前記ノードコントローラ１は、前記Ｒｅａｄ要求をプロキシコヒーレンスコントローラ１  １０３ｂへ転送する。また、前記ノードコントローラ１は、前記ノードコントローラ２からのＳｎｏｏｐ要求に対する返信を受信し、前記プロキシコヒーレンスコントローラ１へ転送している。
前記Ｒｅａｄ要求の返信を受信した前記プロキシコヒーレンスコントローラ１は、アドレスデコーダ７  １０７ｈにアクセスし、その結果から前記ノードコントローラ０へ適切なＲｅａｄ要求の返信を送信する。
前記Ｒｅａｄ要求の返信を受信した前記ノードコントローラ０は、同様に適切な前記Ｒｅａｄ要求の返信を前記キャッシュ０  １０９ａへ転送し、前記キャッシュ０が前記前記Ｒｅａｄ要求の返信を受信した際に前記Ｒｅａｄ要求の処理を終了する。
ここで、前記ノードコントローラ０が前記Ｒｅａｄ要求の返信を受信した際に、前記ノードコントローラ０は、前記Ｒｅａｄ要求を前記プロキシコヒーレンスコントローラ０へ転送する。前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０へアクセスし、同様に前記Ｒｅａｄ要求の返信が前記要求種別・受信方向判定部まで転送される。ここで、前記要求種別・受信方向判定部が受信した要求が、要求元が他ノードのノードコントローラである、かつ、Ｒｅａｄ要求に対する返信であるため、前記受信した要求は２１８ａへ排出され、前記エントリ情報更新部へ転送される。ここで、前記エントリ情報更新部はエントリ内に登録されているキャッシュラインアドレスと、前記Ｒｅａｄ要求の返答のキャッシュラインアドレスを比較し、一致するキャッシュラインアドレスが登録されているエントリが存在するため、当該エントリが選択される。その後、前記エントリ情報更新部により、当該エントリにおける、領域２０９ａに０ｂ１、領域２１０ａに前記Ｒｅａｄ要求のアドレス、領域２１１ａの内、前記キャッシュ０に対応する領域に０ｂ１がセットされることでローカルスヌープフィルタの内容が更新される。
続いて、前記ノード１配下のＣＰＵ３  １０８ｄにおいて、前記ノード１配下のメインメモリ２  １１３ｃに含まれるデータ（キャッシュライン）に対してのメモリアクセス要求が発生し、当該メモリアクセス要求に対して応答すべきデータに対するキャッシュミスがキャッシュ３  １０９ｄにおいて発生した場合、前記ＣＰＵ３は、アドレスデコーダ３  １０７ｄへキャッシュラインアドレスを送信し（アクセスし）、その結果から前記メモリコントローラ２に対し、Ｒｅａｄ要求を発行する。
前記Ｒｅａｄ要求を受信した前記メモリコントローラ２は、コヒーレンスコントローラ２  １１１ｃに前記Ｒｅａｄ要求を転送する。その後、前記コヒーレンスコントローラは、前記ディレクトリにアクセスし、前記Ｒｅａｄ要求に含まれるキャッシュラインアドレスを入力する。この場合、その結果、当該キャッシュラインを所有しているキャッシュが他ノード内のキャッシュ（前記キャッシュ０）であるため、自ノード内の前記ノードコントローラ１を指し示す情報を出力する。この結果から前記メモリコントローラ２は前記ノードコントローラ１へのＳｎｏｏｐ要求を生成し送信する。
前記Ｓｎｏｏｐ要求を受信した前記ノードコントローラ１は、前記Ｓｎｏｏｐ要求を前記プロキシコヒーレンスコントローラ１へ転送する。前記Ｓｎｏｏｐ要求を受信した前記プロキシコヒーレンスコントローラ１は、前記スヌープフィルタにアクセスし、この例ではグローバルスヌープフィルタを用いていないため、同様に他ノード内の全ノードコントローラを指し示す情報のリストを出力する。この結果、前記プロキシコヒーレンスコントローラ１は、前記ノードコントローラ０と前記ノードコントローラ２に対するＳｎｏｏｐ要求を生成し、ブロードキャストを実行する。
前記Ｓｎｏｏｐ要求を受信した前記ノードコントローラ２は、前記Ｓｎｏｏｐ要求を前記プロキシコヒーレンスコントローラ２へ転送する。
前記Ｓｎｏｏｐ要求を受信した前記プロキシコヒーレンスコントローラ２は、同様に前記スヌープフィルタ２にアクセスし、前記Ｓｎｏｏｐ要求を前記スヌープフィルタ２へ入力し、前記Ｓｎｏｏｐ要求は、同様に前記スヌープフィルタ内の前記要求種別・受信方向判定部に転送される。ここで、前記要求種別・受信方向判定部が受信した前記Ｓｎｏｏｐ要求は、要求元が他ノードのノードコントローラである、かつ、Ｓｎｏｏｐ要求であるため、前記受信した要求は２１３ａへ排出し、アドレス比較部へ転送する。ここで、前記ローカルスヌープフィルタ２内に当該キャッシュラインの情報が登録されており、なおかつ前記ノード２内のどのキャッシュも当該キャッシュラインのメモリコピーを保持していないため、領域２１１ａはすべて０ｂ０にセットされている。そのため、前記ローカルスヌープフィルタ２内のアドレス比較部のアドレスヒットチェックの結果がヒットとなり、その結果がリンク２１５ａを経由してＳｎｏｏｐ要求転送先特定部に転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、領域２１１ａの内、値が０ｂ１であるものはないため、空の情報が入ったリストを生成し、同様に前記リストを前記プロキシコヒーレンスコントローラ２へ出力する。
前記プロキシコヒーレンスコントローラ２は、前記スヌープフィルタ２から出力された前記リストが空集合であるため、Ｓｎｏｏｐ要求を生成することはなく、受信した前記Ｓｎｏｏｐ要求の返答を生成し、前記Ｓｎｏｏｐ要求の送信元へ返信する。その後、前記ノードコントローラ１は前記Ｓｎｏｏｐ要求の返答を受信する。
前記Ｓｎｏｏｐ要求を受信した前記プロキシコヒーレンスコントローラ０は、同様に前記スヌープフィルタ０にアクセスし、前記Ｓｎｏｏｐ要求を前記スヌープフィルタ０へ入力し、前記Ｓｎｏｏｐ要求は、同様に前記スヌープフィルタ内の前記要求種別・受信方向判定部に転送される。ここで、前記要求種別・受信方向判定部が受信した前記Ｓｎｏｏｐ要求は、要求元が他ノードのノードコントローラである、かつ、Ｓｎｏｏｐ要求であるため、前記受信した要求は２１３ａへ排出し、アドレス比較部へ転送する。ここで、前記ローカルスヌープフィルタ０内に当該キャッシュラインの情報が登録されており、なおかつ前記キャッシュ０が当該キャッシュラインのメモリコピーを所有しているため、領域２１１ａの、前記キャッシュ０に対応しているプレゼンスビットの値は０ｂ１にセットされている。
そのため、前記ローカルスヌープフィルタ０内のアドレス比較部のアドレスヒットチェックの結果がヒットとなり、その結果がリンク２１５ａを経由してＳｎｏｏｐ要求転送先特定部に転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、ヒットしたエントリの前記領域２１１ａのうち、値が０ｂ１である領域に対応したキャッシュを指し示す情報のリストを作成する。この場合、前記リストには前記キャッシュ０を指し示す情報が登録されている。続いて、前記リストはリンク  ２１７ａを通じて前記外部接続部へ転送され、前記プロキシコヒーレンスコントローラ０へ出力される。
前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ２から出力された前記リストより、前記キャッシュ０のみへのＳｎｏｏｐ要求を生成し送信する。
前記Ｓｎｏｏｐ要求を受信した前記キャッシュ０は当該キャッシュラインのメモリコピーの所有権を放棄し、無所有であることを示す、前記Ｓｎｏｏｐ要求に対する返答を、前記ノードコントローラ０に送信する。
前記Ｓｎｏｏｐ要求の返答を受信した前記ノードコントローラ０は、前記Ｓｎｏｏｐ要求の返答を前記プロキシコヒーレンスコントローラ０に転送する。前記Ｓｎｏｏｐ要求の返答を受信した前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０にアクセスし、前記Ｓｎｏｏｐ要求の返答を入力する。
前記Ｓｎｏｏｐ要求の返答を受信した前記スヌープフィルタ０は、外部接続部、リンク２１２を経由して、前記Ｓｎｏｏｐ要求の返答を要求種別・受信方向判定部へ転送する。前記Ｓｎｏｏｐ要求の返答を受信した要求種別・受信方向判定部は、前記Ｓｎｏｏｐ要求の返答が自ノード内から到着したと判定し、前記Ｓｎｏｏｐ要求の返答をリンク２１８ａへ排出する。
ここで、前記エントリ情報更新部はエントリ内に登録されているキャッシュラインアドレスと、前記Ｓｎｏｏｐ要求の返答のキャッシュラインアドレスを比較し、一致するキャッシュラインアドレスが登録されているエントリが存在するため、当該エントリが選択される。その後、前記エントリ情報更新部により、当該エントリにおける、領域２０９ａに０ｂ１、領域２１０ａに前記Ｓｎｏｏｐ要求のアドレス、領域２１１ａの内、前記キャッシュ０に対応する領域に０ｂ０がセットされることでローカルスヌープフィルタの内容が更新される。
前記ノードコントローラ０は、発行したＳｎｏｏｐ要求の集計完了後、集計結果を前記ノードコントローラ１へ送信する。
前記ノードコントローラ０と前記ノードコントローラ２からのＳｎｏｏｐ要求に対する返信を受信した前記ノードコントローラ１は、前記Ｓｎｏｏｐ要求の返信を前記プロキシコヒーレンスコントローラ１へ送信する。このとき、前記Ｓｎｏｏｐ要求の集計が完了しているため、前記Ｓｎｏｏｐ要求の集計結果を前記メモリコントローラ２へ送信する。
その結果、前記メモリコントローラ２は前記キャッシュ３へ当該キャッシュラインを送信し、前記キャッシュ３が前記当該キャッシュラインを受信した際に処理を終了する。
【００３６】
これにより、同一ノード内のキャッシュが要求されたキャッシュラインの所有・無所有情報を持つローカルスヌープフィルタを持つことによりノード内のスヌープの個数を削減できる。
【実施例２】
【００３７】
（本発明の実施例その２における動作例）
ここでは、図１に示すような、前記請求項４における、グローバルスヌープフィルタとローカルスヌープフィルタの２つのスヌープフィルタを備えたコンピュータシステムにおいて、システム内の全キャッシュが、当該キャッシュラインを所有していなく、なおかつ、どのノードコントローラ内のスヌープフィルタに何も登録されていない場合に、あるＣＰＵから特定のキャッシュラインに対するＲｅａｄ要求が発生し、続いて異なるＣＰＵから同一のキャッシュラインに対するＲｅａｄ要求が発生した場合の動作例について示す。
また、図５，図６，図７に動作例中で表れる要求のフローの概略を示す。
まず、ノード０  １０１ａ配下のＣＰＵ０  １０８ａにおいて、ノード１  １０１ｂ配下のメインメモリ２  １１３ｃに含まれるデータ（キャッシュライン）に対してのメモリアクセス要求が発生し、当該メモリアクセス要求に対して応答すべきデータに対するキャッシュミスがキャッシュ０  １０９ａにおいて発生した場合、前記ＣＰＵ０は、前記実施例その１と同様に、ノードコントローラ０  １０２ａに対し、Ｒｅａｄ要求を発行する（図５  ５０１）。
前記Ｒｅａｄ要求を受信した前記ノードコントローラ０は、前記Ｒｅａｄ要求を、前記実施例その１と同様に、前記ノード１内のノードコントローラ１  １０２ｂへ前記Ｒｅａｄ要求を転送する（図５  ５０２）。転送された前記Ｒｅａｄ要求は、前記実施例その１と同様に、最終的に前記メモリコントローラ２に転送される（図５  ５０３）。
ここで、前記Ｒｅａｄ要求が前記プロキシコヒーレンスコントローラ０に到着した際に、前記実施例その１と同様に、前記プロキシコヒーレンスコントローラはスヌープフィルタ０  １０５ａにアクセスし、前記Ｒｅａｄ要求を入力する（図５  ５０４）。
前記Ｒｅａｄ要求を受信した前記スヌープフィルタ０は、前記実施例その１と同様に、前記Ｒｅａｄ要求を要求種別・受信方向判定部へ転送し、要求種別・受信方向判定部は、前記Ｒｅａｄ要求をリンク２１３ａに排出し、アドレス比較部  ２０６ａへ転送する。ここでは、前記ローカルスヌープフィルタ０内に当該キャッシュラインの情報は何も登録されていないため、前記アドレス比較部のアドレスヒットチェックの結果がミスとなり、その結果がリンク  ２１５ａを経由してＳｎｏｏｐ要求転送先特定部  ２０８ａに転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、前記ノード０内に存在するキャッシュを指し示す情報のリストを生成し、前記リストを前記外部接続部へ送信する。結果として、前記スヌープフィルタは前記リストを前記プロキシコヒーレンスコントローラ０へ出力する（図５  ５０５）。この結果より、前記プロキシコヒーレンスコントローラは、前記Ｒｅａｄ要求の送信元を除くノード０配下の全キャッシュ（ここではキャッシュ１  １０９ｂ）へのＳｎｏｏｐ要求を生成し送信する（図５  ５０６）。
その後、前記Ｓｎｏｏｐ要求を受信した前記キャッシュ１は、当該キャッシュラインのメモリコピーを所有していないため、無所有であることを示す、前記Ｓｎｏｏｐ要求に対する返答を生成し、前記ノードコントローラ０に送信する（図５  ５０７）。
前記Ｓｎｏｏｐ要求の返答を受信した前記ノードコントローラ０は、前記Ｓｎｏｏｐ要求の返答を前記プロキシコヒーレンスコントローラに転送する。前記Ｓｎｏｏｐ要求の返答を受信した前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０にアクセスし、前記Ｓｎｏｏｐ要求の返答を入力する（図５  ５０８）。
前記Ｓｎｏｏｐ要求の返答を受信した前記スヌープフィルタ０は、外部接続部  ２０５、リンク  ２１２を経由して、前記Ｓｎｏｏｐ要求の返答を要求種別・受信方向判定部へ転送する。前記Ｓｎｏｏｐ要求の返答を受信した要求種別・受信方向判定部は、前記Ｓｎｏｏｐ要求の返答が自ノード内から到着したと判定し、前記Ｓｎｏｏｐ要求の返答をリンク２１８ａへ排出する。ここでは、スヌープフィルタ０には何も情報が登録されていないため、エントリ情報更新部  ２０７ａにより、空きエントリが１つ選択され、領域２０９ａに０ｂ１、領域２１０ａに前記Ｓｎｏｏｐ要求のアドレス、領域２１１ａの内、前記キャッシュ１に対応する領域に０ｂ０がセットされることでローカルスヌープフィルタの内容が更新される。
同様に前記Ｒｅａｄ要求がプロキシコヒーレンスコントローラ１  １０２ｂへ転送された際に、前記Ｒｅａｄ要求を受信した前記プロキシコヒーレンスコントローラ１は、スヌープフィルタ１  １０４ｂにアクセスし、同様に前記Ｒｅａｄ要求は、前記スヌープフィルタ１内の前記要求種別・受信方向判定部に転送される（図５  ５０９）。ここで、前記要求種別・受信方向判定部が受信した前記Ｒｅａｄ要求は、要求元が他ノードのノードコントローラである、かつ、Ｒｅａｄ要求であるため、前記受信した要求は２１３ｂへ排出され、
グローバルスヌープフィルタ１  １０６ｂ内のアドレス比較部  ２０６ｂへ転送される。ここでは、前記グローバルスヌープフィルタ０内に当該キャッシュラインの情報は何も登録されていないため、前記アドレス比較部のアドレスヒットチェックの結果がミスとなり、その結果がリンク  ２１５ｂを経由してＳｎｏｏｐ要求転送先特定部  ２０８ｂに転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、他ノードのノードコントローラを指し示す情報のリストを生成し、前記リストを前記外部接続部へ送信する。結果として、前記スヌープフィルタは前記リストを前記プロキシコヒーレンスコントローラへ出力する（図５  ５１０）。この結果より、前記プロキシコヒーレンスコントローラ１は、前記Ｒｅａｄ要求の送信元を除くシステム内の全ノードコントローラ（ここではノードコントローラ２  １０２ｃ）へのＳｎｏｏｐ要求を生成し送信する（図５  ５１１）。
前記Ｓｎｏｏｐ要求を受信した前記ノードコントローラ２は、前記Ｓｎｏｏｐ要求をプロキシコヒーレンスコントローラ２  １０３ｃへ転送する。前記Ｓｎｏｏｐ要求を受信した前記プロキシコヒーレンスコントローラ２は、スヌープフィルタ２  １０４ｃにアクセスし、前記Ｓｎｏｏｐ要求を前記スヌープフィルタ２へ入力し（図５  ５１２）、前記Ｓｎｏｏｐ要求は、同様に前記スヌープフィルタ内の前記要求種別・受信方向判定部に転送される。ここで、前記要求種別・受信方向判定部が受信した前記Ｓｎｏｏｐ要求は、要求元が他ノードのノードコントローラである、かつ、Ｓｎｏｏｐ要求であるため、前記受信した要求は２１３ａへ排出し、アドレス比較部へ転送する。ここでは、ローカルスヌープフィルタ２  １０５ｃ内に当該キャッシュラインの情報は何も登録されていないため、前記ローカルスヌープフィルタ内のアドレス比較部のアドレスヒットチェックの結果がミスとなり、その結果がリンク２１５ａを経由してＳｎｏｏｐ要求転送先特定部に転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、前記ノード２内に存在するキャッシュを指し示す情報のリストを生成し、前記リストを前記外部接続部へ送信する。この結果、前記ノード２内の全キャッシュにＳｎｏｏｐ要求が送信される（ブロードキャストされる）（図５  ５１３，５１４）。
前記Ｓｎｏｏｐ要求を受信したキャッシュ４  １０９ｃ，キャッシュ５  １０９ｅは当該キャッシュラインのメモリコピーを所有していないため、無所有であることを示す、前記Ｓｎｏｏｐ要求に対する返答を、前記ノードコントローラ２に送信する。（図５  ５１５）
前記Ｓｎｏｏｐ要求の返答を受信した前記ノードコントローラ２は、前記Ｓｎｏｏｐ要求の返答を前記プロキシコヒーレンスコントローラ２に転送する。前記Ｓｎｏｏｐ要求の返答を受信した前記プロキシコヒーレンスコントローラ２は、前記スヌープフィルタ２にアクセスし、前記Ｓｎｏｏｐ要求の返答を入力する（図５  ５１６）。
前記Ｓｎｏｏｐ要求の返答を受信した前記スヌープフィルタ２は、外部接続部、リンク２１２を経由して、前記Ｓｎｏｏｐ要求の返答を要求種別・受信方向判定部へ転送する。前記Ｓｎｏｏｐ要求の返答を受信した要求種別・受信方向判定部は、前記Ｓｎｏｏｐ要求の返答が自ノード内から到着したと判定し、前記Ｓｎｏｏｐ要求の返答をリンク２１８ａへ排出する。ここでは、スヌープフィルタ２には何も情報が登録されていないため、エントリ情報更新部により、空きエントリが１つ選択され、領域２０９ａに０ｂ１、領域２１０ａに前記Ｓｎｏｏｐ要求のアドレス、領域２１１ａの内、前記キャッシュ４，前記キャッシュ５に対応する領域に０ｂ０がセットされることでローカルスヌープフィルタの内容が更新される。
前記ノードコントローラ２は、発行したＳｎｏｏｐ要求の集計完了後、集計結果を前記ノードコントローラ１へ送信する（図５  ５１７）。
続いて、前記Ｒｅａｄ要求を受信した前記メモリコントローラ２は、ディレクトリ１１２ｃへアクセスし、当該キャッシュラインを所持しているコンポーネントが存在しないため、その結果、前記メモリコントローラ２は前記ノードコントローラ１へ前記Ｒｅａｄ要求の返信として当該キャッシュラインを送信する。（図６  ６０１，６０２，６０３）
前記Ｒｅａｄ要求の返信を受信した前記ノードコントローラ１は、前記Ｒｅａｄ要求の返信をプロキシコヒーレンスコントローラ１  １０３ｂへ転送する。また、前記ノードコントローラ１は、前記ノードコントローラ２からのＳｎｏｏｐ要求に対する返信を受信し、前記プロキシコヒーレンスコントローラ１へ転送している。
前記Ｒｅａｄ要求の返信を受信した前記プロキシコヒーレンスコントローラ１は、アドレスデコーダ１０７ｈにアクセスし、その結果から前記ノードコントローラ０へ適切なＲｅａｄ要求の返信を送信する（図６  ６０５）。
前記Ｒｅａｄ要求の返信を受信した前記ノードコントローラ０は、同様に適切な前記Ｒｅａｄ要求の返信を前記キャッシュ０  １０９ａへ転送し（図６  ６０７）、前記キャッシュ０が前記前記Ｒｅａｄ要求の返信を受信した際に前記Ｒｅａｄ要求の処理を終了する。
ここで、前記ノードコントローラ１が前記Ｒｅａｄ要求の返信を受信した際に、前記ノードコントローラ１は、前記Ｒｅａｄ要求の返信を前記プロキシコヒーレンスコントローラ１へ転送する。前記プロキシコヒーレンスコントローラ１は、前記スヌープフィルタ１へアクセスし、同様に前記Ｒｅａｄ要求の返信が前記要求種別・受信方向判定部まで転送される（図６  ６０４）。ここで、前記要求種別・受信方向判定部が受信した要求が、要求元が自ノードのノードコントローラである、かつ、Ｒｅａｄ要求に対する返信であるため、前記受信した要求は２１８ｂへ排出され、前記エントリ情報更新部へ転送される。ここで、前記エントリ情報更新部はエントリ内に登録されているキャッシュラインアドレスと、前記Ｒｅａｄ要求の返答のキャッシュラインアドレスを比較し、一致するキャッシュラインアドレスが登録されているエントリが存在するため、当該エントリが選択される。その後、前記エントリ情報更新部により、当該エントリにおける、領域２０９ａに０ｂ１、領域２１０ａに前記Ｒｅａｄ要求のアドレス、領域２１１ａの内、前記ノードコントローラ０に対応する領域に０ｂ１がセットされることでグローバルヌープフィルタの内容が更新される。
さらに、前記ノードコントローラ０が前記Ｒｅａｄ要求の返信を受信した際に、前記ノードコントローラ０は、前記Ｒｅａｄ要求の返信を前記プロキシコヒーレンスコントローラ０へ転送する。前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０へアクセスし、同様に前記Ｒｅａｄ要求の返信が前記要求種別・受信方向判定部まで転送される（図６  ６０６）。ここで、前記要求種別・受信方向判定部が受信した要求が、要求元が他ノードのノードコントローラである、かつ、Ｒｅａｄ要求に対する返信であるため、前記受信した要求は２１８ａへ排出され、前記エントリ情報更新部へ転送される。ここで、前記エントリ情報更新部はエントリ内に登録されているキャッシュラインアドレスと、前記Ｒｅａｄ要求の返答のキャッシュラインアドレスを比較し、一致するキャッシュラインアドレスが登録されているエントリが存在するため、当該エントリが選択される。その後、前記エントリ情報更新部により、当該エントリにおける、領域２０９ａに０ｂ１、領域２１０ａに前記Ｒｅａｄ要求のアドレス、領域２１１ａの内、前記キャッシュ０に対応する領域に０ｂ１がセットされることでローカルスヌープフィルタの内容が更新される。
続いて、前記ノード１配下のＣＰＵ３  １０８ｄにおいて、前記ノード１配下のメインメモリ２  １１３ｃに含まれるデータ（キャッシュライン）に対してのメモリアクセス要求が発生し、当該メモリアクセス要求に対して応答すべきデータに対するキャッシュミスがキャッシュ３  １０９ｄにおいて発生した場合、前記ＣＰＵ３は、アドレスデコーダ３  １０７ｄへキャッシュラインアドレスを送信し（アクセスし）、その結果から前記メモリコントローラ２に対し、Ｒｅａｄ要求を発行する（図７  ７０１）。
前記Ｒｅａｄ要求を受信した前記メモリコントローラ２は、コヒーレンスコントローラ２  １１１ｃに前記Ｒｅａｄ要求を転送する。その後、前記コヒーレンスコントローラは、前記ディレクトリにアクセスし、前記Ｒｅａｄ要求に含まれるキャッシュラインアドレスを入力する。この場合、その結果、当該キャッシュラインを所有しているキャッシュが他ノード内のキャッシュ（前記キャッシュ０）であるため、自ノード内の前記ノードコントローラ１を指し示す情報を出力する。この結果から前記メモリコントローラ２は前記ノードコントローラ１へのＳｎｏｏｐ要求を生成し送信する（図７  ７０２）。
前記Ｓｎｏｏｐ要求を受信した前記プロキシコヒーレンスコントローラ１は、同様に前記スヌープフィルタ１にアクセスし、前記Ｓｎｏｏｐ要求を前記スヌープフィルタ１へ入力し、前記Ｓｎｏｏｐ要求は、同様に前記スヌープフィルタ内の前記要求種別・受信方向判定部に転送される（図７  ７０３）。ここで、前記要求種別・受信方向判定部が受信した前記Ｓｎｏｏｐ要求は、要求元が自ノードのノードコントローラである、かつ、Ｓｎｏｏｐ要求であるため、前記受信した要求は２１３ｂへ排出し、アドレス比較部へ転送する。ここで、前記グローバルスヌープフィルタ１内に当該キャッシュラインの情報が登録されており、なおかつ前記ノードコントローラ０が当該キャッシュラインのメモリコピーを所有しているため、領域２１１ｂの、前記ノードコントローラ０に対応しているプレゼンスビットの値は０ｂ１にセットされている。
そのため、前記グローバルスヌープフィルタ１内のアドレス比較部のアドレスヒットチェックの結果がヒットとなり、その結果がリンク２１５ｂを経由してＳｎｏｏｐ要求転送先特定部に転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、ヒットしたエントリの前記領域２１１ｂのうち、値が０ｂ１である領域に対応したノードコントローラを指し示す情報のリストを作成する。この場合、前記リストには前記ノードコントローラ０を指し示す情報が登録されている。続いて、前記リストはリンク  ２１７ｂを通じて前記外部接続部へ転送され、前記プロキシコヒーレンスコントローラ１へ出力される（図７  ７０４）。
前記プロキシコヒーレンスコントローラ１は、前記スヌープフィルタ１から出力された前記リストより、前記ノードコントローラ０のみへのＳｎｏｏｐ要求を生成し送信する（図７  ７０５）。
前記Ｓｎｏｏｐ要求を受信した前記プロキシコヒーレンスコントローラ０は、同様に前記スヌープフィルタ０にアクセスし、前記Ｓｎｏｏｐ要求を前記スヌープフィルタ０へ入力し、前記Ｓｎｏｏｐ要求は、同様に前記スヌープフィルタ内の前記要求種別・受信方向判定部に転送される（図７  ７０６）。ここで、前記要求種別・受信方向判定部が受信した前記Ｓｎｏｏｐ要求は、要求元が他ノードのノードコントローラである、かつ、Ｓｎｏｏｐ要求であるため、前記受信した要求は２１３ａへ排出し、アドレス比較部へ転送する。ここで、前記ローカルスヌープフィルタ０内に当該キャッシュラインの情報が登録されており、なおかつ前記キャッシュ０が当該キャッシュラインのメモリコピーを所有しているため、領域２１１ａの、前記キャッシュ０に対応しているプレゼンスビットの値は０ｂ１にセットされている。
そのため、前記ローカルスヌープフィルタ０内のアドレス比較部のアドレスヒットチェックの結果がヒットとなり、その結果がリンク２１５ａを経由してＳｎｏｏｐ要求転送先特定部に転送される。前記Ｓｎｏｏｐ要求転送先特定部は、アドレスヒットチェックの結果を受け、ヒットしたエントリの前記領域２１１ａのうち、値が０ｂ１である領域に対応したキャッシュを指し示す情報のリストを作成する。この場合、前記リストには前記キャッシュ０を指し示す情報が登録されている。続いて、前記リストはリンク  ２１７ａを通じて前記外部接続部へ転送され、前記プロキシコヒーレンスコントローラへ出力される（図７  ７０７）。
前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０から出力された前記リストより、前記キャッシュ０のみへのＳｎｏｏｐ要求を生成し送信する。（図７  ７０８）
前記Ｓｎｏｏｐ要求を受信した前記キャッシュ０は当該キャッシュラインのメモリコピーの所有権を放棄し、無所有であることを示す、前記Ｓｎｏｏｐ要求に対する返答を、前記ノードコントローラ０に送信する（図７  ７０９）。
前記Ｓｎｏｏｐ要求の返答を受信した前記ノードコントローラ０は、前記Ｓｎｏｏｐ要求の返答を前記プロキシコヒーレンスコントローラ０に転送する。前記Ｓｎｏｏｐ要求の返答を受信した前記プロキシコヒーレンスコントローラ０は、前記スヌープフィルタ０にアクセスし、前記Ｓｎｏｏｐ要求の返答を入力する（図７  ７１０）。
前記Ｓｎｏｏｐ要求の返答を受信した前記スヌープフィルタ０は、外部接続部、リンク２１２を経由して、前記Ｓｎｏｏｐ要求の返答を要求種別・受信方向判定部へ転送する。前記Ｓｎｏｏｐ要求の返答を受信した要求種別・受信方向判定部は、前記Ｓｎｏｏｐ要求の返答が自ノード内から到着したと判定し、前記Ｓｎｏｏｐ要求の返答をリンク２１８ａへ排出する。
ここで、前記エントリ情報更新部はエントリ内に登録されているキャッシュラインアドレスと、前記Ｓｎｏｏｐ要求の返答のキャッシュラインアドレスを比較し、一致するキャッシュラインアドレスが登録されているエントリが存在するため、当該エントリが選択される。その後、前記エントリ情報更新部により、当該エントリにおける、領域２０９ａに０ｂ１、領域２１０ａに前記Ｓｎｏｏｐ要求のアドレス、領域２１１ａの内、前記キャッシュ０に対応する領域に０ｂ０がセットされることでローカルスヌープフィルタの内容が更新される。
前記ノードコントローラ０は、発行したＳｎｏｏｐ要求の集計完了後、集計結果を前記ノードコントローラ１へ送信する（図７  ７１１）。
前記ノードコントローラ０からのＳｎｏｏｐ要求に対する返信を受信した前記ノードコントローラ１は、前記Ｓｎｏｏｐ要求の返信を前記プロキシコヒーレンスコントローラ１へ送信する。このとき、前記Ｓｎｏｏｐ要求の集計が完了しているため、前記Ｓｎｏｏｐ要求の集計結果を前記メモリコントローラ２へ送信する（図７  ７１３）。
同時に、前記Ｓｎｏｏｐ要求の返答を受信した前記ノードコントローラ１は、前記Ｓｎｏｏｐ要求の返答を前記プロキシコヒーレンスコントローラ１に転送する。前記Ｓｎｏｏｐ要求の返答を受信した前記プロキシコヒーレンスコントローラ１は、前記スヌープフィルタ１にアクセスし、前記Ｓｎｏｏｐ要求の返答を入力する（図７  ７１２）。
前記Ｓｎｏｏｐ要求の返答を受信した前記スヌープフィルタ１は、外部接続部、リンク２１２を経由して、前記Ｓｎｏｏｐ要求の返答を要求種別・受信方向判定部へ転送する。前記Ｓｎｏｏｐ要求の返答を受信した要求種別・受信方向判定部は、前記Ｓｎｏｏｐ要求の返答が他ノード内から到着したと判定し、前記Ｓｎｏｏｐ要求の返答をリンク２１８ｂへ排出する。
ここで、前記エントリ情報更新部はエントリ内に登録されているキャッシュラインアドレスと、前記Ｓｎｏｏｐ要求の返答のキャッシュラインアドレスを比較し、一致するキャッシュラインアドレスが登録されているエントリが存在するため、当該エントリが選択される。その後、前記エントリ情報更新部により、当該エントリにおける、領域２０９ｂに０ｂ１、領域２１０ｂに前記Ｓｎｏｏｐ要求のアドレス、領域２１１ａの内、前記ノードコントローラ０に対応する領域に０ｂ０がセットされることでグローバルヌープフィルタの内容が更新される。
その結果、前記メモリコントローラ２は前記キャッシュ３へ当該キャッシュラインを送信し、前記キャッシュ３が前記当該キャッシュラインを受信した際に処理を終了する（図７  ７１４，７１５）。
図８に処理が終了した後におけるスヌープフィルタのエントリ情報を示す。ここでは例のため、実施例で表れるキャッシュラインアドレスをＸＹＺとした。
【００３８】
これにより、異なるノード内のキャッシュが、要求されたキャッシュラインに対する所有・無所有情報を持つグローバルスヌープフィルタと、同一ノード内のキャッシュが、要求されたキャッシュラインに対する所有・無所有情報を持つローカルスヌープフィルタを併せ持つことにより、システム内のノード内やノード間におけるスヌープの個数を削減できる。
【００３９】
さらに、特定のキャッシュラインに対する所有・無所有情報がグローバルスヌープフィルタとローカルスヌープフィルタに登録されているとする。ここで、前記ローカルスヌープフィルタにおける、前記キャッシュラインに対する所有・無所有情報が追い出し制御により追い出された後に、前記キャッシュラインに対するＳｎｏｏｐ要求が発生した場合においても、前記グローバルスヌープフィルタにおける情報を用いることで、ノード間に渡るＳｎｏｏｐ要求の個数を削減することができる。また、ＬＲＵ追い出しがあったノードがラインを所有していた場合は、グローバルスヌープフィルタによるフィルタリング後もＳｎｏｏｐ要求が飛んでくるため、ノード内でＳｎｏｏｐ要求のブロードキャストが発生するが、その場合でも、そのＳｎｏｏｐ要求をトリガに情報が再登録され、次に追い出し制御により追い出されるまでは、Ｓｎｏｏｐ要求がフィルタリングされる。
【００４０】
また、逆に前記グローバルスヌープフィルタにおける、前記キャッシュラインに対する所有・無所有情報が追い出し制御により追い出された後に、前記キャッシュラインに対するＳｎｏｏｐ要求が発生した場合においても、前記ローカルスヌープフィルタにおける情報を用いることで、ノード内のＳｎｏｏｐ要求の個数を削減することができる。この場合も、スヌープ要求をトリガに、当該キャッシュラインがグローバルスヌープフィルタに再登録され、自動的にローカルスヌープフィルタとグローバルスヌープフィルタの２重ロック状態に戻る。
【００４１】
このように２重のスヌープフィルタを備えることで、ＬＲＵなどの追い出し制御により一方のスヌープフィルタから情報が追い出された場合においても、もう一方のスヌープフィルタの情報を用いることによりスヌープの個数を削減できる。
【００４２】
これにより、同一ノード内のキャッシュが要求されたキャッシュラインの所有・無所有情報を持ち、なおかつ他ノードが、同一ノード内のキャッシュラインの所有・無所有情報を持つローカルスヌープフィルタを持つことにより、システム内のメモリコントローラがディレクトリを持たないようなシステムでも、ローカルスヌープフィルタの情報を用いることで、ローカルスヌープフィルタがディレクトリと同様な機能を持つことで、各他ノード内のマルチキャストの際におけるスヌープの個数と、ノード間に渡るスヌープの個数を削減できる。
【図面の簡単な説明】
【００４３】
【図１】本発明におけるコンピュータシステムの全体ハードウェアの構成の一例を示す図である。
【図２】本発明におけるスヌープフィルタの構成の一例を示す図である。
【図３】本発明における実施例その１においてグローバルスヌープフィルタを用いない場合の構成の一例を示す図である。
【図４】本発明における実施例その２のスヌープフィルタの構成を示す図である。
【図５】本発明における実施例その２の動作フロー図（その１）である。
【図６】本発明における実施例その２の動作フロー図（その２）である。
【図７】本発明における実施例その２の動作フロー図（その３）である。
【図８】処理の終了後におけるスヌープフィルタのエントリ情報を示す図である。
【符号の説明】
【００４４】
１００ａ  ノードコントローラ同士に接続される伝送路
１００ｂ  プロキシコヒーレンスコントローラとスヌープフィルタに接続される伝送路
１００ｃ  プロキシコヒーレンスコントローラとアドレスデコーダに接続される伝送路
１００ｄ  ＣＰＵ同士、またはＣＰＵとノードコントローラに接続される伝送路
１００ｅ  ＣＰＵとメモリコントローラに接続される伝送路
１００ｆ  コヒーレンスコントローラとアドレスデコーダに接続される伝送路
１００ｈ  メモリコントローラとメインメモリに接続される伝送路
１０１  ノード
１０２  ノードコントローラ
１０３  プロキシコヒーレンスコントローラ
１０４  スヌープフィルタ
１０５  ローカルスヌープフィルタ
１０６  グローバルスヌープフィルタ
１０７  アドレスデコーダ
１０８  ＣＰＵ
１０９  キャッシュメモリ（キャッシュ）
１１０  メモリコントローラ
１１１  コヒーレンスコントローラ
１１２  ディレクトリ
１１３  メインメモリ
２０１  スヌープフィルタ
２０２  ローカルスヌープフィルタ
２０３  グローバルスヌープフィルタ
２０４  要求種別・受信方向判定部
２０５  外部接続部
２０６  アドレス比較部
２０７  エントリ情報更新部
２０８  Ｓｎｏｏｐ要求転送先特定部
２０９  エントリが有効か否かの情報を保持する領域
２１０  キャッシュラインアドレスを記憶する領域
２１１  ２１０により記憶されたキャッシュラインアドレスにおけるキャッシュステートを記憶する領域
２１２  外部接続部から要求種別・受信方向判定部のリンク
２１３  要求種別・受信方向判定部から要求種別・受信方向判定部のリンク
２１４  エントリからアドレス比較部のリンク
２１５  アドレス比較部からＳｎｏｏｐ要求転送先特定部のリンク
２１６  エントリからＳｎｏｏｐ要求転送先特定部のリンク
２１７  Ｓｎｏｏｐ要求転送先特定部から外部接続部のリンク
２１８  要求種別・受信方向判定部からエントリ情報更新部のリンク
２１９  要求種別・受信方向判定部から外部接続部のリンク
５０１  Ｒｅａｄ要求
５０２  Ｒｅａｄ要求
５０３  Ｒｅａｄ要求
５０４  スヌープフィルタへのＲｅａｄ要求の入力
５０５  スヌープフィルタからの出力
５０６  Ｓｎｏｏｐ要求
５０７  Ｓｎｏｏｐ要求に対する返答
５０８  スヌープフィルタへのＳｎｏｏｐ要求に対する返答の入力
５０９  スヌープフィルタへのＲｅａｄ要求の入力
５１０  スヌープフィルタからの出力
５１１  Ｓｎｏｏｐ要求
５１２  スヌープフィルタへのＳｎｏｏｐ要求の入力
５１３  スヌープフィルタからの出力
５１４  Ｓｎｏｏｐ要求
５１５  Ｓｎｏｏｐ要求に対する返答
５１６  スヌープフィルタへのＳｎｏｏｐ要求に対する返答の入力
５１７  Ｓｎｏｏｐ要求に対する返答
６０１  メモリリード
６０２  メモリからの出力
６０３  Ｒｅａｄ要求に対する返信
６０４  スヌープフィルタへのＲｅａｄ要求に対する返答の入力
６０５  Ｒｅａｄ要求に対する返信
６０６  スヌープフィルタへのＲｅａｄ要求に対する返答の入力
６０７  Ｒｅａｄ要求に対する返信
７０１  Ｒｅａｄ要求
７０２  Ｓｎｏｏｐ要求
７０３  スヌープフィルタへのＳｎｏｏｐ要求の入力
７０４  スヌープフィルタからの出力
７０５  Ｓｎｏｏｐ要求
７０６  スヌープフィルタへのＲｅａｄ要求の入力
７０７  スヌープフィルタからの出力
７０８  Ｓｎｏｏｐ要求
７０９  Ｓｎｏｏｐ要求に対する返答
７１０  スヌープフィルタへのＳｎｏｏｐ要求に対する返答の入力
７１１  Ｓｎｏｏｐ要求に対する返答
７１２  スヌープフィルタへのＳｎｏｏｐ要求に対する返答の入力
７１３  Ｓｎｏｏｐ要求に対する返答
７１４  メモリリード
７１５  メモリからの出力
【図１】
2008276339.tif 000003
【図２】
2008276339.tif 000004
【図３】
2008276339.tif 000005
【図４】
2008276339.tif 000006
【図５】
2008276339.tif 000007
【図６】
2008276339.tif 000008
【図７】
2008276339.tif 000009
【図８】
2008276339.tif 000010