JP2020154493A - メモリシステム - Google Patents

メモリシステム Download PDF

Info

Publication number
JP2020154493A
JP2020154493A JP2019050674A JP2019050674A JP2020154493A JP 2020154493 A JP2020154493 A JP 2020154493A JP 2019050674 A JP2019050674 A JP 2019050674A JP 2019050674 A JP2019050674 A JP 2019050674A JP 2020154493 A JP2020154493 A JP 2020154493A
Authority
JP
Japan
Prior art keywords
descriptor
command
buffer
stored
memory controller
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
Application number
JP2019050674A
Other languages
English (en)
Inventor
琢哉 芳賀
Takuya Haga
琢哉 芳賀
秀一 渡邊
Shuichi Watanabe
秀一 渡邊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kioxia Corp
Original Assignee
Kioxia Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Kioxia Corp filed Critical Kioxia Corp
Priority to JP2019050674A priority Critical patent/JP2020154493A/ja
Priority to TW108129408A priority patent/TWI707361B/zh
Priority to US16/549,451 priority patent/US10963190B2/en
Priority to CN201910847002.7A priority patent/CN111722792B/zh
Publication of JP2020154493A publication Critical patent/JP2020154493A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input 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/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Abstract

【課題】メモリシステムの動作を高速化する。【解決手段】実施形態のメモリシステムは、半導体記憶装置と、メモリコントローラとを含む。メモリコントローラは、コマンドバッファとディスクリプタバッファとを有する。メモリコントローラは、外部から受信した第1コマンドをコマンドバッファに格納し、格納した第1コマンドに基づいてホスト機器から第1ディスクリプタをフェッチし、フェッチした第1ディスクリプタをディスクリプタバッファに格納し、外部から受信した第2コマンドをコマンドバッファに格納し、未使用の第1ディスクリプタの一部をディスクリプタバッファから破棄し、格納した第2コマンドに基づいて、ホスト機器から第2ディスクリプタをフェッチし、破棄した第1ディスクリプタの一部が格納されていたアドレスに、フェッチした第2ディスクリプタを格納する。【選択図】図10

Description

