JP2023044135A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2023044135A JP2023044135A JP2021152009A JP2021152009A JP2023044135A JP 2023044135 A JP2023044135 A JP 2023044135A JP 2021152009 A JP2021152009 A JP 2021152009A JP 2021152009 A JP2021152009 A JP 2021152009A JP 2023044135 A JP2023044135 A JP 2023044135A
- Authority
- JP
- Japan
- Prior art keywords
- write
- block
- data
- qlc
- pslc
- 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
- 230000015654 memory Effects 0.000 title claims abstract description 267
- 238000000034 method Methods 0.000 title claims description 18
- 239000000872 buffer Substances 0.000 claims abstract description 121
- 230000004044 response Effects 0.000 claims description 65
- 230000008859 change Effects 0.000 claims description 2
- 238000012508 change request Methods 0.000 claims 1
- 238000007726 management method Methods 0.000 description 99
- 238000010586 diagram Methods 0.000 description 42
- 238000012546 transfer Methods 0.000 description 19
- 238000012545 processing Methods 0.000 description 15
- 230000010365 information processing Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 241001495406 Candidatus Phytoplasma fraxini Species 0.000 description 5
- 230000007704 transition Effects 0.000 description 5
- 230000008569 process Effects 0.000 description 4
- 101100481703 Arabidopsis thaliana TMK2 gene Proteins 0.000 description 3
- 238000012937 correction Methods 0.000 description 3
- 238000010187 selection method Methods 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000003321 amplification Effects 0.000 description 2
- 238000012005 ligant binding assay Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000003199 nucleic acid amplification method Methods 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 101100481704 Arabidopsis thaliana TMK3 gene Proteins 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000002950 deficient Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000013403 standard screening design Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on 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/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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- 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
-
- 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)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
【課題】必要な不揮発性ライトバッファの量の増加を招くことなく、複数の書き込み先ブロックに効率的にデータを書き込むことができるメモリシステムを実現する。【解決手段】コントローラは、一つの書き込み先ブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズが第1の書き込みサイズに達した場合、ホストに設けられたメモリ上のライトバッファに格納されたライトデータのうち、一つの書き込み先ブロックに対する第1の最小書き込みサイズを有するライトデータの書き込みが完了するように、一つの書き込み先ブロックに対する書き込み動作を実行する。ライトバッファの残り容量が閾値を下回った場合、コントローラは、選択した一つの書き込み先ブロックに対応するライトデータを第2のブロックに書き込み、書き込まれたライトデータが格納されているライトバッファの領域をホストに解放させる。【選択図】図16
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、データセンターのサーバのようなホスト計算機システムのストレージデバイスとして使用されている。
サーバのようなホスト計算機システムにおいて使用されるストレージデバイスにおいては、不揮発性メモリの異なる書き込み先ブロックに異なるデータをそれぞれ書き込むことが必要とされる場合がある。これに対処するために、不揮発性メモリに含まれるブロックのうちの幾つかのブロックの各々を、異なる書き込み先ブロックに書き込まれるべきデータを一時的に格納するための不揮発性ライトバッファとして使用することが考えられる。
この場合、もし全てのデータを、不揮発性ライトバッファを経由して個々の書き込み先ブロックに書き込むという処理が実行されたならば、必要な不揮発性ライトバッファの量が増加されることになる。
したがって、メモリシステムに用意することが必要な不揮発性ライトバッファの量の増加を招くことなく、複数の書き込み先ブロックに効率的にデータを書き込むことが可能な新たな技術の実現が求められている。
本発明の一実施形態が解決しようとする課題は、メモリシステムに用意することが必要な不揮発性ライトバッファの量の増加を招くことなく、複数の書き込み先ブロックに効率的にデータを書き込むことができるメモリシステムを提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、コントローラとを具備する。前記不揮発性メモリは、各々が消去動作の単位である複数のブロックを含む。前記コントローラは、前記不揮発性メモリに電気的に接続される。前記コントローラは、前記複数のブロックのうちの第1のブロック群と、前記複数のブロックのうちの第2のブロック群とを管理し、前記第1のブロック群から割り当てられた複数の書き込み先ブロックへのデータの書き込みを制御するように構成される。前記第1のブロック群に含まれるブロックの各々は第1の最小書き込みサイズを有し、前記第2のブロック群に含まれるブロックの各々は前記第1の最小書き込みサイズよりも小さい第2の最小書き込みサイズを有する。前記コントローラは、前記複数の書き込み先ブロックのいずれか一つを各々が指定する複数のライトコマンドを前記ホストから受信する。前記コントローラは、前記複数の書き込み先ブロックのうちの一つの書き込み先ブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズが、前記一つの書き込み先ブロックへの前記第1の最小書き込みサイズを有するデータの書き込みが完了可能な第1の書き込みサイズに達した場合、前記ホストに設けられたメモリ上のライトバッファに格納されたライトデータのうち、前記一つの書き込み先ブロックに対する前記第1の最小書き込みサイズを有するライトデータの書き込みが完了するように、前記一つの書き込み先ブロックに対する書き込み動作を実行し、前記書き込みが完了したライトデータが格納されている前記ライトバッファの領域を前記ホストに解放させる。前記第1の書き込みサイズは、前記第1の最小書き込みサイズの整数倍のサイズを有する。前記コントローラは、前記第1の書き込みサイズ未満の総サイズを各々が有する、異なる書き込み先ブロックそれぞれに書き込まれるべき複数のライトデータが前記ライトバッファに格納されることによって前記ライトバッファの残り容量が閾値を下回った場合、前記異なる書き込み先ブロックのうちの一つの書き込み先ブロックを選択し、前記選択した一つの書き込み先ブロックに対応するライトデータを前記第2のブロックに前記第2の最小書き込みサイズ毎に書き込み、前記第2のブロックに書き込まれたライトデータが格納されている前記ライトバッファの領域を前記ホストに解放させる。
以下、図面を参照して、実施形態を説明する。
図1は、実施形態に係る実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図である。実施形態に係るメモリシステムは、不揮発性メモリを含むストレージデバイスである。
図1は、実施形態に係る実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図である。実施形態に係るメモリシステムは、不揮発性メモリを含むストレージデバイスである。
情報処理システム1は、ホスト(ホストデバイス)2と、ストレージデバイス3とを含む。ホスト(ホストデバイス)2は、一つまたは複数のストレージデバイス3にアクセスするように構成された情報処理装置である。情報処理装置は、例えば、パーソナルコンピュータ、またはサーバコンピュータである。
以下では、サーバコンピュータのような情報処理装置がホスト2として使用される場合を主として説明する。
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト2は、複数のストレージデバイス3に接続されてもよい。また、ホスト2は、ネットワーク70を介して複数のエンドユーザ端末(クライアント)71に接続されてもよい。ホスト2は、これらエンドユーザ端末71に対して様々なサービスを提供することができる。
ホスト2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末71)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末71)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
複数の仮想マシンが、このホスト2として機能する物理サーバ上で実行されてもよい。ホスト2上で実行されるこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末71)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、この仮想マシンに対応するエンドユーザ端末71によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。
ホスト(サーバ)2においては、フラッシュトランスレーションレイヤ(ホストFTL)301も実行される。このホストFTL301は、ルックアップテーブル(LUT)を含む。LUTは、データ識別子それぞれとストレージデバイス3内の不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するために使用されるアドレス変換テーブルである。ホストFTL301は、このLUTを使用することによって、ストレージデバイス3内の不揮発性メモリ上のデータ配置を知ることができる。
ストレージデバイス3は、半導体ストレージデバイスである。ストレージデバイス3は、不揮発性メモリにデータを書き込む。そして、ストレージデバイス3は、不揮発性メモリからデータを読み出す。
ストレージデバイス3は、ローレベルアブストラクションを実行することができる。ローレベルアブストラクションは不揮発性メモリのアブストラクションのための機能である。ローレベルアブストラクションは、データ配置を補助する機能等を含む。データ配置を補助する機能は、例えば、ホスト2から送信されるライトコマンドに対して、ユーザデータが書き込まれるべき不揮発性メモリ内の物理的な記憶位置を示す物理アドレスを割り当てる機能と、この割り当てられた物理アドレスを上位階層(ホスト2)に通知する機能とを含む。
ストレージデバイス3は、ホスト2にケーブルまたはネットワークを介して接続される。あるいは、ストレージデバイス3は、ホスト2に内蔵されてもよい。
ストレージデバイス3は、ある論理インタフェース規格に準拠して、ホスト2との通信を実行する。この論理インタフェース規格は、例えば、Serial Attached SCSI(SAS)、Serial ATA(SATA)、NVM expressTM(NVMeTM)規格である。NVMe規格がこの論理インタフェース規格として使用された場合、ストレージデバイス3とホスト2との間を接続する物理的なインタフェース50としては、例えば、PCI ExpressTM(PCIeTM)、またはEthernetTMが使用される。
図2は、ホストの構成例と、実施形態に係るメモリシステムの構成例とを示すブロック図である。以下では、実施形態に係るメモリシステムがソリッドステートドライブ(SSD)として実現されている場合を想定する。また以下では、実施形態に係るメモリシステムをSSD3として説明する。情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。
ホスト2は、SSD3にアクセスする情報処理装置である。ホスト2は、データを書き込むための要求であるライト要求(ライトコマンド)をSSD3に送信する。また、ホスト2は、データを読み出すための要求であるリード要求(リードコマンド)をSSD3に送信する。
ホスト2は、プロセッサ101およびメモリ102、等を含む。プロセッサ101は、ホスト2内の各コンポーネントの動作を制御するように構成されたCPU(Central Processing Unit)である。プロセッサ101は、SSD3からメモリ102にロードされるソフトウェア(ホストソフトウェア)を実行する。なお、ホスト2はSSD3以外の他のストレージデバイスを含んでいてもよい。この場合には、ホストソフトウェアは、他のストレージデバイスからメモリ102にロードされてもよい。ホストソフトウェアには、オペレーティングシステム、ファイルシステム、デバイスドライバ、アプリケーションプログラム等が含まれる。
メモリ102は、ホスト2に設けられたメインメモリである。メモリ102は、例えば、DRAM(Dynamic Random Access Memory)のようなランダムアクセスメモリによって実現される。
メモリ102の記憶領域の一部は、ホストライトバッファ1021として使用され得る。ホスト2は、SSD3に書き込まれるべきデータをホストライトバッファ1021に一時的に格納する。つまり、ホストライトバッファ1021は、SSD3に送信されるライトコマンドに関連付けられたデータを保持する。
また、メモリ102の記憶領域の一部は、一つ以上のサブミッションキュー/コンプリーションキューペア(SQ/CQペア)(不図示)を格納するために使用され得る。各SQ/CQペアは、一つ以上のサブミッションキュー(SQ)とこの一つ以上のサブミッションキュー(SQ)に関連付けられた一つのコンプリーションキュー(CQ)とを含む。サブミッションキュー(SQ)は、SSD3に要求(コマンド)を発行するために使用されるキューである。コンプリーションキュー(CQ)は、コマンド完了を示す応答をSSD3から受信するために使用されるキューである。ホスト2は、各SQ/CQペアに含まれる一つ以上のサブミッションキュー(SQ)を経由してSSD3に様々なコマンドを送信する。
SSD3は、ホスト2から送信されたライトコマンドおよびリードコマンドを受信し、受信したライトコマンドおよびリードコマンドに基づいて、不揮発性メモリに対するデータ書き込み動作およびデータ読み出し動作を実行する。不揮発性メモリとしては、例えば、NAND型フラッシュメモリが用いられる。
SSD3は、コントローラ4と、不揮発性メモリ(例えば、NAND型フラッシュメモリ)5とを備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラである。コントローラ4は、System-on-a-Chip(SoC)のような回路によって実現されてもよい。コントローラ4は、チャンネルと称されるメモリバスを介してNAND型フラッシュメモリ5に電気的に接続されている。
NAND型フラッシュメモリ5は、不揮発性の半導体メモリである。NAND型フラッシュメモリ5は、メモリセルアレイを含む。メモリセルアレイは、マトリクス状に配置された複数のメモリセルを含む。NAND型フラッシュメモリ5内のメモリセルアレイは、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、データを消去するデータ消去動作の単位である。データ消去動作は、単に、消去動作、またはイレーズとも称される。ブロックBLK0~BLKx-1の各々は、物理ブロック、フラッシュブロック、またはメモリブロックとも称される。
ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み出し動作の単位である。
ブロックBLK0~BLKx-1の各々は、例えば、クワドレベルセルブロック(QLCブロック)である。各QLCブロックにデータを書き込む動作においては、メモリセル当たりに4ビットのデータを書き込むことにより、4ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。
また、複数のQLCブロックのうちのいくつかは、疑似シングルレベルセルブロック(pSLC)として使用され得る。各pSLCブロックにデータを書き込む動作においては、メモリセル当たりに1ビットのデータを書き込むことにより、1ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。
pSLCブロックにおけるメモリセル当たりの記憶密度は1ビット(すなわち、ワード線当たり1ページ)であり、QLCブロックにおけるメモリセル当たりの記憶密度は4ビット(すなわち、ワード線当たり4ページ)である。そのため、QLCブロックの最小書き込みサイズは、pSLCブロックの最小書き込みサイズの4倍である。
NAND型フラッシュメモリ5に対するデータの読み出し速度および書き込み速度は、記憶密度が高いほど遅く、記憶密度が低いほど速い。したがって、QLCブロックに対するデータの読み出しおよび書き込みに要する時間は、pSLCブロックに対するデータの読み出しおよび書き込みに要する時間よりも長くなる。
NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリダイを含んでいてもよい。各NAND型フラッシュメモリダイは、二次元構造のフラッシュメモリであってもよいし、三次元構造のフラッシュメモリであってもよい。
DRAM6は、揮発性の半導体メモリである。DRAM6は、例えば、NAND型フラッシュメモリ5に書き込むべきデータを一時的に格納するために使用される。また、DRAM6の記憶領域は、コントローラ4によって使用される様々な管理データを格納するために使用される。
次に、コントローラ4の詳細な構成について説明する。
コントローラ4は、ホストインタフェース(I/F)11と、CPU12と、NANDインタフェース(I/F)13と、DRAMインタフェース(I/F)14と、直接メモリアクセスコントローラ(DMAC)15と、スタティックRAM(SRAM)16と、ECC(Error Correction Code)エンコード/デコード部17とを含む。
これらホストインタフェース11と、CPU12と、NANDインタフェース13と、DRAMインタフェース14と、DMAC15と、SRAM16と、ECCエンコード/デコード部17とは、バス10を介して相互接続される。
ホストインタフェース11は、ホスト2との通信を実行するホストインタフェース回路である。ホストインタフェース11は、例えば、PCIeコントローラである。あるいは、SSD3がネットワークインタフェースコントローラを内蔵する構成である場合には、ホストインタフェース11は、ネットワークインタフェースコントローラの一部として実現されてもよい。ホストインタフェース11は、ホスト2から様々なコマンドを受信する。様々なコマンドは、例えば、ライトコマンド、リードコマンドである。
CPU12は、プロセッサである。CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、DMAC15、SRAM16、ECCエンコード/デコード部17を制御する。CPU12は、SSD3への電源の供給に応じて、NAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードする。
CPU12は、NAND型フラッシュメモリ5内のブロックの管理を実行する。NAND型フラッシュメモリ5内のブロックの管理とは、例えば、NAND型フラッシュメモリ5に含まれる不良ブロック(バッドブロック)の管理と、ウェアレベリングである。
NANDインタフェース13は、複数の不揮発性メモリダイを制御するメモリインタフェース回路である。NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御する。NANDインタフェース13は、例えば、複数のチャンネル(Ch)を介して複数のNAND型フラッシュメモリダイに接続される。NANDインタフェース13とNAND型フラッシュメモリ5との間の通信は、例えば、Toggle NANDフラッシュインタフェースまたはオープンNANDフラッシュインタフェース(ONFI)に準拠して実行される。
DRAMインタフェース14は、DRAMを制御するDRAMインタフェース回路である。DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御する。DRAM6の記憶領域の一部は、Z2Pテーブル(zone-to-physical address translation table)61、フリーpSLCブロックプール62、Half Used pSLCブロックプール63、QLC SAテーブル64、pSLC SAテーブル65、およびラージライトバッファ(LWB)66を格納するために利用される。
DMAC15は、直接メモリアクセス(DMA)を実行する回路である。DMAC15は、CPU12の制御の下、ホスト2のメモリ102とDRAM6(またはSRAM16)との間のデータ転送を実行する。例えば、ホスト2のホストライトバッファ1021からSRAM16のテンポラリライトバッファ(TWB)161にライトデータを転送すべき場合には、CPU12は、ホストライトバッファ1021内の位置を示す転送元アドレス、転送すべきライトデータのサイズ、TWB161内の位置を示す転送先アドレスをDMAC15に対して指定する。TWB161は、ホスト2から受信した各ライトコマンドに関連付けられたライトデータを一時的に格納するための記憶領域である。ここでは、SRAM16の記憶領域の一部がTWB161として使用される場合を想定するが、DRAM6の記憶領域の一部がTWB161として使用されてもよい。また、TWB161は、QLCブロックの最小書き込みサイズと同じサイズまたはそれ以上のサイズの記憶領域を有していてもよい。
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、このデータをエンコードすることによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う。
次に、CPU12によって実行される処理について説明する。CPU12は、ファームウェアを実行することによって、フラッシュマネージメント部121、QLCブロック制御部122、およびpSLCブロック制御部123として機能することができる。なお、フラッシュマネージメント部121、QLCブロック制御部122、およびpSLCブロック制御部123それぞれの一部または全ては、コントローラ4内の専用のハードウェアによって実現されてもよい。
フラッシュマネージメント部121は、ホスト2から受信したライトコマンドに基づいて、ライトデータをNAND型フラッシュメモリ5に書き込む動作を制御する。ライトコマンドは、書き込むべきデータ(ライトデータ)をNAND型フラッシュメモリ5に書き込むコマンド(ライト要求)である。ホスト2から受信したライトコマンドとしては、NVMe規格で規定されたZoned Namespace(ZNS)において使用されるライトコマンドが使用され得る。
コントローラ4がZNSをサポートするケースにおいては、フラッシュマネージメント部121は、SSD3をゾーンド・デバイス(zoned device)として動作させることができる。ゾーンド・デバイスでは、SSD3にアクセスするための論理アドレス空間を分割することによって得られる複数の論理アドレス範囲がそれぞれ割り当てられた複数のゾーンが、論理的な記憶領域として使用される。複数のゾーンの各々には、NAND型フラッシュメモリ5内の複数の物理記憶領域のうちの一つが割り当てられる。これにより、フラッシュマネージメント部121は、NAND型フラッシュメモリ5内の各物理記憶領域をゾーンとして扱うことができる。
SSD3にアクセスするための論理アドレス空間は、SSD3にアクセスするためにホスト2によって使用される連続する論理アドレスである。論理アドレスとしては、論理ブロックアドレス(LBA)が使用される。
以下では、フラッシュマネージメント部121がZNSをサポートしており、任意のゾーンにデータを書き込むためのライトコマンドとして、NVMe規格で規定されたZNSにおいて使用されるライトコマンド、つまりゾーンを指定するライトコマンド、が使用されるケースを主として説明する。
QLCブロック制御部122は、複数のQLCブロックを複数のゾーンにそれぞれ割り当てる。複数のゾーンの各々に割り当てられるQLCブロックは、一つの物理ブロック(QLC物理ブロック)であってもよいし、あるいは、2以上のQLC物理ブロックを含むブロックグループであってもよい。各ブロックグループは、スーパーブロック(QLCスーパーブロック)とも称される。このように、各ゾーンにはQLCブロックが物理記憶領域として割り当てられる。したがって、ZNSにおいて使用されるライトコマンドは、一つの書き込み先ゾーン、つまり一つの書き込み先ブロック(書き込み先QLC)を指定することができる。なお、ゾーンを指定するライトコマンドの代わりに、書き込み先ブロックの物理アドレスを指定するライトコマンドを使用してもよい。ゾーンを指定するライトコマンド、および書き込み先ブロックの物理アドレスを指定するライトコマンドのいずれも、書き込み先ブロックを指定するライトコマンドとして使用することができる。
フラッシュマネージメント部121は、ホスト2から受信したライトコマンドに基づいて、ライトコマンドによって指定されたゾーンに割り当てられたQLCブロックにデータを書き込む動作を開始する。QLCブロックにデータを書き込む動作として、フラッシュマネージメント部121は、例えば、複数段階の書き込み動作を実行する。複数段階の書き込み動作は、第1段階の書き込み動作と第2段階の書き込み動作とを少なくとも含む。複数段階の書き込み動作は、例えば、フォギー・ファイン書き込み動作である。
フォギー・ファイン書き込み動作は、同じワード線に接続されたメモリセル群に対する複数回の書き込み動作(フォギー書き込み動作、ファイン書き込み動作)によって実行される。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回目のデータ転送動作によって転送されるデータと同一である。そして、転送された4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための2回目の書き込み動作(ファイン書き込み動作)が行われる。
あるワード線に接続された複数のメモリセルに対するフォギー書き込み動作が終了しても、このワード線に接続された複数のメモリセルに対するファイン書き込み動作はすぐに実行することはできない。このワード線に接続された複数のメモリセルに対するファイン書き込み動作は、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了した後に実行可能となる。このため、QLCブロックにデータを書き込むために必要な時間は長くなる。また、QLCブロックのあるワード線に接続された複数のメモリセルにフォギー書き込み動作によって書き込まれたデータは、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了し、且つこのワード線に接続された複数のメモリセルに対するファイン書き込み動作が終了するまで、読み出すことができない。
そのため、QLCブロックに書き込まれるべきデータは、そのデータのファイン書き込み動作が終了するまで、いずれかの記憶領域で保持されている必要がある。
このように、フラッシュマネージメント部121は、QLCブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが、この一つのワード線に後続する一つ以上のワード線へのデータの書き込み後に可能となる書き込みモード(フォギー・ファイン書き込み動作のような複数段階の書き込み動作)を使用して、QLCブロックの各ワード線に接続された複数のメモリセルに、QLCブロックの最小書き込みサイズ(ページサイズの4倍である64KB)を有するデータを書き込む。
なお、NAND型フラッシュメモリ5が2つのプレーンを含むマルチプレーン構成を有する場合には、2つのプレーンからそれぞれ選択される2つのQLC物理ブロックに対する書き込み動作が同時に実行される。これら2つのQLC物理ブロックは、2つのQLC物理ブロックを含む一つのQLCブロック(QLCスーパーブロック)として扱われる。したがって、QLCブロックの最小書き込みサイズは128KBとなる。
一方、pSLCブロックに対する書き込み動作においては、フラッシュマネージメント部121は、pSLCブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しがこの一つのワード線へのデータの書き込みのみによって可能となる書き込みモード(SLCモード)を使用して、pSLCブロックの各ワード線に接続された複数のメモリセルにpSLCブロックの最小書き込みサイズ(ページサイズ)を有するデータを書き込む。SLCモードでは、1ページ分のデータがNAND型フラッシュメモリ5に1回のみ転送される。そして、メモリセル当たりに1ビットが書き込まれるように、1ページ分のデータが一つのワード線に接続された複数のメモリセルに書き込まれる。
以下では、QLCブロックの最小書き込みサイズを第1の最小書き込みサイズとも称し、pSLCブロックの最小書き込みサイズを第2の最小書き込みサイズとも称する。
フラッシュマネージメント部121は、pSLCブロックとして割り当てることが必要なブロックの個数を減少できるようにするために、QLCブロックへの書き込みとpSLCブロックへの書き込みを選択的に実行する。
すなわち、フラッシュマネージメント部121は、複数の書き込み先ブロック(複数の書き込み先ブロックQLCブロック)のいずれか一つを各々が指定する複数のライトコマンドをホスト2から受信する。フラッシュマネージメント部121は、複数の書き込み先QLCブロックのうちのいずれか一つの書き込み先QLCブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズが、第1の最小書き込みサイズ(例えば、128KB)を有するデータの書き込みが完了可能な第1の書き込みサイズに達したかを判定する。ある書き込み先QLCブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズは、これら1以上の受信済みのライトコマンドによって指定されるデータサイズの合計を示す。
例えば、書き込み先QLCブロックに含まれる5ワード線に跨がって複数段階の書き込み動作を行うケースにおいては、第1の書き込みサイズは、640KB(=128KB×5)である。
ある書き込み先QLCブロックに書き込むべき640KBのライトデータがホストライトバッファ1021に格納されている場合、この書き込み先QLCブロックに含まれる複数のワード線のうちのある5ワード線の各々に接続された複数のメモリセルに対するフォギー書き込み動作と、5ワード線のうちの先頭のワード線に接続された複数のメモリセルに対するファイン書き込み動作とを実行可能となる。この結果、先頭のワード線に接続された複数のメモリセルに対する128KBのデータの書き込みを完了することができる。よって、この128KBのデータをNAND型フラッシュメモリ5から読み出し可能となる。
また、例えば、書き込み先QLCブロックに含まれる6ワード線に跨がって複数段階の書き込み動作を行うケースにおいては、第1の書き込みサイズは、768KB(=128KB×6)である。
ある書き込み先QLCブロックに書き込むべき768KBのライトデータがホストライトバッファ1021に格納されている場合、この書き込み先QLCブロックに含まれる複数のワード線のうちのある6ワード線の各々に接続された複数のメモリセルに対するフォギー書き込み動作と、6ワード線のうちの先頭のワード線に接続された複数のメモリセルに対するファイン書き込み動作とを実行可能となる。この結果、先頭のワード線に接続された複数のメモリセルに対する128KBのデータの書き込みを完了することができる。よって、この128KBのデータをNAND型フラッシュメモリ5から読み出し可能となる。
このように、第1の書き込みサイズは、第1の最小書き込みサイズの整数倍のサイズを有する。なお、書き込み先ブロックがトリプルレベルセルブロック(TLCブロック)であり、TLCブロックの各ワード線にフルシーケンスモードで3ページ分のデータを書き込みケースにおいては、第1の最小書き込みサイズは48KBである。NAND型フラッシュメモリ5が2つのプレーンを含むマルチプレーン構成を有する場合には、TLCブロックの最小書き込みサイズは96KBとなる。TLCブロックIフルシーケンスモードでデータを書き込む場合は、3ページ分のデータをTLCブロックに書き込むことによってこの3ページ分のデータの書き込みが完了する。したがって、第1の最小書き込みサイズ(例えば、96KB)を有するデータの書き込みが完了可能な第1の書き込みサイズは、第1の最小書き込みサイズと等しい(例えば、96KB)。
以下では、QLCブロックを書き込み先ブロックとして使用する場合を主として説明する。
ある書き込み先QLCブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズが、第1の最小書き込みサイズ(例えば、128KB)を有するデータの書き込みが完了可能な第1の書き込みサイズ(例えば、640KB)に達した場合、フラッシュマネージメント部121は、ホストライトバッファ1021に格納されているライトデータのうち、書き込み先QLCブロックに対する第1の最小書き込みサイズを有するライトデータの書き込みが完了するように、書き込み先QLCブロックに対する書き込み動作を実行する。つまり、フラッシュマネージメント部121は、pSLCブロックを使用せずに、ホストライトバッファ1021に格納されているライトデータを書き込み先QLCブロックに直接的に書き込む。これにより、128KBのライトデータの書き込みを完了させることが可能となる。そして、フラッシュマネージメント部121は、書き込みが完了したライトデータに対応する1以上のライトコマンドに対する1以上の完了応答をホスト2に送信することによって、書き込みが完了したライトデータが格納されているホストライトバッファ1021の領域をホスト2に解放させる。
ホストライトバッファ1021においては、複数の書き込み先QLCブロックに書き込まれるべきライトデータが格納される。第1の書き込みサイズ未満の総サイズを各々が有する、異なる書き込み先ブロックそれぞれに書き込まれるべき複数のライトデータがホストライトバッファ1021に格納されることによってホストライトバッファ1021の残り容量が閾値を下回った場合、フラッシュマネージメント部121は、異なる書き込み先ブロックのうちの一つの書き込み先ブロックを選択する。そして、フラッシュマネージメント部121は、選択した一つの書き込み先ブロックに対応するライトデータをpSLCブロックに第2の最小書き込みサイズ毎に書き込む。これにより、pSLCブロックに対するこのライトデータの書き込みが完了するので、このライトデータはNAND型フラッシュメモリ5から読み出し可能となる。フラッシュマネージメント部121は、pSLCブロックに書き込まれたライトデータに対応する1以上のライトコマンドに対する1以上の完了応答をホスト2に送信することによって、pSLCブロックに書き込まれたライトデータが格納されているホストライトバッファ1021の領域をホスト2に解放させる。この結果、ホストライトバッファ1021の残り容量を増やすことができる。
閾値としては、書き込み先QLCブロックの最小書き込みサイズ(例えば、128KB)を使用することができる。これにより、書き込み先QLCブロックの最小書き込みサイズを有する新たなライトデータを格納可能な領域をホストライトバッファ1021に確保することが可能となる。
ホスト2による特定の書き込み先QLCブロックへの書き込みが集中するケースにおいては、ホストライトバッファ1021全体がライトデータで満たされる前に、この特定の書き込み先QLCブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズが第1の書き込みサイズ(例えば、640KB)に達し得る。この場合、フラッシュマネージメント部121は、この特定の書き込み先QLCブロックに書き込むべきライトデータを、pSLCブロックを経由せずに、特定の書き込み先QLCブロックに直接的に書き込みことができる。したがって、全てのデータを、pSLCブロック群を経由して個々の書き込み先QLCブロックに書き込む場合に比し、必要なpSLCブロックの数を減少させることができる。
例えば、ホストライトバッファ1021の容量が1MBであり、ホストライトバッファ1021が8個のゾーン(8個の書き込み先QLCブロック)によって共有されるケースにおいては、8個の書き込み先QLCブロックのうちでホスト2による書き込み量がより多い1つの書き込み先QLCブロックに書き込むべきライトデータを、pSLCブロックを経由せずに、一つの書き込み先QLCブロックに直接的に書き込みことができる。この場合、この1つの書き込み先QLCブロックに書き込むべき640KBのライトデータがホストライトバッファ1021に蓄積されると、この1つの書き込み先QLCブロックのあるワード線に対する128KBのライトデータの書き込みが完了される。書き込みが完了した128KBのライトデータが格納されているホストライトバッファ1021内の領域は解放される。ホストライトバッファ1021に格納されているこの1つの書き込み先QLCブロックに対応するライトデータのサイズは512KBとなる。解放された128KBの領域は、新たな128KBのライトデータの格納に利用可能となる。この1つの書き込み先QLCブロックに対する128KBの新たなライトデータがホストライトバッファ1021に蓄積されると、この1つの書き込み先QLCブロックに対する別のワード線に対する128KBのライトデータの書き込みが完了される。このようにして、1MBのホストライトバッファ1021のうちの640KBの領域は、ホスト2による書き込み量がより多い特定の書き込み先QLCブロックに対応するライトデータの格納に使用される。そして、1MBのホストライトバッファ1021のうちの残りの384KBの領域は、他の7個の書き込み先QLCブロックに対応するライトデータの格納に使用される。
また、例えば、ホストライトバッファ1021の容量が3MBであり、ホストライトバッファ1021が8個のゾーン(8個の書き込み先QLCブロック)によって共有されるケースにおいては、8個の書き込み先QLCブロックのうちでホスト2による書き込み量がより多い4つの書き込み先QLCブロックに書き込むべきライトデータを、pSLCブロックを経由せずに、一つの書き込み先QLCブロックに直接的に書き込みことができる。
次に、pSLCブロックの割り当てについて説明する。pSLCブロック制御部123は、異なるQLCブロックに書き込まれるべきデータが一つのpSLCブロックに混在されることを防止するために、対応するライトデータをpSLCブロックに書き込むことが決定された書き込み先QLCブロックの各々に、pSLCブロックを割り当てる。ある書き込み先QLCブロックに割り当てられたpSLCブロックは、この書き込み先QLCブロックに書き込まれるべきデータのみを一時的に保持する不揮発性の記憶領域として使用される。つまり、ある書き込み先QLCブロックに書き込まれるべきデータのみが、この書き込み先QLCブロックに割り当てられたpSLCブロックに書き込まれる。別の書き込み先QLCブロックに書き込まれるべきデータは、この別の書き込み先QLCブロックに割り当てられたpSLCブロックに書き込まれる。
したがって、一つのpSLCブロックは、一つの書き込み先QLCブロックの書き込み未完了データのみを保持するために使用され、同時に複数の書き込み先QLCブロックの書き込み未完了データを保持することはない。つまり、異なる書き込み先QLCブロックに書き込むべき複数種のデータが一つのpSLCブロックに混在することを防止することができる。よって、pSLCブロックに対するガベージコレクション動作の実行は不要となる。
また、ある書き込み先QLCブロックに割り当てられたpSLCブロックに未書き込み領域が残っている状態で、この書き込み先QLCブロックが読み出し可能データで満たされた場合、pSLCブロック制御部123は、この書き込み先QLCブロックからこのpSLCブロックの割り当てを解除する。ここで、読み出し可能データとは、書き込み先QLCブロックへの書き込みが完了したデータである。具体的には、書き込み先QLCブロックへの書き込みが複数段階の書き込み動作を使用して実行される場合には、読み出し可能データは、複数段階の書き込み動作が完了したデータである。例えば、あるデータのファイン書き込み動作が完了すると、このデータは読み出し可能データとなる。書き込み先QLCブロックが読み出し可能データで満たされた場合、pSLCブロックに既に書き込まれているデータは全て、書き込み先QLCブロックへの書き込みが完了した書き込み完了データとなる。pSLCブロックに格納されている書き込み完了データは、書き込み先QLCブロックから読み出し可能である。したがって、書き込み先QLCブロックへの書き込みが完了した書き込み完了データは、もはやpSLCブロックに保持しておく必要はない。
この場合、pSLCブロック制御部123は、この割り当てが解除されたpSLCブロックを、他の書き込み先QLCブロックに割り当てる。そして、他の書き込み先QLCブロックに書き込むべきデータのみを、このpSLCブロックの未書き込み領域に書き込む。このように、pSLCブロック制御部123は、割り当てが解除されたpSLCブロックを、他の書き込み先QLCブロックに書き込むべきデータのみを一時的に保持する不揮発性の記憶領域として再使用し、このpSLCブロックの未書き込み領域を有効利用する。
ガベージコレクション動作の対象となるデータは、書き込み先QLCブロックへの書き込みが完了していない書き込み未完了データのみである。したがって、ある書き込み先QLCブロックに割り当てられていたpSLCブロックの残り記憶領域に別の書き込み先QLCブロックに書き込むべきデータが書き込まれても、このpSLCブロックに存在する書き込み未完了データは、別の書き込み先QLCブロックへの書き込み未完了データのみである。つまり、このpSLCブロックに、異なる書き込み先QLCブロックに対応する書き込み未完了データは混在しない。よって、再使用されたpSLCブロックに対するガベージコレクション動作も不要である。
次に、NAND型フラッシュメモリ5内の記憶領域について説明する。NAND型フラッシュメモリ5内の記憶領域は、図3に示すように、pSLCバッファ201とQLC領域202とに大別される。
QLC領域202は、複数のQLCブロックを含む。また、pSLCバッファ201は、複数のpSLCブロックを含む。換言すれば、NAND型フラッシュメモリ5に含まれる複数のブロックは、QLCブロック群と、pSLCブロック群とによって構成され得る。QLCブロック制御部122は、QLC領域202に含まれる複数のQLCブロックの各々をQLCブロックとしてのみ使用し、pSLCブロック制御部123は、pSLCバッファ201に含まれる複数のpSLCブロックの各々を、pSLCブロックとしてのみ使用してもよい。
次に、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係について説明する。図4は、実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係の例を示すブロック図である。
NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリダイ(または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型フラッシュメモリダイを並列動作させることができる。
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループ(スーパーブロック)の単位で実行されてもよい。
次に、スーパーブロックの構成例について説明する。図5は、実施形態に係るメモリシステムにおいて使用される、あるブロックグループ(スーパーブロック)の構成例を示す図である。
一つのブロックグループ、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、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)を含む一つのスーパーブロック(SB)が例示されている。
図3で説明したQLC領域202内の各QLCブロックは、一つのスーパーブロック(QLCスーパーブロック)によって実現されてもよいし、一つの物理ブロック(QLC物理ブロック)によって実現されてもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
pSLCバッファ201に含まれる各pSLCブロックも、一つの物理ブロックによって構成されていてもよいし、複数の物理ブロックの集合を含むスーパーブロックによって構成されてもよい。
次に、フラッシュマネージメント部121によって実行される、QLCブロックに対するフォギー・ファイン書き込み動作について説明する。図6は、QLCブロックに一つのメモリセル当たりに4ビットを書き込むモードでデータを書き込む動作を説明するための図である。
ここでは、5つのワード線を往復する場合のフォギー・ファイン書き込み動作を例示する。QLCブロック(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)次いで、次の4ページ(P16~P19)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLC#1内のワード線WL4に接続された複数のメモリセルに、これら4ページ(P16~P19)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
(6)ワード線WL4に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL0に戻り、ワード線WL0に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL0に対するフォギー書き込み動作で使用された4ページ(P0~P3)分のライトデータと同じ4ページ(P0~P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLC#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0~P3)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP0~P3に対するフォギー・ファイン書き込み動作が完了する。この結果、ページP0~P3に対応するデータをQLC#1から正しく読み出すことが可能となる。
(7)次いで、次の4ページ(P20~P23)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLC#1内のワード線WL5に接続された複数のメモリセルに、これら4ページ(P20~P23)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
(8)ワード線WL5に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL1に戻り、ワード線WL1に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL1に対するフォギー書き込み動作で使用された4ページ(P4~P7)分のライトデータと同じ4ページ(P4~P7)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLC#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4~P7)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP4~P7に対するフォギー・ファイン書き込み動作が完了する。この結果、ページP4~P7に対応するデータをQLC#1から正しく読み出すことが可能となる。
なお、ここでは、フォギー書き込み動作およびファイン書き込み動作の各々において4ページ分のデータをNAND型フラッシュメモリ5に転送する場合を説明したが、QLC#1がNAND型フラッシュメモリ5に含まれる2つのプレーンからそれぞれ選択される2つのQLC物理ブロックを含む場合には、2つのQLC物理ブロックに対すね書き込みが同時に実行される。このため、フォギー書き込み動作およびファイン書き込み動作の各々においては、8ページ分のデータがNAND型フラッシュメモリ5に転送される。
次に、複数のゾーンの構成について説明する。図7は、NVMe規格によって規定されたゾーンド・ネームスペースの構成例を示す図である。
各ゾーンド・ネームスペースの論理ブロックアドレス範囲は、LBA 0から始まる。例えば、図7のゾーンド・ネームスペースの論理ブロックアドレス範囲は、LBA 0からLBA q-1までの連続するq個のLBAを含んでいる。このゾーンド・ネームスペースは、ゾーン#0からゾーン#r-1までのr個のゾーンに分割されている。これらr個のゾーンは、連続する非重複の論理ブロックアドレスを含む。
より詳しくは、このゾーンド・ネームスペースには、ゾーン#0、ゾーン#1、…、ゾーン#r-1が割り当てられている。LBA 0は、ゾーン#0の最小のLBAを示す。LBA q-1は、ゾーン#r-1の最大のLBAを示す。ゾーン#0は、LBA 0、LBA m-1を含む。LBA 0は、ゾーン#0の最小のLBAを示す。LBA m-1は、ゾーン#0の最大のLBAを示す。ゾーン#1は、LBA m、LBA m+1、…、LBA n-2、LBA n-1を含む。LBA mは、ゾーン#1の最小のLBAを示す。LBA n-1は、ゾーン#1の最大のLBAを示す。ゾーン#r-1は、LBA p、…、LBA q-1を含む。LBA pは、ゾーン#r-1の最小のLBAを示す。LBA q-1は、ゾーン#r-1の最大のLBAを示す。
コントローラ4は、複数のゾーンの各々に、複数のQLCブロックの一つを物理記憶領域として割り当てる。さらに、コントローラ4は、複数のQLCブロックの各々と複数のゾーンの各々との間のマッピングを、Z2Pテーブル61を使用して管理する。
例えば、あるゾーンにデータを書き込むためのライトコマンドをホスト2から受信した場合、コントローラ4は、このゾーンに割り当てられたQLCブロックを書き込み先ブロックとして決定し、受信したライトコマンドに関連付けられたデータをこの書き込み先ブロックに書き込む。また、別のゾーンにデータを書き込むためのライトコマンドをホスト2から受信した場合、コントローラ4は、この別のゾーンに割り当てられたQLCブロックを書き込み先ブロックとして決定し、受信したライトコマンドに関連付けられたデータをこの書き込み先ブロックに書き込む。
ライトコマンドは、例えば、ライトデータが書き込まれるべき最初のセクタを示す論理アドレス(開始LBA)と、このライトデータのデータサイズと、このライトデータが格納されているホストライトバッファ1021内の位置を示すデータポインタ(バッファアドレス)とを含む。
例えば、ライトコマンドに含まれる論理アドレス(開始LBA)の上位ビット部は、このライトコマンドに関連付けられたライトデータが書き込まれるべきゾーンを指定する識別子、つまりこのゾーンのゾーン・スタート・論理ブロックアドレス(ZSLBA)、として使用される。各ゾーンにはQLCブロックが割り当てられているので、ZSLBAは、データが書き込まれるべきQLCブロックを指定する識別子としても使用される。また、ライトコマンドに含まれる論理アドレス(開始LBA)の下位ビット部は、ライトデータが書き込まれるべきゾーン内の書き込み先LBA(オフセット)として使用される。
したがって、ライトコマンドによって指定される論理アドレスは、複数のゾーンのうちの一つのゾーンと、このゾーンの先頭からこのゾーン内の書き込み先位置までのオフセットとの双方を示す。なお、ZSLBAのみを指定するゾーンアペンドコマンドがライトコマンドとして使用されてもよい。この場合には、ゾーン内の書き込み先LBA(オフセット)は、このゾーン内の書き込みがシーケンシャルに実行されるようにコントローラ4によって決定される。
ライトデータのデータサイズは、例えば、セクタ(論理ブロック)の数によって指定されもよい。一つのセクタは、ホスト2によって指定可能なライトデータの最小データサイズに対応する。つまり、ライトデータのデータサイズはセクタの倍数によって表される。
各ゾーン内の次の書き込み可能LBAの値は、各ゾーンに対応するライトポインタによって管理される。
次に、ライトポインタの更新動作を説明する。図8は、実施形態に係るメモリシステムにおいて実行される、ライトポインタの更新動作を示す図である。
コントローラ4は、複数のゾーンにそれぞれ対応する複数のライトポインタを管理する。各ライトポインタは、そのライトポインタに対応するゾーン内の次の書き込み可能LBAを示す。あるゾーンにデータをシーケンシャルに書き込むと、コントローラ4は、このゾーンに対応するライトポインタの値を、データが書き込まれた論理ブロックの数だけ増やす。
ここでは、ゾーン#1を例に、ライトポインタの更新動作を説明する。ゾーン#1は、LBA mからLBA n-1までの論理ブロックアドレス範囲を含む。LBA mは、ゾーン#1の最小の論理ブロックアドレス、つまりゾーン#1のゾーン・スタート・論理ブロックアドレス(ZSLBA)である。
ゾーン#1が有効データを含まないエンプティ状態である場合、ゾーン#1に対応するライトポインタは、ゾーン#1のゾーン・スタート・論理ブロックアドレスであるLBA mを示す。ゾーン#1をオープンするためのコマンドをホスト2から受信すると、コントローラ4は、ゾーン#1の状態をデータの書き込みが可能なオープン状態に遷移させる。この場合、コントローラ4は、有効データを含まないエンプティ状態のQLCブロック(フリーQLCブロック)の一つをゾーン#1に関連付けられたオープン状態の物理記憶領域として割り当て、そしてこの一つのQLCブロックに対する消去動作を実行する。これにより、この一つのQLCブロックは書き込み先QLCブロックとしてオープンされる。この結果、ゾーン#1に対する書き込みが可能となる。
ゾーン#1を指定するライトコマンドによって指定された書き込み先位置(開始LBA)がゾーン#1のライトポインタ(ここでは、LBA m)に等しい場合、コントローラ4は、その指定された開始LBAから始まるLBA範囲、例えば、LBA mと、LBA m+1、にデータを書き込む。
コントローラ4は、データが書き込まれた論理ブロックの数だけゾーン#1のライトポインタの値が増えるように、ゾーン#1のライトポインタを更新する。例えば、LBA mと、LBA m+1にデータが書き込まれた場合、コントローラ4は、ライトポインタの値をLBA m+2に更新する。LBA m+2は、ゾーン#1内の未書き込みLBAのうちの最小のLBA、つまりゾーン#1内の次の書き込み可能LBAを示す。
データが既に書き込まれているゾーン#1内のあるLBA範囲にデータを再び書き込む場合には、ゾーン#1をリセットしてライトポインタの値をLBA mに戻し、そして、ゾーン#1を再びオープンすることが必要となる。
コントローラ4がホスト2から受信するコマンドには、ライトコマンドの他にも、リードコマンド、オープンゾーンコマンド、クローズゾーンコマンド、リセットゾーンコマンド、等が含まれる。
リードコマンドはNAND型フラッシュメモリ5からデータを読み出すコマンド(リード要求)である。リードコマンドは、データ(読み出し対象データ)が読み出されるべき最初のセクタを示す論理アドレス(開始LBA)と、読み出し対象データのデータサイズと、この読み出し対象データが転送されるべきホスト2のリードバッファ内の位置を示すデータポインタ(バッファアドレス)とを含む。ホスト2のリードバッファは、ホスト2のメモリ102内に設けられた記憶領域である。
リードコマンドに含まれる論理アドレスの上位ビット部は、読み出し対象データが格納されているゾーンを指定する識別子として使用される。また、リードコマンドに含まれる論理アドレスの下位ビット部は、読み出し対象データが格納されているゾーン内のオフセットを指定する。
オープンゾーンコマンドは、各々がエンプティ状態の複数のゾーンの一つを、データの書き込みに利用可能なオープン状態に遷移させるためのコマンド(オープン要求)である。つまり、オープンゾーンコマンドは、有効データを含まないエンプティ状態である特定のブロックグループを、データの書き込みに利用可能なオープン状態に遷移させるために使用される。
オープンゾーンコマンドは、オープン状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、オープンゾーンコマンドによって指定される論理アドレスの上位ビット部は、オープン状態に遷移させるべきゾーンを指定する識別子として使用される。
クローズゾーンコマンドは、オープン状態のゾーンの一つを、書き込みが中断されたクローズ状態に遷移させるためのコマンド(クローズ要求)である。クローズゾーンコマンドは、クローズ状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、クローズゾーンコマンドによって指定される論理アドレスの上位ビット部が、クローズ状態に遷移させるべきゾーンを指定する識別子として使用される。
リセットゾーンコマンドは、書き換えが実行されるべきゾーンをリセットしてエンプティ状態に遷移させるためのコマンド(リセット要求)である。例えば、リセットゾーンコマンドは、データで満たされているフル状態のゾーンを、有効データを含まないエンプティ状態に遷移させるために使用される。有効データは、論理アドレスに関連付けられているデータを意味する。リセットゾーンコマンドは、エンプティ状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、リセットゾーンコマンドによって指定される論理アドレスの上位ビット部が、エンプティ状態に遷移させるべきゾーンを指定する識別子として使用される。リセットゾーンコマンドによってエンプティ状態に遷移されたゾーンに対応するライトポインタの値は、このゾーンのZSLBAを示す値に設定される。
例えば、ゾーン#1がリセットされた場合、コントローラ4は、ゾーン#1用の物理記憶領域として割り当てられていたQLCブロックを、有効データを含まないフリーQLCブロックとして扱うことができる。したがって、このQLCブロックに対する消去動作を行うだけで、このQLCブロックをデータの書き込みに再利用することができる。
図9は、実施形態に係るストレージデバイスにおいて使用される、複数のゾーンの各々と複数のQLCブロックの各々との間の対応関係を管理するための管理テーブルであるZ2Pテーブル61の構成例を示す図である。
Z2Pテーブル61は、任意のゾーンド・ネームスペースに含まれる複数のゾーンそれぞれに対応する複数のエントリを有する。図9では、Z2Pテーブル61は、r個のゾーンを管理するためのr個のエントリを有する。
複数のエントリのそれぞれには、そのエントリに対応するゾーンに割り当てられたQLCブロックを示す識別子(QLCブロック識別子)が、このゾーンに対応する物理記憶領域の物理アドレスPBAとして格納されている。図9では、ゾーン#0に対応するエントリには、ゾーン#0に割り当てられたQLCブロックを示すQLCブロック識別子が格納されている。また、ゾーン#1に対応するエントリには、ゾーン#1に割り当てられたQLCブロックを示すQLCブロック識別子が格納されている。さらに、ゾーン#r-1に対応するエントリには、ゾーン#1に割り当てられたQLCブロックを示すQLCブロック識別子が格納されている。
図9では、あるゾーンド・ネームスペースに対応するZ2Pテーブル61を例示したが、Z2Pテーブル61に複数のゾーンド・ネームスペースに含まれる複数のゾーンそれぞれに対応するエントリが含まれていてもよい。
このように、ゾーンド・ネームスペースに準拠したSSD3においては、ホスト2から受信したライトコマンドが指定するゾーンに割り当てられたQLCブロックにライトデータが書き込まれる。しかし、QLCブロックに対する書き込み動作では、フォギー・ファイン書き込み動作のような複数回のプログラム動作を必要とする書き込み動作が実行され得る。このとき、一回目の書き込み動作から最後の書き込み動作までの間、QLCブロック以外の記憶領域にデータを保持する必要がある。
また、SSD3がサーバコンピュータのストレージデバイスとして使用されるケースにおいては、例えば、複数種のデータが異なるゾーンにそれぞれ書き込まれるように、例えば、複数のアプリケーション(または複数のクライアント)にそれぞれ対応する複数のゾーンが同時的に使用されるケースがある。この場合、ゾーンに対する書き込みの開始からこのゾーン全体がデータで満たされたフル状態になるまでの時間は、ゾーン毎に異なる場合がある。
このような場合に、複数のゾーンに書き込まれるべきデータを一つのpSLCブロックに混在させると、各ゾーンの書き込み完了タイミングの差から、必要なデータ(有効データ)と不要なデータ(無効データ)とが一つのpSLCブロックに混在することになる。あるQLCブロックへの書き込みが完了したデータ(書き込み完了データ)は、そのQLCブロックから読み出すことができる。したがって、pSLCブロックに格納されている書き込み完了データは不要データである。あるQLCブロックへの書き込みが完了していないデータ(書き込み未完了データ)は、そのQLCブロックから読み出すことができない。したがって、pSLCブロックに格納されている書き込み未完了データは必要なデータである。
データの書き込みに利用可能なフリーpSLCブロックの数が減少すると、必要なデータと不要なデータとが混在されたpSLCブロックから他のpSLCブロックに有効データ(書き込み未完了データ)のみをコピーするガベージコレクション動作を実行することが必要となる。
しかし、ガベージコレクション動作を実行することは、ライトコマンド等のホスト2からの指示に依らないNAND型フラッシュメモリ5への書き込み動作を発生させることによるライトアンプリフィケーションの悪化、およびNAND型フラッシュメモリ5の使用によるホスト2から発行されたコマンドに対するレイテンシの増大を引き起こす可能性がある。
そこで、本実施形態では、コントローラ4は、書き込み先ブロックとしてオープンされた複数のQLCブロックに対して、複数のpSLCブロックをそれぞれ割り当てる。そして、コントローラ4は、pSLCブロックの各々に、対応するQLCブロックに書き込まれるべきデータのみを書き込む。そして、そのpSLCブロックは、そのpSLCブロックに書き込まれたデータに関するファイン書き込み動作が実行されるまで、この書き込まれたデータを書き込み未完了データとして保持する。pSLCブロックに書き込まれたデータは、対応するQLCブロックへの書き込みが進行するにつれて、書き込み未完了データから書き込み完了データに徐々に遷移する。pSLCブロック全体がデータで満たされ、そしてそのデータの全てが書き込み完了データになると、pSLCブロックは有効データを含まないフリーブロックとなる。
このように、書き込み先ブロックとしてオープンされた各QLCブロックにpSLCブロックを割り当てることによって、コントローラ4は、ライトアンプリフィケーションの増加を招くことなく、複数のQLCブロックに効率的にデータを書き込むことができる。
次に、メモリシステムにおいて実行される、ホストから受信された複数のライトコマンドの管理について説明する。図10は、実施形態に係るメモリシステムにおいて実行される、ホストから受信された複数のライトコマンドを管理する動作を示す図である。フラッシュマネージメント部121は、コマンドキューに格納されたライトコマンドを取得することで、NAND型フラッシュメモリ5へのデータの書き込みを制御する。ここでは、メモリシステム3が8つのゾーン(ゾーン#0、ゾーン#1、ゾーン#2、ゾーン#3、ゾーン#4、ゾーン#5、ゾーン#6、ゾーン#7)を管理している場合について説明する。
ホストインタフェース11は、ホスト2からライトコマンドを受信すると、ライトコマンドが指定するゾーン識別子に応じて、ライトコマンドを格納するべきコマンドキューを決定する。そして、ホストインタフェース11は、決定されたコマンドキューにライトコマンドを格納する。例えば、ホストインタフェース11は、ゾーン#0を指定するライトコマンドW1、W2、W3、W4、W5を、コマンドキュー#0に格納し、ゾーン#1を指定するライトコマンドW11、W12、W13を、コマンドキュー#1に格納し、ゾーン#2を指定するライトコマンドW21、W22を、コマンドキュー#2に格納し、ゾーン#7を指定するライトコマンドW71、W72を、コマンドキュー#7に格納する。
フラッシュマネージメント部121は、コマンドキューに新たなライトコマンドが格納されたことに応じて、そのコマンドキューに対応するゾーンを指定するライトコマンドが発行されたことを記録することで、発行されたライトコマンドの順序を記録してもよい。また、フラッシュマネージメント部121は、ライトコマンドの順序を記録するのではなく、新たなライトコマンドが発行されたゾーンを記録してもよい。いずれの場合であっても、フラッシュマネージメント部121は、最新のライトコマンドが発行されたゾーンの順序を管理することができる。例えば、ゾーン#0を指定するライトコマンド、ゾーン#1を指定するライトコマンド、ゾーン#7を指定するライトコマンドをこの順序でホスト2から受信した場合、フラッシュマネージメント部121は、「ゾーン#0→ゾーン#1→ゾーン#7」を示す順序を、最新のライトコマンドが発行されたゾーンの順序として管理する。
フラッシュマネージメント部121は、コマンドキューからライトコマンドを取得することで、各ゾーンに書き込まれるべきライトデータのデータサイズを取得する。フラッシュマネージメント部121は、例えば、コマンドキュー#0に格納されているライトコマンドW1、W2、W3、W4、W5の情報を取得することで、ゾーン#0に書き込まれるべきライトデータのデータサイズを取得する。つまり、ホスト2のHWB1021に格納されているゾーン#0に書き込まれるべきライトデータのデータサイズを取得することができる。フラッシュマネージメント部121は、各ゾーンに書き込まれるべきライトデータのサイズを、データサイズ管理テーブルを使用することで管理してもよい。
フラッシュマネージメント部121は、各ゾーンに書き込まれるべきライトデータのデータサイズのそれぞれ、およびそれらの合計を使用して、いずれのゾーンを指定するライトコマンドを処理するか否かを決定する。
次に、pSLCブロックを経由せずにQLCブロックにライトデータを直接書き込むべきゾーンを決定する動作について説明する。図11は、実施形態に係るメモリシステムにおいて実行される、QLCブロックに対する書き込み動作と、完了応答をホストに送信してホストライトバッファ内の領域を解放する動作とを示す図である。
ここでは、メモリシステム3が8つのゾーン(ゾーン#0、ゾーン#1、ゾーン#2、ゾーン#3、ゾーン#4、ゾーン#5、ゾーン#6、ゾーン#7)を管理している場合について説明する。
例えば、HWB1021の容量が1MB(1024KB)である場合について想定する。
フラッシュマネージメント部121は、受信した複数のライトコマンドに対応するライトデータの総データサイズをゾーン毎に管理する。また、フラッシュマネージメント部121は、HWB1021に格納されているライトデータの総データサイズも管理する。
ここで、HWB1021が、ゾーン#0に書き込まれるべきライトデータを8KB、ゾーン#1に書き込まれるべきライトデータを16KB、ゾーン#2に書き込まれるべきライトデータを512KB、ゾーン#3に書き込まれるべきライトデータを16KB、ゾーン#4に書き込まれるべきライトデータを16KB、ゾーン#5に書き込まれるべきライトデータを8KB、ゾーン#6に書き込まれるべきライトデータを32KB、保持している場合を想定する。
このとき、HWB1021に格納されているライトデータの総データサイズは、608KBである。608KBのライトデータを保持しているHWB1021の空き容量は、416KBである。
このとき、ホスト2は、ゾーン#2に128KBのライトデータを書き込むことを指定するライトコマンドを発行するために、HWB1021に128KBのライトデータを格納する。
これにより、HWB1021に格納されているゾーン#2に書き込まれるべきライトデータの総データサイズが640KBに到達する。ゾーン#2に128KBのライトデータを書き込むことを指定するライトコマンドを受信すると、フラッシュマネージメント部121は、ゾーン#2を指定する受信済みの1以上のライトコマンドに対応するライトデータの総データサイズを算出する。これにより、フラッシュマネージメント部121は、HWB1021に格納されているゾーン#2に書き込まれるべきライトデータの総データサイズが640KBに到達したことを認識する。このとき、フラッシュマネージメント部121は、ゾーン#2に割り当てられたQLCブロック#2に対する書き込み動作を実行する。
640KBのライトデータを書き込む場合、フラッシュマネージメント部121は、QLCブロック#2の複数のワード線のうちの5つのワード線の各々に接続された複数のメモリセルに128KBのライトデータを書き込むフォギー書き込み動作と、5つのワード線のうちの先頭のワード線に接続された複数のメモリセルに128KBのライトデータを再び書き込むファイン書き込み動作とを実行することができる。これにより、640KBのライトデータの内の一部のライトデータ(128KB)が読み出し可能なデータになる。その後、フラッシュマネージメント部121は、読み出し可能になった128KBのデータに対応する1以上のライトコマンドに対する1以上の完了応答をホスト2に送信する。
そして、1以上の完了応答を受信したホスト2は、受信した1以上の完了応答に関連付けられたライトデータが格納されているHWB1021の記憶領域を解放する。これにより、HWB1021に格納されているゾーン#2に書き込まれるべきライトデータのデータサイズは、512KBになる。
次に、pSLCブロックにライトデータを書き込むべきゾーンを決定する動作の例について説明する。図12は、実施形態に係るメモリシステムにおいて実行される、ホストライトバッファに格納されているライトデータの総サイズが最も小さいQLCブロックを選択する動作と、選択したQLCブロックに対応するデータをpSLCブロックに書き込む動作と、完了応答をホストに送信してホストライトバッファ内の領域を解放する動作とを示す図である。
図11と同様に、メモリシステム3が8つのゾーン(ゾーン#0、ゾーン#1、ゾーン#2、ゾーン#3、ゾーン#4、ゾーン#5、ゾーン#6、ゾーン#7)を管理しており、HWB1021の容量が、1MB(1024KB)である場合について想定する。
フラッシュマネージメント部121は、受信した複数のライトコマンドに対応するライトデータの総データサイズをゾーン毎に管理する。また、フラッシュマネージメント部121は、HWB1021に格納されているライトデータの総データサイズも管理する。
ここで、HWB1021が、ゾーン#0に書き込まれるべきライトデータを24KB、ゾーン#1に書き込まれるべきライトデータを16KB、ゾーン#2に書き込まれるべきライトデータを96KB、ゾーン#3に書き込まれるべきライトデータを32KB、ゾーン#4に書き込まれるべきライトデータを32KB、ゾーン#5に書き込まれるべきライトデータを24KB、ゾーン#6に書き込まれるべきライトデータを48KB、ゾーン#7に書き込まれるべきライトデータを512KB、保持している場合を想定する。
このとき、HWB1021に格納されているライトデータの総データサイズは、784KBである。784KBのライトデータを保持しているHWB1021の空き容量は、240KBである。
このとき、ホスト2は、ゾーン#2に128KBのライトデータを書き込むことを指定するライトコマンドを発行するために、HWB1021に128KBのライトデータを格納する。
これにより、HWB1021に格納されているゾーン#2に書き込まれるべきライトデータの総データサイズが224KBになる。このとき、いずれのゾーンに書き込まれるべきライトデータの総データサイズも640KBに達していないが、HWB1021の残り容量が128KBを下回っているため、フラッシュマネージメント部121は、いずれか一つのゾーン(例えば、ゾーン#1)を、そのライトデータをpSLCブロックに書き込むべき書き込み対象のゾーンとして選択する。
ここで、フラッシュマネージメント部121は、書き込まれるべきライトデータのデータサイズが最も小さいゾーン#1を書き込み対象のゾーンとして選択する。
そして、フラッシュマネージメント部121は、選択されたゾーン#1にpSLCブロックを割り当て、割り当てられたpSLCブロックに16KBのライトデータを書き込む。あるいは、選択されたゾーン#1にpSLCブロックが既に割り当てられている場合、フラッシュマネージメント部121は、ゾーン#1に既に割り当てられているpSLCブロックに16KBのライトデータを書き込む。
これにより、書き込まれた16KBのライトデータがNAND型フラッシュメモリ5から読み出し可能になるので、フラッシュマネージメント部121は、書き込まれた16KBのライトデータに対応する1以上のライトコマンドに対する1以上の完了応答をホスト2に送信する。
1以上の完了応答を受信したことに応じて、ホスト2は、受信した1以上の完了応答に関連するライトデータが格納されているHWB1021の記憶領域を解放する。これにより、HWB1021に格納されているゾーン#1に書き込まれるべきライトデータのデータサイズは、0KBになる。そして、HWB1021の残り容量は、128KB以上の値になる。
このように、書き込まれるべきライトデータのデータサイズが最も小さいゾーンを書き込み対象ゾーンとして選択することによって、フラッシュマネージメント部121は、図11で説明したQLCブロックに直接書き込む動作を実行される可能性が高いゾーンを避けて、pSLCブロックを割り当てるゾーンを選択することができる。これにより、フラッシュマネージメント部121は、pSLCブロックを経由せずに、QLCブロックにライトデータを書き込む動作が実行される可能性を上げることができ、pSLCブロックとして使用されるブロックを減らすことで、NAND型フラッシュメモリ5のブロックをより効率的に使用することができる。
次に、pSLCブロックにライトデータを書き込むべきゾーンを決定する動作の他の例について説明する。図13は、実施形態に係るメモリシステムにおいて実行される、最新のライトコマンドが受信された時点が最も古いQLCブロックを選択する動作と、選択したQLCブロックに対応するデータをpSLCブロックに書き込む動作と、完了応答をホストに送信してホストライトバッファ内の領域を解放する動作とを示す図である。
図11と同様に、メモリシステム3が8つのゾーン(ゾーン#0、ゾーン#1、ゾーン#2、ゾーン#3、ゾーン#4、ゾーン#5、ゾーン#6、ゾーン#7)を管理しており、HWB1021の容量が、1MB(1024KB)である場合について想定する。
フラッシュマネージメント部121は、受信した複数のライトコマンドに対応するライトデータの総データサイズをゾーン毎に管理する。また、フラッシュマネージメント部121は、HWB1021に格納されているライトデータの総データサイズも管理する。
ここで、HWB1021が、ゾーン#0に書き込まれるべきライトデータを24KB、ゾーン#1に書き込まれるべきライトデータを16KB、ゾーン#2に書き込まれるべきライトデータを96KB、ゾーン#3に書き込まれるべきライトデータを32KB、ゾーン#4に書き込まれるべきライトデータを32KB、ゾーン#5に書き込まれるべきライトデータを24KB、ゾーン#6に書き込まれるべきライトデータを48KB、ゾーン#7に書き込まれるべきライトデータを512KB、保持している場合を想定する。
このとき、HWB1021に格納されているライトデータの総データサイズは、784KBである。784KBのライトデータを保持しているHWB1021の空き容量は、240KBである。
このとき、ホスト2は、ゾーン#2に128KBのライトデータを書き込むことを指定するライトコマンドを発行するために、HWB1021に128KBのライトデータを格納する。
これにより、HWB1021に格納されているゾーン#2に書き込まれるべきライトデータの総データサイズが224KBになる。このとき、いずれのゾーンに書き込まれるべきライトデータの総データサイズも640KBに達していないが、HWB1021の残り容量が128KBを下回っているため、フラッシュマネージメント部121は、いずれか一つのゾーンを、そのライトデータをpSLCブロックに書き込むべき書き込み対象のゾーンとして選択する。
ここで、フラッシュマネージメント部121は、最新のライトコマンドが受信された時点が最も古いゾーンであるゾーン#5を書き込み対象のゾーンとして選択する。
そして、フラッシュマネージメント部121は、選択されたゾーン#5にpSLCブロックを割り当て、割り当てられたpSLCブロックに24KBのライトデータを書き込む。あるいは、選択されたゾーン#5にpSLCブロックが既に割り当てられている場合、フラッシュマネージメント部121は、ゾーン#5に既に割り当てられているpSLCブロックに24KBのライトデータを書き込む。
これにより、書き込まれた24KBのライトデータがNAND型フラッシュメモリ5から読み出し可能になるので、フラッシュマネージメント部121は、書き込まれた24KBのライトデータに対応する1以上のライトコマンドに対する1以上の完了応答をホスト2に送信する。
1以上の完了応答を受信したことに応じて、ホスト2は、受信した1以上の完了応答に関連するライトデータが格納されているHWB1021の記憶領域を解放する。これにより、HWB1021に格納されているゾーン#5に書き込まれるべきライトデータのデータサイズは、0KBになる。そして、HWB1021の残り容量は、128KB以上の値になる。
このように、最新のライトコマンドが受信された時点が最も古いゾーンであるゾーンを書き込み対象ゾーンとして選択することによって、フラッシュマネージメント部121は、ライトコマンドが受信される頻度の低いゾーンを書き込み対象ゾーンとして選択することができる。そのため、図12で説明した選択方法と同様に、フラッシュマネージメント部121は、図11で説明したQLCブロックに直接書き込む動作を実行される可能性が高いゾーンを避けて、pSLCブロックを割り当てるゾーンを選択することができる。これにより、フラッシュマネージメント部121は、pSLCブロックを経由せずに、QLCブロックにライトデータを書き込む動作が実行される可能性を上げることができ、pSLCブロックとして使用されるブロックを減らすことで、NAND型フラッシュメモリ5のブロックをより効率的に使用することができる。
次に、pSLCブロックにライトデータを書き込むべきゾーンを決定する動作のさらに他の例について説明する。図14は、実施形態に係るメモリシステムにおいて実行される、乱数を使用して、QLCブロックを選択する動作と、選択したQLCブロックに対応するデータをpSLCブロックに書き込む動作と、完了応答をホストに送信してホストライトバッファ内の領域を解放する動作とを示す図である。
図11と同様に、メモリシステム3が8つのゾーン(ゾーン#0、ゾーン#1、ゾーン#2、ゾーン#3、ゾーン#4、ゾーン#5、ゾーン#6、ゾーン#7)を管理しており、HWB1021の容量が、1MB(1024KB)である場合について想定する。
フラッシュマネージメント部121は、受信した複数のライトコマンドに対応するライトデータの総データサイズをゾーン毎に管理する。また、フラッシュマネージメント部121は、HWB1021に格納されているライトデータの総データサイズも管理する。
ここで、HWB1021が、ゾーン#0に書き込まれるべきライトデータを24KB、ゾーン#1に書き込まれるべきライトデータを16KB、ゾーン#2に書き込まれるべきライトデータを96KB、ゾーン#3に書き込まれるべきライトデータを32KB、ゾーン#4に書き込まれるべきライトデータを32KB、ゾーン#5に書き込まれるべきライトデータを24KB、ゾーン#6に書き込まれるべきライトデータを48KB、ゾーン#7に書き込まれるべきライトデータを512KB、保持している場合を想定する。
このとき、HWB1021に格納されているライトデータの総データサイズは、784KBである。784KBのライトデータを保持しているHWB1021の空き容量は、240KBである。
このとき、ホスト2は、ゾーン#2に128KBのライトデータを書きこむことを指定するライトコマンドを発行するために、HWB1021に128KBのライトデータを格納する。
これにより、HWB1021に格納されているゾーン#2に書き込まれるべきライトデータの総データサイズが224KBになる。このとき、いずれのゾーンに書き込まれるべきライトデータの総データサイズも640KBに達していないが、HWB1021の残り容量が128KBを下回っているため、フラッシュマネージメント部121は、いずれか一つのゾーンを、そのライトデータをpSLCブロックに書き込むべき書き込み対象のゾーンとして選択する。
ここで、フラッシュマネージメント部121は、乱数を生成し、生成した乱数を使用して、ゾーン#4を書き込み対象のゾーンとして選択する。つまり、フラッシュマネージメント部121は、乱数を使用して、ランダムにゾーンを選択する。
そして、フラッシュマネージメント部121は、選択されたゾーン#4にpSLCブロックを割り当て、割り当てられたpSLCブロックに32KBのライトデータを書き込む。あるいは、選択されたゾーン#4にpSLCブロックが既に割り当てられている場合、フラッシュマネージメント部121は、ゾーン#4に既に割り当てられているpSLCブロックに32KBのライトデータを書き込む。
これにより、書き込まれた32KBのライトデータがNAND型フラッシュメモリ5から読み出し可能になるので、フラッシュマネージメント部121は、書き込まれた32KBのライトデータに対応する1以上のライトコマンドに対する1以上の完了応答をホスト2に送信する。
1以上の完了応答を受信したことに応じて、ホスト2は、受信した1以上の完了応答に関連するライトデータが格納されているHWB1021の記憶領域を解放する。これにより、HWB1021に格納されているゾーン#4に書き込まれるべきライトデータのデータサイズは、0KBになる。そして、HWB1021の残り容量は、128KB以上の値になる。
このように、乱数を生成し、生成した乱数を使用して、書き込み対象ゾーンを選択することによって、フラッシュマネージメント部121は、一回の選択動作では、すべてのゾーンを等しい確率で書き込み対象ゾーンとして選択し得る。しかし、ライトコマンドが受信される頻度の低いゾーンほど、HWB1021に格納されているライトデータのデータサイズが640KBに到達するまでの期間が長くなるため、選択動作にさらされる頻度が高くなる。そのため、ゾーンが選択される傾向は、図13で説明した選択方法とほぼ等しくなる。そのため、フラッシュマネージメント部121は、図11で説明したQLCブロックに直接書き込む動作を実行される可能性が高いゾーンを避けて、pSLCブロックを割り当てるゾーンを選択することができる。これにより、フラッシュマネージメント部121は、pSLCブロックを経由せずに、QLCブロックにライトデータを書き込む動作が実行される可能性を上げることができ、pSLCブロックとして使用されるブロックを減らすことで、NAND型フラッシュメモリ5のブロックをより効率的に使用することができる。さらに、この選択方法では、ライトデータの総データサイズや、最新のライトコマンドを受信した時点などの情報を参照することを必要としない。
次に、QLCブロックへの書き込み動作において、ホスト2とSSD3との間で実行されるやりとりの具体例について説明する。図15は、実施形態に係るメモリシステムにおいて実行される、QLCブロックに対する書き込み処理の手順を示す図である。
ここでは、QLCブロック#1に対する書き込み動作について説明する。
まず、ホスト2は、QLCブロック#1を指定する1以上のライトコマンドをSSD3に送信する(ステップS101)。
QLCブロック#1を指定する新たなライトコマンドを受信する度、SSD3のコントローラ4は、QLCブロック#1に書き込むべきライトデータの総データサイズ(総サイズ)を算出する。QLCブロック#1を指定する新たなライトコマンドを受信によって、QLCブロック#1に書き込むべきライトデータの総サイズが640KBに達した場合、コントローラ4は、HWB1021から640KBのライトデータを取得する(ステップS102)。ライトデータを受信したSSD3のコントローラ4は、QLCブロック#1に640KBのライトデータを書き込む。これにより、書き込まれたライトデータのうち、先頭の128KBのライトデータは、ファイン書き込みが完了されるため、読み出し可能データになる。なお、コントローラ4は、640KBのライトデータをまとめてHWB1021から取得する必要は無く、QLCブロック#1の先頭から5つのワード線に対するフォギー書き込み動作の進行に合わせて、第1の最小書き込み単位(128KB)毎にライトデータをホストライトバッファ2021から取得すればよい。この場合、QLCブロック#1の5番目のワード線に対するフォギー書き込み動作が終了すると、コントローラ4は、QLCブロック#1の先頭のワード線に書き込むべき128KBのライトデータをHWB1021から再び取得する。そして、コントローラ4は、QLCブロック#1の先頭のワード線に対するファイン書き込み動作を実行する。これにより、QLCブロック#1の先頭のワード線に対する書き込みが完了するので、QLCブロック#1の先頭のワード線に書き込まれた128KBのライトデータは読み出し可能データになる。
SSD3のコントローラ4は、読み出し可能データになったライトデータに対応する1以上のライトコマンドの処理が完了したことを示す1以上の完了応答をホスト2に送信する(ステップS103)。完了応答を受信したことに応じて、ホスト2は、受信した1以上の完了応答に対応するライトデータが格納されているHWB1021の領域を解放する。これにより、HWB1021に格納されているQLCブロック#1に書き込まれるべきライトデータのデータサイズは、512KBになる。
その後、ホスト2は、QLCブロック#1に書き込まれるべき追加のライトデータ(128KB)をHWB1021に格納する。ホスト2は、追加されたライトデータをQLCブロック#1に書き込むことを指定する新たなライトコマンドをSSD3に送信する(ステップS104)。
QLCブロック#1に書き込むべきライトデータの総サイズは、再び640KBに達する。SSD3のコントローラ4は、受信した新たなライトコマンドに関連付けられた追加の128KBのライトデータをHWB1021から取得する(ステップS105)。コントローラ4は、QLCブロック#1の6番目のワード線に対するフォギー書き込み動作を実行する。6番目のワード線に対するフォギー書き込み動作が終了すると、コントローラ4は、QLCブロック#1の2番目のワード線に書き込むべき128KBのライトデータをHWB1021から再び取得する。そして、コントローラ4は、QLCブロック#1の2番目のワード線に対するファイン書き込み動作を実行する。これにより、QLCブロック#1の2番目のワード線に対する書き込みが完了するので、QLCブロック#1の2番目のワード線に書き込まれた128KBのライトデータは読み出し可能データになる。
SSD3のコントローラ4は、読み出し可能データになったライトデータに対応するライトコマンドの処理が完了したことを示す完了応答をホスト2に送信する(ステップS106)。完了応答を受信したことに応じて、ホスト2は、受信した完了応答に対応するライトデータが格納されているHWB1021の領域を解放する。これにより、HWB1021に格納されているQLCブロック#1に書き込まれるべきライトデータのデータサイズは、512KBになる。
次に、SSD3において実行される書き込み制御処理の手順について説明する。図16は、実施形態に係るメモリシステムにおいて実行される書き込み制御処理の手順を示すフローチャートである。
コントローラ4は、ホスト2からライトコマンドを受信したことに応じて、書き込み制御処理を開始する。
まず、コントローラ4は、ホストライトバッファ(HWB)1021に格納されているライトデータのうち、いずれかのゾーンに書き込まれるべきライトデータのデータサイズが第1の書き込みサイズに達したか否かを判定する(ステップS201)。
ホストライトバッファ(HWB)1021に格納されているライトデータのうち、いずれかのゾーンに書き込まれるべきライトデータのデータサイズが第1の書き込みサイズに達した場合(ステップS201のYes)、コントローラ4は、QLCブロックに対する書き込み動作を実行する(ステップS202)。コントローラ4は、ステップS201で第1の書き込みサイズに達したデータサイズのライトデータが書き込まれるべきゾーンに割り当てられたQLCブロックに対してライトデータを書き込む。
コントローラ4は、ステップS202の処理で読み出し可能データになったライトデータに対応する1以上のライトコマンドに対する1以上の完了応答をホスト2に送信して、読み出し可能データになったライトデータが格納されているHWB1021の領域をホスト2に解放させる(ステップS203)。そして、コントローラ4は、書き込み制御処理を終了する。
また、ホストライトバッファ(HWB)1021に格納されているライトデータのうち、どのゾーンに書き込まれるべきライトデータのデータサイズも第1の書き込みサイズに達していない場合(ステップS201のNo)、コントローラ4は、HWB1021の残り容量が閾値を下回ったか否かを判定する(ステップS204)。例えば、コントローラ4は、閾値として、128KBを使用する。
HWB1021の残り容量が閾値を下回っていない場合(ステップS204でNo)、コントローラ4は、書き込み制御処理を終了する。
HWB1021の残り容量が閾値を下回っている場合(ステップS204でYes)、コントローラ4は、pSLCライトの対象にすべきゾーンを選択する(ステップS205)。コントローラ4は、書き込まれるべきライトデータのデータサイズが最も小さいゾーンを、対象のゾーンとして選択する。あるいは、コントローラ4は、最新のライトコマンドが受信された時点が最も古いゾーンを、対象ゾーンとして選択する。コントローラ4は、乱数を使用して対象ゾーンを選択してもよい。
そして、コントローラ4は、ステップS205で選択されたゾーンに割り当てられたpSLCブロックにライトデータを書き込む(ステップS206)。
コントローラ4は、ステップS206でpSLCブロックに書き込んだライトデータに対応する1以上のライトコマンドに対する1以上の完了応答をホスト2に送信して、pSLCブロックに書き込んだライトデータが格納されたHWB1021の領域をホスト2に解放させる(ステップS207)。
次に、メモリシステム3とホスト2との間で実行される、HWB1021のサイズを管理するための処理について説明する。図17は、実施形態に係るメモリシステムにおいて実行される、ホストからの通知に基づいてホストライトバッファのサイズを管理する処理の手順を示すシーケンス図である。
まず、ホスト2は、IdentifyコマンドをSSD3に送信する(ステップS301)。Identifyコマンドは、SSD3の初期化処理のために必要な情報を要求するコマンドである。
SSD3は、ステップS301で受信したIdentifyコマンドに対する応答として、SSD3によってサポートされている最大ゾーン数をホスト2に送信する(ステップS302)。
そして、ホスト2は、HWB1021として利用可能な記憶領域のサイズをSSD3に通知する(ステップS303)。
ステップS303の通知を受けたSSD3は、受信したHWB1021のサイズを記録する(ステップS304)。これによって、SSD3は、記録したHWB1021のサイズと、受信したライトコマンドに含まれるデータサイズを示す情報から、HWB1021の残り領域のサイズを算出することができる。
ホスト2は、HWB1021として利用可能な記憶領域のサイズを変更した場合(ステップS305)、ホスト2は、HWB1021の変更されたサイズをSSD3に通知する(ステップS306)。
ステップS307の通知を受けたSSD3は、受信したHWB1021のサイズを記録する(ステップS307)。
次に、QLCブロックに対するpSLCブロックの割り当ての詳細について説明する。図18は、実施形態に係るメモリシステムにおける、複数のQLCブロックの各々に割り当てられるpSLCブロックを示す図である。
図18において、n個のQLCブロック(QLC#1、QLC#2、…、QLC#n)が書き込み先ブロックとしてオープンされている。そして、n個のQLCブロック(QLC#1、QLC#2、…、QLC#n)には、n個のpSLCブロック(pSLC#1、pSLC#2、…、pSLC#n)が割り当てられている。
図18の左部では、QLC#1には、pSLC#1が割り当てられており、QLC#2には、pSLC#2が割り当てられており、QLC#nには、pSLC#nが割り当てられている。
そして、Half Used pSLCブロックプール63には、QLCブロックに新たに割り当てることが可能なpSLCブロックの識別子が格納されている。Half Used pSLCブロックプール63は、書き込み完了データが格納されている書き込み済み領域と、未書き込み領域とを含む、Half Used pSLCブロックそれぞれを管理するために使用される。Half Used pSLCブロックプール63は、フリーpSLCブロックプール62から選択された後にイレーズされたpSLCブロックと、未書き込み領域を含む状態でQLCブロックから割り当てが解除されたpSLCブロックとを含む。ここでは、Half Used pSLCブロックプール63は、pSLCブロックpSLC#i、…、pSLC#jを含む。
新たなQLCブロック(ここでは、QLC#k)が書き込み先ブロックとしてオープンしたことに応じて、pSLCブロック制御部123は、Half Used pSLCブロックプール63から任意のpSLCブロック(ここでは、pSLC#i)を選択する。そして、pSLCブロック制御部123は、選択したpSLC#iをQLC#kに割り当てる。また、新たなQLCブロックがオープンした時にHalf Used pSLCブロックプール63に利用可能なpSLCブロックが存在しない場合、pSLCブロック制御部123は、フリーpSLCブロックプール62から任意のpSLCブロックを選択してもよい。pSLCブロック制御部123は、選択したpSLCブロックに対してイレーズ動作を実行し、そして選択したpSLCブロックを、Half Used pSLCブロックプール63を使用してHalf Used pSLCブロックとして管理する。あるいは、pSLCブロック制御部123は、選択したpSLCブロックに対してイレーズ動作を実行し、そして選択したpSLCブロックを、Half Used pSLCブロックプール63を経由せずに、QLC#kに直接的に割り当ててもよい。
これにより、pSLC#iは、QLC#kの専用のライトバッファとして、QLC#kに割り当てられる。この場合、他のQLCブロックに書き込まれるべきデータはpSLC#iに書き込まれず、QLC#kに書き込まれるべきデータのみがpSLC#iに書き込まれる。
次に、具体的な書き込み動作、およびpSLCブロックの割り当て解除について図19および図20を参照して説明する。図19は、実施形態に係るメモリシステムにおいて実行される、あるQLCブロックに対する書き込み動作について説明する一つ目の図である。図19では、QLC#1と、QLC#1に割り当てられたpSLC#1とに対するデータの書き込みについて説明する。
QLC#1に書き込まれているデータのうち、ファイン書き込み動作が完了したデータは、読み出し可能データである。また、QLC#1に書き込まれているデータのうち、フォギー書き込み動作が完了したが、ファイン書き込み動作が完了されていないデータは、読み出し不可能データである。また、QLC#1の記憶領域のうち、いずれのデータも書き込まれていない記憶領域は、未書き込み領域である。
pSLC#1に書き込まれているデータのうち、QLC#1に対するファイン書き込み動作が完了したデータは、書き込み完了データである。pSLC#1に書き込まれているデータのうち、QLC#1に対するファイン書き込み動作が完了していないデータは、書き込み未完了データである。また、pSLC#1の記憶領域のうち、いずれのデータも書き込まれていない記憶領域は、未書き込み領域である。
QLC#1のあるワード線に対するファイン書き込み動作が実行可能になったとき、フラッシュマネージメント部121は、pSLC#1に格納されている書き込み未完了データを使用して、QLC#1に対するファイン書き込み動作を実行する。この書き込み未完了データは、QLC#1のこのワード線に対するフォギー書き込み動作のために既に使用されたデータである。そして、このワード線に対するファイン書き込み動作が完了すると、このファイン書き込み動作のために使用されたpSLC#1内のデータは、書き込み完了データとなる。
フラッシュマネージメント部121は、pSLC#1に未書き込み領域が無くなるまで、QLC#1に書き込まれるべきデータをpSLCブロック#1に書き込む。そして、QLC#1に対するファイン書き込み動作が完了されたpSLC#1のデータは、書き込み完了データになる。pSLCブロック制御部123は、pSLC#1の未書き込み領域が無くなると、QLC#1に対して新たなpSLCブロック(ここでは、pSLC#2)を割り当てる。ここで、pSLC制御部123は、Half Used pSLCブロックプール63から任意のpSLCブロックを選択し、選択したpSLCブロックをQLC#1に割り当てる。また、Half Used pSLCブロックプール63に書き込みに利用可能なpSLCブロックが存在しない場合、pSLCブロック制御部123は、フリーpSLCブロックプール62から任意のフリーpSLCブロックを選択し、選択したフリーpSLCブロックをQLC#1に割り当てる。ここで、pSLCブロック制御部123が、書き込み完了データを持たないpSLC#2をQLC#2に新たに割り当てる場合について想定する。
pSLC制御部123は、フリーpSLCブロックプール62からpSLC#2を選択し、pSLC#2に対してイレーズ動作を実行した後、Half Used pSLCブロックプール63に移動させ、QLC#1に割り当ててもよいし、pSLC#2に対してイレーズ動作を実行した後、QLC#1に直接的に割り当ててもよい。
次いで、フラッシュマネージメント部121は、QLC#1に書き込まれるべきデータをpSLC#2に書き込み未完了データとして書き込む。また、フラッシュマネージメント部121は、pSLC#2に書き込んだデータを使用してQLC#1に対するフォギー書き込み動作を実行する。そして、フォギー書き込み動作を実行することに応じて、ファイン書き込み動作が実行可能になった時、フラッシュマネージメント部121は、QLC#1に対してファイン書き込み動作を実行する。QLC#1に対するファイン書き込み動作が実行されることにより、pSLC#1内の書き込み未完了データの一部は書き込み完了データになる。pSLC#1に記憶されているデータの全てが書き込み完了データになると、pSLCブロック制御部123は、QLC#1からpSLC#1の割り当てを解除し、pSLC#1をフリーpSLCブロックプール62に返却する。
次に、図20を参照して後続の動作について説明する。フラッシュマネージメント部121は、QLC#1に未書き込み領域が無くなるまで、QLC#1に対してフォギー書き込み動作を実行する。そして、フォギー書き込み動作を実行することに応じて、ファイン書き込み動作が実行可能になった時、フラッシュマネージメント部121は、QLC#1に対してファイン書き込み動作を実行する。
次いで、フラッシュマネージメント部121は、QLC#1に対する残りのファイン書き込み動作を実行する。QLC#1の全てのワード線に対するファイン書き込み動作が完了すると、QLC#1はQLC#1への書き込みが完了したデータで満たされる。これにより、QLC#1内のデータは全て読み出し可能データになる。そして、pSLC#2内の書き込み未完了データが全て書き込み完了データになる。
このとき、pSLC#2は、未書き込み領域を含み、且つ書き込み未完了データを含まない。そのため、pSLC#2の未書き込み領域にQLC#1以外の書き込み先QLCブロックに書き込まれるべき書き込み未完了データが書き込まれても、異なるQLCブロックに書き込まれるべき書き込み未完了データがpSLC#2内に混在することはない。pSLCブロック制御部123は、QLC#1からpSLC#2の割り当てを解除し、pSLC#2をHalf Used pSLCブロックプール63に返却する。
これにより、pSLC#2は、たとえば、新たなQLCブロックがオープンされた際に、そのQLCブロックにライトバッファとして割り当てられるために再使用される。pSLC#2は、そのQLCブロックに割り当てられるために選択されると、イレーズ動作を実行されることなく、そのQLCブロックに割り当てられる。そして、フラッシュマネージメント部121は、そのQLCブロックに書き込まれるべきデータを、pSLC#2の残りの未書き込み領域に書き込む。
次に、pSLCブロックの再使用について説明する。図21は、実施形態に係るメモリシステムにおいて、あるQLCブロックに対する割り当てが解除された後に、他のQLCブロックに対して割り当てられることによって再使用されるpSLCブロックを示す図である。
まず、pSLCブロック制御部123は、QLC#1がオープンした際に、pSLC#aをQLC#1に割り当てる。そして、フラッシュマネージメント部121は、図19および図20で説明した動作と同様に、QLC#1およびpSLC#aに対する書き込み動作を実行する。
pSLC#aに未書き込み領域がなくなると、pSLCブロック制御部123は、QLC#1に新たなpSLCを割り当てる。新たなpSLCに未書き込み領域がなくなると、pSLCブロック制御部123は、QLC#1にさらに新たなpSLCを割り当てる。このようにして、pSLCブロック制御部123は、QLC#1に対する書き込みの進行に応じて、書き込み完了データで満たされたpSLCをフリーpSLCブロックプール62に返却しながら、QLC#1に幾つかのpSLCを順次割り当てる。例えば、QLC#1にpSLC#bが割り当てられると、QLC#1に書き込むべきデータは、pSLC#bに書き込まれる。そして、QLC#1に対する書き込みが進行して、QLC#1内のデータが全て読み出し可能データになると、pSLC#b内のデータも、全て書き込み完了データになる。このとき、pSLC#bに未書き込み領域が存在する場合、pSLCブロック制御部123は、QLC#1からpSLC#bの割り当てを解除する。そして、pSLCブロック制御部123は、pSLC#bをHalf Used pSLCブロックプール63に返却する。
その後、pSLCブロック制御部123は、QLCブロックQLC#2が新たにオープンしたことに応じて、Half Used pSLCブロックプール63内のpSLC#bを選択し、pSLC#bをQLC#2に割り当てる。そして、フラッシュマネージメント部121は、QLC#2に書き込まれるべきデータをpSLC#bの未書き込み領域に書き込む。
これにより、コントローラ4は、QLC#1に割り当てて使用されていたpSLC#bを、新たにオープンされたQLC#2に割り当てて再使用することができる。また、pSLC#bは、QLC#2に割り当てられ、QLC#2に書き込まれるべきデータが書き込まれても、pSLC#b内に残っているQLC#1に関するデータはいずれも書き込み完了データであるため、異なるQLCブロックに書き込まれるべき書き込み未完了データがpSLC#bに混在することはない。
図22は、実施形態に係るメモリシステムにおける、あるQLCブロックと、このQLCブロックに割り当てられた複数のpSLCブロックとの関係について示す図である。以下では、QLC#1と、QLC#1に割り当てられた複数のpSLCブロックとの関係について説明する。
まず、QLC#1を指定するライトコマンドをホスト2から受信すると。フラッシュマネージメント部121は、受信したライトコマンドに関する情報、例えば、受信したライトコマンドに関連付けられたデータのサイズ、データが格納されているホストライトバッファ1021内の位置を示す情報等をQLCブロック制御部122に通知する。
QLCブロック制御部122は、受信したライトコマンドに関する情報に基づいて、QLC SAテーブル64を更新する。QLC SAテーブル64は、複数のソースアドレスSAを保持するために使用される。複数のソースアドレスSAの各々は、QLC#1に書き込まれるべきデータが格納されている位置を示す。QLCブロック制御部122は、QLC SAテーブル64に、ライトコマンドに関連付けられたデータが格納されているホストライトバッファ1021内の位置を示す情報をソースアドレスSAとして格納する。
QLC#1を指定する1以上の受信されたライトコマンドに関連付けられたデータの総サイズが第2の最小書き込みサイズに達すると、フラッシュマネージメント部121は、QLC SAテーブル64に格納されている全てのソースアドレスSAをpSLC SAテーブル65にコピーすることによって、pSLCブロック制御部123のpSLC SAテーブル65を更新する。pSLC SAテーブル65の各ソースアドレスSAは、QLC#1に割り当てられたpSLCブロックに書き込むべきデータが格納されている位置を示す。
フラッシュマネージメント部121は、pSLC SAテーブル65のソースアドレスSAそれぞれに基づいて、受信した1以上のライトコマンドに関連付けられたデータ、つまりQLC#1に書き込むべき第2の最小書き込みサイズを有するデータをホストライトバッファ1021から取得する。そして、フラッシュマネージメント部121は、取得したデータをpSLCブロック(ここでは、pSLC#a)に書き込む。
pSLC#aにデータが書き込まれると、フラッシュマネージメント部121は、このデータに対応する1以上のライトコマンドの完了を示す1以上の完了応答をホスト2に送信する。
また、第2の最小書き込みサイズを有するデータがpSLC#aに書き込まれると、フラッシュマネージメント部121は、QLC#1に書き込むべきデータのソースアドレスSAそれぞれが、ホストライトバッファ1021内の位置から、このデータが書き込まれたpSLC#a内の位置に変更されるように、QLC SAテーブル64を更新する。
この時、このデータを読み出し対象データとして指定するリードコマンドがホスト2から受信した場合、フラッシュマネージメント部121は、このリード対象データに対応するソースアドレスSAに基づいて、このリード対象データをpSLC#aから読み出し、ホスト2に送信する。このデータがpSLC#aに書き込まれる前においては、このデータに対応するソースアドレスSAは、ホストライトバッファ1021内の位置を示す。したがって、もしも、このデータがpSLC#aに書き込まれる前に、このデータをリード対象データとして指定するリードコマンドをホスト2から受信した場合には、フラッシュマネージメント部121は、このリード対象データに対応するソースアドレスSAに基づいて、このリード対象データをホストライトバッファ1021から読み出し、ホスト2に送信する。
pSLC#aに書き込まれたデータの総サイズが第1の最小書き込みサイズに達すると、フラッシュマネージメント部121は、QLC SAテーブル64の各ソースアドレスSAに基づいて、QLC#1に書き込むべき第1の最小書き込みサイズを有するデータをpSLC#aから読み出す。そして、フラッシュマネージメント部121は、読み出したデータを、フォギー書き込み動作によって、QLC#1に書き込む。
QLC#1への書き込みが進行して、QLC#1内のあるワード線に対するファイン書き込み動作の実行が可能になると、フラッシュマネージメント部121は、このワード線に書き込むべきデータをpSLC#aから再び読み出す。そして、フラッシュマネージメント部121は、読み出したデータを、ファイン書き込み動作によって、QLC#1に書き込む。
このような動作が繰り返されることにより、やがてpSLC#aに未書き込み領域がなくなる。この場合、pSLCブロック制御部123は、Half Used pSLCブロックプール63から任意のpSLCブロック(ここでは、pSLC#b)を選択し、選択したpSLC#bをQLC#1に割り当てる。
pSLC#aに書き込まれた全てのデータが書き込み完了データになると、pSLCブロック制御部123は、pSLC#aをフリーpSLCブロックプール62に返却する。
pSLC#bがQLC#1に割り当てられている状態で、QLC#1全体が、QLC#1への書き込みが完了したデータ、つまり読み出し可能データ、で満たされると、pSLCブロック制御部123は、Half Used pSLCブロックプール63にpSLC#bを返却する。
以上の動作によって、ホスト2は、完了応答を受信したタイミングで、その完了応答に関するライトコマンドに関連付けられたデータが格納されているホストライトバッファ1021内の記憶領域を解放することができる。コントローラ4は、QLCブロックの最小書き込みサイズよりも小さいpSLCブロックの最小書き込みサイズのデータ毎に完了応答をホスト2に送信するため、QLCブロックの最小書き込みサイズ分のデータの書き込みが完了した後に完了応答をホスト2に送信する場合に比し、必要とされるホストライトバッファ1021のサイズを小さくすることができる。
ここで、NAND型フラッシュメモリ5とコントローラ4との間で実行されるデータ転送の回数について考える。
図22を参照して説明した書き込み動作を実行すると、(1)pSLCブロックにデータを書き込むために実行されるコントローラ4からNAND型フラッシュメモリ5へのデータ転送と、(2)フォギー書き込みのためにpSLCブロックからデータを読み出すために実行されるNAND型フラッシュメモリ5からコントローラ4へのデータ転送と、(3)フォギー書き込みのためにQLCブロックにデータを書き込むために実行されるコントローラ4からNAND型フラッシュメモリ5へのデータ転送と、(4)ファイン書き込みのためにpSLCブロックからデータを読み出すために実行されるNAND型フラッシュメモリ5からコントローラ4へのデータ転送と、(5)ファイン書き込みのためにデータを書き込むために実行されるコントローラ4からNAND型フラッシュメモリ5へのデータ転送との5回のデータ転送が必要とされる。
pSLCブロックに書き込まれているデータをQLCブロックへの書き込み動作に使用する際に、コントローラ4は、pSLCブロックに書き込まれているデータのエラー訂正を行うために、pSLCブロックからデータを読み出す必要がある。そのため、フォギー書き込み、およびファイン書き込みの際に、コントローラ4とNAND型フラッシュメモリ5との間のデータ転送は2度ずつ行われることになる。
そのため、コントローラ4からNAND型フラッシュメモリ5にライトデータが一度しか転送されない場合と比べて、5倍の帯域幅が使用されることになる。
本実施形態におけるSSD3では、消費される帯域幅を削減するために、SRAM16内のテンポラリライトバッファ(Temporary Write Buffer,TWB)161と、DRAM6内のラージライトバッファ(LWB)66とを使用する。
図23は、実施形態に係るメモリシステムにおいて、TWBを使用したフォギー書き込み動作について示す図である。TWBを使用したフォギー書き込み動作は、フォギー書き込み動作が実行される前に、対応するライトデータをpSLCブロックに書き込むことが決定された書き込み先QLCブロックに対してのみ実行される。
(1)フラッシュマネージメント部121は、あるQLCブロックを指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズを算出する。フラッシュマネージメント部121は、このQLCブロックを指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズが第1の最小書き込みサイズになるまで待つ。このQLCブロックを指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズが第1の最小書き込みサイズに達すると、フラッシュマネージメント部121は、これら1以上のライトコマンドに関連付けられた、第1の最小書き込みサイズを有するライトデータを、ホストインタフェース11を介して、ホストライトバッファ1021からTWB161に転送する。
TWB161は、QLCブロックに書き込まれるべきデータを、QLCブロックに対するフォギー書き込み動作が完了されるまで保持する。TWB161の記憶領域のサイズは、例えば、QLCブロックの最小書き込みサイズ(第1の最小書き込みサイズ)と同じである(例えば、128KB)。
(2)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをpSLCブロックに転送することによって、pSLCブロックに対する書き込み動作を実行する。
(3)コントローラ4は、pSLCに対する書き込み動作が完了したことに応じて、ホストインタフェース11を介して、1以上のライトコマンドそれぞれに対する1以上の完了応答をホスト2に送信する。pSLCブロックに書き込まれたデータは、既に読み出し可能なデータである。そのため、コントローラ4は、完了応答を送信することができる。
(4)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをQLCブロックに転送することによって、QLCブロックに対するフォギー書き込みを実行する。その後、コントローラ4は、フォギー書き込み動作が完了したことに応じて、TWB161の記憶領域を解放する。
以上のように、TWB161を使用することによって、コントローラ4は、pSLCブロックに格納されているデータを読み出すことなく、対応するライトデータをpSLCブロックに書き込むことが決定されたQLCブロックに対するフォギー書き込み動作を実行することができる。これにより、コントローラ4とNAND型フラッシュメモリ5との間で実行することが必要なデータ転送の回数を少なくすることができる。
コントローラ4と、コントローラ4とNAND型フラッシュメモリ5との間で実行することが必要なデータ転送の回数をさらに削減するために、SSD3は、ラージライトバッファ(LWB)66を使用することができる。LWB66は、各々のエントリがTWB161と同じサイズの記憶領域を持つファーストインファーストアウト(FIFO)型の揮発性メモリである。ここでは、LWB66は、5つのエントリを持つ。LWB66のエントリの数は、QLCブロックがファイン書き込み動作を実行可能になるサイズのデータを格納できるように決定される。例えば、SSD3が2つのワード線を往復するフォギー・ファイン書き込み動作を実行する場合、LWB66は、2つのエントリを有していてもよい。また、SSD3が5つのワード線を往復するフォギー・ファイン書き込み動作を実行する場合、LWB66は、5つのエントリを有していてもよい。
次に、LWB66をQLCブロックに割り当てる動作について説明する。図24は、実施形態に係るメモリシステムにおける、複数のQLCブロックの各々に割り当てられるpSLCブロックと、LWBとを示す図である。
図24において、QLCブロックQLC#1、QLC#2、…、QLC#nがオープンされ、それぞれ、ゾーンに割り当てられている。そして、各QLCブロックには、pSLCブロックがそれぞれ割り当てられている。
図24の左部では、QLC#1には、pSLC#1が割り当てられており、QLC#2には、pSLC#2が割り当てられており、QLC#nには、pSLC#nが割り当てられている。
そして、Half Used pSLCブロックプール63には、QLCブロックに新たに割り当てることが可能なpSLCブロックが存在している。Half Used pSLCブロックプール63は、フリーpSLCブロックプール62から選択された後にイレーズされたpSLCブロック、および未書き込み領域を含む状態で、QLCブロックから割り当てが解除されたpSLCブロックを含む。ここでは、Half Used pSLCブロックプール63は、pSLCブロックpSLC#i、…、pSLC#jを含む。
さらに、LWB66は、ラージライトバッファLWB#1と、ラージライトバッファLWB#2とを含む。そして、LWB#1は、QLC#1に割り当てられており、LWB#2は、QLC#2に割り当てられる。
ここで、新たにQLCブロックQLC#kがオープンしたことに応じて、pSLCブロック制御部123は、Half Used pSLCブロックプール63から任意のpSLCブロック(pSLC#i)を選択する。そして、pSLCブロック制御部123は、選択したpSLC#iをQLC#kに割り当てる。
そして、コントローラ4は、LWB#1と、LWB#2とのうち、任意のLWBを選択する。例えば、コントローラ4は、最新のデータが書き込まれたタイミングが古いLWBを選択してもよい(ここでは、LWB#2)。そして、コントローラ4は、QLC#2からLWB#2の割り当てを解除し、新たにオープンされたQLC#kにLWB#2を割り当てる。これにより、コントローラ4は、新たにオープンされたQLCブロックに優先してLWB66を割り当てることができる。
図25は、実施形態に係るメモリシステムにおいて実行される二種類の書き込み動作の切り替えについて示す図である。図25の上部は、LWB66が割り当てられているQLCブロックに対するフォギー・ファイン書き込みを示しており、図25の下部は、LWB66の割り当てが解除されたQLCブロックに対するフォギー・ファイン書き込みを示している。
LWB66が割り当てられたQLCブロックに書き込まれるべきデータがTWB161に格納されると、コントローラ4は、QLCブロックへのフォギー書き込み動作を完了した後、QLCブロックに書き込まれるべきデータをTWB161からLWB66にコピーする。そして、QLCブロックへのファイン書き込み動作が実行可能になると、コントローラ4は、LWB66に格納されているデータを使用して、QLCブロックへのファイン書き込み動作を実行する。そのため、LWB66が割り当てられたQLCブロックは、フォギー書き込み動作だけでなく、ファイン書き込み動作を実行する際にも、pSLCブロックからデータを読み出す必要がなくなる。そのため、LWB66が割り当てられていないQLCブロックと比較して、コントローラ4とNAND型フラッシュメモリ5との間の帯域幅の消費がより少なくなる。
LWB66は、オープンされているQLCブロックすべてに対して割り当てられる必要はない。図24におけるQLC#2のように、LWB66の割り当てが解除されたQLCブロックでは、コントローラ4は、pSLCブロックから読み出されたデータを使用して、QLCブロックに対するファイン書き込み動作を実行する。
コントローラ4は、ライトコマンドによって指定されたQLCブロックにLWB66が割り当てられているか否かに応じて、図26、あるいは図27に示されるフォギー・ファイン書き込み動作を実行する。
まず、LWB66が割り当てられているQLCブロックに対するフォギー・ファイン書き込みの動作の詳細について説明する。図26は、実施形態に係るメモリシステムにおいて、TWBと、LWBと、を使用して実行される書き込み動作について示す図である。
(1)コントローラ4は、ホスト2からあるQLCブロックを指定する1以上のライトコマンドを、ホストインタフェース11を介して受信する。そして、コントローラ4は、あるQLCブロックを指定する1以上のライトコマンドに関連付けられたデータの総サイズがQLCブロックの最小書き込みサイズ(第1の最小書き込みサイズ)に達したことに応じて、ホストインタフェース11を介して、ホストライトバッファ1021からTWB161に第1の最小書き込みサイズを有するデータを転送する。
(2)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをpSLCブロックに転送することによって、pSLCブロックに対する書き込み動作を実行する。
(3)コントローラ4は、pSLCに対する書き込み動作が完了したことに応じて、ホストインタフェース11を介して、1以上のライトコマンドそれぞれに対する1以上の完了応答をホスト2に送信する。pSLCブロックに書き込まれたデータは、既に読み出し可能なデータである。そのため、コントローラ4は、完了応答を送信することができる。
(4)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをQLCブロックに転送することによって、QLCブロックに対するフォギー書き込み動作を実行する。
(5)フォギー書き込み動作が完了すると、コントローラ4は、TWB161からLWB66に、第1の最小書き込みサイズを有するデータをコピーする。その後、コントローラ4は、LWB66へのデータのコピーが完了したことに応じて、TWB161の記憶領域を解放する。
コントローラ4は、上記(1)~(5)の動作を繰り返す。
(6)そして、コントローラ4は、ファイン書き込み動作が実行可能になったことに応じて、LWB66に格納されたデータを用いて、QLCブロック対するファイン書き込み動作を実行する。
次に、LWB66が割り当てられていないQLCブロックに対するフォギー・ファイン書き込みの動作の詳細について説明する。図27は、実施形態に係るメモリシステムにおいて、TWBを使用して実行される書き込み動作について示す図である。
(1)コントローラ4は、ホスト2からあるQLCブロックを指定する1つ以上のライトコマンドを、ホストインタフェース11を介して受信する。そして、コントローラ4は、あるQLCブロックを指定する1以上のライトコマンドに関連付けられたデータの総サイズがQLCブロックの最小書き込みサイズ(第1の最小書き込みサイズ)に達したことに応じて、ホストインタフェース11を介して、ホストライトバッファ1021からTWB161に第1の最小書き込みサイズを有するデータを転送する。
(2)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをpSLCブロックに転送することによって、pSLCブロックに対する書き込み動作を実行する。
(3)コントローラ4は、pSLCに対する書き込み動作が完了したことに応じて、ホストインタフェース11を介して、1以上のライトコマンドそれぞれに対する1以上の完了応答をホスト2に送信する。pSLCブロックに書き込まれたデータは、既に読み出し可能なデータである。そのため、コントローラ4は、完了応答を送信することができる。
(4)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをQLCブロックに転送することによって、QLCブロックに対するフォギー書き込み動作を実行する。その後、コントローラ4は、QLCブロックに対するフォギー書き込みが完了したことに応じて、TWB161の記憶領域を解放する。
コントローラ4は、上記(1)~(4)の動作を繰り返す。
(5)コントローラ4は、ファイン書き込みが実行可能になったことに応じて、pSLCブロックからデータを読み出す。そして、コントローラ4は、読み出したデータを用いて、QLCブロック対するファイン書き込み動作を実行する。
その後、コントローラ4は、pSLCブロックに書き込まれているデータのうち、ファイン書き込みが完了されたデータを書き込み完了データに設定する。
次に、QLCブロックに対するpSLCブロックの割り当て動作の手順について説明する。図28は、実施形態に係るメモリシステムにおいて実行される、QLCブロックに対してpSLCブロックを割り当てる動作の手順を示すフローチャートである。
コントローラ4は、任意のQLCブロックがオープンしたとき、あるいは、任意のQLCブロックに割り当てられているpSLCブロックの未書き込み領域がなくなったとき、QLCブロックに対してpSLCブロックを割り当てる動作を開始する。
まず、コントローラ4は、Half Used pSLCブロックプール63にpSLCブロックが存在するか否かを判定する(ステップS11)。
Half Used pSLCブロックプール63にpSLCブロックが存在する場合(ステップS11でYes)、コントローラ4は、Half Used pSLCブロックプール63に存在するpSLCブロックの中から任意のpSLCブロックを選択する(ステップS12)。コントローラ4は、ウェアレベリングを考慮して、全てのpSLCブロックの消耗度が同程度になるように、Half Used pSLCブロックプール63内のpSLCブロックを選択してもよい。
コントローラ4は、ステップS12で選択されたpSLCブロックをQLCブロックに割り当てる(ステップS13)。
Half Used pSLCブロックプール63にpSLCブロックが存在しない場合(ステップS11でNo)、コントローラ4は、フリーpSLCブロックプール62に存在するpSLCブロックの中から任意のpSLCブロックを選択する(ステップS14)。コントローラ4は、ウェアレベリングを考慮して、フリーpSLCブロックプール62内のpSLCブロックを選択してもよい。
コントローラ4は、ステップS14で選択されたpSLCブロックをHalf Used pSLCブロックプール63に移動させる(ステップS15)。コントローラ4は、ステップS14で選択されたpSLCブロックに対して、イレーズ動作を実行する。そして、コントローラ4は、このpSLCブロックをHalf Used pSLCブロックプール63のリストに追加することによって、ステップS15の動作を実行する。
そして、コントローラ4は、Half Used pSLCブロックプール63に存在するpSLCブロックの中から任意のpSLCブロックを選択する(ステップS12)。つまり、コントローラ4は、ステップS15でHalf Used pSLCブロックプール63に移動されたpSLCブロックを選択することになる。
コントローラ4は、ステップS12(ステップS14)で選択されたpSLCブロックをQLCブロックに割り当てる(ステップS13)。
これにより、コントローラ4は、QLCブロックにpSLCブロックを割り当てる際に、Half Used pSLCブロックプール63内に存在するpSLCブロックを優先してQLCブロックに割り当てる。また、Half Used pSLCブロックプール63内にpSLCブロックが存在しない場合には、コントローラ4は、フリーpSLCブロックプール62からpSLCブロックを選択し、Half Used pSLCブロックプール63を経由して、pSLCブロックをQLCブロックに割り当てる。また、コントローラ4は、Half Used pSLCブロックプール63を経由させずに、直接フリーpSLCブロックプール62内に存在するpSLCブロックをQLCブロックに割り当ててもよい。
以上説明したように、本実施形態によれば、いずれかの書き込み先QLCブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズが第1の書き込みサイズ(例えば、640KB)に達した場合には、この書き込み先QLCブロックに書き込むべきライトデータは、pSLCブロックを経由せずに、書き込み先QLCブロックに直接的に書き込まれる。また、第1の書き込みサイズ未満の総サイズを各々が有する、異なる書き込み先ブロックそれぞれに書き込まれるべき複数のライトデータがホストライトバッファ1021に格納されることによってホストライトバッファ1021の残り容量が閾値を下回った場合には、異なる書き込み先ブロックのうちの一つの書き込み先ブロックが選択され、選択された書き込み先ブロックに対応するライトデータがpSLCブロックに第2の最小書き込みサイズ毎に書き込まれる。
したがって、ホスト2による書き込み量がより多いQLCブロックへのライトデータが書き込み先QLCブロックに直接的に書き込まれるように、QLCブロックへの書き込みとpSLCブロックへの書き込みとが選択的に実行される。よって、必要な不揮発性ライトバッファ(pSLCバッファ)の量の増加を招くことなく、複数の書き込み先QLCブロックに効率的にデータを書き込むことができる。
また、コントローラ4は、pSLCバッファ201に含まれるpSLCブロック(例えば、pSLC#1)をQLC領域202に含まれるQLCブロック(例えば、QLC#1)に割り当てる。コントローラ4は、QLC#1に書き込まれるべきデータのみをpSLC#1に書き込む。そして、コントローラ4は、pSLC#1がQLC#1に割り当てられている間、QLC#1以外のQLCブロックに書き込まれるべきデータをpSLC#1に書き込まない。
これにより、pSLC#1内に複数のQLCブロックに書きこまれるべき書き込み未完了データが混在する状況は生じ得ない。コントローラ4は、pSLC#1を含むpSLCバッファ201に対して、ガベージコレクション処理を実行することなく、効率的にpSLCブロックを運用することができる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、更新を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、10…バス、11…ホストインタフェース、12…CPU、13…NANDインタフェース、14…DRAMインタフェース、15…DMAC、16…SRAM、17…ECCエンコード/デコード部、61…Z2Pテーブル、62…フリーpSLCブロックプール、63…Half Used pSLCブロックプール、64…QLC SAテーブル、65…pSLC SAテーブル、66…LWB、101…プロセッサ、102…メモリ、121…フラッシュマネージメント部、122…QLCブロック制御部、123…pSLCブロック制御部、161…TWB、201…pSLCライトバッファ、202…QLC領域、1021…ホストライトバッファ。
Claims (13)
- ホストに接続可能なメモリシステムであって、
各々が消去動作の単位である複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記複数のブロックのうちの第1のブロック群と、前記複数のブロックのうちの第2のブロック群とを管理し、前記第1のブロック群から割り当てられた複数の書き込み先ブロックへのデータの書き込みを制御するように構成されたコントローラと、を具備し、前記第1のブロック群に含まれるブロックの各々は第1の最小書き込みサイズを有し、前記第2のブロック群に含まれるブロックの各々は前記第1の最小書き込みサイズよりも小さい第2の最小書き込みサイズを有し、
前記コントローラは、
前記複数の書き込み先ブロックのいずれか一つを各々が指定する複数のライトコマンドを前記ホストから受信し、
前記複数の書き込み先ブロックのうちの一つの書き込み先ブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズが、前記一つの書き込み先ブロックへの前記第1の最小書き込みサイズを有するデータの書き込みが完了可能な第1の書き込みサイズに達した場合、前記ホストに設けられたメモリ上のライトバッファに格納されたライトデータのうち、前記一つの書き込み先ブロックに対する前記第1の最小書き込みサイズを有するライトデータの書き込みが完了するように、前記一つの書き込み先ブロックに対する書き込み動作を実行し、前記書き込みが完了したライトデータが格納されている前記ライトバッファの領域を前記ホストに解放させ、前記第1の書き込みサイズは前記第1の最小書き込みサイズの整数倍のサイズを有しており、
前記第1の書き込みサイズ未満の総サイズを各々が有する、異なる書き込み先ブロックそれぞれに書き込まれるべき複数のライトデータが前記ライトバッファに格納されることによって前記ライトバッファの残り容量が閾値を下回った場合、前記異なる書き込み先ブロックのうちの一つの書き込み先ブロックを選択し、前記選択した一つの書き込み先ブロックに対応するライトデータを前記第2のブロックに前記第2の最小書き込みサイズ毎に書き込み、前記第2のブロックに書き込まれたライトデータが格納されている前記ライトバッファの領域を前記ホストに解放させるように構成されている、
メモリシステム。 - 前記コントローラは、
前記一つの書き込み先ブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが前記一つのワード線に後続する一つ以上のワード線へのデータの書き込み後に可能となる第1の書き込みモードを使用して、前記一つの書き込み先ブロックの各ワード線に接続された複数のメモリセルに前記第1の最小書き込みサイズを有するデータを書き込み、
前記第2のブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが前記第2のブロックの前記一つのワード線へのデータの書き込みのみによって可能となる第2の書き込みモードを使用して、前記第2のブロックの各ワード線に接続された複数のメモリセルに前記第2の最小書き込みサイズを有するデータを書き込むように構成されている、
請求項1に記載のメモリシステム。 - 前記コントローラは、
前記ライトバッファの前記残り容量が前記閾値を下回った場合、前記異なる書き込み先ブロックのうちで、前記ライトバッファに格納されているライトデータの総サイズが最も小さい書き込み先ブロックを選択するように構成されている、
請求項1に記載のメモリシステム。 - 前記コントローラは、
前記ライトバッファの前記残り容量が前記閾値を下回った場合、前記異なる書き込み先ブロックのうちで、最新のライトコマンドが受信された時点が最も古い書き込み先ブロックを選択するように構成されている、
請求項1に記載のメモリシステム。 - 前記コントローラは、
前記ライトバッファの前記残り容量が前記閾値を下回った場合、乱数を使用して、前記異なる書き込み先ブロックのうちの一つの書き込み先ブロックを選択するように構成されている、
請求項1に記載のメモリシステム。 - 前記閾値は、前記第1の最小書き込みサイズに基づいて決定される値である、
請求項1に記載のメモリシステム。 - 前記コントローラは、
前記ホストから既に受信された前記複数のライトコマンドに関連付けられたライトデータのうち、書き込みが完了していないライトデータの総サイズを算出し、前記ライトバッファの容量から、前記算出した前記書き込みが完了していないライトデータの総サイズを減算することによって、前記ライトバッファの前記残り容量を算出するように構成されている、
請求項1に記載のメモリシステム。 - 前記コントローラは、
前記ライトバッファの利用可能な容量を指定する通知を前記ホストから受信し、
前記受信した通知によって指定された前記容量を前記ライトバッファの容量として管理するように構成されている、
請求項7に記載のメモリシステム。 - 前記コントローラは、
前記ライトバッファの利用可能な容量を新たな容量に変更する変更要求を前記ホストから受信したことに応じて、前記管理されている前記ライトバッファの容量を前記新たな容量に変更するように構成されている、
請求項8に記載のメモリシステム。 - 前記コントローラは、
前記複数の書き込み先ブロックのうちの第1の書き込み先ブロックに書き込まれるべき第1のライトデータが前記第2のブロックに書き込まれて前記第2のブロックに書き込まれた前記第1のライトデータの総サイズが、前記第1の最小書き込みサイズに達した場合、前記第1のライトデータを前記第2のブロックから読み出し、前記読み出した第1のライトデータを前記第1の書き込み先ブロックに書き込むように構成されている、
請求項1に記載のメモリシステム。 - 前記コントローラは、
前記第2のブロック群に含まれる複数の第2のブロックのうちの一つの第2のブロックを前記選択した一つの書き込み先ブロックに割り当て、前記選択した一つの書き込み先ブロックに対応するライトデータのみを、前記選択した一つの書き込み先ブロックに割り当てられた前記一つの第2のブロックに書き込むように構成されている、
請求項1に記載のメモリシステム。 - 不揮発性メモリに含まれる複数のブロックのうちの第1のブロック群と、前記複数のブロックのうちの第2のブロック群とを管理し、前記第1のブロック群から割り当てられた複数の書き込み先ブロックへのデータの書き込みを制御する制御方法であって、前記第1のブロック群に含まれるブロックの各々は第1の最小書き込みサイズを有し、前記第2のブロック群に含まれるブロックの各々は前記第1の最小書き込みサイズよりも小さい第2の最小書き込みサイズを有し、
前記複数の書き込み先ブロックのいずれか一つを各々が指定する複数のライトコマンドをホストから受信することと、
前記複数の書き込み先ブロックのうちの一つの書き込み先ブロックを指定する1以上の受信済みのライトコマンドに関連付けられたライトデータの総サイズが、前記一つの書き込み先ブロックへの前記第1の最小書き込みサイズを有するデータの書き込みが完了可能な第1の書き込みサイズに達した場合、前記ホストに設けられたメモリ上のライトバッファに格納されたライトデータのうち、前記一つの書き込み先ブロックに対する前記第1の最小書き込みサイズを有するライトデータの書き込みが完了するように、前記一つの書き込み先ブロックに対する書き込み動作を実行し、前記書き込みが完了したライトデータが格納されている前記ライトバッファの領域を前記ホストに解放させることと、
前記第1の書き込みサイズ未満の総サイズを各々が有する、異なる書き込み先ブロックそれぞれに書き込まれるべき複数のライトデータが前記ライトバッファに格納されることによって前記ライトバッファの残り容量が閾値を下回った場合、前記異なる書き込み先ブロックのうちの一つの書き込み先ブロックを選択し、前記選択した一つの書き込み先ブロックに対応するライトデータを前記第2のブロックに前記第2の最小書き込みサイズ毎に書き込み、前記第2のブロックに書き込まれたライトデータが格納されている前記ライトバッファの領域を前記ホストに解放させることと、を具備する
制御方法。 - 前記一つの書き込み先ブロックへの書き込みは、前記一つの書き込み先ブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが前記一つのワード線に後続する一つ以上のワード線へのデータの書き込み後に可能となる第1の書き込みモードを使用して実行され、
前記第2のブロックへの書き込みは、前記第2のブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが前記第2のブロックの前記一つのワード線へのデータの書き込みのみによって可能となる第2の書き込みモードを使用して実行される、
請求項12に記載の制御方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021152009A JP2023044135A (ja) | 2021-09-17 | 2021-09-17 | メモリシステムおよび制御方法 |
US17/653,916 US20230091792A1 (en) | 2021-09-17 | 2022-03-08 | Memory system and method of controlling nonvolatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021152009A JP2023044135A (ja) | 2021-09-17 | 2021-09-17 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023044135A true JP2023044135A (ja) | 2023-03-30 |
Family
ID=85571701
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021152009A Pending JP2023044135A (ja) | 2021-09-17 | 2021-09-17 | メモリシステムおよび制御方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230091792A1 (ja) |
JP (1) | JP2023044135A (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2022171208A (ja) * | 2021-04-30 | 2022-11-11 | キオクシア株式会社 | メモリシステムおよび制御方法 |
KR20230060163A (ko) * | 2021-10-27 | 2023-05-04 | 에스케이하이닉스 주식회사 | 스토리지 장치 및 그 동작 방법 |
TWI819498B (zh) * | 2022-02-18 | 2023-10-21 | 瑞昱半導體股份有限公司 | 記憶體共享電子電路系統以及能使用主機記憶體的外部裝置 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9559889B1 (en) * | 2012-10-31 | 2017-01-31 | Amazon Technologies, Inc. | Cache population optimization for storage gateways |
US10055236B2 (en) * | 2015-07-02 | 2018-08-21 | Sandisk Technologies Llc | Runtime data storage and/or retrieval |
JP6448571B2 (ja) * | 2016-03-08 | 2019-01-09 | 東芝メモリ株式会社 | ストレージシステム、情報処理システムおよび制御方法 |
JP7030463B2 (ja) * | 2017-09-22 | 2022-03-07 | キオクシア株式会社 | メモリシステム |
US10599584B2 (en) * | 2017-11-07 | 2020-03-24 | Arm Limited | Write buffer operation in data processing systems |
KR102503177B1 (ko) * | 2018-03-05 | 2023-02-24 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작 방법 |
US10613778B2 (en) * | 2018-03-21 | 2020-04-07 | Western Digital Technologies, Inc. | Dynamic host memory allocation to a memory controller |
JP7346311B2 (ja) * | 2020-01-16 | 2023-09-19 | キオクシア株式会社 | メモリシステム |
KR20210108107A (ko) * | 2020-02-25 | 2021-09-02 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
US11789858B2 (en) * | 2020-08-11 | 2023-10-17 | Samsung Electronics Co., Ltd. | Method and system for performing read/write operation within a computing system hosting non-volatile memory |
TW202314472A (zh) * | 2021-06-18 | 2023-04-01 | 韓商愛思開海力士有限公司 | 計算系統及其操作方法 |
-
2021
- 2021-09-17 JP JP2021152009A patent/JP2023044135A/ja active Pending
-
2022
- 2022-03-08 US US17/653,916 patent/US20230091792A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20230091792A1 (en) | 2023-03-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7346311B2 (ja) | メモリシステム | |
JP7366795B2 (ja) | メモリシステムおよび制御方法 | |
JP2021114038A (ja) | メモリシステムおよび制御方法 | |
JP7353934B2 (ja) | メモリシステムおよび制御方法 | |
JP7155028B2 (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 | |
US20230091792A1 (en) | Memory system and method of controlling nonvolatile memory | |
JP2021033849A (ja) | メモリシステムおよび制御方法 | |
US11409467B2 (en) | Memory system and method of controlling nonvolatile memory and for reducing a buffer size | |
US11755217B2 (en) | Memory system and method of controlling nonvolatile memory | |
JP7381678B2 (ja) | メモリシステム | |
US11762580B2 (en) | Memory system and control method | |
JP2019148913A (ja) | メモリシステム | |
US12079499B2 (en) | Managing superblock writes using data transfer lists | |
US12147333B2 (en) | Memory system changing write mode and method of controlling nonvolatile memory by changing write mode | |
US20240329882A1 (en) | Memory system and information processing system | |
CN113253917A (zh) | 用于存储器子系统的媒体管理的多状态炼狱 |