(57)【要約】  開示される方法は、第１の記憶ドライブの部分故障に対して、前記第１の記憶ドライブの論理アドレス空間において所定サイズ以上の１以上の領域を選択し、前記選択した１以上の領域のデータを、第２の記憶ドライブに移動し、前記第１の記憶ドライブとＲＡＩＤグループを構成する他の記憶ドライブからデータを読み出して、前記部分故障による消失データを復元し、復元した前記消失データを前記第１の記憶ドライブに書き込む、ことを含む。
2018142622.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶ドライブを制御する計算機であって、
メモリと、
前記メモリに格納されているプログラムに従って動作するプロセッサと、を含み、
前記プロセッサは、
第１の記憶ドライブの部分故障に対して、前記第１の記憶ドライブの論理アドレス空間において所定サイズ以上の１以上の領域を選択し、
前記選択した１以上の領域のデータを、第２の記憶ドライブに移動し、
前記第１の記憶ドライブとＲＡＩＤグループを構成する他の記憶ドライブからデータを読み出して、前記部分故障による消失データを復元し、
復元した前記消失データを前記第１の記憶ドライブに書き込む、計算機。
【請求項２】
請求項１に記載の計算機であって、
前記プロセッサは、前記第１の記憶ドライブにおける空き予備領域から前記部分故障による全消失データ量を引いた値が所定の値より小さい場合に、前記所定サイズ以上の１以上の領域を選択する、計算機。
【請求項３】
請求項２に記載の計算機であって、
前記プロセッサは、
前記第１の記憶ドライブから、前記第１の記憶ドライブにおける空き予備領域から前記部分故障による全消失データ量を引いた値が所定の値より小さい場合に、障害通知を受信し、
前記障害通知に応答して、前記所定サイズ以上の１以上の領域を選択する、計算機。
【請求項４】
請求項１に記載の計算機であって、
前記第１の記憶ドライブから前記第２の記憶ドライブに移動されるデータの論理アドレスは、前記第１の記憶ドライブと前記第２の記憶ドライブおいて共通である、計算機。
【請求項５】
請求項１に記載の計算機であって、
前記第１の記憶ドライブから前記第２の記憶ドライブに移動されるデータが、前記部分故障により消失した第１消失データを含む場合、前記プロセッサは、前記他の記憶ドライブからデータを読み出して前記第１消失データを復元し、前記第２の記憶ドライブに書き込む、計算機。
【請求項６】
請求項１に記載の計算機であって、
前記複数の記憶ドライブは、それぞれ、複数の仮想記憶ドライブを含む、物理記憶ドライブであり、
前記複数の仮想記憶ドライブそれぞれに、物理記憶ドライブの論理アドレス空間内の領域が割り当てられており、
前記プロセッサは、
前記第１の記憶ドライブの部分故障に対して、前記第１の記憶ドライブにおける１以上の仮想記憶ドライブを選択し、
選択した前記１以上の仮想記憶ドライブのデータを前記第２の記憶ドライブに移動する、計算機。
【請求項７】
請求項６に記載の計算機であって、
前記１以上の仮想記憶ドライブは、前記第２の記憶ドライブに含まれるいずれの仮想記憶ドライブともＲＡＩＤグループを構成していない、計算機。
【請求項８】
請求項１に記載の計算機であって、
前記プロセッサは、
ホストからの前記１以上の領域に対するＩ／Ｏ要求に応答して、前記第１の記憶ドライブにＩ／Ｏ要求を送信し、
前記第１の記憶ドライブに対する前記Ｉ／Ｏ要求に対して、前記第１の記憶ドライブから前記第２の記憶ドライブの識別情報を受信すると、前記第２の記憶ドライブにＩ／Ｏ要求を送信する、計算機。
【請求項９】
複数の記憶ドライブを制御する方法であって、
第１の記憶ドライブの部分故障に対して、前記第１の記憶ドライブの論理アドレス空間において所定サイズ以上の１以上の領域を選択し、
前記選択した１以上の領域のデータを、第２の記憶ドライブに移動し、
前記第１の記憶ドライブとＲＡＩＤグループを構成する他の記憶ドライブからデータを読み出して、前記部分故障による消失データを復元し、
復元した前記消失データを前記第１の記憶ドライブに書き込む、ことを含む方法。
【請求項１０】
複数の記憶ドライブと、
メモリと、
前記メモリに格納されているプログラムに従って動作するプロセッサと、を含み、
前記プロセッサは、
前記複数の記憶ドライブに含まれる第１の記憶ドライブの部分故障に対して、前記第１の記憶ドライブの論理アドレス空間において所定サイズ以上の１以上の領域を選択し、
前記選択した１以上の領域のデータを、前記複数の記憶ドライブに含まれる第２の記憶ドライブに移動し、
前記複数の記憶ドライブに含まれ、前記第１の記憶ドライブとＲＡＩＤグループを構成する他の記憶ドライブから、データを読み出し、前記部分故障による消失データを復元し、
復元した前記消失データを前記第１の記憶ドライブに書き込む、計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の記憶ドライブの制御に関する。
【背景技術】
【０００２】
近年、半導体記憶装置が普及している。ドライブ内に複数の記憶チップを有し、それらを並列に駆動させるハードアーキテクチャとなっている。複数記憶チップは、バスで繋がれている数だけ並列稼働でき、並列に稼働させることで高い入出力性能を達成する。従来型の磁気記憶装置であるＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）と比較して、並列化による性能向上、部分的な故障にも対応可能、チップの数や並列数から容易に性能設計が可能といったメリットがある。【０００３】
半導体記憶装置の一例として、ＮＡＮＤ型フラッシュメモリ（以下ＦＭと記述）を用いた記憶デバイスが普及している。ＮＯＲ型ほかの半導体記憶装置と比較して、微細化に優れ、ビットコストが低いことが理由である。デバイスの使用方法としては、従来のＨＤＤ置換のようなドライブとしてのＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）のほか、すべての記憶装置をＦＭとしたＡｌｌ  Ｆｌａｓｈ  Ａｒｒａｙのようなものもある。【０００４】
ＳＳＤは、ＨＤＤに比べて高速な入出力が可能であり、その需要は高まっている。ＦＭの微細化やデータ圧縮技術により、ＳＳＤ１台あたりの容量が増加している。このため、ドライブ障害発生時のコレクション時間が長時間化している。例えば、特許文献１は、記憶デバイスの一部に障害が発生した場合のデータ退避技術を開示している。障害部位のみスペアドライブへ退避することで、復旧に必要な時間を短縮する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１３／０２１２４２８号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ＳＳＤには寿命がある。ＦＭ（典型的にはＮＡＮＤ型ＦＭ）は、ページと呼ばれる単位でデータの書き込みおよび読み出しを行う（以降、上位装置の管理単位である"ページ"と区別するために"セグメント"と表記）。また、その物理的特性から、ＦＭは、データを書き換えようとしたとき、そのデータが格納されている物理記憶領域上に、データを直接上書きすることができない。物理記憶領域上のデータに対してデータの書換えを行うためには、ＦＭは、ブロックと呼ばれる消去単位で、物理記憶領域上のデータに対して消去処理（以下、ブロック消去）を行い、ブロック消去が行われた物理記憶領域上にデータを書く必要がある。【０００７】
しかしながら、ＦＭの物理的な制約から、各ブロックの消去回数は、限界がある。そして、或るブロックの消去回数がこの限界を超えると、そのブロックにはデータを格納することができなくなってしまう。つまり、ＳＳＤ内の全ブロック（又は予備領域）の消去回数が上限を超えた時、そのＳＳＤの寿命が尽きる。【０００８】
そこで、ウエアレベリング（以下、ＷＬ）とよばれる手法を用いて、ＳＳＤの長寿命化が図られている。ＷＬは、消去回数が多いブロックには低頻度に更新されるデータが格納されるように、また、消去回数が少ないブロックには高頻度に更新されるデータが格納されるように、データの格納位置を制御する。これにより、ブロック間の消去回数を平準化し、特定のブロックのみが劣化することを抑える。【０００９】
ＷＬのために、ＳＳＤは、論理アドレスから物理アドレスへのマップ情報を持つ。ＳＳＤは、従来ＨＤＤでは１対１で対応されていた論理、物理セグメントを変換するマップを持ち、マップを書き換えることで、ＷＬによるデータ格納位置の更新に対応する。【００１０】
既に述べたように、ＦＭは複数のブロックから構成されている。信号線を共有している複数のブロックのまとまりをプレーンと呼び、複数プレーンのまとまりをダイと呼ぶ。一般に、ＦＭチップは１ないしは複数のダイから構成されている。【００１１】
ＦＭからのデータ読み出しが不可となるケースは、ＦＭ寿命と物理的故障の２つに大別される。寿命と呼ばれるものは、先に述べた書き換え回数を超え、誤り訂正を実行した場合でも格納データが正しく読めなくなる場合である。物理的故障は、例えば記憶素子を構成する回路の故障によってＦＭへのアクセスが不可となった場合である。故障回路の箇所によって、影響範囲が変化し、ダイ、プレーン、ブロック、セグメント等それぞれの階層に対して生じる。【００１２】
故障によるアクセス不可領域が想定数以上に発生すると、ユーザデータを格納する記憶領域を確保できなくなり、ＳＳＤを閉塞せざるをえなくなる。そのため、ＳＳＤのデータをスペアドライブに移動する。【００１３】
ＳＳＤ内のＦＭの一部に障害が発生し、特許文献１の技術を適用した場合、当該技術は、消失データを他のＲＡＩＤドライブから復旧し、スペアドライブへ書き込む。ＳＳＤにおいては、データの論理的なアドレスと、物理的な格納位置は、ＷＬ技術によってマッピング管理されており、物理的に連続な領域に格納されているデータであっても、論理アドレス空間上は非連続に分散している。つまり、故障によってスペアドライブへ退避された消失データは、論理アドレス空間上、広範囲に離散的に分布していることになる。【００１４】
この消失データを含む領域へのシーケンシャルなアクセスを考える。一般に論理アドレス空間上連続なデータ（シーケンシャルデータ）は、一度のドライブへのコマンド発行でデータが読めることが期待される。しかし、消失データを含む連続領域へのシーケンシャルアクセスは、非消失データへのアクセスと、消失データへのアクセスの、２回のアクセスコマンド発行が必要となる。コマンド発行回数が増加するため、ストレージコントローラの資源を消費し、性能が低下する。【００１５】
従って、ＳＳＤのように、連続する物理的記憶領域が、論理アドレス空間において離散した領域にマッピングされる記憶ドライブからデータを退避した場合に、アクセス性能の低下を抑えることができる技術が望まれる。
【課題を解決するための手段】
【００１６】
本発明の代表的な一例は、複数の記憶ドライブを制御する計算機であって、メモリと、前記メモリに格納されているプログラムに従って動作するプロセッサと、を含み、前記プロセッサは、第１の記憶ドライブの部分故障に対して、前記第１の記憶ドライブの論理アドレス空間において所定サイズ以上の１以上の領域を選択し、前記選択した１以上の領域のデータを、第２の記憶ドライブに移動し、前記第１の記憶ドライブとＲＡＩＤグループを構成する他の記憶ドライブからデータを読み出して、前記部分故障による消失データを復元し、復元した前記消失データを前記第１の記憶ドライブに書き込む。
【発明の効果】
【００１７】
本発明の一例によれば、記憶ドライブにおける部分故障に起因するデータ退避後に、アクセス性能の低下を抑えることができる。
【図面の簡単な説明】
【００１８】
【図１Ａ】本開示の概要を示す図である。
【図１Ｂ】システムの構成を示す図である。
【図２】ストレージシステムが使用するＲＡＩＤ構成を示す図である。
【図３】ストレージシステムが参照する情報を示す図である。
【図４】論理ボリューム情報テーブルの形式を示す図である。
【図５】実ページ情報テーブルの形式を示す図である。
【図６】ＲＧ情報テーブルの形式を示す図である。
【図７】ＦＭＰＫＧ情報テーブルの形式を示す図である。
【図８】データ退避アドレステーブルの形式を示す図である。
【図９】予備ＦＭＰＫＧ情報テーブルの形式を示す図である。
【図１０】障害通知の形式を示す図である。
【図１１】フラッシュメモリパッケージの構成を示す図である。
【図１２】フラッシュメモリパッケージの論理セグメント及び物理セグメントの構成を示す図である。
【図１３】フラッシュメモリパッケージのメモリに格納されるプログラムの構成を示す図である。
【図１４】論物変換情報テーブルの形式を示す図である。
【図１５】ＦＭ管理情報テーブルの形式を示す図である。
【図１６】ストレージシステムのメモリに格納されるプログラムの構成を示す図である。
【図１７】部分故障処理実行部の処理フローを示す図である。
【図１８】データ退避処理のフローを示す図である。
【図１９】リード処理実行部の処理フローを示す図である。
【図２０】障害検知プログラムの処理フローを示す図である。
【図２１】ライト要求受付部の処理フローを示す図である。
【図２２】ライトアフタ処理実行部の処理フローを示す図である。
【図２３】実施例２における仮想フラッシュメモリパッケージとフラッシュメモリパッケージの関係を示す図である。
【図２４】実施例２におけるＶＦＭＰＫＧ管理テーブルの形式を示す図である。
【図２５】実施例２におけるデータ退避処理のフローを示す図である。
【図２６】実施例２における退避データ選択のフローを示す図である。
【図２７】実施例２におけるリード処理実行部の処理フローを示す図である。
【図２８】実施例３におけるフラッシュメモリパッケージのＩ／Ｏ処理のフローを示す図である。
【図２９】実施例３におけるライトアフタ処理実行部の処理のフローを示す図である。
【図３０】実施例３におけるＦＭＰＫＧ内部のＩ／Ｏ処理のフローを示す図である。
【発明を実施するための形態】
【００１９】
以下、本発明のいくつかの実施例を、図面を用いて説明する。なお、これらの実施例は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。
【００２０】
以下において、記憶ドライブ（記憶デバイス又はドライブとも呼ぶ）の部分故障に起因するデータ退避を開示する。図１Ａは、実施例の概要を示す。記憶ドライブ１７Ａ〜１７Ｃは、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）を構成する。記憶ドライブ（記憶デバイスと呼ぶ場合もある）１７Ａ〜１７Ｄは、それぞれ、論理アドレス空間の記憶領域（ボリューム）１０Ａ〜１０Ｄを提供する。記憶ドライブ１７Ａ〜１７Ｄは、例えば、フラッシュドライブである。
【００２１】
論理アドレス空間と記憶ドライブの物理アドレス空間との間のマッピングは、動的であり、論理アドレスに対してマッピングされる物理アドレスは変化し得る。一つの論理アドレス領域が複数の物理アドレス領域にマッピングされ得、一つの物理アドレス領域が複数の論理アドレス領域にマッピングされ得る。
【００２２】
図１Ａにおいて、記憶ドライブ１７Ｃにおいて部分故障が発生し、離散した複数の論理アドレス領域のデータブロック１２が消失している。部分故障は、例えば、一つのダイの故障である。部分故障により、記憶ドライブ１７Ｃの空き容量が不足している。上位装置１６は、記憶ドライブ１７Ｃ内の一部データを、スペア記憶ドライブ１７Ｄに移動する。データの移動は、データの移動先へのデータコピー及び移動元におけるデータ削除を含む。
【００２３】
上位装置１６は、部分故障した記憶ドライブ１７Ｃの論理アドレス空間において、所定サイズのデータブロック（一つの論理アドレス領域のデータ）１５を、記憶ドライブ１７Ｄへ移動する。図１Ａの例は、二つのデータブロック１５を移動する。データの移動により、記憶ドライブ１７Ｃの空き容量が増加する。
【００２４】
上位装置１６は、消失データブロック１２を、ＲＡＩＤを構成する他の記憶ドライブ１７Ａ、１７Ｂのデータブロック１１Ａ、１１Ｂにより復元し、記憶ドライブ１７Ｃに書き込む。
【００２５】
スペア記憶ドライブ１７Ｄへ移動するデータを、記憶ドライブ１７Ｃの論理アドレス空間において、所定サイズ以上の連続記憶領域から切り出すことにより、データ移動後の記憶ドライブへのＩ／Ｏ要求の発行回数を低減し、Ｉ／Ｏ性能の低下を抑制する。移動するデータは、例えば、一つの連続論理アドレス領域のデータでもよく、所定サイズ以上の１以上の記憶領域のデータでもよい。所定サイズ以上の複数の記憶領域は、同一サイズでも異なるサイズでもよい。
【実施例１】
【００２６】
図１Ｂは、実施例１の計算機システムの構成を示す。計算機システムは、ストレージシステム１０１と、１つ以上のホスト計算機１０３Ａ、１０３Ｂと、管理端末１０４とを有する。ホスト計算機１０３Ａ、１０３Ｂのそれぞれは、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１０５を介して、ストレージシステム１０１に接続される。【００２７】
ストレージシステム１０１は、ストレージコントローラ１０２と、複数のフラッシュメモリストレージドライブ１１３Ａ〜１１３Ｅとを有する。図面及び以下の説明では、フラッシュメモリストレージドライブをＦＭＰＫＧ（Ｆｌａｓｈ  Ｍｅｍｏｒｙ  Ｐａｃｋａｇｅ）と呼ぶことがある。なお、本実施例では、ストレージコントローラ１０２は１つであるが、複数のストレージコントローラ１０２で冗長構成されてもよい。【００２８】
ストレージコントローラ１０２は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０８と、主記憶１０９と、複数のホストＩＦ（Ｉｎｔｅｒｆａｃｅ）１０７Ａ、１０７Ｂと複数のストレージＩＦ１１１Ａ、１１１Ｂと、保守ＩＦ１０６とを有する。ストレージコントローラ１０２内の各部は、バスを介して接続される。主記憶１０９は、ストレージシステム１０１を制御するためのプログラムを格納する領域及びデータを一時的に格納するキャッシュメモリとしての領域を有する。ＣＰＵ１０８は、主記憶１０９に格納されたプログラムに従ってストレージシステム１０１を制御する。【００２９】
プロセッサであるＣＰＵ１０８は、プログラムに従って、所定の機能部として動作する。従って、プログラムを主語とする説明において、その主語をＣＰＵ１０８又はＣＰＵ１０８を含むストレージシステム１０１に代えることができる。【００３０】
ストレージコントローラ１０２は例えば、複数の記憶ドライブをＲＡＩＤグループ（ＲＧ）として制御する。ＦＭＰＫＧに加えて、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）−ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）−ＨＤＤ等、他の記憶ドライブが用いられてもよい。以後の説明及び図面において、このような記憶ドライブ（記憶デバイス）をＰＤＥＶ（Ｐｈｙｓｉｃａｌ  Ｄｅｖｉｃｅ）と呼ぶことがある。【００３１】
ホストＩＦ１０７Ａ、１０７Ｂは、ホスト計算機１０３Ａ、１０３Ｂとの通信を行うインタフェイスである。保守ＩＦ１０６は、管理端末１０４と接続され管理端末１０４との通信を行うインタフェイスである。【００３２】
管理者は、管理端末１０４からストレージコントローラ１０２の管理やメンテナンスを行う。管理端末１０４は必須要素ではなく、ストレージコントローラ１０２の管理やメンテナンスなどは、例えば、ホスト計算機から行っても良い。【００３３】
上記の計算機のシステムでは、ホスト計算機１０３Ａ、１０３ＢとＦＭＰＫＧ１１３Ａ〜１１３Ｅとが、ストレージコントローラ１０２を介して接続されている。これに代えて、例えば、ストレージコントローラ１０２を省き、ホスト計算機１０３Ａ、１０３ＢとＦＭＰＫＧ１１３Ａ〜１１３Ｅとが、直接接続されても良い。以下において、ＦＭＰＫＧ１１３は、ストレージシステム１０１における１又は複数のＦＭＰＫＧを示す。【００３４】
なお、本開示の技術は、ハイパーコンバージドシステムに適用することができる。ハイパーコンバージドシステムは、内部にＨＤＤやＳＳＤなどのローカルストレージを含む複数サーバ（ノード）を連結してクラスタを構成する、システムである。仮想化機能を有するハイパーバイザがサーバ内で動作し、ハイパーバイザがソフトウェアで定義した、サーバ仮想マシンとストレージ仮想マシンを動作させる。また、本開示の技術は、記憶ドライブとストレージコントローラとがネットワークを介して接続されるシステムに適用できる。【００３５】
本実施例におけるストレージシステム１０１が管理する情報について説明する前に、論理ボリューム、フラッシュボリュームの構成について説明する。記憶領域の割り当て単位を、ページと呼ぶ。【００３６】
図２を用いて、論理ボリューム、仮想ページ、実ページ、ＲＧの関係について説明する。ストレージコントローラ１０２は、１以上の論理ボリュームを定義して、ホスト計算機１０３等の上位装置に提供することができる。なお、ホスト計算機１０３は、ホスト計算機１０３Ａ、１０３Ｂの、１又は複数のホスト計算機を示す。【００３７】
本実施例では、論理ボリュームの空間は、仮想ページという単位で分割されているものとし、ＲＧ２０４の記憶領域は、実ページという単位で分割されているものとする。ストレージコントローラ１０２は、各論理ボリュームの記憶空間を、複数の仮想ページという所定単位の領域に分割して管理している。図２は、仮想ページ２０２Ａ、２０２Ｂ、２０２Ｃを例示する。【００３８】
なお、仮想ページのサイズは、主記憶１０９内の仮想ページ容量３０８に格納されている。本実施例に係るストレージシステム１０１においては、すべての仮想ページの容量は同じとするが、ストレージシステム１０１内に異なるサイズの仮想ページが存在してもよい。【００３９】
仮想ページは、ストレージコントローラ１０２内部で論理ボリュームの記憶空間の管理のためにのみ用いられる。ホスト計算機１０３は、論理ボリュームの記憶領域にアクセスする際には、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）などの論理アドレスを用いて、アクセス対象の記憶領域を指定する。【００４０】
ホスト計算機１０３が論理ボリュームへのアクセス要求を発行した時、ストレージコントローラ１０２は、ホスト計算機１０３が指定したＬＢＡを仮想ページ番号（各仮想ページに付されている識別番号）及び仮想ページ内の相対アドレス（仮想ページ先頭からのオフセットアドレス）に変換する。【００４１】
この変換は、ＬＢＡを仮想ページサイズで除算することで実現できる。仮に仮想ページのサイズがＰ（ＭＢ）とすると、論理ボリュームの先頭位置からＰ（ＭＢ）分の領域が仮想ページ＃０（＃０は仮想ページ番号を表す）として管理され、その次のＰ（ＭＢ）分の領域が仮想ページ＃１として管理される。それ以降も同様に、Ｐ（ＭＢ）の領域がそれぞれ、仮想ページ＃２、＃３…として管理される。【００４２】
ストレージコントローラ１０２が論理ボリュームを定義した直後は、各仮想ページに物理記憶領域は割り当てられていない。ストレージコントローラ１０２は、ホスト計算機１０３から仮想ページに対するライト要求を受け付けた時点ではじめて、当該仮想ページに対して物理記憶領域を割り当てる。仮想ページに割り当てられる物理記憶領域のことを実ページと呼ぶ。図２は、仮想ページ＃０（２０２ａ）に実ページ２０３Ａが割り当てられている状態を表している。【００４３】
実ページは、ＲＧ２０４の複数のフラッシュボリュームの記憶領域を用いて形成される領域である。図２は、ＦＭＰＫＧ１１３Ａ〜１１３Ｅそれぞれのフラッシュボリューム１１５Ａ〜１１５Ｅを示す。図２で例示するＲＧ２０４のＲＡＩＤタイプは、ＲＡＩＤ４の３Ｄ＋１Ｐ構成（データドライブ３台、パリティドライブ１台で構成されるＲＡＩＤグループ）である。【００４４】
本実施例では、ＦＭＰＫＧ１１３Ａ〜１１３ＥによってＲＡＩＤを構成し、フラッシュボリューム１１５Ａ（ＦＭＰＫＧ１１３Ａ）は、ＲＧ２０４の一つのＦＭＰＫＧの故障時に、故障したＦＭＰＫＧに格納されたデータを格納し、ＲＧ２０４に格納されたデータの冗長性を担保するための予備ＦＭＰＫＧである。【００４５】
ストレージコントローラ１０２は、ＲＧ２０４に属するＦＭＰＫＧ１１３Ａ〜１１３Ｅのフラッシュボリューム１１５Ａ〜１１５Ｅを、ストライプブロックと呼ばれる複数の固定サイズの記憶領域に分割して管理する。たとえば図２において、０（Ｄ）、１（Ｄ）、２（Ｄ）…、またはＰ０、Ｐ１…と記載されているそれぞれの領域が、ストライプブロックを表している。【００４６】
本実施例では、ストライプブロックのサイズは、フラッシュボリュームの仮想セグメントのサイズと等しいとする。これと異なり、ストライプブロックと仮想セグメントのサイズは異なっている構成が採用されてもよい。【００４７】
図２で、ストライプブロックのうち、Ｐ０、Ｐ１…と記載されているストライプブロックは、ＲＡＩＤ機能により生成される冗長データ（パリティ）の格納されるストライプブロックであり、これを「パリティストライプブロック」と呼ぶ。一方、０（Ｄ）、１（Ｄ）、２（Ｄ）…と記載されているストライプブロックは、ホスト計算機１０３から書き込まれるデータ（冗長データではないデータ）が格納されるストライプブロックである。このストライプブロックのことは、「データストライプブロック」と呼ばれる。パリティストライプブロックは、複数のデータストライプブロックを用いて生成される冗長データを格納する。【００４８】
以下、パリティストライプブロックと、当該パリティストライプブロックに格納される冗長データを生成するために用いられるデータストライプブロックのセットのことを、「ストライプライン」と呼ぶ。本実施例に係るストレージシステム１０１の場合、たとえばパリティストライプブロックＰ０は、データストライプブロック０（Ｄ）、１（Ｄ）、２（Ｄ）を用いて生成される冗長データ（パリティ）を格納する。データストライプブロック０（Ｄ）、１（Ｄ）、２（Ｄ）とパリティストライプブロックＰ０は、同一のストライプラインに属する。【００４９】
つまり１つのストライプラインに属する各ストライプブロックは、フラッシュボリューム１１５Ｂ〜１１５Ｅ上の同じ位置（アドレス）に存在する。ただし別の実施例として、同一ストライプラインに属する各ストライプブロックが、フラッシュボリューム上の異なるアドレスに存在する構成が採用されてもよい。本実施例に係るストレージシステム１０１は、図２に示されるように、実ページ（例えば２０３Ａ、２０３Ｂ）は、１または複数のストライプラインから構成される。【００５０】
実ページが仮想ページに割り当てられる場合、データストライプブロック（０（Ｄ）、１（Ｄ）等）のみが割り当てられ、パリティストライプブロックは割り当てられない。そのため、実ページ上のライトデータの格納される領域の合計サイズは、仮想ページのサイズと等しい。つまり、（実ページのサイズーパリティ格納領域のサイズ）＝仮想ページサイズ、の関係が成立する。図２はＲＡＩＤ４の構成例を示すが、例えば、ＲＧ２０４のＲＡＩＤタイプがＲＡＩＤ１の場合には、実ページサイズは、仮想ページサイズの２倍である。【００５１】
仮想ページ内の領域と、実ページ内の領域との関係（マッピング）は、図２に示されている通りである。つまり、実ページの先頭ストライプラインからパリティを除いた領域（０（Ｄ）、１（Ｄ）、２（Ｄ））が、仮想ページの先頭領域に割り当てられている。それ以降も同様に、実ページの２番目以降の各ストライプラインからパリティを除いた領域（３（Ｄ）、４（Ｄ）、５（Ｄ）…）が、順番に仮想ページの領域に割り当てられる。【００５２】
ストレージシステム１０１は、ホスト計算機１０３からのアクセス要求で指定されている論理ボリューム上のアクセス位置（ＬＢＡ）から、仮想ページ番号及び仮想ページ内の相対アドレス（仮想ページ先頭からのオフセットアドレス）を求める。上述のように、仮想ページ内の領域と実ページ内の領域とは規則的にマッピングされているため、ストレージシステム１０１は、仮想ページ内のアクセス位置に対応付けられているＦＭＰＫＧ１１３及びそのＦＭＰＫＧ１１３内の領域（データストライプブロック）を一意に算出できる。【００５３】
さらにアクセス位置に対応付けられているデータストライプブロックに加え、そのデータストライプブロックと同一ストライプラインに属するパリティストライプブロックも一意に定まる。【００５４】
なお、仮想ページ内の各領域と実ページ内の各領域とのマッピングは、ここで説明したマッピング方法に限定されるものではない。容量仮想化技術においては、各論理ボリュームを定義する時、実記憶媒体の容量よりも各論理ボリュームの合計記憶容量が大きくなるように定義することもできる。このため一般的に、仮想ページ数のほうが、実ページ数より多い。本実施例に係るストレージシステムも、仮想ページ数を実ページ数より多く定義することができる。【００５５】
論理ボリューム中の各仮想ページに割り当てられる実ページは、必ずしも同一ＦＭＰＫＧ１１３内の実ページに限定されない。仮想ページ＃０に割り当てられる実ページと、仮想ページ＃１に割り当てられる実ページが、異なるＲＧ２０４内の実ページであってもよい。ただし本実施例では、１つの論理ボリュームの仮想ページに割り当てられるべき実ページは全て、ＲＡＩＤタイプが同じＲＧ２０４から割り当てられる例を説明する。【００５６】
続いて、本実施例におけるストレージシステム１０１が管理する情報の説明を行う。図３は、ストレージシステム１０１の主記憶１０９の中に格納される情報のうち、本実施例に関係する情報を示す。主記憶１０９は、少なくとも、論理ボリューム情報テーブル３０１、実ページ情報テーブル３０２、空き実ページ管理情報ポインタ３０３、ＲＡＩＤグループ情報テーブル３０４、ＦＭＰＫＧ情報テーブル３０５、データ退避アドレステーブル３０６、予備ＦＭＰＫＧ情報テーブル３０７、仮想ページ容量３０８を格納している。【００５７】
以下具体的に説明する。図４は、論理ボリューム情報テーブル３０１の形式を示す。論理ボリューム情報テーブル３０１は、論理ボリュームごとに用意され、論理ボリュームの属性情報を管理する。以下、ある論理ボリューム情報テーブル３０１によって属性情報が管理される論理ボリュームのことを、「管理対象論理ボリューム」と呼ぶ。論理ボリューム情報テーブル３０１は、論理ボリュームＩＤ４０１、論理容量４０２、論理ボリュームＲＡＩＤタイプ４０３、実ページポインタ４０４を含む。【００５８】
論理ボリュームＩＤ４０１は、管理対象論理ボリュームのＩＤを示す。一般的に、ホスト計算機１０３は、論理ボリュームの識別子（例えばＬｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ（ＬＵＮ））、論理ボリューム内のアドレス（ＬＢＡ）、アクセス先データ長を指定して、アクセス要求（リード要求又はライト要求）を発行する。論理ボリュームＩＤ４０１は、ホスト計算機１０３が論理ボリュームに対してアクセス要求を発行する時に指定する、論理ボリュームの識別子を格納する。【００５９】
論理容量４０２は、管理対象論理ボリュームの容量を示す。論理ボリュームＲＡＩＤタイプ４０３は、管理対象論理ボリュームのＲＡＩＤタイプを表す。論理ボリュームＲＡＩＤタイプ４０３に含まれる情報は、ＲＡＩＤ０、ＲＡＩＤ１などのＲＡＩＤタイプの他、Ｎ台の記憶ドライブに対し、１台の記憶ドライブの冗長データを格納する場合、Ｎを示す数値を含む。【００６０】
指定されるＲＡＩＤタイプは、少なくとも一つのＲＧ２０４がもつＲＡＩＤタイプである。管理対象論理ボリュームの仮想ページに実ページを割り当てる際、ストレージコントローラ１０２は、ＲＧ２０４のＲＡＩＤタイプが論理ボリュームＲＡＩＤタイプ４０３と同じＲＧ２０４から実ページを選択する。【００６１】
実ページポインタ４０４は、管理対象論理ボリュームの仮想ページに割り当てられた実ページのページ管理情報（後述する実ページ情報テーブル３０２）へのポインタである。実ページポインタ４０４の数は、管理対象論理ボリュームの仮想ページの数（論理容量４０２を仮想ページ容量３０８で割った数になるが、余りがでれば＋１）である。管理対象論理ボリュームの仮想ページ数がｎであれば、実ページポインタ４０４はｎ個存在する。【００６２】
論理ボリューム情報テーブル３０１内の複数の実ページポインタ４０４のうち、先頭からｋ番目の実ページポインタは、仮想ページ＃（ｋ−１）に割り当てられた実ページのページ管理情報（後述する実ページ情報テーブル３０２）へのポインタである。また、実ページが割り当てられる契機は、論理ボリュームが定義された時ではなく、仮想ページに対して実際にデータ書き込みの要求を受信した契機である。まだ書き込みが行われていない仮想ページに対応する実ページポインタ４０４は無効値（ＮＵＬＬ）である。【００６３】
図５は、実ページ情報テーブル３０２の形式を示す。実ページ情報テーブル３０２は、実ページについての情報を管理するためのもので、実ページごとに１つの実ページ情報テーブル３０２が存在する。実ページ情報テーブル３０２は、ＲＡＩＤグループ５０１、実ページアドレス５０２、空きページポインタ５０３、ページデータ格納量５０４を含む。なお、以下の実ページ情報テーブル３０２の説明の過程で、ある実ページ情報テーブル３０２によって管理される実ページのことを、「管理対象実ページ」と呼ぶ。【００６４】
ＲＧ５０１は、管理対象実ページが属するＲＧの識別子を示す。以下、ＲＧの識別子のことを、「ＲＧＩＤ」と呼ぶ。実ページアドレス５０２は、管理対象実ページが存在する位置（アドレス）の情報を含む。実ページアドレス５０２が示すアドレスは、管理対象実ページが属するＲＧ２０４内の相対アドレスである。【００６５】
空きページポインタ５０３は、管理対象実ページが仮想ページに割り当てられていない場合に用いられる。本実施例において、仮想ページに割り当てられていない実ページのことを、「空き実ページ」又は「空きページ」と呼ぶ。管理対象実ページが仮想ページに割り当てられていない場合、その空きページポインタ５０３は、別の空きページの実ページ情報テーブル３０２をポイントする。管理対象実ページが仮想ページに割り当てられている場合、空きページポインタ５０３はＮＵＬＬ値である。【００６６】
ページデータ格納量５０４は、管理対象実ページに格納されたデータ量を示す。この情報は、管理対象実ページに割り当てられているＦＭＰＫＧ１１３（の記憶領域）に関する属性情報ではなく、管理対象実ページが割り当てられている仮想ページのデータに関する属性情報である。従って、この仮想ページに別の実ページが割り当てられ、現在の実ページのデータが新しい実ページにコピーされた場合、ページデータ格納量５０４の値を、新しい実ページの管理情報として引き継ぐ必要がある。【００６７】
図６は、ＲＧ情報テーブル３０４の形式を示す。ＲＧ情報テーブル３０４は、ＲＧ２０４についての情報を管理するために用いられる。１つのＲＦ２０４に対して、１つのＲＧ情報テーブル３０４が存在する。ＲＧ情報テーブル３０４は、ＲＧ  ＩＤ６０１、ＲＧ  ＲＡＩＤタイプ６０２、実ページ数６０３、空き実ページ数６０４、ＦＭＰＫＧポインタ６０５を有する。以下、あるＲＧ情報テーブル３０４で管理されるＲＧ２０４のことを、「管理対象ＲＧ」と呼ぶ。【００６８】
ＲＧ  ＩＤ６０１は、管理対象ＲＧの識別子を示す。ＲＧ  ＲＡＩＤタイプ６０２は、管理対象ＲＧのＲＡＩＤタイプを示す。このＲＡＩＤタイプは、論理ボリュームＲＡＩＤタイプ４０３について説明したとおりである。実ページ数６０３及び空き実ページ数６０４は、それぞれ、管理対象ＲＧの全実ページ数、空き実ページ数を示す。【００６９】
ＦＭＰＫＧポインタ６０５は、管理対象ＲＧに属するＦＭＰＫＧ１１３のパッケージＩＤを示す。ＲＧ情報テーブル３０４に含まれるＦＭＰＫＧポインタ６０５の数は、管理対象ＲＧに属するＦＭＰＫＧ１１３の数と等しい。またこの数は、ＲＧ  ＲＡＩＤタイプ６０２によって決まる値である。【００７０】
図７は、ＦＭＰＫＧ情報テーブル３０５の形式を示す。ＦＭＰＫＧ情報テーブル３０５はＦＭＰＫＧ１１３を管理するための情報で、ＦＭＰＫＧ  ＩＤ７０１、ＦＭＰＫＧ仮想容量７０２、ブロック容量７０３を含む。ＦＭＰＫＧ情報テーブル３０５は、ＦＭＰＫＧ毎に存在する。以下、あるＦＭＰＫＧ情報テーブルで管理されるＦＭＰＫＧを、管理対象ＦＭＰＫＧと呼ぶ。【００７１】
ＦＭＰＫＧ  ＩＤ７０１は管理対象ＦＭＰＫＧ１１３の識別子（パッケージＩＤと呼ぶ）である。ＦＭＰＫＧ仮想容量７０２は、管理対象ＦＭＰＫＧ１１３が形成するフラッシュボリュームの記憶領域のうち、ストレージコントローラ１０２に提供している領域のサイズを示し、本実施例ではこのサイズのことを「仮想容量」と呼ぶ。【００７２】
図８は、データ退避アドレステーブル３０６の形式を示す。データ退避アドレステーブル３０６は、ＦＭＰＫＧ１１３を管理するための情報であって、エリア番号８０１、退避フラグ８０２、退避先ＦＭＰＫＧ  ＩＤ８０３を含む。データ退避アドレステーブル３０６は、ＦＭＰＫＧ毎に存在する。以下、あるデータ退避アドレステーブルで管理されるＦＭＰＫＧを、管理対象ＦＭＰＫＧと呼ぶ。【００７３】
エリア番号８０１は、管理対象ＦＭＰＫＧのアドレス空間を所定サイズの領域に分割し、それぞれの領域に割り当てられた一意のＩＤである。エリアは、他のＦＭＰＫＧに退避するデータの単位である。一つのエリアは、例えば、ストライプブロックの整数倍に対応する。例えば，ストライプブロックサイズが１６ｋＢであるとき、エリアサイズを１６ＭＢなどとする。エリアのサイズを適切に選択することで、データ退避後のＩ／Ｏ性能の低下を適切に抑制できる。退避フラグ８０２は、管理対象ＦＭＰＫＧにおいて、対応するエリア番号８０１に格納されているデータが、退避先ＦＭＰＫＧ１１３に退避されているか否かを示す。【００７４】
退避先ＦＭＰＫＧ  ＩＤ８０３は、管理対象ＦＭＰＫＧにおいて、対応するエリア番号８０１に対応する退避先ＦＭＰＫＧ１１３を示す。退避先ＦＭＰＫＧ１１３がない場合、退避先ＦＭＰＫＧ  ＩＤ８０３は、無効値（ＮＵＬＬ）である。【００７５】
図９は、予備ＦＭＰＫＧ情報テーブル３０７の形式を示す。予備ＦＭＰＫＧ情報テーブル３０７は、予備のＦＭＰＫＧ１１３を管理するための情報で、予備ＦＭＰＫＧ  ＩＤ９０１、エリア番号９０３、退避フラグ９０４、退避元ＦＭＰＫＧ  ＩＤ９０５、使用可能容量９０２を含む。予備ＦＭＰＫＧ情報テーブル３０７は、いずれのＲＧ２０４にも属さないＦＭＰＫＧ１１３の数だけ存在している。以下、ある予備ＦＭＰＫＧ情報で管理されるＦＭＰＫＧを、管理対象予備ＦＭＰＫＧと呼ぶ。【００７６】
予備ＦＭＰＫＧ  ＩＤ９０１は、管理対象予備ＦＭＰＫＧの識別子（予備パッケージＩＤと呼ぶ）を示す。エリア番号９０３は、管理対象予備ＦＭＰＫＧのアドレス空間を所定サイズの領域に分割し、それぞれの領域に割り当てられた一意のＩＤを示す。退避フラグ９０４は、管理対象予備ＦＭＰＫＧにおける当該エリアに、データが退避済みか否かを示すエントリである。【００７７】
退避元ＦＭＰＫＧ  ＩＤ９０５は、管理対象予備ＦＭＰＫＧにおける当該エリアのデータが退避済みであった場合に、退避元のＦＭＰＫＧ  ＩＤが格納されている。また、使用可能容量９０２は、管理対象予備ＦＭＰＫＧに書き込み可能な容量を示す。つまり、管理対象予備ＦＭＰＫＧの論理容量から、退避データ容量を減算した値が格納される。【００７８】
図１０は、ＦＭＰＫＧ１１３から上位装置１１２に通知する障害通知１００１の形式を示す。障害通知１００１は、依頼種別１００２、消失データ容量１００３、消失データ情報１００４を含む。【００７９】
依頼種別１００２は、ＦＭＰＫＧ１１３が上位装置に対して依頼するデータ復元処理の種類を示す。消失データ容量１００３は、ＦＭＰＫＧ１１３の部分故障時に消失した、消失データ容量を示す。消失データ情報１００４は、消失データに関連したアドレスと、レングスの情報を示す。【００８０】
以下、図１１を用いてＦＭＰＫＧ１１３の構成を説明する。なお、複数のＦＭＰＫＧ１１３は、基本的な構成が同じである。ＦＭＰＫＧ１１３は、コントローラユニット１１０１と、複数のＦＭＣｈｉｐ１１１０Ａ〜１１１０Ｈとを有する。ＦＭＣｈｉｐ１１１０１１１０は、ＦＭＣｈｉｐ１１１０Ａ〜１１１０Ｈの内の、一つ又は複数のＦＭＣｈｉｐを意味する。【００８１】
コントローラユニット１１０１は、ＣＰＵ１１０６、主記憶１１０７、コントローラ１１０３、圧縮回路１１０８、バッファ１１０４、バッテリ１１０５を含んで構成される。コントローラユニット１１０１の内部要素は、バスを介して接続される。主記憶１１０７は、ＦＭＰＫＧ１１３を制御するためのプログラムを格納する領域及びデータを一時的に格納する領域を含む。ＣＰＵ１１０６は、主記憶１１０７に格納されたプログラムに従って所定の機能部として動作し、ＦＭＰＫＧ１１３を制御する。【００８２】
バッファ１１０４は、データを一時的に格納するキャッシュメモリである。バッテリ１１０５は、ＦＭＰＫＧ１１３への電源断時に、揮発性の主記憶１１０７やバッファ１１０４のデータを、不揮発性のＦＭＣＨｉｐ１１１０Ａ〜１１１０Ｈに格納するための電力を供給する。【００８３】
ストレージインターフェース１１０２は、上位装置１１２と通信を行うインタフェイスである。コントローラユニット１１０１は、ストレージインターフェース１１０２を介して上位装置１１２と接続されている。上位装置１１２は、例えばホスト計算機１０３やストレージコントローラ１０２である。【００８４】
フラッシュメモリインタフェイス１１０９は、ＦＭＣｈｉｐ１１１０Ａ〜１１１０Ｈと通信するためのインタフェイスである。コントローラユニット１１０１とＦＭＣｈｉｐ１１１０Ａ〜１１１０Ｈは、フラッシュメモリインタフェイス１１０９を介して接続される。【００８５】
コントローラユニット１１０１は、ＦＭＰＫＧ１１３の論理アドレス空間を上位装置１１２に提供する。論理アドレス空間には、ＦＭＰＫＧ１１３内の物理記憶領域が対応付けられる。ＦＭＰＫＧ１１３の外部に提供される論理記憶空間に対応する物理記憶領域をユーザ領域と呼ぶ。【００８６】
論理アドレス空間は、ＦＭＰＫＧ１１３で所定サイズの論理セグメントに分割して管理される。コントローラユニット１１０１は、上位装置１１２から論理アドレスを指定したリード／ライト要求を受信すると、論理アドレスから物理セグメントを特定し、データのリード／ライトを実行する。また、ＦＭＰＫＧ１１３に部分的に発生する障害を管理する。【００８７】
フラッシュメモリの物理記憶領域は、複数のブロックを含み、各ブロックは複数の物理セグメント（単にセグメントとも呼ぶ）を含む。ブロックはデータの消去の単位であり、セグメントはデータの書き込み及び読み出しの単位である。つまり、コントローラユニット１１０１は、ブロック単位でデータを消去し、セグメント単位でデータの書き込み及び読み出しを制御する。【００８８】
また、フラッシュメモリは、データの上書きができないという特性がある。このため、コントローラユニット１１０１は、あるセグメントに格納されているデータを更新するデータ（更新データ）を受信すると、更新データをデータが格納されていない空きセグメントへ書き込む。そして、論理セグメントと更新前の物理セグメントの対応関係を、その論理セグメントと更新後の物理セグメントの対応関係に変更する。このため、上位装置１１２はアクセス先の論理アドレスを変更する必要はない。【００８９】
コントローラユニット１１０１は、更新前のデータを無効データ、更新後のデータを有効データとして管理する。無効データが消去されると、無効データが格納されていたセグメントは空きセグメントとなり、データを書き込むことが可能になる。消去はブロック単位で行われる。ブロック内に有効データと無効データが混在している場合、コントローラユニット１１０１は有効データを他の空きセグメントにコピーして、そのブロック内のデータの消去を行う。この有効データのコピーとブロックの消去の処理を、ガベッジコレクションと呼ぶ。【００９０】
このようにフラッシュメモリでは、空きセグメントが存在しない場合、ブロック単位でデータの消去を行わなければ新たにデータを書き込むことができない。また、消去が実行されると、消去が終わるまでデータを書き込むことができないため書き込み性能が低下し、消去そのもののオーバーヘッドによる性能低下も発生する。そこで、フラッシュメモリを記憶媒体とする記憶ドライブは、更新データを書き込む領域（更新領域）が設けられる。【００９１】
なお、ユーザ領域と更新領域は物理的に区別されている必要はない。例えば、あるブロックがユーザ領域として使用された後に消去された場合、次は更新領域として使用されてもよい。【００９２】
図１２は、ＦＭＰＫＧ１１３の論理セグメント及び物理セグメントの構成を示す。コントローラユニット１１０１は、論理アドレス空間１２０１を、上位装置１１２に提供し、論理アドレス空間１２０１を所定のセグメント（例えば８ｋＢ）の論理セグメント１２０２に分割して管理する。【００９３】
コントローラユニット１１０１は、ブロックを、所定のセグメント（例えば８ｋＢ）の物理セグメント１２０３に分割して管理する。コントローラユニット１１０１は、物理セグメント１２０３を論理セグメント１２０２に割り当てる。【００９４】
ブロック１２０４は、所定数（例えば２５６個）の物理セグメント１２０３を含んで構成される。コントローラユニット１１０１は、ＦＭチップ１１１０に対するデータの読み書きを物理セグメント１２０３単位で行い、ＦＭチップ１１１０に対する消去をブロック１２０４単位で行う。以後、論理アドレスをＬＢＡと呼ぶ。【００９５】
図１３は、コントローラユニット１１０１の主記憶１１０７に格納される情報を示す。主記憶１１０７は、論物変換プログラム１３０１と、論物変換情報テーブル１３０２と、データ転送制御部制御プログラム１３０３と、入出力制御部制御プログラム１３０４と、オペレーティング・システム１３０５と、フラッシュストレージ制御プログラム１３０６と、ＦＭ管理情報テーブル１３０７を格納する。ＣＰＵ１１０６は、フラッシュストレージ制御プログラム１３０６に従ってＦＭＰＫＧ１１３の制御を実行する。【００９６】
図１４は、論物変換情報テーブル１３０２の形式を示す。論物変換情報テーブル１３０２は、論理セグメントごとのエントリを有する。論理セグメントのエントリは、当該論理セグメントの先頭を示すＬＢＡ１４０１と、当該論理セグメントを示す論理セグメント識別子１４０２と、当該論理セグメントに割り当てられている物理セグメントを示す物理セグメント識別子１４０３と、を有している。【００９７】
当該論理セグメントに物理セグメントが割り当てられていない場合、物理セグメント識別子１４０３は、未割り当てを示す。物理セグメント識別子は、例えば、ＦＭＰＫＧ１１３内のチップの位置を示すチップ番号と、当該チップ内のダイの位置を示すダイ番号と、当該ダイ内のブロックの位置を示すブロック番号と、当該ブロック内のワード線の位置を示すワード線番号と、当該ブロック内の当該物理セグメントの位置を示すセグメント番号との組み合わせを示す。【００９８】
なお、主記憶１１０７が、ＦＭＰＫＧ１１３内で一意の物理セグメント識別子と、チップ番号とダイ番号とブロック番号とワード線番号とセグメント番号との関連付けを示す関連情報を格納し、コントローラユニット１１０１が、関連情報に基づいて、物理セグメント識別子から、チップ番号とダイ番号とブロック番号とワード線番号とセグメント番号とを特定しても良い。【００９９】
図１５は、ＦＭ管理情報テーブル１３０７を示す。ＦＭ管理情報テーブル１３０７は、ＦＭＰＫＧ１１３内で利用可能な資源を管理する。ＦＭ管理情報テーブル１３０７は、有効Ｂｌｏｃｋポインタ１５０１と、無効Ｂｌｏｃｋポインタ１５０２と、有効Ｐｌａｎｅポインタ１５０３と、無効Ｐｌａｎｅポインタ１５０４と、有効Ｄｉｅポインタ１５０５と、無効Ｄｉｅポインタ１５０６と、有効Ｃｈｉｐポインタ１５０７と、無効Ｃｈｉｐポインタ１５０８とを有する。【０１００】
有効Ｂｌｏｃｋポインタ１５０１は、コントローラユニット１１０１がデータ格納先として利用可能なＢｌｏｃｋの番号を示す。無効Ｂｌｏｃｋポインタ１５０２は、寿命や故障によってデータ格納に利用できないＢｌｏｃｋの番号を示す。【０１０１】
有効Ｐｌａｎｅポインタ１５０３は、コントローラユニット１１０１がデータ格納先として利用可能なＰｌａｎｅの番号を示す。
無効Ｐｌａｎｅポインタ１５０４は、寿命や故障によってデータ格納に利用できないＰｌａｎｅの番号を示す。【０１０２】
有効Ｄｉｅポインタ１５０５は、コントローラユニット１１０１がデータ格納先として利用可能なＤｉｅの番号を示す。無効Ｄｉｅポインタ１５０６は、寿命や故障によってデータ格納に利用できないＤｉｅの番号を示す。【０１０３】
有効Ｃｈｉｐポインタ１５０７は、コントローラユニット１１０１がデータ格納先として利用可能なＣｈｉｐの番号を示す。無効Ｃｈｉｐポインタ１５０８は、寿命や故障によってデータ格納に利用できないＣｈｉｐの番号を示す。【０１０４】
ＦＭＰＫＧ１１３の物理記憶領域に障害が発生すると、その物理記憶領域に格納されたデータが消失する。コントローラユニット１１０１は、消失したデータを復元することができない。このため、コントローラユニット１１０１が、障害が発生した物理記憶領域に対応する論理アドレス領域を特定し、上位装置１１２に通知する。上位装置１１２は、ＲＧの他のＦＭＰＫＧ１１３のデータから、消失したデータを復元することができる。【０１０５】
しかし、一部に障害が発生したＦＭＰＫＧ１１３は、その物理記憶領域が故障により減少しているため、復元したデータを格納する空き領域が不足する場合がある。そこで、ストレージシステム１０１は、連続論理アドレス領域のデータを、予備ＦＭＰＫＧ１１３に退避することで、復元したデータを格納する物理記憶領域を部分故障ＦＭＰＫＧ１１３において確保した後、データを復元する。退避されるデータ量は、復元したデータを格納するために不足している領域以上であり、例えば、復元すべきデータ総量と同一又はそれより多いデータである。【０１０６】
ストレージシステム１０１は、退避したデータへのアクセスを予備ＦＭＰＫＧ１１３に、それ以外のデータのアクセスを部分故障ＦＭＰＫＧ１１３へと、アクセス先を切り替える。連続する論理アドレス領域のデータが予備ＦＭＰＫＧ１１３に退避されているので、故障領域に対応した離散的な論理アドレスのデータを予備ＦＭＰＫＧ１１３に退避する場合と比較して、シーケンシャルアクセス性能を低下させずにデータの冗長度復元が可能になる。【０１０７】
次に、上記管理情報を用いて、ストレージコントローラ１０２とＦＭＰＫＧ１１３が実行する処理の説明を行う。まず、ストレージコントローラ１０２で行われる処理について説明する。なおストレージコントローラ１０２で行われる処理は原則として、ストレージコントローラ１０２内のプロセッサ１０８がプログラムを実行することで実現される。また、そのプログラムは主記憶１０９内に格納されている。図１６は、主記憶１０９内に格納された本実施例に関するプログラムを示す。【０１０８】
本実施例に関するプログラムは、リード処理実行部１６０１、ライト要求受付部１６０２、ライトアフタ処理実行部１６０３、部分故障処理実行部１６０４を含む。これらのプログラムは、上位レベルのウェアレベリング技術、容量仮想化技術を実現する。なお、以下の説明においては、プログラム（リード処理実行部１６０１等）を主語とする処理の説明は、プログラム（リード処理実行部１６０１等）がＣＰＵ１０８で実行されることで、処理が行われることを意味する。【０１０９】
なお、すでに述べたが、本実施例に係るストレージシステム１０１では、ＦＭＰＫＧ１１３が、ウェアレベリング機能と下位レベルの容量仮想化機能を実行する。ただし別の実施例において、ウェアレベリングと下位レベルの容量仮想化機能をストレージコントローラ１０２が実行してもよい。その場合、ウェアレベリング機能と下位レベルの容量仮想化機能を実現するプログラムが、ストレージコントローラ１０２で実行される。【０１１０】
上位レベルのプログラム（上位レベルの容量仮想化機能を実現するプログラム等）と下位レベルのプログラム双方が、ストレージコントローラ１０２で実行されるので、プログラム間のインタフェイスが異なってくるが、上位レベルのプログラムが実行する内容は基本的に大きな相違はない。【０１１１】
本実施例は、下位レベルのウェアレベリング技術及び容量仮想化技術を実現するのはＦＭＰＫＧ１１３であることを前提に、リード処理実行部１６０１、ライト要求受付部１６０２、ライトアフタ処理実行部１６０３、部分故障処理実行部１６０４の処理フローを詳細に説明する。【０１１２】
本実施例は、ホスト計算機１０３からのリード要求又はライト要求で指定されるデータアクセス範囲は、フラッシュメモリのリード／ライト単位である仮想セグメント境界に一致していることを前提とする。ホスト計算機１０３から指定されるアクセス範囲が、仮想セグメント境界に一致していない場合でも、論理ボリュームはアクセス可能である。例えば、仮想セグメントの一部の領域がライト範囲に指定された場合、ＦＭＰＫＧ１１３は仮想セグメント全体を読み出し、指定された部分領域のみ更新し、仮想セグメント全体を書き込む。【０１１３】
＜ストレージコントローラによる故障検知＞
図１７は、部分故障処理実行部１６０４が、ＦＭＰＫＧ１１３の故障を検知するフローを示す。本フローは、あるＦＭＰＫＧ１１３に部分故障が生じたことを検知した場合に実施される。以降、故障を通知したＦＭＰＫＧ１１３のことを、部分故障ＦＭＰＫＧ１１３と呼ぶ。また、故障により消失したデータを消失データ、消失データの論理アドレスを消失データアドレスと呼ぶ。【０１１４】
ステップ１７０１において、部分故障処理実行部１６０４は、故障ＦＭＰＫＧ１１３から障害情報を受領する。
部分故障処理実行部１６０４が受領する障害情報は、消失データアドレスと、サイズと、コレクション種別とを含む。【０１１５】
ステップ１７０２において、障害情報を受領した部分故障処理実行部１６０４は、まず、コレクション種別情報を参照し、処理の内容を決定する。コレクション種別情報がコレクション依頼である場合（１７０２：ＹＥＳ）、部分故障処理実行部１６０４は、ステップ１７０３を実行する。【０１１６】
ステップ１７０３において、部分故障処理実行部１６０４は、ステップ１７０１で受領した消失データアドレスを元に、部分故障ＦＭＰＫＧ１１３に対してデータ復元処理を行う。データ復元処理は、通知されたアドレスに関連付けられたデータをＲＡＩＤ機構により復元し、部分故障ＦＭＰＫＧ１１３に書き戻す。これにより、消失データが復元され、データの冗長度が復元する【０１１７】
コレクションデータ種別が、コレクション依頼でない場合、つまり、他ドライブへのデータ退避依頼の場合（１７０２：ＮＯ）、ステップ１７０４において、部分故障処理実行部１６０４は、予備ＦＭＰＫＧ情報テーブル３０７に登録されている予備ＦＭＰＫＧ１１３から、所定の予備ＦＭＰＫＧ１１３を退避先として選択し、予備ＦＭＰＫＧ情報テーブル３０７の使用可能容量９０２を参照してその空き容量を取得する。退避先の選択方法は、図１８を参照して後述する。【０１１８】
複数のＦＭＰＫＧ１１３を退避先ＦＭＰＫＧ１１３として選択でもよいが、本実施例で、１つの予備ＦＭＰＫＧ１１３の場合について記述する。以降、退避先のＦＭＰＫＧ１１３を退避先ＦＭＰＫＧ１１３と呼び、退避先ＦＭＰＫＧ１１３へ退避するデータを退避データ、退避データの論理アドレスを退避データアドレスと呼ぶ。【０１１９】
ステップ１７０５において、部分故障処理実行部１６０４は、ステップ１７０４で取得した退避先空き容量と、ステップ１７０１で取得した退避データ量を比較する。退避データ量が小さい場合（１７０５：ＹＥＳ）、ステップ１７０６において、部分故障処理実行部１６０４は、データの退避処理を行う。処理内容は後述する。ステップ１７０６が完了した後、上位装置１１２は、部分故障ＦＭＰＫＧ１１３に対してステップ１７０３を行う。【０１２０】
一方、退避データ量が大きい場合（１７０５：ＮＯ）、故障ＦＭＰＫＧ１１３のデータを退避することができないため、部分故障処理実行部１６０４は、ステップ１７０７において、部分故障ＦＭＰＫＧ１１３を閉塞させ、ＦＭＰＫＧ１１３の交換を促す。【０１２１】
＜データ退避＞
次に、図１８を用いてデータ退避処理（１７０６）の詳細を説明する。ステップ１８０１において、部分故障処理実行部１６０４は、退避先ＦＭＰＫＧ１１３のＩＤを決定する。複数の予備ＦＭＰＫＧ１１３が存在する場合、部分故障処理実行部１６０４は、それらのうちの一台を選択する。退避先ＦＭＰＫＧ１１３として使用されているＦＭＰＫＧ１１３が存在する場合、部分故障処理実行部１６０４は、それを選択する。【０１２２】
ステップ１８０２において、部分故障処理実行部１６０４は、ステップ１７０１で取得した故障ＦＭＰＫＧ１１３のＩＤと、データ退避アドレステーブル３０６を用いて、退避データを決定する。具体的には、部分故障処理実行部１６０４は、データ退避アドレステーブル３０６に格納されている退避フラグ８０２と、予備ＦＭＰＫＧ１１３の予備ＦＭＰＫＧ情報テーブル３０７の退避フラグ９０４が共に"退避なし"を示すエリア番号を検索する。図８及び図９に示した例であれば、エリア１が選択される。エリア単位にデータを退避することで、その後のＩ／Ｏ性能の低下を抑制できる。【０１２３】
ステップ１８０２において選択した退避データのデータ量が、消失データ量以上である場合（１８０３：Ｙｅｓ）、ステップ１８０４が実行される。ステップ１８０１において選択した退避データのデータ量が、消失データ量よりも小さい場合（１８０３：Ｎｏ）、部分故障処理実行部１６０４は、更なる退避データ選択を試みるため、ステップ１８０２を実行する。消失データより大きい容量の退避データを選択できるまで繰り返す。選択されるエリアの番号（アドレス）は不連続でもよく、連続でもよい。【０１２４】
なお、上記例は、１台の故障ＦＭＰＫＧ１１３のデータを１台の退避先ＦＭＰＫＧ１１３に退避するが、複数台の故障ＦＭＰＫＧ１１３が、１台の退避先ＦＭＰＫＧ１１３を共有してもよい。逆に、１台の故障ＦＭＰＫＧ１１３に対して、複数台の退避先ＦＭＰＫＧ１１３を使用することも可能である。【０１２５】
ステップ１８０４において、部分故障処理実行部１６０４は、ステップ１８０１で取得した退避データと退避先ＦＭＰＫＧ１１３の情報に基づいて、退避データの退避先ＦＭＰＫＧ１１３へのコピーを実行する。退避データに、消失データが含まれる場合、当該消失データは、ＲＡＩＤ機構により復元されて、退避先ＦＭＰＫＧ１１３に格納される。これにより、消失データを他のＦＭＰＫＧ１１３に移動でき、消失データの論理アドレスによらず退避データを選択できる。【０１２６】
部分故障処理実行部１６０４は、退避データが部分故障ＦＭＰＫＧ内で対応付けられていたＬＢＡと同一となるように、退避先ＦＭＰＫＧ１１３のＬＢＡを退避データに対応付ける。これにより、ＲＡＩＤストライプラインの再構築が不要となる。【０１２７】
ステップ１８０４の後データ退避が完了した場合（１８０５：ＹＥＳ）、部分故障処理実行部１６０４は、ステップ１８０６において、データ退避アドレステーブル３０６と、予備ＦＭＰＫＧ情報テーブル３０７について、退避データに対応したエリア番号のエントリを更新する。【０１２８】
既に例示したように、エリア番号１を退避データとして選択する場合、部分故障処理実行部１６０４は、エリア番号１のエントリについて、退避フラグ８０２および退避フラグ９０４を"退避"に更新し、退避先ＦＭＰＫＧ  ＩＤ８０３に退避先ＦＭＰＫＧ１１３のＩＤを、退避元ＦＭＰＫＧ  ＩＤ９０５に、部分故障ＦＭＰＫＧのＩＤを、それぞれ格納する。加えて、使用可能容量９０２の値を更新する。【０１２９】
本処理によって、上位装置１１２による退避データへのアクセスが、退避先ＦＭＰＫＧ１１３へ発行されるようになる。退避データへのアクセス処理の詳細は後述する。ステップ１８０６の後、ステップ１８０７が実行される。ステップ１８０７において、部分故障処理実行部１６０４は、部分故障ＦＭＰＫＧ１１３から、退避データを削除する。本処理によって、部分故障ＦＭＰＫＧ１１３内部の未使用物理セグメントが増加するため、消失データの格納が可能になる。【０１３０】
ステップ１８０５において、退避先ＦＭＰＫＧ１１３、又は部分故障ＦＭＰＫＧ１１３に何らかの異常が起こった場合、データ退避が完了しない（１８０５：ＮＯ）。この時、ステップ１８０８が実行される。【０１３１】
ステップ１８０８において、部分故障処理実行部１６０４は、故障ＦＭＰＫＧ１１３と退避先ＦＭＰＫＧ１１３のどちらに異常が発生したかを特定する。退避先ＦＭＰＫＧ１１３が異常を検出していた場合（１８０８：退避先）、ステップ１８１０が実行される。【０１３２】
ステップ１８１０において、部分故障処理実行部１６０４は、異常を検出したＦＭＰＫＧ１１３の代わりに退避先ＦＭＰＫＧ１１３として選択できる他の予備ＦＭＰＫＧ１１３が存在するかを判定する。他の予備ＦＭＰＫＧ１１３が存在する場合（１８１０：ＮＯ）、部分故障処理実行部１６０４は、ステップ１８０３に戻る。【０１３３】
他の予備ＦＭＰＫＧ１１３が存在しない場合（１８１０：ＹＥＳ）、かつ、異常検出箇所が退避先ＦＭＰＫＧ１１３である場合（１８０８：退避元）、データの復元は不可能である。この場合、ステップ１８０９が実行される。【０１３４】
ステップ１８０９において、部分故障処理実行部１６０４は、復元の失敗処理を実行する。失敗処理は、例えば、部分故障ＦＭＰＫＧ１１３を閉塞させ、管理端末１０４を介して、部分故障ＦＭＰＫＧ１１３の交換をユーザに推奨する。【０１３５】
上記例は、消失データ以上の量のデータを予備ＦＭＰＫＧ１１３に退避する。他の例は、部分故障ＦＭＰＫＧ１１３の残予備領域容量（予備領域の空き容量）と消失データサイズとに基づき、退避するデータ量を決定してもよい。例えば、部分故障処理実行部１６０４は、部分故障ＦＭＰＫＧ１１３から残予備領域容量の情報を取得し、消失データ量と残予備領域容量と差分に所定値（０でもよい）を加算した量のデータを退避する。【０１３６】
＜ホストリード＞
図１９を用いて、リード処理実行部１６０１の処理フローを詳細に述べる。リード処理実行部１６０１は、ストレージコントローラ１０２がホスト計算機１０３からリード要求を受け付けたときに、実行される。【０１３７】
ステップ１９０１において、リード処理実行部１６０１（ＣＰＵ１０８）は、受け取ったリード要求で指定されたリード対象領域のアドレスから、リード対象領域に対応する仮想ページの仮想ページ＃と仮想ページ内の相対アドレスを計算する。【０１３８】
ステップ１９０２において、リード処理実行部１６０１は、リード対象データが、キャッシュメモリ（主記憶１０９）に格納されているか（ヒットしているか）をチェックする。これは、公知の技術である。ヒットしている場合（ステップ１９０２：ＹＥＳ）、次にステップ１９１０が行われる。ヒットしていない場合（ステップ１９０２：ＮＯ）、次にステップ１９０４が行われる。【０１３９】
ステップ１９０３において、リード対象データをキャッシュメモリにロードする必要がある。リード処理実行部１６０１は、論理ボリューム情報テーブル３０１の実ページポインタ４０４を参照することで、リード対象仮想ページに割り当てられている実ページの実ページ情報テーブル３０２を特定する。リード対象仮想ページに割り当てられた実ページを、以下の説明では「リード対象実ページ」と呼ぶ。【０１４０】
ステップ１９０４において、リード処理実行部１６０１は、特定された実ページ情報テーブル３０２のＲＧ  ＩＤ５０１、実ページアドレス５０２から、リード対象実ページが属するＲＧ２０４とリード対象実ページ（の先頭）が位置するＲＧ２０４内アドレスを算出する。【０１４１】
ステップ１９０５において、リード処理実行部１６０１は、ステップ１９０１で得た仮想ページ内の相対アドレスとＲＧ  ＲＡＩＤタイプ６０２から、リード対象データの格納されている実ページ上の位置（具体的には実ページ内相対アドレス）を計算する。リード処理実行部１６０１は、計算した実ページ内相対アドレス、ＲＧ  ＲＡＩＤタイプ６０２、ＦＭＰＫＧポインタ６０５を用いて、リード対象データの格納されているＦＭＰＫＧ１１３のＩＤ、及びそのＦＭＰＫＧ１１３内のアドレスを特定する。【０１４２】
ステップ１９０６において、リード処理実行部１６０１は、ステップ１９０５で取得したＦＭＰＫＧ１１３  ＩＤを用いて、該当するＦＭＰＫＧ１１３  ＩＤに関連したデータ退避アドレステーブル３０６を参照する。次に、ステップ１９０５で取得したＦＭＰＫＧ１１３内のアドレスが所属する、エリア番号を特定する。【０１４３】
特定したエリア番号に対応した退避フラグが「退避」を示している場合、リード処理実行部１６０１は、対応する退避先ＦＭＰＫＧ１１３  ＩＤを取得し、リードするＦＭＰＫＧ１１３のＩＤを、対応する退避先ＦＭＰＫＧ１１３  ＩＤで置換する。特定したエリア番号に対応した退避フラグが「退避なし」を示していた場合、リード処理実行部１６０１は、何も行わない。【０１４４】
ステップ１９０７において、  リード処理実行部１６０１は、ステップ１９０６で特定したＦＭＰＫＧ１１３のアドレスに対して、リード要求を発行する。ステップ１９０８において、リード処理実行部１６０１は、ＦＭＰＫＧ１１３からデータが送られてくるのを待つ。【０１４５】
ステップ１９０９において、リード処理実行部１６０１は、主記憶１０９に、リード対象データを格納するための領域を確保し、ＦＭＰＫＧ１１３から送られてきたデータを、確保された領域に格納する。この後、ステップ１９１０が行われる。ステップ１９１０において、リード処理実行部１６０１は、リード対象データを主記憶１０９から読み出してホスト計算機１０３へ送り、処理を完了する。【０１４６】
＜ホストライト＞
図２１は、ライト要求受付部１６０２の処理フローを示す。ライト要求受付部１６０２は、ストレージコントローラ１０２がホスト計算機１０３からライト要求を受け付けたときに、実行される。【０１４７】
ステップ２０１において、ライト要求受付部１６０２（ＣＰＵ１０８）は、受け取ったライト要求で指定されたライト対象領域のアドレスから、ライト対象領域に対応する仮想ページの仮想ページ＃と仮想ページ内の相対アドレスを計算する。【０１４８】
ステップ２１０２において、ライト要求受付部１６０２は、ライト要求で指定されている論理ボリュームの論理ボリューム情報テーブル３０１を特定する。そしてライト要求受付部１６０２は、ステップ２１０１で特定された仮想ページに実ページが割り当てられているかを、特定した論理ボリューム情報テーブル３０１内の実ページポインタ４０４を参照することでチェックする。実ページが割り当てられている場合、ステップ２１０３はスキップされ、次にステップ２１０４が実行される。【０１４９】
ステップ２１０３において、ライト要求受付部１６０２は、ライト対象領域に対応する仮想ページに実ページを割り当てる。ライト要求受付部１６０２は、ステップ２１０２で特定された論理ボリューム情報テーブル３０１のＲＡＩＤタイプ４０３と、各ＲＧ情報テーブル３０４のＲＧ  ＲＡＩＤタイプ６０２や空き実ページ数６０４等を参照することで、どのＲＧ２０４の実ページを割り当てるかを決定する。【０１５０】
ライト要求受付部１６０２は、決定されたＲＧ２０４の空き実ページ管理情報ポインタ３０３を参照して、先頭の空き実ページポインタ４０４を、ライト対象領域が属する仮想ページの実ページポインタ４０４が示すように変更する。これにより、ライト対象領域が属する仮想ページに実ページを割り当てたことになる。【０１５１】
なお、空き実ページ管理情報ポインタ３０３は、次の実ページ情報テーブル３０２（仮想ページに割り当てた実ページの実ページ情報テーブル３０２の中の空きページポインタ５０３が示す実ページ情報テーブル３０２）を示すように変更される。さらに、仮想ページに割り当てた実ページの実ページ情報テーブル３０２の中の空きページポインタ５０３は、ヌルにされる。【０１５２】
ライト要求受付部１６０２は、当該実ページに対応するＲＧ情報テーブル３０４の空き実ページ数６０４の数を減らす。本実施例は、ライト要求を受け付けたときに仮想ページを実ページに割り当てるが、この割り当て処理は、ＦＭＰＫＧ１１３へデータを格納するまでに実行されればよい。【０１５３】
ステップ２１０４において、ライト要求受付部１６０２は、ホスト計算機１０３から当該ライト要求で指定されたライトデータを、主記憶１０９に格納する。主記憶１０９にライトデータを格納する際には、ライト要求受付部１６０２は、そのライトデータの書き込み位置情報（ＦＭＰＫＧ１１３のＩＤ及び、フラッシュボリューム上アドレス（ＬＢＡ）等）を付加して格納する。その後、処理を終了する。【０１５４】
ＲＧ２０４は、ＲＡＩＤ構成を有するので、主記憶１０９上に格納したライトデータに対応する冗長データを生成する必要がある。冗長データは、ライトデータの格納されたデータストライプブロックと同一ストライプラインに属するパリティストライプブロックに格納される。これは、公知の方法であるので、詳細に説明はしない。冗長データの生成は、例えばステップ２１０４の直後に行われ。ＣＰＵ１０８は冗長データを作成すると、一旦主記憶１０９に冗長データを格納する。【０１５５】
先に述べたとおり、仮想ページ上のアドレスから、データを格納するデータストライプブロックに加えて、そのデータに対応する冗長データを格納すべきパリティストライプブロックも一意に定まる。退避データがあった場合でも、リード処理実行部１６０１の処理フローで述べたのと同様にデータ退避アドレステーブル３０６を参照することで、退避先ＦＭＰＫＧ１１３のアドレスを取得することが可能です。なお、主記憶１０９に冗長データを格納する際、ライトデータと同様に、ＣＰＵ１０８は書き込み位置情報を冗長データに付加する。【０１５６】
ライトデータ、冗長データは、ライトアフタ処理実行部１６０３によって、ＦＭＰＫＧ１１３に書き込まれるが、ＦＭＰＫＧ１１３にとって、いずれもＦＭＰＫＧ１１３へ書き込むデータなので、ライトデータと冗長データとを区別する必要はない。そのため、ライトアフタ処理実行部１６０３は、ライトデータを書き込む場合と冗長データを書き込む場合とで、同様の処理を行う。【０１５７】
＜デステージ＞
図２２は、ライトアフタ処理実行部１６０３の処理フローを示す。ライトアフタ処理実行部１６０３は、ＣＰＵ１０８が所定の契機で実行する。例えば、定期的にライトアフタ処理実行部１６０３が実行されてもよい。主記憶１０９上のダーティデータ量が所定量を超過した時点でライトアフタ処理実行部１６０３が実行されてもよい。【０１５８】
ライトアフタ処理実行部１６０３は、ホスト計算機１０３から受け取ったライトデータ又は冗長データを、ＦＭＰＫＧ１１３に書き込む処理を実行する。ライトアフタ処理実行部１６０３は、ライトデータ及び冗長データを、ＦＭＰＫＧ１１３に書き込むべきデータとして区別せずに処理する。【０１５９】
ステップ２２０１において、ライトアフタ処理実行部１６０３（ＣＰＵ１０８）は、主記憶１０９をサーチして、ＦＭＰＫＧ１１３に書き込むべきデータを決定する。ライトアフタ処理実行部１６０３は、見出したデータに付与されている書き込み位置情報を取り出す。ここでは、ライトアフタ処理実行部１６０３によって書き込まれる領域の範囲が、複数のＦＭＰＫＧ１１３に跨らない例を説明する。【０１６０】
ステップ２２０２において、ライトアフタ処理実行部１６０３は、書き込み位置情報に基づいて、対象のＦＭＰＫＧ１１３にライト要求を発行する。ライトアフタ処理実行部１６０３は、冗長データを書き込む場合には、この冗長データを重複排除の対象にしない旨の指示を出してもよい。【０１６１】
ステップ２２０３において、ライトアフタ処理実行部１６０３は、ライト要求の完了を待つ。ライトアフタ処理実行部１６０３は、ＦＭＰＫＧ１１３から当該ライト要求に関する終了報告を受信すると、処理を終了する。【０１６２】
＜ＦＭＰＫＧによる障害検知＞
次に、部分故障ＦＭＰＫＧ１１３内部のコントローラユニット１１０１で行われる処理について説明する。なおコントローラユニット１１０１で行われる処理は原則として、コントローラユニット１１０１内のプロセッサ１１０６がプログラムを実行することで実現される。また、そのプログラムは主記憶１１０７内に格納されている。【０１６３】
図１３は、主記憶１１０７内に格納された本実施例に関するプログラムを示す本実施例に関するプログラムは、障害検知プログラム１３０８である。なお以下の説明において、プログラム（障害検知プログラム１３０８）を主語とする、処理は、そのプログラム（障害検知プログラム１３０８）がプロセッサ１１０６で実行されることで実行されることを意味する。【０１６４】
図２０は、あるＦＭＰＫＧ１１３のコントローラユニット１１０１による、ＦＭＰＫＧ１１３内部の故障を検知する障害検知プログラムの処理を示す。この処理が実行される契機は、例えば、上位装置１１２からのＩ／Ｏ要求に対する処理の結果、Ｉ／Ｏ処理が完了しなかった場合である。ただし、これは実行契機を限定するものではなく、上位装置１１２からのＩ／Ｏ要求が無くとも、定期的に実行してもよいし、ＦＭＰＫＧ１１３の内部処理で実行されてもよい。【０１６５】
ステップ２００１において、障害検知プログラム１３０８は、ある物理領域に格納されたデータのリードを試みる。この物理領域は、例えば、直前の上位装置１１２からのＩ／Ｏ処理でアクセスされた物理ページである。一定時間内でＦＭＰＫＧ１１３内の全ての領域にアクセスするように予めスケジュールされた領域でもよい。効率的にＦＭＰＫＧ１１３内全てにアクセスが可能なよう、ブロック単位で間引かれていてもよい。【０１６６】
ステップ２００１の結果、格納されたデータが全て正しくリードできた場合（２００２：ＮＯ）、故障は当該範囲に存在せず、診断処理は終了する。一方、ステップ２００１の処理の結果、格納されたデータの一部が正しく読めなかった場合、（２００２：ＹＥＳ）、その物理領域は故障とみなされ、ステップ２００３が実行される。【０１６７】
ステップ２００３において、より上位の物理単位に同様の故障がないかどうかを判定するために、障害検知プログラム１３０８は、障害範囲検索を行う。障害検知プログラム１３０８は、障害検知プログラム１３０８は、例えば、故障ページと同じブロックから数ページを読む又は同じプレーンを共有するブロックから数ページを読む。この処理の結果、物理障害範囲が特定される。その後、障害検知プログラム１３０８は、物論変換によって論理アドレスと、レングス情報が特定し、故障によって失われたデータ量を特定する。【０１６８】
障害検知プログラム１３０８は、この処理で判明した故障部位を、ＦＭ管理情報テーブル１３０７に登録する。故障範囲がＢｌｏｃｋであれば、故障Ｂｌｏｃｋ番号が有効Ｂｌｏｃｋポインタ１５０１から削除され、無効Ｂｌｏｃｋポインタ１５０２に登録される。【０１６９】
故障範囲がＰｌａｎｅ場合、上記有効Ｂｌｏｃｋポインタ１５０１及び無効Ｂｌｏｃｋポインタ１５０２に加えて、有効Ｐｌａｎｅポインタ１５０３及び無効Ｐｌａｎｅポインタ１５０４にも情報を削除及び登録される。【０１７０】
Ｄｉｅ、Ｃｈｉｐの場合も同様に、当該の故障範囲のポインタ登録に加えて、下位範囲の故障範囲も登録される。障害範囲特定後、消失データの論理アドレス取得を行う。論理アドレス取得は、例えば、論物変換情報テーブル１３０２を用いて行う。【０１７１】
ステップ２００４において、障害検知プログラム１３０８は、消失データ量（障害範囲）と空き予備領域を比較する。空き予備領域から消失データ量を引いた値が所定値（例えば０）以上である場合（２００４：ＮＯ）、ステップ２００５が実行される。【０１７２】
ステップ２００５において、障害検知プログラム１３０８は、上位装置１１２に対して、データ復元依頼を発行する。部分故障ＦＭＰＫＧ１１３が予め持っている予備領域をユーザデータ用に割り当てることで、故障データの復元が可能である。従って、データ復元依頼発行に先立って、障害検知プログラム１３０８は、消失データ量と、消失データの論理アドレスを基に、障害通知１００１を作成する。障害検知プログラム１３０８は、依頼種別１００２に、ＲＡＩＤによる自ＦＭＰＫＧ１１３へのデータ復元依頼を設定し、消失データ情報１００４に、消失データの論理アドレスとレングスを設定する。【０１７３】
空き予備領域から消失データ量を引いた値が所定値（例えば０）より小さい場合（２００４：ＹＥＳ）、障害検知プログラム１３０８は、ステップ２００６を実行する。ステップ２００６において、障害検知プログラム１３０８は、上位装置１１２に対して、データ退避依頼を発行する。【０１７４】
データ退避依頼に先立って、障害検知プログラム１３０８は、消失データ量と、消失データの論理アドレスを基に、障害通知１００１を作成する。障害検知プログラム１３０８は、依頼種別１００２に、ＲＡＩＤによる退避先ＦＭＰＫＧ１１３へのデータ復元依頼を設定し、消失データ情報１００４に、消失データの論理アドレスとレングスを設定する。【０１７５】
上記例は、ＦＭＰＫＧ１１３がデータ退避／復元の判定を実行するが、代わりに、ストレージコントローラ１０２がデータ退避／復元の判定を実行してもよい。ストレージコントローラ１０２は、ＦＭＰＫＧ１１３から消失データの情報に加え、空き予備領域容量の情報を取得する。
【実施例２】
【０１７６】
本実施例は、１台のＦＭＰＫＧを論理アドレスで分割して管理する。図２３を用いて、フラッシュボリューム（ＦＭＰＫＧ）、仮想ＦＭＰＫＧ（以降、ＶＦＭＰＫＧと記載）、及び実ページの関係について説明する。図２３は、フラッシュボリューム１１５Ａ〜１１５Ｅ、ＶＦＭＫＧ２３０１Ａ〜２３０１Ｈ、実ページ２０３Ａを例示する。以下において、ＶＦＭＫＧ２３０１は、１又は複数のＶＦＭＫＧである。【０１７７】
本実施例は、１台のＦＭＰＫＧ１１３のフラッシュボリューム１１５を、論理アドレスで複数の領域に分割し、分割した領域ごとに仮想的なＦＭＰＫＧ番号であるＶＦＭＰＫＧ番号を付与する。上位装置１１２は、分割した一つの領域を１台のＦＭＰＫＧと認識する。上位装置１１２は、複数のＶＦＭＰＫＧ２３０１によってＲＡＩＤを構成する。本実施例は、ＶＦＭＰＫＧ単位で、データを退避させる。これにより、退避後のＩ／Ｏ性能の低下を効果的に抑制できる。なお、本実施例は、実施例１におけるエリアの情報は不要である。【０１７８】
図２４は、ＶＦＭＰＫＧ管理テーブル２４０１を示す。ＶＦＭＰＫＧ管理テーブル２４０１は主記憶１０９に格納されている。ＶＦＭＰＫＧ管理テーブル２４０１の数は、ＦＭＰＫＧ１１３の数と一致する。【０１７９】
図２４に示すように、ＶＦＭＰＫＧ管理テーブル２４０１は、ＦＭＰＫＧ番号２５０１と、開始アドレス２５０２と、終端アドレス２５０３と、及び、ＶＦＭＰＫＧ番号２５０４とを有する。開始アドレス２５０２及び終端アドレス２５０３は、ＶＦＭＰＫＧ２３０１が、所属するＦＭＰＫＧ１１３のどのアドレス範囲から切り出されたかを示す。【０１８０】
以下に、部分故障発生時のデータ退避処理におけるストレージシステムの動作を説明する。動作の大部分は実施例１と共通しており、以下では、差分について主に説明する。また、実施例１で記述したＦＭＰＫＧ１１３は、本実施例においては、特に言及のない限り、ＶＦＭＰＫＧ２３０１を指す。【０１８１】
図２５は、部分故障処理実行部１６０４が、故障ＶＦＭＰＫＧ２３０１の退避データを退避先ＶＦＭＰＫＧ２３０１へ退避するフローを示す。本フローは、実施例１に記載のステップ１７０６において実行される。【０１８２】
ステップ２６０１において、部分故障処理実行部１６０４は、実施例１で記載したステップ１７０１において取得した、故障ＦＭＰＫＧ１１３のＩＤと、退避データ量と、予備ＦＭＰＫＧ情報テーブル３０７とを用いて、退避データと退避先ＶＦＭＰＫＧ２３０１を決定する。本例において、一つの予備ＦＭＰＫＧ情報テーブル３０７は、一つの予備ＶＦＭＰＫＧ２３０１の情報を示し、エリア番号の欄が省略される。退避データ情報テーブル３０６においてもエリア番号欄は省略される。【０１８３】
図２６を用いて、ステップ２６０１の詳細を述べる。ステップ２７０１において、部分故障処理実行部１６０４は、予備ＦＭＰＫＧ情報テーブル３０７を用いて、退避先ＶＦＭＰＫＧ２３０１を選択する。ステップ２７０２において、部分故障処理実行部１６０４は、部分故障ＦＭＰＫＧ１１３に含まれるＶＦＭＰＫＧ番号の中から一つのＶＦＭＰＫＧ番号を選択する。選択したＶＦＭＰＫＧ２３０１を、退避元候補ＶＦＭＰＫＧ２３０１と呼ぶ。【０１８４】
ステップ２７０３において、次に部分故障処理実行部１６０４は、ＲＧ情報テーブル３０４を用いて、退避元候補ＶＦＭＰＫＧ２３０１が所属するＲＧ２０４を特定し、退避元候補ＶＦＭＰＫＧ２３０１と同じＲＧ２０４を構成するＶＦＭＰＫＧ番号２５０４のリストを取得する。ステップ２７０４において、部分故障処理実行部１６０４は、取得したＶＦＭＰＫＧのＩＤが、退避先ＦＭＰＫＧ１１３に含まれるかどうかを、退避先ＦＭＰＫＧ１１３に関連したＶＦＭＰＫＧ管理テーブル２４０１を用いて判定する。【０１８５】
取得したＶＦＭＰＫＧ番号２５０４のリストに含まれるＶＦＭＰＫＧ番号２５０４の１つ以上が、退避先ＦＭＰＫＧ１１３に含まれている場合（２７０４：ＹＥＳ）、退避元候補ＶＦＭＰＫＧ２３０１のデータは、退避先ＦＭＰＫＧ１１３に退避できない。退避先ＦＭＰＫＧ１１３が故障した場合、退避元候補ＶＦＭＰＫＧ２３０１が所属するＲＧ２０４において、２点障害となるためである。【０１８６】
そのため、部分故障処理実行部１６０４は、新たに退避元候補ＶＦＭＰＫＧ２３０１を選択し直す。なお、部分故障処理実行部１６０４は、この再選択を、規定回数で打ち切り、処理を終了してもよい。その場合、部分故障処理実行部１６０４は、退避失敗として失敗処理を行う。【０１８７】
取得したＶＦＭＰＫＧ番号２５０４のリストに含まれるＶＦＭＰＫＧ番号２５０４が全て、退避ＦＭＰＫＧ１１３から生成されたものでない場合（２７０４：ＮＯ）、ステップ２７０５が実行される。ステップ２７０５において、部分故障処理実行部１６０４は、退避元候補ＶＦＭＰＫＧ２３０１を、退避元ＶＦＭＰＫＧ２３０１として確定する。【０１８８】
ステップ２７０６において、部分故障処理実行部１６０４は、退避元ＶＦＭＰＫＧ２３０１として確定した１ないしは複数のＶＦＭＰＫＧ２３０１の容量と、消失データの容量を比較し、消失データの容量の方が大きい場合（２７０６：ＮＯ）、故障ＦＭＰＫＧ１１３から、新たな退避元候補ＶＦＭＰＫＧ２３０１を選択するため、ステップ２７０１に戻る。退避元ＶＦＭＰＫＧ２３０１の方が大きい場合（２７０６：ＹＥＳ）、退避元ＶＦＭＰＫＧ２３０１の選択を終了する。【０１８９】
次に、再び図２５を用いて、ステップ２６０２について述べる。ＲＧ情報更新２６０２において、部分故障処理実行部１６０４は、ステップ２６０１で決定した退避元ＶＦＭＰＫＧ番号と、退避先ＶＦＭＰＫＧ番号を基に、退避元ＶＦＭＰＫＧ２３０１の所属していたＲＧ情報テーブル３０４において、退避元ＶＦＭＰＫＧ２３０１を示していたＦＭＰＫＧポインタ６０５のエントリを、退避先ＶＦＭＰＫＧ番号で置換する。【０１９０】
上述のように、ＶＦＭＰＫＧ単位でデータを退避することによって、データ退避後のＩ／Ｏ性能の低下を効果的に抑制することができる。【０１９１】
＜ホストリード＞
図２７を用いて、リード処理実行部１６０１の処理フローを詳細に述べる。リード処理実行部１６０１は、ホスト計算機１０３から、ストレージコントローラ１０２が、リード要求を受け付けたときに実行される。【０１９２】
実施例１は、ステップ１９０６において、退避先ＦＭＰＫＧ１１３のＩＤを取得する。本実施例では、既にＲＧ情報テーブル３０４に含まれるＦＭＰＫＧポインタ６０５が、退避ＶＦＭＰＫＧ２３０１に書き換えられているため、データが格納されているＶＦＭＰＫＧを一意に特定することが可能であり、ステップ１９０６は不要である。【０１９３】
代わりに、リード処理実行部１６０１は、ステップ２８０１を実行する。ステップ２８０１において、リード処理実行部１６０１は、ＶＦＭＰＫＧ管理テーブル２４０１を用いて、ＶＦＭＰＫＧ２３０１内相対アドレスを、ＦＭＰＫＧ１１３内相対アドレスへと変換する。具体的には、ＶＦＭＰＫＧ２３０１内相対アドレスに、当該ＶＦＭＰＫＧ２３０１の開始アドレス２５０２を足し合わせた値が、ＦＭＰＫＧ１１３内相対アドレスである。以降は実施例１に示すものと同様である。また、ホストライトも実施例１と同様のため、その説明を省略する。
【実施例３】
【０１９４】
実施例１及び実施例２は、データ退避アドレステーブル３０６が主記憶１０９に格納されているが、本実施例では、データ退避アドレステーブル３０６は主記憶１１０７に格納される。本実施例においては、実施例１、２で述べた要素に加えて、データ退避アドレステーブル３０６及び予備ＦＭＰＫＧ情報テーブル３０７が、主記憶１１０７に格納される。【０１９５】
本実施例にける、部分故障発生時のデータ退避処理におけるストレージシステム１０１の動作を説明する。なお、動作の大部分は、実施例１及び実施例２に記載のものと共通しており、以下では、差分について主に説明する。差分動作は、実施例１、２で言及した、データ退避アドレステーブル３０６及び予備ＦＭＰＫＧ情報テーブル３０７の参照と更新である。【０１９６】
本実施例においてこれらはＦＭＰＫＧ１１３内の主記憶１１０７に格納されているため、ストレージシステム１０１において実行される各プログラムは、これらの参照及び更新コマンドをＦＭＰＫＧ１１３に発行し、その結果を受領することで参照と更新を実施する。【０１９７】
＜ホストリード＞
図２８を用いて、リード処理実行部１６０１の処理フローを詳細に述べる。リード処理実行部１６０１は、ホスト１０３から、ストレージコントローラ１０２が、リード要求を受け付けたときに実行される。実施例１及び実施例２は、それぞれステップ１９０６及びステップ２８０１において、退避先ＦＭＰＫＧ１１３  のＩＤを取得するが、本実施例は省略する。【０１９８】
代わりに、ステップ１９０７にてリード要求を発行したＦＭＰＫＧ１１３からの応答において、要求データではなく、退避ＦＭＰＫＧ  ＩＤが受領される場合がある（ステップ３００１：ＮＯ）。この時、ステップ３００２が実施される。ステップ１９０７において、リード要求を発行したＦＭＰＫＧ１１３からの応答により要求データが受領された場合、実施例１、２と同様の処理が実行されるため、説明を省略する。【０１９９】
ステップ３００２において、リード処理実行部１６０１は、ステップ１９０５で取得したアドレスを、ステップ３００１において受領した退避ＦＭＰＫＧ  ＩＤで置換し、再度ステップ１９０７を実行する。これにより、退避データの受領が可能となる。【０２００】
＜デステージ＞
図２９は、ライトアフタ処理実行部１６０３の処理フローである。ライトアフタ処理実行部１６０３は、ＣＰＵ１０８により所定の契機で実行される。例えば、定期的にライトアフタ処理実行部１６０３が実行されてもよい。主記憶１０９上のダーティデータ量が所定量を超過した時点でライトアフタ処理実行部１６０３が実行されてもよい。【０２０１】
ステップ２２０３において、ライトアフタ処理実行部１６０３は、ライト要求の完了を待つ。ライトアフタ処理実行部１６０３は、ＦＭＰＫＧ１１３から当該ライト要求に関する終了報告が返却されると（ステップ３１０１：ＹＥＳ）、処理を終了する。【０２０２】
ステップ２２０３の後、ＦＭＰＫＧ１１３から当該ライト要求に関連する、退避ＦＭＰＫＧ  ＩＤが返却されることがある（ステップ３１０１：ＮＯ）。これは、指定されたアドレスのデータが、退避データとして別のＦＭＰＫＧ１１３に格納されていることを示す。そこで、ライトアフタ処理実行部１６０３は、次にステップ３１０２を実行する。【０２０３】
ステップ３１０２において、ライトアフタ処理実行部１６０３は、ステップ２２０１で取得した書き込み位置情報を、ステップ３１０１で受領した退避ＦＭＰＫＧ  ＩＤで置換する。その後、ライトアフタ処理実行部１６０３は、再度ステップ２２０２を実行する。これにより、退避ＦＭＰＫＧ１１３へのデータライトが可能になる。【０２０４】
＜ＦＭＰＫＧ内部処理＞
次に、ＦＭＰＫＧ１１３内のコントローラユニット１１０１で行われる処理について説明する。コントローラユニット１１０１で行われる処理は原則として、コントローラユニット１１０１内のプロセッサ１１０６がプログラムを実行することで実現される。また、そのプログラムは主記憶１１０７内に格納されている。主記憶１１０７内に格納された本実施例に関するプログラムは、図１３に示されている。【０２０５】
本実施例に関するプログラムは、フラッシュストレージ制御プログラム１３０６、入出力制御部制御プログラム１３０４、論物変換プログラム１３０１である。なお以下の説明においては、プログラム（フラッシュストレージ制御プログラム１３０６等）を主語とする処理は、そのプログラム（フラッシュストレージ制御プログラム１３０６等）がプロセッサ１１０６で実行されることで実現されることを意味する。【０２０６】
図３０は、本実施例におけるＦＭＰＫＧ１１３内部のＩ／Ｏ処理フローを示す。ステップ３２０１において、入出力制御部制御プログラム１３０４は、上位装置１１２からＩ／Ｏコマンドを受領する。Ｉ／Ｏコマンドは、主に、リードコマンド又はライトコマンドである。以下では、リードコマンドの例を説明する。受領したコマンドは、ＬＢＡ情報を含む。【０２０７】
ステップ３２０２において、論物変換プログラム１３０１は、入出力制御部制御プログラム１３０４が受領したコマンドに含まれるＬＢＡを基に、データ退避アドレステーブル３０６を参照し、当該ＬＢＡに関連するデータが、退避データか否かを判定する。【０２０８】
退避データでない場合（ステップ３２０３：ＮＯ）、当該ＬＢＡに関連するデータは、自ＦＭＰＫＧ１１３内に格納されている。そのため、論物変換プログラム１３０１によってステップ３２０６が実行される。ステップ３２０６において、論物変換プログラム１３０１は、ＬＢＡを物理セグメントアドレスへ変換する。本処理は公知であるため、説明を省略する。【０２０９】
ステップ３２０７において、フラッシュストレージ制御プログラム１３０６は、ステップ３２０６で取得した物理セグメントアドレスを用いて、物理セグメントに格納されたデータを読みだす。本処理は公知であるため、説明を省略する。ステップ３２０８において、入出力制御部制御プログラム１３０４は、ステップ３２０７で取得したデータを上位装置１１２に送信し、完了応答を通知する。本処理は公知であるため、説明を省略する。【０２１０】
ステップ３２０３において、退避データである場合（ステップ３２０３：ＹＥＳ）、当該ＬＢＡに関連するデータは、退避ＦＭＰＫＧ１１３内に格納されている。そのため、論物変換プログラム１３０１によってステップ３２０４が実行される。【０２１１】
ステップ３２０４において、論物変換プログラム１３０１は、入出力制御部制御プログラム１３０４が受領したコマンドに含まれるＬＢＡを基に、データ退避アドレステーブル３０６を参照し、当該ＬＢＡに対応する退避先ＦＭＰＫＧ  ＩＤ８０３を取得する。ステップ３２０５において、入出力制御部制御プログラム１３０４は、ステップ３２０４で取得したデータを上位装置１１２に送信し、完了応答を通知する。【０２１２】
以上のように、本実施例によれば、ストレージコントローラ１０２の負荷を低減することができる。【０２１３】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。【０２１４】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。【０２１５】
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１Ａ】
2018142622.tif 000003
【図１Ｂ】
2018142622.tif 000004
【図２】
2018142622.tif 000005
【図３】
2018142622.tif 000006
【図４】
2018142622.tif 000007
【図５】
2018142622.tif 000008
【図６】
2018142622.tif 000009
【図７】
2018142622.tif 000010
【図８】
2018142622.tif 000011
【図９】
2018142622.tif 000012
【図１０】
2018142622.tif 000013
【図１１】
2018142622.tif 000014
【図１２】
2018142622.tif 000015
【図１３】
2018142622.tif 000016
【図１４】
2018142622.tif 000017
【図１５】
2018142622.tif 000018
【図１６】
2018142622.tif 000019
【図１７】
2018142622.tif 000020
【図１８】
2018142622.tif 000021
【図１９】
2018142622.tif 000022
【図２０】
2018142622.tif 000023
【図２１】
2018142622.tif 000024
【図２２】
2018142622.tif 000025
【図２３】
2018142622.tif 000026
【図２４】
2018142622.tif 000027
【図２５】
2018142622.tif 000028
【図２６】
2018142622.tif 000029
【図２７】
2018142622.tif 000030
【図２８】
2018142622.tif 000031
【図２９】
2018142622.tif 000032
【図３０】
2018142622.tif 000033
【手続補正書】
【提出日】令和1年6月26日(2019.6.26)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００８０
【補正方法】変更
【補正の内容】
【００８０】
以下、図１１を用いてＦＭＰＫＧ１１３の構成を説明する。なお、複数のＦＭＰＫＧ１１３は、基本的な構成が同じである。ＦＭＰＫＧ１１３は、コントローラユニット１１０１と、複数のＦＭＣｈｉｐ１１１０Ａ〜１１１０Ｈとを有する。ＦＭＣｈｉｐ１１１０は、ＦＭＣｈｉｐ１１１０Ａ〜１１１０Ｈの内の、一つ又は複数のＦＭＣｈｉｐを意味する。
【国際調査報告】
2018142622.tif 000034
2018142622.tif 000035
2018142622.tif 000036