(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024131387
(43)【公開日】2024-09-30
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
G06F 12/00 20060101AFI20240920BHJP
【FI】
G06F12/00 560B
G06F12/00 597U
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2023041614
(22)【出願日】2023-03-16
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CB01
5B160MB03
(57)【要約】
【課題】ライト処理の性能を向上できるメモリシステムを実現する。
【解決手段】メモリシステムは、不揮発性メモリと、第1のライトバッファと、第1のライトバッファよりも小さい容量を有し且つ第1のライトバッファよりも大きいバンド幅を有する第2のライトバッファと、コントローラと、を含む。コントローラは、第1のグループの書き込み速度が第1の値未満である場合、第1のデータのうちの未ロードのデータを第1のライトバッファにロードし、第1のデータの量が不揮発性メモリの最小書き込みサイズ以上になった後に、第1の書き込み先ブロックに第1のデータを書き込む。コントローラは、第2のグループの書き込み速度が第1の値以上である場合、最小書き込みサイズを有する第2のデータを第2のライトバッファにロードし、第2の書き込み先ブロックに第2のデータを書き込む。
【選択図】
図6
【特許請求の範囲】
【請求項1】
複数のブロックを含む不揮発性メモリと、
第1のライトバッファと、
前記第1のライトバッファよりも小さい容量を有し且つ前記第1のライトバッファよりも大きいバンド幅を有する第2のライトバッファと、
前記複数のブロックから割り当てられた複数の書き込み先ブロックを管理するように構成されたコントローラと、を具備し、
前記コントローラは、
前記不揮発性メモリに書き込むべきデータのサイズを示す第1の情報と、前記データに関連付けられた書き込み先ブロックを直接的又は間接的に指定可能な第2の情報と、を含むライトコマンドをホストから受信可能であり、
前記受信したライトコマンドに含まれる前記第2の情報に基づいて、前記受信したライトコマンドを、第1の書き込み先ブロックにデータを書き込むための第1のグループ、又は第2の書き込み先ブロックにデータを書き込むための第2のグループに分類し、
前記受信したライトコマンドに含まれる前記第1の情報に基づいて、所定時間当たりに書き込みが要求されるデータの量を示す書き込み速度が第1の値以上であるか否かを、前記第1及び第2のグループに対して判定し、
前記第1のグループの書き込み速度が前記第1の値未満である場合、前記第1のグループに関連付けられた第1のデータのうちの未ロードのデータを前記ホストのメモリから前記第1のライトバッファにロードし、前記第1のデータの量が前記不揮発性メモリの最小書き込みサイズ以上になった後に、前記第1のグループに割り当てられた第1の書き込み先ブロックに前記第1のデータを書き込み、
前記第2のグループの書き込み速度が前記第1の値以上である場合、前記第2のグループに関連付けられ且つ前記最小書き込みサイズを有する第2のデータを前記ホストの前記メモリから前記第2のライトバッファにロードし、前記第2のグループに割り当てられた第2の書き込み先ブロックに前記第2のデータを書き込むように構成されている、メモリシステム。
【請求項2】
前記コントローラは、
前記第1のライトバッファへの前記第1のデータのロードの完了後、前記第1のグループに属し且つ前記第1のデータに対応する一つ以上のライトコマンドの処理の完了を示す一つ以上の完了応答を前記ホストに送信するようにさらに構成されている、
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記第2の書き込み先ブロックへの前記第2のデータの書き込みの完了後、前記第2のグループに属し且つ前記第2のデータに対応する一つ以上のライトコマンドの処理の完了を示す一つ以上の完了応答を前記ホストに送信するようにさらに構成されている、
請求項2に記載のメモリシステム。
【請求項4】
前記コントローラは、
前記第1のグループに分類されたライトコマンドの各々に含まれる前記第1の情報に基づいて、前記第1のグループに関連付けられた未書き込みデータの量を算出し、前記第2のグループに分類されたライトコマンドの各々に含まれる前記第1の情報に基づいて、前記第2のグループに関連付けられた未書き込みデータの量を算出し、
前記不揮発性メモリのデータ書き込み動作の開始または終了に応じ、前記第1及び第2のグループのうち、データが未ロードの新たなライトコマンドを含むいずれかのグループを選択し、
前記選択したグループの前記未書き込みデータの量が前記最小書き込みサイズ以上であるか否かを判定し、
前記判定の結果に基づいて、前記選択したグループの書き込み速度が前記第1の値以上であるか否かを判定するように構成されている、
請求項1に記載のメモリシステム。
【請求項5】
前記第1のライトバッファは、ダイナミックランダムアクセスメモリで実現されており、
前記第2のライトバッファは、スタティックランダムアクセスメモリで実現されている、
請求項1に記載のメモリシステム。
【請求項6】
複数のブロックを含む不揮発性メモリと、
第1のライトバッファと、
前記第1のライトバッファよりも小さい容量を有し且つ前記第1のライトバッファよりも大きいバンド幅を有する第2のライトバッファと、
前記複数のブロックから割り当てられた複数の書き込み先ブロックを管理するように構成されたコントローラと、を具備し、
前記コントローラは、
前記不揮発性メモリに書き込むべきデータのサイズを示す第1の情報と、前記データに関連付けられた書き込み先ブロックを直接的又は間接的に指定可能な第2の情報と、を各々が含む複数のライトコマンドをホストから受信し、
前記受信した複数のライトコマンドの各々に含まれる前記第2の情報に基づいて、前記受信した複数のライトコマンドを、異なる書き込み先ブロックにデータを書き込むための複数のグループに分類し、
前記受信した複数のライトコマンドの各々に含まれる前記第1の情報に基づいて、同じグループに関連付けられた未書き込みデータの量を、前記複数のグループの各々について算出し、
前記不揮発性メモリのデータ書き込み動作の開始または終了に応じ、データが未ロードの新たなライトコマンドを含むグループのうちのいずれかのグループを選択し、
前記選択したグループに関連付けられた前記未書き込みデータの量が前記不揮発性メモリの最小書き込みサイズ以上であるか否かを判定し、
前記選択したグループに関連付けられた前記未書き込みデータの量が前記最小書き込みサイズ未満である場合、
前記選択したグループに関連付けられた前記未書き込みデータを前記ホストのメモリから前記第1のライトバッファにロードし、
前記選択したグループに関連付けられた前記未書き込みデータの量が前記最小書き込みサイズ以上である場合、
前記選択したグループに関連付けられ且つ前記第1のライトバッファにロード済みの未書き込みデータが存在するか否かを判定し、
前記選択したグループに関連付けられ且つ前記第1のライトバッファにロード済みの未書き込みデータが存在する場合、前記第1のライトバッファおよび前記ホストの前記メモリの双方から前記第2のライトバッファにロードされる未書き込みデータの総量が前記最小書き込みサイズになるように、前記選択したグループに関連付けられた前記未書き込みデータを前記第1のライトバッファおよび前記ホストの前記メモリの各々から前記第2のライトバッファにロードし、前記第2のライトバッファにロードされた前記未書き込みデータを、前記選択したグループに割り当てられた書き込み先ブロックに書き込むように構成されている、
メモリシステム。
【請求項7】
前記コントローラは、
前記選択したグループに関連付けられ且つ前記第1のライトバッファにロード済みの未書き込みデータが存在しない場合、前記選択したグループに関連付けられ且つ前記最小書き込みサイズを有する未書き込みデータを前記ホストの前記メモリから前記第2のライトバッファにロードし、前記第2のライトバッファにロードされた前記未書き込みデータを、前記選択したグループに割り当てられた前記書き込み先ブロックに書き込むようにさらに構成されている、
請求項6に記載のメモリシステム。
【請求項8】
前記コントローラは、
前記第1のライトバッファへの前記未書き込みデータのロードの完了後、前記選択したグループに属し且つ前記第1のライトバッファにロードされた前記未書き込みデータに対応する一つ以上のライトコマンドの処理の完了を示す一つ以上の完了応答を前記ホストに送信するようにさらに構成されている、
請求項6に記載のメモリシステム。
【請求項9】
前記コントローラは、
前記選択したグループに割り当てられた前記書き込み先ブロックへの前記未書き込みデータの書き込みの完了後、前記選択したグループに属し且つ前記ホストのメモリから前記第2のライトバッファにロードされた前記未書き込みデータに対応する一つ以上のライトコマンドの処理の完了を示す一つ以上の完了応答を前記ホストに送信するようにさらに構成されている、
請求項8に記載のメモリシステム。
【請求項10】
前記第1のライトバッファは、ダイナミックランダムアクセスメモリで実現されており、
前記第2のライトバッファは、スタティックランダムアクセスメモリで実現されている、
請求項6に記載のメモリシステム。
【請求項11】
複数のブロックを含む不揮発性メモリと、第1のライトバッファと、前記第1のライトバッファよりも小さい容量を有し且つ前記第1のライトバッファよりも大きいバンド幅を有する第2のライトバッファとを制御する制御方法であって、
前記複数のブロックから割り当てられた複数の書き込み先ブロックを管理することと、
前記不揮発性メモリに書き込むべきデータのサイズを示す第1の情報と、前記データに関連付けられた書き込み先ブロックを直接的又は間接的に指定可能な第2の情報と、を含むライトコマンドをホストから受信することと、
前記受信したライトコマンドに含まれる前記第2の情報に基づいて、前記受信したライトコマンドを、第1の書き込み先ブロックにデータを書き込むための第1のグループ、又は第2の書き込み先ブロックにデータを書き込むための第2のグループに分類することと、
前記受信したライトコマンドに含まれる前記第1の情報に基づいて、所定時間当たりに書き込みが要求されるデータの量を示す書き込み速度が第1の値以上であるか否かを、前記第1及び第2のグループに対して判定することと、
前記第1のグループの書き込み速度が前記第1の値未満である場合、前記第1のグループに関連付けられた第1のデータのうちの未ロードのデータを前記ホストのメモリから前記第1のライトバッファにロードし、前記第1のデータの量が前記不揮発性メモリの最小書き込みサイズ以上になった後に、前記第1のグループに割り当てられた第1の書き込み先ブロックに前記第1のデータを書き込むことと、
前記第2のグループの書き込み速度が前記第1の値以上である場合、前記第2のグループに関連付けられ且つ前記最小書き込みサイズを有する第2のデータを前記ホストの前記メモリから前記第2のライトバッファにロードし、前記第2のグループに割り当てられた第2の書き込み先ブロックに前記第2のデータを書き込むことと、を具備する制御方法。
【請求項12】
前記第1のライトバッファへの前記第1のデータのロードの完了後、前記第1のグループに属し且つ前記第1のデータに対応する一つ以上のライトコマンドの処理の完了を示す一つ以上の完了応答を前記ホストに送信することをさらに具備する、
請求項11に記載の制御方法。
【請求項13】
前記第2の書き込み先ブロックへの前記第2のデータの書き込みの完了後、前記第2のグループに属し且つ前記第2のデータに対応する一つ以上のライトコマンドの処理の完了を示す一つ以上の完了応答を前記ホストに送信することをさらに具備する、
請求項12に記載の制御方法。
【請求項14】
前記書き込み速度が前記第1の値以上であるか否かを前記第1及び第2のグループに対して判定することは、
前記第1のグループに分類されたライトコマンドの各々に含まれる前記第1の情報に基づいて、前記第1のグループに関連付けられた未書き込みデータの量を算出することと、
前記第2のグループに分類されたライトコマンドの各々に含まれる前記第1の情報に基づいて、前記第2のグループに関連付けられた未書き込みデータの量を算出することと、
前記不揮発性メモリのデータ書き込み動作の開始または終了に応じ、前記第1及び第2のグループのうち、データが未ロードの新たなライトコマンドを含むいずれかのグループを選択することと、
前記選択したグループの前記未書き込みデータの量が前記最小書き込みサイズ以上であるか否かを判定することと、
前記判定の結果に基づいて、前記選択したグループの書き込み速度が前記第1の値以上であるか否かを判定することと、を含む、
請求項11に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを備えるメモリシステム、および、メモリシステムを制御する方法に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの1つとして、例えば、NAND型フラッシュメモリ等の不揮発性メモリと、この不揮発性メモリを制御するコントローラとを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
メモリシステムのコントローラは、外部のホストから所定の規格に準拠するホストインタフェースを介して受信した入出力(I/O)信号(データ、コマンド)を処理することによって、不揮発性メモリからデータを読み出すためのリード処理や不揮発性メモリにデータを書き込むためのライト処理など、を実行する。
【0004】
メモリシステムにおいては、ライト処理の性能を向上できる技術が必要とされている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】米国特許出願公開第2022/0222011号明細書
【特許文献2】米国特許出願公開第2022/0197543号明細書
【特許文献3】米国特許第10,013,177号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の一実施形態が解決しようとする課題は、ライト処理の性能を向上できるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、複数のブロックを含む不揮発性メモリと、第1のライトバッファと、第2のライトバッファと、コントローラと、を具備する。前記第2のライトバッファは、前記第1のライトバッファよりも小さい容量を有し且つ前記第1のライトバッファよりも大きいバンド幅を有する。前記コントローラは、前記複数のブロックから割り当てられた複数の書き込み先ブロックを管理するように構成される。前記コントローラは、前記不揮発性メモリに書き込むべきデータのサイズを示す第1の情報と、前記データに関連付けられた書き込み先ブロックを直接的又は間接的に指定可能な第2の情報と、を含むライトコマンドをホストから受信可能である。前記コントローラは、前記受信したライトコマンドに含まれる第2の情報に基づいて、前記受信したライトコマンドを、第1の書き込み先ブロックにデータを書き込むための第1のグループ、又は第2の書き込み先ブロックにデータを書き込むための第2のグループに分類する。前記コントローラは、前記受信したライトコマンドに含まれる前記第1の情報に基づいて、所定時間当たりに書き込みが要求されるデータの量を示す書き込み速度が第1の値以上であるか否かを、前記第1及び第2のグループに対して判定する。前記コントローラは、前記第1のグループの書き込み速度が前記第1の値未満である場合、前記第1のグループに関連付けられた第1のデータのうちの未ロードのデータを前記ホストのメモリから前記第1のライトバッファにロードし、前記第1のデータの量が前記不揮発性メモリの最小書き込みサイズ以上になった後に、前記第1のグループに割り当てられた第1の書き込み先ブロックに前記第1のデータを書き込む。前記コントローラは、前記第2のグループの書き込み速度が前記第1の値以上である場合、前記第2のグループに関連付けられ且つ前記最小書き込みサイズを有する第2のデータを前記ホストの前記メモリから前記第2のライトバッファにロードし、前記第2のグループに割り当てられた第2の書き込み先ブロックに前記第2のデータを書き込む。
【図面の簡単な説明】
【0008】
【
図1】実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のフラッシュダイとの関係を示す構成例を示すブロック図。
【
図3】実施形態に係るメモリシステムにおいて使用される、スーパーブロックの構成例を示す図。
【
図4】第1の比較例に係るメモリシステムのライト処理におけるライトデータの流れを示す図。
【
図5】第2の比較例に係るメモリシステムのライト処理におけるライトデータの流れを示す図。
【
図6】実施形態に係るメモリシステムの、ライト処理におけるライトデータの流れを示す図。
【
図7】実施形態に係るメモリシステムの、別のライト処理におけるライトデータの流れを示す図。
【
図8】実施形態に係るメモリシステムの、ライト処理の手順の第1の例を示すフローチャート。
【
図9】実施形態に係るメモリシステムの、ライト処理の手順の第2の例を示すフローチャート。
【
図10】実施形態に係るメモリシステムにけるライトコマンド受信時の手順を示すフローチャート。
【
図11】実施形態に係るメモリシステムにおいて実行される書き込み動作の手順を示すフローチャート。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
【0010】
以下では、実施形態に係るメモリシステムがソリッドステートドライブ(SSD)として実現されている場合を想定する。
図1は、実施形態に係るメモリシステムを含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。
【0011】
ホスト2は、情報処理装置である。ホスト2は、例えば、パーソナルコンピュータ、サーバコンピュータ、またはモバイルデバイスである。ホスト2は、SSD3にアクセスする。具体的には、ホスト2は、データを書き込むためのコマンドであるライトコマンドをSSD3に発行する。また、ホスト2は、データを読み出すためのコマンドであるリードコマンドをSSD3に発行する。
【0012】
SSD3は、ホスト2に接続可能なストレージデバイスである。SSD3は、不揮発性メモリを含む。SSD3は、内部の不揮発性メモリにデータを書き込むことが可能である。また、SSD3は、内部の不揮発性メモリからデータを読み出すことが可能である。
【0013】
SSD3とホスト2との間の通信は、バス7を介して実行される。バス7は、ホスト2とSSD3とを接続する伝送路である。バス7は、例えば、PCI expressTM(PCIeTM)バスである。PCIeバスは、全二重(full duplex)伝送路である。全二重伝送路は、ホスト2からSSD3へデータおよび入出力(I/O)コマンドを送信する伝送路と、SSD3からホスト2へデータおよび応答を送信する伝送路との双方を含む。I/Oコマンドは、不揮発性メモリへのデータの書き込み、または不揮発性メモリからのデータの読み出しを行うためのコマンドである。I/Oコマンドは、例えば、ライトコマンド、またはリードコマンドである。
【0014】
ホスト2とSSD3とを接続するための論理インタフェースの規格としては、例えば、NVM expressTM(NVMeTM)規格が使用され得る。NVMe規格のインタフェースでは、少なくとも1つのサブミッションキュー(SQ)と、この少なくとも1つのサブミッションキュー(SQ)に関連付けられたコンプリーションキュー(CQ)とを含む対のキューを用いて、ホスト2とSSD3との間の通信が行われる。この対のキューは、サブミッションキュー/コンプリーションキューペア(SQ/CQペア)と称される。
【0015】
次に、ホスト2の構成について説明する。
【0016】
ホスト2は、プロセッサ21と、メモリ22とを含む。プロセッサ21およびメモリ22は、内部バス20を介して相互接続される。
【0017】
プロセッサ21は、例えばCPUである。プロセッサ21は、SSD3、または、ホスト2に接続された他のストレージデバイスからメモリ22にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアは、例えば、オペレーティングシステム、ファイルシステム、アプリケーションプログラム、を含む。
【0018】
メモリ22は、例えば揮発性のメモリである。メモリ22は、メインメモリ、システムメモリ、またはホストメモリとも称される。メモリ22は、例えばダイナミックランダムアクセスメモリ(DRAM)である。メモリ22の記憶領域の一部は、ホストライトバッファ221として使用される。ホストライトバッファ221は、SSD3の不揮発性メモリに書き込むべきデータを一時的に記憶する記憶領域である。
【0019】
また、メモリ22の記憶領域の他の一部は、SQ/CQペア222を格納するために使用される。SQ/CQペア222に含まれるサブミッションキューSQの各々は、SSD3にI/Oコマンド(ライトコマンド、リードコマンド)を発行するために使用されるキューである。サブミッションキューSQの各々は、複数のスロットを含む。複数のスロットの各々は、一つのI/Oコマンドを格納可能である。ホスト2は、サブミッションキューSQをホスト2のメモリ22に作成する。また、ホスト2は、サブミッションキュークリエイトコマンドをSSD3に発行する。サブミッションキューSQの各々が作成されたメモリ22内の記憶位置を示すアドレス、サブミッションキューSQの各々のサイズ、これらサブミッションキューSQに関連付けられたコンプリーションキューCQの識別子、等は、サブミッションキュークリエイトコマンドによってSSD3に通知される。
【0020】
SQ/CQペア222に含まれるコンプリーションキューCQは、I/Oコマンドの完了を示す完了応答をSSD3から受信するために使用されるキューである。完了応答は、完了したコマンドの処理の成功または失敗を示すステータスを示す情報を含む。完了応答は、コマンド完了、またはコマンド完了通知とも称される。コンプリーションキューCQは、複数のスロットを含む。複数のスロットの各々は、一つの完了応答を格納可能である。ホスト2は、コンプリーションキューCQをホスト2のメモリ22に作成する。また、ホスト2は、コンプリーションキュークリエイトコマンドをSSD3に発行する。コンプリーションキューCQが作成されたメモリ22内の記憶位置を示すアドレス、およびこのコンプリーションキューCQのサイズ、等は、コンプリーションキュークリエイトコマンドによってSSD3に通知される。
【0021】
次に、SSD3の内部構成について説明する。以下では、SSD3に含まれる不揮発性メモリがNAND型フラッシュメモリによって実現されている場合を想定する。尚、NAND型フラッシュメモリは他のフラッシュメモリや、MRAM、ReRAM、FeRAM、相変化メモリ等の他の不揮発性メモリであってもよい。
【0022】
SSD3は、コントローラ4と、NAND型フラッシュメモリ5と、を含む。また、SSD3は、ランダムアクセスメモリ、例えば、揮発性メモリであるダイナミックランダムアクセスメモリ(DRAM)6をさらに含んでいてもよい。
【0023】
NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。NAND型フラッシュメモリ5は、複数のブロックを含む。複数のブロックの各々は、データ消去動作の最小単位である。複数のブロックの各々は、メモリブロックまたは物理ブロックとも称される。複数のブロックの各々は、複数のページを含む。複数のページの各々は、データ書き込み動作およびデータ読み出し動作の各々の単位である。ページは、同じワード線に接続されたメモリセルの集合を含む。ページは、物理ページとも称される。
【0024】
NAND型フラッシュメモリ5は、複数のダイを含む。ダイは、メモリダイ、フラッシュダイ、メモリチップ、フラッシュチップとも称される。これらダイの各々は、NAND型フラッシュメモリダイとして実現される。以下では、ダイをフラッシュダイと称する。
図1においては、NAND型フラッシュメモリ5が、32個のフラッシュダイ#0~#31を含む場合が例として示されている。
【0025】
コントローラ4は、メモリコントローラである。コントローラ4は、例えば、System-on-a-Chip(SoC)のような制御回路である。コントローラ4は、NAND型フラッシュメモリ5およびDRAM6の各々に電気的に接続されている。コントローラ4は、ホスト2から受信されるI/Oコマンドそれぞれを処理することによって、NAND型フラッシュメモリ5からデータを読み出すためのリード処理と、NAND型フラッシュメモリ5にデータを書き込むためのライト処理とを実行する。コントローラ4とNAND型フラッシュメモリ5とを接続する物理インタフェースとしては、例えば、Toggleインタフェース、またはオープンNANDフラッシュインタフェース(ONFI)が使用される。コントローラ4の各部の機能は、専用ハードウェア、プログラムを実行するプロセッサ、またはこれら専用ハードウェアとプロセッサとの組み合わせにより実現され得る。
【0026】
コントローラ4は、複数の書き込み先ブロックを管理する。書き込み先ブロックは、データの書き込みが可能なオープン状態のブロック(データを書き込んでいる状態のブロック)である。ライト処理においては、コントローラ4は、異なる種類のデータを異なる書き込み先ブロックに書き込むための処理を実行する。ここで、異なる種類のデータは、例えば、異なるアプリケーションや異なるエンドユーザ(コンテナ、仮想マシン等のテナント)からのデータ、異なるライフタイムを有するデータ、等である。
【0027】
例えば、異なるアプリケーションからそれぞれの書込みデータがさまざまなタイミングで送信され、SSD3がその順番通りに書き込みを行う場合、一つのブロックに異なるアプリケーションからのデータが混在する可能性がある。これによりブロック間でのデータの入れ替えを伴うガベージコレクションを行う頻度が増加し、ライトアンプリフィケーション(ライト処理効率)を悪化させる。このようなライト処理効率の低下を防ぐために、アプリケーションごとにデータをまとめ、これらデータをあるブロックの連続した物理アドレスに書き込む、ストリーム書き込みを行うことが行われる。近年ではストリーム数が増大してきたため、限られたメモリ容量に対し多数のストリームをサポートする必要が出てきた。このように複数以上のストリームに対して書き込みを行うことを、マルチ・ストリーム書込みと呼ぶ。
【0028】
マルチ・ストリーム書き込みを実行する場合、コントローラ4は、複数のストリーム毎にコマンドで付与された識別子を認識し、各識別子それぞれ対応する複数の書き込み先ブロックを管理する。この際、コントローラ4は、アクティブなストリームの数と同数のブロックをオープン状態に設定する。そして、コントローラ4は、アクティブな複数のストリームそれぞれに、オープン状態の書き込み先ブロックを割り当てる。
【0029】
NVMeのゾーンド・ネームスペース規格で規定された複数のゾーンを使用する場合、コントローラ4は、複数のゾーンにそれぞれ対応する複数のブロックを管理する。この際、コントローラ4は、オープンされたゾーンの数と同数のブロックをオープン状態に設定する。そして、コントローラ4は、オープンされたゾーンそれぞれに、オープン状態の書き込み先ブロックを割り当てる。
【0030】
また、ホスト2が書き込み先ブロック(例えば書き込み先スーパーブロック)を示すブロックアドレスを指定するライトコマンドをSSD3に発行するというシステム構成が利用される場合、コントローラ4は、複数の書き込み先ブロックをホスト2に割り当てる。コントローラ4は、ホスト2に割り当てられたこれら書き込み先ブロックを管理する。
【0031】
また、複数の記憶領域(QoSドメイン)を作成および管理し、且つQoSドメイン毎に、複数のプレースメントIDにそれぞれ対応する複数の書き込み先ブロックを管理する場合、コントローラ4は、各QoSドメインで利用されているプレースメントIDの数と同数の書き込み先ブロックをQoSドメイン毎に管理する。
【0032】
また、ネームスペースごとに物理的に記憶領域が分けられている場合、コントローラ4は、ネームスペースの数と同数の書き込み先ブロックをこれらネームスペース用の物理記憶領域として管理する。
【0033】
DRAM6は、論理物理アドレス変換テーブル(logical-to-physical address translation table:L2Pテーブル)61を記憶する記憶領域を含む。また、DRAM6は、ブロック管理テーブル62を記憶する記憶領域と、DRAMライトバッファ63として使用される記憶領域と、複数の仮想ライトバッファ(VWB)64を記憶する記憶領域と、をさらに含む。
【0034】
L2Pテーブル61は、マッピング情報を格納するテーブルである。マッピング情報は、論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを所定の管理サイズの単位で示す情報である。論理アドレスは、SSD3にアクセスするためにホスト2によって使用されるアドレスである。論理アドレスとしては、例えば、論理ブロックアドレス(LBA)が使用される。物理アドレスは、NAND型フラッシュメモリ5内の記憶位置を示すアドレスである。物理アドレスは、例えば、フラッシュダイアドレス、ブロックアドレス、ページのアドレス、ページ内のオフセットアドレス、及び、これらの全部あるいは一部の任意の組み合わせ等によって表現され得る。また、ホスト2から送信されるI/Oコマンドに含まれるアドレスが、物理アドレスと論理アドレスである場合には、L2Pテーブルは、ホスト2のメモリ22に記憶されていてもよい。
【0035】
ブロック管理テーブル62は、NAND型フラッシュメモリ5に含まれる複数のブロックの各々の状態を管理するための情報を保持するテーブルである。
【0036】
DRAMライトバッファ63は、NAND型フラッシュメモリ5に書き込むべきデータを一時的に記憶する記憶領域である。DRAMライトバッファ63は、第1のライトバッファとしても参照される。
【0037】
複数のVWB64は、複数の書き込み先ブロックに1対1の関係でそれぞれ対応付けられている。各VWB64は、対応する書き込み先ブロックに対する未書き込みデータの量、等を保持するために使用される。複数のVWB64の詳細については、後述する。
【0038】
次に、コントローラ4の内部構成を説明する。コントローラ4は、例えば、ホストインタフェース(ホストI/F)41と、スタティックRAM(SRAM)42と、CPU43と、直接メモリアクセスコントローラ(DMAC)44と、誤り訂正回路45と、NANDインタフェース(NAND I/F)46と、DRAMインタフェース(DRAM I/F)47とを含む。これらホストインタフェース41と、SRAM42と、CPU43と、DMAC44と、誤り訂正回路45と、NANDインタフェース46と、DRAMインタフェース47とは、内部バス40を介して相互接続される。
【0039】
ホストインタフェース41は、ホスト2との通信を実行する通信インタフェース回路である。ホストインタフェース41は、例えば、PCIeコントローラによって実現されている。例えば、ホストインタフェース41が第5世代PCIeコントローラで、バス7に含まれるレーン数が4レーンである場合、ホストインタフェース41のデータ受信速度は、約16Gバイト/秒である。あるいは、ホストインタフェース41が第6世代PCIeコントローラで、バス7に含まれるレーン数が4レーンである場合、ホストインタフェース41のデータ受信速度は、約30Gバイト/秒である。また、ホストインタフェース41は、アービトレーション機構(図示せず)を含む。このアービトレーション機構は、SQ/CQペア222に含まれる複数のサブミッションキューSQから、I/OコマンドがフェッチされるべきサブミッションキューSQを選択する機構である。アービトレーション機構は、例えば、ラウンドロビンアービトレーション機構、または重み付きラウンドロビンアービトレーション機構である。
【0040】
SRAM42は、揮発性メモリである。SRAM42の記憶領域は、例えば、CPU43の作業領域として使用される。また、SRAM42は、SRAMライトバッファ421を記憶する記憶領域を含む。SRAMライトバッファ421は、NAND型フラッシュメモリ5に書き込むべきデータを一時的に記憶する記憶領域である。SRAMライトバッファ421は、DRAMライトバッファ63よりも小さい容量を有し且つDRAMライトバッファ63よりも大きいバンド幅を有している。SRAMライトバッファ421は、第2のライトバッファとしても参照される。
【0041】
ここで、DRAMライトバッファ63の容量およびバンド幅とSRAMライトバッファ421の容量およびバンド幅との関係の例について説明する。
【0042】
SSD3において利用可能な一般的なDRAMのバンド幅は、例えば25Gバイト/秒である。このため、DRAMライトバッファ63は、25Gバイト/秒のバンド幅を有する。DRAMライトバッファ63を使用するライト処理においては、データをDRAMライトバッファ63に書き込む処理と、データをDRAMライトバッファ63から読み出す処理と、が必要となる。このため、DRAMライトバッファ63を介してNAND型フラッシュメモリ5にデータを書き込む際、DRAMライトバッファ63を通過するデータの速度は、DRAMライトバッファ63のバンド幅の半分の速度、つまり、約12.5Gバイト/秒である。
【0043】
DRAMライトバッファ63の容量は、例えば、[NAND型フラッシュメモリ5の最小書き込みサイズ]×[書き込み先ブロックの数]によって与えられる容量に設定される。NAND型フラッシュメモリ5の最小書き込みサイズは、NAND型フラッシュメモリ5のデータ書き込み動作に必要なデータの最小サイズである。例えば、ページサイズが16KiBで、データ書き込み動作のモードがメモリセル当たりに3ビットを記憶するトリプルレベルセル(TLC)モードであり、フラッシュダイ当たりのプレーン数が4である場合、最小書き込みサイズは、192KiB(=16KiB×3bit×4Plane)となる。
【0044】
なお、複数のチャンネルを介してデータを複数のフラッシュダイに並列に書き込む場合には、最小書き込みサイズは、さらに大きくなる。例えば、並列書き込みに使用されるチャンネル数が8である場合を想定する。この場合、最小書き込みサイズは、約1.5MiB(=16KiB×3bit×4Plane×8ch)となる。ここで、書き込み先ブロックの数が、1000個である場合には、DRAMライトバッファ63の容量は、約1.5GBに設定され得る。
【0045】
一方、コントローラ4で利用可能な一般的なSRAMのバンド幅は、DRAMのバンド幅よりも十分大きい。このため、SRAMライトバッファ421を介してNAND型フラッシュメモリ5にデータを書き込む際にSRAMライトバッファ421を通過するデータの速度は、DRAMライトバッファ63を通過するデータの速度よりも十分に速い。また、SRAMライトバッファ421の容量は、例えば、[NAND型フラッシュメモリ5の最小書き込みサイズ]によって与えられる容量に設定される。つまり、NAND型フラッシュメモリ5の最小書き込みサイズが1.5MiBである場合には、SRAMライトバッファ421の容量は、1.5MiBに設定され得る。
【0046】
CPU43は、プロセッサである。CPU43は、NAND型フラッシュメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM42にロードする。そして、CPU43は、このファームウェアを実行することによって様々な処理を行う。なお、ファームウェアは、DRAM6にロードされてもよい。
【0047】
CPU43は、例えば、フラッシュトランスレーション層(FTL)として、NAND型フラッシュメモリ5に記憶されたデータの管理と、NAND型フラッシュメモリ5に含まれるブロックの管理とを行う。NAND型フラッシュメモリ5に記憶されたデータの管理は、例えば、マッピング情報の管理を含む。CPU43は、L2Pテーブル61のマッピング情報を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間のマッピングを管理サイズの単位で管理する。管理サイズは、例えば、4KiBである。
【0048】
NAND型フラッシュメモリ5においては、ブロック内のページへのデータの書き込みは、このブロックの1プログラム/イレーズサイクル当たり1回のみ可能である。つまり、データが既に書き込まれているブロック内の記憶位置(物理記憶位置)に新たなデータを直接上書きすることはできない。このため、既にブロック内の物理記憶位置に書き込まれているデータを更新する場合には、コントローラ4は、そのブロック(または別のブロック)内の未書き込みページ(空きページ)に新たなデータを書き込み、そして以前のデータを無効データとして扱う。換言すれば、コントローラ4は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、L2Pテーブル61を更新して、この論理アドレスに、この別の物理記憶位置を示す物理アドレスを関連付ける。
【0049】
NAND型フラッシュメモリ5に含まれるブロックの管理は、NAND型フラッシュメモリ5に含まれる不良ブロック(バッドブロック)の管理と、ウェアレベリングと、ガベージコレクション(GC)とを含む。
【0050】
DMAC44は、ダイレクトメモリアクセス(DMA)を実行する回路である。DMAC44は、ホスト2のメモリ22とSRAM42(またはDRAM6)との間のデータ転送を実行する。例えば、ライト処理においては、DMAC44は、ホストライトバッファ221からSRAM42(またはDRAM6)にライトデータを転送する処理を実行する。
【0051】
誤り訂正回路45は、NAND型フラッシュメモリ5にデータが書き込まれる際に、エンコード処理を実行する。エンコード処理において、誤り訂正回路45は、NAND型フラッシュメモリ5に書き込まれるべきデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた際に、誤り訂正回路45は、デコード処理を実行する。デコード処理において、誤り訂正回路45は、NAND型フラッシュメモリ5から読み出されたデータに付加されたECCを使用して、このデータの誤り訂正を実行する。
【0052】
NANDインタフェース46は、NAND型フラッシュメモリ5を制御する回路である。NANDインタフェース46は、NAND型フラッシュメモリ5に含まれる複数のフラッシュダイに電気的に接続される。
【0053】
個々のフラッシュダイは、独立して動作可能である。このため、フラッシュダイは、並列動作可能な単位として機能する。NANDインタフェース46は、例えば、NANDコントローラ461-0、461-1、…、461-7を含む。NANDコントローラ461-0、461-1、…、461-7は、チャンネルch0、ch1、…、ch7にそれぞれ接続される。NANDコントローラ461-0、461-1、…、461-7の各々は、対応するチャンネルを介して、1つまたは複数のフラッシュダイに接続される。
図1においては、チャンネルch0、ch1、…、ch7の各々に4つのフラッシュダイが接続されている場合が例示されている。この場合、NANDコントローラ461-0は、チャンネルch0を介して、フラッシュダイ#0、#8、#16および#24に接続される。NANDコントローラ461-1は、チャンネルch1を介して、フラッシュダイ#1、#9、#17および#25に接続される。そして、NANDコントローラ461-7は、チャンネルch7を介して、フラッシュダイ#7、#15、#23および#31に接続される。フラッシュダイ#0、#1、…、#7は、コントローラ4によってバンクBNK0として扱われる。フラッシュダイ#8、#9、…、#15は、コントローラ4によってバンクBNK1として扱われる。フラッシュダイ#16、#17、…、#23は、コントローラ4によってバンクBNK2として扱われる。フラッシュダイ#24、#25、…、#31は、コントローラ4によってバンクBNK3として扱われる。バンクは、インターリーブ動作によって、複数のフラッシュダイを並列動作させる単位である。
【0054】
図2は、実施形態に係るメモリシステムにおいて使用される、複数のチャンネルと複数のフラッシュダイとの関係を示す構成例を示すブロック図である。
【0055】
図2に示されているように、フラッシュダイ#0~#31の各々は、複数のブロックBLK1~BLKx-1を含む。
図1および
図2に示される構成例においては、コントローラ4は、8チャンネルと、バンクインタリーブ動作とによって、フラッシュダイ#0~#31を並列にアクセスすることができる。このため、コントローラ4は、最大で32個のフラッシュダイに対するデータの書き込みまたは読み出しを並列に実行することができる。なお、フラッシュダイ#0~#31の各々は、複数のプレーンを有するマルチプレーン構成を有していてもよい。例えば、フラッシュダイ#0~#31の各々が4プレーンを含む場合、コントローラ4は、最大で128個のプレーンに対するデータの書き込みまたは読み出しを並列に実行することができる。
【0056】
複数の書き込み先ブロックの各々は、一つのブロック(物理ブロック)であってもよいし、並列動作可能な複数の物理ブロックの集合を含むスーパーブロックであってもよい。
【0057】
一つのスーパーブロックは、これに限定されないが、NAND型フラッシュメモリダイ#0~#31から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリダイ#0~#31の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリダイ#0~#31の各々が、4つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリダイ#0~#31に対応する128個のプレーンから一つずつ選択される計128個の物理ブロックを含んでいてもよい。
【0058】
図3は、実施形態に係るメモリシステムにおいて使用される、スーパーブロックの構成例を示す図である。
図3には、32個の物理ブロック(ここでは、NAND型フラッシュメモリダイ#0の物理ブロックBLK2、NAND型フラッシュメモリダイ#1の物理ブロックBLK3、NAND型フラッシュメモリダイ#2の物理ブロックBLK7、…、NAND型フラッシュメモリダイ#24内の物理ブロックBLK4、NAND型フラッシュメモリダイ#25内の物理ブロックBLK6、…、NAND型フラッシュメモリダイ#31内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0059】
なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。また、ここでは、各フラッシュダイ#0から#31にかかるスーパーブロックは同一のPage0、1、2…、となっているが、これに限らず設定することも可能である。
【0060】
図1の説明に戻る。DRAMインタフェース47は、DRAM6を制御する回路である。DRAMインタフェース47は、DRAM6にデータを格納する。また、DRAMインタフェース47は、DRAM6に格納されているデータを読み出す。
【0061】
次に、CPU43の機能構成を説明する。CPU43は、FTLとして機能する構成要素に加え、リード処理部431、およびライト処理部432を含む。
【0062】
リード処理部431およびライト処理部432の各々の一部または全部は、コントローラ4の専用ハードウェアによって実現されてもよい。
【0063】
リード処理部431は、ホスト2から受信されるリードコマンドそれぞれを処理することによって、リード処理を実行する。リード処理は、L2Pテーブル61を参照することによって、リードコマンドによって指定された論理アドレスを物理アドレスに変換する処理と、物理アドレスによって示されるNAND型フラッシュメモリ5内の記憶位置からデータを読み出す処理と、読み出されたデータをホスト2のメモリ22に転送する処理と、を含む。
【0064】
ライト処理部432は、ホスト2から受信されるライトコマンドそれぞれを処理することによって、ライト処理を実行する。ライト処理は、ホストライトバッファ221からSRAMライトバッファ421あるいはDRAMライトバッファ63にライトデータをロード(転送)する処理と、SRAMライトバッファ421あるいはDRAMライトバッファ63にロードされたライトデータをNAND型フラッシュメモリ5内の記憶位置に書き込む処理と、L2Pテーブル61を更新して、ライトコマンドによって指定された論理アドレスに、ライトデータが書き込まれた記憶位置を示す物理アドレスをマッピングする処理と、を含む。
【0065】
ライト処理部432は、フラッシュマネージメント部433と、スケジューラ434と、を含む。
【0066】
フラッシュマネージメント部433は、ホスト2のサブミッションキュー(SQ)からライトコマンドを受信する。ライトコマンドは、NAND型フラッシュメモリ5に書き込むべきライトデータのサイズを示す情報(第1の情報とも称する)と、ライトデータに関連付けられた書き込み先ブロックを直接的又は間接的に指定可能な情報(第2の情報)と、を少なくとも含む。書き込み先ブロックを間接的に指定可能な情報とは、例えば、(1)マルチ・ストリーム書き込みのために使用されるライトコマンドに含まれるストリーム識別子、(2)ゾーンド・ネームスペース規格で使用されるライトコマンドに含まれる論理アドレス(開始LBA:SLBA)の上位ビット部、(3)書き込み先のQoSドメインを指定するライトコマンドに含まれるQoSドメインIDとプレースメントIDとの組み合わせ、または(4)ネームスペースごとに物理的に記憶領域が分けられている場合には、ライトコマンドに含まれるネームスペース識別子等である。
【0067】
書き込み先ブロックを直接的に指定可能な情報とは、例えば、ホスト2に複数の書き込み先ブロックを割り当てるシステム構成においてホスト2によって発行されるライトコマンドに含まれるブロックアドレス(スーパーブロックアドレス)等である。
【0068】
フラッシュマネージメント部433は、受信したライトコマンドに含まれる第2の情報に基づいて、受信したライトコマンドを、第1の書き込み先ブロックにデータを書き込むための第1のグループ、又は第2の書き込み先ブロックにデータを書き込むための第2のグループに分類する。第1のグループは、同じ書き込み先ブロック(ここでは第1の書き込み先ブロック)にデータを書き込むためのライトコマンドの集合である。第1のグループに関連付けられたデータ、つまり、第1のグループに属するライトコマンドの集合に関連付けられたデータは、この第1のグループに対応する第1の書き込み先ブロックに書き込まれる。第2のグループは、同じ書き込み先ブロック(ここでは第2の書き込み先ブロック)にデータを書き込むためのライトコマンドの集合である。第2のグループに関連付けられたデータ、つまり、第2のグループに属するライトコマンドの集合に関連付けられたデータは、この第2のグループに対応する第1の書き込み先ブロックに書き込まれる。フラッシュマネージメント部433は、第1のグループに関連付けられ且つNAND型フラッシュメモリ5に未だ書き込まれていないデータ(未書き込みデータ)を、第1の書き込み先ブロックに対応するVWB64を使用して管理する。また、フラッシュマネージメント部433は、第2のグループに関連付けられ且つNAND型フラッシュメモリ5に未だ書き込まれていないデータ(未書き込みデータ)を、第2の書き込み先ブロックに対応するVWB64を使用して管理する。
【0069】
フラッシュマネージメント部433は、受信したライトコマンドに含まれる第1の情報(NAND型フラッシュメモリ5に書き込むべきライトデータのサイズを示す情報)に基づいて、所定時間当たりに書き込みが要求されるデータの量を示す書き込み速度が第1の値以上であるか否かを、第1及び第2のグループに対して判定する。この場合、フラッシュマネージメント部433は、受信したライトコマンドの各々に含まれる第1の情報に基づいて、同じグループに関連付けられた未書き込みデータの量を、複数のグループの各々について算出する。例えば、フラッシュマネージメント部433は、第1のグループに分類されたライトコマンドの各々に含まれる第1の情報に基づいて、第1のグループに関連付けられた未書き込みデータの量を算出する。また、フラッシュマネージメント部433は、第2のグループに分類されたライトコマンドの各々に含まれる第1の情報に基づいて、第2のグループに関連付けられた未書き込みデータの量を算出する。
【0070】
例えば、ライトコマンドCMD1~CMD5が受信され、ライトコマンドCMD1~CMD3が第1のグループに分類され、ライトコマンドCMD4~CMD5が第2のグループに分類された場合を想定する。この場合、フラッシュマネージメント部433は、ライトコマンドCMD1~CMD3によってそれぞれ指定されるライトデータのサイズの合計を、第1のグループに関連付けられた未書き込みデータの量として算出する。また、フラッシュマネージメント部433は、ライトコマンドCMD4~CMD5によってそれぞれ指定されるライトデータのサイズの合計を、第2のグループに関連付けられた未書き込みデータの量として算出する。
【0071】
フラッシュマネージメント部433は、第1のグループに関連付けられた未書き込みデータ(第1のデータとも称する)の量に基づいて、第1のグループの書き込み速度が第1の値以上であるか否かを判定する。また、フラッシュマネージメント部433は、第2のグループに関連付けられた未書き込みデータ(第2のデータとも称する)の量に基づいて、第2のグループの書き込み速度が第1の値以上であるか否かを判定する。
【0072】
第1のグループの書き込み速度が第1の値以上である場合、フラッシュマネージメント部433は、第1のグループを速い書き込み速度を有するグループであると判定する。また、第1のグループの書き込み速度が第1の値未満である場合、フラッシュマネージメント部433は、第1のグループを遅い書き込み速度を有するグループであると判定する。同様に、第2のグループの書き込み速度が第1の値以上である場合、フラッシュマネージメント部433は、第2のグループを速い書き込み速度を有するグループであると判定する。また、第2のグループの書き込み速度が第1の値未満である場合、フラッシュマネージメント部433は、第2のグループを遅い書き込み速度を有するグループであると判定する。
【0073】
スケジューラ434は、スケジューリング処理を実行する。スケジューリング処理は、複数の書き込み先ブロックからデータが書き込まれるべき書き込み先ブロックを周期的に選択する処理を含む。換言すれば、スケジューリング処理は、第1及び第2のグループを少なくとも含む複数のグループのうちの一つのグループを、NAND型フラッシュメモリ5への書き込みが許可されたグループとして選択する処理である。スケジューラ434は、NAND型フラッシュメモリ5におけるデータ書き込み動作の開始または終了に応じて、ライトデータが未ロードの新たなライトコマンドを含むグループのうちのいずれかのグループを選択するスケジューリング処理を実行する。換言すれば、スケジューラ434は、第1及び第2のグループのうち、ライトデータが未ロードの新たなライトコマンドを含むいずれかのグループを選択する。未ロードのライトデータは、未書き込みデータのうち、未だDRAMライトバッファ63およびSRAMライトバッファ421のいずれにもロードされていない、ホストライトバッファ221上に格納されているライトデータである。スケジューラ434は、例えば、スケジューリング処理において、複数のVWB64のうちの一つのVWB64を選択することによって、一つの書き込み先ブロックに対応する一つのグループを、NAND型フラッシュメモリ5への書き込みが許可されたグループとして選択する。スケジューラ434は、ライトデータが未ロードの新たなライトコマンドが到着しているVWB64のうちのいずれかのVWB64を、NAND型フラッシュメモリ5への書き込みが許可されたグループとして選択する。
【0074】
あるVWB64(つまり、あるグループ)がスケジューラ434によって選択された場合、フラッシュマネージメント部433は、選択されたグループの書き込み速度が第1の値以上であるか否か、つまり、選択されたグループが速い書き込み速度を有するグループまたは遅い書き込み速度を有するグループのいずれであるかを判定する。
【0075】
ここで、第1のグループが選択され、第1のグループが遅い書き込み速度のグループである場合、つまり、第1のグループの書き込み速度が第1の値未満である場合を想定する。フラッシュマネージメント部433は、第1のグループに対応するライトデータのうち、未ロードのライトデータ、つまりホストライトバッファ221に格納されているライトデータを、DRAMライトバッファ63にロードする。そして、フラッシュマネージメント部433は、DRAMライトバッファ63にロードされたライトデータに関連付けられた一つ以上のライトコマンドに対応する一つ以上の完了応答をホスト2に送信する。そして、第1のグループに属する新たな一つ以上のライトコマンドが受信されて、第1のグループに対応する未書き込みのライトデータの総量がNAND型フラッシュメモリ5の最小書き込みサイズ以上になった後に、フラッシュマネージメント部433は、DRAMライトバッファ63から書き込み先ブロックにライトデータを書き込む。この書き込み先ブロックは、第1のグループに割り当てられている第1の書き込み先ブロックである。第1の書き込み先ブロックへのライトデータの書き込みにおいては、DRAMライトバッファ63から読み出したライトデータをNAND型フラッシュメモリ5に直接的に転送してもよいし、DRAMライトバッファ63から読み出したライトデータを、別のデータバッファ、例えば、SRAMライトバッファ421を介してNAND型フラッシュメモリ5に転送してもよい。
【0076】
次に、第2のグループが選択され、第2のグループが速い書き込み速度のグループである場合、つまり、第2のグループの書き込み速度が第2の値以上である場合を想定する。フラッシュマネージメント部433は、第2のグループに関連付けられ且つ最小書き込みサイズを有するライトデータをホストライトバッファ221からSRAMライトバッファ421にロードし、そのライトデータを書き込み先ブロックにすぐに書き込む。この書き込み先ブロックは、選択された第2のグループに割り当てられている第2の書き込み先ブロックである。この場合、SRAMライトバッファ421にロードされたライトデータは、NAND型フラッシュメモリ5に転送され、そして第2のグループに割り当てられている第2の書き込み先ブロックに書き込まれる。NAND型フラッシュメモリ5へのライトデータの転送が完了すると、SRAMライトバッファ421の記憶領域は、解放される。したがって、SRAMライトバッファ421は、最小書き込みサイズを有する次のライトデータの格納に利用可能となる。
【0077】
なお、以上の説明では、NAND型フラッシュメモリ5への次の書き込みの準備を開始可能になるタイミングで未書き込みデータの量が最小書き込みサイズ以上であるか否かを判定することによって各グループの書き込み速度が第1の値以上であるか否かを判定したが、書き込み速度が第1の値以上であるか否かの判定は、各ライトコマンドに含まれる第1の情報に基づく他の様々な方法を使用して実行し得る。尚、第1の値は、SRAMライトバッファ421、DRAMライトバッファ63、又は、仮想ライトバッファ64のサイズや、SRAM42のバンド幅、DRAM6のバンド幅等から決定される値に近づいていくように自動的に制御される。
【0078】
次に、比較例に係るメモリシステムにおけるライトデータの流れについて説明する。
図4は、第1の比較例に係るメモリシステムのライト処理におけるライトデータの流れを示す図である。第1の比較例は、全てのグループに対応するライトデータが、揮発性メモリである小サイズライトバッファ421Aを介してNAND型フラッシュメモリ5Aに書き込まれる例である。
【0079】
第1の比較例において、コントローラは、複数のグループそれぞれに対応するライトデータ(未書き込みデータ)の総量を管理する。コントローラは、あるグループに対応するライトデータの総量が最小書き込みサイズ以上になると、最小書き込みサイズを有するライトデータをホストライトバッファ221Aから小サイズライトバッファ421Aにロードする。そして、小サイズライトバッファ421Aにロードされたライトデータを、NAND型フラッシュメモリ5Aに書き込む。NAND型フラッシュメモリ5Aに書き込むことができるサイズを有するデータが小サイズライトバッファ421Aにロードされるため、小サイズライトバッファ421Aにライトデータが格納されている期間は短くなる。このことから、小サイズライトバッファ421A上のライトデータの各々は、他のどのライトデータにも追い越されることはない。
【0080】
つまり、1番目にホストライトバッファ221Aから小サイズライトバッファ421Aにロードされたライトデータは、1番目に小サイズライトバッファ421AからNAND型フラッシュメモリ5Aに書き込まれる。2番目にホストライトバッファ221Aから小サイズライトバッファ421Aにロードされたライトデータは、2番目に小サイズライトバッファ421AからNAND型フラッシュメモリ5Aに書き込まれる。3番目にホストライトバッファ221Aから小サイズライトバッファ421Aにロードされたライトデータは、3番目に小サイズライトバッファ421AからNAND型フラッシュメモリ5Aに書き込まれる。そして、4番目にホストライトバッファ221Aから小サイズライトバッファ421Aにロードされたライトデータは、4番目に小サイズライトバッファ421AからNAND型フラッシュメモリ5Aに書き込まれる。
【0081】
このことから、ライトデータが、ホストライトバッファ221Aから小サイズライトバッファ421Aにロードされる順序と、小サイズライトバッファ421AからNAND型フラッシュメモリ5Aに書き込まれる順序とは同一である。
【0082】
しかしながら、遅い書き込み速度を有するグループに関連付けられたライトデータは、そのライトデータの総量が最小書き込みサイズ以上になるまでに長い時間を要する場合がある。この場合、このライトデータは、長い間、ホストライトバッファ221Aから小サイズライトバッファ421Aにロードされない。遅い書き込み速度を有するグループに関連付けられたライトデータが小サイズライトバッファ421Aにロードされるまでは、そのライトデータは、ホストライトバッファ221Aに維持しておくことが必要である。このため、コントローラは、遅い書き込み速度を有するグループに属するライトコマンドの各々に対する完了応答をホストに返すことができず、コマンド処理のレイテンシが長くなる。
【0083】
また、遅い書き込み速度を有するグループの数が多い場合には、ホストライトバッファ221Aが、遅い書き込み速度を有するこれらグループのライトデータによって占有されてしまう場合もある。
【0084】
図5は、第2の比較例に係るメモリシステムのライト処理におけるライトデータの流れを示す図である。第2の比較例は、全てのグループに対応するライトデータを、揮発性メモリである大サイズライトバッファ63Bを介してNAND型フラッシュメモリ5Bに書き込む。
【0085】
第2の比較例において、コントローラは、一つのライトコマンドを受信したことに応じて、そのライトコマンドに関連付けられたライトデータをホストライトバッファ221Bから大サイズライトバッファ63Bにロードする。そして、コントローラは、大サイズライトバッファ63Bに格納されているライトデータのうち、一つのグループに対応するライトデータの総量が最小書き込みサイズに達すると、最小書き込みサイズを有するライトデータを大サイズライトバッファ63BからNAND型フラッシュメモリ5に書き込む。このことから、大サイズライトバッファ63Bにロードされたライトデータは、最小書き込みサイズに達するまでの間、大サイズライトバッファ63Bに滞留する。このことから、大サイズライトバッファ63Bにライトデータが格納されている期間は、長くなる。よって、大サイズライトバッファ63B上でライトデータが別のグループに関連付けられたライトデータに追い越される場合がある。
【0086】
つまり、1番目にホストライトバッファ221Bから大サイズライトバッファ63Bにロードされたライトデータであっても、そのライトデータに対応するグループの未書き込みデータの総量が最小書き込みサイズに達したタイミングが2番目である場合、大サイズライトバッファ63BからNAND型フラッシュメモリ5Bに書き込まれるタイミングは2番目になる。2番目にホストライトバッファ221Bから大サイズライトバッファ63Bにロードされたライトデータであっても、そのライトデータに対応するグループの未書き込みデータの総量が最小書き込みサイズに達したタイミングが4番目である場合、大サイズライトバッファ63BからNAND型フラッシュメモリ5Bに書き込まれるタイミングは4番目になる。3番目にホストライトバッファ221Bから大サイズライトバッファ63Bにロードされたライトデータであっても、そのライトデータに対応するグループの未書き込みデータの総量が最小書き込みサイズに達したタイミングが1番目である場合、大サイズライトバッファ63BからNAND型フラッシュメモリ5Bに書き込まれるタイミングは1番目になる。そして、4番目にホストライトバッファ221Bから大サイズライトバッファ63Bにロードされたライトデータであっても、そのライトデータに対応するグループの未書き込みデータの総量が最小書き込みサイズに達したタイミングが3番目である場合、大サイズライトバッファ63BからNAND型フラッシュメモリ5Bに書き込まれるタイミングは3番目になる。
【0087】
このことから、ライトデータが、ホストライトバッファ221Bから大サイズライトバッファ63Bにロードされる順序と、大サイズライトバッファ63BからNAND型フラッシュメモリ5Bに書き込まれる順序とは、異なる順序になる。
【0088】
次に、実施形態に係るSSD3において実行されるライト処理について説明する。
図6は、実施形態に係るメモリシステムの、ライト処理におけるライトデータの流れを示す図である。
【0089】
SSD3のフラッシュマネージメント部433は、複数のライトコマンドを受信したことに応じて、複数のライトコマンドを異なる書き込み先ブロックにデータを書き込むための複数のグループに分類する。具体的には、フラッシュマネージメント部433は、複数のライトコマンドの各々に含まれる第2の情報に基づいて、複数のライトコマンドを複数のグループに分類する。
【0090】
SSD3に発行される各ライトコマンドが書き込み先スーパーブロックを直接的に指定するライトコマンドである場合、各ライトコマンドは、ライトデータのサイズと、スーパーブロックアドレスと、開始LBAと、データポインタと、を含む。ライトデータのサイズは、例えば、LBAの数によって表される。スーパーブロックアドレスは、ライトデータが書き込まれるべき書き込み先スーパーブロックを示す情報である。開始LBAは、ライトデータに対応するLBAのうちの先頭のLBAである。データポインタは、ライトデータが格納されているホストライトバッファ221の記憶位置を示す情報である。フラッシュマネージメント部433は、受信した複数のライトコマンドの各々に含まれるスーパーブロックアドレスに基づいて、同じスーパーブロックアドレスを指定するライトコマンドの集合が同一のグループに属するように、受信した複数のライトコマンドを複数のグループに分類する。
【0091】
SSD3に発行される各ライトコマンドがマルチ・ストリーム書き込みのために使用されるライトコマンドである場合、各ライトコマンドは、ライトデータのサイズと、ストリームIDと、開始LBAと、データポインタとを含む。同じストリームIDを有するライトコマンドの集合に関連付けられたデータは、例えば、同じ予期されるライフタイムを有するデータ、あるいは同一のアプリケーションに関連付けられたデータである。フラッシュマネージメント部433は、受信した複数のライトコマンドの各々に含まれるストリームIDに基づいて、同じストリームIDを指定するライトコマンドの集合が同じグループに属するように、受信した複数のライトコマンドを複数のグループに分類する。
【0092】
SSD3に発行される各ライトコマンドが書き込み先のQoSドメインを指定するライトコマンドである場合、各ライトコマンドは、ライトデータのサイズと、QoSドメインIDと、プレースメントIDと、開始LBAと、データポインタとを含む。フラッシュマネージメント部433は、受信した複数のライトコマンドの各々に含まれるQoSドメインIDとプレースメントIDとに基づいて、指定されたQoSドメインIDと指定されたプレースメントIDの組み合わせが同じであるライトコマンドの集合が同じグループに属するように、受信した複数のライトコマンドを複数のグループに分類する。
【0093】
SSD3に発行される各ライトコマンドがゾーンド・ネームスペース規格で使用されるライトコマンドである場合、各ライトコマンドは、ライトデータのサイズと、開始LBAと、データポインタとを含む。開始LBAの上位ビット部は、書き込み先のゾーンを指定するアドレスである。フラッシュマネージメント部433は、受信した複数のライトコマンドの各々に含まれる開始LBAの上位ビット部に基づいて、同じゾーンを指定するライトコマンドの集合が同じグループに属するように、受信した複数のライトコマンドを複数のグループに分類する。
【0094】
SSD3に発行される各ライトコマンドがネームスペースを指定するライトコマンドである場合には、各ライトコマンドは、ライトデータのサイズと、ネームスペースIDと、開始LBAと、データポインタとを含む。ネームスペースごとに物理的に記憶領域が分けられている場合、ネームスペースIDによって、一つの書き込み先ブロックが指定される。この場合、フラッシュマネージメント部433は、受信した複数のライトコマンドの各々に含まれる開始LBAの上位ビット部に基づいて、同じネームスペースIDを指定するライトコマンドの集合が同じグループに属するように、受信した複数のライトコマンドを複数のグループに分類する。
【0095】
以降では、複数のグループを複数のストリームとも称する。このストリームは、ストリームIDによって指定される狭義のストリームに限定されず、先に説明した様々な識別子または様々なアドレスによって指定される広義のストリームである。
【0096】
フラッシュマネージメント部433は、受信した複数のライトコマンドの各々に含まれるライトデータのサイズに基づいて、複数のストリームそれぞれについて書き込み速度を算出する。書き込み速度は、例えば、所定時間当たりに発行されたライトコマンドに関連付けられたライトデータの総量によって算出される。
【0097】
まず、複数のストリームのうちの書き込み速度が第1の値以上であるストリーム(第1のグループとも称される)のデータの流れについて説明する。
【0098】
フラッシュマネージメント部433は、このストリームを、速い書き込み速度を有するストリーム(以下、速いストリームとも称する)であると判定する。フラッシュマネージメント部433は、このストリームに属するライトコマンドの集合に関連付けられており且つ最小書き込みサイズを有するライトデータを、ホストライトバッファ221からSRAMライトバッファ421にロードする。そして、SRAMライトバッファ421にロードされたライトデータを、NAND型フラッシュメモリ5に書き込む。NAND型フラッシュメモリ5に書き込むことができるサイズを有するデータがSRAMライトバッファ421にロードされるため、SRAMライトバッファ421にライトデータが格納されている期間は、短くなる。このことから、SRAMライトバッファ421上のライトデータの各々は、他のどのライトデータにも追い越されることはない。
【0099】
つまり、1番目にホストライトバッファ221からSRAMライトバッファ421にロードされたライトデータは、1番目にSRAMライトバッファ421からNAND型フラッシュメモリ5に書き込まれる。2番目にホストライトバッファ221からSRAMライトバッファ421にロードされたライトデータは、2番目にSRAMライトバッファ421からNAND型フラッシュメモリ5に書き込まれる。3番目にホストライトバッファ221からSRAMライトバッファ421にロードされたライトデータは、3番目にSRAMライトバッファ421からNAND型フラッシュメモリ5に書き込まれる。そして、4番目にホストライトバッファ221からSRAMライトバッファ421にロードされたライトデータは、4番目にSRAMライトバッファ421からNAND型フラッシュメモリ5に書き込まれる。
【0100】
このことから、ライトデータが、ホストライトバッファ221からSRAMライトバッファ421にロードされる順序と、SRAMライトバッファ421からNAND型フラッシュメモリ5に書き込まれる順序とが同一である。
【0101】
このように、速いストリームに関連付けられたライトデータは、SRAMライトバッファ421を介してNAND型フラッシュメモリ5に書き込まれる。したがって、速いストリームに関連付けられたライトデータを、DRAMライトバッファ63を介してNAND型フラッシュメモリ5に書き込む場合に比し、速いストリームに関連付けられライトデータをNAND型フラッシュメモリ5に高速で書き込むことができる。
【0102】
次に、複数のストリームのうちの書き込み速度が第1の値未満であるストリーム(第2のグループとも称される)のデータの流れについて説明する。
【0103】
フラッシュマネージメント部433は、このストリームを遅い書き込み速度を有するストリーム(以下、遅いストリームとも称する)であると判定する。フラッシュマネージメント部433は、このストリームに属するライトコマンドの集合に関連付けられたライトデータをホストライトバッファ221からDRAMライトバッファ63にロードする。そして、フラッシュマネージメント部433は、DRAMライトバッファ63に格納されているライトデータのうち、一つのグループに対応する未書き込みのライトデータの総量が最小書き込みサイズに達すると、最小書き込みサイズを有するライトデータをDRAMライトバッファ63からNAND型フラッシュメモリ5に書き込む。このことから、DRAMライトバッファ63にロードされたライトデータは、最小書き込みサイズに達するまでの間、DRAMライトバッファ63に保持される。よって、DRAMライトバッファ63にライトデータが格納されている期間は、長くなる。また、DRAMライトバッファ63上でライトデータの追い越しが発生し得る。
【0104】
つまり、1番目にホストライトバッファ221からDRAMライトバッファ63にロードされたライトデータであっても、そのライトデータに対応するグループの未書き込みデータの総量が最小書き込みサイズに達したタイミングが2番目である場合、DRAMライトバッファ63からNAND型フラッシュメモリ5に書き込まれるタイミングは2番目になる。2番目にホストライトバッファ221からDRAMライトバッファ63にロードされたライトデータであっても、そのライトデータに対応するグループの未書き込みデータの総量が最小書き込みサイズに達したタイミングが4番目である場合、DRAMライトバッファ63からNAND型フラッシュメモリ5に書き込まれるタイミングは4番目になる。3番目にホストライトバッファ221からDRAMライトバッファ63にロードされたライトデータであっても、そのライトデータに対応するグループの未書き込みデータの総量が最小書き込みサイズに達したタイミングが1番目である場合、DRAMライトバッファ63からNAND型フラッシュメモリ5に書き込まれるタイミングは1番目になる。そして、4番目にホストライトバッファ221からDRAMライトバッファ63にロードされたライトデータであっても、そのライトデータに対応するグループの未書き込みデータの総量が最小書き込みサイズに達したタイミングが3番目である場合、DRAMライトバッファ63からNAND型フラッシュメモリ5に書き込まれるタイミングは3番目になる。
【0105】
このことから、ライトデータが、ホストライトバッファ221からDRAMライトバッファ63にロードされる順序と、DRAMライトバッファ63からNAND型フラッシュメモリ5に書き込まれる順序とは、異なる順序になる。
【0106】
このように、遅いストリームに関連付けられたライトデータの総量が最小書き込みサイズ未満であっても、このライトデータは、ホストライトバッファ221からDRAMライトバッファ63にロードされる。このライトデータがDRAMライトバッファ63にロードされると、このライトデータが格納されているホストライトバッファ221内の記憶領域は解放可能となる。よって、DRAMライトバッファ63へのライトデータのロードが完了すると、遅いストリームに属するライトコマンドの各々に対する完了応答をホスト2に返すことが可能となる。よって、
図4で説明した比較例に比し、遅いストリームに対するコマンド処理のレイテンシを短くすることができる。
【0107】
図7は、実施形態に係るメモリシステムの、別のライト処理におけるライトデータの流れを示す図である。
【0108】
個々のストリームの書き込み速度は、動的に変化する場合がある。第2の例では、ストリームの書き込み速度の動的な変化に追従可能なライト処理が実行される。
【0109】
図7では、書き込み先スーパーブロックSB#1~SB#4に対応する4つのVWB#1~#4と、4つのVWB#1~#4にそれぞれ対応する4つの先入れ先出し(FIFO)バッファと、がVWB64に含まれている場合が例として示されている。
【0110】
フラッシュマネージメント部433は、ホスト2のサブミッションキュー222aから複数のライトコマンドをフェッチする。
【0111】
フラッシュマネージメント部433は、フェッチした複数のライトコマンドの各々に含まれる第2の情報に基づいて、フェッチした複数のライトコマンドを、4つの書き込み先スーパーブロックSB#1~SB#4にそれぞれ対応する4つのストリームに分類する。
【0112】
そして、書き込み先スーパーブロックSB#1に対応するストリームに関しては、フラッシュマネージメント部433は、このストリームに属するライトコマンドの各々を、VWB#1に対応するFIFOに格納する。そして、フラッシュマネージメント部433は、このFIFOに格納されているライトコマンドの集合に関連付けられたライトデータの総量を示す情報と、このライトデータが格納されているホストライトバッファ221内の記憶位置を示す情報と、をVWB#1に登録する。このFIFOに格納されているライトコマンドの集合に関連付けられたライトデータの総量は、書き込み先スーパーブロックSB#1に対応するストリームに関連付けられた未書き込みデータの量を示す。未書き込みデータは、NAND型フラッシュメモリ5に未だに書き込まれていないデータである。このように、フラッシュマネージメント部433は、書き込み先スーパーブロックSB#1に対応するストリームに関連付けられた未書き込みデータを、VWB#1を使用して管理する。
【0113】
書き込み先スーパーブロックSB#2に対応するストリームに関しては、フラッシュマネージメント部433は、このストリームに属するライトコマンドの各々を、VWB#2に対応するFIFOに格納する。そして、フラッシュマネージメント部433は、このFIFOに格納されているライトコマンドの集合に関連付けられたライトデータの総量を示す情報と、このライトデータが格納されているホストライトバッファ221の記憶位置を示す情報と、をVWB#2に登録する。このFIFOに格納されているライトコマンドの集合に関連付けられたライトデータの総量は、書き込み先スーパーブロックSB#2に対応するストリームに関連付けられた未書き込みデータの量を示す。このように、フラッシュマネージメント部433は、書き込み先スーパーブロックSB#2に対応するストリームの未書き込みデータを、VWB#2を使用して管理する
書き込み先スーパーブロックSB#3に対応するストリームに関しては、フラッシュマネージメント部433は、このストリームに属するライトコマンドの各々を、VWB#3に対応するFIFOに格納する。そして、フラッシュマネージメント部433は、このFIFOに格納されているライトコマンドの集合に関連付けられたライトデータの総量を示す情報と、このライトデータが格納されているホストライトバッファ221の記憶位置を示す情報と、をVWB#3に登録する。このFIFOに格納されているライトコマンドの集合に関連付けられたライトデータの総量は、書き込み先スーパーブロックSB#3に対応するストリームに関連付けられた未書き込みデータの量を示す。このように、フラッシュマネージメント部433は、書き込み先スーパーブロックSB#3に対応するストリームの未書き込みデータを、VWB#3を使用して管理する
書き込み先スーパーブロックSB#4に対応するストリームに関しては、フラッシュマネージメント部433は、このストリームに属するライトコマンドの各々を、VWB#4に対応するFIFOに格納する。そして、フラッシュマネージメント部433は、このFIFOに格納されているライトコマンドの集合に関連付けられたライトデータの総量を示す情報と、このライトデータが格納されているホストライトバッファ221の記憶位置を示す情報と、をVWB#4に登録する。このFIFOに格納されているライトコマンドの集合に関連付けられたライトデータの総量は、書き込み先スーパーブロックSB#4に対応するストリームに関連付けられた未書き込みデータの量を示す。このように、フラッシュマネージメント部433は、書き込み先スーパーブロックSB#4に対応するストリームの未書き込みデータを、VWB#4を使用して管理する。
【0114】
VWB#1~#4のうち、データが未ロードの新たなライトコマンドが到着しているVWBは、書き込み要求が存在することを示す通知をスケジューラ434に通知する。したがって、スケジューラ434は、データが未ロードの新たなライトコマンドが到着しているVWBのリスト、つまりデータが未ロードの新たなライトコマンドを含むストリームのリストを保持している。
【0115】
NAND型フラッシュメモリ5への次の書き込みの準備を開始可能になるタイミングで、つまり、NAND型フラッシュメモリ5のデータ書き込み動作の開始または終了に応じ、スケジューラ434は、データが未ロードの新たなライトコマンドが到着しているVWBうちのいずれかのVWB、つまりデータが未ロードの新たなライトコマンドを含むストリームのうちのいずれかのストリームを、書き込みが許可されたVWB(ストリーム)として選択する。
【0116】
フラッシュマネージメント部433は、スケジューラ434によって選択されたVWBに登録されている未書き込みデータの量が最小書き込みサイズ以上であるか否かを判定する。
【0117】
例えば書き込み先スーパーブロック(SB)#3に対応するVWB#3が、スケジューラ434によって選択される場合を想定する。フラッシュマネージメント部433は、VWB#3に登録されている未書き込みデータの量が最小書き込みサイズ以上であるか否かを判定する。VWB#3が書き込み先スーパーブロックSB#3に対応していることから、VWB#3に登録されている未書き込みデータの量は、書き込み先スーパーブロックSB#3に書き込まれるべきデータの量、つまり、VWB#3に対応するストリームに関連付けられた未書き込みデータの量である。ここで、VWB#3に登録されている未書き込みデータの量が最小書き込みサイズ以上である場合を想定する。
【0118】
この場合、フラッシュマネージメント部433は、VWB#3に対応するストリームが速い書き込み速度を有すると判定する。そして、フラッシュマネージメント部433は、VWB#3に登録されている未書き込みデータのうち、DRAMライトバッファ63にロード済みのデータが存在するか否かを判定する。例えば、前回のスケジューリング処理でVWB#3が選択された際に、VWB#3に登録されている未書き込みデータの量が最小書き込みサイズ未満であった場合には、VWB#3に現在登録されている未書き込みデータのうちの一部のデータがDRAMライトバッファ63にロード済みである。一方、前回のスケジューリング処理でVWB#3が選択された際に、VWB#3に登録されている未書き込みデータの量が最小書き込みサイズ以上であった場合には、VWB#3に登録されている未書き込みデータの全てがホストライトバッファ221に存在するので、VWB#3に登録されている未書き込みデータのいずれもDRAMライトバッファ63に存在しない。
【0119】
DRAMライトバッファ63にロード済みの未書き込みデータが存在する場合、フラッシュマネージメント部433は、DRAMライトバッファ63およびホストライトバッファ221の双方から、SRAMライトバッファ421にロードされる未書き込みデータの総量が最小書き込みサイズになるように、未書き込みデータをDRAMライトバッファ63およびホストライトバッファ221の各々からSRAMライトバッファ421にロードする。
【0120】
例えば、最小書き込みサイズが1.5MiBで、VWB#3に登録されている未書き込みデータのうちの1.3MiBのデータがDRAMライトバッファ63にロード済みで、VWB#3に登録されている未書き込みデータのうちの0.2MiBのデータが未ロードのデータである場合を想定する。
【0121】
この場合、フラッシュマネージメント部433は、1.3MiBのデータをDRAMライトバッファ63からSRAMライトバッファ421にロード(コピー)し、そして、0.2MiBのデータをホストライトバッファ221からSRAMライトバッファ421に、DRAMライトバッファ63を介して、または直接的に、ロードする。
【0122】
その後、フラッシュマネージメント部433は、SRAMライトバッファ421にロードされた未書き込みデータを書き込み先スーパーブロックSB#3に書き込む。
【0123】
書き込み先スーパーブロックSB#3への書き込みが完了したことに応じて、フラッシュマネージメント部433は、以下の処理を行う。すなわち、フラッシュマネージメント部443は、ホストライトバッファ221からSRAMライトバッファ421にロードされ、書き込み先スーパーブロックSB#3に書き込まれたライトデータに関連付けられた一つ以上のライトコマンドに対応する一つ以上の完了応答を発行し、コンプリーションキュー222bに格納する。つまり、フラッシュマネージメント部433は、VWB#1に登録されている未書き込みデータのうちの0.2MiBのデータに対応する一つ以上の完了応答をホスト2に送信する。なぜなら、VWB#3に登録されている未書き込みデータのうちの1.3MiBのデータに対応する完了応答それぞれは、これらのデータがDRAMライトバッファ63にロードされた時にホスト2に既に送信されているからである。
【0124】
VWB#3に登録されている未書き込みデータのうち、DRAMライトバッファ63にロード済みの未書き込みデータが存在しない場合、フラッシュマネージメント部433は、VWB#3に登録されている未書き込みデータであって、最小書き込みサイズを有する未書き込みデータをホストライトバッファ221からSRAMライトバッファ421にロードする。その後、フラッシュマネージメント部433は、SRAMライトバッファ421にロードされた未書き込みデータを書き込み先スーパーブロックSB#3に書き込む。書き込み先スーパーブロックSB#3への書き込みが完了したことに応じて、フラッシュマネージメント部433は、以下の処理を行う。すなわち、フラッシュマネージメント部443は、ホストライトバッファ221からSRAMライトバッファ421にロードされ、書き込み先スーパーブロックSB#3に書き込まれたライトデータに関連付けられた一つ以上のライトコマンドに対応する一つ以上の完了応答を発行し、コンプリーションキュー222bに格納する。つまり、VWB#3に登録されている1.5MiBのデータの全てがホストライトバッファ221からSRAMライトバッファ421にロードされたので、フラッシュマネージメント部433は、この1.5MiBのデータに対応する全ての完了応答をホスト2に送信する。
【0125】
次に、書き込み先スーパーブロックSB#3に対応するVWB#1が、スケジューラ434によって選択される場合について説明する。フラッシュマネージメント部433は、VWB#1に登録されている未書き込みデータの総量が最小書き込みサイズ以上であるか否かを判定する。VWB#1が書き込み先スーパーブロックSB#1に対応していることから、VWB#1に登録されている未書き込みデータは、書き込み先スーパーブロックSB#1に書き込まれるべきデータである。ここで、VWB#1に登録されている未書き込みデータが最小書き込みサイズ未満である場合を想定する。
【0126】
この場合、フラッシュマネージメント部433は、VWB#1に対応するストリームが遅い書き込み速度を有すると判定する。そして、フラッシュマネージメント部433は、VWB#1に登録されている未書き込みデータのうち、未ロードのデータを、ホストライトバッファ221からDRAMライトバッファ63にロードする。そして、フラッシュマネージメント部433は、DRAMライトバッファ63にロードされたデータに関連付けられた一つ以上のライトコマンドに対応する一つ以上の完了応答を発行し、コンプリーションキュー222bに格納する。
【0127】
このように、ライト処理の第2の例では、NAND型フラッシュメモリ5への次の書き込みの準備が開始可能になる度に、スケジューラ434は、一つのVWBを選択する。そして、選択されたVWBに登録されている未書き込みデータの総量が最小書き込みサイズ以上であるか否かに基づいて、DRAMライトバッファ63またはSRAMライトバッファ421が選択的に使用される。よって、ある幾つかのストリームの書き込み速度が動的に変化する場合であっても、その書き込み速度の動的な変化に従って、ロード先のライトバッファをDRAMライトバッファ63とSRAMライトバッファ421との間で適切に切り替えることが可能となる。
【0128】
なお、以上の説明では、DRAMライトバッファ63にロードされたデータをSRAMライトバッファ421にコピーする場合を説明したが、DRAMライトバッファ63にロードされたデータをNAND型フラッシュメモリ5に直接的に書き込むという方法を使用することも可能である。
【0129】
次に、ライト処理の手順について説明する。
図8は、実施形態に係るメモリシステムの、ライト処理の手順の第1の例を示すフローチャートである。
【0130】
コントローラ4は、ホスト2から複数のライトコマンドを受信する(ステップS101)。
【0131】
コントローラ4は、受信した複数のライトコマンドを複数の書き込み先ブロックにそれぞれ対応する複数のグループに分類する(ステップS102)。具体的には、コントローラ4は、受信した複数のライトコマンドの各々に含まれる第2の情報に基づいて、受信した複数のライトコマンドの各々を複数のグループに分類する。
【0132】
コントローラ4は、データが未ロードの新たなライトコマンドを含むグループのうちの一つのグループを、NAND型フラッシュメモリ5への書き込みが許可されたグループとして選択する(ステップS103)。グループを選択する処理は予め決められた所定のタイミングで実行されればよく、グループを選択するタイミングは特に限定されない。
【0133】
コントローラ4は、S103で選択されたグループの書き込み速度が第1の値以上であるか否かを判定する(ステップS104)。具体的には、コントローラ4は、S101で受信した複数のライトコマンドの各々に含まれる第1の情報に基づいて、書き込む速度を算出する。
【0134】
書き込み速度が第1の値以上である場合(S104でYes)、コントローラ4は、S103で選択されたグループに関連付けられ且つ最小書き込みサイズを有する未ロードのデータを、ホストライトバッファ221からSRAMライトバッファ421にロードする(ステップS105)。コントローラ4のフラッシュマネージメント部433は、データがロードされたSRAMライトバッファ421の記憶位置を示す情報を、選択されたグループに対応するVWBに登録し得る。
【0135】
コントローラ4は、最小書き込みサイズを有する、S105でSRAMライトバッファ421にロードされたデータを書き込み先ブロックに書き込む(ステップS106)。
【0136】
コントローラ4は、S106の書き込み処理が完了したことに応じて、NAND型フラッシュメモリ5に書き込まれたデータに関連付けられた一つ以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する(ステップS107)。
【0137】
データが未ロードの新たなライトコマンドを含むグループに未選択のグループが残っている場合、コントローラ4は、未選択の残りのグループのうちの別のグループを新たに選択し、新たに選択した別のグループに対しても同様の処理を行ってもよい。
【0138】
この場合、コントローラ4は、データが未ロードの新たなライトコマンドを含むグループの全てが選択されたか否かを判定する(ステップS108)。
【0139】
データが未ロードの新たなライトコマンドを含むグループの全てがS103ですでに選択された場合(S108でYes)、コントローラ4は、ライト処理を終了する。
【0140】
データが未ロードの新たなライトコマンドを含むグループに未選択のグループが残っている場合(S108でNo)、コントローラ4は、S103に戻り、データが未ロードの新たなライトコマンドを含むグループのうちの未だ選択されていないグループから一つのグループを選択する。
【0141】
一方、S103で選択されたグループの書き込み速度が第1の値未満である場合(S104でNo)、コントローラ4は、S103で選択されたグループに関連付けられ且つ未ロードのデータをホストライトバッファ221からDRAMライトバッファ63にロードする(ステップS109)。コントローラ4のフラッシュマネージメント部433は、データがロードされたDRAMライトバッファ63の記憶位置を示す情報を、選択されたグループに対応するVWBに登録し得る。
【0142】
コントローラ4は、S109でDRAMライトバッファ63にロードされたデータに関連付けられた一つ以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する(ステップS110)。
【0143】
前回のライト処理において、S103で選択されたグループと同じグループが選択された場合には、このグループに関連付けられたデータがDRAMライトバッファ63に既にロードされている場合もある。このため、コントローラ4は、S103で選択されたグループに関連付けられた未書き込みデータの量が最小書き込みサイズ以上であるか否かを判定する(ステップS111)。例えば、コントローラ4のフラッシュマネージメント部433は、選択されたグループに対応するVWB64に登録されているライトデータのサイズを示す情報に基づいて、未書き込みデータの量を算出する。
【0144】
S103で選択されたグループに対応する未書き込みデータの量が最小書き込みサイズ以上である場合(S111でYes)、コントローラ4は、S103で選択されたグループに対応する書き込み先ブロックにデータを書き込む(ステップS112)。
【0145】
S103で選択されたグループに対応する未書き込みデータの量が最小書き込みサイズ未満である場合(S111でNo)、コントローラ4は、S112の手順をスキップする。
【0146】
次のライト処理で、S103で選択されたグループが再び選択される場合もある。この場合、このグループに関連付けられ且つ未ロードのデータが、ホストライトバッファ221からDRAMライトバッファ63にロードされる。そして、このグループの未書き込みデータの量が最小書き込みサイズ以上になっていた場合、コントローラ4は、このグループに対応する未書き込みデータを、このグループに対応する書き込み先ブロックに書き込む。
【0147】
図9は、実施形態に係るメモリシステムの、ライト処理の手順の第2の例を示すフローチャートである。
【0148】
ここでは、ストリームの書き込み速度の動的な変化に従って、ロード先のライトバッファをDRAMライトバッファ63とSRAMライトバッファ421との間で適切に切り替える場合を想定する。
【0149】
コントローラ4は、ホスト2から複数のライトコマンドを受信する(ステップS201)。
【0150】
コントローラ4は、受信した複数のライトコマンドを複数の書き込み先ブロックにそれぞれ対応する複数のグループに分類する(ステップS202)。具体的には、コントローラ4は、複数のライトコマンドの各々に含まれる第2の情報に基づいて、受信した複数のライトコマンドを複数のグループに分類する。
【0151】
コントローラ4は、同じグループに関連付けられている未書き込みデータの量を、複数のグループの各々について算出する(ステップS203)。具体的には、コントローラ4は、各VWBに登録されているライトデータのサイズを示す第1の情報に基づいて、グループごとに未書き込みデータの量を算出する。
【0152】
コントローラ4は、NAND型フラッシュメモリ5におけるデータ書き込み動作が開始されたか否か、あるいは終了されたか否かを判定する(ステップS204)。
【0153】
NAND型フラッシュメモリ5におけるデータ書き込み動作が開始されたとき、あるいは終了されたときのいずれのタイミングにも該当していない場合(S204でNo)、コントローラ4は、NAND型フラッシュメモリ5におけるデータ書き込み動作が開始されるか、あるいは終了されるまで待つ。
【0154】
NAND型フラッシュメモリ5におけるデータ書き込み動作が開始されるか、あるいは終了された場合(S204でYes)、コントローラ4は、データが未ロードの新たなライトコマンドを含むグループのうちのいずれかのグループを選択する(ステップS205)。
【0155】
コントローラ4は、S205で選択されたグループに関連付けられた未書き込みデータの量が最小書き込みサイズ以上であるか否かを、S203で算出された未書き込みデータの量に基づいて、判定する(ステップS206)。
【0156】
未書き込みデータの量が最小書き込みサイズ未満である場合(S206でNo)、コントローラ4は、S205で選択されたグループに関連付けられた未ロードのデータを、ホストライトバッファ221からDRAMライトバッファ63にロードする(ステップS207)。コントローラ4のフラッシュマネージメント部433は、データがロードされたDRAMライトバッファ63の記憶位置を示す情報を、選択されたグループに対応するVWBに登録し得る。
【0157】
コントローラ4は、S207でDRAMライトバッファ63にロードされたデータに関連付けられた一つ以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する(ステップS209)。
【0158】
S205で選択されたグループに関連付けられた未書き込みデータの量が最小書き込みサイズ以上である場合(S206でYes)、コントローラ4は、S205で選択されたグループに関連付けられ且つDRAMライトバッファ63にロード済みの未書き込みデータが存在するか否かを判定する(ステップS209)。
【0159】
S205で選択されたグループに関連付けられ且つDRAMライトバッファ63にロード済みの未書き込みデータが存在する場合(S209でYes)、コントローラ4は、DRAMライトバッファ63およびホストライトバッファ221の双方からSRAMライトバッファ421にロードされる未書き込みデータの総量が最小書き込みサイズになるように、選択されたグループに関連付けられた未書き込みデータをDRAMライトバッファ63およびホストライトバッファ221の各々からSRAMライトバッファ421にロードする(ステップS210)。
【0160】
コントローラ4は、S210でSRAMライトバッファ421にロードしたデータを、書き込み先ブロックに書き込む(ステップS211)。
【0161】
コントローラ4は、S211におけるデータ書き込み処理が完了したことに応じて、S210でホストライトバッファ221からSRAMライトバッファ421にロードされ且つS211で書き込み先ブロックに書き込まれたライトデータに関連付けられた一つ以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する(ステップS212)。
【0162】
S212で完了応答を送信したコントローラ4は、データが未ロードの新たなライトコマンドを含むグループの全てが選択されたか否かを判定する(ステップS213)。
【0163】
データが未ロードの新たなライトコマンドを含むグループの全てがS205で選択された場合(S213でYes)、コントローラ4は、ライト処理を終了する。
【0164】
データが未ロードの新たなライトコマンドを含むグループに未選択のグループが残っている場合(S213でNo)、コントローラ4は、S204に戻る。そして、NAND型フラッシュメモリ5におけるデータ書き込み動作が開始されたとき、あるいは終了されたときのいずれのタイミングで、コントローラ4は、データが未ロードの新たなライトコマンドを含むグループのうちの未だ選択されていないグループから一つのグループを選択する。
【0165】
選択されたグループに関連付けられ且つDRAMライトバッファ63にロード済みの未書き込みデータが存在しない場合(S209でNo)、コントローラ4は、S205で選択されたグループに関連付けられ且つ最小書き込みサイズを有する未ロードのデータを、ホストライトバッファ221からSRAMライトバッファ421にロードする(ステップS213)。
【0166】
そして、コントローラ4は、S214でSRAMライトバッファ421にロードされたデータを書き込み先ブロックに書き込み(ステップS211)、S211において書き込み先ブロックに書き込まれたデータに関連付けられた一つ以上のライトコマンドの完了を示す一つ以上の完了応答をホスト2に送信する(ステップS212)。
【0167】
S212で完了応答を送信したコントローラ4は、データが未ロードの新たなライトコマンドを含むグループの全てが選択されたか否かを判定する(ステップS213)。
【0168】
データが未ロードの新たなライトコマンドを含むグループが全てS205で選択された場合(S213でYes)、コントローラ4は、ライト処理を終了する。
【0169】
データが未ロードの新たなライトコマンドを含むグループに未選択のグループが残っている場合(S213でNo)、コントローラ4は、S204に戻る。
【0170】
次に、ホスト2からライトコマンドを受信したときに動作について詳細に説明する。
図10は、実施形態に係るメモリシステムおけるライトコマンド受信時の手順を示すフローチャートである。
【0171】
コントローラ4は、ホスト2からライトコマンドを受信する(ステップS301)。具体的には、コントローラ4は、サブミッションキュー222aからライトコマンドをフェッチする。
【0172】
コントローラ4は、S301で受信したライトコマンドが属するグループの未書き込みデータの量に受信したライトコマンドに関連付けられたライトデータのサイズを加算し、これによって未書き込みデータの量を更新する(ステップS302)。
【0173】
コントローラ4は、未書き込みデータをDRAMライトバッファ63にロード中であるか否かを判定する(ステップS303)。
【0174】
未書き込みデータをDRAMライトバッファ63にロード中である場合(S303でYes)、コントローラ4は、ライトコマンド受信動作を終了する。
【0175】
未書き込みデータをDRAMライトバッファ63にロード中でない場合(S303でNo)、コントローラ4のフラッシュマネージメント部433は、S301で受信したライトコマンドが属するグループに、未ロードのデータに関連付けられた新たなライトコマンドが存在することを、コントローラ4のスケジューラ434に通知する(ステップS304)。
【0176】
次に、
図10のライトコマンド受信動作終了後、NAND型フラッシュメモリへのデータ書き込み動作の手順について説明する。
図11は、実施形態に係るメモリシステムにおいて実行される書き込み動作の手順を示すフローチャートである。コントローラ4は、コントローラ4のスケジューラ434が、NAND型フラッシュメモリ5のデータ書き込み動作の開始または終了に応じ複数のグループから一つのグループを選択し、選択したグループに対応する書き込み動作を開始する。スケジューラ434は、例えば、
図10のS304で発行された通知に対応するグループから、一つのグループを選択し得る。
【0177】
コントローラ4は、スケジューラ434によって選択されたグループに関連付けられた未書き込みデータの総量が最小書き込みサイズ以上であるか否かを判定する(ステップS401)。
【0178】
未書き込みデータの総量が最小書き込みサイズ以上である場合(S401でYes)、コントローラ4は、選択されたグループに関連付けられ且つDRAMライトバッファ63にロード済みの未書き込みデータが存在しているか否かを判定する(ステップS402)。
【0179】
選択されたグループに関連付けられ且つDRAMライトバッファ63にロード済みの未書き込みデータが存在している場合(S402でYes)、コントローラ4は、この未書き込みデータをDRAMライトバッファ63からSRAMライトバッファ421にコピーする(ステップS403)。
【0180】
選択されたグループに関連付けられ且つDRAMライトバッファ63にロード済みの未書き込みデータが存在しない場合(S402でNo)、コントローラ4は、S403の手順をスキップする。
【0181】
コントローラ4は、次に書き込み先ブロックに書き込まれるべきライトデータが、全てSRAMライトバッファ421にロードされているか否かを判定する(ステップS404)。
【0182】
次に書き込み先ブロックに書き込まれるべきライトデータのうち、SRAMライトバッファ421に未だロードされていないデータが存在する場合(S404でNo)、コントローラ4は、未ロードのライトデータを、ホストライトバッファ221からSRAMライトバッファ421にロードする(ステップS405)。
【0183】
次に書き込み先ブロックに書き込まれるべきライトデータが全てSRAMライトバッファ421にロードされている場合(S404でYes)、コントローラ4は、S405の手順をスキップする。
【0184】
コントローラ4は、SRAMライトバッファ421からNAND型フラッシュメモリ5に、1ページ分のライトデータと、書き込み指示とを送信する(ステップS406)。
【0185】
コントローラ4は、最小書き込みサイズ分の書き込み指示が完了したか否かを判定する(ステップS407)。
【0186】
最小書き込みサイズ分の書き込み指示が完了していない場合(S407でNo)、コントローラ4は、S402の手順に戻り、後続するライトデータの書き込みを実行する。
【0187】
最小書き込みサイズ分の書き込み指示が完了した場合(S407でYes)、コントローラ4は、書き込み動作を終了する。
【0188】
また、未書き込みデータの総量が最小書き込みサイズ未満である場合(ステップS401でNo)、コントローラ4は、選択されたグループが後続のライトコマンドを待つ状態に移行することをスケジューラ434に通知する(ステップS408)。
【0189】
コントローラ4は、選択されたグループに関連付けられた未ロードのデータを、DRAMライトバッファ63にロードする(ステップS409)。
【0190】
コントローラ4は、S409でデータがロードされたDRAMライトバッファ63の記憶位置を示す情報を、VWB64に登録する(ステップS410)。
【0191】
そして、コントローラ4は、DRAMライトバッファ63にロードされておらず、ホストライトバッファ221上に存在している未ロードのデータに関連付けられているライトコマンドが存在するか否かを判定する(ステップS411)。S411で未ロードのデータに該当し得るデータに関連付けられたライトコマンドは、例えば、S409におけるデータのロード中に受信されたライトコマンドであって、
図10のS304における通知を発行することができなかったライトコマンドである。
【0192】
未ロードのデータに関連付けられたライトコマンドが存在する場合(S411でYes)、コントローラ4は、書き込み要求が存在することをスケジューラ434に通知し(ステップS412)、書き込み動作を終了する。
【0193】
未ロードのデータに関連付けられたライトコマンドが存在しない場合(S411でNo)、コントローラ4は、S412の手順をスキップして、書き込み動作を終了する。
【0194】
以上説明したように、実施形態に係るSSD3において、コントローラ4は、複数のグループそれぞれの書き込み速度に応じて、SRAMライトバッファ421を使用したデータの書き込み、あるいは、DRAMライトバッファ63を使用したデータの書き込みのいずれかを実行する。
【0195】
コントローラ4は、選択したグループの書き込み速度が速い場合には、ライトデータをSRAMライトバッファ421にロードし、ロードしたライトデータをNAND型フラッシュメモリ5に書き込む。つまり、コントローラ4は、SRAMライトバッファ421を介して、ライトデータをNAND型フラッシュメモリ5の書き込み先ブロックに書き込む。DRAMライトバッファ63を介してライトデータをNAND型フラッシュメモリ5に書き込むケースでは、DRAM6のバンド幅がボトルネックとなって、SSD3の書き込み性能が制限されてしまう。SRAM42のバンド幅は、DRAM6のバンド幅と比較して十分に大きい。そのため、書き込み速度が速いグループに関連付けられたライトデータを、SRAMライトバッファ421を介してNAND型フラッシュメモリ5に書き込むことにより、DRAMライトバッファ63を介してライトデータをNAND型フラッシュメモリ5に書き込む場合に比し、NAND型フラッシュメモリ5にライトデータを高速で書き込むことができる。
【0196】
一方、選択したグループの書き込み速度が遅い場合には、選択したグループに関連付けられたライトデータをDRAMライトバッファ63にロードし、選択したグループに属する後続のライトコマンドが受信されて、選択したグループに関連付けられたライトデータの量が最小書き込みサイズに達した後に、選択したグループに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込む。そのため、ライトバッファとして使用される揮発性メモリには、十分にライトデータを格納することができる容量が必要とされる。このため、全ての揮発性メモリをSRAM42によって実現した場合には、コスト増が引き起きされる。そのため、比較的安価なDRAM6を使用することで、コストの増大を避けることができる。
【0197】
また、コントローラ4は、ライトデータをDRAMライトバッファ63に格納した際に、ホスト2に完了応答を送信する。これにより、遅い書き込み速度のグループに対するコマンド処理のレイテンシを短くすることができる。
【0198】
また、本実施形態では、NAND型フラッシュメモリ5への次の書き込みの準備が開始可能になる度に、一つのVWBが選択される。そして、選択されたVWBに登録されている未書き込みデータの量が最小書き込みサイズ以上であるか否かに基づいて、DRAMライトバッファ63またはSRAMライトバッファ421が選択的に使用される。よって、ある幾つかのストリームの書き込み速度が動的に変化する場合であっても、その書き込み速度の動的な変化に従って、ロード先のライトバッファをDRAMライトバッファ63とSRAMライトバッファ421との間で適切に切り替えることが可能となる。
【0199】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0200】
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、6…DRAM、7…バス、20…内部バス、21…プロセッサ、22…メモリ、40…内部バス、41…ホストインタフェース、42…SRAM、43…CPU、44…DMAC、45…誤り訂正回路、46…NANDインタフェース、47…DRAMインタフェース、61…L2Pテーブル、62…ブロック管理テーブル、63…DRAMライトバッファ、64…仮想ライトバッファ、421…SRAMライトバッファ、431…リード処理部、432…ライト処理部、433…フラッシュマネージメント部、434…スケジューラ。