本発明の実施形態は、メモリシステムに関する。
データを不揮発に記憶することが可能なNAND型フラッシュメモリが知られている。
特許第4939443号公報 特開2009−065564号公報 米国特許第8683126号明細書
メモリシステムの動作を高速化する。
実施形態のメモリシステムは、半導体記憶装置と、メモリコントローラとを含む。メモリコントローラは、半導体記憶装置と外部のホスト機器との間のデータ転送を制御し、コマンドバッファとディスクリプタバッファとを有する。メモリコントローラは、外部から受信した第1コマンドを前記コマンドバッファに格納し、格納した前記第1コマンドに基づいて前記ホスト機器から第1ディスクリプタをフェッチし、フェッチした前記第1ディスクリプタを前記ディスクリプタバッファに格納し、外部から受信した第2コマンドを前記コマンドバッファに格納し、未使用の前記第1ディスクリプタの一部を前記ディスクリプタバッファから破棄し、格納した前記第2コマンドに基づいて、ホスト機器から第2ディスクリプタをフェッチし、破棄した前記第1ディスクリプタの一部が格納されていたアドレスに、フェッチした前記第2ディスクリプタを格納する。
実施形態に係るメモリシステムのブロック図。 実施形態に係るメモリシステムの備える半導体記憶装置のブロック図。 実施形態に係るメモリシステムの備える半導体記憶装置に含まれたメモリセルアレイの回路図。 実施形態に係るメモリシステムの備えるメモリコントローラに含まれたホストインターフェイス回路のブロック図。 実施形態に係るメモリシステムの動作実行シーケンスの一例を示すフローチャート。 実施形態に係るメモリシステムにおいてPRP(Physical Region Page)が使用された場合における動作シーケンスの一例を示す模式図。 実施形態に係るメモリシステムにおいてSGL(Scatter Gather List)が使用された場合における動作シーケンスの一例を示す模式図。 実施形態に係るメモリシステムにおけるバッファ解放動作の一例を示すフローチャート。 実施形態に係るメモリシステムにおけるバッファ解放動作の一例を示すフローチャート。 実施形態に係るメモリシステムにおける、ディスクリプタ数に基づくバッファ解放動作の一例を示す模式図。 実施形態に係るメモリシステムにおける、ディスクリプタ数に基づくバッファ解放動作の一例を示す模式図。 実施形態に係るメモリシステムにおける、NLB(Number of Logical Blocks)に基づくバッファ解放動作の一例を示す模式図。 実施形態に係るメモリシステムにおける、コマンド種別に基づくバッファ解放動作の一例を示す模式図。 実施形態に係るメモリシステムにおける、優先度に基づくバッファ解放動作の一例を示す模式図。
以下に、実施形態について図面を参照して説明する。実施形態は、発明の技術的思想を具体化するための装置や方法を例示している。図面は模式的又は概念的なものであり、各図面の寸法及び比率等は必ずしも現実のものと同一とは限らない。本明細書において“接続”とは、電気的に接続されている事を示し、間に別の素子を介することを除外しない。
尚、以下の説明において、略同一の機能及び構成を有する構成要素については、同一符号を付す。参照符号を構成する文字の後の数字は、同じ文字を含んだ参照符号によって参照され、且つ同様の構成を有する要素同士を区別するために使用される。同様に、参照符号を構成する数字の後の文字は、同じ数字を含んだ参照符号によって参照され、且つ同様の構成を有する要素同士を区別するために使用される。同じ文字又は数字を含んだ参照符号で示される要素を相互に区別する必要がない場合、これらの要素はそれぞれ文字又は数字のみを含んだ参照符号により参照される。
[実施形態]
以下に、実施形態に係るメモリシステム1について説明する。
[1]構成
[1−1]メモリシステム1の全体構成
図1は、実施形態に係るメモリシステム1の構成例を示している。実施形態に係るメモリシステム1は、例えばSSD(Solid State Drive)であり、データを不揮発に保持することが出来る。実施形態に係るメモリシステム1は、外部のホスト機器2と通信し、ホスト機器2からの命令に応じて各種動作を実行し得る。実施形態に係るメモリシステム1は、例えば半導体記憶装置10A及び10B、DRAM(Dynamic Random Access Memory)20、並びにメモリコントローラ30を含んでいる。
半導体記憶装置10A及び10Bのそれぞれは、データを不揮発に記憶するNAND型フラッシュメモリである。メモリシステム1に含まれる半導体記憶装置10の個数は、任意の個数に設計され得る。半導体記憶装置10の詳細な構成については後述する。
DRAM20は、メモリコントローラ30の記憶領域として使用される揮発性メモリである。DRAM20は、例えばホスト機器2から受信した書き込みデータを一時的に記憶する。DRAM20は、メモリコントローラ30やホスト機器2等に内蔵されても良い。
メモリコントローラ30は、例えばSoC(System on Chip)であり、ホスト機器2からの命令に応答して半導体記憶装置10A及び10Bのそれぞれに対して読み出し、書き込み、及び消去等を命令する。また、メモリコントローラ30は、例えばCPU(Central Processing Unit)31、RAM(Random Access Memory)32、ホストインターフェイス回路(ホストI/F)33、NANDインターフェイス回路(NANDI/F)34、及びDRAMインターフェイス回路(DRAMI/F)35を含んでいる。
CPU31は、メモリコントローラ30全体の動作を制御する中央演算処理装置である。CPU31は、例えばホスト機器2から受信した書き込み命令に応答して、書き込みコマンドを発行する。また、CPU31は、例えばウェアレベリング等、半導体記憶装置10のメモリ空間を管理するための様々な処理を実行する。
RAM32は、例えばSRAM(Static Random Access Memory)等の揮発性メモリである。RAM32は、CPU31の作業領域として使用され、例えば半導体記憶装置10を管理するためのファームウェアや各種管理テーブル等を保持する。
ホストインターフェイス回路33は、ホストバスを介してホスト機器2と接続され、メモリコントローラ30及びホスト機器2間のデータ、コマンド、及びアドレスを送受信する回路である。ホストインターフェイス回路33は、例えばSATA(Serial Advanced Technology Attachment)、SAS(Serial Attached SCSI)、PCIe(PCI Express)(登録商標)、NVMe(NVM Express)等の通信インターフェイス規格をサポートし得る。ホストインターフェイス回路33の詳細な構成については後述する。
NANDインターフェイス回路34は、メモリコントローラ30及び半導体記憶装置10間におけるデータ、コマンド、及びアドレスを送受信する回路である。NANDインターフェイス回路34は、NANDインターフェイス規格をサポートしている。
DRAMインターフェイス回路35は、DRAM20に接続され、メモリコントローラ30とDRAM20との間の通信を行う回路である。DRAMインターフェイス回路35は、DRAMインターフェイス規格をサポートしている。
以上で説明したメモリシステム1に接続されたホスト機器2は、例えばサブミッションキューSQ、ディスクリプタメモリDM、及び転送領域TAを含んでいる。
サブミッションキューSQは、ホスト機器2がメモリシステム1に実行させる動作を、いわゆる待ち行列の形式で保持し得る記憶部である。ディスクリプタメモリDMは、メモリシステム1によって使用される複数のディスクリプタを保持する記憶部である。転送領域TAは、半導体記憶装置10とホスト機器2との間のデータの転送に使用される一時記憶領域である。
[1−2]半導体記憶装置10の構成
図2は、実施形態に係るメモリシステム1に含まれた半導体記憶装置10の構成例を示している。半導体記憶装置10は、例えばメモリセルアレイ11、コマンドレジスタ12、アドレスレジスタ13、シーケンサ14、ドライバモジュール15、ロウデコーダモジュール16、並びにセンスアンプモジュール17を含んでいる。
メモリセルアレイ11は、複数のブロックBLK0〜BLK(k−1)(kは1以上の整数)を含んでいる。ブロックBLKは、データを不揮発に記憶することが可能な複数のメモリセルの集合であり、例えばデータの消去単位として使用される。また、メモリセルアレイ11には、複数のビット線及び複数のワード線が設けられる。各メモリセルは、例えば1本のビット線と1本のワード線とに関連付けられている。
コマンドレジスタ12は、半導体記憶装置10がメモリコントローラ30から受信したコマンドCMDを保持する。コマンドCMDは、例えばシーケンサ14に読み出し動作、書き込み動作、消去動作等を実行させる命令を含んでいる。
アドレスレジスタ13は、半導体記憶装置10がメモリコントローラ30から受信したアドレス情報ADDを保持する。アドレス情報ADDは、例えばブロックアドレスBA、ページアドレスPA、及びカラムアドレスCAを含んでいる。例えば、ブロックアドレスBA、ページアドレスPA、及びカラムアドレスCAは、それぞれブロックBLK、ワード線、及びビット線の選択に使用される。
シーケンサ14は、半導体記憶装置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に転送する。
[1−3]メモリセルアレイ11の回路構成
図3は、実施形態における半導体記憶装置10に含まれたメモリセルアレイ11の回路構成の一例を、メモリセルアレイ11に含まれた複数のブロックBLKのうち1つのブロックBLKを抽出して示している。ブロックBLKは、例えば4つのストリングユニットSU0〜SU3を含んでいる。
各ストリングユニットSUは、ビット線BL0〜BL(L−1)(Lは1以上の整数)にそれぞれ関連付けられた複数のNANDストリングNSを含んでいる。各NANDストリングNSは、例えばメモリセルトランジスタMT0〜MT7、並びに選択トランジスタST1及びST2を含んでいる。メモリセルトランジスタMTは、制御ゲート及び電荷蓄積層を含み、データを不揮発に保持する。選択トランジスタST1及びST2のそれぞれは、各種動作時におけるストリングユニットSUの選択に使用される。
各NANDストリングNSにおいて、メモリセルトランジスタMT0〜MT7は、直列接続される。選択トランジスタST1のドレインは、関連付けられたビット線BLに接続され、選択トランジスタST1のソースは、直列接続されたメモリセルトランジスタMT0〜MT7の一端に接続される。選択トランジスタST2のドレインは、直列接続されたメモリセルトランジスタMT0〜MT7の他端に接続される。選択トランジスタST2のソースは、ソース線SLに接続される。
同一のブロックBLKにおいて、メモリセルトランジスタMT0〜MT7の制御ゲートは、それぞれワード線WL0〜WL7に共通接続される。ストリングユニットSU0〜SU3内の選択トランジスタST1のゲートは、それぞれ選択ゲート線SGD0〜SGD3に共通接続される。ストリングユニットSU0〜SU3内の選択トランジスタST2のゲートは、それぞれ選択ゲート線SGS0〜SGS3に共通接続される。
以上で説明したメモリセルアレイ11の回路構成において、ビット線BLは、各ストリングユニットSUで同一のカラムアドレスが割り当てられたNANDストリングNSによって共有される。ソース線SLは、例えば複数のブロックBLK間で共有される。
1つのストリングユニットSU内で共通のワード線WLに接続された複数のメモリセルトランジスタMTの集合は、例えばセルユニットCUと称される。例えば、それぞれが1ビットデータを記憶するメモリセルトランジスタMTを含むセルユニットCUの記憶容量が、「1ページデータ」として定義される。セルユニットCUは、メモリセルトランジスタMTが記憶するデータのビット数に応じて、2ページデータ以上の記憶容量を有し得る。
尚、実施形態における半導体記憶装置10に含まれたメモリセルアレイ11の回路構成は、以上で説明した構成に限定されない。例えば、各NANDストリングNSが含むメモリセルトランジスタMT並びに選択トランジスタST1及びST2の個数は、それぞれ任意の個数に設計され得る。各ブロックBLKが含むストリングユニットSUの個数は、任意の個数に設計され得る。
[1−4]ホストインターフェイス回路33の構成
図4は、実施形態におけるメモリコントローラ30に含まれたホストインターフェイス回路33の構成例を示している。ホストインターフェイス回路33は、例えばコマンドバッファ40、ディスクリプタバッファ41、キャッシュメモリ42、及びDMA(Direct Memory Access)コントローラ43を含んでいる。
コマンドバッファ40は、ホスト機器2のサブミッションキューSQに基づいたコマンドを保持する。コマンドバッファ40は、例えばバッファ領域CB0〜CB(m−1)(mは1以上の整数)を含んでいる。例えば、バッファ領域CBの各々は、1つのコマンドを保持する。メモリシステム1は、コマンドバッファ40に保持されたコマンドに基づいて、読み出し動作、書き込み動作、消去動作等を実行する。コマンドのサイズは、例えば64byteである。
ディスクリプタバッファ41は、コマンドバッファ40に保持されたコマンドに基づいたディスクリプタを保持する。ディスクリプタバッファ41は、例えばバッファ領域DB0〜DB(n−1)(nは1以上の整数)を含んでいる。例えば、バッファ領域DBの各々は、1つのディスリプタを保持する。メモリシステム1は、ディスクリプタバッファ41に保持されたディスクリプタに基づいて、ホスト機器2の転送領域TA内にメモリシステム1及びホスト機器2間のデータ転送に使用する記憶領域を割り当てる。
キャッシュメモリ42は、例えばSRAM等の揮発性メモリである。キャッシュメモリ42は、例えばメモリシステム1とホスト機器2との間のデータ転送における、一時的な記憶領域として使用される。DMAコントローラ43は、メモリシステム1及びホスト機器2間のデータ転送を制御する。DMAコントローラ43を用いたデータ転送は、CPU31による制御を介さずに実行される。
尚、実施形態におけるメモリコントローラ30に含まれたホストインターフェイス回路33の構成は、以上で説明した構成に限定されない。例えば、キャッシュメモリ42やDMAコントローラ43は、少なくともメモリコントローラ30内に含まれていれば良い。また、DMAコントローラ43は、省略されても良い。この場合、メモリコントローラ30及びホスト機器2間のデータ転送は、CPU31によって制御される。
[2]動作
[2−1]メモリシステム1の動作実行シーケンス
以下に、図5を用いて、実施形態に係るメモリシステム1の動作実行シーケンスについて説明する。図5は、実施形態に係るメモリシステム1の動作実行シーケンスの一例を示すフローチャートである。
メモリシステム1に実行させる所定の動作に対応する少なくとも1つのコマンドがサブミッションキューSQに格納されると、ホスト機器2は、コマンドが格納されたことをメモリシステム1に通知する(ステップS10)。メモリコントローラ30は、サブミッションキューSQにコマンドが格納されたことが通知されると、コマンドの転送をホスト機器2に要求する(ステップS11)。
コマンドの転送が要求されると、ホスト機器2は、サブミッションキューSQに格納されたコマンドをメモリコントローラ30に転送する(ステップS12)。メモリコントローラ30は、ホスト機器2からコマンドを受け取ると、当該コマンドをコマンドバッファ40に格納する(ステップS13)。
次に、メモリコントローラ30は、必要に応じてバッファ解放動作を実行する(ステップS14)。ステップS14におけるバッファ解放動作は、例えばディスクリプタバッファ41の空き領域が足りない場合に実行される。一方で、ディスクリプタバッファ41の空き領域が足りている場合、ステップS14におけるバッファ解放動作はスキップされる。バッファ解放動作の詳細については後述する。
それから、メモリコントローラ30は、ステップS13の処理でコマンドバッファ40に格納したコマンドに基づいて、ディスクリプタの転送をホスト機器2に要求する(ステップS15)。メモリコントローラ30は、バッファ解放動作によって空いた領域を用いて所定の条件を満たしたコマンドに対応するディスクリプタをフェッチする。すなわち、CPU31は、所定の条件を満たしたコマンドに対応するディスクリプタを、優先度の低いディスクリプタの替わりにディスクリプタバッファ41に格納する。ディスクリプタの転送が要求されると、ホスト機器2は、ディスクリプタメモリDMに格納された複数のディスクリプタのうち、メモリコントローラ30から要求されたディスクリプタをメモリコントローラ30に転送する(ステップS16)。メモリコントローラ30は、ホスト機器2からディスクリプタを受け取ると、当該ディスクリプタをディスクリプタバッファ41に格納する(ステップS17)。
そして、メモリコントローラ30は、ディスクリプタバッファ41に格納されたディスクリプタに基づいた動作を実行する(ステップS18)。ステップS18においてメモリコントローラ30は、ディスクリプタバッファ41に格納されたディスクリプタに基づいて、メモリシステム1及びホスト機器2間のデータ転送に使用する記憶領域(転送領域TA内のデータ領域)の割り当てをホスト機器2に指示する。
その後、メモリコントローラ30は、コマンドバッファ40に格納されたコマンドとディスクリプタバッファ41に格納されたディスクリプタとに基づいた動作を実行する。言い換えると、メモリコントローラ30は、ディスクリプタバッファ41に格納されたディスクリプタによって転送領域TA内に割り当てられたデータ領域を用いて、コマンドバッファ40に格納されたコマンドに基づいた動作(例えば読み出し動作、書き込み動作等)を実行する(ステップS19)。
例えば、ステップS19において読み出し動作が実行された場合、メモリコントローラ30は、ディスクリプタバッファ41に格納されたディスクリプタに対応する転送領域TAへ、半導体記憶装置10から読み出したデータを送信する。ステップS19において書き込み動作が実行された場合、メモリコントローラ30は、ディスクリプタバッファ41に格納されたディスクリプタに対応する転送領域TAに保持されたデータを受信し、半導体記憶装置10に書き込みを行わせる。つまり、メモリコントローラ30は、半導体記憶装置10とホスト機器2との間のデータ転送を中継する。
以上で説明した動作実行シーケンスにおいてメモリコントローラ30は、NVMe規格に基づいた動作を実行する場合、データ転送に使用する記憶領域の割り当てにPRP(Physical Region Page)又はSGL(Scatter Gather List)を使用する。PRP及びSGLのどちらが使用されるのかは、コマンドバッファ40に保持されたコマンドに基づいて決定される。以下に、実施形態に係るメモリシステム1において、PRPを使用した場合における動作シーケンスと、SGLを使用した場合における動作シーケンスとの概要について簡潔に説明する。
(PRPを使用した場合における動作シーケンス)
PRPでは、先頭と末尾を除くディスクリプタ一つに対し、一律に同じサイズの記憶領域が割り当てられる。PRPを使用した場合における動作シーケンスにおいて、メモリコントローラ30がディスクリプタに基づいて転送領域TAに割り当てるデータ領域のサイズは、例えば一律ページサイズに指定される。図6は、実施形態に係るメモリシステム1においてPRPが使用された場合における動作シーケンスの一例を示す模式図である。図6に示された“S12”及び“S16”は、それぞれ図5を用いて説明したステップS12及びS16の処理に対応している。
図6におけるコマンドは、PRPの使用を指示するコマンドと、データポインタPRP1及びPRP2とを含んでいる。
尚、PRPでは、ステップS18の処理の前に、データポインタPRP1に含まれたディスクリプタが、コマンドバッファ40からディスクリプタバッファ41に転送される。その結果、においてディスクリプタバッファ41は、コマンドバッファ40から転送されたPRPエントリENT0と、データポインタPRP2に基づいてディスクリプタメモリDMから転送されたPRPリストとを格納する。
PRPエントリおよびPRPリストは、データ転送に使用する記憶領域を指定するディスクリプタである。PRPエントリENT0は、転送領域TAに割り当てるデータ領域の先頭のアドレス情報を含んでいる。PRPリストは、転送領域TAに割り当てるデータ領域の続きのアドレス情報を含んでいる。PRPリストは、例えば対応するコマンドにおけるデータの転送量がPRPエントリENT0で足りない場合に使用される。PRPリストは、例えばPRPエントリENT0に続くアドレス情報を示すPRPエントリENT1及びENT2を含んでいる。
では、PRPエントリENT0、PRPエントリENT1、及びPRPエントリENT2は、それぞれ転送領域TAのアドレス“A”、アドレス“B”、及びアドレス“C”を指定している。転送領域TAには、PRPエントリENT0に基づいた4KBのデータ領域Aと、PRPエントリENT1に基づいた4KBのデータ領域Bと、PRPエントリENT2に基づいた4KBのデータ領域Cとが割り当てられている。
尚、以上の説明では、PRPリストが2つのPRPエントリを有する場合について例示したが、これに限定されない。PRPリストが含むPRPエントリの数は、任意の数に設定され得る。PRPリストは、1つのPRPリストで転送領域TAに必要なデータ領域が確保できない場合に、次のPRPリストを指定する情報を含んでいても良い。
(SGLを使用した場合における動作シーケンス)
SGLでは、ディスクリプタ一つに対し、任意のサイズの記憶領域が割り当てられる。SGLを使用した場合における動作シーケンスにおいて、メモリコントローラ30がディスクリプタに基づいて転送領域TAに割り当てるデータ領域のサイズは、それぞれ個別に指定され得る。図7は、実施形態に係るメモリシステム1においてSGLが使用された場合における動作シーケンスの一例を示す模式図である。図7に示された“S12”及び“S16”は、それぞれ図5を用いて説明したステップS12及びS16の処理に対応している。
データポインタSGL1に基づいたディスクリプタはSGLセグメントSEG0を含んでいる。SGLセグメントは、データ転送に使用する領域を指定するディスクリプタである。SGLセグメントSEG0は、転送領域TAに割り当てるデータ領域の先頭のアドレス情報と、転送領域TAで確保するデータ長の情報(例えば3KB)とを含んでいる。SGLセグメントSEG0は、次のSGLセグメントSEG1を示す情報を含んでいる場合がある。
SGLセグメントSEG0が次のSGLセグメントSEG1を示す情報を含んでいる場合、メモリコントローラ30は、SGLセグメントSEG1に対応するディスクリプタの転送をホスト機器2に指示する。SGLセグメントSEG1は、例えばSGLセグメントSEG0に続くアドレスを指定するアドレス情報と、転送領域TAで確保するデータ長の情報(例えば16KB)と、次のSGLセグメントSEG2を示す情報とを含んでいる。
SGLセグメントSEG1が次のSGLセグメントSEG2を示す情報を含んでいる場合、メモリコントローラ30は、SGLセグメントSEG2に対応するディスクリプタの転送をホスト機器2に指示する。SGLセグメントSEG2は、例えばSGLセグメントSEG1に続くアドレスを指定するアドレス情報と、転送領域TAで確保するデータ長の情報(例えば4KB)とを含んでいる。メモリコントローラ30が受け取ったSGLセグメントSEG1及びSEG2のそれぞれは、ディスクリプタバッファ41に格納される。
図7の例では、SGLセグメントSEG2がデータポインタSGL1に関連付けられた最後のSGLセグメントSEGに相当している。SGLセグメントSEG0、SEG1、及びSEG2は、それぞれ転送領域TAのアドレス“A”、アドレス“B”、及びアドレス“C”を指定している。転送領域TAには、例えばSGLセグメントSEG0に基づいた3KBのデータ領域Aと、SGLセグメントSEG1に基づいた16KBのデータ領域Bと、SGLセグメントSEG2に基づいた4KBのデータ領域Cとが割り当てられている。
尚、以上の説明では、データポインタSGL1に基づいてSGLセグメントSEG1が転送され、SGLセグメントSEG1に基づいてSGLセグメントSEG2が転送される場合について例示したが、これに限定されない。データポインタSGL1に基づいて転送されるSGLセグメントSEGの数は、当該コマンドで必要なデータサイズに基づいて任意の数に設定され得る。
[2−2]バッファ解放動作
実施形態に係るメモリシステム1は、コマンドバッファ40に複数のコマンドが格納された場合、これらのコマンドに対応するディスクリプタの総数に対して、ディスクリプタバッファ41の容量が足りなくなることがある。これに対して実施形態に係るメモリシステム1は、バッファ解放動作を実行することが出来る。バッファ解放動作は、ディスクリプタバッファ41に格納済みの複数のディスクリプタの中から、所定の条件を満たしたディスクリプタを破棄する動作である。
図8は、実施形態に係るメモリシステム1のバッファ解放動作の一例を示すフローチャートである。尚、以下の説明では、コマンドバッファ40に格納されたコマンドに基づいて、ディスクリプタバッファ41に格納されたディスクリプタのことを、フェッチ済みのディスクリプタと呼ぶ。ディスクリプタバッファ41に格納されたディスクリプタに基づいて転送領域TAに確保された記憶領域のことを、フェッチ済みのデータ領域と呼ぶ。
メモリコントローラ30は、ディスクリプタバッファ41に空きがあるかどうかを判断する(ステップS20)。
ディスクリプタバッファ41に空きがあると判断した場合(ステップS20、YES)、メモリコントローラ30はバッファ解放動作を終了する(エンド)。ディスクリプタバッファ41に空きがないと判断した場合(ステップS20、NO)、メモリコントローラ30は、直近で受信したコマンドの属性を確認する(ステップS21)。コマンドの属性は、後述する所定の条件に使用されるパラメータ及び情報を含んでいる。
メモリコントローラ30は、直近で受信したコマンドの属性が所定の条件を満たしているかどうかを判断する(ステップS22)。直近で受信したコマンドの属性が所定の条件を満たしていないと判断した場合(ステップS22、NO)、メモリコントローラ30はディスクリプタバッファ41が空くまで待機し(ステップS23)、バッファ解放動作を終了する(エンド)。直近で受信したコマンドの属性が所定の条件を満たしていると判断した場合(ステップS22、YES)、メモリコントローラ30はフェッチ済みのディスクリプタのうち優先度の低いディスクリプタの組を破棄する。(ステップS24)。ステップS22における所定の条件の詳細については後述する。
図9は、実施形態に係るメモリシステム1の完了処理の一例を示すフローチャートである。ステップS19の処理によって1つのコマンドに対応する動作が完了すると、メモリコントローラ30は、完了処理を実行する。
メモリコントローラ30は、コマンドバッファ40に格納されている動作完了済みのコマンドを破棄する(ステップS30)。
ステップS30の処理の後、メモリコントローラ30は、コマンドバッファ40に格納された全てのコマンドの処理が完了したかどうかを判断する(ステップS31)。
ステップS31の処理において、コマンドバッファ40に格納された全てのコマンドの処理が完了していると判断した場合(ステップS31、YES)、メモリコントローラ30は完了処理を終了し、アイドル状態に移行する(エンド)。
ステップS31の処理において、コマンドバッファ40に格納された全てのコマンドの処理が完了していないと判断した場合(ステップS31、NO)、メモリコントローラ30は、コマンドバッファ40に格納されているコマンドにバッファ解放動作の対象とされたものが含まれているかどうかを判断する(ステップS32)。
ステップS32の処理において、バッファ解放動作の対象とされたコマンドが含まれていないと判断した場合(ステップS32、NO)、メモリコントローラ30は、ステップS19の処理に移行する。
バッファ解放動作の対象とされたコマンドが含まれていると判断した場合(ステップS32、YES)、メモリコントローラ30は、ディスクリプタバッファ41が必要量空いているかどうかを判断する(ステップS33)。すなわち、メモリコントローラ30は、バッファ解放動作によって破棄したディスクリプタと同じディスクリプタを、直近のステップS30の処理によって形成されたディスクリプタバッファ41の空き領域に格納可能かどうかを判断する。
ステップS33の処理において、ディスクリプタバッファ41が必要量空いていないと判断した場合(ステップS33、NO)、メモリコントローラ30は、ステップS19の処理に移行する。
ステップS33の処理において、ディスクリプタバッファ41が必要量空いていると判断した場合(ステップS33、YES)、メモリコントローラ30は、破棄したディスクリプタと同じディスクリプタをフェッチする。具体的には、ホスト機器2が、メモリコントローラ30の要求に基づいて、ディスクリプタメモリDMに保持された複数のディスクリプタから、当該コマンドによって指示されたアドレスに保持されたディスクリプタをメモリコントローラ30に再び転送する。言い換えると、ホスト機器2は、あるコマンドに対応して転送済みのディスクリプタを、再びメモリコントローラ30に転送する。
以上のように、実施形態に係るメモリシステム1において、バッファ解放動作の対象となったコマンドに対応するディスクリプタは、ホスト機器2からメモリコントローラ30に複数回転送され得る。そして、メモリコントローラ30は、ステップS16以降の動作を順次実行する。それから、メモリコントローラ30は、ステップS31の処理において、コマンドバッファ40に格納されたコマンドの処理が全て完了するまで上述した動作を繰り返し実行する。
以下に、ステップS22における所定の条件の一例について説明する。ステップS22における所定の条件としては、例えばディスクリプタ数、NLB(Number of Logical Blocks)、コマンド種別、優先度情報が挙げられる。
(ディスクリプタ数に基づくバッファ解放動作)
まず、ディスクリプタ数に基づくバッファ解放動作について説明する。実施形態に係るメモリシステム1は、ディスクリプタ数に基づくバッファ解放動作を実行する場合、フェッチ済みのディスクリプタ数が多いコマンドを、バッファ解放動作の対象とする。
図10及び図11は、実施形態に係るメモリシステム1における、ディスクリプタ数に基づくバッファ解放動作の一例を示す模式図である。尚、以下の説明で参照される同様の図面では、説明を簡単にするため、ディスクリプタバッファ41がバッファ領域DB0〜DB7のみ有するものと仮定する。また、図10及び図11に示す一例では、PRPが適用されている。
メモリコントローラ30が、ステップS13の処理によって、コマンドバッファ40に格納されたコマンドに基づいてディスクリプタをフェッチすると、ディスクリプタバッファ41が一杯になることがある(ステップS20、NO)。図10(1)に示す例では、コマンドCMD0に対応するディスクリプタCMD0_D0〜CMD0_D4がバッファ領域DB0〜DB4にそれぞれ格納され、コマンドCMD1に対応するディスクリプタCMD1_D0〜CMD1_D2がバッファ領域DB5〜DB7にそれぞれ格納されている。また、各ディスクリプタの転送量は4KBに固定されている。
メモリコントローラ30は、コマンドCMD2を受信すると(図10(2))、ステップS21の処理によって、受信したコマンドの属性(本例では、ディスクリプタ数)を確認する。そして、メモリコントローラ30は、所定の条件として、例えばコマンドCMD2に基づくディスクリプタ数が、対応するディスクリプタ数が最も多いコマンドのディスクリプタ数よりも少ないかどうかを確認する(ステップS22)。尚、本処理において所定の条件を満たしたかどうかは、少なくともディスクリプタ数に基づいて判断されていれば良い。
それから、メモリコントローラ30は、所定の条件を満たした場合に(ステップS22、YES)、ステップS24の処理によって、フェッチ済みのディスクリプタ数が多いコマンドに対応するディスクリプタの一部を破棄する。図10(3)に示す例では、バッファ領域DB3及びDB4に格納されたコマンドCMD0のディスクリプタの一部であるCMD0_D3及びCMD0_D4が破棄されている。
続けて、メモリコントローラ30は、ステップS15の処理によってコマンドCMD2に基づいたディスクリプタの転送をホスト機器2に要求し、ホスト機器2は、ステップS16の処理によって、要求されたディスクリプタをメモリコントローラ30に転送する(図10(4))。そして、メモリコントローラ30は、ステップS17の処理によって、コマンドCMD2に対応するディスクリプタCMD2_D0及びCMD2_D1をバッファ領域DB3及びDB4にそれぞれ格納する。次に、メモリコントローラ30は、ステップS18の処理によって、ディスクリプタCMD2_D0及びCMD2_D1に対応するデータ領域の割り当てをホスト機器2に指示する。それから、メモリコントローラ30は、ステップS19の処理によって、コマンドCMD2及びディスクリプタCMD2_D0〜1に基づいた動作、すなわちディスクリプタCMD2_D0及びCMD2_D1によって転送領域TA内に割り当てられたデータ領域を用いてコマンドCMD2に基づいた動作を実行する(図10(5))。
コマンドCMD2及びディスクリプタCMD2_D0〜1に基づいた動作が完了すると、メモリコントローラ30は、ステップS30の処理における動作の完了処理を実行する(図11(6))。この場合、バッファ領域DB3及びDB4に格納されたコマンドCMD2のディスクリプタCMD2_D0及びCMD2_D1が破棄される。これにより、ディスクリプタバッファ41に空きが出来たため、メモリコントローラ30は、破棄されたディスクリプタと同じディスクリプタをフェッチする(図11(7))。具体的には、メモリコントローラ30は、コマンドCMD0ならびに破棄されず残っているコマンドCMD0のディスクリプタCMD0_D0〜2に基づいて、ホスト機器2に対して、CMD0_D3及びCMD0_D4の転送を再び要求する。言い換えると、メモリコントローラ30は、バッファ解放動作によって破棄したディスクリプタの一部と同じディスクリプタを、ホスト機器2からフェッチする。そして、受け取ったディスクリプタCMD0_D3及びCMD0_D4をバッファ領域DB3及びDB4に再格納する。それから、メモリコントローラ30は、コマンドCMD0及びディスクリプタCMD0_D0〜4に基づいた動作、すなわちディスクリプタCMD0_D0〜CMD0_D4によって転送領域TA内に割り当てられたデータ領域を用いてコマンドCMD0に基づいた動作の実行を開始する(図11(8))。
尚、以上の説明では、バッファ解放動作によって破棄されたディスクリプタと同じディスクリプタが、ディスクリプタバッファ41内で破棄される前と同じアドレスに格納される場合について例示したが、これに限定されない。破棄されたディスクリプタと同じディスクリプタが格納されるアドレスは、ディスクリプタバッファ41内の空きアドレスであれば何れのアドレスであっても良い。
(NLBに基づくバッファ解放動作)
次に、NLBに基づくバッファ解放動作について説明する。NLBは、フェッチ済みのディスクリプタによって転送されるデータ量のことを示している。実施形態に係るメモリシステム1は、NLBに基づくバッファ解放動作を実行する場合、フェッチ済みのディスクリプタにおいてNLBが大きいコマンドを、バッファ解放動作の対象とする。
図12は、実施形態に係るメモリシステム1における、NLBに基づくバッファ解放動作の一例を示す模式図である。また、図12に示す一例では、SGLが適用されている。メモリコントローラ30が、ステップS13の処理によって、コマンドバッファ40に格納されたコマンドに基づいてディスクリプタをフェッチすると、ディスクリプタバッファ41が一杯になることがある(ステップS20、NO)。図12(1)に示す例では、ディスクリプタCMD0_D0〜CMD0_D4のそれぞれの転送量は1KBに設定され、ディスクリプタCMD1_D0〜CMD1_D2の転送量は、32KB、4KB、4KBにそれぞれ設定されている。
メモリコントローラ30は、コマンドCMD2を受信すると(図12(2))、ステップS21の処理によって受信したコマンドの属性(本例では、NLB)を確認する。そして、メモリコントローラ30は、所定の条件として、例えばコマンドCMD2に基づくNLBが、対応するNLBが最も大きいコマンドのNLBよりも小さいかどうかを確認する(ステップS22)。尚、本処理において、所定の条件を満たしたかどうかは、少なくともNLBに基づいて判断されていれば良い。
それから、メモリコントローラ30は、所定の条件を満たした場合に(ステップS22、YES)、ステップS24の処理によって、NLBの大きいコマンドに対応するディスクリプタの一部を破棄する(バッファ解放動作)。図12(3)に示す例では、バッファ領域DB6及びDB7に格納されたコマンドCMD1のディスクリプタCMD1_D1及びCMD1_D2が破棄されている。
続けて、メモリコントローラ30は、ステップS15の処理によって、コマンドCMD2に基づいたディスクリプタの転送をホスト機器2に要求し、ホスト機器2は、ステップS16の処理によって、要求されたディスクリプタをメモリコントローラ30に転送する(図12(4))。そして、メモリコントローラ30は、ステップS17の処理によって、コマンドCMD2に対応するディスクリプタCMD2_D0及びCMD2_D1をバッファ領域DB6及びDB7にそれぞれ格納する。ディスクリプタCMD2_D0及びCMD2_D1のデータ転送量は、16KB、8KBにそれぞれ設定されており、破棄されたディスクリプタよりもデータ転送量が大きい。次に、メモリコントローラ30は、ステップS18の処理によって、ディスクリプタCMD2_D0及びCMD2_D1に対応するデータ領域の割り当てをホスト機器2に指示する。それから、メモリコントローラ30は、ステップS19の処理によって、コマンドCMD2及びディスクリプタCMD2_D0〜1に基づいた動作、すなわちディスクリプタCMD2_D0及びCMD2_D1によって転送領域TA内に割り当てられたデータ領域を用いてコマンドCMD2に基づいた動作を実行する(図12(5))。その他の動作は、ディスクリプタ数に基づくバッファ解放動作と同様のため、説明を省略する。
(コマンド種別に基づくバッファ解放動作)
次に、コマンド種別に基づくバッファ解放動作について説明する。コマンド種別は、当該コマンドに基づいて実行される動作の種類を示している。例えば、コマンド種別は、読み出し動作、書き込み動作等のうち何れかの動作に対応している。
実施形態に係るメモリシステム1は、コマンド種別に基づくバッファ解放動作を実行する場合、フェッチ済みのディスクリプタにおいて優先度の低いコマンド種別に対応するコマンドに基づいたディスクリプタを、バッファ解放動作の対象とする。
図13は、実施形態に係るメモリシステム1における、NLBに基づくバッファ解放動作の一例を示す模式図である。メモリコントローラ30が、ステップS13の処理によって、コマンドバッファ40に格納されたコマンドに基づいてディスクリプタをフェッチすると、ディスクリプタバッファ41が一杯になることがある(ステップS20、NO)。図13(1)に示す例では、ディスクリプタCMD0_D0〜CMD0_D4のコマンド種別が書き込み(Write)に設定され、ディスクリプタCMD1_D0〜CMD1_D2のコマンド種別が読み出し(Read)に設定されている。また、書き込み(Write)は優先度が低く、読み出し(Read)は優先度が高く、設定されている。
メモリコントローラ30は、コマンドCMD2を受信すると(図13(2))、ステップS21の処理によって受信したコマンドの属性(本例では、コマンド種別)を確認する。そして、メモリコントローラ30は、所定の条件として、コマンドCMD2のコマンド種別の優先度が、フェッチ済みのコマンドCMD0及びCMD1のコマンド種別よりも高いかどうかを確認する(ステップS22)。尚、本処理において、所定の条件を満たしたかどうかは、少なくともコマンド種別に基づいて判断されていれば良い。
それから、メモリコントローラ30は、所定の条件を満たした場合に(ステップS22、YES)、ステップS24の処理によってメモリコントローラ30は、優先度の低いコマンド種別に属するコマンドに基づいてフェッチしたディスクリプタの一部を破棄する(バッファ解放動作)。図13(3)に示す例では、バッファ領域DB3及びDB4に格納されたコマンドCMD0のディスクリプタCMD0_D3及びCMD0_D4が破棄されている。
続けて、メモリコントローラ30は、ステップS15の処理によって、コマンドCMD2に基づいたディスクリプタの転送をホスト機器2に要求し、ホスト機器2は、ステップS16の処理によって、要求されたディスクリプタをメモリコントローラ30に転送する(図13(4))。そして、メモリコントローラ30は、ステップS17の処理によって、コマンドCMD2に対応するディスクリプタCMD2_D0及びCMD2_D1をバッファ領域DB6及びDB7にそれぞれ格納する。ディスクリプタCMD2_D0及びCMD2_D1のコマンド種別は、読み出しに設定されている。次に、メモリコントローラ30は、ステップS18の処理によって、ディスクリプタCMD2_D0及びCMD2_D1に対応するデータ領域の割り当てをホスト機器2に指示する。それから、メモリコントローラ30は、ステップS19の処理によって、コマンドCMD2及びディスクリプタCMD2_D0〜1に基づいた動作、すなわちディスクリプタCMD2_D0及びCMD2_D1によって転送領域TA内に割り当てられたデータ領域を用いてコマンドCMD2に基づいた動作を実行する(図13(5))。その他の動作は、ディスクリプタ数に基づくバッファ解放動作と同様のため、説明を省略する。
(優先度情報に基づくバッファ解放動作)
次に、優先度情報に基づくバッファ解放動作について説明する。優先度情報としては、例えば書き込みの優先度設定や、データの転送方法や、レイテンシ情報や、Data Set Managementの値等、あらゆるパラメータを利用することが出来る。
ここで、優先度情報における優先度の設定方法の一例について説明する。メモリシステム1は、ディスクリプタバッファ41が複数のコマンドCMDにそれぞれ対応する複数組のディスクリプタを保持することによって、複数の半導体記憶装置10に対する並列処理が出来る場合がある。そして、メモリシステム1は、必要なディスクリプタ数が多いコマンドCMDよりも、必要なディスクリプタ数が少ないコマンドCMDを複数組保持した方が、並列処理が出来る可能性が高くなる。このため、優先度の設定方法としては、必要なディスクリプタ数が多いコマンドCMDの優先度よりも、必要なディスクリプタ数が少ないコマンドCMDの優先度の方を高くすることが考えられる。
具体例として、データの転送方法が優先度情報として使用される場合の優先度の設定例について簡潔に述べる。データの転送方法としては、シーケンシャル転送とランダム転送とが挙げられる。そして、シーケンシャル転送は、指定するアドレスの数がランダム転送よりも少ないため、ランダム転送よりもディスクリプタ数が少なくて済む傾向がある。このため、データの転送方法を優先度情報として使用する場合、例えばシーケンシャル転送の優先度が高(High)に設定され、ランダム転送が低(Low)に設定される。
実施形態に係るメモリシステム1は、優先度情報に基づくバッファ解放動作を実行する場合、フェッチ済みのディスクリプタにおいて優先度の低い動作に対応するコマンドに基づいたディスクリプタを、バッファ解放動作の対象とする。
図14は、実施形態に係るメモリシステム1における、優先度に基づくバッファ解放動作の一例を示す模式図である。メモリコントローラ30が、ステップS13の処理によって、コマンドバッファ40に格納されたコマンドに基づいてディスクリプタをフェッチすると、ディスクリプタバッファ41が一杯になることがある(ステップS20、NO)。図14(1)に示す例では、ディスクリプタCMD0_D0〜CMD0_D4の優先度がLowに設定され、ディスクリプタCMD1_D0〜CMD1_D2の優先度がHighに設定されている。具体的には、例えば、優先度がLowであるディスクリプタCMD0_D0〜CMD0_D4は、ランダム転送に対応し、優先度がHighであるディスクリプタCMD1_D0〜CMD1_D2は、シーケンシャル転送に対応している。
その後、メモリコントローラ30は、コマンドCMD2を受信すると(図14(2))、ステップS21の処理によって受信したコマンドの属性(本例では、優先度情報)を確認する。そして、メモリコントローラ30は、所定の条件として、コマンドCMD2の優先度情報に基づいた優先度が、フェッチ済みのコマンドCMD0及びCMD1よりも高いかどうかを確認する(ステップS22)。尚、本処理において所定の条件を満たしたかどうかは、少なくとも優先度情報に基づいて判断されていれば良い。
それから、メモリコントローラ30は、所定の条件を満たした場合に(ステップS22、YES)、ステップS24の処理によって優先度がLowであるコマンドに対応するディスクリプタの一部を破棄する。図14(3)に示す例では、バッファ領域DB3及びDB4に格納されたコマンドCMD0のディスクリプタCMD0_D3及びCMD0_D4が破棄されている。
続けて、メモリコントローラ30は、コマンドCMD2に基づいたディスクリプタの転送をホスト機器2に要求する(図14(4))。そして、メモリコントローラ30は、コマンドCMD2に対応するディスクリプタCMD2_D0及びCMD2_D1をバッファ領域DB6及びDB7にそれぞれ格納する。ディスクリプタCMD2_D0及びCMD2_D1は、優先度Highに設定されており、破棄されたディスクリプタよりも優先度が高い設定になっている。次に、メモリコントローラ30は、コマンドCMD2及びディスクリプタCMD2_D0〜1に基づいた動作、すなわちディスクリプタCMD2_D0及びCMD2_D1によって転送領域TA内に割り当てられたデータ領域を用いてコマンドCMD2に基づいた動作を実行する(図14(5))。その他の動作は、ディスクリプタ数に基づくバッファ解放動作と同様のため、説明を省略する。
[3]実施形態の効果
実施形態に係るメモリシステム1に依れば、メモリシステム1の動作を高速化することが出来る。以下に、実施形態に係るメモリシステム1の詳細な効果について説明する。
SSD等のメモリシステム1は、ホスト機器2の指示に基づいた動作を実行する際に、実行するコマンドに基づいたディスクリプタの転送をホスト機器2に要求する。そして、ホスト機器2は、メモリシステム1から要求されたディスクリプタをメモリシステムに転送する。NVMeでは、このようなコマンドに基づいたディスクリプタの転送方式として、PRP及びSGLが使用される。PRP及びSGLのそれぞれは、Scatter/Gather転送を可能とするために、ディスクリプタチェインを構成している。
PRP及びSGLに対応するディスクリプタは、ホスト機器2内のディスクリプタメモリDMに格納されている。このため、メモリコントローラ30は、ホスト機器2とメモリシステム1との間のデータ転送を行う前に、ディスクリプタメモリDMに格納されたディスクリプタのフェッチをする必要がある(プリフェッチ)。メモリコントローラ30は、プリフェッチしたデータを、例えばディスクリプタバッファ41に格納する。
ディスクリプタバッファ41に対しては、例えばコマンド毎に固定領域を割り当てることが考えられる。この場合、ディスクリプタバッファ41における領域の管理が容易になり、同時に実行することが可能なコマンドの数が常に一定(ディスクリプタバッファ41に格納出来る最大のコマンド数)になる。
一方で、固定領域よりも大きい領域を必要とするコマンドには、1つのコマンドに対して複数の固定領域が割り当てられる。この場合、割り当てられた固定領域内に使用されない領域が発生し得る。また、複数の固定領域が割り当てられたコマンドにおいて、対応するディスクリプタの転送サイズが小さい場合、ディスクリプタバッファ41に格納されたディスクリプタによる合計の転送サイズが小さくなる。すなわち、メモリシステム1及びホスト機器2間のデータ転送量が少なくなり、メモリシステム1の転送性能が低下するおそれがある。また、複数の固定領域を必要とするコマンドが多くなると、メモリシステム1がプリフェッチすることが出来るコマンドの数が少なくなる。この場合、メモリシステム1には、並列で処理することが可能なコマンドをプリフェッチすることが出来なくなる可能性が生じ得る。
また、ディスクリプタバッファ41に対しては、コマンド毎に必要な領域を割り当てることが考えられる。この場合、ディスクリプタバッファ41の使用領域が大きいコマンドに対して、適切な領域が割り当てられる。このため、メモリコントローラ30は、空き領域が少なくなるようにディスクリプタバッファ41の領域を管理することが出来、プリフェッチするコマンドの数が少なくなることを抑制することが出来る。一方で、ディスクリプタバッファ41の使用領域が大きく、且つ並列処理することが出来ない複数のコマンドがプリフェッチされる場合も考えられる。この場合には、メモリシステム1及びホスト機器2間のデータ転送量が少なくなり、メモリシステム1の転送性能が低下するおそれがある。
以上のようなメモリ割り当て方法に対して転送性能の低下を抑制するためには、ディスクリプタバッファ41の容量を大きくすることが考えられる。しかしながら、ディスクリプタバッファ41の容量を大きくする場合には、大きな回路面積が必要となり、メモリシステム1の製造コストが高くなり得る。
そこで、実施形態に係るメモリシステム1は、ディスクリプタバッファ41を動的に解放し、再割り当てを実行する。言い換えると、実施形態に係るメモリシステム1は、優先度の低い動作のディスクリプタを一時的に破棄することによって、優先度の高い動作を優先的に処理する。
具体的には、実施形態に係るメモリシステム1は、新規のコマンドを受信し、ディスクリプタバッファ41の空きが足りている場合は、ディスクリプタのフェッチを実行する。そして、実施形態に係るメモリシステム1は、新規のコマンドを受信し、ディスクリプタバッファ41の空きが足りない場合には、未使用ディスクリプタをディスクリプタバッファ41から一時的に破棄し、その領域を新規のコマンドのディスクリプタのフェッチに用いる。
実施形態に係るメモリシステム1において、ディスクリプタバッファ41に格納されたディスクリプタの再割り当てのアルゴリズムは、様々な方法が使用され得る。例えば、実施形態に係るメモリシステム1は、ディスクリプタ数や、NLBや、コマンド種別や、優先度情報等に基づいて、ディスクリプタバッファ41のバッファ解放動作を実行する。
例えば、読み出し動作は、内部レイテンシが大きいため、複数の半導体記憶装置10に対して並列実行可能なコマンド数が書き込み動作よりも多い。このため、新規のコマンドが読み出し動作に対応し、フェッチ済みのディスクリプタに書き込み動作に対応するものが含まれている場合、書き込み動作に対応するフェッチ済みのディスクリプタを破棄して、読み出し動作に対応するディスクリプタをフェッチすることが有効である。
その結果、実施形態に係るメモリシステム1は、転送性能を柔軟に最適化することが出来、有限なメモリ容量下で転送性能を効率的に引き出すことが出来る。つまり、実施形態に係るメモリシステム1は、複数の半導体記憶装置10の利用効率を向上することが出来る。尚、実施形態に係るメモリシステム1は、その他のアルゴリズムを利用した場合においても同様の効果を得ることが出来る。各アルゴリズムは、適宜カスタマイズされ、ユーザにとって最適な性能を向上し得る。
[4]変形例等
実施形態のメモリシステムは、半導体記憶装置と、メモリコントローラとを含む。メモリコントローラは、半導体記憶装置と外部のホスト機器との間のデータ転送を制御し、コマンドバッファとディスクリプタバッファとを有する。メモリコントローラは、外部から受信した第1コマンドを前記コマンドバッファに格納し、格納した前記第1コマンドに基づいて前記ホスト機器から第1ディスクリプタをフェッチし、フェッチした前記第1ディスクリプタを前記ディスクリプタバッファに格納し、外部から受信した第2コマンドを前記コマンドバッファに格納し、未使用の前記第1ディスクリプタの一部を前記ディスクリプタバッファから破棄し、格納した前記第2コマンドに基づいて、ホスト機器から第2ディスクリプタをフェッチし、破棄した前記第1ディスクリプタの一部が格納されていたアドレスに、フェッチした前記第2ディスクリプタを格納する。これにより、実施形態に係るメモリシステムは、動作を高速化することが出来る。
実施形態に係るメモリシステム1の動作説明では、ディスクリプタバッファ41が一杯になった状態でメモリコントローラ30が新たに1つのコマンドを受信する場合について例示したが、これに限定されない。メモリコントローラ30は、コマンドバッファ40の空きがある分、適宜新しいコマンドを受信し得る。そして、メモリコントローラ30は、バッファ解放動作を適宜実行し得る。
実施形態に係るメモリシステム1の動作説明では、NVMeを一例として挙げたが、その他のインターフェイス規格においても同様に動作することが出来る。実施形態に係るメモリシステム1は、少なくともメモリコントローラ30がフェッチ済み且つ対応する動作が未完了のディスクリプタを破棄し、ディスクリプタメモリDMの同じアドレスに格納されたディスクリプタを再フェッチする動作を実行していれば良い。
本明細書において“同じディスクリプタ”とは、ディスクリプタメモリDMにおいて同じアドレスに格納されているディスクリプタのことを示している。実施形態において、バッファ解放動作におけるディスクリプタバッファ41のバッファ領域の解放サイズは、適宜変更され得る。実施形態におけるメモリシステム1は、少なくとも新規のコマンドに対応するディスクリプタをフェッチすることが可能な分、バッファ領域DBを解放していれば良い。
実施形態では、バッファ解放動作のアルゴリズムとして複数種類説明したが、これらのアルゴリズムは組み合わされても良い。メモリシステム1は、例えばディスクリプタ数とNLBとの両方を考慮して、バッファ解放動作を実行しても良い。その他のアルゴリズムについても同様に組み合わせ可能であり、3つ以上のアルゴリズムを用いて複合的にバッファ解放動作における優先度を決定しても良い。
実施形態では、バッファ解放動作によって、動作が完了していないディスクリプタが破棄される場合について例示したが、これに限定されない。例えば、メモリコントローラ30は、バッファ解放動作の対象であるディスクリプタが格納されているアドレスに、新規のコマンドに基づいたディスクリプタを上書きしても良い。この場合、上書きされたディスクリプタは、実施形態で説明した各バッファ解放動作における破棄されたディスクリプタと同様に扱われる。また、メモリコントローラ30は、上書きされたディスクリプタをホスト機器2から再フェッチする際に、ディスクリプタの上書きを実行しても良い。このような場合においても、メモリシステムは、実施形態と同様の効果を得ることが出来る。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことが出来る。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…メモリシステム、2…ホスト機器、10…半導体記憶装置、11…メモリセルアレイ、12…コマンドレジスタ、13…アドレスレジスタ、14…シーケンサ、15…ドライバモジュール、16…ロウデコーダモジュール、17…センスアンプモジュール、30…メモリコントローラ、31…CPU、32…RAM、33…ホストインターフェイス回路
34…NANDインターフェイス回路、35…DRAMインターフェイス回路、40…コマンドバッファ、41…ディスクリプタバッファ、42…キャッシュメモリ、43…DMAコントローラ、BLK…ブロック、SU…ストリングユニット、BL…ビット線、WL…ワード線、SGD…選択ゲート線、SGS…選択ゲート線、MT…メモリセルトランジスタ、ST1…選択トランジスタ、ST2…選択トランジスタ

