(57)【要約】  揮発性メモリの消費を抑えつつ、細かい粒度で不揮発性メモリのライト頻度を判定する。コントローラは、特定物理記憶領域から他の物理記憶領域への特定データのコピーを実行すると判定した場合、特定物理記憶領域に格納された特定データと、不揮発性メモリに格納された特定ライト頻度情報とを読み出し、特定ライト頻度情報及び分類情報に基づいて、複数の物理記憶領域グループの中からライト先物理記憶領域グループを選択し、ライト先物理記憶領域グループからライト先物理記憶領域を選択し、特定ライト頻度情報を変更し、特定データをライト先物理記憶領域へ書き込み、変更された特定ライト頻度情報を不揮発性メモリへ書き込み、ライト先物理記憶領域グループ及びライト先物理記憶領域に基づいて変換情報を更新する。
2016135955.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
揮発性メモリと、
前記不揮発性メモリ、前記揮発性メモリ、及び上位装置に接続されるコントローラと、
を備え、
前記不揮発性メモリは、複数の物理記憶領域グループを含み、
各物理記憶領域グループは、少なくとも一つの、消去の単位の領域であり、
各物理記憶領域グループは、複数の物理記憶領域を含み、
各物理記憶領域は、ライト及びリードの単位の領域であり、
前記コントローラは、
前記複数の物理記憶領域グループの夫々の分類を示す分類情報を、前記揮発性メモリへ格納し、
前記上位装置に提供する特定論理記憶領域に対し、特定物理記憶領域グループと、前記特定物理記憶領域グループ内の特定物理記憶領域とを関連付け、特定データを前記特定物理記憶領域へ書き込み、前記特定論理記憶領域のライト頻度を示す特定ライト頻度情報を前記不揮発性メモリへ書き込み、前記特定論理記憶領域と、前記特定物理記憶領域グループと、前記特定物理記憶領域とを示す変換情報を、前記揮発性メモリへ格納し、
前記特定物理記憶領域から他の物理記憶領域への前記特定データのコピーを実行すると判定した場合、前記特定物理記憶領域に格納された前記特定データと、前記不揮発性メモリに格納された前記特定ライト頻度情報とを読み出し、前記特定ライト頻度情報及び前記分類情報に基づいて、前記複数の物理記憶領域グループの中からライト先物理記憶領域グループを選択し、前記ライト先物理記憶領域グループからライト先物理記憶領域を選択し、前記特定ライト頻度情報を変更し、前記特定データを前記ライト先物理記憶領域へ書き込み、前記変更された特定ライト頻度情報を前記不揮発性メモリへ書き込み、前記ライト先物理記憶領域グループ及び前記ライト先物理記憶領域に基づいて前記変換情報を更新する、
不揮発性メモリデバイス。
【請求項２】
前記コントローラは、前記特定論理記憶領域を更新するための特定ライトコマンドと更新データとを、前記上位装置から受信した場合、前記変換情報に基づいて、前記特定論理記憶領域に対応する前記特定物理記憶領域グループ及び前記特定物理記憶領域を特定し、前記分類情報に基づいて、前記複数の物理記憶領域グループの中から前記ライト先物理記憶領域グループを選択し、前記ライト先物理記憶領域グループから前記ライト先物理記憶領域を選択し、前記特定ライト頻度情報を変更し、前記更新データを含むライトデータを前記ライト先物理記憶領域へ書き込み、前記変更された特定ライト頻度情報を前記不揮発性メモリへ書き込み、前記変換情報を更新する、
請求項１に記載の不揮発性メモリデバイス。
【請求項３】
前記分類情報は、前記特定物理記憶領域グループの分類として、予め設定されライト頻度の程度を示す複数のライト頻度クラスの一つである特定ライト頻度クラスを示し、前記ライト先物理記憶領域グループの分類として、前記複数のライト頻度クラスの一つであるライト先ライト頻度クラスを示し、
前記コントローラは、予め設定されライト頻度の分類を示す複数のライト頻度クラスの中から、前記特定ライト頻度情報及び前記特定ライト頻度クラスに基づいて、前記ライト先ライト頻度クラスを決定し、前記ライト先ライト頻度クラスに対応する前記ライト先物理記憶領域グループを選択する、
請求項２に記載の不揮発性メモリデバイス。
【請求項４】
前記コントローラは、前記不揮発性メモリに格納された前記特定データが更新されないまま前記不揮発性メモリ内へコピーされた回数である特定連続コピー回数を、前記特定ライト頻度情報として計測し、前記特定連続コピー回数と前記特定ライト頻度クラスとに基づいて、前記ライト先ライト頻度クラスを決定する、
請求項３に記載の不揮発性メモリデバイス。
【請求項５】
前記コントローラは、前記特定ライトコマンドを受信した場合、前記特定連続コピー回数をリセットし、前記ライトデータを前記ライト先物理記憶領域へ書き込み、前記リセットされた特定連続コピー回数を前記不揮発性メモリへ書き込む、
請求項４に記載の不揮発性メモリデバイス。
【請求項６】
前記コントローラは、
前記特定ライト頻度クラスに対して、特定連続コピー回数の閾値である特定閾値を決定し、
前記コピーを実行する場合、且つ前記特定連続コピー回数が前記特定閾値以下であると判定され、且つ特定ライト頻度クラスが最低のライト頻度を示すライト頻度クラスでないと判定された場合、前記ライト先ライト頻度クラスを、前記特定ライト頻度クラスより低いライト頻度を示すライト頻度クラスへ変更する、
請求項５に記載の不揮発性メモリデバイス。
【請求項７】
前記コントローラは、前記特定ライト頻度クラスに対応する全ての論理記憶領域の更新ライト回数の合計を計測し、前記特定ライト頻度クラスに対応する全ての論理記憶領域のコピー回数の合計を計測し、前記特定ライト頻度クラスに対し、前記更新ライト回数の合計と前記コピー回数の合計とに基づいて前記特定閾値を決定する、
請求項６に記載の不揮発性メモリデバイス。
【請求項８】
前記コントローラは、
前記複数の物理記憶領域グループの夫々の劣化度を示す劣化度情報を、前記揮発性メモリへ格納し、
前記劣化度情報に基づいて、前記ライト先物理記憶領域グループのライト先ライト頻度クラスを決定する、
請求項７に記載の不揮発性メモリデバイス。
【請求項９】
前記コントローラは、より低い劣化度の物理記憶領域グループを、より高いライト頻度のライト頻度クラスに関連付ける、
請求項８に記載の不揮発性メモリデバイス。
【請求項１０】
前記コントローラは、
前記複数のライト頻度クラスの夫々に関連付けられる物理記憶領域グループの数を示す割当情報を、前記揮発性メモリへ格納し、
前記割当情報に基づいて、より高いライト頻度のライト頻度クラスに、より多くの物理記憶領域グループを関連付ける、
請求項９に記載の不揮発性メモリデバイス。
【請求項１１】
前記コントローラは、前記割当情報に基づいて、リクラメーションの対象の物理記憶領域を選択する、
請求項１０に記載の不揮発性メモリデバイス。
【請求項１２】
前記コントローラは、前記変更された特定ライト頻度情報を前記ライト先物理記憶領域へ書き込む、
請求項１に記載の不揮発性メモリデバイス。
【請求項１３】
前記コントローラは、前記特定論理記憶領域が、前記特定ライトコマンドの直前のライトコマンドにより指定された論理記憶領域に連続しないと判定された場合、前記ライト先ライト頻度クラスを、前記特定ライト頻度クラスより高いライト頻度を示すライト頻度クラスへ変更する、
請求項３に記載の不揮発性メモリデバイス。
【請求項１４】
前記コントローラは、前記コピーがリフレッシュである場合、前記ライト先ライト頻度クラスとして、予め設定されたライト頻度クラスを選択する、
請求項３に記載の不揮発性メモリデバイス。
【請求項１５】
前記コントローラは、前記特定ライト頻度クラスに対し、前記更新ライト回数の合計に対する前記コピー回数の合計の比に基づいて前記特定閾値を決定する、
請求項７に記載の不揮発性メモリデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリデバイスに関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリ（以降、単にフラッシュメモリ、またはＦＭ）について説明する。フラッシュメモリは、記憶しているデータを直接書き換えることができず、消去処理を必要とする。ブロックは、データの消去単位であり、ページは、データの読み書き単位である。今後特に断りがない限り、単にブロック／ページと記述した場合はフラッシュメモリのものを指す。１つのブロック内に複数のページが設けられる。【０００３】
フラッシュメモリを用いる記憶デバイスであるフラッシュメモリデバイスは、データを書き換える場合、まず記憶している有効なデータを、例えばＤＲＡＭ（Dynamic Random Access Memory）などの消去単位のない記憶デバイスにロードして、必要な箇所を更新する。次に、フラッシュメモリデバイスは、元々データが記憶されていたブロックに消去処理を施す。最後に、フラッシュメモリデバイスは、消去したブロックにデータを書き込む。このように、フラッシュメモリにおけるデータの書き換えは、ブロック毎のデータの消去を伴う。しかし、フラッシュメモリの１ブロック分のデータ消去にかかる時間は、１ページ分のデータを書き込むのに要する時間と比べて大きく、従って、１ページ分のデータの書換えのために毎回１ブロック分のデータ消去を行なうような方式では、フラッシュメモリのデータ書換え性能が低下する。【０００４】
このような課題に対処するため、フラッシュメモリデバイスは、データの書換え動作において、更新データを未使用領域へ追記する。これにより、データを更新するその時点では、ブロック消去が不要になる。また、このような追記動作の為に、通常、フラッシュメモリデバイスは、上位装置に公開している容量以上の物理領域を更新領域として保有している。しかし、データの書き換え量が増えると、フラッシュメモリデバイス内の更新領域が枯渇するため、データの更新で論理的に無効化されたデータを消去して記憶領域を再利用可能な状態（空き領域）にする必要がある。そこで、フラッシュメモリデバイスは、無効データを含むブロック内の、有効なデータのみを未使用領域にコピーし、ブロック内のデータを全て無効化した上で、コピー元のブロックを消去して空き領域にするブロック再生処理が知られている。以下、この処理をリクラメーションと呼ぶ。場合によってはＲＣと省略して表記する。このリクラメーションは、無効データ率の高いブロックを対象に実行することで効率よく空き領域を作成可能である。【０００５】
フラッシュメモリは、使用とともに特性が劣化する。劣化は、セルの消去回数に相関があるとされ、一般的にＳＳＤ（Solid State Disk）ベンダは、データ保持特性の品質保証が可能な、最大の消去回数を提示している。劣化はセル単位であるが、消去によって劣化が進むため、ブロック内セルの劣化の進行度はある程度均一化される。ここで、特定のブロックにデータの書換えが集中し、消去回数が増大して使用不可能となった場合、最悪、他のブロックが健全な状態にも関わらず、一部のブロックが書き換え限界に達して使用できなくなることで、フラッシュメモリデバイスの容量を満足できなくなる問題が発生する。そのため、劣化が特定ブロックに集中しないように、各ブロックの劣化の平準化処理が知られている。本処理はウェアレベリングと呼ばれ、以降ＷＬと表記することもある。【０００６】
フラッシュメモリは、一度書き込んだページでも、時間とともに読み出しエラー率が増加する。このようなエラーは、リテンションエラーと呼ばれる。これを回避するために、書き込んでから一定時間経過したページを、別ページにコピーする処理が知られている。この処理は、リフレッシュと呼ばれる。場合によってはＲＦと省略して表記する。リフレッシュにおいても、既に述べた平準化の問題や性能影響を考慮する必要がある。【０００７】
以上で述べたデータ消去時間の隠蔽とデータ消去回数の平準化のため、フラッシュメモリデバイスは、データ書込みの際に、論理アドレスを物理アドレスへ変換する論理物理アドレス変換処理を行う。フラッシュメモリデバイスは、１つ以上のＦＭチップと、ＦＭチップに対するデータの読み書きを制御するデバイスコントローラとを有する。このデバイスコントローラが、論理物理アドレス変換処理を行なう。さらにデバイスコントローラは、論理物理アドレス変換処理のための情報を、論理物理アドレス変換テーブルとして保存する。以下、論理物理アドレス変換処理を論物変換、論理物理アドレス変換テーブルを論物変換テーブルと呼ぶことがある。【０００８】
論物変換は、フラッシュメモリを効率的に使用するために重要な役割を有している。低い自由度の論物変換を用いる場合、論物変換テーブルのサイズを抑えられる代わりに、リクラメーションが頻発するなどにより性能が低下する。一方、高い自由度の論物変換を用いる場合、論物変換テーブルのサイズが膨大になるとともに、制御コストが大幅に増大する。【０００９】
前述のウェアレベリングは、データのライト頻度判定と各ブロックの劣化度のマッチングによって成立する。データのライト頻度の管理の最小粒度は、論物変換によって規定される物理記憶領域への割り付け単位である。論物変換方式は、目的とする動作に応じて様々な方式が提案されているが、簡単かつ効率的な方式として、フラッシュメモリデバイスから上位装置へ提供される論理アドレスであるホストアドレスを、固定長で分割して、これをフラットなテーブルで物理アドレス上にマップする方式が考えられる。ホストアドレスを分割した論理単位を論理ページ、フラッシュメモリのページを、これと区別するために物理ページと呼ぶ。論理ページサイズは、物理ページと一致させることで、管理容易性や、リードの応答性能改善、といった利点を狙うことも考えられるが、より緻密な配置を実現するために、論理ページサイズを物理ページサイズより小さくして管理したり、逆に管理に必要な情報量を低減するために、論理ページサイズを物理ページサイズより大きくしたりすることも考えられる。【００１０】
論物変換テーブルは、Ｉ／Ｏ時に必ず参照されるため、アクセスレイテンシの小さい記憶媒体、例えばＤＲＡＭなどに格納されることが一般的である。【００１１】
特許文献１には、フラッシュメモリデバイスのコントローラが、消去頻度の少ない論理ブロックを、消去回数の少ない物理ブロックに割り当てることが開示されている。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】米国特許第８４４７９１５号明細書
【発明の概要】
【発明が解決しようとする課題】
【００１３】
しかし、論理容量の拡大に伴い、揮発性メモリに格納される論物変換テーブルのサイズも拡大するため、揮発性メモリが細かい粒度でライト頻度を格納することは困難である。
【課題を解決するための手段】
【００１４】
上記課題を解決するために、本発明の一態様である不揮発性メモリデバイスは、不揮発性メモリと、揮発性メモリと、前記不揮発性メモリ、前記揮発性メモリ、及び上位装置に接続されるコントローラと、を備える。前記不揮発性メモリは、複数の物理記憶領域グループを含み、各物理記憶領域グループは、少なくとも一つの、消去の単位の領域であり、各物理記憶領域グループは、複数の物理記憶領域を含み、各物理記憶領域は、ライト及びリードの単位の領域である。前記コントローラは、前記複数の物理記憶領域グループの夫々の分類を示す分類情報を、前記揮発性メモリへ格納し、前記上位装置に提供する特定論理記憶領域に対し、特定物理記憶領域グループと、前記特定物理記憶領域グループ内の特定物理記憶領域とを関連付け、特定データを前記特定物理記憶領域へ書き込み、前記特定論理記憶領域のライト頻度を示す特定ライト頻度情報を前記不揮発性メモリへ書き込み、前記特定論理記憶領域と、前記特定物理記憶領域グループと、前記特定物理記憶領域とを示す変換情報を、前記揮発性メモリへ格納し、前記特定物理記憶領域から他の物理記憶領域への特定データのコピーを実行すると判定した場合、前記特定物理記憶領域に格納された前記特定データと、前記不揮発性メモリに格納された前記特定ライト頻度情報とを読み出し、前記特定ライト頻度情報及び前記分類情報に基づいて、前記複数の物理記憶領域グループの中からライト先物理記憶領域グループを選択し、前記ライト先物理記憶領域グループからライト先物理記憶領域を選択し、前記特定ライト頻度情報を変更し、前記特定データを前記ライト先物理記憶領域へ書き込み、前記変更された特定ライト頻度情報を前記不揮発性メモリへ書き込み、前記ライト先物理記憶領域グループ及び前記ライト先物理記憶領域に基づいて前記変換情報を更新する。
【発明の効果】
【００１５】
揮発性メモリの消費を抑えつつ、細かい粒度で不揮発性メモリのライト頻度を判定することができる。
【図面の簡単な説明】
【００１６】
【図１】実施例の計算機システムの構成を示す。
【図２】ＦＭＰＫＧ１１３の構成を示す。
【図３】メインメモリ２０７に格納される情報の一例を示す。
【図４】ＦＭチップ２１０の構成を示す。
【図５】ページベースの論物変換処理の概要を示す。
【図６】論物変換テーブルを示す。
【図７】論理ページ毎のライト頻度管理方式を示す。
【図８】クラスライト頻度テーブルを示す。
【図９】ブロック属性テーブルを示す。
【図１０】更新ライト処理を示す。
【図１１】コピー処理を示す。
【図１２】データライト処理を示す。
【図１３】ブロック劣化度テーブルを示す。
【図１４】劣化度ランク定義を示す。
【図１５】ランクブロック数テーブルを示す。
【図１６】クラスデータ量テーブルを示す。
【図１７】ブロックの状態遷移を示す。
【図１８】マッチング処理を示す。
【図１９】リクラメーション対象選択処理を示す。
【発明を実施するための形態】
【００１７】
以下、本発明のいくつかの実施例を、図面を用いて説明する。なお、これらの実施例は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。
【００１８】
なお、以後の説明では「ａａａテーブル」、「ａａａキュー」、「ａａａリスト」等の表現にて本発明の情報を説明するが、これら情報はテーブル、キュー等のデータ構造以外で表現されていてもよい。そのため、データ構造に依存しないことを示すために「ａａａテーブル」、「ａａａキュー」、「ａａａリスト」等について「ａａａ情報」と呼ぶことがある。
【００１９】
さらに、各情報の内容を説明する際に、「識別情報」、「番号」、「名」、という表現を用いるが、これらについてはお互いに置換が可能である。
【００２０】
以後の説明では「プログラム」を主語として説明を行う場合があるが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポートを用いながら行うため、プロセッサを主語とした説明としてもよい。また、プログラムを主語として開示された処理は管理計算機や情報処理装置が行う処理としてもよい。また、プログラムの一部または全ては専用ハードウェアによって実現されてもよい。
【００２１】
また、各図において共通の構成については、同一の参照番号を付して説明する。また、共通の構成に関し、各構成を識別する場合には、９９９ａ、９９９ｂなど、数字の最後に英文字を付すか、又は、＃１、＃２等の個別の番号を付して説明する。ただし、必要に応じて英文字又は番号を省略して説明する場合がある。
【００２２】
また、各種プログラムはプログラム配布サーバや、計算機が読み取り可能な記憶メディアによって各計算機にインストールされてもよい。
【００２３】
本発明は、以下の実施例に限定されない。以下の実施例における不揮発性メモリは、ＦＭ（Flash Memory）である。本実施例におけるＦＭは、ブロック単位で消去が行われ、ページ単位でリード及びライトが行われる種類のＦＭ、典型的にはＮＡＮＤ型のフラッシュメモリである。しかし、ＦＭは、ＮＡＮＤ型に代えて他種のフラッシュメモリ（例えばＮＯＲ型）でも良い。また、ＦＭに代えて、他種の不揮発性メモリ、例えば、磁気抵抗メモリであるＭＲＡＭ（Magnetoresistive random access memory）や、抵抗変化型メモリであるＲｅＲＡＭ（Resistance random access memory）、強誘電体メモリであるＦｅＲＡＭ（Ferroelectric random access memory）等の半導体メモリや、相変化メモリであるＰＣＭ（Phase change random access memory）が使用されても良い。
【実施例１】
【００２４】
図１は、実施例の計算機システムの構成を示す。【００２５】
計算機システムは、ストレージシステム１０１と、１つ以上のホスト計算機１０３（ホスト計算機１０３ａ、１０３ｂ）と、管理端末１０４とを有する。ホスト計算機１０３ａ、１０３ｂのそれぞれは、ＳＡＮ（Storage Area Network）１０５を介して、ストレージシステム１０１に接続される。【００２６】
ストレージシステム１０１は、ストレージコントローラ１０２と、複数のフラッシュメモリストレージ装置１１３とを有する。図面及び以下の説明では、フラッシュメモリストレージ装置１１３をＦＭＰＫＧ（Flash Memory Package）と呼ぶことがある。なお、本実施例では、ストレージコントローラ１０２は１つであるが、複数のストレージコントローラ１０２を含む冗長構成であっても良い。【００２７】
ストレージコントローラ１０２は、ＣＰＵ（Central Processing Unit）１０８と、メモリ１０９と、複数のホストＩＦ（Interface）１０７（ホストＩＦ１０７ａ、１０７ｂ）と、複数のストレージＩＦ１１１（ストレージＩＦ１１１ａ、１１１ｂ）と、保守ＩＦ１０６と、通信コントローラ１１０とを有する。ストレージコントローラ１０２内の各部は、バス及び通信コントローラ１１０を介して接続される。メモリ１０９は、ストレージシステム１０１を制御するためのプログラムを格納する領域及びデータを一時的に格納するキャッシュメモリとしての領域を有する。ＣＰＵ１０８は、メモリ１０９に格納されたプログラムに従ってストレージシステム１０１を制御する。【００２８】
ホストＩＦ１０７は、ホスト計算機１０３との通信を行うインタフェイスである。保守ＩＦ１０６は、管理端末１０４と接続され管理端末１０４との通信を行うインタフェイスである。【００２９】
なお、管理者は、管理端末１０４からストレージコントローラ１０２の管理やメンテナンスを行う。しかし、管理端末１０４は必須要素ではなく、管理者は、例えば、ホスト計算機１０３から、ストレージコントローラ１０２の管理やメンテナンスなどを行っても良い。【００３０】
上記の計算機システムでは、ホスト計算機１０３とＦＭＰＫＧ１１３とが、ストレージコントローラ１０２を介して接続されているが、例えば、ストレージコントローラ１０２を省き、ホスト計算機１０３とＦＭＰＫＧ１１３とが直接接続されても良い。【００３１】
以下、ＦＭＰＫＧ１１３の構成を説明する。なお、複数のＦＭＰＫＧ１１３ａ〜１１３ｅは、基本的な構成は同じである。【００３２】
図２は、ＦＭＰＫＧ１１３の構成を示す。【００３３】
ＦＭＰＫＧ１１３は、デバイスコントローラ２０１と、１つ以上のフラッシュメモリ（ＦＭ）チップ２１０ａ〜２１０ｈとを含む。【００３４】
デバイスコントローラ２０１は、ストレージインタフェイス２０２と、フラッシュメモリ（ＦＭ）コントローラ２０３と、バッファ２０４と、バッテリ２０５と、ＣＰＵ２０６と、メインメモリ２０７と、フラッシュメモリインタフェイス２０９とを含む。【００３５】
ストレージインタフェイス２０２は、上位装置１０２との通信を行うインタフェイスである。本実施例における上位装置１０２は、ストレージコントローラ１０２である。【００３６】
フラッシュメモリインタフェイス２０９は、ＦＭチップ２１０との通信を行うインタフェイスである。【００３７】
ＣＰＵ２０６は、デバイスコントローラ２０１の全体を制御するプロセッサであり、メインメモリ２０７に格納されたマイクロプログラムに基づき動作する。例えば、ＣＰＵ２０６は、受領したＩ／Ｏ要求に対して、メインメモリ２０７に格納された論物変換テーブルを参照してＦＭチップ２１０にデータを読み書きする。また、ＣＰＵ２０６は、ＦＭチップ２１０の使用状況に応じて、リクラメーションやウェアレベリング等を実施する。【００３８】
ＦＭコントローラ２０３は、ＣＰＵ２０６によって制御され、ＦＭチップ２１０に対してデータの読み書きを実施する。また、ＦＭコントローラ２０３は、ＦＭチップ２１０に対するものと同様にストレージインタフェイス２０２を通じて上位装置１０２との通信を制御する。【００３９】
本図では、ＣＰＵ２０６は、ＦＭコントローラ２０３に対して外付けとなっているが、ＦＭコントローラ２０３は、ＣＰＵ２０６や、上位／下位インタフェイスを含む１つのＬＳＩで構成されていてもよい。【００４０】
メインメモリ２０７とバッファ２０４は、ＦＭチップ２１０より高速なアクセスが可能な、揮発性の記憶領域であり、例えばＳＲＡＭ（Static Random Access Memory）やＤＲＡＭである。メインメモリ２０７は、制御のためにＣＰＵ２０６により直接用いられるワークスペースであり、バッファ２０４より短いレイテンシを提供する。一方、バッファ２０４は、ユーザデータの一時格納用や、メインメモリ２０７に格納しきれない大サイズテーブルを格納する。バッファ２０４とメインメモリ２０７は、レイテンシと容量を相互補間するものである。【００４１】
本図では、メインメモリ２０７とバッファ２０４は分離されているが、これらを１つの記憶領域で実現してもよい。【００４２】
ストレージインタフェイス２０２は、上位装置１０２とデバイスコントローラ２０１を接続し、通信を行う。このインタフェイスには、例えばＳＡＴＡ（Serial Advanced Technology Attachment）やＳＡＳ（Serial Attached Small Computer System Interface）、ＦＣ（Fibre Channel）などのストレージインタフェイスが採用されてもよいし、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）などのインタフェイスが採用されてもよい。【００４３】
バッテリ２０５は、非常時、ＦＭＰＫＧ１１３の各部へ給電を行う。【００４４】
デバイスコントローラ２０１の内部アーキテクチャは、必ずしも図の通りである必要は無く、それぞれの機能を１つないしは複数のデバイスによって代用してもよい。【００４５】
アシスト回路２０８は、データに対する処理をＣＰＵ２０６に代わって実施する回路である。この処理は、例えばデータ圧縮、暗号化、ハッシュ計算、符号計算などが考えられる。本実施例では直接は用いないが、これらの機能は本実施例と排他的なものではなく、組み合わせても問題無い。また、アシスト回路２０８は、必ずしも必要ではなく、汎用プロセッサであるＣＰＵ２０６が上述の機能を実現してもよい。【００４６】
図３は、メインメモリ２０７に格納される情報の一例を示す。【００４７】
メインメモリ２０７は、例えば、オペレーティングシステム３０１、フラッシュストレージ制御プログラム３０４、データ転送制御プログラム３０３、入出力制御プログラム３０２、論物変換プログラム３０５、及び論物変換情報３０６を記憶する。【００４８】
オペレーティングシステム３０１は、ＣＰＵ２０６が各プログラムを実行する際のスケジューリングや資源管理等の基本処理を行うプログラムである。【００４９】
入出力制御プログラム３０２は、ストレージＩ／Ｆ２０２、フラッシュメモリＩ／Ｆ２０９の制御に用いるプログラムである。【００５０】
データ転送制御プログラム３０３は、ＦＭコントローラ２０３の制御に用いるプログラムである。【００５１】
フラッシュストレージ制御プログラム３０４は、デバイスコントローラ２０１が上位装置１０２へ提供する論理記憶領域であるボリュームの管理や、バッファ２０４の管理など、デバイスコントローラ２０１がストレージデバイスとして動作するための制御に用いるプログラムである。【００５２】
論物変換プログラム３０５は、上位装置１０２から発行されたＩ／Ｏ要求に示されている論理アドレスを、ＦＭチップ２１０上の物理位置を示す物理アドレスに変換するプログラムである。なお、本実施例で言う「論理アドレス」は、ボリューム内の論理記憶領域を示すアドレスであり、例えば、ＬＢＡ（Logical Block Address）である。【００５３】
論物変換情報３０６は、論物変換プログラム３０５が動作する際に使用する論物変換のための情報である。その内約は後述する。【００５４】
図４は、ＦＭチップ２１０の構成を示す。【００５５】
フラッシュメモリインタフェイス２０９には、フラッシュメモリバス４０１が接続される。フラッシュメモリバス４０１には、１つ以上のＦＭチップ２１０が接続される。ＦＭチップ２１０は、複数のダイ４０２ａ〜４０２ｂと、デバイスコントローラ２０１からダイ４０２へ発行されたフラッシュメモリＩ／Ｏコマンドの対象データを一時的に格納するページバッファ４０３ａ〜４０３ｂとを含む。ダイ４０２は、データの実際の記憶領域である、１つ以上の物理ブロック４０４ａ〜４０４ｃを含む。【００５６】
物理ブロック４０４は、フラッシュメモリにおける消去単位である。物理ブロック４０４は、１つ以上の物理ページ４０５ａ〜４０５ｃを含む。以後、物理ブロックを単にブロックと呼ぶことがあり、物理ページを単にページと呼ぶことがある。物理ページ４０５は、フラッシュメモリにおける書き込み及び読み込みの単位である。【００５７】
ここでの書き込みは、消去済みの物理ページ４０５に対するデータの書き込みであり、読み込みは、物理ページ４０５に書き込まれたデータを読み取ることである。書き込みが行われた物理ページ４０５に再度書き込みを行うことはできず、その物理ページ４０５に書き込みを行うためには、一度、物理ブロック４０４ごと消去を実施する必要がある。消去処理により、その物理ブロック４０４に含まれる全ての物理ページ４０５に格納されたデータは消去され、それらの物理ページ４０５に再び書き込むことが可能となる。１つの物理ページ４０５のみを消去することは出来ない。ＦＭチップ２１０は、デバイスコントローラ２０１を接続するフラッシュメモリＩ／Ｆ２０９から、書き込み・読み込み・消去などのコマンドを受領する。【００５８】
物理ページ４０５に格納されるデータの構成について説明する。Code Word（ＣＷ）４０６は、データ４０７と、それを保護するＥＣＣ（Error Correction Code）４１０との１セットであり、デバイスコントローラ２０１とＦＭチップ２１０の間のデータ送受におけるエラー訂正単位である。物理ページ４０５には、１つ以上のＣＷ４０６が書き込まれることができる。物理ページ４０５は一般的に、２の冪乗のＢｙｔｅ数のサイズのデータ領域と、余剰領域とを含む。この余剰領域は、ＥＣＣ４１０やメタ情報を格納する。ＥＣＣ４１０によって保護されるデータ領域は、データ４０７として、ユーザデータ４０８とメタデータ４０９を格納する。従って、最終的に物理ページ４０５内に格納されるユーザデータ４０８のサイズは、物理ページサイズからＥＣＣサイズとメタデータサイズを除いたものになる。なお、メタデータサイズは、ＣＷ４０６毎に均一でなくても良い。ＥＣＣサイズは、ＦＭチップ２１０に要求される信頼性に応じてサイズが決まるため、データ領域サイズは必ずしも２の冪乗分確保できるわけではない。【００５９】
なお、ＦＭチップ２１０の内部構成、ページサイズ、ブロックサイズなどは、図に示した構成に限定されるものではない。例えば物理ページ４０５のサイズは、２ＫＢ＋α、４ＫＢ＋α、８ＫＢ＋α程度のサイズであり、物理ブロック４０４に含まれる物理ページ４０５の数は１２８、２５６などである。【００６０】
図５は、ページベースの論物変換処理の概要を示す。【００６１】
ＣＰＵ２０６は、上位装置１０２に公開されるアドレス空間（ＬＢＡ５０１）を内部の管理単位である論理ページ（ＬＰ）５０２へ変換する。この変換は、一意な計算式を用いても良いし、何らかの間接的な参照を用いても良い。ＣＰＵ２０６は、続いて論理ページ５０２から、ブロック５０３及び物理ページ５０４等を示す物理位置を取得する。本実施例において、論理ページ５０２のサイズと物理ページ５０４のサイズは固定的で等しい。従って、１つの論理ページ５０２は、任意の１つの物理ページ５０４に対して論物変換テーブル６０１を介して一意に対応づけられる。ＣＰＵ２０６は、ある論理ページ５０２への書き込みを行う場合、新規に未使用の物理ページ５０４を取得し、当該論理ページ５０２の更新されたデータを、取得された物理ページ５０４へ書き込み、論物変換テーブル６０１における対応付けを更新する。当該論理ページからの参照を外された旧物理ページは、無効なページとして登録され、リクラメーションによって回収・消去され、空きページとして再利用される。なお、仮に、論理ページサイズが物理ページサイズより大きい場合は、論理ページが複数の物理ページに対応づけられ、逆に小さい場合は、複数の論理ページが１つの物理ページに対応づけられるようになるだけで、概念的に大きな違いはなく、本発明はその形態に限定されるものではない。【００６２】
図６は、論物変換テーブルを示す。【００６３】
論物変換情報３０６は、論物変換テーブル６０１を含む。論物変換テーブル６０１は、論理ページ番号６０２毎に対応する物理アドレス６０３を保持している。ＣＰＵ２０６は、論理ページの格納先を変更した場合、このテーブルも更新する。物理アドレス６０３は、その値からＦＭチップ、ダイ、ブロック、ページ位置を導出できるものとなっている。例えば、物理アドレス６０３は、それらの位置情報を夫々示す複数のビットを含んでも良いし、それらの位置情報を複数のエントリにより夫々示しても良い。【００６４】
ここまでは、前提となる一般的なフラッシュメモリ制御方式について説明してきた。以降、本実施例のライト頻度管理方式について説明する。【００６５】
図７は、論理ページ毎のライト頻度管理方式を示す。【００６６】
ページライト頻度情報７０１は、メインメモリ２０７上ではなく、ＦＭチップ２１０上に格納される。ページライト頻度情報７０１は、各論理ページ番号７０２に対する、連続コピー回数７０３を示す。連続コピー回数は、リクラメーションによって当該論理ページのデータがコピーされる契機で更新され、上位からの更新ライトが実施されるとリセットされる値である。言い換えれば、連続コピー回数は、当該論理ページのデータが更新されないまま、コピーされた回数である。即ち、当該論理ページの連続コピー回数が多いほど、当該論理ページのライト頻度が低いことを示す。【００６７】
あるブロックのうち、無効データを格納する物理ページである無効ページは、更新ライトによる更新前のデータを格納している。リクラメーションは、有効データを格納する物理ページである有効ページだけを対象ページとして選択し、対象ページに格納されたデータを別のブロックへコピーする。したがって、連続してリクラメーションによりコピーされたデータに対応する論理ページは、その間更新されていないことを示す。即ち、論理ページの連続コピー回数が多いほど、その論理ページのライト頻度が低いことを示す。【００６８】
各論理ページはメインメモリ２０７上の論物変換テーブル６０１により物理ブロック５０３及び物理ページ５０４等の物理位置と関連づけられ、連続コピー回数はその物理ページ５０４に格納される。本実施例において、論理ページ５０２の連続コピー回数は、その論理ページ５０２に関連付けられた物理ページ５０４の先頭のメタデータ７０３として格納されることにより、その論理ページ５０２のユーザデータ７０４と共に格納される。このように、ＣＰＵ２０６は、各論理ページの連続コピー回数をこのようにしてデータの読み書きの単位である物理ページ５０４へ格納することにより、１回の読み出し処理で、ユーザデータとそのユーザデータに関連づけられた連続コピー回数とを取得することができる。このため、ＣＰＵ２０６は、連続コピー回数へのアクセスのために他の物理ページ５０４へのアクセスを行わなくて済むため、性能の低下を防ぐことができる。また、もし、ＣＰＵ２０６がユーザデータと連続コピー回数を別々の領域に格納すると、個別の論物変換テーブルが必要となり、メインメモリ２０７に格納される管理情報量が増えてしまう。【００６９】
なお、ＣＰＵ２０６は、連続コピー回数を、ユーザデータに関連づけられた他の情報とまとめて配置する、又は、連続コピー回数を、コピー時に参照される他の情報に含める、というような形で、ユーザデータと別々に格納しても良い。この方法の一例を説明する。ＣＰＵ２０６は、ブロックをリクラメーションする際、コピーの対象データの論理ページを得るために、ブロック内の物理ページから論理ページを特定するための逆引き情報（物論変換情報）を、ＦＭチップ２１０に格納する。ＣＰＵ２０６は、逆引き情報を、コピー時のみ参照すればよく、またブロック単位でまとめて参照できる為、ユーザデータとは別の領域に格納することができる。この場合、ＣＰＵ２０６は、ブロックに関連付けられた各論理ページの連続コピー回数を、逆引き情報とまとめてＦＭチップ２１０へ格納する。これにより、ＣＰＵ２０６は、コピー時に読み出される逆引き情報とともに、コピー時に参照される連続コピー回数の情報も読み出すことができるため効率が良く、性能の低下を防ぐことができる。さらに、このようにユーザデータとメタデータを互いに異なる領域で管理することのメリットは、障害発生時にユーザデータとメタデータの同時消失を避けることができる点と、物理ページアライメントの観点で都合が良い点とが挙げられる。【００７０】
このように、論理ページの連続コピー回数を用いることにより、論理ページのライト頻度を管理することができる。論理ページ毎の連続コピー回数をＦＭチップ２１０へ格納することにより、メインメモリ２０７等の揮発性メモリの容量を消費することなく、論理ページ毎の連続コピー回数を管理することができる。【００７１】
図８は、クラスライト頻度テーブルを示す。【００７２】
各論理ページは、ライト頻度を元にいくつかのライト頻度クラスの何れか一つに分類される。ここでは、各論理ページが、ＨＯＴ＋１、ＨＯＴ、ＣＯＬＤ、ＣＯＬＤ−１の４つのライト頻度クラスの何れか一つに分類されるとする。ＨＯＴ＋１が最もライト頻度が高い論理ページの集合であり、ＣＯＬＤ−１が最もライト頻度が低い論理ページの集合である。４つのライト頻度クラスは順に、４、３、２、１のような数値で表されてもよい。論物変換情報３０６は更に、クラスライト頻度テーブル８０２を含む。クラスライト頻度テーブル８０２は、ライト頻度クラス８０１毎に、更新ライト回数８０３と、コピー回数８０４とを格納する。ここでのライトは、上位装置１０２からの更新ライトと、ＦＭＰＫＧ１１２内部のコピーとである。ここでのライト頻度クラス数は４つであるが、これより多くても少なくてもよい。更新ライト回数８０３とコピー回数８０４のカウンタは累積値でも良いが、Ｉ／Ｏパタンの変動に追随するために定期的にリセットされることが望ましい。その場合、例えば、ＣＰＵ２０６は、更新ライト回数８０３とコピー回数８０４の夫々について、現在の設定値と、次の設定値に用いるカウンタとを別々に管理することで、リセットによる特性の急激な変化を吸収してもよい。ライト頻度クラスを用いることにより、論理ページとブロックを分類し、論理ページのライト頻度に応じたブロックを選択することができる。【００７３】
図９は、ブロック属性テーブルを示す。【００７４】
ブロック属性テーブル９０１は、物理ブロック番号９０２毎に、属性９０３を格納する。属性９０３は、ライト頻度クラスに対応する。例えば、ＨＯＴ属性の物理ブロックは、ＨＯＴの論理ページのデータを格納する。また、属性９０３は、固定的ではない。或る物理ブロックが消去された後に、論理ページのデータを書き込まれた場合、用途によってその物理ブロックの属性が定まる。【００７５】
なお、複数のブロックをグルーピングし、ブロックグループとして管理してもよい。この場合、ＣＰＵ２０６は、ブロックグループ単位でリクラメーション及び消去を行う。この場合、ブロック属性テーブル９０１は、ブロックグループ毎の属性を示す。消去単位がブロックかブロックグループかという点による差異は、本実施例で開示する内容に影響しない。本実施例のブロック属性テーブル９０１は、ブロック単位の情報であり、そのサイズは、ページ単位で管理する情報のサイズに比べて十分小さい。そのため、ブロック属性テーブル９０１は、ＦＭチップ２１０上ではなく、よりＣＰＵ２０６に近いバッファ２０４やメインメモリ２０７に格納される。【００７６】
ＣＰＵ２０６は、メインメモリ２０７上のブロック属性テーブル９０１と、ＦＭチップ２１０上の連続コピー回数とを用いて、書き先ブロックのライト頻度クラスを決定する。この更新ライト処理によれば、ＦＭＰＫＧ１１３は、ライト頻度に応じた書き先ブロックを選択することができる。【００７７】
ＣＰＵ２０６は、上位装置１０２からのライトコマンド（更新ライト）を受信した場合時、更新ライト処理を実行する。【００７８】
図１０は、更新ライト処理を示す。【００７９】
ＣＰＵ２０６は、更新ライト処理を開始すると（ｓ１００１）、ライトデータを受領する（ｓ１００２）。上位装置１０２から送付されたライトデータは、ストレージインタフェイス２０２によりバッファ２０４に格納される。ＣＰＵ２０６は、ライトコマンドから書込データの対象ＬＢＡが得られるので、対象ＬＢＡを元に論物変換を実施する（ｓ１００３）。ＣＰＵ２０６は、論物変換により得られた物理アドレスから、ライトの対象ＬＢＡに対応する対象論理ページのデータを格納している対象ブロックのブロック番号を計算する（ｓ１００４）。ＣＰＵ２０６は、ブロック番号を元に、ブロック属性テーブル９０１を参照し、対象ブロックの属性を取得して取得属性とする（ｓ１００５）。【００８０】
このとき、取得属性が最高のライト頻度クラス（ライト頻度が最高）である、すなわちＨＯＴ＋１であれば（ｓ１００６）、ＣＰＵ２０６は、ライトデータの書き先ブロックの属性である書き先属性に対し、現在の値、つまりＨＯＴ＋１を設定する（ｓ１０１０）。そうでなければ、ＣＰＵ２０６は、現在のライトの論理アドレスが直前のライト（前段ライト）の論理アドレスと連続であるかどうかを判定する（ｓ１００７）。これは、シーケンシャルライトであれば、同じライト頻度であることが想定されるためである。論理アドレスが連続であれば、ＣＰＵ２０６は、書き先属性に対し、前段ライトの書き先属性と同じ値を設定する（ｓ１００８）。これにより、シーケンシャルライトデータに対して、同じ属性の書き先ブロックが選択される。ｓ１００６及びｓ１００７の条件に当てはまらない場合、ＣＰＵ２０６は、書き先属性に対し、取得属性に１を加えた値を設定する（ｓ１００９）。例えば、ＣＰＵ２０６は、取得属性がＨＯＴであれば、書き先属性に対しＨＯＴ＋１を設定する。【００８１】
ｓ１００８、ｓ１００９、又はｓ１０１０の後、ＣＰＵ２０６は、テンポラリ領域上で、当該論理ページに関連づけられた仮連続コピー回数に対し、０をセットする（ｓ１０１１）。ＣＰＵ２０６は、バッファ２０４またはメインメモリ２０７にテンポラリ領域を確保する。【００８２】
ＣＰＵ２０６は、書き先属性を指定してデータライト処理をコールし（ｓ１２０１）、このフローを終了する。【００８３】
更新ライト処理は、上位装置１０２からのライトデータのライト頻度の判定に、前回の判定結果を用いる。前回の判定結果は、前回のライトデータが書き込まれた物理ページにメタデータとして保存されている。この更新ライト処理によれば、ＦＭＰＫＧ１１３は、更新前のデータが格納されたブロックの属性とアクセスパターンとに基づいて、書き先ブロックを選択することができる。【００８４】
ＣＰＵ２０６は、リクラメーションにおいて、コピー対象として選択されたデータをコピーするコピー処理を実行する。【００８５】
図１１は、コピー処理を示す。【００８６】
リクラメーションの対象ブロックとして、例えばデータコピー量が少なくてすむ、無効率の高いブロックが選択される。ここでは既に対象ブロックからコピー対象論理ページが選択されていることを前提とする。ＣＰＵ２０６は、コピー処理を開始すると（ｓ１１０１）、コピー対象論理ページ（ＬＰ）番号を取得する（ｓ１１０２）。ＣＰＵ２０６は、コピー対象論理ページ番号を元に論物変換を実施する（ｓ１１０３）。ＣＰＵ２０６は、論物変換により得られた物理アドレスのデータリードを実施し（ｓ１１０４）、続いて、リードされたデータから連続コピー回数を取得する（ｓ１１０５）。ここで、連続コピー回数は、先に示した通り、ユーザデータと同じ物理ページに格納されているので、ｓ１１０４でバッファ２０４上にロードされる。続いて、ＣＰＵ２０６は、物理アドレスから、リードされた物理ページを含む対象ブロックのブロック番号を計算する（ｓ１１０６）。ＣＰＵ２０６は、ブロック属性テーブル９０１から、対象ブロックの属性を取得して取得属性とする（ｓ１１０７）。【００８７】
ＣＰＵ２０６は、連続コピー回数が連続コピー回数閾値以下であるかを判定し（ｓ１１０８）、連続コピー回数が連続コピー回数閾値以下である場合、取得属性が最低のライト頻度クラス（ライト頻度が最低）かを判定する（ｓ１１０９）。取得属性が最低ライト頻度クラスでない場合、ＣＰＵ２０６は、コピーの書き先ブロックの属性である書き先属性に対し、対取得属性から１を減じた値を設定する。例えば、ＣＰＵ２０６は、取得属性がＣＯＬＤなら、書き先属性に対し、ＣＯＬＤ−１を設定する。ｓ１１０８及びｓ１１０９において、それ以外のケースでは、ＣＰＵ２０６は、書き先属性に対し、取得属性を設定する（ｓ１１１０）。ＣＰＵ２０６は、書き先属性が取得属性から変更されなかった場合、連続コピー回数をインクリメントし（ｓ１１１２）、変更された場合、連続コピー回数を０にクリアする（ｓ１１１３）。なお、ｓ１１１３において、ＣＰＵ２０６は、連続コピー回数をインクリメントしてもよい。【００８８】
ｓ１１１２又はｓ１１１３の後、ＣＰＵ２０６は、書き先属性を指定してデータライト処理をコールし（ｓ１２０１）、このフローを終了する。【００８９】
コピー処理は、データコピーの際に同時にＦＭチップ２１０から読み上げられるメタデータである連続コピー回数を参照して、次の書き先属性を決定する。なお、コピー対象論理ページ番号の取得（ｓ１１０２）に、逆引き情報を用いる方法が考えられる。例えば、ＣＰＵ２０６は、メインメモリ２０７上で各ブロックの無効率と、有効データ位置だけを管理しておき、有効データ位置に対応する論理ページへの参照である逆引き情報を用いて、コピー対象論理ページ番号を取得する。逆引き情報をＦＭチップ２１０上に格納する管理方式を用いれば、メインメモリ２０７を節約することができる。この方式であれば、連続コピー回数はデータではなく逆引き情報と共に格納する方法も適用可能である。いずれにせよ、連続コピー回数は、データコピーに対して低いコストでバッファ２０４に読み上げられる。【００９０】
ここで、ｓ１１０８の連続コピー回数閾値について述べる。本実施例では、連続コピー回数が多いほどライト頻度（書き先属性）が低く判定される。上位装置１０２からライトされないまま、リクラメーション時にブロック内に取り残されてコピー対象となる論理ページは、ライト頻度が低いと判定される。ただし、コピー頻度はＩ／Ｏパタンによるため、ＣＰＵ２０６は、連続コピー回数閾値を変化させる。例えばシーケンシャルライトで、同じ領域を上書きする様なパタンであれば、リクラメーションしなくても空き領域は生成される。逆にランダム性の高いライトパタンであれば、断片化が進み、より多くのコピーが必要となる。そこで、ＣＰＵ２０６は、クラスライト頻度テーブル８０２を用いて連続コピー回数閾値を決定する。或るライト頻度クラスの論理ページのコピー頻度が、そのライト頻度クラスの平均的なコピー頻度より多い場合、当該論理ページの連続コピー回数が、そのライト頻度クラスの他の論理ページに比べて、連続コピー回数が多くなり、更新ライト頻度が低いと判定できる。クラスライト頻度テーブル８０２は、それぞれのライト頻度クラスの更新ライト回数とコピー回数をカウントしているため、ＣＰＵ２０６は、或るライト頻度クラス内の平均的な更新ライト回数に対するコピー回数の比Ｃｂ／Ｗｂを、連続コピー回数閾値として計算できる。即ち、或るライト頻度クラスの論理ページの連続コピー回数がＣｂ／Ｗｂより大きければ、ＣＰＵ２０６は、その論理ページのライト頻度クラスを下げる（更新ライト頻度がより低いライト頻度クラスに変更する）。【００９１】
なお、ライト頻度クラスの連続コピー回数閾値は、そのライト頻度クラスのＷＡ（Write Amplification）でもよいし、予め設定された値でもよい。【００９２】
このような連続コピー回数閾値を用いることにより、ＦＭＰＫＧ１１３は、論理ページをライト頻度クラスで分類することができる。また、各ライト頻度クラスのＣｂ／Ｗｂを用いることにより、ＦＭＰＫＧ１１３は、Ｉ／Ｏパタンに応じて各ライト頻度クラスの連続コピー回数閾値を変更することができる。【００９３】
なお、ＣＰＵ２０６は、リフレッシュにおいても、リクラメーションと契機が異なるだけで、リクラメーションと同じようにデータをコピーする。このとき、ＣＰＵ２０６は、リクラメーションと同じ扱いで、連続コピー回数に基づいて書き先属性を判定する方法でも良いし、リフレッシュ対象であることから、十分ライト頻度が低いと判定し、書き先属性に対して最低ライト頻度クラスを設定してもよい。もしくは、リフレッシュ用の書き先属性として、リクラメーションの書き先属性として使用されるライト頻度クラスとは別のライト頻度クラスが用意されても良い。これにより、ＦＭＰＫＧ１１３は、リフレッシュに応じてライト頻度を判定することができる。【００９４】
図１２は、データライト処理を示す。【００９５】
ＣＰＵ２０６は、データライト処理を開始すると（ｓ１２０１）、書き先属性に対応する空きブロックを確保する（ｓ１２０２）。続いて、ＣＰＵ２０６は、バッファ２０４上の書込データ内に、メタデータとして連続コピー回数をセットする（ｓ１２０３）。ＣＰＵ３０６は、書込データをＦＭチップ２１０へ書き込み（ｓ１２０４）、論物変換テーブル６０１を更新する（ｓ１２０５）。最後に、ＣＰＵ２０６は、クラスライト頻度テーブル８０２において、書き先属性に対応するエントリを更新し（ｓ１２０６）、このフローを終了する。このとき、ＣＰＵ２０６は、データライト処理の契機が更新ライトであれば、当該エントリの更新ライト回数のフィールドをインクリメントし、データライト処理の契機がコピーであれば、当該エントリのコピー回数８０４のフィールドをインクリメントする。【００９６】
ここまでの処理により、ライト頻度の高いデータと、ライト頻度の低いデータは分離され、それぞれのデータは、対応するライト頻度クラスの消去単位（ブロック）に集約されることになる。これにより、リクラメーション処理において、無効率の高いブロックが生成されやすくなるため、コピー量を低減することができる。
【実施例２】
【００９７】
実施例１では、ライト頻度の分類と、分類されたデータの書き先を集約することによるリクラメーション処理の最適化手法について述べた。本実施例では、書き先である物理領域を劣化度の観点で管理し、ライト頻度と劣化度の最適なマッチングによりウェアレベリングを実現する方式について説明する。【００９８】
図１３は、ブロック劣化度テーブルを示す。【００９９】
論物変換情報３０６は、ブロック劣化度テーブル１３０１を含む。ブロック劣化度テーブル１３０１は、ブロック番号１３０２毎に、劣化度１３０２を含む。劣化度は、ブロックの劣化具合を定量化したもので、例えば単に消去回数であってもよい。セルの劣化特性は、必ずしも消去回数のみに依存していないことが知られているため、劣化度に消去回数以外の要因を含めても良い。ここでは、ブロックの劣化限界を１００％に正規化したものとして考える。劣化限界は、記憶デバイスとして品質保証可能な劣化度の限界値である。劣化度は、ブロック単位で管理されなくても良い。但し、セルの劣化は消去回数と相関があり、同一ブロック内のセルは、消去回数が同じになることから、似たような劣化度となることが期待される。したがって、劣化度をブロック単位で管理すると効率が良い。【０１００】
図１４は、劣化度ランク定義を示す。【０１０１】
劣化度ランク定義１４０１は、ブロックの劣化度ランクの定義を示す。ここでは、劣化度は、２５％刻みで、ＹＯＵＮＧ＋１、ＹＯＵＮＧ、ＯＬＤ、ＯＬＤ−１の４つの劣化度ランクに分類される。４つの劣化度ランクの中で、ＹＯＵＮＧ＋１は最も劣化が少なく（劣化度が低く）、ＯＬＤ−１は最も劣化が進んでいる（劣化度が高い）。劣化度ランクは、数値で表されてもよい。なお、劣化度ランク数は４つである必要は無く、また、各劣化度ランクに分類される劣化度の幅は等幅でなくても良い。【０１０２】
ブロック劣化度テーブル１３０１及び劣化度ランク定義１４０１によれば、各ブロックの劣化度と属性を関連付けることができ、論理ページのライト頻度クラスに応じて適切な劣化度の書き先ブロックを選択することができる。また、ランクブロック数テーブル１４０４が、より低い劣化度の劣化度ランクを、より高いライト頻度のライト頻度クラスに関連付けることにより、ＦＭＰＫＧ１１３は、ウェアレベリングを実行することができる。【０１０３】
図１５は、ランクブロック数テーブルを示す。【０１０４】
論物変換情報３０６は、劣化度ランク管理テーブル１４０４を含む。劣化度ランク管理テーブル１４０４は、劣化度ランク１４０２毎に、その劣化度ランクに分類されたブロック数１４０５を含む。劣化度は、例えば、ブロックの消去時に累積消去回数をカウントし、累積消去回数等を元に算出されてもよいし、他にはデータリード時のエラービット数などを元に算出されてもよい。劣化度の格納方法及び計算方法については、公知のいずれの方法を用いてもよく、本実施例では特に限定しない。また、劣化度ではなく、ＦＭチップ２１０に特有の書き換え能力の差で分類しても良い。その場合、ＦＭＰＫＧ１１３内に複数種類の記憶素子を混在させ、各種類の書き換え能力の差によって、用途を分けてもよい。例として、同じＮＡＮＤフラッシュメモリのＭＬＣ（Multi Level Cell）とＳＬＣ（Single Level Cell）の混在や、ＮＡＮＤフラッシュメモリ、ＲｅＲＡＭ、ＰＣＭなどの混在が想定される。以降の、劣化度の低いブロックとは、つまり残りの書き換え能力が多いブロックである。例えばＭＬＣ及びＳＬＣの混在の場合には、ＳＬＣが当てはまる。【０１０５】
ランクブロック数テーブル１４０４を用いることにより、ＦＭＰＫＧ１１３は、各劣化度ランクを持つブロック数を管理することができる。【０１０６】
なお、劣化度ランクの数は、ライト頻度クラスの数と異なっていてもよい。【０１０７】
図１６は、クラスデータ量テーブルを示す。【０１０８】
本実施例において、論物変換情報３０６は、クラスデータ量テーブル１５０１を含む。クラスデータ量テーブル１５０１は、ライト頻度クラス８０１毎に、論理ページ数１５０２と、割当ブロック数１５０３と、目標ブロック数１５０４と、加算劣化度１５０５とを含む。ライト頻度クラス８０１に対応する論理ページ数１５０２は、当該ライト頻度クラスに分類された論理ページの数を示す。割当ブロック数１５０３は、当該論理ページのデータを格納しているブロックの数を示す。論理ページ数１５０２及び割当ブロック数１５０３は、各ライト頻度クラスにおける論理記憶容量と物理記憶容量の比を管理する。これにより、物理領域上の有効データ量の割合である有効データ率（全物理ページに対する有効ページの割合）を算出することできる。仮に圧縮や重複排除などによって、論理ページ数と物理領域の占有量とが対応しない場合、論理ページ数ではなく、物理領域上の有効データ量をカウントしてもよい。本実施例では、論理ページ数と有効データ量が対応するため、ここでは論理ページ数を用いる。目標ブロック数１５０４は、当該ライト頻度クラスに割り当てられるブロック数の適正値として算出される。加算劣化度１５０５は、当該ライト頻度クラスに割り当てられたブロックに対して単位時間に加わった劣化度である。加算劣化度１５０５の代わりに、劣化度の累積値が用いられても良いが、Ｉ／Ｏパタンの変動に追随するために、累積値が定期的にリセットされることが望ましい。その場合、例えば、ＣＰＵ２０６は、劣化度の累積値に対し、現在の計測値と、次の計測値に用いるカウンタとを別々に管理することで、リセットによる特性の急激な変化を吸収してもよい。【０１０９】
図１７は、ブロックの状態遷移を示す。【０１１０】
論物変換情報３０６は、クローズブロック管理情報１６０１と、空きブロックプール１６０２と、オープンブロック管理情報１６０３とを含む。クローズブロック管理情報１６０１は、ＦＭチップ２１０内のブロックのうち、クローズブロックを管理する。クローズブロックは、そのブロック内の全てのページに書き込みがなされた状態のブロックである。クローズブロック管理情報１６０１は、劣化度ランク毎にクローズブロックのキュー１６０４を含む。一つの劣化度ランクのキュー１６０４は、クローズブロックを無効率（全物理ページ数に対する無効ページの割合）でソートする。なお、クローズブロックを無効率でソートすることにより、リクラメーションの効率が向上する。リクラメーションにおいて最適なブロックを異なる基準で選定する場合、クローズブロック管理情報１６０１は、無効率以外の観点で構造化されたデータ構造で管理されていても良い。本実施例のクローズブロック管理情報１６０１のデータ構造が、クローズブロックを劣化度ランク毎に分類することにより、ＣＰＵ２０６は、所望の劣化度ランクのブロックをリクラメーション対象に選ぶことができる。リクラメーション対象に選ばれたブロックは、無効化後に消去され、そのブロックに対し、劣化度ランクに応じた属性が設定される。続いて、そのブロックは、空きブロックプール１６０２に追加される。そのブロックは、必要に応じて書き先ブロックとしてオープンされ、オープンブロック管理情報１６０３により管理される。【０１１１】
ＣＰＵ２０６は、ブロックの劣化度の広がりを示す劣化度分布に基づいて、ライト頻度クラスと劣化度ランクを関連付けるマッチング処理を行う。【０１１２】
図１８は、マッチング処理を示す。【０１１３】
本実施例のマッチング処理は、ウェアレベリングのために、劣化度分布の広がりを防ぐ。劣化度分布は、劣化度又は劣化度ランクに対して、その劣化度を持つブロック数を表す。ＣＰＵ２０６は、マッチング処理を開始すると（ｓ１７０１）、クラスデータ量テーブル１５０１から、各ライト頻度クラスの加算劣化量１５０５を取得し（ｓ１７０２）、割当ブロック数１５０３を取得する（ｓ１７０３）。続いて、ＣＰＵ２０６は、各ライト頻度クラスの劣化速度を計算する（ｓ１７０４）。例えば、あるライト頻度クラスについて、加算劣化量がＤ、割当ブロック数がＮだとすると、一つのブロックあたりの平均の劣化速度ＳはＤ／Ｎとして表される。劣化度が消去回数に基づいていれば、ライト量に対応するので、割当ブロック数１５０３の代わりに論理ページ数１５０２の情報を用いて劣化速度が算出されても良い。このとき、例えばＨＯＴの論理ページに劣化度の低いブロックが割り当てられ、且つＨＯＴの劣化速度がＣＯＬＤの劣化速度より低い場合、劣化度分布の広がりは改善しない。仮にそうなっていた場合、ＣＯＬＤの論理ページ群に割り当てるブロック数を増やすことで是正する必要がある。【０１１４】
ＣＰＵ２０６は、劣化速度に基づいて目標ブロック数１５０４を調整する（ｓ１７０５）。ここで、或るライト頻度クラスに対して、算出された劣化速度Ｓと、割り当てられるブロックの平均劣化度Ａｄ％を用いると、劣化度が１００％になる予想寿命は（１−Ａｄ）／Ｓとして表される。ＨＯＴ（ＨＯＴとＨＯＴ＋）にＹＯＵＮＧ（ＹｏｕｎｇとＹｏｕｎｇ＋）を割り当て、ＣＯＬＤ（ＣＯＬＤとＣＯＬＤ−）にＯＬＤ（ＯｌｄとＯｌｄ−）を割り当てる場合、ＹＯＵＮＧの予想寿命とＯＬＤの予想寿命が一致すれば、現時点でのＹＯＵＮＧとＯＬＤは同時に寿命を迎えることになる。ＣＰＵ２０６は、このような条件の下で目標ブロック数を計算する。【０１１５】
さらにＣＰＵ２０６は、ＨＯＴに分類されたＨＯＴとＨＯＴ＋の境界についても同様に計算する。このとき、ＣＰＵ２０６は、一つのライト頻度クラスの目標ブロック数１５０４を、例えばＹＯＵＮＧからＮ個、ＹＯＵＮＧ＋からＭ個という形で、劣化度ランク毎の目標ブロック数として決定しても良い。その場合、ＣＰＵ２０６は、クラスデータ量テーブル１５０１における、ライト頻度クラス毎の割当ブロック数１５０３を、更に劣化度ランク毎に分けてカウントする。【０１１６】
続いてＣＰＵ２０６は、クラスデータ量テーブル１５０１から各ライト頻度クラスの論理ページ数１５０２を取得し、その論理ページ数を元に割当ブロック数１５０３を調整する（ｓ１７０６）。本実施例では、論理ページ数が、物理領域上の有効データ量を示すため、例えばｓ１７０５の結果によって、あるライト頻度クラスに割り当てられる物理ページ数が、論理ページ数を下回るようなことがないことを保証する必要がある。想定されうるケースとして、ＣＯＬＤのライト頻度が極めて低い場合、ｓ１７０５により、ＣＯＬＤの割当ブロック数もごく僅かになってしまう。この場合、ＣＯＬＤの目標ブロック数を増やしても、全てのブロックの劣化度が収束するような、劣化速度の条件は満たされるため、ＣＰＵ２０６は、ここで目標ブロックの再調整を行う。また、コピーデータ量は、論理データ量と物理データ量の比に影響するため、例えばライト頻度クラスが高いほど、目標ブロック数を多く設定することにより、ＦＭＰＫＧ１１３全体のコピーデータ量を削減することができ、ＷＡを削減することができる。【０１１７】
ここまで、各ライト頻度クラスの目標ブロック数が定まるため、最後に、ＣＰＵ２０６は、クラスデータ量テーブル１５０１に対し、目標ブロック数１５０３をセットし（ｓ１７０７）、このフローを終了する。【０１１８】
なお、ＣＰＵ２０６は、ｓ１７０５及びｓ１７０６の代わりに、ライト頻度クラスのＷＡに基づいて目標ブロックを設定してもよい。例えば、ＣＰＵ２０６は、ｓ１７０６と同様、よりライト頻度が高いライト頻度クラスに、より多くの目標ブロック数を設定する。更にＣＰＵ２０６は、ブロック劣化度テーブル１３０１に基づいてブロックの劣化度分布を算出し、劣化度分布の広がりが予め設定された条件より大きくなった場合、ライト頻度が高いライト頻度クラスの目標ブロック数を減らす。これにより、ＦＭＰＫＧ１１３は、ＷＡを最小化することができる。【０１１９】
リクラメーションにおいて、ＣＰＵ２０６は、対象ブロックを選択するリクラメーション対象選択処理を実行する。【０１２０】
図１９は、リクラメーション対象選択処理を示す。【０１２１】
ＣＰＵ２０６は、リクラメーション対象選択処理を開始すると（ｓ１８０１）、複数のライト頻度クラスの中から、空きブロックが不足しているライト頻度クラスを対象ライト頻度クラスとして検知する（ｓ１８０２）。前述のように、空きブロックは、オープンされる時に割当先となるライト頻度クラス毎に、空きブロックプール１６０２にプールされている。このとき、ＣＰＵ２０６は、或るライト頻度クラスの空きブロックプール１６０２の空きブロック数が空きブロック数閾値を下回る場合に、そのライト頻度クラスの空きブロックの不足と判定する。空きブロック数閾値は、空きブロックが枯渇しない程度のマージンを元に設計される。続いて、ＣＰＵ２０６は、クラスデータ量テーブル１５０１から、各ライト頻度クラスの現状の割当ブロック数１５０３と、目標ブロック数１５０４とを取得する（ｓ１８０３）。続いて、ＣＰＵ２０６は、各ライト頻度クラスの目標ブロック数に基づいて、対象ライト頻度クラスへ割り当てる対象劣化度ランク範囲を決定する（ｓ１８０４）。この処理は、ブロック劣化度テーブル１３０１に基づいてブロックの劣化度分布を算出し、劣化度分布において劣化度が低いブロックから順に、各ライト頻度クラスに割り当てることにより、各ライト頻度クラスの目標ブロック数を決定する処理に等しい。これにより、各ライト頻度クラスに割り当てられるブロック数が決定される。ただし、劣化度ランクは、非連続なグループ分けであるので、結果的に、ＨＯＴ＋に対して、Ｙｏｕｎｇ＋からＮ個、ＹｏｕｎｇからＭ個、という形で、目標ブロック数が決まる。ＣＰＵ２０６は、このように厳密に移動させる目標ブロック数を決定しても良いが、本実施例においては、対象ライト頻度クラスに対して対象劣化度ランク範囲を選択する。例えば、ＣＰＵ２０６は、対象ライト頻度クラスであるＨＯＴ＋に対し、対象劣化度ランク範囲としてＹｏｕｎｇ＋とＹｏｕｎｇを選択する。このとき、マッチング処理において、目標ブロック数が劣化度ランク毎に定義されていれば、ｓ１８０４は省略される。【０１２２】
最後に、ＣＰＵ２０６は、目標ブロック数に対する割当ブロック数の過不足数に応じて、対象劣化度ランク範囲内の劣化度ランクのキュー１６０４からリクラメーションの対象ブロックを選択し（ｓ１８０５）、このフローを終了する。なお、ＣＰＵ２０６は、性能への影響を回避するために、リクラメーション対象選択処理において毎回ｓ１８０４をコールするのではなく、定期的にリクラメーション対象範囲を見直しても良い。【０１２３】
このリクラメーション対象選択処理の後、ＣＰＵ２０６は、リクラメーションにより対象ブロックを消去し、対象ライト頻度クラスに対応する空きブロックプールへ対象ブロックを追加し、空きブロックプール内のブロックをオープンする。このリクラメーション対象選択処理によれば、ＦＭＰＫＧ１１３は、ブロックの劣化度を平準化することができる。【０１２４】
このリクラメーション対象選択処理は、まず対象ライト頻度クラスに対し、各ライト頻度クラスの目標ブロック数に基づいて対象劣化度ランク範囲を選択する。しかし、例えばその範囲内に非常に無効率の低い（大量のコピーが必要な）ブロックしか存在しない場合、特に、対象ライト頻度クラスのライト頻度が非常に高い場合、このリクラメーション対象選択処理は、ＦＭＰＫＧ１１３の性能に大きな影響を与える。そこで、例えば、ＣＰＵ２０６は、目標ブロック数で規定される対象劣化度ランク範囲を優先範囲とし、非優先範囲を選択する場合の性能が、優先範囲を選択する場合の性能に比べて、一定以上高くなる場合、非優先範囲内のブロックをリクラメーション対象として選んでも良い。この場合、劣化度の平準化より、ライト性能の向上及び安定性を優先することができる。非優先範囲のブロックを選択するための評価の閾値は、例えばライト頻度クラスの間のライト頻度の比などで設定される。すなわち、ライト頻度が相対的に高いライト頻度クラスが対象ライト頻度クラスである場合、ＣＰＵ２０６は、コピー量をなるべく少なくするように、リクラメーション対象ブロックを選択する。【０１２５】
なお、メインメモリ２０７は、複数の劣化度ランクの夫々と、複数のライト頻度クラスの一つを関連付けるマッチング情報を記憶し、ＣＰＵ２０６は、マッチング情報に基づいて、或る劣化度ランクのブロックを、対応するライト頻度クラスに割り当ててもよい。この場合、ＣＰＵ２０６は、より低い劣化度のブロックを、より高いライト頻度のライト頻度クラスへ割り当てる。例えば、ＣＰＵ２０６は、ＹＯＵＮＧ＋１、ＹＯＵＮＧ、ＯＬＤ、ＯＬＤ−１の劣化度ランクを持つブロックを、ＨＯＴ＋１、ＨＯＴ、ＣＯＬＤ、ＣＯＬＤ−１のライト頻度クラスへ夫々割り当ててもよい。【０１２６】
本実施例は、近年広く普及が進んでいるＮＡＮＤフラッシュメモリを初めとする不揮発性半導体ストレージデバイスの高信頼化、または低コスト化のための技術を含んでいる。不揮発性半導体ストレージデバイスは微細化によるビットコスト低下に伴い信頼性の課題が顕著になりつつあり、その課題に対して本実施例の寄与は大きい。【０１２７】
続いてウェアレベリングについて考える。ウェアレベリングを実現する場合、書込データのライト頻度と、書き先の劣化度、という２つの情報を参照する必要がある。前述の通り、最小粒度でウェアレベリングを実現しようとする場合、論理ページ単位でのライト頻度情報の管理が必要となる。ライト頻度情報と劣化度情報は、データの書き先ブロックの決定において参照されるため、性能向上のためには、論物変換情報と同じく、揮発性メモリ上に置くことが望ましい。しかし、揮発性メモリに格納される論物変換情報の情報量は多い。ライト頻度情報は、論理ページ単位で管理される場合、論物変換情報並の情報量となってしまう。また、物理ブロック単位でライト頻度情報を管理すると、ライト頻度情報の管理の粒度が大きいため管理情報量は問題にならないが、細粒度なライト頻度と劣化度のマッチングを行うことはできない。【０１２８】
本実施例によれば、書き込み単位を有する記憶デバイスにおいて、主記憶領域の消費を最小化しつつ細粒度のライト頻度判定を行い、劣化度とライト頻度の最適なマッチングを実現し、フラッシュメモリデバイスの寿命を改善する。さらに、判別されたライト頻度クラスに対して、適切な物理リソースを割り当てることにより、内部コピー量の最小化を実現する。【０１２９】
本発明の表現のための用語について説明する。不揮発性メモリデバイスは、ＦＭＰＫＧ１１３を含んでもよい。不揮発性メモリは、ＦＭチップ２１０を含んでもよい。揮発性メモリは、メインメモリ２０７を含んでもよいし、バッファ２０４を含んでもよい。物理記憶領域グループは、ブロックを含んでもよいし、ブロックグループを含んでもよい。物理記憶領域は、物理ページを含んでもよい。論理記憶領域は、論理ページを含んでもよい。分類は、属性を含んでもよい。分類情報は、ブロック属性テーブル９０１を含んでもよい。変換情報は、論物変換テーブル６０１を含んでもよい。ライト頻度情報は、連続コピー回数を含んでもよい。閾値は、連続コピー回数閾値を含んでもよい。劣化度情報は、ブロック劣化度テーブル１３０１を含んでもよいし、劣化度ランク定義１４０１を含んでもよい。割当情報は、クラスデータ量テーブル１５０１を含んでもよい。【０１３０】
本発明は、以上の実施例に限定されるものでなく、その趣旨から逸脱しない範囲で、他の様々な形に変更することができる。
【符号の説明】
【０１３１】
１０１…ストレージシステム、  １０２…ストレージコントローラ、  １０２…上位装置、  １０２…ストレージコントローラ、  １０３…ホスト計算機、  １０４…管理端末、  １１０…通信コントローラ、  １１３…フラッシュメモリストレージ装置（ＦＭＰＫＧ）、  ２０１…デバイスコントローラ、  ２０２…ストレージインタフェイス、  ２０３…フラッシュメモリコントローラ、  ２０４…バッファ、  ２０７…メインメモリ、  ２０９…フラッシュメモリインタフェイス、  ２１０…フラッシュメモリチップ
【図１】
2016135955.tif 000003
【図２】
2016135955.tif 000004
【図３】
2016135955.tif 000005
【図４】
2016135955.tif 000006
【図５】
2016135955.tif 000007
【図６】
2016135955.tif 000008
【図７】
2016135955.tif 000009
【図８】
2016135955.tif 000010
【図９】
2016135955.tif 000011
【図１０】
2016135955.tif 000012
【図１１】
2016135955.tif 000013
【図１２】
2016135955.tif 000014
【図１３】
2016135955.tif 000015
【図１４】
2016135955.tif 000016
【図１５】
2016135955.tif 000017
【図１６】
2016135955.tif 000018
【図１７】
2016135955.tif 000019
【図１８】
2016135955.tif 000020
【図１９】
2016135955.tif 000021
【国際調査報告】
2016135955.tif 000022
2016135955.tif 000023
2016135955.tif 000024
2016135955.tif 000025