IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 東芝メモリ株式会社の特許一覧

<>
  • 特許-メモリシステム 図1
  • 特許-メモリシステム 図2
  • 特許-メモリシステム 図3
  • 特許-メモリシステム 図4
  • 特許-メモリシステム 図5
  • 特許-メモリシステム 図6
  • 特許-メモリシステム 図7
  • 特許-メモリシステム 図8
  • 特許-メモリシステム 図9
  • 特許-メモリシステム 図10
  • 特許-メモリシステム 図11
  • 特許-メモリシステム 図12
  • 特許-メモリシステム 図13
  • 特許-メモリシステム 図14
  • 特許-メモリシステム 図15
  • 特許-メモリシステム 図16
  • 特許-メモリシステム 図17
  • 特許-メモリシステム 図18
  • 特許-メモリシステム 図19
  • 特許-メモリシステム 図20
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-09-08
(45)【発行日】2023-09-19
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
   G06F 12/00 20060101AFI20230911BHJP
   G06F 12/06 20060101ALI20230911BHJP
   G06F 12/02 20060101ALI20230911BHJP
【FI】
G06F12/00 560B
G06F12/00 597U
G06F12/06 550A
G06F12/02 510A
【請求項の数】 11
(21)【出願番号】P 2020005292
(22)【出願日】2020-01-16
(65)【公開番号】P2021114039
(43)【公開日】2021-08-05
【審査請求日】2022-09-12
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】江坂 直紀
(72)【発明者】
【氏名】菅野 伸一
【審査官】松平 英
(56)【参考文献】
【文献】特開2018-120439(JP,A)
【文献】特開2019-057193(JP,A)
【文献】特開2019-191909(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
12/00-12/128
13/16-13/18
(57)【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
各々がデータ消去動作の単位である複数のブロックを含む不揮発性メモリと、
バッファと、
前記不揮発性メモリ及び前記バッファに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記複数のブロックのうちの複数の第1のブロックの各々に対し、メモリセル当たりにmビットのデータを書き込むための第1の書き込みモードでデータを書き込む書き込み動作と、消去動作とを含む第1の動作を複数回実行し、
前記複数のブロックのうちの第2のブロックが不良ブロックでない間は、前記第2のブロックに対し、メモリセル当たりにnビットのデータを書き込むための第2の書き込みモードでデータを書き込む書き込み動作と、消去動作とを含む第2の動作を複数回実行し、
前記mは2以上の整数、前記nは1以上且つ前記m未満の整数であり、
前記第2の動作の前記書き込み動作は、前記複数の第1のブロックの一つである第3のブロックの状態を、データの書き込みが可能な書き込み先ブロックとして割り当てられている第1の状態から、書き込みが中断された第2の状態に遷移させる際に前記第3のブロックに対する受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、前記バッファに未転送の第1のライトデータを前記第2のブロックに書き込む動作を含み、
前記コントローラは、
前記第2のブロックが不良ブロックである場合前記複数の第1のブロックの一つである第4のブロックの状態を前記第1の状態から前記第2の状態に遷移させる、前記複数の第1のブロックの一つである第5のブロックを選択し、前記第4のブロックに対する受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、前記バッファに未転送の第2のライトデータを、前記選択された第5のブロックに前記第2の書き込みモードで書き込むように構成されている、メモリシステム。
【請求項2】
前記第2のブロックは、複数の第2のブロックのうちの一つであり、
前記コントローラは、
前記複数の第2のブロックを不揮発性バッファとして割り当て、
前記不揮発性バッファとして割り当てられている前記複数の第2のブロックの各々に対し、前記第2の動作を複数回実行し、
前記複数の第2のブロックに含まれる不良ブロックの増加に伴い前記複数の第2のブロックに含まれる利用可能なブロックの数が閾値よりも減少したことに応じて、前記複数の第1のブロックの一つである第6のブロックを選択し、前記選択された第6のブロックを前記不揮発性バッファに割り当てるようにさらに構成されている、請求項1記載のメモリシステム。
【請求項3】
前記コントローラは、
前記選択された第5のブロック全体が前記第2の書き込みモードで書き込まれたデータで満たされた場合前記複数の第1のブロックの一つである第7のブロックの状態を前記第1の状態から前記第2の状態に遷移させる、前記複数の第1のブロックの一つである第8のブロックを選択し、前記第7のブロックに対する受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、前記バッファに未転送の第3のライトデータを、前記選択された第8のブロックに前記第2の書き込みモードで書き込むようにさらに構成されている、請求項1記載のメモリシステム。
【請求項4】
前記コントローラは、
前記複数の第1のブロックから割り当てられた第1の書き込み先ブロックにデータを書き込むための一つ以上の第1のライト要求を前記ホストから受信したことに応じて、前記一つ以上の第1のライト要求に関連付けられている第1のライトデータを前記ホストのライトバッファから前記バッファに転送し、前記バッファに転送された前記第1のライトデータを、前記第1の書き込みモードで前記第1の書き込み先ブロックに書き込み、
前記複数の第1のブロックから割り当てられた第2の書き込み先ブロックにデータを書き込むための一つ以上の第2のライト要求を前記ホストから受信したことに応じて、前記一つ以上の第2のライト要求に関連付けられている第2のライトデータを前記ホストの前記ライトバッファから前記バッファに転送し、前記バッファに転送された前記第2のライトデータを前記第1の書き込みモードで前記第2の書き込み先ブロックに書き込むようにさらに構成されている、請求項1記載のメモリシステム。
【請求項5】
前記不揮発性メモリに含まれる前記複数のブロックの各々は複数のページを含み、
前記第1の書き込みモードは、各ブロックの複数のページの一つのページに書き込まれたデータの読み出しが、前記一つのページに後続する1以上のページへのデータの書き込み後に可能となる書き込みモードであり、
前記第2の書き込みモードは、各ブロックの複数のページの一つのページに書き込まれたデータの読み出しが、前記一つのページへの前記データの書き込みのみによって可能になる書き込みモードである、請求項1記載のメモリシステム。
【請求項6】
前記コントローラは、
前記第3のブロックに対する前記受信済みの一つ以上のライト要求に関連付けられた前記ライトデータのうち、前記第3のブロックから読み出し可能になっていない第3のライトデータを前記バッファから取得し、前記第1のライトデータを、前記第3のライトデータと共に、前記第2の書き込みモードで、前記第2のブロックに書き込むようにさらに構成されている、請求項5記載のメモリシステム。
【請求項7】
前記コントローラは、
前記第2の状態に遷移された前記第のブロックにデータを書き込むためのライト要求を前記ホストから受信したことに応じ、
前記第のブロックの状態を前記第2の状態から前記第1の状態に遷移させ、
前記第2のブロックに書き込まれた前記第1のライトデータを前記第2のブロックから読み出し、読み出した前記第1のライトデータを前記バッファに格納するようにさらに構成されている、請求項1記載のメモリシステム。
【請求項8】
前記コントローラは、
前記ホストから受信されるライト要求それぞれを、前記複数の第1のブロックから割り当てられた第1の書き込み先ブロックにデータを書き込むため第1のライト要求を含む第1のグループと、前記複数の第1のブロックから割り当てられた第2の書き込み先ブロックにデータを書き込むための第2のライト要求を含む第2のグループとに分類し、
前記第1のグループに属する前記第1のライト要求に関連付けられたライトデータの総サイズが、前記第1の書き込み先ブロックの最小書き込みサイズに達した場合、前記最小書き込みサイズを有する前記第1のライト要求に関連付けられたライトデータを、前記ホストのライトバッファから前記バッファに転送し、
前記第2のグループに属する前記第2のライト要求に関連付けられたライトデータの総サイズが、前記第2の書き込み先ブロックの最小書き込みサイズに達した場合、前記最小書き込みサイズを有する前記第2のライト要求に関連付けられたライトデータを、前記ホストの前記ライトバッファから前記バッファに転送するようにさらに構成されている、請求項1記載のメモリシステム。
【請求項9】
前記ホストの前記ライトバッファは不揮発性ライトバッファである請求項4記載のメモリシステム。
【請求項10】
ホストに接続可能なメモリシステムであって、
各々がメモリセルを有する複数の第1の記憶領域と、メモリセルを有する第2の記憶領域とを含む不揮発性メモリと、
バッファと、
前記不揮発性メモリ及び前記バッファに電気的に接続されたコントローラとを具備し、
前記コントローラは、
前記複数の第1の記憶領域から割り当てられた第1の書き込み先記憶領域にデータを書き込むための一つ以上の第1のライト要求を前記ホストから受信したことに応じて、前記受信した第1のライト要求に関連付けられているライトデータを前記ホストのライトバッファから前記バッファに転送し、前記バッファに転送された前記ライトデータを、メモリセル当たりにmビットのデータを書き込むための第1の書き込みモードで前記第1の書き込み先記憶領域に書き込み、
前記複数の第1の記憶領域から割り当てられた第2の書き込み先記憶領域にデータを書き込むための一つ以上の第2のライト要求を前記ホストから受信したことに応じて、前記受信した第2のライト要求に関連付けられているライトデータを前記ホストの前記ライトバッファから前記バッファに転送し、前記バッファに転送された前記ライトデータを前記第1の書き込みモードで前記第2の書き込み先記憶領域に書き込み、
前記複数の第1の記憶領域の一つである第3の記憶領域の状態を、データの書き込みが可能な書き込み先記憶領域として割り当てられている第1の状態から、書き込みが中断された第2の状態に遷移させる前記第3の記憶領域に対する受信済みのライト要求に関連付けられたライトデータのうち、前記バッファに未転送のライトデータを前記ホストの前記ライトバッファから取得し、前記未転送のライトデータを、メモリセル当たりにnビットのデータを書き込むための第2の書き込みモードで、前記複数の第1の記憶領域によって共有される、前記第2の記憶領域に書き込み、前記第3の記憶領域の状態を前記第1の状態から前記第2の状態に遷移させるように構成され、
前記mは2以上の整数、前記nは1以上且つ前記m以下の整数である、メモリシステム。
【請求項11】
前記不揮発性メモリは各々が複数のページを含む複数のブロックを含み、
前記第1の書き込みモードは、各第1の記憶領域に割り当てられたブロックの複数のページの一つのページに書き込まれたデータの読み出しが、前記一つのページに後続する1以上のページへのデータの書き込み後に可能となる書き込みモードであり、
前記コントローラは、
前記第3の記憶領域に割り当てられたブロックから読み出し可能になっていない第1のライトデータを前記バッファから取得し、前記未転送のライトデータを、前記第1のライトデータと共に、前記第2の書き込みモードで、前記第2の記憶領域に書き込むように構成されている、請求項10記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
SSDは、データセンターのサーバのような様々なホスト計算機システムのストレージデバイスとして使用されている。
【0004】
SSDにおいては、不揮発性メモリの記憶領域を効率的に利用できるようにするための新たな技術の実現が必要とされる。
【先行技術文献】
【特許文献】
【0005】
【文献】特開2019-191909号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明が解決しようとする課題は、不揮発性メモリの記憶領域を効率的に利用できるメモリシステムを提供することである。

【課題を解決するための手段】
【0007】
実施形態によれば、ホストに接続可能なメモリシステムは、各々がデータ消去動作の単位である複数のブロックを含む不揮発性メモリと、バッファと、前記不揮発性メモリ及び前記バッファに電気的に接続されたコントローラとを具備する。前記コントローラは、前記複数のブロックのうちの複数の第1のブロックの各々に対し、メモリセル当たりにmビットのデータを書き込むための第1の書き込みモードでデータを書き込む書き込み動作と、消去動作とを含む第1の動作を複数回実行する。前記コントローラは、前記複数のブロックのうちの第2のブロックが不良ブロックでない間は、前記第2のブロックに対し、メモリセル当たりにnビットのデータを書き込むための第2の書き込みモードでデータを書き込む書き込み動作と、消去動作とを含む第2の動作を複数回実行する。前記mは2以上の整数、前記nは1以上且つ前記m未満の整数である。前記第2の動作の前記書き込み動作は、前記複数の第1のブロックの一つである第3のブロックの状態を、データの書き込みが可能な書き込み先ブロックとして割り当てられている第1の状態から、書き込みが中断された第2の状態に遷移させる際に前記第3のブロックに対する受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、前記バッファに未転送の第1のライトデータを前記第2のブロックに書き込む動作を含む。前記コントローラは、前記第2のブロックが不良ブロックである場合前記複数の第1のブロックの一つである第4のブロックの状態を前記第1の状態から前記第2の状態に遷移させる、前記複数の第1のブロックの一つである第5のブロックを選択し、前記第4のブロックに対する受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、前記バッファに未転送の第2のライトデータを、前記選択された第5のブロックに前記第2の書き込みモードで書き込む。
【図面の簡単な説明】
【0008】
図1】実施形態に係るメモリシステムとホストとの関係を示すブロック図。
図2】実施形態に係るメモリシステムの構成例を示すブロック図。
図3】ユーザデータ記憶領域として使用される複数のクワドレベルセルブロック(QLCブロック)と、複数のQLCブロックによって共有される共有フラッシュバッファとの関係を示すブロック図。
図4】共有フラッシュバッファとして使用されるQLCバッファを示すブロック図。
図5】共有フラッシュバッファとして使用されるシングルレベルセルバッファ(SLCバッファ)を示すブロック図。
図6】実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係を示すブロック図。
図7】実施形態に係るメモリシステムにおいて使用される、あるブロックグループ(スーパーブロック)の構成例を示す図。
図8】QLCブロックに一つのメモリセル当たりに4ビットを書き込むモードでデータを書き込む動作を説明するための図。
図9】実施形態に係るメモリシステムにおいて実行される、QLCブロックと共有フラッシュバッファを制御する動作を説明するための図。
図10】共有フラッシュバッファとして使用されるQLCバッファを制御する動作を説明するための図。
図11】共有フラッシュバッファとして使用されるSLCバッファを制御する動作を説明するための図。
図12】スタティックSLCバッファとダイナミックSLCバッファとを使用するハイブリッドSLCバッファを説明するための図。
図13】ハイブリッドSLCバッファを制御する動作を説明するための図。
図14】実施形態に係るメモリシステムにおいて実行される書き込み動作を示すブロック図。
図15】実施形態に係るメモリシステムにおいて実行される書き込み動作のシーケンスと読み出し動作のシーケンスの例を示すブロック図。
図16】実施形態に係るメモリシステムにおいて実行される書き込み動作のシーケンスと読み出し動作のシーケンスの別の例を示すブロック図。
図17】実施形態に係るメモリシステムにおいて実行される書き込み動作の手順と、オープンされているQLCブロックをクローズ状態に遷移させる動作の手順を示すフローチャート。
図18】ハイブリッドSLCバッファを制御する動作の手順を示すフローチャート。
図19】クローズ状態のQLCブロックを再オープンする動作の手順を示すフローチャート。
図20】比較例に係るSSDおいて必要となるSLCバッファの容量と、実施形態に係るメモリシステムにおいて必要となるSLCバッファの容量とを説明するための図。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
図1は、実施形態に係るメモリシステムとホストとの関係を示すブロック図である。
【0010】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NAND型フラッシュメモリを含むソリッドステートドライブ(SSD)3として実現されている。
【0011】
ホスト(ホストデバイス)2は、複数のSSD3を制御するように構成されている。ホスト2は、複数のSSD3を含むストレージアレイをストレージとして使用するように構成された情報処理装置によって実現され得る。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
【0012】
なお、SSD3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のSSD3)を制御するコントローラを含んでもよい。SSD3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、SSD3のホストとして機能してもよい。
【0013】
以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。
【0014】
ホスト(サーバ)2と複数のSSD3は、インタフェース50を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
【0015】
ホスト2として機能するサーバコンピュータの例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
【0016】
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
【0017】
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
【0018】
複数の仮想マシンが、このホスト2として機能する物理サーバ上で実行されてもよい。ホスト2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。各仮想マシンに対応するオペレーティングシステムは、I/Oサービスを含む。このI/Oサービスは、論理ブロックアドレス(LBA)ベースのブロックI/Oサービスであってもよいし、あるいは、キー・バリュー・ストアサービスであってもよい。
【0019】
各仮想マシンに対応するオペレーティングシステムにおいては、I/Oサービスは、ユーザアプリケーションからのライト/リードに関する要求に応答して、I/Oコマンド(ライトコマンド、リードコマンド)を発行する。これらI/Oコマンドはホスト2内の一つ以上のサブミッションキューを介してSSD3に送出される。
【0020】
SSD3のコントローラは、メモリセル当たりにmビットのデータを書き込むための第1の書き込みモードとメモリセル当たりにnビットのデータを書き込むための第2の書き込みモードとを選択的に使用して、ホスト2からのライトデータを不揮発性メモリに書き込むように構成されている。ここで、mは2以上の整数であり、nは1以上且つm以下の整数である。
【0021】
より詳しくは、SSD3のコントローラは、不揮発性メモリに含まれる複数の第1の記憶領域の各々に、メモリセル当たりにmビットのデータを書き込むための第1の書き込みモードでデータを書き込み、不揮発性メモリに含まれる第2の記憶領域に、メモリセル当たりにnビットのデータを書き込むための第2の書き込みモードでデータを書き込む。
【0022】
複数の第1の記憶領域は、ユーザデータを格納するためのユーザデータ記憶領域として使用される。第2の記憶領域は、複数の第1の記憶領域に書き込まれるべきデータを必要に応じて不揮発に記憶するために使用される。第2の記憶領域は複数の第1の記憶領域によって共有され、どの第1の記憶領域に書き込むべきデータも第2の記憶領域を用いて不揮発に記憶される。
【0023】
図2は、SSD3の構成例を示す。
SSD3は、コントローラ4と、不揮発性メモリ(例えば、NAND型フラッシュメモリ5)とを備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
【0024】
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
【0025】
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は複数のページ(ここではページP0~Py-1)を含む。ブロックBLK0~BLKx-1は、データ消去動作の単位である。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0~Py-1は、データ書き込み動作およびデータ読み出し動作の単位である。
【0026】
コントローラ4は、Toggle NANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
【0027】
NAND型フラッシュメモリ5の記憶領域は、図3に示すように、共有フラッシュバッファ201と、クワドレベルセル領域(QLC領域)202とに大別される。
【0028】
QLC領域202は複数のQLCブロックを含む。複数のQLCブロックの各々は、一つのメモリセル当たりに4ビットを記憶する書き込みモード(プログラムモードとも云う)によってデータが書き込まれるブロックである。QLC領域202に含まれるこれら複数のQLCブロックは、上述した複数の第1の記憶領域の一例である。
【0029】
各QLCブロックにデータを書き込む動作においては、メモリセル当たりに4ビットのデータを書き込むことにより、4ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。
【0030】
共有フラッシュバッファ201は上述した第2の記憶領域の一例であり、QLC領域202に含まれる複数のQLCブロックによって共有される不揮発性バッファとして使用される。
【0031】
共有フラッシュバッファ201は、図4に示されているように、QLCバッファ301によって実現されてもよい。図4のQLCバッファ301は複数のブロック(複数のQLCブロック)を含む。共有フラッシュバッファ201に含まれる各QLCブロックにデータを書き込む動作においては、メモリセル当たりに4ビットのデータを書き込むことにより、4ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。
【0032】
あるいは、共有フラッシュバッファ201は、図5に示されているように、シングルレベルセルバッファ(SLCバッファ)401によって実現されてもよい。図5のSLCバッファ401は複数のブロック(複数のSLCブロック)を含む。各SLCブロックにデータを書き込む動作においては、メモリセル当たりに1ビットのデータを書き込むことにより、1ページ分のデータのみが、同一ワード線に接続された複数のメモリセルに書き込まれる(SLCモード)。
【0033】
SLCブロックにおけるメモリセル当たりの記憶密度は1ビット(すなわち、ワード線当たり1ページ)であり、QLCブロックにおけるメモリセル当たりの記憶密度は4ビット(すなわち、ワード線当たり4ページ)である。
【0034】
NAND型フラッシュメモリ5に対するデータの読み出し速度および書き込み速度は、記憶密度が高いほど遅く、記憶密度が低いほど速い。したがって、QLCブロックに対するデータの読み出しおよび書き込みに要する時間は、SLCブロックに対するデータの読み出しおよび書き込みに要する時間よりも長くなる。
【0035】
QLC領域202に適用される上述の第1の書き込みモードとしては、フォギー・ファイン書き込み動作が使用されてもよい。フォギー・ファイン書き込み動作は、ブロックに含まれる複数のページ内の一つのページに書き込まれたデータの読み出しが、この一つのページに後続する1以上のページへのデータの書き込み後に可能となる書き込みモードの一例である。
【0036】
フォギー・ファイン書き込み動作は、同じワード線に接続されたメモリセル群に対する複数回の書き込み動作(フォギー書き込み動作、ファイン書き込み動作)によって実行される。1回目の書き込み動作(フォギー書き込み動作)は各メモリセルの閾値電圧を粗く設定する書き込み動作であり、2回目の書き込み動作(ファイン書き込み動作)は各メモリセルの閾値電圧を調整する書き込み動作である。フォギー・ファイン書き込み動作は、プログラムディスターブによる影響を低減することが可能な書き込みモードである。
【0037】
1回目の書き込み動作(フォギー書き込み動作)では、まず、4ページ分のデータが、1回目のデータ転送動作によってNAND型フラッシュメモリ5にページサイズ単位で転送される。つまり、1ページ当たりのデータサイズ(ページサイズ)が16KBであるならば、64KBのデータがNAND型フラッシュメモリ5にページサイズ単位で転送される。そして、4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための1回目の書き込み動作(フォギー書き込み動作)が行われる。
【0038】
2回目のプログラム動作(ファイン書き込み動作)では、フォギー書き込み動作と同様に、4ページ分のデータが、2回目のデータ転送動作でNAND型フラッシュメモリ5にページサイズ単位で再び転送される。2回目のデータ転送動作でNAND型フラッシュメモリ5に転送されるデータは、1回目のデータ転送動作によって転送されるデータと同一である。そして、転送された4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための2回目の書き込み動作(ファイン書き込み動作)が行われる。
【0039】
さらに、あるワード線に接続された複数のメモリセルに対するフォギー書き込み動作が終了しても、このワード線に接続された複数のメモリセルに対するファイン書き込み動作はすぐに実行することはできない。このワード線に接続された複数のメモリセルに対するファイン書き込み動作は、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了した後に実行可能となる。このため、QLCブロックにデータを書き込むために必要な時間は長くなる。また、QLCブロックのあるワード線に接続された複数のメモリセルにフォギー書き込み動作によって書き込まれたデータは、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了し、且つこのワード線に接続された複数のメモリセルに対するファイン書き込み動作が終了するまで、読み出すことができない。
【0040】
図4に示されているように共有フラッシュバッファ201がQLCバッファ301によって実現されているケースにおいては、QLCバッファ301内の各QLCブロック内の書き込みも、フォギー・ファイン書き込み動作によって実行されてもよい。
【0041】
図5に示されているように共有フラッシュバッファ201がSLCバッファ401によって実現されているケースにおいては、共有フラッシュバッファ201に適用される上述の第2の書き込みモードとしては、上述のSLCモードが使用される。SLCモードは、ブロックに含まれる複数のページ内の一つのページに書き込まれたデータの読み出しが、この一つのページへのデータの書き込みのみによって即座に可能になる書き込みモードである。
【0042】
ブロックに含まれる複数のページ内の一つのページに書き込まれたデータの読み出しが、この一つのページへのデータの書き込みのみによって即座に可能になる書き込みモードの他の例には、メモリセル当たりに2ビットデータを書き込むモード(MLC LMモード)もある。MLC LMモードが、共有フラッシュバッファ201に適用される上述の第2の書き込みモードとして使用されてもよい。
【0043】
NAND型フラッシュメモリ5は、図6に示すように、複数のNAND型フラッシュメモリダイ(NAND型フラッシュメモリダイ)を含んでいてもよい。個々のNAND型フラッシュメモリダイは独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作可能な単位として機能する。図6においては、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として構成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図6の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリダイを並列動作させることができる。
【0044】
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループの単位で実行されてもよい。ブロックグループはスーパーブロックとしても参照される。
【0045】
一つのブロックグループ、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#1~#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#1~#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
【0046】
図7には、32個の物理ブロック(ここでは、NAND型フラッシュメモリダイ#1内の物理ブロックBLK2、NAND型フラッシュメモリダイ#2内の物理ブロックBLK3、NAND型フラッシュメモリダイ#3内の物理ブロックBLK7、NAND型フラッシュメモリダイ#4内の物理ブロックBLK4、NAND型フラッシュメモリダイ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリダイ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0047】
図3で説明したQLC領域202内の各QLCブロックは、一つのスーパーブロック(QLCスーパーブロック)によって実現されてもよいし、一つの物理ブロック(QLC物理ブロック)によって実現されてもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【0048】
共有フラッシュバッファ201に含まれる各ブロックも、一つの物理ブロックによって構成されてもよいし、複数の物理ブロックの集合を含むスーパーブロックによって構成されてもよい。
【0049】
上述したように、複数の第1の記憶領域(例えば複数のQLCブロック)はホスト2によって書き込まれるデータ(ユーザデータ)を記憶するためのユーザデータ記憶領域として使用される。複数の第1の記憶領域は、これに限定されないが、例えばNVMe仕様に規定されたZoned Namespaces(ZNS)で使用される複数のゾーンとして使用されてもよい。この場合、SSD3をアクセスするためにホスト2によって使用される論理アドレス空間は複数の論理アドレス範囲に分割され、複数の第1の記憶領域には複数の論理アドレス範囲がそれぞれ割り当てられる。
【0050】
次に、図2のコントローラ4の構成について説明する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。論理アドレスは、SSD3の論理アドレス空間内の論理アドレスをアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。
【0051】
SSD3をアクセスするためにホスト2によって使用される論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル:L2Pテーブル)31を用いて実行される。コントローラ4は、L2Pテーブル31を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理してもよい。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータが書き込まれたNAND型フラッシュメモリ5内の最新の物理記憶位置を示す。L2Pテーブル31は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
【0052】
NAND型フラッシュメモリ5においては、ページへのデータ書き込みは1消去サイクル当たり1回のみ可能である。つまり、データが既に書き込まれているブロック内の領域に新たなデータを直接上書きすることができない。このため、既に書き込まれているデータを更新する場合には、コントローラ4はそのブロック(または別のブロック)内の未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、L2Pテーブル31を更新してこの論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
【0053】
ブロック管理には、バッドブロック(不良ブロック)の管理と、ウェアレベリングと、ガベージコレクション(GC)等が含まれる。ウェアレベリングは、ブロックそれぞれの書き換え回数(プログラム/イレーズサイクルの数)を均一化するための動作である。
【0054】
GCは、フリーブロックの個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。GCにおいては、コントローラ4は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、L2Pテーブル31から参照されているデータ(すなわち最新のデータとして論理アドレスに関連付けられているデータ)は有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。そして、コントローラ4は、L2Pテーブル31を更新して、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後にデータの書き込みに再利用することが可能となる。
【0055】
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、スタティックRAM(SRAM)16、ECCエンコード/デコード部17、等を含む。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、DMAC15、SRAM16、ECCエンコード/デコード部17は、バス10を介して相互接続される。
【0056】
ホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってもよい。あるいは、SSD3がEthernet(登録商標)を介してホスト2に接続される構成においては、ホストインタフェース11は、NVMe over Fabrics(NVMeOF)コントローラであってもよい。
【0057】
ホストインタフェース11は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、インアクティベートコマンド、アロケートコマンド、デアロケートコマンド、等が含まれる。
【0058】
ライトコマンドは書き込むべきユーザデータ(ライトデータ)をNAND型フラッシュメモリ5に書き込むコマンド(ライト要求)であり、例えば、ライトデータの論理アドレス(開始LBA)、このライトデータのサイズ、このライトデータが格納されているホスト2のライトバッファ内の位置を示すデータポインタ(バッファアドレス)、等を含む。
【0059】
SSD3はZoned Namespacesをサポートする第1タイプSSDとして実現されていてもよい。第1タイプSSDにおいては、ライト要求に含まれる論理アドレスの上位ビット部が、このライトコマンドに関連付けられたライトデータが書き込まれるべき書き込み先記憶領域(書き込み先QLCブロック)を指定する識別子として使用されてもよい。
【0060】
あるいは、SSD3はストリーム書き込みをサポートする第2タイプSSDとして実現されていてもよい。第2タイプSSDにおいては、ライト要求に含まれるストリームIDが、このライトコマンドに関連付けられたライトデータが書き込まれるべき書き込み先記憶領域(書き込み先QLCブロック)を指定する識別子として使用されてもよい。
【0061】
あるいは、SSD3は、コントローラ4が書き込み先記憶領域(書き込み先QLCブロック)と書き込み先記憶領域内の書き込み先位置(書き込み先ページ)とを決定し、決定した書き込み先記憶領域と決定した書き込み先位置とをホスト2に通知する第3タイプSSDとして実現されていてもよい。
【0062】
第3タイプSSDにおいては、コントローラ4は、quality-of-serviceドメインID(QoSドメインID)のようなIDを指定するブロック割り当て要求をホスト2から受信する。QoSドメインは、NAND型フラッシュメモリ5のリソース管理のための単位に相当する。コントローラ4は、このブロック割り当て要求に含まれるQoSドメインID用に使用されるべき書き込み先記憶領域を割り当てる。したがって、ホスト2は異なるQoSドメインIDを指定する複数のブロック割り当て要求を第3タイプSSDに送信することにより、複数のQoSドメインにそれぞれ対応する複数の書き込み先記憶領域の割り当てを第3タイプSSDに要求することができる。
【0063】
ホスト2から受信されるライト要求は、QoSドメインIDと、論理アドレスと、書き込むべきデータ(ライトデータ)のサイズ、等を含む。ライト要求に含まれるQoSドメインIDは、データが書き込まれるべき書き込み先記憶領域の識別子として使用される。コントローラ4は、ライト要求に含まれるQoSドメインIDに割り当てられている書き込み先記憶領域にライトデータをシーケンシャルに書き込む。そして、コントローラ4は、ライトデータが書き込まれた物理記憶位置を示す物理アドレス(ブロックアドレス、オフセット)をホスト2に通知する。第3タイプSSDにおいては、L2Pテーブル31は、コントローラ4ではなく、ホスト2によって管理される。
【0064】
リードコマンドはNAND型フラッシュメモリ5からデータを読み出すコマンド(リード要求)である。
【0065】
第1タイプSSDおよび第2タイプSSDの各々に発行されるリードコマンドは、読み出すべきデータの論理アドレス(開始LBA)、このデータのサイズ、このデータが転送されるべきホスト2のリードバッファ内の位置を示すデータポインタ(バッファアドレス)、等を含む。
【0066】
第3タイプSSDに発行されるリードコマンドは、読み出すべきデータが格納されている物理記憶位置を示す物理アドレス、このデータのサイズ、このデータが転送されるべきホスト2のリードバッファ内の位置を示すデータポインタ(バッファアドレス)、等を含む。
【0067】
アロケートコマンドは、複数の第1の記憶領域(例えば複数のQLCブロック)の一つを書き込み先記憶領域として割り当てるコマンド(要求)である。書き込み先記憶領域はデータの書き込みが可能な記憶領域を意味する。Zoned Namespacesで使用されるオープンゾーンコマンドは、このアロケートコマンドの一例である。
【0068】
インアクティベートコマンドは、書き込み先記憶領域の状態を、データの書き込みが可能な書き込み先記憶領域として割り当てられている第1の状態(オープン状態)から、書き込みが中断された第2の状態(クローズ状態)に遷移させるためのコマンド(要求)である。Zoned Namespacesで使用されるクローズゾーンコマンドは、このインアクティベートコマンドの一例である。
【0069】
デアロケートコマンドは、第1の記憶領域(例えばQLCブロック)を再書き込み可能な状態(例えばフリーQLCブロック)にするためのコマンド(要求)である。Zoned Namespacesで使用されるリセットゾーンコマンドは、デアロケートコマンドの一例である。
【0070】
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、DMAC15、SRAM16、ECCエンコード/デコード部17を制御するように構成されたプロセッサである。CPU12は、SSD3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはSRAM16上にロードされてもよい。CPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
【0071】
CPU12は、フラッシュマネジメント部21およびディスパッチャ22として機能することができる。なお、これらフラッシュマネジメント部21およびディスパッチャ22の各々の一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
【0072】
以下では、図3で説明したQLC領域202に含まれる複数のQLCブロックが上述の複数の第1の記憶領域として使用されるケースを想定する。フラッシュマネジメント部21は、複数の第1の記憶領域とQLC領域202に含まれる複数のQLCブロックとの間のマッピングを管理し、各第1の記憶領域に対してQLC領域202内のいずれか一つのQLCブロックを割り当てる。一つのQLCブロックは、一つの物理ブロックであってもよいし、複数の物理ブロックを含む一つのスーパーブロックであってもよい。
【0073】
フラッシュマネジメント部21は、データが書き込まれるべき第1の記憶領域(例えば、第1の書き込み先記憶領域、第2の書き込み先記憶領域)を各々が指定する一つ以上のライト要求それぞれをホスト2から受信する。
【0074】
第1の書き込み先記憶領域にデータを書き込むための一つ以上のライト要求それぞれをホスト2から受信したことに応じて、フラッシュマネジメント部21は、受信したライト要求の集合に関連付けられているライトデータをホスト2のライトバッファからコントローラ4の内部バッファ161に転送する。SRAM16の記憶領域の一部が内部バッファ161として使用されてもよいし、DRAM6の記憶領域の一部が内部バッファ161として使用されてもよい。
【0075】
そして、フラッシュマネジメント部21は、内部バッファ161に転送されたライトデータを、メモリセル当たりにmビットのデータを書き込む第1の書き込みモードで、第1の書き込み先記憶領域に書き込む。例えば、フラッシュマネジメント部21は、内部バッファ161に転送されたライトデータを、メモリセル当たりに4ビットのデータを書き込むフォギー・ファイン書き込み動作で、第1の書き込み先記憶領域に割り当てられているQLCブロックに書き込む。
【0076】
また、第2の書き込み先記憶領域にデータを書き込むための一つ以上のライト要求それぞれをホスト2から受信したことに応じて、フラッシュマネジメント部21は、受信したライト要求の集合に関連付けられているライトデータをホスト2のライトバッファからコントローラ4の内部バッファ161に転送する。
【0077】
そして、フラッシュマネジメント部21は、内部バッファ161に転送されたライトデータを、メモリセル当たりにmビットのデータを書き込む第1の書き込みモードで、第2の書き込み先記憶領域に書き込む。例えば、フラッシュマネジメント部21は、内部バッファ161に転送されたライトデータを、メモリセル当たりに4ビットのデータを書き込むフォギー・ファイン書き込み動作で、第2の書き込み先記憶領域に割り当てられているQLCブロックに書き込む。
さらに、インアクティベートコマンド(例えばゾーンクローズコマンド)をホスト2から受信する度、フラッシュマネジメント部21は、以下の処理を実行する。
【0078】
フラッシュマネジメント部21は、インアクティベートコマンドによって指定された第1の記憶領域に対する受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、内部バッファ161に未転送の残りのライトデータをホスト2のライトバッファから取得する。フラッシュマネジメント部21は、取得された残りのライトデータ(未転送ライトデータ)を、インアクティベートコマンドによって指定された第1の記憶領域ではなく、複数の第1の記憶領域によって共有される共有フラッシュバッファ201に書き込む。そして、フラッシュマネジメント部21は、インアクティベートコマンドによって指定された第1の記憶領域の状態を、書き込み先記憶領域として割り当てられている第1の状態(オープン状態)から、書き込みが中断された第2の状態(クローズ状態)に遷移させる。
【0079】
もしインアクティベートコマンドの受信の度に、残りのライトデータをインアクティベートコマンドによって指定された第1の記憶領域に書き込む処理が実行されたならば、クローズ状態に遷移されるべき個々の書き込み先記憶領域への書き込みが完了できない多くのライトデータによって、ホスト2のライトバッファが専有されてしまう場合がある。
【0080】
すなわち、各書き込み先記憶領域内の書き込みはメモリセル当たりにmビットのデータを書き込む第1の書き込みモードを用いて実行されるので、もしクローズ状態に遷移させるべき書き込み先記憶領域に残りのライトデータを書き込む処理が実行されたならば、この書き込み先記憶領域に最後に書き込まれる複数ページ分のデータの書き込みが完了できなくなる。例えば、メモリセル当たりに4ビットのデータを書き込むフォギー・ファイン書き込み動作で書き込み先記憶領域(ここではQLCブロック)に残りのライトデータが書き込まれたならば、QLCブロックに最後に書き込まれた4ページ分のデータの書き込みが完了できなくなる。なぜなら、インアクティベートコマンドはある第1の記憶領域(ここではQLCブロック)をクローズ状態に遷移させる要求であるので、インアクティベートコマンドの送信後しばらくの間は、ホスト2はこのQLCブロックに対するライト要求をSSD3に発行しないからである。この結果、このQLCブロックに最後に書き込まれた4ページ分のデータに対するファイン書き込み動作が開始できないので、この4ページ分のデータは、長い間、このQLCブロックから読み出し可能にならない。この結果、この4ページ分のデータが格納されているホスト2のライトバッファ内の領域を長い間解放することができなくなる。
【0081】
ページサイズが16KBである場合には、64KB(=4×16KB)のサイズのデータの書き込みが完了できなくなる。各NAND型フラッシュメモリダイが2プレーン構成を有するならば、128KB(=2×4×16KB)のサイズのデータの書き込みが完了できなくなる。
【0082】
よって、もしインアクティベートコマンドの受信の度に、残りのデータをインアクティベートコマンドによって指定された第1の記憶領域(QLCブロック)に書き込む処理が実行されたならば、書き込みが完了できない大量のデータをホスト2のライトバッファに維持することが必要とされる。例えば、合計1024個の第1の記憶領域(QLCブロック)がクローズ状態に遷移されるケースにおいては、128MB(=1024×128KB)のサイズを有するデータによってホスト2のライトバッファが専有されてしまう。
【0083】
本実施形態では、フラッシュマネジメント部21は、残りのライトデータを、クローズされるべき個々の第1の記憶領域(QLCブロック)ではなく、複数の第1の記憶領域によって共有される共有フラッシュバッファ201に書き込む。したがって、オープン状態の第1の記憶領域のうちのどの第1の記憶領域がクローズされる場合であっても、クローズされるべき個々の第1の記憶領域に対応する残りのライトデータは、共有フラッシュバッファ201に書き込まれる。よって、インアクティベートコマンドの受信の度に残りのライトデータをインアクティベートコマンドによって指定された第1の記憶領域に書き込むという構成に比し、書き込みが完了できないライトデータの量を低減でき、ホスト2のライトバッファ内の解放可能な領域を増やすことができる。
【0084】
例えば、n=m、且つ第1の書き込みモードおよび第2の書き込みモードが、ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが、この一つのページに後続する1以上のページへのデータの書き込み後に可能となる書き込みモードである、というケースを想定する。このケースは、共有フラッシュバッファ201がQLCバッファ301によって実現されており(n=m)、且つQLCバッファ301内の各ブロック(QLCブロック)への書き込みが、各第1の記憶領域(QLCブロック)への書き込みと同様に、例えば、フォギー・ファイン書き込み動作を使用して実行されるケースに相当する。
【0085】
この場合、QLCバッファ301に最後に書き込まれた128KBのサイズのデータは、後続の128KBのサイズのデータの書き込みの後に読み出し可能となる。
【0086】
しかしながら、クローズ対象のQLCブロックとは異なり、QLCバッファ301内の書き込みは中断されない。つまり、インアクティベートコマンドの受信の度にQLCバッファ301内の書き込みが実行される。したがって、たとえ合計1024個のQLCブロックがクローズ状態に遷移される場合であっても、これら1024個のQLCブロックに書き込まれるべきライトデータのうち、QLCバッファ301から読み出し可能ではないデータ部のサイズは128KBに維持することができる。よって、残りのライトデータをクローズされるべき個々の第1の記憶領域(QLCブロック)に書き込むケースに比べ、ホスト2のライトバッファに維持することが必要なライトデータの量を大幅に削減するこができる。
【0087】
さらに、共有フラッシュバッファ201がQLCバッファ301によって実現されているケースにおいては、共有フラッシュバッファ201に含まれる個々のブロックは記憶密度の高いQLCブロックとして使用されるので、共有フラッシュバッファ201に割り当てることが必要なブロックの総数を減らすことができ、これによってユーザデータ記憶領域用に使用可能なブロックの総数を増やすことが可能となる。
【0088】
次に、n<mであり、第1の書き込みモードが、第1の記憶領域に割り当てられたブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが、この一つのページに後続する1以上のページへのデータの書き込み後に可能となる書き込みモードであり、且つ第2の書き込みモードが、第2の記憶領域に割り当てられたブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが、この一つのページへのこのデータの書き込みのみによって可能になる書き込みモードである、というケースについて想定する。
【0089】
このケースは、例えば、共有フラッシュバッファ201がSLCバッファ401によって実現されており(n<m)、各第1の記憶領域(QLCブロック)への書き込みが、例えば、フォギー・ファイン書き込み動作を使用して実行され、且つSLCバッファ401内の各ブロック(SLCブロック)への書き込みがSLCモードを使用して実行される場合に相当する。あるいは、このケースは、各第1の記憶領域(QLCブロック)への書き込みが、例えば、フォギー・ファイン書き込み動作を使用して実行され、且つ共有フラッシュバッファ201内の各ブロック(MLCブロック)への書き込みがMLC LMモードを使用して実行される場合に相当する。
【0090】
共有フラッシュバッファ201がSLCバッファ401によって実現されているケースにおいては、SLCバッファ401内の各ブロック(SLCブロック)への書き込みはSLCモードを使用して実行される。このため、SLCバッファ401に書き込まれた全てのデータは、そのデータの書き込み直後に読み出し可能となる。したがって、クローズされるべき個々の第1の記憶領域(QLCブロック)に書き込まれるべき全てのデータをSLCバッファ401によって不揮発に記憶することが可能となるので、あるQLCブロックがクローズされる度に、このQLCブロック用にホスト2のライトバッファに確保されていた領域全体を解放することが可能となる。
【0091】
また、本実施形態では、インアクティベートコマンドが受信される前の期間においては、ライトデータはSLCバッファ401(またはQLCバッファ301)に書き込まれることなく、書き込み先QLCブロックにのみ書き込まれる。
【0092】
したがって、全てのライトデータをSLCバッファ401と書き込み先QLCブロックの両方に書き込むための処理を実行するケースや、全てのライトデータをまずSLCバッファ401のみに書き込み、SSD3のアイドル時などにSLCバッファ401から書き込み先QLCブロックにライトデータを書き戻すための処理を実行するケースに比べ、SLCバッファ401に書き込まれるデータの総量を削減することができる。
【0093】
この結果、SLCバッファ401として割り当てることが必要なブロック(SLCブロック)の数を削減することが可能となるので、これによってQLC領域202として割り当てることが可能なブロック(QLCブロック)の数を増やすことが可能となる。
【0094】
ディスパッチャ22は、ホスト2のサブミッションキューからコマンドそれぞれを取得する。コントローラ4においては、オープンされている複数のQLCブロック(複数の書き込み先QLCブロック)それぞれに対応する複数のコマンドキューが管理されている。ディスパッチャ22は、これら取得したコマンドをライトコマンド(ライト要求)群とライトコマンド以外の他のコマンド群とに分類する。
【0095】
さらに、ディスパッチャ22は、ライト要求を複数の書き込み先QLCブロックにそれぞれ対応する複数のグループに分類する。そして、ディスパッチャ22は、各グループに属するライト要求群を、このグループに対応するコマンドキューに格納する。
【0096】
例えば、ディスパッチャ22は、書き込み先QLCブロック#1にデータを書き込むための各ライト要求を書き込み先QLCブロック#1に対応するコマンドキューに格納し、書き込み先QLCブロック#2にデータを書き込むための各ライト要求を書き込み先QLCブロック#2に対応するコマンドキューに格納する。
【0097】
フラッシュマネジメント部21は、書き込み先QLCブロック#1にデータを書き込むためのライト要求の集合に関連付けられたライトデータの総サイズが各第1の記憶領域(QLCブロック)の最小書き込みサイズ(例えば64KB)に達した場合、最小書き込みサイズを有する、これらライト要求の集合に関連付けられたライトデータを、ホスト2のライトバッファから内部バッファ161に転送する。なお、各NAND型フラッシュメモリダイが2プレーンを含む場合には、最小書き込みサイズは128KBに設定されてもよい。
【0098】
また、フラッシュマネジメント部21は、書き込み先QLCブロック#2にデータを書き込むためのライト要求の集合に関連付けられたライトデータの総サイズが各第1の記憶領域(QLCブロック)の最小書き込みサイズに達した場合、最小書き込みサイズを有する、これらライト要求の集合に関連付けられたライトデータを、ホスト2のライトバッファから内部バッファ161に転送する。
【0099】
このように、ライトデータを最小書き込みサイズの単位でホスト2のライトバッファから内部バッファ161に転送することにより、NAND型フラッシュメモリ5に書き込むことが出来ない最小書き込みサイズ未満の多数のライトデータによって内部バッファ161が専有されてしまうことを抑制することが可能となり、これによって確保することが必要とされる内部バッファ161の容量を削減することが可能となる。
【0100】
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。
【0101】
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、L2Pテーブル31およびブロック管理テーブル32用の記憶領域として利用されてもよい。ブロック管理テーブル32は複数のQLCブロックそれぞれに対応する管理情報の格納に使用される。
【0102】
DMAC15は、CPU12の制御の下、ホスト2のライトバッファと内部バッファ161との間のデータ転送を実行する。ホスト2のライトバッファから内部バッファ161にライトデータを転送すべき場合には、CPU12は、ホスト2のライトバッファ内の位置を示す転送元アドレス、転送すべきライトデータのサイズ、内部バッファ161内の位置を示す転送先アドレスをDMAC15に対して指定する。
【0103】
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
【0104】
図8は、QLCブロックに一つのメモリセル当たりに4ビットを書き込むモードでデータを書き込む動作を説明するための図である。
【0105】
ここでは、4つのワード線を往復する場合のフォギー・ファイン書き込み動作を例示する。QLCブロック#1に対するフォギー・ファイン書き込み動作は以下のように実行される。
【0106】
(1)まず、4ページ(P0~P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に転送され、QLCブロック#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0~P3)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0107】
(2)次いで、次の4ページ(P4~P7)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4~P7)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0108】
(3)次いで、次の4ページ(P8~P11)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL2に接続された複数のメモリセルに、これら4ページ(P8~P11)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0109】
(4)次いで、次の4ページ(P12~P15)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL3に接続された複数のメモリセルに、これら4ページ(P12~P15)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0110】
(5)ワード線WL3に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL0に戻り、ワード線WL0に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL0に対するフォギー書き込み動作で使用された4ページ(P0~P3)分のライトデータと同じ4ページ(P0~P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLCブロック#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0~P3)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP0~P3に対するフォギー・ファイン書き込み動作が終了する。この結果、ページP0~P3に対応するデータをQLCブロック#1から正しく読み出すことが可能となる。
【0111】
(6)次いで、次の4ページ(P16~P19)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL4に接続された複数のメモリセルに、これら4ページ(P16~P19)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0112】
(7)ワード線WL4に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL1に戻り、ワード線WL1に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL1に対するフォギー書き込み動作で使用された4ページ(P4~P7)分のライトデータと同じ4ページ(P4~P7)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLCブロック#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4~P7)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP4~P7に対するフォギー・ファイン書き込み動作が終了する。この結果、ページP4~P7に対応するデータをQLCブロック#1から正しく読み出すことが可能となる。
【0113】
(8)次いで、次の4ページ(P20~P23)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLCブロック#1内のワード線WL5に接続された複数のメモリセルに、これら4ページ(P20~P23)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0114】
(9)ワード線WL5に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL2に戻り、ワード線WL2に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL2に対するフォギー書き込み動作で使用された4ページ(P8~P11)分のライトデータと同じ4ページ(P8~P11)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLCブロック#1内のワード線WL2に接続された複数のメモリセルに、これら4ページ(P8~P11)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP8~P11に対するフォギー・ファイン書き込み動作が終了する。この結果、ページP8~P11に対応するデータをQLCブロック#1から正しく読み出すことが可能となる。
【0115】
図9は、SSD3において実行される、QLCブロックと共有フラッシュバッファ201を制御する動作を説明するための図である。
【0116】
SSD3においては、コントローラ4は、書き込みが中断されたクローズ状態に書き込み先QLCブロック#1(または書き込み先QLCブロック#2)を遷移させるためのインアクティベートコマンド(インアクティベート要求)をホスト2から受信するまでは、ホスト2のライトバッファ51から受信される全てのライトデータは、メモリセル当たりにm(>1)ビットのデータ(ここでは4ビットのデータ)を書き込む書き込みモード(例えばフォギー・ファイン書き込み動作)で、内部バッファ161を介して書き込み先QLCブロック#1(または書き込み先QLCブロック#2)にのみ書き込み、共有フラッシュバッファ201には書き込まない。
【0117】
書き込み先QLCブロック#1および書き込み先QLCブロック#2の各々に対するデータの書き込みがフォギー・ファイン書き込み動作によって実行されるケースにおいては、コントローラ4は、あるワード線に接続された複数のメモリセルにライトデータを書き込むためのフォギー書き込み動作およびファイン書き込み動作の双方が終了した場合、このライトデータに対応する各ライト要求の完了(Completion)を示す通知をホスト2に送信する。つまり、書き込み先QLCブロック#1(または書き込み先QLCブロック#2)に書き込まれたデータが書き込み先QLCブロック#1(または書き込み先QLCブロック#2)から読み出し可能になると、コントローラ4は、このデータに対応するライト要求の完了(Completion)を示す通知をホスト2に送信する。
【0118】
書き込みが中断されたクローズ状態に書き込み先QLCブロック#1(または書き込み先QLCブロック#2)を遷移させるためのインアクティベートコマンド(インアクティベート要求)をホスト2から受信すると、コントローラ4は、内部バッファ161に未転送のライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。
【0119】
例えば、書き込み先QLCブロック#1に対するインアクティベートコマンド(インアクティベート要求)がホスト2から受信された場合、コントローラ4は、書き込み先QLCブロック#1にデータを書き込むための受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、内部バッファ161に未転送の残りのライトデータを、ホスト2のライトバッファ51から内部バッファ161に転送する。例えば、書き込み先QLCブロック#1にデータを書き込むための受信済みのライト要求がライト要求W1~ライト要求W5であり、内部バッファ161にライトデータが転送されていないライト要求がライト要求W4とライト要求W5である場合には、ライト要求W4に関連付けられたライトデータとライト要求W5に関連付けられたライトデータとが残りのライトデータとしてホスト2のライトバッファ51から内部バッファ161に転送される。
【0120】
そして、コントローラ4は、内部バッファ161に転送された残りのライトデータを、書き込み先QLCブロック#1には書き込まず、メモリセル当たりにn(m≧n≧1)ビットのデータを書き込む書き込みモードで共有フラッシュバッファ201のみに書き込む。残りのライトデータを共有フラッシュバッファ201に書き込むと、コントローラ4は、書き込み先QLCブロック#1の状態をオープン状態からクローズ状態に遷移させる。さらに、コントローラ4は、残りのライトデータに対応するライト要求それぞれの完了を示す応答と、インアクティベート要求の完了を示す応答とをホスト2に送信する。
【0121】
各ライト要求の完了を示す応答の受信に応じて、ホスト2は、各ライト要求に対応するライトデータが格納されているライトバッファ51内の領域を解放することが可能となり、例えば、この領域を新たにオープンされる書き込み先QLCブロック用の領域として再利用することが可能となる。
【0122】
クローズ状態であるQLCブロック#1にデータを再び書くためのライト要求をホスト2から受信すると、コントローラ4は、QLCブロック#1を書き込み先QLCブロックとして再びオープンする。そして、コントローラ4は、共有フラッシュバッファ201に格納されている上述の残りのライトデータを共有フラッシュバッファ201から読み出し、内部バッファ161に転送する。共有フラッシュバッファ201から内部バッファ161に転送された残りのライトデータは、このライトデータが書き込み先QLCブロック#1に書き込み可能となったタイミングで書き込み先QLCブロック#1に書き込まれる。
【0123】
図10は、共有フラッシュバッファ201として使用されるQLCバッファ301を制御する動作を説明するための図である。
【0124】
SSD3においては、コントローラ4は、書き込みが中断されたクローズ状態に書き込み先QLCブロック#1(または書き込み先QLCブロック#2)を遷移させるためのインアクティベートコマンド(インアクティベート要求)をホスト2から受信するまでは、ホスト2のライトバッファ51から受信される全てのライトデータを、メモリセル当たりにm(>1)ビットのデータ(ここでは4ビットのデータ)を書き込む書き込みモード(例えばフォギー・ファイン書き込み動作)で、内部バッファ161を介して書き込み先QLCブロック#1(または書き込み先QLCブロック#2)にのみ書き込み、QLCバッファ301には書き込まない。
【0125】
書き込み先QLCブロック#1および書き込み先QLCブロック#2の各々に対するデータの書き込みがフォギー・ファイン書き込み動作によって実行されるケースにおいては、コントローラ4は、あるワード線に接続された複数のメモリセルにライトデータを書き込むためのフォギー書き込み動作およびファイン書き込み動作の双方が終了すると、このライトデータに対応する各ライト要求の完了(Completion)を示す通知をホスト2に送信する。つまり、書き込み先QLCブロック#1(または書き込み先QLCブロック#2)に書き込まれたデータが書き込み先QLCブロック#1(または書き込み先QLCブロック#2)から読み出し可能になると、コントローラ4は、このデータに対応するライト要求の完了(Completion)を示す通知をホスト2に送信する。
【0126】
書き込みが中断されたクローズ状態に書き込み先QLCブロック#1(または書き込み先QLCブロック#2)を遷移させるためのインアクティベートコマンド(インアクティベート要求)をホスト2から受信すると、コントローラ4は、内部バッファ161に未転送のライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。
【0127】
例えば、書き込み先QLCブロック#1に対するインアクティベートコマンド(インアクティベート要求)をホスト2から受信した場合、コントローラ4は、書き込み先QLCブロック#1にデータを書き込むための受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、内部バッファ161に未転送の残りのライトデータを、ホスト2のライトバッファ51から内部バッファ161に転送する。そして、コントローラ4は、内部バッファ161に転送された残りのライトデータを、書き込み先QLCブロック#1には書き込まず、メモリセル当たりにn(=m)ビットのデータを書き込む書き込みモード(例えばフォギー・ファイン書き込み動作)でQLCバッファ301のみに書き込む。残りのライトデータがQLCバッファ301に書き込まれると、コントローラ4は、書き込み先QLCブロック#1の状態をオープン状態からクローズ状態に遷移させる。さらに、QLCバッファ301に書き込まれたデータがQLCバッファ301から読み出し可能になると、コントローラ4は、このデータに対応するライト要求の完了(Completion)を示す通知をホスト2に送信する。
【0128】
各ライト要求の完了を示す応答の受信に応じて、ホスト2は、各ライト要求に対応するライトデータが格納されているライトバッファ51内の領域を解放することが可能となり、例えば、この領域を新たにオープンされる書き込み先QLCブロック用の領域として再利用することが可能となる。
【0129】
クローズ状態であるQLCブロック#1にデータを再び書くためのライト要求をホスト2から受信すると、コントローラ4は、QLCブロック#1を書き込み先QLCブロックとして再びオープンする。そして、コントローラ4は、QLCバッファ301に格納されている上述の残りのライトデータをQLCバッファ301から読み出し、内部バッファ161に転送する。QLCバッファ301から内部バッファ161に転送された残りのライトデータは、このライトデータが書き込み先QLCブロック#1に書き込み可能となったタイミングで書き込み先QLCブロック#1に書き込まれる。
【0130】
図11は、共有フラッシュバッファ201として使用されるSLCバッファ401を制御する動作を説明するための図である。
【0131】
SSD3においては、コントローラ4は、書き込みが中断されたクローズ状態に書き込み先QLCブロック#1(または書き込み先QLCブロック#2)を遷移させるためのインアクティベートコマンド(インアクティベート要求)をホスト2から受信するまでは、ホスト2のライトバッファ51から受信される全てのライトデータを、メモリセル当たりにm(>1)ビットのデータ(ここでは4ビットのデータ)を書き込む書き込みモード(例えばフォギー・ファイン書き込み動作)で、内部バッファ161を介して書き込み先QLCブロック#1(または書き込み先QLCブロック#2)にのみ書き込み、SLCバッファ401には書き込まない。
【0132】
書き込み先QLCブロック#1および書き込み先QLCブロック#2の各々に対するデータの書き込みがフォギー・ファイン書き込み動作によって実行されるケースにおいては、コントローラ4は、あるワード線に接続された複数のメモリセルにライトデータを書き込むためのフォギー書き込み動作およびファイン書き込み動作の双方が終了すると、このライトデータに対応する各ライト要求の完了(Completion)を示す通知をホスト2に送信する。つまり、書き込み先QLCブロック#1(または書き込み先QLCブロック#2)に書き込まれたデータが書き込み先QLCブロック#1(または書き込み先QLCブロック#2)から読み出し可能になると、コントローラ4は、このデータに対応するライト要求の完了(Completion)を示す通知をホスト2に送信する。
【0133】
書き込みが中断されたクローズ状態に書き込み先QLCブロック#1(または書き込み先QLCブロック#2)を遷移させるためのインアクティベートコマンド(インアクティベート要求)をホスト2から受信すると、コントローラ4は、内部バッファ161に未転送のライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。
【0134】
例えば、書き込み先QLCブロック#1に対するインアクティベートコマンド(インアクティベート要求)がホスト2から受信された場合、コントローラ4は、書き込み先QLCブロック#1にデータを書き込むための受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、内部バッファ161に未転送の残りのライトデータを、ホスト2のライトバッファ51から内部バッファ161に転送する。そして、コントローラ4は、内部バッファ161に転送された残りのライトデータを、書き込み先QLCブロック#1には書き込まず、メモリセル当たりにnビットのデータ(ここでは1ビットのデータ)を書き込む書き込みモード(SLCモード)でSLCバッファ401のみに書き込む。
【0135】
SLCモードは、ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが、この一つのページへのこのデータの書き込みのみによって可能になる書き込みモードの一例である。
【0136】
残りのライトデータがSLCバッファ401に書き込まれると、コントローラ4は、書き込み先QLCブロック#1の状態をオープン状態からクローズ状態に遷移させ、さらに、このライトデータに対応するライト要求の完了(Completion)を示す通知をホスト2に送信する。
【0137】
各ライト要求の完了を示す応答の受信に応じて、ホスト2は、各ライト要求に対応するライトデータが格納されているライトバッファ51内の領域を解放することが可能となり、例えば、この領域を新たにオープンされる書き込み先QLCブロック用の領域として再利用することが可能となる。
【0138】
クローズ状態であるQLCブロック#1にデータを再び書くためのライト要求をホスト2から受信すると、コントローラ4は、QLCブロック#1を書き込み先QLCブロックとして再びオープンする。そして、コントローラ4は、SLCバッファ401に格納されている上述の残りのライトデータをSLCバッファ401から読み出し、内部バッファ161に転送する。SLCバッファ401から内部バッファ161に転送された残りのライトデータは、このライトデータが書き込み先QLCブロック#1に書き込み可能となったタイミングで書き込み先QLCブロック#1に書き込まれる。
【0139】
なお、SLCバッファ401の代わりに、MLCバッファが使用されてもよい。この場合、コントローラ4は、残りのデータを、メモリセル当たりにnビットのデータ(ここでは2ビットのデータ)を書き込む書き込みモード(MLC LMモード)でMLCバッファのみに書き込む。MLC LMモードも、ブロックの複数のページ内の一つのページに書き込まれたデータの読み出しが、この一つのページへのこのデータの書き込みのみによって可能になる書き込みモードの一例である。
【0140】
図12は、スタティックSLCバッファとダイナミックSLCバッファとを使用するハイブリッドSLCバッファを説明するための図である。
スタティックSLCバッファは、NAND型フラッシュメモリ5に含まれる複数のブロックから割り当てられた固定数のブロックそれぞれをSLCブロックとして使用する不揮発性バッファである。
【0141】
SLCバッファ401をスタティックSLCバッファのみによって構成するケースにおいては、SLCバッファ401として使用可能なブロックの数は固定である。ブロック内の書き込みがSLCモードを使用して実行されるブロック(SLCブロック)の最大プログラム/イレーズサイクル数は、ブロック内の書き込みがメモリセル当たりに4ビットを書き込む書き込みモードを使用して実行されるブロック(QLCブロック)の最大プログラム/イレーズサイクル数の10倍程度である。しかしながら、SLCブロックの容量はQLCブロックの容量の1/4である。
【0142】
このため、一般的には、スタティックSLCバッファのみ使用する構成においては、比較的多くのブロックをスタティックSLCバッファ用に固定的に割り当てておくことが必要とされる。したがって、図12の(A)に示されているように、スタティックSLCバッファのみ使用する構成においては、QLC領域202の容量(ユーザ容量)は最小化される傾向となる。
【0143】
ダイナミックSLCバッファは、QLC領域202用のブロック群からSLCバッファ401用のブロックを動的に割り当てることによって実現される不揮発性バッファである。図12の(B)に示されているように、ダイナミックSLCバッファを使用する構成においては、QLC領域202の容量(ユーザ容量)を増やすことが可能となる。
【0144】
しかし、SLCバッファ401用に動的に割り当てられたブロックは専用のSLCブロックではなく、そのブロック内の書き込みがメモリセル当たりに4ビットを書き込む書き込みモードで実行されていたブロック、つまりQLCブロックとして使用されていたブロックである。このため、SLCバッファ401用に動的に割り当てられたブロックの最大プログラム/イレーズサイクル数は、SLCブロックの最大プログラム/イレーズサイクル数ではなく、QLCブロックの最大プログラム/イレーズサイクル数によって規定される必要がある。したがって、ダイナミックSLCバッファとして使用されるブロックの寿命は、スタティックSLCバッファとして使用される専用のSLCブロックよりも短くなる傾向となる。
【0145】
図12の(C)は、本実施形態のハイブリッドSLCバッファを示している。
【0146】
コントローラ4は、NAND型フラッシュメモリ5内の複数のブロックのうちの複数の第1のブロックの集合をQLC領域202(つまりQLC領域202内の複数のQLCブロック)用に割り当て、さらに、NAND型フラッシュメモリ5内の複数のブロックのうちの複数の第2のブロックの集合をSLCバッファ401用に割り当てる。第2のブロックの集合はスタティックSLCバッファ401Aとして使用される。第2のブロックの数は、第1のブロックの数よりも少ない。
【0147】
コントローラ4は、まず、SLCバッファ401としてスタティックSLCバッファ401Aのみを使用する。スタティックSLCバッファ401Aの各ブロックは専用のSLCブロックとして使用される。つまり、コントローラ4は、スタティックSLCバッファ401A内の各ブロックにデータをSLCモードで書き込む。スタティックSLCバッファ401A内の各ブロックの最大プログラム/イレーズサイクル数は、SLCブロックの最大プログラム/イレーズサイクル数に等しい。
【0148】
コントローラ4は、上述のインアクティベート要求をホスト2から受信する度に、上述の残りのライトデータをスタティックSLCバッファ401AにSLCモードで書き込む。
【0149】
時間の経過に伴ってスタティックSLCバッファ401Aに書き込まれたデータの総量が増加する。スタティックSLCバッファ401Aに書き込まれたデータの総量が増加するに連れて、スタティックSLCバッファ401Aの各ブロックのプログラム/イレーズサイクル数は増加し、これによってスタティックSLCバッファ401Aの各ブロックの消耗度が増加する。
【0150】
コントローラ4は、スタティックSLCバッファ401Aの各ブロックの消耗度(例えば、プログラム/イレーズサイクル数、ビット誤り率、プログラム/イレーズエラー)に基づいて、スタティックSLCバッファ401内の不良ブロックを検出する。例えば、スタティックSLCバッファ401Aの各ブロックのプログラム/イレーズサイクル数に基づいて不良ブロックを検出するケースにおいては、コントローラ4は、スタティックSLCバッファ401Aの各ブロックのプログラム/イレーズサイクル数をSLCブロックの最大プログラム/イレーズサイクル数と比較する。プログラム/イレーズサイクル数がSLCブロックの最大プログラム/イレーズサイクル数に達したブロックは、コントローラ4によって不良ブロックとして扱われる。不良ブロックはもはや正常に利用できないブロックである。
【0151】
不良ブロックの増加に伴い、スタティックSLCバッファ401A内の利用可能な残りブロックの数が減少する。
【0152】
スタティックSLCバッファ401A内の利用可能な残りブロックの数が閾値Th1よりも少なくなると、コントローラ4は、スタティックSLCバッファ401Aが使い果たされたと判定する(wear out)。
【0153】
この場合、コントローラ4は、QLC領域202用に割り当てられたブロックの集合に含まれる一つのブロック(フリーQLCブロック)をSLCバッファ401用の書き込み先ブロックとして割り当てる。コントローラ4は、上述のインアクティベート要求をホスト2から受信する度に、上述の残りのライトデータを、QLC領域202からSLCバッファ401用の書き込み先ブロックとして割り当てられたブロックにSLCモードで書き込む。このブロック全体がデータで満たされると、コントローラ4は、QLC領域202用に割り当てられたブロックの集合に含まれる他の一つのブロック(フリーQLCブロック)をSLCバッファ401用の書き込み先ブロックとして割り当てる。
【0154】
QLC領域202用のブロック群からSLCバッファ401用の書き込み先ブロックとして割り当てられた各ブロックが、ダイナミックSLCバッファ401Bとして使用される。
【0155】
このように、スタティックSLCバッファ401Aが使い果たされるまでは、コントローラ4は、スタティックSLCバッファ401Aを使用して上述の残りのライトデータの書き込みを行う。
【0156】
スタティックSLCバッファ401Aが使い果たされると、コントローラ4は、QLC領域202用のブロック群の一つのブロックをSLCバッファ401にダイナミックSLCバッファ401Bとして割り当て、ダイナミックSLCバッファ401Bを使用して上述の残りのライトデータの書き込みを行う。
【0157】
スタティックSLCバッファ401Aに含まれる各ブロックの最大プログラム/イレーズサイクル数はSLCブロックの最大プログラム/イレーズサイクル数よって規定できるので、SSD3の寿命を、図12の(B)のようにダイナミックSLCバッファのみを使用する構成よりも延ばすことが可能となる。また、ハイブリッドSLCバッファを使用することにより、ユーザ容量を、図12の(A)のようにスタティックSLCバッファのみを使用する構成よりも増やすことが可能となる。
【0158】
図13は、ハイブリッドSLCバッファを制御する動作を説明するための図である。
【0159】
スタティックSLCバッファ401Aには固定数のブロックが予め割り当てられる。ユーザ容量に対応するブロックの数をN、QLC領域202に割り当てられるブロックの数をMとすると、MはNよりもある程度大きな値に設定される。QLC領域202からダイナミックSLCバッファ401Bとして割り当て可能な最大ブロック数は、M-N個未満である。
【0160】
上述したように、クローズ状態のQLCブロックが再オープンされた後、ダイナミックSLCバッファ401Bに格納されているデータは、この再オープンされたQLCブロックに書き込まれる。したがって、再オープンされたQLCブロックにデータが書き込まれることによって無効データのみとなったダイナミックSLCバッファ401B内のブロックはフリーブロックとして解放される。このフリーブロックはQLC領域202に返却される。返却されたブロックはQLCブロックとして再び使用することも可能であるし、ダイナミックSLCバッファ401Bに再び割り当てられることも可能である。
【0161】
図14は、SSD3において実行される書き込み動作を示すブロック図である。
【0162】
SSD3のコントローラ4においては、オープンされている複数の書き込み先QLCブロックそれぞれに対応する複数のコマンドキューが管理されている。コマンドキュー#1は、書き込み先QLCブロック#1にデータを書き込むための一つ以上のライト要求それぞれを格納するために使用される。コマンドキュー#2は、書き込み先QLCブロック#2にデータを書き込むための一つ以上のライト要求それぞれを格納するために使用される。コマンドキュー#3は、書き込み先QLCブロック#3にデータを書き込むための一つ以上のライト要求それぞれを格納するために使用される。コマンドキュー#pは、書き込み先QLCブロック#pにデータを書き込むためのライト要求それぞれを格納するために使用される。
【0163】
ホスト2のサブミッションキュー(SQ)に格納されているコマンドそれぞれは、ディスパッチャ22によってフェッチされる。そして、書き込み先QLCブロック#1にデータを書き込むための各ライト要求はディスパッチャ22によってコマンドキュー#1に格納され、書き込み先QLCブロック#2にデータを書き込むための各ライト要求はディスパッチャ22によってコマンドキュー#2に格納され、書き込み先QLCブロック#3にデータを書き込むための各ライト要求はディスパッチャ22によってコマンドキュー#3に格納され、書き込み先QLCブロック#pにデータを書き込むための各ライト要求はディスパッチャ22によってコマンドキュー#pに格納される。
【0164】
コマンドキューの各々について、格納されているライト要求の集合に関連付けられているライトデータの総サイズがフラッシュマネジメント部21によってチェックされる。そして、あるコマンドキューに格納されているライト要求の集合に関連付けられているライトデータの総サイズが閾値、例えば、各QLCブロックの最小書き込みサイズに達すると、フラッシュマネジメント部21の制御の下、最小書き込みサイズを有するライトデータが、DMAC15によってホスト2のライトバッファ51から内部バッファ161に転送される。
【0165】
これにより、書き込み先QLCブロックへの書き込みを開始できない、最小書き込みサイズ未満の複数のライトデータで内部バッファ161が専有されてしまうことを抑制することができるので、必要な内部バッファ161の容量を削減することが出来る。
【0166】
また、ホスト2のライトバッファ51から内部バッファ161へのライトデータの転送は、ライト要求がフェッチされた順序ではなく、各書き込み先QLCブロックにライトデータを書き込む順序と同じ順序で実行される。例えば、書き込み先QLCブロック#1のページ#0~ページ#3に対応する4ページ分のライトデータをホスト2のライトバッファ51から内部バッファ161に転送するべき場合、フラッシュマネジメント部21は、ページ#0~ページ#3にそれぞれ書き込まれるべき4つの16KBライトデータを、ページ#0に書き込むべき16KBライトデータ、ページ#1に書き込むべき16KBライトデータ、ページ#2に書き込むべき16KBライトデータ、ページ#3に書き込むべき16KBライトデータ、という順序で、ページ単位でホスト2のライトバッファ51から内部バッファ161に転送する。
【0167】
なお、ホスト2による書き込み速度が遅い特定のQLCブロックに関しては、フラッシュマネジメント部21は、各QLCブロックの容量を上述の閾値として使用し得る。この場合、フラッシュマネジメント部21は、この特定のQLCブロックにデータを書き込むためのライト要求の集合に関連付けられているライトデータの総サイズが各QLCブロックの容量に達したか否かを判定する。この特定のQLCブロックにデータを書き込むためのライト要求の集合に関連付けられているライトデータの総サイズが各QLCブロックの容量に達した場合、フラッシュマネジメント部21は、DMAC15を使用して、QLCブロックの容量に対応するサイズを有するライトデータを、ホスト2のライトバッファ51から内部バッファ161に例えばページ単位で転送する。そして、フラッシュマネジメント部21は、この特定のQLCブロックの消去動作を行い、QLCブロックの容量に対応するサイズを有するライトデータを、この特定のQLCブロックに書き込む。
【0168】
図15は、SSD3において実行される書き込み動作のシーケンスと読み出し動作のシーケンスを示すブロック図である。
【0169】
図15では、SSD3がNVMe仕様のZoned Namespacesをサポートする上述の第1タイプSSDとして実現されている場合が例示されている。また、共有フラッシュバッファ201としてSLCバッファ401が使用されている。
【0170】
SSD3が第1タイプSSDとして実現されている場合、SSD3はゾーンド・デバイス(zoned device)として動作する。ゾーンド・デバイスは、SSD3をアクセスするためにホスト2によって使用される論理アドレス空間を分割することによって得られる複数の論理アドレス範囲(複数のLBA範囲)を使用してアクセスされるデバイスである。
【0171】
SSD3のコントローラ4は、複数のLBA範囲がそれぞれに割り当てられた複数のゾーンを管理する。ゾーンはSSD3のNAND型フラッシュメモリ5をアクセスするための単位である。コントローラ4は、QLC領域202に含まれる複数のQLCブロック(複数の物理ブロックまたは複数のQLCスーパーブロック)と複数のゾーンとの間のマッピングを管理するように構成されており、任意のQLCブロックを一つのゾーンとして割り当てることができる。
【0172】
ある一つのゾーンに対応する一つのQLCブロックは、このゾーンに割り当てられたLBA範囲に含まれる連続する論理アドレスを使用してアクセスされる。一つのゾーン内の書き込みは、基本的には、シーケンシャルに実行される。
【0173】
ホスト2からSSD3に発行されるライトコマンド(ライト要求)は、例えば、ライトデータが書き込まれるべき最初のセクタを示す論理アドレス(開始LBA)、このライトデータのデータサイズ、このライトデータが格納されているホスト2のメモリ(ライトバッファ)内の位置を示すデータポインタ(バッファドレス)、等を含む。ホスト2のメモリは以下では単にホストメモリとも称する。
【0174】
ライト要求に含まれる開始LBAの上位ビット部は、このライト要求に関連付けられたライトデータが書き込まれるべきゾーンを指定する識別子として使用される。また、ライト要求に含まれる開始LBAの下位ビット部は、ライトデータが書き込まれるべきこのゾーン内のオフセットを指定する。したがって、ライト要求によって指定される開始LBAは、複数のゾーンのうちの一つのゾーンと、ライトデータが書き込まれるべきこのゾーン内のオフセットとを示す。
【0175】
ライトデータのデータサイズは、例えば、セクタ(論理ブロック)の数によって指定されもよい。一つのセクタは、ホスト2によって指定可能なライトデータの最小データサイズに対応する。つまり、ライトデータのデータサイズはセクタの倍数によって表される。セクタは「論理ブロック」とも称される。
【0176】
ホスト2からSSD3に発行されるリードコマンド(リード要求)は、読み出し対象データが読み出されるべき最初のセクタを示す論理アドレス(開始LBA)、読み出し対象データのデータサイズ、この読み出し対象データが転送されるべきホストメモリ(リードバッファ)内の位置を示すデータポインタ、等を含む。
【0177】
リード要求に含まれる開始LBAの上位ビット部は、読み出し対象データが格納されているゾーンを指定する識別子として使用される。また、リード要求に含まれる開始LBAの下位ビット部は、読み出し対象データが格納されているゾーン内のオフセットを指定する。したがって、リードコマンドによって指定される開始LBAは、ゾーンと、読み出し対象データが格納されているこのゾーン内のオフセットとを示す。
【0178】
ホスト2からSSD3に発行されるゾーン管理コマンドには、オープンゾーンコマンド(オープン要求)、クローズゾーンコマンド(クローズ要求)、リセットゾーンコマンド(リセット要求)、等が含まれる。
【0179】
オープンゾーンコマンド(オープン要求)は、上述のアロケートコマンドとして使用される。オープン要求は、各々がエンプティ状態の複数のゾーンの一つを、データの書き込みに利用可能なオープン状態に遷移させるためのコマンド(要求)である。オープン要求は、オープン状態に遷移させるべきゾーンを指定する論理アドレスを含む。オープン要求によって指定される論理アドレスの上位ビット部が、オープン状態に遷移させるべきゾーンを指定する識別子として使用される。
【0180】
クローズゾーンコマンド(クローズ要求)は、上述のインアクティベートコマンドとして使用される。クローズ要求は、ゾーンの状態を、オープン状態から、書き込みが中断されたクローズ状態に遷移させるためのコマンド(要求)である。クローズ要求は、クローズ状態に遷移させるべきゾーンを指定する論理アドレスを含む。クローズ要求によって指定される論理アドレスの上位ビット部が、クローズ状態に遷移させるべきゾーンを指定する識別子として使用される。
【0181】
リセットゾーンコマンド(リセット要求)は、上述のデアロケートコマンドとして使用される、リセット要求は、書き換えが実行されるべきゾーンをリセットしてエンプティ状態に遷移させるため要求である。例えば、リセット要求は、データで満たされているフル状態のゾーンを、有効データを含まないエンプティ状態に遷移させるために使用される。有効データは、論理アドレスに関連付けられているデータを意味する。リセット要求は、エンプティ状態に遷移させるべきゾーンを指定する論理アドレスを含む。リセット要求によって指定される論理アドレスの上位ビット部が、エンプティ状態に遷移させるべきゾーンを指定する識別子として使用される。
【0182】
ゾーンとして使用される個々のQLCブロックの状態は、オープン状態(オープンゾーン)、クローズ状態(クローズゾーン)、フル状態(フルゾーン)、エンプティ状態(エンプティゾーン)に大別される。
【0183】
オープン状態のQLCブロックはデータの書き込みが可能な書き込み先ブロックとして割り当てられているブロックであり、オープン状態のゾーンとして使用される。フラッシュマネジメント部21は、オープン状態の各QLCブロックを、オープンゾーンリスト101を使用して管理する。
【0184】
クローズ状態のQLCブロックは書き込みが中断されたQLCブロックであり、クローズ状態のゾーンに相当する。書き込みが中断されたQLCブロックは、このQLCブロックの一部分にのみデータが書き込まれているQLCブロック、つまり部分的に書き込まれたQLCブロックである。クローズ状態のQLCブロックにおいては、データの書き込みに利用可能な幾つかのページが残っている。フラッシュマネジメント部21は、クローズ状態の各QLCブロックを、クローズゾーンリスト102を使用して管理する。
【0185】
フル状態のQLCブロックはそのブロック全体がデータで満たされているブロックであり、フル状態のゾーンに相当する。フラッシュマネジメント部21は、フル状態の各QLCゾーンを、フルゾーンリスト103を使用して管理する。
【0186】
エンプティ状態のQLCブロックはフリーQLCブロックであり、リセットされたゾーンに相当する。フラッシュマネジメント部21は、エンプティ状態の各QLCブロックを、エンプティゾーンリスト104を使用して管理する。
【0187】
ホスト2はオープン要求(open request)をSSD3に送信する処理を繰り返し実行することにより、複数のQLCブロック(複数のゾーン)をオープン状態にすることできる。
【0188】
フラッシュマネジメント部21がオープン状態のQLCブロック#1(ゾーン#1)にデータを書き込むためのライト要求(write request)それぞれをホスト2から受信した場合、フラッシュマネジメント部21は、DMAC15を使用して、各QLCブロックの最小書き込みサイズ分のライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。そして、フラッシュマネジメント部21は、内部バッファ161に転送されたライトデータを、SLCバッファ401に書き込まずに、QLCブロック#1(ゾーン#1)のみに書き込む。
【0189】
また、 フラッシュマネジメント部21がオープン状態のQLCブロック#2(ゾーン#2)にデータを書き込むためのライト要求(write request)それぞれをホスト2から受信した場合、フラッシュマネジメント部21は、DMAC15を使用して、各QLCブロックの最小書き込みサイズ分のライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。そして、フラッシュマネジメント部21は、内部バッファ161に転送されたライトデータを、SLCバッファ401に書き込まずに、QLCブロック#2(ゾーン#2)のみに書き込む。
【0190】
あるオープン状態のQLCブロック(ゾーン)に対するデータの書き込みをしばらくの間実行しない場合、ホスト2は、このQLCブロック(ゾーン)用に確保されているホスト2のライトバッファ51内の領域を解放できるようにするために、このQLCブロック(ゾーン)をクローズ状態に遷移させるためのクローズ要求(close request)をSSD3に送信する。
【0191】
QLCブロック#1(ゾーン#1)を示す論理アドレスを指定するクローズ要求(close request)をホスト2から受信した時、QLCブロック#1(ゾーン#1)に対応する上述のコマンドキュー#1にはQLCブロック#1(ゾーン#1)への書き込みがまだ開始できないライト要求が格納されている可能性がある。QLCブロック#1(ゾーン#1)の次の書き込み位置から書き込まれるべき4ページ分のライトデータに対応するライトコマンドの集合がコマンドキュー#1に蓄積されるまでは、これらライトコマンドそれぞれに関連付けられたライトデータはホスト2のライトバッファ51から内部バッファ161に転送されない場合があるためである。
【0192】
フラッシュマネジメント部21は、QLCブロック#1(ゾーン#1)に対する受信済みの複数のライトコマンドに関連付けられた複数のライトデータのうち内部バッファ161に未転送の残りのライトデータを、DMAC15を使用して、ホスト2のライトバッファ51から内部バッファ161に転送する。フラッシュマネジメント部21は、内部バッファ161に転送された残りのライトデータを、QLCブロック#1(ゾーン#1)ではなく、SLCバッファ401に書き込む。SLCバッファ401に書き込まれた全てのライトデータは、そのライトデータの書き込み直後に読み出し可能となる。したがって、クローズされるべきQLCブロック#1(ゾーン#1)に書き込まれるべき全てのデータをSLCバッファ401によって不揮発に記憶することが可能となるので、QLCブロック#1(ゾーン#1)用にホスト2のライトバッファ51に確保されていた領域全体を解放することが可能となる。
【0193】
なお、QLCブロック#1(ゾーン#1)への書き込みが終了していないライトデータ、例えば、フォギー書き込み動作のみが終了しておりファイン書き込み動作が終了していないライトデータ、が内部バッファ161に存在する場合には、フラッシュマネジメント部21は、このライトデータも残りのライトデータと一緒にSLCバッファ401に書き込む。
【0194】
そして、フラッシュマネジメント部21は、QLCブロック#1(ゾーン#1)をクローズ状態に遷移させる。この場合、フラッシュマネジメント部21は、QLCブロック#1(ゾーン#1)をオープンゾーンリスト101から取り除き、クローズゾーンリスト102に加える。
【0195】
SLCバッファ401は、スタティックSLCバッファとダイナミックSLCバッファとを使用する上述のハイブリッドSLCバッファとして実現される。SLCバッファ401は、上述の複数のSLCブロックを含んでいてもよい。スタティックSLCバッファが使い果たされるまでは、フラッシュマネジメント部21は、クローズ要求を受信する度に、クローズすべきQLCブロック(ゾーン)に書き込まれるべき残りのライトデータをスタティックSLCバッファに書き込む。
【0196】
この場合、フラッシュマネジメント部21は、残りのライトデータを、SLCバッファ401(スタティックSLCバッファ)内のオープンされている書き込み先SLCブロック(open SLCブロック#1)にSLCモードで書き込む。書き込み先SLCブロック全体がデータで満たされると、フラッシュマネジメント部21は、この書き込み先SLCブロックをフル状態のSLCブロックとして管理する。
【0197】
フラッシュマネジメント部21は、フル状態の全てのSLCブロックを先入れ先出し(FIFO)リストを使用して管理してもよい。FIFOリストは複数のエントリを含む。フル状態の一つのSLCブロックがFIFOリストに入れられると、FIFOリストの各エントリに既に格納されている各SLCブロックはFIFOリストの出口側に1エントリ分だけ移動する。フラッシュマネジメント部21は、FIFOリストの出口に達したSLCブロック(最も古いSLCブロック)をSLCバッファ401のガベージコレクション(GC)のためのコピー元ブロックとして選択する。フラッシュマネジメント部21は、選択したSLCブロックに有効データが格納されているか否かを判定する。
【0198】
選択したSLCブロックに有効データが格納されていない場合、フラッシュマネジメント部21は、この選択したSLCブロックに対する消去動作を実行し、そしてこの選択したSLCブロックを新たな書き込み先SLCブロックとして割り当てる。
【0199】
選択したSLCブロックに有効データが格納されている場合、フラッシュマネジメント部21は、選択したSLCブロックに格納されている有効データをGC用の書き込み先SLCブロック(open SLCブロック#2)にコピーする。そして、フラッシュマネジメント部21は、L2Pテーブル31を更新して、有効データがコピーされた書き込み先SLCブロック内の記憶位置を示す物理アドレスを、このコピーされた有効データの論理アドレスにマッピングする。選択したSLCブロック内の全ての有効データのコピーが完了した場合、フラッシュマネジメント部21は、この選択したSLCブロックに対する消去動作を実行し、そしてこの選択したSLCブロックを新たな書き込み先SLCブロックとして割り当てる。
【0200】
このようにして、スタティックSLCバッファ内の固定数のSLCブロックはFIFO方式によって順番に書き込み先SLCブロックとして割り当てられる。これにより、これらSLCブロックのプログラム/イレーズサイクル数を同じレートで増加させることができる。
【0201】
スタティックSLCバッファ内の利用可能な残りSLCブロックの数が閾値Th1よりも少なくなると(wear out)、新たな書き込み先SLCブロックの割り当てが必要になる度に、つまり書き込み先SLCブロック全体がデータで満たされる度に、フラッシュマネジメント部21は、エンプティゾーンリスト104によって管理されているフリーQLCブロック群から一つのQLCブロックを選択し、そして選択した一つのQLCブロックを、SLCバッファ401用の新たな書き込み先SLCブロック(open SLCブロック#1)として割り当てる。なお、この一つのQLCブロックは、GC用の新たな書き込み先SLCブロック(open SLCブロック#2)として割り当てられてもよい。
【0202】
この一つのQLCブロックは、ダイナミックSLCバッファを構成する複数のブロックのうちの一つの要素として使用される。
【0203】
すなわち、フラッシュマネジメント部21は、例えば、この一つのQLCブロックをSLCバッファ401用の新たな書き込み先SLCブロック(open SLCブロック#1)としてオープンし、クローズすべきQLCブロック(ゾーン)に書き込まれるべきライトデータを、このオープンされた書き込み先SLCブロックにSLCモードで書き込む。
【0204】
このオープンされた書き込み先SLCブロック全体がデータで満たされると、フラッシュマネジメント部21は、この書き込み先SLCブロックをFIFOリストに入れる。この書き込み先SLCブロックは、後続する幾つかのQLCブロックが書き込み先SLCブロックとして使用された後、FIFOリストの出口に達する。
【0205】
この場合、フラッシュマネジメント部21は、FIFOリストの出口に達したSLCブロックをGC用のコピー元ブロックとして選択する。選択したSLCブロックに有効データが格納されていない場合、フラッシュマネジメント部21は、この選択したSLCブロックをQLC領域202用のエンプティゾーンリスト104に入れ、これによってこの選択したSLCブロックをQLC領域202に返却する。
【0206】
選択したSLCブロックに有効データが格納されている場合には、フラッシュマネジメント部21は、選択したSLCブロックに格納されている有効データをGC用の書き込み先SLCブロック(open SLCブロック#2)にコピーする。そして、フラッシュマネジメント部21は、L2Pテーブル31を更新して、有効データがコピーされた書き込み先SLCブロック内の記憶位置を示す物理アドレスを、このコピーされた有効データの論理アドレスにマッピングする。選択したSLCブロック内の全ての有効データのコピーが完了した場合、フラッシュマネジメント部21は、この選択したSLCブロックをQLC領域202用のエンプティゾーンリスト104に入れ、これによってこの選択したSLCブロックをQLC領域202に返却する。
【0207】
クローズ状態に遷移されたQLCブロック#1(ゾーン#1)は、データを書き込むために利用可能な残りのページを含んでいる。したがって、ホスト2は、必要に応じて、クローズ状態のQLCブロック#1(ゾーン#1)にデータを書き込むためのライト要求をSSD3に送信することができる。
【0208】
クローズ状態のQLCブロック#1(ゾーン#1)にデータを書き込むための一つ以上のライト要求をホスト2から受信すると、フラッシュマネジメント部21は、SLCバッファ401に格納されているQLCブロック#1(ゾーン#1)用のライトデータをSLCバッファ401から読み出し、読み出したライトデータを内部バッファ161に格納する。これにより、QLCブロック#1(ゾーン#1)用のライトデータはSLCバッファ401から内部バッファ161に転送される。そして、SLCバッファ401から内部バッファ161に転送されたライトデータは、例えば、QLCブロック#1(ゾーン#1)用のデータを書き込むための後続の一つ以上のライトコマンドが受信された後に、QLCブロック#1(ゾーン#1)に書き込まれる。この場合、後続の一つ以上のライトコマンドに関連付けられたQLCブロック#1(ゾーン#1)用のライトデータがホスト2のライトバッファ51から内部バッファ161に転送される。そして、SLCバッファ401から内部バッファ161に転送されたライトデータは、ホスト2のライトバッファ51から内部バッファ161に転送されたQLCブロック#1(ゾーン#1)用のライトデータと一緒に、QLCブロック#1(ゾーン#1)に書き込まれる。
【0209】
また、オープン状態、クローズ状態、またはフル状態であるQLCブロック(ゾーン)の各々に関して、フラッシュマネジメント部21は、このQLCブロック(ゾーン)の読み出し可能エリアと、このQLCブロック(ゾーン)から読み出し可能ではないデータが格納されている各記憶位置を示す記憶位置情報とをブロック管理テーブル32を使用して管理する。
【0210】
各記憶位置は、共有フラッシュバッファ201(図15ではSLCバッファ401)内の記憶位置、またはホスト2のライトバッファ51内の記憶位置のいずれかである。各記憶位置は、例えば、4KBのようなサイズを有するセクタの単位で管理されてもよい。
【0211】
フラッシュマネジメント部21が、QLCゾーンとこのQLCゾーン内のオフセットとを示す開始LBAと、リード対象データのデータサイズとを指定するリードコマンド(read request)をホスト2から受信した場合、フラッシュマネジメント部21は、リード対象データに対応するLBA範囲がこのQLCブロック(ゾーン)の読み出し可能エリアに含まれているか否かを判定する。リード対象データに対応するLBA範囲は、リードコマンドによってそれぞれ指定されるオフセットとデータサイズとによって規定される。
【0212】
リード対象データに対応するLBA範囲がこのQLCブロック(ゾーン)の読み出し可能エリアに含まれている場合、フラッシュマネジメント部21は、リード対象データをこのQLCブロック(ゾーン)から読み出し、読み出したリード対象データを、DMAC15を使用してホスト2にリードヒットデータとして送信する。
【0213】
リード対象データに対応するLBA範囲がこのQLCブロック(ゾーン)の読み出し可能エリアに含まれていない場合、フラッシュマネジメント部21は、このQLCブロック(ゾーン)に対応する記憶位置情報に基づいて、リード対象データをSLCバッファ401、またはホスト2のライトバッファ51から読み出し、読み出したリード対象データを、DMAC15を使用してホスト2にリードヒットデータとして送信する。
【0214】
なお、フラッシュマネジメント部21は、リード対象データをホスト2のライトバッファ51から読み出す代わりに、リード対象データがSSD3内に存在しないことをホスト2に通知する処理だけを実行してもよい。この場合、フラッシュマネジメント部21は、リード対象データが存在するホスト2のライトバッファ51内の位置をホスト2に通知してもよい。
【0215】
データで満たされているフル状態のQLCブロック(ゾーン)に関しては、このQLCゾーンのLBA範囲の全てが読み出し可能エリアとして管理される。
【0216】
フル状態のQLCブロック(ゾーン)に格納されている全てのデータが、利用されない不要データになった場合、ホスト2は、このQLCブロック(ゾーン)を示す論理アドレスを指定するリセット要求(reset request)をSSD3に送信することができる。このリセット要求(reset request)をホスト2から受信したことに応じて、フラッシュマネジメント部21は、このQLCブロック(ゾーン)の状態をエンプティ状態に遷移させる。
【0217】
ホスト2がエンプティ状態のQLCブロック(ゾーン)にデータを書き込むことを望む場合、ホスト2は、このエンプティ状態のQLCブロック(ゾーン)を示す論理アドレスを指定するオープン要求(open request)をSSD3に送信する。このオープン要求(open request)をホスト2から受信したことに応じて、フラッシュマネジメント部21は、このQLCブロック(ゾーン)に対する消去動作を実行し、このQLCブロック(ゾーン)の状態をエンプティ状態からオープン状態に遷移させる。
【0218】
図16は、SSD3において実行される書き込み動作のシーケンスと読み出し動作のシーケンスの別の例を示すブロック図である。
図16では、共有フラッシュバッファ201としてQLCバッファ301が使用されている。QLCバッファ301は、基本的には、上述のダイナミックSLCバッファに対する制御方法と同様の制御方法によって制御される。
【0219】
図17は、SSD3において実行される書き込み動作の手順と、オープンされているQLCブロックを、書き込みが中断された状態(クローズ状態)に遷移させる動作の手順を示すフローチャートである。
【0220】
ここでは、複数のQLCブロックから割り当てられた第1の書き込み先領域(書き込み先QLCブロック#1)および第2の書き込み先領域(書き込み先QLCブロック#2)にライトデータを書き込む場合を例示するが、複数の書き込み先領域が割り当てられている場合には、第1の書き込み先領域(書き込み先QLCブロック#1)および第2の書き込み先領域(書き込み先QLCブロック#2)にライトデータを書き込む処理と同様の処理が複数の書き込み先領域それぞれに対して実行される。各書き込み先領域は、オープンされている第1の記憶領域(例えばオープンされているゾーン)に相当する。
【0221】
SSD3のコントローラ4がホスト2からライト要求を受信した場合(ステップS11のYES)、コントローラ4は、受信したライト要求が、第1の書き込み先領域(書き込み先QLCブロック#1)にデータを書き込むためのライト要求または第2の書き込み先領域(書き込み先QLCブロック#2)にデータを書き込むためのライト要求のいずれであるかを判定する(ステップS12、S17)。
【0222】
受信したライト要求が第1の書き込み先領域(書き込み先QLCブロック#1)にデータを書き込むためのライト要求である場合(ステップS12のYES)、コントローラ4は、受信したライト要求を書き込み先QLCブロック#1に対応するコマンドキュー#1に格納し、書き込み先QLCブロック#1に書き込むべきライトデータの転送開始条件が満たされたか否かを判定する(ステップS13)。
【0223】
ステップS13では、コントローラ4は、コマンドキュー#1に格納されているライト要求の集合に関連付けられたライトデータの総サイズがQLCブロックの最小書き込みサイズ(例えば4ページ分のサイズ)に達したか否かを判定する。
【0224】
コマンドキュー#1に格納されているライト要求の集合に関連付けられたライトデータの総サイズがQLCブロックの最小書き込みサイズに達したならば、コントローラ4は、書き込み先QLCブロック#1に書き込むべきライトデータの転送開始条件が満たされたと判定する(ステップS13のYES)。
【0225】
この場合、コントローラ4は、DMAC15を用いて、コマンドキュー#1に格納されているライト要求の集合に関連付けられたライトデータを、ホスト2のライトバッファ51から内部バッファ161に転送する(ステップS14)。転送されたライトデータは書き込み先QLCブロック#1の書き込み動作に必要な最小書き込みサイズを有している。
【0226】
コントローラ4は、内部バッファ161に転送されたライトデータを、メモリセル当たりにmビットのデータ(ここでは4ビットのデータ)を書き込む書き込みモード、例えばフォギー・ファイン書き込み動作で、書き込み先QLCブロック#1に書き込む(ステップS15)。
【0227】
このようにして、コントローラ4は、コマンドキュー#1に最小書き込みサイズ分のライト要求の集合が蓄積される度に、ホスト2のライトバッファ51から内部バッファ161へのライトデータの転送と、書き込み先QLCブロック#1にライトデータを書き込む動作とを実行する。あるライトデータのファイン書き込み動作が終了することによってこのライトデータが書き込み先QLCブロック#1から読み出し可能になった場合、コントローラ4は、この読み出し可能になったライトデータに対応するライト要求の完了を示す応答をホスト2に送信する(ステップS16)。
【0228】
受信したライト要求が第2の書き込み先領域(書き込み先QLCブロック#2)にデータを書き込むためのライト要求である場合(ステップS17のYES)、コントローラ4は、受信したライト要求を書き込み先QLCブロック#2に対応するコマンドキュー#2に格納し、書き込み先QLCブロック#2に書き込むべきライトデータの転送開始条件が満たされたか否かを判定する(ステップS18)。
【0229】
ステップS18では、コントローラ4は、コマンドキュー#2に格納されているライト要求の集合に関連付けられたライトデータの総サイズがQLCブロックの最小書き込みサイズ(例えば4ページ分のサイズ)に達したか否かを判定する。
【0230】
コマンドキュー#2に格納されているライト要求の集合に関連付けられたライトデータの総サイズがQLCブロックの最小書き込みサイズに達したならば、コントローラ4は、書き込み先QLCブロック#2に書き込むべきライトデータの転送開始条件が満たされたと判定する(ステップS18のYES)。
【0231】
この場合、コントローラ4は、DMAC15を用いて、コマンドキュー#2に格納されているライト要求の集合に関連付けられたライトデータを、ホスト2のライトバッファ51から内部バッファ161に転送する(ステップS19)。転送されたライトデータは書き込み先QLCブロック#2の書き込み動作に必要な最小書き込みサイズを有している。
【0232】
コントローラ4は、内部バッファ161に転送されたライトデータを、メモリセル当たりにmビットのデータ(ここでは4ビットのデータ)を書き込む書き込みモード、例えばフォギー・ファイン書き込み動作で、書き込み先QLCブロック#2に書き込む(ステップS20)。
【0233】
このようにして、コントローラ4は、コマンドキュー#2に最小書き込みサイズ分のライト要求の集合が蓄積される度に、ホスト2のライトバッファ51から内部バッファ161へのライトデータの転送と、書き込み先QLCブロック#2にライトデータを書き込む動作とを実行する。あるライトデータのファイン書き込み動作が終了することによってこのライトデータが書き込み先QLCブロック#2から読み出し可能になった場合、コントローラ4は、この読み出し可能になったライトデータに対応するライト要求の完了を示す応答をホスト2に送信する(ステップS16)。
【0234】
ある第1の記憶領域の状態を、書き込み先記憶領域として利用可能なオープン状態から、書き込みが中断されたクローズ状態に遷移させるためのインアクティベート要求(例えばクローズ要求)をホスト2から受信した場合(ステップS21のYES)、コントローラ4は、インアクティベート要求によって指定された第1の記憶領域が、第1の書き込み先記憶領域(QLCブロック#1)または第2の書き込み先記憶領域(QLCブロック#2)のいずれであるかを判定する(ステップS22、S26)。
【0235】
インアクティベート要求(クローズ要求)によって指定された第1の記憶領域が第1の書き込み先記憶領域(QLCブロック#1)である場合(ステップS22のYES)、コントローラ4は、QLCブロック#1に対する受信済みの一つ以上のライト要求のうち、内部バッファ161に未転送の残りのライトデータをホスト2のライトバッファ51から取得する(ステップS23)。
【0236】
コントローラ4は、ホスト2のライトバッファ51から取得した残りのライトデータを、共有フラッシュバッファ201に、メモリセル当たりにnビットのデータを書き込むための第2の書き込みモードで書き込む(ステップS24)。第1の書き込み先記憶領域(QLCブロック#1)内の書き込みがフォギー・ファイン書き込み動作によって実行されるケースにおいては、ステップS24では、コントローラ4は、QLCブロック#1から読み出し可能になっていない第1のライトデータを内部バッファ161から取得し、ホスト2のライトバッファ51から取得した残りのライトデータを、この第1のライトデータと共に、共有フラッシュバッファ201に第2の書き込みモードで書き込む。これにより、フォギー書き込み動作のみが終了しており、ファイン書き込み動作がまだ実行されてない第1のライトデータも、共有フラッシュバッファ201を使用して不揮発に記憶することができる。
【0237】
コントローラ4は、共有フラッシュバッファ201から読み出し可能となったライトデータに対応するライト要求それぞれの完了を示す応答と、インアクティベート要求の完了を示す応答とをホスト2に送信する(ステップS25)。共有フラッシュバッファ201に適用される第2の書き込みモードが、共有フラッシュバッファ201に割り当てられたブロック内の複数のページの一つに書き込まれたデータの読み出しが、このページへのデータの書き込みのみによって可能となる書き込みモード、例えばSLCモードまたはMLC LMモードである場合には、コントローラ4は、共有フラッシュバッファ201にライトデータを書き込んだことに応じて、このライトデータに対応する受信済みの一つ以上のライト要求の完了を示す応答をホスト2に送信する。一方、共有フラッシュバッファ201に適用される第2の書き込みモードが、共有フラッシュバッファ201に割り当てられたブロック内の複数のページの一つに書き込まれたデータの読み出しが、このページに後続する1以上のページへのデータの書き込み後に可能となる書き込みモード、例えばフォギー・ファイン書き込み動作である場合には、コントローラ4は、共有フラッシュバッファ201に割り当てられたブロックに書き込んだライトデータがこのブロックから読み出し可能になった場合、このライトデータに対応する受信済みの一つ以上のライト要求の完了を示す応答をホスト2に送信する。
【0238】
インアクティベート要求(クローズ要求)によって指定された第1の記憶領域が第2の書き込み先記憶領域(QLCブロック#2)である場合(ステップS26のYES)、コントローラ4は、QLCブロック#2に対する受信済みの一つ以上のライト要求のうち、内部バッファに未転送の残りのライトデータをホスト2のライトバッファ51から取得する(ステップS27)。そして、コントローラ4は、上述のステップS24,S25の処理を実行する。
【0239】
図18は、ハイブリッドSLCバッファを制御する動作の手順を示すフローチャートである。
まず、コントローラ4は、NAND型フラッシュメモリ5内の複数のブロックのうちの複数の第1のブロックの集合をQLC領域202用に割り当て、さらに、NAND型フラッシュメモリ5内の複数のブロックのうちの複数の第2のブロックの集合をSLCバッファ401用に割り当てる(ステップS31)。SLCバッファ401用に割り当てられる第2のブロックの数は固定数であり、これら第2のブロックはスタティックSLCバッファ401Aとして使用される。SLCバッファ401用に割り当てられる第2のブロックの数は、QLC領域202用に割り当てられる第1のブロックの数よりも少ない。
【0240】
ホスト2からインアクティベート要求(例えばクローズ要求)を受信する度、コントローラ4は、インアクティベート要求によって指定された第1の記憶領域(QLCブロック)に対する受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、内部バッファ161に未転送の残りのライトデータをホスト2のライトバッファ51から取得し、この残りのライトデータをスタティックSLCバッファ401AにSLCモードで書き込む(ステップS32)。ステップS32では、コントローラ4は、まず、スタティックSLCバッファ401A用に割り当てられているブロックのうちの一つのブロックを、スタティックSLCバッファ401A用の書き込み先SLCブロックとして割り当てる。そして、コントローラ4は、残りのライトデータを、書き込み先SLCブロックにSLCモードで書き込む。インアクティベート要求によって指定された第1の記憶領域(QLCブロック)から読み出し可能になっていないライトデータが内部バッファ161に格納されている場合には、コントローラ4は、読み出し可能になっていないライトデータを内部バッファ161から取得し、残りのライトデータと読み出し可能になっていないライトデータとを書き込み先SLCブロックにSLCモードで書き込む。
【0241】
コントローラ4は、例えば、スタティックSLCバッファ401A内の各ブロックの消耗度に基づき、スタティックSLCバッファ401A内のブロックから不良ブロックを検出する。不良ブロックを検出する処理では、コントローラ4は、例えば、スタティックSLCバッファ401A内の各ブロックのプログラム/イレーズサイクル数とSLCブロックの最大プログラム/イレーズサイクル数とを比較し、SLCブロックの最大プログラム/イレーズサイクル数に達したプログラム/イレーズサイクル数を有するブロックを不良ブロックとして検出してもよい。
【0242】
コントローラ4がスタティックSLCバッファ401A内のあるブロックを不良ブロックとして検出すると(ステップS33のYES)、コントローラ4は、このブロックを不良ブロックリストに追加する(ステップS34)。これにより、スタティックSLCバッファ401A内の残り利用可能ブロックの数が1つ減少される。
【0243】
コントローラ4は、スタティックSLCバッファ401A用の新たな書き込み先SLCブロックの割り当てが必要になった場合(ステップS35のYES)、つまりスタティックSLCバッファ401A用の現在の書き込み先SLCブロック全体がデータで満たされた場合、スタティックSLCバッファ401A内の残り利用可能ブロックの数が閾値Th1未満であるか否かを判定する(ステップS36)。
【0244】
スタティックSLCバッファ401A内の残り利用可能ブロックの数が閾値Th1以上である場合(ステップS36のNO)、コントローラ4は、スタティックSLCバッファ401A内の一つのブロックを、スタティックSLCバッファ401A用の新たな書き込み先SLCブロックとして割り当てる(ステップS37)。そして、コントローラ4は、ホスト2からインアクティベート要求(例えばクローズ要求)を受信する度、ステップS32の処理を実行する。
【0245】
スタティックSLCバッファ401A内の残り利用可能ブロックの数が閾値Th1未満である場合(ステップS36のYES)、コントローラ4は、スタティックSLCバッファ401Aが使い果たされたと判定する。
【0246】
この場合、まず、コントローラ4は、QLC領域202用に割り当てられているブロックの集合から一つのブロックを選択し、この選択したブロックをダイナミックSLCバッファ401B用の書き込み先ブロックとして割り当てる(ステップS38)。ステップS38では、コントローラ4は、エンプティゾーンリスト104によって管理されているエンプティ状態のブロック(フリーQLCブロック)の集合から一つのブロックを選択する。
【0247】
コントローラ4は、ホスト2からインアクティベート要求(例えばクローズ要求)を受信する度、インアクティベート要求によって指定された第1の記憶領域(QLC領域ブロック)に対する受信済みの一つ以上のライト要求に関連付けられたライトデータのうち、内部バッファ161に未転送の残りのライトデータをホスト2のライトバッファから取得し、この残りのライトデータをダイナミックSLCバッファ401B用の書き込み先ブロックにSLCモードで書き込む(ステップS39)。インアクティベート要求によって指定された第1の記憶領域(QLCブロック)から読み出し可能になっていないライトデータが内部バッファ161に格納されている場合には、コントローラ4は、読み出し可能になっていないライトデータを内部バッファ161から取得し、残りのライトデータと読み出し可能になっていないライトデータとを、ダイナミックSLCバッファ401B用の書き込み先ブロックにSLCモードで書き込む。
【0248】
コントローラ4は、ダイナミックSLCバッファ401B用の新たな書き込み先ブロックの割り当てが必要になった場合(ステップS40のYES)、つまりダイナミックSLCバッファ401B用の現在の書き込み先ブロック全体がデータで満たされた場合、ステップS38の処理を再び実行して、エンプティゾーンリスト104によって管理されているエンプティ状態のブロック(フリーQLCブロック)の集合から別の一つのブロックを選択し、この選択したブロックをダイナミックSLCバッファ401B用の新たな書き込み先ブロックとして割り当てる。
【0249】
図19は、クローズ状態のQLCブロックに対するライト要求の受信に応じてSSD3において実行される動作の手順を示すフローチャートである。
【0250】
クローズ状態のQLCブロックにデータを書き込むためのライト要求をホスト2から受信した場合(ステップS51のYES)、コントローラ4は、このQLCブロックを再オープンし、このQLCブロックの状態をクローズ状態からオープン状態に遷移させる(ステップS52)。
【0251】
そして、コントローラ4は、共有フラッシュバッファ201に格納されているこのQLCブロック用のライトデータを共有フラッシュバッファ201から内部バッファ161に転送し(ステップS53)、共有フラッシュバッファ201から内部バッファ161に転送されたライトデータとホスト2のライトバッファ51から新たに転送されるこのQLCブロック用のライトデータとをこのQLCブロックに書き込むための書き込み処理を実行する(ステップS54)。
【0252】
図20は、比較例に係るSSDにおいて必要となるSLCバッファの容量と、SSD3において必要となるSLCバッファの容量を説明するための図である。
【0253】
図20の(A)に示されているように、比較例に係るSSDは、全てのライトデータをSLCバッファ401と書き込み先QLCブロックの両方に書き込むための処理、あるいは、全てのライトデータをまずSLCバッファ401のみに書き込み、比較例に係るSSDのアイドル時などにSLCバッファ401から書き込み先QLCブロックにライトデータを書き戻す処理を実行する。このため、比較例に係るSSDにおいては、QLC領域202に書き込まれる全てのデータがSLCバッファ401にも書き込まれる。
【0254】
ホスト2がQLC領域202の各QLCブロック内の書き込みをシーケンシャルに実行するケースにおいては、QLC領域202の各QLCブロックは無効データを含まない。したがって、QLC領域202に対するGCは実行されない。
【0255】
一方、SLCバッファ401には、異なるQLCブロックに書き込まれるべき複数種のライトデータが書き込まれるので、SLCバッファ401に対するGCは必要となる。
【0256】
例えば、ホスト2によってQLC領域202に書き込まれるデータの総量(TBW:Total Bytes Written]がA[TB]である場合を想定する。この場合、SLCバッファ401に書き込むことが必要なデータの総量は、A×(WA)[TB]になる。ここで、WAはSLCバッファ401のライトアンプリフィケーションを表している。SLCバッファ401に対するGCが必要になるため、SLCバッファ401のライトアンプリフィケーションWAは1よりも大きな値である。
【0257】
図20の(B)に示されているように、本実施形態のSSD3においては、インアクティベート要求がホスト2から受信された場合にのみ、SLCバッファ401へのデータの書き込みが実行される。
【0258】
例えば、ホスト2によってQLC領域202に書き込まれるデータの総量がA[TB]、A[TB]のうちQLC領域202に直接的に書き込まれるデータの総量がC[TB]、全てのインアクティベート要求によってSLCバッファ401に書き込まれるデータの総量がB[TB]である場合を想定する。
【0259】
A[TB]、B[TB]、C[TB]の間には以下の関係が成立する。
【0260】
A=B+C
C>0
B<A
QLC領域202に書き込まれるデータの総量がA(=B+C)[TB]である。
【0261】
一方、SLCバッファ401に書き込むことが必要なデータの総量は、B×(WA)[TB]になる。BはAよりも少ないので、本実施形態では、SLCバッファ401に書き込むことが必要なデータの総量を削減することができる。
【0262】
以上説明したように、本実施形態によれば、コントローラ4は、ホスト2からインアクティベート要求を受信した場合、インアクティベート要求によって指定された第1の記憶領域にデータを書き込むための受信済みのライト要求に関連付けられたライトデータのうち、内部バッファ161に転送されていない残りのライトデータをホスト2のライトバッファから内部バッファ161に転送する。そして、コントローラ4は、この残りのライトデータを、複数の第1の記憶領域によって共有される第2の記憶領域(共有フラッシュバッファ201)に書き込む。
【0263】
したがって、オープン状態の第1の記憶領域のうちのどの第1の記憶領域がクローズされる場合であっても、クローズされるべき個々の第1の記憶領域に対応する残りのライトデータは、共有フラッシュバッファ201に書き込まれる。よって、インアクティベート要求の受信の度に残りのライトデータをインアクティベート要求によって指定された第1の記憶領域に書き込むという構成に比し、書き込みが完了できないライトデータの量を低減でき、ホスト2のライトバッファ内の解放可能な領域を増やすことができる。
【0264】
また、本実施形態では、全てのライトデータを共有フラッシュバッファ201とQLC領域202の両方に書き込むための処理を実行するケースや、全てのライトデータをまず共有フラッシュバッファ201のみに書き込み、SSD3のアイドル時などに共有フラッシュバッファ201からQLC領域202にライトデータを書き戻すための処理を実行するケースに比べ、共有フラッシュバッファ201に書き込まれるデータの総量を削減することができる。
【0265】
この結果、共有フラッシュバッファ201として割り当てることが必要なブロックの数を削減することが可能となるので、これによってQLC領域202として割り当てることが可能なブロック(QLCブロック)の数を増やすことが可能となる。
【0266】
よって、NAND型フラッシュメモリ5の記憶領域を効率的に利用することが可能となり、またホスト2のライトバッファ51のサイズを削減することも可能となる。
【0267】
ホスト2のライトバッファ51は不揮発性ライトバッファによって実現してもよい。不揮発性ライトバッファは、ストレージクラスメモリ(SCM)のような不揮発性メモリによって実現されてもよい。
【0268】
ホスト2のライトバッファ51が不揮発性ライトバッファによって実現されている場合には、たとえ停電のようなパワーロスによって内部バッファ161内のデータが失われても、ホスト2の不揮発性ライトバッファからこのデータを再び取得することが可能となる。したがって、SSD3がパワーロスプロテクション機能を実行するためのキャパシタを備えていなくても、パワーロスによって内部バッファ161内のデータが失われてしまうことを防止することができる。
【0269】
共有フラッシュバッファ201は、ストレージクラスメモリ(SCM)のような不揮発性メモリよって実現されてもよい。
【0270】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0271】
2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、51…ホストのライトバッファ、161…内部バッファ、201…共有フラッシュバッファ、202…QLC領域、301…QLCバッファ、401…SLCバッファ、401A…スタティックSLCバッファ、401B…ダイナミックSLCバッファ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20