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

メモリシステム Download PDF

Info

Publication number
JP2023027970A
JP2023027970A JP2021133367A JP2021133367A JP2023027970A JP 2023027970 A JP2023027970 A JP 2023027970A JP 2021133367 A JP2021133367 A JP 2021133367A JP 2021133367 A JP2021133367 A JP 2021133367A JP 2023027970 A JP2023027970 A JP 2023027970A
Authority
JP
Japan
Prior art keywords
host
read data
data
memory
read
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
JP2021133367A
Other languages
English (en)
Inventor
毅 菊池
Takeshi Kikuchi
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 JP2021133367A priority Critical patent/JP2023027970A/ja
Priority to US17/549,440 priority patent/US11880592B2/en
Publication of JP2023027970A publication Critical patent/JP2023027970A/ja
Pending legal-status Critical Current

Links

Images

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/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/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]
    • 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
    • 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/061Improving I/O performance
    • 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/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • 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

Abstract

【課題】ホストへの効率的なデータ送信を行うことができるメモリシステムを提供する。【解決手段】実施形態によれば、メモリシステムは、不揮発性メモリと、コントローラと、を具備する。コントローラは、ホストと通信可能であり、不揮発性メモリを制御する。ホストは、ホストメモリと、ホストメモリへ第1サイズ単位でアクセスを行う制御回路と、を含む。コントローラは、不揮発性メモリから読み出されたリードデータのホストメモリへの格納位置としてホストから指定されたアドレスが、第1サイズ毎に定められるホストメモリの境界とアラインしていない場合、アドレスで示される位置から境界までのサイズを有し、ホストメモリのアドレスで示される位置から格納されるべきリードデータを含む第1パケットをホストへ送信した後、第1サイズを有し、境界の位置から格納されるべきリードデータを含む第2パケットをホストへ送信する。【選択図】図9

Description

