(57)【要約】  本発明の一観点に係るストレージシステムは、ストレージコントローラと複数の記憶デバイスを有する。各記憶デバイスは、エラービット数（リード時に発生した、コレクタブルエラーの数）に基づいて劣化度を算出して、ストレージコントローラに送信する。ストレージコントローラは、受信した各記憶デバイスの劣化度に基づいて各ＲＡＩＤグループの寿命を算出することにより、目標耐用年数（ターゲット寿命）を待たずに寿命を迎えると予測されるＲＡＩＤグループを特定し、特定されたＲＡＩＤグループに格納されているデータを、別のＲＡＩＤグループに移動する。
2016117026.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機に接続されるストレージコントローラと、前記ストレージコントローラに接続される複数の記憶デバイスとを有するストレージシステムにおいて、
前記ストレージシステムは、前記複数の記憶デバイスから複数のＲＡＩＤグループを構成しており、
前記記憶デバイスは、不揮発性記憶媒体とデバイスコントローラを有し、
前記デバイスコントローラは、前記不揮発性記憶媒体の記憶領域を読み出した時に検出されたエラービット数に基づいて前記記憶デバイスの劣化度を算出して、前記ストレージコントローラに送信し、
前記ストレージコントローラは、前記記憶デバイスから受信した前記劣化度に基づいて、前記記憶デバイスが属する前記ＲＡＩＤグループの寿命を算出し、
前記ストレージコントローラはさらに、前記寿命が、あらかじめ定められている目標寿命よりも短い前記ＲＡＩＤグループを特定し、前記特定されたＲＡＩＤグループ内のデータを、別のＲＡＩＤグループに移動する、
ことを特徴とする、ストレージシステム。
【請求項２】
前記ストレージコントローラは、前記特定されたＲＡＩＤグループ内のデータを別のＲＡＩＤグループに移動する際、前記特定されたＲＡＩＤグループの使用期間が前記目標寿命に達するまでの間に受け付け可能な、ライトデータ量の上限値を算出し、前記算出された上限値に基づいて、移動すべきデータの量を決定する、
ことを特徴とする、請求項１に記載のストレージシステム。
【請求項３】
前記ストレージコントローラは、前記ＲＡＩＤグループに属する複数の前記記憶デバイスのうち、前記寿命が最も短い記憶デバイスの寿命を、前記ＲＡＩＤグループの寿命と決定する、
ことを特徴とする、請求項１に記載のストレージシステム。
【請求項４】
前記デバイスコントローラは、前記不揮発性記憶媒体の記憶領域から検出されたエラービット数がエラービット閾値を超過した時点で、前記記憶領域の使用を停止するよう構成されており、
前記デバイスコントローラは、前記エラービット数を前記エラービット閾値で除算することで、前記劣化度を算出する、
ことを特徴とする、請求項１に記載のストレージシステム。
【請求項５】
前記エラービット閾値は、前記記憶領域に最後に書き込みが行われてからの経過時間に依存する値である、
ことを特徴とする、請求項４に記載のストレージシステム。
【請求項６】
前記ストレージコントローラは、前記ＲＡＩＤグループを複数管理するプールを１以上有し、
前記特定されたＲＡＩＤグループ内のデータを移動する際、前記ストレージコントローラは、前記特定されたＲＡＩＤグループと同一の前記プールに属するＲＡＩＤグループを前記データの移動先に決定することを特徴とする、
請求項１に記載のストレージシステム。
【請求項７】
前記特定されたＲＡＩＤグループと同一の前記プールに属するＲＡＩＤグループの寿命がいずれも、前記目標寿命よりも短い場合、前記ストレージコントローラは、前記プールに属していないスペアＲＡＩＤグループを、前記データの移動先とする、
ことを特徴とする、請求項６に記載のストレージシステム。
【請求項８】
前記ストレージコントローラは前記ホスト計算機に、複数の仮想チャンクから構成される仮想ボリュームを複数提供し、前記仮想チャンクに対するライト要求を前記ホスト計算機から受領した時点で、前記ＲＡＩＤグループの有する記憶領域であるチャンクを前記仮想チャンクにマップするよう構成されており、
前記特定されたＲＡＩＤグループ内のデータを移動する際、前記ストレージコントローラは、いずれの前記仮想チャンクにもマップされていないチャンクを有する前記ＲＡＩＤグループを、前記データの移動先に決定することを特徴とする、請求項５に記載のストレージシステム。
【請求項９】
不揮発性記憶媒体とデバイスコントローラを有する複数の記憶デバイスと、前記複数の記憶デバイスに接続され、前記複数の記憶デバイスから複数のＲＡＩＤグループを構成するストレージコントローラを有するストレージシステムの制御方法であって、
前記デバイスコントローラは、前記不揮発性記憶媒体の記憶領域を読み出した時に検出されたエラービット数に基づいて前記記憶デバイスの劣化度を算出して、前記ストレージコントローラに送信し、
前記ストレージコントローラは、前記記憶デバイスから受信した前記劣化度に基づいて、前記記憶デバイスが属する前記ＲＡＩＤグループの寿命を算出し、
前記ストレージコントローラはさらに、前記寿命が、あらかじめ定められている目標寿命よりも短い前記ＲＡＩＤグループを特定し、前記特定されたＲＡＩＤグループ内のデータを、別のＲＡＩＤグループに移動する、
ことを特徴とする、ストレージシステムの制御方法。
【請求項１０】
前記ストレージコントローラは、前記特定されたＲＡＩＤグループ内のデータを別のＲＡＩＤグループに移動する際、前記特定されたＲＡＩＤグループの使用期間が前記目標寿命に達するまでの間に受け付け可能な、ライトデータ量の上限値を算出し、前記算出された上限値に基づいて、移動すべきデータの量を決定する、
ことを特徴とする、請求項９に記載のストレージシステムの制御方法。
【請求項１１】
前記ストレージコントローラは、前記ＲＡＩＤグループに属する複数の前記記憶デバイスのうち、前記寿命が最も短い記憶デバイスの寿命を、前記ＲＡＩＤグループの寿命と決定する、
ことを特徴とする、請求項９に記載のストレージシステムの制御方法。
【請求項１２】
前記デバイスコントローラは、前記不揮発性記憶媒体の記憶領域から検出されたエラービット数がエラービット閾値を超過した時点で、前記記憶領域の使用を停止するよう構成されており、
前記デバイスコントローラは、前記エラービット数を前記エラービット閾値で除算することで、前記劣化度を算出する、
ことを特徴とする、請求項９に記載のストレージシステムの制御方法。
【請求項１３】
前記エラービット閾値は、前記記憶領域に最後に書き込みが行われてからの経過時間に依存する値である、
ことを特徴とする、請求項１２に記載のストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性半導体メモリを用いたストレージシステムに関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリに代表される不揮発性半導体メモリは、ＨＤＤ等の磁気記憶デバイスに比べて省電力・高性能だが、高価格であった。しかし近年は、半導体技術の進歩に伴って低価格化が進み、ＨＤＤに替わるメインストリームの記憶デバイスとして注目されてきている。【０００３】
フラッシュメモリを用いたストレージ装置（フラッシュストレージ）には、書き換え回数（消去回数）に制限がある、という特性がある。そのため、特定の記憶領域に対する書き換えが頻発すると、その領域が早い段階で寿命を迎え（アクセスできなくなる）、結果としてそのフラッシュストレージ全体が使用できなくなる。【０００４】
この問題を解決するために、たとえば特許文献１には、ＳＳＤ等の不揮発性半導体記憶デバイスが、各記憶領域の消去回数が平滑化されるようにデータの格納位置を制御することが開示されている。さらに特許文献１では、ＳＳＤを複数搭載したストレージ装置において、ＳＳＤ間の消去回数も平滑化するために、残寿命の短いＳＳＤと残寿命の長いＳＳＤとで、格納データを交換することで消去回数を平滑化すること、また残寿命は、残消去回数の減少速度に基づいて算出される値であることが、開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１３／０２０５０７０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に開示の装置は、消去回数（またはライト数）が等しければ各記憶デバイスの残寿命が同じ、という前提で作られている。この前提が成り立つ場合には、特許文献１に記載の方法により、特定の記憶デバイスだけが早い段階で使用できなくなるということはなくなる。そしてその結果、ストレージ装置に搭載された各記憶媒体は、あらかじめ想定された期間（耐用年数）を通して、使用可能な状態を維持できる。【０００７】
ただし実際には各記憶媒体の品質は均一ではなく、各記憶媒体の消去回数がほぼ等しくなるように制御しても、ある記憶媒体はまだアクセス可能な状態にある（寿命に達していない）が、別の記憶媒体はアクセス不可能な状態（寿命に達している）にある、という事態が発生し得る。そのため実際には、消去回数のみを制御していると、各記憶媒体を耐用年数まで使用し続けることは難しい。
【課題を解決するための手段】
【０００８】
本発明の一観点に係るストレージシステムは、ストレージコントローラと複数の記憶デバイスを有する。各記憶デバイスは、エラービット数（リード時に発生した、コレクタブルエラーの数）に基づいて劣化度を算出して、ストレージコントローラに送信する。ストレージコントローラは、受信した各記憶デバイスの劣化度に基づいて各ＲＡＩＤグループの寿命を算出することにより、目標耐用年数（ターゲット寿命）を待たずに寿命を迎えると予測されるＲＡＩＤグループを特定し、特定されたＲＡＩＤグループに格納されているデータを、別のＲＡＩＤグループに移動する。
【発明の効果】
【０００９】
本発明によれば、各記憶媒体の寿命を平滑化でき、耐用年数までの使用を保証することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の実施例に係る計算機システムのハードウェア構成図である。
【図２】ＦＭＰＫの構成図である。
【図３】ＲＡＩＤグループの説明図である。
【図４】仮想ボリュームとＲＡＩＤグループ、プールの関係を表す図である。
【図５】ストレージコントローラのメモリに格納されるプログラム及び管理情報の内容を表す図である。
【図６】仮想ボリューム管理テーブルの構成を説明する図である。
【図７】プール管理テーブルの構成を説明する図である。
【図８】ＲＡＩＤグループ管理テーブルの構成を説明する図である。
【図９】ＦＭＰＫコントローラのメモリに格納されるプログラム及び管理情報の内容を表す図である。
【図１０】論理物理変換テーブルの構成を説明する図である。
【図１１】ブロック管理テーブルの構成を説明する図である。
【図１２】ＷＲ後間隔とエラービット数との関係を説明する図である。
【図１３】エラービット数閾値管理テーブルの構成を説明する図である。
【図１４】検査処理のフローチャートである。
【図１５】ライト処理のフローチャートである。
【図１６】寿命予測処理のフローチャートである。
【図１７】ＲＡＩＤグループ稼働情報取得処理のフローチャートである。
【図１８】稼働情報集計処理のフローチャートである。
【図１９】ＲＡＩＤグループ寿命予測処理のフローチャートである。
【図２０】チャンク移動量計算処理のフローチャートである。
【図２１】ＲＡＩＤグループ間チャンク移動処理のフローチャートである。
【図２２】チャンク移動処理のフローチャートである。
【図２３】ライトデータ量と寿命比率との関係の説明図である。
【図２４】ＲＡＩＤグループの使用時間とライト量の関係の説明図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施例について、図面を用いて説明する。なお、以下に説明する実施例は特許請求の範囲に係る発明を限定するものではなく、また実施例の中で説明されている諸要素及びその組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１２】
また、以後の説明では「ａａａテーブル」等の表現にて本発明の情報を説明する場合があるが、これら情報は、テーブル等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」等について「ａａａ情報」と呼ぶことがある。また、「ｂｂｂ名」等の表現にて本発明の「ｂｂｂ」を識別するための情報を説明する場合があるが、これらの識別するための情報は、名前に限られず、識別子や識別番号、アドレスなど、「ｂｂｂ」が特定できる情報であればよい。
【００１３】
また、以後の説明では「プログラム」を主語として説明を行う場合があるが、実際には、プログラムはプロセッサ（ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、プロセッサが定められた処理をメモリ及びＩ／Ｆ（インタフェース）を用いながら行う。ただし説明が冗長になることを防ぐため、プログラムを主語として説明することがある。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各装置にインストールされてもよい。記憶メディアとしては、例えば、ＩＣカード、ＳＤカード、ＤＶＤ等であってもよい。
【００１４】
図１は、実施例に係るストレージ装置（ストレージシステム）１の構成を示す。ストレージ装置１は、ストレージコントローラ１０と、ストレージコントローラ１０に接続された複数のフラッシュメモリパッケージ（ＦＭＰＫ）２０を有する。
【００１５】
ＦＭＰＫ２０は、ホスト２などの上位装置からのライトデータを格納するための記憶デバイスで、フラッシュメモリ等の不揮発性半導体メモリを記憶媒体として採用した記憶デバイスである。ＦＭＰＫ２０の内部構成は後述する。ＦＭＰＫ２０は一例として、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格に従う伝送線（ＳＡＳリンク）によって、ストレージコントローラ１０と接続される。
【００１６】
また、図１に示されているように、本実施例のストレージ装置１にはＦＭＰＫ２０の他、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２５も搭載可能である。ＨＤＤ２５は、磁気ディスクを記録媒体とする記憶デバイスである。ＨＤＤ２５もＦＭＰＫ２０と同様、ストレージコントローラ１０に接続される。またＦＭＰＫ２０と同様、ＨＤＤ２５もＳＡＳリンクによってストレージコントローラ１０に接続される。ただし以下では、本実施例のストレージ装置１には、記憶デバイスとしてＦＭＰＫ２０のみが接続されている構成について中心に説明する。
【００１７】
ストレージコントローラ１０には、１以上のホスト２が接続される。またストレージコントローラ１０には、管理ホスト５が接続される。ストレージコントローラ１０とホスト２とは、一例としてファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）３を介して接続される。ストレージコントローラ１０と管理ホスト５とは、一例としてイーサネットを用いて形成されるＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）６を介して接続される。
【００１８】
ストレージコントローラ１０は少なくとも、プロセッサ（ＣＰＵ）１１、ホストインタフェース（図中では「ホストＩ／Ｆ」と表記）１２、ディスクインタフェース（図中では「ディスクＩ／Ｆ」と表記）１３、メモリ１４、管理用Ｉ／Ｆ１５を有する。そしてプロセッサ１１、ホストＩＦ１２、ディスクＩＦ１３、メモリ１４、管理用Ｉ／Ｆ１５は、内部スイッチ（内部ＳＷ）１６を介して相互接続されている。図１ではこれらの構成要素がそれぞれ１つだけ示されているが、高性能化及び高可用性の確保のため、これらの構成要素のそれぞれがストレージコントローラ１０内に複数搭載されていてもよい。また内部ＳＷ１６ではなく、共通バスを介して各構成要素が相互接続された構成にしてもよい。
【００１９】
ディスクＩ／Ｆ１３は少なくとも、インタフェースコントローラと転送回路を有する。インタフェースコントローラは、ＦＭＰＫ２０の用いているプロトコル（一例ではＳＡＳ）をストレージコントローラ１０内部で用いられている通信プロトコル（一例としてＰＣＩ−Ｅｘｐｒｅｓｓ）に変換するためのコンポーネントである。転送回路は、ストレージコントローラ１０が、ＦＭＰＫ２０に対してデータの転送（リード、ライト）を行う際に用いられる。
【００２０】
ホストＩ／Ｆ１２は、ディスクＩ／Ｆ１３と同様に、少なくともインタフェースコントローラと転送回路を有する。ホストＩ／Ｆ１２が有するインタフェースコントローラは、ホスト２とストレージコントローラ１０間のデータ転送経路で用いられている通信プロトコル（たとえばファイバチャネル）と、ストレージコントローラ１０内部で用いられている通信プロトコルを変換するためのものである。
【００２１】
プロセッサ１１は、ストレージ装置１の各種制御を行う。メモリ１４は、プロセッサ１１が実行するプログラムや、プロセッサ１１が使用するストレージ装置１の各種管理情報を記憶するために用いられる。またメモリ１４は、ＦＭＰＫ２０に対するＩ／Ｏ対象データを一時的に記憶するためにも用いられる。以下、ＦＭＰＫ２０に対するＩ／Ｏ対象データを一時的に記憶するために用いられる、メモリ１４中の記憶領域を、「キャッシュ」と呼ぶ。メモリ１４はＤＲＡＭ、ＳＲＡＭ等の揮発性記憶媒体で構成されるが、別の実施形態として、不揮発性メモリを用いてメモリ１４を構成してもよい。
【００２２】
図２を用いて、ＦＭＰＫ２０の構成について説明する。ＦＭＰＫ２０は、ＦＭＰＫコントローラ２００と複数のＦＭチップ２１０から構成される。ＦＭＰＫコントローラ２００は、プロセッサ（ＣＰＵ）２０１、ＦＭＰＫ  Ｉ／Ｆ２０２、ＦＭチップＩ／Ｆ２０３、メモリ２０４を有し、これらは内部接続スイッチ（内部接続ＳＷ）２０８を介して相互接続されている。
【００２３】
ＦＭＰＫ  Ｉ／Ｆ２０２は、ＦＭＰＫ２０とストレージコントローラ１０間の通信を行うためのインタフェースコントローラである。ＦＭＰＫ  Ｉ／Ｆ２０２は、伝送線（ＳＡＳリンク）を介してストレージコントローラ１０のディスクＩ／Ｆ１３に接続される。一方ＦＭチップＩ／Ｆ２０３は、ＦＭＰＫコントローラ２００とＦＭチップ２１０間の通信を行うためのインタフェースコントローラである。
【００２４】
またＦＭチップＩ／Ｆ２０３は、ＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）の生成、ＥＣＣを用いたエラー検出及びエラー訂正を行う機能を有している。ＦＭＰＫコントローラ２００からＦＭチップ２１０にデータが送信（書き込み）される際、ＦＭチップＩ／Ｆ２０３はＥＣＣを生成する。そしてＦＭチップＩ／Ｆ２０３はデータに対し、生成されたＥＣＣを付加し、ＦＭチップ２１０にはＥＣＣの付加されたデータを書き込む。ＦＭＰＫコントローラ２００がＦＭチップ２１０からデータを読み出す際、ＦＭチップ２１０からはＥＣＣの付加されたデータが読み出され、ＦＭチップＩ／Ｆ２０３にはこのＥＣＣの付加されたデータが到来する。ＦＭチップＩ／Ｆ２０３はＥＣＣを用いてデータエラーチェック（データからＥＣＣを生成し、この生成されたＥＣＣと、データに付加されているＥＣＣが一致するかチェック）を行い、データエラーが検出された場合、ＥＣＣを用いてデータ訂正を行う。またＦＭチップＩ／Ｆ２０３はデータエラーが発生した場合、データエラーの発生数をＣＰＵ２０１に通知する機能も備えている。
【００２５】
ＣＰＵ２０１は、ストレージコントローラ１０から到来する各種コマンドに係る処理等を行う。メモリ２０４は、プロセッサ２０１が実行するプログラムや、各種管理情報が記憶される。メモリ２０４には、ＤＲＡＭ等の揮発性メモリが用いられる。ただしメモリ２０４に不揮発性メモリが使用されても良い。
【００２６】
ＦＭチップ２１０は、たとえばＮＡＮＤ型フラッシュメモリ等の不揮発性半導体メモリチップである。フラッシュメモリは周知のとおり、ページ単位でデータの読み出し・書き込みが行われ、またデータ消去は、複数ページの集合であるブロック単位で行われる。そして一度書き込みが行われたページは上書きが出来ず、一度書き込みが行われたページに対して再度書き込みを行うためには、当該ページを含むブロック全体を消去する必要がある。
【００２７】
続いて、本実施例に係るストレージ装置１で説明される処理を実行するために必要となる、プログラム及び管理情報について説明する。ストレージコントローラ１０のメモリ１４には、図５に示されるように、少なくとも寿命予測プログラム１０１、ストレージライトＩ／Ｏプログラム１０２、仮想ボリューム管理テーブル５００、プール管理テーブル５５０、ＲＡＩＤグループ管理テーブル６５０が存在する。以下で、これらのプログラム及び管理テーブルの内容について説明していく。
【００２８】
その前に、ストレージ装置１で用いられる記憶領域の概念について説明する。ストレージ装置１は、複数のＦＭＰＫ２０を１つのＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ／Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）グループとして管理する。そしてＲＡＩＤグループ内で１つ（あるいは２つ）のＦＭＰＫ２０に障害が発生してデータアクセスできなくなった場合に、残りのＦＭＰＫ２０内のデータを用いて、障害が発生したＦＭＰＫ２０に格納されていたデータを復旧できるようにしている。
【００２９】
ＲＡＩＤグループ内の記憶領域について、図３を用いて説明する。図３において、ＦＭＰＫ＃０（２０−０）〜ＦＭＰＫ＃３（２０−３）はそれぞれ、ＦＭＰＫ２０がストレージコントローラ１０に提供している記憶空間を表している。ストレージコントローラ１０は、複数（図３の例では４つ）のＦＭＰＫ２０から１つのＲＡＩＤグループ３０を構成し、ＲＡＩＤグループ３０に所属する各ＦＭＰＫ（ＦＭＰＫ＃０（２０−０）〜ＦＭＰＫ＃３（２０−３））上の記憶空間を、ストライプブロック（３０１）と呼ぶ複数の固定サイズの記憶領域に分割して管理している。
【００３０】
また図３では、ＲＡＩＤグループ３０のＲＡＩＤレベル（ＲＡＩＤ技術におけるデータ冗長化方式を表すもので、一般的にはＲＡＩＤ１〜ＲＡＩＤ６のＲＡＩＤレベルがある）がＲＡＩＤ５である場合の例を表している。図３において、ＲＡＩＤグループ２０内の、「０」、「１」、「Ｐ」などのボックスがストライプブロックを表しており、ストライプブロックのサイズはたとえば、６４ＫＢ、２５６ＫＢ、５１２ＫＢなどである。また、各ストライプブロックに付されている、「１」等の番号のことを、「ストライプブロック番号」と呼ぶ。
【００３１】
図３で、ストライプブロックのうち、「Ｐ」と記載されているストライプブロックは、冗長データ（パリティ）の格納されるストライプブロックであり、これを「パリティストライプ」と呼ぶ。一方、数字（０、１等）が記載されているストライプブロックは、ホスト２等の上位装置から書き込まれるデータ（冗長データではないデータ）が格納されるストライプブロックである。このストライプブロックのことは、「データストライプ」と呼ばれる。
【００３２】
図３に示されたＲＡＩＤグループ３０では、たとえばＦＭＰＫ＃３（２０−３）の先頭に位置するストライプブロックはパリティストライプ３０１−３である。そしてストレージコントローラ１０がこのパリティストライプ３０１−３に格納される冗長データを作成する際、各ＦＭＰＫ２０（ＦＭＰＫ＃０（２０−０）〜ＦＭＰＫ＃２（２０−２））の先頭に位置するデータストライプ（ストライプブロック３０１−０、３０１−１、３０１−２）に格納されるデータに対して所定の演算（たとえば排他的論理和（ＸＯＲ）等）を施すことによって、冗長データを生成する。
【００３３】
以下、パリティストライプと、当該パリティストライプに格納される冗長データを生成するために用いられるデータストライプのセット（たとえば図３中の要素３００）のことを、「ストライプライン」と呼ぶ。本実施例に係るストレージ装置１の場合、図３に示されているストライプライン３００のように、１つのストライプラインに属する各ストライプブロックは、ＦＭＰＫ２０−０〜２０−３の記憶空間の同じ位置（アドレス）に存在するという規則で、ストライプラインが構成される。
【００３４】
さらにストレージコントローラ１０は、ＲＡＩＤグループ内に連続配置される複数のストライプラインを「チャンク」と呼ばれる管理単位で管理する。図３に示されているように、１つのチャンク３１は、複数のストライプラインを有する。ただし１つのチャンク３１が１つのストライプラインのみを有する構成でもよい。
【００３５】
またストレージコントローラ１０は、ホスト２にはＲＡＩＤグループの記憶領域とは異なる、１以上の仮想的な記憶空間を提供する。この仮想的な記憶空間を「仮想ボリューム」と呼ぶ。仮想ボリュームの記憶空間も、所定サイズの領域ごとに分割管理される。この所定サイズの領域は「仮想チャンク」と呼ばれる。仮想チャンクとは、ＦＭＰＫ２０の記憶領域の割り当て単位である。
【００３６】
１つの仮想チャンクには１つのチャンクがマップされ、ホスト２から仮想チャンクに対するデータライトがあった時、マップされたチャンクにデータが格納される。ただし、仮想チャンクにチャンクがマップされる時、チャンク内のデータストライプのみがマップされる。そのため、仮想チャンクのサイズは、チャンクに含まれる全データストライプの合計サイズに等しい。ストレージコントローラ１０は、後述する仮想ボリューム管理テーブル５００に、仮想チャンクとチャンクのマッピングを記録することで、仮想チャンクに割り当てられる記憶領域（チャンク）を管理している。
【００３７】
仮想ボリュームが定義された直後は、仮想ボリュームの各仮想チャンクには、チャンクがマップされていない。ストレージコントローラ１０は、ホスト２から仮想チャンク上の領域に対するライト要求を受信した時にはじめて、当該領域に対してライトされたデータの書き込まれるべき、ＦＭＰＫ２０上の記憶領域（チャンク）を決定する。ここで決定されるチャンクは、まだどの仮想チャンクにも割り当てられていないチャンク（未使用チャンク）のなかから１つのチャンクが決定される。
【００３８】
本実施例に係るストレージ装置１では、ある仮想ボリュームの仮想チャンクに割り当て可能なチャンクには、所定の制約がある。仮想チャンクに割り当て可能な記憶領域（チャンク）を有する１または複数のＲＡＩＤグループは、プールという管理単位で管理される。図４に、プールとＲＡＩＤグループ３０、仮想ボリューム４０の関係を示す。ストレージ装置１は１以上のプールを管理可能であり、ストレージ装置１が複数のプールを管理する場合、仮想チャンクに割り当て可能な記憶領域を有する１または複数のＲＡＩＤグループは、複数のプールのうちいずれか１つのプールで管理される。以下、あるプール（仮にプールＸと呼ぶ）で管理されるＲＡＩＤグループ（及びこのＲＡＩＤグループ内のチャンク）のことを、「プールＸに属するＲＡＩＤグループ（及びチャンク）」と呼ぶ。また、各仮想ボリューム（の仮想チャンク）にチャンクが割り当てられる場合、割り当て可能なチャンクが属するプールは、あらかじめ仮想ボリュームごとに１つに定められている。
【００３９】
図６を用いて仮想ボリューム管理テーブル５００の内容を説明する。先にも述べたが、仮想ボリューム管理テーブル５００は、ストレージ装置１内に定義された各仮想ボリューム内の仮想チャンクと、チャンクとのマッピング関係を管理するためのテーブルである。仮想ボリューム管理テーブル５００は仮想ボリューム＃５０１、プール＃５０２、仮想ボリュームＬＢＡ範囲５０３、仮想チャンク番号５０４、ＲＡＩＤグループ番号５０５、チャンク番号５０６のカラムを有する。仮想ボリューム管理テーブル５００の各行（レコード）は、仮想ボリューム＃５０１及び仮想チャンク番号５０４により特定される仮想チャンクに対し、ＲＡＩＤグループ番号５０５及びチャンク番号５０６で特定されるチャンクがマッピングされていることを表す。なお、以降では、仮想ボリューム管理テーブル５００に限らず、各種情報を管理するテーブルの各行のことを「レコード」と呼ぶ。
【００４０】
また初期状態では、仮想チャンクにチャンクはマッピングされていない。仮想チャンクに対するライト要求をホスト２から受け付けた時点で、仮想チャンクにチャンクがマッピングされる。仮想チャンク番号５０４で特定される仮想チャンクに対してチャンクがマッピングされていない場合、当該レコードのＲＡＩＤグループ番号５０５及びチャンク番号５０６には無効値（ＮＵＬＬ）が格納される。
【００４１】
またプール＃５０２は、仮想ボリュームに割り当て可能なチャンクの属するプールの識別番号が格納される。つまり、仮想ボリューム＃５０１で特定される仮想ボリュームの仮想チャンクに割り当て可能なチャンクは原則として、プール＃５０２に属するチャンク（またはＲＡＩＤグループ）に限定される。また仮想ボリュームＬＢＡ範囲５０３は、仮想チャンク番号５０４で特定される仮想チャンクが、仮想ボリューム上のどの範囲に相当する領域であるかを表す情報である。一例として、図６の行（レコード）５００−１では、仮想ボリュームＬＢＡ範囲５０３は“０ｘ０５００〜０ｘ０９ＦＦ”、仮想チャンク番号５０４は“２”であるから、仮想ボリューム＃０の仮想チャンク２は、仮想ボリューム＃０のＬＢＡが０ｘ０５００〜０ｘ０９ＦＦの領域に相当することを表している。
【００４２】
プールは、プール管理テーブル５５０によって管理される。図７を用いてプール管理テーブル５５０の内容を説明する。プール管理テーブル５５０は、プール＃５５１、ＲＧ＃５５２、チャンク＃５５３、ＲＡＩＤグループＬＢＡ５５４、ステータス５５５、ＷＲ要求量５５６のカラムを有する。プール管理テーブル５５０において、各レコードはチャンクについての情報を格納するためのものである。各レコードのＲＧ＃５５２は、チャンクの属しているＲＡＩＤグループのＲＡＩＤグループ番号を表し、プール＃５５１は、チャンクの属しているプールのプール番号を表す。さらにプール＃５５１は、ＲＧ＃５５２で特定されるＲＡＩＤグループの属するプール番号を表している。
【００４３】
また、各レコードのＲＡＩＤグループＬＢＡ５５４は、チャンクがＲＡＩＤグループ上のどの範囲に位置づけられているかを表す情報である。ステータス５５５は、チャンクが仮想チャンクに割り当てられているか（マップされているか）否かを表す情報である。ステータス５５５に「割当済」が格納されている場合、チャンクが仮想チャンクに割り当てられていることを表す。逆にステータス５５５に「未割当」が格納されている場合、チャンクが仮想チャンクに割り当てられていないことを意味する。ＷＲ要求量５５６は、これまでにチャンクに対して、ストレージコントローラ１０がライトしたデータ量の総量を表す。なお、ストレージコントローラ１０がチャンクにデータをライトする際、パリティストライプにもライトする。そのためＷＲ要求量５５６には、パリティストライプに対してライトした情報（パリティ）の量も含まれる。
【００４４】
先に述べたが、本実施例に係るストレージ装置１において、仮想ボリュームの仮想チャンクにマッピングされるチャンク（及びそのチャンクを有するＲＡＩＤグループ）は、仮想ボリュームの登録されているプールに属していなければならない。ただし本実施例に係るストレージ装置１は、プールに属していないＲＡＩＤグループを有することも可能である。このＲＡＩＤグループを、スペア（Ｓｐａｒｅ）ＲＡＩＤグループと呼ぶ。
【００４５】
ストレージ装置１は、スペアＲＡＩＤグループもプール管理テーブル５５０を用いて管理する。本実施例に係るストレージ装置１では、スペアＲＡＩＤグループは便宜上、プール＃５５１がＮＵＬＬ（無効値）のプールに所属させる形で、管理される。図７では、プール＃５５１がＮＵＬＬ（無効値）のプールに、ＲＧ＃５５２がＫのＲＡＩＤグループが存在する。このＲＡＩＤグループが、スペアＲＡＩＤグループである。
【００４６】
スペアＲＡＩＤグループのチャンクは、後述するチャンク移動処理が実行された結果、用いられることがある。詳細は後述するが、チャンク移動処理により、適切なチャンクの移動先がプール内に存在しない場合、例外的な措置として、チャンク（に格納されたデータ）が、スペアＲＡＩＤグループ内のチャンクに移動されることがある。
【００４７】
本実施例に係るストレージ装置１では、ＦＭＰＫ２０のエラー発生数やライト要求量を収集し、それらを用いてＦＭＰＫ２０及びＲＡＩＤグループの寿命管理を行っている。そのため、ＦＭＰＫ２０から収集した情報などを管理するテーブルを有する。そのテーブルをＲＡＩＤグループ管理テーブル６５０と呼ぶ。図８を用いてＲＡＩＤグループ管理テーブル６５０の内容を説明する。
【００４８】
ＲＡＩＤグループ管理テーブル６５０は、ＲＧ＃６５１、ドライブ番号６５２、ＲＡＩＤグループＬＢＡ６５３、平均寿命比率６５４、ライト積算量６５５（ＷＲ積算量６５５と表記されることもある）、ターゲット寿命６５６、残寿命６５７、使用開始日６５８、ＲＡＩＤグループ残寿命６５９、ＲＡＩＤグループ使用年数６６０のカラムを有する。ＲＧ＃６５１にはＲＡＩＤグループのＲＡＩＤグループ番号が格納され、ドライブ番号６５２には、ＲＧ＃６５１で特定されるＲＡＩＤグループに属するＦＭＰＫ２０の識別子が格納される。ＲＡＩＤグループＬＢＡ６５３には、ドライブ番号６５２で特定されるＦＭＰＫ２０の各領域が、ＲＡＩＤグループ上のどの領域に位置づけられるかを表す情報である。
【００４９】
平均寿命比率６５４、ＷＲ積算量６５５、ターゲット寿命６５６、残寿命６５７、使用開始日６５８、ＲＡＩＤグループ残寿命６５９、そしてＲＡＩＤグループ使用年数６６０は、「寿命情報」と総称される情報である。ストレージ装置１は、これらの寿命情報を用いて寿命管理を行う。
【００５０】
平均寿命比率６５４は、ＦＭＰＫ２０で発生したエラー（コレクタブルエラー）発生数をもとに算出される値であり、詳細は後述する。この情報は、ストレージコントローラ１０がＦＭＰＫ２０から取得する。ＷＲ積算量６５５は、これまでにＦＭＰＫ２０の記憶領域（ＦＭチップ２１０の物理ページ）に対してライトされたデータの総量である。この情報も、ストレージコントローラ１０がＦＭＰＫ２０から取得する。
【００５１】
ターゲット寿命６５６は、ＦＭＰＫ２０の目標耐用年数が格納される欄である。通常、各ＦＭＰＫ２０は、ＦＭＰＫ２０（あるいはストレージ装置１）の製造者によって、あらかじめ目標耐用年数（たとえば５年等の年数）が定められている。ストレージ装置１の管理者は、ＲＡＩＤグループを定義する際、ターゲット寿命６５６の欄に、ＦＭＰＫ２０に定められている目標耐用年数を格納する。ただし、ストレージ装置１が自動的に目標耐用年数をターゲット寿命６５６に設定するようにしてもよい。
【００５２】
残寿命６５７は、ＦＭＰＫ２０の残寿命（予測値）を格納するための欄である。ストレージコントローラ１０が平均寿命比率６５４やＷＲ積算量６５５をもとに、この残寿命（予測値）を算出し、残寿命６５７に格納する。残寿命（予測値）を算出する方法等については、後述する。
【００５３】
使用開始日６５８は、ＦＭＰＫ２０が使用され始めた日（年月日）が格納される欄である。本実施例のストレージ装置１は、ＦＭＰＫ２０がストレージ装置１にインストールされた時点で、使用が開始されたと判断する。そのためＦＭＰＫ２０がストレージ装置１にインストールされた時点の日付が、使用開始日６５８に格納される。ＲＡＩＤグループ残寿命６５９は、ストレージコントローラ１０が残寿命６５７を元に算出する値である。詳細は後述する。ＲＡＩＤグループ使用年数６６０は、ストレージコントローラ１０が使用開始日６５８を元に算出する値である。詳細は後述する。
【００５４】
ＲＡＩＤグループ管理テーブル６５０には、上で説明した以外の情報が含まれていてもよい。たとえばＲＡＩＤグループのＲＡＩＤ構成に関する情報（ＲＡＩＤグループを構成するＦＭＰＫ２０の台数、ＲＡＩＤレベルなど）が格納されていてもよい。また、本実施例では説明の簡単化のため、ＲＡＩＤグループを構成するＦＭＰＫ２０の台数及びＲＡＩＤレベルが、全ＲＡＩＤグループで同一とする。
【００５５】
次にＦＭＰＫ２０で管理される情報及びＦＭＰＫ２０が実行するプログラムについて、図９を用いて説明する。ＦＭＰＫ２０のメモリ２０４には少なくとも、稼働情報集計プログラム２４１、検査プログラム２４２の、２種類のプログラムが格納される。また論理物理変換テーブル１１００、ブロック管理テーブル１１５０、閾値エラービット数管理テーブル１２００、ＷＲ量管理テーブル１２５０のテーブルが格納される。
【００５６】
論理物理変換テーブル１１００は、ＦＭＰＫ２０の管理する論理ページと物理ページのマッピングを管理するためのテーブルである。ＦＭＰＫ２０は記憶媒体にフラッシュメモリを採用している。よく知られているように、フラッシュメモリ（ＦＭチップ２１０）の最小アクセス（リード、ライト）単位はページ（物理ページ）である。物理ページのサイズはたとえば８ＫＢである。そのためＦＭＰＫ２０は、ＦＭＰＫ２０がストレージコントローラ１０に提供している記憶空間を、物理ページと同サイズの領域に分割して管理している。この物理ページと同サイズの領域のことを、「論理ページ」と呼ぶ。そしてＦＭＰＫ２０は、１つの論理ページに１つの物理ページをマッピングさせる。
【００５７】
本実施例に係るＦＭＰＫ２０は、複数のＦＭチップ２１０を有する。各ＦＭチップ２１０は、データ消去単位である物理ブロックを複数有している。各物理ブロックは複数の物理ページを有する。また本実施例に係るＦＭＰＫ２０は、全ＦＭチップ２１０内の各物理ブロックに対し、ＦＭＰＫ２０内で一意な識別番号を付して管理しており、この識別番号はブロック番号（ブロック＃）と呼ばれる。また、物理ブロック内の各ページには、物理ブロック内で一意な番号を付して管理しており、この番号はページ番号（または物理ページ＃）と呼ばれる。ブロック＃と物理ページ＃が特定されることにより、ＦＭＰＫ２０内の物理ページが一意に特定される。
【００５８】
また、本実施例に係るＦＭＰＫ２０は、ＦＭＰＫ２０内の各論理ページに、ＦＭＰＫ内で一意な識別番号を付して管理している。この識別番号は論理ページ番号（論理ページ＃）と呼ばれる。論理物理変換テーブル１１００には、ある論理ページにマッピングされる物理ページの、ブロック＃と物理ページ＃の情報が、論理ページごとに格納されている。
【００５９】
論理物理変換テーブル１１００は、図１０に示されているように、ＦＭＰＫ  ＬＢＡ１１０１、論理ページ＃１１０２、ステータス１１０３、ブロック＃１１０４＃、物理ページ＃１１０５のカラムを有する。論理物理変換テーブル１１００の各レコードには、論理ページ＃１１０２で特定される論理ページについての情報が格納される。ＦＭＰＫ  ＬＢＡ１１０１には、論理ページに対応する、ＦＭＰＫ２０がストレージコントローラ１０に提供している記憶空間上のＬＢＡ（の範囲）が格納される。ＦＭＰＫ２０がストレージコントローラ１０からアクセス要求を受信すると、ＦＭＰＫ２０は、ＦＭＰＫ  ＬＢＡ１１０１と論理ページ＃１１０２を用いて、アクセス要求に含まれているＬＢＡを、論理ページ＃に変換することができる。そして、ブロック＃１１０４、物理ページ＃１１０５にはそれぞれ、論理ページにマッピングされる物理ページを特定するための情報（つまりブロック＃と物理ページ＃）が格納される。
【００６０】
ステータス１１０３は、物理ページが論理ページにマッピングされているか否かを表す情報が格納される。ＦＭＰＫ２０の論理ページには、初期状態では物理ページはマッピングされていない。ストレージコントローラ１０からライト要求を受信した時点で、ライト要求でライト対象となる論理ページに対して物理ページがマッピングされる。ステータス１１０３に「割当」が格納されている場合、物理ページが論理ページにマッピングされていることを表す。逆にステータス１１０３に「未割当」が格納されている場合、物理ページが論理ページにマッピングされていないことを意味する（この時、論理ページに対応するブロック＃１１０４と物理ページ＃１１０５にはＮＵＬＬ（無効値）が格納される）。
【００６１】
良く知られているように、一旦書き込みが行われた物理ページは上書きが不可能である（物理ページの上書きをしたい場合、物理ページの属する物理ブロック全体を一度消去する必要がある）。そのためＦＭＰＫ２０では、ある論理ページに対する更新（上書き）要求をストレージコントローラ１０から受信すると、更新データを、更新前データの書き込まれている物理ページ（旧物理ページと呼ぶ）とは異なる物理ページ（新物理ページと呼ぶ）に格納する。そして更新対象となる論理ページに対応する、ブロック＃１１０４と物理ページ＃１１０５に、新物理ページのブロック＃、物理ページ＃を格納する。
【００６２】
一方ブロック管理テーブル１１５０は、物理ブロック／物理ページの状態を管理するためのテーブルである。ブロック管理テーブル１１５０について、図１１を用いて説明する。ブロック管理テーブル１１５０内の各レコードには、ＦＭＰＫ２０内の物理ページについての情報が格納される。ブロック管理テーブル１１５０は、ブロック＃１１５１、物理ページ＃１１５２、ステータス１１５３、エラービット数１１５４、最終ＷＲ時刻１１５５、ＷＲ後経過時間１１５６、寿命比率１１５７のカラムを有する。
【００６３】
ブロック＃１１５１、物理ページ＃１１５２、ステータス１１５３はそれぞれ、論理物理変換テーブル１１００の、ブロック＃１１０４、物理ページ＃１１０５、ステータス１１０３と同じ情報である。つまりある物理ページが論理ページに割り当てられると、割り当てられた物理ページのブロック＃、物理ページ＃が、論理物理変換テーブル１１００のブロック＃１１０４及び物理ページ＃１１０５に格納され、ステータス１１０３に「割当」が格納される。そして同時に、割り当てられた物理ページのステータス１１５３（ブロック管理テーブル１１０５内の）にも、「割当」が格納される。
【００６４】
エラービット数１１５４には、後述する検査プログラムが実行された時に発生したエラービット数が格納される。詳細は検査プログラムの説明の際に説明する。最終ＷＲ時刻１１５５は、物理ページに対してライト（あるいは消去）が行われた最新の時刻が格納される。またＷＲ後経過時間１１５６には、後述する検査プログラムが実行された時に、物理ページが最後にライト（または消去）されてからの経過時間が格納される。寿命比率１１５７には、後述する稼働情報集計プログラムが実行された時に算出される寿命比率が格納される。寿命比率については、以下で述べる。
【００６５】
続いて本実施例に係るストレージ装置１で寿命管理に用いられる指標である、寿命比率及び平均寿命比率について、図１２、図１３を用いて説明する。ＦＭＰＫ２０が物理ページにデータを格納する際、データからＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）を算出し、データとともにＥＣＣも物理ページに格納する。フラッシュメモリの特性として、物理ページへのデータの格納後、時間が経つにつれ、格納されたデータに含まれるエラーが増加する傾向がある。なお、ここでの「エラー」の意味を簡単に説明しておく。たとえばＦＭＰＫ２０がＦＭチップ上のある領域（１ビット領域とする）に“０”を格納したとしても、時間が経つにつれ、データ内容が“０”から“１”に変化してしまうことがある。本明細書ではこの現象を「エラーが発生した」と呼んでいる。また、エラーの発生した１ビット領域（またはエラーの発生した１ビット領域から読み出された１ビットのデータ）のことを「エラービット」と呼ぶ。エラーの発生する原因は、その領域が多数回書き替えられて劣化した、あるいはその領域の品質（格納されたデータ内容を維持する能力）が先天的に悪かった場合などがある。ただし物理ページに格納されるデータにはＥＣＣが付加されているため、データ読み出し時にエラーが含まれていても、読み出し対象領域に含まれているエラービットの数が所定数以下であれば、ＥＣＣを用いたデータ訂正が可能である。
【００６６】
訂正可能なビット数の上限は、付加されるＥＣＣの強度（エラー訂正能力）に依存する。物理ページに格納されたデータに、ＥＣＣによる訂正が可能なビット数の上限（以下、これを「訂正限界エラービット数」と呼ぶ）を超える数のエラービットが含まれるようになると、そのデータは読み出し不可能になる。ＦＭＰＫコントローラ２００は、ある物理ページに格納されたデータに、あらかじめ定められた閾値（この閾値のことを「エラービット数閾値」と呼ぶ。ただし、エラービット数閾値＜訂正限界エラービット数、の関係にある）以上のエラービットが含まれていた場合、その物理ページを含む物理ブロックの使用を停止する（その時点で、この物理ブロックに格納されていたデータは、ＦＭＰＫ２０のＣＰＵ２０１によって他の物理ブロックに移動される）。このようにすることで、データがＦＭＰＫ２０から読み出し不可能になる事態（アンコレクタブルエラーが発生する事態）を極力避けることができる。
【００６７】
また、物理ページに格納されたデータに含まれるエラービットの数は、ライト後の経過時間とともに増加する傾向がある。図１２に、ＦＭの記憶領域（たとえば物理ページ）から読み出されたデータに含まれるエラービット数と、ライト後経過時間との関係を表したグラフの一例を示す。図１２の曲線（ａ）は、ＦＭチップ（仮にチップＡと呼ぶ）の物理ページ（仮にページａと呼ぶ）に対してデータをライトして時間ｔが経過した後、ページａをリードした際に検出されたエラービットの数をプロットしたグラフの一例である。同様に曲線（ｂ）は、ＦＭチップ（仮にチップＢと呼ぶ）の物理ページ（仮にページｂと呼ぶ）に対してデータをライトして時間ｔが経過した後、ページｂをリードした際に検出されたエラービットの数をプロットしたグラフの一例である。グラフの横軸は、物理ページへのライト後の経過時間を表し、縦軸は物理ページのリードを行った際に検出されたエラービットの数（以下では、「エラービット検出数」と呼ぶ）を表す。
【００６８】
図１２から分かる通り、ページａ，ｂのいずれも、ライト後の経過時間が長くなるほど、リード時に検出されるエラービット数は単調増加する傾向がある。ただしページｂの場合、ライト後の経過時間がｔ１の時点でｅ個のエラービットが検出されているのに対し、ページａの場合にはライト後の経過時間がｔ２（ｔ１＜ｔ２）の時点でｅ個のエラービットが検出されている。この場合、ページｂのほうがページａよりもエラービット数の増加する速度が速いので、ページｂはページａよりも早い時期に、エラービット検出数が訂正限界エラービット数を超過する可能性が高い。図１２の場合には、ライト後経過時間がｔ３に達した時点で、ページｂのエラービット検出数は訂正限界エラービット数を超過している。そのため、ページｂの当該物理ページは早期に使用を停止することが望ましい。ただしページａは、図１２のグラフから分かる通り、ライト後の経過時間がかなり長くなっても、エラービット検出数が訂正限界エラービット数を超過する可能性は低い。したがってページａは、使用を継続していてもよい。
【００６９】
ここで仮に、エラービット数閾値をｅに設定していたとすると、ページａとｂはいずれも使用が停止される。つまりページａはまだ使用継続可能な状態にあるにもかかわらず使用が停止される。そのため、エラービット数閾値として単一の値を用いていると、まだ使用継続可能な状態にあるページも使用停止されることになり、望ましくない。そのため本実施例のＦＭＰＫ２０では、ライト後経過時間ごとにエラービット数閾値を定めている。そして物理ページ（を含む物理ブロック）を検査した際の使用停止要否の判定の際には、ＦＭＰＫ２０は当該ページのライト後経過時間から適切なエラービット数閾値を導出し、「エラービット検出数÷導出されたエラービット数閾値」を計算する。この値のことを「寿命比率」と呼ぶ。物理ページの寿命比率を計算した結果、寿命比率が１以上であった場合、ＦＭＰＫ２０は当該物理ページの使用を停止するべきと判断する。つまり、寿命比率はＦＭチップ（あるいは物理ページ）の劣化度合いを表す指標値であり、物理ページの寿命比率が大きいほど、その物理ページが劣化している（寿命に近い）ことを表している。
【００７０】
図１３は、エラービット数閾値管理テーブル１２００の内容を表している。エラービット数閾値管理テーブル１２００は、ＷＲ間隔１２０１、エラービット数閾値１２０２のカラムを有している。ＷＲ間隔１２０１は、物理ページのライト後の経過時間の範囲の情報が格納されるカラムである。そして、ライト後経過時間がＷＲ間隔１２０１に格納された範囲である物理ページのエラービット数閾値は、エラービット数閾値１２０２に格納された値であることを表している。ＦＭＰＫ２０は、物理ページの寿命比率の計算を行う際、エラービット数閾値管理テーブル１２００の各行のうち、ＷＲ間隔１２０１の値の範囲が、検査対象物理ページのライト後経過時間を含む行を検索する。そして検索された行のエラービット数閾値１２０２に格納された値を、エラービット数閾値として用いる。
【００７１】
なお本実施例では、エラービット数閾値管理テーブル１２００を用いてエラービット数閾値を決定する方法が説明されるが、これ以外の方法でエラービット数閾値が決定されてもよい。たとえばエラービット数閾値管理テーブル１２００のようなテーブルを用いる代わりに、ストレージコントローラ１０に、ライト後経過時間を入力するとエラービット数閾値を出力する関数を持たせるようにしてもよい。
【００７２】
以上が、ストレージコントローラ１０のメモリ１４、ＦＭＰＫコントローラ２００のメモリ２０４に格納される、主要な管理情報の説明である。以下では、ストレージコントローラ１０、ＦＭＰＫコントローラ２００で実行されるプログラムの処理の詳細を説明していく。
【００７３】
図１４は、検査プログラム２４２の処理フローである。検査プログラム２４２は、ＦＭＰＫ２０のＣＰＵ２０１により定期的に実行される。以下、検査プログラム２４２の実行する処理のことを「検査処理」と呼ぶ。検査プログラム２４２の実行が開始されると、ＦＭＰＫ２０内の全物理ページに対して、リード（検査読み込み）が行われる。
【００７４】
Ｓ２４２−１でＣＰＵ２０１は、未検査の物理ページを１つ選択し、選択された物理ページのデータリードを行う。リードの過程で、ＦＭチップＩ／Ｆ２０３はデータに付加されたＥＣＣを用いてデータエラーチェックを行う。データエラーが存在することが判明した場合、ＦＭチップＩ／Ｆ２０３はＥＣＣを用いたデータ訂正を試みる。データ訂正を試みた結果、データ訂正が成功する場合と失敗する場合がある。データ訂正が失敗した場合には、ＦＭチップＩ／Ｆ２０３からＣＰＵ２０１には、「アンコレクタブルエラー」が発生した旨が通知される。一方データ訂正が成功した場合には、ＦＭチップＩ／Ｆ２０３からＣＰＵ２０１には、「コレクタブルエラー」が発生した旨が通知される。また、コレクタブルエラーが発生した場合には、ＦＭチップＩ／Ｆ２０３からＣＰＵ２０１には、「コレクタブルエラー」が発生した旨の通知に加えて、データに含まれていたエラービットの数が報告される。
【００７５】
ＣＰＵ２０１にアンコレクタブルエラーが報告された場合（Ｓ２４２−２：Ｙｅｓ）、ＣＰＵ２０１は、ブロック管理テーブル１１５０のステータス１１５３を参照することで、リード対象の物理ページが論理ページに割り当てられているか判定する（Ｓ２４２−４）。リード対象の物理ページが論理ページに割り当てられている場合（Ｓ２４２−４：Ｙｅｓ）、ＣＰＵ２０１はリード対象の物理ページが割り当てられている論理ページの論理ページ番号から、ＦＭＰＫのＬＢＡを算出する。そして算出されたＬＢＡを、ストレージコントローラ１０に報告する（Ｓ２４２−５）。またＣＰＵ２０１は、リード対象の物理ページを含む物理ブロックのステータスを閉塞状態にする。具体的には、リード対象の物理ページを含む物理ブロック内の全物理ページについて、ステータス１１５３に「閉塞」を格納する。
【００７６】
ＣＰＵ２０１にアンコレクタブルエラーが報告されなかった場合（Ｓ２４２−２：Ｎｏ）、ＣＰＵ２０１はブロック管理テーブル１１５０のエラービット数１１５４に、ＦＭチップＩ／Ｆ２０３から報告されたエラービット数を加算する（Ｓ２４２−３）。また併せて、（現在時刻−最終ＷＲ時刻１１５５）を計算し（この計算された値は、ライト後経過時間である）、計算された値をＷＲ後経過時間１１５６に格納する。
【００７７】
ただしＳ２４２−３は、コレクタブルエラーが報告された場合に行われる処理である。コレクタブルエラーも報告されなかった場合（つまりエラーが発生しなかった場合）には、Ｓ２４２−３は行われない。
【００７８】
Ｓ２４２−３またはＳ２４２−６の後に、ＣＰＵ２０１は、全ての物理ページについてＳ２４２−１〜Ｓ２４２−６の処理が行われたか判定する（Ｓ２４２−７）。全ての物理ページについて処理が完了した場合には、ＣＰＵ２０１は検査処理を終了する。まだ処理が完了していない物理ページが残っている場合には、ＣＰＵ２０１はＳ２４２−１からの処理を繰り返す。
【００７９】
続いて、ストレージライトＩ／Ｏプログラム１０２により行われる処理（以下、この処理を「ライト処理」と呼ぶ）の流れを、図１５を用いて説明する。ストレージライトＩ／Ｏプログラム１０２は、ホスト２からライト要求を受信した時に、ＣＰＵ２０１により実行される。ストレージコントローラ１０がホスト２から受け付けるライト要求（ライトコマンド）には、ライト対象データの書き込み先を特定する情報として、仮想ボリューム番号（あるいはＬＵＮ［Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ］等の、ストレージコントローラ１０で仮想ボリューム番号を導出可能な情報）、仮想ボリュームのＬＢＡ、そしてライト対象データの長さ（ライトデータ長と呼ぶ）が含まれる。以下、図１５の説明において、仮想ボリューム番号、仮想ボリュームのＬＢＡ，ライトデータ長で特定される領域を「ライト対象領域」と呼ぶ。またライト対象領域の存在する仮想ボリュームのことを、ライト対象仮想ボリュームと呼ぶ。
【００８０】
ライトコマンドがストレージコントローラ１０に到来すると、ＣＰＵ１１は、ライトコマンドに含まれる仮想ボリューム番号、ＬＢＡ及びライトデータ長を用いて、ライト対象領域を含んでいる仮想チャンクの仮想チャンク番号、及びこの仮想チャンクにマッピングされているチャンクを特定する情報（ＲＡＩＤグループ番号及びチャンク番号）を導出する（Ｓ１０２−１）。具体的にはＣＰＵ１１は仮想ボリューム管理テーブル５００を参照し、仮想ボリューム＃５０１と仮想ボリュームＬＢＡ範囲５０３が、ライトコマンドで指定されているライト対象領域を含んでいる行を検索する。そして検索された行の仮想チャンク番号５０４が、ライト対象領域を含んでいる仮想チャンクの仮想チャンク番号である。また当該行のＲＡＩＤグループ番号５０５及びチャンク番号５０６が、ライト対象領域にマッピングされているチャンクの、ＲＡＩＤグループ番号及びチャンク番号である。なお、ここでは、ライト対象領域が１チャンクに収まる範囲の領域である場合について説明する。
【００８１】
ただしライト対象領域にチャンクが割り当てられていないこともあり、その場合Ｓ１０２−１で検索されるＲＡＩＤグループ番号５０５、チャンク番号５０６はＮＵＬＬである。ＲＡＩＤグループ番号５０５、チャンク番号５０６はＮＵＬＬであった場合、つまりライト対象領域にチャンクが割り当てられていない場合（Ｓ１０２−２：Ｙｅｓ）、ＣＰＵ１１は仮想ボリューム管理テーブル５００を参照することにより、ライト対象仮想ボリュームに割り当て可能なチャンクの属するプール＃５０２を特定する。続いてプール管理テーブル５５０を参照することで、ＣＰＵ１１は特定されたプール＃に属するＲＡＩＤグループを選出するとともに、選出されたＲＡＩＤグループ中のチャンクのうち、ステータス５５５が「未割当」のチャンクを１つ選出する（Ｓ１０２−３，Ｓ１０２−４）。
【００８２】
チャンクが選出されると、ＣＰＵ１１は選出されたチャンクの属するＲＡＩＤグループ番号（ＲＧ＃５５２）及びチャンク＃５５３をそれぞれ、仮想ボリューム管理テーブル５００のＲＡＩＤグループ番号５０５及びチャンク番号５０６に格納する（Ｓ１０２−５）。これにより、ライト対象領域を含んでいる仮想チャンクに、チャンクがマッピングされる。
【００８３】
Ｓ１０２−５の後（あるいはライト対象領域を含んでいる仮想チャンクに、すでにチャンクが割り当て済みであった場合にはＳ１０２−２の判定のあと）、Ｓ１０２−７が行われる。Ｓ１０２−７ではＣＰＵ１１は、ホスト２からライトデータを受領し、キャッシュに格納する。そしてパリティストライプに格納すべきパリティを作成する。パリティの作成は公知のＲＡＩＤ技術によって行われる。そしてライト対象領域にマッピングされているチャンク（Ｓ１０２−１で特定されたチャンク、あるいはＳ１０２−５でマッピングされたチャンク）のＷＲ要求量５５６（プール管理テーブル５５０で管理されている）に、ライトデータ長とライトデータに対応して作成されたパリティの長さを加算する。
【００８４】
続いてＣＰＵ１１は、ライト対象データの書き込み先となるＦＭＰＫ２０のＦＭＰＫ＃及びＦＭＰＫ２０内のＬＢＡを特定する（Ｓ１０２−８）。そしてＣＰＵ１１は、特定されたＦＭＰＫ２０のＬＢＡに対してライト要求を発行し、データの格納を行う（Ｓ１０２−９）。そしてＣＰＵ１１は、ホスト２にライト処理が終了した旨を応答し、処理を終了する。
【００８５】
なお、Ｓ１０２−８では、ライト対象データ（ホスト２から受信したデータ）の他、Ｓ１０２−７で作成したパリティの書き込み先となるＦＭＰＫ２０のＦＭＰＫ＃、及びＦＭＰＫ２０内のＬＢＡの特定も行われる。そしてＳ１０２−９でも同様に、ライト対象データに加えてパリティもＦＭＰＫ２０に格納される。またＳ１０２−８で行われる、ライト対象データ（及びパリティ）の書き込み先ＦＭＰＫ２０のＦＭＰＫ＃及びＦＭＰＫ２０内のＬＢＡの特定は、ＲＡＩＤ技術を採用しているストレージ装置で公知の処理であるので、詳細な説明は省略する。
【００８６】
また、上ではストレージライトＩ／Ｏプログラム１０２が、ホストからライト要求を受け付けると、ＦＭＰＫ２０への書き込みまでを実施した後に、ホストにライト処理が終了した旨を応答する例を説明した。ただしストレージライトＩ／Ｏプログラム１０２が、ホストからライト要求を受け付けた際には、キャッシュにライト対象データを格納した時点でホスト２に処理の終了を応答し、後で非同期に、複数のライト対象データをまとめてＦＭＰＫ２０に格納する処理を行ってもよい。
【００８７】
ストレージコントローラ１０からライト要求及びライトデータを受信したＦＭＰＫ２０は、データをＦＭチップ２１０に格納する。この処理は公知のＳＳＤなどで行われている処理と同様であるので、詳細な説明は省略する。またＦＭＰＫ２０は、ストレージコントローラ１０から送信されたライトデータの合計量を、メモリ２０４（あるいはＦＭチップ２１０等でもよい）に記憶している。そのためＦＭＰＫ２０は、ストレージコントローラ１０からライト要求を受信するたびに、ライト要求に含まれているライトデータ長を積算する処理を行う。
【００８８】
続いて図１６以降の図面を用いて、寿命予測プログラムの処理フローを説明する。図１６は寿命予測プログラムで実施される全体の流れを表している。以下、寿命予測プログラムが実行する処理を、「寿命予測処理」と呼ぶ。寿命予測プログラムは、定期的にＣＰＵ１１で実行される。
【００８９】
寿命予測プログラムの実行が開始されると、ＣＰＵ１１はストレージ装置１内の全ＲＡＩＤグループに対して、ＲＡＩＤグループ稼働情報取得処理（Ｓ１０１−１）とＲＡＩＤグループ寿命予測処理（Ｓ１０１−２）を実行する。ＲＡＩＤグループ稼働情報取得処理の流れについては、後で図１７を用いて説明する。またＲＡＩＤグループ寿命予測処理の流れについては、後で図１９を用いて説明する。
【００９０】
全ＲＡＩＤグループに対して寿命予測処理を実行した後、ＣＰＵ１１はＲＡＩＤグループ残寿命が目標耐用年数（ターゲット寿命）よりも短いＲＡＩＤグループがあるか判定する（Ｓ１０１−４）。この判定は、各ＲＡＩＤグループについて、ＲＡＩＤグループ管理テーブル６５０に格納されている情報を参照することで行う。具体的にはＣＰＵ１１は、ＲＡＩＤグループ使用年数６６０、ＲＡＩＤグループ残寿命６５９、ターゲット寿命６５６が、
（ＲＡＩＤグループ使用年数６６０＋ＲＡＩＤグループ残寿命６５９）＜ターゲット寿命６５６
の関係式を満たしているＲＡＩＤグループが存在するか判定する。この関係式を満たすＲＡＩＤグループは、ＲＡＩＤグループ残寿命が目標耐用年数よりも短いと判定される。なお、一般に１つのＲＡＩＤグループに属するＦＭＰＫ２０には同種のＦＭＰＫ２０が用いられるため、ＲＡＩＤグループに属する各ＦＭＰＫ２０のターゲット寿命６５６は同じである。そのためＦＭＰＫ２０のターゲット寿命６５６は、そのＦＭＰＫ２０の属するＲＡＩＤグループのターゲット寿命といえる。
【００９１】
ＲＡＩＤグループ残寿命が目標耐用年数よりも短いＲＡＩＤグループが存在した場合（Ｓ１０１−４：Ｙｅｓ）、ＣＰＵ１１はこれらのＲＡＩＤグループに対して、チャンク移動量計算処理（Ｓ１０１−５）、ＲＡＩＤグループ間チャンク移動処理（Ｓ１０１−６）を実行する。これらの処理の実行後、寿命予測処理は終了する。ＲＡＩＤグループ残寿命が目標耐用年数よりも短いＲＡＩＤグループが複数存在する場合には、ＣＰＵ１１はＲＡＩＤグループ残寿命が目標耐用年数よりも短い全てのＲＡＩＤグループに対してＳ１０１−５、Ｓ１０１−６の処理を実行する。
【００９２】
続いてＲＡＩＤグループ稼働情報取得処理の流れを、図１７を用いて説明する。
【００９３】
ＲＡＩＤグループ稼働情報取得処理が開始されると、ＣＰＵ１１はＲＡＩＤグループ内の全ＦＭＰＫ２０に対して、稼働情報集計コマンドを発行する（Ｓ１０１１−１）。稼働情報集計コマンドを受信したＦＭＰＫ２０は、ＦＭＰＫ２０の寿命比率及びライト積算量を計算し、ＣＰＵ１１に送信する。稼働情報集計コマンドを受信したＦＭＰＫ２０が実行する処理の詳細は、後で図１８を用いて説明する。
【００９４】
Ｓ１０１１−２でＣＰＵ１１は、ＦＭＰＫ２０から寿命比率とライト積算量を受信する。そしてＣＰＵ１１は、受信した寿命比率とライト積算量を、ＲＡＩＤグループ管理テーブル６５０の平均寿命比率６５４、ライト積算量６５５に格納する（Ｓ１０１１−３、Ｓ１０１１−４）。ＲＡＩＤグループ内の全ＦＭＰＫ２０に対して、Ｓ１０１１−１〜Ｓ１０１１−４の処理が終了すると、ＲＡＩＤグループ稼働情報取得処理は終了する。なお、ライト積算量を、ＦＭＰＫ２０から受信することに代えて、ストレージコントローラ１０で、各ＦＭＰＫ２０に発行するライトデータ積算量を管理し、その値をライト積算量６５５に格納するようにしてもよい。
【００９５】
続いて、ＦＭＰＫ２０が稼働情報集計コマンドを受信した時に行う処理の流れを、図１８を用いて説明する。ＦＭＰＫ２０が稼働情報集計コマンドを受信すると、ＦＭＰＫ２０は稼働情報集計プログラム２４１の実行を開始する。稼働情報集計プログラム２４１はＣＰＵ２０１によって実行される。
【００９６】
稼働情報集計プログラム２４１が開始されると、ＣＰＵ２０１はＦＭＰＫ２０内のページについて、寿命比率の計算を行う。まず寿命比率の計算が完了していないページを１つ選択する。以下では仮に、この選択されたページの物理ブロック番号がｂ、ページ番号がｐであったとする。また選択されたページのことを「処理対象ページ」と呼ぶ。そして処理対象ページについてのエラービット数及びＷＲ後経過時間を取得する（Ｓ２４１−１）。ここで取得されるエラービット数及びＷＲ後経過時間はそれぞれ、ブロック管理テーブル１１５０内の、ブロック番号＃１１５１がｂで物理ページ＃１１５２がｐの行に格納されているエラービット数１１５４及びＷＲ後経過時間１１５６である。つまり検査プログラム２４２が実行された時に、ブロック管理テーブル１１５０に記録されたエラービット数及びＷＲ後経過時間が取得される。
【００９７】
続いてＣＰＵ２０１は、閾値エラービット数管理テーブル１２００を参照し、ＷＲ間隔１２０１が、Ｓ２４１−１で取得したＷＲ後経過時間を含んでいる行を検索する。そして検索された行の閾値エラービット数１２０２を取得する（Ｓ２４１−４）。そしてＣＰＵ２０１は、Ｓ２４１−１で取得したエラービット数を、Ｓ２４１−４で取得した閾値エラービット数で除算する。この除算で算出される値が、処理対象ページの寿命比率である。ＣＰＵ２０１はこの計算された寿命比率を、ブロック管理テーブル１１５０内の、ブロック番号＃１１５１がｂで物理ページ＃１１５２がｐの行の、寿命比率１１５６に格納する（Ｓ２４１−５）。
【００９８】
ＦＭＰＫ２０内の全ページについて、Ｓ２４１−１〜Ｓ２４１−５の処理が終了すると、ＣＰＵ２０１はＳ２４１−７以降の処理を行う。Ｓ２４１−７でＣＰＵ２０１は、ブロック管理テーブル１１５０に記録された、全ページの寿命比率１１５６の平均値を算出し、ストレージコントローラ１０に送信する。さらにＣＰＵ２０１は、メモリ２０４に格納しているライト積算量をストレージコントローラ１０に送信し（Ｓ２４１−８）、処理を終了する。なお、ストレージコントローラ１０でライト積算量を管理している場合には、ＦＭＰＫ２０はライト積算量をストレージコントローラに送信する必要はない。
【００９９】
続いてＲＡＩＤグループ寿命予測処理の流れについて、図１９を用いて説明する。ＲＡＩＤグループ寿命予測処理では、ＲＡＩＤグループに属する全ＦＭＰＫについて、Ｓ１０１２−１〜Ｓ１０１２−４の処理を行う。以下、ＦＭＰＫ２０のドライブ番号がｎのＦＭＰＫ２０について、Ｓ１０１２−１〜Ｓ１０１２−４の処理を行う場合を例にとって説明する。
【０１００】
Ｓ１０１２−１では、ＣＰＵ１１はＲＡＩＤグループ管理テーブル６５０の中の、ドライブ番号６５２がｎの行を参照し、ＦＭＰＫ＃ｎの使用開始日６５８を取得する。そして、（現在日時−使用開始日６５８）÷３６５を計算することで、ＦＭＰＫ＃ｎの使用年数を算出する。続いてＣＰＵ１１はＲＡＩＤグループ管理テーブル６５０の中の、ドライブ番号６５２がｎの行を参照し、ＦＭＰＫ＃ｎの平均寿命比率６５４を取得する（Ｓ１０１２−２）。さらにＣＰＵ１１は、Ｓ１０１２−１で算出した使用年数と、Ｓ１０１２−２で取得した平均寿命比率６５４を用いて、ＦＭＰＫ＃ｎの残寿命を計算する。残寿命の計算は、以下の計算式に基づいて行われる。
ＦＭＰＫ＃ｎの残寿命＝（Ｓ１０１２−１で算出した使用年数）×（１−平均寿命比率６５４）
【０１０１】
Ｓ１０１２−４でＣＰＵ１１は、Ｓ１０１２−３で計算された残寿命を、残寿命６５７（ＲＡＩＤグループ管理テーブル６５０内のドライブ番号６５２がｎの行の残寿命６５７）に格納する。
【０１０２】
ここで、上で説明した残寿命の計算の考え方について、図２３を用いて説明する。物理ページリード時に検出されるエラービット数は、当該物理ページに対するライトデータ量の増加につれて、増加する傾向がある。本実施例におけるストレージ装置１では、物理ブロックの寿命比率（エラービット数÷エラービット数閾値）とライト積算量が、図２３に示されているように、比例関係にあるという前提で、寿命の予測を行う。なお、ある物理ブロックの寿命比率が１に達した時（これ以降、この物理ブロックの使用は停止される）までに、当該物理ブロックに対して発生したライト積算量を「Ｗｍａｘ」と表記する。
【０１０３】
また上で説明した残寿命の計算に際して、各ＦＭＰＫ２０に対するライトレート（単位時間当たりのライト量）は一定であると仮定して、残寿命の計算を行う。つまり、ＦＭＰＫ２０の平均寿命比率６５４とＷＲ積算量６５５も、比例関係にあるという前提で残寿命の計算が行われる。そのため、本実施例に係るストレージ装置１では、上で説明した計算式によってＦＭＰＫ＃ｎの残寿命を計算している。
【０１０４】
また実際には、フラッシュメモリの寿命特性は、ＦＭチップによってばらつきがある。そのため、いずれのＦＭチップにおいても、寿命比率とライト積算量が比例関係にあるものの、ＦＭチップごとにＷｍａｘの値は異なり得る。
【０１０５】
そのため、ＦＭチップごとにライト量を制御しなければ、目標耐用年数が到来するより前に、アクセス不可能になるＦＭチップが発生することがあり得る。そうなると、そのＦＭチップを搭載するＦＭＰＫ２０自体が使用不可能になることもある（ＦＭＰＫ２０が目標耐用年数に達する前に使用不可能になる）。そのため本実施例に係るＦＭＰＫ２０では、ＦＭＰＫ２０内で物理ページごとに寿命比率を観測しており、リクラメーションやウェアレベリングを行う際、データ移動元及びデータ移動先の物理ブロックを適切に選択する。つまりＦＭＰＫ２０は、寿命比率が高い（１に近い）物理ブロックが存在した時、その物理ブロックから寿命比率の小さな物理ブロックへとデータを移動することにより、各物理ブロックの寿命比率が均等になるように制御する。これにより、特定のＦＭチップが早期に使用不可能にならないようにしている。そのためストレージコントローラ１０では、各ＦＭＰＫ２０の寿命比率の平均値（平均寿命比率６５４）が均等になるように、ＦＭＰＫ２０間でライトデータ量を調整すれば、各ＦＭＰＫ２０及び各ＦＭＰＫ２０内の各ＦＭチップの寿命をおおむね均等にすることができ、結果として各ＦＭＰＫ２０を目標耐用年数まで使用可能にしている。
【０１０６】
なお、ＦＭＰＫ２０で行われるリクラメーションやウェアレベリングは、公知のフラッシュストレージで行われるものとほとんど同じである。公知のフラッシュストレージではリクラメーションやウェアレベリングの際、ブロックへのライトデータ量（あるいはブロックの消去回数）に基づいて、データ移動元及びデータ移動先となる物理ブロックを選択する。一方本実施例に係るＦＭＰＫ２０では、リクラメーションやウェアレベリングの際、寿命比率に基づいてデータ移動元及びデータ移動先となる物理ブロックを選択する点が、公知のフラッシュストレージと相違する。しかしそれ以外の点では、両者に違いはない。そのため、ＦＭＰＫ２０で行われるリクラメーションやウェアレベリングの詳細な説明は省略する。
【０１０７】
ＲＡＩＤグループに属する全ＦＭＰＫについて、Ｓ１０１２−１〜Ｓ１０１２−４の処理が行われた後、ＣＰＵ１１は、ＲＡＩＤグループ管理テーブル６５０に格納された、処理対象ＲＡＩＤグループに属する各ＦＭＰＫ２０の残寿命６５７の最小値を選択し、ＲＡＩＤグループ残寿命６５９に格納する（Ｓ１０１２−６）。図８を用いて一例を説明する。図８では、Ｓ１０１２−１〜Ｓ１０１２−４の処理が行われた結果、ＲＧ＃６５１が１のＲＡＩＤグループを構成する各ドライブ（ＦＭＰＫ＃０、＃１、＃２、＃３）の残寿命が、ＲＡＩＤグループ管理テーブル６５０の残寿命６５７の欄に格納された状態にある。図８によると、各ドライブ（ＦＭＰＫ＃０、＃１、＃２、＃３）の残寿命はそれぞれ、４年、３年、３．５年、４年である。そのためＳ１０１２−６でＣＰＵ１１は、ＲＡＩＤグループ＃１の残寿命を、３年（４年、３年、３．５年、４年の最小値は３年であるから）と決定し、ＲＡＩＤグループ＃１のＲＡＩＤグループ残寿命６５９に、「３年」を格納する。
【０１０８】
またＳ１０１２−６ではＣＰＵ１１は、
（現在の年月日−残寿命６５７が最小であるＦＭＰＫ２０の使用開始日６５８）÷３６５
を計算し、その値をＲＡＩＤグループ使用年数６６０に格納する。つまり、本実施例に係るストレージ装置１は、残寿命６５７が最小であるＦＭＰＫ２０の使用年数を、ＲＡＩＤグループの使用年数として用いる。
【０１０９】
図１６、１９の処理により、各ＲＡＩＤグループの（予測）寿命が算出される。図１６を用いて説明したように、算出された各ＲＡＩＤグループの（予測）寿命がターゲット残寿命よりも短いＲＡＩＤグループが存在する場合、ＣＰＵ１１はチャンク移動量計算処理、ＲＡＩＤグループ間チャンク移動処理を実行し、残寿命がターゲット残寿命より短いＲＡＩＤグループのデータを、別のＲＡＩＤグループへと移動する。これは、各ＦＭＰＫ２０を目標耐用年数まで使用可能にすることが目的である。図２０〜図２２を用いて、これらの処理の詳細を説明していく。
【０１１０】
図２０は、図１６のＳ１０１−５の処理、つまりチャンク移動量計算処理のフローチャートである。ここでは、残寿命がターゲット残寿命より短いＲＡＩＤグループから別のＲＡＩＤグループへ移動するデータ量（チャンク数）の算出を行う。
【０１１１】
Ｓ１０１５−１でＣＰＵ１１は、ＲＡＩＤグループに対するライト積算量を求める。具体的にはＣＰＵ１１はＲＡＩＤグループ管理テーブル６５０の中から、ＲＡＩＤグループに属する全ＦＭＰＫ２０のライト積算量６５５を取得し、その総和を算出する（Ｓ１０１５−１）。続いてＣＰＵ１１は、ＲＡＩＤグループに対するライト積算量を、単位時間当たりのＷＲ量に変換する。具体的にはＣＰＵ１１はＳ１０１５−１で求めたＲＡＩＤグループに対するライト積算量を、ＲＡＩＤグループ使用年数６６０で除算し、１年あたりのＷＲ量を算出する（Ｓ１０１５−２）。
【０１１２】
続いてＳ１０１５−３でＣＰＵ１１は、処理対象のＲＡＩＤグループが、現在（Ｓ１０１５−３の実行時点）から寿命を迎えるまでに受け付け可能なライト量（この値を「予測残ＷＲ量」と呼ぶ）を計算する。本実施例に係るストレージ装置１では、ＲＡＩＤグループで発生するＷＲ量が、Ｓ１０１５−２で計算した単位時間当たり（年あたり）のＷＲ量と同じ頻度で発生すると仮定して、予測残ＷＲ量を計算する。つまり、
単位時間あたりのＲＡＩＤグループに対するＷＲ量×ＲＡＩＤグループ残寿命６５９
を計算することで、予測残ＷＲ量を求める。
【０１１３】
続いてＳ１０１５−４でＣＰＵ１１は、チャンク移動処理実行後の、単位時間あたりＷＲ量を計算する。以下、データ移動後の単位時間あたりＷＲ量のことを、「新しい年あたりのＷＲ量」と呼ぶ。新しい年あたりのＷＲ量は、予測残ＷＲ量÷（ターゲット寿命−ＲＡＩＤグループ使用年数）を計算することで得ることができる。
【０１１４】
新しい年あたりのＷＲ量の計算方法について概説する。図２４は、ＲＡＩＤグループの使用時間とライト量の関係を表したグラフである。直線（ａ）は、ＲＡＩＤグループに対してこれまでと同じライトレートでライトが発生した場合のグラフである。そして直線（ａ）の傾きは、
ＲＡＩＤグループに対するライト積算量÷ＲＡＩＤグループ使用年数６６０
であるから、Ｓ１０１５−２で計算した、年あたりのＷＲ量に等しい。
【０１１５】
また、Ｓ１０１５−３で計算した予測残ＷＲ量とＷｍａｘの関係は、図２４に示されている通り、
予測残ＷＲ量＝Ｗｍａｘ−ＲＡＩＤグループに対するライト積算量
という関係にある。
【０１１６】
逆に言うと、処理対象のＲＡＩＤグループは、Ｓ１０１５−３で計算した予測残ＷＲ量以内の量のライトデータの書き込みは可能である。ここでの処理の目的は、ターゲット寿命（目標耐用年数）までＲＡＩＤグループを構成する各ＦＭＰＫ２０を使用可能にすることにある。処理対象のＲＡＩＤグループに対する単位時間（年）あたりのＷＲ量を、図２４の直線（ａ’）の傾き、つまり、
予測残ＷＲ量÷（ターゲット寿命−ＲＡＩＤグループ使用年数）
以下にすると、ターゲット寿命の時期が来るまで、処理対象のＲＡＩＤグループへのデータ書き込みは可能（寿命比率が１を上回らない、つまりＲＡＩＤグループを構成するＦＭＰＫ２０が使用不可能にならない）といえる。そのため、本実施例に係るストレージ装置１では、この式で算出された値を、「新しい年あたりのＷＲ量」と定めている。
【０１１７】
続いてＳ１０１５−５で、ＣＰＵ１１は処理対象ＲＡＩＤグループから別のＲＡＩＤグループに移動すべきデータ量を計算し、処理を終了する。移動すべきデータ量を計算するために、Ｓ１０１５−５でＣＰＵ１１は、
（Ｓ１０１５−２で算出された年あたりのＷＲ量−Ｓ１０１５−４で算出した新しい年あたりのＷＲ量）
を計算する。以下では、この計算された値のことを、「チャンク移動量」と呼ぶ。
【０１１８】
次に、ＲＡＩＤグループ間チャンク移動処理の流れを、図２１を用いて説明する。この処理では、データの移動先となるＲＡＩＤグループを決定し、データを移動することが行われる。データの移動先は原則として、データの移動元となるＲＡＩＤグループ（Ｓ１０１−４で選定された、ＲＡＩＤグループ残寿命が当初予定よりも短いＲＡＩＤグループ）と同一プールに属するＲＡＩＤグループが選択されなければならない。
【０１１９】
まずＣＰＵ１１はＲＡＩＤグループ管理テーブル６５０を参照し、ＲＡＩＤグループ残寿命６５９が、（ターゲット寿命６５６−ＲＡＩＤグループ使用年数６６０）よりも大きいＲＡＩＤグループを検索する。そしてプール管理テーブル５５０を参照することで、検索されたＲＡＩＤグループのうち、移動元ＲＡＩＤグループと同一プールに属するＲＡＩＤグループであって、かつ未使用領域（ステータス５５５が「未割当」であるチャンク）が存在するＲＡＩＤグループがあるか判定する（Ｓ１０１６−１）。この条件に合致するＲＡＩＤグループが存在する場合（Ｓ１０１６−１：Ｙｅｓ）、この条件に合致するＲＡＩＤグループをデータの移動先に決定する（Ｓ１０１６−２）。Ｓ１０１６−１の判定で、条件に合致するＲＡＩＤグループが複数存在する場合、任意のＲＡＩＤグループを選択して良い。あるいは、未使用領域が最も多い（ステータス５５５が「未割当」であるチャンクが最も多い）ＲＡＩＤグループを選択する、ＷＲ要求量５５６の合計が最小のＲＡＩＤグループを選択する、またはＲＡＩＤグループ管理テーブル６５０で管理されているＲＡＩＤグループ使用年数６６０が最短のＲＡＩＤグループを選択する、ＲＡＩＤグループ残寿命６５９が最大のＲＡＩＤグループを選択する等の判定を行ってもよい。それ以外に、移動元のＲＡＩＤグループの移動対象チャンクが複数ある場合には、複数のＲＡＩＤグループを移動先として、各チャンクを複数のＲＡＩＤグループに移動させてもよい。
【０１２０】
Ｓ１０１６−１の判定で、条件に合致するＲＡＩＤグループが存在しなかった場合（Ｓ１０１６−１：Ｎｏ）、ＣＰＵ１１はＳｐａｒｅ  ＲＡＩＤグループに空き領域が存在するか判定する（Ｓ１０１６−４）。Ｓｐａｒｅ  ＲＡＩＤグループに空き領域が存在する場合（Ｓ１０１６−４：Ｙｅｓ）、データの移動先をＳｐａｒｅ  ＲＡＩＤグループに決定する（Ｓ１０１６−５）。
【０１２１】
Ｓ１０１６−２またはＳ１０１６−５の後、ＣＰＵ１１は移動元ＲＡＩＤグループから移動先ＲＡＩＤグループ（Ｓ１０１６−２またはＳ１０１６−５で決定されたＲＡＩＤグループ）へとデータの移動を行い（Ｓ１０１６−３）、ＲＡＩＤグループ間チャンク移動処理を終了する。なお、Ｓ１０１６−３で行われる処理のことは、「チャンク移動処理」と呼ばれる。チャンク移動処理の詳細は後述する。
【０１２２】
Ｓ１０１６−４の判定の結果、Ｓｐａｒｅ  ＲＡＩＤグループに空き領域が存在しなかった場合（Ｓ１０１６−４：Ｎｏ）、ＣＰＵ１１は管理ホスト５に対し、Ｓｐａｒｅ  ＲＡＩＤグループが不足している旨のメッセージを管理ホストＩ／Ｆを通じて通知し、処理を終了する。この通知を受けた管理ホスト５は、Ｓｐａｒｅ  ＲＡＩＤグループが不足している旨のメッセージを、管理ホスト５の画面に表示する等の処理を行う。
【０１２３】
次にＳ１０１６−３で行われるチャンク移動処理の詳細を、図２２を用いて説明する。はじめにＣＰＵ１１は、変数ｍを用意し、ｍの値を初期化する（０を代入する）（Ｓ１６００）。変数ｍは、以下に説明するＳ１６０２で、データを移動した時、移動したデータ量の積算値を格納するために用いられる。またこの変数ｍのことを、「チャンク移動済み量」とも呼ぶ。
【０１２４】
Ｓ１６０１でＣＰＵ１１は、プール管理テーブル５５１を参照し、移動元ＲＡＩＤグループ内のチャンクのうち、ＷＲ要求量５５６の値が最も大きなチャンクを選択する。ここで選択されたチャンクのことを「移動元チャンク」と呼ぶ。移動元チャンクに格納されているデータが、移動対象データとなる。なお、Ｓ１６０１では必ずしもＷＲ要求量５５６の値が最も大きなチャンクが選択されなければならないわけではない。ただし、ＷＲ要求量５５６の値が大きいチャンクを移動対象とすると、移動すべきチャンクの量を小さくできる。そのため本実施例に係るチャンク移動処理では、ＷＲ要求量５５６の値が大きいチャンクから順に移動対象として選択されるようにしている。
【０１２５】
Ｓ１６０２でＣＰＵ１１は、プール管理テーブル５５１を参照し、移動先ＲＡＩＤグループの中の、未使用のチャンク（ステータス５５５が「未割当」のチャンク）を１つ選択する。この選択されたチャンクのことを「移動先チャンク」と呼ぶ。そしてＣＰＵ１１は、Ｓ１６０１で決定された移動対象データを、移動先チャンクへとコピーする。
【０１２６】
Ｓ１６０３でＣＰＵ１１は、移動先チャンクについて、ステータス５５５を「割当済」に変更する。またＳ１６０４でＣＰＵ１１は、移動元チャンクについて、ステータス５５５を「未割当」に変更し、ＷＲ要求量５５６を０にする。
【０１２７】
移動元チャンクに格納されていたデータが移動先にコピーされると、移動元チャンクにデータを格納しておく必要はなくなる。そこでＳ１６０５では、ＣＰＵ１１はＦＭＰＫ２０に対し、移動元チャンクに対してマッピングされていた物理ページの、論理ページへのマッピング解除を行わせる。具体的にはＣＰＵ１１は、プール管理テーブル５５０を参照することで、移動元チャンクのチャンク＃５５３及びＲＧ＃５５２からＲＡＩＤグループＬＢＡ５５４を特定する。特定されたＲＡＩＤグループＬＢＡ５５４の情報を用いて、移動元チャンクの存在するＦＭＰＫ２０及びそのＦＭＰＫ２０の記憶空間上のＬＢＡを特定する。なお、チャンクは１以上のストライプラインを含む領域であるので、移動元チャンクの存在するＦＭＰＫ２０は複数存在する。そしてＣＰＵ１１は、移動元チャンクが存在するＦＭＰＫ２０（複数）に対し、マッピング解除コマンドを発行する。ここで発行されるマッピング解除コマンドのパラメータには、マッピング解除対象となる領域を特定する情報としてＦＭＰＫ  ＬＢＡ７０４が指定されている。ただしマッピング解除コマンドのパラメータとして、ＬＢＡに代えて、ＦＭＰＫ２０の論理ページ番号を指定するようにしてもよい。
【０１２８】
マッピング解除コマンドを受信したＦＭＰＫ２０では、マッピング解除コマンドのパラメータに指定されているＬＢＡのマッピングを解除する。具体的には、論理物理変換テーブル１１００のＦＭＰＫ  ＬＢＡ１１０１が、マッピング解除コマンドのパラメータに指定されているＬＢＡと等しい行のステータス１１０３を「未割当」に変更する。また当該行のブロック＃１１０４及び物理ページ＃１１０５に格納されている値と等しい値が、ブロック管理テーブル１１５０のブロック＃１１５１及び物理ページ＃１１５２に格納されている行を、ブロック管理テーブル１１５０の中から検索し、その行のステータス１１５３も「未割当」に変更する。最後に論理物理変換テーブル１１００内の、ステータス１１０３を「未割当」に変更した行のブロック＃１１０４及び物理ページ＃１１０５の値を無効値（ＮＵＬＬ）に変更する。
【０１２９】
続いてＣＰＵ１１は、チャンク移動済み量（ｍ）に、Ｓ１６０２で移動したチャンクのＷＲ要求量（ＷＲ要求量５５６に格納されている値）を単位時間（年）あたりのライト量に変換した値を加算する（Ｓ１６０６）。具体的には、
ＷＲ要求量５５６÷ＲＡＩＤグループ使用年数６６０
を計算し、この値をｍに加算する。
【０１３０】
Ｓ１６０７では、ＣＰＵ１１は、チャンク移動済み量がチャンク移動量（図２０の処理で計算された値）以上になったか否かを判定する。チャンク移動済み量がチャンク移動以上になっている場合には処理を終了し、そうでない場合には、ＣＰＵ１１は再びＳ１６０１から処理を繰り返す。
【０１３１】
なお、チャンク移動処理の目的は、ＲＡＩＤグループの使用年数がターゲット寿命に達するまでの間に、移動元ＲＡＩＤグループに対して、図２０のチャンク移動量計算処理において算出した予測残ＷＲ量（または、新しい年あたりのＷＲ量×（ターゲット寿命−ＲＡＩＤグループ使用年数））を上回るライトデータの書き込みが来ないようにすることである。チャンク移動処理では、ホスト２から各チャンクに対して、これまでと同頻度（つまり、“ＷＲ要求量５５６÷ＲＡＩＤグループ使用年数６６０”のライトレート）の書き込みがあると仮定している。この場合、
移動元ＲＡＩＤグループの全チャンクのＷＲ要求量５５６の総和÷ＲＡＩＤグループ使用年数×（ターゲット寿命−ＲＡＩＤグループ使用年数）
が、新しい年あたりのＷＲ量×（ターゲット寿命−ＲＡＩＤグループ使用年数）
以下になるようにすればよい。そのためチャンク移動処理では、いくつかのチャンクのデータを別のＲＡＩＤグループ（移動先ＲＡＩＤグループ）に移動することで、予測残ＷＲ量を上回るデータの書き込みが来ることを抑制している。
【０１３２】
また、データが移動されたチャンクが、別の仮想チャンクにマッピングされることで、そのＲＡＩＤグループに対するライトデータ量（あるいはライト頻度）が増加する可能性はある。ただし、これまで説明してきた寿命予測処理は定期的に実行されている。そのため、ＲＡＩＤグループに対するライトデータ量（ライト頻度）が増加して、ＲＡＩＤグループの寿命が目標耐用年数（ターゲット寿命）よりも短くなると予測されると、再びチャンク移動処理が行われ、予測残ＷＲ量を上回るデータの書き込みが抑制される。
【０１３３】
以上、本発明の実施例を説明したが、これは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。
【０１３４】
たとえば、上で説明した実施例では、データの移動量を決定する際、ライト積算量（ストレージコントローラがＦＭＰＫに対して書き込んだデータの総量）をもとに、データ移動量を決定する方法を説明した。ただしフラッシュメモリを記憶媒体として用いる記憶デバイスの場合、いわゆるリクラメーション等の処理が実施されるため、ストレージコントローラからＦＭＰＫが受信するライトデータの量よりも、ＦＭＰＫコントローラ２００がＦＭチップ２１０に書き込むデータの量の方が多くなる。この現象は、ＷＡ（Ｗｒｉｔｅ  Ａｍｐｌｉｆｉｃａｔｉｏｎ）と呼ばれる。そのため、ライト積算量に代えて、ＦＭＰＫコントローラ２００がＦＭチップ２１０に書き込んだデータの総量をもとにして、データ移動量を決定するようにしてもよい。このようにすることで、移動すべきデータ量をより正確に算出することができる。
【０１３５】
また、ライト処理において、仮想チャンクにチャンクを割り当てる際に、残寿命（ＲＡＩＤグループ残寿命６５９）の長いＲＡＩＤグループに属するチャンクから優先的に、仮想チャンクに割り当てるようにしてもよい。これにより、残寿命の短いＲＡＩＤグループへのライト頻度が高くなることを抑制することができる。
【符号の説明】
【０１３６】
１:  ストレージ装置
２:  ホスト
３:  ＳＡＮ
１０:  ストレージコントローラ
１１:  プロセッサ（ＣＰＵ）
１２:  ホストＩＦ
１３:    ディスクＩＦ
１４:  メモリ
１５:  管理用Ｉ／Ｆ
１６:  内部スイッチ
２０:  ＦＭＰＫ
２５:  ＨＤＤ
３０:  ＲＡＩＤグループ
３１:  チャンク
４０:  仮想ボリューム
４１:  仮想チャンク
２００:  ＦＭＰＫコントローラ
２０１:    ＣＰＵ
２０２:  ＦＭＰＫ  Ｉ／Ｆ
２０３:    ＦＭチップＩ／Ｆ
２０４:  メモリ
２０５:  内部スイッチ
２１０:  ＦＭチップ
【図１】
2016117026.tif 000003
【図２】
2016117026.tif 000004
【図３】
2016117026.tif 000005
【図４】
2016117026.tif 000006
【図５】
2016117026.tif 000007
【図６】
2016117026.tif 000008
【図７】
2016117026.tif 000009
【図８】
2016117026.tif 000010
【図９】
2016117026.tif 000011
【図１０】
2016117026.tif 000012
【図１１】
2016117026.tif 000013
【図１２】
2016117026.tif 000014
【図１３】
2016117026.tif 000015
【図１４】
2016117026.tif 000016
【図１５】
2016117026.tif 000017
【図１６】
2016117026.tif 000018
【図１７】
2016117026.tif 000019
【図１８】
2016117026.tif 000020
【図１９】
2016117026.tif 000021
【図２０】
2016117026.tif 000022
【図２１】
2016117026.tif 000023
【図２２】
2016117026.tif 000024
【図２３】
2016117026.tif 000025
【図２４】
2016117026.tif 000026
【国際調査報告】
2016117026.tif 000027
2016117026.tif 000028
2016117026.tif 000029
2016117026.tif 000030