JP5445581B2 - コンピュータシステム、制御方法、記録媒体及び制御プログラム - Google Patents

コンピュータシステム、制御方法、記録媒体及び制御プログラム Download PDF

Info

Publication number
JP5445581B2
JP5445581B2 JP2011502506A JP2011502506A JP5445581B2 JP 5445581 B2 JP5445581 B2 JP 5445581B2 JP 2011502506 A JP2011502506 A JP 2011502506A JP 2011502506 A JP2011502506 A JP 2011502506A JP 5445581 B2 JP5445581 B2 JP 5445581B2
Authority
JP
Japan
Prior art keywords
directory
data
storage unit
cache
memory
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011502506A
Other languages
English (en)
Other versions
JPWO2010100679A1 (ja
Inventor
恵美 横井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2010100679A1 publication Critical patent/JPWO2010100679A1/ja
Application granted granted Critical
Publication of JP5445581B2 publication Critical patent/JP5445581B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0822Copy directories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/082Associative directories

Description

本発明は、共有メモリ型マルチプロセッサシステムのようなコンピュータシステム、制御方法、記録媒体及び制御プログラムに関する。
共有メモリ型マルチプロセッサシステムにおいては、複数のプロセッサがメモリを共有する。従って、メモリ上の同一のデータブロックについて、複数のキャッシュメモリにそのコピーが同時存在しうる。そこで、キャッシュコヒーレンシーを保ちながらデータ処理を行うために、データブロックの状態を示す状態情報を管理する必要がある。
データブロックの状態には、主として、共有(S;Shared)、更新されていない(clean)排他(E;Exclusive Clean)、更新済み(dirty)の排他(M;Modified)、無効(I;Invalid)がある。このようなM、E、S及びIの4状態をもつキャッシュプロトコルは、MESIと呼ばれる。以下、共有を「S」又は「Shared」、更新されていない排他を「E」又は「Exclusive」、更新済みの排他を「M」又は「Modified」、無効を「I」又は「Invalid」と表す。
状態Sは、処理対象のデータブロックがリード専用のデータブロックであり、参照しているプロセッサが処理対象のデータブロックを更新する権利を持たない状態である。処理対象のデータブロックと同一のデータブロックが、他のキャッシュメモリに存在する可能性がある。
状態Eは、処理対象のデータブロックと同一のデータブロックが他のキャッシュメモリに存在せず、参照しているプロセッサが処理対象のデータブロックを更新する権利を持つ状態である。処理対象のデータブロックは、更新されておらず、メモリにある処理対象のデータブロックと一致する。
状態Mは、処理対象のデータブロックと同一のデータブロックが他のキャッシュメモリに存在せず、参照しているプロセッサが処理対象のデータブロックを更新する権利を持つ状態である。処理対象のデータブロックは、更新済みであり、メモリにある処理対象のデータブロックと異なる内容である。従って、処理対象のデータブロックは、唯一の最新情報である。
状態Iは、処理対象のデータブロックが有効な状態でキャッシュメモリに存在しない状態である。
キャッシュメモリ内に持つデータブロックの状態情報は、通常、キャッシュメモリの各ラインに対応したエントリを持つキャッシュタグに登録される。
例えば、あるプロセッサにおいてロード命令が実行される場合、ロードの対象となるデータブロックが状態Sでキャッシュメモリに存在するとする。この場合、プロセッサは、そのデータブロックをそのまま使用することができる。しかし、ストア命令を実行しようとしても、状態S即ちデータブロックの更新の権利が無い状態であるので、ストア命令の処理ができない。そこで、データブロックの状態を、状態E又は状態M即ち排他権を持つ状態にする必要がある。例えば、状態Sの場合、プロセッサは、処理対象のデータブロックを保持する1又は複数の他のキャッシュメモリに対して、当該他のプロセッサにおいて処理対象のデータブロックを無効化する要求を送信し、自身は排他型に遷移する。
また、プロセッサがロード命令又はストア命令を実行する場合において、ロード等の対象となるデータブロックを全く持っていない場がある。この場合、プロセッサは、処理対象のデータブロックを取得する必要がある。しかし、メモリに存在するデータブロックが最新であるとは限らない。即ち、いずれかのキャッシュメモリが処理対象のデータブロックを状態Mで持つ可能性がある。この場合、キャッシュコヒーレンシーを保つために、プロセッサは、状態Mのデータブロックを探さなければならない。
以上のように、キャッシュメモリのコヒーレント制御を効率よく実行するためには、処理対象のデータブロックがどのキャッシュメモリにどの状態で存在するかを知ることが重要である。このための方式として、スヌープ方式と、ディレクトリ方式とが知られている。
ディレクトリ方式においては、1個のデータブロックの状態情報は、いずれかのノードで集中管理される。ノードは、プロセッサやメモリ及びそれらのコントローラを持つ単位である。ノードはさらにディレクトリ格納部を持ち、あるノードに属するメモリのデータブロックがどのキャッシュメモリにどのような状態で持ち出されたかという情報即ちディレクトリ情報を、ノード内で保持する。
あるプロセッサが、あるデータブロックについてある要求を発行したとする。要求元のプロセッサの属するノードを「ローカルノード」と呼ぶ。また、処理対象のデータブロックを持つメモリが属するノードを「ホームノード」と呼ぶ。換言すれば、ホームノードは、処理対象のデータブロックを管理するディレクトリ格納部が存在するノードである。また、当該要求の結果として他のキャッシュメモリからの応答が発生する場合には、当該キャッシュメモリが属するノードを、「リモートノード」と呼ぶ。
ディレクトリ格納部は、キャッシュメモリに持ち出された全てのデータブロックについての情報を持つ。そこには、どのキャッシュメモリがデータブロックを持ち出している(又はコピーしている)か、そのデータブロックは、書き換えの可能性があるか等の情報が格納される。書き換えの可能性とは、既に書き換えられていること、又は、これから書き換えられる予定であることを言う。
ディレクトリ方式においては、データブロックを要求したプロセッサは、データブロックを管理するホームノードのディレクトリ格納部から、要求したデータブロックがどのキャッシュメモリにどのような状態で存在するのかを知る。データの要求を受けたホームノードは、ディレクトリ格納部からディレクトリ情報を取得して、必要な処理を行う。ディレクトリ格納部のエントリが各データブロックと一対一に対応している場合、ディレクトリ格納部は、メモリ上に設けられることが多い。ディレクトリ格納部のエントリがメモリ上の全てのデータブロックに対応するかは、実装に依存する。
ディレクトリ方式においては、メモリのデータを、それを使用するプロセッサのできるだけ近くに割り付けるように、ソフトウェアのチューニングを施すことにより、プロセッサの性能を向上させることができる。あるプロセッサの要求するデータが、自己のノードのメモリに存在する場合、即ち、ローカルノードとホームノードとが一致する場合、要求及びデータをノード間で送受信する必要がない。このため、送受信に起因するレイテンシが発生せず、また、ネットワークの付加も小さくすることができる。
また、あるデータブロックを複数のノードが使用するのはごく普通のことであり、ソフトウェアのチューニングを出来る限り施したとしても、複数のキャッシュメモリが同一のデータブロックを使用することは避けられないだろう。したがって、ローカルノードとホームノードとを完全に一致させることは非常に困難であると思われる。しかし、全てのノードの間の距離が均等ではなく、ノード間によって距離の差があるようなネットワーク構成においては、例え複数のノードが同一のデータブロックを使用する場合でも、距離の近いノードにプロセスを割り振りつつ、そのうちのひとつのノードにデータを置くようチューニングするなど、処理ノードとデータの距離を小さくすることで、処理を高速化することができる。
しかし、メモリへのアクセスは、本質的に相当の時間を要する。このため、メモリ上のディレクトリ情報を読み出すのでは、ディレクトリアクセスにおけるレイテンシが、プロセッサの性能向上のボトルネックとなってしまう。実際には、メモリ上のディレクトリ情報を読み出して、対象となるノードを知り、当該ノードへ要求を送信するので、要求を処理するために非常に時間がかかる。更に、ディレクトリ格納部が他のノードの配下にある場合、より一層長い時間を要する。
つまり、これは、例えば、図15に示す場合に相当する。図15は、リモートノードRのキャッシュからデータを取得する場合を示す。換言すれば、ローカルノードLからの要求により、ホームノードH(この場合、ローカルノードLとは異なるノード)のディレクトリ格納部をアクセスした後、さらに別のリモートノードRのキャッシュメモリをアクセスする場合である。一方、図16は、ホームノードHのメモリからデータを取得する場合を示す。図15に示す場合は、図16に示す場合と比較して、処理時間が非常に長くなるのである。
そこで、ディレクトリ情報の一部の情報だけをもつディレクトリキャッシュ格納部を備え、ホームノードで高速な処理を行うようにすることが考えられる。ディレクトリ情報の一部をディレクトリキャッシュ格納部から高速に読み出せることは、ホームノードがローカルノードと異なる場合でも、高速化に効果的である。換言すれば、メモリにアクセスすることなく、他ノードヘの要求を送信することができるので、この分だけ処理が高速となる。
例えば、統合ディレクトリ及びプロセッサキャッシュを備えたコンピュータシステムにおいて、キャッシュメモリサブシステム内に記録されたディレクトリエントリがModified、Exclusive、又はOwnedの状態でキャッシュされるラインを指示すると共に、ディレクトリエントリの不在が共有又は無効のいずれかでキャッシュされたことを示す技術が知られている。
特表2006−501546号公報
ディレクトリキャッシュ格納部としては、小容量かつ高速の記憶装置が使用される。このため、リプレース(又は書き換え)等の処理により、限られた容量のディレクトリキャッシュ格納部を使用する必要がある。しかし、ディレクトリキャッシュ格納部のリプレースが高い頻度で発生する場合、望むデータが既にリプレースで追い出されていたり、またリプレースの処理そのものにかかる時間によって処理が遅延したりすることが多発し、せっかくのディレクトリキャッシュも意味がなくなってしまう。従って、コンピュータシステムの全体の高速化のためには、ディレクトリキャッシュ格納部に処理時間短縮に効果のあるデータに絞って登録するものを減らすなど、真に必要とされるデータがリプレースで追い出される頻度をできる限り抑えて、ディレクトリキャッシュ格納部を効率良く利用することが必要である。
本発明は、効率良くディレクトリキャッシュ格納部を使用することができるキャッシュコヒーレント制御を行うコンピュータシステムを提供することを目的とする。
また、本発明は、効率良くディレクトリキャッシュ格納部を使用することができるキャッシュコヒーレント制御を行うコンピュータシステムの制御方法を提供することを目的とする。
また、本発明は、効率良くディレクトリキャッシュ格納部を使用することができるキャッシュコヒーレント制御を行うコンピュータシステムの制御プログラムを格納したコンピュータ読取可能な記録媒体を提供することを目的とする。
また、本発明は、効率良くディレクトリキャッシュ格納部を使用することができるキャッシュコヒーレント制御を行うコンピュータシステムの制御プログラムを提供することを目的とする。
開示されるコンピュータシステムは、メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、制御部とを備える。メモリは、データを格納する。キャッシュメモリは、データのコピーを格納する。ディレクトリ格納部は、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納する。ディレクトリキャッシュ格納部は、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納する。制御部は、ディレクトリキャッシュへのデータの格納を制御する制御部であって、メモリからどこかのキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理する。制御部は、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くする。
開示されるコンピュータシステムにおいては、例えば、前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納する。
開示されるコンピュータシステムにおいては、例えば、前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に必ず格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に格納しない。
開示されるコンピュータシステムにおいては、例えば、前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に必ず格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納する。
開示されるコンピュータシステムにおいては、例えば、前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部から溢れることを許容して前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に格納しない。
開示されるコンピュータシステムにおいては、例えば、当該コンピュータシステムが、更に、前記ディレクトリキャッシュ格納部を制御する制御情報を格納するレジスタを備え 前記制御部が、前記レジスタに格納された前記制御情報に応じて、前記排他型で持ち出されたデータについてのディレクトリ情報及び前記共有型で持ち出されたデータについてのディレクトリ情報の前記ディレクトリキャッシュ格納部への格納の優先度のレベルを変更する。
開示されるコンピュータシステムにおいては、例えば、前記ディレクトリ情報が、前記データが前記キャッシュメモリにコピーされたことを示す情報のみを含む。
開示されるコンピュータシステムは、メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、タグコピーと、制御部とを備える。メモリは、データを格納する。キャッシュメモリは、データのコピーを格納する。ディレクトリ格納部は、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納する。ディレクトリキャッシュ格納部は、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納する。タグコピーは、キャッシュメモリにコピーされた全てのデータについて、それらのタグであるキャッシュタグを格納する。制御部は、ディレクトリキャッシュ格納部へのデータの格納を制御する制御部であって、メモリからキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理する。制御部は、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くする。制御部は、ディレクトリキャッシュ格納部にヒットした場合、タグコピーに格納されたキャッシュタグをスヌープすることにより、ヒットしたディレクトリ情報に対応するデータを持ち出したキャッシュメモリを特定する。
開示されるコンピュータシステムの制御方法は、メモリが、データを格納するステップと、キャッシュメモリが、データのコピーを格納するステップと、ディレクトリ格納部が、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納するステップと、ディレクトリキャッシュ格納部に、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、ディレクトリキャッシュ格納部へのデータの格納を制御する制御部が、メモリからキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くするステップとを備える。
開示されるコンピュータシステムの制御プログラムの記録媒体は、メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、ディレクトリキャッシュ格納部へのデータの格納を制御する制御部とを備えるコンピュータを制御するプログラムを格納するコンピュータ読取可能な記録媒体である。プログラムは、コンピュータに、メモリが、データを格納するステップと、キャッシュメモリが、データのコピーを格納するステップと、ディレクトリ格納部が、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納するステップと、ディレクトリキャッシュ格納部に、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、制御部が、メモリからキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くするステップとを実行させる。
開示されるコンピュータシステムの制御プログラムは、メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、ディレクトリキャッシュ格納部へのデータの格納を制御する制御部とを備えるコンピュータを制御する。制御プログラムは、メモリが、データを格納するステップと、キャッシュメモリが、データのコピーを格納するステップと、ディレクトリ格納部が、少なくともデータがキャッシュメモリにコピーされたことを示す情報を含む、データについてのディレクトリ情報を格納するステップと、ディレクトリキャッシュ格納部に、ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、制御部が、メモリからキャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、排他型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報のディレクトリキャッシュ格納部への格納の優先度よりも高くするステップとを実行させる。
開示されるコンピュータシステム、その制御方法、その制御プログラムの記録媒体、その制御プログラムによれば、ディレクトリキャッシュ格納部である記憶装置は、排他型の持ち出し情報を優先的に登録することで、本来であれば長い時間を必要とする処理の時間を効率的に短縮し、キャッシュコヒーレント制御を効率良く実行して、キャッシュとしての役割を果たすことができる。従って、限られた容量のディレクトリキャッシュ格納部を効率良く利用することができ、ディレクトリキャッシュ格納部を含むコンピュータシステムの全体の高速化を図ることができる。
コンピュータシステムの構成を示す図である。 コントローラが実行する処理を説明する図である。 コントローラが実行するディレクトリキャッシュの登録処理フローである。 コントローラの構成を示す図である。 ディレクトリのエントリ構造を示す図である。 ディレクトリのエントリ構造の実施例を示す図である。 メモリリードの動作を示す図である。 キャッシュリードの動作を示す図である。 共有型リードの処理フローを示す図である。 メモリリードの動作を示す図である。 排他型リードの処理フローを示す図である。 共有型優先追い出しの処理フローを示す図である。 コンピュータシステムの他の構成を示す図である。 コンピュータシステムの更に他の構成を示す図である。 データの取得経路による処理時間を説明する図である。 データの取得経路による処理時間を説明する図である。 共有型要求の状態を示す図である。 排他型要求の状態を示す図である。
符号の説明
1 ノード
2 I/O装置
3 全体制御装置
11 プロセッサ
12 コントローラ
13 ディレクトリキャッシュ
14 メモリ
15 ディレクトリ
16 I/O制御部
17 レジスタ
111 キャッシュメモリ
121 メモリバッファ
122 ディレクトリ情報バッファ
123 メモリ要求バッファ
124 ヒット判定回路
前述したように、コンピュータシステムの全体の高速化のためには、ディレクトリキャッシュ格納部を効率良く利用することが必要である。そこで、本発明者は、効率良くディレクトリキャッシュ格納部を使用するために、ディレクトリキャッシュ格納部に登録する情報を制限することを検討した。
プロセッサから発行されるデータの新規の取得要求は、共有型要求と排他型要求とに大別される。更に、取得対象となるデータの、キャッシュメモリヘ持ち出され状況によって、以下のように細分化することができる。
共有型要求は、更に、図17に示すように、3つの状態に分けられる。
共有型要求の第1の状態は、図17(A)に示すように、ローカルノードLが要求するデータブロックが、あるキャッシュメモリ(リモートノードRのキャッシュメモリ)で書き換えられている可能性のある状態、即ち、要求するデータブロックが既に排他型で、あるキャッシュメモリに持ち出された状態である。換言すれば、共有型要求の第1の状態は、要求するデータが排他型でリモートノードRに持ち出されている場合である。従って、リモートノードRが、そのキャッシュメモリに、排他型で最新データを保持している。この場合、該キャッシュメモリから最新データブロックを取得する必要がある。また、必要に応じて該キャッシュメモリの該データブロックを無効にする必要がある。つまり、共有型要求の第1の状態は、ホームノードHのディレクトリにアクセスした後、リモートノードRのキャッシュにアクセスすることが必須であり、処理時間が非常に長くなる状態である。
なお、あるノードから他のノードのキャッシュメモリに排他型で持ち出されたデータ(又はデータブロック)を、「排他型で持ち出されたデータ」という。
共有型要求の第2の状態は、図17(B)に示すように、ローカルノードLが要求するデータブロックが、あるキャッシュメモリ(リモートノードRのキャッシュメモリ)に持ち出されているが、書き換えられる可能性のない状態である。換言すれば、共有型要求の第2の状態は、要求するデータが共有型でリモートノードRに持ち出されている場合である。従って、リモートノードRが、そのキャッシュメモリに、共有型で最新データを保持している。この場合、要求するデータブロックをメモリから取得することができる。つまり、共有型要求の第2の状態は、ホームノードHへのアクセスだけが必要で、リモートノードRへのアクセスを必要としない。
なお、あるノードから他のノードのキャッシュメモリに共有型で持ち出されたデータ(又はデータブロック)を、「共有型で持ち出されたデータ」という。
共有型要求の第3の状態は、図17(C)に示すように、ローカルノードLが要求するデータブロックが、いずれのキャッシュメモリにも持ち出されていない状態である。換言すれば、共有型要求の第3の状態は、要求するデータがいずれのノードにも持ち出されていない場合である。従って、ホームノードHが、そのメモリ又はキャッシュメモリに、データを保持している。つまり、共有型要求の第3の状態の場合も、要求するデータブロックをメモリから取得することができる。この場合も、リモートノードRへのアクセスは発生しない。
排他型要求は、更に、図18に示すように、3つの状態に分けられる。
排他型要求の第1の状態は、図18(A)に示すように、ローカルノードLが要求するデータブロックが、あるキャッシュメモリ(リモートノードRのキャッシュメモリ)で書き換えられている可能性のある状態、即ち、要求するデータブロックが既に排他型であるキャッシュメモリに持ち出された状態である。換言すれば、排他型要求の第1の状態は、要求するデータが排他型でリモートノードRに持ち出されている場合である。従って、リモートノードRが、そのキャッシュメモリに、排他型で最新データを保持している。この場合、該キャッシュメモリから最新データブロックを取得する必要がある。また、必要に応じて該キャッシュメモリの該データブロックを無効にする必要がある。つまり、排他型要求の第1の状態は、ホームノードHのディレクトリにアクセスした後、リモートノードRのキャッシュにアクセスすることが必須であり、処理時間が非常に長くなる状態である。
排他型要求の第2の状態は、図18(B)に示すように、ローカルノードLが要求するデータブロックが、あるキャッシュメモリ(リモートノードRのキャッシュメモリ)に持ち出されたが、書き換えられる可能性のない状態である。換言すれば、共有型要求の第2の状態は、要求するデータが共有型でリモートノードRに持ち出されている場合である。従って、リモートノードRが、そのキャッシュメモリに、共有型で最新データを保持している。この場合、要求するデータブロックをメモリから取得することができるが、該キャッシュメモリの該データブロックを無効にする必要がある。つまり、排他型要求の第2の状態では、ホームノードHのディレクトリにアクセスした後、リモートノードRのキャッシュにアクセスすることは必要であるが、データそのものはホームノードHへのアクセスだけで取得できる。
排他型要求の第3の状態は、図18(C)に示すように、ローカルノードLが要求するデータブロックが、キャッシュメモリに持ち出されていない状態である。換言すれば、共有型要求の第3の状態は、要求するデータがいずれのノードにも持ち出されていない場合である。従って、ホームノードHが、そのメモリ又はキャッシュメモリに、データを保持している。この場合、要求するデータブロックをメモリから取得することができる。つまり、排他型要求の第3の状態では、リモートノードRへのアクセスは発生しない。
以上から判るように、共有型新規要求及び排他型新規要求ともに、新規の要求データは、要求するデータブロックが既に排他型でメモリから持ち出されている場合を除いて、ホームノードHのメモリから取得することができる。この場合、メモリからのデータの取得と同時にディレクトリ情報を読み出しても、処理の高速化には何ら支障とならない。この時、ディレクトリ情報は、メモリ又はメモリと同程度の読み出し速度の記憶装置に存在すれば良い。
換言すれば、ホームノードHにアクセスした後に、リモートノードRのキャッシュメモリから最新データを取得する必要があるのは、要求するデータブロックが排他型で持ち出されている場合のみである。この場合に、ホームノードHのメモリ上に存在する遅いディレクトリ格納部を読取った後に、リモートノードRのキャッシュメモリにアクセスするのは非効率である。従って、この場合は、速度の遅いメモリ上に存在するディレクトリ情報を読取るのではなく、速度の速いディレクトリキャッシュ格納部を使用するのが得策である。
以上から、ディレクトリキャッシュ格納部の使用は、基本的には、排他型でメモリから持ち出されたデータブロックについてのみに制限する。これにより、少ない容量のディレクトリキャッシュ格納部を効率的に使用することができると共に、プロセッサが他のキャッシュから最新データを取得する必要がある場合について、高速で最新データブロックを取得することができる。
次に、以上のようにディレクトリキャッシュ格納部の使用を制限した場合における、共有型要求の処理について検討する。
例えば、プロセッサからのデータ取得要求が共有型である場合において、他のキャッシュメモリにアクセスする必要が生じるのは、処理対象のデータブロックが他のキャッシュメモリに排他型で持ち出された場合のみである。
逆に、プロセッサからのデータ取得要求が排他型であり、かつ、処理対象のデータブロックが他のキャッシュメモリに既に共有型で持ち出された場合には、キャッシュメモリの無効化の要求を発行する必要がある。また、キャッシュメモリの無効化の要求を発行するために、この発行に先立って、ディレクトリ格納部から、持ち出し情報を読み出す必要がある。しかし、逆に言えば、無効化処理のみが必要であって、データブロック自体は、メモリから取得することができる。従って、データ取得要求の実行には、何ら支障はない。
なお、持ち出し情報は、図5を参照して後述するように、データブロックの持ち出され状態を示す情報であって、ディレクトリ情報の一部である。
次に、以上のようにディレクトリキャッシュ格納部の使用を制限した場合における、ディレクトリ格納部の必要性について検討する。
ディレクトリキャッシュ格納部に登録されているべき排他型の持ち出し情報が、リプレースによって追い出された場合、競合性のディレクトリミスが発生する。しかし、この場合でも、全ての情報をもつディレクトリ格納部を備えることにより、必要な情報を取得することができる。この場合、アクセス速度は低下するが、ディレクトリ格納部をアクセスすることにより、要求を処理することに支障はない。従って、前述したように、以上のようにディレクトリキャッシュ格納部の使用を制限した場合に予想される、競合性のディレクトリミスを容易に解決するために、ディレクトリキャッシュ格納部とは別に、全ての情報をもつディレクトリ格納部が設けられる。
一方、ディレクトリキャッシュ格納部における追い出し(Eviction)は、容量の少ないディレクトリキャッシュ格納部を効率良く使用するには、重要な課題である。例えば、ディレクトリキャッシュ格納部がすでにフルとなった状態で新たなエントリの登録が必要となった湯合、いずれかのデータ(ディレクトリ)を、ディレクトリキャッシュ格納部から追い出す必要がある。しかし、持ち出された全ブロックの情報を持つことが可能なディレクトリ格納部(フルディレクトリ)を設けることにより、ディレクトリの追い出しは容易に処理することができる。
具体的には、ライトスルー方式のディレクトリキャッシュ格納部においては、常にディレクトリ格納部に同一のエントリが存在する。従って、新たなエントリでいずれかのエントリを上書きすれば良い。また、ライトバック方式のディレクトリキャッシュ格納部においては、追い出されたエントリをディレクトリ格納部に書き込むだけで良い。
しかし、ディレクトリ格納部が存在しない場合には、ディレクトリ情報が失われても問題が起きないように、他の処理を実行する必要が生じる。例えば、キャッシュコピーを持つノードに対して、データの破棄とメモリへのライトバックを要求し、この処理を完了させなければならない。従って、追い出しが高い頻度で発生すれば、プロセッサの間における通信トラフィックが増大して、結果として、プロセッサの性能低下を招く。
次に、以上のようにディレクトリキャッシュ格納部の使用を制限した場合における、共有型で持ち出されたデータブロックの処理について検討する。
共有型で持ち出されたデータブロックについて、何ら情報を持たないということは不可能である。例えば、共有型で持ち出されたデータブロックを排他型で取得したい場合がある。この場合、共有型で持ち出されたデータブロックの情報が無ければ、共有型で持ち出されたデータブロックを知る手段が無く、これを無効化することができない。従って、キャッシュコヒーレンシーを保つことができない。
この場合、共有型で持ち出されたデータブロックを持つノードを、キャッシュメモリのスヌープにより探すことが考えられる。しかし、この場合でも、データブロックが持ち出されたという情報は、最低限必要である。データブロックが持ち出されたという情報が存在しない場合、共有型で持ち出されたデータブロックをどのノードが持っているかを確認するだけのために、全てのキャッシュメモリをスヌープしなければならない。
前述したように、基本的には、共有型で持ち出されたデータブロックの持ち出し情報は、ディレクトリキャッシュ格納部には格納されない。追い出しが発生する頻度を抑え、プロセッサ間の通信トラフィックの増大を抑えるためである。
しかし、例えばコンピュータシステムを起動して間もない期間等においては、ディレクトリキャッシュ格納部のエントリに十分余裕があると考えられる。この場合、共有型で持ち出されたデータブロックの持ち出し情報をディレクトリキャッシュ格納部に登録しても、殆ど追い出しは発生しないと考えられる。むしろ、この場合、プロセッサが他のキャッシュメモリからデータブロックを取得する方が、メモリからデータブロックを取得するよりも速い可能性もある。また、無効化の要求が必要な場合、無効化の要求をより早く発行することができる。
そこで、ディレクトリキャッシュ格納部には、共有型で持ち出されたデータブロックの持ち出し情報は、基本的には格納しないが、全く格納しないのではなく、ディレクトリキャッシュ格納部に空きがある場合には格納するようにしても良い。換言すれば、格納状態において、排他型で持ち出されたデータブロックの持ち出し情報が、共有型で持ち出されたデータブロックの持ち出し情報よりも優先的に格納されるようにすれば良い。また、リプレース時において、ディレクトリキャッシュ格納部に所定の割合よりも多く持ち出し情報が格納された場合、共有型で持ち出されたデータブロックの持ち出し情報が、排他型で持ち出されたデータブロックの持ち出し情報よりも優先的に追い出されるようにすれば良い。
一方、排他型で持ち出されたデータブロックの持ち出し情報を全てディレクトリキャッシュ格納部に格納する場合、ディレクトリの追い出しは、以下のように考えられる。即ち、排他型のエントリを追い出したい場合には、排他型でデータブロックを持つプロセッサに対して、ディレクトリキャッシュ格納部にある情報を用いて、メモリヘの処理対象のデータブロックのライトバック要求を発行しなければならない。しかし、共有型でデータブロックを持つプロセッサに対してまで、ライトバック要求を発行する必要はない。従って、排他型で持ち出されたデータブロックの持ち出し情報を全てディレクトリキャッシュ格納部に格納するだけでも、追い出しの発生の頻度の削減には、十分効果がある。
以上をまとめると、以下のようになる。即ち、ディレクトリキャッシュ格納部を効率的に使用するために、ディレクトリキャッシュ格納部への登録の対象が減らされる。このために、登録しなくても支障がないディレクトリ情報が、登録されないか、又は、優先的に追い出される。
登録しなくても支障がないディレクトリ情報とは、共有型で持ち出されたデータブロックのディレクトリ情報である。これは、以下の理由による。即ち、共有型で持ち出されたデータブロックは、他のキャッシュメモリにアクセスする必要がなく、メモリから直接データを得れば良い。従って、メモリアクセスとディレクトリアクセスとを同時に行って、必要なデータとディレクトリ情報とを並列に取得し、かつ、データがキャッシュメモリに持ち出されていないことを確認すれば良い。
一方、排他型で持ち出されたデータブロックの持ち出しは、他のキャッシュメモリヘのアクセスを発生させる。従って、できるだけ早く、持ち出し情報を知る必要がある。このため、排他型で持ち出されたデータブロックの持ち出し情報は、ディレクトリキャッシュ格納部に、必ず登録されるか、又は、優先的に登録される。
以上の理由で、ディレクトリ格納部とディレクトリキャッシュ格納部と双方が設けられる。ディレクトリキャッシュ格納部に、排他型で持ち出されたデータブロック及び共有型で持ち出されたデータブロックの持ち出し情報が存在しなくても、キャッシュシステムは正常に動作する。特に、共有型で持ち出されたデータブロックの持ち出し情報は、ディレクトリ格納部を参照すれば、十分である。
(第1の実施態様)
この実施態様では、ディレクトリキャッシュ格納部に加えてディレクトリが設けられ、かつ、ディレクトリキャッシュ格納部へのデータブロックの持ち出し情報の登録について以下のプロトコルが設定される。即ち、排他型で持ち出されたデータブロックの持ち出し情報は優先的に登録する。共有型で持ち出されたデータブロックの持ち出し情報は、ディレクトリキャッシュ格納部に空きがあれば、登録する。
図1は、本発明の一実施態様によるコンピュータシステムの構成を示す図である。図2は、図1に示すコントローラが実行する処理を説明する図である。
コンピュータシステムは、複数のノード1と、複数のI/O(Input/Output)装置2とを備える。ノード1は、ネットワークを介して、他のノード1と相互に接続される。複数のノード1は、これらの間でデータの送受信を行う。各ノード1に対応して、I/O装置2が設けられる。I/O装置2は、例えばハードディスク等の入出力装置である。
複数のノード1は同一の構成を備える。各ノード1は、プロセッサ11と、コントローラ12と、ディレクトリキャッシュ格納部13と、メモリ14と、ディレクトリ格納部15と、I/O制御部16とを備える。プロセッサ11は、キャッシュメモリ111を備える。
なお、前述したように、あるプロセッサが、あるデータブロックについてある要求を発行したとする。要求元のプロセッサの属するノードを「ローカルノード」と呼ぶ。また、処理対象のデータブロックを持つメモリが属するノードを「ホームノード」と呼ぶ。換言すれば、ホームノードは、処理対象のデータブロックを管理するディレクトリ格納部が存在するノードである。また、当該要求の結果として他のキャッシュメモリからの応答が発生する場合には、当該キャッシュメモリが属するノードを、「リモートノード」と呼ぶ。
プロセッサ11は、メモリ14に存在するプログラムを実行する。このために、プロセッサ11は、コントローラ12を介して、メモリアドレスを指定して、メモリ14を参照する。また、プロセッサ11は、コントローラ12を介して、他のノード1のプロセッサ11との間でデータの送受信を行う。更に、プロセッサ11は、コントローラ12を介して、メモリ14へデータを書込み、また、メモリ14からデータを読み出す。
メモリ14は、プロセッサ11がデータ141を格納するための主記憶装置である。メモリ14は、プログラムを含むデータ141を格納する。メモリ14が格納するデータ141は、複数のデータブロックを含む。データブロックは、メモリ14における書き込み及び読み出しのようなアクセスの単位である。「データブロック」は、データ141の一部を構成するデータであり、また、メモリ14においてデータブロックを格納する記憶領域である。
メモリ14は、複数のノード1により共有される。実際には、1個のメモリ14における複数のデータブロックが、予め各ノード1に割当てられる。換言すれば、ノード1毎に、各々が使用する複数のデータブロックが予め定められる。
キャッシュメモリ111は、メモリ14に格納されたデータ141のコピーを格納する。メモリ14のデータブロックがキャッシュメモリ111にコピーされたことを、「データブロックが持ち出された」という。
キャッシュメモリ111は、メモリ14よりも小容量かつ高速のメモリである。キャッシュメモリ111は、自ノード1のメモリ14のデータブロックだけでなく、他ノード1のメモリ14のデータブロックも格納する。換言すれば、自ノード1のキャッシュメモリ111は、他のノード1から持ち出したデータブロックを格納する。
ディレクトリ格納部15は、メモリ14に格納されたデータ141についてのディレクトリ情報(図2においては「情報」と表示)151を格納する。ディレクトリ情報151は、どのキャッシュがどのような状態のデータを持ち出したかを管理する情報である。従って、ディレクトリ情報151は、データブロックのコピーを所有するキャッシュメモリ111を指示する。ディレクトリ情報151は、少なくとも、データがキャッシュメモリ111にコピーされたこと即ち持ち出されたことを示す情報を含む。
ディレクトリ格納部15は、ディレクトリ情報151を格納する記憶領域であり、例えば、メモリ14である記憶装置と同様の速度で動作する記憶装置である。なお、ディレクトリ格納部15が、メモリ14に設けられるようにしても良い。
ディレクトリ格納部15は、メモリ14と同様に、複数のノード1により共有される。実際には、1個のディレクトリ格納部15における複数のエントリが、予め各ノード1に割当てられる。換言すれば、ノード1毎に、各々が使用する複数のエントリが予め定められる。なお、後述するように、ディレクトリ格納部15は、フルディレクトリである。
ディレクトリキャッシュ格納部13は、ディレクトリ格納部15のディレクトリ情報151の一部を格納する記憶領域である。ディレクトリキャッシュ格納部13は、ディレクトリ格納部15に格納されたディレクトリ情報151のコピー(図2においては「情報」と表示)131を格納する。
ディレクトリキャッシュ格納部13は、例えば、ディレクトリ格納部15である記憶装置よりも小容量でかつ高速であって、キャッシュメモリ111である記憶装置と同様の速度で動作する記憶装置である。ディレクトリキャッシュ格納部13は、ディレクトリ格納部15よりも小容量であるので、ディレクトリ格納部15のディレクトリ情報151の全てを格納することはできない。
コントローラ12は、プロセッサ11からの要求に応じて、ディレクトリキャッシュ格納部13、メモリ14、ディレクトリ格納部15にアクセスする。即ち、コントローラ12は、データを、メモリ14に格納し(又は書き込み)又はメモリ14から読み出す。コントローラ12は、ディレクトリ情報151を、ディレクトリ格納部15に格納し(又は書き込み)又はディレクトリ格納部15から読み出す。
コントローラ12は、プロセッサ11からの要求に応じて、I/O制御部16を介して、I/O装置2を制御する。I/O制御部16は、コントローラ12を介して、プロセッサ11からの要求を受信して、I/O装置2との間においてデータを送受信する。
コントローラ12は、プロセッサ11からの要求に応じて、他のノード1のコントローラ12とネットワークを介して通信を行うことによって、データの送受信を行う。具体的には、複数のノード1は、種々の要求やメモリ14に存在するデータブロックを、相互に送受信する。これにより、メモリ14は複数のノード1により共有される。
コントローラ12は、キャッシュメモリ111にコピーされたデータを、排他型と共有型とに分けて管理する。また、コントローラ12は、排他型で持ち出されたデータについてのディレクトリ情報151のディレクトリキャッシュ格納部13への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報151のディレクトリキャッシュ格納部13への格納の優先度よりも高くする。
具体的には、第1の実施態様においては、コントローラ12は、図3(A)に示す処理を実行する。図3(A)は、図1に示すコントローラが実行するディレクトリキャッシュの登録処理フローである。
キャッシュメモリ111へのデータの持ち出しが発生すると(ステップS1)、コントローラ12は、当該持ち出しが排他型での持ち出しか否かを調べる(ステップS2)。当該持ち出しが排他型での持ち出しである場合(ステップS2 YES)、コントローラ12は、当該排他型で持ち出されたデータについてのディレクトリ情報151のコピー131を、ディレクトリキャッシュ格納部13に格納する(ステップS4)。当該持ち出しが排他型での持ち出しでない場合、換言すれば、当該持ち出しが共有型での持ち出しである場合(ステップS2 NO)、コントローラ12は、更に、ディレクトリキャッシュ格納部13に空きがあるか否かを調べる(ステップS3)。ディレクトリキャッシュ格納部13に空きがある場合(ステップS3 YES)、ステップS4を実行する。これにより、共有型で持ち出されたデータについてのディレクトリ情報151のコピー131が、ディレクトリキャッシュ格納部13に格納される。ディレクトリキャッシュ格納部13に空きがない場合(ステップS3 NO)、処理を終了する。
以上の処理の結果、コントローラ12は、排他型で持ち出されたデータについてのディレクトリ情報151を共有型で持ち出されたデータについてのディレクトリ情報151よりも優先的にディレクトリキャッシュ格納部13に格納する。また、コントローラ12は、共有型で持ち出されたデータについてのディレクトリ情報151を、ディレクトリキャッシュ格納部13に空きがある場合に、ディレクトリキャッシュ格納部13に格納する。
これにより、ディレクトリキャッシュ格納部13を検索してヒットしない場合、ホームノードのメモリからデータを取得し、取得したデータをそのまま使用することができる。ディレクトリキャッシュ格納部13を検索してヒットした場合、ディレクトリキャッシュ格納部13上の持ち出し情報に基づいて、直ちにキャッシュメモリ111にアクセスしてデータを取得することができる。従って、ディレクトリキャッシュ格納部13を用いて、排他権を持ったキャッシュへのデータの持ち出しを、高速に知ることができ、キャッシュを非常に良い効率で使用することができる。
このように、全ての持ち出し情報を持つディレクトリ格納部15とディレクトリキャッシュ格納部13の双方が設けられ、かつ、ディレクトリキャッシュ格納部13に登録する情報が限定される。これにより、大容量を碓保することのできないディレクトリキャッシュ格納部13についても、リプレース等によってディレクトリ格納部15の利用に支障を生じること無く、要求元のプロセッサがキャッシュの状態情報を効率良く取得することができる。この結果、コンピュータシステムをより高速化することができる。
前述したように、排他型でキャッシュに持ち出されたデータを取得する際には、ホームノードのメモリからではなく持ち出したキャッシュからのデータ取得を必要とする。しかし、ホームノードにある大容量のディレクトリを調べた後にリモートノードのキャッシュアクセスを行っていては、処理時間が長大になる。そこで、排他型で持ち出されたデータについての情報をディレクトリキャッシュ格納部13に置く。これにより、処理時間の大幅な短縮が可能となる。データが排他型で持ち出されていない場合には、ホームノードのメモリから直接データを取得することが可能であるため、ディレクトリキャッシュ登録の優先度は下げることができる。
次に、ディレクトリ格納部15及びディレクトリキャッシュ格納部13について説明する。
コントローラ12は、ディレクトリ格納部15を用いて、メモリ14の内部状態を管理する。データがメモリ14からキャッシュメモリ111に持ち出された場合、コントローラ12は、ディレクトリ格納部15に、データが持ち出されたことを示す情報を設定する。この情報としては、例えば、ディレクトリ格納部15のエントリにおける所定の1ビットが用いられる。具体的には、当該エントリの有効性を示すビット(バリッドビット)が用いられる。
また、コントローラ12は、書き込みが可能となる排他権を取得しつつ持ち出されたことを示す情報、又は、書き込みができない共有状態で持ち出されたことを示す情報(状態情報)を、ディレクトリ格納部15に設定する。この状態情報としては、例えば、ディレクトリ格納部15のエントリにおける所定の2ビットが用いられる。具体的には、当該2ビットが「00」である場合にはinvalid(持ち出されなし)を示す。当該2ビットが「10」である場合には共有型で持ち出されていることを示す。当該2ビットが「11」である場合には排他型で持ち出されていることを示す。
コントローラ12は、ディレクトリ格納部15に、いずれのキャッシュメモリ111にそのデータが持ち出されたかを示す情報を設定する。この情報としては、例えば、ディレクトリ格納部15のエントリにおける所定の1ビットが用いられる。
図4は、図1に示すコントローラの構成の一例を示す図である。
コントローラ12は、図4に示すように、例えば、メモリバッファ121と、ディレクトリ情報バッファ122と、メモリ要求バッファ123と、ヒット判定回路124とを備える。
メモリ要求バッファ123は、プロセッサ11から、メモリアドレスAと共にメモリ14のリード要求を受信する。これに応じて、メモリ要求バッファ123は、メモリアドレスAを用いてディレクトリキャッシュ格納部13を検索する。メモリ要求バッファ123は、検索結果をヒット判定回路124に入力する。
ヒット判定回路124は、ディレクトリキャッシュ格納部13から入力された検索結果に基づいて、アドレスAがヒット(キャッシュヒット)したか否かを判定する。ヒット判定回路124は、判定結果をメモリ要求バッファ123に入力する。
ヒット判定回路124から入力された判定結果がキャッシュヒットである場合、メモリ要求バッファ123は、他ノード1のプロセッサ11に、データのリード要求を転送し、必要に応じて無効化要求を送信する。
一方、ヒット判定回路124から入力された判定結果がキャッシュヒットでない場合、メモリ要求バッファ123は、メモリアドレスAを用いてメモリ14にアクセスして、データブロックを読み出す。読み出されたデータブロックは、メモリバッファ121に一時的に保持される。これと並行して、メモリ要求バッファ123は、メモリアドレスAを用いてディレクトリ格納部15にアクセスして、ディレクトリ情報151を読み出す。読み出されたディレクトリ情報151は、ディレクトリ情報バッファ122に一時的に保持される。
この後、ディレクトリ情報バッファ122のディレクトリ情報151が、メモリ要求バッファ123に入力される。メモリ要求バッファ123は、ディレクトリ情報バッファ122から受信したディレクトリ情報151に基づいて、ディレクトリ更新情報即ち新しいディレクトリ情報151を生成する。更に、メモリ要求バッファ123は、生成したディレクトリ更新情報を、ディレクトリ情報バッファ122を介して、ディレクトリ格納部15に格納する。これにより、ディレクトリ格納部15のディレクトリ情報151が更新される。これと並行して、メモリ要求バッファ123は、生成したディレクトリ更新情報により、ディレクトリキャッシュ格納部13のディレクトリ情報151のコピー131を更新する。
ディレクトリ情報バッファ122のディレクトリ情報151は、メモリバッファ121に入力される。これに応じて、メモリバッファ121は、メモリ14から読み出されたデータブロックを、メモリリードデータとしてプロセッサ11に送信する。
図5は、ディレクトリ格納部15及びディレクトリキャッシュ格納部13のエントリ構造の一例を示す図である。
ディレクトリ格納部15は、複数のエントリを備える。エントリは、メモリ14の読み出しの単位即ちデータブロックに1対1に対応する。換言すれば、ディレクトリ格納部15は、メモリ14の複数のデータブロックの全てについて、対応するエントリを備える。従って、ディレクトリ格納部15はフルディレクトリである。
ディレクトリ格納部15のエントリは、ディレクトリ情報151を格納する。ディレクトリ情報151は、例えば、持ち出し場所を示す情報(以下、位置情報とも言う)と、持ち出され状態(持ち出し状態とも言う)とを含む。位置情報は、例えば、持ち出した先のキャッシュメモリの位置情報である。持ち出され状態は、例えば、共有型、排他型、又は、持ち出し無しのいずれかである。エントリにより、対応するデータブロックが定まる。従って、コントローラ12は、どのエントリにどのようなディレクトリ情報151が格納されているかに基づいて、どのデータブロックがどのような状態でどのキャッシュメモリ111に持ち出されたかを知る。
ディレクトリキャッシュ格納部13のエントリは、アドレスタグに対応して、キャッシュメモリ111に持ち出されたディレクトリ格納部15のディレクトリ情報151のコピー131を格納する。但し、実際には、図5のディレクトリキャッシュ格納部13のエントリは、位置情報を格納し、持ち出され状態は格納しない。従って、ディレクトリキャッシュ格納部13は、ディレクトリ格納部15のディレクトリ情報151の一部のコピー131を格納する。
図6は、ディレクトリ格納部15及びディレクトリキャッシュ格納部13のエントリ構造の他の一例を示す図である。
図6のディレクトリ格納部15は、図5のディレクトリ格納部15と同一の構成を備え、図5のディレクトリ格納部15と同一のディレクトリ情報151を格納する。図6のディレクトリキャッシュ格納部13は、図5のディレクトリキャッシュ格納部13と同一の構成を備えるが、図5のディレクトリ格納部15と同一のディレクトリ情報151を格納する。従って、図6のディレクトリキャッシュ格納部13のエントリは、アドレスタグに対応して、キャッシュメモリ111に持ち出されたディレクトリ格納部15のディレクトリ情報151のコピー131を格納する。従って、図6のディレクトリキャッシュ格納部13のエントリは、位置情報と、持ち出され状態とを格納する。
図5のディレクトリ格納部15及びディレクトリキャッシュ格納部13、又は、図6のディレクトリ格納部15及びディレクトリキャッシュ格納部13のいずれを用いるかは、例えば、コントローラシステムの規模等に応じて選択される。
次に、図7を参照して、共有型で持ち出されたデータの取得要求(以下、共有型のデータ取得要求)が発行された場合における、メモリ14からのデータの読み出しについて、説明する。図7は、メモリリードの動作を示す図である。
ノード1Bのプロセッサ11から、ノード1Aのメモリ14が持つアドレスd(図10参照)に対して、共有型のデータ取得要求が送出されたとする(#1)。共有型のデータ取得要求はコントローラ12を介して、ノード1Aに送出され(#2)、ノード1A内のコントローラ12がこれを受信して処理する。
コントローラ12は、ディレクトリキャッシュ格納部13を検索する。その結果、ミスヒットした場合(#3)、コントローラ12は、ディレクトリ格納部15からキャッシュメモリ111の持ち出し情報を読み出し(#4)、及びメモリ14からアドレスdのデータを読み出す(#4)。ディレクトリ格納部15の情報がデータが持ち出されていないか又は共有型で持ち出されたことを示す場合、コントローラ12は、読み出したデータをノード1Bに向けて送信する(#5)。
なお、ディレクトリ格納部15の情報がデータが排他型で持ち出されたことを示す場合、コントローラ12は、データを持ち出しているノードに対して、共有型のデータ取得要求を送信する。
ノード1Bにおいて、ノード1Bのコントローラ12は、ノード1Aのコントローラ12から送信されたデータを受信して、ノード1Bのプロセッサ11に転送する(#5)。更に、ノード1Aのコントローラ12は、ノード1Aのディレクトリ格納部15の更新を行い(#6)、ノード1Aのキャッシュメモリ111がデータを共有しているという情報を登録する。この際、ノード1Aのディレクトリキャッシュ格納部13に空きがある場合、ノード1Aのディレクトリ格納部15と同様にして、処理対象のデータブロックの共有情報を登録するようにしても良い。
ライトバック方式を採用する場合には、ディレクトリキャッシュ格納部13に空きがある場合には、ディレクトリ格納部15の更新を行わず、ディレクトリキャッシュ格納部13にのみ、新たなディレクトリ情報151を登録すれば良い。エントリのリプレースなどで当該エントリが追い出される場合に、初めてディレクトリ格納部15の更新を行うようにすれば良い。
次に、図8を参照して、共有型のデータ取得要求が発行された場合における、キャッシュメモリ111からのデータの読み出しについて、説明する。図8は、キャッシュリードの動作を示す図である。
ノード1Bのプロセッサ11より、ノード1Aのメモリ14が持つアドレスdに対して、共有型のデータ取得要求が送出されたとする(#1)。共有型のデータ取得要求は、ノード1Aに送出され(#2)、ノード1Aのコントローラ12がこれを受信して処理する。
コントローラ12は、ディレクトリキャッシュ格納部13を検索する。その結果、ヒットした場合(#3)、ノード1Aのコントローラ12は、ノード1Cに向けて共有型でのデータ取得要求を送信する(#4)。なお、ノード1Aのコントローラ12は、ノード1Cに向けて共有型でのデータ取得要求を送信したことを、ノード1Bのコントローラ12に送信する(#5)。
ノード1Cにおいて、コントローラは、この共有型でのデータ取得要求を受信して、プロセッサに対して、データブロックを要求する。この要求に応じて、プロセッサがデータブロックをコントローラに送信する。コントローラは、受信したデータをノード1Bに対して転送する(#5)。これと同時に、ノード1Cのコントローラは、ノード1Cのキャッシュメモリ上の排他型で持ち出されたデータブロックを共有型に遷移させる。
また、ノード1Cのキャッシュメモリのデータブロックが更新されて、ノード1Cのメモリと異なっている(データがdirtyである)場合、ノード1Cのコントローラは、当該データブロックを、ノード1Cのメモリに書き戻す。更に、ノード1Cのコントローラは、データブロックを共有型で転送したという情報を、アドレスdが属するノード1Aに対して送信する(#5)。
この情報を受信したノード1Aのコントローラ12は、ディレクトリ格納部15の情報を更新することにより(#6)、ノード1Cのキャッシュメモリ111及びノード1Bのキャッシュメモリ111がデータを共有しているという情報を登録する。
以上のように、排他型で持ち出されていたデータブロックが共有型に遷移したので、コントローラ12は、ディレクトリキャッシュ格納部13の情報を、削除するか、又は、共有型に更新する。なお、ライトバック方式を採用する場合、ディレクトリ格納部15の更新は行わず、ディレクトリキャッシュ格納部13のみを更新する。
図9は、共有型で持ち出されたデータブロックのリード処理フローを示す図であり、図7及び図8に示すデータブロックの読み出し処理について示す。
プロセッサ11は、コントローラ12に、メモリアドレスAの共有リード要求を行う(ステップS11)。これに応じて、コントローラ12は、ディレクトリキャッシュ格納部13の検索を行い(ステップS12)、キャッシュヒットしたか否かを判断する(ステップS13)。
キャッシュヒットしない場合(ステップS13 No)、コントローラ12は、ディレクトリ情報151をディレクトリ情報バッファ122に読み出し(ステップS14)、メモリ14からデータを読み出す(ステップS15)。
この後、コントローラ12は、読み出したディレクトリ情報151に基づいて、排他型の持ち出しがあるか否かを判断する(ステップS16)。排他型の持ち出しがない場合(ステップS16 No)、コントローラ12は、コピー要求元にデータを転送する(ステップS17)。この後、コントローラ12は、ディレクトリキャッシュ格納部13に空きがある場合、ディレクトリ情報151のコピー131を登録し、また、ディレクトリ情報151を更新する(ステップS18)。
ステップS16において、排他型の持ち出しがある場合(ステップS16 Yes)、ステップS19を実行する。
ステップS13において、キャッシュヒットした場合(ステップS13 Yes)、コントローラ12は、リモートノードのプロセッサ11にコピーバックを要求する(ステップS19)。
リモートノードは、要求されたデータブロックを、要求元であるホームノードのコントローラ12へ送信する(ステップS110)。これにより、リモートノードは共有型に遷移する。
この後、コントローラ12は、処理対象のデータブロックが「dirty」であるか否かを判断する(ステップS111)。「dirty」でない場合(ステップS111 No)、ステップS18を実行する。「dirty」である場合(ステップS111 Yes)、処理対象のデータブロックをメモリ14に書き戻し(ステップS112)、この後、ステップS18を実行する。
次に、図10を参照して、排他型で持ち出されたデータの取得要求(以下、排他型のデータ取得要求)が発行された場合における、メモリ14からのデータの読み出しと、キャッシュメモリ111の無効化とについて、説明する。図10は、メモリリードの動作を示す図である。
ローカルノードLであるノード1Cのプロセッサ11より、ホームノードHであるノード1Aのメモリ14が持つアドレスdに対して、排他型のデータ取得要求が送出されたとする。排他型のデータ取得要求はノード1Aに送出され、ノード1A内のコントローラ12がこれを受信して処理する。
コントローラ12は、ディレクトリキャッシュ格納部13を検索する。ディレクトリキャッシュ格納部13の検索の結果がヒットした場合には、コントローラ12は、ディレクトリキャッシュ格納部13からキャッシュメモリ111へのデータの持ち出し情報、及び、メモリ14からアドレスdのデータ141を読み出す。この場合、ディレクトリ格納部15のディレクトリ情報151は、例えば、アドレスdのデータ141が排他型で持ち出されており、持ち出し先(リモートノードR)がノード1Bのプロセッサ11であることを示す。従って、ディレクトリキャッシュ格納部13のディレクトリ情報151のコピー131も、ディレクトリ情報151と同様の内容を示す。以上の処理の結果に基づいて、コントローラ12は、リモートノードRであるノード1Bに対して、ノード1Bのキャッシュメモリ111にコピーされているアドレスdのデータ141について、そのコピー(コピーバック)と無効化とを要求する。
この要求を受信したノード1Bにおいて、コントローラ12は、メモリ14から読み出したデータ141をノード1Cに向けて送信する。また、コントローラ12は、メモリ14から読み出したデータ141をノード1Aに向けて送信し、かつ、ノード1Cのキャッシュメモリ111のアドレスdのデータ141を無効にする。これは、図18(A)の場合に相当する。
なお、ディレクトリキャッシュ格納部13の検索の結果がミスヒットした場合には、コントローラ12は、ディレクトリ格納部15からキャッシュメモリ111へのデータの持ち出し情報、及び、メモリ14からアドレスdのデータを読み出す。
また、ディレクトリ格納部15の情報がノード1Cのキャッシュメモリ111が共有型で持ち出していることを示す場合、コントローラ12は、メモリ14から読み出したデータ141をノード1Bに向けて送信し、また、ノード1Cのキャッシュメモリ111の該データブロックを無効化するため、ノード1Cに対して無効化要求を送信する。無効化要求を受信したノード1Cは、ノード1Cのキャッシュメモリ111の該データブロックを無効化する。これは、図18(B)の場合に相当する。
また、ディレクトリ格納部15の情報がデータが持ち出されていないことを示す場合、コントローラ12は、メモリ14から読み出したデータ141をノード1Cに向けて送信する。これは、図18(C)の場合に相当する。
ノード1Cにおいては、コントローラ12が要求したデータを受信して、これをプロセッサ11に転送する。コントローラ12は、ディレクトリ格納部15の更新を行い、ノード1Bのキャッシュメモリ111がデータを排他型で所有しているという情報を登録する。なお、ライトバック方式の場合には、この時点での更新は不要である。そして、コントローラ12は、ディレクトリキャッシュ格納部13にも新規エントリを登録する。
図11は、排他型で持ち出されたデータブロックのリード処理フローを示す図であり、図7及び図10に示すデータブロックの読み出し処理について示す。
プロセッサ11は、メモリアドレスAの排他リード要求を行う(ステップS21)。これに応じて、コントローラ12は、ディレクトリキャッシュ格納部13を検索し(ステップS22)、キャッシュヒットしたか否かを判断する(ステップS23)。
キャッシュヒットしない場合(ステップS23 No)、コントローラ12は、ディレクトリ格納部15から、ディレクトリ情報151をディレクトリ情報バッファ122に読み出し(ステップS24)、メモリ14からデータブロックを読み出す(ステップS25)。この後、コントローラ12は、読み出したディレクトリ情報151に基づいて、排他型の持ち出しがあるか否かを判断する(ステップS26)。
排他型の持ち出しがない場合(ステップS26 No)、コントローラ12は、更に、共有型の持ち出しがあるか否かを判断する(ステップS27)。
共有型の持ち出しがある場合(ステップS27 Yes)、コントローラ12は、リモートノードのプロセッサ11に、処理対象のデータブロックの無効化を要求する(ステップS28)。これに応じて、リモートノードのコントローラ12は、処理対象のデータブロックを無効化する(ステップS29)。
この後、リモートノードのコントローラ12は、要求元であるプロセッサ11にデータブロックを転送する(ステップS210)。データブロックを受信したコントローラ12は、ディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13に登録し、また、ディレクトリ情報151を更新して(ステップS211)、処理を終了する。
ステップS27において、共有型の持ち出しがない場合(ステップS27 No)、コントローラ12は、ステップS210を実行する。
ステップS26において、排他型の持ち出しがある場合(ステップS26 Yes)、コントローラ12は、ステップS212を実行する。
ステップS23において、キャッシュヒットした場合(ステップS23 Yes)、コントローラ12は、リモートノードのプロセッサ11にデータブロックのコピーバック及び無効化を要求する(ステップS212)。これに応じて、リモートノードのコントローラ12は、要求されたデータブロックを要求元であるホームノードに送信する(ステップS213)。
この後、コントローラ12は、処理対象のデータブロックが「dirty」であるか否かを判断する(ステップS214)。「dirty」でない場合(ステップS214 No)、ステップS211を実行する。「dirty」である場合(ステップS214 Yes)、処理対象のデータブロックをメモリ14に書き戻し(ステップS215)、この後、ステップS211を実行する。
次に、ディレクトリキャッシュ格納部13のエントリのリプレース処理について、説明する。
新たにディレクトリキャッシュ格納部13のエントリを登録する際に、既にエントリが満たされている場合がある。この場合、ディレクトリキャッシュ格納部13のエントリのリプレースが必要となる。
例えば、ライトスルー方式のディレクトリキャッシュ格納部13においては、その内容が常にディレクトリ格納部15の内容と一致しているので、当該エントリを選択して上書きすることができる。ライトバック方式のディレクトリキャッシュ格納部13においては、リプレースの対象となったエントリを、ディレクトリ格納部15に書き戻す。
リプレース対象となるディレクトリキャッシュ格納部13のエントリは、以下のようにして選択される。共有型のエントリが存在する場合、コントローラは、当該共有型のエントリをリプレースの対象として選択し、更に、その中から例えばLRU等のアルゴリズムによりリプレースすべきエントリを選択する。共有型のエントリが存在せず、排他型のエントリのみが登録されている場合、コントローラ12は、排他型のエントリをリプレースの対象として選択し、更に、その中から例えばLRU等のアルゴリズムによりリプレースすべきエントリを選択する。このように、共有型のエントリを優先的にリプレースすることにより、排他型のエントリを優先的に登録することができる。
図12は、共有型優先追い出しの処理フローを示す図である。
プロセッサ11が、コントローラ12にて、新規のディレクトリ情報151についてのディレクトリキャッシュ格納部13への登録要求を行う(ステップS31)。これに応じて、コントローラ12は、ディレクトリキャッシュ格納部13のエントリに空きがあるか否かを判断する(ステップS32)。
ディレクトリキャッシュ格納部13のエントリに空きがない場合(ステップS32 No)、コントローラ12は、更に、ディレクトリキャッシュ格納部13に共有型のエントリが存在するか否かを判断する(ステップS33)。
共有型のエントリが存在しない場合(ステップS33 No)、コントローラ12は、更に、登録要求が排他型であるか否かを判断する(ステップS34)。
登録要求が排他型である場合(ステップS34 Yes)、コントローラ12は、エントリの中から、追い出し対象のエントリをLRUにより選択し(ステップS35)、選択したエントリのディレクトリ情報151をディレクトリ格納部15に書き戻す(ステップS36)。この後、コントローラ12は、新規のディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13に登録して(ステップS37)、処理を終了する。
ステップS32において、ディレクトリキャッシュ格納部13のエントリに空きがある場合(ステップS32 Yes)、ステップS37を実行する。
ステップS33において、共有型のエントリが存在する場合(ステップS33 Yes)、共有型のエントリから追い出し対象のエントリをLRUで選択し(ステップS38)、この後、ステップS36を実行する。
ステップS34において、登録要求が排他型でない場合(ステップS34 No)、コントローラ12は、新規のディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13には登録しない(ステップS39)。従って、新規のディレクトリ情報151は、ディレクトリ格納部15にのみ登録される。
(第2の実施態様)
この実施態様では、ディレクトリキャッシュ格納部13に加えてディレクトリ格納部15が設けられ、かつ、ディレクトリキャッシュ格納部13へのデータブロックの持ち出し情報の登録について以下のプロトコルが設定される。即ち、排他型で持ち出されたデータブロックの持ち出し情報は必ず登録する。共有型で持ち出されたデータブロックの持ち出し情報は登録しない。
具体的には、第2の実施態様においては、コントローラ12は、図3(B)に示す処理を実行する。図3(B)は、第2の実施態様のコントローラが実行するディレクトリキャッシュの登録処理フローである。
キャッシュメモリ111へのデータの持ち出しが発生すると(ステップS5)、コントローラ12は、当該持ち出しが排他型での持ち出しか否かを調べる(ステップS6)。当該持ち出しが排他型での持ち出しである場合(ステップS6 YES)、コントローラ12は、当該持ち出されたデータについてのディレクトリ情報151のコピー131を、ディレクトリキャッシュ格納部13に格納する(ステップS7)。当該持ち出しが排他型での持ち出しでない場合、換言すれば、当該持ち出しが共有型での持ち出しである場合(ステップS6 NO)、コントローラ12は、ステップS7を実行することなく、処理を終了する。これにより、共有型で持ち出されたデータについてのディレクトリ情報151のコピー131は、ディレクトリキャッシュ格納部13に格納されない。
以上の処理の結果、コントローラ12は、排他型で持ち出されたデータについてのディレクトリ情報151を共有型で持ち出されたデータについてのディレクトリ情報151よりも優先的にディレクトリキャッシュ格納部13に格納する。換言すれば、コントローラ12は、排他型で持ち出されたデータについてのディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13に必ず格納し、共有型で持ち出されたデータについてのディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13に格納しない。
以上のように、排他権のある持ち出し情報のみを必ず登録する場合において、メモリアドレスdがディレクトリキャッシュ格納部13に存在するか検索しヒットしたことは、当該データブロックがメモリアドレスdが存在するキャッシュメモリ111に排他権を持って持ち出されたことを意味する。ヒットしないことは、データは持ち出されていないか、又は、排他権を持たずに持ち出され、メモリ14にあるデータが最新であることを意味している。従って、メモリアドレスdに対する要求が共有要求である場合において、ディレクトリキャッシュ格納部13にヒットしない場合、メモリ14にあるデータを使用すればよい。
この実施態様においては、排他型で持ち出されたデータブロックの持ち出し情報をディレクトリキャッシュ格納部13から追い出す場合、メモリ14ヘの書き戻し処理が必要である。このメモリ14ヘの書き戻し処理により、追い出される又は追い出された排他型で持ち出されたデータブロックが、メモリ14に書き戻される。
また、ディレクトリキャッシュ格納部13から排他型で持ち出されたデータブロックの持ち出し情報が溢れる場合、リプレース処理ではなく、リプレース処理の対象となったエントリに対応するデータブロックは、メモリ14に書き戻される。
例えば、ノード1Aのディレクトリキャッシュ格納部13に対して新規にディレクトリ情報151のコピー131を登録する必要が生じたとする。リプレース処理の対象となったエントリのディレクトリ情報151のコピー131を読み出した結果、ノード1Aのコントローラ12は、ノード1Bのキャッシュメモリが処理対象のデータブロックを所有していることを知る。この場合、ノード1Aのコントローラ12は、ノード1Bに対して、処理対象のデータブロックのメモリへの書き戻しを要求する。この要求を受信したノード1Bは、ノード1Bのキャッシュメモリ111に存在する処理対象のデータブロックを破棄する。処理対象のデータブロックが更新されている即ちdirtyである場合、処理対象のデータブロックをノード1Aに転送して、メモリ14に書き戻す。処理対象のデータブロックが更新されていない場合、メモリ14に書き戻すことは不要であるので、単にノード1Bのキャッシュメモリにおいて当該データブロックを無効化する。
(第3の実施態様)
この実施態様では、ディレクトリキャッシュ格納部13に加えてディレクトリ格納部15が設けられ、かつ、ディレクトリキャッシュ格納部13へのデータブロックの持ち出し情報の登録について以下のプロトコルが設定される。即ち、排他型で持ち出されたデータブロックの持ち出し情報は、基本的に登録するが、ディレクトリキャッシュ格納部13から溢れることを許容する。共有型で持ち出されたデータブロックの持ち出し情報は登録しない。従って、溢れた排他型で持ち出されたデータブロックの持ち出し情報は、ディレクトリ格納部15に登録されるのみである。
具体的には、コントローラ12は、排他型で持ち出されたデータについてのディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13に必ず格納し、共有型で持ち出されたデータについてのディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13に空きがある場合に格納する。
(第4の実施態様)
この実施態様では、ディレクトリキャッシュ格納部13に加えてディレクトリ格納部15が設けられ、かつ、ディレクトリキャッシュ格納部13へのデータブロックの持ち出し情報の登録について以下のプロトコルが設定される。即ち、排他型で持ち出されたデータブロックの持ち出し情報は必ず登録する。共有型で持ち出されたデータブロックの持ち出し情報は、ディレクトリキャッシュ格納部13に空きがあれば、登録する。
具体的には、コントローラ12は、排他型で持ち出されたデータについてのディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13から溢れることを許容してディレクトリキャッシュ格納部13に格納し、共有型で持ち出されたデータについてのディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13に格納しない。
この実施態様においては、第2の実施態様と同様に、排他型で持ち出されたデータブロックの持ち出し情報をディレクトリキャッシュ格納部13から追い出す場合、メモリ14ヘの書き戻し処理が必要である。このメモリ14ヘの書き戻し処理により、追い出される又は追い出された排他型で持ち出されたデータブロックの持ち出し情報が、メモリ14に書き戻される。
(第5の実施態様)
以上の実施態様においては、コンピュータシステムが、予め定められた1個のキャッシュプロトコルに従って、キャッシュコヒーレントを維持する。しかし、例えば、コンピュータシステムの状態又は規模等に応じて、キャッシュプロトコルを選択することができるようにしても良い。
図13は、本発明の一実施態様によるコンピュータシステムの他の構成を示す図である。図13のコンピュータシステムは、図1のコンピュータシステムが備える構成に加えて、更に、全体制御装置3を備え、また、各々のノード1にレジスタ17を備える。
全体制御装置3は、コンピュータシステムを制御するためのコンピュータであり、ネットワークを介することなく、各々のノード1と接続される。全体制御装置3は、ディレクトリキャッシュ格納部13を制御する制御情報を、各ノード1のレジスタ17に入力する。レジスタ17は、入力された制御情報を格納する。レジスタ17は、入力された制御情報に基づいて、コントローラ12におけるキャッシュプロトコルを設定する。これにより、コントローラ12は、レジスタ17に格納された制御情報に応じて、排他型で持ち出されたデータについてのディレクトリ情報151のコピー131及び共有型で持ち出されたデータについてのディレクトリ情報151のコピー131のディレクトリキャッシュ格納部13への格納の優先度のレベルを変更する。
従って、第1〜第4の実施態様に示すキャッシュプロトコルの中から、最も効率のよい制御を選択して、最も効率のよい制御プロトコルを選択することができる。例えば、コンピュータシステムの状態や規模等に応じて、最も効率のよい制御プロトコルを柔軟に選択することができる。
このように、ディレクトリ格納部15に全ての持ち出し情報を持ち、かつ、基本的には、ディレクトリキャッシュ格納部13には排他型で持ち出されたデータブロックのディレクトリを登録する。これにより、効率よくディレクトリ情報151のコピー131を持つことができる。この結果、追い出しの発生する頻度を低下させ、プロセッサ間の通信のトラフィックの増大を防ぎ、処理の高速化を達成することができる。
(第6の実施態様)
以上の実施態様においては、データが他のキャッシュメモリ111へ持ち出されている場合、ディレクトリ格納部15は、少なくとも、どのような状態で持ち出されているかという情報を持つ。ここで、持ち出しの状態とは、例えば、共有型又は排他型である。
しかし、例えば、最初は排他型で持ち出されたデータブロックが、処理の途中で、当該データブロックについての共有型の持ち出し要求が発生して、複数のキャッシュメモリ111にデータが存在する結果となる場合がある。
そこで、この実施態様においては、コントローラ12は、ディレクトリ格納部15及びディレクトリキャッシュ格納部13における状態情報を更新するようにしても良く、また、最初のままにするようにしても良い。
(第7の実施態様)
以上の実施態様においては、前述したように、排他型である場合には、必ずディレクトリキャッシュ格納部13にディレクトリ情報151のコピー131が存在する。従って、「ディレクトリ情報151のコピー131がディレクトリキャッシュ格納部13に存在せず」、かつ、「ディレクトリ情報151によりデータが持ち出されたことが示されている」場合、ディレクトリ情報151は、共有型でのデータの持ち出しを示すことになる。
そこで、この実施態様においては、コントローラ12は、ディレクトリ格納部15において、共有型での持ち出し情報と排他型での持ち出し情報とを、相互に区別しないようにしても良い。
(第8の実施態様)
以上の実施態様においては、ディレクトリ方式を採用するコンピュータシステムについて説明したが、本発明は、ディレクトリ方式とスヌープ方式とをあわせた方式(以下、ハイブリッド方式)に適用することができる。
図14は、本発明の一実施態様によるコンピュータシステムの更に他の構成を示す図である。図14のコンピュータシステムは、図1のコンピュータシステムが備える構成に加えて、更に、各々のノード1にタグコピー18を備える。
スヌープ方式においては、各プロセッサを接続するインタコネクトが、各キャッシュメモリのキャッシュタグのコピー(タグコピー)18を、その内部に保持する。タグコピー18は、各キャッシュタグに一対一に対応する。これは、1個のデータブロックについての状態情報を、分散管理している状態である。従って、スヌープ方式においては、データブロックの状態を知るためには、全てのキャッシュタグをコピーしたタグコピー18を保持している。このため、キャッシュシステムが巨大になり、キャッシュメモリの数に比例して、ネットワークの負荷が大きくなる傾向にある。
これに対して、ハイブリッド方式では、ディレクトリ内には、スヌープによってキャッシュコピーをもつキャッシュを特定できるので、どのキャッシュメモリが持ち出しを行ったかという情報を保持する必要がない。
本発明においては、図14に示すように、ハイブリッド方式においてディレクトリキャッシュ格納部をもち、前述したように、ディレクトリキャッシュ格納部13には、データが他のキャッシュメモリ111に排他型で持ち出されたことのみを登録する。これにより、ディレクトリキャッシュ格納部13のサイズを小さくすることができる。
また、この場合でも、ディレクトリキャッシュ格納部13にヒットした場合、コントローラ12がタグコピー18を参照してキャッシュタグをスヌープする。このスヌープにより、データを持ち出したキャッシュメモリ111を特定することができる。従って、更新情報の取得や無効化などの処理を行うことができる。この結果、ディレクトリキャッシュ格納部13に、どのキャッシュメモリ111がデータを持ち出したかという位置情報を格納する必要を無くすことができる。これにより、ディレクトリキャッシュ格納部13のサイズを小さくすることができる。
以上に加えて、コントローラ12は、メモリ14のデータがホームノード以外のプロセッサのキャッシュメモリ111に持ち出された場合にのみ、ディレクトリキャッシュ格納部13にディレクトリ情報151のコピー131を登録するようにしても良い。この場合、ディレクトリ情報151を利用するのは、要求元ノードとホームノードとが一致している場合に制限される。つまり、ローカルノードのプロセッサから出力された要求アドレスがローカルノードのものであれば、ディレクトリキャッシュ格納部13を参照し、そうでなければ直ちにスヌープを行う。ディレクトリキャッシュを参照した結果、ヒットしなければローカルノードのメモリを読み出し、ヒットすればこれは他キャッシュへの持ち出しを意味するので、持ち出し場所を特定するため直ちにスヌープを行う。
これにより、ホームノードのキャッシュメモリ111つまり自分自身のキャッシュメモリ111がデータを持ち出しているという情報は、不要とすることができる。換言すれば、この場合には、既にディレクトリキャッシュ格納部13にヒットした状態であるので、ディレクトリ格納部15の検索は行われない。ディレクトリキャッシュ格納部13にヒットしない場合、メモリ14から最新データを取得することができる。また、要求元ノードとホームノードが一致しなければ、直ちにキャッシュメモリ111のスヌープを行う。従って、ディレクトリ情報151のコピー131が、データがキャッシュメモリ111にコピーされたことを示す情報のみを含むようにすることができる。これにより、ディレクトリキャッシュ格納部13のサイズを小さくすることができる。
一方、プロセッサからの要求がデータの共有要求である場合、メモリ14から最新データを取得することにより、処理は完了する。
更に、プロセッサからの要求がデータの排他権の獲得である場合、要求するデータを所有する全てのキャッシュメモリ111において、無効化の処理を実行しなければならない。従って、データを持ち出している全てのキャッシュメモリ111を特定して、処理を実行する必要がある。具体的には、コントローラ12は、共有型の持ち出し情報まで含んで登録するディレクトリ格納部15を参照し、共有型の持ち出し情報の有無を調べ、共有型でのデータの持ち出しがあった場合、更に、キャッシュタグをスヌープすることにより、無効化の処理を行う。
(第9の実施態様)
以上の実施態様においては、キャッシュメモリ111にデータブロックが存在する場合にはキャッシュメモリ111からデータブロックを読み出す。しかし、処理対象のデータブロックがメモリ14に存在するデータブロックと同一である即ちcleanである場合、当該データブロックは、メモリ14から読み出すようにしても良い。換言すれば、メモリ14又はキャッシュメモリ111のいずれから読み出しても良い。
例えば、共有型で持ち出されたデータブロックのディレクトリ情報151のコピー131をディレクトリキャッシュ格納部13に格納する場合、コントローラ12は、ディレクトリキャッシュ格納部13の検索結果として、当該データブロックが共有型で持ち出されたことを知る。この場合において、当該データブロックをキャッシュメモリ111から読み出す方が、メモリ14から読み出すよりも効率的な場合があり得る。この場合には、共有型で持ち出されたデータブロックであっても、メモリ14からではなくキャッシュメモリ111から読み出すようにしても良い。
(第10の実施態様)
以上の実施態様においては、キャッシュプロトコルとしてMESIを採用するコンピュータシステムについて説明したが、本発明は、MESI以外のキャッシュプロトコルを採用するコンピュータシステムにも適用することができる。
例えば、MESI以外のキャッシュプロトコルとしては、M、S及びIの3状態からなるMSIや、MSIに所有(O;Owned)を加えたMOESI等がある。MOESIは以下のようなキャッシュプロトコルである。即ち、書き換えられたデータブロック(状態M)に対して更に共有要求があった場合に、状態Mは状態Oに遷移する。状態Oは、処理対象のデータブロックをメモリに書き戻す義務を有する状態である。共有要求を出して処理対象のデータブロックを取得したプロセッサにおいては、処理対象のデータブロックの状態は、状態Sとなる。
このようなキャッシュプロトコルにおいて、コントローラ12は、状態Mを排他型のデータとして、その他の状態S及びI、又は、状態S、I及びOを、共有型のデータとして管理する。コントローラ12は、排他型で持ち出されたデータについてのディレクトリ情報151のコピー131のディレクトリキャッシュ格納部13への格納の優先度を、共有型で持ち出されたデータについてのディレクトリ情報151のコピー131のディレクトリキャッシュ格納部13への格納の優先度よりも高くする。そして、コントローラ12は、少なくとも、排他型で持ち出されたデータについてのディレクトリ情報151のコピー131を、ディレクトリキャッシュ格納部13へ格納する。

Claims (10)

  1. データを格納するメモリと、
    前記データのコピーを格納するキャッシュメモリと、
    少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するディレクトリ格納部と、
    前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するディレクトリキャッシュ格納部と、
    前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部であって、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納する制御部とを備える
    ことを特徴とするコンピュータシステム
  2. 前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に必ず格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に格納しない
    ことを特徴とする請求項1記載のコンピュータシステム。
  3. 前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に必ず格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納する
    ことを特徴とする請求項1記載のコンピュータシステム。
  4. 前記制御部が、前記排他型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部から溢れることを許容して前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に格納しない
    ことを特徴とする請求項1記載のコンピュータシステム。
  5. 当該コンピュータシステムが、更に、前記ディレクトリキャッシュ格納部を制御する制御情報を格納するレジスタを備え、
    前記制御部が、前記レジスタに格納された前記制御情報に応じて、前記排他型で持ち出されたデータについてのディレクトリ情報及び前記共有型で持ち出されたデータについてのディレクトリ情報の前記ディレクトリキャッシュ格納部への格納の優先度のレベルを変更する
    ことを特徴とする請求項1記載のコンピュータシステム。
  6. 前記ディレクトリ情報が、前記データが前記キャッシュメモリにコピーされたことを示す情報のみを含む
    ことを特徴とする請求項1記載のコンピュータシステム。
  7. データを格納するメモリと、
    前記データのコピーを格納するキャッシュメモリと、
    少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するディレクトリ格納部と、
    前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するディレクトリキャッシュ格納部と、
    前記キャッシュメモリにコピーされた全てのデータについて、それらのタグであるキャッシュタグを格納するタグコピーと、
    前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部であって、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納し、前記ディレクトリキャッシュ格納部にヒットした場合、前記タグコピーに格納されたキャッシュタグをスヌープすることにより、前記ヒットしたディレクトリ情報に対応するデータを持ち出したキャッシュメモリを特定する制御部とを備える
    ことを特徴とするコンピュータシステム。
  8. メモリが、データを格納するステップと、
    キャッシュメモリが、前記データのコピーを格納するステップと、
    ディレクトリ格納部が、少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するステップと、
    ディレクトリキャッシュ格納部に、前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、
    前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部が、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納するステップとを備える
    ことを特徴とするコンピュータシステムの制御方法。
  9. メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部とを備えるコンピュータを制御するプログラムを格納するコンピュータ読取可能な記録媒体であって、
    前記プログラムは、前記コンピュータに、
    前記メモリが、データを格納するステップと、
    前記キャッシュメモリが、前記データのコピーを格納するステップと、
    前記ディレクトリ格納部が、少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するステップと、
    前記ディレクトリキャッシュ格納部に、前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、
    前記制御部が、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納するステップとを実行させるプログラムである
    ことを特徴とする記録媒体。
  10. メモリと、ディレクトリ格納部と、キャッシュメモリと、ディレクトリキャッシュ格納部と、前記ディレクトリキャッシュ格納部へのデータの格納を制御する制御部とを備えるコンピュータを制御するプログラムであって、
    前記コンピュータに、
    前記メモリが、データを格納するステップと、
    前記キャッシュメモリが、前記データのコピーを格納するステップと、
    前記ディレクトリ格納部が、少なくとも前記データが前記キャッシュメモリにコピーされたことを示す情報を含む、前記データについてのディレクトリ情報を格納するステップと、
    前記ディレクトリキャッシュ格納部に、前記ディレクトリ格納部に格納されたディレクトリ情報のコピーを格納するステップと、
    前記制御部が、前記メモリから前記キャッシュメモリにコピーされたデータを、排他型と共有型とに分けて管理すると共に、前記排他型で持ち出されたデータについてのディレクトリ情報を前記共有型で持ち出されたデータについてのディレクトリ情報よりも優先的に前記ディレクトリキャッシュ格納部に格納し、前記共有型で持ち出されたデータについてのディレクトリ情報を前記ディレクトリキャッシュ格納部に空きがある場合に格納するステップとを実行させる
    ことを特徴とするコンピュータの制御プログラム。
JP2011502506A 2009-03-06 2009-03-06 コンピュータシステム、制御方法、記録媒体及び制御プログラム Expired - Fee Related JP5445581B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2009/001020 WO2010100679A1 (ja) 2009-03-06 2009-03-06 コンピュータシステム、制御方法、記録媒体及び制御プログラム

Publications (2)

Publication Number Publication Date
JPWO2010100679A1 JPWO2010100679A1 (ja) 2012-09-06
JP5445581B2 true JP5445581B2 (ja) 2014-03-19

Family

ID=42709259

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011502506A Expired - Fee Related JP5445581B2 (ja) 2009-03-06 2009-03-06 コンピュータシステム、制御方法、記録媒体及び制御プログラム

Country Status (4)

Country Link
US (1) US8700863B2 (ja)
EP (1) EP2405361A4 (ja)
JP (1) JP5445581B2 (ja)
WO (1) WO2010100679A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012039008A1 (ja) * 2010-09-23 2012-03-29 富士通株式会社 情報処理装置、メモリ制御方法及びメモリ制御装置
EP2611123B1 (en) * 2011-12-29 2019-10-16 BlackBerry Limited Mobile communications device providing near field communication (NFC) security features and related methods
JP2013142947A (ja) * 2012-01-10 2013-07-22 Sony Corp 記憶制御装置、記憶装置および記憶制御装置の制御方法
US10339059B1 (en) * 2013-04-08 2019-07-02 Mellanoz Technologeis, Ltd. Global socket to socket cache coherence architecture
FR3022653B1 (fr) * 2014-06-20 2017-10-13 Bull Sas Reduction des evictions dans les repertoires de gestion de memoire cache
US9886382B2 (en) 2014-11-20 2018-02-06 International Business Machines Corporation Configuration based cache coherency protocol selection
US9727464B2 (en) 2014-11-20 2017-08-08 International Business Machines Corporation Nested cache coherency protocol in a tiered multi-node computer system
JP6428521B2 (ja) * 2015-07-23 2018-11-28 富士通株式会社 演算処理装置及び演算処理装置の制御方法
JP6613874B2 (ja) * 2015-12-24 2019-12-04 富士通株式会社 情報処理装置、演算処理装置および情報処理装置の制御方法
JP6631317B2 (ja) * 2016-02-26 2020-01-15 富士通株式会社 演算処理装置、情報処理装置および情報処理装置の制御方法
US10521112B2 (en) * 2017-03-17 2019-12-31 International Business Machines Corporation Layered clustered scale-out storage system
US10528482B2 (en) 2018-06-04 2020-01-07 International Business Machines Corporation Cache management
US10990529B2 (en) 2018-10-15 2021-04-27 Texas Instruments Incorporated Multi-power-domain bridge with prefetch and write merging

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11154115A (ja) * 1997-08-25 1999-06-08 Hewlett Packard Co <Hp> 分散メモリ・マルチプロセッサ・システム

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5832534A (en) * 1994-01-04 1998-11-03 Intel Corporation Method and apparatus for maintaining cache coherency using a single controller for multiple cache memories
US5809536A (en) 1996-12-09 1998-09-15 Intel Corporation, Inc. Method for reducing the number of coherency cycles within a directory-based cache coherency memory system uitilizing a memory state cache
US6721852B2 (en) 2001-10-17 2004-04-13 Sun Microsystems, Inc. Computer system employing multiple board sets and coherence schemes
US6868485B1 (en) 2002-09-27 2005-03-15 Advanced Micro Devices, Inc. Computer system with integrated directory and processor cache
US6981106B1 (en) * 2002-11-26 2005-12-27 Unisys Corporation System and method for accelerating ownership within a directory-based memory system

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11154115A (ja) * 1997-08-25 1999-06-08 Hewlett Packard Co <Hp> 分散メモリ・マルチプロセッサ・システム

Also Published As

Publication number Publication date
EP2405361A1 (en) 2012-01-11
EP2405361A4 (en) 2012-12-19
US20120005439A1 (en) 2012-01-05
JPWO2010100679A1 (ja) 2012-09-06
WO2010100679A1 (ja) 2010-09-10
US8700863B2 (en) 2014-04-15

Similar Documents

Publication Publication Date Title
JP5445581B2 (ja) コンピュータシステム、制御方法、記録媒体及び制御プログラム
US8996812B2 (en) Write-back coherency data cache for resolving read/write conflicts
US9170946B2 (en) Directory cache supporting non-atomic input/output operations
JP4848771B2 (ja) キャッシュ一貫性制御方法およびチップセットおよびマルチプロセッサシステム
JP4362454B2 (ja) キャッシュコヒーレンス管理装置およびキャッシュコヒーレンス管理方法
US8499124B2 (en) Handling castout cache lines in a victim cache
US8117397B2 (en) Victim cache line selection
US9176876B2 (en) Selective cache-to-cache lateral castouts
US8225045B2 (en) Lateral cache-to-cache cast-in
US8489819B2 (en) Victim cache lateral castout targeting
KR101639672B1 (ko) 무한 트랜잭션 메모리 시스템 및 그 동작 방법
US8606997B2 (en) Cache hierarchy with bounds on levels accessed
US8347037B2 (en) Victim cache replacement
US8347036B2 (en) Empirically based dynamic control of transmission of victim cache lateral castouts
US8949540B2 (en) Lateral castout (LCO) of victim cache line in data-invalid state
US8037252B2 (en) Method for reducing coherence enforcement by selective directory update on replacement of unmodified cache blocks in a directory-based coherent multiprocessor
US8095739B2 (en) Barriers processing in a multiprocessor system having a weakly ordered storage architecture without broadcast of a synchronizing operation
US6587922B2 (en) Multiprocessor system
US20100217939A1 (en) Data processing system
US7093075B2 (en) Location-based placement algorithms for set associative cache memory
US20110185128A1 (en) Memory access method and information processing apparatus
JP7139719B2 (ja) 情報処理装置、演算処理装置及び情報処理装置の制御方法
US7779205B2 (en) Coherent caching of local memory data
US11409656B2 (en) Semiconductor device
JP2008310414A (ja) コンピュータシステム

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130416

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130716

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131015

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20131022

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131126

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131209

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees