(57)【要約】【課題】小容量のキャッシュ領域を用いて読み出し性能を向上させる。【解決手段】制御部１ｂは、データＤ１が格納されたデータ領域１１ａと、データ領域１１ａにおけるデータＤ１の位置情報Ｈ１が格納されたヘッダ領域１１ｂとを有するデータブロック１１が、ストレージ装置２に配置され、かつ、データＤ１の論理アドレスと、データブロック１１を示す識別情報と、データＤ１の格納順を示すインデックスと、チェック符号とを含むメタデータ２０が、ストレージ装置２に配置され、かつ、位置情報Ｈ１が記憶部１ａにキャッシュされるように、データＤ１の格納処理を制御し、データＤ１の読み出しの際には、メタデータ２０を読み出し、メタデータ２０に基づいて記憶部１ａから位置情報Ｈ１を読み出し、位置情報Ｈ１に基づいてデータＤ１を読み出し、メタデータ２０に含まれるチェック符号を用いてデータＤ１の正当性をチェックする。【選択図】図１
2020112972.tif 000002
【特許請求の範囲】
【請求項１】
ストレージ装置を制御するストレージ制御装置において、
記憶部と、
データが格納されたデータ領域と、前記データ領域における前記データの位置情報が格納されたヘッダ領域とを有するデータブロックが、前記ストレージ装置に配置され、かつ、前記データに対応する論理アドレスと、前記データが格納された前記データブロックを示す識別情報と、前記データブロックにおける前記データの格納順を示すインデックスと、前記データについてのチェック符号とを含むメタデータが、前記ストレージ装置に配置され、かつ、前記位置情報が前記記憶部にキャッシュされるように、前記データの格納処理を制御し、
前記論理アドレスを用いて前記データの読み出しが要求された場合、前記ストレージ装置から前記メタデータを読み出し、読み出した前記メタデータに含まれる前記識別情報および前記インデックスに基づいて前記記憶部から前記位置情報を読み出し、読み出した前記位置情報に基づいて前記ストレージ装置内の前記データブロックから前記データを読み出し、読み出した前記メタデータに含まれる前記チェック符号を用いて、読み出した前記データの正当性をチェックする、制御部と、
を有するストレージ制御装置。
【請求項２】
前記制御部は、前記論理アドレスとは異なる他の論理アドレスを有する、前記データと同一内容の他のデータの書き込みが要求された場合、前記他の論理アドレスと、前記識別情報と同一内容の他の識別情報と、前記インデックスと同一内容の他のインデックスと、前記チェック符号と同一内容の他のチェック符号とを含む他のメタデータを、前記ストレージ装置に格納するとともに、前記他のデータの前記ストレージ装置への書き込みを省略する、
請求項１記載のストレージ制御装置。
【請求項３】
前記制御部は、前記データブロックに対応するバッファ領域を前記記憶部に確保し、前記バッファ領域における前記データブロックの前記データ領域に対して、前記データを含む複数のデータを書き込みが要求された順に追記し、前記データ領域に対する追記が不可能な状態になった場合、前記データブロックを前記バッファ領域から前記ストレージ装置に書き出す、
請求項１記載のストレージ制御装置。
【請求項４】
ストレージ装置を制御するストレージ制御装置において、
記憶部と、
データと前記データについてのチェック符号とが隣接して格納されたデータ領域と、前記データ領域における前記データの位置情報が格納されたヘッダ領域とを有するデータブロックが、前記ストレージ装置に配置され、かつ、前記データに対応する論理アドレスと、前記データが格納された前記データブロックを示す識別情報と、前記データブロックにおける前記データの格納順を示すインデックスとを含むメタデータが、前記ストレージ装置に配置され、かつ、前記位置情報が前記記憶部にキャッシュされるように、前記データの格納処理を制御し、
前記論理アドレスを用いて前記データの読み出しが要求された場合、前記ストレージ装置から前記メタデータを読み出し、読み出した前記メタデータに含まれる前記識別情報および前記インデックスに基づいて前記記憶部から前記位置情報を読み出し、読み出した前記位置情報に基づいて前記ストレージ装置内の前記データブロックから前記データと前記チェック符号とを読み出し、読み出した前記チェック符号を用いて、読み出した前記データの正当性をチェックする、制御部と、
を有するストレージ制御装置。
【請求項５】
前記制御部は、前記論理アドレスとは異なる他の論理アドレスを有する、前記データと同一内容の他のデータの書き込みが要求された場合、前記他の論理アドレスと、前記識別情報と同一内容の他の識別情報と、前記インデックスと同一内容の他のインデックスとを含む他のメタデータを、前記ストレージ装置に格納するとともに、前記他のデータの前記ストレージ装置への書き込みを省略する、
請求項４記載のストレージ制御装置。
【請求項６】
前記制御部は、前記データブロックに対応するバッファ領域を前記記憶部に確保し、前記バッファ領域における前記データブロックの前記データ領域に対して、前記データを含む複数のデータを書き込みが要求された順に追記し、前記データ領域に対する追記が不可能な状態になった場合、前記データブロックを前記バッファ領域から前記ストレージ装置に書き出す、
請求項４記載のストレージ制御装置。
【請求項７】
ストレージ装置を制御するためのストレージ制御プログラムにおいて、
コンピュータに、
データが格納されたデータ領域と、前記データ領域における前記データの位置情報が格納されたヘッダ領域とを有するデータブロックが、前記ストレージ装置に配置され、かつ、前記データに対応する論理アドレスと、前記データが格納された前記データブロックを示す識別情報と、前記データブロックにおける前記データの格納順を示すインデックスと、前記データについてのチェック符号とを含むメタデータが、前記ストレージ装置に配置され、かつ、前記位置情報が前記コンピュータが備える記憶部にキャッシュされるように、前記データの格納処理を制御し、
前記論理アドレスを用いて前記データの読み出しが要求された場合、前記ストレージ装置から前記メタデータを読み出し、読み出した前記メタデータに含まれる前記識別情報および前記インデックスに基づいて前記記憶部から前記位置情報を読み出し、読み出した前記位置情報に基づいて前記ストレージ装置内の前記データブロックから前記データを読み出し、読み出した前記メタデータに含まれる前記チェック符号を用いて、読み出した前記データの正当性をチェックする、
処理を実行させるストレージ制御プログラム。
【請求項８】
ストレージ装置を制御するためのストレージ制御プログラムにおいて、
コンピュータに、
データと前記データについてのチェック符号とが隣接して格納されたデータ領域と、前記データ領域における前記データの位置情報が格納されたヘッダ領域とを有するデータブロックが、前記ストレージ装置に配置され、かつ、前記データに対応する論理アドレスと、前記データが格納された前記データブロックを示す識別情報と、前記データブロックにおける前記データの格納順を示すインデックスとを含むメタデータが、前記ストレージ装置に配置され、かつ、前記位置情報が前記コンピュータが備える記憶部にキャッシュされるように、前記データの格納処理を制御し、
前記論理アドレスを用いて前記データの読み出しが要求された場合、前記ストレージ装置から前記メタデータを読み出し、読み出した前記メタデータに含まれる前記識別情報および前記インデックスに基づいて前記記憶部から前記位置情報を読み出し、読み出した前記位置情報に基づいて前記ストレージ装置内の前記データブロックから前記データと前記チェック符号とを読み出し、読み出した前記チェック符号を用いて、読み出した前記データの正当性をチェックする、
処理を実行させるストレージ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ制御装置およびストレージ制御プログラムに関する。
【背景技術】
【０００２】
業務サーバなどのサーバ装置が扱う大量のデータは、例えば、記憶容量の大きなストレージ装置を有するストレージシステムにより管理される。ストレージシステムでは、論理的な記憶領域（論理領域）と、ストレージ装置に搭載される記録媒体の記憶領域（物理領域）とを利用してデータのＩ／Ｏ（Input／Output）が処理される。
【０００３】
また、論理領域上の同一データが重複しないようにデータを物理領域に格納する重複排除技術が知られている。重複排除により、物理領域の使用容量を削減できるだけでなく、物理領域に対する書き込み回数を削減する効果も得られる。特に近年、物理領域を実現する記録媒体として、フラッシュメモリを用いたＳＳＤ（Solid State Drive）が使用されることが多くなっている。フラッシュメモリは一般的に書き込み回数の制限があることから、重複排除によってフラッシュメモリに対する書き込み回数を削減することで、フラッシュメモリの寿命を延ばすことができる。
【０００４】
また、重複排除に関して次のような技術が提案されている。例えば、ユーザデータと保証コードとを分け、ユーザデータを重複排除しながら物理ページに格納し、複数のユーザデータに対応する保証コードを連結して物理ページに格納するストレージ装置が提案されている。また、例えば、重複排除を行ってデータを論理ボリュームに格納する際に、保証コードチェック用のアドレス読み替え情報を生成し、データを読み出す際にはアドレス読み替え情報を用いて読み替えを行うことで保証コードを生成するストレージサブシステムが提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１２／０５６４９１号
【特許文献２】特開２００９−０８０６９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、ストレージ装置の制御では、例えば論理アドレスと物理アドレスとを変換するための情報など、データにアクセスするための各種の管理情報が使用される。このような管理情報については、書き込み対象のデータとともにストレージ装置に格納される場合があるが、その場合、データの読み出しの際に管理情報もストレージ装置から読み出さなくてはならない。そのため、ストレージ装置へのアクセス回数が多くなり、データの読み出し性能が低下する。また、この問題を解決する方法として、管理情報をストレージ制御装置側にキャッシュしておく方法が考えられるが、この場合にはキャッシュされた管理情報がストレージ制御装置のメモリ容量を圧迫することが問題となる。
【０００７】
１つの側面では、本発明は、小容量のキャッシュ領域を用いて読み出し性能を向上させることが可能なストレージ制御装置およびストレージ制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
１つの案では、ストレージ装置を制御する次のようなストレージ制御装置が提供される。このストレージ制御装置は、記憶部と、制御部とを有する。制御部は、データが格納されたデータ領域と、データ領域におけるデータの位置情報が格納されたヘッダ領域とを有するデータブロックが、ストレージ装置に配置され、かつ、データに対応する論理アドレスと、データが格納されたデータブロックを示す識別情報と、データブロックにおけるデータの格納順を示すインデックスと、データについてのチェック符号とを含むメタデータが、ストレージ装置に配置され、かつ、位置情報が記憶部にキャッシュされるように、データの格納処理を制御する。また、制御部は、論理アドレスを用いてデータの読み出しが要求された場合、ストレージ装置からメタデータを読み出し、読み出したメタデータに含まれる識別情報およびインデックスに基づいて記憶部から位置情報を読み出し、読み出した位置情報に基づいてストレージ装置内のデータブロックからデータを読み出し、読み出したメタデータに含まれるチェック符号を用いて、読み出したデータの正当性をチェックする。
【０００９】
また、１つの案では、ストレージ装置を制御する次のようなストレージ制御装置が提供される。このストレージ制御装置は、記憶部と、制御部とを有する。制御部は、データとデータについてのチェック符号とが隣接して格納されたデータ領域と、データ領域におけるデータの位置情報が格納されたヘッダ領域とを有するデータブロックが、ストレージ装置に配置され、かつ、データに対応する論理アドレスと、データが格納されたデータブロックを示す識別情報と、データブロックにおけるデータの格納順を示すインデックスとを含むメタデータが、ストレージ装置に配置され、かつ、位置情報が記憶部にキャッシュされるように、データの格納処理を制御する。また、制御部は、論理アドレスを用いてデータの読み出しが要求された場合、ストレージ装置からメタデータを読み出し、読み出したメタデータに含まれる識別情報およびインデックスに基づいて記憶部から位置情報を読み出し、読み出した位置情報に基づいてストレージ装置内のデータブロックからデータとチェック符号とを読み出し、読み出したチェック符号を用いて、読み出したデータの正当性をチェックする。
【００１０】
さらに、１つの案では、上記各ストレージ制御装置と同様の処理をコンピュータに実行させるストレージ制御プログラムが提供される。
【発明の効果】
【００１１】
１つの側面では、小容量のキャッシュ領域を用いて読み出し性能を向上させることができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係るストレージシステムの構成例を示す図である。
【図２】第２の実施の形態に係るストレージシステムの構成例を示す図である。
【図３】ノードのハードウェア構成例を示す図である。
【図４】ノードが備える処理機能の構成例を示す図である。
【図５】ストレージの記憶領域についての管理形態の例を示す図である。
【図６】ＲＡＩＤユニットについて説明するための図である。
【図７】データブロックに対するデータの格納について説明するための図である。
【図８】論物メタデータとデータブロックとの関係を示す図である。
【図９】論物メタデータの構成例を示す図である。
【図１０】重複排除に用いられるメタデータについて説明するための図である。
【図１１】論物メタデータおよびデータブロックの格納状態について説明するための図である。
【図１２】データの追記書きについて説明するための図である。
【図１３】データユニットヘッダのキャッシュについて説明するための図である。
【図１４】データユニットヘッダキャッシュのサイズの例を示す図である。
【図１５】重複がない場合の書き込み処理例を示すシーケンス図（その１）である。
【図１６】重複がない場合の書き込み処理例を示すシーケンス図（その２）である。
【図１７】重複がある場合の書き込み処理例を示すシーケンス図である。
【図１８】読み出し処理例を示すシーケンス図である。
【図１９】読み出し処理例を示すフローチャートである。
【図２０】第３の実施の形態におけるデータブロックの構成例を示す図である。
【図２１】第３の実施の形態における論物メタデータの構成例を示す図である。
【図２２】第３の実施の形態における読み出し処理例を示すシーケンス図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係るストレージシステムの構成例を示す図である。図１に示すストレージシステムは、ストレージ制御装置１と、ストレージ装置２とを有する。ストレージ制御装置１は、ストレージ装置２を制御する。ストレージ装置２は、例えば、１台以上の不揮発性の記録媒体を備える。記録媒体としては、例えば、ＳＳＤが用いられる。
【００１４】
ストレージ制御装置１は、記憶部１ａと制御部１ｂとを有する。記憶部１ａは、例えば、ＲＡＭ（Random Access Memory）などの記憶装置によって実現される。制御部１ｂは、例えばプロセッサであり、その場合、制御部１ｂの処理は、プロセッサがプログラムを実行することで実現される。
【００１５】
制御部１ｂは、論理アドレスを有するデータの書き込み要求に応じて、このデータをストレージ装置２に格納する処理を実行する。データは、データブロックというデータ構造を用いてストレージ装置２に格納される。データブロックは、データが格納されるデータ領域と、データ領域におけるデータの位置情報が格納されるヘッダ領域とを含む。
【００１６】
図１の例では、２つのデータブロック１１，１２がストレージ装置２に配置されている。データブロック１１，１２には、それぞれ識別情報「ＤＢ１」，「ＤＢ２」が付与されている。データブロック１１は、データ領域１１ａとヘッダ領域１１ｂとを含む。一例として、データ領域１１ａにはデータＤ１が格納され、データ領域１１ａにおけるデータＤ１の位置を示す位置情報Ｈ１がヘッダ領域１１ｂに格納されている。また、データブロック１２は、データ領域１２ａとヘッダ領域１２ｂとを含む。一例として、データ領域１２ａにはデータＤ２が格納され、データ領域１２ａにおけるデータＤ２の位置を示す位置情報Ｈ２がヘッダ領域１２ｂに格納されている。
【００１７】
なお、このようなデータ構造は、複数のデータをストレージ装置２にまとめ書きすることに適している。例えば、データブロック１１，１２の領域は、当初はストレージ制御装置１の記憶部１ａに、バッファリング領域として確保される。データの書き込み要求の発生に伴って、データブロック１１のデータ領域１１ａの先頭からデータが順に追記されていき、データ領域１１ａにデータが追記できなくなると、データブロック１２のデータ領域１２ａの先頭からデータが順に追記されていく。また、データ領域１１ａ，１２ａへのデータの格納に伴って、格納されたデータに対応する位置情報がヘッダ領域１１ｂ，１２ｂに格納される。そして、データ領域１２ａにデータが追記できなくなると、データブロック１１，１２の内容がバッファリング領域からストレージ装置２に書き出される。
【００１８】
例えば、ＳＳＤに含まれるフラッシュメモリは、一般的にランダムライトが発生すると書き込み性能が大きく悪化するという特性がある。ストレージ装置２の記録媒体としてＳＳＤが用いられた場合、上記のようなまとめ書きを行うことで、ストレージ装置２に対するランダムライトが発生しにくくなり、その結果として、ストレージ装置２に対する書き込み性能を向上させることができる。
【００１９】
次に、制御部１ｂはさらに、ストレージ装置２の制御のために、図１に示すメタデータ２０を使用する。メタデータ２０は、ストレージ装置２に配置される。メタデータ２０は、ストレージ装置２に格納されたデータに対応する論理アドレスと、このデータの物理領域上の位置を示す情報を対応付けて記憶する。物理領域上の位置を示す情報として、データが格納されたデータブロックを示す識別情報と、データブロックにおけるデータの格納順を示すインデックスとが、メタデータ２０に保持される。さらに、メタデータ２０には、データについてのチェック符号が保持される。チェック符号は、データの正当性を確認するための符号であり、例えば、データについての誤り検出符号である。
【００２０】
図１の例では、論理アドレスＬ１に対応するデータが、データＤ１としてデータブロック１１に格納されている。メタデータ２０においては、論理アドレス「Ｌ１」に対して、データＤ１の位置を示す識別情報「ＤＢ１」およびインデックス「ＩＮ１」が対応付けられているとともに、データＤ１についてのチェック符号「Ｃ１」が対応付けられている。
【００２１】
また、図１の例では、論理アドレスＬ２に対応するデータが、データＤ２としてデータブロック１２に格納されている。メタデータ２０においては、論理アドレス「Ｌ２」に対して、データＤ２の位置を示す識別情報「ＤＢ２」およびインデックス「ＩＮ２」が対応付けられているとともに、データＤ２についてのチェック符号「Ｃ２」が対応付けられている。
【００２２】
さらに、図１の例では、メタデータ２０において、論理アドレス「Ｌ３」に対しても、論理アドレス「Ｌ１」と同様に、識別情報「ＤＢ１」、インデックス「ＩＮ１」、チェック符号「Ｃ１」が対応付けられている。これは、論理アドレス「Ｌ３」のデータが論理アドレス「Ｌ１」のデータと同一であり、論理アドレス「Ｌ３」のデータがデータＤ１としてデータブロック１１に格納されていることを示す。すなわち、データＤ１について重複排除が行われている。
【００２３】
以上のデータブロック１１，１２およびメタデータ２０を用いることで、制御部１ｂによるデータの読み出しが可能になる。例えば、読み出しアドレスとして論理アドレス「Ｌ１」が指定された場合、まず、メタデータ２０から識別情報「ＤＢ１」、インデックス「ＩＮ１」、チェック符号「Ｃ１」が読み出される。識別情報「ＤＢ１」およびインデックス「ＩＮ１」に基づき、データブロック１１のヘッダ領域１１ｂからデータＤ１に対応する位置情報Ｈ１が特定され、この位置情報Ｈ１が読み出される。そして、位置情報Ｈ１に基づいてデータ領域１１ａからデータＤ１が読み出される。この後、チェック符号「Ｃ１」を用いてデータＤ１の正当性がチェックされる。
【００２４】
このように、データの読み出し処理では、メタデータ２０、ヘッダ領域内の位置情報、データ領域内のデータが読み出される。これらがすべてストレージ装置２に配置されている場合、読み出し処理のたびに３回ずつのストレージ装置２へのアクセスが必要になるため、データの読み出し処理に要する時間が長くなり、読み出し性能が低くなる。
【００２５】
そこで、本実施の形態では、データブロックのヘッダ領域に格納された位置情報が、ストレージ制御装置１の記憶部１ａにキャッシュされる。図１の例では、ヘッダ領域１１ｂ，１２ｂの内容が記憶部１ａにキャッシュされている。これにより、本実施の形態では、読み出し処理は次のように実行される。
【００２６】
例えば、読み出しアドレスとして論理アドレス「Ｌ１」が指定された場合、制御部１ｂは、ストレージ装置２内のメタデータ２０から識別情報「ＤＢ１」、インデックス「ＩＮ１」、チェック符号「Ｃ１」を読み出す。次に、制御部１ｂは、記憶部１ａにキャッシュされたヘッダ領域１１ｂ，１２ｂを参照し、識別情報「ＤＢ１」およびインデックス「ＩＮ１」に基づき、データブロック１１に対応するヘッダ領域１１ｂからデータＤ１に対応する位置情報Ｈ１を特定する。制御部１ｂは、特定された位置情報Ｈ１を記憶部１ａから読み出す。そして、制御部１ｂは、位置情報Ｈ１に基づいて、ストレージ装置２に配置されたデータブロック１１のデータ領域１１ａからデータＤ１を読み出す。この後、制御部１ｂは、チェック符号「Ｃ１」を用いてデータＤ１の正当性をチェックする。
【００２７】
このように、本実施の形態では、ヘッダ領域の位置情報が記憶部１ａから読み出されることで、読み出し処理におけるストレージ装置２へのアクセス回数を２回に削減できる。これにより、データの読み出し処理に要する時間を短縮でき、読み出し性能を向上させることができる。
【００２８】
また、記憶部１ａにキャッシュされるデータは、データ領域におけるデータの位置を示す位置情報だけに限定される。これにより、記憶部１ａにキャッシュされるデータ容量を抑制できる。
【００２９】
ここで、他の方法の例として、データのチェック符号を、メタデータ２０ではなく、データブロックのヘッダ領域に格納し、チェック符号を位置情報とともに記憶部１ａにキャッシュする方法も考えられる。しかし、この方法では、記憶部１ａにキャッシュされるデータ量が増大する。これに対して、本実施の形態では、チェック符号をメタデータ２０に格納して、ヘッダ領域に格納するデータ量を削減したことで、記憶部１ａにキャッシュされるデータ量を削減できる。
【００３０】
すなわち、本実施の形態のストレージ制御装置１によれば、小容量のキャッシュ領域を用いてストレージ装置２の読み出し性能を向上させることができる。
〔第２の実施の形態〕
図２は、第２の実施の形態に係るストレージシステムの構成例を示す図である。図２に示すように、第２の実施の形態に係るストレージシステムは、ホストサーバ５０と、ノードブロック１０１，１０２とを有する。ホストサーバ５０は、例えば、業務処理などの各種の処理を実行するサーバコンピュータである。ノードブロック１０１，１０２は、例えば、それぞれ１つの筐体に収容されるストレージ装置である。
【００３１】
ノードブロック１０１は、ノード１１１，１１２およびストレージ１１３，１１４を有する。ノード１１１，１１２は、ホストサーバ５０から受け付けたＩ／Ｏ要求を処理するストレージ制御装置であり、例えば、サーバコンピュータとして実現される。ストレージ１１３はノード１１１に接続され、ストレージ１１４はノード１１２に接続されている。ストレージ１１３，１１４は、それぞれ複数台の不揮発性記憶装置の集合である。
【００３２】
ノードブロック１０２は、ノード１２１，１２２およびストレージ１２３，１２４を有する。ノード１２１，１２２は、ホストサーバ５０から受け付けたＩ／Ｏ要求を処理するストレージ制御装置であり、例えば、サーバコンピュータとして実現される。ストレージ１２３はノード１２１に接続され、ストレージ１２４はノード１２２に接続されている。ストレージ１２３，１２４は、それぞれ複数台の不揮発性記憶装置の集合である。
【００３３】
なお、ホストサーバ５０とノード１１１，１１２，１２１，１２２とは、例えば、ＦＣ（Fibre Channel）やｉＳＣＳＩ（Internet Small Computer System Interface）などを利用して接続される。ノード１１１，１１２，１２１，１２２は、例えば、ＦＣ、ｉＳＣＳＩ、ＬＡＮ（Local Area Network）などを利用して接続される。ノード１１１，１１２，１２１，１２２とストレージ１１３，１１４，１２３，１２４とは、例えば、ＦＣ、ｉＳＣＳＩ、ＳＡＴＡ（Serial Advanced Technology Attachment）などを利用してそれぞれ接続される。
【００３４】
また、本実施の形態では、ストレージ１１３，１１４，１２３，１２４にそれぞれ含まれる不揮発性記憶装置は、ＳＳＤであるものとする。
また、ノード１１１，１１２，１２１，１２２は、図１に示したストレージ制御装置１の一例であり、ストレージ１１３，１１４，１２３，１２４は、図１に示したストレージ装置２の一例である。
【００３５】
ところで、図２に示すストレージシステムでは、例えば、ノード間の負荷分散を図るために、ホストサーバ５０から書き込みが要求されたデータが複数のデータ（実データ）に分割され、ノード１１１，１１２，１２１，１２２に分散配置される。ノード１１１，１１２，１２１，１２２に分散配置された実データは、それぞれストレージ１１３，１１４，１２３，１２４に書き込まれる。
【００３６】
例えば、ホストサーバ５０からのアクセス対象となる１以上の論理ボリュームが、ストレージ１１３，１１４，１２３，１２４の記憶領域を用いて作成される。そして、論理ボリュームを識別するＬＵＮ（Logical Unit Number）と、論理ボリューム内のアクセス単位である論理ブロックを識別するＬＢＡ（Logical Block Address）とをキーとして、８キロバイトのデータごとにノード１１１，１１２，１２１，１２２に分散配置される。
【００３７】
また、このストレージシステムでは、データが書き込まれる物理領域として、ストレージ１１３，１１４，１２３，１２４を束ねたストレージプールが利用される。ストレージプールに書き込まれるデータの位置は、ストレージプールにおけるアドレス（物理アドレス）により管理される。
【００３８】
図３は、ノードのハードウェア構成例を示す図である。なお、図３ではノード１１１のハードウェア構成について例示するが、ノード１１２，１２１，１２２についてもノード１１１と同様のハードウェア構成によって実現される。
【００３９】
ノード１１１は、プロセッサ１３１、メモリ１３２、ホストインタフェース（Ｉ／Ｆ）１３３、通信インタフェース（Ｉ／Ｆ）１３４およびドライブインタフェース（Ｉ／Ｆ）１３５を備える。なお、プロセッサ１３１は、図１に示した制御部１ｂの一例であり、メモリ１３２は、図１に示した記憶部１ａの一例である。
【００４０】
プロセッサ１３１は、メモリ１３２からプログラムを読み出して処理する処理装置である。プロセッサ１３１は、例えば、ＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。また、プロセッサ１３１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００４１】
メモリ１３２は、ＤＲＡＭ（Dynamic RAM）などの揮発性記憶装置であり、ノード１１１の主記憶装置として使用される。メモリ１３２には、プロセッサ１３１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１３２には、プロセッサ１３１による処理に必要な各種データが格納される。
【００４２】
ホストインタフェース１３３は、ホストサーバ５０と通信するためのインタフェース装置である。通信インタフェース１３４は、他のノード１１２，１２１，１２２と通信するためのインタフェース装置である。ドライブインタフェース１３５は、ストレージ１１３に含まれるＳＳＤと通信するためのインタフェース装置である。
【００４３】
なお、プロセッサ１３１に実行されるプログラムは、例えば、可搬型記録媒体１３６に記憶され、メモリ１３２に読み込まれる。あるいは、プログラムは、ネットワークを介して接続されたコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてメモリ１３２に読み込まれる。
【００４４】
次に、ノード１１１，１１２，１２１，１２２の処理について詳しく説明する。以下の記載では、例としてノード１１１の処理について説明するが、他のノード１１２，１２１，１２２でも同様の処理が実行される。
【００４５】
図４は、ノードが備える処理機能の構成例を示す図である。ノード１１１は、上位接続部１４１、キャッシュ管理部１４２、重複排除部１４３、メタデータ管理部１４４、追記部１４５およびＩ／Ｏ部１４６を備える。これらの各部の処理は、例えば、プロセッサ１３１が所定のプログラムを実行することで実現される。また、ノード１１１は、ライトバッファ１５１、論物メタキャッシュ１５２、データユニット（ＤＵ）ヘッダキャッシュ１５３およびメタデータ記憶部１５４を備える。これらは、メモリ１３２の記憶領域によって実現される。
【００４６】
上位接続部１４１は、ホストサーバ５０からＩ／Ｏ要求（書き込み要求、読み出し要求）を受け付ける。キャッシュ管理部１４２は、上位接続部１４１が受け付けたＩ／Ｏ要求に応じたＩ／Ｏ処理を、メモリ１３２に確保された図示しないキャッシュメモリの領域（ボリュームキャッシュ）を用いて制御する。重複排除部１４３は、Ｉ／Ｏ要求に応じてストレージ１１３に格納されるデータの重複を排除するための制御を行う。
【００４７】
メタデータ管理部１４４は、重複排除のために参照されるメタデータを管理する。追記部１４５は、データを連続的なデータユニットで管理し、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）ユニットの単位でストレージ１１３に追記およびまとめ書きを行う。また、追記部１４５は、データの圧縮伸長を行う。Ｉ／Ｏ部１４６は、ストレージ１１３に対するＲＡＩＤユニットのデータの書き込みを行う。
【００４８】
ライトバッファ１５１には、追記部１４５によるまとめ書き対象のデータが一時的に格納される。論物メタキャッシュ１５２には、一部の論物メタデータをキャッシュされる。後述するように、論物メタデータとは、論理ボリュームの論理アドレスと物理アドレスとの変換に用いられるメタデータである。
【００４９】
データユニットヘッダキャッシュ１５３には、データブロックのヘッダ領域に含まれるデータユニットヘッダのデータがキャッシュされる。メタデータ記憶部１５４には、論物メタデータ以外のメタデータが格納される。例えば、メタデータ記憶部１５４には、データブロックマップ、リファレンスカウンタなどが格納される。
【００５０】
次に、ストレージシステムにおけるデータの管理方法について説明する。
まず、図５は、ストレージの記憶領域についての管理形態の例を示す図である。図５に示すように、ノード１１１は、ストレージ１１３に含まれる複数台のＳＳＤを使用したストレージプール２００を管理する。ストレージプール２００は、ＲＡＩＤによって管理される。本実施の形態では、ＲＡＩＤ−６が用いられるものとする。なお、ノード１１１は、複数のストレージプール２００を管理してもよい。
【００５１】
ストレージプール２００は、１つ以上のティアを含み、ティアは、１つ以上のドライブグループを含む。ドライブグループは、ＲＡＩＤによって管理されるＳＳＤのグループであり、いわゆる「ＲＡＩＤグループ」の一種である。ドライブグループは、例えば、それぞれ６台〜２４台のＳＳＤを含む。例えば、６台のＳＳＤを含むドライブグループにおいては、１つのストライプについて、３台のＳＳＤにユーザデータが記憶され、２台のＳＳＤにパリティが記憶され、残りのＳＳＤはホットスペア用に用いられる。
【００５２】
図５の例では、ストレージプール２００は、ティア２０１を含む。また、ティア２０１は、ＳＳＤ２０２ａ，２０２ｂ，２０２ｃ，・・・を含むドライブグループ２０２と、ＳＳＤ２０３ａ，２０３ｂ，２０３ｃ，・・・を含むドライブグループ２０３とを含む。
【００５３】
図６は、ＲＡＩＤユニットについて説明するための図である。ドライブグループに対しては、ＲＡＩＤユニットを単位として書き込みが行われる。ＲＡＩＤユニットは、ドライブグループに対してデータが書き込まれる際にライトバッファ１５１でバッファリングされるまとめ書き単位の領域である。換言すると、データはＲＡＩＤユニット単位でまとめてドライブグループに対して追記書きされる。ＲＡＩＤユニットのサイズは、例として２４メガバイトであるとする。
【００５４】
ＲＡＩＤユニットには、複数のデータブロックが配置される。各データブロックは、スロットを用いて管理される。各データブロックは一定のサイズを有し、そのサイズは例として３８４キロバイトであるとする。この場合、ＲＡＩＤユニットには６４個のスロットが含まれる。
【００５５】
ストレージプール２００での物理位置を示す物理番号は、ドライブグループ（ＤＧ）を識別するＤＧ番号（ＤＧ＃）と、ＲＡＩＤユニット（ＲＵ）を識別するＲＵ番号（ＲＵ＃）と、スロットを識別するスロット番号（スロット＃）との組み合わせによって示される。また、データブロックを識別するデータブロック番号（ＤＢ＃）と物理番号との対応関係は、データブロックマップ１６１によって管理される。データブロックマップ１６１は、メタデータ記憶部１５４に記憶されるメタデータの１つである。
【００５６】
図６に示すデータブロックマップ１６１は、例として、ＤＧ番号が「１」（ＤＧ＃１）であり、ＲＵ番号が「１」（ＲＵ＃１）であるＲＡＩＤユニットについての情報を保持している。また、この例では、データブロック（ＤＢ）＃１０１，＃１０２，・・・，＃１６４がそれぞれスロット＃１，＃２，・・・，＃６４に記憶されるように設定されている。
【００５７】
図７は、データブロックに対するデータの格納について説明するための図である。
論理ブロックは、ホストサーバ５０からの論理ボリュームに対するアクセスの最小単位であり、そのサイズは例として５１２バイトであるとする。各論理ブロックは、論理ボリュームを示すＬＵＮと、論理ブロックアドレス（ＬＢＡ）とによって指定される。
【００５８】
上位接続部１４１は、書き込みが要求されたデータを５１２バイトの論理ブロックに分割する。また、上位接続部１４１は、論理ブロックのデータに基づくＢＣＣ（Block Check Code）を生成し、ＢＣＣを論理ブロックに付加する。ＢＣＣは、論理ブロックごとにデータの誤りをチェックするためのデータであり、「保証コード」と呼ばれる場合もある。ＢＣＣを付加することで、ノード１１１内で実施されるコピー処理や、ストレージプール２００に対する書き込み処理、ストレージプール２００からの読み出し処理の際に生じうるデータの誤りをチェックできるようになる。ＢＣＣのサイズは、例えば８キロバイトである。
【００５９】
ＢＣＣは、ＣＲＣ（Cyclic Redundancy Check）とＢＩＤ（Block Identifier）とを含む。ＣＲＣは、論理ブロックのデータに基づいて算出されるチェック符号であり、例として２バイトのサイズを有するものとする。ＢＩＤは、論理領域内のデータ位置をチェックするための情報である。例えば、ＢＩＤは、ＬＢＡに対応するカウント値である。このカウント値は、例えば、ＬＢＡをBig Endianで表現した場合の下位３２ビットの値に相当する。ＢＩＤのサイズは、例として６バイトであるものとする。
【００６０】
一方、データの重複排除は、例として８キロバイト単位で行われる。重複排除部１４３は、書き込みが要求された１６個の論理ブロックのデータを８キロバイトのデータにまとめて、重複の有無を判定する。以下の説明では、重複排除の対象となる、論理ブロック１６個分のデータの集合を、「８ＫＢデータ」と記載する。また、このとき、重複排除部１４３は、８ＫＢデータに含まれる１６個の論理ブロックに対応するＢＣＣを、実データから切り離す。
【００６１】
重複排除部１４３は、８ＫＢデータが重複していない（すなわち、同一のデータがストレージプール２００に格納されていない）と判定した場合、８ＫＢデータを追記部１４５に受け渡して、ストレージプール２００への書き込みを要求する。追記部１４５は、重複排除部１４３からの８ＫＢデータを圧縮し、圧縮後のデータをデータブロックに書き込む。以下、データブロックに書き込まれる、８ＫＢデータに対応するデータを、「データユニット」と記載する。データユニットは重複が排除されたデータであるので、ストレージプール２００内では同一内容のデータユニットは存在しない。
【００６２】
なお、８ＫＢデータを圧縮することは必須ではない。そのため、データユニットとして８ＫＢデータが非圧縮の状態のままデータブロックに書き込まれてもよい。
データブロックに対しては、データユニットが追記書きされる。追記部１４５は、データブロック内のペイロード領域の先頭側から順に、データユニットを書き込んでいく。換言すると、データユニットは、データブロック内のペイロード領域のうち、空き領域の先頭側に書き込まれる。ここでは、このような書き込み方法を「追記書き」と記載する。なお、データブロックに対するデータユニットの追記書きについては、後にあらためて説明する。
【００６３】
このようにしてデータユニットが格納されたデータブロックが、ストレージプール２００に書き込まれる。上記のように論理ブロック間でのデータの重複が排除されることで、ユニークなデータユニットだけがストレージプール２００に書き込まれる。これにより、ストレージプール２００の使用容量を削減できるとともに、ストレージプール２００に対するデータの書き込み回数を削減できる。書き込み先となるＳＳＤのフラッシュメモリは、書き込み回数に制限があるが、上記の重複排除によって書き込み回数が削減されることで、フラッシュメモリの寿命を延ばすことができる。
【００６４】
ところで、論理ブロックに対応するＢＣＣに含まれるデータのうち、ＣＲＣは、論理ブロックのデータに基づいて算出されるデータである。このため、複数の論理ブロック間で、実データ（論理ブロックのデータ）が同一であればＣＲＣも同一になる。一方、ＢＩＤは、論理ブロックごとに異なる値になり得る。このため、論理ブロックの実データと対応するＢＣＣとを一体化して重複排除の対象とすることは、重複排除の効率が著しく悪化するため、現実的に不可能である。このような理由から、ＢＣＣのデータ、特にＢＩＤは、論理ブロックの実データとは別に、論物メタデータ１６２ａを用いて管理される。
【００６５】
論物メタデータ１６２ａは、８ＫＢデータのそれぞれに対応付けて生成されるメタデータである。論物メタデータ１６２ａの基本的な役割は、後述するように、論理アドレスと物理アドレスとの対応関係を保持することである。本実施の形態では、このような論物メタデータ１６２ａに対して、８ＫＢデータに含まれる各論理ブロックの実データに対応するＣＲＣおよびＢＩＤが格納される。
【００６６】
ここで、詳しくは後述するが、ＣＲＣを論物メタデータ１６２ａに格納することの目的は、データの読み出しの際にストレージプール１００のＳＳＤにアクセスする回数を減らすとともに、ノード１１１にキャッシュしておく管理データの容量を減らす点にある。本実施の形態では、データ読み出しの際に、論物メタデータ１６２ａと、データブロックのヘッダ領域内の管理データと、データブロックのペイロード領域内の実データとが、個別に読み出される。これらのうち、データブロックのヘッダ領域内の管理データのみノード１１１内にキャッシュし、残りをストレージプール２００に配置しておくことで、データ読み出しの際にストレージプール２００のＳＳＤにアクセスする回数が削減される。その際に、ＣＲＣを、キャッシュ対象とするデータブロックのヘッダ領域でなく、論物メタデータ１６２ａに格納しておくことで、キャッシュされるデータ容量が削減される。
【００６７】
一方、ＢＩＤについては、先頭の論理ブロックに対応するＢＩＤのみが論物メタデータ１６２ａに記録される。これは、８ＫＢデータ内の先頭論理ブロックのＢＩＤがわかれば、残りの論理ブロックのＢＩＤは、先頭論理ブロックのＢＩＤをカウントアップすることで復元できるからである。このように、論物メタデータ１６２ａに対して８ＫＢデータ内の先頭論理ブロックのＢＩＤだけが記録されることで、論物メタデータ１６２ａの記憶領域の容量を削減できる。
【００６８】
図８は、論物メタデータとデータブロックとの関係を示す図である。図８に示す論物メタデータ群１６２は、８ＫＢデータごとの論物メタデータ１６２ａの集合である。なお、論物メタデータ１６２ａは、図１に示したメタデータ２０の一例である。
【００６９】
論物メタデータ群１６２には、各論理ボリュームにおける８ＫＢデータの領域ごとにエントリが存在し、各エントリの内容が論物メタデータ１６２ａを示す。図８では、論物メタデータ１６２ａとして、論物メタデータ１６２ａ１，１６２ａ２，１６２ａ３が例示されている。論物メタデータ１６２ａ１は、ＬＵＮ＃０で示される論理ボリューム内のある８ＫＢデータに対応する。論物メタデータ１６２ａ２は、ＬＵＮ＃１で示される論理ボリューム内のある８ＫＢデータに対応する。論物メタデータ１６２ａ３は、ＬＵＮ＃２で示される論理ボリューム内のある８ＫＢデータに対応する。
【００７０】
前述のように、論物メタデータ１６２ａは、論理アドレスと物理アドレスとの対応関係を保持するためのメタデータである。論物メタデータ１６２ａには、物理アドレスを示すデータとして、データブロック番号（ＤＢ＃）とインデックスが格納される。データブロック番号は、８ＫＢデータに対応するデータユニットが格納されたデータブロックを識別する番号である。インデックスは、データブロック内でのデータユニットの番号を示す。
【００７１】
また、図８では、データブロック番号「１０１」のデータブロック（ＤＢ＃１０１）が例示されている。図８に示すように、データブロック全体のサイズは３８４キロバイトである。データブロックは、１キロバイトのヘッダ領域と３８３キロバイトのペイロード領域とを含む。ペイロード領域には、データユニットが格納される。データユニットは、ペイロード領域に対して追記書きされる。
【００７２】
ヘッダ領域は、２２４バイトのデータブロックヘッダと、最大２００個のデータユニットヘッダが格納されるデータユニットヘッダ領域とを含む。データユニットヘッダのサイズは４バイトである。ヘッダ領域の合計サイズが、ＳＳＤに対するアクセス単位である５１２バイトの整数倍（ここでは１キロバイト）となって、ペイロード領域の開始位置がアクセス単位の境界となるように、データブロックヘッダのサイズが調整されている。
【００７３】
データブロックヘッダは、データブロックに関する情報を記憶する領域である。データブロックヘッダには、例えば、データユニットが追記書き可能か否か、追記書きされているデータユニットの数、データユニットが次に追記書きされる位置に関する情報などが含まれる。
【００７４】
データユニットヘッダは、ペイロード領域に含まれるデータユニットにそれぞれ対応する。データユニットヘッダは、対応するデータユニットのインデックスに対応する位置にある。すなわち、データユニットヘッダ領域におけるデータユニットヘッダの順番は、ペイロード領域における対応するデータユニットの順番と一致する。データユニットヘッダには、オフセットとサイズとが格納される。オフセットは、対応するデータユニットのペイロード領域における書き込み開始位置（先頭位置）を示す。サイズは、対応するデータユニットのサイズ（データ長）を示す。
【００７５】
図８の例では、ペイロード領域の先頭から順にデータユニット＃１，＃２，＃３が格納されている。また、図８の例では、「オフセット＝０」を含むデータユニットヘッダは、データユニット＃１の位置を指し示す。「オフセット＝６」を含むデータユニットヘッダは、データユニット＃２の位置を指し示す。「オフセット＝１４」を含むデータユニットヘッダは、データユニット＃３の位置を指し示す。
【００７６】
一方、論物メタデータ１６２ａ１は、インデックス「１」により、「オフセット＝０」を含むデータユニットヘッダを指し示している。したがって、追記部１４５は、論物メタデータ１６２ａ１に基づいて「オフセット＝０」を含むデータユニットヘッダを参照し、このデータユニットヘッダに基づいてデータユニット＃１を読み出すことができる。
【００７７】
同様に、追記部１４５は、「インデックス＝１」を含む論物メタデータ１６２ａ２に基づいて「オフセット＝６」を含むデータユニットヘッダを参照し、このデータユニットヘッダに基づいてデータユニット＃２を読み出すことができる。また、追記部１４５は、「インデックス＝２」を含む論物メタデータ１６２ａ３に基づいて「オフセット＝６」を含むデータユニットヘッダを参照し、このデータユニットヘッダに基づいてデータユニット＃２を読み出すことができる。なお、この例では、論物メタデータ１６２ａ２，１６２ａ３に対応する論理ブロックの実データが重複しており、この実データがデータユニット＃２として格納されている。
【００７８】
図９は、論物メタデータの構成例を示す図である。図９に示すように、１つの８ＫＢデータに対応する論物メタデータ１６２ａには、インデックス（Data Unit Index）、ＢＩＤ、データブロック番号（Data Block No.）、ＣＲＣ領域（CRC[0]〜CRC[15]）が含まれる。論物メタデータ１６２ａのサイズは、例えば６４バイトである。インデックス、ＢＩＤ、データブロック番号、ＣＲＣ領域は、例えばそれぞれ１バイト、６バイト、８バイト、３２バイトのサイズを有する。
【００７９】
インデックスは、データブロック内でのデータユニットの番号を示す。データブロック番号は、データブロックの番号を示す。ＢＩＤは、データブロック内の先頭データユニットについての、論理領域におけるデータ位置を示す。このデータ位置は、ＬＢＡに対応するカウント値である。ＣＲＣ領域には、データブロックに含まれる１６個のデータユニットに対応する圧縮前のデータに対応するＣＲＣが格納される。
【００８０】
図１０は、重複排除に用いられるメタデータについて説明するための図である。図１０に示すように、重複排除に用いられるメタデータとしては、前述のデータブロック（ＤＢ）マップ１６１、論物メタデータ群１６２に加え、リファレンスカウンタ（ＲＣ）テーブル１６３がある。リファレンスカウンタテーブル１６３は、物理番号とインデックスとによって識別されるデータと、リファレンスカウンタとを対応付ける情報である。リファレンスカウンタは、対応するデータの重複数（同一内容の８ＫＢデータの数）を示す。
【００８１】
図１０の論物メタデータ群１６２において、例えば、論理番号「１−１」で示される８ＫＢデータは、データブロック（ＤＢ）番号「Ｂ１」のデータブロックの１番目に記憶される。ここで、論理番号「１−１」は、ＬＵＮが「１」でありＬＢＡが「１」であることを示す。また、同じ内容の８ＫＢデータは、重複排除により、データブロック番号とインデックスが同じになる。図１０では、論理番号「１−２」，「２−１」，「２−４」で示される８ＫＢデータの内容が同じであるため、論理番号「１−２」，「２−１」，「２−４」は、データブロック番号「Ｂ２」とインデックス「２」に対応付けられる。
【００８２】
また、論物メタデータ群１６２に記録されたデータブロックの物理位置（スロットの位置）は、データブロックマップ１６１によって示される。図１０のデータブロックマップ１６１においては、例えば、データブロック番号「Ｂ１」が物理番号「１−１−１」に対応付けられている。ここで、物理番号「１−１−１」は、ドライブグループ番号が「１」でＲＡＩＤユニット番号が「１」であるＲＡＩＤユニットにおけるスロットのうち、スロット番号が「１」であるスロットを示す。
【００８３】
さらに、図１０のリファレンスカウンタテーブル１６３においては、例えば、物理番号「２−１−５」およびインデックス「２」に対応するリファレンスカウンタが「３」となっている。これは、物理番号「２−１−５」で示されるスロット、すなわちデータブロック「Ｂ２」に含まれる、インデックス「２」で示されるデータユニットについての重複数が「３」であることを示す。図１０の例では、論理番号「１−２」，「２−１」，「２−４」で示される３つの８ＫＢデータを圧縮した圧縮データが、物理番号「２−１−５」およびインデックス「２」で示される同一のデータユニットとしてストレージプール２００に格納されている。
【００８４】
なお、図示しないが、重複排除に用いられる他のメタデータとしては、例えば、各データユニットに基づいて算出されたハッシュ値を保持するメタデータがある。このメタデータは、書き込みが要求された８ＫＢデータが重複しているか否かを判定するために参照される。
【００８５】
ところで、図１０に示すメタデータのうち、データブロックマップ１６１とリファレンスカウンタテーブル１６３は、ノード１１１内のメタデータ記憶部１５４に保持される。一方、論物メタデータ群１６２に含まれる論物メタデータ１６２ａについては、次の図１１に示すように、すべてがストレージプール２００に保持されるとともに、それらの一部がノード１１１内の論物メタキャッシュ１５２にキャッシュされる。
【００８６】
図１１は、論物メタデータおよびデータブロックの格納状態について説明するための図である。なお、図１１においてストレージプール２００の内部に示される四角形は、それぞれ２４メガバイトのＲＡＩＤユニットを示している。
【００８７】
ストレージプール２００では、例えば４テラバイトの論理ボリュームごとに３２ギガバイトの論物メタ領域が確保される。図１１では、ＬＵＮ＃０で示される論理ボリュームに対応する論物メタ領域２１１ａと、ＬＵＮ＃１で示される論理ボリュームに対応する論物メタ領域２１１ｂとが例示されている。論物メタデータ群１６２に含まれる論物メタデータ１６２ａのうち、ＬＵＮ＃０で示される論理ボリュームに対応するすべての論物メタデータ１６２ａが、論物メタ領域２１１ａに格納される。また、ＬＵＮ＃１で示される論理ボリュームに対応するすべての論物メタデータ１６２ａが、論物メタ領域２１１ｂに格納される。
【００８８】
一方、ノード１１１のメモリ１３２に確保された論物メタキャッシュ１５２には、論物メタデータ群１６２に含まれる論物メタデータ１６２ａの一部だけがキャッシュされる。論物メタデータ１６２ａは、論物メタキャッシュ１５２においては論理ボリュームごとに１ページ（例えば４キロバイト）分だけ記憶される。あるＬＵＮ（「第１のＬＵＮ」とする）に対応する論物メタデータ１６２ａが探索される際に、第１のＬＵＮに対応するページが論物メタキャッシュ１５２上にない場合には、他の第２のＬＵＮに対応するページがページアウトされる。そして、第１のＬＵＮに対応するページがストレージプール２００から論物メタキャッシュ１５２に読み込まれる。
【００８９】
また、ストレージプール２００には、データブロックが格納されるデータブロック領域２１２が確保される。ここで、上記の論物メタ領域は、論理ボリュームの作成時に動的領域から割り当てられ、固定領域化される。ここで、動的領域とは、ストレージプール２００のＲＡＩＤユニットの中から動的に割り当てられる領域である。一方、次の図１２に示すように、データユニットの書き込みの際に、データブロック領域２１２からＲＡＩＤユニットが割り当てられて、そのＲＡＩＤユニットに対応する書き込み領域がライトバッファ１５１に確保される。
【００９０】
図１２は、データの追記書きについて説明するための図である。新たなＲＡＩＤユニットの分のデータユニットが書き込まれる際に、ストレージプール２００のデータブロック領域２１２から書き込み先となるＲＡＩＤユニットが割り当てられる。また、そのＲＡＩＤユニットに対応するライトバッファ１５１がメモリ１３２に確保される。例えば図１２では、ＤＧ＃１およびＲＵ＃１５で示されるＲＡＩＤユニットが割り当てられ、そのＲＡＩＤユニットに対応するライトバッファ１５１がメモリ１３２に確保されている。
【００９１】
そして、例えばＬＵＮ＃１において８ＫＢデータＤ１１の書き込み要求が発生したとする。８ＫＢデータＤ１１が重複していなかったとすると、ライトバッファ１５１上のデータブロック＃１のヘッダ領域にデータユニットヘッダが書き込まれ、８ＫＢデータＤ１１が圧縮されてデータブロック＃１のペイロードに書き込まれ、データブロックヘッダが更新される。その後、ＬＵＮ＃２において８ＫＢデータＤ１２の書き込み要求が発生したとする。８ＫＢデータＤ１２が重複していなかったとすると、ライトバッファ１５１上のデータブロック＃１のヘッダ領域にデータユニットヘッダが追記され、８ＫＢデータＤ１２が圧縮されてデータブロック＃１のペイロードに追記され、データブロックヘッダが更新される。
【００９２】
このようにして、ライトバッファ１５１上のデータブロック＃１において、ヘッダ領域またはペイロード領域が一杯になる（使用可能な空き領域がなくなる）と、データブロック＃１にはそれ以上追記されなくなり、書き込み先が次のデータブロック＃２に移行する。その後、ライトバッファ１５１上のすべてのデータブロックについてヘッダ領域またはペイロード領域が一杯になると、ライトバッファ１５１の内容が、データブロック領域２１２から割り当てられていたＲＡＩＤユニットに書き出される。すなわち、ＲＡＩＤユニットの分だけデータがまとめ書きされる。そして、ライトバッファ１５１が解放される。さらにその後、次の８ＫＢデータの書き込みが行われる際には、データブロック領域２１２からＲＡＩＤユニットが割り当てられ、そのＲＡＩＤユニットに対応するライトバッファ１５１がメモリ１３２に確保される。
【００９３】
以上のように、書き込みが要求された８ＫＢデータは、ＲＡＩＤユニット単位でまとめられた状態でストレージプール２００に一度に書き込まれる。これにより、ストレージプール２００に対するランダムライトが発生しにくくなる。アクセス先となるＳＳＤのフラッシュメモリは、ランダムライトが発生すると書き込み性能が大きく悪化するという特性がある。上記のまとめ書きによってランダムライトが発生しにくくすることで、ストレージプール２００に対する書き込み性能を向上させることができる。
【００９４】
図１３は、データユニットヘッダのキャッシュについて説明するための図である。上記のように、ストレージプール２００のデータブロック領域２１２には、それぞれヘッダ領域とペイロード領域とを含むデータブロックが格納される。また、各データブロックのヘッダ領域のデータのうち、データユニットヘッダのデータは、ノード１１１のメモリ１３２に確保されたデータユニットヘッダキャッシュ１５３にキャッシュされる。
【００９５】
データユニットヘッダは、ストレージプール２００からのデータ読み出しの際に、読み出し対象のデータが格納されたデータユニットのデータブロックにおける位置を取得するために読み出される。このようなデータユニットヘッダをノード１１１のメモリ１３２に確保されたデータユニットヘッダキャッシュ１５３に保持しておくことで、データ読み出し時におけるストレージプール２００に対するアクセス回数を削減できる。その結果、データ読み出しに要する時間を短縮でき、データ読み出し速度を向上させることができる。
【００９６】
また、前述のように、データユニットヘッダに格納されるデータは、オフセットとサイズとに限定されている。これにより、各データユニットヘッダのサイズを小さくすることができ、その結果として、データユニットヘッダが保持されるデータユニットヘッダキャッシュ１５３全体のサイズを抑制できる。例えば、本実施の形態では、各データユニットに対応するデータユニットヘッダのサイズは４バイトであり、各データブロックのデータユニットヘッダ領域はデータユニット２００個分のデータユニットヘッダを格納できるように確保される。これに対して、例えば各データユニットに対応するＣＲＣをデータユニットヘッダに格納した場合、データユニットヘッダのサイズは３２バイト分増加するので、データユニットヘッダキャッシュ１５３全体のサイズは増大する。
【００９７】
本実施の形態では、このように各データユニットヘッダのサイズを小さくしたことから、データブロック領域２２２内のすべてのデータユニットヘッダ（すべてのデータブロック内のデータユニットヘッダ領域のデータ）が、データユニットヘッダキャッシュ１５３に保持されるものとする。この場合、データユニットヘッダキャッシュ１５３のサイズを次の図１４に示すように設定することで、すべてのデータユニットヘッダを保持できるようになる。
【００９８】
図１４は、データユニットヘッダキャッシュのサイズの例を示す図である。図１４では、ドライブ数、スロット数およびＲＡＩＤユニット（ＲＵ）数の設定値ごとに、データユニット（ＤＵ）ヘッダキャッシュ１５３のサイズを示している。ドライブ数は、ドライブグループ（ＤＧ）に含まれるドライブ（ＳＳＤ）の数を示す。スロット数は、ＲＡＩＤユニットに含まれるスロットの数を示す。ＲＡＩＤユニット数は、ドライブグループに含まれるＲＡＩＤユニットの数を示す。データブロック数は、ドライブ数、スロット数およびＲＡＩＤユニット数の設定値におけるデータブロックの総数を示す。
【００９９】
データユニットヘッダキャッシュ１５３のサイズは、ここでは例として、データユニットの圧縮率の関係からデータブロック当たり平均１０個のデータユニットが格納されたものとして計算されている。例えば、ドライブ数が「６」、スロット数が「６４」、ＲＡＩＤユニット数が「２６２１４４」であるとする。この場合、データユニットヘッダキャッシュ１５３として６１４４メガバイトの領域をメモリ１３２上に確保することで、ドライブグループ内のすべてのデータユニットヘッダをデータユニットヘッダキャッシュ１５３に保持しておくことができる。
【０１００】
なお、データユニットヘッダキャッシュ１５３には、データブロック領域２２２内の一部のデータユニットヘッダのみがキャッシュされてもよい。この場合、データユニットヘッダキャッシュ１５３には、各データブロックのデータユニットヘッダ領域単位で、例えばＬＲＵ（Least Recently Used）方式により、データユニットヘッダがキャッシュされる。例えば、メモリ１３２上にデータユニットヘッダキャッシュ１５３を一定サイズ分確保する場合、上記のように各データユニットヘッダのサイズが小さくなっていることから、一定サイズの領域にキャッシュできるデータユニットヘッダの数を増やすことができる。これにより、キャッシュヒット率が向上して、データ読み出し時におけるストレージプール２００へのアクセス回数を削減できる。その結果、全体としてデータ読み出し速度を向上させることができる。
【０１０１】
次に、データ書き込み時およびデータ読み出し時におけるノード１１１の処理について、シーケンス図を用いて説明する。
まず、図１５、図１６は、重複がない場合の書き込み処理例を示すシーケンス図である。
【０１０２】
［ステップＳ１１］キャッシュ管理部１４２（図示せず）は、重複排除部１４３に書き込み対象のデータを出力し、このデータのライトバックを要求する。ライトバックの対象は、メモリ１３２上のボリュームキャッシュに格納された論理ボリュームのデータのうち、ダーティデータである。また、書き込み対象のデータには、ホストサーバ５０からの書き込み時における上位接続部１４１の処理により、５１２バイトの論理ブロックごとにＢＣＣが付加されている。
【０１０３】
［ステップＳ１２］重複排除部１４３は、書き込み対象のデータおよびＢＣＣを、論理ブロック１６個ずつ、すなわち８ＫＢデータごとにまとめる。これ以後、８ＫＢデータごとに処理が実行される。重複排除部１４３は、書き込み対象の８ＫＢデータのハッシュ値を算出し、データユニットごとのハッシュ値を保持するメタデータ（図示せず）を参照して、書き込み対象の８ＫＢデータが重複しているかを判定する。算出されたハッシュ値がメタデータ内に存在していた場合、データが重複していると判定される。ここでは、データが重複していないと判定されたとする。
【０１０４】
［ステップＳ１３］重複排除部１４３は、新規のデータユニットの書き込みを追記部１４５に要求する。
［ステップＳ１４］追記部１４５は、データユニットの追記のためのＲＡＩＤユニット（ＲＵ）が割り当てられていない場合、Ｉ／Ｏ部１４６に対してＲＡＩＤユニットの割り当てを要求する。
【０１０５】
［ステップＳ１５］Ｉ／Ｏ部１４６は、ストレージプール２００のデータブロック領域２１２から空きのＲＡＩＤユニットを選択し、選択したＲＡＩＤユニットのＲＡＩＤユニット番号を追記部１４５に通知する。これにより、ＲＡＩＤユニットが割り当てられる。追記部１４５は、割り当てられたＲＡＩＤユニットに対応するライトバッファ１５１をメモリ１３２に設定する。
【０１０６】
なお、ＲＡＩＤユニットが割り当て済みの場合、ステップＳ１４，Ｓ１５の実行は省略される。
［ステップＳ１６］追記部１４５は、データユニットヘッダの内容に基づいて、データブロックにおける新規データユニットの追記位置を決定する。
【０１０７】
［ステップＳ１７］追記部１４５は、書き込み対象の８ＫＢデータを圧縮し、圧縮後のデータ、すなわち新規データユニットを、決定された追記位置に追記書きする。
［ステップＳ１８］追記部１４５は、新規データユニットを追記したことが反映されるように、その追記先のデータブロックにおけるデータブロックヘッダおよびデータユニットヘッダ領域を更新する。データユニットヘッダ領域には、追記されたデータユニットに対応するデータユニットヘッダが追記される。また、追記部１４５は、追記されたデータユニットヘッダをデータユニットヘッダキャッシュ１５３にキャッシュする。
【０１０８】
［ステップＳ１９］追記部１４５は、追記されたデータをまとめ書きするかを判定する。ＲＡＩＤユニット内のすべてのデータブロックのヘッダ領域またはペイロード領域が一杯の場合に、まとめ書きすると判定される。この場合、追記部１４５は、Ｉ／Ｏ部１４６にまとめ書きを要求する。Ｉ／Ｏ部１４６は、ライトバッファ１５１に格納されたデータを、ストレージプール２００のデータブロック領域２１２のうち、割り当てられていたＲＡＩＤユニットの領域に書き込む。書き込みが完了すると、追記部１４５はライトバッファ１５１を解放する。
【０１０９】
［ステップＳ２０］追記部１４５は、新規データユニットの書き込み完了を示す応答を重複排除部１４３に出力する。
［ステップＳ２１］重複排除部１４３は、メタデータ管理部１４４にリファレンスカウンタの更新を要求する。
【０１１０】
［ステップＳ２２］メタデータ管理部１４４は、書き込まれたデータユニットに対応するリファレンスカウンタをインクリメントする。この段階では、リファレンスカウンタは「０」から「１」にインクリメントされる。また、データが上書きされた場合、メタデータ管理部１４４は、上書き前のデータユニットに対応するリファレンスカウンタをデクリメントする。
【０１１１】
［ステップＳ２３］メタデータ管理部１４４は、リファレンスカウンタの更新完了を示す応答を重複排除部１４３に出力する。
［ステップＳ２４］重複排除部１４３は、メタデータ管理部１４４に論物メタデータ１６２ａの更新を要求する。このとき、重複排除部１４３は、書き込み対象の８ＫＢデータを示すＬＵＮおよびＬＢＡと、ＢＩＤと、書き込まれたデータユニットの位置を示すデータブロック番号およびインデックスとを、メタデータ管理部１４４に通知する。これらに加えて、重複排除部１４３は、書き込み対象の８ＫＢデータ内の各論理ブロックのデータに対応するＣＲＣをメタデータ管理部１４４に通知する。
【０１１２】
［ステップＳ２５］メタデータ管理部１４４は、書き込み対象の８ＫＢデータに対応する論物メタデータ１６２ａを更新する。このとき、論物メタデータ１６２ａには、ＢＩＤ、データブロック番号、インデックスとともに、ＣＲＣが書き込まれる。
【０１１３】
この段階では、更新された論物メタデータ１６２ａは、メモリ１３２上の論物メタキャッシュ１５２にキャッシュされる。そして、この後の所定のタイミングで、キャッシュされた論物メタデータ１６２ａの内容が、ストレージプール２００の論物メタ領域に反映される。なお、更新対象の論物メタデータ１６２ａが論物メタキャッシュ１５２にキャッシュされていなかった場合、図１６に破線の矢印で示すように、この論物メタデータ１６２ａはＩ／Ｏ部１４６を介してストレージプール２００の論物メタ領域から読み出される。
【０１１４】
［ステップＳ２６］メタデータ管理部１４４は、論物メタデータ１６２ａの更新完了を示す応答を重複排除部１４３に出力する。
［ステップＳ２７］重複排除部１４３は、ライトバックの完了を示す応答をキャッシュ管理部１４２に出力する。
【０１１５】
以上の処理により、書き込み対象のデータに対応するＣＲＣは、論物メタデータ１６２ａに格納される。また、書き込まれたデータブロックの位置を示すオフセットおよびサイズを含むデータユニットヘッダは、データユニットヘッダキャッシュ１５３にキャッシュされる。
【０１１６】
図１７は、重複がある場合の書き込み処理例を示すシーケンス図である。
［ステップＳ３１］キャッシュ管理部１４２は、図１５のステップＳ１１と同様に、重複排除部１４３に書き込み対象のデータを出力し、このデータのライトバックを要求する。
【０１１７】
［ステップＳ３２］重複排除部１４３は、図１５のステップＳ１２と同様に、書き込み対象のデータおよびＢＣＣを、論理ブロック１６個ずつ、すなわち８ＫＢデータごとにまとめる。これ以後、８ＫＢデータごとに処理が実行される。重複排除部１４３は、書き込み対象の８ＫＢデータのハッシュ値を算出し、データユニットごとのハッシュ値を保持するメタデータを参照して、書き込み対象の８ＫＢデータが重複しているかを判定する。ここでは、図１５のステップＳ１２とは異なり、データが重複していると判定されたとする。
【０１１８】
［ステップＳ３３］重複排除部１４３は、対応するデータユニットの位置を示すデータブロック番号およびインデックスを特定し、特定されたデータブロック番号をメタデータ管理部１４４に出力して、ＤＢ−ＲＵ変換を要求する。ＤＢ−ＲＵ変換とは、データブロック番号を物理番号に変換する処理である。
【０１１９】
［ステップＳ３４］メタデータ管理部１４４は、データブロックマップ１６１に基づいて、データブロック番号に対応する物理番号（ＤＧ番号、ＲＵ番号、スロット番号）を特定する。
【０１２０】
［ステップＳ３５］メタデータ管理部１４４は、特定された物理番号を重複排除部１４３に出力する。
［ステップＳ３６］重複排除部１４３は、物理番号およびインデックスに対応するリファレンスカウンタの更新をメタデータ管理部１４４に要求する。
【０１２１】
［ステップＳ３７］メタデータ管理部１４４は、該当するリファレンスカウンタをインクリメントする。
［ステップＳ３８］メタデータ管理部１４４は、リファレンスカウンタの更新完了を示す応答を重複排除部１４３に出力する。
【０１２２】
以後のステップＳ３９〜Ｓ４２では、図１６のステップＳ２４〜Ｓ２７と同様の処理が実行される。すなわち、重複排除部１４３は、メタデータ管理部１４４に論物メタデータ１６２ａの更新を要求し（ステップＳ３９）、メタデータ管理部１４４は、論物メタデータ１６２ａを更新する（ステップＳ４０）。このとき、論物メタデータ１６２ａには、書き込み対象の８ＫＢデータ内の各論理ブロックのデータに対応するＣＲＣが書き込まれる。メタデータ管理部１４４が重複排除部１４３に応答すると（ステップＳ４１）、重複排除部１４３は、ライトバックの完了を示す応答をキャッシュ管理部１４２に出力する（ステップＳ４２）。
【０１２３】
以上のように、データの重複がある場合には、ストレージプール２００に対するデータユニットの書き込みは行われず、メタデータの更新のみが行われる。また、データの重複がない場合と同様に、書き込み対象のデータに対応するＣＲＣは、論物メタデータ１６２ａに格納される。一方、書き込み対象の８ＫＢデータに対応するデータユニットの位置を示すデータユニットヘッダは、図１７の処理の実行開始時点ですでにデータユニットヘッダキャッシュ１５３にキャッシュされた状態になっている。
【０１２４】
図１８は、読み出し処理例を示すシーケンス図である。
［ステップＳ５１］キャッシュ管理部１４２（図示せず）は、論理アドレスを用いてデータのステージングを重複排除部１４３に要求する。例えば、ホストサーバ５０から読み出しが要求されたデータが、メモリ１３２のボリュームキャッシュにキャッシュされていない場合に、このデータのステージングが要求される。
【０１２５】
［ステップＳ５２］重複排除部１４３は、読み出しが要求された論理アドレスの範囲を、論理ブロック１６個ずつ、すなわち８ＫＢデータごとに分割する。これ以後、８ＫＢデータごとに処理が実行される。重複排除部１４３は、読み出し対象の８ＫＢデータを示す論理アドレスに対応する論物メタデータ１６２ａの取得を、メタデータ管理部１４４に要求する。
【０１２６】
［ステップＳ５３］メタデータ管理部１４４は、要求された論物メタデータ１６２ａが論物メタキャッシュ１５２にキャッシュされていない場合、論物メタデータ１６２ａの読み出しをＩ／Ｏ部１４６に要求する。
【０１２７】
［ステップＳ５４］Ｉ／Ｏ部１４６は、要求された論物メタデータ１６２ａをストレージプール２００の論物メタ領域から読み出し、メタデータ管理部１４４に出力する。このとき、読み出された論物メタデータ１６２ａには、読み出し対象の８ＫＢデータに対応するＣＲＣが含まれている。
【０１２８】
なお、要求された論物メタデータ１６２ａが論物メタキャッシュ１５２にキャッシュされていた場合、ステップＳ５３，Ｓ５４の処理は実行されず、メタデータ管理部１４４は、論物メタデータ１６２ａを論物メタキャッシュ１５２から読み出す。
【０１２９】
［ステップＳ５５］メタデータ管理部１４４は、論物メタデータ１６２ａを重複排除部１４３に出力する。重複排除部１４３は、論物メタデータ１６２ａをメモリ１３２に一時的に格納する。
【０１３０】
［ステップＳ５６］重複排除部１４３は、論物メタデータ１６２ａから取得したデータブロック番号をメタデータ管理部１４４に出力して、ＤＢ−ＲＵ変換を要求する。
［ステップＳ５７］メタデータ管理部１４４は、データブロックマップ１６１に基づいて、データブロック番号に対応する物理番号（ＤＧ番号、ＲＵ番号、スロット番号）を特定する。
【０１３１】
［ステップＳ５８］メタデータ管理部１４４は、特定された物理番号を重複排除部１４３に出力する。
［ステップＳ５９］重複排除部１４３は、特定された物理番号と、論物メタデータ１６２ａから取得したインデックスとを追記部１４５に出力して、データユニット（ＤＵ）の読み出しを要求する。
【０１３２】
［ステップＳ６０］追記部１４５は、読み出しが要求されたデータユニットに対応するデータユニットヘッダを、データユニットヘッダキャッシュ１５３から取得する。
［ステップＳ６１］追記部１４５は、取得したデータユニットヘッダから、対応するデータブロックにおけるデータユニットのオフセット位置を取得する。
【０１３３】
［ステップＳ６２］追記部１４５は、取得したオフセット位置をＩ／Ｏ部１４６に出力して、データユニットの読み出しを要求する。
［ステップＳ６３］Ｉ／Ｏ部１４６は、オフセット位置に基づき、ストレージプール２００のデータブロック領域２１２からデータユニットを読み出して、追記部１４５に出力する。
【０１３４】
［ステップＳ６４］追記部１４５は、読み出されたデータユニット（圧縮データ）を伸張する。これにより、８ＫＢデータが復元される。
［ステップＳ６５］追記部１４５は、復元された８ＫＢデータを重複排除部１４３に出力する。
【０１３５】
［ステップＳ６６］ステップＳ５２〜Ｓ６５の処理が読み出し対象の８ＫＢデータごとに実行されることで、読み出しが要求されたデータが得られる。重複排除部１４３は、読み出しが要求されたデータを５１２バイトごとの論理ブロックに分割し、ステップＳ５５で取得した論物メタデータ１６２ａから取得したＣＲＣおよびＢＩＤを用いて、各論理ブロックのデータにＢＣＣを付加する。重複排除部１４３は、各論理ブロックのデータをＢＣＣとともにキャッシュ管理部１４２に出力する。図示しないが、ＢＣＣ付きの論理ブロックのデータは上位接続部１４１に出力され、論理ブロックごとにＢＣＣチェックが行われる。各論理ブロックのデータに異常がない場合、これらのデータからＢＣＣが切り離されてホストサーバ５０に出力される。また、出力されたデータは、キャッシュ管理部１４２によりボリュームキャッシュにキャッシュされる。
【０１３６】
以上の図１８の処理では、論物メタデータ１６２ａの読み出し（ステップＳ５４）と、データユニットの読み出し（ステップＳ６３）という２回だけ、ストレージプール２００に対するアクセスが行われる。一方、データユニットヘッダはデータユニットヘッダキャッシュ１５３に保持されているので、データユニットヘッダの取得時（ステップＳ６０）にはストレージプール２００に対するアクセスは行われない。
【０１３７】
ここで、例えば、ＣＲＣがデータユニットヘッダに格納され、かつ、データユニットヘッダがメモリ１３２に保持されていない場合を考える。この場合、データユニットヘッダの取得時（ステップＳ６０）において、ＣＲＣを含むデータユニットヘッダがストレージプール２００から読み出される。このため、データの読み出しの際に３回、ストレージプール２００に対するアクセスが行われる。
【０１３８】
これに対して、図１８に示した本実施の形態の読み出し処理では、ストレージプール２００に対するアクセス回数が２回に減少する。これはすなわち、データ読み出し処理の間にストレージ１１３内のＳＳＤにアクセスする回数が減少することを意味する。これにより、データ読み出しに要する時間を短縮でき、データ読み出し速度を向上させることができる。
【０１３９】
例えば、ノード１１１からストレージ１１３に対するデータアクセスのコマンドは多数、同時並行的に発行されている。コマンド発行の多重度（仕掛かり中のコマンド数）が上がってアクセス負荷が高くなるほど、ストレージ１１３のレイテンシ（応答時間）が長くなる。例えば、ＣＲＣがデータユニットヘッダに格納され、かつ、データユニットヘッダがメモリ１３２に保持されていない場合、読み出しコマンドの多重度が「２５６」のとき、４キロバイト当たりのデータについて９３０マイクロ秒といったレイテンシが検出されている。また、読み出しコマンドの多重度が「１６」の場合でも、４キロバイト当たりのデータについて１００マイクロ秒を超えるレイテンシが検出されている。これに対して、図１８に示した本実施の形態の読み出し処理を用いた場合、読み出しコマンドの多重度が「２５６」のとき、レイテンシを６３５マイクロ秒まで改善された例が確認されている。
【０１４０】
また、本実施の形態では、前述のように、ＣＲＣをデータユニットヘッダでなく論物メタデータ１６２ａに格納したことで、データユニットヘッダに格納されるデータがオフセットとサイズとに限定されている。このため、データユニットヘッダが保持されるデータユニットヘッダキャッシュ１５３全体のサイズを抑制することが可能となっている。すなわち、本実施の形態によれば、ノード１１１は、メモリ１３２を効率的に利用しつつ、読み出し処理を高速化できる。
【０１４１】
なお、データユニットヘッダの一部のみをデータユニットヘッダキャッシュ１５３にキャッシュした場合には、ステップＳ６０でキャッシュミスした場合、データユニットヘッダはストレージプール２００のデータブロック領域２１２から読み出される。しかし、この場合でも、データユニットヘッダをキャッシュしない場合と比較して、データ読み出し処理におけるストレージプール２００に対するアクセス回数を、２回に抑制できる可能性が生じる。このため、データ読み出し処理の時間短縮効果が得られる。
【０１４２】
図１９は、読み出し処理例を示すフローチャートである。
［ステップＳ７１］キャッシュ管理部１４２は、論理アドレスを用いてデータのステージングを重複排除部１４３に要求する。
【０１４３】
［ステップＳ７２］重複排除部１４３は、読み出しが要求された論理アドレスの範囲を、論理ブロック１６個ずつ、すなわち８ＫＢデータごとに分割する。これ以後、８ＫＢデータごとに処理が実行される。
【０１４４】
重複排除部１４３は、読み出し対象の８ＫＢデータを示す論理アドレスに対応する論物メタデータ１６２ａの取得を、メタデータ管理部１４４に要求する。メタデータ管理部１４４は、要求された論物メタデータ１６２ａを重複排除部１４３に出力する。このとき、要求された論物メタデータ１６２ａが論物メタキャッシュ１５２にキャッシュされている場合、論物メタデータ１６２ａは論物メタキャッシュ１５２から読み出される。一方、要求された論物メタデータ１６２ａが論物メタキャッシュ１５２にキャッシュされていない場合、論物メタデータ１６２ａはストレージプール２００の論物メタ領域から読み出される。
【０１４５】
［ステップＳ７３］重複排除部１４３は、読み出し対象の８ＫＢデータに含まれる、先頭以外の論理ブロックのＢＩＤを、論物メタデータ１６２ａに含まれるＢＩＤをインクリメントすることで復元する。
【０１４６】
［ステップＳ７４］重複排除部１４３は、論物メタデータ１６２ａから取得したデータブロック番号をメタデータ管理部１４４に出力して、ＤＢ−ＲＵ変換を要求する。メタデータ管理部１４４は、データブロックマップ１６１に基づいて、データブロック番号に対応する物理番号（ＤＧ番号、ＲＵ番号、スロット番号）を特定し、重複排除部１４３に出力する。
【０１４７】
［ステップＳ７５］重複排除部１４３は、特定された物理番号と、論物メタデータ１６２ａから取得したインデックスとを追記部１４５に出力して、データユニット（ＤＵ）の読み出しを要求する。追記部１４５は、読み出しが要求されたデータユニットに対応するデータユニットヘッダを、データユニットヘッダキャッシュ１５３から取得する。
【０１４８】
［ステップＳ７６］追記部１４５は、取得したデータユニットヘッダから、対応するデータブロックにおけるデータユニットのオフセット位置を取得し、取得したオフセット位置をＩ／Ｏ部１４６に出力して、データユニットの読み出しを要求する。Ｉ／Ｏ部１４６は、オフセット位置に基づき、ストレージプール２００のデータブロック領域２１２からデータブロックを読み出して、追記部１４５に出力する。追記部１４５は、読み出されたデータブロック（圧縮データ）を伸張する。これにより、８ＫＢデータが復元される。追記部１４５は、復元された８ＫＢデータを重複排除部１４３に出力する。
【０１４９】
［ステップＳ７７］重複排除部１４３は、復元された８ＫＢデータを５１２バイトごとの論理ブロックに分割し、ステップＳ７２で取得した論物メタデータ１６２ａから取得したＣＲＣおよびＢＩＤを用いて、各論理ブロックのデータにＢＣＣを付加する。重複排除部１４３は、各論理ブロックのデータをＢＣＣとともにキャッシュ管理部１４２に出力する。各論理ブロックのデータはＢＣＣとともに上位接続部１４１に出力される。上位接続部１４１は、論理ブロックごとにＢＣＣチェックを実行する。ＣＲＣによりデータの誤りの有無がチェックされ、ＢＩＤによりデータ位置の誤りの有無（アドレスの整合性）がチェックされる。後者のチェックでは、例えば、論理ブロックのＬＢＡと、取得されたＢＩＤとが一致しない場合、エラーと判定される。
【０１５０】
［ステップＳ７８］ＢＣＣチェックによりエラーが検出されなかった場合、処理はステップＳ７９に進められる。一方、ＢＣＣチェックによりエラーが検出された場合、上位接続部１４１は、読み出しエラーの発生を示す応答をホストサーバ５０に送信する。
【０１５１】
［ステップＳ７９］キャッシュ管理部１４２は、読み出されたデータをメモリ１３２のボリュームキャッシュにステージングする。また、上位接続部１４１は、ＢＣＣを分離したデータをホストサーバ５０に送信する。
【０１５２】
〔第３の実施の形態〕
次に、第２の実施の形態におけるノードの処理の一部が変更された第３の実施の形態について説明する。第３の実施の形態に係るストレージシステムの構成や、ノードが備える基本的な処理機能の構成は第２の実施の形態と同様であるので、第３の実施の形態における構成要素には、基本的に第２の実施の形態と同じ符号を付して説明する。
【０１５３】
図２０は、第３の実施の形態におけるデータブロックの構成例を示す図である。図２０に示すように、第３の実施の形態では、各論理ブロックのデータに対応するＣＲＣを、論物メタデータ２１２ａではなく、データブロックのペイロード領域にデータユニットとともに格納する点で、第２の実施の形態とは異なる。
【０１５４】
ＣＲＣは、対応するデータユニットと連続的に読み出し可能なように、ペイロード領域のうち、対応するデータユニットに隣接する領域に配置される。図２０では例として、データユニットの後ろ側に対応するＣＲＣが配置されているが、データユニットの前側に対応するＣＲＣが配置されてもよい。一方、データユニットヘッダに格納されるデータをオフセットとサイズとに限定し、データユニットヘッダをデータユニットヘッダキャッシュ１５３にキャッシュする点については、第２の実施の形態と共通する。
【０１５５】
図２１は、第３の実施の形態における論物メタデータの構成例を示す図である。第３の実施の形態では、図９に示した論物メタデータ１６２ａの代わりに、図２１に示す論物メタデータ１６２ｂが利用される。論物メタデータ１６２ｂは、論理ブロックごとのＣＲＣを含まない点で論物メタデータ１６２ａとは異なる。論物メタデータ１６２ｂのサイズは、ＣＲＣが除去されたことにより、３２バイトに縮小されている。
【０１５６】
第３の実施の形態における書き込み処理は、次のように行われる。ここでは図１５〜図１７を参照しながら、第２の実施の形態と異なる処理について説明する。
重複がある場合の書き込み処理では、図１５のステップＳ１７において、圧縮された８ＫＢデータ（新規データユニット）とともにＣＲＣが、データブロックのペイロードに追記書きされる。また、図１６のステップＳ２５では、論物メタデータ１６２ａに対してＢＩＤ、データブロック番号およびインデックスが書き込まれるが、ＣＲＣは書き込まれない。重複がない場合の書き込み処理では、図１７のステップＳ４０において、論物メタデータ１６２ａに対してＢＩＤ、データブロック番号およびインデックスが書き込まれるが、ＣＲＣは書き込まれない。
【０１５７】
図２２は、第３の実施の形態における読み出し処理例を示すシーケンス図である。図２２では、図１８と同じ内容の処理には同じステップ番号を付して示しており、それらの説明は省略する。図２２の処理では、図１８のステップＳ５４，Ｓ５５，Ｓ６３，Ｓ６５の代わりに、それぞれステップＳ５４ａ，Ｓ５５ａ，Ｓ６３ａ，Ｓ６５ａが実行される。
【０１５８】
ステップＳ５４ａでは、Ｉ／Ｏ部１４６は、重複排除部１４３から要求された論物メタデータ１６２ａをストレージプール２００の論物メタ領域から読み出し、メタデータ管理部１４４に出力する。このとき、図１８のステップＳ５４とは異なり、読み出された論物メタデータ１６２ａにはＣＲＣは含まれていない。したがって、ステップＳ５５ａでは、論物メタデータ１６２ａが重複排除部１４３に出力されるものの、ＣＲＣは出力されない。なお、要求された論物メタデータ１６２ａが論物メタキャッシュ１５２にキャッシュされていた場合には、ステップＳ５３，Ｓ５４ａの処理は実行されず、論物メタデータ１６２ａは論物メタキャッシュ１５２から読み出され、重複排除部１４３に出力される。
【０１５９】
一方、ステップＳ６３ａでは、Ｉ／Ｏ部１４６は、追記部１４５からのオフセット位置に基づき、ストレージプール２００のデータブロック領域２１２から、データユニットと、これに対応するＣＲＣとを読み出す。データユニットと対応するＣＲＣとは連続した領域に格納されているので、これらはストレージプール２００に対する１回のアクセス要求に応じて読み出される。この後、読み出されたデータユニットが伸張されて８ＫＢデータが復元され、ステップＳ６５ａでは、８ＫＢデータとともにＣＲＣが重複排除部１４３に出力される。
【０１６０】
このようにして、重複排除部１４３は、読み出し対象の８ＫＢブロックと、これに対応するＢＣＣ、すなわちＢＩＤおよびＣＲＣを取得する。そして、重複排除部１４３は、ステップＳ６６においてこれらに基づき、読み出し対象の各論理ブロックのデータとＢＣＣとをキャッシュ管理部１４２に出力する。
【０１６１】
以上の図２２の処理では、図１８の処理と同様に、論物メタデータ１６２ａの読み出し（ステップＳ５４ａ）と、データユニットおよびＣＲＣの読み出し（ステップＳ６３ａ）という２回だけ、ストレージプール２００に対するアクセスが行われる。一方、データユニットヘッダはデータユニットヘッダキャッシュ１５３に保持されているので、データユニットヘッダの取得時（ステップＳ６０）にはストレージプール２００に対するアクセスは行われない。
【０１６２】
これにより、ＣＲＣがデータユニットヘッダに格納され、かつ、データユニットヘッダがメモリ１３２に保持されていない場合と比較して、データ読み出し処理の間にストレージ１１３内のＳＳＤにアクセスする回数が削減される。したがって、データ読み出しに要する時間を短縮でき、データ読み出し速度を向上させることができる。
【０１６３】
また、第２の実施の形態と同様に、第３の実施の形態でも、ＣＲＣをデータユニットヘッダでなく論物メタデータ１６２ａに格納したことで、データユニットヘッダに格納されるデータがオフセットとサイズとに限定されている。このため、データユニットヘッダが保持されるデータユニットヘッダキャッシュ１５３全体のサイズを抑制することが可能となっている。すなわち、第３の実施の形態によれば、ノード１１１は、メモリ１３２を効率的に利用しつつ、読み出し処理を高速化できる。
【０１６４】
なお、上記の各実施の形態に示した装置（例えば、ストレージ制御装置１、ノード１１１，１１２，１２１，１２２）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（Hard Disk Drive：ＨＤＤ）、磁気テープなどがある。光ディスクには、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク（Blu-ray Disc：ＢＤ、登録商標）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０１６５】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１６６】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０１６７】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  ストレージ装置を制御するストレージ制御装置において、
記憶部と、
データが格納されたデータ領域と、前記データ領域における前記データの位置情報が格納されたヘッダ領域とを有するデータブロックが、前記ストレージ装置に配置され、かつ、前記データに対応する論理アドレスと、前記データが格納された前記データブロックを示す識別情報と、前記データブロックにおける前記データの格納順を示すインデックスと、前記データについてのチェック符号とを含むメタデータが、前記ストレージ装置に配置され、かつ、前記位置情報が前記記憶部にキャッシュされるように、前記データの格納処理を制御し、
前記論理アドレスを用いて前記データの読み出しが要求された場合、前記ストレージ装置から前記メタデータを読み出し、読み出した前記メタデータに含まれる前記識別情報および前記インデックスに基づいて前記記憶部から前記位置情報を読み出し、読み出した前記位置情報に基づいて前記ストレージ装置内の前記データブロックから前記データを読み出し、読み出した前記メタデータに含まれる前記チェック符号を用いて、読み出した前記データの正当性をチェックする、制御部と、
を有するストレージ制御装置。
【０１６８】
（付記２）  前記制御部は、前記論理アドレスとは異なる他の論理アドレスを有する、前記データと同一内容の他のデータの書き込みが要求された場合、前記他の論理アドレスと、前記識別情報と同一内容の他の識別情報と、前記インデックスと同一内容の他のインデックスと、前記チェック符号と同一内容の他のチェック符号とを含む他のメタデータを、前記ストレージ装置に格納するとともに、前記他のデータの前記ストレージ装置への書き込みを省略する、
付記１記載のストレージ制御装置。
【０１６９】
（付記３）  前記制御部は、前記データブロックに対応するバッファ領域を前記記憶部に確保し、前記バッファ領域における前記データブロックの前記データ領域に対して、前記データを含む複数のデータを書き込みが要求された順に追記し、前記データ領域に対する追記が不可能な状態になった場合、前記データブロックを前記バッファ領域から前記ストレージ装置に書き出す、
付記１記載のストレージ制御装置。
【０１７０】
（付記４）  前記チェック符号は、前記データについての誤り検出符号である、
付記１乃至３のいずれか１つに記載のストレージ制御装置。
（付記５）  ストレージ装置を制御するストレージ制御装置において、
記憶部と、
データと前記データについてのチェック符号とが隣接して格納されたデータ領域と、前記データ領域における前記データの位置情報が格納されたヘッダ領域とを有するデータブロックが、前記ストレージ装置に配置され、かつ、前記データに対応する論理アドレスと、前記データが格納された前記データブロックを示す識別情報と、前記データブロックにおける前記データの格納順を示すインデックスとを含むメタデータが、前記ストレージ装置に配置され、かつ、前記位置情報が前記記憶部にキャッシュされるように、前記データの格納処理を制御し、
前記論理アドレスを用いて前記データの読み出しが要求された場合、前記ストレージ装置から前記メタデータを読み出し、読み出した前記メタデータに含まれる前記識別情報および前記インデックスに基づいて前記記憶部から前記位置情報を読み出し、読み出した前記位置情報に基づいて前記ストレージ装置内の前記データブロックから前記データと前記チェック符号とを読み出し、読み出した前記チェック符号を用いて、読み出した前記データの正当性をチェックする、制御部と、
を有するストレージ制御装置。
【０１７１】
（付記６）  前記制御部は、前記論理アドレスとは異なる他の論理アドレスを有する、前記データと同一内容の他のデータの書き込みが要求された場合、前記他の論理アドレスと、前記識別情報と同一内容の他の識別情報と、前記インデックスと同一内容の他のインデックスとを含む他のメタデータを、前記ストレージ装置に格納するとともに、前記他のデータの前記ストレージ装置への書き込みを省略する、
付記５記載のストレージ制御装置。
【０１７２】
（付記７）  前記制御部は、前記データブロックに対応するバッファ領域を前記記憶部に確保し、前記バッファ領域における前記データブロックの前記データ領域に対して、前記データを含む複数のデータを書き込みが要求された順に追記し、前記データ領域に対する追記が不可能な状態になった場合、前記データブロックを前記バッファ領域から前記ストレージ装置に書き出す、
付記５記載のストレージ制御装置。
【０１７３】
（付記８）  前記チェック符号は、前記データについての誤り検出符号である、
付記５乃至７のいずれか１つに記載のストレージ制御装置。
（付記９）  ストレージ装置を制御するためのストレージ制御プログラムにおいて、
コンピュータに、
データが格納されたデータ領域と、前記データ領域における前記データの位置情報が格納されたヘッダ領域とを有するデータブロックが、前記ストレージ装置に配置され、かつ、前記データに対応する論理アドレスと、前記データが格納された前記データブロックを示す識別情報と、前記データブロックにおける前記データの格納順を示すインデックスと、前記データについてのチェック符号とを含むメタデータが、前記ストレージ装置に配置され、かつ、前記位置情報が前記コンピュータが備える記憶部にキャッシュされるように、前記データの格納処理を制御し、
前記論理アドレスを用いて前記データの読み出しが要求された場合、前記ストレージ装置から前記メタデータを読み出し、読み出した前記メタデータに含まれる前記識別情報および前記インデックスに基づいて前記記憶部から前記位置情報を読み出し、読み出した前記位置情報に基づいて前記ストレージ装置内の前記データブロックから前記データを読み出し、読み出した前記メタデータに含まれる前記チェック符号を用いて、読み出した前記データの正当性をチェックする、
処理を実行させるストレージ制御プログラム。
【０１７４】
（付記１０）  前記コンピュータに、
前記論理アドレスとは異なる他の論理アドレスを有する、前記データと同一内容の他のデータの書き込みが要求された場合、前記他の論理アドレスと、前記識別情報と同一内容の他の識別情報と、前記インデックスと同一内容の他のインデックスと、前記チェック符号と同一内容の他のチェック符号とを含む他のメタデータを、前記ストレージ装置に格納するとともに、前記他のデータの前記ストレージ装置への書き込みを省略する、
処理をさらに実行させる付記９記載のストレージ制御プログラム。
【０１７５】
（付記１１）  前記コンピュータに、
前記データブロックに対応するバッファ領域を前記記憶部に確保し、前記バッファ領域における前記データブロックの前記データ領域に対して、前記データを含む複数のデータを書き込みが要求された順に追記し、前記データ領域に対する追記が不可能な状態になった場合、前記データブロックを前記バッファ領域から前記ストレージ装置に書き出す、
処理を実行させる付記９記載のストレージ制御プログラム。
【０１７６】
（付記１２）  ストレージ装置を制御するためのストレージ制御プログラムにおいて、
コンピュータに、
データと前記データについてのチェック符号とが隣接して格納されたデータ領域と、前記データ領域における前記データの位置情報が格納されたヘッダ領域とを有するデータブロックが、前記ストレージ装置に配置され、かつ、前記データに対応する論理アドレスと、前記データが格納された前記データブロックを示す識別情報と、前記データブロックにおける前記データの格納順を示すインデックスとを含むメタデータが、前記ストレージ装置に配置され、かつ、前記位置情報が前記コンピュータが備える記憶部にキャッシュされるように、前記データの格納処理を制御し、
前記論理アドレスを用いて前記データの読み出しが要求された場合、前記ストレージ装置から前記メタデータを読み出し、読み出した前記メタデータに含まれる前記識別情報および前記インデックスに基づいて前記記憶部から前記位置情報を読み出し、読み出した前記位置情報に基づいて前記ストレージ装置内の前記データブロックから前記データと前記チェック符号とを読み出し、読み出した前記チェック符号を用いて、読み出した前記データの正当性をチェックする、
処理を実行させるストレージ制御プログラム。
【０１７７】
（付記１３）  前記コンピュータに、
前記論理アドレスとは異なる他の論理アドレスを有する、前記データと同一内容の他のデータの書き込みが要求された場合、前記他の論理アドレスと、前記識別情報と同一内容の他の識別情報と、前記インデックスと同一内容の他のインデックスとを含む他のメタデータを、前記ストレージ装置に格納するとともに、前記他のデータの前記ストレージ装置への書き込みを省略する、
処理をさらに実行させる付記１２記載のストレージ制御プログラム。
【０１７８】
（付記１４）  前記コンピュータに、
前記データブロックに対応するバッファ領域を前記記憶部に確保し、前記バッファ領域における前記データブロックの前記データ領域に対して、前記データを含む複数のデータを書き込みが要求された順に追記し、前記データ領域に対する追記が不可能な状態になった場合、前記データブロックを前記バッファ領域から前記ストレージ装置に書き出す、
処理を実行させる付記１２記載のストレージ制御プログラム。
【符号の説明】
【０１７９】
１  ストレージ制御装置
１ａ  記憶部
１ｂ  制御部
２  ストレージ装置
１１，１２  データブロック
１１ａ，１２ａ  データ領域
１１ｂ，１２ｂ  ヘッダ領域
２０  メタデータ
Ｄ１，Ｄ２  データ
Ｈ１，Ｈ２  位置情報
【図１】
2020112972.tif 000003
【図２】
2020112972.tif 000004
【図３】
2020112972.tif 000005
【図４】
2020112972.tif 000006
【図５】
2020112972.tif 000007
【図６】
2020112972.tif 000008
【図７】
2020112972.tif 000009
【図８】
2020112972.tif 000010
【図９】
2020112972.tif 000011
【図１０】
2020112972.tif 000012
【図１１】
2020112972.tif 000013
【図１２】
2020112972.tif 000014
【図１３】
2020112972.tif 000015
【図１４】
2020112972.tif 000016
【図１５】
2020112972.tif 000017
【図１６】
2020112972.tif 000018
【図１７】
2020112972.tif 000019
【図１８】
2020112972.tif 000020
【図１９】
2020112972.tif 000021
【図２０】
2020112972.tif 000022
【図２１】
2020112972.tif 000023
【図２２】
2020112972.tif 000024