(57)【要約】【課題】ホストからのアクセスパターンに基づいてディレクトリの記録粒度を部分的に変更し、記録されたアクセス範囲に基づく処理またはディレクトリを管理する処理を軽減することを可能とする。【解決手段】ホストＩ／Ｆ制御部２１１は、スレーブ・ブロックデバイス制御装置によって送信されたアクセス要求を受信する。キャッシュ・ディレクトリ管理部２１６は、ホストＩ／Ｆ制御部２１１によって受信されたアクセス要求アクセス要求に応じてアクセスされる論理ユニットへのアクセス範囲をキャッシュ・ディレクトリ２３５に記録する際の記録粒度を変更する。キャッシュ・ディレクトリ管理部２１６は、変更された記録粒度に基づいて、ホストＩ／Ｆ制御部２１１によって受信されたアクセス要求に応じてアクセスされる論理ユニットへのアクセス範囲をキャッシュ・ディレクトリ２３５に記録する。【選択図】      図４
2009122850.tif 000002
【特許請求の範囲】
【請求項１】
ホストコンピュータに対して論理ユニットを提供するブロックデバイス制御装置において、
前記ホストコンピュータからの前記論理ユニットに対するアクセス要求によって指定される当該論理ユニットへのアクセス範囲を記録するディレクトリと、
前記ホストコンピュータからのアクセス要求を受信する受信手段と、
前記受信されたアクセス要求に応じてアクセスされる前記論理ユニットへのアクセス範囲を前記ディレクトリに記録する際の記録粒度を、当該アクセス要求に基づいて変更する変更手段と、
前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を、前記変更された記録粒度に基づいて前記ディレクトリに記録する記録処理手段と
を具備することを特徴とするブロックデバイス制御装置。
【請求項２】
前記ディレクトリは、前記論理ユニット内の部分的なデータ領域を示す複数のディレクトリ・エントリが連結された木構造で構成され、
前記変更手段は、前記受信されたアクセス要求によって指定されるアクセス範囲と重なるデータ領域を示す前記ディレクトリの部分木と、当該データ領域を示すディレクトリ・エントリであって、当該ディレクトリの部分木より前記記録粒度が粗いディレクトリ・エントリとを、当該アクセス要求に基づいて交換することにより前記記録粒度を変更する
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項３】
前記ホストコンピュータからのアクセス要求によって指定された前記論理ユニットへのアクセス範囲の統計を示す統計情報を予め格納する統計情報格納手段を更に具備し、
前記変更手段は、前記アクセス要求または前記統計情報格納手段に格納されている統計情報に基づいて、前記記録粒度を変更する
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項４】
前記統計情報格納手段は、前記ホストコンピュータからのアクセス要求に応じた前記論理ユニットへのアクセスのうち、前記論理ユニット内の任意の領域に対するリードの割合を示す統計情報を格納し、
前記変更手段は、前記アクセス範囲のうち、前記統計情報によって示されるリードの割合が予め定められた値より高い領域が含まれる場合、前記記録粒度を粗くする
ことを特徴とする請求項３記載のブロックデバイス制御装置。
【請求項５】
前記統計情報格納手段は、前記ホストコンピュータからのアクセス要求に応じた前記論理ユニットへのアクセスのうち、前記論理ユニット内の任意の領域に対するアクセス頻度を示す統計情報を格納し、
前記変更手段は、前記アクセス範囲のうち、前記統計情報によって示されるアクセス頻度が予め定められた値よりも低い領域が含まれる場合、前記記録粒度を粗くする
ことを特徴とする請求項３記載のブロックデバイス制御装置。
【請求項６】
前記統計情報格納手段は、前記ホストコンピュータからのアクセス要求に応じた前記論理ユニットへのアクセスのうち、前記論理ユニットへのアクセス要求の履歴を示す統計情報を格納し、
前記変更手段は、前記受信されたアクセス要求に応じた前記論理ユニットに対するアクセスがシーケンシャルライトであるかを、当該アクセス要求に基づいて判定する判定手段を含み、
前記アクセスがシーケンシャルライトであると判定された場合に、前記記録粒度を粗くする
ことを特徴とする請求項３記載のブロックデバイス制御装置。
【請求項７】
前記変更手段は、
前記受信されたアクセス要求によって指定されるアクセス範囲を、前記ディレクトリに正確に記録できるかを判定する記録粒度判定手段を含み、
前記ディレクトリに正確に記録できないと判定された場合、前記記録粒度を細かくする
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項８】
前記ディレクトリを格納するメモリを更に具備し、
前記変更手段は、
前記メモリ内において、前記ディレクトリが占める領域が不足しているかを判定するメモリ領域判定手段を更に含み、
前記記録粒度判定手段によって前記ディレクトリに正確に記録できないと判定された場合であって、前記メモリ領域判定手段によって前記ディレクトリが占める領域が不足していると判定された場合には、前記記録粒度を変更しない
ことを特徴とする請求項６記載のブロックデバイス制御装置。
【請求項９】
前記変更手段は、
前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲のうち、前記ディレクトリにおいて、予め定められた閾値より記録密度が高い範囲を含むかを判定する判定手段を含み、
前記アクセス範囲に前記予め定められた閾値より記録密度が高い範囲が含まれると判定された場合、前記記録粒度を粗くする
ことを特徴とする請求項１記載のブロックデバイス制御装置。
【請求項１０】
ホストコンピュータに対して論理ユニットを提供するブロックデバイス制御装置であって、前記ホストコンピュータからの前記論理ユニットに対するアクセス要求によって指定される当該論理ユニットへのアクセス範囲を記録するディレクトリを備えるブロックデバイス制御装置において用いられるアクセス範囲管理方法であって、
前記ホストコンピュータからのアクセス要求を受信するステップと、
前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を前記ディレクトリに記録する際の記録粒度を、当該アクセス要求に基づいて変更するステップと、
前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を、前記変更された記録粒度に基づいて前記ディレクトリに記録するステップと
を具備することを特徴とするアクセス範囲管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ブロックデバイス制御装置がホストコンピュータに対して提供する論理ユニットへのアクセス範囲を管理するブロックデバイス制御装置及びアクセス範囲管理方法に関する。
【背景技術】
【０００２】
近年、例えば複数のブロックデバイス制御装置によって管理される複数の記憶領域（以下、単にエクステントと表記）が結合された論理ユニット（LU: Logical Unit）を、ホストコンピュータ（以下、単にホストと表記）に提供するストレージ・クラスタ・システムが知られている。ブロックデバイス制御装置は、複数の例えばハードディスクドライブ（ＨＤＤ）のようなブロックデバイスを制御してエクステントを提供する。
【０００３】
このようなストレージ・クラスタ・システムでは、ホストからのリード要求またはライト要求は適切なブロックデバイス制御装置、例えば当該リード要求（またはライト要求）に応じたエクステントを提供（管理）するブロックデバイス制御装置へ転送される。このとき、転送処理を行うブロックデバイス制御装置においては、当該転送に伴うデータを例えば当該ブロックデバイス制御装置内のキャッシュメモリに蓄積することがスループットを向上させるために不可欠である。この場合、例えば各ブロックデバイス制御装置に分散したキャッシュメモリの一貫性を保証する処理（以下、コヒーレント処理と表記）が実行される。
【０００４】
コヒーレント処理は、ブロックデバイス制御装置間で例えばインタコネクトを介したメッセージの送受信によって、ホストからのＬＵへのライト要求に同期して、全てのブロックデバイス制御装置内のキャッシュメモリに存在する当該ライト要求に応じた領域に対応するデータ（キャッシュデータ）に対して、無効化あるいは新しいライトデータを反映することで実現される。
【０００５】
上記したような共有データに関する分散キャッシュの一貫性保証技術は、例えば並列計算機またはマルチプロセッサ・システムの分野で発展した技術であるが上記コヒーレント処理と本質的には同一である。これらの分野において、例えばディレクトリに記録することでコヒーレント処理の対象を限定して、発生するトランザクションを削減することが知られている。
【０００６】
同様に、ストレージ・クラスタ・システムにおけるコヒーレント処理においても、ブロックデバイス制御装置は、例えばホストからのＬＵへの断続的な複数のアクセス範囲を全て記録して参照することにより、発生するトランザクションを削減することができる。
【０００７】
そこで、例えばストレージ・クラスタ・システム内のブロックデバイス制御装置毎に分散するキャッシュデータの存在を管理するキャッシュ・ディレクトリが存在する。キャッシュ・ディレクトリは、各ブロックデバイス制御装置の主記憶メモリに分散させる形で設けられている。このキャッシュ・ディレクトリでは、例えばブロックデバイス制御装置から転送されたリード／ライト要求範囲と、その転送元であるブロックデバイス制御装置とが対応付けて記録される。これにより、例えばコヒーレント処理の対象ブロックデバイス制御装置を限定することで、送受信メッセージ数が削減できる。
【０００８】
一方、ブロックデバイス制御装置が断続的な複数のアクセス範囲を記録する別の例として、スナップショット機能における差分情報ディレクトリを用いた技術が開示されている（例えば、特許文献１を参照）。スナップショット機能とは、ある時点のＬＵ（マスタＬＵ）の内容を別のＬＵ（バックアップＬＵ）に複製する機能である。マスタＬＵとバックアップＬＵは同一ブロックデバイス制御装置が管理することもあり、また、異なるブロックデバイス制御装置が管理することもある。
【０００９】
この技術によれば、同期状態にあるマスタＬＵとバックアップＬＵは、ホストからのスナップショットデータ採取の指示によって同期状態が解除される。同期状態が解除された後のマスタＬＵへのライト要求は、差分情報として差分情報ディレクトリにアクセス範囲が記録される。マスタＬＵとバックアップＬＵとの再同期化を行うときには、バックアップLUへ差分情報ディレクトリに記録された範囲のデータのみコピーが行われる。また、あるスナップショットに対する差分データのみで構成される差分スナップショットを取得するときは、差分情報ディレクトリで記録された範囲のデータのみ必要となる。
【００１０】
しかしながら、近年のブロックデバイス制御装置が提供するＬＵの大容量化やユーザの使用するシステム・データ、ユーザ・データの増加に伴って、アクセス範囲が広範囲に及び、上記したようなキャッシュ・ディレクトリまたは差分情報ディレクトリに必要なメモリ量も膨大となる。
【００１１】
このため、ディレクトリを構成するメモリ量を削減するために、単純なテーブルやフルビットマップではなく、小さなビットマップを木構造で管理する方式が一般的である。そこで、例えばキャッシュ・ディレクトリを圧縮する技術が提案されている（例えば、特許文献２を参照）。
【００１２】
更に、例えばディレクトリ全体の記録粒度を粗くすることで、ディレクトリを構成するメモリ量を削減することができる。つまり、例えばアクセス範囲を１セクタ単位ではなく、例えば２５６セクタ単位で記録することで、ディレクトリを構成する全ビットマップに必要なメモリ量をおよそ２５６分の１に抑えることが可能である。また、これにより、ディレクトリの管理（例えば、探索または変更等）にかける処理量が軽減される。
【特許文献１】特開２００５−８５１１７号公報
【特許文献２】特開平９−２２３８１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
しかしながら、記録粒度の粗さに起因して、本来はアクセスされていない範囲がアクセスされたと判定され、記録されたアクセス範囲に基づく処理量が増加する場合がある。例えば、ブロックデバイス制御装置によってリードされた範囲がキャッシュ・ディレクトリに記録された場合を想定する。この場合、そのリード範囲の近傍（の領域）に対する後続のライト要求受信処理では、当該ライト要求範囲はキャッシュされていないにもかかわらず、記録粒度の粗さによってライト要求範囲もキャッシュされていると判定されてしまう。これにより、不必要なコヒーレント処理を実行する必要が生じてしまう。
【００１４】
上記したように、ディレクトリ全体で均一の記録粒度を使用することによって、記録粒度の細かさが足りずに記録されたアクセス範囲に基づく処理量が大きくなる範囲と、必要以上に記録粒度が細かいためにディレクトリを管理する処理量が大きくなる範囲がディレクトリ内部にそれぞれ存在することになる。
【００１５】
本発明の目的は、ホストからのアクセスパターンに基づいてディレクトリの記録粒度を部分的に変更し、記録されたアクセス範囲に基づく処理またはディレクトリを管理する処理を軽減することができるブロックデバイス制御装置及びアクセス範囲管理方法を提供することにある。
【課題を解決するための手段】
【００１６】
本発明の１つの態様によれば、ホストコンピュータに対して論理ユニットを提供するブロックデバイス制御装置が提供される。このブロックデバイス制御装置は、前記ホストコンピュータからの前記論理ユニットに対するアクセス要求によって指定される当該論理ユニットへのアクセス範囲を記録するディレクトリと、前記ホストコンピュータからのアクセス要求を受信する受信手段と、前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を前記ディレクトリに記録する際の記録粒度を、当該アクセス要求に基づいて変更する変更手段と、前記受信されたアクセス要求によって指定される前記論理ユニットへのアクセス範囲を、前記変更された記録粒度に基づいて前記ディレクトリに記録する記録処理手段とを具備する。
【発明の効果】
【００１７】
本発明によれば、ホストからのアクセスパターンに基づいてディレクトリの記録粒度を部分的に変更し、記録されたアクセス範囲に基づく処理またはディレクトリを管理する処理を軽減することを可能とする。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照して、本発明の各実施形態について説明する。
【００１９】
［第１の実施形態］
図１は、本発明の第１の実施形態に係るブロックデバイス制御装置を含むストレージ・クラスタ・システムの構成を示すブロック図である。ストレージ・クラスタ・システムは、ホストコンピュータ（以下、単にホストと表記）１０及びブロックデバイス制御装置２０を含む。図１に示すように、ホスト１０は、複数（例えばＮ台）存在する。また、ブロックデバイス制御装置２０は、複数（例えばＭ台）存在し、当該複数のブロックデバイス制御装置２０は例えば疎結合されている。ホスト１０及びブロックデバイス制御装置２０は、例えばスイッチ３０を介して接続される。
【００２０】
ブロックデバイス制御装置２０には、配下に例えば複数のハードディスクドライブ（ＨＤＤ）２００のようなブロックデバイスから構成されるディスクアレイが接続されている。
【００２１】
上記したホスト１０及びブロックデバイス制御装置２０間を接続するインタコネクトとしては、例えばＳＣＳＩ（Small Computer System Interface）プロトコルに基づくブロックデバイス用インタフェース（Ｉ／Ｆ）であるファイバチャネル（ＦＣ：Fibre Channel）またはｉＳＣＳＩを想定している。例えばＦＣの場合、スイッチ３０の部分がファブリック・スイッチとなる。また、ｉＳＣＳＩの場合は、例えばイーサネット（登録商標）のスイッチング・ハブとなる。
【００２２】
ストレージ・クラスタ・システムにおいては、ブロックデバイス制御装置２０の各々はディスクアレイを複数に分割した記憶領域（以下、単にエクステントと表記）を提供する。ホスト１０に対して少なくとも１つのエクステントによって構成される論理ユニット（ＬＵ：Logical Unit）が提供される。
【００２３】
このようなストレージ・クラスタ・システムにおいて、ホスト１０からのＬＵに対するアクセス要求（リード／ライト要求）は、例えば予め設定された１台のブロックデバイス制御装置２０（以下、代表ブロックデバイス制御装置と表記）に対して発行される。このアクセス要求がリード要求である場合、当該リード要求には、例えば当該リード要求に応じてアクセスされるＬＵを識別するＬＵＮ（Logical Unit Number）、当該ＬＵのブロックアドレス及び当該アクセス要求に応じてアクセスされるデータのサイズ等が含まれる。また、リード要求には、例えば当該アクセス要求を送信したホスト１０を識別する識別情報（イニシエータ情報）が含まれる。一方、アクセス要求がライト要求である場合、当該ライト要求には、上記したＬＵＮ、ブロックアドレス、データのサイズ及びイニシエータ情報に加えて、当該ライト要求に応じて書き込まれるデータ（ライトデータ）が含まれる。なお、ホスト１０毎に異なる代表ブロックデバイス制御装置を割り当てて、マルチポートストレージとして動作することも可能である。
【００２４】
ストレージ・クラスタ・システムでは、ホスト１０に対して提供されるＬＵのＬＵＮとブロックアドレス範囲と、当該ＬＵを構成するエクステントとエクステントを提供するブロックデバイス制御装置２０のアドレスとが対応付けて保持されているルーティングテーブルが管理されている。このルーティングテーブルの詳細については後述する。
【００２５】
例えばホスト１０に対して割り当てられた代表ブロックデバイス制御装置は、当該ホスト１０からのアクセス要求に含まれるＬＵＮ及びブロックアドレスから、各ブロックデバイス制御装置２０が提供しているエクステントと当該エクステントを管理するブロックデバイス制御装置２０を特定する。この特定されたブロックデバイス制御装置は、マスタ・ブロックデバイス制御装置と称する。つまり、マスタ・ブロックデバイス制御装置は、ホスト１０からのアクセス要求に応じてアクセスされるエクステントを管理するブロックデバイス制御装置である。
【００２６】
代表ブロックデバイス制御装置は、ホスト１０からのアクセス要求を、特定されたマスタ・ブロックデバイス制御装置に対する要求に変換し、代表ブロックデバイス制御装置は、変換されたアクセス要求を上記したようなインタコネクト経由で転送することによって、ホスト１０及びマスタ・ブロックデバイス制御装置間の中継を行うことができる。なお、この一連の中継処理を行うブロックデバイス制御装置をスレーブ・ブロックデバイス制御装置と称する。この場合では、代表ブロックデバイス制御装置がスレーブ・ブロックデバイス制御装置である。アクセス要求の変換は、ホスト１０からのアクセス要求に含まれるブロックアドレスとデータのサイズを、当該ブロックアドレスと当該データのサイズによって示されるアクセス範囲と当該エクステントが当該LUにマップされた範囲が重なる範囲を示すブロックアドレスとデータのサイズに変更することで行われる。なお、スレーブ・ブロックデバイス制御装置によって転送された変換後のアクセス要求には、当該ＬＵＮ、変換されたブロックアドレス、変換されたデータのサイズに加えて、当該スレーブ・ブロックデバイス制御装置を識別する識別情報（イニシエータ情報）が含まれる。
【００２７】
つまり、各ブロックデバイス制御装置２０は、ホスト１０または別のブロックデバイス制御装置２０（例えばスレーブ・ブロックデバイス制御装置）からのアクセス要求に関して、当該アクセス要求に応じてアクセスされる範囲を構成する全エクステントの各々に対して、エクステントが自装置の配下のディスクアレイに存在する場合は、マスタ・ブロックデバイス制御装置として動作する。一方、存在しない場合は、スレーブ・ブロックデバイス制御装置として動作する。
【００２８】
図２は、ホストからＬＵへのアクセスパスの一例を示す図である。例えば、ブロックデバイス制御装置２０（＃０〜１）がそれぞれ提供する１０２４ｋセクタサイズのエクステント２０１（＃０〜１）を組み合わせたＬＵ（ＬＵＮ０）をホスト１０へ提供する。ＬＵにおけるブロックアドレス０〜１０２４ｋセクタはエクステント２０１（＃０）に相当し、ブロックアドレス１０２４ｋ〜２０４８ｋセクタはエクステント２０１（＃１）に相当する。
【００２９】
ここで、ホスト１０が、例えばＬＵＮ０、ブロックアドレス１０２０ｋセクタ、サイズ１６ｋセクタに関するリード要求を発行し、ブロックデバイス制御装置２０（＃０）が当該リード要求を受信した場合を想定する。この場合、ブロックデバイス制御装置２０（＃０）は、ルーティングテーブルを参照し、エクステント境界においてリード要求受信処理を分割して実行する。アクセス範囲におけるエクステント２０１（＃０）に係る範囲（ブロックアドレス１０２０ｋ〜１０２４ｋセクタ）においてはマスタ・ブロックデバイス制御装置として動作し、エクステント２０１（＃１）に係る範囲（ブロックアドレス１０２４ｋセクタ〜１０３６ｋセクタ）においてはスレーブ・ブロックデバイス制御装置として動作し、ブロックデバイス制御装置２０（＃１）へリード要求を変換して転送する。転送するリード要求（ＬＵＮ０、ブロックアドレス１０２４ｋセクタ、サイズ１２ｋセクタ）には、イニシエータ情報としてブロックデバイス制御装置２０（＃０）の識別情報が含まれる。転送されたリード要求を受信したブロックデバイス制御装置２０（＃１）はルーティングテーブルを参照し、マスタ・ブロックデバイス制御装置として動作する。転送されたリード要求に対するリードデータはブロックデバイス制御装置２０（＃０）へ転送され、ブロックデバイス制御装置（＃０）からホスト１０へ転送される。
【００３０】
図３は、図１に示すブロックデバイス制御装置２０のハードウェア構成を示すブロック図である。
【００３１】
ブロックデバイス制御装置２０は、Ｉ／Ｏプロセッサ２１、ＲＯＭ２２、メモリ２３、バッテリ２４、ホストインタフェース（ホストＩ／Ｆ）２５及びディスクインタフェース（ディスクＩ／Ｆ）２６を含む。
【００３２】
ブロックデバイス制御装置２０は、例えばＩ／Ｏプロセッサ２１上で動作するプログラム（ソフトウェア）により制御される。このプログラムは、例えばＲＯＭ２２に格納され、ブロックデバイス制御装置２０の起動時に例えばメモリ２３にロードされ、Ｉ／Ｏプロセッサ上で実行される。なお、このプログラムは、例えばコンピュータ読み取り可能な記憶媒体に予め格納して頒布可能である。また、このプログラムが、例えばネットワークを介してブロックデバイス制御装置２０にダウンロードされても構わない。
【００３３】
メモリ２３は、例えばバッテリ２４により停電時もバックアップされる。また、メモリ２３は、ホスト１０に提供されるハードディスクドライブ２００のようなストレージ（ブロックデバイス）のディスクキャッシュ、あるいはマスタ・ブロックデバイス制御装置の動作時に管理されるキャッシュ・ディレクトリ領域としても使用される。このキャッシュ・ディレクトリの詳細については、後述する。また、メモリ２３内には、上記したルーティングテーブルも格納されている。
【００３４】
Ｉ／Ｏプロセッサ２１及びホスト１０間は、ホストＩ／Ｆ２５を介して接続される。ホストＩ／Ｆ２５としては、例えばＦＣまたはｉＳＣＳＩが用いられる。ホストＩ／Ｆ２５は、例えばホスト１０またはスレーブ・ブロックデバイス制御装置に対する送受信処理を行う。
【００３５】
Ｉ／Ｏプロセッサ２１及びブロックデバイス制御装置２０の配下のディスクアレイ間は、ディスクＩ／Ｆ２６を介して接続される。ディスクＩ／Ｆ２６としては、ＦＣ、パラレルＳＣＳＩ、ＳＡＳ（Serial Attached SCSI）、ＳＡＴＡ（serial ATA）等の通常のブロックデバイス用Ｉ／Ｆコントローラが用いられる。ディスクＩ／Ｆ２６は、例えばブロックデバイス制御装置２０の配下のディスクアレイに対するリード／ライト処理を行う。
【００３６】
また、Ｉ／Ｏプロセッサ２１及びホストＩ／Ｆ２５間、Ｉ／Ｏプロセッサ２１及びディスクＩ／Ｆ２６間は、例えばＰＣＩ（Peripheral Component Interconnect）バス等のインタコネクトで接続される。
【００３７】
なお、Ｉ／Ｏプロセッサ２１内には、例えば割り込みコントローラ、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）５用のパリティ計算モジュール、ＤＭＡ（Direct Memory Access）コントローラ等のハードウェア（Ｈ／Ｗ）がある。
【００３８】
また、上記したＩ／Ｏプロセッサ２１上で動作するプログラムによって、当該Ｉ／Ｏプロセッサ２１の内部ハードウェアとホストＩ／Ｆコントローラ、ディスクＩ／Ｆコントローラ等の外部ハードウェアとが制御される。そして、例えば複数のハードディスクドライブ２００で構成されるディスクアレイを複数に分割して、エクステントとして提供される。
【００３９】
図４は、ブロックデバイス制御装置２０の主として機能構成を示すブロック図である。ブロックデバイス制御装置２０は、ホストＩ／Ｆ制御部２１１、ディスクＩ／Ｆ制御部２１２、構成情報管理部２１３、キャッシュメモリ管理部２１４、統計情報管理部２１５、キャッシュ・ディレクトリ管理部２１６、Ｉ／Ｏ処理部２１７及び通信部２１８を含む。本実施形態において、これらの各部２１１乃至２１８は、図３に示すＩ／Ｏプロセッサ２１がＲＯＭ２２に格納されているプログラムを実行することにより実現されるものとする。
【００４０】
また、ブロックデバイス制御装置２０は、ルーティングテーブル２３１、エクステント構成テーブル２３２、キャッシュメモリ２３３、統計情報格納部２３４及びキャッシュ・ディレクトリ２３５を含む。本実施形態において、これらは、図３に示すメモリ２３に格納される。
【００４１】
ホストＩ／Ｆ制御部２１１は、図３に示すホストＩ／Ｆ２５を制御する。ホストＩ／Ｆ制御部２１１は、ホストＩ／Ｆ２５を制御することによって、例えばホスト１０または他のブロックデバイス制御装置２０との間でＳＣＳＩプロトコルに従ってデータ送受信を行う。ホストＩ／Ｆ制御部２１１は、受信されたＳＣＳＩコマンドがリード要求であれば、当該リード要求に含まれるＬＵＮ、ブロックアドレス、サイズ及びイニシエータ情報を、Ｉ／Ｏ処理部２１７に渡す。一方、ホストＩ／Ｆ制御部２１１は、受信されたＳＣＳＩコマンドがライト要求であれば、当該ライト要求に含まれるＬＵＮ、ブロックアドレス、サイズ、イニシエータ情報及びライトデータを、Ｉ／Ｏ処理部２１７に渡す。また、ホストＩ／Ｆ制御部２１１は、受信されたＳＣＳＩコマンドが例えばストレージ・クラスタ・システム内で独自に定義された通信用ＳＣＳＩコマンドであれば、当該ＳＣＳＩコマンドに含まれるイニシエータ情報及び通信データを、通信部２１８に渡す。
【００４２】
ディスクＩ／Ｆ制御部２１２は、図３に示すディスクＩ／Ｆ２６を制御する。ディスクＩ／Ｆ制御部２１２は、ディスクＩ／Ｆ２６を制御することによって、例えばブロックデバイス制御装置２０によって管理されているディスクアレイに対するリード／ライト処理を実行する。
【００４３】
構成情報管理部２１３は、ルーティングテーブル２３１及びエクステント構成テーブル２３２を管理する。このルーティングテーブル２３１及びエクステント構成テーブル２３２は、図３に示すメモリ２３内に格納されている。
【００４４】
ルーティングテーブル２３１は、ストレージ・クラスタ・システムに含まれる各ブロックデバイス制御装置２０が提供しているエクステント毎のエントリによって構成されている。ルーティングテーブル２３１には、各エクステント（を示す識別子）と当該エクステントを提供しているブロックデバイス制御装置（マスタ・ブロックデバイス制御装置）が、ホスト１０へ提供するＬＵのＬＵＮと範囲に対応付けて保持されている。ルーティングテーブル２３１には、ストレージ・クラスタ・システム内がホスト１０に対して提供する全てのＬＵを構成する全てのエクステントに関する情報が保持される。
【００４５】
このルーティングテーブル２３１は、ストレージ・クラスタ・システムに含まれる全てのブロックデバイス制御装置２０によって共有される。つまり、ストレージ・クラスタ・システム内のブロックデバイス制御装置２０の各々のメモリ２３には、同一のルーティングテーブル２３１が格納されている。ルーティングテーブル２３１を変更する場合は、通信部２１８を介して他のブロックデバイス制御装置２０に対して当該変更が通知される。このように、変更が通知されると、当該変更が通知されたブロックデバイス制御装置２０に含まれる構成情報管理部２１３によって、当該変更がルーティングテーブル２３１に反映される。
【００４６】
エクステント構成テーブル２３２には、ルーティングテーブル２３１とは異なり、当該エクステント構成テーブル２３２を含むブロックデバイス制御装置２０によって提供されるエクステントに関する情報が保持される。
【００４７】
キャッシュメモリ管理部２１４は、ブロックデバイス制御装置２０によって管理されているＬＵ（エクステント）のデータをキャッシュ（格納）する領域（キャッシュメモリ２３３）を管理する。このキャッシュメモリ２３３はブロックデバイス制御装置に含まれるメモリ２３の一部であり、さらに細分化して例えばＬＵＮ及びブロックアドレスと関連付けられる。細分化されたキャッシュメモリ２３３の領域（以下、キャッシュブロックと表記）には、セクタ単位でキャッシュされたデータ（キャッシュデータ）が格納され、排他的使用権の有無が管理される。
【００４８】
キャッシュメモリ管理部２１４は、各ブロックデバイス制御装置２０内のキャッシュメモリ２３３の一貫性を保証する処理（以下、コヒーレント処理と表記）を実行する。キャッシュメモリ管理部２１４は、通信部２１８を介して他のブロックデバイス制御装置２０に対してＬＵＮ、ブロックアドレス、サイズを送受信する。受信側のキャッシュメモリ管理部２１４は、例えばキャッシュメモリ２３３に格納されているキャッシュデータを破棄することにより、コヒーレント処理を実行する。
【００４９】
上記したキャッシュメモリ２３３は、例えば当該キャッシュメモリ２３３を含むブロックデバイス制御装置２０がスレーブ・ブロックデバイス制御装置として動作するエクステントに対応するキャッシュブロックに関して、リード・キャッシュ／ライト・スルー・キャッシュとして使用される。一方、キャッシュメモリ２３３を含むブロックデバイス制御装置２０がマスタ・ブロックデバイス制御装置として動作するエクステントに対応するキャッシュブロックに関して、リード・キャッシュ／ライト・バック・キャッシュとして使用される。なお、キャッシュメモリ２３３内のキャッシュブロックが枯渇した場合等には、例えばキャッシュブロックの選定／破棄処理が実行され、効率的にデータがキャッシュされる。
【００５０】
統計情報管理部２１５は、統計情報格納部２３４に格納されている統計情報を管理する。統計情報は、ブロックデバイス制御装置２０によって提供されるエクステントに関するＩ／Ｏ処理（アクセス範囲）の統計を示す。統計情報は、例えばエクステント単位での過去数回分のＩ／Ｏ情報（リード／ライト種別、エクステント内オフセットアドレス及びサイズ等）履歴及びエクステント内の任意の領域のリード／ライトの割合を含む。
【００５１】
キャッシュ・ディレクトリ管理部２１６は、ホスト１０からのＬＵに対するアクセス要求に応じてアクセスされる（指定される）当該ＬＵへのアクセス範囲を記録するキャッシュ・ディレクトリ２３５を構成する。このキャッシュ・ディレクトリ２３５は、例えばメモリ２３上に予め静的に確保した配列状のメモリ領域の要素の幾つかが連結することで構成される。
【００５２】
キャッシュ・ディレクトリ管理部２１６は、ホスト１０からのアクセス要求を中継したスレーブ・ブロックデバイス制御装置によって送信されたアクセス要求によって指定されるＬＵへのアクセス範囲をキャッシュ・ディレクトリ２３５に対して記録（登録）する。このキャッシュ・ディレクトリ２３５は、例えばアクセス要求に応じてアクセスされるエクステント及び当該アクセス要求を送信したスレーブ・ブロックデバイス制御装置（イニシエータ）単位で管理される。
【００５３】
また、キャッシュ・ディレクトリ管理部２１５は、統計情報格納部２３４に格納されている統計情報を参照して、例えばアクセス範囲をキャッシュ・ディレクトリ２３５に記録する際の記録粒度の変更等の管理を行う。
【００５４】
Ｉ／Ｏ処理部２１７は、上記したルーティングテーブル２３１、エクステント構成テーブル２３２、キャッシュメモリ２３３、統計情報格納部２３４及びキャッシュ・ディレクトリ２３５を参照して、ホストＩ／Ｆ制御部２１１によって受信されたアクセス要求に対する処理を実行する。このとき、Ｉ／Ｏ処理部２１７は、構成情報管理部２１３、キャッシュメモリ管理部２１４、統計情報管理部２１５及びキャッシュ・ディレクトリ管理部２１６を介して処理を実行する。Ｉ／Ｏ処理部２１７は、例えばホストＩ／Ｆ制御部２１１によって受信されたアクセス要求に応じて、当該Ｉ／Ｏ処理部２１７を含むブロックデバイス制御装置２０がマスタ・ブロックデバイス制御装置またはスレーブ・ブロックデバイス制御装置として動作することを決定する。
【００５５】
通信部２１８は、ホストＩ／Ｆ制御部２１１を介して、ＳＣＳＩプロトコルに従ってデータを送受信し、他のブロックデバイス制御装置２０との通信を実現する。
【００５６】
図５は、ルーティングテーブル２３１のデータ構造の一例を示す。上記したようにルーティングテーブル２３１には、ストレージ・クラスタ・システムがホスト１０に提供する全てのＬＵを構成する全てのエクステントに関する情報が保持される。図５に示すように、ルーティングテーブル２３１には、ＬＵＮ、ブロックアドレス範囲、アドレス情報及びエクステント識別子が対応付けて保持される。
【００５７】
アドレス情報は、ＬＵＮ及びブロックアドレス範囲にマップされたエクステントを管理するブロックデバイス制御装置２０（マスタ・ブロックデバイス制御装置）のアドレスを示す。アドレス情報は、ホストＩ／Ｆ制御部２１１を介したデータ送受信に必要となるアドレスで、ホスト１０とブロックデバイス制御装置２０間を接続するインタコネクトがＦＣの場合はＷＷＮ（World Wide Name）、ｉＳＣＳＩの場合はＩＰ（Internet Protocol）アドレスとなる。エクステント識別子は、当該エクステントを管理するマスタ・ブロックデバイス制御装置内でエクステントを一意に識別するための識別子である。
【００５８】
図５に示す例では、ＬＵＮ「０」、ブロックアドレス「０〜１０２４ｋ」、アドレス情報「アドレス情報１」及びエクステント識別子「０」が対応付けて保持されている。これは、ＬＵＮ「０」及びブロックアドレス「０〜１０２４ｋ」によって特定される領域は、アドレス情報１によって示されるアドレスが割り当てられているブロックデバイス制御装置２０においてエクステント識別子「０」によって識別されるエクステントにマップされていることを示す。
【００５９】
また、図５に示す例では、ＬＵＮ「０」、ブロックアドレス範囲「１０２４ｋ〜２０４８ｋ」、アドレス情報「アドレス情報１」及びエクステント識別子「１」が対応付けて保持されている。これは、ＬＵＮ「０」及びブロックアドレス範囲「１０２４ｋ〜２０４８ｋ」によって特定される領域が、アドレス情報１によって示されるアドレスが割り当てられているブロックデバイス制御装置２０においてエクステント識別子「１」によって識別されるエクステントにマップされていることを示す。
【００６０】
同様に、ＬＵＮ「０」、ブロックアドレス範囲「２０４８ｋ〜３０７２ｋ」、アドレス情報「アドレス情報２」及びエクステント識別子「０」が対応付けて保持されている。これは、ＬＵＮ「０」及びブロックアドレス範囲「２０４８ｋ〜３０７２ｋ」によって特定される領域が、アドレス情報２によって示されるアドレスが割り当てられているブロックデバイス制御装置２０においてエクステント識別子「０」によって識別されるエクステントにマップされていることを示す。
【００６１】
図６は、エクステント構成テーブル２３２のデータ構造の一例を示す。上記したようにエクステント構成テーブル２３２には、当該エクステント構成テーブル２３２を含むブロックデバイス制御装置２０によって提供されているエクステントに関する情報が保持される。図６に示すように、エクステント構成テーブル２３２には、エクステント識別子、ディスクアレイ情報及びオフセットアドレスが対応付けて保持されている。
【００６２】
エクステント識別子は、エクステント構成テーブル２３２を含むブロックデバイス制御装置２０によって管理されるエクステントを識別する識別子である。ディスクアレイ情報は、当該ディスクアレイ情報に対応付けられているエクステント識別子によって識別されるエクステントに対するディスクアレイを構成するための情報である。ディスクアレイ情報は、例えばディスクアレイの識別子や構成するＲＡＩＤの種類等を含む。オフセットアドレスは、エクステント識別子によって識別されるエクステントのディスクアレイ内における物理的な位置（アドレス）を示す。
【００６３】
図６に示す例では、エクステント識別子「０」、ディスクアレイ情報「ディスクアレイ情報１」及びオフセットアドレス「オフセットアドレス１」が対応付けて保持されている。また、エクステント識別子「１」、ディスクアレイ情報「ディスクアレイ情報２」及びオフセットアドレス「オフセットアドレス２」が対応付けて保持されている。
【００６４】
次に、図７を参照して、キャッシュ・ディレクトリ２３５のデータ構造について説明する。キャッシュ・ディレクトリ２３５には、当該キャッシュ・ディレクトリ２３５を含むブロックデバイス制御装置２０（マスタ・ブロックデバイス制御装置）によって管理されるエクステントに対する、スレーブ・ブロックデバイス制御装置からのアクセス要求によって指定されるアクセス範囲が登録される。キャッシュ・ディレクトリ２３５は、上記したようにエクステント及びスレーブ・ブロックデバイス制御装置単位で管理され、例えばあるスレーブ・ブロックデバイス制御装置からあるエクステントに対するアクセスと、同一エクステントに対する別のスレーブ・ブロックデバイス制御装置からのアクセスは、分別して登録される。以下では、単一のエクステントに対する単一のスレーブ・ブロックデバイス制御装置からのアクセスを登録するためのデータ構造について説明する。
【００６５】
キャッシュ・ディレクトリ２３５は、当該キャッシュ・ディレクトリ２３５を含むブロックデバイス制御装置２０によって管理されるエクステント内の部分的なデータ領域へのアクセスの有無を示すビットマップ（ディレクトリ・エントリ）の集合である。キャッシュ・ディレクトリ２３５は、複数のディレクトリ・エントリが例えば基数木（Radix Tree）と呼ばれるデータ構造により管理される。ここでは、例えばエクステントのサイズを１Ｍセクタ、１ディレクトリ・エントリのサイズを４バイトとし、当該１ディレクトリ・エントリに対応するデータ領域のサイズを３２セクタであるものとして説明する。また、１セクタあたりの容量は、５１２バイトであるものとする。
【００６６】
キャッシュ・ディレクトリ２３５は、例えば根３０１、２つの節３０２及び葉３０３による４つの層で構成される。便宜的に根３０１が属する階層を第１層と称する。以下、根３０１から葉３０３に向かって、第２層、第３層、第４層と称する。
【００６７】
キャッシュ・ディレクトリ２３５を構成するディレクトリ・エントリ３０４は、例えば３２ビットのビットマップである。このディレクトリ・エントリ３０４の各ビットは、上記した１ディレクトリ・エントリに対応するデータ領域サイズである３２セクタの各々に該当する。つまり、ディレクトリ・エントリ３０４において、ビットが「０」のときは該当する領域（１セクタ）にアクセスがないことを示す。一方、ビットが「１」のときは該当する領域（１セクタ）にアクセスがあったことを示す。
【００６８】
第４層の葉３０３は、要素数３２のディレクトリ・エントリ３０４の配列で構成される。第２層の節３０２及び第３層の節３０２は、要素数３２のスロット状態フラグ３０５の配列及び当該スロット状態フラグ３０５の各々に対応する要素数３２のスロット３０６で構成される。また、第１層の根３０１は、１組のスロット状態フラグ３０５及びスロット３０６で構成される。
【００６９】
スロット状態フラグ３０５は、当該スロット状態フラグ３０５に対応するスロット（同一インデックスのスロット）３０６の状態を示す。このスロットの状態には、ポインタモード及びビットマップモードが存在する。スロット状態フラグ３０５が「０」のときは、当該スロット状態フラグ３０５に対応するスロット３０６が、ポインタモードで使用されていることを示す。一方、スロット状態フラグ３０５が「１」のときは、当該スロット状態フラグ３０５に対応するスロット３０６が、ビットマップモードで使用されていることを示す。
【００７０】
スロット状態フラグ３０５が「０」、つまり、ポインタモードで使用されているスロット３０６には、当該スロット３０６を構成要素とする根３０１または節３０２の層より下位の層の節３０２または葉３０３へのポインタが格納される。図７に示すように、例えば第１層の根３０１を構成するスロット３０６がポインタモードで使用されている場合には、当該スロット３０６には例えば第２層の節３０２を示すポインタが格納される。また、例えば第２層の節３０２を構成するスロット３０６（要素数３２のスロット３０６のうちの１つ）がポインタモードで使用されている場合には、当該スロット３０６には例えば第３層の節３０２を示すポインタが格納される。同様に、例えば第３層の節３０２を構成するスロット３０６（要素数３２のスロット３０６のうちの１つ）がポインタモードで使用されている場合には、当該スロット３０６には例えば第４層の葉３０３を示すポインタが格納される。
【００７１】
ここで、上記したようにエクステントのサイズは１Ｍ（２＾２０）セクタであり、エクステント内のオフセット値は、２０ビットで表現される。このオフセット値により、エクステント内におけるセクタが特定される。
【００７２】
ここで、図７に示すように、例えばエクステント内のオフセット値が、「０ｘ０ＦＣ２２」である場合を想定する。なお、オフセット値「０ｘ０ＦＣ２２」の「０ＦＣ２２」は、１６進数表記である。この「０ＦＣ２２」を２進数表記にすると、「００００１１１１１１００００１０００１０」となり、２０ビットで表現される。
【００７３】
上記した第１層の根３０１または第２層の節３０２、第３層の節３０２に含まれるポインタモード（スロット状態フラグ３０５が「０」）のスロット３０６によって、下位層の節３０２や葉３０３が参照される。エクステント内のあるセクタに該当するディレクトリ・エントリ３０４は、上記したオフセット値から特定される。上記したようにオフセット値を２進数表記した場合の、ビット１５〜１９の値（上記したオフセット値では、「００００１」）が、第２層の節３０２のスロット配列のインデックスとして参照される。また、ビット１０〜１４の値（上記したオフセット値では、「１１１１１」）が、第３層の節３０２のスロット配列のインデックスとして参照される。また、ビット５〜９（上記したオフセット値では、「００００１」）が、第４層の葉３０３のディレクトリ・エントリ配列のインデックスとして参照される。そのディレクトリ・エントリ３０４に対してオフセット値のビット０から４（上記したオフセット値では、「０００１０」）が、インデックスとして参照される。
【００７４】
図７に示す例では、例えばオフセット値「０ｘ０ＦＣ２２（２進数表記では、０ｂ００００１１１１１１００００１０００１０）」によって特定される１セクタに相当するディレクトリ・エントリ３０４は、まず、当該オフセット値のビット１５〜１９の値が「００００１」であるため、第２層の節３０２のスロット配列のインデックス１が参照される。インデックス１のスロット３０６がポインタモードである場合には、当該スロット３０６に格納されているポインタによって示される第３層の節３０２が特定される。
【００７５】
次に、オフセット値のビット１０〜１４の値が「１１１１１」であるため、特定された第３層の節３０２のスロット配列のインデックス３１が参照される。インデックス３１のスロット３０６がポインタモードである場合には、当該スロット３０６に格納されているポインタによって示される第４層の葉３０３が特定される。
【００７６】
次に、オフセット値のビット５〜９の値が「００００１」であるため、特定された第４層の葉３０３のディレクトリ・エントリ配列のインデックス１が参照される。これにより、インデックス１のディレクトリ・エントリ３０４が特定される。そして、オフセット値のビット０〜４の値が「０００１０」であるため、特定されたディレクトリ・エントリ３０４のインデックス２が参照される。これにより、ディレクトリ・エントリ３０４のインデックス２のビットが、上記したオフセット値「０ｘ０ＦＣ２２」によって特定される１セクタに相当するビットである。つまり、このビットが「０」であれば、オフセット値「０ｘ０ＦＣ２２」によって特定されるセクタにアクセスがないことを示す。一方、このビットが「１」であれば、オフセット値「０ｘ０ＦＣ２２」によって特定される１セクタにアクセスがあったことを示す。
【００７７】
また、根３０１または節３０２において、ビットマップモード（スロット状態フラグが「１」）で使用されているスロット３０６は、上記したディレクトリ・エントリ３０４として使用される。このとき、このディレクトリ・エントリ３０４に対応するデータ領域のサイズは、上記した葉３０３を構成するディレクトリ・エントリ３０４とは異なり、３２セクタ（１ビットあたり１セクタ）ではない。この場合では、スロット３０６が仮にポインタモードで使用された場合におけるスロット３０６を頂点とする部分木が管理する範囲（以下、スロット・セクタ範囲と表記）のセクタに相当する。
【００７８】
例えば、エクステント内のオフセット値「０ｘ０Ｆ８００（２進数表記では、０ｂ００００１１１１１０００００００００００）」に該当する第３層の節に属するスロット３０６がビットマップモードである場合を想定する。この場合では、オフセット値「０ｘ０Ｆ８００〜０ｘ０ＦＢＦＦ（２進数表記では、０ｂ００００１１１１１０００００００００００〜０ｂ００００１１１１１０１１１１１１１１１１）」の範囲のセクタに相当するディレクトリ・エントリ３０４として使用される。つまり、３２ビットのディレクトリ・エントリ３０４で、スロット・セクタ範囲のサイズが１０２４（２進数表記で、下位１０ビットの００００００００００〜１１１１１１１１１１）セクタに相当するため、１ビットあたり３２セクタのディレクトリ・エントリ３０４として使用される。
【００７９】
また、例えば根のスロット３０６がビットマップモードであれば、そのディレクトリ・エントリ３０４は、オフセット値「０ｘ０００００〜０ｘＦＦＦＦＦ（２進数表記では、０ｂ００００００００００００００００００００〜０ｂ１１１１１１１１１１１１１１１１１１１１）」のスロット・セクタ範囲に相当するディレクトリ・エントリ３０４（１ビットあたり３２７６８セクタ）として使用される。
【００８０】
なお、アクセス範囲が全く登録されていない部分木に関するデータ構造は存在する必要はない。よって、必要に応じてメモリ２３の領域を割り当てる、または不要なデータ構造のメモリ２３の領域を解放するといった構成であっても構わない。また、キャッシュ・ディレクトリ２３５のデータ構造において階層数は固定であるものとして説明したが、動的に伸縮させて部分木のみを管理する構成であってもよい。
【００８１】
次に、図８に示すフローチャートを参照して、ブロックデバイス制御装置２０におけるリード要求受信処理について説明する。リード要求には、当該リード要求に応じてアクセスされるＬＵを識別するＬＵＮ、当該ＬＵのブロックアドレス及び当該リード要求に応じてアクセスされるデータのサイズが含まれる。また、リード要求には、当該リード要求を送信したイニシエータ（例えばホスト１０またはブロックデバイス制御装置２０）のアドレスが含まれる。
【００８２】
まず、ブロックデバイス制御装置２０に含まれるホストＩ／Ｆ制御部２１１は、ホストＩ／Ｆ２５を制御することによって、リード要求を受信する。ホストＩ／Ｆ制御部２１１は、受信されたリード要求をＩ／Ｏ処理部２１７に渡す（ステップＳ１）。  Ｉ／Ｏ処理部２１７は、渡されたリード要求に含まれるＬＵＮ、ブロックアドレス及びサイズに基づいて指定される範囲（以下、イニシエータ・リード要求領域と表記）に該当するキャッシュブロックをキャッシュメモリ管理部２１４に対して問い合わせ、キャッシュメモリ管理部２１４は、問い合わせに応じてキャッシュメモリ２３３からキャッシュブロックを特定する（ステップＳ２）。
【００８３】
キャッシュメモリ管理部２１４は、特定されたキャッシュブロック内のイニシエータ・リード要求領域の排他的使用権を獲得する（ステップＳ３）。
【００８４】
Ｉ／Ｏ処理部２１７は、構成情報管理部２１３を介してルーティングテーブル２３１を参照し、イニシエータ・リード要求領域に該当する全てのエクステントを特定して、それぞれに対して以下のステップＳ４〜Ｓ７、Ｓ１０を実行する。
【００８５】
Ｉ／Ｏ処理部２１７は、ルーティングテーブル２３１を参照して、イニシエータ・リード要求領域内の未処理の領域と重なる一つのエクステントを特定する（ステップＳ４）。Ｉ／Ｏ処理部２１７は、特定されたエクステントを管理するブロックデバイス制御装置２０（マスタ・ブロックデバイス制御装置）を特定する。
【００８６】
当該エクステントのマスタ・ブロックデバイス制御装置がリード要求を受信したブロックデバイス制御装置２０（自装置）であるかどうか判定し（ステップＳ５）、自装置であった場合（ステップＳ５のＹＥＳ）はマスタ・ブロックデバイス制御装置におけるリード要求受信処理が実行され（ステップＳ１０）、自装置でない場合（ステップＳ５のＮＯ）にはスレーブ・ブロックデバイス制御装置におけるリード要求処理が実行される（ステップＳ６）。なお、ステップＳ６及びＳ１０の処理は何れもイニシエータ・リード要求領域と当該エクステントのブロックアドレス範囲が重なる領域（以下、エクステント・リード要求領域と表記）に関して処理が実行される。
【００８７】
イニシエータ・リード要求領域における全ての領域の処理を完了したかどうか判定し（ステップＳ７）、処理が完了していなければ（ステップＳ７のＮＯ）未処理の領域に関してステップＳ４から実行する。
【００８８】
ホストＩ／Ｆ制御部２１１は、受信されたリードデータ及びステータスを、イニシエータ（例えばホスト１０）に対して転送する（ステップＳ８）。
【００８９】
ホストＩ／Ｆ制御部２１１によってデータ及びステータスが転送されると、キャッシュメモリ管理部２１４は、当該キャッシュブロック内のイニシエータ・リード要求領域の排他的使用権を放棄して処理を完了する（ステップＳ９）。
【００９０】
次に図９に示すフローチャートを参照して、スレーブ・ブロックデバイス制御装置におけるリード要求受信処理（図８に示すステップＳ６）の処理手順について説明する。
【００９１】
キャッシュメモリ管理部２１４は、エクステント・リード要求領域に対応するデータ（キャッシュデータ）が、上記した図８に示すステップＳ２で特定されたキャッシュブロック内に存在するか否かの判定を行う。つまり、キャッシュメモリ管理部２１４は、キャッシュヒットの判定を行う（ステップＳ１１）。
【００９２】
キャッシュデータが当該キャッシュブロックに存在しないと判定された場合（ステップＳ１１のＮＯ）、Ｉ／Ｏ処理部２１７は、ホストＩ／Ｆ制御部２１１を介して、エクステント・リード要求領域に関するリード要求を当該エクステントのマスタ・ブロックデバイス制御装置に対して転送する（ステップＳ１２）。なお、マスタ・ブロックデバイス制御装置のアドレスを示すアドレス情報は、上記したようにルーティングテーブル２３１に保持されている。
【００９３】
その後、マスタ・ブロックデバイス制御装置からリードデータとステータスが転送されるまで待機する（ステップＳ１３）。キャッシュメモリ管理部２１４は、受信されたリードデータを、ステップＳ２において特定されたキャッシュブロックに格納する。つまり、キャッシュメモリ管理部２１４は、リードデータをキャッシュデータとしてキャッシュする（ステップＳ１４）。
【００９４】
一方、ステップＳ１１においてエクステント・リード要求領域に対応するキャッシュデータが当該キャッシュブロックに存在すると判定された場合、Ｉ／Ｏ処理部２１７は、エクステント・リード要求領域に関する情報をマスタ・ブロックデバイス制御装置へ通知する。これにより、Ｉ／Ｏ処理部２１７は、マスタ・ブロックデバイス制御装置に対して統計情報の更新を要求する（ステップＳ１５）。マスタ・ブロックデバイス制御装置では、通知されたエクステント・リード要求領域に関する情報に基づいて、当該マスタ・ブロックデバイス制御装置に含まれる統計情報格納部２３４が更新される。
【００９５】
図１０に示すフローチャートを参照して、マスタ・ブロックデバイス制御装置におけるリード要求受信処理（図８に示すステップＳ１０）の処理手順について説明する。
【００９６】
Ｉ／Ｏ処理部２１７は、エクステント・リード要求領域に関して統計情報管理部２１５を介して統計情報の更新処理を実行する（ステップＳ２１）。この統計情報の更新処理の詳細については後述する。
【００９７】
キャッシュメモリ管理部２１４は、エクステント・リード要求領域に対応するデータ（キャッシュデータ）が、ステップＳ２で特定されたキャッシュブロックに存在するか否かの判定を行う。つまり、キャッシュメモリ管理部２１４は、キャッシュヒットの判定を行う（ステップＳ２２）。
【００９８】
キャッシュデータが当該キャッシュブロックに存在しないと判定された場合（ステップＳ２２のＮＯ）、Ｉ／Ｏ処理部２１７はディスクＩ／Ｆ制御部２１２を介して、自装置（マスタ・ブロックデバイス制御装置）の配下にあるディスクアレイに対してリード要求を発行する（ステップＳ２３）。このとき、構成情報管理部２１３を介してエクステント構成テーブル２３２を参照することにより、特定されたエクステントに対するＩ／Ｏ情報は、ディスアレイに対するＩ／Ｏ情報に変換される。
【００９９】
その後、ディスクアレイに対するリード要求に応じたリード処理が完了するまで待機する（ステップＳ２４）。
【０１００】
リード処理が完了されると、キャッシュメモリ管理部２１４は、ディスクアレイからリードされたデータ（リードデータ）を、ステップＳ２において特定されたキャッシュブロックに格納する。つまり、キャッシュメモリ管理部２１４は、リードデータをキャッシュデータとしてキャッシュする（ステップＳ２５）。
【０１０１】
Ｉ／Ｏ処理部２１７は、受信されたリード要求に含まれているイニシエータのアドレスに基づいて、当該イニシエータがストレージ・クラスタ・システム内のスレーブ・ブロックデバイス制御装置であるか否かを判定する（ステップＳ２６）。
【０１０２】
イニシエータがスレーブ・ブロックデバイス制御装置であると判定された場合（ステップＳ２６のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は、エクステント及びスレーブ・ブロックデバイス制御装置単位で管理されているキャッシュ・ディレクトリ２３５に対して、当該イニシエータからの当該エクステント・リード要求領域に対するアクセスを記録するためにアクセス範囲登録処理を実行する（ステップＳ２７）。キャッシュ・ディレクトリ管理部２１６は、例えば統計情報格納部２３４に格納されている統計情報に基づいて、アクセス範囲登録処理を実行する。
【０１０３】
一方、ステップＳ２２においてエクステント・リード要求領域に対応するキャッシュデータが当該キャッシュブロックに存在すると判定された場合（ステップＳ２２のＹＥＳ）、ステップＳ２６から実行する。
【０１０４】
また、ステップＳ２６においてイニシエータがスレーブ・ブロックデバイス制御装置でない、つまり、例えばホスト１０であると判定された場合（ステップＳ２６のＮＯ）、マスタ・ブロックデバイス制御装置におけるリード要求受信処理を終了する。
【０１０５】
次に、図１１に示すフローチャートを参照して、上記したアクセス範囲登録処理（図１０に示すステップＳ２７）の処理手順について詳細に説明する。なお、アクセス範囲登録処理においては、エクステント・リード要求領域を示すＬＵ内のブロックアドレス、サイズはエクステント内のオフセットアドレス、サイズへと変換して実行される。
【０１０６】
まず、キャッシュ・ディレクトリ管理部２１６は、当該イニシエータと当該エクステントに対応するキャッシュ・ディレクトリ２３５を選定し、構成する根３０１を特定する（ステップＳ３１）。キャッシュ・ディレクトリ２３５は、上記したように例えば根３０１、２つの節３０２及び葉３０３の４つの層から構成される。この根３０１、２つの節３０２及び葉３０３の４つの層で使用するメモリ領域は、例えばブロックデバイス制御装置２０内のメモリ２３において予め静的に確保した配列状のメモリ領域の要素を動的に取捨することで確保または解放される。
【０１０７】
キャッシュ・ディレクトリ管理部２１６は、特定された根３０１を構成するスロット３０６を対象スロット３０６とする。以降の処理は対象スロット３０６を変更しながら、エクステント・リード要求領域の未処理領域と対象スロット３０６を頂点とする部分木で管理される範囲（スロット・セクタ範囲）が重なる領域に関する登録処理を繰り返す。
【０１０８】
キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６が使用されているモードを交換（変更）するか否かを判定する（ステップＳ３２）。つまり、例えば対象スロット３０６に対して使用されるモードがビットマップモードである場合には、当該対象スロット３０６に対して使用されるモードを例えばビットマップモードからポインタモードに交換するか否かが判定される。一方、例えば対象スロット３０６に対して使用されるモードがポインタモードである場合には、当該対象スロット３０６に対して使用されるモードを例えばポインタモードからビットマップモードに交換するか否かが判定される。
【０１０９】
キャッシュ・ディレクトリ管理部２１６は、受信されたリード要求及びアクセス対象となるエクステントに対応する統計情報に基づいて判定処理を実行する。この統計情報は、マスタ・ブロックデバイス制御装置によって管理されるエクステント毎に、当該マスタ・ブロックデバイス制御装置に含まれる統計情報管理部２１５によって管理されている。また、統計情報は、例えばエクステント単位での過去数回分のＩ／Ｏ情報（リード／ライト種別、エクステント内オフセットアドレス及びサイズ等）履歴及びキャッシュ・ディレクトリ２３５の全てのスロット３０６単位のスロット・セクタ範囲に対するリード／ライトの割合を含む。
【０１１０】
上記したキャッシュ・ディレクトリ管理部２１６による対象スロット３０６に対して使用されるモードの交換についての判定処理の具体例について説明する。
【０１１１】
まず、対象スロット３０６に対して使用されているモードがポインタモードである場合を想定する。この場合には、キャッシュ・ディレクトリ管理部２１６は、例えば統計情報に基づいて、対象スロット３０６のスロット・セクタ範囲に対するリードの割合が予め定められた閾値を超えている場合は、当該対象スロット３０６のモードをポインタモードからビットマップモードに交換すると判定する。
【０１１２】
一方、対象スロット３０６に対して使用されているモードがビットマップモードである場合を想定する。この場合には、キャッシュ・ディレクトリ管理部２１６は、キャッシュ・ディレクトリ２３５に登録されるエクステント・リード要求領域（アクセス範囲）と対象スロット３０６のスロット・セクタ範囲が重なる領域を記録するために記録粒度が適切でない（正確に記録できない場合）、例えば対象スロット３０６のディレクトリ・エントリ３０４の１ビットに相当するデータ領域のサイズ（当該スロット・セクタ範囲のサイズの３２分の１）の整数倍とならない場合には、対象スロット３０６をビットマップモードからポインタモードに交換すると判定する。記録粒度とは、上記した図６で説明したようなディレクトリ・エントリにおける１ビットあたりのセクタ数である。
【０１１３】
なお、対象スロット３０６に対して使用されるモードがビットマップモードからポインタモードに交換されると、当該対象スロット３０６より下位層のデータ構造のためにキャッシュ・ディレクトリ２３５に必要な領域が増加する。つまり、ビットマップモードからポインタモードに交換されることにより対象スロット３０６より下位の層に節３０２（または葉３０３）が作成されるため、当該作成された節３０２（または葉３０３）のための領域を確保する必要があるため、キャッシュ・ディレクトリ２３５に必要な領域が増加する。このため、上記したようにキャッシュ・ディレクトリ２３５に登録されるエクステント・リード要求領域と対象スロット３０６のスロット・セクタ範囲が重なる領域を正確に記録するために記録粒度が適切でないときであっても、例えばビットマップモードからポインタモードに交換することによって増加するメモリ領域を、メモリ２３内に確保できない場合には交換しないと判定される。
【０１１４】
対象スロット３０６に対して使用されているモードをビットマップモードからポインタモード（または、ポインタモードからビットマップモード）に交換すると判定された場合（ステップＳ３２のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対して使用されるモードの交換処理を実行する（ステップＳ３３）。このとき、キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対して使用されるモードの交換に応じて、対象スロット３０６に対応するスロット状態フラグ３０５を交換（変更）する。
【０１１５】
つまり、キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対して使用されるモードを交換することにより、対象スロット３０６を頂点とする部分木及び対象スロット３０６のスロット・セクタ範囲を包括するデータ領域を示すディレクトリ・エントリ３０４を交換する。これにより、対象スロット３０６が属する層より下位層のデータ構造が変わるため、例えばエクステント・リード要求領域（アクセス範囲）をキャッシュ・ディレクトリ２３５に記録する際、対象スロット３０６のスロット・セクタ範囲と重なる範囲の記録粒度を変更することができる。
【０１１６】
次に、キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対して使用されるモードがポインタモードであるか否かを判定する（ステップＳ３４）。この場合、例えば上記したステップＳ３３において対象スロット３０６に対して使用されるモードが交換されている場合には、当該交換後のモードについて判定される。キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対応するスロット状態フラグ３０５を参照して判定処理を実行する。
【０１１７】
対象スロット３０６に対して使用されるモードがポインタモードであると判定された場合（ステップＳ３４のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は、当該対象スロット３０６に格納されているポインタの参照先が葉３０３であるか否かを判定する（ステップＳ３５）。
【０１１８】
対象スロット３０６に格納されているポインタの参照先が葉３０３でないと判定された場合（ステップＳ３５のＮＯ）、キャッシュ・ディレクトリ管理部２１６は、当該ポインタの参照先となる節３０２に属するスロット配列（要素数３２）のうち、未処理のエクステント・リード要求領域と重なるスロット・セクタ範囲を持つスロット３０６を選定する（ステップＳ３６）。
【０１１９】
ステップＳ３６の処理が実行されると、選定されたスロット３０６を対象スロット３０６として上記したステップＳ３２の処理が実行される。
【０１２０】
一方、ステップＳ３２において対象スロット３０６に対して使用されるモードを交換しないと判定された場合、ステップＳ３４の処理が実行される。
【０１２１】
また、ステップＳ３４において対象スロット３０６に対して使用されるモードがポインタモードでない、つまり、ビットマップモードであると判定された場合、当該対象スロット３０６はディレクトリ・エントリとして使用されるので、キャッシュ・ディレクトリ管理部２１６は、当該ディレクトリ・エントリにおいてエクステント・リード要求領域に含まれる領域を示す全てのビットに「１」を設定（登録）する（ステップＳ３８）。これにより、エクステント・リード要求領域の一部あるいは全部に対してアクセスがあったことがキャッシュ・ディレクトリ２３５に登録される。
【０１２２】
ステップＳ３８の処理が実行されると、キャッシュ・ディレクトリ管理部２１６は、エクステント・リード要求領域（アクセス範囲）の全てについてキャッシュ・ディレクトリ２３５に対してアクセス範囲登録処理が完了したか否かを判定する（ステップＳ３９）。
【０１２３】
エクステント・リード要求領域の全てについて登録処理が完了していないと判定された場合（ステップＳ３９のＮＯ）、未処理のエクステント・リード要求領域に関してステップＳ３１の処理が実行される。一方、エクステント・リード要求領域の全てについて登録処理が完了したと判定された場合（ステップＳ３９のＹＥＳ）、処理は終了される。
【０１２４】
また、ステップＳ３５において対象スロット３０６に格納されているポインタの参照先が葉３０３であると判定された場合（ステップＳ３５のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は当該葉３０３を構成する要素数３２のディレクトリ・エントリにおいて、未処理のエクステント・リード要求領域と重なる領域を管理するディレクトリ・エントリを選定する（ステップＳ３７）。当該ディレクトリ・エントリに対してステップＳ３８の処理が実行される。
【０１２５】
ここで、図１２及び図１３を参照して、対象スロット３０６に対して使用されるモードの交換処理について具体的に説明する。
【０１２６】
図１２は、例えば第１層の根３０１または第２層の節３０２を構成する対象スロット３０６に対して使用されるモードの交換処理について示す。ここでは、対象スロット３０６は、根３０１を構成するスロットであるものとして説明する。
【０１２７】
例えば対象スロット３０６に対して使用されているモードがビットマップモード（スロット状態フラグが「１」）である場合を想定する。この場合、図１０に示すように、ビットマップモードで使用される対象スロット３０６の値が「０ｘＣ００００００２」であるものとする。この「０ｘＣ００００００２」のうちの「Ｃ００００００２」は１６進数表記であり、これを２進数表記した場合には「１１００００００００００００００００００００００００００００１０」となり、３２ビットのビットマップを示している。つまり、この対象スロット３０６においては、インデックス１、３０及び３１のビットに相当する領域へのアクセスがあったことが登録されている。
【０１２８】
この対象スロット３０６に対して使用されているモードを、ビットマップモードからポインタモードに交換する場合を想定する。この場合、対象スロット３０６には、当該対象スロット３０６が属する根３０１の下位層となる節３０２を示すポインタが格納される。この節３０２は、要素数３２のスロット３０６から構成される。
【０１２９】
図１２に示すように、ビットマップモードからポインタモードに交換された場合、節３０２を構成する要素数３２のスロット３０６は、例えば全てビットマップモード（スロット状態フラグが「１」）とする。また、節３０２を構成する要素数３２のスロット３０６のうち、ビットマップモード時にビットが「１」であったインデックス（ここでは、インデックス１、３０及び３１）に相当するスロット３０６の値は、「０ｘｆｆｆｆｆｆｆｆ」とする。この「０ｘｆｆｆｆｆｆｆｆ」のうち、「ｆｆｆｆｆｆｆｆ」は１６進数表記であり、これを２進数表記にすると「１１１１１１１１１１１１１１１１１１１１１１１１１１１１１１１１（３２ビット）」となる。つまり、ビットマップモードでは、１ビットでアクセスがあったことを示していた領域を、ポインタモードでは、３２ビットで同じ領域について示している。これにより、同じ領域において、ビットマップモードからポインタモードに交換された場合でも記録範囲の正確性を損なうことなく記録粒度が変更される。
【０１３０】
同様に、節３０２を構成する要素数３２のスロット３０６のうち、ビットマップモード時にビットが「０」であったインデックス（ここでは、インデックス１、３０及び３１以外）に相当するスロット３０６の値は、「０ｘ００００００００」とする。この「０ｘ００００００００」のうち、「００００００００」は１６進数表記であり、これを２進数表記にすると「００００００００００００００００００００００００００００００００（３２ビット）」となる。つまり、ビットマップモードでは、１ビットでアクセスがないことを示していた領域を、ポインタモードでは、３２ビットで同じ領域について示している。これにより同じ領域において、ビットマップモードからポインタモードに交換された場合でも記録範囲の正確性を損なうことなく記録粒度が変更される。
【０１３１】
つまり、ビットマップモードからポインタモードへの交換により、例えば対象スロット３０６は、ディレクトリ・エントリから下位層に節３０２を有する部分木（の頂点）に交換される。これにより、記録粒度は、ビットマップモードである場合と比較して細かく変更される。
【０１３２】
ここで、例えば第ｎ層（ｎ＝１または２）のビットマップモードのスロットは１ビットあたり「２＾（５×（４−ｎ））」セクタのディレクトリ・エントリである。例えば第１層の根３０１のビットマップモードのスロットでは、１ビットあたり３２７６８セクタのディレクトリ・エントリとなる。一方、例えば第２層の節３０２のビットマップモードのスロットでは、１ビットあたり１０２４セクタのディレクトリ・エントリとなる。
【０１３３】
例えば第１層の根３０１を構成するスロットに対して使用されるモードをビットマップモードからポインタモードに交換すると、第２層の節３０２のビットマップモードのスロットが作成される。この第２層の節３０２に属するスロットに対してアクセス範囲（リード要求領域）が記録されるため、上記したように記録粒度（１ビットあたりのセクタ数）が変更される。
【０１３４】
一方、例えば対象スロット３０６に対して使用されているモードがポインタモード（スロット状態フラグが「０」）であって、当該対象スロット３０６に対して使用されているモードをポインタモードからビットマップモードに交換する場合を想定する。この場合は、上記したビットマップモードからポインタモードに交換される場合と逆の処理が実行される。
【０１３５】
つまり、このポインタモードからビットマップモードへの交換により、例えば対象スロット３０６は、下位層に節３０２を有する部分木（の頂点）から当該部分木に相当する範囲を包括するデータ領域を示すディレクトリ・エントリに交換される。これにより、記録粒度は、ポインタモードである場合と比較して粗く変更される。
【０１３６】
図１３は、例えば第３層の節３０２を構成する対象スロット３０６に対して使用されるモードの交換処理について示す。
【０１３７】
例えば対象スロット３０６に対して使用されているモードがビットマップモード（スロット状態フラグが「１」）である場合を想定する。この場合、図１３に示すように、ビットマップモードで使用される対象スロット３０６の値が「０ｘＣ００００００２」であるものとする。
【０１３８】
この対象スロット３０６に対して使用されているモードを、ビットマップモードからポインタモードに交換する場合を想定する。この場合、対象スロット３０６には、当該対象スロット３０６が属する節３０２の下位層となる葉３０３を示すポインタが格納される。この葉３０３は、要素数３２のディレクトリ・エントリ３０４から構成される。
【０１３９】
葉３０３を構成する要素数３２のディレクトリ・エントリ３０４のうち、ビットマップモード時にビットが「１」であったインデックス（ここでは、インデックス１、３０及び３１）に相当するディレクトリ・エントリの値は、「１１１１１１１１１１１１１１１１１１１１１１１１１１１１１１１１（３２ビット）」とする。つまり、図１２において説明したのと同様に、ビットマップモードでは、１ビットでアクセスがあったことを示していた領域を、ポインタモードでは、３２ビットで同じ領域について示している。これにより、同じ領域において、ビットマップモードからポインタモードに交換された場合でも記録範囲の正確性を損なうことなく記録粒度が変更される。
【０１４０】
同様に、葉３０３を構成する要素数３２のディレクトリ・エントリ３０４のうち、ビットマップモード時にビットが「０」であったインデックス（ここでは、インデックス１、３０及び３１以外）に相当するディレクトリ・エントリの値は、「００００００００００００００００００００００００００００００００（３２ビット）」とする。つまり、ビットマップモードでは、１ビットでアクセスがないことを示していた領域を、ポインタモードでは、３２ビットで同じ領域について示している。これにより、同じ領域において、ビットマップモードからポインタモードに交換された場合でも記録範囲の正確性を損なうことなく記録粒度が変更される。
【０１４１】
つまり、ビットマップモードからポインタモードへの交換により、例えば対象スロット３０６は、ディレクトリ・エントリから下位層に葉３０３を有する部分木（の頂点）に交換される。これにより、記録粒度は、ビットマップモードである場合と比較して細かく変更される。
【０１４２】
例えば第３層の節３０２を構成するスロットに対して使用されるモードをビットマップモードからポインタモードに交換すると、第４層の葉３０３を構成するディレクトリ・エントリが作成される。この第４層の葉３０３に属するスロットに対してアクセス範囲（リード要求領域）が記録されるため、上記したように記録粒度（１ビットあたりのセクタ数）が変更される。
【０１４３】
一方、例えば対象スロット３０６に対して使用されているモードがポインタモード（スロット状態フラグが「０」）であって、当該対象スロット３０６に対して使用されているモードをポインタモードからビットマップモードに交換する場合を想定する。この場合は、上記したビットマップモードからポインタモードに交換される場合と逆の処理が実行される。
【０１４４】
つまり、このポインタモードからビットマップモードへの交換により、例えば対象スロット３０６は、下位層に葉３０３を有する部分木（の頂点）からスロット・セクタ範囲に相当する範囲を包括するデータ領域を示すディレクトリ・エントリに交換される。これにより、記録粒度はポインタモードである場合と比較して粗く変更される。
【０１４５】
図１２及び図１３において説明したように、ポインタモードのスロットをビットマップモードのスロットに交換することで、下位層のデータ構造（例えば節３０２または葉３０３）のためのメモリ２３の領域を節約することが可能である。しかしながら、このとき記録範囲の正確性が損なわれることがある。
【０１４６】
例えばセクタ範囲「０ｘ０ＦＣ００〜０ｘ０ＦＦＦＦ」に相当する第３層の節３０２のポインタモードで使用されているスロット３０６がある場合を想定する。この場合、このスロット３０６に格納されているポインタの参照先の葉３０３のディレクトリ、エントリ配列のうち、インデックス０の要素が「０ｘｆｆｆｆｆｆｆｆ」、インデックス１の要素が「０ｘ１」、その他の要素が「０」であるとき、記録されたアクセス範囲は「０ｘ０ＦＣ００〜０ｘ０ＦＣ２０」である。このとき、第３層の節３０２に属するスロット３０６に対して使用されているポインタモードをビットマップモードに交換して、スロット３０６の値を「０ｘ３（アクセス範囲は「０ｘ０ＦＣ００〜０ｘ０ＦＣ３Ｆ」）」、あるいは０ｘ１（アクセス範囲は「０ｘ０ＦＣ００〜０ｘ０ＦＣ１Ｆ」）」とすると、記録範囲の正確性が損なわれる。
【０１４７】
次に、図１４に示すフローチャートを参照して、ブロックデバイス制御装置２０におけるライト要求受信処理について説明する。ライト要求には、当該ライト要求に応じてアクセスされるＬＵ識別するＬＵＮ、当該ＬＵのブロックアドレス、当該ライト要求に応じてアクセスされるデータのサイズ及び当該ライト要求に応じて書き込まれるデータ（ライトデータ）が含まれる。また、ライト要求には、当該ライト要求を送信したイニシエータ（例えばホスト１０またはブロックデバイス制御装置２０）のアドレスが含まれる。
【０１４８】
まず、ブロックデバイス制御装置２０に含まれるホストＩ／Ｆ制御部２１１は、ホストＩ／Ｆ２５を制御することによって、ライト要求及びライトデータを受信する。ホストＩ／Ｆ制御部２１１は、受信されたライト要求をＩ／Ｏ処理部２１７に渡す（ステップＳ４１）。Ｉ／Ｏ処理部２１７は、ホストＩ／Ｆ制御部２１１によって渡されたライト要求に含まれるＬＵＮ、ブロックアドレス及びサイズに基づいて指定される範囲（以下、イニシエータ・ライト要求領域と表記）に該当するキャッシュブロックをキャッシュメモリ管理部２１４に対して問い合わせ、キャッシュメモリ管理部２１４は、問い合わせに応じてキャッシュメモリ２３３からキャッシュブロックを特定する（ステップＳ４２）。
【０１４９】
キャッシュメモリ管理部２１４は、特定されたキャッシュブロック内のイニシエータ・ライト要求領域の排他的使用権を獲得し（ステップＳ４３）、ステップＳ４１で受信したライトデータを特定されたキャッシュブロックへ格納する（ステップＳ４４）。これによりライトデータはキャッシュされる。なお、マスタ・ブロックデバイス制御装置のライト要求受信処理において、キャッシュブロックはライト・バック・キャッシュとして使用される。よって、ディスクアレイに対するライトデータのライト処理は、ここで説明する図１４に示す処理とは非同期に実行される。
【０１５０】
上記したリード要求受信処理と同様に、Ｉ／Ｏ処理部２１７は構成情報管理部２１３を介してルーティングテーブル２３１を参照し、イニシエータ・ライト要求領域に該当する全てのエクステントを特定して、それぞれに対して以下のステップＳ４５〜Ｓ４８、Ｓ５１を実行する。
【０１５１】
Ｉ／Ｏ処理部２１７は、ルーティングテーブル２３１を参照して、イニシエータ・ライト要求領域内の未処理の領域と重なる一つのエクステントを特定する（ステップＳ４５）。Ｉ／Ｏ処理部２１７は、特定されたエクステントを管理するブロックデバイス制御装置２０（マスタ・ブロックデバイス制御装置）を特定する。
【０１５２】
当該エクステントのマスタ・ブロックデバイス制御装置がライト要求を受信したブロックデバイス制御装置２０（自装置）であるかどうか判定し（ステップＳ４６）、自装置であった場合（ステップＳ４６のＹＥＳ）はマスタ・ブロックデバイス制御装置におけるライト要求受信処理が実行され（ステップＳ５１）、自装置でない場合（ステップＳ４６のＮＯ）にはスレーブ・ブロックデバイス制御装置におけるライト要求処理が実行される（ステップＳ４７）。なお、ステップＳ５１及びＳ４７の処理は何れもイニシエータ・ライト要求領域と当該エクステントのブロックアドレス範囲が重なる領域（以下、エクステント・ライト要求領域と表記）に関して処理が実行される。
【０１５３】
イニシエータ・ライト要求領域における全ての領域の処理を完了したかどうか判定し（ステップＳ４８）、処理が完了していなければ（ステップＳ４８のＮＯ）未処理の領域に関してステップＳ４５から実行する。
【０１５４】
ホストＩ／Ｆ制御部２１１は、上記した処理に対するステータスを、イニシエータ（例えばホスト１０）に対して転送する（ステップＳ４９）。
【０１５５】
ホストＩ／Ｆ制御部２１１によってステータスが転送されると、キャッシュメモリ管理部２１４は、当該キャッシュブロック内のイニシエータ・ライト要求領域の排他的使用権を放棄して処理を完了する（ステップＳ５０）。
【０１５６】
図１５に示すフローチャートを参照して、スレーブ・ブロックデバイス制御装置におけるライト要求受信処理（図１４に示すステップＳ４７）の処理手順について説明する。
【０１５７】
Ｉ／Ｏ処理部２１７は、ホストＩ／Ｆ制御部２１１を介して、エクステント・ライト要求領域に関するライト要求を当該エクステントのマスタ・ブロックデバイス制御装置に対して転送する（ステップＳ６１）。なお、マスタ・ブロックデバイス制御装置のアドレスを示すアドレス情報は、上記したようにルーティングテーブル２３１に保持されている。
【０１５８】
その後、マスタ・ブロックデバイス制御装置からステータスが転送されるまで待機する（ステップＳ６２）。
【０１５９】
マスタ・ブロックデバイス制御装置からステータスを受信すると、ステップＳ４２で特定したキャッシュブロックにおけるエクステント・ライト要求領域に該当するキャッシュデータを破棄して（ステップＳ６３）、処理を完了する。
【０１６０】
図１６に示すフローチャートを参照して、マスタ・ブロックデバイス制御装置におけるライト要求受信処理（図１４に示すステップＳ５１）の処理手順について説明する。
【０１６１】
Ｉ／Ｏ処理部２１７は、エクステント・ライト要求領域に関して統計情報管理部２１５を介して統計情報の更新処理を実行する（ステップＳ７１）。
【０１６２】
次に、キャッシュ・ディレクトリ管理部２１６は、エクステント及びスレーブ・ブロックデバイス制御装置単位で管理されているキャッシュ・ディレクトリ２３５に対して、当該エクステント・ライト要求領域に対する全てのイニシエータからのアクセス記録を消去するためにアクセス範囲削除処理を実行する。つまり、当該エクステントに関する記録が存在する（過去にアクセスしたことがある）スレーブ・ブロックデバイス制御装置を選定し、当該エクステントと選定された全てのスレーブ・ブロックデバイス制御装置の組み合わせによって特定したキャッシュ・ディレクトリ２３５に対して、当該エクステント・ライト要求領域に関するアクセス範囲削除処理を実行する（ステップＳ７２）。キャッシュ・ディレクトリ管理部２１６は、例えばライト要求または統計情報格納部２３４に格納されている統計情報に基づいて、アクセス範囲削除処理を実行する。
【０１６３】
キャッシュメモリ管理部２１４は、ステップＳ７２におけるアクセス範囲削除処理において、当該イニシエータを除いて、少なくとも1セクタの範囲を削除した全てのスレーブ・ブロックデバイス制御装置に対して、コヒーレント処理を実行する（ステップＳ７３）。キャッシュメモリ管理部２１４は、通信部２１８を介してエクステント・ライト要求領域に応じたＬＵＮ、ブロックアドレス及びサイズを含む通信データを当該スレーブ・ブロックデバイス制御装置に対して送信する。マスタ・ブロックデバイス制御装置から送信されたデータを受信した他のブロックデバイス制御装置２０は、通信部２１８から通信データがキャッシュメモリ管理部２１４に渡され、当該受信された通信データに含まれるＬＵＮ、ブロックアドレス及びサイズに対応するキャッシュブロックを特定し、当該キャッシュブロックに格納され、通信データで指定される範囲に対応するキャッシュデータを破棄する。これにより、コヒーレント処理が完了される。なお、コヒーレント処理により送信される通信データは、ＬＵＮと上記のアクセス範囲削除処理によって削除された範囲のみを含んでもいても良い。
【０１６４】
次に、図１７に示すフローチャートを参照して、上記したアクセス範囲削除処理（図１６に示すステップＳ７２）の処理手順について詳細に説明する。なお、アクセス範囲削除処理においては、エクステント・ライト要求領域を示すＬＵ内のブロックアドレス、サイズはエクステント内のオフセットアドレス、サイズへと変換して実行される。
【０１６５】
まず、キャッシュ・ディレクトリ管理部２１６は、当該スレーブ・ブロックデバイス制御装置と当該エクステントに対応するキャッシュ・ディレクトリ２３５を選定し、構成する根３０１を特定する（ステップＳ８１）。キャッシュ・ディレクトリ２３５は、上記したように例えば根３０１、２つの節３０２及び葉３０３の４つの層から構成される。この根３０１、２つの節３０２及び葉３０３の４つの層で使用するメモリ領域は、例えばブロックデバイス制御装置２０内のメモリ２３において予め静的に確保した配列状のメモリ領域の要素を動的に取捨することで確保または解放される。
【０１６６】
キャッシュ・ディレクトリ管理部２１６は、特定された根３０１を構成するスロット３０６を対象スロット３０６とする。以降の処理は対象スロット３０６を変更しながら、エクステント・ライト要求領域の未処理領域と対象スロット３０６を頂点とする部分木で管理される範囲（スロット・セクタ範囲）が重なる領域に関する削除処理を繰り返す。
【０１６７】
キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６が使用されているモードを交換（変更）するか否かを判定する（ステップＳ８２）。つまり、例えば対象スロット３０６に対して使用されるモードがビットマップモードである場合には、当該対象スロット３０６に対して使用されるモードを例えばビットマップモードからポインタモードに交換するか否かが判定される。一方、例えば対象スロット３０６に対して使用されるモードがポインタモードである場合には、当該対象スロット３０６に対して使用されるモードを例えばポインタモードからビットマップモードに交換するか否かが判定される。
【０１６８】
キャッシュ・ディレクトリ管理部２１６は、受信されたライト要求及びアクセス対象となるエクステントに対応する統計情報に基づいて判定処理を実行する。統計情報は、上記した図１１で説明したアクセス範囲登録処理で使用される統計情報と同一である。
【０１６９】
上記したキャッシュ・ディレクトリ管理部２１６による対象スロット３０６に対して使用されるモードの交換についての判定処理の具体例について説明する。
【０１７０】
まず、対象スロット３０６に対して使用されているモードがポインタモードである場合を想定する。この場合には、キャッシュ・ディレクトリ管理部２１６は、例えば受信されたライト要求がシーケンシャルライトである場合（統計情報に含まれるエクステントに対する過去数回分のＩ／Ｏ情報から判断される）には、対象スロット３０６に対して使用されるモードをポインタモードからビットマップモードに交換すると判定する。
【０１７１】
一方、対象スロット３０６に対して使用されているモードがビットマップモードである場合を想定する。この場合には、キャッシュ・ディレクトリ管理部２１６は、キャッシュ・ディレクトリ２３５に登録されるエクステント・ライト要求領域（アクセス範囲）と対象スロット３０６のスロット・セクタ範囲が重なる領域を記録するために記録粒度が適切でない（正確に記録できない場合）、例えば対象スロット３０６のディレクトリ・エントリ３０４の１ビットに相当するデータ領域のサイズ（当該スロット・セクタ範囲のサイズの３２分の１）の整数倍とならない場合には、対象スロット３０６をビットマップモードからポインタモードに交換すると判定する。記録粒度とは、上記した図６で説明したようなディレクトリ・エントリにおける１ビットあたりのセクタ数である。
【０１７２】
なお、対象スロット３０６に対して使用されるモードがビットマップモードからポインタモードに交換されると、上述したように、当該対象スロット３０６より下位層のデータ構造のためにキャッシュ・ディレクトリ２３５に必要な領域が増加する。このため、例えばエクステント・ライト要求領域と対象スロット３０６のスロット・セクタ範囲が重なる領域を正確に記録するために記録粒度が適切でないときであっても、例えばビットマップモードからポインタモードに交換することによって増加するメモリ領域をメモリ２３内に確保できない場合には交換しないと判定される。
【０１７３】
対象スロット３０６に対して使用されているモードをビットマップモードからポインタモード（または、ポインタモードからビットマップモード）に交換すると判定された場合（ステップＳ８２のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対して使用されるモードの交換処理を実行する（ステップＳ８３）。このとき、キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対して使用されるモードの交換に応じて、対象スロット３０６に対応するスロット状態フラグ３０５を交換（変更）する。対象スロット３０６に対して使用されるモードを交換することにより、当該対象スロット３０６が属する層より下位層のデータ構造が変わるため、例えばエクステント・ライト要求領域（アクセス範囲）をキャッシュ・ディレクトリ２３５に記録する際、対象スロット３０６のスロット・セクタ範囲と重なる範囲の記録粒度を変更することができる。
【０１７４】
次に、キャッシュ・ディレクトリ管理部２１６対象スロット３０６に対して使用されるモードがポインタモードであるか否かを判定する（ステップＳ８４）。この場合、例えば上記したステップＳ８３において対象スロットに対して使用されるモードが交換されている場合には、当該交換後のモードについて判定される。キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対応するスロット状態フラグ３０５を参照して判定処理を実行する。
【０１７５】
対象スロット３０６に対して使用されるモードがポインタモードであると判定された場合（ステップＳ８４のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は、当該対象スロット３０６に格納されているポインタの参照先が葉３０３であるか否かを判定する（ステップＳ８５）。
【０１７６】
対象スロット３０６に格納されているポインタの参照先が葉３０３でないと判定された場合（スロットＳ８５のＮＯ）、キャッシュ・ディレクトリ管理部２１６は、当該ポインタの参照先となる節３０２に属するスロット配列（要素数３２）のうち、未処理のエクステント・ライト要求領域に重なるスロット・セクタ範囲を持つスロット３０６を選定する（ステップＳ８６）。
【０１７７】
ステップＳ８６の処理が実行されると、選定されたスロット３０６を対象スロット３０６として上記したステップＳ８２の処理が実行される。
【０１７８】
一方、ステップＳ８２において対象スロット３０６に対して使用されるモードがポインタモードでない、つまり、ビットマップモードであると判定された場合、当該対象スロット３０６はディレクトリ・エントリとして使用されるので、キャッシュ・ディレクトリ管理部２１６は、当該ディレクトリ・エントリにおいてエクステント・ライト要求領域に含まれる領域を示す全てのビットに「０」を設定（削除）する（ステップＳ８８）。これにより、エクステント・ライト要求領域の一部あるいは全部に対してアクセスがないことがキャッシュ・ディレクトリ２３５に登録される。つまり、キャッシュ・ディレクトリ２３５にアクセスがあったとして記録（登録）されていたエクステント・ライト要求領域（アクセス範囲）の一部あるいは全部が削除される。
【０１７９】
ステップＳ８８の処理が実行されると、キャッシュ・ディレクトリ管理部２１６は、エクステント・ライト要求領域（アクセス範囲）の全てについてキャッシュ・ディレクトリ２３５に対してアクセス範囲削除処理が完了したか否かを判定する（ステップＳ８９）。
【０１８０】
エクステント・ライト要求領域の全てについて削除処理が完了していないと判定された場合（ステップＳ８９のＮＯ）、未処理のエクステント・ライト要求領域に関してステップＳ８１の処理が実行される。一方、エクステント・ライト要求領域の全てについて削除処理が完了したと判定された場合（ステップＳ８９のＹＥＳ）、処理は終了される。
【０１８１】
また、ステップＳ８５において対象スロット３０６に格納されているポインタの参照先が葉３０３であると判定された場合（ステップＳ８５のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は、当該葉３０３を構成する要素数３２のディレクトリ・エントリにおいて、未処理のエクステント・ライト要求領域と重なる領域を管理するディレクトリ・エントリを選定する（ステップＳ８７）。当該ディレクトリ・エントリに対してステップＳ８８の処理が実行される。
【０１８２】
次に、図１８のフローチャートを参照して、統計情報更新処理（図１０に示すステップＳ２１及び図１６に示すステップＳ７１）について詳細に説明する。なお、統計情報更新処理においては、エクステント・リード要求領域またはエクステント・ライト要求領域を示すＬＵ内のブロックアドレス、サイズは、エクステント内のオフセットアドレス、サイズへと変換して実行される。
【０１８３】
ここで、統計情報管理部２１５において管理される統計情報は、例えばメモリ２３上に予め静的に確保された配列上のメモリ領域の要素のいくつかが連結することで構成される。
【０１８４】
統計情報は、エクステント単位で管理されるＩ／Ｏ履歴記録テーブルと、キャッシュ・ディレクトリ２３５におけるスロット単位で管理されるリードカウンタによって構成される。
【０１８５】
Ｉ／Ｏ履歴テーブルには、エクステントへのアクセスに関するリード・ライト種別、エクステント内のオフセットアドレス及びサイズが例えば過去５回分記録され、この履歴を参照することにより、例えばホスト１０からのエクステントに対するアクセスがシーケンシャルライトであるか否かを判断できる。
【０１８６】
スロット単位のリードカウンタは、例えば幅が８ビットあり、３２個単位で管理される（以下、リードカウンタエントリと表記）。リードカウンタエントリは、例えばキャッシュ・ディレクトリ２３５を構成する根３０１、節３０２または葉３０３として使用されるそれぞれのメモリ領域と１対１に対応している。本実施形態では、例えばキャッシュ・ディレクトリ２３５で使用されるメモリ領域と同様に、リードカウンタエントリはメモリ２３上に配列として配置されており、根３０１、節３０２または葉３０３のメモリ２３上のアドレスから各々対応するリードカウンタエントリのアドレスを線形計算で求めることが可能である。
【０１８７】
図１８のフローチャートを参照すると、まず、統計情報管理部２１５は、エクステント識別子によってＩ／Ｏ履歴テーブルを選択する。統計情報管理部２１５は、リード・ライト種別、エクステントオフセットアドレス及びサイズを、選択されたＩ／Ｏ履歴テーブルに対して記録する（ステップＳ９１）。
【０１８８】
次に、統計情報管理部２１５は、エクステント及びスレーブ・ブロックデバイス制御装置単位で管理されている全てのキャッシュ・ディレクトリ２３５を、キャッシュ・ディレクトリ管理部２１６を介して参照する。統計情報管理部２１５は、キャッシュ・ディレクトリ２３５を参照することにより、アクセス範囲（例えばエクステント・リード要求領域またはエクステント・ライト要求領域）であるエクステントに対するアクセス記録が存在する（つまり、過去にアクセスしたことがある）スレーブ・ブロックデバイス制御装置を選定する。選定された全てのスレーブ・ブロックデバイス制御装置とアクセス範囲であるエクステントの組み合せによって特定されるキャッシュ・ディレクトリ２３５に対して、以下のステップＳ９２以降の処理が実行される。
【０１８９】
まず、キャッシュ・ディレクトリ管理部２１６は、例えば選定された全てのスレーブ・ブロックデバイス制御装置とアクセス範囲であるエクステントの組合せによって特定されたキャッシュ・ディレクトリ２３５のうち、未処理であるキャッシュ・ディレクトリ（対象キャッシュ・ディレクトリ）２３５を選定する（ステップＳ９２）。
【０１９０】
キャッシュ・ディレクトリ管理部２１６は、選定した対象キャッシュ・ディレクトリ２３５を構成する根３０１及び当該根３０１に対応するリードカウンタエントリを特定する（ステップＳ９３）。ここで、キャッシュ・ディレクトリ管理部２１６によって特定された３０１を構成するスロット３０６を対象スロット３０６とする。また、キャッシュ・ディレクトリ管理部２１６によって特定されたリードカウンタエントリを対象リードカウンタエントリとする。上記したように、対象リードカウンタエントリは、根３０１のアドレスから線形計算によって特定される。
【０１９１】
以降の処理は、対象スロット３０６及び対象リードカウンタエントリを変更しながら、エクステント・リード要求領域あるいはエクステント・ライト要求領域の未処理領域と対象スロット３０６を頂点とする部分木で管理される範囲（スロット・セクタ範囲）が重なる領域に関する統計情報更新処理が繰り返される。
【０１９２】
また、これらの処理の中で、対象スロットの根３０１または節３０２における対象スロットのインデックスと、対象リードカウンタエントリにおける対象リードカウンタのインデックスは同一である。
【０１９３】
キャッシュ・ディレクトリ管理部２１６は、対象リードカウンタが統計情報更新処理において既に更新済みであるか否かを、統計情報管理部２１５を介して判定（検査）する（ステップＳ９４）。
【０１９４】
対象リードカウンタが更新済みでない場合（ステップＳ９４のＮＯ）、対象リードカウンタを更新し、更新済みとする（ステップＳ９５）。
【０１９５】
具体的には、まず当該エクステント・リード要求領域あるいは当該エクステント・ライト要求領域と対象スロットのスロット・セクタ範囲とが重なる領域のサイズを３２で除算した値（小数点以下は切捨て）を算出する。リード要求受信処理から実行された統計情報更新処理においては、当該値を対象リードカウンタに加算する（最大値は２５５とする）。一方、ライト要求受信処理から実行された統計情報更新処理においては、当該値を対象リードカウンタに減算する（最小値は０とする）。
【０１９６】
つまり、対象リードカウンタの値が増加する場合、対象スロットのスロット・セクタ範囲内へのリードアクセスが最近発生したことを示す。一方、対象リードカウンタの値が減少する場合、対象スロットのスロット・セクタ範囲内へのライトアクセスが最近発生したことを示す。ただし、対象スロットをビットマップモードで使用した場合、ディレクトリ・エントリの１ビットも変更されないようなサイズの場合は除外する。
【０１９７】
次に、キャッシュ・ディレクトリ管理部２１６は、対象スロット３０６に対して使用されるモードがポインタモードであるか否かを判定する（ステップＳ９６）。
【０１９８】
対象スロット３０６に対して使用されるモードがポインタモードであると判定された場合（ステップＳ９６のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は、当該対象スロット３０６に格納されているポインタの参照先が葉３０３であるか否かを判定する（ステップＳ９７）。
【０１９９】
対象スロット３０６に格納されているポインタの参照先が葉３０３でナイト判定された場合（ステップＳ９７のＮＯ）、キャッシュ・ディレクトリ管理部２１６は、当該ポインタの参照先となる節３０２に属するスロット配列（要素数３２）のうち、未処理のエクステント・リード要求領域あるいはエクステント・ライト要求領域と重なるスロット・セクタ範囲を持つスロット３０６を選定する（ステップＳ９８）。
【０２００】
ステップＳ９８の処理が実行されると、選定されたスロット３０６を対象スロット３０６として、対象リードカウンタエントリ及び対象リードカウンタが特定され、上記したステップＳ９４の処理が実行される。
【０２０１】
一方、ステップＳ９４の処理において、対象リードカウンタが更新済みであると判定された場合、ステップＳ９６の処理が実行される。
【０２０２】
また、ステップＳ９６の処理において、対象スロット３０６に対して使用されるモードがポインタモードでない,つまり,ビットマップモードであると判定された場合（ステップＳ９６のＮＯ）,キャッシュ・ディレクトリ管理部２１６は,エクステント・リード要求領域あるいはエクステント・ライト要求領域の全てについて統計情報更新処理が完了したか否かを判定する（ステップＳ９９）。
【０２０３】
エクステント・リード要求領域あるいはエクステント・ライト要求領域の全てについて統計情報更新処理が完了していないと判定された場合（ステップＳ９９のＹＥＳ）、ステップＳ９３の処理が実行される。
【０２０４】
一方、エクステント・リード要求領域あるいはエクステント・ライト要求領域の全てについて統計情報更新処理が完了したと判定された場合（ステップＳ９９のＹＥＳ）、キャッシュ・ディレクトリ管理部２１６は、統計情報更新処理において更新済みとしたキャッシュ・ディレクトリに関する全てのリードカウンタを、統計情報管理部２１５を介して未更新とする。更に、アクセス範囲であるエクステントに過去アクセスしたことがあるスレーブ・ブロックデバイス制御装置によって選定されるキャッシュ・ディレクトリ２３５の全てについて統計情報更新処理が完了したか否かを判定する（ステップＳ１００）。
【０２０５】
選定されたキャッシュ・ディレクトリ２３５の全てについて統計情報更新処理が完了したと判定された場合（ステップＳ１００のＹＥＳ）、処理は終了される。一方、選定されたキャッシュ・ディレクトリ２３５の全てについて統計情報更新処理が完了していないと判定された場合（ステップＳ１００のＮＯ）、ステップＳ９２の処理が実行される。
【０２０６】
ここで、上記したように更新された統計情報を用いて対象スロット３０６が使用されているモードを交換するか否かを判定する処理について具体的に説明する。
【０２０７】
例えば上述した図１１に示すアクセス範囲登録処理のステップＳ３２について説明する。この場合においては、例えば対象スロット３０６に対応する対象リードカウンタエントリの対象リードカウンタエントリの対象リードカウンタを特定し、その値が閾値（例えば１００）を超えている場合、つまり、対象スロット３０６のスロット・セクタ範囲内への最近のリードの割合が高い場合には、ポインタモードからビットマップモードに交換すると判定される。
【０２０８】
一方、例えば上述した図１７に示すアクセス範囲削除処理のステップＳ８２について説明する。この場合においては、例えば統計情報管理部２１５を介してＩ／Ｏ履歴テーブルを参照することによりエクステントへのライトがシーケンシャルライトである場合には、ポインタモードからビットマップモードに交換すると判定される。
【０２０９】
上記したように本実施形態においては、マスタ・ブロックデバイス制御装置におけるリード要求受信処理またはライト要求受信処理の際に、キャッシュ・ディレクトリ２３５を構成するスロット３０６に対して使用されるモード（ビットマップモードまたはポインタモード）を交換することによって、当該キャッシュ・ディレクトリ２３５に対して記録されるアクセス範囲の記録粒度を部分的に変更することができる。これにより、本実施形態においては、例えば動的かつ選択的にキャッシュ・ディレクトリ２３５の一部または全部の記録粒度を粗くすることで、記録されたアクセス範囲に基づく処理または当該キャッシュ・ディレクトリ２３５を管理する処理を包括的に軽減する効果が得られる。また、スロット３０６に対して使用されるモードをポインタモードからビットマップモードに交換することで、キャッシュ・ディレクトリ２３５のために必要なメモリ領域を削減することも可能である。
【０２１０】
また、本実施形態においては、リードの割合が高いと判定された領域の記録粒度を粗くすることで、後続のリード要求受信処理におけるアクセス範囲登録処理でのディレクトリ探索の処理を軽減することが可能となる。
【０２１１】
また、本実施形態においては、ライト要求受信処理に伴うアクセス範囲削除処理において、当該ライト要求がシーケンシャルライトであると判定された領域の記録粒度を粗くすることで、コヒーレント処理の対象範囲を広げ、後続のライト要求受信処理で行わなければならないコヒーレント処理を省略することが可能となる。
【０２１２】
また、メモリ２３の領域が不足した場合には、記録粒度を粗くすることにより、当該不足した領域を確保することが可能となる。
【０２１３】
なお、本実施形態においては、キャッシュ・ディレクトリ２３５におけるスロット３０６に対して使用されるモードの交換は、アクセス範囲登録処理またはアクセス範囲削除処理に同期して実行されているが、当該処理と非同期に実行することも可能である。例えば、ＬＲＵ（Least Recent Used）方式で管理されたキャッシュ・ディレクトリ２３５を構成する節３０２または葉３０３において管理されている領域のうち、アクセス頻度の低い範囲を選定し、その範囲に該当するスロット３０６に対して使用されているモードをビットマップモードに交換することで、アクセス頻度が低い範囲の記録粒度を粗くすることが可能である。
【０２１４】
同様に、ＬＲＵ方式で管理されたキャッシュ・ディレクトリ２３５を構成する節３０２または葉３０３において管理されている領域のうち、アクセス頻度の高い範囲を選定し、その範囲に該当するビットマップモードで使用されているスロットのモードをポインタモードに交換することで、アクセス頻度が高い範囲の記録粒度を細かくすることが可能となる。
【０２１５】
つまり、アクセス頻度が低い範囲に関してはアクセスの局所性を考慮すると再アクセスされる可能性が低いため、例えばアクセス頻度が低い範囲に対しては記録粒度を粗くして記録を維持することでメモリ領域が削減でき、当該削減されたメモリ領域を記録粒度の細かさが必要となる例えばアクセス頻度の高い範囲の部分木に当てることができる。これにより、例えばアクセス頻度の高い範囲において、記録粒度の不足を起因とする不必要なコヒーレント処理の発生を抑止することが可能となる。
【０２１６】
［第２の実施形態］
図１９は、本発明の第２の実施形態に係るブロックデバイス制御装置４０を含むコンピュータシステムの構成を示すブロック図である。なお、図１と同様の部分には同一参照符号を付してその詳しい説明を省略する。ここでは、図１と異なる部分について主に述べる。また、ブロックデバイス制御装置４０のハードウェア構成は、前述したブロックデバイス制御装置２０と同様の構成であるため、図３を用いて説明する。
【０２１７】
このコンピュータシステムは、ホスト１０及びブロックデバイス制御装置４０を含む。当該舗装と１０及びブロックデバイス制御装置４０は互いに接続されている。
【０２１８】
ブロックデバイス制御装置４０は、例えばマスタ論理ユニット（マスタＬＵ）４０１及びバックアップ論理ユニット（バックアップＬＵ）４０２をペアで管理する。なお、ブロックデバイス制御装置４０は、マスタＬＵ４０１及びバックアップＬＵ４０２のペアを複数管理する構成でもよい。
【０２１９】
マスタＬＵ４０１は、例えばホスト１０からのアクセス要求（リード要求またはライト要求）に応じて、データの読み出しまたは書き込みが行われるＬＵである。
【０２２０】
一方、バックアップＬＵ４０２は、マスタＬＵ４０１に格納されているデータの複製を保持しておくＬＵである。
【０２２１】
ブロックデバイス制御装置４０は、前述した第１の実施形態に係るブロックデバイス制御装置２０と異なり、スナップショット機能を有する。スナップショット機能とは、例えばマスタＬＵ４０１に格納されている、ある時点での内容（データ）を、バックアップＬＵ４０２に複製する機能である。なお、バックアップＬＵ４０２に格納される、マスタＬＵ４０１に格納されているデータの複製（コピー）データをスナップショットデータと称する。
【０２２２】
上記したマスタＬＵ４０１及びバックアップＬＵ４０２は、ホスト１０からマスタＬＵ４０１のスナップショットデータ採取の要求（指示）があるまでは、同期状態にある。この同期状態時では、マスタＬＵ４０１及びバックアップＬＵ４０２（に格納されているデータ）の内容は同一である。また、ホスト１０からのライト要求に応じてマスタＬＵ４０１に書き込まれるデータ（ライトデータ）は、バックアップＬＵ４０２に対しても反映される。
【０２２３】
ブロックデバイス制御装置４０は、例えばホスト１０からのマスタＬＵ４０１のスナップショットデータ採取の要求を受けると、マスタＬＵ４０１及びバックアップＬＵ４０２の同期状態を解除する。同期状態が解除されると、バックアップＬＵ４０２がスナップショットデータとして使用できる。
【０２２４】
ブロックデバイス制御装置４０は、例えばホスト１０からの同期状態が解除されたマスタＬＵ４０１とバックアップＬＵ４０２に対する再同期化の要求を受けると、マスタＬＵ４０１に格納されているデータをバックアップＬＵ４０２へコピーする再同期化処理が実行される。
【０２２５】
図２０は、図１９に示すブロックデバイス制御装置４０の主として機能構成を示すブロック図である。ブロックデバイス制御装置４０は、ホストＩ／Ｆ制御部４１１、ディスクＩ／Ｆ制御部４１２、差分情報ディレクトリ４１３、Ｉ／Ｏ処理部４１４及びスナップショット管理部４１５を含む。本実施形態において、これらの各部４１１乃至４１５は、図３に示すＩ／Ｏプロセッサ２１がＲＯＭ２２に格納されているプログラムを実行することにより実現されるものとする。
【０２２６】
また、ブロックデバイス制御装置４０は、差分情報ディレクトリ２３６を含む。本実施形態において、この差分情報ディレクトリ２３６は、図３に示すメモリ２３に格納される。
【０２２７】
ホストＩ／Ｆ制御部４１１は、ホストＩ／Ｆ２５を制御する。ホストＩ／Ｆ制御部４１１は、ホストＩ／Ｆ２５を制御することによって、例えばホスト１０との間でＳＣＳＩプロトコルに従ってデータ送受信を行う。ホストＩ／Ｆ制御部４１１は、受信されたＳＣＳＩコマンドがリード要求であれば、当該リード要求に含まれるＬＵＮ、ブロックアドレス、サイズ及びイニシエータ情報を、Ｉ／Ｏ処理部４１４に渡す。一方、ホストＩ／Ｆ制御部４１１は、受信されたＳＣＳＩコマンドがライト要求であれば、当該ライト要求に含まれるＬＵＮ、ブロックアドレス、サイズ、イニシエータ情報及びライトデータを、Ｉ／Ｏ処理部４１４に渡す。また、ホストＩ／Ｆ制御部４１１は、受信されたＳＣＳＩコマンドが例えばブロックデバイス制御装置４０で独自に定義されたスナップショット用ＳＣＳＩコマンドであれば、当該ＳＣＳＩコマンドに含まれるイニシエータ情報及び通信データを、スナップショット管理部４１５に渡す。
【０２２８】
ディスクＩ／Ｆ制御部４１２は、ディスクＩ／Ｆ２６を制御する。ディスクＩ／Ｆ制御部４１２は、ディスクＩ／Ｆ２６を制御することによって、例えばマスタＬＵ４０１及びバックアップＬＵ４０２に対してリード／ライト処理を実行する。
【０２２９】
差分情報ディレクトリ管理部４１３は、ホスト１０からのマスタＬＵ４０１に対するライト要求に応じてアクセスされる当該マスタＬＵ４０１へのアクセス範囲を記録する差分情報ディレクトリ２３６を構成する。
【０２３０】
この差分情報ディレクトリ２３６は、例えばオペレーティングシステム（ＯＳ: Operating System）の機能を利用して、動的に確保されたメモリ２３の領域に格納されている。この差分情報ディレクトリ２３６のデータ構造は、前述した第１の実施形態に係るキャッシュ・ディレクトリ２３５と同様であるため、その詳しい説明は省略する。しかしながら、前述したキャッシュ・ディレクトリ２３５では、データ構造である基数木の階層数がエクステントのサイズ（例えば、１Ｍセクタ）によって決定されるが、差分情報ディレクトリ２３６では、データ構造である基数木の階層数がマスタＬＵ４０１の容量で決定される。階層数を除けば、根３０１、節３０２、葉３０３またはディレクトリ・エントリ３０４の構成及び作用は同一である。本実施形態では、便宜上、マスタＬＵ４０１の容量を１Ｍセクタとし、差分情報ディレクトリ２３６は根３０１、２つの節３０２及び葉３０３の４つの層で構成されているものとする。
【０２３１】
差分情報ディレクトリ管理部４１３は、マスタＬＵ４０１及びバックアップＬＵ４０２の同期状態が解除された状態で、マスタＬＵ４０１に対してライト処理が実行された場合に、当該ライト処理に応じたアクセス範囲を差分情報ディレクトリ２３６に記録（登録）する。この差分情報ディレクトリ２３６は、マスタＬＵ４０１単位で管理される。
【０２３２】
また、差分情報ディレクトリ管理部４１３は、同期状態が解除されたマスタＬＵ４０１及びバックアップＬＵ４０２の再同期化処理が実行された後に、差分情報ディレクトリ２３６（に記録されている全てのアクセス範囲）を削除する。
【０２３３】
Ｉ／Ｏ処理部４１４は、例えばホストＩ／Ｆ制御部４１１によって受信されたアクセス要求に対する処理を実行する。また、Ｉ／Ｏ処理部４１４は、同期状態が解除されたマスタＬＵ４０１に対するライト要求が受信された場合には、差分情報ディレクトリ管理部４１３に当該ライト要求に応じてアクセス範囲を差分情報ディレクトリ２３６に登録するよう要求する。また、Ｉ／Ｏ処理部４１４は、スナップショット管理部４１５が実行するマスタＬＵ４０１とバックアップＬＵ４０２の再同期化処理に伴うコピー処理を実行する。
【０２３４】
スナップショット管理部４１５は、ホストＩ／Ｆ制御部４１１によって例えばホスト１０から受信されたスナップショット用コマンドに従って処理を行う。当該コマンドがスナップショット採取の要求である場合、マスタＬＵ４０１とバックアップＬＵ４０２の同期状態を解除する。また、当該コマンドが再同期化の要求である場合、マスタＬＵ４０１とバックアップＬＵ４０２の再同期化処理を行い、マスタＬＵ４０１とバックアップＬＵ４０２は同期状態となる。
【０２３５】
次に、図２１に示すフローチャートを参照して、ブロックデバイス制御装置４０におけるマスタＬＵ４０１に対するライト要求受信処理の処理手順について説明する。
【０２３６】
まず、ホストＩ／Ｆ制御部４１１は、例えばホスト１０からのライト要求を受信する。ホストＩ／Ｆ制御部４１１は、受信されたライト要求をＩ／Ｏ処理部４１４へ渡す。（ステップＳ１０１）。このライト要求には、当該ライト要求に応じてアクセスされるＬＵ（マスタＬＵ４０１）を識別するＬＵＮ、当該ＬＵのブロックアドレス、当該ライト要求に応じてアクセスされるデータのサイズ及び当該ライト要求に応じて書き込まれるデータ（ライトデータ）が含まれる。
【０２３７】
Ｉ／Ｏ処理部４１４は当該ライト要求をディスクＩ／Ｆ制御部４１２に渡してマスタＬＵ４０１への当該ライトデータの書き込みを行う（ステップＳ１０２）。
【０２３８】
次に、Ｉ／Ｏ処理部４１４は、スナップショット管理部４１５を介して当該ＬＵが同期状態であるかどうかを判定する（ステップＳ１０３）。
【０２３９】
当該ＬＵが同期状態である場合（ステップＳ１０３のＹＥＳ）、当該ライト要求はディスクＩ／Ｆ制御部４１２に渡され、バックアップＬＵ４０２への当該ライトデータの書き込みを行う（ステップＳ１０４）。ステップＳ１０４の実行後、Ｉ／Ｏ処理部４１４は、ホストＩ／Ｆ制御部４１１を介してホスト１０にステータスを送信して（ステップＳ１０５）、処理を完了する。
【０２４０】
一方、当該ＬＵが同期状態でない場合（ステップＳ１０３のＮＯ）、当該ライト要求は差分情報ディレクトリ管理部４１３に渡され、差分情報ディレクトリ２３６に対してアクセス範囲登録処理を実行する（ステップＳ１０６）。このアクセス範囲登録処理の詳細については後述する。ステップＳ１０６の実行後、ステップＳ１０５が実行される。
【０２４１】
次に、図２２に示すフローチャートを参照して、上記したアクセス範囲登録処理（図２１に示すステップＳ１０６）の処理手順について説明する。
【０２４２】
まず、差分情報ディレクトリ管理部４１３は、例えばホスト１０からのライト要求によってアクセスされる領域（ライト要求領域）を含むマスタＬＵ４０１、つまり、アクセス対象となるマスタＬＵ４０１の差分情報ディレクトリ２３６を選定し、構成する根３０１を特定する（ステップＳ１１１）。差分情報ディレクトリ２３６は、前述したキャッシュ・ディレクトリ２３５と同様に、例えば根３０１、２つの節３０２及び葉３０３の４つの層から構成される。この根３０１、２つの節３０２及び葉３０３の４つの層で使用するメモリ領域は、例えばＯＳの機能を利用することにより、ブロックデバイス制御装置２０内のメモリ２３において動的に確保または解放される。
【０２４３】
差分情報ディレクトリ管理部４１３は、特定された根３０１を構成するスロット３０６を対象スロット３０６とする。以降の処理は対象スロット３０６を変更しながら、ライト要求領域の未処理領域と対象スロット３０６を頂点とする部分木で管理される範囲（スロット・セクタ範囲）が重なる領域に関する登録処理を繰り返す。
【０２４４】
差分情報ディレクトリ管理部４１３は、対象スロット３０６が使用されているモードを交換（変更）するか否かを判定する（ステップＳ１１２）。
【０２４５】
例えば対象スロット３０６に対して使用されているモードがポインタモードである場合を想定する。この場合には、例えば対象スロット３０６を含む層より下位層のデータ構造を参照して、その記録密度が予め定められた閾値を超えた場合には、当該対象スロット３０６のモードをポインタモードからビットマップモードに交換すると判定する。
【０２４６】
一方、対象スロット３０６に対して使用されているモードがビットマップモードである場合は、常にポインタモードに交換しないと判定する。
【０２４７】
対象スロット３０６に対して使用されているモードをポインタモードからビットマップモードに交換すると判定された場合（ステップＳ１１２のＹＥＳ）、前述した図１１に示すステップＳ３３に相当するステップＳ１１３の処理が実行される。
【０２４８】
以下、図１１に示すステップＳ３４〜ステップＳ３９に相当するステップＳ１１４〜ステップＳ１１９の処理が実行される。
【０２４９】
一方、対象スロット３０６に対して使用されているモードを交換しないと判定された場合（ステップＳ１１２のＮＯ）、ステップＳ１１４の処理が実行される。
【０２５０】
次に、図２３に示すフローチャートを参照して、マスタＬＵ４０１とバックアップＬＵ４０２の再同期化処理の処理手順について説明する。
【０２５１】
ホストＩ／Ｆ制御部４１１は、例えばホスト１０からスナップショット用ＳＣＳＩコマンドを受信し、スナップショット管理部４１５に渡す。スナップショット管理部４１５は当該コマンドが再同期化要求であった場合、Ｉ／Ｏ処理部４１４に要求することでマスタＬＵ４０１とバックアップＬＵ４０２の再同期化処理を開始する（ステップＳ１２１）。
【０２５２】
Ｉ／Ｏ処理部４１４は、差分情報ディレクトリ管理部４１３を介してマスタＬＵ４０１に対応する差分情報ディレクトリ２３６を参照する。差分情報ディレクトリ２３６に記録されている全てのアクセス範囲（以降、コピー対象範囲と記述）において、後述するステップＳ１２３及びステップＳ１２４で行われるコピー処理が完了しているかどうか判定する（ステップＳ１２２）。
【０２５３】
コピー対象範囲のコピー処理が全て完了していない場合（ステップＳ１２２のＮＯ）、Ｉ／Ｏ処理部４１４は、コピー対象範囲のうち未処理の範囲の一部あるいは全部を抽出する。当該範囲に関して、ディスクＩ／Ｆ制御部４１２を介してマスタＬＵ４０１からデータをリードする（ステップＳ１２３）。次に当該範囲に関して、ステップＳ１２３におけるリードデータをディスクＩ／Ｆ制御部４１２を介してバックアップＬＵ４０２へライトする（ステップＳ１２４）。ステップＳ１２４が完了すると、ステップＳ１２２を実行する。
【０２５４】
一方、コピー対象範囲のコピー処理が全て完了した場合（ステップＳ１２２のＹＥＳ）、差分情報ディレクトリ管理部４１３はマスタＬＵ４０１に対応する差分情報ディレクトリ２３６を削除し（ステップＳ１２５）、処理を完了する。
【０２５５】
上記したように本実施形態においては、差分情報ディレクトリ２３６を構成するスロット３０６に対して使用されるモード（ビットマップモードまたはポインタモード）を交換することによって、当該差分情報ディレクトリ２３６に対して記録されるアクセス範囲の記録粒度を部分的に変更することができる。これにより、本実施形態においては、例えば動的かつ選択的に差分情報ディレクトリ２３６の一部または全部の記録粒度を粗くすることで、記録されたアクセス範囲に基づく処理または当該差分情報ディレクトリ２３６を管理する処理を包括的に軽減する効果が得られる。また、スロット３０６に対して使用されるモードをポインタモードからビットマップモードに交換することで、差分情報ディレクトリ２３６のために必要なメモリ領域を削減することで、メモリ領域を節約することも可能である。
【０２５６】
また、本実施形態においては、記録密度が高い範囲は再同期化処理におけるコピー処理の実行回数が多くなるため、記録粒度を粗くして記録を維持することで、そのコピー回数を低減することが可能となる。また、上記したように節約されたメモリ領域を記録密度の低い範囲の部分木に用いることができるため、記録粒度の不足を起因とする不必要なコピー処理の発生を抑止することが可能となる。
【０２５７】
また、アクセスの局所性を考慮すれば、記録密度が高い範囲が再度ライトされる可能性が高く、記録粒度を粗くすることで、後続のライト要求受信処理におけるアクセス範囲登録処理でのディレクトリ探索の処理量が軽減される。
【０２５８】
なお、本実施形態においては、マスタＬＵ４０１及びバックアップＬＵ４０２が同一のブロックデバイス制御装置４０によって管理されていたが、それぞれ異なるブロックデバイス制御装置４０が管理する構成であっても構わない。
【０２５９】
また、本実施形態では、差分情報ディレクトリ２３６におけるスロット３０６に対して使用されるモードの交換は、アクセス範囲登録処理に同期して実行されているが、当該処理と非同期に実行することも可能である。この場合、例えば節３０２または葉３０３を記録密度順のリストで管理する。このリストを参照して記録密度が高い範囲を選定し、当該範囲に該当するスロット３０６に対して使用されているモードをビットマップモードに交換することで、全体のアクセス範囲のうちの記録密度が高い範囲の記録粒度を粗くすることが可能となる。
【０２６０】
なお、本願発明は、上記各実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記各実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、各実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【０２６１】
【図１】本発明の第１の実施形態に係るブロックデバイス制御装置を含むストレージ・クラスタ・システムの構成を示すブロック図。
【図２】図１に示すストレージ・クラスタ・システムにおけるＩＯパスの一例を示す図。
【図３】図１に示すブロックデバイス制御装置２０のハードウェア構成を示すブロック図。
【図４】図１に示すブロックデバイス制御装置２０の主として機能構成を示すブロック図。
【図５】ルーティングテーブル２３１のデータ構造の一例を示す図。
【図６】エクステント構成テーブル２３２のデータ構造の一例を示す図。
【図７】キャッシュ・ディレクトリ２３５のデータ構造について説明するための図。
【図８】ブロックデバイス制御装置におけるリード要求受信処理の処理手順を示すフローチャート
【図９】スレーブ・ブロックデバイス制御装置におけるリード要求受信処理の処理手順を示すフローチャート。
【図１０】マスタ・ブロックデバイス制御装置におけるリード要求受信処理の処理手順を示すフローチャート。
【図１１】アクセス範囲登録処理の処理手順を示すフローチャート。
【図１２】第１層の根３０１または第２層の節３０２を構成する対象スロット３０６に対して使用されるモードの交換処理について説明するための図。
【図１３】第３層の節３０２を構成する対象スロット３０６に対して使用されるモードの交換処理について説明するための図。
【図１４】ブロックデバイス制御装置におけるライト要求受信処理の処理手順を示すフローチャート。
【図１５】スレーブ・ブロックデバイス制御装置におけるライト要求受信処理の処理手順を示すフローチャート。
【図１６】マスタ・ブロックデバイス制御装置におけるライト要求受信処理の処理手順を示すフローチャート。
【図１７】アクセス範囲削除処理の処理手順を示すフローチャート。
【図１８】統計情報更新処理の処理手順を示すフローチャート。
【図１９】本発明の第２の実施形態に係るブロックデバイス制御装置４０を含むコンピュータシステムの構成を示すブロック図。
【図２０】図１５に示すブロックデバイス制御装置４０の主として機能構成を示すブロック図。
【図２１】ブロックデバイス制御装置４０のマスタＬＵ４０１へのライト要求受信処理の処理手順を示すフローチャート。
【図２２】アクセス範囲登録処理の処理手順を示すフローチャート。
【図２３】ブロックデバイス制御装置４０のマスタＬＵ４０１とバックアップＬＵ４０２の再同期化処理の処理手順を示すフローチャート。
【符号の説明】
【０２６２】
１０…ホスト、２０，４０…ブロックデバイス制御装置、２１…Ｉ／Ｏプロセッサ、２２…ＲＯＭ、２３…メモリ、２４…バッテリ、２５…ホストＩ／Ｆ、２６…ディスクＩ／Ｆ、３０…スイッチ、２００…ハードディスクドライブ、２０１…エクステント、２１１…ホストＩ／Ｆ制御部、２１２…ディスクＩ／Ｆ制御部、２１３…構成情報管理部、２１４…キャッシュメモリ管理部、２１５…統計情報管理部、２１６…キャッシュ・ディレクトリ管理部、２１７…Ｉ／Ｏ処理部、２１８…通信部、２３１…ルーティングテーブル、２３２…エクステント構成テーブル、２３３…キャッシュメモリ、２３４…統計情報格納部、２３５…キャッシュ・ディレクトリ、２３６…差分情報ディレクトリ、４０１…マスタ論理ユニット、４０２…バックアップ論理ユニット、４１１…ホストＩ／Ｆ制御部、４１２…ディスクＩ／Ｆ制御部、４１３…差分情報ディレクトリ管理部、４１４…Ｉ／Ｏ処理部、４１５…スナップショット管理部。
【図１】
2009122850.tif 000003
【図２】
2009122850.tif 000004
【図３】
2009122850.tif 000005
【図４】
2009122850.tif 000006
【図５】
2009122850.tif 000007
【図６】
2009122850.tif 000008
【図７】
2009122850.tif 000009
【図８】
2009122850.tif 000010
【図９】
2009122850.tif 000011
【図１０】
2009122850.tif 000012
【図１１】
2009122850.tif 000013
【図１２】
2009122850.tif 000014
【図１３】
2009122850.tif 000015
【図１４】
2009122850.tif 000016
【図１５】
2009122850.tif 000017
【図１６】
2009122850.tif 000018
【図１７】
2009122850.tif 000019
【図１８】
2009122850.tif 000020
【図１９】
2009122850.tif 000021
【図２０】
2009122850.tif 000022
【図２１】
2009122850.tif 000023
【図２２】
2009122850.tif 000024
【図２３】
2009122850.tif 000025