JP2021033849A - メモリシステムおよび制御方法 - Google Patents
メモリシステムおよび制御方法 Download PDFInfo
- Publication number
- JP2021033849A JP2021033849A JP2019155834A JP2019155834A JP2021033849A JP 2021033849 A JP2021033849 A JP 2021033849A JP 2019155834 A JP2019155834 A JP 2019155834A JP 2019155834 A JP2019155834 A JP 2019155834A JP 2021033849 A JP2021033849 A JP 2021033849A
- Authority
- JP
- Japan
- Prior art keywords
- write
- data
- read
- buffer
- block
- 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
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/08—Address circuits; Decoders; Word-line control circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C16/00—Erasable programmable read-only memories
- G11C16/02—Erasable programmable read-only memories electrically programmable
- G11C16/06—Auxiliary circuits, e.g. for writing into memory
- G11C16/26—Sensing or reading circuits; Data output circuits
-
- 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
Abstract
【課題】性能を向上することができるメモリシステムを実現する。【解決手段】メモリシステムは、不揮発性メモリと、コントローラとを含む。コントローラは、ホストからの第1のライトコマンドの受信に応じて、第1のライトコマンドに関連付けられた第1のライトデータが書き込まれるべき不揮発性メモリの物理記憶位置を示す第1の物理アドレスを決定し、第1のライトデータの論理アドレスに第1の物理アドレスが関連付けられるようにアドレス変換テーブルを更新する。コントローラは、第1のライトデータの転送が終了する前もしくは不揮発性メモリに対する第1のライトデータの書き込みが終了する前にアドレス変換テーブルの更新を開始する。【選択図】図6
Description
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
SSDは、データセンターのサーバのような様々なホスト計算機システムのストレージデバイスとして使用されている。
ホスト計算機システムにおいて利用されるストレージデバイスにおいては、その性能の向上が求められる。
本発明が解決しようとする課題は、性能を向上することができるメモリシステムおよび制御方法を提供することである。
実施形態によれば、ホストに接続可能なメモリシステムは、複数のページを各々が含む複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備する。前記コントローラは、前記ホストからの第1のライトコマンドの受信に応じて、前記第1のライトコマンドに関連付けられた第1のライトデータが書き込まれるべき前記不揮発性メモリの物理記憶位置を示す第1の物理アドレスを決定し、前記第1のライトデータの論理アドレスに前記第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))が使用され得る。
コントローラ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の更新(L2P更新)は、書き込むべきデータ(ライトデータ)がNAND型フラッシュメモリ5に書き込まれた後ではなく、ホスト2からSSD3へのライトデータの転送、またはNAND型フラッシュメモリ5に対するライトデータの書き込みと並列に実行される。L2P更新がNAND型フラッシュメモリ5への書き込み(フラッシュ書き込み)の終了後に行われるケースにおいては、L2P更新に要する時間が、書き込み性能に直接的に影響を及ぼすことになる。なぜなら、通常は、あるライトコマンドに対するL2P更新が終了するまでは、次のライトコマンドに関連付けられたライトデータに対して物理アドレスを割り当てる動作を開始することができないからである。したがって、書き込み性能を低下させないようにするためには、L2P更新を高速に実行可能な高い計算能力を用意することが必要とされる。本実施形態では、比較的長い時間を要する処理(データ転送またはフラッシュ書き込み)のバックグラウンドでL2P更新が実行されるので、高い計算能力を用いること無く、書き込み性能の向上を図ることができる。
ブロック管理には、バッドブロック(不良ブロック)の管理と、ウェアレベリングと、ガベージコレクション(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のアッパーページへの書き込み、といった書き込み順序で書き込み動作が実行される。このため、ブロック内の複数のページ内の一つのページに書き込まれたデータの読み出しは、このページに後続する幾つかのページへのデータ書き込み後に可能となる。
本実施形態では、複数のページを各々が含む複数のブロックを含み、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しがこの一つのページに後続する1以上のページへのデータの書き込み後に可能となる不揮発性メモリが、NAND型フラッシュメモリ5として使用される。
ライト制御部21は、NAND型フラッシュメモリ5の複数のブロックから割り当てられた複数の書き込み先ブロックにデータを書き込むように構成されている。書き込み先ブロックの各々に対するデータの書き込みは上述のページ書き込み順序に従って実行される。ライト制御部21は、ライトコマンドそれぞれをホスト2から受信し、各ライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込む書き込み動作を実行する。書き込み動作は、(1)ライトデータが書き込まれるべきNAND型フラッシュメモリ5内の記憶位置を示す物理アドレスをこのライトデータに割り当てるアドレス割り当て動作、(2)このライトデータの論理アドレスにこのライトデータに割り当てられた物理アドレスが関連付けられるようにL2Pテーブル31を更新するL2P更新動作、(3)このライトデータをホスト2のメモリ内のライトバッファからコントローラ4に転送するデータ転送動作、(4)ホスト2のメモリ内のライトバッファから転送されたライトデータを書き込み先ブロックに書き込むフラッシュ書き込み動作(プログラム動作)、等を含む。
本実施形態においては、ライト制御部21は、ホスト2からのライトコマンドの受信に応じて、このライトコマンドに関連付けられたライトデータが書き込まれるべきNAND型フラッシュメモリ5の物理記憶位置を示す物理アドレスを決定する(アドレス割り当て動作)。決定された物理アドレスはブロックアドレスとオフセット(ブロック内オフセット)とを含み、ブロックアドレスはライトデータが書き込まれるべき書き込み先ブロックを示し、オフセットはライトデータが書き込まれるべき、この書き込み先ブロック内の書き込み先位置(ページアドレス、ページ内オフセット)を示す。
ライト制御部21は、このライトデータの論理アドレスにこの決定された物理アドレスが関連付けられるようにL2Pテーブル31を更新する(L2P更新動作)。ライト制御部21は、このライトデータをホスト2のメモリ内のライトバッファからコントローラ4に転送する(データ転送)。
なお、ホスト2のメモリ内のライトバッファからコントローラ4へのデータの転送は、ライトコマンドの受信の度に実行されてもよいし、あるいは、同じストリームに属するライトコマンド群に関連付けられたライトデータの総サイズが最小書き込みサイズに達した場合に実行されてもよい。NAND型フラッシュメモリ5の最小書き込みサイズは、ページサイズ、つまり一つのページのサイズ(例えば16Kバイト)であってもよい。あるいは、2つのプレーンを含むNAND型フラッシュメモリチップがNAND型フラッシュメモリ5として使用されるケースにおいては、2つのプレーンからそれぞれ選択された2つのブロックに対する書き込み動作が並列に実行される場合がある。この場合には、ページサイズの2倍(例えば32Kバイト)がNAND型フラッシュメモリ5の最小書き込みサイズとして使用されてもよい。
データ転送の終了後、ライト制御部21は、決定された物理アドレスによって指定される、NAND型フラッシュメモリ5の書き込み先ブロック内の書き込み先位置に、このライトデータを書き込む(フラッシュ書き込み)。
なお、ライト制御部21は、L2P更新動作がデータ転送またはフラッシュ書き込みと並列に実行されるように、ライトデータの転送が終了する前もしくはNAND型フラッシュメモリ5の書き込みが終了する前にL2Pテーブル31の更新を開始すればよい。このように、L2P更新動作の開始タイミングを早めることにより、比較的長い時間を要する処理(データ転送またはフラッシュ書き込み)のバックグラウンドでL2P更新を実行することが可能となり、高い計算能力を用いること無く、書き込み性能の向上を図ることができる。
リード制御部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に送出する。
つまり、リード制御部22は、まず、ホスト2からのリードコマンドの受信に応じて、このリードコマンドによって指定された読み出し対象データの論理アドレスに対応する物理アドレスをL2Pテーブル31から取得する。この取得した物理アドレスが書き込み先ブロック内の読み出し可能となっていない物理記憶位置を示す場合、リード制御部22は、読み出し対象データをバッファ(SSD3内の第1のバッファまたはホスト2のライトバッファ)から読み出す。バッファからのデータの読み出しは、この書き込み先ブロック内の読み出し可能となっていない各物理アドレスへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の位置を示す情報に基づいて、実行される。
このように、リードコマンドによって指定された読み出し対象データがNAND型フラッシュメモリ5から読み出し可能になっていない場合には、リード制御部22は、SSD3内の第1のバッファまたはホスト2のライトバッファから読み出し対象データを読み出す。これにより、ある書き込み先ブロックに書き込み中のデータまたはこの書き込み先ブロックへの書き込みが開始されていない書き込み待ちのデータがホスト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(またはDRAM6のバッファ32)との間のデータ転送を実行する。内部バッファ16は、コントローラ4内のSRAMによって実現されてもよい。
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
図5は、比較例に係る書き込みシーケンスの例を示す。比較例に係る書き込みシーケンスでは、データの書き込み後にL2Pテーブル31が更新される。
比較例に係る書き込みシーケンスにおいては、ライトコマンドWxがホスト2から受信された場合、まず、ホストメモリのライトバッファからSSD内のライトキャッシュにライトデータが転送される(データ転送)。データ転送の後、このライトデータが格納されるべきNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレスがライトデータに割り当てられ(アドレス割り当て)、ライトデータがNAND型フラッシュメモリに書き込まれる。そして、NAND型フラッシュメモリへの書き込みの終了後に、L2Pテーブル31が更新される。この場合、通常は、L2Pテーブル31の更新が終了するまでは、次のライトコマンドWyに関連付けられたライトデータに対するアドレス割り当て動作を開始することができないので、次のライトコマンドWyに対応するフラッシュ書き込み動作の開始タイミングが遅くなる場合がある。書き込み性能を低下させないようにするためには、L2P更新を高速に実行可能な高い計算能力を用意することが必要とされる。
図6は、SSD3において実行される書き込み動作のシーケンスを示す。
ライトコマンドWxをホスト2から受信した場合、コントローラ4のCPU#1(例えばCPU12−1)は、ライトコマンドWxに関連付けられたライトデータが格納されるべきNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を決定し、この物理アドレスをこのライトデータに割り当てる(アドレス割り当て動作)。コントローラ4のCPU#2(例えばCPU12−2)は、ライトコマンドWxによって指定された論理アドレスにこの物理アドレスが関連付けられるようにL2Pテーブル31を更新する(L2P更新)。
ライトコマンドWxをホスト2から受信した場合、コントローラ4のCPU#1(例えばCPU12−1)は、ライトコマンドWxに関連付けられたライトデータが格納されるべきNAND型フラッシュメモリ5内の物理記憶位置を示す物理アドレス(ブロックアドレス、ページアドレス、ページ内オフセット)を決定し、この物理アドレスをこのライトデータに割り当てる(アドレス割り当て動作)。コントローラ4のCPU#2(例えばCPU12−2)は、ライトコマンドWxによって指定された論理アドレスにこの物理アドレスが関連付けられるようにL2Pテーブル31を更新する(L2P更新)。
DMAC15は、ライトコマンドWxに関連付けられているライトデータをホストメモリのライトバッファからコントローラ4に転送する(データ転送)。このデータ転送は、ライトコマンドWxと同じストリームIDを含む受信済みのライトコマンドの集合に関連付けられたライトデータの長さがNAND型フラッシュメモリ5に最小書き込みサイズに達した場合に開始されてもよい。そして、コントローラ4は、ホストメモリのライトバッファから転送されたライトデータを、NAND型フラッシュメモリ5内の決定された物理アドレスによって指定される、書き込みも先ブロック内の書き込み先位置に、書き込む(フラッシュ書き込み)。
ライトコマンドWxによって指定された論理アドレスに物理アドレスをマッピングするL2P更新、およびライトコマンドWxに関連付けられたライトデータの転送の双方が完了した後、コントローラ4は、ライトコマンドWxの完了を示す応答(completion)をホスト2に返す。
なお、コントローラ4は、ライトコマンドWxによって指定された論理アドレスに物理アドレスをマッピングするL2P更新、およびライトコマンドWxに関連付けられたライトデータのフラッシュ書き込みの双方が完了した後、ライトコマンドWxの完了を示す応答(completion)をホスト2に返してもよい。
また、コントローラ4は、ライトコマンドWxが受領されたことを示す応答をL2P更新が終了した時点でホスト2に返し、これによってライトコマンドWxによって書き込まれた更新データをSSD3からリード可能であることをホスト2に通知してもよい。
ライトコマンドWy、ライトコマンドWzについても、ライトコマンドWxと同様に処理される。
ライトコマンドWy、ライトコマンドWzについても、ライトコマンドWxと同様に処理される。
図7のフローチャートは、SSD3において実行される書き込み動作の手順を示す。
コントローラ4は、ホスト2からライトコマンドを受信する(ステップS11)。このライトコマンドの受信に応じて、コントローラ4は、この受信したライトコマンドに関連付けられたライトデータが書き込まれるべきNAND型フラッシュメモリ5の物理記憶位置を示す物理アドレスを決定し、この決定した物理アドレスをライトデータに割り当てる(ステップS12)。
コントローラ4は、ホスト2からライトコマンドを受信する(ステップS11)。このライトコマンドの受信に応じて、コントローラ4は、この受信したライトコマンドに関連付けられたライトデータが書き込まれるべきNAND型フラッシュメモリ5の物理記憶位置を示す物理アドレスを決定し、この決定した物理アドレスをライトデータに割り当てる(ステップS12)。
コントローラ4は、このライトデータの論理アドレスにこの決定した物理アドレスが関連付けられるようにL2Pテーブル31を更新する(ステップS13)。コントローラ4は、DMAC15を使用して、このライトデータをホスト2のメモリ内のライトバッファから内部バッファ16(またはDRAMバッファ32)に転送する(ステップS14)。
ホスト2のメモリ内のライトバッファから内部バッファ16(またはDRAMバッファ32)へのライトデータの転送が終了した場合(ステップS15のYES)、コントローラ4は、決定された物理アドレスによって指定される、NAND型フラッシュメモリ5の書き込み先ブロック内の書き込み先位置に、このライトデータを書き込む(ステップS16)。
ホスト2のメモリ内のライトバッファから内部バッファ16(またはDRAMバッファ32)へのライトデータの転送が終了した場合(ステップS15のYES)、コントローラ4は、決定された物理アドレスによって指定される、NAND型フラッシュメモリ5の書き込み先ブロック内の書き込み先位置に、このライトデータを書き込む(ステップS16)。
図8は、DRAM6内に格納されるブロック管理テーブル33のデータ構造の例を示す。
ブロック管理テーブル33は、NAND型フラッシュメモリ5内の全てのブロック(ここでは、ブロックBLK1〜ブロックBLKn)にそれぞれ対応する複数の領域を含む。これらブロックBLK1〜ブロックBLKnには、書き込み途中の複数のブロック(openedブロック:書き込み先ブロック)、ブロック全体がデータで満たされており且つ有効データを含む複数のブロック(closedブロック:アクティブブロック)、有効データを含まない複数のフリーブロックなどが含まれる。
ブロック管理テーブル33は、NAND型フラッシュメモリ5内の全てのブロック(ここでは、ブロックBLK1〜ブロックBLKn)にそれぞれ対応する複数の領域を含む。これらブロックBLK1〜ブロックBLKnには、書き込み途中の複数のブロック(openedブロック:書き込み先ブロック)、ブロック全体がデータで満たされており且つ有効データを含む複数のブロック(closedブロック:アクティブブロック)、有効データを含まない複数のフリーブロックなどが含まれる。
ブロック管理テーブル33内の各領域は、この領域に対応するブロックに関するメタデータを格納する。例えば、ブロックBLK1に対応する領域のメタデータは、ブロックBLK1内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un−readable pointer:URP)を含む。ブロックBLK2に対応する領域のメタデータは、ブロックBLK2内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un−readable pointer:URP)を含む。同様に、ブロックBLKnに対応する領域のメタデータは、ブロックBLKn内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un−readable pointer:URP)を含む。
図9は、各書き込み先ブロックに対応する読み出し不可能ポインタ(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も更新される。
図10は、各アクティブブロック(クローズブロック)に対応する読み出し不可能ポインタ(URP)を説明するための図である。
どのアクティブブロックのURPも、ブロック終端の物理アドレス(ブロック内の最終ページアドレス)よりも大きな値を示す。
どのアクティブブロックのURPも、ブロック終端の物理アドレス(ブロック内の最終ページアドレス)よりも大きな値を示す。
コントローラ4は、ホスト2から受信したリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられている物理アドレスをL2Pテーブル31から取得する。この物理アドレスはリード対象ブロックを示すブロックアドレスとこのリード対象ブロック内のリード対象位置を示すオフセットとを含む。オフセットはブロック内オフセットとも称される。このオフセットはページアドレスとページ内オフセットとによって表現されてもよい。
コントローラ4は、L2Pテーブル31から取得した物理アドレス内のブロックアドレスを有するリード対象ブロックに対応するURPをブロック管理テーブル33から取得する。そして、コントローラ4は、取得した物理アドレス内のオフセット(ブロック内オフセット)とリード対象ブロックのURPとを比較して、この読み出し対象データがこのリード対象ブロックから読み出し可能であるか否か、つまり読み出し対象データの論理アドレスに割り当てられている物理アドレスがこのリード対象ブロックの読み出し可能領域または読み出し不可能領域のいずれに属するかを、即座に判定することができる。この場合、コントローラ4は、このリード対象ブロックが、書き込み先ブロックとして現在使用されているブロックであるか、クローズされているブロックであるかをチェックする必要は無く、取得した物理アドレス内のオフセット(ブロック内オフセット)とリード対象ブロックのURPとを比較するだけでよい。
図11は、書き込み先ブロック管理テーブル34のデータ構造の例を示す。
書き込み先ブロック管理テーブル34は、書き込み先ブロックとして現在使用されている複数のブロック(ここでは、ブロックBLK10、ブロックBLK20、ブロックBLK30、ブロックBLK40、ブロックBLK50、…ブロックBLK100)にそれぞれ対応する複数の領域を含む。
書き込み先ブロック管理テーブル34は、書き込み先ブロックとして現在使用されている複数のブロック(ここでは、ブロックBLK10、ブロックBLK20、ブロックBLK30、ブロックBLK40、ブロックBLK50、…ブロックBLK100)にそれぞれ対応する複数の領域を含む。
書き込み先ブロック管理テーブル34内の各領域は、この領域に対応する書き込み先ブロックに関するメタデータを格納する。例えば、書き込み先ブロックBLK10に対応する領域のメタデータは、書き込み先ブロックBLK10の読み出し不可能領域に書き込むべきライトデータが格納されているバッファアドレスのリストを示ライトバッファアドレスリストを含む。同様に、書き込み先ブロックBLK100に対応する領域のメタデータは、書き込み先ブロックBLK100の読み出し不可能領域に書き込むべきライトデータが格納されているバッファアドレスのリストを示ライトバッファアドレスリストを含む。
ある書き込み先ブロックに対応するライトバッファアドレスリストは、この書き込み先ブロック内の読み出し不可能領域の物理アドレス(例えばブロック内オフセット)それぞれとこの書き込み先ブロックのこれら物理アドレスへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の位置それぞれとの間の対応関係を示すバッファ管理情報である。
読み出し動作においては、コントローラ4は、L2Pテーブル31から取得した物理アドレスがリード対象ブロック内の読み出し可能となっていない物理記憶位置を示す場合、つまりこのリード対象ブロックが書き込み先ブロックとして現在使用されているブロックであり且つリード対象物理記憶位置がこの書き込み先ブロック内の読み出し不可能領域に属する場合、この書き込み先ブロック内の読み出し可能となっていない各物理アドレスへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の位置を示す情報(バッファアドレスリスト)を参照することによって、読み出し対象データが格納されているバッファ内の位置を取得する。そして、コントローラ4は、この取得したバッファ内の位置から読み出し対象データを読み出す。
このように、リードコマンドによって指定された論理アドレスに基づいてバッファ全体から所望のデータを検索するのではなく、この論理アドレスに割り当てられているブロックアドレスを有する特定のリード対象ブロック(ここでは特定の書き込み先ブロック)に関連付けられている小さいテーブル(バッファアドレスリスト)のみが参照されるので、読み出し対象データが格納されているバッファ内の位置(バッファアドレス)を効率よく取得することができる。
図12は、書き込み先ブロック管理テーブル34内のライトバッファアドレスリストの例を示す。
図12においては、書き込み先ブロックBLK10に対応するライトバッファアドレスリストが例示されている。
図12においては、書き込み先ブロック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に書き込むべきこのライトデータのバッファアドレスもこのライトバッファアドレスリストに含まれていてもよい。
図13のフローチャートは、SSD3において実行される読み出し動作の手順を示す。
コントローラ4は、ホスト2からリードコマンドを受信する(ステップS21)。コントローラ4は、L2Pテーブル31を参照して、受信したリードコマンドによって指定される読み出し対象データの論理アドレスに対応する物理アドレス(ブロックアドレス、ブロック内オフセット)をL2Pテーブル31から取得する(ステップS22)。ブロック内オフセットは、ページアドレスとページ内オフセットとによって表される。コントローラ4は、リード対象ブロックに対応するURPを取得する(ステップS23)。
コントローラ4は、ホスト2からリードコマンドを受信する(ステップS21)。コントローラ4は、L2Pテーブル31を参照して、受信したリードコマンドによって指定される読み出し対象データの論理アドレスに対応する物理アドレス(ブロックアドレス、ブロック内オフセット)をL2Pテーブル31から取得する(ステップS22)。ブロック内オフセットは、ページアドレスとページ内オフセットとによって表される。コントローラ4は、リード対象ブロックに対応するURPを取得する(ステップS23)。
コントローラ4は、取得した物理アドレスに含まれるブロックアドレスを有しているリード対象ブロックから読み出し対象データが読み出し可能であるか否かを判定する(ステップS24)。ステップS24では、コントローラ4は、取得した物理アドレスに含まれるブロック内オフセットを、リード対象ブロックに対応するURPと比較する。
この場合、ブロック内オフセットがURPよりも小さいならば(ステップS24のYES)、コントローラ4は、リード対象ブロックから読み出し対象データが読み出し可能であると判定することができる。一方、ブロック内オフセットがこのURP以上であるならば(ステップS24のNO)、コントローラ4は、リード対象ブロックから読み出し対象データが読み出し可能でない、つまり、リード対象ブロックが書き込み先ブロックであり且つリード対象物理記憶位置がこの書き込み先ブロック内の読み出し不可能領域であると判定することができる。
リード対象ブロックから読み出し対象データが読み出し可能である場合(ステップS24のYES)、コントローラ4は、取得した物理アドレスによって示される、リード対象ブロック内のリード対象物理記憶位置からデータを読み出し、読み出したデータをホスト2に返す(ステップS25)。
一方、リード対象ブロックから読み出し対象データが読み出し可能でない場合(ステップS24のNO)、つまりこのリード対象ブロックが書き込み先ブロックであり且つ読み出し対象データがリード対象ブロックから読み出し可能でない場合、コントローラ4は、取得したブロック内オフセットに関連付けられているバッファアドレスをリード対象ブロック(書き込み先ブロック)に対応するライトバッファアドレスリストから取得し、この取得したバッファアドレスに基づいて、バッファ(ホストメモリ内のライトバッファ51またはDRAM6内のバッファ32)から読み出し対象データを読み出し、読み出したデータをホスト2に返す(ステップS26)。
図14は、複数のストリームに関連付けられた複数種のライトデータを複数のストリームに対応する複数の書き込み先ブロックにそれぞれ書き込むストリーム書き込み動作を示す。
図14では、ストリーム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に書き込まれる。
図15は、フリーブロック群から複数のストリームに対応する複数の書き込み先ブロックを割り当てる動作を示す。
図15においては、図示の簡単化のために、ストリームID#1のストリーム(ストリーム#1)とストリームID#2のストリーム(ストリーム#2)の2つのストリームのみが例示されている。
図15においては、図示の簡単化のために、ストリーム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用の書き込み先ブロックとして割り当てる。図15では、ブロック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用の書き込み先ブロックとして割り当てる。図15では、ブロックBLK100がストリーム#n用の書き込み先ブロックとして割り当てられた場合が例示されている。コントローラ4は、ストリームID#nを含むライトコマンドそれぞれに関連付けられたライトデータをブロックBLK100に書き込む。ストリーム#n用の書き込み先ブロックが既に割り当てられている場合、コントローラ4は、フリーブロックをストリーム#n用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。
ストリーム#n用の書き込み先ブロック(ここではBLK100)全体がホスト2からのライトデータで満たされると、コントローラ4は、この書き込み先ブロックBLK100をアクティブブロックプール101−nによって管理するとともに(クローズ)、フリーブロックプール200内のフリーブロックをストリーム#n用の新たな書き込み先ブロック(オープンブロック)として割り当てる。
アクティブブロックプール101−n内のあるブロック内の全ての有効データが、データ更新、デアロケーション(アンマップ、トリム)、ガベージコレクション等によって無効化されると、コントローラ4は、このブロックをフリーブロックプール200に移動してこのブロックを書き込み先ブロックとして再利用可能な状態に遷移させる。
図16は、複数のストリームに対応する複数のバッファ領域を使用して実行される書き込み動作を示す。
図16においては、ストリーム#1、ストリーム#2、ストリーム#3、…ストリーム#nにそれぞれ対応するライトバッファ領域WB#1、ライトバッファ領域WB#2、ライトバッファ領域WB#3、…ライトバッファ領域WB#nがSSD3内の第1のバッファとして用意されている。
図16においては、ストリーム#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倍(例えば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に書き込まれる。
図16に示す構成では、ストリーム#1、ストリーム#2、ストリーム#3、…ストリーム#nにそれぞれ対応するライトバッファ領域WB#1、ライトバッファ領域WB#2、ライトバッファ領域WB#3、…ライトバッファ領域WB#nを含む大きなサイズのライトバッファをSSD3内に設ける場合を説明した。
図17は、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に書き込むことができる。
このように、図17に示される書き込み動作においては、コントローラ4は、受信されたライトコマンド群に対応するライトデータの長さ(サイズ)をストリーム毎にチェックして、ライトデータのサイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する。そして、ライトデータのサイズが最小書き込みサイズに達したストリームに関連付けられた最小書き込みサイズ分のライトデータがホストメモリ内のライトバッファ51から内部バッファ16に転送される。内部バッファ16に転送された最小書き込みサイズ分のライトデータは、即座に書き込みを開始することが可能である。したがって、内部バッファ16は複数のストリームによって共有することができる。よって、図17の書き込み動作を使用した場合には、SSD3によってサポートされるべきストリームの数が増えても、最小書き込みサイズ分の内部バッファ16のみを用意するだけで、ストリーム書き込み動作を効率よく実行することができる。
図18は、データ書き込みに関する、ホスト2とSSD3それぞれの構成例を示す。
ここでは、図17の書き込み動作が使用される場合が想定されている。
ここでは、図17の書き込み動作が使用される場合が想定されている。
ホスト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)をこのライトデータに割り当てるアドレス割り当て動作を実行する。さらに、ライト制御部21は、この論理アドレスにこの物理アドレスが関連付けられるようにL2Pテーブル31を更新する。物理アドレスは、ブロックアドレスと、ページアドレスと、ページ内オフセットとによって表されてもよい。
各コマンドキューにおいては、ライトコマンド毎に、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内の書き込み先ブロックに書き込む。
基本的には、L2Pテーブル31の更新が終了し且つライトデータの転送が終了した場合、もしくはL2Pテーブル31の更新が終了し且つ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を更新する処理を効率よく実行することが可能となる。
図19は、データ読み出しに関する、ホスト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から受け取ることができる。
図20のフローチャートは、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に蓄積される。ステップS62では、さらに、コントローラ4は、受信されたライトコマンド毎に、アドレス割り当て動作、およびL2P更新動作を行う。
コントローラ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に蓄積される。ステップS62では、さらに、コントローラ4は、受信されたライトコマンド毎に、アドレス割り当て動作、およびL2P更新動作を行う。
コントローラ4は、蓄積されたライトコマンドに対応する書き込み待ちのライトデータのサイズをストリーム毎にチェックして、書き込み待ちのライトデータのサイズがNAND型フラッシュメモリ5の最小書き込みサイズに達したストリームを検出する(ステップS63)。すなわち、ステップS63では、コントローラ4は、複数のグループの各々に関して、同じグループに属するライトコマンドそれぞれによって指定される長さの合計を算出することによって同じグループに属するライトコマンドの集合に関連付けられたライトデータの長さ(書き込み待ちのライトデータのサイズ)が最小書き込みサイズに達したか否かを判定する。
書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームを検出した場合(ステップS64のYES)、コントローラ4は、ホストメモリ内のライトバッファ51から内部バッファ16に、検出したストリームに関連付けられた最小書き込みサイズ分のライトデータを転送する(ステップS65)。そして、コントローラ4は、内部バッファ16に転送されたライトデータを、このストリーム用に割り当てられている書き込み先ブロックに書き込む(ステップS66)。
書き込み待ちのライトデータのサイズが最小書き込みサイズに達したストリームが検出されなかった場合(ステップ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へのデータ転送を実行する。
図21のフローチャートは、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は、受信されたライトコマンド毎に、アドレス割り当て動作、およびL2P更新動作を行う。
コントローラ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は、受信されたライトコマンド毎に、アドレス割り当て動作、およびL2P更新動作を行う。
コントローラ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)。
書き込み待ちのライトデータの長さとDRAMバッファ32内のライトデータの長さとの合計長さが最小書き込みサイズに達したストリームが検出されなかった場合(ステップS74のNO)、コントローラ4は、図20のステップS67、S68の処理を実行する。
すなわち、コントローラ4は、受信から所定時間が経過したライトコマンドの有無を検出する(ステップS67)。あるストリームに対応するライトコマンドの受信から所定時間が経過したことを検出した場合(ステップS67のYES)、コントローラ4は、このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32にこのストリーム用のライトデータとして転送する(ステップS68)。このライトコマンドに関連付けられたライトデータをホストメモリ内のライトバッファ51からDRAMバッファ32に転送した後、コントローラ4は、このライトコマンドを、このライトコマンドが格納されているコマンドキューから削除する。そして、コントローラ4は、このライトコマンドの完了を示す応答をホスト2に返す。
以上説明したように、本実施形態によれば、ライトデータの転送が終了する前もしくはNAND型フラッシュメモリ5の書き込みが終了する前にL2Pテーブル31の更新が開始される。このように、L2P更新動作の開始タイミングを早めることにより、比較的長い時間を要する処理(データ転送またはフラッシュ書き込み)のバックグラウンドでL2P更新を実行することが可能となる。よって、フラッシュ書き込みの後にL2P更新を実行する場合に比し、L2P更新を高速に実行可能にするための高い計算能力を用意することなく、書き込み性能の向上を図ることができる。
また、読み出し動作においては、L2Pテーブル31から取得された物理アドレスが書き込み先ブロック内の読み出し可能となっていない物理記憶位置を示す場合、読み出し対象データはバッファ(SSD3内の第1のバッファまたはホスト2のライトバッファ)から読み出される。バッファからのデータの読み出しは、この書き込み先ブロック内の読み出し可能となっていない各物理アドレスへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の位置を示す情報に基づいて、実行される。
このように、L2P更新の開始タイミングを早めることにより、書き込み性能を向上できるだけで無く、L2Pテーブル31から取得された物理アドレスを使用してバッファからのデータ読み出しを実行することも可能となる。
よって、ある書き込み先ブロックに書き込み中のデータまたはこの書き込み先ブロックへの書き込みが開始されていない書き込み待ちのデータがホスト2からのリードコマンドによって要求された場合でも、このデータをホスト2に返すことができ、データのリードに関する性能の向上を図ることができる。
また、本実施形態では、L2Pテーブル31から取得された物理アドレス内のオフセット(ブロック内オフセット)とリード対象ブロックのURPとを比較して、この読み出し対象データがこのリード対象ブロックから読み出し可能であるか否か、つまり読み出し対象データの論理アドレスに割り当てられている物理アドレスがこのリード対象ブロックの読み出し可能領域または読み出し不可能領域のいずれに属するかを、即座に判定することができる。この場合、コントローラ4は、このリード対象ブロックが、書き込み先ブロックとして現在使用されているブロックであるか、クローズされているブロックであるかをチェックする必要は無く、取得した物理アドレス内のオフセット(ブロック内オフセット)とリード対象ブロックのURPとを比較するだけでよい。
なお、本実施形態では、不揮発性メモリとして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 (12)
- ホストに接続可能なメモリシステムであって、
複数のページを各々が含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
前記ホストからの第1のライトコマンドの受信に応じて、前記第1のライトコマンドに関連付けられた第1のライトデータが書き込まれるべき前記不揮発性メモリの物理記憶位置を示す第1の物理アドレスを決定し、前記第1のライトデータの論理アドレスに前記第1の物理アドレスが関連付けられるようにアドレス変換テーブルを更新し、
前記第1のライトデータを前記ホストのメモリ内のライトバッファから前記コントローラに転送し、前記第1の物理アドレスによって指定される、前記不揮発性メモリの第1の書き込み先ブロック内の書き込み先位置に、前記第1のライトデータを書き込むように構成され、
前記コントローラは、前記第1のライトデータの転送が終了する前もしくは前記不揮発性メモリに対する前記第1のライトデータの書き込みが終了する前に前記アドレス変換テーブルの更新を開始するように構成されている、メモリシステム。 - 前記不揮発性メモリは、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する1以上のページへのデータの書き込み後に可能となるように構成され、
前記コントローラは、
前記ホストからのリードコマンドの受信に応じて、前記リードコマンドによって指定された読み出し対象データの論理アドレスに対応する第2の物理アドレスを前記アドレス変換テーブルから取得し、前記第2の物理アドレスが前記第1の書き込み先ブロック内の読み出し可能となっていない物理記憶位置を示す場合、前記第1の書き込み先ブロック内の読み出し可能となっていない各物理アドレスへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の位置を示す情報に基づいて、前記読み出し対象データを前記バッファから読み出すように構成され、前記バッファは前記メモリシステム内の第1のバッファまたは前記ホストの前記ライトバッファである請求項1記載のメモリシステム。 - 前記不揮発性メモリは、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する1以上のページへのデータの書き込み後に可能となるように構成され、
前記コントローラは、
前記複数のブロックから割り当てられた複数の書き込み先ブロックそれぞれについてデータの読み出しが不可能な最小物理アドレスを示すポインタを管理し、且つ既に全てのページにデータが書き込まれている複数のブロックそれぞれについてブロック終端の物理アドレスよりも大きな物理アドレスを前記ポインタとして管理し、
前記ホストからのリードコマンドの受信に応じて、前記リードコマンドによって指定された読み出し対象データの論理アドレスに対応する第2の物理アドレスを前記アドレス変換テーブルから取得し、前記第2の物理アドレスはリード対象ブロックを示すブロックアドレスと前記リード対象ブロック内のリード対象位置を示すオフセットとを含み、
前記オフセットが前記リード対象ブロックに対応するポインタの値よりも小さい場合、前記読み出し対象データを前記リード対象ブロックから読み出し、前記オフセットが前記リード対象ブロックに対応するポインタの値以上である場合、前記読み出し対象データをバッファから読み出すように構成され、前記バッファは前記メモリシステム内の第1のバッファまたは前記ホストの前記ライトバッファである請求項1記載のメモリシステム。 - 前記コントローラは、前記複数の書き込み先ブロックの各々について、読み出し不可能領域の物理アドレスそれぞれと当該物理アドレスへの書き込み中もしくは書き込み待ちのデータが格納されている前記バッファ内の位置それぞれとの間の対応関係を示すバッファ管理情報を管理し、前記リード対象ブロックに対応するバッファ管理情報を参照することによって前記読み出し対象データが格納されている前記バッファ内の位置を取得し、前記取得した前記バッファ内の位置から前記読み出し対象データを読み出すように構成されている請求項3記載のメモリシステム。
- 前記コントローラは、前記アドレス変換テーブルの更新が終了し且つ前記第1のライトデータの転送が終了した場合、もしくは前記アドレス変換テーブルの更新が終了し且つ前記不揮発性メモリに対する前記第1のライトデータの書き込みが終了した場合に、前記第1のライトコマンドの完了を示す応答を前記ホストに返すように構成されている請求項1記載のメモリシステム。
- 前記コントローラは、前記アドレス変換テーブルの更新が終了した場合、前記第1のライトコマンドが受領されたことを示す応答を前記ホストに返すように構成されている請求項1記載のメモリシステム。
- 複数のページを各々が含む複数のブロックを含む不揮発性メモリを含むメモリシステムを制御する制御方法であって、
ホストからの第1のライトコマンドの受信に応じて、前記第1のライトコマンドに関連付けられた第1のライトデータが書き込まれるべき前記不揮発性メモリの物理記憶位置を示す第1の物理アドレスを決定し、前記第1のライトデータの論理アドレスに前記第1の物理アドレスが関連付けられるようにアドレス変換テーブルを更新することと、
前記第1のライトデータを前記ホストのメモリ内のライトバッファから前記メモリシステムに転送することと、
前記第1の物理アドレスによって指定される、前記不揮発性メモリの第1の書き込み先ブロック内の書き込み先位置に、前記第1のライトデータを書き込むことと、
前記第1のライトデータの転送が終了する前もしくは前記不揮発性メモリに対する前記第1のライトデータの書き込みが終了する前に前記アドレス変換テーブルの更新を開始することとを具備する制御方法。 - 前記不揮発性メモリは、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する1以上のページへのデータの書き込み後に可能となるように構成され、
前記ホストからのリードコマンドの受信に応じて、前記リードコマンドによって指定された読み出し対象データの論理アドレスに対応する第2の物理アドレスを前記アドレス変換テーブルから取得し、前記第2の物理アドレスが前記第1の書き込み先ブロック内の読み出し可能となっていない物理記憶位置を示す場合、前記第1の書き込み先ブロック内の読み出し可能となっていない各物理アドレスへの書き込み中もしくは書き込み待ちのデータが格納されているバッファ内の位置を示す情報に基づいて、前記読み出し対象データをバッファから読み出すことをさらに具備し、前記バッファは前記メモリシステム内の第1のバッファまたは前記ホストの前記ライトバッファである請求項7記載の制御方法。 - 前記不揮発性メモリは、各ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが前記一つのページに後続する1以上のページへのデータの書き込み後に可能となるように構成され、
前記複数のブロックから割り当てられた複数の書き込み先ブロックそれぞれについてデータの読み出しが不可能な最小物理アドレスを示すポインタを管理し、且つ既に全てのページにデータが書き込まれている複数のブロックそれぞれについてブロック終端の物理アドレスよりも大きな物理アドレスを前記ポインタとして管理することと、
前記ホストからのリードコマンドの受信に応じて、前記リードコマンドによって指定された読み出し対象データの論理アドレスに対応する第2の物理アドレスを前記アドレス変換テーブルから取得することと、前記第2の物理アドレスはリード対象ブロックを示すブロックアドレスと前記リード対象ブロック内のリード対象位置を示すオフセットとを含み、
前記オフセットが前記リード対象ブロックに対応するポインタの値よりも小さい場合、前記読み出し対象データを前記リード対象ブロックから読み出し、前記オフセットが前記リード対象ブロックに対応するポインタの値以上である場合、前記読み出し対象データをバッファから読み出すこととをさらに具備し、前記バッファは前記メモリシステム内の第1のバッファまたは前記ホストの前記ライトバッファである請求項7記載の制御方法。 - 前記複数の書き込み先ブロックの各々について、読み出し不可能領域の物理アドレスそれぞれと当該物理アドレスへの書き込み中もしくは書き込み待ちのデータが格納されている前記バッファ内の位置それぞれとの間の対応関係を示すバッファ管理情報を管理することをさらに具備し、
前記読み出し対象データを前記バッファから読み出すことは、前記リード対象ブロックに対応するバッファ管理情報を参照することによって前記読み出し対象データが格納されている前記バッファ内の位置を取得し、前記取得した前記バッファ内の位置から前記読み出し対象データを読み出すことを含む請求項9記載の制御方法。 - 前記アドレス変換テーブルの更新が終了し且つ前記第1のライトデータの転送が終了した場合、もしくは前記アドレス変換テーブルの更新が終了し且つ前記不揮発性メモリに対する前記第1のライトデータの書き込みが終了した場合に、前記第1のライトコマンドの完了を示す応答を前記ホストに返すことをさらに具備する請求項7記載の制御方法。
- 前記アドレス変換テーブルの更新が終了した場合、前記第1のライトコマンドが受領されたことを示す応答を前記ホストに返すことをさらに具備する請求項7記載の制御方法。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019155834A JP2021033849A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
US16/815,894 US11176032B2 (en) | 2019-08-28 | 2020-03-11 | Memory system and method of controlling nonvolatile memory |
US17/500,465 US11720487B2 (en) | 2019-08-28 | 2021-10-13 | Memory system and method of controlling nonvolatile memory |
US18/337,205 US20230333980A1 (en) | 2019-08-28 | 2023-06-19 | Memory system and method of controlling nonvolatile memory |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019155834A JP2021033849A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2021033849A true JP2021033849A (ja) | 2021-03-01 |
Family
ID=74676639
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019155834A Pending JP2021033849A (ja) | 2019-08-28 | 2019-08-28 | メモリシステムおよび制御方法 |
Country Status (2)
Country | Link |
---|---|
US (3) | US11176032B2 (ja) |
JP (1) | JP2021033849A (ja) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11537510B2 (en) * | 2020-04-24 | 2022-12-27 | Western Digital Technologies, Inc. | Storage devices having minimum write sizes of data |
US11294598B2 (en) | 2020-04-24 | 2022-04-05 | Western Digital Technologies, Inc. | Storage devices having minimum write sizes of data |
US11593021B2 (en) * | 2020-11-06 | 2023-02-28 | Hewlett Packard Enterprise Development Lp | Writing a container index to persistent storage |
JP2023037883A (ja) | 2021-09-06 | 2023-03-16 | キオクシア株式会社 | 情報処理装置 |
JP2023045867A (ja) | 2021-09-22 | 2023-04-03 | キオクシア株式会社 | メモリシステム |
CN114296653A (zh) * | 2021-12-29 | 2022-04-08 | 深圳忆联信息系统有限公司 | 基于固态硬盘的加速映射表更新方法、装置及计算机设备 |
US20240119009A1 (en) * | 2022-10-06 | 2024-04-11 | Samsung Electronics Co., Ltd. | Memory controller with improved mapping information management, memory system including the same, and operating method of memory controller |
CN115795519B (zh) * | 2023-01-18 | 2023-05-09 | 苏州浪潮智能科技有限公司 | 数据加解密处理方法、装置、电子设备及存储介质 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6804741B2 (en) * | 2002-01-16 | 2004-10-12 | Hewlett-Packard Development Company, L.P. | Coherent memory mapping tables for host I/O bridge |
JP5323030B2 (ja) * | 2010-12-01 | 2013-10-23 | 株式会社東芝 | メモリ装置及びメモリ制御方法 |
US9218279B2 (en) | 2013-03-15 | 2015-12-22 | Western Digital Technologies, Inc. | Atomic write command support in a solid state drive |
US20160019160A1 (en) * | 2014-07-17 | 2016-01-21 | Sandisk Enterprise Ip Llc | Methods and Systems for Scalable and Distributed Address Mapping Using Non-Volatile Memory Modules |
US20160048328A1 (en) | 2014-08-12 | 2016-02-18 | Kabushiki Kaisha Toshiba | Memory system |
KR20160064364A (ko) * | 2014-11-27 | 2016-06-08 | 삼성전자주식회사 | 패스트 오픈을 위한 어드레스 맵 운영방법 및 그에 따른 메모리 시스템 |
JP6139807B2 (ja) * | 2014-12-04 | 2017-05-31 | 株式会社東芝 | ストレージ装置、ストレージ装置の制御方法、及びプログラムを記憶するコンピュータ読み取り可能な不揮発性記憶媒体 |
US20170147499A1 (en) * | 2015-11-25 | 2017-05-25 | Sandisk Technologies Llc | Multi-Level Logical to Physical Address Mapping Using Distributed Processors in Non-Volatile Storage Device |
JP6414853B2 (ja) | 2015-12-14 | 2018-10-31 | 東芝メモリ株式会社 | メモリシステムおよび制御方法 |
US10635331B2 (en) * | 2017-07-05 | 2020-04-28 | Western Digital Technologies, Inc. | Distribution of logical-to-physical address entries across bank groups |
US11188251B2 (en) * | 2017-12-19 | 2021-11-30 | Western Digital Technologies, Inc. | Partitioned non-volatile memory express protocol for controller memory buffer |
US10613778B2 (en) * | 2018-03-21 | 2020-04-07 | Western Digital Technologies, Inc. | Dynamic host memory allocation to a memory controller |
US10725690B2 (en) * | 2018-05-18 | 2020-07-28 | Intel Corporation | Non-volatile memory cloning with hardware copy-on-write support |
-
2019
- 2019-08-28 JP JP2019155834A patent/JP2021033849A/ja active Pending
-
2020
- 2020-03-11 US US16/815,894 patent/US11176032B2/en active Active
-
2021
- 2021-10-13 US US17/500,465 patent/US11720487B2/en active Active
-
2023
- 2023-06-19 US US18/337,205 patent/US20230333980A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20220100651A1 (en) | 2022-03-31 |
US11720487B2 (en) | 2023-08-08 |
US11176032B2 (en) | 2021-11-16 |
US20210064520A1 (en) | 2021-03-04 |
US20230333980A1 (en) | 2023-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7346311B2 (ja) | メモリシステム | |
US11237769B2 (en) | Memory system and method of controlling nonvolatile memory | |
JP7051546B2 (ja) | メモリシステムおよび制御方法 | |
US20230333980A1 (en) | Memory system and method of controlling nonvolatile memory | |
JP2020046963A (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 | |
JP7358594B2 (ja) | メモリシステム | |
US20220066693A1 (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) | メモリシステムおよび制御方法 | |
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 | |
JP2022171773A (ja) | メモリシステムおよび制御方法 | |
JP2023010765A (ja) | メモリシステム | |
JP2023012773A (ja) | メモリシステムおよび制御方法 | |
JP7337228B2 (ja) | メモリシステムおよび制御方法 |