以下、実施の形態について図面を参照して説明する。(第1実施形態)
まず、図1および図2を参照して、実施形態に係るメモリシステムを含む情報処理システム1の構成を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、NAND型フラッシュメモリを備えたソリッドステートドライブ(SSD)3として実現されている。
情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。ホスト2は、SSD3にアクセスする情報処理装置(コンピューティングデバイス)である。ホスト2は、大量且つ多様なデータをSSD3に保存するサーバ(ストレージサーバ)であってもよいし、パーソナルコンピュータであってもよい。
SSD3は、ホスト2として機能する情報処理装置のメインストレージとして使用され得る。SSD3は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
ホスト2とSSD3とを相互接続するためのインタフェースとしては、SCSI、Serial Attached SCSI(SAS)、ATA、Serial ATA(SATA)、PCI Express(PCIe)(登録商標)、Ethernet(登録商標)、Fibre channel、NVM Express(NVMe)(登録商標)等が使用され得る。
SSD3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。コントローラ4は、System-on-a-chip(SoC)のような回路によって実現され得る。SSD3は、揮発性メモリであるランダムアクセスメモリ、例えば、DRAM6を備えていてもよい。あるいは、SRAMのようなランダムアクセスメモリがコントローラ4に内蔵されていてもよい。図2に示すように、DRAM6等のランダムアクセスメモリには、例えば、NAND型フラッシュメモリ5に書き込まれるデータを一時的に格納するためのバッファ領域であるライトバッファ(WB)31およびGCバッファ32と、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブル(LUT)33のキャッシュ領域とが設けられている。さらに、DRAM6等のランダムアクセスメモリには、処理中に用いられる各種の値(例えば、ユーティライゼーション34、疲弊度351等)や、各種のテーブル(例えば、ブロック-P/Eサイクル数テーブル352、LBA範囲-アクセス頻度テーブル361、ブロック-有効データ量テーブル362、ブロック-低頻度アクセス割合テーブル363、LBA範囲-書き込みモードテーブル371、ネームスペースID-書き込みモードテーブル372、ストリームID-書き込みモードテーブル373等)の格納領域が設けられてもよい。なお、DRAM6は、コントローラ4の外部に設けられていてもよい。
LUT33は、図3に示すように、論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間のマッピングを管理する。
疲弊度351は、NAND型フラッシュメモリ5全体の疲弊の程度を表す値(統計値)である。この疲弊度351は、図4に示すブロック-P/Eサイクル数テーブル352を用いて算出されてもよい。ブロック-P/Eサイクル数テーブル352は、NAND型フラッシュメモリ5に含まれるブロック(ブロック番号)毎にP/Eサイクル数を管理する。この場合、疲弊度351は、ブロック-P/Eサイクル数テーブル352を用いて、NAND型フラッシュメモリ5に含まれる全ブロックそれぞれのP/Eサイクル数を統計処理することにより算出される。なお、後述するように、ブロック-P/Eサイクル数テーブル352は、P/Eサイクル数に替えて、あるいはP/Eサイクル数に加えて、ブロック毎の疲弊度を管理してもよい。
LBA範囲-アクセス頻度テーブル361は、図5に示すように、LBA範囲毎にアクセス頻度を管理する。各LBA範囲は開始LBA,終了LBAによって規定されてもよいし、開始LBAとサイズとによって規定されてもよい。
ブロック-有効データ量テーブル362は、図6に示すように、ブロック(ブロック番号)毎に有効データ量を管理する。各ブロックの有効データ量は、クラスタの数によって表現されてもよいし、パーセンテージによって表現されてよいし、あるいは、バイトのような単位で表現されてもよい。ブロック-有効データ量テーブル362は、ホスト2から受信したコマンドに応じた動作やガベージコレクション動作に応じて、各ブロックの有効データ量が変動した場合に更新される。
ブロック-低頻度アクセス割合テーブル363は、ブロック(ブロック番号)毎にアクセス頻度が低い有効データの割合(低頻度アクセス割合)を管理する。図7に示すように、ブロック-低頻度アクセス割合テーブル363は、例えば、ブロック番号と、高頻度アクセス有効データ量と、低頻度アクセス有効データ量と、低頻度アクセス割合とを含む。高頻度アクセス有効データ量および低頻度アクセス有効データ量は、LUT33およびLBA範囲-アクセス頻度テーブル361の更新に応じて、LBA範囲に含まれるLBA毎のアクセス頻度の変更に応じて、増加または減少する。低頻度アクセス割合は、高頻度アクセス有効データ量と低頻度アクセス有効データ量とを用いて算出され、例えばパーセンテージによって表現されてもよい。
LBA範囲-書き込みモードテーブル371は、図8に示すように、LBA範囲とこのLBA範囲に対応する書き込みモードとの対応関係を管理する。各LBA範囲は開始LBA,終了LBAによって規定されてもよいし、開始LBAとサイズとによって規定されてもよい。
ネームスペースID-書き込みモードテーブル372は、図9に示すように、ネームスペースIDとこのネームスペースIDに対応する書き込みモードとの対応関係を管理する。
ストリームID-書き込みモードテーブル373は、図10に示すように、ストリームIDとこのストリームIDに対応する書き込みモードとの対応関係を管理する。
図1に戻り、NAND型フラッシュメモリ5は、複数のNAND型フラッシュメモリチップ(複数のNAND型フラッシュメモリダイ)を含んでいてもよい。各チップは、メモリセル当たりに複数ビットを格納可能に構成されたフラッシュメモリとして実現されている。
メモリセル当たりに複数ビットを格納可能に構成されたフラッシュメモリの例には、メモリセル当たりに2ビットのデータを格納可能なマルチレベルセル(MLC、あるいは4LC)フラッシュメモリ、メモリセル当たりに3ビットのデータを格納可能なトリプルレベルセル(TLC、あるいは8LC)フラッシュメモリ、メモリセル当たりに4ビットのデータを格納可能なクワッドレベルセル(QLC、あるいは16LC)フラッシュメモリ、等が含まれる。
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。このNAND型フラッシュメモリ5は、二次元構造のNAND型フラッシュメモリであってもよいし、三次元構造のNAND型フラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックB0~Bm-1を含む。ブロックB0~Bm-1の各々は複数のページ(ここではページP0~Pn-1)を含む。ブロックB0~Bm-1は、最小の消去単位として機能する。ブロックは、「消去ブロック」、または「物理ブロック」と称されることもある。ページP0~Pn-1の各々は、同一ワード線に接続された複数のメモリセルを含む。ページP0~Pn-1は、データ書き込み動作およびデータ読み出し動作の単位である。なお、ワード線をデータ書き込み動作およびデータ読み出し動作の単位としてもよい。
ブロックB0~Bm-1の各々に対して許容できる最大P/Eサイクル数は限られている。あるブロックの1回のP/Eサイクルは、このブロック内の全てのメモリセルを消去状態にするための消去動作と、このブロックのページそれぞれにデータを書き込む書き込み動作(プログラム動作)とを含む。
NAND型フラッシュメモリ5は、メモリセル当たりに1ビットが書き込まれるSLCモード、メモリセル当たりに2ビットが書き込まれるMLCモード、メモリセル当たりに3ビットが書き込まれるTLCモード、メモリセル当たりに4ビットが書き込まれるQLCモードのいずれかで、書き込み動作を実行することができる。
例えば、NAND型フラッシュメモリ5は、メモリセル当たりに2ビットを格納可能なMLCフラッシュメモリ(4LCフラッシュメモリ)として実現されていてもよい。
この場合、通常は、2ページ分のデータ(下位ページデータおよび上位ページデータ)が、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに2ビットを書き込むことができる。このMLCフラッシュメモリ内の任意の領域(例えば、1つ以上の任意のブロック)は、メモリセル当たりに1ビットのみを格納可能な領域(SLC領域)として使用することができる。
このSLC領域にデータを書き込む書き込み動作においては、1ページ分のデータ(下位ページデータ)のみが同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、SLC領域として使用される各ブロックにおいては、SLCフラッシュメモリ内の各ブロック(SLCブロック)と同様に、メモリセル当たりに1ビットのみを書き込むことができる。この結果、SLC領域として使用される各ブロックは、擬似的なSLCブロックとして機能する。
あるいは、NAND型フラッシュメモリ5は、メモリセル当たりに3ビットを格納可能なTLCフラッシュメモリ(8LCフラッシュメモリ)であってもよい。
この場合、通常は、3ページ分のデータ(下位ページデータ、ミドルページデータ、および上位ページデータ)が、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに3ビットを書き込むことができる。このTLCフラッシュメモリ内の任意の領域(例えば、1つ以上の任意のブロック)は、上述のSLC領域として使用されてもよいし、メモリセル当たりに2ビットを格納可能なMLC領域として使用されてもよい。なお、SLC領域/MLC領域は、ブロックよりも細かい単位(例えば、ワード線の単位、ブロック内のワード線の集合の単位)で設定されてもよい。MLC領域においては、2ページ分のデータのみが同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、MLC領域においては、メモリセル当たりに2ビットのみを書き込むことができる。
あるいは、NAND型フラッシュメモリ5は、メモリセル当たりに4ビットを格納可能なQLCフラッシュメモリ(16LCフラッシュメモリ)であってもよい。
この場合、通常、4ページ分のデータが、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、メモリセル当たりに4ビットを書き込むことができる。このQLCフラッシュメモリ内の任意の領域(例えば、1つ以上の任意のブロック)は、上述のSLC領域として使用されてもよいし、上述のMLC領域として使用されてもよいし、あるいは、メモリセル当たりに3ビットを格納可能なTLC領域として使用されてもよい。なお、SLC領域/MLC領域/TLC領域は、ブロックよりも細かい単位(例えば、ワード線の単位、ブロック内のワード線の集合の単位)で設定されてもよい。TLC領域においては、3ページ分のデータのみが、同一ワード線に接続された複数のメモリセルに書き込まれる。これにより、TLC領域においては、メモリセル当たりに3ビットを書き込むことができる。
図11に示すように、各書き込みモードにおけるメモリセル当たりのデータ密度は、SLCモードでは2値(1ページ)であり、MLCモードでは4値(2ページ)であり、TLCモードでは8値(3ページ)であり、QLCモードでは16値(4ページ)である。そして、NAND型フラッシュメモリ5に対するデータの読み出し速度および書き込み速度は、データ密度が高いほど遅く、データ密度が低いほど速い。したがって、これら四つのモードでは、QLCモードにおけるデータの読み出しおよび書き込みが最も遅く、SLCモードにおける読み出しおよび書き込みが最も速い。
また、NAND型フラッシュメモリ5の寿命は、データ密度が高いほど短く、データ密度が低いほど長い。つまり、メモリセルの閾値分布に着目すると、データ密度が低いほど、隣りあう状態に対応する閾値分布間のマージンを広くとれ、データ密度が高いほど、閾値分布間のマージンは狭くなる。広いマージンは、たとえメモリセルに加わるストレスによってこのメモリセルセルの閾値がずれても、このメモリセルのデータが誤ったデータとして読み出されてしまう確率の上昇を抑えることを可能にする。このため、SLCモードにおける許容可能なメモリセルの個別の疲弊度は、QLCモードにおける許容可能なメモリセルの個別の疲弊度よりも高くなる。この結果、閾値分布間のマージンを広くとれる低データ密度の書き込みモードを使用した場合は、閾値分布間のマージンが狭い高データ密度の書き込みモードを使用した場合に比べ、NAND型フラッシュメモリ5の寿命(許容できる最大P/Eサイクル数)を長くすることができる。したがって、これら四つのモードでは、QLCモードにおける寿命が最も短くなり、SLCモードにおける寿命が最も長くなる。例えば、QLCモードでデータが書き込まれた場合に許容できる最大P/Eサイクル数は数kサイクルであり、SLCモードでデータが書き込まれた場合に許容できる最大P/Eサイクル数は数十kサイクルである。
なお、NAND型フラッシュメモリ5は、メモリセル当たりに5ビット以上を格納可能に構成されていてもよい。この場合においても、NAND型フラッシュメモリ5内の任意の領域は、メモリセル当たりに4ビット以下のデータのみが書き込まれる領域として使用され得る。
図12は、各書き込みモードに応じたNAND型フラッシュメモリ5の記憶容量の例を示す。ここでは、NAND型フラッシュメモリ5に含まれる複数のNAND型フラッシュメモリチップが、メモリセル当たりに4ビットを格納可能に構成されたQLCフラッシュメモリとして実現される場合を例示する。また、NAND型フラッシュメモリ5にQLCモードでデータが書き込まれた場合、SSD3の記憶容量は512GBであることを想定する。
図12に示すように、バッドブロック等が無い最適な条件下では、NAND型フラッシュメモリ5にTLCモードでデータが書き込まれた場合のSSD3の記憶容量は384GBであり、MLCモードでデータが書き込まれた場合のSSD3の記憶容量は256GBであり、SLCモードでデータが書き込まれた場合のSSD3の記憶容量は128GBである。
このように、データがいずれの書き込みモードで書き込まれるかによって、NAND型フラッシュメモリ5の記憶容量、ひいてはSSD3の記憶容量は異なる。
図1に戻り、コントローラ4は、Toggle DDR、Open NAND Flash Interface(ONFI)のようなNANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。NANDインタフェース13は、NAND型フラッシュメモリ5を制御するように構成されたNAND制御回路として機能する。NANDインタフェース13は、複数のチャンネルを介して、NAND型フラッシュメモリ5内の複数のチップにそれぞれ接続されていてもよい。
コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして機能する。
コントローラ4は、NAND型フラッシュメモリ5のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能してもよい。このFTLによって実行されるデータ管理には、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)ページ単位のリード/ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、SSD3をアドレス指定するためにホスト2によって使用されるアドレスである。この論理アドレスとしては、例えば、論理ブロックアドレス(LBA)が使用される。
論理ブロックアドレス(LBA)それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル(論理物理アドレス変換テーブル)として機能するルックアップテーブル(LUT)33を用いて実行される。コントローラ4は、ルックアップテーブル(LUT)33を使用して、LBAそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。あるLBAに対応する物理アドレスは、このLBAのデータがライトされたNAND型フラッシュメモリ5内の物理記憶位置を示す。アドレス変換テーブル(LUT33)は、SSD3の電源オン時にNAND型フラッシュメモリ5からDRAM6にロードされてもよい。
1つのページへのデータ書き込みは、1つのP/Eサイクル当たり1回のみ可能である。このため、コントローラ4は、あるLBAに対応する更新データを、このLBAに対応する以前のデータが格納されている物理記憶位置ではなく、別の物理記憶位置に書き込む。そして、コントローラ4は、ルックアップテーブル(LUT)33を更新してこのLBAをこの別の物理記憶位置に関連付けると共に、以前のデータを無効化する。以下では、LUT33から参照されているデータ(すなわち論理アドレスと紐付けられているデータ)を有効データと称する。また、どの論理アドレスとも紐付けられていないデータを無効データと称する。有効データは、後にホスト2からリードされる可能性があるデータである。無効データは、もはやホスト2からリードされる可能性が無いデータである。
ブロック管理には、バッドブロックの管理、ウェアレベリング、ガベージコレクション、等が含まれる。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14等を含んでもよい。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14は、バス10を介して相互接続されていてもよい。
DRAMインタフェース14は、DRAM6のアクセスを制御するように構成されたDRAMコントローラとして機能する。DRAM6の記憶領域は、ライトバッファ(WB)31、GCバッファ32、ルックアップテーブル(LUT)33等を格納するために利用される。
CPU12は、ホストインタフェース11、NANDインタフェース13、およびDRAMインタフェース14を制御するように構成されたプロセッサである。CPU12は、図示しないROM等に格納されている制御プログラム(ファームウェア)を実行することによって様々な処理を行う。このCPU12は、上述のFTLの処理に加え、ホスト2からの様々なコマンドを処理するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、FTL処理およびコマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
CPU12は、モード切替部121、リード制御部122、ライト制御部123、ガベージコレクション(GC)制御部124、キャッシュ制御部125、およびアクセス頻度統計処理部126として機能することができる。
モード切替部121は、ホスト2から受信されるデータ(書き込みデータ)をNAND型フラッシュメモリ5に書き込むための書き込みモードを適応的に制御する。この書き込みデータには、ガベージコレクション動作によりNAND型フラッシュメモリ5に書き込まれるデータも含まれ得る。モード切替部121は、例えば、書き込みモードを、メモリセル当たりにNビットのデータが書き込まれる第1モードと、メモリセル当たりにMビットのデータが書き込まれる第2モードとの間で動的に切り替えるように構成されている。ここで、Nは1以上の数であり、MはNよりも大きい数である。
第1モードは、メモリセル当たりに格納可能なビット数を減らすことによってSSD3のライト性能およびリード性能を改善するための性能優先の書き込みモードである。一方、第2モードは、メモリセル当たりに格納可能なビット数を増やすことによって、ホスト2から期待されている記憶容量を提供することができる容量優先の書き込みモードである。
書き込みモードが第1モードである場合、第2モードである場合に比べて、ライト性能が高い。また、第1モードで書き込まれたデータをリードするために要する時間は第2モードで書き込まれたデータをリードするために要する時間よりも短いので、リード性能も高い。一方、書き込みモードが第2モードである場合、第1モードである場合に比べて、リード・ライト性能が低いものの、SSD3はホスト2から期待されている記憶容量を提供することができる。したがって、これら第1モードと第2モードとを動的に切り替えることにより、要求される記憶容量を提供しつつ、要求される記憶容量が小さい場合は高い性能を提供することができる。
第1モードと第2モードの組み合わせの例は、以下の通りである。
組み合わせ#1: メモリセル当たりに1ビットが書き込まれるSLCモードが第1モードとして使用され、メモリセル当たりに複数ビットが書き込まれるモードが第2モードとして使用される。メモリセル当たりに複数ビットが書き込まれるモードは、メモリセル当たりに2ビットが書き込まれるMLCモードであってもよいし、メモリセル当たりに3ビットが書き込まれるTLCモードであってもよいし、メモリセル当たりに4ビットが書き込まれるQLCモードであってもよい。
組み合わせ#2: MLCモードが第1モードとして使用され、TLCモードまたはQLCモードが第2モードとして使用される。
組み合わせ#3: TLCモードが第1モードとして使用され、QLCモードが第2モードとして使用される。
あるいは、モード切替部121は、書き込みモードを、メモリセル当たりに格納可能なビット数が互いに異なる第1モードと第2モードと第3モードとの間で動的に切り替えるように構成されていてもよい。第3モードは、メモリセル当たりにLビットのデータが書き込まれるモードであり、LはMよりも大きい数である。
第1モードと第2モードと第3モードの組み合わせの例は、以下の通りである。
組み合わせ#4: SLCモードが第1モードとして使用され、MLCモードが第2モードとして使用され、TLCモードが第3モードとして使用される。
組み合わせ#5: SLCモードが第1モードとして使用され、TLCモードが第2モードとして使用され、QLCモードが第3モードとして使用される。
組み合わせ#6: SLCモードが第1モードとして使用され、MLCモードが第2モードとして使用され、QLCモードが第3モードとして使用される。
組み合わせ#7: MLCモードが第1モードとして使用され、TLCモードが第2モードとして使用され、QLCモードが第3モードとして使用される。
同様にして、モード切替部121は、書き込みモードを、メモリセル当たりに格納可能なビット数が互いに異なる4種類以上のモードの間で動的に切り替えるように構成されていてもよい。
以下では、組み合わせ#5(メモリセル当たりに1ビットが書き込まれるSLCモード、メモリセル当たりに3ビットが書き込まれるTLCモード、およびメモリセル当たりに4ビットが書き込まれるQLCモード)を使用する場合を例示して、書き込みモードを動的に切り替える処理について説明する。
図13に示すように、モード切替部121は、ホスト2から受信される書き込みデータをNAND型フラッシュメモリ5に書き込むための書き込みモードを、任意の指標に基づいて、SLCモード15とTLCモード16とQLCモード17との間で動的に切り替えるように構成される。以下では、ホスト2から受信される書き込みデータをNAND型フラッシュメモリ5に書き込むことを、ホスト書き込みとも称する。
また、モード切替部121は、ガベージコレクション動作において、データをNAND型フラッシュメモリ5に書き込むための書き込みモードを、任意の指標に基づいて、メモリセル当たりに格納可能なビット数がより多いモードに切り替え可能であるように構成される。より具体的には、GCソースブロックにSLCモード15で書き込まれていた有効データをGCデスティネーションブロックに書き込む場合に、モード切替部121は、SLCモード15をそのまま選択することもできるし、メモリセル当たりに格納可能なビット数がより多いTLCモード16またはQLCモード17に切り替えることもできる。GCソースブロックにTLCモード16で書き込まれていた有効データをGCデスティネーションブロックに書き込む場合に、モード切替部121は、TLCモード16をそのまま選択することもできるし、メモリセル当たりに格納可能なビット数がより多いQLCモード17に切り替えることもできる。また、GCソースブロックにQLCモード17で書き込まれていた有効データをGCデスティネーションブロックに書き込む場合、モード切替部121はQLCモード17を選択し得る。なお、以下では、ガベージコレクション動作において、データをNAND型フラッシュメモリ5に書き込むことを、GC書き込みとも称する。
さらに、図14に示すように、モード切替部121は、ガベージコレクション動作において、データをNAND型フラッシュメモリ5に書き込むための書き込みモードを、任意の指標に基づいて、メモリセル当たりに格納可能なビット数がより少ないモードに切り替え可能であるように構成されてもよい。より具体的には、GCソースブロックにQLCモード17で書き込まれていた有効データをGCデスティネーションブロックに書き込む場合に、モード切替部121は、QLCモード17をそのまま選択することもできるし、メモリセル当たりに格納可能なビット数がより少ないTLCモード16またはSLCモード15に切り替えることもできる。GCソースブロックにTLCモード16で書き込まれていた有効データをGCデスティネーションブロックに書き込む場合に、モード切替部121は、TLCモード16をそのまま選択することもできるし、メモリセル当たりに格納可能なビット数がより少ないSLCモード15に切り替えることもできる。また、GCソースブロックにSLCモード15で書き込まれていた有効データをGCデスティネーションブロックに書き込む場合、モード切替部121はSLCモード15を選択し得る。
また、NAND型フラッシュメモリ5に含まれる複数のブロックは、図15に示すように、SLC専用ブロックグループ18とTLC/QLC共用ブロックグループ19のいずれかに属するブロックとして用いられてもよい。SLC専用ブロックグループ18に属するブロックには、データがSLCモード15で書き込まれる。TLC/QLC共用ブロックグループ19に属するブロックには、データがTLCモード16またはQLCモード17で書き込まれる。
モード切替部121は、書き込みモードを切り替えるための指標として、例えば、物理アドレス空間にマッピングされている論理アドレスの総数(ユーティライゼーション)を用いることができる。ユーティライゼーションは、0から、論理アドレス空間の総サイズの内、ある時点で割り当てられ得る論理アドレスの最大の数(キャパシティ)までの値を取り得る。本実施形態中では、ユーティライゼーションは、最小の数を0%、最大の数を100%とする割合で表現することもある。ある時点で割り当てられ得る論理アドレスの最大の数は、例えば、シン・プロビジョニングされたストレージデバイスである場合、論理アドレス空間の総サイズよりも小さくなり、そうでなければ論理アドレス空間の総サイズと等しくなる。
図16から図18を参照して、書き込みモードが切り替えられる具体的な例について説明する。論理アドレス空間41には、物理アドレス空間51にマッピングされている論理アドレスと、物理アドレス空間51にマッピングされていない論理アドレスとが含まれ得る。各論理アドレスは、物理アドレス空間51において、最小アクセス(I/O)単位(例えば、4KBのクラスタ単位)のデータが書き込まれる領域を示す物理アドレスにマッピングされ得る。
図16に示す例では、論理アドレス411は物理アドレス511にマッピングされ、また論理アドレス412は物理アドレス512にマッピングされている。そして、論理アドレス411,412以外の論理アドレスは、いずれの物理アドレスにもマッピングされていない。したがって、モード切替部121は、ユーティライゼーションとして“2”を取得する。そして、モード切替部121は、このユーティライゼーション“2”が第1閾値未満であるならば、書き込みモードとしてSLCモード15を設定する。
また、図17に示す例では、論理アドレス411,412,413,414,415,416は、物理アドレス511,512,513,514,515,516にそれぞれマッピングされている。そして、論理アドレス411,412,413,414,415,416以外の論理アドレスは、いずれの物理アドレスにもマッピングされていない。したがって、モード切替部121は、ユーティライゼーションとして“6”を取得する。そして、モード切替部121は、このユーティライゼーション“6”が第1閾値以上且つ第2閾値未満であるならば、書き込みモードとしてTLCモード16を設定する。なお、第2閾値は第1閾値よりも大きい。
さらに、図18に示す例では、論理アドレス411,412,413,414,415,416,417,418,419,420は、物理アドレス511,512,513,514,515,516,517,518,519,520にそれぞれマッピングされている。そして、論理アドレス411,412,413,414,415,416,417,418,419,420以外の論理アドレスは、いずれの物理アドレスにもマッピングされていない。したがって、モード切替部121は、ユーティライゼーションとして“10”を取得する。そして、モード切替部121は、このユーティライゼーション“10”が第2閾値以上であるならば、書き込みモードとしてQLCモード17を設定する。
この物理アドレス空間にマッピングされている論理アドレスの総数(ユーティライゼーション)について、図19および図20を参照して説明する。
図19は、論理アドレス空間41Aにマッピングされている物理アドレス51A(有効データが格納されている物理アドレス)と、論理アドレス空間41Aにマッピングされていない物理アドレス51B(無効データが格納されている物理アドレス)とを示す。これに対して、図20は、物理アドレス空間51Cにマッピングされている論理アドレス41Bと、物理アドレス空間51Cにマッピングされていない論理アドレス41Cとを示す。
本実施形態では、物理アドレス空間51Cにマッピングされている論理アドレス41Bの総数(ユーティライゼーション)に基づいて、NAND型フラッシュメモリ5へのデータの書き込みモードが切り替えられる。
なお、ホスト2からライトコマンドを受け付けた場合、ライトコマンドで指定された論理アドレスの状態と、ユーティライゼーションとはそれぞれ以下のように変化する。
(1-1)マッピングされていない(unmapped)状態である論理アドレスを指定したライトコマンドを受け付けた場合、指定された論理アドレスはマッピングされた(mapped)状態に遷移し、ユーティライゼーションは増加する。
(1-2)マッピングされた(mapped)状態である論理アドレスを指定したライトコマンドを受け付けた場合、指定された論理アドレスはマッピングされた(mapped)状態のままであり、ユーティライゼーションは変化しない。
また、ホスト2からアンマップ(トリム)コマンドを受け付けた場合、アンマップ(トリム)コマンドで指定された論理アドレスの状態と、ユーティライゼーションとはそれぞれ以下のように変化する。
(2-1)マッピングされていない(unmapped)状態である論理アドレスを指定したアンマップ(トリム)コマンドを受け付けた場合、指定された論理アドレスはマッピングされていない(unmapped)状態のままであり、ユーティライゼーションは変化しない。
(2-2)マッピングされた(mapped)状態である論理アドレスを指定したアンマップ(トリム)コマンドを受け付けた場合、指定された論理アドレスはマッピングされていない(unmapped)状態に遷移し、ユーティライゼーションは減少する。
なお、ホスト2からフォーマットコマンドを受け付けた場合には、全論理アドレスの各々について、論理アドレスが、マッピングされていない(unmapped)状態であるか、それともマッピングされた(mapped)状態であるかに応じて、(2-1)または(2-2)に示したように論理アドレスの状態とユーティライゼーションとが変化する。特に、フォーマットコマンド実行後のユーティライゼーションは0となる。
図21に示すように、ユーザデータがTLCモード16で書き込まれる期間中に、ユーティライゼーション71が閾値71A以上になったとき(T1)、モード切替部121は、書き込みモードをTLCモード16からQLCモード17に切り替える。書き込みモードがQLCモード17に切り替えられたことにより、ライト性能73が低くなるものの、SSD3はホスト2から期待されている記憶容量を提供することができる(容量優先)。より具体的には、例えば、ユーティライゼーション71が大きくなってきていることを無視し、性能だけを優先して、ユーザデータを全てSLCモード15で書き込んでしまうならば、ライトコマンドを受け付けても、NAND型フラッシュメモリ5にユーザデータを書き込むことができない(すなわち、いくらガベージコレクション動作を行ってもフリーブロックが生成できなくなる)という状況に陥る。本実施形態では、上記のように、ユーティライゼーション71が大きくなった場合に、メモリセル当たりに書き込まれるデータのビット数が増加するように書き込みモードを切り替える構成により、このような事態になることを防ぐことができる。
また、アンマップコマンドが実行されたこと等に応じて、ユーティライゼーション71が減少し、閾値71A未満になったとき(T2)、モード切替部121は、書き込みモードをQLCモード17からTLCモード16に切り替える。書き込みモードがTLCモード16に切り替えられたことにより、ライト性能73が高くなる(性能優先)。なお、TLCモード16で書き込まれたユーザデータをリードするために要する時間はQLCモード17で書き込まれたユーザデータをリードするために要する時間よりも短いので、書き込みモードをQLCモード17からTLCモード16に切り替えることにより、ライト性能のみならず、リード性能も改善される。
さらに、ユーザデータがTLCモード16で書き込まれる期間中に、ユーティライゼーション71が閾値71A以上になったとき(T3)、モード切替部121は、書き込みモードをTLCモード16からQLCモード17に切り替える(容量優先)。
このように、モード切替部121は、ユーティライゼーション71に応じて、書き込みモードを適応的に制御することができる。その結果、要求される記憶容量を提供しつつ、要求される記憶容量が小さい場合は高い性能を提供することができる。
NAND型フラッシュメモリ5には、ユーザデータだけでなくLUTも書き込まれる。モード切替部121は、LUTを書き込む書き込みモードも切り替えるように構成され得る。図22に示すように、モード切替部121は、例えば、DRAM6にキャッシュされたLUT33の各エントリのデータ(アドレス変換情報)が、NAND型フラッシュメモリ5上のLUT53に書き戻される場合に、当該データを書き込むための書き込みモードを、SLCモード15とTLCモード16との間で動的に切り替えることができる。なお、LUTを書き込む書き込みモードに、QLCモード17が含まれていてもよい。
LUT53の書き込みモードを切り替えることによっても、要求される記憶容量を提供しつつ、要求される記憶容量が小さい場合は高い性能を提供することができる。この理由について以下に説明する。
LUT53に関して下記の2点を前提とする。(1)LUT53のサイズはユーティライゼーションによって変動するとする。具体的には、マッピングされていない(unmapped)状態のLBAが連続する論理アドレス空間に対応するアドレス変換情報は、同一数のマッピングされた(mapped)状態のLBAをもつ論理アドレス空間に対応するアドレス変換情報よりも小さいとする。(2)LUT53が書き込まれるLUTブロックは固定数割り当てられているものとする。その固定数のLUTブロックには、TLCモード16を使用することで、ユーティライゼーションが100%の状態のLUTを格納することが可能だが、SLCモード15では記憶容量が不足するものとする。
モード切替部121は、ユーティライゼーションに基づいて、LUTの書き込みモードを切り替える。ユーティライゼーションが高い状態においては、記憶容量を優先するために、TLCモード16でのLUT書き込みを行う。TLCモード16による書き込みは低速なため、ライト性能が低い。また、LUTキャッシュミスの際、LUTブロックに対する読み出しが発生するが、この読み出しが低速であるため、LUTキャッシュミスによる性能(リード性能およびライト性能)低下が大きい。
一方、ユーティライゼーションが低い状態においては、性能を優先するために、SLCモード15でのLUT書き込みを行う。SLCモード15による書き込みは高速なため、ライト性能が高い。また、LUTキャッシュミスの際、LUTブロックに対する読み出しが発生するが、この読み出しは高速であるため、LUTキャッシュミスによる性能(リード性能およびライト性能)低下はさほど大きくない。
このように、LUT書き込みにおいても、ユーティライゼーションに応じて、書き込みモードを適応的に制御する。その結果、LUT53の書き込みモードを切り替えることによっても、要求される記憶容量を提供しつつ、要求される記憶容量が小さい場合は高い性能を提供することができる。
図23は、物理アドレス空間にマッピングされている論理アドレスの総数(ユーティライゼーション)に基づいてユーザデータの書き込みモードとLUTの書き込みモードとが切り替えられる場合の、ライト性能の変動の例を示す。ここでは、初期状態(T0)において、ユーザデータの書き込みモードとしてTLCモード16が設定され、LUTの書き込みモードとしてSLCモード15が設定されていることを想定する。
図23に示すように、ユーザデータがTLCモード16で書き込まれ、LUTがSLCモード15で書き込まれる期間中に、ユーティライゼーション75が閾値75A以上になったとき(T1)、モード切替部121は、LUTの書き込みモードをSLCモード15からTLCモード16に切り替える。LUTの書き込みモードがTLCモード16に切り替えられたことにより、ライト性能78がやや低くなり、また、LUTキャッシュミス時のペナルティが大きくなることにより、リード・ライト性能が低下するものの、限られたLUTブロックに、LUT全体を格納することができる(容量優先)。NAND型フラッシュメモリ5へのLUTの書き込み量は、ユーザデータの書き込み量よりも小さい。そのため、モード切替部121は、LUTの書き込みモードを切り替えることにより、ライト性能78への影響を小さく抑えることができる。したがって、容量と性能とのバランスをとった書き込みモードを設定することができる。
次いで、ユーザデータがTLCモード16で書き込まれ、LUTがTLCモード16で書き込まれる期間中に、ユーティライゼーション75が閾値75B以上になったとき(T2)、モード切替部121は、ユーザデータの書き込みモードをTLCモード16からQLCモード17に切り替える。ユーザデータの書き込みモードがQLCモード17に切り替えられたことにより、ライト性能78が低くなる。なお、QLCモード17で書き込まれたユーザデータをリードするために要する時間はTLCモード16で書き込まれたユーザデータをリードするために要する時間よりも長いので、書き込みモードをTLCモード16からQLCモード17に切り替えることにより、ライト性能のみならず、リード性能も低くなる。つまり、リード・ライト性能78は低くなるものの、SSD3はホスト2から期待されている記憶容量を提供することができる(容量優先)。QLCモード17で書き込まれたユーザデータをリードするために要する時間はTLCモード16で書き込まれたユーザデータをリードするために要する時間よりも長いので、書き込みモードをTLCモード16からQLCモード17に切り替えることにより、ユーザデータのライト性能のみならず、リード性能も低くなる。
次いで、アンマップコマンドが実行されたこと等に応じて、ユーティライゼーション75が減少し、閾値75B未満になったとき(T3)、モード切替部121は、ユーザデータの書き込みモードをQLCモード17からTLCモード16に切り替える。ユーザデータの書き込みモードがTLCモード16に切り替えられたことにより、ライト性能78が高くなる。したがって、ユーティライゼーション75が減少し、閾値75B未満になった場合、すなわち、NAND型フラッシュメモリ5が保持しなければならないデータ量が減少した場合、リード・ライト性能78を高くすることができる(性能優先)。TLCモード16で書き込まれたユーザデータをリードするために要する時間はQLCモード17で書き込まれたユーザデータをリードするために要する時間よりも短いので、書き込みモードをQLCモード17からTLCモード16に切り替えることにより、ユーザデータのライト性能のみならず、リード性能も改善することができる。
そして、さらにアンマップコマンドが実行されたこと等に応じて、ユーティライゼーションが減少し、閾値75A未満になったとき(T4)、モード切替部121は、LUTの書き込みモードをTLCモード16からSLCモード15に切り替える。LUTの書き込みモードがSLCモード15に切り替えられたことにより、ライト性能78がさらに高くなり、LUTキャッシュミス時のペナルティが軽減されることにより、リード・ライト性能が向上する。したがって、ユーティライゼーション75が減少し、閾値75A未満になった場合、すなわち、NAND型フラッシュメモリ5が保持しなければならないデータ量がさらに減少した場合、リード・ライト性能78をさらに高くすることができる(性能優先)。
このように、モード切替部121は、ユーティライゼーション75に応じて、ユーザデータの書き込みモードとLUTの書き込みモードとを適応的に制御することができる。その結果、要求される記憶容量を提供しつつ、要求される記憶容量が小さい場合は高い性能を提供することができる。
なお、ユーザデータをSLCモード15で書き込む方法の一つに、SLCバッファを利用する方法がある。SLCバッファは、例えば、SLCモード用の幾つかのブロックから構成される。書き込みモードがSLCモード15である場合、ユーザデータは、まず、SLCモードでSLCバッファに書き込まれ、その後、ガベージコレクション等によりSLCバッファ内のユーザデータがTLC/QLCモード16,17でTLC/QLC用ブロック(SLCバッファ以外のブロック)に書き込まれる場合がある。一方、書き込みモードがTLC/QLCモード16,17である場合、ユーザデータは、SLCバッファを経由せずに、QLC用ブロックに直接書き込まれる(直書きされる)。
SLCバッファを用いることにより、(SLCバッファを構成する全ブロックにユーザデータが書き込まれるまでの間の)短期間におけるライト性能を改善する、すなわち、(ワークロードに関わらず)瞬発性能を発揮する。ワークロードは、時系列順に並べられたアクセス(複数のコマンド)における、論理アドレス空間内のアクセスパターンを意味する。
さらに、SLCバッファを用いることにより、狭域ワークロードにおいて、(1)WAFを下げ、ライト性能を改善し、(2)リード性能を改善することができる。狭域ワークロードとは、時系列的に近接するアクセスにおいて、アクセス対象の論理アドレスが狭い論理アドレス空間内におさまっているアクセスパターンのことである。
モード切替部121は、ホスト2からのライトコマンドに応じたユーザデータの書き込みモードとして、必ずSLCモード15を選択するようにしてもよい。モード切替部121は、例えば、ケース(1): TLC/QLCに直接書き込むこと(直書き)ができない場合、ケース(2): 直書きによる信頼性リスクが高い場合、またはケース(3): QLC/TLCの許容できる最大P/Eサイクル数が非常に少なく、且つSLCの許容できる最大P/Eサイクル数が非常に大きい場合に、ホスト書き込みをSLCモード15とすることによって、それぞれ以下の利点を得ることができる。ケース(1)について、そもそもTLC/QLCに直接書き込むことができないので、SLC書きとTLC/QLC書きを併用したメモリシステムを実現することができる。ケース(2)について、直書きを避けることにより、メモリシステムの信頼性を担保できる。ケース(3)について、SLCブロックの寿命を考慮することなくメモリシステムとしての寿命を担保できるので、制御が簡単になる。
ここで、直書きによる信頼性リスクについて説明する。
QLCモード17(またはTLCモード16)でのプログラムは、SLCモード15でのプログラムと比較して、失敗する確率が高く、リトライが必要になる可能性があり、その際、元になるデータがないとリトライできない。このような場合に、SLCバッファを経由していれば、元になるデータのバックアップがあることになる。一方、プログラム完了前に(プログラムの成功/失敗が判明する前に)、ライトバッファ内の、データが蓄積されていた領域を解放してしまう実装の場合、リトライは困難である。また、電源を切られたときに、バックアップ電池によるライトバッファ退避処理(PLP処理)を実装できない場合も同様である。
次いで、図24から図26を参照して、ライト制御部123によるNAND型フラッシュメモリ5へのデータの書き込み動作を説明する。ここでは、ライト制御部123が、ホスト2からユーザデータの書き込みを要求するライトコマンドを受け付け、ユーザデータをNAND型フラッシュメモリ5に書き込む場合について例示する。
図24に示す例では、NAND型フラッシュメモリ5にユーザデータを書き込む書き込みモードとして、一種類の書き込みモード(ここでは、TLCモード16)のみが用いられることを想定する。
ライト制御部123は、図24に示すように、ライトコマンドに応じてホスト2から受信されたユーザデータを、DRAM6上のライトバッファ31に蓄積する。ライト制御部123は、ユーザデータを蓄積するためのライトバッファ31の領域を予め確保しておき、確保できない間は、ホスト2からライトコマンドを受け付けないようにする。
そして、ライト制御部123は、ライトバッファ31内にNAND型フラッシュメモリ5の書き込み単位分のユーザデータが蓄積されたならば、NAND型フラッシュメモリチップ501(NAND型フラッシュメモリチップ501のデータラッチ503)にその書き込み単位分のユーザデータを転送する。書き込みモードがTLCモード16である場合、書き込み単位は、例えば96KBである。ライト制御部123は、ライトバッファ31内の、転送されたユーザデータが蓄積されていた領域を解放する。
次いで、ライト制御部123は、NAND型フラッシュメモリチップ501にプログラム(TLCモード16でのプログラム)を指示する。すなわち、ライト制御部123は、NAND型フラッシュメモリチップ501にプログラムコマンドを送ることにより、メモリセルアレイ502内の書き込み先ブロック566にデータラッチ503に格納されているデータをTLCモード16でプログラムさせる。メモリセルアレイ502は複数のブロック551~558を含んでいる。ブロックは、有効データを格納していて、新たにデータを書き込むことができないブロック(アクティブブロック)と、有効データを格納しておらず、イレーズ処理を経ることで新たなデータの書き込みに利用可能なブロック(フリーブロック)とに大別される。1つ以上のフリーブロックから、1個が選択され、イレーズ処理を経ることで、書き込み先ブロック556として割り当てられる。書き込み先ブロック556は、有効データを格納し得る。
次いで、図25に示す例では、NAND型フラッシュメモリ5にデータを書き込む書き込みモードとして、二種類の書き込みモード(ここでは、SLCモード15およびTLCモード16)が用いられることを想定する。
ライト制御部123は、図24に示した例と同様にして、ライトコマンドに応じてホスト2から受信されたユーザデータを、DRAM6上のライトバッファ31に蓄積する。
そして、ライト制御部123は、モード切替部121によって設定された書き込みモードに従って、ライトバッファ31内にNAND型フラッシュメモリ5の書き込み単位分のユーザデータが蓄積されたならば、NAND型フラッシュメモリチップ501(NAND型フラッシュメモリチップ501のデータラッチ503)にその書き込み単位分のユーザデータを転送する。書き込みモードがTLCモード16である場合、書き込み単位は、例えば3ページ分の96KB(KiB)である。また、書き込みモードがSLCモード15である場合、書き込み単位は、例えば1ページ分の32KBである。ライト制御部123は、ライトバッファ31内の、転送されたユーザデータが蓄積されていた領域を解放する。
次いで、ライト制御部123は、NAND型フラッシュメモリチップ501に、モード切替部121によって設定された書き込みモードでの、特定の物理位置(例えば、指定されたブロックアドレスおよびページアドレス)へのプログラムを指示する。書き込みモードがSLCモード15に設定されている場合、ライト制御部123は、SLCモード15でのプログラムを指示する。これにより、メモリセルアレイ502内のSLC用の書き込み先ブロック565に、データがSLCモード15でプログラムされる。
また、書き込みモードがTLCモード16に設定されている場合、ライト制御部123は、特定の物理位置(例えば、指定されたブロックアドレスおよびページアドレス)へのTLCモード16でのプログラムを指示する。これにより、メモリセルアレイ502内のTLC用の書き込み先ブロック566に、データがTLCモード16でプログラムされる。
NAND型フラッシュメモリ5(メモリセルアレイ502)にSLC用の書き込み先ブロック565とTLC用の書き込み先ブロック566の両方が同時に確保されている場合、モード切替部121は、書き込み先ブロックを選択することで、書き込み単位分のデータ毎に、書き込みモードを切り替え可能である。一方で、NAND型フラッシュメモリ5に、SLC用の書き込み先ブロック565とTLC用の書き込み先ブロック566のいずれか一方しか同時に存在しない(確保しない)場合には、モード切替部121は、書き込み先ブロックが新たに確保されるタイミングでのみ、書き込みモードを切り替え可能である。
図26は、ライトバッファ31に蓄積されたユーザデータ毎に(例えば、クラスタ単位のユーザデータ毎に)書き込みモードを切り替えるために、ライトバッファ31に、SLC用ライトバッファ311とTLC用ライトバッファ312とが設けられ、またNAND型フラッシュメモリ5(メモリセルアレイ502)に、SLC用の書き込み先ブロック575とTLC用の書き込み先ブロック576との両方が同時に確保される例を示す。図26に示す例では、NAND型フラッシュメモリ5にユーザデータを書き込む書き込みモードとして、二種類の書き込みモード(ここでは、SLCモード15およびTLCモード16)が用いられ、ライトバッファ31が書き込みモードの種類毎に管理されている。
ライト制御部123は、ライトコマンドに応じてホスト2から受信されるユーザデータを特定のルールに従って振り分け、SLC用ライトバッファ311とTLC用ライトバッファ312のいずれかに蓄積する。または、ライト制御部123は、例えば、モード切替部121によって設定された現在の書き込みモードに対応するいずれかのバッファ311,312にユーザデータを蓄積する。
この特定のルールには以下のルールが含まれていてもよい。ルール(1): ライトコマンドで指定されたLBAのアクセス頻度に基づいて、アクセス頻度が高ければ(例えば、閾値以上であれば)、ユーザデータをSLC用ライトバッファ311に振り分け、アクセス頻度が低ければ(例えば、閾値未満であれば)、ユーザデータをTLC用ライトバッファ312に振り分ける。なお、アクセス頻度が低いユーザデータは、TLC用ライトバッファ312に振り分けるのではなく、モード切替部121によって設定された現在の書き込みモード(すなわち、ユーティライゼーションに基づいて選択された書き込みモード)に対応するいずれかのバッファ311,312に振り分けられてもよい。ルール(2): ライトコマンドで指定されたLBAが、ホスト2により書き込みモードと共に指定されたLBA範囲に含まれる場合に、そのLBA範囲に対してホスト2により直接的あるいは間接的に指定された書き込みモードが、SLCモード15であればユーザデータをSLC用ライトバッファ311に振り分け、TLCモード16であればユーザデータをTLC用ライトバッファ312に振り分ける。ライトコマンドで指定されたLBAが、ホスト2により書き込みモードと共に指定されたLBA範囲に含まれない場合、ユーティライゼーションによる決定に従ってもよい。ルール(3): ライトコマンドで指定されたネームスペースIDが、ホスト2により書き込みモードと共に指定されたネームスペースIDである場合に、そのネームスペースIDに対してホスト2により直接的あるいは間接的に指定された書き込みモードが、SLCモード15であればユーザデータをSLC用ライトバッファ311に振り分け、TLCモード16であればユーザデータをTLC用ライトバッファ312に振り分ける。ライトコマンドで指定されたネームスペースIDが、ホスト2により書き込みモードと共に指定されたネームスペースIDに含まれない場合、ユーティライゼーションによる決定に従ってもよい。ルール(4): ライトコマンドで指定されたマルチストリームのストリームIDが、ホスト2により書き込みモードと共に指定されたストリームIDである場合に、そのストリームIDに対してホスト2により直接的あるいは間接的に指定された書き込みモードが、SLCモード15であればユーザデータをSLC用ライトバッファ311に振り分け、TLCモード16であればユーザデータをTLC用ライトバッファ312に振り分ける。ライトコマンドで指定されたストリームIDが、ホスト2により書き込みモードと共に指定されたストリームIDに含まれない場合、ユーティライゼーションによる決定に従ってもよい。
ホスト2は、各ルールを設定する設定コマンド、各ルールを取得する取得コマンド、および各ルールを削除する削除コマンドを、SSD3に送信することができる。ルール(1)に対応するコマンドは、例えば、LBA範囲(開始LBAと、終了LBAまたはサイズ)と、アクセス頻度(例えば、高/中/低)とを含む。ルール(2)に対応するコマンドは、例えば、LBA範囲(開始LBAと、終了LBAまたはサイズ)と、書き込みモード(SLC/MLC/TLC/QLC)とを含む。ルール(3)に対応するコマンドは、例えば、ネームスペースIDと、書き込みモード(SLC/MLC/TLC/QLC)とを含む。ルール(4)に対応するコマンドは、例えば、ストリームIDと、書き込みモード(SLC/MLC/TLC/QLC)とを含む。
モード切替部121は、ホスト2により送信された上記コマンドに応じて、ルールが記述されたテーブルに新たなルールに対応するエントリを追加することや、当該テーブルからあるルールに対応するエントリを削除することができる。
より具体的には、モード切替部121は、ルール(1)の設定コマンドに応じて、LBA範囲-アクセス頻度テーブル361に、新たなエントリを追加するか、あるいは既にあるエントリを更新する。そして、モード切替部121は、LUT33が更新された場合、あるいはLBA範囲-アクセス頻度テーブル361が更新された場合に、ブロック-低頻度アクセス割合テーブル363を更新する。モード切替部121は、更新(追加)されたLBA範囲に含まれるLBA毎に、ブロック-低頻度アクセス割合テーブル363内の、対応するブロックのエントリにおいて、高頻度アクセス有効データ量および低頻度アクセス有効データ量をアップ/ダウンし、低頻度アクセス割合を更新する。また、モード切替部121は、ルール(1)の削除コマンドに応じて、LBA範囲-アクセス頻度テーブル361およびブロック-低頻度アクセス割合テーブル363から対応するエントリを削除し得る。
モード切替部121は、例えば、ルール(2)の設定コマンドに応じて、LBA範囲-書き込みモードテーブル371に新たなエントリを追加し、ルール(2)の削除コマンドに応じて、LBA範囲-書き込みモードテーブル371から対応するエントリを削除する。LBA範囲-書き込みモードテーブル371の各エントリは、例えば、LBA範囲(開始LBAと、終了LBAまたはサイズ)と、書き込みモード(SLC/MLC/TLC/QLC)とを含む。
モード切替部121は、例えば、ルール(3)の設定コマンドに応じて、ネームスペースID-書き込みモードテーブル372に新たなエントリを追加し、ルール(3)の削除コマンドに応じて、ネームスペースID-書き込みモードテーブル372から対応するエントリを削除する。ネームスペースID-書き込みモードテーブル372の各エントリは、ネームスペースIDと、書き込みモード(SLC/MLC/TLC/QLC)とを含む。
モード切替部121は、例えば、ルール(4)の設定コマンドに応じて、ストリームID-書き込みモードテーブル373に新たなエントリを追加し、ルール(4)の削除コマンドに応じて、ストリームID-書き込みモードテーブル373から対応するエントリを削除する。ストリームID-書き込みモードテーブル373の各エントリは、例えば、ストリームIDと、書き込みモード(SLC/MLC/TLC/QLC)とを含む。
なお、ルール(1)のLBAのアクセス頻度は、上述したコマンドによってホスト2から与えられてもよいし、各LBAに対するリード、ライト等に基づいて、アクセス頻度統計処理部126によって取得されてされてもよい。
ルール(4)について、コマンドにデータの寿命に関するヒント情報を付加して、ライトアンプリフィケーションファクタ(WAF)を低下させることを目的としたマルチストリーム機能を、SSD3はサポートすることができる。マルチストリーム機能がサポートされる場合、ホスト2は、同程度の寿命を有するデータをそれぞれ書き込むためのライトコマンド群に対して、第1ストリームIDを付加し、この寿命とは異なる寿命のデータをそれぞれ書き込むためのライトコマンド群に対して、第1ストリームIDとは異なる第2ストリームIDを付加する。
そして、ホスト2によって、第1ストリームIDが付加されたライトコマンドに対応するユーザデータをSLCモード15で書き込み、第2ストリームIDが付加されたライトコマンドに対応するユーザデータをTLCモード16で書き込むことが指定されている場合、ライト制御部123は、上述したルール(4)に従って、第1ストリームIDが付加されて送信されたライトコマンドに対応するユーザデータをSLC用ライトバッファ311に振り分け、第2ストリームIDが付加されて送信されたライトコマンドに対応するユーザデータをTLC用ライトバッファ312に振り分ける。
なお、SLCモード15とTLCモード16との二種類の書き込みモードが用いられる場合のルールを例示したが、より多くの種類の書き込みモードが用いられる場合や、別の組み合わせの書き込みモードが用いられる場合にも、使用される書き込みモードに対応するライトバッファを設けて、同様のルールを規定することができる。また、上記のルールに従ったライトバッファへのユーザデータの振り分けと、ユーティライゼーションに基づいて設定された現在の書き込みモードに基づくライトバッファへのユーザデータの振り分けとは組み合わせて使用されてもよい。なお、ルール(2)~(4)について、ホスト2は、LBA範囲、ネームスペースID、またはストリームIDに対して、書き込みモード(SLCモード15、TLCモード16、またはQLCモード17)を指定するだけでなく、あるいは書き込みモードを指定することに加えて、ホスト2が期待するリード・ライト性能(高/低等)を指定することができる。つまり、書き込みモードを直接的に指定するだけでなく、書き込みモードを決定するための要素となるリード・ライト性能を指定することにより、書き込みモードを間接的に指定することができる。
ライト制御部123は、このようなユーザデータの振り分けによって、いずれかのライトバッファ311,312内にNAND型フラッシュメモリ5の書き込み単位分のユーザデータが蓄積されたならば、NAND型フラッシュメモリチップ501(NAND型フラッシュメモリチップ501のデータラッチ503)にその書き込み単位分のユーザデータを転送する。TLC用ライトバッファ312からNAND型フラッシュメモリチップ501にユーザデータが書き込まれる場合、書き込み単位は、例えば3ページ分の96KBである。SLC用ライトバッファ311からNAND型フラッシュメモリチップ501にユーザデータが書き込まれる場合、書き込み単位は、例えば1ページ分の32KBである。ライト制御部123は、ライトバッファ311,312内の、転送されたユーザデータが蓄積されていた領域を解放する。
次いで、ライト制御部123は、NAND型フラッシュメモリチップ501にプログラムを指示する。SLC用ライトバッファ311からNAND型フラッシュメモリチップ501にデータが転送された場合、ライト制御部123は、メモリセルアレイ502内のSLC用の書き込み先ブロック575へのSLCモード15でのプログラムを指示する。これにより、メモリセルアレイ502内のSLC用の書き込み先ブロック575に、データがSLCモード15でプログラムされる。また、TLC用ライトバッファ312からデータが転送された場合、ライト制御部123は、メモリセルアレイ502内のTLC用の書き込み先ブロック576へのTLCモード16でのプログラムを指示する。これにより、メモリセルアレイ502内のTLC用の書き込み先ブロック576に、データがTLCモード16でプログラムされる。なお、あるNAND型フラッシュメモリチップ501に対する書き込み処理は、書き込み単位分のデータ毎に逐次に処理される。
以上により、ライトバッファ31に蓄積されるユーザデータ毎に(例えば、クラスタ単位のユーザデータ毎に)書き込みモードを切り替えることができる。
GC制御部124も、GCバッファ32を用いて、上述したようなライト制御部123による書き込み動作と同様にして、NAND型フラッシュメモリ5への書き込みを行うことができる。GC制御部124は、有効データを格納しているアクティブブロック群からガベージコレクションソースブロック(GCソースブロック)を選択し、このGCソースブロック内の有効データを、フリーブロック群から書き込み先ブロックとして確保されたガベージコレクションデスティネーションブロック(GCデスティネーションブロック)に書き込む。
図27は、書き込みモード毎にGCバッファ32が管理される場合の例を示す。GCバッファ32には、例えば、TLC用GCバッファ322とQLC用GCバッファ323とが設けられている。この場合、GC制御部124は、例えばクラスタ単位の有効データ毎に、書き込みモード(書き込み先ブロックの種類)を設定することができる。
図27に示すように、GC制御部124は、アクティブブロック群から、例えば、有効データ582が少ないブロックをGCソースブロック58として選択する。GC制御部124は、例えば各有効データのLBAのアクセス頻度に基づき、有効データをいずれかのGCバッファ322,323に振り分ける。GC制御部124は、例えば、有効データ582の内、アクセス頻度が高いデータ583をTLC用GCバッファ322に蓄積し、アクセス頻度が低いデータ584をQLC用GCバッファ323に蓄積する。なお、LBAのアクセス頻度は、各LBAに対するリード、ライト等に基づいて、アクセス頻度統計処理部126によって取得されている。
GC制御部124は、ライト制御部123による書き込み動作と同様にして、各GCバッファ322,323に蓄積された書き込み単位分のデータをNAND型フラッシュメモリ5に書き込む。より具体的には、GC制御部124は、いずれかのGCバッファ322,323内にNAND型フラッシュメモリ5の書き込み単位分のデータが蓄積されたならば、NAND型フラッシュメモリチップ501(NAND型フラッシュメモリチップ501のデータラッチ503)にその書き込み単位分のデータを転送する。TLC用GCバッファ322からNAND型フラッシュメモリチップ501にデータが書き込まれる場合、書き込み単位は、例えば96KBである。QLC用GCバッファ323からNAND型フラッシュメモリチップ501にデータが書き込まれる場合、書き込み単位は、例えば128KBである。GC制御部124は、転送されたデータが蓄積されていたGCバッファ322,323内の領域を解放する。
次いで、GC制御部124は、NAND型フラッシュメモリチップ501にプログラムを指示する。TLC用GCバッファ322からデータが転送された場合、GC制御部124は、TLCモード16でのプログラムを指示する。これにより、TLC用のGCデスティネーションブロック(TLC書き込み先ブロック)にデータがTLCモード16でプログラムされる。また、QLC用GCバッファ323からデータが転送された場合、GC制御部124は、QLCモード17でのプログラムを指示する。これにより、QLC用のGCデスティネーションブロック(QLC書き込み先ブロック)にデータがQLCモード17でプログラムされる。
これにより、ガベージコレクション動作中も、クラスタ単位の有効データ毎に、適応的に書き込みモード(書き込み先ブロックの種類)を切り替えることができる。
なお、図27では、有効データのLBAのアクセス頻度に基づいて、有効データをGCバッファ322,323に振り分けるルール(1)に従った例を示したが、同様にして、ルール(2)~(4)のいずれかに従って、有効データをGCバッファ322,323に振り分けるようにすることもできる。例えば、ルール(2)に従う場合、GC制御部124は、有効データのLBAがホスト2により書き込みモードと共に指定されたLBA範囲内であるか否かに応じて、有効データをGCバッファ322,323に振り分ける。GC制御部124は、例えば、有効データのLBAがホスト2により指定されたLBA範囲内に含まれる場合、このLBA範囲に対してホスト2により指定された書き込みモードに基づいて、当該書き込みモードに対応するいずれかのGCバッファ322,323に有効データを蓄積する。
GC制御部124は、有効データのLBAのアクセス頻度に基づく、有効データのGCバッファへの振り分け(ルール(1))の他、上述したルール(2)~(4)のいずれか1以上に従った有効データのGCバッファへの振り分けを任意に組み合わせることができる。
図28は、1つのGCバッファ32が用いられ、GCデスティネーションブロックとしてQLC書き込み先ブロックが確保されている場合を例示する。この場合、GC制御部124は、GCソースブロック59として、例えば有効データ592が少なく、且つ有効データのLBAのアクセス頻度が低いデータ594の割合が高いブロックを選択する。GC制御部124は、このようなGCソースブロック59を、例えば、ブロック-低頻度アクセス割合テーブル363を用いて取得する。GCデスティネーションブロックがQLC書き込み先ブロックである場合、LBAのアクセス頻度が低いデータの割合が高いGCソースブロック59が選択されることにより、例えば、QLCブロックのライト性能およびリード性能が低いことによる影響を低減することができる。
より具体的には、アクセス頻度統計処理部126は、例えば、アクティブブロックの各々について、ブロックに含まれる各有効データのLBAのアクセス頻度に基づき、アクセス頻度が高いデータ593とアクセス頻度が低いデータ594とを検出し、有効データ592の内の、アクセス頻度が低いデータ594の割合を算出する。GC制御部124は、算出された割合を用いて、アクティブブロック群からGCソースブロック59を選択する。そして、GC制御部124は、有効データ592をGCバッファ32に蓄積する。
GC制御部124は、ライト制御部123による書き込み動作と同様にして、GCバッファ32に蓄積された書き込み単位分のデータをNAND型フラッシュメモリ5に書き込む。より具体的には、GC制御部124は、GCバッファ32内にNAND型フラッシュメモリ5の書き込み単位分(例えば、128KB)のデータが蓄積されたならば、NAND型フラッシュメモリチップ501(NAND型フラッシュメモリチップ501のデータラッチ503)にその書き込み単位分のデータを転送する。そして、GC制御部124は、転送されたデータが蓄積されていたGCバッファ32内の領域を解放する。
次いで、GC制御部124は、NAND型フラッシュメモリチップ501にQLCモード17でのプログラムを指示する。これにより、GCデスティネーションブロック(QLC書き込み先ブロック)にデータがQLCモード17でプログラムされる。
これにより、1つのGCバッファ32が用いられる場合にも、GCデスティネーションブロックの種類に応じて、適切なデータがそのブロックに書き込まれるように制御することができる。なお、GC制御部124は、同一のGCソースブロックからGCバッファ32に、有効データを複数回に分けて蓄積するならば(例えば、1回目は高アクセス頻度の有効データのみを、2回目は低アクセス頻度の有効データのみを蓄積するならば)、アクセス頻度毎に書き込み先ブロックを分けることができる。
図29のフローチャートは、コントローラ4によって実行されるユーザデータの書き込み処理の手順を示す。ここでは、NAND型フラッシュメモリ5にユーザデータを書き込む書き込みモードがSLCモード15、TLCモード16、およびQLCモード17のいずれか1つに設定される場合を例示する。
まず、コントローラ4は、ホスト2からライトコマンドを受け付けたか否かを判定する(ステップS11)。このライトコマンドは、ユーザデータをメモリシステムに書き込むことを要求するためのコマンドである。ライトコマンドを受け付けていない場合(ステップS11のNO)、ステップS11に戻り、ホスト2からライトコマンドを受け付けたか否かが再度判定される。
ホスト2からライトコマンドを受け付けた場合(ステップS11のYES)、コントローラ4は、ユーティライゼーションが第1閾値未満であるか否かを判定する(ステップS12)。ユーティライゼーションが第1閾値未満である場合(ステップS12のYES)、コントローラ4は書き込みモードをSLCモード15に設定する(ステップS13)。
ユーティライゼーションが第1閾値以上である場合(ステップS12のNO)、コントローラ4は、ユーティライゼーションが第2閾値未満であるか否かを判定する(ステップS14)。なお、第2閾値は第1閾値よりも大きい。ユーティライゼーションが第2閾値未満である場合(ステップS14のYES)、コントローラ4は書き込みモードをTLCモード16に設定する(ステップS15)。
ユーティライゼーションが第2閾値以上である場合(ステップS14のNO)、コントローラ4は書き込みモードをQLCモード17に設定する(ステップS16)。
ステップS13、S15、またはS16の手順の後、すなわち、書き込みモードがSLCモード15、TLCモード16、およびQLCモード17のいずれかに設定された後、コントローラ4は、設定された書き込みモードで、NAND型フラッシュメモリ5にユーザデータを書き込む(ステップS17)。そして、コントローラ4は、この書き込みに応じてLUT33を更新する(ステップS18)。より具体的には、図26を参照して上述したように、コントローラ4は、設定された書き込みモードに対応するいずれかのライトバッファ311,312,313にユーザデータを蓄積する。そして、コントローラ4は、ライトバッファ311,312,313に蓄積されているユーザデータの量が書き込み単位分に達しているならば、その書き込み単位分のデータを、設定された書き込みモードでNAND型フラッシュメモリ5に書き込み、LUT33を更新する。一方、蓄積されているユーザデータの量が書き込み単位分に達していなければ、ステップS11の手順に戻る。なお、コントローラ4は、ホスト2によりフラッシュを指示された場合にも、ライトバッファ311,312,313に蓄積されているユーザデータをNAND型フラッシュメモリ5に書き込み、LUT33を更新する。
以上により、ユーティライゼーションに基づいて選択された書き込みモードで、ユーザデータをNAND型フラッシュメモリ5に格納することができる。
図30のフローチャートは、コントローラ4によって実行されるLUTの書き込み処理の手順を示す。ここでは、NAND型フラッシュメモリ5にLUTを書き込む書き込みモードがSLCモード15とQLCモード17のいずれか1つに設定される場合を例示する。
まず、コントローラ4は、LUTの書き込みタイミングであるか否かを判定する(ステップS21)。LUTの書き込みタイミングは、任意のタイミングであり、例えば、LUTのダーティデータ量が書き込み単位を満たしたタイミング、ホスト2からフラッシュを指示されたタイミング、およびメモリシステムを電源オフするタイミングを含む。LUTの書き込みタイミングでない場合(ステップS21のNO)、ステップS21に戻り、LUTの書き込みタイミングであるか否かが再度判定される。
LUTの書き込みタイミングである場合(ステップS21のYES)、コントローラ4は、ユーティライゼーションが第3閾値未満であるか否かを判定する(ステップS22)。ユーティライゼーションが第3閾値未満である場合(ステップS22のYES)、コントローラ4は書き込みモードをSLCモード15に設定する(ステップS23)。一方、ユーティライゼーションが第3閾値以上である場合(ステップS22のNO)、コントローラ4は書き込みモードをQLCモード17に設定する(ステップS24)。
そして、コントローラ4は、設定された書き込みモードでNAND型フラッシュメモリ5にLUTを書き込む(ステップS25)。
以上により、ユーティライゼーションに基づいて選択された書き込みモードで、LUTをNAND型フラッシュメモリ5に格納することができる。
図31は、コントローラ4によって実行されるガベージコレクション処理の手順を示す。ここでは、データをNAND型フラッシュメモリ5に書き込む書き込みモードがSLCモード15、TLCモード16、およびQLCモード17のいずれか1つに設定され、またGCデスティネーションブロックとして、SLCブロックとTLCブロックとQLCブロックの三種類のブロックが同時に確保される場合を例示する。
まず、コントローラ4は、ガベージコレクション動作の開始タイミングであるか否かを判定する(ステップS301)。コントローラ4は、例えば、フリーブロック数が閾値未満である場合に、ガベージコレクション動作の開始タイミングであると判別する。ガベージコレクション動作の開始タイミングでない場合(ステップS301のNO)、ステップS301に戻り、ガベージコレクション動作の開始タイミングであるかが再度判定される。
ガベージコレクション動作の開始タイミングである場合(ステップS301のYES)、コントローラ4は、ユーティライゼーションが第1閾値未満であるか否かを判定する(ステップS302)。ユーティライゼーションが第1閾値未満である場合(ステップS302のYES)、コントローラ4は書き込みモードをSLCモード15に設定する(ステップS303)。
ユーティライゼーションが第1閾値以上である場合(ステップS302のNO)、コントローラ4は、ユーティライゼーションが第2閾値未満であるか否かを判定する(ステップS304)。なお、第2閾値は第1閾値よりも大きい。ユーティライゼーションが第2閾値未満である場合(ステップS304のYES)、コントローラ4は書き込みモードをTLCモード16に設定する(ステップS305)。また、ユーティライゼーションが第2閾値以上である場合(ステップS304のNO)、コントローラ4は書き込みモードをQLCモード17に設定する(ステップS306)。
ステップS303、S305、またはS306の手順の後、すなわち、書き込みモードがSLCモード15、TLCモード16、およびQLCモード17のいずれかに設定された後、コントローラ4はGCソースブロックを選択する(ステップS307)。選択されるGCソースブロックは、例えば、有効データが少ないブロックである。コントローラ4は、選択されたGCソースブロック内の有効データをGCバッファ32にコピー(リード)する(ステップS308)。
次いで、コントローラ4は、GCバッファ32に、設定された現在の書き込みモードに対応する書き込み単位分(ページ分)のデータが蓄積されているか否かを判定する(ステップS309)。より具体的には、コントローラ4は、現在の書き込みモードがSLCモード15であれば、GCバッファ32に1ページ分(32KB)のデータが蓄積されているか否かを判定し、現在の書き込みモードがTLCモード16であれば、GCバッファ32に3ページ分(96KB)のデータが蓄積されているか否かを判定し、また現在の書き込みモードがQLCモード17であれば、GCバッファ32に4ページ分(128KB)のデータが蓄積されているか否かを判定する。
GCバッファ32に、現在の書き込みモードに対応する書き込み単位分(ページ分)のデータが蓄積されている場合(ステップS309のYES)、コントローラ4は、GCバッファ32から、GCデスティネーションブロックに、現在の書き込みモードでデータを書き込む(ステップS310)。そして、コントローラ4はこの書き込みに応じてLUTを更新する(ステップS311)。一方、GCバッファ32に、現在の書き込みモードに対応するページ分のデータが蓄積されていない場合には(ステップS309のNO)、ステップS307の手順に戻る。
そして、コントローラ4は、ガベージコレクション動作を終了するか否かを判定する(ステップS312)。コントローラ4は、例えば、十分な数のフリーブロックが存在する場合に、ガベージコレクション動作を終了すると判定する。ガベージコレクション動作を終了すると判定した場合(ステップS312のYES)、処理を終了する。ガベージコレクション動作を続行すると判定した場合(ステップS312のNO)、ステップS307に戻り、GCソースブロックがさらに選択される。
以上により、ガベージコレクション動作においても、ユーティライゼーションに基づいて選択された書き込みモードで、データをNAND型フラッシュメモリ5に格納することができる。
なお、コントローラ4は、GCソースブロックの有効データを、その有効データが書き込まれていた特定の書き込みモードで、GCデスティネーションブロックに書き込んでもよい。この場合、コントローラ4は、GCソースブロックの有効データを、その特定の書き込みモードに対応するいずれかのGCバッファ321,322,323に蓄積する。そして、コントローラ4は、GCバッファ321,322,323に書き込み単位分のデータが蓄積されている場合、GCデスティネーションブロック(SLC用のGCデスティネーションブロック、TLC用のGCデスティネーションブロック、またはQLC用のGCデスティネーションブロック)にその特定の書き込みモードで書き込む。これにより、GCソースブロック内の有効データを、GCソースブロックにおいて書き込まれていた書き込みモードをそのまま維持して、GCデスティネーションブロックに格納することができる。
なお、図31において破線の枠内に示したステップS307からステップS311までの手順は、図32のフローチャートに示す手順と置き換えられてもよい。
図32のフローチャートは、有効データのLBAのアクセス頻度に基づいて書き込みモードが選択される動作を含むガベージコレクション処理の手順を示す。なお、有効データのLBAのアクセス頻度は、例えばクラスタ単位で判定され得る。ここでは、図31のフローチャートに示したガベージコレクション処理に、アクセス頻度が高いLBAのデータをSLCモード15でNAND型フラッシュメモリ5に書き込む手順が加えられる場合を例示する。
まず、コントローラ4は、GCソースブロックを選択する(ステップS351)。コントローラ4は、選択されたGCソースブロックから有効データを選択する(ステップS352)。そして、コントローラ4は、その有効データのLBAのアクセス頻度が第4閾値よりも大きいか否かを判定する(ステップS353)。
アクセス頻度が第4閾値よりも大きい場合(ステップS353のYES)、コントローラ4は、その有効データをSLC用GCバッファ321にコピー(リード)する(ステップS354)。コントローラ4は、SLC用GCバッファ321に書き込み単位(1ページ)分の32KBのデータが蓄積されているか否かを判定する(ステップS355)。SLC用GCバッファ321に1ページ分のデータが蓄積されている場合(ステップS355のYES)、コントローラ4は、SLC用GCバッファ321からGCデスティネーションブロック(SLC書き込み先ブロック)に、SLCモード15でデータを書き込み(ステップS356)、LUTを更新する(ステップS357)。SLC用GCバッファ321に1ページ分のデータが蓄積されていない場合には(ステップS355のNO)、ステップS351の手順に戻る。
アクセス頻度が第4閾値以下である場合(ステップS353のNO)、コントローラ4は、設定された現在の書き込みモードがいずれのモードであるかに応じて処理を分岐する(ステップS358)。現在の書き込みモードがSLCモード15である場合(ステップS358のSLC)、ステップS354の手順に進み、有効データをSLCモード15でNAND型フラッシュメモリ5に書き込むための手順が実行される。
現在の書き込みモードがTLCモード16である場合(ステップS358のTLC)、コントローラ4は、有効データをTLC用GCバッファ322にコピー(リード)する(ステップS359)。コントローラ4は、TLC用GCバッファ322に書き込み単位(3ページ)分の96KBのデータが蓄積されているか否かを判定する(ステップS360)。TLC用GCバッファ322に3ページ分のデータが蓄積されている場合(ステップS360のYES)、コントローラ4は、TLC用GCバッファ322からGCデスティネーションブロック(TLC書き込み先ブロック)に、TLCモード16でデータを書き込み(ステップS361)、LUTを更新する(ステップS362)。TLC用GCバッファ322に3ページ分のデータが蓄積されていない場合には(ステップS360のNO)、ステップS351の手順に戻る。
さらに、現在の書き込みモードがQLCモード17である場合(ステップS358のQLC)、コントローラ4は、有効データをQLC用GCバッファ323にコピー(リード)する(ステップS363)。コントローラ4は、QLC用GCバッファ323に書き込み単位(4ページ)分の128KBのデータが蓄積されているか否かを判定する(ステップS364)。QLC用GCバッファ323に4ページ分のデータが蓄積されている場合(ステップS364のYES)、コントローラ4は、QLC用GCバッファ323からGCデスティネーションブロック(QLC書き込み先ブロック)に、QLCモード17でデータを書き込み(ステップS365)、LUTを更新する(ステップS366)。QLC用GCバッファ323に4ページ分のデータが蓄積されていない場合には(ステップS364のNO)、ステップS51の手順に戻る。
選択された有効データがGCバッファ32にコピー(リード)されたか、あるいはGCデスティネーションブロックに書き込まれた後、コントローラ4は、GCソースブロックに別の有効データが存在しているか否かを判定する(ステップS367)。GCソースブロックに別の有効データが存在している場合(ステップS367のYES)、ステップS352に戻り、その別の有効データに関する処理が続行される。GCソースブロックに別の有効データが存在しない場合(ステップS367のNO)、図31のフローチャートに示したステップS312に進む。
このように、コントローラ4は、ガベージコレクション動作中に、アクセス頻度が高いLBAのデータを、SLCモード15でNAND型フラッシュメモリ5に書き込むことができる。
なお、コントローラ4は、ガベージコレクション動作時以外でも、特定の物理ブロックのデータを、あるいは特定のLBAのデータを、別の書き込みモードでNAND型フラッシュメモリ5に書き込むことができる。例えば、ある物理ブロック(QLCブロック)のアクセス頻度が高いことが検出された場合に、コントローラ4は、この物理ブロック内のデータをSLCブロックに書き込むための処理を行う。この処理の具体的な手順は、例えば、図32のフローチャートに示した手順におけるGCソースブロックを、アクセス頻度が高い物理ブロックに置き換えた手順である。
また例えば、あるLBA(例えば、QLCモード17で書き込まれているデータのLBA)のアクセス頻度が高いことが検出された場合に、コントローラ4は、このLBAに対応する物理アドレスのデータ(クラスタ単位のデータ)をSLCブロックに書き込むための処理を行う。コントローラ4は、このクラスタ単位のデータをSLC用GCバッファ321に振り分ける(蓄積する)ことにより、当該データがSLCブロックに書き込まれるようにする。
図33のフローチャートは、ホスト2により指定された論理アドレス範囲のデータが、ホスト2によりその論理アドレス範囲に対して指定された書き込みモードで、NAND型フラッシュメモリ5に書き込まれる動作を含む書き込み処理の手順を示す。ホスト2は、任意のタイミングで、特定の書き込みモードで書き込まれるべきデータの論理アドレス(あるいは論理アドレス範囲)を、コントローラ4に通知することができる。ホスト2は、この通知を用いて、例えば、アクセス頻度が高い論理アドレス範囲のデータを、高速な読み出しおよび書き込みが可能であるSLCモード15やTLCモード16で書き込むことや、アクセス頻度が低い論理アドレス範囲のデータを、データ密度が高いQLCモード17で書き込むことをコントローラ4に要求することができる。メモリシステムのLBA範囲-書き込みモードテーブル371内に保持する論理アドレス範囲は0個以上である。なお、ホスト2は、論理アドレス範囲に対して、書き込みモード(SLCモード15、TLCモード16、またはQLCモード17)を指定するだけでなく、あるいは書き込みモードを指定することに加えて、ホスト2が期待するリード・ライト性能(高/低等)を指定することができる。ここでは、クラスタ単位のデータ毎に、書き込みモードがSLCモード15、TLCモード16、およびQLCモード17のいずれかに設定され、また書き込み先ブロックとして、SLCブロックとTLCブロックとQLCブロックの三種類のブロックが同時に確保される場合を例示する。
より具体的には、まず、コントローラ4は、ホスト2からライトコマンドを受け付けたか否かを判定する(ステップS401)。ライトコマンドを受け付けていない場合(ステップS401のNO)、ステップS401に戻り、ホスト2からライトコマンドを受け付けたか否かが再度判定される。
ホスト2からライトコマンドを受け付けた場合(ステップS401のYES)、コントローラ4は、そのライトコマンドで指定された論理アドレスが、ホスト2により指定された論理アドレス範囲に含まれるか否かを判定する(ステップS402)。ライトコマンドで指定された論理アドレスが、ホスト2により指定された論理アドレス範囲に含まれない場合(ステップS402のNO)、コントローラ4は、物理アドレスにマッピングされている論理アドレスの総和に基づく書き込み処理を行う(ステップS416)。この書き込み処理は、図29のフローチャートに示したステップS12からステップS18までの手順に相当する。
ライトコマンドで指定された論理アドレスが、ホスト2により指定された論理アドレス範囲に含まれる場合(ステップS402のYES)、コントローラ4は、その論理アドレス範囲に対して、ホスト2により指定された書き込みモードに応じて処理を分岐する(ステップS403)。
ホスト2により指定された書き込みモードがSLCモード15である場合(ステップS403のSLC)、コントローラ4は、ホスト2から受信したユーザデータをSLC用ライトバッファ311に格納する(ステップS404)。そして、コントローラ4は、SLC用ライトバッファ311に書き込み単位(1ページ)分の32KBのデータが蓄積されているか否かを判定する(ステップS405)。SLC用ライトバッファ311に1ページ分のデータが蓄積されている場合(ステップS405のYES)、コントローラ4は、SLC用ライトバッファ311から書き込み先ブロック(SLC書き込み先ブロック)に、SLCモード15でデータを書き込み(ステップS406)、LUTを更新する(ステップS407)。SLC用ライトバッファ311に1ページ分のデータが蓄積されていない場合には(ステップS405のNO)、ステップS406およびS407の手順がスキップされる。
ホスト2により指定された書き込みモードがTLCモード16である場合(ステップS403のTLC)、コントローラ4は、ホスト2から受信したユーザデータをTLC用ライトバッファ312に格納する(ステップS408)。そして、コントローラ4は、TLC用ライトバッファ312に書き込み単位(3ページ)分の96KBのデータが蓄積されているか否かを判定する(ステップS409)。TLC用ライトバッファ312に3ページ分のデータが蓄積されている場合(ステップS409のYES)、コントローラ4は、TLC用ライトバッファ312から書き込み先ブロック(TLC書き込み先ブロック)に、TLCモード16でデータを書き込み(ステップS410)、LUTを更新する(ステップS411)。TLC用ライトバッファ312に3ページ分のデータが蓄積されていない場合には(ステップS409のNO)、ステップS410およびS411の手順がスキップされる。
また、ホスト2により指定された書き込みモードがQLCモード17である場合(ステップS403のQLC)、コントローラ4は、ホスト2から受信したユーザデータをQLC用ライトバッファ313に格納する(ステップS412)。そして、コントローラ4は、QLC用ライトバッファ313に書き込み単位(4ページ)分の128KBのデータが蓄積されているか否かを判定する(ステップS413)。QLC用ライトバッファ313に4ページ分のデータが蓄積されている場合(ステップS413のYES)、コントローラ4は、QLC用ライトバッファ313から書き込み先ブロック(QLC書き込み先ブロック)に、QLCモード17でデータを書き込み(ステップS414)、LUTを更新する(ステップS415)。QLC用ライトバッファ313に4ページ分のデータが蓄積されていない場合には(ステップS413のNO)、ステップS414およびS415の手順がスキップされる。
以上により、ホスト2により指定された論理アドレス範囲のデータを、ホスト2により指定された書き込みモードでNAND型フラッシュメモリ5に書き込むことができる。また、ガベージコレクション動作中も上記の手順と同様にして、ホスト2により指定された論理アドレス範囲のデータを、ホスト2により指定された書き込みモードでNAND型フラッシュメモリ5に書き込むことができる。(第2実施形態)
第1実施形態では、NAND型フラッシュメモリ5に書き込まれるデータの書き込みモードが、物理アドレス空間にマッピングされている論理アドレスの総数(ユーティライゼーション)に基づいて切り替えられる。これに対して、第2実施形態では、NAND型フラッシュメモリ5に書き込まれるデータの書き込みモードが、NAND型フラッシュメモリ5全体の疲弊度に基づいて切り替えられる。
第2実施形態に係るSSD3の構成は第1実施形態のSSD3と同様であり、第2実施形態と第1実施形態とでは、モード切替部121によって実行される処理の手順のみが異なる。以下、第1実施形態と異なる点のみを説明する。
モード切替部121は、NAND型フラッシュメモリ5全体の疲弊度に基づいて、NAND型フラッシュメモリ5に書き込まれるデータの書き込みモードを切り替える。この全体の疲弊度の指標としては、例えば、NAND型フラッシュメモリ5に含まれる各ブロックのP/Eサイクル数に基づく統計値が用いられる。この統計値は、図4に示したブロック-P/Eサイクル数テーブル352を用いて、NAND型フラッシュメモリ5の全ブロックそれぞれのP/Eサイクル数を統計処理することにより算出され、疲弊度351としてDRAM6に格納されてもよい。
図34に示すように、モード切替部121は、例えば、NAND型フラッシュメモリ5内の全ブロックそれぞれのP/Eサイクル数を取得し、これらP/Eサイクル数を統計処理することにより統計値を算出する。モード切替部121は、ブロック-P/Eサイクル数テーブル352から、NAND型フラッシュメモリ5内の全ブロックそれぞれのP/Eサイクル数を取得してもよい。また、この統計値は、例えば、NAND型フラッシュメモリ5において実行されたP/Eサイクルの総数、つまりNAND型フラッシュメモリ5内の全ブロックそれぞれのP/Eサイクル数の合計値であってもよいし、NAND型フラッシュメモリ5内の全ブロックそれぞれのP/Eサイクル数の平均値であってもよい。ここで、NAND型フラッシュメモリ5内の全ブロックとは、管理データのみを格納するブロックを除く全ブロックであってもよい。なお、NAND型フラッシュメモリ5内のブロックが、SLC専用ブロックグループ18とTLC/QLC共用ブロックグループ19に分けて使用される場合のように、ブロックの用途が分かれている場合には、SLC専用ブロックグループ18に属する全ブロックの統計値と、TLC/QLC共用ブロックグループ19に属する全ブロックの統計値とが別個に算出される。また、統計値は、NAND型フラッシュメモリ5内の全ブロックそれぞれのP/Eサイクル数の最大値や最小値であってもよい。
モード切替部121は、算出されたP/Eサイクル数の統計値に基づいて、書き込みモードを動的に切り替える。
図35を参照して、P/Eサイクル数の統計値に基づいて、書き込みモードがTLCモード16とQLCモード17との間で切り替えられる例について説明する。不揮発性メモリに対して許容できる最大P/Eサイクル数は限られている。そのため、SSD3には、その想定されるSSD3の寿命期間(例えば、5年)に基づいて、使用開始からの経過時間に対する、理想的なP/Eサイクル数の統計値を示す計画線81が設定される。モード切替部121は、例えば、実際のP/Eサイクル数の統計値82が、この計画線81からのずれがマージンの範囲内となるように、書き込みモードを制御する。
図35に示すように、使用開始時(T0)には、書き込みモードとして、例えばTLCモード16が設定される。データがTLCモード16で書き込まれる期間中に、P/Eサイクル数の統計値82が、計画線81からのずれがマージンの上限である81Aに達したとき(T1)、モード切替部121は、書き込みモードをTLCモード16からQLCモード17に切り替える。これにより、リード・ライト性能が低くなるものの、P/Eサイクル数の増加を抑制することができる(寿命優先)。
すなわち、書き込みモードがTLCモード16である場合には、1つのブロック当たりに書き込み可能なデータ量は、書き込みモードがQLCモード17である場合の3/4である。書き込みモードがQLCモード17に切り替えられると、1つのブロック当たりに書き込み可能なデータ量は、QLCモード17におけるブロックサイズの25パーセント分だけ増える。したがって、QLCモード17における書き込み可能データ量はTLCモード16における書き込み可能データ量の4/3倍になるので、書き込みモードの切り替え前のホスト/GC書き込み量と書き込みモードの切り替え後のホスト/GC書き込み量が同じであれば、発生するP/Eの頻度が3/4になる。この結果、P/Eサイクル数の増加を抑制することができる。さらに、同一のユーティライゼーションに対して、NAND型フラッシュメモリ5が記憶可能な量(物理容量)が増加すると、余裕率が向上したのと同様に、GCソースブロックの有効データ量が低下するので、ガベージコレクションの頻度が下がり、WAFが低下する。その結果、P/Eサイクル数の増加を抑制することができる。なお、表記容量と物理容量(実装容量)の差を余裕容量、表記容量に対する余裕容量の比率を余裕率と呼ぶ。一般に、余裕率が高いほうが、ガベージコレクションにおけるフリーブロックの生成効率が上がるため、WAFが低下する。
そして、データがQLCモード17で書き込まれる期間中に、P/Eサイクル数の統計値82が、計画線81からのずれがマージンの下限である81Bに達したとき(T2)、モード切替部121は、書き込みモードをQLCモード17からTLCモード16に切り替える。これにより、P/Eサイクル数の増加率は上昇するものの、リード・ライト性能を高くすることができる(性能優先)。この増加率は、単位時間当たりのP/Eサイクル数によって表される。
同様に、データがTLCモード16で書き込まれる期間中に、P/Eサイクル数の統計値82が、計画線81からのずれがマージンの上限である81Aに達したとき(T3)、モード切替部121は、書き込みモードをTLCモード16からQLCモード17に切り替える。
このような書き込みモードの切り替えにより、P/Eサイクル数の統計値は、計画線81からのずれがマージンの範囲内となるように制御され、想定される寿命までSSD3を使用可能にすることができる。
なお、P/Eのストレス量は、SLCモード15とTLCモード16とQLCモード17とでそれぞれ異なり、メモリセル当たりに書き込まれるビット数が多いほど大きい。そのため、モード切替部121は、P/Eサイクル数だけでなく、いずれの書き込みモードが用いられたかに基づくストレス量や温度の影響も考慮して、NAND型フラッシュメモリ5の各ブロックの疲弊度を算出し、NAND型フラッシュメモリ5の全ブロックそれぞれの疲弊度を統計処理して算出された、NAND型フラッシュメモリ5全体の疲弊度の統計値に基づいて書き込みモードを制御してもよい。例えば、同じ1回のP/Eサイクルであっても、低温で行われた場合は、高温で行われた場合よりも、より疲弊が進行する。ブロック-P/Eサイクル数テーブル352は、P/Eサイクル数に替えて、あるいはP/Eサイクル数に加えて、ブロック毎の疲弊度を管理してもよい。
ここで、書き込みモードがSLCモード15とQLCモード17との間で切り替えられる場合を例示して、QLCモード17の利用がSSD3の寿命期間中にホスト2からSSD3に対して書き込み可能な総データ量を表す指標であるTBW(Total Byte
Written)を増加させることができる理由について説明する。
(1)上述したように、SLCバッファを利用する方法では、書き込みモードがSLCモード15である場合、ユーザデータは、まず、SLCモード15でSLCバッファに書き込まれ、その後、ガベージコレクション等によりSLCバッファ内のユーザデータがQLCモード17でQLC用ブロック(SLCバッファ以外のブロック)に書き込まれる場合がある。一方、書き込みモードがQLCモード17である場合、ユーザデータは、SLCバッファを経由せずに、QLC用ブロックに直接書き込まれる(直書きされる)。前者と後者を比較すると、SLCバッファの容量を超えるような広域のアクセスパターンの場合は、SLCバッファへの書き込みが発生しない分、後者のほうが(SLC、QLCを合計して考えた場合の)WAFが低い。
(2)同一の量のデータの書き込みを行う場合、SLCよりもQLCのほうがブロック当たりの容量が大きいため、QLCのほうが消去の頻度が少なくて済む(SLCの1/4になる)。
(3)上述したように、一般に、余裕率が高いほうが、ガベージコレクションにおけるフリーブロックの生成効率が上がるため、WAFが下がる。QLCモードを使うことで、物理容量を増やすことができるため、WAFが下がる。
同一ユーザデータ量のホスト2からの書き込みに対して、WAFが大きいほうが、より多くのNAND型フラッシュメモリ5のP/Eサイクル数を必要とする。NAND型フラッシュメモリ5の許容できる最大P/Eサイクル数が一定であるとすると、WAFが小さいほうが、SSD3が寿命を迎えるまでに、より多くのユーザデータのホスト書込み(すなわちTBW)を受けることができる。
なお、図35で説明したP/Eサイクル数に基づく書き込みモード切替は、図16から図18および図21で説明したユーティライゼーションに基づく書き込みモード切替と組み合わせて使用することができる。この場合、モード切替部121は、たとえユーティライゼーションがTLCモード16の使用を許容する範囲に収まっている場合であっても、P/Eサイクル数が上述のマージンの上限である81Aに達したならば、書き込みモードをTLCモード16からQLCモード17に切り替える。
図36のフローチャートは、コントローラ4によって実行されるユーザデータの書き込み処理の手順を示す。ここでは、ユーザデータをNAND型フラッシュメモリ5に書き込む書き込みモードがTLCモード16とQLCモード17のいずれか一方に設定される場合を例示する。
まず、コントローラ4は、ホスト2からライトコマンドを受け付けたか否かを判定する(ステップS51)。ライトコマンドを受け付けていない場合(ステップS51のNO)、ステップS51に戻り、ホスト2からライトコマンドを受け付けたか否かが再度判定される。
ホスト2からライトコマンドを受け付けた場合(ステップS51のYES)、コントローラ4は、現在の書き込みモードがいずれのモードであるかに応じて処理を分岐する(ステップS52)。現在の書き込みモードがTLCモード16である場合(ステップS52のTLC)、コントローラ4は、NAND型フラッシュメモリ5のP/Eサイクル数の統計値が第5閾値以上であるか否かを判定する(ステップS53)。P/Eサイクル数の統計値には、NAND型フラッシュメモリ5において実行されたP/Eサイクルの総数、つまりNAND型フラッシュメモリ5内の全ブロックそれぞれのP/Eサイクル数の合計値が用いられてもよいし、あるいはNAND型フラッシュメモリ5内の全ブロックそれぞれのP/Eサイクル数の平均値、最大値、または最小値であってもよい。第5閾値は、例えば、SSD3の使用開始からの経過時間に応じて変動(例えば、増加)する。P/Eサイクル数の統計値が第5閾値以上である場合(ステップS53のYES)、コントローラ4は書き込みモードをQLCモード17に設定する(ステップS54)。一方、P/Eサイクル数の統計値が第5閾値未満である場合(ステップS53のNO)、ステップS54の手順がスキップされ、書き込みモードはTLCモード16に維持される。
また、現在の書き込みモードがQLCモード17である場合(ステップS52のQLC)、コントローラ4は、NAND型フラッシュメモリ5のP/Eサイクル数の統計値が第6閾値未満であるか否かを判定する(ステップS55)。なお、第6閾値は、第5閾値よりも小さく、例えば、SSD3の使用開始からの経過時間に応じて変動(例えば、増加)する。P/Eサイクル数の統計値が第6閾値未満である場合(ステップS55のYES)、コントローラ4は書き込みモードをTLCモード16に設定する(ステップS56)。一方、P/Eサイクル数の統計値が第6閾値以上である場合(ステップS55のNO)、ステップS56の手順がスキップされ、書き込みモードはQLCモード17に維持される。
書き込みモードがTLCモード16とQLCモード17のいずれかに設定または維持された後、コントローラ4は、設定された書き込みモードで、NAND型フラッシュメモリ5にユーザデータを書き込む(ステップS57)。そして、コントローラ4は、この書き込みに応じてLUT33を更新する(ステップS58)。
以上により、P/Eサイクル数の統計値に基づいて選択された書き込みモードで、ユーザデータをNAND型フラッシュメモリ5に格納することができる。
図37のフローチャートは、コントローラ4によって実行されるLUTの書き込み処理の手順を示す。ここでは、LUTをNAND型フラッシュメモリ5に書き込む書き込みモードがSLCモード15とQLCモード17のいずれか一方に設定される場合を例示する。
まず、コントローラ4は、LUTの書き込みタイミングであるか否かを判定する(ステップS61)。LUTの書き込みタイミングでない場合(ステップS61のNO)、ステップS61に戻り、LUTの書き込みタイミングであるか否かが再度判定される。
LUTの書き込みタイミングである場合(ステップS61のYES)、コントローラ4は、現在の書き込みモードがいずれのモードであるかに応じて処理を分岐する(ステップS62)。現在の書き込みモードがSLCモード15である場合(ステップS62のSLC)、コントローラ4は、P/Eサイクル数の統計値が第7閾値以上であるか否かを判定する(ステップS63)。P/Eサイクル数の統計値が第7閾値以上である場合(ステップS63のYES)、コントローラ4は書き込みモードをQLCモード17に設定する(ステップS64)。一方、P/Eサイクル数の統計値が第7閾値未満である場合(ステップS63のNO)、ステップS64の手順がスキップされ、書き込みモードはSLCモード15に維持される。
また、現在の書き込みモードがQLCモード17である場合(ステップS62のQLC)、コントローラ4は、NAND型フラッシュメモリ5のP/Eサイクル数の統計値が第8閾値未満であるか否かを判定する(ステップS65)。なお、第8閾値は、第7閾値よりも小さく、例えば、SSD3の使用開始からの経過時間に応じて変動(例えば、増加)する。P/Eサイクル数の統計値が第8閾値未満である場合(ステップS65のYES)、コントローラ4は書き込みモードをSLCモード15に設定する(ステップS66)。一方、P/Eサイクル数の統計値が第8閾値以上である場合(ステップS65のNO)、ステップS66の手順がスキップされ、書き込みモードはQLCモード17に維持される。
書き込みモードがSLCモード15とQLCモード17のいずれかに設定または維持された後、コントローラ4は、設定された書き込みモードでNAND型フラッシュメモリ5にLUTを書き込む(ステップS67)。
以上により、P/Eサイクル数の統計値に基づいて選択された書き込みモードで、LUTをNAND型フラッシュメモリ5に格納することができる。
なお、NAND型フラッシュメモリ5に含まれるブロックが、SLC専用ブロックグループ18とTLC/QLC共用ブロックグループ19とに分けて使用される場合、P/Eサイクル数の統計値はグループ毎に算出される。また、許容できる最大P/Eサイクル数の統計値も、グループ毎に定義される。したがって、図36および図37のフローチャートに示した各閾値も、グループ毎に定義される。
この場合、コントローラ4は、例えば、グループ毎に、現在のP/Eサイクル数の統計値と、閾値とに基づいて、書き込みモードを決定する。そして、コントローラ4は、2つのグループ間で決定された書き込みモードが異なる場合には、P/Eサイクル数の増加がより抑制される方のモードを選択し(例えば、SLCモード15とQLCモード17であればQLCモード17を選択し)、書き込みモードとして設定する。
なお、NAND型フラッシュメモリ5に含まれるブロックが、SLC専用ブロックグループ18とTLC/QLC共用ブロックグループ19とに分けて使用され、寿命の観点から、ホスト書込みの書き込みモードとして、SLCモードと、TLC/QLC直書きモードとを使い分ける場合、SLCモードはSLCブロックグループ18に属するブロックを主に疲弊させ、TLC/QLC直書きモードはTLC/QLC共用ブロックグループ19に属するブロックを主に疲弊させる。この場合、メモリシステムとしての寿命を担保するために、それぞれのブロックグループ18,19の余命を考慮し、余命に余裕がある方をより疲弊させるモードを選択する。また、余命が同程度であれば性能を優先して、すなわち、狭域ワークロードであればSLCモードを選択し、高域ワークロードであればTLC/QLC直書きモードを選択する。狭域ワークロードとは、上述した通り、時系列的に近接するアクセス(複数のコマンド)において、アクセス対象の論理アドレスが狭い論理アドレス空間内におさまっているアクセスパターンのことである。広域ワークロードとは、時系列的に近接するアクセスにおいて、アクセス対象の論理アドレスが広い論理アドレス空間に亘っており、狭い論理アドレス空間内におさまっていないアクセスパターンのことである。
また、NAND型フラッシュメモリ5内のブロックが、SLC専用ブロックグループ18とTLC/QLC共用ブロックグループ19とに分けて使用される場合、SLC専用ブロックグループ18に属するブロックは、SLCモード15での書き込みに使用されることにより、数十kサイクルの寿命を保つことができる。仮に、ブロックがSLCモード15とQLCモード17とで共用される場合には、QLCモード17で許容できる最大P/Eサイクル数に到達した時点で(例えば、数kサイクル程度で)、そのブロックを使用することができなくなる。
SLC専用ブロックグループ18に属するブロックは、P/Eサイクルが高い頻度で発生するように使用されることを前提として、書き換えの頻度が高いデータが配置されるようにする。一方、QLC専用ブロックグループに属するブロックは、P/Eサイクルが低い頻度で発生するように使用されることを前提として、書き換えがあまり発生しないデータ(書き換えの頻度が低いデータ)が配置されるようにする。SSD3は、SLC専用ブロックグループ18とQLC専用ブロックグループのいずれかがそれぞれの許容できる最大P/Eサイクル数に達することにより寿命を迎えるので、SLC専用ブロックグループ18に属するブロックとQLC専用ブロックグループに属するブロックとの使い分けのバランスを保つことにより、SSD3全体としての寿命を長くすることができる。
一方、寿命を保証する範囲内で、SLCバッファを使用することにより、(ワークロードに関わらず)瞬発性能を発揮し、また、狭域ワークロードにてリード・ライト性能を高くすることができる。(第3実施形態)
第1実施形態および第2実施形態では、NAND型フラッシュメモリ5に書き込まれるデータの書き込みモードが切り替えられる構成を示した。第3実施形態では、さらに、DRAM6上にキャッシュされているLUTのエントリ(アドレス変換情報)が、対応するユーザデータがNAND型フラッシュメモリ5に書き込まれた際の書き込みモードに基づいて、あるいはそのエントリがNAND型フラッシュメモリ5に書き込まれた際の書き込みモードに基づいて、制御される。
第3実施形態に係るSSD3の構成は第1実施形態のSSD3と同様であり、第3実施形態と、第1実施形態および第2実施形態とでは、キャッシュ制御部125によって実行される処理の手順のみが異なる。以下、第1実施形態および第2実施形態と異なる点のみを説明する。
NAND型フラッシュメモリ5には、論理アドレス(LBA)と物理アドレスとのマッピングをそれぞれ示す複数のエントリを含むアドレス変換テーブル(LUT)53が格納されている。キャッシュ制御部125は、NAND型フラッシュメモリ5から読み出されてDRAM6にキャッシュされるLUT33のエントリを制御する。キャッシュ制御部125は、ホスト2によってリードやライトが要求されたLBAに対応するLUTのエントリを、NAND型フラッシュメモリ5からDRAM6にキャッシュする。
LUTをキャッシュ可能なDRAM6上の領域は限られている。そのため、キャッシュ制御部125は、DRAM6上に新たなLUTのエントリをキャッシュできる空き領域がない場合には、特定の規則に従って、DRAM6上にキャッシュされているエントリから追い出し対象のエントリを選択する。なお、キャッシュ制御部125は、空き領域がない場合以外でも、追い出し対象のエントリを選択するようにしてもよい。
この特定の規則には、例えば、least recently used(LRU)方式が用いられ得るが、本実施形態では、各エントリに対応するユーザデータがNAND型フラッシュメモリ5に書き込まれた際の書き込みモード、あるいは各エントリに対応するアドレス変換情報がNAND型フラッシュメモリ5に書き込まれた際の書き込みモードに基づいて、DRAM6上にキャッシュされているエントリから追い出し対象のエントリを選択する。追い出し対象のエントリが選択される具体的な例については後述する。
キャッシュ制御部125は、選択された追い出し対象のエントリにダーティデータが含まれる場合には、そのエントリに含まれるアドレス変換情報をNAND型フラッシュメモリ5に書き戻して、当該エントリのキャッシュ領域を解放する。ダーティデータは、DRAM6上にキャッシュされた後に書き換えられ、書き換えられた内容がNAND型フラッシュメモリ5に反映されていないデータである。あるエントリに含まれるアドレス変換情報をNAND型フラッシュメモリ5に書き戻す際の書き込みモードには、例えば、そのエントリに対応するアドレス変換情報がNAND型フラッシュメモリ5に最後に書き込まれた際の書き込みモードが用いられてもよい。あるいは、第1実施形態または第2実施形態に示した構成を適用して、ユーティライゼーション、P/Eサイクル数の統計値等に基づいて設定された書き込みモードであってもよい。
なお、選択されたエントリに含まれるデータがダーティデータでないならば、キャッシュ制御部125は、書き込み等の処理を何等行うことなく、当該エントリのキャッシュ領域を解放する。
そして、キャッシュ制御部125は、解放されたキャッシュ領域に、新たなLUTのエントリをキャッシュする。
以上により、各エントリに対応するユーザデータがNAND型フラッシュメモリ5に書き込まれた際の書き込みモード、あるいは各エントリに対応するアドレス変換情報がNAND型フラッシュメモリ5に書き込まれた際の書き込みモードに基づいて、DRAM6から優先して追い出されるLUTのエントリを制御することができる。なお、LUT33は、DRAM6ではなく、コントローラ4内に設けられるSRAMにキャッシュされてもよい。その場合も同様にして、キャッシュ制御部125は、NAND型フラッシュメモリ5からSRAMにキャッシュされるエントリを制御することができる。
図38および図39を参照して、DRAM6上に新たなLUTのエントリがキャッシュされる動作の例を示す。ここでは、DRAM6にキャッシュされているLUT33の各エントリのアドレス変換情報によって示される、NAND型フラッシュメモリ5上のユーザデータの書き込みモードに基づいて、DRAM6にキャッシュされているLUT33のエントリの内、メモリセル当たりに格納されるビット数がより多い書き込みモード(例えば、QLCモード17)のユーザデータに対応するエントリを優先してDRAM6から追い出す第1ポリシーが適用される場合を例示する。
キャッシュ制御部125は、ホスト2からLBA“40”の読み出しを要求するリードコマンドを受け付けた場合、DRAM6にキャッシュされているLUT33に、LBA“40”に対応するエントリが含まれているか否かを判定する。図38に示す例では、DRAM6に、3つのLUTのエントリをキャッシュするための3つのキャッシュ領域が設けられている。これら3つのキャッシュ領域には、LBA“10”のアドレス変換情報である物理アドレス“400”を含むエントリ331と、LBA“20”のアドレス変換情報である物理アドレス“200”を含むエントリ332と、LBA“30”のアドレス変換情報である物理アドレス“50”を含むエントリ333とがキャッシュされている。以下、「アドレス変換情報である物理アドレス“X”」の表現を、「アドレス変換情報(“X”)」のように表記する。
キャッシュ制御部125は、キャッシュされているLUT33のエントリ331,332,333にLBA“40”に対応するエントリが含まれていないので、このLBA“40”のエントリを新たにキャッシュする領域を確保するための処理を行う。
具体的には、キャッシュ制御部125は、管理テーブル45を参照して、DRAM6にキャッシュされているLUT33のエントリから追い出し対象のエントリを選択する。追い出し対象のエントリは、対応するユーザデータの書き込みモードが、メモリセル当たりに格納されるビット数がより多い書き込みモードであるエントリである。管理テーブル45は、LBAと、対応するユーザデータの書き込みモードとを示している。管理テーブル45は、例えば、対応するユーザデータの書き込み(ホスト書き込み、GC書き込み)やアンマップに応じて更新される。また、管理テーブル45は、NAND型フラッシュメモリ5に格納され、必要に応じてDRAM6上にキャッシュされる。
図38に示す例では、キャッシュ制御部125は、DRAM6にキャッシュされているLUT33のエントリから、ユーザデータの書き込みモードがQLCモード17であるLBA“20”のエントリ332を選択する。キャッシュ制御部125は、このエントリ332に含まれるアドレス変換情報(“200”)がダーティデータである場合、このデータをNAND型フラッシュメモリ5に書き込む。
そして、キャッシュ制御部125は、エントリ332のキャッシュ領域を解放し、NAND型フラッシュメモリ5に格納されているLUT53から、LBA“40”のエントリに含まれるアドレス変換情報(“500”)を読み出して、この解放された領域にキャッシュする。
これにより、図39に示すように、DRAM6上に、LBA“40”に対応するLUTのエントリに含まれるアドレス変換情報(“500”)を新たにキャッシュすることができる。したがって、リード制御部122は、このLBA“40”に対応するLUTのエントリに基づいて、論理アドレス(LBA)に対応する物理アドレスを求め、NAND型フラッシュメモリ5からリードコマンドに応じたデータを読み出すことができる。
図40のフローチャートは、コントローラ4によって実行される、第1ポリシーに従ったLUTのキャッシュ制御処理の手順を示す。
まず、コントローラ4は、DRAM6上に新たなLUTのエントリをキャッシュする空き領域があるかどうかを判定する(ステップS71)。空き領域がある場合(ステップS71のYES)、コントローラ4は、DRAM6に、その新たなLUTのエントリを格納する(ステップS78)。
一方、DRAM6上に新たなLUTのエントリをキャッシュする空き領域がない場合(ステップS71のNO)、コントローラ4は、DRAM6上に、対応するユーザデータの書き込みモードがQLCであるLUTのエントリがあるか否かを判定する(ステップS72)。対応するユーザデータの書き込みモードがQLCモード17であるLUTのエントリがある場合(ステップS72のYES)、コントローラ4は、そのLUTのエントリを追い出し対象として選択する(ステップS73)。また、対応するユーザデータの書き込みモードがQLCモード17であるLUTのエントリがない場合(ステップS72のNO)、コントローラ4は、対応するユーザデータの書き込みモードがTLCモード16(またはSLCモード15)であるLUTのエントリを追い出し対象として選択する(ステップS74)。
次いで、コントローラ4は、追い出し対象として選択されたエントリのデータ(アドレス変換情報)がダーティデータであるか否かを判定する(ステップS75)。選択されたエントリのデータがダーティデータである場合(ステップS75のYES)、コントローラ4は、そのデータをNAND型フラッシュメモリ5に書き込む(書き戻す)(ステップS76)。また、選択されたエントリのデータがダーティデータでない場合(ステップS75のNO)、ステップS76の手順はスキップされる。
そして、コントローラ4は、追い出し対象として選択されたエントリのキャッシュ領域を解放し(ステップS77)、DRAM6に、新たなLUTのエントリをキャッシュする(ステップS78)。
以上により、DRAM6にキャッシュされているLUT33のエントリの内、対応するユーザデータの書き込みモードがQLCモード17であるLUT33のエントリを優先してDRAM6から追い出すことができる。
QLCモード17で書き込まれているユーザデータのLBAは、性能要求が高くないと推定され、当該LBAのLUT(アドレス変換情報)をキャッシュから追い出しても、要求に対する影響は少ないと推定される。一方、SLCモード15で書き込まれているユーザデータのLBAは、性能要求が高いと推定される。したがって、SLCモード15で書き込まれているユーザデータのLBAのLUT(アドレス変換情報)をキャッシュからなるべく追い出さないことで高性能を維持し、要求に応えることができる。
図41および図42を参照して、DRAM6上に新たなLUTのエントリがキャッシュされる動作の別の例を示す。ここでは、管理テーブル45によって示される、NAND型フラッシュメモリ5上のユーザデータの書き込みモードに基づいて、DRAM6にキャッシュされているLUT33のエントリの内、メモリセル当たりに格納されるビット数がより少ない書き込みモード(例えば、SLCモード15)のユーザデータに対応するエントリを優先してDRAM6から追い出す第2ポリシーが適用される場合を例示する。
キャッシュ制御部125は、ホスト2からLBA“40”の読み出しを要求するリードコマンドを受け付けた場合、DRAM6にキャッシュされたLUT33に、LBA“40”に対応するエントリが含まれているか否かを判定する。そして、キャッシュ制御部125は、LUT33のエントリ331,332,333にLBA“40”に対応するエントリが含まれていないので、このLBA“40”のエントリを新たにキャッシュする領域を確保するための処理を行う。
具体的には、キャッシュ制御部125は、管理テーブル45を参照して、DRAM6にキャッシュされているLUT33のエントリから追い出し対象のエントリを選択する。追い出し対象のエントリは、対応するユーザデータの書き込みモードが、メモリセル当たりに格納されるビット数がより少ない書き込みモードであるエントリである。
図41に示す例では、キャッシュ制御部125は、DRAM6にキャッシュされているLUT33のエントリから、ユーザデータの書き込みモードがSLCモード15であるLBA“10”のエントリ331を選択する。キャッシュ制御部125は、このエントリ331に含まれるデータ(“400”)がダーティデータである場合、このデータをNAND型フラッシュメモリ5に書き込む。
そして、キャッシュ制御部125は、エントリ331のキャッシュ領域を解放し、NAND型フラッシュメモリ5に格納されているLUT53から、LBA“40”のデータ(“500”)を読み出して、この解放された領域にキャッシュする。
これにより、図42に示すように、DRAM6上に、LBA“40”に対応するLUTのエントリ(“500”)を新たにキャッシュすることができる。したがって、リード制御部122は、このLBA“40”に対応するLUTのエントリに基づいて、論理アドレス(LBA)に対応する物理アドレスを求め、NAND型フラッシュメモリ5からリードコマンドに応じたデータを読み出すことができる。
図43のフローチャートは、コントローラ4によって実行される、第2ポリシーに従ったLUTのキャッシュ制御処理の手順を示す。
まず、コントローラ4は、DRAM6上に新たなLUTのエントリをキャッシュする空き領域があるかどうかを判定する(ステップS81)。空き領域がある場合(ステップS81のYES)、コントローラ4は、DRAM6に、その新たなLUTのエントリを格納する(ステップS88)。
一方、DRAM6上に新たなLUTのエントリをキャッシュする空き領域がない場合(ステップS81のNO)、コントローラ4は、DRAM6上に、対応するユーザデータの書き込みモードがSLCモード15であるLUTのエントリがあるか否かを判定する(ステップS82)。対応するユーザデータの書き込みモードがSLCモード15であるLUTのエントリがある場合(ステップS82のYES)、コントローラ4は、そのLUTのエントリを追い出し対象として選択する(ステップS83)。また、対応するユーザデータの書き込みモードがSLCモード15であるLUTのエントリがない場合(ステップS82のNO)、コントローラ4は、対応するユーザデータの書き込みモードがTLCモード16(またはQLCモード17)であるLUTのエントリを追い出し対象として選択する(ステップS84)。
次いで、コントローラ4は、追い出し対象として選択されたエントリのデータ(アドレス変換情報)がダーティデータであるか否かを判定する(ステップS85)。選択されたエントリのデータがダーティデータである場合(ステップS85のYES)、コントローラ4は、そのデータをNAND型フラッシュメモリ5に書き込む(書き戻す)(ステップS86)。また、選択されたエントリのデータがダーティデータでない場合(ステップS85のNO)、ステップS86の手順はスキップされる。
そして、コントローラ4は、追い出し対象として選択されたエントリのキャッシュ領域を解放し(ステップS87)、DRAM6に、新たなLUTのエントリをキャッシュする(ステップS88)。
以上により、DRAM6にキャッシュされているLUT33のエントリの内、対応するユーザデータの書き込みモードがSLCモード15であるLUT33のエントリを優先してDRAM6から追い出すことができる。
SLCモード15で書き込まれているユーザデータは、QLCモード17で書き込まれているユーザデータよりも高速に読み出すことができるため、LUTキャッシュミスによりLUT(アドレス変換情報)の読み出しを行ったとしても、LUTの読み出し時間を含めたリード性能全体は、QLCモード17で書き込まれているユーザデータに対するリード性能と大きく変わらない。したがって、限られたDRAM容量で、性能を均一化することができる。
図44および図45を参照して、DRAM6上に新たなLUTのエントリがキャッシュされる動作のさらに別の例を示す。ここでは、DRAM6にキャッシュされているLUT33の各エントリのデータ(アドレス変換情報)が格納されているNAND型フラッシュメモリ5上の書き込みモードに基づいて、DRAM6にキャッシュされているLUT33のエントリの内、メモリセル当たりに格納されるビット数がより多い書き込みモード(例えば、QLCモード17)のデータに対応するエントリを優先してDRAM6から追い出す第3ポリシーが適用される場合を例示する。
キャッシュ制御部125は、ホスト2からLBA“40”の読み出しを要求するリードコマンドを受け付けた場合、DRAM6にキャッシュされているLUT33に、LBA“40”に対応するエントリが含まれているか否かを判定する。そして、キャッシュ制御部125は、キャッシュされているLUT33のエントリ331,332,333にLBA“40”に対応するエントリが含まれていないので、このLBA“40”のエントリを新たにキャッシュする領域を確保するための処理を行う。
具体的には、キャッシュ制御部125は、管理テーブル46を参照して、DRAM6にキャッシュされているLUT33のエントリから追い出し対象のエントリを選択する。追い出し対象のエントリは、各エントリのデータ(アドレス変換情報)が格納されているNAND型フラッシュメモリ5上のブロックの書き込みモードが、メモリセル当たりに格納されるビット数がより多い書き込みモードであるエントリである。管理テーブル46は、LBAと、対応するアドレス変換情報の書き込みモードとを示している。管理テーブル46は、例えば、対応するアドレス変換情報の書き込みに応じて更新される。
図44に示す例では、キャッシュ制御部125は、DRAM6にキャッシュされているLUT33のエントリから、そのエントリのユーザデータの書き込みモードがQLCモード17であるLBA“20”のエントリ332を選択する。キャッシュ制御部125は、このエントリ332に含まれるデータ(“200”)がダーティデータである場合、このデータをNAND型フラッシュメモリ5に書き込む。
そして、キャッシュ制御部125は、エントリ332のキャッシュ領域を解放し、NAND型フラッシュメモリ5に格納されているLUT53から、LBA“40”のデータ(“500”)を読み出して、この解放された領域にキャッシュする。
これにより、図45に示すように、DRAM6上に、LBA“40”に対応するLUTのエントリ(“500”)を新たにキャッシュすることができる。したがって、リード制御部122は、このLBA“40”に対応するLUTのエントリに基づいて、論理アドレス(LBA)に対応する物理アドレスを求め、NAND型フラッシュメモリ5からリードコマンドに応じたデータを読み出すことができる。
図46のフローチャートは、コントローラ4によって実行される、第3ポリシーに従ったLUTのキャッシュ制御処理の手順を示す。
まず、コントローラ4は、DRAM6上に新たなLUTのエントリをキャッシュする空き領域があるかどうかを判定する(ステップS91)。空き領域がある場合(ステップS91のYES)、コントローラ4は、DRAM6に、その新たなLUTのエントリを格納する(ステップS98)。
一方、DRAM6上に新たなLUTのエントリをキャッシュする空き領域がない場合(ステップS91のNO)、コントローラ4は、アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがQLCモード17であるLUTのエントリがDRAM6上にあるか否かを判定する(ステップS92)。アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがQLCモード17であるLUTのエントリがある場合(ステップS92のYES)、コントローラ4は、そのLUTのエントリを追い出し対象として選択する(ステップS93)。また、アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがQLCであるLUTのエントリがない場合(ステップS92のNO)、コントローラ4は、アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがTLCモード16(またはSLCモード15)であるLUTのエントリを追い出し対象として選択する(ステップS94)。
次いで、コントローラ4は、追い出し対象として選択されたエントリのデータ(アドレス変換情報)がダーティデータであるか否かを判定する(ステップS95)。選択されたエントリのデータがダーティデータである場合(ステップS95のYES)、コントローラ4は、そのデータをNAND型フラッシュメモリ5に書き込む(書き戻す)(ステップS96)。また、選択されたエントリのデータがダーティデータでない場合(ステップS95のNO)、ステップS96の手順はスキップされる。
そして、コントローラ4は、追い出し対象として選択されたエントリのキャッシュ領域を解放し(ステップS97)、DRAM6に、新たなLUTのエントリをキャッシュする(ステップS98)。
以上により、DRAM6にキャッシュされているLUT33のエントリの内、アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがQLCモード17であるLUT33のエントリを優先してDRAM6から追い出すことができる。
第1ポリシーの場合と同様に、QLCモード17で書き込まれているLUTのLBAは、要求性能が高くないと推定されるため、LUT(アドレス変換情報)をキャッシュから追い出したとしても、要求に対する影響は小さいと推定される。一方、SLCモード15で書き込まれているLUTのLBAは、要求性能が高いと推定される。したがって、SLCモード15で書き込まれているLUTのLBAをキャッシュから追い出さないことにより、高性能を維持し、要求に応えることができる。
図47および図48を参照して、DRAM6上に新たなLUTのエントリがキャッシュされる動作のさらに別の例を示す。ここでは、DRAM6にキャッシュされているLUT33の各エントリのデータ(アドレス変換情報)が格納されているNAND型フラッシュメモリ5上の書き込みモードに基づいて、DRAM6にキャッシュされているLUT33のエントリの内、メモリセル当たりに格納されるビット数がより少ない書き込みモード(例えば、SLCモード15)のデータに対応するエントリを優先してDRAM6から追い出す第4ポリシーが適用される場合を例示する。
キャッシュ制御部125は、ホスト2からLBA“40”の読み出しを要求するリードコマンドを受け付けた場合、DRAM6にキャッシュされているLUT33に、LBA“40”に対応するエントリが含まれているか否かを判定する。そして、キャッシュ制御部125は、キャッシュされているLUT33のエントリ331,332,333にLBA“40”に対応するエントリが含まれていないので、このLBA“40”のエントリを新たにキャッシュする領域を確保するための処理を行う。
具体的には、キャッシュ制御部125は、管理テーブル46を参照して、DRAM6にキャッシュされているLUT33のエントリから追い出し対象のエントリを選択する。追い出し対象のエントリは、各エントリのデータ(アドレス変換情報)が格納されているNAND型フラッシュメモリ5上の書き込みモードが、メモリセル当たりに格納されるビット数がより少ない書き込みモードであるエントリである。
図47に示す例では、キャッシュ制御部125は、DRAM6にキャッシュされているLUT33のエントリから、そのエントリのユーザデータの書き込みモードがSLCモード15であるLBA“10”のエントリ331を選択する。キャッシュ制御部125は、このエントリ331に含まれるデータ(“400”)がダーティデータである場合、このデータをNAND型フラッシュメモリ5に書き込む。
そして、キャッシュ制御部125は、エントリ331のキャッシュ領域を解放し、NAND型フラッシュメモリ5に格納されているLUT53から、LBA“40”のデータ(“500”)を読み出して、この解放された領域にキャッシュする。
これにより、図48に示すように、DRAM6上に、LBA“40”に対応するLUTのエントリ(“500”)を新たにキャッシュすることができる。したがって、リード制御部122は、このLBA“40”に対応するLUTのエントリに基づいて、論理アドレス(LBA)に対応する物理アドレスを求め、NAND型フラッシュメモリ5からリードコマンドに応じたデータを読み出すことができる。
図49のフローチャートは、コントローラ4によって実行される、第4ポリシーに従ったLUTのキャッシュ制御処理の手順を示す。
まず、コントローラ4は、DRAM6上に新たなLUTのエントリをキャッシュする空き領域があるかどうかを判定する(ステップS101)。空き領域がある場合(ステップS101のYES)、コントローラ4は、DRAM6に、その新たなLUTのエントリを格納する(ステップS108)。
一方、DRAM6上に新たなLUTのエントリをキャッシュする空き領域がない場合(ステップS101のNO)、コントローラ4は、アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがSLCモード15であるLUTのエントリがDRAM6上にあるか否かを判定する(ステップS102)。アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがSLCモード15であるLUTのエントリがある場合(ステップS102のYES)、コントローラ4は、そのLUTのエントリを追い出し対象として選択する(ステップS103)。また、アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがSLCモード15であるLUTのエントリがない場合(ステップS102のNO)、コントローラ4は、アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがTLCモード16(またはQLCモード17)であるLUTのエントリを追い出し対象として選択する(ステップS104)。
次いで、コントローラ4は、追い出し対象として選択されたエントリのデータ(アドレス変換情報)がダーティデータであるか否かを判定する(ステップS105)。選択されたエントリのデータがダーティデータである場合(ステップS105のYES)、コントローラ4は、そのデータをNAND型フラッシュメモリ5に書き込む(書き戻す)(ステップS106)。また、選択されたエントリのデータがダーティデータでない場合(ステップS105のNO)、ステップS106の手順はスキップされる。
そして、コントローラ4は、追い出し対象として選択されたエントリのキャッシュ領域を解放し(ステップS107)、DRAM6に、新たなLUTのエントリをキャッシュする(ステップS108)。
以上により、DRAM6にキャッシュされているLUT33のエントリの内、アドレス変換情報が格納されているNAND型フラッシュメモリ5上の書き込みモードがSLCモード15であるLUT33のエントリを優先してDRAM6から追い出すことができる。
キャッシュミス発生時、QLCモード17で書き込まれているLUTは、読み出しに時間がかかるが、SLCモード15で書き込まれているLUTは、読み出し時間は短く済むため、キャッシュミスペナルティは小さい。キャッシュミスペナルティが大きい、QLCモード17で書き込まれているLUTをキャッシュに維持し、キャッシュミスペナルティが小さい、SLCモード15で書き込まれているLUTをキャッシュから追い出すことで、限られたDRAM容量で、性能を均一化することができる。
以上説明したように、第1乃至第3実施形態によれば、メモリシステムの容量および寿命の少なくともいずれかと性能とのバランスを保つことができる。NAND型フラッシュメモリ5にデータを書き込むための書き込みモードは、NAND型フラッシュメモリ5に関する任意の指標に基づいて切り替えられる。この指標には、物理アドレス空間にマッピングされている論理アドレスの総数(ユーティライゼーション)や、P/Eサイクル数の統計値のようなNAND型フラッシュメモリ5全体の疲弊度が用いられ得る。このような指標に基づき、容量または寿命を優先する際には、メモリセル当たりに格納可能なビット数がより多いモード(例えば、QLCモード)が選択され、性能を優先する際には、メモリセル当たりに格納可能なビット数がより少ないモード(例えば、SLCモード)が選択される。これにより、メモリシステムの容量および寿命の少なくともいずれかと性能とのバランスを保つことができる。
なお、本発明のいくつかの実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、各実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。