(57)【要約】  従来の情報処理装置において発生していた不要なメモリアクセスを削減し、メモリ帯域の圧迫を防止することを課題とする。この課題を解決するために、メモリ制御装置は、主記憶装置に格納されたデータのコピーを保持するキャッシュメモリが１つであるときに、当該キャッシュメモリに保持されたデータを削除した旨の通知を前記プロセッサから受けた場合において、データがプロセッサにより修正されておらず、かつ、整合状態が、ディレクトリ・キャッシュ上のディレクトリ情報と主記憶装置上のディレクトリ情報とが異なり、主記憶装置上のディレクトリ情報が、データのコピーがいずれのプロセッサにも保持されていないことを示している状態であると判定した場合は、主記憶装置へのアクセスを行わずにディレクトリ・キャッシュ上のディレクトリ情報を更新する。
2010052799.tif 000002
【特許請求の範囲】
【請求項１】
データを格納するとともに、当該データの状態をディレクトリ情報として管理する主記憶装置と、
前記主記憶装置に格納されたデータのコピーを一時的に保持する複数のキャッシュメモリと、
前記キャッシュメモリに保持されたデータを用いて処理を行う複数のプロセッサと、
前記主記憶装置に格納されたデータのディレクトリ情報を前記主記憶装置とは別に管理するとともに、自己が管理するディレクトリ情報と前記主記憶装置が管理するディレクトリ情報との整合状態を示す情報を管理するディレクトリ・キャッシュと、
前記ディレクトリ・キャッシュで管理される情報に基づき、前記キャッシュメモリと前記主記憶装置との間のデータ転送を制御するメモリ制御装置と、を備え、
前記メモリ制御装置は、前記主記憶装置に格納されたデータのコピーを保持するキャッシュメモリが１つであるときに、当該キャッシュメモリに保持されたデータを削除した旨の通知を前記プロセッサから受けた場合において、前記整合状態が、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ・情報とが異なる状態であると判定した場合は、前記ディレクトリ・キャッシュ上のディレクトリ情報を更新するとともに前記主記憶装置へアクセスして前記主記憶装置上のディレクトリ情報の書き戻しを行う一方、当該データが前記プロセッサにより修正されておらず、かつ、前記整合状態が、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報とが異なり、前記主記憶装置上のディレクトリ情報が、前記データのコピーがいずれの前記プロセッサにも保持されていないことを示している状態であると判定した場合は、前記主記憶装置へのアクセスを行わずに前記ディレクトリ・キャッシュ上のディレクトリ情報を更新することを特徴とする情報処理装置。
【請求項２】
前記ディレクトリ・キャッシュは、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報との整合状態を示す情報の一つとして、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報とが異なり、かつ、前記主記憶装置上のディレクトリ情報が、前記データのコピーがいずれの前記キャッシュメモリにも保持されていないことを示している状態を識別するＤＩ状態を備え、
前記メモリ制御装置は、前記キャッシュメモリに保持されたデータを削除した旨の通知を前記プロセッサから受けた場合、当該データが前記プロセッサにより修正されておらず、かつ、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報との整合状態がＤＩ状態であると判定すると、前記主記憶装置へのアクセスを行わずに前記ディレクトリ・キャッシュ上のディレクトリ情報を更新することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記メモリ制御装置は、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報との整合状態が、前記ディレクトリ・キャッシュ上に有効なディレクトリ情報が存在しないことを示すＮ状態であるときに、前記プロセッサから所定の要求を受けた場合において、前記主記憶装置上のディレクトリ情報が、前記データのコピーがいずれの前記プロセッサにも保持されていないことを示している状態であると判定した場合は、前記整合状態を前記Ｎ状態から前記ＤＩ状態に変更することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記メモリ制御装置は、ＭＥＳＩ(Modify/Exclusive/Share/Invalid)プロトコルによるメモリアクセス制御を行うことを特徴とする請求項１〜３の何れか１項に記載の情報処理装置。
【請求項５】
データを格納するとともに、当該データの状態をディレクトリ情報として管理する主記憶装置と、前記主記憶装置に格納されたデータのコピーを一時的に保持する複数のキャッシュメモリと、前記キャッシュメモリに保持されたデータを用いて処理を行う複数のプロセッサと、前記主記憶装置に格納されたデータのディレクトリ情報を前記主記憶装置とは別に管理するとともに、自己が管理するディレクトリ情報と前記主記憶装置が管理するディレクトリ情報との整合状態を示す情報を管理するディレクトリ・キャッシュとを有する情報処理装置に設けられ、前記ディレクトリ・キャッシュで管理される情報に基づき、前記キャッシュメモリと前記主記憶装置との間のデータ転送を制御するメモリ制御装置であって、
前記主記憶装置に格納されたデータのコピーを保持するキャッシュメモリが１つであるときに、当該キャッシュメモリに保持されたデータを削除した旨の通知を前記プロセッサから受けた場合において、前記整合状態が、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ・情報とが異なる状態であると判定した場合は、前記ディレクトリ・キャッシュ上のディレクトリ情報を更新するとともに前記主記憶装置へアクセスして前記主記憶装置上のディレクトリ情報の書き戻しを行う一方、当該データが前記プロセッサにより修正されておらず、かつ、前記整合状態が、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報とが異なり、前記主記憶装置上のディレクトリ情報が、前記データのコピーがいずれの前記プロセッサにも保持されていないことを示している状態であると判定した場合は、前記主記憶装置へのアクセスを行わずに前記ディレクトリ・キャッシュ上のディレクトリ情報を更新することを特徴とするメモリ制御装置。
【請求項６】
前記ディレクトリ・キャッシュは、自己が管理するディレクトリ情報と前記主記憶装置が管理するディレクトリ情報との整合状態を示す情報を管理し、当該整合状態を示す情報の一つとして、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報とが異なり、かつ、前記主記憶装置上のディレクトリ情報が、前記データのコピーがいずれの前記キャッシュメモリにも保持されていないことを示している状態を識別するＤＩ状態を備え、
前記キャッシュメモリに保持されたデータを削除した旨の通知を前記プロセッサから受けた場合、当該データが前記プロセッサにより修正されておらず、かつ、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報との整合状態がＤＩ状態であると判定すると、前記主記憶装置へのアクセスを行わずに前記ディレクトリ・キャッシュ上のディレクトリ情報を更新することを特徴とする請求項５に記載のメモリ制御装置。
【請求項７】
前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報との整合状態が、前記ディレクトリ・キャッシュ上に有効なディレクトリ情報が存在しないことを示すＮ状態であるときに、前記プロセッサから所定の要求を受けた場合において、前記主記憶装置上のディレクトリ情報が、前記データのコピーがいずれの前記プロセッサにも保持されていないことを示している状態であると判定した場合は、前記整合状態を前記Ｎ状態から前記ＤＩ状態に変更することを特徴とする請求項６に記載のメモリ制御装置。
【請求項８】
ＭＥＳＩ(Modify/Exclusive/Share/Invalid)プロトコルによるメモリアクセス制御を行うことを特徴とする請求項５〜７のいずれか１項に記載のメモリ制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、情報処置装置及びメモリ制御装置に関し、特に、主記憶装置への不要なアクセスを削減し、メモリ帯域の圧迫を防止できる情報処理装置及びメモリ制御装置に関するものである。
【背景技術】
【０００２】
従来、コンピュータの処理能力を向上させ、種々のタスクを実行するための技術として、複数のプロセッサにより複数のタスクを並列実行する情報処理装置としてのマルチプロセッサシステムが広く用いられている。【０００３】
このようなマルチプロセッサシステムでは、あるプロセッサにより更新されたデータがキャッシュメモリ内に滞留し、主記憶装置に最新のデータが存在しない場合がある。このとき、他のプロセッサがこのデータを参照／更新しようとすると、データのコヒーレンス（Data  Coherence：データの一貫性）が保たれず、正しい結果が得られないおそれがある。そこで、このような状況を防止するため、マルチプロセッサシステムでは、例えば、ディレクトリ情報を用いたメモリアクセス制御が行われている。【０００４】
具体的には、各キャッシュメモリ及び主記憶装置に格納されたデータには、そのデータの状態（例えば、更新されているか否か等。）を表すディレクトリ情報が関連付けられている。そして、キャッシュメモリと主記憶装置との間のデータ転送を制御するメモリ制御装置としてのメモリコントローラは、ディレクトリ情報を参照して、最新のデータが主記憶装置上に存在するのか、あるいは他のプロセッサのキャッシュメモリ上に存在するのかを判断する。これにより、各プロセッサは、常に最新のデータにアクセスすることができるようになり、データのコヒーレンスが保たれる。【０００５】
さらに近年では、主記憶装置に格納されたデータのディレクトリ情報を主記憶装置とは別に管理するディレクトリ・キャッシュを備えたマルチプロセッサシステムも開発されている。かかるマルチプロセッサシステムによれば、メモリコントローラは、主記憶装置に格納されたデータの状態を確認するために逐一主記憶装置にアクセスする必要がなくなり、主記憶装置へのアクセス回数が低減されるため、データ処理を高速化できる。【０００６】
【特許文献１】特開平５−１００９５２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、このような従来のメモリアクセス制御方法では、主記憶装置に対して不要なアクセスが生じる場合があり、メモリ帯域への圧迫が生じていた。以下、従来のマルチプロセッサシステムにおけるメモリアクセス制御方法について具体的に説明する。【０００８】
従来のマルチプロセッサシステムにおいて、例えば、各キャッシュメモリに保持されたデータ（キャッシュコピー）は、Ｍ：Modify(修正)、Ｅ：Exclusive（排他）、Ｓ：Share(共有)、Ｉ：Invalid（無効）のMESI状態で表される場合がある。また、例えば主記憶装置およびディレクトリ・キャッシュのディレクトリ情報は、Ｅ・Ｓ・Ｉの３つの状態を示す情報および主記憶装置に格納されたデータのコピーを保持するプロセッサを識別する情報を備える場合がある。【０００９】
また、例えばディレクトリ・キャッシュのエントリは、Ｎ：Null、Ｃ：Clean、Ｄ：Dirtyの３つの状態で定義される場合がある。ここで、Ｎは、ディレクトリ・キャッシュ上に有効な情報がないことを示し、この状態で定義されているエントリにはディレクトリ情報を書き込むことができる。Ｃは、ディレクトリ・キャッシュ上のディレクトリ情報が主記憶装置上のディレクトリ情報と同じであることを示し、この状態で定義されているエントリは、主記憶装置のディレクトリ情報を書き換えずに破棄できる。Ｄは、ディレクトリ・キャッシュ上のディレクトリ情報が主記憶装置上のディレクトリ情報と異なることを示しており、この状態のエントリを破棄する場合は、主記憶装置のディレクトリ情報をディレクトリ・キャッシュの情報に書き換えなくてはならない。【００１０】
そして、ディレクトリ・キャッシュの各エントリは、メモリコントローラが処理するアクセスの種類によってこれらのＮ、Ｃ、Ｄの状態間を遷移する。具体的には、図６に示すように、例えば、どのプロセッサのキャッシュメモリにも保持されていないデータに対する共有リード要求（ＲＴＳ：Request  To  Share）又は所有リード要求（ＲＴＯ：Request  To  Own）をプロセッサから受けた場合、メモリコントローラは、エントリの状態を「Ｎ」から「Ｄ」に変更する（ステップＳ０１）。また、エントリの状態が「Ｄ」であるときに、当該エントリに対応するキャッシュラインのEviction（削除）通知をプロセッサから受けた場合、あるいは容量不足等によりディレクトリ・キャッシュからエントリが追い出される場合、メモリコントローラは、当該エントリの状態を「Ｎ」に変更する（ステップＳ０２）。【００１１】
また、エントリの状態が「Ｄ」であるときに、いずれかのプロセッサ（の使用するキャッシュメモリ）がＭ状態で保持するキャッシュラインに対するＲＴＳを受けた場合、メモリコントローラは、当該エントリの状態を「Ｄ」から「Ｃ」に変更する（ステップＳ０３）。また、エントリの状態が「Ｃ」であるときに、ＲＴＯを受けた場合、あるいはＭ状態で保持されていないキャッシュラインに対するＲＴＳを受けた場合、メモリコントローラは、当該エントリの状態を「Ｃ」から「Ｄ」に変更する（ステップＳ０４）。【００１２】
また、エントリの状態が「Ｃ」であるときに、プロセッサからキャッシュラインのEviction通知を受けたとき、あるいはディレクトリ・キャッシュからエントリがPurgeされるとき(追い出されるとき)、メモリコントローラは、当該エントリの状態を「Ｃ」から「Ｎ」に変更する（ステップＳ０５、Ｓ０６）。なお、図６において、太線で表された矢印は、メモリコントローラが該当する処理（ステップＳ０２、Ｓ０３、Ｓ０５の処理）を行う際に、主記憶装置へのアクセスが発生することを示している。【００１３】
そして、メモリコントローラは、プロセッサから各種要求を受けた際、これらエントリの状態に基づき主記憶装置へのアクセスを行うか否かを判断する。【００１４】
ここで、メモリコントローラによる主記憶装置への不要なアクセスが生じる場合について、図７を用いて具体的に説明する。図７は、従来のマルチプロセッサシステムにおけるメモリアクセス制御方法を説明するための図である。なお、初期状態において、主記憶装置のＸ番地に格納されているデータ(Payload)「aaaaaa」は、どのキャッシュメモリにも格納されておらず、主記憶装置内にＩ状態で保持されているものとする。また、このマルチプロセッサシステムは、ライトバック方式のディレクトリ・キャッシュを採用している。ライトバック方式とは、データをキャッシュメモリに書き込む際に、当該データをキャッシュメモリと主記憶装置の両方に対して同時には書き込みを行わず、当該データがキャッシュメモリからPurgeされる場合等に、当該データを主記憶装置に書き込む方式である。【００１５】
図７に示すように、プロセッサＡが、主記憶装置に格納されているデータ「aaaaaa」を共有するためにメモリコントローラに対してＲＴＳを送信すると（ステップＳ１１）、メモリコントローラは、主記憶装置に対しRead要求を行い（ステップＳ１２）、データ「aaaaaa」を取得する（ステップＳ１３）。そして、メモリコントローラは、取得したデータ「aaaaaa」をプロセッサＡに送信し（ステップＳ１４）、当該データを取得したプロセッサＡは、自己のキャッシュメモリのディレクトリ情報を「Ｓ」に更新する。なお、ライトバック方式を採用するマルチプロセッサシステムにおいて、主記憶装置のディレクトリ情報の書き換えはこの時点では発生しないため、主記憶装置のデータ「aaaaaa」はＩ状態のままである。【００１６】
また、この際、メモリコントローラは、ディレクトリ・キャッシュのディレクトリ情報に、データ「aaaaaa」の状態及びこのデータを保持するプロセッサの情報として「Ｓ：Sharer=A」を記録するとともに、アドレス情報として「Ｘ番地」を記録する。そして、メモリコントローラは、ディレクトリ・キャッシュ上のディレクトリ情報「Ｓ：Sharer=A」と主記憶装置上のディレクトリ情報「Ｉ：undefined」とが異なるため、このデータ「aaaaaa」に対応するエントリの状態（ステート）を「Ｄ」とする。【００１７】
続いて、キャッシュメモリに収容しきれない、あるいは不要となった等の理由でキャッシュラインを追い出す場合、プロセッサＡは、メモリコントローラに対してEviction通知を送信する（ステップＳ１５）。このEviction通知は、キャッシュメモリ内のデータを削除する際に送信される信号である。そして、Eviction通知を受け取ったメモリコントローラは、ディレクトリ・キャッシュにおけるデータ「aaaaaa」に対応するエントリを無効化（Ｎ状態に遷移）する。【００１８】
このとき、当該エントリの状態が「Ｄ」である場合、主記憶装置上のディレクトリ情報を書き戻してディレクトリ・キャッシュ上のディレクトリ情報と一致させなければならないため、メモリコントローラは、主記憶装置へのアクセス（Read-Modify-Write）を行う（ステップＳ１６）。ここで、キャッシュメモリ上のキャッシュコピーが修正されておらず、かつ、主記憶装置に格納されたデータ「aaaaaa」のディレクトリ情報が元々Ｉ状態である場合、Eviction通知の処理の前後において主記憶装置の内容（データおよびディレクトリ情報）に変化はない。つまり、この場合における主記憶装置へのアクセスは本来不要なアクセスである。【００１９】
しかし、従来のマルチプロセッサシステムにおいて、メモリコントローラは、ディレクトリ・キャッシュ上のディレクトリ情報のみでは主記憶装置内のディレクトリ情報の内容を判断できないため、本来不要であるにもかかわらずメモリアクセスを行ってしまう。【００２０】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、主記憶装置への不要なアクセスを削減し、メモリ帯域の圧迫を防止することのできる情報処理装置及びメモリ制御装置を提供することを目的とする。
【課題を解決するための手段】
【００２１】
上述した課題を解決し、目的を達成するため、本願に開示するマルチプロセッサシステムは、一つの態様として、データを格納するとともに、当該データの状態をディレクトリ情報として管理する主記憶装置と、前記主記憶装置に格納されたデータのコピーを一時的に保持する複数のキャッシュメモリと、前記キャッシュメモリに保持されたデータを用いて処理を行う複数のプロセッサと、前記主記憶装置に格納されたデータのディレクトリ情報を前記主記憶装置とは別に管理するとともに、自己が管理するディレクトリ情報と前記主記憶装置が管理するディレクトリ情報との整合状態を示す情報を管理するディレクトリ・キャッシュと、前記ディレクトリ・キャッシュで管理される情報に基づき、前記キャッシュメモリと前記主記憶装置との間のデータ転送を制御するメモリコントローラと、を備え、前記メモリコントローラは、前記主記憶装置に格納されたデータのコピーを保持するキャッシュメモリが１つであるときに、当該キャッシュメモリに保持されたデータを削除した旨の通知を前記プロセッサから受けた場合において、前記整合状態が、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ・情報とが異なる状態であると判定した場合は、前記ディレクトリ・キャッシュ上のディレクトリ情報を更新するとともに前記主記憶装置へアクセスして前記主記憶装置上のディレクトリ情報の書き戻しを行う一方、当該データが前記プロセッサにより修正されておらず、かつ、前記整合状態が、前記ディレクトリ・キャッシュ上のディレクトリ情報と前記主記憶装置上のディレクトリ情報とが異なり、前記主記憶装置上のディレクトリ情報が、前記データのコピーがいずれの前記プロセッサにも保持されていないことを示している状態であると判定した場合は、前記主記憶装置へのアクセスを行わずに前記ディレクトリ・キャッシュ上のディレクトリ情報を更新する。
【発明の効果】
【００２２】
本願の開示する情報処理装置及びメモリ制御装置の一つの態様によれば、従来のマルチプロセッサシステムにおいて発生していた主記憶装置への不要なアクセスが削減されるため、メモリ帯域の圧迫を防止できるという効果を奏する。
【図面の簡単な説明】
【００２３】
【図１】図１は、本実施例にかかるマルチプロセッサシステムの構成の一例を示す図である。
【図２】図２は、メモリ上のキャッシュライン及び同キャッシュラインに含まれるディレクトリ情報のbit構成例を示す図である。
【図３】図３は、ディレクトリ・キャッシュのエントリのbit構成例を示す図である。
【図４】図４は、ディレクトリ・キャッシュのエントリの状態遷移の一例を説明するための図である。
【図５】図５は、本実施例にかかるマルチプロセッサシステムのメモリアクセス制御方法の一例を説明するための図である。
【図６】図６は、従来におけるディレクトリ・キャッシュのエントリの状態遷移の一例を説明するための図である。
【図７】図７は、従来のマルチプロセッサシステムにおけるメモリアクセス制御方法を説明するための図である。
【符号の説明】
【００２４】
Ｓ    マルチプロセッサシステム
１    システムボード
１０    メモリ（主記憶装置）
１１    キャッシュメモリ
１２    プロセッサ
１３    ディレクトリ・キャッシュ
１４    メモリコントローラ
１５    ノード内スイッチ
１６    I/O装置
１７    ノード間スイッチ
１００    状態管理部
【発明を実施するための最良の形態】
【００２５】
以下に添付図面を参照して、本願の開示する情報処理装置及びメモリ制御装置の実施例を図面に基づいて詳細に説明する。
【実施例】
【００２６】
まず、本実施例にかかるマルチプロセッサシステムの構成について図面を用いて説明する。図１は、本実施例にかかるマルチプロセッサシステムの構成の一例を示す図である。なお、本実施例にかかるマルチプロセッサシステムは、ｃｃＮＵＭＡ(Cache  Coherent  Non-Uniform  Memory  Access)方式を採用するマルチプロセッサシステムとするが、必ずしもこの方式を採用する必要はなく、１つのシステムボードで構成されていてもよい。ｃｃＮＵＭＡ方式とは、それぞれプロセッサを有する複数のシステムボードを相互に接続することにより、プロセッサが他のシステムボードのローカルメモリにアクセスするため、各プロセッサからのメモリアクセス時間が均一でないが、キャッシュ・コヒーレンスを維持することができる方式である。【００２７】
図１に示すように、本実施例にかかるマルチプロセッサシステムＳは、２つのシステムボード１ａ，１ｂを有している。システムボード１ａは、メモリ１０ａと、プロセッサ１２ａ〜１２ｄと、ディレクトリ・キャッシュ１３ａと、メモリコントローラ１４ａと、ノード内スイッチ１５ａとを有する。また、システムボード１ｂは、メモリ１０ｂと、プロセッサ１２ｅ〜１２ｈと、ディレクトリ・キャッシュ１３ｂと、メモリコントローラ１４ｂと、ノード内スイッチ１５ｂとを有する。【００２８】
メモリ１０は、主記憶装置に相当するものであり、種々のデータを格納するとともに、当該データの状態をディレクトリ情報として管理する。ここで、ディレクトリ情報について説明する。図２は、メモリ上のキャッシュライン及び同キャッシュラインに含まれるディレクトリ情報のbit構成例を示す図である。【００２９】
図２に示すように、メモリ１０上にある１つのキャッシュラインは、１２８byteのPayloadと、３２bitのDIR（ディレクトリ情報）と、９６bitのECC(Error  Correcting  Code)とを含む。Payloadは、ディレクトリ情報やECC等の付加的な情報を除いたデータ本体を示す。ECCは、データのエラーを検出して自動修正を行う。【００３０】
また、ディレクトリ情報は、３２bitのうち、２bitが当該データ(Payload)の状態を表す情報として使用され、２０bitが所有者／共有者を表す情報として使用され、残りの１０bitは使用されない。【００３１】
各データの状態は、Ｅ（Exclusive：排他）、Ｓ（Share：共有）、Ｉ（Invalidate：無効)の３つの状態により表される。Ｅとは、当該データがいずれか１つのキャッシュメモリ１１に保持されており、当該キャッシュメモリ１１が保持するキャッシュコピーと当該データとが一致するかどうか分からない（キャッシュコピーがメモリ上のデータから変更されるかもしれない）状態を示す。Ｓとは、当該データを保持するキャッシュメモリ１１が複数存在し、各キャッシュメモリ１１が保持するキャッシュコピーと当該データとが一致する状態を示す。Ｉとは、当該データを保持するキャッシュメモリ１１が存在しない状態を示す。【００３２】
また、所有者／共有者を表す情報は、メモリ１０に格納されたデータのコピーを保持するプロセッサ１２を識別する情報であり、各プロセッサ１２の識別番号等で表される。例えば、あるデータをプロセッサ１２ａ及びプロセッサ１２ｄが共有している場合、所有者／共有者を表す情報は、「Sharer=12a,12d」となる。【００３３】
プロセッサ１２ａ〜１２ｈは、それぞれキャッシュメモリ１１ａ〜１１ｈを有する。キャッシュメモリ１１は、メモリ１０に格納されたデータのコピーを一時的に保持する。そして、プロセッサ１２は、自己の有するキャッシュメモリ１１に保持されたデータを用いて各種処理を行う。【００３４】
ここで、キャッシュメモリ１１は、キャッシュコピーの状態を示すディレクトリ情報を有する。キャッシュコピーの状態は、上述したＥ・Ｓ・ＩにＭ（Modified：修正）を加えた４つの状態により表される。Ｍは、メモリ１０に格納されたあるデータのコピーを自分だけが保持し、当該コピー（キャッシュコピー）がメモリ１０上のデータから変更されている状態を示す。Ｅは、メモリ１０に格納されたあるデータのコピーを自分だけが保持し、当該コピーとメモリ上のデータとが一致する状態を示す。Ｓは、メモリ１０に格納されたあるデータのコピーを自分を含めた複数のプロセッサ１２が保持し、各プロセッサ１２が保持するキャッシュコピーとメモリ１０上にあるデータとが一致する状態を示す。Ｉは、キャッシュコピーを保持していない状態を示す。【００３５】
このように、本実施例にかかるマルチプロセッサシステムＳでは、ＭＥＳＩプロトコルによるメモリアクセス制御を行う。【００３６】
ディレクトリ・キャッシュ１３は、メモリ１０に格納されたデータのディレクトリ情報をメモリ１０とは別に管理するとともに、自己が管理するディレクトリ情報とメモリ１０が管理するディレクトリ情報との整合状態を示す情報を管理する。ここで、ディレクトリ・キャッシュ１３のエントリのbit構成について説明する。図３は、ディレクトリ・キャッシュ１３のエントリのbit構成例を示す図である。【００３７】
図３に示すように、ディレクトリ・キャッシュ１３のエントリは、アドレス情報（アドレス：２３bit）と、自己が管理するディレクトリ情報とメモリ１０が管理するディレクトリ情報との整合状態を示す情報（ステート：２bit）と、ディレクトリ情報（２２bit）とを含む。アドレス情報とは、当該エントリにより管理されるデータがメモリ１０上のどの位置に格納されているかを示す情報である。また、ディレクトリ・キャッシュ１３が管理するディレクトリ情報は、メモリ１０が管理するディレクトリ情報と同様、対応するデータの状態を表す情報（Ｅ／Ｓ／Ｉ）と、所有者／共有者を表す情報とを含む。【００３８】
自己が管理するディレクトリ情報とメモリ１０が管理するディレクトリ情報との整合状態を示す情報（以下、「ステート」とする。）は、Ｎ(Null)、Ｃ(Clean)、Ｄ(Dirty)及びＤＩ(Dirty  formerly  Invalid)の４つで示される。【００３９】
具体的には、Ｎは、ディレクトリ・キャッシュ１３上に有効な情報がないことを示し、この状態で定義されているエントリにはディレクトリ情報を書き込むことができる。Ｃは、ディレクトリ・キャッシュ１３上のディレクトリ情報が主記憶装置上のディレクトリ情報と同じであることを示し、この状態で定義されているエントリは、主記憶装置のディレクトリ情報を書き換えずに破棄できる。Ｄは、ディレクトリ・キャッシュ１３上のディレクトリ情報が主記憶装置上のディレクトリ情報と異なることを示しており、この状態のエントリを破棄する場合は、主記憶装置のディレクトリ情報をディレクトリ・キャッシュの情報に書き換えなくてはならない。【００４０】
また、ＤＩは、ディレクトリ・キャッシュ１３上のディレクトリ情報とメモリ１０上のディレクトリ情報とが異なり、かつ、メモリ１０上のディレクトリ情報がＩであることを識別するステートである。【００４１】
このように、本実施例にかかるマルチプロセッサシステムＳでは、従来、Ｎ・Ｃ・Ｄの３つで表されていたステートに新たにＤＩを加えることにより、従来のマルチプロセッサシステムにおいて発生していた不要なメモリアクセスを削減する。【００４２】
なお、本実施例においては、１つのメモリコントローラが扱うメモリを最大１ＴＢ(すなわち、アドレスは[39:0]の40bitで表せる)とする。また、ディレクトリ・キャッシュ１３のキャッシュラインのサイズはメモリ１０のキャッシュラインと同様である。また、ディレクトリ・キャッシュ１３はセット・アソシアティブ方式を採用しており、アドレスの[16:7]をディレクトリ・キャッシュ１３の索引情報であるｉｎｄｅｘとして使用する。なお、本実施例に示すディレクトリ・キャッシュ１３の構成はあくまで一例であり、この構成に限定するものではない。【００４３】
また、メモリコントローラ１４は、キャッシュメモリ１１とメモリ１０との間のデータ転送を制御するものであり、状態管理部１００と、データ転送部１１０とを有する。状態管理部１００は、プロセッサ１２から取得する各種要求に基づいて、ディレクトリ・キャッシュ１３上のディレクトリ情報を更新する。データ転送部１１０は、ディレクトリ・キャッシュ１３で管理される情報（アドレス情報、ステート、ディレクトリ情報）に基づき、キャッシュメモリ１１とメモリ１０との間のデータ転送を行う。【００４４】
また、ノード内スイッチ１５は、メモリコントローラ１４の指示に基づき、メモリ１０とプロセッサ１２との間でデータや要求の転送を行うデータ転送装置の一種である。さらに、本実施例において、システムボード１ａ，１ｂは、ノード間スイッチ１７により相互に接続される。これにより、各プロセッサ１２は、他のシステムボード１の有するメモリ１０にアクセスすることが可能となる。また、各システムボード１ａ，１ｂには、磁気ディスク装置（ＨＤＤ）、ネットワークカード、マウスやキーボードなどのI/O装置１６ａ，１６ｂが接続される。【００４５】
次に、本実施例にかかるマルチプロセッサシステムＳにおける、ディレクトリ・キャッシュ１３のエントリの状態遷移について図面を用いて説明する。図４は、ディレクトリ・キャッシュ１３のエントリの状態遷移の一例を説明するための図である。なお、ディレクトリ・キャッシュ１３のエントリの状態の更新は、メモリコントローラ１４が備える状態管理部１００により行われる。【００４６】
本実施例にかかるマルチプロセッサシステムＳは、従来のマルチプロセッサシステムにおける状態遷移（ステップＳ２１〜Ｓ２６の処理に伴う状態遷移）に加え、ステップＳ２７〜Ｓ３０の処理に伴う状態遷移を有する。具体的には、図４に示すように、エントリの状態が「Ｎ」のときに、プロセッサ１２からＲＴＳ又はＲＴＯを受けた場合であって、メモリ１０上のディレクトリ情報がＩでない場合、状態管理部１００は、エントリの状態を「Ｄ」に変更する（ステップＳ２１）。また、エントリの状態が「Ｄ」のときに、当該エントリに対応するキャッシュラインのEviction（削除）通知をプロセッサ１２から受けた場合、あるいはディレクトリ・キャッシュ１３からエントリが追い出される場合、状態管理部１００は、当該エントリの状態を「Ｎ」に変更する（ステップＳ２２）。【００４７】
また、エントリの状態が「Ｄ」のときに、いずれかのプロセッサ１２がＭ状態で保持するキャッシュラインに対するＲＴＳを受けた場合、状態管理部１００は、当該エントリの状態を「Ｃ」に変更する（ステップＳ２３）。また、エントリの状態が「Ｃ」のときに、プロセッサ１２からＲＴＯを受けた場合、あるいはＭ状態で保持されていないキャッシュラインに対するＲＴＳを受けた場合、状態管理部１００は、当該エントリの状態を「Ｄ」に変更する（ステップＳ２４）。【００４８】
また、エントリの状態が「Ｃ」のときに、プロセッサ１２からキャッシュラインのEviction通知を受けたとき、あるいはディレクトリ・キャッシュ１３からエントリが追い出されるとき、状態管理部１００は、当該エントリの状態を「Ｎ」に変更する（ステップＳ２５、Ｓ２６）。【００４９】
一方、エントリの状態が「Ｎ」のときに、プロセッサ１２からＲＴＳ又はＲＴＯを受けた場合であって、メモリ１０上のディレクトリ情報がＩである場合、状態管理部１００は、エントリの状態を「ＤＩ」に変更する（ステップＳ２７）。また、エントリの状態が「ＤＩ」のときに、当該エントリに対応するキャッシュラインのEviction通知をプロセッサ１２から受けた場合、あるいはディレクトリ・キャッシュ１３からエントリが追い出される場合、状態管理部１００は、当該エントリの状態を「Ｎ」に変更する（ステップＳ２８、Ｓ２９）。なお、Ｍ状態にあるキャッシュラインのEviction通知を受けた場合、データ転送部１１０は、メモリ１０にアクセスしてメモリ１０上のデータを書き戻す。【００５０】
また、エントリの状態が「ＤＩ」のときに、いずれかのプロセッサ１２がＭ状態で保持しているキャッシュラインに対するＲＴＳを受けた場合、状態管理部１００は、当該エントリの状態を「Ｃ」に変更する（ステップＳ３０）。【００５１】
このように、本実施例にかかるマルチプロセッサシステムＳでは、ディレクトリ・キャッシュ１３のエントリの状態として新たに「ＤＩ」を設けることにより、メモリ１０上のディレクトリ情報が「Ｉ」であるか否かを識別することが可能となる。【００５２】
次に、本実施例にかかるマルチプロセッサシステムＳにおけるメモリアクセス制御方法について説明する。図５は、本実施例にかかるマルチプロセッサシステムにおけるメモリアクセス制御方法を説明するための図である。なお、初期状態において、主記憶装置のＸ番地に格納されているデータ(Payload)「aaaaaa」は、どのキャッシュメモリにも格納されておらず、主記憶装置内にＩ状態で保持されているものとする。【００５３】
図５に示すように、プロセッサ１２ａが、メモリ１０ａに格納されているデータ「aaaaaa」を共有するためにメモリコントローラ１４ａに対してＲＴＳを送信すると（ステップＳ３１）、データ転送部１１０ａは、メモリ１０ａに対しRead要求を行い（ステップＳ３２）、データ「aaaaaa」を取得する（ステップＳ３３）。そして、データ転送部１１０ａは、取得したデータ「aaaaaa」をプロセッサ１２ａに送信し（ステップＳ３４）、当該データを取得したプロセッサ１２ａは、自己のキャッシュメモリ１１ａのディレクトリ情報を「Ｓ」に更新する。なお、メモリ１０上のディレクトリ情報の書き換えはこの時点では発生しないため、主記憶装置のデータ「aaaaaa」はＩ状態のままである。【００５４】
また、この際、状態管理部１００ａは、ディレクトリ・キャッシュ１３ａのディレクトリ情報に、データ「aaaaaa」の状態及びこのデータを保持するプロセッサ１２の情報として「Ｓ：Sharer=12a」を記録するとともに、アドレス情報として「Ｘ番地」を記録する。【００５５】
そして、状態管理部１００ａは、ディレクトリ・キャッシュ１３ａ上のディレクトリ情報とメモリ１０上のディレクトリ情報とが異なり、かつ、メモリ１０上のディレクトリ情報が「Ｉ：undefined」であるため、このデータ「aaaaaa」に対応するエントリの状態（ステート）を「ＤＩ」とする。【００５６】
より具体的に説明すると、状態管理部１００ａは、ステップＳ３２においてメモリ１０ａにアクセスした際に、メモリ１０ａ上のディレクトリ情報を参照し、当該ディレクトリ情報が「Ｉ」であるか否かを判定する。そして、メモリ１０ａ上のディレクトリ情報が「Ｉ」であると判定した場合であって、ディレクトリ・キャッシュ１３ａ上のディレクトリ情報が元々「Ｎ」であるとき、状態管理部１００ａは、データ「aaaaaa」に対応するエントリのステートを「ＤＩ」とする。なお、メモリ１０ａ上のディレクトリ情報が「Ｉ」でないときであって、ディレクトリ・キャッシュ１３ａ上のディレクトリ情報が元々「Ｎ」であるとき、状態管理部１００ａは、当該ステートを「Ｄ」とする。【００５７】
続いて、キャッシュメモリ１１ａに収容しきれない、あるいは不要となった等の理由でキャッシュラインを追い出す場合、プロセッサ１２ａは、メモリコントローラ１４ａに対してEviction通知を送信する（ステップＳ３５）。【００５８】
ここで、Eviction通知を受け取った際、状態管理部１００ａは、キャッシュコピーが修正されているか否か、およびエントリの状態が「ＤＩ」であるか否かを判定する。そして、キャッシュコピーが修正されておらず、しかも、エントリの状態が「ＤＩ」であった場合、状態管理部１００ａは、メモリ１０へのアクセス（Read-Modify-Write）を行うことなく、ディレクトリ・キャッシュ１３ａ上のディレクトリ情報を無効化（Ｎ状態に遷移）する。なお、Eviction通知には、キャッシュコピーが修正されているか否かの情報が含まれており、メモリコントローラは受け取った当該Eviction通知の内容を参照することにより、メモリアクセスの要不要を判断できる。【００５９】
このように、本実施例にかかるマルチプロセッサシステムＳは、ディレクトリ・キャッシュ１３のエントリの状態として、新たに「ＤＩ」を設けることにより、従来のマルチプロセッサシステムＳにおいて発生していた不要なメモリアクセスを削減することができる。【００６０】
ここで、本実施例にかかるマルチプロセッサシステムＳのメモリアクセス制御方法により、メモリ１０へのアクセスがどの程度削減できるかについて、妥当な仮定を設けて説明する。まず、以下では、ディレクトリ・キャッシュ１３には十分な容量があるものとし、Ｉ状態以外のキャッシュラインへの要求はディレクトリ・キャッシュ１３に全てHitすると仮定する。【００６１】
一般的な業務アプリケーション(ソフトウェア)においては、典型的にはメモリ読み出し命令２個に対しメモリ書き込み命令１個の割合でメモリアクセス命令が実行される。これは、A←f(A,B)という形の演算が継続的におこなわれているものと考えられる。つまり、メモリ１０上のＡ領域とＢ領域を読みだし、演算結果をメモリ１０上のＡ領域に書き戻す、という操作が行われる。これをメモリ１０側から見ると、Ａ領域及びＢ領域のそれぞれに対するＲＴＳが発生したあと、Ａ領域に対しＲＴＯが発生する(ただしこのＲＴＯの処理はメモリアクセスを伴わず、ディレクトリ情報をＳ→Ｅに変更するのみ)という動作になる。つまり、メモリRead操作によりプロセッサ１２のキャッシュメモリ１１に保持されたキャッシュコピーのうち半分(Ａ領域)は、内容が更新されるためメモリ１０への書き戻しが必要となり、残り半分(Ｂ領域)は内容が更新されない(書き戻しなしにキャッシュメモリ１１から追い出すことができる)、ということになる。【００６２】
ここまではＣＰＵが命令を実行するにあたって、あたかも、必要な全ての領域をそのときにメモリ１０から読みこむように考えた。しかし、実際は、キャッシュメモリ１１にコピーされプロセッサ１２で使用されたキャッシュラインは、キャッシュメモリ１１から追い出される前に、再度他の用途で使われることが多い。上記のA←f(A,B)でＢとして読みだされたデータが、まだプロセッサ１２のキャッシュメモリ１１に保持されているときに、B←f’(B,C)という形で処理され、内容を書き換えられることが多々ある。【００６３】
このことを考慮に入れ、プロセッサ１２がメモリ１０から読み出したキャッシュラインのうち、７５%がキャッシュメモリ１１から追い出される前に修正されるとし、残りの２５%は内容が修正されないまま追い出される、と仮定する。すると、プロセッサ１２からメモリコントローラ１４に発行される要求の比率は、メモリアクセスを伴うRead要求(RTSまたはRTO)：Writeback：Eviction＝４：３：１となる。【００６４】
また、プロセッサ１２からの各要求に対し、メモリコントローラ１４側で発生するメモリ１０へのアクセスは、メモリアクセスを伴うRead要求１回に対してメモリ１０のRead１回、Writeback１回に対してメモリ１０のWrite１回となる。また、Evictionに対しては、本実施例にかかるメモリアクセス制御方法を適用しない場合は、メモリ１０のRead１回＋メモリ１０のWrite１回であるが、本実施例にかかるメモリアクセス制御方法を適用する場合は、メモリ１０へのアクセスはない。【００６５】
すなわち、本実施例にかかるメモリアクセス制御方法の適用がないときは、(Read要求処理分)４×１+(Writeback分)３×１＋(Eviction分)１×２＝９であり、９のメモリアクセスが必要である。ところが、本実施例にかかるメモリアクセス制御方法を適用すると、(Read要求処理分)４×１＋(Writeback分)３×１=７であり、７のメモリアクセスで済む。したがって、本実施例にかかるマルチプロセッサシステムＳのメモリアクセス制御方法によれば、従来のメモリアクセス制御方法と比較して約２２%の使用メモリ帯域削減の効果を奏する。【００６６】
上述してきたように、本実施例では、ディレクトリ・キャッシュ１３上のディレクトリ情報とメモリ１０上のディレクトリ情報との整合状態を示す情報の一つとして、ＤＩ状態を備えることにより、従来において発生していた不要なメモリアクセスを低減できるため、メモリ帯域の圧迫を防止できる。【００６７】
以上、本発明の実施の形態のいくつかを図面に基づいて詳細に説明したが、これらは例示であり、発明の開示の欄に記載の態様を始めとして、当業者の知識に基づいて種々の変形、改良を施した他の形態で本発明を実施することが可能である。【００６８】
例えば、本実施例では、プロセッサ１２からメモリコントローラ１４へ送信される要求をＲＴＳとしたが、これに限らず、例えばＲＴＯであってもよい。また、一般的なRead要求としてＲＴＳとＲＴＯが挙げられるためここではそれらについて述べたが、対象をそれらのみに限定するものでもない。他の性質のRead要求や、Readを伴わないBlockStore要求に対しても、メモリ１０上のディレクトリ情報がＩであり、ディレクトリ・キャッシュ１３上のディレクトリ情報がそれと異なるとき、ＤＩ状態を活用することができる。【００６９】
また、本実施例では、プロセッサ１２がリクエスト元であるとして話を進めたが、リクエスト元はプロセッサ１２に限定せずI/O装置１６であってもよい。メモリ１０に対するRead／Write要求を発行するagentという観点でプロセッサ１２とI/O装置１６は同種のものとみなせる。【００７０】
また、本実施例では、ディレクトリ情報がメモリ１０内に存在する方式を適用したが、ディレクトリ情報がメモリ１０内ではない別の場所に設けられていてもよい。
【図１】
2010052799.tif 000003
【図２】
2010052799.tif 000004
【図３】
2010052799.tif 000005
【図４】
2010052799.tif 000006
【図５】
2010052799.tif 000007
【図６】
2010052799.tif 000008
【図７】
2010052799.tif 000009
【国際調査報告】
2010052799.tif 000010
2010052799.tif 000011
2010052799.tif 000012
2010052799.tif 000013