JP2021033848A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2021033848A JP2021033848A JP2019155833A JP2019155833A JP2021033848A JP 2021033848 A JP2021033848 A JP 2021033848A JP 2019155833 A JP2019155833 A JP 2019155833A JP 2019155833 A JP2019155833 A JP 2019155833A JP 2021033848 A JP2021033848 A JP 2021033848A
- Authority
- JP
- Japan
- Prior art keywords
- write
- block
- data
- buffer
- read
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1016—Performance improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1056—Simplification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7209—Validity control, e.g. using flags, time stamps or sequence numbers
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)
- Techniques For Improving Reliability Of Storages (AREA)
- Read Only Memory (AREA)
- Memory System (AREA)
Abstract
【課題】性能を向上することができるメモリシステムを実現する。【解決手段】メモリシステムは、不揮発性メモリと、コントローラとを含む。コントローラは、不揮発性メモリ内の複数のブロックに対応する複数の第1カウンタ値に基づいて、未完了のリードコマンドが存在するブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理を禁止する。コントローラは、複数のブロックから割り当てられた複数の書き込み先ブロックに対応する複数の第2カウンタ値に基づいて、バッファからのデータの読み出しを必要とする未完了のリードコマンドが存在する書き込み先ブロックへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の領域の解放を禁止する。【選択図】図10
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
SSDは、データセンターのサーバのような様々なホスト計算機システムのストレージデバイスとして使用されている。
ホスト計算機システムにおいて利用されるストレージデバイスにおいては、その性能の向上が求められる。
本発明が解決しようとする課題は、性能を向上することができるメモリシステムおよび制御方法を提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、複数のページを各々が含む複数のブロックを含み、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する1以上のページへのデータの書き込み後に可能となる不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記複数のブロックから割り当てられた複数の書き込み先ブロックにデータを書き込むように構成されたコントローラとを具備する。前記コントローラは、前記ホストからリードコマンドを受信した場合、前記複数のブロックに対応する複数の第1カウンタ値のうち、前記受信したリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているブロックアドレスを有する第1のブロックに対応する第1カウンタ値を増分する。前記コントローラは、前記読み出し対象データが前記第1のブロックから読み出し可能か否かに応じて、前記読み出し対象データを前記第1のブロックまたはバッファから読み出し、前記読み出しの終了後に前記第1のブロックに対応する前記第1カウンタ値を減分する。前記バッファは前記メモリシステム内の第1のバッファまたは前記ホストのライトバッファである。前記コントローラは、前記第1のブロックが前記複数の書き込み先ブロックのうちの第1の書き込み先ブロックであり且つ前記読み出し対象データが前記第1のブロックから読み出し可能でない場合、前記複数の書き込み先ブロックに対応する複数の第2カウンタ値のうち、前記第1の書き込み先ブロックに対応する第2カウンタ値を増分し、前記バッファから前記読み出し対象データを読み出し、前記読み出しの終了後に前記第1の書き込みブロックに対応する前記第2カウンタ値を減分する。前記コントローラは、前記複数の第1カウンタ値に基づいて、未完了のリードコマンドが存在するブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理を禁止し、前記複数の第2カウンタ値に基づいて、前記バッファからのデータの読み出しを必要とする未完了のリードコマンドが存在する書き込み先ブロックへの書き込み中もしくは書き込み待ちのデータが格納されている前記バッファ内の領域の解放を禁止する。
以下、図面を参照して、実施形態を説明する。
図1は、ホストと実施形態に係るメモリシステムとの関係を示すブロック図である。
図1は、ホストと実施形態に係るメモリシステムとの関係を示すブロック図である。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。
ホスト(ホストデバイス)2は、複数のSSD3を制御するように構成されている。ホスト2は、複数のSSD3によって構成されるフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
なお、SSD3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のSSD3)を制御するコントローラを含む。SSD3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、SSD3のホストとして機能してもよい。
以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。
ホスト(サーバ)2と複数のSSD3は、インタフェース50を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。各仮想マシンに対応するオペレーティングシステムは、I/Oサービスを含む。このI/Oサービスは、論理ブロックアドレス(LBA)ベースのブロックI/Oサービスであってもよいし、あるいは、キー・バリュー・ストアサービスであってもよい。
各仮想マシンに対応するオペレーティングシステムにおいては、I/Oサービスは、ユーザアプリケーションからのライト/リード要求に応答して、I/Oコマンド(ライトコマンド、リードコマンド)を発行する。これらI/Oコマンドはホスト2内のサブミッションキューに入れられ、そしてこのサブミッションキューを介してSSD3に送出される。
SSD3は、NAND型フラッシュメモリのような不揮発性メモリを含む。SSD3は、不揮発性メモリの複数のブロックから割り当てられた複数の書き込み先ブロックの各々に対するデータの書き込みを実行することができる。書き込み先ブロックとは、データが書き込まれるべきブロックを意味する。
SSD3は、異なるストリームに関連付けられた複数種のライトデータを異なる書き込み先ブロックにそれぞれ書き込むストリーム書き込みをサポートしている。ストリーム書き込みを実行するケースにおいては、ホスト2からSSD3に送出されるライトコマンドの各々は、複数のストリームの一つを示すストリーム識別子(ストリームID)を含む。SSD3があるストリームのストリームIDを含むライトコマンドをホスト2から受信した場合、SSD3は、このストリームに対応する書き込み先ブロックにこのライトコマンドに関連付けられたライトデータを書き込む。SSD3が別のストリームのストリームIDを含むライトコマンドをホスト2から受信した場合、SSD3は、この別のストリームに対応する別の書き込み先ブロックにこのライトコマンドに関連付けられたライトデータを書き込む。あるストリームに対応する書き込み先ブロック全体がデータで満たされると、このストリーム用の新たな書き込み先ブロックが割り当てられる。
したがって、ホスト2は、ストリームIDを各々が含むライトコマンドをSSD3に発行することによって、例えば、あるエンドユーザ端末61(クライアント)に対応するユーザアプリケーションのデータのような特定のデータのグループが1以上の特定のブロックに書き込まれ、他のエンドユーザ端末61(クライアント)に対応するユーザアプリケーションのデータのような別の特定のデータのグループが別の1以上のブロックに書き込まれる、といったデータ配置を実現することができる。
図2は、SSD3の構成例を示す。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0〜BLKm−1を含む。ブロックBLK0〜BLKm−1の各々は複数のページ(ここではページP0〜Pn−1)を含む。ブロックBLK0〜BLKm−1は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0〜Pn−1は、データ書き込み動作およびデータ読み出し動作の単位である。
コントローラ4は、ToggleNANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System−on−a−chip(SoC)のような回路によって実現されてもよい。
NAND型フラッシュメモリ5は、図3に示すように、複数のNAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)を含んでいてもよい。個々のNAND型フラッシュメモリチップは独立して動作可能である。このため、NAND型フラッシュメモリチップは、並列動作可能な単位として機能する。図3においては、NANDインタフェース13に16個のチャンネルCh.1〜Ch.16が接続されており、16個のチャンネルCh.1〜Ch.16の各々に2つのNAND型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルCh.1〜Ch.16に接続された16個のNAND型フラッシュメモリチップ#1〜#16がバンク#0として編成されてもよく、またチャンネルCh.1〜Ch.16に接続された残りの16個のNAND型フラッシュメモリチップ#17〜#32がバンク#1として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図3の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリチップを並列動作させることができる。
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含む並列単位(スーパーブロック)の単位で実行されてもよい。一つの並列単位、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリチップ#1〜#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリチップ#1〜#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリチップ#1〜#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリチップ#1〜#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
図4には、32個の物理ブロック(ここでは、NAND型フラッシュメモリチップ#1内の物理ブロックBLK2、NAND型フラッシュメモリチップ#2内の物理ブロックBLK3、NAND型フラッシュメモリチップ#3内の物理ブロックBLK7、NAND型フラッシュメモリチップ#4内の物理ブロックBLK4、NAND型フラッシュメモリチップ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリチップ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
書き込み先ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
次に、図2のコントローラ4の構成について説明する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。論理アドレスは、SSD3の論理アドレス空間内の位置をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。論理アドレスは、SSD3の論理アドレス空間内の位置をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。
SSD3をアクセスするためにホスト2によって使用される論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル:L2Pテーブル)31を用いて実行される。コントローラ4は、L2Pテーブル31を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータがライトされたNAND型フラッシュメモリ5内の最新の物理記憶位置を示す。L2Pテーブル31は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
NAND型フラッシュメモリ5においては、ページへのデータ書き込みは1消去サイクル当たり1回のみ可能である。つまり、データが既に書き込まれているブロック内の領域に新たなデータを直接上書きすることができない。このため、既に書き込まれているデータを更新する場合には、コントローラ4はそのブロック(または別のブロック)内の未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、L2Pテーブル31を更新してこの論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。本実施形態では、L2Pテーブル31の更新は、書き込むべきデータ(ライトデータ)がNAND型フラッシュメモリ5に書き込まれた後に実行されてもよいし、ホスト2からライトデータが転送された後に実行されもよいし、ホスト2からライトコマンドが受信された後に実行されもよい。
ブロック管理には、バッドブロック(不良ブロック)の管理と、ウェアレベリングと、ガベージコレクション(GC)等が含まれる。ウェアレベリングは、ブロックそれぞれの書き換え回数(プログラム/イレーズサイクルの数)を均一化するための動作である。
GCは、フリーブロックの個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。GCにおいては、コントローラ4は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、L2Pテーブル31から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。そして、コントローラ4は、L2Pテーブル31を更新して、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後に再利用することが可能となる。
コントローラ4は、ホストインタフェース11、CPU12−1、CPU12−2、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、内部バッファ16、ECCエンコード/デコード部17、等を含む。これらホストインタフェース11、CPU12−1、CPU12−2、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、内部バッファ16、ECCエンコード/デコード部17は、バス10を介して相互接続される。
このホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってもよい。あるいは、SSD3がEthernet(登録商標)を介してホスト2に接続される構成においては、ホストインタフェース11は、NVMe over Fabrics(NVMeOF)コントローラであってもよい。
ホストインタフェース11は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、デアロケーション(アンマップ/トリム)コマンド、他の様々なコマンドが含まれる。
ライトコマンドは書き込むべきデータ(ライトデータ)をNAND型フラッシュメモリ5に書き込むコマンド(ライト要求)である。例えば、ストリーム書き込み用のライトコマンドは、書き込むべきデータ(ライトデータ)の論理アドレス(開始LBA)、このライトデータの長さ、このライトデータが関連付けられているストリームを示すストリーム識別子(ストリームID)、このライトデータが格納されているホスト2のメモリ内のライトバッファ内の位置を示すデータポインタ、等を含む。
リードコマンドはデータをNAND型フラッシュメモリ5から読み出すコマンド(リード要求)であり、読み出すべきデータの論理アドレス(開始LBA)、このデータの長さ、このデータが転送されるべきホスト2のメモリ内のリードバッファ内の位置を示すデータポインタ、等を含む。
デアロケーション(アンマップ/トリム)コマンドは、ある論理アドレスに対応するデータを無効化するためのコマンドである。デアロケーション(アンマップ/トリム)コマンドは、無効化すべき論理アドレス範囲(LBA範囲)を指定する。
CPU12−1、12−2の各々は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14を制御するように構成されたプロセッサである。CPU12−1、12−2の各々は、SSD3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。CPU12−1、12−2の各々は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12−1、12−2の各々の動作は、上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。一つのコマンドに対するコマンド処理は複数の処理を含む。これら複数の処理はCPU12−1、12−2によって分担して実行されてもよいし、いずれか一方のCPUのみによって実行されてもよい。
CPU12−1、12−2の少なくとも一方は、ライト制御部21、リード制御部22、およびブロック/バッファ制御部23として機能することができる。なお、これらライト制御部21、リード制御部22、およびブロック/バッファ制御部23の各々の一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
ライト制御部21は、ホスト2から受信されるライトコマンドに応じて、ライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込むための処理を実行する。ライト制御部21は、上述のストリーム書き込み動作をサポートしている。ライト制御部21は、NAND型フラッシュメモリ5の複数のブロックから複数のストリームに対応する複数の書き込み先ブロックを割り当て、これら割り当てられた複数の書き込み先ブロックを管理することができる。
現代のNAND型フラッシュメモリの多くにおいては、プログラムディスターブを低減するための複雑な書き込み動作が実行される場合が多い。このため、現代のNAND型フラッシュメモリの多くにおいては、ブロック内の複数のページ内の一つのページに書き込まれたデータの読み出しがこのページに後続する1以上のページへのデータ書き込み後に可能となる。各ページのデータが読み出し可能となるタイミングはNAND型フラッシュメモリに適用されている書き込み方法によって異なる。
例えば、一つのメモリセル当たりに3ビットのデータを格納可能なトリプルレベルセル(TLC)−フラッシュメモリにおいては、ワード線WL0に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、次のワード線WL1に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、さらに次のワード線WL2に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、さらに次のワード線WL3に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、そして最後のワード線WLnに接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられる。各ワード線に接続されたメモリセル群においては、アッパーページに対する書き込み動作が完了するまでは、ロアーページおよびミドルページの各々からデータを正しく読み出すことでできない。
また、NAND型フラッシュメモリにおいては、各ブロックにデータを書き込むために必要なページの順序を示すページ書き込み順序が規定されている。例えば、TLC−フラッシュメモリにおいては、プログラムディスターブによる影響を抑制するために、隣接する幾つかのワード線に対する書き込み動作が交互に実行されるようにページ書き込み順序が規定されている。
例えば、WL0のロアーページへの書き込み、WL1のロアーページへの書き込み、WL0のミドルページへの書き込み、WL2のロアーページへの書き込み、WL1のミドルページへの書き込み、WL0のアッパーページへの書き込み、WL3のロアーページへの書き込み、WL2のミドルページへの書き込み、WL1のアッパーページへの書き込み、といった書き込み順序で書き込み動作が実行される。このため、ブロック内の複数のページ内の一つのページに書き込まれたデータの読み出しは、このページに後続する幾つかのページへのデータ書き込み後に可能となる。
本実施形態では、複数のページを各々が含む複数のブロックを含み、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しがこの一つのページに後続する1以上のページへのデータの書き込み後に可能となる不揮発性メモリが、NAND型フラッシュメモリ5として使用される。
ライト制御部21は、NAND型フラッシュメモリ5の複数のブロックから割り当てられた複数の書き込み先ブロックにデータを書き込むように構成されている。書き込み先ブロックの各々に対するデータの書き込みは上述のページ書き込み順序に従って実行される。ライト制御部21は、ライトコマンドそれぞれをホスト2から受信し、各ライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込む書き込み動作を実行する。書き込み動作は、(1)ライトデータが書き込まれるべきNAND型フラッシュメモリ5内の記憶位置を示す物理アドレスをこのライトデータに割り当てるアドレス割り当て動作、(2)このライトデータの論理アドレスにこのライトデータに割り当てられた物理アドレスが関連付けられるようにL2Pテーブル31を更新するL2P更新動作、(3)このライトデータをホスト2のメモリ内のライトバッファからコントローラ4に転送するデータ転送動作、(4)ホスト2のメモリ内のライトバッファから転送されたライトデータを書き込み先ブロックに書き込むフラッシュ書き込み動作(プログラム動作)、等を含む。
本実施形態においては、ライト制御部21は、上述したように、異なるストリームに関連付けられたライトデータを異なる書き込み先ブロックにそれぞれ書き込むストリーム書き込みをサポートしている。ホスト2から受信される各ライトコマンドはストリームIDを含んでいるので、ライト制御部21は、各ライトコマンドに関連付けられたライトデータがどのストリームに関連付けられたデータであるかを識別することができる。
リード制御部22は、ホスト2からリードコマンドを受信し、この受信されたリードコマンドによって指定された読み出し対象データをNAND型フラッシュメモリ5、SSD3内の第1のバッファ、またはホスト2のメモリ内のライトバッファから読み出す。SSD3内の第1のバッファは、ホスト2から受信されたライトデータを一時的に格納するためのバッファである。この第1のバッファとしては、DRAM6内のバッファ32を使用することができる。
ホスト2から受信したリードコマンドによって指定された読み出し対象データがNAND型フラッシュメモリ5の複数のブロック内のリード対象ブロックから読み出し可能である場合、リード制御部22は、読み出し対象データをこのリード対象ブロックから読み出し、この読み出した読み出し対象データをホスト2に送出する。このリード対象ブロックは、この読み出し対象データの論理アドレスに割り当てられている物理アドレスによって表されるブロックアドレスを有するブロックである。
一方、このリード対象ブロックが書き込み先ブロックとして現在使用されているブロックであり、且つ読み出し対象データの論理アドレスに割り当てられている物理記憶位置がこの書き込み先ブロック内の読み出し不可能領域である場合、リード制御部22は、SSD3内の第1のバッファまたはホスト2のライトバッファから読み出し対象データを読み出し、第1のバッファまたはホスト2のライトバッファから読み出した読み出し対象データをホスト2に送出する。
このように、リードコマンドによって指定された読み出し対象データがNAND型フラッシュメモリ5から読み出し可能になっていない場合には、リード制御部22は、SSD3内の第1のバッファまたはホスト2のライトバッファから読み出し対象データを読み出す。これにより、ある書き込み先ブロックに書き込み中のデータまたはこの書き込み先ブロックへの書き込みが開始されていない書き込み待ちのデータがホスト2からのリードコマンドによって要求された場合でも、このデータをホスト2に返すことができるので、データのリードに関する性能の向上を図ることができる。
本実施形態では、リードコマンドによって指定された読み出し対象データが読み出されるべきブロックまたはバッファ(SSD3内の第1のバッファまたはホスト2のライトバッファ)からこの読み出し対象データに正常に読み出すことを可能にするために、NAND型フラッシュメモリ5内の複数のブロックそれぞれに対応する複数の第1カウンタ値と、複数の書き込み先ブロックそれぞれに対応する複数の第2カウンタ値とが管理される。
複数の第1カウンタ値は、データ読み出し元として使用される可能性がある各ブロックからデータを正しく読み出せるようにすることを可能にするために使用される。また、複数の第1カウンタ値は、バッファからデータを正しく読み出せるようにすることを可能にするために使用される。
本実施形態では、リード制御部22は、以下の動作を実行する。
ホスト2からリードコマンドを受信した場合、リード制御部22は、複数のブロックに対応する複数の第1カウンタ値のうち、受信したリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているブロックアドレスを有するリード対象ブロックに対応する第1カウンタ値を例えば1増分する。
ホスト2からリードコマンドを受信した場合、リード制御部22は、複数のブロックに対応する複数の第1カウンタ値のうち、受信したリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているブロックアドレスを有するリード対象ブロックに対応する第1カウンタ値を例えば1増分する。
リード制御部22は、読み出し対象データがこのリード対象ブロックから読み出し可能か否かに応じて、読み出し対象データをリード対象ブロックまたはバッファ(SSD3内の第1のバッファまたはホスト2のライトバッファ)から読み出し、読み出しの終了後にリード対象ブロックに対応する第1カウンタ値を例えば1減分する。
リード対象ブロックが複数の書き込み先ブロックのうちの一つの書き込み先ブロックであり且つ読み出し対象データがリード対象ブロック(この一つの書き込み先ブロック)から読み出し可能でない場合、リード制御部22は、複数の書き込み先ブロックに対応する複数の第2カウンタ値のうち、この一つの書き込み先ブロックに対応する第2カウンタ値を増分し、バッファから読み出し対象データを読み出し、読み出しの終了後にこの一つの書き込み先ブロックに対応する第2カウンタ値を例えば1減分する。
したがって、各第1カウンタ値は、対応するブロックに対する未完了のリードコマンドの数を表す。各第2カウンタ値は、対応する書き込み先ブロックに関して、この書き込み先から読み出し対象データを読み出すことができず、データバッファからの読み出し対象データの読み出しを必要とする未完了のリードコマンドの数を示す。
ブロック/バッファ制御部23は、これら第1カウンタ値および第2カウンタ値を使用して、データの読み出し元として決定されたブロックからこのデータが読み出せなくなってしまうことを防止し、さらにデータの読み出し元として決定されたバッファからこのデータが読み出せなくなってしまうことを防止する。
すなわち、ブロック/バッファ制御部23は、複数の第1カウンタ値に基づいて、未完了のリードコマンドが存在するブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理を禁止する。さらに、ブロック/バッファ制御部23は、複数の第2カウンタ値に基づいて、バッファからのデータの読み出しを必要とする未完了のリードコマンドが存在する書き込み先ブロックへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の領域の解放を禁止する。
具体的には、ブロック/バッファ制御部23は、以下の処理を実行する。
ブロック/バッファ制御部23は、NAND型フラッシュメモリ5内の複数のブロックのうちのあるブロックから有効データが無くなった場合、このブロックに対する未完了のリードコマンドが無くなった後に、つまり複数の第1カウンタ値のうちのこのブロックに対応する第1カウンタ値が零になった後に、このブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる。ブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理には、ブロックをフリーブロックのリストに加える処理、またはこのブロックに対する消去動作を実行する処理等が含まれる。あるブロックがデータの読み出し元として決定されてから、このブロックから実際にデータが読み出されるまでには、ある一定の時間が必要となる。したがって、データの読み出し元として決定されたブロックからまだこのデータが読み出されていない場合には、このブロックに対する未完了のリードコマンドが存在することになる。
ブロック/バッファ制御部23は、NAND型フラッシュメモリ5内の複数のブロックのうちのあるブロックから有効データが無くなった場合、このブロックに対する未完了のリードコマンドが無くなった後に、つまり複数の第1カウンタ値のうちのこのブロックに対応する第1カウンタ値が零になった後に、このブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる。ブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理には、ブロックをフリーブロックのリストに加える処理、またはこのブロックに対する消去動作を実行する処理等が含まれる。あるブロックがデータの読み出し元として決定されてから、このブロックから実際にデータが読み出されるまでには、ある一定の時間が必要となる。したがって、データの読み出し元として決定されたブロックからまだこのデータが読み出されていない場合には、このブロックに対する未完了のリードコマンドが存在することになる。
この場合には、たとえこのブロックがデータ更新、ガベージコレクション、またはデアロケーション(トリム/アンマップ)によって有効データを含まなくなっても、このブロックに対する未完了のリードコマンドがなくなるまでは、つまりこのブロックからの全てのデータ読み出しが完了するまでは、このブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理の実行は禁止される。
したがって、本実施形態では、あるブロックに対する読み出しとこのブロックに対する再利用要求との競合によって、データ読み出し元として決定されたブロックからこのデータが正しく読み出せなくなってしまう、という事態が起こることを防止することができる。
また、ブロック/バッファ制御部23は、ある書き込み先ブロックへの書き込み動作の進行によってライトデータがバッファ(SSD3内の第1のバッファまたはホスト2のライトバッファ)から不要になった場合、この書き込み先ブロックに対応する第2カウンタ値が零になった後、このライトデータが格納されているバッファ内の領域の解放を許可する。
換言すれば、複数の書き込み先ブロックのうちのある書き込み先ブロックの読み出し不可能領域に対する未完了のリードコマンドが存在する場合、この書き込み先ブロックの読み出し不可能領域に対する未完了のリードコマンドがなくなるまで、この書き込み先ブロックの読み出し不可能領域に書き込むべきライトデータが格納されている、バッファ内の領域の解放が禁止される。
バッファ(第1のバッファまたはホストのライトバッファ)がデータの読み出し元として決定されてから、このバッファから実際にデータが読み出されるまでには、ある一定の時間が必要となる。したがって、データの読み出し元として決定されたバッファからまだこのデータが読み出されていない場合には、この書き込み先ブロックの読み出し不可能領域に対する未完了のリードコマンドが存在することになる。
この場合には、たとえこの書き込み先ブロックに対するデータ書き込み動作が進むことによってこのデータの書き込みが完了しても、この書き込み先ブロックの読み出し不可能領域に対する未完了のリードコマンドがなくなるまでは、この書き込み先ブロックに書き込むべきライトデータが格納されているバッファ内の領域の解放は禁止される。この書き込み先ブロックに書き込むべきライトデータは、バッファが読み出し元として決定された時点では、この書き込み先ブロックから読み出し可能になっていなかったデータ、つまり書き込み先ブロックへの書き込み中のライトデータ、または書き込み先ブロックへの書き込みが開始されていない書き込み待ちのライトデータである。
したがって、本実施形態では、バッファからのデータの読み出しとこのデータが格納されているバッファ内の領域の解放要求との競合によって、データ読み出し元として決定されたバッファからこのデータが正しく読み出せなくなってしまう、という事態が起こることを防止することができる。
NANDインタフェース13は、CPU12−1またはCPU12−2の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。
DRAMインタフェース14は、CPU12−1またはCPU12−2の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、L2Pテーブル31およびバッファ32用の記憶領域として利用されてもよい。また、DRAM6の記憶領域の他の一部は、ブロック管理テーブル33、書き込み先ブロック管理テーブル34の格納のために使用されてもよい。
DMAC15は、CPU12−1またはCPU12−2の制御の下、ホスト2のメモリと内部バッファ16(またはDRAM6のバッファ32)との間のデータ転送を実行する。内部バッファ16は、コントローラ4内のSRAMによって実現されてもよい。
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
図5は、DRAM6内に格納されるブロック管理テーブル33のデータ構造の例を示す。以下、上述の第1カウンタ値および第2カウンタ値について具体的に説明する。
ブロック管理テーブル33は、NAND型フラッシュメモリ5内の全てのブロック(ここでは、ブロックBLK1〜ブロックBLKn)にそれぞれ対応する複数の領域を含む。これらブロックBLK1〜ブロックBLKnには、書き込み途中の複数のブロック(openedブロック:書き込み先ブロック)、ブロック全体がデータで満たされており且つ有効データを含む複数のブロック(closedブロック:アクティブブロック)、有効データを含まない複数のフリーブロックなどが含まれる。
ブロック管理テーブル33内の各領域は、この領域に対応するブロックに関するメタデータを格納する。例えば、ブロックBLK1に対応する領域のメタデータは、ブロックBLK1が読み出し元として決定された未完了のリードコマンドの数を示す第1カウンタ値と、ブロックBLK1内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un−readable pointer:URP)を含む。ブロックBLK2に対応する領域のメタデータは、ブロックBLK2が読み出し元として決定された未完了のリードコマンドの数を示す第1カウンタ値と、ブロックBLK2内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un−readable pointer:URP)を含む。同様に、ブロックBLKnに対応する領域のメタデータは、ブロックBLKnが読み出し元として決定された未完了のリードコマンドの数を示す第1カウンタ値と、ブロックBLKn内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un−readable pointer:URP)を含む。
ブロック/バッファ制御部23は、ブロックBLK1〜ブロックBLKnに対応する複数の第1カウンタ値を用いてブロックBLK1〜ブロックBLKnそれぞれに対する未完了のリードコマンドの有無を管理する。
ブロックBLK1に対するリードコマンドの受信の度に、ブロック/バッファ制御部23は、ブロックBLK1に対応する第1カウンタ値を例えば1だけ増分し、ブロックBLK1に対するリードコマンドの完了の度に、ブロックBLK1に対応する第1カウンタ値を例えば1だけ減分する。
同様に、ブロックBLKnに対するリードコマンドの受信の度に、ブロック/バッファ制御部23は、ブロックBLKnに対応する第1カウンタ値を例えば1だけ増分し、ブロックBLKnに対するリードコマンドの完了の度に、ブロックBLKnに対応する第1カウンタ値を例えば1だけ減分する。
図6は、各書き込み先ブロックに対応する読み出し不可能ポインタ(URP)を説明する図である。
各書き込み先ブロックにおいては、読み出し不可能ポインタ(URP)とライトポインタ(WP)との2つのポインタが管理される。ある書き込み先ブロックに対応するWPは、次にデータが書き込まれるべきこの書き込み先ブロック内の物理記憶位置(ページアドレス)を示す。ある書き込み先ブロックに対応するURPは、上述したように、この書き込み先ブロック内の読み出し不可能な最小物理アドレスを示す。図6においては、次にデータが書き込まれるべき物理記憶位置がページj+1であり、読み出し不可能な最小物理アドレスがページi+1である場合が例示されている。ページ0〜ページiに対応するページ範囲がこの書き込み先ブロックからデータを正常に読み出すことが可能な読み出し可能領域であり、ページi+1〜最終ページkに対応するページ範囲がこの書き込み先ブロックからデータを正常に読み出すことが不可能な読み出し不可能領域である。
各書き込み先ブロックにおいては、読み出し不可能ポインタ(URP)とライトポインタ(WP)との2つのポインタが管理される。ある書き込み先ブロックに対応するWPは、次にデータが書き込まれるべきこの書き込み先ブロック内の物理記憶位置(ページアドレス)を示す。ある書き込み先ブロックに対応するURPは、上述したように、この書き込み先ブロック内の読み出し不可能な最小物理アドレスを示す。図6においては、次にデータが書き込まれるべき物理記憶位置がページj+1であり、読み出し不可能な最小物理アドレスがページi+1である場合が例示されている。ページ0〜ページiに対応するページ範囲がこの書き込み先ブロックからデータを正常に読み出すことが可能な読み出し可能領域であり、ページi+1〜最終ページkに対応するページ範囲がこの書き込み先ブロックからデータを正常に読み出すことが不可能な読み出し不可能領域である。
読み出し不可能領域のうち、ページi+1〜ページjに対応するページ範囲は書き込み途中の領域であり、ページj+1〜ページkに対応するページ範囲は書き込みが開始されていない未書き込み領域である。
新たなデータはWPによって指定されるページに書き込まれる。WPによって指定されるページにデータが書き込まれると、URPが更新され、さらにWPも更新される。
図7は、各アクティブブロック(クローズブロック)に対応する読み出し不可能ポインタ(URP)を説明するための図である。
どのアクティブブロックのURPも、ブロック終端の物理アドレス(ブロック内の最終ページアドレス)よりも大きな値を示す。
どのアクティブブロックのURPも、ブロック終端の物理アドレス(ブロック内の最終ページアドレス)よりも大きな値を示す。
したがって、コントローラ4は、ホスト2から受信したリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられている物理記憶位置(例えば読み出し対象ページ)と読み出し対象ブロックのURPとを比較するだけで、この読み出し対象データがこの読み出し対象ブロックから読み出し可能であるか否か、つまりこの物理記憶位置(例えば読み出し対象ページ)がこのブロックの読み出し可能領域または読み出し不可能領域のいずれに属するかを、即座に判定することができる。
図8は、書き込み先ブロック管理テーブル34のデータ構造の例を示す。
書き込み先ブロック管理テーブル34は、書き込み先ブロックとして現在使用されている複数のブロック(ここでは、ブロックBLK10、ブロックBLK20、ブロックBLK30、ブロックBLK40、ブロックBLK50、…ブロックBLK100)にそれぞれ対応する複数の領域を含む。
書き込み先ブロック管理テーブル34は、書き込み先ブロックとして現在使用されている複数のブロック(ここでは、ブロックBLK10、ブロックBLK20、ブロックBLK30、ブロックBLK40、ブロックBLK50、…ブロックBLK100)にそれぞれ対応する複数の領域を含む。
書き込み先ブロック管理テーブル34内の各領域は、この領域に対応する書き込み先ブロックに関するメタデータを格納する。例えば、書き込み先ブロックBLK10に対応する領域のメタデータは、書き込み先ブロックBLK10の読み出し不可能領域に対する未完了のリードコマンドの数を示す第2カウンタ値と、書き込み先ブロックBLK10の読み出し不可能領域に書き込むべきライトデータが格納されているバッファアドレスのリストを示ライトバッファアドレスリストを含む。同様に、書き込み先ブロックBLK100に対応する領域のメタデータは、書き込み先ブロックBLK100の読み出し不可能領域に対する未完了のリードコマンドの数を示す第2カウンタ値と、書き込み先ブロックBLK100の読み出し不可能領域に書き込むべきライトデータが格納されているバッファアドレスのリストを示ライトバッファアドレスリストを含む。
ある書き込み先ブロックに対応するライトバッファアドレスリストは、この書き込み先ブロック内の読み出し不可能領域の物理アドレスそれぞれとこの書き込み先ブロックへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の位置それぞれとの間の対応関係を示すバッファ管理情報である。
ブロック/バッファ制御部23は、ブロックBLK10、ブロックBLK20、ブロックBLK30、ブロックBLK40、ブロックBLK50、…ブロックBLK100に対応する複数の第2カウンタ値を用いてブロックBLK10、ブロックBLK20、ブロックBLK30、ブロックBLK40、ブロックBLK50、…ブロックBLK100の読み出し不可能領域それぞれに対する未完了のリードコマンドの有無を管理する。
ブロックBLK10の読み出し不可能領域に対するリードコマンドの受信の度に、コントローラ4は、ブロックBLK10に対応する第2カウンタ値を例えば1だけ増分し、ブロックBLK10の読み出し不可能領域に対するリードコマンドの完了の度に、ブロックBLK10に対応する第2カウンタ値を例えば1だけ減分する。
同様に、ブロックBLK100の読み出し不可能領域に対するリードコマンドの受信の度に、コントローラ4は、ブロックBLK100に対応する第2カウンタ値を例えば1だけ増分し、ブロックBLK100の読み出し不可能領域に対するリードコマンドの完了の度に、ブロックBLK100に対応する第2カウンタ値を例えば1だけ減分する。
リードコマンドによって指定された論理アドレス(つまりリードコマンドによって指定された読み出し対象データの論理アドレス)に割り当てられているブロックアドレスを有するリード対象ブロックが書き込み先ブロックであり、且つ読み出し対象データがこの書き込み先ブロックから読み出し可能になっていない場合、コントローラ4は、この書き込み先ブロックに対応するバッファアドレスリスト参照することによって、読み出し対象データが格納されているバッファ内の位置(バッファアドレス)を取得する。そして、コントローラ4は、取得したバッファ内の位置から読み出し対象データを読み出す。
このように、リードコマンドによって指定された論理アドレスに基づいてバッファ全体から所望のデータを検索するのではなく、この論理アドレスに割り当てられているブロックアドレスを有する特定のリード対象ブロック(ここでは特定の書き込み先ブロック)に関連付けられている小さいテーブル(バッファアドレスリスト)のみが参照されるので、読み出し対象データが格納されているバッファ内の位置(バッファアドレス)を効率よく取得することができる。
図9は、書き込み先ブロック管理テーブル34内のライトバッファアドレスリストの例を示す。
図9においては、書き込み先ブロックBLK10に対応するライトバッファアドレスリストが例示されている。
図9においては、書き込み先ブロックBLK10に対応するライトバッファアドレスリストが例示されている。
書き込み先ブロックBLK10に対応する書き込み先ブロック管理テーブル34内の領域においては、書き込み先ブロックBLK10の書き込み不可能領域に書き込むべきライトデータが存在するバッファアドレスそれぞれが格納されている。各バッファアドレスは、DRAM6内のバッファ32内の領域、またはホストメモリ内のライトバッファ51内の領域を示す。ホストメモリ内のライトバッファ51からDRAM6内のバッファ32に既に転送済みのライトデータに関しては、そのライトデータのバッファアドレスはDRAM6内のバッファ32内の領域を指す。ホストメモリ内のライトバッファ51からDRAM6内のバッファ32にまだ転送されていないライトデータに関しては、そのライトデータのバッファアドレスはホストメモリ内のライトバッファ51内の領域を指す。
書き込み先ブロックBLK10に対応する書き込み先ブロック管理テーブル34内の領域においては、各バッファアドレスは、書き込み先ブロックBLK10の読み出し不可能領域内の対応する物理アドレス(PBA)に関連付けられている。例えば、書き込み中ページi+1に書き込まれるべきライトデータに関しては、このライトデータのバッファアドレスは、ページi+1を示す物理アドレス(PBA)に関連付けられている。また、書き込み中ページjに書き込まれるべきライトデータに関しては、このライトデータのバッファアドレスは、ページjを示す物理アドレス(PBA)に関連付けられている。
なお、既にホスト2から受信されたライトコマンドに関連付けられたライトデータの論理アドレスに書き込み先ブロックBLK10の未書き込み領域(例えばページj+1)が書き込み先物理アドレスとして割り当てられている場合には、ページj+1に書き込むべきこのライトデータのバッファアドレスもこのライトバッファアドレスリストに含まれていてもよい。
受信されたリードコマンドの論理アドレスに対応する物理アドレスが書き込み先ブロックBLK10の読み出し可能領域(ページ0〜ページi)を示すならば、書き込み先ブロックBLK10の第1カウンタ値が例えば1だけ増分される。受信されたリードコマンドの論理アドレスに対応する物理アドレスが書き込み先ブロックBLK10の読み出し不可能領域(ページi+1〜ページk)を示すならば、書き込み先ブロックBLK10の第2カウンタ値が例えば1だけ増分される
図10のフローチャートは、SSD3において実行される読み出し動作の手順を示す。
コントローラ4は、ホスト2からリードコマンドを受信する(ステップS11)。コントローラ4は、L2Pテーブル31を参照して、受信したリードコマンドによって指定される読み出し対象データの論理アドレスに対応する物理アドレス(ブロックアドレス、ブロック内オフセット)をL2Pテーブル31から取得する(ステップS12)。ブロック内オフセットは、ページアドレスとページ内オフセットとによって表される。コントローラ4は、リード対象ブロックに対応する第1カウンタ値を例えば1だけ増分する(ステップS13)
コントローラ4は、取得した物理アドレスに含まれるブロックアドレスを有しているリード対象ブロックから読み出し対象データが読み出し可能であるか否かを判定する(ステップS14)。ステップS14では、コントローラ4は、取得した物理アドレスに含まれるブロック内オフセットを、取得した物理アドレスに含まれるブロックアドレスを有しているリード対象ブロックに対応するURPと比較してもよい。
図10のフローチャートは、SSD3において実行される読み出し動作の手順を示す。
コントローラ4は、ホスト2からリードコマンドを受信する(ステップS11)。コントローラ4は、L2Pテーブル31を参照して、受信したリードコマンドによって指定される読み出し対象データの論理アドレスに対応する物理アドレス(ブロックアドレス、ブロック内オフセット)をL2Pテーブル31から取得する(ステップS12)。ブロック内オフセットは、ページアドレスとページ内オフセットとによって表される。コントローラ4は、リード対象ブロックに対応する第1カウンタ値を例えば1だけ増分する(ステップS13)
コントローラ4は、取得した物理アドレスに含まれるブロックアドレスを有しているリード対象ブロックから読み出し対象データが読み出し可能であるか否かを判定する(ステップS14)。ステップS14では、コントローラ4は、取得した物理アドレスに含まれるブロック内オフセットを、取得した物理アドレスに含まれるブロックアドレスを有しているリード対象ブロックに対応するURPと比較してもよい。
この場合、ブロック内オフセットがURPよりも小さいならば、コントローラ4は、リード対象ブロックから読み出し対象データが読み出し可能であると判定することができる。一方、ブロック内オフセットがこのURP以上であるならば、コントローラ4は、リード対象ブロックから読み出し対象データが読み出し可能でない、つまり、リード対象ブロックが書き込み先ブロックであり且つリード対象物理記憶位置がこの書き込み先ブロック内の読み出し不可能領域であると判定することができる。
読み出し対象データがリード対象ブロックから読み出し可能か否かに応じて、コントローラ4は、読み出し対象データをリード対象ブロックまたはバッファから読み出し、読み出しの終了後にリード対象ブロックに対応する第1カウンタ値を例えば1だけ減分する。
例えば、リード対象ブロックから読み出し対象データが読み出し可能である場合(ステップS14のYES)、コントローラ4は、取得した物理アドレスによって示される、リード対象ブロック内のリード対象物理記憶位置からデータを読み出し、読み出したデータをホスト2に返す(ステップS15)。そして、コントローラ4は、リード対象ブロックに対応する第1カウンタ値を例えば1だけ減分する(ステップS16)。
一方、リード対象ブロックから読み出し対象データが読み出し可能でない場合(ステップS14のNO)、つまりこのリード対象ブロックが書き込み先ブロックであり且つ読み出し対象データがリード対象ブロックから読み出し可能でない場合、コントローラ4は、このリード対象ブロック(書き込み先ブロック)に対応する第2カウンタ値を例えば1だけ増分する(ステップS17)。
コントローラ4は、取得したブロック内オフセットに関連付けられているバッファアドレスをリード対象ブロック(書き込み先ブロック)に対応するライトバッファアドレスリストから取得し、この取得したバッファアドレスに基づいて、バッファ(ホストメモリ内のライトバッファ51またはDRAM6内のバッファ32)から読み出し対象データを読み出し、読み出したデータをホスト2に返す(ステップS18)。コントローラ4は、リード対象ブロック(書き込み先ブロック)に対応する第2カウンタ値を例えば1だけ減分する(ステップS19)。そして、コントローラ4は、リード対象ブロックに対応する第1カウンタ値を例えば1だけ減分する(ステップS16)。
図11のフローチャートは、SSD3において実行されるブロック再利用処理の手順を示す。
コントローラ4は、データ更新、GCまたはデアロケーション(トリム/アンマップ)によって有効データがもはや存在しなくなったブロックがあるか否かを判定する(ステップS21)。有効データがもはや存在しなくなったブロックがある場合、つまりあるブロックから有効データが無くなった場合(ステップS21のYES)、コントローラ4は、このブロックに対応する第1カウンタ値を参照する(ステップS22)。
コントローラ4は、データ更新、GCまたはデアロケーション(トリム/アンマップ)によって有効データがもはや存在しなくなったブロックがあるか否かを判定する(ステップS21)。有効データがもはや存在しなくなったブロックがある場合、つまりあるブロックから有効データが無くなった場合(ステップS21のYES)、コントローラ4は、このブロックに対応する第1カウンタ値を参照する(ステップS22)。
このブロックに対応する第1カウンタ値が零である場合(ステップS23のYES)、コントローラ4は、このブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる(ステップS25)。ステップS25では、コントローラ4は、このブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させるために、このブロックのブロックアドレスをアクティブブロックのリストから削除してフリーブロックのリストに追加する処理を実行してもよい。
このブロックに対応する第1カウンタ値が零でない場合(ステップS23のNO)、コントローラ4は、第1カウンタ値が零になるまで待つ(ステップS24)。第1カウンタ値が零になった場合(ステップS23のYES)、コントローラ4は、このブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる(ステップS25)。
図12のフローチャートは、SSD3において実行されるブロック消去処理の手順を示す。
あるブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させるための処理の例には、このブロックをフリーブロックのリストに加える処理の他、このブロックに対する消去動作を実行することも含まれる。ブロックに対する消去動作は、このブロックから有効データが無くなったことをトリガーに実行されてもよい。あるいは、フリーブロックリストから選択されたブロックを書き込み先ブロックとして割り当てる直前に、このブロックに対する消去動作が実行されてもよい。図12は、後者の場合に対応するブロック消去処理の手順を示す。
あるブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させるための処理の例には、このブロックをフリーブロックのリストに加える処理の他、このブロックに対する消去動作を実行することも含まれる。ブロックに対する消去動作は、このブロックから有効データが無くなったことをトリガーに実行されてもよい。あるいは、フリーブロックリストから選択されたブロックを書き込み先ブロックとして割り当てる直前に、このブロックに対する消去動作が実行されてもよい。図12は、後者の場合に対応するブロック消去処理の手順を示す。
あるブロックに対する消去動作の要求が生じた場合(ステップS31)、コントローラ4は、このブロックに対応する第1カウンタ値を参照する(ステップS32)。このブロックに対応する第1カウンタ値が零である場合(ステップS33のYES)、コントローラ4は、このブロックに対する消去動作を実行する(ステップS25)。
このブロックに対応する第1カウンタ値が零でない場合(ステップS33のNO)、コントローラ4は、第1カウンタ値が零になるまで待つ(ステップS34)。第1カウンタ値が零になった場合(ステップS33のYES)、コントローラ4は、このブロックに対する消去動作を実行する(ステップS25)。
図13は、SSD3において実行されるバッファ解放制御処理の手順を示す。
ここでは、書き込み先ブロックBLK10、BLK20、…、BLK100の各々に対するデータ書き込みの進行によってこれら各書き込み先ブロックにデータが書き込まれた場合を想定する。
ここでは、書き込み先ブロックBLK10、BLK20、…、BLK100の各々に対するデータ書き込みの進行によってこれら各書き込み先ブロックにデータが書き込まれた場合を想定する。
例えば、あるデータを書き込み先ブロックBLK10に書き込む動作が完了した場合、このデータをバッファ(ホストメモリ内のライトバッファ51またはDRAM6内のバッファ32)に保持しておく必要が無くなる。この場合、コントローラ4は、書き込み先ブロックBLK10に対応する第2カウンタ値を参照し(ステップS41)、第2カウンタ値が零であるか否かを判定する(ステップS42)。第2カウンタ値が零でない場合(ステップS42のNO)、コントローラ4は、第2カウンタ値が零になるまで、書き込み先ブロックBLK10に関連付けられたライトデータ(ストリームID#1のストリームに関連付けられたライトデータ)が格納されている、バッファ(ホストメモリ内のライトバッファ51またはDRAM6内のバッファ32)内の領域の解放を禁止する(ステップS43)。ステップS43では、例えば、コントローラ4は、ストリームID#1を含むライトコマンドの完了を示す応答をホスト2に返す処理の実行を第2カウンタ値が零になるまで待たせ、これによってストリームID#1のストリームに関連付けられたライトデータが格納されている、ホストメモリ内のライトバッファ51内の領域の解放を、第2カウンタ値が零になるまで、禁止してもよい。
また、例えば、あるデータを書き込み先ブロックBLK20に書き込む動作が完了した場合、このデータをバッファ(ホストメモリ内のライトバッファ51またはDRAM6内のバッファ32)に保持しておく必要が無くなる。この場合、コントローラ4は、書き込み先ブロックBLK20に対応する第2カウンタ値を参照し(ステップS44)、第2カウンタ値が零であるか否かを判定する(ステップS45)。第2カウンタ値が零でない場合(ステップS45のNO)、コントローラ4は、第2カウンタ値が零になるまで、書き込み先ブロックBLK20に関連付けられたライトデータ(ストリームID#2のストリームに関連付けられたライトデータ)が格納されている、バッファ(ホストメモリ内のライトバッファ51またはDRAM6内のバッファ32)内の領域の解放を禁止する(ステップS46)。ステップS46では、例えば、コントローラ4は、ストリームID#2を含むライトコマンドの完了を示す応答をホスト2に返す処理の実行を第2カウンタ値が零になるまで待たせ、これによってストリームID#2のストリームに関連付けられたライトデータが格納されている、ホストメモリ内のライトバッファ51内の領域の解放を、第2カウンタ値が零になるまで、禁止してもよい。
また、例えば、あるデータを書き込み先ブロックBLK100に書き込む動作が完了した場合、このデータをバッファ(ホストメモリ内のライトバッファ51またはDRAM6内のバッファ32)に保持しておく必要が無くなる。この場合、コントローラ4は、書き込み先ブロックBLK100に対応する第2カウンタ値を参照し(ステップS47)、第2カウンタ値が零であるか否かを判定する(ステップS48)。第2カウンタ値が零でない場合(ステップS48のNO)、コントローラ4は、第2カウンタ値が零になるまで、書き込み先ブロックBLK100に関連付けられたライトデータ(ストリームID#nのストリームに関連付けられたライトデータ)が格納されている、バッファ(ホストメモリ内のライトバッファ51またはDRAM6内のバッファ32)内の領域の解放を禁止する(ステップS49)。ステップS49では、例えば、コントローラ4は、ストリームID#nを含むライトコマンドの完了を示す応答をホスト2に返す処理の実行を第2カウンタ値が零になるまで待たせ、これによってストリームID#nのストリームに関連付けられたライトデータが格納されている、ホストメモリ内のライトバッファ51内の領域の解放を、第2カウンタ値が零になるまで、禁止してもよい。
なお、ある書き込み先ブロックに対する書き込み動作が進行しなければ、この書き込み先ブロックに書き込むべきライトデータが格納されているバッファ内の領域は解放されない。したがって、コントローラ4は、ある書き込み先ブロックの読み出し不可能領域に対する未完了のリードコマンドがなくなるまで(この書き込み先ブロックに対応する第2カウンタ値が零になるまで)、この書き込み先ブロックに対するデータの書き込みを禁止することによって、この書き込み先ブロックに書き込むべきライトデータが格納されているバッファ内の領域の解放を禁止してもよい。
この場合、図14のフローチャートに示すように、コントローラ4は、書き込み先ブロックBLK10に対応する第2カウンタ値を参照し(ステップS51)、第2カウンタ値が零であるか否かを判定する(ステップS52)。第2カウンタ値が零でない場合(ステップS52のNO)、コントローラ4は、第2カウンタ値が零になるまで、書き込み先ブロックBLK10に関連付けられたライトデータ(ストリームID#1のストリームに関連付けられたライトデータ)を書き込み先ブロックBLK10に書き込む動作を禁止する(ステップS53)。
コントローラ4は、書き込み先ブロックBLK20に対応する第2カウンタ値を参照し(ステップS54)、第2カウンタ値が零であるか否かを判定する(ステップS55)。第2カウンタ値が零でない場合(ステップS55のNO)、コントローラ4は、第2カウンタ値が零になるまで、書き込み先ブロックBLK20に関連付けられたライトデータ(ストリームID#2のストリームに関連付けられたライトデータ)を書き込み先ブロックBLK20に書き込む動作を禁止する(ステップS56)。
コントローラ4は、書き込み先ブロックBLK100に対応する第2カウンタ値を参照し(ステップS57)、第2カウンタ値が零であるか否かを判定する(ステップS58)。第2カウンタ値が零でない場合(ステップS58のNO)、コントローラ4は、第2カウンタ値が零になるまで、書き込み先ブロックBLK100に関連付けられたライトデータ(ストリームID#nのストリームに関連付けられたライトデータ)を書き込み先ブロックBLK100に書き込む動作を禁止する(ステップS59)。
図15は、複数のストリームに関連付けられた複数種のライトデータを複数のストリームに対応する複数の書き込み先ブロックにそれぞれ書き込むストリーム書き込み動作を示す。
図15では、ストリームID#1のストリームに対して書き込み先フロックBLK10が関連付けられており、ストリームID#2のストリームに対して書き込み先フロックBLK20が関連付けられており、ストリームID#3のストリームに対して書き込み先フロックBLK30が関連付けられており、ストリームID#4のストリームに対して書き込み先フロックBLK40が関連付けられており、ストリームID#5のストリームに対して書き込み先フロックBLK50が関連付けられており、ストリームID#6のストリームに対して書き込み先フロックBLK60が関連付けられており、そしてストリームID#nのストリームに対して書き込み先フロックBLK100が関連付けられている場合が例示されている。
例えば、エンドユーザ#1に対応するI/Oサービス(仮想マシン#1)はストリームID#1を各々が含むライトコマンドを発行し、エンドユーザ#2に対応するI/Oサービス(仮想マシン#2)はストリームID#2を各々が含むライトコマンドを発行し、そしてエンドユーザ#nに対応するI/Oサービス(仮想マシン#n)はストリームID#nを各々が含むライトコマンドを発行する。
ストリームID#1を含むライトコマンドに関連付けられたライトデータは書き込み先フロックBLK10に書き込まれ、ストリームID#2を含むライトコマンドに関連付けられたライトデータは書き込み先フロックBLK20に書き込まれ、ストリームID#nを含むライトコマンドに関連付けられたライトデータは書き込み先フロックBLK100に書き込まれる。
図16は、フリーブロック群から複数のストリームに対応する複数の書き込み先ブロックを割り当てる動作を示す。
図16においては、図示の簡単化のために、ストリームID#1のストリーム(ストリーム#1)とストリームID#2のストリーム(ストリーム#2)の2つのストリームのみが例示されている。
図16においては、図示の簡単化のために、ストリームID#1のストリーム(ストリーム#1)とストリームID#2のストリーム(ストリーム#2)の2つのストリームのみが例示されている。
NAND型フラッシュメモリ5内の各ブロックの状態は、有効データを格納しているアクティブブロックと、有効データを格納していないフリーブロックとに大別される。アクティブブロックである各ブロックは、アクティブブロックプールと称されるリストによって管理される。一方、フリーブロックである各ブロックは、フリーブロックプールと称されるリストによって管理される。アクティブブロックプール101−1は、ストリーム#1に関連付けられた有効データをそれぞれ格納しているブロックのリストである。アクティブブロックプール101−nは、ストリーム#nに関連付けられた有効データをそれぞれ格納しているブロックのリストである。フリーブロックプール200は全てのフリーブロックのリストである。これらフリーブロックは複数のストリームによって共有される。
コントローラ4がストリームID#1を含むライトコマンドを受信した場合、コントローラ4は、ストリーム#1用の書き込み先ブロック(オープンブロック)が割り当て済みであるか否かを判定する。
ストリーム#1用の書き込み先ブロックが割り当て済みでないならば、コントローラ4は、フリーブロックプール200内の一つのフリーブロックをストリーム#1用の書き込み先ブロックとして割り当てる。図16では、ブロックBLK10がストリーム#1用の書き込み先ブロックとして割り当てられた場合が例示されている。コントローラ4は、ストリームID#1を含むライトコマンドそれぞれに関連付けられたライトデータをブロックBLK10に書き込む。ストリーム#1用の書き込み先ブロックが既に割り当てられている場合、コントローラ4は、フリーブロックをストリーム#1用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。
ストリーム#1用の書き込み先ブロック(ここではBLK10)全体がホスト2からのライトデータで満たされると、コントローラ4は、この書き込み先ブロックBLK10をアクティブブロックプール101−1によって管理するとともに(クローズ)、フリーブロックプール200内のフリーブロックをストリーム#1用の新たな書き込み先ブロック(オープンブロック)として割り当てる。
アクティブブロックプール101−1内のあるブロック内の全ての有効データが、データ更新、デアロケーション(アンマップ、トリム)、ガベージコレクション等によって無効化されると、コントローラ4は、このブロックをフリーブロックプール200に移動してこのブロックを書き込み先ブロックとして再利用可能な状態に遷移させる。
コントローラ4がストリームID#nを含むライトコマンドを受信した場合、コントローラ4は、ストリーム#n用の書き込み先ブロック(オープンブロック)が割り当て済みであるか否かを判定する。
ストリーム#n用の書き込み先ブロックが割り当て済みでないならば、コントローラ4は、フリーブロックプール200内の一つのフリーブロックをストリーム#n用の書き込み先ブロックとして割り当てる。図16では、ブロックBLK100がストリーム#n用の書き込み先ブロックとして割り当てられた場合が例示されている。コントローラ4は、ストリームID#nを含むライトコマンドそれぞれに関連付けられたライトデータをブロックBLK100に書き込む。ストリーム#n用の書き込み先ブロックが既に割り当てられている場合、コントローラ4は、フリーブロックをストリーム#n用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。
ストリーム#n用の書き込み先ブロック(ここではBLK100)全体がホスト2からのライトデータで満たされると、コントローラ4は、この書き込み先ブロックBLK100をアクティブブロックプール101−nによって管理するとともに(クローズ)、フリーブロックプール200内のフリーブロックをストリーム#n用の新たな書き込み先ブロック(オープンブロック)として割り当てる。
アクティブブロックプール101−n内のあるブロック内の全ての有効データが、データ更新、デアロケーション(アンマップ、トリム)、ガベージコレクション等によって無効化されると、コントローラ4は、このブロックをフリーブロックプール200に移動してこのブロックを書き込み先ブロックとして再利用可能な状態に遷移させる。
図17は、複数のストリームに対応する複数のバッファ領域を使用して実行される書き込み動作を示す。
図17においては、ストリーム#1、ストリーム#2、ストリーム#3、…ストリーム#nにそれぞれ対応するライトバッファ領域WB#1、ライトバッファ領域WB#2、ライトバッファ領域WB#3、…ライトバッファ領域WB#nがSSD3内の第1のバッファとして用意されている。
図17においては、ストリーム#1、ストリーム#2、ストリーム#3、…ストリーム#nにそれぞれ対応するライトバッファ領域WB#1、ライトバッファ領域WB#2、ライトバッファ領域WB#3、…ライトバッファ領域WB#nがSSD3内の第1のバッファとして用意されている。
ストリームID#1を含むライトコマンドそれぞれに関連付けられたライトデータは、ホスト2のメモリ内のライトバッファ51からライトバッファ領域WB#1に転送され、ライトバッファ領域WB#1に格納される。ライトバッファWB#1内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達すると、これらライトデータが書き込み先ブロックBLK10に書き込まれる。
NAND型フラッシュメモリ5の最小書き込みサイズは、ページサイズ、つまり一つのページのサイズ(例えば16Kバイト)であってもよい。あるいは、2つのプレーンを含むNAND型フラッシュメモリチップがNAND型フラッシュメモリ5として使用されるケースにおいては、2つのプレーンからそれぞれ選択された2つのブロックに対する書き込み動作が並列に実行される場合がある。この場合には、ページサイズの2倍(例えば32Kバイト)がNAND型フラッシュメモリ5の最小書き込みサイズとして使用されてもよい。
各ライトコマンドによって指定されるライトデータの最小の長さは、例えば、4Kバイト(または512バイト)である。したがって、NAND型フラッシュメモリ5の最小書き込みサイズは、各ライトコマンドによって指定されるライトデータの最小サイズよりも大きい。
ストリームID#2を含むライトコマンドそれぞれに関連付けられたライトデータは、ホスト2のメモリ内のライトバッファ51からライトバッファ領域WB#2に転送され、ライトバッファ領域WB#2に格納される。ライトバッファWB#2内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達すると、これらライトデータが書き込み先ブロックBLK20に書き込まれる。
ストリームID#3を含むライトコマンドそれぞれに関連付けられたライトデータは、ホスト2のメモリ内のライトバッファ51からライトバッファ領域WB#3に転送され、ライトバッファ領域WB#3に格納される。ライトバッファWB#3内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達すると、これらライトデータが書き込み先ブロックBLK30に書き込まれる。
同様に、ストリームID#nを含むライトコマンドそれぞれに関連付けられたライトデータは、ホスト2のメモリ内のライトバッファ51からライトバッファ領域WB#nに転送され、ライトバッファ領域WB#nに格納される。ライトバッファWB#n内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達すると、これらライトデータが書き込み先ブロックBLK100に書き込まれる。
図17に示す構成では、ストリーム#1、ストリーム#2、ストリーム#3、…ストリーム#nにそれぞれ対応するライトバッファ領域WB#1、ライトバッファ領域WB#2、ライトバッファ領域WB#3、…ライトバッファ領域WB#nを含む大きなサイズのライトバッファをSSD3内に設ける場合を説明した。
図18は、SSD3内に設けることが必要なライトバッファサイズを削減するための
書き込み動作の例を示す。
SSD3のコントローラ4は、ホスト2からライトコマンドを受信する度にこのライトコマンドだけをコマンドキュー41に格納する。すなわち、コントローラ4は、受信されたライトコマンドの各々をストリーム#1〜#nに対応するコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応するn+1個のグループに分類する。
書き込み動作の例を示す。
SSD3のコントローラ4は、ホスト2からライトコマンドを受信する度にこのライトコマンドだけをコマンドキュー41に格納する。すなわち、コントローラ4は、受信されたライトコマンドの各々をストリーム#1〜#nに対応するコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応するn+1個のグループに分類する。
この場合、ストリームID#1を含む各ライトコマンドはコマンドキュー41−1に格納され、ストリームID#2を含む各ライトコマンドはコマンドキュー41−2に格納され、ストリームID#3を含む各ライトコマンドはコマンドキュー41−3に格納され、ストリームID#nを含む各ライトコマンドはコマンドキュー41−nに格納される。
コントローラ4は、同じグループに属するライトコマンドそれぞれによって指定される長さの合計(データサイズ)を算出することによって、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達したか否かを判定する。
例えば、ストリーム#1に対応するグループについては、コントローラ4は、コマンドキュー41−1に格納されているライトコマンドそれぞれに含まれる長さの合計を算出する。コマンドキュー41−1に格納されているライトコマンドそれぞれに含まれる長さの合計が最小書き込みサイズに達した場合には、コントローラ4は、ストリーム#1に対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達したと判定する。
同様に、ストリーム#2対応するグループについては、コントローラ4は、コマンドキュー41−2に格納されているライトコマンドそれぞれに含まれる長さの合計を算出する。コマンドキュー41−2に格納されているライトコマンドそれぞれに含まれる長さの合計が最小書き込みサイズに達した場合には、コントローラ4は、ストリーム#2に対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達したと判定する。
あるグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、例えば、ストリーム#2に対応するグループに属するライトコマンドそれぞれによって指定される長さが最小書き込みサイズに達した場合、コントローラ4は、これらライトコマンドの各々に含まれるデータポインタおよび長さに基づいて、ストリーム#2に関連付けられた最小書き込みサイズ分のライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送する。そして、コントローラ4は、内部バッファ16に転送されたライトデータを、ストリーム#2に対応する書き込み先ブロックBLK20に書き込む。ライトデータが書き込み先ブロックBLK20に書き込まれると、内部バッファ16内のこのライトデータは不要となる。
したがって、例えば、次に、コマンドキュー41−3に格納されているライトコマンドそれぞれに含まれる長さの合計が最小書き込みサイズに達した場合には、コントローラ4は、ストリーム#3に対応するグループに属するライトコマンドの集合に関連付けられた最小書き込みサイズ分のライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送することができ、そして内部バッファ16に転送されたこのライトデータを、ストリーム#3に対応する書き込み先ブロックBLK30に書き込むことができる。
このように、図18に示される書き込み動作においては、コントローラ4は、受信されたライトコマンド群に対応するライトデータの長さ(サイズ)をストリーム毎にチェックして、ライトデータのサイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する。そして、ライトデータのサイズが最小書き込みサイズに達したストリームに関連付けられた最小書き込みサイズ分のライトデータがホストメモリ内のライトバッファ51から内部バッファ16に転送される。内部バッファ16に転送された最小書き込みサイズ分のライトデータは、即座に書き込みを開始することが可能である。したがって、内部バッファ16は複数のストリームによって共有することができる。よって、図18の書き込み動作を使用した場合には、SSD3によってサポートされるべきストリームの数が増えても、最小書き込みサイズ分の内部バッファ16のみを用意するだけで、ストリーム書き込み動作を効率よく実行することができる。
図19は、データ書き込みに関する、ホスト2とSSD3それぞれの構成例を示す。
ここでは、図18の書き込み動作が使用される場合が想定されている。
ここでは、図18の書き込み動作が使用される場合が想定されている。
ホスト2においては、各ライトコマンドはサブミッションキュー71に格納される。各ライトコマンドは、ライトデータのLBA、ライトデータの長さ、ストリームID、ライトデータが格納されているライトバッファ51内の位置を示すデータポインタを含む。各ライトコマンドの完了を示す応答はコンプリーションキュー72に格納される。
各ライトコマンドに関連付けられたライトデータは、ホストメモリ内のライトバッファ51に格納される。ライトバッファ51においては、ストリーム#1〜ストリーム#nに対応する複数の領域が割り当てられていてもよい。この場合、ストリーム#1に関連付けられたライトデータはストリーム#1に対応するライトバッファ51内の領域に格納され、ストリーム#2に関連付けられたライトデータはストリーム#2に対応するライトバッファ51内の領域に格納され、ストリーム#nに関連付けられたライトデータはストリーム#nに対応するライトバッファ51内の領域に格納される。
SSD3においては、ライト制御部21は、ホスト2のサブミッションキュー71からライトコマンドそれぞれを受信し、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。ストリームID#1を含む各ライトコマンドはコマンドキュー41−1に格納され、ストリームID#2を含む各ライトコマンドはコマンドキュー41−2に格納され、そしてストリームID#nを含む各ライトコマンドはコマンドキュー41−nに格納される。
ライト制御部21は、受信した各ライトコマンドに関連付けられたライトデータが書き込まれるべきNAND型フラッシュメモリ5内の記憶位置を示す物理アドレス(PBA)をこのライトデータに割り当てるアドレス割り当て動作を実行する。物理アドレスは、ブロックアドレスと、ページアドレスと、ページ内オフセットとによって表されてもよい。各コマンドキューにおいては、ライトコマンド毎に、LBA、長さ、PBA、バッファアドレスが管理されてもよい。PBAは、このライトコマンドに関連付けられたライトデータに割り当てられた物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を示す。バッファアドレスは、このライトコマンドに関連付けられたライトデータが格納されているホストメモリのライトバッファ51内の位置を示す。このライトバッファ51内の位置は、このライトコマンドに含まれるデータポインタによって指定される。
なお、このライトデータがホストメモリのライトバッファ51からDRAM6のバッファ32(以下、DRAMバッファ32と称する)に転送された場合には、バッファアドレスの値は、このライトデータが格納されているDRAMバッファ32内の位置を示す値に更新される。例えば、あるライトコマンドの受信から所定時間が経過したライトコマンドに関連付けられたライトデータがホストメモリのライトバッファ51からDRAMバッファ32に転送されてもよい。
DRAMバッファ32においては、ストリーム#1〜ストリーム#nに対応する複数の領域が割り当てられている。この場合、ストリーム#1に関連付けられたライトデータはストリーム#1に対応するDRAMバッファ32内の領域に転送され、ストリーム#2に関連付けられたライトデータはストリーム#2に対応するDRAMバッファ32内の領域に転送され、ストリーム#nに関連付けられたライトデータはストリーム#nに対応するDRAMバッファ32内の領域に転送される。
あるストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、ライト制御部21は、このストリームに関連付けられた最小書き込みサイズ分のライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送するための転送要求をDMAC15に送信する。この転送要求の受信に応じて、DMAC15は、DMA転送を実行することによって、このストリームに関連付けられた最小書き込みサイズ分のライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送する。そして、ライト制御部21は、NANDインタフェース13にプログラム指示を送出して、内部バッファ16に転送された最小書き込みサイズ分のライトデータをNAND型フラッシュメモリ5内の書き込み先ブロックに書き込む。
基本的には、ライトデータの書き込み先ブロックへの書き込み完了後に、ライト制御部21は、このライトデータに対応するライトコマンドの完了を示す応答をホスト2に返す。各ライトコマンドの完了を示す応答は、対応するライトデータの解放をホスト2に許可するためのバッファ解放要求としてコンプリーションキュー72に入れられる。完了を示す応答は完了したライトコマンドの識別子を含むので、ホスト2は、完了を示す応答によって指定された完了したライトコマンドに関連付けられているライトデータが格納されているライトバッファ51内の領域を解放することができる。
また、最小書き込みサイズ分のライトデータの内部バッファ16への転送完了後、ライト制御部21は、このライトデータに対応するライトコマンドの各々をコマンドキューから削除してもよい。
また、上述したように、ライト制御部21は、あるストリームに対応するグループに属するあるライトコマンドの受信から所定時間が経過した場合、このストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、DMAC15を使用して、このライトコマンドに関連付けられたライトデータのみをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送し、このライトコマンドの完了を示す応答をホスト2に返す。
例えば、ストリームID#1を含むあるライトコマンドの受信から所定時間経過してもコマンドキュー41−1に格納されているライトコマンドの集合に関連付けられたライトデータのサイズが最小書き込みサイズに達しない場合、つまりあるライトコマンドがコマンドキュー41−1に維持されている時間が所定時間に達した場合、ライト制御部21は、このライトコマンドのタイムアウトエラーが起こるのを防止するために、このライトコマンドに関連付けられたライトデータのみをホストメモリ内のライトバッファ51からDRAMバッファ32に転送する。この場合、このライトデータはDRAMバッファ32内のストリーム#1用の領域に転送されてもよい。このライトコマンドはコマンドキュー41−1から削除される。
ホスト2から多くの量のデータ書き込みが要求されている期間、つまりホスト2から受信される各ストリームのライトコマンドの数が比較的多い期間においては、ライトコマンドの受信から所定時間経過する前に、各ストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達する可能性が高い。したがって、ほとんどのライトデータは、DRAMバッファ32ではなく、内部バッファ16に転送される。あるライトコマンドがコマンドキューに維持されている時間が所定時間に達するというケースは、ホスト2から受信されるライトコマンドの数が比較的少ない場合に起こる。
したがって、ライトデータの転送のためにコントローラ4とDRAM6との間のトラフィックが増大することはない。よって、コントローラ4とDRAM6との間のバンド幅をL2Pテーブル31を更新する処理のために主として利用することが可能となり、L2Pテーブル31を更新する処理を効率よく実行することが可能となる。
図20はSSD3において実行される書き込み動作のシーケンスを示す。
ライトコマンドWxをホスト2から受信した場合、コントローラ4のCPU#1(例えばCPU12−1)は、ライトコマンドWxに関連付けられたライトデータが格納されるべきNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を決定し、この物理アドレスをこのライトデータに割り当てる(アドレス割り当て動作)。コントローラ4のCPU#2(例えばCPU12−2)は、ライトコマンドWxによって指定された論理アドレスにこの物理アドレスが関連付けられるようにL2Pテーブル31を更新する(L2P更新)。
ライトコマンドWxと同じストリームIDを含む受信済みのライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、DMAC15は、ホストメモリのライトバッファ51から内部バッファ16に最小書き込みサイズ分のライトデータを転送する。そして、コントローラ4は、内部バッファ16内のライトデータを、NAND型フラッシュメモリ5内の決定された物理記憶位置に書き込む(フラッシュ書き込み)。ライトコマンドWxによって指定された論理アドレスに物理アドレスをマッピングするL2P更新、およびライトコマンドWxに関連付けられたデータを書き込み先ブロックに書き込むフラッシュ書き込みの双方が完了した後、コントローラ4は、ライトコマンドWxの完了を示す応答(completion)をホスト2に返す。
なお、ライトコマンドWxに関連付けられたライトデータをDRAMバッファ32に転送したケースにおいては、L2P更新およびデータ転送の双方が完了した後、コントローラ4は、ライトコマンドWxの完了を示す応答(completion)をホスト2に返す。
ライトコマンドWy、ライトコマンドWzについても、ライトコマンドWxと同様に処理される。
図21は、データ読み出しに関する、ホスト2とSSD3それぞれの構成例を示す。
リード制御部22がホスト2のサブミッションキュー71からリードコマンドを受信した場合、リード制御部22は、DRAM6内のL2Pテーブル31を参照することによって、このリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)をL2Pテーブル31から取得する。
リード制御部22がホスト2のサブミッションキュー71からリードコマンドを受信した場合、リード制御部22は、DRAM6内のL2Pテーブル31を参照することによって、このリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)をL2Pテーブル31から取得する。
この読み出し対象データがNAND型フラッシュメモリ5から読み出し可能である場合、リード制御部22は、この読み出し対象データを読み出すための読み出し指示をNANDインタフェース13を介してNAND型フラッシュメモリ5に送出し、この読み出し対象データをNAND型フラッシュメモリ5から読み出す。読み出された読み出し対象データはコントローラ4内の内部リードバッファ16’に一時的に格納されてもよい。内部リードバッファ16’は、内部バッファ16と同様に、コントローラ4内のSRAMによって実現されてもよい。
リード制御部22は、DMAC15を使用して、内部リードバッファ16’からホストメモリ内のリードバッファ52に読み出し対象データを転送する。読み出し対象データが転送されるべきリードバッファ52内の位置は、このリードコマンドに含まれるデータポインタによって指定される。そして、リード制御部22は、このリードコマンドの完了を示す応答をホスト2に返し、リードコマンドの完了を示す応答をホスト2のコンプリーションキュー72に入れる。
読み出し対象データがNAND型フラッシュメモリ5から読み出し可能になっていない場合、つまり読み出し対象データがまだ書き込みが開始されていない書き込み待ちデータまたは書き込みは開始されたがNAND型フラッシュメモリ5から正常に読み出すことができない書き込み途中のデータである場合、リード制御部22は、DRAMバッファ32またはホストメモリ内のライトバッファ51からこの読み出し対象データを読み出し、読み出した読み出し対象データをホスト2に返す。ホストメモリ内のライトバッファ51からこの読み出し対象データを読み出す場合には、まず、リード制御部22は、読み出し対象データをDMAC15を用いてライトバッファ51から内部リードバッファ16’に転送し、そしてこの読み出し対象データをDMAC15を用いて内部リードバッファ16’からホストメモリ内のリードバッファ52に転送する。DRAMバッファ32からこの読み出し対象データを読み出す場合には、リード制御部22は、DRAMバッファ32からこの読み出し対象データを内部リードバッファ16’に読み出し、そしてこの読み出し対象データをDMAC15を用いて内部リードバッファ16’からホストメモリ内のリードバッファ52に転送する。
コントローラ4は、上述したように、書き込み先ブロック管理テーブル34を使用して、書き込み先ブロックとして現在使用されているブロック毎に、このブロックに書き込むことが決定され且つ読み出し可能になっていないデータが存在しているバッファアドレスを管理することができる。DRAMバッファ32に転送済みで且つNAND型フラッシュメモリ5から読み出し可能になっていないデータに対応するバッファアドレスは、このデータが存在するDRAMバッファ32内の位置を示す。DRAMバッファ32に転送されておらず且つNAND型フラッシュメモリ5から読み出し可能になっていないデータに対応するバッファアドレスは、このデータが存在するホストメモリ内のライトバッファ51内の位置を示す。したがって、リード制御部22は、NAND型フラッシュメモリ5から読み出し可能になっていない読み出し対象データに対応するバッファアドレスに基づいて、DRAMバッファ32またはホストメモリ内のライトバッファ51からこの読み出し対象データを読み出すことができ、読み出した読み出し対象データをホスト2に返すことができる。
よって、ホスト2は、ライトバッファ51に向けたリード要求とSSD3に向けたリードコマンドを選択的に発行する処理を行わずとも、SSD3に向けたリードコマンドそれぞれを発行するというシンプルな処理を行うだけで、所望のデータをSSD3から受け取ることができる。
図22のフローチャートは、SSD3において実行される書き込み動作の手順を示す。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS61)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS62)。ステップS62では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS61)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS62)。ステップS62では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。
コントローラ4は、蓄積されたライトコマンドに対応する書き込み待ちのライトデータのサイズをストリーム毎にチェックして、書き込み待ちのライトデータのサイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する(ステップS63)。すなわち、ステップS63では、コントローラ4は、複数のグループの各々に関して、同じグループに属するライトコマンドそれぞれによって指定される長さの合計を算出することによって同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さ(書き込み待ちのライトデータのサイズ)が最小書き込みサイズに達したか否かを判定する。
書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームを検出した場合(ステップS64のYES)、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に、検出したストリームに関連付けられた最小書き込みサイズ分のライトデータを転送する(ステップS65)。そして、コントローラ4は、内部バッファ16に転送されたライトデータを、このストリーム用に割り当てられている書き込み先ブロックに書き込む(ステップS66)。
なお、コントローラ4は、このストリームに関連付けられたライトコマンドそれぞれの完了を示す応答を、ステップS66における書き込み先ブロックへの書き込み完了後に、ホスト2に返す。
書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS64のNO)、コントローラ4は、受信から所定時間が経過したライトコマンドの有無を検出する(ステップS67)。
あるストリームに対応するライトコマンドの受信から所定時間が経過したことを検出した場合(ステップS67のYES)、コントローラ4は、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送する(ステップS68)。このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送した後、コントローラ4は、このライトコマンドを、このライトコマンドが格納されているコマンドキューから削除する。そして、コントローラ4は、このライトコマンドの完了を示す応答をホスト2に返す。
このように、あるストリームに対応するライトコマンドの受信から所定時間が経過した場合、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送する処理と、このライトコマンドの完了を示す応答をホスト2に返す処理とがコントローラ4によって実行される。
また、このようにあるストリームに対応するグループに属するライトコマンドに関連付けられたライトデータをDRAMバッファ32に転送する構成においては、コントローラ4は、DRAMバッファ32に転送したライトデータの長さとこのストリームに対応するグループに属するライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとの合計長さが最小書き込みサイズに達したことを条件に、ホストメモリ内のライトバッファ51から内部バッファ16へのデータ転送を実行する。
図23のフローチャートは、DRAMバッファ32を使用してSSD3において実行される書き込み動作の手順を示す。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS71)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS72)。ステップS72では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS71)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS72)。ステップS72では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。
コントローラ4は、蓄積されたライトコマンドに対応する書き込み待ちのライトデータのサイズとDRAMバッファ32内のライトデータのサイズの合計サイズ(合計長さ)をストリーム毎にチェックして、合計サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する(ステップS73)。すなわち、ステップS73では、コントローラ4は、複数のグループの各々に関して、コマンドキュー内のライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したか否かを判定する。
コマンドキュー内のライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したストリームを検出した場合(ステップS74のYES)、コントローラ4は、DRAMバッファ32から内部バッファ16に、検出されたストリーム用のライトデータを転送する(ステップS75)。コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に、検出したストリームに関連付けられたライトデータを転送する(ステップS76)。そして、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に転送されたライトデータを、DRAMバッファ32から内部バッファ16に転送されたライトデータと一緒に、このストリーム用に割り当てられている書き込み先ブロックに書き込む(ステップS77)。
なお、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に転送されたライトデータに対応するライトコマンドそれぞれの完了を示す応答を、ステップS77における書き込み先ブロックへの書き込み完了後にホスト2に返す。また、これらライトコマンドはコマンドキューから削除される。
書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS74のNO)、コントローラ4は、図22のステップS67、S68の処理を実行する。
すなわち、コントローラ4は、受信から所定時間が経過したライトコマンドの有無を検出する(ステップS67)。あるストリームに対応するライトコマンドの受信から所定時間が経過したことを検出した場合(ステップS67のYES)、コントローラ4は、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送する(ステップS68)。このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送した後、コントローラ4は、このライトコマンドを、このライトコマンドが格納されているコマンドキューから削除する。そして、コントローラ4は、このライトコマンドの完了を示す応答をホスト2に返す。
以上説明したように、本実施形態によれば、ホストからリードコマンドが受信された場合、複数のブロックに対応する複数の第1カウンタ値のうち、受信されたリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているブロックアドレスを有するリード対象ブロックに対応する第1カウンタ値が増分される。そして、読み出し対象データがリード対象ブロックから読み出し可能か否かに応じて、読み出し対象データがリード対象ブロックまたはバッファから読み出され、読み出しの終了後にリード対象ブロックに対応する第1カウンタ値が減分される。
また、リード対象ブロックが複数の書き込み先ブロックのうちの一つの書き込み先ブロックであり且つ読み出し対象データがリード対象ブロックから読み出し可能でない場合、複数の書き込み先ブロックに対応する複数の第2カウンタ値のうち、この一つの書き込み先ブロックに対応する第2カウンタ値が増分され、バッファから読み出し対象データが読み出され、読み出しの終了後にこの一つの書き込みブロックに対応する第2カウンタ値が減分される。
このように、書き込み先ブロックに書き込み中または書き込み待ちのデータが読み出し対象データとして指定された場合には、バッファ(SSD3内の第1のバッファまたはホスト2のライトバッファ51)から読み出し対象データが読み出される。したがって、ある書き込み先ブロックに書き込み中のデータまたはこの書き込み先ブロックへの書き込みが開始されていない書き込み待ちのデータがホスト2からのリードコマンドによって要求された場合でも、このデータをホスト2に返すことができるので、データのリードに関する性能の向上を図ることができる。
また、複数の第1カウンタ値に基づいて、未完了のリードコマンドが存在するブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理が禁止される。さらに、複数の第2カウンタ値に基づいて、バッファからのデータの読み出しを必要とする未完了のリードコマンドが存在する書き込み先ブロックへの書き込み中もしくは書き込み待ちのデータが格納されている、バッファ内の領域の解放が禁止される。よって、データ読み出し元として決定された、ブロックまたはバッファからこのデータが正しく読み出せなくなってしまう、という事態が起こることを防止することができ、ブロックまたはバッファのどちらからデータを読み出す場合においても、データの一貫性を維持することができる。
なお、SSD3がDRAM6を備えない構成を有するケースにおいては、読み出し対象データの論理アドレスに割り当てられている物理記憶位置が複数の書き込み先ブロックの一つの書き込み先ブロック内の読み出し不可能領域である場合、ホスト2のライトバッファ51から読み出し対象データが読み出される。
また、比較的大きなサイズのDRAMバッファ32を使用可能なケースにおいては、ホスト2からのライトコマンドの受信の度にライトデータをホスト2のライトバッファ51からDRAMバッファ32に転送してもよい。
なお、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、16…内部バッファ、21…ライト制御部、22…リード制御部、23…ブロック/バッファ制御部23、51…ライトバッファ。
Claims (10)
- ホストに接続可能なメモリシステムであって、
複数のページを各々が含む複数のブロックを含み、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する1以上のページへのデータの書き込み後に可能となる不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記複数のブロックから割り当てられた複数の書き込み先ブロックにデータを書き込むように構成されたコントローラとを具備し、
前記コントローラは、
前記ホストからリードコマンドを受信した場合、前記複数のブロックに対応する複数の第1カウンタ値のうち、前記受信したリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているブロックアドレスを有する第1のブロックに対応する第1カウンタ値を増分し、
前記読み出し対象データが前記第1のブロックから読み出し可能か否かに応じて、前記読み出し対象データを前記第1のブロックまたはバッファから読み出し、前記読み出しの終了後に前記第1のブロックに対応する前記第1カウンタ値を減分し、前記バッファは前記メモリシステム内の第1のバッファまたは前記ホストのライトバッファであり、
前記第1のブロックが前記複数の書き込み先ブロックのうちの第1の書き込み先ブロックであり且つ前記読み出し対象データが前記第1のブロックから読み出し可能でない場合、前記複数の書き込み先ブロックに対応する複数の第2カウンタ値のうち、前記第1の書き込み先ブロックに対応する第2カウンタ値を増分し、前記バッファから前記読み出し対象データを読み出し、前記読み出しの終了後に前記第1の書き込みブロックに対応する前記第2カウンタ値を減分し、
前記複数の第1カウンタ値に基づいて、未完了のリードコマンドが存在するブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理を禁止し、前記複数の第2カウンタ値に基づいて、前記バッファからのデータの読み出しを必要とする未完了のリードコマンドが存在する書き込み先ブロックへの書き込み中もしくは書き込み待ちのデータが格納されている前記バッファ内の領域の解放を禁止するように構成されている、メモリシステム。 - 前記コントローラは、前記複数のブロックのうちの一つのブロックから有効データが無くなった場合、前記複数の第1カウンタ値のうちの前記一つのブロックに対応する第1カウンタ値が零になった後、前記一つのブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させるように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、前記複数の書き込み先ブロックのうちの一つの書き込み先ブロックへの書き込み動作の進行によって第1ライトデータが前記バッファから不要になった場合、前記複数の第2カウンタ値のうちの前記一つの書き込み先ブロックに対応する第2カウンタ値が零になった後、前記第1ライトデータが格納されている前記バッファ内の領域の解放を許可するように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、前記第1の書き込み先ブロック内の読み出し不可能領域の物理アドレスそれぞれと前記第1の書き込み先ブロックへの書き込み中もしくは書き込み待ちのデータが格納されている前記バッファ内の位置それぞれとの間の対応関係を示すバッファ管理情報を参照することによって前記読み出し対象データが格納されている前記バッファ内の位置を取得し、前記取得した前記バッファ内の位置から前記読み出し対象データを読み出すように構成されている請求項1記載のメモリシステム。
- 前記遷移させる処理は、前記複数のブロックの一つをフリーブロックのリストに加える処理、または前記複数のブロックの一つに対する消去動作を実行する処理を含む請求項1記載のメモリシステム。
- 前記コントローラは、複数のストリームの一つを示すストリーム識別子を含むライトコマンドそれぞれを前記ホストから受信し、前記複数のストリームに関連付けられたライトデータを前記複数の書き込み先ブロックにそれぞれ書き込むように構成され、
前記バッファは、前記複数のストリームに対応するライトデータを格納する複数の領域を含み、
前記コントローラは、
前記複数の書き込み先ブロックのうちの一つの書き込み先ブロックへの書き込み動作の進行によって第1ライトデータが前記バッファから不要になった場合、前記複数の第2カウンタ値のうちの前記一つの書き込み先ブロックに対応する第2カウンタ値が零になるまで、前記バッファ内の前記複数の領域のうち、前記第1の書き込み先ブロックに対応するストリームに関連付けられたライトデータが格納されている領域の解放を禁止するように構成されている請求項1記載のメモリシステム。 - 複数のページを各々が含む複数のブロックを含み、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する1以上のページへのデータの書き込み後に可能となる不揮発性メモリを含むメモリシステムを制御する制御方法であって、
ホストからリードコマンドを受信した場合、前記複数のブロックに対応する複数の第1カウンタ値のうち、前記受信したリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられているブロックアドレスを有する第1のブロックに対応する第1カウンタ値を増分することと、
前記読み出し対象データが前記第1のブロックから読み出し可能か否かに応じて、前記読み出し対象データを前記第1のブロックまたはバッファから読み出し、前記読み出しの終了後に前記第1のブロックに対応する前記第1カウンタ値を減分することと、前記バッファは前記メモリシステム内の第1のバッファまたは前記ホストのライトバッファであり、
前記第1のブロックが前記複数のブロックから割り当てられた複数の書き込み先ブロックのうちの第1の書き込み先ブロックであり且つ前記読み出し対象データが前記第1のブロックから読み出し可能でない場合、前記複数の書き込み先ブロックに対応する複数の第2カウンタ値のうち、前記第1の書き込み先ブロックに対応する第2カウンタ値を増分し、前記バッファから前記読み出し対象データを読み出し、前記読み出しの終了後に前記第1の書き込みブロックに対応する前記第2カウンタ値を減分することと、
前記複数の第1カウンタ値に基づいて、未完了のリードコマンドが存在するブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させる処理を禁止し、前記バッファからのデータの読み出しを必要とする未完了のリードコマンドが存在する書き込み先ブロックへの書き込み中もしくは書き込み待ちのデータが格納されている前記バッファ内の領域の解放を禁止することとを具備する制御方法。 - 前記複数のブロックのうちの一つのブロックから有効データが無くなった場合、前記複数の第1カウンタ値のうち、前記一つのブロックに対応する第1カウンタ値が零になった後、前記一つのブロックを新たな書き込み先ブロックとして再利用可能な状態に遷移させることをさらに具備する請求項7記載の制御方法。
- 前記複数の書き込み先ブロックのうちの一つの書き込み先ブロックへの書き込み動作の進行によって第1ライトデータが前記バッファから不要になった場合、前記複数の第2カウンタ値のうち、前記一つの書き込み先ブロックに対応する第2カウンタ値が零になった後、前記第1ライトデータが格納されている前記バッファ内の領域の解放を許可することをさらに具備する請求項7記載の制御方法。
- 前記遷移させる処理は、前記複数のブロックの一つをフリーブロックのリストに加える処理、または前記複数のブロックの一つに対する消去動作を実行する処理を含む請求項7記載の制御方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019155833A JP2021033848A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
US16/815,970 US11119701B2 (en) | 2019-08-28 | 2020-03-11 | 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 nonvalatile memory |
US17/444,856 US11762591B2 (en) | 2019-08-28 | 2021-08-11 | 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 |
US18/363,898 US20230376250A1 (en) | 2019-08-28 | 2023-08-02 | 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 nonvalatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019155833A JP2021033848A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021033848A true JP2021033848A (ja) | 2021-03-01 |
Family
ID=74676624
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019155833A Pending JP2021033848A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
Country Status (2)
Country | Link |
---|---|
US (3) | US11119701B2 (ja) |
JP (1) | JP2021033848A (ja) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20210044564A (ko) * | 2019-10-15 | 2021-04-23 | 삼성전자주식회사 | 스토리지 장치 및 그것의 가비지 컬렉션 방법 |
US11221949B2 (en) * | 2020-02-10 | 2022-01-11 | Micron Technology, Inc. | Multi state purgatory for media management for a memory subsystem |
US11599377B2 (en) * | 2020-08-17 | 2023-03-07 | Alibaba Group Holding Limited | Open-channel storage device management with FTL on virtual machine |
KR20220072242A (ko) * | 2020-11-25 | 2022-06-02 | 삼성전자주식회사 | 비휘발성 메모리 장치의 데이터 기입 방법 및 이를 수행하는 비휘발성 메모리 장치 |
US11656792B2 (en) * | 2021-06-29 | 2023-05-23 | International Business Machines Corporation | Mirroring data in write caches of a controller of a non-volatile memory |
US11893243B2 (en) * | 2021-10-06 | 2024-02-06 | Western Digital Technologies, Inc. | Storage system and method for program reordering to mitigate program disturbs |
WO2023115308A1 (en) * | 2021-12-21 | 2023-06-29 | Yangtze Memory Technologies Co., Ltd. | System and method for defragmentation of memory device |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6795264B2 (en) * | 2001-10-25 | 2004-09-21 | Texas Instruments Incorporated | LBA tracking for system data management |
US9058281B2 (en) * | 2012-06-01 | 2015-06-16 | Seagate Technology Llc | Allocating memory usage based on quality metrics |
US9779021B2 (en) | 2014-12-19 | 2017-10-03 | International Business Machines Corporation | Non-volatile memory controller cache architecture with support for separation of data streams |
US20170017571A1 (en) | 2015-07-17 | 2017-01-19 | Samsung Electronics Co., Ltd. | Method and apparatus fori n-line deduplication in storage devices |
US10031670B2 (en) * | 2015-09-04 | 2018-07-24 | Toshiba Memory Corporation | Control unit and control method for controlling writes and background operations of multiple semiconductor storage devices |
JP6448570B2 (ja) | 2016-03-08 | 2019-01-09 | 東芝メモリ株式会社 | ストレージシステム、情報処理システムおよび制御方法 |
US10379765B2 (en) * | 2017-06-27 | 2019-08-13 | Western Digital Technologies, Inc. | Geometry-aware command scheduling |
KR20190085644A (ko) * | 2018-01-11 | 2019-07-19 | 에스케이하이닉스 주식회사 | 데이터 처리 시스템 및 그것의 동작 방법 |
US10754578B2 (en) * | 2018-05-09 | 2020-08-25 | Micron Technology, Inc. | Memory buffer management and bypass |
JP7091203B2 (ja) * | 2018-09-19 | 2022-06-27 | キオクシア株式会社 | メモリシステムおよび制御方法 |
-
2019
- 2019-08-28 JP JP2019155833A patent/JP2021033848A/ja active Pending
-
2020
- 2020-03-11 US US16/815,970 patent/US11119701B2/en active Active
-
2021
- 2021-08-11 US US17/444,856 patent/US11762591B2/en active Active
-
2023
- 2023-08-02 US US18/363,898 patent/US20230376250A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230376250A1 (en) | 2023-11-23 |
US11762591B2 (en) | 2023-09-19 |
US11119701B2 (en) | 2021-09-14 |
US20210064291A1 (en) | 2021-03-04 |
US20210373814A1 (en) | 2021-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7159069B2 (ja) | メモリシステムおよび制御方法 | |
JP7051546B2 (ja) | メモリシステムおよび制御方法 | |
JP7358594B2 (ja) | メモリシステム | |
JP2021033848A (ja) | メモリシステムおよび制御方法 | |
US12093172B2 (en) | Memory system and method of controlling nonvolatile memory | |
US11726707B2 (en) | System and method of writing to nonvolatile memory using write buffers | |
US11409467B2 (en) | Memory system and method of controlling nonvolatile memory and for reducing a buffer size | |
JP7381678B2 (ja) | メモリシステム | |
US12045513B2 (en) | Memory system and method of controlling nonvolatile memory with checking a total size indicative of a sum of data length specified by a write command | |
JP2023010765A (ja) | メモリシステム | |
US12124735B2 (en) | System and method of writing to nonvolatile memory using write buffers | |
JP7337228B2 (ja) | メモリシステムおよび制御方法 |