本発明の実施形態は、メモリシステムに関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。たとえばNAND型フラッシュメモリ(NANDメモリ)を備えるSSD(solid state drive)は、サーバやパーソナルコンピュータのような情報処理装置のストレージとして使用されている。
NVM Express(NVMe)TM仕様に準拠するプロトコルで情報処理装置(ホスト)と通信を行うSSDは、NANDメモリから読み出したデータを、ホストから指定されたホストメモリの位置に格納するためのデータ送信を行うことができる。
NVMeTM仕様で規定されるコマンドやデータの送受信に使用されるPCI Express(PCIe)TM仕様に準拠するインターフェースでは、TLP(transaction-layer packet)単位でデータの送受信を行う。TLPには、MPS(max payload size)という最大長が規定される。MPSは、たとえばホストメモリへのホストによるアクセス単位と一致するように規定され得る。一方、TLPによって送信されるデータの、ホストメモリ内の位置に対しては、アドレスアラインに関する規定はない。
したがって、TLPによって送信されるデータは、ホストメモリへのホストによるアクセス単位毎に定められる境界と一致して格納されるとは限らない。一致していない場合に、TLPによって送信されるデータの多くが、ホストメモリへのホストによるアクセスの境界を跨ぐものとなる。この場合、たとえば、アクセスの境界を跨いで格納されたデータを得るためのオーバーヘッドが生じてしまう。
特許第6273664号公報 特許第6273010号公報 米国特許第10860449号明細書
本発明の1つの実施形態は、ホストへの効率的なデータ送信を行うことができるメモリシステムを提供する。
実施形態によれば、メモリシステムは、不揮発性メモリと、コントローラと、を具備する。コントローラは、ホストと通信可能であり、不揮発性メモリを制御する。ホストは、ホストメモリと、ホストメモリへ第1サイズ単位でアクセスを行う制御回路と、を含む。コントローラは、不揮発性メモリから読み出されたリードデータのホストメモリへの格納位置としてホストから指定されたアドレスが、第1サイズ毎に定められるホストメモリの境界とアラインしていない場合、アドレスで示される位置から境界までのサイズを有し、ホストメモリのアドレスで示される位置から格納されるべきリードデータを含む第1パケットをホストへ送信した後、第1サイズを有し、境界の位置から格納されるべきリードデータを含む第2パケットをホストへ送信する。
実施形態のメモリシステムの一構成例を示す図 実施形態のメモリシステムにおけるホストインターフェース制御部の一構成例を示す図 実施形態のメモリシステムのリードデータの取り扱い単位を示す図 実施形態のメモリシステムから読み出したデータを格納するためにホストがホストメモリ上に確保する領域の一例を示す図 比較例のメモリシステムがリードデータをTLPでホストへ送信する一例を示す図 実施形態のメモリシステムがリードデータをTLPでホストへ送信する一例を示す図 実施形態のメモリシステムのプールバッファの一構成例を示す図 実施形態のメモリシステムのプールバッファの基本動作の第1例を示す図 実施形態のメモリシステムのプールバッファの基本動作の第2例を示す図 実施形態のメモリシステムのプールバッファの基本動作の第3例を示す図 実施形態のメモリシステムのプールバッファの基本動作の第4例を示す図 実施形態のメモリシステムのプールバッファの例外動作の第1例を示す第1図 実施形態のメモリシステムのプールバッファの例外動作の第1例を示す第2図 実施形態のメモリシステムのプールバッファの例外動作の第2例を示す図
以下、実施の形態について、図面を参照して説明する。
図1は、実施形態のメモリシステム1の一構成例を示す図である。図1には、メモリシステム1と、メモリシステム1と接続されるホスト2とを含む、情報処理システムの一構成例が併せて示されている。
メモリシステム1はストレージ装置である。ここでは、メモリシステム1がSSDとして実現されている例を示す。ホスト2は情報処理装置である。ホスト2は、たとえばサーバやパーソナルコンピュータである。メモリシステム1とホスト2とは、たとえばPCIeTM仕様に準拠するインターフェースで接続されている。また、メモリシステム1とホスト2とは、たとえばNVMeTM仕様に準拠するプロトコルで通信を行う。PCIeTMでは、TLP単位でデータの送受信を行う。つまり、メモリシステム1とホスト2との間のデータの送受信は、このTLP単位で行われる。
ホスト2は、CPU(central processing unit)21と、ホストメモリ22と、メモリコントローラ23とを有する。CPU21は、各種プログラムを実行する処理装置である。各種プログラムは、たとえばオペレーティングシステム、ユーティリティソフトウェア、アプリケーションソフトウェア、ドライバである。たとえばオペレーティングシステムを実行しているCPU21は、メモリシステム1に対して、データの書き込みを要求するライトコマンドや、データの読み出しを要求するリードコマンドを発行する。
ホストメモリ22は、ホスト2の主記憶装置である。ホストメモリ22は、たとえばDRAM(dynamic random access memory)である。ホストメモリ22内には、メモリシステム1から読み出されたデータを一時的に格納するデータバッファ22Aが設けられる。なお、ホストメモリ22内には、メモリシステム1へ書き込むデータを一時的に格納するデータバッファがさらに設けられてもよい。
メモリコントローラ23は、ホストメモリ22へのアクセスを制御する制御装置である。メモリコントローラ23は、たとえばハードウェア回路として構成される。メモリコントローラ23と、CPU21とは、一体のハードウェアとして構成されてもよい。
メモリシステム1は、コントローラ11と、不揮発性メモリ(ここでは、NANDメモリ)12とを有する。コントローラ11は、たとえばSoC(system-on-a-chip)として構成される。コントローラ11の各部の機能は、専用ハードウェア、プログラム(ファームウェア)を実行するプロセッサ、または、これらの組み合わせにより実現され得る。
コントローラ11は、ホスト2からのコマンドに応じて、NANDメモリ12を制御する制御装置である。たとえば、コントローラ11は、ホスト2からライトコマンドを受信した場合、ホスト2から指定されたデータ(ライトデータ)のNANDメモリ12への書き込みを制御する。また、コントローラ11は、ホスト2からリードコマンドを受信した場合、ホスト2から指定されたデータ(リードデータ)のNANDメモリ12からの読み出しを制御する。
コントローラ11は、PHY(physical layer)31と、ホストインターフェース制御部(ホストIF制御部)32と、NAND制御部33とを有する。
PHY31は、OSI(Open Systems Interconnection)階層モデルにおける物理層の機能を実現するための処理装置である。PHY31は、コントローラ11とホスト2との間を繋ぐコネクタからのシリアル信号の入力および当該コネクタへのシリアル信号の出力を制御する。
ホストインターフェース制御部32は、ホスト2との間のデータの送受信を制御する。たとえば、ホストインターフェース制御部32は、ライトデータが含まれている複数のTLPをホスト2から受信して各TLPからライトデータを取り出す。また、ホストインターフェース制御部32は、NANDメモリ12から読み出されたリードデータを複数のTLPに含めて各TLPをホスト2へ送信する。
NAND制御部33は、NANDメモリ12へのデータの書き込みおよびNANDメモリ12からのデータの読み出しを制御する。
図1の符号a1~a4は、ホスト2がリードコマンドを発行してから、当該リードコマンドで指定されたデータ(リードデータ)がメモリシステム1からホスト2へ送信されるまでの流れを示している。
ホスト2は、メモリシステム1に対して、リードデータに関連付けられた論理アドレスおよびリードデータのサイズを指定したリードコマンドを発行する(a1)。論理アドレスは、たとえば論理ブロックアドレス(LBA)である。リードデータのサイズは、たとえばセクターと称される単位で表される。セクターのサイズは、たとえば520バイトである。リードコマンドは、リードデータを格納すべきホストメモリ22(データバッファ22A)上の位置を示すアドレスも指定する。
ホスト2は、リードデータを格納すべきホストメモリ22内の位置として、複数のアドレスを指定することができる。たとえば、リードデータのサイズよりも大きいサイズの連続した空き領域がデータバッファ22A内に存在しない場合においても、ホスト2は、リードデータのサイズよりも小さいサイズの複数の空き領域を組み合わせて、リードデータのサイズ分の空き領域をデータバッファ22A内に確保し、リードコマンドを発行することができる。以下、ホストメモリ22上の位置を示すアドレスをホストメモリアドレスと称することがある。
ホストメモリアドレスを指定するためのアドレスリストの形式として、PRP(physical region page entry/list)やSGL(scatter gather list)が知られている。PRP/SGLは、たとえば、一定サイズの領域の先頭位置を各々が示す複数のホストメモリアドレスを格納する。PRP/SGLに格納されるホストメモリアドレスの数は、リードデータのサイズに応じて変動する。データバッファ22A内の非連続の複数の空き領域を組み合わせてリードデータの格納先とする場合、複数のPRP/SGLが使用され得る。
メモリシステム1のコントローラ11は、リードコマンドを受信した場合、当該リードコマンドで指定されている論理アドレスに対応するNANDメモリ12内の位置を示す物理アドレス、およびリードデータのサイズに基づき、リードデータを出力させるためのNANDメモリ12の制御を行う(a2)。コントローラ11の制御の下、NANDメモリ12が出力動作を行うことで、NANDメモリ12からリードデータが読み出される(a3)。
コントローラ11は、NANDメモリ12から読み出されたリードデータを、前述したように、複数のTLPに含めてホスト2へ送信する(a4)。メモリシステム1からホスト2へ送信される各TLPには、ホストメモリアドレスも含まれている。TLPでメモリシステム1からホスト2に送信されたリードデータは、ホストメモリアドレスで示されるホストメモリ22(データバッファ22A)内の位置に格納される。
たとえばオペレーティングシステムを実行しているCPU21は、ホストメモリ22に格納されるデータを、たとえばセクター単位で管理する。上述したように、セクターのサイズは、たとえば520バイトである。換言すれば、ホストメモリ22は、各々が520バイトの容量を有する複数の第1区画を含む。すなわち、ホストメモリ22上には、520バイト毎に第1境界が定められる。
一方、メモリコントローラ23は、ホストメモリ22に格納されるデータに対して、たとえば512バイト単位でアクセスを行う。メモリコントローラ23は、ホストメモリ22に格納されるデータに対して、たとえば512バイト毎に、ECC(error correction code)パリティを生成する。これに伴い、ホストメモリ22は、第1区画に加えて、各々が512バイトの容量を有する複数の第2区画(メモリブロックとも称される)を含む。すなわち、ホストメモリ22上には、512バイト毎に第2境界が定められる。以下、第2境界をホストアクセス境界と称する。
ホスト2とメモリシステム1との間でデータを送受信するためのTLPには、MPSという最大長がPCIeTM仕様で規定されている。MPSは、2のべき乗バイトのサイズとすることが定められている。MPSは、たとえば、ホストメモリ22のメモリブロックのサイズと一致するように規定され得る。MPSは、たとえば512(2の9乗)バイトである。一方で、TLPによって送信されるデータは、ホストアクセス境界と一致してホストメモリ22に格納されるとは限らない
たとえばTLPによって送信されるデータが、2つのメモリブロック(第1のメモリブロックと第2のメモリブロックとする)の境界を跨いでホストメモリ22に格納される場合を想定する。この場合、メモリコントローラ23は、TLPによって新たに送信されたデータをホストメモリ22に格納するのに、第1のメモリブロックに対する書き込みと、第2のメモリブロックに対する書き込みとの、2回の書き込みを行わなければならない。また、メモリコントローラ23は、第1のメモリブロックにすでに格納されているデータを読み出し、TLPによって新たに送信されたデータと合わせて、第1のメモリブロックに対するECCパリティを生成し直さなければならない。したがって、TLPによって新たに送信されたデータをメモリコントローラ23がホストメモリ22に書き込むときに、オーバーヘッドが生じてしまう。
実施形態のメモリシステム1は、ホスト2から指定されたホストメモリアドレスがホストアクセス境界と異なる場合において、TLPによるホスト2への効率的なリードデータの送信を行うものである。より詳しくは、メモリシステム1は、TLPでホスト2へ送信するリードデータについて、ホストアクセス境界へのアドレスアラインを保証する仕組みを備えたものである。以下、この点について詳述する。
図2は、実施形態のメモリシステム1におけるホストインターフェース制御部32の一構成例を示す図である。
図2に示すように、ホストインターフェース制御部32は、データバッファ41、リードコントローラ42、アドレス管理テーブル43、プロトコル変換部44およびプールバッファ45を有する。
アドレス管理テーブル43は、ホスト2から発行されたリードコマンドで指定されるホストメモリアドレスを管理するテーブルである。アドレス管理テーブル43は複数のエントリを有する。各エントリには、1つのリードコマンドで指定されるホストメモリアドレスのリスト(PRP/SGL)が保持される。各エントリには、複数のPRP/SGLが保持されてもよい。アドレス管理テーブル43のエントリの最大数は、メモリシステム1がキューイング可能なリードコマンド数である。
データバッファ41は、NAND制御部33から送られてくるリードデータ(b1)を一時的に格納するバッファである。データバッファ41は、たとえば、コントローラ11内のSRAM(図示せず)に設けられる。データバッファ41は、リードデータを格納すると、その旨をリードコントローラ42に通知する(b2)。また、データバッファ41は、リードデータをプロトコル変換部44に送信する(b3)。
リードコントローラ42は、リードデータのホスト2への送信を制御する制御装置である。リードコントローラ42は、データバッファ41からの通知を契機として、データバッファ41に格納されたリードデータをホスト2へ送信するための処理を開始する。リードコントローラ42は、アドレス管理テーブル43から、リードデータの格納先としてホスト2から指定されているホストメモリアドレスを取得する(b4)。リードコントローラ42は、ホスト2へのリードデータの送信を要求するリクエストをプロトコル変換部44に送信する(b5)。このリクエストは、アドレス管理テーブル43から取得したホストメモリアドレスを当該リードデータの格納先として指定する。
より詳しくは、リードコントローラ42は、複数のリクエスト(b5)を順次プロトコル変換部44に送信する。複数のリクエストの各々は、ホストメモリアドレスとデータサイズとを指定し、データバッファ41から送られてくるリードデータ(b3)を当該データサイズ分ホスト2へ送信することを要求する。ここで指定されるデータサイズは、MPS以下である。これにより、MPS以下の長さのTLPでリードデータをホスト2へ送信することが可能となる。
プロトコル変換部44は、リードコントローラ42から送られてくるリクエストを、PHY31が受信可能なプロトコルへ変換する処理装置である。符号b7Aは、リードコントローラ42から送られてくるリクエスト(b5)に対応するコマンドを示している。符号b7Bは、データバッファ41から送られてくるリードデータ(b3)に対応し、かつ、符号b7Aで示されるコマンドの処理対象となっているリードデータを示している。
プロトコル変換部44から出力されるコマンド(b7A)とデータ(b7B)とは、リードコントローラ42から送られてくるリクエスト(b5)で指定されているホストメモリアドレスとデータサイズとに基づいて生成されている。つまり、コマンド(b7A)には、リクエスト(b5)で指定されているホストメモリアドレスが指定されており、データ(b7B)は、リクエスト(b5)で指定されているデータサイズを有する。
リードコントローラ42は、アドレス管理テーブル43から取得したホストメモリアドレスに基づき、プロトコル変換部44へ送信するリクエスト(b5)で指定するホストメモリアドレスとデータサイズとを決定する。アドレス管理テーブル43から取得されるホストメモリアドレスは、ホスト2がPRP/SGLに格納したホストメモリアドレスである。ホスト2(より詳しくはCPU21)は、たとえばホストメモリ22(データバッファ22A)の空き状況に応じて、ホストメモリアドレスを決定する。一方で、ホスト2がPRP/SGLに格納した最初のホストメモリアドレス、つまり、リードデータの格納先となるホストメモリ22内の空き領域の先頭位置を示すホストメモリアドレスは、ホストアクセス境界(すなわちメモリコントローラ23によるアクセスの単位)と一致しているとは限らない。
プールバッファ45は、たとえば、プロトコル変換部44から送られてくるコマンド(b7A)で指定されているホストメモリアドレスが、ホストアクセス境界と異なっている場合において、ホストアクセス境界とのアドレスアラインを保証するように、当該コマンド(b7A)およびリードデータ(b7B)を再構成する。プールバッファ45は、これらコマンド(b7A)およびリードデータ(b7B)の再構成を制御する制御回路45Aを有する。符号b7A´は、制御回路45Aによって再構成されたコマンドを示している。符号b7B´は、制御回路45Aによって再構成されたリードデータを示している。
図3は、メモリシステム1からのデータの読み出しに関わる取り扱い単位を示す図である。符号a1と符号a4とは、図1の符号a1と符号a4とに相当する。
たとえばオペレーティングシステムを実行しているCPU21は、メモリシステム1に対して、セクターサイズの整数倍のサイズでデータを読み出すためのコマンドを発行する(a1)。上述したように、セクターサイズはたとえば520バイトである。一方、メモリシステム1は、ホスト2からのコマンドに応じてNANDメモリ12から読み出したデータを、MPSが規定されているTLP単位でホスト2へ送信する(a4)。上述したように、MPSは、たとえば、ホストメモリ22のメモリブロックのサイズと一致するように規定される。メモリブロックのサイズは、たとえば512バイトである。
メモリシステム1からホスト2へTLPで送信されるデータは、当該TLPに含まれるホストメモリアドレスで示されるホストメモリ22(データバッファ22A)の位置に格納される。メモリコントローラ23は、メモリシステム1からのデータが格納されたデータバッファ22Aに対して、メモリブロック単位でアクセスする(c1)。
続いて、図4を参照して、ホスト2が16セクター分のデータをメモリシステム1から読み出す一例を説明する。符号c11は、ホストメモリ22の第1区画(セクター)を示す。符号12は、ホストメモリ22の第2区画(メモリブロック)を示す。
図4に示す例では、リードコマンドの発行時、ホストメモリ22(データバッファ22A)内に、16セクター分の連続した空き領域が存在しなかったため、CPU21は、8セクター分の空き領域を2つ(d1、d2)を組み合わせて、リードデータの格納先として指定したものと想定する。領域d1は、ホストメモリアドレス「0x1040」からホストメモリアドレス「0x2080」までの8セクター(520×8=4160バイト)分のサイズを有する。「0xNNNN」は16進数を示す。また、以降、特に断りがない限り、16進数で表されるアドレスは、バイトアドレスとする。すなわち、アドレス0x0で示される位置とアドレス0x1で示される位置との間には、1バイトのデータが格納される。領域d2は、ホストメモリアドレス「0x30C0」からホストメモリアドレス「0x4100」までの8セクター(520×8=4160バイト)分のサイズを有する。リードデータの前半8セクター分の格納先が領域d1であり、後半8セクター分の格納先が領域d2である。この場合、領域d1用と領域d2用との2つのPRP/SGLが作成される。各PRP/SGLには、各領域の先頭を示すホストメモリアドレスを含む複数のホストメモリアドレスが格納される。
領域d1の先頭位置を示すホストメモリアドレス「0x1040」は、512バイト(0x0200)毎の第2境界(ホストアクセス境界)とアラインしていない。よって、ホストメモリアドレス「0x1040」から配置される複数の第1区画(セクター)は、ホストアクセス境界を跨ぐ。図4では、ホストメモリアドレス「0x1040」から配置される3つの第1区画(セクター)が、ホストアクセス境界(0x1200、0x1400、0x1600)を跨ぐ例が示されている。同様に、領域d2の先頭位置を示すホストメモリアドレス「0x30C0」も、512バイト(0x0200)毎の第2境界(ホストアクセス境界)とアラインしていない。よって、ホストメモリアドレス「0x30C0」から配置される複数の第1区画(セクター)は、ホストアクセス境界を跨ぐ。図4では、ホストメモリアドレス「0x30C0」から配置される3つの第1区画(セクター)が、ホストアクセス境界(0x3200、0x3400、0x3600)を跨ぐ例が示されている。
ここで、ホスト2へのリードデータの送信に関する比較例を説明する。比較例にかかるメモリシステムのホストインターフェース制御部は、プールバッファを有しない。
図5は、比較例のメモリシステムがリードデータをTLPでホスト2へ送信する一例を示す図である。なお、図5には、領域d1を格納先とするTLPの一送信例が示されている。(A)は、ホストメモリ22上のホストメモリアドレス「0x1000」から配置されるメモリブロック群を示している。メモリブロック群の中の1番目のメモリブロック[0]はホストメモリアドレス「0x1000」から配置される。メモリブロック群の中の2番目のメモリブロック[1]はホストメモリアドレス「0x1200」から配置される。メモリブロック群の中の3番目のメモリブロック[2]はホストメモリアドレス「0x1400」から配置される。メモリブロック群の中の4番目のメモリブロック[3]はホストメモリアドレス「0x1600」から配置される。データ保護のために、符号f1で示されるメモリブロックの単位で、ECCパリティが生成される場合がある。
ここでは、MPSが、第2区画(メモリブロック)のサイズである512バイトに規定されていることを想定している。比較例のホストインターフェース制御部は、領域d1に格納する4160バイトのリードデータを、未送信のデータの残量がMPS(512バイト)以上である場合は常に、MPSずつTLPに含めてホスト2へ送信する。したがって、比較例のホストインターフェース制御部は、まず、領域d1の先頭のホストメモリアドレス「0x1040」を含む、512バイト分のリードデータを含んだTLP#0を送信する(B1)。
(B1)に示すように、1つ目のTLP#0には、メモリブロック[0]の「0x1040」の位置から448バイト分と、メモリブロック[1]の先頭である「0x1200」の位置から64バイト分との合計512バイトのリードデータが含まれている。メモリブロックの単位でECCパリティが生成される場合、ホスト2のメモリコントローラ23は、メモリブロック[0]の先頭である「0x1000」の位置から64バイト分の既に格納されているデータを取得し、当該取得した64バイト分のデータと、TLP#0で受け取った448バイト分のリードデータとを組み合わせて、メモリブロック[0]に格納される512バイトのデータを対象として、ECCパリティを生成する。
比較例のホストインターフェース制御部は、続いて、格納先のホストメモリアドレス「0x1240」を含む、513バイト目から512バイト分のリードデータを含んだTLP#1を送信する(B2)。(B2)に示すように、TLP#1には、メモリブロック[1]の「0x1240」の位置から448バイト分と、メモリブロック[2]の先頭である「0x1400」の位置から64バイト分との合計512バイトのデータが含まれている。メモリブロック[0]の場合と同様、ホスト2のメモリコントローラ23は、メモリブロック[1]の先頭である「0x1200」の位置から64バイト分の既に格納されているデータを取得し、当該取得した64バイト分のデータと、TLP#1で受け取った448バイト分のデータとを組み合わせて、メモリブロック[1]に格納される512バイトのデータを対象として、ECCパリティを生成する。
比較例のホストインターフェース制御部は、さらに続いて、格納先のホストメモリアドレス「0x1440」を含む、1025バイト目から512バイト分のリードデータを含んだTLP#2を送信する(B3)。(B3)に示すように、TLP#2には、メモリブロック[2]の「0x1440」の位置から448バイト分と、メモリブロック[3]の先頭である「0x1600」の位置から64バイト分との合計512バイトのデータが含まれている。メモリブロック[0]およびメモリブロック[1]の場合と同様、ホスト2のメモリコントローラ23は、メモリブロック[2]の先頭である「0x1400」の位置から64バイト分の既に格納されているデータを取得し、当該取得した64バイト分のデータと、TLP#2で受け取った448バイト分のデータとを組み合わせて、メモリブロック[2]に格納される512バイトのデータを対象として、ECCパリティを生成する。
比較例のホストインターフェース制御部は、同様に、TLP#3~TLP#8をホスト2へ送信する。TLP#8に含まれるリードデータのサイズは、64(520×8-512×8)バイトである。
図5(C)は、比較例のホストインターフェース制御部によって、領域d1(図4参照)に8セクター分のリードデータを格納するためにホスト2へ送信されるTLPの一覧を示している。ホストメモリ22の第2境界(ホストアクセス境界)は、512(0x0200)バイト毎に設けられているので、TLP#0~TLP#7でそれぞれ送られる512バイトのリードデータおよびTLP#8で送られる64バイトのリードデータは、第2境界を跨ぐ。
このように、比較例のホストインターフェース制御部では、ホスト2がPRP/SGLで指定するホストメモリアドレスがホストメモリ22の第2境界(ホストアクセス境界)とアラインしていない場合、多くのTLPで送られるデータが第2境界を跨ぐ。多くのTLPで送られるデータが第2境界を跨ぐ場合、たとえばECCパリティの生成時にオーバーヘッドを多く生じさせてしまう可能性がある。
次に、図6を参照して、実施形態のホストインターフェース制御部32がリードデータをTLPでホスト2へ送信する一例を説明する。なお、図6も、領域d1(図4参照)を格納先とするTLPの一送信例を示している。また、前述の比較例と同様、(A)は、ホストメモリ22上のホストメモリアドレス「0x1000」から配置されるメモリブロック群を示している。
実施形態のホストインターフェース制御部32は、まず、領域d1の先頭のホストメモリアドレス「0x1040」を含み、かつ、ホストメモリアドレス「0x1040」から第2境界までのサイズに対応する、448バイト分のリードデータを含んだTLP#0を送信する(B1)。ホストインターフェース制御部32は、たとえば当該TLP#0に含ませるリードデータのサイズを、512バイトではなく448バイトとする。詳細ついては後述する。
(B1)に示すように、1つ目のTLP#0には、メモリブロック[0]の「0x1040」の位置から448バイト分のリードデータが含まれている。メモリブロック[0]については、ホスト2のメモリコントローラ23は、比較例と同様、メモリブロック[0]の先頭である「0x1000」の位置から64バイト分の既に格納されているデータを取得し、当該取得した64バイト分のデータと、TLP#0で受け取った448バイト分のリードデータとを組み合わせて、メモリブロック[0]に格納される512バイトのデータを対象として、ECCパリティを生成する。
ホストインターフェース制御部32は、続いて、格納先のホストメモリアドレス「0x1200」を含む、449バイト目から512バイト分のリードデータを含んだTLP#1を送信する(B2)。(B2)に示すように、TLP#1には、メモリブロック[1]の先頭である「0x1200」の位置から512バイトのデータが含まれている。メモリブロック[1]については、ホスト2のメモリコントローラ23は、TLP#1で受け取ったデータのみで、ECCパリティを生成することができる。
ホストインターフェース制御部32は、さらに続いて、格納先のホストメモリアドレス「0x1400」を含む、961バイト目から512バイト分のリードデータを含んだTLP#2を送信する(B3)。(B3)に示すように、TLP#2には、メモリブロック[2]の先頭である「0x1400」の位置から512バイトのデータが含まれている。メモリブロック[2]についても、ホスト2のメモリコントローラ23は、TLP#2で受け取ったデータのみで、ECCパリティを生成することができる。
実施形態のホストインターフェース制御部32は、同様に、TLP#3~TLP#8をホスト2へ送信する。TLP#8に含まれるリードデータのサイズは、128(520×8-448-512×7)バイトである。
図6(C)は、実施形態のホストインターフェース制御部32によって、領域d1(図4参照)に8セクター分のリードデータを格納するためにホスト2へ送信されるTLPの一覧を示している。TLP#0で送られる448バイトのリードデータは、ホスト2から指定されたホストメモリアドレス「0x1040」から格納されるため、先頭はホストメモリ22の第2境界(ホストアクセス境界)とアラインしていないが(符号f2)、末尾は第2境界とアラインする。TLP#1~TLP#7でそれぞれ送られる512バイトのリードデータは、先頭および末尾の両方が第2境界とアラインする。TLP#8で送られる128バイトのリードデータは、先頭が第2境界とアラインする。
このように、実施形態のホストインターフェース制御部32では、ホスト2がPRP/SGLで指定するホストメモリアドレスがホストメモリ22の第2境界(ホストアクセス境界)とアラインしていない場合であっても、TLPでホスト2へ送信するリードデータについて、ホストアクセス境界とのアドレスアラインを保証する。
図7は、プールバッファ45の一構成例を示す図である。
プールバッファ45は、図2に示した制御回路45Aのほか、バッファ部52を有する。制御回路45Aは、プール入力制御部51と、プール出力制御部53とを含む。
プール入力制御部51は、プロトコル変換部44から送られてくるコマンド(b7A)およびデータ(b7B)の入力を制御する制御装置である。コマンド(b7A)には、ホストメモリアドレスのほか、データ長や、リードデータ(b7B)を要求するリードコマンドを識別可能な識別情報が含まれている。プール入力制御部51は、コマンド(b7A)で示されている、リードコマンドの識別情報、ホストメモリアドレスおよびデータ長に基づき、リードデータ(b7B)をバッファ部52に格納する。
バッファ部52は、複数のエントリ(プールバッファエントリ)を有するバッファである。バッファ部52は、たとえば、コントローラ11内のSRAM(図示せず)に設けられる。プールバッファエントリの数は、メモリシステム1が一時にキューイング可能なリードコマンドの数以上である。各プールバッファエントリのサイズは、MPSと等しい。バッファ部52を構成するSRAMは、メモリシステム1がサポート可能な最大のMPSに対応するプールバッファのエントリを格納可能な容量を有する。各リードコマンドは、いずれか1つのエントリに関連付けられる。リードコマンドに応じてNANDメモリ12から読み出され、TLPによってホスト2へ送信されるリードデータは、プールバッファエントリを経由することで、ホストアクセス境界とのアドレスアラインが保証されたサイズに揃えられる。
バッファ部52にリードデータ(b7B)を格納するブール入力制御部51は、コマンド(b7A)で示されるリードコマンドの識別情報に基づき、まず、バッファ部52のプールバッファエントリを特定する。次に、ブール入力制御部51は、コマンド(b7A)で示されるホストメモリアドレスに基づき、特定したプールバッファエントリでのリードデータ(b7B)の格納位置を決定する。ブール入力制御部51は、たとえば、TLPによって送信されるリードデータが格納されるべきホストメモリアドレスの、下位9ビットで示されるアドレスを、プールバッファエントリにおけるリードデータの格納位置として決定する。すなわち、プール入力制御部51は、プールバッファエントリの先頭から、ホストメモリアドレスの下位9ビットで示されるアドレス分、オフセットした位置に、リードデータを格納する。たとえば、ホストメモリアドレスが「0x1040」である場合、ブール入力制御部51は、プールバッファエントリの、先頭から「0x0040」バイト分オフセットした位置からデータ(b7B)を格納する。
図7において、データ[N-M]は、識別情報がNであるリードコマンドについての、M番目のコマンド(b7A)によって要求されるリードデータ(b7B)であることを示す。あるリードコマンドNについて複数のコマンド(b7A)がプロトコル変換部44から送信され得るが、この場合、Mの値が0から1ずつインクリメントされていく。また、lastは、あるリードコマンドNについてプロトコル変換部44から送られてくる最後のコマンド(b7A)であることを示している。つまり、コマンド(b7A)には、さらに、最後のコマンドであるか否かを示す情報も含まれている。以下、last=0は最後のコマンド(b7A)ではないことを示し、last=1が最後のコマンド(b7A)であることを示す場合がある。
図7に示す例では、プールバッファエントリ0に、リードコマンド0についての、1番目のコマンド(b7A)によって要求されるリードデータ(b7B)であるデータ[0-1]と、2番目のコマンド(b7A)によって要求されるリードデータ(b7B)であるデータ[0-2]が格納されている。データ[0-1]と、[0-2]のいずれも、last=0である。また、プールバッファエントリ1に、リードコマンド1についての、1番目のコマンド(b7A)によって要求されるリードデータ(b7B)であるデータ[1-1]が格納されている。データ[1-1]は、last=0である。さらにまた、プールバッファエントリ2に、リードコマンド2についての、1番目のコマンド(b7A)によって要求されるリードデータ(b7B)であるデータ[2-1]が格納されている。データ[2-1]は、last=1である。
プール出力制御部53は、バッファ部52の各プールバッファエントリに格納されたデータ(b7B)を、一定の条件の下、ホスト2への送信対象としてPHY31に送信する。その際、プール出力制御部53は、コマンド(b7A)とデータ(b7B)とを再構成し、コマンド(b7A´)とデータ(b7B´)とを生成する。
次に、プールバッファ45の基本動作について説明する。
図8は、プールバッファ45の基本動作の第1例を示す図である。
第1例は、ホスト2から指定されたホストメモリアドレスがホストアクセス境界とアラインしている場合である。
プールバッファ45には、まず、コマンドおよびデータ[0-1]が入力される。このコマンドが指定する、このデータ[0-1]が格納されるべきホストメモリのアドレスは、ホストアクセス境界とアラインしている。プールバッファ45に入力されるコマンドには、リードコマンドの識別情報(ここでは0)が含まれている。制御回路45Aは、あるリードコマンドに対応するリードデータが最初に入力されたとき、いずれかのプールバッファエントリを当該リードコマンドに割り当てる(A)。具体的には、コマンドに含まれるリードコマンドの識別情報が割り当てられているプールバッファエントリが存在しない場合、制御回路45Aは、いずれのリードコマンドにも割り当てられていないプールバッファエントリを割り当てる。制御回路45Aは、コマンドで指定されているホストメモリアドレスに基づき、当該割り当てたプールバッファエントリ内にリードデータを格納する(B)。なお、上述のように、プールバッファ45に入力されるコマンドには、そのリードコマンドに対する最後のコマンドであるか否かを示す情報も含まれている。最後のコマンドのリードデータに関する処理が完了したとき、制御回路45Aは、該当のプールバッファエントリを解放する。
上述のように、制御回路45Aは、ホストメモリアドレスの下位9ビットで示されるアドレスを、プールバッファエントリにおけるリードデータの格納位置として決定する。ここでは、データ[0-1]が格納されるべきホストメモリアドレスが、たとえば0x1000であるものとする。この場合、データ[0-1]は、プールバッファエントリの先頭から格納される。
プールバッファ45に入力されるコマンドには、リードデータのサイズも含まれている。したがって、制御回路45Aは、このリードデータに連続するリードデータが存在する場合、後続のリードデータの格納位置を示すホストメモリアドレスも算出することができる。
2つ目のコマンドおよびデータ[0-2]が入力されると、制御回路45Aは、コマンドに含まれるリードコマンドの識別情報(ここでは0)に基づき、このデータ[0-2]を格納するプールバッファエントリを特定する。プールバッファエントリを特定すると、プールバッファ45は、データ[0-1]の格納時に算出された後続のリードデータの格納位置を示すホストメモリアドレスと、データ[0-2]が格納されるべきホストメモリアドレスとを比較する。両者が一致する場合、制御回路45Aは、データ[0-2]は、データ[0-1]に連続するリードデータであると判定する。データ[0-2]がデータ[0-1]に連続するリードデータである場合、制御回路45Aは、データ[0-1]に繋げるようにデータ[0-2]をプールバッファエントリに格納する(C)。制御回路45Aは、データ[0-1]を格納したときと同様、後続のリードデータの格納位置を示すホストメモリアドレスを算出する。
3つ目のコマンドおよびデータ[0-3]が入力された場合も、制御回路45Aは、コマンドに含まれるリードコマンドの識別情報(ここでは0)に基づき、リードデータを格納するプールバッファエントリを特定する。また、制御回路45Aは、データ[0-2]の格納時に算出された後続のリードデータの格納位置を示すホストメモリアドレスと、データ[0-3]が格納されるべきホストメモリアドレスとを比較する。両者が一致する場合、制御回路45Aは、データ[0-3]は、データ[0-2]に連続するリードデータであると判定する。データ[0-3]がデータ[0-2]に連続するデータである場合、制御回路45Aは、データ[0-3]が格納されるべきホストメモリアドレスに基づき、データ[0-2]に繋げるように、データ[0-3]をプールバッファエントリに格納する(D)。
前述したように、プールバッファ45に入力されるコマンドには、リードデータのサイズも含まれている。したがって、制御回路45Aは、ホストメモリアドレスに基づいてリードデータをプールバッファエントリに格納しようとする場合、そのリードデータがプールバッファエントリに収まるか否かを判定することができる。ここでは、データ[0-3]がプールバッファエントリに収まらないものとする。データ[0-3]がプールバッファエントリに収まらない場合、制御回路45Aは、まず、プールバッファエントリに収まるサイズ分のデータ[0-3]の一部をプールバッファエントリに格納する。この時点で、プールバッファエントリには、データ[0-1]の先頭からデータ[0-3]の途中までの、MPS分のリードデータが格納されたことになる。制御回路45Aは、このMPS分のリードデータを一括して送信するためのコマンドを生成し、当該コマンドおよびリードデータをPHY31へ出力する。
次に、制御回路45Aは、プールバッファエントリに収まらなかったデータ[0-3]の残りの部分の先頭に相当するホストメモリアドレスを算出する。制御回路45Aは、当該算出したホストメモリアドレスに基づき、データ[0-3]の残りの部分をプールバッファエントリに格納する。データ[0-3]の残りの部分は、プールバッファエントリの先頭から格納される(E)。
以降、最後のコマンドが入力されるまで、リードデータをMPS分纏めて、当該MPS分のリードデータを一括して送信するためのコマンドを生成して出力する動作が繰り返される。最後のコマンドが入力された場合は、そのコマンドに対応するリードデータと、プールバッファエントリに格納されているリードデータとの合計サイズがMPSに達していなかったとしても、制御回路45Aは、これらのリードデータを一括して送信するためのコマンドを生成してPHY31へ出力する。
このように、プールバッファ45は、たとえば、複数のコマンドで入力されてくる、ホストメモリアドレスが連続するリードデータを、プールバッファエントリに格納することによってMPS分纏め、当該MPS分のリードデータを1つのコマンドでPHY31へ出力する。
図9は、プールバッファ45の基本動作の第2例を示す図である。
第2例は、ホスト2から指定されたホストメモリアドレスがホストアクセス境界とアラインしていない場合である。
第2例では、ホストアクセス境界とアラインしていないホストメモリアドレスが指定されたコマンドおよびデータ[1-1]が入力される。制御回路45Aは、まず、プールバッファエントリの割り当てを行う(A)。制御回路45Aは、データ[1-1]が格納されるべきホストメモリアドレスに基づき、当該割り当てたプールバッファエントリ内にデータ[1-1]を格納する(B)。
制御回路45Aは、単純に、プールバッファエントリの先頭からデータを格納していくのではなく、ホストメモリアドレスに基づき、メモリブロック内の位置に対応するプールバッファエントリ内の位置からリードデータを格納していく。ここでは、データ[1-1]が格納されるべきホストメモリアドレスが、0x1040であるものとする。この場合、データ[1-1]は、プールバッファエントリの先頭から0x040バイトだけオフセットした位置(g1)から格納される。このように、ホスト2から指定されたホストメモリアドレスがホストアクセス境界とアラインしていない場合、制御回路45Aは、プールバッファエントリの途中からリードデータを格納していく。
2つ目のコマンドおよびデータ[1-2]が入力されると、制御回路45Aは、このデータ[1-2]を格納するプールバッファエントリを特定する。また、制御回路45Aは、このデータ[1-2]がデータ[1-1]に連続するリードデータであるか否かを判定する。連続するリードデータである場合、制御回路45Aは、データ[1-1]に繋げるようにデータ[1-2]をプールバッファエントリに格納する(C)。
3つ目のコマンドおよびデータ[1-3]が入力された場合も、制御回路45Aは、このデータ[1-3]を格納するプールバッファエントリを特定する。また、制御回路45Aは、このデータ[1-3]がデータ[1-2]に連続するリードデータであるか否かを判定する。連続するリードデータである場合、制御回路45Aは、データ[1-2]に繋げるようにデータ[1-3]をプールバッファエントリに格納する(D)。
ここで、制御回路45Aがホストメモリアドレスに基づいてプールバッファエントリにデータ[1-3]を格納しようとする場合、データ[1-3]はプールバッファエントリに収まらないものとする。制御回路45Aは、まず、プールバッファエントリに収まるサイズ分のデータ[1-3]の一部をプールバッファエントリに格納し、その時点でプールバッファエントリに格納されているリードデータを一括して送信するためのコマンドを生成し、当該コマンドおよびリードデータをPHY31へ出力する。
このときに出力されるリードデータのサイズは、MPSに満たないサイズであり、かつ、このデータの先頭に対応するホストメモリアドレスは、ホスト2から指定されたホストメモリアドレスである。このホストメモリアドレスは、ホストアクセス境界とアラインしていない。しかし、このリードデータの末尾に対応するホストメモリアドレスは、ホストアクセス境界とアラインする。
また、プールバッファエントリに収まらなかったデータ[1-3]の残りの部分は、プールバッファエントリの先頭から格納される(E)。そして、後続のリードデータは、プールバッファエントリを介して、MPS分ずつ纏められて出力される。つまり、以降は、ホストアクセス境界とのアラインを保証しながら、コマンドおよびリードデータが生成される。
このように、実施形態のメモリシステム1は、ホスト2から指定されたホストメモリアドレスがホストアクセス境界とアラインしない場合でも、ホストアクセス境界とのアラインを保証することができる。
図10は、プールバッファ45の基本動作の第3例を示す図である。
第3例は、非連続のリードデータが検出された場合である。非連続のリードデータとは、コマンドで指定されているホストメモリアドレスが、直前のリードデータの格納時に算出された、後続のリードデータの格納位置を示すホストメモリアドレスと一致していないリードデータである。
図10には、1つ目のコマンドのデータ[2-1]と2つ目のコマンドのデータ[2-2]とがプールバッファエントリに格納された後((A)~(C))、3つ目のコマンドで指定されている、データ[2-3]が格納されるべきホストメモリアドレスが、データ[2-2]の格納時に算出された、後続のリードデータの格納位置を示すホストメモリアドレスと一致していない場合が示されている(D)。符号g2は、データ[2-3]が格納されるべきホストメモリアドレスから算出される、データ[2-3]を格納すべきプールバッファエントリ内の位置を示している。
非連続のリードデータを検出した場合、制御回路45Aは、プールバッファエントリに格納されているリードデータのサイズがMPS未満でも、その時点でプールバッファエントリに格納されているリードデータを一括して送信するためのコマンドを生成してPHY31へ出力する。図10に示す例の場合、制御回路45Aは、データ[2-1]とデータ[2-2]とを一括して送信するためのコマンドを生成してPHY31へ出力する。その後、データ[2-3]は、プールバッファエントリ内の符号g2で示される位置に格納される。
これにより、ホストメモリ22上の非連続の複数の領域に格納されるリードデータについては、MPS分ずつ纏めるためにプールバッファエントリを経由させても、ホストメモリ22上の異なる領域を格納先とするデータが1つのTLPに纏められてしまうことがない。
非連続のリードデータが入力される例としては、たとえば図4に示したように、ホスト2がホストメモリ22上の非連続の複数の領域をリードデータの格納先とする場合である。たとえば、リードコントローラ42がアドレス管理テーブル43から取得するホストメモリアドレスが、あるPRP/SGLに格納されているホストメモリアドレスから別のPRP/SGLに格納されているホストメモリアドレスへと切り替わるタイミングで非連続のリードデータが入力される。
図11は、プールバッファ45の基本動作の第4例を示す図である。
第4例は、最後のコマンドが検出された場合である。最後のコマンドとは、最後のコマンドであるか否かを示すコマンドに含まれる情報が、最後のコマンドであることを示すコマンドである。
図11には、1つ目のコマンドのデータ[3-1]と2つ目のコマンドのデータ[3-2]とがプールバッファエントリに格納された後((A)~(C))、3つ目のコマンドが最後のコマンドである場合が示されている(D)。符号h1で示すlast=1は、3つ目のコマンドが最後のコマンドであることを示している。
最後のコマンドを検出した場合、制御回路45Aは、プールバッファエントリに格納されているリードデータのサイズがMPS未満でも、その時点でプールバッファエントリに格納されているリードデータを一括して送信するためのコマンドを生成してPHY31へ出力する。図11に示す例の場合、制御回路45Aは、データ[3-1]とデータ[3-2]と、3つ目のコマンド(最後のコマンド)のデータ[3-3]とを一括して送信するためのコマンドを生成してPHY31へ出力する。
これにより、たとえば、プールバッファエントリに格納されているリードデータのサイズがMPSに達しないことに起因して、リードデータの最後部がいつまでもプールバッファエントリに滞留してしまうようなことがない。
次に、プールバッファ45の例外動作について説明する。
図12および図13は、プールバッファ45の例外動作の第1例を示す図である。
プールバッファ45に入力されるコマンドの中には、SGL Bit Bucket属性、Verify属性、Error属性などの属性を持つものが存在する。
SGL Bit Bucket属性は、ホスト2からのリードコマンドでNANDメモリ12から読み出されるリードデータの中で、ホスト2から不要であることが指定されているデータに対応するコマンドが持つ属性である。たとえば、ホスト2は、NANDメモリ12上の非連続の複数の領域に格納されているデータを読み出す場合、当該複数の領域のそれぞれを対象とする複数のリードコマンドを発行することができる。一方で、ホスト2は、当該複数の領域を包含する1つの領域を対象として1つのリードコマンドを発行し、かつ、当該複数の領域間の領域のデータは不要であることを指定することもできる。SGL Bit Bucket属性は、1つのリードコマンドにおいて指定される領域にかかるリードデータのうち、不要な部分として指定されたリードデータに対応するコマンドが持つ属性である。SGL Bit Bucket属性を有するコマンドのリードデータは、ホスト2へは送信されない。
Verify属性は、データの正当性をチェックするためにホスト2が発行するコマンドによってNANDメモリ12から読み出されたリードデータに対応するコマンドが持つ属性である。Verify属性を有するコマンドのリードデータは、ECCパリティによって正当性がチェックされるが、ホスト2へは送信されない。
Error属性は、ホスト2からのリードコマンドでNANDメモリ12から読み出されたリードデータのうち、ECCパリティで訂正不可能だったエラーを含むリードデータに対応するコマンドが持つ属性である。Error属性を有するコマンドのリードデータは、ホスト2へは送信されない。
SGL Bit Bucket属性、Verify属性またはError属性を持つコマンドのリードデータは、いずれも、ホスト2への送信が不要である。ホストインターフェース制御部32は、プールバッファ45から出力されたコマンドおよびリードデータのうち、これらの属性を持つコマンドおよびリードデータを破棄するためのセレクタ46を有する。
SGL Bit Bucket属性、Verify属性またはError属性を持つコマンドおよびそのリードデータは、セレクタ46によって破棄される。よって、制御回路45Aは、これらの属性を持つコマンドのリードデータについては、MPS分纏めるためにプールバッファエントリ内に止めるといった処理を行わず、直ちにプールバッファエントリから出力する。
図12および図13には、Verify属性を持つコマンドが入力された場合が示されている。図12は、Verify属性を持つコマンド、およびMPSよりも長いデータ[4-1]が入力された例を示している。一方、図13は、Verify属性を持つコマンド、およびMPSよりも短いデータ[5-1]が入力された例を示している。Verify属性を持つコマンドが入力された場合、制御回路45Aは、このコマンドのデータ[4-1](図12)、[5-1](図13)に対して前述したような処理を行うことなくプールバッファエントリを通過させ、データ[4-1]、[5-1]を直ちにプールバッファエントリから出力する。プールバッファエントリから出力されたデータ[4-1]、[5-1]は、セレクタ46によってPHY31へ出力されない。すなわち、データ[4-1]、[5-1]は、破棄される。SGL Bit Bucket属性を持つコマンドや、Error属性を持つコマンドが入力された場合も同様である。
つまり、Verify属性、SGL Bit Bucket属性またはError属性を持つコマンドのリードデータの場合、制御回路45Aは、MPSよりも長いデータについて、MPSで区切るといった処理を行わず、また、MPSよりも短いデータについて、MPS分纏めるといった処理を行わない。
これにより、ホスト2へ送信されないデータのために、制御回路45Aが前述したような処理を無駄に行うことがない。
図14は、プールバッファ45の例外動作の第2例を示す図である。
第2例は、SGL Bit Bucket属性、Verify属性、Error属性などの属性を持たない通常のコマンドおよびリードデータが入力されて、このリードデータがプールバッファエントリに格納されている状態で(図14(A)、(B))、Verify属性を持つコマンドが入力された場合である。
この場合、制御回路45Aは、まず、プールバッファエントリに格納されているリードデータのサイズがMPS未満でも、その時点でプールバッファエントリに格納されているリードデータを一括して送信するためのコマンドを生成して出力する(C)。この出力後、制御回路45Aは、Verify属性を持つコマンドおよびリードデータを出力する。SGL Bit Bucket属性を持つコマンドや、Error属性を持つコマンドが入力された場合も同様である。
図14に示す例では、通常のコマンドのデータ[6-1]が、プールバッファエントリに格納されている。データ[6-1]のサイズは、MPS未満である。この状態で、Verify属性を持つコマンドが入力された場合、制御回路45Aは、データ[6-1]を送信するためのコマンドを生成し、当該コマンド、およびデータ[6-1]を含むリードデータを、プールバッファエントリから出力する。プールバッファエントリから出力されたデータ[6-1]は、セレクタ46によってPHY31へ出力される。Verify属性を持つコマンドのデータ[6-2]については、図12および図13を参照して説明したように、セレクタ46によってPHY31へ出力されない。
これにより、たとえば、プールバッファエントリに既に格納されていた、ホスト2へ送信する必要があるリードデータと、ホスト2へ送信する必要がないリードデータとが、1つのTLPに纏められてしまうことがない。
以上のように、実施形態のメモリシステム1は、リードデータの格納先としてホスト2が指定するホストメモリアドレスがホストアクセス境界とアラインしていない場合でも、ホスト2へ送信するリードデータについて、ホストアクセス境界とのアドレスアラインを保証することができる。つまり、実施形態のメモリシステム1は、ホスト2への効率的なデータ送信を行うことができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…メモリシステム、2…ホスト、11…コントローラ、12…不揮発性メモリ(NANDメモリ)、21…CPU、22…ホストメモリ、22A…データバッファ、23…メモリコントローラ、31…PHY、32…ホストインターフェース制御部、33…NAND制御部、41…データバッファ、42…リードコントローラ、43…アドレス管理テーブル、44…プロトコル変換部、45…プールバッファ、45A…制御回路、46…セレクタ、51…プール入力制御部、52…バッファ部、53…プール出力制御部。

