JP2023136082A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2023136082A JP2023136082A JP2022041508A JP2022041508A JP2023136082A JP 2023136082 A JP2023136082 A JP 2023136082A JP 2022041508 A JP2022041508 A JP 2022041508A JP 2022041508 A JP2022041508 A JP 2022041508A JP 2023136082 A JP2023136082 A JP 2023136082A
- Authority
- JP
- Japan
- Prior art keywords
- data
- write
- memory
- block
- host
- 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 250
- 238000000034 method Methods 0.000 title claims description 13
- 239000000872 buffer Substances 0.000 claims description 156
- 238000012546 transfer Methods 0.000 claims description 23
- 230000004044 response Effects 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims 2
- 238000010586 diagram Methods 0.000 description 13
- 230000010365 information processing Effects 0.000 description 7
- 238000012545 processing Methods 0.000 description 5
- 238000012937 correction Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 101100481703 Arabidopsis thaliana TMK2 gene Proteins 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 238000013507 mapping 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
- 239000000470 constituent Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013519 translation Methods 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
- G06F3/0607—Improving or facilitating administration, e.g. storage management by facilitating the process of upgrading existing storage systems, e.g. for improving compatibility between host and storage device
-
- 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/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]
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)
- Read Only Memory (AREA)
Abstract
【課題】効率的にライトデータを管理することができるメモリシステムを実現する。【解決手段】コントローラは、第1のデータが格納されているホストのメモリ上の位置を示す第1の記憶位置情報を、第1のリストに格納する。コントローラは、第1のデータを不揮発性メモリに書き込む際、第1の記憶位置情報が示す位置から第1のデータを取得し、取得した第1のデータを揮発性メモリに格納する。コントローラは、第1のデータが格納された揮発性メモリにおける位置を示す第2の記憶位置情報を、第1のリストに格納する。コントローラは、第2の記憶位置情報が示す位置から第1のデータを取得し、取得した第1のデータを第1の書き込み先ブロックに書き込む。コントローラは、第1の書き込み先ブロックの読み出し可能領域が拡大した場合、第1の書き込み先ブロックの書き込み未完了領域の先頭位置を示す記憶位置管理情報を更新する。【選択図】図5
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
SSDのようなメモリシステムにおいては、ホストから受信されたライトコマンドに基づいて、ホストからライトデータが受信される。受信されたライトデータが不揮発性メモリに書き込まれるまでの間、受信されたライトデータは、メモリシステムの揮発性メモリに保持される必要がある。
本発明の一実施形態が解決しようとする課題は、効率的にライトデータを管理することができるメモリシステムおよび制御方法を提供することである。
実施形態によれば、メモリを備えるホストに接続可能なメモリシステムは、不揮発性メモリと、揮発性メモリと、コントローラとを具備する。前記コントローラは、前記不揮発性メモリと前記揮発性メモリとに電気的に接続される。前記コントローラは、前記不揮発性メモリの複数のブロックから割り当てられた複数の書き込み先ブロックを管理するように構成される。前記コントローラは、第1の書き込み先ブロックに書き込む第1のデータが格納されている前記ホストのメモリ上のメモリアドレスと、前記第1のデータに含まれる、第1の管理サイズを有する単位データの個数と、を指定するライトコマンドを、前記ホストから受信する。前記コントローラは、前記第1の書き込み先ブロックに前記揮発性メモリに保存される第1のリストを割り当てる。前記コントローラは、前記第1のデータに含まれる単位データそれぞれが格納されている前記ホストのメモリ上の位置を示すメモリアドレスそれぞれを、第1の記憶位置情報として、前記第1のリストに格納する。前記コントローラは、前記第1のデータを前記不揮発性メモリに書き込む際、前記第1のリストの前記第1の記憶位置情報が示す前記ホストのメモリ上の位置から前記第1のデータを取得し、前記取得した第1のデータを前記揮発性メモリに格納する。前記コントローラは、前記第1のデータに含まれる単位データそれぞれが格納された前記揮発性メモリ上の位置を示すメモリアドレスそれぞれを、第2の記憶位置情報として、前記第1のリストに格納する。前記コントローラは、前記第1のリストの前記第2の記憶位置情報が示す前記揮発性メモリ上の位置から前記第1のデータを取得し、前記取得した第1のデータを前記第1の書き込み先ブロックに書き込む。前記コントローラは、前記第1の書き込み先ブロックへの前記第1のデータの書き込みの完了によって前記第1の書き込み先ブロックの読み出し可能領域が拡大した場合、前記第1の書き込み先ブロックの書き込み未完了領域の先頭位置を示す記憶位置管理情報を更新する。前記コントローラは、前記記憶位置管理情報によって示される前記書き込み未完了領域の先頭位置が前記第1の書き込み先ブロックの終端の記憶位置を超えた場合、前記第1のリストを前記第1の書き込み先ブロックから解放する。
以下、図面を参照して、実施形態を説明する。
まず、実施形態に係るメモリシステムを含む情報処理システムの構成について説明する。図1は、実施形態に係るメモリシステムとホストとを含む情報処理システムの構成例を示すブロック図である。以下では、実施形態に係るメモリシステムがソリッドステートドライブ(SSD)3として実現されている場合を想定する。
まず、実施形態に係るメモリシステムを含む情報処理システムの構成について説明する。図1は、実施形態に係るメモリシステムとホストとを含む情報処理システムの構成例を示すブロック図である。以下では、実施形態に係るメモリシステムがソリッドステートドライブ(SSD)3として実現されている場合を想定する。
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。
ホスト2は、SSD3にアクセスする情報処理装置である。情報処理装置の例には、パーソナルコンピュータ、サーバコンピュータ、他の様々なコンピューティングデバイスが含まれる。ホスト2は、データを書き込むための要求であるライト要求(ライトコマンド)をSSD3に送信する。また、ホスト2は、データを読み出すための要求であるリード要求(リードコマンド)をSSD3に送信する。
SSD3は、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。不揮発性メモリとしては、例えば、NAND型フラッシュメモリが用いられる。SSD3は、ホスト2から受信されたライトコマンドに基づいて、データ書き込み動作を実行する。また、SSD3は、ホスト2から受信されたリードコマンドに基づいて、データ読み出し動作を実行する。
ホスト2とSSD3とを接続するための論理インタフェースの規格としては、例えば、Serial Attached SCSI(SAS)、Serial ATA(SATA)、NVM ExpressTM(NVMeTM)が使用され得る。
次に、ホスト2の構成要素について説明する。ホスト2は、プロセッサ21と、メモリ22とを含む。
プロセッサ21は、CPU(Central Processing Unit)である。プロセッサ21は、ホスト2の各コンポーネントの動作を制御するように構成されている。プロセッサ21は、SSD3からメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホスト2は、SSD3以外の他のストレージデバイスを含んでいてもよい。この場合、ホストソフトウェアは、他のストレージデバイスからメモリ22にロードされてもよい。ホストソフトウェアには、オペレーティングシステム、ファイルシステム、デバイスドライバ、アプリケーションプログラム等が含まれる。
メモリ22は、ホスト2に設けられたメインメモリである。メモリ22は、揮発性の半導体メモリである。メモリ22は、例えば、DRAM(Dynamic Random Access Memory)のようなランダムアクセスメモリによって実現される。
メモリ22は、一つ以上のサブミッションキュー/コンプリーションキューペア(SQ/CQペア)221と、ホストライトバッファ222とを含む。
SQ/CQペア221は、サブミッションキュー(SQ)と、サブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)とを含む。
サブミッションキュー(SQ)は、SSD3に要求(コマンド)を発行するために使用されるキューである。コンプリーションキュー(CQ)は、コマンド完了を示す応答をSSD3から受信するために使用されるキューである。
ホスト2は、SQ/CQペア221に含まれるサブミッションキュー(SQ)を経由してSSD3に様々なコマンドを送信する。ホスト2は、SQ/CQペア221に含まれるコンプリーションキュー(CQ)を経由してSSD3から、コマンド完了を受信する。
次に、SSD3の構成要素について説明する。SSD3は、コントローラ4と、NAND型フラッシュメモリ5と、DRAM6とを含む。
コントローラ4は、Toggle NANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のような、NANDインタフェース43を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。ブロックBLK0~BLKx-1の各々は、データ消去動作の単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「フラッシュブロック」と称されることもある。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み込み動作の各々の単位である。
DRAM6は、揮発性の半導体メモリである。DRAM6は、例えば、NAND型フラッシュメモリ5に書き込むべきデータを一時的に格納するために使用される。また、DRAM6の記憶領域は、コントローラ4によって使用される様々な管理データを格納するために使用される。
次に、コントローラ4の詳細な構成について説明する。
コントローラ4は、ホストインタフェース(I/F)41と、CPU42と、NANDインタフェース(I/F)43と、DRAMインタフェース(I/F)44と、直接メモリアクセスコントローラ(DMAC)45と、スタティックRAM(SRAM)46と、ECC(Error Correction Code)エンコード/デコード部47と、を含む。これらホストインタフェース41と、CPU42と、NANDインタフェース43と、DRAMインタフェース44と、DMAC45と、SRAM46と、ECCエンコード/デコード部47とは、バス40を介して相互接続される。
ホストインタフェース41は、ホスト2との通信を実行するホストインタフェース回路である。ホストインタフェース41は、例えば、PCIeコントローラである。あるいは、SSD3がネットワークインタフェースコントローラを内蔵する構成である場合には、ホストインタフェース41は、ネットワークインタフェースコントローラの一部として実現されてもよい。ホストインタフェース41は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、コピーコマンド、等が含まれる。
CPU42は、プロセッサである。CPU42は、ホストインタフェース41と、NANDインタフェース43と、DRAMインタフェース44と、DMAC45と、SRAM46と、ECCエンコード/デコード部47と、を制御する。CPU42は、SSD3への電源の供給に応じて、NAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6またはSRAM46にロードする。
NANDインタフェース43は、複数の不揮発性メモリダイを制御するメモリインタフェース回路である。NANDインタフェース43は、CPU42の制御の下、NAND型フラッシュメモリ5を制御する。NANDインタフェース43は、例えば、複数のチャンネル(Ch)を介して複数のNAND型フラッシュメモリダイに接続される。NANDインタフェース43とNAND型フラッシュメモリ5との間の通信は、例えば、Toggle NANDフラッシュインタフェースまたはオープンNANDフラッシュインタフェース(ONFI)に準拠して実行される。
DRAMインタフェース44は、DRAM6を制御するDRAMインタフェース回路である。DRAMインタフェース44は、CPU42の制御の下、DRAM6を制御する。
DMAC45は、CPU42の制御の下、ホスト2のメモリ22とDRAM6(またはSRAM46)との間のデータ転送を実行する。ホスト2のメモリ22上のホストライトバッファ222から内部ライトバッファ63にライトデータを転送すべき場合には、CPU42は、ホストライトバッファ222の位置を示す転送元アドレス、転送すべきライトデータのサイズ、内部ライトバッファ63の位置を示す転送先アドレスをDMAC45に対して指定する。内部ライトバッファ63は、ホスト2から受信される各ライト要求に関連付けられたライトデータを一時的に格納するための記憶領域である。例えば、DRAM6の記憶領域の一部が内部ライトバッファ63として使用される。あるいは、DRAM6の記憶領域の一部の代わりに、SRAM46の記憶領域の一部が内部ライトバッファ63として使用されてもよい。
SRAM46は、揮発性のメモリである。SRAM46は、例えば、CPU42の作業領域として使用される。
ECCエンコード/デコード部47は、NAND型フラッシュメモリ5にデータをライトすべき時、このデータにエラー訂正コード(ECC)を冗長コードとして付加するエンコードを実行する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部47は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行うデコードを実行する。
次に、DRAM6の構成要素について説明する。DRAM6は、論理物理アドレス変換テーブル(L2Pテーブル:Logical to Physical address translation table)61と、ブロック管理テーブル62と、内部ライトバッファ63と、仮想ライトバッファ(Virtual Write Buffer)64とを含む。
L2Pテーブル61は、マッピング情報を保持するテーブルである。マッピング情報は、論理アドレスと、物理アドレスとの間の対応関係を示す情報である。論理アドレスは、ホスト2によって使用されるアクセス対象のデータを識別するアドレスである。論理アドレスとしては、論理ブロックアドレス(LBA)が使用される。一つのLBAは、例えば、1セクタ(例えば4KiB)のデータに対応する。物理アドレスは、NAND型フラッシュメモリ5の物理記憶位置を特定するアドレスである。物理アドレスは、例えば、ブロックアドレスと、ブロック内オフセットとを含む。ブロックアドレスは、個々のブロックを一意に特定可能なアドレスである。NAND型フラッシュメモリ5が複数のNAND型フラッシュダイによって構成されている場合、あるブロックのブロックアドレスは、NAND型フラッシュダイのダイ番号と、このダイ内のブロック番号とによって表されてもよい。ブロック内オフセットは、ブロックに含まれる記憶位置それぞれを一意に特定可能なオフセットアドレスである。ブロック内のある特定の記憶位置のオフセットアドレスは、ブロックの先頭の記憶位置から特定の記憶位置までのセクタの数によって表されてもよい。
ブロック管理テーブル62は、NAND型フラッシュメモリ5の複数のブロックそれぞれを管理するための管理情報を格納するために使用される。ブロック管理テーブル62は、オープンブロックリスト621、クローズブロックリスト622、フリーブロックリスト623を含む。オープンブロックリスト621は、オープン状態であるブロックが登録されているリストである。オープン状態は、このブロックが書き込み先ブロックとして使用中の状態を示す。クローズブロックリスト622は、クローズ状態であるブロックが登録されているリストである。クローズ状態は、このブロックがデータで満たされているアクティブブロックとして管理されている状態を示す。フリーブロックリスト623は、オープンブロックリスト621に新たに割り当てることができるブロックが登録されているリストである。ブロック管理テーブル62が管理する管理情報は、さらに対応するブロックの書き換え回数(プログラム/イレーズサイクルの数)、を含んでいてもよい。
仮想ライトバッファ64は、NAND型フラッシュメモリ5に書き込まれるべきライトデータに関する情報を保持する。仮想ライトバッファ64は、一つの書き込み先ブロックに対応する。仮想ライトバッファ64は、セクタディスクリプタリスト(SDL)を含む。SDLは、例えば、ソースアドレスと、バッファアドレスとを、仮想ライトバッファ64に対応する書き込み先ブロックに書きこまれるべきライトデータの管理サイズ毎に、保持する。管理サイズは、例えば、セクタのサイズ(4KiB)である。ソースアドレスは、書き込み先ブロックに書き込まれるデータが格納されている記憶位置を管理サイズ(セクタ)毎に示すアドレスである。ソースアドレスは、例えば、ライトデータが格納されているホストライトバッファ222における記憶位置を示すメモリアドレス、コピー対象データが格納されているNAND型フラッシュメモリ5のコピー元ブロックにおける記憶位置を示すNAND型フラッシュメモリ5の物理アドレス、等である。バッファアドレスは、書き込み先ブロックに書き込まれるべきデータが格納されている内部ライトバッファ63における位置を管理サイズ(セクタ)毎に示すアドレスである。このように、仮想ライトバッファ64は、書き込み先ブロックに書き込まれるライトデータそのものを保持するのではなく、ソースアドレスと、バッファアドレスと、を保持するために使用されるリストとして、揮発性メモリ(ここでは、DRAM6)に格納される。
次に、CPU42の機能構成例について説明する。CPU42は、フラッシュマネージメント部421として機能する。なお、フラッシュマネージメント部421の一部または全体は、コントローラ4の専用のハードウェアによって実現されてもよい。
フラッシュマネージメント部421は、ホスト2から受信したライトコマンドに基づいて、ライトデータをNAND型フラッシュメモリ5に書き込む。ライトコマンドは、書き込むべきデータ(ライトデータ)をNAND型フラッシュメモリ5に書き込むことを指示するコマンド(ライト要求)である。
ライトコマンドは、ライトデータが格納されているホストライトバッファ222の記憶位置を示すメモリアドレスと、ライトデータのサイズとを指定する。ライトデータのサイズは、セクタのような管理サイズを有する単位データの個数によって指定される。つまり、ライトコマンドは、ライトデータが格納されているホストライトバッファ222のメモリアドレスと、ライトデータに含まれる、第1の管理サイズを有する単位データの個数とを指定する。
また、フラッシュマネージメント部421は、コピーコマンドに基づいて、NAND型フラッシュメモリ5に記憶されているコピー対象データを読み出し、読み出したコピー対象データをNAND型フラッシュメモリ5の別のブロックに書き込む。コピーコマンドは、ホスト2から発行され得る。コピーコマンドは、ホスト2から発行される代わりに、ガベージコレクション動作に基づいて、コントローラ4によって内部的に発行されてもよい。
コピーコマンドは、例えば、コピー元ブロックのブロックアドレスと、コピー対象データが記憶されているコピー元ブロックにおける記憶位置を示すオフセットアドレスと、コピー対象データのサイズと、コピー対象データがコピーされるべきコピー先ブロックのブロックアドレスとを含む。コピー対象データのサイズは、セクタの個数によって指定される。
フラッシュマネージメント部421は、複数のブロックグループを管理する。複数のブロックグループの各々は、NAND型フラッシュメモリ5に含まれている複数のブロックBLK(物理ブロック)のうちの2以上のブロックBLK(物理ブロック)から構成される。ブロックグループは、スーパーブロックとも称される。
次に、複数のNAND型フラッシュメモリダイを含むNAND型フラッシュメモリ5の構成について説明する。図2は、実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係の例を示すブロック図である。
複数のNAND型フラッシュメモリダイの各々は独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作可能な単位として扱われる。図2においては、NANDインタフェース(I/F)43に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として構成されてもよい。バンクは、複数のメモリダイをバンクインタリーブによって並列動作させるための単位として扱われる。図2の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリダイを並列動作させることができる。
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループの単位で実行されてもよい。ブロックグループはスーパーブロックとしても参照される。
一つのブロックグループ、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#1~#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#1~#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
図3には、32個の物理ブロック(ここでは、NAND型フラッシュメモリダイ#1の物理ブロックBLK2、NAND型フラッシュメモリダイ#2の物理ブロックBLK3、NAND型フラッシュメモリダイ#3の物理ブロックBLK7、NAND型フラッシュメモリダイ#4内の物理ブロックBLK4、NAND型フラッシュメモリダイ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリダイ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
次に、ブロック管理について説明する。図4は、実施形態に係るSSD3において実行されるブロック管理について示す図である。
フラッシュマネージメント部421は、複数の書き込み先ブロックを管理する。書き込み先ブロックは、データの書き込みが可能なオープン状態のブロックである。書き込み先ブロックは、オープンブロックリスト621を用いて管理される。フラッシュマネージメント部421がゾーンド・ネームスペース規格で規定された複数のゾーンにそれぞれ対応する複数のブロックを管理するように構成されている場合には、書き込み対象のゾーンに対応するブロックが、書き込み先ブロックとして、割り当てられてもよい。また、フラッシュマネージメント部421がダイグループに関連付けられた領域を管理するように構成されている場合には、書き込み対象の領域に含まれるNAND型フラッシュメモリダイに含まれるブロックの集合から選択されたブロックが、この書き込み対象の領域用の書き込み先ブロックとして、割り当てられてもよい。一つのダイグループは、一つ又は複数のNAND型フラッシュメモリダイを含む。NAND型フラッシュメモリ5に含まれる複数のNAND型フラッシュメモリダイの各々は、一つのダイグループのみに属する。
ホスト2は、SSD3に送信すべきライトコマンドをサブミッションキュー(SQ)221aに格納する。サブミッションキュー221aは、例えば、リングバッファである。サブミッションキュー(SQ)221aは、サブミッションキューテイルポインタ(SQTP)と、サブミッションキューヘッドポインタ(SQHP)とを用いて管理される。ホスト2は、サブミッションキューテイルポインタ(SQTP)によって指定されるエントリに、ライトコマンドを格納する。ホスト2は、サブミッションキュー(SQ)221aに一つのライトコマンドを格納すると、サブミッションキューテイルポインタ(SQTP)を1だけインクリメントする。
サブミッションキューテイルポインタ(SQTP)がインクリメントされたことに応じて、フラッシュマネージメント部421は、サブミッションキューヘッドポインタ(SQHP)によって指定されるエントリに格納されているライトコマンドをフェッチする。フラッシュマネージメント部421は、一つのライトコマンドをフェッチすると、サブミッションキューヘッドポインタ(SQHP)を1だけインクリメントする。
ライトコマンドをフェッチしたときに、フラッシュマネージメント部421は、フェッチしたライトコマンドに関連付けられているライトデータが書き込まれるべきブロックを決定する。
例えば、ライトコマンドによってゾーンが指定されるケースにおいては、フラッシュマネージメント部421は、ライトコマンドによって指定されたゾーンに対応するブロック(スーパーブロック)を選択し、選択したブロック(スーパーブロック)を書き込み先ブロックとして割り当ててもよい。ライトコマンドによって指定されたゾーンに対応するスーパーブロックが既に書き込み先ブロックとして割り当てられている場合には、この処理の実行は省略される。
また、ライトコマンドによって、ダイグループに関連付けられた領域の識別子が指定されるケースにおいては、フラッシュマネージメント部421は、ライトコマンドによって指定された領域の識別子に関連付けられたダイグループに含まれるブロック(スーパーブロック)の集合から一つのブロック(スーパーブロック)を選択し、選択したブロック(スーパーブロック)を、指定された領域用の書き込み先ブロックとして、割り当ててもよい。ライトコマンドによって指定された領域用の書き込み先ブロックが既に割り当てられている場合には、この処理の実行は省略される。
フラッシュマネージメント部421は、あるスーパーブロックを書き込み先ブロックとして割り当てる際、このスーパーブロックに一つの仮想ライトバッファVWBを割り当てる。図4では、スーパーブロックSB#1、スーパーブロックSB#2、…、スーパーブロックSB#nがそれぞれ書き込み先ブロック(Openスーパーブロック)として割り当てられた場合が例示されている。これらスーパーブロックSB#1、スーパーブロックSB#2、…、スーパーブロックSB#nに対して、仮想ライトバッファVWB#1、仮想ライトバッファVWB#2、…、仮想ライトバッファVWB#nがそれぞれ割り当てられる。
フラッシュマネージメント部421は、フェッチしたライトコマンドに関連付けられたライトデータに含まれる単位データそれぞれが格納されているホストライトバッファ222のメモリアドレスそれぞれを示す第1の記憶位置情報を、ソースアドレス(SA)として、仮想ライトバッファ64に格納する。
例えば、フェッチしたライトコマンドに関連付けられたライトデータが書き込まれるべき書き込み先ブロックがスーパーブロックSB#1である場合、フラッシュマネージメント部421は、第1の記憶位置情報を、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納する。スーパーブロックSB#1にデータを書き込むためのライトコマンドをフェッチする度、フラッシュマネージメント部421は、第1の記憶位置情報を、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納する。
また、フェッチしたライトコマンドに関連付けられたライトデータが書き込まれるべき書き込み先ブロックがスーパーブロックSB#2である場合、フラッシュマネージメント部421は、フェッチしたライトコマンドに関連付けられたライトデータに含まれる単位データそれぞれが格納されているホストライトバッファ222のメモリアドレスそれぞれを示す第1の記憶位置情報を、ソースアドレス(SA)として、仮想ライトバッファVWB#2に格納する。スーパーブロックSB#2にデータを書き込むためのライトコマンドをフェッチする度、フラッシュマネージメント部421は、第1の記憶位置情報を、ソースアドレス(SA)として、仮想ライトバッファVWB#2に格納する。以下では、ライトデータをOpenスーパーブロックSB#1に書き込む場合を想定して、フラッシュマネージメント部421による処理を説明する。
フラッシュマネージメント部421は、スーパーブロックSB#1にライトデータを書き込む際、仮想ライトバッファVWB#1のソースアドレス(SA)それぞれが示すホストライトバッファ222上の位置からライトデータを取得する。例えば、スーパーブロックSB#1へのデータの書き込みが開始可能になった場合に、フラッシュマネージメント部421は、仮想ライトバッファVWB#1のソースアドレス(SA)それぞれが示すホストライトバッファ222上の位置からライトデータを取得する。具体的には、フラッシュマネージメント部421は、仮想ライトバッファVWB#1に格納されているソースアドレス(SA)の個数に基づいて、スーパーブロックSB#1に書き込むべき未受信のライトデータのサイズがNAND型フラッシュメモリ5の書き込みサイズに達したか否かを判定してもよい。未受信のライトデータのサイズがNAND型フラッシュメモリ5の書き込みサイズに達した場合、フラッシュマネージメント部421は、仮想ライトバッファVWB#1のソースアドレス(SA)それぞれが示すホストライトバッファ222上の位置から、書き込みサイズを有するライトデータを取得する。
フラッシュマネージメント部421は、取得したライトデータを格納すべき内部ライトバッファ63における位置を示すメモリアドレスそれぞれを決定し、取得したライトデータを、内部ライトバッファ63における決定したメモリアドレスに格納する。フラッシュマネージメント部421は、ライトデータに含まれる単位データそれぞれが格納されている内部ライトバッファ63上のメモリアドレスそれぞれを示す第2の記憶位置情報を、スーパーブロックSB#1へのデータ転送用バッファのバッファアドレス(BA)として、仮想ライトバッファVWB#2に格納する。
フラッシュマネージメント部421は、仮想ライトバッファVWB#1のバッファアドレス(BA)それぞれが示す内部ライトバッファ63上のメモリアドレスからライトデータを取得し、取得したライトデータをスーパーブロックSB#1に書き込む。
スーパーブロックSB#1へのライトデータの書き込みが完了すると、フラッシュマネージメント部421は、そのライトデータに対応するライトコマンドの完了を示す応答を、ホスト2のコンプリーションキュー(CQ)221bに格納する。
また、フラッシュマネージメント部421は、スーパーブロック毎に、スーパーブロックの書き込み未完了領域の先頭位置を示す記憶位置管理情報を管理する。記憶位置管理情報は、アンリーダブルポイントURPと称される。スーパーブロックSB#1へのデータの書き込みによってスーパーブロックSB#1の読み出し可能領域が拡大した場合、フラッシュマネージメント部421は、スーパーブロックSB#1のアンリーダブルポイントURPを更新する。読み出し可能領域は、データを読み出し可能な領域である。更新されたアンリーダブルポイントURPは、スーパーブロックSB#1の書き込み完了領域の終端の記憶位置を示すオフセットアドレスに1を加えた値を示す。
スーパーブロックSB#1に未書き込み領域が無くなると、スーパーブロックSB#1のアンリーダブルポイントURPの値は、スーパーブロックSB#1の終端の記憶位置のオフセットアドレスに1を加えた値となる。つまり、アンリーダブルポイントURPの値は、スーパーブロックSB#1の容量に対応する値に一致する。この場合、フラッシュマネージメント部421は、クローズブロックリスト622を使用して、スーパーブロックSB#1をクローズ状態のスーパーブロック(Closeスーパーブロック)として管理する。このとき、フラッシュマネージメント部421は、仮想ライトバッファVWB#1をスーパーブロックSB#1から解放する。これにより、仮想ライトバッファVWB#1は、新たな書き込み先ブロックとして割り当てられる別のスーパーブロックに対するライトデータの管理に使用可能となる。
クローズブロックリスト622で管理されているスーパーブロックに格納されている有効データが全て無効データになると、フラッシュマネージメント部421は、フリーブロックリスト623を使用して、そのスーパーブロックをフリーブロックとして管理する。有効データは、論理アドレスに関連付けられている物理アドレスによって示される記憶位置に記憶されているデータである。無効データは、論理アドレスに関連付けられていない物理アドレスによって示される記憶位置に記憶されているデータである。
次に、スーパーブロックと、仮想ライトバッファ64との関係について説明する。図5は、実施形態に係るSSD3において使用される、スーパーブロックと、仮想ライトバッファ64との関係について示す図である。図5において、スーパーブロックSBの記憶領域と、このスーパーブロックSBに割り当てられた仮想ライトバッファVWBのセクタディスクリプタリスト(SDL)が示されている。
スーパーブロックSBの記憶領域には、読み出し可能領域(Readable Area、Readable)と、ライトデータ受信済み領域(Write Data Received、Received)と、ライトデータ未受信領域(Un received)と、未書き込み領域(Unwritten Area)とが含まれる。
読み出し可能領域は、データ書き込み動作が完了している記憶領域である。例えば、スーパーブロックSBの最初の記憶位置から8番目の記憶位置までの計8個の記憶位置へのデータの書き込みが完了している場合、これら8個の記憶位置は、読み出し可能領域に属する。読み出し可能領域の先頭の記憶位置のオフセットアドレスは、例えば、オフセット+0である。8番目の記憶位置のオフセットアドレスは、例えば、オフセット+7である。
ライトデータ受信済み領域は、書き込まれるべきライトデータが格納されている記憶位置を示すソースアドレスが仮想ライトバッファVWBに登録されている記憶領域である。例えば、スーパーブロックSBの9番目の記憶位置から16番目の記憶位置までの計8個の記憶位置に書き込まれるべきライトデータが格納されている記憶位置を示すソースアドレスが仮想ライトバッファVWBに登録されている場合、これら8個の記憶位置は、ライトデータ受信済み領域に属する。9番目の記憶位置のオフセットアドレスは、オフセット+8である。16番目の記憶位置のオフセットアドレスは、オフセット+15である。
ライトデータ未受信領域は、書き込まれるべきライトデータが格納されている記憶位置を示すソースアドレスが仮想ライトバッファVWBに登録されていない記憶領域である。例えば、スーパーブロックSBの17番目の記憶位置から24番目の記憶位置までの計8個の記憶位置に書き込まれるべきライトデータが格納されている記憶位置を示すソースアドレスが仮想ライトバッファVWBに登録されていない場合、これら8個の記憶位置は、ライトデータ未受信領域に属する。17番目の記憶位置のオフセットアドレスは、オフセット+16である。24番目の記憶位置のオフセットアドレスは、オフセット+23である。
未書き込み領域は、書き込まれるべきライトデータに対応するライトコマンドが受信されていない記憶領域である。
読み出し可能領域以外の他の全ての領域が、書き込み未完了領域に対応する。
仮想ライトバッファVWBは、セクタディスクリプタリスト(SDL)を使用して、スーパーブロックSBの全記憶領域のうちの一部の記憶領域に書き込まれるべきライトデータのソースアドレス(SA)およびバッファアドレス(BA)を、セクタ毎に保持する。ソースアドレス(SA)およびバッファアドレス(BA)が保持される記憶領域の範囲、つまり、仮想ライトバッファVWBによって管理されるスーパーブロックSBの記憶領域の範囲は、スーパーブロックSBへの書き込み動作の進行に応じて、スーパーブロックSBの先頭から終端に向けてシフトされる。最初は、仮想ライトバッファVWBによって管理されるスーパーブロックSBの記憶領域の範囲の先頭位置は、スーパーブロックSBの先頭の記憶位置に一致する。スーパーブロックSBへの書き込み動作の進行に応じて、スーパーブロックSBの読み出し可能領域は拡大する。読み出し可能領域が拡大するに連れて、仮想ライトバッファVWBによって管理されるスーパーブロックSBの記憶領域の範囲の先頭位置は、スーパーブロックSBの終端に向けて徐々にシフトされる。
SDLは、WBO(virtual Write Buffer start Offset)、URP(Un-Readable Point)、WP(Writable Point)、およびWBS(virtual Write Buffer Size)を用いて制御される。
WBOは、仮想ライトバッファVWBの開始オフセットアドレスである。仮想ライトバッファVWBの開始オフセットアドレスは、仮想ライトバッファVWBによって管理されるスーパーブロックSBの記憶領域の範囲の先頭位置を示すオフセットアドレスである。スーパーブロックSBがオープン状態に遷移した直後にスーパーブロックSBに割り当てられた仮想ライトバッファVWBのWBOは、例えば、0である。WBOが0である場合、WBOは、スーパーブロックSBの先頭の記憶位置(オフセットアドレス=+0)を示す。
URPは、スーパーブロックSBの書き込み未完了領域の最小オフセットアドレスである。つまり、URPは、スーパーブロックSBの書き込み未完了領域の先頭位置を示す。なお、URPは、スーパーブロックSBに対応するブロック管理テーブル62を使用して管理される。したがって、スーパーブロックSBの状態がクローズスーパーブロックに遷移した後であっても、URPは、このスーパーブロックSBに対応するブロック管理テーブル62に維持される。スーパーブロックSBがオープン状態に遷移した直後にスーパーブロックSBに割り当てられた仮想ライトバッファVWBのURPは、例えば、0である。URPが0である場合、URPは、スーパーブロックSBの先頭の記憶位置(オフセットアドレス=+0)を示す。
WPは、ライトデータが受信されていない最小オフセットアドレスである。WPは、ライトデータ未受信領域の先頭の記憶位置を示す。スーパーブロックSBがオープン状態に遷移した直後にスーパーブロックSBに割り当てられた仮想ライトバッファVWBのWPは、例えば、0である。WPが0である場合、WPは、スーパーブロックSBの先頭の記憶位置(オフセットアドレス=+0)を示す。
WBSは、仮想ライトバッファVWBを用いて管理されるセクタの数を示す。つまり、WBSは、SDLのサイズ(SDLのエントリの数)を示す情報である。
SDLは、複数のエントリを含む。SDLに含まれるエントリの数は、例えば、WBSによって示されるセクタ数と同数である。SDLの一つのエントリは、一つのオフセットアドレスによって示される、スーパーブロックSBの一つの記憶位置に関連付けられている。スーパーブロックSBの一つの記憶位置は、1セクタに対応する。
SDLのエントリは、識別子(ID)と、ソースアドレス(SA)と、バッファアドレス(BA)と、その他の情報とを保持する。
IDは、スーパーブロックSBの記憶位置(セクタ)への書き込みを要求したコマンド(ライトコマンド、またはコピーコマンド)の識別子である。
ソースアドレス(SA)は、スーパーブロックSBの記憶位置(セクタ)に書き込むべきデータが格納されている記憶位置を示すアドレスである。ソースアドレス(SA)は、例えば、ホストライトバッファ222のメモリアドレス、または、NAND型フラッシュメモリ5の物理アドレスである。なお、書き込むべきデータが既に内部ライトバッファ63に存在する場合には、内部ライトバッファ63のメモリアドレスが、ソースアドレス(SA)として使用されてもよい。
バッファアドレス(BA) は、スーパーブロックSBの記憶位置(セクタ)に書き込むべきデータが格納されている内部ライトバッファ63の記憶位置を示すアドレスである。書き込むべきデータが内部ライトバッファ63に存在していない場合、バッファアドレス(BA)として、無効なアドレスが保持されていてもよい。
図5におけるSDLでは、WBOによって示されるオフセットアドレスに書き込むべきライトデータに対応するエントリに、識別子(ID)Xと、ソースアドレス(SA)Xと、バッファアドレス(BA)Xと、が格納されている。このライトデータの書き込みが完了して、このライトデータがスーパーブロックSBから読み出し可能になると、コントローラ4は、URPを、識別子(ID)Yと、ソースアドレス(SA)Yと、バッファアドレス(BA)Yとが格納されているエントリを示すように更新する。そして、コントローラ4は、バッファアドレス(BA)Xによって示される内部ライトバッファ63の記憶位置からホスト2のメモリ22へのデータ転送が実行されていないことを確認してから、WBOを、識別子(ID)Yと、ソースアドレス(SA)Yと、バッファアドレス(BA)Yとが格納されているエントリを示すように更新する。識別子(ID)Xと、ソースアドレス(SA)Xと、バッファアドレス(BA)Xと、が格納されているエントリは、解放される。この解放されたエントリは、スーパーブロックSBに書き込むべき新たなライトデータの管理に利用可能となる。
次に、SDLの更新動作について説明する。図6は、実施形態に係るメモリシステムにおいて実行される仮想ライトバッファ64のSDLの更新動作を示す図である。
図6におけるSDLは、識別子Xに対応するライトデータに対応するエントリ、識別子Yに対応するライトデータに対応するエントリ、…を有する。識別子Xに対応するライトデータと、識別子Yに対応するライトデータとは、内部ライトバッファ63に格納されているが、未だ読み出し可能でないデータである。
まず、識別子Xに対応するライトデータをNAND型フラッシュメモリ5に書き込むデータ書き込み動作が実行される。データ書き込み動作が完了すると、識別子Xに対応するライトデータが読み出し可能なデータになる。これにより、読み出し可能領域が拡大することに基づいて、コントローラ4は、URPを更新する。例えば、SSD3がフォギー・ファインプログラム動作のような複数段階のデータ書き込み動作を実行する場合、コントローラ4は、識別子Xに対応するライトデータをNAND型フラッシュメモリ5に書き込むファインプログラム動作が完了したことに応じて、URPを更新する。フォギー・ファインプログラム動作は、フォギープログラム動作と、ファインプログラム動作とを含む。フォギープログラム動作は、書き込み先の記憶位置の各メモリセルの閾値電圧を粗く設定するプログラム動作である。フォギープログラム動作のみが実行された記憶位置に格納されているデータは、まだ正常に読み出すことができないデータである。ファインプログラム動作は、書き込み先の記憶位置の各メモリセルの閾値電圧を調整して各メモリセルの閾値電圧を目標閾値電圧に設定するプログラム動作である。書き込み先の記憶位置に格納されているデータは、ファインプログラム動作が実行されることによって、読み出し可能になる。
コントローラ4がURPを更新したことで、識別子Xに対応するライトデータに対応するエントリは、WBOとURPとの間にあるエントリになる。WBOとURPとの間にあるエントリに対応するライトデータは、読み出し可能なライトデータであると判定される。
識別子Xに対応するライトデータが読み出し可能なライトデータであるため、コントローラ4は、WBOを更新することによって、識別子Xに対応するライトデータに対応するエントリを解放する。このとき、コントローラ4は、識別子Xに対応するバッファアドレス(BA)Xによって示される内部ライトバッファ63の記憶位置からホスト2のメモリ22へのデータ転送が実行されていないことを確認してから、WBOの更新を実行する。解放されたエントリは、新たなライトデータに対応するエントリとして使用され得る。
WPは、ホスト2からのライトコマンドに基づくSDLへのソースアドレス(SA)の登録の進行に応じて、更新される。
次に、URPの更新幅と、仮想ライトバッファVWBのサイズ(WBS)について説明する。
コントローラ4は、仮想ライトバッファVWBを使用することにより、様々な世代の不揮発性メモリを制御することができる。
メモリセル当たりに書き込まれるビット数は、不揮発性メモリの種類によって異なる。シングルレベルセル(SLC)-フラッシュメモリにおいては、メモリセル当たりに書き込まれるビット数は、1ビットである。クワドレベルセル(QLC)-フラッシュメモリにおいては、メモリセル当たりに書き込まれるビット数は、4ビットである。
不揮発性メモリのメモリセルアレイに含まれるプレーンの数は、不揮発性メモリの種類によって異なる。例えば、2プレーンのマルチプレーン構成を有する不揮発性メモリでは、2つのプレーンに対するデータ書き込み動作が同時に実行される。また、4プレーンのマルチプレーン構成を有する不揮発性メモリでは、4つのプレーンに対するデータ書き込み動作が同時に実行される。
データを書き込みためのプログラム動作も、不揮発性メモリの種類によって異なる。プログラム動作には、例えば、フルシーケンスプログラム動作、フォギー・ファインプログラム動作、等がある。フルシーケンスプログラム動作は、一回のプログラム動作によって、一つの記憶位置にデータを書き込むプログラム動作である。この一回のプログラム動作が実行された記憶位置に格納されているデータは、読み出し可能なデータである。
ここで、SLCモードでNAND型フラッシュメモリ5にデータを書き込む場合を想定する。書き込み単位は、例えば、16KiB(=16KiB×1ビット(SLC)×1プレーン)である。16KiBは、ページサイズの一例である。セクタが4KiBである場合、4セクタが書き込み単位に対応する。
この場合、URPは、4セクタの単位、つまり4オフセットアドレスの単位で、更新される。また、WBSは、16KiB以上、つまり4セクタ以上に設定される。
次に、フォギー・ファインプログラム動作を使用して、QLCモードでNAND型フラッシュメモリ5にデータを書き込む場合を想定する。例えば、複数のワード線(WL)の各々が4つのストリングユニット(SU0~SU3)を含む場合、書き込み単位は、例えば、128KiB(=16KiB×4ビット(QLC)×2プレーン)である。セクタが4KiBである場合、32セクタが書き込み単位に対応する。この場合、URPは、32セクタの単位、つまり32オフセットアドレスの単位で、更新される。
複数のワード線(WL)の各々が4つのストリングユニット(SU0~SU3)を含む場合、WBSは、640KiB(=128KiB×5)以上、つまり160セクタ以上に設定される。なぜなら、メモリセルグループ(WLx、SUy)に対するファインプログラム動作は、メモリセルグループ(WL(x+1)、SUy)に対するフォギープログラム動作が完了した後に実行されるので、書き込み単位の5倍のサイズのライトデータを内部ライトバッファ63に保持することが必要となるからである。
このように、URPの更新幅と、仮想ライトバッファVWBのサイズ(WBS)を調整することによって、様々な世代の不揮発性メモリを制御することが可能となる。
次に、仮想ライトバッファ64に登録されるソースアドレスの種類について説明する。図7は、実施形態に係るSSD3の仮想ライトバッファ64に登録されるソースアドレスの種類を示す図である。
(1)ライトコマンド
ホスト2からライトコマンドを受信した場合、SSD3のコントローラ4は、受信したライトコマンドに関連付けられたデータD1が書き込まれるべき書き込み先スーパーブロックSB#1と、この書き込み先スーパーブロックSB#1内の書き込み先記憶位置とを決定する。そして、コントローラ4は、受信したライトコマンドに関連付けられたデータD1に含まれる単位データそれぞれが格納されているホストライトバッファ222のメモリアドレスそれぞれを、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納する。そして、データD1を書き込み先スーパーブロックSB#1に書き込む際、コントローラ4は、データD1をホストライトバッファ222から内部ライトバッファ63に転送する。
ホスト2からライトコマンドを受信した場合、SSD3のコントローラ4は、受信したライトコマンドに関連付けられたデータD1が書き込まれるべき書き込み先スーパーブロックSB#1と、この書き込み先スーパーブロックSB#1内の書き込み先記憶位置とを決定する。そして、コントローラ4は、受信したライトコマンドに関連付けられたデータD1に含まれる単位データそれぞれが格納されているホストライトバッファ222のメモリアドレスそれぞれを、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納する。そして、データD1を書き込み先スーパーブロックSB#1に書き込む際、コントローラ4は、データD1をホストライトバッファ222から内部ライトバッファ63に転送する。
(2)コピーコマンド
コピー対象データD2を書き込み先スーパーブロックSB#1にコピーするコピーコマンドをホスト2から受信した場合、SSD3のコントローラ4は、コピー対象データD2に含まれる単位データそれぞれが格納されているコピー元ブロック(ここでは、スーパーブロックSB#x)の物理アドレス(ブロックアドレスと、オフセットアドレス)それぞれを、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納する。そして、コピー対象データD2をコピー先ブロックである書き込み先スーパーブロックSB#1にコピーする際、コントローラ4は、ソースアドレス(SA)それぞれに基づいてデータD1をスーパーブロックSB#xから読み出し、読み出したデータD1を内部ライトバッファ63に転送する。ガベージコレクションのためのコピー動作においても、コピー元ブロックの物理アドレスそれぞれが、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納される。
コピー対象データD2を書き込み先スーパーブロックSB#1にコピーするコピーコマンドをホスト2から受信した場合、SSD3のコントローラ4は、コピー対象データD2に含まれる単位データそれぞれが格納されているコピー元ブロック(ここでは、スーパーブロックSB#x)の物理アドレス(ブロックアドレスと、オフセットアドレス)それぞれを、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納する。そして、コピー対象データD2をコピー先ブロックである書き込み先スーパーブロックSB#1にコピーする際、コントローラ4は、ソースアドレス(SA)それぞれに基づいてデータD1をスーパーブロックSB#xから読み出し、読み出したデータD1を内部ライトバッファ63に転送する。ガベージコレクションのためのコピー動作においても、コピー元ブロックの物理アドレスそれぞれが、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納される。
(3)書き込むべきライトデータが既に内部ライトバッファに存在する場合
書き込むべきライトデータが既に内部ライトバッファ63に存在する場合、ライトデータに含まれる単位データそれぞれが格納されている内部ライトバッファ63のメモリアドレスそれぞれが、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納される。この場合、ソースアドレス(SA)とバッファアドレス(BA)とが等しいので、ソースアドレス(SA)からバッファアドレス(BA)へのライトデータの転送は、不要となる。
書き込むべきライトデータが既に内部ライトバッファ63に存在する場合、ライトデータに含まれる単位データそれぞれが格納されている内部ライトバッファ63のメモリアドレスそれぞれが、ソースアドレス(SA)として、仮想ライトバッファVWB#1に格納される。この場合、ソースアドレス(SA)とバッファアドレス(BA)とが等しいので、ソースアドレス(SA)からバッファアドレス(BA)へのライトデータの転送は、不要となる。
次に、ライト動作について説明する。図8は、実施形態に係るSSD3において実行されるライト動作の手順を示すフローチャートである。
まず、コントローラ4は、スーパーブロックを書き込み先ブロックとして割り当てる(ステップS101)。コントローラ4は、フリーブロックリスト623に割り当てられているスーパーブロックから、スーパーブロックを選択する。コントローラ4は、選択したスーパーブロックに対してイレーズ動作を実行する。そして、コントローラ4は、イレーズ動作を実行したスーパーブロックを書き込み先ブロックとして割り当てる。
コントローラ4は、書き込み先ブロックとして割り当てられたスーパーブロックに仮想ライトバッファ64を割り当てる(ステップS102)。既に書き込み先ブロックとしてスーパーブロックが割り当てられている場合、コントローラ4は、ステップS101およびステップS102の手順を省略する。なお、ここでは、スーパーブロック(書き込み先ブロック)に対するイレーズ動作を実行した後に書き込み先ブロックに仮想ライトバッファ64を割り当てる場合を説明したが、書き込み先ブロックに仮想ライトバッファ64を割り当てた後に、書き込み先ブロックに対するイレーズ動作が実行されてもよい。例えば、仮想ライトバッファ64に初めて書き込みサイズ分の個数のソースアドレスが蓄積された場合に、書き込み先ブロックに対するイレーズ動作を実行してもよい。
コントローラ4は、ホスト2からライトコマンドが受信されたか否かを判定する(ステップS103)。コントローラ4は、サブミッションキュー(SQ)221aに、ライトコマンドが格納されているか否かを判定する。
ホスト2からライトコマンドが受信されていない場合(ステップS103でNo)、コントローラ4は、ライトコマンドが受信されるまで待つ。
ホスト2からライトコマンドを受信した場合(ステップS103でYes)、コントローラ4は、仮想ライトバッファ64のセクタディスクリプタリスト(SDL)に、ソースアドレス(SA)を格納する(ステップS104)。この場合、コントローラ4は、受信したライトコマンドに関連付けられたライトデータが書き込まれるべきスーパーブロック内のオフセットアドレスを決定する。コントローラ4は、決定したオフセットアドレスと、受信したライトコマンドによって指定されたセクタの数とに基づいて、ソースアドレス(SA)を格納するSDLのエントリそれぞれを決定する。コントローラ4は、受信したライトコマンドに関連付けられたライトデータが記憶されている記憶位置を示すSAを、決定したエントリに格納する。コントローラ4は、SDLのWPを更新する。
コントローラ4は、書き込み動作が開始可能であるか否かを判定する(ステップS105)。コントローラ4は、書き込み先ブロックに書き込まれるべきライトデータの総サイズが書き込みサイズに達しているか否かを判定する。コントローラ4は、SDLに格納されているSAの数を参照することで、ライトデータの総サイズを把握してもよい。
書き込み動作が開始可能でない場合(ステップS105でNo)、コントローラ4は、ホスト2から後続のライトコマンドが受信されるまで待つ(ステップS103)。
書き込み動作が開始可能である場合(ステップS105でYes)、コントローラ4は、ステップS106~S108の処理を実行して、ライトデータを書き込み先ブロックに書き込む。なお、ステップS103の処理と、ステップS106~S108の処理とは、並行して実行されてもよい。この場合、たとえ書き込み動作が開始可能であっても(ステップS105でYes)、ライトコマンドが受信された場合には、コントローラ4は、ステップS106~S108の処理と並行して、ソースアドレス(SA)をSDLのエントリに格納する処理を実行できる。
書き込み動作が開始可能である場合(ステップS105でYes) 、コントローラ4は、内部ライトバッファ63の記憶位置を示すバッファアドレス(BA)を決定し、SAが示す記憶位置からBAが示す記憶位置にライトデータを転送する(ステップS106)。コントローラ4は、ライトデータに含まれる単位データそれぞれが格納されるべき内部ライトバッファ63の記憶位置を示すBAを決定する。コントローラ4は、SAが示す記憶位置からライトデータを読み出し、BAが示す記憶位置に読み出したライトデータを格納する。
コントローラ4は、決定したBAを仮想ライトバッファ64のSDLに格納する(ステップS107)。なお、ここでは、ライトデータを内部ライトバッファ63に転送した後にBAを仮想ライトバッファ64のSDLに格納する場合を説明したが、最初にBAを仮想ライトバッファ64のSDLに格納し、その後、ライトデータを内部ライトバッファ63に転送してもよい。この場合、SDLの各エントリには、ライトデータが内部ライトバッファ63に転送されているか否かを示すフラグが保持されていてもよい。
コントローラ4は、内部ライトバッファ63に転送されたライトデータを書き込み先ブロックに書き込む(ステップS108)。
コントローラ4は、読み出し可能領域が拡大したか否かを判定する(ステップS109)。コントローラ4は、ステップS108のデータ書き込み動作で、新たに読み出し可能になったデータがあるか否かを判定する。
読み出し可能領域が拡大していない場合(ステップS109でNo)、コントローラ4は、ホスト2から後続のライトコマンドが受信されるまで待つ(ステップS103)。
読み出し可能領域が拡大した場合(ステップS109でYes)、コントローラ4は、URPを更新する(ステップS110)。コントローラ4は、新たに読み出し可能になったライトデータに対応するSDLのエントリの次のエントリを示すようにURPを更新する。これにより、URPは、書き込み未完了領域の先頭の記憶位置を示す。
コントローラ4は、新たに読み出し可能になったライトデータに対応するSDLのBAによって示される内部ライトバッファ63の記憶位置からホスト2のメモリ22へのデータ転送が実行されていないことを確認してから、WBOを更新する(ステップS111)。新たに読み出し可能になったライトデータに対応するSDLのBAによって示される内部ライトバッファ63の記憶位置からホスト2のメモリ22へのデータ転送が実行されていないことを確認すると、コントローラ4は、更新されたURPと同じ位置を示すようにWBOを更新する。これにより、新たに読み出し可能になったライトデータに対応するエントリは解放される。
コントローラ4は、URPと、書き込み先ブロックの容量が同じであるか否かを判定する(ステップS112)。つまり、コントローラ4は、URPが書き込み先ブロックの書き込み完了領域の終端の記憶位置を示すオフセットアドレスに1を加えた値であるか否かを判定する。
URPと、書き込み先ブロックの容量が同じでない場合(ステップS112でNo)、コントローラ4は、ホスト2から後続のライトコマンドが受信されるまで待つ(ステップS103)コントローラ4は、書き込み先ブロックが書き込み未完了領域を有すると判定する。
URPと、書き込み先ブロックの容量が同じである場合(ステップS112でYes)、コントローラ4は、仮想ライトバッファ64を解放する(ステップS113)。URPが書き込み先ブロックの書き込み完了領域の終端の記憶位置を示すオフセットアドレスに1を加えた値である場合、コントローラ4は、書き込み先ブロックをクローズブロックリスト622に登録する。クローズブロックリスト622に登録されたスーパーブロックは、仮想ライトバッファ64との割り当てが解除される。割り当てが解除された仮想ライトバッファ64は、新たなスーパーブロックが書き込み先ブロックに割り当てられたときに利用可能な状態になる。
そして、コントローラ4は、ホスト2からライトコマンドが受信されたか否かを判定する(ステップS113)。
ホスト2からライトコマンドが受信されていない場合(ステップS113でNo)、コントローラ4は、ライト動作を終了する。
ホスト2からライトコマンドが受信された場合(ステップS113でYes)、コントローラ4は、ステップS101に戻り、新たなスーパーブロックSBを書き込み先ブロックとして割り当てる。
次に、リード動作について説明する。図9は、実施形態に係るSSD3において実行されるリード動作の手順を示すフローチャートである。
まず、コントローラ4は、受信したリードコマンドが指定するSBO(Super Block Offset)がURP未満であるか否かを判定する(ステップS201)。コントローラ4は、L2Pテーブル61を用いて、リードコマンドが指定する論理アドレスに対応する物理アドレスを特定する。物理アドレスは、SBA(Super Block Address)と、SBOとを含む。SBAは、スーパーブロックを識別するブロックアドレスである。SBOは、スーパーブロックに含まれる記憶位置それぞれを一意に特定可能なオフセットアドレスである。
SBOがURP未満である場合(ステップS201でYes)、コントローラ4は、リードコマンドが指定するデータがNAND型フラッシュメモリ5から読み出し可能であると判定する。コントローラ4は、NAND型フラッシュメモリ5からデータを読み出す(ステップS202)。
コントローラ4は、読み出したデータをホスト2に転送する(ステップS203)。
そして、コントローラ4は、リード動作を終了する。
SBOがURP以上である場合(ステップS201でNo)、コントローラ4は、仮想ライトバッファ64にバッファアドレス(BA)が割り当て済みであるか否かを判定する(ステップS204)。コントローラ4は、リードコマンドに関連付けられたデータに対応するエントリにBAが格納されているか否かを判定する。
仮想ライトバッファ64にBAが割り当てられている場合(ステップS204でYes)、コントローラ4は、BAが示す内部ライトバッファ63の記憶位置からデータを読み出す(ステップS205)。
コントローラ4は、読み出したデータをホスト2に転送する(ステップS203)。
そして、コントローラ4は、リード動作を終了する。
仮想ライトバッファ64にBAが割り当てられていない場合(ステップS204でNo)、コントローラ4は、SAが示す記憶位置から、BAが示す内部ライトバッファ63の記憶位置にデータを転送する(ステップS206)。コントローラ4は、内部ライトバッファ63の記憶位置を示すBAを決定する。そして、コントローラ4は、SAが示す記憶位置からリードコマンドが指定するデータを読み出し、決定したBAが示す内部ライトバッファ63の記憶位置に読み出したデータを格納する。
コントローラ4は、BAが示す内部ライトバッファ63の記憶位置から、リードコマンドによって指定されたデータを読み出す(ステップS207)。
コントローラ4は、読み出したデータをホスト2に転送する(ステップS203)。
そして、コントローラ4は、リード動作を終了する。
以上説明したように、本実施形態によれば、コントローラ4は、仮想ライトバッファ64を用いて、NAND型フラッシュメモリ5に書き込まれるべきデータを管理することができる。
コントローラ4は、ホスト2からライトコマンドを受信した際に、ライトコマンドに関連付けられたライトデータをセクタサイズ毎に、セクタディスクリプタリスト(SDL)のエントリに対応付ける。コントローラ4は、ライトデータが格納されているホスト2の記憶位置を示すアドレスをソースアドレス(SA)としてSDLの各エントリに格納する。これにより、コントローラ4は、SDLのソースアドレス(SA)の数を参照することによって、ライトデータの総サイズを確認することができる。
このことは、ライトデータを内部ライトバッファ63に保持することなく、ライトデータの総サイズを確認することができる。そのため、ライトデータを内部ライトバッファ63に格納することで、ライトデータの総サイズを確認する場合と比較して、必要とされる内部ライトバッファ63のサイズを小さくすることができる。
また、コントローラ4は、データをNAND型フラッシュメモリ5の書き込み先ブロックに書き込む際に、書き込まれるデータを内部ライトバッファ63に格納した際の内部ライトバッファ63の記憶位置を示すアドレスをバッファアドレス(BA)としてSDLに格納する。この動作は、ホスト2から発行されたライトコマンド、あるいはコピーコマンドに基づいて実行された場合のそれぞれで共通の動作である。コントローラ4は、コマンドの種類に依らず、BAを参照することで内部ライトバッファ63に格納されているデータを読み出すことができる。
これにより、コントローラ4は、ライトコマンドで指定されたデータと、コピーコマンドで指定されたデータとを、同一の書き込み先ブロックに書き込むことも出来る。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、更新を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、40…バス、41…ホストインタフェース、42…CPU、43…NANDインタフェース、44…DRAMインタフェース、45…DMAC、46…SRAM、47…ECCエンコード/デコード部、61…L2Pテーブル、62…ブロック管理テーブル、63…内部ライトバッファ、64…仮想ライトバッファ(VWB)、421…フラッシュマネージメント部、SB…ブロックグループ(スーパーブロック)。
Claims (9)
- メモリを備えるホストに接続可能なメモリシステムであって、
不揮発性メモリと、
揮発性メモリと、
前記不揮発性メモリと前記揮発性メモリとに電気的に接続され、前記不揮発性メモリの複数のブロックから割り当てられた複数の書き込み先ブロックを管理するように構成されたコントローラと、を具備し、
前記コントローラは、
第1の書き込み先ブロックに書き込む第1のデータが格納されている前記ホストのメモリ上の位置を示すメモリアドレスと、前記第1のデータに含まれる、第1の管理サイズを有する単位データの個数と、を指定するライトコマンドを、前記ホストから受信し、
前記第1の書き込み先ブロックに前記揮発性メモリに保存される第1のリストを割り当て、
前記第1のデータに含まれる単位データそれぞれが格納されている前記ホストのメモリ上の位置を示すメモリアドレスそれぞれを、第1の記憶位置情報として、前記第1のリストに格納し、
前記第1のデータを前記不揮発性メモリに書き込む際、前記第1のリストの前記第1の記憶位置情報が示す前記ホストのメモリ上の位置から前記第1のデータを取得し、前記取得した第1のデータを前記揮発性メモリに格納し、
前記第1のデータに含まれる単位データそれぞれが格納された前記揮発性メモリ上の位置を示すメモリアドレスそれぞれを、第2の記憶位置情報として、前記第1のリストに格納し、
前記第1のリストの前記第2の記憶位置情報が示す前記揮発性メモリ上の位置から前記第1のデータを取得し、前記取得した第1のデータを前記第1の書き込み先ブロックに書き込み、
前記第1の書き込み先ブロックへの前記第1のデータの書き込みの完了によって前記第1の書き込み先ブロックの読み出し可能領域が拡大した場合、前記第1の書き込み先ブロックの書き込み未完了領域の先頭位置を示す記憶位置管理情報を更新し、
前記記憶位置管理情報によって示される前記書き込み未完了領域の先頭位置が前記第1の書き込み先ブロックの終端の記憶位置を超えた場合、前記第1のリストを前記第1の書き込み先ブロックから解放するように構成されている、
メモリシステム。 - 前記コントローラは、
前記第1のデータに対応する論理アドレスを指定するリードコマンドを前記ホストから受信したことに応じ、論理物理アドレス変換テーブルを参照し、前記第1の書き込み先ブロックのブロックアドレスと前記第1の書き込み先ブロック内のオフセットアドレスとを示す物理アドレスを取得し、
前記オフセットアドレスが、前記記憶位置管理情報が示す値未満である場合、前記第1のデータを前記第1の書き込み先ブロックから読み出し、読み出した前記第1のデータを前記ホストに転送し、
前記オフセットアドレスが、前記記憶位置管理情報が示す値以上である場合、前記第1のリストに格納されている前記第2の記憶位置情報が示す前記揮発性メモリ上の位置から前記第1のデータを読み出し、読み出した前記第1のデータを前記ホストに転送するように構成されている、
請求項1に記載のメモリシステム。 - 前記コントローラは、
前記オフセットアドレスが、前記記憶位置管理情報が示す値以上であり、且つ、前記第1のリストに前記第2の記憶位置情報が格納されていない場合、前記第1のリストに格納されている前記第1の記憶位置情報が示す前記ホストのメモリ上の位置から前記揮発性メモリに前記第1のデータを転送し、前記揮発性メモリに転送された前記第1のデータを前記ホストに転送するように構成されている、
請求項2に記載のメモリシステム。 - 前記コントローラは、
前記第1の書き込み先ブロックにコピーするコピー対象データが格納されているコピー元ブロックにおける位置を示す前記不揮発性メモリの物理アドレスと、前記コピー対象データに含まれる、前記第1の管理サイズを有する単位データの個数と、を指定するコピーコマンドを、前記ホストから受信し、
前記コピー対象データに含まれる単位データそれぞれが格納されている前記コピー元ブロックにおける位置を示す物理アドレスそれぞれを、前記第1の記憶位置情報として、前記第1のリストに格納し、
前記コピー対象データを前記第1の書き込み先ブロックにコピーする際、前記第1のリストの前記第1の記憶位置情報が示す前記コピー元ブロックにおける位置から前記コピー対象データを読み出し、前記読み出したコピー対象データを前記揮発性メモリに格納し、
前記コピー対象データに含まれる単位データそれぞれが格納された前記揮発性メモリ上の位置を示すメモリアドレスそれぞれを、前記第2の記憶位置情報として、前記第1のリストに格納し、
前記第1のリストの前記第2の記憶位置情報が示す前記揮発性メモリ上の位置から前記コピー対象データを取得し、前記取得したコピー対象データを前記第1の書き込み先ブロックに書き込むようにさらに構成されている、
請求項1に記載のメモリシステム。 - 前記コントローラは、
前記第1のリストの前記第1の記憶位置情報が示す前記ホストの前記メモリアドレスの個数が前記不揮発性メモリの書き込み単位に達した場合、前記第1のリストの前記第1の記憶位置情報が示す前記ホストのメモリ上の位置から前記第1のデータを取得するように構成されている、
請求項1に記載のメモリシステム。 - メモリを備えるホストに接続可能なメモリシステムであって、
不揮発性メモリと
前記不揮発性メモリに書き込むデータを一時的に記憶する揮発性メモリと、
前記不揮発性メモリと前記揮発性メモリとに電気的に接続され、前記不揮発性メモリの複数のブロックから割り当てられた複数の書き込み先ブロックを管理するように構成されたコントローラと、を具備し、
前記コントローラは、
前記複数のブロックのうちの第1のブロックを書き込み先ブロックとして割り当てる際、前記第1のブロックに書き込まれるデータが格納されている記憶位置を第1の管理サイズ毎に示すソースアドレスそれぞれと、前記第1のブロックへのデータ転送用バッファとして使用される前記揮発性メモリにおける位置を前記第1の管理サイズ毎に示すバッファアドレスそれぞれとを保持するための第1のリストを前記第1のブロックに割り当て、
前記第1のブロックに書き込む第1のデータが格納されている前記ホストのメモリ上の位置を示すメモリアドレスと、前記第1のデータに含まれる、前記第1の管理サイズを有する単位データの個数と、を指定するライトコマンドを、前記ホストから受信し、
前記第1のデータに含まれる前記第1の管理サイズを有する単位データそれぞれが格納されている前記ホストのメモリ上の位置を示すメモリアドレスそれぞれを、前記ソースアドレスとして、前記第1のリストに格納し、
前記第1のリストに格納された前記ソースアドレスの個数が前記不揮発性メモリの書き込み単位に達した場合、前記ソースアドレスそれぞれに基づいて、前記書き込みサイズを有するライトデータを前記ホストのメモリから取得し、前記取得したライトデータを前記揮発性メモリに格納し、
前記ライトデータが格納された前記揮発性メモリ上の位置を示すメモリアドレスそれぞれを、前記バッファアドレスとして、前記第1のリストに格納し、
前記第1のリストの前記バッファアドレスそれぞれに基づいて、前記揮発性メモリから前記ライトデータを取得し、前記取得したライトデータを前記第1のブロックに書き込み、
前記第1のブロックへの前記ライトデータの書き込みの完了によって前記第1のブロックの読み出し可能領域が拡大した場合、前記第1のブロックの書き込み未完了領域の先頭位置を示す記憶位置管理情報を更新し、
前記記憶位置管理情報によって示される前記書き込み未完了領域の先頭位置が前記第1のブロックの終端の記憶位置を超えた場合、前記第1のリストを前記第1のブロックから解放するように構成されている、
メモリシステム。 - 前記コントローラは、
前記第1のデータに対応する論理アドレスを指定するリードコマンドを前記ホストから受信したことに応じ、論理物理アドレス変換テーブルを参照し、前記第1のブロックのブロックアドレスと前記第1のブロック内のオフセットアドレスとを示す物理アドレスを取得し、
前記オフセットアドレスが、前記記憶位置管理情報が示す値未満である場合、前記第1のデータを前記第1のブロックから読み出し、読み出した前記第1のデータを前記ホストに転送し、
前記オフセットアドレスが、前記記憶位置管理情報が示す値以上である場合、前記バッファアドレスそれぞれに基づいて、前記揮発性メモリから前記第1のデータを読み出し、読み出した前記第1のデータを前記ホストに転送するように構成されている、
請求項6に記載のメモリシステム。 - 前記コントローラは、
前記オフセットアドレスが、前記記憶位置管理情報が示す値以上であり、且つ、前記第1のデータが格納されている前記揮発性メモリ上の位置を示すメモリアドレスである前記バッファアドレスが前記第1のリストに格納されていない場合、前記ソースアドレスそれぞれに基づいて、前記ホストのメモリ上の位置から前記揮発性メモリに前記第1のデータを転送し、前記揮発性メモリに転送された前記第1のデータを前記ホストに転送するように構成されている、
請求項7に記載のメモリシステム。 - 不揮発性メモリと揮発性メモリとを含むメモリシステムを制御する制御方法であって、
前記不揮発性メモリの複数のブロックから割り当てられた複数の書き込み先ブロックを管理することと、
第1の書き込み先ブロックに書き込む第1のデータが格納されているホストのメモリ上の位置を示すメモリアドレスと、前記第1のデータに含まれる、第1の管理サイズを有する単位データの個数と、を指定するライトコマンドを、前記ホストから受信することと、
前記第1の書き込み先ブロックに前記揮発性メモリに保存される第1のリストを割り当てることと、
前記第1のデータに含まれる単位データそれぞれが格納されている前記ホストのメモリ上の位置を示すメモリアドレスそれぞれを、第1の記憶位置情報として、前記第1のリストに格納することと、
前記第1のデータを前記不揮発性メモリに書き込む際、前記第1のリストの前記第1の記憶位置情報が示す前記ホストのメモリ上の位置から前記第1のデータを取得し、前記取得した第1のデータを前記揮発性メモリに格納することと、
前記第1のデータに含まれる単位データそれぞれが格納された前記揮発性メモリ上の位置を示すメモリアドレスそれぞれを、第2の記憶位置情報として、前記第1のリストに格納することと、
前記第1のリストの前記第2の記憶位置情報が示す前記揮発性メモリ上の位置から前記第1のデータを取得し、前記取得した第1のデータを前記第1の書き込み先ブロックに書き込むことと、
前記第1の書き込み先ブロックへの前記第1のデータの書き込み完了によって前記第1の書き込み先ブロックの読み出し可能領域が拡大した場合、前記第1の書き込み先ブロックの書き込み未完了領域の先頭位置を示す記憶位置管理情報を更新することと、
前記記憶位置管理情報が前記第1の書き込み先ブロックの終端の記憶位置を超えた場合、前記第1のリストを前記第1の書き込み先ブロックから解放することと、を具備する制御方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022041508A JP2023136082A (ja) | 2022-03-16 | 2022-03-16 | メモリシステムおよび制御方法 |
US17/898,394 US20230297262A1 (en) | 2022-03-16 | 2022-08-29 | Memory system and control method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022041508A JP2023136082A (ja) | 2022-03-16 | 2022-03-16 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023136082A true JP2023136082A (ja) | 2023-09-29 |
Family
ID=88066863
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022041508A Pending JP2023136082A (ja) | 2022-03-16 | 2022-03-16 | メモリシステムおよび制御方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20230297262A1 (ja) |
JP (1) | JP2023136082A (ja) |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3745552B2 (ja) * | 1999-02-26 | 2006-02-15 | 富士通株式会社 | 情報記憶装置 |
US7613898B2 (en) * | 2006-01-17 | 2009-11-03 | Globalfoundries Inc. | Virtualizing an IOMMU |
CN103164345B (zh) * | 2011-12-08 | 2016-04-27 | 光宝科技股份有限公司 | 固态存储装置遭遇断电后的数据存储方法 |
CN102681952B (zh) * | 2012-05-12 | 2015-02-18 | 北京忆恒创源科技有限公司 | 将数据写入存储设备的方法与存储设备 |
US9959206B2 (en) * | 2015-05-19 | 2018-05-01 | Toshiba Memory Corporation | Memory system and method of controlling cache memory |
US10860508B2 (en) * | 2017-05-25 | 2020-12-08 | Western Digital Technologies, Inc. | Offloaded disaggregated storage architecture |
JP6967959B2 (ja) * | 2017-12-08 | 2021-11-17 | キオクシア株式会社 | メモリシステムおよび制御方法 |
US20220171717A1 (en) * | 2020-12-01 | 2022-06-02 | Advanced Micro Devices, Inc. | Adaptive out of order arbitration for numerous virtual queues |
-
2022
- 2022-03-16 JP JP2022041508A patent/JP2023136082A/ja active Pending
- 2022-08-29 US US17/898,394 patent/US20230297262A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230297262A1 (en) | 2023-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11768632B2 (en) | Memory system and method of controlling nonvolatile memory | |
US11301373B2 (en) | Reconstruction of address mapping in a host of a storage system | |
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 | |
US11663122B2 (en) | Memory system and method of controlling nonvolatile memory | |
JP2021033849A (ja) | メモリシステムおよび制御方法 | |
US10599333B2 (en) | Storage device having dual access procedures | |
US20230297288A1 (en) | Memory system and method of controlling nonvolatile memory and for reducing a buffer size | |
US20230367501A1 (en) | Memory system and method of controlling nonvolatile memory | |
US20190265910A1 (en) | Memory system | |
US20230091792A1 (en) | Memory system and method of controlling nonvolatile memory | |
JP2021043908A (ja) | メモリシステムおよび制御方法 | |
US11366751B2 (en) | Storage device and storage control method | |
JP2022007376A (ja) | メモリシステムおよび制御方法 | |
US11853200B2 (en) | Memory system and controller to invalidate data corresponding to a logical address | |
JP2023136082A (ja) | メモリシステムおよび制御方法 | |
US20230297247A1 (en) | Memory system and method of controlling nonvolatile memory | |
US11714577B2 (en) | Snap read optimization for media management for a memory sub-system | |
US20220308789A1 (en) | Memory system | |
CN113253917A (zh) | 用于存储器子系统的媒体管理的多状态炼狱 |