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

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

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

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-11-29
(45)【発行日】2024-12-09
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
   G06F 12/00 20060101AFI20241202BHJP
   G06F 12/02 20060101ALI20241202BHJP
【FI】
G06F12/00 591
G06F12/00 597U
G06F12/00 560B
G06F12/02 540
【請求項の数】 16
(21)【出願番号】P 2021116445
(22)【出願日】2021-07-14
(65)【公開番号】P2023012773
(43)【公開日】2023-01-26
【審査請求日】2024-03-13
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
【審査官】太田 龍一
(56)【参考文献】
【文献】特開2021-081981(JP,A)
【文献】特開2020-035128(JP,A)
【文献】米国特許出願公開第2018/0260331(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 3/06-3/08
G06F12/00-12/128
G06F13/16-13/18
(57)【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
各々が消去動作の単位である複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記複数のブロックのうちの第1のブロック群と、前記複数のブロックのうちの第2のブロック群とを管理し、前記第1のブロック群から割り当てられた複数の書き込み先ブロックへのデータの書き込みを制御するように構成されたコントローラと、を具備し、
前記第1のブロック群に含まれるブロックの各々は第1の最小書き込みサイズを有し、前記第2のブロック群に含まれるブロックの各々は前記第1の最小書き込みサイズよりも小さい第2の最小書き込みサイズを有し、
前記コントローラは、
前記第1のブロック群に含まれる第1のブロックが書き込み先ブロックとしてオープンされた場合、前記第2のブロック群に含まれる第2のブロックを前記第1のブロックに割り当て、
前記第1のブロックを指定する1以上のライトコマンドを前記ホストから受信したことに応じて、前記1以上のライトコマンドに関連付けられた第1のデータのみを、前記第2の最小書き込みサイズ毎に前記第2のブロックに書き込み、
前記第2のブロックへの前記第1のデータの書き込みが完了したことに応じて、前記第1のデータを、前記第1の最小書き込みサイズ毎に前記第1のブロックに書き込み、
前記第2のブロックに未書き込み領域が残っている状態で、前記第1のブロックが前記第1のブロックへの書き込みが完了したデータで満たされた場合、前記第1のブロックに対する前記第2のブロックの割り当てを解除し、割り当てが解除された前記第2のブロックを前記第1のブロック以外の第1の書き込み先ブロックに割り当て、前記第1の書き込み先ブロックに書き込むべきデータのみを前記第2のブロックの前記未書き込み領域に書き込むように構成されているメモリシステム。
【請求項2】
前記コントローラは、
前記第1のブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが前記一つのワード線に後続する一つ以上のワード線へのデータの書き込み後に可能となる第1の書き込みモードを使用して、前記第1のブロックの各ワード線に接続された複数のメモリセルに前記第1の最小書き込みサイズを有するデータを書き込み、
前記第2のブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが前記第2のブロックの前記一つのワード線へのデータの書き込みのみによって可能となる第2の書き込みモードを使用して、前記第2のブロックの各ワード線に接続された複数のメモリセルに前記第2の最小書き込みサイズを有するデータを書き込むように構成されている請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記受信した一つ以上のライトコマンドに関連付けられたデータの総サイズが、前記第2の最小書き込みサイズに達した場合、前記第2の最小書き込みサイズを有する前記データを前記第2のブロックに書き込み、
前記第2のブロックへの前記第2の最小書き込みサイズを有する前記データの書き込みの完了に応じて、前記受信した一つ以上のライトコマンドの完了を示す一つ以上の完了応答を前記ホストに送信し、
前記第2のブロックに書き込まれたデータの総サイズが前記第1の最小書き込みサイズに達した場合、前記第1の最小書き込みサイズを有するデータを前記第2のブロックから読み出し、前記読み出したデータを前記第1のブロックに書き込むように構成されている請求項1に記載のメモリシステム。
【請求項4】
前記第1の書き込みモードを使用したデータの書き込みは、前記第1の最小書き込みサイズを有するデータを前記不揮発性メモリに転送することを含む第1段階の書き込み動作と、前記データを前記不揮発性メモリに再び転送することを含む第2段階の書き込み動作と、を少なくとも含む複数段階の書き込み動作によって実行され、
前記コントローラは、
前記受信した前記一つ以上のライトコマンドに関連付けられたデータの総サイズが前記第1の最小書き込みサイズに達した場合、前記第1の最小書き込みサイズを有する前記データを前記ホストに設けられたライトバッファから前記メモリシステムに含まれる第1のライトバッファに転送し、
前記第1のライトバッファに転送された前記データを前記第2のブロックに書き込み、
前記第2のブロックに書き込まれた前記データを読み出すことなく、前記第1のライトバッファに転送された前記データを、前記第1段階の書き込み動作によって、前記第1のブロックに書き込み、
前記第2のブロックへの前記データの書き込みの完了に応じて、前記受信した一つ以上のライトコマンドの完了を示す一つ以上の完了応答を前記ホストに送信するように構成されている請求項2に記載のメモリシステム。
【請求項5】
前記コントローラは、
前記第1のブロックに前記メモリシステムに含まれる複数の第2のライトバッファのうちの一つの第2のライトバッファが割り当てられている場合、前記第1のブロックに対する前記第1段階の書き込み動作に使用された前記データを前記第1のライトバッファから前記一つの第2のライトバッファに転送し、
前記第1のブロックの第1のワード線に対する前記第2段階の書き込み動作が開始可能になった場合、
前記第1のブロックの前記第1のワード線に対する前記第1段階の書き込み動作に使用されたデータを前記一つの第2のライトバッファから読み出し、
前記読み出したデータを、前記第2段階の書き込み動作によって、前記第1のブロックの前記第1のワード線に接続された前記複数のメモリセルに書き込むように構成されている請求項4に記載のメモリシステム。
【請求項6】
前記コントローラは、
前記第1のブロックに前記複数の第2のライトバッファのうちのどの第2のライトバッファも割り当てられていない場合、前記第1のブロックの前記第1のワード線に対する前記第1段階の書き込み動作に使用された前記データを前記第2のブロックから読み出し、前記読み出したデータを、前記第2段階の書き込み動作によって、前記第1のブロックに書き込むように構成されている請求項5に記載のメモリシステム。
【請求項7】
前記コントローラは、前記第1のブロックを書き込み先ブロックとしてオープンする場合、前記第1のブロックのデータ消去動作の実行から前記第1のブロックに最初の書き込みを行うまでの間に、前記第1のブロックに前記複数の第2のライトバッファのうちの一つの第2のライトバッファを割り当てるように構成され、
前記複数の第2のライトバッファにどの書き込み先ブロックにも現在割り当てられていいない未割り当ての第2のライトバッファが存在しない場合、前記コントローラは、既にオープンされている複数の書き込み先ブロックのいずれか一つから第2のライトバッファの割り当てを解除し、割り当てが解除された前記第2のライトバッファを前記第1のブロックに割り当てる請求項5に記載のメモリシステム。
【請求項8】
前記コントローラは、
既にオープンされている複数の書き込み先ブロックのうち、データが最後に書き込まれた時刻が最も古い書き込み先ブロックを選択し、
前記選択した書き込み先ブロックから第2のライトバッファの割り当てを解除し、割り当てが解除された前記第2のライトバッファを前記第1のブロックに割り当てるように構成されている請求項7に記載のメモリシステム。
【請求項9】
メモリシステムに含まれる不揮発性メモリの複数のブロックのうちの第1のブロック群と第2のブロック群とを管理する処理と、前記第1のブロック群から割り当てられた複数の書き込み先ブロックへのデータの書き込みを制御する処理と、をコントローラにより実行する制御方法であって、前記第1のブロック群に含まれるブロックの各々は第1の最小書き込みサイズを有し、前記第2のブロック群に含まれるブロックの各々は前記第1の最小書き込みサイズよりも小さい第2の最小書き込みサイズを有し、
前記コントローラが、
前記第1のブロック群に含まれる第1のブロックが書き込み先ブロックとしてオープンされた場合、前記第2のブロック群に含まれる第2のブロックを前記第1のブロックに割り当てることと、
前記第1のブロックを指定する1以上のライトコマンドをホストから受信したことに応じて、前記1以上のライトコマンドに関連付けられた第1のデータのみを、前記第2の最小書き込みサイズ毎に前記第2のブロックに書き込むことと、
前記第2のブロックへの前記第1のデータの書き込みが完了したことに応じて、前記第1のデータを、前記第1の最小書き込みサイズ毎に前記第1のブロックに書き込むことと、
前記第2のブロックに未書き込み領域が残っている状態で、前記第1のブロックが前記第1のブロックへの書き込みが完了したデータで満たされた場合、前記第1のブロックに対する前記第2のブロックの割り当てを解除し、割り当てが解除された前記第2のブロックを前記第1のブロック以外の第1の書き込み先ブロックに割り当て、前記第1の書き込み先ブロックに書き込むべきデータのみを前記第2のブロックの前記未書き込み領域に書き込むことと、を実行する、制御方法。
【請求項10】
前記第1のブロックへの書き込みは、前記コントローラが、前記第1のブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが前記一つのワード線に後続する一つ以上のワード線へのデータの書き込み後に可能となる第1の書き込みモードを使用して、前記第1のブロックの各ワード線に接続された複数のメモリセルに前記第1の最小書き込みサイズを有するデータを書き込む、ことにより実行され、
前記第2のブロックへの書き込みは、前記コントローラが、前記第2のブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが前記第2のブロックの前記一つのワード線へのデータの書き込みのみによって可能となる第2の書き込みモードを使用して、前記第2のブロックの各ワード線に接続された複数のメモリセルに前記第2の最小書き込みサイズを有するデータを書き込むことにより実行される請求項9に記載の制御方法。
【請求項11】
前記コントローラが、
前記受信した一つ以上のライトコマンドに関連付けられたデータの総サイズが、前記第2の最小書き込みサイズに達した場合、
前記第2の最小書き込みサイズを有する前記データを前記第2のブロックに書き込むことと、
前記第2のブロックへの前記第2の最小書き込みサイズを有する前記データの書き込みの完了に応じて、前記受信した一つ以上のライトコマンドの完了を示す一つ以上の完了応答を前記ホストに送信することと、
前記第2のブロックに書き込まれたデータの総サイズが前記第1の最小書き込みサイズに達した場合、前記第1の最小書き込みサイズを有するデータを前記第2のブロックから読み出し、前記読み出したデータを前記第1のブロックに書き込むことと、をさらに実行する、請求項9に記載の制御方法。
【請求項12】
前記第1の書き込みモードを使用したデータの書き込みは、前記第1の最小書き込みサイズを有するデータを前記不揮発性メモリに転送することを含む第1段階の書き込み動作と、前記データを前記不揮発性メモリに再び転送することを含む第2段階の書き込み動作と、を少なくとも含む複数段階の書き込み動作によって実行され、
前記コントローラが、
前記受信した前記一つ以上のライトコマンドに関連付けられたデータの総サイズが前記第1の最小書き込みサイズに達した場合、
前記第1の最小書き込みサイズを有する前記データを前記ホストに設けられたライトバッファから前記メモリシステムに含まれる第1のライトバッファに転送することと、
前記第1のライトバッファに転送された前記データを前記第2のブロックに書き込むことと、
前記第2のブロックに書き込まれた前記データを読み出すことなく、前記第1のライトバッファに転送された前記データを、前記第1段階の書き込み動作によって、前記第1のブロックに書き込むことと、
前記第2のブロックへの前記データの書き込みの完了に応じて、前記受信した一つ以上のライトコマンドの完了を示す一つ以上の完了応答を前記ホストに送信することと、をさらに実行する、請求項10に記載の制御方法。
【請求項13】
前記コントローラが、
前記第1のブロックに前記メモリシステムに含まれる複数の第2のライトバッファのうちの一つの第2のライトバッファが割り当てられている場合、前記第1のブロックに対する前記第1段階の書き込み動作に使用された前記データを前記第1のライトバッファから前記一つの第2のライトバッファに転送することと、
前記第1のブロックの第1のワード線に対する前記第2段階の書き込み動作が開始可能になった場合、
前記第1のブロックの前記第1のワード線に対する前記第1段階の書き込み動作に使用されたデータを前記一つの第2のライトバッファから読み出すことと、
前記読み出したデータを、前記第2段階の書き込み動作によって、前記第1のブロックの前記第1のワード線に接続された前記複数のメモリセルに書き込むことと、をさらに実行する、請求項12に記載の制御方法。
【請求項14】
前記コントローラが、
記第1のブロックに前記複数の第2のライトバッファのうちのどの第2のライトバッファも割り当てられていない場合、前記第1のブロックの前記第1のワード線に対する前記第1段階の書き込み動作に使用された前記データを前記第2のブロックから読み出し、前記読み出したデータを、前記第2段階の書き込み動作によって、前記第1のブロックに書き込むことさらに実行する、請求項13に記載の制御方法。
【請求項15】
前記コントローラが、
前記第1のブロックを書き込み先ブロックとしてオープンする場合、前記第1のブロックのデータ消去動作の実行から前記第1のブロックに最初の書き込みを行うまでの間に、前記第1のブロックに前記複数の第2のライトバッファのうちの一つの第2のライトバッファを割り当てることと、
前記複数の第2のライトバッファにどの書き込み先ブロックにも現在割り当てられていいない未割り当ての第2のライトバッファが存在しない場合、既にオープンされている複数の書き込み先ブロックのいずれか一つから第2のライトバッファの割り当てを解除し、割り当てが解除された前記第2のライトバッファを前記第1のブロックに割り当てることと、をさらに実行する、請求項13に記載の制御方法。
【請求項16】
前記第2のライトバッファの割り当てが解除される前記書き込み先ブロックは、既にオープンされている複数の書き込み先ブロックのうち、データが最後に書き込まれた時刻が最も古い書き込み先ブロックである請求項15に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。SSDは、データセンターのサーバのようなホスト計算機システムのストレージデバイスとして使用されている。
【0003】
サーバのようなホスト計算機システムにおいて使用されるストレージデバイスにおいては、不揮発性メモリの異なる書き込み先ブロックに異なるデータをそれぞれ書き込むことが必要とされる場合がある。これに対処するために、不揮発性メモリに含まれるブロックのうちの幾つかのブロックの各々を、複数の書き込み先ブロックによって共有される共有ライトバッファとして使用することが考えられる。
【0004】
この場合、共有ライトバッファとして使用される各ブロックに、異なる書き込み先ブロックにそれぞれ書き込まれるべきデータが混在して書き込まれる。これらブロックに対してガベージコレクション動作を実行することが必要となった場合、不揮発性メモリのライトアンプリフィケーションの増加が引き起こされる。
【0005】
したがって、ライトアンプリフィケーションの増加を招くことなく、複数の書き込み先ブロックに効率的にデータを書き込むことが可能な新たな技術の実現が求められている。
【先行技術文献】
【特許文献】
【0006】
【文献】米国特許第10,747,462号明細書
【文献】米国特許第11,003,385号明細書
【文献】米国特許第10,956,067号明細書
【発明の概要】
【発明が解決しようとする課題】
【0007】
本発明の一実施形態が解決しようとする課題は、ライトアンプリフィケーションの増加を招くことなく、複数の書き込み先ブロックに効率的にデータを書き込むことができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0008】
実施形態によれば、メモリシステムは、ホストに接続可能である。前記メモリシステムは、不揮発性メモリと、コントローラとを具備する。前記不揮発性メモリは、各々が消去動作の単位である複数のブロックを含む。前記コントローラは、前記不揮発性メモリに電気的に接続される。前記コントローラは、前記複数のブロックのうちの第1のブロック群と、前記複数のブロックのうちの第2のブロック群とを管理し、前記第1のブロック群から割り当てられた複数の書き込み先ブロックへのデータの書き込みを制御するように構成される。前記第1のブロック群に含まれるブロックの各々は、第1の最小書き込みサイズを有する。前記第2のブロック群に含まれるブロックの各々は、前記第1の最小書き込みサイズよりも小さい第2の最小書き込みサイズを有する。前記コントローラは、前記第1のブロック群に含まれる第1のブロックが書き込み先ブロックとしてオープンされた場合、前記第2のブロック群に含まれる第2のブロックを前記第1のブロックに割り当てる。前記コントローラは、前記第1のブロックを指定する1以上のライトコマンドを前記ホストから受信したことに応じて、前記1以上のライトコマンドに関連付けられた第1のデータのみを、前記第2の最小書き込みサイズ毎に前記第2のブロックに書き込む。前記コントローラは、前記第2のブロックへの前記第1のデータの書き込みが完了したことに応じて、前記第1のデータを、前記第1の最小書き込みサイズ毎に前記第1のブロックに書き込む。前記第2のブロックに未書き込み領域が残っている状態で、前記第1のブロックが前記第1のブロックへの書き込みが完了したデータで満たされた場合、前記コントローラは、前記第1のブロックに対する前記第2のブロックの割り当てを解除し、割り当てが解除された前記第2のブロックを前記第1のブロック以外の第1の書き込み先ブロックに割り当て、前記第1の書き込み先ブロックに書き込むべきデータのみを前記第2のブロックの前記未書き込み領域に書き込む。
【図面の簡単な説明】
【0009】
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
図2】ホストの構成例と実施形態に係るメモリシステムの構成例とを示すブロック図。
図3】ユーザデータの記憶領域として使用される複数のクワドレベルセルブロック(QLCブロック)と、疑似シングルレベルセルバッファ(pSLCバッファ)として使用される複数の疑似シングルレベルセルブロック(pSLCブロック)を示すブロック図。
図4】実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係を示すブロック図。
図5】実施形態に係るメモリシステムにおいて使用される、あるブロックグループ(スーパーブロック)の構成例を示す図。
図6】QLCブロックに適用される複数段階の書き込み動作を説明するための図。
図7】NVMe規格によって規定されたゾーンド・ネームスペースの構成例を示す図。
図8】実施形態に係るメモリシステムにおいて実行される、ライトポインタの更新動作を示す図。
図9】実施形態に係るメモリシステムにおいて使用される、複数のゾーンの各々と、複数のQLCブロックの各々との間の対応関係を保持する管理テーブルの構成例を示す図。
図10】実施形態に係るメモリシステムにおいて、書き込み先ブロックとしてオープンされた複数のQLCブロックの各々に割り当てられるpSLCブロックを示す図。
図11】実施形態に係るメモリシステムにおいて実行される、あるQLCブロックに対する書き込み動作について説明する一つ目の図。
図12】実施形態に係るメモリシステムにおいて実行される、あるQLCブロックに対する書き込み動作について説明する二つ目の図。
図13】実施形態に係るメモリシステムにおいて、あるQLCブロックに対する割り当てが解除された後に、他のQLCブロックに対して割り当てられることによって再使用されるpSLCブロックを示す図。
図14】実施形態に係るメモリシステムにおける、あるQLCブロックと、このQLCブロックに割り当てられた複数のpSLCブロックとの関係について示す図。
図15】実施形態に係るメモリシステムにおいて、テンポラリライトバッファ(TWB)を使用して実行されるフォギー書き込み動作について示す図。
図16】実施形態に係るメモリシステムにおける、複数のQLCブロックの各々に割り当てられるpSLCブロックと、ラージライトバッファ(LWB)とを示す図。
図17】実施形態に係るメモリシステムにおいて実行される二種類の書き込み動作の切り替えについて示す図。
図18】実施形態に係るメモリシステムにおいて、TWBとLWBの双方を使用して実行される書き込み動作について示す図。
図19】実施形態に係るメモリシステムにおいて、TWBを使用して実行される書き込み動作について示す図。
図20】実施形態に係るメモリシステムにおいて実行される、QLCブロックに対してpSLCブロックを割り当てる動作の手順を示すフローチャート。
図21】実施形態に係るメモリシステムにおいて実行される、あるQLCブロックに対するフォギー書き込み動作の手順を示すフローチャート。
図22】実施形態に係るメモリシステムにおいて実行される、あるQLCブロックに対するファイン書き込み動作の手順の他の例を示すフローチャート。
図23】実施形態に係るメモリシステムにおいて実行される、QLCブロックに対してLWBを割り当てる動作の手順を示すフローチャート。
図24】実施形態に係るメモリシステムにおいて、TWBを使用して実行される、あるQLCブロックに対するフォギー書き込み動作の手順を示すフローチャート。
図25】実施形態に係るメモリシステムにおいて、TWBを使用して実行される、あるQLCブロックに対するファイン書き込み動作の手順を示すフローチャート。
【発明を実施するための形態】
【0010】
以下、図面を参照して、実施形態を説明する。
図1は、実施形態に係る実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図である。
【0011】
情報処理システム1は、ホスト(ホストデバイス)2と、ストレージデバイス3とを含む。ホスト(ホストデバイス)2は、一つまたは複数のストレージデバイス3にアクセスするように構成された情報処理装置である。情報処理装置は、例えば、パーソナルコンピュータ、またはサーバコンピュータである。
【0012】
以下では、サーバコンピュータのような情報処理装置がホスト2として使用される場合を主として説明する。
【0013】
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
【0014】
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト2は、複数のストレージデバイス3に接続されていてよい。また、ホスト2は、ネットワーク70を介して複数のエンドユーザ端末(クライアント)71に接続されてもよい。ホスト2は、これらエンドユーザ端末71に対して様々なサービスを提供することができる。
【0015】
ホスト2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末71)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末71)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
【0016】
複数の仮想マシンが、このホスト2として機能する物理サーバ上で実行されてもよい。ホスト2上で実行されるこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末71)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、この仮想マシンに対応するエンドユーザ端末71によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。
【0017】
ホスト(サーバ)2においては、フラッシュトランスレーションレイヤ(ホストFTL)301も実行される。このホストFTL301は、ルックアップテーブル(LUT)を含む。LUTは、データ識別子それぞれとストレージデバイス3内の不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するために使用されるアドレス変換テーブルである。ホストFTL301は、このLUTを使用することによって、ストレージデバイス3内の不揮発性メモリ上のデータ配置を知ることができる。
【0018】
ストレージデバイス3は、半導体ストレージデバイスである。ストレージデバイス3は、不揮発性メモリにデータを書き込む。そして、ストレージデバイス3は、不揮発性メモリからデータを読み出す。
【0019】
ストレージデバイス3は、ローレベルアブストラクションを実行することができる。ローレベルアブストラクションは不揮発性メモリのアブストラクションのための機能である。ローレベルアブストラクションは、データ配置を補助する機能等を含む。データ配置を補助する機能は、例えば、ホスト2から送信されるライトコマンドに対して、ユーザデータが書き込まれるべき不揮発性メモリ内の物理的な記憶位置を示す物理アドレスを割り当てる機能と、この割り当てられた物理アドレスを上位階層(ホスト2)に通知する機能とを含む。
【0020】
ストレージデバイス3は、ホスト2にケーブルまたはネットワークを介して接続される。あるいは、ストレージデバイス3は、ホスト2に内蔵されてもよい。
【0021】
ストレージデバイス3は、ある論理インタフェース規格に準拠して、ホスト2との通信を実行する。この論理インタフェース規格は、例えば、Serial Attached SCSI(SAS)、Serial ATA(SATA)、NVM expressTM(NVMeTM)規格である。NVMe規格がこの論理インタフェース規格として使用された場合、ストレージデバイス3とホスト2との間を接続する物理的なインタフェース50としては、例えば、PCI ExpressTM(PCIeTM)、またはEthernetTMが使用される。
【0022】
次に、実施形態に係るストレージデバイスを含む情報処理システムの構成について説明する。図2は、ホストの構成例と、実施形態に係るストレージデバイスの構成例とを示すブロック図である。以下では、実施形態に係るストレージデバイスがソリッドステートドライブ(SSD)として実現されている場合を想定する。以下では、実施形態に係るストレージデバイスをSSD3として説明する。情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。
【0023】
ホスト2は、SSD3にアクセスする情報処理装置である。ホスト2は、データを書き込むための要求であるライト要求(ライトコマンド)をSSD3に送信する。また、ホスト2は、データを読み出すための要求であるリード要求(リードコマンド)をSSD3に送信する。
【0024】
ホスト2は、プロセッサ101およびメモリ102、等を含む。プロセッサ101は、ホスト2内の各コンポーネントの動作を制御するように構成されたCPU(Central Processing Unit)である。プロセッサ101は、SSD3からメモリ102にロードされるソフトウェア(ホストソフトウェア)を実行する。なお、ホスト2はSSD3以外の他のストレージデバイスを含んでいてもよい。この場合には、ホストソフトウェアは、他のストレージデバイスからメモリ102にロードされてもよい。ホストソフトウェアには、オペレーティングシステム、ファイルシステム、デバイスドライバ、アプリケーションプログラム等が含まれる。
【0025】
メモリ102は、ホスト2に設けられたメインメモリである。メモリ102は、例えば、DRAM(Dynamic Random Access Memory)のようなランダムアクセスメモリによって実現される。
【0026】
メモリ102の記憶領域の一部は、ホストライトバッファ1021として使用され得る。ホスト2は、SSD3に書き込まれるべきデータをホストライトバッファ1021に一時的に格納する。つまり、ホストライトバッファ1021は、SSD3に送信されるライトコマンドに関連付けられたデータを保持する。
【0027】
また、メモリ102の記憶領域の一部は、一つ以上のサブミッションキュー/コンプリーションキューペア(SQ/CQペア)(不図示)を格納するために使用され得る。各SQ/CQペアは、一つ以上のサブミッションキュー(SQ)とこの一つ以上のサブミッションキュー(SQ)に関連付けられた一つのコンプリーションキュー(CQ)とを含む。サブミッションキュー(SQ)は、SSD3に要求(コマンド)を発行するために使用されるキューである。コンプリーションキュー(CQ)は、コマンド完了を示す応答をSSD3から受信するために使用されるキューである。ホスト2は、各SQ/CQペアに含まれる一つ以上のサブミッションキュー(SQ)を経由してSSD3に様々なコマンドを送信する。
【0028】
SSD3は、ホスト2から送信されたライトコマンドおよびリードコマンドを受信し、受信したライトコマンドおよびリードコマンドに基づいて、不揮発性メモリに対するデータ書き込み動作およびデータ読み出し動作を実行する。不揮発性メモリとしては、例えば、NAND型フラッシュメモリが用いられる。
【0029】
SSD3は、コントローラ4と、不揮発性メモリ(例えば、NAND型フラッシュメモリ)5とを備える。SSD3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
【0030】
コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラである。コントローラ4は、System-on-a-Chip(SoC)のような回路によって実現されてもよい。コントローラ4は、チャンネルと称されるメモリバスを介してNAND型フラッシュメモリ5に電気的に接続されている。
【0031】
NAND型フラッシュメモリ5は、不揮発性の半導体メモリである。NAND型フラッシュメモリ5は、メモリセルアレイを含む。メモリセルアレイは、マトリクス状に配置された複数のメモリセルを含む。NAND型フラッシュメモリ5内のメモリセルアレイは、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、データを消去するデータ消去動作の単位である。データ消去動作は、単に、消去動作、またはイレーズとも称される。ブロックBLK0~BLKx-1の各々は、物理ブロック、フラッシュブロック、またはメモリブロックとも称される。
【0032】
ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み出し動作の単位である。
【0033】
ブロックBLK0~BLKx-1の各々は、例えば、クワドレベルセルブロック(QLCブロック)である。各QLCブロックにデータを書き込む動作においては、メモリセル当たりに4ビットのデータを書き込むことにより、4ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。
【0034】
また、複数のQLCブロックのうちのいくつかは、疑似シングルレベルセルブロック(pSLC)として使用され得る。各pSLCブロックにデータを書き込む動作においては、メモリセル当たりに1ビットのデータを書き込むことにより、1ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。
【0035】
pSLCブロックにおけるメモリセル当たりの記憶密度は1ビット(すなわち、ワード線当たり1ページ)であり、QLCブロックにおけるメモリセル当たりの記憶密度は4ビット(すなわち、ワード線当たり4ページ)である。そのため、QLCブロックの最小書き込みサイズは、pSLCブロックの最小書き込みサイズの4倍である。
【0036】
NAND型フラッシュメモリ5に対するデータの読み出し速度および書き込み速度は、記憶密度が高いほど遅く、記憶密度が低いほど速い。したがって、QLCブロックに対するデータの読み出しおよび書き込みに要する時間は、pSLCブロックに対するデータの読み出しおよび書き込みに要する時間よりも長くなる。
【0037】
NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリダイを含んでいてもよい。各NAND型フラッシュメモリダイは、二次元構造のフラッシュメモリであってもよいし、三次元構造のフラッシュメモリであってもよい。
【0038】
DRAM6は、揮発性の半導体メモリである。DRAM6は、例えば、NAND型フラッシュメモリ5に書き込むべきデータを一時的に格納するために使用される。また、DRAM6の記憶領域は、コントローラ4によって使用される様々な管理データを格納するために使用される。
【0039】
次に、コントローラ4の詳細な構成について説明する。
【0040】
コントローラ4は、ホストインタフェース(I/F)11と、CPU12と、NANDインタフェース(I/F)13と、DRAMインタフェース(I/F)14と、直接メモリアクセスコントローラ(DMAC)15と、スタティックRAM(SRAM)16と、ECC(Error Correction Code)エンコード/デコード部17とを含む。
【0041】
これらホストインタフェース11と、CPU12と、NANDインタフェース13と、DRAMインタフェース14と、DMAC15と、SRAM16と、ECCエンコード/デコード部17とは、バス10を介して相互接続される。
【0042】
ホストインタフェース11は、ホスト2との通信を実行するホストインタフェース回路である。ホストインタフェース11は、例えば、PCIeコントローラである。あるいは、SSD3がネットワークインタフェースコントローラを内蔵する構成である場合には、ホストインタフェース11は、ネットワークインタフェースコントローラの一部として実現されてもよい。ホストインタフェース11は、ホスト2から様々なコマンドを受信する。様々なコマンドは、例えば、ライトコマンド、リードコマンドである。
【0043】
CPU12は、プロセッサである。CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、DMAC15、SRAM16、ECCエンコード/デコード部17を制御する。CPU12は、SSD3への電源の供給に応じて、NAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードする。
【0044】
CPU12は、NAND型フラッシュメモリ5内のブロックの管理を実行する。NAND型フラッシュメモリ5内のブロックの管理とは、例えば、NAND型フラッシュメモリ5に含まれる不良ブロック(バッドブロック)の管理と、ウェアレベリングである。
【0045】
NANDインタフェース13は、複数の不揮発性メモリダイを制御するメモリインタフェース回路である。NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御する。NANDインタフェース13は、例えば、複数のチャンネル(Ch)を介して複数のNAND型フラッシュメモリダイに接続される。NANDインタフェース13とNAND型フラッシュメモリ5との間の通信は、例えば、Toggle NANDフラッシュインタフェースまたはオープンNANDフラッシュインタフェース(ONFI)に準拠して実行される。
【0046】
DRAMインタフェース14は、DRAMを制御するDRAMインタフェース回路である。DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御する。DRAM6の記憶領域の一部は、Z2Pテーブル(zone-to-physical address translation table)61、フリーpSLCブロックプール62、Half Used pSLCブロックプール63、QLC SAテーブル64、pSLC SAテーブル65、およびラージライトバッファ(LWB)66を格納するために利用される。
【0047】
DMAC15は、直接メモリアクセス(DMA)を実行する回路である。DMAC15は、CPU12の制御の下、ホスト2のメモリ102とDRAM6(またはSRAM16)との間のデータ転送を実行する。例えば、ホスト2のホストライトバッファ1021からSRAM16のテンポラリライトバッファ(TWB)161にライトデータを転送すべき場合には、CPU12は、ホストライトバッファ1021内の位置を示す転送元アドレス、転送すべきライトデータのサイズ、TWB161内の位置を示す転送先アドレスをDMAC15に対して指定する。TWB161は、ホスト2から受信した各ライトコマンドに関連付けられたライトデータを一時的に格納するための記憶領域である。ここでは、SRAM16の記憶領域の一部がTWB161として使用される場合を想定するが、DRAM6の記憶領域の一部がTWB161として使用されてもよい。また、TWB161は、QLCブロックの最小書き込みサイズと同じサイズまたはそれ以上のサイズの記憶領域を有していてもよい。
【0048】
ECCエンコード/デコード部17は、NAND型フラッシュメモリ5にデータをライトすべき時、このデータをエンコードすることによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部17は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う。
【0049】
次に、CPU12によって実行される処理について説明する。CPU12は、フラッシュマネージメント部121、QLCブロック制御部122、およびpSLCブロック制御部123として機能することができる。なお、フラッシュマネージメント部121、QLCブロック制御部122、およびpSLCブロック制御部123それぞれの一部または全ては、コントローラ4内の専用のハードウェアによって実現されてもよい。
【0050】
フラッシュマネージメント部121は、ホスト2から受信したライトコマンドに基づいて、ライトデータをNAND型フラッシュメモリ5に書き込む動作を制御する。ライトコマンドは、書き込むべきデータ(ライトデータ)をNAND型フラッシュメモリ5に書き込むコマンド(ライト要求)である。ホスト2から受信したライトコマンドとしては、NVMe規格で規定されたZoned Namespace(ZNS)において使用されるライトコマンドが使用され得る。
【0051】
コントローラ4がZNSをサポートするケースにおいては、フラッシュマネージメント部121は、SSD3をゾーンド・デバイス(zoned device)として動作させることができる。ゾーンド・デバイスでは、SSD3にアクセスするための論理アドレス空間を分割することによって得られる複数の論理アドレス範囲がそれぞれ割り当てられた複数のゾーンが、論理的な記憶領域として使用される。複数のゾーンの各々には、NAND型フラッシュメモリ5内の複数の物理記憶領域のうちの一つが割り当てられる。これにより、フラッシュマネージメント部121は、NAND型フラッシュメモリ5内の各物理記憶領域をゾーンとして扱うことができる。
【0052】
SSD3にアクセスするための論理アドレス空間は、SSD3にアクセスするためにホスト2によって使用される連続する論理アドレスである。論理アドレスとしては、論理ブロックアドレス(LBA)が使用される。
【0053】
以下では、フラッシュマネージメント部121がZNSをサポートしており、任意のゾーンにデータを書き込むためのライトコマンドとして、NVMe規格で規定されたZNSにおいて使用されるライトコマンド、つまりゾーンを指定するライトコマンド、が使用されるケースを主として説明する。
【0054】
QLCブロック制御部122は、複数のQLCブロックを複数のゾーンにそれぞれ割り当てる。あるいは、QLCブロック制御部122は、複数のゾーンに、複数のブロックグループをそれぞれ割り当ててもよい。複数のブロックグループの各々は、NAND型フラッシュメモリ5に含まれている複数のブロック(物理ブロック)のうちの2つ以上のブロック(物理ブロック)を含む。各ブロックグループは、スーパーブロック(QLCスーパーブロック)とも称される。つまり、QLCブロック制御部122は、複数のゾーンの各々に一つのQLCブロックを割り当てる。複数のゾーンの各々に割り当てられるQLCブロックは、一つの物理ブロック(QLC物理ブロック)であってもよいし、一つのスーパーブロック(QLCスーパーブロック)であってもよい。 フラッシュマネージメント部121は、任意のゾーンにデータを書き込むためのライトコマンドに基づいて、そのゾーンに割り当てられたQLCブロックにデータを書き込む動作を開始する。QLCブロックにデータを書き込む動作として、フラッシュマネージメント部121は、例えば、複数段階の書き込み動作を実行する。複数段階の書き込み動作は、第1段階の書き込み動作と第2段階の書き込み動作とを少なくとも含む。複数段階の書き込み動作は、例えば、フォギー・ファイン書き込み動作である。
【0055】
フォギー・ファイン書き込み動作は、同じワード線に接続されたメモリセル群に対する複数回の書き込み動作(フォギー書き込み動作、ファイン書き込み動作)によって実行される。1回目の書き込み動作(フォギー書き込み動作)は各メモリセルの閾値電圧を粗く設定する書き込み動作であり、2回目の書き込み動作(ファイン書き込み動作)は各メモリセルの閾値電圧を調整する書き込み動作である。フォギー・ファイン書き込み動作は、プログラムディスターブによる影響を低減することが可能な書き込みモードである。
【0056】
1回目の書き込み動作(フォギー書き込み動作)では、まず、4ページ分のデータが、1回目のデータ転送動作によってNAND型フラッシュメモリ5にページサイズ単位で転送される。つまり、1ページ当たりのデータサイズ(ページサイズ)が16KBであるならば、64KBのデータがNAND型フラッシュメモリ5にページサイズ単位で転送される。そして、4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための1回目の書き込み動作(フォギー書き込み動作)が行われる。
【0057】
2回目のプログラム動作(ファイン書き込み動作)では、フォギー書き込み動作と同様に、4ページ分のデータが、2回目のデータ転送動作でNAND型フラッシュメモリ5にページサイズ単位で再び転送される。2回目のデータ転送動作でNAND型フラッシュメモリ5に転送されるデータは、1回目のデータ転送動作によって転送されるデータと同一である。そして、転送された4ページ分のデータをNAND型フラッシュメモリ5内のメモリセルアレイにプログラムするための2回目の書き込み動作(ファイン書き込み動作)が行われる。
【0058】
あるワード線に接続された複数のメモリセルに対するフォギー書き込み動作が終了しても、このワード線に接続された複数のメモリセルに対するファイン書き込み動作はすぐに実行することはできない。このワード線に接続された複数のメモリセルに対するファイン書き込み動作は、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了した後に実行可能となる。このため、QLCブロックにデータを書き込むために必要な時間は長くなる。また、QLCブロックのあるワード線に接続された複数のメモリセルにフォギー書き込み動作によって書き込まれたデータは、後続する1以上のワード線に接続されたメモリセル群に対するフォギー書き込み動作が終了し、且つこのワード線に接続された複数のメモリセルに対するファイン書き込み動作が終了するまで、読み出すことができない。
【0059】
そのため、QLCブロックに書き込まれるべきデータは、そのデータのファイン書き込み動作が終了するまで、いずれかの記憶領域で保持されている必要がある。
【0060】
このように、フラッシュマネージメント部121は、QLCブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しが、この一つのワード線に後続する一つ以上のワード線へのデータの書き込み後に可能となる書き込みモード(フォギー・ファイン書き込み動作のような複数段階の書き込み動作)を使用して、QLCブロックの各ワード線に接続された複数のメモリセルに、QLCブロックの最小書き込みサイズ(ページサイズの4倍である64KB)を有するデータを書き込む。
【0061】
なお、NAND型フラッシュメモリ5が2つのプレーンを含むマルチプレーン構成を有する場合には、2つのプレーンからそれぞれ選択される2つのQLC物理ブロックに対する書き込み動作が同時に実行される。これら2つのQLC物理ブロックは、2つのQLC物理ブロックを含む一つのQLCブロック(QLCスーパーブロック)として扱われる。したがって、QLCブロックの最小書き込みサイズは128KBとなる。
【0062】
一方、pSLCブロックに対する書き込み動作においては、フラッシュマネージメント部121は、pSLCブロックに含まれる複数のワード線のうちの一つのワード線に書き込まれたデータの読み出しがこの一つのワード線へのデータの書き込みのみによって可能となる書き込みモード(SLCモード)を使用して、pSLCブロックの各ワード線に接続された複数のメモリセルにpSLCブロックの最小書き込みサイズ(ページサイズ)を有するデータを書き込む。SLCモードでは、1ページ分のデータがNAND型フラッシュメモリ5に1回のみ転送される。そして、メモリセル当たりに1ビットが書き込まれるように、1ページ分のデータが一つのワード線に接続された複数のメモリセルに書き込まれる。
【0063】
以下では、QLCブロックの最小書き込みサイズを第1の最小書き込みサイズとも称し、pSLCブロックの最小書き込みサイズを第2の最小書き込みサイズとも称する。
【0064】
pSLCブロック制御部123は、異なるQLCブロックに書き込まれるべきデータが一つのpSLCブロックに混在されることを防止するために、書き込み先ブロックとしてオープンされたQLCブロックの各々に、pSLCブロックを割り当てる。あるQLCブロックに割り当てられたpSLCブロックは、このQLCブロックに書き込まれるべきデータのみを一時的に保持する不揮発性の記憶領域として使用される。つまり、あるQLCブロックに書き込まれるべきデータのみが、このQLCブロックに割り当てられたpSLCブロックに書き込まれる。別のQLCブロックに書き込まれるべきデータは、この別のQLCブロックに割り当てられたpSLCブロックに書き込まれる。
【0065】
したがって、一つのpSLCブロックは、一つのQLCブロックの書き込み未完了データのみを保持するために使用され、同時に複数のQLCブロックの書き込み未完了データを保持することはない。つまり、異なるQLCブロックに書き込むべき複数種のデータが一つのpSLCブロックに混在することを防止することができる。よって、pSLCブロックに対するガベージコレクション動作の実行は不要となる。
【0066】
また、あるQLCブロックに割り当てられたpSLCブロックに未書き込み領域が残っている状態で、このQLCブロックが読み出し可能データで満たされた場合、pSLCブロック制御部123は、このQLCブロックからこのpSLCブロックの割り当てを解除する。ここで、読み出し可能データとは、QLCブロックへの書き込みが完了したデータである。具体的には、QLCブロックへの書き込みが複数段階の書き込み動作を使用して実行される場合には、読み出し可能データは、複数段階の書き込み動作が完了したデータである。例えば、あるデータのファイン書き込み動作が完了すると、このデータは読み出し可能データとなる。QLCブロックが読み出し可能データで満たされた場合、pSLCブロックに既に書き込まれているデータは全て、QLCブロックへの書き込みが完了した書き込み完了データとなる。pSLCブロックに格納されている書き込み完了データは、QLCブロックから読み出し可能である。したがって、QLCブロックへの書き込みが完了した書き込み完了データは、もはやpSLCブロックに保持しておく必要はない。
【0067】
この場合、pSLCブロック制御部123は、この割り当てが解除されたpSLCブロックを、書き込み先ブロックとしてオープンされた他のQLCブロックに割り当てる。そして、他のQLCブロックに書き込むべきデータのみを、このpSLCブロックの未書き込み領域に書き込む。このように、pSLCブロック制御部123は、割り当てが解除されたpSLCブロックを、他のQLCブロックに書き込むべきデータのみを一時的に保持する不揮発性の記憶領域として再使用し、このpSLCブロックの未書き込み領域を有効利用する。
【0068】
ガベージコレクション動作の対象となるデータは、QLCブロックへの書き込みが完了していない書き込み未完了データのみである。したがって、あるQLCブロックに割り当てられていたpSLCブロックの残り記憶領域に別のQLCブロックに書き込むべきデータが書き込まれても、このpSLCブロックに存在する書き込み未完了データは、別のQLCブロックへの書き込み未完了データのみである。つまり、このpSLCブロックに、異なるQLCブロックに対応する書き込み未完了データは混在しない。よって、再使用されたpSLCブロックに対するガベージコレクション動作も不要である。
【0069】
次に、フラッシュマネージメント部121によって実行される書き込み制御処理について説明する。
【0070】
フラッシュマネージメント部121は、あるゾーンに割り当てられたQLCブロックにデータを書き込むための一つ以上のライトコマンドを受信すると、まず、受信した一つ以上のライトコマンドに関連付けられたデータ(第1のデータ)のみを、そのQLCブロックに割り当てられたpSLCブロックに第2の最小書き込みサイズ毎に書き込む。pSLCブロックへの第1のデータの書き込みが完了したことに応じて、フラッシュマネージメント部121は、第1のデータを、第1の最小書き込みサイズ毎にQLCブロックに書き込む。
【0071】
次に、pSLCブロックにデータを第2の最小書き込みサイズ毎に書き込む処理の例とQLCブロックにデータを第1の最小書き込みサイズ毎に書き込む処理の例について説明する。
【0072】
まず、TWB161を使用しないケースについて説明する。以下では、QLCブロック#1にデータを書き込む場合を想定する。例えば、ホスト2からライトコマンドを受信すると、フラッシュマネージメント部121は、受信したライトコマンドを、複数の書き込み先QLCブロック(複数のゾーン)に対応する複数のグループに分類する。受信したライトコマンドのうち、QLCブロック#1を指定する各ライトコマンドは、QLCブロック#1に対応するグループに分類される。受信したライトコマンドのうち、QLCブロック#2を指定する各ライトコマンドは、QLCブロック#2に対応する別のグループに分類される。フラッシュマネージメント部121は、QLCブロック#1を指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズを算出する。各ライトコマンドは対応するライトデータのサイズ、つまりデータ長、を示すパラメータを含んでいる。よって、フラッシュマネージメント部121は、QLCブロック#1を指定する受信した1以上のライトコマンドの各々に含まれるデータ長に基づいて、QLCブロック#1を指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズを算出することができる。
【0073】
フラッシュマネージメント部121は、QLCブロック#1を指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズが第2の最小書き込みサイズになるまで待つ。第2の最小書き込みサイズが16KBである場合、フラッシュマネージメント部121は、例えば、QLCブロック#1を書き込み先ブロックとして指定し且つ16KBのデータ長を指定する1つのライトコマンドが受信されるまで、あるいは、QLCブロック#1を書き込み先ブロックとして指定し且つ4KBのデータ長を指定する4つのライトコマンドが受信されるまで、あるいは、QLCブロック#1を書き込み先ブロックとして指定し且つ16KBのデータ長を指定する2つのライトコマンドが受信されるまで、待つ。QLCブロック#1を指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズが第2の最小書き込みサイズに達すると、フラッシュマネージメント部121は、これら1以上のライトコマンドに関連付けられた、第2の最小書き込みサイズを有するライトデータをホストライトバッファ1021から取得する。そして、フラッシュマネージメント部121は、第2の最小書き込みサイズを有する取得したライトデータを、QLCブロック#1に割り当てられているpSLCブロックに書き込む。
【0074】
pSLCブロックへの第2の最小書き込みサイズを有するライトデータの書き込みが完了すると、フラッシュマネージメント部121は、受信した1以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する。
【0075】
QLCブロック#1を指定する後続の1以上のライトコマンドを受信すると、フラッシュマネージメント部121は、これら後続の1以上のライトコマンドに関連付けられたライトデータの総サイズを再び算出する。フラッシュマネージメント部121は、QLCブロック#1を指定する受信した後続の1以上のライトコマンドに関連付けられたライトデータの総サイズが第2の最小書き込みサイズになるまで待つ。QLCブロック#1を指定する受信した後続の1以上のライトコマンドに関連付けられたライトデータの総サイズが第2の最小書き込みサイズに達すると、フラッシュマネージメント部121は、これら後続の1以上のライトコマンドに関連付けられた、第2の最小書き込みサイズを有するライトデータをホストライトバッファ1021から取得する。そして、フラッシュマネージメント部121は、第2の最小書き込みサイズを有する取得したライトデータを、QLCブロック#1に割り当てられているpSLCブロックに書き込む。
【0076】
pSLCブロックへの第2の最小書き込みサイズを有するライトデータの書き込みが完了すると、フラッシュマネージメント部121は、受信した後続の1以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する。
【0077】
このようにして、フラッシュマネージメント部121は、pSLCブロックにデータを第2の最小書き込みサイズ毎に書き込む。
【0078】
フラッシュマネージメント部121は、pSLCブロックに書き込まれたデータの総サイズが第1の最小書き込みサイズに達したか否かを判定する。フラッシュマネージメント部121は、pSLCブロックに書き込まれたデータの総サイズが第1の最小書き込みサイズに達するまで待つ。pSLCブロックに書き込まれたデータの総サイズが第1の最小書き込みサイズに達すると、フラッシュマネージメント部121は、第1の最小書き込みサイズを有するデータをpSLCブロックから読み出す。そして、フラッシュマネージメント部121は、読み出した第1の最小書き込みサイズを有するデータをQLCブロック#1に書き込む。
【0079】
この場合、例えば、フラッシュマネージメント部121は、読み出した第1の最小書き込みサイズを有するデータをNAND型フラッシュメモリ5に転送し、この転送したデータを、フォギー書き込み動作によって、QLCブロック#1内の最初の一つのワード線に接続された複数のメモリセルに書き込む。
【0080】
フラッシュマネージメント部121は、pSLCブロックに書き込まれた新たなデータの総サイズが第1の最小書き込みサイズに達したか否かを再び判定する。フラッシュマネージメント部121は、pSLCブロックに新たに書き込まれた新たなデータの総サイズが第1の最小書き込みサイズに達するまで待つ。pSLCブロックに書き込まれた新たなデータの総サイズが第1の最小書き込みサイズに達すると、フラッシュマネージメント部121は、第1の最小書き込みサイズを有する新たなデータをpSLCブロックから読み出す。そして、フラッシュマネージメント部121は、読み出した第1の最小書き込みサイズを有するデータをQLCブロック#1に書き込む。
【0081】
この場合、例えば、フラッシュマネージメント部121は、読み出した第1の最小書き込みサイズを有するデータをNAND型フラッシュメモリ5に転送し、この転送したデータを、フォギー書き込み動作によって、QLCブロック#1内の次のワード線に接続された複数のメモリセルに書き込む。
【0082】
このようにして、フラッシュマネージメント部121は、QLCブロック#1にデータを第1の最小書き込みサイズ毎に書き込む。
【0083】
QLCブロック#1内の最初の一つのワード線に後続する1以上のワード線に対するファイン書き込み動作が終了すると、最初の一つのワード線に対するファイン書き込み動作が実行可能となる。この場合、フラッシュマネージメント部121は、最初の一つのワード線に書き込んだ第1の最小書き込みサイズを有するデータをpSLCブロックから再び読み出す。そして、フラッシュマネージメント部121は、読み出した第1の最小書き込みサイズを有するデータをNAND型フラッシュメモリ5に再び転送し、この転送したデータを、ファイン書き込み動作によって、QLCブロック#1内の最初のワード線に接続された複数のメモリセルに書き込む。
【0084】
これにより、QLCブロック#1内の最初のワード線に接続された複数のメモリセルに対するデータの書き込み動作が完了し、このデータがQLCブロック#1から読み出し可能となる。
【0085】
次に、TWB161を使用するケースについて説明する。フラッシュマネージメント部121は、QLCブロック#1を指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズを算出する。フラッシュマネージメント部121は、QLCブロック#1を指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズが第1の最小書き込みサイズになるまで待つ。第1の最小書き込みサイズが128KBである場合、フラッシュマネージメント部121は、例えば、QLCブロック#1を書き込み先ブロックとして指定し且つ128KBのデータ長を指定する1つのライトコマンドが受信されるまで、あるいは、QLCブロック#1を書き込み先ブロックとして指定し且つ32KBのデータ長を指定する4つのライトコマンドが受信されるまで、あるいは、QLCブロック#1を書き込み先ブロックとして指定し且つ4KBのデータ長を指定する32個のライトコマンドが受信されるまで、待つ。
【0086】
QLCブロック#1を指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズが第1の最小書き込みサイズに達すると、フラッシュマネージメント部121は、これら1以上のライトコマンドに関連付けられた、第1の最小書き込みサイズを有するライトデータをホストライトバッファ1021からTWB161に転送する。そして、フラッシュマネージメント部121は、TWB161に転送された第1の最小書き込みサイズを有するライトデータを、QLCブロック#1に割り当てられているpSLCブロックに書き込む。
【0087】
さらに、フラッシュマネージメント部121は、pSLCブロックから第1の最小書き込みサイズを有するライトデータを読み出すことなく、TWB161に転送された第1の最小書き込みサイズを有するライトデータを、フォギー書き込み動作によって、QLCブロック#1の最初のワード線に接続された複数のメモリセルに書き込む。
【0088】
pSLCブロックへの第1の最小書き込みサイズを有するライトデータの書き込みが完了すると、フラッシュマネージメント部121は、受信した1以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する。
【0089】
このように、ホストライトバッファ1021からTWB161に、QLCブロックの最小書き込みサイズである第1の最小書き込みサイズを有するライトデータを転送することにより、pSLCブロックから第1の最小書き込みサイズを有するライトデータを読み出すことなく、TWB161に転送された第1の最小書き込みサイズを有するライトデータをQLCブロック#1に書き込むことができる。よって、TWB161を使用しないケースに比べ、コントローラ4とNAND型フラッシュメモリ5との間で実行することが必要なデータ転送の回数を減らすことができる。
【0090】
QLCブロック#1を指定する後続の1以上のライトコマンドを受信すると、フラッシュマネージメント部121は、これら後続の1以上のライトコマンドに関連付けられたライトデータの総サイズを再び算出する。フラッシュマネージメント部121は、QLCブロック#1を指定する受信した後続の1以上のライトコマンドに関連付けられたライトデータの総サイズが第1の最小書き込みサイズになるまで待つ。QLCブロック#1を指定する受信した後続の1以上のライトコマンドに関連付けられたライトデータの総サイズが第1の最小書き込みサイズに達すると、フラッシュマネージメント部121は、これら後続の1以上のライトコマンドに関連付けられた、第1の最小書き込みサイズを有するライトデータをホストライトバッファ1021からTWB161に転送する。そして、フラッシュマネージメント部121は、TWB161に転送された第1の最小書き込みサイズを有すライトデータを、QLCブロック#1に割り当てられているpSLCブロックに書き込む。そして、フラッシュマネージメント部121は、pSLCブロックから第1の最小書き込みサイズを有するライトデータを読み出すことなく、TWB161に転送された第1の最小書き込みサイズを有するライトデータを、フォギー書き込み動作によって、QLCブロック#1の次のワード線に接続された複数のメモリセルに書き込む。
【0091】
pSLCブロックへの第1の最小書き込みサイズを有するライトデータの書き込みが完了すると、フラッシュマネージメント部121は、受信した後続の1以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する。
【0092】
このようにして、フラッシュマネージメント部121は、QLCブロック#1にデータを第1の最小書き込みサイズ毎に書き込む。
【0093】
QLCブロック#1内の最初の一つのワード線に後続する1以上のワード線に対するファイン書き込み動作が終了すると、最初の一つのワード線に対するファイン書き込み動作が実行可能となる。この場合、フラッシュマネージメント部121は、最初の一つのワード線に書き込んだ第1の最小書き込みサイズを有するデータをpSLCブロックから読み出す。そして、フラッシュマネージメント部121は、読み出した第1の最小書き込みサイズを有するデータをNAND型フラッシュメモリ5に再び転送し、この転送したデータを、ファイン書き込み動作によって、QLCブロック#1内の最初のワード線に接続された複数のメモリセルに書き込む。
【0094】
これにより、QLCブロック#1内の最初のワード線に接続された複数のメモリセルに対するデータの書き込み動作が完了し、このデータがQLCブロック#1から読み出し可能となる。
【0095】
次に、NAND型フラッシュメモリ5内の記憶領域について説明する。NAND型フラッシュメモリ5内の記憶領域は、図3に示すように、pSLCバッファ201とQLC領域202とに大別される。
【0096】
QLC領域202は、複数のQLCブロックを含む。また、pSLCバッファ201は、複数のpSLCブロックを含む。換言すれば、NAND型フラッシュメモリ5に含まれる複数のブロックは、QLCブロック群と、pSLCブロック群とによって構成され得る。QLCブロック制御部122は、QLC領域202に含まれる複数のQLCブロックの各々をQLCブロックとしてのみ使用し、pSLCブロック制御部123は、pSLCバッファ201に含まれる複数のpSLCブロックの各々を、pSLCブロックとしてのみ使用してもよい。
【0097】
次に、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係について説明する。図4は、実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のNAND型フラッシュメモリダイとの関係の例を示すブロック図である。
【0098】
NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリダイ(またはNAND型フラッシュメモリチップとも称される)を含む。個々のNAND型フラッシュメモリダイは、独立して動作可能である。このため、NAND型フラッシュメモリダイは、並列動作可能な単位として扱われる。
【0099】
図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型フラッシュメモリダイを並列動作させることができる。
【0100】
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループ(スーパーブロック)の単位で実行されてもよい。
【0101】
次に、スーパーブロックの構成例について説明する。図5は、実施形態に係るメモリシステムにおいて使用される、あるブロックグループ(スーパーブロック)の構成例を示す図である。
【0102】
一つのブロックグループ、つまり複数の物理ブロックの集合を含む一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#1~#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#1~#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
【0103】
図5においては、32個の物理ブロック(ここでは、NAND型フラッシュメモリダイ#1内の物理ブロックBLK2、NAND型フラッシュメモリダイ#2内の物理ブロックBLK3、NAND型フラッシュメモリダイ#3内の物理ブロックBLK7、NAND型フラッシュメモリダイ#4内の物理ブロックBLK4、NAND型フラッシュメモリダイ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリダイ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0104】
図3で説明したQLC領域202内の各QLCブロックは、一つのスーパーブロック(QLCスーパーブロック)によって実現されてもよいし、一つの物理ブロック(QLC物理ブロック)によって実現されてもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【0105】
pSLCバッファ201に含まれる各pSLCブロックも、一つの物理ブロックによって構成されていてもよいし、複数の物理ブロックの集合を含むスーパーブロックによって構成されてもよい。
【0106】
次に、フラッシュマネージメント部121によって実行される、QLCブロックに対するフォギー・ファイン書き込み動作について説明する。図6は、QLCブロックに一つのメモリセル当たりに4ビットを書き込むモードでデータを書き込む動作を説明するための図である。
【0107】
ここでは、5つのワード線を往復する場合のフォギー・ファイン書き込み動作を例示する。QLCブロック(QLC#1)に対するフォギー・ファイン書き込み動作は以下のように実行される。
【0108】
(1)まず、4ページ(P0~P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に転送され、QLC#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0~P3)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0109】
(2)次いで、次の4ページ(P4~P7)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLC#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4~P7)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0110】
(3)次いで、次の4ページ(P8~P11)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLC#1内のワード線WL2に接続された複数のメモリセルに、これら4ページ(P8~P11)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0111】
(4)次いで、次の4ページ(P12~P15)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLC#1内のワード線WL3に接続された複数のメモリセルに、これら4ページ(P12~P15)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0112】
(5)次いで、次の4ページ(P16~P19)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLC#1内のワード線WL4に接続された複数のメモリセルに、これら4ページ(P16~P19)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0113】
(6)ワード線WL4に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL0に戻り、ワード線WL0に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL0に対するフォギー書き込み動作で使用された4ページ(P0~P3)分のライトデータと同じ4ページ(P0~P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLC#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0~P3)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP0~P3に対するフォギー・ファイン書き込み動作が完了する。この結果、ページP0~P3に対応するデータをQLC#1から正しく読み出すことが可能となる。
【0114】
(7)次いで、次の4ページ(P20~P23)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、QLC#1内のワード線WL5に接続された複数のメモリセルに、これら4ページ(P20~P23)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0115】
(8)ワード線WL5に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL1に戻り、ワード線WL1に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL1に対するフォギー書き込み動作で使用された4ページ(P4~P7)分のライトデータと同じ4ページ(P4~P7)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、QLC#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4~P7)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP4~P7に対するフォギー・ファイン書き込み動作が完了する。この結果、ページP4~P7に対応するデータをQLC#1から正しく読み出すことが可能となる。
【0116】
なお、ここでは、フォギー書き込み動作およびファイン書き込み動作の各々において4ページ分のデータをNAND型フラッシュメモリ5に転送する場合を説明したが、QLC#1がNAND型フラッシュメモリ5に含まれる2つのプレーンからそれぞれ選択される2つのQLC物理ブロックを含む場合には、2つのQLC物理ブロックに対すね書き込みが同時に実行される。このため、フォギー書き込み動作およびファイン書き込み動作の各々においては、8ページ分のデータがNAND型フラッシュメモリ5に転送される。
【0117】
次に、複数のゾーンの構成について説明する。図7は、NVMe規格によって規定されたゾーンド・ネームスペースの構成例を示す図である。
【0118】
各ゾーンド・ネームスペースの論理ブロックアドレス範囲は、LBA 0から始まる。例えば、図7のゾーンド・ネームスペースの論理ブロックアドレス範囲は、LBA 0からLBA q-1までの連続するq個のLBAを含んでいる。このゾーンド・ネームスペースは、ゾーン#0からゾーン#r-1までのr個のゾーンに分割されている。これらr個のゾーンは、連続する非重複の論理ブロックアドレスを含む。
【0119】
より詳しくは、このゾーンド・ネームスペースには、ゾーン#0、ゾーン#1、…、ゾーン#r-1が割り当てられている。LBA 0は、ゾーン#0の最小のLBAを示す。LBA q-1は、ゾーン#r-1の最大のLBAを示す。ゾーン#0は、LBA 0、LBA m-1を含む。LBA 0は、ゾーン#0の最小のLBAを示す。LBA m-1は、ゾーン#0の最大のLBAを示す。ゾーン#1は、LBA m、LBA m+1、…、LBA n-2、LBA n-1を含む。LBA mは、ゾーン#1の最小のLBAを示す。LBA n-1は、ゾーン#1の最大のLBAを示す。ゾーン#r-1は、LBA p、…、LBA q-1を含む。LBA pは、ゾーン#r-1の最小のLBAを示す。LBA q-1は、ゾーン#r-1の最大のLBAを示す。
【0120】
コントローラ4は、複数のゾーンの各々に、複数のQLCブロックの一つを物理記憶領域として割り当てる。さらに、コントローラ4は、複数のQLCブロックの各々と複数のゾーンの各々との間のマッピングを、Z2Pテーブル61を使用して管理する。
【0121】
例えば、あるゾーンにデータを書き込むためのライトコマンドをホスト2から受信した場合、コントローラ4は、このゾーンに割り当てられたQLCブロックを書き込み先ブロックとして決定し、受信したライトコマンドに関連付けられたデータをこの書き込み先ブロックに書き込む。また、別のゾーンにデータを書き込むためのライトコマンドをホスト2から受信した場合、コントローラ4は、この別のゾーンに割り当てられたQLCブロックを書き込み先ブロックとして決定し、受信したライトコマンドに関連付けられたデータをこの書き込み先ブロックに書き込む。
【0122】
ライトコマンドは、例えば、ライトデータが書き込まれるべき最初のセクタを示す論理アドレス(開始LBA)と、このライトデータのデータサイズと、このライトデータが格納されているホストライトバッファ1021内の位置を示すデータポインタ(バッファアドレス)とを含む。
【0123】
例えば、ライトコマンドに含まれる論理アドレス(開始LBA)の上位ビット部は、このライトコマンドに関連付けられたライトデータが書き込まれるべきゾーンを指定する識別子、つまりこのゾーンのゾーン・スタート・論理ブロックアドレス(ZSLBA)、として使用される。各ゾーンにはQLCブロックが割り当てられているので、ZSLBAは、データが書き込まれるべきQLCブロックを指定する識別子としても使用される。また、ライトコマンドに含まれる論理アドレス(開始LBA)の下位ビット部は、ライトデータが書き込まれるべきゾーン内の書き込み先LBA(オフセット)として使用される。
【0124】
したがって、ライトコマンドによって指定される論理アドレスは、複数のゾーンのうちの一つのゾーンと、このゾーンの先頭からこのゾーン内の書き込み先位置までのオフセットとの双方を示す。なお、ZSLBAのみを指定するゾーンアペンドコマンドがライトコマンドとして使用されてもよい。この場合には、ゾーン内の書き込み先LBA(オフセット)は、このゾーン内の書き込みがシーケンシャルに実行されるようにコントローラ4によって決定される。
【0125】
ライトデータのデータサイズは、例えば、セクタ(論理ブロック)の数によって指定されもよい。一つのセクタは、ホスト2によって指定可能なライトデータの最小データサイズに対応する。つまり、ライトデータのデータサイズはセクタの倍数によって表される。
【0126】
各ゾーン内の次の書き込み可能LBAの値は、各ゾーンに対応するライトポインタによって管理される。
【0127】
次に、ライトポインタの更新動作を説明する。図8は、実施形態に係るメモリシステムにおいて実行される、ライトポインタの更新動作を示す図である。
【0128】
コントローラ4は、複数のゾーンにそれぞれ対応する複数のライトポインタを管理する。各ライトポインタは、そのライトポインタに対応するゾーン内の次の書き込み可能LBAを示す。あるゾーンにデータをシーケンシャルに書き込むと、コントローラ4は、このゾーンに対応するライトポインタの値を、データが書き込まれた論理ブロックの数だけ増やす。
【0129】
ここでは、ゾーン#1を例に、ライトポインタの更新動作を説明する。ゾーン#1は、LBA mからLBA n-1までの論理ブロックアドレス範囲を含む。LBA mは、ゾーン#1の最小の論理ブロックアドレス、つまりゾーン#1のゾーン・スタート・論理ブロックアドレス(ZSLBA)である。
【0130】
ゾーン#1が有効データを含まないエンプティ状態である場合、ゾーン#1に対応するライトポインタは、ゾーン#1のゾーン・スタート・論理ブロックアドレスであるLBA mを示す。ゾーン#1をオープンするためのコマンドをホスト2から受信すると、コントローラ4は、ゾーン#1の状態をデータの書き込みが可能なオープン状態に遷移させる。この場合、コントローラ4は、有効データを含まないエンプティ状態のQLCブロック(フリーQLCブロック)の一つをゾーン#1に関連付けられたオープン状態の物理記憶領域として割り当て、そしてこの一つのQLCブロックに対する消去動作を実行する。これにより、この一つのQLCブロックは書き込み先QLCブロックとしてオープンされる。この結果、ゾーン#1に対する書き込みが可能となる。
【0131】
ゾーン#1を指定するライトコマンドによって指定された書き込み先位置(開始LBA)がゾーン#1のライトポインタ(ここでは、LBA m)に等しい場合、コントローラ4は、その指定された開始LBAから始まるLBA範囲、例えば、LBA mと、LBA m+1、にデータを書き込む。
【0132】
コントローラ4は、データが書き込まれた論理ブロックの数だけゾーン#1のライトポインタの値が増えるように、ゾーン#1のライトポインタを更新する。例えば、LBA mと、LBA m+1にデータが書き込まれた場合、コントローラ4は、ライトポインタの値をLBA m+2に更新する。LBA m+2は、ゾーン#1内の未書き込みLBAのうちの最小のLBA、つまりゾーン#1内の次の書き込み可能LBAを示す。
【0133】
データが既に書き込まれているゾーン#1内のあるLBA範囲にデータを再び書き込む場合には、ゾーン#1をリセットしてライトポインタの値をLBA mに戻し、そして、ゾーン#1を再びオープンすることが必要となる。
【0134】
コントローラ4がホスト2から受信するコマンドには、ライトコマンドの他にも、リードコマンド、オープンゾーンコマンド、クローズゾーンコマンド、リセットゾーンコマンド、等が含まれる。
【0135】
リードコマンドはNAND型フラッシュメモリ5からデータを読み出すコマンド(リード要求)である。リードコマンドは、データ(読み出し対象データ)が読み出されるべき最初のセクタを示す論理アドレス(開始LBA)と、読み出し対象データのデータサイズと、この読み出し対象データが転送されるべきホスト2のリードバッファ内の位置を示すデータポインタ(バッファアドレス)とを含む。ホスト2のリードバッファは、ホスト2のメモリ102内に設けられた記憶領域である。
【0136】
リードコマンドに含まれる論理アドレスの上位ビット部は、読み出し対象データが格納されているゾーンを指定する識別子として使用される。また、リードコマンドに含まれる論理アドレスの下位ビット部は、読み出し対象データが格納されているゾーン内のオフセットを指定する。
【0137】
オープンゾーンコマンドは、各々がエンプティ状態の複数のゾーンの一つを、データの書き込みに利用可能なオープン状態に遷移させるためのコマンド(オープン要求)である。つまり、オープンゾーンコマンドは、有効データを含まないエンプティ状態である特定のブロックグループを、データの書き込みに利用可能なオープン状態に遷移させるために使用される。
【0138】
オープンゾーンコマンドは、オープン状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、オープンゾーンコマンドによって指定される論理アドレスの上位ビット部は、オープン状態に遷移させるべきゾーンを指定する識別子として使用される。
【0139】
クローズゾーンコマンドは、オープン状態のゾーンの一つを、書き込みが中断されたクローズ状態に遷移させるためのコマンド(クローズ要求)である。クローズゾーンコマンドは、クローズ状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、クローズゾーンコマンドによって指定される論理アドレスの上位ビット部が、クローズ状態に遷移させるべきゾーンを指定する識別子として使用される。
【0140】
リセットゾーンコマンドは、書き換えが実行されるべきゾーンをリセットしてエンプティ状態に遷移させるためのコマンド(リセット要求)である。例えば、リセットゾーンコマンドは、データで満たされているフル状態のゾーンを、有効データを含まないエンプティ状態に遷移させるために使用される。有効データは、論理アドレスに関連付けられているデータを意味する。リセットゾーンコマンドは、エンプティ状態に遷移させるべきゾーンを指定する論理アドレスを含む。例えば、リセットゾーンコマンドによって指定される論理アドレスの上位ビット部が、エンプティ状態に遷移させるべきゾーンを指定する識別子として使用される。リセットゾーンコマンドによってエンプティ状態に遷移されたゾーンに対応するライトポインタの値は、このゾーンのZSLBAを示す値に設定される。
【0141】
例えば、ゾーン#1がリセットされた場合、コントローラ4は、ゾーン#1用の物理記憶領域として割り当てられていたQLCブロックを、有効データを含まないフリーQLCブロックとして扱うことができる。したがって、このQLCブロックに対する消去動作を行うだけで、このQLCブロックをデータの書き込みに再利用することができる。
【0142】
図9は、実施形態に係るストレージデバイスにおいて使用される、複数のゾーンの各々と複数のQLCブロックの各々との間の対応関係を管理するための管理テーブルであるZ2Pテーブル61の構成例を示す図である。
【0143】
Z2Pテーブル61は、任意のゾーンド・ネームスペースに含まれる複数のゾーンそれぞれに対応する複数のエントリを有する。図9では、Z2Pテーブル61は、r個のゾーンを管理するためのr個のエントリを有する。
【0144】
複数のエントリのそれぞれには、そのエントリに対応するゾーンに割り当てられたQLCブロックを示す識別子(QLCブロック識別子)が、このゾーンに対応する物理記憶領域の物理アドレスPBAとして格納されている。図9では、ゾーン#0に対応するエントリには、ゾーン#0に割り当てられたQLCブロックを示すQLCブロック識別子が格納されている。また、ゾーン#1に対応するエントリには、ゾーン#1に割り当てられたQLCブロックを示すQLCブロック識別子が格納されている。さらに、ゾーン#r-1に対応するエントリには、ゾーン#1に割り当てられたQLCブロックを示すQLCブロック識別子が格納されている。
【0145】
図9では、あるゾーンド・ネームスペースに対応するZ2Pテーブル61を例示したが、Z2Pテーブル61に複数のゾーンド・ネームスペースに含まれる複数のゾーンそれぞれに対応するエントリが含まれていてもよい。
【0146】
このように、ゾーンド・ネームスペースに準拠したSSD3においては、ホスト2から受信したライトコマンドが指定するゾーンに割り当てられたQLCブロックにライトデータが書き込まれる。しかし、QLCブロックに対する書き込み動作では、フォギー・ファイン書き込み動作のような複数回のプログラム動作を必要とする書き込み動作が実行され得る。このとき、一回目の書き込み動作から最後の書き込み動作までの間、QLCブロック以外の記憶領域にデータを保持する必要がある。
【0147】
また、SSD3がサーバコンピュータのストレージデバイスとして使用されるケースにおいては、例えば、複数種のデータが異なるゾーンにそれぞれ書き込まれるように、例えば、複数のアプリケーション(または複数のクライアント)にそれぞれ対応する複数のゾーンが同時的に使用されるケースがある。この場合、ゾーンに対する書き込みの開始からこのゾーン全体がデータで満たされたフル状態になるまでの時間は、ゾーン毎に異なる場合がある。
【0148】
このような場合に、複数のゾーンに書き込まれるべきデータを一つのpSLCブロックに混在させると、各ゾーンの書き込み完了タイミングの差から、必要なデータ(有効データ)と不要なデータ(無効データ)とが一つのpSLCブロックに混在することになる。あるQLCブロックへの書き込みが完了したデータ(書き込み完了データ)は、そのQLCブロックから読み出すことができる。したがって、pSLCブロックに格納されている書き込み完了データは不要データである。あるQLCブロックへの書き込みが完了していないデータ(書き込み未完了データ)は、そのQLCブロックから読み出すことができない。したがって、pSLCブロックに格納されている書き込み未完了データは必要なデータである。
【0149】
データの書き込みに利用可能なフリーpSLCブロックの数が減少すると、必要なデータと不要なデータとが混在されたpSLCブロックから他のpSLCブロックに有効データ(書き込み未完了データ)のみをコピーするガベージコレクション動作を実行することが必要となる。
【0150】
しかし、ガベージコレクション動作を実行することは、ライトコマンド等のホスト2からの指示に依らないNAND型フラッシュメモリ5への書き込み動作を発生させることによるライトアンプリフィケーションの悪化、およびNAND型フラッシュメモリ5の使用によるホスト2から発行されたコマンドに対するレイテンシの増大を引き起こす可能性がある。
【0151】
そこで、本実施形態では、コントローラ4は、書き込み先ブロックとしてオープンされた複数のQLCブロックに対して、複数のpSLCブロックをそれぞれ割り当てる。そして、コントローラ4は、pSLCブロックの各々に、対応するQLCブロックに書き込まれるべきデータのみを書き込む。そして、そのpSLCブロックは、そのpSLCブロックに書き込まれたデータに関するファイン書き込み動作が実行されるまで、この書き込まれたデータを書き込み未完了データとして保持する。pSLCブロックに書き込まれたデータは、対応するQLCブロックへの書き込みが進行するにつれて、書き込み未完了データから書き込み完了データに徐々に遷移する。pSLCブロック全体がデータで満たされ、そしてそのデータの全てが書き込み完了データになると、pSLCブロックは有効データを含まないフリーブロックとなる。
【0152】
このように、書き込み先ブロックとしてオープンされた各QLCブロックにpSLCブロックを割り当てることによって、コントローラ4は、ライトアンプリフィケーションの増加を招くことなく、複数のQLCブロックに効率的にデータを書き込むことができる。
【0153】
次に、QLCブロックに対するpSLCブロックの割り当ての詳細について説明する。図10は、実施形態に係るメモリシステムにおける、複数のQLCブロックの各々に割り当てられるpSLCブロックを示す図である。
【0154】
図10において、n個のQLCブロック(QLC#1、QLC#2、…、QLC#n)が書き込み先ブロックとしてオープンされている。そして、n個のQLCブロック(QLC#1、QLC#2、…、QLC#n)には、n個のpSLCブロック(pSLC#1、pSLC#2、…、pSLC#n)が割り当てられている。
【0155】
図10の左部では、QLC#1には、pSLC#1が割り当てられており、QLC#2には、pSLC#2が割り当てられており、QLC#nには、pSLC#nが割り当てられている。
【0156】
そして、Half Used pSLCブロックプール63には、QLCブロックに新たに割り当てることが可能なpSLCブロックの識別子が格納されている。Half Used pSLCブロックプール63は、書き込み完了データが格納されている書き込み済み領域と、未書き込み領域とを含む、Half Used pSLCブロックそれぞれを管理するために使用される。Half Used pSLCブロックプール63は、フリーpSLCブロックプール62から選択された後にイレーズされたpSLCブロックと、未書き込み領域を含む状態でQLCブロックから割り当てが解除されたpSLCブロックとを含む。ここでは、Half Used pSLCブロックプール63は、pSLCブロックpSLC#i、…、pSLC#jを含む。
【0157】
新たなQLCブロック(ここでは、QLC#k)が書き込み先ブロックとしてオープンしたことに応じて、pSLCブロック制御部123は、Half Used pSLCブロックプール63から任意のpSLCブロック(ここでは、pSLC#i)を選択する。そして、pSLCブロック制御部123は、選択したpSLC#iをQLC#kに割り当てる。また、新たなQLCブロックがオープンした時にHalf Used pSLCブロックプール63に利用可能なpSLCブロックが存在しない場合、pSLCブロック制御部123は、フリーpSLCブロックプール62から任意のpSLCブロックを選択してもよい。pSLCブロック制御部123は、選択したpSLCブロックに対してイレーズ動作を実行し、そして選択したpSLCブロックを、Half Used pSLCブロックプール63を使用してHalf Used pSLCブロックとして管理する。あるいは、pSLCブロック制御部123は、選択したpSLCブロックに対してイレーズ動作を実行し、そして選択したpSLCブロックを、Half Used pSLCブロックプール63を経由せずに、QLC#kに直接的に割り当ててもよい。
【0158】
これにより、pSLC#iは、QLC#kの専用のライトバッファとして、QLC#kに割り当てられる。この場合、他のQLCブロックに書き込まれるべきデータはpSLC#iに書き込まれず、QLC#kに書き込まれるべきデータのみがpSLC#iに書き込まれる。
【0159】
次に、具体的な書き込み動作、およびpSLCブロックの割り当て解除について図11および図12を参照して説明する。図11は、実施形態に係るメモリシステムにおいて実行される、あるQLCブロックに対する書き込み動作について説明する一つ目の図である。図11では、QLC#1と、QLC#1に割り当てられたpSLC#1とに対するデータの書き込みについて説明する。
【0160】
QLC#1に書き込まれているデータのうち、ファイン書き込み動作が完了したデータは、読み出し可能データである。また、QLC#1に書き込まれているデータのうち、フォギー書き込み動作が完了したが、ファイン書き込み動作が完了されていないデータは、読み出し不可能データである。また、QLC#1の記憶領域のうち、いずれのデータも書き込まれていない記憶領域は、未書き込み領域である。
【0161】
pSLC#1に書き込まれているデータのうち、QLC#1に対するファイン書き込み動作が完了したデータは、書き込み完了データである。pSLC#1に書き込まれているデータのうち、QLC#1に対するファイン書き込み動作が完了していないデータは、書き込み未完了データである。また、pSLC#1の記憶領域のうち、いずれのデータも書き込まれていない記憶領域は、未書き込み領域である。
【0162】
QLC#1のあるワード線に対するファイン書き込み動作が実行可能になったとき、フラッシュマネージメント部121は、pSLC#1に格納されている書き込み未完了データを使用して、QLC#1に対するファイン書き込み動作を実行する。この書き込み未完了データは、QLC#1のこのワード線に対するフォギー書き込み動作のために既に使用されたデータである。そして、このワード線に対するファイン書き込み動作が完了すると、このファイン書き込み動作のために使用されたpSLC#1内のデータは、書き込み完了データとなる。
【0163】
フラッシュマネージメント部121は、pSLC#1に未書き込み領域が無くなるまで、QLC#1に書き込まれるべきデータをpSLCブロック#1に書き込む。そして、QLC#1に対するファイン書き込み動作が完了されたpSLC#1のデータは、書き込み完了データになる。pSLCブロック制御部123は、pSLC#1の未書き込み領域が無くなると、QLC#1に対して新たなpSLCブロック(ここでは、pSLC#2)を割り当てる。ここで、pSLC制御部123は、Half Used pSLCブロックプール63から任意のpSLCブロックを選択し、選択したpSLCブロックをQLC#1に割り当てる。また、Half Used pSLCブロックプール63に書き込みに利用可能なpSLCブロックが存在しない場合、pSLCブロック制御部123は、フリーpSLCブロックプール62から任意のフリーpSLCブロックを選択し、選択したフリーpSLCブロックをQLC#1に割り当てる。ここで、pSLCブロック制御部123が、書き込み完了データを持たないpSLC#2をQLC#2に新たに割り当てる場合について想定する。
【0164】
pSLC制御部123は、フリーpSLCブロックプール62からpSLC#2を選択し、pSLC#2に対してイレーズ動作を実行した後、Half Used pSLCブロックプール63に移動させ、QLC#1に割り当ててもよいし、pSLC#2に対してイレーズ動作を実行した後、QLC#1に直接的に割り当ててもよい。
【0165】
次いで、フラッシュマネージメント部121は、QLC#1に書き込まれるべきデータをpSLC#2に書き込み未完了データとして書き込む。また、フラッシュマネージメント部121は、pSLC#2に書き込んだデータを使用してQLC#1に対するフォギー書き込み動作を実行する。そして、フォギー書き込み動作を実行することに応じて、ファイン書き込み動作が実行可能になった時、フラッシュマネージメント部121は、QLC#1に対してファイン書き込み動作を実行する。QLC#1に対するファイン書き込み動作が実行されることにより、pSLC#1内の書き込み未完了データの一部は書き込み完了データになる。pSLC#1に記憶されているデータの全てが書き込み完了データになると、pSLCブロック制御部123は、QLC#1からpSLC#1の割り当てを解除し、pSLC#1をフリーpSLCブロックプール62に返却する。
【0166】
次に、図12を参照して後続の動作について説明する。フラッシュマネージメント部121は、QLC#1に未書き込み領域が無くなるまで、QLC#1に対してフォギー書き込み動作を実行する。そして、フォギー書き込み動作を実行することに応じて、ファイン書き込み動作が実行可能になった時、フラッシュマネージメント部121は、QLC#1に対してファイン書き込み動作を実行する。
【0167】
次いで、フラッシュマネージメント部121は、QLC#1に対する残りのファイン書き込み動作を実行する。QLC#1の全てのワード線に対するファイン書き込み動作が完了すると、QLC#1はQLC#1への書き込みが完了したデータで満たされる。これにより、QLC#1内のデータは全て読み出し可能データになる。そして、pSLC#2内の書き込み未完了データが全て書き込み完了データになる。
【0168】
このとき、pSLC#2は、未書き込み領域を含み、且つ書き込み未完了データを含まない。そのため、pSLC#2の未書き込み領域にQLC#1以外の書き込み先QLCブロックに書き込まれるべき書き込み未完了データが書き込まれても、異なるQLCブロックに書き込まれるべき書き込み未完了データがpSLC#2内に混在することはない。pSLCブロック制御部123は、QLC#1からpSLC#2の割り当てを解除し、pSLC#2をHalf Used pSLCブロックプール63に返却する。
【0169】
これにより、pSLC#2は、たとえば、新たなQLCブロックがオープンされた際に、そのQLCブロックにライトバッファとして割り当てられるために再使用される。pSLC#2は、そのQLCブロックに割り当てられるために選択されると、イレーズ動作を実行されることなく、そのQLCブロックに割り当てられる。そして、フラッシュマネージメント部121は、そのQLCブロックに書き込まれるべきデータを、pSLC#2の残りの未書き込み領域に書き込む。
【0170】
次に、pSLCブロックの再使用について説明する。図13は、実施形態に係るメモリシステムにおいて、あるQLCブロックに対する割り当てが解除された後に、他のQLCブロックに対して割り当てられることによって再使用されるpSLCブロックを示す図である。
【0171】
まず、pSLCブロック制御部123は、QLC#1がオープンした際に、pSLC#aをQLC#1に割り当てる。そして、フラッシュマネージメント部121は、図11および図12で説明した動作と同様に、QLC#1およびpSLC#aに対する書き込み動作を実行する。
【0172】
pSLC#aに未書き込み領域がなくなると、pSLCブロック制御部123は、QLC#1に新たなpSLCを割り当てる。新たなpSLCに未書き込み領域がなくなると、pSLCブロック制御部123は、QLC#1にさらに新たなpSLCを割り当てる。このようにして、pSLCブロック制御部123は、QLC#1に対する書き込みの進行に応じて、書き込み完了データで満たされたpSLCをフリーpSLCブロックプール62に返却しながら、QLC#1に幾つかのpSLCを順次割り当てる。例えば、QLC#1にpSLC#bが割り当てられると、QLC#1に書き込むべきデータは、pSLC#bに書き込まれる。そして、QLC#1に対する書き込みが進行して、QLC#1内のデータが全て読み出し可能データになると、pSLC#b内のデータも、全て書き込み完了データになる。このとき、pSLC#bに未書き込み領域が存在する場合、pSLCブロック制御部123は、QLC#1からpSLC#bの割り当てを解除する。そして、pSLCブロック制御部123は、pSLC#bをHalf Used pSLCブロックプール63に返却する。
【0173】
その後、pSLCブロック制御部123は、QLCブロックQLC#2が新たにオープンしたことに応じて、Half Used pSLCブロックプール63内のpSLC#bを選択し、pSLC#bをQLC#2に割り当てる。そして、フラッシュマネージメント部121は、QLC#2に書き込まれるべきデータをpSLC#bの未書き込み領域に書き込む。
【0174】
これにより、コントローラ4は、QLC#1に割り当てて使用されていたpSLC#bを、新たにオープンされたQLC#2に割り当てて再使用することができる。また、pSLC#bは、QLC#2に割り当てられ、QLC#2に書き込まれるべきデータが書き込まれても、pSLC#b内に残っているQLC#1に関するデータはいずれも書き込み完了データであるため、異なるQLCブロックに書き込まれるべき書き込み未完了データがpSLC#bに混在することはない。
【0175】
図14は、実施形態に係るメモリシステムにおける、あるQLCブロックと、このQLCブロックに割り当てられた複数のpSLCブロックとの関係について示す図である。以下では、QLC#1と、QLC#1に割り当てられた複数のpSLCブロックとの関係について説明する。
【0176】
まず、QLC#1を指定するライトコマンドをホスト2から受信すると。フラッシュマネージメント部121は、受信したライトコマンドに関する情報、例えば、受信したライトコマンドに関連付けられたデータのサイズ、データが格納されているホストライトバッファ1021内の位置を示す情報等をQLCブロック制御部122に通知する。
【0177】
QLCブロック制御部122は、受信したライトコマンドに関する情報に基づいて、QLC SAテーブル64を更新する。QLC SAテーブル64は、複数のソースアドレスSAを保持するために使用される。複数のソースアドレスSAの各々は、QLC#1に書き込まれるべきデータが格納されている位置を示す。QLCブロック制御部122は、QLC SAテーブル64に、ライトコマンドに関連付けられたデータが格納されているホストライトバッファ1021内の位置を示す情報をソースアドレスSAとして格納する。
【0178】
QLC#1を指定する1以上の受信されたライトコマンドに関連付けられたデータの総サイズが第2の最小書き込みサイズに達すると、フラッシュマネージメント部121は、QLC SAテーブル64に格納されている全てのソースアドレスSAをpSLC SAテーブル65にコピーすることによって、pSLCブロック制御部123のpSLC SAテーブル65を更新する。pSLC SAテーブル65の各ソースアドレスSAは、QLC#1に割り当てられたpSLCブロックに書き込むべきデータが格納されている位置を示す。
【0179】
フラッシュマネージメント部121は、pSLC SAテーブル65のソースアドレスSAそれぞれに基づいて、受信した1以上のライトコマンドに関連付けられたデータ、つまりQLC#1に書き込むべき第2の最小書き込みサイズを有するデータをホストライトバッファ1021から取得する。そして、フラッシュマネージメント部121は、取得したデータをpSLCブロック(ここでは、pSLC#a)に書き込む。
【0180】
pSLC#aにデータが書き込まれると、フラッシュマネージメント部121は、このデータに対応する1以上のライトコマンドの完了を示す1以上の完了応答をホスト2に送信する。
【0181】
また、第2の最小書き込みサイズを有するデータがpSLC#aに書き込まれると、フラッシュマネージメント部121は、QLC#1に書き込むべきデータのソースアドレスSAそれぞれが、ホストライトバッファ1021内の位置から、このデータが書き込まれたpSLC#a内の位置に変更されるように、QLC SAテーブル64を更新する。
【0182】
この時、このデータを読み出し対象データとして指定するリードコマンドがホスト2から受信した場合、フラッシュマネージメント部121は、このリード対象データに対応するソースアドレスSAに基づいて、このリード対象データをpSLC#aから読み出し、ホスト2に送信する。このデータがpSLC#aに書き込まれる前においては、このデータに対応するソースアドレスSAは、ホストライトバッファ1021内の位置を示す。したがって、もしも、このデータがpSLC#aに書き込まれる前に、このデータをリード対象データとして指定するリードコマンドをホスト2から受信した場合には、フラッシュマネージメント部121は、このリード対象データに対応するソースアドレスSAに基づいて、このリード対象データをホストライトバッファ1021から読み出し、ホスト2に送信する。
【0183】
pSLC#aに書き込まれたデータの総サイズが第1の最小書き込みサイズに達すると、フラッシュマネージメント部121は、QLC SAテーブル64の各ソースアドレスSAに基づいて、QLC#1に書き込むべき第1の最小書き込みサイズを有するデータをpSLC#aから読み出す。そして、フラッシュマネージメント部121は、読み出したデータを、フォギー書き込み動作によって、QLC#1に書き込む。
【0184】
QLC#1への書き込みが進行して、QLC#1内のあるワード線に対するファイン書き込み動作の実行が可能になると、フラッシュマネージメント部121は、このワード線に書き込むべきデータをpSLC#aから再び読み出す。そして、フラッシュマネージメント部121は、読み出したデータを、ファイン書き込み動作によって、QLC#1に書き込む。
【0185】
このような動作が繰り返されることにより、やがてpSLC#aに未書き込み領域がなくなる。この場合、pSLCブロック制御部123は、Half Used pSLCブロックプール63から任意のpSLCブロック(ここでは、pSLC#b)を選択し、選択したpSLC#bをQLC#1に割り当てる。
【0186】
pSLC#aに書き込まれた全てのデータが書き込み完了データになると、pSLCブロック制御部123は、pSLC#aをフリーpSLCブロックプール62に返却する。
【0187】
pSLC#bがQLC#1に割り当てられている状態で、QLC#1全体が、QLC#1への書き込みが完了したデータ、つまり読み出し可能データ、で満たされると、pSLCブロック制御部123は、Half Used pSLCブロックプール63にpSLC#bを返却する。
【0188】
以上の動作によって、ホスト2は、完了応答を受信したタイミングで、その完了応答に関するライトコマンドに関連付けられたデータが格納されているホストライトバッファ1021内の記憶領域を解放することができる。コントローラ4は、QLCブロックの最小書き込みサイズよりも小さいpSLCブロックの最小書き込みサイズのデータ毎に完了応答をホスト2に送信するため、QLCブロックの最小書き込みサイズ分のデータの書き込みが完了した後に完了応答をホスト2に送信する場合に比し、必要とされるホストライトバッファ1021のサイズを小さくすることができる。
【0189】
ここで、NAND型フラッシュメモリ5とコントローラ4との間で実行されるデータ転送の回数について考える。
【0190】
図14を参照して説明した書き込み動作を実行すると、(1)pSLCブロックにデータを書き込むために実行されるコントローラ4からNAND型フラッシュメモリ5へのデータ転送と、(2)フォギー書き込みのためにpSLCブロックからデータを読み出すために実行されるNAND型フラッシュメモリ5からコントローラ4へのデータ転送と、(3)フォギー書き込みのためにQLCブロックにデータを書き込むために実行されるコントローラ4からNAND型フラッシュメモリ5へのデータ転送と、(4)ファイン書き込みのためにpSLCブロックからデータを読み出すために実行されるNAND型フラッシュメモリ5からコントローラ4へのデータ転送と、(5)ファイン書き込みのためにデータを書き込むために実行されるコントローラ4からNAND型フラッシュメモリ5へのデータ転送との5回のデータ転送が必要とされる。
【0191】
pSLCブロックに書き込まれているデータをQLCブロックへの書き込み動作に使用する際に、コントローラ4は、pSLCブロックに書き込まれているデータのエラー訂正を行うために、pSLCブロックからデータを読み出す必要がある。そのため、フォギー書き込み、およびファイン書き込みの際に、コントローラ4とNAND型フラッシュメモリ5との間のデータ転送は2度ずつ行われることになる。
【0192】
そのため、コントローラ4からNAND型フラッシュメモリ5にライトデータが一度しか転送されない場合と比べて、5倍の帯域幅が使用されることになる。
【0193】
本実施形態におけるSSD3では、消費される帯域幅を削減するために、SRAM16内のテンポラリライトバッファ(Temporary Write Buffer,TWB)161と、DRAM6内のラージライトバッファ(LWB)66とを使用する。
【0194】
図15は、実施形態に係るメモリシステムにおいて、TWBを使用して実行されるフォギー書き込み動作について示す図である。
【0195】
(1)フラッシュマネージメント部121は、あるQLCブロックを指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズを算出する。フラッシュマネージメント部121は、このQLCブロックを指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズが第1の最小書き込みサイズになるまで待つ。このQLCブロックを指定する受信した1以上のライトコマンドに関連付けられたライトデータの総サイズが第1の最小書き込みサイズに達すると、フラッシュマネージメント部121は、これら1以上のライトコマンドに関連付けられた、第1の最小書き込みサイズを有するライトデータを、ホストインタフェース11を介して、ホストライトバッファ1021からTWB161に転送する。
【0196】
TWB161は、QLCブロックに書き込まれるべきデータを、QLCブロックに対するフォギー書き込み動作が完了されるまで保持する。TWB161の記憶領域のサイズは、例えば、QLCブロックの最小書き込みサイズ(第1の最小書き込みサイズ)と同じである(例えば、128KB)。
【0197】
(2)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをpSLCブロックに転送することによって、pSLCブロックに対する書き込み動作を実行する。
【0198】
(3)コントローラ4は、pSLCに対する書き込み動作が完了したことに応じて、ホストインタフェース11を介して、1以上のライトコマンドそれぞれに対する1以上の完了応答をホスト2に送信する。pSLCブロックに書き込まれたデータは、既に読み出し可能なデータである。そのため、コントローラ4は、完了応答を送信することができる。
【0199】
(4)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをQLCブロックに転送することによって、QLCブロックに対するフォギー書き込みを実行する。その後、コントローラ4は、フォギー書き込み動作が完了したことに応じて、TWB161の記憶領域を解放する。
【0200】
以上のように、TWB161を使用することによって、コントローラ4は、pSLCブロックに格納されているデータを読み出すことなく、QLCブロックに対するフォギー書き込み動作を実行することができる。これにより、コントローラ4とNAND型フラッシュメモリ5との間で実行することが必要なデータ転送の回数を少なくすることができる。
【0201】
コントローラ4と、コントローラ4とNAND型フラッシュメモリ5との間で実行することが必要なデータ転送の回数をさらに削減するために、SSD3は、ラージライトバッファ(LWB)66を使用することができる。LWB66は、各々のエントリがTWB161と同じサイズの記憶領域を持つファーストインファーストアウト(FIFO)型の揮発性メモリである。ここでは、LWB66は、5つのエントリを持つ。LWB66のエントリの数は、QLCブロックがファイン書き込み動作を実行可能になるサイズのデータを格納できるように決定される。例えば、SSD3が2つのワード線を往復するフォギー・ファイン書き込み動作を実行する場合、LWB66は、2つのエントリを有していてもよい。また、SSD3が5つのワード線を往復するフォギー・ファイン書き込み動作を実行する場合、LWB66は、5つのエントリを有していてもよい。
【0202】
次に、LWB66をQLCブロックに割り当てる動作について説明する。図16は、実施形態に係るメモリシステムにおける、複数のQLCブロックの各々に割り当てられるpSLCブロックと、LWBとを示す図である。
【0203】
図16において、QLCブロックQLC#1、QLC#2、…、QLC#nがオープンされ、それぞれ、ゾーンに割り当てられている。そして、各QLCブロックには、pSLCブロックがそれぞれ割り当てられている。
【0204】
図16の左部では、QLC#1には、pSLC#1が割り当てられており、QLC#2には、pSLC#2が割り当てられており、QLC#nには、pSLC#nが割り当てられている。
【0205】
そして、Half Used pSLCブロックプール63には、QLCブロックに新たに割り当てることが可能なpSLCブロックが存在している。Half Used pSLCブロックプール63は、フリーpSLCブロックプール62から選択された後にイレーズされたpSLCブロック、および未書き込み領域を含む状態で、QLCブロックから割り当てが解除されたpSLCブロックを含む。ここでは、Half Used pSLCブロックプール63は、pSLCブロックpSLC#i、…、pSLC#jを含む。
【0206】
さらに、LWB66は、ラージライトバッファLWB#1と、ラージライトバッファLWB#2とを含む。そして、LWB#1は、QLC#1に割り当てられており、LWB#2は、QLC#2に割り当てられる。
【0207】
ここで、新たにQLCブロックQLC#kがオープンしたことに応じて、pSLCブロック制御部123は、Half Used pSLCブロックプール63から任意のpSLCブロック(pSLC#i)を選択する。そして、pSLCブロック制御部123は、選択したpSLC#iをQLC#kに割り当てる。
【0208】
そして、コントローラ4は、LWB#1と、LWB#2とのうち、任意のLWBを選択する。例えば、コントローラ4は、最新のデータが書き込まれたタイミングが古いLWBを選択してもよい(ここでは、LWB#2)。そして、コントローラ4は、QLC#2からLWB#2の割り当てを解除し、新たにオープンされたQLC#kにLWB#2を割り当てる。これにより、コントローラ4は、新たにオープンされたQLCブロックに優先してLWB66を割り当てることができる。
【0209】
図17は、実施形態に係るメモリシステムにおいて実行される二種類の書き込み動作の切り替えについて示す図である。図17の上部は、LWB66が割り当てられているQLCブロックに対するフォギー・ファイン書き込みを示しており、図17の下部は、LWB66の割り当てが解除されたQLCブロックに対するフォギー・ファイン書き込みを示している。
【0210】
LWB66が割り当てられたQLCブロックに書き込まれるべきデータがTWB161に格納されると、コントローラ4は、QLCブロックへのフォギー書き込み動作を完了した後、QLCブロックに書き込まれるべきデータをTWB161からLWB66にコピーする。そして、QLCブロックへのファイン書き込み動作が実行可能になると、コントローラ4は、LWB66に格納されているデータを使用して、QLCブロックへのファイン書き込み動作を実行する。そのため、LWB66が割り当てられたQLCブロックは、フォギー書き込み動作だけでなく、ファイン書き込み動作を実行する際にも、pSLCブロックからデータを読み出す必要がなくなる。そのため、LWB66が割り当てられていないQLCブロックと比較して、コントローラ4とNAND型フラッシュメモリ5との間の帯域幅の消費がより少なくなる。
【0211】
LWB66は、オープンされているQLCブロックすべてに対して割り当てられる必要はない。図16におけるQLC#2のように、LWB66の割り当てが解除されたQLCブロックでは、コントローラ4は、pSLCブロックから読み出されたデータを使用して、QLCブロックに対するファイン書き込み動作を実行する。
【0212】
コントローラ4は、ライトコマンドによって指定されたQLCブロックにLWB66が割り当てられているか否かに応じて、図18、あるいは図19に示されるフォギー・ファイン書き込み動作を実行する。
【0213】
まず、LWB66が割り当てられているQLCブロックに対するフォギー・ファイン書き込みの動作の詳細について説明する。図18は、実施形態に係るメモリシステムにおいて、TWBと、LWBと、を使用して実行される書き込み動作について示す図である。
【0214】
(1)コントローラ4は、ホスト2からあるQLCブロックを指定する1以上のライトコマンドを、ホストインタフェース11を介して受信する。そして、コントローラ4は、あるQLCブロックを指定する1以上のライトコマンドに関連付けられたデータの総サイズがQLCブロックの最小書き込みサイズ(第1の最小書き込みサイズ)に達したことに応じて、ホストインタフェース11を介して、ホストライトバッファ1021からTWB161に第1の最小書き込みサイズを有するデータを転送する。
【0215】
(2)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをpSLCブロックに転送することによって、pSLCブロックに対する書き込み動作を実行する。
【0216】
(3)コントローラ4は、pSLCに対する書き込み動作が完了したことに応じて、ホストインタフェース11を介して、1以上のライトコマンドそれぞれに対する1以上の完了応答をホスト2に送信する。pSLCブロックに書き込まれたデータは、既に読み出し可能なデータである。そのため、コントローラ4は、完了応答を送信することができる。
【0217】
(4)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをQLCブロックに転送することによって、QLCブロックに対するフォギー書き込み動作を実行する。
【0218】
(5)フォギー書き込み動作が完了すると、コントローラ4は、TWB161からLWB66に、第1の最小書き込みサイズを有するデータをコピーする。その後、コントローラ4は、LWB66へのデータのコピーが完了したことに応じて、TWB161の記憶領域を解放する。
【0219】
コントローラ4は、上記(1)~(5)の動作を繰り返す。
【0220】
(6)そして、コントローラ4は、ファイン書き込み動作が実行可能になったことに応じて、LWB66に格納されたデータを用いて、QLCブロック対するファイン書き込み動作を実行する。
【0221】
次に、LWB66が割り当てられていないQLCブロックに対するフォギー・ファイン書き込みの動作の詳細について説明する。図19は、実施形態に係るメモリシステムにおいて、TWBを使用して実行される書き込み動作について示す図である。
【0222】
(1)コントローラ4は、ホスト2からあるQLCブロックを指定する1つ以上のライトコマンドを、ホストインタフェース11を介して受信する。そして、コントローラ4は、あるQLCブロックを指定する1以上のライトコマンドに関連付けられたデータの総サイズがQLCブロックの最小書き込みサイズ(第1の最小書き込みサイズ)に達したことに応じて、ホストインタフェース11を介して、ホストライトバッファ1021からTWB161に第1の最小書き込みサイズを有するデータを転送する。
【0223】
(2)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをpSLCブロックに転送することによって、pSLCブロックに対する書き込み動作を実行する。
【0224】
(3)コントローラ4は、pSLCに対する書き込み動作が完了したことに応じて、ホストインタフェース11を介して、1以上のライトコマンドそれぞれに対する1以上の完了応答をホスト2に送信する。pSLCブロックに書き込まれたデータは、既に読み出し可能なデータである。そのため、コントローラ4は、完了応答を送信することができる。
【0225】
(4)コントローラ4は、TWB161に転送された第1の最小書き込みサイズを有するデータをQLCブロックに転送することによって、QLCブロックに対するフォギー書き込み動作を実行する。その後、コントローラ4は、QLCブロックに対するフォギー書き込みが完了したことに応じて、TWB161の記憶領域を解放する。
【0226】
コントローラ4は、上記(1)~(4)の動作を繰り返す。
【0227】
(5)コントローラ4は、ファイン書き込みが実行可能になったことに応じて、pSLCブロックからデータを読み出す。そして、コントローラ4は、読み出したデータを用いて、QLCブロック対するファイン書き込み動作を実行する。
【0228】
その後、コントローラ4は、pSLCブロックに書き込まれているデータのうち、ファイン書き込みが完了されたデータを書き込み完了データに設定する。
【0229】
次に、QLCブロックに対するpSLCブロックの割り当て動作の手順について説明する。図20は、実施形態に係るメモリシステムにおいて実行される、QLCブロックに対してpSLCブロックを割り当てる動作の手順を示すフローチャートである。
【0230】
コントローラ4は、任意のQLCブロックがオープンしたとき、あるいは、任意のQLCブロックに割り当てられているpSLCブロックの未書き込み領域がなくなったとき、QLCブロックに対してpSLCブロックを割り当てる動作を開始する。
【0231】
まず、コントローラ4は、Half Used pSLCブロックプール63にpSLCブロックが存在するか否かを判定する(ステップS11)。
【0232】
Half Used pSLCブロックプール63にpSLCブロックが存在する場合(ステップS11でYes)、コントローラ4は、Half Used pSLCブロックプール63に存在するpSLCブロックの中から任意のpSLCブロックを選択する(ステップS12)。コントローラ4は、ウェアレベリングを考慮して、全てのpSLCブロックの消耗度が同程度になるように、Half Used pSLCブロックプール63内のpSLCブロックを選択してもよい。
【0233】
コントローラ4は、ステップS12で選択されたpSLCブロックをQLCブロックに割り当てる(ステップS13)。
【0234】
Half Used pSLCブロックプール63にpSLCブロックが存在しない場合(ステップS11でNo)、コントローラ4は、フリーpSLCブロックプール62に存在するpSLCブロックの中から任意のpSLCブロックを選択する(ステップS14)。コントローラ4は、ウェアレベリングを考慮して、フリーpSLCブロックプール62内のpSLCブロックを選択してもよい。
【0235】
コントローラ4は、ステップS14で選択されたpSLCブロックをHalf Used pSLCブロックプール63に移動させる(ステップS15)。コントローラ4は、ステップS14で選択されたpSLCブロックに対して、イレーズ動作を実行する。そして、コントローラ4は、このpSLCブロックをHalf Used pSLCブロックプール63のリストに追加することによって、ステップS15の動作を実行する。
【0236】
そして、コントローラ4は、Half Used pSLCブロックプール63に存在するpSLCブロックの中から任意のpSLCブロックを選択する(ステップS12)。つまり、コントローラ4は、ステップS15でHalf Used pSLCブロックプール63に移動されたpSLCブロックを選択することになる。
【0237】
コントローラ4は、ステップS12(ステップS14)で選択されたpSLCブロックをQLCブロックに割り当てる(ステップS13)。
【0238】
これにより、コントローラ4は、QLCブロックにpSLCブロックを割り当てる際に、Half Used pSLCブロックプール63内に存在するpSLCブロックを優先してQLCブロックに割り当てる。また、Half Used pSLCブロックプール63内にpSLCブロックが存在しない場合には、コントローラ4は、フリーpSLCブロックプール62からpSLCブロックを選択し、Half Used pSLCブロックプール63を経由して、pSLCブロックをQLCブロックに割り当てる。また、コントローラ4は、Half Used pSLCブロックプール63を経由させずに、直接フリーpSLCブロックプール62内に存在するpSLCブロックをQLCブロックに割り当ててもよい。
【0239】
次に、フォギー書き込み動作の手順について説明する。まず、TWB161を使用しないケースにおけるフォギー書き込み動作について説明する。図21は、実施形態に係るメモリシステムにおいて実行される、あるQLCブロック(QLC#1)に対するフォギー書き込み動作の手順を示すフローチャートである。
【0240】
まず、QLC#1を指定する1以上のライトコマンドを受信すると、コントローラ4は、QLC#1を指定する受信した1以上のライトコマンドに関連付けられたデータの総サイズがpSLCブロックの最小書き込みサイズに達したか否かを判定する(ステップS21)。
【0241】
QLC#1を指定する受信した1以上のライトコマンドに関連付けられたデータの総サイズがpSLCブロックの最小書き込みサイズに達していない場合(ステップS21でNo)、コントローラ4は、QLC#1を指定する受信した1以上のライトコマンドに関連付けられたデータの総サイズがpSLCブロックの最小書き込みサイズに達するまで待つ。QLC#1を指定する1以上のライトコマンドに関連付けられたデータの総サイズがpSLCブロックの最小書き込みサイズに達した場合(ステップS21でYes)、コントローラ4は、ホストライトバッファ1021からデータを取得する(ステップS22)。
【0242】
コントローラ4は、ステップS23で取得したデータを、QLC#1に割り当てられているpSLCブロック(pSLC#1)に書き込む(ステップS23)。
【0243】
そして、コントローラ4は、これら1以上のライトコマンドそれぞれに対する完了応答をホスト2に送信する(ステップS24)。つまり、コントローラ4は、ステップS23で書き込まれたデータが関連付けられていたライトコマンドに対する完了応答をホスト2に送信する。
【0244】
コントローラ4は、pSLC#1に格納されたデータの総サイズがQLCブロックの最小書き込みサイズに達したか否かを判定する(ステップS25)。
【0245】
pSLC#1に格納されたデータの総サイズがQLCブロックの最小書き込みサイズに達していない場合(ステップS25でNo)、コントローラ4は、ステップS21の処理に戻る。つまり、コントローラ4は、pSLC#1に格納されたデータの総サイズがQLCブロックの最小書き込みサイズに達するまで、pSLC#1への書き込み動作を繰り返す。
【0246】
pSLC#1に格納されたデータの総サイズがQLCブロックの最小書き込みサイズに達した場合(ステップS25でYes)、コントローラ4は、QLCブロックの最小書き込みサイズを有するデータをpSLC#1から読み出す(ステップS26)。
【0247】
コントローラ4は、ステップS26で読み出したデータを使用して、QLC#1に対するフォギー書き込みを実行する(ステップS27)。
【0248】
次に、ファイン書き込み動作の手順について説明する。まず、LWB66を使用しないケースにおけるファイン書き込み動作を説明する。図22は、実施形態に係るメモリシステムにおいて実行される、QLC#1に対するファイン書き込み動作の手順の他の例を示すフローチャートである。
【0249】
まず、コントローラ4は、QLC#1のあるワード線に対するファイン書き込み動作が実行可能になったか否かを判定する(ステップS31)。
【0250】
QLC#1のあるワード線に対するファイン書き込み動作が実行可能になっていない場合(ステップS31でNo)、コントローラ4は、QLC#1のあるワード線に対するファイン書き込み動作を実行可能になるまで待つ。
【0251】
QLC#1のあるワード線に対するファイン書き込み動作が実行可能になった場合(ステップS31でYes)、コントローラ4は、このワード線に対するフォギー書き込み動作で使用されたデータをpSLC#1からデータを読み出す(ステップS32)。
【0252】
コントローラ4は、ステップS32で読み出したデータを使用して、QLC#1のこのワード線に対するファイン書き込み動作を実行する(ステップS33)。ファイン書き込み動作が実行されることにより、QLC#1のこのワード線に書き込まれたデータは、読み出し可能データになる。
【0253】
次に、QLC#1にLWB66を割り当てる動作の手順について説明する。図23は、実施形態に係るメモリシステムにおいて実行される、QLCブロックに対してLWBを割り当てる動作の手順を示すフローチャートである。QLCブロックへのLWBの割り当ては、このQLCブロックのデータ消去動作の実行からこのQLCブロックに最初の書き込みを行うまでの間に実行される。
【0254】
まず、コントローラ4は、任意のQLCブロック(ここでは、QLC#1)が書き込み先ブロックとしてオープンしたか否かを判定する(ステップS41)。なお、QLC#1をオープンする際には、段落[0130]で説明したように、コントローラ4は、QLC#1のデータ消去動作を実行し、これによってQLC#1をデータの書き込みに使用可能な状態にする。
【0255】
QLC#1がオープンしていない場合(ステップS41でNo)、コントローラ4は、QLC#1がオープンするまで、ステップS41の判定処理を繰り返し実行する。
【0256】
QLC#1がオープンした場合(ステップS41でYes)、コントローラ4は、いずれのQLCブロックにも割り当てられていないLWB66が存在するか否かを判定する(ステップS42)。
【0257】
いずれのQLCブロックにも割り当てられていないLWB66が存在する場合(ステップS42でYES)、コントローラ4は、いずれのQLCブロックにも割り当てられていないLWB66の中から任意のLWB66を選択する(ステップS43)。
【0258】
コントローラ4は、ステップS43で選択したLWB66をQLC#1に割り当てる(ステップS44)。
【0259】
いずれのQLCブロックにも割り当てられていないLWB66が存在しない場合(ステップS42でNo)、コントローラ4は、既にオープンされている複数のQLCブロックのいずれか一つからLWB66の割り当てを解除する。LWB66の割り当てが解除されるQLCブロックは、例えば、データが最後に書き込まれた時刻が最も古いQLCブロックである。この場合、コントローラ4は、オープンされている複数のQLCブロックのうち、データが最後に書き込まれた時刻が最も古いQLCブロックを選択し、選択したQLCブロックからLWB66の割り当てを解除する。なお、複数のLWB66のうち、データが最後に書き込まれた時刻が最も古いLWB66を、データが最後に書き込まれた時刻が最も古いQLCブロックに割り当てられているLWB66として選択してもよい。最新のデータが書き込まれた時刻が最も古いLWB66は、最近最もデータが書き込まれていないQLCブロックに割り当てられているLWBである。したがって、例えば、コントローラ4は、複数のLWB66の中から、最新のデータが書き込まれた時刻が最も古いLWB66(ここではLWB#1)を選択してもよい(ステップS45)。ステップS45では、コントローラ4は、他のアルゴリズムに基づいて、LWB66を選択してもよい。
【0260】
コントローラ4は、ステップS45で選択されたLWB#1の割り当てを解除する(ステップS46)。コントローラ4は、LWB#1が割り当てられていたQLCブロックからLWB#1の割り当てを解除する。これにより、LWB#1は、いずれのQLCブロックにも割り当てられていないLWB66となる。
【0261】
そして、コントローラ4は、ステップS45で選択されたLWB#1をQLC#1に割り当てる(ステップS44)。
【0262】
次に、TWB161を使用して実行される、フォギー書き込みの手順について説明する。図24は、実施形態に係るメモリシステムにおいて、TWBを使用して実行される、あるQLCブロックに対するフォギー書き込み動作の手順を示すフローチャートである。
【0263】
まず、コントローラ4は、QLC#1を指定する1以上のライトコマンドに関連付けられたデータの総サイズがQLCブロックの最小書き込みサイズに達したか否かを判定する(ステップS51)。
【0264】
QLC#1を指定する1以上のライトコマンドに関連付けられたデータの総サイズがQLCブロックの最小書き込みサイズに達していない場合(ステップS51でNo)、コントローラ4は、QLC#1を指定する1以上のライトコマンドに関連付けられたデータの総サイズがQLCブロックの最小書き込みサイズに達するまで待つ。
【0265】
QLC#1を指定する1以上のライトコマンドに関連付けられたデータの総サイズがQLCブロックの最小書き込みサイズに達した場合(ステップS51でYes)、コントローラ4は、QLCブロックの最小書き込みサイズを有するデータをホストライトバッファ1021からTWB161に転送する(ステップS52)。
【0266】
コントローラ4は、QLC#1に割り当てられたpSLC#1に、TWB161に転送されたデータを書き込む(ステップS53)。そして、コントローラ4は、これら1以上のライトコマンドそれぞれに対する完了応答をホスト2に送信する(ステップS54)。
【0267】
その後、コントローラ4は、QLC#1に対するフォギー書き込みを実行する(ステップS55)。コントローラ4は、TWB161に転送されたデータを使用して、QLC#1に対するフォギー書き込みを実行する。そのため、コントローラ4は、フォギー書き込みを実行する際に、pSLC#1からデータを読み出さない。
【0268】
コントローラ4は、QLC#1にラージライトバッファ(LWB)66が割り当てられているか否かを判定する(ステップS56)。
【0269】
QLC#1にLWB66が割り当てられている場合(ステップS56でYes)、コントローラ4は、TWB161に格納されているデータをQLC#1に割り当てられているLWB66にコピーする(ステップS57)。
【0270】
コントローラ4は、TWB161に格納されているデータを破棄する(ステップS58)。これにより、TWB161は、新規データを格納されることが可能な状態になる。
【0271】
QLC#1にLWB66が割り当てられていない場合(ステップS56でNo)、コントローラ4は、ステップS57の動作をスキップし、TWB161に格納されているデータを破棄する(ステップS58)。
【0272】
次に、TWB161を使用して実行される、ファイン書き込みの手順について説明する。図25は、実施形態に係るメモリシステムにおいて、TWBを使用して実行される、あるQLCブロックに対するファイン書き込み動作の手順を示すフローチャートである。
【0273】
まず、コントローラ4は、QLC#1のあるワード線に対するファイン書き込み動作が実行可能になったか否かを判定する(ステップS61)。
【0274】
QLC#1のあるワード線に対するファイン書き込み動作が実行可能になっていない場合(ステップS61でNo)、コントローラ4は、QLC#1のあるワード線に対するファイン書き込み動作が実行可能になるまで待つ。
【0275】
QLC#1のあるワード線に対するファイン書き込み動作が実行可能になった場合(ステップS61でYes)、コントローラ4は、QLC#1にLWB66が割り当てられているか否かを判定する(ステップS62)。
【0276】
QLC#1にLWB66が割り当てられている場合(ステップS62でYes)、コントローラ4は、このワード線に対するフォギー書き込み動作で使用されたデータをLWB66からデータを読み出す(ステップS63)。
【0277】
そして、コントローラ4は、ステップS63で読み出したデータを用いて、QLC#1のこのワード線に対するファイン書き込みを実行する(ステップS64)。
【0278】
QLC#1にLWB66が割り当てられていない場合(ステップS62でNo)、コントローラ4は、このワード線に対するフォギー書き込み動作で使用されたデータをpSLC#1から読み出す(ステップS65)。
【0279】
そして、コントローラ4は、ステップS65で読み出したデータを用いて、QLC#1に対するファイン書き込みを実行する(ステップS64)。
【0280】
以上説明したように、本実施形態によれば、コントローラ4は、pSLCバッファ201に含まれるpSLCブロック(例えば、pSLC#1)をQLC領域202に含まれるQLCブロック(例えば、QLC#1)に割り当てる。コントローラ4は、QLC#1に書き込まれるべきデータのみをpSLC#1に書き込む。そして、コントローラ4は、pSLC#1がQLC#1に割り当てられている間、QLC#1以外のQLCブロックに書き込まれるべきデータをpSLC#1に書き込まない。
【0281】
また、pSLC#1に未書き込み領域が残っている状態で、QLC#1が、QLC#1への書き込みが完了したデータで満たされた場合、コントローラ4は、QLC#1からpSLC#1の割り当てを解除する。そして、コントローラ4は、pSLC#1が再使用可能になるように、pSLC#1をHalf Used pSLCブロックプール63に返却する。その後、pSLC#1がQLC#2に割り当てられた場合、コントローラ4は、pSLC#1の未書き込み領域に、QLC#2に書き込まれるべきデータのみを書き込む。
【0282】
これにより、pSLC#1内に複数のQLCブロックに書きこまれるべき書き込み未完了データが混在する状況は生じ得ない。コントローラ4は、pSLC#1を含むpSLCバッファ201に対して、ガベージコレクション処理を実行することなく、効率的にpSLCブロックを運用することができる。
【0283】
また、コントローラ4は、QLC#1に対する第1段階の書き込み動作(フォギー書き込み動作)を実行する際に、pSLC#1からデータを読み出さずに、TWB161に格納されているデータを使用してもよい。さらに、コントローラ4は、QLC#1に対する第2段階の書き込み動作(ファイン書き込み動作)を実行する際に、pSLC#1からデータを読み出さずに、LWB66に格納されているデータを使用してもよい。
【0284】
これにより、コントローラ4は、pSLC#1からデータを読み出さずにQLC#1に対するフォギー・ファイン書き込み動作を実行することができる。そのため、コントローラ4は、コントローラ4と、NAND型フラッシュメモリ5との間のデータ転送の帯域幅の消費を抑えることができる。
【0285】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、更新を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0286】
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、10…バス、11…ホストインタフェース、12…CPU、13…NANDインタフェース、14…DRAMインタフェース、15…DMAC、16…SRAM、17…ECCエンコード/デコード部、61…Z2Pテーブル、62…フリーpSLCブロックプール、63…Half Used pSLCブロックプール、64…QLC SAテーブル、65…pSLC SAテーブル、66…LWB、101…プロセッサ、102…メモリ、121…フラッシュマネージメント部、122…QLCブロック制御部、123…pSLCブロック制御部、161…TWB、201…pSLCライトバッファ、202…QLC領域、1021…ホストライトバッファ。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24
図25