Claims (10)

  1. 不揮発性メモリと、
    ホストと通信可能であり、前記不揮発性メモリを制御するコントローラと、
    を具備し、
    前記ホストは、
    ホストメモリと、
    前記ホストメモリへ第1サイズ単位でアクセスを行う制御回路と、を含み、
    前記コントローラは、
    前記不揮発性メモリから読み出されたリードデータの前記ホストメモリへの格納位置として前記ホストから指定されたアドレスが、前記第1サイズ毎に定められる前記ホストメモリの境界とアラインしていない場合、
    前記アドレスで示される位置から前記境界までのサイズを有し、前記ホストメモリの前記アドレスで示される位置から格納されるべき前記リードデータを含む第1パケットを前記ホストへ送信した後、
    前記第1サイズを有し、前記境界の位置から格納されるべき前記リードデータを含む第2パケットを前記ホストへ送信する、
    メモリシステム。
  2. 前記第1サイズのデータを格納可能なバッファをさらに具備し、
    前記コントローラは、前記リードデータを格納する前記バッファの位置を前記アドレスに基づき算出し、前記リードデータを前記算出した前記バッファの前記位置に格納し、前記バッファの前記位置に格納された前記リードデータに基づいて前記第1パケットを生成する、
    請求項1に記載のメモリシステム。
  3. 前記コントローラは、前記バッファの先頭から前記アドレスの下位ビットに相当する分をオフセットした位置に、前記リードデータを格納する、
    請求項2に記載のメモリシステム。
  4. 前記コントローラは、複数の前記リードデータを前記バッファに順次格納していき、前記バッファの終端まで前記リードデータが格納された場合、前記バッファに格納されている前記複数のリードデータを前記バッファから出力する、
    請求項2に記載のメモリシステム。
  5. 前記コントローラは、前記バッファの途中まで前記リードデータが格納されている状態で、前記バッファに格納されているリードデータとは、前記ホストメモリの不連続な位置に格納されるべき前記リードデータが前記不揮発性メモリから読み出された場合、前記バッファに格納されている前記リードデータを前記バッファから出力する、
    請求項2に記載のメモリシステム。
  6. 前記コントローラは、前記リードデータの送信を要求する前記ホストからのリードコマンドに応じて前記不揮発性メモリから読み出された最後の前記リードデータが前記バッファに格納された場合、前記バッファに格納されている前記リードデータを前記バッファから出力する、
    請求項2に記載のメモリシステム。
  7. 前記コントローラは、前記バッファの途中まで前記リードデータが格納されている状態で、第1属性を有する前記リードデータが前記不揮発性メモリから読み出された場合、前記バッファに格納されている前記リードデータを前記バッファから出力した後、前記第1属性を有する前記リードデータを破棄する、
    請求項6に記載のメモリシステム。
  8. 前記第1属性を有する前記リードデータは、前記不揮発性メモリから読み出された前記リードデータの中の、前記ホストから不要な部分として指定されている部分である、
    請求項7に記載のメモリシステム。
  9. 前記第1属性を有する前記リードデータは、正当性のチェックを目的として前記不揮発性メモリから読み出された前記リードデータである、
    請求項7に記載のメモリシステム。
  10. 前記第1属性を有する前記リードデータは、前記不揮発性メモリから読み出された前記リードデータの中の、訂正不可能だったエラーを含む前記リードデータである、
    請求項7に記載のメモリシステム。
