JP2012141946A - 半導体記憶装置 - Google Patents
半導体記憶装置 Download PDFInfo
- Publication number
- JP2012141946A JP2012141946A JP2011143569A JP2011143569A JP2012141946A JP 2012141946 A JP2012141946 A JP 2012141946A JP 2011143569 A JP2011143569 A JP 2011143569A JP 2011143569 A JP2011143569 A JP 2011143569A JP 2012141946 A JP2012141946 A JP 2012141946A
- Authority
- JP
- Japan
- Prior art keywords
- data
- block
- semiconductor memory
- management unit
- cluster
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Memory System (AREA)
Abstract
【課題】管理情報を記憶するランダムアクセス可能なメモリの記憶容量を増大させることなく、ランダムリード及びランダムライト性能を向上させる。
【解決手段】実施形態においては、ランダムアクセス可能な第1の半導体メモリに含まれる第1の記憶部と、ページ単位で読み出し及び書き込みが行われ、ページより大きなブロック単位で消去が行われる不揮発性の第2の半導体メモリに含まれる第2の記憶部と、第2の半導体メモリの記憶領域を、ブロック単位で前記第2の記憶部に割り当てるコントローラと、第2の記憶部のデータを第1の管理単位で管理するための第1の管理テーブルであって、第2の半導体メモリに記憶される第1の管理テーブルと、第2の記憶部のデータを第1の管理単位より大きな第2の管理単位で管理するための第2の管理テーブルであって、第1の半導体メモリに記憶される第2の管理テーブルとを備える。
【選択図】図1
【解決手段】実施形態においては、ランダムアクセス可能な第1の半導体メモリに含まれる第1の記憶部と、ページ単位で読み出し及び書き込みが行われ、ページより大きなブロック単位で消去が行われる不揮発性の第2の半導体メモリに含まれる第2の記憶部と、第2の半導体メモリの記憶領域を、ブロック単位で前記第2の記憶部に割り当てるコントローラと、第2の記憶部のデータを第1の管理単位で管理するための第1の管理テーブルであって、第2の半導体メモリに記憶される第1の管理テーブルと、第2の記憶部のデータを第1の管理単位より大きな第2の管理単位で管理するための第2の管理テーブルであって、第1の半導体メモリに記憶される第2の管理テーブルとを備える。
【選択図】図1
Description
本発明の実施形態は、不揮発性半導体メモリを備えた半導体記憶装置に関する。
SSD(Solid State Drive)では、ホストが指定する論理アドレスのデータをNANDフラッシュメモリのどの位置に記録するかを管理するデータ管理機構と、ユーザデータを管理する単位の選択が読み書き性能とが、NANDフラッシュメモリの寿命を大きく左右する。
本発明の一つの実施形態は、管理情報を記憶するランダムアクセス可能なメモリの記憶容量を増大させることなく、ランダムリード及びランダムライト性能を向上させる半導体記憶装置を提供することを目的とする。
本発明の一つの実施形態によれば、ランダムアクセス可能な第1の半導体メモリに含まれる第1の記憶部と、ページ単位で読み出し及び書き込みが行われ、前記ページより大きなブロック単位で消去が行われる不揮発性の第2の半導体メモリに含まれる第2の記憶部と、前記第2の半導体メモリの記憶領域を、ブロック単位で前記第2の記憶部に割り当てるコントローラと、を備える。前記コントローラは、前記第2の記憶部のデータを第1の管理単位で管理するための第1の管理テーブルを前記第2の半導体メモリに記憶し、前記第2の記憶部のデータを前記第1の管理単位より大きな第2の管理単位で管理するための第2の管理テーブルを前記第1の半導体メモリに記憶し、前記第1の記憶部に書き込まれたセクタ単位の複数のデータを第1の管理単位のデータ及び第2の管理単位のデータの何れかとして前記第2の記憶部に追い出すデータ追い出し処理を実行し、前記第1の管理テーブル及び前記第2の管理テーブルの少なくとも一方を更新し、前記第2の記憶部のリソース使用量が閾値を超えた場合、前記第2の記憶部の有効データを集めて前記第2の記憶部の他のブロックに書き直すデータ整理処理を実行し、前記第1の管理テーブル及び前記第2の管理テーブルの少なくとも一方を更新する。
SSDの管理方式として、ユーザデータを管理する単位としてサイズの小さな管理単位を採用している場合、小さい管理単位でSSD全体を均一に管理することで、参照の局所性がない書き込み(広域ランダムライト)を連続して続行する際でも高い読み書き性能を達成可能であるが、大容量SSDを作る際には、管理単位が小さいことから管理情報を一時記録するための管理情報記憶バッファの容量が巨大になるという問題がある。
一方、SSDにおいて、ユーザデータを管理する単位として、大きな管理単位と小さな管理単位の2つを組み合わせて制御を行う方式では、管理情報記憶バッファの容量が少ない場合でも高い読み書き性能と寿命を達成することが可能である。しかし、この方式では、小さな単位で管理できるデータ量に制限があることから、広域ランダムライトを連続で実行し続ける場合、小さな管理単位から大きな管理単位への変換が必ず発生してしまうため、書き込みの速度が遅くなる可能性がある。
そこで、本実施形態においては、
・ユーザデータを管理する単位としては、大きな管理単位(第2の管理単位)と小さな管理単位(第1の管理単位)の2つを持つ
・ホストからのアクセス頻度が高いときは、小さな管理単位を使用して動作することで、広域ランダムライト性能を向上させる
・ホストからのアクセス頻度が低いときは、大きな管理単位と小さな管理単位とを使用して動作することで、リード性能と狭域ランダムライト性能を向上させる
といった制御を実行する。
また、不揮発性半導体メモリ上にSSD内全データ分の小さな管理単位の管理情報を持つ。この小さな管理単位の管理情報は、管理情報記憶バッファにキャッシュしてもよい。
また、ホストからのアクセス頻度が低いときに、断片化した小さな管理単位のデータを大きな管理単位のデータとして並べ直すことで、大きな管理単位と小さな管理単位との2つを組み合わせて制御を行う管理構造へ戻す。
・ユーザデータを管理する単位としては、大きな管理単位(第2の管理単位)と小さな管理単位(第1の管理単位)の2つを持つ
・ホストからのアクセス頻度が高いときは、小さな管理単位を使用して動作することで、広域ランダムライト性能を向上させる
・ホストからのアクセス頻度が低いときは、大きな管理単位と小さな管理単位とを使用して動作することで、リード性能と狭域ランダムライト性能を向上させる
といった制御を実行する。
また、不揮発性半導体メモリ上にSSD内全データ分の小さな管理単位の管理情報を持つ。この小さな管理単位の管理情報は、管理情報記憶バッファにキャッシュしてもよい。
また、ホストからのアクセス頻度が低いときに、断片化した小さな管理単位のデータを大きな管理単位のデータとして並べ直すことで、大きな管理単位と小さな管理単位との2つを組み合わせて制御を行う管理構造へ戻す。
以下、本発明の実施形態について図面を参照して説明する。なお、以下の説明において、同一の機能及び構成を有する要素については、同一符号を付し、重複説明は必要な場合にのみ行う。
先ず、本明細書で用いる用語について定義しておく。
・ページ:NAND型フラッシュメモリ内部において一括して書き込み及び読み出しが可能な単位のこと。
・ブロック:NAND型フラッシュメモリ内部において一括して消去が可能な単位であり、ブロックは、複数のページから構成される。
・セクタ:ホストからの最小アクセス単位のこと。セクタサイズは、例えば512B。
・クラスタ:SSD内部で「小さなデータ」を管理する管理単位。セクタサイズの自然数倍がクラスタサイズとなるように定められる。
・トラック:SSD内部で「大きなデータ」を管理する管理単位。クラスタサイズの2以上の自然数倍がトラックサイズとなるように定められる。
・フリーブロック(FB):内部に有効データを含まない、用途未割り当てのブロックのこと。
・アクティブブロック(AB):内部に有効データを含むブロックのこと。
・有効クラスタ:論理アドレスに対応するクラスタサイズの最新データ。
・無効クラスタ:同一論理アドレスの最新データが他の場所に書きこまれ、参照されることがなくなったクラスタサイズのデータ。
・有効トラック:論理アドレスに対応するトラックサイズの最新データ。
・無効トラック:同一論理アドレスの最新データが他の場所に書きこまれ、参照されることがなくなったトラックサイズのデータ。
・コンパクション:管理単位の変換を含まないデータの整理のこと。
・デフラグメンテーション(デフラグ):クラスタからトラックへの管理単位の変換を含むデータの整理のこと。
・クラスタマージ(トラックの解体):トラックからクラスタへの管理単位の変換を含むデータの整理のこと。
・ページ:NAND型フラッシュメモリ内部において一括して書き込み及び読み出しが可能な単位のこと。
・ブロック:NAND型フラッシュメモリ内部において一括して消去が可能な単位であり、ブロックは、複数のページから構成される。
・セクタ:ホストからの最小アクセス単位のこと。セクタサイズは、例えば512B。
・クラスタ:SSD内部で「小さなデータ」を管理する管理単位。セクタサイズの自然数倍がクラスタサイズとなるように定められる。
・トラック:SSD内部で「大きなデータ」を管理する管理単位。クラスタサイズの2以上の自然数倍がトラックサイズとなるように定められる。
・フリーブロック(FB):内部に有効データを含まない、用途未割り当てのブロックのこと。
・アクティブブロック(AB):内部に有効データを含むブロックのこと。
・有効クラスタ:論理アドレスに対応するクラスタサイズの最新データ。
・無効クラスタ:同一論理アドレスの最新データが他の場所に書きこまれ、参照されることがなくなったクラスタサイズのデータ。
・有効トラック:論理アドレスに対応するトラックサイズの最新データ。
・無効トラック:同一論理アドレスの最新データが他の場所に書きこまれ、参照されることがなくなったトラックサイズのデータ。
・コンパクション:管理単位の変換を含まないデータの整理のこと。
・デフラグメンテーション(デフラグ):クラスタからトラックへの管理単位の変換を含むデータの整理のこと。
・クラスタマージ(トラックの解体):トラックからクラスタへの管理単位の変換を含むデータの整理のこと。
なお、以下実施形態に示す各機能ブロックは、ハードウェア、及びソフトウェアのいずれか、又は両者の組み合わせとして実現することができる。このため、各機能ブロックは、これらのいずれでもあることが明確となるように、概してそれらの機能の観点から以下に説明される。このような機能が、ハードウェアとして実現されるか、又はソフトウェアとして実現されるかは、具体的な実施態様、或いはシステム全体に課される設計制約に依存する。当業者は、具体的な実施態様ごとに、様々な方法でこれらの機能を実現し得るが、そのような実現を決定することは本発明の範疇に含まれる。
(第1の実施形態)
図1は、第1の実施形態におけるSSD100の構成例を示す機能ブロック図である。SSD100は、ATAインタフェース(ATA I/F)などのホストインタフェース(ホストI/F)2を介してパーソナルコンピュータなどのホスト装置(以下、ホストと略す)1と接続され、ホスト1の外部メモリとして機能する。ホスト1としては、パーソナルコンピュータのCPU、スチルカメラ、ビデオカメラなどの撮像装置のCPUなどがあげられる。
図1は、第1の実施形態におけるSSD100の構成例を示す機能ブロック図である。SSD100は、ATAインタフェース(ATA I/F)などのホストインタフェース(ホストI/F)2を介してパーソナルコンピュータなどのホスト装置(以下、ホストと略す)1と接続され、ホスト1の外部メモリとして機能する。ホスト1としては、パーソナルコンピュータのCPU、スチルカメラ、ビデオカメラなどの撮像装置のCPUなどがあげられる。
また、SSD100は、不揮発性半導体メモリとしてのNAND型フラッシュメモリ(以下、NANDフラッシュと略す)10と、NANDフラッシュ10よりも高速記憶動作及びランダムアクセスが可能で消去動作が不要な揮発性半導体メモリとしてのDRAM20(Dynamic Random Access Memory)と、NANDフラッシュ10とホスト装置1間のデータ転送に関する各種制御を実行するコントローラ30とを備える。SSD100に、環境温度を検出する温度センサ90が設けられていてもよい。
揮発性半導体メモリとしては、DRAM20の他に、SRAM(Static Random Access Memory)、FeRAM(Ferroelectric Random Access Memory)、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase Change Random Access Memory)などを採用することができる。また、揮発性半導体メモリはコントローラ30に混載されていてもよい。コントローラ30に混載された揮発性半導体メモリの容量が大きい場合は、後述するデータ及び管理情報をコントローラ30内部の揮発性半導体メモリに格納し、コントローラ30外部に別途揮発性半導体メモリを設けなくてもよい。
NANDフラッシュ10は、ホスト1によって指定されたユーザデータを記憶したり、ユーザデータを管理する管理テーブルを記憶したり、DRAM20で管理される管理情報をバックアップ用に記憶したりする。NANDフラッシュ10のデータ領域を構成するデータストレージ(以下、DSという)40には、ユーザデータが記憶される。管理テーブルバックアップ領域14には、DRAM20で管理される管理情報がバックアップされる。
正引きの不揮発性クラスタ管理テーブル12(以下、正引きクラスタ管理テーブルと略す)及び逆引きの不揮発性クラスタ管理テーブル13(以下、逆引きクラスタ管理テーブルと略す)が、NANDフラッシュ10上で管理されている。管理テーブルの詳細については、後述する。但し、NANDフラッシュ10上で、便宜上、データ領域、管理領域と区別したが、これら領域において使用されるブロックが固定されているわけではない。
NANDフラッシュ10は、複数のメモリセルがマトリクス状に配列されたメモリセルアレイを有し、個々のメモリセルは上位ページ及び下位ページを使用して多値記憶が可能である。NANDフラッシュ10は、複数のメモリチップによって構成され、各メモリチップは、データ消去の単位であるブロックを複数配列して構成される。また、NAND10では、ページごとにデータの書き込み及びデータの読み出しが行われる。ブロックは、複数のページによって構成されている。なお、同一ページに対する上書きは、当該ページを含むブロック全体を一旦消去した後に行う必要がある。また、NANDフラッシュ10を構成する並列動作可能な複数のチップから1個ずつブロックを選択し、これら複数のブロックを組みにして一括消去単位としてもよい。同様に、NANDフラッシュ10を構成する並列動作可能な複数のチップから1個ずつページを選択し、これら複数のページを組みにして一括書き込み、一括読み出し単位としてもよい。
DRAM20は、ホスト1とNANDフラッシュ10間でのデータ転送用キャッシュとして機能するライトキャッシュ(以下、WCという)21を有する。また、DRAM20は、管理情報記憶用メモリ及び作業領域用メモリとして機能する。DRAM20で管理される管理情報記憶テーブルとしては、WC管理テーブル22、トラック管理テーブル23、揮発性クラスタ管理テーブル24、トラックエントリ管理テーブル25、その他の各種管理テーブルを有する。管理テーブルの詳細については、後述する。DRAM20で管理される管理テーブルは、NANDフラッシュ10に記憶されている各種管理テーブル(正引きのクラスタ管理テーブル12及び逆引きのクラスタ管理テーブル13を除いた管理テーブル)が起動時などに展開されたものであり、電源断時には、NANDフラッシュ10の管理テーブルバックアップ領域14に退避保存される。
なお、データ転送用キャッシュ領域と管理情報記憶用メモリ及び作業領域用メモリとの両方が同一のDRAM20内に形成されている必要はない。データ転送用キャッシュ領域は第1のDRAM内に形成され、管理情報記憶用メモリ及び作業領域用メモリは第1のDRAMと異なる第2のDRAM内に形成されていてもよい。また両者が互いに異なる種類の揮発性メモリ内に形成されていてもよい。例えば、データ転送用キャッシュはコントローラ外部のDRAM内に形成され、管理情報記憶用メモリ及び作業領域用メモリはコントローラ内部のSRAM内に形成されていてもよい。また更に、DRAM20は、ホスト1とNANDフラッシュ10間でのデータ転送用キャッシュとして機能するリードキャッシュ(以下、RCという)を有していてもよい。また本実施形態ではライトキャッシュ、リードキャッシュとして説明するが、キャッシュアルゴリズムを用いずに一時的に書き込みデータまたは読み出しデータを保持する単純なデータバッファを採用してもよい。
コントローラ30は、NANDフラッシュ10に記憶されたシステムプログラム(ファームウエア)を実行するプロセッサと、各種ハードウェア回路などによってその機能が実現され、ホスト1からのライト要求、キャッシュフラッシュ要求、リード要求等の各種コマンドに対するホスト1−NANDフラッシュ10間のデータ転送制御、DRAM20及びNANDフラッシュ10に記憶された各種管理テーブルの更新・管理などを実行する。コントローラ30は、コマンド解釈部31、書き込み制御部32、読み出し制御部33及びNAND整理部34を有する。各構成要素の機能は後述する。コントローラ30のハードウェア回路として、例えば、ブートローダを格納するROM(Read Only Memory)、ファームウエア展開用のRAM(Random Access Memory)、誤り検出及び訂正回路等が挙げられる。
ホスト1はSSD100に対し、リード要求またはライト要求を発行する際には、ホストI/F2を介して論理アドレスとしてのLBA(Logical Block Addressing)を入力する。LBAは、図2に示すように、セクタ(サイズ:例えば512B)に対して0からの通し番号をつけた論理アドレスである。本実施形態においては、WC21、NANDフラッシュ10の管理単位として、LBAの下位(s+1)ビット目から上位のビット列で構成されるクラスタアドレスと、LBAの下位(s+t+1)ビットから上位のビット列で構成されるトラックアドレスとを定義する。また、以下の説明では、1ブロックは4個のトラックデータから構成され、1トラックは8個のクラスタデータから構成され、1ブロックは32個のクラスタデータから構成されるとするが、これらの関係は任意である。
図3は、NANDフラッシュ10内に形成されたデータ領域の機能ブロックを示すものである。ホスト1とNANDフラッシュ10との間には、DRAM20上に構成されたライトキャッシュ(WC)21が介在している。なお、DRAM20上にリードキャッシュを形成することにしてもよい。WC21はホスト1から入力されたデータを一時保存する。
NANDフラッシュ10内のブロックは、コントローラ30によって、クラスタ用入力バッファ領域(クラスタIB)41、トラック用入力バッファ領域(トラックIB)42、データストレージ(DS)40という管理領域に割り当てられている。クラスタIB41を構成する1つのブロックには、32個のクラスタデータが格納可能であり、トラックIB42を構成する1つのブロックには、4個のトラックデータが格納可能である。クラスタIB41及びトラックIB42はそれぞれ複数個のブロックで構成されていてもよい。
WC21からNANDフラッシュ10へデータを追い出す際、「小さな単位」であるクラスタ単位で追い出す場合には、クラスタIB41にデータを追い出し、「大きな単位」であるトラック単位で追い出す場合には、トラックIB42にデータを追い出す。クラスタ単位で追い出すかトラック単位で追い出すかの管理単位の切り替え規則については後述する。クラスタデータで満杯になったクラスタIB41あるいはトラックデータで満杯になったトラックIB42は、その後DS40のブロックとして管理されることで、DS40に移動される。
・ライトキャッシュ(WC)21
WC21は、ホスト1からのライト要求に対して、ホスト1から入力されたデータを一時的に保存するための領域である。WC21上のデータは、セクタ単位で管理される。WC21のリソースが不足した場合、WC21の記憶データをNANDフラッシュ10に追い出す。この追い出しの際、所定の追い出し規則に従ってWC21上に存在するデータをクラスタIB41及びトラックIB42の何れか一方に追い出す。
WC21は、ホスト1からのライト要求に対して、ホスト1から入力されたデータを一時的に保存するための領域である。WC21上のデータは、セクタ単位で管理される。WC21のリソースが不足した場合、WC21の記憶データをNANDフラッシュ10に追い出す。この追い出しの際、所定の追い出し規則に従ってWC21上に存在するデータをクラスタIB41及びトラックIB42の何れか一方に追い出す。
追い出し規則としては、例えばLRU(Least Recently Used)等の基準に基づいて、古いデータが先に選択されるようにWC21からの追い出し対象のセクタデータを選択すればよい。管理単位の切り替え規則としては、例えば、WC21上に存在する追い出し対象のセクタデータを含むトラック中の更新データ量(有効データ量)が閾値以上の場合には、トラックデータとしてトラックIB42に追い出し、WC21上に存在する追い出し対象のセクタデータを含むトラック中の更新データ量が閾値未満の場合には、クラスタデータとしてクラスタIB41に追い出すといった規則を採用する。
WC21からクラスタデータとしてデータを追い出す際にWC21上に全てのデータが揃っていない場合は、NANDフラッシュ10内に同一クラスタに含まれる有効なセクタデータがあるか否かを判定し、有効なセクタデータが存在する場合は、DRAM20上で、WC21にあるクラスタデータにNANDフラッシュ10内のセクタデータを穴埋めし、穴埋めされたクラスタデータをクラスタIB41に追い出す。
WC21からトラックデータとしてデータを追い出す際にWC21上に全てのデータが揃っていない場合は、NANDフラッシュ10内に同一トラックに含まれる有効なクラスタデータまたは有効なセクタデータがあるか否かを判定し、有効なクラスタデータまたはセクタデータが存在する場合は、DRAM20上で、WC21にあるトラックデータにNANDフラッシュ10内のクラスタデータまたはセクタデータを穴埋めし、穴埋めされたトラックデータをトラックIB42に追い出す。
・データストレージ領域(DS)40
DS40はトラック単位及びクラスタ単位でデータの管理が行われ、ユーザデータが格納される。DS40に入力されたトラックと同一LBAのトラックについてはDS40のブロック内で無効化され、ブロック内の全トラックが無効になったブロックはフリーブロックFBとして解放される。DS40に入力されたクラスタと同一LBAのクラスタについては、DS40のブロック内で無効化され、ブロック内の全クラスタが無効になったブロックはフリーブロックFBとして解放される。DS40内のブロックは、データの書き込み順序(LRU)、換言すればクラスタIB41またはトラックIB42からDS40に移動された順序でブロックの新旧が管理されている。また、DS40は、ブロック内の有効データ数(例えば有効クラスタ数)の大小の順序でもブロックが管理されている。
DS40はトラック単位及びクラスタ単位でデータの管理が行われ、ユーザデータが格納される。DS40に入力されたトラックと同一LBAのトラックについてはDS40のブロック内で無効化され、ブロック内の全トラックが無効になったブロックはフリーブロックFBとして解放される。DS40に入力されたクラスタと同一LBAのクラスタについては、DS40のブロック内で無効化され、ブロック内の全クラスタが無効になったブロックはフリーブロックFBとして解放される。DS40内のブロックは、データの書き込み順序(LRU)、換言すればクラスタIB41またはトラックIB42からDS40に移動された順序でブロックの新旧が管理されている。また、DS40は、ブロック内の有効データ数(例えば有効クラスタ数)の大小の順序でもブロックが管理されている。
DS40では、データの整理が行われる。データ整理のための条件が満たされた場合、コンパクションまたはデフラグなどを含むデータの整理が行われる。コンパクションとは、管理単位の変換を含まないデータの整理のことをいい、有効クラスタを集めてクラスタのまま1つのブロックに書き戻すクラスタコンパクション、有効トラックを集めてトラックのまま1つのブロックに書き戻すトラックコンパクションを含む。デフラグは、クラスタからトラックへの管理単位の変換を含むデータの整理のことをいい、有効クラスタを集めて、集めた有効クラスタをLBA順に並べてトラックに統合して1つのブロックに書き戻す。クラスタマージは、所謂トラックの解体であり、トラックからクラスタへの管理単位の変換を含むデータの整理のことをいい、トラック内の有効クラスタを集めて1つのブロックに書き戻す。データ整理については、後で詳述する。
図4は、コントローラ30がWC21、DS40を管理するための管理テーブルを示すものであり、最新の管理情報を含む管理テーブルが、DRAM20、NANDフラッシュ10のどちらに存在するかも示している。DRAM20上には、WC管理テーブル22、トラック管理テーブル23、揮発性クラスタ管理テーブル24、トラックエントリ管理テーブル25、ブロック内有効クラスタ数管理テーブル26、ブロックLRU管理テーブル27、ブロック管理テーブル28などを有する。NANDフラッシュ10上には、正引きのクラスタ管理テーブル12、逆引きのクラスタ管理テーブル13を有する。
・WC管理テーブル22
図5に、WC管理テーブル22の一例を示す。WC管理テーブル22は、DRAM20上に記憶され、WC21上に記憶されたデータをLBAのセクタアドレス単位に管理する。WC管理テーブル22の各エントリには、WC21上に記憶されたデータに対応するLBAのセクタアドレス、DRAM20での記憶位置を示す物理アドレス、及び当該セクタが有効か無効かを示すセクタフラグが関連付けられている。有効データとは最新データのことであり、無効データとは、同一論理アドレスのデータが他の場所に書きこまれ、参照されることがなくなったデータのことである。なお、WC21からNANDフラッシュ10への追い出しの際に、LRUを基準に追い出し順序を決定する場合は、セクタアドレス毎にセクタ間の更新時刻の新旧の順序を示すLRU情報を登録するようにしてもよい。また、WC管理テーブル22をクラスタ単位、あるいはトラック単位に管理してもよい。クラスタ単位あるいはトラック単位に管理する場合においても、クラスタ間、あるいはトラック間の、WC21でのLRU情報(例えば、WC21でのデータ更新時刻順序)を管理するようにしてもよい。
図5に、WC管理テーブル22の一例を示す。WC管理テーブル22は、DRAM20上に記憶され、WC21上に記憶されたデータをLBAのセクタアドレス単位に管理する。WC管理テーブル22の各エントリには、WC21上に記憶されたデータに対応するLBAのセクタアドレス、DRAM20での記憶位置を示す物理アドレス、及び当該セクタが有効か無効かを示すセクタフラグが関連付けられている。有効データとは最新データのことであり、無効データとは、同一論理アドレスのデータが他の場所に書きこまれ、参照されることがなくなったデータのことである。なお、WC21からNANDフラッシュ10への追い出しの際に、LRUを基準に追い出し順序を決定する場合は、セクタアドレス毎にセクタ間の更新時刻の新旧の順序を示すLRU情報を登録するようにしてもよい。また、WC管理テーブル22をクラスタ単位、あるいはトラック単位に管理してもよい。クラスタ単位あるいはトラック単位に管理する場合においても、クラスタ間、あるいはトラック間の、WC21でのLRU情報(例えば、WC21でのデータ更新時刻順序)を管理するようにしてもよい。
・トラック管理テーブル23
図6に、トラック管理テーブル23の一例を示す。トラック管理テーブル23は、DRAM20上に記憶され、LBAのトラックアドレスからトラック情報を取得するためのテーブルである。トラック情報としては、トラックデータが記憶されているNANDフラッシュ10上の記憶位置(トラックデータが記憶されているブロック番号とブロック内記憶位置)、及び当該トラックが有効か無効かを示すトラック有効/無効フラグと、当該トラックに断片化されたクラスタデータが存在するか否かを示す断片化フラグを含み、これらが関連付けられている。
図6に、トラック管理テーブル23の一例を示す。トラック管理テーブル23は、DRAM20上に記憶され、LBAのトラックアドレスからトラック情報を取得するためのテーブルである。トラック情報としては、トラックデータが記憶されているNANDフラッシュ10上の記憶位置(トラックデータが記憶されているブロック番号とブロック内記憶位置)、及び当該トラックが有効か無効かを示すトラック有効/無効フラグと、当該トラックに断片化されたクラスタデータが存在するか否かを示す断片化フラグを含み、これらが関連付けられている。
断片化されたクラスタデータとは、例えばトラックデータが格納されているブロックと異なるブロックに存在する、当該トラックに含まれる最新のクラスタデータのことである。別言すれば、断片化されたクラスタデータとは、NANDフラッシュ10におけるトラック内の更新クラスタデータを示している。断片化フラグが、断片化クラスタが存在しないと示しているときは、トラック管理テーブル23のみでアドレスを解決でき(勿論、正引きクラスタ管理テーブル12には、SSD内全データ分のクラスタ管理単位の管理情報を持っているので、正引きクラスタ管理テーブル12を使用してもアドレス解決可能である)、断片化フラグが、断片化クラスタが存在すると示しているときは、トラック管理テーブル23のみでアドレスを解決できず、揮発性クラスタ管理テーブル24や正引きクラスタ管理テーブル12をさらに検索することが必要であることを示している。
なお、トラック管理テーブル23において、図6に示すように、断片化情報として断片化数(断片化されたクラスタ数)を管理するようにしてもよい。さらに、トラック管理テーブル23において、トラック毎の読み出しデータ量、トラック毎の書き込みデータ量を管理することにしてもよい。トラックの読み出しデータ量とは、トラックに含まれるデータ(セクタ、クラスタ、トラック)の延べの読み出しデータ量のことをいい、リードアクセスが多いトラックであるか否かを判定するために使用する。なお、トラックの読み出しデータ量に代えてトラックの読み出し回数(トラックに含まれるデータ(セクタ、クラスタ、トラック)の延べの読み出し回数)を使用しても良い。
トラックの書き込みデータ量とは、トラックに含まれるデータ(セクタ、クラスタ、トラック)の延べの書き込みデータ量のことをいい、ライトアクセスが多いトラックであるか否かを判定するために使用する。トラックの書き込みデータ量に代えてトラックの書き込み回数(トラックに含まれるデータ(セクタ、クラスタ、トラック)の延べの書き込み回数)を使用しても良い。
・正引きクラスタ管理テーブル12
図7に、正引きクラスタ管理テーブル12の一例を示す。正引きクラスタ管理テーブル12は、NANDフラッシュ10上に記憶される。正引きテーブルとは、論理アドレス(LBA)からNANDフラッシュ10上の記憶位置を検索するためのテーブルである。これに対し、逆引きテーブルとは、NANDフラッシュ10上の記憶位置から論理アドレス(LBA)を検索するためのテーブルである。
図7に、正引きクラスタ管理テーブル12の一例を示す。正引きクラスタ管理テーブル12は、NANDフラッシュ10上に記憶される。正引きテーブルとは、論理アドレス(LBA)からNANDフラッシュ10上の記憶位置を検索するためのテーブルである。これに対し、逆引きテーブルとは、NANDフラッシュ10上の記憶位置から論理アドレス(LBA)を検索するためのテーブルである。
正引きクラスタ管理テーブル12は、LBAのクラスタアドレスからクラスタ情報を取得するためのテーブルである。正引きクラスタ管理テーブル12には、NANDフラッシュ10のDS40の全容量分のクラスタ単位の管理情報を持っている。クラスタアドレスは、トラック単位にまとめられている。本実施形態では、1トラックに8クラスタを含むとしているので、1トラックに8個のクラスタ情報のエントリを含む。クラスタ情報としては、クラスタデータが記憶されているNANDフラッシュ10上の記憶位置(クラスタデータが記憶されているブロック番号とブロック内記憶位置)、及び当該クラスタが有効か無効かを示すクラスタ有効/無効フラグを含み、これらが関連付けられている。
正引きクラスタ管理テーブル12は、トラック単位の管理情報が同一ブロックにまとめて記憶されてあれば、トラック単位の管理情報が複数のブロックに分散して記憶されていてもよい。この場合、トラック単位の管理情報のNANDフラッシュ10上での記憶位置は、後述するトラックエントリ管理テーブル25によって管理される。また、この正引きクラスタ管理テーブル12は、リード処理などに使用される。
・揮発性クラスタ管理テーブル24
図8に、揮発性クラスタ管理テーブル24の一例を示す。揮発性クラスタ管理テーブル24は、NANDフラッシュ10上に記憶されている正引きクラスタ管理テーブル12の一部がDRAM20上にキャッシュされたものである。したがって、揮発性クラスタ管理テーブル24も正引きクラスタ管理テーブル12と同様、トラック単位にまとめられており、各クラスタアドレスのエントリ毎に、クラスタデータが記憶されているNANDフラッシュ10上の記憶位置(クラスタデータが記憶されているブロック番号とブロック内記憶位置)、及び当該クラスタが有効か無効かを示すクラスタ有効/無効フラグを含む。
図8に、揮発性クラスタ管理テーブル24の一例を示す。揮発性クラスタ管理テーブル24は、NANDフラッシュ10上に記憶されている正引きクラスタ管理テーブル12の一部がDRAM20上にキャッシュされたものである。したがって、揮発性クラスタ管理テーブル24も正引きクラスタ管理テーブル12と同様、トラック単位にまとめられており、各クラスタアドレスのエントリ毎に、クラスタデータが記憶されているNANDフラッシュ10上の記憶位置(クラスタデータが記憶されているブロック番号とブロック内記憶位置)、及び当該クラスタが有効か無効かを示すクラスタ有効/無効フラグを含む。
DRAM20上での、揮発性クラスタ管理テーブル24のリソース使用量は増減する。SSD100が起動された直後の時点では、DRAM20上での揮発性クラスタ管理テーブル24のリソース使用量は零である。NANDフラッシュ10からクラスタデータを読み出す際に、読み出すべきクラスタを含むトラックに対応するトラック単位の正引きクラスタ管理テーブル12がDRAM20上にキャッシュされる。また、NANDフラッシュ10にクラスタデータを書き込む際に、書き込むべきクラスタに対応する揮発性クラスタ管理テーブル24がDRAM上にキャッシュされていないときには、書き込むべきクラスタを含むトラックに対応するトラック単位の正引きクラスタ管理テーブル12をDRAM20上にキャッシュして、書き込み内容に応じてキャッシュしたDRAM20上の揮発性クラスタ管理テーブル24を更新し、さらに更新した揮発性クラスタ管理テーブル24をNANDフラッシュ10に書き込んで、テーブルの不揮発化を実行する。このように、NANDフラッシュ10に対する読み出しや書き込みに伴って、DRAM20上での揮発性クラスタ管理テーブル24のリソース使用量は許容値までの範囲内で変化する。
コントローラ30は、揮発性クラスタ管理テーブル24→正引きクラスタ管理テーブル12→トラック管理テーブル23の優先順位で管理テーブルを更新管理しており、この順番がアドレス解決のための情報の信頼性の優先順位であるともいえる。
・逆引きクラスタ管理テーブル13
図9に、逆引きクラスタ管理テーブル13の一例を示す。逆引きクラスタ管理テーブル13は、NANDフラッシュ10上に記憶される。逆引きクラスタ管理テーブル13は、NANDフラッシュ10上の記憶位置からLBAのクラスタアドレスを検索するためのテーブルであり、例えばブロック番号単位にまとめられている。すなわち、ブロック番号とブロック内記憶位置(例えばページ番号)から特定されるNANDフラッシュ10上の記憶位置に、LBAのクラスタアドレスが関連付けられている。この逆引きクラスタ管理テーブル13は、NANDフラッシュ10の整理などに使用される。なお、逆引きクラスタ管理テーブル13の一部をDRAM20上にキャッシュするようにしてもよい。逆引きクラスタ管理テーブル13も、正引きクラスタ管理テーブル12と同様、NANDフラッシュ10のDS40の全容量分のクラスタ単位の管理情報を持っている。
図9に、逆引きクラスタ管理テーブル13の一例を示す。逆引きクラスタ管理テーブル13は、NANDフラッシュ10上に記憶される。逆引きクラスタ管理テーブル13は、NANDフラッシュ10上の記憶位置からLBAのクラスタアドレスを検索するためのテーブルであり、例えばブロック番号単位にまとめられている。すなわち、ブロック番号とブロック内記憶位置(例えばページ番号)から特定されるNANDフラッシュ10上の記憶位置に、LBAのクラスタアドレスが関連付けられている。この逆引きクラスタ管理テーブル13は、NANDフラッシュ10の整理などに使用される。なお、逆引きクラスタ管理テーブル13の一部をDRAM20上にキャッシュするようにしてもよい。逆引きクラスタ管理テーブル13も、正引きクラスタ管理テーブル12と同様、NANDフラッシュ10のDS40の全容量分のクラスタ単位の管理情報を持っている。
・トラックエントリ管理テーブル25
図10に、トラックエントリ管理テーブル25の一例を示す。トラックエントリ管理テーブル25は、DRAM20上に記憶される。トラックエントリ管理テーブル25は、正引きクラスタ管理テーブル12のトラックアドレス単位にまとめられた各トラックエントリ(この実施形態では1つのトラックエントリは8個のクラスタエントリから成る)のNANDフラッシュ10上での記憶位置を特定するためのテーブルである。トラックエントリ管理テーブル25は、例えば、トラックアドレス毎に、トラックエントリのNANDフラッシュ10上での記憶位置を特定するためのポインタ情報が関連付けられている。なお、複数のトラックエントリをまとめて1つのポインタ情報で特定することとしてもよい。また、ポインタ情報を、クラスタアドレス単位に持つようにしてもよい。
図10に、トラックエントリ管理テーブル25の一例を示す。トラックエントリ管理テーブル25は、DRAM20上に記憶される。トラックエントリ管理テーブル25は、正引きクラスタ管理テーブル12のトラックアドレス単位にまとめられた各トラックエントリ(この実施形態では1つのトラックエントリは8個のクラスタエントリから成る)のNANDフラッシュ10上での記憶位置を特定するためのテーブルである。トラックエントリ管理テーブル25は、例えば、トラックアドレス毎に、トラックエントリのNANDフラッシュ10上での記憶位置を特定するためのポインタ情報が関連付けられている。なお、複数のトラックエントリをまとめて1つのポインタ情報で特定することとしてもよい。また、ポインタ情報を、クラスタアドレス単位に持つようにしてもよい。
・ブロック内有効クラスタ数管理テーブル26
図11に、ブロック内有効クラスタ数管理テーブル26の一例を示す。ブロック内有効クラスタ数管理テーブル26はDRAM20上に記憶される。ブロック内有効クラスタ数管理テーブル26は、ブロック内の有効クラスタ数をブロック毎に管理するテーブルであり、図11では、1つのブロックに関する有効クラスタ数を含む情報同士を双方向リストとして有効クラスタ数の小さいブロック順に管理している。リストの1つのエントリには、前エントリへのポインタ情報、有効クラスタ数(あるいは有効クラスタ率)、ブロック番号、次エントリへのポインタ情報が含まれる。ブロック内有効クラスタ数管理テーブル26の主な用途は、NANDフラッシュ10の整理であり、コントローラ30は、有効クラスタ数によって整理対象ブロックを選択する。
図11に、ブロック内有効クラスタ数管理テーブル26の一例を示す。ブロック内有効クラスタ数管理テーブル26はDRAM20上に記憶される。ブロック内有効クラスタ数管理テーブル26は、ブロック内の有効クラスタ数をブロック毎に管理するテーブルであり、図11では、1つのブロックに関する有効クラスタ数を含む情報同士を双方向リストとして有効クラスタ数の小さいブロック順に管理している。リストの1つのエントリには、前エントリへのポインタ情報、有効クラスタ数(あるいは有効クラスタ率)、ブロック番号、次エントリへのポインタ情報が含まれる。ブロック内有効クラスタ数管理テーブル26の主な用途は、NANDフラッシュ10の整理であり、コントローラ30は、有効クラスタ数によって整理対象ブロックを選択する。
・ブロックLRU管理テーブル27
図12に、ブロックLRU管理テーブル27の一例を示す。ブロックLRU管理テーブル27はDRAM20上に記憶される。ブロックLRU管理テーブル27は、ブロックにおける書き込みを実行した時点の新旧の順序(LRU:Least Recently used)をブロック毎に管理するテーブルであり、図12では、1つのブロックのブロック番号を含む情報同士を双方向リストとしてLRU順に管理している。ブロックLRU管理テーブル27で管理する書き込み時点とは、例えばフリーブロックFBからアクティブブロックABになった時点とする。リストの1つのエントリには、前エントリへのポインタ情報、ブロック番号、次エントリへのポインタ情報が含まれる。ブロックLRU管理テーブル27の主な用途は、NANDフラッシュ10の整理であり、コントローラ30は、ブロックの新旧の順序によって整理対象ブロックを選択する。
図12に、ブロックLRU管理テーブル27の一例を示す。ブロックLRU管理テーブル27はDRAM20上に記憶される。ブロックLRU管理テーブル27は、ブロックにおける書き込みを実行した時点の新旧の順序(LRU:Least Recently used)をブロック毎に管理するテーブルであり、図12では、1つのブロックのブロック番号を含む情報同士を双方向リストとしてLRU順に管理している。ブロックLRU管理テーブル27で管理する書き込み時点とは、例えばフリーブロックFBからアクティブブロックABになった時点とする。リストの1つのエントリには、前エントリへのポインタ情報、ブロック番号、次エントリへのポインタ情報が含まれる。ブロックLRU管理テーブル27の主な用途は、NANDフラッシュ10の整理であり、コントローラ30は、ブロックの新旧の順序によって整理対象ブロックを選択する。
・ブロック管理テーブル28
図13に、ブロック管理テーブル28の一例を示す。ブロック管理テーブル28は、各ブロックが使用中であるか否か、すなわち各ブロックがフリーブロックFBであるかアクティブブロックABであるかを識別管理する。フリーブロックFBとは、内部に有効データを含まない、用途未割り当ての未使用ブロックのことである。アクティブブロックABとは、内部に有効データを含み、用途が割り当てられた使用中ブロックのことである。このブロック管理テーブル28を使用して、NANDフラッシュ10に対する書き込みの際に使用するフリーブロックFBを選択する。なお、未使用ブロックは、今まで一度も書き込みが行われなかったブロック及び一旦書き込みが行われたがその後全てのデータが無効データとなったブロックの両方を含む。上述した通り同一ページへの上書きを行うためには事前の消去動作が必要なので、フリーブロックFBはアクティブブロックABとして利用される前の所定のタイミングで消去される。
図13に、ブロック管理テーブル28の一例を示す。ブロック管理テーブル28は、各ブロックが使用中であるか否か、すなわち各ブロックがフリーブロックFBであるかアクティブブロックABであるかを識別管理する。フリーブロックFBとは、内部に有効データを含まない、用途未割り当ての未使用ブロックのことである。アクティブブロックABとは、内部に有効データを含み、用途が割り当てられた使用中ブロックのことである。このブロック管理テーブル28を使用して、NANDフラッシュ10に対する書き込みの際に使用するフリーブロックFBを選択する。なお、未使用ブロックは、今まで一度も書き込みが行われなかったブロック及び一旦書き込みが行われたがその後全てのデータが無効データとなったブロックの両方を含む。上述した通り同一ページへの上書きを行うためには事前の消去動作が必要なので、フリーブロックFBはアクティブブロックABとして利用される前の所定のタイミングで消去される。
なお、ブロック管理テーブル28において、読み出しアクセスが多いブロックを識別するためにブロック毎の読み出し回数を管理するようにしてもよい。ブロックの読み出し回数とは、ブロック内のデータに読み出し要求が発生した延べの回数のことをいい、読み出しアクセスが多いブロックを判定するために使用する。なお、読み出し回数に代えてブロック内の読み出しデータ量(ブロック内から読み出された延べのデータ量)を使用しても良い。
SSD100では、論理アドレス(LBA)と物理アドレス(NANDフラッシュ10の記憶位置)との関係は予め静的に決定されておらず、データの書込み時に動的に関係付けられる論物変換方式が採用されている。例えば、同じLBAのデータを上書きする場合は、つぎのような操作が行われる。論理アドレスA1にブロックサイズの有効なデータが保存されており、記憶領域としてはブロックB1が使用されていたとする。ホスト1から論理アドレスA1のブロックサイズの更新データを上書きするコマンドを受信した場合、フリーブロックFB(ブロックB2とする)を1個確保し、そのフリーブロックFBにホスト1から受信したデータを書き込む。その後、論理アドレスA1とブロックB2を関係付ける。その結果、ブロックB2はアクティブブロックABになり、ブロックB1に保存されたデータは無効になるためブロックB1はフリーブロックFBとなる。
このように、SSD100では、同じ論理アドレスA1のデータであっても、実際の記録領域として使用されるブロックは書込みの度に変化する。なお、ブロックサイズの更新データ書き込みでは、必ず書き込み先ブロックが変化するが、ブロックサイズ未満の更新データ書き込みでは、同じブロックに更新データが書き込まれることもある。例えばブロックサイズ未満のクラスタデータが更新される場合、当該ブロック内において同じ論理アドレスの旧クラスタデータが無効化され、新たに書き込まれた最新のクラスタデータが有効クラスタとして管理される。ブロック内の全データが無効化されると、当該ブロックはフリーブロックFBとして解放される。
上記各管理テーブルで管理される管理情報によって、コントローラ30は、ホスト1で使用される論理アドレス(LBA)と、SSD100で使用される物理アドレスとの間を対応付けることができ、ホスト1とNANDフラッシュ10との間のデータの転送を行うことが可能となる。
図1に示すように、コントローラ30は、コマンド解釈部31、書き込み制御部32、読み出し制御部33及びNAND整理部34を有する。コマンド解釈部31は、ホスト1からのコマンドを解析し、解析結果を書き込み制御部32、読み出し制御部33及びNAND整理部34に通知する。
書き込み制御部32は、ホスト1から入力されたデータをWC21に書き込むWC書き込み制御、WC21からNANDフラッシュ10にデータを追い出す追い出し制御、WC書き込み制御及び追い出し制御に対応する各種管理テーブルの更新など書き込みに関する制御を実行する。
読み出し制御部33は、ホスト1から指定された読み出しデータをNANDフラッシュ10から読み出して、DRAM20を経由してホスト1へ転送する読み出し制御、読み出し制御に対応する各種管理テーブルの更新など読み出しに関する制御を実行する。
NAND整理部34は、NANDフラッシュ10での整理(コンパクション、デフラグ、クラスタマージなど)を実行する。NAND整理部34は、NANDフラッシュ10の使用リソース量が閾値を越えたときに、NAND整理を実行する。なお、DRAM20上の管理テーブルのリソース使用量(例えば、揮発性クラスタ管理テーブル24のリソース使用量)をNAND整理のトリガとして採用しても良い。リソース量とは、NANDフラッシュ10上のデータを記録するフリーブロック数、DRAM20上のWC21用の領域の量、DRAM20上の揮発性クラスタ管理テーブル24の未使用領域の量などを指しているが、これ以外をリソースとして管理してもよい。
・読み出し処理
つぎに、読み出し処理の概要について説明する。読み出し処理の際には、WC管理テーブル22、揮発性クラスタ管理テーブル24、トラック管理テーブル23、正引きクラスタ管理テーブル12をアドレス解決のために主に使用する。アドレス解決のための情報の信頼性の優先順位は、以下の通りである。
(1)WC管理テーブル22
(2)揮発性クラスタ管理テーブル24
(3)正引きクラスタ管理テーブル12
(4)トラック管理テーブル23
つぎに、読み出し処理の概要について説明する。読み出し処理の際には、WC管理テーブル22、揮発性クラスタ管理テーブル24、トラック管理テーブル23、正引きクラスタ管理テーブル12をアドレス解決のために主に使用する。アドレス解決のための情報の信頼性の優先順位は、以下の通りである。
(1)WC管理テーブル22
(2)揮発性クラスタ管理テーブル24
(3)正引きクラスタ管理テーブル12
(4)トラック管理テーブル23
しかし、検索の高速性を考慮して、本実施形態では以下の順番にテーブル検索を行っている。
(1)WC管理テーブル22
(2)トラック管理テーブル23
(3)揮発性クラスタ管理テーブル24
(4)正引きクラスタ管理テーブル12
なお、揮発性クラスタ管理テーブル24の検索を2番目にし、トラック管理テーブル23の検索を3番目にしてもよい。また、トラック管理テーブル23に、WC21にデータが存在するか否かのフラグを設けるようにすれば、最初にトラック管理テーブル23を検索するようにもテーブルの検索順番を変更することも可能である。このように、管理テーブルの検索順番は、管理テーブルの作り方次第で任意に設定可能である。
(1)WC管理テーブル22
(2)トラック管理テーブル23
(3)揮発性クラスタ管理テーブル24
(4)正引きクラスタ管理テーブル12
なお、揮発性クラスタ管理テーブル24の検索を2番目にし、トラック管理テーブル23の検索を3番目にしてもよい。また、トラック管理テーブル23に、WC21にデータが存在するか否かのフラグを設けるようにすれば、最初にトラック管理テーブル23を検索するようにもテーブルの検索順番を変更することも可能である。このように、管理テーブルの検索順番は、管理テーブルの作り方次第で任意に設定可能である。
図14を用いて正引きのアドレス解決手順について説明する。ホスト1から、ホストI/F2を介して読み出しコマンド及び読み出しアドレスとしてのLBAが入力されると、読み出し制御部33は、WC管理テーブル22を検索することで、WC21にLBAに対応するデータが存在しているか否かを検索する(ステップS100)。WC管理テーブル22上でLBAがヒットした場合は、WC管理テーブル22からLBAに対応するデータのWC21上の記憶位置を取得し(ステップS110)、取得した記憶位置を用いて当該LBAに対応するWC21のデータを読み出す。
読み出し制御部33は、WC21でヒットしなかった場合は、検索対象のデータがNANDフラッシュ10のどこに格納されているかを検索する。まず、トラック管理テーブル23を検索し、トラック管理テーブル23に当該LBAに対応する有効なトラックエントリが存在するか否かを判定する(ステップS130)。有効なトラックエントリが存在しない場合は、手順をステップS160に移行させる。有効なトラックエントリが存在する場合は、当該トラックエントリ中の断片化フラグを検索し、当該トラック中に断片化クラスタが存在するか否かを判定する(ステップS140)。断片化クラスタが存在しない場合は、当該トラックエントリからトラックデータのNANDフラッシュ10上の記憶位置を取得し(ステップS150)、取得した記憶位置を用いて当該LBAに対応するNANDフラッシュ10上のデータを読み出す。
ステップS130でトラック管理テーブル23に有効なトラックエントリが存在しない場合、あるいはステップS140で断片化クラスタが存在する場合は、読み出し制御部33は、つぎに、揮発性クラスタ管理テーブル24を検索し、揮発性クラスタ管理テーブル24に当該LBAに対応する有効なトラックエントリが存在するか否かを判定する(ステップS160)。揮発性クラスタ管理テーブル24に当該LBAに対応する有効なクラスタエントリが存在する場合は、該当クラスタエントリからクラスタデータのNANDフラッシュ10上の記憶位置を取得し(ステップS190)、取得した記憶位置を用いて当該LBAに対応するNANDフラッシュ10上のデータを読み出す。
ステップS160で、当該LBAに対応するクラスタエントリが揮発性クラスタ管理テーブル24に存在しない場合は、読み出し制御部33は、つぎに、正引きクラスタ管理テーブル12を検索するために、トラックエントリ管理テーブル25を検索する。すなわち、当該LBAのクラスタアドレスに対応するトラックエントリ管理テーブル25のエントリから、クラスタ管理テーブルのNANDフラッシュ10上の記憶位置を取得し、取得したNANDフラッシュ10上の記憶位置を用いて正引きクラスタ管理テーブル12の当該トラックエントリをNANDフラッシュ10から読み出し、読み出したトラックエントリを揮発性クラスタ管理テーブル24としてDRAM20上にキャッシュする。そして、キャッシュした正引きクラスタ管理テーブル12を用いて、当該LBAに対応するクラスタエントリを抽出し(ステップS180)、抽出したクラスタエントリからクラスタデータのNANDフラッシュ10上の記憶位置を取得し(ステップS190)、取得した記憶位置を用いて当該LBAに対応するNANDフラッシュ10上のデータを読み出す。
このようにして、WC管理テーブル22、トラック管理テーブル23、揮発性クラスタ管理テーブル24、正引きクラスタ管理テーブル12の検索によってWC21またはNANDフラッシュ10から読み出されたデータを、必要に応じてDRAM20上で結合してホスト1へ送る。
図15は、上記したNANDフラッシュ10内データのアドレス解決を概念的に示す図である。トラック管理テーブル23で管理しているトラックデータと、正引きクラスタ管理テーブル12で管理しているクラスタデータは包括関係にある。図15は、あるLBAのクラスタの記録場所をトラック管理テーブル23及び正引きクラスタ管理テーブル12のどちらでも解決できる場合である。図16は、あるLBAのクラスタの記録場所を正引きクラスタ管理テーブル12でのみ解決できる場合である。図17は、揮発性クラスタ管理テーブル24のみが最新の記録場所を解決できる場合であり、揮発性クラスタ管理テーブル24の情報を正引きクラスタ管理テーブル12に保存した段階で、正引きクラスタ管理テーブル12でも最新の記録場所を解決できるようになる。
・書き込み処理
つぎに、図18に示すフローチャートに従って書き込み処理の概要について説明する。書き込み処理では、ホストI/F2を介して書き込みアドレスとしてのLBAを含む書き込みコマンドが入力されると(ステップS200)、書き込み制御部32は、LBAで指定されたデータをWC21に書き込む。具体的には、書き込み制御部32は、WC21に当該書き込み要求に応じた空き領域が有るか否かを判定し(ステップS210)、WC21に空き領域がある場合は、LBAで指定されたデータをWC21に書き込む(ステップS250)。このWC21への書き込みに伴って書き込み制御部32は、WC管理テーブル22を更新する。
つぎに、図18に示すフローチャートに従って書き込み処理の概要について説明する。書き込み処理では、ホストI/F2を介して書き込みアドレスとしてのLBAを含む書き込みコマンドが入力されると(ステップS200)、書き込み制御部32は、LBAで指定されたデータをWC21に書き込む。具体的には、書き込み制御部32は、WC21に当該書き込み要求に応じた空き領域が有るか否かを判定し(ステップS210)、WC21に空き領域がある場合は、LBAで指定されたデータをWC21に書き込む(ステップS250)。このWC21への書き込みに伴って書き込み制御部32は、WC管理テーブル22を更新する。
一方、WC21に空き領域がない場合は、書き込み制御部32は、WC21からデータを追い出し、追い出したデータをNANDフラッシュ10に書き込み、WC21に空き領域を作成する。具体的には、書き込み制御部32は、WC管理テーブル22に基づいてWC21上に存在するトラック中の更新データ量を判定し、更新データ量が閾値DC1以上の場合には(ステップS220)、トラックデータとしてトラックIB42にデータを追い出し(ステップS230)、WC21上に存在するトラック中の更新データ量が閾値DC1未満の場合には、クラスタデータとしてクラスタIB41に追い出す(ステップS240)。WC21上に存在するトラック中の更新データ量とは、WC21上に存在する同一トラック中の有効データ量のことをいい、トラック内の有効データ量が閾値DC1以上のトラックはトラックサイズのデータとしてトラックIB42にデータを追い出し、トラック内の有効データ量が閾値DC1未満のトラックはクラスタサイズのデータとしてクラスタIB41にデータを追い出す。例えば、WC21をセクタアドレスで管理する場合は、WC21上に存在する同一トラック中の有効なセクタデータの合計量を閾値DC1と比較し、この比較結果に応じてトラックIB42またはクラスタIB41にデータを追い出す。また、WC21をクラスタアドレスで管理する場合は、WC21上に存在する同一トラック中の有効なクラスタデータの合計量を閾値DC1と比較し、この比較結果に応じてトラックIB42またはクラスタIB41にデータを追い出す。
ただし、WC21からデータを追い出す際、WC管理テーブル22のLRU情報に基づき古いデータが先に追い出されるような順序規則に従ったほうが望ましい。また、WC21にキャッシュされたトラック中の有効データ量を計算する際には、WC管理テーブル22中の有効なセクタアドレスを用いてトラック中の有効データ量を都度計算することとしてもよいし、トラック中の有効データ量をトラック毎に逐次計算してDRAM20に管理情報として記憶しておき、この記憶された管理情報に基づきトラック中の有効データ量を判定するようにしてもよい。また、WC管理テーブル22をクラスタ単位に管理する場合も、WC管理テーブル22を用いてトラック中の有効クラスタ数をその都度計算することにしてもよいし、トラック中の有効クラスタ数をトラック毎に管理情報として記憶しておくようにしてもよい。また、トラック中の有効データ量に代えてトラック中の有効データ率を使用し、有効データ率と閾値との比較結果に応じてデータの追い出し先を決定するようにしてもよい。
前述したように、WC21からクラスタデータとしてデータを追い出す際に、WC21上に全てのデータが揃っていない場合は、NANDフラッシュ10内に同一クラスタに含まれる有効なセクタデータがあるか否かを判定し、有効なセクタデータが存在する場合は、DRAM20上で、WC21にあるクラスタデータにNAND10内のセクタデータを穴埋めし、穴埋めされたクラスタデータをクラスタIB41に追い出す。また、WC21からトラックデータとしてデータを追い出す際に、WC21上に全てのデータが揃っていない場合は、NANDフラッシュ10内に同一トラックに含まれる有効なクラスタデータ及び有効なセクタデータがあるか否かを判定し、有効なクラスタデータまたはセクタデータが存在する場合は、DRAM20上で、WC21にあるトラックデータにNAND10内のクラスタデータまたはセクタデータを穴埋めし、穴埋めされたトラックデータをクラスタIB41に追い出す。
このようにして、WC21に空き領域を作った後、書き込み制御部32は、LBAで指定されたデータをWC21に書き込む(ステップS250)。また、WC21へのデータ書き込みに応じて、またNANDフラッシュ10へのデータ追い出しに応じて、管理テーブルを更新する。具体的には、WC21の更新状態に応じてWC管理テーブル22を更新する。
NANDフラッシュ10へトラックデータとして追い出した場合は、トラック管理テーブル23を更新するとともに、トラックエントリ管理テーブル25を参照して対応するクラスタ管理テーブル12の位置を特定して読み出し、揮発性クラスタ管理テーブル24としてDRAM20上にキャッシュして更新する。さらに更新後のテーブルをNANDフラッシュ10上に書き込んだ後、この書き込み位置をポインティングするようにトラックエントリ管理テーブル25を更新する。また、逆引きのクラスタ管理テーブル13についても更新する。
一方、NANDフラッシュ10へクラスタとして追い出した場合は、トラックエントリ管理テーブル25を参照して対応するクラスタ管理テーブル12の位置を特定して読み出し、揮発性クラスタ管理テーブル24としてDRAM20上にキャッシュして更新する。さらに更新後のテーブルをNANDフラッシュ10上に書き込んだ後、この書き込み位置をポインティングするようにトラックエントリ管理テーブル25を更新する。なお、揮発性クラスタ管理テーブル24がすでにDRAM20上に存在する場合には、NANDフラッシュ10上のクラスタ管理テーブル12の読み出しは省略する。
・NANDフラッシュの整理
つぎに、NANDフラッシュの整理について説明する。本実施形態では、ホスト1からのアクセス頻度が高いときと、ホスト1からのアクセス頻度が低いときとでNANDフラッシュの整理の内容を異ならせる。アクセス頻度が高いとは、例えば、ホスト1からのデータ転送要求にかかるコマンドの受信間隔が閾値Tc以下の場合であるとし、アクセス頻度が低いときとはホスト1からのデータ転送要求にかかるコマンドの受信間隔が閾値Tcより長い場合であるとする。なお、アクセス頻度をホスト1からのデータ転送レートに基づき判断することにしてもよい。
つぎに、NANDフラッシュの整理について説明する。本実施形態では、ホスト1からのアクセス頻度が高いときと、ホスト1からのアクセス頻度が低いときとでNANDフラッシュの整理の内容を異ならせる。アクセス頻度が高いとは、例えば、ホスト1からのデータ転送要求にかかるコマンドの受信間隔が閾値Tc以下の場合であるとし、アクセス頻度が低いときとはホスト1からのデータ転送要求にかかるコマンドの受信間隔が閾値Tcより長い場合であるとする。なお、アクセス頻度をホスト1からのデータ転送レートに基づき判断することにしてもよい。
アクセス頻度が高いときのデータ整理は、
・NANDフラッシュ10のリソース使用量が限界値を超えた場合に(例えば、フリーブロックFBの個数が限界値Flmt以下になった場合に)発動され、
・有効データ量(例えば、有効クラスタ数)がより少ないブロックをデータ整理対象ブロックとして選択し、
・データ整理対象ブロックの有効データはすべてクラスタ単位で管理して整理(クラスタマージ、クラスタコンパクション)を実行する。
アクセス頻度が高いときのデータ整理として、トラック単位からクラスタ単位への管理単位の変換が行われるクラスタマージを採用している点が、本実施形態の1つの特徴である。なお、有効データ量がより少ないブロックをデータ整理対象ブロックとして選択するとは、有効データ量が最も少ないものから順番に選択するという意味である。なお、アクセス頻度が高いときのデータ整理の際、有効データ量が閾値より少ないブロックをデータ整理対象ブロックとして選択するようにしてもよい。
・NANDフラッシュ10のリソース使用量が限界値を超えた場合に(例えば、フリーブロックFBの個数が限界値Flmt以下になった場合に)発動され、
・有効データ量(例えば、有効クラスタ数)がより少ないブロックをデータ整理対象ブロックとして選択し、
・データ整理対象ブロックの有効データはすべてクラスタ単位で管理して整理(クラスタマージ、クラスタコンパクション)を実行する。
アクセス頻度が高いときのデータ整理として、トラック単位からクラスタ単位への管理単位の変換が行われるクラスタマージを採用している点が、本実施形態の1つの特徴である。なお、有効データ量がより少ないブロックをデータ整理対象ブロックとして選択するとは、有効データ量が最も少ないものから順番に選択するという意味である。なお、アクセス頻度が高いときのデータ整理の際、有効データ量が閾値より少ないブロックをデータ整理対象ブロックとして選択するようにしてもよい。
アクセス頻度が低いときのデータ整理は、
・NANDフラッシュ10のリソース使用量が目標値を超えた場合に(フリーブロックFBの個数が目標値Fref(>Flmt)以下になった場合に)発動され、
・書き込み時期が古いブロックの中で、有効データ量(例えば、有効クラスタ数)がより少ないブロックをデータ整理対象ブロックとして選択し、
・データ整理対象ブロックの有効データはすべてトラック単位で管理して整理(デフラグ、トラックコンパクション)を実行する。
アクセス頻度が低いときのデータ整理として、クラスタからトラックへの管理単位の変換が行われるデフラグを採用している点が、本実施形態の1つの特徴である。なお、アクセス頻度が低いときのデータ整理の際、書き込み時期が古いブロックの中で、有効データ量が閾値より少ないブロックをデータ整理対象ブロックとして選択するようにしてもよい。
・NANDフラッシュ10のリソース使用量が目標値を超えた場合に(フリーブロックFBの個数が目標値Fref(>Flmt)以下になった場合に)発動され、
・書き込み時期が古いブロックの中で、有効データ量(例えば、有効クラスタ数)がより少ないブロックをデータ整理対象ブロックとして選択し、
・データ整理対象ブロックの有効データはすべてトラック単位で管理して整理(デフラグ、トラックコンパクション)を実行する。
アクセス頻度が低いときのデータ整理として、クラスタからトラックへの管理単位の変換が行われるデフラグを採用している点が、本実施形態の1つの特徴である。なお、アクセス頻度が低いときのデータ整理の際、書き込み時期が古いブロックの中で、有効データ量が閾値より少ないブロックをデータ整理対象ブロックとして選択するようにしてもよい。
図19は、アクセス頻度が高いときのデータ整理の一例の様子を概念的に示す図である。本実施形態では、1個のブロックには、4個のトラックデータあるいは32個のクラスタデータを収容することが可能である。1トラック分の記憶容量には、8個のクラスタデータを収容可能である。白抜きの四角が無効データを示し、ハッチング付きの四角が有効データを示している。
アクセス頻度が高いときの整理では、有効クラスタ数が少ないブロックから有効クラスタまたはトラック内の有効クラスタがフリーブロックFBに集められる。ここでデータ集合先のフリーブロックFBはクラスタ単位で管理され、トラック単位では管理をされないようにする。アクセス頻度が高いときのデータ整理には、図19に示すように、例えば、トラックの解体(クラスタマージ)と、クラスタコンパクションが含まれる。データ集合先のフリーブロックFBは、アクティブブロックABとして、ブロックLRU管理テーブル27でLRU順が管理されるリストの入口(最も書き込み時期が新しい方)に挿入する。データ整理により有効データが存在しなくなったブロックはフリーブロックFBとして解放される。
ただし、トラックの解体(クラスタマージ)の際、ブロックに記憶されているトラック内の有効クラスタ数が閾値以上ある場合は、トラックの解体を行わずにそのまま無効クラスタを含むトラックとしてデータ集合先のフリーブロックFBにデータをコピーし、その後もトラック管理するといった例外処理を行うことも可能である。すなわち、データ整理の際に、トラック管理テーブル23から整理対象トラックの断片化数を取得し、取得した断片化数を閾値と比較し、断片化数が閾値より少ない場合は、トラックの解体を行わずにそのままデータ集合先のフリーブロックFBにデータをコピーし、コピーしたトラックはその後もトラック管理する。このようにして、トラックの解体によって断片化数の少ないトラックのクラスタが分散されることを抑制し、これによりリード性能の低下を防止する。
図20は、アクセス頻度が低いときのデータ整理の一例の様子を概念的に示す図である。アクセス頻度が低いときの整理では、デフラグを行うことで、断片化した複数のクラスタデータをトラックデータとしてLBA順に並べ直すことで、NANDフラッシュ10をクラスタ単位とトラック単位との2つの管理単位を組み合わせて制御を行う管理構造へ戻すようにする。なお、アクセス頻度が低いときには、デフラグのみを行うようにしてもよいが、図20に示すように、デフラグ、トラックコンパクション、さらにはクラスタコンパクションを併用してもよい。データ整理により有効データが存在しなくなったブロックはフリーブロックFBとして解放される。
図20では、まず、トラックコンパクションを行う。トラックコンパクションでは、ブロック内の有効クラスタをチェックし、有効クラスタが所属するトラックがトラックデータとして管理されていて、かつクラスタ化率が所定割合以下のトラックを1つのフリーブロックFBへ集める。クラスタ化率は、トラック管理テーブル23の断片化数を用いて、断片化数/トラック内の全クラスタ数、に基づき算出する。勿論、クラスタ化率に代えて断片化数を用いることで、トラックコンパクション対象のトラックを選択してもよい。データ集合先のフリーブロックFBは、アクティブブロックABとして、ブロックLRU管理テーブル27でLRU順が管理されるリストにおいて、例えば、コンパクション対象データが存在したブロックよりも出口側(書き込み時期が古い方)へ挿入する。
つぎの、デフラグでは、トラックコンパクションに該当しない有効クラスタをトラックデータに統合して1つのフリーブロックFBに集める。データ集合先のフリーブロックFBは、アクティブブロックABとして、ブロックLRU管理テーブル27でLRU順が管理されるリストの入口(最も書き込み時期が新しい方)に挿入する。
書き換え頻度が高いデータは、ブロックLRU管理テーブル27でLRU順が管理されるリストの入口側に集まると期待されるので、書き換え頻度が低いと思われる、リストの出口側のデータから優先的にトラック化する。この動作を続けると、書き換え頻度が少ないトラックデータがリストの出口側に集まってくることが期待される。
クラスタコンパクションは、例えば、NANDフラッシュ10の整理によってフリーブロックFBの個数が閾値より少なくなった際に実行する。すなわち、デフラグを行うとフリーブロックFBが少なくなる可能性が高いので、クラスタコンパクションを行ってフリーブロックFBを増やす。クラスタコンパクションでは、例えば、上記トラックコンパクション、デフラグの対象とならなかった有効クラスタを1つのフリーブロックFBに集める。データ集合先のフリーブロックFBは、アクティブブロックABとして、ブロックLRU管理テーブル27でLRU順が管理されるリストの入口(最も書き込み時期が新しい方)に挿入する。なお、フリーブロック数は、ブロック管理テーブル28に登録されたフリーブロックFBの個数を計数して求めてもよいし、フリーブロック数を管理情報として記憶しておくようにしてもよい。
なお、データ整理の際には、WC21からの追い出しのときと同様、必要に応じてセクタ穴埋め及びクラスタ穴埋めを実行する。すなわち、クラスタマージ、クラスタコンパクションの際にはセクタ穴埋めを行い、デフラグ、トラックコンパクションの際には、セクタ穴埋め及びクラスタ穴埋めを実行する。ただし、WC21上のデータを除いてデータ整理する際には、セクタ穴埋めは省略可能である。
つぎに、図21に示すフローチャートにしたがってNANDフラッシュの整理をより詳細に説明する。NAND整理部34は、ブロック管理テーブル28に基づきフリーブロックFBの個数を管理している(ステップS300)。フリーブロックFBの個数が限界値Flmt以下になった場合、ホスト1からのデータ転送要求の間隔が閾値(例えば5秒)より短いか否かを調べることでアクセス頻度が高いか否かを判断し(ステップS310)、アクセス頻度が高いと判断した場合は、ブロック内有効クラスタ数管理テーブル26を参照して有効クラスタ数がより少ないブロックを整理対象ブロックとして選択する(ステップS320)。
つぎに、NAND整理部34は、整理対象ブロックのブロック番号から逆引きクラスタ管理テーブル13にアクセスして、該当ブロック中に記憶されているクラスタデータのアドレスを全て取得する。そして、取得したクラスタアドレスから揮発性クラスタ管理テーブル24及びクラスタ管理テーブル12にアクセスし、取得したクラスタが有効であるか否かを判定し、有効なクラスタのみを整理対象のクラスタデータとする。整理対象のクラスタデータが決定すると、クラスタアドレスからトラックアドレスを算出してトラック管理テーブル23にアクセスし、整理対象のクラスタデータを含むトラック中のすべてのクラスタデータを正引きクラスタ管理テーブル12で管理することとし、トラック管理テーブル23の該当トラックの情報を無効化する。
上記処理を繰り返して整理対象のクラスタデータが1ブロック分集められた場合、集めたクラスタデータをフリーブロックFBへ書き込み、この書き込み内容に応じて正引きクラスタ管理テーブル12及びトラックエントリ管理テーブル25の該当クラスタのエントリを更新する。さらに、クラスタデータの集合先として使用されたフリーブロックFBをアクティブブロックABに変更するようブロック管理テーブル28を更新する。なお、集めたクラスタデータの整理前の記録位置をクラスタ管理テーブル12、トラックエントリ管理テーブル25にアクセスして取得し、取得した記録位置からクラスタデータを以前記憶していたブロックの番号を取得し、ブロックの番号からブロック内有効クラスタ数管理テーブル26にアクセスしてブロック番号に対応するリストエントリ内の有効クラスタ数を更新する。最後に、クラスタデータを集合させたブロックの情報をブロック内有効クラスタ数管理テーブル26、ブロックLRU管理テーブル27、逆引きクラスタ管理テーブル13に反映させる。このように、アクセス頻度が高いときは、整理対象として選択したブロックの有効データをクラスタ単位で管理してデータの整理を実行する(ステップS330)。
また、ステップS310の判断がNOである場合、NAND整理部34は、後述するステップS360、S370の処理を実行する。
一方、ステップS300の判断がNOである場合、NAND整理部34は、フリーブロックFBの個数が目標値Fref以下になったか否かを判定し(ステップS340)、フリーブロックFBの個数が目標値Fref以下になっている場合、つぎにホスト1からのデータ転送要求の間隔が閾値(例えば5秒)より短いか否かを調べることでアクセス頻度が低いか否かを判断し(ステップS350)、アクセス頻度が低いと判断した場合は、ブロックLRU管理テーブル27を参照して最も古くに書き込みを実行したブロックを整理対象候補ブロックとして選択する(ステップS360)。
そして、NAND整理部34は、選択した整理対象候補ブロックの番号を元にブロック内有効クラスタ数管理テーブル26にアクセスして有効クラスタ数を取得し、取得した有効クラスタ数を閾値Dnと比較し、有効クラスタ数が閾値Dn以下の場合は、この整理対象候補ブロックを整理対象ブロックとして決定する。有効クラスタ数が閾値Dnより多い場合は、再度、ブロックLRU管理テーブル27を参照して2番目に古くに書き込みを実行したブロックを整理対象候補ブロックとして選択し、選択した整理対象候補ブロックの有効クラスタ数を同様にして取得し、前述と同様の処理を実行する。このようにして、整理対象ブロックを決定できるまで、同様の処理を繰り返す。
このようにして整理対象のブロックを選択したら、NAND整理部34は、整理対象ブロックのブロック番号から逆引きクラスタ管理テーブル13にアクセスして、整理対象ブロック中に記憶されているクラスタデータのアドレスを全て取得する。そして、取得したクラスタアドレスから揮発性クラスタ管理テーブル24及び正引きクラスタ管理テーブル12にアクセスし、取得したクラスタが有効であるか否かを判定し、有効なクラスタのみを整理対象のクラスタデータとする。
整理対象のクラスタデータが決定すると、クラスタアドレスからトラックアドレスを算出し、算出したトラックアドレスに対応するトラックデータを整理対象として決定する。整理対象ブロック中に記憶されている各クラスタデータに関し、前記同様の処理を実行して、整理対象トラックを1ブロック分(本実施形態では4個)揃える。そして、これら4個の整理対象トラックを構成する有効クラスタの記憶位置を揮発性クラスタ管理テーブル24、正引きクラスタ管理テーブル12及びトラック管理テーブル23にアクセスして取得し、トラックを構成する有効クラスタを集めてトラックデータを1つずつ構成した後、各トラックデータをフリーブロックFBに書き込む。
この書き込み内容に応じてトラック管理テーブル23、正引きクラスタ管理テーブル12及びトラックエントリ管理テーブル25の該当エントリを更新する。さらに、トラックデータの集合先として使用されたフリーブロックFBをアクティブブロックABに変更するようブロック管理テーブル28を更新する。なお、前述と同様、集めたトラックデータ及びクラスタデータの整理前の記録位置をトラック管理テーブル23、正引きクラスタ管理テーブル12、トラックエントリ管理テーブル25にアクセスして取得し、取得した記録位置からトラックデータ及びクラスタデータを以前記憶していたブロックの番号を取得し、ブロックの番号からブロック内有効クラスタ数管理テーブル26にアクセスしてブロック番号に対応するリストエントリ内の有効クラスタ数を更新する。最後に、トラックデータ及びクラスタデータを集合させたブロックの情報をブロック内有効クラスタ数管理テーブル26、ブロックLRU管理テーブル27、逆引きクラスタ管理テーブル13に反映させる。
なお、ステップS360において、データ整理の対象ブロックを選択する際に、書き込み時期が閾値k1より新しいブロックのなかで有効データ量が少ないブロックを選択し、かつ書き込み時期が閾値k2よりも古いブロックの中で有効データ量が少ないブロックを選択することによって、書き込み時期が新しいデータ同士をまとめてトラック管理し、書き込み時期が古いデータ同士をまとめてトラック管理するようにしてもよい。この方法を採用すると、書き込み時期が異なるトラックが同一ブロックに集まることを防止することができるので、無駄な書き込みを防止することが可能になる。
なお、WC21からNANDフラッシュ10へのデータ追い出し時、またはNANDフラッシュ10内でのデータ整理時に、どの管理テーブルを更新すれば良いかは、上述した管理テーブル群の構造や、どの時点でDRAM20上の管理テーブルをNANDフラッシュ10にバックアップするか等に依存するものであり、求める性能や処理の複雑さに応じて適宜設定すべきものである。例えば、NANDフラッシュ10内でのデータ整理時に、揮発性クラスタ管理テーブル24の更新のみに留める方法や、デフラグ時にトラックデータを生成した際に、トラック管理テーブル23のみを更新する方法等が考えられる。
このように、アクセス頻度が低いときは、整理対象として選択したブロックの有効データをトラック単位で管理してデータの整理を実行する(ステップS370)。整理中にフリーブロックFBが足りなくなった場合には、アクセス頻度が高いと判断したときと同様の処理(ステップS320、S330)を行ってフリーブロックFBを生成する。なお、アクセス頻度が低いときの整理中に、所定の条件を満たす場合には、アクセス頻度が低いときの整理を終了してもよい。所定の条件としては、例えば、アクセス頻度、断片化クラスタの存在しないトラック数、及びフリーブロックFB数等を基準とすれば良い。アクセス頻度が低いときの整理を途中で中断することで、必要以上にNANDフラッシュの書き換えを行わないようにすることができる。
このように第1の実施形態では、NANDフラッシュ10のDS40の管理単位として、大きな管理単位であるトラックと小さな管理単位であるクラスタの2つを持ち、クラスタを管理する正引きクラスタ管理テーブル12をNANDフラッシュ10で更新管理し、トラックを管理するトラック管理テーブル23をDRAM20で更新管理し、ホストからのアクセスパターンに応じて内部でのデータ配置及び管理情報を適応することとしたので、大容量の揮発性半導体メモリを採用することなく、ランダムライト性能と、ランダムリード性能との両者を向上させる管理方式を実現することが可能となる。また、NANDフラッシュ10上の正引きクラスタ管理テーブル12のキャッシュとして、DRAM20上に揮発性クラスタ管理テーブル24を持つようにしたので、管理情報へのアクセス性能がより向上する。
さらに、本実施形態では、ホスト1からのアクセス頻度が高いときは、小さな管理単位であるクラスタを使用してデータの整理を行うこととしたので、ランダムライト性能を向上させることができ、ホスト1からのアクセスが少なくなったときには、大きな管理単位であるトラックと小さな管理単位であるクラスタを使用して動作することとしたので、ランダムリード性能を向上させることが可能となる。
さらに、ホスト1からのアクセス頻度が高いときは、データ整理対象ブロックの有効データを全てクラスタ管理して整理を行うこととしたので、より高速にフリーブロックFBを増やすことができる。従ってNANDフラッシュ10のリソース使用量を高速に安定状態に戻すことが可能となり、ランダムライト性能を向上させることが可能となる。
また、ホストからのアクセス頻度が低いときに、断片化した小さな管理単位のクラスタデータを大きな管理単位のトラックデータとしてLBA順に並べ直すといった整理を行うことにしたので、アクセス頻度が低いときに大きな管理単位と小さな管理単位の2つを組み合わせて制御を行う管理構造へ戻すことができ、リード性能を向上させることが可能となる。
(第2の実施形態)
図22は、SSD100の第2の実施形態の構成例を示す機能ブロック図である。第2の実施形態においては、第1の実施形態で採用されている揮発性クラスタ管理テーブル24が存在せず、クラスタ管理をNANDフラッシュ10上のクラスタ管理テーブル12のみで行うようにしている。これにより、DRAM20の容量を更に削減することが可能となる。その他の構成要素、作用は第1の実施形態と同様である。
図22は、SSD100の第2の実施形態の構成例を示す機能ブロック図である。第2の実施形態においては、第1の実施形態で採用されている揮発性クラスタ管理テーブル24が存在せず、クラスタ管理をNANDフラッシュ10上のクラスタ管理テーブル12のみで行うようにしている。これにより、DRAM20の容量を更に削減することが可能となる。その他の構成要素、作用は第1の実施形態と同様である。
(第3の実施形態)
第3の実施形態においては、アクセス頻度が低いときのNANDフラッシュの整理の方法を第1の実施形態とは異ならせている。図23は、第3の実施形態におけるNANDフラッシュの整理手順を示すフローチャートである。図22のフローチャートにおいては、アクセス頻度が低いときの動作手順であるステップS365、ステップS375を第1の実施形態(図21)と異ならせている。
第3の実施形態においては、アクセス頻度が低いときのNANDフラッシュの整理の方法を第1の実施形態とは異ならせている。図23は、第3の実施形態におけるNANDフラッシュの整理手順を示すフローチャートである。図22のフローチャートにおいては、アクセス頻度が低いときの動作手順であるステップS365、ステップS375を第1の実施形態(図21)と異ならせている。
第3の実施形態では、アクセス頻度が低いときには、有効データ量(例えば、有効クラスタ数)がより少ないブロックをデータ整理対象ブロックとして決定し(ステップS365)、決定したブロック中の有効データはすべてクラスタ管理して整理(クラスタマージ、クラスタコンパクション)を実行する(ステップS375)。これにより、第3の実施形態では、アクセス頻度が低いときであっても、NANDフラッシュ10のリソース使用量を早急に安定状態に戻すことが可能となる。
なお、この第3の実施形態では、SSD100がスタンバイ状態へ移行するときや、電源断シーケンスの際に、クラスタ単位からトラック単位への管理単位の変換を伴うNANDフラッシュの整理を行うようにしてもよい。
また、ステップS365において、データ整理の対象ブロックを選択する際に、書き込み時期が閾値k3より新しいブロックのなかで有効データ量が少ないブロックを選択し、かつ書き込み時期が閾値k4よりも古いブロックの中で有効データ量が少ないブロックを選択することによって、書き込み時期が新しいデータ同士をまとめてクラスタ管理し、書き込み時期が古いデータ同士をまとめてクラスタ管理するようにしてもよい。この方法を採用すると、書き込み時期が異なるクラスタが同一ブロックに集まることを防止することができるので、無駄な書き込みを防止することが可能になる。
(第4の実施形態)
図24は、第4の実施形態でのWC21からNANDフラッシュ10への追い出し構造を示すものである。第4の実施形態では、WC21からNANDフラッシュ10への追い出しの際に、管理単位の選択を行うことなく、全てクラスタ単位でクラスタIB41へ追い出すようにする。そして、第4の実施形態では、図21のステップS360、S370に示したように、アクセス頻度が低いときのNANDフラッシュの整理によって、クラスタ単位からトラック単位への管理単位の変換を行うこととする。すなわち、アクセス頻度が低いときのNAND整理によって、初めてトラックデータが生成される。
図24は、第4の実施形態でのWC21からNANDフラッシュ10への追い出し構造を示すものである。第4の実施形態では、WC21からNANDフラッシュ10への追い出しの際に、管理単位の選択を行うことなく、全てクラスタ単位でクラスタIB41へ追い出すようにする。そして、第4の実施形態では、図21のステップS360、S370に示したように、アクセス頻度が低いときのNANDフラッシュの整理によって、クラスタ単位からトラック単位への管理単位の変換を行うこととする。すなわち、アクセス頻度が低いときのNAND整理によって、初めてトラックデータが生成される。
(第5の実施形態)
図25は、第5の実施形態のNANDフラッシュ10の記憶領域を機能的に示すものである。第4の実施形態では、DS40の前段に前段ストレージ(FS:Front Storage)50を配置している。FS50は、DS40と同様、クラスタ及びトラック単位でデータが管理されるバッファであり、クラスタIB41またはトラックIB42がデータで満杯になると、クラスタIB41またはトラックIB42がFS50の管理下に移動する。
図25は、第5の実施形態のNANDフラッシュ10の記憶領域を機能的に示すものである。第4の実施形態では、DS40の前段に前段ストレージ(FS:Front Storage)50を配置している。FS50は、DS40と同様、クラスタ及びトラック単位でデータが管理されるバッファであり、クラスタIB41またはトラックIB42がデータで満杯になると、クラスタIB41またはトラックIB42がFS50の管理下に移動する。
FS50は、DS40と同様、データの書き込み順序(LRU)でブロックが管理されるFIFO構造となっている。FS50に存在するクラスタデータまたはトラックデータと同一LBAのクラスタデータまたはトラックデータがFS50に入力された場合、FS50内のクラスタデータまたはトラックデータを無効化するだけでよく、書き換え動作を伴わない。
FS50に入力されたクラスタデータまたはトラックデータと同一LBAのクラスタデータまたはトラックデータについては、ブロック内で無効化し、ブロック内の全クラスタデータまたはトラックデータが無効になったブロックはフリーブロックFBとして解放する。FS50のFIFO管理構造の最後まで到達したブロックは、ホスト1から再書き込みされる可能性の低いデータとみなし、DS40の管理下に移動する。
更新頻度の高いデータはFS50を通過している最中に無効化され、更新頻度の低いデータだけがFS50から溢れていくため、更新頻度の高いデータと低いデータとをFS50で選り分けることができる。NAND整理部34は、FS50をデータ整理対象から除外しており、これにより更新頻度の高いデータと更新頻度が低いデータとが同じブロックに混ざることを防いでいる。すなわち、この第5の実施形態では、ブロックの書き込み時期の新旧でストレージをFS50とDS40に分けており、図12に示したブロックLRU管理テーブル27を用いることによっても第5の実施形態と同様のストレージ管理をなし得る。
(第6の実施形態)
第6の実施形態では、図18などで説明したWC21からNANDフラッシュ10(クラスタIB41またはトラックIB42)への追い出し及び管理単位の切り替え規則についての変形例について述べる。
第6の実施形態では、図18などで説明したWC21からNANDフラッシュ10(クラスタIB41またはトラックIB42)への追い出し及び管理単位の切り替え規則についての変形例について述べる。
図26は、第6の実施形態の第1例を示すフローチャートである。図18では、トラック中のWC21にキャッシュされた更新データ量(あるいは更新データ率)を参照して管理単位の切り替えを行うこととしたが、図26では、同一トラック内におけるWC21及びNANDフラッシュ10上の更新データ量(あるいは更新データ率)を参照することとする。すなわち、図15に示したように、ホスト1からのライト要求によって一旦トラックデータとしてNANDフラッシュ10に書き込まれるかあるいはデフラグ処理によってトラック化されてNANDフラッシュ10に書き込まれた後、同一トラック内のデータがホスト1からのライト要求によって更新された場合、図16あるいは図17に示すように、同一トラック内のデータがWC21上あるいはNANDフラッシュ10上の他のブロックに分散配置(断片化)される。第1例では、WC21上に配置された同一トラック内のデータ量とNANDフラッシュ10上に断片化されて分散配置された同一トラック内のデータ量の合計を参照して管理単位の切り替えを行う。
図26においては、図18のステップS220をステップS221に変更している。すなわち、図26において、WC21に空き領域がない場合は(ステップS210:YES)、書き込み制御部32は、同一トラックに含まれるデータの更新データ量をWC21及びNANDフラッシュ10上でトラック毎に計算し、この計算した更新データ量を閾値DC2と比較し(ステップS221)、更新データ量が閾値DC2以上のトラックに含まれるデータに関してはトラックデータとしてトラックIB42に追い出し(ステップS230)、更新データが閾値DC2未満のトラックに含まれるデータに関してはクラスタデータとしてクラスタIB41に追い出す(ステップS240)。
WC21上のトラック中の更新データ量を計算する際は、前述したように、図5に示したWC管理テーブル22中の有効なセクタアドレスを用いてトラック中の更新データ量を計算することとしてもよいし、トラック中の更新データ量をトラック毎に逐次計算してDRAM20に管理情報として記憶しておき、この記憶した管理情報を使用するようにしてもよい。また、NANDフラッシュ10上のトラック中の更新データ量を計算する際は、図6に示したトラック管理テーブル23の断片化数を用いる。
すなわち、トラック中の更新データ量(更新データ率)が多いと言うことは、データが散らばっている可能性が高く、リード性能が低下してくる可能性が高いため、トラックにまとめてデータをNANDフラッシュ10に追い出すことにより、リード性能を向上させる。
図27は、第6の実施形態の第2例を示すフローチャートである。図27では、WC21にキャッシュされているトラック数(異なるトラックアドレスの個数)を参照して管理単位の切り替えを行う。図27においては、図18のステップS220をステップS222に変更し、ステップS222のYes,Noを図18のステップS220と逆にしている。図27において、WC21に空き領域がない場合は(ステップS210:YES)、書き込み制御部32は、WC21上のトラック数を計算し、この計算したトラック数を閾値DC3と比較し(ステップS222)、WC21上のトラック数が閾値DC3以上存在している状況下では、WC21上のデータをクラスタデータとしてクラスタIB41に追い出し(ステップS240)、WC21上のトラック数が閾値DC3未満存在している状況下では、WC21上のデータをトラックデータとしてトラックIB42に追い出す(ステップS230)。
WC21上のトラック数を導出する際は、前述したように、図5に示したWC管理テーブル22中の有効なセクタアドレスを用いてトラック数を計算することとしてもよいし、WC21上のトラック数を逐次計算してDRAM20に管理情報として記憶しておき、この記憶した管理情報を使用するようにしてもよい。また、WC管理テーブル22として、WC21上に記憶されたデータをトラック単位に管理するテーブルを採用する場合は、WC管理テーブル22中の有効なトラックエントリ数を計数すればよい。
WC21からデータを追い出す場合に、トラック個数が多い場合は、トラック書き込みによるリード/ライト量が多くなり、かつランダムパターンの書き込みであることが予測される。このため、WC21からデータを追い出す場合に、トラック個数が多い場合は、ライト性能を低下させないために、クラスタ書き込みを実行させる。
図28は、第6の実施形態の第3例を示すフローチャートである。図28では、NANDフラッシュ10において、クラスタ管理しているトラックの個数を参照して管理単位の切り替えを行う。図28においては、図18のステップS220をステップS223に変更している。図30において、WC21に空き領域がない場合は(ステップS210:YES)、書き込み制御部32は、NANDフラッシュ10上において、クラスタ管理しているトラックの個数を計算し、この計算したトラック数を閾値DC4と比較し(ステップS223)、クラスタ管理しているトラックの個数が閾値DC3以上の場合は、トラックデータとしてトラックIB42に追い出し(ステップS230)、クラスタ管理しているトラックの個数が閾値DC3未満の場合は、クラスタデータとしてクラスタIB41に追い出す(ステップS240)。
クラスタ管理しているトラックとは、図6に示すトラック管理テーブル23にエントリされている有効トラックであって、かつトラック管理テーブル23上にトラックアドレスに対応して記憶位置が登録されているブロックとは異なるブロックに同一トラック内のクラスタが存在しているトラックのことをいう。したがって、NANDフラッシュ10上のクラスタ管理しているトラックの個数を計算する際は、例えば、図6に示したトラック管理テーブル23において、トラック有効/無効フラグが有効であって、断片化フラグが断片化有りを示しているトラックの個数を計数する。なお、クラスタ管理しているトラックの個数を管理情報として記憶しておき、この記憶した管理情報を使用するようにしてもよい。
NANDフラッシュ10の整理(クラスタマージ)などにより、トラック管理しているトラックが減少した場合、別言すればクラスタ管理しているトラックが増加した場合には、リード性能が低下している可能性があるため、WC21からデータを追い出す際、トラック管理しているトラックが減少している場合は、WC21にデータが存在するトラックについては、トラック追い出しを実行する。
図29は、第6の実施形態の第4例を示すフローチャートである。図29では、ホスト1からのコマンド発行頻度を参照する。図29においては、図18のステップS220をステップS224に変更している。図29において、WC21に空き領域がない場合は(ステップS210:YES)、書き込み制御部32は、ホスト1からのコマンド発行頻度を導出する。コマンド発行頻度としては、例えばホスト1からのデータ転送要求間隔を導出する。そして、導出したデータ転送要求間隔を閾値時間DC5と比較し(ステップS223)、ホスト1からのデータ転送要求間隔が閾値時間DC5以上ある場合は、トラックデータとして追い出し(ステップS230)、ホスト1からのデータ転送要求間隔が閾値DC5未満である場合は、クラスタデータとして追い出す(ステップS240)。すなわち、ホスト1からのコマンド発行頻度が低い場合にはトラックとして追い出し、高い場合にはクラスタとして追い出す。
ホスト1のコマンド発行頻度が低い場合には、トラックとして書き込むための時間増加が与える影響が少ないのでリード性能の低下を防ぐためにトラックとして追い出し、逆に頻度が高い場合には、トラック化による時間増加が性能低下につながるので、クラスタとして書き込みを実行する。なお、コマンド発行頻度をホスト1とSSD100との間の転送レートによって判断するようにしてもよい。すなわち、ホスト1とSSD100との間の転送レートが閾値以下の場合はトラックデータとして追い出し、ホスト1とSSD100との間の転送レートが閾値より大きい場合は、クラスタデータとして追い出すようにしてもよい。
また、管理情報がDRAM20上に存在するデータはクラスタデータとして追い出し、管理情報がNANDフラッシュ10上に存在するデータはトラックデータとして追い出すようにしてもよい。
(第7の実施形態)
第7の実施形態では、デフラグを行う際のデータ整理対象ブロックの選択の仕方についての他の例を説明する。第1の実施形態では、アクセス頻度が低い場合に、NANDフラッシュ10のリソース使用量が目標値Frefを超えた場合に、クラスタをLBA順に集めてトラック化するデフラグを発動するようにしており、さらにデフラグを行う際には、書き込み時期が古いブロックの中で、有効データ量が少ないブロックを整理対象ブロックとして選択することとしているが、デフラグを行う際、書き込み時期が閾値より古いブロックのデータを整理対象ブロックとして選択することにしてもよいし、あるいは書き込み時期がより古いデータから整理対象ブロックを選択することにしてもよい。
第7の実施形態では、デフラグを行う際のデータ整理対象ブロックの選択の仕方についての他の例を説明する。第1の実施形態では、アクセス頻度が低い場合に、NANDフラッシュ10のリソース使用量が目標値Frefを超えた場合に、クラスタをLBA順に集めてトラック化するデフラグを発動するようにしており、さらにデフラグを行う際には、書き込み時期が古いブロックの中で、有効データ量が少ないブロックを整理対象ブロックとして選択することとしているが、デフラグを行う際、書き込み時期が閾値より古いブロックのデータを整理対象ブロックとして選択することにしてもよいし、あるいは書き込み時期がより古いデータから整理対象ブロックを選択することにしてもよい。
また、デフラグを行う際、有効データ量が閾値より少ないブロックを整理対象ブロックとして選択することにしてもよいし、あるいは有効データ量がより少ないブロックから整理対象ブロックを選択することにしてもよい。
また、デフラグを行う際、読み出しアクセスが多いブロックを整理対象ブロックとして選択することにしてもよい。すなわち、図13に示したブロック管理テーブル28を用いてブロック毎の読み出し回数(または読み出しデータ量)をカウントすることとし、デフラグを行う際には、ブロック管理テーブル28を用いて読み出し回数(または読み出しデータ量)が閾値より多いブロックを選択し、選択したブロックを整理対象ブロックとする。この手法では、頻繁に読み出しが発生するブロックを選択して、そのブロック内のデータをトラック化することで、リード速度を上昇させる。デフラグが終了すると、ブロック管理テーブル28の読み出し回数は、零にリセットされる。
また、デフラグを行う際、更新データ量が閾値よりも多いトラックに所属するクラスタを集めるようにしてもよい。すなわち、更新データ量が閾値よりも多いトラックに所属するクラスタを含むブロックをデフラグの対象ブロックとして選択し、選択したデフラグ対象ブロック内のクラスタを集めてトラック化する。例えば、図6に示したトラック管理テーブル23の断片化数が閾値以上存在するトラックを選択することで、更新データ量が多いトラックを選択する。断片化数が多いということは、トラック化された後に、他のブロックにクラスタとして離散されているクラスタ数が多いということであるので、更新データ量が多いトラックを判定するための目安となる。この手法では、各ブロックにクラスタが離散されている可能性の高いトラックのクラスタを集めてトラック化するので、リード速度を上昇させることが可能である。
また、デフラグを行う際、読み出しアクセスが多いトラックに所属するクラスタを集めるようにしてもよい。すなわち、読み出しアクセスが閾値よりも多いトラックに所属するクラスタを含むブロックをデフラグの対象ブロックとして選択し、選択したデフラグ対象ブロック内のクラスタを集めてトラック化する。例えば、図6に示したトラック管理テーブル23の読み出しデータ量(読み出し回数)が閾値以上存在するトラックを選択することで、読み出しアクセスが多いトラックを選択する。この手法では、頻繁に読み出しが発生するトラックを選択して、そのトラックに所属するクラスタをトラック化することで、リード速度を上昇させる。デフラグが終了すると、トラック管理テーブル23の読み出しデータ量は、零にリセットされる。
(第8の実施形態)
つぎに、デフラグの発動条件についての他の例について述べる。第1の実施形態では、アクセス頻度が低い場合に、NANDフラッシュ10のリソース使用量が目標値Frefを超えた場合に、クラスタをLBA順に集めてトラック化するデフラグを発動するようにしているが、第8の実施形態では、NANDフラッシュ10のリソース使用量が目標値Frefを超えた場合に、クラスタ管理するトラック数が閾値以上になったときにデフラグを発動させることとする。クラスタ管理するトラック数は、第6の実施形態で説明したように、図6に示したトラック管理テーブル23において、トラック有効/無効フラグが有効であって、断片化がありのトラックの個数を計数することによって求める。
つぎに、デフラグの発動条件についての他の例について述べる。第1の実施形態では、アクセス頻度が低い場合に、NANDフラッシュ10のリソース使用量が目標値Frefを超えた場合に、クラスタをLBA順に集めてトラック化するデフラグを発動するようにしているが、第8の実施形態では、NANDフラッシュ10のリソース使用量が目標値Frefを超えた場合に、クラスタ管理するトラック数が閾値以上になったときにデフラグを発動させることとする。クラスタ管理するトラック数は、第6の実施形態で説明したように、図6に示したトラック管理テーブル23において、トラック有効/無効フラグが有効であって、断片化がありのトラックの個数を計数することによって求める。
この第8の実施形態においては、トラック管理しているトラックが減少した場合、別言すればクラスタ管理しているトラックが増加した場合に、デフラグ発動条件が成立したとしてデフラグを行うようにしており、これによりトラック管理するトラックが増加され、リード速度を向上させることが可能となる。また、この第8の実施形態の手法を用いてデフラグの発動をトリガした場合においても、先の第1の実施形態あるいは第7の実施形態で説明したデフラグ対象ブロックあるいはデフラグ対象データの選択手法を採用するようにしてもよい。すなわち、デフラグを行う際は、
・書き込み時期が閾値より古いブロックのデータをデフラグ対象ブロックとして選択する
・有効データ量が閾値より少ないブロックをデフラグ対象ブロックとして選択する
・書き込み時期が閾値より古く、有効データ量が閾値より少ないブロックをデフラグ対象ブロックとして選択する
・読み出しアクセスが閾値より多いブロックを整理対象ブロックとして選択する
・更新データ量が閾値よりも多いトラックに所属するクラスタを集めてデフラグする
・読み出しアクセスが多いトラックに所属するクラスタを集めてデフラグする
の少なくとも1つを採用するようにしてもよい。
・書き込み時期が閾値より古いブロックのデータをデフラグ対象ブロックとして選択する
・有効データ量が閾値より少ないブロックをデフラグ対象ブロックとして選択する
・書き込み時期が閾値より古く、有効データ量が閾値より少ないブロックをデフラグ対象ブロックとして選択する
・読み出しアクセスが閾値より多いブロックを整理対象ブロックとして選択する
・更新データ量が閾値よりも多いトラックに所属するクラスタを集めてデフラグする
・読み出しアクセスが多いトラックに所属するクラスタを集めてデフラグする
の少なくとも1つを採用するようにしてもよい。
(第9の実施形態)
第9の実施形態では、クラスタコンパクションについての他の例について述べる。第1の実施形態では、ホスト1からのアクセス頻度が高いときに、有効データ量が閾値より少ないブロックを整理対象ブロックとして選択してクラスタコンパクションを行うようにしたが、アクセス頻度が高いときに、書き込み時期が閾値より古く、有効データ量が閾値より少ないブロックをクラスタコンパクションの対象ブロックとして選択するようにしてもよい。書き込み時期が閾値より古いブロックを選択する際、図12に示したブロックLRU管理テーブル27を用いるようにしてもよいし、図25に示したように、ブロックの書き込み時期の新旧でストレージをFS50とDS40に分ける手法の何れを採用しても良い。
第9の実施形態では、クラスタコンパクションについての他の例について述べる。第1の実施形態では、ホスト1からのアクセス頻度が高いときに、有効データ量が閾値より少ないブロックを整理対象ブロックとして選択してクラスタコンパクションを行うようにしたが、アクセス頻度が高いときに、書き込み時期が閾値より古く、有効データ量が閾値より少ないブロックをクラスタコンパクションの対象ブロックとして選択するようにしてもよい。書き込み時期が閾値より古いブロックを選択する際、図12に示したブロックLRU管理テーブル27を用いるようにしてもよいし、図25に示したように、ブロックの書き込み時期の新旧でストレージをFS50とDS40に分ける手法の何れを採用しても良い。
また、第1の実施形態では、クラスタコンパクションは、アクセス頻度が低いときに、デフラグなどのNANDフラッシュ10の整理を行ってフリーブロックFBの個数が閾値より少なくなった際に実行されるようにしているが、どのような状況下であってもフリーブロックFBの個数が閾値より少なくなった際に、クラスタコンパクションが実行されるようにしてもよい。また、第1の実施形態では、トラックコンパクション、デフラグの対象とならなかった有効クラスタを1つのフリーブロックFBに集めることでクラスタコンパクションを実行しているが、有効データ量が閾値より少ないブロックをクラスタコンパクションの対象ブロックとして選択するようにしてもよく、さらには、書き込み時期が閾値より古く、有効データ量が閾値より少ないブロックをクラスタコンパクションの対象ブロックとして選択するようにしてもよい。
さらに、ホスト1からのアクセス頻度が低いときに、書き込みデータ量が閾値より多いトラックのデータを1つのブロックに集めるトラックの解体(クラスタマージ)あるいはクラスタコンパクションを実行するようにしてもよい。この手法では、例えば、図6に示したトラック管理テーブル23の書き込みデータ量(書き込み回数)が閾値以上存在するトラックを選択することで、書き込みアクセスが多いトラックを選択する。この手法では、書き込みアクセスが多いトラックを1つのブロックに集めることで、書き込み速度を向上させる。
(第10の実施形態)
第10の実施形態では、SSD100の温度をNANDフラッシュ10の整理の発動パラメータとしている。SSD100は、温度センサ90(図1、図22参照)を搭載しており、温度センサ90の出力に基づき環境温度が閾値未満のときには、第7または第8の実施形態で説明したデフラグを実行する。さらに、環境温度が閾値以下のとき、書き込みデータ量が閾値より多いトラックのデータを1つのブロックに集めるトラックの解体(クラスタマージ)を行うようにしてもよい。温度センサはコントローラ30に隣接して設けてもよいし、NANDフラッシュ10に隣接して設けてもよい。NANDフラッシュ10、DRAM20、及びコントローラ30が実装されるSSD100の基板上であれば設置場所は自由であり、複数の温度センサを設けてもよい。また、SSD100自体は温度センサを有さず、ホスト1から環境温度を含む情報が通知される構成で合ってもよい。
第10の実施形態では、SSD100の温度をNANDフラッシュ10の整理の発動パラメータとしている。SSD100は、温度センサ90(図1、図22参照)を搭載しており、温度センサ90の出力に基づき環境温度が閾値未満のときには、第7または第8の実施形態で説明したデフラグを実行する。さらに、環境温度が閾値以下のとき、書き込みデータ量が閾値より多いトラックのデータを1つのブロックに集めるトラックの解体(クラスタマージ)を行うようにしてもよい。温度センサはコントローラ30に隣接して設けてもよいし、NANDフラッシュ10に隣接して設けてもよい。NANDフラッシュ10、DRAM20、及びコントローラ30が実装されるSSD100の基板上であれば設置場所は自由であり、複数の温度センサを設けてもよい。また、SSD100自体は温度センサを有さず、ホスト1から環境温度を含む情報が通知される構成で合ってもよい。
一方、環境温度が閾値以上のときには、有効データ量が閾値より少ないブロックを整理対象ブロックとして選択するクラスタコンパクションあるいは書き込み時期が閾値より古く、有効データ量が閾値より少ないブロックを整理対象ブロックとして選択するクラスタコンパクションを実行する。クラスタコンパクションは、デフラグあるいはトラックの解体(クラスタマージ)に比べ、NANDフラッシュ10に対するリード/ライトアクセスが少なくて済み、消費電力量、温度上昇も少ないので、環境温度が高めのときに実行させる。これに対し、デフラグあるいはトラックの解体(クラスタマージ)は、環境温度が低めのときに実行させる。
(第11の実施形態)
第11の実施形態では、SSD100の消費電力量をNANDフラッシュ10の整理の発動パラメータとしている。SSD100の消費電力量を閾値以上にしてもよい状況下では、消費電力量が比較的大きなデフラグあるいはトラックの解体(クラスタマージ)を実行させ、SSD100の消費電力量を閾値以上にしてはいけない状況下では、消費電力量が比較的小さなクラスタコンパクションを実行させる。例えば、ホスト1は自身の電源能力に従い、許容できる消費電力量をSSD100に通知する。コントローラ30は当該通知を受け取り、通知された許容消費電力量が閾値以上であるか否かを判断すればよい。
第11の実施形態では、SSD100の消費電力量をNANDフラッシュ10の整理の発動パラメータとしている。SSD100の消費電力量を閾値以上にしてもよい状況下では、消費電力量が比較的大きなデフラグあるいはトラックの解体(クラスタマージ)を実行させ、SSD100の消費電力量を閾値以上にしてはいけない状況下では、消費電力量が比較的小さなクラスタコンパクションを実行させる。例えば、ホスト1は自身の電源能力に従い、許容できる消費電力量をSSD100に通知する。コントローラ30は当該通知を受け取り、通知された許容消費電力量が閾値以上であるか否かを判断すればよい。
(第12の実施形態)
データ整理の対象ブロックを次のような手法を用いて決定してもよい。
・書き込み時期が閾値よりも新しいブロックの中で有効データ量が閾値よりも少ないブロックをデータ整理対象として決定する。この方式では、書き込み時期が同じ(新しい)時期のデータを集めて1つのブロックに書き直すので、書き込み時期が離れたデータが1つのブロックに混在することが防止される。
・ブロック内で各クラスタが所属するトラックの個数が多いブロックをデータ整理対象として決定する。
・ブロック内で各クラスタが所属するトラックの個数が少ないブロックをデータ整理対象として決定する。
・書き込みアクセスが多いブロックを整理対象と決定する。この場合は、整理対象としたブロックの有効データをクラスタ管理してコンパクションまたはクラスタマージする。
データ整理の対象ブロックを次のような手法を用いて決定してもよい。
・書き込み時期が閾値よりも新しいブロックの中で有効データ量が閾値よりも少ないブロックをデータ整理対象として決定する。この方式では、書き込み時期が同じ(新しい)時期のデータを集めて1つのブロックに書き直すので、書き込み時期が離れたデータが1つのブロックに混在することが防止される。
・ブロック内で各クラスタが所属するトラックの個数が多いブロックをデータ整理対象として決定する。
・ブロック内で各クラスタが所属するトラックの個数が少ないブロックをデータ整理対象として決定する。
・書き込みアクセスが多いブロックを整理対象と決定する。この場合は、整理対象としたブロックの有効データをクラスタ管理してコンパクションまたはクラスタマージする。
また、上記実施形態では、整理対象ブロックを決定する際に、ブロック内の有効データ量として有効クラスタ数を参照するようにしたが、ブロックの有効クラスタの比率(割合)、で整理対象ブロックを選択するようにしてもよい。ブロックの有効クラスタの比率は、例えば、有効クラスタ量(数)/書き込み可能なクラスタ量(数)によって求める。また、WC21からの追い出しの際に、トラック内の更新データ量あるいはトラック内の有効データ量を参照するようにしたが、トラック内の更新データ率あるいはトラック内の有効データ率を参照するようにしてもよい。同様に、上記実施の形態において、データ量、データ数を参照している判定に関しては、データ率を参照する判定に置き換えても良い。
さらに、NANDフラッシュ10上の管理テーブルが記憶されたブロックを整理対象に含めるようにしてもよい。また、クラスタ管理されるブロックをSLC(Single Level Cell)で記録し、トラック管理されるブロックをMLC(Multi Level Cell)で記録するようにしてもよい。SLCとは、1つのメモリセルに1ビットを記録する方式を示し、MLCとは、1つのメモリセルに2ビット以上を記録する方式を示す。MLCにおける一部ビットのみを使用して、疑似的なSLC方式で管理することも可能である。また、管理情報についてはSLCで記録するようにしてもよい。
(第13の実施形態)
図30は、SSD100を搭載したパーソナルコンピュータ1200の一例を示す斜視図である。パーソナルコンピュータ1200は、本体1201、及び表示ユニット1202を備えている。表示ユニット1202は、ディスプレイハウジング1203と、このディスプレイハウジング1203に収容された表示装置1204とを備えている。
図30は、SSD100を搭載したパーソナルコンピュータ1200の一例を示す斜視図である。パーソナルコンピュータ1200は、本体1201、及び表示ユニット1202を備えている。表示ユニット1202は、ディスプレイハウジング1203と、このディスプレイハウジング1203に収容された表示装置1204とを備えている。
本体1201は、筐体1205と、キーボード1206と、ポインティングデバイスであるタッチパッド1207とを備えている。筐体1205内部には、メイン回路基板、ODD(Optical Disk Device)ユニット、カードスロット、及びSSD100等が収容されている。
カードスロットは、筐体1205の周壁に隣接して設けられている。周壁には、カードスロットに対向する開口部1208が設けられている。ユーザは、この開口部1208を通じて筐体1205の外部から追加デバイスをカードスロットに挿抜することが可能である。
SSD100は、従来のHDDの置き換えとして、パーソナルコンピュータ1200内部に実装された状態として使用してもよいし、パーソナルコンピュータ1200が備えるカードスロットに挿入した状態で、追加デバイスとして使用してもよい。
図31は、SSDを搭載したパーソナルコンピュータのシステム構成例を示している。パーソナルコンピュータ1200は、CPU1301、ノースブリッジ1302、主メモリ1303、ビデオコントローラ1304、オーディオコントローラ1305、サウスブリッジ1309、BIOS−ROM1310、SSD100、ODDユニット1311、エンベデッドコントローラ/キーボードコントローラIC(EC/KBC)1312、及びネットワークコントローラ1313等を備えている。
CPU1301は、パーソナルコンピュータ1200の動作を制御するために設けられたプロセッサであり、SSD100から主メモリ1303にロードされるオペレーティングシステム(OS)を実行する。更に、ODDユニット1311が、装填された光ディスクに対して読出し処理及び書込み処理の少なくとも1つの処理の実行を可能にした場合に、CPU1301は、それらの処理の実行をする。
また、CPU1301は、BIOS−ROM1310に格納されたシステムBIOS(Basic Input Output System)も実行する。尚、システムBIOSは、パーソナルコンピュータ1200内のハードウェア制御のためのプログラムである。
ノースブリッジ1302は、CPU1301のローカルバスとサウスブリッジ1309との間を接続するブリッジデバイスである。ノースブリッジ1302には、主メモリ1303をアクセス制御するメモリコントローラも内蔵されている。
また、ノースブリッジ1302は、AGP(Accelerated Graphics Port)バス等を介してビデオコントローラ1304との通信、及びオーディオコントローラ1305との通信を実行する機能も有している。
主メモリ1303は、プログラムやデータを一時的に記憶し、CPU1301のワークエリアとして機能する。主メモリ1303は、例えばRAMから構成される。
ビデオコントローラ1304は、パーソナルコンピュータ1200のディスプレイモニタとして使用される表示ユニット1202を制御するビデオ再生コントローラである。
オーディオコントローラ1305は、パーソナルコンピュータ1200のスピーカ1306を制御するオーディオ再生コントローラである。
サウスブリッジ1309は、LPC(Low Pin Count)バス1314上の各デバイス、及びPCI(Peripheral Component Interconnect)バス1315上の各デバイスを制御する。また、サウスブリッジ1309は、各種ソフトウェア及びデータを格納する記憶装置であるSSD100を、ATAインタフェースを介して制御する。
パーソナルコンピュータ1200は、セクタ単位でSSD100へのアクセスを行う。ATAインタフェースを介して、書き込みコマンド、読出しコマンド、キャッシュフラッシュコマンド等がSSD100に入力される。
また、サウスブリッジ1309は、BIOS−ROM1310、及びODDユニット1311をアクセス制御するための機能も有している。
EC/KBC1312は、電力管理のためのエンベデッドコントローラと、キーボード(KB)1206及びタッチパッド1207を制御するためのキーボードコントローラとが集積された1チップマイクロコンピュータである。
このEC/KBC1312は、ユーザによるパワーボタンの操作に応じてパーソナルコンピュータ1200の電源をON/OFFする機能を有している。ネットワークコントローラ1313は、例えばインターネット等の外部ネットワークとの通信を実行する通信装置である。
なお、SSD100が搭載される情報処理装置として、スチルカメラ、ビデオカメラなどの撮像装置を採用してもよい。このような情報処理装置は、SSD100を搭載することによって、ランダムリード及びランダムライト性能を向上させることが可能となる。従って、情報処理装置を使用するユーザの利便性が向上する。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1 ホスト 2 ホストI/F 10 NANDフラッシュ、12 不揮発性クラスタ管理テーブル(正引き)、13 不揮発性クラスタ管理テーブル(逆引き)、20 DRAM、21 ライトキャッシュ(WC)、22 WC管理テーブル、23 トラック管理テーブル、24 揮発性クラスタ管理テーブル、25 トラックエントリ管理テーブル、26 ブロック内有効クラスタ数管理テーブル、27 ブロックLRU管理テーブル、28 ブロック管理テーブル、30 コントローラ、31 コマンド解釈部、32 書き込み制御部、33 読み出し制御部、34 NAND整理部。
Claims (35)
- ランダムアクセス可能な第1の半導体メモリに含まれる第1の記憶部と、
ページ単位で読み出し及び書き込みが行われ、前記ページより大きなブロック単位で消去が行われる不揮発性の第2の半導体メモリに含まれる第2の記憶部と、
前記第2の半導体メモリの記憶領域を、ブロック単位で前記第2の記憶部に割り当てるコントローラと、を備え、
前記コントローラは、
前記第2の記憶部のデータを第1の管理単位で管理するための第1の管理テーブルを前記第2の半導体メモリに記録し、
前記第2の記憶部のデータを前記第1の管理単位より大きな第2の管理単位で管理するための第2の管理テーブルを前記第1の半導体メモリに記録し、
前記第1の記憶部に書き込まれたセクタ単位の複数のデータを第1の管理単位のデータ及び第2の管理単位のデータの何れかとして前記第2の記憶部に追い出すデータ追い出し処理を実行し、前記第1の管理テーブル及び前記第2の管理テーブルの少なくとも一方を更新し、
前記第2の記憶部のリソース使用量が閾値を超えた場合、前記第2の記憶部の有効データを集めて前記第2の記憶部の他のブロックに書き直すデータ整理処理を実行し、前記第1の管理テーブル及び前記第2の管理テーブルの少なくとも一方を更新する、
ことを特徴とする半導体記憶装置。 - 前記コントローラは、
前記第1の管理テーブルの少なくとも一部のキャッシュである第3の管理テーブルを前記第1の半導体メモリに記録し、
前記第2の記憶部へのデータ追い出し処理に応じて、前記第1の管理テーブル、前記第2の管理テーブル、及び前記第3の管理テーブルの少なくとも一つを更新し、
前記第2の記憶部でのデータ整理処理に応じて、前記第1の管理テーブル、前記第2の管理テーブル、及び前記第3の管理テーブルの少なくとも一つを更新する、
ことを特徴とする請求項1に記載の半導体記憶装置。 - 前記コントローラは、前記データ追い出し処理において、
前記第1の記憶部において前記第2の管理単位のアドレスに含まれるデータの個数が所定の閾値以上である場合は、前記第1の記憶部に書き込まれたセクタ単位のデータを前記第2の管理単位のデータとして前記第2の記憶部に追い出し、
前記データの個数が前記所定の閾値未満である場合は、前記第1の記憶部に書き込まれたセクタ単位のデータを前記第1の管理単位のデータとして前記第2の記憶部に追い出す、
ことを特徴とする請求項1または請求項2に記載の半導体記憶装置。 - 前記コントローラは、前記データ追い出し処理において、
前記第2の管理単位のアドレスに含まれ、かつ、前記第2の管理単位のデータとして前記第2の記憶部に書き込んだ後で前記第1及び第2の記憶部に書き込んだデータの個数が所定の閾値以上である場合は、前記第1の記憶部に書き込まれたセクタ単位のデータを前記第2の管理単位のデータとして前記第2の記憶部に追い出し、
前記データの個数が前記所定の閾値未満である場合は、前記第1の記憶部に書き込まれたセクタ単位のデータを前記第1の管理単位のデータとして前記第2の記憶部に追い出す、
ことを特徴とする請求項1または請求項2に記載の半導体記憶装置。 - 前記コントローラは、前記データ追い出し処理において、
前記第1の記憶部に保持されるデータが所属する前記第2の管理単位のアドレスの個数が所定の閾値以上である場合は、前記第1の記憶部に書き込まれたセクタ単位のデータを前記第1の管理単位のデータとして前記第2の記憶部に追い出し、
前記アドレスの個数が前記所定の閾値未満である場合は、前記第2の管理単位のデータとして前記第2の記憶部に追い出す、
ことを特徴とする請求項1または請求項2に記載の半導体記憶装置。 - 前記コントローラは、前記データ追い出し処理において、
前記第2の管理単位のデータとして前記第2の記憶部に書き込んだ後で前記第1及び第2の記憶部にデータを書き込んだ前記第2の管理単位のアドレスの個数が所定の閾値以上である場合は、前記第1の記憶部に書き込まれたセクタ単位のデータを前記第2の管理単位のデータとして前記第2の記憶部に追い出し、
前記アドレスの個数が所定の閾値未満である場合は、前記第1の管理単位のデータとして前記第2の記憶部に追い出す、
ことを特徴とする請求項1または請求項2に記載の半導体記憶装置。 - 前記コントローラは、前記データ追い出し処理において、
ホスト装置からのアクセス頻度が閾値以上である場合は、前記第1の記憶部に書き込まれたセクタ単位のデータを前記第1の管理単位のデータとして前記第2の記憶部に追い出し、
前記アクセス頻度が閾値未満である場合は、前記第2の管理単位のデータとして前記第2の記憶部に追い出す、
ことを特徴とする請求項1または請求項2に記載の半導体記憶装置。 - 前記コントローラは、前記データ整理処理において、ホスト装置からのアクセス頻度が閾値未満である場合に、選択した整理対象のブロック内の有効データを集めて、第2の管理単位のデータとして他のブロックに書き直すことを特徴とする請求項1または請求項2に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、書き込み時期が所定の閾値よりも古いブロックから優先して選択することを特徴とする請求項8に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、有効データ数または有効データ率が所定の閾値よりも少ないブロックから優先して選択することを特徴とする請求項8に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、書き込み時期が所定の閾値よりも古く、有効データ数または有効データ率が所定の閾値よりも少ないブロックから優先して選択することを特徴とする請求項8に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、読み出しアクセスが所定の閾値よりも多いブロックから優先して選択することを特徴とする請求項8に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、前記第2の管理単位のデータとして前記第2の記憶部に書き込んだ後で前記第1及び第2の記憶部に書き込んだデータの個数が所定の閾値よりも多い前記第2の管理単位のデータを含むブロックから優先して選択することを特徴とする請求項8に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、読み出しアクセスが所定の閾値よりも多い前記第2の管理単位のデータを含むブロックから優先して選択することを特徴とする請求項8に記載の半導体記憶装置。
- 前記コントローラは、前記データ整理処理において、前記第2の管理単位のデータとして前記第2の記憶部に書き込んだ後で前記第1及び第2の記憶部にデータを書き込んだ第2の管理単位のアドレスの個数が所定の閾値を超えた場合に、選択した整理対象のブロック内の有効データを集めて第2の管理単位のデータとして他のブロックに書き直すことを特徴とする請求項1または請求項2に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、書き込み時期が所定の閾値よりも古いブロックから優先して選択することを特徴とする請求項15に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、有効データ数または有効データ率が所定の閾値よりも少ないブロックから優先して選択することを特徴とする請求項15に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、書き込み時期が所定の閾値よりも古く、有効データ数または有効データ率が所定の閾値よりも少ないブロックから優先して選択することを特徴とする請求項15に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、読み出しアクセスが所定の閾値よりも多いブロックから優先して選択することを特徴とする請求項15に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、前記第2の管理単位のデータとして前記第2の記憶部に書き込んだ後で前記第1及び第2の記憶部に書き込んだデータの個数が所定の閾値よりも多い前記第2の管理単位のデータを含むブロックから優先して選択することを特徴とする請求項15に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、読み出しアクセスが所定の閾値よりも多い前記第2の管理単位のデータを含むブロックから優先して選択することを特徴とする請求項15に記載の半導体記憶装置。
- 前記コントローラは、前記データ整理処理において、
整理対象ブロック内の第2の管理単位のデータ内の有効な第1の管理単位のデータ量または整理対象ブロック内の第2の管理単位のデータ内の有効な第1の管理単位のデータ率が所定の閾値以上である第2の管理単位のデータを集めて、第2の管理単位のデータとして他のブロックに書き直し、
前記書き直しを実行した後、整理対象ブロック内の第1の管理単位のデータを集めて第2の管理単位のデータとして他のブロックに書き直す、
ことを特徴とする請求項8乃至請求項21のいずれか一つに記載の半導体記憶装置。 - 前記コントローラは、ホスト装置からのアクセス頻度が閾値以上である場合に、選択した整理対象のブロック内の有効データを集めて第1の管理単位のデータとして他のブロックに書き直すことを特徴とする請求項1または2に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、有効データ数または有効データ率が所定の閾値よりも少ないブロックから優先して選択することを特徴とする請求項23に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、書き込み時期が所定の閾値よりも古く、有効データ数または有効データ率が所定の閾値よりも少ないブロックから優先して選択することを特徴とする請求項23に記載の半導体記憶装置。
- 前記コントローラは、前記第2の記憶部のリソース使用量としての第2の記憶部の未使用ブロック数が閾値より少なくなったときに、選択した整理対象のブロック内の有効データを集めて第1の管理単位のデータとして他のブロックに書き直すことを特徴とする請求項1または2に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、有効データ数または有効データ率が所定の閾値よりも少ないブロックから優先して選択することを特徴とする請求項26に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、書き込み時期が所定の閾値よりも古く、有効データ数または有効データ率が所定の閾値よりも少ないブロックから優先して選択することを特徴とする請求項26に記載の半導体記憶装置。
- 前記コントローラは、前記データ整理処理において、ホスト装置からのアクセス頻度が閾値未満である場合に、選択した整理対象のブロック内の有効データを集めて第1の管理単位のデータとして他のブロックに書き直すことを特徴とする請求項1または2に記載の半導体記憶装置。
- 前記コントローラは、整理対象のブロックを、書き込みアクセスが閾値より多い第2の管理単位のデータを含むブロックから優先して選択することを特徴とする請求項29に記載の半導体記憶装置。
- 前記コントローラは、ホスト装置からのアクセス頻度が閾値以上である場合において、
整理対象ブロック内の第2の管理単位のデータ内の有効データ数または前記整理対象ブロック内の第2の管理単位のデータ内の有効データ率が閾値未満である場合は、前記整理対象のブロック内の有効データを集めて第1の管理単位のデータとして他のブロックに書き直し、
前記整理対象ブロック内の第2の管理単位のデータ内の有効データ数または前記整理対象ブロック内の第2の管理単位のデータ内の有効データ率が前記閾値以上である場合は、有効データ数または有効データ率が閾値以上存在する第2の管理単位のデータを管理単位の変換を行わずに第2の管理単位のデータとして他のブロックに書き直す、
ことを特徴とする請求項1または2に記載の半導体記憶装置。 - 前記コントローラは、
環境温度が閾値以上のとき、選択した整理対象のブロック内の有効データを集めて第2の管理単位のデータとして他のブロックに書き直し、
前記環境温度が閾値未満のとき、選択した整理対象のブロック内の有効データを集めて第1の管理単位のデータとして他のブロックに書き直す、
ことを特徴とする請求項1または請求項2に記載の半導体記憶装置。 - 前記コントローラは、
前記半導体記憶装置の消費電力量を閾値以上とすべき場合に、選択した整理対象のブロック内の有効データを集めて第2の管理単位のデータとして他のブロックに書き直し、
前記消費電力量を閾値未満とすべき場合に、選択した整理対象のブロック内の有効データを集めて第1の管理単位のデータとして他のブロックに書き直すことを特徴とする請求項1または請求項2に記載の半導体記憶装置。 - 前記コントローラは、
ホスト装置からのアクセス頻度が閾値未満である場合に、書き込み時期が第1の閾値より新しいブロックのなかで有効データ量が少ないブロックを選択し、かつ書き込み時期が第2の閾値よりも古いブロックの中で有効データ量が少ないブロックを選択し、選択したブロック内のデータを第1または第2の管理単位のデータとして他のブロックに書き直すことを特徴とする請求項1または請求項2に記載の半導体記憶装置。 - ランダムアクセス可能な第1の半導体メモリに含まれる第1の記憶部と、
ページ単位で読み出し及び書き込みが行われ、前記ページより大きなブロック単位で消去が行われる不揮発性の第2の半導体メモリに含まれる第2の記憶部と、
前記第2の半導体メモリの記憶領域を、ブロック単位で前記第2の記憶部に割り当てるコントローラと、を備え、
前記コントローラは、
前記第2の記憶部のデータを第1の管理単位で管理するための第1の管理テーブルを前記第2の半導体メモリに記録し、
前記第2の記憶部のデータを前記第1の管理単位より大きな第2の管理単位で管理するための第2の管理テーブルを前記第1の半導体メモリに記録し、
前記第1の記憶部に書き込まれたセクタ単位の複数のデータを、前記第1の管理単位のデータとして前記第2の記憶部に追い出すデータ追い出し処理を実行し、前記第1の管理テーブル及び前記第2の管理テーブルの少なくとも一方を更新し、
前記第2の記憶部のリソース使用量が閾値を超えた場合、前記第2の記憶部の有効データを集めて前記第2の記憶部の他のブロックに書き直すデータ整理処理を実行し、前記第1の管理テーブル及び前記第2の管理テーブルの少なくとも一方を更新し、
前記データ整理処理において、ホスト装置からのアクセス頻度が閾値未満である場合に、選択した整理対象のブロック内の有効データを集めて第2の管理単位のデータとして他のブロックに書き直す、
ことを特徴とする半導体記憶装置。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2011143569A JP2012141946A (ja) | 2010-12-16 | 2011-06-28 | 半導体記憶装置 |
PCT/JP2011/079581 WO2012081731A1 (en) | 2010-12-16 | 2011-12-14 | Semiconductor storage device |
US13/824,792 US20130275650A1 (en) | 2010-12-16 | 2011-12-14 | Semiconductor storage device |
TW100146947A TWI483109B (zh) | 2010-12-16 | 2011-12-16 | 半導體儲存裝置 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010280955 | 2010-12-16 | ||
JP2010280955 | 2010-12-16 | ||
JP2011143569A JP2012141946A (ja) | 2010-12-16 | 2011-06-28 | 半導体記憶装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2012141946A true JP2012141946A (ja) | 2012-07-26 |
Family
ID=46244820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2011143569A Pending JP2012141946A (ja) | 2010-12-16 | 2011-06-28 | 半導体記憶装置 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20130275650A1 (ja) |
JP (1) | JP2012141946A (ja) |
TW (1) | TWI483109B (ja) |
WO (1) | WO2012081731A1 (ja) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5550741B1 (ja) * | 2012-09-25 | 2014-07-16 | 株式会社東芝 | ソリッドステートドライブにデータを再配置するストレージ装置、ストレージコントローラ及び方法 |
JP2015001909A (ja) * | 2013-06-17 | 2015-01-05 | 富士通株式会社 | 情報処理装置、制御回路、制御プログラム、および制御方法 |
JP2015001908A (ja) * | 2013-06-17 | 2015-01-05 | 富士通株式会社 | 情報処理装置、制御回路、制御プログラム、および制御方法 |
JP2016212835A (ja) * | 2015-04-30 | 2016-12-15 | 株式会社東芝 | メモリシステム |
US10296455B2 (en) | 2017-03-23 | 2019-05-21 | Toshiba Memory Corporation | Memory system and control method of nonvolatile memory |
US10761780B2 (en) | 2018-06-25 | 2020-09-01 | Toshiba Memory Corporation | Memory system |
JP2020191055A (ja) * | 2019-05-21 | 2020-11-26 | 慧栄科技股▲フン▼有限公司Silicon Motion Inc. | 瞬断からの回復処理方法及び装置、並びにコンピュータ読み取り可能な記憶媒体 |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8924636B2 (en) | 2012-02-23 | 2014-12-30 | Kabushiki Kaisha Toshiba | Management information generating method, logical block constructing method, and semiconductor memory device |
US9251055B2 (en) | 2012-02-23 | 2016-02-02 | Kabushiki Kaisha Toshiba | Memory system and control method of memory system |
US8990458B2 (en) | 2013-02-28 | 2015-03-24 | Kabushiki Kaisha Toshiba | Controller, semiconductor storage device and method of controlling data writing |
GB2514571A (en) * | 2013-05-29 | 2014-12-03 | Ibm | Cache allocation in a computerized system |
US9043569B2 (en) * | 2013-05-31 | 2015-05-26 | International Business Machines Corporation | Memory data management |
US9305665B2 (en) * | 2014-03-31 | 2016-04-05 | Kabushiki Kaisha Toshiba | Memory system and method of controlling memory system |
KR20160015793A (ko) * | 2014-07-31 | 2016-02-15 | 에스케이하이닉스 주식회사 | 데이터 저장 장치 및 그것의 동작 방법 |
US10168901B2 (en) * | 2015-03-12 | 2019-01-01 | Toshiba Memory Corporation | Memory system, information processing apparatus, control method, and initialization apparatus |
US10108503B2 (en) * | 2015-08-24 | 2018-10-23 | Western Digital Technologies, Inc. | Methods and systems for updating a recovery sequence map |
TWI571882B (zh) * | 2016-02-19 | 2017-02-21 | 群聯電子股份有限公司 | 平均磨損方法、記憶體控制電路單元及記憶體儲存裝置 |
US10126964B2 (en) * | 2017-03-24 | 2018-11-13 | Seagate Technology Llc | Hardware based map acceleration using forward and reverse cache tables |
KR20190107504A (ko) * | 2018-03-12 | 2019-09-20 | 에스케이하이닉스 주식회사 | 메모리 컨트롤러 및 그 동작 방법 |
US10915444B2 (en) * | 2018-12-27 | 2021-02-09 | Micron Technology, Inc. | Garbage collection candidate selection using block overwrite rate |
US10901622B2 (en) | 2018-12-28 | 2021-01-26 | Micron Technology, Inc. | Adjustable NAND write performance |
US11656797B2 (en) * | 2021-07-28 | 2023-05-23 | Western Digital Technologies, Inc. | Data storage device executing runt write commands as free commands |
CN114997766B (zh) * | 2022-04-15 | 2023-04-07 | 北京邮电大学 | 一种基于云服务的电子商务系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009211229A (ja) * | 2008-03-01 | 2009-09-17 | Toshiba Corp | メモリシステム |
JP2009217756A (ja) * | 2008-03-12 | 2009-09-24 | Toshiba Corp | メモリシステム |
JP2010157142A (ja) * | 2008-12-27 | 2010-07-15 | Toshiba Corp | メモリシステム |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8504798B2 (en) * | 2003-12-30 | 2013-08-06 | Sandisk Technologies Inc. | Management of non-volatile memory systems having large erase blocks |
US8200904B2 (en) * | 2007-12-12 | 2012-06-12 | Sandisk Il Ltd. | System and method for clearing data from a cache |
JP4533968B2 (ja) * | 2007-12-28 | 2010-09-01 | 株式会社東芝 | 半導体記憶装置及びその制御方法、コントローラ、情報処理装置 |
US7865658B2 (en) * | 2007-12-31 | 2011-01-04 | Sandisk Il Ltd. | Method and system for balancing host write operations and cache flushing |
KR101067457B1 (ko) * | 2008-03-01 | 2011-09-27 | 가부시끼가이샤 도시바 | 메모리 시스템 |
US8276043B2 (en) * | 2008-03-01 | 2012-09-25 | Kabushiki Kaisha Toshiba | Memory system |
JP4551940B2 (ja) * | 2008-03-01 | 2010-09-29 | 株式会社東芝 | メモリシステム |
JP4643667B2 (ja) * | 2008-03-01 | 2011-03-02 | 株式会社東芝 | メモリシステム |
JP2009211234A (ja) * | 2008-03-01 | 2009-09-17 | Toshiba Corp | メモリシステム |
JP4498426B2 (ja) * | 2008-03-01 | 2010-07-07 | 株式会社東芝 | メモリシステム |
JP4675985B2 (ja) * | 2008-03-01 | 2011-04-27 | 株式会社東芝 | メモリシステム |
JP4745356B2 (ja) * | 2008-03-01 | 2011-08-10 | 株式会社東芝 | メモリシステム |
-
2011
- 2011-06-28 JP JP2011143569A patent/JP2012141946A/ja active Pending
- 2011-12-14 WO PCT/JP2011/079581 patent/WO2012081731A1/en active Application Filing
- 2011-12-14 US US13/824,792 patent/US20130275650A1/en not_active Abandoned
- 2011-12-16 TW TW100146947A patent/TWI483109B/zh active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009211229A (ja) * | 2008-03-01 | 2009-09-17 | Toshiba Corp | メモリシステム |
JP2009217756A (ja) * | 2008-03-12 | 2009-09-24 | Toshiba Corp | メモリシステム |
JP2010157142A (ja) * | 2008-12-27 | 2010-07-15 | Toshiba Corp | メモリシステム |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5550741B1 (ja) * | 2012-09-25 | 2014-07-16 | 株式会社東芝 | ソリッドステートドライブにデータを再配置するストレージ装置、ストレージコントローラ及び方法 |
US9104554B2 (en) | 2012-09-25 | 2015-08-11 | Kabushiki Kaisha Toshiba | Storage apparatus, storage controller and method for relocating data in solid state drive |
JP2015001909A (ja) * | 2013-06-17 | 2015-01-05 | 富士通株式会社 | 情報処理装置、制御回路、制御プログラム、および制御方法 |
JP2015001908A (ja) * | 2013-06-17 | 2015-01-05 | 富士通株式会社 | 情報処理装置、制御回路、制御プログラム、および制御方法 |
JP2016212835A (ja) * | 2015-04-30 | 2016-12-15 | 株式会社東芝 | メモリシステム |
JP2018181374A (ja) * | 2015-04-30 | 2018-11-15 | 東芝メモリ株式会社 | 不揮発性メモリの制御方法 |
US10296455B2 (en) | 2017-03-23 | 2019-05-21 | Toshiba Memory Corporation | Memory system and control method of nonvolatile memory |
US10761780B2 (en) | 2018-06-25 | 2020-09-01 | Toshiba Memory Corporation | Memory system |
JP2020191055A (ja) * | 2019-05-21 | 2020-11-26 | 慧栄科技股▲フン▼有限公司Silicon Motion Inc. | 瞬断からの回復処理方法及び装置、並びにコンピュータ読み取り可能な記憶媒体 |
US11188267B2 (en) | 2019-05-21 | 2021-11-30 | Silicon Motion, Inc. | Method and apparatus and computer program product for handling sudden power off recovery |
US11803330B2 (en) | 2019-05-21 | 2023-10-31 | Silicon Motion, Inc. | Method and apparatus and computer-readable storage medium for handling sudden power off recovery |
Also Published As
Publication number | Publication date |
---|---|
WO2012081731A1 (en) | 2012-06-21 |
TWI483109B (zh) | 2015-05-01 |
US20130275650A1 (en) | 2013-10-17 |
TW201232260A (en) | 2012-08-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11216185B2 (en) | Memory system and method of controlling memory system | |
JP2012141946A (ja) | 半導体記憶装置 | |
Kang et al. | Performance trade-offs in using NVRAM write buffer for flash memory-based storage devices | |
KR101067457B1 (ko) | 메모리 시스템 | |
US20110055458A1 (en) | Page based management of flash storage | |
US8825946B2 (en) | Memory system and data writing method | |
KR101297442B1 (ko) | 공간 지역성을 고려한 요구 기반 플래시 메모리 변환 계층을 포함하는 낸드 플래시 메모리 시스템 | |
JP2009211233A (ja) | メモリシステム | |
JP2012008651A (ja) | 半導体記憶装置、その制御方法および情報処理装置 | |
JP2009211227A (ja) | メモリシステム | |
JP2009211232A (ja) | メモリシステム | |
US8112589B2 (en) | System for caching data from a main memory with a plurality of cache states | |
JP5221593B2 (ja) | メモリシステム | |
JP2009217756A (ja) | メモリシステム | |
KR101353967B1 (ko) | 환형 구조의 비휘발성 메모리 캐쉬에 데이터를 읽고 쓰기 위한 데이터 처리 방법 | |
JP2010176305A (ja) | 情報処理装置およびデータ記憶装置 | |
Ji et al. | Locality and duplication-aware garbage collection for flash memory-based virtual memory systems | |
Ou et al. | Towards an efficient flash-based mid-tier cache | |
KR20130086691A (ko) | 환형 구조의 비휘발성 메모리 캐쉬를 포함하는 하이브리드 스토리지 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20130906 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20140715 |