JP2021033847A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2021033847A JP2021033847A JP2019155832A JP2019155832A JP2021033847A JP 2021033847 A JP2021033847 A JP 2021033847A JP 2019155832 A JP2019155832 A JP 2019155832A JP 2019155832 A JP2019155832 A JP 2019155832A JP 2021033847 A JP2021033847 A JP 2021033847A
- Authority
- JP
- Japan
- Prior art keywords
- write
- buffer
- stream
- data
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/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/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
- 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/0683—Plurality of storage devices
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)
- Techniques For Improving Reliability Of Storages (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
【課題】バッファのサイズを増やすことなく、複数の書き込み先ブロックを利用可能なメモリシステムを実現する。【解決手段】メモリシステムは、複数のストリームに対応する複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが不揮発性メモリの最小書き込みサイズに達したか否かを判定する。第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、メモリシステムは、第1のグループに属するライトコマンドの集合に関連付けられたライトデータをホストのメモリ内のライトバッファからメモリシステム内の第1のバッファに転送し、第1のバッファに転送されたライトデータを、第1のストリームに対応する第1の書き込み先ブロックに書き込む。【選択図】図8
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
SSDは、データセンターのサーバのような様々なホスト計算機システムのストレージデバイスとして使用されている。
ホスト計算機システムにおいて利用されるストレージデバイスにおいては、異なる種類のデータを異なる書き込み先ブロックに書き込むことを可能にすることが求められる場合がある。
本発明が解決しようとする課題は、バッファのサイズを増やすことなく、複数の書き込み先ブロックを利用可能なメモリシステムおよび制御方法を提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、複数のストリームに対応する複数の書き込み先ブロックを前記複数のブロックから割り当てるように構成されたコントローラとを具備する。前記コントローラは、前記複数のストリームの一つを示すストリーム識別子を各々が含む複数のライトコマンドを前記ホストから受信する。前記コントローラは、前記受信されたライトコマンドそれぞれを前記複数のストリームに対応する複数のグループに分類する。前記コントローラは、前記複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記不揮発性メモリの最小書き込みサイズに達したか否かを判定する。前記コントローラは、前記複数のストリームのうちの第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第1のグループに属するライトコマンドの集合に関連付けられたライトデータを、前記ホストのメモリ内のライトバッファから前記メモリシステム内の第1のバッファに転送する。前記コントローラは、前記第1のバッファに転送された前記ライトデータを、前記複数の書き込み先ブロックのうちの前記第1のストリームに対応する第1の書き込み先ブロックに書き込む。
以下、図面を参照して、実施形態を説明する。
図1は、ホストと実施形態に係るメモリシステムとの関係を示すブロック図である。
図1は、ホストと実施形態に係るメモリシステムとの関係を示すブロック図である。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。
ホスト(ホストデバイス)2は、複数のSSD3を制御するように構成されている。ホスト2は、複数のSSD3によって構成されるフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
なお、SSD3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のSSD3)を制御するコントローラを含む。SSD3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、SSD3のホストとして機能してもよい。
以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。
ホスト(サーバ)2と複数のSSD3は、インタフェース50を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。各仮想マシンに対応するオペレーティングシステムは、I/Oサービスを含む。このI/Oサービスは、論理ブロックアドレス(LBA)ベースのブロックI/Oサービスであってもよいし、あるいは、キー・バリュー・ストアサービスであってもよい。
各仮想マシンに対応するオペレーティングシステムにおいては、I/Oサービスは、ユーザアプリケーションからのライト/リード要求に応答して、I/Oコマンド(ライトコマンド、リードコマンド)を発行する。これらI/Oコマンドはホスト2内のサブミッションキューに入れられ、そしてこのサブミッションキューを介してSSD3に送出される。
SSD3は、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))が使用され得る。
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として機能することができる。なお、これらライト制御部21およびリード制御部22の各々の一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
ライト制御部21は、ホスト2から受信されるライトコマンドに応じて、ライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込むための処理を実行する。ライト制御部21は、上述のストリーム書き込み動作をサポートしている。ライト制御部21は、NAND型フラッシュメモリ5の複数のブロックから複数のストリームに対応する複数の書き込み先ブロックを割り当て、これら割り当てられた複数の書き込み先ブロックを管理する。
NAND型フラッシュメモリには、プログラムディスターブを低減するために、ブロック内の複数のページ内の一つのページに書き込まれたデータの読み出しがこのページに後続する1以上のページへのデータ書き込み後に可能となるようなものもある。各ページのデータが読み出し可能となるタイミングはNAND型フラッシュメモリに適用されている書き込み方法によって異なる。
例えば、一つのメモリセル当たりに3ビットのデータを格納可能なトリプルレベルセル(TLC)−フラッシュメモリにおいては、ワード線WL0に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、次のワード線WL1に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、さらに次のワード線WL2に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、さらに次のワード線WL3に接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられ、そして最後のワード線WLnに接続されたメモリセル群にロアーページ、ミドルページ、およびアッパーページが割り当てられる。各ワード線に接続されたメモリセル群においては、アッパーページに対する書き込み動作が完了するまでは、ロアーページおよびミドルページの各々からデータを正しく読み出すことでできない。
また、NAND型フラッシュメモリにおいては、各ブロックにデータを書き込むために必要なページの順序を示すページ書き込み順序が規定されている。例えば、TLC−フラッシュメモリにおいては、プログラムディスターブによる影響を抑制するために、隣接する幾つかのワード線に対する書き込み動作が交互に実行されるようにページ書き込み順序が規定されている。
例えば、WL0のロアーページへの書き込み、WL1のロアーページへの書き込み、WL0のミドルページへの書き込み、WL2のロアーページへの書き込み、WL1のミドルページへの書き込み、WL0のアッパーページへの書き込み、WL3のロアーページへの書き込み、WL2のミドルページへの書き込み、WL1のアッパーページへの書き込み、といった書き込み順序で書き込み動作が実行される。このため、ブロック内の複数のページ内の一つのページに書き込まれたデータの読み出しは、このページに後続する幾つかのページへのデータ書き込み後に可能となる。
ライト制御部21は、ライトコマンドそれぞれをホスト2から受信し、各ライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込む書き込み動作を実行する。書き込み動作は、(1)ライトデータが書き込まれるべきNAND型フラッシュメモリ5内の記憶位置を示す物理アドレスをこのライトデータに割り当てるアドレス割り当て動作、(2)このライトデータをホスト2のメモリ内のライトバッファから転送するデータ転送動作、(3)ホスト2のメモリ内のライトバッファから転送されたライトデータを書き込み先ブロックに書き込むフラッシュ書き込み動作(プログラム動作)、(4)このライトデータの論理アドレスにこのライトデータに割り当てられた物理アドレスが関連付けられるようにL2Pテーブル31を更新するL2P更新動作、等を含む。
本実施形態においては、ライト制御部21は、上述したように、異なるストリームに関連付けられたライトデータを異なる書き込み先ブロックにそれぞれ書き込むストリーム書き込みをサポートしている。ホスト2から受信される各ライトコマンドはストリームIDを含んでいるので、ライト制御部21は、各ライトコマンドに関連付けられたライトデータがどのストリームに関連付けられたデータであるかを識別することができる。
データセンターのサーバのようなホスト計算機システムにおいては、多数のエンドユーザをサポートできるようにするために、多数のストリームを利用可能なSSDの実現が望まれる場合がある。
しかし、もしホスト2からライトコマンドを受信する度にライトデータをホスト2からSSD3内のバッファに転送するという構成が使用されたならば、大容量のバッファをSSD内に用意することが必要とされ、これによってSSD3のコストアップが引き起こされることになる。また、もし大容量のバッファをDRAM6の記憶領域内に確保するという構成が使用されたならば、データ転送のためにコントローラ4とDRAM6との間のトラフィックが増大し、これによってDRAM6内のL2Pテーブル31をアクセスするための速度が低下し、結果としてSSD3の性能低下を招くことになる。
本実施形態においては、ライト制御部21は、必要なバッファサイズを削減できるようにするために、以下のストリーム書き込み動作を実行する。
ライト制御部21は、ホスト2からライトコマンドそれぞれを受信する。これら各ライトコマンドは、ストリームIDを含む。ライト制御部21は、受信したライトコマンドそれぞれを複数のストリームに対応する複数のグループ(ライトコマンドグループ)に分類する。そして、ライト制御部21は、グループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さがNAND型フラッシュメモリ5の最小書き込みサイズに達したか否かを判定する。
NAND型フラッシュメモリ5の最小書き込みサイズは、ページサイズ、つまり一つのページのサイズ(例えば16Kバイト)であってもよい。あるいは、2つのプレーンを含むNAND型フラッシュメモリチップがNAND型フラッシュメモリ5として使用されるケースにおいては、2つのプレーンからそれぞれ選択された2つのブロックに対する書き込み動作が並列に実行される場合がある。この場合には、ページサイズの2倍(例えば32Kバイト)がNAND型フラッシュメモリ5の最小書き込みサイズとして使用されてもよい。
各ライトコマンドによって指定されるライトデータの最小の長さは、例えば、4Kバイト(または512バイト)である。したがって、NAND型フラッシュメモリ5の最小書き込みサイズは、各ライトコマンドによって指定されるライトデータの最小サイズよりも大きい。
同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していな場合、ライト制御部21は、このグループに属するライトコマンドの集合に関連付けられたライトデータをホスト2のメモリ内のライトバッファから取得する処理を実行せずに、このグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達するまで待つ。これは、NAND型フラッシュメモリ5への書き込みを開始できないライトデータによってSSD3内のバッファ内の領域が長い間専有されてしまうことを防止するためである。
このグループに属する新たなライトコマンドがホスト2から受信されることによってこのグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、ライト制御部21は、最小書き込みサイズを有する、このグループに属するライトコマンドの集合に関連付けられたライトデータを、ホスト2のメモリ内のライトバッファから内部バッファ16に転送する。内部バッファ16は、例えば、コントローラ4内のSRAM等によって実現されてもよい。この内部バッファ16は、第1のバッファとしても参照される。そして、ライト制御部21は、内部バッファ16に転送されたライトデータを、このグループに対応するストリーム用に割り当てられている書き込み先ブロックに書き込む。この場合、通常、このライトデータは符号化され、符号化されたライトデータ(例えば、ライトデータとエラー訂正コード(ECC))が書き込み先ブロックに書き込まれる。書き込み先ブロックへのライトデータの書き込み完了後に、ライト制御部21は、このグループに属するライトコマンドの各々の完了を示す応答をホスト2に返す。あるいは、このグループに属するライトコマンドの集合に関連付けられたライトデータを内部バッファ16に転送する処理が完了した後に、ライト制御部21は、このグループに属するライトコマンドの各々の完了を示す応答をホスト2に返してもよい。
このライトデータが書き込み先ブロックに書き込まれると、内部バッファ16内の記憶領域は即座に解放可能となる。よって、内部バッファ16を、最小書き込みサイズを有する別のストリームに対応するライトデータの転送に利用することが可能となる。したがって、内部バッファ16のサイズは最小書き込みサイズと同程度のサイズで十分であるので、大容量のバッファを用意すること無く、多数のストリームを同時に利用することが可能となる。
また、データ転送のためにコントローラ4とDRAM6との間のトラフィックが増大してしまうことも無いので、L2Pテーブル31のアクセス速度の低下、ひいてはSSD3全体の性能低下を抑制することができる。
なお、受信された一つのライトコマンドによって指定された長さが最小書き込みサイズに一致する場合もある。この場合には、この一つのライトコマンドが受信された後に、このライトコマンドに関連付けられたライトデータがホスト2のメモリ内のライトバッファから内部バッファ16に転送される。
また、受信された一つのライトコマンドによって指定された長さが最小書き込みサイズよりも大きい場合もある。この場合には、この一つのライトコマンドが受信された後に、このライトコマンドに関連付けられたライトデータのうち、最小書き込みサイズ分のデータ部分のみがホスト2のメモリ内のライトバッファから内部バッファ16に転送される。そして、このライトデータの残り部分についてのホスト2のメモリ内のライトバッファから内部バッファ16への転送は、残り部分の長さと、このライトコマンドと同じストリームIDを含む後続の1以上のライトコマンドのライトデータの長さとの合計長さが、最小書き込みサイズに達した後に実行される。
リード制御部22は、ホスト2からリードコマンドを受信し、この受信されたリードコマンドによって指定されたデータをNAND型フラッシュメモリ5、SSD3内の第2のバッファ、またはホスト2のメモリ内のライトバッファから読み出す。SSD3内の第2のバッファとしては、DRAM6内のバッファ32を使用することができる。第2のバッファ(DRAM6内のバッファ32)は、たとえば、ライトコマンドの受信から所定時間が経過したライトコマンドに関連付けられたライトデータを格納するために使用される。つまり、ライト制御部21は、あるストリームに対応するグループに属するあるライトコマンドの受信から所定時間が経過した場合、このストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、受信から所定時間が経過したこのライトコマンドに関連付けられたライトデータのみをホスト2のメモリ内のライトバッファからDRAM6内のバッファ32にこのストリーム用のライトデータとして転送し、このライトコマンドの完了を示す応答をホスト2に返す。これにより、このライトコマンドのタイムアウトエラーが起こることを防止することができる。
リードコマンドによって指定されたデータがNAND型フラッシュメモリ5から読み出し可能なデータである場合、リード制御部22は、このデータをNAND型フラッシュメモリ5から読み出し、読み出したデータをホスト2に返す。
リードコマンドによって指定されたデータがNAND型フラッシュメモリ5から読み出し可能なデータではない場合もある。例えば、リードコマンドによって指定されたデータがNAND型フラッシュメモリ5への書き込みが開始されていないデータである場合、このデータはNAND型フラッシュメモリ5から読み出し可能なデータではない。また、NAND型フラッシュメモリ5に書き込みまれたがまだ読み出し可能になっていないデータも、NAND型フラッシュメモリ5から読み出し可能なデータではない。
リードコマンドによって指定されたデータがNAND型フラッシュメモリ5から読み出し可能なデータではない場合、このデータがDRAM6内のバッファ32に存在する場合には、リード制御部22は、このデータをバッファ32から読み出し。読み出したデータをホスト2に返す。このデータがDRAM6内のバッファ32に存在しない場合には、リード制御部22は、まず、このデータをホスト2のメモリ内のライトバッファから取得し、そしてこの取得したデータをホスト2に返す。
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との間のデータ転送を実行する。ホスト2のメモリ内のライトバッファから内部バッファ16にライトデータを転送すべき場合には、CPU12−1またはCPU12−2は、ホスト2のメモリ内のライトバッファ上の位置を示す転送元アドレス、データサイズ、内部バッファ16上の位置を示す転送先アドレスをDMAC15に対して指定する。
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
図5は、複数のストリームに関連付けられた複数種のライトデータを複数のストリームに対応する複数の書き込み先ブロックにそれぞれ書き込むストリーム書き込み動作を示す。
図5では、ストリーム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に書き込まれる。
図6は、フリーブロック群から複数のストリームに対応する複数の書き込み先ブロックを割り当てる動作を示す。
図6においては、図示の簡単化のために、ストリーム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用の書き込み先ブロックとして割り当てる。図6では、ブロック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用の書き込み先ブロックとして割り当てる。図6では、ブロックBLK100がストリーム#n用の書き込み先ブロックとして割り当てられた場合が例示されている。コントローラ4は、ストリームID#nを含むライトコマンドそれぞれに関連付けられたライトデータをブロックBLK100に書き込む。ストリーム#n用の書き込み先ブロックが既に割り当てられている場合、コントローラ4は、フリーブロックをストリーム#n用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。
ストリーム#n用の書き込み先ブロック(ここではBLK100)全体がホスト2からのライトデータで満たされると、コントローラ4は、この書き込み先ブロックBLK100をアクティブブロックプール101−nによって管理するとともに(クローズ)、フリーブロックプール200内のフリーブロックをストリーム#n用の新たな書き込み先ブロック(オープンブロック)として割り当てる。
アクティブブロックプール101−n内のあるブロック内の全ての有効データが、データ更新、デアロケーション(アンマップ、トリム)、ガベージコレクション等によって無効化されると、コントローラ4は、このブロックをフリーブロックプール200に移動してこのブロックを書き込み先ブロックとして再利用可能な状態に遷移させる。
図7は、複数のストリームに対応する複数のバッファを使用して実行される書き込み動作を示す。
もしホスト2からライトコマンドを受信する度にライトデータをホスト2からSSD3内のバッファに転送するという構成が用いられたならば、図7に示すように、ストリーム#1、ストリーム#2、ストリーム#3、…ストリーム#nにそれぞれ対応するライトバッファWB#1、ライトバッファWB#2、ライトバッファWB#3、…ライトバッファWB#nをSSD3内に用意することが必要となる。
ストリームID#1を含むライトコマンドが受信される度に、このライトコマンドに関連付けられたライトデータがホスト2のメモリ内のライトバッファからライトバッファWB#1に転送される。ライトバッファWB#1に転送されたライトデータは、ライトバッファWB#1内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達するまで、ライトバッファWB#1内に維持することが必要とされる。ライトバッファWB#1内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達すると、これらライトデータがストリーム#1に対応する書き込み先ブロックBLK10に書き込み可能となる。
同様に、ストリームID#nを含むライトコマンドが受信される度に、このライトコマンドに関連付けられたライトデータがホスト2のメモリ内のライトバッファからライトバッファWB#nに転送される。ライトバッファWB#nに転送されたライトデータは、ライトバッファWB#n内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達するまで、ライトバッファWB#n内に維持することが必要とされる。ライトバッファWB#n内に蓄積されたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達すると、これらライトデータがストリーム#nに対応する書き込み先ブロックBLK100に書き込み可能となる。
したがって、もし対応するイトバッファ内に蓄積されたライトデータの総サイズが最小書き込みサイズ未満であるストリームが多数存在すると、NAND型フラッシュメモリ5への書き込みを開始できないライトデータによって多くのバッファ領域が消費されてしまうことになる。
図8は、SSD3において実行される書き込み動作を示す。
SSD3のコントローラ4は、ホスト2からライトコマンドを受信する度にライトデータをホスト2のメモリ内のライトバッファ51から内部バッファ16に転送するのではなく、ホスト2からライトコマンドを受信する度にこのライトコマンドだけをコマンドキュー41に格納する。すなわち、コントローラ4は、受信されたライトコマンドの各々をストリーム#1〜#nに対応するコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応するn+1個のグループに分類する。
SSD3のコントローラ4は、ホスト2からライトコマンドを受信する度にライトデータをホスト2のメモリ内のライトバッファ51から内部バッファ16に転送するのではなく、ホスト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に書き込むことができる。
このように、本実施形態では、コントローラ4は、受信されたライトコマンド群に対応するライトデータの長さ(サイズ)をストリーム毎にチェックして、ライトデータのサイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する。そして、ライトデータのサイズが最小書き込みサイズに達したストリームに関連付けられた最小書き込みサイズ分のライトデータがホストメモリ内のライトバッファ51から内部バッファ16に転送される。内部バッファ16に転送された最小書き込みサイズ分のライトデータは、即座に書き込みを開始することが可能である。したがって、内部バッファ16は複数のストリームによって共有することができる。よって、SSD3によってサポートされるべきストリームの数が増えても、最小書き込みサイズ分の内部バッファ16のみを用意するだけで、ストリーム書き込み動作を効率よく実行することができる。
図9は、データ書き込みに関する、ホスト2とSSD3それぞれの構成例を示す。
ホスト2においては、各ライトコマンドはサブミッションキュー71に格納される。各ライトコマンドは、ライトデータのLBA、ライトデータの長さ、ストリームID、ライトデータが格納されているライトバッファ51内の位置を示すデータポインタを含む。各ライトコマンドの完了を示す応答はコンプリーションキュー72に格納される。
ホスト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内の位置を示す値に更新される。
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内の書き込み先ブロックに書き込む。
最小書き込みサイズ分のライトデータの内部バッファ16への転送完了後、または最小書き込みサイズ分のライトデータの書き込み先ブロックへの書き込み完了後に、ライト制御部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を更新する処理を効率よく実行することが可能となる。
また、ライト制御部21は、あるストリームに対応するグループに属するあるライトコマンドの受信から所定時間が経過した場合、このストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、DMAC15を使用して、これらライトコマンドの集合に関連付けられたライトデータ全体をホストメモリ内のライトバッファ51から内部バッファ16に転送してもよい。
例えば、ストリームID#1を含むあるライトコマンドの受信から所定時間経過してもコマンドキュー41−1に格納されているライトコマンドの集合に関連付けられたライトデータのサイズが最小書き込みサイズに達しない場合、つまりあるライトコマンドがコマンドキュー41−1に維持されている時間が所定時間に達した場合、ライト制御部21は、このライトコマンドのタイムアウトエラーが起こるのを防止するために、コマンドキュー41−1に現在格納されているライトコマンドの集合に関連付けられたライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送する。この場合、ライト制御部21は、内部バッファ16に転送されたライトデータにパディングを加えて最小書き込みサイズ分のライトデータを生成し、生成されたライトデータを、このストリームに対応する書き込み先ブロックに書き込む。この場合、特定のビットパターンを有するデミーデータがライトデータにパディングとして追加されてもよい。
このように、あるストリームに対応するグループに属するライトコマンドの受信から所定時間が経過した場合、ライト制御部21は、このグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、このグループに属するライトコマンドの集合に関連付けられたライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送し、内部バッファ16に転送されたライトデータにパディングを加えることによって生成される最小書き込みサイズ分のライトデータを、このストリームに対応する書き込み先ブロックに書き込む。これにより、DRAM6内のバッファ32を使用しない構成においても、タイムアウトエラーが起きることを防止することができる。
図10はSSD3において実行される書き込み動作のシーケンスを示す。
ライトコマンドWxをホスト2から受信した場合、コントローラ4のCPU#1(例えばCPU12−1)は、ライトコマンドWxに関連付けられたライトデータが格納されるべきNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を決定し、この物理アドレスをこのライトデータに割り当てる(アドレス割り当て動作)。ライトコマンドWxと同じストリームIDを含む受信済みのライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、DMAC15は、ホストメモリのライトバッファ51から内部バッファ16に最小書き込みサイズ分のライトデータを転送する。そして、コントローラ4は、内部バッファ16内のライトデータを、NAND型フラッシュメモリ5内の決定された物理記憶位置に書き込む(フラッシュ書き込み)。ライトコマンドWxを含むこれらライトコマンドそれぞれの完了を示す応答(completion)は、内部バッファ16へのライトデータの転送完了後、またはフラッシュ書き込みの完了後にホスト2に返される。
ライトコマンドWyをホスト2から受信した場合、コントローラ4のCPU#1(例えばCPU12−1)は、ライトコマンドWyに関連付けられたライトデータが格納されるべきNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を決定し、この物理アドレスをこのライトデータに割り当てる(アドレス割り当て動作)。ライトコマンドWyと同じストリームIDを含む受信済みのライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、DMAC15は、ホストメモリのライトバッファ51から内部バッファ16に最小書き込みサイズ分のライトデータを転送する。そして、コントローラ4は、内部バッファ16内のライトデータを、NAND型フラッシュメモリ5内の決定された物理記憶位置に書き込む(フラッシュ書き込み)。ライトコマンドWyを含むこれらライトコマンドそれぞれの完了を示す応答(completion)は、内部バッファ16へのライトデータの転送完了後、またはフラッシュ書き込みの完了後にホスト2に返される。
ライトコマンドWzについても、ライトコマンドWx,Wyと同様に処理される。
ライトコマンドWzについても、ライトコマンドWx,Wyと同様に処理される。
図11は、データ読み出しに関する、ホスト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から受け取ることができる。
図12のフローチャートは、SSD3において実行される書き込み動作の手順を示す。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS11)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS12)。ステップS12では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS11)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS12)。ステップS12では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。
コントローラ4は、蓄積されたライトコマンドに対応する書き込み待ちのライトデータのサイズをストリーム毎にチェックして、書き込み待ちのライトデータのサイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する(ステップS13)。すなわち、ステップS13では、コントローラ4は、複数のグループの各々に関して、同じグループに属するライトコマンドそれぞれによって指定される長さの合計を算出することによって同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さ(書き込み待ちのライトデータのサイズ)が最小書き込みサイズに達したか否かを判定する。
書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームを検出した場合(ステップS14のYES)、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に、検出したストリームに関連付けられた最小書き込みサイズ分のライトデータを転送する(ステップS15)。そして、コントローラ4は、内部バッファ16に転送されたライトデータを、このストリーム用に割り当てられている書き込み先ブロックに書き込む(ステップS16)。
なお、コントローラ4は、このストリームに関連付けられたライトコマンドそれぞれの完了を示す応答を、ステップS15におけるデータ転送完了後、またはステップS16における書き込み先ブロックへの書き込み完了後に、ホスト2に返す。
図13のフローチャートは、SSD3において実行される書き込み動作の別の手順を示す。
図13の書き込み動作においては、図12のステップS11〜S16の処理にステップS21〜S23の処理が追加されている。コントローラ4は、ライトコマンド毎に、その受信からの経過時間をチェックする。
図13の書き込み動作においては、図12のステップS11〜S16の処理にステップS21〜S23の処理が追加されている。コントローラ4は、ライトコマンド毎に、その受信からの経過時間をチェックする。
書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS14のNO)、コントローラ4は、あるライトコマンドの受信から所定時間が経過したストリームの有無を検出する(ステップS21)。
ライトコマンドの受信から所定時間が経過したストリームを検出した場合(ステップS21のYES)、コントローラ4は、この検出されたストリームに対応するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達していなくても、この検出されたストリームに対応するライトコマンドの集合に関連付けられたライトデータをホストメモリ内のライトバッファ51から内部バッファ16に転送する(ステップS22)。
コントローラ4は、内部バッファ16に転送されたライトデータにパディングを加えることによって最小書き込みサイズ分のデータを生成し、検出されたストリームに割り当てられた書き込み先ブロックにこの生成されたデータを書き込む(ステップS23)。
なお、コントローラ4は、ライトコマンドの受信から所定時間が経過したストリームに関連付けられたライトコマンドそれぞれの完了を示す応答を、ステップS22におけるデータ転送完了後、またはステップS23における書き込み先ブロックへの書き込み完了後に、ホスト2に返す。
図14のフローチャートは、SSD3において実行される書き込み動作の別の手順を示す。
図14の書き込み動作においては、図12のステップS11〜S16の処理にステップS31およびS32の処理が追加されている。コントローラ4は、ライトコマンド毎に、その受信からの経過時間をチェックする。
図14の書き込み動作においては、図12のステップS11〜S16の処理にステップS31およびS32の処理が追加されている。コントローラ4は、ライトコマンド毎に、その受信からの経過時間をチェックする。
書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS14のNO)、コントローラ4は、受信から所定時間が経過したライトコマンドの有無を検出する(ステップS31)。
あるストリームに対応するライトコマンドの受信から所定時間が経過したことを検出した場合(ステップS31のYES)、コントローラ4は、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送する(ステップS32)。このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送した後、コントローラ4は、このライトコマンドを、このライトコマンドが格納されているコマンドキューから削除する。そして、コントローラ4は、このライトコマンドの完了を示す応答をホスト2に返す。
このように、あるストリームに対応するライトコマンドの受信から所定時間が経過した場合、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送する処理と、このライトコマンドの完了を示す応答をホスト2に返す処理とがコントローラ4によって実行される。
また、このようにあるストリームに対応するグループに属するライトコマンドに関連付けられたライトデータをDRAMバッファ32に転送する構成においては、コントローラ4は、DRAMバッファ32に転送したライトデータの長さとこのストリームに対応するグループに属するライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとの合計長さが最小書き込みサイズに達したことを条件に、ホストメモリ内のライトバッファ51から内部バッファ16へのデータ転送を実行する。
図15のフローチャートは、DRAMバッファ32を使用してSSD3において実行される書き込み動作の手順を示す。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS41)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS42)。ステップS42では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。
コントローラ4は、ストリームIDを含むライトコマンドそれぞれをホスト2から受信する(ステップS41)。コントローラ4は、受信したライトコマンドそれぞれをストリーム毎に分類する(ステップS42)。ステップS42では、コントローラ4は、受信したライトコマンドの各々をコマンドキュー41−1〜41−nの一つに格納することによって、受信されたライトコマンドそれぞれをストリーム#1〜#nに対応する複数のグループに分類する。これにより、ストリームID#1を含むライトコマンドそれぞれはコマンドキュー41−1に蓄積され、ストリームID#2を含むライトコマンドそれぞれはコマンドキュー41−2に蓄積され、そしてストリームID#nを含むライトコマンドそれぞれはコマンドキュー41−nに蓄積される。
コントローラ4は、蓄積されたライトコマンドに対応する書き込み待ちのライトデータのサイズとDRAMバッファ32内のライトデータのサイズの合計サイズ(合計長さ)をストリーム毎にチェックして、合計サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する(ステップS43)。すなわち、ステップS43では、コントローラ4は、複数のグループの各々に関して、コマンドキュー内のライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したか否かを判定する。
コマンドキュー内のライトコマンドの集合に関連付けられた書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したストリームを検出した場合(ステップS44のYES)、コントローラ4は、DRAMバッファ32から内部バッファ16に、検出されたストリーム用のライトデータを転送する(ステップS45)。コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に、検出したストリームに関連付けられたライトデータを転送する(ステップS46)。そして、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に転送されたライトデータを、DRAMバッファ32から内部バッファ16に転送されたライトデータと一緒に、このストリーム用に割り当てられている書き込み先ブロックに書き込む(ステップS47)。
なお、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に転送されたライトデータに対応するライトコマンドそれぞれの完了を示す応答を、ステップS46におけるデータ転送完了後、またはステップS47における書き込み先ブロックへの書き込み完了後に、ホスト2に返す。また、これらライトコマンドはコマンドキューから削除される。
書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS44のNO)、コントローラ4は、図14のステップS31、S32の処理を実行する。
すなわち、コントローラ4は、受信から所定時間が経過したライトコマンドの有無を検出する(ステップS31)。あるストリームに対応するライトコマンドの受信から所定時間が経過したことを検出した場合(ステップS31のYES)、コントローラ4は、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送する(ステップS32)。このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送した後、コントローラ4は、このライトコマンドを、このライトコマンドが格納されているコマンドキューから削除する。そして、コントローラ4は、このライトコマンドの完了を示す応答をホスト2に返す。
以上説明したように、本実施形態によれば、複数のストリームに対応する複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さがNAND型フラッシュメモリ5の最小書き込みサイズに達したか否かが判定される。あるストリームに対応するグループに属するライトコマンドの集合に関連付けられたライトデータの長さが最小書き込みサイズに達した場合、最小書き込みサイズを有する、このグループに属するライトコマンドの集合に関連付けられたライトデータが、ホストメモリ内のライトバッファ51から内部バッファ16に転送される。そして、内部バッファ16に転送されたライトデータが、このストリームに対応する書き込み先ブロックに書き込まれる。このライトデータが書き込み先ブロックに書き込まれると、内部バッファ16内の記憶領域は即座に解放可能となる。よって、内部バッファ16を、最小書き込みサイズを有する別のストリームに対応するライトデータの転送に利用することが可能となる。したがって、内部バッファ16のサイズは最小書き込みサイズと同程度のサイズで十分である。
よって、ホスト2からライトコマンドを受信する度にライトデータをホスト2からSSD3内のバッファに転送するという構成に比し、SSD3内に設けることが必要なバッファのサイズを削減することができる。
なお、本実施形態では、不揮発性メモリとして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…リード制御部、51…ライトバッファ。
Claims (9)
- ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、複数のストリームに対応する複数の書き込み先ブロックを前記複数のブロックから割り当てるように構成されたコントローラとを具備し、
前記コントローラは、
前記複数のストリームの一つを示すストリーム識別子を各々が含む複数のライトコマンドを前記ホストから受信し、
前記受信されたライトコマンドそれぞれを前記複数のストリームに対応する複数のグループに分類し、
前記複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記不揮発性メモリの最小書き込みサイズに達したか否かを判定し、
前記複数のストリームのうちの第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第1のグループに属するライトコマンドの集合に関連付けられたライトデータを、前記ホストのメモリ内のライトバッファから前記メモリシステム内の第1のバッファに転送し、
前記第1のバッファに転送された前記ライトデータを、前記複数の書き込み先ブロックのうちの前記第1のストリームに対応する第1の書き込み先ブロックに書き込むように構成されている、メモリシステム。 - 前記コントローラは、前記第1のバッファへの前記ライトデータの転送完了後、もしくは前記第1の書き込み先ブロックへの前記ライトデータの書き込み完了後に、前記第1のグループに属する前記ライトコマンドの各々の完了を示す応答を前記ホストに返すように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、同じグループに属するライトコマンドそれぞれによって指定される長さの合計を算出することによって同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達したか否かを判定する請求項1記載のメモリシステム。
- 前記コントローラは、前記受信されたライトコマンドの各々を前記複数のストリームに対応する前記メモリシステム内の複数のコマンドキューの一つに格納することによって前記受信されたライトコマンドそれぞれを前記複数のグループに分類するように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、
前記複数のストリームのうちの第2のストリームに対応する第2のグループに属するライトコマンドの受信から所定時間が経過した場合、
前記第2のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達していなくても、前記第2のグループに属するライトコマンドの集合に関連付けられたライトデータを前記ホストのメモリ内の前記ライトバッファから前記第1のバッファに転送し、
前記第1のバッファに転送された前記ライトデータにパディングを加えて前記最小書き込みサイズ分のライトデータを生成し、前記生成されたライトデータを前記複数の書き込み先ブロックのうちの前記第2のストリームに対応する第2の書き込み先ブロックに書き込むように構成されている請求項1記載のメモリシステム。 - 前記コントローラは、前記複数のストリームのうちの第2のストリームに対応する第2のグループに属するライトコマンドの受信から所定時間が経過した場合、前記第2のグループに属する前記ライトコマンドに関連付けられたライトデータを前記ホストのメモリ内の前記ライトバッファから前記メモリシステム内の第2のバッファに前記第2のストリーム用のライトデータとして転送し、前記第2のグループに属する前記ライトコマンドの完了を示す応答を前記ホストに返すように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、前記第2のバッファに格納されている前記第2のストリーム用のライトデータの長さと前記第2のグループに属するライトコマンドの集合に関連付けられたライトデータの長さとの合計長さが前記最小書き込みサイズに達した場合、前記第2のグループに属する前記ライトコマンドの集合に関連付けられたライトデータを前記ホストのメモリ内の前記ライトバッファから前記第1のバッファに転送し、前記第1のバッファに転送された前記ライトデータを前記第2のバッファに格納されている前記第2のストリーム用のライトデータと一緒に、前記複数の書き込み先ブロックのうちの前記第2のストリームに対応する第2の書き込み先ブロックに書き込むように構成されている請求項6記載のメモリシステム。
- 前記第1のバッファは前記最小書き込みサイズと同じサイズを有する請求項1記載のメモリシステム。
- 複数のブロックを含む不揮発性メモリを含むメモリシステムを制御する制御方法であって、
複数のストリームに対応する複数の書き込み先ブロックを前記複数のブロックから割り当てることと、
前記複数のストリームの一つを示すストリーム識別子を各々が含む複数のライトコマンドをホストから受信することと、
前記受信されたライトコマンドそれぞれを前記複数のストリームに対応する複数のグループに分類することと、
前記複数のグループの各々に関して、同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記不揮発性メモリの最小書き込みサイズに達したか否かを判定することと、
前記複数のストリームのうちの第1のストリームに対応する第1のグループに属するライトコマンドの集合に関連付けられたライトデータの長さが前記最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第1のグループに属するライトコマンドの集合に関連付けられたライトデータを、前記ホストのメモリ内のライトバッファから前記メモリシステム内の第1のバッファに転送することと、
前記第1のバッファに転送された前記ライトデータを、前記複数の書き込み先ブロックのうちの前記第1のストリームに対応する第1の書き込み先ブロックに書き込むこととを具備する制御方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019155832A JP2021033847A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
US16/815,950 US11409467B2 (en) | 2019-08-28 | 2020-03-11 | Memory system and method of controlling nonvolatile memory and for reducing a buffer size |
US17/852,840 US11662952B2 (en) | 2019-08-28 | 2022-06-29 | Memory system and method of controlling nonvolatile memory and for reducing a buffer size |
US18/301,694 US20230297288A1 (en) | 2019-08-28 | 2023-04-17 | Memory system and method of controlling nonvolatile memory and for reducing a buffer size |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019155832A JP2021033847A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021033847A true JP2021033847A (ja) | 2021-03-01 |
Family
ID=74676621
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019155832A Pending JP2021033847A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
Country Status (2)
Country | Link |
---|---|
US (3) | US11409467B2 (ja) |
JP (1) | JP2021033847A (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11287989B2 (en) * | 2020-03-24 | 2022-03-29 | Western Digital Technologies, Inc. | Dynamic allocation of sub blocks |
US11294598B2 (en) | 2020-04-24 | 2022-04-05 | Western Digital Technologies, Inc. | Storage devices having minimum write sizes of data |
US11537510B2 (en) * | 2020-04-24 | 2022-12-27 | Western Digital Technologies, Inc. | Storage devices having minimum write sizes of data |
US20220107754A1 (en) * | 2020-10-07 | 2022-04-07 | Alibaba Group Holding Limited | Apparatus and method for data packing and ordering |
JP2023140125A (ja) * | 2022-03-22 | 2023-10-04 | キオクシア株式会社 | メモリシステムおよび方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2418584A1 (en) | 2010-08-13 | 2012-02-15 | Thomson Licensing | Method and apparatus for storing at least two data streams into an array of memories, or for reading at least two data streams from an array of memories |
US20130331821A1 (en) | 2011-02-23 | 2013-12-12 | Sumitomo Bakelite Co., Ltd. | Silicone rubber-based hardening resin composition, molded article, and medical tube |
JP6076506B2 (ja) | 2014-01-29 | 2017-02-08 | 株式会社日立製作所 | ストレージ装置 |
US9836108B2 (en) * | 2014-09-10 | 2017-12-05 | Toshiba Memory Corporation | Memory system and controller |
US20160321010A1 (en) * | 2015-04-28 | 2016-11-03 | Kabushiki Kaisha Toshiba | Storage system having a host directly manage physical data locations of storage device |
US10656838B2 (en) * | 2015-07-13 | 2020-05-19 | Samsung Electronics Co., Ltd. | Automatic stream detection and assignment algorithm |
WO2017092015A1 (zh) | 2015-12-03 | 2017-06-08 | 华为技术有限公司 | 一种阵列控制器、固态硬盘和控制固态硬盘写数据的方法 |
US10452301B1 (en) * | 2016-09-29 | 2019-10-22 | Amazon Technologies, Inc. | Cluster-based storage device buffering |
KR20200048318A (ko) * | 2018-10-29 | 2020-05-08 | 에스케이하이닉스 주식회사 | 저장 장치 및 그 동작 방법 |
US10996860B2 (en) * | 2018-10-31 | 2021-05-04 | Intel Corporation | Method to improve mixed workload performance on storage devices that use cached operations |
-
2019
- 2019-08-28 JP JP2019155832A patent/JP2021033847A/ja active Pending
-
2020
- 2020-03-11 US US16/815,950 patent/US11409467B2/en active Active
-
2022
- 2022-06-29 US US17/852,840 patent/US11662952B2/en active Active
-
2023
- 2023-04-17 US US18/301,694 patent/US20230297288A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220334771A1 (en) | 2022-10-20 |
US11662952B2 (en) | 2023-05-30 |
US20210064290A1 (en) | 2021-03-04 |
US20230297288A1 (en) | 2023-09-21 |
US11409467B2 (en) | 2022-08-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7346311B2 (ja) | メモリシステム | |
US11669269B2 (en) | Memory system and method for controlling nonvolatile memory | |
US20230333980A1 (en) | Memory system and method of controlling nonvolatile memory | |
JP7358594B2 (ja) | メモリシステム | |
US11762591B2 (en) | Memory system and method of controlling nonvolatile memory by controlling the writing of data to and reading of data from a plurality of blocks in the nonvolatile memory | |
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 | |
JP7353934B2 (ja) | メモリシステムおよび制御方法 | |
JP7381678B2 (ja) | メモリシステム | |
US20230273750A1 (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) | メモリシステム | |
JP2022111330A (ja) | メモリシステムおよび制御方法 |