(57)【特許請求の範囲】
【請求項１】
複数のノードを有する並列処理装置において、
第１ノードは、
第１データを記憶する第１記憶装置と、
送信部と、
クライアントキャッシュとして記憶した前記第１データをサーバキャッシュに切り替える切替部と
を有し、
第２ノードは、
前記第１記憶装置より低速な記憶装置であって前記第１データを記憶する第２記憶装置と、
前記第１データを前記第１ノードが前記第１記憶装置に記憶中であることを示すデータ管理情報を記憶する管理情報記憶部と、
第３ノードから前記第１データの送信要求を受信する受信部と、
前記切替部が前記第１データをサーバキャッシュに切り替えた場合に、前記受信部が前記送信要求を受信すると、前記データ管理情報を参照し、前記第１データが前記第１ノードの前記第１記憶装置に記憶されていた場合は、前記第１ノードに前記第１データを前記第３ノードに送信するように指示を行う制御部と
を有することを特徴とする並列処理装置。
【請求項２】
前記送信部は、ＭＰＩの集団通信インタフェースを利用してＲＤＭＡ転送により前記第１データを前記第２ノードに送信することを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記送信部は、ＭＰＩのＲＥＤＵＣＥインタフェースの排他的論理和の演算を利用して前記第１データの前記第１ノードと前記第２ノードとの間の一致を確認することを特徴とする請求項２に記載の並列処理装置。
【請求項４】
前記切替部は、前記第１データの前記第１ノードと前記第２ノードとの間の一致が確認されると、前記第１データをサーバキャッシュに切り替えることを特徴とする請求項３に記載の並列処理装置。
【請求項５】
前記切替部は、前記第１ノードに割り当てられたクライアントキャッシュ用の空き領域の割合が所定の閾値より小さくなった場合に、前記第１データをサーバキャッシュに切り替えることを特徴とする請求項３に記載の並列処理装置。
【請求項６】
第１ノードは、第１データを第１記憶装置に記憶し、
前記第１ノードは、クライアントキャッシュとして記憶した前記第１データをサーバキャッシュに切り替え、
第２ノードは、前記第１データを前記第１記憶装置より低速な第２記憶装置に記憶し、
前記第２ノードは、前記第１データを前記第１ノードが前記第１記憶装置に記憶中であることを示すデータ管理情報を記録し、
前記第２ノードは、第３ノードから前記第１データの送信要求を受信し、
前記第２ノードは、前記第１ノードが前記第１データをサーバキャッシュに切り替えた場合に、前記データ管理情報を参照し、前記第１データが前記第１ノードの前記第１記憶装置に記憶されていた場合は、前記第１ノードに前記第１データを前記第３ノードに送信するように指示を行う
ことを特徴とするメモリキャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置及びメモリキャッシュ制御方法に関する。
【背景技術】
【０００２】
ファイルサーバが記憶するファイルをネットワークを介してクライアントがアクセスする場合、クライアントのメインメモリにファイルキャッシュが記憶される。図２２は、ファイルキャッシュがクライアントのメインメモリに記憶される場合を示す図である。
【０００３】
図２２では、ファイルサーバ８のファイル管理部８１が、ネットワーク８ｃを介したクライアント９からのファイルアクセスを処理する。クライアント９で動作するクライアントアプリケーション９１は、ＲＰＣ（Remote  Procedure  Call）プロトコルを用いてファイルサーバ８が記憶するファイルにアクセスする。
【０００４】
このとき、クライアント９のメインメモリは一次キャッシュとしてファイルキャッシュ９２を記憶し、クライアントアプリケーション９１は、ファイルキャッシュ９２にアクセスすることによって、ファイルサーバ８が記憶するファイルにアクセスする。
【０００５】
一次キャッシュがあふれた場合には、キャッシュサーバに二次キャッシュが配置される。図２３は、キャッシュサーバに配置される二次キャッシュを示す図である。図２３に示すように、ネットワーク８ｃに接続されたキャッシュサーバ９ａのメインメモリにクライアントキャッシュ９３が二次キャッシュとして配置される。クライアントアプリケーション９１によってファイルキャッシュ９２に書き込みが行われると、書き込みがクライアントキャッシュ９３に反映され、クライアントキャッシュ９３の内容がファイルサーバ８に反映される。
【０００６】
また、ファイルサーバ８におけるファイルのアクセスを高速化するために、ファイルの複製がキャッシュサーバにサーバキャッシュとして配置される。図２４は、キャッシュサーバに配置されるサーバキャッシュを示す図である。図２４に示すように、ネットワーク８ｃに接続されたキャッシュサーバ８ａのメインメモリにサーバキャッシュ８２が配置される。クライアントアプリケーション９１によってファイルキャッシュ９２に書き込みが行われると、書き込みがサーバキャッシュ８２に反映され、サーバキャッシュ８２の内容がファイルサーバ８に反映される。
【０００７】
なお、複数のノードを含むシステムにおいて、第１ノードの記憶装置に格納されたデータに対するアクセス特性を示す特性データを取得し、取得した特性データに基づきキャッシュに割り当てる資源を決定することで、適切にキャッシュを配置する技術がある。
【０００８】
また、データ格納手段から取得される元データをキャッシュとして格納し、データ取得要求を受け付けると、キャッシュを利用可能か否かを判定する前に、データ格納手段に格納された元データに対する更新を制限することで、データ取得の効率化を図る技術がある。
【０００９】
また、ネットワークを介してクライアントとストレージが通信する場合、クライアントとストレージ間にキャッシュストレージを設けることで、性能の劣化を防ぐ技術がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０１３−２０５８９１号公報
【特許文献２】特開２００８−１４６３８０号公報
【特許文献３】特開２００４−３４２０７１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
キャッシュサーバを利用するシステムで、ジョブＡでクライアントキャッシュ９３に配置されたファイルの内容が次のジョブＢでも使用される場合、ジョブＡの終了時にクライアントキャッシュ９３の内容がファイルサーバ８のディスク装置に書き込まれる。そして、ジョブＢでファイルサーバ８のディスク装置からファイルが読み出されてサーバキャッシュ８２としてキャッシュサーバ８ａのメインメモリに読み出されて使用される。
【００１２】
すなわち、ジョブＡでクライアントキャッシュ９３として使用されたメインメモリの内容は、ディスク装置に書き込まれた後サーバキャッシュ８２として再度メインメモリに読み出される。このため、ジョブＢの実行前にディスク装置への無駄な書き込みとディスク装置からの無駄な読み出しが発生するという問題がある。特に、スーパコンピュータで関連する一連のジョブが実行される場合、前のジョブで使用されたファイルが次のジョブで使用されることが多く、無駄な書き込みと読み出しが多く発生する。
【００１３】
本発明は、１つの側面では、ディスク装置に対する無駄な書き込みと読み出しをなくすことを目的とする。
【課題を解決するための手段】
【００１４】
１つの態様では、並列処理装置は、複数のノードを有する。第１ノードは、第１データを記憶する第１記憶装置と、送信部と、クライアントキャッシュとして記憶した前記第１データをサーバキャッシュに切り替える切替部とを有する。第２ノードは、前記第１記憶装置より低速な記憶装置であって前記第１データを記憶する第２記憶装置を有する。また、前記第２ノードは、前記第１データを前記第１ノードが前記第１記憶装置に記憶中であることを示すデータ管理情報を記憶する管理情報記憶部を有する。また、前記第２ノードは、第３ノードから前記第１データの送信要求を受信する受信部を有する。また、前記第２ノードは、前記切替部が前記第１データをサーバキャッシュに切り替えた場合に、前記受信部が前記送信要求を受信すると、前記データ管理情報を参照し前記第１データが前記第１ノードの前記第１記憶装置に記憶されていた場合は、前記第１ノードに前記第１データを前記第３ノードに送信するように指示を行う制御部を有する。
【発明の効果】
【００１５】
１つの側面では、ディスク装置に対する無駄な書き込みと読み出しをなくすことができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、実施例に係る並列処理装置の構成を示す図である。
【図２】図２は、ノードのハードウェア構成を示す図である。
【図３】図３は、ノードへのサーバの割当を説明するための図である。
【図４】図４は、サーバキャッシュとクライアントキャッシュの関係を示す図である。
【図５】図５は、実施例に係るネットワークファイルシステムの機能構成を示す図である。
【図６】図６は、クライアントキャッシュ及びサーバキャッシュを示す図である。
【図７】図７は、スレーブ管理表及びＣＰＵメモリ位置情報のデータ構造を示す図である。
【図８】図８は、リモートキャッシュ管理表及びＣＰＵメモリ位置情報のデータ構造を示す図である。
【図９】図９は、キャッシュ管理部によるスレーブ管理表の処理のフローを示すフローチャートである。
【図１０】図１０は、空きノード検索処理のフローを示すフローチャートである。
【図１１】図１１は、クライアントによるファイル管理処理のフローを示すフローチャートである。
【図１２】図１２は、ファイルサーバによるファイル管理処理のフローを示すフローチャートである。
【図１３】図１３は、キャッシュ管理部によるクライアントキャッシュ管理処理のフローを示すフローチャートである。
【図１４】図１４は、バッキングストア管理部による処理のフローを示すフローチャートである。
【図１５】図１５は、スレーブ管理部によるスレーブメモリキャッシュサーバへのメモリキャッシュ操作指示処理のフローを示すフローチャートである。
【図１６】図１６は、マスター対応部による処理のフローを示すフローチャートである。
【図１７】図１７は、フレンド対応部による処理のフローを示すフローチャートである。
【図１８】図１８は、切替マスターデーモンによる切替処理のフローを示すフローチャートである。
【図１９】図１９は、切替サブデーモンによる切替処理のフローを示すフローチャートである。
【図２０】図２０は、クライアントキャッシュとして使用できる領域の使用状態に基づいてサーバキャッシュへの切替を制御する切替マスターデーモンの切替処理のフローを示すフローチャートである。
【図２１】図２１は、クライアントキャッシュとして使用できる領域の使用状態に基づいてサーバキャッシュ切替を制御する切替サブデーモンの切替処理のフローを示すフローチャートである。
【図２２】図２２は、ファイルキャッシュがクライアントのメインメモリに記憶される場合を示す図である。
【図２３】図２３は、キャッシュサーバに配置される二次キャッシュを示す図である。
【図２４】図２４は、キャッシュサーバに配置されるサーバキャッシュを示す図である。
【発明を実施するための形態】
【００１７】
以下に、本願の開示する並列処理装置及びメモリキャッシュ制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００１８】
まず、実施例に係る並列処理装置について説明する。図１は、実施例に係る並列処理装置の構成を示す図である。図１に示すように、並列処理装置７は、ｌ、ｍ及びｎを正の整数として、ｘ軸方向にｌ個、ｙ軸方向にｍ個、ｚ軸方向にｎ個のノード１０がトーラス状に接続されて構成される。なお、図１では、ノード１０が３次元に配置される場合を示すが、ノード１０は、２次元、６次元等の他の次元で配置されてもよい。また、ノード１０は、メッシュ状に配置されてもよい。
【００１９】
ノード１０は、情報処理を行う情報処理装置である。ユーザのジョブは、複数のノード１０により並列処理される。図２は、ノードのハードウェア構成を示す図である。図２に示すように、ノード１０は、ＣＰＵ１０ａと、メインメモリ１０ｂと、インターコネクト部１０ｃとを有する。
【００２０】
ＣＰＵ１０ａは、メインメモリ１０ｂからプログラムを読み出して実行する中央処理装置である。メインメモリ１０ｂは、プログラムやプログラムの実行途中結果などを記憶するメモリである。インターコネクト部１０ｃは、他のノード１０と通信を行う通信装置である。
【００２１】
インターコネクト部１０ｃは、ＲＤＭＡ(Remote  Direct  Memory  Access)機能を有する。すなわち、インターコネクト部１０ｃは、メインメモリ１０ｂが記憶するデータをＣＰＵ１０ａを介することなく他のノード１０へ転送し、他のノード１０から受信したデータをＣＰＵ１０ａを介することなくメインメモリ１０ｂに書き込むことができる。
【００２２】
次に、ノード１０へのサーバの割当について説明する。図３は、ノード１０へのサーバの割当を説明するための図である。図３に示すように、１台のノード１０は、ディスク装置２ａを有し、ファイルサーバ２として動作する。ファイルサーバ２は、ディスク装置２ａにファイルを記憶し、他のノード１０が使用するデータを記憶する。
【００２３】
ノード１０には、ジョブで使用されているものと、ジョブで使用されていないものがある。図３では、（１，１，１）から（１，Ｍ，１）のＭ個のノード１０がジョブで使用されているノード１０すなわちジョブを起動したノード１０であり、（１，１，２）から（１，Ｍ，Ｍ）のＭ×（Ｍ−１）個のノード１０が、ジョブで使用されていない空きノード１０である。
【００２４】
ジョブを起動したノード１０の近傍の空きノード１０にマスターメモリキャッシュサーバと複数のスレーブメモリキャッシュサーバが割り当てられる。ここで、近傍とは、ホップ数が１から３までを表す。
【００２５】
スレーブメモリキャッシュサーバは、メモリキャッシュをメインメモリ１０ｂに記憶する。メモリキャッシュには、クライアントキャッシュとサーバキャッシュがある。マスターメモリキャッシュサーバは、スレーブメモリキャッシュサーバが記憶するメモリキャッシュを管理する。
【００２６】
図４は、サーバキャッシュとクライアントキャッシュの関係を示す図である。サーバキャッシュは、ファイルサーバ２の高速化のために、ファイルサーバ２上のファイルの複製を別なノード１０のメインメモリ１０ｂ上に配置したものである。サーバキャッシュには、通常、読み出し専用のデータが格納されている。サーバキャッシュは、負荷分散と冗長化のために、複数のノード１０にあってもよい。
【００２７】
クライアントキャッシュは、クライアント上のファイルキャッシュの複製を別のノード１０のメインメモリ１０ｂ上に配置したものである。ここで、クライアントは、ジョブを起動したノード１０である。クライアントキャッシュは、負荷分散と冗長化のために、複数のノード１０にあってもよい。
【００２８】
実施例に係るメモリキャッシュ制御は、クライアントキャッシュの多段の複製を行った場合、クライアントキャッシュをサーバキャッシュと同等とみなして、クライアントにファイルの内容のファイルサーバ２への書き込みが完了したことが通知する。ここで、クライアントキャッシュの多段の複製とは、書き込みが行われたファイルブロックを他のクライアントキャッシュ又はファイルサーバ２のファイルキャッシュへ複製することである。また、クライアントキャッシュをサーバキャッシュと同等とみなすということは、クライアントキャッシュをサーバキャッシュに変更することである。クライアントキャッシュをサーバキャッシュに変更することで、データが次のジョブで使用される場合に、ファイルサーバ２への書き込みとその後のファイルサーバ２からの読み出しが不要になる。
【００２９】
サーバキャッシュに既にクライアントキャッシュと同じファイルブロックが存在する場合、実施例に係るメモリキャッシュ制御は、クライアントにファイルサーバ２への書き込みが完了したことを通知した時点で、サーバキャッシュのファイルブロックを破棄する。なお、ファイルサーバへの書き込み完了通知以降は、ファイルサーバ２のディスク装置２ａへの実際のファイルの書き戻しのタイミングは、ファイルサーバ２により制御される。
【００３０】
次に、実施例に係るネットワークファイルシステムの機能構成について説明する。図５は、実施例に係るネットワークファイルシステムの機能構成を示す図である。図５に示すように、実施例に係るネットワークファイルシステムは、クライアント１と、ファイルサーバ２と、マスターメモリキャッシュサーバ３と、主スレーブメモリキャッシュサーバ４と、他スレーブメモリキャッシュサーバ５と、ジョブスケジューラ６とを有する。
【００３１】
クライアント１は、ジョブを起動したノード１０である。ファイルサーバ２は、クライアント１が使用するファイルをディスク装置２ａに記憶する。マスターメモリキャッシュサーバ３は、スレーブメモリキャッシュサーバが記憶するクライアントキャッシュ及びサーバキャッシュを管理する。なお、図５では１台のクライアント１のみを示すが、クライアント１は複数台ある。
【００３２】
主スレーブメモリキャッシュサーバ４及び他スレーブメモリキャッシュサーバ５は、クライアントキャッシュ及びサーバキャッシュを記憶するスレーブメモリキャッシュサーバである。通常は、主スレーブメモリキャッシュサーバ４がスレーブメモリキャッシュサーバとして用いられる。他スレーブメモリキャッシュサーバ５は、主スレーブメモリキャッシュサーバ４が使用できない場合に、スレーブメモリキャッシュサーバとして用いられる。他スレーブメモリキャッシュサーバ５は、複数ある。
【００３３】
図６は、主スレーブメモリキャッシュサーバ４及び他スレーブメモリキャッシュサーバ５が記憶するクライアントキャッシュ及びサーバキャッシュを示す図である。図６に示すように、主スレーブメモリキャッシュサーバ４及び他スレーブメモリキャッシュサーバ５は、それぞれ複数のクライアントキャッシュ４０ｃ及びサーバキャッシュ４０ｄを記憶する。なお、クライアントキャッシュ４０ｃ及びサーバキャッシュ４０ｄはスレーブメモリキャッシュサーバの記憶部４０に記憶される。
【００３４】
ジョブスケジューラ６は、ジョブの実行のスケジューリングを行う。ジョブスケジューラ６は、ジョブをノード１０に割り当て、資源割当マップ６１を作成し、マスターメモリキャッシュサーバ３へ通知する。
【００３５】
マスターメモリキャッシュサーバ３は、記憶部３０と、キャッシュ管理部３１と、切替マスターデーモン３２と、スレーブ管理部３３と、バッキングストア管理部３４とを有する。
【００３６】
記憶部３０は、メモリキャッシュを管理するための情報を記憶する。具体的には、記憶部３０は、スレーブ管理表３０ａと、ＣＰＵメモリ位置情報３０ｂと、リモートキャッシュ管理表３０ｃとを記憶する。記憶部３０は、図２に示したメインメモリ１０ｂに対応する。
【００３７】
スレーブ管理表３０ａには、スレーブメモリキャッシュサーバに配置されるメモリキャッシュをスレーブメモリキャッシュサーバ毎に管理するための情報が登録される。ＣＰＵメモリ位置情報３０ｂは、メインメモリ１０ｂ上のファイルブロックに関する情報である。
【００３８】
図７は、スレーブ管理表３０ａ及びＣＰＵメモリ位置情報３０ｂのデータ構造を示す図である。図７に示すように、スレーブ管理表３０ａは、キャッシュメモリ毎のエントリが双方向ポインタで接続された表である。エントリには、スレーブメモリキャッシュサーバのネットワークアドレス、メモリキャッシュ用に管理する全メモリブロック数、メモリキャッシュ用に管理する空きメモリブロック数、ＣＰＵメモリ位置情報へのポインタが含まれる。また、エントリには、次のエントリへのポインタ、前のエントリへのポインタが含まれる。
【００３９】
ＣＰＵメモリ位置情報３０ｂは、ファイルブロック毎のエントリが双方向ポインタで接続された情報である。エントリには、ＣＰＵのネットワークアドレス、メインメモリ１０ｂ上のファイルブロックの先頭アドレス、メインメモリ１０ｂ上のファイルブロックのサイズ、ファイルブロックの状態すなわちＣＬＥＡＮ又はＤＩＲＴＹが含まれる。ここで、ＣＬＥＡＮはメインメモリ１０ｂ上のファイルブロックに書き込みが行われていないことを示し、ＤＩＲＴＹはメインメモリ１０ｂ上のファイルブロックに書き込みが行われたことを示す。また、エントリには、次のエントリへのポインタ、前のエントリへのポインタが含まれる。
【００４０】
リモートキャッシュ管理表３０ｃは、ファイルブロックがどのノード１０のメインメモリ１０ｂ上の何処のアドレス位置にメモリキャッシュとして配置されているかを管理するための情報である。
【００４１】
図８は、リモートキャッシュ管理表３０ｃ及びＣＰＵメモリ位置情報３０ｂのデータ構造を示す図である。図８に示すように、リモートキャッシュ管理表３０ｃは、ファイルブロック毎のエントリが双方向ポインタで接続された表である。エントリには、ファイルブロックの先頭アドレス、ファイルブロックのサイズ、ＣＰＵメモリ位置情報へのポインタ、メモリキャッシュの用途すなわちクライアント又はサーバ、メモリキャッシュの状態すなわちシリアライズ又は並列が含まれる。また、エントリには、次のエントリへのポインタ、前のエントリへのポインタが含まれる。
【００４２】
キャッシュ管理部３１は、メモリキャッシュの割当、解放、書き込み及び読み出しを管理する。キャッシュ管理部３１は、クライアント１からクライアントキャッシュ４０ｃの要求、又はファイルサーバ２からサーバキャッシュ４０ｄの要求を受け付け、スレーブ管理部３３へスレーブメモリキャッシュサーバへのキャッシュメモリ操作指示を行うように要求する。
【００４３】
また、キャッシュ管理部３１は、スレーブ管理表３０ａ及びリモートキャッシュ管理表３０ｃを更新する。そして、キャッシュ管理部３１は、メモリキャッシュの割当、解放又は書き込みが行われた場合には、定期的にリモートキャッシュ管理表３０ｃをクライアント１、ファイルサーバ２及びスレーブメモリキャッシュサーバへ送信し、更新させる。
【００４４】
リモートキャッシュ管理表３０ｃの送信では、キャッシュ管理部３１は、各クライアント１、ファイルサーバ２及び各スレーブメモリキャッシュサーバに対して、同時にＲＤＭＡ転送を行う。このＲＤＭＡ転送には、キャッシュ管理部３１は、ＭＰＩ（Message  Passing  Interface：メッセージパッシングインタフェース）の集団通信インタフェース（ＭＰＩ＿ＢＣＡＳＴ）を利用する。
【００４５】
また、キャッシュ管理部３１は、ＲＤＭＡ転送の通信完了を確認するため、ＣＰＵ１０ａを利用したメモリ内容のロックなしに、２つのノード１０間のメモリ内容の一致を確認する。この確認には、キャッシュ管理部３１は、ＭＰＩのＲＥＤＵＣＥインタフェース（ＭＰＩ＿ＲＥＤＵＣＥ）の排他的論理和（ＥＸＯＲ）の演算を利用する。
【００４６】
また、キャッシュ管理部３１は、ジョブスケジューラ６から資源割当マップ６１を受信すると、スレーブ管理表３０ａを参照し、スレーブメモリキャッシュサーバにジョブが割り当てられたか否かを判定する。そして、スレーブメモリキャッシュサーバにジョブが割り当てられた場合には、空きノード１０を探し、ジョブが割り当てられたスレーブメモリキャッシュサーバの空きノード１０への移動をスレーブ管理部３３に要求し、スレーブ管理表３０ａを更新する。
【００４７】
また、キャッシュ管理部３１は、空きノード１０が見つからなかった場合には、ジョブが割り当てられたスレーブメモリキャッシュサーバからファイルサーバ２への退避をスレーブ管理部３３に要求する。
【００４８】
切替マスターデーモン３２は、スレーブメモリキャッシュサーバの切替サブデーモン４１と連携してクライアントキャッシュ４０ｃからサーバキャッシュ４０ｄへの切替を行う。切替マスターデーモン３２は、クライアントキャッシュ４０ｃからサーバキャッシュ４０ｄへの切替を行ったメモリキャッシュについてリモートキャッシュ管理表３０ｃを更新する。
【００４９】
スレーブ管理部３３は、キャッシュ管理部３１の要求に基づいて、スレーブメモリキャッシュサーバにキャッシュメモリの割当又は解放を指示する。また、スレーブ管理部３３は、キャッシュ管理部３１の要求に基づいて、スレーブメモリキャッシュサーバの空きノード１０への移動、又は、スレーブメモリキャッシュサーバからファイルサーバ２への退避を指示する。
【００５０】
ここで、スレーブメモリキャッシュサーバの空きノード１０への移動とは、スレーブメモリキャッシュサーバのメモリキャッシュの内容を空きノード１０へ移動することである。また、スレーブメモリキャッシュサーバからファイルサーバ２への退避とは、スレーブメモリキャッシュサーバのメモリキャッシュの内容をファイルサーバ２のディスク装置２ａに書き込むことである。
【００５１】
バッキングストア管理部３４は、ファイルサーバ２のディスク装置２ａに記憶されたバッキングストア管理表２ｂを更新する。ここで、バッキングストア管理表２ｂは、キャッシュメモリとディスク装置２ａとの間のデータの読み書きを管理するための表である。
【００５２】
主スレーブメモリキャッシュサーバ４と他スレーブメモリキャッシュサーバ５は、スレーブメモリキャッシュサーバとして同様の機能構成を有する。そこで、ここでは、スレーブメモリキャッシュサーバの機能構成を説明する。スレーブメモリキャッシュサーバは、記憶部４０と、切替サブデーモン４１と、クライアント対応部４２と、サーバ対応部４３と、バッキングストアアクセス部４４と、マスター対応部４５と、フレンド対応部４６とを有する。
【００５３】
記憶部４０は、リモートキャッシュ管理表４０ａとＣＰＵメモリ位置情報４０ｂを記憶する。リモートキャッシュ管理表４０ａのデータ構造は、リモートキャッシュ管理表３０ｃのデータ構造と同じである。ＣＰＵメモリ位置情報４０ｂのデータ構造は、ＣＰＵメモリ位置情報３０ｂのデータ構造と同じである。なお、図６に示したように、記憶部４０は、クライアントキャッシュ４０ｃ及びサーバキャッシュ４０ｄを記憶する。記憶部４０は、図２に示したメインメモリ１０ｂに対応する。
【００５４】
切替サブデーモン４１は、マスターメモリキャッシュサーバ３の切替マスターデーモン３２と連携してクライアントキャッシュ４０ｃからサーバキャッシュ４０ｄへの切替を行う。切替サブデーモン４１は、クライアントキャッシュ４０ｃの使用が終了し、クライアントキャッシュ４０ｃの内容がファイルサーバ２に送信されると、クライアントキャッシュ４０ｃからサーバキャッシュ４０ｄへの切替を行う。
【００５５】
クライアント対応部４２は、クライアントキャッシュ４０ｃに対する書き込み要求及び読み出し要求をクライアント１から受信し、クライアントキャッシュ４０ｃへのデータの書き込み及びクライアントキャッシュ４０ｃからのデータの読み出しを行う。
【００５６】
サーバ対応部４３は、サーバキャッシュ４０ｄに対する書き込み要求及び読み出し要求をファイルサーバ２から受信し、サーバキャッシュ４０ｄへのデータの書き込み及びサーバキャッシュ４０ｄからのデータの読み出しを行う。
【００５７】
バッキングストアアクセス部４４は、ディスク装置２ａのファイルを読み出して送信すようにファイルサーバ２に要求し、送信されたファイルをメモリキャッシュに書き込む。また、バッキングストアアクセス部４４は、クライアントキャッシュ４０ｃの内容をファイルサーバ２に送信し、クライアントキャッシュ４０ｃの内容をディスク装置２ａに書き込むようにファイルサーバ２に要求する。
【００５８】
バッキングストアアクセス部４４は、クライアントキャッシュ４０ｃの内容をファイルサーバ２に送信する際に、ＭＰＩの集団通信インタフェース（ＭＰＩ＿ＢＣＡＳＴ）を利用して、ファイルサーバ２にＲＤＭＡ転送を行う。また、バッキングストアアクセス部４４は、ＲＤＭＡ転送の通信完了を確認する際に、ＣＰＵ１０ａを利用したメモリ内容のロックはしない。バッキングストアアクセス部４４は、ＭＰＩのＲＥＤＵＣＥインタフェース（ＭＰＩ＿ＲＥＤＵＣＥ）の排他的論理和（ＥＸＯＲ）の演算を利用して、ファイルサーバ２との間でメモリ内容の一致を確認する。
【００５９】
マスター対応部４５は、スレーブ管理部３３からの割当指示又は解放指示に基づいて、フレンド対応部４６を用いて、キャッシュメモリの割当又は解放を行う。また、マスター対応部４５は、スレーブ管理部３３からの移動指示に基づいて、フレンド対応部４６へスレーブメモリキャッシュサーバの空きノード１０への移動を指示する。また、マスター対応部４５は、スレーブ管理部３３からの退避指示に基づいて、バッキングストアアクセス部４４へスレーブメモリキャッシュサーバからファイルサーバ２への退避を指示する。
【００６０】
フレンド対応部４６は、他のスレーブメモリキャッシュサーバのフレンド対応部４６と連携してメモリキャッシュの複製に関する処理を行う。具体的には、フレンド対応部４６は、マスター対応部４５の割当指示に基づいて、他のスレーブメモリキャッシュサーバにメモリキャッシュの複製を作成する。
【００６１】
フレンド対応部４６は、他のスレーブメモリキャッシュサーバにメモリキャッシュの複製を作成する際に、ＭＰＩの集団通信インタフェース（ＭＰＩ＿ＢＣＡＳＴ）を利用して、複数の他のスレーブメモリキャッシュサーバに対して、同時にＲＤＭＡ転送を行う。また、フレンド対応部４６は、ＲＤＭＡ転送の通信完了を確認する際に、ＣＰＵ１０ａを利用したメモリ内容のロックはしない。フレンド対応部４６は、ＭＰＩのＲＥＤＵＣＥインタフェース（ＭＰＩ＿ＲＥＤＵＣＥ）の排他的論理和（ＥＸＯＲ）の演算を利用して、他のスレーブメモリキャッシュサーバとの間でメモリ内容の一致を確認する。
【００６２】
また、フレンド対応部４６は、他のスレーブメモリキャッシュサーバのフレンド対応部４６の指示に基づいてメモリキャッシュを割り当てる。
【００６３】
また、フレンド対応部４６は、マスター対応部４５の解放指示に基づいて、他のスレーブメモリキャッシュサーバのフレンド対応部４６へメモリキャッシュの解放を指示する。また、フレンド対応部４６は、他のスレーブメモリキャッシュサーバのフレンド対応部４６からの指示に基づいて、メモリキャッシュの解放を行う。
【００６４】
また、フレンド対応部４６は、マスター対応部４５の移動指示に基づいて、移動元のノード１０から移動先のノード１０へ全てのメモリキャッシュの内容を複製する。複製を作成する際に、フレンド対応部４６は、ＭＰＩの集団通信インタフェース（ＭＰＩ＿ＢＣＡＳＴ）を利用して、複数の移動先のノード１０に対して、ＲＤＭＡ転送を行う。また、フレンド対応部４６は、ＲＤＭＡ転送の通信完了を確認する際に、ＣＰＵ１０ａを利用したメモリ内容のロックはしない。フレンド対応部４６は、ＭＰＩのＲＥＤＵＣＥインタフェース（ＭＰＩ＿ＲＥＤＵＣＥ）の排他的論理和（ＥＸＯＲ）の演算を利用して、移動先のノード１０との間でメモリ内容の一致を確認する。
【００６５】
また、フレンド対応部４６は、マスター対応部４５の退避指示に基づいて、他のスレーブメモリキャッシュサーバのフレンド対応部４６へ全てのメモリキャッシュの解放を指示する。
【００６６】
クライアント１では、ＯＳ１１が動作し、ＯＳ１１には、ファイルの管理を行うファイル管理部１１ａと、他のノード１０と通信を行うリモートドライバ１１ｂを有する。ファイル管理部１１ａは、記憶部１１ｃを有する。
【００６７】
記憶部１１ｃは、リモートメモリ仮想ディスク１１ｄを有する。リモートメモリ仮想ディスク１１ｄはファイルキャッシュを記憶する領域である。また、記憶部１１ｃは、リモートキャッシュ管理表１１ｅとＣＰＵメモリ位置情報１１ｆを記憶する。リモートキャッシュ管理表１１ｅのデータ構造は、リモートキャッシュ管理表３０ｃのデータ構造と同じである。ＣＰＵメモリ位置情報１１ｆのデータ構造は、ＣＰＵメモリ位置情報３０ｂのデータ構造と同じである。記憶部１１ｃは、図２に示したメインメモリ１０ｂに対応する。
【００６８】
ファイルサーバ２では、ＯＳ２１が動作し、ＯＳ２１には、ファイルの管理を行うファイル管理部２１ａと、他のノード１０と通信を行うリモートドライバ２１ｂを有する。ファイル管理部２１ａは、記憶部２１ｃと、受信部２１ｇと、制御部２１ｈとを有する。
【００６９】
記憶部２１ｃは、リモートメモリ仮想ディスク２１ｄを有する。リモートメモリ仮想ディスク２１ｄはファイルキャッシュを記憶する領域である。また、記憶部２１ｃは、リモートキャッシュ管理表２１ｅとＣＰＵメモリ位置情報２１ｆを記憶する。リモートキャッシュ管理表２１ｅのデータ構造は、リモートキャッシュ管理表３０ｃのデータ構造と同じである。ＣＰＵメモリ位置情報２１ｆのデータ構造は、ＣＰＵメモリ位置情報３０ｂのデータ構造と同じである。記憶部２１ｃは、図２に示したメインメモリ１０ｂに対応する。
【００７０】
受信部２１ｇは、データの送信要求をクライアント１から受信すると、リモートキャッシュ管理表２１ｅを参照し、スレーブメモリキャッシュサーバにデータのサーバキャッシュ４０ｄがあるか否かを判定する。
【００７１】
制御部２１ｈは、受信部２１ｇがスレーブメモリキャッシュサーバにサーバキャッシュ４０ｄあると判定すると、スレーブメモリキャッシュサーバにサーバキャッシュ４０ｄのデータをクライアント１に送信するように指示する。
【００７２】
次に、マスターメモリキャッシュサーバ３のキャッシュ管理部３１によるスレーブ管理表３０の処理のフローについて説明する。図９は、キャッシュ管理部３１によるスレーブ管理表３０ａの処理のフローを示すフローチャートである。図９に示すように、キャッシュ管理部３１は、ジョブスケジューラ６から資源割当マップ６１を受信する（ステップＳ１）と、スレーブ管理表３０ａの内容を確認する（ステップＳ２）。
【００７３】
そして、キャッシュ管理部３１は、スレーブ管理表３０ａにスレーブメモリキャッシュサーバが登録されているか否かを判定し（ステップＳ３）、登録されていない場合には、ステップＳ５へ進む。一方、登録されている場合には、キャッシュ管理部３１は、登録されているノード１０は資源割当マップ６１でジョブが割り当てられているか否かを判定し（ステップＳ４）、ジョブが割り当てられていない場合には、ステップＳ１に戻る。
【００７４】
一方、ジョブが割り当てられている場合には、キャッシュ管理部３１は、スレーブメモリキャッシュサーバの移動先の空きノード１０を探すために、空きノード１０を検索する空きノード検索処理を行う（ステップＳ５）。そして、キャッシュ管理部３１は、空きノード１０があるか否かを判定し（ステップＳ６）、空きノード１０がある場合には、空きノード１０からスレーブメモリキャッシュサーバを選択し、スレーブ管理表３０ａに登録する（ステップＳ７）。
【００７５】
そして、キャッシュ管理部３１は、ジョブが割り当てられたノード１０から空きノード１０へのスレーブメモリキャッシュサーバの移動をスレーブ管理部３３へ指示する（ステップＳ８）。
【００７６】
一方、空きノード１０がない場合には、キャッシュ管理部３１は、ジョブが割り当てられたノード１０からファイルサーバ２へのスレーブメモリキャッシュサーバの退避をスレーブ管理部３３へ指示する（ステップＳ９）。
【００７７】
図１０は、空きノード検索処理のフローを示すフローチャートである。図１０に示すように、キャッシュ管理部３１は、空きノード１０はあるか否かを判定し（ステップＳ１１）、空きノード１０がない場合には、処理を終了する。
【００７８】
一方、空きノード１０がある場合には、キャッシュ管理部３１は、開始時間と終了時間の間でジョブから空きノード１０へのホップ数をチェックする（ステップＳ１２）。そして、キャッシュ管理部３１は、ジョブから空きノード１０へのホップ数は１か否かを判定し（ステップＳ１３）、１である場合には、空きノード１０を１個選択する（ステップＳ１４）。
【００７９】
一方、ジョブから空きノード１０へのホップ数が１でない場合には、キャッシュ管理部３１は、ジョブから空きノード１０へのホップ数は２か否かを判定し（ステップＳ１５）、２である場合には、空きノード１０を１個選択する（ステップＳ１６）。
【００８０】
一方、ジョブから空きノード１０へのホップ数が２でない場合には、キャッシュ管理部３１は、ジョブから空きノード１０へのホップ数は３か否かを判定し（ステップＳ１７）、３である場合には、空きノード１０を１個選択する（ステップＳ１８）。
【００８１】
一方、ジョブから空きノード１０へのホップ数が３でない場合には、キャッシュ管理部３１は、ジョブから空きノード１０へのホップ数が４以上のため、空きノード１０を選択しない（ステップＳ１９）。
【００８２】
このように、キャッシュ管理部３１は、スレーブメモリキャッシュサーバにジョブが割り当てられると、空きノード１０へのスレーブメモリキャッシュサーバの移動をスレーブ管理部３３へ指示するので、ジョブの実行への悪影響をなくすことができる。
【００８３】
次に、クライアント１によるファイル管理処理のフローについて説明する。図１１は、クライアント１によるファイル管理処理のフローを示すフローチャートである。図１１に示すように、クライアント１は、リモートドライバ１１ｂでマスターメモリキャッシュサーバ３にクライアントキャッシュ４０ｃの割当又は解放を要求する（ステップＳ２１）。
【００８４】
そして、クライアント１は、マスターメモリキャッシュサーバ３からの応答を待ち、マスターメモリキャッシュサーバ３から応答を受信する（ステップＳ２２）。そして、クライアント１は、クライアントキャッシュ４０ｃの割当を要求した場合には、リモートドライバ１１ｂでスレーブメモリキャッシュサーバのクライアント対応部４２へクライアントキャッシュ４０ｃの書き込み又は読み出しを依頼する（ステップＳ２３）。
【００８５】
このように、クライアント１は、マスターメモリキャッシュサーバ３にクライアントキャッシュ４０ｃの割当又は解放を要求することで、クライアントキャッシュ４０ｃを利用することができる。
【００８６】
次に、ファイルサーバ２によるファイル管理処理のフローについて説明する。図１２は、ファイルサーバ２によるファイル管理処理のフローを示すフローチャートである。図１２に示すように、ファイルサーバ２は、リモートドライバ２１ｂでマスターメモリキャッシュサーバ３にサーバキャッシュ４０ｄの割当又は解放を要求する（ステップＳ２６）。
【００８７】
そして、ファイルサーバ２は、マスターメモリキャッシュサーバ３からの応答を待ち、マスターメモリキャッシュサーバ３から応答を受信する（ステップＳ２７）。そして、ファイルサーバ２は、サーバキャッシュ４０ｄの割当を要求した場合には、リモートドライバ２１ｂでスレーブメモリキャッシュサーバのサーバ対応部４３へサーバキャッシュ４０ｄの書き込み又は読み出しを依頼する（ステップＳ２８）。
【００８８】
このように、ファイルサーバ２は、マスターメモリキャッシュサーバ３にサーバキャッシュ４０ｄの割当又は解放を要求することで、サーバキャッシュ４０ｄを利用することができる。
【００８９】
次に、マスターメモリキャッシュサーバ３のキャッシュ管理部３１によるクライアントキャッシュ管理処理のフローについて説明する。図１３は、キャッシュ管理部３１によるクライアントキャッシュ管理処理のフローを示すフローチャートである。
【００９０】
図１３に示すように、キャッシュ管理部３１は、クライアントキャッシュ４０ｃの割当要求又は解放要求を受信する（ステップＳ３１）。そして、キャッシュ管理部３１は、スレーブ管理部３３へスレーブメモリキャッシュサーバへのクライアントキャッシュ４０ｃの割当又は解放を要求する（ステップＳ３２）。
【００９１】
そして、キャッシュ管理部３１は、スレーブ管理表３０ａ及びリモートキャッシュ管理表２１ｅを更新し（ステップＳ３３）、クライアント１のリモートドライバ１１ｂへ割当又は解放を応答する（ステップＳ３４）。そして、キャッシュ管理部３１は、バッキングストア管理部３４へバッキングストア管理表２ｂの更新を依頼する（ステップＳ３５）。
【００９２】
このように、キャッシュ管理部３１は、スレーブ管理部３３を介してスレーブメモリキャッシュサーバへクライアントキャッシュ４０ｃの割当又は解放を要求することで、クライアントキャッシュ４０ｃの割当又は解放を行うことができる。
【００９３】
次に、バッキングストア管理部３４による処理のフローについて説明する。図１４は、バッキングストア管理部３４による処理のフローを示すフローチャートである。図１４に示すように、バッキングストア管理部３４は、ファイルサーバ２のバッキングストア管理ＤＢへアクセスしてバッキングストア管理表２ｂを更新する（ステップＳ３６）。
【００９４】
このように、バッキングストア管理部３４がファイルサーバ２のバッキングストア管理ＤＢへアクセスしてバッキングストア管理表２ｂを更新することで、ファイルサーバ２はバッキングストアを確実に行うことができる。
【００９５】
次に、スレーブ管理部３３によるスレーブメモリキャッシュサーバへのメモリキャッシュ操作指示処理のフローについて説明する。図１５は、スレーブ管理部３３によるスレーブメモリキャッシュサーバへのメモリキャッシュ操作指示処理のフローを示すフローチャートである。なお、スレーブ管理部３３は、キャッシュ管理部３１から、図１３に示したステップＳ３２の処理において割当又は解放を要求され、図９に示したステップＳ８の処理において移動を指示され、図９に示したステップＳ９の処理において退避を指示される。
【００９６】
図１５に示すように、スレーブ管理部３３は、キャッシュ管理部３１からの要求が割当か否かを判定し（ステップＳ４１）、割当である場合には、スレーブメモリキャッシュサーバのマスター対応部４５へメモリキャッシュの割当を指示する（ステップＳ４２）。
【００９７】
一方、キャッシュ管理部３１からの要求が割当でない場合には、スレーブ管理部３３は、キャッシュ管理部３１からの要求が解放か否かを判定する（ステップＳ４３）。そして、キャッシュ管理部３１からの要求が解放である場合には、スレーブ管理部３３は、スレーブメモリキャッシュサーバのマスター対応部４５へメモリキャッシュの解放を指示する（ステップＳ４４）。
【００９８】
一方、キャッシュ管理部３１からの要求が解放でない場合には、スレーブ管理部３３は、キャッシュ管理部３１からの要求が移動か否かを判定する（ステップＳ４５）。そして、キャッシュ管理部３１からの要求が移動である場合には、スレーブ管理部３３は、スレーブメモリキャッシュサーバのマスター対応部４５へ、指定された２つのノード１０間でのメモリキャッシュの移動を指示する（ステップＳ４６）。
【００９９】
一方、キャッシュ管理部３１からの要求が移動でない場合には、スレーブ管理部３３は、キャッシュ管理部３１からの要求が退避か否かを判定し（ステップＳ４７）、退避でない場合には、処理を終了する。一方、キャッシュ管理部３１からの要求が退避である場合には、スレーブ管理部３３は、スレーブメモリキャッシュサーバのマスター対応部４５へ、指定されたノード１０からファイルサーバ２へのメモリキャッシュの退避を指示する（ステップＳ４８）。
【０１００】
このように、スレーブ管理部３３がキャッシュ管理部３１からの要求に基づいてメモリキャッシュの操作をスレーブメモリキャッシュサーバのマスター対応部４５へ指示することで、マスターメモリキャッシュサーバ３はメモリキャッシュの操作を行うことができる。
【０１０１】
次に、スレーブメモリキャッシュサーバのマスター対応部４５による処理のフローについて説明する。図１６は、マスター対応部４５による処理のフローを示すフローチャートである。
【０１０２】
図１６に示すように、マスター対応部４５は、スレーブ管理部３３からの指示が割当か否かを判定する（ステップＳ５１）。その結果、割当である場合には、マスター対応部４５は、メモリキャッシュを割り当て、ファイルサーバ２からスレーブメモリキャッシュサーバ上のメモリキャッシュへのファイル読み出しをバッキングストアアクセス部４４へ指示する（ステップＳ５２）。そして、マスター対応部４５は、メモリキャッシュの内容を他のスレーブメモリキャッシュサーバへ反映するようにフレンド対応部４６へ指示する（ステップＳ５３）。
【０１０３】
一方、スレーブ管理部３３からの指示が割当でない場合には、マスター対応部４５は、スレーブ管理部３３からの指示が解放か否かを判定する（ステップＳ５４）。そして、指示が解放である場合には、マスター対応部４５は、スレーブメモリキャッシュサーバ上のメモリキャッシュからファイルサーバ２のメモリキャッシュへのファイル書き出しをバッキングストアアクセス部４４へ指示する（ステップＳ５５）。そして、書き出しが完了したら、マスター対応部４５は、メモリキャッシュを解放し、メモリキャッシュの解放指示を他のスレーブメモリキャッシュサーバへ行うようフレンド対応部４６へ指示する（ステップＳ５６）。
【０１０４】
一方、スレーブ管理部３３からの指示が解放でない場合には、マスター対応部４５は、スレーブ管理部３３からの指示が移動か否かを判定する（ステップＳ５７）。そして、スレーブ管理部３３からの指示が移動である場合には、マスター対応部４５は、指定された２つのノード１０間でのメモリキャッシュの移動をフレンド対応部４６へ指示する（ステップＳ５８）。
【０１０５】
一方、スレーブ管理部３３からの指示が移動でない場合には、マスター対応部４５は、スレーブ管理部３３からの指示が退避か否かを判定し（ステップＳ５９）、退避でない場合には、処理を終了する。一方、スレーブ管理部３３からの指示が退避である場合には、マスター対応部４５は、スレーブメモリキャッシュサーバの全てのメモリキャッシュからファイルサーバ２へのファイルの書き出しをバッキングストアアクセス部４４へ指示する（ステップＳ６０）。そして、マスター対応部４５は、書き出しが完了したら、全てのメモリキャッシュを解放し、他のスレーブメモリキャッシュサーバへ全てのメモリキャッシュの解放指示を行うようにフレンド対応部４６へ指示する（ステップＳ６１）。
【０１０６】
このように、マスター対応部４５がスレーブ管理部３３からの指示に基づいてメモリキャッシュの操作を行うことで、マスターメモリキャッシュサーバ３はメモリキャッシュの操作を行うことができる。
【０１０７】
次に、フレンド対応部４６による処理のフローについて説明する。図１７は、フレンド対応部４６による処理のフローを示すフローチャートである。図１７に示すように、フレンド対応部４６は、マスター対応部４５からの指示が割当か否かを判定する（ステップＳ７１）。
【０１０８】
その結果、割当である場合には、フレンド対応部４６は、他のスレーブメモリキャッシュサーバのフレンド対応部４６へメモリキャッシュの割当を指示する（ステップＳ７２）。そして、フレンド対応部４６は、ＭＰＩ＿ＢＣＡＳＴとＭＰＩ＿ＲＥＤＵＣＥ（ＥＸＯＲ）インタフェースを用いてインターコネクト部１０ｃにメモリキャッシュの内容をコピーして内容の一致を確認するよう指示する（ステップＳ７３）。
【０１０９】
一方、マスター対応部４５からの指示が割当でない場合には、フレンド対応部４６は、マスター対応部４５からの指示が解放か否かを判定する（ステップＳ７４）。そして、指示が解放である場合には、フレンド対応部４６は、他のスレーブメモリキャッシュサーバのフレンド対応部４６へメモリキャッシュの解放を指示する（ステップＳ７５）。
【０１１０】
一方、マスター対応部４５からの指示が解放でない場合には、フレンド対応部４６は、マスター対応部４５からの指示が移動か否かを判定する（ステップＳ７６）。そして、マスター対応部４５からの指示が移動である場合には、フレンド対応部４６は、以下の処理を行う。すなわち、フレンド対応部４６は、指定された２つのノード１０間で全てのメモリキャッシュの内容をコピーして内容の一致を確認するようにＭＰＩ＿ＢＣＡＳＴとＭＰＩ＿ＲＥＤＵＣＥ（ＥＸＯＲ）インタフェースを用いてインターコネクト部１０ｃに指示する（ステップＳ７７）。
【０１１１】
一方、マスター対応部４５からの指示が移動でない場合には、フレンド対応部４６は、マスター対応部４５からの指示が退避か否かを判定し（ステップＳ７８）、退避でない場合には、処理を終了する。一方、マスター対応部４５からの指示が退避である場合には、フレンド対応部４６は、他のスレーブメモリキャッシュサーバのフレンド対応部４６へ全てのメモリキャッシュの解放を指示する（ステップＳ７９）。
【０１１２】
このように、フレンド対応部４６がマスター対応部４５からの指示に基づいて他のスレーブメモリキャッシュサーバのメモリキャッシュの操作を行うことで、スレーブメモリキャッシュサーバはメモリキャッシュの冗長性及び負荷分散を実現することができる。
【０１１３】
次に、マスターメモリキャッシュサーバ３の切替マスターデーモン３２とスレーブメモリキャッシュサーバの切替サブデーモン４１が連携してクライアントキャッシュ４０ｃをサーバキャッシュ４０ｄに切り替える切替処理のフローについて説明する。
【０１１４】
図１８は、切替マスターデーモン３２による切替処理のフローを示すフローチャートである。図１８に示すように、切替マスターデーモン３２は、切替サブデーモン４１からのクライアントキャッシュ使用済の通知を待ち、切替サブデーモン４１からクライアントキャッシュ使用済の通知を受信する（ステップＳ８１）。
【０１１５】
そして、切替マスターデーモン３２は、使用済となったクライアントキャッシュ４０ｃをサーバキャッシュ４０ｄとして管理できるようにリモートキャッシュ管理表１１ｅを更新する（ステップＳ８２）。そして、切替マスターデーモン３２は、使用済となったクライアントキャッシュ４０ｃをサーバキャッシュ４０ｄに変更するように切替サブデーモン４１に指示し（ステップＳ８３）、ステップＳ８１へ戻る。
【０１１６】
図１９は、切替サブデーモン４１による切替処理のフローを示すフローチャートである。図１９に示すように、切替サブデーモン４１は、クライアントキャッシュ４０ｃ用の領域の使用状況を確認する（ステップＳ９１）。そして、切替サブデーモン４１は、使用済となったクライアントキャッシュ４０ｃについて、クライアントキャッシュ使用済の通知を切替マスターデーモン３２に送信する（ステップＳ９２）。
【０１１７】
そして、切替サブデーモン４１は、切替マスターデーモン３２からの指示を待ち、切替マスターデーモン３２からの指示を受信する（ステップＳ９３）。そして、切替サブデーモン４１は、クライアントキャッシュ４０ｃは主スレーブメモリキャッシュサーバ４で使用されているものか否かを判定する（ステップＳ９４）。その結果、主スレーブメモリキャッシュサーバ４で使用されているものでない場合は、切替サブデーモン４１は、クライアントキャッシュ４０ｃの領域を解放し（ステップＳ９５）、ステップＳ９１へ戻る。
【０１１８】
一方、クライアントキャッシュ４０ｃが主スレーブメモリキャッシュサーバ４で使用されているものである場合には、切替サブデーモン４１は、ＭＰＩ＿ＢＣＡＳＴとＭＰＩ＿ＲＥＤＵＣＥ（ＥＸＯＲ）インタフェースを用いて以下の処理を実行する。すなわち、切替サブデーモン４１は、クライアントキャッシュ４０ｃの内容をサーバキャッシュ４０ｄ及びファイルサーバ２のファイルキャッシュにコピーして内容の一致を確認するようインターコネクト部１０ｃに指示する（ステップＳ９６）。そして、切替サブデーモン４１は、使用済となったクライアントキャッシュ４０ｃを書き込み内容は保持した状態でサーバキャッシュ４０ｄに用途を変更し（ステップＳ９７）、ステップＳ９１へ戻る。
【０１１９】
このように、切替マスターデーモン３２と切替サブデーモン４１が連携してクライアントキャッシュ４０ｃをサーバキャッシュ４０ｄに切り替えることで、ディスク装置２ａに対する無駄な書き込みと読み出しをなくすことができる。
【０１２０】
上述してきたように、実施例では、スレーブメモリキャッシュサーバが、クライアントキャッシュ４０ｃをメインメモリ１０ｂに記憶する。そして、スレーブメモリキャッシュサーバは、クライアントキャッシュ４０ｃが使用済になると、クライアントキャッシュ４０ｃの内容をファイルサーバ２のファイルキャッシュにコピーする。また、ファイルサーバ２は、クライアントキャッシュ４０ｃされるデータをディスク装置２ａに記憶し、スレーブ管理表３０ａ及びリモートキャッシュ管理表２１ｅを記憶部２１ｃに記憶する。
【０１２１】
そして、マスターメモリキャッシュサーバ３は、クライアントキャッシュ４０ｃが使用済になったことを切替サブデーモン４１から通知されると、使用済のクライアントキャッシュ４０ｃをサーバキャッシュ４０ｄとして管理できるようにリモートキャッシュ管理表１１ｅを更新する。また、マスターメモリキャッシュサーバ３は、更新したリモートキャッシュ管理表１１ｅをファイルサーバ２に送信する。そして、切替マスターデーモン３２は、使用済のクライアントキャッシュ４０ｃをサーバキャッシュ４０ｄに変更するように切替サブデーモン４１に指示する。
【０１２２】
そして、ファイルサーバ２は、サーバキャッシュ４０ｄに変更されたデータの送信要求をクライアント１から受信すると、リモートキャッシュ管理表１１ｅを参照し、スレーブメモリキャッシュサーバにデータがあるか否かを判定する。そして、スレーブメモリキャッシュサーバにデータがあると判定すると、ファイルサーバ２は、スレーブメモリキャッシュサーバにサーバキャッシュ４０ｄに変更されたデータをクライアント１に送信するように指示する。
【０１２３】
したがって、並列処理装置７は、前のジョブのクライアントキャッシュ４０ｃを次のジョブのサーバキャッシュ４０ｄとして利用することができる。このため、クライアントキャッシュ４０ｃのディスク装置２ａへの書き込みとサーバキャッシュ４０ｄのディスク装置２ａからの読み出しを不要とすることができる。なお、ファイルサーバ２のファイルキャッシュにコピーされたデータは、別途、ファイルサーバ２により、ディスク装置２ａに書き込まれる。
【０１２４】
また、実施例では、スレーブメモリキャッシュサーバは、クライアントキャッシュ４０ｃの内容をファイルサーバ２に送信する際に、ＭＰＩの集団通信インタフェース（ＭＰＩ＿ＢＣＡＳＴ）を利用して、ファイルサーバ２にＲＤＭＡ転送を行う。したがって、スレーブメモリキャッシュサーバは、クライアントキャッシュ４０ｃの内容をファイルサーバ２に送信する際に、ＣＰＵ１０ａの負荷の増加を防ぐことができる。
【０１２５】
また、実施例では、スレーブメモリキャッシュサーバは、ＲＤＭＡ転送の通信完了を確認する際に、ＣＰＵ１０ａを利用したメモリ内容のロックはしない。スレーブメモリキャッシュサーバは、ＭＰＩのＲＥＤＵＣＥインタフェース（ＭＰＩ＿ＲＥＤＵＣＥ）の排他的論理和（ＥＸＯＲ）の演算を利用して、ファイルサーバ２との間でメモリ内容の一致を確認する。したがって、スレーブメモリキャッシュサーバは、ＣＰＵ１０ａに悪影響を与えることなく、ファイルサーバ２との間でメモリ内容の一致を確認することができる。
【０１２６】
なお、実施例では、クライアントキャッシュ４０ｃが使用済になるとクライアントキャッシュ４０ｃをサーバキャッシュ４０ｄに切り替える場合について説明した。しかし、クライアントキャッシュ４０ｃとして使用できる領域の使用状態に基づいてサーバキャッシュ４０ｄへの切替を制御することもできる。そこで、クライアントキャッシュ４０ｃとして使用できる領域の使用状態に基づいてサーバキャッシュ４０ｄへの切替を制御する切替マスターデーモン３２及び切替サブデーモン４１について説明する。
【０１２７】
図２０は、クライアントキャッシュ４０ｃとして使用できる領域の使用状態に基づいてサーバキャッシュ４０ｄへの切替を制御する切替マスターデーモン３２の切替処理のフローを示すフローチャートである。図２０に示すように、切替マスターデーモン３２は、切替サブデーモン４１からのクライアントキャッシュ用領域の使用済の通知を待ち、切替サブデーモン４１からクライアントキャッシュ用領域の使用済の通知を受信する（ステップＳ１０１）。
【０１２８】
そして、切替マスターデーモン３２は、クライアントキャッシュ４０ｃ用に割り当てた各ノード１０の状態を確認する（ステップＳ１０２）。そして、切替マスターデーモン３２は、クライアントキャッシュ４０ｃ用に割り当てたノード１０の内、８０％以上のノード１０がクライアントキャッシュ４０ｃ用の空き領域が少ない状態であるか否かを判定する（ステップＳ１０３）。
【０１２９】
ここで、クライアントキャッシュ４０ｃ用の空き領域が少ない状態であるとは、例えば、クライアントキャッシュ４０ｃ用の領域の８０％以上が使用されている状態である。また、８０％以上のノード１０がクライアントキャッシュ４０ｃ用の空き領域が少ない状態であるか否かを判定する場合の８０％は一例であり、他の値でもよい。
【０１３０】
そして、８０％以上のノード１０がクライアントキャッシュ４０ｃ用の空き領域が少ないという状態でない場合には、切替マスターデーモン３２は、クライアントキャッシュ４０ｃ用に領域を割り当てるように、切替サブデーモン４１に指示する（ステップＳ１０４）。
【０１３１】
一方、８０％以上のノード１０がクライアントキャッシュ４０ｃ用の空き領域が少ない状態である場合には、切替マスターデーモン３２は、クライアントキャッシュ４０ｃをサーバキャッシュ４０ｄとして管理できるようにリモートキャッシュ管理表１１ｅを更新する（ステップＳ１０５）。そして、切替マスターデーモン３２は、クライアントキャッシュ４０ｃからサーバキャッシュ４０ｄに変更するように切替サブデーモン４１に指示する（ステップＳ１０６）。
【０１３２】
その後、切替マスターデーモン３２は、切替サブデーモン４１からのクライアントキャッシュ用領域の割当可能通知を待ち、切替サブデーモン４１からクライアントキャッシュ用領域の割当可能通知を受信する（ステップＳ１０７）。そして、切替マスターデーモン３２は、クライアントキャッシュ４０ｃ用に割り当てた各ノード１０の状態を確認する（ステップＳ１０８）。
【０１３３】
そして、切替マスターデーモン３２は、クライアントキャッシュ４０ｃ用に割り当てたノード１０の内、６０％未満のノード１０がクライアントキャッシュ４０ｃ用の空き領域が少ない状態であるか否かを判定する（ステップＳ１０９）。ここで、６０％は一例であり、他の値でもよい。
【０１３４】
そして、切替マスターデーモン３２は、６０％未満のノード１０がクライアントキャッシュ４０ｃ用の空き領域が少ない状態である場合には、以下の処理を行う。すなわち、切替マスターデーモン３２は、クライアントキャッシュ４０ｃをサーバキャッシュ４０ｄに変更する処理を停止するように切替サブデーモン４１に指示する（ステップＳ１１０）。そして、切替マスターデーモン３２は、ステップＳ１０１に戻る。
【０１３５】
一方、６０％未満のノード１０がクライアントキャッシュ４０ｃ用の空き領域が少ないという状態でない場合には、切替マスターデーモン３２は、クライアントキャッシュ４０ｃをサーバキャッシュ４０ｄに変更するように切替サブデーモン４１に指示する（ステップＳ１１１）。そして、切替マスターデーモン３２は、ステップＳ１０１に戻る。
【０１３６】
図２１は、クライアントキャッシュ４０ｃとして使用できる領域の使用状態に基づいてサーバキャッシュ４０ｄ切替を制御する切替サブデーモン４１の切替処理のフローを示すフローチャートである。図２１に示すように、切替サブデーモン４１は、クライアントキャッシュ４０ｃ用の領域の使用状況を確認する（ステップＳ１２１）。
【０１３７】
そして、切替サブデーモン４１は、クライアントキャッシュ４０ｃ用の空き領域が少ない状態であるか否かを判定する（ステップＳ１２２）。ここで、クライアントキャッシュ４０ｃ用の空き領域が少ない状態であるとは、例えば、クライアントキャッシュ４０ｃ用の領域の８０％以上が使用されている状態である。そして、クライアントキャッシュ４０ｃ用の空き領域が少ないという状態でない場合には、切替サブデーモン４１は、クライアントキャッシュ４０ｃ用に領域の割当が可能であるとし（ステップＳ１２３）、ステップＳ１２１に戻る。
【０１３８】
一方、クライアントキャッシュ４０ｃ用の空き領域が少ない状態である場合には、切替サブデーモン４１は、クライアントキャッシュ４０ｃ用の領域の使用済を切替マスターデーモン３２に通知する（ステップＳ１２４）。そして、切替サブデーモン４１は、切替マスターデーモン３２からの指示を待ち、切替マスターデーモン３２からの指示を受信する（ステップＳ１２５）。
【０１３９】
そして、切替サブデーモン４１は、クライアントキャッシュ４０ｃの状態を確認し（ステップＳ１２６）、クライアントキャッシュ４０ｃはもっとも最近まで書き込まれていたものか否かを判定する（ステップＳ１２７）。そして、クライアントキャッシュ４０ｃがもっとも最近まで書き込まれていたものである場合には、切替サブデーモン４１は、使用済となったクライアントキャッシュ４０ｃをクライアントキャッシュ４０ｃとして残し（ステップＳ１２８）、ステップＳ１２１に戻る。
【０１４０】
一方、クライアントキャッシュ４０ｃがもっとも最近まで書き込まれていたものでない場合には、切替サブデーモン４１は、クライアントキャッシュ４０ｃは主スレーブメモリキャッシュサーバ４で使用されているものか否かを判定する（ステップＳ１２９）。その結果、主スレーブメモリキャッシュサーバ４で使用されているものでない場合は、切替サブデーモン４１は、クライアントキャッシュ４０ｃの領域を解放し（ステップＳ１３０）、ステップＳ１３３へ進む。
【０１４１】
一方、クライアントキャッシュ４０ｃが主スレーブメモリキャッシュサーバ４で使用されているものである場合には、切替サブデーモン４１は、ＭＰＩ＿ＢＣＡＳＴとＭＰＩ＿ＲＥＤＵＣＥ（ＥＸＯＲ）インタフェースを用いて以下の処理を実行する。すなわち、切替サブデーモン４１は、インターコネクト部１０ｃにクライアントキャッシュ４０ｃの内容をサーバキャッシュ４０ｄ及びファイルサーバ２のファイルキャッシュにコピーして内容の一致を確認するよう指示する（ステップＳ１３１）。そして、切替サブデーモン４１は、使用済となったクライアントキャッシュ４０ｃを書き込み内容は保持した状態でサーバキャッシュ４０ｄに用途を変更する（ステップＳ１３２）。
【０１４２】
そして、切替サブデーモン４１は、クライアントキャッシュ４０ｃ用の空き領域が十分ある状態であるか否かを判定する（ステップＳ１３３）。ここで、クライアントキャッシュ４０ｃ用の空き領域が十分ある状態とは、例えば、クライアントキャッシュ４０ｃ用の領域の６０％未満が使用されている状態である。そして、クライアントキャッシュ４０ｃ用の空き領域が十分という状態でない場合には、切替サブデーモン４１は、クライアントキャッシュ４０ｃの領域を使用済のままとし（ステップＳ１３４）、ステップＳ１２１に戻る。
【０１４３】
一方、クライアントキャッシュ４０ｃ用の空き領域が十分ある状態である場合には、切替サブデーモン４１は、クライアントキャッシュ４０ｃ用の領域を割当可能な状態に戻す（ステップＳ１３５）。そして、切替サブデーモン４１は、切替マスターデーモン３２にクライアントキャッシュ４０ｃ用の領域を割当可能な状態に戻したことを通知する（ステップＳ１３６）。
【０１４４】
そして、切替サブデーモン４１は、切替マスターデーモン３２からの指示を待ち、切替マスターデーモン３２からの指示を受信すると（ステップＳ１３７）、指示に基づく状態にする（ステップＳ１３８）。ここで、指示に基づく状態には、クライアントキャッシュ４０ｃからサーバキャッシュ４０ｄに変更する状態又はクライアントキャッシュ４０ｃからサーバキャッシュ４０ｄへの変更を停止する状態である。
【０１４５】
このように、クライアントキャッシュ４０ｃ用の空き領域の状態に基づいてクライアントキャッシュ４０ｃからサーバキャッシュ４０ｄへの切替を制御することで、クライアントキャッシュ４０ｃ用の空き領域の状態に適した切替を行うことができる。
【符号の説明】
【０１４６】
１，９    クライアント
２，８    ファイルサーバ
２ａ    ディスク装置
３    マスターメモリキャッシュサーバ
４    主スレーブメモリキャッシュサーバ
５    他スレーブメモリキャッシュサーバ
６    ジョブスケジューラ
７    並列処理装置
８ａ    キャッシュサーバ
８ｃ    ネットワーク
９ａ    キャッシュサーバ
１０    ノード
１０ａ    ＣＰＵ
１０ｂ    メインメモリ
１０ｃ    インターコネクト部
１１    ＯＳ
１１ａ    ファイル管理部
１１ｂ    リモートドライバ
１１ｃ    記憶部
１１ｄ    メモリ仮想ディスク
１１ｅ    リモートキャッシュ管理表
１１ｆ    ＣＰＵメモリ位置情報
２１    ＯＳ
２１ａ，８１    ファイル管理部
２１ｂ    リモートドライバ
２１ｃ    記憶部
２１ｄ    リモートメモリ仮想ディスク
２１ｅ    リモートキャッシュ管理表
２１ｆ    ＣＰＵメモリ位置情報
２１ｇ    受信部
２１ｈ    制御部
３０    記憶部
３０ａ    スレーブ管理表
３０ｂ    ＣＰＵメモリ位置情報
３０ｃ    リモートキャッシュ管理表
３１    キャッシュ管理部
３２    切替マスターデーモン
３３    スレーブ管理部
３４    バッキングストア管理部
４０    記憶部
４０ａ    リモートキャッシュ管理表
４０ｂ    ＣＰＵメモリ位置情報
４０ｃ，９３    クライアントキャッシュ
４０ｄ，８２    サーバキャッシュ
４１    切替サブデーモン
４２    クライアント対応部
４３    サーバ対応部
４４    バッキングストアアクセス部
４５    マスター対応部
４６    フレンド対応部
６１    資源割当マップ
９１    クライアントアプリケーション
９２    ファイルキャッシュ
【図１】
0006696315.tif 000002
【図２】
0006696315.tif 000003
【図３】
0006696315.tif 000004
【図４】
0006696315.tif 000005
【図５】
0006696315.tif 000006
【図６】
0006696315.tif 000007
【図７】
0006696315.tif 000008
【図８】
0006696315.tif 000009
【図９】
0006696315.tif 000010
【図１０】
0006696315.tif 000011
【図１１】
0006696315.tif 000012
【図１２】
0006696315.tif 000013
【図１３】
0006696315.tif 000014
【図１４】
0006696315.tif 000015
【図１５】
0006696315.tif 000016
【図１６】
0006696315.tif 000017
【図１７】
0006696315.tif 000018
【図１８】
0006696315.tif 000019
【図１９】
0006696315.tif 000020
【図２０】
0006696315.tif 000021
【図２１】
0006696315.tif 000022
【図２２】
0006696315.tif 000023
【図２３】
0006696315.tif 000024
【図２４】
0006696315.tif 000025