JP2023039212A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2023039212A JP2023039212A JP2021146258A JP2021146258A JP2023039212A JP 2023039212 A JP2023039212 A JP 2023039212A JP 2021146258 A JP2021146258 A JP 2021146258A JP 2021146258 A JP2021146258 A JP 2021146258A JP 2023039212 A JP2023039212 A JP 2023039212A
- Authority
- JP
- Japan
- Prior art keywords
- ecc
- data
- unit
- user data
- error correction
- 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/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
-
- 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
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1008—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
- G06F11/1048—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using arrangements adapted for a specific error detection or correction feature
-
- 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/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/065—Replication mechanisms
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)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
- Memory System (AREA)
- Read Only Memory (AREA)
Abstract
【課題】 不揮発性メモリに格納されているデータの内のECCの比率を低下させることができるメモリシステムを実現する。
【解決手段】 実施形態によれば、メモリシステムは不揮発性メモリと少なくとも1つの揮発性メモリとコントローラを具備する。コントローラは、不揮発性メモリに書き込むべき第1単位のデータ部を符号化して、第1単位のデータ部と共に第1誤り訂正符号フレームを構成する第1サイズの第1誤り訂正符号を生成し、第1単位のデータ部を不揮発性メモリに書き込み、第1誤り訂正符号を少なくとも1つの揮発性メモリに格納する。コントローラは、第1単位のデータ部を保護する誤り訂正符号の不揮発化が要求された場合、第1単位のデータ部を符号化して、第1単位のデータ部と共に第2誤り訂正符号フレームを構成する第2サイズの第2誤り訂正符号を生成し、第2誤り訂正符号を不揮発性メモリに書き込む。第2サイズは第1サイズよりも小さい。
【選択図】 図16
【解決手段】 実施形態によれば、メモリシステムは不揮発性メモリと少なくとも1つの揮発性メモリとコントローラを具備する。コントローラは、不揮発性メモリに書き込むべき第1単位のデータ部を符号化して、第1単位のデータ部と共に第1誤り訂正符号フレームを構成する第1サイズの第1誤り訂正符号を生成し、第1単位のデータ部を不揮発性メモリに書き込み、第1誤り訂正符号を少なくとも1つの揮発性メモリに格納する。コントローラは、第1単位のデータ部を保護する誤り訂正符号の不揮発化が要求された場合、第1単位のデータ部を符号化して、第1単位のデータ部と共に第2誤り訂正符号フレームを構成する第2サイズの第2誤り訂正符号を生成し、第2誤り訂正符号を不揮発性メモリに書き込む。第2サイズは第1サイズよりも小さい。
【選択図】 図16
Description
本発明の実施形態は、不揮発性メモリを備えるメモリシステムに関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、様々なコンピューティングデバイスのメインストレージとして使用されている。
メモリシステムのコントローラは、不揮発性メモリ内のブロックの故障を救済するための機能を有することがある。コントローラは、例えば、誤り訂正符号(Error Correction Code:ECC)を用いて、エラーが発生したデータを訂正するエラー訂正機能を有している。
不揮発性メモリに格納できるユーザデータの量をより多くするために、不揮発性メモリに格納されているデータの内のECCの比率は、より低くなることが望ましい。つまり、より低いECCの比率で、ブロックの故障に対処できることが望ましい。
本発明は、不揮発性メモリに格納されているデータの内のECCの比率を低下させることができるメモリシステムを提供することを目的とする。
実施形態によれば、メモリシステムは、不揮発性メモリと、少なくとも1つの揮発性メモリと、コントローラとを具備する。コントローラは、不揮発性メモリと少なくとも1つの揮発性メモリとを制御する。コントローラは、不揮発性メモリに書き込むべき第1単位のデータ部を符号化して、第1単位のデータ部と共に第1誤り訂正符号フレームを構成する第1サイズの第1誤り訂正符号を生成する。コントローラは、第1単位のデータ部を不揮発性メモリに書き込む。コントローラは、第1誤り訂正符号を少なくとも1つの揮発性メモリに格納する。コントローラは、第1単位のデータ部を保護する誤り訂正符号の不揮発化が要求された場合、第1単位のデータ部を符号化して、第1単位のデータ部と共に第2誤り訂正符号フレームを構成する第2サイズの第2誤り訂正符号を生成し、第2誤り訂正符号を不揮発性メモリに書き込む。第2サイズは、第1サイズよりも小さい。
以下、発明を実施するための形態について図面を参照して説明する。
図1は、第1実施形態に係る情報処理システム1の構成を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、メモリシステム3とを含む。
ホスト2は、メモリシステム3にアクセスする情報処理装置(コンピューティングデバイス)である。ホスト2は、大量且つ多様なデータをメモリシステム3に保存するサーバ(ストレージサーバ)であってもよいし、パーソナルコンピュータであってもよい。
メモリシステム3は、ストレージデバイスである。メモリシステム3は、例えば、NAND型フラッシュメモリを備えたソリッドステートドライブ(SSD)として実現され得る。メモリシステム3は、ホスト2のメインストレージとして使用され得る。メモリシステム3は、ホスト2にケーブルまたはネットワークを介して接続される。
ホスト2とメモリシステム3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等が使用され得る。
メモリシステム3は、コントローラ4、不揮発性メモリ5、およびランダムアクセスメモリ(RAM)6を備える。
コントローラ4は、不揮発性メモリ5を制御するように構成されたメモリコントローラである。コントローラ4は、例えば、System-on-a-chip(SoC)のような回路によって実現され得る。コントローラ4は、例えば、SLCモード、MLCモード、TLCモード、およびQLCモードのいずれかで、不揮発性メモリ5に対する書き込み動作を実行できる。SLCモードは、メモリセル当たりに1ビットが書き込まれるモードである。MLCモードは、メモリセル当たりに2ビットが書き込まれるモードである。TLCモードは、メモリセル当たりに3ビットが書き込まれるモードである。QLCモードは、メモリセル当たりに4ビットが書き込まれるモードである。
不揮発性メモリ5は、メモリデバイスである。不揮発性メモリ5は、二次元構造の不揮発性メモリであってもよいし、三次元構造の不揮発性メモリであってもよい。不揮発性メモリ5は、例えば、NAND型フラッシュメモリとして実現される。
不揮発性メモリ5は、メモリセルアレイを含む。メモリセルアレイは、マトリクス状に配置された複数のメモリセルを含む。不揮発性メモリ5のメモリセルアレイは、複数のブロックを含む。複数のブロックそれぞれは、複数のページを含む。1つのブロックは、最小の消去単位として機能する。ブロックは、消去ブロック、物理ブロックと称されることもある。各ページは、同一ワード線に接続された複数のメモリセルを含む。1つのページは、データ書き込み動作およびデータ読み出し動作の単位である。なお、ワード線をデータ書き込み動作およびデータ読み出し動作の単位としてもよい。各ブロックに対して許容できるProgram/Eraseサイクル(P/Eサイクル)の数には上限がある。あるブロックの1回のP/Eサイクルは、ブロック内の全てのメモリセルを消去状態にするための消去動作と、ブロックのページそれぞれにデータを書き込む書き込み動作(プログラム動作)とを含む。
また、不揮発性メモリ5は、複数の不揮発性メモリチップ(例えば、複数のNAND型フラッシュメモリダイ)を含んでいてもよい。複数の不揮発性メモリチップそれぞれは、メモリセル当たりに複数ビットを格納可能に構成されたフラッシュメモリとして実現され得る。
メモリセル当たりに複数ビットを記憶可能に構成されたフラッシュメモリとは、例えば、マルチレベルセル(MLC、あるいは4LC)フラッシュメモリ、トリプルレベルセル(TLC、あるいは8LC)フラッシュメモリ、クワッドレベルセル(QLC、あるいは16LC)フラッシュメモリである。MLCフラッシュメモリは、メモリセル当たりに2ビットのデータを記憶可能である。TLCフラッシュメモリは、メモリセル当たりに3ビットのデータを記憶可能である。QLCフラッシュメモリは、メモリセル当たりに4ビットのデータを記憶可能である。なお、メモリセル当たりに1ビットを記憶可能に構成されたフラッシュメモリは、シングルレベルセル(SLC、あるいは2LC)フラッシュメモリとも称される。
不揮発性メモリチップがMLCフラッシュメモリとして実現される場合、通常は、2ページ分のデータ(下位ページデータおよび上位ページデータ)が、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに2ビットを書き込むことができる。このMLCフラッシュメモリ内の任意の領域(例えば、1つ以上の任意のブロック)は、メモリセル当たりに1ビットのみを記憶可能な領域(SLC領域)として使用することができる。SLC領域にデータを書き込む動作においては、1ページ分のデータ(下位ページデータ)のみが同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、SLC領域として使用される各ブロックにおいては、SLCフラッシュメモリ内の各ブロック(SLCブロック)と同様に、メモリセル当たりに1ビットのみを書き込むことができる。この結果、SLC領域として使用される各ブロックは、擬似的なSLCブロックとして機能する。
不揮発性メモリチップがTLCフラッシュメモリとして実現される場合、通常は、3ページ分のデータ(下位ページデータ、ミドルページデータ、および上位ページデータ)が、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに3ビットを書き込むことができる。このTLCフラッシュメモリ内の任意の領域(例えば、1つ以上の任意のブロック)は、上述のSLC領域として使用されてもよいし、メモリセル当たりに2ビットを記憶可能なMLC領域として使用されてもよい。なお、SLC領域/MLC領域は、ブロックよりも細かい単位(例えば、ワード線の単位、ブロック内のワード線の集合の単位)で設定されてもよい。MLC領域においては、2ページ分のデータのみが同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、MLC領域においては、メモリセル当たりに2ビットのみを書き込むことができる。
不揮発性メモリチップがQLCフラッシュメモリとして実現される場合、通常、4ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに4ビットを書き込むことができる。このQLCフラッシュメモリ内の任意の領域(例えば、1つ以上の任意のブロック)は、上述のSLC領域として使用されてもよいし、上述のMLC領域として使用されてもよいし、あるいは、メモリセル当たりに3ビットを記憶可能なTLC領域として使用されてもよい。なお、SLC領域/MLC領域/TLC領域は、ブロックよりも細かい単位(例えば、ワード線の単位、ブロック内のワード線の集合の単位)で設定されてもよい。TLC領域においては、3ページ分のデータのみが、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、TLC領域においては、メモリセル当たりに3ビットを書き込むことができる。
なお、不揮発性メモリチップは、メモリセル当たりに5ビット以上を記憶可能に構成されていてもよい。この場合においても、不揮発性メモリチップの任意の領域は、メモリセル当たりに4ビット以下のデータのみが書き込まれる領域として使用され得る。
RAM6は揮発性メモリである。RAM6は、例えば、ダイナミックRAM(DRAM)である。あるいは、RAM6は、スタティックRAM(SRAM)であってもよい。RAM6は、コントローラ4の内部構成であってもよい。以下では、RAM6としてDRAMが用いられる場合を主に例示する。
RAM6には、論理物理アドレス変換テーブル31のキャッシュ領域が設けられている。また、RAM6には、処理に用いられる誤り訂正符号(ECC)(例えば、中間ECC34)や、テーブル(例えば、データアドレス-中間ECCアドレス対応テーブル32、データアドレス-セーブブロックECC(SB ECC)アドレス対応テーブル33)の格納領域が設けられてもよい。
コントローラ4は、不揮発性メモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。データ管理には、(1)論理アドレスそれぞれと不揮発性メモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード動作/ライト動作とブロック単位の消去動作との差異を隠蔽するための処理、等が含まれる。ブロック管理には、バッドブロックの管理、ウェアレベリング、ガベージコレクション(GC)、等が含まれる。以下では、不揮発性メモリ5のデータ管理およびブロック管理のための処理を、FTL処理とも称する。
論理アドレスは、メモリシステム3をアドレス指定するためにホスト2によって使用されるアドレスである。論理アドレスとして、例えば、論理ブロックアドレス(LBA)が使用される。論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングの管理は、論理物理アドレス変換テーブル31を用いて実行される。コントローラ4は、論理物理アドレス変換テーブル31を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。物理アドレスは、不揮発性メモリ5内の記憶位置を示す。論理物理アドレス変換テーブル31は、メモリシステム3の起動時に不揮発性メモリ5からRAM6にロードされてもよい。
1つのページへのデータ書き込みは、1つのP/Eサイクル当たり1回のみ可能である。また、P/Eサイクルの回数には上限がある。このため、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている記憶位置ではなく、別の記憶位置に書き込む。そして、コントローラ4は、論理物理アドレス変換テーブル31を更新してこの論理アドレスをこの別の物理記憶位置を指す物理アドレスに関連付け、さらに以前のデータを無効化する。以下では、論理物理アドレス変換テーブル31から参照されているデータ(すなわち、論理アドレスと紐付けられているデータ)を有効データと称する。また、どの論理アドレスとも紐付けられていないデータを無効データと称する。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、もはやホスト2からリードされる可能性が無いデータである。
コントローラ4は、ホストインタフェース(ホストI/F)11、CPU12、メモリI/F13、RAMインタフェース(RAM I/F)14、バッファ15、およびECCエンコーダ16を含む。ホストI/F11、CPU12、メモリI/F13、RAM I/F14、バッファ15、およびECCエンコーダ16は、バス10を介して相互接続されていてもよい。
ホストI/F11は、ホスト2から様々なコマンドを受信する回路である。様々なコマンドとは、例えば、I/Oコマンド、各種制御コマンド、である。I/Oコマンドは、例えば、ライトコマンド、リードコマンドを含む。制御コマンドは、例えば、アンマップコマンド(トリムコマンド)、フォーマットコマンド、フラッシュコマンドを含む。フォーマットコマンドは、メモリシステム3全体をアンマップするためのコマンドである。フラッシュコマンドは、メモリシステム3内にキャッシュまたはバッファされているダーティデータを不揮発性メモリ5に書き込むためのコマンドである。ダーティデータは、例えば、ユーザデータおよび関連する管理データである。
CPU12は、ホストI/F11、メモリI/F13、RAM I/F14、バッファ15、およびECCエンコーダ16を制御するように構成されたプロセッサである。CPU12は、図示しないROM等に格納されている制御プログラム(ファームウェア)を実行することによって様々な処理を行う。様々な処理とは、例えば、FTL処理、コマンド処理である。コマンド処理は、ホスト2からの様々なコマンドを処理するための処理である。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内の専用ハードウェアが実行してもよい。
メモリI/F13は、不揮発性メモリ5を制御するように構成されたストレージ制御回路である。メモリI/F13は、例えばToggle DDR、Open NAND Flash Interface(ONFI)である。コントローラ4と不揮発性メモリ5とは、メモリI/F13を介して電気的に接続されている。メモリI/F13は、複数のチャンネルを介して、不揮発性メモリ5内の複数のメモリチップにそれぞれ接続されていてもよい。
RAM I/F14は、RAM6のアクセスを制御するように構成されたコントローラである。
バッファ15は揮発性の記憶領域である。バッファ15は、不揮発性メモリ5に書き込まれるデータを一時的に記憶する。バッファ15は、例えば、ユーザデータを記憶する。ユーザデータは、例えば、ホスト2からライトコマンドと共に受信される書き込み対象のデータである。なお、バッファ15は、GCソースブロックから読み出された有効データを記憶してもよい。
ECCエンコーダ16は、データを符号化して、当該データに対応するECC(すなわちパリティ)を生成する。ECCとして、例えば、Reed-Solomon(RS)符号、XORパリティが用いられる。
また、コントローラ4は、不揮発性メモリ5内のブロックを、例えば、書き込み先ブロックまたはセーブブロックとして供給し得る。
書き込み先ブロックは、ユーザデータの書き込み先として用いられるブロックである。
セーブブロックは、メモリシステム3の内部状態の確定を要する特定の要求を受け付けた場合に、揮発性の記憶領域に格納されているデータを不揮発化するために用いられるブロックである。揮発性の記憶領域は、例えば、RAM6、バッファ15である。メモリシステム3の内部状態の確定を要する特定の要求は、例えば、省電力モードへの移行要求、電源オフ(シャットダウン)の要求、フラッシュ要求(例えば、フラッシュコマンド)である。以下では、メモリシステム3の内部状態の確定を要する特定の要求を、内部状態確定要求とも称する。例えば、メモリシステム3は、内部状態確定要求に基づいてバッファ15に蓄積されているユーザデータをセーブブロックに不揮発化した後に、省電力モードに移行するか、シャットダウンされることがある。その後、起動されたメモリシステム3では、内部状態が確定されていたことにより、セーブブロックに格納されているユーザデータを用いて、バッファ15に蓄積されていたユーザデータを復旧できる。
ブロックに対する書き込みは、例えば、特定のデータ単位で行われる。特定のデータ単位は、例えば、1回のデータ書き込み動作で不揮発性メモリ5に書き込みが可能なデータ量である。以下では、特定のデータ単位を、書き込み単位とも称する。
セーブブロックに対する書き込み単位は、例えば、書き込み先ブロックに対する書き込み単位よりも小さくなり得る。より具体的には、コントローラ4は、メモリセル当たりにnビットのデータが書き込まれる第1モードで、セーブブロックにデータを書き込む。また、コントローラ4は、メモリセル当たりにmビットのデータが書き込まれる第2モードで、書き込み先ブロックにデータを書き込む。nは1以上の数である。mはnよりも大きい数である。第1モードは、例えば、SLCモードである。第2モードは、例えば、SLCモード、MLCモード、TLCモードまたはQLCモードである。
また、例えば、セーブブロックとして用いられる論理ブロックを構成する物理ブロックの数は、書き込み先ブロックとして用いられる論理ブロックを構成する物理ブロックの数よりも少ない。論理ブロックは、N個の物理ブロックで構成される。Nは1以上の整数である。N個の物理ブロックは、各物理ブロックに対する物理ページ単位の書き込みが並列して行われるブロック群である。つまり、コントローラ4は、N個の物理ブロックそれぞれの物理ページに対する書き込み動作(すなわち、N個の物理ページに対する書き込み動作)を並列に行い得る。よって、論理ブロックに対する書き込み単位は、構成する物理ブロックの数が少ないほど小さくなる。したがって、セーブブロックとして用いられる論理ブロックに対する書き込み単位は、書き込み先ブロックとして用いられる論理ブロックに対する書き込み単位より小さい。
なお、論理ブロックに対する書き込み単位は、N個の物理ページよりも小さい場合がある。この場合、セーブブロックとして用いられる論理ブロックに対する書き込み単位をj個の物理ページとし、書き込み先ブロックとして用いられる論理ブロックに対する書き込み単位をk個の物理ページとしたならば、jがk以下であるように設定される。これにより、セーブブロックとして用いられる論理ブロックに対する書き込み単位は、書き込み先ブロックとして用いられる論理ブロックに対する書き込み単位より小さくなる。
このように、セーブブロックに対する書き込み単位は、書き込み先ブロックに対する書き込み単位よりも小さいので、セーブブロックに対するデータ書き込みでは、書き込み先ブロックに対するデータ書き込みよりも、パディング用のデータが書き込まれる量が削減され得る。
また、ブロックに格納されているユーザデータは、ECCによって保護される。
具体的には、書き込み先ブロックに格納されているユーザデータは、中間ECCと最終ECCのいずれか一方によって保護される。
中間ECCは、書き込み先ブロックに格納された第1保護単位のユーザデータと共に第1フレームサイズ(すなわち第1フレーム長)のECCフレームを構成する。つまり、第1保護単位のユーザデータは、対応する中間ECCで保護される。第1保護単位は、例えば、書き込み先ブロックに対する書き込み単位に相当する。
最終ECCは、複数の書き込み先ブロックに格納された第2保護単位のユーザデータと共に第2フレームサイズ(すなわち第2フレーム長)のECCフレームを構成する。つまり、第2保護単位のユーザデータは、対応する最終ECCで保護される。第2保護単位は第1保護単位よりも大きい。第2フレームサイズは、第1フレームサイズよりも大きい。また、第2保護単位のユーザデータは、少なくとも1つの第1保護単位のユーザデータを含んでいる。
また、セーブブロックに格納されているユーザデータは、SB ECCで保護される。
SB ECCは、セーブブロックに格納されたユーザデータと共に1つのECCフレームを構成する。つまり、セーブブロックに格納されたユーザデータは、対応するSB ECCで保護される。SB ECCは、セーブブロックに書き込まれる。
実施形態のメモリシステム3で最終ECC、中間ECCおよびSB ECCとして用いられるECCは、いずれもページ間ECCである。ページ間ECCは、例えば、線形符号である。なお、メモリシステム3では、ページ間ECCだけでなく、ページ内ECC(Channel ECC)も用いられ得る。ページ内ECCとしては、例えば、Bose Chaudhuri Hocquenghem(BCH)符号や、Low Density Parity Check(LDPC)符号が用いられる。
ここで、不揮発性メモリ5に対する書き込みモードの特徴について説明する。
図2は、実施形態に係るメモリシステム3で用いられる書き込みモードの特徴を示す。SLCモードにおけるメモリセル当たりのデータ密度は、2値(1ページ)である。MLCモードにおけるメモリセル当たりのデータ密度は、4値(2ページ)である。TLCモードにおけるメモリセル当たりのデータ密度は、8値(3ページ)である。QLCモードにおけるメモリセル当たりのデータ密度は、16値(4ページ)である。
不揮発性メモリ5に対するデータの読み出し速度および書き込み速度は、データ密度が高いほど遅く、データ密度が低いほど速い。したがって、SLCモード、MLCモード、TLCモード、およびQLCモードの内、QLCモードにおけるデータの読み出しおよび書き込みが最も遅い。また、SLCモード、MLCモード、TLCモード、およびQLCモードの内、SLCモードにおけるデータの読み出しおよび書き込みが最も速い。
次いで、メモリシステム3で用いられる幾つかのテーブルの構成例を説明する。
図3は、実施形態に係るメモリシステム3で用いる論理物理アドレス変換テーブル31の構成例を示す。論理物理アドレス変換テーブル31は、例えばルックアップテーブル(LUT)として実現される。論理物理アドレス変換テーブル31は、論理アドレスそれぞれと不揮発性メモリ5の物理アドレスそれぞれとの間のマッピングを管理する。
図4は、実施形態に係るメモリシステム3で用いるデータアドレス-中間ECCアドレス対応テーブル32の構成例を示す。データアドレス-中間ECCアドレス対応テーブル32は、中間ECCで保護される複数のECCフレームにそれぞれ対応する複数のエントリを含み得る。中間ECCで保護されるECCフレームは、書き込み先ブロックに格納されていて、対応する最終ECCが書き込み先ブロックにまだ書き込まれていない書き込み単位(第1保護単位)のユーザデータと、中間ECCとで構成される。複数のエントリの各々は、ユーザデータの物理アドレスのフィールドと、中間ECCの物理アドレスのフィールドとを含む。
ユーザデータの物理アドレスのフィールドは、対応するECCフレームを構成し、書き込み先ブロックに格納されているユーザデータの物理アドレスを示す。
中間ECCの物理アドレスのフィールドは、対応するECCフレームを構成し、RAM6またはセーブブロックに格納されている中間ECCの物理アドレスを示す。つまり、中間ECCの物理アドレスは、中間ECCが格納されているRAM6内の記憶領域、または中間ECCが格納されている不揮発性メモリ5内の物理アドレスを示す。
図5は、実施形態に係るメモリシステム3で用いるデータアドレス-SB ECCアドレス対応テーブル33の構成例を示す。データアドレス-SB ECCアドレス対応テーブル33は、SB ECCで保護される複数のECCフレームに対応する複数のエントリを含み得る。SB ECCで保護されるECCフレームは、例えば、1つ以上のクラスタ単位のユーザデータと、1つ以上のクラスタ単位のSB ECCとで構成される。1つ以上のクラスタ単位のユーザデータそれぞれは、1つ以上のセーブブロックそれぞれに格納されている。1つ以上のクラスタ単位のSB ECCそれぞれは、1つ以上のセーブブロックそれぞれに格納されている。複数のエントリの各々は、ユーザデータの物理アドレスのフィールドと、SB ECCの物理アドレスのフィールドとを含む。
ユーザデータの物理アドレスのフィールドは、対応するECCフレームを構成する1つ以上のクラスタ単位のユーザデータがそれぞれ格納されている1つ以上の物理アドレスを示す。
SB ECCの物理アドレスのフィールドは、対応するECCフレームを構成する1つ以上のクラスタ単位のSB ECCがそれぞれ格納されている1つ以上の物理アドレスを示す。
前述した論理物理アドレス変換テーブル31、データアドレス-中間ECCアドレス対応テーブル32、およびデータアドレス-SB ECCアドレス対応テーブル33それぞれの構成は、一例であって、メモリシステム3を構成するハードウェアおよびソフトウェア(例えば、ファームウェア)の設計に応じて、適宜変更可能である。
図1に戻る。コントローラ4のCPU12は、リード制御部121、ライト制御部122、不揮発化処理部123、および誤り訂正処理部124として機能し得る。CPU12は、例えば、ファームウェアを実行することにより、リード制御部121、ライト制御部122、不揮発化処理部123、および誤り訂正処理部124として機能し得る。
リード制御部121は、コントローラ4内の各部を制御してリード動作を行う。リード動作は、例えば、ホスト2からのリードコマンドに応じて、不揮発性メモリ5からユーザデータを読み出すための動作である。リード動作は、メモリシステム3の内部動作(例えば、GC動作、リフレッシュ動作、ウェアレベリング動作)において、不揮発性メモリ5からユーザデータを読み出すための動作であってもよい。
ライト制御部122は、ホスト2からライトコマンドを受信したことに応じて、不揮発性メモリ5に書き込むべきユーザデータをホスト2から受信する。そして、ライト制御部122は、コントローラ4内の各部を制御してライト動作を行う。ライト動作は、例えば、ホスト2から受信したユーザデータを不揮発性メモリ5に書き込むための動作である。ライト動作は、メモリシステム3の内部動作においてユーザデータを不揮発性メモリ5に書き込むための動作であってもよい。
不揮発化処理部123は、内部状態確定要求に基づいて、揮発性の記憶領域に記憶されているデータを不揮発化するための不揮発化動作を行う。不揮発化動作は、例えば、中間ECCを不揮発化するための動作と、バッファ15に蓄積されている未書き込みのユーザデータと、対応するSB ECCとを不揮発化するための動作とを含む。よって、内部状態確定要求は、中間ECCを不揮発化する要求と、バッファ15に蓄積されている未書き込みのユーザデータと、対応するSB ECCとを不揮発化する要求を含むとも云える。
誤り訂正処理部124は、不揮発性メモリ5から読み出されたユーザデータにエラーが発生している場合、エラー訂正処理を行う。また、誤り訂正処理部124は、不揮発性メモリ5へのユーザデータの書き込みが失敗した場合に、エラー訂正処理を行う。
ここで、メモリシステム3における内部状態確定要求に基づく不揮発化動作について説明する。
コントローラ4は、内部状態確定要求に基づいて、RAM6およびバッファ15のような揮発性の記憶領域に格納されているデータを不揮発性メモリ5に書き込む。揮発性の記憶領域に格納されているデータを不揮発性メモリ5に書き込むことにより、メモリシステム3の内部状態を確定できる。例えば、コントローラ4が、ホスト2から受信したフラッシュコマンドに基づいて、RAM6およびバッファ15に蓄積されているデータを不揮発性メモリ5に書き込んだ場合、メモリシステム3の内部状態が、フラッシュコマンドに基づく処理が完了する以前の状態に巻き戻らないことを保証できる。
コントローラ4は、ブロックに対する書き込みを、特定のデータ単位(書き込み単位)で行う。揮発性の記憶領域に格納されているデータは、書き込み単位に満たない場合がある。この場合、コントローラ4は、揮発性の記憶領域に格納されているデータをパディング付きでブロックに書き込む。データをパディング付きで書き込むとは、書き込み対象のデータとパディング用のデータとで構成される書き込み単位のデータを書き込むことを意味する。
内部状態確定要求に基づいて、揮発性の記憶領域に格納されているデータを不揮発性メモリ5に書き込む場合、データをパディング付きでブロックに書き込むことが多い。よって、パディング用の無駄なデータが不揮発性メモリ5に書き込まれる量が増加する傾向にある。
図6は、バッファ15から書き込み先ブロックに不揮発化されるユーザデータの例を示す。バッファ15にはユーザデータ611が蓄積されている。ユーザデータ611のサイズは、書き込み先ブロックへの書き込み単位に達していない。書き込み先ブロック511は、不揮発性メモリ5内のブロックである。
内部状態確定要求に基づいて、ユーザデータ611はパディング付きで書き込み先ブロック511に書き込まれる。つまり、ユーザデータ611とパディング用のデータ611Pとで構成される書き込み単位のデータが、書き込み先ブロック511に書き込まれる。これにより、バッファ15に蓄積されているユーザデータ611が不揮発化される。そして、ユーザデータ611を記憶しているバッファ15内の記憶領域が解放される。
図7は、図6に後続して、バッファ15から書き込み先ブロック511に不揮発化される別のユーザデータの例を示す。バッファ15にはユーザデータ612が蓄積されている。ユーザデータ612のサイズは、書き込み先ブロックへの書き込み単位に達していない。
内部状態確定要求に基づいて、ユーザデータ612はパディング付きで書き込み先ブロック511に書き込まれる。つまり、ユーザデータ612とパディング用のデータ612Pとで構成される書き込み単位のデータが、書き込み先ブロック511に書き込まれる。これにより、バッファ15に蓄積されているユーザデータ612が不揮発化される。そして、ユーザデータ612を記憶しているバッファ15内の記憶領域は解放される。
図6および図7に示すように、内部状態確定要求に基づいて、バッファ15に蓄積されている2つのユーザデータ611,612それぞれを書き込み先ブロック511に書き込む場合、書き込み先ブロック511に書き込まれるパディング用の無駄なデータが多く発生する。
次いで、内部状態確定要求に基づいて行われる、RAM6およびバッファ15に格納されているデータの書き込みに、書き込み先ブロックではなく、セーブブロックが用いられる場合について説明する。セーブブロックは、書き込み先ブロックよりも書き込み単位が小さいブロックである。
図8は、バッファ15からセーブブロックに不揮発化されるユーザデータの例を示す。バッファ15にはユーザデータ613が蓄積されている。ユーザデータ613のサイズは、セーブブロックへの書き込み単位に相当する。セーブブロック551は、不揮発性メモリ5内のブロックである。
内部状態確定要求に基づいて、ユーザデータ613はセーブブロック551に書き込まれる。ユーザデータ613のサイズがセーブブロックへの書き込み単位に相当するので、ユーザデータ613は、パディング用のデータが付加されることなく、そのままセーブブロック551に書き込まれる。これにより、バッファ15に蓄積されているユーザデータ613が不揮発化される。
なお、ユーザデータ613のサイズは、書き込み先ブロックへの書き込み単位に満たない。ユーザデータ613をセーブブロック551に書き込むことによって、ユーザデータ613を書き込み先ブロック511に書き込む場合に発生するパディング用のデータの書き込みをなくすことができる。
図9は、図8に後続して、バッファ15からセーブブロック551に不揮発化される別のユーザデータの例を示す。バッファ15には、ユーザデータ613とユーザデータ614とが蓄積されている。ユーザデータ614のサイズは、セーブブロックへの書き込み単位に達していない。
内部状態確定要求に基づいて、まだ不揮発化されていないユーザデータ614がパディング付きでセーブブロック551に書き込まれる。つまり、ユーザデータ614とパディング用のデータ614Pとで構成される書き込み単位のデータが、セーブブロック551に書き込まれる。これにより、バッファ15に蓄積されているユーザデータ614が不揮発化される。
セーブブロックへの書き込み単位は、書き込み先ブロックへの書き込み単位よりも小さい。そのため、ユーザデータ614をセーブブロック551に書き込む場合、ユーザデータ614を書き込み先ブロック511に書き込む場合と比較して、不揮発性メモリ5に書き込まれるパディング用のデータの量を削減できる。
したがって、図8および図9に示すように、内部状態確定要求に基づいて、バッファ15に蓄積されている2つのユーザデータ613,614それぞれをセーブブロック551に書き込む場合、ユーザデータ613,614それぞれを書き込み先ブロック511に書き込む場合と比較して、不揮発性メモリ5に書き込まれるパディング用の無駄なデータの量を削減できる。
図10は、図9に後続して、バッファ15から書き込み先ブロック511に書き込まれるユーザデータの例を示す。バッファ15には、ユーザデータ613、ユーザデータ614、およびユーザデータ615が蓄積されている。ユーザデータ613、ユーザデータ614、およびユーザデータ615の総データサイズ(総データ量)は、書き込み先ブロックへの書き込み単位に相当する。
バッファ15に蓄積されているユーザデータ613、ユーザデータ614、およびユーザデータ615の総データサイズが、書き込み先ブロックへの書き込み単位に達した場合、書き込み単位のユーザデータ613、ユーザデータ614、およびユーザデータ615は書き込み先ブロック511に書き込まれる。
このように、内部状態確定要求に基づいてユーザデータを不揮発性メモリ5に書き込む場合に、ユーザデータをセーブブロック551に書き込むことにより、書き込み先ブロック511にパディング用のデータが書き込まれないようにすることができる。
次いで、バーストエラーを救済するための機能について説明する。バーストエラーは、特定の記憶領域のデータに集中的に発生するエラーである。バーストエラーは、例えば、ブロックの消失である。バーストエラーを救済するために、ブロックはECCを用いて保護される。より具体的には、例えば、エラーが発生したデータは、ECCを用いて訂正され得る。
書き込み先ブロックを保護するECCとセーブブロックを保護するECCとについて、以下にそれぞれ説明する。
(書き込み先ブロックを保護するECC)
書き込み先ブロックに格納されているユーザデータは、中間ECCと最終ECCのいずれか一方によって保護される。
書き込み先ブロックに格納されているユーザデータは、中間ECCと最終ECCのいずれか一方によって保護される。
図11は、書き込み先ブロックに書き込まれるユーザデータと、ユーザデータを保護する中間ECCの例を示す。バッファ15にはユーザデータ616が蓄積されている。ユーザデータ616のサイズは、書き込み先ブロックへの書き込み単位に相当する。第1書き込み先ブロック521、第2書き込み先ブロック522およびセーブブロック552は、不揮発性メモリ5内のブロックである。
ECCエンコーダ16は、書き込み単位に相当するユーザデータ616を符号化して、中間ECC711を生成する。RAM6は、生成された中間ECC711を記憶する。また、ユーザデータ616は第1書き込み先ブロック521に書き込まれる。そして、ユーザデータ616を記憶しているバッファ15内の記憶領域は解放される。これにより、第1書き込み先ブロック521に格納されているユーザデータ616は、RAM6に格納されている中間ECC711で保護される。ユーザデータ616は、第1保護単位のユーザデータに相当する。また、ユーザデータ616と中間ECC711とは、第1フレームサイズのECCフレームを構成する。
次いで、内部状態確定要求に基づいて、RAM6に格納されている中間ECC711は不揮発化される。具体的には、中間ECC711は、例えば、セーブブロック552に書き込まれる。これにより、不揮発化された中間ECC711で、第1書き込み先ブロック521に格納されているユーザデータ616を保護できる。
図12は、書き込み先ブロックに書き込まれるユーザデータおよび最終ECCの例を示す。ここでは、図11に示した例のように、ユーザデータ616に対応する中間ECC711がRAM6に格納され、ユーザデータ616が第1書き込み先ブロック521に書き込まれた後に、ユーザデータ617がバッファ15に蓄積されたことを想定する。ユーザデータ617は、書き込み先ブロックへの書き込み単位から最終ECC分を引いたサイズを有している。
コントローラ4は、第1書き込み先ブロック521にユーザデータ616を書き込んだ後、ユーザデータ616とユーザデータ617とをECCエンコーダ16で符号化して、最終ECC731を生成する。コントローラ4は、ユーザデータ617と最終ECC731とを第2書き込み先ブロック522に書き込む。これにより、ユーザデータ616およびユーザデータ617は、最終ECC731で保護される。ユーザデータ616およびユーザデータ617は、第2保護単位のユーザデータに相当する。また、ユーザデータ616、ユーザデータ617および最終ECC731は、第2フレームサイズのECCフレームを構成する。
なお、最終ECC731が書き込み先ブロック522に書き込まれた後に、内部状態確定要求を受け付けた場合、中間ECC711はセーブブロック552に書き込まれない。これは、ユーザデータ616は最終ECC617で保護されているためである。
また、最終ECCで保護される第2保護単位のユーザデータは、複数の第1保護単位のユーザデータを含んでいてもよい。つまり、図12では、第2保護単位のユーザデータが1つの第1保護単位のユーザデータ616を含む例を示したが、第2保護単位のユーザデータは、複数の書き込み先ブロックにそれぞれ書き込まれる複数の第1保護単位のユーザデータを含んでいてもよい。
つまり、コントローラ4は、d-1個の第1フレームサイズのECCフレームにそれぞれ書き込まれるd-1個の第1保護単位のユーザデータを不揮発性メモリ5(より詳しくは、d-1個の書き込み先ブロック)に書き込んだ場合に、d-1個の第1保護単位のユーザデータと、ユーザデータ617とを符号化して、最終ECC731を生成する。そして、コントローラ4は、ユーザデータ617と最終ECC731とを書き込み先ブロック522に書き込む。なお、dは2以上の整数である。これにより、d-1個の第1保護単位のユーザデータとユーザデータ617とからなる第2保護単位のユーザデータが、最終ECC731で保護される。
(セーブブロックを保護するECC)
セーブブロックに格納されているユーザデータは、SB ECCで保護される。
セーブブロックに格納されているユーザデータは、SB ECCで保護される。
図13は、バッファ15からセーブブロックに不揮発化されるユーザデータと、ユーザデータを保護するSB ECCの例を示す。バッファ15にはユーザデータ618が蓄積されている。
内部状態確定要求に基づいて、ユーザデータ618はECCエンコーダ16で符号化されて、SB ECC751が生成される。そして、ユーザデータ618とSB ECC751とは、セーブブロック551に書き込まれる。これにより、ユーザデータ618は、不揮発化されると共に、SB ECC751で保護される。つまり、ユーザデータ618とSB ECC751とは、1つのECCフレームを構成する。
図14は、図13に後続して、バッファ15からセーブブロックに不揮発化される別のユーザデータと、この別のユーザデータを保護するSB ECCの例を示す。バッファ15には、ユーザデータ618とユーザデータ619とが蓄積されている。
内部状態確定要求に基づいて、まだ不揮発化されていないユーザデータ619はECCエンコーダ16で符号化されて、SB ECC752が生成される。そして、ユーザデータ619とSB ECC752とは、セーブブロック551に書き込まれる。これにより、ユーザデータ619は、不揮発化されると共に、SB ECC752で保護される。つまり、ユーザデータ619とSB ECC752とは、1つのECCフレームを構成する。
ここで、内部状態確定要求を受けた場合に、RAM6に格納されている中間ECCとバッファ15に蓄積されているユーザデータとが不揮発化される例を説明する。
図15は、セーブブロックに不揮発化されるユーザデータおよび中間ECCと、ユーザデータを保護するSB ECCの例を示す。第1書き込み先ブロック521にはユーザデータ621が格納されている。RAM6には、ユーザデータ621を保護する中間ECC712が格納されている。また、バッファ15にはユーザデータ622が蓄積されている。ユーザデータ622のサイズは、セーブブロックへの書き込み単位に達していない。
内部状態確定要求に基づいて、ユーザデータ622とパディング用のデータ622PとはECCエンコーダ16で符号化されて、SB ECC753が生成される。ユーザデータ622とパディング用のデータ622Pの総データサイズは、セーブブロックへの書き込み単位に相当する。
そして、ユーザデータ622、中間ECC712およびSB ECC753は、セーブブロック552に書き込まれる。これにより、ユーザデータ622は、不揮発化されると共に、SB ECC753で保護される。つまり、ユーザデータ622とSB ECC753とは、1つのECCフレームを構成する。また、中間ECC712が不揮発化される。これにより、不揮発化された中間ECC712で、ユーザデータ621を保護できる。
このように、内部状態確定要求を受けた場合、ユーザデータだけでなく、中間ECCとSB ECCもセーブブロックに書き込まれ得る。
メモリシステム3に対するワークロードには、内部状態確定要求が頻繁に発行されるものがある。例えば、クライアント向けのSSDに対するTera Byte Written(TBW)に基づく要求のワークロードでは、フラッシュコマンドが頻繁に発行されることがある。これは、例えば、Power Loss Protection(PLP)機能が無いクライアント向けのSSDでは、電力供給が遮断される不正電源断が発生した場合のデータ消失を防ぐために、フラッシュコマンドを用いたデータの不揮発化が必要であるためである。なお、TBWは、メモリシステム3の寿命の指標の1つである。また、PLP機能は、外部電源からメモリシステム3に供給される電力が遮断された場合に、蓄電装置から供給される電力を用いて、RAM6やバッファ15に格納され、且つ不揮発性メモリ5には書き込まれていないユーザデータ等を、不揮発性メモリ5に書き込むための機能である。
内部状態確定要求に基づいて、セーブブロックへのデータ書き込みが頻繁に発生した場合、中間ECCの書き込み量とSB ECCの書き込み量が増加する。あるワークロードでは、セーブブロックへのデータ書き込み量が、書き込み先ブロックへのデータ書き込み量の数倍(例えば、3.5倍)になることもある。そして、セーブブロックへのデータ書き込み量の多くが、中間ECCとSB ECCの書き込み量で占められている。したがって、内部状態確定要求が頻繁に発行されるワークロードでは、セーブブロックへのデータ書き込み量が増大し、顧客の書き込み寿命要求を満たすことが難しくなる。
そのため、本実施形態のメモリシステム3では、セーブブロックへのデータ書き込み量を削減するために、(A)セーブブロックへの中間ECCの書き込み量を削減し、且つ(B)セーブブロックへのパディング用のデータおよびSB ECCの書き込み量を削減する。
(セーブブロックへの中間ECCの書き込み量の削減)
まず、(A)セーブブロックへの中間ECCの書き込み量を削減する方法について説明する。コントローラ4は、内部状態確定要求に基づいて、RAM6に格納されている中間ECCよりもサイズが小さい中間ECCを生成する。以下では、RAM6に格納されている中間ECCを、第1中間ECCとも称する。内部状態確定要求に基づいて生成する、第1中間ECCよりもサイズが小さい中間ECCを、第2中間ECCとも称する。第1中間ECCのサイズを、第1サイズとも称する。また、第2中間ECCのサイズを、第2サイズとも称する。
まず、(A)セーブブロックへの中間ECCの書き込み量を削減する方法について説明する。コントローラ4は、内部状態確定要求に基づいて、RAM6に格納されている中間ECCよりもサイズが小さい中間ECCを生成する。以下では、RAM6に格納されている中間ECCを、第1中間ECCとも称する。内部状態確定要求に基づいて生成する、第1中間ECCよりもサイズが小さい中間ECCを、第2中間ECCとも称する。第1中間ECCのサイズを、第1サイズとも称する。また、第2中間ECCのサイズを、第2サイズとも称する。
コントローラ4は、第1中間ECCよりも高い符号化率(コードレート)でユーザデータを符号化して、第2中間ECCを生成する。これにより、コントローラ4は、第1中間ECCよりもサイズが小さい第2中間ECCを生成する。符号化率は、符号化対象のデータと符号化により得られるECCの総データサイズに対する、符号化対象のデータの割合を示す。コントローラ4は、第2中間ECCをセーブブロックに書き込む(すなわち不揮発化する)。つまり、コントローラ4は、内部状態確定要求を受けた場合に、第1中間ECCをセーブブロックに書き込まず、第2中間ECCをセーブブロックに書き込む。これにより、コントローラ4は、セーブブロックへの中間ECCの書き込み量を削減できる。
図16は、実施形態に係るメモリシステム3において、RAM6に格納されている第1中間ECCと、セーブブロックに不揮発化される第2中間ECCの例を示す。第1書き込み先ブロック521にはユーザデータ621が格納されている。RAM6には、ユーザデータ621を保護する第1中間ECC712が格納されている。
コントローラ4は、内部状態確定要求に基づいて、ユーザデータ621をECCエンコーダ16で符号化して、第2中間ECC713を生成する。ここで、ECCエンコーダ16がユーザデータ621を符号化して第1中間ECC712を生成した場合の符号化率を、第1符号化率とする。また、ECCエンコーダ16がユーザデータ621を符号化して第2中間ECC713を生成した場合の符号化率を、第2符号化率とする。第2符号化率は第1符号化率よりも高い。したがって、第2中間ECC713のサイズは、第1中間ECC712のサイズよりも小さい。
コントローラ4は、生成した第2中間ECC713をセーブブロック552に書き込む。これにより、第1中間ECC713をセーブブロック552に書き込む場合と比較して、セーブブロック552への中間ECCの書き込み量を削減できる。
図17および図18を参照して、符号化率を変更して生成される中間ECCについて説明する。ここでは、k個のブロックに書き込まれるユーザデータ81に対して中間ECCを生成する場合について例示する。kは1以上の整数である。
図17は、実施形態に係るメモリシステム3において、ユーザデータ81を第1符号化率で符号化して生成される第1中間ECC821の例を示す。ユーザデータ81を第1符号化率で符号化する場合、例えば、1つのブロックに書き込まれる第1データ単位のユーザデータに、1つのシンボルが割り当てられる。第1データ単位は、例えば、ページ単位である。1つのシンボルは、ユーザデータを保護する単位として機能する。より詳しくは、1つのシンボルは、符号化およびエラー訂正の単位として機能する。1つのシンボルは、第1データ単位のサイズを有する。以下では、第1データ単位のサイズを、第3サイズとも称する。
ここでは、1つのシンボルに発生したランダムエラーの訂正に、2つの第3サイズのシンボルに相当するECCが必要である場合について例示する。この場合、ユーザデータ81に対して、例えば、2つの第3サイズのシンボル851,852を含む第1中間ECC821が生成される。よって、第1中間ECC821のサイズ(第1サイズ)は、第3サイズの2倍である。
2つの第3サイズのシンボル851,852を含む第1中間ECC821は、2つの第3サイズのシンボルの消失を救済可能である。したがって、第1中間ECC821は、2ブロックの消失の救済が可能であると云える。
なお、同時に消失するブロックの数は、データ書き込みの並列度によって変動し得る。より詳しくは、データが並列に書き込まれた複数のブロックで、同時に消失が発生する可能性がある。そのため、コントローラ4は、第1中間ECC821による2ブロック消失の救済能力に基づいて、データを並列に書き込むブロック数(プレーン数)を2つまでに制限するようにしてもよい。例えば、コントローラ4は、ユーザデータ81の内、2つの第3サイズのシンボルに相当するサイズのデータ部を、2つのブロックに並列に書き込むように構成される。これにより、書き込まれたユーザデータ81において、第1中間ECC821の救済能力を超えたエラーが発生する可能性を抑制できる。
また、第1中間ECC821は、α個の第3サイズのシンボルを含んでいてもよい。1つのシンボルに発生したランダムエラーの訂正に、2つの第3サイズのシンボルに相当するECCが必要である場合、αは2以上の整数である。この場合、コントローラ4は、α個の第3サイズのシンボルに対応するブロック消失の救済能力に基づいて、データを並列に書き込むブロック数を制限するようにしてもよい。例えば、コントローラ4は、ユーザデータ81の内、α個の第3サイズのシンボルに相当するサイズのデータ部を、α個のブロックに並列に書き込むように構成される。
図18は、実施形態に係るメモリシステム3において、ユーザデータ81を第2符号化率で符号化して生成される第2中間ECC822の例を示す。ユーザデータ81を第2符号化率で符号化する場合、例えば、1つのブロックに書き込まれる第1データ単位のユーザデータに、2つのシンボルが割り当てられる。つまり、第1データ単位の半分のサイズのユーザデータに、1つのシンボルが割り当てられる。よって、1つのシンボルは、第1データ単位の半分のサイズを有する。以下では、第1データ単位の半分のサイズを、第4サイズとも称する。
ここでは、1つのシンボルに発生したランダムエラーの訂正に、2つの第4サイズのシンボルに相当するECCが必要である場合について例示する。この場合、ユーザデータ81に対して、例えば、2つの第4サイズのシンボル861,862を含む第2中間ECC822が生成される。第2中間ECC822のサイズ(第2サイズ)は、第4サイズの2倍(=第3サイズ)である。よって、第2中間ECC822のサイズは、図17に示した第1中間ECC821のサイズ(第1サイズ)よりも小さい。
2つの第4サイズのシンボル861,862を含む第2中間ECC822は、2つの第4サイズのシンボルの消失を救済可能である。したがって、第2中間ECC822は、1ブロックの消失の救済が可能であると云える。
なお、コントローラ4は、第2中間ECC822による1ブロック消失の救済能力に基づいて、データを並列に書き込むブロック数を1つまでに制限するようにしてもよい。例えば、コントローラ4は、ユーザデータ81の内、2つの第4サイズのシンボルに相当するサイズのデータ部を、1つのブロックに書き込むように構成される。これにより、書き込まれたユーザデータ81において、第2中間ECC822の救済能力を超えたエラーが発生する可能性を抑制できる。第2中間ECC822の救済能力は、第1中間ECC821の救済能力よりも低い。しかし、第2中間ECC822の救済能力に基づいて、データを並列に書き込むブロック数を制限することによって、救済能力の低下による影響が生じないようにすることができる。すなわち、小さいサイズの第2中間ECC822でも、エラーに対処することができる。
また、第2中間ECC822は、β個の第4サイズのシンボルを含んでいてもよい。1つのシンボルに発生したランダムエラーの訂正に、2つの第4サイズのシンボルに相当するECCが必要である場合、βは2以上の整数である。この場合、コントローラ4は、β個の第4サイズのシンボルに対応するブロック消失の救済能力に基づいて、データを並列に書き込むブロック数を制限するようにしてもよい。例えば、コントローラ4は、ユーザデータ81の内、β個の第4サイズのシンボルに相当するサイズのデータ部を、β/2個のブロックに並列に書き込むように構成される。
ここで、図17および図18に示した例における符号化率について説明する。
ユーザデータ81に対して第1中間ECC821を生成した場合の第1符号化率は次式で表される。
第1符号化率=ユーザデータのサイズ/(ユーザデータのサイズ+第1中間ECCのサイズ)
第1符号化率=ユーザデータのサイズ/(ユーザデータのサイズ+第1中間ECCのサイズ)
また、ユーザデータ81に対して第2中間ECC822を生成した場合の第2符号化率は次式で表される。
第2符号化率=ユーザデータのサイズ/(ユーザデータのサイズ+第2中間ECCのサイズ)
第2符号化率=ユーザデータのサイズ/(ユーザデータのサイズ+第2中間ECCのサイズ)
第1中間ECC821のサイズ(第1サイズ)は、第2中間ECC822のサイズ(第2サイズ)の2倍である。よって、第2符号化率は第1符号化率よりも高い。したがって、図18に示した符号化の例では、1つのシンボルに割り当てられるデータのサイズを小さくすることによって、図17に示した符号化の例よりも符号化率を向上できる。したがて、第2中間ECC822をセーブブロックに書き込む場合、第1中間ECC821をセーブブロックに書き込む場合と比較して、不揮発性メモリ5に格納されているデータの内のECCの比率を低下させることができる。
(セーブブロックへのパディング用のデータおよびSB ECCの書き込み量の削減)
次いで、(B)セーブブロックへのパディング用のデータおよびSB ECCの書き込み量を削減する方法について説明する。コントローラ4および不揮発性メモリ5は、データを、第2データ単位よりも小さい第3データ単位でブロックに書き込む(より詳しくは、プログラムする)機能を備えている。第2データ単位は、例えば、ページ単位である。第3データ単位は、例えば、クラスタ単位である。クラスタ単位のデータを不揮発性メモリ5に書き込む機能を、Partial Page Program機能とも称する。なお、ページ単位のデータを不揮発性メモリ5に書き込む機能を、Single Page Program機能とも称する。
次いで、(B)セーブブロックへのパディング用のデータおよびSB ECCの書き込み量を削減する方法について説明する。コントローラ4および不揮発性メモリ5は、データを、第2データ単位よりも小さい第3データ単位でブロックに書き込む(より詳しくは、プログラムする)機能を備えている。第2データ単位は、例えば、ページ単位である。第3データ単位は、例えば、クラスタ単位である。クラスタ単位のデータを不揮発性メモリ5に書き込む機能を、Partial Page Program機能とも称する。なお、ページ単位のデータを不揮発性メモリ5に書き込む機能を、Single Page Program機能とも称する。
コントローラ4は、内部状態確定要求に基づいて、バッファ15に蓄積されているユーザデータを、第2データ単位よりも小さい第3データ単位でセーブブロックに書き込む。ユーザデータを第3データ単位でセーブブロックに書き込むことにより、ユーザデータを第2データ単位でセーブブロックに書き込む場合と比較して、セーブブロックに書き込まれるパディング用のデータの量を削減できる。
また、コントローラ4は、ユーザデータを第3データ単位で保護するように、ユーザデータに対するSB ECCを生成する。そして、コントローラ4は、生成したSB ECCを第3データ単位でセーブブロックに書き込む。ユーザデータを第3データ単位で保護するSB ECCを生成することにより、同一の救済能力を有して、ユーザデータを第2データ単位で保護するSB ECCを生成する場合と比較して、セーブブロックへのSB ECCの書き込み量を削減できる。
ここで、Single Page Program機能とPartial Page Program機能とについて、例を挙げて説明する。
図19は、実施形態に係るメモリシステム3において、(A)Single Page Program機能によりページ単位で書き込まれるデータの例と、(B)Partial Page Program機能によりクラスタ単位で書き込まれるデータの例とを示す図である。ここでは、ページ単位(第2データ単位)が16KiBであって、クラスタ単位(第3データ単位)が4KiBであることを想定する。
図19(A)に示すように、消去済み(erased)である16KiBのページ91に対して、Single Page Program機能によりデータを書き込む場合、16KiBのページ91に16KiBのデータ91Dが一度のプログラム動作で書き込まれる(programmed)。このように、Single Page Program機能を用いる場合、16KiBのページ91に対して、16KiB単位でデータを書き込むことができる。
これに対して、図19(B)に示すように、消去済みである16KiBのページ92に対して、Partial Page Program機能によりデータを書き込む場合、16KiBのページ92に、4個の4KiBのデータが4回のプログラム動作で順に書き込まれる。具体的には、例えば、ページ92に対する1回目のプログラム動作により、ページ92内の先頭の4KiBの領域に、4KiBのデータ921Dが書き込まれる。ページ92に対する2回目のプログラム動作により、ページ92内の後続する4KiBの領域に、4KiBのデータ922Dが書き込まれる。ページ92に対する3回目のプログラム動作により、ページ92内の後続する4KiBの領域に、4KiBのデータ923Dが書き込まれる。そして、ページ92に対する4回目のプログラム動作により、ページ92内の後続する4KiBの領域(すなわち、終端の4KiBの領域)に、4KiBのデータ924Dが書き込まれる。このように、Partial Page Program機能を用いる場合、16KiBのページ92に対して、4KiB単位でデータを書き込むことができる。なお、Partial Page Programと、それに後続するPartial Page Programとの間には、他のアクセス(他のページへのリード動作、他のブロックへのプログラム動作やイレーズ動作)を実行することもできる。
図20は、実施形態に係るメモリシステム3における、Partial Page Program機能を用いた、1つのページに対する書き込み動作のシーケンスの例を示す図である。以下では、書き込み動作を行う対象の1つのページを、対象ページとも称する。対象ページは、消去済みのページである。また、対象ページを備える不揮発性メモリチップを、対象メモリチップとも称する。
まず、メモリI/F13は、対象ページに対する1回目のプログラム動作を行うために、SLC書き込み指示コマンド“A2h”、シリアル入力コマンド“80h”、クラスタアドレス“CA1”,“CA2”,“RA1”,“RA2”,“RA3”、書き込むべき4KiBのデータ、およびプログラム開始コマンド“10h”を、対象メモリチップに送出する。クラスタアドレスは、プログラム動作が実行されるべき対象ページ内のクラスタを指定するアドレスである。そして、メモリI/F13は、対象メモリチップがビジー状態に維持されている間、1回目のプログラム動作の完了を待つ。つまり、対象メモリチップがビジー状態に維持されている間に、1回目のプログラム動作が実行される。
図20に示すタイミングAは、対象ページに対する1回目のプログラム動作による対象メモリチップのビジー状態が終了した後のタイミング(すなわち、対象メモリチップがレディ状態に遷移した後のタイミング)を示す。タイミングAの後、メモリI/F13は、対象ページに対する2回目のプログラム動作を行うために、SLC書き込み指示コマンド“A2h”、シリアル入力コマンド“80h”、クラスタアドレス“CA1”,“CA2”,“RA1”,“RA2”,“RA3”、書き込むべき4KiBのデータ、およびプログラム開始コマンド“10h”を、対象メモリチップに送出する。そして、メモリI/F13は、対象メモリチップがビジー状態に維持されている間、2回目のプログラム動作の完了を待つ。つまり、対象メモリチップがビジー状態に維持されている間に、2回目のプログラム動作が実行される。
タイミングBは、対象ページに対する2回目のプログラム動作による対象メモリチップのビジー状態が終了した後のタイミングを示す。タイミングBの後、メモリI/F13は、対象ページに対する3回目のプログラム動作を行うために、SLC書き込み指示コマンド“A2h”、シリアル入力コマンド“80h”、クラスタアドレス“CA1”,“CA2”,“RA1”,“RA2”,“RA3”、書き込むべき4KiBのデータ、およびプログラム開始コマンド“10h”を、対象メモリチップに送出する。そして、メモリI/F13は、対象メモリチップがビジー状態に維持されている間、3回目のプログラム動作の完了を待つ。つまり、対象メモリチップがビジー状態に維持されている間に、3回目のプログラム動作が実行される。
タイミングCは、対象ページに対する3回目のプログラム動作による対象メモリチップのビジー状態が終了した後のタイミングを示す。タイミングCの後、メモリI/F13は、対象ページに対する4回目のプログラム動作を行うために、SLC書き込み指示コマンド“A2h”、シリアル入力コマンド“80h”、クラスタアドレス“CA1”,“CA2”,“RA1”,“RA2”,“RA3”、書き込むべき4KiBのデータ、およびプログラム開始コマンド“10h”を、対象メモリチップに送出する。そして、メモリI/F13は、対象メモリチップがビジー状態に維持されている間、4回目のプログラム動作の完了を待つ。つまり、対象メモリチップがビジー状態に維持されている間に、4回目のプログラム動作が実行される。
以上の図20に示すシーケンスの実行により、Partial Page Program機能を用いた、対象ページに対する4回のプログラム動作が行われるので、4個の4KiBのデータ(4個のクラスタ単位のデータ)を対象ページに書き込むことができる。なお、図20では図示を省略しているが、前述の通り、Partial Page Programとそれに後続するPartial Page Programとの間(すなわち、タイミングA,B,C)には、他のアクセスを実行してもよい。
図21および図22を参照して、(1)ユーザデータの書き込みおよび保護を第2データ単位で行う場合と、(2)ユーザデータの書き込みおよび保護を第3データ単位で行う場合とについて、それぞれ説明する。ここでは、2つの場合のいずれでも、SB ECCが2ブロック消失の救済能力を有することを想定する。
(ユーザデータの書き込みおよび保護を第2データ単位で行う場合)
図21は、セーブブロックに第2データ単位で書き込まれるユーザデータ、およびユーザデータを第2データ単位で保護するSB ECCの例を示す。図21に示す例において、1つのブロックに一度の書き込み動作で書き込まれるデータの単位は、第2データ単位である。バッファ15には、ユーザデータ631,632,633が蓄積されている。ユーザデータ631,632,633の総データサイズは、第2データ単位に達していない。ユーザデータ631,632,633それぞれのサイズは、第3データ単位に相当する。3つのセーブブロック561,562,563は、不揮発性メモリ5内のブロックである。
図21は、セーブブロックに第2データ単位で書き込まれるユーザデータ、およびユーザデータを第2データ単位で保護するSB ECCの例を示す。図21に示す例において、1つのブロックに一度の書き込み動作で書き込まれるデータの単位は、第2データ単位である。バッファ15には、ユーザデータ631,632,633が蓄積されている。ユーザデータ631,632,633の総データサイズは、第2データ単位に達していない。ユーザデータ631,632,633それぞれのサイズは、第3データ単位に相当する。3つのセーブブロック561,562,563は、不揮発性メモリ5内のブロックである。
内部状態確定要求に基づいて、ユーザデータ631,632,633とパディング用のデータ63PとはECCエンコーダ16で符号化されて、SB ECC761,762が生成される。ユーザデータ631,632,633およびパディング用のデータ63Pの総データサイズは、第2データ単位に相当する。SB ECC761,762は、データを第2データ単位で保護し、2ブロック消失の救済能力を有する。そのため、SB ECC761,762は、第2データ単位の2倍のサイズを有する。
そして、ユーザデータ631,632,633、パディング用のデータ63P、およびSB ECC761,762は、第2データ単位で、複数のセーブブロック561,562,563それぞれに順に書き込まれる。具体的には、ユーザデータ631,632,633とパディング用のデータ63Pとは、セーブブロック561に書き込まれる。SB ECC761は、セーブブロック532に書き込まれる。そして、SB ECC762は、セーブブロック533に書き込まれる。
これにより、ユーザデータ631,632,633とパディング用のデータ63Pとは、不揮発化されると共に、SB ECC761,762で保護される。つまり、ユーザデータ631,632,633、パディング用のデータ63P、およびSB ECC761,762は、1つのECCフレームを構成する。
(ユーザデータの書き込みおよび保護を第3データ単位で行う場合)
図22は、実施形態に係るメモリシステム3において、セーブブロックに第3データ単位で書き込まれるユーザデータ、およびユーザデータを第3データ単位で保護するSB ECCの例を示す。図22に示す例において、1つのブロックに一度の書き込み動作で書き込まれるデータの単位は、第3データ単位である。バッファ15には、ユーザデータ631,632,633が蓄積されている。ユーザデータ631,632,633それぞれのサイズは、第3データ単位に相当する。5つのセーブブロック561,562,563,564,565は、不揮発性メモリ5内のブロックである。
図22は、実施形態に係るメモリシステム3において、セーブブロックに第3データ単位で書き込まれるユーザデータ、およびユーザデータを第3データ単位で保護するSB ECCの例を示す。図22に示す例において、1つのブロックに一度の書き込み動作で書き込まれるデータの単位は、第3データ単位である。バッファ15には、ユーザデータ631,632,633が蓄積されている。ユーザデータ631,632,633それぞれのサイズは、第3データ単位に相当する。5つのセーブブロック561,562,563,564,565は、不揮発性メモリ5内のブロックである。
コントローラ4は、内部状態確定要求に基づいて、ユーザデータ631,632,633をECCエンコーダ16で符号化して、SB ECC771,772を生成する。SB ECC761,762は、データを第3データ単位で保護し、2ブロック消失の救済能力を有する。そのため、SB ECC771,772は、第3データ単位の2倍のサイズを有する。
そして、コントローラ4は、ユーザデータ631,632,633とSB ECC771,772とを、第3データ単位で、5つのセーブブロック561,562,563,564,565それぞれに順に書き込む。具体的には、コントローラ4は、ユーザデータ631をセーブブロック561に書き込む。コントローラ4は、ユーザデータ632をセーブブロック562に書き込む。コントローラ4は、ユーザデータ633をセーブブロック563に書き込む。コントローラ4は、SB ECC771をセーブブロック564に書き込む。そして、コントローラ4は、SB ECC772をセーブブロック565に書き込む。
これにより、コントローラ4は、ユーザデータ631,632,633を、不揮発化すると共に、SB ECC771,772で保護する。つまり、ユーザデータ631,632,633およびSB ECC771,772は、1つのECCフレームを構成する。
このように、本実施形態のメモリシステム3において、コントローラ4は、内部状態確定要求に基づいて、バッファ15に蓄積されているユーザデータ631,632,633それぞれを、第2データ単位よりも小さい第3データ単位で、セーブブロック561,562,563それぞれに書き込む。コントローラ4は、ユーザデータを第3データ単位でセーブブロックに書き込むことにより、ユーザデータを第2データ単位でセーブブロックに書き込む場合と比較して、セーブブロックに書き込まれるパディング用のデータの量を削減し得る。
また、コントローラ4は、ユーザデータ631,632,633を第3データ単位で保護するように、ユーザデータ631,632,633に対するSB ECC771,772を生成する。そして、コントローラ4は、生成したSB ECC771,772を、第3データ単位でセーブブロック564,565に書き込む。ユーザデータを第3データ単位で保護するSB ECCを生成することにより、同一の救済能力を有して、ユーザデータを第2データ単位で保護するSB ECCを生成する場合と比較して、セーブブロックへのSB ECCの書き込み量を削減できる。したがって、ユーザデータを第3データ単位で保護するSB ECCをセーブブロックに書き込む場合、ユーザデータを第2データ単位で保護するSB ECCをセーブブロックに書き込む場合と比較して、不揮発性メモリ5に格納されているデータの内のECCの比率を低下させることができる。
ここで、第2データ単位が16KiBであって、第3データ単位が4KiBである場合について例示する。この場合、図21に示したSB ECC761,762の総データサイズは、32KiBである。これに対して、図22に示したSB ECC771,772の総データサイズは、8KiBである。したがって、ユーザデータ631,632,633の保護単位を16KiBから4KiBに変更することによって、ユーザデータ631,632,633を保護するためにセーブブロックに書き込まれるSB ECCのサイズを最大で1/4に削減できる。
次いで、図23から図25を参照して、メモリシステム3において行われる幾つかの動作例を説明する。
図23は、実施形態に係るメモリシステム3において行われるライト動作の例を示す。ライト動作は、バッファ15に蓄積されている未書き込みのユーザデータを書き込み先ブロックに書き込むための動作である。バッファ15には、例えば、ライトコマンドを受け付けたことに伴ってホスト2から受信した書き込み対象のユーザデータが蓄積される。なお、バッファ15には、GCソースブロックからコピーされた有効データが蓄積されてもよい。
ライト制御部122は、不揮発性メモリ5に書き込むべきユーザデータを、バッファ15からECCエンコーダ16に転送する(図23中の(1))。
ECCエンコーダ16はユーザデータを符号化して、ユーザデータと共にECCフレームを構成するECCを生成する。ECCエンコーダ16は、第1保護単位のユーザデータ部を保護するための中間ECC、または第2保護単位のユーザデータを保護するための最終ECCを生成する。第2保護単位のユーザデータがd個の書き込み先ブロックに書き込まれる場合、第2保護単位のユーザデータは、d-1個の第1保護単位のユーザデータ部を含む。
より詳しくは、ECCエンコーダ16は第1保護単位のユーザデータ部を符号化して、第1中間ECCを生成する。第1保護単位のユーザデータ部と第1中間ECCとは、第1フレームサイズのECCフレームを構成する。ECCエンコーダ16は、第1保護単位のユーザデータ部をメモリI/F13に転送する(図23中の(2))。また、ECCエンコーダ16は、生成した第1中間ECCをRAM I/F14に転送する(図23中の(3))。
メモリI/F13は、ECCエンコーダ16によって転送された第1保護単位のユーザデータ部を不揮発性メモリ5に書き込む(図23中の(4))。より詳しくは、メモリI/F13は、第1保護単位のユーザデータ部をd個の書き込み先ブロックの1つに書き込む。
RAM I/F14は、第1中間ECCをRAM6に格納する(図23中の(5))。これにより、第1保護単位のユーザデータ部が、対応する第1中間ECCで保護される。
ライト制御部122は、書き込まれた第1保護単位のユーザデータ部の物理アドレスと論理アドレスのマッピングを示すように、論理物理アドレス変換テーブル31を更新する。また、ライト制御部122は、書き込まれた第1保護単位のユーザデータ部の物理アドレスと、RAM6に格納された第1中間ECCの物理アドレスとの対応を示すように、データアドレス-中間ECCアドレス対応テーブル32を更新する。
また、d-1個の第1フレームサイズのECCフレームにそれぞれ含まれるd-1個の第1保護単位のユーザデータ部を不揮発性メモリ5に書き込んだ場合、ECCエンコーダ16は、それらd-1個の第1保護単位のユーザデータ部と、不揮発性メモリ5に書き込むべき別の第2ユーザデータ部とを符号化して、最終ECCを生成する。d-1個の第1保護単位のユーザデータ部と、第2ユーザデータ部と、最終ECCとは、第2フレームサイズのECCフレームを構成する。第2フレームサイズは第1フレームサイズよりも大きい。また、d-1個の第1保護単位のユーザデータ部と第2ユーザデータ部とを合わせたデータは、第2保護単位のユーザデータである。ECCエンコーダ16は、第2ユーザデータ部と生成した最終ECCとをメモリI/F13に転送する(図23中の(6))。
メモリI/F13は、ECCエンコーダ16によって転送された第2ユーザデータ部と最終ECCとを、不揮発性メモリ5に書き込む(図23中の(7))。より詳しくは、メモリI/F13は、第2ユーザデータ部と最終ECCとを、d個の書き込み先ブロックの内の最後の書き込み先ブロックに書き込む。これにより、第2保護単位のユーザデータが、すなわちd-1個の第1保護単位のユーザデータ部と第2ユーザデータ部とが、対応する最終ECCで保護される。
第2ユーザデータ部と最終ECCとを不揮発性メモリ5に書き込んだ後、ライト制御部122は、書き込まれた第2ユーザデータ部の物理アドレスと論理アドレスのマッピングを示すように、論理物理アドレス変換テーブル31を更新する。また、ライト制御部122は、d-1個の第1フレームサイズのECCフレームにそれぞれ含まれるd-1個の中間ECCを無効化する。具体的には、ライト制御部122は、例えば、第2フレームサイズのECCフレームを構成する、d-1個の第1保護単位のユーザデータ部それぞれの物理アドレスを特定する。ライト制御部122は、特定したユーザデータ部の物理アドレスが、いずれの中間ECCの物理アドレスにも関連付けられないように、データアドレス-中間ECCアドレス対応テーブル32を更新する。これにより、d-1個の第1保護単位のユーザデータ部にそれぞれ対応するd-1個の中間ECCが無効化される。
以上の図23に示したライト動作により、コントローラ4は、第1保護単位のユーザデータ部を第1中間ECCで保護できる。また、コントローラ4は、第2保護単位のユーザデータを最終ECCで保護できる。
なお、図23中の(4)の動作において、第1保護単位のユーザデータ部の少なくとも一部の不揮発性メモリ5への書き込み(より詳しくはプログラム)が失敗した場合、誤り訂正処理部124は、この第1保護単位のユーザデータ部と共に第1フレームサイズのECCフレームを構成する第1中間ECCを用いて、第1保護単位のユーザデータ部に対してエラー訂正処理を行う。このエラー訂正処理には、消失訂正(erasure correction)が用いられ得る。つまり、誤り訂正処理部124は、書き込みが失敗した第1保護単位のユーザデータ部を、第1中間ECCを用いて復元する。これにより、ライト制御部122は、復元された第1保護単位のユーザデータ部を用いて、書き込み先ブロックへの書き込みを再度行うことができる。
図24は、実施形態に係るメモリシステム3において行われる第1不揮発化動作例を示す。第1不揮発化動作は、内部状態確定要求に基づいて中間ECCを不揮発化するための動作である。ここでは、書き込み先ブロックに格納されている第1保護単位のユーザデータ部を保護するための第1中間ECCがRAM6に格納されていることを想定する。
不揮発化処理部123は、内部状態確定要求を受け付けた場合、第1中間ECCに対応するユーザデータに対するリードベリファイを行う。リードベリファイは、不揮発性メモリ5に格納されているデータの完全性を検証するための動作である。具体的には、不揮発化処理部123は、第1中間ECCに対応するユーザデータを不揮発性メモリ5(より詳しくは書き込み先ブロック)から読み出す(図24中の(1))。不揮発化処理部123は、ページ内ECCを用いて、読み出したユーザデータの誤り訂正を行う。誤り訂正が成功した場合、不揮発化処理部123は、ユーザデータの完全性が確認されたと判断する。誤り訂正が失敗した場合、不揮発化処理部123は、ユーザデータの完全性が確認されなかったと判断する。
リードベリファイにおいてユーザデータの完全性が確認された場合、不揮発化処理部123は、リードベリファイで得られたユーザデータをECCエンコーダ16に転送する(図24中の(2))。
リードベリファイにおいてユーザデータの完全性が確認されなかった場合、不揮発化処理部123は、リードベリファイで得られたユーザデータを誤り訂正処理部124に送出する(図24中の(3))。誤り訂正処理部124は、RAM I/F14を介してRAM6から第1中間ECCを取得する(図24中の(4))。誤り訂正処理部124は、取得した第1中間ECCを用いて、リードベリファイで得られたユーザデータに対するエラー訂正処理を行う。つまり、誤り訂正処理部124は、完全性が確認されなかったユーザデータを、第1中間ECCを用いて復元する。誤り訂正処理部124は、エラー訂正されたユーザデータ(すなわち、第1中間ECCに対応するユーザデータ)を不揮発化処理部123に送出する(図24中の(5))。そして、不揮発化処理部123は、エラー訂正されたユーザデータをECCエンコーダ16に転送する(図24中の(6))。
ECCエンコーダ16は、第1中間ECCに対応するユーザデータを符号化して、第2中間ECCを生成する。第2中間ECCのデータサイズは、第1中間ECCのデータサイズよりも小さい。つまり、ユーザデータに対して第2中間ECCを生成する場合の符号化率は、ユーザデータに対して第1中間ECCを生成する場合の符号化率よりも高い。ECCエンコーダ16は、生成した第2中間ECCをメモリI/F13に転送する(図24中の(7))。
メモリI/F13は、ECCエンコーダ16によって転送された第2中間ECCを、不揮発性メモリ5に書き込む(図24中の(8))。より詳しくは、メモリI/F13は、第2中間ECCをセーブブロックに書き込む。
不揮発化処理部123は、不揮発性メモリ5に格納されているユーザデータの物理アドレスと、不揮発性メモリ5に書き込まれた第2中間ECCの物理アドレスとの対応を示すように、データアドレス-中間ECCアドレス対応テーブル32を更新する。
以上の第1不揮発化動作により、コントローラ4は、第1保護単位のユーザデータ部を、不揮発化された第2中間ECCで保護できる。
図25は、実施形態に係るメモリシステム3において行われる第2不揮発化動作例を示す。第2不揮発化動作は、内部状態確定要求に基づいて、バッファ15に蓄積されている未書き込みのユーザデータと、対応するSB ECCとを不揮発化するための動作である。ここでは、ユーザデータの書き込みおよび保護を行う第3データ単位が、クラスタ単位である場合について例示する。
不揮発化処理部123は、内部状態確定要求を受け付けた場合、バッファ15に蓄積されている未書き込みのユーザデータを分割して、b個のクラスタ単位のユーザデータを取得する。bは1以上の整数である。なお、不揮発化処理部123は、未書き込みのユーザデータを分割して、クラスタ単位に満たないユーザデータを取得した場合、取得したユーザデータにパディング用のデータを加えることによって、クラスタ単位のユーザデータを取得する。不揮発化処理部123は、取得したb個のクラスタ単位のユーザデータを、ECCエンコーダ16に送出する(図25中の(1))。
ECCエンコーダ16は、クラスタを保護単位として、b個のクラスタ単位のユーザデータを符号化して、c個のクラスタ単位のSB ECCを生成する。cは、SB ECCによって消失が救済されるブロックの数(例えば、2)に対応する。ECCエンコーダ16は、b個のクラスタ単位のユーザデータそれぞれをメモリI/F13に転送する(図25中の(2))。また、ECCエンコーダ16は、c個のクラスタ単位のSB ECCそれぞれをメモリI/F13に転送する(図25中の(3))。
メモリI/F13は、ECCエンコーダ16によって転送されたクラスタ単位のユーザデータを、不揮発性メモリ5に書き込む(図25中の(4))。より詳しくは、メモリI/F13は、b個のクラスタ単位のユーザデータそれぞれを、b個のセーブブロックそれぞれに順に書き込む。また、メモリI/F13は、ECCエンコーダ16によって転送されたクラスタ単位のSB ECCを、不揮発性メモリ5に書き込む(図25中の(5))。より詳しくは、メモリI/F13は、c個のクラスタ単位のSB ECCそれぞれを、c個のセーブブロックそれぞれに順に書き込む。なお、c個のセーブブロックは、b個のセーブブロックとは異なるブロックである。
次いで、不揮発化処理部123は、書き込まれたb個のクラスタ単位のユーザデータそれぞれの物理アドレスと論理アドレスのマッピングを示すように、論理物理アドレス変換テーブル31を更新する。また、不揮発化処理部123は、書き込まれたb個のクラスタ単位のユーザデータの物理アドレスと、書き込まれたc個のクラスタ単位のSB ECCの物理アドレスとの対応を示すように、データアドレス-SB ECCアドレス対応テーブル32を更新する。
以上の第2不揮発化動作により、コントローラ4は、b個のクラスタ単位のユーザデータを不揮発化できる。また、b個のクラスタ単位のユーザデータを、不揮発化されたc個のクラスタ単位のSB ECCで保護できる。
次いで、図26から図32のフローチャートを参照して、メモリシステム3において実行される処理の手順の例を説明する。
図26は、実施形態に係るメモリシステム3において、コントローラ4内のライト制御部122によって実行されるライト処理の手順の例を示すフローチャートである。ここでは、ライト制御部122がd個の書き込み先ブロックそれぞれに、書き込み単位に相当するサイズのデータを順に書き込む場合を例示する。つまり、d個の書き込み単位のデータが最終ECCで保護される単位として機能する。dは2以上の整数である。なお、ホスト2からライトコマンドを受信したことに応じて行われるライト処理を例示するが、メモリシステム3の内部動作(例えば、GC動作、リフレッシュ動作、ウェアレベリング動作)においても同様のライト処理が行われ得る。
まず、ライト制御部122は変数iに0を設定する(S101)。
次いで、ライト制御部122は、書き込み先ブロックに未書き込みで、書き込み単位のユーザデータがバッファ15に蓄積されているか否かを判定する(S102)。
書き込み先ブロックに未書き込みで、書き込み単位のユーザデータがバッファ15に蓄積されていない場合(S102NO)、ライト制御部122はS102の手順に戻る。
書き込み先ブロックに未書き込みで、書き込み単位のユーザデータがバッファ15に蓄積されている場合(S102YES)、ライト制御部122は、書き込み単位のユーザデータをECCエンコーダ16で符号化して、第1中間ECCを生成する(S103)。生成した第1中間ECCは、書き込み単位のユーザデータと共に、第1フレームサイズのECCフレームを構成する。ライト制御部122は、生成した第1中間ECCをRAM6に格納する(S104)。ライト制御部122は、書き込み単位のユーザデータを第i書き込み先ブロックに書き込む(S105)。
次いで、第i書き込み先ブロックに書き込んだユーザデータの物理アドレスと論理アドレスのマッピングを示すように、論理物理アドレス変換テーブル31を更新する(S106)。ライト制御部122は、第i書き込み先ブロックに書き込んだユーザデータの物理アドレスと、RAM6に格納した第1中間ECCの物理アドレスとの対応を示すように、データアドレス-中間ECCアドレス対応テーブル32を更新する(S107)。
次いで、ライト制御部122は、変数iに1を加える(S108)。ライト制御部122は、変数iがd-1と等しいか否かを判定する(S109)。変数iは、ライト処理で書き込んだ書き込み単位のユーザデータの数を示している。したがって、ライト制御部122は、S109において、次に書き込むべき書き込み単位のデータが、ユーザデータのみを含む書き込み単位のデータであるか、それともユーザデータと最終ECCとを含む書き込み単位のデータであるかを判定する。
変数iがd-1とは異なる場合(S109NO)、ライト制御部122はS102の手順に進む。すなわち、ライト制御部122は、別の書き込み単位のユーザデータに対する第1中間ECCをRAM6に格納し、その別の書き込み単位のユーザデータを書き込み先ブロックに書き込むように、S102の手順に進む。
変数iがd-1と等しい場合(S109YES)、ライト制御部122は、書き込み先ブロックに未書き込みで、最終ECC分を除いた書き込み単位のユーザデータが、バッファ15に蓄積されているか否かを判定する(S110)。書き込み先ブロックに未書き込みで、最終ECC分を除いた書き込み単位のユーザデータが、バッファ15に蓄積されていない場合(S110NO)、ライト制御部122はS110の手順に戻る。
書き込み先ブロックに未書き込みで、最終ECC分を除いた書き込み単位のユーザデータが、バッファ15に蓄積されている場合(S110YES)、ライト制御部122は、第0書き込み先ブロックから第(i-1)書き込み先ブロックそれぞれに書き込んだ書き込み単位のユーザデータと、書き込み先ブロックに未書き込みで、最終ECC分を除いた書き込み単位のユーザデータとを、ECCエンコーダ16で符号化して、最終ECCを生成する(S111)。ライト制御部122は、最終ECC分を除いた書き込み単位のユーザデータと、生成した最終ECCとを第i書き込み先ブロックに書き込む(S112)。最終ECCは、第0書き込み先ブロックから第(i-1)書き込み先ブロックそれぞれに書き込んだ書き込み単位のユーザデータと、第i書き込み先ブロックに書き込んだ最終ECC分を除いた書き込み単位のユーザデータと共に、第2フレームサイズのECCフレームを構成する。
次いで、ライト制御部122は、第i書き込み先ブロックに書き込んだユーザデータの物理アドレスと論理アドレスのマッピングを示すように、論理物理アドレス変換テーブル31を更新する(S113)。そして、ライト制御部122は、データアドレス-中間ECCアドレス対応テーブル32を更新して、書き込んだ最終ECCに対応する全ての中間ECCを無効化し(S114)、ライト処理を終了する(終了)。つまり、ライト制御部122は、第2フレームサイズのECCフレームに対応する最終ECCが第i書き込み先ブロックに書き込まれたので、この第2フレームサイズのECCフレーム内のユーザデータに対して生成された中間ECCを無効化する。より詳しくは、ライト制御部122は、無効化すべき中間ECCに対応するエントリをデータアドレス-中間ECCアドレス対応テーブル32から削除することにより、中間ECCを無効化する。無効化される中間ECCは、第1中間ECCと第2中間ECCの少なくともいずれかである。
以上の図26に示すライト処理により、ライト制御部122は、d個の書き込み先ブロックに格納されたd個のユーザデータを最終ECCで保護できる。さらに、ライト制御部122は、d-1個の書き込み先ブロックそれぞれに書き込み単位のユーザデータを書き込んでから、最終ECCが書き込まれるまでの間、d-1個の書き込み先ブロックそれぞれに書き込んだ書き込み単位のユーザデータを、対応する中間ECCで保護できる。
なお、GCにおけるライト処理の手順も、ライト制御部122によるライト処理の手順と同様である。具体的には、GCにおけるライト処理の手順は、図26に示したライト処理の手順において、バッファ15に蓄積されたユーザデータを、バッファ15に蓄積された有効データに置き換えればよい。バッファ15に蓄積された有効データは、GCソースブロックからコピーされた有効データである。
図27は、実施形態に係るメモリシステム3において、コントローラ4内の不揮発化処理部123および誤り訂正処理部124によって実行される第1不揮発化処理の手順の例を示すフローチャートである。不揮発化処理部123および誤り訂正処理部124は、内部状態確定要求に基づき中間ECCの不揮発化が要求された場合に、第1不揮発化処理を実行する。ここでは、中間ECC(第1中間ECC)がRAM6に格納されていることを想定する。第1中間ECCは、不揮発性メモリ5の書き込み先ブロックに格納されているユーザデータに対応する。
まず、不揮発化処理部123は、第1中間ECCに対応するユーザデータに対するリードベリファイを行う(S201)。そして、不揮発化処理部123は、リードベリファイにおいて、ブロック消失が検出されたか否かを判定する(S202)。例えば、不揮発化処理部123は、リードベリファイにおいて、データの完全性が確認されなかったブロックがあったか否かを判定する。
ブロック消失が検出されなかった場合(S202NO)、不揮発化処理部123は、リードベリファイで得られたユーザデータをECCエンコーダ16で符号化して、第1中間ECCよりもサイズが小さい中間ECC(第2中間ECC)を生成する(S203)。不揮発化処理部123は、生成した第2中間ECCをセーブブロックに書き込み(S204)、S208の手順に進む。
ブロック消失が検出された場合(S202YES)、誤り訂正処理部124は、リードベリファイで得られたユーザデータと、第1中間ECCとを用いて、エラー訂正処理を行う(S205)。不揮発化処理部123は、エラー訂正されたユーザデータを用いて第2中間ECCを生成する(S206)。そして、不揮発化処理部123は、生成した第2中間ECCをセーブブロックに書き込み(S207)、S208の手順に進む。なお、不揮発化処理部123は、リードベリファイにおいて、第2中間ECC(すなわち、第2サイズの中間ECC)の救済能力を超えたブロック消失が検出されなかったことを確認してもよい。例えば、第2中間ECCが1ブロックの消失を救済できる救済能力を有する場合、不揮発化処理部123は、リードベリファイにおいて2ブロック以上の消失が検出されなかったことを確認する。不揮発化処理部123は、第2中間ECCの救済能力を超えたブロック消失が検出されなかった場合に、第2中間ECCを生成する。つまり、不揮発化処理部123は、リードベリファイにおいて、読み出したユーザデータにブロック消失が発生していない場合、および読み出したユーザデータに第2中間ECCによって救済可能なブロック消失が発生している場合に、第2中間ECCを生成する。これにより、不揮発化処理部123は、第2中間ECCが、第2中間ECCの救済能力を超えたブロック消失がないユーザデータに対して生成されていることを保証できる。
次いで、不揮発化処理部123は、書き込み先ブロックに格納されているユーザデータの物理アドレスと、セーブブロックに書き込んだ第2中間ECCの物理アドレスとの対応を示すように、データアドレス-中間ECCアドレス対応テーブル32を更新し(S208)、第1不揮発化処理を終了する(終了)。
以上の図27に示す第1不揮発化処理により、不揮発化処理部123および誤り訂正処理部124は、中間ECCの不揮発化が要求された場合に、RAM6に格納されている第1中間ECCよりもサイズが小さい第2中間ECCをセーブブロックに書き込むことができる。第1中間ECCで保護されていたユーザデータは、第2中間ECCがセーブブロックに書き込まれた後、第2中間ECCで保護できる。
なお、S202でブロック消失が検出された場合、誤り訂正処理部124は、S205において、リードベリファイで得られたユーザデータと、第1中間ECCとを用いて、エラー訂正処理を行った後、ブロック消失が発生したブロックに対するリフレッシュ処理を行ってもよい。リフレッシュ処理は、ブロック消失が発生したブロックに格納されているデータを、ブロック消失が発生していないブロックにコピーする処理である。
図28は、実施形態に係るメモリシステム3において、コントローラ4内の不揮発化処理部123によって実行される第2不揮発化処理の手順の例を示すフローチャートである。不揮発化処理部123は、内部状態確定要求に基づき、バッファ15に記憶されている未書き込みのユーザデータの不揮発化が要求された場合に、第2不揮発化処理を実行する。ここでは、バッファ15に記憶されているユーザデータの書き込みおよび保護を行う第3データ単位が、クラスタ単位である場合について例示する。
まず、不揮発化処理部123は、バッファ15に記憶されている未書き込みのユーザデータをクラスタ単位に分割して、b個のクラスタ単位のユーザデータを取得する(S301)。bは1以上の整数である。b個のクラスタ単位のユーザデータを、先頭から順にそれぞれ、x番目のクラスタ単位のユーザデータとも称する。xは、0からb-1までのいずれかの整数である。なお、ユーザデータをクラスタ単位に分割した場合に、クラスタ単位に満たないユーザデータが取得されたならば、不揮発化処理部123は、クラスタ単位に満たないユーザデータにパディング用のデータを付加して、クラスタ単位のユーザデータを取得する。
不揮発化処理部123は、クラスタを保護単位として、b個のクラスタ単位のユーザデータをECCエンコーダ16で符号化して、c個のクラスタ単位のSB ECCを生成する(S302)。cは、SB ECCによって消失が救済されるブロックの数(例えば、2)に対応する。c個のクラスタ単位のSB ECCを、先頭から順にそれぞれ、y番目のクラスタ単位のSB ECCとも称する。yは、0からc-1までのいずれかの整数である。
次いで、不揮発化処理部123は、S303からS309までの手順により、b+c個のセーブブロックそれぞれに、b個のクラスタ単位のユーザデータおよびc個のクラスタ単位のSB ECCのそれぞれを書き込む。以下では、b+c個のセーブブロックを、先頭から順にそれぞれ、セーブブロック#zと表記する。zは、0からb+c-1までのいずれかの整数である。
具体的には、不揮発化処理部123は変数iに0を設定する(S303)。不揮発化処理部123は、i番目のクラスタ単位のユーザデータをセーブブロック#iに書き込む(S304)。不揮発化処理部123は、変数iに1を加算する(S305)。そして、不揮発化処理部123は、変数iがb未満であるか否かを判定する(S306)。変数iがb未満である場合(S306YES)、不揮発化処理部123はS304に進む。つまり、不揮発化処理部123は、別のクラスタ単位のユーザデータをセーブブロックに書き込むための処理をさらに行う。
変数iがb以上である場合(S306NO)、不揮発化処理部123は、(i-b)番目のクラスタ単位のSB ECCをセーブブロック#iに書き込む(S307)。不揮発化処理部123は、変数iに1を加算する(S308)。そして、不揮発化処理部123は、変数iがb+c未満であるか否かを判定する(S309)。変数iがb+c未満である場合(S309YES)、不揮発化処理部123はS307に進む。つまり、不揮発化処理部123は、別のクラスタ単位のSB ECCをセーブブロックに書き込むための処理をさらに行う。
変数iがb+c以上である場合(S306NO)、不揮発化処理部123は、セーブブロック#0からセーブブロック#(b-1)それぞれに書き込んだクラスタ単位のユーザデータの物理アドレスと論理アドレスのマッピングを示すように、論理物理アドレス変換テーブル31を更新する(S310)。そして、不揮発化処理部123は、セーブブロック#0からセーブブロック#(b-1)それぞれに書き込んだクラスタ単位のユーザデータの物理アドレスと、セーブブロック#bからセーブブロック#(b+c-1)それぞれに書き込んだSB ECCの物理アドレスとの対応を示すように、データアドレス-SB ECCアドレス対応テーブル33を更新し(S311)、第2不揮発化処理を終了する。
以上の図28に示す第2不揮発化処理により、不揮発化処理部123は、バッファ15に記憶されているユーザデータをクラスタ単位に分割したb個のクラスタ単位のユーザデータそれぞれを、b個のセーブブロックそれぞれに書き込むことができる。ユーザデータをクラスタ単位でセーブブロックに書き込むことにより、例えば、ユーザデータをページ単位でセーブブロックに書き込む場合と比較して、パディング量を削減できる。
また、不揮発化処理部123は、b個のセーブブロックに格納されたb個のクラスタ単位のユーザデータを、c個のセーブブロックに格納されたc個のクラスタ単位のSB ECCで保護できる。クラスタ単位のユーザデータに対するSB ECCを生成することにより、例えば、ページ単位のユーザデータに対するSB ECCを生成する場合と比較して、生成されるSB ECCのデータ量を削減できる。よって、セーブブロックに書き込まれるSB ECCの書き込み量を削減できる。
なお、コントローラ4は、例えば、第1不揮発化処理を実行した後に第2不揮発化処理を実行する。また、コントローラ4は、第2不揮発化処理を実行した後に第1不揮発化処理を実行してもよい。あるいは、コントローラ4は、第1不揮発化処理と第2不揮発化処理を並行して実行してもよい。
図29は、実施形態に係るメモリシステム3において、コントローラ4内のリード制御部121および誤り訂正処理部124によって実行されるリード処理の手順の例を示すフローチャートである。ここでは、ホスト2からリードコマンドを受信したことに応じて行われるリード処理を例示するが、メモリシステム3の内部動作(例えば、GC動作、リフレッシュ動作、ウェアレベリング動作)においても同様のリード処理が行われ得る。
リード制御部121は論理物理アドレス変換テーブル31を用いて、受信したリードコマンドで指定された論理アドレスに対応する物理アドレスを特定する(S401)。リード制御部121は、不揮発性メモリ5内の特定した物理アドレスからユーザデータを読み出す(S402)。
リード制御部121は、読み出したユーザデータにエラーが発生しているか否かを判定する(S403)。以下では、読み出したユーザデータを、リードデータとも称する。リード制御部121は、リードデータに発生したエラーを、リードデータに含まれるページ内ECCを用いて検出できる。また、リードデータは、第1保護単位のユーザデータであってもよいし、その一部であってもよい。リードデータにエラーが発生していない場合(S403NO)、リード制御部121はホスト2にリードデータを返し(S404)、リード処理を終了する(終了)。
リードデータにエラーが発生している場合(S403YES)、誤り訂正処理部124は、リードデータに対応する第1中間ECCがRAM6に格納されているか否かを判定する(S405)。具体的には、誤り訂正処理部124は、データアドレス-中間ECCアドレス対応テーブル32において、リードデータの物理アドレス(すなわちデータアドレス)に対応するRAM6内の記憶領域を示すエントリを探索する。そして、リードデータの物理アドレスに対応するRAM6内の記憶領域を示すエントリがデータアドレス-中間ECCアドレス対応テーブル32にある場合、誤り訂正処理部124は、リードデータに対応する第1中間ECCがRAM6に格納されていると判断する。これに対して、リードデータの物理アドレスに対応するRAM6内の記憶領域を示すエントリがデータアドレス-中間ECCアドレス対応テーブル32にない場合、誤り訂正処理部124は、リードデータに対応する第1中間ECCがRAM6に格納されていないと判断する。
リードデータに対応する第1中間ECCがRAM6に格納されている場合(S405YES)、誤り訂正処理部124は第1エラー訂正処理を実行し(S406)、S410の手順に進む。第1エラー訂正処理では、第1中間ECCを用いて、エラーが発生したユーザデータ(リードデータ)を含むECCフレームにおけるエラー訂正が行われる。第1エラー訂正処理の詳細な手順については、図30のフローチャートを参照して後述する。
リードデータに対応する第1中間ECCがRAM6に格納されていない場合(S405NO)、誤り訂正処理部124は、リードデータに対応する第2中間ECCが不揮発性メモリ5(より詳しくはセーブブロック)に格納されているか否かを判定する(S407)。具体的には、誤り訂正処理部124は、データアドレス-中間ECCアドレス対応テーブル32において、リードデータの物理アドレスに対応する不揮発性メモリ5内の物理アドレスを示すエントリを探索する。そして、リードデータの物理アドレスに対応する不揮発性メモリ5内の物理アドレスを示すエントリがデータアドレス-中間ECCアドレス対応テーブル32にある場合、誤り訂正処理部124は、リードデータに対応する第2中間ECCが不揮発性メモリ5に格納されていると判断する。これに対して、リードデータの物理アドレスに対応する不揮発性メモリ5内の物理アドレスを示すエントリがデータアドレス-中間ECCアドレス対応テーブル32にない場合、誤り訂正処理部124は、リードデータに対応する第2中間ECCが不揮発性メモリ5に格納されていないと判断する。
リードデータに対応する第2中間ECCが不揮発性メモリ5に格納されている場合(S407YES)、誤り訂正処理部124は第2エラー訂正処理を実行し(S408)、S410の手順に進む。第2エラー訂正処理では、第2中間ECCを用いて、エラーが発生したユーザデータ(リードデータ)を含むECCフレームにおけるエラー訂正が行われる。第2エラー訂正処理の詳細な手順については、図31のフローチャートを参照して後述する。
リードデータに対応する第2中間ECCが不揮発性メモリ5に格納されていない場合(S407NO)、誤り訂正処理部124は第3エラー訂正処理を実行し(S409)、S410の手順に進む。誤り訂正処理部124は、例えば、リードデータに対応する中間ECCがRAM6と不揮発性メモリ5のいずれにも格納されていない場合、リードデータに対応する最終ECCが不揮発性メモリ5に格納されていると判断する。第3エラー訂正処理では、最終ECCを用いて、エラーが発生したユーザデータを含む第2フレームサイズのECCフレームにおけるエラー訂正が行われる。第3エラー訂正処理の詳細な手順については、図32のフローチャートを参照して後述する。
次いで、リード制御部121はS406、S408またはS409の手順によるエラー訂正が成功したか否かを判定する(S410)。エラー訂正が成功した場合(S410YES)、リード制御部121はホスト2にエラー訂正されたユーザデータを返し(S411)、リード処理を終了する(終了)。エラー訂正が失敗した場合(S410NO)、リード制御部121はホスト2にエラーを通知し(S412)、リード処理を終了する(終了)。なお、リード制御部121は、内部動作に伴って読み出したリードデータのエラー訂正の失敗を、ホスト2に通知しなくてもよい。
以上の図29に示したリード処理により、リード制御部121および誤り訂正処理部124はリードコマンドに対応するユーザデータをホスト2に返すか、あるいはリードコマンドに応じた処理でエラーが発生したことをホスト2に通知できる。誤り訂正処理部124は、読み出したユーザデータにエラーが発生している場合、そのエラーを訂正するためのエラー訂正処理を実行できる。また、例えば、GC処理中に読み出されたデータにエラーが発生した場合も同様に、誤り訂正処理部124は、読み出されたデータのエラーを訂正するためのエラー訂正処理を実行できる。
図30は、実施形態に係るメモリシステム3において、コントローラ4内の誤り訂正処理部124によって実行される第1エラー訂正処理の手順の例を示すフローチャートである。第1エラー訂正処理は、読み出したユーザデータにエラーが発生し、読み出したユーザデータに対応する第1中間ECCがRAM6に格納されている場合に実行される処理である。つまり、読み出したユーザデータは第1中間ECCで保護されている。
誤り訂正処理部124は、不揮発性メモリ5から、エラーが発生したユーザデータと共に第1フレームサイズのECCフレームを構成するユーザデータを読み出す(S501)。誤り訂正処理部124はデータアドレス-中間ECCアドレス対応テーブル32を用いて、この第1フレームサイズのECCフレームを構成するユーザデータの物理アドレスに対応する、中間ECCのアドレスを特定する(S502)。特定したアドレスは、第1中間ECCが格納されているRAM6内の記憶領域を示す。
次いで、誤り訂正処理部124は特定した中間ECCのアドレスから第1中間ECCを読み出す(S503)。つまり、誤り訂正処理部124は、特定した中間ECCのアドレスに基づき、RAM6から第1中間ECCを読み出す。そして、誤り訂正処理部124は読み出した第1中間ECCを用いて、第1サイズのECCフレームを構成するユーザデータのエラー訂正を行う(S504)。
以上の図30に示した第1エラー訂正処理により、誤り訂正処理部124は、第1中間ECCを用いてユーザデータのエラーを訂正し得る。
図31は、実施形態に係るメモリシステム3において、コントローラ4内の誤り訂正処理部124によって実行される第2エラー訂正処理の手順の例を示すフローチャートである。第2エラー訂正処理は、読み出したユーザデータにエラーが発生し、読み出したユーザデータに対応する第2中間ECCが不揮発性メモリ5に格納されている場合に実行される処理である。つまり、読み出したユーザデータは第2中間ECCで保護されている。
誤り訂正処理部124は、不揮発性メモリ5から、エラーが発生したユーザデータと共に第1フレームサイズのECCフレームを構成するユーザデータを読み出す(S601)。誤り訂正処理部124はデータアドレス-中間ECCアドレス対応テーブル32を用いて、この第1フレームサイズのECCフレームを構成するユーザデータの物理アドレスに対応する、中間ECCのアドレスを特定する(S602)。特定したアドレスは、第2中間ECCが格納されている不揮発性メモリ5内の物理アドレスを示す。
次いで、誤り訂正処理部124は特定した中間ECCのアドレスから第2中間ECCを読み出す(S603)。つまり、誤り訂正処理部124は、特定した中間ECCのアドレスに基づき、不揮発性メモリ5から第2中間ECCを読み出す。そして、誤り訂正処理部124は読み出した第2中間ECCを用いて、第1サイズのECCフレームを構成するユーザデータのエラー訂正を行う(S604)。
以上の図31に示した第2エラー訂正処理により、誤り訂正処理部124は、第2中間ECCを用いてユーザデータのエラーを訂正し得る。
図32は、実施形態に係るメモリシステム3において、コントローラ4内の誤り訂正処理部124によって実行される第3エラー訂正処理の手順の例を示すフローチャートである。第3エラー訂正処理は、読み出したユーザデータにエラーが発生し、読み出したユーザデータに対応する最終ECCが不揮発性メモリ5に格納されている場合に実行される処理である。つまり、読み出したユーザデータは最終ECCで保護されている。
誤り訂正処理部124は、不揮発性メモリ5から、エラーが発生したユーザデータと共に第2フレームサイズのECCフレームを構成するユーザデータおよび最終ECCを読み出す(S701)。誤り訂正処理部124は最終ECCを用いて、第2フレームサイズのECCフレームを構成するユーザデータのエラー訂正を行い(S702)、第3エラー訂正処理を終了する(終了)。
以上の図32に示した第3エラー訂正処理により、誤り訂正処理部124は、最終ECCを用いてユーザデータのエラーを訂正し得る。
次いで、セーブブロックから読み出したユーザデータにエラーが発生した場合に、読み出したユーザデータのエラーを訂正するための処理について説明する。
図33は、実施形態に係るメモリシステム3において、コントローラ4内の誤り訂正処理部124によって実行される第4エラー訂正処理の手順の例を示すフローチャートである。第4エラー訂正処理は、セーブブロックから読み出したユーザデータにエラーが発生し、読み出したユーザデータに対応するSB ECCがセーブブロックに格納されている場合に実行される処理である。つまり、読み出したユーザデータはSB ECCで保護されている。
誤り訂正処理部124は、データアドレス-SB ECCアドレス対応テーブル33において、エラーが発生したユーザデータの物理アドレスに対応するエントリを特定する(S801)。誤り訂正処理部124は、特定したエントリから、エラーが発生したユーザデータと共にECCフレームを構成するユーザデータの物理アドレスを取得する(S802)。誤り訂正処理部124は、取得したユーザデータの物理アドレスから第3データ単位(例えば、クラスタ単位)のユーザデータを読み出す(S803)。なお、取得したユーザデータの物理アドレスは、複数であり得る。取得したユーザデータの物理アドレスが複数である場合、誤り訂正処理部124は、取得した物理アドレスそれぞれから第3データ単位のユーザデータを読み出す。
次いで、誤り訂正処理部124は、特定したエントリから、ECCフレームを構成するユーザデータの物理アドレスに対応する、SB ECCの物理アドレスを取得する(S804)。誤り訂正処理部124は、取得したSB ECCの物理アドレスから第3データ単位のSB ECCを読み出す(S805)。なお、取得したSB ECCの物理アドレスは、複数であり得る。取得したSB ECCの物理アドレスが複数である場合、誤り訂正処理部124は、取得した物理アドレスそれぞれから第3データ単位のSB ECCを読み出す。
そして、誤り訂正処理部124は読み出したSB ECCを用いて、ECCフレームを構成するユーザデータのエラー訂正を行う(S806)。
以上の図33に示した第4エラー訂正処理により、誤り訂正処理部124は、SB ECCを用いて、セーブブロックから読み出したユーザデータのエラーを訂正し得る。
以上説明したように、本実施形態によれば、不揮発性メモリに格納されているデータの内のECCの比率を低下させることができる。
コントローラ4は、不揮発性メモリ5に書き込むべき第1単位のデータ部を符号化して、第1単位のデータ部と共に第1ECCフレームを構成する第1サイズの第1中間ECCを生成する。コントローラ4は、第1単位のデータ部を不揮発性メモリ5に書き込む。コントローラ4は、第1中間ECCをRAM6に格納する。コントローラ4は、第1単位のデータ部を保護する中間ECCの不揮発化が要求された場合、第1単位のデータ部を符号化して、第1単位のデータ部と共に第2ECCフレームを構成する第2サイズの第2中間ECCを生成し、第2中間ECCを不揮発性メモリ5に書き込む。第2サイズは、第1サイズよりも小さい。
第2中間ECCを不揮発性メモリ5に書き込むことにより、第1中間ECCを不揮発性メモリ5に書き込む場合よりも、不揮発性メモリ5に書き込まれるECCのデータ量を削減できる。したがって、不揮発性メモリ5に格納されているデータの内のECCの比率を低下させることができる。
本実施形態に記載された様々な機能の各々は、回路(処理回路)によって実現されてもよい。処理回路の例には、中央処理装置(CPU)のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム(命令群)を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電子回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。本実施形態に記載されたCPU以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
実施形態は例示であり、発明の範囲はそれらに限定されない。
1…情報処理システム
2…ホスト
3…メモリシステム
4…コントローラ
5…不揮発性メモリ
6…RAM
10…バス
11…ホストI/F
12…CPU
13…メモリI/F
14…RAM I/F
15…バッファ
16…ECCエンコーダ
121…リード制御部
122…ライト制御部
123…不揮発化処理部
124…誤り訂正処理部
31…論理物理アドレス変換テーブル
32…データアドレス-中間ECCアドレス対応テーブル
33…データアドレス-SB ECCアドレス対応テーブル
B0…ブロック
B1…ブロック
B2…ブロック
Bm-1…ブロック
P0…ページ
Pn-1…ページ
511…書き込み先ブロック
521…第1書き込み先ブロック
522…第2書き込み先ブロック
551…セーブブロック
552…セーブブロック
561…セーブブロック
562…セーブブロック
563…セーブブロック
564…セーブブロック
565…セーブブロック
611…ユーザデータ
611P…パディング用のデータ
612…ユーザデータ
612P…パディング用のデータ
613…ユーザデータ
614…ユーザデータ
614P…パディング用のデータ
615…ユーザデータ
616…ユーザデータ
617…ユーザデータ
618…ユーザデータ
619…ユーザデータ
621…ユーザデータ
622…ユーザデータ
622P…パディング用のデータ
631…ユーザデータ
632…ユーザデータ
633…ユーザデータ
63P…パディング用のデータ
711…中間ECC
712…第1中間ECC
713…第2中間ECC
731…最終ECC
751…SB ECC
752…SB ECC
753…SB ECC
761…SB ECC
762…SB ECC
771…SB ECC
772…SB ECC
81…ユーザデータ
821…第1中間ECC
822…第2中間ECC
851…シンボル
852…シンボル
861…シンボル
862…シンボル
2…ホスト
3…メモリシステム
4…コントローラ
5…不揮発性メモリ
6…RAM
10…バス
11…ホストI/F
12…CPU
13…メモリI/F
14…RAM I/F
15…バッファ
16…ECCエンコーダ
121…リード制御部
122…ライト制御部
123…不揮発化処理部
124…誤り訂正処理部
31…論理物理アドレス変換テーブル
32…データアドレス-中間ECCアドレス対応テーブル
33…データアドレス-SB ECCアドレス対応テーブル
B0…ブロック
B1…ブロック
B2…ブロック
Bm-1…ブロック
P0…ページ
Pn-1…ページ
511…書き込み先ブロック
521…第1書き込み先ブロック
522…第2書き込み先ブロック
551…セーブブロック
552…セーブブロック
561…セーブブロック
562…セーブブロック
563…セーブブロック
564…セーブブロック
565…セーブブロック
611…ユーザデータ
611P…パディング用のデータ
612…ユーザデータ
612P…パディング用のデータ
613…ユーザデータ
614…ユーザデータ
614P…パディング用のデータ
615…ユーザデータ
616…ユーザデータ
617…ユーザデータ
618…ユーザデータ
619…ユーザデータ
621…ユーザデータ
622…ユーザデータ
622P…パディング用のデータ
631…ユーザデータ
632…ユーザデータ
633…ユーザデータ
63P…パディング用のデータ
711…中間ECC
712…第1中間ECC
713…第2中間ECC
731…最終ECC
751…SB ECC
752…SB ECC
753…SB ECC
761…SB ECC
762…SB ECC
771…SB ECC
772…SB ECC
81…ユーザデータ
821…第1中間ECC
822…第2中間ECC
851…シンボル
852…シンボル
861…シンボル
862…シンボル
Claims (10)
- 不揮発性メモリと、
少なくとも1つの揮発性メモリと、
前記不揮発性メモリと前記少なくとも1つの揮発性メモリとを制御するよう構成されるコントローラと、を具備し、
前記コントローラは、
前記不揮発性メモリに書き込むべき第1単位のデータ部を符号化して、前記第1単位のデータ部と共に第1誤り訂正符号フレームを構成する第1サイズの第1誤り訂正符号を生成し、
前記第1単位のデータ部を前記不揮発性メモリに書き込み、
前記第1誤り訂正符号を前記少なくとも1つの揮発性メモリに格納し、
前記第1単位のデータ部を保護する誤り訂正符号の不揮発化が要求された場合、前記第1単位のデータ部を符号化して、前記第1単位のデータ部と共に第2誤り訂正符号フレームを構成する第2サイズの第2誤り訂正符号を生成し、前記第2誤り訂正符号を前記不揮発性メモリに書き込むように構成され、
前記第2サイズは、前記第1サイズよりも小さい、
メモリシステム。 - 前記第1誤り訂正符号は、α個の第3サイズのシンボルを含み、
前記第2誤り訂正符号は、β個の第4サイズのシンボルを含み、
前記αは2以上の整数であり、
前記βは2以上の整数であり、
前記第4サイズは、前記第3サイズよりも小さい、
請求項1記載のメモリシステム。 - 前記コントローラは、前記第1単位のデータ部の内、前記β個の第4サイズのシンボルに相当するサイズのデータ部を、前記不揮発性メモリに並列に書き込むように構成される、
請求項2記載のメモリシステム。 - 前記コントローラは、
前記第1単位のデータ部を保護する誤り訂正符号の不揮発化が要求された場合、前記不揮発性メモリから前記第1単位のデータ部を読み出し、
読み出した前記第1単位のデータ部に誤りが発生していない場合、および読み出した前記第1単位のデータ部に前記第2サイズの誤り訂正符号によって救済可能な誤りが発生している場合、前記第2誤り訂正符号を生成するように構成される、
請求項1乃至請求項3のいずれか一項に記載のメモリシステム。 - 前記コントローラは、
読み出した前記第1単位のデータ部に誤りが発生している場合、前記第1誤り訂正符号を用いて、読み出した前記第1単位のデータ部に対する誤り訂正処理を行い、
前記誤り訂正処理によって誤りが訂正された前記第1単位のデータ部を符号化して、前記第2誤り訂正符号を生成するように構成される、
請求項4記載のメモリシステム。 - 前記コントローラは、
メモリセル当たりにnビットのデータが書き込まれる第1モードで、前記第2誤り訂正符号を前記不揮発性メモリに書き込み、
メモリセル当たりにmビットのデータが書き込まれる第2モードで、前記第1単位のデータ部を前記不揮発性メモリに書き込むように構成され、
前記nは1以上の数であり、
前記mは前記nよりも大きい数である、
請求項1記載のメモリシステム。 - 前記不揮発性メモリは、複数のブロックを含み、
複数のブロックそれぞれは、複数の第2単位の記憶領域を含み、
前記少なくとも1つの揮発性メモリは、前記不揮発性メモリに書き込まれるべき第2データ部を記憶し、
前記コントローラは、前記第2データ部の不揮発化が要求された場合、
前記第2データ部を前記第2単位より小さい第3単位に分割したb個のデータ部を取得し、
前記b個のデータ部を符号化して、前記b個のデータ部と共に第3誤り訂正符号フレームを構成する第3誤り訂正符号を生成し、
前記b個のデータ部を、前記複数のブロックの内のb個のブロックにそれぞれ書き込み、
前記第3誤り訂正符号を前記第3単位に分割したc個の符号部を、前記複数のブロックの内の、前記b個のブロックとは異なるc個のブロックにそれぞれ書き込むように構成され、
前記bは1以上の整数であり、
前記cは1以上の整数である、
請求項1記載メモリシステム。 - 前記第2単位は、ページ単位であり、
前記第3単位は、クラスタ単位である、
請求項7記載のメモリシステム。 - 前記コントローラは、
d-1個の前記第1誤り訂正符号フレームにそれぞれ含まれるd-1個の前記第1単位のデータ部を前記不揮発性メモリに書き込んだ場合、前記d-1個の第1単位のデータ部と、前記不揮発性メモリに書き込むべき第3データ部とを符号化して、前記d-1個の第1単位のデータ部および前記第3データ部と共に第4誤り訂正符号フレームを構成する第4誤り訂正符号を生成し、前記第3データ部と前記第4誤り訂正符号とを前記不揮発性メモリに書き込むように構成され、
dは2以上の整数である、
請求項1乃至請求項8のいずれか一項に記載のメモリシステム。 - 不揮発性メモリと、少なくとも1つの揮発性メモリとを具備するメモリシステムの制御方法であって、
前記不揮発性メモリに書き込むべき第1単位のデータ部を符号化して、前記第1単位のデータ部と共に第1誤り訂正符号フレームを構成する第1サイズの第1誤り訂正符号を生成し、
前記第1単位のデータ部を前記不揮発性メモリに書き込み、
前記第1誤り訂正符号を前記少なくとも1つの揮発性メモリに格納し、
前記第1単位のデータ部を保護する誤り訂正符号の不揮発化が要求された場合、前記第1単位のデータ部を符号化して、前記第1単位のデータ部と共に第2誤り訂正符号フレームを構成する第2サイズの第2誤り訂正符号を生成し、前記第2誤り訂正符号を前記不揮発性メモリに書き込み、
前記第2サイズは、前記第1サイズよりも小さい、
制御方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021146258A JP2023039212A (ja) | 2021-09-08 | 2021-09-08 | メモリシステムおよび制御方法 |
US17/685,229 US11789643B2 (en) | 2021-09-08 | 2022-03-02 | Memory system and control method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2021146258A JP2023039212A (ja) | 2021-09-08 | 2021-09-08 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023039212A true JP2023039212A (ja) | 2023-03-20 |
Family
ID=85386682
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2021146258A Pending JP2023039212A (ja) | 2021-09-08 | 2021-09-08 | メモリシステムおよび制御方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US11789643B2 (ja) |
JP (1) | JP2023039212A (ja) |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5375127A (en) * | 1992-03-25 | 1994-12-20 | Ncr Corporation | Method and apparatus for generating Reed-Soloman error correcting code across multiple word boundaries |
JP5770026B2 (ja) * | 2011-06-20 | 2015-08-26 | ルネサスエレクトロニクス株式会社 | 半導体装置 |
US8898541B2 (en) * | 2011-11-30 | 2014-11-25 | Sony Corporation | Storage controller, storage device, information processing system, and storage controlling method |
US8938656B2 (en) * | 2012-09-14 | 2015-01-20 | Sandisk Technologies Inc. | Data storage device with intermediate ECC stage |
US20150349805A1 (en) * | 2014-05-28 | 2015-12-03 | Skymedi Corporation | Method of Handling Error Correcting Code in Non-volatile Memory and Non-volatile Storage Device Using the Same |
US20160062829A1 (en) * | 2014-08-29 | 2016-03-03 | Kabushiki Kaisha Toshiba | Semiconductor memory device |
US11709623B2 (en) | 2018-08-03 | 2023-07-25 | Sk Hynix Nand Product Solutions Corp. | NAND-based storage device with partitioned nonvolatile write buffer |
TWI658463B (zh) * | 2018-08-23 | 2019-05-01 | 群聯電子股份有限公司 | 資料存取方法、記憶體控制電路單元與記憶體儲存裝置 |
US10997071B2 (en) | 2018-11-27 | 2021-05-04 | Micron Technology, Inc. | Write width aligned storage device buffer flush |
JP2020155052A (ja) | 2019-03-22 | 2020-09-24 | キオクシア株式会社 | メモリシステムおよび制御方法 |
KR20210078201A (ko) * | 2019-12-18 | 2021-06-28 | 삼성전자주식회사 | 반도체 메모리 장치 및 메모리 시스템 |
US11442808B2 (en) * | 2020-03-12 | 2022-09-13 | Kioxia Corporation | Memory system |
-
2021
- 2021-09-08 JP JP2021146258A patent/JP2023039212A/ja active Pending
-
2022
- 2022-03-02 US US17/685,229 patent/US11789643B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20230073249A1 (en) | 2023-03-09 |
US11789643B2 (en) | 2023-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107003942B (zh) | 对用于增强存储设备的性能和持久性的解除映射命令的处理 | |
US9552290B2 (en) | Partial R-block recycling | |
US9158681B1 (en) | Process and apparatus to reduce declared capacity of a storage device by conditionally trimming | |
WO2016069192A1 (en) | Tracking intermix of writes and un-map commands across power cycles | |
US11947422B2 (en) | Nonvolatile semiconductor memory device | |
US11734112B2 (en) | Memory system | |
CN113126907B (zh) | 用于存储器装置的异步电力损失恢复 | |
US20130254463A1 (en) | Memory system | |
JP2011165063A (ja) | 半導体記憶装置 | |
Novotný et al. | Nand flash memory organization and operations | |
JP2019023936A (ja) | 記憶装置及びメモリシステム | |
WO2015102035A1 (en) | Techniques for storing data in bandwidth optimized or coding rate optimized code words based on data access frequency | |
US9524112B2 (en) | Process and apparatus to reduce declared capacity of a storage device by trimming | |
KR20220077041A (ko) | 메모리 시스템 내 저장된 데이터를 유지하는 장치 및 방법 | |
JP2006221334A (ja) | メモリコントローラ、フラッシュメモリシステム及びフラッシュメモリの制御方法 | |
US9563362B2 (en) | Host system and process to reduce declared capacity of a storage device by trimming | |
US11609855B2 (en) | Bit masking valid sectors for write-back coalescing | |
KR20230160620A (ko) | 메모리 시스템에서 데이터를 복구하는 장치 및 방법 | |
JP2023039212A (ja) | メモリシステムおよび制御方法 | |
McEwan et al. | An embedded FTL for SSD raid | |
US12050533B2 (en) | Memory system and operating method of memory system | |
US12131042B2 (en) | Memory system for managing namespace using write pointer and write count, memory controller, and method for operating memory system | |
US20230376230A1 (en) | Data storage with parity and partial read back in a redundant array | |
US20240248797A1 (en) | Information processing system | |
US20240004566A1 (en) | Memory system for managing namespace using write pointer and write count, memory controller, and method for operating memory system |