JP2021133367A 2021-08-18 2021-08-18 メモリシステム Pending JP2023027970A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2021133367A JP2023027970A (ja) 2021-08-18 2021-08-18 メモリシステム
US17/549,440 US11880592B2 (en) 2021-08-18 2021-12-13 Memory system adjusting packet size and method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021133367A JP2023027970A (ja) 2021-08-18 2021-08-18 メモリシステム

Publications (1)

Publication Number Publication Date
JP2023027970A true JP2023027970A (ja) 2023-03-03

Family

ID=85227704

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021133367A Pending JP2023027970A (ja) 2021-08-18 2021-08-18 メモリシステム

Country Status (2)

Country Link
US (1) US11880592B2 (ja)
JP (1) JP2023027970A (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11449272B1 (en) * 2021-03-09 2022-09-20 Micron Technology, Inc. Operation based on consolidated memory region description data

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6273664B2 (ja) 2012-08-31 2018-02-07 富士通株式会社 データ送信装置、およびデータ送信方法
BR112016011256B1 (pt) 2013-12-23 2022-07-05 Intel Corporation Método de processamento de dados desalinhados, meio legível por máquina, sistema e dispositivo informático
US10860449B2 (en) 2017-03-31 2020-12-08 Intel Corporation Adjustable retimer buffer
US10740000B2 (en) * 2018-03-08 2020-08-11 Western Digital Technologies, Inc. Adaptive transaction layer packet for latency balancing
US11061591B2 (en) * 2018-11-02 2021-07-13 Samsung Electronics Co., Ltd. Storage device processing stream data, system including the same, and operation method thereof
US11288199B2 (en) * 2019-02-28 2022-03-29 Micron Technology, Inc. Separate read-only cache and write-read cache in a memory sub-system

Also Published As

Publication number Publication date
US11880592B2 (en) 2024-01-23
US20230055882A1 (en) 2023-02-23

Similar Documents

Publication Publication Date Title
US9176673B2 (en) Memory device
US8843696B2 (en) Memory device and method of controlling the same
WO2018102967A1 (zh) NVMe over Fabric架构中数据读写命令的控制方法、存储设备和系统
JP6899852B2 (ja) ストレージ装置
US20110087836A1 (en) Storage unit and memory system
US20150052329A1 (en) Memory control device, host computer, information processing system and method of controlling memory control device
US10740000B2 (en) Adaptive transaction layer packet for latency balancing
US20170139849A1 (en) Driverless storage device using serially-attached non-volatile memory
JP6426838B2 (ja) ストレージシステム、及び、記憶制御方法
US20180253391A1 (en) Multiple channel memory controller using virtual channel
CN109388333B (zh) 降低读命令处理延迟的方法与装置
JP4743174B2 (ja) メモリコントローラ及びメモリコントローラを備えるフラッシュメモリシステム、並びにフラッシュメモリの制御方法
JP6232936B2 (ja) 情報処理装置、記憶装置制御回路及び記憶装置の制御方法
JP2023027970A (ja) メモリシステム
US9146693B2 (en) Storage control device, storage system, and storage control method
US20230280917A1 (en) Storage system and method of operating the same
US10599365B2 (en) Storage system
US11740799B2 (en) Storage system and input and output control method
US11487465B2 (en) Method and system for a local storage engine collaborating with a solid state drive controller
US9762671B2 (en) Wireless access device and wireless access system
JP4431492B2 (ja) 複数のコヒーレンシー・グラニュールをサポートするデータ転送ユニット
JP2001134496A (ja) 不揮発性半導体メモリを用いた記憶装置
JP7242928B2 (ja) ストレージシステム及び入出力制御方法
US11200172B2 (en) Storage system and method of controlling storage system
JP2023031010A (ja) 不揮発性メモリおよびメモリシステム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20240313