(57)【要約】【課題】分散キャッシュシステムの目標性能が達成されるように、複数の計算ノード間のキャッシュコンシステンシを自動的に制御すること。【解決手段】複数の計算ノードは、ブロック単位でデータキャッシュを行う。各計算ノードは、コピーブロックとメタ情報が格納される記憶装置と、キャッシュ制御部と、転送量算出部とを備える。メタ情報は、コピーブロックのステータスとアクセス履歴情報とを含む。第１計算ノードは、第１ブロックに対するライトアクセスを受け取る。転送量算出部は、第１コピーブロックに関連付けられたメタ情報に含まれるアクセス履歴情報を参照して、計算ノード間で将来発生する第１コピーブロックの転送量を算出する。キャッシュ制御部は、目標性能と算出された転送量に基づいて、コンシステンシを緩和するか否かを決定する。コンシステンシを緩和する場合、第１コピーブロックをキャッシュしている他の計算ノードにおいて、第１コピーブロックのステータスは変更されない。【選択図】図２
2010140362.tif 000002
【特許請求の範囲】
【請求項１】
ブロック単位でデータキャッシュを行う複数の計算ノードを備え、
前記複数の計算ノードの各々は、
ブロックのコピーであるコピーブロックと、前記コピーブロックに関連付けられたメタ情報と、が格納される記憶装置と、
前記複数の計算ノード間でのキャッシュのコンシステンシを制御するキャッシュ制御部と、
転送量算出部と
を備え、
前記メタ情報は、
前記コピーブロックのステータスと、
前記ブロックに関する過去のアクセス状況を示すアクセス履歴情報と
を含み、
前記複数の計算ノードのうち第１計算ノードは、第１ブロックに対するライトアクセスを受け取り、
前記第１ブロックのコピーは第１コピーブロックであり、
前記第１計算ノードの前記転送量算出部は、前記第１コピーブロックに関連付けられた前記メタ情報に含まれる前記アクセス履歴情報を参照して、前記複数の計算ノード間で将来発生する前記第１コピーブロックの転送量を算出し、
前記第１計算ノードの前記キャッシュ制御部は、目標性能と前記算出された転送量に基づいて、前記コンシステンシを緩和するか否かを決定し、
前記コンシステンシを緩和しない場合、前記第１計算ノードの前記キャッシュ制御部は、前記第１コピーブロックをキャッシュしている他の計算ノードが前記第１コピーブロックの前記ステータスを変更するよう指示を行い、
前記コンシステンシを緩和する場合、前記第１計算ノードの前記キャッシュ制御部は、前記他の計算ノードが前記第１コピーブロックの前記ステータスを変更することを指示しない
分散キャッシュシステム。
【請求項２】
請求項１に記載の分散キャッシュシステムであって、
前記目標性能が達成される前記転送量の上限は、閾値転送量であり、
前記第１計算ノードの前記キャッシュ制御部は、前記算出された転送量と前記閾値転送量との比較を行い、前記比較の結果に基づいて、前記コンシステンシを緩和するか否かを決定する
分散キャッシュシステム。
【請求項３】
請求項２に記載の分散キャッシュシステムであって、
前記算出された転送量が前記閾値転送量以下の場合、前記第１計算ノードの前記キャッシュ制御部は、前記コンシステンシを緩和しないことを決定する
分散キャッシュシステム。
【請求項４】
請求項３に記載の分散キャッシュシステムであって、
前記算出された転送量が前記閾値転送量を超える場合、前記第１計算ノードの前記キャッシュ制御部は、前記算出された転送量に対する前記閾値転送量の比率を算出し、前記比率に基づいて前記コンシステンシを緩和するか否かを決定し、
前記比率が小さい程、前記コンシステンシが緩和される確率が高くなる
分散キャッシュシステム。
【請求項５】
請求項４に記載の分散キャッシュシステムであって、
前記第１計算ノードの前記キャッシュ制御部は、０以上１未満の乱数を生成し、
前記乱数が前記比率以上の場合、前記第１計算ノードの前記キャッシュ制御部は、前記コンシステンシを緩和することを決定し、
前記乱数が前記比率より小さい場合、前記第１計算ノードの前記キャッシュ制御部は、前記コンシステンシを緩和しないことを決定する
分散キャッシュシステム。
【請求項６】
請求項３に記載の分散キャッシュシステムであって、
前記算出された転送量が前記閾値転送量を超える場合、前記第１計算ノードの前記キャッシュ制御部は、前記コンシステンシを緩和することを決定する
分散キャッシュシステム。
【請求項７】
請求項１乃至６のいずれか一項に記載の分散キャッシュシステムであって、
前記ステータスは、
前記コピーブロックが最新であり、且つ、前記複数の計算ノードのうち自身にのみキャッシュされていることを示すｅｘｃｌｕｓｉｖｅと、
前記コピーブロックが最新であり、且つ、前記複数の計算ノードのうち２以上の計算ノードにキャッシュされていることを示すｓｈａｒｅｄと、
前記コピーブロックが最新ではないことを示すｓｔａｌｅと
を含み、
前記第１計算ノードの前記キャッシュ制御部は、前記ライトアクセスに応答して、前記第１コピーブロックの前記ステータスをｅｘｃｌｕｓｉｖｅに設定し、
前記コンシステンシを緩和しない場合、前記第１計算ノードの前記キャッシュ制御部は、前記他の計算ノードが前記第１コピーブロックの前記ステータスをｓｔａｌｅに変更するよう指示を行い、
前記コンシステンシを緩和する場合、前記第１計算ノードの前記キャッシュ制御部は、前記他の計算ノードが前記第１コピーブロックの前記ステータスをｓｔａｌｅに変更することを指示しない
分散キャッシュシステム。
【請求項８】
請求項７に記載の分散キャッシュシステムであって、
前記他の計算ノードは、前記第１ブロックに対するリードアクセスを受け取り、
前記第１コピーブロックの前記ステータスがｅｘｃｌｕｓｉｖｅあるいはｓｈａｒｅｄの場合、前記他の計算ノードの前記キャッシュ制御部は、前記記憶装置に格納されている前記第１コピーブロックからデータを読み出し、
前記第１コピーブロックの前記ステータスがｓｔａｌｅの場合、前記他の計算ノードの前記キャッシュ制御部は、前記第１計算ノードからの前記第１コピーブロックの転送を要求する
分散キャッシュシステム。
【請求項９】
請求項１乃至８のいずれか一項に記載の分散キャッシュシステムであって、
ライトアクセス比率Ｗは、前記第１ブロックへの総アクセス数に対する前記第１ブロックへのライトアクセス数の比率であり、
ライトアクセスレートＲＴは、単位時間あたりの前記第１ブロックへのライトアクセス数であり、
スコープＮは、前記複数の計算ノードのうち前記第１ブロックへのアクセスが発行される計算ノードの数であり、
前記第１計算ノードの前記転送量算出部は、前記アクセス履歴情報を参照して、前記ライトアクセス比率Ｗ及び前記ライトアクセスレートＲＴを算出し、
前記第１計算ノードの前記転送量算出部は、１回のライトアクセスに起因して将来発生する前記第１コピーブロックの転送回数Ｃ（Ｗ，Ｎ）を算出し、ここで、前記転送回数Ｃ（Ｗ，Ｎ）は、前記ライトアクセス比率Ｗ及び前記スコープＮに依存し、
前記第１計算ノードの前記転送量算出部は、前記転送回数Ｃ（Ｗ，Ｎ）及び前記ライトアクセスレートＲＴに基づいて前記転送量を算出する
分散キャッシュシステム。
【請求項１０】
請求項９に記載の分散キャッシュシステムであって、
前記第１計算ノードの前記転送量算出部は、前記ライトアクセス比率Ｗが小さくなるほど、また、前記スコープＮが大きくなるほど、前記転送回数Ｃ（Ｗ，Ｎ）が多くなる所定の関数を用いることによって、前記転送回数Ｃ（Ｗ，Ｎ）を算出する
分散キャッシュシステム。
【請求項１１】
請求項１０に記載の分散キャッシュシステムであって、
前記所定の関数は、Ｃ（Ｗ，Ｎ）＝（Ｎ−１）／（Ｗ・Ｎ−Ｗ＋１）である
分散キャッシュシステム。
【請求項１２】
請求項９乃至１１のいずれか一項に記載の分散キャッシュシステムであって、
前記第１ブロックに関する前記アクセス履歴情報は、
前記第１ブロックへの過去のライトアクセス数ＮＷと、
前記第１ブロックへの過去のリードアクセス数ＮＲと、
前記ライトアクセス数ＮＷと前記リードアクセス数ＮＲの測定開始時刻Ｔ０と、
前記スコープＮと
を含み、
前記第１計算ノードの前記転送量算出部は、式：Ｗ＝ＮＷ／（ＮＷ＋ＮＲ）によって前記ライトアクセス比率Ｗを算出し、
現在時刻がＴであるとき、前記第１計算ノードの前記転送量算出部は、式：ＲＴ＝ＮＷ／（Ｔ−Ｔ０）によって前記ライトアクセスレートＲＴを算出する
分散キャッシュシステム。
【請求項１３】
ブロック単位でデータキャッシュを行う複数の計算ノードを備える分散キャッシュシステムにおける計算ノードであって、
ブロックのコピーであるコピーブロックと、前記コピーブロックに関連付けられたメタ情報と、が格納される記憶装置と、
前記複数の計算ノード間でのキャッシュのコンシステンシを制御するキャッシュ制御部と、
転送量算出部と
を備え、
前記メタ情報は、
前記コピーブロックのステータスと、
前記ブロックに関する過去のアクセス状況を示すアクセス履歴情報と
を含み、
前記計算ノードは、第１ブロックに対するライトアクセスを受け取り、
前記第１ブロックのコピーは第１コピーブロックであり、
前記転送量算出部は、前記第１コピーブロックに関連付けられた前記メタ情報に含まれる前記アクセス履歴情報を参照して、前記複数の計算ノード間で将来発生する前記第１コピーブロックの転送量を算出し、
前記キャッシュ制御部は、目標性能と前記算出された転送量に基づいて、前記コンシステンシを緩和するか否かを決定し、
前記コンシステンシを緩和しない場合、前記キャッシュ制御部は、前記第１コピーブロックをキャッシュしている他の計算ノードが前記第１コピーブロックの前記ステータスを変更するよう指示を行い、
前記コンシステンシを緩和する場合、前記キャッシュ制御部は、前記他の計算ノードが前記第１コピーブロックの前記ステータスを変更することを指示しない
計算ノード。
【請求項１４】
複数の計算ノードがブロック単位でデータキャッシュを行うステップと、
ここで、前記複数の計算ノードの各々は、ブロックのコピーであるコピーブロックと共に、前記コピーブロックに関連付けられたメタ情報を記憶装置に格納し、
前記メタ情報は、前記コピーブロックのステータスと、前記ブロックに関する過去のアクセス状況を示すアクセス履歴情報と、を含み、
前記複数の計算ノードのうち第１計算ノードが、第１ブロックに対するライトアクセスを受け取るステップと、
ここで、前記第１ブロックのコピーは第１コピーブロックであり、
前記第１計算ノードが、前記第１コピーブロックに関連付けられた前記メタ情報に含まれる前記アクセス履歴情報を参照して、前記複数の計算ノード間で将来発生する前記第１コピーブロックの転送量を算出するステップと、
前記第１計算ノードが、目標性能と前記算出された転送量に基づいて、前記複数の計算ノード間でのキャッシュのコンシステンシを緩和するか否かを決定するステップと、
前記コンシステンシを緩和しない場合、前記第１計算ノードが、前記第１コピーブロックをキャッシュしている他の計算ノードが前記第１コピーブロックの前記ステータスを変更するよう指示を行うステップと、
前記コンシステンシを緩和する場合、前記第１計算ノードが、前記他の計算ノードが前記第１コピーブロックの前記ステータスを変更することを指示しないステップと
を含む
分散キャッシュ方法。
【請求項１５】
分散キャッシュシステムにおける計算ノードにコンシステンシ制御処理を実行させる分散キャッシュプログラムであって、
前記分散キャッシュシステムは、ブロック単位でデータキャッシュを行う複数の計算ノードを備え、
前記複数の計算ノードの各々は、ブロックのコピーであるコピーブロックと共に、前記コピーブロックに関連付けられたメタ情報を記憶装置に格納し、
前記メタ情報は、前記コピーブロックのステータスと、前記ブロックに関する過去のアクセス状況を示すアクセス履歴情報と、を含み、
前記コンシステンシ制御処理は、
第１ブロックに対するライトアクセスを受け取るステップと、ここで、前記第１ブロックのコピーは第１コピーブロックであり、
前記第１コピーブロックに関連付けられた前記メタ情報に含まれる前記アクセス履歴情報を参照して、前記複数の計算ノード間で将来発生する前記第１コピーブロックの転送量を算出するステップと、
目標性能と前記算出された転送量に基づいて、前記複数の計算ノード間でのキャッシュのコンシステンシを緩和するか否かを決定するステップと、
前記コンシステンシを緩和しない場合、前記第１コピーブロックをキャッシュしている他の計算ノードが前記第１コピーブロックの前記ステータスを変更するよう指示を行うステップと、
前記コンシステンシを緩和する場合、前記他の計算ノードが前記第１コピーブロックの前記ステータスを変更することを指示しないステップと
を含む
分散キャッシュプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の計算ノードがデータキャッシュを行う分散キャッシュ技術に関する。特に、本発明は、複数の計算ノード間でのキャッシュのコンシステンシを制御する技術に関する。
【背景技術】
【０００２】
計算機システムの分野において、データキャッシュ技術は、高速データアクセスを実現するために重要である。例えば、ストレージに接続された計算ノードが、そのストレージ上のあるブロックのコピーをコピーブロックとして自身の記憶装置に格納（キャッシュ）する。当該ブロックに対するアクセスが発生したとき、その計算ノードは、ストレージ上のブロックではなく、自身の記憶装置に格納されているコピーブロックにアクセスする。これにより、高速データアクセスが実現される。
【０００３】
また、複数の計算ノードを用いて分散的に処理を行う分散計算機システムは、システム性能の向上の観点から優れている。そのような分散計算機システムに、更に、上記データキャッシュ技術を適用することが考えられる（例えば、特許文献１参照）。その場合は、複数の計算ノードのそれぞれがデータキャッシュを行うことになる。このように、複数の計算ノードがデータキャッシュを行うシステムは、以下「分散キャッシュシステム」と参照される。
【０００４】
分散キャッシュシステムでは、複数の計算ノードが同一ブロックのコピーを同時にキャッシュする可能性がある。それぞれの計算ノードは、自身のコピーブロックに対して独立にアクセスすることができる。但し、ある計算ノードがコピーブロックに最新データを書き込んだ場合、そのコピーブロックの更新を、他の計算ノードにも反映させることが望ましい。さもなければ、他の計算ノードがその最新データを参照することができないからである。このように、分散キャッシュシステムでは、複数の計算ノード間のキャッシュのコンシステンシ（一貫性；consistency）を考慮することが重要である。
【０００５】
例として、第１計算ノードと第２計算ノードが、同一ブロックのコピーをそれぞれキャッシュしている場合を考える。第１計算ノードに対して当該ブロックへのライトアクセスが発行されると、第１計算ノードは、自身のコピーブロックに書き込みデータを書き込む。この場合、第１計算ノードのコピーブロックが最新となり、第２計算ノードのコピーブロックは古くなる。その後、第２計算ノードに対して当該ブロックへのリードアクセスが発行された場合、第２計算ノードのコピーブロックは古くなっているので、最新のコピーブロックを第１計算ノードから第２計算ノードへ転送する必要がある。このような最新のコピーブロックの転送は、以下、「ブロック転送処理」と参照される。
【０００６】
以上に説明されたように、分散キャッシュシステムにおいてキャッシュコンシステンシを維持するためには、ブロック転送処理が必須となる。このブロック転送処理は、分散キャッシュシステムにとってはオーバーヘッドとなる。従って、計算ノード数が２倍になったとしても、システム性能は単純に２倍になるとは限らない。
【０００７】
非特許文献１には、９種類のコンシステンシモデル（一貫性モデル）が記載されている。その９種類のコンシステンシモデルは、「strict consistency model」、「sequential consistency model」、「casual consistency model」、「PRAM consistency model」、「processor consistency model」、「weak consistency model」、「release consistency model」、「lazy release consistency model」、及び「entry consistency model」である。それぞれのコンシステンシモデルは、コンシステンシを維持するための異なる基準を規定している。いずれのコンシステンシモデルでも、コンシステンシを維持するために、その基準に従った上述のブロック転送処理が必要とされる。
【０００８】
特許文献２には、クラスタシステムにおいて発生するクラスタリングオーバヘッドを予測するための技術が記載されている。クラスタシステムは、通信回線を介して接続された複数のノードを備える。各ノードの主記憶装置に格納されたデータは、通信回線を通して、ノード間で共有される。このノード間のデータ共有を実現するために、上述のブロック転送処理が必要であり、そのブロック転送処理によってクラスタリングオーバヘッドが発生する。クラスタリングオーバヘッドの予測処理では、まず、単位時間当たりのブロック転送回数が算出される。そして、算出されたブロック転送回数と、１回のブロック転送当たりのＣＰＵ負荷に基づいて、クラスタリングオーバヘッドが算出される。
【０００９】
【特許文献１】特開平１０−２５４７７９号公報
【特許文献２】特開２００６−３３１１３５号公報
【非特許文献１】Ｄｏｒｅｅｎ  Ｌ．  Ｇａｌｌｉ，  “Ｄｉｓｔｒｉｂｕｔｅｄ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍｓ：  Ｃｏｎｃｅｐｔｓ  ａｎｄ  Ｐｒａｃｔｉｃｅ”，  Ｐｒｅｎｔｉｃｅ  Ｈｏｌｌ，  １９９９年８月３１日，  ｐｐ．２１６−２２５．
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上述の通り、分散キャッシュシステムにおいてキャッシュコンシステンシを維持するためには、ブロック転送処理が必要となる。しかしながら、ブロック転送処理は、分散キャッシュシステムにある程度の負荷をかけてしまい、その性能を劣化させる要因となる。場合によっては、システムの目標性能が達成されず、分散キャッシュ技術の利点である性能向上を十分に享受できなくなる。
【００１１】
本発明の１つの目的は、分散キャッシュシステムの目標性能が達成されるように、複数の計算ノード間のキャッシュコンシステンシを自動的に制御することができる分散キャッシュ技術を提供することにある。
【課題を解決するための手段】
【００１２】
本発明の第１の観点において、分散キャッシュシステムが提供される。分散キャッシュシステムは、ブロック単位でデータキャッシュを行う複数の計算ノードを備える。複数の計算ノードの各々は、記憶装置と、複数の計算ノード間でのキャッシュのコンシステンシを制御するキャッシュ制御部と、転送量算出部とを備える。記憶装置には、ブロックのコピーであるコピーブロックと、そのコピーブロックに関連付けられたメタ情報と、が格納される。メタ情報は、コピーブロックのステータスと、ブロックに関する過去のアクセス状況を示すアクセス履歴情報と、を含む。複数の計算ノードのうち第１計算ノードは、第１ブロックに対するライトアクセスを受け取る。第１ブロックのコピーは第１コピーブロックである。第１計算ノードの転送量算出部は、第１コピーブロックに関連付けられたメタ情報に含まれるアクセス履歴情報を参照して、複数の計算ノード間で将来発生する第１コピーブロックの転送量を算出する。第１計算ノードのキャッシュ制御部は、目標性能と算出された転送量に基づいて、コンシステンシを緩和するか否かを決定する。コンシステンシを緩和しない場合、第１計算ノードのキャッシュ制御部は、第１コピーブロックをキャッシュしている他の計算ノードが第１コピーブロックのステータスを変更するよう指示を行う。一方、コンシステンシを緩和する場合、第１計算ノードのキャッシュ制御部は、当該他の計算ノードが第１コピーブロックのステータスを変更することを指示しない。
【００１３】
本発明の第２の観点において、ブロック単位でデータキャッシュを行う複数の計算ノードを備える分散キャッシュシステムにおける計算ノードが提供される。計算ノードは、記憶装置と、複数の計算ノード間でのキャッシュのコンシステンシを制御するキャッシュ制御部と、転送量算出部とを備える。記憶装置には、ブロックのコピーであるコピーブロックと、そのコピーブロックに関連付けられたメタ情報と、が格納される。メタ情報は、コピーブロックのステータスと、ブロックに関する過去のアクセス状況を示すアクセス履歴情報と、を含む。計算ノードは、第１ブロックに対するライトアクセスを受け取る。第１ブロックのコピーは第１コピーブロックである。転送量算出部は、第１コピーブロックに関連付けられたメタ情報に含まれるアクセス履歴情報を参照して、複数の計算ノード間で将来発生する第１コピーブロックの転送量を算出する。キャッシュ制御部は、目標性能と算出された転送量に基づいて、コンシステンシを緩和するか否かを決定する。コンシステンシを緩和しない場合、キャッシュ制御部は、第１コピーブロックをキャッシュしている他の計算ノードが第１コピーブロックのステータスを変更するよう指示を行う。一方、コンシステンシを緩和する場合、キャッシュ制御部は、当該他の計算ノードが第１コピーブロックのステータスを変更することを指示しない。
【００１４】
本発明の第３の観点において、分散キャッシュ方法が提供される。分散キャッシュ方法は、（Ａ）複数の計算ノードがブロック単位でデータキャッシュを行うステップを含む。ここで、複数の計算ノードの各々は、ブロックのコピーであるコピーブロックと共に、そのコピーブロックに関連付けられたメタ情報を記憶装置に格納する。メタ情報は、コピーブロックのステータスと、ブロックに関する過去のアクセス状況を示すアクセス履歴情報と、を含む。分散キャッシュ方法は、更に、（Ｂ）複数の計算ノードのうち第１計算ノードが、第１ブロックに対するライトアクセスを受け取るステップと、ここで、第１ブロックのコピーは第１コピーブロックであり、（Ｃ）第１計算ノードが、第１コピーブロックに関連付けられたメタ情報に含まれるアクセス履歴情報を参照して、複数の計算ノード間で将来発生する第１コピーブロックの転送量を算出するステップと、（Ｄ）第１計算ノードが、目標性能と算出された転送量に基づいて、複数の計算ノード間でのキャッシュのコンシステンシを緩和するか否かを決定するステップと、（Ｅ）コンシステンシを緩和しない場合、第１計算ノードが、第１コピーブロックをキャッシュしている他の計算ノードが第１コピーブロックのステータスを変更するよう指示を行うステップと、（Ｆ）コンシステンシを緩和する場合、第１計算ノードが、当該他の計算ノードが第１コピーブロックのステータスを変更することを指示しないステップと、を含む。
【００１５】
本発明の第４の観点において、分散キャッシュシステムにおける計算ノードにコンシステンシ制御処理を実行させる分散キャッシュプログラムが提供される。分散キャッシュシステムは、ブロック単位でデータキャッシュを行う複数の計算ノードを備える。複数の計算ノードの各々は、ブロックのコピーであるコピーブロックと共に、そのコピーブロックに関連付けられたメタ情報を記憶装置に格納する。メタ情報は、コピーブロックのステータスと、ブロックに関する過去のアクセス状況を示すアクセス履歴情報と、を含む。上記コンシステンシ制御処理は、（ａ）第１ブロックに対するライトアクセスを受け取るステップと、ここで、第１ブロックのコピーは第１コピーブロックであり、（ｂ）第１コピーブロックに関連付けられたメタ情報に含まれるアクセス履歴情報を参照して、複数の計算ノード間で将来発生する第１コピーブロックの転送量を算出するステップと、（ｃ）目標性能と算出された転送量に基づいて、複数の計算ノード間でのキャッシュのコンシステンシを緩和するか否かを決定するステップと、（ｄ）コンシステンシを緩和しない場合、第１コピーブロックをキャッシュしている他の計算ノードが第１コピーブロックのステータスを変更するよう指示を行うステップと、（ｅ）コンシステンシを緩和する場合、当該他の計算ノードが第１コピーブロックのステータスを変更することを指示しないステップと、を含む。
【発明の効果】
【００１６】
本発明によれば、分散キャッシュシステムの目標性能が達成されるように、複数の計算ノード間のキャッシュコンシステンシを自動的に制御することが可能となる。
【発明を実施するための最良の形態】
【００１７】
添付図面を参照して、本発明の実施の形態に係る分散キャッシュ技術を説明する。
【００１８】
１．分散キャッシュシステム
図１は、本発明の実施の形態に係る分散キャッシュシステム１の構成を概略的に示すブロック図である。分散キャッシュシステム１は、データキャッシュを行う複数の計算ノード２を備えている。図１では、ｎ個（ｎは２以上の整数）の計算ノード２−１〜２−ｎが示されている。複数の計算ノード２は、通信回線を通して互いに通信可能である。また、ストレージ３が複数の計算ノード２に対して共通に設けられており、各計算ノード２が共通のストレージ３に接続されている。クライアント１００は、複数の計算ノード２のうち任意の計算ノード２に対してアクセスを発行する。
【００１９】
計算ノード２は、典型的には、サーバや仮想サーバである。その場合、分散キャッシュシステム１はサーバシステムであり、クライアント１００は端末であり、各サーバはストレージ３中のデータのコピーを自身の主記憶装置（ローカルメモリ）にキャッシュする。あるいは、計算ノード２は、キャッシュメモリが搭載されたＣＰＵであってもよい。その場合、分散キャッシュシステム１はマルチコアシステムであり、ストレージ３は下位記憶装置（下位キャッシュメモリや主記憶装置）であり、クライアント１００はプロセスであり、各ＣＰＵはストレージ３中のデータのコピーを自身のキャッシュメモリに格納する。計算ノード２は、その他のプロセッシングエレメント（PE: Processing Element）であってもよい。
【００２０】
ストレージ３には、データの集合であるデータセットＤＳＥＴが格納される。データセットＤＳＥＴは、ブロック単位で管理される。１つのブロックは、データの集合であり、所定のデータサイズを有する。サーバシステムの場合、１ブロックサイズは、例えば４Ｋバイトである。各計算ノード２は、ストレージ３上のデータセットＤＳＥＴを、ブロック単位でキャッシュする。例えば、計算ノード２−１は、ストレージ３上のあるブロックＢＬＫのコピーをキャッシュする。計算ノード２−１にキャッシュされているブロックＢＬＫのコピーは、コピーブロックＣＢＬＫ−１である。他の計算ノード２も同じブロックＢＬＫのコピーをキャッシュすることができる。計算ノード２−ｉ（ｉ＝１〜ｎ）にキャッシュされているブロックＢＬＫのコピーは、コピーブロックＣＢＬＫ−ｉである。
【００２１】
分散キャッシュシステム１においては、複数の計算ノード２間のキャッシュのコンシステンシを管理することが重要である。コンシステンシ管理のため、一般的に、各コピーブロックＣＢＬＫには「ステータス（Status）」が付与される。コピーブロックＣＢＬＫのステータスとしては、少なくとも“ｅｘｃｌｕｓｉｖｅ”、“ｓｈａｒｅｄ”、“ｓｔａｌｅ”の３種類が挙げられる。ステータス“ｅｘｃｌｕｓｉｖｅ”は、そのコピーブロックＣＢＬＫが最新であり、且つ、計算ノード２−１〜２−ｎのうち自ノードにのみキャッシュされていることを示す。ステータス“ｓｈａｒｅｄ”は、そのコピーブロックＣＢＬＫが最新であり、且つ、計算ノード２−１〜２−ｎのうち２以上の計算ノード２にキャッシュされていることを示す。ステータス“ｓｔａｌｅ”は、そのコピーブロックＣＢＬＫが最新ではないことを示す。
【００２２】
このように、ステータスが“ｅｘｃｌｕｓｉｖｅ”あるいは“ｓｈａｒｅｄ”の場合、それは、コピーブロックＣＢＬＫが少なくとも最新であることを意味する。ステータスが“ｅｘｃｌｕｓｉｖｅ”であるコピーブロックＣＢＬＫは、以下「Ｅｘｃｌｕｓｉｖｅコピー」と参照される場合がある。また、ステータスが“ｓｈａｒｅｄ”であるコピーブロックＣＢＬＫは、以下「Ｓｈａｒｅｄコピー」と参照される場合がある。また、ＥｘｃｌｕｓｉｖｅコピーとＳｈａｒｅｄコピーは、合わせて、「Ｃｕｒｒｅｎｔ（最新）コピー」と参照される場合がある。ある計算ノード２にキャッシュされているコピーブロックＣＢＬＫのステータスが“ｅｘｃｌｕｓｉｖｅ”あるいは“ｓｈａｒｅｄ”の場合、当該計算ノード２は、ブロックＢＬＫのＣｕｒｒｅｎｔコピーをキャッシュしていると言える。
【００２３】
クライアント１００は、複数の計算ノード２のうち任意の計算ノード２に対してアクセスを発行する。アクセスは、少なくとも「ブロック識別子」と「アクセス種別」を含む。ブロック識別子は、アクセス対象データを含むブロック（アクセス対象ブロック）を示す。アクセス種別は、リードアクセスあるいはライトアクセスのいずれかを示す。
【００２４】
クライアント１００からアクセスを受け取り、受け取ったアクセスを処理する計算ノード２は、以下「アクセス処理ノード２Ａ」と参照される。アクセス処理ノード２Ａは、受け取ったアクセスに含まれるブロック識別子を参照して、アクセス対象ブロックを特定することができる。また、アクセス処理ノード２Ａは、受け取ったアクセスに含まれるアクセス種別を参照して、当該アクセスがリードアクセスかライトアクセスかを判別することができる。
【００２５】
リードアクセスの場合、アクセス処理ノード２Ａは、自身がアクセス対象ブロックのＣｕｒｒｅｎｔコピーをキャッシュしているか否かを調べる。アクセス処理ノード２ＡがＣｕｒｒｅｎｔコピーをキャッシュしている場合、アクセス処理ノード２Ａは、ストレージ３にアクセスすることなく、キャッシュされているＣｕｒｒｅｎｔコピーからアクセス対象データを読み出すことができる。その結果、リードアクセス速度が向上する。そして、アクセス処理ノード２Ａは、読み出されたデータをクライアント１００に送信する。
【００２６】
一方、アクセス処理ノード２ＡがＣｕｒｒｅｎｔコピーをキャッシュしていない場合、Ｃｕｒｒｅｎｔコピーをキャッシュしている他の計算ノード２からアクセス処理ノード２Ａへ、そのＣｕｒｒｅｎｔコピーを転送する必要がある。すなわち、「ブロック転送処理」が発生する。このブロック転送処理によって、計算ノード間のコンシステンシが維持される。その一方、ブロック転送処理は、分散キャッシュシステム１にある程度の負荷をかけてしまい、その性能を劣化させる要因となる。従って、分散キャッシュシステム１の性能の観点から言えば、ブロック転送処理は少ない方が好ましい。
【００２７】
ブロック転送処理が発生するのは、ある計算ノード２がブロックＢＬＫに対するリードアクセスを受け取り、且つ、当該計算ノード２のコピーブロックＣＢＬＫのステータスが“ｓｔａｌｅ”であるときである。そして、当該計算ノード２のコピーブロックＣＢＬＫのステータスが“ｓｔａｌｅ”になるのは、他の計算ノード２が同一ブロックＢＬＫに対するライトアクセスを処理し、当該他の計算ノード２のコピーブロックＣＢＬＫが“ｅｘｃｌｕｓｉｖｅ”になったときである。すなわち、ライトアクセスが発生すると、その後にブロック転送処理が発生する。ブロック転送処理は、ライトアクセスに起因して発生するとも言える。
【００２８】
本実施の形態では、分散キャッシュシステム１は、基本的に、所定のコンシステンシモデルで定められたコンシステンシを維持する。コンシステンシモデルとしては、様々なものが知られている（非特許文献１参照）。しかしながら、所定のコンシステンシモデルに従ってコンシステンシを維持するためには、上述のブロック転送処理が必要になる。そのブロック転送処理は、分散キャッシュシステム１の性能を劣化させる要因となる。場合によっては、システムの目標性能が達成されず、分散キャッシュ技術の利点である性能向上を十分に享受できなくなる。従って、本実施の形態に係る分散キャッシュシステム１は、システムの目標性能を参酌し、その目標性能が達成されるようにコンシステンシを自動的に制御する。特に、本実施の形態に係る分散キャッシュシステム１は、場合によっては、コンシステンシの厳密性を“緩和”する。
【００２９】
そのために、本実施の形態によれば、ライトアクセスの処理方式として２種類の方式が選択的に用いられる。その２種類の方式を説明するために、ある計算ノード２がブロックＢＬＫに対するライトアクセスを受け取った場合を考える。当該計算ノード２は、アクセス処理ノード２Ａである。また、分散キャッシュシステム１では、アクセス処理ノード２Ａと異なる他の計算ノード２が、当該ブロックＢＬＫのコピーであるコピーブロックＣＢＬＫをキャッシュしている可能性がある。そのような他の計算ノード２は、以下「ノード２Ｃ」と参照される。
【００３０】
第１の方式では、アクセス処理ノード２Ａは、ライトアクセスを通常通り処理する。具体的には、アクセス処理ノード２Ａは、自身がキャッシュしているコピーブロックＣＢＬＫに書き込みデータを書き込み、且つ、そのコピーブロックＣＢＬＫのステータスを“ｅｘｃｌｕｓｉｖｅ”に設定する。更に、アクセス処理ノード２Ａは、ノード２ＣのコピーブロックＣＢＬＫのステータスを“ｓｔａｌｅ”に変更するように指示する。その結果、ノード２ＣにキャッシュされているコピーブロックＣＢＬＫのステータスは“ｓｔａｌｅ”に変更される。すなわち、アクセス処理ノード２ＡにおけるコピーブロックＣＢＬＫの更新が、他のノード２Ｃにも反映される。この場合、コンシステンシは“緩和”されず、“維持”される。
【００３１】
第２の方式では、アクセス処理ノード２Ａは、ライトアクセスを「擬似ライトアクセス（Quasi Write Access）」として処理する。この場合、第１の方式と同様に、アクセス処理ノード２Ａは、自身がキャッシュしているコピーブロックＣＢＬＫに書き込みデータを書き込み、且つ、そのコピーブロックＣＢＬＫのステータスを“ｅｘｃｌｕｓｉｖｅ”に設定する。しかしながら、アクセス処理ノード２Ａは、ノード２ＣがコピーブロックＣＢＬＫのステータスを変更することを禁止する。従って、ノード２ＣにキャッシュされているコピーブロックＣＢＬＫのステータスは“ｓｔａｌｅ”に変更されない。つまり、アクセス処理ノード２ＡにおけるコピーブロックＣＢＬＫの更新が、他のノード２Ｃに反映されない。よって、コンシステンシが“緩和”される。この場合、後にノード２ＣがブロックＢＬＫに対するリードアクセスを受け取ったとしても、ブロック転送処理が発生しない。すなわち、現在のライトアクセスに起因して、ブロック転送処理が将来発生する確率が低くなり、システム性能の劣化が抑制される。このように、第２の方式では、コンシステンシが緩和されるが、システム性能の劣化が抑制される。
【００３２】
コンシステンシを緩和するか否かは、システムの目標性能の観点から決定されることが好適である。そのために、ライトアクセスを受け取ったアクセス処理ノード２Ａは、将来発生するブロック転送処理による負荷（ブロック転送量）を予測する。そして、そのアクセス処理ノード２Ａは、予測されたブロック転送量と目標性能を参照し、目標性能が達成されるように、コンシステンシの緩和の要否を自動的に決定する。コンシステンシを緩和しない場合、アクセス処理ノード２Ａは、上述の第１の方式に従ってライトアクセスを処理する。一方、コンシステンシを緩和する場合、アクセス処理ノード２Ａは、上述の第２の方式に従って、ライトアクセスを擬似ライトアクセスとして処理する。その結果、コンシステンシは緩和されるが、システム性能が向上する。
【００３３】
以上に説明されたように、本実施の形態によれば、目標性能が達成されるように、計算ノード間のキャッシュコンシステンシの制御（維持、緩和）が自動的に行われる。コンシステンシを多少緩和してでも、システム性能を優先したい場合の例として、検索処理や統計処理が挙げられる。本実施の形態は、そのような場合に特に好適である。本実施の形態は、ウェブサーバー、アプリケーションサーバー、データベースサーバー、データセンターにおけるストレージサービス等に適用可能である。
【００３４】
以下、例として、計算ノード２がサーバ等の計算機である場合を考える。計算ノード２がＣＰＵ等の場合であっても同様の議論が適用されることは、当業者によって容易に理解されよう。
【００３５】
２．計算ノードの構成
図２は、計算ノード２の構成例を示すブロック図である。計算ノード２は、処理装置１０、記憶装置２０、入力装置３０、出力装置４０、及び通信装置５０を備えている。処理装置１０は、ＣＰＵ（Central Processing Unit）を含み、記憶装置２０に格納されているデータを用いて各種データ処理を実行する。記憶装置２０としては、ＲＡＭ（Random Access Memory）が例示される。入力装置３０としては、キーボードやマウスが例示される。出力装置４０としては、ディスプレイが例示される。通信装置５０としては、通信インタフェースが例示される。
【００３６】
記憶装置２０には、コンシステンシ管理情報ＣＯＮ、コピーブロックＣＢＬＫ、メタ情報ＭＥＴ、目標情報ＴＡＲ、転送コスト情報ＣＳＴ等が格納される。
【００３７】
コンシステンシ管理情報ＣＯＮは、ブロックに関するコンシステンシを管理するための情報である。ここで、ある１つのブロックに関するコンシステンシは、複数の計算ノード２のうち所定の計算ノード２によって集中的に管理される。その所定の計算ノードは、以下、「マスターノード２Ｍ」と参照される。１つのマスターノード２Ｍには、少なくとも１つのブロックの管理が割り当てられる。異なるブロックの管理は、異なるマスターノード２Ｍに割り当てられてもよい。あるブロックに関しては、そのブロックに割り当てられたマスターノード２Ｍだけがコンシステンシ管理情報ＣＯＮを有する。
【００３８】
図３は、あるブロックＢＬＫに関するコンシステンシ管理情報ＣＯＮの一例を示している。コンシステンシ管理情報ＣＯＮは、ディレクトリ情報ＤＩＲとアクセス履歴情報ＨＩＳを含んでいる。
【００３９】
ディレクトリ情報ＤＩＲは、どの計算ノード２がどのようなステータスのコピーブロックＣＢＬＫをキャッシュしているかを示す。例えば、ディレクトリ情報ＤＩＲは、複数の計算ノード２のそれぞれに対応した複数のエントリを有する。各エントリは、該当計算ノード２にキャッシュされているコピーブロックＣＢＬＫのステータスを示す。例えば、図３に示されるディレクトリ情報ＤＩＲからは、計算ノード２−２がブロックＢＬＫのＥｘｃｌｕｓｉｖｅコピー（ステータス＝“exclusive”）をキャッシュしていることが分かる。
【００４０】
アクセス履歴情報ＨＩＳは、当該ブロックＢＬＫに関する過去のアクセス状況を示す。例えば、アクセス履歴情報ＨＩＳは、当該ブロックＢＬＫへの過去のライトアクセス数ＮＷ、当該ブロックＢＬＫへの過去のリードアクセス数ＮＲ、ライトアクセス数ＮＷとリードアクセス数ＮＲの測定開始時刻Ｔ０、及びスコープＮを有する。スコープＮは、ｎ個の計算ノード２−１〜２−ｎのうち当該ブロックＢＬＫへのアクセスが発行される計算ノード２の数である。例えば、スコープＮが４の場合、ブロックＢＬＫへのアクセスが４個の計算ノード２で発生し得る。スコープＮは、システム設計段階で予め決定される。
【００４１】
再度図２を参照して、コピーブロックＣＢＬＫは、ストレージ３上のブロックＢＬＫのコピーであり、キャッシュされているブロックＢＬＫである。メタ情報ＭＥＴは、コピーブロックＣＢＬＫのステータス等を示す情報であり、コピーブロックＣＢＬＫに関連付けられている。つまり、各計算ノード２は、コピーブロックＣＢＬＫと共に、そのコピーブロックＣＢＬＫに関連付けられたメタ情報ＭＥＴを記憶装置２０に格納する。
【００４２】
図４は、あるコピーブロックＣＢＬＫに関連付けられたメタ情報ＭＥＴの一例を示している。メタ情報ＭＥＴは、コピーブロックＣＢＬＫのステータス、アクセス履歴情報ＨＩＳ、及び一時アクセス情報ＴＭＰを含んでいる。アクセス履歴情報ＨＩＳは、上述のコンシステンシ管理情報ＣＯＮに含まれているものと同様である。一時アクセス情報ＴＭＰは、一時的ライトアクセス数と一時的リードアクセス数を含む。この一時アクセス情報ＴＭＰは、後述のアクセス処理において用いられる。
【００４３】
再度図２を参照して、目標情報ＴＡＲは、分散キャッシュシステム１の目標性能（性能の目標値）を示す。例えば、目標性能として、スケーラビリティの目標値が与えられる。本実施の形態におけるスケーラビリティとは、単位時間あたりに計算ノード２がブロック転送処理以外の処理を実行できる時間（ＣＰＵ使用時間）を意味する。単位時間あたりにブロック転送処理に費やされる時間は、以下「ブロック転送量」と参照される。よって、スケーラビリティは、単位時間からブロック転送量を差し引いた時間であると言える。例えば、目標性能（スケーラビリティの目標値）が０．８である場合、その目標性能が達成されるブロック転送量の上限値は０．２である。目標性能が達成されるブロック転送量の上限値は、以下「閾値転送量」と参照される。目標情報ＴＡＲは、目標性能の代わりにこの閾値転送量を与えていてもよい。
【００４４】
転送コスト情報ＣＳＴは、１回のブロック転送処理に要する転送コストを示す。例えば、転送コストは、計算ノード２におけるＣＰＵ使用時間で与えられる。
【００４５】
処理装置１０は、通信部１１、キャッシュ制御部１２、及び転送量算出部１３を備えている。通信部１１は、通信装置５０を用いて、外部（他の計算ノード２、ストレージ３、クライアント１００）との間でデータの送受信を行う機能ブロックである。キャッシュ制御部１２は、キャッシュ処理全般、及び計算ノード２間のキャッシュのコンシステンシの制御を行う機能ブロックである。このキャッシュ制御部１２の機能としては、（１）コンシステンシ管理情報ＣＯＮの参照、更新、（２）メタ情報ＭＥＴの参照、更新、（３）コピーブロックＣＢＬＫの読み出し、書き込み、（４）リードアクセス、ライトアクセスの処理、（５）他の計算ノード２に対する指示、等が挙げられる。転送量算出部１３は、後述されるブロック転送量算出処理（ステップＳ２１０）を実行する機能ブロックである。
【００４６】
これら機能ブロック１１〜１３は、各計算ノード２の処理装置１０が分散キャッシュプログラムＰＲＯＧを実行することにより実現される。分散キャッシュプログラムＰＲＯＧは、処理装置１０によって実行可能なコンピュータプログラム（ソフトウェアプロダクト）であり、記憶装置２０に格納されている。分散キャッシュプログラムＰＲＯＧは、コンピュータ読み取り可能な記録媒体に記録されていてもよい。各計算ノード２の処理装置１０は、分散キャッシュプログラムＰＲＯＧを読み出し、実行する。それにより、各計算ノード２は、次に説明されるような処理を実行する。
【００４７】
３．処理フロー
本実施の形態に係る分散キャッシュシステム１による処理を詳しく説明する。図５は、本実施の形態に係る分散キャッシュシステム１の処理を示すフローチャートである。
【００４８】
ステップＳ１０：
アクセス処理ノード２Ａの通信部１１は、クライアント１００からアクセスを受け取る。受け取ったアクセスには、アドレス情報、対象ブロックを示すブロック識別子、及びアクセス種別が含まれている。以下の説明において、対象ブロックはブロックＢＬＫであるとする。
【００４９】
ステップＳ２０：
アクセス処理ノード２Ａのキャッシュ制御部１２は、ブロック識別子を参照して、対象ブロックＢＬＫを特定する。
【００５０】
ステップＳ３０：
アクセス処理ノード２Ａのキャッシュ制御部１２は、アクセス種別を参照して、当該アクセスがリードアクセスかライトアクセスかを判別する。リードアクセスの場合、アクセス処理ノード２Ａは、リードアクセス処理（ステップＳ１００）を実行する。ライトアクセスの場合、アクセス処理ノード２Ａは、ライトアクセス処理（ステップＳ２００）を実行する。
【００５１】
３−１．リードアクセス処理（ステップＳ１００）
まず、本実施の形態におけるリードアクセス処理（ステップＳ１００）を説明する。図６は、リードアクセス処理を示すフローチャートである。
【００５２】
ステップＳ１１０：
アクセス処理ノード２Ａのキャッシュ制御部１２は、自ノード２ＡがＣｕｒｒｅｎｔコピーをキャッシュしているか否かを判定する。つまり、キャッシュ制御部１２は、ステータスが“ｅｘｃｌｕｓｉｖｅ”あるいは“ｓｈａｒｅｄ”であるコピーブロックＣＢＬＫが記憶装置２０に格納されているか否かを調べる。Ｃｕｒｒｅｎｔコピーがキャッシュされている場合（ステップＳ１１０；Ｙｅｓ）、それはキャッシュヒットを意味する。キャッシュヒットの場合、処理はステップＳ１２０へ進む。一方、Ｃｕｒｒｅｎｔコピーがキャッシュされていない場合（ステップＳ１１０；Ｎｏ）、それはキャッシュミスを意味する。キャッシュミスの場合、処理はステップＳ１５０へ進む。
【００５３】
ステップＳ１２０：
アクセス処理ノード２Ａのキャッシュ制御部１２は、コピーブロックＣＢＬＫに関連付けられているメタ情報ＭＥＴに含まれる一時的リードアクセス数を１だけ増加させる（インクリメントする）。
【００５４】
ステップＳ１３０：
アクセス処理ノード２Ａのキャッシュ制御部１２は、記憶装置２０に格納されているコピーブロックＣＢＬＫに含まれているリード対象データを読み出す。
【００５５】
ステップＳ１４０：
アクセス処理ノード２Ａの通信部１１は、読み出されたデータを読み出しデータとしてクライアント１００へ送信する。これにより、リードアクセス処理が終了する。
【００５６】
ステップＳ１５０：
キャッシュミスの場合（ステップＳ１１０；Ｎｏ）、ブロック転送処理が実施される。図７は、ブロック転送処理（ステップＳ１５０）を示すフローチャートである。
【００５７】
ステップＳ１５１：
まず、アクセス処理ノード２Ａのキャッシュ制御部１２は、対象ブロックＢＬＫに割り当てられているマスターノード２Ｍを特定する。このとき、キャッシュ制御部１２は、アクセスに含まれるブロック識別子をハッシュする等の方法によって、外部と通信することなく、マスターノード２Ｍを特定することができる。そして、キャッシュ制御部１２は、特定されたマスターノード２Ｍに対して、対象ブロックＢＬＫのＣｕｒｒｅｎｔコピーを要求する。Ｃｕｒｒｅｎｔコピーの要求を示すコピーリクエストは、対象ブロックＢＬＫのブロック識別子とアクセス処理ノード２Ａのノード識別子を含む。そのコピーリクエストは、アクセス処理ノード２Ａの通信部１１からマスターノード２Ｍへ送られる。
【００５８】
ステップＳ１６１：
マスターノード２Ｍの通信部１１は、アクセス処理ノード２Ａから上記コピーリクエストを受け取る。マスターノード２Ｍのキャッシュ制御部１２は、コピーリクエストに含まれるブロック識別子を参照して、対象ブロックＢＬＫを特定する。更に、キャッシュ制御部１２は、その対象ブロックＢＬＫのコンシステンシ管理情報ＣＯＮを参照する。
【００５９】
ステップＳ１６２：
マスターノード２Ｍのキャッシュ制御部１２は、コンシステンシ管理情報ＣＯＮに含まれるディレクトリ情報ＤＩＲを参照し、対象ブロックＢＬＫのＣｕｒｒｅｎｔコピーがいずれかの計算ノード２にキャッシュされているか否かを判定する。ある計算ノード２が対象ブロックＢＬＫのＣｕｒｒｅｎｔコピーをキャッシュしている場合、その計算ノード２は、以下「転送元ノード２Ｓ」と参照される。転送元ノード２Ｓは複数存在する場合もある。Ｃｕｒｒｅｎｔコピーが有る場合（ステップＳ１６２；Ｙｅｓ）、処理はステップＳ１６３に進む。一方、いずれの計算ノード２もＣｕｒｒｅｎｔコピーを有していない場合（ステップＳ１６２；Ｎｏ）、処理はステップＳ１６６に進む。
【００６０】
ステップＳ１６３：
また、マスターノード２Ｍのキャッシュ制御部１２は、ディレクトリ情報ＤＩＲを参照して、Ｅｘｃｌｕｓｉｖｅコピーを有する転送元ノード２Ｓが有るか否かを判定する。Ｅｘｃｌｕｓｉｖｅコピーが有る場合（ステップＳ１６３；Ｙｅｓ）、処理はステップＳ１６４に進む。それ以外の場合（ステップＳ１６３；Ｎｏ）、ステップＳ１６４はスキップされ、処理はステップＳ１６５に進む。
【００６１】
ステップＳ１６４：
マスターノード２Ｍのキャッシュ制御部１２は、Ｅｘｃｌｕｓｉｖｅコピーを有する転送元ノード２Ｓに対して、ステータスを“ｓｈａｒｅｄ”に変更するように指示する。ステータスの変更を指示するステータス変更コマンドは、対象ブロックＢＬＫのブロック識別子を含む。そのステータス変更コマンドは、マスターノード２Ｍの通信部１１から該当する転送元ノード２Ｓへ送られる。また、マスターノード２Ｍのキャッシュ制御部１２は、対象ブロックＢＬＫに関するディレクトリ情報ＤＩＲを更新する。具体的には、キャッシュ制御部１２は、該当する転送元ノード２Ｓに対応するスタータスを、“ｅｘｃｌｕｓｉｖｅ”から“ｓｈａｒｅｄ”に変更する。
【００６２】
ステップＳ１７１：
Ｅｘｃｌｕｓｉｖｅコピーを有する転送元ノード２Ｓの通信部１１は、マスターノード２Ｍからステータス変更コマンドを受け取る。転送元ノード２Ｓのキャッシュ制御部１２は、ステータス変更コマンドに含まれるブロック識別子を参照して、対象ブロックＢＬＫを特定する。そして、そのキャッシュ制御部１２は、コピーブロックＣＢＬＫ（Ｅｘｃｌｕｓｉｖｅコピー）に関連付けられたメタ情報ＭＥＴに含まれるステータスを、“ｅｘｃｌｕｓｉｖｅ”から“ｓｈａｒｅｄ”に変更する。
【００６３】
ステップＳ１６５：
マスターノード２Ｍのキャッシュ制御部１２は、転送元ノード２Ｓに対して、対象ブロックＢＬＫのＣｕｒｒｅｎｔコピーをアクセス処理ノード２Ａへ転送するように指示する。転送元ノード２Ｓが複数有る場合、キャッシュ制御部１２は、いずれか１つの転送元ノード２Ｓを選択する。Ｃｕｒｒｅｎｔコピーの転送を指示する転送指示コマンドは、対象ブロックＢＬＫのブロック識別子とアクセス処理ノード２Ａのノード識別子を含む。その転送指示コマンドは、マスターノード２Ｍの通信部１１から該当する転送元ノード２Ｓへ送られる。また、マスターノード２Ｍのキャッシュ制御部１２は、対象ブロックＢＬＫに関するディレクトリ情報ＤＩＲを更新する。具体的には、キャッシュ制御部１２は、アクセス処理ノード２Ａに対応するスタータスを、“ｓｈａｒｅｄ”に設定する。
【００６４】
ステップＳ１７２：
転送元ノード２Ｓの通信部１１は、マスターノード２Ｍから転送指示コマンドを受け取る。転送元ノード２Ｓのキャッシュ制御部１２は、転送指示コマンドに含まれるブロック識別子を参照して、対象ブロックＢＬＫを特定する。そして、そのキャッシュ制御部１２は、コピーブロックＣＢＬＫ（Ｃｕｒｒｅｎｔコピー）を記憶装置２０から読み出し、読み出したＣｕｒｒｅｎｔコピーをアクセス処理ノード２Ａに転送する。また、キャッシュ制御部１２は、そのコピーブロックＣＢＬＫ（Ｃｕｒｒｅｎｔコピー）に関連付けられたメタ情報ＭＥＴに含まれるアクセス履歴情報ＨＩＳも、アクセス処理ノード２Ａに転送する。アクセス処理ノード２Ａは、転送指示コマンドに含まれるノード識別子から特定可能である。Ｃｕｒｒｅｎｔコピー及び対応するアクセス履歴情報ＨＩＳは、転送元ノード２Ｓの通信部１１を通して、アクセス処理ノード２Ａへ送られる。
【００６５】
ステップＳ１６６：
一方、いずれの計算ノード２もＣｕｒｒｅｎｔコピーを有していない場合（ステップＳ１６２；Ｎｏ）、マスターノード２Ｍのキャッシュ制御部１２は、ミスヒット通知をアクセス処理ノード２Ａへ送信する。また、マスターノード２Ｍのキャッシュ制御部１２は、対象ブロックＢＬＫのコンシステンシ管理情報ＣＯＮに含まれるアクセス履歴情報ＨＩＳを、アクセス処理ノード２Ａへ送信する。アクセス処理ノード２Ａは、コピーリクエストに含まれるノード識別子から特定可能である。ミスヒット通知及びアクセス履歴情報ＨＩＳは、マスターノード２Ｍの通信部１１からアクセス処理ノード２Ａへ送られる。更に、マスターノード２Ｍのキャッシュ制御部１２は、対象ブロックＢＬＫに関するディレクトリ情報ＤＩＲを更新する。具体的には、キャッシュ制御部１２は、アクセス処理ノード２Ａに対応するスタータスを“ｅｘｃｌｕｓｉｖｅ”に設定する。
【００６６】
ステップＳ１５２：
上記ステップＳ１７２が実施された場合、アクセス処理ノード２Ａの通信部１１は、転送元ノード２Ｓから対象ブロックＢＬＫのＣｕｒｒｅｎｔコピー及びアクセス履歴情報ＨＩＳを受信する。アクセス処理ノード２Ａのキャッシュ制御部１２は、受信したＣｕｒｒｅｎｔコピーをコピーブロックＣＢＬＫとして記憶装置２０に格納する。また、キャッシュ制御部１２は、そのコピーブロックＣＢＬＫと関連付けてメタ情報ＭＥＴも記憶装置２０に格納する。そのメタ情報ＭＥＴに含まれるステータスは“ｓｈａｒｅｄ”に設定される。一時的ライトアクセス数と一時的リードアクセス数は共に初期値（＝０）に設定される。
【００６７】
ステップＳ１５３：
一方、上記ステップＳ１６６が実施された場合、アクセス処理ノード２Ａの通信部１１は、マスターノード２Ｍからミスヒット通知及びアクセス履歴情報ＨＩＳを受け取る。アクセス処理ノード２Ａのキャッシュ制御部１２は、そのミスミット通知に応答して、ストレージ３から対象ブロックＢＬＫを読み出す。そして、そのキャッシュ制御部１２は、読み出した対象ブロックＢＬＫをコピーブロックＣＢＬＫとして記憶装置２０に格納する。また、キャッシュ制御部１２は、そのコピーブロックＣＢＬＫと関連付けてメタ情報ＭＥＴも記憶装置２０に格納する。そのメタ情報ＭＥＴに含まれるステータスは“ｅｘｃｌｕｓｉｖｅ”に設定される。一時的ライトアクセス数と一時的リードアクセス数は共に初期値（＝０）に設定される。
【００６８】
以上により、ブロック転送処理（ステップＳ１５０）が終了する。その後、上述のステップＳ１２０〜Ｓ１４０が実施される。
【００６９】
３−２．ライトアクセス処理（ステップＳ２００）
次に、本実施の形態におけるライトアクセス処理（ステップＳ２００）を説明する。図８は、ライトアクセス処理を示すフローチャートである。
【００７０】
ステップＳ２０１：
アクセス処理ノード２Ａのキャッシュ制御部１２は、自ノード２Ａが対象ブロックＢＬＫのコピーブロックＣＢＬＫをキャッシュしているか否かを判定する。コピーブロックＣＢＬＫが既にキャッシュされている場合（ステップＳ２０１；Ｙｅｓ）、処理はステップＳ２０３へ進む。一方、コピーブロックＣＢＬＫがキャッシュされていない場合（ステップＳ２０１；Ｎｏ）、処理はステップＳ２０２へ進む。
【００７１】
ステップＳ２０２：
アクセス処理ノード２Ａのキャッシュ制御部１２は、ストレージ３から対象ブロックＢＬＫを読み出し、読み出した対象ブロックＢＬＫをコピーブロックＣＢＬＫとして記憶装置２０に格納する。このとき、キャッシュ制御部１２は、そのコピーブロックＣＢＬＫと関連付けてメタ情報ＭＥＴも記憶装置２０に格納する。そのメタ情報ＭＥＴに含まれるアクセス履歴情報ＨＩＳは、マスターノード２Ｍから取得される。アクセス処理ノード２Ａがマスターノード２Ｍからアクセス履歴情報ＨＩＳを取得する方法は、上述のステップＳ１５１やステップＳ１６６と同様である。また、メタ情報ＭＥＴ中の一時的ライトアクセス数と一時的リードアクセス数は共に初期値（＝０）に設定される。
【００７２】
ステップＳ２０３：
クライアント１００から受け取ったライトアクセスには、書き込みデータも含まれている。アクセス処理ノード２Ａのキャッシュ制御部１２は、記憶装置２０に格納されているコピーブロックＣＢＬＫにその書き込みデータを書き込む。
【００７３】
ステップＳ２０４：
アクセス処理ノード２Ａのキャッシュ制御部１２は、コピーブロックＣＢＬＫに関連付けられているメタ情報ＭＥＴを更新する。具体的には、キャッシュ制御部１２は、当該メタ情報ＭＥＴに含まれるステータスを“ｅｘｃｌｕｓｉｖｅ”に設定する。また、そのキャッシュ制御部１２は、当該メタ情報ＭＥＴに含まれる一時的ライトアクセス数を１だけ増加させる（インクリメントする）。
【００７４】
ステップＳ２１０：
アクセス処理ノード２Ａの転送量算出部１３は、将来発生するブロック転送処理（ステップＳ１５０）によるコピーブロックＣＢＬＫの「ブロック転送量」を算出する。図９は、本実施の形態に係るブロック転送量算出処理を示すフローチャートである。
【００７５】
ステップＳ２１１：
まず、転送量算出部１３は、コピーブロックＣＢＬＫに関連付けられているメタ情報ＭＥＴに含まれるアクセス履歴情報ＨＩＳを参照する。そして、転送量算出部１３は、そのアクセス履歴情報ＨＩＳに基づいて、対象ブロックＢＬＫに関する過去の「アクセス特性」を算出する。本実施の形態において、アクセス特性は、少なくとも「ライトアクセス比率Ｗ」と「ライトアクセスレートＲＴ」を含む。ライトアクセス比率Ｗは、対象ブロックＢＬＫへの総アクセス数に対する、対象ブロックＢＬＫへのライトアクセス数の比率である。ライトアクセスレートＲＴは、単位時間あたりの対象ブロックＢＬＫへのライトアクセス数である。
【００７６】
上述の通り、アクセス履歴情報ＨＩＳには、過去のライトアクセス数ＮＷ、過去のリードアクセス数ＮＲ、及びライトアクセス数ＮＷとリードアクセス数ＮＲの測定開始時刻Ｔ０が含まれている。従って、転送量算出部１３は、次の式（１）及び式（２）に従って、ライトアクセス比率Ｗ及びライトアクセスレートＲＴをそれぞれ算出することができる。
【００７７】
式（１）：Ｗ＝ＮＷ／（ＮＷ＋ＮＲ）
【００７８】
式（２）：ＲＴ＝ＮＷ／（Ｔ−Ｔ０）
ここで、Ｔは現在時刻を表し、Ｔ−Ｔ０は測定期間を表す。
【００７９】
ステップＳ２１２：
次に、転送量算出部１３は、１回のライトアクセスに起因して将来発生するコピーブロックＣＢＬＫの転送回数Ｃ（Ｗ，Ｎ）を算出する。その転送回数Ｃ（Ｗ，Ｎ）に関しては、本願発明者らによる論文（S. Sasaki  and  A. Tanaka,“An  Analytical  Model  of  Inter-Node  Communication  towards  Performance  Prediction  of  Multi-Node  Systems”,  Proceedings  of  International  Symposium  on  Computer  and  Information  Sciences,  October  2008.）において詳しく解析されている。転送回数Ｃ（Ｗ，Ｎ）に関する詳細は、その論文も参照されたい。
【００８０】
１回のライトアクセスに起因して将来発生するコピーブロックＣＢＬＫの転送回数Ｃ（Ｗ，Ｎ）は、上述のライトアクセス比率Ｗ及びスコープＮに依存する。まず、ライトアクセス比率Ｗが大きいほど、転送回数Ｃ（Ｗ，Ｎ）は少なくなる。それは、ライトアクセス比率Ｗが大きい状態は、リードアクセス比率が小さい状態を意味し、結果として、ブロック転送処理が発生する機会が少なくなるからである。また、スコープＮ（ｎ個の計算ノード２−１〜２−ｎのうち当該ブロックＢＬＫへのアクセスが発行される計算ノード２の数）が大きいほど、転送回数Ｃ（Ｗ，Ｎ）は多くなる。このように、転送回数Ｃ（Ｗ，Ｎ）は、ライトアクセス比率Ｗが小さくなるほど、また、スコープＮが大きくなるほど、多くなる。
【００８１】
従って、転送量算出部１３は、ライトアクセス比率ＷとスコープＮに基づいて、転送回数Ｃ（Ｗ，Ｎ）を算出する。ライトアクセス比率Ｗは、上記ステップＳ２１１で得られている。また、スコープＮは、メタ情報ＭＥＴ中のアクセス履歴情報ＨＩＳに含まれている。そして、転送量算出部１３は、所定の関数を用いることによって転送回数Ｃ（Ｗ，Ｎ）を算出する。その所定の関数によれば、ライトアクセス比率Ｗが小さくなるほど、また、スコープＮが大きくなるほど多くなる転送回数Ｃ（Ｗ，Ｎ）が得られる。例えば、その所定の関数は、次の式（３）で与えられる。
【００８２】
式（３）：Ｃ（Ｗ，Ｎ）＝（Ｎ−１）／（Ｗ・Ｎ−Ｗ＋１）
【００８３】
Ｎ＝１の場合、転送回数Ｃ（Ｗ，Ｎ）は０である。Ｎ＝２の場合、転送回数Ｃ（Ｗ，Ｎ）は、１／（Ｗ＋１）である。Ｎ＝３の場合、転送回数Ｃ（Ｗ，Ｎ）は、２／（２Ｗ＋１）である。Ｎ＝４の場合、転送回数Ｃ（Ｗ，Ｎ）は、３／（３Ｗ＋１）である。このように、スコープＮが大きくなるほど、転送回数Ｃ（Ｗ，Ｎ）は多くなる。また、ライトアクセス比率Ｗが小さくなるほど、転送回数Ｃ（Ｗ，Ｎ）が多くなる。上記論文によれば、式（３）で与えられる関数を用いることにより、転送回数Ｃ（Ｗ，Ｎ）がほぼ正確に予測され得ることが実証されている。
【００８４】
ステップＳ２１３：
次に、転送量算出部１３は、将来発生するコピーブロックＣＢＬＫの転送量（ブロック転送量）を予測する。ブロック転送量は、単位時間あたりにブロック転送処理に費やされる時間である。１回のライトアクセスに起因して将来発生するコピーブロックＣＢＬＫの転送回数Ｃ（Ｗ，Ｎ）は、上記ステップＳ２１２で算出されている。また、単位時間あたりのライトアクセス数であるライトアクセスレートＲＴは、上記ステップＳ２１１で算出されている。更に、１回のブロック転送に要する転送コスト（ＣＰＵ使用時間）は、記憶装置２０に格納されている転送コスト情報ＣＳＴから得られる。従って、転送量算出部１３は、それら情報に基づき、次の式（４）に従ってブロック転送量を算出することができる。
【００８５】
式（４）：ブロック転送量＝ＲＴ×Ｃ（Ｗ，Ｎ）×転送コスト
【００８６】
算出されるブロック転送量は、将来のブロック転送量の予測値である。このようにして転送量算出部１３によって算出されたブロック転送量は、以下「予測ブロック転送量」と参照される。
【００８７】
ステップＳ２２０：
再度図８を参照して、アクセス処理ノード２Ａのキャッシュ制御部１２は、コンシステンシを緩和するか否かを決定する。この時、そのキャッシュ制御部１２は、上記ステップＳ２１０において得られた予測ブロック転送量と、記憶装置２０に格納されている目標情報ＴＡＲを参照する。上述の通り、目標情報ＴＡＲは目標性能を示している。従って、キャッシュ制御部１２は、予測ブロック転送量と目標性能に基づき、目標性能が達成されるように、コンシステンシ緩和の要否を決定する。コンシステンシを緩和するか否かの決定方法は、後に詳しく説明される。
【００８８】
コンシステンシが緩和されない場合、すなわち、コンシステンシが維持される場合、アクセス処理ノード２Ａのキャッシュ制御部１２は、上述の２つの方式のうち「第１の方式」を採用する。この場合、処理はステップＳ２３０に進む。
【００８９】
ステップＳ２３０：
アクセス処理ノード２Ａと異なる他のノード２Ｃが、対象ブロックＢＬＫのコピーであるコピーブロックＣＢＬＫをキャッシュしている可能性がある。アクセス処理ノード２ＡのコピーブロックＣＢＬＫに新たなデータが書き込まれたため、ノード２ＣのコピーブロックＣＢＬＫのステータスを“ｓｔａｌｅ”に変更する必要がある。
【００９０】
まず、アクセス処理ノード２Ａのキャッシュ制御部１２は、対象ブロックＢＬＫに割り当てられているマスターノード２Ｍを特定する。このとき、キャッシュ制御部１２は、アクセスに含まれるブロック識別子をハッシュする等の方法によって、外部と通信することなく、マスターノード２Ｍを特定することができる。そして、キャッシュ制御部１２は、そのマスターノード２Ｍに対して、ノード２ＣのコピーブロックＣＢＬＫのステータスを“ｓｔａｌｅ”に変更するよう指示する。ステータスの変更を指示するステータス変更コマンドは、対象ブロックＢＬＫのブロック識別子とアクセス処理ノード２Ａのノード識別子を含む。そのステータス変更コマンドは、アクセス処理ノード２Ａの通信部１１からマスターノード２Ｍへ送られる。
【００９１】
ステップＳ２４１：
マスターノード２Ｍの通信部１１は、アクセス処理ノード２Ａからステータス変更コマンドを受け取る。マスターノード２Ｍのキャッシュ制御部１２は、ステータス変更コマンドに含まれるブロック識別子を参照して、対象ブロックＢＬＫを特定する。そして、キャッシュ制御部１２は、その対象ブロックＢＬＫのコンシステンシ管理情報ＣＯＮに含まれるディレクトリ情報ＤＩＲを参照する。
【００９２】
まず、マスターノード２Ｍのキャッシュ制御部１２は、ディレクトリ情報ＤＩＲを参照することにより、Ｃｕｒｒｅｎｔコピーをキャッシュしているノード２Ｃを特定する。ノード２Ｃは複数存在する場合もある。そして、キャッシュ制御部１２は、ディレクトリ情報ＤＩＲ中の該当するノード２Ｃに対応するステータスを“ｓｔａｌｅ”に変更する。また、キャッシュ制御部１２は、ステータス変更コマンドに含まれるノード識別子から、アクセス処理ノード２Ａを特定する。そして、キャッシュ制御部１２は、ディレクトリ情報ＤＩＲ中のアクセス処理ノード２Ａに対応するステータスを“ｅｘｃｌｕｓｉｖｅ”に設定する。
【００９３】
更に、マスターノード２Ｍのキャッシュ制御部１２は、上記特定されたノード２Ｃのそれぞれに対して、ステータスを“ｓｔａｌｅ”に変更するように指示する。ステータスの変更を指示するステータス変更コマンドは、対象ブロックＢＬＫのブロック識別子を含む。そのステータス変更コマンドは、マスターノード２Ｍの通信部１１からノード２Ｃのそれぞれへ送られる。
【００９４】
ステップＳ２５１：
各ノード２Ｃの通信部１１は、マスターノード２Ｍからステータス変更コマンドを受け取る。各ノード２Ｃのキャッシュ制御部１２は、ステータス変更コマンドに含まれるブロック識別子を参照して、対象ブロックＢＬＫを特定する。そして、そのキャッシュ制御部１２は、コピーブロックＣＢＬＫに関連付けられたメタ情報ＭＥＴに含まれるステータスを、“ｓｔａｌｅ”に変更する。
【００９５】
ステップＳ２５２：
更に、各ノード２Ｃのキャッシュ制御部１２は、コピーブロックＣＢＬＫに関連付けられたメタ情報ＭＥＴに含まれる一時アクセス情報ＴＭＰを読み出す。そして、そのキャッシュ制御部１２は、読み出した一時アクセス情報ＴＭＰをマスターノード２Ｍに通知する。一時アクセス情報ＴＭＰは、各ノード２Ｃの通信部１１からマスターノード２Ｍに送られる。その後、各ノード２Ｃのキャッシュ制御部１２は、一時アクセス情報ＴＭＰに含まれる一時的ライトアクセス数及び一時的リードアクセス数の両方を初期値（＝０）にリセットする。
【００９６】
ステップＳ２４２：
マスターノード２Ｍの通信部１１は、各ノード２Ｃから一時アクセス情報ＴＭＰを受け取る。マスターノード２Ｍのキャッシュ制御部１２は、対象ブロックＢＬＫに関するコンシステンシ管理情報ＣＯＮを更新する。具体的には、キャッシュ制御部１２は、受け取った一時アクセス情報ＴＭＰに含まれる一時的ライトアクセス数及び一時的リードアクセス数を、アクセス履歴情報ＨＩＳに含まれるライトアクセス数ＮＷとリードアクセス数ＮＲのそれぞれに加算する。
【００９７】
一方、ステップＳ２２０においてコンシステンシの緩和が決定された場合、アクセス処理ノード２Ａのキャッシュ制御部１２は、上述の２つの方式のうち「第２の方式」を採用する。すなわち、キャッシュ制御部１２は、当該ライトアクセスを「擬似ライトアクセス」として扱う。この場合、アクセス処理ノード２Ａのキャッシュ制御部１２は、ノード２ＣにおけるコピーブロックＣＢＬＫのステータスの変更を指示しない。つまり、上述のステップＳ２３０以降は実行されない。従って、ノード２ＣにキャッシュされているコピーブロックＣＢＬＫのステータスは“ｓｔａｌｅ”に変更されない。その結果、現在のライトアクセスに起因して、ブロック転送処理が将来発生する確率が低くなり、システム性能の劣化が抑制される。
【００９８】
以上に説明されたように、通常のライトアクセスが実施されると、コンシステンシは維持される。一方、擬似ライトアクセスが実施されると、コンシステンシは緩和される。そして、コンシステンシが緩和された後、再度ライトアクセスが実施されると、コンシステンシは自動的に回復することになる。
【００９９】
３−３．コンシステンシ緩和判定処理（ステップＳ２２０）
ステップＳ２２０では、コンシステンシを緩和するか否かの判定が行われる。つまり、ライトアクセスを実施するか擬似ライトアクセスを実施するかの判定が行われる。図１０は、本実施の形態におけるステップＳ２２０の一例を示すフローチャートである。
【０１００】
ステップＳ２２１：
アクセス処理ノード２Ａのキャッシュ制御部１２は、目標情報ＴＡＲに基づいて、閾値転送量を算出する。閾値転送量は、目標性能が達成され得るブロック転送量の上限値である。例えば、目標情報ＴＡＲが「スケーラビリティ＝０．８」を示している場合、閾値転送量は０．２（＝１−０．８）である。目標情報ＴＡＲは閾値転送量そのものを示していてもよい。その場合、キャッシュ制御部１２は、目標情報ＴＡＲで示される閾値転送量をそのまま用いる。
【０１０１】
ステップＳ２２２：
次に、アクセス処理ノード２Ａのキャッシュ制御部１２は、予測ブロック転送量と閾値転送量との比較を行う。
【０１０２】
ステップＳ２２３：
アクセス処理ノード２Ａのキャッシュ制御部１２は、その比較の結果に基づいて、コンシステンシを緩和するか否かを決定する。具体的には、予測ブロック転送量が閾値転送量を超える場合（ステップＳ２２３；Ｙｅｓ）、目標性能が達成されない可能性が高い。従って、アクセス処理ノード２Ａのキャッシュ制御部１２は、コンシステンシを緩和することを決定する。一方、予測ブロック転送量が閾値転送量以下の場合（ステップＳ２２３；Ｎｏ）、目標性能が達成される可能性が高い。従って、アクセス処理ノード２Ａのキャッシュ制御部１２は、コンシステンシを緩和しないことを決定する。
【０１０３】
コンシステンシが緩和される場合、擬似ライトアクセスが実施される。図１０で示されたアルゴリズムによれば、一度コンシステンシが緩和されると、擬似ライトアクセスが実施される期間がしばらく続く。従って、ブロック転送処理の発生回数が比較的早く減り、目標性能が素早く達成されることが期待される。その一方で、擬似ライトアクセスがしばらく続くため、コンシステンシが緩和され過ぎることも考えられる。例えば、ある計算ノード２において、コピーブロックＣＢＬＫの“見た目のステータス”はｓｈａｒｅｄであるが、実際にはそのコピーブロックＣＢＬＫがかなり古いものになっている状況が考えられる。このような状況で、ブロックＢＬＫに対する通常のライトアクセスが実施されると、当該計算ノード２におけるコピーブロックＣＢＬＫのステータスが実際に即したものに更新される。すなわち、コンシステンシが回復する。この観点から言えば、コンシステンシを緩和したい場合であっても、ある程度通常のライトアクセスを実施することが好適である。通常のライトアクセスをある程度確保するためのアルゴリズムとして、例えば、次のようなものが考えられる。
【０１０４】
図１１は、ステップＳ２２０の変形例を示すフローチャートである。ステップＳ２２１〜Ｓ２２３は、図１０の場合と同じである。予測ブロック転送量が閾値転送量以下の場合（ステップＳ２２３；Ｎｏ）、アクセス処理ノード２Ａのキャッシュ制御部１２は、コンシステンシを緩和しないことを決定する。従って、通常のライトアクセスが実施される。一方、予測ブロック転送量が閾値転送量を超える場合（ステップＳ２２３；Ｙｅｓ）、通常のライトアクセスと擬似ライトアクセスは、ある比率で実施される。そのために、処理はステップＳ２２４に進む。
【０１０５】
ステップＳ２２４：
アクセス処理ノード２Ａのキャッシュ制御部１２は、予測ブロック転送量に対する閾値転送量の比率ＤＩＦＦを算出する（比率ＤＩＦＦ＝閾値転送量／予測ブロック転送量）。予測ブロック転送量は閾値転送量を超えているため、比率ＤＩＦＦは０〜１の範囲の値を取る。
【０１０６】
ステップＳ２２５：
アクセス処理ノード２Ａのキャッシュ制御部１２は、ステップＳ２２４で算出された比率ＤＩＦＦに基づいて、コンシステンシを緩和するか否かを決定する。比率ＤＩＦＦが比較的大きい場合、それは、予測ブロック転送量が閾地転送量をそれほど上回っていないことを意味する。従って、擬似ライトアクセスの頻度が低くても、目標性能は比較的早く達成されると考えられる。一方、比率ＤＩＦＦが比較的小さい場合、それは、予測ブロック転送量が閾値転送量を大きく上回っていることを意味する。従って、目標性能が達成されるまでの時間の増大を防ぐためには、擬似ライトアクセスの頻度を高めることが望ましい。よって、キャッシュ制御部１２は、比率ＤＩＦＦが小さくなるほどコンシステンシが緩和される確率が高くなるように、コンシステンシの緩和の要否を決定する。
【０１０７】
例えば、アクセス処理ノード２Ａのキャッシュ制御部１２は、０以上１未満の乱数ＲＮＤを生成する。乱数ＲＮＤが比率ＤＩＦＦ以上の場合（ステップＳ２２６；Ｙｅｓ）、キャッシュ制御部１２は、コンシステンシを緩和することを決定する。この場合、擬似ライトアクセスが実施される。一方、乱数ＲＮＤが比率ＤＩＦＦより小さい場合（ステップＳ２２６；Ｎｏ）、キャッシュ制御部１２は、コンシステンシを緩和しないことを決定する。この場合、通常のライトアクセスが実施される。
【０１０８】
例えば、比率ＤＩＦＦが０．３の場合、予測ブロック転送量は閾値転送量をかなり上回っている。この場合、しばらくの間、３０％の確率で通常のライトアクセスが実施され、７０％の確率で擬似ライトアクセスが実施される。擬似ライトアクセスの頻度が比較的高いため、目標性能が素早く達成される。また、例えば、比率ＤＩＦＦが０．９の場合、予測ブロック転送量は閾値転送量をそれほど上回っていない。この場合、しばらくの間、９０％の確率で通常のライトアクセスが実施され、１０％の確率で擬似ライトアクセスが実施される。擬似ライトアクセスの頻度は低いが、目標性能は直ぐに達成される。いずれの場合であっても、通常のライトアクセスがある程度実施されるため、コンシステンシが緩和され過ぎることが防止される。
【０１０９】
以上に説明されたように、本実施の形態によれば、ライトアクセスを受け取ったアクセス処理ノード２Ａは、コンシステンシを緩和するか否かを自動的に決定する。この時、アクセス処理ノード２Ａは、将来のブロック転送量を予測し、システムの目標性能が達成されるように、コンシステンシの緩和の要否を決定する。このように、目標性能が達成されるように、コンシステンシを自動的に制御（維持、緩和）することが可能である。
【０１１０】
４．具体例
次に、具体例を用いて、本実施の形態に係る処理を説明する。図１２は、ある時の状態を概念的に示している。ここでは、５個の計算ノード２−１〜２−５を考える（計算ノード２−４、２−５は図示されていない）。対象ブロックは、ブロックＢＬＫである。
【０１１１】
計算ノード２−１は、対象ブロックＢＬＫのマスターノード２Ｍである。従って、計算ノード２−１は、対象ブロックＢＬＫに関するコンシステンシ管理情報ＣＯＮを有している。ディレクトリ情報ＤＩＲは、「計算ノード２−２がＥｘｃｌｕｓｉｖｅコピーをキャッシュしており、他の計算ノードはコピーブロックＣＢＬＫをキャッシュしていないこと」を示している。アクセス履歴情報ＨＩＳは、「ライトアクセス数ＮＷ＝１００００、リードアクセス数ＮＲ＝４００００、測定開始時刻Ｔ０＝８００００００、スコープＮ＝４」を示している。例えば、５個の計算ノード２のうち４個の計算ノード２−１〜２−４に対して、ブロックＢＬＫへのアクセスが発行される。
【０１１２】
図１２で示される状態は、計算ノード２−２があるライトアクセスを処理した直後の状態である。従って、計算ノード２−２は、コピーブロックＣＢＬＫ−２（Ｅｘｃｌｕｓｉｖｅコピー）をキャッシュしている。また、計算ノード２−２は、そのコピーブロックＣＢＬＫ−２に関連付けられたメタ情報ＭＥＴを有している。コピーブロックＣＢＬＫ−２のステータスは“ｅｘｃｌｕｓｉｖｅ”である。一時的ライトアクセス数は“１”になっている。
【０１１３】
計算ノード２−３〜２−５は、コピーブロックＣＢＬＫをキャッシュしていない。
【０１１４】
図１２で示された状態の後、計算ノード２−３に対してリードアクセスが発行されたとする。この場合、図６及び図７で示されたリードアクセス処理（ステップＳ１００）が行われる。図１３は、このリードアクセス処理が行われた後の結果を示している。図６、図７、図１２、及び図１３を参照して、リードアクセス処理を説明する。
【０１１５】
計算ノード２−３は、アクセス処理ノード２Ａである。この計算ノード２−３は、対象ブロックＢＬＫのＣｕｒｒｅｎｔコピーをキャッシュしていない（ステップＳ１１０；Ｎｏ）。従って、計算ノード２−３は、マスターノード２−１に対して、Ｃｕｒｒｅｔコピーを要求する（ステップＳ１５１）。
【０１１６】
マスターノード２−１は、ディレクトリ情報ＤＩＲを参照し、「計算ノード２−２がＥｘｃｌｕｓｉｖｅコピーをキャッシュしていること」を検出する（ステップＳ１６２；Ｙｅｓ、ステップＳ１６３；Ｙｅｓ）。よって、計算ノード２−２が転送元ノード２Ｓとなる。マスターノード２−１は、計算ノード２−２に対して、ステータス変更とＣｕｒｒｅｎｔコピーの転送を指示する（ステップＳ１６４、ステップＳ１６５）。また、マスターノード２−１は、ディレクトリ情報ＤＩＲ中の計算ノード２−２に対応するステータスを“ｅｘｃｌｕｓｉｖｅ”から“ｓｈａｒｅｄ”に変更し、計算ノード２−３に対応するステータスを“ｓｈａｒｅｄ”に設定する。
【０１１７】
計算ノード２−２は、ステータス変更指示に応答して、コピーブロックＣＢＬＫ−２のステータスを“ｅｘｃｌｕｓｉｖｅ”から“ｓｈａｒｅｄ”に変更する（ステップＳ１７１）。また、計算ノード２−２は、転送指示コマンドに応答して、コピーブロックＣＢＬＫ−２（Ｃｕｒｒｅｎｔコピー）及びアクセス履歴情報ＨＩＳを計算ノード２−３に転送する（ステップＳ１７２）。
【０１１８】
計算ノード２−３は、計算ノード２−２から受け取ったＣｕｒｒｅｎｔコピーをコピーブロックＣＢＬＫ−３としてキャッシュする（ステップＳ１５２）。また、計算ノード２−３は、コピーブロックＣＢＬＫ−３と関連付けられたメタ情報ＭＥＴを作成する。そのメタ情報ＭＥＴに記載されるステータスは“ｓｈａｒｅｄ”である。
【０１１９】
その後、計算ノード２−２は、メタ情報ＭＥＴに含まれる一時的リードアクセス数を１だけ増加させる（ステップＳ１２０）。そして、計算ノード２−２は、コピーブロックＣＢＬＫ−３からリード対象データを読み出し（ステップＳ１３０）、読み出しデータをクライアントへ送信する（ステップＳ１４０）。
【０１２０】
次に、図１３で示された状態の後、計算ノード２−２に対してライトアクセスが発行されたとする。この場合、図８〜図１１で示されたライトアクセス処理（ステップＳ２００）が行われる。図１４は、このライトアクセス処理が行われた後の結果を示している。図８〜図１１、図１３及び図１４を参照して、ライトアクセス処理を説明する。
【０１２１】
計算ノード２−２は、アクセス処理ノード２Ａである。計算ノード２−２は、コピーブロックＣＢＬＫ−２をキャッシュしている（ステップＳ２０１；Ｙｅｓ）。よって、計算ノード２−２は、コピーブロックＣＢＬＫ−２に書き込みデータを書き込む（ステップＳ２０３）。また、計算ノード２−２は、コピーブロックＣＢＬＫ−２のステータスを“ｓｈａｒｅｄ”から“ｅｘｃｌｕｓｉｖｅ”に変更し、一時的ライトアクセス数を１だけ増加させる（ステップＳ２０４）。一時的ライトアクセス数は２になる。
【０１２２】
また、計算ノード２−２は、ブロック転送量を予測する（ステップＳ２１０）。まず、計算ノード２−２は、メタ情報ＭＥＴに含まれるアクセス履歴情報ＨＩＳから、「ライトアクセス数ＮＷ＝１００００、リードアクセス数ＮＲ＝４００００、測定開始時刻Ｔ０＝８００００００、スコープＮ＝４」を取得する。計算ノード２−２は、式（１）に従って、ライトアクセス比率Ｗを０．２（＝１００００／（１００００＋４００００））と算出する。また、現在時刻Ｔは８００１０００であるとする。この場合、計算ノード２−２は、式（２）に従って、ライトアクセスレートＲＴを１０（＝１００００／（８００１０００−８００００００））と算出する。
【０１２３】
次に、計算ノード２−２は、式（３）に従って、転送回数Ｃ（Ｗ，Ｎ）を算出する。ライトアクセス比率Ｗが０．２であり、スコープＮが４であるため、転送回数Ｃ（Ｗ，Ｎ）は、１．８７５と算出される。また、転送コスト（ＣＰＵ使用時間）は、０．０１［秒］であるとする。従って、計算ノード２−２は、式（４）に従って、ブロック転送量を０．１８７５（＝１０×１．８７５×０．０１）［秒］と算出する。つまり、計算ノード２−２は、１秒あたりに０．１８７５秒がブロック転送処理に費やされると予測する。
【０１２４】
次に、計算ノード２−２は、予測ブロック転送量と目標性能に基づいて、コンシステンシを緩和するか否かを決定する（ステップＳ２２０）。本例では、目標性能はスケーラビリティ＝０．８であり、閾値転送量は０．２（＝１−０．８）であるとする。この場合、予測ブロック転送量＝０．１８７５は、閾値転送量＝０．２を超えない（ステップＳ２２３；Ｎｏ）。従って、計算ノード２−２は、コンシステンシを緩和しないことを決定する。
【０１２５】
この場合、計算ノード２−２は、マスターノード２−１に対して、ステータス変更を指示する（ステップＳ２３０）。
【０１２６】
マスターノード２−１は、ディレクトリ情報ＤＩＲを参照して、計算ノード２−２以外にＣｕｒｒｅｎｔコピーをキャッシュしている計算ノード２−３を特定する。つまり、計算ノード２−３は、ノード２Ｃである。従って、マスターノード２−１は、計算ノード２−３に対して、ステータス変更を指示する（ステップＳ２４１）。また、マスターノード２−１は、ディレクトリ情報ＤＩＲを更新する。具体的には、マスターノード２−１は、計算ノード２−２に対応するステータスを“ｓｈａｒｅｄ”から“ｅｘｃｌｕｓｉｖｅ”に変更し、計算ノード２−３に対応するステータスを“ｓｈａｒｅｄ”から“ｓｔａｌｅ”に変更する。
【０１２７】
計算ノード２−３は、ステータス変更指示に応答して、コピーブロックＣＢＬＫ−３のステータスを“ｓｈａｒｅｄ”から“ｓｔａｌｅ”に変更する（ステップＳ２５１）。また、計算ノード２−３は、メタ情報ＭＥＴ中の一時アクセス情報ＴＭＰを、マスターノード２−１に送信する（ステップＳ２５２）。その後、計算ノード２−３は、一時アクセス情報ＴＭＰをリセットする。
【０１２８】
マスターノード２−１は、計算ノード２−３から一時アクセス情報ＴＭＰを受け取る。そして、マスターノード２−１は、受け取った一時アクセス情報ＴＭＰを用いることにより、コンシステンシ管理情報ＣＯＮに含まれるアクセス履歴情報ＨＩＳを更新する。その結果、ブロックＢＬＫに関するリードアクセス数ＮＲは、４０００１となる。
【０１２９】
次に、別の例として、現在時刻Ｔが８０００５００である場合のライトアクセス処理を説明する。図１４の場合と同様に、図１３で示された状態の後、計算ノード２−２に対してライトアクセスが発行されたとする。ステップＳ２１０までの処理は、図１４の場合と同じである。
【０１３０】
ステップＳ２１０において、計算ノード２−２は、式（２）に従って、ライトアクセスレートＲＴを２０（＝１００００／（８０００５００−８００００００））と算出する。転送回数Ｃ（Ｗ，Ｎ）は、図１４の場合と同じく、１．８７５と予測される。従って、計算ノード２−２は、式（４）に従って、ブロック転送量を０．３７５（＝２０×１．８７５×０．０１）［秒］と算出する。つまり、計算ノード２−２は、１秒あたりに０．３７５秒がブロック転送処理に費やされると予測する。
【０１３１】
ステップＳ２２０において、計算ノード２−２は、予測ブロック転送量と目標性能に基づいて、コンシステンシを緩和するか否かを決定する。本例では、予測ブロック転送量＝０．３７５は、閾値転送量＝０．２を超えている（ステップＳ２２３；Ｙｅｓ）。従って、図１０で示されたフローに従う場合、計算ノード２−２は、コンシステンシを緩和することを決定する。
【０１３２】
図１１で示されたフローに従う場合、計算ノード２−２は、予測ブロック転送量に対する閾値転送量の比率ＤＩＦＦを算出する（ステップＳ２２４）。本例では、比率ＤＩＦＦは、０．５３３（＝０．２／０．３７５）と算出される。続いて、計算ノード２−２は、０以上１未満の乱数ＲＮＤを生成する（ステップＳ２２５）。乱数ＲＮＤが比率ＤＩＦＦ以上の場合（ステップＳ２２６；Ｙｅｓ）、計算ノード２−２は、コンシステンシを緩和することを決定する。一方、乱数ＲＮＤが比率ＤＩＦＦより小さい場合（ステップＳ２２６；Ｎｏ）、計算ノード２−２は、コンシステンシを緩和しないことを決定する。
【０１３３】
コンシステンシが緩和される場合、ステップＳ２３０以降の処理は実施されない。図１５は、その場合の結果を示している。図１５に示されるように、計算ノード２−３にキャッシュされているコピーブロックＣＢＬＫ−３のステータスは、“ｓｔａｌｅ”に変更されていない。つまり、コピーブロックＣＢＬＫ−３のステータスは、“ｓｈａｒｅｄ”のままである。また、ブロックＢＬＫに関するコンシステンシ管理情報ＣＯＮも更新されていない。
【０１３４】
その後、計算ノード２−３に対してリードアクセスが発行されたとする。図１４の場合、コピーブロックＣＢＬＫ−３のステータスは“ｓｔａｌｅ”であるため、計算ノード２−３は、自身がＣｕｒｒｅｎｔコピーをキャッシュしていないと判断する。その結果、計算ノード２−３は、Ｃｕｒｒｅｎｔコピーの転送を要求し、ブロック転送処理が発生する。一方、図１５の場合、コピーブロックＣＢＬＫ−３のステータスは“ｓｈａｒｅｄ”であるため、計算ノード２−３は、自身がＣｕｒｒｅｎｔコピーをキャッシュしていると判断する。従って、計算ノード２−３は、Ｃｕｒｒｅｎｔコピーの転送を要求することなく、自身のコピーブロックＣＢＬＫ−３からデータを読み出す。すなわち、ブロック転送処理は発生しない。
【０１３５】
以上、本発明の実施の形態が添付の図面を参照することにより説明された。但し、本発明は、上述の実施の形態に限定されず、要旨を逸脱しない範囲で当業者により適宜変更され得る。
【図面の簡単な説明】
【０１３６】
【図１】図１は、本発明の実施の形態に係る分散キャッシュシステムの構成を概略的に示すブロック図である。
【図２】図２は、本発明の実施の形態に係る計算ノードの構成を示すブロック図である。
【図３】図３は、本発明の実施の形態におけるコンシステンシ管理情報の一例を示す。
【図４】図４は、本発明の実施の形態におけるメタ情報の一例を示す。
【図５】図５は、本発明の実施の形態に係る分散キャッシュシステムの処理を示すフローチャートである。
【図６】図６は、本発明の実施の形態に係るリードアクセス処理を示すフローチャートである。
【図７】図７は、本発明の実施の形態に係るブロック転送処理を示すフローチャートである。
【図８】図８は、本発明の実施の形態に係るライトアクセス処理を示すフローチャートである。
【図９】図９は、本発明の実施の形態に係るブロック転送量算出処理を示すフローチャートである。
【図１０】図１０は、本発明の実施の形態に係るコンシステンシ緩和判定処理の一例を示すフローチャートである。
【図１１】図１１は、本発明の実施の形態に係るコンシステンシ緩和判定処理の変形例を示すフローチャートである。
【図１２】図１２は、本発明の実施の形態におけるリードアクセス処理の一例を示す概念図である。
【図１３】図１３は、本発明の実施の形態におけるリードアクセス処理の一例を示す概念図である。
【図１４】図１４は、本発明の実施の形態におけるライトアクセス処理の一例を示す概念図である。
【図１５】図１５は、本発明の実施の形態におけるライトアクセス処理の他の例を示す概念図である。
【符号の説明】
【０１３７】
１    分散キャッシュシステム
２    計算ノード
１０    処理装置
１１    通信部
１２    キャッシュ制御部
１３    転送量算出部
２０    記憶装置
３０    入力装置
４０    出力装置
５０    通信装置
１００  クライアント
ＢＬＫ  ブロック
ＣＢＬＫ  コピーブロック
ＤＳＥＴ  データセット
ＣＯＮ  コンシステンシ管理情報
ＤＩＲ  ディレクトリ情報
ＨＩＳ  アクセス履歴情報
ＭＥＴ  メタ情報
ＴＭＰ  一時アクセス情報
ＴＡＲ  目標情報
ＣＳＴ  転送コスト情報
ＰＲＯＧ  分散キャッシュプログラム
【図１】
2010140362.tif 000003
【図２】
2010140362.tif 000004
【図３】
2010140362.tif 000005
【図４】
2010140362.tif 000006
【図５】
2010140362.tif 000007
【図６】
2010140362.tif 000008
【図７】
2010140362.tif 000009
【図８】
2010140362.tif 000010
【図９】
2010140362.tif 000011
【図１０】
2010140362.tif 000012
【図１１】
2010140362.tif 000013
【図１２】
2010140362.tif 000014
【図１３】
2010140362.tif 000015
【図１４】
2010140362.tif 000016
【図１５】
2010140362.tif 000017