JP2022143632A - メモリシステム - Google Patents
メモリシステム Download PDFInfo
- Publication number
- JP2022143632A JP2022143632A JP2021044250A JP2021044250A JP2022143632A JP 2022143632 A JP2022143632 A JP 2022143632A JP 2021044250 A JP2021044250 A JP 2021044250A JP 2021044250 A JP2021044250 A JP 2021044250A JP 2022143632 A JP2022143632 A JP 2022143632A
- Authority
- JP
- Japan
- Prior art keywords
- data
- command
- write
- memory
- queue
- 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
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Read Only Memory (AREA)
- Memory System (AREA)
Abstract
【課題】信頼性の向上を図ることができるメモリシステムを提供することである。【解決手段】実施形態のメモリシステムは、不揮発性メモリと、揮発性メモリと、メモリコントローラとを持つ。前記揮発性メモリは、ライトバッファを含む。前記メモリコントローラは、ホスト機器によってキューに格納されたコマンドを前記キューから受け取り可能である。前記メモリコントローラは、書き込み単位を満たさない第1データが前記ライトバッファに格納された状態で、前記第1データを前記不揮発性メモリに書き込ませる第1コマンドを前記キューから受け取る場合、前記第1データと、前記ホスト機器または前記ライトバッファとは異なる前記揮発性メモリの所定領域から取得される第2データとを同時に前記不揮発性メモリに書き込む。【選択図】図6
Description
本発明の実施形態は、メモリシステムに関する。
ホスト機器から所定コマンドを受信した場合に、揮発性メモリに格納されているデータを不揮発性メモリに書き込むメモリシステムが知られている。
本発明が解決しようとする課題は、信頼性の向上を図ることができるメモリシステムを提供することである。
実施形態のメモリシステムは、不揮発性メモリと、揮発性メモリと、メモリコントローラとを持つ。前記揮発性メモリは、ライトバッファを含む。前記メモリコントローラは、前記ホスト機器によって前記メモリシステムのキューに格納されたコマンドを前記キューから受け取り可能である。前記メモリコントローラは、書き込み単位を満たさない第1データが前記ライトバッファに格納された状態で、前記第1データを前記不揮発性メモリに書き込ませる第1コマンドを前記キューから受け取る場合、前記第1データと、前記ホスト機器または前記ライトバッファとは異なる前記揮発性メモリの所定領域から取得される第2データとを同時に前記不揮発性メモリに書き込む。
以下、実施形態のメモリシステムを、図面を参照して説明する。以下の説明では、同一または類似の機能を有する構成に同一の符号を付す。そして、それら構成の重複する説明は省略する場合がある。「XXに基づく」とは、「少なくともXXに基づく」ことを意味し、XXに加えて別の要素に基づく場合も含み得る。さらに、「XXに基づく」とは、XXを直接に用いる場合に限定されず、XXに対して演算や加工が行われたものに基づく場合も含み得る。「XX」は、任意の要素(例えば任意の情報)である。「接続」とは、機械的な接続に限定されず、電気的な接続も含み得る。すなわち「接続」とは、対象物と直接に接続される場合に限定されず、別の要素を間に介在させて接続される場合も含み得る。
(第1実施形態)
<1.メモリシステムの全体構成>
図1は、第1実施形態のメモリシステム1の全体構成を示すブロック図である。メモリシステム1は、例えばSSD(Solid State Drive)のようなストレージデバイスである。メモリシステム1は、外部のホスト機器2と通信を行い、ホスト機器2からの命令に応じて各種動作を実行する。メモリシステム1は、例えば、1つ以上のNAND装置10、DRAM(Dynamic Random Access Memory)20、およびメモリコントローラ30を含む。
<1.メモリシステムの全体構成>
図1は、第1実施形態のメモリシステム1の全体構成を示すブロック図である。メモリシステム1は、例えばSSD(Solid State Drive)のようなストレージデバイスである。メモリシステム1は、外部のホスト機器2と通信を行い、ホスト機器2からの命令に応じて各種動作を実行する。メモリシステム1は、例えば、1つ以上のNAND装置10、DRAM(Dynamic Random Access Memory)20、およびメモリコントローラ30を含む。
NAND装置10は、データを不揮発に保持する不揮発性の半導体記憶装置であり、例えばNAND型フラッシュメモリである。本実施形態では、複数のNAND装置10によって「不揮発性メモリM」の一例が構成されている。ただし、メモリシステム1に含まれるNAND装置10の個数は1つでもよい。この場合は、1つのNAND装置10によって「不揮発性メモリM」の一例が構成される。NAND装置10については、詳しく後述する。
DRAM20は、メモリコントローラ30の記憶領域として使用される揮発性の半導体記憶装置である。DRAM20は、「揮発性メモリ」の一例である。DRAM20は、ホスト機器2とNAND装置10との間のデータ転送のためのバッファとして機能する。DRAM20は、例えば、ライトバッファ21と、リードバッファ22とを含む。ライトバッファ21は、ホスト機器2から受け取る書き込み対象データ(以下「ライトデータ」と称する)を一時的に保持するデータバッファである。リードバッファ22は、NAND装置10から読み出された読み出し対象データ(以下「リードデータ」と称する)を一時的に保持するデータバッファである。DRAM20は、メモリコントローラ30に内蔵されていてもよい。
メモリコントローラ30は、ホスト機器2からの命令に応じてNAND装置10に対するデータの書き込み、読み出し、および消去などを実行する。メモリコントローラ30は、例えば、CPU(Central Processing Unit)31、RAM(Random Access Memory)32、ホストインターフェイス回路(ホストI/F)33、NANDインターフェイス回路(NANDI/F)34、およびDRAMインターフェイス回路(DRAMI/F)35を有する。例えば、メモリコントローラ30は、これら構成が1つのチップに纏められたSoC(System on a Chip)である。
CPU31は、ハードウェアプロセッサの一例である。CPU31は、例えばRAM32にロードされたファームウェアを実行することで、メモリコントローラ30の動作を制御する。RAM32は、CPU31の作業領域として使用され、NAND装置10を管理するためのファームウェアや各種管理テーブルなどを保持する。
メモリコントローラ30は、NAND装置10のデータ管理を実行する。このデータ管理には、論理アドレスそれぞれとNAND装置10の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理等が含まれる。論理アドレスは、メモリシステム1をアドレス指定するためにホスト機器2によって使用されるアドレスである。この論理アドレスとしては、例えば、論理ブロックアドレス(LBA)が使用される。
論理ブロックアドレス(LBA)それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブルを用いて実行される。メモリコントローラ30は、上記ルックアップテーブルを使用して、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。あるLBAに対応する物理アドレスは、このLBAのデータが書き込まれたNAND装置10の物理記憶位置を示す。上記ルックアップテーブルは、メモリシステム1の電源オン時にNAND装置10からDRAM20にロードされてもよい。
メモリコントローラ30は、LBAに対応する上記ルックアップテーブルのエントリに基づいて、LBAに対応する物理アドレスを求め、NAND装置10からリードコマンドに応じたデータを読み出す。メモリコントローラ30は、読み出したデータに基づくデータをリードコマンドに対する応答として、読み出し処理が完了したことを示す通知とともにホスト機器2へ返す。
ホストI/F33は、ホストバスを介してホスト機器2と接続され、メモリコントローラ30とホスト機器2との間で、データ、コマンド、およびアドレスを送受信する。ホストI/F33は、例えば、NVMe(NVM Express)(登録商標)、SATA(Serial Advanced Technology Attachment)、SAS(Serial Attached SCSI)、またはPCIe(PCI Express)(登録商標)などの通信インターフェイス規格に適合している。
NANDI/F34は、メモリコントローラ30とNAND装置10との間で、データ、コマンド、およびアドレスを送受信する。NANDI/F34は、NANDインターフェイス規格に適合している。DRAMI/F35は、DRAM20に接続され、メモリコントローラ30とDRAM20との間で通信を行う。DRAMI/F35は、DRAMインターフェイス規格に適合している。
図2は、NAND装置10の構成を示すブロック図である。NAND装置10は、例えば、メモリセルアレイ11、コマンドレジスタ12、アドレスレジスタ13、シーケンサ14、ドライバモジュール15、ロウデコーダモジュール16、およびセンスアンプモジュール17を有する。
メモリセルアレイ11は、複数のブロックBLK0~BLK(k-1)(kは1以上の整数)を含む。ブロックBLKは、データを不揮発に記憶する複数のメモリセルの集合である。ブロックBLKは、データの消去単位として使用される。メモリセルアレイ11には、複数のビット線および複数のワード線が設けられている。各メモリセルは、1本のビット線と1本のワード線とに関連付けられている。
コマンドレジスタ12は、NAND装置10がメモリコントローラ30から受信したコマンドCMDを保持する。コマンドCMDは、例えば、書き込み動作、読み出し動作、または消去動作などをシーケンサ14に実行させる命令を含む。
アドレスレジスタ13は、NAND装置10がメモリコントローラ30から受信したアドレス情報ADDを保持する。アドレス情報ADDは、例えば、ブロックアドレスBA、ページアドレスPA、およびカラムアドレスCAを含む。ブロックアドレスBA、ページアドレスPA、およびカラムアドレスCAは、それぞれブロックBLK、ワード線、およびビット線の選択に使用される。
シーケンサ14は、NAND装置10の動作を制御する制御回路である。例えば、シーケンサ14は、コマンドレジスタ12に保持されたコマンドCMDに基づいて、ドライバモジュール15、ロウデコーダモジュール16、およびセンスアンプモジュール17などを制御して、書き込み動作、読み出し動作、および消去動作などを実行する。
ドライバモジュール15は、書き込み動作、読み出し動作、または消去動作などで使用される電圧を生成する。ドライバモジュール15は、例えば、アドレスレジスタ13に保持されたページアドレスPAに基づいて、選択されたワード線に対応する信号線に、生成した電圧を印加する。
ロウデコーダモジュール16は、アドレスレジスタ13に保持されたブロックアドレスBAに基づいて、対応するメモリセルアレイ11内の1つのブロックBLKを選択する。ロウデコーダモジュール16は、例えば、選択されたワード線に対応する信号線に印加された電圧を、選択されたブロックBLK内の選択されたワード線に転送する。
センスアンプモジュール17は、書き込み動作において、メモリコントローラ30から受信した書き込みデータDATに応じて、各ビット線に所望の電圧を印加する。センスアンプモジュール17は、読み出し動作において、ビット線の電圧に基づいてメモリセルに記憶されたデータを判定し、判定結果を読み出しデータDATとしてメモリコントローラ30に転送する。
図3は、メモリセルアレイ11に含まれる回路構成を示す図であり、メモリセルアレイ11に含まれる複数のブロックBLKのうち1つのブロックBLKを抽出して示している。ブロックBLKは、例えば4つのストリングユニットSU0~SU3を含む。
各ストリングユニットSUは、ビット線BL0~BL(L-1)(Lは1以上の整数)にそれぞれ関連付けられた複数のNANDストリングNSを含んでいる。以下ではビット線BL0~BL(L-1)を互いに区別しない場合は、「ビット線BL」と称する。各NANDストリングNSは、例えば、メモリセルトランジスタMT0~MT7、第1選択トランジスタST1、および第2選択トランジスタST2を含む。各メモリセルトランジスタMTは、制御ゲートおよび電荷蓄積層を含み、データを不揮発に保持する。第1選択トランジスタST1および第2選択トランジスタST2は、各種動作時におけるNANDストリングNSの選択に使用される。
各NANDストリングNSにおいて、メモリセルトランジスタMT0~MT7は、直列接続されている。第1選択トランジスタST1のドレインは、当該NANDストリングNSに対応するビット線BLに接続されている。選択トランジスタST1のソースは、直列接続されたメモリセルトランジスタMT0~MT7の一端に接続されている。第2選択トランジスタST2のドレインは、直列接続されたメモリセルトランジスタMT0~MT7の他端に接続されている。選択トランジスタST2のソースは、ソース線SLに接続されている。
同一のブロックBLKにおいて、メモリセルトランジスタMT0~MT7の制御ゲートは、それぞれワード線WL0~WL7に共通接続されている。ストリングユニットSU0~SU3内の第1選択トランジスタST1のゲートは、それぞれ選択ゲート線SGD0~SGD3に共通接続されている。ストリングユニットSU0~SU3内の第2選択トランジスタST2のゲートは、それぞれ選択ゲート線SGS0~SGS3に共通接続されている。
メモリセルアレイ11の回路構成において、ビット線BLは、各ストリングユニットSUで同一のカラムアドレスが割り当てられたNANDストリングNSによって共有されている。ソース線SLは、例えば複数のブロックBLK間で共有されている。
1つのストリングユニットSU内で共通のワード線WLに接続された複数のメモリセルトランジスタMTの集合は、セルユニットCUと称される。例えば、それぞれが1ビットデータを記憶するメモリセルトランジスタMTを含むセルユニットCUの記憶容量が、「1ページデータ」として定義される。セルユニットCUは、メモリセルトランジスタMTが記憶するデータのビット数に応じて、2ページデータ以上の記憶容量を有し得る。
以上のような構成を持つNAND装置10に対して、メモリコントローラ30は、所定の書き込み単位でライトデータを書き込む。所定の書き込み単位は、例えば、1ページデータ、または複数のページデータである。言い換えると、所定の書き込み単位は、例えば、1つのワード線WLに接続される複数のメモリセルに対応するサイズである。ただし、所定の書き込み単位は、上記例とは異なるサイズに設定されてもよい。
<2.ホスト機器2の構成>
次に、図1に戻り、ホスト機器2の構成について説明する。ホスト機器2は、例えば、ホストコントローラ40と、ホストメモリ50とを有する。
次に、図1に戻り、ホスト機器2の構成について説明する。ホスト機器2は、例えば、ホストコントローラ40と、ホストメモリ50とを有する。
ホストコントローラ40は、CPUのようなハードウェアプロセッサがオペレーティングシステムを実行することにより実現される。ただし、ホストコントローラ40の一部または全部は、回路により実現されてもよい。ホストコントローラ40は、例えば、コマンド発行部41と、通知部42とを有する。
コマンド発行部41は、メモリシステム1に対するコマンドを発行する。コマンド発行部41は、発行したコマンドを、メモリシステム1に直接に送信するのではなく、ホストメモリ50内のサブミッションキュー51(後述)に投入する。メモリシステム1に対するコマンドは、ライトコマンド、リードコマンド、およびフラッシュコマンドなどを含む。
ライトコマンドは、メモリシステム1に対してライトデータの書き込みを要求するコマンドである。ライトコマンドは、例えば、ライトデータが格納されたホストデータバッファ53(後述)の領域の先頭アドレスおよびデータ長を示すサイズ情報を含む。リードコマンドは、メモリシステム1からリードデータの読み出しを要求するコマンドである。
フラッシュコマンドは、ライトバッファ21に格納されているデータがある場合、ライトバッファ21に格納されているデータをNAND装置10に書き込ませる不揮発化コマンドである。メモリコントローラ30は、通常の処理において、フラッシュコマンドを受信しない場合であっても、ライトバッファ21に蓄積されたデータの量が所定の書き込み単位に達した場合に、それらデータを一括してNAND装置10に書き込む。本実施形態で「通常の処理」とは、後述するサブミッションキュー51に関する先読みが行われない場合の処理を意味する。一方で、フラッシュコマンドは、所定の書き込み単位のデータがライトバッファ21に蓄積されていない場合でも、ライトバッファ21に蓄積されたデータをNAND装置10に書き込ませるコマンドである。フラッシュコマンドは、予め設定された所定のタイミングでコマンド発行部41により発行される。
通知部42は、コマンド発行部41により発行されたコマンドがサブミッションキュー51に投入される場合、サブミッションキュー51に新しいコマンドが投入されたことを示す通知をメモリコントローラ30に送信する。この通知については、詳しく後述する。
ホストメモリ50は、例えばホスト機器2に設けられたDRAMにより構成される。ホストメモリ50は、例えば、サブミッションキュー51、コンプリーションキュー52、およびホストデータバッファ53を有する。
サブミッションキュー51は、ホスト機器2がメモリシステム1に実行させる動作を、いわゆる待ち行列の形式で保持するコマンドキューである。サブミッションキュー51は、特定のスロットサイズを有し、コマンド発行部41により発行されたコマンドが、コマンドの発行順に格納される。サブミッションキュー51は、メモリシステム1の外部に設けられたキューの一例である。サブミッションキュー51は、メモリコントローラ30がアクセス可能である。サブミッションキュー51に格納されたコマンドは、メモリコントローラ30によって順番にフェッチされる。サブミッションキュー51については、詳しく後述する。
コンプリーションキュー52は、完了したコマンドに関するステータスの通知をホスト機器2が受け取るための応答キューである。コンプリーションキュー52は、特定のスロットサイズを有し、メモリコントローラ30により発行された通知が格納される。
ホストデータバッファ53は、ホストコントローラ40とメモリシステム1との間のデータの転送に用いられる記憶領域である。ホストデータバッファ53には、コマンド発行部41により発行されたライトコマンドに対応するライトデータなどが一時的に保持される。
図4は、サブミッションキュー51のアドレスマップの一例を示す図である。例えば、サブミッションキュー51は、それぞれコマンドを格納可能な領域である8つのエントリ(SQ#0~SQ#7)を含む。この場合、サブミッションキュー51は、最大で8つのコマンドを同時に格納可能である。サブミッションキュー51内の8つのエントリには、それぞれ固有のアドレスが割り当てられている。サブミッションキュー51内のエントリに割り当てられたアドレスは、メモリコントローラ30に通知されている。このため、メモリコントローラ30は、上記アドレスを指定することで、サブミッションキュー51内の特定のエントリに格納されたコマンドを任意のタイミングで読み出すことができる。サブミッションキュー51の一例は、NVMe規格に適合したサブミッションキューである。
図5は、サブミッションキュー51のコマンドの格納状態の一例を示す図である。図5に示す例では、サブミッションキュー51に4つのコマンドが蓄積されており、サブミッションキュー51内の4つのエントリ(SQ#0~SQ#3)が埋まっている状態を示す。この場合、ホストコントローラ40の通知部42は、空のエントリ(SQ#4~SQ#7)のうち最も番号が小さいエントリ(SQ#4)を示す情報(“Tail”の位置を示す情報)を、メモリコントローラ30に通知する。これにより、メモリコントローラ30は、サブミッションキュー51内に格納されているコマンドの数を認識することができる。
<3.メモリコントローラの構成>
次に、メモリコントローラ30の構成について説明する。
図6は、メモリシステム1の一部の構成を示すブロック図である。図6は、説明の便宜上、4単位のデータによって、NAND装置10に対する1つの書き込み単位が構成される例を示す。また図6は、ライトコマンドA(Write-A)、ライトコマンドB(Write-B)、フラッシュコマンド(Flush)、リードコマンド(Read)、ライトコマンドC(Write-C)が順にサブミッションキュー51に格納され、その後、ライトコマンドA(Write-A)およびライトコマンドB(Write-B)がフェッチされ、フラッシュコマンド(Flush)、リードコマンド(Read)、およびライトコマンドC(Write-C)がサブミッションキュー51からフェッチされていない状態を示す。
次に、メモリコントローラ30の構成について説明する。
図6は、メモリシステム1の一部の構成を示すブロック図である。図6は、説明の便宜上、4単位のデータによって、NAND装置10に対する1つの書き込み単位が構成される例を示す。また図6は、ライトコマンドA(Write-A)、ライトコマンドB(Write-B)、フラッシュコマンド(Flush)、リードコマンド(Read)、ライトコマンドC(Write-C)が順にサブミッションキュー51に格納され、その後、ライトコマンドA(Write-A)およびライトコマンドB(Write-B)がフェッチされ、フラッシュコマンド(Flush)、リードコマンド(Read)、およびライトコマンドC(Write-C)がサブミッションキュー51からフェッチされていない状態を示す。
メモリコントローラ30は、例えば、コマンド解釈部61、フラッシュ状況管理部62、ライトデータ管理部63、書き込み管理部64、およびコマンド応答部65を有する。本実施形態では、コマンド解釈部61、フラッシュ状況管理部62、ライトデータ管理部63、および書き込み管理部64は、メモリコントローラ30のフロントエンドに含まれる。フロントエンドは、例えば、ホストI/F33、またはホストI/F33とCPU31との組み合わせにより実現される。一方で、コマンド応答部65は、FTL(Flash Translation Layer)に含まれる。FTLは、例えば、CPU31、またはCPU31とメモリコントローラ30内の回路との組み合わせにより実現される。
コマンド解釈部61は、サブミッションキュー51に格納されたコマンドをフェッチすることで、サブミッションキュー51に格納されたコマンドを取得する(図6中の矢印A参照)。コマンド解釈部61は、サブミッションキュー51から取得したコマンドをデコードすることで、取得したコマンドの内容を解釈する。コマンドの解釈は、コマンドの種類の判定を含む。また、コマンドの解釈は、取得したコマンドがライトコマンドである場合、当該ライトコマンドと対応するライトデータの容量(サイズ)を検出することを含む。上述したように、ライトコマンドには、ライトデータのデータ長を示すサイズ情報が含まれる。コマンド解釈部61は、例えばライトコマンドに含まれるサイズ情報に基づき、ライトデータの容量を検出する。コマンド解釈部61は、コマンドを解釈することで得られた情報を、フラッシュ状況管理部62およびライトデータ管理部63に出力する(図6中の矢印B参照)。
コマンド解釈部61は、通常の処理では、サブミッションキュー51に格納されたコマンドを、サブミッションキュー51に格納された順番でフェッチする。これにより通常の処理では、メモリコントローラ30は、サブミッションキュー51に格納されたコマンドを、サブミッションキュー51に格納された順番で実行する。図6に示す例では、コマンド解釈部61は、サブミッションキュー51に格納されたライトコマンドA、ライトコマンドB、フラッシュコマンドを、この順番でフェッチする。
本実施形態では、コマンド解釈部61は、サブミッションキュー51を走査することで、サブミッションキュー51の先読みを行う。「先読み」とは、サブミッションキュー51に格納されている未処理のコマンドよりも後にサブミッションキュー51に格納された1つ以上のコマンド(後続コマンド)を検出することを意味する。ここで、未処理のコマンドは、メモリコントローラ30が実行していないコマンドを指す。例えば、コマンド解釈部61がサブミッションキュー51からフェッチしたコマンドがフラッシュコマンドであって、メモリコントローラ30がライトバッファ21に格納されているデータをNAND装置10に書き込む処理を実行していない場合は、フェッチしたフラッシュコマンドは未処理のコマンドである。また、「先読み」は、サブミッションキュー51に格納されている未処理のコマンドよりも後にサブミッションキュー51に格納された1つ以上のコマンド(後続コマンド)をフェッチして取得する処理であってもよい。図6に示す例では、サブミッションキュー51の先読みにより、フラッシュコマンドに続く後続コマンドとしてリードコマンドおよびライトコマンドCが検出される。
本実施形態では、コマンド解釈部61は、所定の書き込み単位を満たさないライトデータがライトバッファ21に格納された状態で、サブミッションキュー51から受け取るコマンド(例えばフェッチしたコマンド)がフラッシュコマンドである場合、フラッシュコマンドよりも後にサブミッションキュー51に格納された1つ以上の後続コマンドを先読みする。
そして、コマンド解釈部61は、先読みすることで検出されたコマンドをデコードすることで、先読みしたコマンドの内容を解釈する。すなわち、コマンド解釈部61は、先読みしたコマンドの種類を判定する。さらに、コマンド解釈部61は、先読みした1つ以上のコマンドにライトコマンドが含まれる場合、先読みしたライトコマンドに対応するライトデータの容量を検出する。コマンド解釈部61は、サブミッションキュー51を先読みすることで得られた情報を、フラッシュ状況管理部62およびライトデータ管理部63に出力する。
フラッシュ状況管理部62は、メモリシステム1のフラッシュコマンドに関する処理を管理する。本実施形態では、フラッシュ状況管理部62は、コマンド解釈部61がサブミッションキュー51から受け取るコマンドがフラッシュコマンドである場合、ライトバッファ21に格納されているライトデータの量を検出する(図6中の矢印C参照)。すなわち、フラッシュ状況管理部62は、ライトバッファ21に格納されたライトデータのサイズが所定の書き込み単位に到達しているか否かを判定する。図6に示す例では、ライトバッファ21には、2単位のデータA、1単位のデータBが格納されており、所定の書き込み単位まで1単位のデータが足りていない状況である。2単位のデータAおよび1単位のデータBの合計は、「第1データ」の一例である。以下では説明の便宜上、ライトバッファ21に格納されたライトデータのサイズが所定の書き込み単位よりも小さいことを「ライトデータが所定の書き込み単位を満たさない」と称し、「ライトバッファ21に格納されたライトデータのサイズが所定の書き込み単位に到達していることを「ライトデータが所定の書き込み単位を満たす」と称することがある。
フラッシュ状況管理部62は、所定の書き込み単位を満たさないライトデータがライトバッファ21に格納された状態で、コマンド解釈部61がサブミッションキュー51から受け取るコマンドがフラッシュコマンドである場合、フラッシュ状況管理部62内のRAM62aに、フラッシュコマンドと、ライトバッファ21に格納されているライトデータの量を示す情報を保持させる。加えて、フラッシュ状況管理部62は、サブミッションキュー51の先読みを指示する先読み要求(以下「SQ先読み要求」と称する)をコマンド解釈部61に出力する(図6中の矢印D参照)。これにより、コマンド解釈部61は、上述したサブミッションキュー51の先読みを行う(図6中の矢印E参照)。
ライトデータ管理部63は、ライトコマンドに応じてホスト機器2から受け取るライトデータを、DRAM20内のライトバッファ21に格納する。本実施形態では、ライトデータ管理部63は、コマンド解釈部61により先読みされた後続コマンドにライトコマンドが含まれる場合、当該ライトコマンド(以下「先読みされたライトコマンド」と称する)に対応してホストデータバッファ53に格納されているライトデータを、メモリシステム1のライトバッファ21へ転送させる要求をホストコントローラ40に出力する。
これにより、ライトデータ管理部63は、先読みされたライトコマンドに対応するライトデータを、ライトバッファ21に格納する(図6中の矢印F参照)。図6に示す例では、先読みされたライトコマンドCに対応するライトデータである1単位のデータCがライトバッファ21に格納される。これにより、ライトバッファ21に格納されたライトデータのサイズが所定の書き込み単位に到達する。データCは、「第2データ」の一例である。ライトデータ管理部63は、ライトバッファ21に格納されたライトデータのサイズが所定の書き込み単位に到達した場合、ライトバッファ21に格納されたライトデータのサイズが所定の書き込み単位に到達したことを示す通知(以下「バッファフル通知」と称する)を書き込み管理部64に出力する(図6中の矢印G参照)。
書き込み管理部64は、バッファフル通知を受け取る場合、ライトバッファ21に格納された所定の書き込み単位を満たすデータを、NANDI/F34を介して一括してNAND装置10に書き込む。図6に示す例では、書き込み管理部64は、2単位のデータA、1単位のデータB、および1単位のデータCを所定の書き込み単位を満たすデータとしてNAND装置10に書き込む(図6中の矢印H参照)。すなわち、図6に示す例では、書き込み管理部64は、2単位のデータA、1単位のデータB、および1単位のデータCを同時にNAND装置10に書き込む。
書き込み管理部64は、所定の書き込み単位を満たすデータを一括してNAND装置10に書き込む書き込み動作を行った後、その結果を示す通知をフラッシュ状況管理部62に出力する(図6中の矢印I参照)。フラッシュ状況管理部62は、書き込み管理部64から書き込み動作の適切な結果を示す通知を受け取る場合、ライドコマンドA,B,Cの処理が完了したこと、およびフラッシュコマンドの処理が完了したことを示す通知を、コマンド応答部65に出力する(図6中の矢印J参照)。
一方で、書き込み管理部64は、サブミッションキュー51を先読みした場合でもライトバッファ21に格納されたライトデータのサイズが所定の書き込み単位に到達しない場合、フラッシュコマンドに応じた処理を実行する。すなわち、書き込み管理部64は、ライトバッファ21に格納されているデータのみを、NANDI/F34を介してNAND装置10に書き込む。この場合、NAND装置10に対してパディングデータをパディングすることを含む書き込み処理が行われる。「パディングデータ」とは、ライトデータのサイズが所定の書き込み単位に到達しない場合に、不足するサイズ分に対応して書き込まれる意味をもたないデータである。
コマンド応答部65は、コマンドの処理が完了したことを示す通知をフラッシュ状況管理部62から受け取る場合、完了したコマンドに関するステータスの通知をコンプリーションキュー52に投入する(図6中の矢印K参照)。図6に示す例では、コマンド応答部65は、ライドコマンドCの処理が完了したこと、およびフラッシュコマンドの処理が完了したことを示す通知をコンプリーションキュー52に投入する。これにより、ホスト機器2は、コマンドの処理が完了したことを認識可能になる。
<4.動作>
図7は、第1実施形態のメモリコントローラ30の動作の流れを示すフローチャートである。まず、コマンド解釈部61は、サブミッションキュー51からコマンドをフェッチすることでサブミッションキュー51からコマンドを受け取る(S101)。そして、コマンド解釈部61は、サブミッションキュー51から受け取るコマンドがフラッシュコマンドであるか否かを判定する(S102)。サブミッションキュー51から受け取るコマンドがフラッシュコマンドでない場合(S102:NO)、メモリコントローラ30は通常の作理を続ける。すなわち、メモリコントローラ30は、サブミッションキュー51に格納されたコマンドをその格納順に受け取り、受け取ったコマンドに応じた処理を順番に実行する。
図7は、第1実施形態のメモリコントローラ30の動作の流れを示すフローチャートである。まず、コマンド解釈部61は、サブミッションキュー51からコマンドをフェッチすることでサブミッションキュー51からコマンドを受け取る(S101)。そして、コマンド解釈部61は、サブミッションキュー51から受け取るコマンドがフラッシュコマンドであるか否かを判定する(S102)。サブミッションキュー51から受け取るコマンドがフラッシュコマンドでない場合(S102:NO)、メモリコントローラ30は通常の作理を続ける。すなわち、メモリコントローラ30は、サブミッションキュー51に格納されたコマンドをその格納順に受け取り、受け取ったコマンドに応じた処理を順番に実行する。
一方で、サブミッションキュー51から受け取るコマンドがフラッシュコマンドである場合(S102:YES)、コマンド解釈部61は、サブミッションキュー51から受け取ったフラッシュコマンドを示す情報をフラッシュ状況管理部62に通知する(S103)。この場合、フラッシュ状況管理部62は、ライトバッファ21に格納されているライトデータの量を検出する(S104)。
S104の処理による検出の結果、ライトバッファ21が空である、または所定の書き込み単位を満たすライトデータがライトバッファ21に格納されている場合(S105:YES)、本フローの対象外である。この場合は、メモリコントローラ30は、通常の処理の一環として、サブミッションキュー51に格納されたコマンドをその格納順に受け取り、受け取ったコマンドに応じた処理を順番に実行する。
一方で、フラッシュ状況管理部62は、ライトバッファ21が空でなく、且つ、所定の書き込み単位を満たさないデータがライトバッファ21に格納されている場合(S105:NO)、SQ先読み要求をコマンド解釈部61に通知する(S106)。さらに、フラッシュ状況管理部62は、処理対象となるフラッシュコマンドを保持する(S107)。
コマンド解釈部61は、フラッシュ状況管理部62からSQ先読み要求を受け取る場合、サブミッションキュー51の先読みを行う(S108)。すなわち、コマンド解釈部61は、サブミッションキュー51において、フラッシュコマンドに続く1つ以上の後続コマンドにライトコマンドが含まれるか否かを検出する。コマンド解釈部61は、サブミッションキュー51の先読みの結果、ライトコマンドの存在が検出された場合、先読みされたライトコマンドに対応するライトデータの容量(サイズ)を検出し、先読みされたライトコマンドを処理対象のコマンドとしてライトデータ管理部63に通知する(S109)。この通知に応じて、ライトデータ管理部63は、先読みされたライトコマンドに対応するライトデータを、ライトバッファ21に格納する。
次に、フラッシュ状況管理部62は、ライトバッファ21に格納されたデータの量が所定の書き込み単位まで蓄積されたか、およびサブミッションキュー51において先読みすべきエントリがもう存在しないかを検出する(S110)。フラッシュ状況管理部62は、ライトバッファ21に格納されたデータの量が所定の書き込み単位までまだ蓄積されておらず、且つ、サブミッションキュー51において先読みすべきエントリがまだ存在する場合(S110:NO)、S108からS110の処理を繰り返す。一方で、フラッシュ状況管理部62は、ライトバッファ21のデータ量が所定の書き込み単位まで蓄積された、または、サブミッションキュー51において先読みすべきエントリがもう存在しない場合(S110:YES)、S111の処理に進む。
フラッシュ状況管理部62は、S110の処理が完了した後、ライトバッファ21のデータの量が所定の書き込み単位まで蓄積されたか否かを判定する(S111)。フラッシュ状況管理部62は、ライトバッファ21のデータの量が所定の書き込み単位まで蓄積されていない場合(S111:NO)、フラッシュコマンドの処理を実行する(S112)。すなわち、NAND装置10に対してパディングデータをパディングすることを含む書き込み処理が行われる。
一方で、書き込み管理部64は、ライトバッファ21のデータの量が所定の書き込み単位まで蓄積された場合(S111:YES)、書き込み単位のデータをNAND装置に一括して書き込む処理を実行する(S113)。次に、書き込み管理部64は、書き込みが完了したことを示す通知をフラッシュ状況管理部62に出力する(S114)。次に、コマンド応答部65は、先読みしたライトコマンドの処理の完了通知と同時にフラッシュコマンドの処理の完了通知をホスト機器2のコンプリーションキュー52に投入する(S115)。これにより、一連の処理が終了する。
図8は、第1実施形態のメモリコントローラ30の動作の流れの一例を示すシーケンス図である。図8は、サブミッションキュー51に、ライトコマンドA(Write-A)、ライトコマンドB(Write-B)フラッシュコマンド(Flush)、リードコマンド(Read)、ライトコマンドC(Write-C)、およびライトコマンドD(Write-D)が、この順番に格納されている場合の例を示す。ライトコマンドA,B,C,Dに対応するライトデータは、それぞれ1単位のデータである。ライトコマンドCは、「第1ライトコマンド」の一例である。ライトコマンドDは、「第2ライトコマンド」の一例である。ライトコマンドCに対応するデータCは、「第1ライトデータ」の一例であり、「第2データ」の一例である。ライトコマンドDに対応するデータDは、「第2ライトデータ」の一例であり、「第3データ」の一例である。
まず、コマンド解釈部61は、サブミッションキュー51からライトコマンドAをフェッチする(S201)。この場合、ライトデータ管理部63は、ライトコマンドAに対応するデータAをライトバッファ21に格納する(S202)。コマンド応答部65は、ライトコマンドAの処理が完了したことを示す応答をコンプリーションキュー52に投入する(S203)。
次に、コマンド解釈部61は、サブミッションキュー51からライトコマンドBをフェッチする(S211)。この場合、ライトデータ管理部63は、ライトコマンドBに対応するデータBをライトバッファ21に格納する(S212)。コマンド応答部65は、ライトコマンドBの処理が完了したことを示す応答をコンプリーションキュー52に投入する(S213)。
次に、コマンド解釈部61は、サブミッションキュー51からフラッシュコマンドをフェッチする(S221)。この場合、フラッシュ状況管理部62は、ライトバッファ21に格納されている現在のデータの量を検出する(S222)。図7に示す例では、フラッシュ状況管理部62は、ライトバッファ21に格納されている現在のデータの量が所定の書き込み単位を満たさないため、フラッシュコマンドを保持する(S223)。
次に、コマンド解釈部61は、サブミッションキュー51に対して先読みを行う。この例では、サブミッションキュー51には、次のコマンドとして、リードコマンドが格納されている。コマンド解釈部61は、先読みにより検出されたコマンドがリードコマンドである場合、リードコマンドを処理せずにスキップする(S231)。なお、コマンド解釈部61は、先読みにより検出されたコマンドがリードコマンドである場合、リードコマンドをスキップせずにリードコマンドに対応する読み出し処理を実行し、その後にS241以降の処理を行ってもよい。
次に、コマンド解釈部61は、サブミッションキュー51に対して再び先読みを行う。この例では、サブミッションキュー51には、次のコマンドとして、ライトコマンドCが格納されている。この場合、コマンド解釈部61は、先読みにより検出されたライトコマンドCをフェッチする(S241)。この場合、ライトデータ管理部63は、ライトコマンドCに対応するデータCをライトバッファ21に格納するとともに、ライトコマンドCをフラッシュ状況管理部62で保持する(S242)。
次に、コマンド解釈部61は、サブミッションキュー51に対して再び先読みを行う。この例では、サブミッションキュー51には、次のコマンドとして、ライトコマンドDが格納されている。この場合、コマンド解釈部61は、先読みにより検出されたライトコマンドDをフェッチする(S251)。この場合、ライトデータ管理部63は、ライトコマンドDに対応するデータDをライトバッファ21に格納するとともに、ライトコマンドDをフラッシュ状況管理部62で保持する(S252)。以上の処理により、ライトバッファ21に格納されたライトデータのサイズが所定の書き込み単位に到達する。
書き込み管理部64は、ライトバッファ21に格納されたデータA,B,C,DをNAND装置10へ転送し(S261)、NAND装置10に同時に書き込む(S262)。正常な処理が完了すると、NAND装置10は、書き込み完了を示す通知を書き込み管理部64に通知する(S263)。この場合、コマンド応答部65は、フラッシュコマンドの処理、およびライトコマンドC,Dの処理が完了したことを示す応答をコンプリーションキュー52に投入する(S264)。これにより、有効データ率が100%であるフラッシュコマンドの処理が行われる。
<5.利点>
メモリコントローラは、書き込み単位を満たさない第1データがライトバッファに格納された状態で、第1データをNANA装置に書き込ませる所定コマンド(例えばフラッシュコマンド)を受け取る場合がある。書き込み単位を満たさない状態で第1データが不揮発性メモリに書き込むためには、パディングデータを同時に書き込む処理が発生する。その結果、書き込み効率(Write Application Factor : WAF)が低下し、長期的にはメモリシステムの信頼性が低下する場合がある。
メモリコントローラは、書き込み単位を満たさない第1データがライトバッファに格納された状態で、第1データをNANA装置に書き込ませる所定コマンド(例えばフラッシュコマンド)を受け取る場合がある。書き込み単位を満たさない状態で第1データが不揮発性メモリに書き込むためには、パディングデータを同時に書き込む処理が発生する。その結果、書き込み効率(Write Application Factor : WAF)が低下し、長期的にはメモリシステムの信頼性が低下する場合がある。
一方で、本実施形態では、メモリコントローラ30は、書き込み単位を満たさない第1データがライトバッファに格納された状態で、第1データをNAND装置10に書き込ませる所定コマンドを受け取る場合、第1データと、ホスト機器2から取得された第2データとを同時にNAND装置10に書き込む。これにより、書き込み効率の低下を抑制し、メモリシステムの信頼性を向上させることができる。
本実施形態では、メモリコントローラ30は、所定コマンドをサブミッションキュー51から受け取る場合、所定コマンドよりも後にサブミッションキュー51に格納された1つ以上の後続コマンドを先読みし、1つ以上の後続コマンドにライトコマンドが含まれる場合、当該ライトコマンドに対応するライトデータを第2データとしてNAND装置10に書き込む。このような構成によれば、後続のライトコマンドに対応するライトデータを利用して、書き込み効率の低下を抑制することができる。加えて、後続のライトコマンドに対応するライトデータもNAND装置10に書き込まれるため、処理速度の向上にも寄与する。
本実施形態では、メモリコントローラ30は、後続のライトコマンドに対応するライトデータを第2データとしてNAND装置10に書き込むことに応じて、所定コマンドおよびライトコマンドの処理が完了したことを示す応答をホスト機器2に出力する。このような構成によれば、ホスト機器2は、所定コマンドおよびライトコマンドの処理が完了したことを適切に認識することができる。
<6.変形例>
図9は、第1実施形態の変形例のメモリシステム1Aの一部を示すブロック図である。本変形例では、ホストメモリ50は、例えば、並列動作可能な複数のコアに対応する複数のサブミッションキューとして、第1サブミッションキュー51Aと、第2サブミッションキュー51Bとを有する。同様に、ホストメモリ50は、並列動作可能な複数のコアに対応する複数のコンプリーションキューとして、第1コンプリーションキュー52Aと、第2コンプリーションキュー52Bとを有する。
図9は、第1実施形態の変形例のメモリシステム1Aの一部を示すブロック図である。本変形例では、ホストメモリ50は、例えば、並列動作可能な複数のコアに対応する複数のサブミッションキューとして、第1サブミッションキュー51Aと、第2サブミッションキュー51Bとを有する。同様に、ホストメモリ50は、並列動作可能な複数のコアに対応する複数のコンプリーションキューとして、第1コンプリーションキュー52Aと、第2コンプリーションキュー52Bとを有する。
第1サブミッションキュー51Aには、第1コアに含まれるプロセッサにより発行されたコマンドが順番に投入される。第2サブミッションキュー51Bには、第2コアに含まれるプロセッサにより発行されたコマンドが順番に投入される。第1サブミッションキュー51Aは、「第1キュー」の一例である。第2サブミッションキュー51Bは、「第2キュー」の一例である。
本変形例では、メモリコントローラ30Aのコマンド解釈部61Aは、第1サブミッションキュー51Aおよび第2サブミッションキュー51Bのいずれかから受け取るコマンドがフラッシュコマンドである場合、第1サブミッションキュー51Aおよび第2サブミッションキュー51Bの両方に対して先読みを行う。そして、書き込み管理部64は、第1サブミッションキュー51Aおよび第2サブミッションキュー51Bのいずれかに後続または未処理のライトコマンドがある場合、当該ライトコマンドに対応するライトデータと、ライトバッファ21に格納されているライトデータとを同時にNAND装置10に書き込む。また、本変形例では、コマンド応答部65Aは、コマンドの処理が完了した場合、第1サブミッションキュー51Aから受け取るコマンドに対する応答を第1コンプリーションキュー52Aに投入し、第2サブミッションキュー51Bから受け取るコマンドに対する応答を第2コンプリーションキュー52Bに投入する。
このような構成によれば、複数のサブミッションキュー51を先読みすることで、ライトコマンドを発見できる確率を高めることができる。これにより、書き込み効率の低下をさらに抑制し、メモリシステム1Aの信頼性をさらに向上させることができる。
(第2実施形態)
次に、第2実施形態について説明する。第2実施形態は、サブミッションキュー51からフラッシュコマンドを受け取る場合に、ライトデータと、メモリシステム1Bの内部処理に伴うデータ(以下「内部データ」と称する)とが同時にNAND装置10に書き込まれる点で、第1実施形態とは異なる。以下に説明する以外の構成は、第1実施形態の構成と同様である。
次に、第2実施形態について説明する。第2実施形態は、サブミッションキュー51からフラッシュコマンドを受け取る場合に、ライトデータと、メモリシステム1Bの内部処理に伴うデータ(以下「内部データ」と称する)とが同時にNAND装置10に書き込まれる点で、第1実施形態とは異なる。以下に説明する以外の構成は、第1実施形態の構成と同様である。
図10は、第2実施形態のメモリシステム1Bの一部を示すブロック図である。本実施形態では、DRAM20は、ライトバッファ21およびリードバッファ22(図1参照)に加えて、内部処理バッファ23を有する。内部処理バッファ23には、メモリシステム1Bの内部処理に伴いメモリシステム1B内を移動される内部データが一時的に格納される。内部処理は、例えば、CPU31、またはCPU31とメモリコントローラ30内の回路との組み合わせにより実行される。例えば、内部データは、不揮発性メモリMに書き込まれたことがあるデータであって、不揮発性メモリMから読み出され、不揮発性メモリMに再度書き込み予定のデータである。内部処理バッファ23は、「ライトバッファとは異なる揮発性メモリの所定領域」の一例である。内部データは、「書き込み対象データ」の一例である。メモリシステム1Bの内部処理は、例えば、ガベージコレクション、コンパクション、リフレッシュ、またはウェアレベリングなどである。
ガベージコレクションは、NAND装置10のフリーブロック数を増加させる処理である。「フリーブロック」は、有効データが格納されておらず、消去動作を経ることで新たなデータが書き込み可能なブロックである。例えば、ガベージコレクションは、有効データおよび無効データが記憶された複数のブロックBLK(移動元ブロックBLK)から、少なくとも有効データを、移動元ブロックBLKの数よりも少ない数の別のブロックBLK(移動先ブロックBLK)にコピーし、複数の移動元ブロックBLKのデータを無効化する処理である。ガベージコレクションが実行される場合、移動元ブロックBLKから読み出された有効データが内部データの一例として内部処理バッファ23に格納される。ここで、「有効データ」とは、上記ルックアップテーブルから参照されているデータ(すなわち論理アドレスと紐付けられているデータ)である。有効データは、後にホスト機器2によって読み出される可能性があるデータである。一方で、「無効データ」とは、どの論理アドレスとも紐付けられていないデータである。無効データは、もはやホスト機器2から読み出される可能性が無いデータである。また、ガベージコレクションが実行される場合、パディングデータも無効データと同様のデータとして扱われる。
コンパクションは、NAND装置10において、連続する空き領域を増加させる処理である。例えば、コンパクションは、連続しない複数のブロックBLK(移動元ブロックBLK)から読み出されたデータを、連続する複数のブロックBLK(移動先ブロックBLK)にコピーし、複数の移動元ブロックBLKのデータを空き領域とする処理である。コンパクションが実行さえる場合、移動元ブロックBLKから読み出されたデータが内部データの一例として内部処理バッファ23に格納される。なお、コンパクションは、ガベージコレクションの一部として実行されてもよい。
リフレッシュは、NAND装置10に記憶されたデータの劣化を抑制するために、NAND装置10から一度データを読み出し、読み出したデータをNAND装置10に書き直す処理である。リフレッシュが実行さえる場合、NAND装置10から読み出されたリフレッシュ対象のデータが内部データの一例として内部処理バッファ23に格納される。
ウェアレベリングは、NAND装置10の使用寿命を延ばすために、データを記憶したブロックBLK(移動元ブロックBLK)からデータを読み出し、読み出したデータを同じNAND装置10内の別のブロックBLKまたは別のNAND装置10に書き直す処理である。ウェアレベリングが実行される場合、移動元ブロックBLKから読み出されたデータが内部データの一例として内部処理バッファ23に格納される。
図10に示すように、本実施形態のメモリコントローラ30BのFTLは、書き込み管理部64Bに加え、内部処理管理部71を有する。内部処理管理部71は、メモリシステム1Bの内部処理を管理する。例えば、内部処理管理部71は、上述したガベージコレクション、コンパクション、リフレッシュ、およびウェアレベリングなどの処理を管理する。
本実施形態では、フラッシュ状況管理部62Bは、第1実施形態と同様に、コマンド解釈部61がサブミッションキュー51から受け取るコマンドがフラッシュコマンドである場合、ライトバッファ21に格納されているライトデータの量を検出する(図10中の矢印C参照)。すなわち、フラッシュ状況管理部62Bは、所定の書き込み単位を満たすライトデータがライトバッファ21に格納されているか否かを判定する。図10に示す例では、ライトバッファ21には、2単位のデータA、1単位のデータBが所定の書き込み単位まで1単位のデータが足りていない状況である。
フラッシュ状況管理部62Bは、所定の書き込み単位を満たさないライトデータがライトバッファ21に格納された状態で、コマンド解釈部61がサブミッションキュー51からフラッシュコマンドを受け取る場合、フラッシュ状況管理部62B内のRAM62a内に、フラッシュコマンドと、ライトバッファ21に格納されているライトデータの量を示す情報を保持させる。加えて、フラッシュ状況管理部62Bは、書き込み管理部64Bに対して、ライトバッファ21に格納されているライトデータ(所定の書き込み単位を満たさないライトデータ)と、内部処理バッファ23に格納されている内部データの少なくとも一部とを同時にNAND装置10に書き込ませる要求(以下「データ補填付き書き込み要求」と称する)を通知する(図10中の矢印D´参照)。
書き込み管理部64Bは、データ補填付き書き込み要求を受け取る場合、内部処理管理部71に対して、内部処理バッファ23に格納されている内部データの量を検出させる要求(以下「内部処理バッファ確認要求」と称する)を通知する(図10中の矢印E´参照)。
内部処理管理部71は、内部処理バッファ確認要求を受け取る場合、内部処理バッファ23に格納されている内部データの量を検出する。そして、内部処理管理部71は、検出された内部データの量を示す情報を書き込み管理部64Bに通知する。
書き込み管理部64Bは、内部処理バッファ23に内部データが格納されている場合、ライトバッファ21に格納されているライトデータと、内部処理バッファ23に格納されている内部データのなかで、所定の書き込み単位に対してライトデータが不足する分に相当する量の内部データとを、同時にNAND装置10に書き込む(図10中の矢印F´参照)。図10に示す例では、書き込み管理部64Bは、ライトバッファ21に格納されている2単位のデータAおよび1単位のデータBと、内部処理バッファ23に格納されている1単位のデータXとを、同時にNAND装置10に書き込む。
書き込み管理部64Bは、所定の書き込み単位を満たすデータを一括してNAND装置10に書き込む書き込み動作を行った後、その結果を示す通知をフラッシュ状況管理部62Bに出力する(図10中の矢印G´参照)。フラッシュ状況管理部62Bは、書き込み管理部64Bから書き込み動作の適切な結果を示す通知を受け取る場合、フラッシュコマンドの処理が完了したことを示す通知を、コマンド応答部65に出力する(図10中の矢印H´参照)。
コマンド応答部65は、コマンドの処理が完了したことを示す通知をフラッシュ状況管理部62Bから受け取る場合、完了したコマンドに関するステータスの通知をコンプリーションキュー52に投入する(図10中の矢印I´参照)。これにより、ホスト機器2は、コマンドの処理が完了したことを認識可能になる。
以上説明した構成によれば、第1実施形態と同様に、信頼性の向上を図ることができる。例えば、本実施形態では、メモリコントローラ30Bは、所定コマンドをサブミッションキュー51から受け取る場合、DRAM20の所定領域に書き込み対象データがあるか否かを判定し、DRAM20の所定領域に書き込み対象データがある場合、当該書き込み対象データをライトバッファ21に格納されたライトデータと同時にNAND装置10に書き込む。これにより、書き込み効率の低下を抑制し、メモリシステム1Bの信頼性を向上させることができる。
なお、第2実施形態は、第1実施形態と組み合わされて実現されてもよい。すなわち、書き込み管理部64Bは、コマンド解釈部61がフラッシュコマンドを受け取る場合、ライトバッファ21に書き込まれているライトデータ(書き込み単位を満たさないライトデータ)と、サブミッションキュー51を先読みすることで得られるライトデータと、内部処理バッファ23から得られる内部データとを、同時にNAND装置10に書き込んでもよい。
(第3実施形態)
次に、第3実施形態について説明する。第3実施形態は、サブミッションキュー51からフラッシュコマンドを受け取る場合に、ライトバッファ21に書き込まれているライトデータと、当該ライトデータと属性が近いデータとが同時にNAND装置10に書き込まれる点で、第1実施形態とは異なる。以下に説明する以外の構成は、第1実施形態または第2実施形態の構成と同様である。
次に、第3実施形態について説明する。第3実施形態は、サブミッションキュー51からフラッシュコマンドを受け取る場合に、ライトバッファ21に書き込まれているライトデータと、当該ライトデータと属性が近いデータとが同時にNAND装置10に書き込まれる点で、第1実施形態とは異なる。以下に説明する以外の構成は、第1実施形態または第2実施形態の構成と同様である。
図11は、第3実施形態のメモリシステム1Cの一部を示すブロック図である。本実施形態では、メモリコントローラ30Cは、データの属性を管理するデータ属性管理部81を有する。データ属性管理部81は、フラッシュ状況管理部62Cの一部として設けられてもよいし、フラッシュ状況管理部62Cとは別に設けられてもよい。
データ属性管理部81は、各データと、各データの属性を示す属性情報と対応付けて管理する。このような属性情報は、例えば、各データに対するアクセス頻度(コールドデータであるかホットデータであるかなど、いわゆるデータの温度)によって分類された属性情報でもよく、各データに対して設定されたグループごとに付与された属性情報でもよく、各データを過去に書き込んだコマンドの種類に応じて付与された属性情報でもよい。
「各データに対して設定されたグループごとに付与された属性情報」は、例えば、同じ特徴を持つデータに対して纏めて付与される識別子(ID)である。「各データに対して設定されたグループごとに付与された属性情報」は、例えば、NVMe規格で定義されたストリームIDである。「各データを過去に書き込んだコマンドの種類に応じて付与された属性情報」は、例えば、過去にフラッシュコマンドの処理により書き込まれたデータであるか否かを示す識別子である。また、ライトデータに関しては、NVMe規格のDSM(Dataset Management)が属性情報として利用されてもよい。
実施形態では、データ属性管理部81は、上述した属性情報に基づき、2つのデータの属性情報が所定の条件を満たすか否かを判定する。例えば、データ属性管理部81は、2つのデータのアクセス頻度の違いが所定の範囲内である場合、当該2つのデータの属性情報が所定の条件を満たすと判定する。同様に、データ属性管理部81は、2つのデータに対して付与されている識別子の違いが所定の範囲内である場合、当該2つのデータの属性情報が所定の条件を満たすと判定する。さらに、データ属性管理部81は、2つのデータの過去の書き込み過程(フラッシュコマンドの処理に基づくものであるか否か)が同じである場合、当該2つのデータの属性情報が所定の条件を満たすと判定する。
本実施形態では、フラッシュ状況管理部62Cは、ライトバッファ21に書き込まれているライトデータ(書き込み単位を満たさないライトデータ)に対応付けられた属性情報と、サブミッションキュー51を先読みすることで得られるライトデータに対応付けられた属性情報とが所定の条件を満たすと判定された場合に限り、それらデータを同時にNAND装置10に書き込む。同様に、書き込み管理部64は、ライトバッファ21に書き込まれているライトデータ(書き込み単位を満たさないライトデータ)に対応付けられた属性情報と、内部処理バッファ23から得られる内部データに対応付けられた属性情報とが所定の条件を満たすと判定された場合に限り、それらデータを同時にNAND装置10に書き込む。
このような構成によれば、第1実施形態と同様に、信頼性の向上を図ることができる。ここで、特性が異なる複数のデータを纏めてNAND装置10に書き込むと、書き込み効率(WAF)が逆に低下する場合がある。
そこで本実施形態では、メモリコントローラ30Cは、ライトバッファ21に格納されている第1データに対応付けられた属性情報と、メモリシステム1Cの外部または内部から取得される第2データに対応付けられた属性情報とが所定の関係を満たす場合に限り、第1データと第2データとを同時にNAND装置10に書き込む。このような構成によれば、特性が異なる複数のデータを纏めてNAND装置10に書き込むことを抑制することができる。これにより、書き込み効率の低下をさらに抑制し、メモリシステム1Cの信頼性をさらに向上させることができる。
本実施形態によれば、例えば、ホットデータとコールドデータとを纏めてNAND装置10に書き込むことを抑制することができる。また、以前もフラッシュコマンドにより書き込まれたデータは、ログやジャーナルである可能性が高い。これらデータは、メモリシステム1Cの内部処理(例えばコンパクション)の対象であったとしても、ライトデータと混ぜて書き込んでも書き込み効率の大きな低下に結びつきにくい。このため本実施形態では、以前もフラッシュコマンドにより書き込まれたデータは、ライトデータと同時にNAND装置10に書き込む処理が行われる。
なお上記例に代えて/加えて、フラッシュ状況管理部62Cは、ライトバッファ21に書き込まれているライトデータと同時に書き込むデータとして、サブミッションキュー51を先読みすることで得られるライトデータと、内部処理バッファ23から得られる内部データとのうち、ライトバッファ21に書き込まれているライトデータと属性情報の類似度が高いほうのデータを選択するようにしてもよい。
(第4実施形態)
次に、第4実施形態について説明する。第4実施形態は、未処理のコマンドの後に格納されたフラッシュコマンドが存在しないかを検出するためサブミッションキュー51を先読みし、サブミッションキュー51を先読みすることでフラッシュコマンドが発見された場合、メモリシステム1Dの内部処理を事前に促進して内部処理バッファ23に内部データを格納させる点で、第2実施形態とは異なる。以下に説明する以外の構成は、第1実施形態または第2実施形態の構成と同様である。
次に、第4実施形態について説明する。第4実施形態は、未処理のコマンドの後に格納されたフラッシュコマンドが存在しないかを検出するためサブミッションキュー51を先読みし、サブミッションキュー51を先読みすることでフラッシュコマンドが発見された場合、メモリシステム1Dの内部処理を事前に促進して内部処理バッファ23に内部データを格納させる点で、第2実施形態とは異なる。以下に説明する以外の構成は、第1実施形態または第2実施形態の構成と同様である。
図12は、第4実施形態のメモリシステム1Dの一部を示すブロック図である。本実施形態では、メモリコントローラ30Dのコマンド解釈部61Dは、所定のタイミング(例えば一定の周期)で、サブミッションキュー51にフラッシュコマンドに存在しないか否かを判定するために、サブミッションキュー51を先読みする。図12に示す例では、サブミッションキュー51が先読みされることで、サブミッションキュー51に先に格納された先行コマンドであるライトコマンドA,Bがフェッチされる前に、フラッシュコマンドが発見される場合を示す。コマンド解釈部61Dは、サブミッションキュー51を先読みすることでフラッシュコマンドを発見した場合、フラッシュコマンドが存在することを示す通知(以下「フラッシュコマンド検出通知」と称する)をフラッシュ状況管理部62Dに出力する。
本実施形態では、フラッシュ状況管理部62Dは、フラッシュコマンド検出通知を受け取る場合、ライトバッファ21に格納されているライトデータの量、および内部処理バッファ23に格納されている内部データの量を検出する。さらに、フラッシュ状況管理部62Dは、サブミッションキュー51を先読みすることで検出された1つ以上のライトコマンドがある場合、当該1つ以上のライトコマンドに対応するライトデータの量を検出する。そして、フラッシュ状況管理部62Dは、これらを合わせたデータの合計量が所定の書き込み単位を満たすか否かを判定する。フラッシュ状況管理部62Dは、上記データの合計量が所定の書き込み単位を満たさない場合、内部処理管理部71Dに対して、メモリシステム1Dの内部処理を促進させる要求(以下「内部処理促進要求」と称する)を通知する。
内部処理管理部71Dは、内部処理促進要求を受け取る場合、内部処理の実行に関する閾値を変更し、内部処理の実行を促進する。内部処理管理部71Dは、例えば、ガベージコレクション、コンパクション、リフレッシュ、またはウェアレベリングなどの処理を増加させるまたは前倒しで行うことで、内部処理バッファ23に格納される内部データの量を増加させる。すなわち、内部処理管理部71Dは、フラッシュコマンドよりも先にサブミッションキューに格納された先行コマンド(図12中に示す例ではライトコマンドA,B)の実行前または実行中に、内部データをNAND装置10から読み出して内部処理バッファ23に移動させておく処理を開始する。「内部処理の実行に関する閾値」は、例えば、ガベージコレクションにおいて内部処理バッファ23にデータをコピーする際のデータ量を調整する指標である。
このような構成によれば、コマンド解釈部61Dが実際にフラッシュコマンドをフェッチする前に、メモリシステム1Dの内部処理が促進され、より多くの量の内部データが内部処理バッファ23に格納されやすくなる。これにより、コマンド解釈部61Dが実際にフラッシュコマンドをフェッチする前に、所定の書き込み単位を満たすデータが揃いやすくする。これにより、書き込み効率の低下をさらに抑制し、メモリシステム1Dの信頼性をさらに向上させることができる。
(第5実施形態)
次に、第5実施形態について説明する。第5実施形態は、サブミッションキュー51を先読みすることで複数のフラッシュコマンドが発見された場合、それらを纏めて処理する点で、第1実施形態とは異なる。以下に説明する以外の構成は、第1実施形態または第2実施形態の構成と同様である。
次に、第5実施形態について説明する。第5実施形態は、サブミッションキュー51を先読みすることで複数のフラッシュコマンドが発見された場合、それらを纏めて処理する点で、第1実施形態とは異なる。以下に説明する以外の構成は、第1実施形態または第2実施形態の構成と同様である。
図13は、第5実施形態のメモリシステム1Eの一部を示すブロック図である。図13に示す例では、サブミッションキュー51には、複数のフラッシュコマンドX,Y,Z(Flush-X, Flush-Y, Flush-Z)が格納されている場合を示す。複数のフラッシュコマンドX,Y,Zは、互いに同種のコマンドである。フラッシュコマンドXは、「第1コマンド」の一例である。フラッシュコマンドYは、「第2コマンド」の一例である。
本実施形態では、コマンド解釈部61は、書き込み単位を満たすライトデータがライトバッファ21に格納されていない場合、書き込み単位が満たされるまで後続のライトコマンドが存在しないかサブミッションキュー51を先読みする。コマンド解釈部61は、サブミッションキュー51を先読みすることで複数のフラッシュコマンドX,Y,Zを検出する場合、検出したフラッシュコマンドX,Y,Zを示す情報をフラッシュ状況管理部62Eに通知する。
フラッシュ状況管理部62Eは、サブミッションキュー51を先読みすることで複数のフラッシュコマンドX,Y,Zが検出された場合、これら複数のフラッシュコマンドX,Y,Zを纏めて保持する。この場合、フラッシュ状況管理部62Eは、書き込み単位に満たない間に検出される複数のフラッシュコマンドX,Y,Zを、ホスト機器2に1つのフラッシュコマンドとしてまとめて応答を返すためにリスト化して管理する。そして、コマンド応答部65は、書き込み単位を満たすように集められたデータA,B,C,DのNAND装置10への書き込みが完了した場合、データA,B,C,Dに対応するライトコマンドA,B,C,Dの処理が完了したことと、フラッシュコマンドの処理が完了したことを示す応答をコンプリーションキュー52に投入する。
このような構成によれば、複数のフラッシュコマンドX,Y,Zを纏めて処理することができる。これにより、複数のフラッシュコマンドX,Y,Zによって大量のパディングデータがNAND装置10に書き込まれることを避けることができる。
(第6実施形態)
次に、第6実施形態について説明する。第6実施形態は、ホスト機器2から通知される命令に動作モードの指定が含まれ、指定された動作モードに応じてメモリシステム1Fが異なる処理を行う点で、第1実施形態とは異なる。以下に説明する以外の構成は、第1実施形態または第2実施形態の構成と同様である。
次に、第6実施形態について説明する。第6実施形態は、ホスト機器2から通知される命令に動作モードの指定が含まれ、指定された動作モードに応じてメモリシステム1Fが異なる処理を行う点で、第1実施形態とは異なる。以下に説明する以外の構成は、第1実施形態または第2実施形態の構成と同様である。
図14は、第6実施形態のメモリシステム1Fの一部を示すブロック図である。本実施形態では、ホスト機器2は、動作モードの指定を含む命令を発行する。動作モードは、例えば、(1)最速動作モード、(2)通常モード、(3)寿命優先モードのうちいずれか1つが指定される。「命令」とは、コマンドであってもよいし、コマンドとは別の命令であってもよい。本実施形態では、ホスト機器2は、動作モードの指定を含むフラッシュコマンドを発行する。メモリコントローラ30Fは、ホスト機器2から受け取る動作モードの指定を含む命令に基づき、選択的に動作を切り替える。
最速動作モードは、フラッシュコマンドを受け取る場合に、パディングデータのパディングを含む処理(通常のフラッシュコマンドの処理)を行う動作モードである。すなわち、最速動作モードでは、ライトバッファ21に格納されているライトデータが所定の書き込み単位を満たさない場合でも、サブミッションキュー51の先読みによる追加のライトデータの取得や、内部処理バッファ23からの内部データの取得などは行わない動作モードである。言い換えると、最速動作モードは、後述する通常モードと比べて多くのパディングデータと、ライトデータとを同時にNAND装置10に書き込む動作モードである。最速動作モードは、「第2動作モード」の一例である。
通常モードは、第1実施形態または第2実施形態で説明したように、ライトバッファ21に格納されているライトデータが所定の書き込み単位を満たさない場合、サブミッションキュー51の先読みによる追加のライトデータの取得、および/または内部処理バッファ23からの内部データの取得などが行われ、それらデータが同時にNAND装置10に書き込まれる動作モードである。通常モードは、「第1動作モード」の一例である。
寿命優先モードは、ホスト機器2がフラッシュコマンドの発行と同時に、フラッシュコマンドの処理が完了するまでの許容可能なレイテンシを指定する動作モードである。レイテンシの値は、例えば、ホスト機器2またはメモリシステム1Fが置かれている状況において異なる値が指定され得る。
メモリコントローラ30Fのコマンド解釈部61Fは、寿命優先モードが指定された場合、指定されたレイテンシの値に応じて、サブミッションキュー51に格納された後続コマンドに対する先読みの量を変更する。例えば、コマンド解釈部61Fは、先読みするサブミッションキュー51の深さ(先読みするエントリの数)、および/または複数のサブミッションキュー51が存在する場合は、先読みするサブミッションキュー51の数を変更する。許容可能なレイテンシの値が大きいほど、先読みするサブミッションキュー51の深さは深くなり、先読みするサブミッションキュー51の数は多くなる。
本実施形態では、フラッシュ状況管理部62Fは、寿命優先モードが指定された場合、指定されたレイテンシで許容される時間の間に、メモリシステム1Fの内部処理(ガベージコレクション、コンパクション、リフレッシュ、またはウェアレベリングなど)により、NAND装置20から内部データを読み出して内部処理バッファ23に移動させておく。
本実施形態では、フラッシュ状況管理部62Fは、寿命優先モードが指定された場合、指定されたレイテンシで許容される範囲で、サブミッションキュー51に後続のライトコマンドが投入され、当該ライトコマンドに対応するライトデータが取得されるまで、フラッシュコマンドの実行を待機してもよい。
このような構成によれば、ホスト機器2またはメモリシステム1Fが置かれている状況に応じて柔軟な処理を実行することができる。
以上、いくつかの実施形態について説明したが、実施形態は上述した例に限定されない。上述した実施形態では、「ライトデータを不揮発性メモリに書き込ませるコマンド」がフラッシュコマンドである例について説明した。ただし、「ライトデータを不揮発性メモリに書き込ませるコマンド」は、フラッシュコマンドに限定されず、「FUA(Force Unit Access)=1 Write」コマンドでもよい。「FUA=1 Write」は、ライトデータの不揮発化を必須とするライトコマンドである。
フラッシュコマンドを受け取る場合にライトデータと同時に書き込まれるデータは、上述した先読みにより得られるライトデータや内部データに限らず、フラッシュコマンドの後にサブミッションキュー51に格納されたコマンドが保持するデータでもよいし、ホストデータバッファ53上のデータでもよい。「不揮発性の半導体記憶装置」および「不揮発メモリ」は、NAND装置10に限定されず、MRAM(Magnetoresistive Random Access Memory)やその他のタイプの記憶装置でもよい。
以上説明した少なくともひとつの実施形態によれば、メモリシステムは、書き込み単位を満たさない第1データがライトバッファに格納された状態で、第1データを不揮発性メモリに書き込ませるコマンドをキューから受け取る場合、第1データと、別の第2データとを同時に不揮発性メモリに書き込む。これにより、信頼性の向上を図ることができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると同様に、特許請求の範囲に記載された発明とその均等の範囲に含まれるものである。
1,1A,1B,1C,1D,1E,1F…メモリシステム、10…NAND装置、20…DRAM(揮発性メモリ)、21…ライトバッファ、23…内部処理バッファ、30,30A,30B,30C,30D,30E,30F…メモリコントローラ、M…不揮発性メモリ。
Claims (17)
- 不揮発性メモリと、
ライトバッファを含む揮発性メモリと、
ホスト機器によってキューに格納されたコマンドを前記キューから受け取り可能であり、書き込み単位を満たさない第1データが前記ライトバッファに格納された状態で、前記第1データを前記不揮発性メモリに書き込ませる第1コマンドを前記キューから受け取る場合、前記第1データと、前記ホスト機器または前記ライトバッファとは異なる前記揮発性メモリの所定領域から取得される第2データとを同時に前記不揮発性メモリに書き込むメモリコントローラと、
を備えたメモリシステム。 - 前記メモリコントローラは、前記第1コマンドを前記キューから受け取る場合、前記第1コマンドよりも後に前記キューに格納された1つ以上の後続コマンドを先読みし、前記1つ以上の後続コマンドに第1ライトコマンドが含まれる場合、前記第1ライトコマンドに対応する第1ライトデータを前記第2データとして前記不揮発性メモリに書き込む、
請求項1に記載のメモリシステム。 - 前記メモリコントローラは、前記第1ライトデータを前記第2データとして前記不揮発性メモリに書き込むことに応じて、前記第1コマンドおよび前記第1ライトコマンドの処理が完了したことを示す応答を前記ホスト機器に出力する、
請求項2に記載のメモリシステム。 - 前記メモリコントローラは、前記第1データと前記第2データとの合計が前記書き込み単位を満たさない場合、前記第1ライトコマンドよりも後に前記キューに格納された第2ライトコマンドがあるか否かを判定し、前記第2ライトコマンドがある場合、前記第2ライトコマンドに対応する第2ライトデータを第3データとして前記第1データおよび前記第2データと同時に前記不揮発性メモリに書き込む、
請求項2または請求項3に記載のメモリシステム。 - 前記メモリコントローラは、前記1つ以上の後続コマンドにライトコマンドが存在しない場合、前記第1コマンドに応じて前記第1データを前記不揮発性メモリに書き込む、
請求項2から請求項4のうちいずれか1項に記載のメモリシステム。 - 前記キューは、第1キューと、前記第1キューとは異なる第2キューとを含み、
前記メモリコントローラは、前記第1コマンドを前記第1キューから受け取る場合、前記第1キューおよび前記第2キューに格納されたコマンドを先読みし、前記第1キューおよび前記第2キューのいずれかにライトコマンドがある場合、当該ライトコマンドに対応するライトデータを前記第2データとして前記不揮発性メモリに書き込む、
請求項1から請求項5のうちいずれか1項に記載のメモリシステム。 - 前記メモリコントローラは、前記第1コマンドを前記キューから受け取る場合、前記揮発性メモリの前記所定領域に書き込み対象データがあるか否かを判定し、前記揮発性メモリの前記所定領域に前記書き込み対象データがある場合、前記書き込み対象データを前記第2データとして前記第1データと同時に前記不揮発性メモリに書き込む、
請求項1に記載のメモリシステム。 - 前記書き込み対象データは、前記不揮発性メモリから読み出されて前記揮発性メモリの前記所定領域に格納された後、前記不揮発性メモリに再度書き込まれるデータである、
請求項7に記載のメモリシステム。 - 前記書き込み対象データは、ガベージコレクション、コンパクション、リフレッシュ、またはウェアレベリングにより前記メモリシステム内を移動するデータである、
請求項7または請求項8に記載のメモリシステム。 - 前記メモリコントローラは、各データと、各データの属性を示す属性情報とを対応付けて管理し、前記第1データに対応付けられた前記属性情報と前記第2データに対応付けられた前記属性情報とが所定の関係を満たす場合に、前記第1データと前記第2データとを同時に前記不揮発性メモリに書き込む、
請求項1から請求項9のうちいずれか1項に記載のメモリシステム。 - 前記属性情報は、各データに対するアクセス頻度、各データに対して設定されたグループ、または各データを過去に書き込んだコマンドの種類のうち1つ以上に基づいて設定される、
請求項10に記載のメモリシステム。 - 前記メモリコントローラは、前記キューを先読みすることで前記第1コマンドが検出された場合、前記第1コマンドよりも先に前記キューに格納された先行コマンドの実行前または実行中に、前記第2データとなる書き込み対象データを前記不揮発性メモリから読み出して前記揮発性メモリの前記所定領域に移動させておく処理を開始する、
請求項1から請求項11のうちいずれか1項に記載のメモリシステム。 - 前記メモリコントローラは、前記キューに、前記第1コマンドよりも後にライトコマンドが格納され、前記ライトコマンドよりも後に前記第1コマンドと同種の第2コマンドが格納された場合、前記ライトコマンドに対応するライトデータを前記第2データとして前記第1データと同時に前記不揮発性メモリに書き込むことに応じて、前記第1コマンドおよび前記第2コマンドの処理が完了したことを示す応答を前記ホスト機器に出力する、
請求項1から請求項12のうちいずれか1項に記載のメモリシステム。 - 前記メモリコントローラは、前記ホスト機器から通知される命令に基づき、前記第1コマンドを受け取る場合に前記第1データと前記第2データとを同時に前記不揮発性メモリに書き込む第1動作モードと、前記第1コマンドを受け取る場合に前記第1動作モードと比べて多いパディングデータと前記第1データとを前記不揮発性メモリに書き込む第2動作モードとを選択的に切り替える、
請求項1から請求項13のうちいずれか1項に記載のメモリシステム。 - 前記メモリコントローラは、前記ホスト機器から通知される命令に基づき、前記第1コマンドよりも後に前記キューに格納された後続コマンドに対する先読みの量を変更する、
請求項1から請求項14のうちいずれか1項に記載のメモリシステム。 - 前記メモリコントローラは、前記ホスト機器により指定されるレイテンシにより許容される時間の間に前記第2データとなる書き込み対象データを前記不揮発性メモリから読み出して前記揮発性メモリの前記所定領域に移動させ、前記第1データと前記第2データとを同時に前記不揮発性メモリに書き込む、
請求項1から請求項15のうちいずれか1項に記載のメモリシステム。 - サブミッションキューにコマンドを投入するように構成されるホスト機器に接続可能であって、
不揮発性メモリと、
前記不揮発性メモリへ書き込むためのデータが保存されるライトバッファを含む揮発性メモリと、
前記不揮発性メモリと前記揮発性メモリとを制御し、前記サブミッションキューに投入されたコマンドを受け取り、前記受け取ったコマンドを実行するコントローラと、
を備え、
前記コントローラは、前記受け取ったコマンドが前記ライトバッファに保存されているデータを前記不揮発性メモリへ書き込ませるための第1コマンドであって、前記ライトバッファに保存されている第1データが書き込み単位を満たさない場合、前記サブミッションキューに前記第1コマンドよりも後に投入された1つ以上のコマンドを先読みし、前記先読みした1つ以上のコマンドに第1ライトコマンドが含まれる場合、前記第1ライトコマンドに対応する第2データを前記第1データとともに前記不揮発性メモリへ書き込む、
メモリシステム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021044250A JP2022143632A (ja) | 2021-03-18 | 2021-03-18 | メモリシステム |
US17/410,789 US11687284B2 (en) | 2021-03-18 | 2021-08-24 | Memory system with memory controller |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021044250A JP2022143632A (ja) | 2021-03-18 | 2021-03-18 | メモリシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2022143632A true JP2022143632A (ja) | 2022-10-03 |
Family
ID=83284745
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021044250A Pending JP2022143632A (ja) | 2021-03-18 | 2021-03-18 | メモリシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US11687284B2 (ja) |
JP (1) | JP2022143632A (ja) |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9946496B2 (en) | 2015-07-27 | 2018-04-17 | Elastifile Ltd. | SSD with non-blocking flush command |
US10521118B2 (en) * | 2016-07-13 | 2019-12-31 | Sandisk Technologies Llc | Methods, systems, and computer readable media for write classification and aggregation using host memory buffer (HMB) |
US10534709B2 (en) | 2016-08-31 | 2020-01-14 | Sandisk Technologies Llc | Flush command consolidation |
KR102681659B1 (ko) | 2017-01-12 | 2024-07-05 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 메모리 시스템의 동작 방법 |
US10509569B2 (en) * | 2017-03-24 | 2019-12-17 | Western Digital Technologies, Inc. | System and method for adaptive command fetch aggregation |
US10430330B2 (en) * | 2017-10-18 | 2019-10-01 | Western Digital Technologies, Inc. | Handling of unaligned sequential writes |
US10573391B1 (en) | 2018-12-03 | 2020-02-25 | Micron Technology, Inc. | Enhanced flush transfer efficiency via flush prediction |
-
2021
- 2021-03-18 JP JP2021044250A patent/JP2022143632A/ja active Pending
- 2021-08-24 US US17/410,789 patent/US11687284B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20220300204A1 (en) | 2022-09-22 |
US11687284B2 (en) | 2023-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868618B2 (en) | Data reading and writing processing from and to a semiconductor memory and a memory of a host device by using first and second interface circuits | |
US10684795B2 (en) | Storage device and storage control method | |
US8171254B2 (en) | Memory controller and memory control method | |
US11216368B2 (en) | Memory system for garbage collection using page offsets, invalid offset ratio, sequential ratio, and logical address prediction | |
JP4643667B2 (ja) | メモリシステム | |
US11042305B2 (en) | Memory system and method for controlling nonvolatile memory | |
US11086568B2 (en) | Memory system for writing fractional data into nonvolatile memory | |
KR20190111406A (ko) | 스토리지 장치 및 스토리지 장치의 동작 방법 | |
US10310766B2 (en) | Memory system and data relocating method | |
US11914520B2 (en) | Separate read-only cache and write-read cache in a memory sub-system | |
US20150127886A1 (en) | Memory system and method | |
US10719263B2 (en) | Method of handling page fault in nonvolatile main memory system | |
US12007917B2 (en) | Priority scheduling in queues to access cache data in a memory sub-system | |
US11086795B2 (en) | Memory system, memory controller and operating method thereof | |
CN111736755A (zh) | 数据存储装置、其操作方法以及包括其的存储系统 | |
JP2022143278A (ja) | メモリシステム | |
CN111722792B (zh) | 存储器系统 | |
JP2022143632A (ja) | メモリシステム | |
JP2024043337A (ja) | メモリシステム | |
US10185654B2 (en) | Memory mapping management method for nonvolatile main memory system | |
US20240311304A1 (en) | Storage controller and operating method of the storage controller | |
US11954357B2 (en) | Memory system and memory system control method | |
US11966327B2 (en) | Memory system |