(57)【要約】  キャッシュメモリにおけるダーティデータ量の過剰な増加を防ぐ。  プロセッサは、各記憶デバイスから記憶デバイス情報を取得し、プロセッサは、上位装置から第一記憶デバイスグループに対するライト要求を受信する場合、ライト要求に示されたライト先アドレスに対応するライト先キャッシュ領域が確保されているか否かを判定し、ライト先キャッシュ領域が確保されていないと判定された場合、プロセッサは、記憶デバイス情報およびキャッシュ情報に基づいて、ライト先キャッシュ領域を確保するか否かを判定する、確保判定を行い、ライト先キャッシュ領域を確保すると判定された場合、プロセッサは、ライト先キャッシュ領域を確保し、ライト先キャッシュ領域を確保しないと判定された場合、プロセッサは、ライト先キャッシュ領域の確保を待機する。
2017081811.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶デバイスと、
第一メモリと、
前記複数の記憶デバイス、前記第一メモリ、及び上位装置に接続されるプロセッサと、
を備え、
前記プロセッサは、前記複数の記憶デバイスの少なくとも一部を第一記憶デバイスグループとして設定し、
前記プロセッサは、前記第一メモリ内の複数のキャッシュ領域の状態を示すキャッシュ情報を作成し、
前記プロセッサは、前記上位装置からのデータを格納するキャッシュ領域を、第一記憶デバイスグループに関連付け、
前記プロセッサは、各キャッシュ領域内のデータを、対応する記憶デバイスへデステージし、
前記記憶デバイスは、前記デステージされたデータを圧縮することで、前記デステージされたデータを圧縮データに変換し、前記圧縮データを格納し、前記記憶デバイスの使用量に基づく記憶デバイス情報を記憶し、
前記プロセッサは、各記憶デバイスから前記記憶デバイス情報を取得し、
前記プロセッサは、前記上位装置から前記第一記憶デバイスグループに対するライト要求を受信する場合、前記ライト要求に示されたライト先アドレスに対応するライト先キャッシュ領域が確保されているか否かを判定し、
前記ライト先キャッシュ領域が確保されていないと判定された場合、前記プロセッサは、前記記憶デバイス情報および前記キャッシュ情報に基づいて、前記ライト先キャッシュ領域を確保するか否かを判定する、確保判定を行い、
前記ライト先キャッシュ領域を確保すると判定された場合、前記プロセッサは、前記ライト先キャッシュ領域を確保し、
前記ライト先キャッシュ領域を確保しないと判定された場合、前記プロセッサは、前記ライト先キャッシュ領域の確保を待機する、
ストレージ装置。
【請求項２】
前記プロセッサが前記ライト要求を受信し、且つ前記ライト先キャッシュ領域が確保されている、状態において、前記プロセッサは、前記上位装置にライトデータを送信させるためのＷＲデータ転送許可通知を前記上位装置へ送信し、前記ライトデータを前記上位装置から受信し、前記ライトデータを前記ライト先キャッシュ領域へ書き込む、
請求項１に記載のストレージ装置。
【請求項３】
前記プロセッサは、前記記憶デバイス情報および前記キャッシュ情報に基づいて、前記第一記憶デバイスグループへのデステージが可能であるか否かを判定する、デステージ判定を行い、
前記プロセッサは、前記ライト要求を受信する場合、前記デステージ判定の結果に基づいて、前記確保判定を行う、
請求項２に記載のストレージ装置。
【請求項４】
前記プロセッサは、前記記憶デバイス情報に基づいて、前記第一記憶デバイスグループの物理的な空き容量を算出し、
前記プロセッサは、前記キャッシュ情報に基づいて、前記第一記憶デバイスグループへデステージされる可能性のあるデータ量である予定デステージ量を算出し、
前記プロセッサは、前記デステージ判定において、前記空き容量が前記予定デステージ量より大きい場合、前記第一記憶デバイスグループへのデステージが可能であると判定する、
請求項３に記載のストレージ装置。
【請求項５】
前記プロセッサは、前記待機中、前記空き容量が前記予定デステージ量より大きいか否かを判定し、
前記空き容量が前記予定デステージ量より大きいと判定された場合、前記プロセッサは、前記確保判定を行う、
請求項４に記載のストレージ装置。
【請求項６】
前記プロセッサは、仮想ボリュームを前記上位装置へ提供し、
前記プロセッサは、前記第一記憶デバイスグループ内の物理記憶領域を、前記仮想ボリューム内の仮想記憶領域へ割り当てる、
請求項５に記載のストレージ装置。
【請求項７】
前記プロセッサは、前記複数の記憶デバイスのうち、前記第一記憶デバイスグループ以外の一部を、第二記憶デバイスグループとして設定し、
前記プロセッサは、前記記憶デバイス情報に基づいて、前記第一記憶デバイスグループが、予め設定された枯渇条件を満たすか否かを判定し、
前記第一記憶デバイスグループが前記枯渇条件を満たすと判定された場合、前記プロセッサは、前記第一記憶デバイスグループ内の第一物理記憶領域に格納されているデータを前記第二記憶デバイスグループ内の第二物理記憶領域へ移動させ、前記第一物理記憶領域を割り当てられている仮想記憶領域に、前記第二物理記憶領域を割り当てる、
請求項６に記載のストレージ装置。
【請求項８】
前記プロセッサは、前記キャッシュ情報に基づいて、前記第一記憶デバイスグループに対応するキャッシュ領域のダーティデータ量を算出し、
前記プロセッサは、前記記憶デバイス情報の取得に基づいて、前記ダーティデータ量に関するマージンを決定し、
前記プロセッサは、前記ダーティデータ量及び前記マージンの和を前記予定デステージ量として算出する、
請求項７に記載のストレージ装置。
【請求項９】
前記記憶デバイスは、前記プロセッサに接続される記憶デバイスコントローラと、前記記憶デバイスコントローラに接続される不揮発性半導体メモリとを含み、
前記記憶デバイスコントローラは、前記ダーティデータを圧縮することで前記ダーティデータを前記圧縮データに変換し、前記圧縮データを前記不揮発性半導体メモリへ書き込む、
請求項８に記載のストレージ装置。
【請求項１０】
前記プロセッサは、前記確保判定において、前記デステージ判定の結果が、前記第一記憶デバイスグループへのデステージが可能であることを示す場合、前記ライト先キャッシュ領域を確保すると判定し、前記デステージ判定の結果が、前記第一記憶デバイスグループへのデステージが可能でないことを示す場合、前記ライト先キャッシュ領域を確保しないと判定する、
請求項９に記載のストレージ装置。
【請求項１１】
前記プロセッサに接続される第二メモリを更に備え、
前記プロセッサは、前記第一メモリ及び前記第二メモリの両方に、前記ライト先に対応するキャッシュ領域が確保されている場合、前記ライト先キャッシュ領域が確保されていると判定し、
前記プロセッサは、前記ライトデータを前記上位装置から受信した場合、前記ライトデータを、前記第一メモリ及び前記第二メモリの両方へ書き込む、
請求項２に記載のストレージ装置。
【請求項１２】
プロセスをプロセッサに実行させるプログラムを格納するコンピュータ読み取り可能な記録媒体であって、前記プロセスは、
前記プロセッサに接続される複数の記憶デバイスの少なくとも一部を第一記憶デバイスグループとして設定し、
前記プロセッサに接続される第一メモリ内の複数のキャッシュ領域の状態を示すキャッシュ情報を作成し、
上位装置からのデータを格納するキャッシュ領域を、第一記憶デバイスグループに関連付け、
各キャッシュ領域内のデータを、対応する記憶デバイスへデステージし、前記記憶デバイスは、前記デステージされたデータを圧縮することで、前記デステージされたデータを圧縮データに変換し、前記圧縮データを格納し、前記記憶デバイスの使用量に基づく記憶デバイス情報を記憶し、
各記憶デバイスから前記記憶デバイス情報を取得し、
前記上位装置から前記第一記憶デバイスグループに対するライト要求を受信する場合、前記ライト要求に示されたライト先アドレスに対応するライト先キャッシュ領域が確保されているか否かを判定し、
前記ライト先キャッシュ領域が確保されていないと判定された場合、前記記憶デバイス情報および前記キャッシュ情報に基づいて、前記ライト先キャッシュ領域を確保するか否かを判定する、確保判定を行い、
前記ライト先キャッシュ領域を確保すると判定された場合、前記ライト先キャッシュ領域を確保し、
前記ライト先キャッシュ領域を確保しないと判定された場合、前記ライト先キャッシュ領域の確保を待機する、
ことを備える、
記録媒体。
【請求項１３】
複数の記憶デバイスの少なくとも一部を第一記憶デバイスグループとして設定し、
第一メモリ内の複数のキャッシュ領域の状態を示すキャッシュ情報を作成し、
上位装置からのデータを格納するキャッシュ領域を、第一記憶デバイスグループに関連付け、
各キャッシュ領域内のデータを、対応する記憶デバイスへデステージし、前記記憶デバイスは、前記デステージされたデータを圧縮することで、前記デステージされたデータを圧縮データに変換し、前記圧縮データを格納し、前記記憶デバイスの使用量に基づく記憶デバイス情報を記憶し、
各記憶デバイスから前記記憶デバイス情報を取得し、
前記上位装置から前記第一記憶デバイスグループに対するライト要求を受信する場合、前記ライト要求に示されたライト先アドレスに対応するライト先キャッシュ領域が確保されているか否かを判定し、
前記ライト先キャッシュ領域が確保されていないと判定された場合、前記記憶デバイス情報および前記キャッシュ情報に基づいて、前記ライト先キャッシュ領域を確保するか否かを判定する、確保判定を行い、
前記ライト先キャッシュ領域を確保すると判定された場合、前記ライト先キャッシュ領域を確保し、
前記ライト先キャッシュ領域を確保しないと判定された場合、前記ライト先キャッシュ領域の確保を待機する、
ことを備える記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に関する。
【背景技術】
【０００２】
ストレージ装置は、一般に、データを格納する物理記憶デバイスと、物理記憶デバイスを制御するコントローラとを有する。コントローラは、ストレージ装置に接続された計算機（例えばホスト計算機）にデータ格納空間（一般に論理ボリューム）を提供する。【０００３】
ストレージ装置は、複数の物理記憶デバイスを、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ（ｏｒ  Ｉｎｅｘｐｅｎｓｉｖｅ）Ｄｉｓｋｓ）等のＰＧ（Ｐａｒｉｔｙ  Ｇｒｏｕｐ）構成で使用することにより、Ｉ／Ｏ処理を高速化したり、物理記憶デバイスの故障に対する高い耐障害性を発揮したりすることができる。【０００４】
ストレージ装置は、物理記憶デバイスとして、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）や、フラッシュメモリ（以下、ＦＭ）を有する物理記憶デバイス、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を含む。【０００５】
次に、データ圧縮について述べる。データ圧縮は、データを圧縮することで物理記憶デバイスに格納するデータ量を削減する技術であり、フットプリントの削減やビットコストの低下を実現する。【０００６】
今後、ＳＳＤ自体のビットコスト低下等を目的として、ＳＳＤが上述の圧縮機能を有する可能性がある。以下、圧縮機能を有する物理記憶デバイスを圧縮ドライブと呼ぶ。【０００７】
ＳＳＤ自体が圧縮機能を搭載する場合、ストレージコントローラは圧縮後のデータを意識する必要がなく、圧縮機能のない記憶デバイスと同様にリード／ライト（以下、Ｒ／Ｗ）することができる。ストレージコントローラからデータを書き込まれた圧縮ドライブは、内部で圧縮処理を実行し、ＦＭに格納することで、ＦＭの使用量を削減することができる。しかし、ストレージコントローラからは、圧縮ドライブに対して、圧縮ドライブの容量分しかデータを書き込むことができない。つまりストレージコントローラは圧縮ドライブの容量一杯までデータを書き込んだ状態では、圧縮ドライブ内でデータが圧縮されることにより増加した空き容量に対してさらにデータを書き込むことができない。なぜなら、ストレージコントローラが圧縮ドライブに書き込める領域は非圧縮のデータサイズで消費されるためである。【０００８】
特許文献１には、データを圧縮して格納する半導体記憶ユニットを用いるストレージ装置において、ストレージコントローラが、半導体記憶ユニットが枯渇するリスクを軽減するように半導体記憶ユニット間でデータを移動する技術が記載されている。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】国際公開第２０１５／００８３７５号
【発明の概要】
【発明が解決しようとする課題】
【００１０】
記憶デバイスの空き容量が不足する場合、当該記憶デバイスをデステージ先とするダーティデータがキャッシュメモリに溜まる。これにより、キャッシュメモリ資源を使用するサービスの性能低下、保守失敗、ホストシステムダウン等を発生させる可能性がある。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明の一態様であるストレージ装置は、複数の記憶デバイスと、第一メモリと、前記複数の記憶デバイス、前記第一メモリ、及び上位装置に接続されるプロセッサと、を備える。前記プロセッサは、前記複数の記憶デバイスの少なくとも一部を第一記憶デバイスグループとして設定し、前記プロセッサは、前記第一メモリ内の複数のキャッシュ領域の状態を示すキャッシュ情報を作成し、前記プロセッサは、前記上位装置からのデータを格納するキャッシュ領域を、第一記憶デバイスグループに関連付け、前記プロセッサは、各キャッシュ領域内のデータを、対応する記憶デバイスへデステージし、前記記憶デバイスは、前記デステージされたデータを圧縮することで、前記デステージされたデータを圧縮データに変換し、前記圧縮データを格納し、前記記憶デバイスの使用量に基づく記憶デバイス情報を記憶し、前記プロセッサは、各記憶デバイスから前記記憶デバイス情報を取得し、前記プロセッサは、前記上位装置から前記第一記憶デバイスグループに対するライト要求を受信する場合、前記ライト要求に示されたライト先アドレスに対応するライト先キャッシュ領域が確保されているか否かを判定し、前記ライト先キャッシュ領域が確保されていないと判定された場合、前記プロセッサは、前記記憶デバイス情報および前記キャッシュ情報に基づいて、前記ライト先キャッシュ領域を確保するか否かを判定する、確保判定を行い、前記ライト先キャッシュ領域を確保すると判定された場合、前記プロセッサは、前記ライト先キャッシュ領域を確保し、前記ライト先キャッシュ領域を確保しないと判定された場合、前記プロセッサは、前記ライト先キャッシュ領域の確保を待機する。
【発明の効果】
【００１２】
キャッシュメモリにおけるダーティデータ量の過剰な増加を防ぐことができる。
【図面の簡単な説明】
【００１３】
【図１】実施形態の概要を示す図である。
【図２】実施例１に係るストレージ装置１０を含むストレージシステム１００００の構成例を示す図である。
【図３】ＳＳＤ７００の構成例を示す図である。
【図４】フラッシュメモリ７８０の構成例を示す図である。
【図５】ＳＳＤのアドレス空間の構成例を示す図である。
【図６】容量仮想化技術の概要説明図である。
【図７】データ移動処理によりＲＧ間でデータが移動された場合におけるデータアクセスの概要を説明する図である。
【図８】キャッシュメモリ１０３の構成例を示す図である。
【図９】Ｄｉｓｋ管理テーブル１３１００の構成例を示す図である。
【図１０】ＲＧ管理テーブル１３２００の構成例を示す図である。
【図１１】Ｐｏｏｌ管理テーブル１３３００の構成例を示す図である。
【図１２】エントリ管理テーブル１３８００の構成例を示す図である。
【図１３】エクステント管理テーブル１３４００の構成例を示す図である。
【図１４】仮想ボリューム管理テーブル１３５００の構成例を示す図である。
【図１５】統計情報管理テーブル１３６００の構成例を示す図である。
【図１６】実施例１におけるＦＭ  ＷＲ量予想テーブル１３７００の構成例を示す図である。
【図１７】キャッシュ管理テーブル３２１００の構成例を示す図である。
【図１８】ＲＧ判定管理テーブル３２２００の構成例を示す図である。
【図１９】判定結果管理テーブル３２３００の構成例を示す図である。
【図２０】ＳＳＤ７００におけるキャッシュメモリ７１６の構成例を示す図である。
【図２１】論物変換テーブル２３１００の構成例を示す図である。
【図２２】ＳＳＤ内の統計情報管理テーブル２３２００の構成例を示す図である。
【図２３】ホスト計算機３０からのライト要求に関わるライト処理を示す。
【図２４】デステージ処理を示す。
【図２５】ホスト計算機３０からのリード要求に関わるリード処理を示す。
【図２６】ＳＳＤ向け非同期処理を示す。
【図２７】ＳＳＤ内部情報取得処理を示す。
【図２８】ストレージ状態更新処理を示す。
【図２９】ＷＲ要求受領処理を示す。
【図３０】流入制限判定処理を示す。
【図３１】空き待ちジョブ解放処理を示す。
【図３２】ＳＳＤの寿命予想の概要説明図である。
【図３３】実施例１に係る枯渇回避処理の一例を示すフローチャートである。
【図３４】実施例１に係るＦＭ  ＷＲ量予想処理の一例を示すフローチャートである。
【図３５】実施例１に係る枯渇回避処理におけるデータ移動処理の一例を示すフローチャートである。
【図３６】実施例１に係る寿命平準化処理の一例を示すフローチャートである。
【図３７】実施例１に係る寿命平準化処理におけるデータ移動処理の一例を示すフローチャートである。
【図３８】実施例１に係るＩ／Ｏ性能リバランス処理の一例を示すフローチャートである。
【図３９】実施例２に係るストレージ装置１０ｂを含むストレージシステム１００００ｂの構成例を示す図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態を説明する。
【００１５】
以下の説明では、「ＡＡＡテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ＡＡＡテーブル」を「ＡＡＡ情報」と呼ぶことができる。
【００１６】
また、以下の説明では、要素（例えばエクステント）の識別情報として番号が使用されるが、他種の識別情報（例えば名前、識別子）が使用されてよい。
【００１７】
また、以下、「プログラム」を主語として処理を説明する場合があるが、プログラムは、コントローラ（ストレージコントローラ、又はＳＳＤコントローラ）に含まれるプロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がコントローラ或いはプロセッサとされてもよい。また、コントローラは、処理の一部又は全部を行うハードウェア回路を含んでもよい。コンピュータプログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバ、又は、コンピュータで読取可能な記憶メディアであってもよい。
【００１８】
また、以下の説明では、物理記憶デバイスを「Ｄｉｓｋ」と便宜上表記することがあるが、この表記は、物理記憶デバイスが有する記憶媒体が必ずしも円盤状の記憶媒体であることを意味しない。物理記憶デバイスは、例えば、ＳＳＤでもよい。
【００１９】
また、以下の説明では、期間或いは時間を用いるが、期間或いは時間の単位は、以下の例に限定されない。例えば、期間或いは時間の単位は、年、月、日、時、分、秒のうちのいずれか１つ或いはいずれか２以上の組合せであってもよい。
【００２０】
また、以下の説明では、ＳＳＤに含まれる不揮発半導体記憶媒体は、フラッシュメモリ（ＦＭ）であるとする。そのフラッシュメモリは、ブロック単位で消去が行われ、ページ単位でＲ／Ｗが行われる種類のフラッシュメモリ、典型的にはＮＡＮＤ型のフラッシュメモリであるとする。しかし、フラッシュメモリは、ＮＡＮＤ型に代えて他種のフラッシュメモリ（例えばＮＯＲ型）でもよい。また、フラッシュメモリに代えて、他種の不揮発半導体記憶媒体、例えば相変化メモリが採用されてもよい。
【００２１】
また、ＮＡＮＤ型のフラッシュメモリは、一般に、複数のブロック（物理ブロック）で構成されている。各ブロックは、複数のページ（物理ページ）で構成されている。１以上のＳＳＤ（例えば後述のＲＡＩＤグループ）に基づく論理ページ群（論理的な記憶空間）が提供されてよい。何のデータも書き込まれていない物理ページを、「空きページ」と言うことができる。各論理ページについて、最近書き込まれたデータを「有効データ」と言い、有効データが書き込まれたことにより旧いデータとなったデータを「無効データ」と言うことができる。また、有効データが格納されている物理ページを「有効ページ」と言うことができ、無効データが格納されている物理ページを「無効ページ」と言うことができる。
【００２２】
図１は、実施形態の概要を示す図である。
【００２３】
ストレージ装置１０は、ストレージコントローラ１００と、複数の物理記憶デバイス（Ｄｉｓｋ）１１を備える。複数の物理記憶デバイス１１は、ＲＡＩＤグループ（ＲＧ）５０を構成する。ＲＧ５０は、ＰＧ（Ｐａｒｉｔｙ  Ｇｒｏｕｐ）であってもよい。ＲＧ５０は、論理記憶領域の基になっている。論理記憶領域は、エクステント７０でもよいし、ストレージ装置１０に接続されている上位装置（例えばホスト計算機３０）に提供される論理ボリューム（ＬＵ：Ｌｏｇｉｃａｌ  Ｕｎｉｔ）の全部或いは一部でもよい。なお、ストレージコントローラ１００は、ＲＧを論理ボリュームであるＶＤＥＶ（Ｖｉｒｔｕａｌ  Ｄｅｖｉｃｅ）として管理してもよいし、一つのＲＧを複数のＶＤＥＶに分割して管理してもよい。
【００２４】
ストレージコントローラ１００は、キャッシュメモリ１３０を含む。上位装置からのライトデータは、キャッシュメモリ１３０に格納され、その後、ＲＧ５０へデステージされる。ストレージコントローラ１００は、キャッシュメモリ１３０に格納されているデータのうち、デステージ前のデータをダーティデータとして管理する。
【００２５】
ストレージコントローラ１００は、上位装置からライト要求を受信した場合、ライト要求のライト先であるＲＧのＲＧ実空き容量が、当該ＲＧのＲＧ予定デステージ量より大きいか否かを判定する。ＲＧ実空き容量は、ＲＧの物理的な空きスペースであり、ＲＧの物理容量から、ＲＧの物理的な使用量であるＲＧ実使用量を減じて得られる値である。ＲＧ予定デステージ量は、当該ＲＧへデステージされる可能性のあるデータの量である。ＲＧ予定デステージ量は、例えば、キャッシュメモリ１３０内で、当該ＲＧに対応するダーティデータの量であるＲＧダーティデータ量と、それ以外にデステージ処理までに追加されるダーティデータの量の予測値であるデータ量であるマージンとの和である。なお、ＲＧ予定デステージ量は、ライト要求に示されたライトデータ量を含んでもよい。
【００２６】
Ｄｉｓｋ１１が圧縮機能を有する場合、ストレージコントローラ１００は、各Ｄｉｓｋ１１の内部情報を取得し、内部情報に基づいてＲＧ実使用量を算出する。
【００２７】
当該ＲＧのＲＧ実空き容量がデステージに十分であると判定された場合、ストレージコントローラ１００は、ライトデータ転送許可通知をホスト計算機３０へ送信し、ホスト計算機３０からライトデータを受信し、ライトデータをキャッシュメモリ１３０へ書き込む。その後、ストレージコントローラ１００は、ライト要求と非同期で、キャッシュメモリ１３０からＲＧ５０へデステージを行う。
【００２８】
当該ＲＧのＲＧ実空き容量がデステージに十分でないと判定された場合、ストレージコントローラ１００は、当該ＲＧの空き待ちジョブを実行する。空き待ちジョブ中、ストレージコントローラ１００は、上位装置からのライトデータのためのキャッシュメモリ１３０の領域を確保せず、当該ＲＧへのライトデータを受信しない。その後、ストレージコントローラ１００は、ＲＧ間でデータを移動するデータ配置制御処理を実行することにより、当該ＲＧのＲＧ実空き容量を増加させる。これに応じて、当該ＲＧのＲＧ実空き容量がＲＧ予定デステージ量より大きいと判定された場合、ストレージコントローラ１００は、当該ＲＧの空き待ちジョブを解放し、上位装置からライトデータを受信し、ライトデータをキャッシュメモリへ書き込む。
【００２９】
なお、空き待ちジョブ中、管理者が当該ＲＧに物理記憶デバイス１１を追加することで、当該ＲＧのＲＧ実空き容量を増加させてもよい。この場合、ストレージコントローラ１００は、データ配置制御処理を実行しなくてもよい。
【００３０】
次に、データ配置制御処理について説明する。
【００３１】
ストレージコントローラ１００は、上位装置からのＩ／Ｏ要求に伴う処理とは別に、ＲＡＩＤグループ５０間でデータを移動するデータ配置制御処理として、ＲＡＩＤグループ５０の枯渇回避処理、寿命平準化処理、Ｉ／Ｏ性能平準化（リバランス）処理（入出力平準化処理）、ストレージ階層仮想化における再配置処理等を行う。ここで、ＲＡＩＤグループが半導体記憶ユニットの一例である。なお、半導体記憶ユニットを１つの物理記憶デバイス１１としてもよい。
【００３２】
ＳＳＤは、ＨＤＤに比べＩ／Ｏ処理が非常に高速であるというメリットを有しているが、データの書き込み回数には上限があり、ＨＤＤに比べ寿命が短いというデメリットも有している。
【００３３】
フラッシュメモリ（典型的にはＮＡＮＤ型のフラッシュメモリ）は、データを書き換えようとしたとき、そのデータが格納されている物理領域上に、データを直接上書くことができない。その物理領域上のデータに対してデータの書き換えを行うためには、フラッシュメモリの消去単位であるブロックと呼ばれる単位で、その物理領域上のデータに対して消去処理（以下、ブロック消去）を実行した後、ブロック消去が実行された物理領域上にデータを書く必要がある。
【００３４】
しかしながら、各ブロックについてのブロック消去の回数（以下、消去回数）は、フラッシュメモリの物理的な制約から限界がある。そして、ブロックの消去回数がこの限界を超えると、そのブロックにはデータを格納することができなくなってしまう。つまり、ＳＳＤを構成する全ブロックの消去回数が限界を超えると、そのＳＳＤの寿命となる。
【００３５】
そこで、一般のＳＳＤでは、ウエアレベリング（以下、ＷＬ）とよばれる手法を用いて、ＳＳＤの長寿命化が図られている。ＷＬでは、一般に、消去回数が多いブロックには、低頻度で更新されるデータが格納され、消去回数が少ないブロックには、高頻度で更新されるデータが格納される。これにより、ブロック間の消去回数を平準化し、特定のブロックのみが劣化することを抑えることができる。
【００３６】
ストレージ装置の物理記憶デバイスとしてＳＳＤが採用される場合、複数のＳＳＤがストレージ装置に搭載されることが一般的である。このようなストレージ装置においては、各ＳＳＤにおいて特定のブロックのみが劣化することを抑えられても、ＳＳＤ間の負荷に不均衡が生じ、特定のＳＳＤのみに負荷が集中することがある。そこで、ＳＳＤ間にもＷＬを適用し、複数のＳＳＤ間の消去回数を平準化することで、ストレージ装置全体の長寿命化を実現する手法が、知られている。以下では、ＳＳＤなどの物理記憶デバイス間で行われるＷＬを、「寿命平準化」と言う。
【００３７】
寿命平準化では、ストレージコントローラが、移動対象のＳＳＤと移動対象のデータとを決定する。
【００３８】
データ配置制御処理において、ストレージコントローラ１００は、各物理記憶デバイス１１から各物理記憶デバイスに関する内部情報を取得する。例えば、物理記憶デバイス１１がＳＳＤ（フラッシュメモリを有する記憶デバイス）であれば、内部情報は、各種容量情報（全体容量、実使用量、データ圧縮後にフラッシュメモリに書き込まれたデータの総量など）と寿命に関する情報などである。
【００３９】
ストレージコントローラ１００は、これらの内部情報とＩ／Ｏ量に関する統計情報に基づいて、ＲＧの枯渇リスクを算出し、枯渇回避処理の実行要否を判断する。枯渇リスクは、例えば、ＲＧのライトＩ／Ｏ量（ＷＲＩ／Ｏ量）÷ＲＧ実空き容量、で算出する。以後、書き込みをＷＲと呼び、読み出しをＲＤと呼ぶことがある。また、枯渇リスクは、ＲＧに書き込まれた量であるＲＧ実ＷＲ量（ＦＭライト合計量の合計）÷ＲＧの実容量（物理容量の合計）、であってもよい。枯渇回避処理では、まず、ストレージコントローラ１００は、枯渇リスクが高く近い将来ＲＧ枯渇が発生しＷＲを受け付けられなくなってしまうＲＧ５０と、枯渇リスクが低くＲＧ枯渇までの時間が長いと予想されるＲＧ５０とを特定する。
【００４０】
次に、ストレージコントローラ１００は、枯渇リスクが高いＲＧ５０から枯渇リスクが低いＲＧ５０へ移動するデータ量（移動データ量）を決定する。移動データ量はユーザが設定する枯渇リスクに関する閾値（たとえばＲＧ使用量９０％など）を下回るだけの移動データ量でもよいし、ＲＧ５０間で枯渇リスクを平準化することのできる移動量でもよい。
【００４１】
次に、ストレージコントローラ１００は、決定した移動データ量だけデータを移動する。ここで、データを移動させる際の記憶領域の範囲を「エクステント」と呼ぶ。エクステントは、参照符号７０に示すように、複数の物理記憶デバイス１１（例えば、ＳＳＤ）にまたがったアドレス範囲（論理領域）である。フラッシュメモリのブロック単位や、ページ単位という小さい単位では、データ移動のための負荷が大きくなる。これに対して、ブロック及びページよりも大きい単位であって、複数のＲＧ５０にまたがったエクステントという単位でデータ移動を行うことでストレージコントローラ１００のデータ移動のための負荷を抑えることができる。
【００４２】
ストレージコントローラ１００は枯渇回避処理実行後、または枯渇回避処理が不要だと判断した場合、ＲＧ５０の残寿命を算出し、寿命平準化処理の実行要否を判断する。ＲＧ５０の残寿命としては、例えば、ＲＧ５０を構成する物理記憶デバイス１１（ここでは、ＳＳＤ）の残寿命情報の最小値をＲＧ５０の残寿命とする。または、ＲＧ５０の残寿命としては、ＲＧ５０を構成する物理記憶デバイス１１（ＳＳＤ）の残寿命の平均値としてもよい。寿命平準化処理では、まず、ストレージコントローラ１００は、残寿命が短く、近い将来寿命を迎え、使用不可となってしまうＳＳＤで構成されたＲＧと、残寿命が長いＳＳＤで構成されたＲＧとを特定する。
【００４３】
次に、ストレージコントローラ１００は、残寿命の短いＲＧの中でＷＲ負荷が高いエクステントと、残寿命の長いＲＧの中でＷＲ負荷が低いエクステントとを決定し、それらのエクステントのデータを交換する。
【００４４】
具体的には、ＷＲ負荷を判断するために、ストレージコントローラ１００は、エクステント毎にＷＲデータ量を計測する。例えば、ＳＳＤへのＷＲデータ量が多いと、ブロックの書き換えが頻繁に発生し、それに伴ってブロックの消去回数が増加する。ブロックの消去回数が増加すると、そのブロックの消去回数が限界（上限値）に達して、そのブロックへのリードはできるが、ＷＲが不可能となる。そして、このようなブロックが増加したＳＳＤは、使用不可能となる。このため、ストレージコントローラ１００が、ＷＲデータ量が多いエクステントを見つけ、そのエクステントに含まれるデータを、短寿命のＳＳＤのＲＧから、長寿命のＳＳＤのＲＧへ移動する。
【００４５】
これにより、ストレージコントローラ１００の負荷を高くすることなく、ＳＳＤ間で消去回数を平準化することができる。また、短寿命のＳＳＤのＲＧにおけるＷＲ  Ｉ／Ｏ量が多いエクステントと、長寿命のＳＳＤのＲＧにおけるＷＲ  Ｉ／Ｏ量が少ないエクステントとのデータを交換することで、最小の移動データ量で寿命平準化を実現することができる。
【００４６】
ストレージコントローラ１００は寿命平準化処理実行後、または寿命平準化処理が不要だと判断された場合、ＲＧ５０のＩ／Ｏ量を算出し、Ｉ／Ｏ性能リバランス処理の実行要否を判断する。Ｉ／Ｏ性能リバランス処理では、まず、ストレージコントローラ１００は、Ｉ／Ｏ量が多く、且つＩ／Ｏ負荷が高いＲＧと、Ｉ／Ｏ量が少なく、且つＩ／Ｏ負荷が低いＲＧを特定する。
【００４７】
次にストレージコントローラ１００は、Ｉ／Ｏ負荷が高いＲＧの中でＩ／Ｏ負荷が高いエクステントと、Ｉ／Ｏ負荷が低いＲＧの中でＩ／Ｏ負荷が低いエクステントとを決定し、それらのエクステントのデータを交換する。
【００４８】
なお、ストレージコントローラ１００は、データ配置制御処理のうち何れかの処理を含まなくてもよい。
【００４９】
以下、本実施形態の実施例について詳細に説明する。
【実施例１】
【００５０】
図２は、実施例１に係るストレージ装置１０を含むストレージシステム１００００の構成例を示す図である。【００５１】
ストレージシステム１００００は、ストレージ装置１０、及びホスト計算機３０を備える。ホスト計算機３０は、ストレージ装置１０を利用する上位装置の一例である。ホスト計算機３０は、例えばアプリケーションサーバである。ホスト計算機３０と、ストレージ装置１０とは、例えば、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）２０を経由して通信可能に接続されている。ＳＡＮ２０としては、例えば、ファイバチャネル、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ｉＳＣＳＩ（ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＩＥＥＥ１３９４バス、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）等を用いることが可能である。また、ＳＡＮ２０に代えて、他種の通信ネットワーク（例えばＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ））が採用されてもよい。なお、この図の例では、ストレージシステム１００００は、ホスト計算機３０及びストレージ装置１０をそれぞれ１つ備えているが、それらのうちの少なくとも一方を複数備えてもよい。【００５２】
ホスト計算機３０は、ストレージ装置１０に対して制御コマンド等を発行する制御ソフトウェア（図示省略）を実行することにより、制御コマンド等をストレージ装置１０に発行してストレージ装置１０の保守管理をする。この制御コマンドに基づく処理がストレージ装置１０で実行されることにより、ストレージ装置１０が有するＲＧのＲＡＩＤレベルの変更や、枯渇回避処理、寿命平準化処理、及びＩ／Ｏ性能リバランス処理の各種起動閾値の調整、及び、Ｐｏｏｌ単位又はＲＧ単位での圧縮機能のＯＮ／ＯＦＦ設定等の種々の作業を行うことができる。なお、ＲＧ５０は、複数のＳＳＤ（又はＨＤＤ）で構成され所定のＲＡＩＤレベルに従いデータを記憶する物理記憶デバイスグループである。ストレージ装置１０に対して制御コマンドを発行する計算機として、ホスト計算機３０とは別の計算機が使用されもよい。【００５３】
ストレージ装置１０は、ホスト計算機３０に接続されたストレージコントローラ（Ｓｔｏｒａｇｅ  ＣＴＬ）１００と、ストレージコントローラ１００に接続されたＤｉｓｋ  Ｂｏｘ１１０とを有する。【００５４】
ストレージコントローラ１００は、ストレージ装置１０の動作を制御する。ストレージコントローラ１００は、通信インタフェースデバイスと、メモリと、それらに接続された制御デバイスとを有する。通信インタフェースデバイスとして、フロントエンドの通信インタフェースデバイスであるＨｏｓｔ  Ｉ／Ｆ１０１と、バックエンドの通信インタフェースデバイスであるＤｉｓｋ  Ｉ／Ｆ１０７とがある。メモリとして、キャッシュメモリ１０３がある。制御デバイスとして、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））１０４がある。Ｈｏｓｔ  Ｉ／Ｆ１０１と、キャッシュメモリ１０３と、プロセッサ１０４と、Ｄｉｓｋ  Ｉ／Ｆ１０７とは、例えばＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）のような専用の接続バスで、内部ネットワーク１０２に接続されており、内部ネットワーク１０２を介して通信可能である。【００５５】
キャッシュメモリ１０３は、例えばＤＤＲ３（Ｄｏｕｂｌｅ  Ｄａｔａ  Ｒａｔｅ３）のようなＤＲＡＭである。Ｈｏｓｔ  Ｉ／Ｆ１０１は、ストレージ装置１０をＳＡＮ２０と接続するためのインタフェースである。内部ネットワーク１０２は、ストレージ装置１０の内部に存在するデバイス同士を接続するためのネットワークである。内部ネットワーク１０２は、スイッチを含む。内部ネットワーク１０２に代えて、スイッチ機能やＤＭＡ転送、ＲＡＩＤ演算等のアシスト機能を有するＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）を用いてもよい。プロセッサ１０４は、ストレージ装置１０の全体を制御する。プロセッサ１０４は、複数存在してもよい。この場合、複数のプロセッサ１０４が協調または分担してストレージ装置１０を制御するようにしてもよい。キャッシュメモリ１０３は、プロセッサ１０４がストレージ装置１０を制御するために必要なコンピュータプログラムやデータを記憶する領域を有する。Ｄｉｓｋ  Ｉ／Ｆ１０７は、ストレージコントローラ１００とＤｉｓｋ  Ｂｏｘ１１０とを接続するためのインタフェースである。Ｄｉｓｋ  Ｂｏｘ１１０は、種類の異なるＤｉｓｋ１１（例えば、ＨＤＤ１１１、ＳＳＤ７００といった不揮発物理記憶デバイス）を複数台備える。Ｄｉｓｋ  Ｂｏｘ１１０において、同じ種類の複数のＤｉｓｋでＲＧが構成される。各ＲＧから、ユーザデータの格納空間としての論理ボリュームが提供される。なお、この図の例では、Ｄｉｓｋ  Ｂｏｘ１１０を構成するＤｉｓｋ１１として、ＨＤＤ１１１及びＳＳＤ７００としているが、ＳＳＤ７００のみとしてもよい。【００５６】
なお、ストレージ装置１０の各部の数や、ストレージコントローラ１００の各部の数は、この図の例に限られない。【００５７】
図３は、ＳＳＤ７００の構成例を示す図である。【００５８】
ＳＳＤ７００は、複数のフラッシュメモリ７８０と、それらに接続されたＳＳＤコントローラ７１０とを有する。ＳＳＤコントローラ７１０は、ＳＳＤ７００の動作を制御する。ＳＳＤコントローラ７１０は、通信インタフェースデバイスと、メモリと、それらに接続された制御デバイス、およびデータの圧縮・伸長を実行するハードウェアデバイスとを有する。通信インタフェースデバイスとしては、フロントエンドの通信インタフェースデバイスであるＤｉｓｋ  Ｉ／Ｆ７１１と、バックエンドの通信インタフェースデバイスであるＦｌａｓｈ  Ｉ／Ｆ７１７とがある。メモリとしては、キャッシュメモリ７１６がある。制御デバイスとしては、プロセッサ７１３がある。データの圧縮・伸長を実行するハードウェアデバイスとして、圧縮・伸長回路７１８がある。なお、データの圧縮・伸長を実行する機能を、プロセッサ７１３が専用のプログラムを実行することで、ソフトウェア的に実現してもよい。Ｄｉｓｋ  Ｉ／Ｆ７１１と、プロセッサ７１３と、キャッシュメモリ７１６と、Ｆｌａｓｈ  Ｉ／Ｆ７１７と、圧縮・伸長回路７１８とは、内部ネットワーク７１２を介してそれぞれ接続されている。【００５９】
Ｄｉｓｋ  Ｉ／Ｆ７１１は、ストレージコントローラ１００のＤｉｓｋ  Ｉ／Ｆ１０７と専用の接続バスで接続されている。内部ネットワーク７１２は、デバイス同士を接続するためのネットワークである。内部ネットワーク７１２は、スイッチを含んでもよい。また、内部ネットワーク７１２をスイッチ機能を有したＡＳＩＣで代用してもよい。プロセッサ７１３は、ＳＳＤ７００全体を制御する。キャッシュメモリ７１６は、プロセッサ７１３がＳＳＤ７００を制御するために必要なコンピュータプログラムやデータを記憶する領域を有する。Ｆｌａｓｈ  Ｉ／Ｆ７１７は、ＳＳＤコントローラ７１０とフラッシュメモリ７８０とを接続するためのインタフェースである。【００６０】
本実施例において、ＳＳＤ７００は、複数のフラッシュメモリ７８０と、それらを制御するコントローラ７１０とを備える半導体記憶デバイスであり、外観形状等がフォームファクタに限定されるものではない。また、フラッシュメモリ７８０には、ＮＯＲやＮＡＮＤといった不揮発性の半導体メモリが使用されてよい。また、フラッシュメモリ７８０に代えて、磁気抵抗メモリであるＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）や、抵抗変化型メモリであるＲｅＲＡＭ（ｒｅｓｉｓｔａｎｃｅ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、強誘電体メモリであるＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）等の各種半導体メモリが使用されてもよい。【００６１】
図４は、フラッシュメモリ７８０の構成例を示す図である。【００６２】
フラッシュメモリ７８０は、複数のブロック７８２と、それらに接続されたフラッシュメモリコントローラ（以下、フラッシュコントローラ）７８１とを有する。フラッシュコントローラ７８１は、フラッシュメモリ７８０を制御する。各ブロック７８２は、複数のページ７８３により構成される。フラッシュメモリ７８０からのデータのＲＤ、及びフラッシュメモリ７８０へのデータのＷＲは、ページ単位で実行される。データ消去は、ブロック単位で実行される。ページ７８３は、複数のＣｏｄｅ  ｗｏｒｄ７８４により構成されており、Ｃｏｄｅ  ｗｏｒｄ７８４には、ホスト計算機３０により格納されたデータと、そのデータを保護するためのエラー訂正符号であるＥＣＣとが格納されている。【００６３】
フラッシュメモリ７８０は、例えば、ＮＡＮＤ型のフラッシュメモリである。ＮＡＮＤ型のフラッシュメモリでは、データを上書きすることができない。そのため、フラッシュメモリ７８０では、データがＷＲされているページ７８３に新たなデータをＷＲする際は、データを消去し、データが消去された消去済みのページ７８３に対してＷＲする。【００６４】
ＳＳＤコントローラ７１０は、ＳＳＤ７００内の複数のブロック７８２に対して、消去回数の平準化処理を行う。ＳＳＤコントローラ７１０は、更新頻度が小さいデータを消去回数の多いブロック７８２に格納し、更新頻度が大きいデータを消去回数の少ないブロック７８２に格納することで、ＳＳＤ７００内のブロック７８２の消去回数を平準化する。なお、ＳＳＤコントローラ７１０は、ＷＲの際に、消去回数の少ない空きブロック７８２を選択してデータを格納することで、消去回数の平準化を行ってもよい。この際、複数のブロック７８２を消去回数に応じて複数のグループに分けて、消去回数が少ないグループからデータを格納するブロック７８２を選択するようにしてもよい。このように、ＳＳＤ７００内の複数のブロック７８２の消去回数が平準化されることで、ＳＳＤ７００の長寿命化が達成される。【００６５】
図５は、ＳＳＤのアドレス空間の構成例を示す図である。【００６６】
ＳＳＤ７００に関して、物理アドレス空間８００と、物理アドレス空間８００より大きい論理アドレス空間９００とが存在する。物理アドレス空間８００は、実際のデータが格納される物理記憶領域のアドレス空間である。一方、論理アドレス空間９００は、ＳＳＤ７００がストレージコントローラ１００に対して提供する一意なアドレス空間である。【００６７】
ＳＳＤコントローラ７１０は、論理アドレス空間９００を、例えば物理ページサイズと同じ大きさを持つ複数個の領域（以下、論理ページ）９０１、９０２、９０３、９０４等に分割する。ここで、本実施例ではＳＳＤ７００は、データ圧縮機能を有しているため、論理ページ９０１のデータは圧縮データ９１１に、論理ページ９０２のデータは圧縮データ９１２に、論理ページ９０３のデータは圧縮データ９１３に、論理ページ９０４のデータは圧縮データ９１４にそれぞれ変換（圧縮）される。データパターン等によって、圧縮率が変化するため、論理ページを変換した各圧縮データのサイズは一定とは限らず、任意のサイズとなる。各圧縮データは、それぞれＣｏｄｅ  ｗｏｒｄ（ＣＷ）単位で物理ページに格納される。この図の例では、圧縮データ９１１はＣＷ７８４１に、圧縮データ９１２はＣＷ７８４２に、圧縮データ９１３はＣＷ７８４３とＣＷ７８４４とに、圧縮データ９１４はＣＷ７９００に格納される。【００６８】
このように、データ圧縮機能を有しているＳＳＤ７００では、論理ページと物理ページとは一対一の関係ではなく、実際にＦＭ７８０に格納される圧縮後の圧縮データに対して物理ページが動的に割り当てられる。また、このＳＳＤ７００では、論理アドレス空間９００を物理アドレス空間８００より大きくすることで、ストレージコントローラ１００はＳＳＤ７００が搭載する物理記憶容量以上のデータを書き込むことができる。【００６９】
ここで、論理アドレス空間９００をどの程度の大きさとするかを考える。本実施例では全書き込みデータが圧縮・伸長回路７１８で圧縮できる最良の圧縮率（たとえば８分の１）で圧縮されることを想定して、論理アドレス空間９００の大きさを決定する。この場合には、ＳＳＤ７００は自身が搭載する物理容量の８倍の大きさを持つ論理容量の論理アドレス空間９００をストレージコントローラ１００に提供する。例えば、物理的に１ＴＢの容量を搭載するＳＳＤ７００は、例えば最良の圧縮率８分の１だとすると、８ＴＢの論理容量をストレージコントローラ１００に提供する。これにより、ストレージコントローラ１００は圧縮機能を持たないＨＤＤやＳＳＤと同様に単にデータをライトするだけで、ＳＳＤ７００の実際の物理容量以上のデータを格納することができる。この場合、書き込まれたデータの圧縮率は、データパターン等によって変化するため、実際には８分の１より圧縮率が悪く（高く）なることがあり、ストレージコントローラ１００からＳＳＤ７００に対して必ずしも８ＴＢのデータを格納することができない。このように、ＳＳＤ７００の論理容量が満杯になる前に、物理容量が満杯になる状態を枯渇状態と呼ぶ。【００７０】
ストレージコントローラ１００は枯渇状態になったＳＳＤ７００に対しては、一切データをＷＲすることができない。枯渇状態のＳＳＤ７００に対するＷＲコマンドはエラー応答となる。なぜなら、前述のとおり、ＮＡＮＤ型のＦＭ７８０では、単純にデータを上書きすることができず、データが格納されているページに新たなデータをＷＲする際は、データを消去し、データが消去された消去済みのページに対してＷＲする必要があり、枯渇状態のＳＳＤ７００では、消去済みのページを用意することができないためである。【００７１】
逆に、非枯渇状態のＳＳＤ７００に対しては、ＷＲの制限はなく、論理アドレス空間９００全面に対してＷＲすることができる。【００７２】
そこで、ストレージコントローラ１００は、ＳＳＤ７００を枯渇状態にしないよう、後述の枯渇回避処理を実行し、ＳＳＤ７００を常に非枯渇状態に保つようにする。【００７３】
ＳＳＤコントローラ７１０は、論理アドレス空間９００を構成するアドレス範囲（論理記憶領域）と物理アドレス空間８００を構成するアドレス範囲（物理記憶領域）とのマッピングを動的に変更することで、ＳＳＤ７００内のＷＬ等を実現することができる。なお、論理アドレス空間９００と物理アドレス空間８００との対応は、プロセッサ７１３が後述の論物変換テーブル２３１００を用いて管理している。本実施例では、ストレージコントローラ１００は、ＳＳＤ７００内の論物変換テーブルを直接管理していない。ゆえに、ＳＳＤ７００のプロセッサ７１３がストレージコントローラ１００に対して、ＳＳＤ内部情報等で通知を行わない限り、ストレージコントローラ１００は、論理アドレス空間９００と物理アドレス空間８００との対応関係を把握することはできない。【００７４】
次に、容量仮想化技術について説明する。【００７５】
容量仮想化技術（例えば、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ）とは、ストレージ装置１０が有している物理的な容量より大きな仮想的な容量をホスト計算機３０側に提供する技術である。ホスト計算機３０は、仮想的な論理ボリューム（仮想ボリューム）に対してアクセスする。容量仮想化技術では、ストレージ装置１０がＷＲ要求を受けた場合に、ＷＲ要求のデータのＷＲ先の仮想的な記憶領域（仮想エクステント）に、物理的な記憶領域が割り当てられる。本実施例では、容量仮想化技術において割り当てられる物理的な記憶領域の単位をエクステント単位とする。また、エクステントのサイズは、数ＭＢから数ＧＢと多様性に富んでいてよい。【００７６】
図６は、容量仮想化技術の概要説明図である。【００７７】
同一種類のＤｉｓｋ１１（例えばＳＳＤ７００）でＲＧ（２００、３００、４００）が構成される。１以上のＲＧを基にＰｏｏｌ５００が構成される。【００７８】
エクステント（２４０、２４１、２４１、３４０、４４０等）は、Ｐｏｏｌ５００を分割することにより得られた記憶領域（部分記憶領域）、つまり、Ｐｏｏｌ５００の一部である。この図の例では、Ｐｏｏｌ５００は、ＲＧ２００、ＲＧ３００、及びＲＧ４００の３つのＲＧに基づいて構成されている。以下、ＲＧ２００を例に説明する。【００７９】
ＲＧ２００は、Ｄｉｓｋ２１０、Ｄｉｓｋ２２０、及びＤｉｓｋ２３０により構成されている。ＲＧ２００は、ＲＡＩＤ５を構築しており、Ｄａｔａ（この図中のＤ）及びＰａｒｉｔｙ（この図中のＰ）がＤｉｓｋ（２１０〜２３０）に格納される。【００８０】
ＲＧ２００に基づく記憶領域が複数のエクステント（２４０、２４１、２４２）に分割される。ＲＧ２００に基づく記憶領域は、複数のＳＳＤ７００によって提供される論理アドレス空間９００に対応する。【００８１】
エクステントは、ＳＳＤ７００のブロック７８２よりも大きいサイズの記憶領域である。エクステントのサイズは、例えば、ブロックのＮ倍（Ｎは２以上の整数）である。エクステントは、各Ｄｉｓｋに存在する論理アドレス空間であるエントリ（例えば、エントリ２５１、２５２、２５３、２５４、２５５、２５６）により構成される。エントリには、複数個のＤａｔａ及びＰａｒｉｔｙが格納される。この図の例では、例えばエントリ２５１には、データ２１１、データ２１２、パリティ２１３等が格納され、エントリ２５２には、データ２２１、データ２２３、パリティ２２２等が格納され、エントリ２５３には、データ２３２、データ２３３、パリティ２３１等が格納されている。エントリ２５４、２５５、及び２５６も同様に複数個のＤａｔａとＰａｒｉｔｙとが格納されている。また、エントリ２５１及び２５４は、Ｄｉｓｋ２１０内に、エントリ２５２及び２５５は、Ｄｉｓｋ２２０内に、エントリ２５３及び２５６は、Ｄｉｓｋ２３０内にそれぞれ構築されている。【００８２】
この図の例では、ＲＧ２００の記憶領域から、エクステント２４０、エクステント２４１、及びエクステント２４２が作成されている。ＲＧ３００の記憶領域から、エクステント３４０、エクステント３４１、及びエクステント３４２が作成されている。ＲＧ４００の記憶領域から、エクステント４４０、エクステント４４１、及びエクステント４４２が作成されている。【００８３】
仮想ボリューム６００は、ホスト計算機３０がユーザデータを格納するための仮想的な論理ボリュームである。仮想ボリューム６００の容量として定義される容量は、ストレージ装置１０が有する物理記憶デバイスの容量の合計よりも大きな記憶容量とすることができる。なお、仮想ボリューム６００は、任意の数の仮想エクステント（６０１〜６０７等）によって構成されている。仮想ボリューム６００の記憶領域は、仮想アドレス（仮想ボリュームを構成する論理アドレス）で管理されており、所定の範囲に区切られた仮想アドレスの記憶領域により、仮想エクステントが構成される。この図の例では、１つの仮想エクステントに対して１つのエクステントが対応付けられているが、１つの仮想エクステントに対して複数のエクステントが対応付けられてもよい。【００８４】
この図の例において、実線で示されている仮想エクステント６０１〜６０４は、ＲＧ２００、３００、及び４００からエクステントが割当てられている仮想エクステントである。すなわち、仮想エクステント６０１に対してはエクステント３４１が、仮想エクステント６０２に対してはエクステント２４２が、仮想エクステント６０３に対してはエクステント４４２が、仮想エクステント６０４に対してはエクステント２４０がそれぞれ割当てられている。また、この図の例において、破線で示されている仮想エクステント６０５〜６０７は、データのＷＲ先として指定されたアドレスが属している仮想エクステントではなく、このため、これら仮想エクステント６０５〜６０７にはエクステントが未割当てとなっている。【００８５】
図７は、データ移動処理によりＲＧ間でデータが移動された場合におけるデータアクセスの概要を説明する図である。データ移動処理は、ＳＳＤ向け非同期処理（後述）において実行される。【００８６】
ＲＧ間でデータが移動されると、ホスト計算機３０は、データへのアクセス先を移動先のＲＧへ変更しなければならない。しかし、仮想ボリューム６００を用いてアドレスが変換されることで、ホスト計算機３０は、アクセス先を変更することなく、移動先のデータへアクセスできる。つまり、ストレージコントローラ１００によって、仮想エクステント６１０の仮想アドレスに対する関連付けが、移動元のエクステント７０の論理アドレスから、移動先のエクステント８０の論理アドレスへ変更される。従って、ＳＳＤ向け非同期処理を実行しても、ホスト計算機３０は、仮想ボリューム６００にアクセスすることで、アクセス先のアドレスを変更する必要はない。なお、本実施例では、アドレス変換に仮想ボリュームを用いているが、これに限られず、仮想ボリュームを用いずにアドレス変換を行うようにしてもよい。【００８７】
図８は、キャッシュメモリ１０３の構成例を示す図である。【００８８】
ストレージコントローラ１００のキャッシュメモリ１０３は、プログラムエリア１２０００、テーブルエリア１３０００、及びデータキャッシュエリア１４０００を有する。プログラムエリア１２０００及びテーブルエリア１３０００は、ストレージ装置１０を制御するためのプログラムや各種テーブルが格納される領域である。データキャッシュエリア１４０００は、ユーザデータを一時的に格納するために使用される領域である。【００８９】
プログラムエリア１２０００は、Ｗｒｉｔｅ  Ｉ／Ｏ  プログラム１２１００、Ｒｅａｄ  Ｉ／Ｏ  プログラム１２２００、寿命管理プログラム１２３００、ＳＳＤ情報取得プログラム１２４００、寿命平準化プログラム１２５００、枯渇回避プログラム１２６００、Ｉ／Ｏ性能リバランスプログラム１２７００、及び流入制御プログラム３１１００を記憶する。【００９０】
Ｗｒｉｔｅ  Ｉ／Ｏ  プログラム１２１００は、ホスト計算機３０からのＷＲ要求を処理するプログラムである。Ｒｅａｄ  Ｉ／Ｏ  プログラム１２２００は、ホスト計算機３０からのＲＤ要求を処理するプログラムである。寿命管理プログラム１２３００は、プロセッサ１０４がＳＳＤ７００などの各種Ｄｉｓｋの寿命を管理するためのプログラムである。ＳＳＤ情報取得プログラム１２４００は、ＳＳＤ７００の内部情報を取得するためのプログラムである。寿命平準化プログラム１２５００は、ＳＳＤ７００の寿命をＲＧ単位に換算し、ＲＧの寿命平準化を実行するためのプログラムである。枯渇回避プログラム１２６００は、ＳＳＤ７００の容量情報から、ＲＧの枯渇リスクを計算し、枯渇の可能性が高いＲＧの枯渇回避を実行するプログラムである。Ｉ／Ｏ性能リバランスプログラム１２７００は、ＲＧのＩ／Ｏ統計情報から、特定ＲＧが性能ボトルネックとなっていることを検出し、性能平準化を実行するプログラムである。流入制御プログラム３１１００は、デステージ不可能であることを判定した場合、ホスト計算機３０からのＷＲデータを制限するプログラムである。【００９１】
テーブルエリア１３０００は、Ｄｉｓｋ管理テーブル（テーブルをＴＢＬと表記することもある）１３１００、ＲＧ管理テーブル１３２００、Ｐｏｏｌ管理テーブル１３３００、エクステント管理テーブル１３４００、仮想ボリューム管理テーブル１３５００、統計情報管理テーブル１３６００、ＦＭライト量予想テーブル１３７００、エントリ管理テーブル１３８００、キャッシュ管理テーブル３２１００、ＲＧ判定管理テーブル３２２００、及び判定結果管理テーブル３２３００を有する。【００９２】
Ｄｉｓｋ管理ＴＢＬ１３１００は、Ｄｉｓｋ  Ｂｏｘ１１０に格納されているＤｉｓｋに関する情報を格納するテーブルである。ＲＧ管理ＴＢＬ１３２００は、ＲＡＩＤグループに関する情報を格納するテーブルである。Ｐｏｏｌ管理ＴＢＬ１３３００は、Ｐｏｏｌの情報を格納するテーブルである。エクステント管理ＴＢＬ１３４００は、エクステントに関する情報を格納するテーブルである。仮想ボリューム管理ＴＢＬ１３５００は、仮想ボリュームに関する情報を格納するテーブルである。統計情報管理ＴＢＬ１３６００は、ストレージ装置１０のＩ／Ｏ性能に関する各種情報を格納するテーブルである。ＦＭライト量予想ＴＢＬ１３７００は、プロセッサ１０４が寿命平準化処理を実行する際の移動対象データを決定するために、ＳＳＤ内部のデータ書き込み量を予想する際に使用するテーブルである。キャッシュ管理テーブル３２１００は、データキャッシュエリア１４０００に関する情報を格納するテーブルである。ＲＧ判定管理テーブル３２２００は、ＲＧの判定に関する情報を格納するテーブルである。判定結果管理テーブル３２３００は、ＲＧの判定結果を格納するテーブルである。【００９３】
データキャッシュエリア１４０００には、ＷＲ要求及びＲＤ要求に従うユーザデータ１４１００が一時記憶される。ユーザデータ１４１００は、ホスト計算機３０が使用するデータである。【００９４】
図９は、Ｄｉｓｋ管理テーブル１３１００の構成例を示す図である。【００９５】
Ｄｉｓｋ管理ＴＢＬ１３１００は、主にストレージコントローラ１００が管理する各Ｄｉｓｋの枯渇管理および寿命管理を行うための情報（枯渇関連情報、残寿命情報）を管理する。Ｄｉｓｋ管理ＴＢＬ１３１００は、Ｄｉｓｋ毎に、Ｄｉｓｋ＃１３１０１、Ｄｉｓｋ  Ｔｙｐｅ１３１０２、情報更新日１３１０３、残保証期間１３１０４、予想残寿命１３１０５、圧縮設定１３１０６、ＦＭリード合計量１３１０７、ＦＭライト合計量１３１０８、平均圧縮率１３１０９、残消去回数１３１１０、ＦＭ使用量１３１１１、物理容量１３１１２、及び論理容量１３１１３を有する。【００９６】
Ｄｉｓｋ＃１３１０１は、Ｄｉｓｋの識別子であり、ユニークな番号である。Ｄｉｓｋ  Ｔｙｐｅ１３１０２は、Ｄｉｓｋの種別を表す。Ｄｉｓｋの種別としては、例えば、ＳＳＤ（ＳＬＣ）、ＳＳＤ（ＭＬＣ）、ＨＤＤなどがある。ここで、ＳＳＤは、使用するＮＡＮＤフラッシュメモリの種類により、ＳＬＣ（Ｓｉｎｇｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）タイプ、ＭＬＣ（Ｍｕｌｔｉ  Ｌｅｖｅｌ  Ｃｅｌｌ）タイプ、及びＴＬＣ（Ｔｒｉｐｌｅ  Ｌｅｖｅｌ  Ｃｅｌｌ）タイプの３種類が存在する。ＳＬＣは、高速、長寿命、低容量なフラッシュメモリであり、数十万から数万回オーダーのブロック消去が可能である。ＭＬＣは、低速、短寿命、及び大容量なフラッシュメモリであり、数万から数千回オーダーのブロック消去が可能である。ＴＬＣはＭＬＣに比べ、さらに、低速、短寿命であるが、大容量なフラッシュメモリであり数千から数百回オーダーのブロック消去が可能である。【００９７】
情報更新日１３１０３は、Ｄｉｓｋに関する情報が更新された最近の日付（例えば、寿命情報等を更新した日付）を表す。残保証期間１３１０４は、ベンダが定めるＤｉｓｋの保証期間があとどれだけ残っているかを示す。この図の例では、残保証期間１３１０４は、日数として示されている。ここで、Ｄｉｓｋの保証期間とは、Ｄｉｓｋが正常に動作することが保証された期間（例えば、５年）である。フラッシュメモリは、データの書き込みによる消去回数の増加により劣化し、寿命に到達すると、データのＲ／Ｗが不可能、または、データ保持特性が著しく悪化する。よって、Ｄｉｓｋを正常に使用可能な期間として、予め消去回数や総ＷＲ量等に基づいて閾値が設定される。Ｄｉｓｋの使用期間が保証期間を超えた場合は、そのＤｉｓｋを交換することとなる。【００９８】
予想残寿命１３１０５は、ＳＳＤの残消去回数１３１１０がゼロに到達すると予想される残りの期間を示す。予想残寿命１３１０５は、プロセッサ１０４（寿命管理プログラム１２３００）が予想した数値である。ここでは、予想残寿命１３１０５は、日数として示されている。ここで、予想残寿命１３１０５が残保証期間１３１０４を下回るということは、例えばＩ／Ｏのばらつきなどにより、特定のＳＳＤに負荷が集中することで、このＳＳＤがベンダの想定よりも高負荷な状態となってしまい、ベンダが保証する使用期限よりも前に、ＳＳＤが寿命に到達するということを意味している。寿命平準化処理を実行することで、特定のＳＳＤを含むＲＧへのＷＲの集中を回避することができ、ＳＳＤの長寿命化を図ることができる。予想残寿命１３１０５は、情報更新日時１３１０３、ＦＭリード合計量１３１０７、ＦＭライト合計量１３１０８、及び残消去回数１３１１０等を基に算出することができる。残寿命期間の算出方法については後述する。【００９９】
圧縮設定１３１０６は、対象Ｄｉｓｋがデータ圧縮機能を有効にしているか否かを示す。圧縮設定１３１０６は、有効（使用）中の場合はＯＮ（又はＯＮに相当する数値（例えば「１」））となり、無効（未使用）中の場合はＯＦＦ（又はＯＦＦに相当する数値（例えば「０」））となっている。なお、データ圧縮機能のＯＮ／ＯＦＦの設定については、ストレージ装置１０の管理者がホスト計算機３０にインストールされた制御ソフトウェア等を介して設定できるようにしてもよい。【０１００】
ＦＭリード合計量１３１０７は、ＳＳＤ内に発生したリード量（ＳＳＤ内のフラッシュメモリから読み出されたデータの量）の積算値であり、ＳＳＤ内部情報を基に更新される。ＦＭライト合計量１３１０８は、ＳＳＤ内に発生したＷＲ量（ＳＳＤ内のフラッシュメモリに書き込まれたデータの量）の積算値であり、ＳＳＤ内部情報を基に更新される。平均圧縮率１３１０９は、ＳＳＤ内部でデータが圧縮されることにより、元のサイズに比べて何パーセントのサイズになったかを示す数値である。なお平均圧縮率１３１０９は、各ＳＳＤの圧縮率の平均値であり、ＳＳＤ内部情報を基に更新される。【０１０１】
残消去回数１３１１０は、ＳＳＤにおいて実行可能なブロック消去の回数に従う値を示す。本実施例では、残消去回数１３１１０は、予め決まっている消去可能回数に対する残消去回数についての割合（パーセンテージ）となっており、ＳＳＤ内部情報を基に更新される。残消去回数１３１１０の値がゼロになったとき、フラッシュメモリ内の全てのブロックの消去回数が上限に達したことを示す。【０１０２】
ＦＭリード合計量１３１０７、ＦＭライト合計量１３１０８、平均圧縮率１３１０９及び残消去回数１３１１０は、ストレージコントローラ１００が各ＳＳＤから取得した情報に基づいて更新される。ストレージコントローラ１００は、例えば、Ｓ．Ｍ．Ａ．Ｒ．Ｔ．（Ｓｅｌｆ−Ｍｏｎｉｔｏｒｉｎｇ  Ａｎａｌｙｓｉｓ  ａｎｄ  Ｒｅｐｏｒｔｉｎｇ  Ｔｅｃｈｎｏｌｏｇｙ）等の汎用インタフェースを用いて各ＳＳＤから情報を取得する。【０１０３】
ＦＭ使用量１３１１１は、ＳＳＤ内に格納されているデータ量を表し、ＳＳＤ内部情報を基に更新される。物理容量１３１１２は、ＳＳＤが搭載する物理容量を表す。論理容量１３１１３は、ＳＳＤに対する論理容量を示す。この論理容量は、圧縮・伸長回路７１８で可能な最良の圧縮率を前提とした容量であって、物理容量より大きな容量である。ストレージコントローラ１００は圧縮設定１３１０６がＯＮの場合は、論理容量１３１１３をＳＳＤの容量と認識し、圧縮設定１３１０６がＯＦＦの場合は、物理容量１３１１２をＳＳＤの容量と認識する。【０１０４】
なお、Ｄｉｓｋ管理ＴＢＬ１３１００において、枯渇管理が必要ないＤｉｓｋ（たとえば圧縮設定１３１０６がＯＦＦのＳＳＤ）については、平均圧縮率１３１０９、ＦＭ使用量１３１１１、及び論理容量１３１１３を、プロセッサ１０４による取得対象としなくてもよい。また、Ｄｉｓｋ管理ＴＢＬ１３１００において、寿命管理が必要ないＤｉｓｋ（例えば、ＨＤＤ）については、残保証期間１３１０４、予想残寿命１３１０５、残消去回数１３１１０、及びＦＭ使用量１３１１１を、プロセッサ１０４による取得対象としなくてもよい。【０１０５】
図１０は、ＲＧ管理テーブル１３２００の構成例を示す図である。【０１０６】
ＲＧ管理ＴＢＬ１３２００は、ＲＧ毎に、ＲＧ＃１３２０１、Ｄｉｓｋ  Ｔｙｐｅ１３２０２、ＲＡＩＤ  Ｌｅｖｅｌ１３２０３、ＲＡＩＤ構成１３２０４、圧縮設定１３２０５、及びＤｉｓｋ＃１３２０６を有する。【０１０７】
ＲＧ＃１３２０１は、ＲＧの識別子であり、ユニークな番号である。Ｄｉｓｋ  Ｔｙｐｅ１３２０２は、ＲＧを構成するＤｉｓｋの種別を表す。ＲＧは、同一種類のＤｉｓｋから構成される。【０１０８】
ＲＡＩＤ  Ｌｅｖｅｌ１３２０３は、ＲＧのＲＡＩＤレベルを表す。ＲＡＩＤレベルは、例えば、ＲＡＩＤ  １＋０、１、３、４、５、６といった種々の値である。ＲＡＩＤ構成１３２０４は、ＲＡＩＤを構成するデータＤｉｓｋ（データを格納するＤｉｓｋ）の数、及びパリティＤｉｓｋ（パリティを格納するＤｉｓｋ）の数を表す。圧縮設定１３２０５は、ＲＧを構成するＤｉｓｋに対する圧縮機能の設定状況を示す。圧縮設定１３２０５がＯＮである場合には、このＲＧを構成する全Ｄｉｓｋの圧縮設定がＯＮであることを表す。また、圧縮設定１３２０５がＯＦＦである場合には、このＲＧを構成する全Ｄｉｓｋの圧縮設定がＯＦＦであることを表す。Ｄｉｓｋ＃１３２０６は、ＲＧを構成するＤｉｓｋの番号（Ｄｉｓｋ＃）を表す。Ｄｉｓｋ＃１３２０６は、ＲＡＩＤ構成１３２０４が示すＤｉｓｋの数と同数の有効なＤｉｓｋ＃を含む。【０１０９】
図１１は、Ｐｏｏｌ管理テーブル１３３００の構成例を示す図である。【０１１０】
Ｐｏｏｌ管理ＴＢＬ１３３００は、Ｐｏｏｌ毎に、Ｐｏｏｌ＃１３３０１、ＲＧ＃１３３０２、ＲＧ残容量１３３０３、及びＰｏｏｌ残容量１３３０４を有する。【０１１１】
Ｐｏｏｌ＃１３３０１は、Ｐｏｏｌの識別子であり、ユニークな番号である。ＲＧ＃１３３０２は、Ｐｏｏｌを構成する全てのＲＧのＲＧ番号を表す。ＲＧ残容量１３３０３は、ＲＧ毎の残容量を表す。Ｐｏｏｌ残容量１３３０４は、Ｐｏｏｌの残容量を表し、Ｐｏｏｌを構成するＲＧのＲＧ残容量１３３０３の合計値に等しい。ＲＧ残容量１３３０３及びＰｏｏｌ残容量１３３０４は、仮想ボリュームのエクステント未割当領域にデータの書き込みが発生した際に、プロセッサ１０４（Ｗｒｉｔｅ  Ｉ／Ｏ  プログラム１２１００）によりデータの書き込みにより減少した値に更新される。
【０１１２】
図１２は、エントリ管理テーブル１３８００の構成例を示す図である。【０１１３】
エントリ管理ＴＢＬ１３８００は、Ｄｉｓｋ毎に、Ｄｉｓｋ＃１３８０１、エントリ＃１３８０２、サイズ１３８０３、Ｓｔａｒｔ−ＬＢＡ１３８０４、Ｌａｓｔ−ＬＢＡ１３８０５、及び割当先エクステント＃１３８０６を有する。【０１１４】
Ｄｉｓｋ＃１３８０１は、Ｄｉｓｋの識別子（Ｄｉｓｋ＃）であり、ユニークな番号である。エントリ＃１３８０２はＤｉｓｋ内に作成されたエントリの識別子（エントリ＃）であり、Ｄｉｓｋ毎にユニークな識別子である。サイズ１３８０３は、エントリの容量（例えばＢｙｔｅ単位）を示す。【０１１５】
Ｓｔａｒｔ−ＬＢＡ１３８０４及びＬａｓｔ−ＬＢＡ１３８０５は、エントリが、何番のＬＢＡから何番のＬＢＡまでのアドレス空間を使用して作成されているかを示す。具体的には、Ｓｔａｒｔ−ＬＢＡ１３８０４は、エントリのアドレス空間の先頭のＬＢＡの番号であり、Ｌａｓｔ−ＬＢＡ１３８０５は、エントリのアドレス空間の最後尾のＬＢＡの番号である。【０１１６】
割当先エクステント＃１３８０７は、このエントリがエクステントに割当済みであるか否かを示す。具体的には、割当先エクステント＃１３８０７は、エクステントに割当済みのエントリである場合に、その割当先のエクステント＃であり、エクステントに未割当てのエントリである場合には、未割当てであることを示す「Ｎ／Ａ」となる。【０１１７】
図１３は、エクステント管理テーブル１３４００の構成例を示す図である。【０１１８】
エクステント管理ＴＢＬ１３４００は、エクステント毎に、エクステント＃１３４０１、サイズ１３４０２、Ｄｉｓｋ＃１３４０３、及び割当てエントリ＃１３４０４を有する。【０１１９】
エクステント＃１３４０１は、エクステントの識別子であり、ユニークな番号である。サイズ１３４０２は、エクステントの容量（例えばＢｙｔｅ単位）を表す。Ｄｉｓｋ＃１３４０３、及び割当てエントリ＃１３４０４は、エクステントを構築するＤｉｓｋのＤｉｓｋ＃と、エントリのエントリ＃とを表す。【０１２０】
図１４は、仮想ボリューム管理テーブル１３５００の構成例を示す図である。【０１２１】
仮想ボリューム管理ＴＢＬ１３５００は、仮想ボリューム毎に、ＬＵ＃１３５０１、仮想容量１３５０２、実使用容量１３５０３、仮想エクステント＃１３５０４、及び割当てエクステント＃１３５０５を有する。【０１２２】
ＬＵ＃１３５０１は、仮想ボリュームの識別子（ＬＵ＃）であり、ユニークな番号である。仮想容量１３５０２は、仮想ボリュームの仮想的な容量である。仮想容量１３５０２に対応する仮想的な容量がホスト計算機３０に提供される。実使用容量１３５０３は、仮想ボリュームに実際に割当てられているエクステントの容量の合計値である。【０１２３】
仮想エクステント＃１３５０４は、仮想ボリュームに含まれる仮想エクステントの識別子である。この図の例では、ＬＵ＃０の仮想ボリュームには、仮想エクステント＃０〜ｎが含まれることを示している。仮想エクステント＃１３５０４は昇順に並んでおり、ホスト計算機３０から発行されるＲ／Ｗコマンドで指定されるＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）がどの仮想エクステント＃に対応するかを計算によって求めることができる。割当てエクステント＃１３５０５は、仮想ボリュームに割り当てられているエクステントの識別子（番号）である。ストレージコントローラ１００は、仮想エクステント毎に、エクステントの割当て状態を管理する。この図の例では、仮想エクステント＃０には、エクステント＃０が割当てられ、仮想エクステント＃１には、エクステント＃１００が割当てられて管理されている。なお、物理的な記憶領域であるエクステントが未割当ての仮想エクステントの仮想エクステント＃１３５０４に対応するエクステント＃１３５０５は、エクステントが割当てられていないことを示す「−」となる。この図の例では、仮想エクステント＃ｎの仮想エクステントには、エクステントが割当てられていないことを示している。【０１２４】
図１５は、統計情報管理テーブル１３６００の構成例を示す図である。【０１２５】
統計情報管理ＴＢＬ１３６００は、各エントリ及び／又はエクステントへのＲ／Ｗ等のアクセス状況に関する情報（入出力量情報）である。ストレージコントローラ１００は、エントリ単位でＲ／Ｗ状況を監視しており、統計情報管理ＴＢＬ１３６００を構成する。なお、エクステントへのＲ／Ｗのアクセス状況は、統計情報管理ＴＢＬ１３６００の内容を基に、ストレージコントローラ１００が各エクステントに属するエントリの各情報の値を加算することにより、取得することができる。【０１２６】
統計情報管理ＴＢＬ１３６００は、Ｄｉｓｋ毎に、Ｄｉｓｋ＃１３６０１、エントリ＃１３６０２、平均ＷＲ  Ｉ／Ｏ  Ｓｉｚｅ１３６０３、平均ＲＤ  Ｉ／Ｏ  Ｓｉｚｅ１３６０４、ＷＲ比率１３６０５、ＷＲ量１３６０６、及びＲＤ量１３６０７を有する。なお、情報項目１３６０１〜１３６０７の少なくとも１つを統計情報と呼ぶ場合がある。【０１２７】
Ｄｉｓｋ＃１３６０１は、Ｄｉｓｋの識別子であり、ユニークな番号である。エクステント＃１３６０２は、Ｄｉｓｋに基づくエクステントの識別子であり、ユニークな番号である。【０１２８】
平均ＷＲ  Ｉ／Ｏ  Ｓｉｚｅ１３６０３及び平均ＲＤ  Ｉ／Ｏ  Ｓｉｚｅ１３６０４は、このエントリに発生したＷＲ  Ｉ／Ｏ、及びＲＤ  Ｉ／ＯのＩ／Ｏサイズの平均値である。ＷＲ比率１３６０５は、このエントリに発生したＩ／Ｏ要求のうち、その要求がＷＲコマンドであった比率である。ＷＲ量１３６０６及びＲＤ量１３６０７は、このエントリに発生したＷＲデータの総量及びＲＤデータの総量を示す。なお、ＷＲ量１３６０６及びＲＤ量１３６０７は、ストレージコントローラ１００がＳＳＤに対して依頼したＩ／Ｏ内容を記録した数値であるため、これら数値は圧縮前の値である。本実施例では、統計情報の監視を、エントリ及び／又はエクステント単位とすることで、フラッシュメモリのブロックやページ単位で監視するよりも、監視負荷を低減することができる。【０１２９】
ストレージコントローラ１００は、仮想ボリューム管理ＴＢＬ１３５００に基づいて、割当て中のエクステントについて、アクセス状況を監視する。統計情報は、仮想ボリュームにエクステントが割当てられた後からの累積値、及びＲ／Ｗの傾向である。なお、統計情報は、単位時間当たりの累積値としてもよい。【０１３０】
また、枯渇回避処理、寿命平準化処理、又はＩ／Ｏ性能リバランス処理の実行後、各処理の対象のエクステントの統計情報を、リセットするようにしてもよい。例えば、ストレージコントローラ１００は、寿命平準化処理において、移動されたエクステントに関する統計情報のみをリセットしてもよい。【０１３１】
図１６は、実施例１におけるＦＭ  ＷＲ量予想テーブル１３７００の構成例を示す図である。【０１３２】
ＦＭ  ＷＲ量予想ＴＢＬ１３７００は、Ｄｉｓｋ管理ＴＢＬ１３１００及び統計情報管理ＴＢＬ１３６００を基に構成される。ＦＭ  ＷＲ量予想ＴＢＬ１３７００は、Ｄｉｓｋ毎に、Ｄｉｓｋ＃１３７０１、エントリ＃１３７０２、ＷＲ量１３７０３、圧縮率１３７０４、及びＦＭ  ＷＲ予想量１３７０５を有している。【０１３３】
Ｄｉｓｋ＃１３７０１は、Ｄｉｓｋの識別子であり、ユニークな番号である。エントリ＃１３７０２は、エントリの識別子であり、ユニークな番号である。【０１３４】
ＷＲ量１３７０３は、エントリを書込み先としたＷＲデータの総量を示す。ＷＲ量１３７０３は、ＦＭ  ＷＲ量の予想の際に、統計情報管理ＴＢＬ１３６００のＷＲ量１３６０６の値を基に更新される。圧縮率１３７０４は、このＤｉｓｋにおける圧縮率の平均値であり、ＳＳＤから取得した内部情報を基に設定される。圧縮率１３７０４は、ＦＭ  ＷＲ量の予想の際に、Ｄｉｓｋ管理ＴＢＬ１３１００の平均圧縮率１３１０９の値がコピーされて設定される。なお、本実施例では、Ｄｉｓｋ単位の圧縮率の平均値を使用するため、全エントリの数値はすべて同じ値としている。【０１３５】
ＦＭ  ＷＲ予想量１３７０５は、フラッシュメモリに実際に書き込まれるデータの予想量（ＦＭ  ＷＲ予想量）を示す。本実施例では、或るエントリのＷＲ量１３７０３と、そのエントリが属するＤｉｓｋ全体の平均圧縮率１３７０４とを乗算した値を、このエントリに発生したＦＭ  ＷＲ予想量とみなす。また、エクステント単位のＦＭ  ＷＲ予想量は、そのエクステントを構成する１以上のエントリのＦＭ  ＷＲ予想量の合計をとることで取得することができる。【０１３６】
例えば、或るエクステントへのＷＲ予想量が多いと、そのエクステントの基になっているＳＳＤにおいてブロックに対するデータの書き換えが頻繁に発生し、ブロックの消去回数が増加する。ブロックの消去回数が増加すると、そのブロックを有するＳＳＤの寿命が短くなる。寿命平準化を行う際に、エクステントのＷＲ予想量を基に、移動対象のエクステントを決めることで、精度高くＳＳＤ寿命を平準化することができる。なお、移動対象のデータはエントリとしてもよい。【０１３７】
図１７は、キャッシュ管理テーブル３２２００の構成例を示す図である。【０１３８】
ストレージコントローラ１００は、データキャッシュエリア１４０００を複数のキャッシュ領域に分割して管理する。キャッシュ領域は、予め設定されたサイズを有する。【０１３９】
キャッシュ管理テーブル３２１００の一つのレコードは、仮想ボリュームにおける仮想アドレス３２１０１と、当該仮想アドレスに対応するキャッシュ領域を示すキャッシュ領域＃３２１０２と、当該キャッシュ領域がダーティであるか否かを示すフラグであるステータス３２１０３と、を含む。【０１４０】
キャッシュ領域は、スロットであってもよいし、スロットより小さいセグメントであってもよい。また、ストレージコントローラ１００は、セグメント単位で領域を確保し、スロット単位でステータス３２１０３を管理してもよい。【０１４１】
図１８は、ＲＧ判定管理テーブル３２２００の構成例を示す図である。【０１４２】
ＲＧ判定管理テーブル３２２００の一つのレコードは、ＲＧを示すＲＧ＃３２２０１と、当該ＲＧのＲＧ実空き容量＃３２２０２と、当該ＲＧのマージン３２２０３と、当該ＲＧのダーティデータ量３２２０４と、当該ＲＧが属するプールを示すプール＃３２２０５と、を含む。【０１４３】
図１９は、判定結果管理テーブル３２３００の構成例を示す図である。【０１４４】
判定結果管理テーブル３２３００は、後述のストレージ状態更新処理によるストレージ装置１０全体の判定結果を示すシステムフラグ３２３０１と、各プールを示すプール＃３２３０２と、ストレージ状態更新処理による各プールの判定結果を示すプールフラグ３２３０３と、プールに属する各ＲＧを示すＲＧ＃３２３０４と、ストレージ状態更新処理による各ＲＧの判定結果を示すＲＧフラグ３２３０５と、を含む。【０１４５】
システムフラグ３２３０１は、ストレージ状態更新処理時に、ストレージ装置１０内で少なくとも一つのＲＧフラグ３２３０５がＯＮであればＯＮに設定され、そうでなければＯＦＦに設定される。一つのプールのプールフラグ３２３０３は、ストレージ状態更新処理時に、当該プール内の少なくとも一つのＲＧフラグ３２３０５がＯＮであればＯＮに設定され、そうでなければＯＦＦに設定される。一つのＲＧのＲＧフラグ３２３０５は、ストレージ状態更新処理時に、当該ＲＧが空き条件を満たせばＯＮに設定され、そうでなければＯＦＦに設定される。【０１４６】
図２０は、ＳＳＤ７００におけるキャッシュメモリ７１６の構成例を示す図である。【０１４７】
キャッシュメモリ７１６は、プログラムエリア２２０００、テーブルエリア２３０００、及びデータキャッシュエリア２４０００を有する。【０１４８】
プログラムエリア２２０００及びテーブルエリア２３０００は、ＳＳＤ７００を制御するためのプログラムや各種テーブルが格納される領域である。データキャッシュエリア２４０００は、ユーザデータを一時的に格納するための領域である。【０１４９】
プログラムエリア２２０００は、Ｗｒｉｔｅ  Ｉ／Ｏ  プログラム２２１００、Ｒｅａｄ  Ｉ／Ｏ  プログラム２２２００、ＳＳＤ内ＷＬ  プログラム２２３００、空き容量生成プログラム２２４００、ＳＳＤ内部情報通信プログラム２２５００、及び、圧縮・伸長プログラム２２６００を有する。【０１５０】
Ｗｒｉｔｅ  Ｉ／Ｏ  プログラム２２１００は、ストレージコントローラ１００からのＷＲ要求を処理するプログラムである。Ｒｅａｄ  Ｉ／Ｏ  プログラム２２２００は、ストレージコントローラ１００からのＲＤ要求を処理するプログラムである。ＳＳＤ内ＷＬ  プログラム２２３００は、ＳＳＤ内部でのＷＬを実行するためのプログラムである。空き容量生成プログラム２２４００は、ＳＳＤ７００の空き容量の枯渇を回避するために行われるリクラメーション処理を実行するプログラムである。【０１５１】
ＳＳＤ内部情報通信プログラム２２５００は、ストレージコントローラ１００の要求に従ってＳＳＤの内部情報を作成し、そのＳＳＤ内部情報をストレージコントローラ１００に通知するためのプログラムである。圧縮・伸長プログラム２２６００は、ＳＳＤコントローラ７１０が、プロセッサ７１３を用いてデータの圧縮・伸長を実行するためのプログラムである。なお、圧縮・伸長プログラム２２６００を、圧縮・伸長回路７１８を制御することによってデータの圧縮・伸長を実行するようにしてもよい。【０１５２】
テーブルエリア２３０００は、論物変換テーブル２３１００、統計情報管理テーブル２３２００、及び圧縮設定フラグ２３３００を有する。【０１５３】
論物変換ＴＢＬ２３１００は、ＳＳＤ７００の論理アドレス空間と物理アドレス空間との対応を管理するためのテーブルである。統計情報管理ＴＢＬ２３２００は、ＳＳＤの統計情報を管理するためのテーブルである。圧縮設定フラグ２３３００は、ＳＳＤ７００の圧縮設定がＯＮであるか、ＯＦＦであるかを示すフラグである。【０１５４】
データキャッシュエリア２４０００は、ユーザデータ２４１００を格納する領域である。ここで、ユーザデータ２４１００は、ブロックに書き込まれるデータ及びブロックから読み出されたデータである。【０１５５】
図２１は、論物変換テーブル２３１００の構成例を示す図である。【０１５６】
論物変換テーブル２３１００は、Ｓｔａｒｔ−ＬＢＡ２３１０１、Ｂｌｏｃｋ＃２３１０２、Ｐａｇｅ＃２３１０３、及びＣｏｒｄ  Ｗｏｒｄ（ＣＷ）＃２３１０４を有する。【０１５７】
Ｓｔａｒｔ−ＬＢＡ２３１０１は、ストレージコントローラ１００に提供するＬＢＡの開始位置を示す。なお、フラッシュメモリのＩ／Ｏ単位はページであるため、Ｓｔａｒｔ−ＬＢＡ２３１０１の数値は、ページサイズの倍数で管理されている。Ｂｌｏｃｋ＃２３１０２、Ｐａｇｅ＃２３１０３、及びＣＷ＃２３１０４は、Ｓｔａｒｔ−ＬＢＡ２３１０１に対応する物理アドレス空間の情報（ブロック＃、ページ＃、ＣＷ＃）を示している。なお、本実施例では、ＳＳＤがデータ圧縮機能を有するため、２ページ以上にわたる論理アドレス空間が、１ページの物理ページにマッピングされることがあり得る。この図の例では、ＬＢＡ０からＬＢＡ８１９１に対応する論理アドレス空間と、ＬＢＡ８１９２からＬＢＡ１６３８３に対応する論理アドレス空間が同一の物理ページ（Ｂｌｏｃｋ＃０のＰａｇｅ＃０）に格納されていることを示している。また、Ｓｔａｒｔ−ＬＢＡ２３１０１は、論理アドレス空間９００に対応しているため、ストレージコントローラ１００からのＷＲが無く実際に物理ページが割り当てられていないものも存在する。この場合には、Ｓｔａｒｔ−ＬＢＡに対応する物理空間アドレス空間を示すＢｌｏｃｋ＃２３１０２、Ｐａｇｅ＃２３１０３、及びＣＷ＃２３１０４は無効な情報である。【０１５８】
図２２は、ＳＳＤ内の統計情報管理テーブル２３２００の構成例を示す図である。【０１５９】
統計情報管理ＴＢＬ２３２００には、ストレージコントローラ１００からの要求に応じてプロセッサ７１３が通知した情報が格納される。統計情報管理ＴＢＬ２３２００は、ライト要求合計量２３２１１、リード要求合計量２３２１２、ＦＭライト合計量２３２１３、平均圧縮率２３２１４、ＦＭリード合計量２３２１５、及び残消去回数２３２１６を有する。【０１６０】
ライト要求合計量２３２１１とリード要求合計量２３２１２とは、ストレージコントローラ１００がＳＳＤ７００に対してＷＲ要求したデータと、リード要求したデータとのそれぞれの総量であり、それぞれが、統計情報管理ＴＢＬ１３６００内のＷＲ量１３６０６の合計と、ＲＤ量１３６０７の合計と同じ値となる。ＦＭライト合計量２３２１３及びＦＭリード合計量２３２１５は、ＦＭ７８０に実際にＷＲされたデータの総量及びＦＭ７８０から実際にＲＤされたデータの総量である。なお、これらの値には、リクラメーション等、ストレージコントローラ１００からのＲ／Ｗ要求以外の処理においてＳＳＤ内部で発生するＲ／Ｗ量を含んでいる。ＦＭライト合計量２３２１３は、Ｄｉｓｋ管理ＴＢＬ１３１００のＦＭ使用量１３１１１と同じ値となる。【０１６１】
平均圧縮率２３２１３は、ＳＳＤ内部でのデータ圧縮処理により得られた圧縮データの、圧縮率の平均値である。残消去回数２３２１６は、ＦＭにデータがＷＲされることにより発生したＦＭの消去回数の合計値をベンダがサポートする最大消去回数から引いた値である。統計情報管理ＴＢＬ２３２００の数値は、データのＲ／Ｗ、又は消去が発生した際に更新される。【０１６２】
以下、ストレージコントローラ１００の動作について説明する。【０１６３】
図２３は、ホスト計算機３０からのライト要求に関わるライト処理を示す。【０１６４】
なお、この図の例における、ストレージコントローラ１００の処理は、Ｗｒｉｔｅ  Ｉ／Ｏ  プログラム１２１００が実行されることにより実現され、ＳＳＤコントローラ７１０の処理は、Ｗｒｉｔｅ  Ｉ／Ｏ  プログラム２２１００が実行されることにより実現される。【０１６５】
ホスト計算機３０は、ＷＲ要求をストレージコントローラ１００に送信する（Ｓ１０）。ストレージコントローラ１００は、ＷＲ要求を受信すると、後述のＷＲ要求受領処理を実行する（Ｓ２０）。【０１６６】
その後、ストレージコントローラ１００は、ＷＲ要求が表すＷＲ先範囲（仮想ボリュームのアドレス範囲）にエクステントが割当済みか否かを、仮想ボリューム管理テーブル１３５００を基に判定する（Ｓ３０）。【０１６７】
この判断の結果、エクステントが既に割当済みである場合（Ｓ３０：Ｙｅｓ）は、ストレージコントローラ１００は、処理をＳ５０へ移行させる。エクステントが未割当である場合（Ｓ３０：Ｎｏ）は、ストレージコントローラ１００は、未割当てのエクステントを見つけて、そのエクステントをＷＲ先範囲の仮想エクステントに割り当てる（Ｓ４０）。なお、ストレージコントローラ１００は、キャッシュメモリ１０３からＳＳＤ７００にデータを転送する際に、エクステントを割当ててもよい。【０１６８】
その後、ストレージコントローラ１００は、ＷＲ先範囲にキャッシュ領域が割当済み（キャッシュ領域確保要求がある）か否かを判定する（Ｓ５０）。【０１６９】
この判断の結果、キャッシュ領域が既に割当済みである場合（Ｓ５０：Ｙｅｓ）は、ストレージコントローラ１００は、処理をＳ７０へ移行させる。キャッシュ領域が未割当である場合（Ｓ５０：Ｎｏ）は、ストレージコントローラ１００は、未割当てのキャッシュ領域を見つけて、そのキャッシュ領域をＷＲ先範囲に割り当てる（Ｓ６０）。【０１７０】
その後、ストレージコントローラ１００は、ホスト計算機３０へＷＲデータ転送許可通知を送信することで、ＷＲデータ送付を促す（Ｓ７０）。【０１７１】
次に、ホスト計算機３０はＷＲデータ転送許可通知に応じてＷＲデータを送付し（Ｓ８０）、ストレージコントローラ１００は、ＷＲデータを受信し、受信されたＷＲデータをキャッシュメモリ１０３に格納する（Ｓ８５）。その後、ストレージコントローラ１００は、ＷＲデータ転送許可通知をホスト計算機３０へ送信する（Ｓ９０）。【０１７２】
ホスト計算機３０は、ストレージコントローラ１００から転送完了応答を受信すると、ライト処理を終了する（Ｓ９５）。【０１７３】
図２４は、デステージ処理を示す。【０１７４】
割当済みのキャッシュ領域数が予め設定されたキャッシュ領域数閾値を超える等の条件が成立した場合、ストレージコントローラ１００は、デステージ処理を実行する。【０１７５】
ストレージコントローラ１００は、データの格納先となるＳＳＤ７００のＳＳＤコントローラ７１０に、キャッシュメモリ１０３に記憶されたデータと、そのデータについてのＷＲ要求とを送信する（Ｓ１０５）。【０１７６】
ＳＳＤコントローラ７１０は、ストレージコントローラ１００からデータ及びＷＲ要求を受信し、自身の圧縮設定フラグ２３１００を参照して、データ圧縮が有効になっているか否かを判断する（Ｓ１０６）。この結果、データ圧縮が有効となっている場合（Ｓ１０６：Ｙｅｓ）は、ＳＳＤコントローラ７１０は、データを圧縮し（Ｓ１０７）、論物変換ＴＢＬ２３１００を参照し、データの格納先のＦＭ位置（Ｂｌｏｃｋ＃、Ｐａｇｅ＃、及びＣＷ＃）を決定し、決定したＦＭ位置にそのデータを格納する（Ｓ１０８）。【０１７７】
一方、データ圧縮設定が無効である場合（Ｓ１０６：Ｎｏ）は、ＳＳＤコントローラ７１０は、データ圧縮は行わず、論物変換ＴＢＬ２３１００を基に、データの格納先のＦＭ位置を決定し、決定したＦＭ位置にそのデータを格納する（Ｓ１０８）。【０１７８】
Ｓ１０８を実行した後、ＳＳＤコントローラ７１０は、受信したデータに関する統計情報管理ＴＢＬ２３２００のライト要求合計量２３２１１、ＦＭライト合計量２３２１３、平均圧縮率２３２１４、及び残消去回数２３２１６を更新する（Ｓ１０９）。次に、ＳＳＤコントローラ７１０は、ストレージコントローラ１００に対して、Ｓ１０６で受信したＷＲ要求の応答として、転送完了応答を送信する（Ｓ１１０）。【０１７９】
ストレージコントローラ１００は、ＳＳＤコントローラ７１０から転送完了応答を受信すると、統計情報管理ＴＢＬ１３６００の平均ＷＲ  Ｉ／Ｏ  Ｓｉｚｅ１３６０３、ＷＲ比率１３６０５、及びＷＲ量１３６０６を更新し（Ｓ１１１）、このシーケンスを終了する。【０１８０】
図２５は、ホスト計算機３０からのリード要求に関わるリード処理を示す。【０１８１】
なお、この図の例における、ストレージコントローラ１００の処理は、Ｒｅａｄ  Ｉ／Ｏ  プログラム１２２００が実行されることにより実現され、ＳＳＤコントローラ７１０の処理は、Ｒｅａｄ  Ｉ／Ｏ  プログラム２２２００が実行されることにより実現される。【０１８２】
ホスト計算機３０は、ストレージコントローラ１００に対して、データのＲＤ要求を送信する（Ｓ１８０）。【０１８３】
ストレージコントローラ１００は、データのＲＤ要求を受信し、そのＲＤ要求に示されたＲＤ範囲（仮想ボリュームのアドレス範囲）に割り当てられているキャッシュ領域がある（要求されたデータがキャッシュ領域にある）か否かを判定する（Ｓ１９０）。【０１８４】
当該キャッシュ領域が割り当てられていない場合（Ｓ１９０：Ｙ）、ストレージコントローラ１００は、処理をＳ２０８へ移行させる。当該キャッシュ領域が割り当てられていない場合（Ｓ１９０：Ｎ）、ストレージコントローラ１００は、当該キャッシュ領域を割り当て、エクステントの基となるＳＳＤ７１０を特定し、特定したＳＳＤ７１０のＳＳＤコントローラ７１０に対して、データのＲＤ要求（ステージング要求）を送信する（Ｓ２０１）。【０１８５】
ＳＳＤコントローラ７１０は、データのＲＤ要求を受信し、論物変換ＴＢＬ２３１００を基に、ＲＤ要求に従う論理アドレス範囲に対応する物理アドレス範囲を特定し、この物理アドレス範囲（１以上のページ）からデータを読み出す処理を行う。この処理では、ＳＳＤコントローラ７１０は、データ圧縮が有効となっているか否かを確認し（Ｓ２０２）、データ圧縮が有効である場合（Ｓ２０２：Ｙｅｓ）は、読み出したデータに対して伸長を行い（Ｓ２０３）、伸長したデータをストレージコントローラ１００に送信する（Ｓ２０４）。一方、データ圧縮が有効でない場合（Ｓ２０２：Ｎｏ）は、ＳＳＤコントローラ７１０は、読み出したデータを伸張することなくストレージコントローラ１００に送信する（Ｓ２０４）。【０１８６】
Ｓ２０４の次に、ＳＳＤコントローラ７１０は、統計情報管理ＴＢＬ２３２００のリード要求合計量２３２１２、及びＦＭリード合計量２３２１５を更新する（Ｓ２０５）。【０１８７】
ストレージコントローラ１００は、Ｓ２０１で送信したＲＤ要求の応答として、ＳＳＤコントローラ７１０からデータを受信すると、受信したデータをキャッシュメモリ１０３に格納し（Ｓ２０６）、統計情報管理ＴＢＬ１３６００の平均ＲＤ  Ｉ／Ｏ  Ｓｉｚｅ１３６０４、ＷＲ比率１３６０５、及びＲＤ量１３６０７を更新する（Ｓ２０７）。その後、ストレージコントローラ１００は、Ｓ２０６でキャッシュメモリ１０３に格納したデータをホスト計算機３０に送信する（Ｓ２０８）。【０１８８】
ホスト計算機３０は、Ｓ２００で送信したＲＤ要求の応答として、ストレージコントローラ１００からデータを受信すると、リード処理を終了する（Ｓ２０９）。【０１８９】
なお、ストレージコントローラ１００は、ライト処理のＳ８５において、データをキャッシュメモリ１０３に格納した後、デステージ処理を行い、デステージ処理後に転送完了応答をホスト計算機３０へ送信してもよい。この場合、ストレージコントローラ１００は、マージンを用いなくてもよいし、予め設定された値をマージンとして用いてもよい。【０１９０】
図２６は、ＳＳＤ向け非同期処理を示す。【０１９１】
ストレージコントローラ１００は、Ｉ／Ｏ要求とは非同期で、予め設定されたＳＳＤ内部情報取得周期毎に、各ＳＳＤコントローラ７１０に対して、ＳＳＤ内部情報取得処理（後述）を実行する（Ｓ３００）。ここでストレージコントローラ１００は、ＳＳＤ内部情報取得コマンドをＳＳＤコントローラ７１０へ送信し、その応答である実行結果通知コマンドをＳＳＤコントローラ７１０から受信する。Ｓ３００の処理で取得する情報は例えば、統計情報管理ＴＢＬ２３２００に保存されているデータ（ＦＭライト合計量２３２１３、平均圧縮率２３２１４、ＦＭリード合計量２３２１５、及び残消去回数２３２１６）である。【０１９２】
ストレージコントローラ１００は、取得した内部情報を基に、Ｄｉｓｋ管理ＴＢＬ１３１００を更新する（Ｓ３０１）。具体的には、ストレージコントローラ１００は、ＦＭライト合計量２３２１３に基づいて、ＦＭライト合計量１３１０８及びＦＭ使用量１３１１１を更新し、ＦＭリード合計量２３２１５に基づいて、ＦＭリード合計量１３１０７を更新し、平均圧縮率２３２１４に基づいて、平均圧縮率１３１０９を更新し、残消去回数２３２１６に基づいて、残消去回数１３１１０を更新する。【０１９３】
次に、ストレージコントローラ１００はＤｉｓｋ管理ＴＢＬ１３１００の情報を基に、このＤｉｓｋの枯渇リスクを計算する（Ｓ３０２）。ここで、枯渇リスクとは、Ｄｉｓｋの枯渇しやすさを判断するための指標であり、本実施例では、数値が高いほうが枯渇し易いことを示す。枯渇リスクは、例えば、ＤｉｓｋへのＷＲ量×平均圧縮率÷空き容量、で算出される。つまり、ＷＲ頻度が高く、圧縮率が悪く、空き容量が少ないほど枯渇リスクが高くなる。ＤｉｓｋへのＷＲ量は、統計情報管理ＴＢＬ１３６００のＷＲ量１３６０６のＤｉｓｋ単位の合計であり、平均圧縮率は、Ｄｉｓｋ管理ＴＢＬ１３１００の平均圧縮率１３１０９であり、空き容量は、Ｄｉｓｋ管理ＴＢＬ１３１００の物理容量１３１１２からＦＭ使用量１３１１１を引くことにより算出できる。【０１９４】
次に、ストレージコントローラ１００は、枯渇リスクが閾値以上か否かを判断し、枯渇回避処理を実行するか否かを判断する（Ｓ３０３）。なお、閾値は、ストレージ装置１０の管理者により、ホスト計算機３０にインストールされた制御ソフトウェア等を介して設定されるようにしてもよい。枯渇リスクが閾値以上であって、枯渇回避処理が必要であると判断された場合（Ｓ３０３：Ｙｅｓ）は、ストレージコントローラ１００は、枯渇回避処理（後述）を実行し（Ｓ３０４）、枯渇回避処理の終了後に、処理をＳ３０５に進める。一方、枯渇リスクが閾値以上でなくて、枯渇回避処理が不要であると判断された場合（Ｓ３０３：Ｎｏ）は、ストレージコントローラ１００は、処理をＳ３０５に進める。【０１９５】
Ｓ３０５では、ストレージコントローラ１００は、寿命平準化処理の要否判断を行うため、ＲＧ単位の残寿命を計算する（Ｓ３０５）。ここで、ＲＧ単位の残寿命は、ＲＧを構成する各ＳＳＤの残寿命のうち最悪値としてもよいし、各ＳＳＤの残寿命の平均値としてもよい。各ＳＳＤの残寿命を計算する方法については、後述する。ストレージコントローラ１００は、計算された各ＳＳＤの残寿命を、Ｄｉｓｋ管理ＴＢＬの予想残寿命１３１０５に格納する。【０１９６】
次に、ストレージコントローラ１００は、ＲＧ間での残寿命の差分を求め、差分が閾値以上か否かを判断し、寿命平準化処理を実行するか否かを判断する（Ｓ３０６）。なお、閾値は、ストレージ装置１０の管理者により、ホスト計算機３０にインストールされた制御ソフトウェア等を介して設定されるようにしてもよい。なお、寿命平準化処理を実行するか否かについては、例えば、保証期間よりも先に寿命に到達するＳＳＤがあるか否か（残保証期間１３１０４よりも予想残寿命１３１０５の方が少ないＳＳＤがあるか否か）により判断するようにしてもよい。【０１９７】
この結果、差分が閾値以上であり、寿命平準化処理が必要であると判断された場合（Ｓ３０６：Ｙｅｓ）は、ストレージコントローラ１００は、寿命平準化処理（後述）を実行する（Ｓ３０７）。この寿命平準化処理が終了すると、再度Ｓ３０５に進む。これにより、寿命平準化処理後の状態についての再びＳＳＤ  ＲＧの残寿命が算出され、Ｓ３０６で残寿命の差分が閾値以上であるか否かの判断が行われることとなる。【０１９８】
一方、差分が閾値以上でなく、寿命平準化処理が不要であると判断された場合（Ｓ３０６：Ｎｏ）は、ストレージコントローラ１００は、Ｉ／Ｏ性能リバランス処理の要否判断を行うため、ＲＧ物理容量当たりのＩ／Ｏ量を算出する（Ｓ３０８）。ここで、ＲＧ物理容量当たりのＩ／Ｏ量は、例えば、ＲＧのＩ／Ｏ量×平均圧縮率÷ＲＧ物理容量で計算される。ＲＧのＩ／Ｏ量は、統計情報管理ＴＢＬ１３６００のＷＲ量１３６００及びＲＤ量１３６０７から各ＳＳＤのＩ／Ｏ量を算出し、ＲＧを構成しているＳＳＤ分のＩ／Ｏ量を加算することにより算出することができる。平均圧縮率は、例えば、Ｄｉｓｋ管理ＴＢＬ１３１００の平均圧縮率１３１０９からＲＧの中で最も圧縮率の悪い数値とする。ＲＧ物理容量は、Ｄｉｓｋ管理ＴＢＬ１３１００の物理容量１３１１２からＲＧを構成しているＳＳＤ分の物理容量を加算することにより算出することができる。【０１９９】
次に、ストレージコントローラ１００は、ＲＧ間で物理容量当たりのＩ／Ｏ量の差分を求め、この差分が閾値以上であるか否かを判断して、Ｉ／Ｏ性能リバランス処理を実行するか否かを判断する（Ｓ３０９）。この結果、差分が閾値以上の場合（Ｓ３０９：Ｙｅｓ）は、ストレージコントローラ１００は、Ｉ／Ｏ性能リバランス処理（後述）を実行し（Ｓ３１０）、Ｉ／Ｏ性能リバランス処理終了後に、ＳＳＤ向け非同期処理を終了する。一方、差分が閾値未満の場合（Ｓ３０９：Ｎｏ）は、ストレージコントローラ１００は、ＳＳＤ向け非同期処理を終了する。【０２００】
なお、ＳＳＤ向け非同期処理は、任意のタイミングで実行されても良く、一定の間隔（例えば一日おき）で実行されても良く、また、特定のコマンドを受け取ったタイミングで実行されてもよい。更に、ＳＳＤ向け非同期処理は、ホスト計算機３０の制御ソフトウェアからユーザが本処理の実行契機を指示することで実行されてもよい。【０２０１】
また、この図の例によれば、枯渇回避処理の優先度が最も高く、寿命平準化処理の優先度が２番目に高く、ＩＯ性能理バランス処理の優先度が最も低く、このような優先度が高い順に処理が行われるが、これらの処理のそれぞれの優先度は、この図の優先度と違っていてもよい。例えば、ＩＯ性能理バランス処理の優先度が寿命平準化処理の優先度より高くてもよい。【０２０２】
また、枯渇回避処理、寿命平準化処理及びＩＯ性能理バランス処理のような複数のデータ配置制御処理（記憶デバイス間でのデータ移動が生じる処理）がある。ストレージコントローラ１００は、いずれかのデータ配置制御処理（対象のデータ配置制御処理）を行う前に、対象のデータ配置制御処理を行っても対象のデータ配置制御処理より優先度が高いデータ配置制御処理（先に行われたデータ配置制御処理）がスキップされるための条件が満たされたままとなるか否かを判断してもよい。「より優先度が高いデータ配置制御処理がスキップされるための条件が満たされたまま」とは、より優先度が高いデータ配置制御処理によって満たされるべき条件が満たされたままとなることであり、例えば、枯渇リスクがそれの閾値未満のままである、ＲＧ間残寿命差がそれの閾値未満のままである、又は、ＲＧ間ＩＯ量差がそれの閾値未満のままである、ということである。この判断の結果が肯定的の場合に、ストレージコントローラ１００は、対象のデータ配置制御処理を行ってよい。また、この判断の結果が否定的の場合には、ストレージコントローラ１００は、対象のデータ配置制御処理をスキップしてよい（行わないでよい）。【０２０３】
図２７は、ＳＳＤ内部情報取得処理を示す。【０２０４】
前述のＳ３００においてストレージコントローラ１００は、ＳＳＤ内部情報取得処理を実行する。この図は、ＳＳＤ内部情報取得コマンド２５０００と、その応答である実行結果通知コマンド２５１００の構成例を示す。【０２０５】
ＳＳＤ内部情報取得コマンド２５０００は、ストレージコントローラ１００がＳＳＤ７００に対して送信するコマンドである。【０２０６】
ＳＳＤ内部情報取得コマンド２５０００は、例えば、コマンド＃２５００１及び取得対象２５００２を有している。コマンド＃２５００１はコマンドの識別子（コマンド＃）である。取得対象２５００２は、ストレージコントローラ１００がＳＳＤからの取得を希望する対象である項目である。具体的には、取得対象２５００２は、ＳＳＤ７８０の統計情報管理ＴＢＬ２３２００に含まれる項目のうち、どの項目の値を必要としているのかを示す。【０２０７】
実行結果通知コマンド２５１００は、ＳＳＤ７００がストレージコントローラ１００に対して送付するコマンドであり、ＳＳＤ内部情報取得コマンド２５０００に対する応答内容を含んでいる。実行結果通知コマンド２５１００は、例えば、コマンド＃２５１０１及びＤｉｓｋ内部情報２５１０２を含む。コマンド＃２５１０１は、どの要求コマンドに対する応答なのかを示し、要求コマンドに対応するコマンド＃２５００１となっている。Ｄｉｓｋ内部情報２５１０２は、取得対象２５００２で指定された内容に対する回答値であり、この値は、ＳＳＤの統計情報管理ＴＢＬ２３２００から計算、もしくはコピーされた値となっている。【０２０８】
ＳＳＤ内部情報取得処理において、ストレージコントローラ１００は、各ＳＳＤ７００にＳＳＤ内部情報取得コマンド２５０００を送信することで、ＦＭ使用量１３１１１、物理容量１３１１２等を取得し、物理容量１３１１２からＦＭ使用量１３１１１を減ずることにより、ＳＳＤ７００毎の物理的な空き容量サイズであるＳＳＤ実空き容量を算出し、ＲＧ管理テーブル１３２００に基づいて、ＲＧ毎のＳＳＤ実空き容量の合計であるＲＧ実空き容量を算出し、ＲＧ判定管理テーブル３２２００へ格納する。なお、ＳＳＤ７００がＳＳＤ実空き容量を管理し、ストレージコントローラ１００がＳＳＤ７００からＳＳＤ実空き容量を取得してもよい。【０２０９】
ＳＳＤ内部情報取得処理によれば、ストレージコントローラ１００は、定期的に、各ＳＳＤ７００の状態を取得することができる。これにより、ＳＳＤ７００により圧縮されてＳＳＤ７００に格納されているデータ量や、ＳＳＤ７００を空き物理容量（実空き容量）を取得することができる。【０２１０】
図２８は、ストレージ状態更新処理を示す。【０２１１】
ストレージコントローラ１００は、流入制御プログラム３１１００に従って、Ｉ／Ｏ要求とは非同期で、予め設定されたストレージ状態更新周期が経過する度に、ストレージ状態更新処理を実行する。ストレージ状態更新周期は、前述のＳＳＤ内部情報取得周期より短くてもよい。【０２１２】
まず、ストレージコントローラ１００は、キャッシュ管理テーブル３２１００から、各ＲＧに対し、当該ＲＧに対応するキャッシュ領域のうちステータスがダーティであるキャッシュ領域数を取得し、そのキャッシュ領域数に基づいて、当該ＲＧに対応するキャッシュ領域のダーティデータ量であるＲＧダーティデータ量Ａを算出し、ＲＧ判定管理テーブル３２２００へ格納する（Ｓ４１１０）。【０２１３】
その後、ストレージコントローラ１００は、各ＲＧに対し、ＲＧダーティデータ量Ａ以外で当該ＲＧにデステージされる可能性のあるデータ量を示すマージンＢを計算し、ＲＧ判定管理テーブル３２２００へ格納する（Ｓ４１２０）。キャッシュメモリへのデータの書き込みと、デステージとが、非同期で行われる場合、当該ＲＧに対するデステージが追加で発生する可能性がある。マージンＢは、このように追加で発生する最大のデステージ量の予測値である。例えば、マージンＢは、基準マージン×経過時間、で表される。基準マージン［ＧＢ／ｓ］は、流入制限を行っていないときの最大ＷＲ量に基づいて予め決定される。なお、基準マージンは、ストレージ装置１０の機種毎に決定されてもよいし、Ｗｒｉｔｅ  Ｐｅｎｄ率（以下、ＷＰ率）に応じて決定されてもよい。ＷＰ率は、データキャッシュエリア１４０００における、ダーティデータ量／全容量（ダーティであるキャッシュ領域数／全キャッシュ領域数）、で表される。経過時間［ｓ］は、現在時刻から最新のＲＧ実空き容量の更新時刻を減じた時間であり、ＲＧ実空き容量の更新時間間隔を示す。ＲＧ実空き容量の更新は、前述のＳＳＤ内部情報取得処理により行われる。ストレージコントローラ１００の負荷が比較的低い場合、経過時間は、ＳＳＤ内部情報取得周期に等しくなる。ストレージコントローラ１００の負荷が比較的高い場合、経過時間は、ＳＳＤ内部情報取得周期より長くなる。【０２１４】
その後、ストレージコントローラ１００は、ＲＧ判定管理テーブル３２２００に基づいて、各ＲＧに対し、流入制限条件が成立するか否かを判定する（Ｓ４１３０）。流入制限条件は例えば、当該ＲＧに関する、ＲＧダーティデータ量Ａと、マージンＢと、ＲＧ実空き容量Ｃとを用いて、Ａ＋Ｂ≧Ｃ、で表される。この流入制限条件は、ＲＧダーティデータ量ＡとマージンＢの和のサイズの全てのデータを、非圧縮で当該ＲＧに書き込むことができないことを示す。なお、ストレージコントローラ１００は、ＲＧ管理テーブル１３２００の圧縮設定１３２０５の有無によってＲＧの流入制限条件を切り替えてもよい。【０２１５】
その後、ストレージコントローラ１００は、Ｓ４１３０の結果において、少なくとも一つのＲＧにおいて流入制限条件が成立したか否かを判定する（Ｓ４１４０）。【０２１６】
少なくとも一つのＲＧにおいて流入制限条件が成立したと判定された場合（Ｓ４１４０：Ｙ）、ストレージコントローラ１００は、判定結果管理テーブル３２３００において、システムフラグをＯＮに設定する（Ｓ４２１０）。【０２１７】
その後、ストレージコントローラ１００は、判定結果管理テーブル３２３００において、各プールのプールフラグを更新する（Ｓ４２２０）。ここでストレージコントローラ１００は、各プールに対し、プールフラグ条件が成立すれば、当該プールのプールフラグをＯＮに設定し、そうでなければ、当該プールのプールフラグをＯＦＦに設定する。プールフラグ条件は例えば、Ｓ４１３０の結果、対象ＲＧが属するプール内の少なくとも一つのＲＧの流入制限条件が成立することである。【０２１８】
その後、ストレージコントローラ１００は、判定結果管理テーブル３２３００において、ＲＧフラグを更新し（Ｓ４２３０）、このフローを終了する。ここでストレージコントローラ１００は、各ＲＧに対し、ＲＧフラグ条件が成立すれば、当該ＲＧのＲＧフラグをＯＮに設定し、そうでなければ当該ＲＧのＲＧフラグをＯＦＦに設定する。ＲＧフラグ条件は例えば、Ｓ４１３０の結果、当該ＲＧのＲＧ流入制限条件が成立すること、又は当該ＲＧのＲＧ流入制限条件が成立せず且つ当該ＲＧに対する空き待ちジョブがあることである。【０２１９】
Ｓ４１４０において全てのＲＧにおいて流入制限条件が成立しないと判定された場合（Ｓ４１４０：Ｎ）、ストレージコントローラ１００は、判定結果管理テーブル３２３００において、全てのＲＧのＲＧフラグをＯＦＦに設定する（Ｓ４２４０）。その後、ストレージコントローラ１００は、全てのプールのプールフラグをＯＦＦに設定する（Ｓ４２５０）。その後、ストレージコントローラ１００は、システムフラグをＯＦＦに設定し（Ｓ４２６０）、このフローを終了する。【０２２０】
このストレージ状態更新処理によれば、ストレージコントローラ１００が、ＲＧ実空き容量と、ＲＧ予定デステージ量を算出することにより、各ＲＧへのデステージが可能か否かを判定することができる。ストレージコントローラ１００は、定期的に各ＲＧへのデステージが可能か否かを判定し、判定結果管理テーブル３２３００を更新することにより、ＷＲ要求の受信時にその判定結果を用いることができる。ストレージコントローラ１００が対象ＲＧのＲＧダーティデータ量とマージンを算出することで、対象ＲＧへデステージされる可能性のあるデータ量を算出することができる。【０２２１】
図２９は、ＷＲ要求受領処理を示す。【０２２２】
ストレージコントローラ１００は、流入制御プログラム３１１００に従って、ＷＲ要求受領処理を実行する。【０２２３】
ストレージコントローラ１００は、ホスト計算機３０からＷＲ要求を受信すると（Ｓ５１１０）、キャッシュ管理テーブル３２１００に基づいて、ＷＲ要求に示されたＷＲ先範囲に対応するキャッシュ領域の確保が必要であるか否かを判定する（Ｓ５１２０）。ここでストレージコントローラ１００は、データキャッシュエリア１４０００内に当該キャッシュ領域が存在しない（キャッシュミス）場合、当該キャッシュ領域の確保が必要であると判定する。【０２２４】
当該キャッシュ領域の確保が必要でないと判定された場合（Ｓ５１２０：Ｎ）、ストレージコントローラ１００は、処理をＳ５１４０へ移行させる。【０２２５】
当該キャッシュ領域の確保が必要であると判定された場合（Ｓ５１２０：Ｙ）、ストレージコントローラ１００は、当該キャッシュ領域を確保するためのキャッシュ領域確保要求を設定する（Ｓ５１３０）。【０２２６】
その後、ストレージコントローラ１００は、後述する流入制限判定処理を実行し（Ｓ５１４０）、流入制限すると判定されたか否かを判定する（Ｓ５１５０）。流入制限しないと判定された場合（Ｓ５１５０：Ｎ）、ストレージコントローラ１００は、このフローを終了する。【０２２７】
流入制限すると判定された場合（Ｓ５１５０：Ｙ）、ストレージコントローラ１００は、空き待ち処理を行う（Ｓ５１６０）。この空き待ち処理においてストレージコントローラ１００は、対象ＲＧの空き待ちジョブを開始し、その後、後述する空き待ちジョブ解放処理により空き待ちジョブが解放されるまで、空き待ちジョブが解放されたか否かを繰り返し判定する。空き待ちジョブが解放されたと判定された場合、ストレージコントローラ１００は、空き待ち処理を終了し、処理をＳ５１１０へ移行させる。空き待ち処理中、ストレージコントローラ１００は、キャッシュ領域を確保せず、ＷＲデータ転送許可通知をホスト計算機３０へ送信しない。【０２２８】
このＷＲ要求受領処理によれば、ストレージコントローラ１００は、ＷＲ要求受領時、対象ＲＧの流入制限を行うと判定した場合、ライトデータのためのキャッシュ領域を確保せずに待機し、ＲＧダーティデータ量及びＷＰ率の増加を防ぐことができる。また、対象ＲＧの流入制限を行わないと判定した場合、ホスト計算機３０からライトデータを受信することができる。【０２２９】
図３０は、流入制限判定処理を示す。【０２３０】
前述のＳ５１４０においてストレージコントローラ１００は、流入制御プログラム３１１００に従って、流入制限判定処理を実行する。ストレージコントローラ１００は、キャッシュ領域の確保が必要である（キャッシュ領域確保要求が設定されている）か否かを判定する（Ｓ５２１０）。キャッシュ領域の確保が必要でないと判定された場合（Ｓ５２１０：Ｎ）、ストレージコントローラ１００は、対象ＲＧの流入制限を行わないと判定し（Ｓ５３２０）、このフローを終了する。【０２３１】
キャッシュ領域の確保が必要であると判定された場合（Ｓ５２１０：Ｙ）、ストレージコントローラ１００は、判定結果管理テーブル３２３００に基づいて、システムフラグがＯＮであるか否かを判定する（Ｓ５２２０）。システムフラグがＯＦＦであると判定された場合（Ｓ５２１０：Ｎ）、ストレージコントローラ１００は、処理を前述のＳ５３２０へ移行させる。【０２３２】
システムフラグがＯＮであると判定された場合（Ｓ５２２０：Ｙ）、ストレージコントローラ１００は、判定結果管理テーブル３２３００に基づいて、ＷＲ先範囲に対応する対象ＲＧが属するプールのプールフラグがＯＮであるか否かを判定する（Ｓ５２３０）。プールフラグがＯＦＦであると判定された場合（Ｓ５２２０：Ｎ）、ストレージコントローラ１００は、処理を前述のＳ５３２０へ移行させる。【０２３３】
プールフラグがＯＮであると判定された場合（Ｓ５２３０：Ｙ）、ストレージコントローラ１００は、判定結果管理テーブル３２３００に基づいて、対象ＲＧのＲＧフラグがＯＮであるか否かを判定する（Ｓ５２４０）。ＲＧフラグがＯＦＦであると判定された場合（Ｓ５２３０：Ｎ）、ストレージコントローラ１００は、処理を前述のＳ５３２０へ移行させる。【０２３４】
ＲＧフラグがＯＮであると判定された場合（Ｓ５２４０：Ｙ）、ストレージコントローラ１００は、対象ＲＧの流入制限を行うと判定し（Ｓ５３１０）、このフローを終了する。【０２３５】
なお、ＲＧフラグがＯＮであると判定された場合（Ｓ５２４０：Ｙ）、ストレージコントローラ１００は、対象ＲＧが空き容量不足条件を満たすか否かを判定し、対象ＲＧが空き容量不足条件を満たすと判定された場合に処理をＳ５３１０へ移行させ、対象ＲＧが空き容量不足条件を満たさないと判定された場合に処理をＳ５３２０へ移行させてもよい。空き容量不足条件は例えば、Ａ＋Ｂ≧Ｃ、である。この場合、ストレージコントローラ１００は、実行中のＩ／Ｏ処理の種類を判定し、その種類に応じてマージンＢを変化させる。例えば、実行中のＩ／Ｏ処理がホスト計算機３０からキャッシュへのライトである場合のマージンＢａと、実行中のＩ／Ｏ処理がデステージである場合のマージンＢｂが予め設定される。Ｂａは、Ｂｂより大きい。【０２３６】
なお、ストレージ状態更新処理によりパラメータエラーが発生した場合、ストレージコントローラ１００は、安全のため、対象ＲＧの流入制限を行うと判定する。【０２３７】
この流入制限判定処理によれば、ストレージコントローラ１００は、ＷＲ要求時に、判定結果管理テーブル３２３００を参照することにより、対象ＲＧに対して流入制限を行うか否かを迅速に判定することができる。例えば、ストレージコントローラ１００は、対象ＲＧに関する何れかのフラグがＯＦＦであれば、流入制限を行わないと判定する。また、ストレージコントローラ１００は、対象ＲＧに関する全てのフラグがＯＮであれば、流入制限を行うと判定する。【０２３８】
図３１は、空き待ちジョブ解放処理を示す。【０２３９】
ストレージコントローラ１００は、Ｉ／Ｏ要求とは非同期で、予め設定された空き待ちジョブ判定周期が経過する度に、ＲＧ毎の空き待ちジョブ解放処理を実行する。空き待ちジョブ判定周期は、ストレージ状態収集周期より短くてもよい。【０２４０】
ストレージコントローラ１００は、対象ＲＧに空き待ちジョブがあるか否かを判定する（Ｓ５４１０）。対象ＲＧに空き待ちジョブがないと判定された場合（Ｓ５４１０：Ｎ）、ストレージコントローラ１００は、このフローを終了する。【０２４１】
対象ＲＧに空き待ちジョブがあると判定された場合（Ｓ４５１０：Ｙ）、ストレージコントローラ１００は、対象ＲＧが流入許可条件を満たすか否かを判定する（Ｓ４５２０）。流入許可条件は例えば、当該ＲＧに関する、ＲＧダーティデータ量Ａと、マージンＢと、ＲＧ実空き容量Ｃとを用いて、Ａ＋Ｂ＜Ｃ、で表される。この流入許可条件は、ＲＧダーティデータ量ＡとマージンＢの和のサイズの全てのデータを、非圧縮で当該ＲＧに書き込むことができることを示す。対象ＲＧが流入許可条件を満たすと判定された場合（Ｓ４５２０：Ｙ）、ストレージコントローラ１００は、当該空き待ちジョブを解放し（Ｓ４５３０）、このフローを終了する。対象ＲＧが流入許可条件を満たさないと判定された場合（Ｓ４５２０：Ｎ）、ストレージコントローラ１００は、このフローを終了し、当該空き待ちジョブを継続させる。【０２４２】
この空き待ちジョブ解放処理によれば、対象ＲＧのＲＧ空き容量が増加した場合や、対象ＲＧのダーティデータ量が減少した場合等において、ストレージコントローラ１００は、対象ＲＧの空き待ちジョブを解放することができる。例えば、後述の枯渇回避処理により対象ＲＧのＲＧ空き容量が増加し、対象ＲＧが流入許可条件を満たすことにより、空き待ちジョブが解放され、ホスト計算機３０は対象ＲＧへのＷＲデータをストレージ装置１０へ送信できるようになる。また、ホスト計算機３０は、ＷＲ要求から、予め設定されたＷＲ待機時間の経過までに、ストレージ装置１０からＷＲデータ転送許可通知を受信できない場合、タイムアウトと判定し、ＷＲ要求に関する処理を中断する。【０２４３】
図３２は、ＳＳＤの寿命予想の概要説明図である。ＳＳＤの寿命予想は、前述のＳ３０５に実行される処理である。この図は、横軸に時間を取り、縦軸にＳＳＤの残消去回数を取っている。【０２４４】
ＳＳＤの寿命予想の方法の一例として、残消去回数の減少速度から、ＳＳＤの寿命の終期への到達時刻を予想する方法について説明する。ここで、ＳＳＤの寿命とは、ＳＳＤを実際に使用可能な期間とする。或るＳＳＤにＷＲが集中している場合、このＳＳＤの寿命が短くなる。従って、寿命の長い他のＳＳＤが積極的に使用されるように、寿命平準化処理（具体的には、エクステントやエントリに格納されているデータをＳＳＤ間で交換する処理）を行う必要がある。なお、寿命平準化処理では、残りの寿命が短い（残寿命が閾値以下の）ＳＳＤを検出する。【０２４５】
この図の例において、ｔ（前回）３００００は、前回に寿命予想を行った時点（前回寿命予想時）を示し、Ｄｉｓｋ管理ＴＢＬ１３１００の情報更新日時１３１０３の値に対応する時点である。ＥＺ（前回）３０００３は、前回寿命予想時における残消去回数であり、残消去回数１３１０６の回数である。また、ｔ（現在）３０００１は、今回の寿命予想を行う時点であり、ＥＺ（現在）３０００２は現在の残消去回数であり、今回取得しているＳＳＤ内部情報から取得できる値である。【０２４６】
まず、以下の数式（１）により、傾き（Ｉ）を算出する。【０２４７】
傾き（Ｉ）＝（ＥＺ（現在）−  ＥＺ（前回））÷  （ｔ（現在）−  ｔ（前回））  ・・・（１）【０２４８】
ここで、傾き（Ｉ）３０００４が大きいほど、残消去回数の減少速度が速いことを示す。【０２４９】
次に、傾き（Ｉ）３０００４と、現時点の残消去回数であるＥＺ（現在）３０００１とを用いて、以下の数式（２）により、ｔ（寿命到達）を算出する。【０２５０】
ｔ（寿命到達）＝−（ＥＺ（現在）÷傾き（Ｉ））  ・・・（２）【０２５１】
ｔ（寿命到達）３０００５は、残消去回数がゼロとなる時間、すなわち、寿命到達時間である。このようにして、残消去回数と、残消去回数の減少速度とから、残寿命期間を算出することができる。残寿命期間は、Ｄｉｓｋ管理ＴＢＬ１３１００の予想残寿命１３１０５に格納される。【０２５２】
記憶デバイスやストレージ装置は、所定の期間（保証期間、例えば５年）は使用し続けられ、データが保証されることが重要である。よって、保証期間を一つの指標として寿命平準化処理を実行することで、複数の記憶デバイス（例えばＳＳＤ）を保証期間以上使用することができるようになる。なお、ＳＳＤが寿命に到達するまでに書き込めるデータの全Ｗｒｉｔｅ総量が分かっている場合は、この図の縦軸を残Ｗｒｉｔｅ量（全Ｗｒｉｔｅ総量からＦＭライト合計量１３１０８を引いた値）として、ｔ（寿命到達）を算出するようにしてもよい。【０２５３】
図３３は、実施例１に係る枯渇回避処理の一例を示すフローチャートである。枯渇回避処理は、前述のＳ３０４の処理に対応する。【０２５４】
ストレージコントローラ１００は、プール５００内の全ＲＧにおけるＲＧ単位の枯渇リスクを算出する（Ｓ５００）。ＲＧ単位の枯渇リスクは、ＲＧを構成するＳＳＤ７００の中で、前述のＳ３０２で算出したＳＳＤ単位の枯渇リスクの最悪値としてもよいし、ＲＧを構成するＳＳＤの枯渇リスクの平均値としてもよい。【０２５５】
次に、ストレージコントローラ１００は、枯渇リスクが最も高いＲＧと、枯渇リスクが最も低いＲＧとを特定する（Ｓ５０１）。次に、ストレージコントローラ１００は、統計情報管理ＴＢＬ１３６００と、ＳＳＤ７００の統計情報管理ＴＢＬ２３２００とを基に、エントリやエクステント毎のＦＭ  ＷＲ量を予想するＦＭ  ＷＲ量予想処理（後述）を行う（Ｓ５０５）。【０２５６】
次に、ストレージコントローラ１００は、移動するデータ量を算出する（Ｓ５０２）。移動データ量は、閾値を下回る分を移動量としてもよいし、対象ＲＧ間（枯渇リスクが最大のＲＧと最小のＲＧとの間）で枯渇リスクを平準化する分を移動量としてもよい。閾値はストレージ装置１０の管理者により、ホスト計算機３０にインストールされた制御ソフトウェア等を介して設定されるようにしてもよい。【０２５７】
次に、ストレージコントローラ１００は、決定した量だけデータを移動するデータ移動処理（後述）を実行する（Ｓ５０３）。最後に、ストレージコントローラ１００は、各種ＴＢＬの情報を更新して（Ｓ５０４）、枯渇回避処理を終了する。【０２５８】
この枯渇回避処理によると、枯渇リスクの高いＲＧから低いＲＧへＦＭ  ＷＲ量が大きいデータをエクステント単位で移動させることによって、最小のエクステント移動回数でＳＳＤ枯渇の危険性を低減させることができる。【０２５９】
なお、枯渇回避処理において、ストレージコントローラ１００は、各ＲＧのＲＧ実使用率（当該ＲＧの物理容量に対するＲＧ実使用量の割合）が予め設定されたＲＧ実使用率閾値を上回るか否かを判定し、ＲＧ実使用率がＲＧ実使用率閾値を上回る場合、当該ＲＧから他のＲＧへデータ移動処理を行ってもよい。【０２６０】
また、ストレージコントローラ１００は、枯渇回避処理により、空き待ちジョブの対象ＲＧから他のＲＧへデータを移動することで、対象ＲＧの実空き容量を増加させ、前述の空き待ちジョブ解放処理により空き待ちジョブを解放することができる。【０２６１】
図３４は、実施例１に係るＦＭ  ＷＲ量予想処理の一例を示すフローチャートである。ＦＭ  ＷＲ量予想処理は、前述のＳ５０５の処理に対応する。ＦＭ  ＷＲ量予想処理は、ストレージコントローラ１００がＦＭ  ＷＲ量予想ＴＢＬ１３７００のＦＭ  ＷＲ予想量１３７０５を算出する処理である。【０２６２】
ストレージコントローラ１００は、ＦＭライト量の予想の計算対象となるエントリを選択する（Ｓ３０３１）。次に、ストレージコントローラ１００は、選択したエントリの圧縮率１３７０４に、Ｄｉｓｋ管理ＴＢＬ１３１００の平均圧縮率１３１０９から取得した値を格納（コピー）する（Ｓ３０３２）。続いて、ストレージコントローラ１００は、このエントリのＷＲ量１３７０３に、統計情報管理ＴＢＬ１３６００からこのエントリに対応するＷＲ量１３６０６を取得し、その値を格納（コピー）する（Ｓ３０３３）。【０２６３】
続いて、ストレージコントローラ１００は、ＷＲ量１３７０３と圧縮率１３７０４とを乗算することで、このエントリのＦＭ  ＷＲ予想量１３７０５を算出する（Ｓ３０３４）。次に、ストレージコントローラ１００は、計算対象のエントリが残っているか否かを判断し（Ｓ３０３５）、計算対象エントリが残っている場合（Ｓ３０３５：Ｎｏ）は、次のエントリを選択し、Ｓ３０３２からＳ３０３５の処理を繰り返す。一方、Ｓ３０３５で、計算対象エントリが残っていないと判断した場合（Ｓ３０３５：Ｙｅｓ）には、ストレージコントローラ１００は、エクステント毎のＦＭ  ＷＲ予想量を算出する（Ｓ３０３６）。具体的には、ストレージコントローラ１００は、エクステント管理ＴＢＬ１３４００を参照することで、各エクステントに属するエントリを特定し、特定したエントリのＦＭ  ＷＲ予想量１３７０５の合計値を算出する。この後、ストレージコントローラ１００は、ＦＭ  ＷＲ量予想処理を終了する。【０２６４】
図３５は、実施例１に係る枯渇回避処理におけるデータ移動処理の一例を示すフローチャートである。このデータ移動処理は、前述のＳ５０３の処理に対応する。【０２６５】
ストレージコントローラ１００は、前述のＳ５０１で特定した枯渇リスク最大のＲＧの中で、Ｓ５０５のＦＭ  ＷＲ量予想処理で算出したＦＭ  ＷＲ予想量が大きいエクステントを選択する（Ｓ５０３１）。ＦＭ  ＷＲ予想量が大きいエクステントとは、複数のエクステントの中で最もＦＭ  ＷＲ予想量が大きいエクステントとする。【０２６６】
次に、ストレージコントローラ１００は、選択したエクステントを、前述のＳ５０１で特定した枯渇リスク最小のＲＧへマイグレーションする（Ｓ５０３２）。次に、ストレージコントローラ１００は、枯渇リスク最大のＲＧから枯渇リスク最小のＲＧへ移動したデータ量が、前述のＳ５０２で算出した移動データ量に達したか否かを判断する（Ｓ５０３３）。【０２６７】
この結果、否定的（Ｓ５０３３：Ｎｏ）であれば、ストレージコントローラ１００は、Ｓ５０３１の処理から繰り返す。一方、結果が肯定的（Ｓ５０３３：Ｙｅｓ）であれば、ストレージコントローラ１００は、データ移動処理を終了する。【０２６８】
この処理によると、枯渇リスクの高いＲＧのＦＭ  ＷＲ予想量が多いエクステントを枯渇リスクの低いＲＧへ移動することにより、最小のエクステント移動回数でＳＳＤ枯渇の危険性を低減させることができる。【０２６９】
図３６は、実施例１に係る寿命平準化処理の一例を示すフローチャートである。寿命平準化処理は、前述のＳ３０７の処理に対応する。【０２７０】
ストレージコントローラ１００は、残寿命が最大のＲＧと残寿命が最小のＲＧとを特定し（Ｓ６０１）、統計情報管理ＴＢＬ１３６００と、ＳＳＤ７００の統計情報管理ＴＢＬ２３２００とに基づいて、エントリやエクステント毎のＦＭ  ＷＲ量を予想するＦＭ  ＷＲ量予想処理（後述）を実行する（Ｓ６０２）。【０２７１】
その後、ストレージコントローラ１００は、データ移動を実行するデータ移動処理（後述）を実行し（Ｓ６０３）、各種テーブルを更新し（Ｓ６０４）、寿命平準化処理を終了する。【０２７２】
図３７は、実施例１に係る寿命平準化処理におけるデータ移動処理の一例を示すフローチャートである。このデータ移動処理は、前述のＳ６０３に対応する処理である。【０２７３】
ストレージコントローラ１００は、前述のＳ６０１で特定した、寿命平準化処理のデータの移動元となる短寿命のＲＧの中で、ＦＭ  ＷＲ予想量が大きいエクステント（Ａ１）を選択する（Ｓ３０４１０）。ここで、ＦＭ  ＷＲ予想量が大きいエクステントとは、複数のエクステントの中で最もＦＭ  ＷＲ予想量が大きいエクステントとする。【０２７４】
次に、ストレージコントローラ１００は、前述のＳ６０１で特定した、寿命平準化処理の移動先となる長寿命のＲＧの中で、ＦＭ  ＷＲ予想量が小さいエクステント（Ｂ１）を選択する（Ｓ３０４１１）。ＦＭ  ＷＲ予想量が小さいエクステントとは、複数のエクステントの中で最もＦＭ  ＷＲ予想量が小さいエクステントとする。なお、ＦＭ  ＷＲ予想量が閾値以下のエクステントをグループ化し、その中から一つのエクステントを選択するようにしてもよい。【０２７５】
そして、ストレージコントローラ１００は、エクステント（Ａ１）のＦＭ  ＷＲ予想量がエクステント（Ｂ１）のＦＭ  ＷＲ予想量よりも大きいか否かを判断する（Ｓ３０４１２）。エクステント（Ｂ１）のＦＭ  ＷＲ予想量がエクステント（Ａ１）のＦＭ  ＷＲ予想量より大きい場合、エクステント（Ｂ１）のデータを残寿命が短いＲＧに移動すると、そのＲＧへのＷＲデータ量がさらに増加し、デバイス間で消去回数を平準化することにならない。よって、この判断を行って、データ交換を中止することにより、不要なデータ移動をすることなく、適切にデバイス間で消去回数の平準化を行うことができる。【０２７６】
この判断の結果が肯定的（Ｓ３０４１２：Ｙｅｓ）であれば、プロセッサ１０４は、エクステント（Ａ１）内のデータとエクステント（Ｂ１）内のデータとを交換し（Ｓ３０４１３）、データ移動処理を終了する。一方、この判断の結果が否定的（Ｓ３０４１２：Ｎｏ）であれば、プロセッサ１０４は、データ交換を中止し（Ｓ３０４１４）、本処理を終了する。【０２７７】
残寿命の短いＲＧのＦＭ  ＷＲ予想量が多いエクステントと、残寿命が長いＲＧのＦＭ  ＷＲ予想量が少ないエクステントとを交換することにより、残寿命が短いＲＧを構成するＳＳＤへのＷＲデータ量が減少する。従って、残寿命の減少を抑えることができる。一方、残寿命の長いＲＧはＷＲデータ量が増大する。よって、このデータ交換により、ＲＧ間の残寿命の乖離を小さくすることができる。つまり、ＳＳＤ寿命を平準化することができる。【０２７８】
図３８は、実施例１に係るＩ／Ｏ性能リバランス処理の一例を示すフローチャートである。Ｉ／Ｏ性能リバランス処理は、前述のＳ３１０の処理に対応する。【０２７９】
ストレージコントローラ１００は、ＲＧ物理容量あたりのＩ／Ｏ量が最大のＲＧと、最小のＲＧとを特定し（Ｓ９０１）、統計情報管理ＴＢＬ１３６００と、ＳＳＤ７００の統計情報管理ＴＢＬ２３２００とに基づいて、エントリやエクステント毎のＦＭ  ＲＤ／ＷＲ予想量（ＦＭ  ＲＤ予想量及びＦＭ  ＷＲ予想量）を予想する（Ｓ９０２）。具体的には、前述のＦＭ  ＷＲ量予想処理と同様な処理により、ＦＭ  ＲＤ予想量に関しても予想する処理である。【０２８０】
その後、ストレージコントローラ１００は、データ移動を実行し（Ｓ９０３）、各種テーブルを更新し（Ｓ９０４）、性能Ｉ／Ｏリバランス処理を終了する。Ｓ９０３では、ストレージコントローラ１００は、前述のＳ６０３のデータ移動処理と同様な処理により、ＲＧ物理容量あたりのＩ／Ｏ量（ＦＭ  ＲＤ／ＷＲ予想量）が大きいＲＧのＩ／Ｏ量が大きいエクステントと、ＲＧ物理容量あたりのＩ／Ｏ量が小さいＲＧのＩ／Ｏ量が小さいエクステントとのデータを交換することによって、Ｉ／Ｏ量が大きいＲＧへのＩ／Ｏ量を減少させる一方、Ｉ／Ｏ量が小さいＲＧのＩ／Ｏ量を増加させる。このデータ交換により、ＲＧ間のＩ／Ｏ量の乖離を小さくすることができる。つまり、Ｉ／Ｏ性能を平準化することができる。このＩ／Ｏ性能リバランス処理により、Ｉ／Ｏ量が多いＲＧからＩ／Ｏ量が少ないＲＧへ格納データをエクステント単位で移動させることによって、性能ボトルネックを回避することができる。【０２８１】
ストレージコントローラ１００は、ストレージ階層仮想化の機能を有していてもよい。この場合、ストレージコントローラ１００は、ＲＧを複数の階層（Ｔｉｅｒ）の何れかに設定し、仮想エクステント等の仮想記憶領域毎にアクセス頻度を測定し、アクセス頻度に基づいて仮想記憶領域を複数のＴｉｅｒの何れかに配置する。ストレージコントローラ１００は、仮想記憶領域の再配置を、定期的に実行してもよいし、Ｉ／Ｏ要求に応じて実行してもよい。また、ストレージコントローラ１００は、Ｔｉｅｒ間でデータを移動するＩＯ性能リバランス処理を実行してもよい。【０２８２】
枯渇回避処理時、ストレージコントローラ１００は、ＩＯ性能リバランス処理、Ｔｉｅｒ間のＩＯ性能リバランス処理、ストレージ階層仮想化の再配置等を中止する。これにより、ストレージコントローラ１００は、対象ＲＧの実空き容量の増加を優先して実行する。ＲＧが枯渇すると、割当済みページへの上書きのＷＲ要求がエラーになり、ホスト計算機３０のシステムダウンを誘発する可能性があるため、このように枯渇回避処理が優先される。【０２８３】
これらのデータ移動制御処理によれば、ストレージコントローラ１００は、ＲＧ内のエクステントを仮想エクステントに割り当て、エクステント内のデータを別のＲＧ内のエクステントへ移動させ、移動元のエクステントを割り当てられている仮想エクステントに、移動先のエクステントを割り当てることにより、ＲＧの実空き容量を調整することができる。
【実施例２】
【０２８４】
本実施例では、複数のストレージコントローラ（クラスタ）を含むストレージ装置について説明する。本実施例では、主に実施例１との相違点を説明する。【０２８５】
図３９は、実施例２に係るストレージ装置１０ｂを含むストレージシステム１００００ｂの構成例を示す図である。【０２８６】
ストレージ装置１０ｂは、二つのストレージコントローラ１００を含む。ストレージコントローラ１００内のプロセッサ１０４は、別のストレージコントローラ１００内のプロセッサに接続されている。ホスト計算機３０は、ＳＡＮ２０を介して二つのストレージコントローラ１００に接続されている。Ｄｉｓｋ  Ｂｏｘ１１０は、二つのストレージコントローラ１００に接続されている。ここでは、二つのストレージコントローラ１００をそれぞれ、第一ストレージコントローラ及び第二ストレージコントローラと呼び、第一ストレージコントローラ内のキャッシュメモリ１３０を第一キャッシュメモリと呼び、第二ストレージコントローラ内のキャッシュメモリ１３０を第二キャッシュメモリと呼ぶ。【０２８７】
本実施例におけるライト処理について説明する。【０２８８】
第一ストレージコントローラが、ホスト計算機３０からＷＲ要求を受信すると、実施例１と同様、Ｓ２０〜Ｓ４０の処理を実行する。Ｓ５０において、第一ストレージコントローラは、ＷＲ先範囲に対応するキャッシュ領域が第一キャッシュメモリと第二キャッシュメモリの両方に割当済みか否かを判定する。ＷＲ先範囲に対応するキャッシュ領域が第一キャッシュメモリと第二キャッシュメモリの少なくとも一つに割り当てられていないと判定された場合、Ｓ６０において、第一ストレージコントローラは、割り当てられていないと判定されたキャッシュメモリから、ＷＲ先範囲に対応するキャッシュ領域を確保する。【０２８９】
その後、第一ストレージコントローラは、Ｓ７０、Ｓ８０において、ホスト計算機３０からＷＲデータを受信すると、Ｓ８５において、受信されたＷＲデータを第一キャッシュメモリと第二キャッシュメモリの両方へ書き込み、Ｓ９０において、ＷＲデータ転送許可通知をホスト計算機３０へ送信する。【０２９０】
本実施例におけるＷＲ要求受領処理について説明する。【０２９１】
Ｓ５１２０において、ストレージコントローラ１００は、ＷＲ先範囲に対応するキャッシュ領域が、第一キャッシュメモリと第二キャッシュメモリの両方に存在する場合、当該キャッシュ領域の確保が必要でないと判定し、当該キャッシュ領域が、第一キャッシュメモリと第二キャッシュメモリの少なくとも一方に存在しない場合に、当該キャッシュ領域の確保が必要であると判定する。当該キャッシュ領域の確保が必要と判定された場合（Ｓ５１２０：Ｙ）、Ｓ５１３０において、ストレージコントローラ１００は、当該キャッシュ領域が存在しないキャッシュメモリに対するキャッシュ領域確保要求を設定する。【０２９２】
本実施例によれば、ストレージコントローラ１００が、ホスト計算機３０から受信したライトデータを、二つのキャッシュメモリ１３０へ書き込み、ホスト計算機３０へ応答を送信することにより、ＷＲ要求の応答時間を短くすると共に、信頼性を高めることができる。【０２９３】
以上、一実施形態及び幾つかの実施例を説明したが、本発明は、これらの実施形態及び実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。【０２９４】
例えば、ストレージコントローラ１００は、エントリ単位で圧縮率を取得してもよい。具体的には、ＳＳＤコントローラ７１０がＷＲ完了時に、ストレージコントローラ１００へ送付する応答コマンドに、エントリ単位のデータ圧縮率を付与する。応答コマンドに含まれるデータ圧縮率を参照することで、ストレージコントローラ１００は、エントリ毎に圧縮率を管理することが可能となる。【０２９５】
これにより、エントリ毎のＦＭ  ＷＲ予想量の予想精度を高めることができ、結果として寿命平準化処理の実行精度を向上させることができる。【０２９６】
また、ＦＭ  ＷＲ量の予想材料に、圧縮率に加えてＷＡ（Ｗｒｉｔｅ  Ａｍｐｌｉｆｉｃａｔｉｏｎ）を追加してもよい。【０２９７】
一般的に、ＳＳＤ７００内部では、ＷＬやリクラメーションなどの、ＳＳＤ独自の処理が発生するため、ＳＳＤ７００がストレージコントローラ１００から受信したデータの量に比べ、実際にフラッシュメモリに書き込まれるデータの量は大きい。受信したデータの量に対する、実際にフラッシュメモリに書き込まれるデータの量の比率は、ＷＡと呼ばれる。ＳＳＤ内部の処理によるＷＲデータ量の増加は、アクセスパターンや、ＷＲデータのサイズ等にも依存する。【０２９８】
ＳＳＤ７００内の独自処理によってＷＲデータ量が増加すると、それに伴って消去回数も増加する。そこで、ストレージコントローラ１００がＳＳＤコントローラ７１０からＷＡを追加で取得し、その値をＦＭ  ＷＲ予想量の予想材料に加えることで、寿命平準化処理の精度をより向上させることができる。【０２９９】
まず、ＷＡについて説明する。【０３００】
ＷＡは、以下の（ｂ）を（ａ）で割ることにより得られる比率（（ｂ）／（ａ））である。ここで、（ａ）は、ＳＳＤ７００がストレージコントローラ１００から受信したデータの量であり、（ｂ）は、フラッシュメモリに実際に書き込むデータの量である。【０３０１】
例えば、ＳＳＤ７００に何もデータがＷＲされていない状態で、ＳＳＤ７００がストレージコントローラ１００からＷＲデータを受信した場合、そのデータは、空きページにそのままＷＲされることになるので、ＷＡは「１．０」となる確率が高い。また、例えば、ＳＳＤ７００のページに有効データがＷＲされており、且つ、空きページが無くリクラメーション処理の必要がある場合、有効データの移動先となるページ、及びストレージコントローラ１００からのデータを書き込むためのページが必要となるため、ＷＡは「１．０」を超えることになる。なお、リクラメーション処理とは、例えば、空きブロックが枯渇し始めた際に、有効なデータを格納するページを集約し、別のブロックへＷＲすることで、無効なデータのみを有するブロックを生成し、そのブロック内のデータを消去することで、空きブロックを生成する処理である。【０３０２】
したがって、ＦＭへのデータＷＲ量を正確に予想するためには、内部コピー量を示すパラメータであるＷＡを考慮に入れる必要がある。そこで、ストレージコントローラ１００はＳＳＤ内部情報取得コマンドを通じて、ＳＳＤ７００から新たにＷＡを取得するようにし、そのＷＡをＦＭ  ＷＲ予想量の予想材料に加えることができる。【０３０３】
また、ＳＳＤ７００からストレージコントローラ１００に、エントリ単位のＦＭ使用量が通知されてもよい。これにより、ストレージコントローラ１００は、ＦＭ  ＷＲ量を予想する必要がなく、ＳＳＤ７００から通知されるＦＭ使用量をそのまま使用して、寿命平準化処理を実行することができる。このため、ストレージコントローラ１００の負荷（計算量）を抑えることができる。さらに、ＳＳＤ７００がデータ圧縮機能を有し、ストレージコントローラ１００が管理するデータＷＲ量と、ＳＳＤ内部での実際のＦＭ  ＷＲ量とが異なる場合であっても、ストレージコントローラ１００は、寿命平準化処理及びＩ／Ｏ性能リバランス処理を高精度に実現することができる。【０３０４】
フラッシュメモリはページから繰り返しデータをＲＤした場合においても、データの破壊が生じやすいという特性を有している。そこで、一般的なＳＳＤは、データのエラー訂正コードであるＥＣＣをデータとともにページに格納し、データ読み出し時に、部分的に生じたエラーをＥＣＣにより回復させる機能を有している。更に、このようなＳＳＤは、データエラーの発生数が或る閾値を超過すると、データを別ページに移動させる機能を有している。したがって、データのＲＤしか発生しない環境下においても、フラッシュメモリの消去が発生しうる。そこで、寿命平準化処理の判断材料として、エクステントやエントリ毎のＲＤに関する情報（ＲＤＩ／Ｏ数、及び／又はデータＲＤ量）が用いられてもよい。【０３０５】
また、実施例では、ストレージコントローラ１００が残消去回数を残日数に換算する処理を行っていたが、ＳＳＤ７００が残日数をストレージコントローラ１００に通知するようにしてもよい。これは、例えば、ＳＳＤ７００が、前述したような、残消去回数を残日数に換算する機能を備えることで実現することができる。【０３０６】
実施例では、枯渇回避処理、寿命平準化処理、及びＩ／Ｏ性能リバランス処理がエクステント単位で実行されるが、これらの処理は、別の単位（例えば、エントリ単位、又はＬＵ単位）で行われてもよい。【０３０７】
ストレージ装置１０内に、圧縮設定のＲＧ（圧縮ＲＧ）と、非圧縮設定のＲＧ（非圧縮ＲＧ）とが混在する場合に、圧縮ＲＧと非圧縮ＲＧとの間で枯渇回避処理、寿命平準化処理、及びＩ／Ｏ性能リバランス処理が実施されてもよい。さらに、（１）圧縮ＲＧ間でのみ枯渇回避処理、寿命平準化処理、及びＩ／Ｏ性能リバランス処理を許可する、（２）非圧縮ＲＧ間でのみ寿命平準化処理、Ｉ／Ｏ性能リバランス処理を許可する、（３）圧縮ＲＧ間と非圧縮ＲＧ間での枯渇回避処理、寿命平準化処理、及びＩ／Ｏ性能リバランス処理を許可する、といったような各処理の移動ポリシーを、ストレージ装置１０に複数パターン用意しておき、ユーザ又は管理者が、ホスト計算機３０又は管理計算機等を介して、所定の記憶領域単位（例えばＲＧもしくはＬＵ）毎に、使用用途に応じた移動ポリシーが選択され、選択された移動ポリシーに従う処理がストレージ装置１０によって行われてもよい。【０３０８】
また、ホスト計算機３０のアプリケーションによって圧縮されたデータは、ストレージ装置１０のＳＳＤ７００内で再度圧縮されても、データサイズは変わらない。そこで、ホスト計算機３０からストレージコントローラ１００に対してデータを既に圧縮しているか否かを通知するインタフェースを用意し、その情報を基にストレージコントローラ１００が、圧縮の要否を決定したり、圧縮ＲＧまたは非圧縮ＲＧのどちらのＲＧにデータを格納するかを決定したり、寿命平準化処理の移動ポリシーを決定したりしてもよい。ここで、用意するインタフェースとしては、例えばホスト計算機３０がストレージコントローラ１００に対して送付するライト要求コマンド内に、データが圧縮されているか否かを示すフィールドを含むようにしてもよい。【０３０９】
本発明の表現のための用語について説明する。記憶デバイスは、ＳＳＤ７００又はＨＤＤ１１１であってもよい。第一メモリ及び第二メモリの夫々は、キャッシュメモリ１３０であってもよい。プロセッサは、プロセッサ１０４であってもよい。第一記憶デバイスグループ及び第二記憶デバイスグループの夫々は、ＲＧ又はＰＧであってもよい。記憶デバイス情報は、統計情報管理ＴＢＬ２３２００であってもよい。キャッシュ情報は、キャッシュ管理テーブル３２１００であってもよい。記憶デバイスコントローラは、ＳＳＤコントローラ７１０であってもよい。不揮発性半導体メモリは、フラッシュメモリ７８０であってもよい。デステージ判定は、ストレージ状態更新処理であってもよい。確保判定は、流入制限判定処理のＳ５２１０〜５３２０であってもよい。待機は、空き待ちジョブであってもよい。空き容量は、ＲＧ実空き容量であってもよい。解放条件は、流入許可条件であってもよい。物理記憶領域は、エクステントであってもよい。仮想記憶領域は、仮想エクステントであってもよい。枯渇条件は、第一記憶デバイスグループの枯渇リスクが最大であることであってもよいし、ＲＧ実使用率がＲＧ実使用率閾値を上回ることであってもよい。ダーティデータ量は、ＲＧダーティデータ量であってもよい。デステージ判定の結果は、判定結果管理テーブル３２３００であってもよい。予定デステージ量は、ＲＧ予定デステージ量であってもよい。
【符号の説明】
【０３１０】
１０：ストレージ装置、１１：Ｄｉｓｋ、３０：ホスト計算機、１００：ストレージコントローラ、１３０：キャッシュメモリ、７００：ＳＳＤ、７１０：ＳＳＤコントローラ、７８０：フラッシュメモリ、７８１：フラッシュコントローラ、１００００：ストレージシステム。
【図１】
2017081811.tif 000003
【図２】
2017081811.tif 000004
【図３】
2017081811.tif 000005
【図４】
2017081811.tif 000006
【図５】
2017081811.tif 000007
【図６】
2017081811.tif 000008
【図７】
2017081811.tif 000009
【図８】
2017081811.tif 000010
【図９】
2017081811.tif 000011
【図１０】
2017081811.tif 000012
【図１１】
2017081811.tif 000013
【図１２】
2017081811.tif 000014
【図１３】
2017081811.tif 000015
【図１４】
2017081811.tif 000016
【図１５】
2017081811.tif 000017
【図１６】
2017081811.tif 000018
【図１７】
2017081811.tif 000019
【図１８】
2017081811.tif 000020
【図１９】
2017081811.tif 000021
【図２０】
2017081811.tif 000022
【図２１】
2017081811.tif 000023
【図２２】
2017081811.tif 000024
【図２３】
2017081811.tif 000025
【図２４】
2017081811.tif 000026
【図２５】
2017081811.tif 000027
【図２６】
2017081811.tif 000028
【図２７】
2017081811.tif 000029
【図２８】
2017081811.tif 000030
【図２９】
2017081811.tif 000031
【図３０】
2017081811.tif 000032
【図３１】
2017081811.tif 000033
【図３２】
2017081811.tif 000034
【図３３】
2017081811.tif 000035
【図３４】
2017081811.tif 000036
【図３５】
2017081811.tif 000037
【図３６】
2017081811.tif 000038
【図３７】
2017081811.tif 000039
【図３８】
2017081811.tif 000040
【図３９】
2017081811.tif 000041
【国際調査報告】
2017081811.tif 000042
2017081811.tif 000043
2017081811.tif 000044
2017081811.tif 000045