(57)【要約】【課題】サイズの大きいECCを分割する技術では、複数の異なるサイズのECCを管理する必要があり、NVMの記憶領域の制御が複雑となる。また、いずれの記録方式を採用するかによって相対的に高信頼のページ（最小記録単位）と相対的に低信頼のページが予め定まるが、NVMの品質にばらつきがあるため、NVM間で、同一の信頼性のページについてエラービット数のばらつきが大きいことが起こり得る。【解決手段】NVM（不揮発性メモリ）モジュールにおいて、NVMコントローラは、各ECCCWについて、当該ECCCWをＮ個（Ｎは２以上の整数）のECCCW部分に分割し、NVM部を構成する１以上のNVMにおける複数の記憶領域のうちのＮ個の記憶領域に、当該Ｎ個のECCCW部分をそれぞれ記録する。【選択図】図１２
2019121129.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶領域を有する１以上のNVM（不揮発性メモリ）であるNVM部と、
前記NVM部に接続されたNVMコントローラと
を有し、
前記NVMコントローラは、
各記録対象のデータについて、当該データにECC（Error Correction Code）を付与したECCCW（ECC Code Word）を生成し、
各ECCCWについて、当該ECCCWをＮ個（Ｎは２以上の整数）のECCCW部分に分割し、前記複数の記憶領域のうちのＮ個の記憶領域に当該Ｎ個のECCCW部分をそれぞれ記録する、
不揮発性メモリモジュール。
【請求項２】
前記各ECCCWについて、前記Ｎ個の記憶領域の各々は、最小記録単位と同じ又はそれよりも大きな単位の記憶領域である、
請求項１に記載の不揮発性メモリモジュール。
【請求項３】
前記１以上のNVMの各々は、FM（フラッシュメモリ）であり、
各FMは、それぞれが独立して制御可能な単位である１以上のダイを含み、
各ダイは、それぞれが最小消去単位であるブロックを含み、
各ブロックは、それぞれが最小記録単位であるページを含み、
前記各ECCCWについて、前記Ｎ個の記憶領域の各々は、ページ、ブロック、ダイ及びFMのいずれかである、
請求項２に記載の不揮発性メモリモジュール。
【請求項４】
前記NVMコントローラと前記NVM部とを接続する複数のバスを有し、
前記各ECCCWについて、前記Ｎ個の記憶領域は、前記複数のバスのうち異なるＮ本のバスにそれぞれ接続された記憶領域である、
請求項１に記載の不揮発性メモリモジュール。
【請求項５】
前記NVMコントローラは、１以上の記憶領域グループを管理し、
前記１以上の記憶領域グループの各々は、Ｎ個の記憶領域で構成され、
前記NVMコントローラは、
前記１以上の記憶領域グループのうち、エラー頻度が閾値を超えている記憶領域グループを選択し、
前記選択した記憶領域グループを構成するＮ個の記憶領域のうちの第１の記憶領域を、当該Ｎ個の記憶領域以外の第２の記憶領域と交換する、
請求項１に記載の不揮発性メモリモジュール。
【請求項６】
前記NVMコントローラは、リード処理において、
（ａ）２以上のリードパラメータのうち、当該リード処理において未選択のいずれかのリードパラメータを選択し、
（ｂ）リード元のアドレスが属する記憶領域グループを構成するＮ個の記憶領域からそれぞれＮ個のECCCW部分を、前記選択したリードパラメータに従い読み出し、
（ｃ）前記読み出したＮ個のECCCW部分からECCCWを作成し、
（ｄ）前記作成したECCCW中のデータにエラービットがあれば当該ECCCWにおけるECCを用いて当該データの訂正が可能か否かを判断し、
前記NVMコントローラは、（ｄ）の判断結果が偽の場合、リトライとして（ａ）を実行し、
前記エラー頻度が閾値を超えている記憶領域グループとは、
エラービット数がそれの閾値を超えている記憶領域グループ、及び、
リトライ回数がそれの閾値を超えている記憶領域グループ、
のうちの少なくとも１つである、
請求項５に記載の不揮発性メモリモジュール。
【請求項７】
前記エラー頻度が閾値を超える記憶領域グループとは、エラービット数がそれの閾値を超えていて、且つ、リトライ回数がそれの閾値を超えている記憶領域グループである、
請求項６に記載の不揮発性メモリモジュール。
【請求項８】
前記第１の記憶領域は、前記選択した記憶領域グループのうちのいずれかの記憶領域であり、
前記第２の記憶領域は、エラー頻度が閾値以下の記憶領域グループのうちのいずれかの記憶領域である、
請求項５に記載の不揮発性メモリモジュール。
【請求項９】
前記NVMコントローラは、前記第１の記憶領域と前記第２の記憶領域の交換のために、
前記第１の記憶領域を含んだ記憶領域グループからＮ個のECCCW部分を読み出し、当該Ｎ個のECCCW部分からECCCWを作成し、当該ECCCW中のECCを用いて当該ECCCW中のデータを訂正し、当該ECCCWをＮ個のECCCW部分に分割し、当該Ｎ個のECCCW部分のうち前記第１の記憶領域を記録先とするECCCW部分を、前記第２の記憶領域に記録し、
前記第２の記憶領域を含んだ記憶領域グループからＮ個のECCCW部分を読み出し、当該Ｎ個のECCCW部分からECCCWを作成し、当該ECCCW中のECCを用いて当該ECCCW中のデータを訂正し、当該ECCCWをＮ個のECCCW部分に分割し、当該Ｎ個のECCCW部分のうち前記第２の記憶領域を記録先とするECCCW部分を、前記第１の記憶領域に記録する、
請求項５に記載の不揮発性メモリモジュール。
【請求項１０】
不揮発性メモリモジュールと、
前記不揮発性メモリモジュールにデータを送るプロセサ部と
を有し、
前記不揮発性メモリモジュールが、
複数の記憶領域を有する１以上のNVM（不揮発性メモリ）であるNVM部と、
前記NVM部に接続されたNVMコントローラと
を有し、
前記NVMコントローラは、
前記プロセサ部からの各記録対象のデータについて、ECC（Error Correction Code）を付与したECCCW（ECC Code Word）を生成し、
各ECCCWについて、津尾外ECCCWをＮ個（Ｎは２以上の整数）のECCCW部分に分割し、前記複数の記憶領域のうちのＮ個の記憶領域に当該Ｎ個のECCCW部分をそれぞれ記録する、
ストレージシステム。
【請求項１１】
各記録対象のデータについて、ECC（Error Correction Code）を付与したECCCW（ECC Code Word）を生成し、
各ECCCWについて、当該ECCCWをＮ個（Ｎは２以上の整数）のECCCW部分に分割し、NVM部を構成する１以上のNVM（不揮発性メモリ）における複数の記憶領域のうちのＮ個の記憶領域に当該Ｎ個のECCCW部分をそれぞれ記録する、
記憶制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、不揮発性メモリモジュールでの記憶制御に関する。
【背景技術】
【０００２】
NAND型フラッシュメモリ（以下、FM）を搭載するソリッドステートドライブ（以下SSD）等の不揮発性メモリモジュール（以下、FMモジュール）が、不揮発性メモリ（典型的には、不揮発性半導体メモリ、以下、NVM）を有するNVMモジュールの一例として知られている。FMモジュールは、エンタープライズシステムの長期記憶用媒体として用いられてきたハードディスクドライブ（HDD）よりも高速にデータの書き込み及び読み出しが可能である。システムの高性能化を意図した、HDDの置き換えとして、又は他の用途に向けて、ＦＭモジュールの利用が広がっている。こうしたFMモジュールの利用拡大は、微細化と多値化によるFMのビットコスト低下に起因している。
【０００３】
FMは、電子を格納するセルにより構成されており、このセルに電子が注入されている個数とデータのビット値を対応付けることで値を記録する。この電子の個数が時間経過により増減変化すると、対応付けられたビット値が変化する。結果として、エラービットが生じる。近年、微細化や多値化により、わずかな電子の移動でもビット値が変化するようになったため、FMのエラービットは増加しやすくなっている。また、記憶領域の信頼性の差異を吸収するマージン（閾値電圧とリード電圧との差）が減少し、記憶領域毎の信頼性の差（エラービット発生数の差）が顕著に現れるようになっている。
【０００４】
そこで、FMコントローラ（FMモジュールのコントローラ）は、FMにデータを記録する際に、エラービットを訂正するECC（Error Correction Code）を記録データに付与したECCCW（ECC Code Word）を生成し、読み出し時にECCを用いてECCCW中に生じたエラービットを訂正することで、正確なデータ保持を実現する。こうした技術として、特許文献１に示す技術が開示されている。
【０００５】
尚、本明細書では、以降、FMの最小記録単位を「ページ」、最小消去単位を「ブロック」という用語を用いてそれぞれ記述する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】US2012/0254686
【発明の概要】
【発明が解決しようとする課題】
【０００７】
FMは、データの上書き不可能な素子であり、データの変更の為には消去が不可欠である。しかし、FMは、消去の繰り返しにより劣化し、劣化により記憶領域（例えば、ページ又はブロック）中のエラービット数は増加する。このため、FMの消去回数は制限することが必要となる。
【０００８】
SSD等のFMモジュールは、搭載する記憶領域の一部が利用不可となった際に、データの更新処理が不可能となる為、一部領域ではなくFMモジュール全体の利用が不可となる。このため、品質の悪いFMや信頼性の低い記憶領域について実施可能な消去回数（つまり、FMモジュールにおいて実施可能な最小の消去回数）を、FMモジュールに搭載する全てのFMの消去回数の上限値（以降、この値を「許容消去回数」と記す）として規定する必要がある。結果、FMモジュールの許容消去回数は、一部のFM又は記憶領域のせいで減少してしまう。そして、前述のとおりFMは上書き不可のデバイスである為、データの変更によって消去か不可避である。従って、FMモジュールの許容消去回数の減少は、書き換えデータ量の減少となる。
【０００９】
特許文献１に記載された技術は、エラービット数の相対的に多いページ（以下、ページＢ）に記録されるデータに対して、データ訂正能力が高いECC（大サイズのECC）を付与し、エラービット数の相対的に少ないページ（以下、ページＳ）に記録されるデータに対して、データ訂正能力の低いECC（小サイズのECC）を付与する。そして、当該技術は、ページＢに記録されるデータに付与したECCの一部を、サイズの小さなECCを付与しているため空き領域が存在するページＳに格納する。
【００１０】
特許文献１では、複数の異なるサイズのECCを管理する必要があり、FMの記憶領域の制御が複雑となる。例えば、特許文献１では、ページ毎にデータ（ECCCWのうちのECC以外の部分）のサイズを把握しておき、リクラメーション処理において、移動対象のデータのサイズを基にパディング又はアラインといった処理が必要になると考えられる。
【００１１】
また、ＭＬＣ（Multiple Level Cell）やＴＬＣ（Triple Level Cell）といった複数の記録方式のうちのいずれの記録方式を採用するかによって相対的に高信頼のページと相対的に低信頼のページが予め定まる。しかし、一般に、FMの品質にばらつきがある。結果として、FM間で、同一の信頼性のページについてエラービット数のばらつきが大きいことが起こり得る。
【００１２】
この種の課題は、FM以外のNVMについてもあり得る。
【課題を解決するための手段】
【００１３】
NVMモジュールにおいて、NVMコントローラは、各ECCCWについて、当該ECCCWをＮ個（Ｎは２以上の整数）のECCCW部分に分割し、NVM部を構成する１以上のNVMにおける複数の記憶領域のうちのＮ個の記憶領域に、当該Ｎ個のECCCW部分をそれぞれ記録する。
【発明の効果】
【００１４】
本発明によれば、NVM部（１以上のNVM）における記憶領域の制御の複雑化を抑えつつ、NVM部における複数の記憶領域でのエラービット数を平準化する事が可能となる。
【図面の簡単な説明】
【００１５】
【図１】実施形態に係るストレージシステムを含んだシステム全体の構成を示す図。
【図２】一変形例に係るストレージシステムの構成を示す図。
【図３】FMモジュールの内部構成を示す図。
【図４】FMの内部構成を示す図。
【図５】ページに記録するデータの構成を示す図。
【図６】FMグループの例を示す図。
【図７】FMモジュールが保持する管理情報の構成を示す図。
【図８】FMモジュールのライト処理の流れを示す図。
【図９】FMモジュールのリード処理の流れを示す図。
【図１０】FMモジュールのFMグループ評価処理の流れを示す図。
【図１１】FMモジュールのFMグループ変更処理の流れを示す図。
【図１２】実施形態の概要を示す図。
【図１３】実施形態に係るエラービット数平準化の結果の概要を示す図。
【発明を実施するための形態】
【００１６】
以下の説明では、「インターフェース部」は、１以上のインターフェースでよい。当該１以上のインターフェースは、ユーザインターフェース部と、通信インターフェース部とのうちの少なくとも通信インターフェース部を含んでよい。ユーザインターフェース部は、１以上のＩ／Ｏデバイス（例えば入力デバイス（例えばキーボード及びポインティングデバイス）と出力デバイス（例えば表示デバイス））と表示用計算機とのうちの少なくとも１つのＩ／Ｏデバイスでもよいし、それに代えて又は加えて、当該少なくとも１つのＩ／Ｏデバイスに対するインターフェースデバイスでもよい。通信インターフェース部は、１以上の通信インターフェースデバイスでよい。１以上の通信インターフェースデバイスは、１以上の同種の通信インターフェースデバイス（例えば１以上のＮＩＣ（Network Interface Card））であってもよいし２以上の異種の通信インターフェースデバイス（例えばＮＩＣとＨＢＡ（Host Bus Adapter））であってもよい。
【００１７】
以下の説明では、「メモリ部」は、１以上のメモリでよい。少なくとも１つのメモリは、揮発性メモリであってもよいし不揮発性メモリであってもよい。メモリ部は、主に、プロセサ部による処理の際に使用される。また、以下の説明では、「ＰＤＥＶ部」は、１以上のＰＤＥＶでよい。「ＰＤＥＶ」は、物理的な不揮発性の記憶デバイスを意味する。ＰＤＥＶ部は、ＲＡＩＤグループであってもよい。「ＲＡＩＤ」は、Redundant Array of Independent （or Inexpensive） Disksの略である。ＰＤＥＶ部における少なくとも１つのＰＤＥＶの少なくとも１つが、不揮発性メモリを含んだ記憶デバイスであるNVMモジュールである。メモリ部における一部のメモリがNVMモジュールであってもよい。NVMモジュールにおける不揮発性メモリは、以下の実施形態では、FMである。FMは、NAND型フラッシュメモリであるが、NAND型以外のフラッシュメモリでもよい。また、不揮発性メモリは、FM以外の不揮発性メモリ、例えばＰＲＡＭ（Phase-change Random Access Memory）、ＭＲＡＭ（Magnetoresistive Random Access Memory）、ＲｅＲＡＭ（Resistive Random Access Memory）又はＦｅＲＡＭ（Ferroelectric Random Access Memory）でもよい。
【００１８】
また、以下の説明では、「プロセサ部」は、１以上のプロセサでよい。少なくとも１つのプロセサは、典型的には、ＣＰＵ（Central Processing Unit）のようなマイクロプロセサであるが、ＧＰＵ（Graphics Processing Unit）のような他種のプロセサでもよい。１以上のプロセサの各々は、シングルコアでもよいしマルチコアでもよい。一部のプロセサは、処理の一部又は全部を行うハードウェア回路（例えばＦＰＧＡ（Field-Programmable Gate Array）又はＡＳＩＣ（Application Specific Integrated Circuit））でもよい。
【００１９】
また、以下の説明では、「プロセサ部」が行う処理は、典型的には、１以上のコンピュータプログラムがプロセサ部によって実行されることで実現されるが、当該処理の一部が、１以上のハードウェア回路によって実現されてもよい。プログラムがプロセサ部によって実行されることで処理が行われる場合、当該処理が、適宜にメモリ部及び／又はインターフェース部等を用いながら行われる。プログラムは、プログラムソースからインストールされてもよい。プログラムソースは、例えば、プログラム配布計算機又は計算機が読み取り可能な記録媒体（例えば非一時的な記録媒体）であってもよい。
【００２０】
また、以下の説明では、「ｘｘｘテーブル」といった表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、情報がデータ構造に依存しないことを示すために、「ｘｘｘテーブル」を「ｘｘｘ情報」と言うことができる。また、以下の説明において、各テーブルの構成は一例であり、１つのテーブルは、２以上のテーブルに分割されてもよいし、２以上のテーブルの全部又は一部が１つのテーブルであってもよい。
【００２１】
また、以下の説明では、「ストレージシステム」は、１以上の物理的なストレージ装置を含む。少なくとも１つの物理的なストレージ装置は、汎用的な物理計算機でもよい。少なくとも１つの物理的なストレージ装置は、仮想的な計算機（例えばＶＭ（Virtual Machine））を実行してもよいし、ＳＤｘ（Software-Defined anything）を実行してもよい。ＳＤｘとしては、例えば、ＳＤＳ（Software Defined Storage）（仮想的なストレージ装置の一例）又はＳＤＤＣ（Software-defined Datacenter）を採用することができる。
【００２２】
また、以下の説明では、同種の要素を区別しないで説明する場合は、その要素の参照符号（例えばFM３２０）、又は、参照符号の共通部分（ECCCW部分６０３）を使用することがある。同種の要素を区別して説明する場合は、その要素のＩＤ（例えば、FM０、FM１）、又は、その要素の参照符号（ECCCW部分６３ａ、ECCCW部分６３ｂ）を使用することがある。
【００２３】
以下、本発明の一実施形態を図面に基づいて説明する。尚、本発明は、以下に説明する実施形態に限定されるものではない。また、以下の説明では、混同を避けるために、ストレージシステムに対する要求を「要求」と言い、FMモジュール（NVMモジュールの一例）に対する要求を「コマンド」と言い、FM（NVMの一例）に対する要求を「指示」と言うことがある。
【００２４】
図１２は、本実施形態の概要を示す。
【００２５】
FMモジュール１１５は、FM部３２５と、FM部３２５に対する入出力を制御するFMコントローラ３１０とを有する。FM部３２５は、複数のFM３２０である。FM部３２５は、複数のFMグループ７０１を有する。各FMグループ７０１は、Ｎ個（Ｎは２以上の整数）のFM３２０で構成される。本実施形態では、FM３２０が、記憶領域の一例である。また、本実施形態では、Ｎ＝２である。
【００２６】
FMコントローラ３１０は、記録対象のデータにECC（Error Correction Code）を付与したECCCW（ECC Code Word）６０１を生成する。ECCCW６０１は、エラービットの訂正単位である。FMコントローラ３１０は、ECCCW６０１を２個（つまり、FMグループ７０１を構成するFM３２０と同数）のECCCW部分６３ａ及び６３ｂに分割し、記録先（ライト先）のFMグループ７０１を構成する２個のFM３２０に、Ｎ個のECCCW部分６３ａ及び６３ｂをそれぞれ記録する。図１２の例によれば、ECCCW６０１Ｘが、２個のECCCW部分６３Ｘａ及び６３Ｘｂに分割され、２個のECCCW部分６３Ｘａ及び６３Ｘｂが、FMグループ７０１Ｘを構成するFM３２０Ｘａ及び３２０Ｘｂにそれぞれ記録される。また、ECCCW６０１Ｙが、２個のECCCW部分６３Ｙａ及び６３Ｙｂに分割され、２個のECCCW部分６３Ｙａ及び６３Ｙｂが、FM３２０Ｘａ及び３２０Ｘｂにそれぞれ記録される。
【００２７】
このように、エラービットの訂正単位であるECCCWが、異なる２個のFM３２０に記録される。このため、FM３２０の品質のばらつきが平準化されることになり、故に、複数のFM３２０でのエラービット数が平準化される。具体的には、例えば、図１３に例示するように、ECCCWを１個のFMに記録する一比較例では、FM間でのエラービット数のばらつきが比較的大きいが、ECCCWをＮ個（Ｎは２以上の整数）のFM３２０に記録する本実施形態では、FM３２０間でエラービット数が平準化される（すなわち、FM３２０間でのエラービット数のばらつきが比較的小さい）。FM３２０の品質のばらつきが平準化されるため、FMモジュール１１５の許容消去回数が、比較例に比べて高まる。
【００２８】
以下、本実施形態を詳細に説明する。
【００２９】
（１−１）システム構成
【００３０】
まず、本発明の一実施形態に係るシステム構成について図１を用いて説明する。
【００３１】
図１は、本発明の一実施形態に係るストレージシステムを含んだシステム全体の構成を示している。
【００３２】
ストレージシステム１００は、SAN（Storage Area Network）１０１のような通信ネットワークを介して、１又は複数のホスト１０２と接続されている。ホスト１０２からの要求に応じて、ストレージシステム１００は、データをストレージシステム１００内部の記憶媒体（本実施形態では１以上のFMモジュール１１５）に記録する、又は、ストレージシステム１００内部の記録媒体からデータを読み出す。ストレージシステム１００は、図１に示すように、FMモジュール部１２０（PDEV部の一例）と、FMモジュール部１２０に接続されたストレージコントローラ１１０とを有する。
【００３３】
ストレージコントローラ１１０は、例えば、１又は複数のコントローラ（CTL）１１７である。CTL１１７は、プロセサ１１２、DRAM（Dynamic Random Access Memory）１１１、フロントエンドインターフェース１１６及びバックエンドインターフェース１１３を有する。CTL１１７は、冗長性を確保するために、ストレージシステム１００に少なくとも２つ以上が搭載されており、あるCTL１１７に故障が生じた場合、他方のCTL１１７にて処理が継続可能なように設計されている。プロセサ１１２は、プロセサ部の一例である。DRAM１１１は、メモリ部の一例である。フロントエンドインターフェース１１６及びバックエンドインターフェース１１３は、インターフェース部の一例である。
【００３４】
プロセサ１１２は、ストレージシステム１００の制御を行うコンポーネントであり、フロントエンドインターフェース１１６、DRAM１１１及びバックエンドインターフェース１１３と接続されている。プロセサ１１２は、ストレージシステム１００の制御プログラムを実行することで、ストレージシステム１００内の各種データ転送を制御する。
【００３５】
フロントエンドインターフェース１１６は、ストレージシステム１００とSAN１０１を接続するためのインターフェースであり、Ethernet（登録商標）やFC（Fibre Channel）等のプロトコルにより、SAN１０１を介して要求やデータの転送を行う。
【００３６】
DRAM１１１は、制御プログラムの格納やデータの一次的な格納を行うコンポーネントであり、ライトキャッシュとしてホスト１０２（上位装置の一例）から受信したデータを一旦格納する。このとき、ホスト１０２から受信したライトデータを他のCTL１１７のDRAM１１１にもコピーすることで冗長性を確保することができる。
【００３７】
バックエンドインターフェース１１３は、FMモジュール１１５と接続するためのインターフェースであり、SAS（Serial Attached SCSI）やFC等のプロトコルにより各種コマンドやデータの転送を行う。
【００３８】
FMモジュール部１２０は、１以上のエクスパンダ１１４における複数のFMモジュール１１５である。
【００３９】
エクスパンダ１１４は、複数のFMモジュール１１５を格納しており、バックエンドインターフェース１１３と接続されている。
【００４０】
FMモジュール１１５は、内部にFMを搭載しており、上位装置（ここではCTL１１７）からのコマンドに応じてデータをFMに記録する、又はデータをFMより読み出す。CTL１１７は、複数台のFMモジュール１１５を管理しており、複数台のFMモジュール１１５に跨るようにデータを冗長化して記録することができる。この機能により、FMモジュール１１５の突発的な故障時にデータの消失に対応する。こうした技術の一例としてRAID（Redundant Array Inexpensive Disk）がある。
【００４１】
以上、システム構成の一例である。尚、本発明は図１に示すシステム構成に限定されるものではない。本発明はデータをFMモジュール１１５に格納して長期に保存する他のシステムにも適用可能なものである。例えば、図２に示すようなシステム構成でもよい。図２は、複数のサーバ２００（ノード）により構成されたストレージシステム１００´を含んだシステムである。
【００４２】
図２は、一変形例に係るストレージシステム１００´の構成を示している。ストレージシステム１００´を構成する各サーバ２００は、一次記憶領域であるDRAM２１１、ソフトウェアに従って様々な処理を実施するプロセサ２１２、各種周辺機器を接続するSW２１３、二次記憶領域となるFMモジュール１１５、及び、他のサーバ２００に接続するネットワークインターフェース２１７を有する。尚、図２では、プロセサ２１２とFMモジュール１１５がSW１１３を経由して接続されるが本発明はこの例に限定されるものではない。プロセサ２１２がFMモジュール１１５に直接接続するとしてもよい。プロセサ２１２がFMモジュール１１５の上位装置の一例である。
【００４３】
DRAM２１１は、プロセサ２１２から短時間でアクセス可能な接続にてプロセサ２１２と接続されており、プロセサ２１２が処理するプログラムや処理対象データを格納する領域である。
【００４４】
プロセサ２１２は、プログラムに従って動作し、対象データを処理するデバイスである。プロセサ２１２は、内部に複数のプロセサコアを持ち、プロセサコアは各自独立して又は協調してプログラムを処理することができる。また、プロセサ２１２は、内部にDRAMコントローラを持ち、プロセサ２１２からの要求に応じてDRAM２１２よりデータを取得、又はDRAM２１２にデータを格納する。また、プロセサ２１２は、外部I/O（Input/Output）インターフェースを持ちSW２１３に接続する。また、プロセサ２１２は、SW２１３を経由して二次記憶装置であるFMモジュール１１５にコマンドを送信する事が可能である。プロセサ２１２は、各種処理を行う。
【００４５】
プロセサ２１２では、例えば、仮想マシンを生成するハイパーバイザが動作してよい。仮想マシン上では各種アプリケーションが動作してよい。このアプリケーションがデータを永続的に記録するときに、ストレージ機能を有する仮想マシンに仮想的に指示を行なってよい。このとき、ストレージ機能を有する仮想マシンを処理するプロセサ２１２は、DRAM２１１に格納されているデータを、ストレージ機能を有する仮想マシンの管理方式に従って、FMモジュール１１５に記録することができる。
【００４６】
SW２１３は、高速な外部I/Oバスを仲介するデバイスであり、例えばPCI−Express（登録商標）やInfiniband（商標）等の接続規格のパケットをパケットに定められたルーティング方式で転送する。SW２１３は、FMモジュール１１５を複数台接続可能とし、プロセサ２１２と各種デバイス間の情報を通信する。なお、図２には、SW２１３に対して１台のFMモジュール１１５を接続した例について示すが、本発明ははこの例に限定されるものではない。例えば、SW２１３に対して２台以上のFMモジュール１１５を接続してもよく、また各サーバ２００内のSW２１３に接続されるFMモジュール１１５は同一数でなくてもよい。例えば、あるサーバ２００内には１台のFMモジュール１１５がSW２１３を介して接続されており、他のサーバ２００には２台のFMモジュール１１５がSW２１３を介して接続されていてもよい。
【００４７】
FMモジュール１１５は、解析対象データのようなデータを格納する二次記憶装置である。FMモジュール２１５は、例えば、プロセサ２１２からのライトコマンド（ライト対象データの位置情報が関連付けられたコマンド）に従いライト対象データをDARM１１１より取得する。
【００４８】
ネットワークインターフェース２１７は、サーバ２００間を接続するネットワーク（例えばEthernet）２０３に接続するためのインターフェースである。
【００４９】
以上、図２を参照して一変形例に係るストレージシステム１００´について説明した。本発明は、先の図１の構成のストレージシステム１００だけでなく、図２の構成のストレージシステム１００´、或いは、他の構成のストレージシステムに対しても適用可能である。
【００５０】
（１−２）FMモジュール１１５の構成
【００５１】
次に、図３を用いて、FMモジュール１１５の内部構成について説明する。
【００５２】
図３は、FMモジュール１１５の内部構成を示す図である。
【００５３】
FMモジュール１１５は、内部に、FMコントローラ３１０とFM部３２５とを備える。FM部３２５は、複数（例えば３２個）のFM３２０を含む。
【００５４】
FMコントローラ３１０は、組み込みプロセサ３１５、RAM（Random Access Memory）３１３、データバッファ３１６、I/Oインターフェース３１１、FMインターフェース１３１７、ECC生成回路３１７、ECC訂正回路３１８、及び、データ転送を相互に行うスイッチ３１４を備えている。
【００５５】
スイッチ３１４は、組み込みプロセサ３１５、RAM３１３、データバッファ３１６、I/Oインターフェース３１１、FMインターフェース１３１７、ECC生成回路３１７、ECC訂正回路３１８を接続し、各部位間のデータをアドレス又はIDによってルーティングし転送する。尚、本実施例では、図３に示すように、単一のスイッチ３１４に各ハードウェア及びハードウェア実装論理がスター状に接続された例について記すが、本発明は、この例に限定されるものではない。例えば内部に複数のスイッチ３１４を有し、接続が必要な各ハードウェア及びハードウェア実装論理が通信可能なように接続されていてもよい。
【００５６】
I/Oインターフェース３１１は、上位装置と接続するハードウェア実装論理である。スイッチ３１４を介してFMコントローラ３１０の各部位と接続する。I/Oインターフェース３１１は、上位装置から各種コマンドを受信し、当該コマンドをRAM３１３に記録する。また、I/Oインターフェース３１１は、上位装置からコマンドを受信した際に、組み込みプロセサ３１５に割り込みを行うか、又は、組み込みプロセサ３１５がポーリングしているRAM３１３上の記憶領域に、コマンドを受信したことを通知するデータを記録する。
【００５７】
組み込みプロセサ３１５は、スイッチ３１４を介してFMコントローラ３１０の各部位と接続し、RAM３１３に記録されたプログラム及び管理情報を基にFMコントローラ３１０全体を制御する。また、組み込みプロセサ３１５は、定期的な情報取得、及び割り込み受信機能によって、FMコントローラ３１０全体を監視する。
【００５８】
データバッファ３１６は、FMコントローラ３１０でのデータ転送処理途中の一時的なデータを格納する。
【００５９】
FMインターフェース１３１７は、１又は複数本（例えば１６本）のバスによってFM３２０と接続する。各バスには複数（例えば４個）のFM３２０を接続し、同じくFM３２０に接続されるCE（Chip Enable）信号を用い、同一バスに接続された複数のFM３２０を独立して制御する。
【００６０】
FMインターフェース１３１７は、組み込みプロセサ３１５からの指示に応じて動作する。もし、当該指示がリード指示であれば、FMインターフェース１３１７は、FM３２０からデータをリードしデータバッファ３１６に転送する。当該指示がライト指示であれば、FMインターフェース１３１７は、データをデータバッファ３１６から読み出し、FM３２０に転送する。
【００６１】
ECC生成回路３１７は、データ書き込み時に、データに対してECCを生成する。
【００６２】
ECC訂正回路３１８は、データ読み出し時に、ECCによってデータを検査し、データ損失（エラービット）が検出された際には、データ訂正を行う。
【００６３】
以上説明した、スイッチ３１４、I/Oインターフェース３１１、組み込みプロセサ３１５、データバッファ３１６、FMインターフェース１３１７、ECC生成回路３１７及びECC訂正回路３１８の少なくとも１つは、ASIC（Application Specific Integrated Circuit）やFPGA（Field Programmable Gate Array）として、一つの半導体素子内で構成してもよいし、複数の個別専用IC（Integrated Circuit）を相互に接続した構成であってもよい。
【００６４】
RAM３１３は、具体的には、DRAMなどの揮発性メモリが挙げられる。RAM３１３は、FMモジュール１１５内で用いられるFM３２０に関する情報を含んだ管理情報を格納する。尚、RAM３１３は、データを格納するデータバッファ３１６の機能の一部又は全てを含みデータ格納に用いる構成としてもよい。
【００６５】
ここまで図３を用いてFMモジュール１１５の構成について説明した。
【００６６】
（１−３）FM３２０の内部構造
【００６７】
次に、図４を用いてFM３２０について説明する。
【００６８】
図４は、FM３２０の内部構成を示す図である。
【００６９】
FM３２０内の不揮発性メモリ領域は、複数（又は１）のダイ４２０を含む。ダイ４２０は、独立して制御可能な単位（記憶領域単位）である。各ダイ４２０は、複数のブロック（物理ブロック）４０２を含む。結果として、FM３２０は、複数（例えば、４０９６個）のブロック４０２を含む。最小消去単位が最小記録単位及び最小読み出し単位と異なり、最小消去単位は、最小記録単位及び最小読み出し単位より大きく、「ブロック」と呼ばれる。尚、最小読み出し単位は「ページ」（物理ページ）と呼ばれ、詳細については後述する。尚、FM３２０においては、最小書込み単位と最小読み出し単位は同一、即ちページ単位であるとする。ブロックは前述のとおり最小消去単位であるので、格納されたデータはブロック単位で消去される。またFM３２０は、I/Oレジスタ４０１を内部に持つ。I/Oレジスタ４０１は、ページサイズ（例えば８KB）以上の記録容量を持つレジスタである。
【００７０】
FM３２０は、FMインターフェース１３１７からのリード／ライト指示に従って動作する。
【００７１】
ライト動作において、FM３２０は、まず、FMインターフェース１３１７より、ライト指示（ライト先物理アドレス（例えば、ブロック番号、ページ番号及びオフセット）が指定された指示）を受信する。次に、FM３２０は、FMインターフェース１３１７より転送されるライトデータをI/Oレジスタ４０１に格納する。その後、FM３２０は、I/Oレジスタ４０１に格納されたデータをライト先のページにライトする。
【００７２】
リード動作においてFM３２０は、まず、FMインターフェース１３１７からリード指示（リード元物理アドレス（例えば、ブロック番号、ページ番号及びオフセット）が指定された指示）を受信する。次に、FM３２０は、指定されたブロックのページに格納されているデータをリードしI/Oレジスタ４０１に格納する。その後、FM３２０は、I/Oレジスタ４０１に格納されたデータをFMインターフェース１３１７に対して転送する。
【００７３】
各ブロック４０２は、複数（例えば１２８個）のページ５０１を有する。データの読み出しやデータの書き込みは、ページ単位で行われる。また、ブロック４０２内のページ５０１をプログラム（記録）する順序は固定されており、先頭ページ５０１から順にプログラムしなければならない。また、書き込み済みページ５０１への上書きは禁止されており、そのページ５０１を含んだブロック４０２からデータを消去しなければ、再びそのページ５０１にデータをプログラムすることができない。
【００７４】
続いて、図５を用いて、本実施形態においてページ５０１に記録するデータの構成について説明する。
【００７５】
FMコントローラ３１０は、上位装置（本実施形態ではCTL１１７）から受信したデータ（以下、ユーザデータ）６９１に対して、このユーザデータ６９１を訂正する為にECC生成回路３１７を用いてECC６９２を生成する。ユーザデータ６９１にECC６９２を付与したデータが、ECCCW（ECC Code Word）６０１である。
【００７６】
本実施形態においては、ECCCW６０１は、２個のFM４０２に分割して記録される。尚、本発明はこの分割数に限定されるものではなく、ECCCW６０１を２個より多くのFM３２０に分割して格納するとしてもよい。本実施形態では、ECCCW６０１Ａは、ECCCW部分６３Ａａ及び６３Ａｂに分割される。
【００７７】
本実施形態において、FM３２０Ａ内のあるブロック４０２Ａの先頭のページ５０１Ａａには、４つのECCCW部分６３Ａａ、６３Ｂａ、６３Ｃａ及び６３Ｄａが記録される。これら４つのECCCW部分６３Ａａ、６３Ｂａ、６３Ｃａ及び６３Ｄａは、４つのECCCW６０１Ａ、６０１Ｄからそれぞれ得られたECCCW部分である。先頭ページ５０１Ａａ以外のページ５０１Ａｂ、５０１Ａｃ、…にも、異なる４個のECCCWにそれぞれ対応した４個のECCCW部分が記録される。尚、本発明はこの例に限定されるものでは無く、１つのページ５０１に４個より少ない又は多くのECCCW部分（例えば２個や８個のECCCW部分）が記録されてもよい。
【００７８】
FMモジュール１１５は、後述するFMグループテーブルによって２個のFM３２０をFMグループとして管理している。FM３２０ＡとFM３２０Ｂは、同一のFMグループ７０１を構成する。
【００７９】
本実施形態の特徴の１つは、ECCCW６０１を複数のFMに分割して記録することである。本実施形態において、ECCCW６０１ＡのECCCW部分６３Ａａは、FM３２０Ａのブロック４０２Ａの先頭ページ５０１Ａａに記録され、ECCCW６０１ＡのECCCW６３Ａｂは、FM３２０Ａと同一FMグループ７０１におけるFM３２０Ｂのブロック４０２Ｂの先頭ページ５０１Ｂａに記録される。尚、本実施形態では、同一のECCCW６０１から分割された２個のECCCW部分６３ａ及び６３ｂは、異なるFM３２０のブロック４０２の同一番号のページ５０１に記録される例が採用されているが、本発明はこの例に限定されるものでない。例えば、同一ECCCWから分割されたN個のECCCWは異なるＮ個のFM３２０の如何なるブロックの如何なるページに記録されても構わない。但し、一定の法則なく、任意のブロックや任意のページに記録する構成では、ECCCWを復元する際に参照する論物変換テーブル（ECCCWの格納場所を管理するテーブル）のデータ量が増加すると考えられる。このため、本実施形態では、同一ECCCWから分割されたＮ個のECCCW部分は、異なるＮ個のFMの同一番号のブロック且つ同一番号のページに記録される。
【００８０】
ここまで、本実施形態におけるFM３２０の内部構成とデータ格納構成について説明した。前述のとおり、ECCCW６０１をＮ個のFM３２０に分散して記録することで、稀に低品質のFM３２０が存在しても、そのFM３２０に格納されるデータはエラービット訂正単位であるECCCWの一部に過ぎず、低品質のFM３２０にECCCWの全てのデータを格納した場合と比べて、１つのECCCWに生じるエラービット数は減少する。このように、本実施形態によれば、低品質のFM３２０の影響を軽減できる。
【００８１】
なお、FM３２０は、同一ECCCWから分割されたN個のECCCW部分がそれぞれ記録されるＮ個の記憶領域の各々の一例であるが、Ｎ個の記憶領域の各々は、最小記録単位と同じ又はそれよりも大きな単位の記憶領域でよい。これにより、１個のECCCW（Ｎ個のECCCW部分）が、少なくとも、最小記録単位の同一の記憶領域に記録されず、記録単位が少なくとも異なる記憶領域に分散することになる。これにより、少なくとも最小記録単位の記憶領域間で品質のばらつきがあっても、品質が平準化され、結果として、エラービット数が平準化することが期待できる。Ｎ個の記憶領域の各々は、FM３２０に代えて、ページ５０１、ブロック４０２及びダイ４２０のいずれでもよい。
【００８２】
（１−４）FMグループ
【００８３】
次に、本実施形態におけるFMグループ７０１について説明する。前述のとおり、本実施形態は、エラービット訂正単位であるECCCWを２個のECCCW部分に分割しそれら２個のECCCW部分を２個のFM３２０にそれぞれ記録する。このため、２個のECCCW部分からユーザデータを取り出すためには、FMコントローラ３１０は、２個のFM３２０からそれぞれ２個のECCCW部分を読み出し、２個のECCCW部分からECCCWを構成し、当該ECCCWからユーザデータを取得する必要がある。仮に、FMバスを共有するFM３２０に分散して２個のECCCW部分を記録した場合、２個のFM３２０からECCCW部分を読み出す動作が競合しやすくなり、性能低下が生じる恐れがある。そこで、本実施形態においては、図６に示すように、異なる２本のFMバス７８０に接続された２個のFM３２０でFMグループ７０１が構成される。尚、同一のFMバス７８０に接続されていても、制御の競合割合が少なく、ほぼ並列に制御可能なFM３２０である場合、同一FMバス７８０に属する２個のFM３２０がFMグループ７０１を構成してもよい。
【００８４】
図６は、FMグループ７０１の例を示す。
【００８５】
本実施形態は、２個のFM３２０にECCCWを分割して記録する構成であるため、２個のFM３２０毎に、FMグループ７０１が構成される。
【００８６】
低品質のFMの混入率は小さいと考えられる為、２個のFM３２０をグループ化して管理することで低品質のFM３２０の影響を軽減でき、FMモジュール１１５の許容消去回数が高まることが期待できる。しかし、稀に、FMグループ７０１を構成した２個のFM３２０が両方とも低品質のFMである事が有りうる。この場合、本実施形態では、後述のFMグループ変更処理により、FMグループにおけるFMが別のFMと交換される。このため、FMモジュール１１５の消去回数増加が図られる。
【００８７】
以上、本実施形態におけるFMグループ７０１について説明した。
【００８８】
（１−５）FMモジュールの管理情報
【００８９】
続いて、本実施形態におけるFMモジュール１１５の管理情報について図７を用いて説明する。
【００９０】
図７は、FMモジュール１１５が保持する管理情報８００の構成を示す。
【００９１】
管理情報８００は、FMグループテーブル８１０と論物変換テーブル８２０とを含む。
【００９２】
FMグループテーブル８１０は、FMグループ７０１の構成を管理する。具体的には、例えば、FMグループテーブル８１０は、FMグループ７０１毎にレコードを有する。各レコードは、FMグループ番号８１１、FM-A番号８１２、FM-B番号８１３、リトライカウンタ８１４及びエラービットカウンタ８１５といった情報を格納する。
【００９３】
FMグループ番号８１１は、FMグループの番号（ＩＤの一例）を示す。FM-A番号８１２は、同一FMグループを構成する１個目のFMの番号（ＩＤの一例）を示す。FM-B番号８１３は、同一FMグループを構成する２個目のFMの番号を示す。
【００９４】
リトライカウンタ８１４は、リードのリトライの回数を示す。FMコントローラ３１０は、ECCによるエラービットの訂正が不可能である場合に、リードリトライを行う、すなわち、FMから読み出す際に使用するリードパラメータ（例えば、読み出し電圧、読み出し時間、読み出し方式等）を変更し（未選択のリードパラメータを選択し）、選択したリードパラメータに従いFMからECCCW部分をリードする。リトライカウンタ８１４は、１以上のリード処理におけるリトライ回数（例えば、合計値、平均値、最小値又は最大値）を示す。
【００９５】
エラービットカウンタ８１５は、FMグループにて生じているエラービット数（例えば平均値）を示す。FMコントローラ３１０は、FM部３２５における全ECCCWの各々を定期的にリードし、エラービット訂正を行い、ECCCW中に生じたエラービットの数を取得することで、FM部３２５の信頼性を監視する。エラービットカウンタ８１５は、この監視において取得されたエラービット数（平均値）を示す。
【００９６】
リトライカウンタ８１４及びエラービットカウンタ８１５の少なくとも１つが、FMグループについてのエラー頻度の一例である。
【００９７】
FMコントローラ３１０（組み込みプロセサ３１５）は、上位装置より受信したリードコマンドで指定されているアドレス（典型的にはLBA（Logical Block Address）に対応したFMグループ番号を、論物変換テーブル８２０から特定する。その後、FMコントローラ３１０（組み込みプロセサ３１５）は、特定したFMグループ番号に対応したFM-A番号及びFM-B番号を、FMグループテーブル８１０から特定する。
【００９８】
なお、本実施形態においては、FMグループ７０１を構成するFMが２個のため、FMグループテーブル８１０は、FM-A番号及びFM-B番号の２個のカラムを持つが、ECCCWを３個以上のECCCW部分に分割しその３個以上のECCCW部分を３個以上のFMにそれぞれ分割して記録する場合には、FMグループは３個以上のFMで構成されるため、FMグループテーブル８１０は、FM番号について３個以上のカラムを持つ。
【００９９】
FMコントローラ３１０は、上位装置に対して、論理空間であるLBA空間を提供し、LBAのサイズで４KB毎に、論理空間であるLBAから、データを実際に格納している物理アドレスを取得する。このようなアドレス変換を行う為に、論物変換テーブル８２０が存在する。
【０１００】
論物変換テーブル８２０は、所定のサイズのLBA範囲（例えば４KB分のアドレス範囲）毎に、レコードを有する。各レコードは、LBA８２１、FMグループ番号８２２、ブロック番号８２３、ページ番号８２４及びオフセット８２５といった情報を格納する。
【０１０１】
LBA８２１は、LBA範囲の先頭LBAを示す。本実施形態において、LBA空間は５１２B（Byte）セクタ単位であり、４KBは0x8である為、0x8ごとにインクリメントされた値が順に格納されている。
【０１０２】
FMグループ番号８２２は、LBA範囲に対応したFMグループの番号を示す。ブロック番号８２３は、LBA範囲に対応したブロック番号（同一のFMグループを構成する２個のFMに共通のブロック番号）を示す。ページ番号８２４は、LBA範囲に対応したページ番号（同一のFMグループを構成する２個のFMに共通のページ番号）を示す。オフセット８２５は、LBA範囲に対応するページ内の格納位置（ページの先頭からの位置）を示す。
【０１０３】
尚、本実施例では、同一ECCCWから分割された２個のECCCW部分は、同一FMグループの異なるFMの同一ブロック番号且つ同一ページ番号の領域に記録する構成であるため、論物変換テーブル８２０には、各LBA範囲について、１つのブロック番号と１つのページ番号が格納される。本発明はこの例に限定されるものではない。例えば、同一ECCCWについて、ブロック番号が異なる場合には、論物変換テーブルにFMグループの各FMの各該当のブロック番号が格納されてもよい。同様に、同一ECCCWに対応した各ECCCW部分を任意の物理領域に記録する場合には、論物管理テーブルには、ブロック番号、ページ番号及びオフセットの各々は、分割数と同数必要となる。
【０１０４】
（１−６）FMモジュール１１５のライト処理
【０１０５】
続いて、FMモジュール１１５のライト処理について説明する。
【０１０６】
図８は、FMモジュール１１５のライト処理の流れを示す。当該ライト処理は上位装置からのライトコマンドに応答して開始される。
【０１０７】
Ｓ９０１では、組み込みプロセサ３１５は、ライトコマンドで指定されているLBAを特定したり、上位装置よりライトデータを取得しデータバッファ３１６（又はRAM３１３）に格納したりする。
【０１０８】
Ｓ９０２では、組み込みプロセサ３１５は、データバッファ３１６に格納されているデータ（ライトコマンドに従うデータのような記録対象データ）のデータ量が閾値（例えば、２個のページ分の量）以上か否かを判断する。Ｓ９０２の判断結果が偽の場合（Ｓ９０２：Ｎｏ）、組み込みプロセサ３１５は、FM３２０にデータを記録しない。すなわち、データバッファ３１６に格納されたデータの量が閾値を越えるまで、FMに対するデータの記録が行われない。一方で、Ｓ９０２の判断結果が真の場合（Ｓ９０２：Ｙｅｓ）、処理がＳ９０３に遷移する。
【０１０９】
Ｓ９０３では、組み込みプロセサ３１５は、FMグループテーブル８１０を参照し、ライト先のFMグループを選定する。例えば、組み込みプロセサ３１５は、FMグループ７０１毎に、当該FMグループ７０１に格納されているデータ量を計量しており、このデータ量が平準化されるようにFMグループ７０１を選択する。
【０１１０】
Ｓ９０４では、組み込みプロセサ３１５は、Ｓ９０３にて選択したFMグループ７０１から、記録先（例えば記録先のブロック）を選定する。組み込みプロセサ３１５は、例えば、FMグループ７０１毎に、一定数の未書込みブロックを維持している。組み込みプロセサ３１５は、Ｓ９０３にて選定したFMグループ７０１に対応した一定数の未書込みブロックの中から相対的に消去回数の少ないブロックを選択する。これにより、FMの消去回数の平準化が図られる。この選択されたブロックが、記録先のブロックである。尚、未書込みブロックの数が減少した場合には、リクラメーション又はガベージコレクションといわれる制御により、未書き込みブロックの数が一定数に維持される。
【０１１１】
Ｓ９０４では、更に、例えば次の処理が行われる。まず、組み込みプロセサ３１５は、選択したブロック内のページの一部が書込み済みとなっている記録途中のブロックの選択を試みる。そして、記録途中のブロックが無い場合、組み込みプロセサ３１５は、いずれかの未書込みブロックを選択する。また、組み込みプロセサ３１５は、記録途中のブロック毎に記録ページ数をカウントしており、Ｓ９０４では、記録途中ブロックの記録済み最終ページ番号を取得し、この記録済み最終ページ番号に１を加算したページを記録先ページとして選択する。
【０１１２】
Ｓ９０５では、組み込みプロセサ３１５は、ECC生成回路３１７を制御して記録対象のデータにECCを生成し、ECCCWを構成する。
【０１１３】
Ｓ９０６では、組み込みプロセサ３１５は、ECCCWを２個のECCCW部分に分割し、その２個のECCCW部分を、Ｓ９０３で選択したFMグループを構成する２個のFMにおける２個のブロック（Ｓ９０４で選択したブロック）における２個のページ（Ｓ９０４で選択したページ）にそれぞれ記録する。Ｓ９０６が完了した場合に、ライトコマンドに対する応答が組み込みプロセサ３１５により返されてよい。
【０１１４】
Ｓ９０７では、組み込みプロセサ３１５は、論物変換テーブル８２０を更新する。すなわち、組み込みプロセサ３１５は、論物変換テーブル８２０に対して、ライト先のLBAが属するＬＢＡ範囲に対応したレコードに、Ｓ９０３で選択したFMグループの番号、Ｓ９０４で選択したブロック及びページの番号を登録する。
【０１１５】
以上が、FMモジュール１１５のライト処理である。
【０１１６】
（１−７）FMモジュール１１５のリード処理
【０１１７】
続いて、図９を用いてFMモジュール１１５のリード処理について説明する。
【０１１８】
図９は、FMモジュール１１５のリード処理の流れを示す。当該リード処理は上位装置からのリードコマンドに応答して開始される。
【０１１９】
Ｓ１００１では、組み込みプロセサ３１５は、リードコマンドで指定されているLBAが属するLBA範囲に対応した物理アドレス（FMグループ番号８２２、ブロック番号８２３、ページ番号８２４及びオフセット８２５）を論物変換テーブル８２０より特定する。尚、リード範囲（例えば、リードコマンドで指定されているLBAとデータ長から特定される範囲）が、複数のLBA範囲にまたがっている場合、論物変換テーブル８２０から、その複数のLBA範囲の各々について、物理アドレスが特定される。例えば、リード範囲が１２８KBの場合、４KB単位で物理アドレスが管理される論物変換テーブル８２０については、３２個の４KB単位のLBA範囲について、それぞれ、物理アドレスが特定される。以下、説明を簡単にするために、Ｓ１００１で特定されたFMグループ番号は１つであるとする。
【０１２０】
Ｓ１００２では、組み込みプロセサ３１５は、Ｓ１００１で特定した物理アドレス中のFMグループ番号に対応したレコード（FM-A番号及びFM-B番号等）をFMグループテーブル８１０から特定する。
【０１２１】
Ｓ１００３では、組み込みプロセサ３１５は、Ｓ１００１で特定したFMグループについて、未選択のリードパラメータがあるか否かを判断する。Ｓ１００３の判断結果が偽の場合（Ｓ１００３：Ｎｏ）、Ｓ１００９で、組み込みプロセサ３１５は、アンコレクタブルエラーを上位装置に通知する。
【０１２２】
Ｓ１００３の判断結果が真の場合（Ｓ１００３：Ｙｅｓ）、Ｓ１００４で、組み込みプロセサ３１５は、いずれかの未選択のリードパラメータを選択する。
【０１２３】
Ｓ１００５で、組み込みプロセサ３１５は、Ｓ１００４で選択したリードパラメータに従い、Ｓ１００２で特定された２個のFMの該当領域（Ｓ１００１で特定された物理アドレスに従う領域）から、２個のECCCW部分を読み出す。
【０１２４】
Ｓ１００６では、組み込みプロセサ３１５は、Ｓ１００５で読み出された２個のECCCW部分を統合することでECCCWを作成し、当該ECCCW中のデータにエラービットがあればECC訂正回路３１８を用いてエラービットを訂正する。
【０１２５】
Ｓ１００７では、組み込みプロセサ３１５は、ECCCW中のデータにおけるエラービットを訂正できたか否かを判断する。Ｓ１００７の判断結果が偽の場合（Ｓ１００７：Ｎｏ）、組み込みプロセサ３１５は、リードパラメータを変更して（Ｓ１００３及びＳ１００４）リードのリトライ（Ｓ１００５）を行う。なお、このとき、組み込みプロセサ３１５は、リード元のFMグループに対応したリトライカウンタ８１４を更新する（つまり、リトライ回数のカウントを行う）。一方で、Ｓ１００７の判断結果が真の場合（Ｓ１００７：Ｙｅｓ）、処理がＳ１００８に遷移する。
【０１２６】
Ｓ１００８では、組み込みプロセサ３１５は、Ｓ１００６で訂正したデータを、リードコマンドに対する応答として、上位装置に返す。
【０１２７】
以上で、FMモジュール１１５のリード処理について説明した。
【０１２８】
（１−８）フラッシュモジュールのFMグループ評価処理
【０１２９】
続いて、図１０を用いてFMモジュール１１５のFMグループ評価処理について説明する。
【０１３０】
図１０は、FMモジュール１１５のFMグループ評価処理の流れを示す。当該FMグループ評価処理は、リード処理とは非同期に（例えば定期的に）行われる。なお、FMグループ評価処理は、リード元のFMグループについてリード処理中に行われてもよい。
【０１３１】
Ｓ１０５１では、組み込みプロセサ３１５は、当該評価処理において未選択のFMグループがあるか否かを判断する。Ｓ１０５１の判断結果が偽の場合（Ｓ１０５１：Ｎｏ）、全てのFMグループについて評価が済んだため、当該評価処理は終了する。Ｓ１０５１の判断結果が真の場合（Ｓ１０５１：Ｙｅｓ）、処理がＳ１０５２に遷移する。
【０１３２】
Ｓ１０５２では、組み込みプロセサ３１５は、いずれかの未選択のFMグループを選択する。
【０１３３】
Ｓ１０５３では、組み込みプロセサ３１５は、Ｓ１０５２で選択したFMグループに対応したエラービットカウンタ８１５が、閾値Ｅ１（エラービットカウンタ８１５の第１の閾値）を超えているか否かを判断する。尚、リード元のFMグループについてリード処理中にFMグループ評価処理が行われる場合、閾値Ｅ１は、ECCにて訂正可能なエラービットの数より少ない値でよい。組み込みプロセサ３１５は、リード処理において構成されたECCCW中に生じたエラービットの数を、訂正を行ったECC訂正回路３１８より取得してよい。Ｓ１０５３の判断結果が偽の場合（Ｓ１０５３：Ｎｏ）、処理がＳ１０５１に遷移する。Ｓ１０５３の判断結果が真の場合（Ｓ１０５３：Ｙｅｓ）、処理がＳ１０５４に遷移する。
【０１３４】
Ｓ１０５４では、組み込みプロセサ３１５は、Ｓ１０５２で選択したFMグループに対応したリトライカウンタ８１４が閾値Ｒ１（リトライカウンタ８１４の第１の閾値）を超えているか否かを判断する。Ｓ１０５４の判断結果が偽の場合（Ｓ１０５４：Ｎｏ）、処理がＳ１０５１に遷移する。Ｓ１０５４の判断結果が真の場合（Ｓ１０５４：Ｙｅｓ）、Ｓ１０５２で選択したFMグループが、FMグループ変更処理の対象とされ、処理がＳ１０５５に遷移する。
【０１３５】
以上で、FMモジュール１１５のFMグループ評価処理について説明した。
【０１３６】
当該評価処理によれば、エラービットカウンタ８１５が閾値Ｅ１を超えていて、且つ、リトライカウンタ８１４が閾値Ｒ１を超えているFMグループが、FMグループ変更処理の対象とされる。言い換えれば、エラービットカウンタ８１５が閾値Ｅ１を超えていても、リトライカウンタ８１４が閾値Ｒ１以下であるFMグループは、FMグループ変更処理の対象とされない。リトライ回数に余力があり、故に、リトライを行いエラービット訂正が行われればエラービット数の減少が期待できるからである。
【０１３７】
なお、FMグループ変更処理の対象とされるFMグループは、エラービットカウンタ８１５が閾値Ｅ１を超えていることと、リトライカウンタ８１４が閾値Ｒ１を超えていることのいずれかを満たすFMグループでもよい。これにより、エラービットカウンタ８１５又はリトライカウンタ８１４といったエラー頻度が高いFMグループの品質の改善が伴う品質平準化が期待できる。
【０１３８】
（１−９）FMモジュール１１５のFMグループ変更処理
【０１３９】
続いて、図１１を用いて、FMモジュール１１５のFMグループ変更処理を説明する。
【０１４０】
図１１は、FMモジュール１１５のFMグループ変更処理の流れを示す。
【０１４１】
前述のとおり、組み込みプロセサ３１５は、エラービットカウンタ８１５又はリトライカウンタ８１４の多いFMグループを、変更対象FMグループ（FMグループ変更処理の対象のFMグループ）とする。低品質FMの数は少ないと考えられる為、FMグループを構成する全てのFMが低品質のFMであることは稀であると考えられる。そして、この稀である状態を検出した際にFMグループの変更することで、FMモジュール１１５は、より高い信頼性を維持できる。
【０１４２】
Ｓ１１０１では、組み込みプロセサ３１５は、エラービットカウンタ８１５及びリトライカウンタ８１４が相対的に少ないFMグループを探索し、見つかったFMグループを、相手FMグループ（変更対象グループ中のFMとの交換元とされるFMグループ）とする。
【０１４３】
Ｓ１１０２では、組み込みプロセサ３１５は、相手FMグループに対応したエラービットカウンタ８１５が閾値Ｅ２（エラービットカウンタ８１５の第２の閾値）以下であるか否かを判断する。閾値Ｅ２は、閾値Ｅ１と同じであっても異なっていてもよい。Ｓ１１０２の判断結果が偽の場合（Ｓ１１０２：Ｎｏ）、当該変更処理は終了する。変更対象FMグループのFMを別のFMと交換しても当該変更対象FMグループの高信頼化が達成されない可能性が高いためである。一方で、Ｓ１１０２の判断結果が真の場合（Ｓ１１０２：Ｙｅｓ）、処理がＳ１１０３に遷移する。
【０１４４】
Ｓ１１０３では、組み込みプロセサ３１５は、相手FMグループに対応したリトライカウンタ８１４が閾値Ｒ２（リトライカウンタ８１４の第２の閾値）以下か否かを判断する。閾値Ｒ２は、閾値Ｒ１と同じであっても異なっていてもよい。Ｓ１１０３の判断結果が偽の場合（Ｓ１１０３：Ｎｏ）、当該変更処理は終了する。変更対象FMグループのFMを別のFMと交換しても当該変更対象FMグループの高信頼化が達成されない可能性が高いためである。一方で、Ｓ１１０３の判断結果が真の場合（Ｓ１１０３：Ｙｅｓ）、処理がＳ１１０４に遷移する。
【０１４５】
Ｓ１１０４では、組み込みプロセサ３１５は、変更対象FMグループから１個のFMを選択する。尚、Ｓ１１０４では、FMはランダムに選択されるが、本発明はこの例に限定されるものではない。ECC訂正時にエラービットの発生位置を確認する事が可能であれば、エラービットが最も多く生じている（又は少ない）FMが選択されもよい。Ｓ１１０４で選択されたFMが、低品質のFMという位置づけである。
【０１４６】
Ｓ１１０５では、組み込みプロセサ３１５は、相手FMグループから１個のFMを選択する。尚、Ｓ１１０５では、FMはランダムに選択されるが、本発明はこの例に限定されるものではない。ECC訂正時にエラービットの発生位置を確認する事が可能であれば、エラービットが最も少ない（又は多い）FMが選択されてもよい。Ｓ１１０４で選択されたFMが、高品質のFMという位置づけである。
【０１４７】
Ｓ１１０６では、組み込みプロセサ３１５は、Ｓ１１０４にて選択した低品質FMとＳ１１０５にて選択した高品質FMのデータを交換するステップである。具体的には、例えば、組み込みプロセサ３１５は、FM毎にデータ交換用の空き領域を管理している。組み込みプロセサ３１５は、変更対象FMグループからECCCW部分をリードし、リードしたECCCW部分を統合してECCCWを作成し、エラービットを訂正する。そして、訂正されたECCCWを再度ECCCW部分に分割し、低品質FMが記録先となるECCCW部分を、高品質FM（相手FMグループ内の選択されたFM）の空き領域に記録する。この処理によって、既に生じているエラービットを訂正して他のFMにデータを移動できる。そして、組み込みプロセサ３１５は、高品質FMにおける移動先の領域からデータを消去し、この消去した領域に、低品質FMのデータ（高品質FMの空き領域におけるデータ）を記録する。このとき、相手FMグループについても同様に、組み込みプロセサ３１５は、相手FMグループからECCCW部分をリードし、リードしたECCCW部分を統合してECCCWを作成する。そして、組み込みプロセサ３１５は、当該ECCCW中のデータをECCにて訂正し、訂正後のデータを含むECCCWをECCCW部分に分割し、分割したECCCW部分のうち高品質FMを記録先とするECCCW部分を、低品質FMの空き領域に記録する。こうした、低品質FMから高品質FMへのデータ移動と高品質FMから低品質FMへのデータ移動を小サイズで交互に繰り返し実施することで、データ交換用の空き領域が小さくとも２つのFM間でECCCW部分を交換できる。
【０１４８】
Ｓ１１０７では、組み込みプロセサ３１５は、FMグループテーブル８１０を更新する。すなわち、組み込みプロセサ３１５は、変更対象FMグループ中の低品質FMと相手FMグループ中の高品質FMを交換する。より具体的には、組み込みプロセサ３１５は、変更対象FMグループに対応したレコードにおける低品質FMのFM番号を、高品質FMのFM番号に更新し、且つ、相手FMグループに対応したレコードにおける高品質FMのFM番号を、低品質FMのFM番号に更新する。
【０１４９】
以上で、FMモジュール１１５のFMグループ変更処理について説明した。このFMグループ変更処理をおこなうことで、低品質である可能性の高いFMが高品質である可能性の高いFMに交換され、結果として、FMの品質を一層平準化させること、言い換えれば、FMモジュール１１５の許容消去回数（実質的に、書き換え可能なデータ量に相当）をより増加させる事が期待できる。
【０１５０】
以上、本発明の一実施形態及び一変形例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこの実施形態及び変形例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、本発明は、FM３２０以外のNVMについても適用可能である。
【符号の説明】
【０１５１】
１１５…FMモジュール
【図１】
2019121129.tif 000003
【図２】
2019121129.tif 000004
【図３】
2019121129.tif 000005
【図４】
2019121129.tif 000006
【図５】
2019121129.tif 000007
【図６】
2019121129.tif 000008
【図７】
2019121129.tif 000009
【図８】
2019121129.tif 000010
【図９】
2019121129.tif 000011
【図１０】
2019121129.tif 000012
【図１１】
2019121129.tif 000013
【図１２】
2019121129.tif 000014
【図１３】
2019121129.tif 000015