以下、実施の形態について図面を参照して説明する。
まず図1を参照して、実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。情報処理システム1は、ホストデバイス2(以下、ホスト2と称する)と、メモリシステム3とを含む。
ホスト2は情報処理装置である。ホスト2は、大量且つ多様なデータをメモリシステム3に保存するストレージサーバであってもよいし、パーソナルコンピュータであってもよい。
メモリシステム3は、NAND型フラッシュメモリのような不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。メモリシステムはストレージデバイスとも称される。メモリシステムは、例えばソリッドステートドライブ(SSD)として実現される。
メモリシステム3は、ホスト2のストレージとして使用され得る。メモリシステム3は、ホスト2に内蔵されてもよいし、ホスト2にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とメモリシステム3とを接続するためのインタフェースは、SCSI(Small Computer System Interface)、Serial Attached SCSI(SAS)、ATA(AT Attachment)、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等の規格に準拠する。
メモリシステム3は、例えば、コントローラ4、NAND型フラッシュメモリ5、およびダイナミックランダムアクセスメモリ(DRAM)6を備える。コントローラ4は、System-on-a-chip(SoC)のような回路によって実現され得る。コントローラ4は、スタティックランダムアクセスメモリ(SRAM)を内蔵していてもよい。また、DRAM6がコントローラ4に内蔵されていてもよい。
DRAM6等のRAMには、例えば、ファームウェア(FW)21の格納領域、論理物理アドレス変換テーブル22のキャッシュ領域、ネームスペース応答管理テーブル(NS応答管理テーブル)23、コマンド応答管理テーブル24、ゾーンディスクリプタ25、およびライト管理テーブル26の格納領域が設けられる。
FW21は、コントローラ4の動作を制御するためのプログラムである。FW21は、例えばNAND型フラッシュメモリ5からDRAM6にロードされる。
論理物理アドレス変換テーブル22は、論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。
NS応答管理テーブル23は、ライトコマンド(書き込み要求)に対して応答すべき時間に関する情報を、例えばネームスペース毎に管理する。
コマンド応答管理テーブル24は、受け付けたライトコマンドに応じた処理を強制的に開始すべき時間を管理する。
ゾーンディスクリプタ25は、各ゾーンの構成や状態を示す情報を含む。
ライト管理テーブル26は、受け付けたライトコマンドに関する情報を管理する。
NAND型フラッシュメモリ5は複数のブロックB0~Bm-1を含む。ブロックB0~Bm-1のそれぞれは複数のページ(ここでは、ページP0~Pn-1)を含む。ブロックB0~Bm-1はデータ消去動作の最小単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。ページP0~Pn-1のそれぞれは、単一のワード線に接続された複数のメモリセルを含む。ページP0~Pn-1は、データ書き込み動作およびデータ読み出し動作の単位として機能する。なお、ワード線がデータ書き込み動作およびデータ読み出し動作の単位として機能してもよい。
各ブロックB0~Bm-1に対するプログラム/イレーズサイクル数(P/Eサイクル数)には上限があり、最大P/Eサイクル数と称される。あるブロックの1回のP/Eサイクルは、このブロック内のすべてのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作とを含む。
コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして機能する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、および(2)ページ単位のリード/ライト動作とブロック単位の消去(イレーズ)動作との差異を隠蔽するための処理が含まれる。ブロック管理には、不良ブロックの管理、ウェアレベリング、およびガベージコレクションが含まれる。
論理アドレスは、メモリシステム3をアドレス指定するために、ホスト2によって使用される。論理アドレスは、例えば論理ブロックアドレス(LBA)である。以下では、論理アドレスとしてLBAを用いる場合について主に例示する。
LBAそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、論理物理アドレス変換テーブル22を用いて実行される。コントローラ4は、論理物理アドレス変換テーブル22を使用して、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを特定の管理サイズ単位で管理する。あるLBAに対応する物理アドレスは、このLBAのデータが書き込まれたNAND型フラッシュメモリ5内の物理記憶位置を示す。コントローラ4は、論理物理アドレス変換テーブル22を用いて、NAND型フラッシュメモリ5の記憶領域を論理的に分割した複数の記憶領域を管理する。これら複数の記憶領域は、複数のLBAにそれぞれ対応する。つまり、これら複数の記憶領域のそれぞれは、1つのLBAで特定される。論理物理アドレス変換テーブル22は、メモリシステム3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
1つのページへのデータ書き込みは、1回のP/Eサイクル当たり1回のみ可能である。このため、コントローラ4は、あるLBAに対応する更新データを、このLBAに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、このLBAをこの別の物理記憶位置に関連付けるように論理物理アドレス変換テーブル22を更新することにより、以前のデータを無効化する。論理物理アドレス変換テーブル22から参照されているデータ(すなわちLBAと紐付けられているデータ)は有効データと称される。また、どのLBAとも紐付けられていないデータは無効データと称される。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、もはやホスト2からリードされる可能性が無いデータである。
コントローラ4は、ホストインタフェース(ホストI/F)11、CPU12、NANDインタフェース(NAND I/F)13、DRAMインタフェース(DRAM I/F)14、およびタイマー16を含んでもよい。これらホストI/F11、CPU12、NAND I/F13、DRAM I/F14、およびタイマー16は、バス10を介して接続されていてもよい。
ホストI/F11は、ホスト2から様々なコマンド、例えば、I/Oコマンド、各種制御コマンド、を受信する回路として機能する。I/Oコマンドには、ライトコマンド、リードコマンド、およびベリファイコマンドが含まれ得る。制御コマンドには、アンマップコマンド(トリムコマンド)、フォーマットコマンド、設定コマンド、および確認コマンドが含まれ得る。フォーマットコマンドは、メモリシステム3全体をアンマップするためのコマンドである。設定コマンドは、メモリシステム3に各種のパラメータを設定するためのコマンドである。確認コマンドは、メモリシステム3に設定された各種のパラメータを確認するためのコマンドである。
NAND I/F13は、コントローラ4とNAND型フラッシュメモリ5とを電気的に接続する。NAND I/F13は、Toggle DDR、Open NAND Flash Interface(ONFI)等のインタフェース規格に対応する。
NAND I/F13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。NAND I/F13は、複数のチャネル(Ch)を介して、NAND型フラッシュメモリ5内の複数のメモリチップにそれぞれ接続されていてもよい。複数のメモリチップが並列に駆動されることにより、NAND型フラッシュメモリ5全体に対するアクセスを広帯域化することができる。
DRAM I/F14は、DRAM6のアクセスを制御するように構成されたDRAM制御回路として機能する。DRAM6の記憶領域は、FW21、論理物理アドレス変換テーブル22、NS応答管理テーブル23、コマンド応答管理テーブル24、ゾーンディスクリプタ25、およびライト管理テーブル26を格納するための領域や、リード/ライトバッファとして利用されるバッファ領域に割り当てられる。
タイマー16は時間を計測する。タイマー16は、計測された時間を、コントローラ4内の各部に提供し得る。
CPU12は、ホストI/F11、NAND I/F13、DRAM I/F14、およびタイマー16を制御するように構成されたプロセッサである。CPU12はNAND型フラッシュメモリ5からDRAM6にロードされたFW21を実行することによって、様々な処理を行う。FW21は、CPU12に様々な処理を実行させるための命令群を含む制御プログラムである。CPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行されるFW21によって制御される。
コントローラ4内の各部の機能は、コントローラ4内の専用ハードウェアによって実現されてもよいし、CPU12がFW21を実行することによって実現されてもよい。
CPU12は、例えば、コマンド受付部121、強制応答管理部122、ライト制御部123、およびゾーン管理部124として機能する。CPU12は、例えばFW21を実行することにより、これら各部として機能する。コマンド受付部121、強制応答管理部122、ライト制御部123、およびゾーン管理部124による具体的な動作については、図11から図13を参照して後述する。
ここで、ネームスペースおよびゾーンについて説明する。メモリシステム3にアクセスするためにホスト2によって使用される論理アドレス空間(LBA空間)の全体は、複数の部分空間に分割され得る。各部分空間は、ネームスペースと称されることがある。
コントローラ4は、NAND型フラッシュメモリ5に格納されるデータを、例えばゾーン毎に管理する。コントローラ4は、NAND型フラッシュメモリ5に格納されるデータをゾーン単位で管理する方法として、例えばNVMe規格で規定されたZoned Namespace(ZNS)を用いる。
図2はZNSの構成例を示す。ZNSでは、1つのネームスペースのLBA空間の全体が、複数のゾーンに分割され得る。複数のゾーンのそれぞれは、複数のLBAを含み得る。1つのネームスペースを分割して得られる複数のゾーンのそれぞれは、連続し、且つ重複しない複数のLBAで構成されるLBA範囲に対応する。各ゾーンは、NAND型フラッシュメモリ5にアクセスするための単位として用いられる。
図2に示す例では、ネームスペースはz個のLBA0~LBA(z-1)に対応し、x個のゾーン0~ゾーン(x-1)を備える。LBA0はゾーン0の最小のLBAである。また、LBA(z-1)はゾーン(x-1)の最大のLBAである。
1つのゾーン内の書き込みは、シーケンシャルに実行される。すなわち、1つのゾーン内の書き込みは、LBAが連続するように実行される。1つのゾーンは、NAND型フラッシュメモリ5内の任意の物理単位に対応し得る。例えば、1つのゾーンは、NAND型フラッシュメモリ5内の1つのブロックに対応する。この場合、1つのブロック内のデータは、1つのゾーンに割り当てられたLBA範囲に含まれる連続するLBAを用いてアクセスされる。
各ゾーンが取り得る状態はオープン状態、フル状態、クローズ状態を含む。オープン状態にあるゾーンは、データの書き込みが可能なゾーンである。フル状態にあるゾーンは、ゾーン全体にデータが書き込まれたゾーンである。クローズ状態にあるゾーンは、データの書き込みが中断されたゾーンである。
なお、あるゾーンに対応するゾーンディスクリプタ25は、例えば、そのゾーンの先頭のLBA(すなわち最小のLBA)、そのゾーンに書き込み可能なデータ量、そのゾーンの状態等の情報を含む。
コントローラ4は、Delayed Write Completionによる書き込みを行いながら、受け付け後の経過時間が閾値を超えたライトコマンドがある場合には、そのライトコマンドに応じた処理を強制的に行ってホスト2に応答するように構成される。
以下では、受け付け後の経過時間が閾値を超えたライトコマンドがある場合に、そのライトコマンドに応じた処理を強制的に開始することを、強制応答を発動する、とも称する。
ライトコマンドは、そのライトコマンドに関連付けられたユーザデータを、NAND型フラッシュメモリ5に書き込むことを要求するコマンドである。ライトコマンドに応じた処理は、そのライトコマンドに関連付けられたユーザデータを、NAND型フラッシュメモリ5に書き込む処理である。
Delayed Write Completionは、受け付けた1つのライトコマンドに応じた書き込みを即座に実行せず、例えば複数のライトコマンドによって1つのゾーンに対して書き込みが要求されるユーザデータの総量が書き込み単位に達した後に、それら複数のライトコマンドに応じた書き込みを行って、ホスト2に応答するメカニズムである。書き込み単位は、1回のデータ書き込み動作でNAND型フラッシュメモリ5に書き込み可能なデータ量に相当する。書き込み単位は、例えば、1ページ分のデータ量に相当する。一つのメモリセルに複数ビットのデータが格納される場合には、書き込み単位は、複数ページ分のデータ量に相当し得る。
NAND型フラッシュメモリ5へは、クワッドレベルセル(QLC)方式によってデータが書き込まれ得る。QLC方式では、メモリセル当たりに4ビットのデータが格納される。QLC方式では、複数ステップの書き込み動作が行われる場合がある。複数ステップの書き込み動作は、例えばフォギー・ファイン書き込み動作である。
フォギー・ファイン書き込み動作は、あるブロックに含まれる複数のページ内の1つのページに書き込まれたデータの読み出しが、この1つのページに後続する1つ以上のページへのデータの書き込み後に可能となる書き込み動作である。フォギー・ファイン書き込み動作は、単一のワード線に接続されたメモリセル群に対する複数回の書き込み動作を含む。1回目の書き込み動作は各メモリセルの閾値電圧を粗く設定する書き込み動作であり、フォギー書き込み動作と称される。2回目の書き込み動作は各メモリセルの閾値電圧を調整する書き込み動作であり、ファイン書き込み動作と称される。フォギー・ファイン書き込み動作は、プログラムディスターブによる影響を低減できる。
フォギー・ファイン書き込み動作によりNAND型フラッシュメモリ5にデータが書き込まれる場合、書き込み単位は、4ページ分のデータ量に相当する。
図3および図4を参照して、メモリシステム3における強制応答の発動について具体的に説明する。
図3は、メモリシステム3において、強制応答を発動させることでライトコマンドに応じた処理を実行する場合の時間の例を示す。以下では、強制応答の発動が、ネームスペース毎に管理される場合を例示する。なお、強制応答の発動は、ネームスペース単位に限定されず、様々な記憶領域の単位で管理され得る。
コントローラ4は、ホスト2によって発行されたライトコマンドを受け付ける。コントローラ4は、ライトコマンドを受け付けてから、時間Aが経過した場合、そのライトコマンドに応じた処理を強制的に開始する(すなわち、強制応答を発動する)。これにより、コントローラ4は、ライトコマンドを受け付けてから時間Bが経過するまでの間に、ライトコマンドに対する応答を完了できる。
図4は、メモリシステム3において、強制応答の発動の制御に用いられるパラメータの例を示す。強制応答の発動の制御に用いられるパラメータには、例えば、forced_completion_timeとprocess_timeが含まれる。
forced_completion_timeは、強制応答の発動の有無と、強制応答を発動する場合に、コントローラ4がライトコマンドを受け付けてから、そのライトコマンドに対する応答を完了するまでの時間の上限(図3の時間Bに相当)とを決定するためのパラメータである。ライトコマンドを受け付けてから、そのライトコマンドに対する応答を完了するまでの時間の上限を、強制応答完了時間(forced response completion time)とも称する。
メモリシステム3において、forced_completion_timeに値を設定するか否かは任意である。forced_completion_timeの値mは、ユーザによって設定された強制応答完了時間を示す。ユーザは、forced_completion_timeの値mを、ホスト2からライト強制応答設定コマンドを発行することで設定する。
ライト強制応答設定コマンドは、強制応答を発動する時間の設定を要求するコマンドである。ライト強制応答設定コマンドでは、ネームスペースを特定する識別情報(ネームスペースID)と、forced_completion_timeの値mが指定されている。ライト強制応答設定コマンドは、例えば、NVMe規格で規定されたSet Featuresコマンドとして実現される。以下では、ライト強制応答設定コマンドを、設定コマンドとも称する。
例えば、forced_completion_timeの値mが0である場合、コントローラ4はライトコマンドに対する強制応答を発動しない。なお、設定コマンドに応じた強制応答の発動に関する設定が行われていない場合(すなわちデフォルト状態)にも、コントローラ4はライトコマンドに対する強制応答を発動しない。
また、forced_completion_timeの値mが1以上である場合、コントローラ4はforced_completion_timeの値mを用いて、強制応答完了時間を決定する。強制応答完了時間は、ホスト2によって期待される、ライトコマンドに対する応答時間の上限を示す。強制応答完了時間は、例えば、m×100ミリ秒である。つまり、コントローラ4は、ライトコマンドを受け付けてからm×100ミリ秒が経過するまでの間に、そのライトコマンドに対する応答を完了する。コントローラ4は、forced_completion_timeの値mを、対応するネームスペースに含まれる複数のゾーンのそれぞれに対して共通に管理する。すなわち、1つのネームスペースに含まれる複数のゾーンには、1つのforced_completion_timeの値mが共通して設定される。
process_timeは、強制応答を発動する場合に、コントローラ4がライトコマンドを受け付けてから、そのライトコマンドに応じた処理を強制的に開始するまでの時間(図3の時間Aに相当)を決定するためのパラメータである。ライトコマンドを受け付けてから、そのライトコマンドに応じた処理を強制的に開始するまでの時間を、強制応答発動時間(forced response trigger time)とも称する。
メモリシステム3において、process_timeに値を設定するか否かは任意である。また、process_timeの値nは、例えばメモリシステム3の出荷前に設定され得る。
process_timeの値nが設定されている場合、コントローラ4は、設定コマンドを受け付けたことに応じて、forced_completion_timeの値mとprocess_timeの値nとを用いて、強制応答発動時間を決定する。強制応答発動時間は、例えば、(m-n)×100ミリ秒である。つまり、コントローラ4は、ライトコマンドを受け付けてから(m-n)×100ミリ秒が経過した場合、そのライトコマンドに応じた処理を強制的に開始する。
なお、n×100ミリ秒は、例えば、ライトコマンドに応じた処理(書き込み処理)を強制的に開始してから、対応するユーザデータがNAND型フラッシュメモリ5から読み出し可能になるまでの時間(以下、処理時間(process time)とも称する)に対応する。よって、強制応答発動時間は、強制応答完了時間から処理時間を引いた時間である。
書き込み処理は、コントローラ4からNAND型フラッシュメモリ5へのユーザデータの転送処理、およびNAND型フラッシュメモリ5におけるユーザデータのメモリセルへのプログラム処理を含む。書き込み処理は、ユーザデータがNAND型フラッシュメモリ5から読み出し可能になったときに完了する。
したがって、メモリシステム3では、ユーザによって設定されたforced_completion_timeの値mに基づいて、受け付けたライトコマンドに対する強制応答の発動を制御できる。より詳しくは、コントローラ4は、forced_completion_timeの値mとprocess_timeの値nとを用いて、強制応答完了時間と強制応答発動時間とを決定できる。コントローラ4は、ホスト2からライトコマンドを受け付けてから強制応答発動時間が経過した場合、そのライトコマンドに対応するユーザデータのNAND型フラッシュメモリ5への書き込みを強制的に開始する。これにより、コントローラ4は、ホスト2により期待される強制応答完了時間内に、そのライトコマンドに対して応答できる。
次いで、図5から図8を参照して、メモリシステム3において用いられる幾つかのテーブルについて説明する。
図5は、論理物理アドレス変換テーブル22の一構成例を示す。論理物理アドレス変換テーブル22は、LBAそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。コントローラ4は論理物理アドレス変換テーブル22を用いて、LBAを物理アドレスに変換し得る。また、コントローラ4は論理物理アドレス変換テーブル22を用いて、物理アドレスをLBAに変換し得る。
図5に示す例では、LBA“0”に物理アドレス“X”が、LBA“1”に物理アドレス“Y”が、LBA“2”に物理アドレス“Z”が、それぞれマッピングされている。
図6はNS応答管理テーブル23の一構成例を示す。NS応答管理テーブル23は、1つ以上のネームスペースにそれぞれ対応する1つ以上のエントリを含み得る。各エントリは、例えば、ネームスペースIDフィールド、強制応答完了時間フィールド、および強制応答発動時間フィールドを含む。
あるネームスペースに対応するエントリにおいて、ネームスペースIDフィールドは、そのネームスペースに付与された識別情報(ネームスペースID)を示す。コントローラ4は、1つのネームスペースIDにより、対応する1つのネームスペースを特定可能である。
強制応答完了時間フィールドは、対応するネームスペースがライトコマンドの書き込み先を含む場合に、コントローラ4がそのライトコマンドに対して応答する時間の上限(すなわち強制応答完了時間)を示す。ネームスペースがライトコマンドの書き込み先を含むとは、ライトコマンドで指定されたLBAが、そのネームスペースのLBA空間内にあることを意味する。コントローラ4は、ライトコマンドを受け付けてから、強制応答完了時間フィールドに示される時間が経過するまでの間に、そのライトコマンドに対する応答をホスト2に送信するように構成される。強制応答完了時間フィールドには、例えばミリ秒単位で時間が設定される。
強制応答発動時間フィールドは、対応するネームスペースがライトコマンドの書き込み先を含む場合に、コントローラ4がそのライトコマンドに応じた処理を開始する時間(すなわち強制応答発動時間)を示す。つまり、コントローラ4は、ライトコマンドを受け付けてから、強制応答発動時間フィールドに示される時間が経過した場合、そのライトコマンドに応じた処理を開始する。強制応答発動時間フィールドには、例えばミリ秒単位で時間が設定される。
図6に示す例では、ネームスペースID“1”に、強制応答完了時間“20000”と、強制応答発動時間“15000”とが関連付けられている。
以下のNS応答管理テーブル23に関する説明では、ネームスペースIDフィールドに示される値を、単に、ネームスペースIDとも称する。NS応答管理テーブル23の他の各フィールドに示される値、および他のテーブルの各フィールドに示される値についても同様である。
図7はコマンド応答管理テーブル24の一構成例を示す。コマンド応答管理テーブル24は、1つ以上のライトコマンドにそれぞれ対応する1つ以上のエントリを含み得る。各エントリは、例えば、コマンドIDフィールドと、発動までの時間フィールドとを含む。
あるライトコマンドに対応するエントリにおいて、コマンドIDフィールドは、そのライトコマンドに付与された識別情報を示す。ライトコマンドに付与された識別情報は、コマンドIDとも称される。コントローラ4は、1つのコマンドIDにより、対応する1つのライトコマンドを特定可能である。
発動までの時間フィールドは、対応するライトコマンドに応じた処理を強制的に開始するまでの残り時間を示す。具体的には、発動までの時間フィールドには、例えば、そのライトコマンドの書き込み先を含むネームスペースに対して設定された強制応答発動時間が、初期値として設定される。コントローラ4は、発動までの時間フィールドに設定された時間を、例えばタイマー16が計測する時間の経過に応じて、減少させる。そして、発動までの時間フィールドに設定された時間が0になった場合、そのライトコマンドに応じた処理が強制的に開始される。発動までの時間フィールドには、例えばミリ秒単位で時間が設定される。
図7に示す例では、コマンドID“11”に発動までの時間“1200”が関連付けられ、コマンドID“12”に発動までの時間“10000”が関連付けられている。
図8はライト管理テーブル26の一構成例を示す。ライト管理テーブル26は、1つ以上のライトコマンドにそれぞれ対応する1つ以上のエントリを含み得る。各エントリは、例えば、コマンドIDフィールド、LBAフィールド、データ長フィールド、データバッファ情報フィールド、およびゾーンフィールドを含む。
コマンドIDフィールドは、対応するライトコマンドのコマンドIDを示す。
LBAフィールドは、対応するライトコマンドで指定されたLBAを示す。このLBAは、ライトコマンドに応じてユーザデータが書き込まれるべきLBA範囲の先頭のLBAを示す。
データ長フィールドは、対応するライトコマンドで指定されたデータ長を示す。このデータ長は、ライトコマンドに応じて書き込まれるべきユーザデータの長さを示す。よって、ライトコマンドで指定されたLBAとデータ長とを用いて、そのライトコマンドに応じてユーザデータが書き込まれるべきLBA範囲が特定可能である。
データバッファ情報フィールドは、対応するライトコマンドで指定されたデータバッファ情報を示す。このデータバッファ情報は、ホスト2において、ライトコマンドに応じて書き込まれるべきユーザデータが格納されている場所を示す。つまり、コントローラ4は、データバッファ情報で示されるホスト2内の格納場所から、ユーザデータをメモリシステム3に転送する。
ゾーンフィールドは、対応するライトコマンドで指定されたLBAを含むゾーンを示す。ゾーンは、例えば、そのゾーンに割り当てられたLBA範囲の先頭のLBA(すなわち最小のLBA)で表される。ゾーンフィールドに示されるゾーンを用いて、ライト管理テーブル26は、ライトコマンドに関する情報を、ゾーン毎に管理できる。なお、コントローラ4は、各エントリにゾーンフィールドを設ける代わりに、ゾーン毎の複数のライト管理テーブル26を用いてもよい。
(比較例に係るメモリシステムの動作)
ここで、2つの比較例に係るメモリシステムを用いて、ライトコマンドに応じた動作例を説明する。
図9は、第1比較例に係るメモリシステム3Aにおけるライトコマンドに応じた動作例を示すブロック図である。第1比較例のメモリシステム3Aは、例えば、本実施形態のメモリシステム3と同様のシステム構成を有している。
メモリシステム3Aは、ホスト2Aによって発行された1つのライトコマンドを受け付ける毎に、ライトコマンドに応じた処理を行って、応答をホスト2Aに返すように構成される。メモリシステム3AのCPU12Aは、コマンド受付部121Aおよびライト制御部123Aとして機能する。
ホスト2Aは、例えば、サブミッションキュー(SQ)401A、コンプリーションキュー(CQ)402A、およびデータバッファ403Aを備える。
サブミッションキュー401Aは、メモリシステム3Aに対して発行するコマンドをホスト2Aがそれぞれに書き込む複数のスロットを含む。ホスト2Aがコマンドを書き込むべきサブミッションキュー401A内の位置(すなわちスロット)は、SQ Tailポインタで示される。メモリシステム3Aがコマンドをフェッチすべきサブミッションキュー401A内の位置は、SQ Headポインタで示される。
コンプリーションキュー402Aは、コマンドに対する応答をメモリシステム3Aがそれぞれに書き込む複数のスロットを含む。メモリシステム3Aが応答を書き込むべきコンプリーションキュー402A内の位置は、CQ Tailポインタで示される。ホスト2Aが応答をフェッチすべきコンプリーションキュー402A内の位置は、CQ Headポインタで示される。
データバッファ403Aは、メモリシステム3AのNAND型フラッシュメモリ5Aに書き込まれるべきユーザデータを一時的に記憶する記憶領域である。
メモリシステム3Aおよびホスト2Aの具体的な動作例について以下に説明する。ここでは、説明を分かりやすくするために、サブミッションキュー401Aに書き込まれるコマンドがライトコマンドのみである場合を例示する。
まず、ホスト2Aは、メモリシステム3AのNAND型フラッシュメモリ5Aに書き込まれるべきユーザデータを、データバッファ403Aに格納する。そして、ホスト2Aは、サブミッションキュー401A内のSQ Tailポインタが示す位置に、ライトコマンドを書き込む(すなわち、ライトコマンドを発行する)。このライトコマンドは、データバッファ403Aに格納されたユーザデータの書き込みを要求するライトコマンドである。
次いで、ホスト2Aは、SQ Tailポインタに1を加算する。なお、SQ Tailポインタに1を加算した値が、サブミッションキュー401Aのスロット数(すなわちキューサイズ)に達する場合、ホスト2AはSQ Tailポインタに0を設定する。そして、ホスト2Aは、更新したSQ Tailポインタの値をメモリシステム3AのSQ Tail doorbellレジスタに書き込む。
メモリシステム3Aのコマンド受付部121Aは、サブミッションキュー401A内のSQ Headポインタが示す位置から、ライトコマンドをフェッチする(図9中の(1))。SQ HeadポインタとSQ Tailポインタとに差がある場合、コマンド受付部121Aはサブミッションキュー401Aからライトコマンドをフェッチ可能である。コマンド受付部121Aは、SQ Headポインタに1を加算する。なお、SQ Headポインタに1を加算した値が、サブミッションキュー401Aのスロット数に達する場合、コマンド受付部121AはSQ Headポインタに0を設定する。コマンド受付部121Aは、フェッチされたライトコマンドをライト制御部123Aに送出する(図9中の(2))。
ライト制御部123Aは、コマンド受付部121Aによって送出されたライトコマンドに応じて、NAND型フラッシュメモリ5Aに書き込まれるべきユーザデータを、データバッファ403AからDRAM6Aに転送する。ライト制御部123Aは、転送されたユーザデータをNAND型フラッシュメモリ5Aに書き込む(すなわちプログラムする)(図9中の(3))。そして、ライト制御部123Aは、書き込まれたユーザデータが読み出し可能になった場合、対応するライトコマンドに応じた処理の完了をコマンド受付部121Aに通知する(図9中の(4))。
コマンド受付部121Aは、ライト制御部123Aによる通知に応じて、対応するライトコマンドの完了通知を、コンプリーションキュー402A内のCQ Tailポインタが示す位置に書き込み、割り込みを発行する(図9中の(5))。コマンド受付部121Aは、割り込みを発行することにより、処理されるべき新たな完了通知がコンプリーションキュー402Aにあることを、ホスト2Aに通知する。また、コマンド受付部121AはCQ Tailポインタに1を加算する。なお、CQ Tailポインタに1を加算した値が、コンプリーションキュー402Aのスロット数に達する場合、コマンド受付部121AはCQ Tailポインタに0を設定する。
ホスト2Aは、コマンド受付部121Aによって発行された割り込みに応じて、コンプリーションキュー402A内のCQ Headポインタが示す位置から、完了通知をフェッチする。ホスト2AはCQ Headポインタに1を加算する。なお、CQ Headポインタに1を加算した値が、コンプリーションキュー402Aのスロット数に達する場合、ホスト2AはCQ Headポインタに0を設定する。ホスト2Aは、更新したCQ Headポインタをメモリシステム3AのCQ Head doorbellレジスタに書き込む。ホスト2Aは、メモリシステム3Aから受信した割り込みをクリアする。そして、ホスト2Aは、フェッチされた完了通知に基づき、書き込みが完了したユーザデータが格納されているデータバッファ403A内の領域を解放する。
以上の動作により、第1比較例のメモリシステム3Aは、ホスト2Aから1つのライトコマンドを受け付ける毎に、ライトコマンドに応じた処理を行って、応答(完了通知)をホスト2Aに返す。これにより、第1比較例のメモリシステム3Aは、ホスト2Aによって期待される時間内にライトコマンドに対して応答し得る。
図10は、第2比較例に係るメモリシステム3Bにおけるライトコマンドに応じた動作例を示すブロック図である。第2比較例のメモリシステム3Bは、例えば、本実施形態のメモリシステム3と同様のシステム構成を有している。
メモリシステム3Bは、複数のライトコマンドによって1つのゾーンに対して書き込みが要求されるユーザデータの総量が書き込み単位に達した後に、書き込み単位のユーザデータをNAND型フラッシュメモリ5Bに書き込み、複数のライトコマンドそれぞれに対する応答をホスト2Bに返すように構成される。メモリシステム3BのCPU12Bは、コマンド受付部121Bおよびライト制御部123Bとして機能する。
ホスト2Bの構成および動作は、図9を参照して前述した第1比較例におけるホスト2Aと同様である。なお、ホスト2Bは、1つのライトコマンドを発行した後に、そのライトコマンドに対する応答が得られる前に、後続するライトコマンドを発行し得る。これは、ホスト2Bが、1つのライトコマンドに対する応答を待って次のライトコマンドを発行するように構成されたならば、複数のライトコマンドによって書き込みが要求されるユーザデータの総量が書き込み単位に達した後に応答するメモリシステム3Bとの間で、デッドロックが発生する可能性があるためである。
以下では、メモリシステム3Bの動作について、第1比較例のメモリシステム3Aと異なる点について主に説明する。
メモリシステム3Bのコマンド受付部121Bは、サブミッションキュー401B内のSQ Headポインタが示す位置から、ライトコマンドをフェッチする(図10中の(1))。コマンド受付部121Bは、フェッチされたライトコマンドをライト制御部123Bに送出する(図10中の(2))。
ライト制御部123Bは、コマンド受付部121Bによって送出されたライトコマンドから、ライトコマンドで指定されたコマンドID、LBA、データ長、およびデータバッファ情報を取得する。ライト制御部123Bは、取得されたLBAを含むゾーンを特定する。ライト制御部123Bは、取得されたコマンドID、LBA、データ長、およびデータバッファ情報と、特定されたゾーンとを用いて、ライト管理テーブル26Bを更新する(図10中の(3))。ライト制御部123Bはライト管理テーブル26Bを用いて、1つのゾーンに対する書き込み単位のユーザデータが、ホスト2Bのデータバッファ403Bに格納されているかどうかを判定する。
1つのゾーンに対する書き込み単位のユーザデータが、ホスト2Bのデータバッファ403Bに格納されていない場合、ライト制御部123BはNAND型フラッシュメモリ5Bへのユーザデータの書き込みを行わない。1つのゾーンに対する書き込み単位のユーザデータが、ホスト2Bのデータバッファ403Bに格納されていない間、コマンド受付部121Bはサブミッションキュー401Bからのライトコマンドのフェッチを繰り返し行い得る。
1つのゾーンに対する書き込み単位のユーザデータがデータバッファ403Bに格納されている場合、ライト制御部123Bは、書き込み単位のユーザデータをデータバッファ403BからNAND型フラッシュメモリ5Bに転送し、転送された書き込み単位のユーザデータをNAND型フラッシュメモリ5Bに書き込む(プログラムする)(図10中の(4))。なお、転送される書き込み単位のユーザデータはDRAM6Bにバッファされてもよい。そして、ライト制御部123Bは、対応するユーザデータがNAND型フラッシュメモリ5Bから読み出し可能になったライトコマンドがある場合、そのライトコマンドに応じた処理の完了を、コマンド受付部121Bに通知する(図10中の(5))。ライト制御部123Bは、書き込み単位のユーザデータに対応する複数のライトコマンドそれぞれに応じた処理の完了を、コマンド受付部121Bに通知する。
コマンド受付部121Bは、ライト制御部123Bによる通知に応じて、対応するライトコマンドの完了通知を、コンプリーションキュー402B内のCQ Tailポインタが示す位置に書き込み、割り込みを発行する(図10中の(6))。割り込みを発行した後のコマンド受付部121Bおよびホスト2Bによる動作は、第1比較例のコマンド受付部121Aおよびホスト2Aによる動作と同様である。
以上の動作により、第2比較例のメモリシステム3Bは、ホスト2Bから、複数のライトコマンドによって1つのゾーンに対して書き込みが要求されるユーザデータの総量が書き込み単位に達した場合に、書き込み単位のユーザデータをNAND型フラッシュメモリ5B(より詳しくは当該ゾーンに対応するNAND型フラッシュメモリ5Bの記憶領域)に書き込む。そして、メモリシステム3Bは、複数のライトコマンドそれぞれに対する応答をホスト2Bに返す。
1つのライトコマンドに応じて書き込まれるべきユーザデータのサイズは、例えば、NAND型フラッシュメモリ5Bに対する書き込み単位よりも小さい。メモリシステム3Bは、1つのゾーンに対する書き込み単位のユーザデータがデータバッファ403Bに格納された場合に、その書き込み単位のユーザデータをゾーンに書き込む。これにより、メモリシステム3Bは、NAND型フラッシュメモリ5Bの記憶領域を効率的に利用できる。
メモリシステム3Bの動作は、Delayed Write Completionに相当する。Delayed Write Completionでは、書き込み単位のユーザデータに対応する複数のライトコマンドを受け付けるまで、各々のライトコマンドに対応する書き込みおよび応答が遅延し得る。例えば、ホスト2Bが書き込み単位未満のユーザデータの書き込みを要求する第1ライトコマンドを発行した後に、後続するライトコマンドを発行しない場合、書き込み単位のユーザデータがデータバッファ403Bに格納されない。このことで、第1ライトコマンドに応じたデータ書き込みが開始されず、ホスト2Bへの応答が遅れる可能性がある。
メモリシステム3Bが、ホスト2Bから1つのライトコマンドを受け付けたことに応じて、即座にそのライトコマンドに対応する書き込みおよび応答を行わないことで、ホスト2Bは期待する時間内にライトコマンドに対する応答を得られない可能性がある。その場合、ライトコマンドがストールしてしまう可能性があり、ホスト2Bからメモリシステム3Bへのユーザデータの書き込みが機能しなくなるという不具合が発生し得る。
しかしながら、1つのライトコマンドを受け付けたことに応じて、即座にそのライトコマンドに対応する書き込みおよび応答を行うことは、Delayed Write Completionと相反する。
そのため、本実施形態のメモリシステム3は、Delayed Write Completionによる書き込みを行いながら、ホスト2によって期待される時間内にライトコマンドに対して応答するように構成される。具体的には、メモリシステム3のコントローラ4は、受け付け後の経過時間が強制応答発動時間に達したライトコマンドがある場合、そのライトコマンドに対応するユーザデータを、ライトコマンドで指定されたLBAを含むゾーンに対応するNAND型フラッシュメモリ5の記憶領域ではなく、NAND型フラッシュメモリ5に設けられた共有ライトバッファに書き込む。そして、コントローラ4は、ライトコマンドで指定されたLBAを含むゾーンを、クローズ状態に遷移させる。強制応答発動時間は、ホスト2によって期待される時間(強制応答完了時間)内に、ライトコマンドに応じた処理を完了できるように設定される。そのため、コントローラ4は、ホスト2によって期待される時間内にライトコマンドに対して応答できる。
また、対応するライトコマンドの受け付け後の経過時間が強制応答発動時間に達する前に、データバッファ403に格納された1つのゾーンに書き込まれるべきユーザデータの総量が書き込み単位に達した場合には、コントローラ4は、その書き込み単位のユーザデータをゾーンに書き込む。つまり、コントローラ4はDelayed Write Completionによる書き込みを行う。
したがって、コントローラ4は、ライトコマンドに対してホスト2によって期待される時間内に応答しながら、NAND型フラッシュメモリ5の記憶領域を効率的に利用できる。これにより、Delayed Write Completionと、QLCフラッシュメモリのような複数ステップの書き込み動作が必要なフラッシュメモリとの組み合わせによる低コストのメモリシステム3を提供できる。加えて、既存のソフトウェアスタックとの互換性も維持できる。
図11から図13を参照して、本実施形態のメモリシステム3の具体的な動作例を説明する。
図11は、メモリシステム3における、ライト強制応答設定コマンド(設定コマンド)に応じた動作例を示すブロック図である。
ホスト2は設定コマンドをメモリシステム3に送信(発行)する(図11中の(1))。設定コマンドでは、例えば、ネームスペースIDと、forced_completion_timeの値mとが指定される。
メモリシステム3のコマンド受付部121は、ホスト2によって送信された設定コマンドを受信する。そして、コマンド受付部121は、設定コマンドを強制応答管理部122に送出する(図11中の(2))。
強制応答管理部122は設定コマンドに応じて、NS応答管理テーブル23を更新する(図11中の(3))。強制応答管理部122は、設定コマンドで指定されたforced_completion_timeの値mを用いて、強制応答完了時間と強制応答発動時間とを決定する。そして、強制応答管理部122は、設定コマンドで指定されたネームスペースIDに関連付けられた強制応答完了時間と強制応答発動時間とを示すエントリを生成し、NS応答管理テーブル23に追加する。
より具体的には、まず、強制応答管理部122は、設定コマンドで指定されたネームスペースIDとforced_completion_timeの値mとを取得する。ここでは、取得されたネームスペースIDで特定されるネームスペースを、対象ネームスペースと称する。
forced_completion_timeの値mが1以上である場合、強制応答管理部122は、対象ネームスペースが書き込み先であるライトコマンドに対して、forced_completion_timeの値mに基づく強制応答完了時間内に応答するように、NS応答管理テーブル23を更新する。より詳しくは、強制応答管理部122は強制応答完了時間として、例えば、m×100ミリ秒を算出する。
強制応答管理部122は、process_timeの値nを取得する。process_timeの値nは例えばメモリシステム3の出荷前に決定されている。process_timeの値nは、例えばNAND型フラッシュメモリ5に格納されている。そして、強制応答管理部122は強制応答発動時間として、例えば、(m-n)×100ミリ秒を算出する。なお、ここでは、mおよびnが100ミリ秒を単位とする時間で指定される例を示したが、mおよびnは、強制応答完了時間と強制応答発動時間とを算出可能な値であれば、どのような単位の値で表されてもよい。
次いで、強制応答管理部122は、算出された強制応答完了時間および強制応答発動時間が有効な値であるか否かを判定する。例えば、算出された強制応答完了時間が、NAND型フラッシュメモリ5に対するプログラム時間tProgよりも短い場合、強制応答管理部122は、強制応答完了時間が無効な値であると判断する。例えば、算出された強制応答発動時間が0以下の値である場合(すなわちmがn以下である場合)、強制応答管理部122は、強制応答発動時間が無効な値であると判断する。また、例えば、算出された強制応答完了時間が、NVMe規格で定められるFinish Recommended Limit(FRL)を超える場合、強制応答管理部122は、強制応答完了時間が無効な値であると判断する。FRLは、メモリシステム3の内部パラメータである。FRLは、オープン状態に遷移したゾーンがフル状態になるまでの限界の時間を示す。
算出された強制応答完了時間および強制応答発動時間の少なくとも一方が無効な値である場合、強制応答管理部122は、設定コマンドのエラーをホスト2に通知する。
算出された強制応答完了時間および強制応答発動時間が有効な値である場合、強制応答管理部122は、取得されたネームスペースIDと、算出された強制応答完了時間および強制応答発動時間とを示すエントリを、NS応答管理テーブル23に追加する。なお、取得されたネームスペースIDに対応するエントリがNS応答管理テーブル23に既にある場合には、そのエントリを、算出された強制応答完了時間および強制応答発動時間を用いて更新する。
また、設定コマンドで指定されるforced_completion_timeの値mが0である場合、強制応答管理部122は、強制応答を発動しないように、NS応答管理テーブル23を更新する。より詳しくは、forced_completion_timeの値mが0であって、設定コマンドで指定されるネームスペースIDに対応するエントリがNS応答管理テーブル23にある場合、強制応答管理部122は、そのエントリをNS応答管理テーブル23から削除する。また、forced_completion_timeの値mが0であって、設定コマンドで指定されるネームスペースIDに対応するエントリがNS応答管理テーブル23にない場合、強制応答管理部122は、そのネームスペースIDに対応するエントリをNS応答管理テーブル23に追加しない。
以上の構成により、メモリシステム3は、ホスト2から受信した設定コマンドに応じて、ライトコマンドに対する強制応答の発動をネームスペース毎に制御できる。
図12は、メモリシステム3における、ライト強制応答確認コマンドに応じた動作例を示すブロック図である。ライト強制応答確認コマンドは、ライトコマンドに対して強制応答が発動されるまでの時間に関する情報の提供を要求するコマンドである。ライト強制応答確認コマンドは、例えば、NVMe規格で規定されたGet Featuresコマンドとして実現される。以下では、ライト強制応答確認コマンドを、確認コマンドとも称する。
ホスト2は確認コマンドをメモリシステム3に送信する(図12中の(1))。確認コマンドでは、例えば、ネームスペースIDが指定される。
メモリシステム3のコマンド受付部121は、ホスト2によって送信された確認コマンドを受信する。そして、コマンド受付部121は、確認コマンドを強制応答管理部122に送出する(図12中の(2))。
強制応答管理部122は確認コマンドに応じて、NS応答管理テーブル23から、強制応答が発動される時間に関する情報を取得する(図12中の(3))。具体的には、まず、強制応答管理部122は、確認コマンドで指定されたネームスペースIDを取得する。強制応答管理部122は、NS応答管理テーブル23内の、取得されたネームスペースIDを含むエントリを特定する。そして、強制応答管理部122は、特定したエントリから、強制応答完了時間と強制応答発動時間の少なくとも一方を取得する。
強制応答管理部122は、取得された強制応答完了時間と強制応答発動時間の少なくとも一方を用いて、強制応答が発動される時間に関する情報を生成し、コマンド受付部121に送出する(図12中の(4))。この情報は、例えば、強制応答完了時間と強制応答発動時間の少なくとも一方を示す。あるいは、この情報は、強制応答完了時間と強制応答発動時間の少なくとも一方に関連する情報(例えば、forced_completion_timeの値m、process_timeの値n)を示していてもよい。
そして、コマンド受付部121は、強制応答が発動される時間に関する情報を含む応答を、ホスト2に送信する(図12中の(5))。
以上の構成により、メモリシステム3は、ホスト2から受信した確認コマンドに応じて、指定されたネームスペースに対応する強制応答が発動される時間に関する情報を、ホスト2に提供できる。
図13は、メモリシステム3における、ライトコマンドに応じた動作例を示すブロック図である。
メモリシステム3のコントローラ4は、Delayed Write Completionによる書き込みを行いながら、ライトコマンドの受け付け後の経過時間が強制応答発動時間に達した場合には、対応するユーザデータのNAND型フラッシュメモリ5への書き込みを強制的に開始するように構成される。コントローラ4は、書き込まれたユーザデータの読み出しが可能になった場合、対応するライトコマンドに応じた処理が完了したことを示す応答をホスト2に送信する。
また、コントローラ4は、少なくとも1つのゾーンに対応するNAND型フラッシュメモリ5内の少なくとも1つの記憶領域(NANDゾーン51と称する)と、少なくとも1つの共有ライトバッファ52とを管理する。NANDゾーン51は、NAND型フラッシュメモリ5の記憶領域を論理的に分割した記憶領域である。共有ライトバッファ52は、少なくとも1つのNANDゾーン51に書き込まれるべきユーザデータを不揮発に記憶する記憶領域である。
少なくとも1つのNANDゾーン51のそれぞれは、例えば、少なくとも1つの共有ライトバッファ52のいずれかに関連付けられている。また、1つの共有ライトバッファ52は、1つ以上のNANDゾーン51に関連付けられ得る。つまり、1つの共有ライトバッファ52は、1つ以上のNANDゾーン51によって共有され得る。NANDゾーン51と共有ライトバッファ52との対応を示す情報は、例えばDRAM6に格納される。
ホスト2の構成および動作は、第1比較例におけるホスト2Aおよび第2比較例におけるホスト2Bと同様である。
以下では、メモリシステム3の動作について、第1比較例のメモリシステム3Aおよび第2比較例のメモリシステム3Bと異なる点について主に説明する。
メモリシステム3のコマンド受付部121は、サブミッションキュー401内のSQ Headポインタが示す位置から、ライトコマンドをフェッチする(図13中の(1))。ライトコマンドは、少なくとも1つのゾーンのいずれかに書き込まれるべきユーザデータに関連付けられている。より詳しくは、ライトコマンドでは、例えば、コマンドID、LBA、データ長、データバッファ情報、およびネームスペースIDが指定されている。
コマンド受付部121は、フェッチされたライトコマンドをライト制御部123に送出する(図13中の(2))。以下では、フェッチされたライトコマンドを、第1対象ライトコマンドとも称する。
ライト制御部123は、第1対象ライトコマンドで指定されたコマンドID、LBA、データ長、およびデータバッファ情報を取得する。ライト制御部123は、取得されたLBAを含むゾーンを特定する。ライト制御部123は、取得されたコマンドID、LBA、データ長、およびデータバッファ情報と、特定されたゾーンとを用いて、ライト管理テーブル26を更新する(図13中の(3))。そして、ライト制御部123はライト管理テーブル26を用いて、1つのゾーンに対する書き込み単位のユーザデータが、ホスト2のデータバッファ403に格納されているかどうかを判定する。
1つのゾーンに対する書き込み単位のユーザデータがデータバッファ403に格納されている場合、ライト制御部123は、書き込み単位のユーザデータをデータバッファ403からNAND型フラッシュメモリ5に転送し、転送された書き込み単位のユーザデータをNAND型フラッシュメモリ5内のNANDゾーン51(ここではNANDゾーン511)に書き込む(プログラムする)(図13中の(4))。なお、転送される書き込み単位のユーザデータはDRAM6にバッファされてもよい。書き込み単位のユーザデータは、例えば、複数のライトコマンドに応じてそれぞれ書き込まれるべき複数のユーザデータを合わせたデータである。複数のライトコマンドは第1対象ライトコマンドを含んでいる。
そして、ライト制御部123は、対応するユーザデータがNAND型フラッシュメモリ5から読み出し可能になったライトコマンドがある場合、そのライトコマンドに応じた処理の完了を、コマンド受付部121に通知する(図13中の(5))。ライト制御部123は、書き込み単位のユーザデータに対応する複数のライトコマンドそれぞれに応じた処理の完了を、コマンド受付部121に通知する。また、ライト制御部123は、複数のライトコマンドそれぞれに対応するエントリを、ライト管理テーブル26から削除する(図13中の(6))。
コマンド受付部121は、ライト制御部123による通知を受け取る毎に、対応するライトコマンドに応じた処理が完了したことを示す応答をホスト2に送信する。より具体的には、コマンド受付部121は、ライト制御部123による通知に応じて、対応するライトコマンドの完了通知を、コンプリーションキュー402内のCQ Tailポインタが示す位置に書き込み、割り込みを発行する(図13中の(7))。ライト制御部123による通知は、例えば、処理が完了したライトコマンドのコマンドIDを含んでいる。割り込みを発行した後のコマンド受付部121およびホスト2による動作は、第1比較例のコマンド受付部121Aおよびホスト2Aによる動作と同様である。
なお、ユーザデータの書き込み(プログラム)でエラーが発生した場合、ライト制御部123およびコマンド受付部121は、対応するライトコマンドに応じた処理でエラーが発生したことを示す応答をホスト2に送信する。つまり、コマンド受付部121は、ライトコマンドに対するエラー通知を、コンプリーションキュー402内のCQ Tailポインタが示す位置に書き込む。
また、1つのゾーンに対する書き込み単位のユーザデータが、ホスト2のデータバッファ403に格納されていない場合、ライト制御部123はNAND型フラッシュメモリ5へのユーザデータの書き込みを行わない。また、ライト制御部123は、第1対象ライトコマンドの管理を強制応答管理部122に指示する(図13中の(8))。この指示には、例えば、第1対象ライトコマンドで指定されたコマンドIDとネームスペースIDとが含まれる。
強制応答管理部122は、ライト制御部123による指示に応じて、NS応答管理テーブル23において、指示内のネームスペースIDに対応するエントリを特定する。強制応答管理部122は、特定したエントリから強制応答発動時間を取得する(図13中の(9))。つまり、強制応答管理部122はNS応答管理テーブル23から、第1対象ライトコマンドに応じた処理が強制的に開始されるべき強制応答発動時間を取得する。
次いで、強制応答管理部122は、ライト制御部123による指示内のコマンドIDと、取得された強制応答発動時間とを含むエントリを、コマンド応答管理テーブル24に追加する(図13中の(10))。強制応答発動時間は、第1対象ライトコマンドに応じた処理が強制的に開始されるまでの残り時間(すなわち、発動までの時間)の初期値として用いられる。
強制応答管理部122は、コマンド応答管理テーブル24内の各エントリに含まれる発動までの時間を、例えばタイマー16が計測する時間の経過に応じて、減少させる。そして、発動までの時間が0になった場合(つまり、対応するライトコマンドを受け付けてから強制応答発動時間が経過した場合)、強制応答管理部122は、対応するライトコマンドに応じた処理を強制的に開始することを、ライト制御部123に指示する(図13中の(11))。この指示には、例えば、発動までの時間が0になったエントリ内のコマンドIDが含まれる。以下では、発動までの時間が0になったエントリによって示されるライトコマンド(すなわち、対応する処理が強制的に開始されるべきライトコマンド)を、第2対象ライトコマンドと称する。
ライト制御部123は、強制応答管理部122による指示に応じて、指示内のコマンドIDを含むエントリをライト管理テーブル26から取得する(図13中の(12))。以下では、指示内のコマンドIDを含むエントリを第1エントリと称する。また、第1エントリで示されるゾーンに対応するNANDゾーン51が、NANDゾーン512であることを想定する。ライト制御部123は、第1エントリを用いて、第2対象ライトコマンドに応じて書き込まれるべきユーザデータを、データバッファ403からNAND型フラッシュメモリ5に転送する(図13中の(13))。なお、転送されるユーザデータはDRAM6にバッファされてもよい。
ライト制御部123は、転送されたユーザデータをパディング付きでNAND型フラッシュメモリ5の共有ライトバッファ52(ここでは共有ライトバッファ521)に書き込む(図13中の(13))。ライト制御部123は、第1エントリに含まれるLBA、データ長、およびデータバッファ情報を用いることで、第2対象ライトコマンドに応じて書き込まれるべきユーザデータを特定できる。ユーザデータが書き込まれる共有ライトバッファ521は、このユーザデータが本来書き込まれるべきNANDゾーン51(ここではNANDゾーン512)に関連付けられている。また、ユーザデータをパディング付きで書き込むとは、ユーザデータとパディング用のデータとで構成される書き込み単位のデータを書き込むことを意味する。
共有ライトバッファ52へのデータの書き込みにはQLC方式が用いられてもよい。共有ライトバッファ52へのデータの書き込みには、メモリセル当たりに1ビットのデータが格納されるシングルレベルセル(SLC)方式が用いられてもよい。
なお、ライト管理テーブル26に、第1エントリで示されるゾーンと同一のゾーンを含む1つ以上のエントリがある場合、ライト制御部123は、第1エントリとそれら1つ以上のエントリとを用いて、対応する複数のライトコマンドに応じてそれぞれ書き込まれるべき複数のユーザデータを、データバッファ403からNAND型フラッシュメモリ5に転送し、転送された複数のユーザデータをパディング付きで共有ライトバッファ521に書き込んでもよい(図13中の(13))。
ここで、NANDゾーン512とは別のNANDゾーン511も共有ライトバッファ521に関連付けられている場合のライト制御部123による動作について説明する。この場合、ライト制御部123は、ライト管理テーブル26内の、その別のNANDゾーン511に対応するゾーンをそれぞれ含む1つ以上のエントリをさらに用いる。ライト制御部123は、対応する1つ以上のライトコマンドに応じてそれぞれ書き込まれるべき1つ以上のユーザデータを特定してもよい。そして、ライト制御部123は、特定された1つ以上のユーザデータを、前述したデータバッファ403からの転送および共有ライトバッファ521への書き込みの対象となるユーザデータに含めてもよい。その際、コマンド応答管理テーブル24で管理される1つ以上のライトコマンドにそれぞれ対応する発動までの時間が考慮されてもよい。例えば、発動までの時間が閾値未満であるライトコマンドに対応するユーザデータのみを、前述したデータバッファ403からの転送および共有ライトバッファ521への書き込みの対象となるユーザデータに含めてもよい。
例えば、第2対象ライトコマンドを受け付けてから強制応答発動時間が経過する前に、コマンド受付部121が、NANDゾーン512とは別のNANDゾーン511に対応するゾーンを対象とするライトコマンドを、サブミッションキュー401からフェッチした場合について説明する。2つのNANDゾーン511,512はいずれも共有ライトバッファ521に関連付けられている。以下では、フェッチされた、NANDゾーン511に対応するゾーンを対象とするライトコマンドを、第3対象ライトコマンドと称する。第3対象ライトコマンドは、ライト管理テーブル26およびコマンド応答管理テーブル24を用いて管理されている。
ライト制御部123は、第2対象ライトコマンドを受け付けてから強制応答発動時間が経過した場合、第2対象ライトコマンドに応じて書き込まれるべきユーザデータと、第3対象ライトコマンドに応じて書き込まれるべきユーザデータとを、データバッファ403からNAND型フラッシュメモリ5に転送する。そして、ライト制御部123は、転送されたユーザデータを含むデータを共有ライトバッファ521に書き込む。より詳しくは、転送されたユーザデータのサイズが、書き込み単位に相当する場合、ライト制御部123は、転送されたユーザデータを共有ライトバッファ521に書き込む。また、転送されたユーザデータのサイズが、書き込み単位未満である場合、ライト制御部123は、転送されたユーザデータをパディング付きで共有ライトバッファ521に書き込む。
このように、強制応答発動時間が経過した第2対象ライトコマンドが対象とするゾーンに対応するNANDゾーン51(ここではNANDゾーン512)と、第3対象ライトコマンドが対象とするゾーンに対応する別のNANDゾーン51(ここではNANDゾーン511)とが、共通して共有ライトバッファ521に関連付けられている場合、この第3対象ライトコマンドに対応するユーザデータも、前述したデータバッファ403からの転送および共有ライトバッファ521への書き込みの対象となるユーザデータに含めることができる。
次いで、ライト制御部123は、対応するユーザデータがNAND型フラッシュメモリ5から読み出し可能になったライトコマンドがある場合、そのライトコマンドに応じた処理の完了を、コマンド受付部121および強制応答管理部122に通知する(図13中の(14))また、ライト制御部123は、1つ以上のライトコマンドそれぞれに対応するエントリを、ライト管理テーブル26から削除する(図13中の(15))。ライト管理テーブル26から削除される1つ以上のライトコマンドは、第1エントリに対応する第2対象ライトコマンドを含んでいる。
コマンド受付部121は、ライト制御部123による通知を受け取る毎に、対応するライトコマンドに応じた処理が完了したことを示す応答をホスト2に送信する。より具体的には、コマンド受付部121は、ライト制御部123による通知に応じて、対応するライトコマンドの完了通知を、コンプリーションキュー402内のCQ Tailポインタが示す位置に書き込み、割り込みを発行する(図13中の(16))。以降のコマンド受付部121およびホスト2による動作は、第1比較例のコマンド受付部121Aおよびホスト2Aによる動作と同様である。
なお、ユーザデータの書き込み(プログラム)でエラーが発生した場合、ライト制御部123およびコマンド受付部121は、対応するライトコマンドに応じた処理でエラーが発生したことを示す応答をホスト2に送信する。つまり、コマンド受付部121は、ライトコマンドに対するエラー通知を、コンプリーションキュー402内のCQ Tailポインタが示す位置に書き込む。
また、強制応答管理部122は、ライト制御部123による通知に応じて、1つ以上のライトコマンドにそれぞれ対応する1つ以上のエントリを、コマンド応答管理テーブル24から削除する(図13中の(17))。ライト制御部123による通知は、例えば、処理が完了した1つ以上のライトコマンドそれぞれのコマンドIDを示す情報と、NANDゾーン51(ここでは例えばNANDゾーン512)を示す情報とを含み得る。通知に含まれるNANDゾーン51は、1つ以上のライトコマンドに対応するユーザデータが本来書き込まれるべきであったNANDゾーン51である。強制応答管理部122は、通知に含まれるNANDゾーン51に対応するゾーンの状態をオープン状態からクローズ状態へ遷移させることを、ゾーン管理部124に指示する(図13中の(18))。
ゾーン管理部124は、強制応答管理部122による指示に応じて、NANDゾーン51に対応するゾーンをオープン状態からクローズ状態に遷移させる(図13中の(19))。ゾーン管理部124は、例えば、NANDゾーン512に対応するゾーンがクローズ状態であることを示すようにゾーンディスクリプタ25を更新する。そして、ゾーン管理部124は、NANDゾーン512に対応するゾーンの状態が変更されたことをホスト2に通知する(図13中の(20))。なお、別のNANDゾーン51(ここではNANDゾーン511)に対応するゾーンを対象とするユーザデータも、NANDゾーン512と共通して関連付けられる共有ライトバッファ521に書き込まれた場合、ライト制御部123、強制応答管理部122、およびゾーン管理部124は、その別のNANDゾーン511に対応するゾーンも同様に、オープン状態からクローズ状態に遷移させるように動作する。
なお、1つのゾーンに対する書き込み単位のユーザデータが、ホスト2のデータバッファ403に格納されておらず、且つ受け付け後の経過時間が強制応答発動時間に達した(すなわち、発動までの時間が0になった)ライトコマンドがない場合、コマンド受付部121、ライト制御部123、および強制応答管理部122は、サブミッションキュー401からライトコマンドをフェッチし、フェッチしたライトコマンドに基づいてライト管理テーブル26およびコマンド応答管理テーブル24を更新する動作を繰り返し行い得る。
以上の動作により、本実施形態のメモリシステム3において、コントローラ4は、ホスト2から、複数のライトコマンドによって1つのゾーンに対して書き込みが要求されるユーザデータの総量が書き込み単位に達した場合に、書き込み単位のユーザデータをそのゾーンに対応するNANDゾーン51に書き込む。そして、コントローラ4は、複数のライトコマンドそれぞれに対する応答をホスト2に返す。これにより、メモリシステム3では、NAND型フラッシュメモリ5の記憶領域を効率的に利用できる。
さらに、コントローラ4は、受け付け後の経過時間が強制応答発動時間に達したライトコマンドがある場合、対応するユーザデータを、NANDゾーン51ではなく、共有ライトバッファ52に書き込む。そして、コントローラ4は、そのライトコマンドに対する完了通知をホスト2に返す。
このように、コントローラ4は、(1)ライトコマンドの受け付け後の経過時間が強制応答発動時間に達する前に、そのライトコマンドの書き込み先のゾーンに書き込まれるべき書き込み単位のユーザデータがデータバッファ403に格納された場合と、(2)受け付け後の経過時間が強制応答発動時間に達したライトコマンドがある場合とで、ユーザデータの書き込み先を切り替える。(1)の場合、ライトコマンドの受け付け後の経過時間が強制応答発動時間に達する前に、対応するユーザデータのNANDゾーン51への書き込みが開始されるので、コントローラ4は、ホスト2によって期待される時間内に、ライトコマンドに対して応答できる。また、(2)の場合、対応するユーザデータを共有ライトバッファ52に書き込むことにより、コントローラ4は、ホスト2によって期待される時間内に、ライトコマンドに対して応答できる。
したがって、メモリシステム3では、ホスト2によって期待される時間内にライトコマンドに対して応答しながら、NAND型フラッシュメモリ5の記憶領域を効率的に利用できる。
なお、前述したメモリシステム3における動作は、NAND型フラッシュメモリ5に格納されるデータをゾーンで管理する場合に限らず、NAND型フラッシュメモリ5に格納されるデータをLBAで管理する場合にも適用できる。この場合、ゾーン管理部124による動作(例えば、ゾーンのクローズ状態への遷移、ゾーン状態の変更のホスト2への通知)は行われない。
この場合、コントローラ4は、NAND型フラッシュメモリ5内の少なくとも1つの記憶領域と少なくとも1つの共有ライトバッファ52とを管理する。少なくとも1つの記憶領域は、NAND型フラッシュメモリ5の記憶領域を論理的に分割した記憶領域である。少なくとも1つの記憶領域は、少なくとも1つのLBAにそれぞれ対応する。
次いで、図14から図20のフローチャートを参照して、メモリシステム3およびホスト2において実行される処理の手順について説明する。
(メモリシステム3における強制応答の発動を設定するための処理)
図14は、CPU12によって実行される設定処理の手順の例を示すフローチャートである。CPU12は、ホスト2から設定コマンドを受信したことに応じて、設定処理を開始する。設定処理は、CPU12がライトコマンドを受け付けてから、そのライトコマンドに応じた処理を強制的に開始するまでの時間を設定するための処理である。
まず、CPU12は、設定コマンドで指定されたネームスペースIDを取得する(ステップS101)。また、CPU12は、設定コマンドで指定されたforced_completion_timeの値mを取得する(ステップS102)。mは、例えば0以上の整数である。
次いで、CPU12は、取得されたforced_completion_timeの値mが0であるか否かを判定する(ステップS103)。forced_completion_timeの値mが0である場合(ステップS103でYES)、CPU12は、NS応答管理テーブル23に、取得されたネームスペースIDに対応するエントリがあるかどうかを判定する(ステップS104)。NS応答管理テーブル23に、取得されたネームスペースIDに対応するエントリがある場合(ステップS104でYES)、CPU12は、NS応答管理テーブル23から、取得されたネームスペースIDに対応するエントリを削除し(ステップS105)、設定処理を終了する。これにより、CPU12は、取得されたネームスペースIDに関連付けられるネームスペースを対象とするライトコマンドの処理および応答を、強制的に発動しないように設定する。
NS応答管理テーブル23に、取得されたネームスペースIDに対応するエントリがない場合(ステップS104でNO)、CPU12は設定処理を終了する。つまり、CPU12は、取得されたネームスペースIDに関連付けられるネームスペースを対象とするライトコマンドの処理および応答を、強制的に発動しないように既に設定しているので、設定処理を終了する。
また、forced_completion_timeの値mが0でない場合(ステップS106でNO)、すなわち1以上である場合、CPU12は、強制応答完了時間としてm×100ミリ秒を算出する(ステップS106)。そして、CPU12は、process_timeの値nを取得する(ステップS107)。CPU12は、強制応答発動時間として(m-n)×100ミリ秒を算出する(ステップS108)。
CPU12は、算出された強制応答完了時間および強制応答発動時間が有効な値であるか否かを判定する(ステップS109)。算出された強制応答完了時間および強制応答発動時間の少なくとも一方が無効な値である場合(ステップS109でNO)、CPU12はホスト2にエラーを通知し(ステップS110)、設定処理を終了する。
算出された強制応答完了時間および強制応答発動時間が有効な値である場合(ステップS109でYES)、CPU12は、NS応答管理テーブル23に、取得されたネームスペースIDに対応するエントリがあるか否かを判定する(ステップS111)。NS応答管理テーブル23に、取得されたネームスペースIDに対応するエントリがある場合(ステップS111でYES)、CPU12は、そのエントリを、算出された強制応答完了時間および強制応答発動時間を用いて更新し(ステップS112)、設定処理を終了する。これにより、CPU12は、設定コマンドに応じて、指定されたネームスペースに関連付けられた強制応答完了時間および強制応答発動時間を変更できる。
一方、NS応答管理テーブル23に、取得されたネームスペースIDに対応するエントリがない場合(ステップS111でNO)、CPU12は、取得されたネームスペースIDと、算出された強制応答完了時間および強制応答発動時間とを含むエントリを、NS応答管理テーブル23に追加し(ステップS113)、設定処理を終了する。これにより、CPU12は、設定コマンドに応じて、指定されたネームスペースに関連付けられる強制応答完了時間および強制応答発動時間を設定できる。
以上の設定処理により、CPU12は、設定コマンドに応じて、指定されたネームスペースを対象とするライトコマンドを受け付けた場合に強制応答を発動するか否かを設定(変更)できる。また、CPU12は、設定コマンドに応じて、ライトコマンドを受け付けてから、そのライトコマンドに対応する処理を強制的に開始するまでの時間を設定できる。
(メモリシステム3における強制応答の発動を確認するための処理)
図15は、CPU12によって実行される確認処理の手順の例を示すフローチャートである。CPU12は、ホスト2から確認コマンドを受信したことに応じて、確認処理を開始する。確認処理は、ネームスペースに対して設定されている強制応答が発動する時間に関する情報を、ホスト2に提供するための処理である。
まず、CPU12は、設定コマンドで指定されたネームスペースIDを取得する(ステップS201)。CPU12は、NS応答管理テーブル23において、取得されたネームスペースIDに対応するエントリを特定する(ステップS202)。CPU12は、特定したエントリから強制応答完了時間を取得する(ステップS203)。そして、CPU12は、取得した強制応答完了時間をホスト2に送信する(ステップS204)。なお、CPU12は、強制応答完了時間に関連する情報をホスト2に送信してもよい。強制応答完了時間に関連する情報は、例えば、強制応答完了時間を100ミリ秒単位に変換した値、すなわちforced_completion_timeの値m(=強制応答完了時間/100)である。
また、CPU12は、特定したエントリから強制応答発動時間を取得し、ホスト2に送信してもよい。あるいは、CPU12は、強制応答発動時間に関連する情報をホスト2に送信してもよい。強制応答発動時間に関連する情報は、例えば、強制応答発動時間を100ミリ秒単位に変換した値、すなわちforced_completion_timeの値mとprocess_timeの値nとの差分m-nである。
以上の確認処理により、CPU12は、確認コマンドに応じて、ネームスペースに対して設定されている強制応答完了時間と強制応答発動時間の少なくとも一方に関する情報を、ホスト2に提供できる。
(ホスト2におけるメモリシステム3へのユーザデータ書き込みのための処理)
図16は、ホスト2において実行される書き込み要求処理の手順の例を示すフローチャートである。書き込み要求処理は、ホスト2がメモリシステム3にユーザデータの書き込みを要求するための処理である。書き込み要求処理は、例えばホスト2に設けられるプロセッサがプログラムを実行することによって実行される。
ホスト2は、メモリシステム3のNAND型フラッシュメモリ5に書き込まれるべきユーザデータを、データバッファ403に格納する(ステップS301)。そして、ホスト2は、SQ Tailポインタが示すサブミッションキュー401内の位置に、ライトコマンドを書き込む(ステップS302)。このライトコマンドは、格納されたユーザデータの書き込みを要求するライトコマンドである。
次いで、ホスト2は、SQ Tailポインタに1を加算する(ステップS303)。なお、SQ Tailポインタに1を加算した値が、サブミッションキュー401のスロット数に達する場合、ホスト2はSQ Tailポインタに0を設定する。そして、ホスト2は、更新されたSQ Tailポインタをメモリシステム3のSQ Tail doorbellレジスタに書き込む(ステップS304)。
以上の書き込み要求処理により、ホスト2は、データバッファ403に格納されたユーザデータの書き込みを、メモリシステム3に要求できる。ホスト2は、サブミッションキュー401を介してライトコマンドをメモリシステム3に発行することによって、ユーザデータの書き込みをメモリシステム3に要求する。
図17は、ホスト2において実行される応答受信処理の手順の例を示すフローチャートである。応答受信処理は、ホスト2がライトコマンドに対する応答をメモリシステム3から受信するための処理である。応答受信処理は、例えばホスト2に設けられるプロセッサがプログラムを実行することによって実行される。ホスト2は、メモリシステム3によって発行された割り込みを受信したことに応じて、応答受信処理の実行を開始する。
まず、ホスト2は、CQ Headポインタが示すコンプリーションキュー402内の位置から、完了通知をフェッチする(ステップS401)。この完了通知は、ホスト2が発行したライトコマンドに応じて、対応するユーザデータのNAND型フラッシュメモリ5への書き込みが完了したことを示す応答である。
次いで、ホスト2はCQ Headポインタに1を加算する(ステップS402)。なお、CQ Headポインタに1を加算した値が、コンプリーションキュー402のスロット数に達する場合、ホスト2はCQ Headポインタに0を設定する。ホスト2は、更新されたCQ Headポインタをメモリシステム3のCQ Head doorbellレジスタに書き込む(ステップS403)。そして、ホスト2は、メモリシステム3から受信した割り込みをクリアする(ステップS404)。
次いで、ホスト2は、フェッチされた完了通知に基づき、書き込みが完了したユーザデータが格納されているデータバッファ403内の領域を解放する(ステップS405)。
以上の応答受信処理により、ホスト2は、発行済みのライトコマンドに対応するユーザデータの書き込みが完了した場合に、このユーザデータが格納されているデータバッファ403内の領域を解放できる。
なお、ホスト2は応答受信処理において、ゾーンがクローズ状態に遷移したことを示す通知を、メモリシステム3からさらに受け取り得る。より具体的には、ホスト2は、発行済みのライトコマンドに対応するユーザデータの書き込みが、強制応答の発動に応じて行われた場合に、そのユーザデータが本来書き込まれるべきゾーンがクローズ状態に遷移したことを示す通知を受け取り得る。ホスト2は、この通知に応じて、例えば、そのゾーンに対するユーザデータの書き込みを要求するライトコマンドの発行を停止する。
(メモリシステム3におけるユーザデータ書き込みのための処理)
図18は、CPU12によって実行されるライト制御処理の手順の例を示すフローチャートである。ライト制御処理は、ホスト2によって発行されたライトコマンドをCPU12が受け付け、受け付け済みのライトコマンドに対応するユーザデータの書き込みを制御するための処理である。ここでは、説明を分かりやすくするために、CPU12がホスト2のサブミッションキュー401から受け付けるコマンドが、ライトコマンドのみである場合を例示する。
まず、CPU12は、SQ HeadポインタがSQ Tailポインタと等しいか否かを判定する(ステップS501)。つまり、CPU12はSQ HeadポインタとSQ Tailポインタとを用いて、サブミッションキュー401にフェッチすべきライトコマンドがあるかどうかを判定する。
SQ HeadポインタがSQ Tailポインタと異なる場合(ステップS501でNO)、サブミッションキュー401にフェッチすべきライトコマンドがあるので、CPU12はコマンド受付処理を実行する(ステップS502)。コマンド受付処理は、CPU12がライトコマンドを受け付け、受け付けたライトコマンドを管理する情報を取得するための処理である。より詳しくは、コマンド受付処理では、受け付けたライトコマンドに応じてライト管理テーブル26が更新される。ライト管理テーブル26は、受け付けたライトコマンドに関する情報を、例えば、対応するユーザデータが書き込まれるべきゾーン毎に管理する。コマンド受付処理の具体的な手順については、図19のフローチャートを参照して後述する。
次いで、CPU12は、ホスト2のデータバッファ403に、1つのゾーンに対する書き込み単位のユーザデータが格納されているか否かを判定する(ステップS503)。データバッファ403に、1つのゾーンに対する書き込み単位のユーザデータが格納されている場合(ステップS503でYES)、CPU12は、データバッファ403からメモリシステム3のDRAM6に、その書き込み単位のユーザデータを転送する(ステップS504)。以下では、この書き込み単位のユーザデータが書き込まれるべきゾーンを第1対象ゾーンと称する。また、第1対象ゾーンに対応するNANDゾーン51を、第1対象NANDゾーン51とも称する。CPU12は、転送されたユーザデータをNAND型フラッシュメモリ5に転送して、第1対象NANDゾーン51に書き込む(ステップS505)。なお、CPU12は、書き込み単位のユーザデータを、DRAM6にバッファすることなく、データバッファ403からNAND型フラッシュメモリ5に転送してもよい。
次いで、CPU12は、対応するユーザデータが読み出し可能になったライトコマンドがあるか否かを判定する(ステップS506)。対応するユーザデータが読み出し可能になったライトコマンドがない場合(ステップS506でNO)、CPU12による処理はステップS506に戻る。つまり、ライトコマンドに応じたユーザデータの書き込みが完了したことをまだホスト2に通知できないので、CPU12による処理がステップS506に戻る。
対応するユーザデータが読み出し可能になったライトコマンドがある場合(ステップS506でYES)、CPU12は応答処理を実行する(ステップS507)。応答処理は、ライトコマンドに応じたユーザデータの書き込みが完了したことをホスト2に通知し、そのライトコマンドを管理する情報を更新するための処理である。応答処理の具体的な手順については、図20のフローチャートを参照して後述する。
そして、CPU12は、ステップS505で書き込んだ書き込み単位のユーザデータに対応する全てのライトコマンドに対して応答したか否かを判定する(ステップS508)。書き込み単位のユーザデータに対応するライトコマンドの少なくとも1つに対して応答していない場合(ステップS508でNO)、CPU12による処理はステップS506に戻る。
一方、書き込み単位のユーザデータに対応する全てのライトコマンドに対して応答した場合(ステップS508でYES)、CPU12による処理はステップS501に進む。つまり、CPU12は、ホスト2から新たなライトコマンドを受け付け、受け付け済みのライトコマンドに対応するユーザデータの書き込みを制御するための処理を続行する。
また、ホスト2のデータバッファ403に、1つのゾーンに対する書き込み単位のユーザデータが格納されていない場合(ステップS503でNO)、CPU12は、ステップS502で受け付けたライトコマンドを用いてコマンド応答管理テーブル24を更新し(ステップS509)、CPU12による処理はステップS510に進む。具体的には、CPU12は、ステップS502で受け付けたライトコマンドで指定されたネームスペースIDを用いて、NS応答管理テーブル23から強制応答発動時間を取得する。そして、CPU12は、ライトコマンドで指定されたコマンドIDと、取得された強制応答発動時間とを含むエントリを、コマンド応答管理テーブル24に追加する。追加されたエントリ内の強制応答発動時間は、ライトコマンドに応じた処理が強制的に開始されるまでの時間(すなわち発動までの時間)の初期値として用いられる。CPU12は、コマンド応答管理テーブル24内の各エントリに含まれる発動までの時間を、例えばタイマー16が計測する時間の経過に応じて、減少させる。
また、SQ HeadポインタがSQ Tailポインタと等しい場合(ステップS501でYES)にも、CPU12による処理はステップS510に進む。
次いで、CPU12は、受け付け後の経過時間が強制応答発動時間に達したライトコマンドがあるか否かを判定する(ステップS510)。具体的には、CPU12は、例えば、コマンド応答管理テーブル24が、発動までの時間が0になったライトコマンドを示すエントリを含む場合、受け付け後の経過時間が強制応答発動時間に達したライトコマンドがあると判断する。
受け付け後の経過時間が強制応答発動時間に達したライトコマンドがない場合(ステップS510でNO)、CPU12による処理はステップS501に進む。
受け付け後の経過時間が強制応答発動時間に達したライトコマンドがある場合(ステップS510でYES)、CPU12は、そのライトコマンドに対応するユーザデータが書き込まれるべきゾーン(以下、第2対象ゾーンと称する)を特定する(ステップS511)。CPU12は、例えばライト管理テーブル26を用いて、第2対象ゾーンを特定する。そして、CPU12は、ホスト2のデータバッファ403からメモリシステム3のDRAM6に、第2対象ゾーンに書き込まれるべきユーザデータを転送する(ステップS512)。より具体的には、CPU12は、例えばライト管理テーブル26を用いて、第2対象ゾーンに書き込まれるべき少なくとも1つのユーザデータを特定する。少なくとも1つのユーザデータは、少なくとも1つのライトコマンドにそれぞれ対応する。CPU12は、特定された少なくとも1つのユーザデータを、データバッファ403からDRAM6に転送する。転送されたユーザデータのサイズは、NAND型フラッシュメモリ5に対する書き込み単位よりも小さい。
次いで、CPU12は、転送されたユーザデータをパディング付きで共有ライトバッファ52に書き込む(ステップS513)。つまり、CPU12は、ユーザデータにパディングデータを付加することで、書き込み単位のデータを共有ライトバッファ52に書き込む。ユーザデータが書き込まれる共有ライトバッファ52は、第2対象ゾーンに対応するNANDゾーン51に関連付けられている。なお、CPU12は、ユーザデータを、DRAM6にバッファすることなく、データバッファ403からNAND型フラッシュメモリ5に転送してもよい。
次いで、CPU12は、対応するユーザデータが読み出し可能になったライトコマンドがあるか否かを判定する(ステップS514)。対応するユーザデータが読み出し可能になったライトコマンドがない場合(ステップS514でNO)、CPU12による処理はステップS514に戻る。
対応するユーザデータが読み出し可能になったライトコマンドがある場合(ステップS514でYES)、CPU12は応答処理を実行する(ステップS515)。つまり、CPU12は、ライトコマンドに応じたユーザデータの書き込みが完了したことをホスト2に通知し、そのライトコマンドを管理する情報を更新する。
そして、CPU12は、ステップS513で書き込んだユーザデータに対応する全てのライトコマンドに対して応答したか否かを判定する(ステップS516)。書き込んだユーザデータに対応するライトコマンドの少なくとも1つに対して応答していない場合(ステップS516でNO)、CPU12による処理はステップS514に戻る。
一方、書き込んだユーザデータに対応する全てのライトコマンドに対して応答した場合(ステップS516でYES)、CPU12は第2対象ゾーンをクローズ状態に遷移させる(ステップS517)。そして、CPU12は、第2対象ゾーンの状態の変更をホスト2に通知し(ステップS518)、CPU12による処理はステップS501に進む。
なお、CPU12は、第2対象ゾーンをクローズ状態に遷移させる代わりに、第2対象ゾーンをフル状態にしてもよい。CPU12は、例えば、ステップS513において、第2対象ゾーン全体にデータが書き込まれた状態(フル状態)になるように、転送されたユーザデータとパディングデータとを共有ライトバッファ52に書き込む。この場合、CPU12は、書き込んだユーザデータに対応する全てのライトコマンドに対して応答した後、例えば、第2対象ゾーンがフル状態になったことをホスト2に通知する。そして、CPU12による処理はステップS501に進む。
以上のライト制御処理により、CPU12は、ホスト2からライトコマンドを受け付け、受け付け済みのライトコマンドに対応するユーザデータの書き込みを制御できる。
具体的には、第1対象ゾーンに書き込まれるべき書き込み単位のユーザデータがデータバッファ403に格納されている場合、CPU12は、その書き込み単位のユーザデータを第1対象NANDゾーン51に書き込む。そして、CPU12は、書き込みが完了したユーザデータに対応するライトコマンドに対する完了通知をホスト2に返す。
また、受け付け後の経過時間が強制応答発動時間に達したライトコマンドがある場合、CPU12は、対応するユーザデータが書き込まれるべき第2対象ゾーンを特定する。CPU12は、データバッファ403に格納されている、第2対象ゾーンに書き込まれるべきユーザデータを、NANDゾーン51ではなく、共有ライトバッファ52に書き込む。そして、CPU12は、書き込みが完了したユーザデータに対応するライトコマンドに対する完了通知をホスト2に返す。
これにより、メモリシステム3は、ホスト2によって期待される時間内にライトコマンドに対して応答しながら、NAND型フラッシュメモリ5の記憶領域を効率的に利用できる。
図19は、CPU12によって実行されるコマンド受付処理の手順の例を示すフローチャートである。コマンド受付処理は、ライトコマンドを受け付け、受け付けたライトコマンドを管理する情報を取得するための処理である。コマンド受付処理は、図18を参照して前述したライト制御処理のステップS502に相当する。
まず、CPU12は、SQ Headポインタが示すサブミッションキュー401内の位置から、ライトコマンドをフェッチする(ステップS601)。CPU12は、SQ Headポインタに1を加算する(ステップS602)。なお、SQ Headポインタに1を加算した回数が、サブミッションキュー401のスロット数に達する場合、CPU12はSQ Headポインタに0を設定する。
次いで、CPU12は、フェッチされたライトコマンドから、コマンドID、LBA、データ長、およびデータバッファ情報を取得する(ステップS603)。CPU12は、取得されたLBAを含むゾーンを特定する(ステップS604)。つまり、CPU12は、取得されたLBAを含むLBA範囲が割り当てられたゾーンを特定する。
そして、CPU12はライト管理テーブル26を更新し(ステップS605)、コマンド受付処理を終了する。具体的には、CPU12は、取得されたコマンドID、LBA、データ長、およびデータバッファ情報と、特定されたゾーンとを示すエントリを、ライト管理テーブル26に追加する。
以上のコマンド受付処理により、CPU12は、ホスト2からライトコマンドを受け付け、受け付けたライトコマンドを管理するための情報を取得できる。CPU12は、取得されたライトコマンドを管理するための情報を用いて、ライト管理テーブル26を更新する。CPU12はライト管理テーブル26を用いて、各ライトコマンドに応じてNAND型フラッシュメモリ5に書き込まれるべきユーザデータを管理できる。
図20は、CPU12によって実行される応答処理の手順の例を示すフローチャートである。応答処理は、ライトコマンドに応じたユーザデータの書き込みが完了したことをホスト2に通知し、そのライトコマンドを管理する情報を更新するための処理である。応答処理は、図18を参照して前述したライト制御処理のステップS507およびステップS515のそれぞれに相当する。
まず、CPU12は、CQ Tailポインタが示すコンプリーションキュー402内の位置に、対象ライトコマンドの完了通知を書き込む(ステップS701)。対象ライトコマンドは、対応するユーザデータのNAND型フラッシュメモリ5への書き込みが完了したライトコマンドである。
次いで、CPU12はCQ Tailポインタに1を加算する(ステップS702)。なお、CQ Tailポインタに1を加算した回数が、コンプリーションキュー402のスロット数に達する場合、CPU12はCQ Tailポインタに0を設定する。そして、CPU12はホスト2に割り込みを発行する(ステップS703)。CPU12は、割り込みを発行することにより、処理されるべき新たな完了通知がコンプリーションキュー402にあることを、ホスト2に通知する。
CPU12はライト管理テーブル26を更新する(ステップS704)。具体的には、CPU12は対象ライトコマンドに対応するエントリを、ライト管理テーブル26から削除する。そして、CPU12は、コマンド応答管理テーブル24を更新し(ステップS705)、応答処理を終了する。具体的には、CPU12は対象ライトコマンドに対応するエントリを、コマンド応答管理テーブル24から削除する。なお、コマンド応答管理テーブル24に、対象ライトコマンドに対応するエントリがない場合、CPU12はステップS705の手順をスキップして応答処理を終了する。例えば、CPU12が対象ライトコマンドを受け付けたことに応じて、1つのゾーンに対する書き込みユーザデータがデータバッファ403に格納されていると判断した場合、対象ライトコマンドに対応するエントリはコマンド応答管理テーブル24に追加されていない。この場合、CPU12はステップS705の手順をスキップする。
以上の応答処理により、CPU12は、ライトコマンドに応じたユーザデータの書き込みが完了したことをホスト2に通知し、そのライトコマンドを管理する情報を更新できる。
以上説明したように、本実施形態によれば、メモリシステム3はホスト2によって期待される時間内に書き込み要求に対して応答できる。コントローラ4は、ホスト2から、NAND型フラッシュメモリ5への書き込み単位である第1データ単位未満のサイズを有する第1データに関連付けられた第1書き込み要求を受け付ける。コントローラ4は、第1書き込み要求を受け付けてから第1時間が経過したことに応じ、第1データを少なくとも含む第2データのNAND型フラッシュメモリ5への書き込み処理を開始する。コントローラ4は、書き込み処理が完了したことに応じ、第1書き込み要求に対する第1応答をホスト2に送信する。第1時間は、第1書き込み要求を受け付けてから第1応答を送信するまでの制限時間としてホスト2から指定された第2時間から、第3時間を引いた時間である。
このように、第1書き込み要求を受け付けてから第1時間が経過したことに応じ、コントローラ4は、第1書き込み要求に関連付けられた第1データを少なくとも含む第2データのNAND型フラッシュメモリ5への書き込み処理を強制的に開始するので、ホスト2によって期待される時間内に第1書き込み要求に対して応答できる。
本実施形態の説明に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、本実施形態の説明に記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態の説明に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。