Claims (9)

  1. 半導体記憶装置と、
    前記半導体記憶装置と外部のホスト機器との間のデータ転送を制御し、コマンドバッファとディスクリプタバッファとを有するメモリコントローラと、を備え、
    前記メモリコントローラは、
    外部から受信した第1コマンドを前記コマンドバッファに格納し、
    格納した前記第1コマンドに基づいて、前記ホスト機器から第1ディスクリプタをフェッチし、
    フェッチした前記第1ディスクリプタを前記ディスクリプタバッファに格納し、
    外部から受信した第2コマンドを前記コマンドバッファに格納し、
    未使用の前記第1ディスクリプタの一部を前記ディスクリプタバッファから破棄し、
    格納した前記第2コマンドに基づいて、前記ホスト機器から第2ディスクリプタをフェッチし、
    破棄した前記第1ディスクリプタの一部が格納されていたアドレスに、フェッチした前記第2ディスクリプタを格納する、
    メモリシステム。
  2. 前記メモリコントローラは、前記第2コマンドの優先度に基づいて、未使用の前記第1ディスクリプタの一部を前記ディスクリプタバッファから破棄する、
    請求項1に記載のメモリシステム。
  3. 前記メモリコントローラは、前記ディスクリプタバッファの空きに基づいて、未使用の前記第1ディスクリプタの一部を前記ディスクリプタバッファから破棄する、
    請求項1に記載のメモリシステム。
  4. 前記メモリコントローラは、前記ディスクリプタバッファに格納された前記第2ディスクリプタに基づいて前記ホスト機器に割り当てられた領域を用いて、前記コマンドバッファに格納された前記第2コマンドに基づいた動作を実行した後に、
    格納した前記第1コマンドに基づいて、破棄した前記第1ディスクリプタの一部と同じディスクリプタである第3ディスクリプタを前記ホスト機器からフェッチし、
    フェッチした前記第3ディスクリプタを前記ディスクリプタバッファに格納する、
    請求項1乃至請求項3の何れか一項に記載のメモリシステム。
  5. 前記メモリコントローラは、前記コマンドバッファに格納されたコマンドに対応するディスクリプタの数に基づいて前記第1ディスクリプタを破棄するか否かを判断し、
    前記メモリコントローラが前記第1コマンドに基づいて前記ホスト機器からフェッチするディスクリプタの数は、前記メモリコントローラが前記第2コマンドに基づいて前記ホスト機器からフェッチするディスクリプタの数よりも多い、
    請求項1乃至請求項4の何れか一項に記載のメモリシステム。
  6. 前記メモリコントローラは、前記ディスクリプタバッファに格納されたディスクリプタに対応するデータ転送量に基づいて前記第1ディスクリプタを破棄するか否かを判断し、
    前記第1ディスクリプタに基づいた前記メモリシステムと前記ホスト機器との間のデータ転送量は、前記第2ディスクリプタに基づいた前記メモリシステムと前記ホスト機器との間のデータ転送量よりも多い、
    請求項1乃至請求項4の何れか一項に記載のメモリシステム。
  7. 前記メモリコントローラは、
    前記第1コマンドに対応する動作の種類を確認し、
    前記動作の種類が書き込み動作の場合は、格納した前記第1ディスクリプタを前記ディスクリプタバッファから破棄すると判断し、
    前記動作の種類が読み出し動作の場合は、格納した前記第1ディスクリプタを前記ディスクリプタバッファから破棄しないと判断する、
    請求項1乃至請求項4の何れか一項に記載のメモリシステム。
  8. 半導体記憶装置と、
    前記半導体記憶装置と外部のホスト機器との間のデータ転送を制御し、コマンドバッファとディスクリプタバッファとを有するメモリコントローラと、を備え、
    前記メモリコントローラは、
    外部から受信した第1コマンドを前記コマンドバッファに格納し、
    格納した前記第1コマンドに基づいて、前記ホスト機器から第1ディスクリプタをフェッチし、
    フェッチした前記第1ディスクリプタを前記ディスクリプタバッファに格納し、
    外部から受信した第2コマンドを前記コマンドバッファに格納し、
    格納した前記第2コマンドに基づいて、前記ホスト機器から第2ディスクリプタをフェッチし、
    未使用の前記第1ディスクリプタの一部が格納されているアドレスに、フェッチした前記第2ディスクリプタを上書きする、
    メモリシステム。
  9. 前記メモリコントローラは、前記ディスクリプタバッファに格納された前記第2ディスクリプタに基づいて前記ホスト機器に割り当てられた領域を用いて、前記コマンドバッファに格納された前記第2コマンドに基づいた動作を実行した後に、
    格納した前記第1コマンドに基づいて、前記第2ディスクリプタが上書きされた前記第1ディスクリプタの一部と同じディスクリプタである第3ディスクリプタを前記ホスト機器からフェッチし、
    フェッチした前記第3ディスクリプタを前記ディスクリプタバッファに格納する、
    請求項8に記載のメモリシステム。
