(57)【特許請求の範囲】
【請求項１】
１以上の不揮発性の半導体記憶媒体と、メモリコントローラと、を有する複数の半導体記憶ユニットと、
前記複数の半導体記憶ユニットに接続されているストレージコントローラと
を有し、
前記１以上の不揮発性の半導体記憶媒体のそれぞれは複数のブロックを有し、前記複数のブロックのそれぞれはデータ消去の単位であり、
前記メモリコントローラは、前記複数のブロックの消去回数に関する情報を含む内部情報を管理し、前記１以上の半導体記憶媒体に対応付けた論理記憶領域を前記ストレージコントローラに提供し、
前記ストレージコントローラは、各半導体記憶ユニットから前記内部情報を取得し、
前記ストレージコントローラは、前記論理記憶領域を指定して前記半導体記憶ユニットにデータを書き込み、前記論理記憶領域毎のライトに関する統計を表す統計情報を記憶し、
前記ストレージコントローラは、
（Ａ）前記内部情報に基づいて算出される残寿命情報を基に、第１の半導体記憶ユニットと、前記第１の半導体記憶ユニットよりも残寿命が短い第２の半導体記憶ユニットとを特定し、
（Ｂ）前記論理記憶領域毎のライトに関する統計を表す前記統計情報を基に、前記第１の半導体記憶ユニットについて第１の論理記憶領域と、前記第２の半導体記憶ユニットについて前記第１の論理記憶領域よりもライト負荷が高い第２の論理記憶領域とを特定し、
（Ｃ）前記第１及び第２の論理記憶領域からそれぞれデータを読み出し、且つ、前記第１の論理記憶領域から読み出したデータを、前記第２の論理記憶領域に書き込む、及び／又は、前記第２の論理記憶領域から読み出したデータを、前記第１の論理記憶領域に書き込む、
ストレージ装置。
【請求項２】
請求項１記載のストレージ装置であって、
前記ストレージコントローラは、各半導体記憶媒体について、第１の時点に取得した内部情報と前記第１の時点よりも過去の第２の時点に取得した内部情報とを基に、前記半導体記憶媒体の残寿命を予測する、
ストレージ装置。
【請求項３】
請求項２記載のストレージ装置であって、
前記論理記憶領域についてのライト負荷は、前記論理記憶領域をライト先として送信されたデータの総量であるライト量に従う負荷である、
ストレージ装置。
【請求項４】
請求項３記載のストレージ装置であって、
前記論理記憶領域についてのライト負荷は、前記ライト量と、前記ストレージコントローラにより前記統計情報を基に得られる予想ライト増減率とに基づく負荷であり、
前記予想ライト増減率は、前記論理記憶領域に対するライトに関する統計を基に得られる、
ストレージ装置。
【請求項５】
請求項４記載のストレージ装置であって、
前記論理記憶領域に対するライトに関する統計は、前記論理記憶領域に対するライトに従うデータの平均サイズ、及び／又は、前記論理記憶領域に対するライトのライト先がシーケンシャルであるかランダムであるかである、
ストレージ装置。
【請求項６】
請求項２記載のストレージ装置であって、
前記複数の半導体記憶媒体により複数のＲＡＩＤグループが形成されており、
前記半導体記憶ユニットは、ＲＡＩＤグループであり、
前記ＲＡＩＤグループ毎に、２以上の論理記憶領域群が形成され、
前記各論理記憶領域群は、ＲＡＩＤグループを構成する２以上の前記半導体記憶媒体にそれぞれ対応した２以上の前記論理記憶領域の集合であり、
前記（Ａ）では、前記残寿命情報を基に、第１のＲＡＩＤグループと前記第１のＲＡＩＤグループよりも残寿命の短い第２のＲＡＩＤグループが特定され、
前記第１及び第２のＲＡＩＤグループが、前記第１及び第２の半導体記憶ユニットであり、
前記（Ｂ）では、前記論理記憶領域毎のライトに関する統計を表す前記統計情報を基に、前記第１の半導体記憶ユニットについて第１の前記論理記憶領域群と、前記第２の半導体記憶ユニットについて前記第１の論理記憶領域群よりもライト負荷が高い第２の前記論理記憶領域群とを特定し、
前記（Ｃ）では、前記第１及び第２の論理記憶領域群からそれぞれデータを読み出し、且つ、前記第１の論理記憶領域群から読み出したデータを、前記第２の論理記憶領域群に書き込む、及び／又は、前記第２の論理記憶領域群から読み出したデータを、前記第１の論理記憶領域群に書き込む、
ストレージ装置。
【請求項７】
請求項６記載のストレージ装置であって、
前記コントローラは、下記の（Ｆ）の条件が満たされていれば、下記の（Ｇ）を行う、
（Ｆ）前記第１及び第２のＲＡＩＤグループの少なくとも１つについて、前記（Ｃ）でデータが書き込まれた前記論理記憶領域群に基づく２以上の前記半導体記憶媒体の残寿命にばらつきがあり、且つ、前記論理記憶領域群を構成する２以上の前記論理記憶領域のライト負荷にばらつきがある、
（Ｇ）前記２以上の論理記憶領域のライト負荷と、前記（Ｃ）でデータが書き込まれた前記論理記憶領域群に基づく２以上の前記半導体記憶媒体の残寿命とに基づいて、同一の前記論理記憶領域群における第３の論理記憶領域と第４の論理記憶領域との間でデータを交換する、
前記第３の論理記憶領域は、前記２以上の半導体記憶媒体のうちの第１の半導体記憶媒体に基づいており、
前記第４の論理記憶領域は、前記２以上の半導体記憶媒体のうちの第２の半導体記憶媒体に基づいており、
前記第２の半導体記憶媒体は、前記第１の半導体記憶媒体よりも残寿命が短い半導体記憶媒体であり、
前記第２の論理記憶領域は、前記第１の論理記憶領域よりもライト負荷が高い論理記憶領域である、
ストレージ装置。
【請求項８】
請求項１記載のストレージ装置であって、
前記複数の半導体記憶媒体により複数のＲＡＩＤグループが形成されており、
前記ＲＡＩＤグループ毎に、２以上の論理記憶領域群が形成され、
前記（Ａ）では、前記各半導体記憶媒体の残寿命を基に、第１のＲＡＩＤグループ内の第１の半導体記憶媒体と前記第１のＲＡＩＤグループよりも残寿命の短い第２のＲＡＩＤグループ内の第２の半導体記憶媒体とが特定され、
前記第１及び第２の半導体記憶媒体が、前記第１及び第２の半導体記憶ユニットであり、
前記（Ｂ）では、前記第１の論理記憶領域は、前記第１の半導体記憶媒体に基づく論理記憶領域であり、前記第２の論理記憶領域は、前記第２の半導体記憶媒体に基づく論理記憶領域である、
ストレージ装置。
【請求項９】
請求項８記載のストレージ装置であって、
前記ストレージコントローラは、複数の仮想領域で構成された仮想ボリュームを提供し、ライト先の前記仮想領域に、前記論理記憶領域群を割り当て、ライト対象のデータを該論理記憶領域群に書き込むようになっており、
前記（Ｃ）では、前記第１のＲＡＩＤグループに基づく論理記憶領域群が割り当てられていた第１の前記仮想領域に、該論理記憶領域群のうちの前記第１の論理記憶領域に代えて、前記第２の論理記憶領域を割り当てる、及び／又は、前記第２のＲＡＩＤグループに基づく前記論理記憶領域群が割り当てられていた第２の仮想領域に、該論理記憶領域群のうちの前記第２の論理記憶領域に代えて、前記第１の論理記憶領域を割り当てる、
ストレージ装置。
【請求項１０】
請求項２記載のストレージ装置であって、
前記複数の半導体記憶媒体によりＲＡＩＤグループが形成されており、
前記ＲＡＩＤグループを基に、２以上の論理記憶領域が形成され、
前記（Ａ）では、前記各半導体記憶媒体の残寿命を基に、第１のＲＡＩＤグループに含まれる第１及び第２の半導体記憶媒体が特定され、
前記第１及び第２の半導体記憶媒体が、前記第１及び第２の半導体記憶ユニットであり、
前記（Ｂ）では、前記第１の論理記憶領域は、前記第１の半導体記憶媒体に基づく論理記憶領域であり、前記第２の論理記憶領域は、前記第２の半導体記憶媒体に基づく論理記憶領域である、
ストレージ装置。
【請求項１１】
請求項１０記載のストレージ装置であって、
各論理記憶領域群が、複数のストライプ列で構成されており、
同一のストライプ列に格納される２以上のデータが同一の半導体記憶媒体に格納される場合には、前記（Ｃ）は実行されない、
ストレージ装置。
【請求項１２】
請求項１記載のストレージ装置であって、
前記（Ｃ）で読み出されたデータのライト先の論理記憶領域は、該論理記憶領域についてのライト負荷に加えて、該論理記憶領域のリード負荷を基に決定され、
前記リード負荷は、単位時間当たりに読み出されるデータの量に従う、
ストレージ装置。
【請求項１３】
請求項２記載のストレージ装置であって、
前記ストレージコントローラは、前記半導体記憶媒体の保証期間を表す情報を記憶し、
前記第１及び第２の半導体記憶ユニットは、前記各半導体記憶ユニットの残寿命と前記各半導体記憶ユニットの保証期間との比較の結果を基に決定される、
ストレージ装置。
【請求項１４】
請求項２記載のストレージ装置であって、
前記予測された残寿命の単位は日数である、
ストレージ装置。
【請求項１５】
請求項２記載のストレージ装置であって、
前記ストレージコントローラは、
（Ａ）前記残寿命情報を基に、残寿命が閾値以下の前記半導体記憶ユニットを特定し、
（Ｂ）前記統計情報を基に、前記特定した半導体記憶ユニットについて第１の論理記憶領域と、前記第１の論理記憶領域よりもライト負荷が高い第２の論理記憶領域とを特定し、
（Ｃ）前記第１及び第２の論理記憶領域からそれぞれデータを読み出し、且つ、前記第１の論理記憶領域から読み出したデータを、前記第２の論理記憶領域に書き込む、及び／又は、前記第２の論理記憶領域から読み出したデータを、前記第１の論理記憶領域に書き込む、
ストレージ装置。
【請求項１６】
データ消去の単位であるブロックを複数有する１以上の不揮発性の半導体記憶媒体と、メモリコントローラと、を有する複数の半導体記憶ユニットと、
前記複数の半導体記憶ユニットに接続されているストレージコントローラと
を有するストレージ装置の記憶制御方法であって、
前記ストレージ装置は、
前記メモリコントローラが、前記複数のブロックの消去回数に関する情報を含む内部情報を管理し、前記１以上の半導体記憶媒体に対応付けられた論理記憶領域を前記ストレージコントローラに提供し、
前記ストレージコントローラが、前記半導体記憶ユニットの各々から前記内部情報を取得し、前記論理記憶領域を指定して前記半導体記憶ユニットにデータを書き込み、前記論理記憶領域毎のライトに関する統計を表す統計情報を記憶する、ストレージ装置であって、
前記方法は、前記ストレージコントローラが、
前記内部情報に基づいて算出される残寿命情報を基に、前記半導体記憶媒体の中から、第１の半導体記憶ユニットと、前記第１の半導体記憶ユニットよりも残寿命が短い第２の半導体記憶媒ユニットとを特定し、
前記統計情報を基に、前記第１の半導体記憶ユニットについて第１の論理記憶領域と、前記第２の半導体記憶ユニットについて前記第１の論理記憶領域よりもライト負荷の高い第２の論理記憶領域とを特定し、
前記第１及び第２の論理記憶領域からそれぞれデータを読み出し、且つ、前記第１の論理記憶領域から読み出したデータを、前記第２の論理記憶領域に書き込む、及び／又は、前記第２の論理記憶領域から読み出したデータを、前記第１の論理記憶領域に書き込む、
処理を実行することを特徴とする、記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の不揮発性の半導体憶媒体を有するストレージ装置の記憶制御に関する。
【背景技術】
【０００２】
ストレージ装置は、一般に、データを格納する物理記憶媒体と、物理記憶媒体を制御するコントローラとを有する。コントローラは、ストレージ装置に接続された計算機（例えばホスト）にデータ格納空間（一般に論理ボリューム）を提供する。
【０００３】
ストレージ装置は、複数の物理記憶媒体をＲＡＩＤ（Redundant  Array  of  Independent（or  Inexpensive）Disks）構成で使用することにより、Ｉ／Ｏ処理を高速化したり、物理記憶媒体の故障に対する高い耐障害性を発揮したりすることができる。
【０００４】
ストレージ装置は、物理記憶媒体として一般にＨＤＤ（Hard  Disk  Drive）を搭載しているが、近年、ＨＤＤに変わる新しい物理記憶媒体として、フラッシュメモリ（以下、ＦＭ）を有する物理記憶媒体、例えば、ＳＳＤ（Solid  State  Drive）が注目されている。
【０００５】
ＳＳＤは、ＨＤＤに比べＩ／Ｏ処理が非常に高速であるというメリットを有しているが、データの書き込み回数には上限があり、ＨＤＤに比べ寿命が短いというデメリットも有している。以下、そのデメリットについて説明する。
【０００６】
フラッシュメモリ（典型的にはＮＡＮＤ型のフラッシュメモリ）は、データを書き換えようとしたとき、そのデータ格納されている物理領域上に、データを上書くことができない。その物理領域上のデータに対してデータの書換えを行うためには、フラッシュメモリの消去単位であるブロックと呼ばれる単位でその物理領域上のデータに対して消去処理（以下、ブロック消去）が実行された後、ブロック消去が実行された物理領域上にデータを書く必要がある。
【０００７】
しかしながら、各ブロックについて、ブロック消去の回数（以下、消去回数）は、フラッシュメモリの物理的な制約から限界がある。そして、ブロックの消去回数がこの限界を超えると、そのブロックにはデータを格納することができなくなってしまう。つまり、ＳＳＤを構成する全ブロックの消去回数が上限を超えた時が、そのＳＳＤの寿命となる。
【０００８】
そこで、一般のＳＳＤでは、ウエアレベリング（以下、ＷＬ）とよばれる手法を用いて、ＳＳＤの長寿命化が図られている。これは、消去回数が多いブロックには低頻度に更新されるデータが格納されるように、また、消去回数が少ないブロックには高頻度に更新されるデータが格納されるように、データの格納位置を制御することで、ブロック間の消去回数を平準化し、特定のブロックのみが劣化することを抑える技術である。
【０００９】
ストレージ装置の物理記憶媒体としてＳＳＤが採用される場合、複数のＳＳＤがストレージ装置に搭載されることが一般的である。すなわち、特定のブロックのみが劣化することを抑えられても、ＳＳＤ間の負荷に不均衡が生じ、特定のＳＳＤのみに負荷が集中することがある。そこで、ＳＳＤ間にもＷＬを適用し、複数のＳＳＤ間の消去回数を平準化することで、ストレージ装置全体の長寿命化を実現する手法が、特許文献１に開示されている。以下では、ＳＳＤなどの物理記憶媒体間で行われるＷＬを、「デバイス間ＷＬ」と言う。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】ＷＯ／２０１１／０１０３４４
【発明の概要】
【発明が解決しようとする課題】
【００１１】
デバイス間ＷＬでは、ストレージ装置のコントローラ（以下、ストレージコントローラ）が、移動対象のデータを決定する。そのため、ストレージコントローラは、ＳＳＤの内部情報を把握する必要がある。内部情報とは、フラッシュメモリへのデータ書き込み量や残消去回数などの情報である。この情報の粒度が細かいほど（つまり情報が詳細であるほど）、デバイス間ＷＬの実行精度は向上する。これは、ストレージコントローラが、どのＳＳＤのどのデータをどのＳＳＤに移動すれば良いかということがに分かることを意味している。例えば、特許文献１では、ストレージコントローラが、ＳＳＤの内部情報を物理ブロック単位で詳細に把握して、デバイス間ＷＬを実現する技術が開示されている。特許文献１では、ストレージコントローラが、各ＳＳＤ内の複数のブロックの消去回数等の情報を管理する。
【００１２】
しかし、この場合、各ＳＳＤの内部情報が詳細であるが故に、各ＳＳＤの内部情報の量が多くなり、ストレージコントローラに、大容量のメモリが必要となる。そして、そのメモリには、各ＳＳＤからの膨大な内部情報が格納される。従って、ストレージコントローラは、消去回数を平準化する際に、メモリに格納された膨大な内部情報を参照する必要がある。このため、ストレージコントローラの負荷が大きくなってしまう。
【００１３】
このような問題は、ＳＳＤ以外の、消去回数に制限のある不揮発性の半導体記憶媒体を有するストレージ装置についても有り得る。
【課題を解決するための手段】
【００１４】
ストレージ装置が、不揮発性の複数の半導体記憶媒体と、複数の半導体記憶媒体に接続されているコントローラであるストレージコントローラとを有する。
【００１５】
各半導体記憶媒体ユニットは、１以上の不揮発性の半導体記憶媒体で構成されており、論理記憶領域の基になっている。ストレージコントローラは、複数の論理記憶領域のうちのライト先の論理記憶領域の基になっている半導体記憶ユニットにライト対象のデータに基づきデータを書き込むようになっている。また、ストレージコントローラは、例えば各半導体記憶媒体から内部情報を定期的又は不定期的に取得し、取得した内部情報を半導体記憶媒体毎に格納するようになっている。
【００１６】
ストレージコントローラは、論理記憶領域毎のライトに関する統計を表す統計情報を記憶し、且つ、各半導体記憶媒体の残寿命に関する情報である残寿命情報を半導体記憶媒体毎に記憶する。残寿命情報は、残寿命それ自体を表す数値であっても良いし、残寿命に影響する属性（例えば、シングルレベルセル或いはマルチレベルセルのような記憶媒体種別）であっても良いし、残寿命の予測（算出）に使用される数値であっても良い。ストレージ装置は、複数の半導体記憶媒体に加えて、他種の物理記憶媒体（例えばハードディスクドライブ）を有していても良い。
【００１７】
ストレージコントローラは、取得した残寿命情報を基に、第１の半導体記憶ユニットと、第１の半導体記憶ユニットよりも残寿命が短い第２の半導体記憶ユニットとを特定する。
【００１８】
また、ストレージコントローラは、論理記憶領域毎のライトに関する統計を表す統計情報を基に、第１の半導体記憶ユニットについて第１の論理記憶領域と、第２の半導体記憶ユニットについて第１の論理記憶領域よりもライト負荷が高い第２の論理記憶領域とを特定する。
【００１９】
ストレージコントローラは、第１及び第２の論理記憶領域からデータを読み出し、且つ、第１の論理記憶領域から読み出したデータを、第２の論理記憶領域に書き込む、及び／又は、第２の論理記憶領域から読み出したデータを、第１の論理記憶領域に書き込む。
【００２０】
半導体記憶ユニットは、例えば、半導体記憶ユニットは、１つのＳＳＤであっても良いし、２以上のＳＳＤで構成されたＲＡＩＤグループであっても良い。
【００２１】
また、論理記憶領域は、例えば、１つのＳＳＤに基づく論理アドレス範囲であっても良いし、ＲＡＩＤグループを構成する２以上のＳＳＤにまたがる論理アドレス範囲であっても良い。
【発明の効果】
【００２２】
ストレージコントローラの負荷の増加を低減し精度良く不揮発性の半導体記憶媒体間で消去回数の平準化を実行することができる。
【図面の簡単な説明】
【００２３】
【図１】第１実施例に係るストレージ装置１０を含むストレージシステム１００００の構成例を示す図である。
【図２】容量仮想化技術の概要説明図である。
【図３】キャッシュメモリ１０３の構成例を示す図である。
【図４】Ｄｉｓｋ管理ＴＢＬ１３１００の構成例を示す図である。
【図５】ＲＧ管理ＴＢＬ１３２００の構成例を示す図である。
【図６】Ｐｏｏｌ管理ＴＢＬ１３３００の構成例を示す図である。
【図７】エクステント管理ＴＢＬ１３４００の構成例を示す図である。
【図８】仮想ボリューム管理ＴＢＬ１３５００の構成例を示す図である。
【図９】統計情報管理ＴＢＬ１３６００の構成例を示す図である。
【図１０】第１実施例に係るＦＭ  ＷＲ量予想ＴＢＬ１３７００の構成例を示す図である。
【図１１】ＳＳＤ７００の構成例を示す図である。
【図１２】フラッシュメモリ７８０の構成例を示す図である。
【図１３】ＳＳＤのアドレス空間の構成例を示す図である。
【図１４】キャッシュメモリ７１６の構成例を示す図である。
【図１５】論物変換ＴＢＬ２３１００の構成例を示す図である。
【図１６】ＳＳＤ内の統計情報管理ＴＢＬ２３２００の構成例を示す図である。
【図１７】ＳＳＤ内部情報２５０００の構成例を示す図である。
【図１８】ホスト計算機３０からライト要求が送信されそのライト要求の処理が完了するまでの処理の流れの一例を示すシーケンス図である。
【図１９】ホスト計算機３０からリード要求が送信されそのリード要求の処理が完了するまでの処理の流れの一例を示すシーケンス図である。
【図２０】ＷＬ制御処理の流れの一例を示すシーケンス図である。
【図２１】図２０のＳ３０１（ＳＳＤの寿命予測）の概要説明図である。
【図２２】第１実施例に係るＦＭ  ＷＲ量予測（図２０のＳ３０３）の流れの一例を示すシーケンス図である。
【図２３】デバイス間ＷＬの実行パターンＡの概要説明図である。
【図２４】デバイス間ＷＬの実行パターンＡの一例のシーケンス図である。
【図２５】デバイス間ＷＬの実行パターンＢの概要説明図である。
【図２６】デバイス間ＷＬの実行パターンＢの一例のシーケンス図である。
【図２７】デバイス間ＷＬの実行パターンＣの概要説明図である。
【図２８】デバイス間ＷＬの実行パターンＤの概要説明図である。
【図２９】デバイス間ＷＬの実行パターンＣ及びＤの一例のシーケンス図である。
【図３０】デバイス間ＷＬの実行パターンＥの概要説明図である。
【図３１】デバイス間ＷＬの実行パターンＥの一例のシーケンス図である。
【図３２】デバイス間ＷＬの実行パターンＦの一例のシーケンス図である。
【図３３】第２実施例に係るＦＭ  ＷＲ量予想ＴＢＬ１３７００の構成例を示す図である。
【図３４】第２実施例に係るＷＡ情報格納テーブル１３８００の構成例を示す図である。
【図３５】第２実施例に係るＦＭ  ＷＲ量予測（図２０のＳ３０３）の流れの一例を示すシーケンス図である。
【図３６】第２実施例に係るＦＭ  ＷＲ量予想ＴＢＬ１３７００の構成例を示す図である。
【図３７】図３７は、実施例の概要を示す図である。
【図３８】図３８は、デバイス間ＷＬと仮想ボリュームの関係の一例を示す図である。
【発明を実施するための形態】
【００２４】
以下、本発明の幾つかの実施例を図面を参照しつつ詳細に説明する。
【００２５】
以下の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。
【００２６】
また、以下の説明では、要素（例えばエクステント）の識別情報として番号が使用されるが、他種の識別情報（例えば名前、識別子）が使用されて良い。
【００２７】
また、以下、「プログラム」を主語として処理を説明することがある場合、プログラムは、コントローラ（ストレージコントローラ、及びＳＳＤコントローラ）に含まれるプロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がコントローラ或いはプロセッサとされても良い。また、プロセッサは、処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースからインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ、又は、コンピュータ読取可能な記憶メディアであっても良い。
【００２８】
また、以下の説明では、物理記憶媒体を「Ｄｉｓｋ」と便宜上表記することがあるが、この表記は、物理記憶媒体が必ずしも円盤状の記憶媒体であることを意味しない。以下の説明では、以下の説明では、ＤｉｓｋはＳＳＤを指すことの方が多い。
【００２９】
また、以下の説明では、期間或いは時間の単位は、限定されない。例えば、期間或いは時間の単位は、年、月、日、時、分、秒のうちのいずれか１つ或いはいずれか２以上の組合せで表現されて良い。
【００３０】
また、以下の説明では、ＳＳＤに含まれる不揮発半導体記憶媒体は、フラッシュメモリ（ＦＭ）であるとする。そのフラッシュメモリは、ブロック単位で消去が行われ、ページ単位でリード／ライトが行われる種類のフラッシュメモリ、典型的にはＮＡＮＤ型のフラッシュメモリであるとする。しかし、フラッシュメモリは、ＮＡＮＤ型に代えて他種のフラッシュメモリ（例えばＮＯＲ型）でも良い。また、フラッシュメモリに代えて、他種の不揮発半導体記憶媒体、例えば相変化メモリが採用されても良い。
【００３１】
まず、実施形態の概要を説明する。
【００３２】
図３７は、実施形態の概要を示す図である。
【００３３】
ストレージ装置１０は、ストレージコントローラ１００と、複数の物理記憶媒体１１を備える。各物理記憶媒体１１は、２以上の論理記憶領域の基になっている。論理記憶領域は、後述のエクステントでも良いし、ストレージ装置１０に接続されている上位装置（例えばホスト計算機）に提供される論理ボリューム（ＬＵ：Logical  Unit）の全部或いは一部でも良い。複数の物理記憶媒体１１は、ＲＡＩＤグループを構成してもよい。ストレージコントローラ１００が、物理記憶媒体１１間で消去回数の平準化を実行する。
【００３４】
まず、ストレージコントローラ１００は、各物理記憶媒体１１から各物理記憶媒体に関する内部情報を取得する。内部情報とは、物理記憶媒体１１の寿命や消耗状況の指標となる情報を含んだ情報である。
【００３５】
例えば、物理記憶媒体１１がＳＳＤ（フラッシュメモリを有する記憶媒体）であれば、内部情報は、複数のブロックの合計消去回数や、フラッシュメモリに書き込まれたデータの総量である実ライト量を含んだ情報である。ストレージコントローラ１００は、この内部情報に基づいて、ＳＳＤの残寿命を判断する。つまり、ストレージコントローラ１００は、データの移動元となる寿命の短いＳＳＤ１１と、そのデータの移動先となる寿命の長いＳＳＤ１１を特定する。ストレージコントローラ１００は、ＳＳＤ単位で内部情報を取得することで、ストレージコントローラ１００とＳＳＤ１１間の情報転送によるオーバヘッドを削減することができる。ストレージコントローラ１００は、ＳＳＤ内の或る論理アドレス範囲や、物理的な範囲（例えばＤＩＭＭ単位）毎に、内部情報を取得してもよい。
【００３６】
次に、ストレージコントローラ１００は、寿命の短いＳＳＤ１１から移動させるデータを特定する。デバイス間ＷＬにおいて、データを移動させる際の記憶領域の範囲（一定のアドレス範囲）を「エクステント」と呼ぶ。エクステントは、参照符号６０に示すように、一つのＳＳＤに基づくアドレス範囲（論理領域）であってもよいし、参照符号７０に示すように、複数のＳＳＤにまたがったアドレス範囲（論理領域）であってもよい。また、エクステントの一部が、デバイス間ＷＬの対象とされてもよいし、複数のエクステントの集合が、デバイス間ＷＬの対象とされてもよい。なお、一つのＳＳＤに基づくアドレス範囲（論理領域）を「エクステント」と言い、複数のＳＳＤにまたがったアドレス範囲（論理領域）を「エクステント群」と言うこともできる。
【００３７】
フラッシュメモリのブロック単位や、ページ単位という小さい単位では、データ移動のための負荷が大きくなる。よって、ブロック及びページよりも大きいエクステントという単位でデバイス間ＷＬを行うことで、データ移動の負荷が高くならないようにすることができる。
【００３８】
ストレージコントローラ１００は、エクステント毎に、エクステントへのライトデータ量を計測する。例えば、ＳＳＤへのライトデータ量が多いと、ブロックの書き換えが頻繁に発生し、それに伴って消去回数が増加する。ブロックの消去回数が増加すると、そのブロックの消去回数が上限値に達して、そのブロックへのリード／ライトが不可能となる。そして、このようなブロックが増加したＳＳＤは、使用不可能となる。そのため、ストレージコントローラ１００が、ライトデータ量が多いエクステントを見つけ、そのエクステントに含まれるデータを、短寿命のＳＳＤから、長寿命のＳＳＤへ移動させる。エクステントが複数のＳＳＤにまたがる場合も同様に、ライトデータ量が多いエクステント内のデータを、ＳＳＤグループ（複数のＳＳＤ）間で移動させられる。
【００３９】
これにより、ストレージコントローラ１００の負荷を高くすることなく、ＳＳＤ間で消去回数を平準化することができる。
【００４０】
また、短寿命のＳＳＤにおけるライトデータ量が多いエクステントのデータと、長寿命のＳＳＤにおけるライトデータ量が少ないエクステントのデータを交換することで、短寿命のＳＳＤの劣化速度を抑制することができる。
【００４１】
以下、本実施形態を詳細に説明する。
【実施例１】
【００４２】
図１は、第１実施例に係るストレージ装置１０を含むストレージシステム１００００の構成例を示す図である。
【００４３】
ストレージシステム１００００は、ストレージ装置１０、及びホスト計算機３０を備える。
【００４４】
ホスト計算機３０は、ストレージ装置１０を利用する上位装置の一例である。ホスト計算機３０は、例えばアプリケーションサーバである。ホスト計算機３０とストレージ装置１０は、ＳＡＮ（Storage  Area  Network）２０を経由して通信する。ＳＡＮ２０として、例えば、ファイバチャネル、ＳＣＳＩ（Small  Computer  System  Interface）、ｉＳＣＳＩ（internet  Small  Computer  System  Interface）、ＵＳＢ（Universal  Serial  Bus）、ＩＥＥＥ１３９４バス、ＳＡＳ（Serial  Attached  SCSI）等を用いることが可能である。ＳＡＮ２０に代えて、他種の通信ネットワーク（例えばＬＡＮ（Local  Area  Network））が採用されても良い。なお、図では、ホスト計算機３０及びストレージ装置１０がそれぞれ１つであるが、それらのうちの少なくとも一方は複数でも良い。
【００４５】
ホスト計算機３０は、ストレージ装置１０に対して制御コマンド等を発行する制御ソフトウェア（図示省略）を実行することにより、制御コマンド等をストレージ装置１０に発行する。その制御コマンドがストレージ装置１０で実行されることにより、ストレージ装置１０が有するＲＡＩＤグループのＲＡＩＤレベルの変更等を行うことができる。なお、ＲＡＩＤグループは、複数のＳＳＤ（又はＨＤＤ）で構成され所定のＲＡＩＤレベルに従いデータを記憶する物理記憶媒体グループである。ストレージ装置１０に対して制御コマンドを発行する計算機として、ホスト計算機３０とは別の計算機が使用されも良い。
【００４６】
ストレージ装置１０は、ストレージコントローラ１００と、ストレージコントローラ１００に接続されたＤｉｓｋ  Ｂｏｘ１１０とを有する。
【００４７】
ストレージコントローラ１００は、ストレージ装置１０の動作を制御する。ストレージコントローラ１００は、通信インタフェースデバイスと、メモリと、それらに接続された制御デバイスとを有する。通信インタフェースデバイスとして、フロントエンドの通信インタフェースデバイスであるＨｏｓｔ  Ｉ／Ｆ１０１と、バックエンドの通信インタフェースデバイスであるＤｉｓｋ  Ｉ／Ｆ１０７がある。メモリとして、キャッシュメモリ１０３がある。制御デバイスとして、プロセッサ（例えばＣＰＵ（Central  Processing  Unit））１０４がある。Ｈｏｓｔ  Ｉ／Ｆ１０１と、キャッシュメモリ１０３と、プロセッサ１０４と、Ｄｉｓｋ  Ｉ／Ｆ１０７は、例えばＰＣＩ（Peripheral  Component  Interconnect）のような専用の接続バスで、内部ネットワーク１０２に接続されており、内部ネットワーク１０２を介して通信可能である。キャッシュメモリ１０３は、例えばＤＤＲ３（Double  Data  Rate3）のような専用の接続バスで、内部ネットワーク１０２に接続されている。
【００４８】
Ｈｏｓｔ  Ｉ／Ｆ１０１は、ストレージ装置１０がＳＡＮ２０と接続するためのインタフェースである。
【００４９】
内部ネットワーク１０２は、ストレージ装置１０の内部に存在するデバイス同士を接続するためのネットワークである。内部ネットワーク１０２は、スイッチを含む。内部ネットワーク１０２に代えて、スイッチ機能やＤＭＡ転送、ＲＡＩＤ演算等のアシスト機能を有するＡＳＩＣｓ（Application  Specific  Integrated  Circuit）を用いても良い。
【００５０】
プロセッサ１０４は、ストレージ装置１０の全体を制御する。プロセッサ１０４は、複数存在する。この場合、複数のプロセッサ１０４が協同または分担してストレージ装置１０を制御することもできる。
【００５１】
キャッシュメモリ１０３は、プロセッサ１０４がストレージ装置１０を制御するために必要なコンピュータプログラムやデータを記憶する領域である。
【００５２】
Ｄｉｓｋ  Ｉ／Ｆ１０７は、ストレージコントローラ１００とＤｉｓｋ  Ｂｏｘ１１０とを接続するためのインタフェースである。
【００５３】
Ｄｉｓｋ  Ｂｏｘ１１０は、種類の異なるＤｉｓｋ（例えば、ＨＤＤ１１１、ＳＳＤ７００といった不揮発物理記憶媒体）を複数台備えている。種類の同じＤｉｓｋでＲＡＩＤグループが構成される。そして、各ＲＡＩＤグループから、ユーザデータの格納空間としての論理ボリュームが提供される。なお、図では、Ｄｉｓｋ  Ｂｏｘ１１０を構成するＤｉｓｋとして、ＨＤＤ１１１及びＳＳＤ７００が示されているが、ＨＤＤ１１１が無くても良い。
【００５４】
図１１は、ＳＳＤ７００の構成例を示す図である。
【００５５】
ＳＳＤ７００は、複数のフラッシュメモリとそれらに接続されたＳＳＤコントローラ７１０とを有する。ＳＳＤコントローラ７１０は、ＳＳＤ７００の動作を制御する。
【００５６】
ＳＳＤコントローラ７１０は、通信インタフェースデバイスと、メモリと、それらに接続された制御デバイスとを有する。通信インタフェースデバイスとして、フロントエンドの通信インタフェースデバイスであるＤｉｓｋ  Ｉ／Ｆ７１１と、バックエンドの通信インタフェースデバイスであるＦｌａｓｈ  Ｉ／Ｆ７１７がある。メモリとして、キャッシュメモリ７１６がある。制御デバイスとして、プロセッサ７１３がある。Ｄｉｓｋ  Ｉ／Ｆ７１１と、プロセッサ７１３と、キャッシュメモリ７１６と、Ｆｌａｓｈ  Ｉ／Ｆ７１７は、内部ネットワーク７１２を介してそれぞれ接続されている。
【００５７】
Ｄｉｓｋ  Ｉ／Ｆ７１１は、ストレージコントローラ１００のＤｉｓｋ  Ｉ／Ｆ１０７と専用の接続バスで接続されている。内部ネットワーク７１２は、デバイス同士を接続するためのネットワークである。内部ネットワーク７1２は、スイッチを含んでもよい。スイッチ機能を有したＡＳＩＣｓで代用しても良い。プロセッサ７１３は、ＳＳＤ７００全体を制御する。キャッシュメモリ７１６は、プロセッサ７１３がＳＳＤ７００を制御するために必要なコンピュータプログラムやデータを記憶する領域である。Ｆｌａｓｈ  Ｉ／Ｆ７１７は、ＳＳＤコントローラ７１０とフラッシュメモリ７８０とを接続するためのインタフェースである。
【００５８】
本実施例において、ＳＳＤは、複数のフラッシュメモリと、それらを制御するコントローラとを備える記憶媒体であり、外観形状等がフォームファクタに限定されるものではない。
【００５９】
図１２は、フラッシュメモリ７８０の構成例を示す図である。
【００６０】
フラッシュメモリ７８０は、複数のブロック７８２と、それらに接続されたフラッシュメモリコントローラ７８１とを有する。フラッシュメモリコントローラ（以下、フラッシュコントローラ）７８１は、フラッシュメモリ７８０を制御する。各ブロック７８２は、複数のページ７８３より構成される。フラッシュメモリ７８０からのデータのリード、及びフラッシュメモリ７８０へのデータのライトは、ページ単位で実行される。データ消去は、ブロック単位で実行される。
【００６１】
フラッシュメモリ７８０は、例えば、ＮＡＮＤ型のフラッシュメモリである。ＮＡＮＤ型のフラッシュメモリでは、データを上書きすることができない。そのため、データがライトされているページに新たなデータをライトする際は、データを消去し、データが消去された消去済みのページに対してライトする。
【００６２】
ＳＳＤコントローラ７１０は、ＳＳＤ７００内の複数のブロック７８２に対して、消去回数の平準化を行う。ＳＳＤコントローラ７１０は、更新頻度が小さいデータを消去回数の多いブロックに格納し、更新頻度が大きいデータを消去回数の少ないブロックに格納することで、ＳＳＤ７００内のブロックの消去回数を平準化する。
【００６３】
また、ＳＳＤコントローラ７１０は、消去回数の少ない空きブロックを選択してデータを格納することで、消去回数の平準化を行ってもよい。この際、複数のブロックを消去回数に応じて複数のグループに分けて、消去回数が少ないグループからブロックを選択することとしてもよい。
【００６４】
ＳＳＤ内の複数のブロックの消去回数が平準化されることで、ＳＳＤの長寿命化が達成される。
【００６５】
図１３は、ＳＳＤのアドレス空間の構成例を示す図である。
【００６６】
ＳＳＤ７００に関して、論理アドレス空間９００と物理アドレス空間８００とが存在する。論理アドレス空間９００は、ＳＳＤ７００がストレージコントローラ１００に対して提供している一意なアドレス空間である。一方、物理アドレス空間８００は、実際のデータが格納されるアドレス空間である。ＳＳＤコントローラ７１０は、論理アドレス空間９００を構成するアドレス範囲（領域）と物理アドレス空間８００を構成するアドレス範囲（領域）とのマッピングを動的に変更することで、ＷＬ等を実現することができる。
【００６７】
なお、論理アドレス空間９００と物理アドレス空間８００との対応は、プロセッサ７１３が後述の論物変換テーブル２３１００を用いて管理している。本実施例では、ストレージコントローラ１００は、直接ＳＳＤ内の論物変換テーブルを管理していない。ゆえに、プロセッサ７１３がストレージコントローラ１００に対して、ＳＳＤ内部情報の通知を行わない限り、ストレージコントローラ１００は、論理アドレス空間９００と物理アドレス空間８００との対応関係を把握することはできない。
【００６８】
また、本実施例では、ＳＳＤ７００は、ブロックの集合体をチャンクとして管理している。図１３では、ブロック８１１〜８１４でチャンク８１０が形成され、ブロック８２１〜８２４でチャンク８２０が形成され、ブロック８３１〜８３４でチャンク８３０が形成されている。また、チャンク８１０が論理アドレス（ＬＢＡ）空間＃ａ９０１を提供し、チャンク８２０が論理アドレス（ＬＢＡ）空間＃ｂ９０２を提供し、チャンク８３０が論理アドレス（ＬＢＡ）空間＃ｃ９０３を提供している。
【００６９】
次に、容量仮想化技術について説明する。
【００７０】
容量の仮想化技術（例えば、Thin  Provisioning）とは、ストレージ装置１０が有している物理的な容量より大きな仮想的な容量をホスト計算機３０側に提供する技術である。ホスト計算機３０は、仮想的な論理ボリューム（仮想ボリューム）に対してアクセスする。容量の仮想化技術では、ストレージ装置１０がライト要求を受けた場合に、ライト要求のデータのライト先の仮想的な記憶領域（仮想エクステント）に、物理的な記憶領域が割り当てられる。本実施例では、容量仮想化技術において割り当てられる物理的な記憶領域の単位をエクステント単位とする。また、エクステントのサイズは、数ＭＢから数ＧＢと多様性に富んでいて良い。
【００７１】
図２を用いて、容量仮想化技術を詳細に説明する。同一種類のＤｉｓｋ（例えばＳＳＤ）でＲＡＩＤグループ（ＲＧ）が構成されている。１以上のＲＧを基にＰｏｏｌ  Ｖｏｌｕｍｅ５００が構成されている。
【００７２】
エクステントは、Ｐｏｏｌ  Ｖｏｌｕｍｅ５００を分割することにより得られた記憶領域、つまり、Ｐｏｏｌ  Ｖｏｌｕｍｅ５００の一部である。図では、Ｐｏｏｌ  Ｖｏｌｕｍｅ５００は、ＲＧ２００、ＲＧ３００及びＲＧ４００の３つのＲＧに基づいて構成されている。以下、ＲＧ２００について説明する。
【００７３】
ＲＧ２００は、Ｄｉｓｋ１  ２１０、Ｄｉｓｋ２  ２２０、Ｄｉｓｋ３  ２３０より構成されている。さらに、ＲＧ２００は、ＲＡＩＤ５を構築しており、Ｄａｔａ（図では、Ｄ）及びＰａｒｉｔｙ（図では、Ｐ）がＤｉｓｋ（２１０〜２３０）に基づくストライプ列に格納される。ここで、「ストライプ列」とは、同一のＲＧを構成する複数のＤｉｓｋの同じアドレス領域で構成された記憶領域である。つまり、ストライプ列は、同一のＲＧを構成する複数のＤｉｓｋにまたがっている。ストライプ列に、Ｄａｔａ及びＰａｒｉｔｙのセットが格納される。図中では、例えば、Ｄ２１１、Ｄ２２１、Ｐ２３１は１つのストライプ列２５０に格納される。データ移動などにより、同一ストライプ列の同一のＤａｔａもしくはＰａｒｉｔｙが、同一のＤｉｓｋに２つ以上存在してしまうと、ＲＡＩＤの冗長性が低下する。従って、デバイス間ＷＬが行われた結果として、１つのストライプ列に格納されていたＤａｔａもしくはＰａｒｉｔｙが同一のＤｉｓｋに２つ以上存在しない様に、ストレージコントローラ１００が、データの格納先を制御する。
【００７４】
ＲＧに基づく記憶領域が複数のエクステントに分割される。ＲＧに基づく記憶領域は、複数のＳＳＤによって提供される論理アドレス空間９００からなる。
【００７５】
次に、エクステントの構成について説明する。例えば、各エクステントは、１以上のストライプ列で構成される。
【００７６】
図２では、ＲＧ２００から、エクステント２４０、エクステント２４１及びエクステント２４２が作成されている。ＲＧ３００の記憶領域から、エクステント３０１、エクステント３０２及びエクステント３０３が作成されている。ＲＧ４００の記憶領域から、エクステント４０１、エクステント４０２及びエクステント４０３が作成されている。そして、エクステント２４０は、２つのストライプ列、すなわち、Ｄａｔａ２１４、Ｐａｒｉｔｙ２２４及びＤａｔａ２３４が格納されたストライプ列と、Ｐａｒｉｔｙ２１５、Ｄａｔａ２２５及びＤａｔａ２３５が格納されたストライプ列とから構成されている。なお、エクステント３０１、４０１も同様にして、ＲＧ３００、４００から作成される。
【００７７】
エクステントは、ブロックよりもサイズが大きい記憶領域である。エクステントのサイズは、例えば、ブロックのＮ倍（Ｎは２以上の整数）である。また後述のＣｈｕｎｋは、複数のエクステントの集合である。
【００７８】
仮想ボリューム６００は、ホスト計算機３０がユーザデータを格納するための仮想的な論理ボリュームである。なお、仮想ボリューム６００の容量として定義される容量は、ストレージ装置１０が有する記憶媒体の容量の合計よりも大きな記憶容量とすることができる。なお、仮想ボリューム６００は任意の数の仮想エクステント６０１から６０７によって構成されており、例えば、図２に示す１つの仮想エクステントに、１つのエクステントが対応付けられているが、１つの仮想エクステントに、複数のエクステントが対応付けられても良い。仮想ボリューム６００は、仮想アドレス（仮想ボリュームを構成する論理アドレス）を有し、仮想アドレスを所定の範囲に区切って仮想エクステントが構成される。
【００７９】
また、実線で示されている仮想エクステント６０１〜６０４は、ＲＧ２００、３００、４００からエクステントが割当てられている仮想エクステントである。すなわち、仮想エクステント６０１に対してはエクステント３０１が、仮想エクステント６０２に対してはエクステント２４２が、仮想エクステント６０３に対してはエクステント４０２が、仮想エクステント６０４に対してはエクステント２４０がそれぞれ割当てられている。
【００８０】
なお、点線で示されている仮想エクステント６０５〜６０７は、データのライト先として指定されたアドレスが属している仮想エクステントではないため、仮想エクステント６０５〜６０７にはエクステントは未割当てとなっている。
【００８１】
図３８は、デバイス間ＷＬと仮想ボリュームの関係の一例を示す図である。
【００８２】
ＳＳＤ間でデータが移動されると、ホスト計算機３０は、データへのアクセス先を移動先のＳＳＤへ変更しなければならない。しかし、仮想ボリューム６００を用いてアドレスが変換されることで、ホスト計算機３０は、アクセス先を変更することなく、移動先のデータへアクセスできる。つまり、仮想エクステント６１０の仮想アドレスとの関連付けが、ストレージコントローラ１００によって、移動元のエクステント７０の論理アドレスから、移動先のエクステント８０の論理アドレスへ変更される。ホスト計算機３０は、仮想ボリューム６００にアクセスすることで、アクセス先のアドレスを変更することなく、デバイス間ＷＬを行うことができる。
【００８３】
アドレス変換に仮想ボリュームを用いるのは一例であり、仮想ボリュームを用いずにアドレス変換が行われてもよい。
【００８４】
図３は、ストレージコントローラ１００が備えるキャッシュメモリ１０３の構成例を示す図である。
【００８５】
キャッシュメモリ１０３は、Ｐｒｏｇｒａｍ  Ａｒｅａ１２０００、Ｔａｂｌｅ  Ａｒｅａ１３０００及びＤａｔａ  Ｃａｃｈｅ  Ａｒｅａ１４０００を有する。Ｐｒｏｇｒａｍ  Ａｒｅａ１２０００及びＴａｂｌｅ  Ａｒｅａ１３０００は、ストレージ装置１０を制御するためのプログラムや各種テーブルが格納される領域である。Ｄａｔａ  Ｃａｃｈｅ  Ａｒｅａ１４０００は、ユーザデータを一時的に格納するために使用される領域である。
【００８６】
Ｐｒｏｇｒａｍ  Ａｒｅａ１２０００は、Ｗｒｉｔｅ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ１２１００、Ｒｅａｄ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ１２２００、寿命管理Ｐｒｏｇｒａｍ１２３００、ＳＳＤ情報取得Ｐｒｏｇｒａｍ１２４００及びＳＳＤ間ＷＬ  Ｐｒｏｇｒａｍ１２５００を記憶する。
【００８７】
Ｗｒｉｔｅ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ１２１００は、ホスト計算機３０からのライト要求を処理するプログラムである。Ｒｅａｄ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ１２２００は、ホスト計算機３０からのリード要求を処理するプログラムである。寿命管理Ｐｒｏｇｒａｍ１２３００は、プロセッサ１０４がＳＳＤ７００などの各種Ｄｉｓｋの寿命を管理するためのプログラムである。ＳＳＤ情報取得Ｐｒｏｇｒａｍ１２４００は、ＳＳＤ７００の内部情報を取得するためのプログラムである。ＳＳＤ間ＷＬ  Ｐｒｏｇｒａｍ１２５００は、デバイス間ＷＬを実行するためのプログラムである。
【００８８】
Ｔａｂｌｅ  Ａｒｅａ１３０００は、Ｄｉｓｋ管理Ｔａｂｌｅ(以下、ＴａｂｌｅをＴＢＬと言う)１３１００、ＲＧ管理ＴＢＬ１３２００、Ｐｏｏｌ管理ＴＢＬ１３３００、エクステント管理ＴＢＬ１３４００、仮想ボリューム管理ＴＢＬ１３５００、統計情報管理ＴＢＬ１３６００、ＦＭ（Flash  Memory）ライト量予想ＴＢＬ１３７００及びＷＡ情報格納ＴＢＬ１３８００を有する。
【００８９】
Ｄｉｓｋ管理ＴＢＬ１３１００は、Ｄｉｓｋ  Ｂｏｘ１１０に格納されているＤｉｓｋに関する情報を格納するテーブルである。ＲＧ管理ＴＢＬ１３２００は、ＲＡＩＤグループに関する情報を格納するテーブルである。Ｐｏｏｌ管理ＴＢＬ１３３００は、Ｐｏｏｌ  Ｖｏｌｕｍｅの情報を格納するテーブルである。エクステント管理ＴＢＬ１３４００は、エクステントに関する情報を格納するテーブルである。仮想ボリューム管理ＴＢＬ１３５００は、仮想ボリュームに関する情報を格納するテーブルである。統計情報管理ＴＢＬ１３６００は、ストレージ装置１０の性能に関する各種情報を格納するテーブルである。ＦＭライト量予想ＴＢＬ１３７００は、ＳＳＤ内部のデータ書き込み量を予想する際に使用するテーブルである。ＷＡ情報格納ＴＢＬ１３８００は、ＳＳＤに対するライトＩＯパターン等に基づいて、ＳＳＤ内部の処理によって増加するライトデータ量の比率の予想値を格納するテーブルである。
【００９０】
Ｄａｔａ  Ｃａｃｈｅ  Ａｒｅａ１４０００には、ライト要求及びリード要求に従うユーザデータ１４１００が一時記憶される。ユーザデータ１４１００は、ホスト計算機３０が使用するデータである。
【００９１】
図４は、Ｄｉｓｋ管理ＴＢＬ１３１００の構成例を示す図である。
【００９２】
Ｄｉｓｋ管理ＴＢＬ１３１００で管理される情報は、主に各Ｄｉｓｋの寿命を判断するために用いられる。Ｄｉｓｋ管理ＴＢＬ１３１００は、Ｄｉｓｋ毎に、Ｄｉｓｋ＃１３１０１、Ｄｉｓｋ  Ｔｙｐｅ１３１０２、情報更新日１３１０３、残保証期間１３１０４、総Ｗｒｉｔｅ量１３１０５、残消去回数１３１０６及び残寿命期間１３１０７を有する。
【００９３】
Ｄｉｓｋ＃１３１０１は、Ｄｉｓｋの識別子であり、ユニークな番号である。Ｄｉｓｋ  Ｔｙｐｅ１３１０２は、Ｄｉｓｋの種別を表しており、例えば、ＳＳＤ（ＳＬＣ）、ＳＳＤ（ＭＬＣ）、ＨＤＤなどを表す。ここで、使用するＮＡＮＤフラッシュメモリの種類により、ＳＬＣ（Single  Level  Cell）タイプと、ＭＬＣ（Multi  Level  Cell）タイプの２種類が存在する。ＳＬＣは、高速、長寿命、低容量なフラッシュメモリであり、数十万から数万回オーダーのブロック消去が可能である。一方のＭＬＣは、低速、短寿命、及び大容量なフラッシュメモリであり、数万から数千回オーダーのブロック消去が可能である。
【００９４】
情報更新日１３１０３は、Ｄｉｓｋに関する情報が更新された最近の日付（例えば、寿命情報等を更新した日付）を表す。ここでは、情報更新日１３１０３は、日数で示されている。残保証期間１３１０４は、ベンダが定めるＤｉｓｋの保証期間があとどれだけ残っているかを示す。
【００９５】
ここで、Ｄｉｓｋの保証期間とは、Ｄｉｓｋが正常に動作することが保証された期間（例えば、５年）である。フラッシュメモリは、データの書き込みによる消去回数の増加により劣化し、寿命に到達すると、データのリード／ライトが不可能、または、データ保持特性が著しく悪化する。よって、Ｄｉｓｋを正常に使用可能な期間として、予め消去回数や総ライト量等に基づいて閾値が設定される。Ｄｉｓｋの使用期間が保証期間を超えた場合は、そのＤｉｓｋを交換することとなる。
【００９６】
総Ｗｒｉｔｅ量１３１０５は、ＳＳＤに発生したライト量（ＳＳＤ内のフラッシュメモリに書き込まれたデータの量）の積算値であり、ＳＳＤ内部情報を基に更新される。残消去回数１３１０６は、ＳＳＤにおいて実行可能なブロック消去の回数に従う値を示す。ここでは、残消去回数１３１０６は、パーセンテージで示されており、ＳＳＤ内部情報を基に更新される。この数値がゼロになったとき、フラッシュメモリ内の全てのブロックの消去回数が上限に達したことを示す。
【００９７】
総Ｗｒｉｔｅ量１３１０５及び残消去回数１３１０６として登録される情報は、ＳＳＤから取得される情報に含まれる。ストレージコントローラ１００が各ＳＳＤから取得した情報を基に、総Ｗｒｉｔｅ量１３１０５及び残消去回数１３１０６が更新される。これらの情報は、例えば、Ｓ.Ｍ.Ａ.Ｒ.Ｔ.(Self-Monitoring  Analysis  and  Reporting  Technology)等の汎用インターフェースを用いて取得される。
【００９８】
残寿命期間１３１０７は、ＳＳＤの残消去回数１３１０６がゼロに到達するまので残りの期間を示す。残寿命期間１３１０７は、プロセッサ１０４（寿命管理Ｐｒｏｇｒａｍ１２３００）が予想した数値である。ここでは、残寿命期間１３１０７は、日数として示されている。
【００９９】
ここで、残寿命期間１３１０７が残保証期間１３１０４を下回るということは、例えばＩ／Ｏのばらつきなどにより、特定のＳＳＤに負荷が集中することで、当該ＳＳＤがベンダの想定よりも高負荷な状態となってしまい、ベンダが保証する使用期限よりも前に、ＳＳＤが寿命に到達するということを意味している。ＳＳＤ間でデバイス間ＷＬが行われることで、特定のＳＳＤへのライトの集中を回避することができ、ＳＳＤの長寿命化が図られる。
【０１００】
また、残寿命期間１３１０７は、情報更新日時１３１０３、総Ｗｒｉｔｅ量１３１０５、及び消去回数１３１０６等を基に算出することができる。残寿命期間の算出方法については後述する。
【０１０１】
また、Ｄｉｓｋ管理ＴＢＬ１３１００は、おもにＤｉｓｋの寿命管理に関連する情報を格納している。そのため、書換え回数に制約のないＤｉｓｋ（例えば、ＨＤＤ）については、総Ｗｒｉｔｅ量１３１０５から残寿命期間１３１０７の情報は、プロセッサ１０４による取得対象でなくて良い。
【０１０２】
図５は、ＲＧ管理テーブル１３２００の構成例を示す図である。
【０１０３】
ＲＧ管理ＴＢＬ１３２００は、ＲＧ毎に、ＲＧ＃１３２０１、Ｄｉｓｋ  Ｔｙｐｅ１３２０２、ＲＡＩＤ  Ｌｅｖｅｌ１３２０３、ＲＡＩＤ構成１３２０４及びＤｉｓｋ＃１３２０５を有する。
【０１０４】
ＲＧ＃１３２０１は、ＲＧの識別子であり、ユニークな番号である。Ｄｉｓｋ  Ｔｙｐｅ１３２０２は、ＲＧを構成するＤｉｓｋの種別を表す。ＲＧは、同一種類のＤｉｓｋから構成される。
【０１０５】
ＲＡＩＤ  Ｌｅｖｅｌ１３２０３は、ＲＧのＲＡＩＤレベルを表し、例えば、ＲＡＩＤ  １＋０、１、３、４、５、６といった種々の値である。ＲＡＩＤ構成１３２０４は、ＲＡＩＤを構成するデータＤｉｓｋ（データを格納するＤｉｓｋ）の数、及びパリティＤｉｓｋ（パリティを格納するＤｉｓｋ）の数を表す。Ｄｉｓｋ＃１３２０５は、ＲＧを構成するＤｉｓｋの番号を表し、ＲＡＩＤ構成１３２０４の数値と等しい数の有効な数値を含む。
【０１０６】
図６は、Ｐｏｏｌ管理ＴＢＬ１３３００の構成例を示す図である。
【０１０７】
Ｐｏｏｌ管理ＴＢＬ１３３００は、Ｐｏｏｌ毎に、Ｐｏｏｌ＃１３３０１、ＲＧ＃１３３０２、ＲＧ残容量１３３０３及びＰｏｏｌ残容量１３３０４を有する。
【０１０８】
Ｐｏｏｌ＃１３３０１は、Ｐｏｏｌの識別子であり、ユニークな番号である。ＲＧ＃１３３０２は、Ｐｏｏｌを構成する全てのＲＧのＲＧ番号を表す。ＲＧ残容量１３３０３は、ＲＧごとの残容量を表す。Ｐｏｏｌ残容量１３３０４は、Ｐｏｏｌの残容量を表し、Ｐｏｏｌを構成するＲＧのＲＧ残容量１３３０３の合計値に等しい。また、ＲＧ残容量１３３０３及びＰｏｏｌ残容量１３３０４は、仮想ボリュームのエクステント未割当領域にデータの書き込みが発生した際に減少し、プロセッサ１０４（Ｗｒｉｔｅ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ１２１００）により減少した値に更新される。
【０１０９】
図７は、エクステント管理ＴＢＬ１３４００の構成例を示す図である。
【０１１０】
エクステント管理ＴＢＬ１３４００は、エクステント毎に、エクステント＃１３４０１、ＲＧ＃１３４０２、Ｓｉｚｅ１３４０３、Ｄｉｓｋ  Ｔｙｐｅ１３４０４、Ｄｉｓｋ＃１３４０５、Ｓｔｒｉｐｅ＃１３４０６、Ｓｔａｒｔ―ＬＢＡ１３４０７、Ｌａｓｔ―ＬＢＡ１３４０８及び割当てフラグ１３４０９を有する。
【０１１１】
エクステント＃１３４０１は、エクステントの識別子であり、ユニークな番号である。ＲＧ＃１３４０２は、エクステントの基になっているＲＧの番号を示す。Ｓｉｚｅ１３４０３は、エクステントの容量を示す。ここでは、Ｓｉｚｅ１３４０３の単位は、Ｂｙｔｅである。
【０１１２】
Ｄｉｓｋ  Ｔｙｐｅ１３４０４は、エクステントの基になっているＲＧに含まれるＤｉｓｋの種別を示す。
【０１１３】
Ｄｉｓｋ＃１３４０５、Ｓｔｒｉｐｅ＃１３４０６、Ｓｔａｒｔ―ＬＢＡ１３４０７及びＬａｓｔ―ＬＢＡ１３４０８は「当該エクステントが、どのＤｉｓｋに基づいて作成されているのか」、「当該エクステントが、Ｄｉｓｋを構成するどのストライプ列に基づいて作成されているのか」、及び「当該エクステントが、ストライプ列の何番のＬＢＡから何番のＬＢＡまでの物理空間を使用して作成されているか」を示す。
【０１１４】
割当てフラグ１３４０９は、当該エクステントが仮想ボリュームに既に割当済みであるか否かを示すものである。ここでは、割当て済みのエクステントのフラグ１３４０９は「済」であり、未割当てのエクステントのフラグ１３４０９は「未」である。
【０１１５】
図８は、仮想ボリューム管理ＴＢＬ１３５００の構成例を示す図である。
【０１１６】
仮想ボリューム管理ＴＢＬ１３５００は、仮想ボリューム毎に、仮想ボリューム＃１３５０１、仮想容量１３５０２、実使用容量１３５０３、仮想エクステント＃１３５０４及び割当中エクステント＃１３５０５を有する。
【０１１７】
仮想ボリューム＃１３５０１は、仮想ボリュームの識別子であり、ユニークな番号である。仮想容量１３５０２は、仮想ボリュームの仮想的な容量である。この仮想的な容量がホスト計算機３０に提供される。実使用容量１３５０３は、仮想ボリュームに実際に割当てられているエクステントの容量の合計値である。
【０１１８】
仮想エクステント＃１３５０４は、仮想ボリュームに含まれる仮想エクステントの識別子である。仮想ボリューム＃０には、仮想エクステント＃０〜ｎが含まれることを示す。
【０１１９】
割当中エクステント＃１３５０５は、仮想ボリュームに割り当てられているエクステントの識別子（番号）である。ストレージコントローラ１００は、エクステントの割当て状態を管理する。つまり、仮想エクステント＃０には、エクステント＃０が割当てられており、仮想エクステント＃１には、エクステント＃１００が割当てられている。ただし、エクステントが未割当ての仮想エクステントの割当中エクステント＃１３５０５が「―」となる。つまり、仮想エクステント＃ｎには、物理的な記憶領域であるエクステントが割当てられていない。
【０１２０】
図９は、統計情報管理ＴＢＬ１３６００の構成例を示す図である。
【０１２１】
統計情報管理ＴＢＬ１３６００は、各エクステントへのリード/ライト等のアクセス状況に関する情報である。ストレージコントローラ１００が、各エクステントへのリード/ライト状況を監視して、統計情報管理ＴＢＬ１３６００を構成する。
【０１２２】
統計情報管理ＴＢＬ１３６００は、Ｄｉｓｋ毎に、Ｄｉｓｋ＃１３６０１、エクステント＃１３６０２、ＷＲ（Writeの略）  ＩＯＰＳ（Input  Output  Per  Second）１３６０３、ＲＤ(Readの略)  ＩＯＰＳ１３６０４、平均ＷＲ  Ｉ／Ｏ  Ｓｉｚｅ１３６０５、ＷＲ  Ｉ／Ｏ  Ｐａｔｔｅｒｎ１３６０６、ＷＲ比率１３６０７、ＷＲ量１３６０８及びＲＤ量１３６０９を有している。以下、情報１３６０１〜１３６０９の少なくとも１つをそれぞれ統計情報と呼ぶ場合がある。
【０１２３】
Ｄｉｓｋ＃１３６０１は、Ｄｉｓｋの識別子であり、ユニークな番号である。エクステント＃１３６０２は、Ｄｉｓｋに基づくエクステントの識別子であり、ユニークな番号である。
【０１２４】
ＷＲ  ＩＯＰＳ１３６０３及びＲＤ  ＩＯＰＳ１３６０４は、Ｄｉｓｋのアドレス範囲のうちエクステントに対応するアドレス範囲に発生したＷＲ（ライト）  Ｉ／Ｏ及びＲＤ（リード）  Ｉ／Ｏの発生頻度を示す。ここでは、ＩＯＰＳは、Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｐｅｒ  Ｓｅｃｏｎｄの略である。
【０１２５】
平均ＷＲ  Ｉ／Ｏ  Ｓｉｚｅ１３６０５は、ホスト計算機３０からのＷＲ  Ｉ／Ｏ要求に付随するデータの平均サイズを示す。
【０１２６】
ＷＲ  Ｉ／Ｏ  Ｐａｔｔｅｒｎ１３６０６は、ＷＲ  Ｉ／Ｏがランダムパターン（ＲＮＤ）なのか、シーケンシャルパターン（ＳＥＱ）なのかを示している。ＷＲ比率１３６０７は、全Ｉ／Ｏに対するライトＩ／Ｏの割合を示している。ＷＲ量１３６０８及びＲＤ量１３６０９は、エクステントに発生したＷＲデータ（Ｄｉｓｋのアドレス範囲のうちエクステントに対応するアドレス範囲が書込み先とされたデータ）の総量及びＲＤデータ（Ｄｉｓｋのアドレス範囲のうちエクステントに対応するアドレス範囲が読出し元とされたデータ）の総量を示している。
【０１２７】
また、エクステントが複数のＤｉｓｋにまたがる場合は、エクステントのＩＯＰＳ等の値は、ディスク毎に管理されている値の合計または平均値として、算出できる。
【０１２８】
図９では、Ｄｉｓｋごとの統計情報が管理されている場合を示しているが、ＲＧごとに統計情報が管理されてもよい。ＲＧ毎に統計情報を取得する場合、複数のＤｉｓｋにまたがるエクステントは、Ｄｉｓｋを区別せずに統計情報を取得できる。
【０１２９】
本実施例では、統計情報の監視をエクステント単位とすることで、フラッシュメモリのブロックやページ単位で監視するよりも、監視負荷を低減することができる。
【０１３０】
ストレージコントローラ１００は、仮想ボリューム管理ＴＢＬ１３５００に基づいて、割り当て中のエクステントについて、アクセス状況を監視する。統計情報は、仮想ボリュームにエクステントが割当てられた後からの累積値、及びリード/ライトの傾向である。なお、統計情報は、単位時間当たりの累積値としてもよい。
【０１３１】
また、デバイス間ＷＬの要否判断のタイミングに応じて、要否判断対象のエクステントの統計情報は、リセットされてよい。例えば、ストレージコントローラ１００は、デバイス間ＷＬで移動されたエクステントに関する統計情報のみをリセットしてもよい。
【０１３２】
図１０は、本実施例におけるＦＭ  ＷＲ量予想ＴＢＬ１３７００の構成例を示す図である。
【０１３３】
ＦＭ  ＷＲ量予想ＴＢＬ１３７００は、統計情報管理ＴＢＬ１３６００を基に構成される。ＦＭ  ＷＲ量予想ＴＢＬ１３７００は、Ｄｉｓｋ毎に、Ｄｉｓｋ＃１３７０１、エクステント＃１３７０２、ＷＲ量１３７０６、及びＦＭ  ＷＲ予想量１３７０８を有している。
【０１３４】
Ｄｉｓｋ＃１３７０１は、Ｄｉｓｋの識別子であり、ユニークな番号である。エクステント＃１３７０２は、エクステントの識別子であり、ユニークな番号である。なお、ここで言う「エクステント」は、エクステントがＲＧを構成する複数のＳＳＤにまたがっている場合、正確には、エクステントの一部分を意味する。
【０１３５】
ＷＲ量１３７０６は、Ｄｉｓｋのアドレス範囲のうちエクステントに対応するアドレス範囲を書込み先としたＷＲデータの総量を示している。
【０１３６】
ＦＭ  ＷＲ予想量１３７０８は、フラッシュメモリに実際に書き込まれるデータの予想量を示している。
【０１３７】
本実施例では、エクステント（又はエクステント部分）についてのＷＲ量１３７０６が、Ｄｉｓｋ（ＳＳＤ）における、そのエクステントに対応した領域についての、実ＷＲ量とみなす。例えば、或るエクステントへのライトデータ量が多いと、そのエクステントの基になっているＳＳＤにおいてにブロックに対するデータの書き換えが頻繁に発生し、ブロックの消去回数が増加する。ブロックの消去回数が増加すると、そのブロックを有するＳＳＤの寿命が短くなるからである。そのため、デバイス間ＷＬを行う際に、エクステントへのライトデータ量を基に、移動対象のエクステントを決めることで、精度の高いデバイス間ＷＬを行うことができる。
【０１３８】
図１４は、ＳＳＤ７００におけるキャッシュメモリ７１６の構成例を示す図である。
【０１３９】
キャッシュメモリ７１６は、Ｐｒｏｇｒａｍ  Ａｒｅａ２２０００、Ｔａｂｌｅ  Ａｒｅａ２３０００、及びＤａｔａ  Ｃａｃｈｅ  Ａｒｅａ２４０００を有する。
【０１４０】
Ｐｒｏｇｒａｍ  Ａｒｅａ２２０００及びＴａｂｌｅ  Ａｒｅａ２３０００は、ＳＳＤ７００を制御するためのプログラムや各種テーブルが格納される領域である。Ｄａｔａ  Ｃａｃｈｅ  Ａｒｅａ２４０００は、ユーザデータを一時的に格納するために使用される領域である。
【０１４１】
Ｐｒｏｇｒａｍ  Ａｒｅａ２２０００は、Ｗｒｉｔｅ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ２２１００、Ｒｅａｄ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ２２２００、ＳＳＤ内ＷＬ  Ｐｒｏｇｒａｍ２２３００、空き容量生成Ｐｒｏｇｒａｍ２２４００、及びＳＳＤ内部情報通信Ｐｒｏｇｒａｍ２２５００を有する。
【０１４２】
Ｗｒｉｔｅ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ２２１００は、ストレージコントローラ１００からのライト要求を処理するプログラムである。Ｒｅａｄ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ２２２００は、ストレージコントローラ１００からのリード要求を処理するプログラムである。ＳＳＤ内ＷＬ  Ｐｒｏｇｒａｍ２２３００は、ＳＳＤ内部でのＷＬを実行するためのプログラムである。空き容量生成Ｐｒｏｇｒａｍ２２４００は、ＳＳＤ７００の空き容量の枯渇を回避するために行われるリクラメーション処理を実行するプログラムである。
【０１４３】
ＳＳＤ内部情報通信Ｐｒｏｇｒａｍ２２５００は、ストレージコントローラ１００の要求に従ってＳＳＤの内部情報を作成し、そのＳＳＤ内部情報をストレージコントローラ１００に通知するためのプログラムである。
【０１４４】
Ｔａｂｌｅ  Ａｒｅａ２３０００は、論物変換ＴＢＬ２３１００、統計情報管理ＴＢＬ２３２００を有する。
【０１４５】
論物変換ＴＢＬ２３１００は、ＳＳＤ７００の論理アドレス空間と物理アドレス空間との対応を管理するためのテーブルである。統計情報管理ＴＢＬ２３２００は、ＳＳＤの統計情報を管理するためのテーブルである。
【０１４６】
Ｄａｔａ  Ｃａｃｈｅ  Ａｒｅａ２４０００は、ユーザデータ２４１００を格納する領域を有する。ここで言うユーザデータ２４１００は、ブロックに書き込まれるデータ及びブロックから読み出されたデータである。
【０１４７】
図１５は、論物変換ＴＢＬ２３１００の構成例を示す図である。
【０１４８】
論物変換テーブル２３１００は、Ｓｔａｒｔ−ＬＢＡ２３１００、Ｃｈｕｎｋ＃２３１０２、Ｂｌｏｃｋ＃２３１０３、及びＰａｇｅ＃２３１０４を有する。
【０１４９】
Ｓｔａｒｔ−ＬＢＡ２３１００は、ストレージコントローラ１００に提供するＬＢＡの開始位置を示す。なお、フラッシュメモリのＩ／Ｏ単位はページであるため、Ｓｔａｒｔ−ＬＢＡ２３１００の数値はページサイズの倍数で管理されている。Ｃｈｕｎｋ＃２３１０２、Ｂｌｏｃｋ＃２３１０３、Ｐａｇｅ＃２３１０４は、Ｓｔａｒｔ−ＬＢＡ２３１００に対応する物理アドレス空間の情報を示している。論物変換ＴＢＬ２３１００は、各Ｓｔａｒｔ−ＬＢＡ２３１００に対応付けられているチャンク、ブロック、及びページに関する情報を有する。
【０１５０】
図１６は、ＳＳＤ内の統計情報管理ＴＢＬ２３２００の構成例を示す図である。
【０１５１】
統計情報管理ＴＢＬ２３２００が有する情報は、ストレージコントローラ１００に通知される。統計情報管理ＴＢＬ２３２００は、ＳＳＤ単位の情報２３２１０、Ｃｈｕｎｋ単位の情報２３２２０を有している。
【０１５２】
統計情報管理ＴＢＬ２３２００は、ＳＳＤ単位の情報２３２１０またはＣｈｕｎｋ（複数のエクステントの集合）単位の情報２３２２０のうち、少なくとも１つを有していれば良い。本実施例では、統計情報管理ＴＢＬ２３２００は、ＳＳＤ単位の情報２３２１０を有する。
【０１５３】
ＳＳＤ単位の情報２３２１０は、ＳＳＤ＃２３２１１、ＷＲ量２３２１２及び残消去回数２３２１３を有している。
【０１５４】
ＳＳＤ＃２３２１１は、ＳＳＤの識別子を示す。ＷＲ量２３２１２は、ＳＳＤにライトされたデータの総量を示す。残消去回数２３２１３は、ＳＳＤについての寿命までの残りの消去回数を示す。残消去回数２３２１３は、ＳＳＤが有するブロックの残消去回数に基づく値（例えば合計）である。
【０１５５】
Ｃｈｕｎｋ単位の情報２３２２０は、Ｃｈｕｎｋ＃２３２２１、ＷＲ量２３２２２及び残消去回数２３２２３を有している。
【０１５６】
Ｃｈｕｎｋ＃２３２２１は、Ｃｈｕｎｋの識別子を示す。ＷＲ量２３２２２は、Ｃｈｕｎｋにライトされたデータの総量を示す。残消去回数２３２２３は、Ｃｈｕｎｋについての残りの消去回数を示す。残消去回数２３２２３は、Ｃｈｕｎｋを構成するブロックの残消去回数に基づく値（例えば合計）である。
【０１５７】
ＳＳＤから送信される情報としては、ＳＳＤ単位の情報２３２１０またはＣｈｕｎｋ単位の情報２３２２０いずれかとなる。
【０１５８】
また、本テーブル２３２００の数値は、データのライトや消去が発生した際に更新される（例えば、加算される）。なお、本テーブル２３２００には、ライトに関する情報だけを格納するのではなく、リードに関する情報も格納されて良い。
【０１５９】
図１７は、ＳＳＤ内部情報２５０００の構成例を示す図である。
【０１６０】
ＳＳＤ内部情報２５０００は、ＳＳＤから送信される情報である。ＳＳＤ内部情報２５０００は、例えば、アドレス情報２５１００と統計情報２５２００とを有している。
【０１６１】
アドレス情報２５１００は、論物変換ＴＢＬ２３１００を基に作成された情報である。論物変換ＴＢＬ２３１００は、例えば、ストレージコントローラ１００に論理アドレスと物理アドレスとの対応状況を通知するためのものである。論物変換ＴＢＬ２３１００は、具体的には、例えば、或るＬＢＡが対応しているＣｈｕｎｋを示す情報である。
【０１６２】
本実施例の場合、ＳＳＤ単位の情報２３２１０に基づき処理が行われるので、ＳＳＤコントローラ７１０からストレージコントローラ１００に対して、ＳＳＤアドレス情報２５１００は通知されない。後述の実施例３では、アドレス情報２５１００がＳＳＤコントローラ７１０からストレージコントローラ１００に対して通知される。
【０１６３】
統計情報２５２００は、統計情報管理ＴＢＬ２３２００を基に作成された情報である。統計情報２５２００（図１６参照）は、例えば、ストレージコントローラ１００に各ＳＳＤの寿命に関する情報などを作成させるための情報である。具体的には、例えば、統計情報２５２００には、ＳＳＤに書き込まれたデータ量や、消去可能回数の残数などが含まれている。
【０１６４】
また、ＳＳＤ内部情報２５０００に含まれる情報の量は、ＳＳＤ単位やＣｈｕｎｋ単位等の通知粒度（統計情報管理ＴＢＬ２３２００を参照）によって変化する。ＳＳＤ単位のほうが、Ｃｈｕｎｋ単位より情報の量は少ない。このため、ＳＳＤ単位の方が通信のオーバヘッドは小さくなる。一方、ＳＳＤがＣｈｕｎｋ単位でストレージコントローラに情報を通知する場合、ＳＳＤ内の複数のＣｈｕｎｋについて情報を転送する必要があるが、ストレージコントローラは、より詳細に内部情報を把握してデバイス間ＷＬを実行することができる。
【０１６５】
上述の様に、本施例では、通知単位はＳＳＤ単位とする。また、本実施例では、アドレス情報２５１００は含まず、統計情報２５２００は、統計情報管理ＴＢＬ２３２００のＳＳＤ単位の情報２３２１０のみを有するとする。
【０１６６】
また、ＳＳＤコントローラ７１０が、ＳＳＤ内部情報２５０００として、ストレージコントローラに通知する情報としては、上述の様に、ストレージコントローラ１００に各ＳＳＤの寿命に関する情報などを作成せるためのもの情報の他に、ＳＳＤコントローラ７１０自身が作成した各ＳＳＤの寿命に関する情報も含めても良い。
【０１６７】
ＳＳＤは、ＳＳＤ単位やＣｈｕｎｋ単位等、複数の粒度で情報を管理し、通知される情報の粒度を変更することもできる。
【０１６８】
図１８は、ホスト計算機３０からライト要求が送信されそのライト要求の処理が完了するまでの処理の流れの一例を示すシーケンス図である。
【０１６９】
ホスト計算機３０は、ライトデータ及びライト要求をストレージコントローラ１００に送信する（Ｓ１００）。
【０１７０】
ストレージコントローラ１００は、ライトデータ及びライト要求を受信し、ライト要求が表すライト先範囲（仮想ボリュームについてのアドレス範囲）にエクステントが割当済みか否かを、仮想ボリューム管理テーブル１３５００を基に判断する（Ｓ１０１）。なお、ストレージコントローラ１００は、ライト要求を受信したことを契機として、ライト要求が表すライト先範囲にエクステントを割当てることもできる。判断の結果、エクステントが未割当であれば（Ｓ１０１：Ｎｏ）、ストレージコントローラ１００は、未割当てのエクステントを見つけて、そのエクステントをライト先範囲の仮想エクステントに割り当て（Ｓ１０２）、受信したデータをキャッシュメモリ１０３に格納する（Ｓ１０３）。ストレージコントローラ１００は、キャッシュメモリ１０３からＳＳＤにデータを転送する際に、エクステントを割当ててもよい。
【０１７１】
一方、Ｓ１０１の判断の結果、エクステントが既に割当済みである場合（Ｓ１０１：Ｙｅｓ）は、ストレージコントローラ１００は、Ｓ１０３に進む。
【０１７２】
次に、ストレージコントローラ１００は、データの格納先となるＳＳＤ７００のＳＳＤコントローラ７１０に、キャッシュメモリ１０３に記憶されたデータとそれのライト要求とを送信する（Ｓ１０４）。
【０１７３】
ＳＳＤコントローラ７１０は、ストレージコントローラ１００からデータ及びライト要求を受信し、論物変換ＴＢＬ２３１００を基に、受信したデータの格納先のフラッシュメモリを決定し、決定したフラッシュメモリにそのデータを格納する（Ｓ１０５）。
【０１７４】
その後、ＳＳＤコントローラ７１０は、受信したデータに関する統計情報管理ＴＢＬ２３２００を更新する（Ｓ１０６）。ＳＳＤコントローラ７１０は、ストレージコントローラ１００に対して、Ｓ１０５で受信したライト要求の応答として、転送の完了応答を送信する（Ｓ１０７）。
【０１７５】
ストレージコントローラ１００は、ＳＳＤコントローラ７１０から転送完了応答を受信し、統計情報管理ＴＢＬ２３２００を更新する（Ｓ１０８）。
【０１７６】
その後、ストレージコントローラ１００は、ホスト計算機３０に対して、Ｓ１０１で受信したライト要求の応答として、転送の完了応答を送信する（Ｓ１０９）。
【０１７７】
ホスト計算機３０は、ストレージコントローラ１００から転送完了応答を受信し、一連の処理を終了する（Ｓ１１０）。
【０１７８】
なお、ストレージコントローラ１００は、データをキャッシュメモリ１０３に格納した時点で、ホスト計算機３０に転送完了応答を送信し、その後、任意のタイミングで、キャッシュメモリ１０３からＳＳＤに対してデータの転送を行っても良い。本処理は、ポストライン処理と呼ばれ、ストレージコントローラ１００のライト処理性能を向上させる１つの手段として知られている。
【０１７９】
また、図１８において、ストレージコントローラ１００の動作は、Ｗｒｉｔｅ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ１２１００が実行されることにより行われた動作であり、ＳＳＤコントローラ７１０の動作は、Ｗｒｉｔｅ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ２２１００が実行されることにより行われた動作である。
【０１８０】
図１９は、ホスト計算機３０からリード要求が送信されそのリード要求の処理が完了するまでの処理の流れの一例を示すシーケンス図である。
【０１８１】
ホスト計算機３０は、ストレージコントローラ１００に対して、データのリード要求を送信する（Ｓ２００）。
【０１８２】
ストレージコントローラ１００は、データのリード要求を受信し、そのリード要求に従うリード元範囲（仮想ボリュームのアドレス範囲）に割り当てられているエクステントの基になっているＳＳＤを特定し、特定されたＳＳＤのＳＳＤコントローラ７１０に対して、データのリード要求を送信する（ステージング要求とも言う）（Ｓ２０１）。
【０１８３】
ＳＳＤコントローラ７１０は、データのリード要求を受信し、論物変換ＴＢＬ２３１００を基に、リード要求に従う論理アドレス範囲に対応する物理アドレス範囲を特定し、その物理アドレス範囲（１以上のページ）らデータを読み出し、読み出したデータをストレージコントローラ１００に送信する（Ｓ２０２）。このとき、ＳＳＤコントローラ７１０は、統計情報管理ＴＢＬ２３２００を更新する（Ｓ２０３）。
【０１８４】
ストレージコントローラ１００は、Ｓ２０１で送信したリード要求の応答として、ＳＳＤコントローラ７１０からデータを受信し、受信したデータをキャッシュメモリ１０３に格納し（Ｓ２０４）、統計情報管理ＴＢＬ１３６００を更新する（Ｓ２０５）。その後、ストレージコントローラ１００は、Ｓ２０４で格納されたデータをホスト計算機３０に送信する（Ｓ２０６）。
【０１８５】
ホスト計算機３０は、Ｓ２００で送信したリード要求の応答として、ストレージコントローラ１００からデータを受信し、一連の処理を終了する（Ｓ２０７）。
【０１８６】
なお、図１９において、ストレージコントローラ１００の動作は、Ｒｅａｄ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ１２２００が実行されることにより行われた動作であり、ＳＳＤコントローラ７１０の動作は、Ｒｅａｄ  Ｉ／Ｏ  Ｐｒｏｇｒａｍ２２２００が実行されることにより行われた動作である。
【０１８７】
図２０は、デバイス間ＷＬ制御処理の流れの一例を示すシーケンス図である。
【０１８８】
ストレージコントローラ１００は、ＳＳＤコントローラ７１０に対して、内部情報２５０００（図１７参照）の通知を要求し、その要求の応答として、ＳＳＤ７００の内部情報をＳＳＤコントローラ７１０から受信する（Ｓ３００）。
【０１８９】
ストレージコントローラ１００は、その内部情報を基に、Ｄｉｓｋ管理ＴＢＬ１３１００を更新し、各ＳＳＤの残寿命を計算する（Ｓ３０１）。この残寿命を計算する方法については、図２１を用いて後述する。
【０１９０】
次に、ストレージコントローラ１００は、デバイス間ＷＬが必要か否かを判断する（Ｓ３０２）。これは、例えば、保証期間よりも先に寿命に到達するＳＳＤがある（残保証期間１３１０４よりも残寿命期間１３１０７の方が少ない）か否か、もしくは、ＳＳＤ間でライト量にばらつきがある（総ライト量１３１０５が均一化されていない）か否かをチェックすることにより判断可能である。ストレージコントローラ１００は、エクステントが複数のＳＳＤにまたがる場合、その複数のＳＳＤの中に、一つ以上、保証期間よりも先に寿命に到達するＳＳＤがあれば、デバイス間ＷＬを行うこととしてもよい。
【０１９１】
Ｓ３０２の判断の結果、デバイス間ＷＬ処理が必要な場合（Ｓ３０２：Ｙｅｓ）、ストレージコントローラ１００は、Ｓ３０３に進み、ストレージコントローラ１００の統計情報（１３７０１〜１３７０６）と、ＳＳＤ７００の内部情報（２３２１１〜２３２１３）を基に、エクステント毎にフラッシュメモリのライト量を予想する（Ｓ３０３：詳細は図２２で説明）。
【０１９２】
次に、Ｓ３０３での予想結果を基に、ストレージコントローラ１００は、デバイス間ＷＬを行う（Ｓ３０４：詳細は図２２〜図３２で説明）。その後、ストレージコントローラ１００は、デバイス間ＷＬで移動したデータを格納しているエクステントに関する情報（例えば、テーブルに格納されている情報）を更新する（Ｓ３０５）。その後、ストレージコントローラ１００は、本処理を終了する。
【０１９３】
一方、Ｓ３０２の判断の結果、デバイス間ＷＬ処理が不要な場合（Ｓ３０２：Ｎｏ）、ストレージコントローラ１００は、そのまま本処理を終了する。
【０１９４】
なお、本処理は、任意のタイミングで実行されても良い。一定の間隔（例えば一日おき）で実行しても良い。また、ホスト計算機３０のＩ／Ｏ要求に連動させて実行されても良い。また、特定のコマンドを受け取ったタイミングで実行されても良い。更に、ホスト計算機３０の制御ソフトウェアからユーザが本処理の実行契機を指示することで実行されても良い。
【０１９５】
また、図２０において、ストレージコントローラ１００の動作は、ＳＳＤ間ＷＬ  Ｐｒｏｇｒａｍ１２５００が実行されることにより行われた動作である。
【０１９６】
図２１は、図２０のＳ３０１（ＳＳＤの寿命予測）の概要説明図である。
【０１９７】
残消去回数の減少速度から、寿命への到達時刻を予想する方法について説明する。ＳＳＤの寿命とは、ＳＳＤを実際に使用可能な期間とする。図中横軸は時間であり、縦軸は残消去回数である。或るＳＳＤにライトが集中している場合、寿命が短くなる。従って、寿命の長い他のＳＳＤが積極的に使用されるように、デバイス間ＷＬ（具体的には、エクステントに格納されているデータをＳＳＤ間で交換）を行う必要がある。本処理では、寿命の短い（寿命が閾値以下の）ＳＳＤを検出する。
【０１９８】
図２１において、ｔ（前回）３００００は、前回に寿命予測を行った時点であり、情報更新日時１３１０３に格納されている値が表す時点である。また、ＥＺ（前回）３０００３は、前回の寿命予測時における残消去回数であり、残消去回数１３１０６に格納されている値が表す回数である。
【０１９９】
次に、ｔ（現在）３０００１は、今回の寿命予測を行う時点であり、ＥＺ（現在）３０００２はその残消去回数であり、今回発行したＳＳＤ内部情報から取得できる値である。これらの情報を用いて、下記の数式、
傾き（Ｉ）＝（ＥＺ（現在）−  ＥＺ（前回））÷  （ｔ（現在）−  ｔ（前回））
が計算される。これにより、傾き（Ｉ）３００４が算出される。傾き（Ｉ）３００４が大きいほど、残消去回数の減少速度が速い。
【０２００】
算出した傾き（Ｉ）３０００４と、現時点の残消去回数であるＥＺ（現在）３０００１を用いて、下記の数式、
ｔ（寿命到達）＝−（ＥＺ（現在）÷傾き（Ｉ））
が計算される。これにより、残消去回数がゼロとなる時間、すなわち、寿命到達時間であるｔ（寿命到達）３０００５が算出される。残消去回数と減少速度から、残寿命期間が算出され、Ｄｉｓｋ管理ＴＢＬ１３１００に格納される。
【０２０１】
記憶媒体やストレージ装置として、所定の期間（保証期間、例えば５年）は使用し続け、データが保証されることが重要である。よって、保証期間を一つの指標としてデバイス間ＷＬを実行することで、複数の記憶媒体（例えばＳＳＤ）を保証期間以上使用することができる。
【０２０２】
また、ＳＳＤが寿命に到達するまでに書き込めるデータの全Ｗｒｉｔｅ総量が分かっている場合は、縦軸を残消去回数に代えて、残Ｗｒｉｔｅ量（全Ｗｒｉｔｅ総量から総Ｗｒｉｔｅ量１３１０５を引いた値）が用いられても良い。
【０２０３】
図２２は、図２０のＳ３０３（フラッシュメモリのライト量の予想）の流れの一例を示すシーケンス図である。
【０２０４】
プロセッサ１０４は、統計情報管理ＴＢＬ１３６００の情報を基に、ＦＭ  ＷＲ量予想ＴＢＬ１３７００に必要な統計情報である、エクステントへのＷＲ量１３７０６を取得する（Ｓ３０３１）。
【０２０５】
次に、プロセッサ１０４は、取得したＷＲ量１３７０６をエクステントが属するＳＳＤ内のフラッシュメモリへのＦＭ  ＷＲ予想量とする（Ｓ３０３２）。
【０２０６】
次に、図２０のＳ３０４（デバイス間ＷＬ）の概要を説明する。
【０２０７】
デバイス間ＷＬとして、幾つかのパターン、例えば、以下の６つの実行パターン（パタ
ーンＡ〜Ｆ）がある。
パターンＡ：エクステント単位で、ＲＧ間でデータが移動される（図２３）。
パターンＢ：エクステント単位で、ＲＧ間でデータが移動され、さらに、移動先のＲＧで、エクステント内のデータに基づく複数のデータ要素（データ（及びパリティ））の格納位置が最適化される（図２５）。
パターンＣ：エクステント内の特定のデータ単位で、ＲＧ間でデータが移動される（図２７）。
パターンＤ：エクステント内の特定のデータ単位で、ＲＧ内でデータが移動される（図２８）。
パターンＥ：デバイスの性能特性に応じて、異なるデバイス間で、データが移動される（図３０）。
パターンＦ：デバイスの寿命特性に応じて、データが移動される（図３２）。
【０２０８】
パターンＡ〜Ｃにおいて、ＲＧは、２以上存在する事が条件となる。また、パターンＤにおいては、ＲＧは少なくとも１つあれば良い。また、パターンＥおよびパターンＦにおいては、Ｄｉｓｋ種別が異なるＲＧが２以上存在することが条件となる。
【０２０９】
本実施例では、ライト負荷とは、ＦＭ  ＷＲ予想量である。すなわち、高（低）ライト負荷とは、ＦＭ  ＷＲ予想量が大きい（小さい）ことを意味する。
【０２１０】
図２３は、デバイス間ＷＬの実行パターンＡの概要説明図である。
【０２１１】
パターンＡでは、エクステント内のデータが異なるＲＧ間で移動される。ＲＧ＃ｎ３１０は、ＳＳＤ３１１０、ＳＳＤ３１２０及びＳＳＤ３１３０より構成されており、ＲＧ＃ｎ３１０に基づくエクステント＃３１４０がある。エクステント＃３１４０には、ＳＳＤ３１１０内のデータ３１１１、ＳＳＤ３１２０内のデータ３１２１、及び、ＳＳＤ３１３０内のデータ３１３１に基づくデータが格納されている。
【０２１２】
ＲＧ＃ｍ４１０は、ＳＳＤ４１１０、ＳＳＤ４１２０及びＳＳＤ４１３０より構成されており、ＲＧ＃ｍ４１０に基づくエクステント＃４１４０がある。エクステント＃４１４０には、ＳＳＤ４１１０内のデータ４１１１、ＳＳＤ４１２０内のデータ４１２１、及び、ＳＳＤ４１３０内のデータ４１３１に基づくデータが格納されている。
【０２１３】
ここで、ＲＧ＃ｍ４１０は、短寿命のＲＡＩＤグループとする。例えば、ＲＧ＃ｍ４１０には、残寿命が閾値より小さいＳＳＤが含まれる。つまり、短寿命のＲＡＩＤグループには、保証期間より短寿命のＳＳＤが含まれる。このＲＡＩＤグループに含まれる複数のエクステントのうち、ＦＭ  ＷＲ予想量が最も大きいエクステント（Ａ）をデバイス間ＷＬの対象とする。
【０２１４】
ＲＧ＃ｎ３１０は、長寿命のＲＡＩＤグループとする。例えば、このＲＡＩＤグループに含まれるＳＳＤは、いずれも残寿命が閾値より大きいとする。このようなＲＡＩＤグループに含まれる複数のエクステントのうち、ＦＭ  ＷＲ予想量が最も小さいエクステント（Ｂ）をデバイス間ＷＬの対象とする。
【０２１５】
なお、いずれのＲＡＩＤグループの寿命が保証期間以内であっても、ＲＡＩＤグループ間の寿命の乖離（各ＲＡＩＤグループを構成するＳＳＤの寿命の乖離）が所定値以上である場合に、ストレージコントローラ１００が、デバイス間ＷＬを実行することとしてもよい。
【０２１６】
このように、ＲＧ＃ｎ３１０とＲＧ＃ｍ４１０の残寿命に乖離がある場合に、デバイス間ＷＬが実行される。
【０２１７】
具体的には、例えば、エクステント＃３１４０とエクステント＃４１４０にそれぞれ格納されているデータが交換される。この交換により、残寿命の長いＲＧ＃ｎ３１０にライト負荷の高いデータが格納され、残寿命の短いＲＧ＃ｍ４１０に、ライト負荷の低いデータが格納される。
【０２１８】
ここで、「データを交換」とは、例えば、ストレージコントローラ１００が、下記処理を行うことを示す。
（＊）データが格納されているエクステント＃３１４０の論理アドレスの範囲及びデータが格納されているエクステント＃４１４０の論理アドレスの範囲を、エクステント管理ＴＢＬ１３４００を参照することにより特定する。
（＊）特定した論理アドレス範囲を含むＳＳＤに対してリード要求を発行し（具体的には、エクステント＃３１４０の基になっているＳＳＤとエクステント＃４１４０の基になっているＳＳＤとにリード要求を発行し）、ＳＳＤからデータを読出し、読み出したデータをキャッシュメモリ１０３に一時的に格納する。この際、リード要求を受信したＳＳＤは、リード要求に含まれる論理アドレスと論物変換ＴＢＬ２３１００に基づいて、データが格納されている物理ページを特定してデータを読み出し、ストレージコントローラに送信する。キャッシュメモリ１０３には、エクステント＃３１４０に基づくＳＳＤから読み出されたデータ（第１データ）、及び、エクステント＃４１４０に基づくＳＳＤから読み出されたデータ（第２データ）が一時的に格納される。
（＊）エクステントの論理アドレスが含まれるＳＳＤを特定し、そのＳＳＤに、キャッシュメモリ１０３に一時的に格納された上記データのライト要求を発行する。具体的には、第１データのライト要求がエクステント＃４１４０に基づくＳＳＤに発行され、第２データのライト要求がエクステント＃３１４０に基づくＳＳＤに発行される。この結果、エクステント＃３１４０からの第１データがエクステント＃４１４０に格納され、エクステント＃４１４０からの第２データがエクステント＃３１４０に格納される。この際、ライト要求を受信したＳＳＤは、論物変換ＴＢＬ２３１００から空き物理ページを特定し、受信したデータを、特定した空き物理ページに書き込み、論物変換ＴＢＬ２３１００を更新する。
【０２１９】
以下、「データを交換」とは、上述の様に、２つのエクステントのそれぞれに格納されているデータをエクステント管理ＴＢＬ１３４００で特定し、特定したデータをキャッシュメモリ１０３に一時的に格納し、格納したデータを読出元のエクステントとは異なる他方のエクステントに格納するように処理することを示す。
【０２２０】
残寿命の短いＲＧ＃ｍ４１０にライトデータ量の少ないエクステント＃３１４０内のデータが格納されることにより、残寿命の短いＲＧ＃ｍ４１０を構成するＳＳＤへのライトデータ量が減少する。従って、残寿命の減少を抑えることができる。一方、残寿命の長いＲＧ＃ｎ３１０にライトデータ量の多いエクステント＃４１４０内のデータが格納されることにより、残寿命の長いＲＧ＃ｎ３１０は、ライトデータ量が増大する。よって、このデータ交換より、ＲＧ＃ｎ３１０の残寿命とＲＧ＃ｍ４１０の残寿命の乖離を縮めることができる。つまり、デバイス間での消去回数が平準化される。
【０２２１】
パターンＡでは、ストライプ列を維持したエクステント単位でのデータ移動となるため、入れ換えによるＲＡＩＤの冗長性低下は起こらない。
【０２２２】
また、「データを交換」とは、具体的には、例えば、仮想ボリューム管理ＴＢＬ１３５００の割当中エクステント＃１３５０５の割当て順序を変更したり、エクステント管理ＴＢＬ１３４００の、Ｄｉｓｋ＃１３４０５、Ｓｔｒｉｐｅ＃１３４０６、Ｓｔａｒｔ−ＬＢＡ１３４０７、及びＬａｓｔ−ＬＢＡ１３４０８の値を変更したりすることに等しい。
【０２２３】
また、本処理は、上記の様に、エクステント＃３１４０とエクステント＃４１４０にそれぞれ格納されているデータを交換することにより、ＲＧ＃ｎ３１０とＲＧ＃ｍ４１０の残寿命の乖離を縮めるため、ＳＳＤ間でのデータ移動を行ったが、（低寿命且つ高ライト負荷の）エクステント＃４１４０に格納されているデータを、データを格納していないエクステントに移動させることもできる。
【０２２４】
図２４は、デバイス間ＷＬの実行パターンＡの一例のシーケンス図である。
【０２２５】
なお、以下の説明におけるシーケンス図では、ストレージコントローラ１００が、エクステントに格納されているデータの交換指示をＳＳＤコントローラ７１０に送信し、データの交換指示を受信したＳＳＤコントローラ７１０は、データの交換指示に関連するデータをストレージコントローラ１００に対して送信する。
【０２２６】
プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００及びＲＧ管理ＴＢＬ１３２００に基づいて、デバイス間ＷＬのデータ移動元となる短寿命のＲＧを選択する。ここで、短寿命のＲＧとは、ＲＧに含まれる複数のＳＳＤのうち、残寿命期間が所定の閾値以下（短寿命のＳＳＤが１つ以上（２つ以上としてもよい）存在するＲＧとする。例えば、閾値は、保証期間に基づいて定められる。つまり、保証期間よりも早く、寿命に到達するＳＳＤを含むＲＧを短寿命のＲＧとする。ＳＳＤが保証期間よりも前に、寿命に到達するということは、そのＳＳＤにライトが集中していると考えられる。よって、このようなＳＳＤから、ライト負荷の高いデータを移動させることで、ＳＳＤの長寿命化が可能となる。
【０２２７】
短寿命のＲＧが複数ある場合は、いずれのＲＧもデバイス間ＷＬの対象としてもよい。この場合、各ＲＧの寿命を、各ＲＧに含まれるＳＳＤの中で最も短寿命のＳＳＤの寿命として、より短寿命のＲＧから順にデバイス間ＷＬを実行してもよい。また、保証期間より寿命が短いＳＳＤの数が多いＲＧから順にデバイス間ＷＬを実行してもよい。
【０２２８】
プロセッサ１０４は、ＦＭ  ＷＲ量予想ＴＢＬ１３７００を参照し、短寿命のＲＧの中で、ＦＭ  ＷＲ予想量が大きいエクステント（Ａ１）を選択する（Ｓ３０４１０）。
【０２２９】
ＦＭ  ＷＲ予想量が大きいエクステントとは、複数のエクステントの中で最もＦＭ  ＷＲ予想量が大きいエクステントとする。ＦＭ  ＷＲ予想量が閾値以上のエクステントをグループ化し、その中から一つのエクステントを選択することとしてもよい。この場合、ＦＭ  ＷＲ予想量が最も大きいエクステントを探索する必要がないため、処理時間が短縮される。
【０２３０】
次に、プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００及びＲＧ管理ＴＢＬ１３２００に基づいて、長寿命のＲＧを選択する。ここで、長寿命のＲＧとは、ＲＧに含まれる複数のＳＳＤのうち、短寿命のＳＳＤが存在しないＲＧとする。このようなＲＧが存在しない場合は、短寿命のＳＳＤの数が少ないＲＧから順に長寿命のＲＧとしてもよい。
【０２３１】
そして、プロセッサ１０４は、ＦＭ  ＷＲ量予想ＴＢＬ１３７００を参照し、長寿命のＲＧの中で、ＦＭ  ＷＲ量が小さいエクステント（Ｂ１）を選択する（Ｓ３０４１１）。
【０２３２】
ＦＭ  ＷＲ予想量が小さいエクステントとは、複数のエクステントの中で最もＦＭ  ＷＲ予想量が小さいエクステントとする。ＦＭ  ＷＲ予想量が閾値以下のエクステントをグループ化し、その中から一つのエクステントを選択することとしてもよい。
【０２３３】
そして、プロセッサ１０４は、エクステント（Ａ１）のＦＭ  ＷＲ予想量がエクステント（Ｂ１）のＦＭ  ＷＲ予想量よりも大きいか否かを判断する（Ｓ３０４１２）。
【０２３４】
エクステント（Ｂ１）のＦＭ  ＷＲ予想量がエクステント（Ａ１）より大きい場合、エクステント（Ｂ１）を残寿命が短いＲＧに移動すると、そのＲＧへのライトデータ量がさらに増加し、デバイス間で消去回数を平準化することにならない。よって、この判断により、不要なデータ移動をすることなく、適切にデバイス間で消去回数の平準化を行うことができる。
【０２３５】
その判断の結果が肯定的（Ｓ３０４１２：Ｙｅｓ）であれば、プロセッサ１０４は、エクステント（Ａ１）内のデータとエクステント（Ｂ１）内のデータを交換し（Ｓ３０４１３）、本処理を終了する。一方、Ｓ３０４１２の判断の結果が否定的（Ｓ３０４１２：Ｎｏ）であれば、プロセッサ１０４は、データ交換を中止し（Ｓ３０４１４）、本処理を終了する。
【０２３６】
図２５は、デバイス間ＷＬの実行パターンＢの概要説明図である。
【０２３７】
パターンＢでは、エクステント単位で、ＲＧ間のデータ移動（データ交換）が行われ、さらに、エクステント内のデータ格納位置の最適化も行われる。ＲＧ間でデータが移動されても、エクステント内でデータ格納位置の最適化が図られるとは限らないからである。
【０２３８】
ＲＧ＃ｎ３２０は、ＳＳＤ３２１０、ＳＳＤ３２２０及びＳＳＤ３２３０より構成されており、そのＲＧ＃ｎ３２０に基づくエクステント＃３２４０がある。エクステント＃３２４０には、ＳＳＤ３２１０内のデータ、ＳＳＤ３２２０内のデータ、及び、ＳＳＤ３２３０内のデータに基づくデータが格納されている。
【０２３９】
ＲＧ＃ｍ４２０は、ＳＳＤ４２１０、ＳＳＤ４２２０及びＳＳＤ４２３０より構成されており、そのＲＧ＃ｍ４２０に基づくエクステント＃４２４０がある。エクステント＃４２４０には、ＳＳＤ４２１０内のデータ、ＳＳＤ４２２０内のデータ、及び、ＳＳＤ４２３０内のデータに基づくデータが格納されている。
【０２４０】
ＲＧ＃ｎ３２０のエクステント＃３２４０には、ＦＭ  ＲＷ予想量が高い領域（３２１１及び３２２１）、及びＦＭ  ＷＲ予想量が中程度の領域（３２３１）が存在する。つまり、エクステント＃３２４０には、ＦＭ  ＷＲ予想量の異なる領域（エクステント部分）が存在する。１つのＳＳＤに基づく論理アドレス範囲を「エクステント」と言うのであれば、「エクステント群＃３２４０には、ＦＭ  ＷＲ予想量の異なるエクステントが存在する」と言うこともできる。また、ＲＧ＃ｎ３２０は、短寿命のＲＡＩＤグループである。
【０２４１】
一方、ＲＧ＃ｍ４２０のエクステント＃４２４０には、ＦＭ  ＷＲ予想量が低いデータ（４２１１、４２２１及び４２３１）が格納されている。しかし、ＲＧ＃ｍ４２０を構成するＳＳＤの寿命はばらついている。具体的には、例えば、ＳＳＤ４２１０とＳＳＤ４２３０が、長寿命（残消去回数が多い）であり、ＳＳＤ４２２０は残寿命が中程度である。
【０２４２】
すわなち、ＲＧ＃ｎ３２０とＲＧ＃ｍ４２０の残寿命に乖離がある。そこで、ＲＧ＃ｎ３２０とＲＧ＃ｍ４２０の残寿命の乖離を縮めるために、エクステント＃３２４０及び＃４２４０をデバイス間ＷＬの対象とするＷＬをＳＳＤ間で行う。具体的には、下記が行われる。
（＊）エクステント＃３２４０とエクステント＃４２４０にそれぞれ格納されているデータが交換される。具体的には、例えば、長寿命のＲＧ＃ｎ３２０にＦＭ  ＷＲ予想量が多いデータが格納されるように、及び、短残寿ＲＧ＃ｍ４２０にＦＭ  ＷＲ予想量が少ないデータが格納されるようにする。このデータ交換により、ＲＧ＃ｎ３２０とＲＧ＃ｍ４２０の残寿命の乖離を縮めることができる。
（＊）ＲＧ＃ｍ４２０を構成するＳＳＤ間の残寿命のばらつきをも解消するように、エクステント＃３２４０に格納されているデータに基づく複数のデータのうちの少なくとも２つのデータの格納先が、そのエクステント＃３２４０において交換される。具体的には、例えば、残寿命が中程度のＳＳＤ４２２０に基づく領域に、ＦＭ  ＷＲ予想量が中程度のデータ３２３１が格納され、長寿命のＳＳＤ４２３０に基づく領域に、ＦＭ  ＷＲ予想量が多いデータ３２２１が格納される。つまり、エクステント＃３２４０において、データ３２３１及び３２２１の格納位置が交換される。これにより、デバイス間ＷＬを行った後のＲＧ＃ｍ４２０でのＳＳＤの残寿命のばらつきを解消することが期待できる。
【０２４３】
図２６は、デバイス間ＷＬの実行パターンＢの一例のシーケンス図である。
【０２４４】
プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００及びＲＧ管理ＴＢＬ１３２００に基づいて、短寿命のＲＧを選択する。また、プロセッサ１０４は、ＦＭ  ＷＲ量予想ＴＢＬ１３７００を参照し、短寿命のＲＧの中で、ＦＭ  ＷＲ予想量が大きいエクステント（Ａ２）を選択する（Ｓ３０４２０）。
【０２４５】
次に、プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００及びＲＧ管理ＴＢＬ１３２００に基づいて、長寿命のＲＧを選択する。また、プロセッサ１０４は、ＦＭ  ＷＲ量予想ＴＢＬ１３７００を参照し、長寿命のＲＧの中で、ＦＭ  ＷＲ量が小さいエクステント（Ｂ２）を選択する（Ｓ３０４２０）。
【０２４６】
そして、プロセッサ１０４は、エクステント（Ａ２）のＦＭ  ＷＲ量が、エクステント（Ｂ２）のＦＭ  ＷＲ量よりも大きいか否かを判断する（Ｓ３０４２２）。
【０２４７】
その判断の結果が肯定的（Ｓ３０４２２：Ｙｅｓ）であれば、プロセッサ１０４は、エクステント内でのデータ格納位置の最適化が可能であるかを判断する（Ｓ３０４２４）。
エクステント内でのデータ格納位置の最適化とは、データのＦＭ  ＷＲ予想量の程度に適した残寿命のＳＳＤにそのデータを格納すること、具体的には、ＦＭ  ＷＲ予想量が多いデータを残寿命の長いＳＳＤに格納し、ＦＭ  ＷＲ予想量が少ないデータを残寿命の短いＳＳＤに格納することである。
【０２４８】
その判断の結果が肯定的（Ｓ３０４２４：Ｙｅｓ）であれば、プロセッサ１０４は、エクステント（Ａ２）内のデータとエクステント（Ｂ２）内のデータを交換し、且つ、エクステント内のデータ位置の入れ換え（データ格納位置の最適化）を実行し（Ｓ３０４２５）、本処理を終了する。
【０２４９】
一方、Ｓ３０４２４の判断の結果が否定的（Ｓ３０４２４：Ｎｏ）であれば、プロセッサ１０４は、エクステント（Ａ２）内のデータとエクステント（Ｂ２）内のデータを交換し（Ｓ３０４２６）、データ格納位置の最適化を実行することなく、本処理を終了する。
【０２５０】
また、Ｓ３０４２２の判断の結果が否定的（Ｓ３０４２２：Ｎｏ）であれば、プロセッサ１０４は、データ移動を中止し（Ｓ３０４２３）、本処理を終了する。
【０２５１】
図２７は、デバイス間ＷＬの実行パターンＣの概要説明図である。
【０２５２】
パターンＣでは、エクステント部分単位で、ＲＧ間でのデータ移動が行われる。ＲＧ＃ｎ３３０に基づくエクステント（Ａ）３３４０と、ＲＧ＃ｍ４３０に基づくエクステント（Ｂ）４３４０とがある。ＳＳＤ３３３０は、ＲＧ＃ｎ３３０に所属しており、短寿命である。しかし、そのＳＳＤ３３３０は、ＦＭ  ＷＲ予想量が多い領域（エクステント（Ａ）３３４０におけるエクステント部分）の基になっており、その領域３３３１に、データが格納されている。一方、ＳＳＤ４３１０は、ＲＧ＃ｍ４３０に所属しており、長寿命である。しかし、そのＳＳＤ４３１０は、ＦＭ  ＷＲ予想量が少ない領域（エクステント（Ｂ）４３４０におけるエクステント部分）の基になっており、その領域４３３１に、データが格納されている。
【０２５３】
そこで、ＳＳＤ３３３０とＳＳＤ４３１０の残寿命を平準化するための、データ移動（データ交換）が行われる。具体的には、ＦＭ  ＷＲ予想量が多い領域３３３１とＦＭ  ＷＲ予想量が少ない領域４３１１との間で、データが交換される。
【０２５４】
しかし、このデータ移動によれば、ストライプ列を維持できなくなる可能性がある。もし、同一のストライプ列に所属するデータもしくはパリティが、同一のＳＳＤに格納されてしまった場合には、ＲＡＩＤの冗長性が低下してしまう。
【０２５５】
これを回避するため、データの移動時に、プロセッサ１０４は、エクステント管理ＴＢＬ１３４００を参照し、ＲＡＩＤの冗長性が低下する場合には、そのデータ移動を抑止することができる。
【０２５６】
なお、データ移動前において、例えば、１つの仮想エクステントに１つのエクステント（Ａ）３３４０（言い換えれば、同一のエクステント（Ａ）３３４０における３つのエクステント部分）が割当てられているが、データ移動後は、この仮想エクステントに、２つのエクステント（Ａ）及び（Ｂ）（言い換えれば、エクステント（Ａ）３３４０及び（Ｂ）４３４０におけるエクステント部分）が対応付けられることになる。具体的には、データ移動後は、エクステント（Ａ）３３４０が割り当てられている割当先が、エクステント（Ａ）３３４０との一部分（データ移動元）からエクステント（Ｂ）の一部分（データ移動先）に変更される。同様に、エクステント（Ｂ）４３４０が割り当てられている仮想エクステントの一部分の割当先が、エクステント（Ｂ）４３４０の一部分（データ移動元）から、エクステント（Ａ）３３４０の一部分（データ移動先）に変更される。
【０２５７】
図２８は、デバイス間ＷＬの実行パターンＤの概要説明図である。
【０２５８】
パターンＤでも、エクステント部分単位で、ＲＧ内でデータ移動が行われる。
【０２５９】
パターンＣとの違いは、ＲＧを跨ぐ移動ではなく、同一のＲＧ内でのデータ移動という点である。基本的な考え方はパターンＣと同じであり、ＲＧ＃ｎ３４０を構成するＳＳＤ３４１０、ＳＳＤ３４２０及びＳＳＤ３４３０のライト負荷を平準化することである。
【０２６０】
例えば、ＲＧ＃ｎ３４０は、長残寿命のＳＳＤ３４１０、残寿命が中程度のＳＳＤ３４２０、及び短残寿のＳＳＤ３４３０より構成されている。エクステント＃３４４０及び＃３４５０が、ＲＧ＃ｎ３４０に基づいている。
【０２６１】
短寿命のＳＳＤ３４３０に格納されている、ＦＭ  ＲＷ予想量の多い領域３４３１に格納されているデータが、長寿命のＳＳＤ３４１０に移動される。また、長寿命のＳＳＤ３４１０に格納されている、ＦＭ  ＲＷ予想量の少ない領域３４１１に格納されているデータが、短寿命のＳＳＤ３４３０に移動される。
【０２６２】
また、パターンＣと同様、データ移動によりＲＡＩＤの冗長性が低下する危険性があるため、そのような場合には、プロセッサ１０４はデータの移動を抑止する。
【０２６３】
なお、デバイス間ＷＬの実行パターンＣ及びＤでは、同一のエクステント内に、同一ストライプ列を構成するデータが格納されなくなるため、プロセッサ１０４が、キャッシュメモリ１０３に、このデータの移動元のエクステント部分と移動先のエクステント部分との対応関係を記憶して良い。プロセッサ１０４は、複数のエクステントに分散されている同一のストライプ列を構成するデータ群を読み出す場合には、上記記憶している対応関係を基に、読出し元を複数のエクステントとして良い。或いは、プロセッサ１０４は、同一ストライプ列を構成するデータが複数のエクステントに分散されるような場合には、エクステントの論理アドレス範囲の一部分について、その一部分とＳＳＤの物理アドレス範囲との対応関係を変更して良い。このようにすることで、或るエクステントについては、或るＲＡＩＤグループのうちの一部のＳＳＤと、別のＲＡＩＤグループのうちの一部のＳＳＤとに基づくことになって良い。
【０２６４】
図２９は、デバイス間ＷＬの実行パターンＣ及びＤの一例のシーケンス図である。
【０２６５】
プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００、及びＲＧ管理ＴＢＬ１３２００に基づいて、短寿命のＤｉｓｋに基づいて形成されているＲＧ選択する。プロセッサ１０４は、ＦＭ  ＷＲ予想量ＴＢＬ１３７００を参照し、短寿命のＤｉｓｋの中で、ＦＭ  ＷＲ量が大きいエクステント（Ａ３）を選択する（Ｓ３０４３０）。
【０２６６】
次に、プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００、及びＦＭ  ＷＲ量予想ＴＢＬ１３７００に基づいて、長寿命のＤｉｓｋを選択する。ここで、プロセッサ１０４は、パターンＣでは、短寿命のＤｉｓｋを有するＲＧとは異なるＲＧを構成するＤｉｓｋから、長寿命のＤｉｓｋを選択する。また、パターンＤでは、プロセッサ１０４は、短寿命のＤｉｓｋを有するＲＧとは同じＲＧを構成するＤｉｓｋから、長寿命のＤｉｓｋを選択する。
【０２６７】
プロセッサ１０４は、長寿命のＤｉｓｋの中で、ＦＭ  ＷＲ量が小さいデータ（Ｂ３）を選択する（Ｓ３０４３１）。そして、プロセッサ１０４は、データ（Ａ３）のＦＭ  ＷＲ量がデータ（Ｂ３）のＦＭ  ＷＲ量よりも大きいか否かを判断する（Ｓ３０４３２）。
【０２６８】
その結果が肯定的（Ｓ３０４２２：Ｙｅｓ）であれば、プロセッサ１０４は、エクステント管理ＴＢＬ１３４００を参照し、データ移動によりＲＡＩＤの冗長性が低下するか否かを判断する（Ｓ３０４３３）。
【０２６９】
その結果が否定的（Ｓ３０４３３：Ｎｏ）であれば、プロセッサ１０４は、データ（Ａ３）及びデータ（Ｂ３）の格納位置を交換するデータ移動を行い（Ｓ３０４３４）、本処理を終了する。
【０２７０】
一方、Ｓ３０４３３の判断の結果が肯定的（Ｓ３０４３３：Ｙｅｓ）であれば、プロセッサ１０４は、データの移動を中止し（Ｓ３０４３５）、本処理を終了する。
【０２７１】
また、Ｓ３０４３２の判断の結果が否定的（Ｓ３０４３２：Ｎｏ）であれば、プロセッサ１０４は、データの移動を中止し（Ｓ３０４３５）、本処理を終了する。
【０２７２】
図３０は、デバイス間ＷＬの実行パターンＥの概要説明図である。
【０２７３】
パターンＥでは、記憶媒体の残寿命に影響するデバイス特徴に応じて、データ移動が行われる。
【０２７４】
ＲＧ＃ｎ３５０は、ＳＬＣタイプのＳＳＤで構成されている。ＲＧ＃ｍ４５０は、ＭＬＣタイプのＳＳＤで構成されている。ＲＧ＃ｏ５５０は、ＨＤＤで構成されている。すわなち、ＲＧ＃ｎ３５０は、高速かつ長寿命、ＲＧ＃ｍ４５０は、高速だが短寿命、ＲＧ＃ｏ５５０は、低速だが書換え実質的に無制限という特徴を有している。
【０２７５】
パターンＥでは、デバイス毎の特徴の違いを利用して、データの格納先に最適なデバイスが選択される。
【０２７６】
具体的には、ＦＭ  ＷＲ予想量が少ないエクステントに格納されているデータがＳＬＣタイプのＳＳＤのＦＭ  ＷＲ予想量が少ないエクステントに格納され、リード負荷の高いデータはＭＬＣタイプのＳＳＤのＦＭ  ＷＲ予想量が少ないエクステントに格納され、リード負荷が低いデータはＨＤＤに移動される。
【０２７７】
このように、特徴の異なるデバイス間でデータ移動が行われることで、各データをそのＩ／Ｏ特性に最適な種別のデバイスに格納することが出来る。
【０２７８】
なお、説明を分かり易くするため、図３０は、パターンＡ（ＲＧ間でのデータ移動）の例を示しているが、パターンＥは、パターンＢ（ＲＧ間でのデータ移動、及び、同一エクステントの基になっているＳＳＤ間でのデータ移動）とパターンＣ（特定のデータ単位でのＲＧ間のデータ移動）のいずれにも適用可能である。
【０２７９】
図３１は、デバイス間ＷＬの実行パターンＥの一例のシーケンス図である。
【０２８０】
プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００、ＲＧ管理ＴＢＬ１３２００、エクステント管理ＴＢＬ１３４００、及びＦＭ  ＷＲ量予想ＴＢＬ１３７００に基づき、処理対象とする特定のエクステントを選択する（Ｓ３０４４０）。以下、図３１の説明において、Ｓ３０４４０で選択されたエクステントを「対象エクステント」と言う。
【０２８１】
次に、プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００、ＲＧ管理ＴＢＬ１３２００、エクステント管理ＴＢＬ１３４００、及びＦＭ  ＷＲ量予想ＴＢＬ１３７００に基づき、対象エクステントが、ＦＭ  ＷＲ予想量の多い領域を含んでいるか否かを判断する（Ｓ３０４４１）。その結果が肯定的（Ｓ３０４４１：Ｙｅｓ）であれば、プロセッサ１０４は、対象エクステント内のデータをＳＬＣタイプのＳＳＤに基づくエクステントに移動し（Ｓ３０４４３）、本処理を終了する。
【０２８２】
一方、Ｓ３０４４１の判断の結果が否定的（Ｓ３０４４１：Ｎｏ）であれば、プロセッサ１０４は、対象エクステントのリードの負荷が高いか否かを判断する（Ｓ３０４４２）。
【０２８３】
その結果が肯定的（Ｓ３０４４２：Ｙｅｓ）であれば、プロセッサ１０４は、対象エクステント内のデータをＭＬＣタイプのＳＳＤに基づくエクステントに移動し（Ｓ３０４４４）、本処理を終了する。
【０２８４】
Ｓ３０４４２の判断の結果が否定的（Ｓ３０４４２：Ｎｏ）であれば、プロセッサ１０４は、対象エクステント内のデータをＨＤＤに基づくエクステントに移動し（Ｓ３０４４５）、本処理を終了する。
【０２８５】
図３２は、デバイス間ＷＬの実行パターンＦの一例のシーケンス図である。
【０２８６】
パターンＦでは、デバイスの寿命に応じてデータが移動される。プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００、ＲＧ管理ＴＢＬ１３２００、エクステント管理ＴＢＬ１３４００及びＦＭ  ＷＲ量予想ＴＢＬ１３７００に基づき、処理対象とするエクステントを選択する（Ｓ３０４５０）。
【０２８７】
なお、ここで選択されるエクステントとは、ＦＭ  ＷＲ予想量が多いエクステントである。以下、図３２の説明において、Ｓ３０４５０で選択されたエクステントを「対象エクステント」と言う。
【０２８８】
次に、プロセッサ１０４は、対象エクステント内のデータをＭＬＣタイプのＳＳＤに基づくエクステントに格納できるか否かを寿命の観点で判断する（Ｓ３０４５１）。具体的には、プロセッサ１０４は、Ｄｉｓｋ管理ＴＢＬ１３１００を参照し、同一のＲＧを構成する各々のＭＬＣタイプのＳＳＤについて、ＳＳＤの残寿命期間１３１０７が、そのＳＳＤの残保証期間１３１０４よりも短い値か否かをチェックする。なぜなら、同一のＲＧを構成する各々のＭＬＣタイプのＳＳＤについて、ＳＳＤの残寿命期間１３１０７がそのＳＳＤの残保証期間１３１０４よりも短い値となっている場合には、そのＭＬＣタイプのＳＳＤには、許容量を超える高いライト負荷が発生しており、データの移動先を、そのＭＬＣタイプのＳＳＤに基づくエクステントにしたとしても、寿命の問題を解決することはできないからである。
【０２８９】
そこで、すべてのＭＬＣタイプのＳＳＤの残寿命期間１３１０７が、それらのＳＳＤの残保証期間１３１０４よりも短い値となっている場合（Ｓ３０４５１：Ｎｏ）、プロセッサ１０４は、ＭＬＣタイプのＳＳＤよりも寿命の長いＳＬＣタイプのＳＳＤに基づくエクステントにデータを移動することを試みる（Ｓ３０４５２）。これは、プロセッサ１０４が、Ｄｉｓｋ管理ＴＢＬ１３１００を参照し、同一のＲＧを構成する各々のＳＬＣタイプのＳＳＤについて、ＳＳＤの残寿命期間１３１０７がそのＳＳＤの残保証期間１３１０４よりも短い値となっているかを判断することにより、可能である。
【０２９０】
ＳＬＣタイプのＳＳＤも移動先としてふさわしくない場合（Ｓ３０４５２：Ｎｏ）、プロセッサ１０４は、書き換え上限のないＨＤＤをデータの移動先として決定する（Ｓ３０４５５）。
【０２９１】
ステップＳ３０４５１の判断の結果、ＭＬＣタイプのＳＳＤに寿命の余裕がある場合（Ｓ３０４５１：Ｙｅｓ）、プロセッサ１０４は、ＭＬＣタイプのＳＳＤをデータの移動先として決定する（Ｓ３０４５３）。
【０２９２】
また、ステップＳ３０４５２の判断の結果、ＳＬＣタイプのＳＳＤに寿命の余裕がある場合（Ｓ３０４５２：Ｙｅｓ）、プロセッサ１０４は、ＳＬＣタイプのＳＳＤをデータの移動先として決定する（Ｓ３０４５４）。
【実施例２】
【０２９３】
次に、実施例２について説明する。本実施例は、実施例１と共通部分を多く含む。そのため、本実施例では、実施例１と異なる部分を中心に説明する。実施例２では、ＷＬ対象の選択するに際し、ＦＭ  ＷＲ予想量に加えて、予想ＷＡ（図３６参照）を用いる。
【０２９４】
一般的に、ＳＳＤ７００内部では、ＷＬやリクラメーションなどの、ＳＳＤ独自の処理が発生するため、ＳＳＤ７００がストレージコントローラ１００から受信したデータの量に比べ、実際にフラッシュメモリに書き込まれるデータの量は大きいという特性を有している。これはＷＡ（Ｗｒｉｔｅ  Ａｍｐｌｉｆｉｃａｔｉｏｎ）と呼ばれる。ＳＳＤ内部の処理によるライトデータ量の増加は、アクセスパターンや、ライトデータのサイズ等に依存する。
【０２９５】
ＳＳＤ内の独自処理によってライトデータ量が増加すると、それに伴って消去回数も増加する。よって、本実施例では、ＷＡを予想することで、デバイス間ＷＬの精度をより向上させる。
【０２９６】
まず、ＷＡについて詳細に説明する。
【０２９７】
ＷＡは、下記（ｂ）を（ａ）で割ることにより得られる比率（（ｂ）／（ａ））、
（ａ）ＳＳＤがストレージコントローラ１００から受信したデータの量、
（ｂ）フラッシュメモリに実際に書き込むデータの量、
である。
【０２９８】
例えば、ＳＳＤ７００に何もデータがライトされていない状態で、ＳＳＤ７００がストレージコントローラ１００からＷＲデータを受信した場合、そのデータは、空きページにそのままライトされることになるので、ＷＡは「１．０」となる確率が高い。また、例えば、ＳＳＤ７００のページに有効データがライトされており、且つ、空きページが無くリクラメーション処理の必要がある場合、有効データの移動先となるページ、及びストレージコントローラ１００からのデータを書き込むためのページが必要となるため、ＷＡは「１．０」を超えることになる。
【０２９９】
しかしながら、ＷＲ量１３７０６が小さいからと言って、ＷＡ１３７０７が小さいとは限らない。ＳＳＤ７００内部で、ＷＬやリクラメーションなどの、ＳＳＤ独自の処理が発生するためである。
【０３００】
なお、リクラメーション処理とは、例えば、空きブロックが枯渇し始めた際に、有効なデータを格納するページを集約し、別のブロックへライトすることで、無効なデータのみを有するブロックを生成し、そのブロック内のデータを消去することで、空きブロックを生成する処理である。
【０３０１】
一般的に、ＷＡは、シーケンシャルＩ／Ｏ（シーケンシャルアクセスとも言う）よりもランダムＩ／Ｏ（ランダムアクセスとも言う）の方が大きいという特性を有している。
【０３０２】
シーケンシャルＩ／Ｏは、一般的に、連続したＬＢＡ空間に対するＩ／Ｏである。そのため、１ブロックを構成する全ページに対して、新しいデータがライトされる可能性が高い。そうすると、そのブロックに存在するデータの全てが有効データでないことがあり、そのようなブロックに対しては、イレース処理を行うだけで空きページを作ることができる。従って、シーケンシャルＩ／Ｏは、データを移動させる必要性が低いので、データの移動先となるページが消費されず、ＷＡは「１」或いはそれに近い数値となる可能性が高くなる。
【０３０３】
ランダムＩ／Ｏは、一般的に、不連続なＬＢＡ空間に対するＩ／Ｏであり、例えば、複数のブロックがＩ／Ｏ先となることがある。そうすると、一つのブロックに有効データが多く含まれる確率が高くなる。このため、リクラメーションの際に、シーケンシャルライトと比べて移動させるデータ量が大きくなる。よって、ＷＡは「１」より大きい数値となる可能性が高くなる。
【０３０４】
また、ＷＡは、大サイズＩ／Ｏよりも小サイズＩ／Ｏになるほど大きくなる。ここで、小サイズＩ／Ｏとは、Ｉ／Ｏコマンドに付随するデータのサイズが小さいことを示す。また、大サイズＩ／Ｏとは、Ｉ／Ｏコマンドに付随するデータのサイズが大きいことを示す。ＳＳＤに対して、５１２Ｂのデータがライト対象として送信された際、最小ライト単位（ページ）が８１９２Ｂであれば、８１９２Ｂのページを１つ消費して、５１２Ｂのデータを格納することとなる。これは、内部のフラッシュメモリにはＳＳＤに対するデータのサイズと比較して１６倍のデータのライトが実施されることに等しい。つまり、Ｉ／Ｏサイズとページサイズに依存する。
【０３０５】
また、ＷＡの値は、ＳＳＤの圧縮機能や重複排除機能の有無、圧縮機能の圧縮アルゴリズムの種類にも依存する。これは、圧縮効果や重複排除効果が高いデータは、ライトデータサイズが小さくなるからである。
【０３０６】
また、ＷＡの値は、ＳＳＤ内でのキャッシュヒット率にも依存する。ＳＳＤ内のキャッシュ上でライトデータを更新する場合は、フラッシュメモリへの書き込みが発生しないためである。
【０３０７】
また、ＷＡの値は、ＳＳＤのデータ格納割合（ＳＳＤの容量に対するユーザデータ総量の割合）にも依存する。
【０３０８】
例えば、１００ＧＢの物理容量を備えるＳＳＤに、ユーザデータが５０ＧＢ格納されている場合には、ＳＳＤは残りの５０ＧＢの領域を空きページとして利用できる。ここで、５０ＧＢのユーザデータがすべて新しいデータに更新されたとしても、新しいデータは残りの５０ＧＢの空ページにライトすることができる。このとき、更新されたデータはすべて無効データとなるため、リクラメーション時には、イレース処理を行うだけで空ページを作ることができる。ゆえに、ＳＳＤのデータ格納割合が小さい（具体的には、半分以下）場合には、リクラメーションの効率が向上し、ＷＡが「１」に近づく可能性が高い。
【０３０９】
このように、ＷＡには様々な要因が影響する。よって、本実施例ではこれらを考慮してストレージコントローラがＷＡを予想する（図３４参照）。
【０３１０】
図３３は、本実施例におけるＦＭ  ＷＲ量予想ＴＢＬ１３７００の構成例を示す図である。
【０３１１】
ＦＭ  ＷＲ量予想ＴＢＬ１３７００には、実際にＳＳＤ内部で書き込まれるデータ量を予測するために必要な情報が含まれる。
【０３１２】
ＦＭ  ＷＲ量予想ＴＢＬ１３７００は、統計情報管理ＴＢＬ１３６００を基に構成される。ＦＭ  ＷＲ量予想ＴＢＬ１３７００は、Ｄｉｓｋ毎に、Ｄｉｓｋ＃１３７０１、エクステント＃１３７０２、平均ＷＲ  Ｉ／Ｏ  Ｓｉｚｅ１３７０３、ＷＲ  Ｉ／Ｏ  Ｐａｔｔｅｒｎ１３７０４、ＷＲ比率１３７０５、ＷＲ量１３７０６、予想ＷＡ（Write  Amplification）１３７０７及びＦＭ  ＷＲ予想量１３７０８を有している。
【０３１３】
Ｄｉｓｋ＃１３７０１は、Ｄｉｓｋの識別子であり、ユニークな番号である。エクステント＃１３７０２は、エクステントの識別子であり、ユニークな番号である。
【０３１４】
平均ＷＲ  Ｉ／Ｏ  Ｓｉｚｅ１３７０３は、Ｄｉｓｋのアドレス範囲のうちエクステントに対応するアドレス範囲がＷＲ  Ｉ／Ｏ先となったデータの平均サイズである。ＷＲ  Ｉ／Ｏ  Ｐａｔｔｅｒｎ１３７０４は、ＷＲ  Ｉ／Ｏのパターンがランダムであるかシーケンシャルであるかを示している。ＷＲ比率１３７０５は、Ｄｉｓｋのアドレス範囲のうちエクステントに対応するアドレス範囲に対するＩ／ＯのうちのＷＲコマンドの比率を示している。ＷＲ量１３７０６は、Ｄｉｓｋのアドレス範囲のうちエクステントに対応するアドレス範囲を書込み先としたＷＲデータの総量を示している。
【０３１５】
予想ＷＡ１３７０７は、ストレージコントローラ１００からのＷＲデータが、ＳＳＤ７００内部で何倍に増加するかを予想した数値である。予想ＷＡは、後述のＷＡ情報格納ＴＢＬ１３８００に基づく。
【０３１６】
ＦＭ  ＷＲ予想量１３７０８は、フラッシュメモリに実際に書き込まれるデータの予想量を示している。この値は、ＷＲ量１３７０６及び予想ＷＡ１３７０７を基に求められた数値（ＷＲ量１３７０６及び予想ＷＡ１３７０７の積）である。
【０３１７】
本テーブル１３７００は、ストレージコントローラ１００がＳＳＤ７００に送信したライトデータ量が、ＳＳＤ７００でどの位のデータ量になるかをエクステント単位で把握するためのテーブルである。
【０３１８】
Ｄｉｓｋ＃１３７０１からＷＲ量１３７０６は、統計情報管理ＴＢＬ１３６００を基に更新される。
【０３１９】
図３４は、実施例２におけるＷＡ情報格納ＴＢＬ１３８００の構成例を示す図である。
【０３２０】
ＷＡ情報格納ＴＢＬ１３８００は、ＷＲ  Ｉ／Ｏパターン１３８０１、平均ＷＲ  Ｉ／Ｏサイズ１３８０２及び予想ＷＡ１３８０３を有している。ＷＡには、ＷＲ  Ｉ／Ｏパターン及び平均ＷＲ  Ｉ／Ｏサイズ以外の要因も影響すると考えられるが、本実施例は、ＷＲ  Ｉ／Ｏパターン及び平均ＷＲ  Ｉ／ＯサイズがＷＡに与える影響が大きいとの考えに基づいている。なお、平均ＷＲ  Ｉ／Ｏサイズに代えて又は加えて、単位時間当たりの最大（或いは最小）のＷＲ  Ｉ／Ｏサイズが、採用されても良い。また、予想ＷＡ１３８０３は、ＷＲ  Ｉ／Ｏパターン１３８０１及び平均ＷＲ  Ｉ／Ｏサイズ１３８０２に限らず、統計情報管理ＴＢＬ１３６００のいずれかの項目（ＷＲ  ＩＯＰＳ１３６０３、ＲＤ  ＩＯＰＳ１３６０４、ＷＲ比率１３６０７、ＷＲ量１３６０８、ＲＤ量１３６０９）に基づいて、定められても良い。また、統計情報（図９参照）に含まれるこれらの情報は、ストレージコントローラ１００がＩ／Ｏを監視することで、容易に取得可能な情報である（ストレージコントローラ１００の一機能として予め搭載されていることもあり得る）。よって、ストレージコントローラとＳＳＤの通信オーバヘッドをかけずに、ＷＡを予想することができる。
【０３２１】
ＷＲ  Ｉ／Ｏパターン１３８０１は、ライトのＩ／Ｏパターンを示す。平均ＷＲ  Ｉ／Ｏサイズ１３８０２は、ライトデータのサイズの平均値を示す。予想ＷＡ１３８０３は、Ｉ／Ｏパターン、平均Ｉ／Ｏサイズに対して予想されるＷＡの値を示す。
【０３２２】
本実施例では、Ｉ／Ｏパターンがシーケンシャルであれば、平均Ｉ／Ｏサイズによらず、予想ＷＡは１．０とする。また、Ｉ／Ｏパターンがランダムであれば、Ｉ／Ｏサイズが小さいほど、予想ＷＡは大きくする。
【０３２３】
また、ＳＳＤが圧縮機能や重複排除機能を有している場合、これをＷＡ情報格納ＴＢＬ１３８００に加えてもよい。特定パターンのデータ（例えば、オールゼロデータ）は圧縮効果が高く、ＳＳＤ内でのライト量が小さくなる。よって、ストレージコントローラ１００が、圧縮や重複排除の効果が高いデータパターンをＳＳＤにライトする傾向が高い場合は、予想ＷＡを小さくする。
【０３２４】
また、ストレージコントローラ１００が、ＳＳＤからＳＳＤ内のキャッシュヒット率の値を取得し、キャッシュヒット率が高ければ予想ＷＡを小さくしてもよい。
【０３２５】
また、ストレージコントローラ１００が、ＳＳＤからＳＳＤ内のデータ格納割合を取得し、データ格納割合が小さければ予想ＷＡを小さくしてもよい。
【０３２６】
このように、ストレージコントローラがＳＳＤから内部情報を取得してＷＡを予測する場合、より予想ＷＡの精度が向上する。
【０３２７】
デバイス間ＷＬの基本的なフローは実施例１と同様であるため説明を省略する。図２０におけるＳ３０３の処理が次のように異なる。
【０３２８】
図３５は、図２０のＳ３０３（フラッシュメモリのライト量の予想）の流れの一例を示すシーケンス図である。
【０３２９】
プロセッサ１０４は、統計情報管理ＴＢＬ１３６００より、エクステントに対するＷＲ量を取得する（Ｓ３０３３）。
【０３３０】
プロセッサ１０４は、統計情報管理ＴＢＬ１３６００の情報を基に、ＦＭ  ＷＲ量予想ＴＢＬ１３７００に必要な統計情報である、平均ＷＲ  Ｉ／Ｏ  Ｓｉｚｅ１３７０３、ＷＲ  Ｉ／Ｏ  Ｐａｔｔｅｒｎ１３７０４、及びＷＲ量１３７０６を取得する（Ｓ３０３４）。
【０３３１】
次に、プロセッサ１０４は、Ｓ３０３４で取得した情報に基づいて、ＷＡ情報格納ＴＢ
Ｌ１３８００より、予想ＷＡ１３８０３の値を取得する（Ｓ３０３５）。
【０３３２】
次に、プロセッサ１０４は、予想ＷＡ１３８０３と、エクステントへのＷＲ量１３７０６基いて、ＦＭ  ＷＲ予想量１３７０８を算出する。ここでは、予想ＷＡ１３８０３と、エクステントへのＷＲ量１３７０６との積により、ＦＭ  ＷＲ予想量１３７０８を算出している。
【０３３３】
本実施例では、ＦＭ  ＷＲ予想量１３７０８をＷＲ量１３７０６だけで求めるのではなく、エクステントへのＷＲ量１３７０６、及び予測ＷＡ１３７０７に基づいて求めるので、より精度の高いデバイス間ＷＬを実施し、ＳＳＤを長寿命化することができる。
【実施例３】
【０３３４】
次に、実施例３について説明する。本実施例は、実施例１及び２と共通部分を多く含む。そのため、本実施例では、実施例１及び２と異なる部分を中心に説明する。
【０３３５】
実施例３では、ストレージコントローラ１００が取得する情報の粒度が、Ｃｈｕｎｋ単位に拡張されている。この場合、図１７にて示す、統計情報２５２００は、ＳＳＤ単位の情報２３２１０とＣｈｕｎｋ（複数のエクステントの集合）単位の情報２３２２０が含まれて良い。また、アドレス情報２５１００（図１７参照）も、ＳＳＤ単位の情報と、Ｃｈｕｎｋ単位の論物変換情報を含むとする。
【０３３６】
これにより、プロセッサ１０４は、エクステントがどのＣｈｕｎｋに所属するかを知ることが可能となる。すなわち、本実施例では、ストレージコントローラ１００が、取得する情報が実施例１及び２と比較して詳細になる。これにより、ＦＭ  ＷＲ量の予想精度が向上するので、デバイス間ＷＬの精度向上につながる。実施例１からの具体的な変更点を、図３６を参照して説明する。
【０３３７】
図３６は、本実施例に係るＦＭ  ＷＲ量予想ＴＢＬ１３７００の構成例を示す図である。
【０３３８】
実施例１（図１０）との違いは、ＦＭ  ＷＲ量予想ＴＢＬが、Ｃｈｕｎｋ＃１３７１０及びＣｈｕｎｋ  ＷＲ量１３７１１の情報を含むことである。Ｃｈｕｎｋ＃１３７１０はエクステントが所属するＣｈｕｎｋの番号を示す。Ｃｈｕｎｋ  ＷＲ量１３７１１は、Ｃｈｕｎｋに対応するＦＭ  ＷＲ量（Ｃｈｕｎｋに対応するフラッシュメモリ領域に書き込まれたデータの量）の合計値を示す。ＳＳＤ単位の情報より通知粒度の高いＣｈｕｎｋ  ＷＲ量１３７１１の情報を参照することで、本実施例は、実施例１に比べ、より高精度にＦＭ  ＷＲ予想量１３７０８を算出することが可能となる。
【０３３９】
以上の手法により、ＳＳＤの内部情報を詳細に把握することが困難な場合においても、ＳＳＤ内部の状態（例えば、ＦＭ  ＷＲ予想量１３７０８）をストレージコントローラ１００が統計情報２５２００を基に予測することで、デバイス間ＷＬを高精度に実現することが出来る。
【０３４０】
なお、デバイス間ＷＬの実行において、ストレージコントローラ１００がＳＳＤ内部のデータライト量を予測するための判断材料として、エクステントごとのライトＩ／Ｏ数、及び又はデータライト量を用いても良い。
【０３４１】
また、実施例１から実施例３では、ストレージコントローラ１００が残消去回数を残日数に換算する処理を行っていたが、ＳＳＤが残日数を直接通知しても良い。これは、例えば、図２１のような、残消去回数を残日数に換算する機能をＳＳＤが備えることで実現できる。
【０３４２】
また、実施例１〜３では、残寿命の算出に消去回数やＦＭ  ＷＲ予測量が用いられた。しかし、フラッシュメモリでは、データをライト（プログラム）してから、消去するまでの時間が短いほど劣化しやすいという性質がある。そこで、残寿命の算出に際し、消去回数やＦＭ  ＷＲ予測量だけでなく、ライトから消去までの時間を考慮した指標「劣化度」を用いる方法もある。
【０３４３】
劣化度としては、例えば、ブロックの消去毎に前回のライトからの経過時間に応じた値（ポイント）を累積したものを用いることができる。具体的に、例えば、データがライトされてから５分以内にデータが消去された場合は４０ポイント、１０分以内にデータが消去された場合は３５ポイント等として、経過時間に応じた消去毎のポイントを加算することで劣化度を管理することができる。
【０３４４】
予め、劣化度の最大値（上限値）を定めておくと、劣化度の増加率から寿命を予測することができる。これにより、ＦＭ  ＷＲ予測量及び消去回数のみを用いるよりも精度よく寿命を予測することができ、高精度なデバイス間ＷＬを実施することができる。
【０３４５】
実施例１〜３では、エクステント単位でデバイス間ＷＬを実行する処理を説明したが、デバイス間ＷＬを、ＬＵ（Logical  unit）単位でデバイス間ＷＬを行ってもよい。この場合、ストレージコントローラ１００は、ＬＵ単位で統計情報を取得する。その他の処理は、上記実施例と同様にＲＡＩＤグループの寿命に基づいて、移動元ＲＡＩＤグループ（短寿命のＲＡＩＤグループ）と移動先ＲＡＩＤグループ（長寿命のＲＡＩＤグループ）を選択し、選択した移動元と移動先のＲＡＩＤグループの予想ライト量（ライト負荷）に基づいて、ＬＵに格納されているデータを移動させる。
【符号の説明】
【０３４６】
１０：ストレージ装置
【図１】
0005844473.tif 000002
【図２】
0005844473.tif 000003
【図３】
0005844473.tif 000004
【図４】
0005844473.tif 000005
【図５】
0005844473.tif 000006
【図６】
0005844473.tif 000007
【図７】
0005844473.tif 000008
【図８】
0005844473.tif 000009
【図９】
0005844473.tif 000010
【図１０】
0005844473.tif 000011
【図１１】
0005844473.tif 000012
【図１２】
0005844473.tif 000013
【図１３】
0005844473.tif 000014
【図１４】
0005844473.tif 000015
【図１５】
0005844473.tif 000016
【図１６】
0005844473.tif 000017
【図１７】
0005844473.tif 000018
【図１８】
0005844473.tif 000019
【図１９】
0005844473.tif 000020
【図２０】
0005844473.tif 000021
【図２１】
0005844473.tif 000022
【図２２】
0005844473.tif 000023
【図２３】
0005844473.tif 000024
【図２４】
0005844473.tif 000025
【図２５】
0005844473.tif 000026
【図２６】
0005844473.tif 000027
【図２７】
0005844473.tif 000028
【図２８】
0005844473.tif 000029
【図２９】
0005844473.tif 000030
【図３０】
0005844473.tif 000031
【図３１】
0005844473.tif 000032
【図３２】
0005844473.tif 000033
【図３３】
0005844473.tif 000034
【図３４】
0005844473.tif 000035
【図３５】
0005844473.tif 000036
【図３６】
0005844473.tif 000037
【図３７】
0005844473.tif 000038
【図３８】
0005844473.tif 000039