(57)【要約】【課題】スヌープ要求の削減を図り、発生するトラフィックの増加やアクセスレイテンシーを最小限に抑えること。【解決手段】他ノードからスヌープ要求が到来した際、ノード制御装置はスヌープフィルタによって、所望のラインがあるプロセッサキャッシュへスヌープ要求を送信する。スヌープフィルタは、パーティションの構成を示すパーティションビットマップを有しており、スヌープフィルタがアドレスヒットしなかった場合、パーティションビットマップを参照してそのパーティション内にマルチキャストを行う。これより、アドレスヒットしなかった場合でも、パーティションによりその領域のみをマルチキャストするため、大幅なスヌープ要求の削減が可能となる。【選択図】図１
2008276654.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、それぞれのプロセッサに対応する主記憶装置及びキャッシュと、ノード制御装置とを備えて構成される複数のノードが、ネットワークにより相互に接続され、前記複数のプロセッサが複数のパーティションを構成している主記憶共有型マルチプロセッサにおいて、
前記ノード制御装置は、スヌープフィルタを有し、該スヌープフィルタによって、所望のラインのあるプロセッサのキャッシュへスヌープ要求を送信する手段と、各プロセッサが前記複数のパーティションのどのパーティション内に存在するかを判別する手段とを備え、スヌープフィルタにアドレスヒットしなかった場合、自らが存在するパーティション領域内にマルチキャストを行うことを特徴とする主記憶共有型マルチプロセッサ。
【請求項２】
請求項１記載の主記憶共有型マルチプロセッサにおいて、
前記スヌープフィルタは、キャッシュに格納されているラインのラインアドレス及びキャッシュ状態を持つ複数のキャッシュタグを格納することができる記憶手段と、該記憶手段のキャッシュタグを検索する検索手段とを備え、前記検索手段は、入力されるアドレスよって、前記キャッシュタグを検索することを特徴とする主記憶共有型マルチプロセッサ。
【請求項３】
請求項１記載の主記憶共有型マルチプロセッサにおいて、
前記スヌープフィルタは、スヌープ要求を起因として、キャッシュの状態を前記スヌープフィルタ内に登録して保持することを特徴とする主記憶共有型マルチプロセッサ。
【請求項４】
請求項１記載の主記憶共有型マルチプロセッサにおいて、
前記各ノード制御装置は、パーティションの構成情報をビットマップにより記憶する手段を備えることを特徴とする主記憶共有型マルチプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、主記憶共有型マルチプロセッサに係り、特に、パーソナルコンピュータ（ＰＣ）、ワークステーション（ＷＳ）、サーバ等に用いられる情報処理装置である主記憶共有型マルチプロセッサに関する。
【背景技術】
【０００２】
近年、ＰＣ、ＷＳの上位機種及びサーバ機等は、主記憶共有型のマルチプロセッサ（ＳＭＰ）構成が広まっており、性能を向上させるために、数十台の高多重のプロセッサ相互間で主記憶を共有することが、重要な課題となってきている。主記憶共有型のマルチプロセッサの構成方法として、共有バスにより接続を行う方法、クロスバスイッチにより接続を行う方法が広く採用されている。
【０００３】
接続方法として共有バスを使用した主記憶共有型のマルチプロセッサは、全てのプロセッサが１本のバスで接続されており、ブロードキャストが容易であるという利点を有しているものの、データ転送が１本の共有バスを介して行われるため、プロセッサ数が増加するとバスの競合が起こりデータ通信のオーバーヘッドが増大するという問題点を生じている。すなわち、この共有バスを使用した主記憶共有型のマルチプロセッサは、複数のバスマスタに相当する複数のプロセッサが１本の共有バスを利用するため、シングルプロセッサの場合よりも、バスによるボトルネックがより深刻となってしまい、このため接続可能なプロセッサ数は高々８台程度である。従って、共有バスの使用は、高多重のプロセッサ接続には適さないことになる。
【０００４】
一方、クロスバスイッチを使用する主記憶共有型のマルチプロセッサは、プロセッサと主記憶とを持つ各ボードを、高速なクロスバスイッチにより接続して構成されるものである。このクロスバスイッチを使用する主記憶共有型のマルチプロセッサは、複数のプロセッサのそれぞれを１対１の通信路で接続することができ、異なる経路間の通信を独立させた状態で、高速なデータ通信を行うことができるため、高多重プロセッサ間の高速なデータ通信が可能となる。一方、このクロスバスイッチを使用する主記憶共有型のマルチプロセッサは、ブロードキャストを行うためには、全てのプロセッサに対してパケットを送信する必要があり、ブロードキャスト時のトラフィックを増大させてしまうという問題点を生じさせている。
【０００５】
次に、マルチプロセッサにおけるキャッシュ制御方式について見ると、キャッシュ制御方式には、スヌープブロードキャスト方式と、ディレクトリを用いる方式とがある。
【０００６】
スヌープブロードキャスト方式は、スヌープ要求者がキャッシュの一貫性を保持するためにプロセッサに対してシステム内にスヌープ要求を発行する手法である。この方式は、プロセッサが持つキャッシュが主記憶のデータラインを有していないプロセッサに対しても逐一スヌープ要求を発行しなければならないため、トラフィックが増大してシステムの性能を低下させる可能性があり、性能を維持するために高速のスイッチを設けるとそれに対するコストが増大してしまう。
【０００７】
一方、ディレクトリを用いる方式は、主記憶のデータライン毎に、そのデータラインがどこのプロセッサのキャッシュに接続されているかを示すディレクトリを設けることにより、必要なプロセッサのみにキャッシュの一貫性を保持するためのスヌープ要求を送信するというものである。これにより、制御装置にかかるトラフィックを大幅に削減することができる。
【０００８】
前述したようなことから、接続方式の１つであるクロスバスイッチを使用する構成方法と、キャッシュ制御方式の１つであるディレクトリ方式とを併用することにより、高速にキャッシュの一貫性を保持することがきるようにすると同時に、システム内の無駄なスヌープ要求の発行を抑止して、キャッシュの一貫性保持のためのトラフィック量を削減することができる主記憶共有型のマルチプロセッサを構成することができることが判る。
【０００９】
しかし、前述したように構成される主記憶共有型のマルチプロセッサは、キャッシュの一貫性を保持するためのスヌープ要求を出す際には、必ず、主記憶に置かれたディレクトリの内容をチェックしなければならないため、アクセスレイテンシが大幅に増加するという欠点を持つことになってしまうと共に、ディレクトリを置くためのメモリのコストが高くなるという欠点をも持つことになってしまう。
【００１０】
図８はキャッシュ制御方式／接続方式について、トラフィック量／コストの観点からの評価を行ったものを示す図である。この図の内容は、前述までに説明した事柄を纏めたものであり、ここでは、これ以上の説明を省略する。
【００１１】
また、近年、プロセッサの高多重化等による計算機システムの性能の向上を受け、１つのサーバ上で複数のＯＳ（オペレーティングシステム）を稼動させるパーティショニング方式が注目されている。このパーティショニング方式は、１つのサーバに複数サーバを集約させた場合に、任意にサーバ間の移行を実現することを可能とするものである。パーティショニング方式の１つの方式として、計算機システムの中を物理的に分割する物理分割方式がある。その具体例として、非特許文献１に記載されたサンマイクロシステムズ社のダイナミック・システム・ドメインがあるか、この方式は、分割することができる単位がプロセッサあるいはノード単位でしか行うことができないという制限を受けるものである。
【００１２】
一方、パーティショニング方式の別の方式として、物理的なプロセッサやメモリを仮想化し、計算機の中に任意の数の論理的な区画を生成する論理分割方式がある。論理分割方式は、ハイパバイザや仮想マシンモニタと呼ばれるファームウェアによって実現することができる。これにより、ノードよりも細かい単位でパーティションを設けることが可能となり、さらに、プロセッサに関しては複数の論理パーティション間で１つの物理プロセッサを時分割で切り替えながら実行することや、物理プロセッサの数よりも多くの論理パーティションを生成し同時に実行することが可能になる。仮想マシンモニタによる論理分割を行うための典型的なソフトウェアとしては、非特許文献２等に記載されたVMware GSX Server が知られている。
【非特許文献１】SUN EnterpriseTM 10000 Server:Dynamic System Domain
【非特許文献２】GSX ServerWhite Paper(日本語版) Net world,Inc.
【発明の開示】
【発明が解決しようとする課題】
【００１３】
前述した従来技術による主記憶共有型マルチプロセッサは、他のプロセッサへのキャッシュの一貫性を保持するためにスヌープ要求処理を行わなければならない。なぜなら、他のプロセッサのキャッシュの上にアクセスされたラインのコピーがキャッシングされている可能性があるからである。実際に、他のプロセッサのキャッシュに自プロセッサが必要とするラインがキャッシングされていた場合、前述のスヌープ要求処理は無駄にはならない。しかし、自プロセッサがアクセスしたラインが、他のプロセッサから１回もアクセスされていないローカルなラインの場合、該当するラインが他のプロセッサのキャッシュ上にキャッシングされている可能性は０であり、この場合、本来的には、スヌープ要求処理は全く不要である。
【００１４】
そのため、従来技術による主記憶共有型マルチプロセッサは、無駄なスヌープ処理を行うことにより、アクセスレイテンシを増加させてしまうのみならず、スイッチ上のトラフィックを増大させてしまうという問題点を生じさせている。
【００１５】
また、ディレクトリを用いる主記憶共有型マルチプロセッサは、キャッシュライン単位でどのプロセッサにキャッシングされているかを管理しているため、無駄なスヌープ処理が生じることはないが、すでに説明したように、ディレクトリのためのハードウェア量が多いのみならず、ディレクトリを管理するためのオーバーヘッドが非常に大きいという問題点を有することになる。
【００１６】
本発明の目的は、前述したような従来技術の問題点を解決し、スヌープ要求の削減を図り、発生するトラフィックの増加やアクセスレイテンシーを最小限に抑えることができる主記憶共有型マルチプロセッサを提供することにある。
【課題を解決するための手段】
【００１７】
本発明によれば前記目的は、複数のプロセッサと、それぞれのプロセッサに対応する主記憶装置及びキャッシュと、ノード制御装置とを備えて構成される複数のノードが、ネットワークにより相互に接続され、前記複数のプロセッサが複数のパーティションを構成している主記憶共有型マルチプロセッサにおいて、前記ノード制御装置は、スヌープフィルタを有し、該スヌープフィルタによって、所望のラインのあるプロセッサのキャッシュへスヌープ要求を送信する手段と、各プロセッサが前記複数のパーティションのどのパーティション内に存在するかを判別する手段とを備え、スヌープフィルタにアドレスヒットしなかった場合、自らが存在するパーティション領域内にマルチキャストを行うことにより達成される。
【００１８】
前述したような構成を備える主記憶共有型マルチプロセッサは、ノード制御装置にリード要求あるいはスヌープ要求が到来した際、スヌープフィルタにより、エントリに記憶してあるキャッシュラインアドレス及びラインの所有、未所有を表すキャッシュ状態を参照し、所望のラインを所有しているキャッシュのみにスヌープ要求を送信することができるので、不必要なスヌープ要求を削減することができる。
【発明の効果】
【００１９】
本発明によれば、スヌープ要求の削減を図り、発生するトラフィックの増加やアクセスレイテンシーを最小限に抑えることができる。
【００２０】
また、本発明によれば、スヌープ要求を起因として登録を行うことを前提とするスヌープフィルタを用いる場合、スヌープフィルタには、自らが属するパーティション内に存在するキャッシュからのスヌープ要求情報だけが登録されることになるため、全パーティションの情報を登録する場合に比較してスヌープフィルタの登録件数を少なくすることができ、同容量のスヌープフィルタを用いる場合にスヌープフィルタのヒット率の向上を図ることができる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明による主記憶共有型マルチプロセッサ及び主記憶制御方法の実施形態を図面により詳細に説明する。
【００２２】
図１は本発明の一実施形態による主記憶共有型マルチプロセッサのシステム構成を示すブロック図である。図１に示すシステムは、いわゆる分散共有メモリ型の並列計算機システムを構成する多ノードシステムであって、図示例では、ノード数を４ノードとして示している。
【００２３】
図１に示す本発明の実施形態による主記憶共有型マルチプロセッサは、複数のノード１０６ａ〜１０６ｄを、その内部に設けられるノード制御装置１０４ａ〜１０４ｄがネットワーク１０８により接続して構成されるている。各ノードは、同一の構造を有している。ノード１０６ａを代表としてその構成を説明すると、ノード１０６ａは、それぞれがキャッシュメモリ１０３ａ〜１０３ｃを有するＣＰＵ（プロセッサ）１０２ａ〜１０２ｃと、各ＣＰＵに対応した主記憶装置１０１ａ〜１０１ｃ及び記憶制御装置１０７ａ〜１０７ｃと、ノード制御装置１０４ａとを備えて構成されている。ノード制御装置１０４ａの内部には、スヌープフィルタ１０５ａが備えられており、スヌープフィルタ１０５ａは、パーティションビットマップ２０６ａを有している。また、図１に示すシステムは、ノード１０６ａ〜１０６ｄをグループ化して、システム内にパーティション１００ａ、１００ｂを構成している。図１に示す例では、ノード１０６ａがパーティション１００ａを構成し、ノード１０６ｂ〜１０６ｄがパーティション１００ｂを構成している。パーティションの構成は、ノード単位でグループ化されている必要はなく、プロセッサ単位でグループされていてよい。前述のパーティションビットマップ２０６ａは、各プロセッサが所属するパーティションをビットマップとして示したものである。
【００２４】
図１に示す本発明の実施形態における各ノードを構成する主記憶装置、記憶制御装置、ＣＰＵのそれぞれには、それらの識別番号として０〜１１が付与されると共に、固有の符号が付与されているが、以下の説明では、固有の符号を使用するものとする。
【００２５】
図２はスヌープフィルタの構成を示すブロック図である。図２に示すスヌープフィルタは、複数のキャッシュタグを格納することができる記憶領域２０８と、この記憶領域２０８のキャッシュタグを検索する検索機構２０９と、比較器２０５とを備えて構成されている。また、スヌープフィルタ１０５は、パーティションをサポートしているため、前述で説明したパーティションビットマップ２０６備えて構成されている。
【００２６】
キャッシュタグは、キャッシュに格納されているラインのラインアドレスを記憶するLine Address２０１と、キャッシュ状態を記憶する Cache State２０２とにより構成される。そして、スヌープフィルタ１０５は、入力されるスヌープ要求アドレス２０３のインデックス部分によって、検索機構２０９がスヌープフィルタに登録されているキャッシュタグを検索する。検索により得られたキャッシュタグのLine Address２０１に保持されているラインアドレス２０４と入力されたスヌープ要求アドレス２０３とは、比較器２０５により比較され、スヌープフィルタ内に検索したスヌープ要求アドレスが指すデータが格納されているか否かを示す信号２０７が出力される。
【００２７】
キャッシュタグにおけるキャッシュ状態を示す Cache State２０２としては、「０ｂ１」または「０ｂ０」の何れか一方の値に更新可能に格納されている。キャッシュ状態の値「０ｂ１」は、キャッシュメモリに対してフィルタリングを行わずにスヌープ要求を発行する処理を行わせ、キャッシュ状態の値「０ｂ０」は、キャッシュメモリに対してスヌープ要求をフィルタリングすしてスヌープ要求を発行させないように制御することを指示する情報であり、スヌープフィルタ１０５は、 Cache State２０２の情報により前述のような処理を行う処理機構を備えている。
【００２８】
本発明の実施形態においては、登録可能なキャッシュタグのエントリ数がシステム内の全ラインアドレスよりも少ないため、あるラインに関する情報を新規に登録する場合、スヌープフィルタ内に空きエントリが存在しない場合がある。その場合、既にライン情報を格納しているエントリから１エントリを選択し、そのエントリに情報を上書きする必要がある。その手法として、本発明の実施形態では、ＬＲＵを用いてこれを実現するものとする。
【００２９】
なお、本発明の実施形態で使用するスヌープフィルタの構成は、必ずしも説明する例のような構成とする必要はない。また、キャッシュ状態の登録について、ノード内の任意のキャッシュがラインを保有している場合、そのノードがラインを保有しているとみなし、ノード単位で、キャッシュの状態を管理することも可能である。
【００３０】
図３はパーティションビットマップの例を説明する図である。パーティションビットマップ２０６は、前述で説明したように、システム内のスヌープフィルタ１０５内に存在する。パーティションをサポートするスヌープフィルタ１０５は、このパーティションビットマップ２０６を参照して、パーティション内部にあるプロセッサに対してコマンドを発信する。
【００３１】
図３に示すように、パーティションビットマップ２０６は、プロセッサ３００ａ〜３００ｃ毎に、全プロセッサ分のビット幅を有するビットマップを設けて構成されている。図３に示す例において、あるプロセッサに対応している行に立っているビットは、プロセッサが同一パーティションに属していることを表している。例えば、プロセッサ３とプロセッサ５が同一のパーティションに存在している場合、（行のプロセッサ＃、列のプロセッサ＃）＝（３，５），（５，３）の２つの位置にビットが立つこととなる。
【００３２】
図４はパーティションビットマップの具体例を示す図である。図４に示す例は、４台のプロセッサによりパーティションを構成する場合の例であり、パーティションビットマップ４００ａ〜４００ｃは、プロセッサ毎に４ｂｉｔが割り当てられて構成されている。
【００３３】
図４に示す例１は、プロセッサ４０３ａ〜４０３ｄのそれぞれがパーティション４０６ａ〜４０６ｄの１つに所属する場合の例である。この例１の場合、パーティションビットマップ４００ａは、行と列との同じプロセッサナンバの箇所にのみビットが立ったものとなる。
【００３４】
また、図４に示す例２は、プロセッサ４０４ａ〜４０４ｄのうち、プロセッサ４０４ａ、４０４ｂが同一パーティション４０７ａ内に存在し、プロセッサ４０４ｃ、４０４ｄが別の同一パーティション４０７ｂ内に存在しているものとしている。この例２の場合、パーティションビットマップ４００ｂは、プロセッサ４０４ａ、４０４ｂが同一パーティション４０７ａ内に存在することにより、（行のプロセッサ＃、列のプロセッサ＃）＝（０，１），（１，０）にそれぞれビットが立つことになり、同様に、プロセッサ４０４ｃ、４０４ｄが別の同一パーティション４０７ｂ内に存在することにより、（行のプロセッサ＃、列のプロセッサ＃）＝（２，３），（３，２）に対してビットが立つことになる。
【００３５】
さらに、図４に示す例３は、１つのプロセッサ、図示例ではプロセッサ４０５ｂが複数のパーティションに所属している場合の例であり、プロセッサ４０５ａ〜４０５ｄのうち、プロセッサ４０５ａ、４０５ｂが同一パーティション４０８ａ内に存在し、プロセッサ４０５ｂ、４０５ｃが同一パーティション４０８ｂ内に存在し、プロセッサ４０５ｄだけがパーティション４０８ｃ内に存在しているものとしている。この例３の場合、パーティションビットマップ４００ｃは、プロセッサ４０５ａ、４０５ｂが同一パーティション４０８ａ内に存在することにより、（行のプロセッサ＃、列のプロセッサ＃）＝（０，１），（１，０）にそれぞれビットが立つことになり、プロセッサ４０５ｂ、４０５ｃが同一パーティション４０８ｂ内に存在することにより、（行のプロセッサ＃、列のプロセッサ＃）＝（１，２），（２，１）に対してそれぞれビットが立つことになり、プロセッサ４０５ｄだけがパーティション４０８ｃ内に存在することにより、（行のプロセッサ＃、列のプロセッサ＃）＝（３，３）のみに対してビットが立つこととなる。
【００３６】
図３、図４により説明したパーティションビットマップは、同一パーティションに属するプロセッサを示すビットを立てるとして説明したが、ビットを立てる位置に、パーティションの識別番号を記述してもよい。
【００３７】
図５は図１に示した本発明の一実施形態による主記憶共有型マルチプロセッサに設定されるパーティションビットマップ４００ｄの構成例を示す図である。この図５に示すパーティションビットマップ４００ｄは、１２台のプロセッサのそれぞれが、パーティション１００ａ、１００ｂのどちらのパーティションに属しているかを、パーティションの識別番号０、１として示したものである。
【００３８】
ここで、スヌープフィルタ１０５の処理動作について説明する。スヌープフィルタ１０５は、リード要求またはスヌープ要求が到来すると、スヌープフィルタのエントリにすでに登録されているラインのアドレスと到来したコマンドのアドレスとの比較を行う。ヒットした場合、すでにラインアドレスがエントリに登録されていることを意味し、一方、ミスヒットの場合、登録がされていないことを意味するため新規に登録が行われる。以下では、リード要求、スヌープ要求が到来した際のヒット、ミスヒットチェックの場合のそれぞれについて説明する。
【００３９】
なお、本発明の実施形態によるシステムで発行されるリード要求は、排他的リード要求である場合と、非排他的リード要求である場合の両方があり得る。排他的リード要求とは、リード発行後、システム内においてリード要求者のみがラインの所有権を保有するものであり、一方、非排他的リード要求とは、リード要求後システム内におけるラインの所有がリード要求者以外にもあり得る場合を意味する。
【００４０】
・リード要求信号を受信して、ヒットした場合
スヌープフィルタ１０５は、リード要求信号を受信すると、そのリード信号のアドレス２０３とキャッシュタグのラインアドレス部２０１とが同一となるエントリを検索し、同一となるエントリを有する場合、ヒットしたアドレスに対してキャッシュメモリのラインの所有、無所有の状態を Cache State（キャッシュ状態部）２０２で調べ、「０ｂ０」が登録されているキャッシュに対してはスヌープフィルタリングを行ってスヌープ要求を行わず、キャッシュ状態が「０ｂ１」のキャッシュに対してのみスヌープ要求を送信して、そのスヌープレスポンズにより状態を更新する。そして、発行されたリード要求が排他的であれば、リード要求者のキャッシュ状態部 Cache State２０２を「０ｂ１」とし、リード要求者以外のキャッシュのキャッシュ状態部 Cache State２０２を「０ｂ０」とする。一方、発行されたリード要求が非排他的であった場合、要求ラインを所有していなければ、 Cache State２０２を「０ｂ０」に、ラインを所有していれば、 Cache State２０２を「０ｂ１」に更新する。
【００４１】
・スヌープ要求信号を受信して、ヒットした場合
スヌープフィルタ１０５は、スヌープ要求信号を受信すると、そのスヌープ信号のアドレス２０３とキャッシュタグのラインアドレス部 Line Address ２０１とが同一となるエントリを検索し、同一となるエントリを有する場合、ヒットしたエントリのキャッシュメモリのラインの所有、無所有の状態をキャッシュ状態部 Cache State２０２で調べ、「０ｂ０」が登録されているキャッシュに対して、スヌープフィルタリングを行ってスヌープ要求を行わず、キャッシュ状態が「０ｂ１」のキャッシュに対してのみスヌープ要求を送信して、そのスヌープレスポンズにより状態を更新する。そして、発行されたリード要求が排他的であれば、リード要求者のキャッシュ状態部 Cache State２０２を「０ｂ１」とし、リード要求者以外のキャッシュのキャッシュ状態部 Cache State２０２を「０ｂ０」とする。一方、発行されたリード要求が非排他的であった場合、要求ラインを所有していなければ、 Cache State２０２を「０ｂ０」に、ラインを所有していれば、 Cache State２０２を「０ｂ１」に更新する。
【００４２】
・リード要求信号を受信してミスヒットした場合
スヌープフィルタ１０５は、リード要求信号を受信すると、そのリード信号のアドレス２０３とキャッシュタグのラインアドレス部 Line Address ２０１とが同一となるエントリを検索し、同一となるエントリが見つからずミスヒットした場合、リード要求アドレスをキャッシュタグのエントリのラインアドレス部 Line Address ２０１に登録すると共に、リード要求を発行したプロセッサ以外に、スヌープブロードキャストを行う。そして、返信されたスヌープレスポンズにより、キャッシュ状態部 Cache State２０２を更新する。そして、発行されたリード要求が排他的であれば、リード要求者のキャッシュ状態部 Cache State２０２を「０ｂ１」に、リード要求者以外のキャッシュ状態部 Cache State２０２を「０ｂ０」に更新する。一方、発行されたリード要求が非排他的である場合、要求ラインを所有していなければ、 Cache State２０２を「０ｂ０」に、ラインを所有していれば、 Cache State２０２を「０ｂ１」に更新する。
【００４３】
・スヌープ要求信号を受信してミスヒットした場合
スヌープフィルタ１０５は、スヌープ要求信号を受信すると、そのスヌープ信号のアドレス２０３とキャッシュタグのラインアドレス部 Line Address ２０１とが同一となるエントリを検索し、同一となるエントリが見つからず、ミスヒットした場合、スヌープ要求アドレスをキャッシュタグのエントリのラインアドレス部 Line Address ２０１に登録すると共に、全プロセッサに対して、スヌープブロードキャストを行う。そして、返信されたスヌープレスポンズにより、キャッシュ状態部 Cache State２０２を更新する。そして、発行されたリード要求が排他的であれば、リード要求者のキャッシュ状態部 Cache State２０２を「０ｂ１」に、リード要求者以外のキャッシュ状態部 Cache State２０２を「０ｂ０」に更新する。一方、発行されたリード要求が非排他的である場合、要求ラインを所有していなければ、 Cache State２０２を「０ｂ０」に、ラインを所有していれば、 Cache State２０２を「０ｂ１」に更新する。
【００４４】
次に、図１に示すシステムにおいて、あるプロセッサからリード要求が発行され、所望のラインが要求元へ転送された後、異なるプロセッサが同じアドレスのラインを要求するものとして本発明の実施形態の動作について説明する。
【００４５】
図６はあるプロセッサから１回目のリード要求が発行された場合の動作を説明する図であり、次に、これについて説明する。なお、図６に示すシステム構成は、図１のものと同一であり、図に太線で示しているのがコマンドの流れである。
【００４６】
図６において、いま、ノード１０６ｃ内のプロセッサ１０２ｇが、ノード１０６ｄ内の主記憶装置１０１ｊに含まれるラインを獲得するために、自プロセッサが持つキャッシュメモリ１０３ｇにアクセスした結果、キャッシュミスが生じ、要求するメモリアドレスが存在するノード１０６ｄ内の主記憶装置１０１ｊに対応した記憶制御装置１０７ｊへ、リード要求５００ａを発行するものとる。また、このとき、システム内の全てのキャッシュメモリには、要求される主記憶装置のラインのコピーが存在しないものとし、リード要求５００ａは、排他的リード要求であるものとする。また、リード要求を行ったプロセッサは、スヌープ要求を行いその結果、所望のラインを獲得するが、スヌープ要求としては、ノード制御装置によるノード内にあるプロセッサへの発行（ローカルスヌープ）とノード外でのノード制御装置間での発行（グローバルスヌープ）の２つが存在するものとする。
【００４７】
このため、スヌープフィルタは、ローカルスヌープのためのキャッシュタグに、自ノード内のキャッシュに格納されているラインのラインアドレスを記憶すると共に、グローバルスヌープのためのキャッシュタグに、他のノード内のキャッシュに格納されているラインのラインアドレスを記憶する。
【００４８】
各ノードに含まれる前述したスヌープフィルタには、あるノードから他ノードへのリード要求を起因として、そのリード要求のアドレスとキャッシュ状態とがキャッシュタグとして登録される。一方、スヌープフィルタは、他ノードからそのノード制御装置に接続されているプロセッサ内のキャッシュへのスヌープ要求を起因として、同様に要求されたアドレスとキャッシュ状態とをキャッシュタグとして登録する機能を有する。また、リード要求の到達点であるプロセッサは、自ノード内にあるプロセッサに対してスヌープを発行しその応答によって、キャッシュ状態をディレクトリで管理するものとする。さらに、初期状態において、全てのノードにおけるスヌープフィルタのエントリへの登録は何もないものとする。
【００４９】
図６において、ノード１０６ｃ内のプロセッサ１０２から発行されたリード要求５００ａは、ノード制御装置１０４ｃに送信され、その後、リード要求５００ｂとなってノード１０６ｄ内のノード制御装置１０４ｄへ転送され、最後に、リード要求５００ｃとなつてノード制御装置１０４ｄから記憶制御装置１０７ｊへ伝達されることになる。
【００５０】
まず、始めにリード要求５００ａがノード制御装置１０４ｃに到達すると、ノード制御装置１０４ｃは、すでに説明したように、このリード要求に起因して、スヌープフィルタ１０５ｃのエントリにすでに登録されているアドレスと、到来したリード要求のアドレスとのヒット、ミスヒットチェックを行う。前述した条件により、初期化時のスヌープフィルタ１０５ｃのエントリには何も登録されていないため、ヒット、ミスヒットチェックの結果がミスヒットとなる。従って、スヌープフィルタ１０５ｃにリード要求アドレスがエントリとして登録される。また、ノード制御装置１０４ｃは、自ノード１０６ｃ内のリード要求５００ａを発行したプロセッサ１０２ｇ以外のプロセッサ１０２ｈ、１０２ｉに対してスヌープ要求（ローカルスヌープ）を発行する。
【００５１】
すなわち、スヌープフィルタ１０５ｃは、自スヌープフィルタ１０５ｃがサポートしているパーティションビットマップ２０６ｃ（具体的には図５に示した４００ｄ）を参照し、リード要求５００ａを発行したプロセッサ１０２ｇと同一のパーティション１００ｂに属しているプロセッサへスヌープマルチキャストを行う。すなわち、プロセッサ１０２ｈ、１０２ｉに対してスヌープ要求が送信される。また、スヌープフィルタ１０５ｃにおけるリード要求を行ったプロセッサ１０２ｇのキャッシュ１０３ｇの状態を示す Cache State２０２に「０ｂ１」を登録する。その後、それぞれへのスヌープ要求に対応したスヌープ応答によって、スヌープフィルタに登録したリード要求アドレスに相当するエントリの Cache State２０２を更新する。ここで説明している例では、所望のラインは存在しないとしているので、キャッシュ１０３ｈ、１０３ｉに対応する Cache State２０２は共に［０ｂ０］となる。そして、それぞれのスヌープ応答を集計し、ノード１０６ｄ内の記憶制御装置１０７ｊへリード要求５００ｂを転送し、ノード１０６ｃ内のマルチキャストが完了する。
【００５２】
リード要求５００ｂは、ノード１０６ｄのノード制御装置１０４ｄを介して記憶制御装置１０７ｊへ到達するが、その際、ノード制御装置１０４ｄは、記憶制御装置１０７ｊが属するノード１０６ｄと同一のノード１０６ｄ内のリード要求によりラインが要求された主記憶装置１０１ｊを持つプロセッサ１０２ｊ以外のプロセッサ１０２ｋ、１０２ｌに対してスヌープ要求を発行する。その後のスヌープ応答をもって、プロセッサ１０２ｊは、自プロセッサのディレクトリにキャッシュ１０３ｋ、１０３ｌの状態を登録する。説明している例の場合、キャッシュ１０３ｋ、１０３ｌは所望のラインを所有していないため「０ｂ０」が登録され、ノード１０６ｄ内におけるマルチキャストが完了する。
【００５３】
一方で、リード要求５００ｂを受信したノード制御装置１０４ｄ内のスヌープフィルタ１０５ｄは、リード要求に起因して、スヌープフィルタのエントリにすでに登録されているアドレスと、到来したリード要求のアドレスとのヒット、ミスヒットチェックを行う。ここで説明している例では、前述した説明の条件により、初期化時スヌープフィルタのエントリには何も登録されていないとしているため、ヒット、ミスヒットチェックの結果がミスヒットとなる。従って、スヌープフィルタ１０５ｄにはリード要求５００ｂのアドレスが登録される。さらに、リード要求を行ったノード１０６ｃ内のプロセッサ１０２ｇのキャッシュメモリ１０３ｇのキャッシュ状態を「０ｂ１」に登録する。
【００５４】
その後、スヌープフィルタ１０５ｄは、リード要求５００ａを発行したプロセッサ１０２ｇを含むノード１０６ｃ以外のノードに対してスヌープ要求（グローバルスヌープ）を発行する。このとき、スヌープフィルタ１０５ｄは、パーティションビットマップ４００ｄを参照し、リード要求５００ａを発行したプロセッサ１０２ｇと同じパーティション１００ｂに属しているプロセッサへスヌープマルチキャストが行われる。すなわち、プロセッサ１０２ｄ、１０２ｅ、１０２ｆがスヌープ要求発行対象となる。
【００５５】
ここで、もし、スヌープフィルタ１０５ｄがパーティションをサポートしていないとすると、パーティション１００ａ内のノード１０６ａに対してもスヌープ要求を送信しなければならないこととなる。そして、スヌープ要求が到来したノード１０６ａ内のノード制御装置１０４ａ内のスヌープフィルタ１０５ａは、パーティション外のアクセスし得ないアドレスについてのスヌープ要求をも登録しなければならなくなり、スヌープフィルタ１０５ａは、無駄なスヌープ要求登録のために余計にエントリを保有する必要が生じることになる。
【００５６】
ノード１０６ｂへ送信されるスヌープ要求（グローバルスヌープ）５０１ａは、ノード１０６ｄ内のノード制御装置１０４ｄからノード１０６ｂ内のノード制御装置１０４ｂへ転送される。ノード１０６ｂのスヌープフィルタ１０５ｂは、グローバルスヌープによるスヌープ要求５０１ａの到来時、スヌープフィルタ１０５ｂのエントリにすでに登録されているアドレスと、到来したリード要求のアドレスとのヒット、ミスヒットチェックを行う。ここで説明している例では、前述した説明の条件により、初期化時スヌープフィルタのエントリには何も登録されていないとしているため、ヒット、ミスヒットチェックの結果がミスヒットとなる。これにより、スヌープフィルタ１０５ｂは、アラインドレスのエントリ２０１にスヌープ要求５０１ａのアドレスを登録する。
【００５７】
また、スヌープフィルタ１０５ｂは、自フィルタ１０５ｂがサポートしているパーティションビットマップ４００ｄを参照して、リード要求を発行したプロセッサ１０２ｇと同じパーティションに属しているプロセッサに対して自ノード１０６ｂ内のプロセッサに対してスヌープ要求（ローカルスヌープ）のマルチキャストを行う。すなわち、プロセッサ１０２ｄ、１０２ｅ、１０２ｆがスヌープ要求の発行対象となる。その後、スヌープ応答の返信によりスヌープ要求アドレスを登録したエントリに対応しているキャッシュ状態部 Cache State２０２におけるキャッシュ１０３ｄ、１０３ｅ、１０３ｆについての状態が更新される。ここで説明している例では、前述した説明の条件により、全てのプロセッサにおいてラインの所有はないため、状態は、共に「０ｂ０」に更新される。
【００５８】
また、前記のスヌープ応答の結果は、グローバルスヌープの発行元であるノード制御装置１０４ｄへ返信され、スヌープフィルタ１０５ｄのリード要求アドレスを登録したエントリに対応するキャッシュ状態部 Cache State２０２におけるキャッシュ１０３ｄ、１０３ｅ、１０３ｆについての状態が更新される。ここでも、前述した説明の条件により、全てのプロセッサにおいてラインの所有はないため、状態は、全て「０ｂ０」に更新される。最後に、スヌープ応答の集計結果がノード制御装置１０４ｄから記憶制御装置１０７ｊに転送され、ノード１０６ｂ内のマルチキャストが完了する。記憶制御装置１０７ｊは、リード要求５００ａを送信したプロセッサ１０２ｇに対して所望のラインを転送してリード要求が完了する。
【００５９】
図７はある別のプロセッサから図６で説明したものと同一のアドレスのラインのリード要求が発行された場合の動作を説明する図であり、次に、これについて説明する。なお、図７に示すシステム構成は、図１のものと同一であり、図に太線で示しているのがコマンドの流れである。この例場合、リード要求５００ｄは、排他的リード要求とする。また、ラインのコピーは、図６により説明した処理によりキャッシュ１０３ｇが有している。
【００６０】
図７において、リード要求５００ｄを発行するプロセッサがノード１０６ｄ内のプロセッサ１０２ｌであるとする。プロセッサ１０２ｌは、所望のラインについて自プロセッサのキャッシュにアクセスした際にキャッシュミスとなった場合、所望のラインのアドレスが存在する主記憶に対応する記憶制御装置１０７ｊに対して、リード要求５００ｄを発行する。このリード要求を受け取った記憶制御装置１０７ｊは、ノード内でリード要求５００ｄを発行したプロセッサ１０２ｌ以外にスヌープ要求を発行する。この場合、ノード１０６ｄ内においてプロセッサ１０２ｋがスヌープ要求発行対象となる。しかし、プロセッサ１０２ｇが発行したリード要求に起因して、プロセッサ１０２ｋのキャッシュ１０３ｋが所望のラインを保有していないというライン所有状態をプロセッサ１０２ｊのディレクトリが管理しているため、プロセッサ１０２ｋへのスヌープ要求は発行されない。
【００６１】
次に、リード要求５００ｄを発行したプロセッサ１０２ｌを含むノード１０６ｄ以外のノードに対してスヌープ要求（グローバルスヌープ）が発行される。この場合、ノード１０６ｄ内のノード制御装置１０４ｄのスヌープフィルタ１０５ｄがサポートするパーティションビットマップ４００ｄを参照して、リード要求５００ｄを発行したプロセッサ１０２ｌを含むパーティション１００ｂに属するプロセッサに対してのみスヌープ要求を発行する。すなわち、パーティション１００ｂに属するプロセッサ１０２ｄ、１０２ｅ、１０２ｆ、１０２ｇ、１０２ｈ、１０２ｉがスヌープ要求の発行対象となる。
【００６２】
ここで、もし、スヌープフィルタ１０５ｄがパーティションをサポートしていないとすると、パーティション１００ａ内のノード１０６ａに対してもスヌープ要求を送信しなければならないこととなる。そして、スヌープ要求が到来したノード１０６ａ内のノード制御装置１０４ａ内のスヌープフィルタ１０５ａは、パーティション外のアクセスし得ないアドレスについてのスヌープ要求をも登録しなければならなくなり、スヌープフィルタ１０５ａは、無駄なスヌープ要求登録のために余計にエントリを保有する必要が生じることになる。
【００６３】
さて、記憶制御装置１０７ｊからのスヌープ要求がノード制御装置１０４ｄへ送信されると、ノード制御装置１０４ｄ内のスヌープフィルタ１０５ｄは、受信したスヌープ要求アドレスと登録されているアドレスとのヒット、ミスヒットチェックを行う。前述したように、ここでは、受信したスヌープ要求アドレスと等しいアドレスが登録されているため比較の結果がヒットとなる。そして、ヒットしたエントリのキャッシュ状態を参照して、所望のラインを有しているプロセッサにのみスヌープ要求が発行される。ここでは、前述より、プロセッサ１０２ｇのキャッシュ１０３ｇが所望のラインを有しており、それ以外のキャッシュ１０２ｄ、１０２ｅ、１０２ｆはラインを有していないため、プロセッサ１０２ｇが存在するノード１０６ｃにのみにスヌープ要求５０１ｂが発行される。
【００６４】
スヌープ要求５０１ｂがノード１０６ｃのノード制御装置１０４ｃに到達すると、スヌープフィルタ１０５ｃは、スヌープ要求５０１ｂのアドレスとスヌープフィルタ１０５ｃのエントリのアドレス部分の全てと比較する。今回のスヌープ要求５０１ｂについてのアドレスは前回のものと等しいため、比較の結果、ヒットとなる。ノード制御装置１０４ｃのスヌープフィルタ１０５ｃは、ヒットした当該エントリのキャッシュ状態を参照してスヌープ要求を発行する。このスヌープ要求発行の際、スヌープフィルタ１０５ｃがサポートするパーティションビットマップ４００ｄを参照して、リード要求を発行したプロセッサ１０２ｌに属しているパーティションと同一のパーティション１００ｂのプロセッサへスヌープ要求を発行する。
【００６５】
図５に示したパーティションビットマップ４００ｄからノード１０６ｃ内のプロセッサ１０２ｇ、１０２ｈ、１０２ｉは全て当該パーティションに属しているため、スヌープ要求は、この３つのプロセッサに対して発行し得る。ここで、スヌープフィルタ１０５ｃに到来したスヌープ要求のアドレスと等しいアドレスが格納されているエントリに対応した各キャッシュ状態を参照すると、キャッシュ１０３ｈ、１０３ｉにはラインは存在せず、所望のラインは前回のリード要求元のプロセッサ１０２ｇが保有していることが判る。これにより、スヌープフィルタ１０５ｃは、キャッシュ１０３ｈ、１０３ｉへのスヌープ要求をフィルタリングしてスヌープ要求を行わず、キャッシュ１０３ｇのみにスヌープ要求を発行する。
【００６６】
その後、前述のスヌープ要求に伴うスヌープ応答により、スヌープフィルタの当該エントリ内の各キャッシュ状態が更新される。所望のラインの所有権は、２回目のリード要求を発行したプロセッサ１０２ｌへ移譲されるため、キャッシュ１０３ｇ、１０３ｈ、１０３ｉに対応するキャッシュタグの Cache State２０２の状態は、共に「０ｂ０」とされる。また、スヌープフィルタ１０５ｃは、到達したスヌープ応答を集計し、リード要求５００ｄが受信された記憶制御装置１０７ｊに対して転送する。最後に所望のラインを１回目のリード要求元のプロセッサ１０２ｇから今回のリード要求元のプロセッサ１０２ｌへ転送して、２回目のリード要求が終了する。
【００６７】
前述したように、本発明の実施形態は、スヌープフィルタがパーティションをサポートすることにより、パーティション外のアクセスすることのないアドレスについてのスヌープ要求登録を削減することができる。スヌープフィルタに、リクエストに起因して登録が行われる場合、パーティションに関係なく登録が行われるため、登録に必要な容量はパーティションの有無に関係なく必要となる。一方、スヌープ要求に起因して登録が行われる場合、パーティション外のアクセスし得ないアドレスについてのスヌープ要求の登録が行われないので、エントリを減ずることが可能となり、その分小容量でヒット率維持を実現することができる。
【００６８】
前述した本発明の実施形態によれば、パーティションをサポートするスヌープフィルタとパーティションとを同時に運用することにより、スヌープ要求の大幅な削減を実現することができる。これにより、ＳＭＰにおいて必要不可欠なコヒーレンス制御をより効率的に実行することができ、ＳＭＰの性能の向上を図り、より高性能コンピュータを実現することが可能となる。一方、本発明の実施形態によれば、スヌープフィルタがパーティションをサポートすることにより、他のパーティションのアクセスし得ないアドレスへの無駄なスヌープ要求の登録を除去することが可能となり、その分、登録エントリを有効に活用することができる。
【図面の簡単な説明】
【００６９】
【図１】本発明の一実施形態による主記憶共有型マルチプロセッサのシステム構成を示すブロック図である。
【図２】スヌープフィルタの構成を示すブロック図である。
【図３】パーティションビットマップの例を説明する図である。
【図４】パーティションビットマップの具体例を示す図である。
【図５】図１に示した本発明の一実施形態による主記憶共有型マルチプロセッサに設定されるパーティションビットマップの構成例を示す図である。
【図６】あるプロセッサから１回目のリード要求が発行された場合の動作を説明する図である。
【図７】ある別のプロセッサから図６で説明したものと同一のアドレスのラインのリード要求が発行された場合の動作を説明する図である。
【図８】キャッシュ制御方式／接続方式について、トラフィック量／コストの観点からの評価を行ったものを示す図である。
【符号の説明】
【００７０】
１００ａ、１００ｂ  パーティション
１０１ａ〜１０１ｌ  主記憶装置
１０２ａ〜１０２ｌ  プロセッサ
１０３ａ〜１０３ｌ  キャッシュ
１０４ａ〜１０４ｄ  ノード制御装置
１０５ａ〜１０５ｄ  スヌープフィルタ
１０６ａ〜１０６ｄ  ノード
１０７ａ〜１０７ｌ  記憶制御装置
１０８  ネットワーク
２０６ａ〜２０６ｄ  パーティションビットマップ
【図１】
2008276654.tif 000003
【図２】
2008276654.tif 000004
【図３】
2008276654.tif 000005
【図４】
2008276654.tif 000006
【図５】
2008276654.tif 000007
【図６】
2008276654.tif 000008
【図７】
2008276654.tif 000009
【図８】
2008276654.tif 000010