JP2019050674A 2019-03-19 2019-03-19 メモリシステム Pending JP2020154493A (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2019050674A JP2020154493A (ja) 2019-03-19 2019-03-19 メモリシステム
TW108129408A TWI707361B (zh) 2019-03-19 2019-08-19 記憶體系統
US16/549,451 US10963190B2 (en) 2019-03-19 2019-08-23 Memory system
CN201910847002.7A CN111722792B (zh) 2019-03-19 2019-09-09 存储器系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019050674A JP2020154493A (ja) 2019-03-19 2019-03-19 メモリシステム

Publications (1)

Publication Number Publication Date
JP2020154493A true JP2020154493A (ja) 2020-09-24

Family

ID=72515406

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019050674A Pending JP2020154493A (ja) 2019-03-19 2019-03-19 メモリシステム

Country Status (4)

Country Link
US (1) US10963190B2 (ja)
JP (1) JP2020154493A (ja)
CN (1) CN111722792B (ja)
TW (1) TWI707361B (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113485643B (zh) * 2021-07-01 2023-10-31 成都忆芯科技有限公司 用于数据存取的方法及数据写入的控制器
US11861224B2 (en) 2021-10-26 2024-01-02 Western Digital Technologies, Inc. Data transfer management from host buffers
US11656798B1 (en) 2021-12-03 2023-05-23 Western Digital Technologies, Inc. Immediate partial host buffer fetching

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7620749B2 (en) 2007-01-10 2009-11-17 International Business Machines Corporation Descriptor prefetch mechanism for high latency and out of order DMA device
US8683126B2 (en) 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
JP2009065564A (ja) 2007-09-07 2009-03-26 Sony Corp 受信端末装置、受信データ格納方法、プログラム及び記録媒体
US7912997B1 (en) * 2008-03-27 2011-03-22 Xilinx, Inc. Direct memory access engine
TWI465905B (zh) * 2010-09-22 2014-12-21 Toshiba Kk 記憶體系統、主機控制器、及直接記憶體存取之控制方法
US9552175B2 (en) * 2011-02-08 2017-01-24 Diablo Technologies Inc. System and method for providing a command buffer in a memory system
CN102799392B (zh) * 2012-06-16 2015-12-16 北京忆恒创源科技有限公司 存储设备及其中断控制方法
US9317444B2 (en) * 2013-03-15 2016-04-19 Vmware, Inc. Latency reduction for direct memory access operations involving address translation
US9608842B2 (en) * 2013-12-13 2017-03-28 Intel Corporation Providing, at least in part, at least one indication that at least one portion of data is available for processing
KR102367982B1 (ko) * 2015-06-22 2022-02-25 삼성전자주식회사 데이터 저장 장치와 이를 포함하는 데이터 처리 시스템
US10324872B2 (en) * 2016-09-20 2019-06-18 Intel IP Corporation Interrupt-vector translation lookaside buffer
KR102444606B1 (ko) * 2017-08-28 2022-09-20 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
KR102381233B1 (ko) * 2017-08-28 2022-04-01 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법

Also Published As

Publication number Publication date
US10963190B2 (en) 2021-03-30
CN111722792B (zh) 2023-08-22
CN111722792A (zh) 2020-09-29
TW202036550A (zh) 2020-10-01
US20200301609A1 (en) 2020-09-24
TWI707361B (zh) 2020-10-11

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
US11086568B2 (en) Memory system for writing fractional data into nonvolatile memory
US20100082917A1 (en) Solid state storage system and method of controlling solid state storage system using a multi-plane method and an interleaving method
CN111722792B (zh) 存储器系统
US11269552B2 (en) Multi-pass data programming in a memory sub-system having multiple dies and planes
JP2020155182A (ja) メモリシステム及び不揮発性メモリ
US10782915B2 (en) Device controller that schedules memory access to a host memory, and storage device including the same
JP2013109419A (ja) 情報処理装置
US10168951B2 (en) Methods for accessing data in a circular block mode and apparatuses using the same
US10719263B2 (en) Method of handling page fault in nonvolatile main memory system
US10606484B2 (en) NAND flash storage device with NAND buffer
JP2019057147A (ja) メモリシステム
US20230091792A1 (en) Memory system and method of controlling nonvolatile memory
US20190012260A1 (en) Flash memory package and storage system including flash memory package
JP2019148913A (ja) メモリシステム
JP2023012773A (ja) メモリシステムおよび制御方法
US20220189518A1 (en) Method and apparatus and computer program product for reading data from multiple flash dies
JP2023039459A (ja) メモリシステムおよび方法
US11966327B2 (en) Memory system
US20230409470A1 (en) Scratchpad cache for gaming and iot hosts
CN113906383B (zh) 主机系统和存储器子系统之间的定时数据传送
US10387076B2 (en) Methods for scheduling data-programming tasks and apparatuses using the same
JP2022146531A (ja) メモリシステム
JP2023136082A (ja) メモリシステムおよび制御方法