(57)【要約】      （修正有）【課題】圧縮データを格納するストレージ装置の処理性能を向上させる。【解決手段】ストレージ装置では、上位装置に対して最終記憶媒体との対応関係（マッピング）を持たない伸長ＶＯＬを提供して、上位装置から伸長ＶＯＬに対するアクセスを受け付ける。伸長ＶＯＬに書き込まれたデータをキャッシュメモリでオンライン圧縮し、圧縮されたデータを、最終記憶媒体と対応付けられたボリュームである圧縮ＶＯＬに対応付ける。同時にデータの書き込まれた伸長ＶＯＬ上の領域と、当該データの圧縮データが対応付けられた圧縮ＶＯＬ上の位置とのマッピング情報を維持することにより、上位装置からリード要求が来た時、マッピング情報に基づいて、リード要求で指定された伸長ＶＯＬ上の位置情報を、最終記憶媒体の位置情報へと変換して、最終記憶媒体からキャッシュメモリ上に圧縮データを読み出し、圧縮データをキャッシュメモリで伸長して上位装置に転送する。【選択図】図１
2018014129.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機に接続され、プロセッサとキャッシュ装置と複数の最終記憶媒体とを有するストレージ装置であって、
前記ストレージ装置は、
前記ホスト計算機がアクセス可能な第１ボリュームと、
前記第１ボリュームに対応付けられたボリュームであって、前記第１ボリュームに対して前記ホスト計算機から書き込まれたデータを圧縮状態で格納するボリュームである第２ボリュームを有し、
前記プロセッサは、前記ホスト計算機から前記第１ボリュームに対するライト要求と前記ライト要求によるライト対象データを受け付けると、
（１）前記ライト対象データを、前記キャッシュ装置で圧縮状態にして前記キャッシュ装置内記憶領域に格納し、
（２）前記圧縮状態のライト対象データの、前記第２ボリューム上における格納位置を決定し、
（３）前記格納位置が決定されたことに応じて、前記圧縮状態のライト対象データの前記第２ボリューム上における前記格納位置に対応付けられるべき、前記最終記憶媒体上の記憶領域を確保し、
（４）前記キャッシュ装置から、前記ライト対象データを圧縮状態で読み出して、前記読み出された圧縮状態の前記ライト対象データを、前記確保された前記最終記憶媒体上の領域に格納する
ことを特徴とする、ストレージ装置。
【請求項２】
前記ライト要求には、前記ライト対象データを書き込むべき前記第１ボリューム上のアドレスの情報が含まれており、
前記ストレージ装置は、前記第１ボリューム上のアドレスと、前記圧縮状態のライト対象データの前記第２ボリューム上の格納位置との対応関係を管理するアドレスマッピングテーブルを有しており、
前記プロセッサは、
前記圧縮状態のライト対象データの前記第２ボリューム上における格納位置を決定すると、前記アドレスマッピングテーブルに前記ライト要求に含まれている前記アドレスと、前記第２ボリューム上の格納位置との対応関係を記録し、
前記ホスト計算機から前記第１ボリューム上のアドレスを指定したリード要求を受け付けると、前記マッピングテーブルを参照し、前記リード要求に含まれるアドレスに対応する前記第２ボリューム上の格納位置を特定し、
前記第２ボリューム上の格納位置に基づいて、前記最終記憶媒体から圧縮状態のデータを読み出して、前記キャッシュ装置に格納し、
前記キャッシュ装置から、前記圧縮状態のデータを伸長したデータを取得して、前記ホスト計算機に送信する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項３】
前記プロセッサは、前記圧縮状態のライト対象データの前記第２ボリューム上における格納位置を決定する処理を行うたびに、前記決定した格納位置の情報を記憶しておき、
前記圧縮状態のライト対象データの前記第２ボリューム上における格納位置を決定する際、前記記憶している前記格納位置の情報で特定されるアドレスの次のアドレスを、前記圧縮状態のライト対象データの前記第２ボリューム上における格納位置に決定する
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項４】
前記プロセッサは、前記キャッシュ装置に格納された前記圧縮状態のライト対象データの量が所定量以上になった時、
前記圧縮状態のライト対象データの、前記第２ボリューム上における格納位置を決定する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項５】
前記圧縮状態のライト対象データの前記第２ボリューム上における前記格納位置に対応付けられるべき記憶領域は、前記複数の最終記憶媒体から構成されるＲＡＩＤグループ内の記憶領域であって、
前記プロセッサは、前記キャッシュ装置に格納された前記圧縮状態のライト対象データの量が、前記ＲＡＩＤグループの１ストライプグループのサイズに相当する量以上になった時、前記圧縮状態のライト対象データの、前記第２ボリューム上における格納位置を決定する、
ことを特徴とする、請求項４に記載のストレージ装置。
【請求項６】
前記第２ボリュームの容量は、前記複数の最終記憶媒体の合計容量よりも大きいことを特徴とする、請求項１に記載のストレージ装置。
【請求項７】
前記キャッシュ装置は、前記プロセッサに対して第１の論理記憶空間と第２の論理記憶空間を提供し、
前記プロセッサが前記キャッシュ装置に対して、前記第１の論理記憶空間のアドレスを指定した、前記ライト対象データを前記キャッシュ装置に格納するためのデータ格納要求を発行すると、
前記キャッシュ装置は、前記ライト対象データを圧縮状態にして、前記キャッシュ装置内記憶領域に格納し、
前記プロセッサが、前記第１の論理記憶空間のアドレスと前記第２の論理記憶空間上のアドレスとを対応付けるマッピング指示を前記キャッシュ装置に発行した後、さらに前記キャッシュ装置に対して前記第１の論理記憶空間のアドレスに対応付けられた前記第２の論理記憶空間のアドレスを指定して、前記キャッシュ装置に格納された前記ライト対象データを読み出すためのデータ読み出し要求を発行すると、
前記キャッシュ装置は、前記ライト対象データを圧縮状態で読み出す、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項８】
ホスト計算機に接続され、プロセッサとキャッシュ装置と複数の最終記憶媒体とを有するストレージ装置の制御方法であって、
前記ストレージ装置は、
前記ホスト計算機がアクセス可能な第１ボリュームと、
前記第１ボリュームに対応付けられたボリュームであって、前記第１ボリュームに対して前記ホスト計算機から書き込まれたデータを圧縮状態で格納するボリュームである第２ボリュームを有し、
前記プロセッサが、前記ホスト計算機から前記第１ボリュームに対するライト要求と前記ライト要求によるライト対象データを受け付けると、
（１）前記ライト対象データを、前記キャッシュ装置で圧縮状態にして前記キャッシュ装置内記憶領域に格納し、
（２）前記圧縮状態のライト対象データの、前記第２ボリューム上における格納位置を決定し、
（３）前記格納位置が決定されたことに応じて、前記圧縮状態のライト対象データの前記第２ボリューム上における前記格納位置に対応付けられるべき、前記最終記憶媒体上の記憶領域を確保し、
（４）前記キャッシュ装置から、前記ライト対象データを圧縮状態で読み出して、前記読み出された圧縮状態の前記ライト対象データを、前記確保された前記最終記憶媒体上の領域に格納する
ことを特徴とする、ストレージ装置の制御方法。
【請求項９】
前記ライト要求には、前記ライト対象データを書き込むべき前記第１ボリューム上のアドレスの情報が含まれており、
前記ストレージ装置は、前記第１ボリューム上のアドレスと、前記圧縮状態のライト対象データの前記第２ボリューム上の格納位置との対応関係を管理するアドレスマッピングテーブルを有し、
前記プロセッサは、
前記圧縮状態のライト対象データの前記第２ボリューム上における格納位置を決定すると、前記アドレスマッピングテーブルに前記ライト要求に含まれている前記アドレスと、前記第２ボリューム上の格納位置との対応関係を記録し、
前記ホスト計算機から前記第１ボリューム上のアドレスを指定したリード要求を受け付けると、前記マッピングテーブルを参照し、前記リード要求に含まれるアドレスに対応する前記第２ボリューム上の格納位置を特定し、
前記第２ボリューム上の格納位置に基づいて、前記最終記憶媒体から圧縮状態のデータを読み出して、前記キャッシュ装置に格納し、
前記キャッシュ装置から、前記圧縮状態のデータを伸長したデータを取得して、前記ホスト計算機に送信する、
ことを特徴とする、請求項８に記載のストレージ装置の制御方法。
【請求項１０】
前記プロセッサは、前記圧縮状態のライト対象データの前記第２ボリューム上における格納位置を決定する処理を行うたびに、前記決定した格納位置の情報を記憶しており、
前記圧縮状態のライト対象データの前記第２ボリューム上における格納位置を決定する際、前記記憶している前記格納位置の情報で特定されるアドレスの次のアドレスを、前記圧縮状態のライト対象データの前記第２ボリューム上における格納位置に決定する
ことを特徴とする、請求項８に記載のストレージ装置の制御方法。
【請求項１１】
前記プロセッサは、前記ライト対象データを、前記キャッシュ装置で圧縮状態にして前記キャッシュ装置内記憶領域に格納した時点で、前記ホスト計算機にライト要求に伴う処理が完了したことを通知し、
前記キャッシュ装置に格納された前記圧縮状態のライト対象データの量が所定量以上になった時点で、前記（２）以降の処理を実行する、
ことを特徴とする、請求項８に記載のストレージ装置の制御方法。
【請求項１２】
前記圧縮状態のライト対象データの前記第２ボリューム上における前記格納位置に対応付けられるべき記憶領域は、前記複数の最終記憶媒体から構成されるＲＡＩＤグループ内の記憶領域であって、
前記プロセッサは、前記キャッシュ装置に格納された前記圧縮状態のライト対象データの量が、前記ＲＡＩＤグループの１ストライプグループのサイズに相当する量以上になった時、前記（２）以降の処理を実行する、
ことを特徴とする、請求項１１に記載のストレージ装置の制御方法。
【請求項１３】
前記第２ボリュームの容量は、前記複数の最終記憶媒体の合計容量よりも大きいことを特徴とする、請求項８に記載のストレージ装置の制御方法。
【請求項１４】
前記キャッシュ装置は、前記プロセッサに対して第１の論理記憶空間と第２の論理記憶空間を提供し、
前記プロセッサが前記（１）において、前記キャッシュ装置に対して、前記第１の論理記憶空間のアドレスを指定した、前記ライト対象データを前記キャッシュ装置に格納するためのデータ格納要求を発行すると、
前記キャッシュ装置は、前記ライト対象データを圧縮状態にして、前記キャッシュ装置内記憶領域に格納し、
前記プロセッサが前記（４）において、前記プロセッサが、前記第１の論理記憶空間のアドレスと前記第２の論理記憶空間上のアドレスとを対応付けるマッピング指示を前記キャッシュ装置に発行した後、さらに前記キャッシュ装置に対して前記第２の論理記憶空間のアドレスを指定して、前記キャッシュ装置に格納された前記ライト対象データを読み出すためのデータ読み出し要求を発行すると、
前記キャッシュ装置から前記ライト対象データが圧縮状態で読み出される、
ことを特徴とする、請求項８に記載のストレージ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを圧縮して格納するストレージ装置、及びその制御方法に関するものである。
【背景技術】
【０００２】
ＩＴの進歩やインターネットの普及などにより、企業等における計算機システムが扱うデータ量は増加を続けている。一方でＩＴシステムのコストを削減したいというニーズも高く、ユーザからは、高性能であるとともに、低価格なシステムが求められている。
【０００３】
ストレージ装置の場合、ストレージ装置で用いられる記憶媒体がコストの多くを占める。そのため、記憶媒体の低コスト化が重要な課題となる。記憶媒体の低コスト化には、安価な（低ビットコストの）記憶媒体を採用するという方法の他に、格納データを圧縮することで、記憶媒体により多くのデータを格納するという方法がある。データを記憶媒体に圧縮した状態でストレージ装置に格納する場合、ストレージ装置にアクセスするホスト計算機やアプリケーションには、データが圧縮されて格納されていることを意識させない、つまり透過的にデータ圧縮を行うことが、利便性の観点から重要である。またアクセス性能を極力低下させないことも、実用上重要である。たとえば特許文献１には、データ（非圧縮データ）を複数のユニットに分割してユニットごとに圧縮を行い、圧縮された各ユニット（圧縮ユニット）をＬＵ（論理ユニット）に格納し、読み出し時にはＬＵ全体を読み出すことなく、必要なユニットだけを読み出すことで、必要なデータにアクセスできるシステムが開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２０１１／０２１９１５３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
圧縮データを最終記憶媒体に格納する構成の場合、更新データの圧縮の結果、当該更新データの圧縮データのサイズは、更新前データの圧縮データのサイズよりも大きくなる、あるいは小さくなることがある。そのため、単純に更新後データの圧縮データを更新前の圧縮データの格納されていた領域に上書きすることはできない。特許文献１に記載の技術では、データ更新の際には、一旦更新前データを読み出して伸長して、伸長データに対して更新データを上書きする処理を行う。また更新後の圧縮データのサイズが更新前の圧縮データより大きくなった場合には、未使用の記憶領域を探して更新前の圧縮データの格納されていた領域に格納しきれなかった部分データを格納するという処理を行っている。そのため、データ更新時の処理オーバヘッドが大きい。
【０００６】
本発明の目的は、圧縮データを格納するストレージ装置の処理性能を向上させることにある。
【課題を解決するための手段】
【０００７】
本発明の実施例におけるストレージ装置では、上位装置に対しては、最終記憶媒体との直接の対応関係（マッピング）を持たない伸長ＶＯＬを提供して、上位装置には伸長ＶＯＬに対するアクセスを行わせる。そして伸長ＶＯＬに書き込まれたデータをキャッシュメモリでオンライン圧縮し、圧縮されたデータを、最終記憶媒体と直接対応付けられたボリューム（圧縮ＶＯＬ）に格納する。また伸長ＶＯＬの（非圧縮データの格納された）領域と、圧縮ＶＯＬの（圧縮データの格納された）領域とのマッピング情報を維持することにより、上位装置から伸長ＶＯＬに対するリード要求が来た時も、マッピング情報に基づいて、リード要求で指定された伸長ＶＯＬ上の位置情報を、最終記憶媒体（圧縮ＶＯＬに対応付けられた記憶媒体）の位置情報へと変換して、最終記憶媒体から圧縮データを読み出す。そして圧縮データをキャッシュメモリで伸長して上位装置に転送する。
【０００８】
また本発明では、ストレージ装置のキャッシュ装置として動作するキャッシュメモリの内部にて、データ圧縮と圧縮後の圧縮データに対するＲＡＩＤ  Ｐａｒｉｔｙを生成することを特徴とするものである。
【発明の効果】
【０００９】
本発明によれば、ストレージ装置において、サーバから受領したライトデータを圧縮してＨＤＤに記録する際、伸長ＶＯＬに書き込まれたデータをキャッシュメモリでオンライン圧縮し、圧縮されたデータを、最終記憶媒体と直接対応付けられたボリューム（圧縮ＶＯＬ）に追記書きの要領で格納することで、データ更新時に複雑な処理を行う必要がない。また伸長ＶＯＬの（非圧縮データの格納された）領域と、圧縮ＶＯＬの（圧縮データの格納された）領域のマッピング情報を維持することにより、上位装置から伸長ＶＯＬに対するリード要求が来た時も、マッピング情報に基づいて、リード要求で指定された伸長ＶＯＬ上の位置情報を、最終記憶媒体（圧縮ＶＯＬに対応付けられた記憶媒体）の位置情報へと変換して、最終記憶媒体から圧縮データを読み出すため、通常の（格納時に圧縮を行わない）ボリュームに対するアクセスと同等のアクセス性能を実現可能である。
【図面の簡単な説明】
【００１０】
【図１】図１は、本発明に係るストレージ装置の動作概念図である。
【図２】図２は、本発明に係るストレージ装置（ストレージシステム）の構成を示す図である。
【図３】図３は、キャッシュメモリの内部構成を示した図である。
【図４】図４は、本実施例のキャッシュメモリがストレージコントローラに提供する論理領域ＬＢＡ０、ＬＢＡ１と、物理領域ＰＢＡの対応付けの概念を模擬的に示した図である。
【図５】図５は、本実施例におけるキャッシュメモリ２６がサポートするライトコマンドとそのライトコマンドに対する応答情報を示した図である。
【図６】図６は、本実施例におけるキャッシュメモリ２６がサポートする、リードコマンドとそのリードコマンドへの応答情報を示した図である。
【図７】図７は、本実施例におけるキャッシュメモリ２６がサポートする、フルストライプＰａｒｉｔｙ生成コマンドとフルストライプＰａｒｉｔｙ生成コマンドへの応答情報を示した図である。
【図８】図８は、本実施例におけるキャッシュメモリ２６がサポートする、更新Ｐａｒｉｔｙ生成コマンドと更新Ｐａｒｉｔｙ生成コマンドへの応答情報を示した図である。
【図９】図９は、本実施例におけるキャッシュメモリ２６でサポートされる、ＬＢＡ１マッピングコマンドと、そのＬＢＡ１マッピングコマンドに対する応答情報を示した図である。
【図１０】図１０は、本実施例におけるキャッシュメモリ２６がサポートするＬＢＡ０マッピングコマンドと、当該ＬＢＡ０マッピングコマンドへの応答情報を示した図である。
【図１１】図１１は、本実施例におけるキャッシュメモリ２６がサポートする、圧縮データサイズ取得コマンドとその圧縮データサイズ取得コマンドへの応答情報を示した図である。
【図１２】図１２は、本実施例におけるキャッシュメモリ２６がサポートする、マッピング解除コマンドとそのマッピング解除コマンドへの応答情報を示した図である。
【図１３】図１３は、伸長ＶＯＬ管理テーブルの内容を示した図である。
【図１４】図１４は、圧縮ＶＯＬ管理テーブルの内容を示した図である。
【図１５】図１５は、伸長ＶＯＬと圧縮ＶＯＬとの関係を示す概念図である。
【図１６】図１６は、圧縮ＶＯＬと、圧縮ＶＯＬに対応する最終記憶媒体との対応関係を示す概念図である。
【図１７】図１７は、ボリュームマッピングテーブルの内容を示した図である。
【図１８】図１８は、アドレスマッピングテーブルの内容を示した図である。
【図１９】図１９は、本発明の実施例におけるボリューム、スロット、キャッシュセグメントの関係を示す概念図である。
【図２０】図２０は、ストレージ装置で管理する、キャッシュ管理データ構造の概念図である。
【図２１】図２１は、キャッシュディレクトリ、ＳＬＣＴ、ＳＧＣＴの関係を示す図である。
【図２２】図２２は、ダーティキューまたはクリーンキューのデータ構造を示す図である。
【図２３】図２３は、フリーキューのデータ構造を示す図である。
【図２４】図２４は、本実施例におけるライト処理のうち、ホスト計算機から受信したライトデータをキャッシュメモリに格納する処理の流れを示した図である。
【図２５】図２５は、本実施例における圧縮ＶＯＬへのデータ移し替え処理の流れを示した図である。
【図２６】図２６は、本実施例におけるデステージ処理の流れを示した図である。
【図２７】図２７は、ホスト計算機からボリューム（伸長ＶＯＬ）に対するリード要求を受け付けた時の処理の流れを示した図である。
【図２８】図２８は、ホスト計算機からボリューム（伸長ＶＯＬ）に対するリード要求を受け付けた時の処理の流れを示した図である。
【図２９】図２９は、本発明の変形例１におけるストレージ装置で管理する、圧縮ＶＯＬ、論理ボリューム（ＬＤＥＶ）、最終記憶媒体（ＰＤＥＶ）の関係を示した概念図である。
【図３０】図３０は、ＨＶＯＬ管理情報の内容を示した図である。
【図３１】図３１は、ページマッピングテーブルの内容を示した図である。
【図３２】図３２は、ページフリーリストの内容を示した図である。
【図３３】図３３は、本発明の変形例１における、圧縮ＶＯＬへのデータ移し替え処理の流れを示した図である。
【図３４】図３４は、本発明の変形例１における、ＨＶＯＬ上のページへの領域割り当て処理の流れを示した図である。
【図３５】図３５は、本発明の変形例２におけるボリュームマッピングテーブルの内容を示した図である。
【発明を実施するための形態】
【００１１】
本発明の実施形態を図面に基づいて説明する。尚、本発明は、以下に説明する実施形態に限定されるものではない。尚、半導体記録素子としてＮＡＮＤ型フラッシュメモリ（以下、ＦＭ）を例に説明するが、本発明はＦＭに限定されるものではなく、不揮発性のメモリの全てを対象とする。また、本実施例では、データの圧縮を専用のハードウェア回路で実施する形態について記述するが、本発明はこの形態に限定されるものではなく、汎用プロセッサによるデータ圧縮演算処理にてデータを圧縮するとしてもよい。また、本実施例では、パリティ（冗長データ）を専用のハードウェア回路で実施する形態について記述するが、本発明は、この実施例に限定されるものではなく、汎用プロセッサによるパリティ生成演算処理にてＲＡＩＤ  Ｐａｒｉｔｙを生成するとしてよい。
【００１２】
まず本発明の概要について、図１を用いて説明する。本発明のストレージ装置１では、ホスト計算機３から書き込まれたデータを圧縮して最終記憶媒体であるＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）１１またはＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）１２に格納するが、圧縮後のデータサイズはデータ内容によって変動するため、データ格納位置を一意に定めることが難しい。そのため、ストレージ装置１は２種類の論理ボリュームを作成、管理する。第１の種類の論理ボリュームは、ホスト計算機３に提供される論理ボリュームで、当該論理ボリュームには非圧縮データが格納されているようにホスト計算機３から認識される。第２の種類の論理ボリュームは、ホスト計算機３から認識されない論理ボリュームで、当該論理ボリュームは、ストレージコントローラ１０が圧縮データを最終記憶媒体（ＳＳＤ１１またはＨＤＤ１２）に格納する際に用いる。以下、この第１の論理ボリュームのことを「伸長ＶＯＬ」と呼び、第２の論理ボリュームのことを「圧縮ＶＯＬ」と呼ぶ。
【００１３】
伸長ＶＯＬ（図１の「伸長ＶＯＬ５０００」）は、ホスト計算機３に論理的（仮想的）な記憶領域を提供するだけのもので、伸長ＶＯＬ上の各アドレスに対応する物理記憶領域（最終記憶媒体であるＳＳＤ１１またはＨＤＤ１２の記憶領域）は存在しない。一方圧縮ＶＯＬ（図１の「圧縮ＶＯＬ５５００」）は、（圧縮ＶＯＬ上の）各記憶領域が、最終記憶媒体であるＳＳＤ１１またはＨＤＤ１２の記憶領域と１：１に対応付けられたボリュームである。本発明のストレージ装置１は、複数（たとえば４台）の最終記憶媒体を１つのＲＡＩＤグループとして管理し、当該１つのＲＡＩＤグループの各記憶領域を圧縮ＶＯＬの各記憶領域に対応付けている。
【００１４】
ホスト計算機３から伸長ＶＯＬに対してデータのライト要求及びライトデータが送信されると、ライトデータはキャッシュメモリ２６上に格納される。本発明のキャッシュメモリ２６は圧縮機能を備えており、キャッシュメモリ２６上にライトデータを格納する際に、圧縮された状態で格納する。またキャッシュメモリ２６上の圧縮データを読み出す（出力する）際には、圧縮機能によりデータを伸長した状態で読み出すこともでき、ホスト計算機３に対して、データが圧縮されて格納される状態を見せない（認識させない）ようにしている。
【００１５】
本発明の目的は、データを圧縮した状態で最終記憶媒体に格納することであるため、キャッシュメモリ２６に格納された圧縮データを、圧縮された状態のまま最終記憶媒体に書き込む。本発明のストレージ装置１では、更新データを更新前データの格納されていた領域と同一の領域には書き込まず、最終記憶媒体１１（１２）に追記書きする構成をとる。また圧縮データを格納、管理するために、伸長ＶＯＬとは別のボリューム（圧縮ＶＯＬ５５００）を用意し、伸長ＶＯＬに書き込まれたデータ（実体はキャッシュ２６にのみ格納されている）を疑似的に圧縮ＶＯＬ５５００に移動する処理を行う。
【００１６】
伸長ＶＯＬ上の領域と圧縮ＶＯＬとの領域との間には固定的な対応関係はなく、伸長ＶＯＬから圧縮ＶＯＬへデータを移動する際、圧縮ＶＯＬ上のデータ格納位置は動的に決定される。一例として、伸長ＶＯＬにデータａ、ｂ、ｃ、ｄ、ｅがランダムに書き込まれた場合、ストレージ装置１は、伸長ＶＯＬに書き込まれたデータを圧縮ＶＯＬ上の領域に移動する（対応付ける）処理を行うが、その際、最終記憶媒体へのデータ書き込みの前に行われるＲＡＩＤパリティ生成処理の際に更新前データを読み出す必要がないように、圧縮ＶＯＬ上にデータａ、ｂ、ｃ、ｄ、ｅを、圧縮ＶＯＬの先頭から追記書きの要領で書き込まれるように、対応付けしていく。伸長ＶＯＬ上に書き込まれた各データの、圧縮ＶＯＬ上の記憶位置は、ボリューム間マッピングテーブル６５０で管理する。圧縮ＶＯＬにデータａ、ｂ、ｃ、ｄ、ｅ（の圧縮データ）が対応付けられた後、このデータからＲＡＩＤ技術により、冗長データ（パリティ）が生成され、データ（圧縮データ）とパリティは、圧縮ＶＯＬを構成する最終記憶媒体へと書き込まれる。
【００１７】
データを圧縮せずに格納する一般的なストレージ装置では、ボリュームに対するデータ更新要求と更新データを受け取った時、当該更新データの更新前データの格納されている領域に当該更新データを上書きして格納する。しかし、圧縮データを最終記憶媒体に格納する構成の場合、更新データの圧縮の結果、当該更新データの圧縮データのサイズは、更新前データの圧縮データのサイズよりも大きくなることもある。そのため最終記憶媒体に対する上書き時の処理が複雑化し、処理性能が悪化する。
【００１８】
本発明の実施例におけるストレージ装置では、ホスト計算機等の上位装置に対しては、最終記憶媒体との直接の対応関係（マッピング）を持たない伸長ＶＯＬを提供して、上位装置には伸長ＶＯＬに対するアクセスを行わせる。そして伸長ＶＯＬに書き込まれたデータをキャッシュメモリでオンライン圧縮し、圧縮されたデータを、最終記憶媒体と直接対応付けられた圧縮ＶＯＬに追記書きの要領で格納することで、データ更新時の処理オーバヘッドが発生しないようにしている。また、非圧縮データの格納された伸長ＶＯＬの領域と、圧縮データの格納された圧縮ＶＯＬの領域とのマッピング情報を維持することにより、上位装置から伸長ＶＯＬに対するリード要求が来た時も、マッピング情報に基づいて、リード要求で指定された伸長ＶＯＬ上の位置情報を、圧縮ＶＯＬの位置情報へと変換して、圧縮ＶＯＬ（最終記憶媒体）から圧縮データを読み出し、そして圧縮データをキャッシュメモリで伸長して上位装置に転送することで、応答時間を短縮することを可能にしている。
【００１９】
また、詳細は後述するが、圧縮ＶＯＬに対してシンプロビジョニング技術を採用することで、容量効率を高め、低価格なシステムの実現を可能とする。
【００２０】
また、詳細は後述するが、伸長ＶＯＬ上でのデータ配置を考慮して圧縮ＶＯＬにデータを移動することにより、シーケンシャルアクセス性能を高めることを可能とする。
【実施例】
【００２１】
図２は、本発明の実施例に係るストレージ装置（ストレージシステム）の構成を示す図である。
【００２２】
ストレージ装置１は１以上のストレージコントローラ１０（以下、「コントローラ１０」と略記することもある）を備えている。各コントローラ１０は、ホスト計算機（上位装置）３と接続するためのホストインタフェース（図中では「Ｈｏｓｔ  Ｉ／Ｆ」と記載）２４と、記録装置を接続するためのディスクインタフェース（図中では「Ｄｉｓｋ  Ｉ／Ｆ」と記載）２３を備えている。ホストインタフェース２４は例えば、ＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ｉＳＣＳＩ（ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ＦＣｏＥ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ  ｏｖｅｒ  Ｅｔｈｅｒ）等のプロトコルに対応したデバイスが使用され、ディスクインタフェース１０７は例えば、ＦＣ、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）  −Ｅｘｐｒｅｓｓ等の各種プロトコルに対応したデバイスが使用される。また、以降では、ホストインタフェース２４のことを「ポート２４」と呼ぶこともある。更に、ストレージコントローラ１０はプロセッサ（図中では「ＭＰＵ」と記載）２１やＤＲＡＭ２５などのハードウェア資源を備え、プロセッサ２１の制御の下、ホスト計算機３からのリード／ライト要求に応じて、ＳＳＤ１１やＨＤＤ１２等の最終記憶媒体へのリード／ライト要求を行う。また、キャッシュメモリ２６を内部にもち、キャッシュメモリ２６は内部スイッチ（図では「内部ＳＷ」と記載）２２を介してプロセッサ２１から制御可能となっている。また、ストレージコントローラ１０間でデータや制御情報を相互に通信するためのノードＩ／Ｆ２７も備えている。
【００２３】
ストレージ装置１は管理装置４とネットワークを介して接続している。このネットワークの伝送媒体としては、例えばイーサネット（登録商標）などが用いられる。なお、図２では簡略化の為に省略したが、このネットワークはストレージ装置１内部の各ストレージコントローラ１０に接続している。尚、このネットワークはＳＡＮ２と同じネットワークによって接続してもよい。
【００２４】
管理装置４は、プロセッサやメモリ、ネットワークインターフェース、ローカル入出力デバイス等のハードウェア資源と、管理プログラム等のソフトウェア資源を備えたコンピュータである。管理装置４では、管理プログラムが動作し、当該管理プログラムが実行されることによってストレージ装置１から情報を取得し、またシステム管理者の管理操作用のＧＵＩを提供する。システム管理者は、この管理操作用のＧＵＩを用いて、ストレージ装置１のボリュームの作成やストレージ装置１の監視等の操作を行う。
【００２５】
ＳＳＤ１１、ＨＤＤ１２はそれぞれ、ストレージ装置１内に複数（例えば１６個）あり、同じくストレージ装置内に複数あるストレージコントローラ１０とディスクインタフェース２３を介して接続されている。ＳＳＤ１１、ＨＤＤ１２は、ストレージコントローラ１０からのライト要求に応じて転送されるデータを格納し、リード要求に応じて格納済みのデータを取り出しストレージコントローラ１０に転送する。尚、このときディスクインタフェース１０７は、データのリード／ライト位置を論理ブロックアドレス（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ。以下、「ＬＢＡ」と呼ぶ）によって指定する。また、ストレージ装置１は、複数のＳＳＤ１１、ＨＤＤ１２を、所定台数（たとえば４台、８台、１６台など）単位でＲＡＩＤグループとして管理し、ＲＡＩＤグループ内の１台（あるいは２台）のディスクが故障した場合でも、データの復元が可能な構成としている。
【００２６】
ホスト計算機（上位装置）３は、プロセッサやメモリ、ネットワークインターフェース、ローカル入出力デバイス等のハードウェア資源を備え、デバイスドライバやオペレーティングシステム（ＯＳ）、アプリケーションプログラムなどのソフトウェア資源を備えている。これによりホスト計算機３は、プロセッサ制御の下、各種プログラムを実行することで、ストレージ装置１０８との通信及び、データのリード／ライト要求を行う。また、プロセッサ制御の下、各種プログラムを実行することで、ストレージ装置１の使用状況、動作状況等の管理情報を取得する。また、記録装置の管理単位や記録装置制御方法、データ圧縮設定等を指定し、変更を行うことができる。
【００２７】
次に図３を用いて、キャッシュメモリ２６の内部構成について説明する。
【００２８】
本発明の実施例におけるキャッシュメモリ２６は、フラッシュメモリ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ）を記憶媒体として使用する。キャッシュメモリ２６は内部に、ＦＭコントローラ（ＦＭ  ＣＴＬ）４１０と複数（例えば３２個）のＦＭ４２０を備える。
【００２９】
ＦＭコントローラ４１０は、その内部にプロセッサ４１５、ＲＡＭ４１３、データ圧縮／伸長ユニット４１８、Ｐａｒｉｔｙ生成ユニット４１９、データバッファ４１６、Ｉ／Ｏインタフェース（Ｉ／Ｆ）４１１、ＦＭインタフェース４１７、及びデータ転送を相互に行うスイッチ４１４を備えている。
【００３０】
Ｉ／Ｏインタフェース４１１は、ストレージ装置１内のストレージコントローラ１０が備える内部スイッチ２２と接続し、スイッチ４１４を介してフラッシュコントローラ４１０の各部位と接続する。Ｉ／Ｏインタフェース４１１は、ストレージ装置１内のストレージコントローラ１０が備えるプロセッサ２１から、キャッシュメモリ２６に対する各種コマンドを受け付ける、あるいはデータ転送を行うためのものである。
【００３１】
プロセッサ４１５は、スイッチ４１４を介してＦＭコントローラ４１０の各部位と接続し、ＲＡＭ４１３に記録されたプログラム及び管理情報を基にＦＭコントローラ４１０全体を制御する。データバッファ４１６は、フラッシュコントローラ４１０でのデータ転送処理途中のデータを一時的に格納するために用いられる。
【００３２】
ＦＭインタフェース（Ｉ／Ｆ）４１７は、複数バス（例えば１６）によってＦＭ４２０と接続する。各バスには複数（例えば２）のＦＭ４２０が接続される。
【００３３】
データ圧縮／伸長ユニット４１８は、可逆圧縮のアルゴリズムを処理する機能を有する。データ圧縮／解凍ユニット４１８は、プロセッサ４１５からの指示に従って、Ｉ／Ｏインタフェース４１１から到来してＦＭ４２０に書き込まれるデータを圧縮する、またはＦＭ４２０からＩ／Ｏインタフェース４１１へ送出されるデータを伸長する。尚、データ圧縮／伸長ユニットは、論理回路として実装してもよいし、圧縮／伸長のプログラムをプロセッサで処理することで、同様の機能を実現してもよい。
【００３４】
Ｐａｒｉｔｙ生成ユニット４１９は、ＲＡＩＤ技術で必要とされる冗長データであるパリティの生成機能を有しており、具体的には、ＲＡＩＤ５、６等で用いられるＸＯＲ演算、ＲＡＩＤ６で用いられるリードソロモン符号またはＥＶＥＮＯＤＤ法により算出される対角パリティ（Ｄｉａｇｏｎａｌ  Ｐａｒｉｔｙ）の生成機能を有している。
【００３５】
以上説明した、スイッチ４１４、ディスクインタフェース４１１、プロセッサ４１５、データバッファ４１６、ＦＭインタフェース４１７、データ圧縮／伸長ユニット４１８、Ｐａｒｉｔｙ生成ユニット４１９は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）やＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）として、一つの半導体素子内で構成してもよいし、複数の個別専用ＩＣ（  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）を相互に接続した構成であってもよい。
【００３６】
ＲＡＭ４１３は具体的にはＤＲＡＭなどの揮発性メモリが挙げられる。ＲＡＭ４１３は、キャッシュメモリ２６内で用いられるＦＭ４２０の管理情報、各ＤＭＡが用いる転送制御情報を含んだ転送リスト等を格納する。尚、データを格納するデータバッファ４１６の役割の一部または全てをＲＡＭ４１３に含ませて、ＲＡＭ４１３をデータ格納に用いる構成としてもよい。
【００３７】
なお、本実施例では図３に示すように、フラッシュメモリ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ）を搭載したキャッシュメモリ２６について記述するが、キャッシュメモリ２６に搭載する記憶媒体はフラッシュメモリに限定されるものではない。Ｐｈａｓｅ  Ｃｈａｎｇｅ  ＲＡＭやＲｅｓｉｓｔａｎｃｅ  ＲＡＭであってもよい。また、ＦＭ４２０の一部または全部を揮発性のＲＡＭ（ＤＲＡＭ等）とする構成であってもよい。
【００３８】
続いて、本実施例におけるキャッシュメモリ２６がストレージコントローラ１０に対して提供する記憶空間について説明する。
【００３９】
本実施例におけるキャッシュメモリ２６は、自身が接続されるストレージコントローラ１０（のプロセッサ２１）に対して、論理的な記憶空間を提供する。ここで、「記憶空間を提供する」とは、ストレージコントローラ１０に対してアクセスさせる各記憶領域にアドレスが付けられており、キャッシュメモリ２６が接続されるストレージコントローラ１０のプロセッサ２１が、当該アドレスを指定したアクセス要求（コマンド）を発行することにより、当該アドレスで特定された領域に格納されているデータの参照・更新が可能な状態にされていることを意味する。キャッシュメモリ２６のプロセッサ４１５は、ＦＭ４２０により構成される物理記憶領域を、キャッシュメモリ２６内部のみで用いる一次元のアドレス空間に一意に対応づけて管理する。以降、このキャッシュメモリ２６内部のみで用いる物理領域指定用アドレス空間（物理アドレス空間）を、ＰＢＡ（Ｐｈｙｓｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）空間と呼び、ＰＢＡ空間内の各物理記憶領域（セクタ。本発明の実施例では、１セクタは５１２バイトとする）の位置（アドレス）をＰＢＡ（Ｐｈｙｓｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）と記す。
【００４０】
従来のＳＳＤ等の記憶装置は、記憶装置が接続される上位装置（ホスト計算機等）に対して一つの記憶空間を提供している。一方で本実施例のキャッシュメモリ２６は、キャッシュメモリ２６が接続されるストレージコントローラ１０に２つの論理記憶空間を提供することを特徴とする。この２つの論理記憶空間とＰＢＡ空間の関係について図４を用いて説明する。
【００４１】
キャッシュメモリ２６は、ＬＢＡ０空間７０１とＬＢＡ１空間７０２という２つの論理記憶空間を提供する。なお、これ以降、ＬＢＡ０空間７０１上の各記憶領域に付されたアドレスのことを「ＬＢＡ０」または「ＬＢＡ０アドレス」と呼び、ＬＢＡ１空間７０２上の各記憶領域に付されたアドレスのことを「ＬＢＡ１」または「ＬＢＡ１アドレス」と呼ぶ。また、本発明の実施例では、ＬＢＡ０空間７０１のサイズ及びＬＢＡ１空間７０２のサイズはいずれも、ＰＢＡ空間のサイズ以下とするが、ＬＢＡ０空間７０１のサイズがＰＢＡ空間のサイズよりも大きい場合でも、本発明は有効である。ＬＢＡ０空間７０１は、物理記憶領域に記録された圧縮データを非圧縮データとして、ストレージコントローラ１０のプロセッサ２１にアクセスさせるための論理領域である。プロセッサ２１が、ＬＢＡ０空間７０１上のアドレス（ＬＢＡ０）を指定してキャッシュメモリ２６にライト要求を発行すると、キャッシュメモリ２６は、ストレージコントローラ１０からライトデータを取得し、データ圧縮／伸長ユニット４１８にて圧縮した後、キャッシュメモリ２６が動的に選択したＰＢＡにより指定されるＦＭ４２０上の物理記憶領域にデータを記録し、ＬＢＡ０とＰＢＡの対応付けを行う。また、プロセッサ２１がＬＢＡ０を指定してキャッシュメモリ２６にリード要求を発行すると、キャッシュメモリ２６は、ＬＢＡ０に対応付けられたＰＢＡが示すＦＭ４２０の物理記憶領域からデータ（圧縮データ）を取得し、データ圧縮／伸長ユニット４１８にて伸長した後、この伸長したデータをリードデータとしてストレージコントローラ１０に転送する。このＬＢＡ０とＰＢＡとの間の変換は、ＲＡＭ４１３上にＬＢＡ０とＰＢＡの対応関係の管理情報を保持し、それを用いて実現する。
【００４２】
ＬＢＡ１空間７０２は、ＦＭ４２０により構成される物理記憶領域に記録される圧縮データを圧縮データのまま（伸長せず）、ストレージコントローラ１０にアクセスさせるための論理領域である。プロセッサ２１が、ＬＢＡ１を指定してキャッシュメモリ２６にライト要求を発行すると、キャッシュメモリ２６は、ストレージコントローラ１０よりデータ（圧縮済みのライトデータ）を取得し、キャッシュメモリ２６が動的に選択したＰＢＡにより指定されるＦＭの記憶領域にデータを記録し、ＬＢＡ１とＰＢＡの対応付けを行う。また、プロセッサ２１がＬＢＡ１を指定してリード要求を発行すると、キャッシュメモリ２６は、ＬＢＡ１に対応付けられたＰＢＡが示すＦＭ４２０の物理記憶領域よりデータ（圧縮データ）を取得し、ストレージコントローラ１０にリードデータとして圧縮済みデータを転送する。尚、このＬＢＡ１とＰＢＡとの間の変換も、ＲＡＭ４１３上にＬＢＡ１とＰＢＡの対応関係の管理情報を保持し、それを用いて実現する。
【００４３】
尚、図４に示すとおり、圧縮データ７１３が記録された物理記憶領域を示すＰＢＡ空間は、同時にＬＢＡ０空間の領域とＬＢＡ１空間の領域の両方に対応づけられることもある。例えば、圧縮データ７１３の伸長されたデータが伸長データ７１１として対応づけられ、圧縮データ７１３の非伸長のデータが圧縮データ７１２として対応づけられる。この対応づけは、ストレージコントローラ１０からの指示で行われる。たとえばプロセッサ２１が、ＬＢＡ０（仮にＬＢＡ０が０ｘ０００００００１０００とする）を指定してキャッシュメモリ２６にデータをライトすると、当該データはキャッシュメモリ２６内のデータ圧縮／伸長ユニット４１８により圧縮され、圧縮されたデータがキャッシュメモリ２６が動的に選択したＰＢＡ空間上（具体的には、ＦＭ４２０の複数のページ中の、いずれかの未書き込みページ）に配置され、またそのデータはＬＢＡ０空間のアドレス０ｘ０００００００１０００に対応付けられた状態で管理される。その後プロセッサ２１が、０ｘ０００００００１０００に対応づけられたデータを、ＬＢＡ１空間のアドレス（仮に０ｘ８００００００００１０とする）に対応付ける要求をキャッシュメモリ２６に発行することで、このデータはＬＢＡ１空間にも対応づけられ、プロセッサ２１がＬＢＡ１アドレス０ｘ８００００００００１０のデータをリードする要求（コマンド）をキャッシュメモリ２６に対して発行すると、プロセッサ２１は、自身がＬＢＡ０アドレス０ｘ０００００００１０００に対して書き込んだデータを、圧縮した状態で読み出すことが出来る。
【００４４】
なお、本実施例におけるキャッシュメモリ２６では、ストレージコントローラ１０のプロセッサ２１からライト指示された非圧縮データを、４ＫＢ単位で圧縮する。たとえばプロセッサ２１から、ＬＢＡ０空間のアドレス（０ｘ０００＿００００＿００００）を開始アドレスとする８ＫＢのデータ（非圧縮データ）のライト要求があった場合、（ＬＢＡ０空間の）アドレス範囲０ｘ０００＿００００＿００００〜０ｘ０００＿００００＿０００７の４ＫＢのデータを単位として圧縮して圧縮データを生成し、続いてアドレス範囲０ｘ０００＿００００＿０００８〜０ｘ０００＿００００＿０００Ｆの４ＫＢのデータを単位として圧縮して圧縮データを生成し、それぞれの圧縮データをＦＭ４２０の物理記憶領域に書き込む。ただし、本発明はデータを４ＫＢ単位で圧縮する態様に限定されるものではなく、その他の単位でデータが圧縮される構成であっても本発明は有効である。
【００４５】
また、生成される圧縮データのサイズは、５１２バイト（１セクタ）の倍数のサイズに限定され、また非圧縮データのサイズを超えないサイズになるようにしている。つまり４ＫＢのデータを圧縮した場合、最小サイズが５１２バイトで、最大サイズが４ＫＢになる。
【００４６】
続いて、本発明が適用されるキャッシュメモリ２６が用いるコマンドについて説明する。本実施例におけるキャッシュメモリ２６は、ストレージコントローラ１０のプロセッサ２１からコマンドを受理すると、当該受理したコマンドの内容を解析して所定の処理を行い、処理完了後に応答（応答情報）をストレージコントローラ１０に返答する。なお、コマンドには、キャッシュメモリ２６が所定の処理を行うために必要となる情報の集合が含まれており、たとえばキャッシュメモリ２６にデータの書き込みを指示するライトコマンドであれば、コマンド中には、そのコマンドがライトコマンドであることを示す情報及びライト処理の実行に必要となる情報（ライトデータの書き込み位置やデータ長など）を含んでいる。キャッシュメモリ２６は複数種類のコマンドをサポートしているが、最初に各コマンドに共通の情報について説明する。
【００４７】
各コマンドには、共通の情報として、オペレーションコード（Ｏｐｃｏｄｅ）とコマンドＩＤという情報が、先頭に含まれている。そしてコマンドＩＤの後に、各コマンドに固有の情報（パラメータ）が付加されて、１つのコマンドが形成される。たとえば図５は、本実施例におけるキャッシュメモリ２６のライトコマンドのフォーマットと、そのライトコマンドに対する応答情報のフォーマットを示した図であるが、図５の要素（フィールド）１０１１がＯｐｃｏｄｅ、要素１０１２がコマンドＩＤである。そして要素１０１３以降の各情報が、ライトコマンドに固有のパラメータである。また、各コマンドの処理完了後に返送される応答情報として、コマンドＩＤとステータス（Ｓｔａｔｕｓ）が、全応答情報に共通に含まれる情報であり、ステータスの後に各応答情報に固有の情報が付加されることもある。
【００４８】
オペレーションコード（Ｏｐｃｏｄｅ）は、コマンドの種別をキャッシュメモリ２６に通知するための情報であり、コマンドを取得したキャッシュメモリ２６は、この情報を参照することにより、通知されたコマンドの種類を認識する。たとえばライトコマンドの場合、０ｘ０１というＯｐｃｏｄｅで、リードコマンドの場合、０ｘ０２というＯｐｃｏｄｅであると決められている。
【００４９】
コマンドＩＤは、コマンドの固有のＩＤを格納するフィールドであり、コマンドの応答情報には、どのコマンドに対する応答情報であるかを、ストレージコントローラ１０に認識させるために、このフィールドに、指定されたＩＤが付与される。ストレージコントローラ１０は、コマンド作成時にコマンドを一意に識別可能なＩＤを生成して、このコマンドＩＤのフィールドにこのＩＤを格納したコマンドを作成し、キャッシュメモリ２６にコマンドを送信する。そして、キャッシュメモリ２６では、受信したコマンドに対応した処理が完了すると、当該コマンドのコマンドＩＤを応答情報に含めてストレージコントローラ１０に返送する。ストレージコントローラ１０は、この応答情報を受領した際、応答情報に含まれるＩＤを取得することで、当該コマンドの完了を認識する。また、応答情報に含まれるステータス（図５の要素１０２２）は、コマンドの処理が正常に完了したか否かを表す情報が格納されるフィールドである。コマンドの処理が正常に完了しなかった（エラー）場合、ステータスには、例えばエラー原因等を識別できる番号が格納される。
【００５０】
（１）ライトコマンド
図５は、本実施例におけるキャッシュメモリ２６のライトコマンドとそのライトコマンドに対する応答情報を示した図である。本実施例におけるキャッシュメモリ２６のＬＢＡ０ライトコマンド２０１０は、コマンド情報として、オペレーションコード１０１１、コマンドＩＤ１０１２、ＬＢＡ０／１開始アドレス１０１３、ＬＢＡ０／１長１０１４、圧縮要否フラグ１０１５、ライトデータアドレス１０１６により構成される。尚、本実施例では、上記の情報から構成されるコマンドの例について記すが、上記以上の付加的な情報があってもよい。例えば、ＤＩＦ（Ｄａｔａ  Ｉｎｔｅｇｒｉｔｙ  Ｆｉｅｌｄ）等に関連する情報がコマンドに付与されていたとしてもよい。
【００５１】
ＬＢＡ０／１開始アドレス１０１３は、ライト先の論理空間の先頭アドレスを指定するフィールドである。なお、本発明の実施例におけるＬＢＡ０空間はアドレス０ｘ０００＿００００＿００００から０ｘ０７Ｆ＿ＦＦＦＦ＿ＦＦＦＦの範囲の空間であり、ＬＢＡ１空間はアドレス０ｘ８００＿００００＿００００以降０ｘの空間と定められているので、キャッシュメモリ２６は、ライトコマンドのＬＢＡ０／１開始アドレス１０１３に０ｘ０００＿００００＿００００から０ｘ０７Ｆ＿ＦＦＦＦ＿ＦＦＦＦの範囲のアドレスが格納されていた場合、ＬＢＡ０空間のアドレスが指定されたと認識し、０ｘ８００＿００００＿００００以降のアドレスが指定されていた場合、ＬＢＡ１空間のアドレスが指定されたと認識する。ただＬＢＡ０空間とＬＢＡ１空間のいずれのアドレス空間に従うアドレスが指定されたかを認識する方法は、上で説明した方法以外の方法を採用することも可能である。たとえばＯｐｃｏｄｅ１０１１の内容によってＬＢＡ０空間とＬＢＡ１空間を識別する方法などもありえる。
【００５２】
ＬＢＡ０／１長１０１４は、ＬＢＡ０／１開始アドレス１０１３から始まる記録先ＬＢＡ０またはＬＢＡ１の範囲（長さ）を指定するフィールドで、セクタ数で表された長さが格納される。キャッシュメモリ２６は、前述のＬＢＡ０／１開始アドレス１０１３とＬＢＡ０／１長１０１４で特定される範囲のＬＢＡ０／１領域に対して、ライトデータを格納したＰＢＡ領域を対応づける処理を行う。
【００５３】
圧縮要否フラグ１０１５は、このコマンドが指示するライト対象データの圧縮要否を指定するフィールドである。本実施例のストレージ装置１では、プロセッサ２１が圧縮が不要であることを明示的に伝える場合、ＬＢＡ１アドレスを指定したライトコマンドを発行するため、この圧縮要否フラグ１０１５は使用しない。ただしストレージコントローラ１０がライトコマンドを作成する際、ホスト計算機３から到来するライト対象データにデータ圧縮によるサイズ削減効果が見込めない（例えば既に画像圧縮等で圧縮されたデータと認識している場合）ことが事前に分かっている場合、このフラグの値をＯＮにする（「１」を格納する）ことで、キャッシュメモリ２６に圧縮が不要であることを通知することを可能にする。このフラグがＯＮの場合には、キャッシュメモリ２６は圧縮を実行しないという機能を持つ。
【００５４】
ライトデータアドレス１０１７とライトデータ長１０１８はそれぞれ、このコマンドが指示するライト対象データの現在の格納先（本発明の実施例ではＤＲＡＭ２５のアドレス）の先頭アドレス、そしてデータの長さを格納するフィールドである。ライト対象データがＤＲＡＭ２５の連続領域に格納されている場合、ライトコマンド中には、ライトデータアドレス１０１７とライトデータ長１０１８の組は１つだけ格納されており、その時リスト数１０１６には「１」が格納される。一方、ライト対象データがＤＲＡＭ２５内の複数の領域に離散的に格納されている場合、ライトコマンド中にはライトデータアドレス１０１７とライトデータ長１０１８の組が複数格納され、リスト数１０１６には、ライトデータアドレス１０１７とライトデータ長１０１８の組が格納されている数が格納される。キャッシュメモリ２６は、このフィールドに指示されたＤＲＡＭ２５上領域から、ＬＢＡ０／１長（１０１４）に格納されているサイズの領域のデータを取得することでライトデータの取得を行う。尚、ライトコマンド中にライトデータアドレス１０１７とライトデータ長１０１８の組を複数格納するフォーマット以外に、別のコマンドフォーマットを採用してもよい。たとえば、複数のアドレス（ライトデータアドレス１０１７とライトデータ長１０１８の組）が格納されたリストのポインタ情報（リストが格納されているアドレス（たとえばＤＲＡＭ２５内のアドレス））をライトコマンドに格納し、キャッシュメモリ２６が当該ポインタ情報を参照してライトデータアドレス１０１７とライトデータ長１０１８を取得する態様もあり得る。
【００５５】
ライト応答情報１０２０は、コマンドＩＤ１０２１、ステータス１０２２、圧縮データ長１０２３により構成される。コマンドＩＤ１０２１とステータス１０２２は、各コマンド共通の応答情報であるので説明を省略する。圧縮データ長１０２３は、ライトしたデータの圧縮後のデータ長を記録するフィールドである。ストレージコントローラ１０は、このフィールドを取得することで、ライトしたデータの圧縮後のデータサイズを把握できる。また、本実施例では、ライト先（ＬＢＡ０／１開始アドレス１０１３）がＬＢＡ１であるとき、圧縮済みのデータを記録することとなっている為、本フィールドは無効となる。
【００５６】
なお、ライトコマンドのＬＢＡ０／１開始アドレス１０１３、ＬＢＡ０／１長１０１４で指定されるＬＢＡ０空間（またはＬＢＡ１空間）の領域には、ＰＢＡが対応付けられている場合もあれば、ＰＢＡが対応付けられていない場合もある。ＰＢＡが対応付けられていない場合は、キャッシュメモリ２６は新たにＰＢＡを対応付けて、そのあと当該ＰＢＡで指定される領域にデータを書き込む。ＰＢＡが対応付けられている場合、当該対応付けられていたＰＢＡで指定される領域は未使用領域として管理し、新たなＰＢＡを対応付け、そのあと当該ＰＢＡで指定される領域にデータを書き込む。これは、本発明の実施例におけるキャッシュメモリ２６の記憶媒体がフラッシュメモリを採用しており、フラッシュメモリは原則上書きが不可能（上書きする場合、一旦データの書き込まれているブロックを消去する処理が必要）であるためである。そして未使用領域として管理する領域が一定数以上になった場合（あるいは書き込み可能なページが不足してきた場合）、キャッシュメモリ２６ではいわゆるガーベッジコレクションを行って、未書き込みページを作成する。ただしこれらの処理は、周知のフラッシュメモリを用いた記憶デバイスで行われている処理と同様であるため、本実施例では詳細な説明は省略する。そして、重要な点は、本発明の実施例におけるストレージコントローラ１０（プロセッサ２１）は、キャッシュメモリ２６内で記憶領域がＰＢＡというアドレス空間で管理されていることは認識せず（認識不要である）、ライトコマンドのＬＢＡ０／１開始アドレス１０１３、ＬＢＡ０／１長１０１４で指定されるＬＢＡ０空間（またはＬＢＡ１空間）の領域には、ＰＢＡが対応付けられている・いないにかかわらず、見かけ上ＬＢＡ０またはＬＢＡ１を指定した上書きが可能ということである。
【００５７】
（２）リードコマンド
図６は、本実施例におけるキャッシュメモリ２６がサポートする、リードコマンドとそのリードコマンドへの応答情報を示した図である。本実施例におけるキャッシュメモリ２６のリードコマンド１６１０は、コマンド情報として、オペレーションコード１０１１、コマンドＩＤ１０１２、ＬＢＡ０／１開始アドレス１６１３、ＬＢＡ０／１長１６１４、伸長要否フラグ１６１５、リードデータアドレス１６１６により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。尚、コマンドＩＤ１０１２は先のＬＢＡ０ライトコマンドと同一の内容の為、説明は省略する。
【００５８】
オペレーションコード１０１１は、コマンドの種別をキャッシュメモリ２６に通知するフィールドであり、コマンドを取得したキャッシュメモリ２６は、このフィールドにより通知されたコマンドがリードコマンドであることを認知する。
【００５９】
ＬＢＡ０／１開始アドレス１６１３は、リード先の論理空間の先頭アドレスを指定するフィールドである。ＬＢＡ０／１長１６１４は、ＬＢＡ０／１開始アドレス１６１３から始まる記録先ＬＢＡ０またはＬＢＡ１の範囲を指定するフィールドである。キャッシュメモリ２６は、前述のＬＢＡ０またはＬＢＡ１開始アドレス１６１３とＬＢＡ０／１長１６１４が示す範囲のＬＢＡ０空間またはＬＢＡ１空間の領域に対して対応付けられたＰＢＡからデータを取得し、取得したデータを（必要に応じて伸長して）ストレージコントローラ１０に転送することでリード処理を行う。
【００６０】
伸長要否フラグ１６１５は、このコマンドが指示するリード対象データの伸長要否を指定するフィールドである。ストレージ装置がリードコマンドを作成する際、このフラグを制御することで、キャッシュメモリ２６に伸長が不要であることを通知する。尚、このフィールドは、リードコマンドに含まれていなくても良い。本実施例のキャッシュメモリ２６の場合、ＬＢＡ１を指定してリードする際、取得データの伸長を行わないため、伸長要否フラグ１６１５は必須ではない。ただし別の実施形態として、キャッシュメモリ２６がＬＢＡ１を指定したリードコマンドを受信した時、伸長要否フラグ１６１５がＯＦＦ（０）の場合にはデータを伸長し、伸長要否フラグ１６１５がＯＮ（１）の場合にはデータを伸長せずにデータリードを行うようにしてもよい。
【００６１】
リードデータアドレス１６１６は、リード対象データの出力先領域の先頭アドレスが指定される（たとえばＤＲＡＭ２５内のアドレス）。リードされたデータはリードデータアドレス１６１６で指定されたアドレスの領域から、連続的にＬＢＡ０／１長１６１４で指定された長さのデータが格納されることになる。なお、ライトコマンドと同様に、リードデータアドレス１６１６とデータ長の組を複数、リードコマンドのパラメータとして指定できるようにし、離散的な領域にデータを出力することを可能とする態様もありえる。
【００６２】
リード応答１６２０は、その他のコマンドの応答情報と共通の情報（コマンドＩＤ１０２１、ステータス１０２２）のみを含むものであるため、説明は省略する。なお、共通の情報以外の付加的な情報がリード応答１６２０に含まれている構成でもよい。
【００６３】
（３）フルストライプＰａｒｉｔｙ生成コマンド
ＲＡＩＤ技術におけるパリティの生成方法には大きく２通りある。１つは、パリティを生成するために必要なすべてのデータによって、ＸＯＲ等のパリティデータの演算を行ってパリティ生成を行う方法で、この方法を本明細書では「フルストライプＰａｒｉｔｙ生成方法」と呼ぶ。もう一方は、ＲＡＩＤ構成された記憶媒体群に対して更新データの書き込みが行われる場合、当該更新データに加えて、記憶媒体に格納されている更新前のデータ及び当該更新前のデータに対応する更新前パリティとのＸＯＲ演算等を行って、更新データに対応するパリティ（更新後パリティ）を生成する方法で、この方法を本明細書では「更新Ｐａｒｉｔｙ生成方法」と呼ぶ。図７は、本実施例におけるキャッシュメモリ２６がサポートする、フルストライプＰａｒｉｔｙ生成コマンドとフルストライプＰａｒｉｔｙ生成コマンドへの応答情報を示した図である。本実施例におけるキャッシュメモリ２６のフルストライプＰａｒｉｔｙ生成コマンド１３１０は、コマンド情報として、オペレーションコード１０１１、コマンドＩＤ１０１２、ＬＢＡ１長１３１３、ストライプ数１３１４、ＬＢＡ０開始アドレス０〜Ｘ（１３１５〜１３１７）、ＬＢＡ１開始アドレス（ＸＯＲ  Ｐａｒｉｔｙ用）１３１８、ＬＢＡ１開始アドレス（ＲＡＩＤ  ６  Ｐａｒｉｔｙ用）１３１９により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
【００６４】
キャッシュメモリ２６は、Ｏｐｃｏｄｅ１０１１フィールドの内容から、ストレージコントローラ１０から受け取ったコマンドがフルストライプＰａｒｉｔｙ生成コマンドであることを認知する。また、生成すべきＰａｒｉｔｙの種類は、ＲＡＩＤレベルによって異なる。そのため、本実施例におけるキャッシュメモリ２６では、Ｏｐｃｏｄｅ１０１１の内容によって、生成されるパリティを変えるものとする。たとえばＯｐｃｏｄｅに０ｘ１１，０ｘ１２，０ｘ１３のいずれかが指定された場合、いずれもフルストライプＰａｒｉｔｙ生成を行うが、Ｏｐｃｏｄｅに０ｘ１１が指定された場合にはＲＡＩＤ４、５で用いられるパリティ（ＸＯＲデータ）を１つ生成し、Ｏｐｃｏｄｅに０ｘ１２が指定された場合にはＲＡＩＤ６（リードソロモンコード使用）で用いられる２つのパリティ（いわゆるＰパリティとＱパリティ）を生成し、Ｏｐｃｏｄｅに０ｘ１３が指定された場合にはＲＡＩＤ６（いわゆるＥＶＥＮＯＤＤ方式、Ｒｏｗ−Ｄｉａｇｏｎａｌパリティ方式）で用いられる２つのパリティ（水平パリティ、対角パリティ）を生成する。
【００６５】
ＬＢＡ１長１３１３は、生成するＰａｒｉｔｙの長さあるいはＰａｒｉｔｙ生成元データの長さ（ＲＡＩＤ  Ｐａｒｉｔｙは、ＰａｒｉｔｙとＰａｒｉｔｙ生成元データの長さは同一）を指定するフィールドである。ストライプ数１３１４は、パリティを生成のために使用するデータの個数を指定する。たとえば６つのデータに対してＰａｒｉｔｙを生成する場合、ストライプ数１３１４には６が格納される。
【００６６】
ＬＢＡ１開始アドレス１３１５〜１３１７は、Ｐａｒｉｔｙ生成元のデータが対応づけられているＬＢＡ１の開始アドレスを指定するフィールドである。このフィールドの個数はストライプ数１３１４で指定された個数と一致している（一致していないコマンドが発行された場合、キャッシュメモリ２６はエラーを返却する）。例えば、６つのデータに対して２つのＰａｒｉｔｙを作成する構成（６Ｄ＋２ＰのＲＡＩＤ６構成）では、６つのＬＢＡ１開始アドレスを指定する。
【００６７】
ＬＢＡ１開始アドレスＹ１（ＸＯＲ  Ｐａｒｉｔｙ用）１３１８は、生成するＲＡＩＤ  Ｐａｒｉｔｙ（ＸＯＲ  Ｐａｒｉｔｙ）の格納先を指定するフィールドである。この開始アドレスからＬＢＡ１長１３１３に指定された範囲の領域に、生成されたＰａｒｉｔｙ（ＲＡＩＤ５のパリティ、あるいはＲＡＩＤ６のＰパリティ、水平パリティ）が格納される。
【００６８】
ＬＢＡ１開始アドレス（ＲＡＩＤ６用）１３１９は、生成するＲＡＩＤ６用のＰａｒｉｔｙの格納先を指定するフィールドである。ＲＡＩＤ６用のＰａｒｉｔｙは先に述べたとおり、リードソロモン符号のＱパリティ、ＥＶＥＮＯＤＤ方式におけるＤｉａｇｏｎａｌ  Ｐａｒｉｔｙである。本発明では、ＬＢＡ１開始アドレス（ＲＡＩＤ６用）１３１９からＬＢＡ１長１３１３に指定された範囲の領域に生成されたＰａｒｉｔｙが格納される。もちろん、ＯｐｃｏｄｅにＲＡＩＤ５用のパリティ生成コマンドが指定された（たとえば０ｘ１１が指定された）場合には、ＬＢＡ１開始アドレス（ＲＡＩＤ６用）１３１９の指定は不要である。
【００６９】
本実施例のキャッシュメモリ２６はフルストライプＰａｒｉｔｙ生成コマンドを受け付けると、前述のＬＢＡ１開始アドレス１３１５〜１３１７に指定された領域に対応付けられたＰＢＡにより特定されるＦＭ４２０上領域から複数の圧縮データを取得し、キャッシュメモリ２６内部のＰａｒｉｔｙ生成ユニット４１９を使って、Ｐａｒｉｔｙ（１つまたは２つ）を生成する。その後、生成したＰａｒｉｔｙをＦＭ４２０上領域に記録する。生成したＰａｒｉｔｙの書き込みは、ライトコマンドにおけるデータ書き込みと同様、ＬＢＡ１開始アドレス（ＸＯＲ  Ｐａｒｉｔｙ用）１３１８及び／またはＬＢＡ１開始アドレス（ＲＡＩＤ６  Ｐａｒｉｔｙ用）１３１９で特定されるＬＢＡ１空間に対して動的にＰＢＡを割り当てて、当該割り当てたＰＢＡにより特定される領域にパリティの書き込みを行う。
【００７０】
フルストライプＰａｒｉｔｙ生成応答１３２０は、コマンドＩＤ１０２１、ステータス１０２２、により構成されるが、いずれも他のコマンドと共通の情報であるため、説明は省略する。
【００７１】
（４）更新Ｐａｒｉｔｙ生成コマンド
本発明の実施例におけるキャッシュメモリ２６が実行する更新Ｐａｒｉｔｙ生成は、既にＰａｒｉｔｙが作成されている最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）の領域に更新データを記録する際、更新データ、更新データにより更新される領域の更新前データ（旧データ）、旧データに対応する旧Ｐａｒｉｔｙの３つのデータが、キャッシュメモリ２６のＬＢＡ１空間上にマッピングされているときに実行できる。本実施例のストレージコントローラ１０は、あとで述べるように、原則としてＰａｒｉｔｙ生成はフルストライプＰａｒｉｔｙ生成方法によって行うため、更新Ｐａｒｉｔｙ生成方法によるＰａｒｉｔｙ生成が行われる機会はないが、キャッシュメモリ２６は更新Ｐａｒｉｔｙ生成を行う機能も一応は備えている。更新Ｐａｒｉｔｙ生成を行う際、ＲＡＩＤ構成されている最終記憶媒体から旧データと旧Ｐａｒｉｔｙを読み出し、キャッシュメモリ２６のＬＢＡ１空間に対して格納し、その後更新データ、更新データにより更新される領域の旧データ、旧データを保護している旧Ｐａｒｉｔｙ、更新パリティのＬＢＡ１アドレスを指定した更新Ｐａｒｉｔｙ生成コマンドを発行することで、更新Ｐａｒｉｔｙ生成を行う。
【００７２】
図８は、本実施例におけるキャッシュメモリ２６がサポートする、更新Ｐａｒｉｔｙ生成コマンドと更新Ｐａｒｉｔｙ生成コマンドへの応答情報を示した図である。更新Ｐａｒｉｔｙコマンド１４１０は、コマンド情報として、オペレーションコード１０１１、コマンドＩＤ１０１２、ＬＢＡ１長１４１３、ＬＢＡ１開始アドレス０（１４１４）、ＬＢＡ１開始アドレス１（１４１５）、ＬＢＡ１開始アドレス２（１４１６）、ＬＢＡ１開始アドレス３（１４１７）、ＬＢＡ１開始アドレス４（１４１８）、ＬＢＡ１開始アドレス５（１４１９）により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
【００７３】
オペレーションコード１０１１は、コマンドの種別をキャッシュメモリ２６に通知するフィールドであり、コマンドを取得したキャッシュメモリ２６は、このフィールドにより通知されたコマンドが更新Ｐａｒｉｔｙ生成コマンドであることを認知する。またフルストライプＰａｒｉｔｙ生成コマンドと同様、Ｏｐｃｏｄｅ１０１１の内容によって、生成されるパリティの種類が変わる。
【００７４】
ＬＢＡ１長１４１３は、生成するＰａｒｉｔｙの長さ（ＲＡＩＤ  Ｐａｒｉｔｙは、ＰａｒｉｔｙとＰａｒｉｔｙ生成元データの長さは同一）を指定するフィールドである。ＬＢＡ１開始アドレス０（１４１４）は、Ｐａｒｉｔｙ更新のための新データがマッピングされているＬＢＡ１の領域の開始アドレスを示すフィールドである。ストレージコントローラ１０はこのフィールドを用いて、ＬＢＡ１開始アドレス０（１４１４）からＬＢＡ１長１４１３で特定される長さの領域のデータが新データであることをキャッシュメモリ２６に通知する。ＬＢＡ１開始アドレス１（１４１５）は、Ｐａｒｉｔｙ更新のための旧データがマッピングされているＬＢＡ１の領域の開始アドレスを示すフィールドである。ストレージコントローラ１０はこのフィールドを用いてＬＢＡ１開始アドレス１（１４１５）からＬＢＡ１長１４１３で特定される長さの領域のデータが旧データであることをキャッシュメモリ２６に通知する。
【００７５】
ＬＢＡ１開始アドレス２（１４１６）は、Ｐａｒｉｔｙ更新のための更新前のＸＯＲ  ＰａｒｉｔｙがマッピングされているＬＢＡ１の領域の開始アドレスを示すフィールドである。ストレージ装置はこのフィールドを用いてＬＢＡ１開始アドレス２（１４１６）からＬＢＡ１長１４１３で特定される長さの領域のデータがＸＯＲ  Ｐａｒｉｔｙであることをキャッシュメモリ２６に通知する。ＬＢＡ１開始アドレス３（１４１７）は、Ｐａｒｉｔｙ更新のための更新前のＲＡＩＤ６用の  ＰａｒｉｔｙがマッピングされているＬＢＡ１の領域の開始アドレスを示すフィールドである。ストレージ装置１はこのフィールドを用いてＬＢＡ１開始アドレス３（１４１７）からＬＢＡ１長１４１３で特定される長さの領域のデータが更新前のＲＡＩＤ６用  Ｐａｒｉｔｙであることをキャッシュメモリ２６に通知する。
【００７６】
ＬＢＡ１開始アドレス４（１４１８）は、更新によって新たに作成するＸＯＲ  Ｐａｒｉｔｙを対応付けるＬＢＡ１の領域の開始アドレスを示すフィールドである。ストレージ装置はこのフィールドを用いてＬＢＡ１開始アドレス４（１４１８）からＬＢＡ１長１４１３で特定される長さの領域に新たなＸＯＲ  Ｐａｒｉｔｙをマッピングするようにキャッシュメモリ２６に指示する。ＬＢＡ１開始アドレス５（１４１９）は、更新によって新たに作成するＲＡＩＤ６用のＰａｒｉｔｙを対応付けるＬＢＡ１の領域の開始アドレスを示すフィールドである。ストレージ装置はこのフィールドを用いてＬＢＡ１開始アドレス５（１４１９）からＬＢＡ１長１４１３で特定される長さの領域に新たなＲＡＩＤ６用のＰａｒｉｔｙをマッピングするようにキャッシュメモリ２６に指示する。なお、ＬＢＡ１開始アドレス３（１４１７）、ＬＢＡ１開始アドレス５（１４１９）は、ＲＡＩＤ５用のパリティ生成の場合には指定不要で、プロセッサ２１からキャッシュメモリ２６に送信されてくるコマンドの当該フィールド中に格納されている値は無視される。
【００７７】
本実施例のキャッシュメモリ２６が更新Ｐａｒｉｔｙ生成コマンドを受け付けた時の処理は、フルストライプＰａｒｉｔｙ生成コマンドを受け付けた場合に行われる処理と同様である。前述のＬＢＡ１開始アドレス１４１４〜１４１７に指定された領域に対応付けられたＰＢＡが示すＦＭ４２０上記憶領域から複数の圧縮データを取得し、キャッシュメモリ２６内部のＰａｒｉｔｙ生成ユニット４１９を使って、１または２つのＰａｒｉｔｙを生成する。その後、生成したＰａｒｉｔｙをＬＢＡ１開始アドレス４（１４１８）、ＬＢＡ１開始アドレス５（１４１９）で特定される領域に記録する。
【００７８】
（５）ＬＢＡ１マッピングコマンド
本実施例におけるキャッシュメモリ２６では、ＬＢＡ０の領域を指定してライトしたデータを、キャッシュメモリ２６が圧縮してＦＭ４２０に記録する。そしてその後、この圧縮データに対してＲＡＩＤ  Ｐａｒｉｔｙを生成し、また圧縮データを圧縮状態のまま最終記憶媒体へ書き込むため、ＬＢＡ０とは異なるＬＢＡ１にマッピングする。ＬＢＡ１マッピングコマンドは、その時に用いられる。
【００７９】
図９は、本実施例におけるキャッシュメモリ２６でサポートされる、ＬＢＡ１マッピングコマンドと、そのＬＢＡ１マッピングコマンドに対する応答情報を模式的に示した図である。ＬＢＡ１マッピングコマンド１２１０は、コマンド情報として、オペレーションコード１０１１、コマンドＩＤ１０１２、ＬＢＡ０開始アドレス１２１３、ＬＢＡ０長１２１４、ＬＢＡ１開始アドレス１２１５、により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
【００８０】
ＬＢＡ０開始アドレス１２１３は、ＬＢＡ１に圧縮データをマッピングする対象データのＬＢＡ０領域を指定する先頭アドレスを指定するフィールドである。ＬＢＡ０長１２１４は、ＬＢＡ１へのマッピング対象となるＬＢＡ０開始アドレス１２１３から始まるＬＢＡ０の範囲を指定するフィールドである。なお、ＬＢＡ０開始アドレス１２１３とＬＢＡ０長１２１４は、８セクタ（４ＫＢ）の倍数に限定される。
【００８１】
ＬＢＡ１開始アドレス１２１５は、マッピングするＬＢＡ１の開始アドレスを指定するフィールドである。ストレージコントローラ１０のプロセッサ２１は、予めマッピングするデータサイズを把握しており、このデータサイズがマッピング可能なＬＢＡ１の領域を確保し、この先頭アドレスをＬＢＡ１開始アドレス１２１５フィールドに格納して、当該コマンドをキャッシュメモリ２６に発行する。
【００８２】
本実施例のキャッシュメモリ２６は、前述のＬＢＡ０開始アドレス１２１３とＬＢＡ０長１２１４が示す範囲のＬＢＡ０領域に対応づけられている圧縮データを、ＬＢＡ１開始アドレス１２１５から、圧縮データサイズ分の領域に渡ってマッピングを行う。これにより、この後プロセッサ２１が当該コマンドによりマッピングしたＬＢＡ１アドレスを指定したリードコマンドをキャッシュメモリに発行すると、当該ＬＢＡ１アドレスにマッピングされた圧縮データを読み出すことができる。
【００８３】
ＬＢＡ１マッピング応答１２２０は、コマンドＩＤ１０２１、ステータス１０２２、により構成される。尚、本実施例では、上記の情報による応答情報の例について記すが、上記以上の付加的な情報があってもよい。
【００８４】
（６）ＬＢＡ０マッピングコマンド
本実施例のストレージ装置１は、最終記憶媒体からデータ（圧縮データ）を読み出すと、ＬＢＡ１の領域を指定したライトコマンドをキャッシュメモリ２６に発行して、キャッシュメモリ２６（のＦＭ４２０）に圧縮データを格納する。また、ＦＭ４２０に記録された圧縮データは、ホスト計算機３からのリード要求等があった場合には、伸長した状態でホスト計算機３に送信される必要がある。ＬＢＡ０マッピングコマンドはそのために用いられる。
【００８５】
図１０は、本実施例におけるキャッシュメモリ２６がサポートするＬＢＡ０マッピングコマンドと、当該ＬＢＡ０マッピングコマンドへの応答情報を示した図である。本実施例におけるキャッシュメモリ２６のＬＢＡ０マッピングコマンド１２１０は、コマンド情報として、オペレーションコード１０１１、コマンドＩＤ１０１２、ＬＢＡ１開始アドレス１９１３、ＬＢＡ１長１９１４、ＬＢＡ０開始アドレス１９１５、により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。
【００８６】
ＬＢＡ１開始アドレス１９１３は、マッピング対象となる圧縮データのＬＢＡ１空間上の範囲の先頭アドレスを指定するフィールドである。ＬＢＡ１長１９１４は、ＬＢＡ０へのマッピング対象となるＬＢＡ１開始アドレス１９１３から始まるＬＢＡ１の範囲を指定するフィールドである。
【００８７】
ＬＢＡ０開始アドレス１９１５は、マッピングするＬＢＡ０の開始アドレスを指定するフィールドである。ストレージコントローラ１０は、ストレージ装置１が管理する管理情報により、ＬＢＡ１に記録した圧縮データの伸長後のデータサイズを知っており、ＬＢＡ０マッピングコマンドの発行前に、このデータサイズがマッピング可能なＬＢＡ０の領域を確保し、ＬＢＡ０マッピングコマンドの作成時には、この先頭アドレスをＬＢＡ０開始アドレス１９１５フィールドに格納する。また、ＬＢＡ０開始アドレス１９１５に指定できるアドレスは、８セクタ（４ＫＢ）の倍数に限定される。
【００８８】
本実施例のキャッシュメモリ２６は、ストレージコントローラ１０からＬＢＡ０マッピングコマンドを受け付けると、前述のＬＢＡ１開始アドレス１９１３とＬＢＡ１長１９１４が示す範囲のＬＢＡ１領域に対応づけられている圧縮データをＬＢＡ０開始アドレス１９１５から、伸長後のデータサイズ分の領域に渡ってマッピングを行う。これにより、この後プロセッサ２１が当該コマンドによりマッピングしたＬＢＡ０アドレスを指定したリードコマンドをキャッシュメモリに発行すると、当該ＬＢＡ０アドレスにマッピングされた圧縮データを、伸長された状態で読み出すことができる。
【００８９】
ＬＢＡ０マッピング応答１９２０は、その他のコマンドの応答情報と共通の情報（コマンドＩＤ１０２１、ステータス１０２２）のみを含むものであるため、説明は省略する。なお、共通の情報以外の付加的な情報がＬＢＡ０マッピング応答１９２０に含まれている構成でもよい。
【００９０】
（７）圧縮データサイズ取得コマンド
図１１は、本実施例におけるキャッシュメモリ２６がサポートする、圧縮データサイズ取得コマンドとその圧縮データサイズ取得コマンドへの応答情報を示した図である。本実施例におけるキャッシュメモリ２６の圧縮データサイズ取得コマンド１１１０は、コマンド情報として、オペレーションコード１０１１、コマンドＩＤ１０１２、ＬＢＡ０開始アドレス１１１３、ＬＢＡ０長１１１４により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。尚、コマンドＩＤ１０１２は先のＬＢＡ０ライトコマンドと同一の内容の為、説明は省略する。
以下、圧縮データサイズ取得コマンドに固有の情報について説明する。
【００９１】
ＬＢＡ０開始アドレス１１１３は、圧縮後のデータサイズ取得の対象となるＬＢＡ０領域の先頭アドレスを指定するフィールドである。ＬＢＡ０長１１１４は、ＬＢＡ０開始アドレス１１１３から始まるＬＢＡ０の範囲を指定するフィールドである。キャッシュメモリ２６は、前述のＬＢＡ０開始アドレス１１１３とＬＢＡ０長１１１４が示す範囲のＬＢＡ０領域に対応づけられているデータのサイズ（圧縮時サイズ）を算出し、ストレージ装置に通知する。なお、ＬＢＡ０開始アドレス１１１３に指定できるアドレスは、８セクタ（４ＫＢ）の倍数に限定される。同様にＬＢＡ０長１１１４に指定できる長さも８セクタ（４ＫＢ）の倍数に限定される。８セクタ境界と一致しないアドレス（たとえば０ｘ０００＿００００＿０００１など）や長さが、ＬＢＡ０開始アドレス１１１３またはＬＢＡ０長１１１４に指定された場合には、エラーが返却される。
【００９２】
圧縮データサイズ取得応答１１２０は、コマンドＩＤ１０２１、ステータス１０２２に加えて、圧縮データ長１１２３により構成される。尚、本実施例では、上記の情報による応答情報の例について記すが、上記以上の付加的な情報があってもよい。圧縮データ長１１２３は、圧縮データサイズ取得コマンドにて指示されたＬＢＡ０領域に対応づけられた圧縮データのサイズを格納するフィールドである。ストレージコントローラ１０は、伸長ＶＯＬから圧縮ＶＯＬにデータの移し替えを行う際に、この圧縮データ長の値を取得する処理を行う。
【００９３】
（８）マッピング解除コマンド
本実施例では、ストレージコントローラ１０は圧縮して記録したライトデータを圧縮した状態で取得する為、または圧縮データに対してＰａｒｉｔｙを生成する為、データをＬＢＡ１にマッピングする。また、圧縮した情報を伸長して取得するために、ＬＢＡ１を指定してキャッシュメモリ２６に記録したデータをＬＢＡ０にマッピングする。こうしてマッピングした領域は、処理が終了し不要となった場合、マッピングを解除する。本実施例のストレージ装置は、マッピング解除コマンドを用いて、ＰＢＡに対応付けたＬＢＡ０またはＬＢＡ１の領域の対応付けを解除する。
【００９４】
図１２は、本実施例におけるキャッシュメモリ２６がサポートする、マッピング解除コマンドとそのマッピング解除コマンドへの応答情報を示した図である。本実施例におけるキャッシュメモリ２６のマッピング解除コマンド１７１０は、コマンド情報として、オペレーションコード１０１１、コマンドＩＤ１０１２、ＬＢＡ０／１開始アドレス１７１３、ＬＢＡ０／１長１７１４、により構成される。尚、本実施例では、上記の情報によるコマンドの例について記すが、上記以上の付加的な情報があってもよい。以下、マッピング解除コマンドに固有のパラメータの内容と、マッピング解除コマンドをキャッシュメモリ２６が受け付けた時に行われる処理について説明する。
【００９５】
ＬＢＡ０／１開始アドレス１７１３は、マッピングを解除する論理空間の先頭アドレスを指定するフィールドで、ＬＢＡ０空間、ＬＢＡ１空間の両方のアドレス空間のアドレスが指定可能である。ただし、ＬＢＡ０空間のアドレスが指定される場合には、そのアドレスは４ＫＢ（８セクタ）境界のアドレスでなければならず、４ＫＢ（８セクタ）境界でないアドレスが指定された場合、キャッシュメモリ２６はエラーを返す。ＬＢＡ０／１長１７１４は、ＬＢＡ０／１開始アドレス１７１３から始まる記録先ＬＢＡ０またはＬＢＡ１の範囲を指定するフィールドである。
【００９６】
次に、本発明の実施例に係るキャッシュ管理データ構造について説明するが、その前に、本発明のストレージ装置１が管理するボリューム、及びボリューム（論理ボリューム）とキャッシュ管理データとの関係について、概要を説明する。
【００９７】
本発明のストレージ装置１では、ホスト計算機３から書き込まれたデータは、最終記憶媒体であるＳＳＤ１１またはＨＤＤ１２に格納されるが、最終記憶媒体であるＳＳＤ１１またはＨＤＤ１２の記憶空間は、直接ホスト計算機３には提供されない。ホスト計算機３には、論理的な記憶空間を持つ論理ボリュームが提供される。また、ホスト計算機３から書き込まれたデータは、圧縮された状態で最終記憶媒体に格納されるが、データが圧縮された状態で格納されることも、ホスト計算機３には認識させず、ホスト計算機３には、（ホスト計算機３から認識可能な）論理ボリュームには非圧縮のデータが格納されているようにしか認識されない。このような状態を実現するために、冒頭で述べたように、ストレージ装置１は２種類の論理ボリュームを作成、管理する。第１の種類の論理ボリュームは、先に述べたとおりホスト計算機３に提供される論理ボリュームで、非圧縮データが格納されているようにホスト計算機３から認識される伸長ＶＯＬである。第２の種類の論理ボリュームは圧縮ＶＯＬである。
【００９８】
ストレージ装置１は、ホスト計算機３に伸長ＶＯＬを提供するために、図１３に示すような伸長ＶＯＬ管理テーブル５００を維持管理する。ストレージ装置１は複数の伸長ＶＯＬをホスト計算機３に提供可能で、各伸長ＶＯＬには一意な識別番号（論理ボリューム番号）を付して管理する。ＶＶＯＬ＃５０３は伸長ＶＯＬに付された識別番号を示す。サイズ５０４は当該伸長ＶＯＬの容量を表す。また、ホスト計算機３では各伸長ＶＯＬを識別する場合、論理ボリューム番号は用いられず、ホストインタフェース（ポート）２４の識別子（たとえばホストインタフェース２４がＦＣインタフェースの場合には、ＦＣのＷＷＮ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｎａｍｅ）である）と、論理ユニット番号（ＬＵＮ）とを用いるので、論理ボリューム番号と、（ポートの識別子、ＬＵＮ）の組の対応付けを管理する必要がある。ポート＃５０１とＬＵＮ５０２には、ホスト計算機３が各伸長ＶＯＬを識別するためのポート識別子（ＷＷＮ）とＬＵＮが格納され、ＶＶＯＬ＃５０３と対応付けられる。ストレージ装置１の管理者は、ボリューム（伸長ＶＯＬ）を新規作成する際、管理装置４のＧＵＩを用いて、新規に作成すべき伸長ＶＯＬのポート＃とＬＵＮ、そしてサイズを指定する。ストレージ装置１はこの指定を受けると、伸長ＶＯＬ管理テーブル５００内に新規のエントリを作成し、新規作成したエントリのポート＃５０１、ＬＵＮ５０２、サイズ５０４の欄に、管理者から指定された情報を格納する。同時に未使用のＶＶＯＬ＃５０３を自動生成し、ＶＶＯＬ＃５０３の欄に格納することで、伸長ＶＯＬの作成（定義）が行われる。
【００９９】
続いて圧縮ＶＯＬについて説明する。先に説明した伸長ＶＯＬは、ホスト計算機３に論理的（仮想的）な記憶領域を提供するためのもので、定義された時点では伸長ＶＯＬの各アドレスに対応する物理記憶領域（最終記憶媒体であるＳＳＤ１１またはＨＤＤ１２の記憶領域）は存在しない。一方圧縮ＶＯＬは、定義された時点で、（圧縮ＶＯＬ上の）各記憶領域が、最終記憶媒体であるＳＳＤ１１またはＨＤＤ１２の記憶領域と１：１に対応付けられたボリュームである。本発明のストレージ装置１は、複数（たとえば４台）の最終記憶媒体を１つのＲＡＩＤグループとして管理し、ＲＡＩＤグループ内の１つまたは２つの最終記憶媒体に障害が発生した場合でもデータ復旧を可能にしているが、本発明のストレージ装置１では、１つのＲＡＩＤグループを１つの圧縮ＶＯＬとして管理する。
【０１００】
図１４は、ストレージ装置１が管理する圧縮ＶＯＬ管理テーブル５５０を示す。ＬＤＥＶ＃５５１が、ストレージ装置１内で定義されている圧縮ＶＯＬの識別番号であり、ＰＤＥＶ＃５５２、ＲＡＩＤレベル５５３、サイズ５５４はそれぞれ、圧縮ＶＯＬを構成している最終記憶媒体（ＳＳＤ１１またはＨＤＤ１２）の識別番号、ＰＤＥＶ＃５５２で特定される最終記憶媒体により構成されるＲＡＩＤグループのＲＡＩＤレベル、圧縮ＶＯＬの容量（ＲＡＩＤパリティにより消費される領域の容量は除く）を表している。なお、本発明の実施例では、１つの圧縮ＶＯＬは１つのＲＡＩＤグループに対応するため、圧縮ＶＯＬの容量はＲＡＩＤグループを構成する全最終記憶媒体の合計容量からパリティデータの記憶容量を除いた容量である。なお、本発明は１つのＲＡＩＤグループと１つの圧縮ＶＯＬとを１：１に対応付ける構成には限定されない。１つのＲＡＩＤグループを分割して、分割されたＲＡＩＤグループの各領域をそれぞれ１つの圧縮ＶＯＬに対応付ける、あるいは、複数のＲＡＩＤグループを１つの圧縮ＶＯＬに対応させる構成をとっても良い。ストレージ装置１の管理者は、ボリューム（圧縮ＶＯＬ）を新規作成する際、管理装置４が提供するＧＵＩを用いて、新規に作成すべき圧縮ＶＯＬ（ＲＡＩＤグループ）を構成するための最終記憶媒体（の識別番号）、ＲＡＩＤレベルを指定する。ストレージ装置１はこの指定を受けると、圧縮ＶＯＬ管理テーブル５５０内に新規のエントリを作成し、新規作成したエントリのＰＤＥＶ＃５５２、ＲＡＩＤレベル５５３の欄に、管理者から指定された情報を格納する。同時に未使用の圧縮ＶＯＬ用識別番号を自動生成してＬＤＥＶ＃５５１の欄に格納し、ＲＡＩＤグループのサイズを算出して、サイズ（Ｓｉｚｅ）５５４の欄に格納することで、圧縮ＶＯＬの作成（定義）が行われる。
【０１０１】
続いて伸長ＶＯＬと圧縮ＶＯＬとの関係について、図１５を用いて説明する。ホスト計算機３から伸長ＶＯＬ５０００をライト対象ボリュームとして指定したライト要求、及び当該ライト要求におけるライト対象データ（ライトデータ）が送信されると、ライトデータはキャッシュメモリ２６（図１５では非図示）上に圧縮された状態で格納される。以下、この状態のことを、「データ（ライトデータ）が伸長ＶＯＬに書き込まれた」状態と呼ぶ。ただしホスト計算機３からは、データが圧縮された状態は見えない（認識されない）。
【０１０２】
本発明の実施例におけるストレージ装置１では、伸長ＶＯＬ５０００に対して書き込まれたライトデータを最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）に格納するために、伸長ＶＯＬ５０００から圧縮ＶＯＬ５５００へと移し替える（移動する）。ここでの「移動」処理の詳細は後述するが、「移動」とはデータを物理的に移動・複製する処理ではなく、伸長ＶＯＬ５０００上のデータの書き込まれた記憶領域のアドレスと、圧縮ＶＯＬ５５００上の記憶領域のアドレスとの対応付けを行う処理のことを意味する。また、伸長ＶＯＬ５０００上の、データの書き込まれたアドレスと、当該アドレスが対応付けられる圧縮ＶＯＬ５５００上のアドレスの対応関係は、固定的なものではなく、伸長ＶＯＬにデータが書き込まれる毎に変動する。
【０１０３】
伸長ＶＯＬ５０００上に書き込まれたデータを圧縮ＶＯＬ上に対応付ける方法について概要を説明する。伸長ＶＯＬ５０００にデータａ、ｂ、ｃ、ｄ、ｅがランダムに（不連続な領域に）書き込まれた状態で、かつ圧縮ＶＯＬ５５００にはまだ何もデータが対応付けられてない状態である場合を想定する。伸長ＶＯＬ５０００に対してデータが所定量書き込まれた後、ストレージコントローラ１０は、データを圧縮ＶＯＬ５５００に移動する処理、つまりデータａ、ｂ、ｃ、ｄ、ｅの書き込まれた伸長ＶＯＬ５０００上の領域を圧縮ＶＯＬ５５００上の領域に対応付ける処理を行うが、その際、最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）へのデータ書き込み処理のオーバヘッドを小さくするため、データａ、ｂ、ｃ、ｄ、ｅを、圧縮ＶＯＬ５５００の先頭から連続的に格納されるように対応付けしていく（図１５参照）。
【０１０４】
また、圧縮ＶＯＬ上のデータを上書きすることはしない。たとえば図１５に示すように、データａ、ｂ、ｃ、ｄ、ｅが圧縮ＶＯＬに移動された（対応付けられた）後、ホスト計算機３からデータａの格納されている伸長ＶＯＬ５０００上の領域に対して、データ内容をａ’に更新するライト要求が到来すると、伸長ＶＯＬ上ではデータａの書き込まれていた領域のデータ内容は、ａ’に更新されるが、この更新データａ’は、圧縮ＶＯＬ上のデータａ（の圧縮データ）の書き込まれている領域とは別の領域（たとえばデータｅの格納されている領域の直後）に追記書き込みの要領で書き込まれる。
【０１０５】
圧縮ＶＯＬにデータａ、ｂ、ｃ、ｄ、ｅ（の圧縮データ）が対応付けられた後、このデータからＲＡＩＤ技術により、冗長データ（パリティ）が生成され、データ（圧縮データ）とパリティとは圧縮ＶＯＬを構成する最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）へと書き込まれる。以下、データ（又はパリティ）を最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）へと書き込む処理を「デステージ」と呼ぶ。
【０１０６】
なお、先に述べたとおり、伸長ＶＯＬのデータを圧縮ＶＯＬに移動する処理では最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）へのデータ書き込み処理のオーバヘッドが小さくなるように、圧縮ＶＯＬ上にデータを配置するが、その配置方法について具体的に説明する。図１６は圧縮ＶＯＬ５５００と圧縮ＶＯＬに対応する最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）との対応関係を示す概念図である。ここでは説明の簡単化のため、ＲＡＩＤグループが４台の最終記憶媒体で構成され、そのＲＡＩＤレベルが４の場合について説明するが、その他のＲＡＩＤレベルであっても同様である。
【０１０７】
図中の要素５５０１は、一例として１６ＫＢ（３２セクタ）の大きさの領域で、本発明の実施例では「スロット」と呼ばれる。またスロット５５０１中に、「０（Ｄ）」と記載されているスロット５５０１は、データが格納されているスロット（以下、データスロットと呼ぶ）を表し、「３（Ｐ）」と表記されているスロット５５０１は、パリティ（つまり０（Ｄ）、１（Ｄ）、２（Ｄ）の排他的論理和）が格納されているスロット（以下、パリティスロットと呼ぶ）を表している。ストレージコントローラ１０が伸長ＶＯＬ５０００に書き込まれたデータを圧縮ＶＯＬ５５００に移動する際には、データスロットに圧縮データを移動するとともにパリティスロットを確保する処理を行う。なお、以下では、１つのパリティスロット分のパリティを生成するために必要となるデータスロットの集合（たとえばパリティスロット「３（Ｐ）」を生成するために必要なデータスロットは「０（Ｄ）」、「１（Ｄ）」、「２（Ｄ）」である）のことを、「ストライプグループ」と呼ぶ。
【０１０８】
ストレージ装置１が複数のライトデータからパリティを生成する場合、パリティを生成するために必要なデータがストレージコントローラ１０上のキャッシュメモリ２６にない場合には、最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）からデータを読み出してくる必要がある。たとえば図１６で、スロット０（Ｄ）のデータが更新されたとすると、スロット０（Ｄ）に対応するパリティ３（Ｐ）を生成するためには、最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）から、更新前のデータ０（Ｄ）とパリティ３（Ｐ）（あるいはデータ１（Ｄ）とデータ２（Ｄ））を読み出してくる必要がある（データ書き込み時のオーバヘッドが大きくなる）。しかしデータ０（Ｄ）、１（Ｄ）、２（Ｄ）がすべてキャッシュメモリ２６上に存在する場合、キャッシュメモリ２６上に格納されているデータ０（Ｄ）、１（Ｄ）、２（Ｄ）の排他的論理和を計算すればよいだけであるから、最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）からデータを読み出すオーバヘッドは発生しない。
【０１０９】
そのため、本発明のストレージ装置１では、最終記憶媒体から更新前データや更新前パリティを読み出す必要がないように、伸長ＶＯＬ５０００に、１ストライプグループに相当する量のデータ（図１６の例では、データ０（Ｄ）、１（Ｄ）、２（Ｄ）の合計サイズ、つまり４８ＫＢ分のデータ）が書き込まれた後に、データを伸長ＶＯＬ５０００から圧縮ＶＯＬ５５００に移動する処理を行う。そしてデータを圧縮ＶＯＬ５５００に移動する（対応付ける）際には、ストライプグループの先頭（図１６の例では、データ０（Ｄ）あるいは４（Ｄ）の位置）から順にデータを対応付けていき、ストライプグループの最後尾（図１６の例では、データ３（Ｄ）あるいは６（Ｄ）の位置）まで、データの対応付けが完了した時点で、圧縮ＶＯＬへのデータ移動を終了し、パリティ（３（Ｐ）または７（Ｐ））の生成を行う。そして伸長ＶＯＬに１ストライプグループに相当する量（４８ＫＢ）のデータが書き込まれたら、再び伸長ＶＯＬから圧縮ＶＯＬへのデータ移動を行う。もちろん１ストライプグループに相当する量（４８ＫＢ）のデータが伸長ＶＯＬに書き込まれるたびに、伸長ＶＯＬから圧縮ＶＯＬへのデータ移動を行う必要はなく、複数ストライプグループに相当する量（９６ＫＢ、４８０ＫＢなど）のデータが書き込まれるまで待ってから伸長ＶＯＬから圧縮ＶＯＬへのデータ移動を行うようにしてもよい。
【０１１０】
図１７はボリュームマッピングテーブル６００、図１８はアドレスマッピングテーブル６５０の内容を示している。本発明の実施例では、伸長ＶＯＬと圧縮ＶＯＬは１：１の関係にあり、１つの伸長ＶＯＬに書き込まれたデータの移動先は、あらかじめ定められた１つの圧縮ＶＯＬにのみに限定されている。、ボリュームマッピングテーブル６００は、ＶＶＯＬ＃６０１で特定される伸長ＶＯＬの領域は、ＬＤＥＶ＃６０２で特定される圧縮ＶＯＬの領域に対応付けられることを表している。ボリュームマッピングテーブル６００の内容は、ストレージ装置１の管理者が管理装置４を用いて、伸長ＶＯＬの識別番号（ＶＶＯＬ＃）に対応付けられる圧縮ＶＯＬの識別番号（ＬＤＥＶ＃）を指定することで、ストレージ装置１によってボリュームマッピングテーブル６００のＶＶＯＬ＃６０１、ＬＤＥＶ＃６０２の欄に指定された識別番号が格納される。これによって、伸長ＶＯＬと圧縮ＶＯＬの対応関係が設定される。またボリュームマッピングテーブル６００内の最終書き込み位置６０３の欄は、伸長ＶＯＬから圧縮ＶＯＬにデータが移動（対応づけ）された時、最後に移動されたデータの圧縮ＶＯＬ上の位置（圧縮ＶＯＬ上のＬＢＡ）を格納するための欄である。ストレージ装置１は、伸長ＶＯＬから圧縮ＶＯＬへデータを移動するときに、最終書き込み位置６０３の欄に格納されている圧縮ＶＯＬ上のＬＢＡの次のＬＢＡからデータを格納する（つまりデータの追記書きを実現する）ために、この情報を保持している。
【０１１１】
図１８のアドレスマッピングテーブル６５０は、ＶＶＯＬ＃６５１、ＬＢＡ６５２で特定される伸長ＶＯＬ上の領域が、ＬＤＥＶ＃６５３、ＬＢＡ６５４で特定される圧縮ＶＯＬ上の領域（セクタ）に対応付けられるものであることを管理するテーブルである。このテーブルは、ストレージコントローラ１０が伸長ＶＯＬ上に書き込まれたデータを圧縮ＶＯＬに対応付ける際に更新する。アドレスマッピングテーブル６５０の各行（エントリ）は、伸長ＶＯＬの８セクタ（１セクタは、ホスト計算機３から伸長ＶＯＬにアクセスする際の、記憶領域の最小アクセス単位で、通常５１２バイト）分の領域が圧縮ＶＯＬのどのセクタに対応付けるかを表している。また、アドレスマッピングテーブル６５０の各行（エントリ）に対応付けられる圧縮ＶＯＬのディスク領域の数（セクタ数）は、データの圧縮状態によって異なるが、最小で１セクタ、最大で８セクタの領域が対応付けられる。
【０１１２】
アドレスマッピングテーブル６５０を維持管理することにより、ストレージコントローラ１０はホスト計算機３から伸長ＶＯＬに対するリード要求を受け付けた場合、アドレスマッピングテーブル６５０を参照して、リード要求で指定された伸長ＶＯＬ上の領域（アドレス）を圧縮ＶＯＬ上のアドレスへと変換し、圧縮ＶＯＬを構成する最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）から、リード要求で指定された伸長ＶＯＬ上のアクセス対象データを読み出し、キャッシュメモリ２６で伸長し、伸長したデータをホスト計算機３に返却することで、リード処理を実現できる。この処理の詳細は後述する。
【０１１３】
なお、伸長ＶＯＬと圧縮ＶＯＬは、必ずしも同一サイズでなくてもよい。ストレージ装置１では、データは圧縮された状態で圧縮ＶＯＬに格納されるため、圧縮ＶＯＬのサイズを伸長ＶＯＬよりも小さいサイズとして定義しても、本発明は実施可能である。
【０１１４】
続いてキャッシュメモリ２６の管理方法について説明する。図１９は、本発明の実施例におけるボリューム、スロット、キャッシュセグメントの関係を示す概念図である。なお、先に述べたとおり、本発明のストレージ装置１では、伸長ＶＯＬと圧縮ＶＯＬの２種類のボリュームを管理するが、伸長ＶＯＬと圧縮ＶＯＬはいずれもよく似たデータ構造を用いて管理される。そのため以下では、まず伸長ＶＯＬのデータをキャッシュメモリ２６にキャッシュする場合に用いられるキャッシュ管理データのデータ構造について中心に説明する。
【０１１５】
本発明の実施例では、ボリュームへの最小アクセス単位はセクタ（たとえば５１２バイト）であり、ボリュームの各セクタには、論理ブロックアドレス（ＬＢＡ。あるいは本明細書では、論理アドレスと呼ぶこともある）が付与されている（図１９の要素２０１０はＬＢＡを表している）。また、本発明の実施例におけるストレージ装置１では、ボリューム上の記憶領域へのアクセス時等に排他制御を行うが、ストレージ装置１では、スロット２１００という領域ごとに排他制御を行う。スロット２１００のサイズは、本発明の実施例では、１６ＫＢ（つまり３２セクタ）としているが、その他のサイズを採用しても良い。ボリューム内の各スロット２１００には先頭から一意な識別番号が付与されており、それをスロットＩＤと呼ぶ。ボリューム内の先頭のスロット２１００のスロットＩＤを０番として、以降のスロットには順に、１番、２番、…のスロットＩＤが付与されている。なお、図１９において、要素２１１０がスロットＩＤであり、論理ブロックアドレス２０１０とスロットＩＤ２１１０との関係は図１９に示されたとおりである。例えばホスト計算機３から受信したＩ／Ｏコマンドで指定されている論理ブロックアドレスをスロットＩＤに変換する時には、指定された論理ブロックアドレスを３２（１スロットを構成するセクタ数）で除算して得られた値がスロットＩＤになる。またこの除算を行った時に剰余が０の場合には、Ｉ／Ｏコマンドで指定されている論理ブロックアドレスは、（スロットＩＤで特定される）スロットの先頭に位置することが分かり、剰余が０でない値（仮に、この値をＲとする）の場合、この剰余Ｒは、論理ブロックアドレスで特定されるブロックが、（スロットＩＤで特定される）スロットの先頭ブロックから（Ｒ＋１）番目の位置に存在するブロックであることを表す情報となる（以下、この情報Ｒのことを、スロット内相対アドレスと呼ぶ）。
【０１１６】
またボリューム上のデータをキャッシュメモリ２６に格納する場合、ストレージコントローラ１０のプロセッサ２１はキャッシュメモリ２６上の未使用記憶領域の中から所定サイズの領域をキャッシュ領域として確保するが、キャッシュセグメント（またはセグメントと呼ぶ）という領域単位でキャッシュ領域を確保する（図１９中の要素２２０１、２２０２、２２０３、２２０４がキャッシュセグメントである。以下、キャッシュセグメント２２０１、２２０２、２２０３、２２０４を総称する場合、「キャッシュセグメント２２００」と表記する）。本発明の実施例においては、伸長ＶＯＬに対して書き込まれたデータをキャッシュメモリ２６上で管理する際に用いられるキャッシュセグメント２２００のサイズは８セクタ、つまり４ＫＢ（ただし非圧縮時のサイズである）で、各スロットに対して４つのキャッシュセグメント２２０１、２２０２、２２０３、２２０４が対応付けられる。図１９は、キャッシュメモリ２６上の領域（キャッシュセグメント２２００）がスロット２１００に対応付けられる概念を表している。ストレージ装置１がこの対応付けを管理する方法の詳細は後述するが、ストレージ装置１は、スロットを管理する情報としてスロット制御テーブル１１０（詳細は後述。なおスロット制御テーブル１１０は、スロット２１００ごとに１つ存在する）を有しており、スロット制御テーブル１１０内に、当該スロットに対応付けられているキャッシュセグメント２２００の情報（正確には、キャッシュセグメント２２００を管理するための情報へのポインタ）が格納されている。ストレージ装置１は、このスロット制御テーブル１１０を作成、管理することによって、スロット２１００とキャッシュセグメント２２００の対応付けを管理する。なお、本発明の実施例においてキャッシュセグメント２２００のサイズを４ＫＢにしているのは一例であって、４ＫＢ以外のサイズにすることも可能である。ただし本発明の実施例におけるキャッシュメモリ２６では、圧縮機能により４ＫＢ単位で非圧縮データを圧縮するため、キャッシュセグメント２２００のサイズ（非圧縮時）を４ＫＢとすると、管理が複雑化しないという利点があるため、４ＫＢのキャッシュセグメントサイズを採用している。また１つのスロット２１００に対応付けられるキャッシュセグメント２２００の数を、４つ以外の値にすることも可能である。
【０１１７】
ホスト計算機３がボリューム５０００上の領域にアクセス（リードまたはライト等）する際の、キャッシュ領域の管理に関連する処理の概要は以下の通りである。ホスト計算機３はストレージ装置１に対し、ＬＵＮとＬＢＡ（図１９中の要素２０１０に相当）を指定したＩ／Ｏコマンドを発行する。ストレージ装置１は、受信したＩ／Ｏコマンドに含まれるＬＢＡを、スロットＩＤ２１１０とスロット内相対アドレスの組に変換し、当該変換で得られたスロットＩＤ２１１０で特定されるスロット制御テーブル１１０を参照する。そしてスロット制御テーブル１１０の情報に基づき、Ｉ／Ｏコマンドで指定されたボリューム上領域（ＬＢＡで特定される領域）に対してキャッシュセグメント２２００が確保されているか否かを判定し、キャッシュセグメント２２００が確保されていなければ、新規にキャッシュセグメント２２００を確保する処理を行う。
【０１１８】
続いてキャッシュ管理データ構造についての説明を行う。図２０は、ストレージ装置１で管理する、キャッシュ管理データ構造の概念図である。
【０１１９】
キャッシュ管理データ構造は、キャッシュディレクトリ１００（図２１で詳述）と、フリーキュー２００と、ダーティキューおよびクリーンキュー（図２２で詳述）とを含む。各キャッシュセグメントは、セグメント制御テーブル１２０（ＳＧＣＴ：Ｓｅｇｍｅｎｔ  Ｃｏｎｔｒｏｌ  Ｔａｂｌｅ）で管理される。ＳＧＣＴ１２０は、キャッシュメモリ２６内のＬＢＡ０空間上の全てのキャッシュセグメント（非圧縮時４ＫＢの領域）のそれぞれに対して１つ存在する。
【０１２０】
キャッシュディレクトリ１００は、ボリューム上の論理ブロックアドレス（ＬＢＡ）と、当該論理ブロックアドレス上のデータがキャッシュされている、キャッシュメモリ上のアドレス（ＬＢＡ０空間上アドレス）との対応関係を管理するデータ構造で、１つの伸長ＶＯＬに対して１つのキャッシュディレクトリ１００が存在する。キャッシュディレクトリ１００は、例えば、キャッシュ対象データが格納されているボリューム上のＬＢＡ（又はスロットＩＤのような、ＬＢＡから導かれる情報）をキーとするハッシュテーブルであり、ＳＧＣＴ１２０を示すためのポインタをエントリとして持っている。ＳＧＣＴ１２０は、そのＳＧＣＴ１２０に対応するキャッシュセグメント３２５へのポインタ（キャッシュメモリ１２６上のアドレス［ＬＢＡ０空間上アドレス］）を管理している。したがって、ボリューム上のＬＢＡを用いてキャッシュディレクトリ１００内の情報を探索することで、当該論理ブロックアドレスに対応するデータがキャッシュされているキャッシュセグメントを特定することができる。なお、ＳＧＣＴ１２０の詳細な構成については、後述する。
【０１２１】
フリーキュー２００は、キャッシュメモリ２６のフリーセグメント、すなわちいずれのデータも格納していないキャッシュセグメント３２５を管理する制御情報である。本発明の実施例では、フリーキュー２００はキャッシュメモリ２６のフリーセグメントに対応するＳＧＣＴ１２０をエントリに持つ双方向のリンクリストとして構成されるが、それには限定されない。
【０１２２】
ＳＧＣＴ１２０は、そのＳＧＣＴ１２０に対応するキャッシュセグメントの状態および種類によって、キャッシュディレクトリ１００、フリーキュー２００のいずれかに接続された状態をとる。未使用のキャッシュセグメント３２５に対応するＳＧＣＴ１２０はフリーキュー２００に接続され、当該キャッシュセグメント３２５がデータ格納用に割り当てられると、キャッシュディレクトリ１００に接続される。
【０１２３】
図２１は、キャッシュディレクトリ、ＳＬＣＴ、ＳＧＣＴの関係を示す図である。
【０１２４】
キャッシュディレクトリ１００は、複数のディレクトリエントリポインタ１００ａの集合からなる。各ディレクトリエントリポインタ１００ａは、スロットＩＤに対応するスロット制御テーブル１１０（ＳＬＣＴ：Ｓｌｏｔ  Ｃｏｎｔｒｏｌ  Ｔａｂｌｅ）を指し示すポインタ（アドレス情報）を格納する。先に述べた通り、キャッシュディレクトリ１００はたとえばスロットＩＤをキーとするハッシュテーブルであり、たとえばあるスロットＩＤのハッシュ値を計算した結果が３であるスロットのＳＬＣＴ１１０は、キャッシュディレクトリ１００の３番目のディレクトリエントリポインタ１００ａで直接的または間接的に指し示される。
【０１２５】
ＳＬＣＴ１１０は、ディレクトリエントリポインタ１１０ａと、前方ポインタ１１０ｂと、後方ポインタ１１０ｃと、スロットＩＤ１１０ｄと、スロットステータス１１０ｅと、ダーティ量１１０ｆと、ＳＧＣＴポインタ１１０ｇとを含むデータ構造である。ディレクトリエントリポインタ１１０ａは、ハッシュテーブルの次のエントリに対応するＳＬＣＴ１１０を指すポインタである。前方ポインタ１１０ｂは、ＳＬＣＴ１１０がクリーンキュー又はダーティキューに接続されている場合に用いられる情報で、クリーンキュー又はダーティキュー内における前の順番のＳＬＣＴ１１０を示すポインタである。後方ポインタ１１０ｃは、ＳＬＣＴ１１０がクリーンキュー又はダーティキューに接続されている場合に用いられる情報で、クリーンキュー又はダーティキューにおける後の順番のＳＬＣＴ１１０を示すポインタである。スロットＩＤ１１０ｄは、ＳＬＣＴ１１０に対応するスロットの識別情報（スロットＩＤ）である。スロットステータス１１０ｅは、スロットの状態を示す情報である。スロットの状態としては、例えば、当該スロットがロックされていることを示す「ロック中」等がある。ダーティ量１１０ｆは、当該スロットに含まれるキャッシュセグメント内に格納されているデータのうち、最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）に未反映のデータ（ダーティデータ）の量が格納される。ＳＧＣＴポインタ１１０ｇは、当該スロットに含まれるキャッシュセグメントに対応するＳＧＣＴ１２０を指すポインタである。当該スロットにキャッシュセグメントが割り当てられていないときは、ＳＧＣＴポインタ１１０ｇは、ポインタ（アドレス）が無効であることを表す値（例えばＮＵＬＬ）となっている。またスロットに含まれるキャッシュセグメントが複数ある場合には、各ＳＧＣＴ１２０はリンクリストとして管理され、ＳＧＣＴポインタ１１０ｇは、リンクリストにおける先頭のキャッシュセグメントに対応するＳＧＣＴ１２０を指すポインタである。
【０１２６】
ＳＧＣＴ１２０は、ＳＧＣＴポインタ１２０ａと、セグメントＩＤ１２０ｂと、セグメントアドレス１２０ｃと、ステージングビットマップ１２０ｄと、ダーティビットマップ１２０ｅと、ダーティ量１２０ｆとを含む。
【０１２７】
ＳＧＣＴポインタ１２０ａは、同じスロットに含まれる次のキャッシュセグメントに対応するＳＧＣＴ１２０を指すポインタである。セグメントＩＤ１２０ｂは、キャッシュセグメントの識別情報で、スロット内の何番目に位置づけられるキャッシュセグメントであるかを表す情報である。本実施例では、１スロットに最大で４つのキャッシュセグメントが割り当てられるので、各キャッシュセグメントのセグメントＩＤ１２０ｂには、０、１、２、３のいずれかの値が格納される（スロットの先頭に位置するキャッシュセグメントのセグメントＩＤ１２０ｂは０となり、以下順に１、２、３のセグメントＩＤ１２０ｂが付与される。たとえば図１９におけるキャッシュセグメント２２０１〜２２０４を例にとると、スロット２１００の先頭に対応付けられているキャッシュセグメント２２０１のセグメントＩＤ１２０ｂは０で、以下キャッシュセグメント２２０２、２２０３、２２０４のセグメントＩＤ１２０ｂはそれぞれ、１、２、３となる）。
【０１２８】
セグメントアドレス１２０ｃは、当該ＳＧＣＴ１２０に対応付けられているキャッシュセグメントのアドレス、つまりキャッシュメモリ２６のＬＢＡ０空間上のアドレスである。説明が前後するが、本発明の実施例におけるストレージコントローラ１０（のプロセッサ２１）は、伸長ＶＯＬ５０００に対して書き込まれたデータが格納されるキャッシュ領域（キャッシュセグメント）を管理するために、各キャッシュセグメントのアドレスにＬＢＡ０空間上のアドレスを用いる。つまり各キャッシュセグメントがＬＢＡ０空間に存在するものとして管理する。これにより、ストレージコントローラ１０（のプロセッサ２１）は、キャッシュメモリ２６上に圧縮状態で格納されたデータのサイズを考慮する必要がなくなり、あたかもキャッシュメモリ２６上に非圧縮状態のデータがキャッシュメモリ２６に格納されているものとして、キャッシュメモリ２６上のデータを管理することができる。また、圧縮ＶＯＬ５５００上のデータをキャッシュしているキャッシュ領域（キャッシュセグメント）の管理には、ＬＢＡ１空間アドレスを用いる。
【０１２９】
ステージングビットマップ１２０ｄは、キャッシュセグメントの中でクリーンデータ、つまり最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）のデータと一致しているデータがキャッシュされている領域を示すビットマップである。クリーンデータ（最終記憶媒体内格納データと同じデータ）がキャッシュされている領域に対応するステージングビットマップ１２０ｄのビットはＯＮ（１）に設定され、クリーンデータがキャッシュされていない領域に対応するビットはＯＦＦ（０）に設定される。ダーティビットマップ１２０ｅは、キャッシュセグメントの中でダーティデータがキャッシュされている領域を示すビットマップである。ダーティビットマップ１２０ｅは、ステージングビットマップ１２０ｄと同様、各ビットがキャッシュセグメント内各領域（セクタ）に対応し、ダーティデータがキャッシュされている領域に対応するビットはＯＮ（１）に設定され、ダーティデータがキャッシュされていない領域に対応するビットはＯＦＦ（０）に設定される。本発明の実施例では、ステージングビットマップ１２０ｄ、ダーティビットマップ１２０ｅはいずれも１ビットとする。つまり１つのキャッシュセグメント内の各セクタ（８セクタ）はいずれもダーティあるいはクリーンの状態にあるとして管理するが、ステージングビットマップ１２０ｄ、ダーティビットマップ１２０ｅのビット数を１セグメント内セクタ数と等しくする（８ビットにする）構成をとっても良い。
【０１３０】
ダーティ量１２０ｆは、当該ＳＧＣＴ１２０に対応付けられているキャッシュセグメント内に格納されているデータのうち、最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）に未反映のデータ（ダーティデータ）の量が格納される。なお、上で述べたキャッシュＳＬＣＴ、ＳＧＣＴの例では、圧縮後の（ダーティ）データ量の情報をＳＬＣＴ１１０とＳＧＣＴ１２０の両方で管理しており、ＳＬＣＴ１１０には当該ＳＬＣＴ１１０に接続されるＳＧＣＴ１２０のダーティ量（１２０ｆ）の合計が格納される構造である。ただし各ＳＧＣＴ１２０のみに圧縮後のダーティデータ量の情報を格納するようにしてもよい。
【０１３１】
図２２は、ダーティキューまたはクリーンキューのデータ構造を示す図である。
【０１３２】
各ＳＬＣＴ１１０は先に述べたように、キャッシュディレクトリ１００のディレクトリエントリポインタ１００ａに接続されるとともに、ＳＬＣＴ１１０に対応するスロットの状態によっては、ダーティキューまたはクリーンキューにも接続され得る。ダーティキューは、ダーティデータを含むスロットに対応するＳＬＣＴ１１０を接続するキューである。クリーンキューは、クリーンデータのみを含むスロットに対応するＳＬＣＴ１１０を接続するキューである。ダーティキューは、伸長ＶＯＬ上のデータ（キャッシュ上データ）を圧縮ＶＯＬに移動する、あるいは圧縮ＶＯＬ上のダーティデータをデステージ（最終記憶媒体への書き込み）する時に、ダーティデータの検索を行うために用いられる。クリーンキューは、キャッシュセグメントを確保する際に、未使用（フリーキュー）に接続されたキャッシュセグメント（ＳＧＣＴ）が存在しない場合に、クリーンデータのみを格納しているキャッシュセグメントを代わりに用いる（キャッシュリプレース）が、そのときのキャッシュ検索を行うために用いられる。
【０１３３】
本実施例では、キャッシュリプレースおよびデステージのスケジューリングに用いるアルゴリズムをＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）として説明するが、その他の構造を採用することも可能である。なお、ダーティキューおよびクリーンキューは、接続するＳＬＣＴ１１０が違うだけで、キューの基本的な構成は同様であるので、ここでは、ダーティキューを例に挙げて説明する。ダーティキューは、双方向のリンクリストとして構成されている。すなわち、ダーティキューは、ＭＲＵ（Ｍｏｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）ターミナル１５０の前方ポインタに、最近使用したダーティデータを含むスロット（最終使用時刻の新しいスロット）に対応するＳＬＣＴ１１０を接続し、以降、ＳＬＣＴ１１０の前方ポインタ１１０ｂに、次の順番のスロット（次に最近使用したダーティデータを含むスロット）のＳＬＣＴ１１０を順次接続し、最後の順番のＳＣＬＴ１１０の前方ポインタ１１０ｂにＬＲＵターミナル１６０を接続する一方、ＬＲＵターミナル１６０の後方ポインタに最後の順番のＳＣＬＴ１１０を接続し、以降、後ろの順番のＳＣＬＴ１１０の後方ポインタ１１０ｃに対して、その前の順番のスロットのＳＬＣＴ１１０を順次接続し、最初の順番のＳＬＣＴ１１０をＭＲＵターミナル１５０に接続する。ダーティキューでは、ＭＲＵターミナル１５０側から、最終使用時刻の新しい順にＳＬＣＴ１１０が並ぶこととなる。なお、ダーティキューもキャッシュディレクトリ１００と同様、１つの伸長ＶＯＬに対してそれぞれ１つのダーティキューが存在する。クリーンキューは、ストレージコントローラ１０内で１つ存在する（より正確には、伸長ＶＯＬ用の（言い換えればＬＢＡ０空間のキャッシュメモリ管理用の）クリーンキューが１つ、そして圧縮ＶＯＬ用の（言い換えればＬＢＡ１空間のキャッシュメモリ管理用の）クリーンキューが１つ存在する）。
【０１３４】
続いて図２３を用いてフリーキュー２００のデータ構造を説明する。フリーキュー２００は、キャッシュメモリ２６上の空き（未使用）キャッシュセグメント３２５を管理するためのキューであり、空きキャッシュセグメントのＳＧＣＴ１２０をポインタで接続したリンクリストである。フリーキューは、ストレージコントローラ１０内で１つ存在する。フリーキュー２００のフリーキューポインタ２０１は、キューの先頭のＳＧＣＴ１２０を指す。ＳＧＣＴ１２０のＳＧＣＴポインタ１２０ａは、次の空きキャッシュセグメントのＳＧＣＴ１２０を指す。
【０１３５】
以上が、伸長ＶＯＬのデータをキャッシュメモリ２６上で管理するためのキャッシュ管理データの内容であるが、圧縮ＶＯＬのデータをキャッシュメモリ２６上で管理するためのキャッシュ管理データ構造も、同様である。ただし、本発明の実施例では、圧縮ＶＯＬのデータをキャッシュメモリ２６上で管理する際に用いるキャッシュ領域（キャッシュセグメント）のサイズを、伸長ＶＯＬにおけるサイズ（４ＫＢ）とは異なるサイズを用いることとしているため、キャッシュ管理データ構造内に格納される情報の内容が若干異なる。以下では、主な相違点のみ説明する。
【０１３６】
圧縮ＶＯＬも伸長ＶＯＬと同様、スロットごとに排他制御が行われ、またスロットに１以上のキャッシュセグメントが対応付けられる。ただし圧縮ＶＯＬのキャッシュデータを管理する際に用いられるキャッシュセグメントのサイズは、１セクタ（５１２バイト。またこれは圧縮時のサイズである）で、またスロットサイズは１６ＫＢである。そのため、１スロットに対応付けられるキャッシュセグメント数は３２個となる点が、伸長ＶＯＬの場合と異なる。もちろん、スロットサイズを１６ＫＢ以外のサイズにする、セグメントサイズを１セクタ以外のサイズにしても、本発明は有効である。
【０１３７】
また、図２０〜図２３を用いて、伸長ＶＯＬのキャッシュデータを管理するためのキャッシュ管理データ構造（キャッシュディレクトリ、ＳＬＣＴ、ＳＧＣＴ、フリーキュー、ダーティキュー、クリーンキュー）について説明したが、圧縮ＶＯＬのキャッシュデータを管理するためのキャッシュ管理データ構造は、基本的には図２０〜２３を用いて説明したものと同じものが用いられる。異なる点として、以下の点が挙げられる。まず圧縮ＶＯＬのキャッシュ管理では、１スロットに３２個のセグメントが対応付けられるため、１つのＳＬＣＴに接続されるＳＧＣＴの数が最大３２個になる。そしてＳＧＣＴ内のセグメントＩＤ１２０ｂには０〜３１までのいずれかの値が格納される。さらに、圧縮ＶＯＬのキャッシュ管理では、ＬＢＡ１空間のアドレスを用いてキャッシュセグメントの管理を行う。そのため、ＳＧＣＴ１２０内のセグメントアドレス１２０ｃには、ＬＢＡ１空間のアドレスが格納される。また、伸長ＶＯＬのキャッシュ管理では、ダーティキューは１つの伸長ＶＯＬに対して１つのダーティキューが存在したが、圧縮ＶＯＬのキャッシュ管理では、１つの最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）に対して、１つのダーティキューが定義される。これはダーティデータのデステージ処理は、ＳＳＤ１１またはＨＤＤ１２単位で行われるためである。
【０１３８】
いずれにしても、伸長ＶＯＬのキャッシュデータ管理構造と圧縮ＶＯＬのキャッシュデータ管理構造は、ＳＧＣＴ１２０に格納される情報の内容、ダーティキューの数がやや異なるだけで、圧縮ＶＯＬのキャッシュデータを管理するためのデータ構造は、図２０〜２３で説明したものと同じものが用いられる。
【０１３９】
また、伸長ＶＯＬと圧縮ＶＯＬとで異なる点として、スロットに格納されるデータの内容・種類が異なることが挙げられる。伸長ＶＯＬの各スロットには、ホスト計算機３からのライトデータのみが格納されるが、圧縮ＶＯＬのスロットには、圧縮データが格納されることに加え、一部のスロットには、複数のスロット（圧縮データが格納されたスロット）からＲＡＩＤ技術によって生成されたパリティが格納される。
【０１４０】
続いて、ストレージ装置１で行われるデータライト処理について、図２４、２５、２６を用いて説明する。図２４では、ホスト計算機３から伸長ＶＯＬ５０００に対するライト要求とライトデータを受信し、受信したライトデータをキャッシュメモリ２６に格納する処理を説明する。なお、図２４のライト処理では、ホストから指定されるライトアドレス（ＬＢＡ）が４ＫＢ境界と一致し、またライトデータサイズが４ＫＢの場合について説明する。
【０１４１】
Ｓ１では、ストレージ装置１がホストインタフェース２４を介してホスト計算機３からライト要求を受け付ける。ライト要求には、ストレージ装置１のポートを特定する情報（図１３のポート＃５０１を導出できる情報）、伸長ＶＯＬのＬＵＮ、伸長ＶＯＬのＬＢＡが含まれている。ストレージコントローラ１０のプロセッサ２１は、ＤＲＡＭ２５上にライトデータを一時的に格納するバッファ領域を確保し、ライトデータをホスト計算機３から受信してバッファ領域に格納する（Ｓ１）。
【０１４２】
Ｓ２では、プロセッサ２１はＳ１で受信したライト要求に含まれる、ポートを特定する情報とＬＵＮと伸長ＶＯＬ管理テーブル５００とから、伸長ＶＯＬのＶＶＯＬ＃（図１３のＶＶＯＬ＃５０３に相当する情報）を特定する。また、ＬＢＡをスロットＩＤに変換する。続いて特定されたＶＶＯＬ＃から、今回ライト対象の伸長ＶＯＬに対応づけられたキャッシュディレクトリ１００を選択し、今回アクセス対象のＬＢＡが属するスロットのロックを行う（キャッシュディレクトリ１００をたどって、今回アクセス対象のＬＢＡが属するスロットに対応するＳＬＣＴ１１０を検索し、検索されたＳＬＣＴ１１０のスロットステータス１１０ｅに「ロック中」を示す情報を格納する）。
【０１４３】
Ｓ３では、プロセッサ２１は、（ライト要求で指定された）伸長ＶＯＬのＬＢＡに対応するキャッシュセグメントが割り当て済みであるか判定する。具体的には、Ｓ２で行われた変換により得られたスロットＩＤ１１０ｄを有するＳＬＣＴ１１０内のＳＧＣＴポインタ１１０ｆを参照することで、判定を行う。ＳＧＣＴポインタ１１０ｆが無効（たとえばＮＵＬＬ）値である場合には、キャッシュセグメントが未割り当てであることが判明する。ＳＧＣＴポインタ１１０ｆに有効な値が含まれている場合、少なくともキャッシュセグメントが１つ割り当てられていることが判明するので、ＳＧＣＴポインタ１１０ｆをたどって、スロット内相対アドレスで特定されるスロット内の位置にキャッシュセグメントが割り当てられているかを確認する。具体的には、「スロット内相対アドレス÷８」で得られた結果（整数値）と同一のセグメントＩＤ１２０ｂを有するＳＧＣＴ１２０があるかを確認することで、キャッシュセグメントが割り当てられているかを確認することができる（スロット内相対アドレス÷８の計算を行うことで、０〜３のいずれかの整数値が得られるので、スロット内相対アドレスが、０〜３のいずれのセグメントＩＤが付与されたキャッシュセグメントに対応するアドレスであるかを知ることができる）。この結果、キャッシュセグメントが割り当て済みであれば（ステップＳ３：ＹＥＳ）、プロセッサ２１は、ステップＳ５へ処理を進める。一方、キャッシュセグメントが未割り当てであれば（ステップＳ３：ＮＯ）、セグメント割り当て処理を実行し（ステップＳ４）、ステップＳ５へ処理を進める。ステップＳ４のセグメント割り当て処理では、フリーキュー２００の先頭に繋がっているＳＧＣＴ１２０を取得することで、未使用のキャッシュセグメントを割り当てる。また、未使用のキャッシュセグメントがなかった場合、つまりフリーキュー２００に繋がっているＳＧＣＴ１２０が存在しなかった場合には、クリーンキューに繋がっているＳＬＣＴ１１０に接続されているＳＧＣＴ１２０を取得する。
【０１４４】
Ｓ５、Ｓ６では、バッファ領域から、割り当てられているキャッシュセグメントへのデータ転送を行う。プロセッサ２１は、キャッシュセグメントのアドレス（割り当てられているセグメントに対応するＳＧＣＴ１２０のセグメントアドレス１２０ｃに格納されているＬＢＡ０空間のアドレス）を送信先アドレスとして取得する（Ｓ５）。そしてバッファ領域のアドレスを送信元アドレス、Ｓ５で取得したアドレスを送信先アドレスとして指定したデータ転送（ライト）コマンドを作成し、キャッシュメモリ２６にライトコマンドを送信することでデータ転送を指示する。キャッシュメモリ２６にライトコマンドを送信すると、キャッシュメモリ２６から処理完了の通知が来るのを待つ。
【０１４５】
キャッシュメモリ２６から処理完了の通知を受信すると、ライト対象のキャッシュセグメントがダーティ状態になったことを記録するため、ライト対象のキャッシュセグメントに対応するＳＧＣＴ１２０のダーティビットマップ１２０ｅをＯＮし、またライト対象のキャッシュセグメントの属するスロットのＳＬＣＴ１１０をダーティキューに接続する（Ｓ７）。また、キャッシュメモリ２６から受信するライトコマンド処理完了の通知には、キャッシュメモリ２６に書き込まれたデータの圧縮後のサイズ情報が含まれているので、ＳＧＣＴ１２０のダーティ量１２０ｆに、受信したサイズ情報を格納し、またＳＬＣＴ１１０のダーティ量１１０ｆに、キャッシュメモリ２６から受信した当該サイズ情報を加算する。なお、ホスト計算機３からライト要求のあったライトデータ量が４ＫＢ以外、たとえば４ＫＢを超えるサイズであった場合、キャッシュメモリ２６から受信するライトコマンド処理完了の通知だけでは、キャッシュセグメントごとのデータ量（圧縮後）の情報が得られないため、圧縮データサイズ取得コマンド１１１０を発行し、キャッシュセグメントごとの圧縮データ量の情報を取得して、ＳＧＣＴ１２０のダーティ量１２０ｆ、ＳＬＣＴ１１０のダーティ量１１０ｆに圧縮データ量の情報を反映する。その後キャッシュスロットのロックを解除して（Ｓ８）、ホスト計算機３にライト処理が完了したことを通知し、処理を終了する。
【０１４６】
Ｓ８の終了後、Ｓ９の圧縮ＶＯＬへのデータ移し替え（移動）処理が行われることもあるが、この処理は必須ではなく、キャッシュメモリ２６の状態が所定条件を満たした場合に、圧縮ＶＯＬへのデータ移し替え処理が行われる。これについては次に説明する。
【０１４７】
続いて図２５を用いて圧縮ＶＯＬへのデータ移し替え処理について説明する。データ移し替え処理は、図２４のＳ９に相当する処理、つまりホスト計算機３からのデータライト処理の直後に行われる処理だが、圧縮ＶＯＬへのデータ移し替え処理が行われる契機は、データライト処理の直後には限定されない。たとえば定期的にキャッシュメモリ２６の状態を監視し、キャッシュメモリ２６の状態が所定条件を満たした場合にも実行される。なお、圧縮ＶＯＬへのデータ移し替え処理は、伸長ＶＯＬごとに行う。
【０１４８】
Ｓ２１では、プロセッサ２１は、所定条件を満たしたか判定する。一例では、ある伸長ＶＯＬについて、当該伸長ＶＯＬのキャッシュディレクトリ１００に接続されている各スロットのＳＬＣＴ１１０に含まれるダーティ量１１０ｆ（あるいはＳＧＣＴ１２０のダーティ量１２０ｆ）を調べて、キャッシュメモリ２６上に格納されているダーティデータ量が、ＲＡＩＤパリティを生成するために必要な量を上回ったかを判定する。ここで、ＲＡＩＤパリティを生成するために必要な量とは、先に述べたように、ストライプグループを構成するスロットの集合と同量またはそれより多いデータ量をいう。図１６のＲＡＩＤ構成を例にとると、１つの伸長ＶＯＬ内の３スロット分、つまり１６ＫＢ×３＝４８ＫＢのダーティデータ量がキャッシュメモリ２６上に存在する場合、パリティを生成できると判断される。条件を満たしていた場合（Ｓ２１：ＹＥＳ）、Ｓ２２に進み、条件を満たしていない場合（Ｓ２１：ＮＯ）、Ｓ３１に移動する。
【０１４９】
Ｓ２２では、移し替え処理を行う対象となるスロットの選択と、選択したスロットのロックを行う。スロットの選択にはさまざまな方法が採用可能である。たとえばダーティキューに接続されている、各ＳＬＣＴ１１０のダーティ量１１０ｆを参照し、ダーティ量１１０ｆが多いスロット（ＳＬＣＴ）から順に選択していき、選択したスロット（ＳＬＣＴ）のダーティ量１１０ｆの合計が所定量（４８ＫＢまたは４８ＫＢの倍数）に到達するまでスロット（ＳＬＣＴ）を選択する。あるいはＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムに基づいてスロットを選択しても良い。なお、以降の説明は、Ｓ２２の処理で、ダーティ量（圧縮データ）の合計が１ストライプグループ分（４８ＫＢ）になるようにスロットを選択しているという想定で説明を行うが、本発明はそれに限定されるものではない。同時に、ここで選択したスロットのＳＬＣＴ１１０、及びＳＬＣＴ１１０に接続されているＳＧＣＴ１２０のうち、ダーティビットマップがＯＮになっているＳＧＣＴ１２０の内容を参照することにより、移し替え処理を行う対象のキャッシュセグメントのセグメントアドレス１２０ｃ（つまりキャッシュメモリ２６のＬＢＡ０）を特定する。また、移し替え処理を行う対象のキャッシュセグメントに対応するＳＬＣＴ１１０のスロットＩＤ１１０ｄとＳＧＣＴ１２０のセグメントＩＤ１２０ｂから、移し替え処理を行う対象のキャッシュセグメントの対応する伸長ＶＯＬの領域のＬＢＡを算出する。
【０１５０】
続いてＳ２３では、圧縮ＶＯＬ上のディスク領域割り当てを行う。まずボリュームマッピングテーブル６００を参照し、現在処理対象の伸長ＶＯＬ６０１に対応する圧縮ＶＯＬ６０２及び最終書き込み位置６０３を選択する。そして圧縮ＶＯＬ６０２の最終書き込み位置６０３の次のＬＢＡから１ストライプグループ分の領域を選択する。続いて今回処理対象の伸長ＶＯＬの各領域（Ｓ２２で選択したスロット内のダーティデータの格納されている領域）を圧縮ＶＯＬのどの位置に対応付けるかを決定し、アドレスマッピングテーブル６５０に、決定した内容を格納する。
【０１５１】
Ｓ２４では、Ｓ２３で選択した１ストライプグループ分の領域に対応するスロット、及びこの１ストライプグループに対応するパリティスロットのロックを行い、各スロットに対してセグメントの割り当てを行う。この処理はＳ３と同様である。この処理により、Ｓ２３で選択した１ストライプグループ分のデータスロット及びパリティスロットに対応するキャッシュセグメント（のアドレス。つまりＬＢＡ１）が決定される。
【０１５２】
Ｓ２５では、データの移し替え、つまりＳ２２で選択された伸長ＶＯＬ上のダーティデータのキャッシュメモリ２６上のアドレス（ＬＢＡ０）を、Ｓ２４で決定した圧縮ＶＯＬの１ストライプグループ分の領域に対応するキャッシュメモリ２６上のアドレス（ＬＢＡ１）に対応付ける（マッピングする）。Ｓ２３の処理で、伸長ＶＯＬの各領域のＬＢＡが圧縮ＶＯＬのどのＬＢＡに対応付けられるべきか決定しているので、Ｓ２３の処理結果に基づいて対応付けを行う。プロセッサ２１はキャッシュメモリ２６に対し、ＬＢＡ１マッピングコマンドを発行し、伸長ＶＯＬ上のダーティデータのキャッシュメモリ２６上のアドレス（ＬＢＡ０）を、圧縮ＶＯＬの１ストライプグループ分の領域に対応するキャッシュメモリ２６上のアドレス（ＬＢＡ１）に対応付ける。ＬＢＡ１マッピングコマンドの発行後、プロセッサ２１はキャッシュメモリ２６からの処理完了の応答を待つ。
【０１５３】
キャッシュメモリ２６から処理完了の応答を受信するとＳ２６に進み、Ｓ２４で確保した圧縮ＶＯＬのスロットに対応付けられているキャッシュセグメントをダーティ状態にする。具体的には各キャッシュセグメントに対応するＳＧＣＴ１２０のダーティビット１２０ｅをＯＮにし、ＳＬＣＴ１１０をダーティキューに接続する。なお、圧縮ＶＯＬのダーティキューは最終記憶媒体ごとに存在するため、ＳＬＣＴ１１０をダーティキューに接続する場合、ＳＬＣＴ１１０に対応するスロットがどの最終記憶媒体に対応付けられるものか特定する。たとえば図１６に示すように、圧縮ＶＯＬの各スロットは、圧縮ＶＯＬに対応付けられているＲＡＩＤグループのいずれかの最終記憶媒体の所定位置に固定的に対応付けられており、周知のストレージ装置で行われている、論理ボリュームアドレスと物理ディスク（最終記憶媒体であるＳＳＤ１１またはＨＤＤ１２）のアドレス変換の計算を行うことで、圧縮ＶＯＬの各スロットの対応付けられている最終記憶媒体は容易に特定できる。そしてＳＬＣＴ１１０を、当該特定された最終記憶媒体に対応したダーティキューに接続する。
【０１５４】
続いてＳ２７で、伸長ＶＯＬ側のキャッシュセグメントを破棄する。この処理では、伸長ＶＯＬ側のキャッシュセグメントに対応するＳＧＣＴ１２０のダーティビット１２０ｅをＯＦＦし、ＳＬＣＴ１１０からＳＧＣＴ１２０を切り離す。続いて、ＳＬＣＴ１１０から切り離したＳＧＣＴ１２０のセグメントアドレス１２０ｃを指定したマッピング解除コマンドをキャッシュメモリ２６に発行し、キャッシュメモリ２６内でＬＢＡ０とＰＢＡとの対応付けを解除する。この後ＳＧＣＴ１２０をフリーキュー２０１につなぎかえる。
【０１５５】
Ｓ２８では、圧縮ＶＯＬのパリティ生成を行う。プロセッサ２１はキャッシュメモリ２６に対して、Ｓ２４にてデータスロットに割り当てたキャッシュセグメントのセグメントアドレス（ＬＢＡ１）と、パリティスロットに割り当てたキャッシュセグメントアドレス（ＬＢＡ１）を指定した、フルストライプＰａｒｉｔｙ生成コマンドを発行する。このコマンドを受けたキャッシュメモリ２６は、パリティスロットに割り当てられたキャッシュセグメントにパリティを生成する。キャッシュメモリ２６はパリティ生成が終了するとプロセッサ２１に処理完了を通知する。プロセッサ２１は処理完了の通知を受信すると、パリティスロットのキャッシュセグメントをダーティ状態にする。この処理はＳ２６と同様である。
【０１５６】
Ｓ２９で、圧縮ＶＯＬ、伸長ＶＯＬスロットのロックを解除する。また、ボリュームマッピングテーブル６００の最終書き込み位置６０３を更新する。たとえばＳ２２〜Ｓ２８の処理で１ストライプグループ分のデータが圧縮ＶＯＬに移し替えられたとすると、１ストライプグループを構成するスロット及び当該ストライプグループに対応するパリティスロットのサイズに相当するセクタ数（ＲＡＩＤ構成が３Ｄ＋１Ｐの構成で、１スロットが１６ＫＢであれば、６４ＫＢつまり１２８セクタになる）だけ、最終書き込み位置６０３の情報を加算する。
【０１５７】
Ｓ３１では、全伸長ＶＯＬに対して移し替え処理（Ｓ２１〜Ｓ２９）の処理を行ったか判定し、全伸長ＶＯＬに対して移し替え処理が行われていれば（Ｓ３１：ＹＥＳ）、処理を終了するが、移し替え処理が行われていない伸長ＶＯＬが残っている場合（Ｓ３１：ＹＥＳ）には、Ｓ２１に戻って残りの伸長ＶＯＬに対してＳ２１〜Ｓ２９の処理を行う。
【０１５８】
なお、その他の実施形態として、Ｓ２１の所定条件に、上で挙げた例以外の条件を用いてもよい。たとえばホスト計算機３からのライト要求が、伸長ＶＯＬに対して、所定サイズ以上のデータを連続的に書き込む要求が連続して到来している（つまり、シーケンシャルライト要求が行われている）と判断された場合には、伸長ＶＯＬのスロットの終端に位置するキャッシュセグメントにデータが書き込まれた時点で、圧縮ＶＯＬへのデータ移し替え処理を行う、という条件でもよい。
【０１５９】
また、圧縮ＶＯＬのダーティデータをデステージする処理が必要になるが、これは任意のタイミングで行えばよい。たとえばキャッシュメモリ２６の使用量が所定の閾値を超過したときに実施する、定期的（１０分間に１回など）に実施するなどが考えられる。デステージ処理自体は、従来からあるストレージ装置で行われている処理と同様であるため、図２６を用いて概要のみ説明する。
【０１６０】
最初にＳ３１で、プロセッサ２１は最終記憶媒体ごとに設けられているダーティキューのうち１つのダーティキューを選択する。続いてＳ３２で、プロセッサ２１はＳ３１にて選択したダーティキューにスロット（ＳＬＣＴ１１０）が接続されているか判定する。スロットが接続されていなかった場合にはＳ３７に移動するが、スロットが接続されている場合にはＳ３３に進む。
【０１６１】
Ｓ３３では、プロセッサ２１はダーティキューに接続されているスロットを、今回のデステージ対象スロットとして選択し、当該スロットのロックを行う。ダーティキューに複数のスロットが接続されている場合、スロットの選択方法、選択するスロットの個数の決定には、様々な周知の技術が適用できるが、ここでは説明を簡単にするため、ＬＲＵターミナル１６０が指すＳＬＣＴ１１０を１つ選択するものとする。もちろん、ダーティキューに接続されている所定個数（固定値）のスロットを選択する、ＬＲＵターミナル１６０が指すＳＬＣＴ１１０のスロットと隣接する（最終記憶媒体上で）スロットを複数個選択する、あるいはダーティキューに接続されているすべてのスロットを選択する等の方法を採用することもできる。
【０１６２】
Ｓ３４では、プロセッサ２１はデステージ対象スロット、つまりＳ３３で選択したスロット（ＳＬＣＴ１１０）のスロットＩＤ１１０ｄを、最終記憶媒体のアドレスに変換する。このアドレス変換は先に述べたとおり、周知の技術であるので変換方法の説明は省略する。
【０１６３】
Ｓ３５では、プロセッサ２１はデステージ対象スロット（ＳＬＣＴ１１０）に属するキャッシュセグメントに格納されているデータを最終記憶媒体へ書き込む。まず、プロセッサ２１はＤＲＡＭ２５上の領域をバッファ領域として確保し、先に述べたキャッシュメモリ２６のリードコマンドを用いて、キャッシュメモリ２６からバッファ領域へのデータ読み出しを実行する。そしてバッファ領域に読み出されたデータを、Ｓ３４の変換処理で算出した最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）のアドレスに書き込む。また、別の実施形態として、最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）に対して発行するライトコマンド（ＳＣＳＩ  ＷＲＩＴＥコマンド）で、ライト元データのアドレスにキャッシュメモリ２６のＬＢＡ１アドレスを直接指定できるようにすることも可能で、その場合には、一旦ＤＲＡＭ２５上にキャッシュメモリ２６からデータを読み出す必要がなくなる。
【０１６４】
Ｓ３６では、デステージ対象スロットをクリーンキューに接続し、またスロットのロックを解除する。同時に、デステージ対象スロット（ＳＬＣＴ１１０）のダーティ量１１０ｆを０にし、また当該ＳＬＣＴ１１０に接続されている全てのＳＧＣＴ１２０について、ダーティビットマップ１２０ｅをＯＦＦ、ステージングビットマップ１２０ｄをＯＮにし、またダーティ量１２０ｆを０にする。
【０１６５】
その後、未処理のダーティキューがあるか否か判定し（Ｓ３７）、未処理のダーティキューが残っている場合（Ｓ３７：Ｙｅｓ）、Ｓ３１に戻る。すべてのダーティキューについて、Ｓ３１〜Ｓ３６の処理を行った場合には、デステージ処理を終了する。
【０１６６】
以上が、本発明の実施例におけるストレージ装置１が実施するデータライト処理である。なお、この処理の流れからわかる通り、ホスト計算機３から伸長ＶＯＬに対して書きこまれたデータはすべて、圧縮ＶＯＬ上では追記書きされる。そのため、圧縮ＶＯＬに書き込まれた更新前データは、再びホスト計算機３からアクセスされないものであるにもかかわらず、圧縮ＶＯＬに残された状態になる。そして更新前データの格納されている領域には新たなデータを書き込むことができないから、圧縮ＶＯＬの記憶領域を無駄に消費することになる。かかる状態を解消するため、アクセスされないデータを定期的に圧縮ＶＯＬから削除し、アクセスされるデータのみを残す（具体的にはアドレスマッピングテーブル６５０で管理されている伸長ＶＯＬのＬＢＡに対応付けられている圧縮ＶＯＬ上の領域のみを残す）処理、いわゆるガーベッジコレクションを行う必要がある。この処理は、データ書き込み時に追記書き処理を行う記憶媒体、例えばフラッシュメモリなどで採用している処理を利用することで実現できる。
【０１６７】
続いて図２７、２８を用いて、ホスト計算機３からボリューム（伸長ＶＯＬ）に対するリード要求を受け付けた時の処理の流れを説明する。なお、以下ではリード要求により指定されるボリュームのアクセスアドレスの範囲（先頭アドレスと終端アドレス）は、４ＫＢ境界に一致している例について説明する。またリードデータ長は４ＫＢとする。
【０１６８】
Ｓ５１で、ストレージコントローラ１０がリード要求（コマンド）をホスト計算機３から受信する。リード要求には、ストレージ装置１のポートを特定する情報（図１３のポート＃５０１を導出できる情報）、伸長ＶＯＬのＬＵＮ、伸長ＶＯＬのＬＢＡ、リードデータ長が含まれている。
【０１６９】
Ｓ５２では、図２４のＳ２と同様の処理が行われる。Ｓ５１で受信したポートを特定する情報とＬＵＮと、伸長ＶＯＬ管理テーブル５００から、伸長ＶＯＬのＶＶＯＬ＃（図１３のＶＶＯＬ＃５０３に相当する情報）を特定する。また、ＬＢＡをスロットＩＤに変換する。続いて特定されたＶＶＯＬ＃から、今回リード対象の伸長ＶＯＬに対応づけられたキャッシュディレクトリ１００を選択し、今回アクセス対象のＬＢＡが属するスロットのロックを行う。
【０１７０】
Ｓ５３では、プロセッサ２１は、伸長ＶＯＬのＬＢＡに対応するキャッシュセグメントが割り当て済みであるか判定する。この判定は、ライト処理のＳ３と同様の処理である。セグメントが割り当てられていない場合にはＳ５４に進み、Ｓ５４でセグメントの割り当てを行う。Ｓ５４の処理はＳ４と同様の処理である。
【０１７１】
Ｓ５５では、アドレスマッピングテーブル６５０を参照して、伸長ＶＯＬのリード対象ＬＢＡに対応する圧縮ＶＯＬのＬＢＡを特定する。そして特定されたＬＢＡをスロットＩＤに変換し、圧縮ＶＯＬのディレクトリエントリ１００をたどって、圧縮ＶＯＬのＬＢＡに対応するスロットのＳＬＣＴ１１０を検索し、スロットのロックを行う。
【０１７２】
Ｓ５６では、プロセッサ２１は、圧縮ＶＯＬのＬＢＡに対応するキャッシュセグメントが割り当て済みであるか判定し、割り当てられていない場合にはセグメントの割り当てを行う（Ｓ５７）。この処理は、Ｓ５３、Ｓ５４と同様の処理である。キャッシュセグメントが既に割り当てられている場合、Ｓ６１に進む。
【０１７３】
Ｓ５８では、圧縮ＶＯＬのＬＢＡを最終記憶媒体（ＳＳＤ１１またはＨＤＤ１２）のアドレスに変換する。圧縮ＶＯＬの各領域（セクタ）は、所定の規則によって、最終記憶媒体のセクタに対応付けられているので、圧縮ＶＯＬのＬＢＡを用いれば、圧縮ＶＯＬの記憶領域が、どの最終記憶媒体のどの位置に対応付けられているかを算出可能である。この処理は、ＲＡＩＤ技術を用いてデータを格納する周知のストレージ装置が、リード・ライト処理時に行う処理と同様であるので、詳細な説明は省略する。
【０１７４】
Ｓ５９では、プロセッサ２１はＤＲＡＭ２５にリードデータを一時的に格納する領域を確保する。続いて最終記憶媒体（ＳＳＤ１１、ＨＤＤ１２）に対して、Ｓ５８で算出された最終記憶媒体のアドレスを指定したリードコマンドを発行することにより圧縮データを読み出し、ＤＲＡＭ２５へ転送する。
【０１７５】
Ｓ５３でセグメントが割り当て済みと判定された場合には、Ｓ６０にて、圧縮ＶＯＬのＬＢＡに対応するキャッシュセグメントのＳＧＣＴ１２０のセグメントアドレス１２０ｃ（ＬＢＡ０が格納されている）を参照して、ＬＢＡ０を取得する。
【０１７６】
Ｓ５６でセグメントが割り当て済みと判定された場合には、Ｓ６１にて、当該セグメントに対応するＳＧＣＴ１２０のステージングビットマップ１２０ｄとダーティビットマップ１２０ｅを参照し、いずれかのビットがＯＮであるか判断する。いずれかのビットがＯＮであれば（Ｓ６１：Ｙｅｓ）、Ｓ６３に進み、いずれのビットもＯＦＦであれば（Ｓ６１：Ｎｏ）、Ｓ５８に進む。
【０１７７】
Ｓ６２では、Ｓ５９でＤＲＡＭ２５に転送されたデータを、キャッシュメモリ２６に転送するため、プロセッサ２１は、ＤＲＡＭ２５のアドレスを転送元アドレスとして、またキャッシュメモリ２６のセグメントのアドレスを転送先アドレスとして指定したデータ転送コマンドをキャッシュメモリ２６に発行して、キャッシュメモリ２６へのデータ転送を行う。なお、キャッシュメモリ２６上の転送先アドレスの情報は、Ｓ５７で割り当てたキャッシュセグメント（Ｓ５６ですでにセグメントが割り当て済みと判定された場合には、割り当て済みのセグメント）に対応するＳＧＣＴ１２０のセグメントアドレス１２０ｃにＬＢＡ１が格納されているので、このアドレスが転送先アドレスになる。また、Ｓ５９、Ｓ６２の別の実施形態として、最終記憶媒体からのリードデータを、ＤＲＡＭ２５を経由せず直接キャッシュメモリ２６のＬＢＡ１アドレスで指定された領域に格納するようにしてもよい。
【０１７８】
Ｓ６３では、キャッシュメモリ２６に格納された圧縮データを、非圧縮データ（伸長データ）としてホスト計算機３に送信できるようにするため、Ｓ６２でキャッシュメモリ２６上に格納されたデータの領域に対して、ＬＢＡ０空間のアドレスを対応付ける処理を行う。プロセッサ２１はキャッシュメモリ２６に対してＬＢＡ０マッピングコマンドを発行し、キャッシュメモリ２６上の圧縮データの格納されているＬＢＡ１（Ｓ６２で用いたＳＧＣＴ１２０のセグメントアドレス１２０ｃ）を、Ｓ５４で確保したキャッシュセグメントのセグメントアドレス（ＬＢＡ０）に対応付ける。
【０１７９】
Ｓ６４で、プロセッサ２１は、Ｓ６２でＬＢＡ１との対応付けを行ったＬＢＡ０、あるいはＳ６０で取得したＬＢＡ０を読み出し元アドレスとして指定したリードコマンドをキャッシュメモリに発行することにより、キャッシュメモリ２６から伸長データを読み出し、ホスト計算機３に転送する。
【０１８０】
最後にＳ６５において、伸長ＶＯＬと圧縮ＶＯＬのスロットのロックを解除するが、その前に、伸長ＶＯＬのＳＬＣＴ１１０（Ｓ５２で確保したスロットのＳＬＣＴ１１０）と圧縮ＶＯＬのＳＬＣＴ１１０（Ｓ５５で確保したスロットのＳＬＣＴ１１０）がクリーンキューに接続されているか確認し、クリーンキューに接続されていない場合にはクリーンキューに接続する。そして各ＳＬＣＴ１１０に接続されているＳＧＣＴ１２０のステージングビットマップ１２０ｄをＯＮする。その後、各スロットのロック解放（スロットステータス１１０ｅの値を０にする）を行って、リード処理を終了する。
【０１８１】
なお、上ではリード要求により指定されるボリュームのアクセスアドレスの範囲が、４ＫＢ境界に一致している例について説明したが、アクセスアドレスの範囲が４ＫＢ境界と一致していない場合、たとえば４ＫＢ未満のサイズのデータリード要求が来た場合には、最終記憶媒体から４ＫＢの範囲（非圧縮時）のデータを読み出してキャッシュメモリ２６に格納し、そこからホスト計算機３から要求されている範囲のデータだけを選択して、ホスト計算機３に送信すればよい。また、ライト要求により指定されるボリュームのアクセスアドレスの範囲も４ＫＢ境界に一致している例について説明したが、ライト要求のアクセスアドレスの範囲が４ＫＢ境界と一致していない場合、たとえば４ＫＢ未満のサイズのデータライト要求が来た場合には、一旦当該ライトアクセスアドレス範囲を含む４ＫＢの領域（非圧縮状態で）のデータを最終記憶媒体からキャッシュメモリ２６上に読み出し、読み出したキャッシュメモリ２６上データに、ライトデータを上書きすればよい。この場合、キャッシュメモリ２６を構成する記憶媒体がフラッシュメモリの場合には、上書きはできないが、周知のフラッシュメモリで採用されている上書き時の処理、つまり最終記憶媒体から読み出したデータとライトデータとをバッファ４１６でマージし、未書き込みの（フラッシュメモリの）ページに書き込む処理を行うことで、見かけ上、キャッシュメモリ２６上のデータの上書きが実現できるので、ここではこの処理の詳細は説明しない。
【０１８２】
［変形例１］
上で説明した実施例では、圧縮ＶＯＬは１つのＲＡＩＤグループと固定的に対応付けられ、圧縮ＶＯＬのアドレスと、ＲＡＩＤグループを構成する各記憶媒体のアドレスとの関係も固定的なものである構成である場合について説明した。しかしながら、本発明の圧縮ＶＯＬは周知のストレージ装置が提供する様々なボリュームを利用可能である。以下では一例として、米国特許出願公開第２０１３／００３６２５０号明細書や、米国特許出願公開第２０１０／０２０５３９０号明細書等に開示されている、いわゆるシンプロビジョニング（Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ）技術を用いて作成される仮想的なボリュームを、本発明の圧縮ＶＯＬとして用いる場合の例について説明する。
【０１８３】
シンプロビジョニング技術により作成される仮想的なボリューム（以下、この仮想的なボリュームを［ＨＶＯＬ］と呼ぶ）は、初期状態ではＨＶＯＬの各領域に特定の記憶領域が割り当てられていない。ストレージ装置は、ＨＶＯＬ上の位置（ＬＢＡ）を指定したアクセス要求を受け付けると、当該位置に記憶領域が割り当てられているか確認し、割り当てられていない場合、その位置に記憶領域を割り当てる。
【０１８４】
図２９を用いて、本発明の変形例１におけるストレージ装置１で管理する、圧縮ＶＯＬ、論理ボリューム（ＬＤＥＶ）、最終記憶媒体（ＰＤＥＶ）の関係について説明する。本発明の変形例１におけるストレージ装置１では、上で説明した実施例における圧縮ＶＯＬ５５００’として、ＨＶＯＬを用いる。またストレージ装置１は、ＨＶＯＬの他、複数の最終記憶媒体１１（１２）で構成される論理ボリューム（以下、この論理ボリュームを「ＬＤＥＶ」と呼ぶ）も作成する。このＬＤＥＶは、上で説明した実施例における圧縮ＶＯＬ５５００と同様のもので、１つのＲＡＩＤグループから１つのＬＤＥＶが構成される。
【０１８５】
変形例１におけるストレージ装置１では、（図２９では非図示の）伸長ＶＯＬ５０００から圧縮ＶＯＬ５５００’（ＨＶＯＬ）にデータの移動が行われる時、データの移動が行われるＨＶＯＬ上の領域に対して、ＬＤＥＶ上の未使用領域を割り当てる。なお、ストレージ装置１は、ＨＶＯＬ上の記憶空間を複数の固定サイズ領域に分割して管理しており、この固定サイズ領域は「ページ」と呼ばれる。各ページには「ページＩＤ」という一意な識別番号が付されており、ＨＶＯＬの先頭のページのページＩＤがページ０である。そしてそれ以降のページには、順にページ１、ページ２、…の番号が付されている。変形例１におけるストレージ装置１では、１ページのサイズは１ストライプグループのサイズと等しいものとして管理しているが、１ページのサイズは１ストライプグループのサイズに限定されるものではなく、その他のサイズを採用してもよい。たとえば１ページのサイズを、複数ストライプグループのサイズと等しくする、あるいはそれよりも大きくする構成でもよい。
【０１８６】
また、ＨＶＯＬのページに対して割り当てることができるＬＤＥＶ上領域を管理するために、ストレージ装置１ではＬＤＥＶプール９０００という概念を定義している。ストレージ装置１がＨＶＯＬのページに記憶領域を割り当てる際、ＬＤＥＶプール９０００内に存在するＬＤＥＶ上の領域から、１ページ分の記憶領域を選択して割り当てる。
【０１８７】
なお、ホスト計算機３から伸長ＶＯＬへのデータの書き込みが行われ始めて、圧縮ＶＯＬ（ＨＶＯＬ）へとデータが移動されることによって、はじめてＬＤＥＶ上の記憶領域がＨＶＯＬに割り当てられるので、ＬＤＥＶ上のデータを格納する領域の合計容量（パリティを格納する領域を除く容量）は、少なくとも初期状態ではＨＶＯＬ（複数）の合計容量よりも小さくてもよい。つまりＬＤＥＶを構成する最終記憶媒体の合計容量が、全ＨＶＯＬの合計容量よりも小さくてもよい。ＨＶＯＬに割り当てられる、（ＬＤＥＶの）記憶領域が増加して、未使用のＬＤＥＶ上領域が少なくなってきた時点で、最終記憶媒体をストレージ装置１に追加し、追加した最終記憶媒体からＬＤＥＶを定義し、定義したＬＤＥＶをＬＤＥＶプール９０００へと追加する、という作業を行えばよい。そのため、圧縮ＶＯＬに、シンプロビジョニング技術により形成されるＨＶＯＬを用いることにより、最終記憶媒体の容量をさらに節約することが可能になる。
【０１８８】
また、１つのＨＶＯＬで１つＬＤＥＶプールを利用する場合に比較し、複数のＨＶＯＬにてＬＤＥVプールを共有する場合、共有されたＬＤＥＶプールを効率的に利用することが可能となる。より詳細には、圧縮されたデータを格納することから、複数のＨＶＯＬそれぞれで記憶領域の割り当てが必要となるページの数が異なることとなるが、ＬＤＥＶプールを共有することで、例えば圧縮率の高い（記憶領域の割り当てが必要となるページが少ない）ＨＶＯＬがあったとしても、ＬＤＥＶを共有する他のＨＶＯＬに記憶領域を割り当てることができるため、共有されたＬＤＥＶプールを効率的に利用することが可能となる。
【０１８９】
図３０は、ストレージ装置１がＨＶＯＬを管理するために用いる情報である、ＨＶＯＬ管理情報１００００の例を示している。ＨＶＯＬ管理情報１００００の各行（エントリ）は、ＨＶＯＬ＃１０００１、サイズ１０００２から構成される。ＨＶＯＬ＃１０００１はＨＶＯＬの識別番号を表し、サイズ１０００２はＨＶＯＬ＃１０００１で特定されるＨＶＯＬのサイズを表している。
【０１９０】
図３１は、ストレージ装置１が各ＨＶＯＬ上のページに割り当てられている記憶領域の割り当て状態を管理するために用いる情報である、ページマッピングテーブル１００１０の例を示している。ページマッピングテーブル１００００の各行（エントリ）は、ＨＶＯＬ＃１０００１、ページＩＤ（Ｐ−ＩＤ）１０００２、ＬＤＥＶ＃１０００３、スロット＃１０００４の項目を有し、ＨＶＯＬ＃１０００１、ページＩＤ（Ｐ−ＩＤ）１０００２で特定されるＨＶＯＬ上の領域（ページ）に、ＬＤＥＶ＃１０００３、スロット＃１０００４で特定されるＬＤＥＶ上のスロットを先頭スロットとする１ストライプグループ分の領域が割り当てられていることを表している。
【０１９１】
ＨＶＯＬは、ストレージ装置１のユーザ（管理者）によって定義される。ストレージ装置１のユーザ（管理者）が管理端末４を用いて、ＨＶＯＬの作成を指示すると、ストレージ装置１はＨＶＯＬ管理情報１００００に、新規に作成されたＨＶＯＬの識別番号（ＨＶＯＬ＃）とＨＶＯＬのサイズを登録する。そしてページマッピングテーブル１００１０に新規に作成されたＨＶＯＬの各ページの情報を登録するが、最初はＨＶＯＬ＃１０００１、ページＩＤ（Ｐ−ＩＤ）１０００２の情報だけが登録され、ＬＤＥＶ＃１０００３、スロット＃１０００４には無効値（たとえばＮＵＬＬ）が格納される。伸長ＶＯＬからＨＶＯＬ（圧縮ＶＯＬ）のページに対するデータの移し替えが行われる時に、ＬＤＥＶ＃１０００３、スロット＃１０００４の欄に値が格納される。
【０１９２】
また、ＨＶＯＬ上ページに領域を割り当てる際、まだいずれのページにも割り当てられていないＬＤＥＶ上領域（未使用ページと呼ぶ）を割り当てる必要があるため、ストレージ装置１はページフリーリスト１０１００（図３２）という管理情報を有する。ページフリーリスト１０１００の各エントリは、ＬＤＥＶ＃１０１１０、スロット＃１０１２０の項目を有し、ページフリーリスト１０１００のＬＤＥＶ＃１０１１０、スロット＃１０１２０で特定されるＬＤＥＶ上のスロットを先頭スロットとする１ストライプグループ分の領域が、未使用ページであることを表している。ストレージ装置１がＨＶＯＬ上ページに領域を割り当てる際、ページフリーリスト１０１００から未使用のスロット（１ストライプグループ分）を取得して、ＨＶＯＬ上ページに割り当てる。
【０１９３】
続いて、変形例１におけるストレージ装置１で行われる、ホスト計算機３からデータライト要求があった時の処理、データリード要求があった時の処理の流れについて説明する。この処理は上で説明した実施例における図２４〜２８の処理とほぼ同様である。たとえばホスト計算機３から伸長ＶＯＬ５０００に対するライト要求とライトデータを受信し、受信したライトデータをキャッシュメモリ２６に格納する処理は、図２４の処理と同一であるため、以下では説明しない。以下では圧縮ＶＯＬ（ＨＶＯＬ）へのデータ移し替え処理、リード処理について、上で説明した実施例との相違箇所を説明する。
【０１９４】
図３３を用いて、圧縮ＶＯＬ（ＨＶＯＬ）へのデータ移し替え処理の流れを説明する。図２５のＳ２３、Ｓ２４の処理が、図３３ではＳ２３’、Ｓ２４１、Ｓ２４２に変更されている以外は、図２５の処理と図３３の処理は同一である。
【０１９５】
Ｓ２１では、プロセッサ２１は、所定条件を満たしたか判定し、Ｓ２２では移し替え処理を行う対象となる伸長ＶＯＬのスロットの選択及び選択したスロットのロックを行う。変形例１ではＳ２１において、ある伸長ＶＯＬについて、当該伸長ＶＯＬに対して書き込まれたデータ（キャッシュメモリ２６上）のダーティ量が１ページ（つまり１または複数ストライプグループ分）以上存在するという条件の場合に、所定条件を満たしたと判断する。Ｓ２３’では、圧縮ＶＯＬ（ＨＶＯＬ）上のディスク領域割り当てを行う。まずボリュームマッピングテーブル６００を参照し、現在処理対象の伸長ＶＯＬ６０１に対応する圧縮ＶＯＬ６０２及び最終書き込み位置６０３を選択する。そして圧縮ＶＯＬ６０２の最終書き込み位置６０３の次のＬＢＡから１ストライプグループ分の領域に、伸長ＶＯＬからデータを移動すると決定する。続いて今回処理対象の伸長ＶＯＬの各領域（Ｓ２２で選択したスロット内のダーティデータの格納されている領域）を圧縮ＶＯＬのどの位置に対応付けるかを決定し、アドレスマッピングテーブル６５０に、決定した内容を格納する。
【０１９６】
続いてＳ２４’では、Ｓ２３’でデータを移動すると決定した移動先の領域である、ＨＶＯＬ上の１ページ分の領域（１または複数ストライプグループ分の領域）に対して、ＬＤＥＶの領域を割り当てる。この処理について図３４を用いて説明する。
【０１９７】
Ｓ２４１で、Ｓ２３’で選択されたＨＶＯＬ上の１ページ分領域の先頭ＬＢＡ（これはボリュームマッピングテーブル６００内最終書き込み位置６０３の次のＬＢＡである）をページＩＤに変換する。ＬＢＡからページＩＤを算出するためには、ＬＢＡを１ページのサイズで除算すればよい。たとえば１ページのサイズがＮストライプグループ（Ｎ≧１）のサイズと等しく、１ストライプグループのサイズが４８ＫＢの場合、ＬＢＡからページＩＤを算出するためには、ＬＢＡを（４８×Ｎ）ＫＢで除算すればよい。
【０１９８】
Ｓ２４２では、ページマッピングテーブル１００１０を参照し、Ｓ２４１で算出されたページＩＤのページに、ＬＤＥＶ上領域が割り当てられているか（ＬＤＥＶ＃１００１３、スロット＃１００１４に、無効値でない値が格納されているか）判定する。領域が割り当て済みの場合にはＳ２４４に進む。領域が割り当てられていない場合、ページフリーリスト１０１００から、ＬＤＥＶ上の領域を１ストライプグループ分取得し、取得した１ストライプグループ分の領域の情報をページマッピングテーブル１００１０に登録することで、ＨＶＯＬ上ページに領域を割り当てる（Ｓ２４３）。その後Ｓ２４４の処理に進む。
【０１９９】
Ｓ２４４では、ページマッピングテーブル１００１０を参照し、Ｓ２４１で算出されたページＩＤのページに割り当てられているＬＤＥＶ上領域の情報（ＬＤＥＶ＃１００１３、スロット＃１００１４を先頭スロットとする、１ページ分のスロットのスロット番号）を取得する。同時に、ここで取得した１ページ分のスロットに対応するパリティスロットのスロット番号も算出する。Ｓ２４５は図２５のＳ２４と同様の処理を行う。つまりＳ２４４で取得したスロットについてロック取得し、キャッシュセグメントの割り当てを行う。
【０２００】
Ｓ２４５の処理が終了すると、Ｓ２５に進むが、Ｓ２５以降の処理は図２５の処理と同一であるので、説明を省略する。
【０２０１】
このように圧縮技術を用いると、ホストからのライトデータとはサイズの異なる圧縮データを最終記憶媒体に格納することとなるが、ＨＶＯＬへのデータ移動に伴い、ＨＶＯＬを分割した固定サイズ領域に対して、ＬＤＥＶから記憶領域を割り当てることで、容量効率を高めることが可能となる。また、ストレージコントローラは、ＨＶＯＬのページサイズ、ＬＤＥＶのストライプグループのサイズ、更新データの圧縮後のサイズとを把握している。このため、ストレージコントローラが、更新データを追記する場合、追記された圧縮後の更新データのサイズに応じて、ＨＶＯＬ上ページへのＨＶＯＬ上の領域の割り当てを過不足なく行うことができるため（領域を過剰に割り当てることがない）、容量効率を高めることが可能となる。
【０２０２】
続いてホスト計算機３からボリューム（伸長ＶＯＬ）に対するリード要求を受け付けた時の処理の流れを説明する。この処理は図２７のＳ５５、Ｓ５６がそれぞれ、以下に説明するＳ５５’、Ｓ５６’の処理に変更されるだけで、それ以外は図２７と同様であるため、図示を省略する。
【０２０３】
Ｓ５５’では、アドレスマッピングテーブル６５０を参照して、伸長ＶＯＬのリード対象ＬＢＡに対応する圧縮ＶＯＬ（ＨＶＯＬ）のＬＢＡを特定する。続いて特定されたＨＶＯＬのＬＢＡをページＩＤに変換し、ページマッピングテーブル１００１０を参照し、当該ページＩＤに割り当てられているＬＤＥＶのスロット（ＬＤＥＶ＃１００１３、スロット＃１００１４で特定されるスロット）を特定し、特定されたＬＤＥＶのスロットのロックを行う。
【０２０４】
Ｓ５６’では、プロセッサ２１は、圧縮ＶＯＬのＬＢＡに対応するＬＤＥＶ上のキャッシュセグメントを特定し、当該キャッシュセグメントが割り当て済みであるか判定し、割り当てられていない場合にはセグメントの割り当てを行う（Ｓ５７）。Ｓ５７以降の処理は図２７と同様である。また圧縮ＶＯＬのＬＢＡに対応するＬＤＥＶ上のキャッシュセグメントを特定する処理は、シンプロビジョニング技術を用いているストレージ装置で従来から行われている処理で、周知技術であるので詳細な説明を省略する。キャッシュセグメントが既に割り当てられている場合、Ｓ６１に進み、これ以降の処理は図２７と同様である。
【０２０５】
［変形例２］
上で説明した実施例では、伸長ＶＯＬに対して書き込まれたデータが、キャッシュ２６に１ストライプグループ分蓄積されるたびに圧縮ＶＯＬへの移動が行われる。また移動の際、伸長ＶＯＬに書き込まれたデータは、当該データの伸長ＶＯＬ上の書き込み位置とは無関係に、圧縮ＶＯＬ（ＬＤＥＶ、さらには最終記憶媒体）に追記書きの要領で書き込まれるため、伸長ＶＯＬ上で連続しているデータ（領域）が、圧縮ＶＯＬ（ＬＤＥＶ）上では不連続に配置されることもある。そのような配置が行われると、シーケンシャルリード性能が、通常のストレージ装置（非圧縮データを格納するストレージ装置）よりも悪化する。以下では、データを伸長ＶＯＬから圧縮ＶＯＬに移動する際に、伸長ＶＯＬ上でのデータ配置を考慮して圧縮ＶＯＬにデータを移動する方法を説明する。
【０２０６】
変形例２におけるストレージ装置１では、変形例１と同様、圧縮ＶＯＬにシンプロビジョニング技術により形成される仮想的なボリューム（ＨＶＯＬ）を用いる。またＨＶＯＬの１ページのサイズは変形例１では１ストライプグループ分のサイズであったが、変形例２では、複数ストライプグループ（一例として１０００ストライプグループ）とする。また説明の簡単化のため、１ストライプグループは３スロット分（４８ＫＢ）のサイズの前提で説明する。そのため、１ページのサイズは、４８×１０００ＫＢである。
【０２０７】
上で説明した実施例１では、１つの伸長ＶＯＬに書き込まれたデータは、１つの伸長ＶＯＬに対応付けられた１つの圧縮ＶＯＬのいずれかの領域に追記書きされたが、変形例２では、各伸長ＶＯＬを、圧縮ＶＯＬのページサイズと同じく、ページ（４８×１０００ＫＢ）単位に分割し、各ページにページ番号を付与して管理する。各ページに付与されるページ番号は、伸長ＶＯＬの先頭に位置するページにページ０の番号が付与され、以下順にページ１、ページ２…が付与される。なお、伸長ＶＯＬのページと圧縮ＶＯＬのページとは、必ずしも同一サイズである必要はなく、データが圧縮して格納されることを期待して、圧縮ＶＯＬのページサイズを伸長ＶＯＬのページサイズより小さくしても、本発明は有効である。
【０２０８】
図３５を用いて、変形例２におけるボリュームマッピングテーブル６００’の内容を説明する。変形例２におけるストレージ装置１では、伸長ＶＯＬのページ０に書き込まれたデータは、圧縮ＶＯＬ（ＨＶＯＬ）のページ０に書き込まれ、以下同様に、伸長ＶＯＬのページ１、２…に書き込まれたデータはそれぞれ、圧縮ＶＯＬ（ＨＶＯＬ）のページ１、２…に書き込まれる。そのため、ボリュームマッピングテーブル６００’では、ＶＶＯＬ＃６０１’、ページＩＤ（Ｐ−ＩＤ）６０２’、ＨＶＯＬ＃６０３’、Ｐ−ＩＤ６０４’、最終書き込み位置６０５’の項目を有し、ＶＶＯＬ＃６０１’、ページＩＤ（Ｐ−ＩＤ）６０２’で特定される伸長ＶＯＬ上領域に書き込まれたデータは、ＨＶＯＬ＃６０３’、Ｐ−ＩＤ６０４’で特定される圧縮ＶＯＬ上ページに格納される旨の情報を管理する。また最終書き込み位置６０５’の情報も、伸長ＶＯＬのページ毎に管理する。
【０２０９】
その他、変形例２におけるストレージ装置１では、変形例１と同様、ＨＶＯＬを管理するための管理情報として、ＨＶＯＬ管理情報１００００、ページマッピングテーブル１００１０、ページフリーリスト１０１００を有するが、ページサイズが１０００ストライプグループになっている以外の点は、変形例１で用いられる管理情報のものと同様であるので説明を省略する。また、伸長ＶＯＬやＬＤＥＶのキャッシュ管理情報も上で説明した実施例、変形例１で用いられるキャッシュ管理情報と同様であるが、変形例２では、伸長ＶＯＬ用のダーティキューは、伸長ＶＯＬのページ毎に１つのダーティキューが存在する点が、上で説明した実施例と異なる。
【０２１０】
続いて変形例２におけるストレージ装置１で行われるライト処理について説明する。変形例２におけるライト処理の流れは、基本的には上で説明した実施例、変形例１とほとんど差はなく、受信したライトデータをキャッシュメモリ２６に格納する処理は、図２４の処理と同一であるので説明を省略する。また伸長ＶＯＬから圧縮ＶＯＬへのデータ移し替え処理は、図３３とほとんど差がないため、図３３を用いて説明する。なお上で説明した実施例、変形例１では、圧縮ＶＯＬへのデータ移し替え処理は、伸長ＶＯＬごとに行っているが、変形例２では、ページ毎に行う。
【０２１１】
Ｓ２１において、プロセッサ２１は、所定条件を満たしたか判定するが、変形例２では、伸長ＶＯＬの各ページのダーティキューに接続されている各スロットのダーティ量１１０ｆの合計が、所定量（たとえば１ページサイズの６０％以上等）以上になったか判定し、所定量以上になった場合にＳ２２以降の処理に進む。
【０２１２】
Ｓ２２の処理は、上で説明した実施例と同様であるが、ダーティキューに接続されているスロットを、スロットＩＤの小さいものから順に選択し、選択したスロットのダーティデータの領域のダーティ量の合計が、ストライプグループサイズの倍数で、かつこの値ができるだけ大きくなるように選択を行う。そのため、全ダーティデータを選択した時にダーティデータ量がストライプグループサイズの倍数になるのであれば、全スロットを選択する。
【０２１３】
Ｓ２３の処理も上で説明した実施例と同様であるが、変形例２では、処理対象の伸長ＶＯＬの各領域を、ＬＢＡの小さい順から昇順に、圧縮ＶＯＬ上の領域に対応付け、伸長ＶＯＬ上のデータ配置順と圧縮ＶＯＬ上のデータ配置順が同じになるようにする。以降の処理は、上で説明した実施例や変形例１と同様である。
【０２１４】
これにより、伸長ＶＯＬ上で連続して配置されている各データが、圧縮ＶＯＬ上でも昇順に配置されることになる。そのため、この後伸長ＶＯＬに対して、連続データを読み出す、いわゆるシーケンシャルリードアクセスがホスト計算機３から到来した場合、圧縮ＶＯＬからほぼシーケンシャルに圧縮データを読み出すことが可能になる。
【０２１５】
以上、本発明の実施例を説明してきたが、これは本発明の説明のための例示であって、本発明を上で説明した実施例に限定する趣旨ではない。本発明は、他の種々の形態でも実施可能である。たとえば実施例に記載のストレージ装置において、ストレージコントローラが２つ記載されているが、ストレージコントローラの数はこれには限定されず、１以上の任意の数のコントローラが備えられていてよい。またコントローラ内のプロセッサや、ホストインタフェースの数も、図に記載されている数に限定されるものではない。
【０２１６】
また、上で説明した変形例２では、変形例１と同様にシンプロビジョニング技術によって形成されるＨＶＯＬを圧縮ＶＯＬとして用いているが、最初に説明した実施例と同様、シンプロビジョニング技術を使用しない論理ボリュームを圧縮ＶＯＬとして用いても、実施例２の態様は実現可能である。
【符号の説明】
【０２１７】
１：ストレージ装置
２：ＳＡＮ
３：ホスト計算機
４：管理装置
１０：ストレージコントローラ
１１：ＳＳＤ
１２：ＨＤＤ
２１：プロセッサ
２２：内部スイッチ
２３：ディスクインタフェース
２４：ホストインタフェース
２５：ＤＲＡＭ
２６：キャッシュメモリ
２７：ノードＩ／Ｆ
【図１】
2018014129.tif 000003
【図２】
2018014129.tif 000004
【図３】
2018014129.tif 000005
【図４】
2018014129.tif 000006
【図５】
2018014129.tif 000007
【図６】
2018014129.tif 000008
【図７】
2018014129.tif 000009
【図８】
2018014129.tif 000010
【図９】
2018014129.tif 000011
【図１０】
2018014129.tif 000012
【図１１】
2018014129.tif 000013
【図１２】
2018014129.tif 000014
【図１３】
2018014129.tif 000015
【図１４】
2018014129.tif 000016
【図１５】
2018014129.tif 000017
【図１６】
2018014129.tif 000018
【図１７】
2018014129.tif 000019
【図１８】
2018014129.tif 000020
【図１９】
2018014129.tif 000021
【図２０】
2018014129.tif 000022
【図２１】
2018014129.tif 000023
【図２２】
2018014129.tif 000024
【図２３】
2018014129.tif 000025
【図２４】
2018014129.tif 000026
【図２５】
2018014129.tif 000027
【図２６】
2018014129.tif 000028
【図２７】
2018014129.tif 000029
【図２８】
2018014129.tif 000030
【図２９】
2018014129.tif 000031
【図３０】
2018014129.tif 000032
【図３１】
2018014129.tif 000033
【図３２】
2018014129.tif 000034
【図３３】
2018014129.tif 000035
【図３４】
2018014129.tif 000036
【図３５】
2018014129.tif 000037
【手続補正書】
【提出日】平成29年10月10日(2017.10.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プロセッサと、キャッシュ装置と、記憶デバイスとを備え、外部デバイスに接続されるストレージ装置において、
前記キャッシュ装置は、キャッシュメモリと、前記キャッシュメモリへの入出力を管理するメモリコントローラと、を備え、
前記プロセッサは、外部デバイスに認識される第１の仮想ボリュームと、前記記憶デバイスに対応する第２の仮想ボリュームと、を作成し、
前記キャッシュ装置のメモリコントローラは、第１の仮想ボリュームに対応する第１の論理記憶空間と、前記第２の仮想ボリュームに対応する第２の論理記憶空間と、を作成し、
前記第１の仮想ボリュームに、前記外部デバイスから圧縮前ライトデータのライト要求を受信した場合に、
前記プロセッサは、前記キャッシュ装置に、前記圧縮前ライトデータと、当該ライトデータにかかる前記第１の仮想ボリュームに対応する第１の論理記憶空間のアドレスと、これに対応する前記第２の論理記憶空間のアドレスと、を送信し、
前記キャッシュ装置のメモリコントローラは、受信した前記圧縮前ライトデータを圧縮して圧縮済ライトデータを前記キャッシュメモリに格納するとともに、前記格納した圧縮済ライトデータと、前記第１の論理記憶空間のアドレス及び前記第２の論理記憶空間のアドレスとを対応付ける
ことを特徴とするストレージ装置。
【請求項２】
請求項１記載のストレージ装置において、
前記キャッシュ装置は、前記キャッシュメモリに格納した圧縮済ライトデータを、圧縮状態と伸長状態とを選択して読み出し可能なことを特徴とするストレージ装置。
【請求項３】
請求項２記載のストレージ装置において、
前記キャッシュ装置は、
前記第１の論理記憶空間のアドレスとともにリード要求を受信した場合には、前記キャッシュメモリに格納された圧縮済データを伸長して前記プロセッサに送信し、
前記第２の論理記憶空間のアドレスとともにリード要求を受信した場合には、前記キャッシュメモリに格納された圧縮済データを圧縮状態で前記プロセッサに送信する
ことを特徴とするストレージ装置。
【請求項４】
請求項２記載のストレージ装置において、
前記プロセッサは、前記キャッシュメモリに格納した圧縮済ライトデータを読み出して、前記記憶デバイスに格納することを特徴とするストレージ装置。
【請求項５】
請求項１記載のストレージ装置において、
前記メモリコントローラは、前記圧縮済ライトデータに基づいて、パリティを生成し、前記圧縮済ライトデータとともに前記キャッシュメモリに格納することを特徴とするストレージ装置。
【請求項６】
請求項１記載のストレージ装置において、
前記第１の仮想ボリュームに、前記外部デバイスから圧縮前ライトデータのライト要求を受信した場合に、
前記プロセッサは、
前記キャッシュ装置に、前記圧縮前ライトデータと、当該ライトデータにかかる前記第１の仮想ボリュームに対応する第１の論理記憶空間のアドレスと、を送信するとともに、前記外部デバイスに、前記ライト要求にかかる処理を完了した通知を送信し、
前記キャッシュメモリに格納された圧縮済みライトデータが所定量以上になった場合に、前記前記第１の論理記憶空間のアドレスに対応する前記第２の論理記憶空間のアドレスを決定して前記キャッシュ装置に送信し、前記キャッシュメモリに格納した圧縮済ライトデータを読み出して、前記記憶デバイスに格納する
ことを特徴とするストレージ装置。
【請求項７】
プロセッサと、キャッシュ装置と、を備え、第１のデバイス及び第２のデバイスに接続される情報処理装置において、
前記キャッシュ装置は、キャッシュメモリと、前記キャッシュメモリへの入出力を管理するメモリコントローラと、を備え、
前記キャッシュ装置のメモリコントローラは、第１のデバイスに対応する第１の論理記憶空間と、前記第２のデバイスに対応する第２の論理記憶空間と、を作成し、
前記第１の仮想ボリュームに、前記第１のデバイスから圧縮前データを受信した場合に、
前記プロセッサは、前記キャッシュ装置に、前記圧縮前データと、当該データにかかる前記第１の論理記憶空間のアドレスと、これに対応する前記第２の論理記憶空間のアドレスと、を送信し、
前記キャッシュ装置のメモリコントローラは、受信した前記圧縮前データを圧縮して圧縮済データを前記キャッシュメモリに格納するとともに、前記格納した圧縮済データと、前記第１の論理記憶空間のアドレス及び前記第２の論理記憶空間のアドレスとを対応付ける
ことを特徴とする情報処理装置。
【請求項８】
プロセッサと、キャッシュ装置と、記憶デバイスとを備え、外部デバイスに接続されるストレージ装置における処理方法において、
前記キャッシュ装置は、キャッシュメモリと、前記キャッシュメモリへの入出力を管理するメモリコントローラと、を備え、
前記プロセッサは、外部デバイスに認識される第１の仮想ボリュームと、前記記憶デバイスに対応する第２の仮想ボリュームと、を作成し、
前記キャッシュ装置のメモリコントローラは、第１の仮想ボリュームに対応する第１の論理記憶空間と、前記第２の仮想ボリュームに対応する第２の論理記憶空間と、を作成し、
前記第１の仮想ボリュームに、前記外部デバイスから圧縮前ライトデータのライト要求を受信した場合に、
前記プロセッサは、前記キャッシュ装置に、前記圧縮前ライトデータと、当該ライトデータにかかる前記第１の仮想ボリュームに対応する第１の論理記憶空間のアドレスと、これに対応する前記第２の論理記憶空間のアドレスと、を送信し、
前記キャッシュ装置のメモリコントローラは、受信した前記圧縮前ライトデータを圧縮して圧縮済ライトデータを前記キャッシュメモリに格納するとともに、前記格納した圧縮済ライトデータと、前記第１の論理記憶空間のアドレス及び前記第２の論理記憶空間のアドレスとを対応付ける
ことを特徴とするストレージ装置における処理方法。
【請求項９】
プロセッサと、キャッシュ装置と、を備え、第１のデバイス及び第２のデバイスに接続される情報処理装置における処理方法において、
前記キャッシュ装置は、キャッシュメモリと、前記キャッシュメモリへの入出力を管理するメモリコントローラと、を備え、
前記キャッシュ装置のメモリコントローラは、第１のデバイスに対応する第１の論理記憶空間と、前記第２のデバイスに対応する第２の論理記憶空間と、を作成し、
前記第１の仮想ボリュームに、前記第１のデバイスから圧縮前データを受信した場合に、
前記プロセッサは、前記キャッシュ装置に、前記圧縮前データと、当該データにかかる前記第１の論理記憶空間のアドレスと、これに対応する前記第２の論理記憶空間のアドレスと、を送信し、
前記キャッシュ装置のメモリコントローラは、受信した前記圧縮前データを圧縮して圧縮済データを前記キャッシュメモリに格納するとともに、前記格納した圧縮済データと、前記第１の論理記憶空間のアドレス及び前記第２の論理記憶空間のアドレスとを対応付ける
ことを特徴とする情報処理装置における処理方法。