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