JP2021114038A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2021114038A JP2021114038A JP2020005285A JP2020005285A JP2021114038A JP 2021114038 A JP2021114038 A JP 2021114038A JP 2020005285 A JP2020005285 A JP 2020005285A JP 2020005285 A JP2020005285 A JP 2020005285A JP 2021114038 A JP2021114038 A JP 2021114038A
- Authority
- JP
- Japan
- Prior art keywords
- write
- zone
- data
- qlc
- command
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- 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/0604—Improving or facilitating administration, e.g. storage management
-
- 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/061—Improving I/O performance
-
- 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/0629—Configuration or reconfiguration of storage systems
-
- 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/0653—Monitoring storage devices or systems
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7202—Allocation control and policies
-
- 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/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Read Only Memory (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System (AREA)
Abstract
【課題】必要なバッファのサイズを削減することが可能なメモリシステムを実現する。【解決手段】メモリシステムのコントローラは、第1のゾーンにデータを書き込むための複数の第1のライトコマンドを、前記第1のゾーン内の書き込みが前記第1のゾーン内の次の書き込み位置からシーケンシャルに実行される順序に並び替える。コントローラは、前記並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータを、前記複数の第1のライトコマンドの並べ替えられた順序と同じ順序で前記ホストのライトバッファから前記メモリシステムの内部バッファに転送し、内部バッファに転送された前記複数のライトデータを、前記第1のゾーンとして管理されている一つの第1の記憶領域に書き込む。【選択図】図7
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
SSDは、データセンターのサーバのような様々なホスト計算機システムのストレージデバイスとして使用されている。
SSDにおいては、SSD内に設けることが必要なバッファのサイズを削減できるようにするための新たな技術の実現が必要とされる。
本発明が解決しようとする課題は、必要なバッファのサイズを削減することが可能なメモリシステムおよび制御方法を提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに含まれる複数の第1の記憶領域を、前記メモリシステムをアクセスするための論理アドレス空間を分割することによって得られる複数の論理アドレス範囲がそれぞれに割り当てられた複数のゾーンとして管理するように構成されたコントローラとを具備する。前記コントローラは、複数の第1のライトコマンドを前記ホストから受信する。前記複数の第1のライトコマンドの各々は、前記複数のゾーンのうちの第1のゾーンとライトデータが書き込まれるべき前記第1のゾーン内のオフセットとを示す論理アドレスと、前記ライトデータのデータサイズと、前記ライトデータが格納されている前記ホストのライトバッファ内の位置とを指定する。前記コントローラは、前記複数の第1のライトコマンドの各々によって指定される前記オフセットと前記データサイズに基づいて、前記複数の第1のライトコマンドを、前記第1のゾーンに対応する第1のコマンドバッファを用いて、前記第1のゾーン内の書き込みが前記第1のゾーン内の次の書き込み位置からシーケンシャルに実行される順序に並び替える。前記コントローラは、前記複数の第1のライトコマンドの並び替えによって前記第1のゾーン内の書き込みが前記第1のゾーン内の前記次の書き込み位置から各第1の記憶領域の最小書き込みサイズ以上連続してシーケンシャルに実行可能になった場合、前記並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータを、前記複数の第1のライトコマンドの並べ替えられた順序と同じ順序で前記ホストのライトバッファから前記メモリシステムの内部バッファに転送し、前記内部バッファに転送された前記複数のライトデータを、前記第1のゾーンとして管理されている、前記複数の第1の記憶領域のうちの一つの第1の記憶領域に書き込む。
以下、図面を参照して、実施形態を説明する。
図1は、ホストと実施形態に係るメモリシステムとの関係を示すブロック図である。
図1は、ホストと実施形態に係るメモリシステムとの関係を示すブロック図である。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。
ホスト(ホストデバイス)2は、複数のSSD3を制御するように構成されている。ホスト2は、複数のSSD3によって構成されるフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
なお、SSD3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のSSD3)を制御するコントローラを含む。SSD3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、SSD3のホストとして機能してもよい。
以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。
ホスト(サーバ)2と複数のSSD3は、インタフェース50を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。各仮想マシンに対応するオペレーティングシステムは、I/Oサービスを含む。このI/Oサービスは、論理ブロックアドレス(LBA)ベースのブロックI/Oサービスであってもよいし、あるいは、キー・バリュー・ストアサービスであってもよい。
各仮想マシンに対応するオペレーティングシステムにおいては、I/Oサービスは、ユーザアプリケーションからのライト/リードに関する要求に応答して、I/Oコマンド(ライトコマンド、リードコマンド)を発行する。これらI/Oコマンドはホスト2内の一つ以上のサブミッションキューを介してSSD3に送出される。
SSD3のコントローラは、メモリセル当たりに複数ビットを書き込むための第1の書き込みモードとメモリセル当たりに1ビットを書き込むための第2の書き込みモードとを選択的に使用して、ホスト2からのライトデータを不揮発性メモリに書き込むように構成されている。
この場合、SSD3のコントローラは、不揮発性メモリに含まれる複数の第1の記憶領域の各々にメモリセル当たりに複数ビットを書き込むための第1の書き込みモードでデータを書き込んでもよく、不揮発性メモリに含まれる第2の記憶領域にメモリセル当たりに1ビットを書き込むための第2の書き込みモードでデータを書き込んでもよい。
図2は、SSD3の構成例を示す。
SSD3は、コントローラ4およびNAND型フラッシュメモリ5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
SSD3は、コントローラ4およびNAND型フラッシュメモリ5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は不揮発性メモリの一例であり、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0〜BLKm−1を含む。ブロックBLK0〜BLKm−1の各々は複数のページ(ここではページP0〜Pn−1)を含む。ブロックBLK0〜BLKm−1の各々はデータを消去する単位である。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0〜Pn−1の各々は、一つのワード線に接続された複数のメモリセルを含む。ページP0〜Pn−1の各々は、データの書き込みおよび読み出しの単位である。
コントローラ4は、ToggleNANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System−on−a−chip(SoC)のような回路によって実現されてもよい。
コントローラ4はNVMe仕様のZoned Namespaces(ZNS)をサポートしており、SSD3をゾーンド・デバイス(zoned device)として動作させることができる。
ゾーンド・デバイスは、SSD3をアクセスするための論理アドレス空間を分割することによって得られる複数の論理アドレス範囲を使用してアクセスされるデバイスである。SSD3をアクセスするための論理アドレス空間は、SSD3をアクセスするためにホスト2によって使用される連続する論理アドレスである。
コントローラ4は、NAND型フラッシュメモリ5内の複数の記憶領域を複数のゾーンとしてそれぞれ管理するように構成されている。上述の複数の第1の記憶領域が複数のゾーンとして管理されていてもよい。
ある一つのゾーンに対応する一つの第1の記憶領域は、このゾーンに割り当てられた論理アドレス範囲に含まれる連続する論理アドレスを使用してアクセスされる。論理アドレスとしては、通常、論理ブロックアドレス(LBA)が使用される。
NAND型フラッシュメモリ5は、図3に示すように、シングルレベルセルバッファ(SLCバッファ)201と、複数のクワドレベルセルブロック(QLCブロック)を含むクワドレベルセル領域(QLC領域)202とを含んでいてもよい。
QLCブロックは一つのメモリセル当たりに4ビットを記憶する書き込みモード(プログラムモードとも云う)によってデータが書き込まれるブロックである。QLC領域202内の複数のQLCブロックが、上述した複数の第1の記憶領域として使用されてもよい。この場合、これら複数のQLCブロックが上述した複数のゾーンとして管理される。
図3においては、N+1個のQLCブロックがN+1個のゾーンとして利用される場合が例示されている。この場合、SSD3のLBA空間はN+1個のLBA範囲に分割される。これらN+1個のLBA範囲は、ホスト2がN+1個のゾーンを選択的にアクセスするために使用される。なお、SSD3は、ホスト2がアクセス対象のゾーンを指定できるようにするために、LBA空間内の個々のゾーンの開始LBAをホスト2に通知してもよい。
基本的には、ホスト2は、一つのゾーン内の書き込みをシーケンシャルに実行することが要求される。このため、N+1個のゾーンの各々について、ホスト2は、ゾーン内の次の書き込み位置を示すライトポインタ(WP)を管理する。あるゾーン内の書き込みの開始時においては、ライトポインタ(WP)はこのゾーンの開始LBAを次の書き込み位置として示す。このゾーンにデータを書き込むためのライトコマンドが発行されるに連れて、ライトポインタ(WP)の値が進められる。
各QLCブロックにデータを書き込む動作においては、4ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに4ビットのデータを書き込むことができる。
SLCバッファ201は、複数のSLCブロックを含んでもよい。各SLCブロックは一つのメモリセル当たりに1ビットを記憶する書き込みモード(プログラムモードとも云う)によってデータが書き込まれるブロックである。SLCバッファ201は、上述した第2の記憶領域の一例である。
SLCブロックにおけるメモリセル当たりの記憶密度は1ビット(すなわち、ワード線当たり1ページ)であり、QLCブロックにおけるメモリセル当たりの記憶密度は4ビット(すなわち、ワード線当たり4ページ)である。
NAND型フラッシュメモリ5に対するデータの読み出し速度および書き込み速度は、記憶密度が高いほど遅く、記憶密度が低いほど速い。したがって、QLCブロックに対するデータの読み出しおよび書き込みに要する時間は、SLCブロックに対するデータの読み出しおよび書き込みに要する時間よりも長くなる。
NAND型フラッシュメモリ5の各ブロック内の書き込み動作は、ブロックの先頭から終端に向けてシーケンシャルに実行される必要がある。
QLCブロックにおいても、書き込み動作は、QLCブロックの先頭から終端に向けてシーケンシャルに実行される必要がある。QLCブロックにデータを書き込む動作は、例えば、フォギー・ファイン書き込み動作によって実行される。
フォギー・ファイン書き込み動作は、QLCブロック内の同じワード線に接続されたメモリセル群に対する複数回の書き込み動作(フォギー書き込み動作、ファイン書き込み動作)を含む。1回目の書き込み動作(フォギー書き込み動作)は各メモリセルの閾値電圧を粗く設定する書き込み動作であり、2回目の書き込み動作(ファイン書き込み動作)は各メモリセルの閾値電圧を調整する書き込み動作である。
1回目の書き込み動作(フォギー書き込み動作)では、まず、4ページ分のデータが、1回目のデータ転送動作によってNAND型フラッシュメモリ5にページサイズ単位で転送される。つまり、1ページ当たりのデータサイズ(ページサイズ)が16KBであるならば、64KBのサイズを有するデータがNAND型フラッシュメモリ5にページサイズ単位で転送される。そして、4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための1回目の書き込み動作(フォギー書き込み動作)が行われる。
2回目のプログラム動作(ファイン書き込み動作)では、フォギー書き込み動作と同様に、4ページ分のデータが、2回目のデータ転送動作でNAND型フラッシュメモリ5にページサイズ単位で再び転送される。2回目のデータ転送動作でNAND型フラッシュメモリ5に転送されるデータは、1回目のデータ転送動作によってNAND型フラッシュメモリ5に転送されるデータと同一である。そして、転送された4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための2回目の書き込み動作(ファイン書き込み動作)が行われる。
あるワード線に接続された複数のメモリセルに対するフォギー書き込み動作が終了しても、このワード線に接続された複数のメモリセルに対するファイン書き込み動作はすぐに実行することはできない。このワード線に接続された複数のメモリセルに対するファイン書き込み動作は、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了した後に実行可能となる。
このように、QLCブロック内フォギー・ファイン書き込み動作は、幾つかのワード線を往復しながら、QLCブロックの先頭から終端に向かってシーケンシャルに実行される。これにより、ブログラムディスターブによる影響を最小化することが可能となる。
また、QLCブロックのあるワード線に接続された複数のメモリセルにフォギー書き込み動作によって書き込まれたデータは、このワード線に接続された複数のメモリセルに対するファイン書き込み動作が終了した後に、読み出し可能になる。
NAND型フラッシュメモリ5は、図4に示すように、複数のNAND型フラッシュメモリダイを含んでいてもよい。個々のNAND型フラッシュメモリダイは独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作可能な単位として機能する。
図4においては、NANDインタフェース13に16個のチャンネルCh.1〜Ch.16が接続されており、16個のチャンネルCh.1〜Ch.16の各々に2つのNAND型フラッシュメモリダイが接続されている場合が例示されている。
この場合、チャンネルCh.1〜Ch.16に接続された16個のNAND型フラッシュメモリダイ#1〜#16がバンク#0として編成されてもよく、またチャンネルCh.1〜Ch.16に接続された残りの16個のNAND型フラッシュメモリダイ#17〜#32がバンク#1として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図4の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリダイを並列動作させることができる。
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループ(スーパーブロック)の単位で実行されてもよい。一つのブロックグループ、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#1〜#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#1〜#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#1〜#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#1〜#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
図5には、32個の物理ブロック(ここでは、NAND型フラッシュメモリダイ#1内の物理ブロックBLK2、NAND型フラッシュメモリダイ#2内の物理ブロックBLK3、NAND型フラッシュメモリダイ#3内の物理ブロックBLK7、NAND型フラッシュメモリダイ#4内の物理ブロックBLK4、NAND型フラッシュメモリダイ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリダイ#32内の物理ブロックBLK3)を含む一つのQLCスーパーブロック(QLC SB)が例示されている。
図3で説明した各QLCブロックは、一つのスーパーブロック(QLCスーパーブロック)によって実現されてもよいし、一つの物理ブロック(QLC物理ブロック)によって実現されてもよい。QLC物理ブロックは、一つのメモリセル当たりに4ビットを書き込む書き込みモードでデータが書き込まれる物理ブロックである。
なお、一つのQLCスーパーブロックが一つのQLC物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのQLCスーパーブロックは一つのQLC物理ブロックと等価である。
本実施形態においては、NAND型フラッシュメモリ5に含まれる複数の物理ブロックは第1の物理ブロックの集合と第2の物理ブロックの集合とに分類される。第1の物理ブロックの集合は複数の第1の記憶領域(複数のQLCブロック)として編成され、第2の物理ブロックの集合は第2の記憶領域(SLCバッファ201)として編成される。
複数の第1の記憶領域(複数のQLCブロック)はホスト2によって書き込まれるデータ(ユーザデータ)を記憶するためのユーザデータ記憶領域として使用される。複数の第1の記憶領域は、上述したように、複数のゾーンとしてそれぞれ使用される。
次に、図2のコントローラ4の構成について説明する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。論理アドレスは、SSD3をアクセスするためにホスト2によって使用されるアドレスである。この論理アドレスとしては、上述したLBAが使用され得る。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。論理アドレスは、SSD3をアクセスするためにホスト2によって使用されるアドレスである。この論理アドレスとしては、上述したLBAが使用され得る。
SSD3をアクセスするためにホスト2によって使用される論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル:L2Pテーブル)31を用いて実行される。本実施形態では、各第1の記憶領域には特定のLBA範囲が固定的にマッピングされているので、L2Pテーブル31は、主に、論理アドレスそれぞれとSLCバッファ201の物理アドレスそれぞれとの間のマッピングの管理のために使用されてもよい。
コントローラ4は、L2Pテーブル31を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理してもよい。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータがライトされたNAND型フラッシュメモリ5(例えばSLCバッファ201)内の最新の物理記憶位置を示す。L2Pテーブル31は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、スタティックRAM(SRAM)16、ECCエンコード/デコード部17、等を含む。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、SRAM15、ECCエンコード/デコード部17は、バス10を介して相互接続される。
ホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってもよい。あるいは、SSD3がEthernet(登録商標)を介してホスト2に接続される構成においては、ホストインタフェース11は、NVMe over Fabrics(NVMeOF)コントローラであってもよい。
ホストインタフェース11は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、オープンゾーンコマンド、クローズゾーンコマンド、リセットゾーンコマンド、フィニッシュゾーンコマンド、等が含まれる。
ライトコマンドは書き込むべきデータ(ライトデータ)をNAND型フラッシュメモリ5に書き込むコマンド(ライト要求)である。ライトコマンドは、例えば、ライトデータが書き込まれるべき最初のセクタ(最初の「論理ブロック」とも称する)を示す論理アドレス(開始LBA)、このライトデータのデータサイズ、このライトデータが格納されているホスト2のメモリ(ライトバッファ)内の位置を示すデータポインタ(バッファアドレス)、等を含む。ホスト2のメモリは以下では単にホストメモリとも称する。
ライトコマンドに含まれる論理アドレス(開始LBA)の上位ビット部は、このライトコマンドに関連付けられたライトデータが書き込まれるべきゾーンを指定する識別子として使用される。また、ライトコマンドに含まれる論理アドレス(開始LBA)の下位ビット部は、ライトデータが書き込まれるべきゾーン内のオフセットを指定する。
したがって、ライトコマンドによって指定される論理アドレスは、複数のゾーンのうちの一つのゾーンと、ライトデータが書き込まれるべきこのゾーン内のオフセットとを示す。
ライトデータのデータサイズは、例えば、セクタ(論理ブロック)の数によって指定されもよい。一つのセクタは、ホスト2によって指定可能なライトデータの最小データサイズに対応する。つまり、ライトデータのデータサイズはセクタの倍数によって表される。
リードコマンドはNAND型フラッシュメモリ5からデータを読み出すコマンド(リード要求)である。リードコマンドは、データ(読み出し対象データ)が読み出されるべき最初のセクタを示す論理アドレス(開始LBA)、読み出し対象データのデータサイズ、この読み出し対象データが転送されるべきホストメモリ(リードバッファ)内の位置を示すデータポインタ(バッファアドレス)、等を含む。
リードコマンドに含まれる論理アドレスの上位ビット部は、読み出し対象データが格納されているゾーンを指定する識別子として使用される。また、リードコマンドに含まれる論理アドレスの下位ビット部は、読み出し対象データが格納されているゾーン内のオフセットを指定する。したがって、リードコマンドによって指定される論理アドレスは、ゾーンと、読み出し対象データが格納されているこのゾーン内のオフセットとを示す。
オープンゾーンコマンドは、各々がエンプティ状態の複数のゾーンの一つを、データの書き込みに利用可能なオープン状態に遷移させるためのコマンド(要求)である。オープンゾーンコマンドは、オープン状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、オープンゾーンコマンドによって指定される論理アドレスの上位ビット部が、オープン状態に遷移させるべきゾーンを指定する識別子として使用される。
クローズゾーンコマンドは、オープン状態のゾーンの一つを、書き込みが中断されたクローズ状態に遷移させるためのコマンド(要求)である。クローズゾーンコマンドは、クローズ状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、クローズゾーンコマンドによって指定される論理アドレスの上位ビット部が、クローズ状態に遷移させるべきゾーンを指定する識別子として使用される。
リセットゾーンコマンドは、書き換えが実行されるべきゾーンをリセットしてエンプティ状態に遷移させるためのコマンド(要求)である。例えば、リセットゾーンコマンドは、データで満たされているフル状態のゾーンを、有効データを含まないエンプティ状態に遷移させるために使用される。有効データは、論理アドレスに関連付けられているデータを意味する。リセットゾーンコマンドは、エンプティ状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、リセットゾーンコマンドによって指定される論理アドレスの上位ビット部が、エンプティ状態に遷移させるべきゾーンを指定する識別子として使用される。リセットゾーンコマンドによってエンプティ状態に遷移されたゾーンに対応するライトポインタの値は、このゾーンの開始LBAを示す値に設定される。
フィニッシュゾーンコマンドは、ゾーンが実際にデータで満たされる前にこのゾーンの状態をフル状態に遷移させ、これによってこのゾーンへの書き込みを終了させるためのコマンド(要求)である。フィニッシュゾーンコマンドは、フル状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、フィニッシュゾーンコマンドによって指定される論理アドレスの上位ビット部が、フル状態に遷移させるべきゾーンを指定する識別子として使用される。
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、DMAC15、SRAM16、ECCエンコード/デコード部17を制御するように構成されたプロセッサである。CPU12は、SSD3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはSRAM16上にロードされてもよい。CPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
CPU12は、フラッシュマネジメント部20として機能することができる。なお、フラッシュマネジメント部20の一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
フラッシュマネジメント部20は、ライトコマンドそれぞれをホスト2から受信し、これら受信したライトコマンドを複数のゾーンに対応する複数のグループに分類する。各ライトコマンドは、上述したように、複数のゾーンのうちの一つのゾーンとライトデータが書き込まれるべきこのゾーン内のオフセットとを示す論理アドレス(例えばLBA)と、ライトデータのデータサイズと、ライトデータが格納されているホスト2内のライトバッファ内の位置とを指定する。
フラッシュマネジメント部20は、各ゾーン内の書き込みがシーケンシャルに実行されるようにライトコマンドを並び替えるライトコマンド並べ替え機能(write command reordering機能)を有している。
例えば、複数のゾーンのうちの第1のゾーンにデータを書き込むための複数のライトコマンドを並び替える場合を想定する。
第1のゾーンにデータを書き込むためのライトコマンド(第1のライトコマンド)の各々は、第1のゾーンと、ライトデータが書き込まれるべき第1のゾーン内のオフセットと、ライトデータのデータサイズと、ライトデータが格納されているホスト2のライトバッファ内の位置とを指定する。
第1のゾーンは、各第1のライトコマンドに含まれるLBAの上位ビット部によって指定される。オフセットは、各第1のライトコマンドに含まれるLBAの下位ビット部によって指定される。
受信した複数の第1のライトコマンドの各々によって指定されるオフセットおよびデータサイズに基づいて、フラッシュマネジメント部20は、受信した複数の第1のライトコマンドを、第1のゾーンに対応する第1のコマンドバッファを用いて、第1のゾーン内の書き込みが第1のゾーン内の次の書き込み位置からシーケンシャルに実行される順序に並び替える。
例えば、第1のゾーンの先頭の記憶位置に対応するオフセットを指定するライトコマンド#1、第1のゾーンの3番目の記憶位置に対応するオフセットを指定するライトコマンド#2、第1のゾーンの4番目の記憶位置に対応するオフセットを指定するライトコマンド#3、および第1のゾーンの2番目の記憶位置に対応するオフセットを指定するライトコマンド#4がこの順序で受信された場合、これらライトコマンドは、ライトコマンド#1、ライトコマンド#4、ライトコマンド#2、ライトコマンド#3という順序に並べ替えられる。
複数の第1のライトコマンドの並び替えによって第1のゾーン内の書き込みがこの第1のゾーン内の次の書き込み位置から第1の記憶領域の最小書き込みサイズ以上連続してシーケンシャルに実行可能になった場合、フラッシュマネジメント部20は、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータを、複数の第1のライトコマンドの並び替えられた順序と同じ順序でホスト2のライトバッファから内部バッファ161に転送する。この場合、SRAM16の記憶領域の一部が内部バッファ161として使用されてもよいし、DRAM6の記憶領域の一部が内部バッファ161として使用されてもよい。
そして、フラッシュマネジメント部20は、内部バッファ161に転送された複数のライトデータを、第1のゾーンとして管理されている、複数の第1の記憶領域のうちの一つの第1の記憶領域に書き込む。
もしホスト2から第1のライトコマンドを受信する度に、受信したライトコマンドに関連付けられたライトデータをホスト2からSSD3内のバッファに転送するという構成が使用されたならば、大容量のバッファをSSD3内に用意することが必要とされる。
なぜなら、もしホスト2からの第1のライトコマンドの受信順序が第1のゾーン内の書き込み順序と異なる場合には、第1のゾーンへの書き込みが開始できないライトデータによってSSD3内のバッファが長い時間専有されてしまう可能性があるからである。また、第1のゾーンへの書き込みが開始できない幾つかのライトデータを並べ替えるためのバッファスペースも必要となる。
本実施形態では、受信した複数のライトデータを並べ替えるのではなく、受信した複数の第1のライトコマンドが第1のゾーン内の書き込みが第1のゾーン内の次の書き込み位置からシーケンシャルに実行される順序に並べ替えられる。そして、複数の第1のライトコマンドの並べ替えによって、第1のゾーン内の書き込みが第1のゾーン内の次の書き込み位置から最小書き込みサイズ以上連続して実行可能となった場合、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータが、複数の第1のライトコマンドの並べ替えられた順序と同じ順序で、つまり第1のゾーン内におけるこれら複数のライトデータの書き込み順序と同じ順序で、ホスト2のライトバッファからSSD3内の内部バッファ161に転送される。
例えば、上述したように、第1のゾーンの先頭の記憶位置に対応するオフセットを指定するライトコマンド#1、第1のゾーンの3番目の記憶位置に対応するオフセットを指定するライトコマンド#2、第1のゾーンの4番目の記憶位置に対応するオフセットを指定するライトコマンド#3、および第1のゾーンの2番目の記憶位置に対応するオフセットを指定するライトコマンド#4がこの順序で受信された場合、ライトコマンド#1〜#4は、ライトコマンド#1、ライトコマンド#4、ライトコマンド#2、ライトコマンド#3という順序に並び替えられる。これらライトコマンド#1〜#4が並び替えによって、第1のゾーン内の書き込みが第1のゾーン内の次の書き込み位置から最小書き込みサイズ以上連続して実行可能となる。そして、ライトコマンド#1〜#4に関連付けられたライトデータ#1〜#4も、ライトコマンド#1〜#4の並び替えられた順序(ライトコマンド#1、ライトコマンド#4、ライトコマンド#2、ライトコマンド#3)と同じ順序、つまりライトデータ#1、ライトデータ#4、ライトデータ#2、ライトデータ#3という順序でホスト2のライトバッファから内部バッファ161に転送される。
ライトデータ#1、ライトデータ#4、ライトデータ#2、ライトデータ#3という順序は第1のゾーン内の書き込みを第1のゾーン内の次の書き込み位置からシーケンシャルに実行可能な順序に一致する。したがって、フラッシュマネジメント部20は、ライトデータの並べ替えを行うことなく、内部バッファ161に転送された各ライトデータの書き込みを即座に開始することができる。
よって、第1のゾーン内の次の書き込み位置とは異なる位置に書き込まれるべき幾つかのライトデータによって内部バッファ161が長い時間専有されてしまうことを防止することができ、SSD3内に設けることが必要な内部バッファ161のサイズを削減できる。また、ライトデータを並べ替えるための専用のバッファをSSD3内に設ける必要も無い。本実施形態では、ライトコマンドを並び替えるためのコマンドバッファが必要となるが、一般に、個々のライトコマンドのサイズはライトデータのサイズよりも遙かに小さいので、SSD3内に設けることが必要なバッファの総サイズを削減できる。
さらに、ホスト2が同じゾーンに対するライトコマンドの発行順序を厳密に管理せずとも、各ゾーン内の書き込みをシーケンシャルに実行することが可能となる。よって、ゾーン内の書き込みをシーケンシャルに実行するために必要なホスト2側の負担を軽減することが可能となる。
またさらに、ライトコマンド並べ替え機能は、ホスト2が、あるゾーンにデータを書き込むためのライトコマンドの完了を示す応答をSSD3から受信するのを待つことなく、このゾーンにデータを書き込むための別のライトコマンドをサブミッションキューSQに入れることを可能にする。したがって、ライトスループットを改善することが可能となる。
フラッシュマネジメント部20は、コマンドフェッチャ21と、コマンドディスパッチャ22とを含む。コマンドフェッチャ21は、ホスト2の一つ以上のサブミッションキューからコマンドそれぞれをフェッチする。コントローラ4においては、オープン状態の複数のゾーンの数と同数の複数のコマンドバッファが管理されている。
コマンドフェッチャ21は、フェッチしたライトコマンド群をオープン状態の複数のゾーンにそれぞれ対応する複数のグループに分類する。そして、コマンドフェッチャ21は、各グループに属するライトコマンドの集合を、各グループに対応するコマンドバッファを使用して、並べ替える。
コマンドディスパッチャ22は、各コマンドバッファ内の並べ替えられたライトコマンドそれぞれを実行する。つまり、コマンドディスパッチャ22は、あるゾーンにデータを書き込むためのライトコマンドそれぞれをこれらライトコマンドの並べ替えられた順序で実行する。
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、L2Pテーブル31およびゾーン管理テーブル32用の記憶領域として利用されてもよい。ゾーン管理テーブル32は複数のQLCブロックそれぞれに対応する管理情報の格納に使用される。なお、内部バッファ161はSRAM16ではなく、DRAM6内に配置されていてもよい。
DMAC15は、CPU12の制御の下、ホスト2のライトバッファと内部バッファ161との間のデータ転送を実行する。ホスト2のライトバッファから内部バッファ161にデータを転送すべき場合には、CPU12は、ホスト2のライトバッファ内の位置を示す転送元アドレス、転送すべきデータのサイズ、内部バッファ161内の位置を示す転送先アドレスをDMAC15に対して指定する。また、内部バッファ161からホスト2のリードバッファにデータを転送すべき場合には、CPU12は、内部バッファ161内の位置を示す転送元アドレス、転送すべきデータのサイズ、ホスト2のリードバッファ内の位置を示す転送先アドレスをDMAC15に対して指定する。
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
図6は、第1の記憶領域(QLCブロック)に一つのメモリセル当たりに4ビットを書き込む書き込み動作を示す図である。
ここでは、4つのワード線を往復する場合のフォギー・ファイン書き込み動作を例示する。QLCブロック#1に対するフォギー・ファイン書き込み動作は以下のように実行される。
(1)まず、4ページ(P0〜P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に転送され、QLCブロック#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0〜P3)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
(2)次いで、次の4ページ(P4〜P7)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4〜P7)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
(3)次いで、次の4ページ(P8〜P11)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL2に接続された複数のメモリセルに、これら4ページ(P8〜P11)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
(4)次いで、次の4ページ(P12〜P15)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL3に接続された複数のメモリセルに、これら4ページ(P12〜P15)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
(5)ワード線WL3に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL0に戻り、ワード線WL0に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL0に対するフォギー書き込み動作で使用された4ページ(P0〜P3)分のライトデータと同じ4ページ(P0〜P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLCブロック#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0〜P3)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP0〜P3に対するフォギー・ファイン書き込み動作が終了する。この結果、ページP0〜P3に対応するデータをQLCブロック#1から正しく読み出すことが可能となる。
(6)次いで、次の4ページ(P16〜P19)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL4に接続された複数のメモリセルに、これら4ページ(P16〜P19)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
(7)ワード線WL4に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL1に戻り、ワード線WL1に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL1に対するフォギー書き込み動作で使用された4ページ(P4〜P7)分のライトデータと同じ4ページ(P4〜P7)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLCブロック#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4〜P7)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP4〜P7に対するフォギー・ファイン書き込み動作が終了する。この結果、ページP4〜P7に対応するデータをQLCブロック#1から正しく読み出すことが可能となる。
(8)次いで、次の4ページ(P20〜P23)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL5に接続された複数のメモリセルに、これら4ページ(P20〜P23)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
(9)ワード線WL5に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL2に戻り、ワード線WL2に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL2に対するフォギー書き込み動作で使用された4ページ(P8〜P11)分のライトデータと同じ4ページ(P8〜P11)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLCブロック#1内のワード線WL2に接続された複数のメモリセルに、これら4ページ(P8〜P11)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP8〜P11に対するフォギー・ファイン書き込み動作が終了する。この結果、ページP8〜P11に対応するデータをQLCブロック#1から正しく読み出すことが可能となる。
図7は、フラッシュマネジメント部20の構成例を示すブロック図である。
SSD3のコントローラ4においては、オープン状態の複数のゾーンにそれぞれ対応する複数のリオーダ・コマンドバッファ23−1〜23−Mが管理されている。リオーダ・コマンドバッファ23−1は、オープン状態のゾーン#1にデータを書き込むための複数のライトコマンドをこのゾーン内の書き込みがシーケンシャルに実行される順序に並べ替えるために使用される。リオーダ・コマンドバッファ23−2は、オープン状態のゾーン#2にデータを書き込むための複数のライトコマンドをゾーン#2内の書き込みがシーケンシャルに実行される順序に並べ替えるために使用される。リオーダ・コマンドバッファ23−3は、オープン状態のゾーン#3にデータを書き込むための複数のライトコマンドをゾーン#3内の書き込みがシーケンシャルに実行される順序に並べ替えるために使用される。同様に、リオーダ・コマンドバッファ23−Mは、オープン状態のゾーン#Mにデータを書き込むための複数のライトコマンドをゾーン#M内の書き込みがシーケンシャルに実行される順序に並べ替えるために使用される。
ホスト2においては、各I/Oコマンド(リードコマンド、ライトコマンド)は、一つ以上のサブミッションキューSQのいずれかに入れられる。SSD3のライトコマンド並べ替え機能(write command reordering機能)を使用することにより、ホスト2は、同じゾーンにデータを書き込むためのライトコマンドを任意の順番でサブミッションキューSQに入れることが許される。このため、ホスト2は、あるゾーンにデータを書き込むためのライトコマンドのコマンド完了を示す応答をSSD3から受信するのを待つことなく、このゾーンにデータを書き込むための別のライトコマンドを一つ以上のサブミッションキューSQの一つに入れることが許される。したがって、ホスト2は同じゾーンに対する複数のライトコマンドを一つ以上のサブミッションキューSQに入れることができるので、ライトスループットを改善することが可能となる。
また、SSD3内のある特定のゾーンを異なるアプリケーションまたは異なる仮想マシンによって共有するというシステム環境を実現することも可能となる。この場合、ホストソフトウェアは、特定のゾーンに割り当てられたLBA範囲の一部を、この特定のゾーンを共有するアプリケーション(または仮想マシン)のうちの一つに割り当て、このLBA範囲の別の一部を、この特定のゾーンを共有するアプリケーション(または仮想マシン)のうちの別のアプリケーション(または別の仮想マシン)に割り当ててもよい。
サブミッションキューSQに格納されているコマンドそれぞれは、コマンドフェッチャ21によってフェッチされる。コマンドフェッチャ21によってフェッチされたコマンドがリードコマンドである場合には、このリードコマンドは、コマンドフェッチャ21からコマンドディスパッチャ22に即座に送られる。
リードコマンドに含まれる論理アドレスは、リード対象ゾーンとリード対象データが格納されているこのリード対象ゾーン内のオフセットとを示す。コマンドディスパッチャ22は、リード対象データを読み出すためのリードコマンドシーケンスをNAND型フラッシュメモリ5に送信することによって、リード対象データをリード対象ゾーンから読み出す。コマンドディスパッチャ22は、読み出されたリード対象データを、DMAC15を使用して、ホストメモリ50A内のリードバッファ52に転送する。そして、コマンドディスパッチャ22は、リードコマンドの完了を示す応答をホスト2に送信する。この場合、コマンドディスパッチャ22は、リードコマンドの完了を示す応答をホスト2のコンプリーションキューCQに入れる。
ライトコマンドに関しては、以下の処理が実行される。
コマンドフェッチャ21は、サブミッションキュー(SQ)からフェッチしたライトコマンドそれぞれを、ゾーン#1〜#Mに対応するM+1個のグループに分類する。そして、コマンドフェッチャ21は、ゾーン#1に対応するグループに分類されたライトコマンドの集合を、ゾーン#1に対応するリオーダ・コマンドバッファ23−1を使用して、ゾーン#1内の書き込みがゾーン#1内の次の書き込み位置からシーケンシャルに実行される順序に並び替える。この並び替えは、ゾーン#1に対応するグループに分類された各ライトコマンドによって指定されるオフセットおよびデータサイズに基づいて実行される。
同様に、コマンドフェッチャ21は、ゾーン#Mに対応するグループに分類された指定するライトコマンドの集合を、ゾーン#Mに対応するリオーダ・コマンドバッファ23−Mを使用して、ゾーン#M内の書き込みがゾーン#M内の次の書き込み位置からシーケンシャルに実行される順序に並び替える。この並び替えは、ゾーン#Mに対応するグループに分類された各ライトコマンドによって指定されるオフセットおよびデータサイズに基づいて実行される。
コマンドディスパッチャ22は、リオーダ・コマンドバッファ23−1〜23−Mの各々において並べ替えられたライトコマンドを、これらライトコマンドの並べ替えられた順序と同じ順序で実行する。
例えば、ゾーン#1に関しては、コマンドディスパッチャ22は、リオーダ・コマンドバッファ23−1内において並び替えられた複数のライトコマンドに関連付けられた複数のライトデータを、DMAC15を使用して、これら複数のライトコマンドの並べ替えられた順序と同じ順序で、つまりゾーン#1内におけるこれら複数のライトデータの書き込み順序と同じ順序で、ホストメモリ50Aのライトバッファ51から内部バッファ161に転送する(DMA転送)。
このように、同じゾーンにデータを書き込むための複数のライトコマンドはこのゾーン内の書き込みがシーケンシャルに実行される順序に並び替えられる。そして、これら複数のライトコマンドに関連付けられた複数のライトデータのDMA転送は、これらライトコマンドの受信順序と同じ順序で実行されるのではなく、これらライトコマンドの並べ替えられた順序と同じ順序で実行される。したがって、ライトコマンドの並べ替えによって他のライトコマンドの後ろに配置されたライトコマンドに関連付けられたライトデータのDMA転送は、他のライトコマンドに関連付けられたライトデータのDMA転送の後に実行される(Delayed DMA)。
そして、コマンドディスパッチャ22は、データを書き込むための一つ以上のプログラムコマンドシーケンスをNAND型フラッシュメモリ5に送信することによって、内部バッファ161に転送された複数のライトデータを、ゾーン#1として管理されている、NAND型フラッシュメモリ5内の第1の記憶領域に書き込む。
あるライトデータの書き込みが完了すると、コマンドディスパッチャ22は、このライトデータに対応するライトコマンドの完了を示す応答(completion)をホスト2に送信する。この応答は、ライト完了メッセージとしても参照される。
ライトコマンドそれぞれの完了を示す応答をホスト2へ送信する処理は、ライトコマンドの受信順ではなく、ライトコマンドの並べ替えられた順序と同じ順序で実行される。したがって、ライトコマンドの並べ替えによって他のライトコマンドの後ろに配置されたライトコマンドの完了を示す応答は、他のライトコマンドの完了を示す応答の送信後にホスト2に送信される(Delayed completion)。
図8は、フラッシュマネジメント部20の他の構成例を示すブロック図である。
図8に示されるフラッシュマネジメント部20は、図7のフラッシュマネジメント部20と比較し、2フェーズライトコンプリーションを実行する機能をさらに有している点だけが異なっている
すなわち、フラッシュマネジメント部20のコマンドディスパッチャ22は、個々のライトコマンド毎に第1フェーズ完了メッセージと第2フェーズ完了メッセージとを含む以下の2フェーズ完了メッセージをホスト2に送信する。
すなわち、フラッシュマネジメント部20のコマンドディスパッチャ22は、個々のライトコマンド毎に第1フェーズ完了メッセージと第2フェーズ完了メッセージとを含む以下の2フェーズ完了メッセージをホスト2に送信する。
第1フェーズ: 第1フェーズ完了メッセージは、コントローラ4によってホスト2からライトコマンドが受信された(フェッチされた)ことを示す応答(中間アクノリッジ)である。つまり、コントローラ4がホスト2からライトコマンドを受信(フェッチ)した場合、コントローラ4(ここではコマンドディスパッチャ22)はこのライトコマンドの受信(フェッチ)が完了したことを示す第1の応答を、第1フェーズ完了メッセージとしてホスト2に送信する。この場合、第1フェーズ完了メッセージは、ホスト2のコンプリーションキューCQに格納される。
第2フェーズ: 第2フェーズ完了メッセージは、コントローラ4によってNAND型フラッシュメモリ5への書き込みが完了されたことを示す応答(Delayed completion)である。つまり、NAND型フラッシュメモリ5へのあるライトデータの書き込みが完了すると、コントローラ4(ここではコマンドディスパッチャ22)はこのライトコマンドに対応する書き込みの完了を示す第2の応答を、第2フェーズ完了メッセージとしてホスト2に送信する。この場合、第2フェーズ完了メッセージも、ホスト2のコンプリーションキューCQに格納される。
第1フェーズ完了メッセージは、ライトコマンドに関連付けられたライトデータをリードするためのリードコマンドをホスト2がSSD3に送信することを許可するための完了メッセージとして利用されてもよい。つまり、あるライトコマンドに対応する第1フェーズ完了メッセージがSSD3からホスト2に送信された後に、コントローラ4があるゾーンに書き込まれるべきデータのリードを要求するリードコマンドをホスト2から受信した場合、コントローラ4は、このデータを、例えばホスト2のライトバッファ51から読み出し、読み出したデータをホスト2に送信する。なお、図11で後述するように、このデータがSLCバッファ201に既に格納されている場合もある。この場合には、コントローラ4は、このデータをSLCバッファ201から読み出してもよく、そして読み出したデータをホスト2に送信してもよい。
第2フェーズ完了メッセージは、ライトコマンドの完了を示す通常の完了メッセージ(completion)と同様に、このライトコマンドに関連付けられたライトデータが格納されているホスト2のライトバッファ51内の領域の解放を許可するための完了メッセージとして利用されてもよい。この場合、あるライトコマンドに対応する第2フェーズ完了メッセージをSSD3から受信した場合、ホスト2は、このライトコマンドに関連付けられたライトデータが格納されているホスト2のライトバッファ51内の領域を解放してもよい。
図9は、ライトコマンド並べ替え動作の例を示す図である。
例えば、Zone#1として使用されるブロックBLK#1の最小書き込みサイズがページサイズ(例えば16Kバイト)であり、Zone#1にデータを書き込むための各ライトコマンドによって指定されるライトデータのデータサイズが最小書き込みサイズの整数倍である場合を想定する。つまり、各ライトデータは、最小書き込みサイズと同じサイズを有するか、または最小書き込みサイズの2以上の整数倍のサイズを有する場合を想定する。
ホスト2のライトポインタと同様に、フラッシュマネジメント部20は、各ゾーンの次の書き込み位置を示す内部ライトポインタを管理する。Zone#1がエンプティ状態からオープン状態に遷移されると、内部ライトポインタによって示されるZone#1の次の書き込み位置は、Zone#1の開始LBA、つまりブロックBLK#1の先頭のページP0に対応するLBAに設定される。
以下では、コマンドフェッチャ21がZone#1を指定するライトコマンドW1〜W5をこの順序でホスト2から受信した場合を想定する。また、以下では、説明を簡単にするために、ライトコマンドW1〜W5によって指定されるライトデータのデータサイズが最小書き込みサイズと同じサイズである場合を想定する。
ライトコマンドW1は、Zone#1内の最初のオフセット(Zone#1の開始LBA)を指定するライトコマンドである。Zone#1内の最初のオフセットは、ブロックBLK#1のページP0に対応する。
ライトコマンドW2は、Zone#1内の2番目のオフセットを指定するライトコマンドである。Zone#1内の2番目のオフセットは、ブロックBLK#1のページP1に対応する。
ライトコマンドW3は、Zone#1内の3番目のオフセットを指定するライトコマンドである。Zone#1内の3番目のオフセットは、ブロックBLK#1のページP4に対応する。
ライトコマンドW4は、Zone#1内の4番目のオフセットを指定するライトコマンドである。Zone#1内の4番目のオフセットは、ブロックBLK#1のページP3に対応する。
ライトコマンドW5は、Zone#1内の5番目のオフセットを指定するライトコマンドである。Zone#1内の5番目のオフセットは、ブロックBLK#1のページP4に対応する。
(1)コマンドフェッチャ21はライトコマンドW1をホスト2のサブミッションキューSQからフェッチする。Zone#1内の次の書き込み位置は、Zone#1の開始LBA、つまりページP0に対応する最初のオフセットに設定されている。したがって、ライトコマンドW1によって指定されるオフセットはZone#1内の次の書き込み位置に一致するので、コマンドフェッチャ21は、リオーダ・コマンドバッファ23−1をパススルーして、ライトコマンドW1をコマンドディスパッチャ22に送信する。
ライトコマンドW1によって指定されるデータサイズ(例えば、ページサイズ)とバッファアドレスに基づいて、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW1に関連付けられたライトデータD0をホストメモリ50A内のライトバッファ51から内部バッファ161に転送する。ライトデータD0は最小書き込みサイズ(ここでは1ページ)分のサイズを有している。そして、コマンドディスパッチャ22は、プログラムコマンドシーケンスをNAND型フラッシュメモリダイに送信することによって、ライトデータD0をブロックBLK#1のページP0に書き込む。ライトデータD0の書き込みが完了すると、コマンドディスパッチャ22は、Zone#1内の次の書き込み位置を、ライトデータD0のデータサイズ分だけ進める。ライトデータD0のデータサイズは1ページであるので、Zone#1内の次の書き込み位置はページP1に対応するLBAに変更される。
(2)コマンドフェッチャ21はライトコマンドW2をホスト2のサブミッションキューSQからフェッチする。Zone#1内の次の書き込み位置は、ページP1に対応するLBAに設定されている。したがって、ライトコマンドW2によって指定されるオフセットはZone#1内の次の書き込み位置に一致するので、コマンドフェッチャ21は、リオーダ・コマンドバッファ23−1をパススルーして、ライトコマンドW2をコマンドディスパッチャ22に送信する。
ライトコマンドW2によって指定されるデータサイズとバッファアドレスに基づいて、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW2に関連付けられたライトデータD1をホストメモリ50A内のライトバッファ51から内部バッファ161に転送する。ライトデータD1は最小書き込みサイズ(ここでは1ページ)分のサイズを有している。そして、コマンドディスパッチャ22は、プログラムコマンドシーケンスをNAND型フラッシュメモリダイに送信することによって、ライトデータD1をブロックBLK#1のページP1に書き込む。ライトデータD1の書き込みが完了すると、コマンドディスパッチャ22は、Zone#1内の次の書き込み位置を、ライトデータD1のデータサイズ分だけ進める。ライトデータD1のデータサイズは1ページであるので、Zone#1内の次の書き込み位置はページP2に対応するLBAに変更される。
(3)コマンドフェッチャ21はライトコマンドW3をホスト2のサブミッションキューSQからフェッチする。Zone#1内の次の書き込み位置は、ページP2に対応するLBAに設定されている。したがって、ライトコマンドW3によって指定されるオフセット(ページP4に対応するLBA)はZone#1内の次の書き込み位置に一致しないので、コマンドフェッチャ21は、ライトコマンドW3をリオーダ・コマンドバッファ23−1に格納する。
(4)コマンドフェッチャ21はライトコマンドW4をホスト2のサブミッションキューSQからフェッチする。Zone#1内の次の書き込み位置は、ページP2に対応するLBAに設定されている。したがって、ライトコマンドW4によって指定されるオフセット(ページP3に対応するLBA)はZone#1内の次の書き込み位置に一致しないので、コマンドフェッチャ21は、ライトコマンドW4をリオーダ・コマンドバッファ23−1に格納する。この場合、ライトコマンドW4によって指定されるオフセットはリオーダ・コマンドバッファ23−1に既に格納されているライトコマンドW3によって指定されるオフセットよりも小さい。したがって、コマンドフェッチャ21は、ライトコマンドW4とライトコマンドW3がこの順序でリオーダ・コマンドバッファ23−1内に配置されるように、図9に示すように、ライトコマンドW4とライトコマンドW3の順序を入れ替えてもよい。
(5)コマンドフェッチャ21はライトコマンドW5をホスト2のサブミッションキューSQからフェッチする。Zone#1内の次の書き込み位置は、ページP2に対応するLBAに設定されている。したがって、ライトコマンドW5によって指定されるオフセット(ページP2に対応するLBA)はZone#1内の次の書き込み位置に一致する。したがって、コマンドフェッチャ21は、リオーダ・コマンドバッファ23−1をパススルーして、ライトコマンドW5をコマンドディスパッチャ22に送信する。
ライトコマンドW5によって指定されるデータサイズとバッファアドレスに基づいて、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW5に関連付けられたライトデータD2をホストメモリ50A内のライトバッファ51から内部バッファ161に転送する。ライトデータD2は最小書き込みサイズ(ここでは1ページ)分のサイズを有している。そして、コマンドディスパッチャ22は、プログラムコマンドシーケンスをNAND型フラッシュメモリダイに送信することによって、ライトデータD2をブロックBLK#1のページP2に書き込む。ライトデータD2の書き込みが完了すると、コマンドディスパッチャ22は、Zone#1内の次の書き込み位置を、ライトデータD2のデータサイズ分だけ進める。ライトデータD2のデータサイズは1ページであるので、Zone#1内の次の書き込み位置はページP3に対応するLBAに変更される。
コマンドフェッチャ21は、Zone#1内の次の書き込み位置(ページP3に対応するLBA)をオフセットとして指定するライトコマンドを求めてリオーダ・コマンドバッファ23−1を検索する。ライトコマンドW4によって指定されるオフセットがZone#1内の次の書き込み位置(ページP3に対応するLBA)に一致しているので、コマンドフェッチャ21は、ライトコマンドW4をリオーダ・コマンドバッファ23−1から取得し、ライトコマンドW4をコマンドディスパッチャ22に送信する。
ライトコマンドW4によって指定されるデータサイズとバッファアドレスに基づいて、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW4に関連付けられたライトデータD3をホストメモリ50A内のライトバッファ51から内部バッファ161に転送する。ライトデータD3は最小書き込みサイズ(ここでは1ページ)分のサイズを有している。そして、コマンドディスパッチャ22は、プログラムコマンドシーケンスをNAND型フラッシュメモリダイに送信することによって、ライトデータD3をブロックBLK#1のページP3に書き込む。ライトデータD3の書き込みが完了すると、コマンドディスパッチャ22は、Zone#1内の次の書き込み位置を、ライトデータD3のデータサイズ分だけ進める。ライトデータD3のデータサイズは1ページであるので、Zone#1内の次の書き込み位置はページP4に対応するLBAに変更される。
コマンドフェッチャ21は、Zone#1内の次の書き込み位置(ページP4に対応するLBA)をオフセットとして指定するライトコマンドを求めてリオーダ・コマンドバッファ23−1を検索する。ライトコマンドW3によって指定されるオフセットがZone#1内の次の書き込み位置(ページP4に対応するLBA)に一致しているので、コマンドフェッチャ21は、ライトコマンドW3をリオーダ・コマンドバッファ23−1から取得し、ライトコマンドW3をコマンドディスパッチャ22に送信する。
ライトコマンドW3によって指定されるデータサイズとバッファアドレスに基づいて、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW3に関連付けられたライトデータD4をホストメモリ50A内のライトバッファ51から内部バッファ161に転送する。ライトデータD4は最小書き込みサイズ(ここでは1ページ)分のサイズを有している。そして、コマンドディスパッチャ22は、プログラムコマンドシーケンスをNAND型フラッシュメモリダイに送信することによって、ライトデータD4をブロックBLK#1のページP4に書き込む。ライトデータD4の書き込みが完了すると、コマンドディスパッチャ22は、Zone#1内の次の書き込み位置を、ライトデータD4のデータサイズ分だけ進める。ライトデータD4のデータサイズは1ページであるので、Zone#1内の次の書き込み位置はページP5に対応するLBAに変更される。
このように、ライトコマンドW1、ライトコマンドW2、ライトコマンドW3、ライトコマンドW4、ライトコマンドW5は、Zone#1内の書き込みがZone#1内の次の書き込み位置から最小書き込みサイズ以上(ここでは、最小書き込みサイズの2以上の整数倍以上)連続してシーケンシャルに実行可能な順序、つまりライトコマンドW1、ライトコマンドW2、ライトコマンドW5、ライトコマンドW4、ライトコマンドW3という順序に並べ替えられる。そして、ライトコマンドW1〜W5にそれぞれ関連付けられた5つのライトデータが、ライトコマンドW1〜W5の並び替えられた順序(W1、W2、W5、W4、W3)と同じ順序、つまりD0、D1、D2、D3、D4、D5という順序で、ホスト2のライトバッファ51から内部バッファ161に転送される。
図10は、ライトコマンド並べ替え動作の別の例を示す図である。
ここでは、Zone#1として使用されるブロックBLK#1の最小書き込みサイズがページサイズ(例えば16Kバイト)であり、ホスト2によって指定可能なライトデータの最小データサイズ(セクタサイズ)が4KBである場合を想定する。
以下では、コマンドフェッチャ21がZone#1を指定するライトコマンドW11〜W16をこの順序でホスト2から受信した場合を想定する。
ライトコマンドW11によって指定されるオフセット(offset=0)はZone#1の先頭のセクタS0(Zone#1の開始LBA)を示し、ライトコマンドW11によって指定されるデータサイズは4KBである。
ライトコマンドW12によって指定されるオフセット(offset=2)はZone#1のセクタS2を示し、ライトコマンドW12によって指定されるデータサイズは8KBである。
ライトコマンドW13によって指定されるオフセット(offset=1)はZone#1のセクタS1を示し、ライトコマンドW13によって指定されるデータサイズは4KBである。
ライトコマンドW14によって指定されるオフセット(offset=5)はZone#1のセクタS5を示し、ライトコマンドW14によって指定されるデータサイズは4KBである。
ライトコマンドW15によって指定されるオフセット(offset=6)はZone#1のセクタS6を示し、ライトコマンドW15によって指定されるデータサイズは8KBである。
ライトコマンドW16によって指定されるオフセット(offset=4)はZone#1のセクタS4を示し、ライトコマンドW16によって指定されるデータサイズは4KBである。
この場合、フラッシュマネジメント部20のコマンドフェッチャ21は、Zone#1内の書き込みがZone#1内の次の書き込み位置(ここではZone#1の開始LBA)から最小書き込みサイズ(16KB)以上連続してシーケンシャルに実行されるように、ライトコマンドW11〜W16を、図10の右部に示すように、ライトコマンドW11、ライトコマンドW13、ライトコマンドW12、ライトコマンドW16、ライトコマンドW14、ライトコマンドW15という順序に並び替える。
すなわち、コマンドフェッチャ21はライトコマンドW11、ライトコマンドW12、ライトコマンドW13をホスト2からこの順序で受信し、ライトコマンドW11、ライトコマンドW12、ライトコマンドW13をリオーダ・コマンドバッファ23−1に格納する。そして、コマンドフェッチャ21は、ライトコマンドW11、ライトコマンドW12、ライトコマンドW13をライトコマンドW11、ライトコマンドW13、ライトコマンドW12という順序に並び替える。
このようにライトコマンドW11、ライトコマンドW12、ライトコマンドW13が鍋変えられることにより、Zone#1内の書き込みがZone#1内の次の書き込み位置(ここではZone#1の開始LBA)から最小書き込みサイズ以上連続して実行可能となる。
より詳しくは、並び替えられたライトコマンドW11、ライトコマンドW13、ライトコマンドW12それぞれのオフセットとデータサイズとによって指定される連続する論理アドレスの先頭はZone#1内の次の書き込み位置(ここではZone#1の開始LBA)に一致し、且つこれら連続する論理アドレスの長さは最小書き込みサイズ(ここでは16KB)となる。従って、コマンドフェッチャ21は、並び替えられたライトコマンドW11、ライトコマンドW12、ライトコマンドW13をコマンドディスパッチャ22に送信する。
コマンドディスパッチャ22は、まず、DMAC15を使用して、ライトコマンドW11に関連付けられた、4KBのサイズを有するライトデータD0をホスト2のライトバッファ51から内部バッファ161に転送する。次いで、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW13に関連付けられた、4KBのサイズを有するライトデータD1をホスト2のライトバッファ51から内部バッファ161に転送する。そして、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW12に関連付けられた、8KBのサイズを有するライトデータD2をホスト2のライトバッファ51から内部バッファ161に転送する。
この結果、Zone#1の開始LBAから書き込まれるべき、合計16KB分のサイズを有する3つのライトデータ(D0、D1、D2)を内部バッファ161に準備することができる。コマンドディスパッチャ22は、合計16KB分のサイズを有する3つのライトデータ(D0、D1、D2)をブロックBLK#1のページP0に書き込む。
コマンドディスパッチャ22は、Zone#1内の次の書き込み位置をページP1に対応するLBAに変更する。
コマンドフェッチャ21はライトコマンドW14、ライトコマンドW15、ライトコマンドW16をホスト2からこの順序で受信し、ライトコマンドW14、ライトコマンドW15、ライトコマンドW16をリオーダ・コマンドバッファ23−1に格納する。そして、コマンドフェッチャ21は、ライトコマンドW14、ライトコマンドW15、ライトコマンドW16をライトコマンドW16、ライトコマンドW14、ライトコマンドW15という順序に並び替える。並び替えられたライトコマンドW16、ライトコマンドW14、ライトコマンドW15それぞれのオフセットとデータサイズとによって指定される連続する論理アドレスの先頭はZone#1内の次の書き込み位置(ここではoffset=4セクタ)に一致し、且つこれら連続する論理アドレスの長さは16KBである。従って、コマンドフェッチャ21は、並び替えられたライトコマンドW16、ライトコマンドW14、ライトコマンドW15をコマンドディスパッチャ22に送信する。
コマンドディスパッチャ22は、まず、DMAC15を使用して、ライトコマンドW16に関連付けられた、4KBのサイズを有するライトデータD3をホスト2のライトバッファ51から内部バッファ161に転送する。次いで、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW14に関連付けられた、4KBのサイズを有するライトデータD4をホスト2のライトバッファ51から内部バッファ161に転送する。そして、コマンドディスパッチャ22は、DMAC15を使用して、ライトコマンドW15に関連付けられた、8KBのサイズを有するライトデータD5をホスト2のライトバッファ51から内部バッファ161に転送する。この結果、Zone#1の5番目のセクタから書き込まれるべき、合計16KB分のサイズを有する3つのライトデータ(D3、D4、D5)を内部バッファ161に準備することができる。コマンドディスパッチャ22は、合計16KB分のサイズを有する3つのライトデータ(D3、D4、D5)をブロックBLK#1のページP1に書き込む。
このように、フラッシュマネジメント部20は、並び替えられた複数のライトコマンドによって指定される連続する論理アドレスの先頭がZone#1内の次の書き込み位置に一致し、且つこれら連続する論理アドレスの長さが最小書き込みサイズ以上である、という条件が満たされたか否かを判定する。そして、この条件が満たされた場合に、フラッシュマネジメント部20は、並び替えられた複数のライトコマンドに関連付けられた複数のライトデータを、複数のライトコマンドの並べ替えられた順序と同じ順序でホスト2のライトバッファ51から内部バッファ161に転送する。
これにより、合計サイズが最小書き込みサイズ以上である複数のライトデータを、複数のライトコマンドの並べ替えられた順序と同じ順序でホスト2のライトバッファ51から内部バッファ161に転送することができる。よって、内部バッファ161に転送されるこれらライトデータの順序は、Zone#1内のこれらライトデータの書き込み順序に一致する。したがって、Zone#1内の次の書き込み位置とは異なる位置に書き込まれるべき幾つかのライトデータによって内部バッファ161が長い時間専有されてしまうことを防止することができ、SSD3内に設けることが必要な内部バッファ161のサイズを削減できる。
さらに、ホスト2が同じゾーンに対するライトコマンドの発行順序を厳密に管理せずとも、各ゾーン内の書き込みをシーケンシャルに実行することが可能となる。
なお、Zone#1として使用される第1の記憶領域がQLCブロックによって実現されているケースにおいては、並び替えられた複数のライトコマンドそれぞれのオフセットとデータサイズとによって指定される連続する論理アドレスの先頭がZone#1内の次の書き込み位置に一致し、且つこれら連続する論理アドレスの長さがQLCブロックの最小書き込みサイズ(最小書き込みサイズ=4ページ、例えば64KB)以上である、という条件が満たされた場合に、並び替えられた複数のライトコマンドにそれぞれ対応する複数のライトデータの転送が開始される。
図11は、SSD3において実行される書き込み動作のシーケンスと読み出し動作のシーケンスを示すブロック図である。
以下では、各ゾーンとして使用される第1の記憶領域がQLCブロックによって実現される場合を想定する。QLCブロックは一つのQLC物理ブロックであってもよいし、複数のQLC物理ブロックの集合を含むQLCスーパーブロックであってもよい。以下、ゾーンとして使用される個々のQLCブロックをQLCゾーンと称する。
個々のQLCゾーンの状態は、オープン状態(オープンゾーン)、クローズ状態(クローズゾーン)、フル状態(フルゾーン)、エンプティ状態(エンプティゾーン)に大別される。
オープン状態のQLCゾーンは、データの書き込みが可能な書き込み先ゾーンとして割り当てられているゾーンである。フラッシュマネジメント部20は、オープン状態の各QLCゾーンを、オープンゾーンリスト101を使用して管理する。
クローズ状態のQLCゾーンは書き込みが中断されたQLCゾーンである。書き込みが中断されたQLCゾーンは、このQLCゾーンの論理アドレス範囲の一部分にのみデータが書き込まれているQLCゾーン、つまり部分的に書き込まれたQLCゾーンである、クローズ状態のQLCゾーンにおいては、データの書き込みに利用可能な論理アドレス範囲が残っている。フラッシュマネジメント部20は、クローズ状態の各QLCゾーンを、クローズゾーンリスト102を使用して管理する。
フル状態のQLCゾーンはそのゾーン全体がデータで満たされているゾーンである。フラッシュマネジメント部20は、フル状態の各QLCゾーンを、フルゾーンリスト103を使用して管理する。
エンプティ状態のQLCゾーンはリセットされたゾーンであり、フリーQLCブロックに相当する。フラッシュマネジメント部20は、エンプティ状態の各QLCゾーンを、エンプティゾーンリスト104を使用して管理する。
ホスト2はオープンゾーンコマンド(open request)をSSD3に送信する処理を繰り返し実行することにより、複数のQLCゾーンをオープン状態にすることできる。
フラッシュマネジメント部20がオープン状態のQLCゾーン#1にデータを書き込むためのライトコマンド(write request)それぞれをホスト2から受信した場合、フラッシュマネジメント部20は、DMAC15を使用して、各QLCゾーンの最小書き込みサイズ分のライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。そして、フラッシュマネジメント部20は、内部バッファ161に転送されたライトデータを、SLCバッファ201に書き込まずに、QLCゾーン#1のみに書き込む。
また、 フラッシュマネジメント部20がオープン状態のQLCゾーン#2にデータを書き込むためのライトコマンド(write request)それぞれをホスト2から受信した場合、フラッシュマネジメント部20は、DMAC15を使用して、QLCゾーンの最小書き込みサイズ分のライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。そして、フラッシュマネジメント部20は、内部バッファ161に転送されたライトデータを、SLCバッファ201に書き込まずに、QLCゾーン#2(QLC Zone#2)のみに書き込む。
あるオープン状態のQLCゾーンに対するデータの書き込みをしばらくの間実行しない場合、ホスト2は、このQLCゾーン用に確保されているホスト2のライトバッファ51内の領域を解放できるようにするために、このQLCゾーンをクローズ状態に遷移させるためのクローズゾーンコマンド(close request)をSSD3に送信する。
QLCゾーン#1を示す論理アドレスを指定するクローズゾーンコマンド(close request)をホスト2から受信した時、上述のリオーダ・コマンドバッファ23−1にはQLCゾーン#1への書き込みがまだ開始できないライトコマンドが格納されている可能性がある。QLCゾーン#1の次の書き込み位置から4ページ分の連続する論理アドレスを指定するライトコマンドの集合がリオーダ・コマンドバッファ23−1に蓄積されるまでは、これらライトコマンドそれぞれに関連付けられたライトデータはホスト2のライトバッファ51から内部バッファ161に転送されない場合があるためである。
フラッシュマネジメント部20は、QLCゾーン#1に対する受信済みの複数のライトコマンドに関連付けられた複数のライトデータのうち内部バッファ161に未転送の残りのライトデータを、DMAC15を使用して、ホスト2のライトバッファ51から内部バッファ161に転送する。フラッシュマネジメント部20は、内部バッファ161に転送された残りのライトデータを、QLCゾーン#1ではなく、QLCゾーン#1よりも最小書き込みサイズが小さいSLCバッファ201に書き込む。
したがって、残りのライトデータのサイズが各QLCゾーンの最小書き込みサイズ(4ページ)に満たない場合であっても、残りのライトデータを不揮発に記憶する処理を迅速に実行することが可能となる。
なお、QLCゾーン#1への書き込みが終了していないライトデータ、例えば、フォギー書き込み動作のみが終了しておりファイン書き込み動作が終了していないライトデータ、が内部バッファ161に存在する場合には、フラッシュマネジメント部20は、このライトデータも残りのライトデータと一緒にSLCバッファ201に書き込む。
QLCゾーン#1においては、ある4ページ分のライトデータの書き込み動作(フォギー・ファイン書き込み動作)は、このQLCゾーン#1に書き込まれる次の4ページ分のライトデータが受信された後に開始可能となる。したがって、もし上述の残りのライトデータをQLCゾーン#1に書き込む処理を実行したならば、残りのライトデータのうちの最後の4ページ分のライトデータの書き込みが完了しない場合ある。
この場合、この4ページ分のライトデータはQLCゾーン#1から読み出すことができない。したがって、この4ページ分のライトデータが格納されているホスト2のライトバッファ51内の領域を解放することができなくなる。
本実施形態では、上述のように、QLCゾーン#1への書き込みが終了していないライトデータと一緒に残りのライトデータの全てをSLCバッファ201に書き込むことができるので、QLCゾーン#1用に確保されているホスト2のライトバッファ51内の領域全てを解放することができる。
そして、フラッシュマネジメント部20は、QLC Zone#1をクローズ状態に遷移させる。この場合、フラッシュマネジメント部20は、QLC Zone#1をオープンゾーンリスト101から取り除き、クローズゾーンリスト102に加える。
SLCバッファ201は複数のSLCブロックを含んでいてもよい。フラッシュマネジメント部20は、残りのライトデータを、SLCバッファ201内のオープンされている書き込み先SLCブロック(open SLC)にメモリセル当たりに1ビットを書き込む書き込みモードで書き込む。書き込み先SLCブロック全体がデータで満たされると、フラッシュマネジメント部20は、この書き込み先SLCブロックをフル状態のSLCブロックとして管理する。
フラッシュマネジメント部20は、フル状態のSLCブロックの集合のうち、最も古いSLCブロックをSLCバッファ201のガベージコレクション(GC)のためのコピー元ブロックとして選択する。そして、フラッシュマネジメント部20は、コピー元ブロックに格納されている有効データをGC用の書き込み先SLCブロック(open SLC)にコピーする。そして、フラッシュマネジメント部20は、L2Pテーブル31を更新して、有効データがコピーされた書き込み先SLCブロック内の記憶位置を示す物理アドレスを、このコピーされた有効データの論理アドレスにマッピングする。コピー元ブロック内の全ての有効データのコピーが完了した場合、フラッシュマネジメント部20は、このコピー元ブロックを、有効データを含まないフリーSLCブロックとして管理する。
クローズ状態に遷移されたQLCゾーン#1は、データを書き込むために利用可能な残りのLBA範囲を含んでいる。したがって、ホスト2は、必要に応じて、クローズ状態のQLCゾーン#1内の利用可能な残りLBA範囲にデータを書き込むためのライトコマンドをSSD3に送信することができる。
クローズ状態のQLCゾーン#1にデータを書き込むための一つ以上のライトコマンドをホスト2から受信すると、フラッシュマネジメント部20は、SLCバッファ201に格納されているQLCゾーン#1用のライトデータをSLCバッファ201から読み出し、読み出したライトデータを内部バッファ161に格納する。これにより、QLCゾーン#1用のライトデータはSLCバッファ201から内部バッファ161に転送される。そして、SLCバッファ201から内部バッファ161に転送されたライトデータは、例えば、QLCゾーン#1用のデータを書き込むための後続の一つ以上のライトコマンドが受信された後に、QLCゾーン#1に書き込まれる。この場合、後続の一つ以上のライトコマンドに関連付けられたQLCゾーン#1用のライトデータがホスト2のライトバッファ51から内部バッファ161に転送される、そして、SLCバッファ201から内部バッファ161に転送されたライトデータは、ホスト2のライトバッファ51から内部バッファ161に転送されたQLCゾーン#1用のライトデータと一緒に、QLCゾーン#1に書き込まれる。
また、オープン状態、クローズ状態、またはフル状態であるQLCゾーンの各々に関して、フラッシュマネジメント部20は、このQLCゾーンの読み出し可能エリアと、このQLCゾーンから読み出し可能ではないデータが格納されている各記憶位置を示す記憶位置情報とをゾーン管理テーブル32を使用して管理する。
各記憶位置は、SLCバッファ201内の記憶位置、またはホスト2のライトバッファ51内の記憶位置のいずれかである。各記憶位置は、例えば、4KBのようなサイズを有するセクタの単位で管理されてもよい。
フラッシュマネジメント部20が、QLCゾーンとこのQLCゾーン内のオフセットとを示すLBAと、リード対象データのデータサイズとを指定するリードコマンド(read request)をホスト2から受信した場合、フラッシュマネジメント部20は、リード対象データに対応するLBA範囲がこのQLCゾーンの読み出し可能エリアに含まれているか否かを判定する。リード対象データに対応するLBA範囲は、リードコマンドによってそれぞれ指定されるオフセットとデータサイズとによって規定される。
リード対象データに対応するLBA範囲がこのQLCゾーンの読み出し可能エリアに含まれている場合、フラッシュマネジメント部20は、リード対象データをこのQLCゾーンから読み出し、読み出したリード対象データを、DMAC15を使用してホスト2にリードヒットデータとして送信する。
リード対象データに対応するLBA範囲がこのQLCゾーンの読み出し可能エリアに含まれていない場合、フラッシュマネジメント部20は、このQLCゾーンに対応する記憶位置情報に基づいて、リード対象データをSLCバッファ201、またはホスト2のライトバッファ51から読み出し、読み出したリード対象データを、DMAC15を使用してホスト2にリードヒットデータとして送信する。
なお、リード対象データをホスト2のライトバッファ51から読み出す処理においては、フラッシュマネジメント部20は、まず、DMAC15を使用して、リード対象データをホスト2のライトバッファ51から取得する。そして、フラッシュマネジメント部20は、取得したリード対象データを、DMAC15を使用して、ホスト2のリードバッファ52に転送する。
あるいは、フラッシュマネジメント部20は、リード対象データをホスト2のライトバッファ51から読み出す代わりに、リード対象データがSSD3内に存在しないことをホスト2に通知する処理だけを実行してもよい。この場合、フラッシュマネジメント部20は、リード対象データが存在するホスト2のライトバッファ51内の位置をホスト2に通知してもよい。
データで満たされているフル状態のQLCゾーンに関しては、このQLCゾーンのLBA範囲の全てが読み出し可能エリアとして管理される。
フル状態のQLCゾーンに格納されている全てのデータが利用されない不要データになった場合、ホスト2は、このQLCゾーンを示す論理アドレスを指定するリセットゾーンコマンド(reset request)をSSD3に送信することができる。このリセットゾーンコマンド(reset request)をホスト2から受信したことに応じて、フラッシュマネジメント部20は、このQLCゾーンの状態をエンプティ状態に遷移させる。
ホスト2がエンプティ状態のQLCゾーンにデータを書き込むことを望む場合、ホスト2は、このエンプティ状態のQLCゾーンを示す論理アドレスを指定するオープンゾーンコマンド(open request)をSSD3に送信する。このオープンゾーンコマンド(open request)をホスト2から受信したことに応じて、フラッシュマネジメント部20は、このQLCゾーンとして使用されているQLCブロックに対する消去動作を実行し、このQLCゾーンの状態をエンプティ状態からオープン状態に遷移させる。
図12は、SSD3において実行される書き込み動作の手順を示すフローチャートである。
SSD3のコントローラ4は、ライトコマンドそれぞれをホスト2から受信する(ステップS11)。これらライトコマンドの各々は、QLCゾーンとこのQLCゾーン内のオフセットとを示す論理アドレスと、ライトデータのデータサイズと、ライトデータが格納されているホスト2のライトバッファ51内の位置とを指定する。
コントローラ4は、受信したライトコマンドそれぞれを、オープン状態の複数のQLCゾーンに対応する複数のグループに分類する(ステップS12)。コントローラ4は、各QLCゾーン内の書き込みがシーケンシャルに実行されるように、同じグループに属するライトコマンドを、この同じグループに対応するリオーダ・コマンドバッファを使用することによって、並び替える。
以下では、QLCゾーン#1にデータを書き込むための複数のライトコマンドを並び替える動作について説明する。
QLCゾーン#1にデータを書き込むためのライトコマンド(第1のライトコマンド)の各々は、QLCゾーン#1と、ライトデータが書き込まれるべきQLCゾーン#1内のオフセットと、ライトデータのデータサイズと、ライトデータが格納されているホスト2のライトバッファ51内の位置とを指定する。
QLCゾーン#1は各第1のライトコマンドに含まれるLBAの上位ビット部によって指定され、QLCゾーン#1内のオフセットは、各第1のライトコマンドに含まれるLBAの下位ビット部によって指定される。
受信した複数の第1のライトコマンドの各々によって指定されるオフセットおよびデータサイズに基づいて、コントローラ4は、受信した複数の第1のライトコマンドを、QLCゾーン#1に対応するリオーダ・コマンドバッファ23−1を用いて、QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置からシーケンシャルに実行される順序に並び替える(ステップS13)。
コントローラ4は、QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置から最小書き込みサイズ分以上連続してシーケンシャルに実行可能か否かを判定する(ステップS14)。QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置から最小書き込みサイズ分以上連続してシーケンシャルに実行可能になるまで、ステップS11〜S13の処理が繰り返される。
ステップS14では、コントローラ4は、並び替えられた複数の第1のライトコマンドそれぞれのオフセットとデータサイズとによって指定される連続する論理アドレスの先頭がQLCゾーン#1内の次の書き込み位置に一致し且つこれら連続する論理アドレスの長さが最小書き込みサイズ以上であるという条件が満たされたか否かを判定してもよい。そして、この条件が満たされた場合、コントローラ4は、QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置から最小書き込みサイズ分以上連続してシーケンシャルに実行可能と判定してもよい。
QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置から最小書き込みサイズ分以上連続してシーケンシャルに実行可能になった場合(ステップS14のYES)、並び替えられた複数の第1のライトコマンドに基づいて、コントローラ4は、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータを、複数の第1のライトコマンドの並び替えられた順序と同じ順序で、ホスト2のライトバッファ51から内部バッファ161に転送する(ステップS15)。
そして、コントローラ4は、内部バッファ161に転送された複数のライトデータを、QLCゾーン#1として管理されている、複数のQLCブロックのうちの一つのQLCブロックに書き込む(ステップS16)。ステップS16では、コントローラ4は、QLCブロックへの一つのライトデータの書き込みが完了する度、書き込みが完了したライトデータに対応する第1のライトコマンドの完了を示す応答をホスト2に送信する。
2フェーズライトコンプリーションが適用される場合には、コントローラ4は、複数のライトコマンドの一つをホスト2から受信した場合、この一つのライトコマンドの受信の完了を示す第1の応答を上述の第1フェーズ完了メッセージとしてホスト2に送信し、QLCブロックへのライトデータの書き込みが完了した場合、このライトデータに対応するライトコマンドに対応する書き込みの完了を示す第2の応答を上述の第2フェーズ完了メッセージとしてホスト2に送信する。
なお、ステップS13においては、コントローラ4は、以下の処理を実行してもよい。
例えば、QLCゾーン#1に対応するリオーダ・コマンドバッファ23−1によってカバー可能なLBA範囲はQLCゾーン#1に割り当てられたLBA範囲よりも狭い場合を想定する。この場合、コントローラ4は、リオーダ・コマンドバッファ23−1によってカバーされているLBA範囲をQLCゾーン#1の書き込み可能LBA範囲として管理する。QLCゾーン#1内の書き込みが進行するに連れて、リオーダ・コマンドバッファ23−1によってカバーされるLBA範囲は、QLCゾーン#1のLBA範囲の先頭から終端に向けて移動する。したがって、リオーダ・コマンドバッファ23−1によってカバーされている現在のLBA範囲よりもQLCゾーン#1の終端側に位置するLBAをオフセットとして指定する第1のライトコマンドを受信した場合、コントローラ4は、この第1のライトコマンドをリオーダ・コマンドバッファに格納せずに、この第1のライトコマンドに対する一時的エラーを示す応答をホスト2に送信する。
これにより、リオーダ・コマンドバッファ23−1に格納されることが許可されるライトコマンドをQLCゾーン#1の現在の書き込み可能LBA範囲に属する各第1のライトコマンドのみに制限でき、この結果、QLCゾーン#1の書き込みがシーケンシャルに実行されるようにするためのライトコマンド並べ替えを効率よく実行することができる。
上述したように、QLCゾーン#1への書き込みが進行するに連れて、リオーダ・コマンドバッファによってカバーされる現在のLBA範囲は移動する。したがって、エラーとなった上述のライトコマンドによって指定される特定のLBAは、いずれ、リオーダ・コマンドバッファによってカバーされる現在のLBA範囲に含まれることになる。この後、上述の特定のLBAをオフセットとして指定する第1のライトコマンドがホスト2から再び受信した場合、コントローラ4は、この受信した第1のライトコマンドを正常に処理することができる。
図13は、クローズゾーンコマンドの受信に応じてSSD3において実行される動作の手順を示すフローチャートである。
オープンされているQLCゾーン(例えば、QLCゾーン#1)を書き込みが中断されたクローズ状態に遷移させるためのクローズゾーンコマンドをホスト2から受信した場合(ステップS21のYES)、コントローラ4は、QLCゾーン#1に対する受信済みの複数のライトコマンドに関連付けられている複数のライトデータのうち内部バッファ161に未転送の残りのライトデータをホスト2のライトバッファ51から取得し、取得したライトデータを内部バッファ161に格納する(ステップS22)。
オープンされているQLCゾーン(例えば、QLCゾーン#1)を書き込みが中断されたクローズ状態に遷移させるためのクローズゾーンコマンドをホスト2から受信した場合(ステップS21のYES)、コントローラ4は、QLCゾーン#1に対する受信済みの複数のライトコマンドに関連付けられている複数のライトデータのうち内部バッファ161に未転送の残りのライトデータをホスト2のライトバッファ51から取得し、取得したライトデータを内部バッファ161に格納する(ステップS22)。
コントローラ4は、クローズ状態に遷移させるべきQLCゾーン#1に書き込むべき残りのライトデータ全てを不揮発に記憶する処理を迅速に実行するために、取得したライトデータをQLCゾーン#1ではなく、SLCバッファ201に書き込む(ステップS23)。ステップS23では、QLCゾーン#1へのファイル書き込み動作が完了していない内部バッファ121内のライトデータもSLCバッファ201に書き込まれる。そして、コントローラ4は、QLCゾーン#1の状態をクローズ状態に遷移させる(ステップS24)。
次いで、コントローラ4は、SLCバッファ201に書き込まれた各ライトデータに対応する各ライトコマンドの完了を示す応答と、クローズゾーンコマンドの完了を示す応答とをホスト2に送信する(ステップS25)。
これにより、ホスト2は、QLCゾーン#1用に確保されデータホスト2のライトバッファ51内の領域を解放することが可能となる。
図14は、クローズ状態のQLCゾーンに対するライトコマンドの受信に応じてSSD3において実行される動作の手順を示すフローチャートである。
クローズ状態のQLCゾーン(例えば、QLCゾーン#1)にデータを書き込むためのライトコマンドをホスト2から受信した場合(ステップS31のYES)、コントローラ4は、QLCゾーン#1を再オープンし、QLCゾーン#1の状態をクローズ状態からオープン状態に遷移させる(ステップS32)。
そして、コントローラ4は、SLCバッファ201に格納されているQLCゾーン#1用のライトデータをSLCバッファ201から内部バッファ161に転送し(ステップS33)、SLCバッファ201から内部バッファ161に転送されたライトデータとホスト2のライトバッファ51から新たに転送されるQLCゾーン#1用のライトデータとをQLCゾーン#1に書き込むための書き込み処理を実行する(ステップS34)。
図15は、各ゾーンのアクセスリミットをホスト2からSSD3に通知する処理の例を示すシーケンスチャートである。
ゾーンアクセスリミットは、ゾーンへのライトアクセス(書き込み)の開始からこのゾーンがフル状態になるまでの時間(制限時間)を意味する。あるゾーンに対する書き込みの開始からこのゾーンがフル状態になるまでの時間があまりに長いと、このゾーンとして使用されるNAND型フラッシュメモリ5のブロックの信頼性が保証できなくなる場合がある。このため、通常、ゾーンアクセスリミットはある閾値(閾時間)以下に制限される。
しかしながら、例えば、異なるQLCゾーンを異なるアプリケーション(または異なるクライアント)による書き込みに使用するケースにおいては、あるアプリケーション(またはあるクライアント)からのデータ書き込みの頻度が低いまたはあるアプリケーション(またはあるクライアント)からのデータ書き込み量が少ない場合には、このアプリケーションによって使用されているQLCゾーンに対する書き込み速度が遅くなる場合がある。この場合、このQLCゾーンのゾーンアクセスリミットは制限時間(閾時間)よりも長くなる可能性がある。
ゾーンがフル状態になる前に、このゾーンへの書き込み開始からの経過時間がゾーンアクセスリミットに達してしまった場合、コントローラ4は、このゾーンをフル状態に遷移させることを推奨する通知をホスト2に送信してもよい。あるいは、コントローラ4は、このゾーンを強制的にフル状態に遷移させる処理を実行してもよい。しかし、いずれにせよ、ゾーンへの書き込み開始からの経過時間がゾーンアクセスリミットを超えると、このゾーンに対応するNAND型フラッシュメモリ5のブロックの信頼性が低下されるか、もしくはこのブロックへの後続の書き込みが正常に実行できなくなる場合がある。
このため、コントローラ4は、データ書き込み頻度が低いまたはデータ書き込み量が少ない特定のQLCゾーンに対するライトコマンドそれぞれをリオーダ・コマンドバッファ内に維持することによって、この特定のQLCゾーンに対する書き込みの開始を遅らせる機能を有している。この特定のQLCゾーンは「スロー書き込みのゾーン」としても参照される。
より詳しくは、ホスト2によって指定されるあるQLCゾーン(例えばQLCゾーン#1)のゾーンアクセスリミット(QLCゾーン#1へのライトアクセスの開始からこのQLCゾーン#1全体がデータで満たされるまでの時間)が、閾値よりも長い場合、コントローラ4は、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計がこのQLCゾーン#1(スロー書き込みのゾーン)の容量に達するまで、もしくはこのQLCゾーン#1をフル状態に遷移させる指示(フィニッシュゾーンコマンド)をホスト2から受信するまで、このQLCゾーン#1への書き込みを開始しない。
並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計がこのQLCゾーン#1(スロー書き込みのゾーン)の容量に達した後、もしくはこのQLCゾーン#1をフル状態に遷移させる指示(フィニッシュゾーンコマンド)をホスト2から受信した場合、コントローラ4は、ホスト2のライトバッファ51から内部バッファ161へのこれら複数のライトデータの転送を開始する。
そして、コントローラ4は、内部バッファ161に転送された複数のライトデータをこのQLCゾーン#1として使用される第1の記憶領域(QLCブロック)に書き込むことによって、第1の記憶領域(QLCブロック)を、この第1の記憶領域(QLCブロック)全体がデータで満たされたフル状態に設定する。
並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計がこのQLCゾーン#1の容量に達する前に、QLCゾーン#1をフル状態に遷移させる指示(フィニッシュゾーンコマンド)をホスト2から受信した場合、コントローラ4は、これら複数のライトデータと、コントローラ4によって生成されたダミーデータとをこのQLCゾーン#1として使用される第1の記憶領域(QLCブロック)に書き込むことによって、第1の記憶領域(QLCブロック)を、この第1の記憶領域(QLCブロック)全体がデータで満たされたフル状態に設定する。
より詳しくは、例えば、以下の動作が実行される。
並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計がこのQLCゾーン#1(スロー書き込みのゾーン)の容量に達した場合、コントローラ4は、このQLCゾーン#1として使用されている第1の記憶領域(QLCブロック)に対する消去動作を行う。これにより、このQLCゾーン#1はオープン状態となる。
そして、コントローラ4は、ホスト2のライトバッファ51から内部バッファ161へこれら複数のライトデータを転送し、内部バッファ161に転送された複数のライトデータをこのQLCゾーン#1として使用される第1の記憶領域(QLCブロック)に書き込む。
これにより、QLCブロックが部分的に書き込まれた状態に維持される期間(例えば、QLCブロックがオープンされてからフル状態になるまでの期間)を延ばすことなく、このQLCブロックに対応するQLCゾーンのゾーンアクセスリミットを延長することが可能となる。なお、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計がこのQLCゾーン#1の容量に達する前に、QLCゾーン#1をフル状態に遷移させる指示(フィニッシュゾーンコマンド)をホスト2から受信した場合は、これら複数のライトデータのみによってQLCゾーン#1をフル状態にすることができないので、コントローラ4は、これら複数のライトデータとコントローラ4によって生成されたダミーデータとを、このQLCゾーン#1として使用される第1の記憶領域(QLCブロック)に書き込む。
コントローラ4は、ゾーンアクセスリミットを延長すべきQLCゾーンに対応するリオーダ・コマンドバッファのサイズをこのリオーダ・コマンドバッファによってカバーされるLBA範囲がこのQLCゾーンのLBA範囲にまで増えるように増加させ、代わりに、ゾーンアクセスリミットを延長する必要がない他の各QLCゾーンに対応するリオーダ・コマンドバッファのサイズを減少させてもよい。
ホスト2は、QLCゾーン毎にゾーンアクセスリミットをコントローラ4に通知してもよい。この場合、図15に示されているように、ホスト2は、まず、QLCゾーン#1のゾーンアクセスリミットをSSD3に対して指定する(ステップS41)。次いで、ホスト2は、QLCゾーン#2のゾーンアクセスリミットをSSD3に対して指定し(ステップS42)、QLCゾーン#3のゾーンアクセスリミットをSSD3に対して指定する(ステップS43)。同様にして、ホスト2は、QLCゾーン#NのゾーンアクセスリミットをSSD3に対して指定する(ステップS44)。
なお、ホスト2は、ゾーンアクセスリミットを示すパラメータを含むオープンゾーンコマンドをSSD3に送信することによって、オープン状態に遷移させるべきゾーンのゾーンアクセスリミットをSSD3に対して指定してもよい。
図16は、長いゾーンアクセスリミットを有するゾーンにデータを書き込むための書き込み動作の手順を示すフローチャートである。
例えば、QLCゾーン#1を指定するオープンゾーンコマンドをホスト2から受信した場合を想定する。
コントローラ4がQLCゾーン#1を指定するオープンゾーンコマンドをホスト2から受信した場合(ステップS51のYES)、コントローラ4は、QLCゾーン#1に対応するゾーンアクセスリミットが閾値よりも長いか否か、つまりQLCゾーン#1がスロー書き込みのゾーンであるか否かを判定する(ステップS52)。
QLCゾーン#1に対応するゾーンアクセスリミットがこの閾値よりも長くない場合(ステップS52のNO)、コントローラ4は、QLCゾーン#1に対する書き込み処理を図12のフローチャートで説明した書き込み処理と同じ手順で実行する。この場合、コントローラ4は、まず、QLCゾーン#1に対する消去動作を実行することによってQLCゾーン#1をオープン状態に遷移させてもよい。この後、コントローラ4は、図12のフローチャートで説明した書き込み処理を開始してもよい。
一方、QLCゾーン#1のゾーンアクセスリミットがこの閾値よりも長い場合(ステップS53のYES)、コントローラ4は、リオーダ・コマンドバッファ23−1に格納可能なライトコマンドの最大数に基づいて定められるQLCゾーン#1の書き込み可能LBA範囲がQLCゾーン#1の全LBA範囲に達するようにリオーダ・コマンドバッファ23−1に割り当てられる記憶容量を動的に増やし、そして以下の処理を実行する。
すなわち、コントローラ4は、QLCゾーン#1を示す論理アドレスを指定する複数の第1のライトコマンドそれぞれをホスト2から受信し、これら複数の第1のライトコマンドの全てをリオーダ・コマンドバッファ23−1に格納する(ステップS53)。ステップS53では、コントローラ4は、これら複数の第1のライトコマンドを、QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置(ここではQLCゾーン#1の開始LBA)からシーケンシャルに実行される順序に並び替え、並び替えられた複数の第1のライトコマンドをリオーダ・コマンドバッファ23−1内に維持する。
コントローラ4は、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計がQLCゾーン#1の容量に達したか否かを判定する(ステップS54)。並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計がQLCゾーン#1の容量に達するまで、コントローラ4は、ステップS53の処理を繰り返し実行する。
並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計がQLCゾーン#1の容量に達した場合(ステップS54のYES)、コントローラ4は、QLCゾーン#1のゾーン容量のサイズを有する複数のライトデータをホスト2のライトバッファ61から内部バッファ161に最小書き込みサイズの単位で転送する(ステップS55)。
ステップS55では、コントローラ4は、まず、QLCゾーン#1に対する消去動作を実行することによってQLCゾーン#1をオープン状態に遷移させてもよい。この後、コントローラ4は、QLCゾーン#1のゾーン容量のサイズを有する複数のライトデータをホスト2のライトバッファ61から内部バッファ161に最小書き込みサイズの単位で転送してもよい。
そして、コントローラ4は、内部バッファ161に転送された複数のライトデータをQLCゾーン#1として使用されている第1の記憶領域に書き込むことによって、QLCゾーン#1として使用されている第1の記憶領域を第1の記憶領域全体がデータで満たされたフル状態に設定する(ステップS56)。
上記の例では、ホスト2からコントローラ4に通知されるゾーンアクセスリミットが個々のゾーンのゾーンアクセスリミットの値(例えば時間)を示す場合を例示したが、ホスト2は、コントローラ4に個々のゾーンのゾーンアクセスリミットに関する特性(例えば、「ロングアクセスリミット」、「通常アクセスリミット」、等)を通知してもよい。あるゾーンが、このゾーンへの書き込み開始からこのゾーン全体がデータで満たされるまでの時間が閾値よりも長いゾーンである場合、ホスト2は、このゾーンに対してロングアクセスリミットの特性を指定してもよい。あるゾーンが、このゾーンへの書き込み開始からこのゾーン全体がデータで満たされるまでの時間がこの閾値以下のゾーンである場合、ホスト2は、このゾーンに対して通常アクセスリミットの特性を指定してもよい。
つまり、あるゾーンが、このゾーンへの書き込み開始からこのゾーン全体がデータで満たされるまでの時間が閾値よりも長いゾーンであることがゾーンアクセスリミットの値またはゾーンアクセスリミットに関する特性を用いてホスト2によって指定された場合、コントローラ4は、図16で説明したステップS53〜S56の処理を実行する。
なお、以上の説明では、ホスト2が、これから使うQLCゾーンのアクセスリミットの値(またはアクセスリミットに関する特性)を指定できる場合を想定したが、アプリケーションによっては、ゾーンのアクセスリミットの値(またはアクセスリミットに関する特性)を推定できない場合がある。
あるゾーンのアクセスリミットの値(またはアクセスリミットに関する特性)が不明である場合には、コントローラ4は、このゾーンに対して以下の処理を実行する。
そのようなゾーンに対しては、最初は、アクセスリミットが閾値を下回る場合と同じ方法で、記録を開始する。その後、フル状態、あるいはゾーンフィニッシュコマンドを受ける前に、例えば、あるゾーン(例えば第1のゾーン)への書き込み開始からの経過時間が閾値に達した場合、コントローラ4は、第1のゾーンとして管理されている一つの第1の記憶領域(QLCブロック)にダミーデータを書き込むことによってこの一つの第1の記憶領域(QLCブロック)を、この一つの第1の記憶領域(QLCブロック)全体がデータで満たされた状態に設定する。そして、コントローラ4は、この一つの第1の記憶領域に書き込み済みのライトデータのデータサイズと、第1のゾーンを指定する受信済みの第1のライトコマンドに関連付けられた複数のライトデータのうち内部バッファ161に未転送の残りのライトデータのデータサイズと、第1のゾーンを指定する後続する複数の第1のライトコマンドに関連付けられた後続のライトデータのデータサイズとの合計が第1のゾーンの容量に達するまで、待つ。
書き込み済みのライトデータのデータサイズと残りのライトデータのデータサイズと指定後続のライトデータのデータサイズとの合計が第1のゾーンの容量に達した後、コントローラ4は、第1のゾーンとして管理されている一つの第1の記憶領域から、既に書き込み済みのライトデータを読み出し、残りのライトデータと後続のライトデータとをホスト2のライトバッファ51から内部バッファ161へ転送し、書き込み済みのライトデータと、内部バッファ161に転送された残りのライトデータと後続のライトデータとを、第1のゾーンとして管理されるべき別の一つの第1の記憶領域(QLCブロック)に書き込むことよって、別の一つの第1の記憶領域(QLCブロック)を、別の一つの第1の記憶領域(QLCブロック)全体がデータで満たされた状態に設定する。
このように、第1のゾーンへの書き込み開始からの経過時間が閾値に達した後は、この一つの第1の記憶領域に書き込み済みのライトデータのデータサイズと、内部バッファ161に未転送の残りのライトデータのデータサイズと、第1のゾーンを指定する後続する複数の第1のライトコマンドに関連付けられた後続のライトデータのデータサイズとの合計が第1のゾーンの容量に達するまでは、第1のゾーンへの書き込みは開始されない。したがっデータとえスロー書き込みのゾーンであるか否かが不明のゾーンに関しても、このゾーンへの書き込み開始からの経過時間が閾値に達したことをトリガに、このゾーンの書き込みの開始を遅らせる処理を実行することが可能となる。
あるいは、コントローラ4は、書き込み済みのライトデータと、内部バッファ161に転送された残りのライトデータと後続のライトデータとを別の一つの第1の記憶領域(QLCブロック)に書き込む代わりに、ダミーデータが書き込まれた一つの第1の記憶領域(QLCブロック)に、書き込み済みのライトデータと、内部バッファ161に転送された残りのライトデータと後続のライトデータとを書き込んでもよい。この場合には、コントローラ4は、ダミーデータが書き込まれた一つの第1の記憶領域(QLCブロック)から書き込み済みデータをSLCバッファ201等にコピーすることによって、この一つの第1の記憶領域(QLCブロック)を、有効データを含まない状態(エンプティ状態またはフリー状態としても参照される)に設定する。これにより、この一つの第1の記憶領域(QLCブロック)は新たなデータの書き込みに利用可能となる。そして、コントローラ4は、この一つの第1の記憶領域(QLCブロック)をオープンし、SLCバッファ201等にコピーされた書き込み済みのライトデータと、内部バッファ161に転送された残りのライトデータと後続のライトデータとを、この一つの第1の記憶領域(QLCブロック)に書き込むことによって、この一つの第1の記憶領域(QLCブロック)を、この一つの第1の記憶領域(QLCブロック)全体がデータで満たされた状態に設定する。
あるいは、第1のゾーンへの書き込み開始からの経過時間が閾値に達した場合、コントローラ4は、第1のゾーンとして管理されている一つの第1の記憶領域(QLCブロック)に既に書き込み済みのライトデータを一つの第1の記憶領域(QLCブロック)からSLCバッファ201等にコピーすることによって一つの第1の記憶領域(QLCブロック)を有効データが格納されていない状態に設定する。コントローラ4は、この書き込み済みのライトデータのデータサイズと、第1のゾーンを指定する受信済みの第1のライトコマンドに関連付けられた複数のライトデータのうち内部バッファ161に未転送の残りのライトデータのデータサイズと、第1のゾーンを指定する後続する複数の第1のライトコマンドに関連付けられた後続のライトデータのデータサイズとの合計が第1のゾーンの容量に達した後、残りのライトデータと後続のライトデータとをホスト2のライトバッファ51から内部バッファ161へ転送する。そして、コントローラ4は、一つの第1の記憶領域(QLCブロック)をオープンし、SLCバッファ201等にコピーされた書き込み済みのライトデータと、内部バッファ161に転送された残りのライトデータと後続のライトデータとを、この一つの第1の記憶領域に書き込むことよって、この一つの第1の記憶領域を、一つの第1の記憶領域全体がデータで満たされた状態に設定してもよい。
以下、具体的に説明する。
例えば、QLCゾーン#1のアクセスリミットの値(またはアクセスリミットに関する特性)が不明である場合、コントローラ4は、最初は、このQLCゾーン#1を通常アクセスリミットのゾーンとして扱い、QLCゾーン#1に対する書き込み処理を図12のフローチャートで説明した書き込み処理と同様の手順で実行する。この場合、コントローラ4は、まず、QLCゾーン#1に対する消去動作を実行することによってQLCゾーン#1をオープン状態に遷移させてもよい。この後、コントローラ4は、図12のフローチャートで説明した書き込み処理を開始してもよい。
例えば、QLCゾーン#1のアクセスリミットの値(またはアクセスリミットに関する特性)が不明である場合、コントローラ4は、最初は、このQLCゾーン#1を通常アクセスリミットのゾーンとして扱い、QLCゾーン#1に対する書き込み処理を図12のフローチャートで説明した書き込み処理と同様の手順で実行する。この場合、コントローラ4は、まず、QLCゾーン#1に対する消去動作を実行することによってQLCゾーン#1をオープン状態に遷移させてもよい。この後、コントローラ4は、図12のフローチャートで説明した書き込み処理を開始してもよい。
そして、QLCゾーン#1がライトデータで満たされてフル状態になる前に、QLCゾーン#1への書き込み開始からの経過時間がゾーンアクセスリミットに達した場合、あるいは、QLCゾーン#1への書き込み開始からの経過時間がゾーンアクセスリミットに達しても、QLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をホスト2から受信しなかった場合、コントローラ4は、このQLCゾーン#1にダミーデータを書き込むことによってこのQLCゾーン#1を内部的にフル状態に遷移させる。
コントローラ4は、このQLCゾーン#1はスロー書き込みのゾーン、つまりロングアクセスリミットのゾーンであると判定する。そして、コントローラ4は、このQLCゾーン#1を指定する後続の第1のライトコマンドそれぞれをリオーダ・コマンドバッファ23−1内に維持することによって、このQLCゾーン#1に対するアクセスリミットを見かけ上延長し、ホスト2からはQLCゾーン#1が継続してオープン状態であるように見せる。
より詳しくは、あるQLCゾーン(例えばQLCゾーン#1)のゾーンアクセスリミット(QLCゾーン#1へのライトアクセスの開始からこのQLCゾーン#1全体がデータで満たされるまでの時間)までに、ホスト2が、このQLCゾーン#1全体を満たすのに必要なライトコマンドの集合をSSD3に発行しなかった、もしくは、QLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をSSD3に発行しなかった場合、コントローラ4は、QLCゾーン#1にダミーデータを書き込み、QLCゾーン#1を内部的にフル状態にする。
つまり、コントローラ4は、QLCゾーン#1として使用される第1の記憶領域(QLCブロック)にダミーデータを追加的に書き込むことによって、この第1の記憶領域(QLCブロック)を、この第1の記憶領域(QLCブロック)全体がデータで満たされた状態にする。なお、この時、コントローラ4は、最小書き込みサイズに満たないサイズのライトデータの書き込みを要求するライトコマンド、もしくはQLCゾーン#1内の書き込みがシーケンシャルに実行できないライトコマンドを、リオーダ・コマンドバッファ23−1に維持する。
さらに、コントローラ4は、QLCゾーン#1を指定する後続の第1のライトコマンドそれぞれをホスト2から受信する処理と、これら後続の第1のライトコマンドをリオーダ・コマンドバッファ23−1に格納する処理とを継続して実行する。これにより、ホスト2からはQLCゾーン#1が継続してオープン状態であるように見える。
次いで、コントローラ4は、QLCゾーン#1として使用されるべき別の第1の記憶領域(QLCブロック)を決定する。この時、コントローラ4は、決定した別の第1の記憶領域(QLCブロック)のサイズを求めてもよく、さらに、必要であれば、QLCゾーン#1の容量を更新してもよい。
そして、コントローラ4は、QLCゾーン#1に既に書き込み済みのライトデータのデータサイズと、リオーダ・コマンドバッファ23−1に格納されている並び替えられた複数の第1のライトコマンドに関連付けられたライトデータのデータサイズとの合計が、このQLCゾーン#1の容量に達するまで、あるいは、このQLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をホスト2から受信するまで、このQLCゾーン#1への書き込み、つまりこのQLCゾーン#1として使用される別の第1の記憶領域(QLCブロック)の書き込み、を開始しない。
QLCゾーン#1に既に書き込み済みのライトデータのデータサイズとリオーダ・コマンドバッファ23−1に格納されている並び替えられた複数の第1のライトコマンドに関連付けられたライトデータのデータサイズとの合計がこのQLCゾーン#1の容量に達した場合、もしくはこのQLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をホスト2から受信した場合、コントローラ4は、内部的にフル状態にしたQLCゾーン#1からこのQLCゾーン#1に書き込み済みのライトデータを読み出し、読み出した書き込み済みのライトデータを内部バッファ161に転送する。この場合、具体的には、コントローラ4は、内部的にフル状態にしたQLCゾーン#1として元々使用されデータ第1の記憶領域(QLCブロック)からこの書き込み済みのライトデータを読み出して、内部バッファ161に転送する。
さらに、コントローラ4は、リオーダ・コマンドバッファ23−1に格納されている並び替えられた複数の第1のライトコマンドに関連付けられた全てのライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。並び替えられた複数の第1のライトコマンドに関連付けられたライトデータには、第1のゾーンを指定する受信済みの第1のライトコマンドに関連付けられた複数のライトデータのうち内部バッファ161に未転送の残りのライトデータと、第1のゾーンを指定する後続する複数の第1のライトコマンドに関連付けられた後続のライトデータとが含まれる。
なお、QLCゾーン#1に既に書き込み済みのライトデータのデータサイズと並び替えられた複数の第1のライトコマンドに関連付けられたライトデータのデータサイズとの合計がQLCゾーン#1の容量に達する前に、QLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をホスト2から受信した場合には、QLCゾーン#1に既に書き込み済みのライトデータのデータサイズと並び替えられた複数の第1のライトコマンドに関連付けられたライトデータのデータサイズとの合計はQLCゾーン#1をフル状態にするために必要なサイズに満たない。したがって、この場合には、コントローラ4は、不足するサイズ分のダミーデータを内部バッファ161に転送する。
そして、コントローラ4は、このQLCゾーン#1として使用される別の第1の記憶領域(QLCブロック)をオープンし、そして内部バッファ161に転送された全てのデータを、この別の第1の記憶領域(QLCブロック)に書き込むことによって、この別の第1の記憶領域(QLCブロック)を、この別の第1の記憶領域(QLCブロック)全体がデータで満たされたフル状態に設定する。その後、コントローラ4は、フルゾーンリスト103を使用して、この別の第1の記憶領域(QLCブロック)をフル状態のQLCゾーン#1として管理する。QLCゾーン#1として元々使用されデータ第1の記憶領域(QLCブロック)は解放され、例えば、別のゾーン用の第1の記憶領域(QLCブロック)として使用される。
これにより、QLCブロックが部分的に書き込まれた状態に維持される期間(例えば、QLCブロックがオープンされてからフル状態になるまでの期間)を延ばすことなく、QLCゾーン#1のゾーンアクセスリミットを延長することが可能となる。
コントローラ4は、ゾーンアクセスリミットを延長すべきQLCゾーンに対応するリオーダ・コマンドバッファのサイズをこのリオーダ・コマンドバッファによってカバーされるLBA範囲がこのQLCゾーンのLBA範囲にまで増えるように増加させ、代わりに、ゾーンアクセスリミットを延長する必要がない他の各QLCゾーンに対応するリオーダ・コマンドバッファのサイズを減少させてもよい。
前述の図15において、ホスト2によって指定されるゾーンアクセスリミットが、ゾーンアクセスリミットが不明であることを示す特定のパラメータを指定ができるようにしてもよい。この場合、コントローラ4は、ゾーンアクセスリミットが不明であることが通知されたゾーンに対して上述の処理を実行することができる。
図17は、ゾーンアクセスリミットが不明であると指定されたゾーンにデータを書き込むための書き込み動作の手順を示すフローチャートである。
例えば、QLCゾーン#1を指定するオープンゾーンコマンドをホスト2から受信した場合を想定する。
コントローラ4がQLCゾーン#1を指定するオープンゾーンコマンドをホスト2から受信した場合(ステップS51’のYES)、コントローラ4は、QLCゾーン#1に対応するゾーンアクセスリミットが閾値よりも長いか否か(つまりQLCゾーン#1がスロー書き込みのゾーンであるか否か)、あるいはゾーンアクセスリミットが不明であるか否かを判定する(ステップS52’、ステップS52B)。
QLCゾーン#1に対応するゾーンアクセスリミットがこの閾値よりも長い場合(ステップS52’のYES)、処理は、図16のフローチャートのS53に進む。
QLCゾーン#1に対応するゾーンアクセスリミットがこの閾値より長くない場合(ステップS52’のNO)、コントローラ4は、QLCゾーン#1のゾーンアクセスリミットが不明であることがホスト2によって指定されたか否かを判定する(ステップS52B)。
QLCゾーン#1のゾーンアクセスリミットが不明であることがホスト2によって指定されなかった場合(ステップS52BのNO)、つまりQLCゾーン#1のゾーンアクセスリミットが通常のゾーンアクセスリミットである場合、コントローラ4は、図12で説明した書き込み処理を実行する。
QLCゾーン#1のゾーンアクセスリミットが不明であることがホスト2によって指定された場合(ステップS52BのYES)、コントローラ4は、図12で説明した書き込み処理を実行する代わりに、図18のフローチャートに示される書き込み処理を実行する。
図18のフローチャートに示される書き込み処理と図12のフローチャートに示される書き込み処理との間の主な違いは、図18の書き込み処理においては、図12の書き込み処理に加え、ステップS17の処理とステップS18の処理が追加されている点である。
図18のステップS17では、コントローラ4は、QLCゾーン#1の書き込み開始からの経過時間がQLCゾーン#1がフル状態になる前に閾値(アクセスリミット)に達したか否かを判定する。この経過時間は、例えば、QLCゾーン#1がオープンされてからの経過時間を示す。
QLCゾーン#1がオープンされてからの経過時間がアクセスリミットに達するまでは、コントローラ4は、図12のフローチャートで説明したステップS11〜S13の処理を実行し、これによってQLCゾーン#1にデータを書き込むための複数の第1のライトコマンドを、QLCゾーン#1に対応するリオーダ・コマンドバッファ23−1を用いて、QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置からシーケンシャルに実行される順序に並び替える。そして、コントローラ4は、図18のステップS14’において、QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置から最小書き込みサイズ分以上連続してシーケンシャルに実行可能か否か、またはQLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をホスト2から受信したか否かを判定する。QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置から最小書き込みサイズ分以上連続してシーケンシャルに実行可能になるまで、あるいは、QLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をホスト2から受信するまで、ステップS11〜S13の処理が繰り返される。
QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置から最小書き込みサイズ分以上連続してシーケンシャルに実行可能になった場合、あるいは、QLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をホスト2から受信した場合(ステップS14’のYES)、並び替えられた複数の第1のライトコマンドに基づいて、コントローラ4は、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータを、複数の第1のライトコマンドの並び替えられた順序と同じ順序で、ホスト2のライトバッファ51から内部バッファ161に転送する(ステップS15)。そして、コントローラ4は、内部バッファ161に転送された複数のライトデータを、QLCゾーン#1として使用されている第1の記憶領域(QLCブロック)に書き込む(ステップS16’)。最小書き込みサイズに満たないサイズのライトデータの書き込みを要求するライトコマンド、もしくはQLCゾーン#1内の書き込みがシーケンシャルに実行できないライトコマンドがリオーダ・コマンドバッファ23−1に存在する場合には、コントローラ4は、これらライトコマンドをリオーダ・コマンドバッファ23−1内に維持する。
QLCゾーン#1をフル状態に遷移させる要求(フィニッシュゾーンコマンド)をホスト2から受信した場合には、コントローラ4は、ステップS16’において、さらに、ダミーデータを加えることにより、最小書き込みサイズに満たないサイズのライトデータを最小書き込みサイズにし、シーケンシャル書き込みできないライトデータをシーケンシャル書き込みできるようにし、ゾーンフルにするのに必要な書き込みデータを確保して、QLCゾーン#1として使用されている第1の記憶領域(QLCブロック)に書き込み、これによってQLCゾーン#1として使用されている第1の記憶領域(QLCブロック)をこの第1の記憶領域(QLCブロック)全体がデータで満たされた状態に設定する。この結果、QLCゾーン#1は内部的にフル状態となる。
なお、図12のステップS14、ステップS16において、図18で説明したステップS14’、ステップS16’の処理がそれぞれ実行されてもよい。
また、ホスト2が、ゾーンオープン後、まったくライトコマンドを送らずに、ゾーンフィニッシュコマンドを送った場合は、コントローラ4は、QLCゾーン#1を全てダミーデータで埋めてもよいし、あるいはまったくQLCゾーン#1には記録せず、第1の記憶領域は別のゾーン用に用いて、論理的には、QLCゾーン#1がフル状態であるように見せてもよい。
図18の書き込み処理の実行中に、QLCゾーン#1の書き込み開始からの経過時間が閾値(アクセスリミット)に達した場合(ステップS17のYES)、コントローラ4は、ダミーデータを、QLCゾーン#1として使用されている第1の記憶領域(QLCブロック)に書き込み、これによってQLCゾーン#1として使用されている第1の記憶領域(QLCブロック)をこの第1の記憶領域(QLCブロック)全体がデータで満たされた状態に設定する(ステップS18)。この結果、QLCゾーン#1は内部的にフル状態となる。最小書き込みサイズに満たないサイズのライトデータの書き込みを要求するライトコマンド、もしくはQLCゾーン#1内の書き込みがシーケンシャルに実行できないライトコマンドがリオーダ・コマンドバッファ23−1に存在する場合には、コントローラ4は、これらライトコマンドをリオーダ・コマンドバッファ23−1内に維持する。
ステップS18では、さらに、コントローラ4は、QLCゾーン#1として使用すべき別の第1の記憶領域(QLCブロック)を決定する。別の第1の記憶領域(QLCブロック)のサイズがQLCゾーン#1として元々使用されデータ第1の記憶領域(QLCブロック)のサイズと異なる場合には、コントローラ4は、別の第1の記憶領域(QLCブロック)のサイズを、QLCゾーン#1の容量として設定し直してもよい。なお、別の第1の記憶領域(QLCブロック)のサイズが、QLCゾーン#1にホスト2から送られた受信済みのライトデータの最後の記録位置まで記録するのに必要な容量と同じ、または不足する場合には、コントローラ4は、QLCゾーン#1の容量を、受信済みのライトデータの最後の記録位置まで記録するのに必要な容量にまで減少させる処理を行ってもよい。そして、コントローラ4は、QLCゾーン#1をフルゾーンリスト103に追加し、QLCゾーン#1の状態をフル状態に遷移させる。つまり、コントローラ4は、QLCゾーン#1の状態がホスト2からもフル状態であると認識されるようにQLCゾーン#1のフル状態のQLCゾーンとして管理する。
なお、別の第1の記憶領域(QLCブロック)のサイズが、QLCゾーン#1にホスト2から送られた受信済みのライトデータの最後の記録位置まで記録するのに必要な容量より大きい場合には、処理は、図17のステップS52Aに進む。
図17のステップS52Aにおいて、コントローラ4は、QLCゾーン#1をフル状態に遷移させる要求((フィニッシュゾーンコマンド)をホスト2から受信したか否かを判定する。
QLCゾーン#1をフル状態に遷移させる要求((フィニッシュゾーンコマンド)をホスト2から受信していない場合(ステップS52AのNO)、コントローラ4は、QLCゾーン#1を示す論理アドレスを指定する後続の複数の第1のライトコマンドそれぞれをホスト2から受信し、これら後続の複数の第1のライトコマンドの全てをリオーダ・コマンドバッファ23−1に格納する(ステップS53’)。ステップS53’では、コントローラ4は、これら後続の複数の第1のライトコマンドを、QLCゾーン#1内の書き込みがQLCゾーン#1内の次の書き込み位置からシーケンシャルに実行される順序に並び替え、並び替えられた後続の複数の第1のライトコマンドをリオーダ・コマンドバッファ23−1内に維持する。
コントローラ4は、QLCゾーン#1に既に書き込み済みのライトデータのデータサイズ(A)と、リオーダ・コマンドバッファ23−1に格納されている並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズ(B)との合計(A+B)が、QLCゾーン#1の容量に達したか否かを判定する(ステップS54’)。QLCゾーン#1の容量が新容量に変更されているならば、合計(A+B)がQLCゾーン#1の新容量に達したか否かが判定される。
QLCゾーン#1に既に書き込み済みのライトデータのデータサイズ(A)と並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズ(B)の合計(A+B)がQLCゾーン#1の容量に達するまで、コントローラ4は、ステップS52A,S53’の処理を繰り返し実行する。
QLCゾーン#1に既に書き込み済みのライトデータのデータサイズ(A)とリオーダ・コマンドバッファ23−1に格納されている並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズ(B)の合計(A+B)がQLCゾーン#1の容量に達した場合(ステップS54’のYES)、コントローラ4は、ステップS55’においては、QLCゾーン#1に書き込み済みのライトデータをQLCゾーン#1から読み出し、書き込み済みのライトデータを内部バッファ161に転送する。ステップS55’においては、コントローラ4は、さらに、並び替えられた複数の第1のライトコマンドに関連付けられた全てのライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。
ステップS55’では、コントローラ4は、まず、QLCゾーン#1に対応する新記憶領域(上述の別の第1の記憶領域)に対する消去動作を実行してもよい。この後、コントローラ4は、QLCゾーン#1の新ゾーン容量のサイズを有する複数のライトデータを、書き込み済みのQLCゾーン#1とホスト2のライトバッファ61から内部バッファ161に最小書き込みサイズの単位で転送してもよい。
そして、コントローラ4は、内部バッファ161に転送された全てのライトデータをQLCゾーン#1として使用されることが決定された別の第1の記憶領域(QLCブロック)に書き込むことによって、別の第1の記憶領域(QLCブロック)を、別の第1の記憶領域(QLCブロック)全体がデータで満たされたフル状態に設定する(ステップS56’)。ステップS56’では、コントローラ4は、別の第1の記憶領域(QLCブロック)をQLCゾーン#1に割り当て、そしてQLCゾーン#1をフルゾーンリスト103に追加し、QLCゾーン#1の状態をフル状態に遷移させる。つまり、コントローラ4は、QLCゾーン#1の状態がホスト2からもフル状態であると認識されるようにQLCゾーン#1をフル状態のQLCゾーンとして管理する。
一方、QLCゾーン#1をフル状態に遷移させる要求((フィニッシュゾーンコマンド)をホスト2から受信した場合(ステップS52AのYES)は、コントローラ4は、以下の処理を行う。
リオーダ・コマンドバッファ23−1が空である場合、コントローラ4は、内部的にフル状態に設定されているQLCゾーン#1をフルゾーンリスト103に追加して、QLCゾーン#1の状態をフル状態に遷移させ、処理を終了する。つまり、コントローラ4は、QLCゾーン#1の状態がホスト2からもフル状態であると認識されるようにQLCゾーン#1をフル状態のQLCゾーンとして管理する。
リオーダ・コマンドバッファ23−1が空ではない場合、コントローラ4は、ステップS55’の処理を行う。ステップS55’においては、コントローラ4は、内部的にフル状態に設定されているQLCゾーン#1に書き込み済みのライトデータをこのQLCゾーン#1から読み出し、書き込み済みのライトデータを内部バッファ161に転送する。さらに、コントローラ4は、並び替えられた複数の第1のライトコマンドに関連付けられた全てのライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。さらに、QLCゾーン#1として使用される別の第1の記憶領域(QLCブロック)全体をデータで満たすために必要なデータサイズのダミーデータを内部バッファ161に転送する。このダミーデータはシーケンシャル書き込みができるようにするためにも使われる。
そして、コントローラ4は、ステップS55’の処理によって内部バッファ161に転送された全てのデータをQLCゾーン#1として使用される別の第1の記憶領域(QLCブロック)に書き込み、別の第1の記憶領域(QLCブロック)を、別の第1の記憶領域(QLCブロック)全体がデータで満たされたフル状態に設定する(ステップS56’)。ステップS56’では、コントローラ4は、別の第1の記憶領域(QLCブロック)をQLCゾーン#1に割り当て、そしてQLCゾーン#1をフルゾーンリスト103に追加し、QLCゾーン#1の状態をフル状態に遷移させる。つまり、コントローラ4は、QLCゾーン#1の状態がホスト2からもフル状態であると認識されるようにQLCゾーン#1のフル状態のQLCゾーンとして管理する。
なお、上記例では、書き込み開始からの経過時間がアクセスリミットに達したQLCゾーン#1を内部的にフル状態にしたが、そのようにせず、コントローラ4は、QLCゾーン#1内の書き込み済みライトデータをSLCバッファ201(または内部バッファ161)などにコピーし、QLCゾーン#1として元々使用されデータ第1の記憶領域(QLCブロック)を、内部的にエンプティ状態に設定してもよい。そして、コントローラ4は、SLCバッファ201等にコピーした書き込み済みライトデータと、受信済みの第1のライトコマンドの集合に関連付けられたライトデータのうち未転送の残りのライトデータと、後続の第1のライトコマンドの集合に関連付けられた後続のライトデータとを、エンプティ状態に設定された第1の記憶領域(QLCブロック)に書き込んでもよい。
また、書き込み開始からの経過時間が閾値(アクセスリミット)に達したQLCゾーン#1を内部的にフル状態に設定した場合であっても、ステップS56’の書き込みを行う際に、コントローラ4は、内部的にフル状態に設定されたQLCゾーン#1の書き込み済みライトデータを、SLCバッファ201(または内部バッファ161)などに一旦コピーし、内部的にフル状態に設定されたQLCゾーン#1を内部的にリセットしてもよい。そして、コントローラ4は、SLCバッファ201等にコピーした書き込み済みライトデータと、内部バッファ161に未転送の残りのライトデータと、後続の第1のライトコマンドの集合に関連付けられたライトデータとをこの内部的にリセットされたQLCゾーン#1に書き込んでもよい。
また、本実施形態では、書き込み開始からの経過時間がアクセスリミットに達した後、後続のライトコマンドそれぞれをリオーダ・コマンドバッファに格納したが、代わりに、後続の各ライトコマンドに関連付けられたライトデータをホスト2のライトバッファ51からSLCバッファ201などに転送してもよい。
また、最初に通常アクセスリミットが指定されたQLCゾーンについても、このQLCゾーン内の書き込み開始からの経過時間がアクセスリミットに達した時、または達する前に、アクセスリミット延長の処理を開始する指示をホスト2から受け取る機能を有していてもよい。この場合、この時点から上記のアクセスリミットが不明な場合と同様の動作を行う。
図19は、ゾーン管理テーブル32のデータ構造の例を示す。
ゾーン管理テーブル32は、NAND型フラッシュメモリ5内の全ての第1の記憶領域(ここでは、QLCゾーン#1〜QLCゾーン#n)にそれぞれ対応する複数の管理領域を含む。
ゾーン管理テーブル32内の各管理領域は、この管理領域に対応するQLCゾーンに関するメタデータを格納する。
例えば、QLCゾーン#1に対応する管理領域のメタデータは、(1)QLCゾーン#1内の読み出し可能エリアを示すメタデータ、(2)QLCゾーン#1内の書き込み可能LBA範囲を示すメタデータ、(3)QLCゾーン#1内のライトコマンド未受信エリアを示すメタデータ、(4)QLCゾーン#1内の書き込み不能エリアを示すメタデータを含む。
QLCゾーン#1内の読み出し可能エリアは、QLCゾーン#1からデータを読み出し可能な論理アドレス範囲を示す。データの書き込み(ファイン書き込み動作)が終了したQLCゾーン#1内のLBAの集合がQLCゾーン#1内の読み出し可能エリアとなる。
コントローラ4は、QLCゾーン#1に対応するQLCブロック内の読み出し不可能な最小アドレスを示す読み出し不可能ポインタ(un−readable pointer:URPとして参照される)を管理してもよい。URPは、QLCゾーン#1内の読み出し可能エリアの終端を示す。
QLCゾーン#1内の書き込み可能LBA範囲は、QLCゾーン#1に対応するリオーダ・コマンドバッファに格納されるライトコマンドの集合によって書き込みが実行可能なLBA範囲を示す。書き込み可能LBA範囲の長さは、基本的には、QLCゾーン#1に対応するリオーダ・コマンドバッファに格納可能なライトコマンドの最大数、つまりリオーダ・コマンドバッファのサイズに基づいて定められる。
QLCゾーン#1内の書き込みが進むにつれて、QLCゾーン#1内の書き込み可能LBA範囲(リオーダ・コマンドバッファによってカバーされるLBA範囲)は、QLCゾーン#1のLBA範囲の先頭から終端に向かう方向に移動する。
書き込み可能LBA範囲に属する各LBAに関連付けられたデータはQLCゾーン#1から読み出し可能ではないデータである。QLCゾーン#1に対応するメタデータは、QLCゾーン#1から読み出し可能ではないデータが格納されている記憶位置を示す記憶位置情報を含む。各記憶位置は、SLCバッファ201内の記憶位置、またはホスト2のライトバッファ51内の記憶位置のいずれかを示す。
QLCゾーン#1内のライトコマンド未受信エリアは、このエリアをオフセットとして指定するライトコマンドがまだ受信されていないQLCゾーン#1内のエリアを示す。ライトコマンドがまだ受信されていない各セクタが、ライトコマンド未受信エリアである。
書き込み可能LBA範囲よりもQLCゾーン#1の終端側に位置する各セクタが、書き込み不能エリアとして管理される。
図20は、部分的に書き込まれたゾーン(QLCゾーン#1)に関する、読み出し可能エリア、書き込み可能LBA範囲、書き込み不能エリアを示す図である。
図20の左部は、書き込み可能LBA範囲がQLCゾーン#1のLBA空間の中間部分をカバーしている状態を示している。図20の右部は、QLCゾーン#1への書き込みが進行することによって、読み出し可能エリアが広がり、この結果、書き込み可能LBA範囲がQLCゾーン#1の終端位置近傍にまで移動された状態を示している。
読み出し可能エリアにデータを書き込むための新たなライトコマンドを受信した場合、コントローラ4は、このライトコマンドに対する応答としてエラーを示す応答をホスト2に送信する。読み出し可能エリア内に含まれるLBA範囲からデータを読み出すためのリードコマンドを受信した場合、コントローラ4は、受信したリードコマンドによって指定されるリード対象データをQLCゾーン#1から読み出す。
書き込み可能LBA範囲に関しては、QLCゾーン#1から読み出し可能ではないデータ(ライトデータ)が格納されている各記憶位置を示すポインタがセクタ単位で管理されている。ある1セクタに書き込まれるべきライトデータがSLCバッファ201に格納されている場合には、この1セクタに対応するポインタは、このライトデータが格納されているSLCバッファ201内の記憶位置を示す。ある1セクタに書き込まれるべきライトデータがホストメモリ(ホスト2のライトバッファ51)に格納されている場合には、この1セクタに対応するポインタは、このライトデータが格納されているホスト2のライトバッファ51内の記憶位置を示す。
ポインタが存在するセクタにデータを書き込むための新たなライトコマンドを受信した場合、コントローラ4は、このライトコマンドに対する応答としてエラーを示す応答をホスト2に送信する。ポインタが存在するセクタからデータを読み出すためのリードコマンドを受信した場合、コントローラ4は、受信したリードコマンドによって指定されるリード対象データを、このポインタによって示される記憶位置(SLCバッファ201内の記憶位置、またはホスト2のライトバッファ51)から読み出す。
各ライトコマンド未受信エリアについては、ポインタは存在しない。ライトコマンド未受信エリアにデータを書き込むためのライトコマンドをホスト2から受信した場合、コントローラ4は、このライトコマンドをQLCゾーン#1に対応するリオーダ・コマンドバッファに格納する。
書き込み可能LBA範囲よりもQLCゾーン#1の終端側に位置する書き込み不能エリアにデータを書き込むためのライトコマンドを受信した場合、コントローラ4は、このライトコマンドに対する応答として一時的エラーを示す応答をホスト2に送信する。あるライトコマンドに対する一時的エラーを示す応答をSSD3から受信した場合、ホスト2はこのライトコマンドをSSD3に再度発行することが許される。QLCゾーン#1内の書き込みが進行すると、書き込み不能エリアは、書き込み可能LBA範囲内のライトコマンド未受信エリアになるからである。
書き込み不能エリア内のLBA範囲からデータを読み出すためのリードコマンドを受信した場合、コントローラ4は、このリードコマンドに対する応答としてエラーを示す応答をホスト2に送信する。
図21は、SSD3において実行される読み出し動作の手順を示すフローチャートである。
QLCゾーン(リード対象QLCゾーン)とリード対象QLCゾーン内のオフセットとを示す論理アドレスと、リード対象データのデータサイズとを指定するリードコマンドをホスト2から受信すると(ステップS61)、コントローラ4は、このリード対象データに対応するLBA範囲がこのリード対象QLCゾーンの読み出し可能エリア内に含まれているか否かを判定する(ステップS62)。
リード対象データに対応するLBA範囲がこのリード対象QLCゾーンの読み出し可能エリア内に含まれている場合(ステップS62のYES)、コントローラ4は、リード対象データをリード対象QLCゾーンから読み出し、読み出したリード対象データをホスト2に送信する(ステップS63)。
リード対象データに対応するLBA範囲がこのリード対象QLCゾーンの読み出し可能エリア内に含まれていない場合(ステップS62のNO)、コントローラ4は、リード対象QLCゾーンの書き込み可能LBA範囲内の各セクタに書き込むべきデータが格納されている記憶位置を示す記憶位置情報(ポインタ群)に基づいて、リード対象データがSLCバッファ201またはホスト2のライトバッファ51のどちらに格納されているかを判定する(ステップS64)。
リード対象データがSLCバッファ201に格納されている場合(ステップS64における「SLCバッファ」)、コントローラ4は、リード対象データが格納されているSLCバッファ201内の記憶位置からリード対象データを読み出し、読み出したリード対象データをホスト2に送信する(ステップS65)。
リード対象データがホスト2のライトバッファ51に格納されている場合(ステップS64における「ホストのライトバッファ」)、コントローラ4は、リード対象データが格納されているホスト2のライトバッファ51内の記憶位置からリード対象データを読み出し、読み出したリード対象データをホスト2に送信する(ステップS66)。
以上説明したように、本実施形態によれば、コントローラ4は、第1のゾーンとライトデータが書き込まれるべき第1のゾーン内のオフセットとを示す論理アドレスと、ライトデータのデータサイズと、ライトデータが格納されているホスト2のライトバッファ51内の位置とを指定する複数の第1のライトコマンドを、第1のゾーンに対応する第1のコマンドバッファを用いて、第1のゾーン内の書き込みが第1のゾーン内の次の書き込み位置からシーケンシャルに実行される順序に並び替える。そして、複数の第1のライトコマンドの並び替えによって第1のゾーン内の書き込みが次の書き込み位置から最小書き込みサイズ以上連続してシーケンシャルに実行可能になった場合、コントローラ4は、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータを、複数の第1のライトコマンドの並べ替えられた順序と同じ順序でホスト2のライトバッファ51から内部バッファ161に転送する。
複数のライトデータが内部バッファ161に転送される順序は第1のゾーン内の書き込みを第1のゾーン内の次の書き込み位置からシーケンシャルに実行可能な順序に一致する。したがって、コントローラ4は、内部バッファ161に転送された各ライトデータの書き込みを即座に開始することができる。よって、第1のゾーン内の次の書き込み位置とは異なる位置に書き込まれるべきライトデータによって内部バッファ161が長い時間専有されてしまうことを防止することができ、SSD3内に設けることが必要なバッファの総サイズを削減できる。さらに、ホスト2が同じゾーンに対するライトコマンドの発行順序を厳密に管理せずとも、各ゾーン内の書き込みをシーケンシャルに実行することが可能となる。
また、本実施形態によれば、コントローラ4は、並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計が第1のゾーンの容量に達した後、ホスト2のライトバッファ51から内部バッファ161への複数のライトデータの転送を開始し、内部バッファ161に転送されたこれら複数のライトデータを、第1のゾーンとして管理されている、複数の第1の記憶領域のうちの一つの第1の記憶領域に書き込むことによって、この一つの第1の記憶領域を、この一つの第1の記憶領域全体がデータで満たされた状態に設定する。
これにより、第1の記憶領域(QLCブロック)が部分的に書き込まれた状態に維持される期間(例えば、第1の記憶領域(QLCブロック)がオープンされてからフル状態になるまでの期間)を延ばすことなく、第1の記憶領域(QLCブロック)に対応するQLCゾーンのゾーンアクセスリミット(QLCゾーンへのライトアクセスの開始からこのQLCゾーンがフル状態に設定されるまでの制限時間)を延長することが可能となる。
なお、ホスト2のライトバッファ51は不揮発性ライトバッファによって実現してもよい。不揮発性ライトバッファは、ストレージクラスメモリ(SCM)のような不揮発性メモリによって実現されてもよい。
ホスト2のライトバッファ51が不揮発性ライトバッファによって実現されている場合には、たとえ停電のようなパワーロスによって内部バッファ161内のデータが失われても、ホスト2の不揮発性ライトバッファからこのデータを再び取得することが可能となる。したがって、SSD3がパワーロスプロテクション機能を実行するためのキャパシタ(またはバッテリ)備えていなくても、パワーロスによって内部バッファ161内のデータが失われてしまうことを防止することができる。
また、本実施形態では、クローズ状態に遷移させるべきQLCゾーンに書き込むべき残りのライトデータを保存するための記憶領域としてSLCバッファ201を使用する場合を説明したが、ストレージクラスメモリ(SCM)のような不揮発性メモリを、クローズ状態に遷移させるべきQLCゾーンに書き込むべき残りのライトデータを保存するための記憶領域として使用してもよい。
また、基本的には、第1の複数の記憶領域の各々が第2の記憶領域よりも高い記録密度を有しており、且つ第2の記憶領域の書き込み速度が各第1の記憶領域の書き込み速度よりも早ければ、本実施形態と同様の効果を実現できる。このため、第1の複数の記憶領域の各々にメモリセル当たりにmビットを書き込む書き込みモードでデータを書き込み、第2の記憶領域にメモリセル当たりにnビット(n<m)を書き込む書き込みモードでデータを書き込む、という形態が利用されてもよい。ここで、nは1以上の整数であり、mはnよりも大きい整数である。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…ホスト2…SSD、4…コントローラ、5…NAND型フラッシュメモリ、20…フラッシュマネジメント部、23…リオーダ・コマンドバッファ、51…ホストのライトバッファ、161…内部バッファ。
Claims (15)
- ホストに接続可能なメモリシステムであって、
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに含まれる複数の第1の記憶領域を、前記メモリシステムをアクセスするための論理アドレス空間を分割することによって得られる複数の論理アドレス範囲がそれぞれに割り当てられた複数のゾーンとして管理するように構成されたコントローラとを具備し、
前記コントローラは、
複数の第1のライトコマンドを前記ホストから受信し、前記複数の第1のライトコマンドの各々は前記複数のゾーンのうちの第1のゾーンとライトデータが書き込まれるべき前記第1のゾーン内のオフセットとを示す論理アドレスと、前記ライトデータのデータサイズと、前記ライトデータが格納されている前記ホストのライトバッファ内の位置とを指定し、
前記複数の第1のライトコマンドの各々によって指定される前記オフセットと前記データサイズとに基づいて、前記複数の第1のライトコマンドを、前記第1のゾーンに対応する第1のコマンドバッファを用いて、前記第1のゾーン内の書き込みが前記第1のゾーン内の次の書き込み位置からシーケンシャルに実行される順序に並び替え、
前記複数の第1のライトコマンドの並び替えによって前記第1のゾーン内の書き込みが前記第1のゾーン内の前記次の書き込み位置から各第1の記憶領域の最小書き込みサイズ以上連続してシーケンシャルに実行可能になった場合、前記並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータを、前記複数の第1のライトコマンドの並べ替えられた順序と同じ順序で前記ホストのライトバッファから前記メモリシステムの内部バッファに転送し、
前記内部バッファに転送された前記複数のライトデータを、前記第1のゾーンとして管理されている、前記複数の第1の記憶領域のうちの一つの第1の記憶領域に書き込むように構成されている、メモリシステム。 - 前記並び替えられた複数の第1のライトコマンドの各々によって指定される前記オフセットと前記データサイズとによって定まる連続する論理アドレスの先頭が前記第1のゾーン内の前記次の書き込み位置に一致し且つ前記連続する論理アドレスの長さが前記最小書き込みサイズ以上であるという条件が満たされたか否かを判定し、
前記条件が満たされた場合、前記並び替えられた複数の第1のライトコマンドに基づいて、前記並び替えられた複数の第1のライトコマンドに関連付けられた前記複数のライトデータを、前記複数の第1のライトコマンドの並べ替えられた順序と同じ順序で前記ホストのライトバッファから前記メモリシステムの内部バッファに転送するように構成されている請求項1記載のメモリシステム。 - 前記コントローラは、前記第1の記憶領域へのライトデータの書き込みが完了する度、前記書き込みが完了したライトデータに対応する第1のライトコマンドの完了を示す応答を前記ホストに送信するように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、
前記複数の第1のライトコマンドのうちの一つの第1のライトコマンドを前記ホストから受信した場合、前記一つの第1のライトコマンドの受信の完了を示す第1の応答を前記ホストに送信し、
前記不揮発性メモリへの前記一つの第1のライトコマンドに関連付けられたライトデータの書き込みが完了した場合、前記一つの第1のライトコマンドに対応する書き込みの完了を示す第2の応答を前記ホストに送信するように構成されている請求項1記載のメモリシステム。 - 前記コントローラは、
前記第1のゾーンが、前記第1のゾーンへの書き込み開始から前記第1のゾーン全体がデータで満たされるまでの時間が閾値よりも長いゾーンであることが前記ホストによって指定された場合、
前記並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータのデータサイズの合計が前記第1のゾーンの容量に達した後、前記ホストのライトバッファから前記内部バッファへの前記複数のライトデータの転送を開始し、前記内部バッファに転送された前記複数のライトデータを前記一つの第1の記憶領域に書き込むことによって前記第1の記憶領域を前記第1の記憶領域全体がデータで満たされた状態に設定するように構成されている請求項1記載のメモリシステム。 - 前記コントローラは、前記並び替えられた複数の第1のライトコマンドに関連付けられた前記複数のライトデータのデータサイズの合計が前記第1のゾーンの容量に達した後、前記一つの第1の記憶領域に対する消去動作を実行することによって前記第1のゾーンをオープン状態に遷移させるように構成されている請求項5記載のメモリシステム。
- 前記コントローラは、
前記第1のゾーンへの書き込み開始からの経過時間が閾値に達した場合、前記一つの第1の記憶領域にデミーデータを書き込むことによって前記一つの第1の記憶領域を前記第1の記憶領域全体がデータで満たされた状態に設定し、
前記一つの第1の記憶領域に書き込み済みのライトデータのデータサイズと、前記第1のゾーンを示す論理アドレスを指定する受信済みの複数の第1のライトコマンドに関連付けられたライトデータのうち前記内部バッファに未転送の残りのライトデータのデータサイズと、前記第1のゾーンを示す論理アドレスを指定する後続の複数の第1のライトコマンドに関連付けられた後続のライトデータのデータサイズとの合計が前記第1のゾーンの容量に達した後、前記一つの第1の記憶領域から前記書き込み済みのライトデータを読み出し、前記残りのライトデータと前記後続のライトデータとを前記ホストのライトバッファから前記内部バッファへ転送し、前記書き込み済みのライトデータと、前記内部バッファに転送された前記残りのライトデータと前記後続のライトデータとを、前記第1のゾーンとして管理されるべき別の一つの第1の記憶領域に書き込むことよって、前記別の一つの第1の記憶領域を、前記別の一つの第1の記憶領域全体がデータで満たされた状態に設定するように構成されている請求項1記載のメモリシステム。 - 前記コントローラは、
前記第1のゾーンへの書き込み開始からの経過時間が閾値に達した場合、前記一つの第1の記憶領域にデミーデータを書き込むことによって前記一つの第1の記憶領域を前記第1の記憶領域全体がデータで満たされた状態に設定し、
前記一つの第1の記憶領域に書き込み済みのライトデータと、前記第1のゾーンを示す論理アドレスを指定する受信済みの複数の第1のライトコマンドに関連付けられたライトデータのうち前記内部バッファに未転送の残りのライトデータのデータサイズと、前記第1のゾーンを示す論理アドレスを指定する後続の複数の第1のライトコマンドに関連付けられた後続のライトデータのデータサイズとの合計が前記第1のゾーンの容量に達した後、前記書き込み済みのライトデータを前記一つの第1の記憶領域から前記不揮発性メモリ内の第3の記憶領域にコピーすることによって前記一つの第1の記憶領域を有効データが格納されていない状態に設定し、前記残りのライトデータと前記後続のライトデータとを前記ホストのライトバッファから前記内部バッファへ転送し、前記第3の記憶領域にコピーされた書き込み済みのライトデータと、前記内部バッファに転送された前記残りのライトデータと前記後続のライトデータとを、前記一つの第1の記憶領域に書き込むことよって、前記一つの第1の記憶領域を、前記一つの第1の記憶領域全体がデータで満たされた状態に設定するように構成されている請求項1記載のメモリシステム。 - 前記コントローラは、
前記第1のゾーンへの書き込み開始からの経過時間が閾値に達した場合、前記一つの第1の記憶領域に書き込み済みのライトデータを前記一つの第1の記憶領域から前記不揮発性メモリ内の第3の記憶領域にコピーすることによって前記一つの第1の記憶領域を有効データが格納されていない状態に設定し、
前記書き込み済みのライトデータと、前記第1のゾーンを示す論理アドレスを指定する受信済みの複数の第1のライトコマンドに関連付けられたライトデータのうち前記内部バッファに未転送の残りのライトデータのデータサイズと、前記第1のゾーンを示す論理アドレスを指定する後続の複数の第1のライトコマンドに関連付けられた後続のライトデータのデータサイズとの合計が前記第1のゾーンの容量に達した後、前記残りのライトデータと前記後続のライトデータとを前記ホストのライトバッファから前記内部バッファへ転送し、前記第3の記憶領域にコピーされた前記書き込み済みのライトデータと、前記内部バッファに転送された前記残りのライトデータと前記後続のライトデータとを、前記一つの第1の記憶領域に書き込むことよって、前記一つの第1の記憶領域を、前記一つの第1の記憶領域全体がデータで満たされた状態に設定するように構成されている請求項1記載のメモリシステム。 - 前記コントローラは、前記不揮発性メモリに含まれる前記複数の第1の記憶領域の各々に、メモリセル当たりに複数ビットを書き込むための第1の書き込みモードでデータを書き込むように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、
前記複数のライトデータをメモリセル当たりにmビットを書き込むための第1の書き込みモードで前記一つの第1の記憶領域に書き込み、
前記第1のゾーンを書き込みが中断されたクローズ状態に遷移させるための第1の要求を前記ホストから受信したことに応じて、前記第1のゾーンを指定する受信済みの第1のライトコマンドに関連付けられた複数のライトデータのうち前記内部バッファに未転送の残りのライトデータを、前記ホストの前記ライトバッファから前記内部バッファに転送し、前記内部バッファに転送された前記残りのライトデータをメモリセル当たりにnビットを書き込むための第2の書き込みモードで前記不揮発性メモリに含まれる第2の記憶領域に書き込むように構成され、
前記nは1以上の整数であり、前記mは前記nよりも大きい整数である請求項1記載のメモリシステム。 - 前記コントローラは、
前記第1のゾーンからデータを読み出し可能な第1の論理アドレス範囲と、前記第1のゾーンから読み出し可能ではないデータが格納されている各記憶位置を示す記憶位置情報とを管理し、各記憶位置は、前記第2の記憶領域内の記憶位置、または前記ホストの前記ライトバッファ内の記憶位置のいずれかを示し、
前記第1のゾーンと前記第1のゾーン内のオフセットとを示す論理アドレスとリード対象データのデータサイズとを指定するリードコマンドを前記ホストから受信したことに応じて、
前記リード対象データに対応する論理アドレス範囲が前記第1の論理アドレス範囲内に含まれる場合、前記リード対象データを前記一つの第1の記憶領域から読み出し、読み出した前記リード対象データを前記ホストに送信し、
前記リード対象データに対応する前記論理アドレス範囲が前記第1の論理アドレス範囲内に含まれない場合、前記記憶位置情報に基づいて、前記リード対象データを前記第2の記憶領域、または前記ホストの前記ライトバッファから読み出し、読み出した前記リード対象データを前記ホストに送信するように構成されている請求項11記載のメモリシステム。 - 前記コントローラは、前記第1のコマンドバッファに格納可能なライトコマンドの最大数に基づいて定められる論理アドレス範囲を前記第1のゾーンの書き込み可能論理アドレス範囲として管理し、前記書き込み可能論理アドレス範囲よりも前記第1のゾーンの終端側の論理アドレスをオフセットとして指定するライトコマンドを受信した場合、前記受信したライトコマンドを前記第1のコマンドバッファに格納せずに、前記受信したライトコマンドに対する応答として一時的エラーを示す応答を前記ホストに送信するように構成されている請求項1記載のメモリシステム。
- 不揮発性メモリを含むメモリシステムを制御する制御方法であって、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに含まれる複数の第1の記憶領域を、前記メモリシステムをアクセスするための論理アドレス空間を分割することによって得られる複数の論理アドレス範囲がそれぞれに割り当てられた複数のゾーンとして管理することと、
複数の第1のライトコマンドをホストから受信することと、前記複数の第1のライトコマンドの各々は前記複数のゾーンのうちの第1のゾーンとライトデータが書き込まれるべき前記第1のゾーン内のオフセットとを示す論理アドレスと、前記ライトデータのデータサイズと、前記ライトデータが格納されている前記ホストのライトバッファ内の位置とを指定し、
前記複数の第1のライトコマンドの各々によって指定される前記オフセットと前記データサイズとに基づいて、前記複数の第1のライトコマンドを、前記第1のゾーンに対応する第1のコマンドバッファを用いて、前記第1のゾーン内の書き込みが前記第1のゾーン内の次の書き込み位置からシーケンシャルに実行される順序に並び替えることと、
前記複数の第1のライトコマンドの並び替えによって前記第1のゾーン内の書き込みが前記第1のゾーン内の前記次の書き込み位置から各第1の記憶領域の最小書き込みサイズ以上連続してシーケンシャルに実行可能になった場合、前記並び替えられた複数の第1のライトコマンドに関連付けられた複数のライトデータを、前記複数の第1のライトコマンドの並べ替えられた順序と同じ順序で前記ホストのライトバッファから前記メモリシステムの内部バッファに転送することと、
前記内部バッファに転送された前記複数のライトデータを、前記第1のゾーンとして管理されている、前記複数の第1の記憶領域のうちの一つの第1の記憶領域に書き込むこととを具備する制御方法。 - 前記並び替えられた複数の第1のライトコマンドの各々によって指定される前記オフセットと前記データサイズとによって定まる連続する論理アドレスの先頭が前記第1のゾーン内の前記次の書き込み位置に一致し且つ前記連続する論理アドレスの長さが前記最小書き込みサイズ以上であるという条件が満たされたか否かを判定することと、
前記条件が満たされた場合、前記並び替えられた複数の第1のライトコマンドに基づいて、前記並び替えられた複数の第1のライトコマンドに関連付けられた前記複数のライトデータを、前記複数の第1のライトコマンドの並べ替えられた順序と同じ順序で前記ホストのライトバッファから前記メモリシステムの内部バッファに転送することとをさらに具備する請求項14記載の制御方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020005285A JP2021114038A (ja) | 2020-01-16 | 2020-01-16 | メモリシステムおよび制御方法 |
US17/017,435 US11269558B2 (en) | 2020-01-16 | 2020-09-10 | Memory system and method of controlling nonvolatile memory |
US17/586,174 US11704069B2 (en) | 2020-01-16 | 2022-01-27 | Memory system and method of controlling nonvolatile memory |
US18/326,086 US12056399B2 (en) | 2020-01-16 | 2023-05-31 | Memory system and method of controlling nonvolatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2020005285A JP2021114038A (ja) | 2020-01-16 | 2020-01-16 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021114038A true JP2021114038A (ja) | 2021-08-05 |
Family
ID=76858117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2020005285A Pending JP2021114038A (ja) | 2020-01-16 | 2020-01-16 | メモリシステムおよび制御方法 |
Country Status (2)
Country | Link |
---|---|
US (3) | US11269558B2 (ja) |
JP (1) | JP2021114038A (ja) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11209989B2 (en) * | 2019-09-25 | 2021-12-28 | Western Digital Technologies, Inc. | Zoned namespaces in solid-state drives |
JP2021114038A (ja) * | 2020-01-16 | 2021-08-05 | キオクシア株式会社 | メモリシステムおよび制御方法 |
KR20210108107A (ko) * | 2020-02-25 | 2021-09-02 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
US11435914B2 (en) * | 2020-03-30 | 2022-09-06 | Western Digital Technologies, Inc. | Dynamic ZNS open zone active limit |
US11372543B2 (en) * | 2020-04-10 | 2022-06-28 | Western Digital Technologies, Inc. | Zone-append command scheduling based on zone state |
US11586385B1 (en) * | 2020-05-06 | 2023-02-21 | Radian Memory Systems, Inc. | Techniques for managing writes in nonvolatile memory |
KR20220058224A (ko) * | 2020-10-30 | 2022-05-09 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 이에 포함된 메모리 컨트롤러의 동작 방법 |
KR20220060372A (ko) * | 2020-11-04 | 2022-05-11 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
CN112748883B (zh) * | 2021-01-15 | 2023-01-10 | 苏州浪潮智能科技有限公司 | 一种io请求流水线处理设备、方法、系统及存储介质 |
US11809714B2 (en) * | 2021-02-26 | 2023-11-07 | Micron Technology, Inc. | Effective storage allocation for sequentially-written memory devices |
US12014052B2 (en) * | 2021-03-22 | 2024-06-18 | Google Llc | Cooperative storage architecture |
KR20220145695A (ko) * | 2021-04-22 | 2022-10-31 | 에스케이하이닉스 주식회사 | 컨트롤러 및 그 동작 방법 |
US11816358B2 (en) * | 2021-08-24 | 2023-11-14 | Micron Technology, Inc. | Preserving application data order in memory devices |
JP2023037883A (ja) | 2021-09-06 | 2023-03-16 | キオクシア株式会社 | 情報処理装置 |
CN116009761A (zh) * | 2021-10-21 | 2023-04-25 | 华为技术有限公司 | 一种数据写入方法以及相关设备 |
US11886740B2 (en) * | 2021-12-01 | 2024-01-30 | Micron Technology, Inc. | Command prioritization techniques for reducing latency in a memory system |
US12039198B2 (en) | 2022-05-20 | 2024-07-16 | Western Digital Technologies, Inc. | Dynamic write shaping |
US11847323B1 (en) * | 2022-06-07 | 2023-12-19 | Westem Digital Technologies, Inc. | Data storage device and method for host buffer management |
US11954367B2 (en) * | 2022-06-15 | 2024-04-09 | Western Digital Technologies, Inc. | Active time-based command prioritization in data storage devices |
US11853203B1 (en) * | 2022-06-23 | 2023-12-26 | Western Digital Technologies, Inc. | Systems and methods with variable size super blocks in zoned namespace devices |
US20240143512A1 (en) * | 2022-11-01 | 2024-05-02 | Western Digital Technologies, Inc. | Write buffer linking for easy cache reads |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20160018998A1 (en) | 2014-07-17 | 2016-01-21 | Sandisk Enterprise Ip Llc | Methods and Systems for Scalable Reliability Management of Non-Volatile Memory Modules |
JP6403162B2 (ja) | 2015-07-23 | 2018-10-10 | 東芝メモリ株式会社 | メモリシステム |
US20170123721A1 (en) * | 2015-10-28 | 2017-05-04 | Sandisk Technologies Inc. | System and method for utilization of a data buffer by command completion in parts |
US9990146B2 (en) * | 2016-02-03 | 2018-06-05 | Sandisk Technologies Llc | Apparatus and method of data sequencing |
US10235198B2 (en) | 2016-02-24 | 2019-03-19 | Samsung Electronics Co., Ltd. | VM-aware FTL design for SR-IOV NVME SSD |
JP6785204B2 (ja) | 2017-09-21 | 2020-11-18 | キオクシア株式会社 | メモリシステムおよび制御方法 |
CN109542335B (zh) | 2017-09-22 | 2022-04-01 | 慧荣科技股份有限公司 | 快闪存储器的数据内部搬移方法以及使用该方法的装置 |
US10915440B2 (en) | 2017-11-16 | 2021-02-09 | Micron Technology, Inc. | Namespace mapping optimization in non-volatile memory devices |
JP2019191909A (ja) * | 2018-04-25 | 2019-10-31 | 東芝メモリ株式会社 | メモリシステムおよび制御方法 |
JP7159069B2 (ja) * | 2019-01-29 | 2022-10-24 | キオクシア株式会社 | メモリシステムおよび制御方法 |
JP6716757B2 (ja) | 2019-06-19 | 2020-07-01 | キオクシア株式会社 | メモリシステムおよび制御方法 |
KR20210021202A (ko) * | 2019-08-14 | 2021-02-25 | 삼성전자주식회사 | 직렬로 연결된 전자 장치들 사이의 레이턴시를 감소시키기 위한 컴퓨팅 시스템 |
JP2021114038A (ja) * | 2020-01-16 | 2021-08-05 | キオクシア株式会社 | メモリシステムおよび制御方法 |
-
2020
- 2020-01-16 JP JP2020005285A patent/JP2021114038A/ja active Pending
- 2020-09-10 US US17/017,435 patent/US11269558B2/en active Active
-
2022
- 2022-01-27 US US17/586,174 patent/US11704069B2/en active Active
-
2023
- 2023-05-31 US US18/326,086 patent/US12056399B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20230305754A1 (en) | 2023-09-28 |
US20220147283A1 (en) | 2022-05-12 |
US11704069B2 (en) | 2023-07-18 |
US12056399B2 (en) | 2024-08-06 |
US20210223994A1 (en) | 2021-07-22 |
US11269558B2 (en) | 2022-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2021114038A (ja) | メモリシステムおよび制御方法 | |
JP7346311B2 (ja) | メモリシステム | |
JP7366795B2 (ja) | メモリシステムおよび制御方法 | |
JP7051546B2 (ja) | メモリシステムおよび制御方法 | |
JP7358594B2 (ja) | メモリシステム | |
JP7353934B2 (ja) | メモリシステムおよび制御方法 | |
US11762591B2 (en) | Memory system and method of controlling nonvolatile memory by controlling the writing of data to and reading of data from a plurality of blocks in the nonvolatile memory | |
US11640354B2 (en) | Logical-to-physical mapping of data groups with data locality | |
JP2021033849A (ja) | メモリシステムおよび制御方法 | |
US11762580B2 (en) | Memory system and control method | |
JP7381678B2 (ja) | メモリシステム | |
US20230091792A1 (en) | Memory system and method of controlling nonvolatile memory | |
JP7392080B2 (ja) | メモリシステム | |
JP2021033847A (ja) | メモリシステムおよび制御方法 | |
JP2023012773A (ja) | メモリシステムおよび制御方法 | |
US20230350798A1 (en) | Namespace management for memory sub-systems |