(57)【要約】  ストレージ装置は、複数の記憶装置と、複数の記憶装置をＲＡＩＤグループとして制御するストレージコントローラを備える。各記憶装置は、不揮発性半導体メモリ（例えば、フラッシュメモリ）チップと、データを圧縮して不揮発性半導体メモリチップに格納するメモリコントローラとを備える。メモリコントローラは、ストレージコントローラに、論理記憶領域を提供する。ストレージコントローラは、論理記憶領域を、それぞれ所定のサイズの論理記憶領域である複数のエントリーに分割し、各記憶装置から不揮発性半導体メモリに格納されたデータ容量に関する容量情報を取得し、容量情報に基づいて半導体記憶装置間でエントリーのデータを交換する。
2014184941.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが複数の不揮発性半導体メモリチップと、データを圧縮して前記複数の不揮発性半導体メモリチップに格納するメモリコントローラと、を有する複数の半導体記憶装置と、
前記複数の半導体記憶装置に含まれる半導体記憶装置を所定数ずつ含む複数のＲＡＩＤグループを制御し、前記複数の半導体記憶装置へのデータの書き込み及び読み出しを制御するストレージコントローラと、を備え、
前記メモリコントローラは、前記複数の不揮発性半導体メモリチップの記憶領域を、論理記憶領域に対応付けて前記ストレージコントローラに提供し、
前記ストレージコントローラは、
前記複数の半導体記憶装置のそれぞれが提供する前記論理記憶領域を、それぞれ所定のサイズの論理記憶領域である複数のエントリーに分割し、
前記複数の半導体記憶装置のそれぞれから、前記複数の不揮発性半導体メモリチップに格納されたデータ容量に関する容量情報を取得し、
前記容量情報に基づいて、前記複数の半導体記憶装置から、第一の半導体記憶装置と、前記第一の半導体記憶装置のデータ格納量より所定値以上大きい第二の半導体記憶装置と、を選択し、
前記容量情報に基づいて、前記第一の半導体記憶装置に属する複数のエントリーの中でデータ格納量が小さいエントリーと、前記第二の半導体記憶装置に属する複数のエントリーの中でデータ格納量が大きいエントリーのデータを交換する
ことを特徴とするストレージ装置。
【請求項２】
前記不揮発性半導体メモリチップは、フラッシュメモリチップである
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記メモリコントローラは、前記複数の不揮発性半導体メモリチップの記憶領域の容量よりも大きい容量の前記論理記憶領域を、前記ストレージコントローラに提供する
ことを特徴とする請求項２に記載のストレージ装置。
【請求項４】
前記ストレージコントローラは、
前記複数のＲＡＩＤグループのうち第一のＲＡＩＤグループから、前記第一の半導体記憶装置と、前記第二の半導体記憶装置と、を選択する
ことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
前記ストレージコントローラは、
前記容量情報に基づいて、前記複数のＲＡＩＤグループのうち第一のＲＡＩＤグループから前記第一の半導体記憶装置と、前記複数のＲＡＩＤグループのうち前記第一のＲＡＩＤグループとは異なる第二のＲＡＩＤグループから前記第一の半導体記憶装置のデータ格納量より所定値以上大きい第三の半導体記憶装置と、を選択し、
前記容量情報に基づいて、前記第一の半導体記憶装置に属する複数のエントリーの中でデータ格納量が小さいエントリーと、前記第三の半導体記憶装置に属する複数のエントリーの中でデータ格納量が大きいエントリーのデータを交換する
ことを特徴とする請求項４に記載のストレージ装置。
【請求項６】
前記ストレージコントローラは、
前記複数のＲＡＩＤグループ毎に、各ＲＡＩＤグループに含まれる複数の半導体記憶装置それぞれに属するエントリーを一つずつ含む複数のエクステントを構成し、
前記容量情報に基づいて、前記複数のＲＡＩＤグループから第一のＲＡＩＤグループと、第二のＲＡＩＤグループと、を選択し、
前記容量情報に基づいて、前記第一のＲＡＩＤグループに属する前記複数のエクステントのうち第一のエクステントと、前記第二のＲＡＩＤグループに属する前記複数のエクステントのうち第二のエクステントのデータを交換する
ことを特徴とする請求項５に記載のストレージ装置。
【請求項７】
前記第一のＲＡＩＤグループに含まれる複数の半導体記憶装置のうち第一の半導体記憶装置のデータ格納量が他の半導体記憶装置より小さく、前記第二のＲＡＩＤグループに含まれる複数の半導体記憶装置のうち第三の半導体記憶装置のデータ格納量が他の半導体記憶装置より大きい場合、
前記ストレージコントローラは、前記容量情報に基づいて、前記第一のＲＡＩＤグループに属する前記複数のエクステントから前記第一の半導体記憶装置に格納されるデータ量が大きい前記第一のエクステントと、前記第二の半導体記憶装置に格納されるデータ量が小さい前記第二のエクステントのデータを交換する
ことを特徴とする請求項６に記載のストレージ装置。
【請求項８】
前記ストレージコントローラは、前記複数の半導体記憶装置それぞれの、前記複数の不揮発性半導体メモリチップの容量と、前記容量情報と、に基づいて、前記論理記憶領域のうちデータを格納できる範囲を算出し、
前記データを格納できる範囲に基づいて、前記エクステントの数を算出する
ことを特徴とする請求項７に記載のストレージ装置。
【請求項９】
前記ストレージコントローラは、
所定の容量が設定された仮想ボリュームを計算機に提供し、
前記計算機からのライト要求に応じて、前記複数のエクステントの１つを前記仮想ボリュームに割当て、
前記複数の半導体記憶装置が提供する前記論理記憶領域の容量をプールボリュームとして管理し、
前記論理記憶領域のうちデータを格納できる範囲が変動した場合、前記プールボリュームの容量を変動させる
ことを特徴とする請求項８に記載のストレージ装置。
【請求項１０】
前記メモリコントローラは、
前記ストレージコントローラからのライト要求に応じて、ライト要求に伴うデータを前記不揮発性半導体メモリチップに格納し、
リクラメーション処理において、前記不揮発性半導体メモリチップからデータを読み出し、前記読み出したデータを圧縮し、前記圧縮されたデータを不揮発性半導体メモリチップに書き込む
ことを特徴とする請求項９に記載のストレージ装置。
【請求項１１】
前記メモリコントローラは、前記ストレージコントローラから容量情報の取得要求に応じて、前記圧縮されたデータの容量に関する情報を前記ストレージコントローラに送信する
ことを特徴とする請求項１０に記載のストレージ装置。
【請求項１２】
前記メモリコントローラは、前記ストレージコントローラからのライト要求に応じて、ライト要求に伴うデータを圧縮し、前記圧縮されたデータを前記不揮発性半導体メモリチップに書き込む
ことを特徴とする請求項１１に記載のストレージ装置。
【請求項１３】
前記メモリコントローラは、前記ライト要求の完了報告に伴って前記圧縮されたデータの容量に関する情報を前記ストレージコントローラに送信する
ことを特徴とする請求項１２に記載のストレージ装置。
【請求項１４】
前記ストレージ装置は、さらに複数のハードディスクドライブを有し、
前記ストレージコントローラは、前記複数のハードディスクドライブを第三のＲＡＩＤグループとして制御し、前記第三のＲＡＩＤグループの記憶領域に基づいて複数のエクステントを構成し、
前記ストレージコントローラは、
前記仮想ボリュームに割当てられたエクステント毎にアクセス頻度を計測し、
前記データの交換処理が完了した後に、前記第三のＲＡＩＤグループに属する複数のエクステントのうちアクセス頻度の高いエクステントのデータを、前記複数の半導体記憶装置から構成されるＲＡＩＤグループに移動する
ことを特徴とする請求項７に記載のストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ圧縮機能を有する記憶装置を備えるストレージ装置に関する。
【背景技術】
【０００２】
ストレージ装置は、一般に、データを格納する物理記憶装置と、物理記憶装置を制御するコントローラとを有する。コントローラは、ストレージ装置に接続された計算機（例えばホスト）にデータ格納空間（一般に論理ボリューム）を提供する。【０００３】
ストレージ装置は、複数の物理記憶装置をＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ（ｏｒ  Ｉｎｅｘｐｅｎｓｉｖｅ）  Ｄｉｓｋｓ）構成で使用することにより、Ｉ／Ｏ処理を高速化し、物理記憶装置の故障に対する高い耐障害性を発揮する。【０００４】
ストレージ装置は、物理記憶装置として一般に多数のＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）を搭載しているが、近年、ＨＤＤに代わって、物理記憶媒体としてフラッシュメモリ（以下、ＦＭ）を有する物理記憶装置、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）が注目されている。ＳＳＤは、ＨＤＤに比べＩ／Ｏ処理が非常に高速であるというメリットを有している。【０００５】
近年、ストレージ装置に格納されるデータ量は、増加の一途をたどっている。このため、格納データ量を削減し、ストレージ装置のコストを低減するためのデータ圧縮技術が注目されている。特にＳＳＤは、ＨＤＤに比べてビットコストが高価であるため、圧縮技術によって格納データ容量を削減し、見かけ上の容量を大きくするニーズは高い。【０００６】
特許文献１には、ストレージ装置のコントローラ（以下、ストレージコントローラ）がホスト計算機から受け取ったデータを、ストレージコントローラ内で圧縮し、圧縮後のデータ（以下、圧縮データ）をＨＤＤに格納する技術が開示されている。【０００７】
特許文献２には、ＳＳＤ内部のコントローラ（以下、ＳＳＤコントローラ）がデータ圧縮機能を有しており、データ圧縮率により外部装置（ストレージコントローラ）に提供する仮想論理容量が変動するフラッシュメモリストレージ（以下では、ＳＳＤと呼ぶ）に関する技術が開示されている。つまり、圧縮後のデータサイズが小さいほど、ＳＳＤが外部装置に提供できる仮想論理容量が大きくなり、圧縮後のデータサイズが大きいほど、ＳＳＤが外部装置に提供できる仮想論理容量が小さくなる。圧縮後のデータサイズは、圧縮対象となるデータのパターンに依存するため、圧縮後のデータサイズは一定ではない。このため、ストレージ装置が複数のＳＳＤを搭載している場合、ＳＳＤ間で外部装置に提供できる仮想論理容量が異なりうる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平８−２４９１２８
【特許文献２】ＰＣＴ／ＪＰ２０１１／００３２０４
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１のような、従来のストレージ装置で採用されている、ストレージコントローラによるデータ圧縮では、ストレージコントローラがまずデータを圧縮し、圧縮したデータを一定のサイズに分割してＳＳＤやＨＤＤなどの各種記憶装置へ格納（ストライピング）するため、ＲＡＩＤグループを構成する記憶装置の論理容量は、常に均一であった。【００１０】
特許文献２においては、ストレージコントローラは、ＲＡＩＤグループ内の複数のＳＳＤに対してデータをストライピングして格納する。ストライピングしてデータを格納するためには、ＲＡＩＤグループ内の各ＳＳＤに同じサイズの空き容量が必要となる。つまり、ＲＡＩＤグループ内のあるＳＳＤの空き容量がなくなると、他のＳＳＤの空き容量があっても、新たにデータを格納することはできなくなる。【００１１】
このように、ＳＳＤ内部でデータ圧縮を行う場合、ストレージコントローラがＲＡＩＤグループを構成する複数のＳＳＤに同じ容量のデータを格納したとしても、圧縮率はデータパターンに依存するため、実際に記憶媒体であるフラッシュメモリに格納されるデータ量はＳＳＤ毎に異なる。このため、データ圧縮によりＲＡＩＤグループを構成するＳＳＤ間で空き容量が不均一となった場合、ある１つのＳＳＤに空き容量がなくなると、他のＳＳＤに空き容量があっても新たにデータを格納することができなくなり、使用できない空き容量が発生する。【００１２】
このように、ＲＡＩＤグループを構成する記憶装置それぞれがデータ圧縮を実行すると、記憶装置の記憶容量の使用率が低下するというストレージ装置としての課題が発生する。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明は、それぞれが複数の不揮発性半導体メモリチップと、データを圧縮して前記複数の不揮発性半導体メモリチップに格納するメモリコントローラと、を有する複数の半導体記憶装置と、
前記複数の半導体記憶装置に含まれる半導体記憶装置を所定数ずつ含む複数のＲＡＩＤグループを制御し、前記複数の半導体記憶装置へのデータの書き込み及び読み出しを制御するストレージコントローラと、を備える。【００１４】
メモリコントローラは、複数の不揮発性半導体メモリチップの記憶領域を、論理記憶領域に対応付けて前記ストレージコントローラに提供する。ストレージコントローラは、複数の半導体記憶装置のそれぞれが提供する論理記憶領域を、それぞれ所定のサイズの論理記憶領域である複数のエントリーに分割し、複数の半導体記憶装置のそれぞれから、複数の不揮発性半導体メモリチップに格納されたデータ容量に関する容量情報を取得し、容量情報に基づいて、前記複数の半導体記憶装置から、第一の半導体記憶装置と、前記第一の半導体記憶装置のデータ格納量より所定値以上大きい第二の半導体記憶装置と、を選択し、容量情報に基づいて、第一の半導体記憶装置に属する複数のエントリーの中でデータ格納量が小さいエントリーと、第二の半導体記憶装置に属する複数のエントリーの中でデータ格納量が大きいエントリーのデータを交換する。
【発明の効果】
【００１５】
ＲＡＩＤグループを構成する各記憶装置間の空き物理容量の差を小さくすることができる。空き物理容量の差が小さくなることで、空き論理容量の差も小さくなる。その結果として、ＲＡＩＤグループとして使用可能な論理容量を拡大することができる。記憶装置内でのデータ圧縮により、ストレージ装置を含むシステムを低コストで構築することが可能となり、ＲＡＩＤグループとして使用可能な容量を拡大することでさらに低コストでシステムを構築することが可能となる。
【図面の簡単な説明】
【００１６】
【図１】実施例１におけるＳＳＤのアドレス空間の概要を示す図である。
【図２】実施例１の概要を示す図である。
【図３】実施例１の概要を示す図である。
【図４】実施例１におけるストレージ装置を含むストレージシステムの構成例を示す図である。
【図５】実施例１におけるＳＳＤの構成例を示す図である。
【図６】実施例１におけるフラッシュメモリチップの構成例を示す図である。
【図７】実施例１におけるＳＳＤのアドレス空間の構成例を示す図である。
【図８】実施例１における上位レベルの容量仮想化技術の概要説明図である。
【図９】実施例１における容量平準化処理と仮想ボリュームの関係の一例を示す図である。
【図１０】実施例１におけるストレージコントローラが備えるキャッシュメモリの構成例を示す図である。
【図１１】実施例１におけるディスク管理ＴＢＬの構成例を示す図である。
【図１２】実施例１におけるＲＧ管理ＴＢＬの構成例を示す図である。
【図１３】実施例１におけるプール管理ＴＢＬの構成例を示す図である。
【図１４】実施例１におけるエントリー管理ＴＢＬの構成例を示す図である。
【図１５】実施例１におけるエクステント管理ＴＢＬの構成例を示す図である。
【図１６】実施例１における仮想ボリューム管理ＴＢＬの構成例を示す図である。
【図１７】実施例１におけるＳＳＤが備えるキャッシュメモリの構成例を示す図である。
【図１８】実施例１における論物変換ＴＢＬの構成例を示す図である。
【図１９】実施例１におけるブロック管理テーブルの構成例を示す図である。
【図２０】実施例１における容量管理テーブルの構成例を示す図である。
【図２１】実施例１におけるストレージコントローラのタスクの概要を示すシーケンス図である。
【図２２】実施例１におけるストレージコントローラのデータライト処理の一例を示すシーケンス図である。
【図２３】実施例１におけるエクステント割当て処理の一例を示すシーケンス図である。
【図２４】実施例１におけるＳＳＤライト処理の一例を示すシーケンスである。
【図２５】実施例１におけるリード要求の処理の一例を示すシーケンス図である。
【図２６】実施例１における定期監視処理Ｓ１０５の詳細を示すシーケンスである。
【図２７】実施例１における容量平準化処理Ｓ１０６の詳細を示すシーケンスである。
【図２８】実施例１におけるエントリー単位の容量平準化処理の一例である、ＲＧ内データ移動の概要を示す図である。
【図２９】実施例１におけるエントリー単位の容量平準化処理の一例である、ＲＧ間データ移動の概要を示す図である。
【図３０】実施例１におけるエントリー単位の容量平準化処理の一例を示すシーケンスである。
【図３１】実施例１におけるエクステント単位の容量平準化処理の一例である、ＲＧ間データ移動の概要を示す図である。
【図３２】実施例１におけるエクステント単位の容量平準化処理の一例を示すシーケンスである。
【図３３】実施例１におけるエクステント単位の容量平準化処理の別の一例の概要を示す図である。
【図３４】実施例２におけるＳＳＤのアドレス空間の概要を示す図である。
【図３５】実施例２におけるエクステント割当て処理Ｓ５０５の詳細を示すシーケンスである。
【図３６】実施例３における階層再配置機能の概要説明図である。
【図３７】実施例３における仮想ボリューム管理ＴＢＬの構成例を示す図である。
【図３８】実施例３における仮想ボリューム管理ＴＢＬの構成例を示す図である。
【図３９】実施例３におけるストレージコントローラのタスクの概要を示すシーケンス図である。
【図４０】実施例３における階層再配置処理の一例を示すシーケンス図である。
【発明を実施するための形態】
【００１７】
以下、図面に基づいて幾つかの実施例を説明する。
【実施例１】
【００１８】
まず、図１から図３を用いて本実施例の概要を説明する。【００１９】
図１は、実施例１における、ＳＳＤのアドレス空間の概要を示す図である。【００２０】
本発明におけるＳＳＤは、外部装置（ＳＳＤを利用するストレージコントローラなど）に提供する論理的なアドレス空間である「論理アドレス空間（以下、論理空間）」と、その論理アドレス空間に対応するデータが実際に格納される物理的なアドレス空間である「物理アドレス空間（以下、物理空間）」を有している。また以下では、アドレス空間のサイズを「容量」と定義する。すなわち、論理アドレス空間のサイズは「論理容量」であり、物理アドレス空間のサイズは「物理容量」である。【００２１】
ここで、本発明におけるＳＳＤは、下位レベルの容量仮想化機能とデータ圧縮機能とを有している。【００２２】
まず下位レベルの容量仮想化機能により、ＳＳＤは、物理空間よりも大きな論理空間を、外部装置に対して提供することができる。【００２３】
次にデータ圧縮機能により、ＳＳＤは、外部装置よりライトされたデータを内部で圧縮し、圧縮後のデータ（以下、圧縮データ）を物理記憶媒体であるフラッシュメモリ（ＦＭ）に格納する。すなわち、あるデータがライトされたときに、実際に消費する物理容量を、圧縮により小さくすることができる。ただし物理容量の消費量は、データの圧縮率に依存する。なお、データ圧縮率は、「圧縮データを格納するために消費した物理容量 ÷ ライト要求にともなうデータサイズ」により算出することが出来る。すなわち、１０ＫＢのライトデータが、データ圧縮により２ＫＢのサイズとなったとき、データ圧縮率は、１／５（２０％）となる。本発明では、データ圧縮率の値が小さい（０％により近い）ほど、圧縮効果が高いことということを意味する。【００２４】
ここで、データ圧縮率の上限を最大データ圧縮率（以下、最大圧縮率）と定義する。最大圧縮率とは、最大のデータ圧縮効果が得られた際のデータ圧縮率であり、ＳＳＤがもつ圧縮アルゴリズム等により決定・推測されるパラメータである。以降では、最大圧縮率が１／８（１２．５％）に設計されたＳＳＤを前提とした説明をおこなう。このように、データ圧縮率は、ＳＳＤに格納されるデータのパターンにより、最大圧縮率（１２．５％）から圧縮効果なし（１００％）まで変化する。【００２５】
本発明におけるＳＳＤは、上述の下位レベルの容量仮想化機能とデータ圧縮機能とを連携させることで、物理容量よりも大きな論理容量を外部装置に提供できる一方で、提供可能な（すなわち、外部装置が使用することができる）論理容量がデータ圧縮率により変化するという特性を有している。例えば、物理容量が１００ＧＢのＳＳＤにデータを格納した際に、最大圧縮率である１／８でデータを圧縮できた場合は、ＳＳＤの論理容量は８倍の８００ＧＢとなる。一方で、圧縮効果が全く得られなかった場合、すなわち圧縮率が１００％のときは、ＳＳＤの論理容量は、物理容量と等しい１００ＧＢとなる。【００２６】
このように、外部装置に提供可能な論理容量は、「外部装置に提供可能な論理容量＝物理容量÷圧縮率」の数式により、得ることができる。【００２７】
図１を用いて、ＳＳＤの論理空間と物理空間の対応について詳しく説明する。図１は、１００ＧＢの物理容量と、最大圧縮率１／８のスペックを持つことにより、最大で８００ＧＢの論理空間を提供可能なＳＳＤの、ある時点における状態を示したものである。【００２８】
最大論理容量３０００１は、ＳＳＤが外部装置に提供可能な論理容量の上限値であり、図１において、その容量は８００ＧＢである。ただし、８００ＧＢの論理空間を、常に外部装置に提供できるとは限らない。なぜなら、提供可能な論理容量は、ＳＳＤ内部で実施されるデータ圧縮の、圧縮率により変化するためである。そのため、ＳＳＤの論理空間には、使用可能な空間と、使用不可能な空間が存在する。【００２９】
使用可能論理空間３０００２は、ＳＳＤが外部装置に提供可能な論理空間であり、外部装置は使用可能論理空間３０００２のサイズを、当該ＳＳＤの論理容量として認識する。図１において、そのサイズは６５０ＧＢである。次に、使用不可論理空間３０００３は、ＳＳＤに格納したデータを、最大圧縮率の１／８で圧縮できなかった際に発生する論理空間の損失分であり、図１ではそのサイズは１５０ＧＢである。【００３０】
すなわち、最大論理容量３０００１は、使用可能論理空間３０００２のサイズ（容量）と、使用不可論理空間３０００３のサイズ（容量）の合計値に等しい。【００３１】
次に、使用可能論理空間３０００２は、空き論理空間３０００４および使用中論理空間３０００５により構成されている。【００３２】
使用中論理空間３０００５は、使用可能論理空間３０００２のなかで、外部装置が使用済みの空間である。具体的には、当該の空間には、外部装置よりライトされたデータがすでに格納済の状態となっている。ただし本領域に格納されたデータは、ＳＳＤ内部で圧縮され、圧縮データが物理空間を構築するＦＭに格納される。なお、図１において、使用中物理空間３０００５のサイズは２５０ＧＢである。【００３３】
一方、空き論理空間３０００４は使用可能論理空間３０００２のなかで、外部装置が使用していない論理空間である。この領域には、外部装置からのデータはまだ格納されておらず、空きの状態である。図１において、そのサイズは４００ＧＢである。【００３４】
次に、当該ＳＳＤの物理空間について説明する。【００３５】
物理空間は、使用中物理空間３０００７と空き物理空間３０００６により構成されている。使用中物理空間３０００７は、使用中論理空間３０００５に対応する空間であり、使用中論理空間３０００５にライトされたデータの、圧縮データが格納されている空間である。図１において、そのサイズは５０ＧＢである。すなわち、図１では、外部装置が２５０ＧＢ分の論理空間を使用して、データの格納を行っているが、そのデータがＳＳＤ内部で平均１／５に圧縮されたことにより、実際に消費した物理容量は５０ＧＢであることを示している。【００３６】
一方、空き物理空間３０００６は、データが格納されていない、すなわち空き状態の物理容量である。図１において、そのサイズは５０ＧＢである。【００３７】
空き物理空間３０００６は、空き論理空間３０００４に対応する空間である。具体的には、空き論理空間３０００４のサイズは、空き物理空間３０００６のサイズを最大圧縮率で割ったものに等しい。図では、５０ＧＢの空き物理容量が存在し、さらにＳＳＤの最大圧縮率が１／８であることから、４００ＧＢの空き論理容量が存在している。【００３８】
以上をまとめると、図１のＳＳＤは、最大で８００ＧＢの論理容量を外部装置に提供することができる。外部に提供可能な論理容量が８００ＧＢであるとき、ＳＳＤ内部では、使用可能論理容量＝最大論理容量３０００１の関係が成り立っている。なお使用可能論理容量とは、使用可能論理空間３０００２のサイズである。【００３９】
使用可能論理容量８００ＧＢを達成するための条件は、データを最大圧縮率１／８で圧縮して格納することである。しかし、データの圧縮率は、格納対象データのパターン等によって変化する。そのため、データを全く圧縮できない場合もある。仮にデータを全く圧縮できなかった場合、そのときの使用可能論理容量は、物理容量に等しい１００ＧＢとなる。このように、データ圧縮率は常に変動するため、それに伴い、使用可能論理容量も１００ＧＢから８００ＧＢまで変化する。【００４０】
すなわち図１において、外部装置が認識するＳＳＤのサイズは、１００ＧＢから８００ＧＢにまで変化する。なお、ＳＳＤが未使用の状態においては、１００ＧＢの物理空間がすべて空きの状態となるため、外部装置が認識するＳＳＤのサイズは８００ＧＢとなる。  ただし、空き論理空間３０００４のサイズは期待値であるため、そのサイズは、空き物理空間３０００６を平均圧縮率で割ることで求めても良い。【００４１】
図２では、図１で説明したＳＳＤを３台（ＳＳＤ１１、ＳＳＤ１２、ＳＳＤ１３）用いて、ＲＡＩＤグループ（以下、ＲＧ）が構築されている。【００４２】
ここで、ＳＳＤ１１の物理空間は、空き物理空間３００３６と使用中物理空間３００３７により構成されており、それに対応するＳＳＤ１１の論理空間は、使用不可論理空間３００３３と空き論理空間３００３４および使用中論理空間３００３５により構築されている。同様に、ＳＳＤ１２の物理空間は、空き物理空間３００４６と使用中物理空間３００４７により構成されており、それに対応するＳＳＤ１２の論理空間は、使用不可論理空間３００４３と空き論理空間３００４４および使用中論理空間３００４５により構築されている。また、ＳＳＤ１３の物理空間は、空き物理空間３００５６と使用中物理空間３００５７により構成されており、それに対応するＳＳＤ１３の論理空間は、使用不可論理空間３００５３と空き論理空間３００５４および使用中論理空間３００５５により構築されている。【００４３】
さらに、当該のＲＧにはストレージコントローラ（図示せず）により、複数のエクステントが作成されている。図においてエクステント３００１０は、ある一つのエクステントの構成例をしめしている。ストレージコントローラは、ＳＳＤの論理空間を使用してエクステントを構築する。【００４４】
ここで、エクステントは、各ＳＳＤから一定サイズの論理空間を使用して作成された「エントリー」により構成されている。今、エクステント３００１０には、ＳＳＤ１１の任意の論理空間より作成されたエントリー３００１１、ＳＳＤ１２の任意の論理空間より作成されたエントリー３００１２、ＳＳＤ１３の任意の論理空間より作成されたエントリー３００１３が存在している。なお、各エントリー３００１１、３００１２、３００１３のサイズは等しい。しかし、各エントリーに格納されたデータは、ＳＳＤ内で圧縮され、圧縮データとして物理空間に格納される。図では、エントリー３００１１のデータはＳＳＤ１１内で圧縮され、圧縮データ３００１４として格納されている。また、エントリー３００１２のデータはＳＳＤ１２内で圧縮され、圧縮データ３００１５として格納されている。さらに、エントリー３００１３のデータはＳＳＤ１３内で圧縮され、圧縮データ３００１６として格納されている。このとき、圧縮率が異なることで、圧縮データ３００１４、３００１５、３００１６はサイズが不均一となっている。図では、四角形の大きさがサイズを表しており、圧縮データのサイズは、圧縮データ３００１６＞圧縮データ３００１５＞圧縮データ３００１４となっている。すなわち、圧縮率は、圧縮データ３００１４＞圧縮データ３００１５＞圧縮データ３００１６の順に高い。ここで圧縮率が高いとは、圧縮データをより小さくすることができたことを意味する。【００４５】
次に、エクステント作成済み空間３００２０は、当該の論理空間に既にエクステントが作成済みであることを示している。当該空間のサイズは各ＳＳＤの使用中論理空間のサイズに依存する。エクステント作成可能空間３００２１は、当該の論理空間にエクステントが作成可能であることを示しており、その空間のサイズはＲＧ内で空き論理空間が最小であるＳＳＤの、空き論理空間のサイズに依存する。エクステント作成不可空間３００２２は、当該の論理空間にはエクステントが作成できないことを示しており、その空間のサイズはＲＧ内で使用不可論理空間が最大であるＳＳＤの、使用不可論理空間のサイズに依存する。【００４６】
ここで、エクステントは各ＳＳＤに、均等なサイズにストライプされているため、各ＳＳＤにおいて、使用中論理空間３００３５、３００４５、３００５５のサイズは等しい。すなわち、今ＲＧを構築するＳＳＤの台数は３台であるため、エクステント作成済み空間３００２０のサイズは、あるＳＳＤの使用中論理空間のサイズを３倍したものに等しい。  しかし、各ＳＳＤでは、データを内部で圧縮し、圧縮データとして物理空間に格納する。各ＳＳＤに格納されるデータの、データパターンが同じである可能性は低いため、各ＳＳＤの圧縮効果は不均一となる可能性が高い。したがって、各ＳＳＤで生成される圧縮データのサイズも不均一となる可能性が高い。図では、各ＳＳＤの平均圧縮率が異なることで、各ＳＳＤの物理使用量である、使用中物理空間３００３７、３００４７、３００５７のサイズが異なっている様子を示している。そのサイズは、使用中物理空間３００３７＜３００４７＜３００５７の関係にあるため、平均圧縮率は３００３７＞３００４７＞３００５７の関係にあることが分かる。【００４７】
物理使用量の相違にともない、各ＳＳＤの空き物理空間３００３６、３００４６、３００５６のサイズも不均一な状態になっている。これに伴い、各ＳＳＤの空き論理空間３００３４、３００４４、３００５５と使用不可論理空間３００３３、３００４３、３００５３も不均一な状態が生じている。【００４８】
空き論理空間に着目すると、ＳＳＤ１１は、最大の空き物理空間３００３６を有するため、空き論理空間３００３４も最大である。一方で、ＳＳＤ１３は空き物理空間３００５６が最小であるため、空き論理空間３００５４も最小となっている。【００４９】
ストライプボリュームであるエクステントを新たに作成する際には、各ＳＳＤから均等なサイズの、空き論理空間を消費する。すなわち、あるＲＧで新たに作成可能なエクステントのサイズは、ＲＧを構成するＳＳＤなかで、空き論理容量が最小であるＳＳＤにより制約される。具体的に、図２ではエクステント作成可能空間３００２１のサイズは、ＲＧ内で最小の空き論理空間３００５４のサイズを３倍したものに等しい。反対に、エクステント作成不可空間３００２２のサイズは、ＲＧ内で最大の使用不可論理空間３００５３のサイズを３倍したものに等しい。【００５０】
このように、ＳＳＤがデータ圧縮機能を有することにより、ＲＧを構成する各ＳＳＤの物理残量である空き物理容量が不均一になるケースが生じる。これにより、各ＳＳＤの空き論理容量にも不均一な状態となる。この状況下で新たにエクステントを構築する場合、たとえ他のＳＳＤに十分な空き論理容量が残っていたとしても、追加エクステントを作成可能な容量のサイズは、ＲＧを構築するＳＳＤのなかで、空き論理容量が最小のＳＳＤにより制約されることとなる。【００５１】
本発明では、エクステント作成可能空間３００２１のサイズを拡大もしくは最大化する。その実現ために、本発明では図２の様にＲＧを構築するＳＳＤの空き論理容量が不均一な状態となっている場合に、ＳＳＤ間で、各ＳＳＤの空き論理容量の差を小さくするデータ移動を行う。【００５２】
図３は、平準化処理を実行することで、図２での不均一状態を解決した時の、各ＳＳＤの状態を示したものである。ここで、平準化処理では、各ＳＳＤ間の空き物理容量を厳密に等しくする必要はなく、各ＳＳＤ間の空き物理容量の差が小さくなればよい。ただし、各ＳＳＤの空き物理容量が等しくなるようにデータ移動すれば、使用可能な論理容量は最大化される。【００５３】
平準化処理実行前（図２）は、ＳＳＤ１１の空き論理空間３００３４と、ＳＳＤ１２の空き論理空間３００４４のサイズは十分であるのに対し、ＳＳＤ１３の空き論理空間３００５４のサイズが最小となっているため、エクステント作成可能空間３００２１のサイズは、図２の状態における空き論理容量３００５４の３倍となっていた。なお、この空き論理容量の不均一さは、各ＳＳＤでのデータ圧縮効果に違いが生じる（圧縮データサイズが異なる）ことで、各ＳＳＤの空き物理空間のサイズが不均一となったことにより発生する。【００５４】
そこで、ストレージコントローラは、各ＳＳＤの空き物理空間のサイズを均一にするための、データ移動を行う。具体的には、空き物理空間の多い（すなわち、物理使用量の少ない）ＳＳＤの、圧縮効果の高い圧縮データ（すなわち、圧縮データのサイズが小さいもの）と、空き物理空間の少ない（すなわち、物理使用量の多い）ＳＳＤの、圧縮効果の小さい圧縮データ（すなわち、圧縮データのサイズが大きいもの）とを、入れ替える。図２において、空き物理空間の多いＳＳＤ１１内の、圧縮効果の高いデータである圧縮データ３００１４と、空き物理空間の少ないＳＳＤ１３内の、圧縮効果の低いデータである圧縮データ３００１６とが、平準化処理により交換される。【００５５】
平準化処理実行後（図３）には、ＳＳＤ１１に物理使用量の多い圧縮データ３００１６が格納されることで、ＳＳＤ１１の空き物理空間が減少している。それにあわせて、空き論理空間３００３４も平準化実行前の図２の状態と比べて減少している。一方、ＳＳＤ１３には物理使用量の少ない圧縮データ３００１４が格納されることで、ＳＳＤ１３の空き物理容量が増加している。それにあわせて、空き論理容量３００５４も平準化実行前の図２の状態と比べて拡大している。【００５６】
これにより、空き論理空間３００３４と３００４４、３００５４の乖離は小さくなっている。このなかで空き論理空間のサイズが最小のものは、依然として空き論理容量３００５４であるものの、そのサイズは平準化実行前である図２の状態に比べて拡大している。これに伴い、エクステント作成可能空間３００２１のサイズも拡大している。これは、各ＳＳＤの空き物理空間のサイズを平準化したことにより、得られた効果である。すなわち、空き論理空間のサイズの平準化を行うことは、空き物理空間のサイズの平準化を行うことに等しい。【００５７】
なお、各ＳＳＤの空き論理空間３００３４、３００４４、３００５４のサイズに差がなくなったとき、すなわち、各ＳＳＤの空き物理空間３００３６、３００４６、３００５６のサイズの差が無くなったとき、エクステント作成可能空間３００２１のサイズの最大化が達成される。【００５８】
図４は、第１実施例に係るストレージ装置１０を含むストレージシステム１００００の構成例を示す図である。【００５９】
ストレージシステム１００００は、ストレージ装置１０、及びホスト計算機３０を備える。ホスト計算機３０は、ストレージ装置１０を利用する上位装置の一例である。ホスト計算機３０は、例えばアプリケーションサーバである。ホスト計算機３０とストレージ装置１０は、ＳＡＮ（Storage  Area  Network）２０を経由して通信する。ＳＡＮ２０として、例えば、ファイバチャネル、ＳＣＳＩ（Small  Computer  System  Interface）、ｉＳＣＳＩ（internet  Small  Computer   System  Interface）、ＵＳＢ（Universal  Serial  Bus）、ＩＥＥＥ１３９４バス、ＳＡＳ（Serial  Attached  SCSI）等を用いることが可能である。ＳＡＮ２０に代えて、他種の通信ネットワーク（例えばＬＡＮ（Local  Area  Network））が採用されても良い。なお、図では、ホスト計算機３０及びストレージ装置１０がそれぞれ１つであるが、それらのうちの少なくとも一方は複数でも良い。【００６０】
ホスト計算機３０は、ストレージ装置１０に対して制御コマンド等を発行する制御ソフトウェア（図示省略）を実行することにより、制御コマンド等をストレージ装置１０に発行し保守管理をする。その制御コマンドがストレージ装置１０で実行されることにより、ストレージ装置１０が有するＲＡＩＤグループ（以下、ＲＧ）のＲＡＩＤレベルの変更や、容量平準化の起動閾値の調整、および、ＲＧ単位またはプールボリューム単位での圧縮機能のＯＮ／ＯＦＦ設定等の種々の作業を行うことができる。なお、ＲＡＩＤグループは、複数のＳＳＤ（又はＨＤＤ）で構成され、ＲＡＩＤ０，１，１＋０，２，３，４，５，６などの所定のＲＡＩＤレベルに従いデータを記憶する物理記憶媒体グループである。ストレージ装置１０に対して制御コマンドを発行する計算機として、ホスト計算機３０とは別の計算機が使用されても良い。【００６１】
ストレージ装置１０は、ストレージコントローラ１００と、ストレージコントローラ１００に接続されたディスクボックス１１０とを有する。【００６２】
ストレージコントローラ１００は、ストレージ装置１０の動作を制御する。ストレージコントローラ１００は、通信インタフェースデバイスと、メモリと、それらに接続された制御デバイスとを有する。通信インタフェースデバイスとして、フロントエンドの通信インタフェースデバイスであるホスト  Ｉ／Ｆ１０１と、バックエンドの通信インタフェースデバイスであるディスク  Ｉ／Ｆ１０７がある。メモリとして、キャッシュメモリ１０３がある。制御デバイスとして、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））１０４がある。ホスト  Ｉ／Ｆ１０１と、キャッシュメモリ１０３と、プロセッサ１０４と、ディスク  Ｉ／Ｆ１０７は、例えばＰＣＩ（Peripheral  Component  Interconnect）のような専用の接続バスで、内部ネットワーク１０２に接続されており、内部ネットワーク１０２を介して通信可能である。キャッシュメモリ１０３は、例えばＤＤＲ３（Double  Data  Rate3）のような専用の接続バスで、内部ネットワーク１０２に接続されている。【００６３】
ホスト  Ｉ／Ｆ１０１は、ストレージ装置１０がＳＡＮ２０と接続するためのインタフェースである。【００６４】
内部ネットワーク１０２は、ストレージ装置１０の内部に存在するデバイス同士を接続するためのネットワークである。内部ネットワーク１０２は、スイッチを含む。内部ネットワーク１０２に代えて、スイッチ機能やＤＭＡ転送、ＲＡＩＤ演算等のアシスト機能を有するＡＳＩＣｓ（Application Specific  Integrated  Circuit）を用いても良い。【００６５】
プロセッサ１０４は、ストレージ装置１０の全体を制御する。プロセッサ１０４は、複数存在する。この場合、複数のプロセッサ１０４が協同または分担してストレージ装置１０を制御することもできる。【００６６】
キャッシュメモリ１０３は、プロセッサ１０４がストレージ装置１０を制御するために必要なコンピュータプログラムを記憶する領域やデータを一時的に記憶する領域を有する。【００６７】
ディスク  Ｉ／Ｆ１０７は、ストレージコントローラ１００とディスクボックス１１０とを接続するためのインタフェースである。【００６８】
ディスクボックス１１０は、種類の異なるディスク（例えば、ＨＤＤ１１１、ＳＳＤ７００といった不揮発物理記憶媒体）を複数台備えている。種類の同じディスクでＲＡＩＤグループが構成される。そして、各ＲＡＩＤグループから、ユーザデータの格納空間としての論理ボリュームが提供される。なお、図では、ディスクボックス１１０を構成するディスクとして、ＨＤＤ１１１及びＳＳＤ７００が示されているが、ＨＤＤ１１１が無くても良い。【００６９】
図５は、ＳＳＤ７００の構成例を示す図である。【００７０】
ＳＳＤ７００は、複数のフラッシュメモリチップ７８０とそれらに接続されたＳＳＤコントローラ７１０とを有する。ＳＳＤコントローラ７１０は、複数のフラッシュメモリチップに対するデータの書き込み／読み出し、データの圧縮／伸張等の動作を制御する。【００７１】
ＳＳＤコントローラ７１０は、通信インタフェースデバイスと、メモリと、それらに接続された制御デバイス、およびデータの圧縮・伸長を実行するハードウェア回路とを有する。なお、圧縮・伸長機能はＣＰＵがソフトウェアで実現してもよい。通信インタフェースデバイスとして、フロントエンドの通信インタフェースデバイスであるディスク  Ｉ／Ｆ７１１と、バックエンドの通信インタフェースデバイスであるフラッシュ  Ｉ／Ｆ７１７がある。メモリとして、キャッシュメモリ７１６がある。制御デバイスとして、プロセッサ７１３がある。データの圧縮・伸長を実行するハードウェアデバイスとして、圧縮・伸長回路７１８がある。なお、データの圧縮・伸長機能は、プロセッサ７１３が専用のプログラムを実行することで、ソフトウェアによって実現してもよい。ディスク  Ｉ／Ｆ７１１と、プロセッサ７１３と、キャッシュメモリ７１６と、フラッシュ  Ｉ／Ｆ７１７と、圧縮・伸長回路７１８は、内部ネットワーク７１２を介してそれぞれ接続されている。  ディスク  Ｉ／Ｆ７１１は、ストレージコントローラ１００のディスク  Ｉ／Ｆ１０７と専用の接続バスで接続されている。内部ネットワーク７１２は、デバイス同士を接続するためのネットワークである。内部ネットワーク７1２は、スイッチを含んでもよい。スイッチ機能を有したＡＳＩＣｓで代用しても良い。プロセッサ７１３は、ＳＳＤ７００全体を制御する。キャッシュメモリ７１６は、プロセッサ７１３がＳＳＤ７００を制御するために必要なコンピュータプログラムやデータを記憶する領域である。フラッシュ  Ｉ／Ｆ７１７は、ＳＳＤコントローラ７１０とフラッシュメモリチップ７８０とを接続するためのインタフェースである。【００７２】
本実施例において、ＳＳＤは、複数のフラッシュメモリと、それらを制御するコントローラとを備える記憶装置であり、外観形状等がフォームファクタに限定されるものではない。また、フラッシュメモリには、ＮＯＲやＮＡＮＤといった不揮発性の半導体メモリが使用されてよい。また、フラッシュメモリに代えて、磁気抵抗メモリであるＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）や、抵抗変化型メモリであるＲｅＲＡＭ（ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、強誘電体メモリであるＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）等の各種半導体メモリが使用されても良い。  図６は、フラッシュメモリチップ７８０の構成例を示す図である。【００７３】
フラッシュメモリチップ７８０は、複数のブロック７８２と、それらに接続されたフラッシュメモリコントローラ（以下、フラッシュコントローラ）７８１とを有する。フラッシュコントローラ７８１は、フラッシュメモリチップ７８０におけるデータのリード／ライトを制御する。各ブロック７８２は、複数のページ７８３より構成される。フラッシュメモリチップ７８０からのデータのリード、及びフラッシュメモリチップ７８０へのデータのライトは、ページ単位で実行される。データ消去は、ブロック単位で実行される。また、ページ７８３は、複数のコードワード７８４より構成されており、図示はしていないがコードワード７８４には、ホスト計算機３０より格納されたデータとそのデータを保護するためのエラー訂正符号であるＥＣＣ（Ｅｒｒｏｒ  Ｃｈｅｃｋ  ａｎｄ  Ｃｏｒｒｅｃｔｉｏｎ）コードが格納されている。【００７４】
フラッシュメモリチップ７８０は、例えば、ＮＡＮＤ型のフラッシュメモリである。ＮＡＮＤ型のフラッシュメモリでは、データを上書きすることができない。そのため、データがライトされているページに新たなデータをライトする際は、消去済みのページを新たに確保し、そのページに新たなデータをライトする。その際、新たなデータを格納したページを有効ページとして管理し、更新対象のデータを格納していたページを、消去可能な無効ページとして管理する。【００７５】
データ消去は、ブロック単位で実行する必要があるため、消去対象ブロックの中に有効データが存在する場合には、有効データを別のブロックにコピーすることで、消去対象ブロック内の全ページを無効化し、データ消去を実行する。上記、消去済みブロック生成のための一連の処理は、リクラメーション処理と呼ばれる。【００７６】
ＳＳＤコントローラ７１０は、ＳＳＤ７００内の複数のブロック７８２に対して、消去回数の平準化（ウェアレベリング）を行う。ＳＳＤコントローラ７１０は、更新頻度が小さいデータを消去回数の多いブロックに格納し、更新頻度が大きいデータを消去回数の少ないブロックに格納することで、ＳＳＤ７００内のブロックの消去回数を平準化する。【００７７】
また、ＳＳＤコントローラ７１０は、ライトの際に、消去回数の少ない空きブロックを選択してデータを格納することで、消去回数の平準化を行ってもよい。この際、複数のブロックを消去回数に応じて複数のグループに分けて、消去回数が少ないグループからブロックを選択することとしてもよい。【００７８】
ＳＳＤ内の複数のブロックの消去回数が平準化されることで、ＳＳＤの長寿命化が達成される。【００７９】
図７は、ＳＳＤのアドレス空間の構成例を示す図である。【００８０】
ＳＳＤ７００に関して、論理アドレス空間９００と物理アドレス空間８００とが存在する。論理アドレス空間９００は、ＳＳＤ７００がストレージコントローラ１００に対して提供している一意なアドレス空間である。一方、物理アドレス空間８００は、実際のデータが格納される物理記憶領域を識別するためのアドレス空間である。ＳＳＤコントローラ７１０は、論理アドレス空間９００をたとえば物理ページサイズと同じ大きさを持つ複数個の領域（以下、論理ページ）９０１、９０２、９０３、９０４に分割し、それぞれの領域に物理アドレス空間である物理ページ７８３１、７８３２、７８３３を割り当てる。ここで、本実施例ではＳＳＤ７００はデータ圧縮機能および下位レベルの容量仮想化機能を有している。【００８１】
データ圧縮機能により、論理ページ毎にデータが圧縮される。例えば、論理ページ９０１のデータは圧縮データ９１１に、論理ページ９０２のデータは圧縮データ９１２に、論理ページ９０３のデータは圧縮データ９１３に、論理ページ９０４のデータは圧縮データ９１４にそれぞれ変換される。最終的に、圧縮データはコードワード（以下、ＣＷ）の単位で物理ページに格納される。圧縮データがＣＷサイズ以下になった場合は、残りをゼロデータ等でパディングする。【００８２】
図中では、圧縮データ９１１はＣＷ７８４１に、圧縮データ９１２はＣＷ７８４２に、圧縮データ９１３はＣＷ７８４３とＣＷ７８４４に、圧縮データ９１４はＣＷ７８４７に格納される。データパターン等によって、圧縮率が変化するため、圧縮データのサイズは一定とは限らず任意のサイズを持つ。このように、圧縮機能を有するＳＳＤ７００では、一つの物理ページに複数個の論理ページに関連付けられたデータを格納することで、使用する物理ページの数を節約することができる。【００８３】
さらに、ＳＳＤ７００は下位レベルの容量仮想化機能を有し、物理空間よりも大きな論理空間を、外部に提供する。具体的には、論理アドレス空間は、物理ページ数よりも多い論理ページ数を有しており、物理アドレス空間８００が圧縮データで一杯になるまで、論理アドレス空間９００が拡張される。すなわち、すべての物理アドレス空間が最大圧縮率のデータで格納された時に、最大の論理アドレス空間を外部に提供することが出来る。【００８４】
本実施例では、圧縮率は物理ページに含まれるＣＷ数と、圧縮後のデータのＣＷ数から算出されるものとする。例えば、図７の例では、ページ＃ａがＣＷを３つ含むため、圧縮後のデータ＃ａがＣＷ１つ分であれば圧縮率は、３３．３％となる。この場合、１ページ分のデータが１ＣＷ以下のサイズのデータに圧縮された場合に、圧縮率は最大となる。【００８５】
ＳＳＤコントローラ７１０は、論理アドレス空間９００を構成するアドレス範囲（領域）と物理アドレス空間８００を構成するアドレス範囲（領域）とのマッピングを動的に変更することで、ウェアレベリング等を実現することができる。なお、論理アドレス空間９００と物理アドレス空間８００との対応は、プロセッサ７１３が後述の論物変換テーブル２３１００を用いて管理している。本実施例では、ストレージコントローラ１００は、直接ＳＳＤ内の論物変換テーブルを管理していない。ゆえに、プロセッサ７１３がストレージコントローラ１００に対して、ＳＳＤ内部情報の通知を行わない限り、ストレージコントローラ１００は、論理アドレス空間９００と物理アドレス空間８００との対応関係を把握することはできない。【００８６】
次に、上位レベルの容量仮想化技術について詳細を説明する。【００８７】
上位レベルの容量の仮想化技術（例えば、Thin  Provisioning）とは、ストレージ装置１０が有している物理的な容量より大きな仮想的な容量をホスト計算機３０側に提供する技術である。ホスト計算機３０は、仮想的な論理ボリューム（仮想ボリューム）に対してアクセスする。容量の仮想化技術では、ストレージ装置１０がライト要求を受けた場合に、ライト要求のデータのライト先の仮想的な記憶領域（仮想エクステント）に、物理的な記憶領域が割り当てられる。本実施例では、容量仮想化技術において割り当てられる物理的な記憶領域の単位をエクステント単位とする。また、エクステントのサイズは、数ＭＢから数ＧＢなど、任意のサイズに設定されて良い。【００８８】
図８を用いて、上位レベルの容量仮想化技術を詳細に説明する。【００８９】
図８は、上位レベルの容量仮想化技術の概要説明図である。【００９０】
同一種類のディスク（例えばＳＳＤ）でＲＡＩＤグループ（ＲＧ）が構成されている。１以上のＲＧを基にプールボリューム５００が構成されている。【００９１】
エクステントは、ＲＡＩＤグループを分割することにより得られた記憶領域である。つまり、プールボリューム５００は、複数のＲＡＩＤグループを含み、各ＲＡＩＤグループに基づいて構成される複数のエクステントを含む。図では、プールボリューム５００は、ＲＧ２００、ＲＧ３００及びＲＧ４００の３つのＲＧに基づいて構成されている。以下、ＲＧ２００について説明する。【００９２】
ＲＧ２００は、ディスク１  ２１０、ディスク２  ２２０、ディスク３  ２３０より構成されている。さらに、ＲＧ２００は、ＲＡＩＤ５を構築しており、Ｄａｔａ（図では、Ｄ）及びＰａｒｉｔｙ（図では、Ｐ）がディスク（２１０〜２３０）に格納される。【００９３】
ＲＧに基づく記憶領域が複数のエクステントに分割される。ＲＧに基づく記憶領域は、複数のＳＳＤによって提供される論理アドレス空間９００からなる。【００９４】
次に、エクステントの構成について説明する。エクステントは、各ディスクに存在する論理アドレス空間であるエントリーにより構成される。エントリーには１または複数個のＤａｔａおよびＰａｒｉｔｙが格納される。図中では、例えばエントリー２５１には、Ｄ２１１、Ｄ２１２、Ｐ２１３が格納されている。エントリー２５２には、Ｄ２２１、Ｄ２２２、Ｐ２２３が格納されており、さらにエントリー２５３には、Ｄ２３１、Ｄ２３２、Ｐ２３３が格納されている。図示はしていないがエントリー２５４、２５５、２５６も同様に複数個のＤａｔａとＰａｒｉｔｙを格納している。また、エントリー２５１と２５４はディスク２１０内に、エントリー２５２と２５５はディスク２２０内に、また、エントリー２５３と２５６はディスク２３０内にそれぞれ構築されている。【００９５】
各エントリーは、エクステント内に設けられたストライプ列に所属する。ここで、エントリー２５１、２５２と２５３はストライプ列２６０に所属している。また、エントリー２５４、２５５、２５６はストライプ列２６１に所属している。あるストライプ列においては、ＲＡＩＤによる冗長度を保証するためＤａｔａとそれに関連するＰａｒｉｔｙとは別々のディスクに格納されなければならない。具体的には、Ｄ２１１とＤ２２１はＰ２３１により保護されているため、Ｄ２１１とＤ２２１およびＰ２３１はそれぞれ別々のディスクであるディスク２１０、ディスク２２０、ディスク２３０に格納されている。同様に、Ｄ２１２とＤ２３２はＰ２２２により保護されており、Ｄ２２３とＤ２３３はＰ２１３により保護されている。例えば、Ｐ２３１は、Ｄ２１１とＤ２２１のＸＯＲ演算により算出される。この場合、Ｄ２１１またはＤ２２１が更新されると、Ｐ２３１も更新される。このようにＰａｒｉｔｙを付加することで、あるＲＡＩＤグループに属するディスク２１０、ディスク２２０、ディスク２３０のいずれかに障害が発生した場合に、他の正常なディスクから障害が発生したディスクのデータを復元することができる。【００９６】
本実施例では、平準化処理を実行するため、エントリー単位でデータの移動を行う。このとき、ＲＡＩＤの冗長性を保つためには、同一のストライプ列に所属するエントリーが、同一のディスクに２個以上存在してはならない。たとえば、データ移動により、エントリー２５４とエントリー２５２のデータが移動されたとする。このとき、本来別々のディスクに格納されなければならない、Ｄ２１１とＤ２２１とＰ２３１のうち、Ｄ２１１とＤ２２１とが同一のディスク２１０内に存在してしまうことになる。これは、ＲＡＩＤによるデータ保護能力が低下することを意味する。すなわち、ストレージコントローラは、ＲＡＩＤの冗長性を保つために、平準化処理実行時には、同一のディスクに、同一のストライプ列に所属するエントリーが２つ以上存在することがないように、移動対象データを選択しなければならない。【００９７】
また、エクステントはエントリーの集合体であり、例えばエクステント２４０はエントリー２５１、２５２、２５３、２５４、２５５、２５６より構成されている。【００９８】
図８では、ＲＧ２００から、エクステント２４０、エクステント２４１及びエクステント２４２が作成されている。ＲＧ３００の記憶領域から、エクステント３４０、エクステント３４１及びエクステント３４２が作成されている。ＲＧ４００の記憶領域から、エクステント４４０、エクステント４４１及びエクステント４４２が作成されている。【００９９】
図８の例では、エクステントは、ブロックよりもサイズが大きい記憶領域である。エクステントのサイズは、例えば、ブロックのＮ倍（Ｎは２以上の整数）である。なお、エクステントは、複数のデータと複数のデータから算出されるパリティのセットを１つ以上含むように設定しても良い。【０１００】
仮想ボリューム６００は、ホスト計算機３０がユーザデータを格納するための仮想的な論理ボリュームである。なお、仮想ボリューム６００の容量として定義される容量は、ストレージ装置１０が有する記憶媒体の容量の合計よりも大きな記憶容量とすることができる。なお、仮想ボリューム６００は任意の数の仮想エクステント６０１から６０７によって構成されており、例えば、図６に示す１つの仮想エクステントに、１つのエクステントが対応付けられているが、１つの仮想エクステントに、複数のエクステントが対応付けられても良い。仮想ボリューム６００は、仮想アドレス（仮想ボリュームを構成する論理アドレス）を有し、仮想アドレスを所定の範囲毎に区切って仮想エクステントが構成される。ホスト計算機３０は、仮想ボリューム６００の仮想アドレスに対して、リード／ライト要求を発行する。なお、１つのプールボリュームから、複数の仮想ボリューム６００に対してエクステントが割当てられても良い。【０１０１】
また、実線で示されている仮想エクステント６０１〜６０４は、ＲＧ２００、３００、４００からエクステントが割当てられている仮想エクステントである。すなわち、仮想エクステント６０１に対してはエクステント２４０が、仮想エクステント６０２に対してはエクステント２４２が、仮想エクステント６０３に対してはエクステント４４２が、仮想エクステント６０４に対してはエクステント３４１がそれぞれ割当てられている。【０１０２】
なお、点線で示されている仮想エクステント６０５〜６０７は、データのライト先として指定されたアドレスが属している仮想エクステントではないため、仮想エクステント６０５〜６０７にはエクステントは未割当てとなっている。【０１０３】
図９は、容量平準化処理と仮想ボリュームの関係の一例を示す図である。【０１０４】
ＳＳＤ２１０、ＳＳＤ２２０、ＳＳＤ２３０がＲＧ２００を構築しており、ＳＳＤ２１０の論理アドレス空間の一部に、エントリー２５１がマッピングされている。同様に、ＳＳＤ２２０の論理アドレス空間の一部に、エントリー２５２が、また、ＳＳＤ２３０の論理アドレスの一部に、エントリー２５３がそれぞれマッピングされている。なお、エントリー２５１、２５２、２５３はＳＳＤの論理アドレス空間に対応しているため、ＳＳＤ内部のデータ圧縮の有無によらず、ストレージコントローラからは一定のサイズとして認識される。さらに、エントリー２５１、２５２、２５３はエクステント２４０にマッピングされており、エクステント２４０は仮想ボリューム６００の一部としてマッピングされている。【０１０５】
次に、エントリー２５１に対応するデータであるＤ１は、ＳＳＤ２１０内部で圧縮データ８０１として格納されている。また、エントリー２５２に対応するデータであるＤ２は、ＳＳＤ２２０内部で圧縮データ８０２として格納されている。さらに、エントリー２５３に対応するデータであるＤ３は、ＳＳＤ２３０内部で圧縮データ８０３として格納されている。ＳＳＤの物理アドレス空間内に格納されている圧縮データ８０１、８０２、８０３は、データパターンの違いによるデータ圧縮率の違いにより、サイズに差が出ている。図において、圧縮データ８０１、８０２、８０３を示す四角の大きさは実際のデータのサイズを示しており、そのサイズは８０１＜８０２＜８０３である。すなわち、８０１がもっとも圧縮率が高く、８０３がもっとも圧縮率が低いことを意味している。この圧縮率の違いにより、ＳＳＤ２１０、２２０、２３０の空き物理容量が不均一な状態となっている。さらには、ＳＳＤ２３０の空き物理容量のサイズがもっとも少なく枯渇の可能性も高い。そこで、ストレージコントローラは容量の平準化により、空き物理容量の不均一な状態を解消する。【０１０６】
具体的には、空き物理容量のもっとも少ないＳＳＤ２３０と、空き物理容量がもっとも多いＳＳＤ２１０をデータ移動対象ＳＳＤとして選択し、次に、ＳＳＤ２３０のなかで物理使用量の大きい（すなわち圧縮率の低い）データであるデータ８０３と、ＳＳＤ２１０のなかで物理使用量の小さい（すなわち圧縮率の高い）データであるデータ８０１とを、交換対象として選択し、データの移動（交換）を行う。【０１０７】
具体的にデータの移動とは、ストレージコントローラ１００がＳＳＤ２１０から圧縮データ８０１をキャッシュメモリ１０３にリードし、リードしたデータをＳＳＤ２３０にライトすることであり、さらに、ストレージコントローラ１００がＳＳＤ２３０から圧縮データ８０３をキャッシュメモリ１０３にリードし、リードしたデータをＳＳＤ２１０にライトすることである。【０１０８】
厳密には、ＳＳＤからストレージコントローラに転送されるデータは、非圧縮なデータである。そのため、ＳＳＤ２１０から圧縮データ８０１をキャッシュメモリにリードする際には、ＳＳＤ２１０は内部で圧縮データ８０１を伸長し、非圧縮状態のデータであるＤ１をストレージコントローラに転送する。その後、ストレージコントローラは非圧縮状態のデータＤ１を、移動先のＳＳＤであるＳＳＤ２３０へ転送する。非圧縮状態のデータＤ１を受け取ったＳＳＤ２３０は、内部でデータ圧縮を実行し、再度、圧縮データ８０１に変換したうえで、自身の物理領域に格納する。上記の動作は、ＳＳＤ２３０からＳＳＤ２１０へ、圧縮データ８０３を移動させる際にも同様の動きとなる。【０１０９】
上記、容量の平準化処理により、物理使用量の大きな圧縮データ８０３を新たに格納したＳＳＤ２１０の、空き物理容量は減少する。一方、物理使用量の小さな圧縮データ８０１を新たに格納したＳＳＤ２３０は、空き物理容量が拡大する。これにより、ＳＳＤ間の空き物理容量の不均一さが解消される。【０１１０】
このようにホスト計算機は一定の容量の仮想ボリュームを認識し、仮想ボリュームに対してリード／ライト要求を発行することができる。容量平準化処理が実行され各ＳＳＤが提供することができる論理空間の容量が増加した場合は、プールボリュームの容量が増加される。これにより、ホスト計算機は容量の変動を認識することなく、業務を継続することが可能となる。【０１１１】
なお、ＳＳＤ間でデータが移動されると、ホスト計算機３０は、データへのアクセス先を移動先のＳＳＤへ変更しなければならない。しかし、仮想ボリューム６００を用いてアドレスが変換されることで、ホスト計算機３０は、アクセス先を変更することなく、移動先のデータへアクセスできる。つまり、仮想エクステント６００の仮想アドレスとの関連付けが、ストレージコントローラ１００によって、移動元のエントリー２５１の論理アドレスから、移動先のエントリー２５３の論理アドレスへ変更される。ホスト計算機３０は、仮想ボリューム６００にアクセスすることで、アクセス先のアドレスを変更することなく、容量の平準化処理を行うことができる。【０１１２】
アドレス変換に仮想ボリュームを用いるのは一例であり、仮想ボリュームを用いずにアドレス変換が行われてもよい。【０１１３】
図１０は、ストレージコントローラ１００が備えるキャッシュメモリ１０３の構成例を示す図である。【０１１４】
キャッシュメモリ１０３は、プログラム領域１２０００、テーブル領域１３０００及びデータキャッシュ領域１４０００を有する。プログラム領域１２０００及びテーブル領域１３０００は、ストレージ装置１０を制御するためのプログラムや各種テーブルが格納される領域である。データキャッシュ領域１４０００は、ユーザデータを一時的に格納するために使用される領域である。【０１１５】
プログラム領域１２０００は、ライトＩ／Ｏプログラム１２１００、リードＩ／Ｏプログラム１２２００、容量平準化プログラム１２３００、ＳＳＤ情報取得プログラム１２４００を記憶する。【０１１６】
ライトＩ／Ｏプログラム１２１００は、ホスト計算機３０からのライト要求を処理するプログラムである。リードＩ／Ｏプログラム１２２００は、ホスト計算機３０からのリード要求を処理するプログラムである。容量平準化プログラム１２３００は、ＳＳＤの物理容量の平準化処理を行うプログラムである。ＳＳＤ情報取得プログラム１２４００は、ＳＳＤ７００の内部情報を取得するためのプログラムである。【０１１７】
テーブル領域１３０００は、ディスク管理テーブル(以下、テーブルをＴＢＬと言う)１３１００、ＲＧ管理ＴＢＬ１３２００、プール管理ＴＢＬ１３３００、エクステント管理ＴＢＬ１３４００、仮想ボリューム管理ＴＢＬ１３５００及びエントリー管理ＴＢＬ１３６００を有する。【０１１８】
ディスク管理ＴＢＬ１３１００は、ディスクボックス１１０に格納されているディスクに関する情報を格納するテーブルである。ＲＧ管理ＴＢＬ１３２００は、ＲＡＩＤグループに関する情報を格納するテーブルである。プール管理ＴＢＬ１３３００は、プールボリュームの情報を格納するテーブルである。エクステント管理ＴＢＬ１３４００は、エクステントに関する情報を格納するテーブルである。仮想ボリューム管理ＴＢＬ１３５００は、仮想ボリュームに関する情報を格納するテーブルである。エントリー管理格納ＴＢＬ１３６００は、エントリーに関する情報を格納するテーブルである。各テーブルの詳細は後述する。【０１１９】
データキャッシュ領域１４０００には、ホスト計算機３０からのライト要求及びリード要求に従うユーザデータ１４１００が一時的に記憶される。ユーザデータ１４１００は、ホスト計算機３０が使用するデータである。【０１２０】
図１１は、ディスク管理ＴＢＬ１３１００の構成例を示す図である。【０１２１】
ディスク管理ＴＢＬ１３１００は、ディスク毎に、ディスク＃１３１０１、ディスク種別１３１０２、最大論理容量１３１０３、使用可能論理容量１３１０４、使用中論理容量１３１０５、空き論理容量１３１０６、最大物理容量１３１０７、使用中物理容量１３１０８、空き物理容量１３１０９、最大圧縮率１３１１０、平均圧縮率１３１１１、圧縮モード１３１１２を有する。【０１２２】
ディスク＃１３１０１は、ディスクの識別子であり、ユニークな番号である。ディスク  種別１３１０２は、ディスクの種別を表しており、例えば、ＳＳＤ（ＳＬＣ）、ＳＳＤ（ＭＬＣ）、ＨＤＤなどを表す。ここで、ＳＳＤは、使用するＮＡＮＤフラッシュメモリの種類により、ＳＬＣ（Single  Level  Cell）タイプと、ＭＬＣ（Multi  Level  Cell）タイプ、およびＴＬＣ（Triple  Level  Cell）タイプの３類が存在する。ＳＬＣは、高速、長寿命、低容量なフラッシュメモリであり、数十万から数万回オーダーのブロック消去が可能である。一方のＭＬＣは、低速、短寿命、及び大容量なフラッシュメモリであり、数万から数千回オーダーのブロック消去が可能である。ＴＬＣはＭＬＣに比べ、さらに、低速、短寿命であるが、大容量なフラッシュメモリであり数千から数百回オーダーのブロック消去が可能である。【０１２３】
最大論理容量１３１０３は、当該のＳＳＤが外部装置に提供可能な論理容量の上限値であり、図１の最大論理容量３０００１に等しい。使用可能論理容量１３１０４は、外部装置に提供可能な論理容量であり、図１の使用可能論理空間３０００２のサイズに等しい。使用中論理容量１３１０５は、外部装置が使用済みの論理容量であり、図１の使用中論理空間３０００５のサイズに等しい。空き論理容量１３１０６は、使用可能な論理空間のなかで外部装置が使用していない容量であり、図１の空き論理空間３０００４のサイズに等しい。最大物理容量１３１０７は、ＳＳＤが搭載する物理記憶媒体の容量の合計値である。使用中物理容量１３１０８は、圧縮データの格納量を示しており、図１の使用中物理空間３０００７のサイズに等しい。空き物理容量１３１０９は、データが格納されていない物理空間の容量であり、図１の空き物理空間３０００６のサイズに等しい。最大圧縮率１３１１０は、当該のＳＳＤが提供することができる、圧縮率の最大値である。平均圧縮率は、ＳＳＤの圧縮率の平均値であり、使用中物理容量１３１０８÷使用中論理容量１３１０５により算出される。本実施例では、最大論理容量１３１０３、最大物理容量１３１０７及び最大圧縮率１３１１０の値はディスク毎に予め設定されている。その他の値は、後述するようにストレージコントローラが情報を更新する。【０１２４】
圧縮モード１３１１２は、ＳＳＤの圧縮モードが、「同期」モードであるか「非同期」モードであるかを示すものである。ここで、同期圧縮モードとは、ＳＳＤがストレージコントローラからライトデータを受け取ってからＦＭにデータを格納する前に圧縮を実行し、ライト要求の応答にデータ圧縮率も返却するモードである。【０１２５】
一方、非同期圧縮モードとはＳＳＤがリクラメーションやリフレッシュなどの、非同期処理を行う際に圧縮を実行するモードである。非同期モードの場合は、ストレージコントローラからのライトデータは圧縮されることなくＦＭにそのまま格納される。その後、任意のタイミングで非同期処理が実行された際に、圧縮を行うモードである。【０１２６】
同期圧縮モードは、ストレージコントローラがデータの圧縮結果を即座に取得できるという利点を有している。また、ＦＭへのデータ書き込み量が削減されるため、長寿命化の利点もある。しかし、圧縮のための処理が別途発生するため、性能への影響が発生する。  一方、非同期圧縮モードはデータの圧縮が効かない期間が存在するが、ＳＳＤで必然的に発生するリクラメーションやリフレッシュに伴う、内部のデータ移動に併せて圧縮を実行するため、性能インパクトを押さえることができる。【０１２７】
なお、圧縮モードの切り替えは、ストレージコントローラが任意のタイミングでＳＳＤに設定することができる。【０１２８】
図１２は、ＲＧ管理テーブル１３２００の構成例を示す図である。【０１２９】
ＲＧ管理ＴＢＬ１３２００は、ＲＧ毎に、ＲＧ＃１３２０１、ディスク種別１３２０２、ＲＡＩＤ  Ｌｅｖｅｌ１３２０３、ＲＡＩＤ構成１３２０４、ディスク＃１３２０５、圧縮モード１３２０６を有する。【０１３０】
ＲＧ＃１３２０１は、ＲＧの識別子であり、ユニークな番号である。ディスク種別１３２０２は、ＲＧを構成するディスクの種別を表す。ＲＧは、同一種類のディスクから構成される。【０１３１】
ＲＡＩＤ  Ｌｅｖｅｌ１３２０３は、ＲＧのＲＡＩＤレベルを表し、例えば、ＲＡＩＤ  １＋０、１、３、４、５、６といった種々の値である。ＲＡＩＤ構成１３２０４は、ＲＡＩＤを構成するデータディスク（データを格納するディスク）の数、及びパリティディスク（パリティを格納するディスク）の数を表す。ディスク＃１３２０５は、ＲＧを構成するディスクの識別子である。【０１３２】
圧縮モード１３２０６は、ＲＧを構成するディスクに対する圧縮機能の設定状況を示している。有効の場合は「ＯＮ（同期）」「ＯＮ（非同期）」、無効の場合は「ＯＦＦ」が格納される。【０１３３】
図１３は、プール管理ＴＢＬ１３３００の構成例を示す図である。【０１３４】
プール管理ＴＢＬ１３３００は、プールボリューム毎に、プールボリューム＃１３３０１、ＲＧ＃１３３０２を有する。【０１３５】
プールボリューム＃１３３０１は、プールボリュームの識別子であり、ユニークな番号である。ＲＧ＃１３３０２は、プールボリュームを構成する全てのＲＧのＲＧ番号を表す。図１３では、プールボリュームを１つ例示しているが、ストレージ装置内で複数のプールボリュームが管理されても良い。【０１３６】
図１４、エントリー管理ＴＢＬ１３６００の構成例を示す図である。【０１３７】
エントリー管理ＴＢＬ１３６００は、ディスク毎に、ディスク＃１３６０１、エントリー＃１３６０２、サイズ１３６０３、Ｓｔａｒｔ―ＬＢＡ１３６０４、Ｌｅｎｇｔｈ１３６０５、ステータス１３６０６、割当て先エクステント＃１３６０７、物理使用量１３６０８を有する。【０１３８】
ディスク＃１３６０１は、ディスクの識別子であり、ストレージ装置１０内でユニークな番号である。エントリー＃１３６０２はディスク内に作成されたエントリーの識別子であり、ディスクごとにユニークな識別子である。サイズ１３６０３は、エントリーの容量を例えばＢｙｔｅ単位で表記したものである。Ｓｔａｒｔ―ＬＢＡ１３６０４及びＬｅｎｇｔｈ１３６０５は「当該エントリーが、何番のＬＢＡから何番のＬＢＡまでのアドレス空間を使用して作成されているか」を示す。なお、エントリー＃１３６０２は、ＳＳＤの最大論理容量に対応する個数が存在する。すなわち、最大論理容量が８００ＧＢのＳＳＤに、１２ＭＢのエントリーを作成するケースでは、８００ＧＢｘ１０２４÷１２ＭＢ＝６８２６６個のエントリーがＳＳＤ内に作成されることとなる。【０１３９】
ステータス１３６０６は、当該のエントリーが「割当て済み」「未割当て」「使用不可」のいずれの状態にあるかを示す。「割当て済み」とは、当該エントリーが使用中論理空間３０００５の範囲内に存在することを示す。「未割当て」とは、当該エントリーが、空き論理空間３０００４の範囲内に存在することを示す。なお実施例１では、ストレージコントローラがエントリーを使用する際には、ステータス１３６０６が「未割当て」のエントリーのなかで、エントリー＃１３６０２が最も若いエントリーから使用する。つぎに「使用不可」とは、当該エントリーが、使用不可論理空間３０００３の範囲内に存在することを示す。【０１４０】
当該のＳＳＤにおいて、使用可能な論理空間が増加するということは、「使用不可」状態のエントリーが「未割当て」状態に変更されるということを意味する。反対に、当該のＳＳＤにおいて、使用可能な論理空間が減少するということは、「未割当て」状態のエントリーが「使用不可」状態に変更されるということを意味する。このステータス管理により、ストレージコントローラはＳＳＤから提供される論理容量の変動に対応する。例えば、実施例１において、ＳＳＤの提供可能な論理容量が８００ＧＢから７００ＧＢに変動した場合、ストレージコントローラ１００は７００ＧＢから８００ＧＢのＬＢＡ空間に対応するエントリーのステータスを「使用不可」に変更する。また、容量平準化処理により、ＳＳＤが提供可能な論理容量が５００ＧＢから７００ＧＢに増加した場合、ストレージコントローラ１００は５００ＧＢから７００ＧＢのＬＢＡ空間に対応するエントリーのステータスを「未割当て」に変更する。【０１４１】
割当先エクステント＃１３６０７は、当該エントリーの割当て先を管理する。当該エントリーが割当て済みの場合（ステータス１３６０６が「割当て済み」）は、そのエントリーを使用するエクステント＃が格納される。一方、当該エントリーが未割当ての場合（ステータス１３６０６が「未割当て」もしくは「使用不可」）は、無効を示す「Ｎ／Ａ」が格納される。【０１４２】
物理使用量１３６０８は当該エントリーに格納されたデータがＳＳＤ内で圧縮された場合に、圧縮後のデータを格納した物理記憶領域のサイズを示すものであり、そのサイズを例えばＢｙｔｅ単位で表記したものである。なお、本数値は、ＳＳＤから取得した情報を元に更新される。また、サイズに代えて、圧縮率などのパーセント表記であっても良い。なお、当該エントリーが未割当てのものについては、無効を示す「Ｎ／Ａ」が格納される。【０１４３】
図１５は、エクステント管理ＴＢＬ１３４００の構成例を示す図である。【０１４４】
エクステント管理ＴＢＬ１３４００は、エクステント毎に、ＲＧ＃１３４０１、エクステント＃１３４０２、サイズ１３４０３、ステータス１３４０４、ストライプ列＃１３４０５、ディスク＃１３４０６、エントリー＃１３４０７を有する。【０１４５】
ＲＧ＃１３４０１は、ＲＧの識別子であり、ユニークな番号である。エクステント＃１３４０２は、エクステントの識別子であり、ユニークな番号である。サイズ１３４０３はエクステントの容量を例えばＢｙｔｅ単位で表記したものである。ステータス１３４０４は、当該のエクステントが「割当て済み」「未割当て」のいずれの状態にあるかを示す。「割当て済み」とは、当該のエクステントが仮想エクステントに割当て済みであることを示す。一方、「未割当て」とは、当該のエクステントが仮想エクステントに割り当てられていないことを示す。【０１４６】
ストライプ＃１３４０５、ディスク＃１３４０６、エントリー＃１３４０７は、当該エクステントのストライプ列に属するディスクとエントリーをそれぞれ識別するものである。【０１４７】
図１６は、仮想ボリューム管理ＴＢＬ１３５００の構成例を示す図である。【０１４８】
仮想ボリューム管理ＴＢＬ１３５００は、仮想ボリューム毎に、仮想ボリューム＃１３５０１、仮想容量１３５０２、割当済容量１３５０３、仮想エクステント＃１３５０４及び割当てエクステント＃１３５０５を有する。【０１４９】
仮想ボリューム＃１３５０１は、仮想ボリュームの識別子であり、ユニークな番号である。仮想容量１３５０２は、仮想ボリュームの仮想的な容量である。この仮想的な容量がホスト計算機３０に提供される。割当済容量１３５０３は、仮想ボリュームに実際に割当てられているエクステントの容量の合計値である。なお、本数値は物理量ではなく、論理量である。【０１５０】
仮想エクステント＃１３５０４は、仮想ボリュームに含まれる仮想エクステントの識別子である。仮想ボリューム＃０には、仮想エクステント＃０〜ｎが含まれることを示す。  割当てエクステント＃１３５０５は、仮想ボリュームに割り当てられているエクステントの識別子（番号）である。ストレージコントローラ１００は、仮想エクステントごとに、エクステントの割当て状態を管理する。つまり、仮想エクステント＃０には、エクステント＃０が割当てられており、仮想エクステント＃１には、エクステント＃１００が割当てられている。ただし、エクステントが未割当ての仮想エクステントのエクステント＃１３５０５が「―」となる。つまり、仮想エクステント＃ｎには、物理的な記憶領域を提供するエクステントが割当てられていない。【０１５１】
図１７は、ＳＳＤ７００におけるキャッシュメモリ７１６の構成例を示す図である。【０１５２】
キャッシュメモリ７１６は、プログラム領域２２０００、テーブル領域２３０００、及びデータキャッシュ領域２４０００を有する。【０１５３】
プログラム領域２２０００及びテーブル領域２３０００は、ＳＳＤ７００を制御するためのプログラムや各種テーブルが格納される領域である。データキャッシュ領域２４０００は、ユーザデータを一時的に格納するために使用される領域である。【０１５４】
プログラム領域２２０００は、ライトＩ／Ｏプログラム２２１００、リードＩ／Ｏプログラム２２２００、ＳＳＤ内ＷＬプログラム２２３００、空き容量生成プログラム２２４００、及びＳＳＤ内部情報通信プログラム２２５００、圧縮・伸長プログラム２２６００を有する。【０１５５】
ライトＩ／Ｏプログラム２２１００は、ストレージコントローラ１００からのライト要求を処理するプログラムである。リードＩ／Ｏプログラム２２２００は、ストレージコントローラ１００からのリード要求を処理するプログラムである。ＳＳＤ内ＷＬプログラム２２３００は、ＳＳＤ内部でのＷＬを実行するためのプログラムである。空き容量生成プログラム２２４００は、ＳＳＤ７００の空き容量の枯渇を回避するために行われるリクラメーション処理を実行するプログラムである。【０１５６】
ＳＳＤ内部情報通信プログラム２２５００は、ストレージコントローラ１００の要求に従ってＳＳＤの内部情報を作成し、そのＳＳＤ内部情報をストレージコントローラ１００に通知するためのプログラムである。圧縮・伸長プログラムは、ＳＳＤコントローラ７１０が、プロセッサ７１３を用いてソフトウェアでデータの圧縮・伸長を実現するためのプログラムである。【０１５７】
テーブル領域２３０００は、論物変換ＴＢＬ２３１００、ブロック管理ＴＢＬ２３２００、容量管理ＴＢＬ２３３００を有する。【０１５８】
論物変換ＴＢＬ２３１００は、ＳＳＤ７００の論理アドレス空間と物理アドレス空間との対応を管理するためのテーブルである。ブロック管理ＴＢＬ２３２００は物理ブロックやページの状態を管理するためのテーブルである。容量管理テーブル２３３００はＳＳＤの各種容量を管理するためのテーブルである。【０１５９】
データキャッシュ領域２４０００は、ユーザデータ２４１００を格納する領域を有する。ここで言うユーザデータ２４１００は、ブロックに書き込まれるデータ及びブロックから読み出されたデータである。【０１６０】
図１８は、論物変換ＴＢＬ２３１００の構成例を示す図である。【０１６１】
論物変換テーブル２３１００は、ＬＢＡ２３１０１、論理ページ＃２３１０２、論理ページサイズ２３１０３、ステータス２３１０４、ブロック＃２３１０５、ページ＃２３１０６、ＣＷ位置２３１０７、物理使用量２３１０８、通知要否フラグ２３１０９を有する。【０１６２】
ＬＢＡ２３１０１は、ストレージコントローラ１００に提供するＬＢＡの開始位置を示す。なお、ＳＳＤ内部において、フラッシュメモリのＩ／Ｏ単位はページであるため、ＬＢＡ２３１０１の数値はページサイズの倍数で管理されている。ＳＳＤは、外部装置に対しては、連続した数値のＬＢＡを提供する。またＬＢＡの最大値は、最大論理容量に等しい。論理ページ＃２３１０２は、論理ページ番号の通し番号である。論理ページサイズ２３１０３は、論理ページのサイズをＢｙｔｅで表したものである。【０１６３】
ステータス２３１０４は、各論理ページが、「使用中」「未使用」「使用不可」のいずれであるかを示すフィールドである。「使用中」とは、当該の論理ページにデータが格納されていること、すなわち当該の論理ページに対応するＬＢＡ空間がエントリーに割り当たっていることを示している。一方、「未使用」とは当該の論理ページにデータが格納されていないこと、すなわち当該の論理ページに対応するＬＢＡ空間がエントリーに割り当てられていないことを示している。「使用不可」とは、使用可能論理容量が減少することにより、当該の論理ページが使用不可論理空間内に属していることを示している。すなわち、当該の論理ページに対応するＬＢＡ空間がストレージコントローラにも使用不可として認識されていることを示している。【０１６４】
ブロック＃２３１０５、ページ＃２３１０６、ＣＷ＃位置２３１０７は、論理ページに対応する物理アドレス空間の情報を示している。本実施例ではＳＳＤがデータ圧縮機能を有するため、論理ページのデータが圧縮され、物理ページの特定のＣＷに格納されるというケースが発生する。そこで、ＣＷ位置２３１０７は、データが格納されているＣＷに対して「１」を、データが格納されていないＣＷに対して「０」を設定する。反対に、２ページ以上にわたる論理アドレス空間が、１ページの物理ページにマッピングされることもあり得る。【０１６５】
物理使用量２３１０８は、当該の論理ページに対応するデータが物理ページに格納された際の、データ量を表す。例えば、論理ページ＃０では、１６ＫＢの論理ページに対応するデータが３ＫＢに圧縮され、ブロック＃０、ページ＃０のＣＷ＃１〜３に格納されていることを示している。【０１６６】
通知要否フラグ２３１０９は、非同期処理での圧縮により、物理容量が変化したときに、その結果をストレージコントローラに伝えているか否かを示すフィールドである。伝える必要がある場合は「ＯＮ」が、すでに伝えている場合や、容量の変化がない場合などは、伝える必要がないため「ＯＦＦ」がそれぞれ格納される。なお、フィールドが「ＯＮ」の物については、後述の定期監視処理での伝達の対象となる。【０１６７】
ここで、ＳＳＤ内部でのブロックおよびページ管理について説明する。ＳＳＤが使用するＦＭの読み書き単位はページである。さらにＦＭは同一のページに対して上書きができない追記型デバイスであり、データは空きページにライトしなければならない、という特性を有している。【０１６８】
そのためＳＳＤは、あるページに対してデータの更新（上書き）が発生した際には、最新のデータを「有効データ」、更新により最新では無くなったデータを「無効データ」として管理する。上述のとおり、ＳＳＤは更新データを格納するための、空きページを常に必要とする。この空きページは、ブロックを消去することで生成される。ただし、ブロックを消去するためには、消去対象ブロック内の全ページが無効化している必要がある。そのため、有効ページが存在する場合には、そのページを無効化するための、別ブロックへのコピーがＳＳＤ内部で発生する。この、空きページ生成のための、有効データのコピーやブロック消去を含めた一連の処理が、リクラメーション処理である。【０１６９】
上述したような更新データの追記や、リクラメーション処理のために、ＳＳＤは最新データ（ユーザデータ）を格納する領域であるユーザデータ領域に加えて、更新データを追記する領域（更新領域）を有する。ユーザデータ領域と更新領域は物理的に区別されていてもよい。また、ユーザデータ領域と更新領域それぞれに所定の容量が確保されていれば、物理的に区別されていなくてもよい。本実施例では、物理空間とは、ユーザデータを格納する領域に基づく空間とする。【０１７０】
図１９は、ブロック管理テーブル２３２００の構成例を示す図である。【０１７１】
ブロック管理テーブル２３２００は、ブロック＃２３２０１、ページ＃２３２０２、ページステータス２３２０３、ＣＷ＃２３２０４、ＣＷステータス２３２０５、論理ページ＃２３２０６を有する。【０１７２】
ブロック＃２３２０１およびページ＃２３２０２は、ブロックおよびページの識別子である。ページステータス２３２０３は当該のページが「使用中（有効）」「使用中（無効）」「空」のいずれの状態にあるかを示すフィールドである。【０１７３】
すなわち、ページステータス２３２０３において、「使用中（有効）」とは、当該のページに有効なデータが格納されていることを示しており、例えばリクラメーションでのコピー対象となる。「使用中（無効）」とは、当該データに無効データが格納されていることを示しており、データ消去の対象となる。また、「空」とは、データは消去済であるが、当該のページが未使用であることを示している。【０１７４】
ＣＷ＃２３２０４およびＣＷステータス２３２０５は、当該のＣＷが「有効」「無効」「空」いずれの状態にあるかを管理するものである。「有効」とは、当該のＣＷに有効データが格納されていることを示している。「無効」とは、当該のＣＷには無効なデータが格納されていることを示している。「空」とは、当該のＣＷが未使用の状態であることを示している。【０１７５】
論理ページ＃２３２０６は、当該のＣＷのステータスが「有効」である場合、そのＣＷがどの論理ページに対応しているかを示す。なお、当該のＣＷのステータスが「無効」である場合、「Ｎ／ａ」が格納される。【０１７６】
ＣＷステータス２３２０５が「有効」のＣＷが、一つ以上存在するページのページステータス２３２０３は「使用中（有効）」となる。一方、ページステータス２３２０３が「使用中（無効）」となっているページの、ＣＷステータス２３２０５はすべて「無効」となる。また、ページステータス２３２０３が「空」となっているページの、ＣＷステータス２３２０５はすべて「空」となる。【０１７７】
図２０は、容量管理テーブル２３３００の構成例を示す図である。【０１７８】
容量管理テーブル２３３３０は、最大論理容量２３３０１、使用可能論理容量２３３０２、使用中論理容量２３３０３、空き論理容量２３３０４、最大物理容量２３３０５、使用中物理容量２３３０６、空き物理容量２３３０７、最大圧縮率２３３０８、平均圧縮率２３３０９を有する。なお本テーブルは、ディスク管理テーブル１３１００の、ディスク種別１３１０２から平均圧縮率１３１１１までと同様の構成を取っており、後述の内部情報取得処理（図２６）において、ストレージコントローラは、ＳＳＤから取得した本テーブルの数値を、ディスク管理テーブル１３１００に反映する。【０１７９】
最大論理容量２３３０１は、当該のＳＳＤが外部装置に提供可能な論理容量の上限値であり、本数値は最大論理容量１３１０３に対応する。【０１８０】
使用可能論理容量２３３０２は、外部装置に提供可能な論理容量であり、使用可能論理容量１３１０４に対応する。本数値は、ステータス２３１０４が「使用中」と「未使用」である論理ページの総容量に等しい。【０１８１】
使用中論理容量２３３０３は、外部装置により使用されている論理容量であり、使用中論理容量１３１０５に対応する。本数値は、ステータス２３１０４が「使用中」である論理ページの総容量に等しい。【０１８２】
空き論理容量２３３０４は、外部装置が使用していない論理容量であり、空き論理容量１３１０６に対応する。本数値は、ステータス２３１０４が「未使用」である論理ページの総容量に等しい。【０１８３】
最大物理容量２３３０６は、ＳＳＤが搭載する物理記憶媒体の合計値であり、最大物理容量１３１０７に対応する。なお、ＳＳＤが物理的な記憶領域として更新領域を有する場合は、最大物理容量２３３０６は、更新領域を除いたユーザデータを格納するために使用される領域の容量とする。【０１８４】
使用中物理容量２３３０６は、圧縮データの格納量を示しており、使用中物理容量１３１０８に対応する。本数値は、ＣＷステータス２３２０５が「有効」であるＣＷの総容量に等しい。もしくは、ページステータス２３２０３が「使用中（有効）」「使用中（無効）」となっているページの総容量としても良い。【０１８５】
空き物理容量２３３０７は、データが格納されていない物理空間の容量であり、空き物理容量１３１０９に対応する。本数値は、ＣＷステータス２３２０５が「空」であるＣＷの総容量に等しい。もしくは、ページステータス２３２０３が「空」となっているページの総容量としても良い。【０１８６】
最大圧縮率２３３０８は、当該のＳＳＤが提供することができる、圧縮率の最大値であり、最大圧縮率１３１１０に対応する。【０１８７】
平均圧縮率２３３０９は、ＳＳＤ内のデータの圧縮率の平均値であり、平均圧縮率１３１１１に対応する。本数値は、使用中物理容量２３３０６÷使用中論理容量２３３０３により算出される。【０１８８】
なお、物理空間には、外部装置から格納されたデータの他に、ＳＳＤが自身で使用する管理情報等も格納してよい。その管理情報とは、例えば、論物変換ＴＢＬ２３１００やブロック管理ＴＢＬ２３２００などである。【０１８９】
図２１は、ストレージコントローラ１００のタスクの概要を示すシーケンス図である。  ストレージコントローラ１００は、ホスト  Ｉ／Ｆ１０１に対して、ホスト計算機３０から送信されたＩ／Ｏ要求の有無をチェックする（Ｓ１００）。ホスト計算機３０からのＩ／Ｏ要求がある場合（Ｓ１００：Ｙｅｓ）は、その処理内容がリードコマンドであるか、ライトコマンドであるかをチェックする（Ｓ１０１）。処理内容がリードコマンドである場合（Ｓ１０１：リードコマンド）は、データリード処理を実行する（Ｓ１０２）（詳細は図２５で詳述）。その後、Ｓ１０４へと進む。一方、Ｓ１０１の判定がライトコマンドである場合（Ｓ１０１：ライトコマンド）は、データライトコマンド処理を実行し（Ｓ１０３）（詳細は図２２で詳述）、その後、Ｓ１０４へと進む。【０１９０】
なお、Ｓ１００の判定にてＩ／Ｏ要求無しの場合（Ｓ１００：Ｎｏ）は、そのままＳ１０４の判定へと進む。【０１９１】
Ｓ１０４では、前回の判定から一定の期間が経過したかを判断する。その判断が肯定的である場合（Ｓ１０４：Ｙｅｓ）、ＳＳＤから圧縮率や容量の情報等を取得する、定期監視処理を実行する（Ｓ１０５）（図２６で詳述）。その後、ＳＳＤの物理容量のばらつきを解消するための処理である、容量平準化処理を実行し（Ｓ１０６）（図２７で詳述）、Ｓ１０７へと進む。一方、Ｓ１０４の判断が否定的でる場合は（Ｓ１０４：Ｎｏ）、そのままＳ１０７へと進む。【０１９２】
Ｓ１０７では、ストレージコントローラ１００は装置の停止が指示されているかを判断し、その判定が肯定的である場合（Ｓ１０７：Ｙｅｓ）は装置の停止処理を行う。一方、Ｓ１０７の判定結果が否定的である場合（Ｓ１０７：Ｎｏ）は、Ｉ／Ｏ要求の有無を確認するＳ１００へと戻る。【０１９３】
図２２は、ストレージコントローラ１００のデータライト処理であるＳ１０３の詳細を示すシーケンス図である。【０１９４】
ストレージコントローラ１００はホスト計算機３０から送付されたライトコマンドの内容を解析する（Ｓ５００）。次に、ストレージコントローラは、そのコマンドに含まれているアドレス情報を元に、ライト先の仮想ボリュームのアドレスが含まれる範囲にエクステントが割当て済みであるかを、仮想ボリューム管理テーブル１３５００やエクステント管理テーブル１３４００の情報などを参照することで判断する（Ｓ５０１）。Ｓ５０１の判断が肯定的である場合（Ｓ５０１：Ｙｅｓ）、ストレージコントローラは割当て済みエクステントに対する上書き更新処理であると判断し、上書きの可否を判断する（Ｓ５０２）。Ｓ５０２では、上書きデータが格納されるＳＳＤ（以下、ライト先ＳＳＤ）をエクステント管理テーブル等を参照することで特定し、ライト先ＳＳＤの物理容量に十分な空きがあるかをディスク管理テーブルの空き物理容量１３１０９を参照することで判断する。具体的には、ライト先ＳＳＤに更新データのサイズよりも大きな空き容量があるかをチェックする。なぜなら、本実施例におけるＳＳＤは圧縮機能と、下位レベルの容量仮想化機能を有しているため、次に述べる問題が発生し得る。例えば、空き物理容量が枯渇している状態でデータの更新要求を受けたとする。このとき、更新対象のデータは既に圧縮されている状態とする。ここでもし、更新対象データの圧縮率が悪化（圧縮されにくいデータパターンとなった）してしまった場合、更新前と後とでデータを格納するために必要な物理容量が変化（増大）する。その増大幅の最悪値は、データ圧縮が全く効かない、すなわち非圧縮状態のデータをライトするケースである。ゆえに、ライト先のＳＳＤには、非圧縮状態のデータを格納できるだけの、物理容量が最低限確保できない限り、たとえデータ更新（上書き）処理であっても受け付けることは出来ない。そこで、Ｓ５０３の判定結果が否定的、すなわち、ライト先のＳＳＤに空きの物理容量が十分にない場合（Ｓ５０３：Ｎｏ）、ストレージコントローラはホストに処理の失敗を通知し一連の処理を終了する（Ｓ５１０）。【０１９５】
一方、Ｓ５０３の判定結果が肯定的である場合（Ｓ５０３：Ｙｅｓ）、ストレージコントローラはデータの上書きが可能であると判断し、キャッシュメモリ７１６のデータキャッシュ領域２４０００にホスト計算機３０から送付されたデータを一時的に格納し（Ｓ５０４）、ホスト計算機３０に処理の正常終了を通知する（Ｓ５０８）。その後、ストレージコントローラ１００は、任意のタイミングでライト先のＳＳＤへとデータのライト処理を実行し（Ｓ５０９）（図２４で詳述）、一連の処理を終了する。なお、ホストへのライト終了報告（Ｓ５０８）は、ＳＳＤライト処理（Ｓ５０９）の後に実行されても良い。【０１９６】
一方、Ｓ５０１の判定が否定的である場合（Ｓ５０１：Ｎｏ）、ストレージコントローラは仮想ボリュームに対してエクステントが未割当て領域に対する、データライト処理であると判断し、エクステントの新規割当て処理を実行する（Ｓ５０５）（図２３で詳述）。Ｓ５０５のエクステント割当処理が成功したか否かを判断し、処理が成功した場合は（Ｓ５０６：Ｙｅｓ）、キャッシュメモリ７１６へのデータの格納処理であるＳ５０４へと進む。一方、Ｓ５０６の判断結果が否定的である場合（Ｓ５０６：Ｎｏ）、ストレージコントローラはホストに処理の失敗を通知するとともに、プールボリューム５００の残量が不足していると判断し、ユーザにホスト計算機３０にインストールされている制御ソフトを介して、プールボリュームの拡張（ディスクの増設）を要求する。その後、一連の処理を終了する。【０１９７】
図２３は、エクステント割当て処理Ｓ５０５の詳細を示すシーケンスである。【０１９８】
ストレージコントローラは処理対象のＲＧを選択する（Ｓ３００）。次に各ＳＳＤの空き物理容量が、エクステント作成に必要な容量よりも大きいかを判断する（Ｓ３０１）。その結果が肯定的である場合は（Ｓ３０１：Ｙｅｓ）、エクステント管理テーブル１３４００を参照し、未割当て状態のエクステントを選択する（Ｓ３０５）。次に、各ＳＳＤから未割当て状態の先頭エントリーを選択し、選択中のエクステントに割り当てる。具体的には、エントリー管理テーブル１３６００において、ステータス１３６０６が「未割当て（使用可）」となっているエントリーのなかで、エントリー＃１３６０２の数値がもっとも若いエントリーである（Ｓ３０６）。つぎに選択中のエクステントを、仮想エクステントに割り当てる（Ｓ３０７）。その後、処理の成功をリターンする（Ｓ３０８）。【０１９９】
一方、Ｓ３０１の判断の結果が否定的である場合（Ｓ３０１：Ｎｏ）は、すべてのＲＧを選択したかを判断する（Ｓ３０２）。その結果が否定的である場合は（Ｓ３０２：Ｎｏ）、次のＲＧを選択し（Ｓ３０３）、Ｓ３０１に戻る。一方、Ｓ３０２の判断の結果が肯定的である場合は（Ｓ３０２：Ｙｅｓ）、処理の失敗をリターンする（Ｓ３０４）。【０２００】
図２４は、ＳＳＤライト処理Ｓ５０９の詳細を示すシーケンスである。【０２０１】
ストレージコントローラは、対象のＳＳＤにデータのライト要求コマンドを送信する（Ｓ４００）。ライト要求コマンドを受け取ったＳＳＤコントローラは、圧縮モードを参照し（Ｓ４０１）、同期圧縮モードである場合はデータを圧縮し（Ｓ４０２）、圧縮データをＦＭに格納する（Ｓ４０３）。一方、Ｓ４０１にて非同期圧縮モードであった場合（Ｓ４０１：非同期）は、データ圧縮等は行わず、受領したデータをそのままＦＭに格納する（Ｓ４０３）。なお、ＳＳＤの圧縮モードは、ストレージ装置がＳＳＤを起動する際などに、事前に設定しておいてもよいし、ライト要求コマンドの中に同期か非同期かを通知するフィールドを設け、ライト要求コマンドごとに、モードを指定しても良い。ＦＭにデータを格納したＳＳＤコントローラは、論物変換テーブルやブロック管理テーブル、容量管理テーブル等の各種テーブルを更新する（Ｓ４０４）。その後、終了応答ともに、ＦＭにライトしたデータ量（ＦＭライト量）をストレージコントローラに通知する（Ｓ４０５）。ＦＭライト量の通知方法は、応答コマンドの一部に通知用のフィールドを設けるなどである。もしくは、専用の別コマンドを作成し、送付してもよい。通知する内容は、ライト要求コマンドとして受け取ったデータ量（ライト依頼量）と、実際にＦＭにライトしたデータ量（ＦＭライト量）である。例えば、同期圧縮モードである場合は、ＦＭライト量はライト依頼量と、同じかそれ以下の値になるはずである。一方、非同期圧縮モードである場合は、ＦＭライト量とライト依頼量は同じ値が返却される。【０２０２】
ストレージコントローラは、ＳＳＤコントローラからの応答を受領し（Ｓ４０６）、その後、自身のテーブルを更新する（Ｓ４０７）。具体的には、エントリー管理テーブル１３６００の更新と、ディスク管理テーブル１３１００の更新である。エントリー管理テーブル１３６００の更新では、物理使用量１３８０８を更新する。これにより、ストレージコントローラは各エントリーの圧縮後のデータサイズを管理することが出来る。なお、非同期圧縮モードである場合は、後述の定期監視処理により、圧縮状況に関する情報を取得する。【０２０３】
次に、ディスク管理テーブル１３１００の更新では、ＳＳＤより通知されたＦＭライト量を元に、使用中物理容量１３１０８（現在の値にＦＭライト量を足す）や空き物理容量１３１０９（現在の値からＦＭライト量を引く）などの各種物理容量の更新や、平均圧縮率１３１１１を更新し、空き論理容量１３１０６を更新する（空き物理容量１３１０９÷最大圧縮率１３１１０）、使用中中論理容量１３１０５を更新する（現在の値に、ライト依頼量を足す）、使用可能論理容量を更新する（使用中論理容量１３１０５＋空き論理容量１３１０６）などの各種論理容量の更新を行う。この更新処理により、ストレージコントローラはＳＳＤの各種容量の最新値を推測により把握することが出来る。ただしディスク管理テーブル１３１００の値は、最終的には、後述の定期監視処理によりＳＳＤより取得された最新値に更新される。【０２０４】
図２５は、ホスト計算機３０からリード要求が送信されそのリード要求の処理が完了するまでの処理の流れの一例を示すシーケンス図である。【０２０５】
ホスト計算機３０は、ストレージコントローラ１００に対して、データのリード要求を送信する（Ｓ２００）。【０２０６】
ストレージコントローラ１００は、データのリード要求を受信し、そのリード要求に従うリード元範囲（仮想ボリュームのアドレス範囲）に割り当てられているエクステントの基になっているＳＳＤを特定し、特定されたＳＳＤのＳＳＤコントローラ７１０に対して、データのリード要求を送信する（ステージング要求とも言う）（Ｓ２０１）。【０２０７】
ＳＳＤコントローラ７１０は、データのリード要求を受信し、論物変換ＴＢＬ２３１００を基に、リード要求に従う論理アドレス範囲に対応する物理アドレス範囲を特定し、その物理アドレス範囲（１以上のページ）からデータを読み出す（Ｓ２０２）。つぎにデータの伸長を行い（Ｓ２０３）、伸長したデータをストレージコントローラ１００に送信する（Ｓ２０４）。【０２０８】
ストレージコントローラ１００は、Ｓ２０１で送信したリード要求の応答として、ＳＳＤコントローラ７１０からデータを受信し、受信したデータをキャッシュメモリ１０３に格納（ステージング）し（Ｓ２０６）、ストレージコントローラ１００は、Ｓ２０６で格納されたデータをホスト計算機３０に送信する（Ｓ２０７）。【０２０９】
ホスト計算機３０は、Ｓ２００で送信したリード要求の応答として、ストレージコントローラ１００からデータを受信し、一連の処理を終了する（Ｓ２０８）。【０２１０】
図２６は、定期監視処理Ｓ１０５の詳細を示すシーケンスである。【０２１１】
ストレージコントローラ１００は対象のＳＳＤコントローラに対して、内部情報の通知を依頼する（Ｓ６００）。内部情報とは、論理使用量や物理使用量など、容量管理テーブル２３３３００に格納されている各種の情報である。要求を受領したＳＳＤコントローラは、その応答として容量管理テーブル２３３００の各種情報を返却する。また、非同期圧縮モードでの圧縮など、例えばＳ４０５で示したライト応答後に圧縮処理により物理サイズが変化したものについて、そのＬＢＡ範囲と圧縮後のデータサイズとを返却してもよい。より具体的には、論物変換テーブル２３１００の通知要否フラグ２３１０９がＯＮとなっているものの、ＬＢＡ範囲と物理使用量２３１０８である。【０２１２】
Ｓ６０１での応答を受領したストレージコントローラは、その情報を元に各種テーブルを更新する（Ｓ６０２）。より具体的には、ディスク管理テーブル１３１００や、エントリー管理テーブル１３６００の更新である。【０２１３】
ストレージコントローラ１００は、内部情報を受信すると、エントリー管理ＴＢＬ１３６００の物理使用量を更新する。ＳＳＤ内では物理使用量は論物変換ＴＢＬ２３１００のＬＢＡ範囲（例えば１６ＫＢ）毎に管理されているので、このＬＢＡ範囲毎に内部情報が通知される。ストレージコントローラは、各エントリーを構成するＬＢＡ範囲（例えば１２ＭＢ）分の合計値を物理使用量１３６０８として更新する。そして、ストレージコントローラ１００は、エントリー管理ＴＢＬ１３６００より、ディスク毎に物理使用量の合計を算出し、ディスク管理ＴＢＬ１３１００の使用中物理容量１３１０８を更新する。また、各ディスクの最大物理容量１３１０７と使用中物理容量１３１０８の差から空き物理容量１３１０９を算出する。空き論理容量１３１０６は、空き物理容量１３１０９を最大圧縮率１３１１０で割った値を算出して更新する。空き論理容量１３１０６は、エントリー管理ＴＢＬ１３６００のステータスが「未割当て（使用可）」のエントリーのサイズの合計から算出しても良い。【０２１４】
また、使用中論理容量１３１０５と、使用中物理容量１３１０８の比率から、平均圧縮率１３１１１を算出し、ＴＢＬの該当箇所を更新する。なお、使用中論理容量１３１０５は、エントリー管理ＴＢＬ１３６００のステータス１３６０６が「割当て済み」のエントリーのサイズの合計値である。使用中論理容量１３１０５は、例えば、エントリーがエクステントに割当てられることに応じて更新される。【０２１５】
図２７は、容量平準化処理Ｓ１０６の詳細を示すシーケンスである。【０２１６】
ストレージコントローラは処理対象のＲＧを選択する（Ｓ７００）。そのＲＧの中でディスク毎の残物理容量が不均一であるかを判断する（Ｓ７０１）。具体的には、ＲＧ管理テーブル１３２００とディスク管理テーブル１３１００とを参照し、（１）当該のＲＧを構成するＳＳＤの、空き物理容量１３１０９の最大値と最小値の差が閾値を超過している、（２）当該ＲＧ内での空き物理容量１３１０９の最大値と、当該ＲＧの空き物理容量１３１０９の平均値との差が閾値を超過している、（３）当該ＲＧの空き物理容量１３１０９の平均値と、当該ＲＧ内での空き物理容量１３１０９の最小値との差が閾値を超過しているなどである。また、（４）特定ディスクの空き物理容量１３１０９が極端に少ない（ある閾値より小さい）などであっても良い。なお、上記判断材料に、物理容量ではなく論理容量を用いても良い。さらには、上記判定に用いる閾値や数値は、ストレージ装置の管理者やユーザが、運用用途に応じて任意の値に変更しても良い。変更は、ホスト計算機にインストールされた制御用ソフトウェアを介して、実行することが出来る。【０２１７】
Ｓ７０１の判定の結果が、肯定的である場合は（Ｓ７０１：Ｙｅｓ）、ストレージコントローラは当該ＲＧのディスクの物理使用量がばらついているため、容量の平準化処理が必要であると判断し、エントリー単位の容量平準化処理を実行する（Ｓ７０２）（図２８から図３０で詳述）。その後、Ｓ７０３へとすすみ、当該ＲＧの空き物理容量の平均値が小さいかを判断する。具体的には、ＲＧ管理テーブル１３２００とディスク管理テーブル１３１００とを参照し、当該ＲＧの空き物理容量１３１０９の平均値が閾値を下回っているかを判断する（Ｓ７０３）。なお、Ｓ７０３において、判断材料に物理容量ではなく論理容量を用いてもよい。【０２１８】
Ｓ７０３の結果が肯定的である場合（Ｓ７０３：Ｙｅｓ）は、ストレージコントローラは当該ＲＧの物理容量が枯渇する可能性があると判断し、ＲＧ間の容量平準化処理を行うための判定であるＳ７０４へと進む。Ｓ７０４では、残物理容量が十分にある別のＲＧが存在するか否かを判断する。具体的には、ＲＧ管理テーブル１３２００とディスク管理テーブル１３１００とを参照し、空き物理容量１３１０９の平均値が判定閾値を上回っているものが存在するかを判断する（Ｓ７０４）。Ｓ７０４の判断が肯定的である場合（Ｓ７０４：Ｙｅｓ）は、ＲＧ間の容量平準化を実行可能であると判断し、エクステント単位での容量平準化処理を実行する（Ｓ７０５）（図３０から３１で詳述）。エクステント単位の容量平準化処理を実施することで、物理容量枯渇の危険性のあるＲＧの、物理容量が増大すする。これにより、物理容量枯渇によるＩ／Ｏ処理の停止を回避することが出来る。  その後、全ＲＧの処理が終了したかを判断し（Ｓ７０６）、その結果が否定的である場合（Ｓ７０６：Ｎｏ）は、次の処理対象ＲＧを選択し（Ｓ７０７）、Ｓ７０１の判定処理へと戻る。【０２１９】
一方、Ｓ７０１の判断の結果が否定的である場合（Ｓ７０１：Ｎｏ）、ストレージコントローラはＳ７０３の処理へと進む。【０２２０】
また、Ｓ７０３の判断が否定的である場合（Ｓ７０３：Ｎｏ）や、Ｓ７０４の判断の結果が否定的である場合（Ｓ７０４：Ｎｏ）は、ストレージコントローラはＲＧ間の容量平準化処理を実行できないと判断し、Ｓ７０６へと進む。【０２２１】
また、Ｓ７０６の判断の結果が肯定的である場合（Ｓ７０７：Ｙｅｓ）は、処理を終了する。【０２２２】
なお、Ｓ７０３やＳ７０４において、判断のための閾値は、ユーザや管理者が運用用途に応じて任意の値に変更しても良い。さらには、ストレージ装置は、ホストにインストールされた制御用ソフトウェアを介して、ユーザや管理者に、ディスク管理テーブル１３１００やＲＧ管理ＴＢＬ１３２００の内容を表示し、その結果をもとにユーザや管理者が平準化対象を選択してもよい。【０２２３】
ＳＳＤ空き論理容量が増加した場合は、エントリー管理ＴＢＬ１３６００のステータス１３６０６の「使用不可」を「未割当て（使用可）」に変更する。この管理により、ストレージコントローラ１００はストレージ装置として使用可能な論理空間を拡大する。【０２２４】
図２８は、エントリー単位の容量平準化処理の一例である、ＲＧ内データ移動の概要を示す図である。図２８の物理空間における斜線部分はデータ格納済みの領域を示し、空白部分は空き領域を示す。【０２２５】
ＳＳＤ３１０、ＳＳＤ３２０、ＳＳＤ３３０がＲＧ３００を構成している。今、ＳＳＤ３１０の空き物理容量は他のＳＳＤに比べて極端に少ない。すなわち、当該のＲＧにおいて、空き物理容量が不均一な状態となっている。それに伴い、図示はしていないが、空き論理容量も不均一な状態となっている。【０２２６】
今、ＳＳＤ３１０が提供する論理空間内にエントリー（Ａ）８１１が作成されており、そのデータであるＤ（Ａ）がＳＳＤ３１０内に圧縮データ８１０として格納されている。また、ＳＳＤ３３０が提供する論理空間内にエントリー（Ｂ）８１３が作成されており、そのデータであるＤ（Ｂ）がＳＳＤ３３０内に圧縮データ８１２として格納されている。なお、エントリー（Ａ）８１１とエントリー（Ｂ）８１３のサイズは同一であるが、圧縮データ８１０のサイズは圧縮データ８１２よりも大きい。【０２２７】
すなわち、空き物理容量の少ないＳＳＤ３１０に、物理使用量の多い圧縮データ８１０が格納され、空き物理容量の多いＳＳＤ３３０に、物理使用量の少ない圧縮データ８１２が格納されている。【０２２８】
そこで、ストレージコントローラは、ＳＳＤ３１０とＳＳＤ３３０の間で、圧縮データ８１０と圧縮データ８１２を交換する。これにより、空き物理容量の少ないＳＳＤ３１０に、物理使用量の少ない圧縮データ８１２が格納されることで、ＳＳＤ３１０の空き物理容量は拡大する。一方で、空き物理容量の多いＳＳＤ３３０に、物理使用量の多い圧縮データ８１０が格納されることで、ＳＳＤ３３０の空き物理容量は縮小する。以上の処理により、ＳＳＤ間の空き物理容量の平準化を実現する。【０２２９】
図２９は、エントリー単位の容量平準化処理の一例である、ＲＧ間データ移動の概要を示す図である。【０２３０】
ＳＳＤ３１０、ＳＳＤ３２０、ＳＳＤ３３０がＲＧ３００を構成している。今、ＳＳＤ３１０の空き物理容量は他のＳＳＤに比べて極端に少ない。すなわち、当該のＲＧにおいて、空き物理容量が不均一な状態となっている。それに伴い、図示はしていないが、空き論理容量も不均一な状態となっている。【０２３１】
一方、ＳＳＤ４１０、ＳＳＤ４２０、ＳＳＤ４３０がＲＧ４００を構成している。【０２３２】
今、ＳＳＤ３１０が提供する論理空間内にエントリー（Ａ）８２１が作成されており、そのデータであるＤ（Ａ）がＳＳＤ３１０内に圧縮データ８２０として格納されている。また、ＳＳＤ４２０が提供する論理空間内にエントリー（Ｂ）８２３が作成されており、そのデータであるＤ（Ｂ）がＳＳＤ４２０内に圧縮データ８２２として格納されている。なお、エントリー（Ａ）８２１とエントリー（Ｂ）８２３のサイズは同一であるが、圧縮データ８２０のサイズは圧縮データ８２２よりも大きい。【０２３３】
すなわち、空き物理容量の少ないＳＳＤ３１０に、物理使用量の多い圧縮データ８２０が格納され、空き物理容量の多いＳＳＤ４２０に、物理使用量の少ない圧縮データ８２２が格納されている。【０２３４】
そこで、ストレージコントローラは、ＳＳＤ３１０とＳＳＤ４２０の間で、圧縮データ８２０と圧縮データ８２２を交換する。これにより、空き物理容量の少ないＳＳＤ４２０に、物理使用量の少ない圧縮データ８２２が格納されることで、ＳＳＤ３１０の空き物理容量は拡大する。一方で、空き物理容量の多いＳＳＤ３３０に、物理使用量の多い圧縮データ８２０が格納されることで、ＳＳＤ４２０の空き物理容量は縮小する。【０２３５】
以上の処理により、ＲＧ３００のＳＳＤ間の空き物理容量の平準化を実現する。【０２３６】
図３０は、エントリー単位の容量平準化処理Ｓ７０２の詳細を示すシーケンスである。エントリー単位の容量平準化処理における、データの移動単位はエントリーである。【０２３７】
ストレージコントローラは、空き物理容量が少ないＳＳＤを選択する。空き物理容量が少ないＳＳＤとは、当該ＲＧのなかで、例えば空き物理容量１３１０９の値が最小のＳＳＤである。次に、エントリー管理テーブル１３６００を参照し、当該のＳＳＤの中から物理使用量１３６０８が大きいエントリー（Ａ）を選択する（Ｓ８００）。Ｓ８００では、使用中物理容量１３１０８が大きいＳＳＤを選択してもよい。【０２３８】
次に、ストレージコントローラは、空き物理容量が多いＳＳＤを選択し、そのＳＳＤの中で、物理使用量が小さいエントリー（Ｂ）を選択する（Ｓ８０１）。Ｓ８０１では、使用中物理容量１３１０９が小さいＳＳＤを選択してもよい。【０２３９】
エントリー（Ａ）とエントリー（Ｂ）の物理使用量であるＤ（Ａ）とＤ（Ｂ）とを比較し、Ｄ（Ａ）がＤ（Ｂ）よりも大きいか否かを判断する（Ｓ８０２）。その結果が肯定的である場合（Ｓ８０２：Ｙｅｓ）、ストレージコントローラは、エントリー（Ａ）とエントリー（Ｂ）とが別のストライプに属しているかを、エクステント管理テーブル１３４００を元に判断する（Ｓ８０３）。その結果が肯定的である場合（Ｓ８０３：Ｙｅｓ）、エントリー（Ａ）とエントリー（Ｂ）のデータの交換と（Ｓ８０４）それに伴う各種テーブルの更新を行い（Ｓ８０６）、一連の処理を終了する。テーブルの更新とは、エクステント管理ＴＢＬ１３４００におけるエクステントへのエントリーの割当ての更新や、エントリー管理ＴＢＬ１３６００におけるエントリー毎のステータス１３６０６、物理使用量１３６０８などの更新である。ＳＳＤ空き論理容量が増加した場合は、エントリー管理ＴＢＬ１３６００のステータス１３６０６の「使用不可」を「未割当て（使用可）」に変更する。この管理により、ストレージコントローラ１００はストレージ装置として使用可能な論理空間を拡大する。【０２４０】
この容量平準化処理により、当該ＲＧ内ＳＳＤの空き物理容量が平準化される。これにともない、ＲＧ内ＳＳＤの空き論理容量も平準化されるため、結果としてＲＧ内のエクステント作成可能な容量が拡大する。なお、平準化処理においては、厳密にＲＧ内のＳＳＤ間の空き物理容量を等しくする必要はなく、ＳＳＤ間の空き物理容量の差が小さくなればよい。空き物理容量の差が小さくなれば、空き論理容量の差も小さくなり、作成可能なエクステントの数を増加させることができる。【０２４１】
一方、Ｓ８０２の判断の結果が否定的である場合（Ｓ８０２：Ｎｏ）、ストレージコントローラは、データの交換を中止する（Ｓ８０５）。これは、データを交換しても空き物理容量が小さいＳＳＤの空き物理容量を拡大できないためである。【０２４２】
また、Ｓ８０３の判断の結果が否定的である場合（Ｓ８０３：Ｎｏ）は、ストレージコントローラは、データの移動によりＲＡＩＤの冗長度が低下すると判断し、データの交換を中止する。【０２４３】
なお、ＲＧ内のＳＳＤ間の空き物理容量の差を小さくするためには、Ｓ８０２及びＳ８０３は必ずしも実施しなくてもよい。また、Ｓ８０６でＴＢＬを更新しなくても、ＲＧ内のＳＳＤ間の空き物理容量の差を小さくすることは達成される。【０２４４】
図３１は、エクステント単位の容量平準化処理の一例である、ＲＧ間データ移動の概要を示す図である。【０２４５】
ＳＳＤ３１０、ＳＳＤ３２０、ＳＳＤ３３０がＲＧ３００を構成している。さらに、ＳＳＤ３１０、ＳＳＤ３２０、ＳＳＤ３３０の空き物理容量は少なく、枯渇の危険性がある。【０２４６】
一方、ＳＳＤ４１０、ＳＳＤ４２０、ＳＳＤ４３０がＲＧ４００を構成している。さらに、ＳＳＤ４１０、ＳＳＤ４２０、ＳＳＤ４３０の空き物理容量は十分多い。【０２４７】
すなわち、システム内に物理容量の枯渇のおそれのあるＲＧ３００と、物理容量に余裕のあるＲＧ４００とが存在する。【０２４８】
今、ＲＧ３００内にエクステント（Ａ）８４３が構築されている。さらに、エクステント（Ａ）８４３は、ＳＳＤ３１０が提供する論理空間内に作成されたエントリー８３２、ＳＳＤ３２０が提供する論理空間内に作成されたエントリー８３４、ＳＳＤ３３０が提供する論理空間内に作成されたエントリー８３５により構築されている。さらに、エントリー８３２に対応する圧縮データ８３１がＳＳＤ３１０に、エントリー８３４に対応する圧縮データ８３３がＳＳＤ３２０に、エントリー８３６に対応する圧縮データ８３５がＳＳＤ３３０にそれぞれ格納されている。【０２４９】
一方、ＲＧ４００内にはエクステント（Ｂ）８４４が構築されている。さらに、エクステント（Ｂ）８４４は、ＳＳＤ４１０が提供する論理空間内に作成されたエントリー８３８、ＳＳＤ４２０が提供する論理空間内に作成されたエントリー８４０、ＳＳＤ４３０が提供する論理空間内に作成されたエントリー８４２により構築されている。さらに、エントリー８３８に対応する圧縮データ８３７がＳＳＤ４１０に、エントリー８４０に対応する圧縮データ８３９がＳＳＤ４２０に、エントリー８４２に対応する圧縮データ８４１がＳＳＤ４３０にそれぞれ格納されている。【０２５０】
また、圧縮データ８３１、圧縮データ８３３、圧縮データ８３５のサイズは、圧縮データ８３７、圧縮データ８３９、圧縮データ８４１よりも大きい。すなわち、空き容量の少ないＲＧ３００に物理使用量の多いエクステント（Ａ）８４３が格納され、空き容量の多いＲＧ４００に物理使用量の少ないエクステント（Ｂ）８４４が格納されている。【０２５１】
そこで、ストレージコントローラは、ＲＧ３００とＲＧ４００との間で、エクステント（Ａ）とエクステント（Ｂ）のデータをそれぞれ交換する。これにより、ＳＳＤ３１０には圧縮データ８３７が、ＳＳＤ３２０には圧縮データ８３９が、ＳＳＤ３３０には圧縮データ８４１がそれぞれ格納される。一方のＳＳＤ４１０には圧縮データ８３１が、ＳＳＤ４２０には圧縮データ８３３が、ＳＳＤ４３０には圧縮データ８３５がそれぞれ格納される。このように、空き物理容量の少ないＲＧ３００の各ＳＳＤに、今よりも物理使用量の少ない圧縮データが格納されるで、ＲＧ３００を構成する全ＳＳＤの空き物理容量の拡大を実現する。【０２５２】
これにより、ＲＡＩＤグループにおける物理容量の枯渇によるＩ／Ｏ処理の停止を回避できるため、ストレージ装置は、安定して稼働し続けることが可能となる。【０２５３】
図３２は、エクステント単位の容量平準化処理Ｓ７０５の詳細を示すシーケンスである。エクステント単位の容量平準化処理における、データの移動単位はエクステントである。【０２５４】
ストレージコントローラは、当該のＲＧの中で物理使用量の大きいエクステント（Ａ）を選択する（Ｓ９００）。次に、残物理容量の平均値が大きいＲＧのなかで、物理使用量の小さいエクステント（Ｂ）を選択する（Ｓ９０１）。【０２５５】
次に、選択したエクステント（Ａ）に格納されたデータの物理使用量が（Ｂ）に格納されたデータの物理使用量よりも大きいかを判断する（Ｓ９０２）。その結果が肯定的である場合は（Ｓ９０２：Ｙｅｓ）、データの交換を実施し（Ｓ９０３）、その後、各種テーブルを更新し（Ｓ９０３）、一連の処理を終了する。【０２５６】
この容量平準化処理により、当該ＲＧの全ＳＳＤの空き物理容量が拡大される。これにともない、ＳＳＤの空き論理容量も拡大するため、結果としてＲＧ内のエクステント作成可能な容量が拡大する。【０２５７】
一方、Ｓ８０２の判断の結果が否定的である場合（Ｓ８０２：Ｎｏ）、ストレージコントローラは、データの交換を中止する（Ｓ８０５）。【０２５８】
一方、Ｓ９０２の判断の結果が否定的である場合（Ｓ９０２：Ｎｏ）、データの交換を中止する（Ｓ９０４）。【０２５９】
このように、エクステント単位の容量平準化処理Ｓ７０５では、図２７において事前にエントリー単位の容量平準化処理であるＳ７０２を実行するため、当該ＲＧのＳＳＤの空き物理容量は平準化済であることを前提としていた。ただし、図２７において、エクステント単位の容量平準化処理であるＳ７０４と、エントリー単位の容量平準化処理であるＳ７０２とは実行順序が入れ替わっても良い。【０２６０】
さらには、図３３に示すようにエクステント単位の容量平準化処理で、エントリー単位の容量平準化処理の効果も併せて実現できる場合は、エクステント単位の容量平準化処理の実行のみを行ってもよい。【０２６１】
図３３は、エクステント単位の容量平準化処理の別の一例の概要を示す図である。【０２６２】
ＳＳＤ３１０、ＳＳＤ３２０、ＳＳＤ３３０がＲＧ３００を構成している。さらに、ＳＳＤ３１０、ＳＳＤ３２０、ＳＳＤ３３０の空き物理容量は、不均一な状態となっており、その形はＳＳＤ３２０のみが少ないという、谷型である。【０２６３】
一方、ＳＳＤ４１０、ＳＳＤ４２０、ＳＳＤ４３０がＲＧ４００を構成している。さらに、ＳＳＤ４１０、ＳＳＤ４２０、ＳＳＤ４３０の空き物理容量は、不均一な状態となっており、その形はＳＳＤ４２０のみが多いという、山型である。【０２６４】
すなわち、ＲＧ３００とＲＧ４００は、互いに空き物理容量が不均一な状態にあるが、その傾向は、ＲＧ３００は山形、ＲＧ４００は谷型と相反する関係にある。【０２６５】
つぎにＲＧ３００内にはエクステント（Ａ）８６３が構築されている。エクステント（Ａ）８６３は、ＳＳＤ３１０が提供する論理空間内に作成されたエントリー８５２、ＳＳＤ３２０が提供する論理空間内に作成されたエントリー８５４、ＳＳＤ３３０が提供する論理空間内に作成されたエントリー８５６により構築されている。さらに、エントリー８５２に対応する圧縮データ８５１がＳＳＤ３１０に、エントリー８５４に対応する圧縮データ８５３がＳＳＤ３２０に、エントリー８５６に対応する圧縮データ８５５がＳＳＤ３３０にそれぞれ格納されている。【０２６６】
ＲＧ３００のなかで、空き物理容量の多いＳＳＤ３１０に、物理使用量の少ない圧縮データ８５１が格納されており、空き物理容量の少ないＳＳＤ３２０に、物理使用量の多い圧縮データ８５３が格納されており、空き物理容量の多いＳＳＤ３３０に、物理使用量の少ない圧縮データ８５５が格納されている。【０２６７】
すなわち、エクステント（Ａ）８６３に格納された圧縮データは、圧縮データ８５３が圧縮データ８５１や圧縮データ８５５に比べて大きいという、山型である。【０２６８】
一方、ＲＧ４００内にはエクステント（Ｂ）８６４が構築されている。エクステント（Ｂ）８６４は、ＳＳＤ４１０が提供する論理空間内に作成されたエントリー８５８、ＳＳＤ４２０が提供する論理空間内に作成されたエントリー８６０、ＳＳＤ４３０が提供する論理空間内に作成されたエントリー８６２により構築されている。さらに、エントリー８５８に対応する圧縮データ８５７がＳＳＤ４１０に、エントリー８６０に対応する圧縮データ８５９がＳＳＤ４２０に、エントリー８６２に対応する圧縮データ８６１がＳＳＤ４３０にそれぞれ格納されている。【０２６９】
ＲＧ４００のなかで、空き物理容量の少ないＳＳＤ４１０に、物理使用量の多い圧縮データ８５７が格納されており、空き物理容量の多いＳＳＤ４２０に、物理使用量の少ない圧縮データ８５９が格納されており、空き物理容量の少ないＳＳＤ４３０に、物理使用量の多い圧縮データ８６１が格納されている。【０２７０】
すなわち、エクステント（Ｂ）８６４に格納された圧縮データは、圧縮データ８５９が圧縮データ８５７や圧縮データ８６１に比べて小さいという、谷型である。【０２７１】
そこでストレージコントローラは、両ＲＧの不均一状態を解消するために、エクステント（Ａ）８６３とエクステント（Ｂ）８６４のデータ移動を行う。これにより、空き物理容量の多いＳＳＤ３１０に、物理使用量の多い圧縮データ８５７が格納されるため、ＳＳＤ３１０の空き物理容量は減少する。空き物理容量の少ないＳＳＤ３２０に、物理使用量の少ない圧縮データ８５９が格納されるため、ＳＳＤ３２０の空き物理容量は拡大する。空き物理容量の多いＳＳＤ３３０に、物理使用量の多い圧縮データ８６１が格納されるため、ＳＳＤ３３０の空き物理容量は減少する。すなわち、ＲＧ３００では、各ＳＳＤの空き物理容量が平準化される効果を得ることが出来る。【０２７２】
一方、ＲＧ４００では、空き物理容量の少ないＳＳＤ４１０に、物理使用量の少ない圧縮データ８５１が格納されるため、ＳＳＤ４１０の空き物理容量は拡大する。空き物理容量の多いＳＳＤ４２０に、物理使用量の多い圧縮データ８５３が格納されるため、ＳＳＤ４２０の空き物理容量は減少する。空き物理容量の少ないＳＳＤ４３０に、物理使用量の少ない圧縮データ８５５が格納されるため、ＳＳＤ４３０の空き物理容量は拡大する。すなわち、ＲＧ４００においてもＲＧ３００と同様に、各ＳＳＤの空き物理容量が平準化される効果を得ることが出来る。【０２７３】
以上をまとめると、ストレージコントローラは以下の条件を満たす様に、容量平準化処理を行えばよい。【０２７４】
・空き物理容量の多いＳＳＤに、物理使用量の多いデータを格納する。
・空き物理容量の少ないＳＳＤに、物理使用量の少ないデータを格納する。【０２７５】
これにより、ＲＧを構成する各ＳＳＤの空き物理容量を平準化することができる。さらには、空き物理容量が平準化されることで、空き論理容量も平準化される。その結果として、ＲＧ内のエクステント作成可能空間を拡大もしくは最大化することができる。【０２７６】
なお、本実施例では、不均一状態の検出および、平準化による緩和を判断するための判断材料として、空きの物理容量や空きの論理容量を使用したが、使用中の物理容量や使用中の論理容量を使用しても良い。【０２７７】
また、ＳＳＤ内のＦＭに外部装置からライトされたデータに加え、ＳＳＤ自身の内部情報を格納したことにより、空き論理容量に不均一状態が生じたときにおいても、エントリーのデータ移動による、空き論理容量の平準化を適用してもよい。
【実施例２】
【０２７８】
実施例１では、データの圧縮具合により、ＳＳＤが外部装置に提供可能な論理アドレス空間が変化していた。具体的には、実施例１では、ＳＳＤの最大論理容量が８００ＧＢ、使用可能論理容量が６５０ＧＢであるときに、使用可能な論理アドレス空間は、ＬＢＡ０（すなわち０ＧＢ）から、６５０ＧＢに相当するＬＢＡ範囲までとなっていた（図１）。補足すると、ストレージコントローラは、ある時点においてＳＳＤが提供する論理アドレス空間の最大値が、その時点におけるＳＳＤの使用可能な論理容量であると認識できた。  これに対して実施例２のＳＳＤは、使用可能な論理容量が変化する。具体的には、最大論理容量が８００ＧＢであるときに、使用可能な論理空間は、常に０ＧＢ〜８００ＧＢのアドレス範囲のままとなるＳＳＤである。詳細を図３４にて説明する。【０２７９】
図３４は、実施例２におけるＳＳＤのアドレス空間の概要を示す図である。【０２８０】
実施例１との違いは、最大論理容量３０００１と、使用可能論理空間３０００２のサイズはともに８００ＧＢである点と、使用可能論理空間３０００２のサイズが、データの圧縮具合によらず固定である点である。これに伴い、実施例１のＳＳＤには存在していた、使用不可論理空間３０００３は存在しない。さらに、ストレージコントローラが、８００ＧＢの論理アドレス空間を自由に使用することが出来るため、使用中論理空間３０００５ａ、３０００５ｂ、３０００５ｃと複数の使用中論理空間が存在する。また、使用中論理空間以外のアドレス空間は、空き論理空間３０００４ａ、３０００４ｂ、３０００４ｃのように、空き論理空間としてストレージコントローラに提供されている。ただし、ストレージコントローラには、使用可能論理容量が６５０ＧＢであることも別途通知する。そのため、ストレージコントローラが、ＳＳＤの論理使用量が６５０ＧＢを超過しないように制御をする。【０２８１】
その他、実施例１との違いを述べる。実施例２のＳＳＤは使用不可な論理容量が存在しないため、エントリー管理テーブル１３６００において、ステータス１３６０６の値が「割当て済み」と「未割当て（使用可）」のみとなる。さらに、論物変換テーブル２３１００においても、ステータス２３１０４の値が「使用中」と「未使用」のみとなる。【０２８２】
図３５は、実施例２における、エクステント割当て処理Ｓ５０５の詳細を示すシーケンスである。【０２８３】
実施例１との違いは、Ｓ３０６に代えて、各ＳＳＤから未割当状態の任意のエントリーを選択し、選択中のエクステントに割り当てる処理であるＳ３０６ａを備える点である。その他のステップについては、図２３と同じである。【０２８４】
このように、使用可能な論理容量のみが変化するＳＳＤであったとしても、ストレージコントローラと連携することで、実施例１と同様の機能を提供することが出来る。
【実施例３】
【０２８５】
実施例３では、ストレージコントローラが階層再配置機能を有しているケースについて記載する。階層再配置機能とは、ストレージ装置内にコストパフォーマンスの異なる複数の記憶媒体が搭載されているときに、データのアクセス頻度と記憶媒体の種類に応じて、ストレージコントローラがデータを適切な記憶媒体へ再配置する機能である。図３６を用いて概要を説明する。【０２８６】
図３６は、第３の実施例における、階層再配置機能の概要説明図である。【０２８７】
ストレージ装置内には、低速なＨＤＤで構成されたＲＧ２００、高速なＨＤＤで構成されたＲＧ３００およびＳＳＤで構成されたＲＧ４００がそれぞれ存在する。各ＲＧは記憶媒体の種別に応じて階層管理されており、ＲＧ４００は階層＃０に、ＲＧ３００は階層＃１、ＲＧ２００は階層＃２となっている。なお、階層番号は、アクセス性能の高い順に割り当てられている。なお、一般的に高速なデバイスほど低容量・高価格な傾向にあるため、一般的なストレージ装置では上位階層ほど搭載容量が少ない傾向にある。図では、ＳＳＤで構成された最上位階層である階層＃０の容量が最も少なく、低速ＨＤＤで構成された再下位階層である階層＃２の容量が最も多い様子を示している。そのため、階層＃０のＲＧ４００内にはエクステントが１つしか構築されてないが、階層＃１のＲＧ３００にはエクステントが２つ、階層＃２のＲＧ２００にはエクステントが５つ構築されている。このような環境においては、高頻度にアクセスされるデータほど、上位階層の記憶媒体に格納されることが望ましい。なお、各階層が複数のＲＧを含んでも良い。また、１つのプールボリュームが異なる階層を構成する複数のＲＧを含んでも良い。この場合、プールボリュームには複数の階層のＲＧに基づいて構成されるエクステントが混在する。【０２８８】
各エクステントは仮想ボリューム６００の仮想エクステントに割当てられている。いま、仮想エクステント６０１はエクステント２４１に、仮想エクステント６０２はエクステント３４１に、仮想エクステント６０３はエクステント３４１に、仮想エクステント６０４はエクステント４４１に、仮想エクステント６０５はエクステント２４２に、仮想エクステント６０６はエクステント２４３に、それぞれ割当てられている。なお、仮想エクステントのアクセス頻度は６０１から６０６の順に高いとする。なおアクセス頻度とは、例えばデータリードやデータライトの単位時間あたりの回数であるＩＯＰＳや、単位時間あたりデータ転送量を示すＭＢ／ｓ等で把握できる値である。【０２８９】
アクセス頻度の低い仮想エクステント６０４のデータが、上位階層のＲＧ４００内のエクステント４４１に格納されているため、ＳＳＤの性能を十分に使い切れないおそれがある。一方、アクセス頻度の高い仮想エクステント６０１のデータが、下位階層のＲＧ２００内のエクステント２４１に格納されており、さらにＲＧ２００内のエクステント２４２および２４３も、他の仮想エクステントのデータを格納している、そのため、ＲＧ２００ではＨＤＤが性能のボトルネックとなる危険性がある。【０２９０】
そこで、ストレージコントローラは、エクステント４４１とエクステント２４１のデータを入れ替える「階層再配置」を実行することで、データ格納位置を最適化する。図３６の左図は階層再配置前の状態を、図３６の右図は階層再配置後の状態をそれぞれ示した物である。再配置後には、アクセス頻度の高いデータが順に、上位階層のＲＧに格納されている。これにより、システム性能を最大化することが出来る。【０２９１】
なお本発明のＳＳＤは、圧縮により容量を拡張する機能を有するため、ストレージ装置にとっては、上位階層の容量が増加するという効果を得ることができる。これにより、例えば搭載するＳＳＤやＨＤＤの台数を削減できるなどのコスト削減効果を見込めるため、なるべく多くのデータを、上位階層のＳＳＤに格納できることが望ましい。そこで実施例３では、ストレージコントローラが階層再配置を実行する前に、ＳＳＤの容量平準化を実施し、より多くのデータを上位階層のＳＳＤに格納できるようにする。なお以下では、実施例１と２との違いを説明する。【０２９２】
図３７は、第３の実施例におけるＲＧ管理テーブル１３２００の構成例を示す図である。【０２９３】
図３７では、各ＲＧの階層番号を管理するための階層＃１３２０７が新たに追加されている。階層＃は、ＲＧを構成する記憶媒体の種別によって決まっており、例えばＳＳＤは「０」、高速ＨＤＤは「１」、低速ＨＤＤは「２」のような番号が振られている。【０２９４】
図３８は、第３の実施例における仮想ボリューム管理ＴＢＬ１３５００の構成例を示す図である。【０２９５】
図３８では、各仮想エクステントのアクセス頻度を管理するためのＲＤ ＩＯＰＳ１３５０６と、ＷＲ ＩＯＰＳ１３５０７が追加されている。ＲＤ ＩＯＰＳ１３５０６は、単位時間あたりに発生したデータリード要求コマンドの数である。ＷＲ ＩＯＰＳ１３５０７は、単位時間あたりに発生したデータライト要求コマンドの数である。この数値が高いほど、高アクセス頻度であるということを意味する。なおＩＯＰＳに代えて、単位時間あたりのデータ転送量であるＲＤ ＭＢ／ｓやＷＲ ＭＢ／ｓ、もしくは、コマンド数やデータ転送量の累積値を記録しても良い。【０２９６】
図３９は、第３の実施例におけるストレージコントローラのタスクの概要を示すシーケンス図である。【０２９７】
図３９では、容量平準化処理であるＳ１０６の後に、階層再配置処理Ｓ１０８が追加される。階層再配置処理Ｓ１０８の詳細は、図４０で詳述する。なお実施例３では、ストレージコントローラは、各仮想エクステントへのアクセス頻度を監視する必要がある。そこでストレージコントローラは、リード処理Ｓ１０２を実行した場合には、その都度ＲＤ ＩＯＰＳ１３５０６の値を１加算し、ライト処理Ｓ１０３を実行した場合には、その都度ＷＲ ＩＯＰＳ１３５０７を１加算する。【０２９８】
図４０は、第３の実施例における階層再配置処理Ｓ１０８の詳細を示すシーケンスである。【０２９９】
ストレージコントローラは、処理対象の仮想エクステントを選択する（Ｓ１００１）。次にストレージコントローラは、仮想エクステントに割当てられたエクステントの階層が最上位階層であるか否かを、ＲＧ管理ＴＢＬ１３２００を参照することで確認する（Ｓ１００２）。その結果が肯定的である場合（Ｓ１００２：Ｙｅｓ）、ストレージコントローラは階層再配置の必要性は無いと判断して、当該の仮想エクステントが最終であるか否かを判断する（Ｓ１００３）。その結果が肯定的である場合（Ｓ１００３：Ｙｅｓ）、ストレージコントローラは本処理を終了する。一方、Ｓ１００３の結果が否定的である場合（Ｓ１００３：Ｎｏ）、ストレージコントローラは次の仮想エクステントを処理対象に設定し（Ｓ１００４）、Ｓ１００２の処理に移行する。【０３００】
なお、Ｓ１００２の結果が否定的である場合（Ｓ１００２：Ｎｏ）、ストレージコントローラは、上位階層のＲＧの残物理容量が十分であるかを、ＲＧ管理ＴＢＬ１３２００とディスク管理テーブル１３１００を参照することで確認する（Ｓ１００５）。なお、残物理容量が十分であるとは、空き物理容量のサイズが、エクステントのサイズよりも大であるかということに等しい。または、上位階層のＲＧ内に、未割当て状態のエクステントがあるでも良い。Ｓ１００５の結果が肯定的である場合は、上位階層のＲＧに空きがあるためデータをそのまま移動可能であると判断し、当該エクステントのデータを上位階層のＲＧに移動する。その後、各種テーブルを更新し（Ｓ１００９）、Ｓ１００３へと移行する。一方、Ｓ１００５の結果が否定的である場合（Ｓ１００５：Ｎｏ）、上位階層のＲＧには十分な空きがないためデータの交換が必要であると判断し、上位装置のＲＧ内に当該のエクステントよりもアクセス頻度が低いエクステントが存在するか否かを、仮想ボリューム管理テーブル１３５００やＲＧ管理テーブル１３２００等を参照することで確認する（Ｓ１００８）。その結果が肯定的である場合（Ｓ１００８：Ｙｅｓ）、ストレージコントローラは当該のエクステントのデータと、選択した上位階層のエクステントのデータとを入れ替える（Ｓ１００７）。その後、各種テーブルを更新し（Ｓ１００９）、Ｓ１００３へと移行する。一方、Ｓ１００８の結果が否定的である場合（Ｓ１００８：Ｎｏ）、ストレージコントローラはＳ１００３へと移行する。【０３０１】
このように、ストレージコントローラは、容量平準化処理により事前にＳＳＤの空き容量を拡大または最大化したのちに、階層再配置処理を実行できるため、上位階層のＳＳＤにより多くのエクステントのデータを格納することが出来るようになる。これにより、高性能なＳＳＤに格納可能なデータ量が多くなるため、ストレージ装置の性能を向上することができる。【０３０２】
以上の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明したが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。【０３０３】
また、以上の説明では、要素（例えばエクステント）の識別情報として番号が使用されるが、他種の識別情報（例えば名前、識別子）が使用されて良い。【０３０４】
また、「プログラム」を主語として処理を説明している場合、プログラムは、コントローラ（ストレージコントローラ、及びＳＳＤコントローラ）に含まれるプロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がコントローラ或いはプロセッサとされても良い。また、コントローラは、処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースからインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ、又は、コンピュータ読取可能な記憶メディアであっても良い。【０３０５】
また、以上の説明では、物理記憶装置を「ディスク」と便宜上表記することがあるが、この表記は、物理記憶装置が必ずしも円盤状の記憶媒体を有することを意味しない。例えば、ディスクは不揮発性半導体メモリを記憶媒体とするＳＳＤを指すこともある。ＳＳＤがフラッシュメモリを記憶媒体とする場合、ＳＳＤはフラッシュメモリドライブやフラッシュメモリパッケージと表現されてもよい。【０３０６】
また、以上の説明では、期間或いは時間の単位は、限定されない。例えば、期間或いは時間の単位は、年、月、日、時、分、秒のうちのいずれか１つ或いはいずれか２以上の組合せで表現されて良い。【０３０７】
なお、上述の実施例における記憶装置とは、データ圧縮機能と下位レベルの容量仮想化機能の両機能を有しており、データ圧縮率により外部装置（ストレージコントローラ）に提供する仮想論理容量が変動するＳＳＤである。ただし、ＨＤＤや他の記憶装置が同様の機能を有した場合も、本発明の適用が可能である。
【符号の説明】
【０３０８】
１０：ストレージ装置
【図１】
2014184941.tif 000003
【図２】
2014184941.tif 000004
【図３】
2014184941.tif 000005
【図４】
2014184941.tif 000006
【図５】
2014184941.tif 000007
【図６】
2014184941.tif 000008
【図７】
2014184941.tif 000009
【図８】
2014184941.tif 000010
【図９】
2014184941.tif 000011
【図１０】
2014184941.tif 000012
【図１１】
2014184941.tif 000013
【図１２】
2014184941.tif 000014
【図１３】
2014184941.tif 000015
【図１４】
2014184941.tif 000016
【図１５】
2014184941.tif 000017
【図１６】
2014184941.tif 000018
【図１７】
2014184941.tif 000019
【図１８】
2014184941.tif 000020
【図１９】
2014184941.tif 000021
【図２０】
2014184941.tif 000022
【図２１】
2014184941.tif 000023
【図２２】
2014184941.tif 000024
【図２３】
2014184941.tif 000025
【図２４】
2014184941.tif 000026
【図２５】
2014184941.tif 000027
【図２６】
2014184941.tif 000028
【図２７】
2014184941.tif 000029
【図２８】
2014184941.tif 000030
【図２９】
2014184941.tif 000031
【図３０】
2014184941.tif 000032
【図３１】
2014184941.tif 000033
【図３２】
2014184941.tif 000034
【図３３】
2014184941.tif 000035
【図３４】
2014184941.tif 000036
【図３５】
2014184941.tif 000037
【図３６】
2014184941.tif 000038
【図３７】
2014184941.tif 000039
【図３８】
2014184941.tif 000040
【図３９】
2014184941.tif 000041
【図４０】
2014184941.tif 000042
【手続補正書】
【提出日】平成28年11月25日(2016.11.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
それぞれが複数の不揮発性半導体メモリチップと、データを圧縮して前記複数の不揮発性半導体メモリチップに格納するメモリコントローラと、を有する複数の半導体記憶装置と、
前記複数の半導体記憶装置に含まれる半導体記憶装置を所定数ずつ含む複数のＲＡＩＤグループを制御し、前記複数の半導体記憶装置へのデータの書き込み及び読み出しを制御するストレージコントローラと、を備え、
前記メモリコントローラは、前記複数の不揮発性半導体メモリチップの記憶領域を、論理記憶領域に対応付けて前記ストレージコントローラに提供し、
前記データの格納に用いられた前記不揮発性半導体メモリチップの記憶領域の量である物理使用量の情報を前記ストレージコントローラに提供するよう構成されており、
前記ストレージコントローラは、
前記複数の半導体記憶装置のそれぞれが提供する前記論理記憶領域を、それぞれ所定のサイズの論理記憶領域である複数のエントリーに分割し、前記半導体記憶装置から取得する前記物理使用量の情報をもとに、書き込まれたデータを格納している前記不揮発性半導体メモリチップの記憶領域の量であるデータ格納量を前記半導体記憶装置毎に管理しており、
前記複数のＲＡＩＤグループ毎に、各ＲＡＩＤグループに含まれる複数の半導体記憶装置それぞれに属するエントリーを一つずつ含む複数のエクステントを構成し、
前記データ格納量に基づいて、前記複数のＲＡＩＤグループから第一のＲＡＩＤグループと、第二のＲＡＩＤグループと、を選択し、
前記データ格納量に基づいて、前記第一のＲＡＩＤグループに属する前記複数のエクステントのうち第一のエクステントと、前記第二のＲＡＩＤグループに属する前記複数のエクステントのうち第二のエクステントのデータを交換する
ことを特徴とするストレージ装置。
【請求項２】
前記不揮発性半導体メモリチップは、フラッシュメモリチップである
ことを特徴とする請求項１に記載のストレージ装置。
【請求項３】
前記メモリコントローラは、前記複数の不揮発性半導体メモリチップの記憶領域の容量よりも大きい容量の前記論理記憶領域を、前記ストレージコントローラに提供する
ことを特徴とする請求項１に記載のストレージ装置。
【請求項４】
前記ストレージコントローラは、
所定の容量が設定された仮想ボリュームを計算機に提供し、
前記計算機からのライト要求に応じて、前記複数のエクステントの１つを前記仮想ボリュームに割当て、
前記複数の半導体記憶装置が提供する前記論理記憶領域の容量をプールボリュームとして管理し、
前記論理記憶領域のうちデータを格納できる範囲が変動した場合、前記プールボリュームの容量を変動させる
ことを特徴とする請求項３に記載のストレージ装置。
【請求項５】
前記メモリコントローラは、前記ストレージコントローラからのライト要求に応じて、ライト要求に伴うデータを圧縮し、前記圧縮されたデータを前記不揮発性半導体メモリチップに書き込む
ことを特徴とする請求項４に記載のストレージ装置。
【請求項６】
前記メモリコントローラは、前記ストレージコントローラからの内部情報の取得要求に応じて、前記物理使用量の情報を前記ストレージコントローラに送信する
ことを特徴とする請求項４に記載のストレージ装置。
【請求項７】
前記メモリコントローラは、
前記ストレージコントローラからのライト要求に応じて、ライト要求に伴うデータを前記不揮発性半導体メモリチップに格納し、
リクラメーション処理において、前記不揮発性半導体メモリチップからデータを読み出し、前記読み出したデータを圧縮し、前記圧縮されたデータを不揮発性半導体メモリチップに書き込む
ことを特徴とする請求項４に記載のストレージ装置。
【請求項８】
前記メモリコントローラは、前記ライト要求の完了報告に伴って前記物理使用量の情報を前記ストレージコントローラに送信する
ことを特徴とする請求項４に記載のストレージ装置。
【請求項９】
前記ストレージ装置は、さらに複数のハードディスクドライブを有し、
前記ストレージコントローラは、前記複数のハードディスクドライブを第三のＲＡＩＤグループとして制御し、前記第三のＲＡＩＤグループの記憶領域に基づいて複数のエクステントを構成し、
前記ストレージコントローラは、
前記仮想ボリュームに割当てられたエクステント毎にアクセス頻度を計測し、
前記データの交換処理が完了した後に、前記第三のＲＡＩＤグループに属するエクステントと、前記複数の半導体記憶装置から構成されるＲＡＩＤグループに属する複数のエクステントのうち前記第三のＲＡＩＤグループに属するエクステントよりアクセス頻度の低いエクステントとの間でデータを交換する
ことを特徴とする請求項４に記載のストレージ装置。
【国際調査報告】
2014184941.tif 000043
2014184941.tif 000044