以下に添付図面を参照して、実施形態にかかるメモリシステムを詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
(第1の実施形態)
図1は、第1の実施形態によるメモリシステムの構成の一例を示す図である。このメモリシステム1は、例えば、SSD(Solid State Drive)である。以下では、不揮発性メモリとしてNAND型のフラッシュメモリ(以下、NANDメモリという)を用いる場合を例に挙げる。
メモリシステム1は、ホスト2と接続可能に構成されている。例えばCPU(Central Processing Unit)、パーソナルコンピュータ、携帯用情報機器、サーバ、等がホスト2に該当する。メモリシステム1とホスト2との間の通信のインタフェース規格としては、任意のインタフェース規格が採用可能である。2以上のホスト2がメモリシステム1に同時に接続されてもよい。ホスト2とメモリシステム1とは、ネットワークを介して接続されてもよい。
メモリシステム1は、ホスト2からのアクセスコマンドに応じてホスト2との間でデータの送受信を実行する。アクセスコマンドは、ライトコマンドおよびリードコマンドを含む。アクセスコマンドは、アクセス位置を論理的に示す位置情報を含む。論理的な位置情報としては、例えばLBA(Logical Block Address)が採用可能である。また、例えばメモリシステム1とホスト2との間の通信のインタフェース規格としてNVMeが採用される場合には、論理的な位置情報は、ネームスペースの識別情報とネームスペース内の位置を論理的に示すアドレス(例えばLBA)とが含まれていてもよい。ネームスペースとは、ネームスペースの識別情報によって特定される論理アドレス空間である。即ち、NVMeが採用される場合には、メモリシステム1は、複数の論理アドレス空間を管理することが可能である。以降、アクセスコマンドに含まれる論理的な位置情報を、論理アドレスと表記する。
メモリシステム1は、ホストインタフェース部11、NANDメモリ12、NANDコントローラ13、RAM(Random Access Memory)14、および制御部15を備える。
制御部15は、例えば、1以上のプロセッサを含んで構成される。制御部15は、予めメモリシステム1内の所定の位置に格納されているプログラムを実行することによって、メモリシステム1の制御を実行する。プログラムの格納位置は任意に設計される。例えば、プログラムは、予めNANDメモリ12に格納され、起動時にRAM14にロードされる。制御部15は、RAM14にロードされたプログラムを実行する。メモリシステム1の制御は、複数の処理によって構成される。制御部15が実行する複数の処理のうちの一部または全部はハードウェア回路によって実現されてもよい。また、制御部15を、ハードウェア回路である制御回路(Control Circuit)によって構成してもよい。制御部15が実行する各処理については後述する。
ホストインタフェース部11は、メモリシステム1がホスト2と通信を行うためのインタフェース装置である。例えばホストインタフェース部11は、制御部15の制御下で、ホスト2とRAM14との間のユーザデータの転送を実行する。
NANDコントローラ13は、NANDメモリ12に対するアクセスのためのインタフェース装置である。NANDコントローラ13は、制御部15による制御下で、RAM14とNANDメモリ12との間のユーザデータまたは管理情報の転送を実行する。詳細を省略するが、NANDコントローラ13は、誤り訂正処理行うことができる。
NANDメモリ12は、ストレージとして機能する不揮発性の記憶媒体である。NANDメモリ12は、1以上のチップによって構成される。
図2は、第1の実施形態におけるNANDメモリ12でのデータの処理単位と位置の最小の管理単位とを模式的に示す図である。NANDメモリ12を構成するチップの内部において、データの記憶領域は、複数のブロックによって構成される。各ブロックは、複数のページによって構成される。ページは、ライトおよびリードのアクセスが可能な単位である。ブロックは、一括してデータの消去が可能な最小単位である。図2の例では、1ブロックは、n(nは自然数)個のページで構成されるものとされている。
1ページより小さい単位に対して物理的な位置情報(物理アドレス)が割り当てられる。ここでは、物理アドレスが割り当てられる単位を、クラスタ、と表記する。1クラスタのサイズは、ホスト2からの最小のアクセス単位と等しくてもよいし異なっていてもよい。
RAM14は、データを一時的に記憶するための記憶媒体である。RAM14としては、例えば、NANDメモリ12よりも高速な種類の記憶媒体が採用可能である。RAM14としては、例えば、揮発性または不揮発性の記憶媒体が採用可能である。RAM14としては、例えば、DRAM(Dynamic RAM)、SRAM(Static RAM)、FeRAM(Ferroelectric RAM)、MRAM(Magnetoresistive RAM)、PRAM(Phase change RAM)などが採用可能である。
図3は、メモリシステム1に保持される各種情報を示す図である。NANDメモリ12には、緊急退避領域121、管理情報領域122、およびユーザデータ領域123が確保されている。管理情報領域122には、ログストレージ領域124が確保されている。
ユーザデータ領域123には、1以上のユーザデータ301が格納される。各ユーザデータ301は、ホスト2から書き込み要求されたデータである。各ユーザデータ301は、1クラスタのサイズと同じサイズを有することとする。
RAM14には、ライトバッファ141、リードバッファ142、およびキャッシュ領域143が確保されている。
ライトバッファ141およびリードバッファ142は、ホスト2とNANDメモリ12との間のデータ転送のためのバッファである。具体的には、ライトバッファ141は、ホストインタフェース部11がホスト2から受信したユーザデータが格納される。ライトバッファ141に格納されたユーザデータは、NANDコントローラ13によってユーザデータ領域123に書き込まれる。リードバッファ142は、NANDコントローラ13によって、ユーザデータ領域123から読み出されたユーザデータ301が格納される。リードバッファ142に格納されたユーザデータ301は、ホストインタフェース部11によってホスト2に転送される。
管理情報領域122は、メモリシステム1の管理のための情報(管理情報)を不揮発状態で記憶するための領域である。管理情報は、翻訳情報、有効情報、および統計情報225を含む。
翻訳情報は、論理アドレスと物理アドレスとを対応付けるための情報である。論理アドレスが翻訳情報によって物理アドレスに対応付けられているため、ホスト2は論理アドレスを用いることによって当該論理アドレスに対応する物理アドレスが示す位置に格納されているユーザデータ301を読み出すことができる。ユーザデータ領域123に格納されている複数のユーザデータ301の格納位置は、翻訳情報によって論理アドレスに対応付けられている何れかの物理アドレスによって示されるか、または翻訳情報によって論理アドレスに対応付けられている何れの物理アドレスによっても示されない。前者の物理アドレスによって示される位置に格納されているユーザデータ301は、ホスト2が読み出すことができる。後者の物理アドレスによって示される位置に格納されているユーザデータ301は、ホスト2が読み出すことができない。
制御部15は、第1のユーザデータ301をユーザデータ領域123内の第1の位置に格納する。その後、当該第1のユーザデータ301の書き込みの際に指定された論理アドレスと同一の論理アドレスの指定とともに書き込み要求されたユーザデータ301がホスト2から書き込み要求されると、制御部15は、当該書き込み要求されたユーザデータ301をユーザデータ領域123内における前記第1の位置と異なる位置に格納する。制御部15は、第1のユーザデータ301の書き込みの際に指定された論理アドレスと同一の論理アドレスの指定とともに書き込み要求されたユーザデータ301のうちの最新のユーザデータ301である第2のユーザデータ301の状態を、有効な状態として管理する。また、制御部15は、前記第1のユーザデータ301および当該第1のユーザデータ301の書き込みの際に指定された論理アドレスと同一の論理アドレスの指定とともに書き込み要求されたユーザデータ301のうちの、第2のユーザデータ301以外のユーザデータ301の状態を、無効な状態として管理する。なお、最新とは、同一の論理アドレスを指定した書き込み要求のうちの、最後の書き込み要求(但し後述するアトミックライトの書き込み要求を除く)によってホスト2から受信したことをいう。制御部15は、論理アドレスを、第1のユーザデータ301ではなく第2のユーザデータ301の格納位置を示す物理アドレスに対応付ける。言い換えると、有効なユーザデータ301の格納位置を示す物理アドレスは、翻訳情報によって、ある論理アドレスに対応付けられている。また、無効なユーザデータ301の格納位置を示す物理アドレスは、翻訳情報によって何れの論理アドレスにも対応付けられていない。
近年、メモリシステム1の表記容量が増大するに応じて、翻訳情報のサイズが大きくなる傾向がある。表記容量とは、メモリシステム1が外部に提供する論理アドレス空間の合計サイズをいう。巨大なサイズの翻訳情報を管理するために、翻訳情報は、複数の階層に階層化される。複数の階層の翻訳情報の夫々は、記録された対応関係がカバーする論理アドレスの範囲のサイズが夫々異なる。上位の階層に属する翻訳情報に記録された対応関係がカバーする論理アドレスの範囲のサイズは、下位の階層に属する翻訳情報に記録された対応関係がカバーする論理アドレスの範囲のサイズよりも大きい。言い換えると、上位の階層に属する翻訳情報よりも下位の階層に属する翻訳情報の方が、記録されている対応関係の粒度が細かい。上位の階層に属する翻訳情報よりも下位の階層に属する翻訳情報の方がレコード数が大きくなるので、下位の階層に属する翻訳情報は、上位の階層に属する翻訳情報よりも細かく分割される。同一の階層に属する複数の翻訳情報は、記録されている対応関係がカバーする論理アドレスの範囲のサイズが等しい。
1つの階層に属する翻訳情報の格納位置は、前記1つの階層に属する翻訳情報よりも1つ上位の階層に属する翻訳情報によって示される。示されるとは、例えばポインタなどによってリンクされていることをいう。例えば、最も上位の階層に属する翻訳情報は、RAM14に読み出され、RAM14上で使用される。使用とは、参照または変更である。最も上位の階層を除く階層に属する翻訳情報は、適宜、NANDメモリ12からRAM14に読み出され、RAM14上で使用される。NANDメモリ12への書き込みの効率を良くするために、RAM14に読み出す単位のサイズを小さくしたいという要望がある。また、最も上位の階層に属する翻訳情報を記憶するRAM14内の領域のサイズを小さくしたいという要望がある。これらの要望に応えるために、翻訳情報は、3以上の階層に階層化される。第1の実施形態においては、一例として、翻訳情報は、3つの階層に階層化される。
管理情報領域122には、最も上位の階層に属する翻訳情報である第1テーブル201aが格納される。管理情報領域122内のログストレージ領域124には、第2階層に属する翻訳情報である第2テーブル202aおよび第3階層に属する翻訳情報である第3テーブル203aが格納される。
図4は、各種テーブルの構成の一例を説明する図である。メモリシステム1の論理アドレス空間は、複数の部分空間(第1空間)に分割される。さらに、各第1空間は、複数の部分空間(第2空間)に分割される。各第2空間は、複数の第3空間に分割される。各第3空間のサイズは1クラスタのサイズと等しい。
1つの第3テーブル203aは、1つの第2空間に含まれる第3空間毎にレコードを備える。1つの第2テーブル202aを構成する各レコードは、論理アドレスと、その論理アドレスによって示されるユーザデータ301、が格納されている位置を示すアドレス情報(データアドレス)と、を対応付ける。データアドレスは、例えば、物理アドレスによって表記される。ある第3空間に対応するユーザデータ301がメモリシステム1内に格納されていない場合には、当該第3空間に対応するレコードには、例えば、ヌル値が記録される。
第1テーブル201aは、第1空間毎にレコードを備える。第1テーブル201aの各レコードは、第2テーブル202aが格納されている位置を示す。第1テーブル201aの各レコードにおいては、第2テーブル202aが格納されている位置は、例えば、物理アドレスの形式で示される。
第2テーブル202aは、第2空間毎にレコードを備える。第2テーブル202aの各レコードは、第3テーブル203aが格納されている位置を示す。第2テーブル202aの各レコードにおいては、第3テーブル203aが格納されている位置は、例えば、物理アドレスの形式で示される。
有効情報は、各ユーザデータ301が有効であるか無効であるかを記録した情報である。有効情報は、ここでは一例として、第1階層に属する有効情報であるブロック管理情報211aと、第2階層に属する有効情報である有効ビットマップ212aと、の2つの階層に階層化される。
図5は、有効ビットマップ212aを説明する図である。有効ビットマップ212aは、ユーザデータ301が有効であるか無効であるかを記述したフラグを集めたビットマップ情報である。1つのフラグに対応する範囲は任意に設計される。図5の例によれば、各有効ビットマップ212aには、有効であるか無効であるかを示す1ビットのフラグがページ毎に記録される。各有効ビットマップ212aは、物理アドレスが連続する複数のページの分のフラグが記録される。有効ビットマップ212aは、ログストレージ領域124に格納される。
図6は、ブロック管理情報211aを説明する図である。各有効ビットマップ212aに記録される各フラグは、物理アドレスに対応付けられている。具体的には、ブロック管理情報211aは、1つの有効ビットマップ212aに記録されるフラグの数のページによって構成される物理アドレス空間ごとに、対応するブロック管理情報211aが格納されている位置を示す。ブロック管理情報211aは、管理情報領域122に格納される。
図7は、第2テーブル202a、第3テーブル203a、および有効ビットマップ212aの格納の様態の一例を示す図である。第1の実施形態においては、1つの第2テーブル202aのサイズと、1つの第3テーブル203aのサイズと、が等しくなるように、第1空間のサイズおよび第2空間のサイズが決められている。また、第1の実施形態においては、1つの第2テーブル202aのサイズと、1つの第3テーブル203aのサイズと、1つの有効ビットマップ212aのサイズと、が等しくなるように、1つの有効ビットマップ212aに記録されるフラグの数が決められている。なお、1つの第2テーブル202aのサイズとは、当該1つの第2テーブル202a自体のデータとしての大きさをいう。1つの第3テーブル203aのサイズとは、当該1つの第3テーブル203a自体のデータとしての大きさをいう。1つの有効ビットマップ212aのサイズとは、当該1つの有効ビットマップ212a自体のデータとしての大きさをいう。これにより、ログストレージ領域124は、第2テーブル202a、第3テーブル203a、および有効ビットマップ212aを混ぜて格納することが可能である。
具体的には、1つのページに異なる複数の単位情報を格納することが可能である。単位情報とは、第2テーブル202a、第3テーブル203a、または有効ビットマップ212aである。また、ページ当たりに記録される単位情報の数を常に一定にすることができる。また、各単位情報のサイズが等しいので、単位情報間の境界の位置の管理が容易である。単位情報の特定のために当該単位情報のサイズ情報を不要とすることができる。図7の例においては、1つのページに6つの単位情報が格納されている。
各単位情報は、使用時には、キャッシュ領域143に読み出される。言い換えると、各単位情報は、キャッシュ領域143にキャッシュされる。使用とは、参照または変更である。キャッシュ領域143に存在する第2テーブル202aを、第2テーブル202bと表記する。キャッシュ領域143に存在する第3テーブル203aを、第3テーブル203bと表記する。キャッシュ領域143に存在する有効ビットマップ212aを、有効ビットマップ212bと表記する。
キャッシュ領域143にキャッシュされている単位情報は、制御部15による変更によって、ログストレージ領域124に格納されている単位情報と異なる状態になる。ログストレージ領域124に格納されている単位情報と異なる、キャッシュ領域143にキャッシュされている単位情報の状態を、ダーティと表記する。ダーティな単位情報は、所定のタイミングでログストレージ領域124に書き戻される。ダーティな単位情報は、ログストレージ領域124に書き込まれることによって、非ダーティな状態に遷移する。
第1テーブル201aは、RAM14に読み出され、RAM14上において使用される。RAM14に読み出された第1テーブル201aを、第1テーブル201bと表記する。ブロック管理情報211aは、RAM14に読み出され、RAM14上において使用される。RAM14に読み出されたブロック管理情報211aを、ブロック管理情報211bと表記する。RAM14に格納された第1テーブル201bおよびブロック管理情報211bは、夫々、制御部15によって使用され、メモリシステム1の所定のタイミングで管理情報領域122にコピーされる。
RAM14に格納されている第1テーブル201bの各レコードは、対応する第2テーブル202bがキャッシュ領域143にキャッシュされている場合には、当該対応する第2テーブル202bがキャッシュされている位置をさらに示す。また、キャッシュ領域143にキャッシュされている第2テーブル202bの各レコードは、対応する第3テーブル203bがキャッシュ領域143にキャッシュされている場合には、当該対応する第3テーブル203bがキャッシュされている位置をさらに示す。また、キャッシュ領域143にキャッシュされている第3テーブル203bの各レコードは、対応するユーザデータがライトバッファ141に格納されている場合には、ライトバッファ141において当該対応するユーザデータが格納されている位置を示す。
RAM14内に格納されるブロック管理情報211bの各レコードは、対応する有効ビットマップ212bがキャッシュ領域143にキャッシュされている場合には、当該対応する有効ビットマップ212bがキャッシュされている位置をさらに示す。
ダーティな単位情報は、キャッシュ管理情報221によって管理される。
図8は、キャッシュ管理情報221の構成を示す図である。キャッシュ管理情報221は、キャッシュ領域143の管理のための情報である。キャッシュ管理情報221は例えばRAM14に格納され、RAM14上で使用される。キャッシュ管理情報221は、ユーザダーティ情報222、GCダーティ情報223、およびフリー情報224を備える。ユーザダーティ情報222は、ライトバッファ141からユーザデータ領域123へのユーザデータ301の書き込みに応じてダーティとなった第2テーブル202bおよび第3テーブル203bを示す情報である。ユーザダーティ情報222は、ライトバッファ141からユーザデータ領域123へのユーザデータ301の書き込みに応じてダーティとなった有効ビットマップ212bをさらに示すように構成されてもよい。GCダーティ情報223は、ガベージコレクションによってダーティとなった第2テーブル202bおよび第3テーブル203bを示す情報である。GCダーティ情報223は、ガベージコレクションによってダーティとなった有効ビットマップ212bをさらに示すように構成されてもよい。フリー情報224は、使用されていないキャッシュラインを示す情報である。なお、例えば1つのキャッシュラインには1つの単位情報がキャッシュされる。ユーザダーティ情報222およびGCダーティ情報223は、ダーティとなった順番が認識可能な状態でダーティな単位情報を示す。例えば、ユーザダーティ情報222およびGCダーティ情報223は、リンクトリストのデータ構造を備える。フリー情報224は、使用されていないキャッシュラインを使用されていない状態となった順番が認識可能な状態で示す。例えば、フリー情報224は、リンクトリストのデータ構造を備える。
なお、第1テーブル201bおよびブロック管理情報211bについても、ダーティ/非ダーティの管理が実行される。例えば、第1テーブル201bは、第1テーブル201aと異なった場合にダーティとして扱われる。例えば、第1テーブル201bを構成する複数のレコードのうちの、第1テーブル201aを構成する複数のレコードのうちの対応するレコード、と異なったレコード、がダーティとして管理されてもよい。また、例えば、ブロック管理情報211bは、ブロック管理情報211aと異なった場合にダーティとして管理されてもよい。また、例えば、ブロック管理情報211bを構成する複数のレコードのうちのブロック管理情報211aを構成する複数のレコードのうちの対応するレコードと異なったレコードのみがダーティとして管理されてもよい。第1テーブル201bは、例えば、ダーティとなったレコード数が所定数を超えた場合に、その時点の第1テーブル201bが管理情報領域122に第1テーブル201aとして書き込まれる。ブロック管理情報211bは、例えば、ダーティとなったレコード数が所定数を超えた場合に、その時点のブロック管理情報211bが管理情報領域122にブロック管理情報211aとして書き込まれる。第1テーブル201bおよびブロック管理情報211bの各レコードの状態は、管理情報領域122への書き込みに応じて、非ダーティに遷移する。
統計情報225は、動作状態を示す各種情報である。例えば、統計情報225は、NANDメモリ12の使用状況、メモリシステム1の使用状況、パワーオン時間、電源断によるダーティな情報の喪失の発生回数、パワーロスプロテクション(PLP)の動作回数、正常な電源断の発生回数、などを含む。正常な電源断とは、ここでは、ダーティな情報の喪失が起こらなかった電源断をいう。PLPとは、外部からの電源供給が突然停止した場合に、制御部15が、RAM14内の少なくともダーティな翻訳情報を緊急退避領域121に格納する処理をいう。PLPにおいては、ライトバッファ141内のユーザデータも格納の対象である。PLPにおいては、制御部15は、RAM14内のメモリイメージを緊急退避領域121にそのままダンプしてもよい。PLPは、メモリシステム1に内蔵されるバッテリ(図示せず)に蓄えられた電力を用いて実行される。制御部15は、統計情報225をRAM14内に生成し、生成した統計情報225を定期的に管理情報領域122にダンプする。
ユーザデータ領域123には、制御部15によって、ユーザデータ301の他に1以上のログ情報231が格納される。ログ情報231は、ユーザデータ301がユーザデータ領域123に書き込まれる際に当該ユーザデータ301と対応して記録される情報である。ログ情報231は、対応するユーザデータ301の位置を示す論理アドレスと、当該論理アドレスに当該対応するユーザデータ301の書き込みの前に対応づけられていた物理アドレス(旧物理アドレス)と、当該対応するユーザデータ301の書き込み先の位置を示す物理アドレス(新物理アドレス)と、が少なくとも記録されている。
次に、制御部15が実行する各処理を説明する。
(1)基本動作
制御部15が実行する処理は、大きく、起動時の処理、コマンド待機の処理、コマンド実行の処理、再起動待機の処理、に分類される。
(1−1)起動時の処理
制御部15は、起動時においては、スケジューラとしての初期化操作を実行する。その後、制御部15は、スケジューラに以下の処理(第1〜第3のスタートアップ処理)の何れかを登録する。制御部15は、登録されたスタートアップ処理を、スケジューラの指示によって実行する。
(1−1−1)第1のスタートアップ処理
電源断によってダーティな単位情報が喪失された場合には、第1のスタートアップ処理が実行される。第1のスタートアップ処理は、翻訳情報を再構築する処理である。再構築とは、喪失されたダーティな単位情報を回復することを含む。再構築は、ログ情報231を書き込み順または書き込み順とは逆順に参照することによって実行可能である。
(1−1−2)第2のスタートアップ処理
直前の電源断においてPLPなどによって緊急退避領域121に各種情報が格納された場合には、第2のスタートアップ処理が実行される。第2のスタートアップ処理は、緊急退避領域121に格納された各種情報を用いて、RAM14のメモリイメージを復元する処理である。
(1−1−3)第3のスタートアップ処理
全てのダーティな単位情報が管理情報領域122に正常に書き込み完了することによって非ダーティな状態に電源断時において遷移した場合には、第3のスタートアップ処理が実行される。第3のスタートアップ処理は、第1テーブル201aをRAM14に第1テーブル201bとして読み出す処理である。
(1−2)コマンド待機の処理
制御部15は、割り込みハンドラとしての処理を実行する。ホスト2からのコマンドに応じて割り込みハンドラは対応する処理をスケジューラに登録する。コマンドは、対応する処理をスケジューラが実行することによって伝達される。また、メモリシステム1内部の割り込みハンドラが、対応する処理をスケジューラに登録することによってもコマンド実行が開始される。実行可能なコマンドがなければ、制御部15は、メモリシステム1の状態をスリープの状態に移行せしめてもよい。なお、メモリシステム1がスリープの状態であっても、制御部15は、タイマ割り込みの実行を行ってもよい。制御部15は、タイマ割り込みによって、メモリシステム1の状態をスリープの状態から通常の状態に遷移せしめる。
(1−3)コマンド実行の処理
(1−3−1)ホストコマンドキュー処理
ホストコマンドキュー処理は、例えば、割り込みハンドラとして制御部15に実装される。ホスト2からのコマンドは、割り込みによって通知される。ホストコマンドキュー処理は、ホスト2からのコマンドを解析する処理と、当該コマンドを発行待ちコマンドキュー(図示せず)に登録する処理を含む。発行待ちコマンドキューは、例えばリング型のキューである。ホストコマンドキュー処理においては、制御部15は、発行待ちコマンドキューに対しては、登録のみを実行することができる。発行待ちコマンドキュー内の発行待ち状態のコマンドの数は、登録側の位置情報と発行側の位置情報との比較によって算出可能である。ホストコマンドキュー処理においては、発行待ち状態のコマンドの数が所定のしきい値を超えている場合には、制御部15は、ホスト2からのコマンドの受け付けを停止する。ホストコマンドキュー処理においては、ホスト2からのコマンドの受け付けの停止中にホスト2からコマンドの登録が要求された場合には、制御部15は、ホスト2に対して受け付け拒絶を通知する。ホスト2は、受け付け拒絶の通知を受信した場合には、所定時間の経過後、コマンドの登録を再要求する。制御部15は、再要求時においてコマンドの受け付けの停止中でない場合には、ホストコマンドキュー処理において当該コマンドを受け付ける。発行待ちコマンドキュー内の発行待ち状態のコマンドの数と前記所定のしきい値との差分は、受け付け可能なコマンドの数を示す。制御部15は、ホストコマンドキュー処理において、受け付け可能なコマンドの数をステータス情報としてホスト2に送信してもよい。受け付け拒絶の通知および受け付け可能なコマンド数の通知の何れを使用するかは、ホスト2との取り決めによって設定される。ホストコマンドキュー処理において、制御部15は、ホストコマンド発行処理をスケジューラの実行待ちキュー(図示せず)に登録し、ホストコマンドキュー処理を終了する。登録されたコマンドは、夫々、実行状態(未実行状態、実行中状態、終了待機状態)を示す情報とともに管理される。
(1−3−2)ホストコマンド発行処理
ホスト2からのコマンドの受け付け後、コマンドの終了時またはタイマ割り込みなどによってホストコマンド発行処理の実行要求がスケジューラに登録される。ホストコマンド発行処理においては、制御部15は、スケジューラに実行要求が登録されたコマンドの状態を実行中状態に遷移させる。また、例えばデータの転送が終了した場合などコマンドの実行が終了すると、制御部15は、コマンドの状態を終了待機状態に遷移させる。その後、ホスト2からの実行終了確認の受領に応じて、制御部15は、コマンドを発行待ちコマンドキューから削除する。制御部15は、未実行状態のコマンドの実行を開始する。
(1−3−3)リード処理
リード処理は、コマンドを解析する処理、翻訳情報にアクセスする処理、NANDメモリ12からユーザデータ301を読み出す処理、NANDメモリ12から読み出されたユーザデータ301をリードバッファ142に格納する処理、リードバッファ142に格納されたユーザデータ301をホスト2に送信する処理、およびコマンド実行終了をホスト2に通知する処理、を含む。リード処理においては、制御部15は、ホスト2がコマンド実行終了を確認した後、ホストコマンド発行処理にコマンドの終了を通知する。
(1−3−4)ライト処理
ライト処理は、コマンドを解析する処理、コマンド実行をホスト2に通知する処理、ライトバッファ141にホスト2からのユーザデータを格納する処理、ライトバッファ141へのユーザデータの格納に応じて翻訳情報を更新する処理、およびコマンド実行終了をホスト2に通知する処理、を含む。ライトコマンドにFUAモードの指定が含まれている場合には、ライト処理において、制御部15は、ライトバッファ141に格納されたユーザデータをNANDメモリ12に格納する処理と、NANDメモリ12へのユーザデータの格納に応じて翻訳情報を更新する処理とをさらに実行する。ライト処理においては、制御部15は、ホスト2がコマンド実行終了を確認した後、ホストコマンド発行処理にコマンドの終了を通知する。
(1−3−5)キャッシュフラッシュ(Cache Flush)処理
キャッシュフラッシュ処理は、ライトバッファ141のフラッシュと、翻訳情報のダーティな部分のフラッシュとを実行する処理である。キャッシュフラッシュが通知されると、キャッシュフラッシュ処理において、制御部15は、次のライトコマンドの発行を、ライトバッファ141への書き込み実行フラグを立て終わるまで停止する。書き込み実行フラグは、ライトバッファ141に格納されているユーザデータがNANDメモリ12に書き込まれたか否かを示すフラグ情報である。書き込み実行フラグが立てられた状態は、対応するユーザデータがNANDメモリ12に書き込み済みであることを示す。なお、NVMeが採用される場合には、制御部15は、キャッシュフラッシュ処理をネームスペース毎に独立に実行してもよい。
(1−3−6)トリム(Trim)処理
トリム処理は、指定された論理アドレスについて、当該論理アドレスと物理アドレスとの対応関係を解消する処理である。トリム処理において、制御部15は、新規のライトコマンドおよび新規のリードコマンドの発行を停止し、翻訳情報に含まれる対応するレコードを無効化する。NVMeが採用される場合には、トリムコマンドは、たとえばネームスペースを指定可能に構成されてもよい。制御部15は、トリム処理において、指定されたネームスペースに対するライトコマンドおよびリードコマンドの発行を停止する。
(1−3−7)緊急退避(Evacuate)処理
緊急退避処理は、発行待ちのコマンドおよび実行中の全てのアクセスコマンドを破棄する処理と、ライトバッファ141内のユーザデータおよび翻訳情報のうちの全てのダーティな部分を緊急退避領域121に格納する処理とを含む。緊急退避処理において上記情報の格納に成功した場合には、制御部15は、Unexpected Shutdownフラグを下ろす。緊急退避処理において上記情報の格納に失敗した場合には、制御部15は、Unexpected Shutdownフラグを下ろさない。Unexpected Shutdownフラグは、例えば、NANDメモリ12の管理情報領域122に記録される。次回の起動時においては、第1のスタートアップ処理を実行するか否かが、Unexpected Shutdownフラグに基づいて判定される。緊急退避が通知されると、再起動以外の全てのコマンドの新規受付が停止される。緊急退避は、電源から通知される。
(1−3−8)スリープ処理
スリープ処理は、発行待ちの全てのコマンドと実行中のアクセスコマンドの実行終了後、ライトバッファ141内のユーザデータおよび翻訳情報のうちの全てのダーティな部分を緊急退避領域121に格納する処理である。スリープ処理において上記情報の格納に成功した場合には、制御部15は、Unexpected Shutdownフラグを下ろす。スリープ処理において上記情報の格納に失敗した場合には、制御部15は、Unexpected Shutdownフラグを下ろさない。スリープが通知されると、復帰コマンド以外の全てのコマンドの新規受付が停止される。スリープは、ホスト2から通知される。
(1−3−9)シャットダウン処理
シャットダウン処理は、発行待ちの全てのコマンドの実行が終了後、キャッシュフラッシュ処理を実行する処理である。シャットダウンが通知されると、再起動以外の全てのコマンドの新規受付が停止される。シャットダウンは、ホスト2から通知される。フラッシュに成功した場合には、制御部15は、Unexpected Shutdownフラグを下ろす。フラッシュに失敗した場合には、制御部15は、Unexpected Shutdownフラグを下ろさない。
(1−4)再起動待機の処理
再起動待機の処理とは、緊急退避処理またはシャットダウン処理が終了した後の状態をいう。再起動待機処理においては、制御部15は、再起動コマンドのみを受け付ける。
(2)翻訳情報の復元処理
翻訳情報の復元処理は、第1テーブル201bを復元する処理である。翻訳情報の復元処理の実行中においては、制御部15は、アクセスコマンドを受け付けない。Signature応答およびIdentifyに対する応答は、許可される。翻訳情報の復元処理においては、「時刻」とは、システムトータルの書き換え回数で代用される。書き換え回数とは、ブロック毎の書き込みおよび消去の回数である。翻訳情報の復元処理においては、制御部15は、第1テーブル201bのレコードのうちの最新のレコードを復元する。制御部15は、ログストレージ領域124に記録されている単位情報のうち、対応する第1テーブル201aのレコードよりも時刻が新しいものを復元する。第1のスタートアップ処理内において翻訳情報の復元処理が実行される場合には、次の処理が実行される。
即ち、制御部15は、ユーザデータ301が格納されているブロックのうちの、復元された翻訳情報よりも時刻が新しいブロックについて、翻訳情報の対応するレコードを復元する。制御部15は、ログ情報231に基づいて翻訳情報の対応するレコードを復元する。復元された翻訳情報よりも時刻が古いブロックについては、制御部15は、翻訳情報の対応するレコードを復元しない。復元されたレコードは、ダーティとして管理される。
翻訳情報の復元後、翻訳情報のダーティな部分はフラッシュされてもよいし、フラッシュされなくてもよい。翻訳情報の復元後に、翻訳情報のダーティな部分はフラッシュされるか否かは、外部から設定可能であってもよい。
(3)電源遮断処理
電源遮断処理には、正常処理とPLPとが存在する。
(3−1)正常処理
正常処理は、ライトバッファ141内のユーザデータのフラッシュ、各種ダーティな情報のフラッシュ、および統計情報225のフラッシュを含む。制御部15は、正常処理の終了後、Unexpected Shutdownフラグを下ろす。
(3−2)PLP
PLPは、ライトバッファ141内のユーザデータおよび各種ダーティな情報を緊急退避領域121に格納する処理を含む。制御部15は、PLPの終了後、Unexpected Shutdownフラグを下ろし、PLPフラグを立てる。PLPフラグは、PLPによってメモリシステム1が終了されたことを示すフラグであり、例えば管理情報領域122に記録される。統計情報225は、上記の情報の格納が完了した後に緊急退避領域121に格納される。PLPにおいては、統計情報225の保持は保証されなくてもよい。
(4)ライト処理の動作
ライト処理とは、ホスト2からのコマンドに応じた書き込みをいう。ライト処理としては、キャッシュを用いたライト、FUAライト、アトミックライト、トリム処理、の4種類の種類がある。キャッシュを用いたライトは、4種類のライト処理の中で最も処理が早く終了する。キャッシュを用いたライトとは、ライトバッファ141にユーザデータが格納された時点で終了するライト処理である。FUAライトとは、NANDメモリ12へのユーザデータの書き込みまで終えた時点で終了するライト処理である。FUAライトの実行中においては、翻訳情報の更新が完了するまで、NANDメモリ12に書き込まれたユーザデータ301を読み出すことができない。FUAライトの実行中において翻訳情報の更新が完了するまでの間、該当のユーザデータ301の読み出しを要する場合には、制御部15は、ライトバッファ141からユーザデータを読み出す。アトミックライトは、複数のライトコマンドによって書き込み要求された全てのユーザデータの書き込みが完了した後に、翻訳情報の更新を行う書き込みである。アトミックライトによれば、複数のライトコマンドによって書き込み要求された全てのユーザデータの書き込みが完了するまで、各ユーザデータの読み出しはできない。トリム処理は、ライト処理のうちの1つとして扱われる。
ライト処理に付帯するコマンドとして、キャッシュフラッシュコマンドが存在する。キャッシュフラッシュコマンドは、キャッシュフラッシュ処理を実行させるためのコマンドである。キャッシュフラッシュ処理においては、制御部15は、ライトバッファ141内のユーザデータをNANDメモリ12に書き込み、翻訳情報の更新を行う。キャッシュフラッシュ処理は、メモリシステム1全体を対象として実行されることが可能である。また、キャッシュフラッシュ処理は、ネームスペースまたはストリームを限定して実行されるように、メモリシステム1が構成されてもよい。PLPが実行可能なメモリシステム1においては、キャッシュフラッシュコマンドを無視することができるように設定可能にメモリシステム1が構成されてもよい。
(4−1)ライトバッファ処理
ライトバッファ141は、ダブルバッファの構成を備えた、FIFOのルールでデータの入出力がなされるバッファである。ライトバッファ141は、所定のサイズの領域毎に書き込み実行フラグを備える。
制御部15は、キャッシュを用いたライトまたはアトミックライトの場合、所定の量だけライトバッファ141に蓄積されるに応じてライトバッファ141内のユーザデータをNANDメモリ12にページ単位でコピーする。FUAライトの場合、制御部15は、ライトバッファ141にユーザデータが書き込まれた後にすぐに当該ユーザデータをNANDメモリ12にページ単位でコピーする。トリム処理の場合は、制御部15は、トリムの通知そのものをライトバッファ141に書き込み、当該トリムの通知をライトバッファ141からNANDメモリ12(NANDメモリ12のユーザデータ領域123)にコピーする。コピーの後、制御部15は、コピー元の領域に書き込み実行フラグを立てる。制御部15は、書き込み実行フラグが立てられた領域を、空き領域として扱うことができる。
NANDメモリ12へのコピーの間、ライトバッファ処理は、コピー元の領域の管理権を有さない。即ち、ライトバッファ処理において、制御部15はコピー元の領域に対する書き込みはできない。コピー元の領域以外の領域については、既にライトバッファ141に格納されているユーザデータと同じ論理アドレスを指定して別のユーザデータが送られてきた場合(再書き込み)、ライトバッファ処理において、制御部15は当該別のユーザデータを既にライトバッファ141に格納されているユーザデータに上書きする。
ライトバッファ処理において、制御部15は、ライトバッファ141に空き領域があるかぎり、ホスト2から送られてきたユーザデータを任意のタイミングでライトバッファ141に格納することができる。再書き込みの場合を除き、制御部15は、ライトバッファ141にユーザデータを格納するに応じて翻訳情報を更新する。具体的には、ライトバッファ141内の格納位置の物理アドレスを、ユーザデータの位置を示す論理アドレスに対応付ける。制御部15は、翻訳情報の更新を、RAM14上で実行する。対応する単位情報がキャッシュ領域143に存在しない場合には、制御部15は、対応する単位情報をログストレージ領域124からキャッシュ領域143に読み出した後、当該単位情報を更新する。単位情報の更新後、制御部15は、更新された単位情報および更新された単位情報を指す上位層の単位情報をダーティに設定する。
キャッシュフラッシュコマンドの受信時、FUAライトの実行時、FUAリードにおいて対象の翻訳情報が未書き込み状態でかつライトバッファ141にデータが存在する時、および予め設定された時間以上の時間のアイドル時間が検出された時、制御部15は、ライトバッファ141からNANDメモリ12へのコピーを実行する。FUAライトの場合、例えば制御部15は、FUAライトのライトコマンドによって書き込まれたユーザデータのみをライトバッファ141からNANDメモリ12にコピーする。制御部15は、NANDメモリ12への書き込みの対象のユーザデータをNANDメモリ12にコピーする際に書き込み先のページに空き領域がある場合には、書き込みの対象のユーザデータとともにNANDメモリ12への書き込みの対象にまだ設定されていないユーザデータをコピーしてもよい。
(4−2)書き込み先のブロックを選択する処理
制御部15は、1以上のフリーブロックのうちから、書き換え回数が出来るだけ少ないフリーブロックを、書き込み先のブロックとして選択する。フリーブロックとは、有効なユーザデータ301が格納されていないブロックをいう。フリーブロックは、ガベージコレクションにより生成される。制御部15は、2以上のフリーブロックから所定数のフリーブロックを候補としてランダムに選択し、選択された候補のうちの書き換え回数が最も少ないフリーブロックを書き込み先のブロックとして選択してもよい。フリーブロックは、例えば、生成された順番がわかるようにリスト形式(フリーブロックリスト)で管理される。制御部15は、最も古く生成された所定数のフリーブロックまたは最も新しく生成された所定数のフリーブロックを候補として選択してもよい。書き込み先のブロックとして選択されたフリーブロックは、消去後、書き込み先に設定される。消去に際しては、制御部15は、メモリシステム1内においてユニークなシーケンス番号をブロックに割り当てる。シーケンス番号は、消去が実行された順番を示す番号である。制御部15は、1つのブロックの最後のページに情報を書き込む際に、そのブロックのシーケンス番号を記録する。
(4−3)NANDメモリ12への書き込み
ユーザデータをライトバッファ141からNANDメモリ12に書き込む際、制御部15は、コピー元の領域をロックする。また、コピー先のページに空き領域がある場合には、制御部15は、例えば、リードモディファイライトの要領で、NANDメモリ12からデータを読み出して当該読み出したデータを書き込み対象のユーザデータと結合してコピー先のページに書き込む。NANDメモリ12へのユーザデータの書き込みの終了後、その書き込みがキャッシュを用いたライトまたはFUAライトに伴う処理である場合には、制御部15は、翻訳情報の更新要求(以降、単に更新要求)を発行する。更新要求は、論理アドレス、ライトバッファ141内のコピー元を示すアドレス、旧物理アドレス、新物理アドレス、およびデータのサイズを含む。トリム処理に関しては、制御部15は、トリムコマンドに基づき、無効化の対象の論理アドレス範囲を含む更新要求を発行する。
(4−4)アトミックライト
アトミックライトにおいては、制御部15は、アトミックライトの開始と終了とをユーザデータ領域123に書き込む。アトミックライトの動作としては2通りの動作が考えられる。
(4−4−1)第1のアトミックライト
制御部15は、アトミックライトの最後の書き込みを確認するまで更新要求をキューイングする。アトミックライトの最後の書き込みを確認した後、制御部15は、キューイングしておいた更新要求を発行する。アトミックライトに応じた翻訳情報の更新中には、制御部15は、アトミックライトの対象となった論理アドレス範囲に対する読み出しを停止する。アトミックライトに対応できる領域の大きさは、メモリシステム1の余裕容量と更新要求をキューイングできる量とで決定される。第1のアトミックライトによれば、ネストが可能である。
(4−4−2)第2のアトミックライト
制御部15は、更新要求を発行する。制御部15は、更新要求がなされた単位情報をキャッシュ領域143において複製する。制御部15は、アトミックライトの実行中には、単位情報の複製を更新する。アトミックライトの最後の書き込みを確認した後、制御部15は、単位情報の複製を複製元の単位情報に反映させる。読み出し動作またはアトミックライトでない書き込み動作の際には、制御部15は、複製元の単位情報を使用する。反映は、次のように実行される。即ち、制御部15は、単位情報の複製のうちの非ダーティの部分について、複製元の単位情報から単位情報の複製に上書きする。そして、制御部15は、単位情報の複製を示すように、上位の翻訳情報に記録されたテーブルアドレスを更新する。第2のアトミックライトに対応できる領域の大きさは、キャッシュ領域143において単位情報の複製を格納可能な量とメモリシステム1の余裕容量とで決定される。第2のアトミックライトによれば、複数の更新要求を逐次実行する必要がある第1のアトミックライトに比べ、翻訳情報の更新を早く完了することができる。即ち、読み出しを停止する期間を短くすることができる。なお、複数のアトミックライトが実行される場合には、制御部15は、アトミックライト毎に単位情報の複製を生成する。
(4−5)翻訳情報の更新処理
制御部15は、更新要求を受け付けると、翻訳情報の更新のタイミングを調べる。制御部15は、翻訳情報を更新できるタイミングに至るまで、更新要求をキューイングする。制御部15は、例えば、更新要求をストリーム毎にキューイングしてもよい。翻訳情報の更新の後、制御部15は、ライトバッファ141の解放を行う。
(4−6)トリム処理
トリム処理においては、制御部15は、受信したトリムコマンドをユーザデータ領域123に記録する。ユーザデータ領域123に書き込まれる最小の単位は、複数のトリムコマンドを収容可能である。制御部15は、トリムコマンドの記録の後、翻訳情報を更新し、対応する有効情報を更新する。単位情報のうちの全てのレコードが無効化される場合には、制御部15は、当該全てのレコードが無効化される単位情報を示す上位の翻訳情報のレコードを無効化する。
(5)ガベージコレクション
ガベージコレクションは、1つのブロックに含まれる有効なユーザデータ301を他のブロックにコピーし、その後、前記1つのブロックに格納された全ユーザデータ301を無効化する処理をいう。内部に記憶する全てのユーザデータ301がガベージコレクションによって無効化されたブロックは、フリーブロックとして管理される。
(5−1)ガベージコレクションの対象のブロックの選択
制御部15は、有効なユーザデータ301を記憶する1以上のブロックからガベージコレクションの対象のブロックを選択する。ガベージコレクションの対象のブロックを、GCブロックと表記する。GCブロックの選択方法は、遅延時間および書き込み倍率(Write Amplification)に影響する。制御部15は、例えば次の方法でGCブロックを選択する。
例えば、制御部15は、記憶している無効なユーザデータ301の数が最も大きいブロックをGCブロックとして選択する。この選択方法によれば、書き込み倍率を低減することができる。制御部15は、フリーブロックの枯渇が近くなった時に本選択方法でGCブロックを選択するように構成されてもよい。
例えば、制御部15は、記憶している無効なユーザデータ301の数が所定のしきい値を超えているブロックのうちからGCブロックを選択する。制御部15は、フリーブロックの枯渇が近くなった時に本選択方法でGCブロックを選択するように構成されてもよい。制御部15は、フリーブロックの数に応じてしきい値を変更してもよい。
例えば、制御部15は、書き換えられてからの経過時間が大きいブロックと書き換えられてからの経過時間が小さいブロックとを分類し、書き換えられてからの経過時間が大きいブロックのうち、無効なユーザデータ301が格納されているブロックをGCブロックとして選択する。制御部15は、アイドル時間中に本選択方法でGCブロックを選択するように構成されてもよい。
(5−2)GC比の決定
制御部15は、GCブロックを選択した後、GC比を更新する。GC比は、ユーザデータのNANDメモリ12への書き込み量に対するガベージコレクションによるコピー量の比の設定値である。制御部15は、ブロック内の有効なユーザデータ301の数をブロック内の無効なユーザデータ301の数で除算して得られる数値を、GC比に設定する。以降、制御部15は、ユーザデータのNANDメモリ12への書き込みとガベージコレクションによるコピーとの進行に応じて、GC比を随時更新する。
(5−3)コピー先のブロックの確保
制御部15は、フリーブロックのうち書き換え回数ができるだけ少ないブロックをコピー先のブロックとして選択する。例えば、制御部15は、2以上のフリーブロックから所定数のフリーブロックを候補としてランダムに選択し、選択された候補のうちの書き換え回数が最も少ないフリーブロックをコピー先のブロックとして選択してもよい。フリーブロックは、例えば、生成された順番がわかるようにリスト形式で管理される。制御部15は、最も古く生成された所定数のフリーブロックまたは最も新しく生成された所定数のフリーブロックを候補として選択してもよい。制御部15は、選択されたコピー先のブロックに、シーケンス番号をブロックに割り当てる。
(5−4)有効なユーザデータ301のコピー
制御部15は、有効情報に基づいて有効なユーザデータ301を特定する。制御部15は、特定された有効なユーザデータ301をコピー先のブロックにコピーするためのコピーコマンドを生成する。コピーコマンドは、論理アドレスとコピー元のユーザデータ301の位置を示す物理アドレスとを含む。制御部15は、コピーコマンドの実行の前に、コピー先の位置を示す物理アドレスを演算する。制御部15は、コピー先のブロックの先頭から順番にコピーによってユーザデータが格納されるように、コピー先の位置を示す物理アドレスを演算する。制御部15は、GC比に基づいてコピーコマンドの実行タイミングを調整する。制御部15は、コピーコマンドの実行を、コピーコマンドの生成よりも優先して実行する。制御部15は、コピーの後、GC比を更新する。制御部15は、当初の有効なユーザデータ301の数からコピー済みのユーザデータ301の数を減算して得られる値を、当初の無効なユーザデータ301の数からユーザデータの書き込み数を減算して得られる値で除算することによって、新しいGC比を演算する。
(5−5)翻訳情報および有効情報の更新
コピー後に、制御部15は、翻訳情報および有効情報を更新する。制御部15は、例えば、GCブロックに格納された全ての有効なユーザデータ301のコピーが完了した後に、翻訳情報および有効情報の更新を開始する。ガベージコレクションに伴う翻訳情報および有効情報の実行の優先度は、NANDメモリ12に対するアクセスを行う処理の実行の優先度よりも低く設定される。
例えば、コピー後、制御部15は、まず、コピー先のブロックにかかる有効情報を更新する。具体的には、制御部15は、コピー先のブロックにコピーされた全てのユーザデータ301が有効であるとして有効情報を更新する。続いて、制御部15は、翻訳情報がユーザデータ301のコピー元の位置を示していることを確認する。コピーが完了するまでの間に、ライトコマンドによるユーザデータの書き込みによって翻訳情報が更新される場合があるからである。翻訳情報がユーザデータ301のコピー元の位置を示している場合、制御部15は、ユーザデータ301のコピー元の位置をコピー先の位置を示すように翻訳情報を更新する。制御部15は、翻訳情報の更新よって単位情報の状態が非ダーティからダーティに遷移した場合、GCダーティ情報223を更新する。翻訳情報がユーザデータ301のコピー元の位置を示していない場合、制御部15は、翻訳情報の更新を行わず、該当するユーザデータ301を無効としてコピー先のブロックにかかる有効情報を更新する。制御部15は、コピーされた全てのユーザデータ301について翻訳情報および有効情報の更新を行った後、コピー元のブロックの有効情報を、全てのユーザデータ301が無効であるとして更新する。
制御部15は、有効情報を監視する。制御部15は、全てのユーザデータ301が無効として記録されたブロックがある場合には、そのブロックをフリーブロックとして管理する。具体的には、制御部15は、全てのユーザデータ301が無効として記録されたブロックを、フリーブロックリストに追加する。ブロックが追加される位置は、フリーブロックリストの末尾でなくてもよい。例えば、制御部15は、フリーブロックリストの末尾に記録されたブロックと追加対象のブロックとの間で書き換え回数を比較する。フリーブロックリストの末尾に記録されたブロックの書き換え回数が追加対象のブロックの書き換え回数よりも多い場合、制御部15は、追加対象のブロックをフリーブロックリストの末尾に記録されたブロックの1つ前の位置に追加する。フリーブロックリストの末尾に記録されたブロックの書き換え回数が追加対象のブロックの書き換え回数よりも少ない場合、制御部15は、追加対象のブロックをフリーブロックリストの末尾に記録されたブロックの後の位置に追加する。書き換え回数に基づく完全なソートをおこなわないのは、消去の実行間隔を延ばすことによってNANDメモリ12の寿命を延命するためである。
(6)リード処理
リード処理には、キャッシュを用いたリードと、FUAリードとがある。リードの種類は、リードコマンドによって指定可能である。FUAリードは、リードコマンドによって指定された範囲の論理アドレスがキャッシュに残っている場合にはフラッシュし、その後、NANDメモリ12のページバッファキャッシュの無効化要求を発行し、その後、キャッシュを用いたリードを実行する読み出しである。フラッシュの際にライトバッファ141にデータが存在する場合には、制御部15は、ライトバッファ141のフラッシュを実行する。キャッシュを用いたリードは、ライトコマンドによって指定された範囲の論理アドレスの翻訳と、NANDコントローラ13への読み出し要求の送信と、NANDコントローラ13から送られてきたユーザデータ301のリードバッファ142への格納と、リードバッファ142に格納されたユーザデータ301のホストへの送信と、を含む。
(6−1)リードキャッシュ
リードキャッシュとしては、ページバッファキャッシュと、リードバッファ142と、の2種類が存在する。ページバッファキャッシュは、NANDメモリ12を構成するチップの内部に具備される。NANDコントローラ13は、連続して同じ物理アドレスからユーザデータ301を読み出す際には、NANDメモリ12にリードコマンドを送信せず、ページバッファキャッシュに格納されているユーザデータ301を読み出す。リードバッファ142は、FIFOのルールに従ってデータが入出力される。
(7)キャッシュ領域143内のキャッシュラインの置換
(7−1)第1の置換
制御部15は、ライト処理またはリード処理の際にキャッシュラインを空ける場合、ガベージコレクションによってダーティとなったキャッシュラインを優先的に空ける。具体的には、制御部15は、まず、GCダーティ情報223を参照する。そして、制御部15は、GCダーティ情報223が示す単位情報のうちの最も古い単位情報を、ログストレージ領域124に書き戻し、キャッシュ領域143から削除する。ガベージコレクションによってダーティとなった単位情報が存在しない場合には、制御部15は、キャッシュ領域143にキャッシュされている単位情報をランダムに選択する。制御部15は、乱数を発生させ、発生させた乱数を用いることによって単位情報を選択する。制御部15は、選択された単位情報がダーティであるか否かを、ユーザダーティ情報222を参照することによって判定する。選択された単位情報がダーティでない場合、制御部15は、選択された単位情報をキャッシュ領域143から削除する。選択された単位情報がダーティである場合、制御部15は、ユーザダーティ情報222が示す単位情報のうちの最も古い単位情報を、ログストレージ領域124に書き戻し、キャッシュ領域143から削除する。
(7−2)第2の置換
ガベージコレクションを行うためにキャッシュラインを空ける場合、制御部15は、次のようにキャッシュラインを置換する。即ち、制御部15は、GCダーティ情報223が示す単位情報の数に上限値を設定する。GCダーティ情報223が示す単位情報の数が上限値に達している場合には、制御部15は、GCダーティ情報223が示す単位情報のうちの最も古い単位情報を、ログストレージ領域124に書き戻し、キャッシュ領域143から削除する。GCダーティ情報223が示す単位情報の数が上限値に達していない場合には、制御部15は、キャッシュ領域143にキャッシュされている単位情報をランダムに選択する。選択された単位情報がダーティでない場合、制御部15は、選択された単位情報をキャッシュ領域143から削除する。選択された単位情報がダーティである場合、制御部15は、ユーザダーティ情報222が示す単位情報のうちの最も古い単位情報を、ログストレージ領域124に書き戻し、キャッシュ領域143から削除する。
以上述べたように、第1の実施形態においては、翻訳情報は、複数の階層に階層化されて管理される。そして、第2階層に属する翻訳情報である第2テーブル202aのサイズと、第2階層に属する翻訳情報である第3テーブル203aのサイズとが等しい。これにより、各テーブル202a、203aのサイズの管理が簡単になる。また、第2テーブル202aおよび第3テーブル203aを、ログストレージ領域124に混ぜて格納することが可能である。即ち、第2テーブル202aを格納する領域と第3テーブル203aを格納する領域とを分けて管理する必要がない。また、第2テーブル202aおよび第3テーブル203aを1つのページに混ぜて格納することが可能である。また、各ページに格納可能なテーブルの数を一定に維持することが可能である。このように、第1の実施形態によれば、翻訳情報の管理が簡単であるため、翻訳情報の管理コストが安く、利便性が高い。
なお、以上の説明においては、第2階層に属する翻訳情報である第2テーブル202aのサイズと第3階層に属する翻訳情報である第3テーブル203aのサイズとが等しい、として説明した。翻訳情報は、4以上の階層に階層化され、任意の2つの階層の夫々に属する翻訳情報のサイズが互いに等しくなるように構成されてもよい。例えば、第i階層に属する翻訳情報のサイズと、第j階層に属する翻訳情報のサイズとが等しくなるように構成された場合、第i階層に属する翻訳情報と第j階層に属する翻訳情報とを同じ領域に混ぜて格納することが可能である。
また、各有効ビットマップ212aのサイズは、第2テーブル202aおよび第3テーブル203aのサイズと等しい。これにより、有効ビットマップ212a、第2テーブル202aおよび第3テーブル203aを、ログストレージ領域124に混ぜて格納することが可能である。また、有効ビットマップ212a、第2テーブル202aおよび第3テーブル203aを、1つのページに混ぜて格納することが可能である。各ページに格納可能な単位情報の数を一定に維持することが可能である。
(第2の実施形態)
第2の実施形態は、第1の実施形態のメモリシステム1に適用することが可能である。第2の実施形態によれば、制御部15は、2以上のプロセッサを備えて構成される。
図9は、第2の実施形態の制御部15の構成を示す図である。本図の例によれば、制御部15は、複数(ここでは3つ)のプロセッサ151を備える。3つのプロセッサ151のうちの1つは、他の2つのプロセッサ151に対して動的にタスクを分配する、ダイナミックタスクスケジューラとして機能する。ダイナミックタスクスケジューラとしてのプロセッサ151を、マスタプロセッサ151aと表記する。マスタプロセッサ151aからタスクを分配される2つのプロセッサ151を、スレーブプロセッサ151bと表記する。なお、タスクは、メモリシステム1の制御を構成する。メモリシステム1の制御は、複数のタスクによって構成される。1つの処理は、1つのタスクによって構成されてもよい。1つの処理は、複数のタスクによって構成されてもよい。複数の処理は1つのタスクによって構成されてもよい。
図10は、第2の実施形態のRAM14の構成を示す図である。図3において説明した構成についてはここでは省略する。第2の実施形態によれば、RAM14は、プログラムロード領域144およびワークエリア145を備える。プログラムロード領域144には、1以上のタスクプログラム241がロードされる。タスクプログラム241は、1つのタスクを実現するためのプログラムコードの集合である。
1つのタスクプログラム241は、複数のプロセッサ151によって同時に実行されてもよい。ワークエリア145は、実行毎に確保されたり解放されたりするデータエリア242を備える。各データエリア242には、タスクの実行のために使用される値が格納される。
例えば、翻訳情報を更新するタスクは、1つのタスクプログラム241によって実現する。翻訳情報の更新のための1つのタスクプログラム241に対し、更新要求毎に、異なるデータエリア242が確保される。各データエリア242には、更新要求に含まれる論理アドレス、旧物理アドレス、および新物理アドレスなどが、タスクの実行のために使用される値として格納される。翻訳情報を更新するタスクのための1つのタスクプログラム241は、複数のプロセッサ151によって同時に実行され、当該翻訳情報を更新するタスクのための1つのタスクプログラム241を同時に実行する複数のプロセッサ151は、互いに異なるデータエリア242を使用するように構成される。これにより、制御部15は、互いに異なる複数の更新要求を並行して処理することが可能である。
例えば、コマンドを解析するタスクは、1つのタスクプログラム241によって実現する。コマンドの解析のための1つのタスクプログラム241に対し、コマンド毎に異なるデータエリア242が確保される。各データエリア242には、コマンドの識別情報およびコマンドに含まれるパラメータなどが、タスクの実行のために使用される値として格納される。コマンドを解析するタスクのための1つのタスクプログラム241は、複数のプロセッサ151によって同時に実行され、当該コマンドを解析するタスクのための1つのタスクプログラム241を同時に実行する複数のプロセッサ151は、互いに異なるデータエリア242を使用する。これにより、制御部15は、互いに異なる複数のコマンドを並行して解析することが可能である。
1つのタスクプログラム241に対して実行毎に異なる複数のデータエリア242が割り当て可能にメモリシステム1が構成されているので、実行毎にタスクプログラム241をプログラムロード領域144にロードする必要がない。制御部15は、スタートアップ処理において、全てのタスクプログラム241をプログラムロード領域144にロードする。制御部15は、複数のタスク間でのデータの授受を、データエリア242を用いて実行することができる。
マスタプロセッサ151aは、マスタキュー152aを備える。各スレーブプロセッサ151bは、スレーブキュー152bを備える。マスタキュー152aには、実行待ちのタスクが登録される。具体的には、マスタキュー152aには、実行待ちのタスクを実現するタスクプログラム241を示す識別情報が、当該タスクの実行のために使用されるデータエリア242を指定する情報と対応付けられて登録される。マスタプロセッサ151aは、マスタキュー152aに登録された1以上のタスクを、2つのスレーブプロセッサ151bに分配する。マスタプロセッサ151aは、マスタキュー152aに登録されたタスクを、いずれかのスレーブプロセッサ151bに具備されるスレーブキュー152bに登録する。各スレーブプロセッサ151bは、自身に具備されるスレーブキュー152bに登録されたタスクを実行する。言い換えると、各スレーブプロセッサ151bは、自身に具備されるスレーブキュー152bに登録されている識別情報が示すタスクプログラム241を、当該識別情報に対応付けられている情報が指定するデータエリア242を使用しながら実行する。
タスクを分配する手法は任意に設計される。例えば、各スレーブキュー152bには、登録可能なタスクの数に上限値が設定される。マスタプロセッサ151aは、上限値に達するまで、各スレーブキュー152bにタスクを登録する。各スレーブプロセッサ151bは、自身に具備されるスレーブキュー152bに登録されたタスクを実行完了する毎に、マスタプロセッサ151aに完了通知を送信する。完了通知を受信したマスタプロセッサ151aは、完了通知を送信したスレーブプロセッサ151bに具備されるスレーブキュー152bに、新たなタスクを登録する。
なお、1つのタスクは、別のタスクを生成してもよい。当該別のタスクは、マスタキュー152aに登録されたのち、何れかのスレーブキュー152bに分配される。1つのタスクは、別のタスクを実行させるスレーブプロセッサ151bを指定可能に構成されてもよい。その場合には、当該別のタスクは、マスタキュー152aを経ることなく、指定されたスレーブプロセッサ151bに具備されるスレーブキュー152bに直接に登録されてもよい。また、別のタスクを実行させるスレーブプロセッサ151bが指定された場合には、指定されたスレーブプロセッサ151bに具備されるスレーブキュー152bに登録されているタスクの数が上限値に達しているか否かにかかわらず、当該別のタスクが指定されたスレーブプロセッサ151bに具備されるスレーブキュー152bに登録されてもよい。
このように、マスタプロセッサ151aは、複数のスレーブプロセッサ151bにタスクを動的に分散させることができる。
複数のスレーブプロセッサ151bの夫々に対し、個別に電源を供給したり電源の供給を停止したりすることが可能に構成されてもよい。例えば、メモリシステム1は、通常モードと、当該通常モードよりも電力消費が低い低消費電力モードと、の2つのモードで動作が可能に構成される。電源制御部は、通常モードにおいては、2つのスレーブプロセッサ151bに電源を供給する。電源制御部は、2つのスレーブプロセッサ151bのうちの1つのみに電源を供給する。電源制御部は、ハードウェア、ソフトウェア、または両者の組み合わせによって構成される。例えば、マスタプロセッサ151aは、電源制御部として機能する。マスタプロセッサ151aは、通常モードにおいては2つのスレーブプロセッサ151bにタスクを分配する。マスタプロセッサ151aは、低消費電力モードにおいては、2つのスレーブプロセッサ151bのうちの電源が供給されているスレーブプロセッサ151bのみにタスクを供給する。このように、マスタプロセッサ151aはタスクの登録先を動的に決定するので、制御部15は、電源が供給されているスレーブプロセッサ151bの数が変化しても、メモリシステム1の制御を継続することができる。
なお、マスタプロセッサ151aは、マスタキュー152aのほかにスレーブキュー152bを具備してもよい。マスタプロセッサ151aは、自身が備えるスレーブキュー152bにタスクを分配してもよい。
第2の実施形態においては、翻訳情報および有効情報の一貫性を維持するために、翻訳情報を更新するタスクおよび有効情報を更新するタスクは、予め決められたスレーブプロセッサ151bにおいて実行される。
例えば、翻訳情報の場合、メモリシステム1の論理アドレス空間が2つの論理アドレス範囲に分割される。翻訳情報を更新するタスクを登録するタスクが、何れかのプロセッサ151において実行される。翻訳情報を更新するタスクを登録するタスクは、2つの論理アドレス範囲のうちの第1の論理アドレス範囲に含まれる論理アドレスについての更新要求を、2つのスレーブプロセッサ151bのうちの予め決められた一のスレーブプロセッサ151bに実行させる。また、翻訳情報を更新するタスクを登録するタスクは、2つの論理アドレス範囲のうちの第2の論理アドレス範囲に含まれる論理アドレスについての更新要求を、2つのスレーブプロセッサ151bのうちの他のスレーブプロセッサ151bに実行させる。翻訳情報を更新するタスクが複数、1つのスレーブキュー152bに登録されている場合には、そのスレーブキュー152bを備えるスレーブプロセッサ151bは、翻訳情報を更新する各タスクを、スレーブキュー152bに登録された順番で実行することとする。このように、翻訳情報の更新に関し、担当の論理アドレス範囲がスレーブプロセッサ151b毎に予め設定されていることによって、翻訳情報の一貫性が維持される。
例えば、有効情報の場合、メモリシステム1の物理アドレス空間が2つの部分空間に分割される。有効情報を更新するタスクを登録するタスクが、何れかのプロセッサ151において実行される。有効情報を更新するタスクを登録するタスクは、2つの物理アドレス範囲のうちの第1の物理アドレス範囲に含まれる論理アドレスについての更新要求を、2つのスレーブプロセッサ151bのうちの予め決められた一のスレーブプロセッサ151bに実行させる。また、有効情報を更新するタスクを登録するタスクは、2つの物理アドレス範囲のうちの第2の物理アドレス範囲に含まれる論理アドレスについての更新要求を、2つのスレーブプロセッサ151bのうちの他のスレーブプロセッサ151bに実行させる。有効情報を更新するタスクが複数、1つのスレーブキュー152bに登録されている場合には、そのスレーブキュー152bを備えるスレーブプロセッサ151bは、有効情報を更新する各タスクを、そのスレーブキュー152bに登録された順番で実行することとする。このように、有効情報の更新に関し、担当の物理アドレス範囲がスレーブプロセッサ151b毎に予め設定されていることによって、有効情報の一貫性が維持される。
例えば、ガベージコレクションにおいては、コピーコマンドを生成するタスクを登録するタスクが実行される。コピーコマンドを生成するタスクを登録するタスクは、GCブロックの物理アドレス範囲を、2つの物理アドレス範囲に分割する。コピーコマンドを生成するタスクを登録するタスクは、2つの物理アドレス範囲のうちの第1の物理アドレス範囲の有効ビットマップ212bを、2つのスレーブプロセッサ151bのうちの予め決められた一のスレーブプロセッサ151bに渡し、当該一のスレーブプロセッサ151bにコピーコマンドを生成するタスクを登録する。当該一のスレーブプロセッサ151bは、登録されたタスクに基づいてコピーコマンドを生成する際には、第1の物理アドレス範囲の有効ビットマップ212bに基づいてコピー対象の有効なユーザデータ301を特定する。また、コピーコマンドを生成するタスクを登録するタスクは、2つの物理アドレス範囲のうちの第2の物理アドレス範囲の有効ビットマップ212bを、2つのスレーブプロセッサ151bのうちの他のスレーブプロセッサ151bに渡し、当該他のスレーブプロセッサ151bにコピーコマンドを生成するタスクを登録する。当該他のスレーブプロセッサ151bは、登録されたタスクに基づいてコピーコマンドを生成する際には、第2の物理アドレス範囲の有効ビットマップ212bに基づいてコピー対象の有効なユーザデータ301を特定する。
このように、第2の実施形態においては、メモリシステム1は、複数のプロセッサ151を備える。各プロセッサ151は、論理アドレスの範囲が夫々設定される。各プロセッサ151は、翻訳情報のうちの、自身に設定された論理アドレスの範囲に含まれる論理アドレスにかかるレコードの更新を実行する。これにより、翻訳情報の更新を複数のプロセッサ151で並行して実行することが可能となるので、翻訳情報の更新を1つのプロセッサ151のみで実行する場合に比べ、翻訳情報を高速に更新することができる。また、翻訳情報の一貫性を損なうことなく翻訳情報を高速に更新することができる。
また、各プロセッサ151は、物理アドレスの範囲が夫々設定される。各プロセッサ151は、自身に設定された物理アドレスの範囲の有効情報のレコードの更新を実行する。これにより、有効情報の更新を複数のプロセッサ151で並行して実行することが可能となるので、有効情報の更新を1つのプロセッサ151のみで実行する場合に比べ、有効情報を高速に更新することができる。また、有効情報の一貫性を損なうことなく有効情報を高速に更新することができる。
また、1つのプロセッサ151は、ガベージコレクションの際に、複数のプロセッサ151にコピーコマンドを生成する処理を分担させる。具体的には、1つのプロセッサ151は、GCブロックを複数の領域に分割する。各プロセッサ151は、分割された領域の1つに格納されている有効なユーザデータ301を特定し、特定した有効なユーザデータ301をコピーするためのコピーコマンドを生成する。これにより、GCブロックに格納されている有効なユーザデータ301が多くても、高速にコピーコマンドを作成することができる。
(第3の実施形態)
第3の実施形態は、第1の実施形態および第2の実施形態の何れのメモリシステム1に適用することが可能である。第3の実施形態によれば、メモリシステム1は、ソフトウェア定義型(Software Defined)プラットフォームを備える。ソフトウェア定義型プラットフォームは、例えば、メモリシステム1の機能をハードウェアの制御から切り離し、ソフトウェアにより制御を実行する。
第3の実施形態においては、第2の実施形態と同様に、制御部15は、複数(ここでは3つ)のプロセッサ151を備える。3つのプロセッサ151は、1つのマスタプロセッサ151aおよび2つのスレーブプロセッサ151bを含む。
メモリシステム1の構成のうち、ホストインタフェース部11、NANDコントローラ13、RAM14、および3つのプロセッサ151は、ハードウェアに含まれる。
図11は、第3の実施形態のRAM14の構成を示す図である。図3において説明した構成についてはここでは省略する。第3の実施形態によれば、RAM14は、プログラムロード領域144およびワークエリア145を備える。プログラムロード領域144には、2以上のアプリケーションプログラム251と、制御プログラム252とがロードされる。各アプリケーションプログラム251は、1以上のタスクプログラム241によって構成される。ワークエリア145は、実行毎に確保されたり解放されたりするデータエリア242を備える。
第3の実施形態のソフトウェア定義型プラットフォームは、制御プログラム252、ハードウェア、およびNANDメモリ12を含む。ソフトウェア定義型のSSDプラットフォームを用いることで、SSDの機能をハードウェアの制御から切り離して、ソフトウェアの制御が可能である。第3の実施形態において、プラットフォームとは、ハードウェア又はソフトウェアを動作させるために必要な基盤となるハードウェア、オペレーティングシステム(OS)、ミドルウェア、それらの組み合わせ、設定、環境などの総体を意味する。
各プロセッサ151は、制御プログラム252を実行する。マスタプロセッサ151aは、マスタキュー152aを備える。スレーブプロセッサ151bは、スレーブキュー152bを備える。
制御プログラム252は、ハードウェアの違いを吸収する共通モジュールである。具体的には、制御プログラム252は、各アプリケーションプログラム251がハードウェアに非依存となるように、各アプリケーションプログラム251とハードウェアとの間で基本動作を実現する。非依存とは、少なくとも、協働する他方のソフトウェア又はハードウェアが取り替えられたとしても、引き続き利用可能な性質をいう。そのため、制御プログラム252は、API(Application Program Interface)に準拠している。
例えば、制御プログラム252は、アプリケーションプログラム251によって特定のインタフェースにしたがって発行されたコマンドを受け、コマンドに基づいてハードウェアおよびNANDメモリ12に対する制御を実行する。制御プログラム252は、タスクのスケジューリングを行う。マスタプロセッサ151aは、2つのスレーブキュー152bの状態を監視し、マスタキュー152aに登録されているタスクを、2つのスレーブキュー152bに分配する。各スレーブプロセッサ151bは、夫々のスレーブキュー152bに登録されているタスクを実行する。
RAM14内における、制御プログラム252の格納位置および各アプリケーションプログラム251の格納位置は、メモリシステム1の起動時に決定され、その後起動中は再配置されない。
各アプリケーションプログラム251は、例えば、ファームウェアのような各種のソフトウェアである。各アプリケーションプログラム251は、ファームウェア以外のソフトウェアを含んで構成されてもよい。
第3の実施形態においては、各アプリケーションプログラム251は、単独でSSDの機能を実現することができる。2以上のアプリケーションプログラム251の夫々は、コマンドを解析するタスクを実現するタスクプログラム241、翻訳情報を更新するタスクを実現するタスクプログラム241、有効情報を更新するタスクを実現するタスクプログラム241、などを備えているため、2以上のアプリケーションプログラム251の何れを用いても、SSDの機能を実現することができる。
同一種のタスクを実現するタスクプログラム241は、アプリケーションプログラム251毎に異なっていてもよい。例えば、第1のアプリケーションプログラム251に含まれる、リード処理を実現するタスクプログラム241は、LBAを用いた位置指定に対応することができ、第2のアプリケーションプログラム251に含まれる、リード処理を実現するタスクプログラム241は、KVS(Key-Value Store)を用いた位置指定に対応することができる。また、例えば、第1のアプリケーションプログラム251に含まれる、翻訳情報の管理を実現するタスクプログラム241と、第2のアプリケーションプログラム251に含まれる、翻訳情報の管理を実現するタスクプログラム241と、では、翻訳情報の管理単位が異なる。また、例えば、プロセッサ151からRAM14へのアクセスは、暗号化される。例えば、第1のアプリケーションプログラム251の制御の下でプロセッサ151がRAM14にアクセスする際の暗号化キーと、第2のアプリケーションプログラム251の制御の下でプロセッサ151がRAM14にアクセスする際の暗号化キーと、が異なる。なお、暗号化キーは、アプリケーションプログラム251毎に異なる。暗号化キーは、タスクプログラム241毎に異なっていてもよい。
なお、例えば、制御プログラム252は、メモリシステム1のメーカによって作成され、初期的にメモリシステム1に格納される。各アプリケーションプログラム251は、初期的にメモリシステム1に格納されなくてもよい。2以上のアプリケーションプログラム251のうちの一部または全部は、顧客、メモリシステム1の購入者、またはソフトウェア開発者など、メーカとは異なる者によって作成されてもよいし格納されてもよい。
ホスト2は、2以上のアプリケーションプログラム251のうちの、使用するアプリケーションプログラム251を選択することができる。
例えば、メモリシステム1とホスト2との間の通信のインタフェース規格としてNVMeが採用される場合において、ホスト2がメモリシステム1内にネームスペースを生成する際に、ホスト2は、2以上のアプリケーションプログラム251のうちの、使用するアプリケーションプログラム251を指定する。制御部15は、ホスト2とネームスペースとの対応関係を記憶し、ホスト2からコマンドを受信した際、コマンドの送信元のホスト2またはアクセス先のネームスペースに応じて、対応するアプリケーションプログラム251を特定する。
このように、第3の実施形態によれば、メモリシステム1は、複数のアプリケーションプログラム251をRAM14にロードする。メモリシステム1は、複数のアプリケーションプログラム251のうちから、使用されるアプリケーションプログラム251が選択可能に構成される。これにより、例えばメモリシステム1に複数のホスト2が接続される場合、メモリシステム1は、ホスト2毎に異なる動作を行うことが可能となる。
また、メモリシステム1は、ネームスペースの作成時にアプリケーションプログラム251を選択可能に構成される。これにより、メモリシステム1は、ネームスペース毎に異なる動作を行うことが可能となる。
(第4の実施形態)
第4の実施形態は、第1〜第3の実施形態の何れのメモリシステム1に適用することが可能である。第4の実施形態によれば、メモリシステム1は、互いに独立した複数の論理アドレス空間が構築可能に構成される。互いに独立した複数の論理アドレス空間の夫々は、例えばネームスペースである。
制御部15は、ホスト2からの生成要求に応じて新規のネームスペースを追加する。また、制御部15は、ホスト2からの削除要求に応じて既存のネームスペースを削除する。制御部15は、全ネームスペースの合計サイズがメモリシステム1の表記容量に至るまで、新規のネームスペースを追加することができる。
図12は、第4の実施形態のRAM14の構成を示す図である。第4の実施形態においては、RAM14には第1テーブル記憶領域146が確保される。制御部15は、ネームスペース毎に第1テーブル201bを管理する。第1テーブル記憶領域146は、ネームスペース毎の第1テーブル201bを記憶する。
制御部15は、ホスト2からの生成要求に応じて新規の第1テーブル201bを生成する。また、制御部15は、ホスト2からの削除要求に応じて、削除要求によって指定されたネームスペースに対応する第1テーブル201bを削除する。ネームスペースの削除は、トリムの場合と同様に、有効情報の更新を伴う。制御部15は、各第1テーブル201bを連続した領域に格納する。制御部15は、各第1テーブル201bの格納位置をネームスペースと対応付けて管理する。
各第1テーブル201bの管理単位は、ネームスペース間で同一であってもよいし、ネームスペース毎に異なっていてもよい。ここでは一例として、各第1テーブル201bの管理単位は、ネームスペース間で同一であることとする。第1テーブル記憶領域146のサイズは、全ネームスペースの合計サイズが上限に至った場合における全ての第1テーブル201bの合計サイズの、少なくとも2倍のサイズである。
図13〜図19は、各第1テーブル201bの格納の様態の変化を説明する図である。メモリシステム1が3つのネームスペース(NS#0、NS#1、およびNS#2)を有する場合、例えば図13に示すように、各第1テーブル201bは、第1テーブル記憶領域146の先頭から順番に配置される。各第1テーブル201bは、各第1テーブル201bの間にスペースを空けずに配置される。
制御部15は、図13の状態においてNS#1の削除要求を受信した場合、図14に示すように、NS#1の第1テーブル201bを削除する。なお、制御部15は、NS#1の第1テーブル201bの削除の前に、有効情報を更新する。具体的には、制御部15は、NS#1を指定して書き込まれたユーザデータ301を全て無効化する。また、制御部15は、NS#1の第1テーブル201bの削除の前に、NS#1の翻訳情報のうちの下位の階層に属する翻訳情報を全て無効化する。
続いて、制御部15は、第1テーブル201bの削除によって生じたスペースを詰める作業を行う。例えば、図14の状態においては、制御部15は、NS#2の第1テーブル201bを再配置する。再配置は、次のようにして実行される。制御部15は、図15に示すように、再配置対象の第1テーブル201bであるNS#2の第1テーブル201bを、第1テーブル記憶領域146の空き領域に複製する。複製された第1テーブル201bを、第1テーブル201cと表記する。第1テーブル記憶領域146は、各第1テーブル201bの合計サイズの最大値の2倍以上のサイズを有するので、第1テーブル記憶領域146においては、第1テーブル201bのサイズの大きさに関係なく当該第1テーブル201bを複製することが可能である。また、各第1テーブル201bは、第1テーブル記憶領域146の先頭から詰めて配置されるので、第1テーブル記憶領域146の中央から末尾までの領域が第1テーブル201bの複製が格納される領域として使用可能である。
続いて、制御部15は、図16に示すように、NS#2の第1テーブル201bを第1テーブル記憶領域146から削除する。そして、制御部15は、図17に示すように、NS#2の第1テーブル201cを、NS#0の第1テーブル201bの末尾に連続する位置に、NS#2の第1テーブル201bとして複製する。そして、制御部15は、図18に示すように、NS#2の第1テーブル201cを第1テーブル記憶領域146から削除し、NS#2の第1テーブル201bの再配置を完了する。
なお、第1テーブル201bの削除によって生じたスペースを詰めるために再配置するべき第1テーブル201bが複数存在する場合には、制御部15は、当該複数の第1テーブル201bの夫々を順次再配置する。制御部15は、再配置するべき複数の第1テーブル201bを、スペースに近い第1テーブル201bから順番に再配置する。
制御部15は、図18の状態においてNS#3の追加要求を受信した場合、NS#3の第1テーブル201bを、図19に示すように、NS#2の第1テーブル201bの末尾に連続する位置に生成する。
なお、制御部15は、スペースを詰める作業を完了するまで、新規のネームスペースの追加を禁止する。また、再配置対象の第1テーブル201bは、再配置が完了するまで、二重化されている。制御部15は、二重化された第1テーブル201bにかかるネームスペースに対するアクセスを実行する場合において、翻訳情報を更新する際、第1テーブル201bおよび第1テーブル201cの両方を更新する。
このように、第4の実施形態によれば、メモリシステム1は、複数の論理アドレス空間を外部に提供する。RAM14は、第1テーブル記憶領域146が確保される。制御部15は、論理アドレス毎の第1テーブル201bを第1テーブル記憶領域146に格納する。制御部15は、ホスト2からの削除要求に応じて第1テーブル201bを削除する。制御部15は、削除によって2つの第1テーブル201bの間に生じた空き領域を詰める。第1の論理アドレス空間のための第1テーブル201bと、第2の論理アドレス空間のための第1テーブル201bと、の間に第1の空き領域がある場合、制御部15は、第1の空き領域をなくすために、第2の論理アドレス空間のための第1テーブル201bを再配置する。具体的には、制御部15は、第2の論理アドレス空間のための第1テーブル201bを、第2の空き領域に複製する。そして、制御部15は、複製元の第1テーブル201bを削除する。そして、制御部15は、第2の論理アドレス空間のための第1テーブル201cを、第1の空き領域の第1の論理アドレス空間のための第1テーブル201bに連続する位置に、さらに複製する。そして、制御部15は、第2の論理アドレス空間のための第1テーブル201cを削除する。これにより、制御部15は、論理アドレス毎の第1テーブル201bを、間に空き領域を発生させることなく第1テーブル記憶領域146に格納することができる。したがって、第1テーブル記憶領域146を効率的に使用することが可能となる。
また、第1テーブル記憶領域146は、第1テーブル201bの合計サイズの最大値の少なくとも2倍のサイズを有する。これにより、前述した再配置が可能となる。
また、制御部15は、第1テーブル201bの再配置中に当該第1テーブル201bを更新する場合には、当該第1テーブル201bおよび第1テーブル201cの両方を更新する。これにより、翻訳情報の一貫性が維持される。
(第5の実施形態)
第5の実施形態は、第1〜第4の実施形態の何れのメモリシステム1に適用することが可能である。
図20は、第5の実施形態のログストレージ領域124を示す図である。図示するように、ログストレージ領域124には、ホットストレージ124aおよびコールドストレージ124bが確保されている。
ホットストレージ124aは、FIFOのルールに従って単位情報が入出力される。制御部15は、ダーティな単位情報をホットストレージ124aに書き込む。制御部15は、ホットストレージ124aから単位情報をFIFOのルールに従って取り出し、取り出した単位情報のうちの有効な単位情報をコールドストレージ124bに書き込む。有効な単位情報とは、第1テーブル201bまたはブロック管理情報211bによって直接に示されている単位情報か、または第1テーブル201bによって示されている第2テーブル202aによって示されている単位情報である。
なお、ホットストレージ124aおよびコールドストレージ124bのサイズは可変に構成されてもよい。例えば制御部15は、ローカリティが高いときにはホットストレージ124aのサイズを小さくし、コールドストレージ124bのサイズを大きくする。そして、制御部15は、ローカリティが低いときにはコールドストレージ124bのサイズを小さくし、ホットストレージ124aのサイズを大きくする。なお、例えば、制御部15は、出力される単位情報のうちの有効な単位情報の割合を測定する。制御部15は、測定された割合を、ローカリティの測定値として使用することができる。
このように、第5の実施形態によれば、ログストレージ領域124は、ホットストレージ124aとコールドストレージ124bとを備え、制御部15は、更新されてからの経過時間に応じて単位情報をホットストレージ124aとコールドストレージ124bとの何れかに格納する。なお、ログストレージ領域124は、3つ以上の領域を備え、制御部15は、更新されてからの経過時間に応じて単位情報を3つ以上の領域の何れかに格納してもよい。
(第6の実施形態)
図21は、メモリシステム1の実装例を示す図である。メモリシステム1は、例えばサーバシステム1000に実装される。サーバシステム1000は、ディスクアレイ2000とラックマウントサーバ3000とが通信インタフェース4000によって接続されて構成される。通信インタフェース4000の規格としては任意の規格が採用可能である。ラックマウントサーバ3000は、サーバラックに1以上のホスト2がマウントされて構成される。複数のホスト2は、通信インタフェース4000を介してディスクアレイ2000にアクセスすることができる。
また、ディスクアレイ2000は、サーバラックに1以上のメモリシステム1がマウントされて構成される。ディスクアレイ2000は、メモリシステム1の他に、1以上のハードディスクユニットがマウントされてもよい。各メモリシステム1は、各ホスト2からのコマンドを実行することができる。また、各メモリシステム1は、第1または第2の実施形態が採用された構成を有している。これにより、各メモリシステム1は、簡単にアトミックライトを実行することができる。
なお、ディスクアレイ2000においては、例えば、各メモリシステム1は、1以上のハードディスクユニットのキャッシュとして使用されてもよい。ディスクアレイ2000は、1以上のメモリシステム1を利用してRAIDを構築するストレージコントローラユニットがマウントされてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。