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-22
(45)【発行日】2023-10-02
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
   G06F 12/06 20060101AFI20230925BHJP
   G06F 12/00 20060101ALI20230925BHJP
【FI】
G06F12/06 515J
G06F12/00 597U
G06F12/00 560B
【請求項の数】 15
(21)【出願番号】P 2019208739
(22)【出願日】2019-11-19
(65)【公開番号】P2021081981
(43)【公開日】2021-05-27
【審査請求日】2022-09-12
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
(72)【発明者】
【氏名】江坂 直紀
【審査官】松平 英
(56)【参考文献】
【文献】特開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の記憶領域の各々にメモリセル当たりに複数ビットを書き込むための第1の書き込みモードでデータを書き込み、前記不揮発性メモリに含まれる第2の記憶領域にメモリセル当たりに1ビットを書き込むための第2の書き込みモードでデータを書き込むように構成されたコントローラとを具備し、
前記コントローラは、
前記複数の第1の記憶領域から割り当てられた第1の書き込み先記憶領域にライトデータを書き込むためのライト要求それぞれを前記ホストから受信したことに応じて、前記受信したライト要求の集合に関連付けられているライトデータを前記ホストのライトバッファから前記メモリシステム内の内部バッファに転送し、前記内部バッファに転送された前記ライトデータを前記第2の記憶領域に書き込むことなく前記第1の書き込み先記憶領域に前記第1の書き込みモードで書き込み、
前記第1の書き込み先記憶領域の状態を、データの書き込みが可能な書き込み先記憶領域として割り当てられている第1の状態から、書き込みが中断された第2の状態に遷移させるための第1の要求を前記ホストから受信した場合、前記第1の書き込み先記憶領域に対する受信済みのライト要求のうち前記内部バッファにライトデータが転送されていない第1のライト要求それぞれに関連付けられている残りのライトデータを前記ホストのライトバッファから前記内部バッファに転送し、前記内部バッファに転送された前記残りのライトデータを前記第1の書き込み先記憶領域に書き込むことなく前記第2の記憶領域に前記第2の書き込みモードで書き込み、前記第1の書き込み先記憶領域の状態を前記第1の状態から前記第2の状態に遷移させるように構成されている、メモリシステム。
【請求項2】
前記コントローラは、前記内部バッファに転送された前記残りのライトデータを前記第2の記憶領域に前記第2の書き込みモードで書き込んだ後、前記第1のライト要求それぞれの完了を示す応答と、前記第1の要求の完了を示す応答とを前記ホストに送信するように構成されている請求項1記載のメモリシステム。
【請求項3】
前記コントローラは、
リード要求を前記ホストから受信し、
前記受信したリード要求によって指定されたリード対象データが前記複数の第1の記憶領域の一つの第1の記憶領域に記憶されている場合、前記リード対象データを前記一つの第1の記憶領域から読み出し、読み出した前記リード対象データを前記ホストに送信し、
前記リード対象データが前記複数の第1の記憶領域のいずれにも記憶されておらず、前記第2の記憶領域に記憶されている場合、前記リード対象データを前記第2の記憶領域から読み出し、読み出した前記リード対象データを前記ホストに送信し、
前記リード対象データが前記複数の第1の記憶領域、前記内部バッファ、前記第2の記憶領域のいずれにも記憶されておらず、前記ホストの前記ライトバッファに記憶されている場合、前記リード対象データが前記メモリシステムに存在しないこと示す情報を前記ホストに通知するように構成されている請求項1記載のメモリシステム。
【請求項4】
前記コントローラは、
リード要求を前記ホストから受信し、
前記受信したリード要求によって指定されたリード対象データが前記複数の第1の記憶領域の一つの第1の記憶領域に記憶されている場合、前記リード対象データを前記一つの第1の記憶領域から読み出し、読み出した前記リード対象データを前記ホストに送信し、
前記リード対象データが前記複数の第1の記憶領域のいずれにも記憶されておらず、前記第2の記憶領域に記憶されている場合、前記リード対象データを前記第2の記憶領域から読み出し、読み出した前記リード対象データを前記ホストに送信し、
前記リード対象データが前記複数の第1の記憶領域、前記内部バッファ、前記第2の記憶領域のいずれにも記憶されておらず、前記ホストの前記ライトバッファに記憶されている場合、前記リード対象データが記憶されている前記ホストの前記ライトバッファ内の位置を示す情報を前記ホストに通知するように構成されている請求項1記載のメモリシステム。
【請求項5】
前記コントローラは、
前記第1の書き込み先記憶領域の状態を前記第1の状態から前記第2の状態に遷移させた後に、前記第2の状態である前記第1の書き込み先記憶領域に対するライト要求を前記ホストから受信した場合、
前記第1の書き込み先記憶領域の状態を前記第2の状態から前記第1の状態に遷移させ、
前記第2の記憶領域に記憶されている前記残りのライトデータを前記第2の記憶領域から読み出し、読み出した前記残りのライトデータを前記内部バッファに書き込むように構成されている請求項1記載のメモリシステム。
【請求項6】
前記複数の第1の記憶領域から前記第1の書き込み先記憶領域と第2の書き込み先記憶領域とが割り当てられている場合、
前記コントローラは、
前記ホストから受信されるライト要求それぞれを、前記第1の書き込み先記憶領域にライトデータを書き込むためのライト要求の第1のグループと、前記第2の書き込み先記憶領域にライトデータを書き込むためのライト要求の第2のグループとに分類し、
前記第1のグループに属するライト要求の集合に関連付けられたライトデータの総サイズが前記不揮発性メモリの最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第1のグループに属するライト要求の集合に関連付けられたライトデータを、前記ホストのライトバッファから前記内部バッファに転送し、
前記第2のグループに属するライト要求の集合に関連付けられたライトデータの総サイズが前記最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第2のグループに属するライト要求の集合に関連付けられたライトデータを、前記ホストの前記ライトバッファから前記内部バッファに転送するように構成されている請求項1記載のメモリシステム。
【請求項7】
前記ホストの前記ライトバッファは不揮発性ライトバッファである請求項1記載のメモリシステム。
【請求項8】
前記不揮発性メモリは複数の物理ブロックを含み、
前記複数の物理ブロックのうちの第1の物理ブロックの集合は前記複数の第1の記憶領域として編成され、前記複数の物理ブロックのうちの第2の物理ブロックの集合は前記第2の記憶領域として編成され、
前記複数の第1の記憶領域は、各々が複数の物理ブロックを含む複数のブロックグループである請求項1記載のメモリシステム。
【請求項9】
不揮発性メモリに含まれる複数の第1の記憶領域の各々にメモリセル当たりに複数ビットを書き込むための第1の書き込みモードでデータを書き込み、前記不揮発性メモリに含まれる第2の記憶領域にメモリセル当たりに1ビットを書き込むための第2の書き込みモードでデータを書き込むメモリシステムを制御する制御方法であって、
前記複数の第1の記憶領域から割り当てられた第1の書き込み先記憶領域にライトデータを書き込むためのライト要求それぞれをホストから受信したことに応じて、前記受信したライト要求の集合に関連付けられているライトデータを前記ホストのライトバッファから前記メモリシステム内の内部バッファに転送する動作と、前記内部バッファに転送された前記ライトデータを前記第2の記憶領域に書き込むことなく前記第1の書き込み先記憶領域に前記第1の書き込みモードで書き込む動作とを実行することと、
前記第1の書き込み先記憶領域の状態を、データの書き込みが可能な書き込み先記憶領域として割り当てられている第1の状態から、書き込みが中断された第2の状態に遷移させるための第1の要求を前記ホストから受信した場合、前記第1の書き込み先記憶領域に対する受信済みのライト要求のうち前記内部バッファにライトデータが転送されていない第1のライト要求それぞれに関連付けられている残りのライトデータを前記ホストのライトバッファから前記内部バッファに転送する動作と、前記内部バッファに転送された前記残りのライトデータを前記第1の書き込み先記憶領域に書き込むことなく前記第2の記憶領域に前記第2の書き込みモードで書き込む動作と、前記第1の書き込み先記憶領域の状態を前記第1の状態から前記第2の状態に遷移させる動作とを実行することとを具備する制御方法。
【請求項10】
前記内部バッファに転送された前記残りのライトデータを前記第2の記憶領域に前記第2の書き込みモードで書き込んだ後、前記第1のライト要求それぞれの完了を示す応答と、前記第1の要求の完了を示す応答とを前記ホストに送信することをさらに具備する請求項9記載の制御方法。
【請求項11】
リード要求を前記ホストから受信することと、
前記受信したリード要求によって指定されたリード対象データが前記複数の第1の記憶領域の一つの第1の記憶領域に記憶されている場合、前記リード対象データを前記一つの第1の記憶領域から読み出す動作と、読み出した前記リード対象データを前記ホストに送信する動作とを実行することと、
前記リード対象データが前記複数の第1の記憶領域のいずれにも記憶されておらず、前記第2の記憶領域に記憶されている場合、前記リード対象データを前記第2の記憶領域から読み出す動作と、読み出した前記リード対象データを前記ホストに送信する動作とを実行することと、
前記リード対象データが前記複数の第1の記憶領域、前記内部バッファ、前記第2の記憶領域のいずれにも記憶されておらず、前記ホストの前記ライトバッファに記憶されている場合、前記リード対象データが前記メモリシステムに存在しないことを示す情報を前記ホストに通知することとをさらに具備する請求項9記載の制御方法。
【請求項12】
リード要求を前記ホストから受信することと、
前記受信したリード要求によって指定されたリード対象データが前記複数の第1の記憶領域の一つの第1の記憶領域に記憶されている場合、前記リード対象データを前記一つの第1の記憶領域から読み出す動作と、読み出した前記リード対象データを前記ホストに送信する動作とを実行することと、
前記リード対象データが前記複数の第1の記憶領域のいずれにも記憶されておらず、前記第2の記憶領域に記憶されている場合、前記リード対象データを前記第2の記憶領域から読み出す動作と、読み出した前記リード対象データを前記ホストに送信する動作とを実行することと、
前記リード対象データが前記複数の第1の記憶領域、前記内部バッファ、前記第2の記憶領域のいずれにも記憶されておらず、前記ホストの前記ライトバッファに記憶されている場合、前記リード対象データが記憶されている前記ホストの前記ライトバッファ内の位置を示す情報を前記ホストに通知することとをさらに具備する請求項9記載の制御方法。
【請求項13】
前記第1の書き込み先記憶領域の状態を前記第1の状態から前記第2の状態に遷移させた後に、前記第2の状態である前記第1の書き込み先記憶領域に対するライト要求を前記ホストから受信した場合、前記第1の書き込み先記憶領域の状態を前記第2の状態から前記第1の状態に遷移させる動作と、前記第2の記憶領域に記憶されている前記残りのライトデータを前記第2の記憶領域から読み出す動作と、読み出した前記残りのライトデータを前記内部バッファに書き込む動作とを実行することをさらに具備する請求項9記載の制御方法。
【請求項14】
前記複数の第1の記憶領域から前記第1の書き込み先記憶領域と第2の書き込み先記憶領域とが割り当てられている場合、
前記ホストから受信されるライト要求それぞれを、前記第1の書き込み先記憶領域に対するライト要求の第1のグループと、前記第2の書き込み先記憶領域に対するライト要求の第2のグループとに分類することと、
前記第1のグループに属するライト要求の集合に関連付けられたライトデータの総サイズが前記不揮発性メモリの最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第1のグループに属するライト要求の集合に関連付けられたライトデータを、前記ホストのライトバッファから前記内部バッファに転送することと、
前記第2のグループに属するライト要求の集合に関連付けられたライトデータの総サイズが前記最小書き込みサイズに達した場合、前記最小書き込みサイズを有する、前記第2のグループに属するライト要求の集合に関連付けられたライトデータを、前記ホストの前記ライトバッファから前記内部バッファに転送することとをさらに具備する請求項9記載の制御方法。
【請求項15】
前記ホストの前記ライトバッファは不揮発性ライトバッファである請求項9記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
SSDは、データセンターのサーバのような様々なホスト計算機システムのストレージデバイスとして使用されている。
【0004】
不揮発性メモリにおいては、メモリセル当たりに格納されるデータのビット数が増えるほど、記憶容量は増加するものの、データを書き込むために要する時間は長くなる傾向がある。
【0005】
このため、不揮発性メモリの記憶領域を効率的に利用できるようにするための新たな技術の実現が必要とされる。
【先行技術文献】
【特許文献】
【0006】
【文献】特開2019-191909号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明が解決しようとする課題は、不揮発性メモリの記憶領域を効率的に利用できるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0008】
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリに含まれる複数の第1の記憶領域にメモリセル当たりに複数ビットを書き込むための第1の書き込みモードでデータを書き込み、前記不揮発性メモリに含まれる第2の記憶領域にメモリセル当たりに1ビットを書き込むための第2の書き込みモードでデータを書き込むように構成されたコントローラとを具備する。前記コントローラは、前記複数の第1の記憶領域から割り当てられた第1の書き込み先記憶領域にライトデータを書き込むためのライト要求それぞれを前記ホストから受信したことに応じて、前記受信したライト要求の集合に関連付けられているライトデータを前記ホストのライトバッファから前記メモリシステム内の内部バッファに転送し、前記内部バッファに転送された前記ライトデータを前記第2の記憶領域に書き込むことなく前記第1の書き込み先記憶領域に前記第1の書き込みモードで書き込む。前記コントローラは、前記第1の書き込み先記憶領域の状態を、データの書き込みが可能な書き込み先記憶領域として割り当てられている第1の状態から、書き込みが中断された第2の状態に遷移させるための第1の要求を前記ホストから受信した場合、前記第1の書き込み先記憶領域に対する受信済みのライト要求のうち前記内部バッファにライトデータが転送されていない第1のライト要求それぞれに関連付けられている残りのライトデータを前記ホストのライトバッファから前記内部バッファに転送し、前記内部バッファに転送された前記残りのライトデータを前記第1の書き込み先記憶領域に書き込むことなく前記第2の記憶領域に前記第2の書き込みモードで書き込み、前記第1の書き込み先記憶領域の状態を前記第1の状態から前記第2の状態に遷移させる。
【図面の簡単な説明】
【0009】
図1】ホストと実施形態に係るメモリシステムとの関係を示すブロック図。
図2】実施形態に係るメモリシステムの構成例を示すブロック図。
図3】実施形態に係るメモリシステムにおいて使用される、複数のクワドレベルセルブロック(QLCブロック)とシングルレベルバッファ(SLCバッファ)を示すブロック図。
図4】実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリチップとの関係を示すブロック図。
図5】実施形態に係るメモリシステムにおいて使用される、あるブロックグループ(スーパーブロック)の構成例を示す図。
図6】実施形態のメモリシステムにおいて実行されるフォギー・ファイン書き込み動作を説明するための図。
図7】比較例に係るSSDにおいて実行される、QLCブロックとSLCバッファを制御する動作を説明するための図。
図8】実施形態のメモリシステムにおいて実行される、QLCブロックとSLCバッファを制御する動作を説明するための図。
図9】実施形態に係るメモリシステムにおいて実行される書き込み動作を示すブロック図。
図10】実施形態に係るメモリシステムにおいて実行される書き込み動作のシーケンスと読み出し動作のシーケンスを示すブロック図。
図11】実施形態に係るメモリシステムにおいて実行される書き込み動作の手順とオープンされているQLCスーパーブロックをインアクティブ状態に遷移させる動作の手順を示すフローチャート。
図12】インアクティブ状態のQLCスーパーブロックを再オープンする動作の手順を示すフローチャート。
図13】比較例に係るSSDIおいて必要となるSLCバッファ容量と、実施形態に係るメモリシステムにおいて必要となるSLCバッファ容量とを説明するための図。
図14】実施形態に係るメモリシステムにおいて使用されるブロック管理テーブルのデータ構造の例を示す図。
図15】オープン状態またはインアクティブ状態のQLCスーパーブロックに対応する、読み出し不可能ポインタ(URP)とライトポインタ(WP)とを説明するための図。
図16】クローズ状態のQLCスーパーブロックに対応する、読み出し不可能ポインタ(URP)とライトポインタ(WP)とを説明するための図。
図17】オープン状態のQLCスーパーブロック(書き込み先記憶領域)の読み出し不可能領域に書き込むべきデータそれぞれが存在している位置を示すアドレスリストを示す図。
図18】インアクティブ状態のQLCスーパーブロックの読み出し不可能領域に書き込むべきデータそれぞれが存在している位置を示すアドレスリストを示す図。
図19】実施形態に係るメモリシステムにおいて実行される読み出し動作の手順を示すフローチャート。
図20】実施形態に係るメモリシステムにおいて実行される読み出し動作の別の手順を示すフローチャート。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態を説明する。
図1は、ホストと実施形態に係るメモリシステムとの関係を示すブロック図である。
【0011】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)3として実現されている。
【0012】
ホスト(ホストデバイス)2は、複数のSSD3を制御するように構成されている。ホスト2は、複数のSSD3によって構成されるフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
【0013】
なお、SSD3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のSSD3)を制御するコントローラを含む。SSD3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、SSD3のホストとして機能してもよい。
【0014】
以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。
【0015】
ホスト(サーバ)2と複数のSSD3は、インタフェース50を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
【0016】
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
【0017】
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
【0018】
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
【0019】
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。各仮想マシンに対応するオペレーティングシステムは、I/Oサービスを含む。このI/Oサービスは、論理ブロックアドレス(LBA)ベースのブロックI/Oサービスであってもよいし、あるいは、キー・バリュー・ストアサービスであってもよい。
【0020】
各仮想マシンに対応するオペレーティングシステムにおいては、I/Oサービスは、ユーザアプリケーションからのライト/リードに関する要求に応答して、I/Oコマンド(ライトコマンド、リードコマンド)を発行する。これらI/Oコマンドはホスト2内のサブミッションキューに入れられ、そしてこのサブミッションキューを介してSSD3に送出される。
【0021】
SSD3のコントローラは、メモリセル当たりに複数ビットを書き込むための第1の書き込みモードとメモリセル当たりに1ビットを書き込むための第2の書き込みモードとを選択的に使用して、ホスト2からのライトデータを不揮発性メモリに書き込む。
【0022】
より詳しくは、SSD3のコントローラは、不揮発性メモリに含まれる複数の第1の記憶領域の各々にメモリセル当たりに複数ビットを書き込むための第1の書き込みモードでデータを書き込み、不揮発性メモリに含まれる第2の記憶領域にメモリセル当たりに1ビットを書き込むための第2の書き込みモードでデータを書き込む。
【0023】
図2は、SSD3の構成例を示す。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
【0024】
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のNAND型フラッシュメモリであってもよいし、3次元構造のNAND型フラッシュメモリであってもよい。
【0025】
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKm-1を含む。ブロックBLK0~BLKm-1の各々は複数のページ(ここではページP0~Pn-1)を含む。ブロックBLK0~BLKm-1は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0~Pn-1は、データ書き込み動作およびデータ読み出し動作の単位である。
【0026】
コントローラ4は、ToggleNANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
【0027】
NAND型フラッシュメモリ5は、図3に示すように、シングルレベルセルバッファ(SLCバッファ)201と、複数のクワドレベルセルブロック(QLCブロック)を含むクワドレベルセル領域(QLC領域)202とを含む。
【0028】
複数のQLCブロックの各々は、一つのメモリセル当たりに4ビットを記憶する書き込みモード(プログラムモードとも云う)によってデータが書き込まれるブロックである。複数のQLCブロックは、上述した複数の第1の記憶領域の一例である。
【0029】
各QLCブロックにデータを書き込む動作においては、4ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに4ビットのデータを書き込むことができる。
【0030】
SLCバッファ201は、複数のSLCブロックを含んでもよい。各SLCブロックは一つのメモリセル当たりに1ビットを記憶する書き込みモード(プログラムモードとも云う)によってデータが書き込まれるブロックである。SLCバッファ201は、上述した第2の記憶領域の一例である。
【0031】
SLCブロックにおけるメモリセル当たりの記憶密度は1ビット(すなわち、ワード線当たり1ページ)であり、QLCブロックにおけるメモリセル当たりの記憶密度は4ビット(すなわち、ワード線当たり4ページ)である。
【0032】
NAND型フラッシュメモリ5に対するデータの読み出し速度および書き込み速度は、記憶密度が高いほど遅く、記憶密度が低いほど速い。したがって、QLCモードブロックに対するデータの読み出しおよび書き込みに要する時間は、SLCブロックに対するデータの読み出しおよび書き込みに要する時間よりも長くなる。
【0033】
QLCブロックにデータを書き込む動作は、同じワード線に接続されたメモリセル群に対する複数回の書き込み動作(フォギー書き込み動作、ファイン書き込み動作)によって実行される。1回目の書き込み動作(フォギー書き込み動作)は各メモリセルの閾値電圧を粗く設定する書き込み動作であり、2回目の書き込み動作(ファイン書き込み動作)は各メモリセルの閾値電圧を調整する書き込み動作である。
【0034】
1回目の書き込み動作(フォギー書き込み動作)では、まず、4ページ分のデータが、1回目のデータ転送動作によってNAND型フラッシュメモリ5にページサイズ単位で転送される。つまり、1ページ当たりのデータサイズ(ページサイズ)が16KBであるならば、64KBのデータがNAND型フラッシュメモリ5にページサイズ単位で転送される。そして、4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための1回目の書き込み動作(フォギー書き込み動作)が行われる。
【0035】
2回目のプログラム動作(ファイン書き込み動作)では、フォギー書き込み動作と同様に、4ページ分のデータが、2回目のデータ転送動作でNAND型フラッシュメモリ5にページサイズ単位で再び転送される。2回目のデータ転送動作でNAND型フラッシュメモリ5に転送されるデータは、1回目のデータ転送動作によって転送されるデータと同一である。そして、転送された4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための2回目の書き込み動作(ファイン書き込み動作)が行われる。
【0036】
さらに、あるワード線に接続された複数のメモリセルに対するフォギー書き込み動作が終了しても、このワード線に接続された複数のメモリセルに対するファイン書き込み動作はすぐに実行することはできない。このワード線に接続された複数のメモリセルに対するファイン書き込み動作は、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了した後に実行可能となる。このため、QLCブロックにデータを書き込むために必要な時間は長くなる。また、QLCブロックのあるワード線に接続された複数のメモリセルにフォギー書き込み動作によって書き込まれたデータは、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了し、且つこのワード線に接続された複数のメモリセルに対するファイン書き込み動作が終了まで、読み出すことができない。
【0037】
NAND型フラッシュメモリ5は、図4に示すように、複数のNAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)を含んでいてもよい。個々のNAND型フラッシュメモリチップは独立して動作可能である。このため、NAND型フラッシュメモリチップは、並列動作可能な単位として機能する。図4においては、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として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図4の構成例においては、16チャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリチップを並列動作させることができる。
【0038】
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループ(スーパーブロック)の単位で実行されてもよい。一つのブロックグループ、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリチップ#1~#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリチップ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリチップ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリチップ#1~#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
【0039】
図5には、32個の物理ブロック(ここでは、NAND型フラッシュメモリチップ#1内の物理ブロックBLK2、NAND型フラッシュメモリチップ#2内の物理ブロックBLK3、NAND型フラッシュメモリチップ#3内の物理ブロックBLK7、NAND型フラッシュメモリチップ#4内の物理ブロックBLK4、NAND型フラッシュメモリチップ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリチップ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0040】
図3で説明した各QLCブロックは、一つのスーパーブロック(QLCスーパーブロック)によって実現されてもよいし、一つの物理ブロック(QLC物理ブロック)によって実現されてもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【0041】
本実施形態においては、NAND型フラッシュメモリ5に含まれる複数の物理ブロックは第1の物理ブロックの集合と第2の物理ブロックの集合とに分類される。第1の物理ブロックの集合は複数の第1の記憶領域(複数のQLCブロック)として編成され、第2の物理ブロックの集合は第1の記憶領域(SLCバッファ201)として編成される。
【0042】
複数の第1の記憶領域(複数のQLCブロック)はホスト2によって書き込まれるデータ(ユーザデータ)を記憶するためのユーザデータ記憶領域として使用される。複数の第1の記憶領域は、これに限定されないが、例えばNVMe仕様に規定されたzoned namespace(ZNS)で使用される複数のゾーンであってもよい。この場合、LBAのような論理アドレス空間は複数の論理アドレス範囲(LBA範囲)に分割され、複数の第1の記憶領域には複数の論理アドレス範囲(LBA範囲)がそれぞれ割り当てられる。
【0043】
次に、図2のコントローラ4の構成について説明する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。論理アドレスは、SSD3の論理アドレス空間内の位置をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、LBA(logical block address(addressing))が使用され得る。
【0044】
SSD3をアクセスするためにホスト2によって使用される論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル:L2Pテーブル)31を用いて実行される。コントローラ4は、L2Pテーブル31を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理してもよい。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータがライトされたNAND型フラッシュメモリ5内の最新の物理記憶位置を示す。L2Pテーブル31は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
【0045】
NAND型フラッシュメモリ5においては、ページへのデータ書き込みは1消去サイクル当たり1回のみ可能である。つまり、データが既に書き込まれているブロック内の領域に新たなデータを直接上書きすることができない。このため、既に書き込まれているデータを更新する場合には、コントローラ4はそのブロック(または別のブロック)内の未書き込み領域に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、L2Pテーブル31を更新してこの論理アドレスをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。
【0046】
ブロック管理には、バッドブロック(不良ブロック)の管理と、ウェアレベリングと、ガベージコレクション(GC)等が含まれる。ウェアレベリングは、ブロックそれぞれの書き換え回数(プログラム/イレーズサイクルの数)を均一化するための動作である。
【0047】
GCは、フリーブロックの個数を増やすための動作である。フリーブロックとは、有効データを含まないブロックを意味する。GCにおいては、コントローラ4は、有効データと無効データとが混在する幾つかのブロック内の有効データを別のブロック(例えばフリーブロック)にコピーする。ここで、有効データとは、ある論理アドレスに関連付けられているデータを意味する。例えば、L2Pテーブル31から参照されているデータ(すなわち論理アドレスから最新のデータとして紐付けられているデータ)は有効データであり、後にホスト2からリードされる可能性がある。無効データとは、どの論理アドレスにも関連付けられていないデータを意味する。どの論理アドレスにも関連付けられていないデータは、もはやホスト2からリードされる可能性が無いデータである。そして、コントローラ4は、L2Pテーブル31を更新して、コピーされた有効データの論理アドレスそれぞれをコピー先の物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみになったブロックはフリーブロックとして解放される。これによって、このブロックは、このブロックに対する消去動作が実行された後に再利用することが可能となる。
【0048】
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、スタティックRAM(SRAM)16、ECCエンコード/デコード部17、等を含む。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、SRAM15、ECCエンコード/デコード部17は、バス10を介して相互接続される。
【0049】
ホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってもよい。あるいは、SSD3がEthernet(登録商標)を介してホスト2に接続される構成においては、ホストインタフェース11は、NVMe over Fabrics(NVMeOF)コントローラであってもよい。
【0050】
ホストインタフェース11は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、インアクティブコマンド、アロケートコマンド、デアロケートコマンド、等が含まれる。
【0051】
ライトコマンドは書き込むべきデータ(ライトデータ)をNAND型フラッシュメモリ5に書き込むコマンド(ライト要求)であり、例えば、ライトデータの論理アドレス(開始LBA)、このライトデータのサイズ、このライトデータが格納されているホスト2のライトバッファ内の位置を示すデータポインタ(バッファアドレス)、等を含む。
【0052】
SSD3はzoned namespaceをサポートする第1タイプSSDとして実現されていてもよい。第1タイプSSDにおいては、ライト要求に含まれる論理アドレスの上位ビット部が、このライトコマンドに関連付けられたライトデータが書き込まれるべき書き込み先記憶領域(書き込み先QLCブロック)を指定する識別子として使用されてもよい。
【0053】
あるいは、SSD3はストリーム書き込みをサポートする第2タイプSSDとして実現されていてもよい。第2タイプSSDにおいては、ライト要求に含まれるストリームIDが、このライトコマンドに関連付けられたライトデータが書き込まれるべき書き込み先記憶領域(書き込み先QLCブロック)を指定する識別子として使用されてもよい。
【0054】
あるいは、SSD3は、コントローラ4が書き込み先記憶領域(書き込み先QLCブロック)と書き込み先記憶領域内の書き込み先位置(書き込み先ページ)とを決定し、決定した書き込み先記憶領域と決定した書き込み先位置とをホスト2に通知する第3タイプSSDとして実現されていてもよい。
【0055】
第3タイプSSDにおいては、コントローラ4は、QoSドメインIDのようなIDを指定するブロック割り当て要求をホスト2から受信する。QoSドメインは、NAND型フラッシュメモリ5内の一つの記憶領域に相当する。コントローラ4は、このブロック割り当て要求に含まれるQoSドメインID用に使用されるべき書き込み先記憶領域を割り当てる。書き込み先記憶領域は一つの物理ブロック(QLC物理ブロック)によって実現されてもよいし、幾つかのQLC物理ブロックを含むブロックグループ(QLCスーパーブロック)によって実現されてもよい。ホスト2から受信されるライト要求は、QoSドメインIDと、論理アドレスと、書き込むべきデータ(ライトデータ)のサイズ、等を含む。コントローラ4は、ライト要求に含まれるQoSドメインIDに割り当てられている書き込み先記憶領域にライトデータをシーケンシャルに書き込む。そして、コントローラ4は、ライトデータが書き込まれた物理記憶位置を示す物理アドレス(ブロックアドレス、オフセット)をホスト2に通知する。第3タイプSSDにおいては、L2Pテーブル31は、コントローラ4ではなく、ホスト2によって管理される。
【0056】
リードコマンドはデータをNAND型フラッシュメモリ5からデータを読み出すコマンド(リード要求)である。
【0057】
第1タイプSSDおよび第2タイプSSDの各々に発行されるリードコマンドは、読み出すべきデータの論理アドレス(開始LBA)、このデータのサイズ、このデータが転送されるべきホスト2のリードバッファ内の位置を示すデータポインタ(バッファアドレス)、等を含む。
【0058】
第3タイプSSDに発行されるリードコマンドは、読み出すべきデータが格納されている物理記憶位置を示す物理アドレス、このデータのサイズ、このデータが転送されるべきホスト2のリードバッファ内の位置を示すデータポインタ(バッファアドレス)、等を含む。
【0059】
アロケートコマンドは、複数の第1の記憶領域(複数のQLCブロック)の一つを書き込み先記憶領域(書き込み先QLCブロック)として割り当てるコマンド(要求)である。書き込み先QLCブロックは、データの書き込みが可能な書き込み先記憶領域として割り当てられているQLCブロック、つまりオープンされているQLCブロックを意味する。zoned namespaceで使用されるゾーンオープンコマンドは、このアロケートコマンドの一例である。
【0060】
インアクティブコマンドは、書き込み先記憶領域(書き込み先QLCブロック)状態を、データの書き込みが可能な書き込み先記憶領域として割り当てられている第1の状態(オープン状態)から、書き込みが中断された第2の状態(インアクティブ状態)に遷移させるためのコマンド(要求)である。zoned namespaceで使用されるゾーンクローズコマンドは、このインアクティブコマンドの一例である。
【0061】
デアロケートコマンドは、データで満たされている第1の記憶領域(QLCブロック)をフリーブロックにするためのコマンド(要求)である。zoned namespaceで使用されるゾーンリセットコマンドは、デアロケートコマンドの一例である。
【0062】
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、DMAC15、SRAM16、ECCエンコード/デコード部17を制御するように構成されたプロセッサである。CPU12は、SSD3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはSRAM16上にロードされてもよい。CPU12は、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
【0063】
CPU12は、フラッシュマネージメント部21およびディスパッチャ22として機能することができる。なお、これらフラッシュマネージメント部21およびディスパッチャ22の各々の一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
【0064】
フラッシュマネージメント部21は、複数のQLCブロックから割り当てられた第1の書き込み先QLCブロックにライトデータを書き込むためのライト要求それぞれをホスト2から受信したことに応じて、受信したライト要求の集合に関連付けられているライトデータをホスト2のライトバッファからコントローラ4の内部バッファ161に転送する。SRAM16の記憶領域の一部が内部バッファ161として使用されてもよいし、DRAM6の記憶領域の一部が内部バッファ161として使用されてもよい。
【0065】
そして、フラッシュマネージメント部21は、バッファ161に転送されたライトデータを、SLCバッファ201に書き込まずに、メモリセル当たりに4ビットを書き込む書き込みモード(例えば、フォギー・ファインモード)で第1の書き込み先QLCブロックに書き込む。
【0066】
第1の書き込み先QLCブロックを、データの書き込みが可能な書き込み先ブロックとして割り当てられている第1の状態(オープン状態)から、書き込みが中断された第2の状態(インアクティブ状態)に遷移させるための第1の要求(インアクティベートコマンド)をホスト2から受信した場合、フラッシュマネージメント部21は、第1の書き込み先QLCブロックに対する受信済みのライト要求のうち内部バッファ161にライトデータが転送されていない第1のライト要求それぞれに関連付けられている残りのライトデータ(未転送ライトデータ)をホスト2のライトバッファから内部バッファ161に転送する。
【0067】
そして、フラッシュマネージメント部21は、内部バッファ161に転送された残りのライトデータ(未転送ライトデータ)をメモリセル当たりに1ビットを書き込む書き込みモードでSLCバッファ201に書き込み、第1の書き込み先QLCブロックの状態を第1の状態(オープン状態)から第2の状態(インアクティブ状態)に遷移させる。残りのライトデータ(未転送ライトデータ)をSLCバッファ201に書き込むために必要な時間は短いので、第1の書き込み先QLCブロック用にホスト2のライトバッファに確保されていた領域を迅速に解放することが可能となる。
【0068】
SLCバッファ201に書き込まれた残りのライトデータ(未転送ライトデータ)は、第1の書き込み先QLCブロックが再びオープンされた後に、第1の書き込み先QLCブロックに書き込まれる。
【0069】
このように、第1の書き込み先QLCブロックを、書き込みが中断された第2の状態(インアクティブ状態)に遷移させるための第1の要求(インアクティベートコマンド)が受信される前の期間においては、ライトデータはSLCバッファ201に書き込まれることなく第1の書き込み先QLCブロックにのみ書き込まれる。
【0070】
したがって、全てのライトデータをSLCバッファ201と第1の書き込み先QLCブロックの両方に書き込むための処理を実行するケース(A)や、全てのライトデータをまずSLCバッファ201のみに書き込み、SSDのアイドル時などにSLCバッファ201から第1の書き込み先QLCブロックにライトデータを書き戻すための処理を実行するケース(B)に比べ、SLCバッファ201に書き込まれるデータの総量を削減することができる。
【0071】
この結果、SLCバッファ201として割り当てることが必要なブロック(SLCブロック)の数を削減することが可能となるので、これによってQLC領域202として割り当てることが可能なブロック(QLCブロック)の数を増やすことが可能となる。
【0072】
ディスパッチャ22は、ホスト2のサブミッションキューからコマンドそれぞれを取得する。コントローラ4においては、オープンされている複数のQLCブロック(複数の書き込み先QLCブロック)それぞれに対応する複数のコマンドキューが管理されている。ディスパッチャ22は、これら取得したコマンドをライトコマンド(ライト要求)群とライトコマンド以外の他のコマンド群とに分類する。
【0073】
さらに、ディスパッチャ22は、ライトコマンド群のみを複数の書き込み先QLCブロックにそれぞれ対応する複数のグループに分類する。そして、ディスパッチャ22は、各グループに属するライトコマンド群を、このグループに対応するコマンドキューに格納する。
【0074】
例えば、ディスパッチャ22は、書き込み先QLCブロック#1にデータを書き込むための各ライトコマンドを書き込み先QLCブロック#1に対応するコマンドキューに格納し、書き込み先QLCブロック#2にデータを書き込むための各ライトコマンドを書き込み先QLCブロック#2に対応するコマンドキューに格納する。
【0075】
フラッシュマネージメント部21は、書き込み先QLCブロック#1にデータを書き込むためのライトコマンドの集合に関連付けられたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達した場合、最小書き込みサイズを有する、これらライトコマンドの集合に関連付けられたライトデータを、ホスト2のライトバッファから内部バッファ161に転送する。
【0076】
また、フラッシュマネージメント部21は、書き込み先QLCブロック#2にデータを書き込むためのライトコマンドの集合に関連付けられたライトデータの総サイズがNAND型フラッシュメモリ5の最小書き込みサイズに達した場合、最小書き込みサイズを有する、これらライトコマンドの集合に関連付けられたライトデータを、ホスト2のライトバッファから内部バッファ161に転送する。
【0077】
このように、ライトデータを最小書き込みサイズでホスト2のライトバッファから内部バッファ161に転送することにより、NAND型フラッシュメモリ5に書き込むことが出来ない最小書き込みサイズ未満の多数のライトデータによって内部バッファ161が専有されてしまうことを抑制することが可能となり、これによって確保することが必要とされる内部バッファ161の容量を削減することが可能となる。
【0078】
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。
【0079】
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域の一部は、L2Pテーブル31およびブロック管理テーブル32用の記憶領域として利用されてもよい。ブロック管理テーブル32は複数のQLCブロックそれぞれに対応する管理情報の格納に使用される。なお、内部バッファ161はSRAM16ではなく、DRAM6内に配置されていてもよい。
【0080】
DMAC15は、CPU12の制御の下、ホスト2のライトバッファと内部バッファ161との間のデータ転送を実行する。ホスト2のライトバッファから内部バッファ161にライトデータを転送すべき場合には、CPU12は、ホスト2のライトバッファ内の位置を示す転送元アドレス、転送すべきライトデータのサイズ、内部バッファ161内の位置を示す転送先アドレスをDMAC15に対して指定する。
【0081】
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
【0082】
図6は、SSD3において実行されるフォギー・ファイン書き込み動作を説明するための図である。
【0083】
ここでは、4つのワード線を往復する場合のフォギー・ファイン書き込み動作を例示する。書き込み先QLCブロック#1に対するフォギー・ファイン書き込み動作は以下のように実行される。
【0084】
(1)まず、4ページ(P0~P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に転送され、書き込み先QLCブロック#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0~P3)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0085】
(2)次いで、次の4ページ(P4~P7)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先QLCブロック#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4~P7)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0086】
(3)次いで、次の4ページ(P8~P11)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先QLCブロック#1内のワード線WL2に接続された複数のメモリセルに、これら4ページ(P8~P11)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0087】
(4)次いで、次の4ページ(P12~P15)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先QLCブロック#1内のワード線WL3に接続された複数のメモリセルに、これら4ページ(P12~P15)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0088】
(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から正しく読み出すことが可能となる。
【0089】
(6)次いで、次の4ページ(P16~P19)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先QLCブロック#1内のワード線WL4に接続された複数のメモリセルに、これら4ページ(P16~P19)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0090】
(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から正しく読み出すことが可能となる。
【0091】
(8)次いで、次の4ページ(P20~P23)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先QLCブロック#1内のワード線WL5に接続された複数のメモリセルに、これら4ページ(P20~P23)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0092】
(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から正しく読み出すことが可能となる。
【0093】
図7は、比較例に係るSSDにおいて実行される、QLCブロックとSLCバッファを制御する動作を説明するための図である。
(ケースA)
比較例に係るSSDにおいては、ホストから受信された全てのライトデータがQLCブロックとSLCバッファ201の両方に書き込まれる。
【0094】
すなわち、まず、書き込み先QLCブロック#1または書き込み先QLCブロック#2に対するライト要求それぞれがホスト2から受信される度、これら受信されたライト要求それぞれに関連付けられたライトデータがホスト2から受信され、そして内部バッファ161に格納される。
【0095】
内部バッファ161に格納されたライトデータはSLCバッファ201に書き込まれると共に、書き込み先QLCブロック#1(または書き込み先QLCブロック#2)にも書き込まれる。あるライト要求に対応するライトデータがSLCバッファ201に書き込まれた時点で、このライト要求の完了(Completion)を示す応答がホストに返される。
【0096】
SLCバッファ201に格納されたライトデータは、例えば、停電のようなパワーロスによって失われる内部バッファ161の内容を復元する目的のために使用される。
【0097】
(ケースB)
比較例に係るSSDにおいては、まず、ホストから受信された全てのライトデータがSLCバッファ201にのみ書き込まれる。そしてSSDのアイドル時などに、SLCバッファ201に格納されているライトデータが書き込み先QLCブロック#1(または書き込み先QLCブロック#2)に書き戻される。
【0098】
比較例に係るSSDにおいては、ケースA,Bのいずれにおいても、QLC領域202に書き込まれるデータの総量と同じ量のデータをSLCバッファ201に書き込むことが必要となる。このため、確保することが必要なSLCバッファ201の容量が増える傾向となり、これによってNAND型フラッシュメモリ5の記憶領域の利用効率が低下される場合がある。
【0099】
図8は、実施形態に係るSSD3において実行される、QLCブロックとSLCバッファを制御する動作を説明するための図である。
【0100】
実施形態に係るSSD3においては、書き込み先QLCブロック#1(または書き込み先QLCブロック#2)を書き込みが中断されたインアクティブ状態に遷移させるためのインアクティベートコマンド(インアクティベート要求)をホスト2から受信するまでは、ホスト2のライトバッファ51から受信される全てのライトデータは、メモリセル当たりに1ビットを書き込む書き込みモード(例えばフォギー・ファイン書き込み動作)で、内部バッファ161を介して書き込み先QLCブロック#1(または書き込み先QLCブロック#2)にのみ書き込まれ、SLCバッファ201には書き込まれない。
【0101】
書き込み先QLCブロック#1および書き込み先QLCブロック#2の各々に対するデータの書き込みは、例えば、フォギー・ファイン書き込み動作によって実行される。あるワード線に接続された複数のメモリセルにライトデータを書き込むためのフォギー書き込み動作およびファイン書き込み動作の双方が終了すると、このライトデータに対応する各ライト要求の完了(Completion)を示す通知がホストに返される。
【0102】
書き込み先QLCブロック#1(または書き込み先QLCブロック#2)を書き込みが中断されたインアクティブ状態に遷移させるためのインアクティベートコマンド(インアクティベート要求)をホスト2から受信すると、内部バッファ161に未転送のライトデータがホスト2のライトバッファ51から内部バッファ161に転送される。
【0103】
例えば、書き込み先QLCブロック#1に対するインアクティベートコマンド(インアクティベート要求)がホスト2から受信された場合、書き込み先QLCブロック#1にデータを書き込むための受信済みのライト要求のうち内部バッファ161にライトデータが転送されていないライト要求それぞれに関連付けられている残りのライトデータが、ホスト2のライトバッファ51から内部バッファ161に転送される。例えば、書き込み先QLCブロック#1にデータを書き込むための受信済みのライト要求がライト要求W1~ライト要求W5であり、内部バッファ161にライトデータが転送されていないライト要求がライト要求W4とライト要求W5である場合には、ライト要求W4に関連付けられたライトデータとライト要求W5に関連付けられたライトデータとが残りのライトデータとしてホスト2のライトバッファ51から内部バッファ161に転送される。
【0104】
そして、内部バッファ161に転送された残りのライトデータは、書き込み先QLCブロック#1には書き込まれず、メモリセル当たりに1ビットを書き込む書き込みモードでSLCバッファ201のみに書き込まれる。残りのライトデータがSLCバッファ201に書き込まれると、書き込み先QLCブロック#1の状態はオープン状態からインアクティブ状態に遷移される。さらに。残りのライトデータに対応するライト要求それぞれの完了を示す応答と、インアクティベート要求の完了を示す応答とがホスト2に返される。
【0105】
インアクティベート要求の完了を示す応答の受信に応じて、ホスト2は、書き込み先QLCブロック#1用に確保されていたライトバッファ51内の領域を解放することが可能となり、例えば、この領域を新たにオープンされる書き込み先QLCブロック用の領域として再利用することが可能となる。
【0106】
インアクティブ状態であるQLCブロック#1にデータを再び書くためのライト要求がホスト2から受信されると、QLCブロック#1がコントローラ4によって書き込み先QLCブロックとして再びオープンされる。そして、SLCバッファ201に格納されている上述の残りのデータがSLCバッファ201から読み出され、内部バッファ161に書き込まれる。SLCバッファ20に書き込まれた残りのデータは、このデータが書き込み先QLCブロック#1に書き込み可能となったタイミングで書き込み先QLCブロック#1に書き込まれる。
【0107】
図9は、SSD3において実行される書き込み動作を示すブロック図である。
【0108】
以下では、複数の第1の記憶領域の各々が、複数の物理ブロックを含むブロックグループ(QLCスーパーブロック:QLC SB)によって実現されている場合を想定する。
【0109】
SSD3のコントローラ4においては、オープンされている複数の書き込み先QLCスーパーブロック(QLC SB)それぞれに対応する複数のコマンドキューが管理されている。コマンドキュー#1は、書き込み先QLCスーパーブロック(QLC SB#1)にデータを書き込むためのライト要求それぞれを格納するために使用される。コマンドキュー#2は、書き込み先QLCスーパーブロック(QLC SB#2)にデータを書き込むためのライト要求それぞれを格納するために使用される。コマンドキュー#3は、書き込み先QLCスーパーブロック(QLC SB#3)にデータを書き込むためのライト要求それぞれを格納するために使用される。コマンドキュー#nは、書き込み先QLCスーパーブロック(QLC SB#n)にデータを書き込むためのライト要求それぞれを格納するために使用される。
【0110】
ホスト2のサブミッションキュー(SQ)に格納されているコマンドそれぞれは、ディスパッチャ22によってフェッチされる。そして、書き込み先QLCスーパーブロック(QLC SB#1)にデータを書き込むための各ライト要求はディスパッチャ22によってコマンドキュー#1に格納され、書き込み先QLCスーパーブロック(QLC SB#2)にデータを書き込むための各ライト要求はディスパッチャ22によってコマンドキュー#2に格納され、書き込み先QLCスーパーブロック(QLC SB#3)にデータを書き込むための各ライト要求はディスパッチャ22によってコマンドキュー#3に格納され、書き込み先QLCスーパーブロック(QLC SB#n)にデータを書き込むための各ライト要求はディスパッチャ22によってコマンドキュー#nに格納される。
【0111】
コマンドキューの各々について、格納されているライト要求の集合に関連付けられているライトデータの総サイズがフラッシュマネージメント部21によってチェックされる。そして、あるコマンドキューに格納されているライト要求の集合に関連付けられているライトデータの総サイズがページサイズのような最小書き込みサイズに達すると、フラッシュマネージメント部21の制御の下、最小書き込みサイズを有するライトデータが、DMAC15によってホスト2のライトバッファ51から内部バッファ161に転送される。
【0112】
これにより、複数の書き込み先QLCスーパーブロックそれぞれに対するページサイズ未満の複数のライトデータで内部バッファ161が専有されてしまうことを抑制することができるので、必要な内部バッファ161の容量を削減することが出来る。
【0113】
また、ホスト2のライトバッファ51から内部バッファ161へのライトデータの転送は、ライト要求がフェッチされた順序ではなく、NAND型フラッシュメモリ5にライトデータを書き込む順序と同じ順序で実行される。これにより、複数の書き込み先QLCスーパーブロックがオープンされている状態においても、例えば、所望の書き込み先QLCスーパーブロックに書き込むべきライトデータをホスト2のライトバッファ51から効率よく取得することができる。
【0114】
図10は、SSD3において実行される書き込み動作のシーケンスと読み出し動作のシーケンスを示すブロック図である。
【0115】
本実施形態においては、個々のQLCスーパーブロック(QLC SB)の状態は、オープン状態(オープンスーパーブロック)、インアクティブ状態(インアクティブスーパーブロック)、クローズ状態(クローズスーパーブロック)、フリー状態(インアクティブスーパーブロック)に大別される。個々のQLCスーパーブロック(QLC SB)には、互いに異なる論理アドレス範囲がそれぞれ割り当てられていてもよい。ホスト2は、各QLCスーパーブロックに対するデータの書き込みをシーケンシャルに実行するように構成されていてもよい。
【0116】
オープン状態のQLCスーパーブロックは書き込み先記憶領域として使用されているQLCスーパーブロックである。オープン状態の各QLCスーパーブロックは、オープンスーパーブロックリスト101によって管理される。
【0117】
インアクティブ状態のQLCスーパーブロックは書き込みが中断されたQLCスーパーブロックである。インアクティブ状態の各QLCスーパーブロックにおいては、データの書き込みに利用可能な幾つかのページが残っている。インアクティブ状態の各QLCスーパーブロックは、インアクティブスーパーブロックリスト102によって管理される。
【0118】
クローズ状態のQLCスーパーブロックはそのスーパーブロック全体がデータで満たされているQLCスーパーブロックである。クローズ状態の各QLCスーパーブロックは、クローズスーパーブロックリスト103によって管理される。
【0119】
フリー状態のQLCスーパーブロックは有効データを含まない状態にリセットされたQフリーQLCスーパーブロックである。フリー状態の各QLCスーパーブロックは、フリースーパーブロックリスト104によって管理される。
【0120】
ホスト2はアロケート要求をSSD3に送信する処理を繰り返し実行することにより、複数のQLCスーパーブロックをオープンすることができる。
【0121】
フラッシュマネージメント部21がオープンされているQLCスーパーブロック(例えば、QLC SB#1)にデータを書き込むためのライト要求それぞれをホスト2から受信した場合、フラッシュマネージメント部21は、DMAC15を使用して、受信したライト要求の集合に関連付けられているライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。そして、フラッシュマネージメント部21は、内部バッファ161に転送されたライトデータを、SLCバッファ201に書き込まずに、QLCスーパーブロック(QLC SB#1)のみに書き込む。
【0122】
また、フラッシュマネージメント部21がオープンされているQLCスーパーブロック(例えば、QLC SB#2)にデータを書き込むためのライト要求それぞれをホスト2から受信した場合、フラッシュマネージメント部21は、DMAC15を使用して、受信したライト要求の集合に関連付けられているライトデータをホスト2のライトバッファ51から内部バッファ161に転送する。そして、フラッシュマネージメント部21は、内部バッファ161に転送されたライトデータを、SLCバッファ201に書き込まずに、QLCスーパーブロック(QLC SB#2)のみに書き込む。
【0123】
あるオープンされているQLCスーパーブロックに対するデータの書き込みをしばらくの間実行しない場合、ホスト2は、このQLCスーパーブロック用に確保されているホスト2のライトバッファ51内の領域を解放できるようにするために、このQLCスーパーブロックをインアクティブ状態に遷移させるためのインアクティブ要求をSSD3に送信する。
【0124】
QLCスーパーブロック(QLC SB#1)をインアクティブ状態に遷移させるためのインアクティブ要求をホスト2から受信した場合、フラッシュマネージメント部21は、QLCスーパーブロック(QLC SB#1)に対する受信済みのライト要求のうち内部バッファ161にライトデータが転送されていないライト要求それぞれに関連付けられている残りのライトデータを、DMAC15を使用して、ホスト2のライトバッファ51から内部バッファ161に転送する。フラッシュマネージメント部21は、内部バッファ161に転送された残りのライトデータを、QLCスーパーブロック(QLC SB#1)に書き込まずに、SLCバッファ201に書き込む。
【0125】
なお、QLC SB#1への書き込みが終了していないライトデータ、例えば、フォギー書き込み動作のみが終了しておりファイン書き込み動作が終了していないライトデータ、が内部バッファ161に存在する場合には、フラッシュマネージメント部21は、このライトデータもQLCスーパーブロック(QLC SB#1)に書き込まずに、SLCバッファ201に書き込む。そして、フラッシュマネージメント部21は、QLCスーパーブロック(QLC SB#1)をオープンスーパーブロックリスト101から取り除き、インアクティブスーパーブロックリスト102に加える。
【0126】
SLCバッファ201は複数のSLCブロックを含んでいてもよい。残りのライトデータは、SLCバッファ201内のオープンされている書き込み先SLCブロックにメモリセル当たりに1ビットを書き込む書き込みモードで書き込まれる。書き込み先SLCブロック全体がデータで満たされると、この書き込み先SLCブロックはクローズされたSLCブロックとして管理される。
【0127】
クローズされたSLCブロックの集合のうち、最も古いSLCブロックはGCのためのコピー元ブロックとして選択される。そして、コピー元ブロックに格納されているデータはGC用の書き込み先SLCブロックにコピーされ、コピー元ブロックはフリーSLCブロックとして解放される。
【0128】
インアクティブ状態のQLCスーパーブロック(QLC SB#1)は、データを書き込むために利用可能なページを含んでいる。したがって、ホスト2は、必要に応じて、インアクティブ状態のQLCスーパーブロック(QLC SB#1)内の利用可能な残りのページにデータを書き込むためのライト要求をSSD3に送信することができる。
【0129】
QLCスーパーブロック(QLC SB#1)にデータを書き込むための一つ以上のライト要求をホスト2から受信すると、フラッシュマネージメント部21は、SLCバッファ201に格納されているQLCスーパーブロック(QLC SB#1)用のライトデータをSLCバッファ201から読み出し、読み出したライトデータを内部バッファ161に書き込む。これにより、QLCスーパーブロック(QLC SB#1)用のライトデータはSLCバッファ201から内部バッファ161に転送される。そして、ホスト2から受信される新たなライトデータとSLCバッファ201から内部バッファ161に転送されたライトデータとがQLCスーパーブロック(QLC SB#1)に書き込まれる。
【0130】
また、リード要求をホスト2から受信した場合、フラッシュマネージメント部21は、リード要求によって指定されたリード対象データが複数のQLCスーパーブロック、SLCバッファ201、または内部バッファ161のいずれに記憶されているかを判定する。
【0131】
リード対象データが複数のQLCスーパーブロックのうちの一つのQLCスーパーブロックに記憶されている場合、フラッシュマネージメント部21は、リード対象データをこの一つのQLCスーパーブロックから読み出し、読み出したリード対象データをホスト2に送信する。この場合、フラッシュマネージメント部21は、DMAC15を使用して、読み出したリード対象データをホスト2のリードバッファに転送する。
【0132】
リード対象データが複数のQLCスーパーブロックのいずれにも記憶されておらず、SLCバッファ201に記憶されている場合、フラッシュマネージメント部21は、リード対象データをSLCバッファ201から読み出し、読み出したリード対象データをホスト2に送信する。この場合、フラッシュマネージメント部21は、DMAC15を使用して、読み出したリード対象データをホスト2のリードバッファに転送する。
【0133】
リード対象データが複数のQLCスーパーブロック、SLCバッファ201、内部バッファ161のいずれにも記憶されておらず、ホスト2のライトバッファ51に記憶されている場合には、フラッシュマネージメント部21は、リード対象データがSSD3内に存在しないことを示す情報をホスト2に通知する。
【0134】
あるいは、リード対象データが複数のQLCスーパーブロック、SLCバッファ201、内部バッファ161のいずれにも記憶されておらず、ホスト2のライトバッファ51に記憶されている場合には、フラッシュマネージメント部21は、リード対象データが記憶されているホスト2のライトバッファ51内の位置を示す情報をホスト2に通知してもよい。
【0135】
データで満たされているクローズ状態のQLCスーパーブロックに格納されている全てのデータが利用されない不要データになった場合、ホスト2は、このQLCスーパーブロックに対するデアロケート要求をSSD3に送信することができる。このデアロケート要求をホスト2から受信したことに応じて、コントローラ4は、このQLCスーパーブロックの状態をクローズ状態からフリー状態に遷移させる。
【0136】
ホスト2がこのQLCスーパーブロックにデータを書き込むことを望む場合、ホスト2は、このQLCスーパーブロックに対するアロケート要求をSSD3に送信する。このアロケート要求をホスト2から受信したことに応じて、コントローラ4は、このQLCスーパーブロックに対する消去動作を実行することによってこのQLCスーパーブロックをオープンし、このQLCスーパーブロックの状態をフリー状態からオープン状態に遷移させる。
【0137】
図11は、SSD3において実行される書き込み動作の手順とオープンされているQLCスーパーブロックをインアクティブ状態に遷移させる動作の手順を示すフローチャートである。
【0138】
ここでは、複数のQLCスーパーブロックから割り当てられた書き込み先QLCスーパーブロック(QLC SB#1)にライトデータを書き込む場合を例示するが、複数の書き込み先QLCスーパーブロックが割り当てられている場合には、書き込み先QLCスーパーブロック(QLC SB#1)にライトデータを書き込む処理と同様の処理が複数の書き込み先QLCスーパーブロックそれぞれに対して実行される。各書き込み先QLCスーパーブロックはオープンされているQLCスーパーブロックである。
【0139】
SSD3のコントローラ4は、書き込み先QLCスーパーブロック(QLC SB#1)にデータを書き込みもためのライト要求それぞれをホスト2から受信する(ステップS11)。
【0140】
コントローラ4は、受信したライト要求の集合に関連付けられているライトデータをホスト2のライトバッファ51から内部バッファ161にページサイズ単位で転送する(ステップS12)。
【0141】
コントローラ4は、内部バッファ161に転送されたライトデータを、メモリセル当たりに4ビットを書き込む書き込みモード、例えばフォギー・ファイン書き込み動作で、書き込み先QLCスーパーブロック(QLC SB#1)に書き込む(ステップS13)。
【0142】
書き込み先QLCスーパーブロック(QLC SB#1)をインアクティブ状態に遷移させるためのインアクティベート要求がホスト2から受信されるまでは、ステップS11~S13の処理が繰り返し実行される。
【0143】
書き込み先QLCスーパーブロック(QLC SB#1)をインアクティブ状態に遷移させるためのインアクティベート要求をホスト2から受信した場合(ステップS14のYES)、コントローラ4は、書き込み先QLCスーパーブロック(QLC SB#1)に対する受信済みのライト要求に関連付けられている未転送のライトデータ、つまりQLC SB#1に対する受信済みのライト要求のうち内部バッファ161にライトデータが転送されていないライト要求それぞれに関連付けられている残りのライトデータ(未転送のライトデータ)をホスト2ライトバッファ51から取得し、取得したライトデータを内部バッファ161に格納する(ステップS15)。
【0144】
コントローラ4は、インアクティブ状態に遷移させるべき書き込み先QLCスーパーブロックに書き込むべき残りのライトデータを不揮発化する処理を迅速に実行するために、取得したライトデータを書き込み先QLCスーパーブロック(QLC SB#1)に書き込まずに、SLCバッファ201に書き込み(ステップS16)、そして書き込み先QLCスーパーブロック(QLC SB#1)の状態をインアクティブ状態に遷移させる(ステップS17)。
【0145】
次いで、コントローラ4は、残りのライトデータ(未転送のライトデータ)に対応する各ライト要求の完了を示す応答と、インアクティベート要求の完了を示す応答をホスト2に送信する(ステップS18)。これにより、ホスト2は、書き込み先QLCスーパーブロック(QLC SB#1)用に確保されていたホスト2のライトバッファ51内の領域を解放することが可能となる。
【0146】
図12は、インアクティブ状態のQLCスーパーブロックを再オープンする動作の手順を示すフローチャートである。
【0147】
インアクティブ状態のQLCスーパーブロック(QLC SB#1)にデータを書き込むためのライト要求をホスト2から受信した場合(ステップS21のYES)、コントローラ4は、QLCスーパーブロック(QLC SB#1)を再オープンして、QLCスーパーブロック(QLC SB#1)の状態をインアクティブ状態からオープン状態に遷移させる(ステップS22)。
【0148】
そして、コントローラ4は、SLCバッファ201に格納されているQLCスーパーブロック(QLC SB#1)用のライトデータをSLCバッファ201から内部バッファ161に転送し(ステップS23)、SLCバッファ201から内部バッファ161に転送されたライトデータとホスト2のライトバッファ51から新たに転送されるライトデータとをQLCスーパーブロック(QLC SB#1)に書き込むための書き込み処理を実行する(ステップS24)。
【0149】
図13は、比較例に係るSSDにおいて必要となるSLCバッファ容量と、実施形態に係るメモリシステムにおいて必要となるSLCバッファ容量を説明するための図である。
【0150】
図13の(A)に示されているように、比較例に係るSSDにおいては、QLC領域202に書き込まれる全てのデータがSLCバッファ201にも書き込まれる。
【0151】
ホスト2がQLC領域202の各QLCスーパーブロックに対する書き込みをシーケンシャルに実行するケースにおいては、QLC領域202の各QLCスーパーブロックは無効データを含まない。したがって、QLC領域202に対するGCは実行されない。
【0152】
一方、SLCバッファ201は複数のQLCスーパーブロックによって共有されているので、SLCバッファ201に対するGCは必要となる。
【0153】
例えば、ホスト2によってQLC領域202に書き込まれるデータの総量がA[TBW:TeraBytes Written]である場合を想定する。この場合、SLCバッファ201に書き込むことが必要なデータの総量は、A×(WA)[TBW]になる。ここで、WAはSLCバッファ201のライトアンプリフィケーションを表している。SLCバッファ201に対するGCが必要になるため、SLCバッファ201のライトアンプリフィケーションWAは1よりも大きな値である。
【0154】
図13の(B)に示されているように、本実施形態のSSD3においては、インアクティベート要求がホスト2から受信された場合にのみ、SLCバッファ201へのデータの書き込みが実行される。
【0155】
例えば、ホスト2によってQLC領域202に書き込まれるデータの総量がA[TBW]、A[TBW]のうちQLC領域202に直接的に書き込まれるデータの総量がC[TBW]、全てのインアクティベート要求によってSLCバッファ201に書き込まれるデータの総量がB[TBW]である場合を想定する。
【0156】
A[TBW]、B[TBW]、C[TBW]の間には以下の関係が成立する。
【0157】
A=B+C
C>0
B<A
QLC領域202に書き込まれるデータの総量がA(=B+C)[TBW]である。
【0158】
一方、SLCバッファ201に書き込むことが必要なデータの総量は、B×(WA)[TBW]になる。BはAよりも少ないので、本実施形態では、SLCバッファ201に書き込むことが必要なデータの総量を削減することができる。
【0159】
SLCバッファ201には、下記のW1以上であり、且つW2以上である容量が割り当てられる。
W1=最大インアクティブカウント×SLCバッファのWA×最小書き込みサイズ/SLCバッファに許容される最大消去回数
ここで、最大インアクティブカウントは、SSD3の生涯においてQLCスーパーブロックをインアクティブ状態に遷移させる動作を実行可能な最大回数を示す。
【0160】
W2=同時に存在可能なインアクティブ状態のQLCスーパーブロックの最大数×(1+オーバープロビジョニング量)×最小書き込みサイズ
W1は、SLCバッファ201に対して要求される総書き込み量(TBW)を満たすために必要なSLCバッファ容量を示している。また、W2は、同時に存在しているインアクティブ状態のQLCスーパーブロックの数が最大になるワーストケースにおいて必要なSLCバッファ容量を示している。
【0161】
なお、W1>W2である場合には、SLCバッファ容量を削減し、ライト性能を改善できる。
【0162】
また、SLCバッファ容量に基づいて、QLC領域202として利用できる最大容量を以下のように決定できる。
(NAND型フラッシュメモリ5の総容量-SLCバッファ容量)×メモリセル当たりのビット数
ここでは、メモリセル当たりのビット数は4ビットである。
【0163】
図14は、ブロック管理テーブル33のデータ構造の例を示す。
【0164】
ブロック管理テーブル33は、NAND型フラッシュメモリ5内の全てのQLCスーパーブロック(ここでは、QLC SB#1~QLC SB#n)にそれぞれ対応する複数の領域を含む。これらQLC SB#1~QLC SB#nには、少なくとも、オープン状態のQLCスーパーブロック、インアクティブ状態のQLCスーパーブロック、ブロック全体がデータで満たされているクローズ状態のQLCスーパーブロックなどが含まれる。
【0165】
ブロック管理テーブル33内の各領域は、この領域に対応するQLCスーパーブロックに関するメタデータを格納する。
【0166】
例えば、QLC SB#1に対応する領域のメタデータは、(1)QLC SB#1内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un-readable pointer:URP)、(2)QLC SB#1内の次の書き込み先物理アドレスを示すライトポインタWP、(3)QLC SB#1から読み出し不可能な各データが格納されている位置を示すアドレスリストを含む。
【0167】
QLC SB#1から読み出し不可能なデータは、QLC SB#1に対するこのデータの書き込み動作が開始されているが、このデータの書き込み動作が修了しておらず、QLC SB#1から正常に読み出すことができないデータを意味する。例えば、フォギー書き込み動作だけが了しており、ファイン書き込み動作が終了していないデータは、QLC SB#1から読み出し不可能なデータである。
【0168】
同様に、QLC SB#2に対応する領域のメタデータも、(1)QLC SB#2内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un-readable pointer:URP)、(2)QLC SB#2内の次の書き込み先物理アドレスを示すライトポインタWP、(3)QLC SB#2から読み出し不可能な各データが格納されている位置を示すアドレスリストを含む。
【0169】
同様に、QLC SB#nに対応する領域のメタデータも、(1)QLC SB#n内の読み出し不可能な最小物理アドレスを示す読み出し不可能ポインタ(un-readable pointer:URP)、(2)QLC SB#n内の次の書き込み先物理アドレスを示すライトポインタWP、(3)QLC SB#nから読み出し不可能な各データが格納されている位置を示すアドレスリストを含む。
【0170】
図15は、オープン状態またはインアクティブ状態のQLCスーパーブロックに対応する、読み出し不可能ポインタ(URP)とライトポインタ(WP)とを説明するための図である。
オープン状態またはインアクティブ状態である各QLCスーパーブロックにおいては、ライトポインタ(WP)は、次にデータが書き込まれるべきこのQLCスーパーブロック内の物理記憶位置を示す。オープン状態またはインアクティブ状態である各QLCスーパーブロックにおいては、読み出し不可能ポインタ(URP)は、上述したように、このQLCスーパーブロック内の読み出し不可能な最小物理アドレスを示す。図15においては、次にデータが書き込まれるべき物理記憶位置がページj+1であり、読み出し不可能な最小物理アドレスがページi+1である場合が例示されている。ページ0~ページiに対応するページ範囲がこのQLCスーパーブロックからデータを正常に読み出すことが可能な読み出し可能領域であり、ページi+1~最終ページkに対応するページ範囲がこのQLCスーパーブロックからデータを正常に読み出すことが不可能な読み出し不可能領域である。
【0171】
読み出し不可能領域のうち、ページi+1~ページjに対応するページ範囲は書き込み途中の領域、つまり書き込み動作が開始されているが、書き込み動作が終了していない領域であり、ページj+1~ページkに対応するページ範囲は書き込みが開始されていない未書き込み領域である。
【0172】
新たなデータはWPによって指定されるページに書き込まれる。WPによって指定されるページにデータが書き込まれると、書き込み途中の領域へのファイン書き込み動作が実行される。よって、URPが更新され、さらにWPも更新される。
【0173】
図16は、クローズ状態のQLCスーパーブロックに対応する、読み出し不可能ポインタ(URP)とライトポインタ(WP)とを説明するための図である。
クローズ状態のどのQLCスーパーブロックのURP、WPも、ブロック終端の物理アドレス(ブロック内の最終ページアドレス)よりも大きな値を示す。
【0174】
したがって、コントローラ4は、ホスト2から受信したリードコマンドによって指定された読み出し対象データの論理アドレスに割り当てられている物理記憶位置を示す物理アドレスと読み出し対象QLCスーパーブロックのURPとを比較するだけで、この読み出し対象データがこの読み出し対象QLCスーパーブロックから読み出し可能であるか否か、つまりこの物理記憶位置がこの読み出し対象QLCスーパーブロックの読み出し可能領域または読み出し不可能領域のいずれに属するかを、即座に判定することができる。
【0175】
図17は、オープン状態のQLCスーパーブロック(書き込み先記憶領域)の読み出し不可能領域(書き込み途中の領域)に書き込むべきデータそれぞれが存在している位置を示すアドレスリストを示す図である。
オープン状態の各QLCスーパーブロックにおいては、書き込み途中の領域に書き込むべきデータ毎に、このデータが存在しているホスト2のライトバッファ51内の位置を示すバッファアドレスが管理される。例えば、ページi+1に書き込むべき4つの4KBデータについては、これら4つの4KBデータがそれぞれ記憶されているホスト2のライトバッファ51内の位置を示すアドレスA1,A2,A3,A4が管理される。各ライト要求はデータポインタを含むので、ホスト2のライトバッファ51内の位置を示すアドレスを容易に管理することができる。
【0176】
なお、ホスト2のライトバッファ51から内部バッファ161に既に転送済みのライトデータについては、このデータが格納されている内部バッファ161内の位置を示すアドレスが管理されていてもよい。
【0177】
図18は、インアクティブ状態のQLCスーパーブロックの読み出し不可能領域(書き込み途中の領域)に書き込むべきデータそれぞれが存在している位置を示すアドレスリストを示す図である。
インアクティブ状態の各QLCスーパーブロックにおいては、書き込み途中の領域に書き込むべきデータ毎に、このデータが存在しているSLCバッファ201内の位置を示すバッファアドレスが管理される。例えば、ページi+1に書き込むべき4つの4KBデータについては、これら4つの4KBデータがそれぞれ記憶されているSLCバッファ201内の物理記憶位置を示す物理アドレスPBA1,PBA2,PBA3,PBA4が管理される。
【0178】
図19は、SSD3において実行される読み出し動作の手順を示すフローチャートである。
【0179】
ホスト2からリードコマンド(リード要求)を受信すると(ステップS31)、コントローラ4は、リード要求によって指定されたリード対象データの論理アドレスが割り当てられているQLCスーパーブロックをリード対象QLCスーパーブロックとして特定する(ステップS32)。ステップS32においては、コントローラ4は、L2Pテーブル31を参照することによって、リード対象QLCスーパーブロックの物理アドレス(ブロックアドレス)を特定してもよい。
【0180】
複数のQLCスーパーブロックに異なるLBA範囲がそれぞれ割り当てられている場合には、各LBA範囲と各QLCスーパーブロックとの対応関係が予め決められているので、コントローラ4は、各LBA範囲と各QLCスーパーブロックとの対応関係を示す情報に基づいて、リード対象QLCスーパーブロックを特定してもよい。
【0181】
コントローラ4は、リード対象データが複数のQLCスーパーブロック、SLCバッファ201、または内部バッファ161のいずれに記憶されているかを判定する。リード対象データが格納されるべきリード対象QLCスーパーブロック内の位置が読み出し可能領域になっているならば(ステップS33のYES)、コントローラ4は、リード対象データがリード対象QLCスーパーブロックに記憶されていると判定することができる。この場合、コントローラ4は、リード対象データをリード対象QLCスーパーブロックから読み出し、読み出したデータをホスト2に送信する(ステップS34)。
【0182】
リード対象データが格納されるべきリード対象QLCスーパーブロック内の位置が読み出し可能領域になっていないならば(ステップS33のNO)、コントローラ4は、このリード対象QLCスーパーブロックの書き込み途中の領域に対応するアドレスリスト等に基づいて、リード対象データがSLCバッファ201またはホスト2のライトバッファ51のどちらに記憶されているかを判定する(ステップS35)。
【0183】
リード対象データがSLCバッファ201に記憶されているならば(ステップS35における「SLCバッファ」)、コントローラ4は、このリード対象データをSLCバッファ201から読み出し、読み出したデータをホスト2に送信する(ステップS36)。
【0184】
リード対象データがSLCバッファ201に記憶されておらず、ホスト2のライトバッファ51に記憶されているならば(ステップS35における「ホストライトバッファ」)、コントローラ4は、このリード対象データがSSD3内に存在しないことを示す情報をホスト2に通知する(ステップS37)。この通知の受信に応じて、ホスト2は、リード対象データがホスト2のライトバッファ51に記憶されていることを認識できるので、リード対象データをホスト2のライトバッファ51から読み出すことができる。
【0185】
ステップS35ではリード対象データがSLCバッファ201またはホスト2のライトバッファ51のどちらに記憶されているかを判定する場合が例示されているが、リード対象データが複数のQLCブロック、SLCバッファ201、内部バッファ161のいずれにも記憶されておらず、ホスト2のライトバッファ51に記憶されている場合に、コントローラ4は、このリード対象データがSSD3内に存在しないことを示す情報をホスト2に通知してもよい。
【0186】
図20は、SSD3において実行される読み出し動作の別の手順を示すフローチャートである。
図20においては、図19のステップS37の処理の代わりに、ステップS40の処理が実行される。
【0187】
すなわち、リード対象データが複数のQLCブロック、SLCバッファ201、内部バッファ161のいずれにも記憶されておらず、ホスト2のライトバッファ51に記憶されている場合に、コントローラ4は、このリード対象データが記憶されているホスト2のライトバッファ51内の位置を示す情報をホスト2に通知する(ステップS40)。ホスト2は、このむ通知された位置に基づいて、リード対象データをホスト2のライトバッファ51から容易に読み出すことができる。
【0188】
以上説明したように、本実施形態によれば、ホスト2からインアクティベート要求を受信するまでは、コントローラ4は、ホスト2から受信したライトデータを、書き込み先QLCスーパーブロック(第1の書き込み先記憶領域)にのみ書き込み、SLCバッファ201には書き込まない。
【0189】
ホスト2からインアクティベート要求が受信した場合には、コントローラ4は、書き込み先QLCスーパーブロックに対する受信済みのライト要求のうちで内部バッファ161にライトデータが転送されていないライト要求それぞれに関連付けられている残りのライトデータ(未転送ライトデータ)をホスト2のライトバッファから内部バッファ161に転送する。そして、コントローラ4は、この残りのライトデータをSLCバッファ201にのみ書き込み、書き込み先QLCスーパーブロックには書き込まない。
【0190】
したがって、インアクティブ状態に遷移させるべき書き込み先QLCスーパーブロックに書き込むべき残りのライトデータを不揮発化する処理を迅速に実行することが可能となる。
【0191】
また、上述したように、ホスト2からインアクティベート要求を受信するまでは、ライトデータはSLCバッファ201には書き込まれないので、SLCバッファ201に書き込むことが必要なデータの総量を削減することができる。
【0192】
この結果、NAND型フラッシュメモリ5に含まれるブロックのうち、SLCブロックとして使用することが必要なブロックの総数を減らすことができ、これによってQLCブロックとして使用することが可能なブロックの総数を増やすことが可能となる。
【0193】
また、ホスト2のライトバッファ51は不揮発性ライトバッファによって実現してもよい。不揮発性ライトバッファは、ストレージクラスメモリ(SCM)のような不揮発性メモリによって実現されてもよい。
【0194】
ホスト2のライトバッファ51が不揮発性ライトバッファによって実現されている場合には、たとえ停電のようなパワーロスによって内部バッファ161内のデータが失われても、ホスト2の不揮発性ライトバッファからこのデータを再び取得することが可能となる。したがって、SSD3がパワーロスプロテクション機能を実行するためのキャパシタを備えていなくても、パワーロスによって内部バッファ161内のデータが失われてしまうことを防止することができる。
【0195】
また、本実施形態では、インアクティブ状態に遷移させるべき書き込み先QLCスーパーブロックに書き込むべき残りのライトデータを保存するための記憶領域としてSLCバッファ201を使用する場合を説明したが、ストレージクラスメモリ(SCM)のような不揮発性メモリを、インアクティブ状態に遷移させるべき書き込み先QLCスーパーブロックに書き込むべき残りのライトデータを保存するための記憶領域として使用してもよい。
【0196】
また、基本的には、第1の複数の記憶領域の各々が第2の記憶領域よりも高い記録密度を有しており、且つ第2の記憶領域の書き込み速度が各第1の記憶領域の書き込み速度よりも早ければ、本実施形態と同様の効果を実現できる。このため、第1の複数の記憶領域の各々にメモリセル当たりにmビットを書き込む書き込みモードでデータを書き込み、第2の記憶領域にメモリセル当たりにnビット(n<m)を書き込む書き込みモードでデータを書き込む、という形態が利用されてもよい。nは1以上の整数、mはnよりも大きい整数である。
【0197】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0198】
2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、51…ホストのライトバッファ、161…内部バッファ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20