JP2016115081A - 不揮発メモリストレージ制御装置、不揮発メモリストレージの書き込み制御方法およびプログラム - Google Patents
不揮発メモリストレージ制御装置、不揮発メモリストレージの書き込み制御方法およびプログラム Download PDFInfo
- Publication number
- JP2016115081A JP2016115081A JP2014252372A JP2014252372A JP2016115081A JP 2016115081 A JP2016115081 A JP 2016115081A JP 2014252372 A JP2014252372 A JP 2014252372A JP 2014252372 A JP2014252372 A JP 2014252372A JP 2016115081 A JP2016115081 A JP 2016115081A
- Authority
- JP
- Japan
- Prior art keywords
- data
- block
- memory storage
- area
- type data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Landscapes
- Memory System (AREA)
- Read Only Memory (AREA)
Abstract
【課題】不揮発メモリストレージの書き込み時間を短縮する不揮発メモリストレージ制御装置の実現。【解決手段】不揮発メモリストレージ30A-30Nのブロック31ごとの書き換え回数を保持する書き換え回数保持部25と、不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第1種データであるか第2種データであるかを判定し、第1種データを書き込むブロックとして書き換え回数の少ないブロックを、第2種データを書き込むブロックとして書き換え回数の多いブロックを選択するプログラムブロック選択部22と、を有する不揮発メモリストレージ制御装置。【選択図】図2
Description
本発明は、不揮発メモリストレージ制御装置、不揮発メモリストレージの書き込み制御方法およびプログラムに関する。
複数のNANDフラッシュデバイスを搭載したSolid State Drive (SSD)等の不揮発メモリストレージが使用されている。NANDフラッシュデバイスは、書き換えを繰り返すと記憶性能が劣化し、一定回数を超えると使用不可能になる。そのため、複数のNANDフラッシュデバイスの書き換え回数を均一にするウェアレベリングという手法を採用し、全体が均一に劣化するようにしていた。ウェアレベリング手法によれば、データを書き込む際、最も書き換え回数の少ないブロックを選択してデータを書き込む(ダイナミックウェアレベリング)制御が行われる。
NANDフラッシュデバイスの書き込み(プログラム:Program)時間は、書き換え回数が増えるほど短く(高速に)なるという特性がある。ウェアレベリング手法によれば、常に書き換え回数が少ないブロックが選択されるため、プログラム時間が最も長いブロックに書き込みが行われることになる。言い換えれば、書き込みは、他のブロックを選択すればより短いプログラム時間で完了するにもかかわらずプログラム時間が最も長いブロックを選択して行うことになる。
1つの視点によれば、不揮発メモリストレージに書き込むデータは、書き込んだ後あまり書き換えられずに頻繁に読み出される第1種のデータと、書き込んだ後あまり読み出されずに頻繁に書き換えられる第2種のデータと、に分類される。ここでは、第1種のデータをread intensive data(リードインテンシィブデータ)と称し、第2種のデータをwrite intensive data(ライトインテンシィブデータ)と称する。read intensiveデータは、例えば画像データ、動画データ、音楽データなどのコンテンツデータを含む。write intensiveデータは、例えば、log(ログ)データ、テンポラリィデータなどを含む。いずれのデータとすべきか明確でないデータも存在するが、ここではそのようなデータはread intensiveデータとして取り扱うものとして説明する。
Write intensiveデータは、頻繁に書き換えられるデータであり、書き込み時間が短ければ、不揮発メモリストレージの性能が実質的に向上する。しかし、ウェアレベリング手法によれば、書き込みにおいては、read intensiveデータとWrite intensiveデータの区別なく、Program時間が長いブロックが選択されるため、ウェアレベリングを行わない場合に比べ性能が悪くなっていた。
不揮発メモリストレージの性能向上が求められている。
第1の態様の不揮発メモリストレージ制御装置は、不揮発メモリストレージのブロックごとの書き換え回数を保持する書き換え回数保持部と、プログラムブロック選択部と、を有する。プログラムブロック選択部は、不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第1種データであるか第2種データであるかを判定し、第1種データを書き込むブロックとして書き換え回数の少ないブロックを、第2種データを書き込むブロックとして書き換え回数の多いブロックを選択する。
第1の態様によれば、不揮発メモリストレージの書き込み時間を短縮する不揮発メモリストレージ制御装置が実現される。
実施形態の不揮発メモリストレージを説明する前に、一般的な不揮発メモリストレージについて説明する。
不揮発メモリストレージは、ホストコンピュータ(以下、ホストと称する)に不揮発メモリストレージ制御装置(コントローラ)を介して接続され、外部記憶装置として利用されるのが一般的である。現在、不揮発メモリストレージは、NANDフラッシュデバイスで実現するのが一般的であり、以下、NANDフラッシュデバイスを使用する不揮発メモリストレージを例として説明を行うが、これに限定されるものではない。
NANDフラッシュデバイスで書き換えを行うには、書き込まれている(プログラムされている)データを消去した後、新たなデータを書き込む。通常、消去によりデータ“1”が書き込まれた状態にし、“1”を書き込む時にはその状態を維持し、“0”を書き込む時には高電圧を印加する。NANDフラッシュデバイスは、消去の際の逆電圧の印加および“0”を書き込む時の高電圧の印加により劣化し、読み出し動作では印加する電圧が低いためほとんど劣化しない。
NANDフラッシュデバイスでの書き換えは、ブロック単位で行われる。言い換えれば、ブロックの一部にプログラムされているデータを書き換える場合でも、ブロック全体を消去して、書き換えるデータとそれまでプログラムされている書き換えないデータを合わせて書き込む。
NANDフラッシュデバイスにデータを書き込むのに要すwrite time(書き込み時間)は、NANDフラッシュデバイスからデータを読み出すのに要するread time(読み出し時間)に比べて大幅に長い。これは、データを書き込む場合、上記のように消去動作と書き込み動作を行う上に、書き込み動作では書き込み電圧印加とデータが書き込まれたかを確認するベリファイ動作を繰り返し行うためである。そのため、書き込み時間を短縮することが求められている。
コントローラは、ホストの論理アドレスと不揮発メモリストレージの物理アドレスを対応付ける論理−物理アドレス変換テーブルを有し、ホストからの論理アドレスによるアクセスを不揮発メモリストレージへの物理アドレスによるアクセスに変換する。一般に、ホストからの論理アドレスはページ単位であり、不揮発メモリストレージのブロックと一致するとは限らない。そのため、ホストから書き換えが指示された論理アドレスに対応する物理アドレスを含むブロックに他の書き換えないデータが記憶されている場合には、別の消去済みのブロックに、書き換えデータと書き換えないデータを合わせて書き込む。コントローラは、ホストからの書き込みおよび書き換えデータを書き込むブロックを選択する。
NANDフラッシュデバイスは、書き換えを繰り返すと、記憶しているデータを保持する時間が短くなる、すなわち記憶性能が劣化し、不揮発性ストレージとして機能しなくなることが知られている。そのため、NANDフラッシュデバイスを使用する不揮発メモリストレージは、書き換え回数を均一にするウェアレベリング手法を採用している。一方、NANDフラッシュデバイスのプログラム時間は、書き換え回数が増えるほど短く(高速に)なるという特性がある。
図1は、NANDフラッシュデバイスにおける書き換え回数と平均program(プログラム)時間[μs]の変化例を示す図である。図1では5つのデバイスの例を示すが、NANDフラッシュデバイスはほぼ同様の特性を有する。
NANDフラッシュデバイスの上記の特性のため、ウェアレベリング手法によれば、常に書き換え回数が少ないブロックが選択され、プログラム時間が最も長いブロックに書き込みが行われることになる。言い換えれば、ウェアレベリング手法による書き込みは、他のブロックを選択すればより短いプログラム時間で完了するにもかかわらずプログラム時間が最も長いブロックを選択して行う。
これまで、不揮発メモリストレージに書き込むデータは、同種のデータとして扱われ、特に分類されることはなかった。しかし、不揮発メモリストレージに書き込むデータは、書き込んだ後あまり書き換えられずに頻繁に読み出される第1種のデータと、書き込んだ後あまり読み出されずに頻繁に書き換えられる第2種のデータと、に分類される。ここでは、第1種のデータをread intensive data(リードインテンシィブデータ)と称し、第2種のデータをwrite intensive data(ライトインテンシィブデータ)と称する。read intensiveデータは、例えば画像データ、動画データ、音楽データなどのコンテンツデータである。write intensiveデータは、例えば、log(ログ)データ、テンポラリィデータなどを含む。
Write intensiveデータは、頻繁に書き換えられるデータであり、書き込み時間が短ければ、不揮発メモリストレージの性能が実質的に向上する。しかし、ウェアレベリング手法によれば、書き込みにおいては、read intensiveデータとWrite intensiveデータの区別なく、Program(プログラム)時間が長いブロックが選択されるため、ウェアレベリングを行わない場合に比べ性能が悪くなっていた。
以下に説明する実施形態では、read intensiveデータとwrite intensiveデータに応じて書き込むブロックを選択することにより、不揮発メモリストレージの書き込み時間を短縮し、性能を実質的に向上させる。read intensiveデータとwrite intensiveデータのいずれのデータともいえないデータも存在する。実施形態では、そのようなデータはread intensiveデータとして取り扱う。
図2は、第1実施形態の情報処理装置の全体構成を示す図である。
第1実施形態の情報処理装置は、ホストコンピュータ(以下、ホストと略す)10と、不揮発メモリストレージ制御装置(NANDコントローラまたは単にコントローラと称する)20と、不揮発メモリストレージと、を有する。図示の例では、不揮発メモリストレージは、複数のNANDフラッシュデバイス30A−30Nを含む。NANDフラッシュデバイス30A−30Nは、NANDコントローラ20を介してホスト10に接続される。ホスト10は、電源をオフした場合にも記憶しておくデータを不揮発メモリストレージに記憶する。
第1実施形態の情報処理装置は、ホストコンピュータ(以下、ホストと略す)10と、不揮発メモリストレージ制御装置(NANDコントローラまたは単にコントローラと称する)20と、不揮発メモリストレージと、を有する。図示の例では、不揮発メモリストレージは、複数のNANDフラッシュデバイス30A−30Nを含む。NANDフラッシュデバイス30A−30Nは、NANDコントローラ20を介してホスト10に接続される。ホスト10は、電源をオフした場合にも記憶しておくデータを不揮発メモリストレージに記憶する。
ホスト10は、一般的なコンピュータと同様の構成を有し、プログラムにより各種アプリケーション11が動作する。ホスト10は、不揮発メモリストレージにアクセスするためにNANDコントローラ20との間で信号を入出力するドライバ12を有する。ドライバ12は、不揮発メモリストレージにデータを書き込むまたはデータを書き換える(すなわちプログラムする)時には、NANDコントローラ20に、データプログラムリクエストを出力する。データプログラムリクエストは、Program(プログラム)要求、offset(オフセットアドレス)、Size(データサイズ)およびRead/Write intensive(リード/ライト・インテンシィブ)信号を含む。ドライバ12は、不揮発メモリストレージからデータを読み出す時には、NANDコントローラ20に、データ読み出しリクエストを出力する。データ読み出しリクエストは、Read(読み取り)要求、offset(オフセットアドレス)およびSize(データサイズ)を含む。プログラム時には、NANDコントローラ20は、ドライバ12からデータプログラムリクエストおよび書き込みするデータDataを受ける。読み出し時には、NANDコントローラ20は、ドライバ12からデータ読み出しリクエストを受け、それに応じて不揮発メモリストレージから読み出した読み出しデータDataをドライバに出力する。
NANDコントローラ20は、バッファ21と、Program(プログラム)ブロック選択部22と、Read(読み出し)ブロック選択部23と、論理−物理アドレス変換テーブル24と、書き換え回数保持部25と、セレクタ26と、を有する。NANDコントローラ20は、さらにN個のNANDインターフェース(NAND I/F)27A−27Nを有する。不揮発メモリストレージに含まれるN個のNANDフラッシュデバイス30A−30Nは、それぞれN個のNANDインターフェース27A−27Nに接続される。なお、1個のNANDインターフェースに複数個のNANDフラッシュデバイスが接続される場合もあり得る。各NANDフラッシュデバイスは、消去単位である複数のblock(ブロック)31を有し、書き換えはブロック単位で行われる。N個のNANDフラッシュデバイス30A−30Nに含まれるすべてのブロックは、物理アドレス空間に割り当てられる。
バッファ21は、ホスト10と不揮発メモリストレージとの間で転送される書き込み(プログラム)データおよび読み出しデータを一時的に保持する。論理−物理アドレス変換テーブル24は、ホスト10の論理アドレスと不揮発メモリストレージの物理アドレス空間の対応関係を記憶する。書き換え回数保持部25は、不揮発メモリストレージのブロック31ごとの書き換え回数を記憶する。前述のように、ホスト10が同じ論理アドレスのデータを書き換えるプログラム要求を出した場合、そのデータが記憶されている物理アドレスのデータが書き換えられるとは限らず、異なる物理アドレス、すなわち異なるブロックに書き換えデータが記憶される。そのため、論理アドレスと物理アドレス空間の関係は、データのプログラムごとに変化する。
プログラムブロック選択部22は、ホスト10からデータプログラムリクエストを受けると、論理−物理アドレス変換テーブル24に記憶された変換テーブルおよび書き換え回数保持部25に記憶されたブロックごとの書き換え回数に基づいて、書き込むブロックを選択する。プログラムブロック選択部22は、プログラムするデータの論理アドレスと選択したブロックの物理アドレスの関係に基づいて、論理−物理アドレス変換テーブル24を書き換える。さらに、プログラムブロック選択部22は、セレクタ26に選択したブロックの物理アドレスを出力する。
読み出しブロック選択部23は、ホスト10からデータ読み出しリクエストを受けると、論理−物理アドレス変換テーブル24に記憶された変換テーブルに基づいて、データを読み出すブロックを選択し、セレクタ26に選択したブロックの物理アドレスを出力する。
セレクタ26は、プログラムブロック選択部22から出力された物理アドレスおよび読み出しブロック選択部23から出力された物理アドレスに応じて、NANDインターフェースを選択する。これにより、バッファ21およびプログラムブロック選択部22または読み出しブロック選択部23は、アクセスするブロックのNANDフラッシュデバイスに接続され、データのプログラムおよび読み出しが行える状態になる。
以上のNANDコントローラ20の構成は、ウェアレベリング手法を採用する一般的な不揮発メモリストレージ用のコントローラと同じである。第1実施形態のNANDコントローラ20は、プログラム動作時に書き込むブロックを選択する処理が異なる。
図3は、第1実施形態において、NANDコントローラ20のプログラムブロック選択部22が、プログラム動作時に書き込むブロックを選択する処理を説明する図である。
NANDフラッシュデバイス30A−30Nを含む不揮発メモリストレージは、物理アドレス空間40を有する。物理アドレス空間40は、ブロック単位で書き換え回数に応じてソートされて(並び替えられて)おり、図3では、書き換え回数の少ない方が上側で、多い方が下側である。書き換え回数が一定回数(コールド回数)以上のブロックは故障する少し前の状態であり、そのブロックをCold Data(コールドデータ)領域42に分類する。物理アドレス空間40のコールドデータ領域42以外の領域を通常領域41とする。上記のように、通常領域41は、書き換え回数に応じてソートされている。なお、第1実施形態では、コールドデータ領域42を分類し、物理アドレス空間40からコールドデータ領域42を除いた領域を通常領域とするが、これに限定されず、コールドデータ領域42を分類せず、物理アドレス空間40のすべてを通常領域としてもよい。
NANDフラッシュデバイス30A−30Nを含む不揮発メモリストレージは、物理アドレス空間40を有する。物理アドレス空間40は、ブロック単位で書き換え回数に応じてソートされて(並び替えられて)おり、図3では、書き換え回数の少ない方が上側で、多い方が下側である。書き換え回数が一定回数(コールド回数)以上のブロックは故障する少し前の状態であり、そのブロックをCold Data(コールドデータ)領域42に分類する。物理アドレス空間40のコールドデータ領域42以外の領域を通常領域41とする。上記のように、通常領域41は、書き換え回数に応じてソートされている。なお、第1実施形態では、コールドデータ領域42を分類し、物理アドレス空間40からコールドデータ領域42を除いた領域を通常領域とするが、これに限定されず、コールドデータ領域42を分類せず、物理アドレス空間40のすべてを通常領域としてもよい。
前述のように、NANDフラッシュデバイスは、書き換え回数の増加に伴いプログラム速度が速くなる(プログラム時間が短縮される)。したがって、コールドデータ領域42は、プログラム速度が最速である。しかし、NANDフラッシュデバイスは、書き換え回数の増加に伴い記憶性能が劣化し、限界回数を超えると使用不可能になる。そのため、コールドデータ領域42は、プログラムを繰り返すとすぐに限界回数を超えて使用不能に至る領域であり、通常の記憶動作には適さない領域である。第1実施形態では、コールドデータ領域42にはプログラムも読み出しの頻度も少ないコールドデータを格納し、一定期間ごと(例えば、1週間毎、1か月ごとなど)にリフレッシュし、確実にデータが保持されるようにする。
通常領域41内のブロックは、書き換えを繰り返すと、書き換え回数が上記の一定回数を超え、コールドデータ領域42に分類される。コールドデータ領域42の分類処理は随時行われる。
第1実施形態では、ホスト10がコントローラ20に出力するデータプログラムリクエストは、プログラムするデータがread intensiveデータであるかwrite intensiveデータであるかを示す情報を有する。プログラムブロック選択部22は、Write intensiveデータについては、通常領域41内の書き換え回数が多いブロックから順に選択していく。また、プログラムブロック選択部22は、Read intensiveデータについては、書き換え回数が少ないブロックから順に選択していく。Write intensiveデータとRead intensiveデータは、同一ブロックに混在しないようにする。
なお、NANDフラッシュデバイスの使用回数が少ない場合、コールドデータ領域42に分類されるブロックは存在しない。コールドデータ領域42に分類されるブロックがゼロであってもよい。また、コールドデータに分類するデータ量は、コールドデータ領域42の容量以上である必要はない。コールドデータ領域42の容量以上のコールドデータが分類された時には、Write intensiveデータより高い優先度で書き換え回数が多いブロックから順にコールドデータ用に選択していく。
書き換え回数の多いブロックは、書き換え回数の少ないブロックに比べて、相対的にプログラム速度が速い。第1実施形態では、書き換え頻度の高いWrite intensiveデータを、書き換え回数の比較的多いプログラム速度の速いブロックを選択して書き込むため、プログラム時間を短縮し、不揮発性メモリストレージの性能を向上させることができる。
NANDフラッシュデバイスは、書き換え回数の少ないブロックは、書き換え回数の多いブロックに比べて、記憶特性が良好で、読み出し時のBit(ビット)エラー率およびRead(読み出し)可能回数が多い。したがって、読み出し頻度の高いRead intensiveデータをプログラムするのに適している。これに対して、書き換え回数の多いブロックは、相対的にビットエラー率が高く、読み出し可能回数が少なく、読み出しには適していない。第1実施形態では、読み出し頻度の低いWrite intensiveデータを書き換え回数の多いブロックにプログラムするため、悪影響を低減できる。
なお、コールド領域は、ビットエラー率がより高くなり、エラー訂正ビットを付加するなどしてエラー訂正を行うことが望ましい。エラー訂正ビットを付加することにより、Read(読み出し)性能が低下するが、第1実施形態では、コールドデータ領域は、読み出し頻度も書き換え頻度も少ないコールドデータのプログラムに使用するため、悪影響を低減できる。さらに、コールドデータ領域は、読み出し可能回数がより少なく、読み出しを繰り返すとデータが破壊されやすいが、コールドデータ領域に記憶されるデータはコールドデータであり、もともと読み出しおよびプログラムの頻度が少なく、問題が発生してもペナルティが小さい。その上、書き換え回数が一定以上のブロックではデータ保持可能な時間が短くなるが、定期的にリフレッシュすることによりデータ保持することができるため、セルの寿命を延ばすことができる。
図4は、第1実施形態においてホスト10が不揮発性メモリストレージに対してプログラムを行う(データを書き込む)時に行う処理を示すフローチャートである。
ステップS22で、ホスト10がデータ書き込み処理を開始する。
ステップS22で、ホスト10がデータ書き込み処理を開始する。
ステップS12で、ホスト10が、書き込むデータがWrite Intensiveデータであるか、Read Intensiveデータであるか決定し、Read IntensiveデータであればステップS13に進み、Write IntensiveデータであればステップS14に進む。
ステップS13で、Read Intensiveデータであることを示す付加情報として“1”を付与する。
ステップS14で、Write Intensiveデータデータであることを示す付加情報として“0”を付与する。
ステップS15で、ホスト10は、コントローラ20にデータ転送リクエストを発行する。
ステップS14で、Write Intensiveデータデータであることを示す付加情報として“0”を付与する。
ステップS15で、ホスト10は、コントローラ20にデータ転送リクエストを発行する。
図5は、データ転送リクエストのデータ構造例を示す図である。
データ転送リクエストは、読み出しであるか書き込みであるかを示すread_writeフラグと、アドレスオフセットを示すoff-setと、データサイズを示すsizeと、read_write_intensiveと、を有する。read_write_intensiveは、書き込みの場合に有効で、データがWrite Intensiveデータである時に“0”で、Read Intensiveデータである時に“1”である。データ転送リクエストは、read_writeフラグが書き込みを示す場合に前述のデータプログラムリクエストとなり、read_writeフラグが読み出しを示す場合に前述のデータ読み出しリクエストとなる。また、図5では、read_writeフラグおよびread_write_intensiveは、それぞれ1byte(1バイト)で表しているが、両方を1バイトにまとめてもよい。
データ転送リクエストは、読み出しであるか書き込みであるかを示すread_writeフラグと、アドレスオフセットを示すoff-setと、データサイズを示すsizeと、read_write_intensiveと、を有する。read_write_intensiveは、書き込みの場合に有効で、データがWrite Intensiveデータである時に“0”で、Read Intensiveデータである時に“1”である。データ転送リクエストは、read_writeフラグが書き込みを示す場合に前述のデータプログラムリクエストとなり、read_writeフラグが読み出しを示す場合に前述のデータ読み出しリクエストとなる。また、図5では、read_writeフラグおよびread_write_intensiveは、それぞれ1byte(1バイト)で表しているが、両方を1バイトにまとめてもよい。
図6は、第1実施形態においてホスト10が不揮発性メモリストレージに対してプログラムを行う(データを書き込む)時の処理を示すフローチャートである。
ステップS21で、ホスト10が、書き込むデータ(Data)、論理アドレス(offset, size)、付加情報(read_write_intensive)と一緒にプログラム要求をコントローラ20に出力する。言い換えれば、プログラム要求は、書き込むデータ(Data)と、図5のread_writeフラグがプログラムを示すデータ転送リクエストと、を有する。
ステップS21で、ホスト10が、書き込むデータ(Data)、論理アドレス(offset, size)、付加情報(read_write_intensive)と一緒にプログラム要求をコントローラ20に出力する。言い換えれば、プログラム要求は、書き込むデータ(Data)と、図5のread_writeフラグがプログラムを示すデータ転送リクエストと、を有する。
ステップS22で、コントローラ20のプログラムブロック選択部22は、書き換え回数保持部25より書き換え回数情報を取り出し、データを書き込むブロック、すなわち物理アドレスを決定する。この際、プログラムブロック選択部22は、論理−物理アドレス変換テーブル24を参照して、未プログラムのブロック(消去済み)から、read intensiveデータは書き換え回数の少ないブロック、write intensiveデータは書き換え回数の多いブロックを選択する。プログラムブロック選択部22は、さらに決定した物理アドレスを論理−物理アドレス変換テーブル24に格納する。言い換えれば、プログラムブロック選択部22は、論理−物理アドレス変換テーブル24を、決定した物理アドレスで更新する。決定した物理アドレスに書き込みデータがプログラムされるので、プログラムブロック選択部22は、さらに書き換え回数保持部25の書き換え回数情報を更新する。
ステップS23で、セレクタ26は、決定した物理アドレスからプログラムするブロック31を有するNANDフラッシュデバイスを決定し、それに接続されるNANDインターフェースを選択する。これにより、バッファ21から、選択したNANDインターフェースを介して、データを書き込むブロックを含むNANDフラッシュデバイスに、書き込みデータを転送できる状態になる。
ステップS24で、NANDインターフェースは、NANDフラッシュデバイスに書き込みデータを転送する。NANDフラッシュデバイスは、転送された書き込みデータを、指定されたブロック(複数の場合もあり得る)にプログラムする。
図7は、プログラムブロック選択部22がデータを書き込む物理アドレス、すなわちブロックを決定する処理を示すフローチャートである。図7のフローチャートは、上記のステップS22における処理をより詳細に示す。
ステップS31で、プログラムブロック選択部22は、ホスト10から、論理アドレス、付加情報(read_write_intensive)を受信する。
ステップS32で、プログラムブロック選択部22は、付加情報がwrite intensiveを示すデータであるか判定し、write intensiveデータであればステップS33に進み、write intensiveデータでなければステップS34に進む。
ステップS32で、プログラムブロック選択部22は、付加情報がwrite intensiveを示すデータであるか判定し、write intensiveデータであればステップS33に進み、write intensiveデータでなければステップS34に進む。
ステップS33で、プログラムブロック選択部22は、書き換え回数保持部25より書き換え回数情報を取り出し、論理−物理アドレス変換テーブル24の未プログラムのブロックから、書き換え回数の多いブロックの物理アドレスを書き込み先に決定する。
ステップS34で、プログラムブロック選択部22は、書き換え回数保持部25より書き換え回数情報を取り出し、論理−物理アドレス変換テーブル24の未プログラムのブロックから、書き換え回数の少ないブロックの物理アドレスを書き込み先に決定する。
ステップS35で、プログラムブロック選択部22は、決定した物理アドレスを論理−物理アドレス変換テーブル24に格納し、書き換え回数保持部25の書き換え回数情報を更新する。
なお、書き換える前にデータを記憶していた物理アドレス、すなわち書き換え元の物理アドレスのブロックについては、消去動作を行うようにNANDフラッシュデバイスに支持する。これにより、そのブロックは、消去済みの未プログラムブロックとなる。
次に、第1実施形態においてホスト10が不揮発性メモリストレージからプログラムされている(書き込まれている)データを読み出す時の処理を説明する。この読み出し処理は、一般的な不揮発性メモリストレージからの読み出し処理と同じである。
図8は、第1実施形態においてホスト10が不揮発性メモリストレージからプログラムされている(書き込まれている)データを読み出す時の処理を示すフローチャートである。
ステップS41で、ホスト10が、コントローラ20に、論理アドレスと一緒にRead(リード)要求(データ読み出しリクエスト)を出す。
ステップS42で、コントローラ20のRead(リード)ブロック選択部23は、論理−物理アドレス変換テーブル24から、受信した論理アドレスに対応する物理アドレスを読み出す。
ステップS42で、コントローラ20のRead(リード)ブロック選択部23は、論理−物理アドレス変換テーブル24から、受信した論理アドレスに対応する物理アドレスを読み出す。
ステップS43で、セレクタ26は、物理アドレスからデータを読み出すブロック31を有するNANDフラッシュデバイスを決定し、それに接続されるNANDインターフェースに決定した物理アドレスを出力する。これにより、決定したNANDフラッシュデバイスからバッファ21に、NANDインターフェースを介して、読み出しみデータを転送できる状態になる。
ステップS44で、NANDインターフェースは、NANDフラッシュデバイスから、指定した物理アドレスに記憶されたデータを読み出す。
ステップS45で、セレクタ26は、Read(読み出し)データをバッファ21に格納し、バッファ21からホスト10にデータを転送する。
ステップS45で、セレクタ26は、Read(読み出し)データをバッファ21に格納し、バッファ21からホスト10にデータを転送する。
図9は、書き換え回数が前述の一定回数(コールド回数)を超えたブロックを、コールドデータ領域42に分類する処理を示すフローチャートである。
ステップS51で、プログラムブロック選択部22は、書き換え回数保持部25から、各ブロックの書き換え回数を読み出す。
ステップS51で、プログラムブロック選択部22は、書き換え回数保持部25から、各ブロックの書き換え回数を読み出す。
ステップS52で、各ブロックの書き換え回数がコールド回数を超えたか判定し、超えていればステップS53に進み、超えていなければステップS54に進む。
ステップS53で、書き換え回数がコールド回数を超えたブロックを、コールドデータブロックに設定し、ステップS54に進む。
ステップS53で、書き換え回数がコールド回数を超えたブロックを、コールドデータブロックに設定し、ステップS54に進む。
ステップS54で、すでにコールドデータ領域42に分類されたブロック以外のすべてのブロックについて分類が終了したかを判定し、終了していなければステップS51に戻り、終了するまでS51からS54を繰り返し、終了するとステップS55に進む。
ステップS55で、コールドデータ領域42への分類処理を終了する。
図9のコールドデータ領域42への分類処理は、不揮発性メモリストレージへのプログラム要求が分類起動回数行われるごとに行えばよい。
ステップS55で、コールドデータ領域42への分類処理を終了する。
図9のコールドデータ領域42への分類処理は、不揮発性メモリストレージへのプログラム要求が分類起動回数行われるごとに行えばよい。
以上説明したように、第1実施形態では、Write Intensiveデータを書き換え回数の多いブロックに格納することにより、プログラム時間を短縮でき、不揮発性メモリストレージの性能が向上する。
第1実施形態では、コールドデータ領域42以外の通常データ領域41は、書き換え回数に応じてソートされる。そのため、頻繁にソート処理を行うことになる。次に説明する第2実施形態では、Read intensiveデータを格納する領域と、Write intensiveデータを格納する領域をあらかじめ決めておき、書き換え回数が一定回数(再分類回数)を超えたとき、または一定時間経過したとき、領域の見直しを行う。
第2実施形態の情報処理装置は、図2に示した第1実施形態の情報処理装置と同じ全体構成を有し、プログラムブロック選択部22の処理が異なる。
図10は、第2実施形態におけるプログラムブロック選択部22の処理を説明する図である。
図10は、第2実施形態におけるプログラムブロック選択部22の処理を説明する図である。
第2実施形態においては、不揮発性メモリストレージ(NANDフラッシュデバイス)の物理アドレス空間40を、Read intensiveデータを格納する領域43と、Write intensiveデータを格納する領域44と、にあらかじめ分類しておく。例えば、不揮発性メモリストレージの使用開始直後であれば、図3のコールドデータ領域42は存在せず、物理アドレス空間40のすべてが通常領域41に分類される。不揮発性メモリストレージが使用され、コールドデータ領域42が生じると、物理アドレス空間40からコールドデータ領域42を除いた通常領域41を領域43および領域44に分類する。なお、コールドデータ領域42を分類せずに、物理アドレス空間40のすべてを通常領域41とする場合もあり得る。
最初に物理アドレス空間40を、Read intensive領域43と、Write intensive領域44と、に分類する方法は任意であり、使用状況に応じて領域43と領域44の比率および物理アドレスを決定する。図10では、ブロック番号の小さい側にRead intensive領域43を、ブロック番号の大きい側にWrite intensive領域44を設定する。
上記の状態で不揮発性メモリストレージの使用を開始し、Read intensiveの付加情報を有するデータは領域43に、Write intensiveの付加情報を有するデータは領域44に格納(プログラム)される。
書き換え回数が一定回数を超えた時、または一定時間経過した時、領域の見直しを行う。例えば、図示のように、領域43にも103回、205回など書き換え回数の多いブロックが存在し、領域43にも120回、50回など書き換え回数の少ないブロックが存在する。そこで、図10の左側に示すように、全ブロックを書き換え回数でソートし、書き換え回数が少ない領域をread intensive領域43とし、書き換え回数が多い領域をwrite intensive領域44とする。この際、領域43から領域44に分類が変更されるブロック数と、領域44から領域43に分類が変更されるブロック数を同じにすれば、領域43と領域44の比率は変化しない。変更するブロックにすでに書き込まれていたデータは、領域を見直す時に新たな領域に移動しても、次に書き換える時に新たな領域に移動してもよい。
以後、書き換え回数が一定回数を超えるごとに以上の処理を行う。なお、コールドデータ領域42を分類する場合には、コールドデータ領域変更を領域43と44の変更に合わせて行い、コールドデータ領域42に新たに分類されるブロック数を考慮して領域44と領域43の間のブロックの変更を行えば、比率は変化しない。さらに、領域44と領域43のブロック数の比率は、適宜変更してもよい。
図11は、第2実施形態におけるプログラムブロック選択部22の処理を示すフローチャートである。
ステップS61で、プログラムブロック選択部22は、物理アドレス空間40をread intensive領域43とwrite intensive領域44とに分類する。
ステップS62で、書き換え回数をカウントするためのパラメータmを“1”に設定する。
ステップS61で、プログラムブロック選択部22は、物理アドレス空間40をread intensive領域43とwrite intensive領域44とに分類する。
ステップS62で、書き換え回数をカウントするためのパラメータmを“1”に設定する。
ステップS63で、書き換えを含む書き込み動作を行う。読み出し動作は適宜行われるが、この処理に関係しないので無視する。書き込み動作は、書き込むデータがread intensiveデータであればread intensive領域43から選択したブロックに行い、write intensiveデータであればwrite intensive領域44から選択したブロックに行うように制御する。
ステップS64で、パラメータmを1増加させる。
ステップS65で、パラメータmが一定回数(再分類回数)を超えたか判定し、超えていなければステップS63に戻り、S63からS65の処理を繰り返し、超えていればステップS66に進む。
ステップS65で、パラメータmが一定回数(再分類回数)を超えたか判定し、超えていなければステップS63に戻り、S63からS65の処理を繰り返し、超えていればステップS66に進む。
ステップS66で、図9で説明したコールドデータ領域のブロックの分類処理を行う。
ステップS67で、書き換え回数に基づいて、read intensive領域43のブロックと、write intensive領域44のブロックの再分類処理を行う。
以後、ステップS62からS67を繰り返す。
ステップS67で、書き換え回数に基づいて、read intensive領域43のブロックと、write intensive領域44のブロックの再分類処理を行う。
以後、ステップS62からS67を繰り返す。
図12は、ステップS67で行う再分類処理を示すフローチャートである。
ステップS71で、read intensive領域43のブロックを、書き換え回数の多い順にソートする。
ステップS72で、write intensive領域44のブロックを、書き換え回数の少ない順にソートする。
ステップS71で、read intensive領域43のブロックを、書き換え回数の多い順にソートする。
ステップS72で、write intensive領域44のブロックを、書き換え回数の少ない順にソートする。
ステップS73で、read intensive領域43のブロック数とwrite intensive領域44のブロックの比率が所望の比率であるか判定し、所望の比率であればステップS75に進み、所望の比率でなければステップS74に進む。この処理は、図11のステップS66で、新たにコールドデータ領域42に分類されたブロックが生じたために、所望の比率でなくなった場合に補正するために行う。
ステップS74で、所望の比率になるように、read intensive領域43のブロックをwrite intensive領域44に分類変更するか、またはwrite intensive領域44のブロックをread intensive領域43に分類変更する。この分類変更は、どのようにブロックを選択してもよいが、read intensive領域43のブロックをwrite intensive領域44に分類変更する場合には、もっとも書き換え回数の多いブロックを選択することが望ましい。また、write intensive領域44のブロックをread intensive領域43に分類変更する場合には、もっとも書き換え回数の少ないブロックを選択することが望ましい。分類変更したブロックは、それぞれの領域のソート位置に配置する。
ステップS75で、分類変更する個数パラメータnを“1”に設定する。
ステップS76で、ソートしたread intensive領域43のn番目のブロックの書き換え回数Rnと、ソートしたwrite intensive領域44のn番目のブロックの書き換え回数Wnと、を比較する。
ステップS76で、ソートしたread intensive領域43のn番目のブロックの書き換え回数Rnと、ソートしたwrite intensive領域44のn番目のブロックの書き換え回数Wnと、を比較する。
ステップS77で、RnとWnを比較し、Wn<RnであればステップS78に進み、そうでなければステップS79に進む。
ステップS78で、read intensive領域43のn番目のブロックとwrite intensive領域44のn番目のブロックの分類を変更する。言い換えれば、read intensive領域43のn番目のブロックはwrite intensive領域44に分類変更し、write intensive領域44のn番目のブロックはread intensive領域43に分類変更する。
ステップS79で分類変更処理を終了する。
ステップS78で、read intensive領域43のn番目のブロックとwrite intensive領域44のn番目のブロックの分類を変更する。言い換えれば、read intensive領域43のn番目のブロックはwrite intensive領域44に分類変更し、write intensive領域44のn番目のブロックはread intensive領域43に分類変更する。
ステップS79で分類変更処理を終了する。
以上説明したように、第2実施形態では、read intensive領域のブロックとwrite intensive領域のブロックの分類変更は、所定の間隔をおいて行われるため、演算処理および演算時間を短縮できる。
第1および第2実施形態では、ホスト10は、書き込みデータがRead intensiveであるかWrite intensiveであるかを決定し、その情報を付加情報としてデータ転送リクエストに付加していた。しかし、コントローラ20が、データのRead/Write履歴によって判断することも可能である。次に説明する第3実施形態では、コントローラ20が、データのRead/Write履歴によってRead intensiveであるかWrite intensiveであるか(データ属性)を判定し、判定結果にしたがって書き込む領域を制御する。
図13は、第3実施形態の情報処理装置の全体構成を示す図である。
第3実施形態の情報処理装置は、コントローラ20にRead/program(読み出し/プログラム)携行判定部28を設けたことが第1および第2実施形態と異なり、他の部分は同じである。
第3実施形態の情報処理装置は、コントローラ20にRead/program(読み出し/プログラム)携行判定部28を設けたことが第1および第2実施形態と異なり、他の部分は同じである。
最初は、書き込みデータのデータ属性が不明なので、例えば、すべてWrite intensiveであるとして、それに応じた領域のブロックを選択して書き込む。例えば、第1実施形態であれば、書き換え回数が多いブロックから選択して書き込み、第1実施形態であれば領域44のブロックから選択して書き込む。
読み出し/プログラム携行判定部28は、一定範囲のオフセットアドレス(論理アドレス)毎にそこに書き込まれたデータのread(読み出し)頻度とprogram(プログラム)頻度を監視する。例えば、読み出し頻度が、プログラム頻度より大きく且つ標準頻度より大きい時、そのデータをRead intensiveデータと判定して、Read intensiveデータを書き込む領域から選択したブロックに書き込み、物理アドレスを変更する。プログラム頻度が、読み出し頻度より大きく且つ標準閾値より大きい時、そのデータをWrite intensiveデータと判定する。このデータは、上記のように、Write intensive領域のブロックに書き込まれているので、領域を変更する必要はない。さらに、読み出し頻度およびプログラム頻度の両方とも一定頻度(限界頻度)以下の場合には、そのデータをコールドデータと判定し、コールドデータ領域から選択したブロックに書き込み、物理アドレスを変更する。
上記の処理は、随時行われ、一旦属性(付加情報)が変更されたデータが、元の属性を有するように再度変更されてもよい。
以上第1から第3実施形態を説明したが、各種の変形例が可能である。例えば、説明した処理の一部を行わないようにすることや、処理を合わせて行うようにすることも可能である。例えば、第1または第2実施形態に第3実施形態の処理を組み合わせ、ホストがRead intensiveデータであるかWrite intensiveデータであるかの付加情報を付加するが、コントローラが第3実施形態の処理を行って付加情報を変更することも可能である。この場合、付加情報を変更したことをホストに通知するようにしてもよい。
以上、実施形態を説明したが、ここに記載したすべての例や条件は、発明および技術に適用する発明の概念の理解を助ける目的で記載されたものである。特に記載された例や条件は発明の範囲を制限することを意図するものではなく、明細書のそのような例の構成は発明の利点および欠点を示すものではない。発明の実施形態を詳細に記載したが、各種の変更、置き換え、変形が発明の精神および範囲を逸脱することなく行えることが理解されるべきである。
10 ホスト
20 コントローラ
21 バッファ
22 プログラムブロック選択部
23 リードブロック選択部
24 論理−物理アドレス変換テーブル
25 書き換え回数保持部
26 セレクタ
27A−27N NANDインターフェース
30A−30N NANDフラッシュデバイス
31 ブロック
20 コントローラ
21 バッファ
22 プログラムブロック選択部
23 リードブロック選択部
24 論理−物理アドレス変換テーブル
25 書き換え回数保持部
26 セレクタ
27A−27N NANDインターフェース
30A−30N NANDフラッシュデバイス
31 ブロック
Claims (8)
- 不揮発メモリストレージのブロックごとの書き換え回数を保持する書き換え回数保持部(25)と、
前記不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第1種データであるか第2種データであるかを判定し、前記第1種データを書き込むブロックとして書き換え回数の少ないブロックを、前記第2種データを書き込むブロックとして書き換え回数の多いブロックを選択するプログラムブロック選択部(22)と、を有することを特徴とする不揮発メモリストレージ制御装置。 - 外部から入力する前記書き込みデータは、前記第1種データまたは前記第2種データであるかを示す情報を有する請求項1に記載の不揮発メモリストレージ制御装置。
- 前記プログラムブロック選択部は、
前記不揮発メモリストレージのブロックを、第1領域と第2領域とに分類し、前記第1種データを前記第1領域のブロックに書き込み、前記第2種データを前記第2領域のブロックに書き込むように指示し、
前記第1領域のうち書き換え回数の多いブロックを前記第2領域に分類変更し、または前記第2領域のうち書き換え回数の少ないブロックを前記第1領域に分類変更する領域変更を行う、請求項1または2に記載の不揮発メモリストレージ制御装置。 - 前記第1種データおよび前記第2種データの読み出し頻度および書き換え頻度を監視し、書き換え頻度が大きい前記第1種データを第2種データに、読み出し頻度が大きい前記第2種データを第1種データに変更する読み出し/プログラム判定部を、さらに有する請求項1に記載の不揮発メモリストレージ制御装置。
- 前記プログラムブロック選択部は、
前記不揮発メモリストレージのブロックのうち、書き換え回数がコールド回数を超えたブロックを、コールドデータ領域に分類し、
前記第1種データおよび前記第2種データの読み出し頻度および書き換え頻度を監視し、前記読み出し頻度および前記書き換え頻度の両方が限界頻度より小さい前記第1種データおよび前記第2種データをコールドデータに分類し、
コールドデータに分類したデータを前記コールド領域のブロックに書き込むように指示する請求項1から4のいずれか1項に記載の不揮発メモリストレージ制御装置。 - 前記プログラムブロック選択部は、
前記コールド領域のブロックに書き込まれた前記コールドデータを、一定時間ごとに読み出して書き直すように指示する請求項5に記載の不揮発メモリストレージ制御装置。 - 不揮発メモリストレージのブロックごとの書き換え回数を監視し、
前記不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第1種データであるか第2種データであるかを判定し、
書き込みデータが前記第1種データである時に、前記第1種データを書き込むブロックとして書き換え回数の少ないブロックを選択し、前記第2種データを書き込むブロックとして書き換え回数の多いブロックを選択する、ことを特徴とする不揮発メモリストレージの書き込み制御方法。 - コンピュータに、
不揮発メモリストレージのブロックごとの書き換え回数を監視し、
前記不揮発メモリストレージへのデータ書き込み時に、書き込みデータが第1種データであるか第2種データであるかを判定し、
書き込みデータが前記第1種データである時に、前記第1種データを書き込むブロックとして書き換え回数の少ないブロックを選択し、前記第2種データを書き込むブロックとして書き換え回数の多いブロックを選択する、ように動作させることを特徴とするプログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014252372A JP2016115081A (ja) | 2014-12-12 | 2014-12-12 | 不揮発メモリストレージ制御装置、不揮発メモリストレージの書き込み制御方法およびプログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2014252372A JP2016115081A (ja) | 2014-12-12 | 2014-12-12 | 不揮発メモリストレージ制御装置、不揮発メモリストレージの書き込み制御方法およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2016115081A true JP2016115081A (ja) | 2016-06-23 |
Family
ID=56141966
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2014252372A Withdrawn JP2016115081A (ja) | 2014-12-12 | 2014-12-12 | 不揮発メモリストレージ制御装置、不揮発メモリストレージの書き込み制御方法およびプログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2016115081A (ja) |
-
2014
- 2014-12-12 JP JP2014252372A patent/JP2016115081A/ja not_active Withdrawn
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6298249B2 (ja) | 不揮発性メモリ装置とそれを含むメモリシステム及びそれらのメモリブロック管理、消去、及びプログラム方法 | |
US9348708B2 (en) | Memory system performing address mapping according to bad page map | |
US20170168752A1 (en) | Nonvolatile memory system with erase suspend circuit and method for erase suspend management | |
US10168913B2 (en) | Data storage device and data maintenance method thereof | |
US8417879B2 (en) | Method for suppressing errors, and associated memory device and controller thereof | |
US20100082917A1 (en) | Solid state storage system and method of controlling solid state storage system using a multi-plane method and an interleaving method | |
JP2008123330A (ja) | 不揮発性半導体記憶装置 | |
US9582224B2 (en) | Memory control circuit unit, memory storage apparatus and data accessing method | |
US10241678B2 (en) | Data storage device and data writing method capable of avoiding repeated write operation of a TLC block when interrupted | |
US8549214B2 (en) | Protection against data corruption for multi-level memory cell (MLC) flash memory | |
CN110795270B (zh) | 固态储存装置及其读取重试方法 | |
JP2008009919A (ja) | カードコントローラ | |
WO2018116937A1 (ja) | 情報処理装置およびメモリアクセス方法 | |
CN107562381A (zh) | 一种数据处理方法及装置 | |
US20090024787A1 (en) | Data writing method and apparatus | |
KR20100046757A (ko) | 메모리 장치 및 그 프로그램 방법 | |
JP2010020715A (ja) | 半導体メモリコントローラおよび半導体メモリシステム | |
JP5612508B2 (ja) | 不揮発性メモリコントローラ及び不揮発性記憶装置 | |
JP6306548B2 (ja) | メモリー管理回路、記憶装置、メモリー管理方法、及びメモリー管理プログラム | |
CN103456354B (zh) | 一种非易失性存储器差分存储格的方法和装置 | |
JP2005216455A (ja) | 不揮発性半導体メモリ | |
JP2016115081A (ja) | 不揮発メモリストレージ制御装置、不揮発メモリストレージの書き込み制御方法およびプログラム | |
JP4818453B1 (ja) | 電子機器およびデータ読み出し方法 | |
JP4235646B2 (ja) | メモリコントローラおよびフラッシュメモリシステム | |
KR20100059669A (ko) | 불휘발성 반도체 기억장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20171113 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20171225 |