(57)【特許請求の範囲】
【請求項１】
データを格納するメモリと、
前記データのコピーを格納するキャッシュメモリと、
少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するディレクトリ格納部と、
前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するディレクトリキャッシュ格納部と、
前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部であって、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納する制御部とを備える
ことを特徴とするコンピュータシステム。
【請求項２】
前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に必ず格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に格納しない
ことを特徴とする請求項１記載のコンピュータシステム。
【請求項３】
前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に必ず格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納する
ことを特徴とする請求項１記載のコンピュータシステム。
【請求項４】
前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部から溢れることを許容して前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に格納しない
ことを特徴とする請求項１記載のコンピュータシステム。
【請求項５】
当該コンピュータシステムが、更に、前記ディレクトリキャッシュ格納部を制御する制御情報を格納するレジスタを備え、
前記制御部が、前記レジスタに格納された前記制御情報に応じて、前記排他型で持ち出されたデータについてのディレクトリ情報及び前記共有型で持ち出されたデータについてのディレクトリ情報の前記ディレクトリキャッシュ格納部への格納の優先度のレベルを変更する
ことを特徴とする請求項１記載のコンピュータシステム。
【請求項６】
前記ディレクトリ情報が、前記データが前記キャッシュメモリにコピーされたことを示す情報のみを含む
ことを特徴とする請求項１記載のコンピュータシステム。
【請求項７】
データを格納するメモリと、
前記データのコピーを格納するキャッシュメモリと、
少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するディレクトリ格納部と、
前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するディレクトリキャッシュ格納部と、
前記キャッシュメモリにコピーされた全てのデータについて、それらのタグであるキャッシュタグを格納するタグコピーと、
前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部であって、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納し、前記ディレクトリキャッシュ格納部にヒットした場合、前記タグコピーに格納されたキャッシュタグをスヌープすることにより、前記ヒットしたディレクトリ情報に対応するデータを持ち出したキャッシュメモリを特定する制御部とを備える
ことを特徴とするコンピュータシステム。
【請求項８】
メモリが、データを格納するステップと、
キャッシュメモリが、前記データのコピーを格納するステップと、
ディレクトリ格納部が、少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するステップと、
ディレクトリキャッシュ格納部に、前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、
前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部が、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納するステップとを備える
ことを特徴とするコンピュータシステムの制御方法。
【請求項９】
メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部とを備えるコンピュータを制御するプログラムを格納するコンピュータ読取可能な記録媒体であって、
前記プログラムは、前記コンピュータに、
前記メモリが、データを格納するステップと、
前記キャッシュメモリが、前記データのコピーを格納するステップと、
前記ディレクトリ格納部が、少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するステップと、
前記ディレクトリキャッシュ格納部に、前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、
前記制御部が、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納するステップとを実行させるプログラムである
ことを特徴とする記録媒体。
【請求項１０】
メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部とを備えるコンピュータを制御するプログラムであって、
前記コンピュータに、
前記メモリが、データを格納するステップと、
前記キャッシュメモリが、前記データのコピーを格納するステップと、
前記ディレクトリ格納部が、少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するステップと、
前記ディレクトリキャッシュ格納部に、前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、
前記制御部が、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納するステップとを実行させる
ことを特徴とするコンピュータの制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリ型マルチプロセッサシステムのようなコンピュータシステム、制御方法、記録媒体及び制御プログラムに関する。
【背景技術】
【０００２】
共有メモリ型マルチプロセッサシステムにおいては、複数のプロセッサがメモリを共有する。従って、メモリ上の同一のデータブロックについて、複数のキャッシュメモリにそのコピーが同時存在しうる。そこで、キャッシュコヒーレンシーを保ちながらデータ処理を行うために、データブロックの状態を示す状態情報を管理する必要がある。【０００３】
データブロックの状態には、主として、共有（S;Shared）、更新されていない（clean）排他（E;Exclusive Clean）、更新済み（dirty）の排他（M;Modified）、無効（I;Invalid）がある。このようなＭ、Ｅ、Ｓ及びＩの４状態をもつキャッシュプロトコルは、ＭＥＳＩと呼ばれる。以下、共有を「Ｓ」又は「Shared」、更新されていない排他を「Ｅ」又は「Exclusive」、更新済みの排他を「Ｍ」又は「Modified」、無効を「Ｉ」又は「Invalid」と表す。【０００４】
状態Ｓは、処理対象のデータブロックがリード専用のデータブロックであり、参照しているプロセッサが処理対象のデータブロックを更新する権利を持たない状態である。処理対象のデータブロックと同一のデータブロックが、他のキャッシュメモリに存在する可能性がある。【０００５】
状態Ｅは、処理対象のデータブロックと同一のデータブロックが他のキャッシュメモリに存在せず、参照しているプロセッサが処理対象のデータブロックを更新する権利を持つ状態である。処理対象のデータブロックは、更新されておらず、メモリにある処理対象のデータブロックと一致する。【０００６】
状態Ｍは、処理対象のデータブロックと同一のデータブロックが他のキャッシュメモリに存在せず、参照しているプロセッサが処理対象のデータブロックを更新する権利を持つ状態である。処理対象のデータブロックは、更新済みであり、メモリにある処理対象のデータブロックと異なる内容である。従って、処理対象のデータブロックは、唯一の最新情報である。【０００７】
状態Ｉは、処理対象のデータブロックが有効な状態でキャッシュメモリに存在しない状態である。【０００８】
キャッシュメモリ内に持つデータブロックの状態情報は、通常、キャッシュメモリの各ラインに対応したエントリを持つキャッシュタグに登録される。【０００９】
例えば、あるプロセッサにおいてロード命令が実行される場合、ロードの対象となるデータブロックが状態Ｓでキャッシュメモリに存在するとする。この場合、プロセッサは、そのデータブロックをそのまま使用することができる。しかし、ストア命令を実行しようとしても、状態Ｓ即ちデータブロックの更新の権利が無い状態であるので、ストア命令の処理ができない。そこで、データブロックの状態を、状態Ｅ又は状態Ｍ即ち排他権を持つ状態にする必要がある。例えば、状態Ｓの場合、プロセッサは、処理対象のデータブロックを保持する１又は複数の他のキャッシュメモリに対して、当該他のプロセッサにおいて処理対象のデータブロックを無効化する要求を送信し、自身は排他型に遷移する。【００１０】
また、プロセッサがロード命令又はストア命令を実行する場合において、ロード等の対象となるデータブロックを全く持っていない場がある。この場合、プロセッサは、処理対象のデータブロックを取得する必要がある。しかし、メモリに存在するデータブロックが最新であるとは限らない。即ち、いずれかのキャッシュメモリが処理対象のデータブロックを状態Ｍで持つ可能性がある。この場合、キャッシュコヒーレンシーを保つために、プロセッサは、状態Ｍのデータブロックを探さなければならない。【００１１】
以上のように、キャッシュメモリのコヒーレント制御を効率よく実行するためには、処理対象のデータブロックがどのキャッシュメモリにどの状態で存在するかを知ることが重要である。このための方式として、スヌープ方式と、ディレクトリ方式とが知られている。【００１２】
ディレクトリ方式においては、１個のデータブロックの状態情報は、いずれかのノードで集中管理される。ノードは、プロセッサやメモリ及びそれらのコントローラを持つ単位である。ノードはさらにディレクトリ格納部を持ち、あるノードに属するメモリのデータブロックがどのキャッシュメモリにどのような状態で持ち出されたかという情報即ちディレクトリ情報を、ノード内で保持する。【００１３】
あるプロセッサが、あるデータブロックについてある要求を発行したとする。要求元のプロセッサの属するノードを「ローカルノード」と呼ぶ。また、処理対象のデータブロックを持つメモリが属するノードを「ホームノード」と呼ぶ。換言すれば、ホームノードは、処理対象のデータブロックを管理するディレクトリ格納部が存在するノードである。また、当該要求の結果として他のキャッシュメモリからの応答が発生する場合には、当該キャッシュメモリが属するノードを、「リモートノード」と呼ぶ。【００１４】
ディレクトリ格納部は、キャッシュメモリに持ち出された全てのデータブロックについての情報を持つ。そこには、どのキャッシュメモリがデータブロックを持ち出している（又はコピーしている）か、そのデータブロックは、書き換えの可能性があるか等の情報が格納される。書き換えの可能性とは、既に書き換えられていること、又は、これから書き換えられる予定であることを言う。【００１５】
ディレクトリ方式においては、データブロックを要求したプロセッサは、データブロックを管理するホームノードのディレクトリ格納部から、要求したデータブロックがどのキャッシュメモリにどのような状態で存在するのかを知る。データの要求を受けたホームノードは、ディレクトリ格納部からディレクトリ情報を取得して、必要な処理を行う。ディレクトリ格納部のエントリが各データブロックと一対一に対応している場合、ディレクトリ格納部は、メモリ上に設けられることが多い。ディレクトリ格納部のエントリがメモリ上の全てのデータブロックに対応するかは、実装に依存する。【００１６】
ディレクトリ方式においては、メモリのデータを、それを使用するプロセッサのできるだけ近くに割り付けるように、ソフトウェアのチューニングを施すことにより、プロセッサの性能を向上させることができる。あるプロセッサの要求するデータが、自己のノードのメモリに存在する場合、即ち、ローカルノードとホームノードとが一致する場合、要求及びデータをノード間で送受信する必要がない。このため、送受信に起因するレイテンシが発生せず、また、ネットワークの付加も小さくすることができる。【００１７】
また、あるデータブロックを複数のノードが使用するのはごく普通のことであり、ソフトウェアのチューニングを出来る限り施したとしても、複数のキャッシュメモリが同一のデータブロックを使用することは避けられないだろう。したがって、ローカルノードとホームノードとを完全に一致させることは非常に困難であると思われる。しかし、全てのノードの間の距離が均等ではなく、ノード間によって距離の差があるようなネットワーク構成においては、例え複数のノードが同一のデータブロックを使用する場合でも、距離の近いノードにプロセスを割り振りつつ、そのうちのひとつのノードにデータを置くようチューニングするなど、処理ノードとデータの距離を小さくすることで、処理を高速化することができる。【００１８】
しかし、メモリへのアクセスは、本質的に相当の時間を要する。このため、メモリ上のディレクトリ情報を読み出すのでは、ディレクトリアクセスにおけるレイテンシが、プロセッサの性能向上のボトルネックとなってしまう。実際には、メモリ上のディレクトリ情報を読み出して、対象となるノードを知り、当該ノードへ要求を送信するので、要求を処理するために非常に時間がかかる。更に、ディレクトリ格納部が他のノードの配下にある場合、より一層長い時間を要する。【００１９】
つまり、これは、例えば、図１５に示す場合に相当する。図１５は、リモートノードＲのキャッシュからデータを取得する場合を示す。換言すれば、ローカルノードＬからの要求により、ホームノードＨ（この場合、ローカルノードＬとは異なるノード）のディレクトリ格納部をアクセスした後、さらに別のリモートノードＲのキャッシュメモリをアクセスする場合である。一方、図１６は、ホームノードＨのメモリからデータを取得する場合を示す。図１５に示す場合は、図１６に示す場合と比較して、処理時間が非常に長くなるのである。【００２０】
そこで、ディレクトリ情報の一部の情報だけをもつディレクトリキャッシュ格納部を備え、ホームノードで高速な処理を行うようにすることが考えられる。ディレクトリ情報の一部をディレクトリキャッシュ格納部から高速に読み出せることは、ホームノードがローカルノードと異なる場合でも、高速化に効果的である。換言すれば、メモリにアクセスすることなく、他ノードヘの要求を送信することができるので、この分だけ処理が高速となる。【００２１】
例えば、統合ディレクトリ及びプロセッサキャッシュを備えたコンピュータシステムにおいて、キャッシュメモリサブシステム内に記録されたディレクトリエントリがModified、Exclusive、又はOwnedの状態でキャッシュされるラインを指示すると共に、ディレクトリエントリの不在が共有又は無効のいずれかでキャッシュされたことを示す技術が知られている。
【特許文献１】特表２００６−５０１５４６号公報
【発明の開示】
【発明が解決しようとする課題】
【００２２】
ディレクトリキャッシュ格納部としては、小容量かつ高速の記憶装置が使用される。このため、リプレース（又は書き換え）等の処理により、限られた容量のディレクトリキャッシュ格納部を使用する必要がある。しかし、ディレクトリキャッシュ格納部のリプレースが高い頻度で発生する場合、望むデータが既にリプレースで追い出されていたり、またリプレースの処理そのものにかかる時間によって処理が遅延したりすることが多発し、せっかくのディレクトリキャッシュも意味がなくなってしまう。従って、コンピュータシステムの全体の高速化のためには、ディレクトリキャッシュ格納部に処理時間短縮に効果のあるデータに絞って登録するものを減らすなど、真に必要とされるデータがリプレースで追い出される頻度をできる限り抑えて、ディレクトリキャッシュ格納部を効率良く利用することが必要である。【００２３】
本発明は、効率良くディレクトリキャッシュ格納部を使用することができるキャッシュコヒーレント制御を行うコンピュータシステムを提供することを目的とする。【００２４】
また、本発明は、効率良くディレクトリキャッシュ格納部を使用することができるキャッシュコヒーレント制御を行うコンピュータシステムの制御方法を提供することを目的とする。【００２５】
また、本発明は、効率良くディレクトリキャッシュ格納部を使用することができるキャッシュコヒーレント制御を行うコンピュータシステムの制御プログラムを格納したコンピュータ読取可能な記録媒体を提供することを目的とする。【００２６】
また、本発明は、効率良くディレクトリキャッシュ格納部を使用することができるキャッシュコヒーレント制御を行うコンピュータシステムの制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２７】
開示されるコンピュータシステムは、メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、制御部とを備える。メモリは、データを格納する。キャッシュメモリは、データのコピーを格納する。ディレクトリ格納部は、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納する。ディレクトリキャッシュ格納部は、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納する。制御部は、ディレクトリキャッシュへのデータの格納を制御する制御部であって、メモリからどこかのキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理する。制御部は、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くする。【００２８】
開示されるコンピュータシステムにおいては、例えば、前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納する。【００２９】
開示されるコンピュータシステムにおいては、例えば、前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に必ず格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に格納しない。【００３０】
開示されるコンピュータシステムにおいては、例えば、前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に必ず格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納する。【００３１】
開示されるコンピュータシステムにおいては、例えば、前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部から溢れることを許容して前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に格納しない。【００３２】
開示されるコンピュータシステムにおいては、例えば、当該コンピュータシステムが、更に、前記ディレクトリキャッシュ格納部を制御する制御情報を格納するレジスタを備え  前記制御部が、前記レジスタに格納された前記制御情報に応じて、前記排他型で持ち出されたデータについてのディレクトリ情報及び前記共有型で持ち出されたデータについてのディレクトリ情報の前記ディレクトリキャッシュ格納部への格納の優先度のレベルを変更する。【００３３】
開示されるコンピュータシステムにおいては、例えば、前記ディレクトリ情報が、前記データが前記キャッシュメモリにコピーされたことを示す情報のみを含む。【００３４】
開示されるコンピュータシステムは、メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、タグコピーと、制御部とを備える。メモリは、データを格納する。キャッシュメモリは、データのコピーを格納する。ディレクトリ格納部は、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納する。ディレクトリキャッシュ格納部は、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納する。タグコピーは、キャッシュメモリにコピーされた全てのデータについて、それらのタグであるキャッシュタグを格納する。制御部は、ディレクトリキャッシュ格納部へのデータの格納を制御する制御部であって、メモリからキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理する。制御部は、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くする。制御部は、ディレクトリキャッシュ格納部にヒットした場合、タグコピーに格納されたキャッシュタグをスヌープすることにより、ヒットしたディレクトリ情報に対応するデータを持ち出したキャッシュメモリを特定する。【００３５】
開示されるコンピュータシステムの制御方法は、メモリが、データを格納するステップと、キャッシュメモリが、データのコピーを格納するステップと、ディレクトリ格納部が、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納するステップと、ディレクトリキャッシュ格納部に、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、ディレクトリキャッシュ格納部へのデータの格納を制御する制御部が、メモリからキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くするステップとを備える。【００３６】
開示されるコンピュータシステムの制御プログラムの記録媒体は、メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、ディレクトリキャッシュ格納部へのデータの格納を制御する制御部とを備えるコンピュータを制御するプログラムを格納するコンピュータ読取可能な記録媒体である。プログラムは、コンピュータに、メモリが、データを格納するステップと、キャッシュメモリが、データのコピーを格納するステップと、ディレクトリ格納部が、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納するステップと、ディレクトリキャッシュ格納部に、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、制御部が、メモリからキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くするステップとを実行させる。【００３７】
開示されるコンピュータシステムの制御プログラムは、メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、ディレクトリキャッシュ格納部へのデータの格納を制御する制御部とを備えるコンピュータを制御する。制御プログラムは、メモリが、データを格納するステップと、キャッシュメモリが、データのコピーを格納するステップと、ディレクトリ格納部が、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納するステップと、ディレクトリキャッシュ格納部に、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、制御部が、メモリからキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くするステップとを実行させる。
【発明の効果】
【００３８】
開示されるコンピュータシステム、その制御方法、その制御プログラムの記録媒体、その制御プログラムによれば、ディレクトリキャッシュ格納部である記憶装置は、排他型の持ち出し情報を優先的に登録することで、本来であれば長い時間を必要とする処理の時間を効率的に短縮し、キャッシュコヒーレント制御を効率良く実行して、キャッシュとしての役割を果たすことができる。従って、限られた容量のディレクトリキャッシュ格納部を効率良く利用することができ、ディレクトリキャッシュ格納部を含むコンピュータシステムの全体の高速化を図ることができる。
【図面の簡単な説明】
【００３９】
【図１】コンピュータシステムの構成を示す図である。
【図２】コントローラが実行する処理を説明する図である。
【図３】コントローラが実行するディレクトリキャッシュの登録処理フローである。
【図４】コントローラの構成を示す図である。
【図５】ディレクトリのエントリ構造を示す図である。
【図６】ディレクトリのエントリ構造の実施例を示す図である。
【図７】メモリリードの動作を示す図である。
【図８】キャッシュリードの動作を示す図である。
【図９】共有型リードの処理フローを示す図である。
【図１０】メモリリードの動作を示す図である。
【図１１】排他型リードの処理フローを示す図である。
【図１２】共有型優先追い出しの処理フローを示す図である。
【図１３】コンピュータシステムの他の構成を示す図である。
【図１４】コンピュータシステムの更に他の構成を示す図である。
【図１５】データの取得経路による処理時間を説明する図である。
【図１６】データの取得経路による処理時間を説明する図である。
【図１７】共有型要求の状態を示す図である。
【図１８】排他型要求の状態を示す図である。
【符号の説明】
【００４０】
１    ノード
２    Ｉ／Ｏ装置
３    全体制御装置
１１    プロセッサ
１２    コントローラ
１３    ディレクトリキャッシュ
１４    メモリ
１５    ディレクトリ
１６    Ｉ／Ｏ制御部
１７    レジスタ
１１１    キャッシュメモリ
１２１    メモリバッファ
１２２    ディレクトリ情報バッファ
１２３    メモリ要求バッファ
１２４    ヒット判定回路
【発明を実施するための最良の形態】
【００４１】
前述したように、コンピュータシステムの全体の高速化のためには、ディレクトリキャッシュ格納部を効率良く利用することが必要である。そこで、本発明者は、効率良くディレクトリキャッシュ格納部を使用するために、ディレクトリキャッシュ格納部に登録する情報を制限することを検討した。【００４２】
プロセッサから発行されるデータの新規の取得要求は、共有型要求と排他型要求とに大別される。更に、取得対象となるデータの、キャッシュメモリヘ持ち出され状況によって、以下のように細分化することができる。【００４３】
共有型要求は、更に、図１７に示すように、３つの状態に分けられる。【００４４】
共有型要求の第１の状態は、図１７（Ａ）に示すように、ローカルノードＬが要求するデータブロックが、あるキャッシュメモリ（リモートノードＲのキャッシュメモリ）で書き換えられている可能性のある状態、即ち、要求するデータブロックが既に排他型で、あるキャッシュメモリに持ち出された状態である。換言すれば、共有型要求の第１の状態は、要求するデータが排他型でリモートノードＲに持ち出されている場合である。従って、リモートノードＲが、そのキャッシュメモリに、排他型で最新データを保持している。この場合、該キャッシュメモリから最新データブロックを取得する必要がある。また、必要に応じて該キャッシュメモリの該データブロックを無効にする必要がある。つまり、共有型要求の第１の状態は、ホームノードＨのディレクトリにアクセスした後、リモートノードＲのキャッシュにアクセスすることが必須であり、処理時間が非常に長くなる状態である。【００４５】
なお、あるノードから他のノードのキャッシュメモリに排他型で持ち出されたデータ（又はデータブロック）を、「排他型で持ち出されたデータ」という。【００４６】
共有型要求の第２の状態は、図１７（Ｂ）に示すように、ローカルノードＬが要求するデータブロックが、あるキャッシュメモリ（リモートノードＲのキャッシュメモリ）に持ち出されているが、書き換えられる可能性のない状態である。換言すれば、共有型要求の第２の状態は、要求するデータが共有型でリモートノードＲに持ち出されている場合である。従って、リモートノードＲが、そのキャッシュメモリに、共有型で最新データを保持している。この場合、要求するデータブロックをメモリから取得することができる。つまり、共有型要求の第２の状態は、ホームノードＨへのアクセスだけが必要で、リモートノードＲへのアクセスを必要としない。【００４７】
なお、あるノードから他のノードのキャッシュメモリに共有型で持ち出されたデータ（又はデータブロック）を、「共有型で持ち出されたデータ」という。【００４８】
共有型要求の第３の状態は、図１７（Ｃ）に示すように、ローカルノードＬが要求するデータブロックが、いずれのキャッシュメモリにも持ち出されていない状態である。換言すれば、共有型要求の第３の状態は、要求するデータがいずれのノードにも持ち出されていない場合である。従って、ホームノードＨが、そのメモリ又はキャッシュメモリに、データを保持している。つまり、共有型要求の第３の状態の場合も、要求するデータブロックをメモリから取得することができる。この場合も、リモートノードＲへのアクセスは発生しない。【００４９】
排他型要求は、更に、図１８に示すように、３つの状態に分けられる。【００５０】
排他型要求の第１の状態は、図１８（Ａ）に示すように、ローカルノードＬが要求するデータブロックが、あるキャッシュメモリ（リモートノードＲのキャッシュメモリ）で書き換えられている可能性のある状態、即ち、要求するデータブロックが既に排他型であるキャッシュメモリに持ち出された状態である。換言すれば、排他型要求の第１の状態は、要求するデータが排他型でリモートノードＲに持ち出されている場合である。従って、リモートノードＲが、そのキャッシュメモリに、排他型で最新データを保持している。この場合、該キャッシュメモリから最新データブロックを取得する必要がある。また、必要に応じて該キャッシュメモリの該データブロックを無効にする必要がある。つまり、排他型要求の第１の状態は、ホームノードＨのディレクトリにアクセスした後、リモートノードＲのキャッシュにアクセスすることが必須であり、処理時間が非常に長くなる状態である。【００５１】
排他型要求の第２の状態は、図１８（Ｂ）に示すように、ローカルノードＬが要求するデータブロックが、あるキャッシュメモリ（リモートノードＲのキャッシュメモリ）に持ち出されたが、書き換えられる可能性のない状態である。換言すれば、共有型要求の第２の状態は、要求するデータが共有型でリモートノードＲに持ち出されている場合である。従って、リモートノードＲが、そのキャッシュメモリに、共有型で最新データを保持している。この場合、要求するデータブロックをメモリから取得することができるが、該キャッシュメモリの該データブロックを無効にする必要がある。つまり、排他型要求の第２の状態では、ホームノードＨのディレクトリにアクセスした後、リモートノードＲのキャッシュにアクセスすることは必要であるが、データそのものはホームノードＨへのアクセスだけで取得できる。【００５２】
排他型要求の第３の状態は、図１８（Ｃ）に示すように、ローカルノードＬが要求するデータブロックが、キャッシュメモリに持ち出されていない状態である。換言すれば、共有型要求の第３の状態は、要求するデータがいずれのノードにも持ち出されていない場合である。従って、ホームノードＨが、そのメモリ又はキャッシュメモリに、データを保持している。この場合、要求するデータブロックをメモリから取得することができる。つまり、排他型要求の第３の状態では、リモートノードＲへのアクセスは発生しない。【００５３】
以上から判るように、共有型新規要求及び排他型新規要求ともに、新規の要求データは、要求するデータブロックが既に排他型でメモリから持ち出されている場合を除いて、ホームノードＨのメモリから取得することができる。この場合、メモリからのデータの取得と同時にディレクトリ情報を読み出しても、処理の高速化には何ら支障とならない。この時、ディレクトリ情報は、メモリ又はメモリと同程度の読み出し速度の記憶装置に存在すれば良い。【００５４】
換言すれば、ホームノードＨにアクセスした後に、リモートノードＲのキャッシュメモリから最新データを取得する必要があるのは、要求するデータブロックが排他型で持ち出されている場合のみである。この場合に、ホームノードＨのメモリ上に存在する遅いディレクトリ格納部を読取った後に、リモートノードＲのキャッシュメモリにアクセスするのは非効率である。従って、この場合は、速度の遅いメモリ上に存在するディレクトリ情報を読取るのではなく、速度の速いディレクトリキャッシュ格納部を使用するのが得策である。【００５５】
以上から、ディレクトリキャッシュ格納部の使用は、基本的には、排他型でメモリから持ち出されたデータブロックについてのみに制限する。これにより、少ない容量のディレクトリキャッシュ格納部を効率的に使用することができると共に、プロセッサが他のキャッシュから最新データを取得する必要がある場合について、高速で最新データブロックを取得することができる。【００５６】
次に、以上のようにディレクトリキャッシュ格納部の使用を制限した場合における、共有型要求の処理について検討する。【００５７】
例えば、プロセッサからのデータ取得要求が共有型である場合において、他のキャッシュメモリにアクセスする必要が生じるのは、処理対象のデータブロックが他のキャッシュメモリに排他型で持ち出された場合のみである。【００５８】
逆に、プロセッサからのデータ取得要求が排他型であり、かつ、処理対象のデータブロックが他のキャッシュメモリに既に共有型で持ち出された場合には、キャッシュメモリの無効化の要求を発行する必要がある。また、キャッシュメモリの無効化の要求を発行するために、この発行に先立って、ディレクトリ格納部から、持ち出し情報を読み出す必要がある。しかし、逆に言えば、無効化処理のみが必要であって、データブロック自体は、メモリから取得することができる。従って、データ取得要求の実行には、何ら支障はない。【００５９】
なお、持ち出し情報は、図５を参照して後述するように、データブロックの持ち出され状態を示す情報であって、ディレクトリ情報の一部である。【００６０】
次に、以上のようにディレクトリキャッシュ格納部の使用を制限した場合における、ディレクトリ格納部の必要性について検討する。【００６１】
ディレクトリキャッシュ格納部に登録されているべき排他型の持ち出し情報が、リプレースによって追い出された場合、競合性のディレクトリミスが発生する。しかし、この場合でも、全ての情報をもつディレクトリ格納部を備えることにより、必要な情報を取得することができる。この場合、アクセス速度は低下するが、ディレクトリ格納部をアクセスすることにより、要求を処理することに支障はない。従って、前述したように、以上のようにディレクトリキャッシュ格納部の使用を制限した場合に予想される、競合性のディレクトリミスを容易に解決するために、ディレクトリキャッシュ格納部とは別に、全ての情報をもつディレクトリ格納部が設けられる。【００６２】
一方、ディレクトリキャッシュ格納部における追い出し（Eviction）は、容量の少ないディレクトリキャッシュ格納部を効率良く使用するには、重要な課題である。例えば、ディレクトリキャッシュ格納部がすでにフルとなった状態で新たなエントリの登録が必要となった湯合、いずれかのデータ（ディレクトリ）を、ディレクトリキャッシュ格納部から追い出す必要がある。しかし、持ち出された全ブロックの情報を持つことが可能なディレクトリ格納部（フルディレクトリ）を設けることにより、ディレクトリの追い出しは容易に処理することができる。【００６３】
具体的には、ライトスルー方式のディレクトリキャッシュ格納部においては、常にディレクトリ格納部に同一のエントリが存在する。従って、新たなエントリでいずれかのエントリを上書きすれば良い。また、ライトバック方式のディレクトリキャッシュ格納部においては、追い出されたエントリをディレクトリ格納部に書き込むだけで良い。【００６４】
しかし、ディレクトリ格納部が存在しない場合には、ディレクトリ情報が失われても問題が起きないように、他の処理を実行する必要が生じる。例えば、キャッシュコピーを持つノードに対して、データの破棄とメモリへのライトバックを要求し、この処理を完了させなければならない。従って、追い出しが高い頻度で発生すれば、プロセッサの間における通信トラフィックが増大して、結果として、プロセッサの性能低下を招く。【００６５】
次に、以上のようにディレクトリキャッシュ格納部の使用を制限した場合における、共有型で持ち出されたデータブロックの処理について検討する。【００６６】
共有型で持ち出されたデータブロックについて、何ら情報を持たないということは不可能である。例えば、共有型で持ち出されたデータブロックを排他型で取得したい場合がある。この場合、共有型で持ち出されたデータブロックの情報が無ければ、共有型で持ち出されたデータブロックを知る手段が無く、これを無効化することができない。従って、キャッシュコヒーレンシーを保つことができない。【００６７】
この場合、共有型で持ち出されたデータブロックを持つノードを、キャッシュメモリのスヌープにより探すことが考えられる。しかし、この場合でも、データブロックが持ち出されたという情報は、最低限必要である。データブロックが持ち出されたという情報が存在しない場合、共有型で持ち出されたデータブロックをどのノードが持っているかを確認するだけのために、全てのキャッシュメモリをスヌープしなければならない。【００６８】
前述したように、基本的には、共有型で持ち出されたデータブロックの持ち出し情報は、ディレクトリキャッシュ格納部には格納されない。追い出しが発生する頻度を抑え、プロセッサ間の通信トラフィックの増大を抑えるためである。【００６９】
しかし、例えばコンピュータシステムを起動して間もない期間等においては、ディレクトリキャッシュ格納部のエントリに十分余裕があると考えられる。この場合、共有型で持ち出されたデータブロックの持ち出し情報をディレクトリキャッシュ格納部に登録しても、殆ど追い出しは発生しないと考えられる。むしろ、この場合、プロセッサが他のキャッシュメモリからデータブロックを取得する方が、メモリからデータブロックを取得するよりも速い可能性もある。また、無効化の要求が必要な場合、無効化の要求をより早く発行することができる。【００７０】
そこで、ディレクトリキャッシュ格納部には、共有型で持ち出されたデータブロックの持ち出し情報は、基本的には格納しないが、全く格納しないのではなく、ディレクトリキャッシュ格納部に空きがある場合には格納するようにしても良い。換言すれば、格納状態において、排他型で持ち出されたデータブロックの持ち出し情報が、共有型で持ち出されたデータブロックの持ち出し情報よりも優先的に格納されるようにすれば良い。また、リプレース時において、ディレクトリキャッシュ格納部に所定の割合よりも多く持ち出し情報が格納された場合、共有型で持ち出されたデータブロックの持ち出し情報が、排他型で持ち出されたデータブロックの持ち出し情報よりも優先的に追い出されるようにすれば良い。【００７１】
一方、排他型で持ち出されたデータブロックの持ち出し情報を全てディレクトリキャッシュ格納部に格納する場合、ディレクトリの追い出しは、以下のように考えられる。即ち、排他型のエントリを追い出したい場合には、排他型でデータブロックを持つプロセッサに対して、ディレクトリキャッシュ格納部にある情報を用いて、メモリヘの処理対象のデータブロックのライトバック要求を発行しなければならない。しかし、共有型でデータブロックを持つプロセッサに対してまで、ライトバック要求を発行する必要はない。従って、排他型で持ち出されたデータブロックの持ち出し情報を全てディレクトリキャッシュ格納部に格納するだけでも、追い出しの発生の頻度の削減には、十分効果がある。【００７２】
以上をまとめると、以下のようになる。即ち、ディレクトリキャッシュ格納部を効率的に使用するために、ディレクトリキャッシュ格納部への登録の対象が減らされる。このために、登録しなくても支障がないディレクトリ情報が、登録されないか、又は、優先的に追い出される。【００７３】
登録しなくても支障がないディレクトリ情報とは、共有型で持ち出されたデータブロックのディレクトリ情報である。これは、以下の理由による。即ち、共有型で持ち出されたデータブロックは、他のキャッシュメモリにアクセスする必要がなく、メモリから直接データを得れば良い。従って、メモリアクセスとディレクトリアクセスとを同時に行って、必要なデータとディレクトリ情報とを並列に取得し、かつ、データがキャッシュメモリに持ち出されていないことを確認すれば良い。【００７４】
一方、排他型で持ち出されたデータブロックの持ち出しは、他のキャッシュメモリヘのアクセスを発生させる。従って、できるだけ早く、持ち出し情報を知る必要がある。このため、排他型で持ち出されたデータブロックの持ち出し情報は、ディレクトリキャッシュ格納部に、必ず登録されるか、又は、優先的に登録される。【００７５】
以上の理由で、ディレクトリ格納部とディレクトリキャッシュ格納部と双方が設けられる。ディレクトリキャッシュ格納部に、排他型で持ち出されたデータブロック及び共有型で持ち出されたデータブロックの持ち出し情報が存在しなくても、キャッシュシステムは正常に動作する。特に、共有型で持ち出されたデータブロックの持ち出し情報は、ディレクトリ格納部を参照すれば、十分である。【００７６】
（第１の実施態様）
この実施態様では、ディレクトリキャッシュ格納部に加えてディレクトリが設けられ、かつ、ディレクトリキャッシュ格納部へのデータブロックの持ち出し情報の登録について以下のプロトコルが設定される。即ち、排他型で持ち出されたデータブロックの持ち出し情報は優先的に登録する。共有型で持ち出されたデータブロックの持ち出し情報は、ディレクトリキャッシュ格納部に空きがあれば、登録する。【００７７】
図１は、本発明の一実施態様によるコンピュータシステムの構成を示す図である。図２は、図１に示すコントローラが実行する処理を説明する図である。【００７８】
コンピュータシステムは、複数のノード１と、複数のＩ／Ｏ（Input/Output）装置２とを備える。ノード１は、ネットワークを介して、他のノード１と相互に接続される。複数のノード１は、これらの間でデータの送受信を行う。各ノード１に対応して、Ｉ／Ｏ装置２が設けられる。Ｉ／Ｏ装置２は、例えばハードディスク等の入出力装置である。【００７９】
複数のノード１は同一の構成を備える。各ノード１は、プロセッサ１１と、コントローラ１２と、ディレクトリキャッシュ格納部１３と、メモリ１４と、ディレクトリ格納部１５と、Ｉ／Ｏ制御部１６とを備える。プロセッサ１１は、キャッシュメモリ１１１を備える。【００８０】
なお、前述したように、あるプロセッサが、あるデータブロックについてある要求を発行したとする。要求元のプロセッサの属するノードを「ローカルノード」と呼ぶ。また、処理対象のデータブロックを持つメモリが属するノードを「ホームノード」と呼ぶ。換言すれば、ホームノードは、処理対象のデータブロックを管理するディレクトリ格納部が存在するノードである。また、当該要求の結果として他のキャッシュメモリからの応答が発生する場合には、当該キャッシュメモリが属するノードを、「リモートノード」と呼ぶ。【００８１】
プロセッサ１１は、メモリ１４に存在するプログラムを実行する。このために、プロセッサ１１は、コントローラ１２を介して、メモリアドレスを指定して、メモリ１４を参照する。また、プロセッサ１１は、コントローラ１２を介して、他のノード１のプロセッサ１１との間でデータの送受信を行う。更に、プロセッサ１１は、コントローラ１２を介して、メモリ１４へデータを書込み、また、メモリ１４からデータを読み出す。【００８２】
メモリ１４は、プロセッサ１１がデータ１４１を格納するための主記憶装置である。メモリ１４は、プログラムを含むデータ１４１を格納する。メモリ１４が格納するデータ１４１は、複数のデータブロックを含む。データブロックは、メモリ１４における書き込み及び読み出しのようなアクセスの単位である。「データブロック」は、データ１４１の一部を構成するデータであり、また、メモリ１４においてデータブロックを格納する記憶領域である。【００８３】
メモリ１４は、複数のノード１により共有される。実際には、１個のメモリ１４における複数のデータブロックが、予め各ノード１に割当てられる。換言すれば、ノード１毎に、各々が使用する複数のデータブロックが予め定められる。【００８４】
キャッシュメモリ１１１は、メモリ１４に格納されたデータ１４１のコピーを格納する。メモリ１４のデータブロックがキャッシュメモリ１１１にコピーされたことを、「データブロックが持ち出された」という。【００８５】
キャッシュメモリ１１１は、メモリ１４よりも小容量かつ高速のメモリである。キャッシュメモリ１１１は、自ノード１のメモリ１４のデータブロックだけでなく、他ノード１のメモリ１４のデータブロックも格納する。換言すれば、自ノード１のキャッシュメモリ１１１は、他のノード１から持ち出したデータブロックを格納する。【００８６】
ディレクトリ格納部１５は、メモリ１４に格納されたデータ１４１についてのディレクトリ情報（図２においては「情報」と表示）１５１を格納する。ディレクトリ情報１５１は、どのキャッシュがどのような状態のデータを持ち出したかを管理する情報である。従って、ディレクトリ情報１５１は、データブロックのコピーを所有するキャッシュメモリ１１１を指示する。ディレクトリ情報１５１は、少なくとも、データがキャッシュメモリ１１１にコピーされたこと即ち持ち出されたことを示す情報を含む。【００８７】
ディレクトリ格納部１５は、ディレクトリ情報１５１を格納する記憶領域であり、例えば、メモリ１４である記憶装置と同様の速度で動作する記憶装置である。なお、ディレクトリ格納部１５が、メモリ１４に設けられるようにしても良い。【００８８】
ディレクトリ格納部１５は、メモリ１４と同様に、複数のノード１により共有される。実際には、１個のディレクトリ格納部１５における複数のエントリが、予め各ノード１に割当てられる。換言すれば、ノード１毎に、各々が使用する複数のエントリが予め定められる。なお、後述するように、ディレクトリ格納部１５は、フルディレクトリである。【００８９】
ディレクトリキャッシュ格納部１３は、ディレクトリ格納部１５のディレクトリ情報１５１の一部を格納する記憶領域である。ディレクトリキャッシュ格納部１３は、ディレクトリ格納部１５に格納されたディレクトリ情報１５１のコピー（図２においては「情報」と表示）１３１を格納する。【００９０】
ディレクトリキャッシュ格納部１３は、例えば、ディレクトリ格納部１５である記憶装置よりも小容量でかつ高速であって、キャッシュメモリ１１１である記憶装置と同様の速度で動作する記憶装置である。ディレクトリキャッシュ格納部１３は、ディレクトリ格納部１５よりも小容量であるので、ディレクトリ格納部１５のディレクトリ情報１５１の全てを格納することはできない。【００９１】
コントローラ１２は、プロセッサ１１からの要求に応じて、ディレクトリキャッシュ格納部１３、メモリ１４、ディレクトリ格納部１５にアクセスする。即ち、コントローラ１２は、データを、メモリ１４に格納し（又は書き込み）又はメモリ１４から読み出す。コントローラ１２は、ディレクトリ情報１５１を、ディレクトリ格納部１５に格納し（又は書き込み）又はディレクトリ格納部１５から読み出す。【００９２】
コントローラ１２は、プロセッサ１１からの要求に応じて、Ｉ／Ｏ制御部１６を介して、Ｉ／Ｏ装置２を制御する。Ｉ／Ｏ制御部１６は、コントローラ１２を介して、プロセッサ１１からの要求を受信して、Ｉ／Ｏ装置２との間においてデータを送受信する。【００９３】
コントローラ１２は、プロセッサ１１からの要求に応じて、他のノード１のコントローラ１２とネットワークを介して通信を行うことによって、データの送受信を行う。具体的には、複数のノード１は、種々の要求やメモリ１４に存在するデータブロックを、相互に送受信する。これにより、メモリ１４は複数のノード１により共有される。【００９４】
コントローラ１２は、キャッシュメモリ１１１にコピーされたデータを、排他型と共有型とに分けて管理する。また、コントローラ１２は、排他型で持ち出されたデータについてのディレクトリ情報１５１のディレクトリキャッシュ格納部１３への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報１５１のディレクトリキャッシュ格納部１３への格納の優先度よりも高くする。【００９５】
具体的には、第１の実施態様においては、コントローラ１２は、図３（Ａ）に示す処理を実行する。図３（Ａ）は、図１に示すコントローラが実行するディレクトリキャッシュの登録処理フローである。【００９６】
キャッシュメモリ１１１へのデータの持ち出しが発生すると（ステップＳ１）、コントローラ１２は、当該持ち出しが排他型での持ち出しか否かを調べる（ステップＳ２）。当該持ち出しが排他型での持ち出しである場合（ステップＳ２  ＹＥＳ）、コントローラ１２は、当該排他型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１を、ディレクトリキャッシュ格納部１３に格納する（ステップＳ４）。当該持ち出しが排他型での持ち出しでない場合、換言すれば、当該持ち出しが共有型での持ち出しである場合（ステップＳ２  ＮＯ）、コントローラ１２は、更に、ディレクトリキャッシュ格納部１３に空きがあるか否かを調べる（ステップＳ３）。ディレクトリキャッシュ格納部１３に空きがある場合（ステップＳ３  ＹＥＳ）、ステップＳ４を実行する。これにより、共有型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１が、ディレクトリキャッシュ格納部１３に格納される。ディレクトリキャッシュ格納部１３に空きがない場合（ステップＳ３  ＮＯ）、処理を終了する。【００９７】
以上の処理の結果、コントローラ１２は、排他型で持ち出されたデータについてのディレクトリ情報１５１を共有型で持ち出されたデータについてのディレクトリ情報１５１よりも優先的にディレクトリキャッシュ格納部１３に格納する。また、コントローラ１２は、共有型で持ち出されたデータについてのディレクトリ情報１５１を、ディレクトリキャッシュ格納部１３に空きがある場合に、ディレクトリキャッシュ格納部１３に格納する。【００９８】
これにより、ディレクトリキャッシュ格納部１３を検索してヒットしない場合、ホームノードのメモリからデータを取得し、取得したデータをそのまま使用することができる。ディレクトリキャッシュ格納部１３を検索してヒットした場合、ディレクトリキャッシュ格納部１３上の持ち出し情報に基づいて、直ちにキャッシュメモリ１１１にアクセスしてデータを取得することができる。従って、ディレクトリキャッシュ格納部１３を用いて、排他権を持ったキャッシュへのデータの持ち出しを、高速に知ることができ、キャッシュを非常に良い効率で使用することができる。【００９９】
このように、全ての持ち出し情報を持つディレクトリ格納部１５とディレクトリキャッシュ格納部１３の双方が設けられ、かつ、ディレクトリキャッシュ格納部１３に登録する情報が限定される。これにより、大容量を碓保することのできないディレクトリキャッシュ格納部１３についても、リプレース等によってディレクトリ格納部１５の利用に支障を生じること無く、要求元のプロセッサがキャッシュの状態情報を効率良く取得することができる。この結果、コンピュータシステムをより高速化することができる。【０１００】
前述したように、排他型でキャッシュに持ち出されたデータを取得する際には、ホームノードのメモリからではなく持ち出したキャッシュからのデータ取得を必要とする。しかし、ホームノードにある大容量のディレクトリを調べた後にリモートノードのキャッシュアクセスを行っていては、処理時間が長大になる。そこで、排他型で持ち出されたデータについての情報をディレクトリキャッシュ格納部１３に置く。これにより、処理時間の大幅な短縮が可能となる。データが排他型で持ち出されていない場合には、ホームノードのメモリから直接データを取得することが可能であるため、ディレクトリキャッシュ登録の優先度は下げることができる。【０１０１】
次に、ディレクトリ格納部１５及びディレクトリキャッシュ格納部１３について説明する。【０１０２】
コントローラ１２は、ディレクトリ格納部１５を用いて、メモリ１４の内部状態を管理する。データがメモリ１４からキャッシュメモリ１１１に持ち出された場合、コントローラ１２は、ディレクトリ格納部１５に、データが持ち出されたことを示す情報を設定する。この情報としては、例えば、ディレクトリ格納部１５のエントリにおける所定の１ビットが用いられる。具体的には、当該エントリの有効性を示すビット（バリッドビット）が用いられる。【０１０３】
また、コントローラ１２は、書き込みが可能となる排他権を取得しつつ持ち出されたことを示す情報、又は、書き込みができない共有状態で持ち出されたことを示す情報（状態情報）を、ディレクトリ格納部１５に設定する。この状態情報としては、例えば、ディレクトリ格納部１５のエントリにおける所定の２ビットが用いられる。具体的には、当該２ビットが「００」である場合にはinvalid（持ち出されなし）を示す。当該２ビットが「１０」である場合には共有型で持ち出されていることを示す。当該２ビットが「１１」である場合には排他型で持ち出されていることを示す。【０１０４】
コントローラ１２は、ディレクトリ格納部１５に、いずれのキャッシュメモリ１１１にそのデータが持ち出されたかを示す情報を設定する。この情報としては、例えば、ディレクトリ格納部１５のエントリにおける所定の１ビットが用いられる。【０１０５】
図４は、図１に示すコントローラの構成の一例を示す図である。【０１０６】
コントローラ１２は、図４に示すように、例えば、メモリバッファ１２１と、ディレクトリ情報バッファ１２２と、メモリ要求バッファ１２３と、ヒット判定回路１２４とを備える。【０１０７】
メモリ要求バッファ１２３は、プロセッサ１１から、メモリアドレスＡと共にメモリ１４のリード要求を受信する。これに応じて、メモリ要求バッファ１２３は、メモリアドレスＡを用いてディレクトリキャッシュ格納部１３を検索する。メモリ要求バッファ１２３は、検索結果をヒット判定回路１２４に入力する。【０１０８】
ヒット判定回路１２４は、ディレクトリキャッシュ格納部１３から入力された検索結果に基づいて、アドレスＡがヒット（キャッシュヒット）したか否かを判定する。ヒット判定回路１２４は、判定結果をメモリ要求バッファ１２３に入力する。【０１０９】
ヒット判定回路１２４から入力された判定結果がキャッシュヒットである場合、メモリ要求バッファ１２３は、他ノード１のプロセッサ１１に、データのリード要求を転送し、必要に応じて無効化要求を送信する。【０１１０】
一方、ヒット判定回路１２４から入力された判定結果がキャッシュヒットでない場合、メモリ要求バッファ１２３は、メモリアドレスＡを用いてメモリ１４にアクセスして、データブロックを読み出す。読み出されたデータブロックは、メモリバッファ１２１に一時的に保持される。これと並行して、メモリ要求バッファ１２３は、メモリアドレスＡを用いてディレクトリ格納部１５にアクセスして、ディレクトリ情報１５１を読み出す。読み出されたディレクトリ情報１５１は、ディレクトリ情報バッファ１２２に一時的に保持される。【０１１１】
この後、ディレクトリ情報バッファ１２２のディレクトリ情報１５１が、メモリ要求バッファ１２３に入力される。メモリ要求バッファ１２３は、ディレクトリ情報バッファ１２２から受信したディレクトリ情報１５１に基づいて、ディレクトリ更新情報即ち新しいディレクトリ情報１５１を生成する。更に、メモリ要求バッファ１２３は、生成したディレクトリ更新情報を、ディレクトリ情報バッファ１２２を介して、ディレクトリ格納部１５に格納する。これにより、ディレクトリ格納部１５のディレクトリ情報１５１が更新される。これと並行して、メモリ要求バッファ１２３は、生成したディレクトリ更新情報により、ディレクトリキャッシュ格納部１３のディレクトリ情報１５１のコピー１３１を更新する。【０１１２】
ディレクトリ情報バッファ１２２のディレクトリ情報１５１は、メモリバッファ１２１に入力される。これに応じて、メモリバッファ１２１は、メモリ１４から読み出されたデータブロックを、メモリリードデータとしてプロセッサ１１に送信する。【０１１３】
図５は、ディレクトリ格納部１５及びディレクトリキャッシュ格納部１３のエントリ構造の一例を示す図である。【０１１４】
ディレクトリ格納部１５は、複数のエントリを備える。エントリは、メモリ１４の読み出しの単位即ちデータブロックに１対１に対応する。換言すれば、ディレクトリ格納部１５は、メモリ１４の複数のデータブロックの全てについて、対応するエントリを備える。従って、ディレクトリ格納部１５はフルディレクトリである。【０１１５】
ディレクトリ格納部１５のエントリは、ディレクトリ情報１５１を格納する。ディレクトリ情報１５１は、例えば、持ち出し場所を示す情報（以下、位置情報とも言う）と、持ち出され状態（持ち出し状態とも言う）とを含む。位置情報は、例えば、持ち出した先のキャッシュメモリの位置情報である。持ち出され状態は、例えば、共有型、排他型、又は、持ち出し無しのいずれかである。エントリにより、対応するデータブロックが定まる。従って、コントローラ１２は、どのエントリにどのようなディレクトリ情報１５１が格納されているかに基づいて、どのデータブロックがどのような状態でどのキャッシュメモリ１１１に持ち出されたかを知る。【０１１６】
ディレクトリキャッシュ格納部１３のエントリは、アドレスタグに対応して、キャッシュメモリ１１１に持ち出されたディレクトリ格納部１５のディレクトリ情報１５１のコピー１３１を格納する。但し、実際には、図５のディレクトリキャッシュ格納部１３のエントリは、位置情報を格納し、持ち出され状態は格納しない。従って、ディレクトリキャッシュ格納部１３は、ディレクトリ格納部１５のディレクトリ情報１５１の一部のコピー１３１を格納する。【０１１７】
図６は、ディレクトリ格納部１５及びディレクトリキャッシュ格納部１３のエントリ構造の他の一例を示す図である。【０１１８】
図６のディレクトリ格納部１５は、図５のディレクトリ格納部１５と同一の構成を備え、図５のディレクトリ格納部１５と同一のディレクトリ情報１５１を格納する。図６のディレクトリキャッシュ格納部１３は、図５のディレクトリキャッシュ格納部１３と同一の構成を備えるが、図５のディレクトリ格納部１５と同一のディレクトリ情報１５１を格納する。従って、図６のディレクトリキャッシュ格納部１３のエントリは、アドレスタグに対応して、キャッシュメモリ１１１に持ち出されたディレクトリ格納部１５のディレクトリ情報１５１のコピー１３１を格納する。従って、図６のディレクトリキャッシュ格納部１３のエントリは、位置情報と、持ち出され状態とを格納する。【０１１９】
図５のディレクトリ格納部１５及びディレクトリキャッシュ格納部１３、又は、図６のディレクトリ格納部１５及びディレクトリキャッシュ格納部１３のいずれを用いるかは、例えば、コントローラシステムの規模等に応じて選択される。【０１２０】
次に、図７を参照して、共有型で持ち出されたデータの取得要求（以下、共有型のデータ取得要求）が発行された場合における、メモリ１４からのデータの読み出しについて、説明する。図７は、メモリリードの動作を示す図である。【０１２１】
ノード１Ｂのプロセッサ１１から、ノード１Ａのメモリ１４が持つアドレスｄ（図１０参照）に対して、共有型のデータ取得要求が送出されたとする（＃１）。共有型のデータ取得要求はコントローラ１２を介して、ノード１Ａに送出され（＃２）、ノード１Ａ内のコントローラ１２がこれを受信して処理する。【０１２２】
コントローラ１２は、ディレクトリキャッシュ格納部１３を検索する。その結果、ミスヒットした場合（＃３）、コントローラ１２は、ディレクトリ格納部１５からキャッシュメモリ１１１の持ち出し情報を読み出し（＃４）、及びメモリ１４からアドレスｄのデータを読み出す（＃４）。ディレクトリ格納部１５の情報がデータが持ち出されていないか又は共有型で持ち出されたことを示す場合、コントローラ１２は、読み出したデータをノード１Ｂに向けて送信する（＃５）。【０１２３】
なお、ディレクトリ格納部１５の情報がデータが排他型で持ち出されたことを示す場合、コントローラ１２は、データを持ち出しているノードに対して、共有型のデータ取得要求を送信する。【０１２４】
ノード１Ｂにおいて、ノード１Ｂのコントローラ１２は、ノード１Ａのコントローラ１２から送信されたデータを受信して、ノード１Ｂのプロセッサ１１に転送する（＃５）。更に、ノード１Ａのコントローラ１２は、ノード１Ａのディレクトリ格納部１５の更新を行い（＃６）、ノード１Ａのキャッシュメモリ１１１がデータを共有しているという情報を登録する。この際、ノード１Ａのディレクトリキャッシュ格納部１３に空きがある場合、ノード１Ａのディレクトリ格納部１５と同様にして、処理対象のデータブロックの共有情報を登録するようにしても良い。【０１２５】
ライトバック方式を採用する場合には、ディレクトリキャッシュ格納部１３に空きがある場合には、ディレクトリ格納部１５の更新を行わず、ディレクトリキャッシュ格納部１３にのみ、新たなディレクトリ情報１５１を登録すれば良い。エントリのリプレースなどで当該エントリが追い出される場合に、初めてディレクトリ格納部１５の更新を行うようにすれば良い。【０１２６】
次に、図８を参照して、共有型のデータ取得要求が発行された場合における、キャッシュメモリ１１１からのデータの読み出しについて、説明する。図８は、キャッシュリードの動作を示す図である。【０１２７】
ノード１Ｂのプロセッサ１１より、ノード１Ａのメモリ１４が持つアドレスｄに対して、共有型のデータ取得要求が送出されたとする（＃１）。共有型のデータ取得要求は、ノード１Ａに送出され（＃２）、ノード１Ａのコントローラ１２がこれを受信して処理する。【０１２８】
コントローラ１２は、ディレクトリキャッシュ格納部１３を検索する。その結果、ヒットした場合（＃３）、ノード１Ａのコントローラ１２は、ノード１Ｃに向けて共有型でのデータ取得要求を送信する（＃４）。なお、ノード１Ａのコントローラ１２は、ノード１Ｃに向けて共有型でのデータ取得要求を送信したことを、ノード１Ｂのコントローラ１２に送信する（＃５）。【０１２９】
ノード１Ｃにおいて、コントローラは、この共有型でのデータ取得要求を受信して、プロセッサに対して、データブロックを要求する。この要求に応じて、プロセッサがデータブロックをコントローラに送信する。コントローラは、受信したデータをノード１Ｂに対して転送する（＃５）。これと同時に、ノード１Ｃのコントローラは、ノード１Ｃのキャッシュメモリ上の排他型で持ち出されたデータブロックを共有型に遷移させる。【０１３０】
また、ノード１Ｃのキャッシュメモリのデータブロックが更新されて、ノード１Ｃのメモリと異なっている（データがdirtyである）場合、ノード１Ｃのコントローラは、当該データブロックを、ノード１Ｃのメモリに書き戻す。更に、ノード１Ｃのコントローラは、データブロックを共有型で転送したという情報を、アドレスｄが属するノード１Ａに対して送信する（＃５）。【０１３１】
この情報を受信したノード１Ａのコントローラ１２は、ディレクトリ格納部１５の情報を更新することにより（＃６）、ノード１Ｃのキャッシュメモリ１１１及びノード１Ｂのキャッシュメモリ１１１がデータを共有しているという情報を登録する。【０１３２】
以上のように、排他型で持ち出されていたデータブロックが共有型に遷移したので、コントローラ１２は、ディレクトリキャッシュ格納部１３の情報を、削除するか、又は、共有型に更新する。なお、ライトバック方式を採用する場合、ディレクトリ格納部１５の更新は行わず、ディレクトリキャッシュ格納部１３のみを更新する。【０１３３】
図９は、共有型で持ち出されたデータブロックのリード処理フローを示す図であり、図７及び図８に示すデータブロックの読み出し処理について示す。【０１３４】
プロセッサ１１は、コントローラ１２に、メモリアドレスＡの共有リード要求を行う（ステップＳ１１）。これに応じて、コントローラ１２は、ディレクトリキャッシュ格納部１３の検索を行い（ステップＳ１２）、キャッシュヒットしたか否かを判断する（ステップＳ１３）。【０１３５】
キャッシュヒットしない場合（ステップＳ１３  Ｎｏ）、コントローラ１２は、ディレクトリ情報１５１をディレクトリ情報バッファ１２２に読み出し（ステップＳ１４）、メモリ１４からデータを読み出す（ステップＳ１５）。【０１３６】
この後、コントローラ１２は、読み出したディレクトリ情報１５１に基づいて、排他型の持ち出しがあるか否かを判断する（ステップＳ１６）。排他型の持ち出しがない場合（ステップＳ１６  Ｎｏ）、コントローラ１２は、コピー要求元にデータを転送する（ステップＳ１７）。この後、コントローラ１２は、ディレクトリキャッシュ格納部１３に空きがある場合、ディレクトリ情報１５１のコピー１３１を登録し、また、ディレクトリ情報１５１を更新する（ステップＳ１８）。【０１３７】
ステップＳ１６において、排他型の持ち出しがある場合（ステップＳ１６  Ｙｅｓ）、ステップＳ１９を実行する。【０１３８】
ステップＳ１３において、キャッシュヒットした場合（ステップＳ１３  Ｙｅｓ）、コントローラ１２は、リモートノードのプロセッサ１１にコピーバックを要求する（ステップＳ１９）。【０１３９】
リモートノードは、要求されたデータブロックを、要求元であるホームノードのコントローラ１２へ送信する（ステップＳ１１０）。これにより、リモートノードは共有型に遷移する。【０１４０】
この後、コントローラ１２は、処理対象のデータブロックが「dirty」であるか否かを判断する（ステップＳ１１１）。「dirty」でない場合（ステップＳ１１１  Ｎｏ）、ステップＳ１８を実行する。「dirty」である場合（ステップＳ１１１  Ｙｅｓ）、処理対象のデータブロックをメモリ１４に書き戻し（ステップＳ１１２）、この後、ステップＳ１８を実行する。【０１４１】
次に、図１０を参照して、排他型で持ち出されたデータの取得要求（以下、排他型のデータ取得要求）が発行された場合における、メモリ１４からのデータの読み出しと、キャッシュメモリ１１１の無効化とについて、説明する。図１０は、メモリリードの動作を示す図である。【０１４２】
ローカルノードＬであるノード１Ｃのプロセッサ１１より、ホームノードＨであるノード１Ａのメモリ１４が持つアドレスｄに対して、排他型のデータ取得要求が送出されたとする。排他型のデータ取得要求はノード１Ａに送出され、ノード１Ａ内のコントローラ１２がこれを受信して処理する。【０１４３】
コントローラ１２は、ディレクトリキャッシュ格納部１３を検索する。ディレクトリキャッシュ格納部１３の検索の結果がヒットした場合には、コントローラ１２は、ディレクトリキャッシュ格納部１３からキャッシュメモリ１１１へのデータの持ち出し情報、及び、メモリ１４からアドレスｄのデータ１４１を読み出す。この場合、ディレクトリ格納部１５のディレクトリ情報１５１は、例えば、アドレスｄのデータ１４１が排他型で持ち出されており、持ち出し先（リモートノードＲ）がノード１Ｂのプロセッサ１１であることを示す。従って、ディレクトリキャッシュ格納部１３のディレクトリ情報１５１のコピー１３１も、ディレクトリ情報１５１と同様の内容を示す。以上の処理の結果に基づいて、コントローラ１２は、リモートノードＲであるノード１Ｂに対して、ノード１Ｂのキャッシュメモリ１１１にコピーされているアドレスｄのデータ１４１について、そのコピー（コピーバック）と無効化とを要求する。【０１４４】
この要求を受信したノード１Ｂにおいて、コントローラ１２は、メモリ１４から読み出したデータ１４１をノード１Ｃに向けて送信する。また、コントローラ１２は、メモリ１４から読み出したデータ１４１をノード１Ａに向けて送信し、かつ、ノード１Ｃのキャッシュメモリ１１１のアドレスｄのデータ１４１を無効にする。これは、図１８（Ａ）の場合に相当する。【０１４５】
なお、ディレクトリキャッシュ格納部１３の検索の結果がミスヒットした場合には、コントローラ１２は、ディレクトリ格納部１５からキャッシュメモリ１１１へのデータの持ち出し情報、及び、メモリ１４からアドレスｄのデータを読み出す。【０１４６】
また、ディレクトリ格納部１５の情報がノード１Ｃのキャッシュメモリ１１１が共有型で持ち出していることを示す場合、コントローラ１２は、メモリ１４から読み出したデータ１４１をノード１Ｂに向けて送信し、また、ノード１Ｃのキャッシュメモリ１１１の該データブロックを無効化するため、ノード１Ｃに対して無効化要求を送信する。無効化要求を受信したノード１Ｃは、ノード１Ｃのキャッシュメモリ１１１の該データブロックを無効化する。これは、図１８（Ｂ）の場合に相当する。【０１４７】
また、ディレクトリ格納部１５の情報がデータが持ち出されていないことを示す場合、コントローラ１２は、メモリ１４から読み出したデータ１４１をノード１Ｃに向けて送信する。これは、図１８（Ｃ）の場合に相当する。【０１４８】
ノード１Ｃにおいては、コントローラ１２が要求したデータを受信して、これをプロセッサ１１に転送する。コントローラ１２は、ディレクトリ格納部１５の更新を行い、ノード１Ｂのキャッシュメモリ１１１がデータを排他型で所有しているという情報を登録する。なお、ライトバック方式の場合には、この時点での更新は不要である。そして、コントローラ１２は、ディレクトリキャッシュ格納部１３にも新規エントリを登録する。【０１４９】
図１１は、排他型で持ち出されたデータブロックのリード処理フローを示す図であり、図７及び図１０に示すデータブロックの読み出し処理について示す。【０１５０】
プロセッサ１１は、メモリアドレスＡの排他リード要求を行う（ステップＳ２１）。これに応じて、コントローラ１２は、ディレクトリキャッシュ格納部１３を検索し（ステップＳ２２）、キャッシュヒットしたか否かを判断する（ステップＳ２３）。【０１５１】
キャッシュヒットしない場合（ステップＳ２３  Ｎｏ）、コントローラ１２は、ディレクトリ格納部１５から、ディレクトリ情報１５１をディレクトリ情報バッファ１２２に読み出し（ステップＳ２４）、メモリ１４からデータブロックを読み出す（ステップＳ２５）。この後、コントローラ１２は、読み出したディレクトリ情報１５１に基づいて、排他型の持ち出しがあるか否かを判断する（ステップＳ２６）。【０１５２】
排他型の持ち出しがない場合（ステップＳ２６  Ｎｏ）、コントローラ１２は、更に、共有型の持ち出しがあるか否かを判断する（ステップＳ２７）。【０１５３】
共有型の持ち出しがある場合（ステップＳ２７  Ｙｅｓ）、コントローラ１２は、リモートノードのプロセッサ１１に、処理対象のデータブロックの無効化を要求する（ステップＳ２８）。これに応じて、リモートノードのコントローラ１２は、処理対象のデータブロックを無効化する（ステップＳ２９）。【０１５４】
この後、リモートノードのコントローラ１２は、要求元であるプロセッサ１１にデータブロックを転送する（ステップＳ２１０）。データブロックを受信したコントローラ１２は、ディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３に登録し、また、ディレクトリ情報１５１を更新して（ステップＳ２１１）、処理を終了する。【０１５５】
ステップＳ２７において、共有型の持ち出しがない場合（ステップＳ２７  Ｎｏ）、コントローラ１２は、ステップＳ２１０を実行する。【０１５６】
ステップＳ２６において、排他型の持ち出しがある場合（ステップＳ２６  Ｙｅｓ）、コントローラ１２は、ステップＳ２１２を実行する。【０１５７】
ステップＳ２３において、キャッシュヒットした場合（ステップＳ２３  Ｙｅｓ）、コントローラ１２は、リモートノードのプロセッサ１１にデータブロックのコピーバック及び無効化を要求する（ステップＳ２１２）。これに応じて、リモートノードのコントローラ１２は、要求されたデータブロックを要求元であるホームノードに送信する（ステップＳ２１３）。【０１５８】
この後、コントローラ１２は、処理対象のデータブロックが「dirty」であるか否かを判断する（ステップＳ２１４）。「dirty」でない場合（ステップＳ２１４  Ｎｏ）、ステップＳ２１１を実行する。「dirty」である場合（ステップＳ２１４  Ｙｅｓ）、処理対象のデータブロックをメモリ１４に書き戻し（ステップＳ２１５）、この後、ステップＳ２１１を実行する。【０１５９】
次に、ディレクトリキャッシュ格納部１３のエントリのリプレース処理について、説明する。【０１６０】
新たにディレクトリキャッシュ格納部１３のエントリを登録する際に、既にエントリが満たされている場合がある。この場合、ディレクトリキャッシュ格納部１３のエントリのリプレースが必要となる。【０１６１】
例えば、ライトスルー方式のディレクトリキャッシュ格納部１３においては、その内容が常にディレクトリ格納部１５の内容と一致しているので、当該エントリを選択して上書きすることができる。ライトバック方式のディレクトリキャッシュ格納部１３においては、リプレースの対象となったエントリを、ディレクトリ格納部１５に書き戻す。【０１６２】
リプレース対象となるディレクトリキャッシュ格納部１３のエントリは、以下のようにして選択される。共有型のエントリが存在する場合、コントローラは、当該共有型のエントリをリプレースの対象として選択し、更に、その中から例えばＬＲＵ等のアルゴリズムによりリプレースすべきエントリを選択する。共有型のエントリが存在せず、排他型のエントリのみが登録されている場合、コントローラ１２は、排他型のエントリをリプレースの対象として選択し、更に、その中から例えばＬＲＵ等のアルゴリズムによりリプレースすべきエントリを選択する。このように、共有型のエントリを優先的にリプレースすることにより、排他型のエントリを優先的に登録することができる。【０１６３】
図１２は、共有型優先追い出しの処理フローを示す図である。【０１６４】
プロセッサ１１が、コントローラ１２にて、新規のディレクトリ情報１５１についてのディレクトリキャッシュ格納部１３への登録要求を行う（ステップＳ３１）。これに応じて、コントローラ１２は、ディレクトリキャッシュ格納部１３のエントリに空きがあるか否かを判断する（ステップＳ３２）。【０１６５】
ディレクトリキャッシュ格納部１３のエントリに空きがない場合（ステップＳ３２  Ｎｏ）、コントローラ１２は、更に、ディレクトリキャッシュ格納部１３に共有型のエントリが存在するか否かを判断する（ステップＳ３３）。【０１６６】
共有型のエントリが存在しない場合（ステップＳ３３  Ｎｏ）、コントローラ１２は、更に、登録要求が排他型であるか否かを判断する（ステップＳ３４）。【０１６７】
登録要求が排他型である場合（ステップＳ３４  Ｙｅｓ）、コントローラ１２は、エントリの中から、追い出し対象のエントリをＬＲＵにより選択し（ステップＳ３５）、選択したエントリのディレクトリ情報１５１をディレクトリ格納部１５に書き戻す（ステップＳ３６）。この後、コントローラ１２は、新規のディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３に登録して（ステップＳ３７）、処理を終了する。【０１６８】
ステップＳ３２において、ディレクトリキャッシュ格納部１３のエントリに空きがある場合（ステップＳ３２  Ｙｅｓ）、ステップＳ３７を実行する。【０１６９】
ステップＳ３３において、共有型のエントリが存在する場合（ステップＳ３３  Ｙｅｓ）、共有型のエントリから追い出し対象のエントリをＬＲＵで選択し（ステップＳ３８）、この後、ステップＳ３６を実行する。【０１７０】
ステップＳ３４において、登録要求が排他型でない場合（ステップＳ３４  Ｎｏ）、コントローラ１２は、新規のディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３には登録しない（ステップＳ３９）。従って、新規のディレクトリ情報１５１は、ディレクトリ格納部１５にのみ登録される。【０１７１】
（第２の実施態様）
この実施態様では、ディレクトリキャッシュ格納部１３に加えてディレクトリ格納部１５が設けられ、かつ、ディレクトリキャッシュ格納部１３へのデータブロックの持ち出し情報の登録について以下のプロトコルが設定される。即ち、排他型で持ち出されたデータブロックの持ち出し情報は必ず登録する。共有型で持ち出されたデータブロックの持ち出し情報は登録しない。【０１７２】
具体的には、第２の実施態様においては、コントローラ１２は、図３（Ｂ）に示す処理を実行する。図３（Ｂ）は、第２の実施態様のコントローラが実行するディレクトリキャッシュの登録処理フローである。【０１７３】
キャッシュメモリ１１１へのデータの持ち出しが発生すると（ステップＳ５）、コントローラ１２は、当該持ち出しが排他型での持ち出しか否かを調べる（ステップＳ６）。当該持ち出しが排他型での持ち出しである場合（ステップＳ６  ＹＥＳ）、コントローラ１２は、当該持ち出されたデータについてのディレクトリ情報１５１のコピー１３１を、ディレクトリキャッシュ格納部１３に格納する（ステップＳ７）。当該持ち出しが排他型での持ち出しでない場合、換言すれば、当該持ち出しが共有型での持ち出しである場合（ステップＳ６  ＮＯ）、コントローラ１２は、ステップＳ７を実行することなく、処理を終了する。これにより、共有型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１は、ディレクトリキャッシュ格納部１３に格納されない。【０１７４】
以上の処理の結果、コントローラ１２は、排他型で持ち出されたデータについてのディレクトリ情報１５１を共有型で持ち出されたデータについてのディレクトリ情報１５１よりも優先的にディレクトリキャッシュ格納部１３に格納する。換言すれば、コントローラ１２は、排他型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３に必ず格納し、共有型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３に格納しない。【０１７５】
以上のように、排他権のある持ち出し情報のみを必ず登録する場合において、メモリアドレスｄがディレクトリキャッシュ格納部１３に存在するか検索しヒットしたことは、当該データブロックがメモリアドレスｄが存在するキャッシュメモリ１１１に排他権を持って持ち出されたことを意味する。ヒットしないことは、データは持ち出されていないか、又は、排他権を持たずに持ち出され、メモリ１４にあるデータが最新であることを意味している。従って、メモリアドレスｄに対する要求が共有要求である場合において、ディレクトリキャッシュ格納部１３にヒットしない場合、メモリ１４にあるデータを使用すればよい。【０１７６】
この実施態様においては、排他型で持ち出されたデータブロックの持ち出し情報をディレクトリキャッシュ格納部１３から追い出す場合、メモリ１４ヘの書き戻し処理が必要である。このメモリ１４ヘの書き戻し処理により、追い出される又は追い出された排他型で持ち出されたデータブロックが、メモリ１４に書き戻される。【０１７７】
また、ディレクトリキャッシュ格納部１３から排他型で持ち出されたデータブロックの持ち出し情報が溢れる場合、リプレース処理ではなく、リプレース処理の対象となったエントリに対応するデータブロックは、メモリ１４に書き戻される。【０１７８】
例えば、ノード１Ａのディレクトリキャッシュ格納部１３に対して新規にディレクトリ情報１５１のコピー１３１を登録する必要が生じたとする。リプレース処理の対象となったエントリのディレクトリ情報１５１のコピー１３１を読み出した結果、ノード１Ａのコントローラ１２は、ノード１Ｂのキャッシュメモリが処理対象のデータブロックを所有していることを知る。この場合、ノード１Ａのコントローラ１２は、ノード１Ｂに対して、処理対象のデータブロックのメモリへの書き戻しを要求する。この要求を受信したノード１Ｂは、ノード１Ｂのキャッシュメモリ１１１に存在する処理対象のデータブロックを破棄する。処理対象のデータブロックが更新されている即ちdirtyである場合、処理対象のデータブロックをノード１Ａに転送して、メモリ１４に書き戻す。処理対象のデータブロックが更新されていない場合、メモリ１４に書き戻すことは不要であるので、単にノード１Ｂのキャッシュメモリにおいて当該データブロックを無効化する。【０１７９】
（第３の実施態様）
この実施態様では、ディレクトリキャッシュ格納部１３に加えてディレクトリ格納部１５が設けられ、かつ、ディレクトリキャッシュ格納部１３へのデータブロックの持ち出し情報の登録について以下のプロトコルが設定される。即ち、排他型で持ち出されたデータブロックの持ち出し情報は、基本的に登録するが、ディレクトリキャッシュ格納部１３から溢れることを許容する。共有型で持ち出されたデータブロックの持ち出し情報は登録しない。従って、溢れた排他型で持ち出されたデータブロックの持ち出し情報は、ディレクトリ格納部１５に登録されるのみである。【０１８０】
具体的には、コントローラ１２は、排他型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３に必ず格納し、共有型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３に空きがある場合に格納する。【０１８１】
（第４の実施態様）
この実施態様では、ディレクトリキャッシュ格納部１３に加えてディレクトリ格納部１５が設けられ、かつ、ディレクトリキャッシュ格納部１３へのデータブロックの持ち出し情報の登録について以下のプロトコルが設定される。即ち、排他型で持ち出されたデータブロックの持ち出し情報は必ず登録する。共有型で持ち出されたデータブロックの持ち出し情報は、ディレクトリキャッシュ格納部１３に空きがあれば、登録する。【０１８２】
具体的には、コントローラ１２は、排他型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３から溢れることを許容してディレクトリキャッシュ格納部１３に格納し、共有型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３に格納しない。【０１８３】
この実施態様においては、第２の実施態様と同様に、排他型で持ち出されたデータブロックの持ち出し情報をディレクトリキャッシュ格納部１３から追い出す場合、メモリ１４ヘの書き戻し処理が必要である。このメモリ１４ヘの書き戻し処理により、追い出される又は追い出された排他型で持ち出されたデータブロックの持ち出し情報が、メモリ１４に書き戻される。【０１８４】
（第５の実施態様）
以上の実施態様においては、コンピュータシステムが、予め定められた１個のキャッシュプロトコルに従って、キャッシュコヒーレントを維持する。しかし、例えば、コンピュータシステムの状態又は規模等に応じて、キャッシュプロトコルを選択することができるようにしても良い。【０１８５】
図１３は、本発明の一実施態様によるコンピュータシステムの他の構成を示す図である。図１３のコンピュータシステムは、図１のコンピュータシステムが備える構成に加えて、更に、全体制御装置３を備え、また、各々のノード１にレジスタ１７を備える。【０１８６】
全体制御装置３は、コンピュータシステムを制御するためのコンピュータであり、ネットワークを介することなく、各々のノード１と接続される。全体制御装置３は、ディレクトリキャッシュ格納部１３を制御する制御情報を、各ノード１のレジスタ１７に入力する。レジスタ１７は、入力された制御情報を格納する。レジスタ１７は、入力された制御情報に基づいて、コントローラ１２におけるキャッシュプロトコルを設定する。これにより、コントローラ１２は、レジスタ１７に格納された制御情報に応じて、排他型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１及び共有型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１のディレクトリキャッシュ格納部１３への格納の優先度のレベルを変更する。【０１８７】
従って、第１〜第４の実施態様に示すキャッシュプロトコルの中から、最も効率のよい制御を選択して、最も効率のよい制御プロトコルを選択することができる。例えば、コンピュータシステムの状態や規模等に応じて、最も効率のよい制御プロトコルを柔軟に選択することができる。【０１８８】
このように、ディレクトリ格納部１５に全ての持ち出し情報を持ち、かつ、基本的には、ディレクトリキャッシュ格納部１３には排他型で持ち出されたデータブロックのディレクトリを登録する。これにより、効率よくディレクトリ情報１５１のコピー１３１を持つことができる。この結果、追い出しの発生する頻度を低下させ、プロセッサ間の通信のトラフィックの増大を防ぎ、処理の高速化を達成することができる。【０１８９】
（第６の実施態様）
以上の実施態様においては、データが他のキャッシュメモリ１１１へ持ち出されている場合、ディレクトリ格納部１５は、少なくとも、どのような状態で持ち出されているかという情報を持つ。ここで、持ち出しの状態とは、例えば、共有型又は排他型である。【０１９０】
しかし、例えば、最初は排他型で持ち出されたデータブロックが、処理の途中で、当該データブロックについての共有型の持ち出し要求が発生して、複数のキャッシュメモリ１１１にデータが存在する結果となる場合がある。【０１９１】
そこで、この実施態様においては、コントローラ１２は、ディレクトリ格納部１５及びディレクトリキャッシュ格納部１３における状態情報を更新するようにしても良く、また、最初のままにするようにしても良い。【０１９２】
（第７の実施態様）
以上の実施態様においては、前述したように、排他型である場合には、必ずディレクトリキャッシュ格納部１３にディレクトリ情報１５１のコピー１３１が存在する。従って、「ディレクトリ情報１５１のコピー１３１がディレクトリキャッシュ格納部１３に存在せず」、かつ、「ディレクトリ情報１５１によりデータが持ち出されたことが示されている」場合、ディレクトリ情報１５１は、共有型でのデータの持ち出しを示すことになる。【０１９３】
そこで、この実施態様においては、コントローラ１２は、ディレクトリ格納部１５において、共有型での持ち出し情報と排他型での持ち出し情報とを、相互に区別しないようにしても良い。【０１９４】
（第８の実施態様）
以上の実施態様においては、ディレクトリ方式を採用するコンピュータシステムについて説明したが、本発明は、ディレクトリ方式とスヌープ方式とをあわせた方式（以下、ハイブリッド方式）に適用することができる。【０１９５】
図１４は、本発明の一実施態様によるコンピュータシステムの更に他の構成を示す図である。図１４のコンピュータシステムは、図１のコンピュータシステムが備える構成に加えて、更に、各々のノード１にタグコピー１８を備える。【０１９６】
スヌープ方式においては、各プロセッサを接続するインタコネクトが、各キャッシュメモリのキャッシュタグのコピー（タグコピー）１８を、その内部に保持する。タグコピー１８は、各キャッシュタグに一対一に対応する。これは、１個のデータブロックについての状態情報を、分散管理している状態である。従って、スヌープ方式においては、データブロックの状態を知るためには、全てのキャッシュタグをコピーしたタグコピー１８を保持している。このため、キャッシュシステムが巨大になり、キャッシュメモリの数に比例して、ネットワークの負荷が大きくなる傾向にある。【０１９７】
これに対して、ハイブリッド方式では、ディレクトリ内には、スヌープによってキャッシュコピーをもつキャッシュを特定できるので、どのキャッシュメモリが持ち出しを行ったかという情報を保持する必要がない。【０１９８】
本発明においては、図１４に示すように、ハイブリッド方式においてディレクトリキャッシュ格納部をもち、前述したように、ディレクトリキャッシュ格納部１３には、データが他のキャッシュメモリ１１１に排他型で持ち出されたことのみを登録する。これにより、ディレクトリキャッシュ格納部１３のサイズを小さくすることができる。【０１９９】
また、この場合でも、ディレクトリキャッシュ格納部１３にヒットした場合、コントローラ１２がタグコピー１８を参照してキャッシュタグをスヌープする。このスヌープにより、データを持ち出したキャッシュメモリ１１１を特定することができる。従って、更新情報の取得や無効化などの処理を行うことができる。この結果、ディレクトリキャッシュ格納部１３に、どのキャッシュメモリ１１１がデータを持ち出したかという位置情報を格納する必要を無くすことができる。これにより、ディレクトリキャッシュ格納部１３のサイズを小さくすることができる。【０２００】
以上に加えて、コントローラ１２は、メモリ１４のデータがホームノード以外のプロセッサのキャッシュメモリ１１１に持ち出された場合にのみ、ディレクトリキャッシュ格納部１３にディレクトリ情報１５１のコピー１３１を登録するようにしても良い。この場合、ディレクトリ情報１５１を利用するのは、要求元ノードとホームノードとが一致している場合に制限される。つまり、ローカルノードのプロセッサから出力された要求アドレスがローカルノードのものであれば、ディレクトリキャッシュ格納部１３を参照し、そうでなければ直ちにスヌープを行う。ディレクトリキャッシュを参照した結果、ヒットしなければローカルノードのメモリを読み出し、ヒットすればこれは他キャッシュへの持ち出しを意味するので、持ち出し場所を特定するため直ちにスヌープを行う。【０２０１】
これにより、ホームノードのキャッシュメモリ１１１つまり自分自身のキャッシュメモリ１１１がデータを持ち出しているという情報は、不要とすることができる。換言すれば、この場合には、既にディレクトリキャッシュ格納部１３にヒットした状態であるので、ディレクトリ格納部１５の検索は行われない。ディレクトリキャッシュ格納部１３にヒットしない場合、メモリ１４から最新データを取得することができる。また、要求元ノードとホームノードが一致しなければ、直ちにキャッシュメモリ１１１のスヌープを行う。従って、ディレクトリ情報１５１のコピー１３１が、データがキャッシュメモリ１１１にコピーされたことを示す情報のみを含むようにすることができる。これにより、ディレクトリキャッシュ格納部１３のサイズを小さくすることができる。【０２０２】
一方、プロセッサからの要求がデータの共有要求である場合、メモリ１４から最新データを取得することにより、処理は完了する。【０２０３】
更に、プロセッサからの要求がデータの排他権の獲得である場合、要求するデータを所有する全てのキャッシュメモリ１１１において、無効化の処理を実行しなければならない。従って、データを持ち出している全てのキャッシュメモリ１１１を特定して、処理を実行する必要がある。具体的には、コントローラ１２は、共有型の持ち出し情報まで含んで登録するディレクトリ格納部１５を参照し、共有型の持ち出し情報の有無を調べ、共有型でのデータの持ち出しがあった場合、更に、キャッシュタグをスヌープすることにより、無効化の処理を行う。【０２０４】
（第９の実施態様）
以上の実施態様においては、キャッシュメモリ１１１にデータブロックが存在する場合にはキャッシュメモリ１１１からデータブロックを読み出す。しかし、処理対象のデータブロックがメモリ１４に存在するデータブロックと同一である即ちcleanである場合、当該データブロックは、メモリ１４から読み出すようにしても良い。換言すれば、メモリ１４又はキャッシュメモリ１１１のいずれから読み出しても良い。【０２０５】
例えば、共有型で持ち出されたデータブロックのディレクトリ情報１５１のコピー１３１をディレクトリキャッシュ格納部１３に格納する場合、コントローラ１２は、ディレクトリキャッシュ格納部１３の検索結果として、当該データブロックが共有型で持ち出されたことを知る。この場合において、当該データブロックをキャッシュメモリ１１１から読み出す方が、メモリ１４から読み出すよりも効率的な場合があり得る。この場合には、共有型で持ち出されたデータブロックであっても、メモリ１４からではなくキャッシュメモリ１１１から読み出すようにしても良い。【０２０６】
（第１０の実施態様）
以上の実施態様においては、キャッシュプロトコルとしてＭＥＳＩを採用するコンピュータシステムについて説明したが、本発明は、ＭＥＳＩ以外のキャッシュプロトコルを採用するコンピュータシステムにも適用することができる。【０２０７】
例えば、ＭＥＳＩ以外のキャッシュプロトコルとしては、Ｍ、Ｓ及びＩの３状態からなるＭＳＩや、ＭＳＩに所有（O;Owned）を加えたＭＯＥＳＩ等がある。ＭＯＥＳＩは以下のようなキャッシュプロトコルである。即ち、書き換えられたデータブロック（状態Ｍ）に対して更に共有要求があった場合に、状態Ｍは状態Ｏに遷移する。状態Ｏは、処理対象のデータブロックをメモリに書き戻す義務を有する状態である。共有要求を出して処理対象のデータブロックを取得したプロセッサにおいては、処理対象のデータブロックの状態は、状態Ｓとなる。【０２０８】
このようなキャッシュプロトコルにおいて、コントローラ１２は、状態Ｍを排他型のデータとして、その他の状態Ｓ及びＩ、又は、状態Ｓ、Ｉ及びＯを、共有型のデータとして管理する。コントローラ１２は、排他型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１のディレクトリキャッシュ格納部１３への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１のディレクトリキャッシュ格納部１３への格納の優先度よりも高くする。そして、コントローラ１２は、少なくとも、排他型で持ち出されたデータについてのディレクトリ情報１５１のコピー１３１を、ディレクトリキャッシュ格納部１３へ格納する。
【図１】
0005445581.tif 000002
【図２】
0005445581.tif 000003
【図３】
0005445581.tif 000004
【図４】
0005445581.tif 000005
【図５】
0005445581.tif 000006
【図６】
0005445581.tif 000007
【図７】
0005445581.tif 000008
【図８】
0005445581.tif 000009
【図９】
0005445581.tif 000010
【図１０】
0005445581.tif 000011
【図１１】
0005445581.tif 000012
【図１２】
0005445581.tif 000013
【図１３】
0005445581.tif 000014
【図１４】
0005445581.tif 000015
【図１５】
0005445581.tif 000016
【図１６】
0005445581.tif 000017
【図１７】
0005445581.tif 000018
【図１８】
0005445581.tif 000019