(58)【調査した分野】(Int.Cl.,DB名)
前記ヒストグラムデータに基づいて、前記複数の領域に対応する書き込み間隔の範囲に、2以上の書き込み回数のピークがあるか否か判断し、前記2以上の書き込み回数のピークを含む領域を、2以上の分割領域に分割し、前記2以上の分割領域に対応する書き込み間隔を前記第2の管理データに設定する領域設定部、をさらに具備する請求項2のストレージ装置。
消去上限回数の異なる複数の領域を含む記憶部を備えるストレージ装置に、前記複数の領域に含まれる消去単位領域ごとに書き込み完了順序を示すシーケンス番号を関係づけた第1の管理データと、各書き込み間隔と各書き込み先領域との関係を示す第2の管理データと、論理アドレスと前記消去単位領域とを関係づけたアドレス変換データと、を記憶することと、
書き込み対象データを前記記憶部に書き込む場合に、前記アドレス変換データに基づいて、前記書き込み対象データの前記論理アドレスに対応する前記消去単位領域を求め、前記第1の管理データに基づいて、前記書き込み対象データの書き込み発生時点における前記シーケンス番号と前記第1の管理データの前記消去単位領域に対応する前記シーケンス番号との差分により前記書き込み対象データの書き込み間隔を算出し、前記第2の管理データに基づいて、前記書き込み対象データの書き込み間隔に対応する前記書き込み先領域を選択することと、
選択された前記書き込み先領域に、前記書き込み対象データを書き込み、1つの消去単位領域分の書き込みが完了した場合に前記シーケンス番号を増加することと、
を具備する、ストレージ装置の制御方法。
【発明を実施するための形態】
【0006】
以下、図面を参照して、発明の実施形態について説明する。なお、以下の説明において、略又は実質的に同一の構成要素及び機能については、同一符号を付し、説明を省略するか又は必要に応じて説明を行う。
【0007】
本実施形態においては、複数の不揮発性メモリが異なる種別の場合を例として説明するが、複数の不揮発性メモリが同じ種別で異なる特性を持つ場合であっても同様に適用可能である。換言すれば、本実施形態は、1以上の不揮発性メモリで消去上限回数の異なる領域が発生する場合に適用可能である。消去上限回数が多い領域ほど、この領域の書き換え寿命は長くなる。
【0008】
本実施形態において、不揮発性メモリの種別としては、例えば、上述のように、SLC、MLC、eMLCなどがある。
【0009】
本実施形態では、消去上限回数が異なる不揮発性メモリを、特性が異なる不揮発性メモリとして説明する。しかしながら、不揮発性メモリの特性は、例えば、High Endurance、Read Intensiveなどを意味するとしてもよい。
【0010】
本実施形態では、種別が異なる場合であっても特性が同じであれば、同じ種別として扱うことができる。
【0011】
本実施形態に係るストレージ装置は、不揮発性メモリの各消去単位領域に対する書き込み(又は更新)完了順序を示すシーケンス番号を少ないデータ量で管理し、書き込み対象データの書き込みの発生時点におけるシーケンス番号と、当該書き込み対象データを含む消去単位領域に対する書き込みの完了した時点におけるシーケンス番号とに基づいて書き込み間隔を算出し、書き込み間隔に基づいて異なる種別の不揮発性メモリの中から書き込み対象データの書き込み先領域を選択する。
【0012】
書き込み間隔に対応する不揮発性メモリの種別を選択するために、本実施形態に係るストレージ装置は、各書き込み間隔に対応する書き込み回数を示すヒストグラムを生成し、生成されたヒストグラムに基づいて種別を選択するためのしきい値(境界値)を設定し、書き込み間隔がしきい値を超えるか否かを判断する。
【0013】
本実施形態において、不揮発性メモリの消去単位領域ごとにシーケンス番号が管理される場合を例として説明する。しかしながら、消去単位領域ではなく、例えば書き込み単位領域の2つ以上の集合、消去単位領域の2つ以上の集合などのように、他の領域サイズでシーケンス番号が管理されてもよい。
【0014】
本実施形態においては、不揮発性メモリの消去単位領域がどの種別であるか管理されている。そして、不揮発性メモリの消去単位領域の種別ごとに消去上限回数が管理されている。更には、不揮発性メモリの消去単位領域ごとに消去回数が管理されている。
【0015】
本実施形態において、シーケンス番号は、不揮発性メモリの1消去単位領域分に対する書き込みが完了するごとにインクリメントされる(整数型の変数の値が1ずつ増加される)通し番号である。
【0016】
本実施形態においては、書き込み間隔として、書き込み対象データの書き込みが発生した場合のシーケンス番号と、書き込み対象データが前に書き込まれた消去単位領域に対応するシーケンス番号との差分であるシーケンス番号差分が用いられる。本実施形態において、書き込み対象データの書き込みが発生した場合のシーケンス番号は、例えば、消去単位領域に対する書き込みが完了するごとに変更される最新のシーケンス番号である。
【0017】
本実施形態において、不揮発性メモリは、例えば、NAND型フラッシュメモリなどのような不揮発性半導体メモリとする。しかしながら、不揮発性メモリは、例えば、NOR型フラッシュメモリ、MRAM(Magnetoresistive Random Access Memory:磁気抵抗メモリ)、PRAM(Phase change Random Access Memory:相変化メモリ)、ReRAM(Resistive Random Access Memory:抵抗変化型メモリ)、又は、FeRAM(Ferroelectric Random Access Memory:強誘電体メモリ)などのメモリでもよい。
【0018】
NAND型フラッシュメモリにおいて、書き込み単位領域はページと称し、消去単位領域はブロックと称する。ブロックは、複数のページを含む。
【0019】
[第1の実施形態]
図1は、第1の実施形態に係るストレージ装置を備えた計算機システムの構成を例示するブロック図である。
【0020】
計算機システム1は、異なる種別A〜CのNAND型フラッシュメモリ22A〜22C,23A〜23Cを含むストレージ装置2と、ストレージ装置2へアクセスする1以上のホスト装置3と、を備える。
【0021】
ストレージ装置2は、ホストインタフェース4、制御部5、メモリ14、NANDインタフェース21、記憶部22,23、を備える。
【0022】
記憶部22は、異なる種別A〜CのNAND型フラッシュメモリ22A〜22Cを備える。
【0023】
記憶部23は、異なる種別A〜CのNAND型フラッシュメモリ23A〜23Cを備える。
【0024】
ストレージ装置2は、記憶部22と記憶部23とにより二重化されている。具体的には、記憶部22のNAND型フラッシュメモリ22Aと記憶部23のNAND型フラッシュメモリ23Aには、同じデータが書き込まれる。NAND型フラッシュメモリ22BとNAND型フラッシュメモリ23Bには、同じデータが書き込まれる。NAND型フラッシュメモリ22CとNAND型フラッシュメモリ23Cには、同じデータが書き込まれる。したがって、記憶部22と記憶部23とのうちの一方が故障しても、ストレージ装置2は正常に動作可能である。
【0025】
NAND型フラッシュメモリ22A,23Aは、消去上限回数が多い(書き込み耐性が高い)種別Aであるとする。例えば、種別AはSLCとする。
【0026】
NAND型フラッシュメモリ22B,23Bは、消去上限回数が中程度(書き込み耐性が中程度)の種別Bであるとする。例えば、種別BはeMLCとする。
【0027】
NAND型フラッシュメモリ22C,23Cは、消去上限回数が少ない(書き込み耐性が低い)種別Cであるとする。例えば、種別CはMLCとする。
【0028】
本実施形態においては、ストレージ装置2が3種別のNAND型フラッシュメモリ22A〜22C,23A〜23Cを備える場合を例示している。しかしながら、ストレージ装置2は1、2、又は、4以上の種別のNAND型フラッシュメモリを備えるとしてもよい。
【0029】
本実施形態において、記憶部22は、それぞれの種別A〜CのNAND型フラッシュメモリを1つ以上含み、記憶部23は、それぞれの種別A〜CのNAND型フラッシュメモリを1つ以上含むとする。それぞれの種別A〜CのNAND型フラッシュメモリの数は、種別A〜Cの間で異なるとしてもよい。
【0030】
メモリ14は、不揮発性メモリである。メモリ14は、書き込み先頭テーブル15、NANDブロックテーブル16、アドレス変換テーブル17、シーケンス番号18、ヒストグラムテーブル19、境界テーブル20、を記憶する。
【0031】
書き込み先頭テーブル15は、種別A〜Cごとに、追記形式によりデータが書き込まれる先頭のブロック及び先頭のページを管理する。
【0032】
NANDブロックテーブル16は、NAND型フラッシュメモリ22A〜22C,23A〜23Cの各ブロックの情報を管理する。例えば、NANDブロックテーブル16は、NAND型フラッシュメモリ22A〜22C,23A〜23Cのブロックごとに、シーケンス番号を記憶する。同じブロックに対して、複数回の書き込み完了があった場合には、NANDブロックテーブル16は、このブロックにおいて最大のシーケンス番号、すなわち、このブロックにおいて最も新しい書き込み完了時のシーケンス番号を記憶する。
【0033】
アドレス変換テーブル17は、ホスト装置3の論理アドレスを、NAND型フラッシュメモリ22A〜22C,23A〜23Cにおける実際のデータ書き込み位置を示す物理アドレスに変換するための情報である。
【0034】
本実施形態において、例えば、ホスト装置3の論理アドレスは、セクタ単位(例えば512バイト)で割り当てられている。ページデータの論理アドレスは、NAND型フラッシュメモリのページ単位(例えば4096バイト)で割り当てられている。ページデータの論理アドレスは、例えば、ホスト装置3の論理アドレスを8(=4096/512)で割って求められる。
【0035】
シーケンス番号18は、NAND型フラッシュメモリ22A〜22C,23A〜23Cの1ブロック分の書き込みが完了するごとにインクリメントされる。シーケンス番号18は、最も大きい、最新のシーケンス番号である。
【0036】
例えば、ブロックに対応するシーケンス番号が小さい場合、このブロックに含まれるデータの書き込みは古い。ブロックに対応するシーケンス番号が大きい場合、このブロックに含まれるデータの書き込みは新しい。書き込み対象データの書き込みが発生した場合のシーケンス番号18と、書き込み対象データが書き込まれているブロックに対する書き込み完了時点のシーケンス番号との差分であるシーケンス番号差分は、書き込み間隔を示す。
【0037】
例えば、シーケンス番号差分が大きい場合には、書き込み間隔は長いと判断される。例えば、シーケンス番号差分が小さい場合には、書き込み間隔は短いと判断される。
【0038】
ヒストグラムテーブル19は、シーケンス番号差分を階級とし、シーケンス番号差分に対応するページ単位の書き込みの発生した回数を示す書き込み回数(サンプル数)を度数とし、シーケンス番号差分と書き込み回数との関係を示すヒストグラムを表す。
【0039】
境界テーブル20は、シーケンス番号18と、書き込み対象データが書き込まれているブロックに対応するシーケンス番号との差分であるシーケンス番号差分に基づいて、種別を選択するために用いられる境界値を含む。
【0040】
制御部5は、書き込み部6、読み出し部7、コンパクション部8、種別制御部9、を備える。制御部5の各機能は、コンピュータ読み取り可能な不揮発性の記憶媒体32に記憶された制御プログラム33を、コンピュータが読み出して実行することで実現されてもよい。
【0041】
書き込み部6は、ホストインタフェース4を介してホスト装置3からの書き込み要求と書き込み対象データと論理アドレスとを受け、NAND型フラッシュメモリ22A〜22C,23A〜23Cのうち、種別選択部10で選択されたいずれかの種別のNAND型フラッシュメモリに、NANDインタフェース21を介して、追記形式で書き込み対象データを書き込む。より具体的に説明すると、書き込み部6は、ホスト装置3からの書き込みデータをページデータに分割し、種別選択部10からページデータの書き込み先の種別の情報を受け、ページデータを選択された種別のNAND型フラッシュメモリに追記形式で書き込む。
【0042】
書き込み部6は、書き込み後、NANDブロックテーブル16の有効ブロック数を書き込みにより増えた分と古くなり減った分だけ、アドレス変換テーブル17を書き込んだ不揮発性メモリのアドレスに、書き込み先頭テーブル15を新たな空きの領域を指すように更新し、ホスト装置3に応答を返す。更に、書き込み部6は、1ブロック分の書き込みが完了するごとに、NANDブロックテーブル16において、書き込みが完了されたブロック番号とシーケンス番号18との関係づけ、シーケンス番号18の値に1を加算する。
【0043】
読み出し部7は、ホストインタフェース4を介してホスト装置3から読み出し要求と論理アドレスの情報とを受け、アドレス変換テーブル17に基づいて論理アドレスを物理アドレスに変換し、NAND型フラッシュメモリ22A〜22C,23A〜23Cにおける物理アドレスの示すデータを、NANDインタフェース21を介して読み出す。そして、読み出し部7は、読み出されたデータを、ホストインタフェース4を介してホスト装置3に送る。
【0044】
本実施形態では、ホスト装置3とストレージ装置2との間のデータの受け渡しはホストインタフェース4を経由して行われ、ストレージ装置2において制御部5とNAND型フラッシュメモリ22A〜22C,23A〜23Cとの間のデータの受け渡しはNANDインタフェース21を経由して行われる。
【0045】
コンパクション部8は、NAND型フラッシュメモリ22A〜22C,23A〜23Cに追記形式で書き込むための空き容量がなくなった場合に、複数のブロックをまとめて空き領域を生成する。
【0046】
種別制御部9は、追記形式で書き込まれる種別の選択を制御する。種別制御部9は、種別選択部10、ヒストグラム生成部11、境界設定部12、寿命判定部13、を備える。
【0047】
種別選択部10は、書き込み対象データの書き込み時に算出されるシーケンス番号差分が境界テーブル20の境界値を超えるか否かの判断に基づいて、追記書き込みによりデータが書き込まれる種別を選択する。より具体的には、まず、種別選択部10は、アドレス変換テーブル17に基づいて、論理アドレスに対応する書き込み対象データが書き込まれているブロックを求める。次に、種別選択部10は、NANDブロックテーブル16に基づいて、求められたブロックに対する書き込み完了時のシーケンス番号を求め、ブロックに対する書き込み完了時のシーケンス番号とシーケンス番号18との差分によるシーケンス番号差分を求める。そして、種別選択部10は、境界テーブル20に基づいて、書き込み先として、シーケンス番号差分が小さいほど消去可能回数が大きいブロックを選択し、シーケンス番号差分が大きいほど消去可能回数が小さいブロックを選択する。
【0048】
ヒストグラム生成部11は、境界テーブル20の生成に必要なヒストグラムテーブル19を生成する。例えば、ヒストグラム生成部11は、算出されたシーケンス番号差分を区分けした各範囲に対して、ページ単位の書き込み回数を集計し、シーケンス番号差分の範囲を階級とし、書き込み回数を度数とするヒストグラムテーブル19を生成する。ヒストグラム生成部11は、ホスト装置3からの書き込み時にヒストグラムテーブル19を更新する。
【0049】
境界設定部12は、ヒストグラム生成部11により生成されたヒストグラムテーブル19に基づいて、種別A〜Cの選択に用いられる境界値を算出し、境界テーブル20に境界値を設定する。例えば、境界設定部12は、ヒストグラムテーブル19に基づいて、各NAND型フラッシュメモリ22A〜22C,23A〜23Cの種別A,Bに書き込まれたデータ量が種別A,Bの実効容量に相当するように、シーケンス番号差分の境界値を求め、境界値を境界テーブル20に設定する。
【0050】
寿命判定部13は、メモリ14に記憶されたヒストグラムテーブル19に基づいて、NAND型フラッシュメモリ22A〜22C,23A〜23Cに対する実際の書き込み量を算出し、NAND型フラッシュメモリ22A〜22C,23A〜23Cの書き込み寿命を判定する。本実施形態において、寿命とは、メモリの使用可能期間とする。具体例として、寿命判定部13は、種別A〜Cのデータ容量と、種別A〜Cの消去上限回数と、各ブロックの消去回数とに基づいて、種別A〜Cに対して測定期間に書き込み可能なデータ量を算出する。寿命判定部13は、ヒストグラムテーブル19に基づいて、測定期間に種別A〜Cに書き込まれたデータ量を算出する。そして、寿命判定部13は、種別A〜Cに対して、測定期間に書き込まれたデータ量が測定期間に書き込み可能なデータ量よりも多い場合に、アラートを出力する。
【0051】
図2は、書き込み先頭テーブル15の一例を示すデータ構造図である。
【0052】
書き込み先頭テーブル15は、種別A〜Cごとに、追記形式により書き込まれる先頭のブロック番号及び先頭のページ番号を含む。この書き込み先頭テーブル15を用いることで、種別が選択されれば、次に追記式の書き込み先となるブロック及びページを決定することができる。
【0053】
図3は、NANDブロックテーブル16の一例を示すデータ構造図である。
【0054】
NANDブロックテーブル16は、ブロック番号(ブロックアドレス)と、対応するブロックの有効ページ数(ブロックに書き込まれている有効状態のページデータの数)、シーケンス番号、消去回数、種別、消去上限回数とを互いに関係づけている。ブロック番号は、ブロックサイズの記憶領域ごとに割り当てられる。ページデータは、ページサイズのデータである。ページデータの書き込まれていないブロックのシーケンス番号には、−1が設定される。NANDブロックテーブル16では、NAND型フラッシュメモリ22A〜22C,23A〜23Cの全ブロックに対する情報がエントリされている。
【0055】
ここでの取り扱いを例示すると、第一に「NANDブロックテーブル16の有効ページ数は、ブロック番号の示すブロックに対してページデータが書き込まれた場合に更新される」、第二に「シーケンス番号は、ブロック番号の示すブロックに対して書き込みが完了するごとに更新される」、第三に「消去回数は、ブロック番号の示すブロックに対する消去が発生するごとに更新される」というものが挙げられる。更には、例えば、種別と消去上限回数とは、NAND型フラッシュメモリ22A〜22C,23A〜23Cの特性に応じて予め設定されるようになっている。
【0056】
図4は、アドレス変換テーブル17の一例を示すデータ構造図である。
【0057】
アドレス変換テーブル17は、ページデータの論理アドレスと、対応するブロック番号及びページ番号とを互いに関係づけている。
図4のアドレス変換テーブル17のエントリは、ページサイズ単位である。ブロック番号及びページ番号は、物理アドレスに相当する。アドレス変換テーブル17を用いて、ページデータの論理アドレスが、NAND型フラッシュメモリ22A〜22C,23A〜23Cにおける書き込み先又は読み出し先のブロック番号及びページ番号に変換される。
【0058】
図5は、ヒストグラムテーブル19の一例を示すデータ構造図である。
【0059】
ヒストグラムテーブル19は、シーケンス番号差分と、このシーケンス番号差分に対応する書き込み回数(サンプル数)とを関係づけている。ヒストグラムの階級としてシーケンス番号差分をそのまま用いた場合には、各シーケンス番号差分に対する書き込み回数が少なくなり、ヒストグラムの特徴が現れにくくなる。このため、ヒストグラムの階級としてシーケンス番号差分を適当な範囲でまとめ、このシーケンス番号差分の範囲ごとに書き込み回数が集計される。シーケンス番号差分の範囲は、シーケンス番号差分/Dと表記される。シーケンス番号差分/Dは、ストレージ装置2の特徴と用途に応じて適宜に変更が可能である。
【0060】
ヒストグラムテーブル19におけるシーケンス番号差分/Dの数の最大値は、種別AのNAND型フラッシュメモリ22A,23Aと種別BのNAND型フラッシュメモリ22B,23Bとに含まれるブロック数に基づいて設定される。
【0061】
図6は、境界テーブル20の一例を示すデータ構造図である。
【0062】
境界テーブル20は、種別A〜Cを選択するためのシーケンス番号差分の境界値を含む。この境界テーブル20の境界値に基づいて、書き込み対象データを書き込む種別が選択される。
図6では、種別A,Bの境界値として、種別A,Bの上限値が設定されている。種別Cに対応する−1は上限値が設定されないことを意味する。これにより、書き込み対象データの算出されたシーケンス番号差分が0〜2000000の場合には種別Aが選択され、シーケンス番号差分が2000001〜6000000の場合には種別Bのブロックが選択され、シーケンス番号差分が6000001以上の場合には種別Cのブロックが選択される。
【0063】
次に、本実施形態に係るストレージ装置2の各種処理について説明する。
【0064】
図7は、第1の実施形態に係るストレージ装置2による追記書き込み処理の一例を示すフローチャートである。
【0065】
ステップ0701において、書き込み部6は、ホスト装置3より、書き込み要求、論理アドレス、及び書き込み対象データを受信する。
【0066】
ステップ0702において、書き込み部6は、書き込み対象のデータをページデータに分割する。
【0067】
ステップ0703において、種別選択部10は、ページデータを書き込む種別を選択する。
【0068】
ステップ0704において、書き込み部6は、種別選択部10によって選択された種別と、メモリ14に記憶されている書き込み先頭テーブル15とに基づいて、ページデータを書き込むNAND型フラッシュメモリのブロック番号とページ番号とを決定する。
【0069】
ステップ0705において、書き込み部6は、決定されたブロック番号とページ番号に対応するページに、ページデータを追記形式で書き込む。
【0070】
ステップ0706において、書き込み部6は、書き込み先頭テーブル15に対して、選択された種別に対応する書き込み先頭のブロック番号及びページ番号を更新し、1ブロック分の書き込みが完了した場合には、NANDブロックテーブル16における決定されたブロック番号に対応するシーケンス番号を更新し、シーケンス番号18に1を加える。
【0071】
ステップ0707において、書き込み部6は、全てのページデータの書き込みが終了したか否か判断する。全てのページデータの書き込みが終了していない場合、処理はステップ0703へ戻る。全てのページデータの書き込みが終了した場合、処理はステップ0708へ進む。
【0072】
ステップ0708において、書き込み部6は、NANDブロックテーブル16に対して、ページデータが書込まれたブロックを示すブロック番号に対応する有効ページ数を更新し、書き込みの際に消去が実行された場合には消去回数を更新する。
【0073】
ステップ0709において、書き込み部6は、アドレス変換テーブル17に対して、ページデータの論理アドレスと書き込み先のブロック番号及びページ番号とを設定する。
【0074】
ステップ0710において、書き込み部6は、ホスト装置3に応答を返信する。
【0075】
この
図7の処理において、書き込み先頭テーブル15、NANDブロックテーブル16、アドレス変換テーブル17の更新の順序は、適宜に変更してもよく、並列に実行されてもよい。
【0076】
図8は、読み出し部7による読み出し処理の一例を示すフローチャートである。
【0077】
ステップ0801において、読み出し部7は、ホスト装置3より、読み出し要求、及び論理アドレスを受信する。
【0078】
ステップ0802において、読み出し部7は、読み出し要求に基づいて読み出しを行う対象(範囲)をページサイズに分割する。
【0079】
ステップ0803において、読み出し部7は、メモリ14に記憶されているアドレス変換テーブル17と論理アドレスとに基づいて、論理アドレスに対応するブロック番号及びページ番号から、読み出し対象のページデータを読み出す。
【0080】
ステップ0804において、読み出し部7は、読み出し対象の全てのページデータが読み出されたか否か判断する。全てのページデータが読み出されていない場合、処理はステップ0803へ戻る。全てのページデータが読み出された場合、処理はステップ0805へ進む。
【0081】
ステップ0805において、読み出し部7は、ホスト装置3に応答及び読み出し対象データを返信する。
【0082】
図9は、コンパクション部8によるコンパクション処理の一例を示すフローチャートである。以下では、コンパクション対象の種別をXと記す。種別Xは、種別A〜Cのいずれかに相当する。
【0083】
ステップ0901において、コンパクション部8は、例えば種別AのNAND型フラッシュメモリ22A,23Aに対するコンパクション処理を実行する。
【0084】
ステップ0902において、コンパクション部8は、例えば種別BのNAND型フラッシュメモリ22B,23Bに対するコンパクション処理を実行する。
【0085】
ステップ0903において、コンパクション部8は、例えば種別CのNAND型フラッシュメモリ22C,23Cに対するコンパクション処理を実行する。
【0086】
この
図9の処理において、各種別A〜Cに対応するコンパクション処理の実行順序は、適宜に変更が可能である。
【0087】
このように、コンパクション処理は、種別A〜Cごとに実行される。
【0088】
図10は、コンパクション処理の具体例を示すフローチャートである。この
図10の処理において、種別X+1は、種別Xのブロックに書き込まれていたページデータを移動する場合の、移動先のブロックの種別とする。
【0089】
ステップ1001において、コンパクション部8は、NANDブロックテーブル16を参照して、種別Xであり、かつ、有効ページ数がゼロのブロック数を算出する。
【0090】
ステップ1002において、コンパクション部8は、算出されたブロック数が所定の数以上か否かを判断する。算出されたブロック数が所定の数以上の場合、処理は終了する。算出されたブロック数が所定の数に満たない場合、処理はステップ1003へ進む。
【0091】
ステップ1003において、コンパクション部8は、NANDブロックテーブル16を参照して、種別Xであり有効ページ数がゼロでないブロックのうち、最も古いシーケンス番号を検索する。
【0092】
ステップ1004において、コンパクション部8は、シーケンス番号18と検索された最も古いシーケンス番号との差分であるシーケンス番号差分を算出する。
【0093】
ステップ1005において、コンパクション部8は、算出されたシーケンス番号差分が、境界テーブル20における種別Xに対応する範囲に含まれるか否かを判断する。シーケンス番号差分が、境界テーブル20の種別Xに対応する範囲に含まれる場合、処理はステップ1006へ進む。シーケンス番号差分が、境界テーブル20の種別Xに対応する範囲に含まれない場合、処理はステップ1007へ進む。
【0094】
ステップ1006において、コンパクション部8は、種別X内での通常コンパクションを実行する。
【0095】
ステップ1007において、コンパクション部8は、種別Xから種別X+1へ書き込み先の種別を切り替える移動コンパクションを実行する。
【0096】
図11は、通常コンパクション(
図10のステップ1006)及び移動コンパクション(
図10のステップ1007)の例を示すフローチャートである。
【0097】
まず、通常コンパクションについて説明する。
【0098】
ステップ1101aにおいて、コンパクション部8は、NANDブロックテーブル16を参照し、種別Xであり、有効ページ数がゼロではなく、シーケンス番号が古い複数のブロックbを選択する。シーケンス番号が古い複数のブロックbの選択方法としては、例えば、シーケンス番号が小さいブロックを順に所定の数だけ選択してもよく、相対的にシーケンス番号が小さいブロックのグループの中から任意のブロックを選択してもよい。
【0099】
ステップ1102aにおいて、コンパクション部8は、種別Xであり、有効ページ数がゼロであり、消去回数が少ないブロックcを選択する。消去回数が少ないブロックcの選択方法としては、消去回数が最も少ないブロックを選択してもよく、相対的に消去回数が少ないブロックのグループの中から任意のブロックを選択してもよい。
【0100】
ステップ1103において、コンパクション部8は、複数のブロックbにおける有効状態のページデータをブロックcへ移動する。
【0101】
ステップ1104において、コンパクション部8は、NANDブロックテーブル16に対して、移動されたページデータに対応する情報を更新する。具体的には、コンパクション部8は、NANDブロックテーブル16に対して、移動対象ページデータが書き込まれていた元のブロックbに対応するブロック番号に関係づけられている有効ページ数を更新し、元のブロックbに対する消去が実行された場合には消去回数を更新する。また、コンパクション部8は、NANDブロックテーブル16に対して、移動対象ページデータが新たに書き込まれた移動先のブロックcに対応するブロック番号に関係づけられている有効ページ数を更新する。
【0102】
ステップ1105において、コンパクション部8は、元のブロックbに対応するシーケンス番号を、移動先のブロックcに対応するシーケンス番号として設定する。なお、このステップ1105は、ステップ1104に含まれていてもよい。例えば、複数の元のブロックbに対応する複数のシーケンス番号がある場合には、最も大きいシーケンス番号が移動先のブロックcに対応するシーケンス番号として設定される。
【0103】
ステップ1106において、コンパクション部8は、後述する制御用データに基づいて、アドレス変換テーブル17を更新する。具体的には、コンパクション部8は、アドレス変換テーブル17において、移動対象ページデータの論理アドレスに対して、移動先を示すブロック番号及びページ番号を設定する。
【0104】
次に、移動コンパクションについて説明する。
【0105】
ステップ1101bにおいて、コンパクション部8は、NANDブロックテーブル16を参照し、種別Xであり、有効ページ数がゼロではなく、シーケンス番号差分が境界テーブル20の種別Xに対応する境界値を超える複数のブロックbを選択する。例えば、コンパクション部8は、種別Xであり、有効ページ数がゼロではなく、シーケンス番号差分が境界値を超えるブロックが多数存在する場合には、シーケンス番号差分が相対的に大きいブロックを優先して選択してもよく、又は、無作為に所定の数だけ選択してもよい。
【0106】
ステップ1102bにおいて、コンパクション部8は、種別X+1であり、有効ページ数がゼロであり、消去回数が少ないブロックcを選択する。
【0107】
その後の処理は、上記ステップ1103からステップ1106と同様であるため、説明を省略する。
【0108】
図12は、書き込み先頭テーブル15とNANDブロックテーブル16のシーケンス番号とシーケンス番号18との更新処理(
図7のステップ0706)の一例を示すフローチャートである。
【0109】
ステップ1201において、書き込み部6は、書き込み先頭テーブル15において、選択された種別に対応するページ番号に1を加える。
【0110】
ステップ1202において、書き込み部6は、選択された種別に対応するページ番号が所定数(例えば1ブロックに含まれるページ数)以上か否かを判断する。ページ番号が所定数以上の場合、処理はステップ1203へ進む。ページ番号が所定数に満たない場合、処理は終了する。
【0111】
ステップ1203において、書き込み部6は、ページデータが書き込まれたブロックに関する制御用データを生成する。
【0112】
ステップ1204において、書き込み部6は、選択された種別と書き込み先頭テーブル15とに基づいて決定されたブロック番号の示す領域に、生成された制御用データを書き込む。例えば、書き込み部6は、決定されたブロック番号の示すブロックの最後のページに、制御用データを書き込む。
【0113】
ステップ1205において、書き込み部6は、NANDブロックテーブル16に対して、決定されたブロック番号に対応するシーケンス番号に、シーケンス番号18を設定する。
【0114】
ステップ1206において、書き込み部6は、シーケンス番号18に1を加える。
【0115】
ステップ1207において、書き込み部6は、選択された種別であり、有効ページ数がゼロであり、消去回数が少ないブロックを選択する。消去回数が少ないブロックの選択方法としては、例えば、消去回数が最も少ないブロックを選択してもよく、相対的に消去回数が少ないブロックのグループの中から任意のブロックを選択してもよい。
【0116】
ステップ1208において、書き込み部6は、ステップ1207において選択されたブロックのブロック番号と、当該選択されたブロックの先頭のページ番号(例えばゼロ)とを、書き込み先頭テーブル15の選択された種別に対して、設定する。
【0117】
図13は、制御用データの一例を示すデータ構造図である。制御用データ24は、上記のコンパクション処理、及び書き込み先頭テーブル更新処理において用いられる。この
図13では、NAND型フラッシュメモリ22Aに書込まれている制御用データ24を例示しているが、他のNAND型フラッシュメモリ22B,22C,23A〜23Cに書き込まれている制御用データも同様である。
【0118】
制御用データ24は、ブロックごとに生成される。ブロックには、複数のページデータd1〜dNが書き込まれる。制御用データ24は、このブロックに含まれている複数のページデータd1〜dNの論理アドレスと、このブロックに対する書き込み完了に対応するシーケンス番号とを含む。例えば、シーケンス番号は、制御用データ24の最後の領域に配置される。しかしながら、制御用データ24におけるシーケンス番号の配置位置は適宜に変更が可能である。
【0119】
図14は、NANDブロックテーブル16を更新する処理(
図7のステップ0708又は
図11のステップ1104)の一例を示すフローチャートである。
【0120】
この
図14の処理は、追記書き込み又はコンパクション処理に基づいて発生するNANDブロックテーブル16の更新処理である。
【0121】
ステップ1401において、書き込み部6又はコンパクション部8は、アドレス変換テーブル17を参照し、追記書き込みにより、又は、コンパクション処理による移動によって、無効になったページデータの複数のブロック番号を決定する。
【0122】
ステップ1402において、書き込み部6又はコンパクション部8は、NANDブロックテーブル16において、決定されたブロック番号に対応する有効ページ数を、無効になったページデータの数だけ減らす。
【0123】
ステップ1403において、書き込み部6又はコンパクション部8は、有効ページ数がゼロになったブロックがある場合に、この有効ページ数がゼロになったブロックを消去し、NANDブロックテーブル16において、有効ページ数がゼロになったブロックのブロック番号に対応する消去回数に、1を加える。
【0124】
ステップ1404において、書き込み部6又はコンパクション部8は、追記書き込みされる、又は、コンパクション処理により移動されるページデータを書き込む複数のブロックのブロック番号を決定する。
【0125】
ステップ1405において、書き込み部6又はコンパクション部8は、NANDブロックテーブル16において、決定されたブロック番号に対応する有効ページ数を、書き込み対象又は移動対象のページデータの数だけ増やす。
【0126】
以下で、本実施形態の特徴を具体的に説明する。
【0127】
本実施形態では、シーケンス番号差分に基づいて、書き込み先の種別が選択される。
【0128】
図15は、種別選択部10による種別選択処理の一例を示すフローチャートである。
【0129】
ステップ1501において、種別選択部10は、アドレス変換テーブル17を参照し、書き込み対象のページデータが書き込まれているNAND型フラッシュメモリのブロック番号を検索する。
【0130】
ステップ1502において、種別選択部10は、アドレス変換テーブル17において、書き込み対象ページデータのブロック番号が未定義か否か判断する。
【0131】
書き込み対象ページデータのブロック番号が未定義の場合は、処理はステップ1503へ進む。書き込み対象ページデータのブロック番号が未定義ではない場合は、処理はステップ1504へ進む。
【0132】
ステップ1503において、種別選択部10は、消去上限回数が最も少ない種別Cを選択する。アドレス変換テーブル17においてアドレス変換のための情報が未定義の書き込み対象ページデータは新規データである。新規の書き込み対象ページデータの書き込み間隔は長いとみなし、種別選択部10は、書き込み間隔の長いデータの記憶に適している種別Cを選択する。
【0133】
ステップ1504において、種別選択部10は、NANDブロックテーブル16を参照し、検索されたブロック番号に対応するシーケンス番号を決定する。
【0134】
ステップ1505において、種別選択部10は、シーケンス番号18と、決定されたシーケンス番号との差分であるシーケンス番号差分を算出し、シーケンス番号差分をヒストグラム生成部11へ送る。なお、ヒストグラム生成部11の負荷を下げるため、M回のシーケンス番号差分の算出に対して、シーケンス番号差分の送信を1回に間引いてもよい。
【0135】
ステップ1506において、種別選択部10は、境界テーブル20の境界値に基づいて、算出されたシーケンス番号差分に対応する種別を決定する。
【0136】
ステップ1507において、種別選択部10は、決定された種別のNAND型フラッシュメモリをページデータの書き込み先として選択する。
【0137】
上記の種別選択処理において用いられる境界テーブル20の境界値は、ヒストグラム生成部11によるヒストグラム生成処理及び境界設定部12による境界設定処理によって設定される。以下では、
図16乃至
図19を参照して、ヒストグラム生成処理及び境界設定処理について説明する。
【0138】
図16は、ヒストグラム生成処理の一例を示すフローチャートである。
【0139】
ステップ1601において、ヒストグラム生成部11は、メモリ14に記憶されているヒストグラムテーブル19を初期化する。
【0140】
ステップ1602において、ヒストグラム生成部11は、ヒストグラムテーブル19の総書き込み数(総サンプル数)をゼロに設定し、開始時シーケンス番号をメモリ14に記憶する。
【0141】
ステップ1603において、ヒストグラム生成部11は、シーケンス番号差分を種別選択部10から受ける。
【0142】
ステップ1604において、ヒストグラム生成部11は、受けたシーケンス番号差分に対応する書き込み回数に1を加え、総書き込み回数に1を加える。例えば、ヒストグラム生成部11は、シーケンス番号差分をヒストグラムの階級幅(階級範囲)Dで割り算した値であるシーケンス番号差分/Dの属する範囲に対応する書き込み回数を加算し、さらに、総書き込み回数を加算する。
【0143】
ステップ1605において、ヒストグラム生成部11は、所定の測定時間が経過したか否かを判断する。所定の測定時間が経過した場合、処理はステップ1606へ進む。所定の測定時間が経過していない場合、処理はステップ1603へ戻る。
【0144】
ステップ1606において、ヒストグラム生成部11は、終了時シーケンス番号をメモリ14に記憶する。
【0145】
ステップ1607において、ヒストグラム生成部11は、測定期間S=(終了時シーケンス番号−開始時シーケンス番号)を計算する。
【0146】
ステップ1608において、ヒストグラム生成部11は、階級幅Dと測定期間Sとに基づいて、ヒストグラムテーブル19を補正する。例えば、ヒストグラム生成部11は、測定時間S経過後に、ヒストグラムテーブル19のi番目のエントリの書き込み回数に、(i+0.5)×D/Sを乗算し、ヒストグラムテーブル19を補正する。iの値が大きいほど、シーケンス番号差分/Dが大きいエントリである。
【0147】
図17は、ヒストグラムテーブル19の補正の一例を示すグラフである。
【0148】
ヒストグラムテーブル19では、シーケンス番号差分が階級幅Dによりスケーリングされている。スケーリングされたシーケンス番号差分であるシーケンス番号差分/Dに対する書き込み回数がカウントされる。この
図17では、ヒストグラムテーブル19のシーケンス番号差分/Dを階級(横軸)とし、書き込み回数を度数(縦軸)としている。シーケンス番号差分/Dの小さいデータは、書き込み間隔が短い。シーケンス番号差分/Dの大きいデータは、書き込み間隔が長い。測定期間Sが短いため、書き込み間隔の短いデータは、1つのデータで多数回の書き込みがカウントされる。書き込み間隔の長いデータは、1つのデータで少ない書き込み回数がカウントされる。そこで、本実施形態では、ヒストグラムテーブル19の各エントリの書き込み回数に(i+0.5)×D/Sを乗算して書き込み間隔毎のデータ量に変換する。測定時間S内において、iの値が小さいほど、この(i+0.5)×D/Sの値は小さい。iの値が大きいほど、この(i+0.5)×D/Sの値も大きくなる。したがって、iの値が小さいほど書き込み回数に小さい値が乗算され、iの値が大きいほど書き込み回数に大きい値が乗算される。
【0149】
図18は、境界設定処理の一例を示すフローチャートである。
【0150】
図19は、ヒストグラムと、インデックスI,Jとの関係の例を示すグラフである。
【0151】
ステップ1801において、境界設定部12は、種別AのNAND型フラッシュメモリ22A,23Aの実効容量を求める。例えば、実効容量とは、NAND型フラッシュメモリに無理なく余裕のある状態で記憶可能なデータ量であるとする。
【0152】
ステップ1802において、境界設定部12は、ヒストグラムテーブル19の書き込み回数を、ヒストグラムの最小の階級(最小のシーケンス番号差分/D)側からシーケンス番号差分/Dが大きくなる方向で順に加算し、この加算値と書き込みのページサイズとを掛け算した積算値を求め、積算値が種別Aの実効容量を超えるシーケンス番号差分/Dの値であるインデックスIを求める。
【0153】
ステップ1803において、境界設定部12は、インデックスIとDとに基づいて計算される(I−1)×Dを、境界テーブル20の種別Aに対する境界値とする。
【0154】
ステップ1804において、境界設定部12は、種別BのNAND型フラッシュメモリ22B,23Bの実効容量を求める。
【0155】
ステップ1805において、境界設定部12は、ヒストグラムテーブル19の書き込み回数をシーケンス番号差分/DのI側からシーケンス番号差分/Dが大きくなる方向へ順に加算し、この加算値と書き込みのページサイズとを掛け算した積算値を求め、積算値が種別Bの実効容量を超えるシーケンス番号差分/Dの値であるインデックスJを求める。
【0156】
ステップ1806において、境界設定部12は、インデックスJとDとに基づいて計算される(J−1)×Dを、境界テーブル20の種別Bに対する境界値とする。
【0157】
ステップ1807において、境界設定部12は、上限が設定されないことを意味する−1を、境界テーブル20の種別Cに関係づける。
【0158】
例えば、各種のNAND型フラッシュメモリの実効容量は、物理容量の2/3以上、3/4以下のいずれかの値に設定される。例えば、種別AのNAND型フラッシュメモリ22A,23Aの物理容量が1000000ギガバイトの場合、実効容量は666666ギガバイト以上、750000ギガバイト以下となる。例えば、種別BのNAND型フラッシュメモリ22B,23Bの物理容量が2000000ギガバイトの場合、実効容量は1333333ギガバイト以上、1500000ギガバイト以下となる。
【0159】
ヒストグラムテーブル19のエントリは、例えばページ単位でカウントされるが、種別選択部10からヒストグラム生成部11へのM回分の送信が1回に間引かれている場合には、Mページ分でカウントされる。
【0160】
図20は、寿命判定部13による各種別A〜Cに対する書き込み寿命判定処理の一例を示すフローチャートである。
【0161】
ステップ2001において、寿命判定部13は、例えば種別AのNAND型フラッシュメモリ22A,23Aに対する書き込み寿命を判定する。
【0162】
ステップ2002において、寿命判定部13は、例えば種別BのNAND型フラッシュメモリ22B,23Bに対する書き込み寿命を判定する。
【0163】
ステップ2003において、寿命判定部13は、例えば種別CのNAND型フラッシュメモリ22C,23Cに対する書き込み寿命を判定する。
【0164】
図21は、特定の種別に対する書き込み寿命判定処理の一例を示すフローチャートである。以下では、書き込み寿命判定処理の対象となる種別をXと記す。種別Xは、種別A〜Cのいずれかに相当する。
【0165】
ステップ2101において、寿命判定部13は、例えばNANDブロックテーブル16を参照し、種別XのNAND型フラッシュメモリのデータ容量と、種別Xの消去上限回数と、NANDブロックテーブル16における種別Xのブロックの消去回数に基づいて、ヒストグラム生成のための測定期間Sに種別XのNAND型フラッシュメモリに書き込み可能なデータ量を算出する。
【0166】
ステップ2102において、寿命判定部13は、ヒストグラムテーブル19に基づいて、種別XのNAND型フラッシュメモリに測定期間S内に実際に書き込まれたデータ量を算出する。例えば、寿命判定部13は、ヒストグラムテーブル19の種別Xに対応する範囲の書き込み回数を加算し、この加算値とページサイズとを掛け算することで、種別XのNAND型フラッシュメモリに実際に書き込まれたデータ量を算出する。
【0167】
ステップ2103において、寿命判定部13は、測定期間S内に種別XのNAND型フラッシュメモリに実際に書き込まれたデータ量が、測定期間Sに種別XのNAND型フラッシュメモリに書き込み可能なデータ量よりも多いか否か判断する。
【0168】
実際に書き込まれたデータ量が書き込み可能なデータ量より多い場合には、処理はステップ2104に進む。
【0169】
実際に書き込まれたデータ量が書き込み可能なデータ量以下の場合には、処理は終了する。
【0170】
ステップ2104において、寿命判定部13は、測定期間S内に種別XのNAND型フラッシュメモリに実際に書き込まれたデータ量と、測定期間Sに種別XのNAND型フラッシュメモリに書き込み可能なデータ量との差分を追加すべき種別Xの物理容量とし、追加すべき種別Xの物理容量とアラート通知とをホスト装置3に返す。
【0171】
以上説明した本実施形態においては、データの書き込み時に書き込み間隔を示すシーケンス番号差分が算出され、シーケンス番号差分に応じてデータが書き込まれる種別が決定される。書き込み間隔の短いデータは、消去上限回数の多い種別AのNAND型フラッシュメモリ22A,23Aに書き込まれる。書き込み間隔が中程度のデータは、消去上限回数が中程度の種別BのNAND型フラッシュメモリ22B,23Bに書き込まれる。書き込み間隔の長いデータは、消去上限回数が少ない種別CのNAND型フラッシュメモリ22C,23Cに書き込まれる。
【0172】
したがって、本実施形態においては、種別A〜CのNAND型フラッシュメモリ22A〜22C,23A〜23Cの書き込み寿命を延ばすことができる。
【0173】
本実施形態においては、種別が3以上の場合であっても、書き込み間隔と消去上限回数とを整合させて書き込み先のNAND型フラッシュメモリを選択することができる。
【0174】
本実施形態において、シーケンス番号差分はブロック単位で管理される。シーケンス番号差分は、シーケンス番号18と、データが書き込まれているブロックの書き込みが完了した時点のシーケンス番号との差分である。ブロックに対する書き込み完了時のシーケンス番号は、例えばNANDブロックテーブル16で管理される。本実施形態の制御のために必要なデータ量のほとんどは、NANDブロックテーブル16のデータ量となる。例えば、ページデータごとの書き込み回数をカウントし、ページデータの書き込み回数からページデータの書き込み頻度を算出し、この書き込み頻度に基づいてページデータの書き込み先を決定する方法を比較例とする。本実施形態は、この比較例よりも少ない記憶容量でデータの書き込み先を選択することができる。例えば、NAND型フラッシュメモリ22A〜22C,23A〜23Cのブロックサイズが4メガバイトのであり、記憶部22,23が100テラバイトの記憶容量を持つ場合、本実施形態では500メガバイト程度で各種データ15〜20を管理することができる。これに対して、比較例のようにページデータの書き込み回数をカウントする場合には、データを管理するために少なくとも100ギガバイト程度の記憶容量が必要になる。
【0175】
本実施形態においては、シーケンス番号差分に基づいて書き込み先の種別が選択されるため、データの書き込み回数をカウントした後に書き込み頻度を算出する比較例よりも、状況の変化を早く検出することができ、迅速に対応することができる。
【0176】
本実施形態においては、シーケンス番号差分と書き込み回数との関係を示すヒストグラムが生成され、シーケンス番号差分の小さい側から書き込み回数を加算していくことで、NAND型フラッシュメモリの実効容量分に対応する境界値を求めることができる。求められた境界値とシーケンス番号差分に基づいて書き込み先の種別を選択することにより、NAND型フラッシュメモリに実効容量相当のデータを書き込むことができる。
【0177】
本実施形態においては、シーケンス番号差分に対する書き込み回数のヒストグラムに基づいて、各種別のNAND型フラッシュメモリ22A〜22C,23A〜23Cに書き込み可能なデータ量と、実際に書き込まれたデータ量とを比較することができる。したがって、メモリ容量の不足量を出力することができ、新たなNAND型フラッシュメモリを迅速に追加することができる。
【0178】
本実施形態において、シーケンス番号18は、ブロックの書き込みが完了した場合に増加される。しかしながら、シーケンス番号18は、例えば所定の値からブロックの書き込みが完了した場合に減少されてもよい。換言すれば、シーケンス番号18に対しては、ブロックの書き込み順序を認識可能な変更が行われればよい。
【0179】
[第2の実施形態]
本実施形態においては、上記第1の実施形態に係るストレージ装置の変形例について説明する。
【0180】
本実施形態においては、ある種別に複数のNAND型フラッシュメモリが備えられている場合に、この種別の複数のNAND型フラッシュメモリがほぼ同じタイミングで寿命となることを防止するストレージ装置について説明する。
【0181】
また、本実施形態においては、種別間でウェアレベリングを行うストレージ装置について説明する。
【0182】
図22は、第2の実施形態に係るストレージ装置を備えた計算機システムの構成を例示するブロック図である。
【0183】
計算機システム26は、ストレージ装置27を備える。ストレージ装置27は、制御部28を備える。制御部28は、種別制御部29を備える。種別制御部29は、上記第1の実施形態の種別制御部9と同様の構成に加えて、疑似種別設定部30、種別間ウェアレベリング部31を備える。
【0184】
疑似種別設定部30は、ある種別のNAND型フラッシュメモリの一部に対して、新たに疑似的な種別を設定する。例えば、疑似種別設定部30は、ヒストグラムテーブル19に基づいて、種別A〜Cに対応するシーケンス番号差分の範囲に、2以上の書き込み回数のピークがあるか否か判断し、2以上の書き込み回数のピークを含む種別を、2以上の分割領域に分割し、2以上の分割領域に対応するシーケンス番号差分を境界テーブル20に設定する。
【0185】
種別間ウェアレベリング部31は、異なる種別のNAND型フラッシュメモリの間で、ウェアレベリングを実行する。例えば、種別間ウェアレベリング部31は、種別A〜Cの消去上限回数とNANDブロックテーブル16とに基づいて、種別A〜Cに含まれる各ブロックの消耗度を算出し、一時的に、消耗度の高いブロックに長い書き込み間隔の種別を設定し、消耗度の低いブロックに短い書き込み間隔の種別を設定する。
【0186】
図23は、疑似種別設定部30による疑似種別設定処理の一例を示すフローチャートである。
【0187】
ステップ2301において、疑似種別設定部30は、ヒストグラムテーブル19に基づいて、種別A〜Cに対応するシーケンス番号差分/Dの範囲ごとに、書き込み回数のピークを検索する。
【0188】
ステップ2302において、疑似種別設定部30は、種別A〜Cに対応する範囲のうちの少なくとも1つの範囲に、ピークが2つ以上あるか否かを判断する。
【0189】
種別A〜Cに対応する範囲のいずれにも、2以上のピークがない場合、処理は終了する。
【0190】
種別A〜Cに対応する範囲のいずれかに、ピークが2つ以上ある場合、処理はステップ2303へ進む。
【0191】
ステップ2303において、疑似種別設定部30は、ピークが2つ以上ある種別に対して、疑似種別設定が有効か否かを判断する。
【0192】
例えば、疑似種別設定部30は、ピークの数、ピークが2つ以上ある種別のNAND型フラッシュメモリの数、又は、ピークが2つ以上ある種別の書き込み上限回数に達する早さ、を確認し、疑似種別設定が有効であるか否かを判断する。より詳しい例を説明すると、疑似種別設定部30は、ピークが2つ以上ある種別に対して複数のNAND型フラッシュメモリを備えており、かつ、ピークが2つ以上ある種別に対する書き込み量が他の種別の書き込み量より多く、ピークが2つ以上ある種別が他の種別よりも早く書き込み上限回数に達すると判断された場合に、疑似種別設定が有効であると判断する。
【0193】
疑似種別設定が有効であると判断された場合、処理はステップ2304へ進む。疑似種別設定が有効でないと判断された場合、処理は終了する。
【0194】
ステップ2304において、疑似種別設定部30は、疑似種別設定が有効と判断された種別を、書き込み回数の2つのピークがそれぞれ異なる種別に対応するように、分割し、NANDブロックテーブル16、境界テーブル20、書き込み先頭テーブル15に対して、分割により新しく増えた種別を疑似種別として設定する。
【0195】
図24は、疑似種別の一例を示すグラフである。この
図24は、種別Bに対して、疑似種別設定が有効と判断された場合を例として示している。
【0196】
ヒストグラムテーブル19の示すヒストグラムでは、種別Bに対応するシーケンス番号差分/Dの範囲に、2つのピークが存在する。
【0197】
疑似種別設定部27は、例えば、種別Bに対応するシーケンス番号差分/Dの範囲のうち、書き込み回数の極小値となるシーケンス番号差分/Dの値を境界値とし、種別Bを、疑似種別A’と種別Bとに分割する。
【0198】
疑似種別設定部27は、NANDブロックテーブル16におけるブロック番号と種別と消去回数、疑似種別A’の境界値などに基づいて、NANDブロックテーブル16、境界テーブル20、書き込み先頭テーブル15に疑似種別A’の情報を設定し、NANDブロックテーブル16、境界テーブル20、書き込み先頭テーブル15を更新する。
【0199】
例えば、疑似種別設定部27は、変更前の種別Bのブロックのうち、消去回数の多いグループのブロックに対して疑似種別A’を設定し、消去回数の少ないグループのブロックに対して種別Bを維持する。
【0200】
図25は、疑似種別が設定されたNANDブロックテーブル16の一例を示すデータ構造図である。
【0201】
NANDブロックテーブル16では、変更前の種別Bが、疑似種別A’と変更後の種別Bとに分割されている。
【0202】
疑似種別A’に対応するシーケンス番号差分は、種別Aに対応するシーケンス番号差分と種別Bに対応するシーケンス番号差分との間になる。このため、疑似種別A’のブロックの消去回数は、種別Aのブロックの消去回数と種別Bのブロックの消去回数との間の値となる可能性が高くなる。
【0203】
NANDブロックテーブル16では、種別Bであったブロック番号1000000〜1999999が、疑似種別A’に変更されている。
【0204】
図26は、疑似種別が設定された境界テーブル20の一例を示すデータ構造図である。
【0205】
境界テーブル20には、種別A’に関するエントリが追加される。
【0206】
境界テーブル20には、種別A’の境界値(上限値)として、4000000が設定されている。この境界テーブル20を用いて、書き込み対象のページデータの書き込みの際に算出されたシーケンス番号差分が2000001〜4000000の場合に、ページデータの書き込み先種別A’が選択される。
【0207】
図27は、疑似種別が設定された書き込み先頭テーブル15の一例を示すデータ構造図である。
【0208】
書き込み先頭テーブル15には、種別A’に関するエントリが追加される。
【0209】
書き込み先頭テーブル15は、種別A’に対する書き込みを、ブロック番号1000000のページ番号0に対して行うことを示している。
【0210】
図28は、種別間ウェアレベリング部31による種別間ウェアレベリング処理の一例を示すフローチャートである。
【0211】
ステップ2801において、種別間ウェアレベリング部31は、NANDブロックテーブル16を参照し、各ブロックの消去回数/消去上限回数で定義される消耗度を算出する。
【0212】
ステップ2802において、種別間ウェアレベリング部31は、異なる種別間で消耗度の差が大きいか否かを判断する。例えば、種別間ウェアレベリング部31は、種別毎の消耗度の最大値を比較し、消耗度の最大値の差が予め設定されたしきい値を超えるか否かにより、消耗度の差の大きさを判断する。例えば、種別間ウェアレベリング部31は、種別毎の消耗度の平均値を計算し、消耗度の平均値の差が予め設定されたしきい値を超えるか否かにより、消耗度の差の大きさを判断してもよい。
【0213】
種別間で消耗度の差が小さい場合、処理は終了する。
【0214】
種別間で消耗度の差が大きい場合、処理はステップ2803へ進む。
【0215】
ステップ2803において、種別間ウェアレベリング部31は、NANDブロックテーブル16における消耗度が最も高いエントリHを検索する。
【0216】
ステップ2804において、種別間ウェアレベリング部31は、NANDブロックテーブル16における消耗度が最も低いエントリLを検索する。
【0217】
ステップ2805において、種別間ウェアレベリング部31は、NANDブロックテーブル16のエントリHの種別とエントリLの種別とを交換する。
【0218】
ステップ2806において、種別間ウェアレベリング部31は、所定の時間が経過するのを待つ。
【0219】
ステップ2807において、種別間ウェアレベリング部31は、NANDブロックテーブル16のエントリHの種別とエントリLの種別を元に戻す。そして、処理は終了する。
【0220】
上記の種別間ウェアレベリング処理において、処理の順序は適宜に変更してもよい。例えば、ステップ2803とステップ2804の順序は入れ替えてもよく、並列に実行されてもよい。
【0221】
以上説明した本実施形態においては、シーケンス番号差分と書き込み回数との関係を示すヒストグラムが生成される。このヒストグラムにおいてある種別に対応する範囲が2以上のピークを持ち、2以上のピークを持つ種別を分離することが統計的に適している場合に、新たに疑似種別が設定され、同一種別であったブロックが、異なる種別に細分化される。このように、種別の数を増加することにより、同時期に交換が必要になるNAND型フラッシュメモリの数を減らすことができる。
【0222】
本実施形態においては、シーケンス番号差分が同程度のデータが、同一種別のNAND型フラッシュメモリに書き込まれる。
【0223】
なお、上記の疑似種別設定処理において、ある種別においてヒストグラムのピークが2以上ある場合には、この種別に属する1つのNAND型フラッシュメモリの複数の領域(例えばブロック)が複数の種別に分割されてもよく、この種別に属する複数のNAND型フラッシュメモリが複数の種別に分割されてもよい。例えば、1つのNAND型フラッシュメモリの一部の領域に対して疑似種別が設定され、他の領域は元の種別が維持されてもよい。1つのNAND型ブラッシュメモリ内でシーケンス番号差分が同じデータを同じ領域に集めることにより、コンパクションの効率を増すことができ、コンパクションの最適化を行うことができる。
【0224】
本実施形態においては、種別間ウェアレベリング処理によって、種別の異なるNAND型フラッシュメモリ間で、消耗度が高いブロックの種別と、消耗度が低いブロックの種別とが一時的に交換される。これにより、消耗度が高いブロックに長い書き込み間隔のデータが割り当てられ、消耗度が低いブロックに短い書き込み間隔のデータが割り当てられ、疑似種別を含めた異なる種別のブロックの間で消耗度を均一にすることができ、NAND型フラッシュメモリ22A〜22C,23A〜23Cの寿命を延ばすことができる。
【0225】
上記の各実施形態において、各テーブル15〜17,19,20は適宜組み合わせることができ、又は、分割することができる。
【0226】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。