(57)【要約】【課題】データの書き込み時に情報記憶装置間で発生する排他制御のための通信を削減する。【解決手段】情報記憶装置１０１は、データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値とデータとを記憶装置１１１に記憶する。情報記憶装置１０１は、記憶先の論理アドレスのデータを読み込む際に、記憶先の論理アドレスに複数のクロック値が対応付けられているとき、複数のクロック値に基づいて、読み込むデータを選択する。【選択図】図１
2016143296.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値と前記データとを記憶装置に記憶し、
前記記憶先の論理アドレスのデータを読み込む際に、前記記憶先の論理アドレスに複数のクロック値が対応付けられているとき、前記複数のクロック値に基づいて、読み込むデータを選択する、
制御部を有することを特徴とする情報記憶装置。
【請求項２】
前記クロック値は、
他の情報記憶装置が情報処理装置からデータを受信したときに増加される第１クロック値と、前記情報処理装置からデータを受信したとき、または、前記他の情報記憶装置からデータと前記第１クロック値とを受信したときに増加される第２クロック値とを有し、
前記制御部は、
前記記憶先の論理アドレスのデータを読み込む際に、前記複数のクロック値の中で、前記第１クロック値が最も大きいクロック値と対応付けられたデータを選択し、前記第１クロック値が最も大きいクロック値が複数ある場合、前記第１クロック値が最も大きいクロック値の中で、前記第２クロック値が最も大きいクロック値と対応付けられたデータを選択することを特徴とする請求項１に記載の情報記憶装置。
【請求項３】
前記制御部は、
前記情報処理装置から受信したデータを記憶する際、前記クロック値と前記受信したデータとを前記他の情報記憶装置に転送し、
前記他の情報記憶装置からクロック値とデータとを受信したことに応じて、記憶先の論理アドレスに対応付けて、前記他の情報記憶装置から受信したクロック値と前記他の情報記憶装置から受信したデータとを前記記憶装置に記憶することを特徴とする請求項２に記載の情報記憶装置。
【請求項４】
前記制御部は、
前記情報処理装置から受信したデータを記憶する際、前記情報処理装置からデータを受信したときに増加される第３クロック値と前記受信したデータとを前記他の情報記憶装置に転送し、
前記他の情報記憶装置から前記第１クロック値とデータを受信したことに応じて、当該第１クロック値の受信以前に受信した第１クロック値と前記他の情報記憶装置から受信した前記第１クロック値に基づくクロック値を生成し、前記他の情報記憶装置から受信したデータの記憶先の論理アドレスに対応付けて、前記生成したクロック値と前記他の情報記憶装置から受信したデータとを前記記憶装置に記憶し、前記生成したクロック値を前記他の情報記憶装置に転送し、
前記他の情報記憶装置からクロック値を受信したことに応じて、前記情報処理装置から受信したデータの記憶先の論理アドレスに対応付けて、前記他の情報記憶装置から受信したクロック値と前記情報処理装置から受信したデータとを前記記憶装置に記憶することを特徴とする請求項２に記載の情報記憶装置。
【請求項５】
データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値と前記データとを記憶装置に記憶し、前記記憶先の論理アドレスのデータを読み込む際に、前記記憶先の論理アドレスに複数のクロック値が対応付けられているとき、前記複数のクロック値に基づいて、読み込むデータを選択する情報記憶装置と、
前記記憶装置に記憶したデータを保存するストレージ装置と、
データの書き込み要求または読み込み要求を、前記情報記憶装置に送信する情報処理装置と、
を有することを特徴とするストレージシステム。
【請求項６】
データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値と前記データとを記憶装置に記憶し、
前記記憶先の論理アドレスのデータを読み込む際に、前記記憶先の論理アドレスに複数のクロック値が対応付けられているとき、前記複数のクロック値に基づいて、読み込むデータを選択する、
処理をコンピュータに実行させることを特徴とする情報記憶装置制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報記憶装置、ストレージシステムおよび情報記憶装置制御プログラムに関する。
【背景技術】
【０００２】
従来、ストレージシステムでは、業務を停止させないため、複数の情報記憶装置によりデータを冗長化して記憶している。例えば、情報処理装置は、複数の情報記憶装置のいずれにもデータの書き込み要求を行うことができ、複数の情報記憶装置のいずれにもデータの読み込み要求を行うことができる。
【０００３】
関連する先行技術としては、例えば、最小の論理クロック値から算出した確定クロック値で、クロックリストを更新し、クロックリストに含まれる最小の確定クロック値を、確定クロック値として特定し、クロックリストを他のノード装置に送信する技術がある。また、例えば、シリアル化された同期メタデータの一部をクロック・ベクトルとして利用し、クロック・ベクトルをバージョンのベクトルとして定義することで、複数の装置と関連してデータ整合性を管理する技術がある。また、順序値を計算することにより、複数のプログラム間の順序関係を解析する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１５４６３１号公報
【特許文献２】特表２０１２−５０１５８６号公報
【特許文献３】特開２００９−２０８２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、データの書き込み時に、情報記憶装置間で排他制御のための通信が発生して、情報記憶装置の入出力性能が低下する場合がある。例えば、複数の情報記憶装置が、同時に同一の記憶領域に書き込みを行うとデータ化けが発生する場合がある。このため、複数の情報記憶装置は、同時に同一の記憶領域に書き込みを行わないように排他制御のための通信を行っている。
【０００６】
一つの側面では、本発明は、データの書き込み時に情報記憶装置間で発生する排他制御のための通信を削減することを可能にする情報記憶装置、ストレージシステムおよび情報記憶装置制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値とデータとを記憶装置に記憶し、記憶先の論理アドレスのデータを読み込む際に、記憶先の論理アドレスに複数のクロック値が対応付けられているとき、複数のクロック値に基づいて、読み込むデータを選択する情報記憶装置、ストレージシステムおよび情報記憶装置制御プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、データの書き込み時に情報記憶装置間で発生する排他制御のための通信を削減することを可能にするという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる情報記憶装置１０１の一実施例を示す説明図である。
【図２】図２は、実施の形態にかかるストレージシステム２００のシステム構成例を示す説明図である。
【図３】図３は、実施の形態にかかるＣＭ１０１のハードウェア構成例を示すブロック図である。
【図４】図４は、実施の形態にかかるベクトルクロック２１０の一例を示す説明図である。
【図５】図５は、実施の形態にかかるキャッシュリスト２２０の一例を示す説明図である。
【図６】図６は、実施の形態にかかるＣＭ１０１の機能的構成例を示すブロック図である。
【図７】図７は、実施の形態にかかる担当ＣＭ２０２への書き込み動作の一例を示すシーケンス図である。
【図８】図８は、実施の形態にかかるミラーＣＭ２０３への書き込み動作の一例を示すシーケンス図である。
【図９】図９は、実施の形態にかかるＣＭ１０１の書き込み動作処理手順の一例を示すフローチャートである。
【図１０】図１０は、実施の形態にかかるＣＭ１０１の受信データ処理手順の一例を示すフローチャートである。
【図１１】図１１は、実施の形態にかかるＣＭ１０１の読み込み動作処理手順の一例を示すフローチャートである。
【図１２】図１２は、実施の形態にかかるＣＭ１０１のベクトルクロック値比較処理手順の一例を示すフローチャートである。
【図１３】図１３は、実施の形態にかかる担当ＣＭ２０２からの書き込み処理時のベクトルクロック値の更新の一例を示すシーケンス図である。
【図１４】図１４は、図１３のシーケンス実行後のキャッシュリスト１４０１の一例を示す説明図である。
【図１５】図１５は、実施の形態にかかるミラーＣＭ２０３からの書き込み処理時のベクトルクロック値の更新の一例を示すシーケンス図である。
【図１６】図１６は、図１５のシーケンス実行後のキャッシュリスト１６０１の一例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に図面を参照して、本発明にかかる情報記憶装置、ストレージシステムおよび情報記憶装置制御プログラムの実施の形態を詳細に説明する。
【００１１】
（実施の形態）
図１は、実施の形態にかかる情報記憶装置１０１の一実施例を示す説明図である。図１において、情報記憶装置１０１は、情報処理装置１０２からデータの書き込み要求および読み込み要求を受け付けるコンピュータである。
【００１２】
情報記憶装置１０１は、情報処理装置１０２からデータの書き込み要求を受け付けると情報記憶装置１０１内のキャッシュ１１１にデータを書き込む。情報記憶装置１０１は、例えば、キャッシュ１１１が満杯になるとキャッシュ１１１上のデータをディスク等のストレージ装置に書き込む。また、情報記憶装置１０１は、情報処理装置１０２からデータの読み込み要求を受け付けると情報記憶装置１０１内のキャッシュ１１１またはストレージ装置からデータを読み込む。
【００１３】
情報記憶装置１０１は、情報処理装置１０２と一つまたは複数のケーブルで接続される。ケーブルには、ファイバチャネルケーブル、イーサネット（登録商標）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ））ケーブル等がある。
【００１４】
従来、冗長性および負荷分散のため、情報記憶装置は、複数台、例えば２台で運用される。この場合、情報処理装置はいずれの情報記憶装置にデータの書き込み要求および読み込み要求を行うことができる。
【００１５】
このため、複数台の情報記憶装置は、キャッシュに同一のデータを記憶する。同一のデータをキャッシュに記憶するため、ある情報記憶装置にデータの書き込みが行われると、当該情報記憶装置は、他の情報記憶装置にデータを転送する。
【００１６】
また、情報記憶装置が同一のストレージ装置に書き込みを行うため、情報記憶装置は、情報記憶装置間で排他制御を行う。例えば、排他制御を行わず、情報記憶装置が、ストレージ装置の記憶領域の書き込みを行っている際に、他の情報記憶装置が、同一のストレージ装置の同一の記憶領域に書き込みを行うと、データ化けが発生する場合がある。例えば、情報記憶装置が担当するストレージ装置の記憶領域を情報記憶装置毎に決定することで、情報記憶装置は、書き込みの排他制御を行うことができる。
【００１７】
ここで、ストレージ装置の記憶領域とは、ストレージ装置を論理的に分割した領域のことである。ストレージ装置の記憶領域は、物理ボリュームであってもよく、また、論理ボリュームであってもよい。物理ボリュームは、１つのハードディスクに対応するものであってもよく、また、ハードディスク内のパーティションに対応するものであってもよい。論理ボリュームは、物理ボリュームを集約したボリューム・グループを論理的に区分化したものである。論理ボリュームを識別するための識別子として、ＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）を用いることができる。例えば、書き込みの排他制御のため、情報記憶装置毎に、担当するＬＵＮを指定することができる。
【００１８】
この排他制御のため、情報記憶装置は、担当しないストレージ装置の記憶領域に対して書き込み要求が行われた場合、当該ストレージ装置の記憶領域を担当する情報記憶装置に書き込みが可能かどうかの問い合わせを行う。問い合わせを受けた情報記憶装置は、書き込みが可能かどうかを返答する。ここで、書き込みが可能な場合、書き込み要求が行われた情報記憶装置は、書き込みデータを転送する。
【００１９】
このように、情報記憶装置が担当しないストレージ装置の記憶領域に対して書き込み要求が行われた場合、情報記憶装置間の通信が２回発生することになる。このため、情報記憶装置が担当するストレージ装置の記憶領域に対する書き込み要求に比べて、情報記憶装置が担当しないストレージ装置の記憶領域に対する書き込み要求は、情報記憶装置間の通信の分だけ書き込みの性能が劣化することになる。
【００２０】
このように、書き込み要求を行う情報記憶装置により書き込み性能は異なる。このため、情報処理装置では、情報記憶装置がどのストレージ装置の記憶領域を担当するかを考慮して、書き込み要求を行う情報記憶装置を選択する場合がある。この選択のため、情報処理装置の処理が増加する。
【００２１】
そこで、実施の形態では、情報記憶装置１０１は、データを記憶する際に、記憶先と対応付けて書き込み順を示すクロック値を記憶し、データを読み込む際に、記憶先のクロック値に基づいて、読み込むデータを選択する。このため、情報記憶装置１０１は、書き込み時に排他制御を行わなくてもよくなるため、情報記憶装置１０１間の通信が削減される。このため、情報記憶装置１０１を用いた入出力性能が向上する。さらに、排他制御を行わなくてもよくなるため、情報記憶装置１０１間で書き込み性能の差がなくなる。このため、情報処理装置１０２は、情報記憶装置１０１を選択する処理を行わなくてもよい。
【００２２】
以下、実施の形態にかかる情報記憶装置１０１の一実施例について説明する。図１の例では、情報記憶装置１０１は、情報記憶装置１０１―１と情報記憶装置１０１―２の２台で運用される。例えば、情報処理装置１０２は、情報記憶装置１０１―１にデータの書き込み要求を行い、情報記憶装置１０１―２から当該データを読み込むことができる。
【００２３】
（１）情報記憶装置１０１−１は、情報処理装置１０２から書き込み要求を受け付ける。ここで、情報記憶装置１０１−１は、情報処理装置１０２から書き込みデータと書き込みデータの記憶先の論理アドレスを受け取る。例えば、情報記憶装置１０１−１は、記憶先としてＬＵＮと、論理アドレスとしてＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓｉｎｇ）を受け取る。ここで、ＬＢＡとは、ディスク内のブロックに振られた通し番号のことである。ＬＢＡを指定することによって、情報処理装置１０２は、ディスク内のブロックを指定することができる。
【００２４】
図１の例では、情報記憶装置１０１−１が、情報処理装置１０２からＬＢＡ１００−３００に書き込み要求を受け付ける。
【００２５】
（２）情報記憶装置１０１−１は、記憶先の論理アドレスと対応付けて、書き込み要求の受付順を示すクロック値とデータを記憶装置に書き込む。情報記憶装置１０１−１は、記憶装置に書き込む際、一定範囲の記憶領域毎にクロック値とともにデータを書き込むことができる。一定範囲の記憶領域は、例えば、１００ブロックである。また、例えば、情報記憶装置１０１−１は、クロック値とデータをキャッシュ１１１−１に書き込むことができる。また、例えば、情報記憶装置１０１−１は、情報処理装置１０２からデータを受信したときクロック値を増加させる。これにより、クロック値は、書き込み要求の受付順を示すことができる。
【００２６】
図１の例では、情報記憶装置１０１−１が、書き込み要求のデータを１００ブロック毎にクロック値とともにキャッシュ１１１−１に書き込む。また、初めての書き込みであるため、クロック値は、「１」となる。この結果、キャッシュ１１１−１には、ＬＢＡ１００−２００のデータとＬＢＡ２００−３００のデータがクロック値「１」とともに書き込まれる。
【００２７】
（３）情報記憶装置１０１−１は、情報記憶装置１０１−２にクロック値とデータを転送する。冗長性および負荷分散のため、情報記憶装置１０１−１は、クロック値とデータを情報記憶装置１０１−２とミラーリングする。
【００２８】
図１の例では、情報記憶装置１０１−１が、クロック値「１」とともにＬＢＡ１００−２００のデータとＬＢＡ２００−３００のデータを情報記憶装置１０１−２に転送する。
【００２９】
（４）情報記憶装置１０１−２は、記憶先の論理アドレスと対応付けて、書き込み要求の受付順を示すクロック値とデータを記憶装置に書き込む。例えば、情報記憶装置１０１−２は、転送されたクロック値とデータをキャッシュ１１１−２に書き込むことができる。
【００３０】
図１の例では、情報記憶装置１０１−２が、キャッシュ１１１−２にＬＢＡ１００−２００のデータとＬＢＡ２００−３００のデータをクロック値「１」とともに書き込む。この結果、情報記憶装置１０１−２のキャッシュ１１１−２は、情報記憶装置１０１−１のキャッシュ１１１−１と同一になる。
【００３１】
（５）情報記憶装置１０１−２は、情報処理装置１０２から書き込み要求を受け付ける。
【００３２】
図１の例では、情報記憶装置１０１−２が、情報処理装置１０２からＬＢＡ２００−４００に書き込み要求を受け付ける。
【００３３】
（６）情報記憶装置１０１−２は、記憶先の論理アドレスと対応付けて、書き込み要求の受付順を示すクロック値とデータを記憶装置に書き込む。
【００３４】
図１の例では、情報記憶装置１０１−２が、書き込み要求のデータを１００ブロック毎にクロック値とともにキャッシュ１１１−２に書き込む。また、２回目の書き込みであるため、クロック値は「２」となる。この結果、キャッシュ１１１−２には、ＬＢＡ２００−３００のデータとＬＢＡ３００−４００のデータがクロック値「２」とともに書き込まれる。
【００３５】
（７）情報記憶装置１０１−２は、情報記憶装置１０１−１にクロック値とデータを転送する。
【００３６】
図１の例では、情報記憶装置１０１−２が、クロック値「２」とともにＬＢＡ２００−３００のデータとＬＢＡ３００−４００のデータを情報記憶装置１０１−１に転送する。
【００３７】
（８）情報記憶装置１０１−１は、記憶先の論理アドレスと対応付けて、書き込み要求の受付順を示すクロック値とデータを記憶装置に書き込む。
【００３８】
図１の例では、情報記憶装置１０１−１が、キャッシュ１１１−１にＬＢＡ２００−３００のデータとＬＢＡ３００−４００のデータをクロック値「２」とともに書き込む。この結果、情報記憶装置１０１−１のキャッシュ１１１−１は、情報記憶装置１０１−２のキャッシュ１１１−２と同一になる。
【００３９】
（９）情報記憶装置１０１−１は、情報処理装置１０２から読み込み要求を受け付ける。ここで、情報記憶装置１０１−１は、情報処理装置１０２から読み込みデータの記憶先の論理アドレスを受け取る。例えば、情報記憶装置１０１−１は、記憶先としてＬＵＮと、論理アドレスとしてＬＢＡを受け取る。
【００４０】
図１の例では、情報記憶装置１０１−１が、情報処理装置１０２からＬＢＡ１００−３００の読み込み要求を受け付ける。
【００４１】
（１０）情報記憶装置１０１−１は、クロック値に基づいて読み込むデータを選択する。例えば、情報記憶装置１０１−１は、記憶先に複数のクロック値が対応付けられているとき、クロック値に基づいて、読み込むデータを選択する。例えば、情報記憶装置１０１−１は、クロック値を比較して、最大のクロック値とともに記憶されているデータをキャッシュ１１１−１から読み込む。
【００４２】
図１の例では、キャッシュ１１１−１では、ＬＢＡ２００−３００に複数のクロック値が対応付けられている。情報記憶装置１０１−１は、ＬＢＡ２００−３００のデータのクロック値「１」と「２」を比較して、最大のクロック値である「２」のデータを選択して、読み込む。これにより、情報記憶装置１０１−１は、後から書き込まれたＬＢＡ２００−３００のデータを読み込むことができる。
【００４３】
ここで、情報記憶装置１０１−１が、情報処理装置１０２からＬＢＡ１００−３００の読み込み要求を受け付ける例を示した。情報記憶装置１０１−２が、情報処理装置１０２からＬＢＡ１００−３００の読み込み要求を受け付ける場合も、同一の処理となり、情報記憶装置１０１−２は、後から書き込まれたＬＢＡ２００−３００のデータを読み込むことができる。
【００４４】
以上説明したように、情報記憶装置１０１は、データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値とデータとを記憶装置１１１に記憶する。情報記憶装置１０１は、記憶先の論理アドレスのデータを読み込む際に、記憶先の論理アドレスに複数のクロック値が対応付けられているとき、複数のクロック値に基づいて、読み込むデータを選択する。
【００４５】
これにより、情報記憶装置１０１は、他の情報記憶装置１０１と通信して、書き込み時に排他制御を行わなくてもよくなるため、情報記憶装置１０１間の通信が削減される。さらに、排他制御を行わなくてもよくなるため、情報記憶装置１０１間で書き込み性能の差がなくなる。このため、情報処理装置１０２は、複数の情報記憶装置１０１から、書き込み性能の高い情報記憶装置１０１を選択する処理を行わなくてもよい。
【００４６】
（ストレージシステム２００のシステム構成例）
図２は、実施の形態にかかるストレージシステム２００のシステム構成例を示す説明図である。図２において、ストレージシステム２００は、サーバ１０２と、担当ＣＭ（Ｃｏｎｔｒｏｌｌｅｒ  Ｍｏｄｕｌｅ）２０２と、ミラーＣＭ２０３と、ストレージ装置２０１と、を含む。サーバ１０２と、担当ＣＭ２０２と、ミラーＣＭ２０３と、ストレージ装置２０１とは、複数のケーブルで接続される。ここで、図１に示した情報記憶装置１０１は、担当ＣＭ２０２と、ミラーＣＭ２０３とに対応する。また、図１に示した情報処理装置１０２は、サーバ１０２に対応する。
【００４７】
担当ＣＭ２０２およびミラーＣＭ２０３は、サーバ１０２からの書き込みおよび読み込み要求に基づいて、ストレージ装置２０１を制御するコンピュータである。サーバ１０２は、ストレージ装置２０１にデータを書き込むおよび読み込むコンピュータである。ストレージ装置２０１は、データを記憶する装置である。例えば、複数のハードディスク２１１を有するハードディスク装置またはディスクアレイ装置等の記憶装置である。
【００４８】
また、担当ＣＭ２０２とミラーＣＭ２０３は、ベクトルクロック２１０およびキャッシュリスト２２０を有する。図１に示したクロック値は、ベクトルクロック２１０に対応する。ベクトルクロック２１０およびキャッシュリスト２２０の記憶内容については、図４および図５を用いて後述する。
【００４９】
ここで、担当ＣＭ２０２は、ベクトルクロック２１０を更新し、保存するＣＭである。一方、ミラーＣＭ２０３は、担当ＣＭ２０２が更新したベクトルクロック２１０を保存するＣＭである。これ以降の記述で、担当ＣＭ２０２とミラーＣＭ２０３の両方を対応する記載ではＣＭ１０１と記載することがある。
【００５０】
（ＣＭ１０１のハードウェア構成例）
図３は、実施の形態にかかるＣＭ１０１のハードウェア構成例を示すブロック図である。図３において、ＣＭ１０１は、ＣＰＵ３０１と、メモリ３０２と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０３とを有する。また、各構成部は、バス３００によってそれぞれ接続される。
【００５１】
ここで、ＣＰＵ３０１は、ＣＭ１０１の全体の制御を司る。メモリ３０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭは記憶部としてＣＰＵ３０１のワークエリアとして使用される。メモリ３０２に記憶されるプログラムは、ＣＰＵ３０１にロードされることで、コーディングされている処理をＣＰＵ３０１に実行させる。
【００５２】
Ｉ／Ｆ３０３は、サーバ１０２およびストレージ装置２０１と接続する装置である。そして、Ｉ／Ｆ３０３は、他のコンピュータからのデータの入出力を制御する。
【００５３】
（ベクトルクロック２１０の一例）
図４は、実施の形態にかかるベクトルクロック２１０の一例を示す説明図である。図４において、担当ＣＭ２０２のベクトルクロック２１０は、例えば、担当ＣＭ２０２によって作成、更新され、担当ＣＭ２０２のメモリ３０２に記憶される。また、ミラーＣＭ２０３のベクトルクロック２１０は、例えば、ミラーＣＭ２０３によって作成、更新され、ミラーＣＭ２０３に転送されることで、ミラーＣＭ２０３のメモリ３０２に記憶される。
【００５４】
ベクトルクロック２１０は、ミラーＣＭクロック値および担当ＣＭクロック値の項目を有する。ベクトルクロック２１０は、各項目に情報を設定することで、ベクトルクロック値を記憶する。ここで、ベクトルクロック値とは、第１成分がミラーＣＭクロック値であり、第２成分が担当ＣＭクロック値であるベクトル値である。
【００５５】
ここで、ミラーＣＭクロック値は、ミラーＣＭ２０３がサーバ１０２から書き込み要求のデータを受信した時に増加される値である。例えば、ミラーＣＭクロック値は、ミラーＣＭ２０３がサーバ１０２から書き込み要求のデータを受信した回数である。
【００５６】
例えば、ミラーＣＭ２０３が、ミラーＣＭ２０３のメモリ３０２上にミラーＣＭ２０３のクロックスカラー値を記憶し、サーバ１０２から書き込み要求のデータを受信した時にミラーＣＭ２０３のクロックスカラー値を増加させる。ミラーＣＭ２０３が、ミラーＣＭ２０３のクロックスカラー値を担当ＣＭ２０２に転送することにより、担当ＣＭ２０２は、ミラーＣＭ２０３がサーバ１０２から書き込み要求のデータを受信した時に増加される値を取得することができる。
【００５７】
また、担当ＣＭ２０２は、ミラーＣＭ２０３から転送されたミラーＣＭ２０３のクロックスカラー値の最大値をベクトルクロック２１０のミラーＣＭクロック値とすることができる。
【００５８】
また、担当ＣＭクロック値は、担当ＣＭ２０２がサーバ１０２から書き込み要求のデータを受信した時と、担当ＣＭ２０２にミラーＣＭ２０３から書き込み要求のデータとミラーＣＭ２０３のクロックスカラー値の転送が行われた時に増加される値である。例えば、担当ＣＭクロック値は、担当ＣＭ２０２がサーバ１０２から書き込み要求のデータを受信した回数と、担当ＣＭ２０２がミラーＣＭ２０３から書き込み要求のデータとミラーＣＭ２０３のクロックスカラー値の転送が行われた回数との和である。
【００５９】
例えば、担当ＣＭ２０２は、担当ＣＭ２０２のメモリ３０２上に担当ＣＭ２０２のクロックスカラー値を記憶し、サーバ１０２から書き込み要求のデータを受信した時に担当ＣＭ２０２のクロックスカラー値を増加させる。また、担当ＣＭ２０２は、担当ＣＭ２０２にミラーＣＭ２０３から書き込み要求のデータとミラーＣＭ２０３のクロックスカラー値の転送が行われた時に担当ＣＭ２０２のクロックスカラー値を増加させる。
【００６０】
また、担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値をベクトルクロック２１０の担当ＣＭクロック値とすることができる。
【００６１】
図４の例では、ベクトルクロック２１０のミラーＣＭクロック値は、ミラーＣＭ２０３がサーバ１０２から１回書き込み要求のデータを受信したことを示す。また、ベクトルクロック２１０の担当ＣＭクロック値は、担当ＣＭ２０２がサーバ１０２から１回書き込み要求のデータを受信し、担当ＣＭ２０２にミラーＣＭ２０３から１回書き込み要求のデータとミラーＣＭ２０３のクロックスカラー値が転送されたことを示す。
【００６２】
（キャッシュリスト２２０の一例）
図５は、実施の形態にかかるキャッシュリスト２２０の一例を示す説明図である。図５において、ＣＭ１０１のキャッシュリスト２２０は、例えば、ＣＭ１０１によって作成、更新され、ＣＭ１０１のメモリ３０２に記憶される。
【００６３】
キャッシュリスト２２０は、ベクトルクロック値およびキャッシュデータの項目を有する。キャッシュリスト２２０は、各項目に情報を設定することで、キャッシュ情報を１レコードとして記憶する。例えば、図５に示すキャッシュリスト２２０は、キャッシュ情報２２０−１〜２２０−３をレコードとして記憶する。
【００６４】
ここで、キャッシュリスト２２０は、ディスク毎にディスクの一定範囲の記憶領域毎に存在し、一定範囲の記憶領域に書き込みされるデータを記憶する。例えば、キャッシュリスト２２０は、ディスク毎に１００ブロック単位に存在する。この場合、キャッシュリスト２２０は、ディスク毎にＬＢＡ０−１００、ＬＢＡ１００−２００、・・・に書き込みされるデータを記憶する。
【００６５】
ここで、ベクトルクロック値は、キャッシュリスト２２０に記憶する際のＣＭ１０１のベクトルクロック２１０を示す。例えば、ベクトルクロック値の第１成分は、ベクトルクロック２１０のミラーＣＭクロック値であり、ベクトルクロック値の第２成分は、ベクトルクロック２１０の担当ＣＭクロック値である。ここで、ベクトルクロック値を（ｘ、ｙ）とした時、ｘがベクトルクロック値の第１成分であり、ｙがベクトルクロック値の第２成分である。また、キャッシュデータは、サーバ１０２から受信したデータを記憶する。
【００６６】
図５の例では、キャッシュリスト２２０は、ディスクのＬＢＡ３００−４００のデータを保持するものである。また、レコード２２０−１は、ＣＭ１０１のベクトルクロック２１０が（０、１）の時に、ＬＢＡ３００−４００に書き込みされるデータを記憶したことを示す。
【００６７】
（ＣＭ１０１の機能的構成例）
図６は、実施の形態にかかるＣＭ１０１の機能的構成例を示すブロック図である。図６においてＣＭ１０１は、受付部６０１と、クロック値管理部６０２と、通信部６０３と、整合性管理部６０４と、を含む構成である。受付部６０１と、クロック値管理部６０２と、通信部６０３と、整合性管理部６０４と、を含む制御部は、具体的には、例えば、図３に示したメモリ３０２などの記憶装置に記憶されたプログラムをＣＰＵ３０１に実行させることにより、その機能を実現する。各機能部の処理結果は、例えば、図３に示したメモリ３０２などの記憶装置に記憶される。
【００６８】
受付部６０１は、サーバ１０２からの書き込み要求および読み込み要求を受け付ける機能を有する。受付部６０１は、サーバ１０２からの書き込み要求を受け付けた場合、書き込みするデータと当該データの記憶先の論理アドレスを受け取る。また、受付部６０１は、サーバ１０２からの読み込み要求を受け付けた場合、読み込みするデータの記憶先の論理アドレスを受け取る。例えば、受付部６０１は、データの記憶先の論理アドレスとして、記憶先のＬＵＮと論理アドレスのＬＢＡを受け取る。
【００６９】
クロック値管理部６０２は、ベクトルクロック２１０を管理する機能を有する。例えば、クロック値管理部６０２は、ＣＭ１０１が担当ＣＭ２０２である場合、担当ＣＭ２０２のクロックスカラー値とミラーＣＭ２０３のクロックスカラー値とを記憶する。
【００７０】
また、クロック値管理部６０２は、ＣＭ１０１がミラーＣＭ２０３である場合、ミラーＣＭ２０３のクロックスカラー値を記憶する。
【００７１】
また、ＣＭ１０１が担当ＣＭ２０２であり、サーバ１０２から書き込み要求を受け付けた場合、クロック値管理部６０２は、担当ＣＭ２０２のクロックスカラー値をインクリメントする。例えば、クロック値管理部６０２は、サーバ１０２から書き込み要求を受け付けた場合、担当ＣＭ２０２のクロックスカラー値を１増加させる。
【００７２】
また、ＣＭ１０１が担当ＣＭ２０２である場合、クロック値管理部６０２は、担当ＣＭ２０２のクロックスカラー値とミラーＣＭ２０３のクロックスカラー値とからベクトルクロック２１０を作成する。
【００７３】
また、ＣＭ１０１が担当ＣＭ２０２である場合、クロック値管理部６０２は、作成したベクトルクロック２１０と書き込みデータをキャッシュに格納する。例えば、クロック値管理部６０２は、データの記憶先の論理アドレスからキャッシュリスト２２０を特定し、特定したキャッシュリスト２２０にベクトルクロック２１０とデータを格納する。具体的には、クロック値管理部６０２は、ＬＵＮとＬＢＡをハッシュ関数に入力して、ハッシュ関数の出力値に対応するキャッシュリスト２２０にベクトルクロック２１０とデータを格納する。
【００７４】
また、ＣＭ１０１が担当ＣＭ２０２である場合、クロック値管理部６０２は、作成したベクトルクロック２１０と書き込みデータを通信部６０３に転送する。この後、クロック値管理部６０２は、通信部６０３から完了報告を受信する。これにより、ＣＭ１０１が担当ＣＭ２０２である場合、サーバ１０２からの書き込み要求の処理は終了する。
【００７５】
また、ＣＭ１０１がミラーＣＭ２０３であり、サーバ１０２から書き込み要求を受け付けた場合、クロック値管理部６０２は、ミラーＣＭ２０３のクロックスカラー値をインクリメントする。例えば、クロック値管理部６０２は、サーバ１０２から書き込み要求を受け付けた場合、ミラーＣＭ２０３のクロックスカラー値を１増加させる。
【００７６】
また、ＣＭ１０１がミラーＣＭ２０３である場合、クロック値管理部６０２は、通信部６０３にミラーＣＭ２０３のクロックスカラー値と書き込みデータを転送する。この後、クロック値管理部６０２は、通信部６０３からベクトルクロック２１０を受信する。クロック値管理部６０２は、受信したベクトルクロック２１０と書き込みデータをキャッシュに格納する。これにより、ＣＭ１０１がミラーＣＭ２０３である場合、サーバ１０２からの書き込み要求の処理は終了する。
【００７７】
また、クロック値管理部６０２は、他ＣＭ１０１から書き込み要求を受け付けた場合にキャッシュリスト２２０にデータを格納する機能を有する。ここで、他ＣＭ１０１から書き込み要求を受け付けた場合とは、担当ＣＭ２０２がベクトルクロック２１０とデータを転送した場合、および、ミラーＣＭ２０３がミラーＣＭ２０３のクロックスカラー値とデータを転送した場合である。
【００７８】
また、ＣＭ１０１が担当ＣＭ２０２であり、ミラーＣＭ２０３から書き込み要求を受け付けた場合、クロック値管理部６０２は、ミラーＣＭ２０３のクロックスカラー値をインクリメントする。
【００７９】
また、ＣＭ１０１が担当ＣＭ２０２である場合、クロック値管理部６０２は、ミラーＣＭ２０３からの書き込み要求に含まれるミラーＣＭ２０３のクロックスカラー値と、クロック値管理部６０２が記憶したミラーＣＭ２０３のクロックスカラー値とを比較する。クロック値管理部６０２は、ミラーＣＭ２０３からの書き込み要求に含まれるミラーＣＭ２０３のクロックスカラー値が大きい場合、書き込み要求に含まれるミラーＣＭ２０３のクロックスカラー値をミラーＣＭ２０３のクロックスカラー値として記憶する。
【００８０】
この結果、クロック値管理部６０２は、ミラーＣＭ２０３のクロックスカラー値を単調に増加させることができる。これは、例えば、ミラーＣＭ２０３が転送したクロックスカラー値が転送した順番に届かなくても、ミラーＣＭ２０３が記憶するミラーＣＭ２０３のクロックスカラー値と担当ＣＭ２０２が記憶するミラーＣＭ２０３のクロックスカラー値を同一にすることができる。
【００８１】
例えば、担当ＣＭ２０２が記憶するミラーＣＭ２０３のクロックスカラー値が「１」の状態で、ミラーＣＭ２０３が記憶するミラーＣＭ２０３のクロックスカラー値として、「２」、「３」を転送したとする。「２」、「３」の順で受信すると、担当ＣＭ２０２が記憶するミラーＣＭ２０３のクロックスカラー値も「２」、「３」の順で記憶される。一方、「３」を先に受信すると、「３」が「１」より大きいため、クロック値管理部６０２は、担当ＣＭ２０２が記憶するミラーＣＭ２０３のクロックスカラー値として「３」を記憶する。この後、「２」を受信すると、「３」が「２」より大きいため、クロック値管理部６０２は、担当ＣＭ２０２が記憶するミラーＣＭ２０３のクロックスカラー値として「２」を記憶せず、「３」のままにする。
【００８２】
また、ＣＭ１０１が担当ＣＭ２０２である場合、クロック値管理部６０２は、担当ＣＭ２０２のクロックスカラー値をインクリメントする。また、ＣＭ１０１が担当ＣＭ２０２である場合、クロック値管理部６０２は、担当ＣＭ２０２のクロックスカラー値とミラーＣＭ２０３のクロックスカラー値とからベクトルクロック２１０を作成する。
【００８３】
また、ＣＭ１０１が担当ＣＭ２０２である場合、クロック値管理部６０２は、作成したベクトルクロック２１０と書き込みデータをキャッシュに格納する。例えば、クロック値管理部６０２は、データの記憶先の論理アドレスからキャッシュリスト２２０を特定し、特定したキャッシュリスト２２０にベクトルクロック２１０とデータを格納する。
【００８４】
また、ＣＭ１０１が担当ＣＭ２０２である場合、クロック値管理部６０２は、作成したベクトルクロック２１０を通信部６０３に転送する。これにより、ＣＭ１０１が担当ＣＭ２０２である場合、ミラーＣＭ２０３からの書き込み要求の処理は終了する。
【００８５】
また、ＣＭ１０１がミラーＣＭ２０３であり、担当ＣＭ２０２から書き込み要求を受け付けた場合、クロック値管理部６０２は、担当ＣＭ２０２の書き込み要求に含まれるベクトルクロック２１０と書き込みデータをキャッシュに格納する。この後、クロック値管理部６０２は、通信部６０３に完了通知を送信する。これにより、ＣＭ１０１がミラーＣＭ２０３である場合、担当ＣＭ２０２からの書き込み要求の処理は終了する。
【００８６】
通信部６０３は、他ＣＭ１０１との通信を行う機能を有する。ＣＭ１０１が担当ＣＭ２０２である場合、通信部６０３は、クロック値管理部６０２から送信されたベクトルクロック２１０と書き込みデータをミラーＣＭ２０３に転送する。また、通信部６０３は、ミラーＣＭ２０３から完了報告が転送された場合、完了報告をクロック値管理部６０２に送信する。
【００８７】
また、ＣＭ１０１が担当ＣＭ２０２である場合、通信部６０３は、クロック値管理部６０２から送信されたベクトルクロック２１０をミラーＣＭ２０３に転送する。
【００８８】
また、ＣＭ１０１がミラーＣＭ２０３である場合、通信部６０３は、クロック値管理部６０２から送信されたミラーＣＭ２０３のクロックスカラー値と書き込みデータを担当ＣＭ２０２に転送する。また、通信部６０３は、担当ＣＭ２０２からベクトルクロック２１０が転送された場合、ベクトルクロック２１０をクロック値管理部６０２に送信する。
【００８９】
また、ＣＭ１０１がミラーＣＭ２０３である場合、通信部６０３は、担当ＣＭ２０２から送信されたベクトルクロック２１０と書き込みデータをクロック値管理部６０２に転送する。
【００９０】
整合性管理部６０４は、サーバ１０２からの読み込み要求を受け付けた場合にキャッシュリスト２２０のデータを選択する機能を有する。また、整合性管理部６０４は、選択したデータをサーバ１０２に送信する機能を有する。
【００９１】
整合性管理部６０４は、読み込むデータがキャッシュにあるか判断する。例えば、整合性管理部６０４は、データの記憶先の論理アドレスからキャッシュリスト２２０を特定し、特定したキャッシュリスト２２０にデータがあるか判断する。具体的には、整合性管理部６０４は、ＬＵＮとＬＢＡをハッシュ関数に入力して、ハッシュ関数の出力値に対応するキャッシュリスト２２０にデータがあるか判断する。
【００９２】
整合性管理部６０４は、読み込むデータがキャッシュにない場合、ストレージ装置２０１からデータを読み込む。整合性管理部６０４は、読み込むデータがキャッシュにある場合、ベクトルクロック値が最大のデータをキャッシュリスト２２０から読み込む。
【００９３】
整合性管理部６０４は、例えば、ベクトルクロック値の中で、第１成分が最も大きいベクトルクロック値のデータをキャッシュリスト２２０から読み込む。もし、第１成分が最も大きいデータが複数ある場合、整合性管理部６０４は、第２成分が最も大きいベクトルクロック値のデータをキャッシュリスト２２０から読み込む。
【００９４】
具体的には、整合性管理部６０４は、後述する図１２のフローチャートに従ってベクトルクロック値の大小を比較して、最大のベクトルクロック値を選択する。
【００９５】
ここで、ベクトルクロック２１０のミラーＣＭクロック値および担当ＣＭクロック値は、単調増加される値である。このため、整合性管理部６０４は、ベクトルクロック２１０の比較により、書き込み要求のデータを受信した順序を判断することができる。整合性管理部６０４は、ベクトルクロック値が最大のデータをキャッシュリスト２２０から読み込むことより、最も後に書き込まれたデータを読み込むことができる。
【００９６】
（担当ＣＭ２０２への書き込み動作の一例）
図７は、実施の形態にかかる担当ＣＭ２０２への書き込み動作の一例を示すシーケンス図である。図７において、まず、担当ＣＭ２０２は、書き込み要求を受け付ける（ステップＳ７０１）。例えば、担当ＣＭ２０２は、サーバ１０２からデータの書き込みを受け付ける。この際、サーバ１０２は、書き込むデータとデータの記憶位置を指定する情報を担当ＣＭ２０２に送信する。ここで、データの記憶位置を指定する情報は、例えば、ＬＵＮとＬＢＡである。
【００９７】
担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値をインクリメントする（ステップＳ７０２）。例えば、担当ＣＭ２０２は、担当ＣＭ２０２のメモリ３０２に記憶する担当ＣＭのクロックスカラー値を１増加する。
【００９８】
担当ＣＭ２０２は、保存したミラーＣＭ２０３のクロックスカラー値を取得する（ステップＳ７０３）。例えば、担当ＣＭ２０２は、担当ＣＭ２０２のメモリ３０２に記憶するミラーＣＭ２０３のクロックスカラー値を取得する。
【００９９】
担当ＣＭ２０２は、ベクトルクロック２１０と書き込みデータをキャッシュに格納する（ステップＳ７０４）。例えば、担当ＣＭ２０２は、ステップＳ７０２でインクリメントした担当ＣＭ２０２のクロックスカラー値とステップＳ７０３で取得したミラーＣＭ２０３のクロックスカラー値からベクトルクロック２１０を作成する。
【０１００】
担当ＣＭ２０２は、ベクトルクロック２１０と書き込みデータをミラーＣＭ２０３に転送する（ステップＳ７０５）。これを受けて、ミラーＣＭ２０３は、担当ＣＭ２０２からベクトルクロック２１０と書き込みデータを受信する（ステップＳ７０６）。
【０１０１】
ミラーＣＭ２０３は、受信したベクトルクロック２１０と書き込みデータをキャッシュに格納する（ステップＳ７０７）。ミラーＣＭ２０３は、担当ＣＭ２０２に完了通知を行う（ステップＳ７０８）。これを受けて、担当ＣＭ２０２は、ミラーＣＭ２０３から完了通知を受信する（ステップＳ７０９）。
【０１０２】
これにより、本シーケンス図における一連のステップを終了する。本シーケンスを実行することで、担当ＣＭ２０２は、ベクトルクロック２１０を作成し、ベクトルクロック２１０と書き込みデータを担当ＣＭ２０２のキャッシュに格納する。また、担当ＣＭ２０２が、ベクトルクロック２１０と書き込みデータをミラーＣＭ２０３に転送することで、ベクトルクロック２１０と書き込みデータがミラーＣＭ２０３のキャッシュに格納される。
【０１０３】
（ミラーＣＭ２０３への書き込み動作の一例）
図８は、実施の形態にかかるミラーＣＭ２０３への書き込み動作の一例を示すシーケンス図である。図８において、まず、ミラーＣＭ２０３は、書き込み要求を受け付ける（ステップＳ８０１）。例えば、ミラーＣＭ２０３は、サーバ１０２からデータの書き込みを受け付ける。この際、サーバ１０２は、書き込みデータとデータの記憶位置を指定する情報をミラーＣＭ２０３に送信する。
【０１０４】
ミラーＣＭ２０３は、ミラーＣＭ２０３のクロックスカラー値をインクリメントする（ステップＳ８０２）。例えば、ミラーＣＭ２０３は、ミラーＣＭ２０３のメモリ３０２に記憶するミラーＣＭ２０３のクロックスカラー値を１増加する。
【０１０５】
ミラーＣＭ２０３は、ミラーＣＭ２０３のクロックスカラー値と書き込みデータを担当ＣＭ２０２に転送する（ステップＳ８０３）。これを受けて、担当ＣＭ２０２は、ミラーＣＭ２０３からミラーＣＭ２０３のクロックスカラー値と書き込みデータを受信する（ステップＳ８０４）。
【０１０６】
担当ＣＭ２０２は、受信したミラーＣＭ２０３のクロックスカラー値が保存したミラーＣＭ２０３のクロックスカラー値より大きいか否かを判断する（ステップＳ８０５）。ここで、保存したミラーＣＭのクロックスカラー値とは、担当ＣＭ２０２のメモリ３０２に記憶するミラーＣＭ２０３のクロックスカラー値である。
【０１０７】
受信したミラーＣＭ２０３のクロックスカラー値が保存したミラーＣＭ２０３のクロックスカラー値より大きい場合（ステップＳ８０５：Ｙｅｓ）、担当ＣＭ２０２は、受信したミラーＣＭ２０３のクロックスカラー値を保存する（ステップＳ８０６）。例えば、担当ＣＭ２０２は、保存したミラーＣＭ２０３のクロックスカラー値を受信したミラーＣＭ２０３のクロックスカラー値で上書きして保存する。受信したミラーＣＭ２０３のクロックスカラー値が保存したミラーＣＭ２０３のクロックスカラー値より大きくない場合（ステップＳ８０５：Ｎｏ）、担当ＣＭ２０２の処理は、ステップＳ８０７に移行する。
【０１０８】
担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値をインクリメントする（ステップＳ８０７）。例えば、担当ＣＭ２０２は、担当ＣＭ２０２のメモリ３０２に記憶する担当ＣＭ２０２のクロックスカラー値を１増加する。
【０１０９】
担当ＣＭ２０２は、ベクトルクロック２１０と書き込みデータをキャッシュに格納する（ステップＳ８０８）。例えば、担当ＣＭ２０２は、ステップＳ８０７でインクリメントした担当ＣＭ２０２のクロックスカラー値と保存したミラーＣＭ２０３のクロックスカラー値からベクトルクロック２１０を作成する。
【０１１０】
担当ＣＭ２０２は、ベクトルクロック２１０をミラーＣＭ２０３に転送する（ステップＳ８０９）。これを受けて、ミラーＣＭ２０３は、担当ＣＭ２０２からベクトルクロック２１０を受信する（ステップＳ８１０）。
【０１１１】
ミラーＣＭ２０３は、受信したベクトルクロック２１０と書き込みデータをキャッシュに格納する（ステップＳ８１１）。ここで、ミラーＣＭ２０３がキャッシュに記憶するデータは、ステップＳ８０１で書き込み要求を受け付けたデータである。
【０１１２】
これにより、本シーケンス図における一連のステップを終了する。本シーケンスを実行することで、ミラーＣＭ２０３がミラーＣＭ２０３のクロックスカラー値を転送し、担当ＣＭ２０２がベクトルクロック２１０を作成し、ベクトルクロック２１０と書き込みデータが、担当ＣＭ２０２のキャッシュに格納される。また、担当ＣＭ２０２が、ベクトルクロック２１０をミラーＣＭ２０３に転送することで、ベクトルクロック２１０と書き込みデータがミラーＣＭ２０３のキャッシュに格納される。
【０１１３】
（ＣＭ１０１の書き込み動作処理手順の一例）
図９は、実施の形態にかかるＣＭ１０１の書き込み動作処理手順の一例を示すフローチャートである。図９において、まず、ＣＭ１０１は、書き込み要求を受け付けたか否かを判断する（ステップＳ９０１）。例えば、ＣＭ１０１は、サーバ１０２からデータの書き込みを受け付けたか否かを判断する。
【０１１４】
書き込み要求を受け付けない場合（ステップＳ９０１：Ｎｏ）、ＣＭ１０１の処理は、ステップＳ９０１に戻る。書き込み要求を受け付けた場合（ステップＳ９０１：Ｙｅｓ）、ＣＭ１０１は、自ＣＭが担当ＣＭ２０２であるか否かを判断する（ステップＳ９０２）。
【０１１５】
自ＣＭが担当ＣＭ２０２である場合（ステップＳ９０２：Ｙｅｓ）、担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値をインクリメントする（ステップＳ９０３）。例えば、担当ＣＭ２０２は、担当ＣＭ２０２のメモリ３０２に記憶する担当ＣＭ２０２のクロックスカラー値を１増加する。
【０１１６】
担当ＣＭ２０２は、保存したミラーＣＭ２０３のクロックスカラー値を取得する（ステップＳ９０４）。例えば、担当ＣＭ２０２は、担当ＣＭ２０２のメモリ３０２に記憶するミラーＣＭ２０３のクロックスカラー値を取得する。
【０１１７】
担当ＣＭ２０２は、ベクトルクロック２１０と書き込みデータをキャッシュに格納する（ステップＳ９０５）。例えば、担当ＣＭ２０２は、ステップＳ９０３でインクリメントした担当ＣＭ２０２のクロックスカラー値とステップＳ９０４で取得したミラーＣＭ２０３のクロックスカラー値からベクトルクロック２１０を作成する。
【０１１８】
担当ＣＭ２０２は、ベクトルクロック２１０と書き込みデータをミラーＣＭ２０３に転送する（ステップＳ９０６）。担当ＣＭ２０２は、ミラーＣＭ２０３から完了通知を受信したか否かを判断する（ステップＳ９０７）。完了通知を受信しない場合（ステップＳ９０７：Ｎｏ）、担当ＣＭ２０２の処理は、ステップＳ９０７に戻る。完了通知を受信した場合（ステップＳ９０７：Ｙｅｓ）、担当ＣＭ２０２の処理は、終了する。
【０１１９】
自ＣＭが担当ＣＭ２０２でない場合（ステップＳ９０２：Ｎｏ）、ミラーＣＭ２０３は、ミラーＣＭ２０３のクロックスカラー値をインクリメントする（ステップＳ９０８）。例えば、ミラーＣＭ２０３は、ミラーＣＭ２０３のメモリ３０２に記憶するミラーＣＭ２０３のクロックスカラー値を１増加する。
【０１２０】
ミラーＣＭ２０３は、ミラーＣＭ２０３のクロックスカラー値と書き込みデータを担当ＣＭ２０２に転送する（ステップＳ９０９）。ミラーＣＭ２０３は、担当ＣＭ２０２からベクトルクロック２１０を受信したか否かを判断する（ステップＳ９１０）。ベクトルクロック２１０を受信しない場合（ステップＳ９１０：Ｎｏ）、ミラーＣＭ２０３の処理は、ステップＳ９１０に戻る。
【０１２１】
ベクトルクロック２１０を受信した場合（ステップＳ９１０：Ｙｅｓ）、ミラーＣＭ２０３は、受信したベクトルクロック２１０と書き込みデータをキャッシュに格納する（ステップＳ９１１）。これで、ミラーＣＭ２０３の処理は、終了する。
【０１２２】
これにより、本フローチャートにおける一連の処理は終了する。本フローチャートを実行することで、ＣＭ１０１は、サーバ１０２から書き込み要求されたデータをベクトルクロック２１０と対応付けてキャッシュに格納する。
【０１２３】
（ＣＭ１０１の受信データ処理手順の一例）
図１０は、実施の形態にかかるＣＭ１０１の受信データ処理手順の一例を示すフローチャートである。図１０において、まず、ＣＭ１０１は、他のＣＭ１０１からデータを受け付けたか否かを判断する（ステップＳ１００１）。例えば、ＣＭ１０１は、他のＣＭ１０１から書き込みデータとベクトルクロック２１０を受け付けたか否かを判断する。また、例えば、ＣＭ１０１は、他のＣＭ１０１から書き込みデータとミラーＣＭ２０３のクロックスカラー値を受け付けたか否かを判断する。
【０１２４】
データを受け付けない場合（ステップＳ１００１：Ｎｏ）、ＣＭ１０１の処理は、ステップＳ１００１に戻る。データを受け付けた場合（ステップＳ１００１：Ｙｅｓ）、ＣＭ１０１は、自ＣＭが担当ＣＭ２０２であるか否かを判断する（ステップＳ１００２）。
【０１２５】
自ＣＭが担当ＣＭ２０２である場合（ステップＳ１００２：Ｙｅｓ）、担当ＣＭ２０２は、受信したミラーＣＭ２０３のクロックスカラー値が保存したミラーＣＭ２０３のクロックスカラー値より大きいか否かを判断する（ステップＳ１００３）。ここで、保存したミラーＣＭ２０３のクロックスカラー値とは、担当ＣＭ２０２のメモリ３０２に記憶したミラーＣＭ２０３のクロックスカラー値である。
【０１２６】
受信したミラーＣＭ２０３のクロックスカラー値が保存したミラーＣＭ２０３のクロックスカラー値より大きい場合（ステップＳ１００３：Ｙｅｓ）、担当ＣＭ２０２は、受信したミラーＣＭ２０３のクロックスカラー値を保存する（ステップＳ１００４）。例えば、担当ＣＭ２０２は、保存したミラーＣＭ２０３のクロックスカラー値を受信したミラーＣＭ２０３のクロックスカラー値で上書きして保存する。受信したミラーＣＭ２０３のクロックスカラー値が保存したミラーＣＭ２０３のクロックスカラー値より大きくない場合（ステップＳ１００３：Ｎｏ）、担当ＣＭ２０２の処理は、ステップＳ１００５に移行する。
【０１２７】
担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値をインクリメントする（ステップＳ１００５）。例えば、担当ＣＭ２０２は、担当ＣＭ２０２のメモリ３０２に記憶する担当ＣＭ２０２のクロックスカラー値を１増加する。
【０１２８】
担当ＣＭ２０２は、ベクトルクロック２１０と書き込みデータをキャッシュに格納する（ステップＳ１００６）。例えば、担当ＣＭ２０２は、ステップＳ１００５でインクリメントした担当ＣＭ２０２のクロックスカラー値と保存したミラーＣＭ２０３のクロックスカラー値からベクトルクロック２１０を作成する。
【０１２９】
担当ＣＭ２０２は、ベクトルクロック２１０をミラーＣＭ２０３に転送する（ステップＳ１００７）。これで、担当ＣＭ２０２の処理は、終了する。
【０１３０】
自ＣＭが担当ＣＭ２０２でない場合（ステップＳ１００２：Ｎｏ）、ミラーＣＭ２０３は、受信したベクトルクロック２１０と書き込みデータをキャッシュに格納する（ステップＳ１００８）。ミラーＣＭ２０３は、担当ＣＭ２０２に完了通知を送信する（ステップＳ１００９）。これで、ミラーＣＭ２０３の処理は、終了する。
【０１３１】
これにより、本フローチャートにおける一連の処理は終了する。本フローチャートを実行することで、ＣＭ１０１は、他のＣＭ１０１から受信したデータをベクトルクロック２１０と対応付けてキャッシュに記憶する。
【０１３２】
（ＣＭ１０１の読み込み動作処理手順の一例）
図１１は、実施の形態にかかるＣＭ１０１の読み込み動作処理手順の一例を示すフローチャートである。図１１において、まず、ＣＭ１０１は、読み込み要求を受け付けたか否かを判断する（ステップＳ１１０１）。例えば、ＣＭ１０１は、サーバ１０２からデータの読み込みを受け付けたか否かを判断する。
【０１３３】
読み込み要求を受け付けない場合（ステップＳ１１０１：Ｎｏ）、ＣＭ１０１の処理は、ステップＳ１１０１に戻る。読み込み要求を受け付けた場合（ステップＳ１１０１：Ｙｅｓ）、ＣＭ１０１は、データがキャッシュにあるか否かを判断する（ステップＳ１１０２）。
【０１３４】
データがキャッシュにある場合（ステップＳ１１０２：Ｙｅｓ）、ＣＭ１０１は、ＬＵＮとＬＢＡからハッシュ値を算出する（ステップＳ１１０３）。ここで、ＬＵＮは、読み込むデータが格納された装置を示す情報であり、ＬＢＡは、ＬＵＮで識別される装置の中で読み込むデータが格納された位置を示す情報である。
【０１３５】
ＣＭ１０１は、算出したハッシュ値からキャッシュリスト２２０を特定する（ステップＳ１１０４）。ＣＭ１０１は、ベクトルクロック値比較処理を用い、最大のベクトルクロック値を取得する（ステップＳ１１０５）。ここで、ベクトルクロック値比較処理は、複数のベクトルクロック値の中から最大のベクトルクロック値を求める処理である。ベクトルクロック値比較処理は、図１２を用いて後述される。
【０１３６】
ＣＭ１０１は、最大のベクトルクロック値のデータを読み込む（ステップＳ１１０６）。例えば、ＣＭ１０１は、キャッシュリスト２２０でベクトルクロック値が最大のレコードのキャッシュデータを読み込む。
【０１３７】
データがキャッシュにない場合（ステップＳ１１０２：Ｎｏ）、ＣＭ１０１は、ストレージ装置２０１からデータを読み込む（ステップＳ１１０７）。
【０１３８】
これにより、本フローチャートにおける一連の処理は終了する。本フローチャートを実行することで、ＣＭ１０１は、サーバ１０２から読み込み要求されたデータをキャッシュまたはストレージ装置２０１から読み込む。
【０１３９】
（ＣＭ１０１のストレージ装置２０１書き込み動作処理の一例）
ＣＭ１０１のストレージ装置２０１書き込み動作処理は、ＣＭ１０１の読み込み動作処理と同様な手順で行われる。このため、ＣＭ１０１のストレージ装置２０１書き込み動作処理の図示は省略する。具体的なＣＭ１０１の読み込み動作処理との違いは、データがキャッシュにあるため、図１１のステップＳ１１０２とステップＳ１１０７がないことである。
【０１４０】
（ＣＭ１０１のベクトルクロック値比較処理手順の一例）
図１２は、実施の形態にかかるＣＭ１０１のベクトルクロック値比較処理手順の一例を示すフローチャートである。本フローチャートでは、ベクトルクロック値ａ＝（ｘ、ｙ）とベクトルクロック値ｂ＝（ｘ’、ｙ’）とを比較して、ベクトルクロック値ａとベクトルクロック値ｂの大小関係を出力する。
【０１４１】
まず、ＣＭ１０１は、ｘ≦ｘ’かつｙ＜ｙ’であるか否かを判断する（ステップＳ１２０１）。ｘ≦ｘ’かつｙ＜ｙ’である場合（ステップＳ１２０１：Ｙｅｓ）、ＣＭ１０１は、ベクトルクロック値ａ＜ベクトルクロック値ｂと判断する（ステップＳ１２０６）。
【０１４２】
ｘ≦ｘ’かつｙ＜ｙ’でない場合（ステップＳ１２０１：Ｎｏ）、ＣＭ１０１は、ｘ＝ｘ’かつｙ＝ｙ’であるか否かを判断する（ステップＳ１２０２）。ｘ＝ｘ’かつｙ＝ｙ’である場合（ステップＳ１２０２：Ｙｅｓ）、ＣＭ１０１は、ベクトルクロック値ａ＝ベクトルクロック値ｂと判断する（ステップＳ１２０４）。
【０１４３】
ｘ＝ｘ’かつｙ＝ｙ’でない場合（ステップＳ１２０２：Ｎｏ）、ＣＭ１０１は、ｘ＜ｘ’であるか否かを判断する（ステップＳ１２０３）。ｘ＜ｘ’である場合（ステップＳ１２０３：Ｙｅｓ）、ＣＭ１０１は、ベクトルクロック値ａ＜ベクトルクロック値ｂと判断する（ステップＳ１２０６）。ｘ＜ｘ’でない場合（ステップＳ１２０３：Ｎｏ）、ＣＭ１０１は、ベクトルクロック値ｂ＜ベクトルクロック値ａと判断する（ステップＳ１２０５）。
【０１４４】
これにより、本フローチャートにおける一連の処理は終了する。本フローチャートを実行することで、ＣＭ１０１は、ベクトルクロック値ａとベクトルクロック値ｂの大小関係を出力する。
【０１４５】
（担当ＣＭ２０２からの書き込み処理時のベクトルクロック値の更新の一例）
図１３は、実施の形態にかかる担当ＣＭ２０２からの書き込み処理時のベクトルクロック値の更新の一例を示すシーケンス図である。図１３は、図７および図８のシーケンス図の一例である。
【０１４６】
図１３において、ベクトルクロック２１０は、ミラーＣＭクロック値および担当ＣＭクロック値がともに「０」である。また、担当ＣＭ２０２が記憶する担当ＣＭ２０２のクロックスカラー値およびミラーＣＭ２０３のクロックスカラー１値もともに「０」である。また、ミラーＣＭ２０３が記憶するミラーＣＭ２０３のクロックスカラー値も「０」である。
【０１４７】
上記状態で、担当ＣＭ２０２は、ＬＢＡ１００−３００へのデータ書き込み要求を受け付ける（ステップＳ１３０１）。担当ＣＭ２０２は、サーバ１０２から書き込みデータを受信したため、担当ＣＭ２０２のクロックスカラー値を「０」から「１」にする。
【０１４８】
担当ＣＭ２０２は、ミラーＣＭ２０３のクロックスカラー値「０」を取得する。担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値「１」とミラーＣＭ２０３のクロックスカラー値「０」からベクトルクロック２１０「（０、１）」を作成する。
【０１４９】
担当ＣＭ２０２は、ＬＢＡ１００−３００と対応付けて、ベクトルクロック２１０「（０、１）」と書き込みデータをキャッシュに格納する（ステップＳ１３０２）。担当ＣＭ２０２は、ベクトルクロック２１０「（０、１）」とＬＢＡ１００−３００に書き込むデータをミラーＣＭ２０３に転送する（ステップＳ１３０３）。これを受けて、ミラーＣＭ２０３は、担当ＣＭ２０２から受信したベクトルクロック２１０「（０、１）」と書き込みデータをキャッシュに格納する（ステップＳ１３０４）。ミラーＣＭ２０３は、担当ＣＭ２０２に完了通知を行う（ステップＳ１３０５）。
【０１５０】
次に、ミラーＣＭ２０３は、ＬＢＡ２００−４００へのデータ書き込み要求を受け付ける（ステップＳ１３０６）。ミラーＣＭ２０３は、サーバ１０２から書き込みデータを受信したため、ミラーＣＭ２０３のクロックスカラー値を「０」から「１」にする。
【０１５１】
ミラーＣＭ２０３は、ミラーＣＭ２０３のクロックスカラー値「１」と書き込みデータを担当ＣＭ２０２に転送する（ステップＳ１３０７）。担当ＣＭ２０２は、受信したミラーＣＭ２０３のクロックスカラー値「１」が保存したミラーＣＭ２０３のクロックスカラー値「０」より大きいため、受信したミラーＣＭ２０３のクロックスカラー値「１」を保存する。
【０１５２】
また、担当ＣＭ２０２は、ミラーＣＭ２０３から書き込みデータとミラーＣＭ２０３のクロックスカラー値を受信したため、担当ＣＭ２０２のクロックスカラー値を「１」から「２」にする。担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値「２」とミラーＣＭ２０３のクロックスカラー値「１」からベクトルクロック２１０「（１、２）」を作成する。
【０１５３】
担当ＣＭ２０２は、ＬＢＡ２００−４００と対応付けて、ベクトルクロック２１０「（１、２）」と書き込みデータをキャッシュに格納する（ステップＳ１３０８）。担当ＣＭ２０２は、ベクトルクロック２１０「（１、２）」をミラーＣＭ２０３に転送する（ステップＳ１３０９）。これを受けて、ミラーＣＭ２０３は、担当ＣＭ２０２から受信したベクトルクロック２１０「（１、２）」とステップＳ１３０６で受信したデータをキャッシュに格納する（ステップＳ１３１０）。
【０１５４】
（図１３のシーケンス実行後のキャッシュリスト１４０１の一例）
図１４は、図１３のシーケンス実行後のキャッシュリスト１４０１の一例を示す説明図である。図１３のシーケンスを実行することにより、担当ＣＭ２０２およびミラーＣＭ２０３のキャッシュには、キャッシュリスト１４０１が作成される。
【０１５５】
担当ＣＭ２０２に対して、ＬＢＡ２００−３００のデータの読み込み要求があったとする。この場合、担当ＣＭ２０２は、複数のベクトルクロック値「（０、１）」と「（１、２）」を比較して、ベクトルクロック値「（１、２）」が大きいと判断する。具体的には、２つのベクトルクロック値のうち、第１の成分は「（１、２）」の方が大きいため、担当ＣＭ２０２は、「（１、２）」が大きいと判断する。このため、担当ＣＭ２０２は、ベクトルクロック値「（１、２）」のＬＢＡ２００−３００のデータをキャッシュから読み込む。
【０１５６】
このように、担当ＣＭ２０２は、図１３のステップＳ１３０１の書き込み要求より後のステップＳ１３０６の書き込み要求のデータを読み出すことができる。ここで、ミラーＣＭ２０３のキャッシュも担当ＣＭ２０２と同じであるため、ミラーＣＭ２０３に対して、ＬＢＡ２００−３００のデータの読み込み要求があったとしても同一の結果となる。
【０１５７】
（ミラーＣＭ２０３からの書き込み処理時のベクトルクロック値の更新の一例）
図１５は、実施の形態にかかるミラーＣＭ２０３からの書き込み処理時のベクトルクロック値の更新の一例を示すシーケンス図である。図１５は、図７および図８のシーケンス図の一例である。
【０１５８】
図１５において、ベクトルクロック２１０は、ミラーＣＭクロック値および担当ＣＭクロック値がともに「０」である。また、担当ＣＭ２０２が記憶する担当ＣＭ２０２のクロックスカラー値およびミラーＣＭ２０３のクロックスカラー値もともに「０」である。また、ミラーＣＭ２０３が記憶するミラーＣＭ２０３のクロックスカラー値も「０」である。
【０１５９】
上記状態で、ミラーＣＭ２０３は、ＬＢＡ２００−４００へのデータ書き込み要求を受け付ける（ステップＳ１５０１）。ミラーＣＭ２０３は、サーバ１０２から書き込みデータを受信したため、ミラーＣＭ２０３のクロックスカラー値を「０」から「１」にする。
【０１６０】
ミラーＣＭ２０３は、ミラーＣＭ２０３のクロックスカラー値「１」とＬＢＡ２００−４００への書き込みデータを担当ＣＭ２０２に転送する（ステップＳ１５０２）。担当ＣＭ２０２は、受信したミラーＣＭ２０３のクロックスカラー値「１」が保存したミラーＣＭ２０３のクロックスカラー値「０」より大きいため、受信したミラーＣＭ２０３のクロックスカラー値「１」を保存する。
【０１６１】
また、担当ＣＭ２０２は、ミラーＣＭ２０３から書き込みデータとミラーＣＭ２０３のクロックスカラー値を受信したため、担当ＣＭ２０２のクロックスカラー値を「０」から「１」にする。担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値「１」とミラーＣＭ２０３のクロックスカラー値「１」からベクトルクロック２１０「（１、１）」を作成する。
【０１６２】
担当ＣＭ２０２は、ＬＢＡ２００−４００と対応付けて、ベクトルクロック２１０「（１、１）」と書き込みデータをキャッシュに格納する（ステップＳ１５０３）。担当ＣＭ２０２は、ベクトルクロック２１０「（１、１）」をミラーＣＭ２０３に転送する（ステップＳ１５０４）。これを受けて、ミラーＣＭ２０３は、担当ＣＭ２０２から受信したベクトルクロック２１０「（１、１）」とステップＳ１５０１で受信したデータをキャッシュに格納する（ステップＳ１５０５）。
【０１６３】
次に、担当ＣＭ２０２は、ＬＢＡ１００−３００へのデータ書き込み要求を受け付ける（ステップＳ１５０６）。担当ＣＭ２０２は、サーバ１０２から書き込みデータを受信したため、担当ＣＭ２０２のクロックスカラー値を「１」から「２」にする。
【０１６４】
担当ＣＭ２０２は、ミラーＣＭ２０３のクロックスカラー値「１」を取得する。担当ＣＭ２０２は、担当ＣＭ２０２のクロックスカラー値「２」とミラーＣＭ２０３のクロックスカラー値「１」からベクトルクロック２１０「（１、２）」を作成する。
【０１６５】
担当ＣＭ２０２は、ＬＢＡ１００−３００と対応付けて、ベクトルクロック２１０「（１、２）」と書き込みデータをキャッシュに格納する（ステップＳ１５０７）。担当ＣＭ２０２は、ベクトルクロック２１０「（１、２）」とＬＢＡ１００−３００に書き込むデータをミラーＣＭ２０３に転送する（ステップＳ１５０８）。これを受けて、ミラーＣＭ２０３は、担当ＣＭ２０２から受信したベクトルクロック２１０「（１、２）」と書き込みデータをキャッシュに格納する（ステップＳ１５０９）。ミラーＣＭ２０３は、担当ＣＭ２０２に完了通知を行う（ステップＳ１５１０）。
【０１６６】
（図１５のシーケンス実行後のキャッシュリスト１６０１の一例）
図１６は、図１５のシーケンス実行後のキャッシュリスト１６０１の一例を示す説明図である。図１５のシーケンスを実行することにより、担当ＣＭ２０２およびミラーＣＭ２０３のキャッシュには、キャッシュリスト１６０１が作成される。
【０１６７】
担当ＣＭ２０２に対して、ＬＢＡ２００−３００のデータの読み込み要求があったとする。この場合、担当ＣＭ２０２は、複数のベクトルクロック値「（１、２）」と「（１、１）」を比較して、ベクトルクロック値「（１、２）」が大きいと判断する。具体的には、２つのベクトルクロック値のうち、第１の成分は同じであり、第２の成分は「（１、２）」の方が大きいため、担当ＣＭ２０２は、「（１、２）」が大きいと判断する。このため、担当ＣＭ２０２は、ベクトルクロック値「（１、２）」のＬＢＡ２００−３００のデータをキャッシュから読み込む。
【０１６８】
このように、担当ＣＭ２０２は、図１５のステップＳ１５０１の書き込み要求より後のステップＳ１５０６の書き込み要求のデータを読み出すことができる。ここで、ミラーＣＭ２０３のキャッシュも担当ＣＭ２０２と同じであるため、ミラーＣＭ２０３に対して、ＬＢＡ２００−３００のデータの読み込み要求があったとしても同一の結果となる。
【０１６９】
以上説明したように、ＣＭ１０１は、データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値とデータとをキャッシュに記憶する。ＣＭ１０１は、記憶先の論理アドレスのデータを読み込む際に、記憶先の論理アドレスに複数のクロック値が対応付けられているとき、複数のクロック値に基づいて、読み込むデータを選択する。
【０１７０】
これにより、ＣＭ１０１は、他のＣＭ１０１と通信して、書き込み時に排他制御を行わなくてもよくなるため、ＣＭ１０１間の通信が削減される。このため、ＣＭ１０１を用いた入出力性能が向上する。さらに、排他制御を行わなくてもよくなるため、ＣＭ１０１間で書き込み性能の差がなくなる。このため、サーバ１０２は、複数のＣＭ１０１から、書き込み性能の高いＣＭ１０１を選択する処理を行わなくてもよい。
【０１７１】
また、クロック値は、第１クロック値と第２クロック値を有することができる。ここで、第１クロック値は、ミラーＣＭ２０３がサーバ１０２からデータを受信したときに増加される値であることができる。また、第２クロック値は、ミラーＣＭ２０３からデータとミラーＣＭ２０３の第１クロック値を受信したときに増加される値であることができる。さらに、ＣＭ１０１は、複数のクロック値の中で、第１クロック値が最も大きいデータを選択し、第１クロック値が最も大きいデータが複数ある場合、第２クロック値が最も大きいデータを選択することができる。
【０１７２】
これにより、ＣＭ１０１は、クロック値を比較することで、書き込みの順序が最も後のデータを選択することができる。また、ＣＭ１０１は、選択された最も後のデータを読み込むことで、データが重複して記憶されている場合でも、正しいデータを読み込むことができる。
【０１７３】
また、ＣＭ１０１は、サーバ１０２から受信したデータを記憶する際、クロック値と受信したデータとを他のＣＭ１０１に転送することもできる。また、ＣＭ１０１は、他のＣＭ１０１からクロック値とデータとを受信したことに応じて、記憶先の論理アドレスに対応付けて、他のＣＭ１０１から受信したクロック値とデータとをキャッシュに記憶することもできる。
【０１７４】
これにより、ＣＭ１０１は、他のＣＭ１０１に同一のデータを記憶させることができ、冗長性を増加させることができる。また、ＣＭ１０１に書き込んだデータを他のＣＭ１０１から読み込むことができるため負荷分散も可能になる。
【０１７５】
また、ミラーＣＭ２０３は、サーバ１０２から受信したデータを記憶する際、サーバ１０２からデータを受信したときに増加されるミラーＣＭ２０３のクロックスカラー値と受信したデータとを担当ＣＭ２０２に送信することができる。また、担当ＣＭ２０２は、ミラーＣＭ２０３からミラーＣＭ２０３のクロックスカラー値を受信したことに応じて、当該クロックスカラー値の受信以前に受信したクロックスカラー値と受信したクロックスカラー値に基づくクロック値を生成することができる。
【０１７６】
また、担当ＣＭ２０２は、記憶先の論理アドレスに対応付けて、生成したクロック値と受信したデータとをキャッシュに記憶し、クロック値をミラーＣＭ２０３に転送することができる。また、ミラーＣＭ２０３は、担当ＣＭ２０２からクロック値を受信したことに応じて、記憶先の論理アドレスに対応付けて、担当ＣＭ２０２から受信したクロック値とサーバ１０２から受信したデータとをキャッシュに記憶することができる。
【０１７７】
これにより、担当ＣＭ２０２が、ミラーＣＭ２０３が送信したクロックスカラー値の順序が逆転しても、書き込み要求の受付順を示すクロック値を生成できる。また、担当ＣＭ２０２が、ミラーＣＭ２０３にクロック値を転送することで、担当ＣＭ２０２とミラーＣＭ２０３が同一のクロック値を記憶することができる。
【０１７８】
なお、本実施の形態で説明した情報記憶装置は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報記憶装置制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本情報記憶装置制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１７９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１８０】
（付記１）データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値と前記データとを記憶装置に記憶し、
前記記憶先の論理アドレスのデータを読み込む際に、前記記憶先の論理アドレスに複数のクロック値が対応付けられているとき、前記複数のクロック値に基づいて、読み込むデータを選択する、
制御部を有することを特徴とする情報記憶装置。
【０１８１】
（付記２）前記クロック値は、
他の情報記憶装置が情報処理装置からデータを受信したときに増加される第１クロック値と、前記情報処理装置からデータを受信したとき、または、前記他の情報記憶装置からデータと前記第１クロック値とを受信したときに増加される第２クロック値とを有し、
前記制御部は、
前記記憶先の論理アドレスのデータを読み込む際に、前記複数のクロック値の中で、前記第１クロック値が最も大きいクロック値と対応付けられたデータを選択し、前記第１クロック値が最も大きいクロック値が複数ある場合、前記第１クロック値が最も大きいクロック値の中で、前記第２クロック値が最も大きいクロック値と対応付けられたデータを選択することを特徴とする付記１に記載の情報記憶装置。
【０１８２】
（付記３）前記制御部は、
前記情報処理装置から受信したデータを記憶する際、前記クロック値と前記受信したデータとを前記他の情報記憶装置に転送し、
前記他の情報記憶装置からクロック値とデータとを受信したことに応じて、記憶先の論理アドレスに対応付けて、前記他の情報記憶装置から受信したクロック値と前記他の情報記憶装置から受信したデータとを前記記憶装置に記憶することを特徴とする付記２に記載の情報記憶装置。
【０１８３】
（付記４）前記制御部は、
前記情報処理装置から受信したデータを記憶する際、前記情報処理装置からデータを受信したときに増加される第３クロック値と前記受信したデータとを前記他の情報記憶装置に転送し、
前記他の情報記憶装置から前記第１クロック値とデータを受信したことに応じて、当該第１クロック値の受信以前に受信した第１クロック値と前記他の情報記憶装置から受信した前記第１クロック値に基づくクロック値を生成し、前記他の情報記憶装置から受信したデータの記憶先の論理アドレスに対応付けて、前記生成したクロック値と前記他の情報記憶装置から受信したデータとを前記記憶装置に記憶し、前記生成したクロック値を前記他の情報記憶装置に転送し、
前記他の情報記憶装置からクロック値を受信したことに応じて、前記情報処理装置から受信したデータの記憶先の論理アドレスに対応付けて、前記他の情報記憶装置から受信したクロック値と前記情報処理装置から受信したデータとを前記記憶装置に記憶することを特徴とする付記２に記載の情報記憶装置。
【０１８４】
（付記５）データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値と前記データとを記憶装置に記憶し、前記記憶先の論理アドレスのデータを読み込む際に、前記記憶先の論理アドレスに複数のクロック値が対応付けられているとき、前記複数のクロック値に基づいて、読み込むデータを選択する情報記憶装置と、
前記記憶装置に記憶したデータを保存するストレージ装置と、
データの書き込み要求または読み込み要求を、前記情報記憶装置に送信する情報処理装置と、
を有することを特徴とするストレージシステム。
【０１８５】
（付記６）データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値と前記データとを記憶装置に記憶し、
前記記憶先の論理アドレスのデータを読み込む際に、前記記憶先の論理アドレスに複数のクロック値が対応付けられているとき、前記複数のクロック値に基づいて、読み込むデータを選択する、
処理をコンピュータに実行させることを特徴とする情報記憶装置制御プログラム。
【０１８６】
（付記７）データを記憶する際に、記憶先の論理アドレスに対応付けて、書き込み要求の受付順を示すクロック値と前記データとを記憶装置に記憶し、
前記記憶先の論理アドレスのデータを読み込む際に、前記記憶先の論理アドレスに複数のクロック値が対応付けられているとき、前記複数のクロック値に基づいて、読み込むデータを選択する、
処理をコンピュータに実行させる情報記憶装置制御プログラムを記録したことを特徴とする前記コンピュータに読み取り可能な記録媒体。
【符号の説明】
【０１８７】
１０１  情報記憶装置
１０２  情報処理装置
２０１  ストレージ装置
６０１  受付部
６０２  クロック値管理部
６０３  通信部
６０４  整合性管理部
【図１】
2016143296.tif 000003
【図２】
2016143296.tif 000004
【図３】
2016143296.tif 000005
【図４】
2016143296.tif 000006
【図５】
2016143296.tif 000007
【図６】
2016143296.tif 000008
【図７】
2016143296.tif 000009
【図８】
2016143296.tif 000010
【図９】
2016143296.tif 000011
【図１０】
2016143296.tif 000012
【図１１】
2016143296.tif 000013
【図１２】
2016143296.tif 000014
【図１３】
2016143296.tif 000015
【図１４】
2016143296.tif 000016
【図１５】
2016143296.tif 000017
【図１６】
2016143296.tif 000018