(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022125787
(43)【公開日】2022-08-29
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
G06F 13/12 20060101AFI20220822BHJP
G06F 12/00 20060101ALI20220822BHJP
G06F 12/06 20060101ALI20220822BHJP
G06F 13/10 20060101ALI20220822BHJP
G06F 3/06 20060101ALI20220822BHJP
【FI】
G06F13/12 330F
G06F12/00 597U
G06F12/06 550A
G06F13/10 330D
G06F3/06 301S
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2021023573
(22)【出願日】2021-02-17
(71)【出願人】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】金森 克也
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CD01
(57)【要約】
【課題】必要なメモリリソースの量を削減可能なメモリシステムを実現する。
【解決手段】コントローラは、ホストメモリバッファへの書き込みを、ホストに許可する。コントローラは、第1のサイズを有する第1のライトデータをホストメモリバッファから取得し、第1のワード線に接続された複数のメモリセルに第1のライトデータを書き込むための第1段階の書き込み動作の実行を不揮発性メモリに指示する。第1のライトデータは、ホストメモリバッファへの書き込みを許可されたホストにより、ホストメモリバッファへ書き込まれたものである。第1のワード線に対する第2段階の書き込み動作が開始可能になった場合、コントローラは、第1のライトデータをホストメモリバッファから再び取得し、第2段階の書き込み動作の実行を不揮発性メモリに指示する。
【選択図】
図6A
【特許請求の範囲】
【請求項1】
複数のメモリセルが各々に接続されている複数のワード線を含み、第1段階の書き込み動作と第2段階の書き込み動作とを少なくとも含む複数段階の書き込み動作を実行することによって、一つのワード線に接続された複数のメモリセルに第1のサイズを有するデータを書き込むように構成された不揮発性メモリと、
NVM express規格によって規定されたホストメモリバッファにアクセス可能に構成され、前記不揮発性メモリに電気的に接続されたコントローラと、を具備し、
前記コントローラは、
前記ホストメモリバッファへの書き込みを、前記ホストメモリバッファを含むホストに許可し、
一つ以上のライト要求にそれぞれ関連付けられた一つ以上のライトデータを含み、且つ、前記第1のサイズを有する第1のライトデータを、前記ホストメモリバッファから取得し、前記一つ以上のライトデータのそれぞれは、前記コントローラが前記ホストに前記ホストメモリバッファへの書き込みを許可した後に、前記ホストにより前記ホストメモリバッファへ書き込まれ、
前記第1のライトデータを前記不揮発性メモリに転送し、第1のワード線に接続された複数のメモリセルに前記第1のライトデータを書き込むための前記第1段階の書き込み動作を前記不揮発性メモリに指示し、
前記第1のワード線に対する前記第2段階の書き込み動作が開始可能になった場合、
前記第1のライトデータを前記ホストメモリバッファから再び取得し、
前記第1のライトデータを前記不揮発性メモリに再び転送し、前記第1のワード線に接続された前記複数のメモリセルに前記第1のライトデータを再び書き込むための前記第2段階の書き込み動作を前記不揮発性メモリに指示するように構成されている
メモリシステム。
【請求項2】
前記コントローラは、
前記ホストメモリバッファ内の第1のテーブルに含まれる複数のリクエストフラグのうちの一つ以上のリクエストフラグが、前記ホストにより第1の値にセットされたことに応じて、前記一つ以上のライト要求を認識し、
前記第1のワード線に対する前記第2段階の書き込み動作が完了したことに応じ、前記一つ以上のリクエストフラグの各々を、対応するライトデータが格納されている前記ホストメモリバッファ内の領域が新たなライトデータの書き込みに利用可能であることを示す第2の値にリセットするように構成されている
請求項1に記載のメモリシステム。
【請求項3】
前記コントローラは、
前記ホストから通知される、前記ホストメモリバッファ内の前記第1のテーブルの位置を示すアドレスと前記第1のテーブルのサイズとに基づいて、前記ホストメモリバッファから前記複数のリクエストフラグを取得するように構成されている
請求項2に記載のメモリシステム。
【請求項4】
前記コントローラは、
前記ホストメモリバッファ内の第2のテーブルから、前記第1の値にセットされた前記一つ以上のリクエストフラグにそれぞれ関連付けられた前記一つ以上のライトデータが格納されている前記ホストメモリバッファ内の一つ以上の位置を示す一つ以上のアドレスと、前記一つ以上のライトデータのそれぞれのサイズを示す一つ以上のサイズ情報とを取得し、
前記取得した一つ以上のアドレスと前記取得した一つ以上のサイズ情報とに基づいて、前記一つ以上のライトデータを前記第1のライトデータとして前記ホストメモリバッファから取得するように構成されている
請求項2に記載のメモリシステム。
【請求項5】
前記第2のテーブルは、前記第1のテーブル内の前記複数のリクエストフラグにそれぞれ対応する複数のエントリを含み、
前記コントローラは、
前記第1の値にセットされた前記一つ以上のリクエストフラグにそれぞれ対応する前記第2のテーブル内の一つ以上のエントリから、前記一つ以上のアドレスと、前記一つ以上のサイズ情報とを取得するように構成されている
請求項4に記載のメモリシステム。
【請求項6】
前記第1のサイズは、前記複数のワード線の各々に接続されているメモリセルの数に、メモリセル当たりに格納されるビットの数を乗じることによって得られるサイズである
請求項1に記載のメモリシステム。
【請求項7】
前記第1段階の書き込み動作は、前記一つのワード線に接続された前記複数のメモリセルの各々の閾値電圧を目標の閾値電圧分布よりも粗く設定する書き込み動作であり、
前記第2段階の書き込み動作は、前記複数のメモリセルの各々の前記閾値電圧が前記目標の閾値電圧分布になるように前記複数のメモリセルの各々の前記閾値電圧を調整する書き込み動作である
請求項1に記載のメモリシステム。
【請求項8】
NVM express規格によって規定されたホストメモリバッファを含むホストと通信可能なメモリシステムを制御する制御方法であって、前記メモリシステムは複数のメモリセルが各々に接続されている複数のワード線を含む不揮発性メモリを含み、前記不揮発性メモリは、第1段階の書き込み動作と第2段階の書き込み動作とを少なくとも含む複数段階の書き込み動作を実行することによって、一つのワード線に接続された複数のメモリセルに第1のサイズを有するデータを書き込むように構成され、
前記ホストメモリバッファへの書き込みを前記ホストに許可することと、
前記第1のサイズを有し、且つ、一つ以上のライト要求にそれぞれ関連付けられた一つ以上のライトデータを含む第1のライトデータを、前記ホストメモリバッファから取得することと、
前記第1のライトデータを前記不揮発性メモリに転送することと、
第1のワード線に接続された複数のメモリセルに前記第1のライトデータを書き込むための前記第1段階の書き込み動作の実行を前記不揮発性メモリに指示することと、
前記第1のワード線に対する前記第2段階の書き込み動作が開始可能になった場合、
前記第1のライトデータを前記ホストメモリバッファから再び取得することと、
前記第1のライトデータを前記不揮発性メモリに再び転送することと、
前記第1のワード線に接続された前記複数のメモリセルに前記第1のライトデータを書き込むための前記第2段階の書き込み動作の実行を前記不揮発性メモリに指示することと、
を具備し、
前記一つ以上のライトデータのそれぞれは、前記ホストに前記ホストメモリバッファへの書き込みを許可した後に、前記ホストにより前記ホストメモリバッファへ書き込まれたものである
制御方法。
【請求項9】
前記ホストメモリバッファ内の第1のテーブルに含まれる複数のリクエストフラグのうちの一つ以上のリクエストフラグが、前記ホストにより第1の値にセットされたことに応じて、前記一つ以上のライト要求を認識することと、
前記第1のワード線に対する前記第2段階の書き込み動作が完了したことに応じ、前記一つ以上のリクエストフラグの各々を、対応するライトデータが格納されている前記ホストメモリバッファ内の領域が新たなライトデータの書き込みに利用可能であることを示す第2の値にリセットすることと、
をさらに具備する請求項8に記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NAND型フラッシュメモリを備えるソリッドステートドライブ(SSD)が知られている。
【0003】
メモリセル当たりに複数ビットを格納可能な不揮発性メモリにおいては、データを書き込むために複数段階の書き込み動作が行われる場合がある。
【0004】
この複数段階の書き込み動作が完了するまでの間、書き込まれるべきライトデータは、メモリシステム内のライトバッファに維持される必要がある。しかし、ライトデータをメモリシステム内のライトバッファに維持するという構成は、メモリシステムに設けることが必要なメモリリソースを増加させる要因となり得る。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2019-185596号公報
【特許文献2】特許第4829365号公報
【特許文献3】米国特許出願公開第2019/0146709号明細書
【発明の概要】
【発明が解決しようとする課題】
【0006】
本発明の一実施形態が解決しようとする課題は、必要なメモリリソースを低減することが可能なメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、メモリシステムは、不揮発性メモリと、NVM express規格によって規定されたホストメモリバッファにアクセス可能に構成され、前記不揮発性メモリに電気的に接続されたコントローラと、を具備する。前記不揮発性メモリは、複数のメモリセルが各々に接続されている複数のワード線を含み、第1段階の書き込み動作と第2段階の書き込み動作とを少なくとも含む複数段階の書き込み動作を実行することによって、一つのワード線に接続された複数のメモリセルに第1のサイズを有するデータを書き込むように構成されている。前記コントローラは、前記ホストメモリバッファへの書き込みを、前記ホストメモリバッファを含むホストに許可し、一つ以上のライト要求にそれぞれ関連付けられた一つ以上のライトデータを含み、且つ、前記第1のサイズを有する第1のライトデータを、前記ホストメモリバッファから取得する。前記一つ以上のライトデータのそれぞれは、前記コントローラが前記ホストに前記ホストメモリバッファへの書き込みを許可した後に、前記ホストにより前記ホストメモリバッファへ書き込まれたものである。前記コントローラは、前記第1のライトデータを前記不揮発性メモリに転送し、第1のワード線に接続された複数のメモリセルに前記第1のライトデータを書き込むための前記第1段階の書き込み動作を前記不揮発性メモリに指示する。前記第1のワード線に対する前記第2段階の書き込み動作が開始可能になった場合、前記コントローラは、前記第1のライトデータを前記ホストメモリバッファから再び取得する。前記コントローラは、前記第1のライトデータを前記不揮発性メモリに再び転送し、前記第1のワード線に接続された前記複数のメモリセルに前記第1のライトデータを再び書き込むための前記第2段階の書き込み動作を前記不揮発性メモリに指示する。
【図面の簡単な説明】
【0008】
【
図1】第1実施形態に係るメモリシステムを含む情報処理システムの構成例を示すブロック図。
【
図2】第1実施形態に係るフォギー・ファイン書き込み動作を説明するための図。
【
図3】第1実施形態に係るメモリシステムにおいて実行される書き込み制御動作について説明するための図。
【
図4】第2実施形態に係るメモリシステムにおいて実行される書き込み制御動作について説明するための図。
【
図5】第2実施形態に係るメモリシステムによって使用されるホストメモリバッファに、ホストによって配置されるリクエストフラグテーブルおよびアドレス/サイズテーブルの各々の構成例を示す図。
【
図6A】第2実施形態に係るメモリシステムおいて実行される書き込み制御動作の詳細について説明するための図。
【
図6B】第2実施形態に係るメモリシステムおいて実行される、ホストメモリバッファ内のリクエストフラグテーブルを更新する動作について説明するための図。
【
図7】第2実施形態に係るメモリシステムおよびホストにおいて実行される、ホストメモリバッファの初期化処理を示すシーケンス図。
【
図8】第2実施形態に係るメモリシステムにおいて実行されるフォギー・ファイン書き込み動作を示すシーケンス図。
【
図9】第2実施形態に係るメモリシステムおよびホストにおいて実行されるライトリクエスト処理の手順を示すフローチャート。
【
図10】第2実施形態に係るメモリシステムにおいて実行される、リクエストフラグテーブルのチェック処理の手順を示すフローチャート。
【
図11】第2実施形態に係るメモリシステムにおいて実行される、フォギー書き込み動作を制御するための書き込み制御動作の手順を示すフローチャート。
【
図12】第2実施形態に係るメモリシステムにおいて実行される、ファイン書き込み動作を制御するための書き込み制御動作の手順を示すフローチャート。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
(第1実施形態)
図1は、第1実施形態に係るメモリシステムを含む情報処理システム1の構成例を示すブロック図である。情報処理システム1は、ホスト(ホストデバイス)2と、SSD3とを含む。
【0010】
メモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。メモリシステムは、例えば、NAND型フラッシュメモリ5を含むSSD3として実現され得る。
【0011】
SSD3は、ホスト2にケーブルまたはネットワークを介して接続されてもよい。あるいは、SSD3は、ホスト2に内蔵されてもよい。ホスト2とSSD3とを接続するための論理インタフェースの規格としては、NVMeTM(NVM ExpressTM)規格が使用され得る。
【0012】
ホスト2は、SSD3を制御するように構成された情報処理装置である。ホスト2の例には、パーソナルコンピュータ、サーバコンピュータ、携帯端末、車載機器、が含まれる。
【0013】
ホスト2は、プロセッサ101と、メモリ102を含む。プロセッサ101は、ホスト2内の各コンポーネントの動作を制御するように構成されたCPU(Central Processing Unit)である。プロセッサ101は、ホスト2に接続される他のストレージデバイスまたはSSD3からメモリ102にロードされるソフトウェア(ホストソフトウェア)を実行する。ホストソフトウェアには、オペレーティングシステム、ファイルシステム、デバイスドライバ、アプリケーションプログラム等が含まれる。
【0014】
メモリ102は、ホスト2に設けられたメインメモリである。メモリ102は、ホストメモリとも称される。メモリ102は、例えば、DRAM(Dynamic Random Access Memory)のようなランダムアクセスメモリによって実現される。メモリ102の記憶領域の一部は、NVMe規格において規定されているホストメモリバッファ(HMB)32として使用することができる。以下では、便宜上、HMB32を除くメモリ102内の他の記憶領域のことをシステムメモリ31と称する。
【0015】
HMB32は、基本的には、SSD3に専用の記憶領域として使用される。つまり、HMB32は、基本的には、ホスト2がデータを書き込むことができない記憶領域である。これは、通常、ホスト2からは、HMB32の記憶領域のうち、SSD3によって使用されていない部分を特定できないためである。
【0016】
SSD3がホストメモリバッファを使用するための機能をサポートしている場合、ホスト2は、SSD3によって割り当てが要求されたホストメモリバッファのサイズに基づいて、メモリ102の記憶領域の一部をSSD3用のHMB32として割り当てる。
【0017】
ホスト2は、メモリ102のメモリ領域の一部をSSD3用のHMB32として割り当てると、実際に割り当てられたHMB32のサイズと、メモリ102内のHMB32の位置を示す開始アドレスとを含むセット・フィーチャーコマンドをSSD3に送信して、HMB32をイネーブルにする。HMB32がイネーブルされた後は、SSD3は、HMB32に対するライトアクセスおよびリードアクセスを実行することが可能となる。HMB32がディスエーブルされるまでは、ホスト2は、基本的には、HMB32への書き込みを行うことはできない。
【0018】
ホスト2は、HMB32をディスエーブルするセット・フィーチャーコマンドをSSD3に送信することにより、HMB32をディスエーブルすることができる。HMB32がディスエーブルされた後は、SSD3は、HMB32にアクセスすることができなくなる。このため、SSD3は、HMB32をディスエーブルするセット・フィーチャーコマンドに対するコマンド完了の応答をホスト2に返す前に、HMB32から必要なデータを取得する処理を行う。
【0019】
HMB32をディスエーブルするセット・フィーチャーコマンドに対するコマンド完了の応答をSSD3から受信すると、ホスト2は、HMB32の割り当てを解除する。HMB32として割り当てられていたメモリ102内の一部の記憶領域は、ホスト2が書き込み可能な記憶領域に戻される。
【0020】
メモリ102内のシステムメモリ31は、ホスト2が書き込み可能な記憶領域である。システムメモリ31の記憶領域は、例えば、プロセッサ101によって実行されるソフトウェアを格納するために使用される。また、システムメモリ31の記憶領域の一部は、一つ以上のサブミッションキューと、一つ以上のコンプリーションキューとを格納するためにも使用される。
【0021】
各サブミッションキューは、SSD3にコマンドを発行するために使用されるキューである。各コンプリーションキューは、完了したコマンドのステータスを示すコマンド完了をSSD3から受信するために使用されるキューである。ホスト2は、サブミッションキューを経由してSSD3に様々なコマンドを送信することができる。
【0022】
SSD3は、ホスト2との通信をNVMe規格に準拠して実行するように構成されている。
【0023】
このNVMe規格のインタフェースには、PCI expressTM(PCIeTM)バスを経由したインタフェース(NVMe over PCIe)と、イーサネットTMのようなネットワークを経由したインタフェース(NVMe over Fabrics:NVMe-oF)とが含まれる。SSD3が準拠するインタフェース規格は、NVMe over PCIeであってもよいし、NVMe-oFであってもよい。
【0024】
SSD3は、コントローラ4と、不揮発性メモリ(例えば、NAND型フラッシュメモリ5)とを備える。
【0025】
SSDにおいては、ランダムアクセスメモリ、例えば、DRAMが設けられている場合がある。SSDにおけるDRAMは、不揮発性メモリに書き込まれるべきライトデータを一時的に格納するためのライトバッファとして使用され得る。
【0026】
しかし、近年、SSDの小型化や、コストダウンを目的として、DRAMを持たないDRAMレスのSSDが開発されている。本実施形態に係るSSD3も、DRAMレスのSSDとして実現され得る。
【0027】
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
【0028】
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKx-1を含む。ブロックBLK0~BLKx-1の各々は、複数のページ(ここではページP0~Py-1)を含む。各ページは、同一ワード線に接続された複数のメモリセルを含む。ブロックBLK0~BLKx-1の各々は、データを消去するデータ消去動作の単位である。ページP0~Py-1の各々は、データ書き込み動作およびデータ読み出し動作の単位である。
【0029】
また、NAND型フラッシュメモリ5は、メモリセル当たりに複数ビットのデータが格納されるように構成されている。例えば、メモリセル当たりに4ビットのデータが格納されるクワドレベルセル-フラッシュメモリ(QLC-フラッシュメモリ)では、一つのワード線に接続された複数のメモリセルに、4ページ分のデータが書き込まれることになる。1ページ分のデータは、一つのワード線に接続されたメモリセルの数に相当するサイズを有している。
【0030】
同様に、メモリセル当たりに3ビットのデータが格納されるトリプルレベルセル-フラッシュメモリ(TLC-フラッシュメモリ)では、一つのワード線に接続された複数のメモリセルに3ページ分のデータが書き込まれる。メモリセル当たりに2ビットのデータが格納されるマルチレベルセル-フラッシュメモリ(MLC-フラッシュメモリ)では、一つのワード線に接続された複数のメモリセルに2ページ分のデータが書き込まれる。
【0031】
NAND型フラッシュメモリ5は、メモリセル当たりに2ビット以上のデータを格納可能である。NAND型フラッシュメモリ5は、MLC-フラッシュメモリ、TLC-フラッシュメモリ、QLC-フラッシュメモリ、あるいは、5ビット以上のデータを格納可能なフラッシュメモリとして実現され得る。以降、これに限定されないが、NAND型フラッシュメモリ5がQLC-フラッシュメモリとして実現されている場合について説明する。
【0032】
また、現代のNAND型フラッシュメモリにおいては、プログラムディスターブを削減するために、または各メモリセルの閾値電圧分布の精度を高めるために、書き込み動作を複数回に分けて実行する複数段階の書き込み動作が適用されるケースがある。この複数段階の書き込み動作は、少なくとも第1段階の書き込み動作と第2段階の書き込み動作とを含む。
【0033】
第1段階の書き込み動作では、複数ページ分のデータがNAND型フラッシュメモリに転送され、NAND型フラッシュメモリ内のあるブロック内の書き込み先ワード線に接続された複数のメモリセルに複数ページ分のデータが書き込まれる。第2段階の書き込み動作では、この複数ページ分のデータがNAND型フラッシュメモリに再び転送され、この書き込み先ワード線に接続された複数のメモリセルに再び書き込まれる。このように、同じデータを複数回転送することを伴う複数段階の書き込み動作の例としては、フォギー・ファイン書き込み動作が挙げられる。
【0034】
通常、フォギー・ファイン書き込み動作のような複数段階の書き込み動作では、ワード線間の干渉に起因するプログラムディスターブを削減するために、データ書き込み動作は複数のワード線を往復しながら実行される。
【0035】
例えば、2つのワード線を往復するフォギー・ファイン書き込み動作では、複数ページ分の第1のライトデータがNAND型フラッシュメモリに転送され、そして第1のライトデータが最初のワード線に接続された複数のメモリセルに書き込まれる(フォギー書き込み動作)。次に、複数ページ分の第2のライトデータがNAND型フラッシュメモリに転送され、そして第2のライトデータが次のワード線に接続された複数のメモリセルに書き込まれる(フォギー書き込み動作)。そして、書き込み対象のメモリセルが最初のワード線に接続された複数のメモリセルに戻され、複数ページ分の上述の第1のライトデータがNAND型フラッシュメモリに再び転送され、そしてこの第1のライトデータが最初のワード線に接続された複数のメモリセルに書き込まれる(ファイン書き込み動作)。
【0036】
ここで、フォギー書き込み動作は、書き込み対象の複数のメモリセルの各々の閾値電圧を、目的の閾値電圧分布の精度よりも低い(粗い)精度で設定する書き込み動作である。フォギー書き込み動作では、書き込み後に読み出しをしても正しくデータを読み出せないような粗さで、書き込み対象の複数のメモリセルの各々の閾値電圧が設定される。これにより、隣接するワード線への書き込みによって生じる各メモリセルの閾値電圧の変動を、粗く設定された閾値電圧分布に吸収させることができる。
【0037】
ファイン書き込み動作は、書き込み対象の複数のメモリセルの各々の閾値電圧が目的の閾値電圧分布の精度になるように、書き込み対象の複数のメモリセルの各々の閾値電圧を設定(調整)する書き込み動作である。
【0038】
NAND型フラッシュメモリ5への書き込みがフォギー・ファイン書き込み動作のような複数段階の書き込み動作によって行われる場合、SSD3のコントローラ4は、複数段階の書き込み動作が完了するまでの間、書き込まれるべきライトデータを維持しておくことが求められる。例えば、第1段階の書き込み動作(例えば、フォギー書き込み動作)と第2段階の書き込み動作(例えば、ファイン書き込み動作)とを含む複数段階の書き込み動作では、あるワード線に対する第1段階の書き込み動作においてNAND型フラッシュメモリ5に転送されたライトデータは、このワード線に対する第2段階の書き込み動作の完了まで維持しておく必要がある。
【0039】
NAND型フラッシュメモリ5がQLC-フラッシュメモリである場合、一つのワード線に書き込まれるライトデータのサイズ、つまり、NAND型フラッシュメモリ5の書き込みサイズは、4ページ分のサイズを有する。ページサイズが16KiBである場合、QLC-フラッシュメモリの一つのワード線に書き込まれるライトデータのサイズは64KiB(=4×16KiB)である。したがって、QLC-フラッシュメモリでは、64KiBのサイズを有するライトデータを、SSD3に維持しておくことが必要とされる。
【0040】
加えて、上述の複数段階の書き込み動作、例えば、二つのワード線を往復するフォギー・ファイン書き込み動作を想定すると、たとえ一つ目のワード線に対する第1のライトデータ(64KiB)のフォギー書き込み動作が終了しても、一つ目のワード線に対するファイン書き込み動作をすぐに開始することはできない。一つ目のワード線に対するファイン書き込み動作を実行する前に、一つ目のワード線に隣接する二つ目のワード線に対する第2のライトデータ(64KiB)のフォギー書き込み動作を実行する必要があるためである。これによって、SSD3は、第1のライトデータ(64KiB)に加えて第2のライトデータ(64KiB)も同時に維持しておくことが求められる。
【0041】
そのため、NAND型フラッシュメモリ5において一つのワード線に書き込まれるライトデータのサイズが増えるにつれて、さらに、複数段階の書き込み動作において往復されるワード線の数が増えるにつれて、SSD3に必要とされるメモリリソースの量は増大する。
【0042】
しかしながら、SSD3に大容量のDRAMをライトバッファとして設けると、SSD3のコストの増加、およびSSD3の大型化を招くことになる。
【0043】
そこで、第1実施形態に係るSSD3では、複数段階の書き込み動作を実行する際に、あるワード線に対する第1段階の書き込み動作(例えばフォギー書き込み動作)を実行するためにNAND型フラッシュメモリ5に転送したライトデータを、SSD3内に維持するのではなく、HMB32に退避する処理が実行される。これにより、SSD3内に大容量のDRAMをライトバッファとして設けることなく、QLC-フラッシュメモリに対する複数段階の書き込み動作を実行することが可能となる。
【0044】
コントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。コントローラ4の各部の機能は、専用ハードウェア、プログラム(ファームウェア)を実行するプロセッサ、又はこれらの組み合わせにより実現され得る。
【0045】
コントローラ4は、NAND型フラッシュメモリ5を制御することによって、ホスト2から受信したデータをNAND型フラッシュメモリ5に書き込むデータ書き込み動作と、ホスト2によって要求された読み出し対象データをNAND型フラッシュメモリ5から読み出すデータ読み出し動作とを制御する。
【0046】
コントローラ4は、NANDインタフェース(I/F)13を介して、NAND型フラッシュメモリ5に電気的に接続されている。NANDインタフェース13は、これに限定されないが、Toggle NANDフラッシュインタフェースまたはオープンNANDフラッシュインタフェース(ONFI)に準拠する。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。
【0047】
コントローラ4は、NAND型フラッシュメモリ5のデータ管理及びブロック管理を実行するように構成されたフラッシュトランスレーション層(FTL)として機能し得る。
【0048】
FTLによって実行されるデータ管理は、(1)論理アドレスそれぞれとNAND型フラッシュメモリ5の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、(2)NAND型フラッシュメモリ5の制約(例えば、ページ単位のリード/ライト動作とブロック単位の消去動作)を隠蔽するための処理、等が含まれる。ある論理アドレスに対応する物理アドレスは、この論理アドレスに対応するデータが書き込まれたNAND型フラッシュメモリ5内の物理的な記憶位置を示す。コントローラ4は、図示しない論理物理アドレス変換テーブル(logical―to―physical address translation table:L2Pテーブル)を使用して、論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係を管理する。論理アドレスとしては、論理ブロックアドレス(LBA)が使用され得る。
【0049】
コントローラ4は、上述したNANDインタフェース13の他、ホストインタフェース(I/F)11と、CPU12と、直接メモリアクセスコントローラ(DMAC)14と、SRAM(Static RAM)15と、ECC(Error Correction Code)エンコード/デコード部16とを含む。これらホストインタフェース11と、CPU12と、NANDインタフェース13と、DMAC14と、SRAM15と、ECCエンコード/デコード部16とは、バス10を介して相互接続される。
【0050】
ホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。ホストインタフェース11は、例えば、PCIeコントローラである。あるいは、SSD3がネットワークインタフェースコントローラを内蔵する構成である場合には、ホストインタフェース11は、ネットワークインタフェースコントローラの一部として実現されてもよい。
【0051】
ホストインタフェース11は、NVMe規格に準拠してホスト2との通信を実行する。ホストインタフェース11は、ライトコマンド、リードコマンド等の様々なコマンドをホスト2から受信する。ライトコマンドは、SSD3にデータ(ライトデータ)の書き込みを要求するコマンドである。ライトコマンドには、このライトデータが書き込まれるべき論理アドレス(開始LBA)と、このライトデータのサイズと、ライトデータが格納されているメモリ102(システムメモリ31)内のアドレスを示すデータポインタ(バッファアドレス)等が含まれる。リードコマンドには、読み出されるべきデータが書き込まれている開始LBAと、このデータのサイズとが含まれる。
【0052】
ホスト2は、各コマンドをサブミッションキューに格納する。完了したコマンドのステータスを示すコマンド完了は、コンプリーションキューに、ホストインタフェース11によって格納される。コマンドとコマンド完了とは、例えばコマンドで指定されたタグによって関連付けられる。
【0053】
つまり、コントローラ4は、ホストインタフェース11がサブミッションキューからコマンドをフェッチすることでホスト2からコマンドを受信し、ホストインタフェース11がコマンド完了をコンプリーションキューに格納することでホスト2にコマンド完了を通知する。
【0054】
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたNANDコントローラである。NAND型フラッシュメモリ5が複数のNAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)から構成されている場合、NANDインタフェース13は、複数のチャンネル(Ch)を介してこれらNAND型フラッシュメモリチップそれぞれと接続されていてもよい。
【0055】
SRAM15は、揮発性の記憶領域である。SRAM15の記憶領域は、CPU12のワークエリア等として使用され得る。
【0056】
DMAC14は、CPU12の制御の下、ホスト2のメモリ102とSRAM15との間のデータ転送を実行する。
【0057】
ECCエンコード/デコード部16は、NAND型フラッシュメモリ5にデータをライトすべき時、データ(書き込むべきデータ)をエンコードすることによってこのデータにエラー訂正コード(ECC)を冗長コードとして付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部16は、リードされたデータに付加されたECCを使用して、このデータのエラー訂正を行う。
【0058】
CPU12は、ホストインタフェース11と、NANDインタフェース13と、DMAC14と、SRAM15と、ECCエンコード/デコード部16とを制御するように構成されたプロセッサである。CPU12は、NAND型フラッシュメモリ5または図示しないROMに格納されている制御プログラム(ファームウェア)をSRAM15にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。
【0059】
CPU12は、ライト制御部21、およびリード制御部22として機能することができる。これらライト制御部21、およびリード制御部22の各々の一部または全部は、コントローラ4内の専用のハードウェアによって実現されてもよい。
【0060】
ライト制御部21は、ホスト2から受信されたライトコマンドに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込むための複数段階の書き込み動作の実行を制御する。ここで実行される複数段階の書き込み動作は、例えば、上述のフォギー・ファイン書き込み動作であってもよい。
【0061】
リード制御部22は、ホスト2から受信されたリードコマンドに含まれる論理アドレス(開始LBA)に対応する物理記憶位置に格納されているデータを読み出すことをNAND型フラッシュメモリ5に指示し、読み出したデータをホスト2に返すように構成されている。
【0062】
図2は、フォギー・ファイン書き込み動作を説明するための図である。
【0063】
ここでは、2つのワード線を往復する場合のフォギー・ファイン書き込み動作を例示する。ブロックBLK1に対するフォギー・ファイン書き込み動作は以下のように実行される。
【0064】
(1)まず、4ページ(P0~P3)分のライトデータがNAND型フラッシュメモリ5に転送され、ブロックBLK1内のワード線WL0に接続された複数のメモリセルに、これら4ページ分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0065】
(2)次に、次の4ページ(P4~P7)分のライトデータがNAND型フラッシュメモリ5に転送され、ブロックBLK1内のワード線WL1に接続された複数のメモリセルに、これら4ページ分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0066】
(3)ワード線WL1に接続された複数のメモリセルにライトデータを書き込むためのフォギー書き込み動作が完了すると、書き込み先のワード線はワード線WL0に戻り、ワード線WL0に接続された複数のメモリセルに再度ライトデータを書き込むためのファイン書き込み動作を実行することが可能な状態になる。そして、ワード線WL0に対するフォギー書き込み動作で使用された4ページ(P0~P3)分のライトデータと同じ4ページ分のライトデータがNAND型フラッシュメモリ5に再び転送され、ワード線WL0に接続された複数のメモリセルにこれら4ページ分のライトデータを再び書き込むためのファイン書き込み動作が実行される。これにより、ワード線WL0に対するフォギー・ファイン書き込み動作が完了する。この結果、ページP0~P3に対応するデータは、ブロックBLK1から正しく読み出されることが可能な状態になる。
【0067】
(4)次に、書き込み先のワード線はワード線WL2になる。次の4ページ(P8~P11)分のライトデータがNAND型フラッシュメモリ5に転送され、ブロックBLK1内のワード線WL2に接続された複数のメモリセルに、これら4ページ分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0068】
(5)ワード線WL2に接続された複数のメモリセルにライトデータを書き込むためのフォギー書き込み動作が完了すると、書き込み先のワード線はワード線WL1に戻り、ワード線WL1に接続された複数のメモリセルに再度ライトデータを書き込むためのファイン書き込み動作を実行することが可能な状態になる。そして、ワード線WL1に対するフォギー書き込み動作で使用された4ページ(P4~P7)分のライトデータと同じ4ページ分のライトデータがNAND型フラッシュメモリ5に再び転送され、ワード線WL1に接続された複数のメモリセルにこれら4ページ分のライトデータを再び書き込むためのファイン書き込み動作が実行される。これにより、ワード線WL1に対するフォギー・ファイン書き込み動作が完了する。この結果、ページP4~P7に対応するデータは、ブロックBLK1から正しく読み出されることが可能な状態になる。
【0069】
(6)次に、書き込み先のワード線はワード線WL3になる。次の4ページ(P12~P15)分のライトデータがNAND型フラッシュメモリ5に転送され、ブロックBLK1内のワード線WL3に接続された複数のメモリセルに、これら4ページ分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0070】
(7)ワード線WL3に接続された複数のメモリセルにライトデータを書き込むためのフォギー書き込み動作が完了すると、書き込み先のワード線はワード線WL2に戻り、ワード線WL2に接続された複数のメモリセルに再度ライトデータを書き込むためのファイン書き込み動作を実行することが可能な状態になる。そして、ワード線WL2に対するフォギー書き込み動作で使用された4ページ(P8~P11)分のライトデータと同じ4ページ分のライトデータがNAND型フラッシュメモリ5に再び転送され、ワード線WL2に接続された複数のメモリセルにこれら4ページ分のライトデータを再び書き込むためのファイン書き込み動作が実行される。これにより、ワード線WL2に対するフォギー・ファイン書き込み動作が完了する。この結果、ページP8~P11に対応するデータは、ブロックBLK1から正しく読み出されることが可能な状態になる。
【0071】
図3は、第1実施形態に係るSSD3において実行される書き込み制御動作について説明するための図である。
【0072】
まず、コントローラ4は、ホスト2から一つ以上のライトコマンドを受信する。書き込まれるべきライトデータのサイズの合計がNAND型フラッシュメモリ5の書き込みサイズに達すると、コントローラ4は、システムメモリ31からライトデータを読み出す(NVMe/MRd)。ここで、書き込みサイズは、1つのワード線に接続された複数のメモリセルに格納可能なデータサイズである。そのため、書き込みサイズは、ページサイズに、各メモリセルが格納可能なビット数を乗じることで得られるデータサイズと等しい。言い換えれば、書き込みサイズは、ワード線に接続されているメモリセルの数に各メモリセルが格納可能なビット数を乗じることで得られるデータサイズと等しい。
【0073】
その後、コントローラ4は、システムメモリ31から読み出されたライトデータをNAND型フラッシュメモリ5に転送し、書き込み先のワード線に接続された複数のメモリセルにこのライトデータを書き込むためのフォギー書き込み動作の実行をNAND型フラッシュメモリ5に指示する(Foggy)。その後、コントローラ4は、ホスト2のコンプリーションキューに、このライトデータに対応する一つ以上のライトコマンドの各々に対応するコマンド完了を格納する。コマンド完了をコントローラ4から受信したホスト2は、このコマンド完了に対応するライトコマンドに関連付けられているライトデータが格納されているシステムメモリ31内の記憶領域を他のライトデータの書き込みのために再利用することが可能となる。サブミッションキューを通じてSSD3に発行されるコマンドにはタイムリミットが設けられていることがあるため、コントローラ4は、フォギー書き込み動作が完了したことに応じて(すなわち、ファイン書き込み動作の完了を待たずに)コマンド完了をホスト2に送信する。
【0074】
SSD3は、DRAMなどのライトバッファを持たないため、フォギー書き込み動作で使用したライトデータを、書き込み先のワード線に対するファイン書き込み動作の開始まで維持しておくことができない。そのため、コントローラ4は、システムメモリ31から読み出したライトデータと同じデータをHMB32に書き込む(HMB/MWr)。このように、コントローラ4がHMB32にライトデータを退避するのは、ホスト2によって意図せずこのライトデータが更新されてしまうことを防ぐためである。ホスト2は基本的にはHMB32に対する書き込みを行わないので、HMB32にライトデータを退避することにより、意図せずこのライトデータが更新されてしまうことを防ぐことができる。
【0075】
しばらくして、フォギー書き込み動作が行われた書き込み先のワード線に対するファイン書き込み動作が可能になると、コントローラ4は、HMB32に書き込んだライトデータを再びHMB32から読み出す(HMB/MRd)。
【0076】
その後、コントローラ4は、HMB32から読み出したデータをNAND型フラッシュメモリ5に再度転送し、書き込み先のワード線に接続された複数のメモリセルにこのライトデータを再び書き込むためのファイン書き込み動作の実行をNAND型フラッシュメモリ5に指示する(Fine)。
【0077】
このように、第1実施形態では、SSD3の内部にライトバッファを持たない構成であっても、HMB32を使用することで、QLC-フラッシュメモリに対する複数段階の書き込み動作を実行することができる。
【0078】
(第2実施形態)
次に、第2実施形態について説明する。第2実施形態に係るSSD3は、ホスト2のメモリ102とSSD3との間で同じライトデータを転送することが必要とされる回数を低減できるように構成されている。第2実施形態に係るSSD3のハードウェア構成は、
図1に示した第1実施形態に係るSSD3の構成と同様である。第2実施形態では、ホスト2からSSD3に対して、第1実施形態で使用されたライトコマンドに代わって、リクエストフラグを使用することによってライト要求を通知する。第2実施形態では、
図1で説明したライト制御部21は、ホスト2からのライトコマンドに基づいて書き込み動作を制御するのではなく、ホスト2によってHMB32にセットされる各リクエストフラグに基づいてデータ書き込み動作を制御する。
【0079】
さらに、第2実施形態では、ライトデータは、システムメモリ31ではなく、HMB32にホスト2によって格納される。よって、ライト制御部21は、第1段階の書き込み動作の実行のためにHMB32からライトデータを取得する。第1段階の書き込み動作が完了しても、ライト制御部21は、このライトデータをHMB32に退避する必要は無い。第1段階の書き込み動作が行われたワード線に対する第2段階の書き込み動作が可能になると、ライト制御部21は、このワード線に対する第1段階の書き込み動作で使用したライトデータをHMB32から再び取得する。
【0080】
なお、
図1で説明したリード制御部22は、第1実施形態と同様に、ホスト2からのリードコマンドに基づいてデータ読み出し動作を制御する。
【0081】
第2実施形態に係るSSD3においては、コントローラ4がホストメモリバッファを使用するための機能をサポートしているか否かを確認するためのコマンド(identyfy コマンド)をホスト2から受信すると、コントローラ4は、ホストメモリバッファを使用するための機能をサポートしていることと、ホスト2にHMB32へのデータの書き込みを許可することと、をホスト2に通知する。
【0082】
ホスト2は、ホスト2がHMB32にデータを書き込むことをSSD3が許可している場合、ライトデータを、システムメモリ31ではなく、HMB32に格納する。さらに、ホスト2は、リクエストフラグをHMB32にセットすることによってライト要求をSSD3に通知する。このように、第2実施形態に係るSSD3においては、HMB32はSSD3に専用の記憶領域ではなく、ホスト2による書き込みが許可された記憶領域として使用される。リクエストフラグの詳細については
図5を参照して後述する。
【0083】
図4は、第2実施形態に係るSSD3において実行される書き込み制御動作について説明するための図である。
【0084】
まず、各々がリクエストフラグによって指定される一つ以上のライト要求に関連付けられた一つ以上のライトデータのサイズの合計がNAND型フラッシュメモリ5の書き込みサイズ(4ページ分のサイズ)に達すると、コントローラ4は、HMB32からこれら一つ以上のライトデータを読み出す(HMB/MRd)。そして、コントローラ4は、読み出した一つ以上のライトデータを含む、4ページ分のサイズを有するライトデータを、NAND型フラッシュメモリ5に転送し、書き込み対象のワード線に接続された複数のメモリセルにこの4ページ分のサイズを有するライトデータを書き込むためのフォギー書き込み動作の実行をNAND型フラッシュメモリ5に指示する。
【0085】
このワード線に対するファイン書き込み動作が可能になると、コントローラ4は、このワード線に対するフォギー書き込み動作で使用したライトデータと同じライトデータを再びHMB32から読み出す(HMB/MRd)。
【0086】
その後、コントローラ4は、HMB32から読み出したライトデータをNAND型フラッシュメモリ5に再度転送し、このワード線に接続された複数のメモリセルにこのライトデータを再び書き込むためのファイン書き込み動作の実行をNAND型フラッシュメモリ5に指示する。
【0087】
このように、第2実施形態では、ライトデータをホスト2のHMB32に退避する動作を必要としない。そのため、第1実施形態と比較して、ホスト2とSSD3との間で同じライトデータが送受信される回数を減らすことが出来る。
【0088】
よって、ホスト2とSSD3との間のライトデータの転送のために消費されるホスト2とSSD3との間のバス帯域を、第1実施形態と比べて削減すること可能となる。これにより、消費されるバス帯域の増加に伴って生じるSSD3の消費電力の増大およびSSD3のパフォーマンスの低下を防ぐことができる。
【0089】
図5は、ホスト2によってHMB32に配置されるリクエストフラグテーブルおよびアドレス/サイズテーブルの各々の構成例を示す図である。
【0090】
ホスト2は、コントローラ4がホストメモリバッファを使用するための機能をサポートしているか否かの確認するためのコマンド(identyfy コマンド)をSSD3に送信して、コントローラ4がホストメモリバッファを使用するための機能をサポートしているか否か、およびHMB32にデータを書き込むことがSSD3によって許可されていることを確認する。コントローラ4がホストメモリバッファを使用するための機能をサポートしており、且つ、HMB32にデータを書き込むことがSSD3によって許可されている場合、ホスト2は、メモリ102の一部をHMB32として割り当て、さらに、
図5に示すように、このHMB32に、リクエストフラグテーブル41と、アドレス/サイズテーブル42とを配置する。
【0091】
リクエストフラグテーブル41は、ホスト2からSSD3への各ライトコマンドの発行およびSSD3からホスト2へのコマンド完了の通知と同様のメカニズムを、HMB32を使用して実現するために使用される。
【0092】
リクエストフラグテーブル41は、複数のリクエストフラグを含む。リクエストフラグテーブル41は、例えば32個のリクエストフラグを含む。複数のリクエストフラグの各々は、第1の値または第2の値のいずれか一方に設定される。以下では、第1の値が「1」であり、第2の値が「0」である場合を例示する。
【0093】
複数のリクエストフラグの各々は「1」あるいは「0」を表す1ビットで構成されている。第1の値(「1」)にセットされたリクエストフラグは、SSD3に対してデータの書き込みを要求するライト要求として使用される。つまり、「1」を示すリクエストフラグは、SSD3に対してデータの書き込みを要求する。
【0094】
第2の値(「0」)にセットされたリクエストフラグは、このリクエストフラグによって指定されたライト要求の処理が完了したことを示す。つまり、「0」を示すリクエストフラグは、このリクエストフラグによって指定されたライト要求に関連付けられたライトデータが格納されているHMB32内の領域が、新たなライトデータの書き込みに利用可能であることを示す。
【0095】
複数のリクエストフラグの各々を「1」にセットする動作はホスト2によって実行される。「1」の状態のリクエストフラグは、ライト要求が生成されている状態(req)であることを表す。複数のリクエストフラグの各々を「0」にリセットする動作はコントローラ4によって実行される。「0」の状態のリクエストフラグは、ライト要求が完了している状態(cmp)であることを表す。なお、各リクエストフラグの初期値は「0」である。
【0096】
図5では、リクエストフラグテーブル41が、32個のリクエストフラグf1~f32に対応する32ビットのビット長を有するビットマップデータを含む場合が例示されている。ホスト2は、リクエストフラグテーブル41のリクエストフラグf1~f32を使用することによって、同時に32個のライト要求をSSD3に通知することができる。
【0097】
アドレス/サイズテーブル42は、32個のリクエストフラグf1~f32と一対一で対応する32個のエントリを含む。アドレス/サイズテーブル42が配置されているHMB32内の領域は、リクエストフラグテーブル41が配置されているHMB32内の領域と連続していてもよい。
【0098】
図5では、リクエストフラグテーブル41が配置されているHMB32内の位置を示すアドレス(開始アドレス)は、「テーブルアドレス」として表されている。「テーブルアドレス」にリクエストフラグテーブル41のサイズを加えることによって、HMB32内のアドレス/サイズテーブル42の位置を示すアドレスが得られる。アドレス/サイズテーブル42内の32個のエントリは互いに同じサイズを有している。
【0099】
アドレス/サイズテーブル42に含まれる32個のエントリの各々は、このエントリに対応するリクエストフラグによって指定されるライト要求に関連付けられたライトデータが格納されているHMB32内のアドレスと、このライトデータのサイズを示すサイズ情報とを格納するために使用される。
【0100】
32個のエントリの各々は、このエントリに対応するリクエストフラグによって指定されるライト要求に含まれる他のパラメータを示す情報(+α)を格納するためにも使用され得る。情報(+α)の例としては、ライトデータが書き込まれるべきSSD3の論理アドレス空間内の最初の論理アドレス(開始LBA)が挙げられる。
【0101】
リクエストフラグテーブル41と、アドレス/サイズテーブル42とをHMB32に配置した後に、ホスト2は、リクエストフラグテーブル41内の32個のリクエストフラグf1~f32の各々を、初期値(「0」)にリセットする。リクエストフラグf1~f32の全てが「0」であることは、SSD3への書き込みが完了していないライトデータがHMB32に存在しないことを示す。
【0102】
したがって、リクエストフラグf1~f32の全てが「0」である状態は、リクエストフラグテーブル41およびアドレス/サイズテーブル42以外のHMB32内の任意の領域に、ホスト2が、SSD3に書き込むべきデータ(ライトデータ)を書き込むことが可能な状態であることを示す。
【0103】
リクエストフラグテーブル41内の32個のリクエストフラグf1~f32の各々を「0」にリセットした後、ホスト2は、リクエストフラグテーブル41が配置されているHMB32内の位置を示すアドレス(テーブルアドレス)と、リクエストフラグテーブル41のサイズとをSSD3に通知する。SSD3は、リクエストフラグテーブル41のアドレスとリクエストフラグテーブル41のサイズとが知らされることで、リクエストフラグテーブル41と、このリクエストフラグテーブル41に後続するアドレス/サイズテーブル42とにアクセスすることが可能になる。
【0104】
つまり、SSD3のコントローラ4は、リクエストフラグテーブル41のアドレスとリクエストフラグテーブル41のサイズとに基づいてHMB32にリードアクセスすることで、32個のリクエストフラグf1~f32をHMB32から取得することができる。
【0105】
また、コントローラ4は、リクエストフラグテーブル41のアドレスおよびサイズから、HMB32内のアドレス/サイズテーブル42の位置を示すアドレス、およびアドレス/サイズテーブル42内の個々のエントリのアドレスを特定できる。よって、コントローラ4は、「1」にセットされたリクエストフラグに関連付けられたライトデータが格納されているHMB32内の位置を示すアドレスと、このライトデータのサイズを示すサイズ情報とを、アドレス/サイズテーブル42から取得することができる。
【0106】
「1」にセットされたリクエストフラグに関連付けられたライトデータをNAND型フラッシュメモリ5に書き込む動作(フォギー書き込み動作とファイン書き込み動作の双方)が完了すると、コントローラ4は、このリクエストフラグを「0」にリセットする。
【0107】
さらに、ホスト2も同様に、これらリクエストフラグテーブル41と、アドレス/サイズテーブル42とを参照することで、HMB32におけるいずれの記憶領域のそれぞれがライトデータの格納のために使用中であるか、あるいは新たなライトデータの格納に利用可能であるかを判別することができる。つまり、ホスト2は、リクエストフラグテーブル41と、アドレス/サイズテーブル42とを参照することで、新たなライトデータの書き込みに利用可能なHMB32内の領域(フリー領域)を特定することができる。
【0108】
このように、第2実施形態では、第1実施形態と異なり、ホスト2もリクエストフラグテーブル41およびアドレス/サイズテーブル42を参照することで、データの書き込みに利用可能なHMB32内の個々の領域を特定することができる。そのため、ホスト2は、SSD3に書き込むべきライトデータをHMB32に配置することができる。
【0109】
ホスト2は、NAND型フラッシュメモリ5へのライトデータの書き込みを要求するライト要求を発行するために、まず、ライト要求に関連付けられたライトデータをHMB32に格納する。
【0110】
そして、ホスト2は、ライトデータが格納されたHMB32内の位置を示すアドレスと、ライトデータのデータサイズとを、cmpを示す状態にセットされているリクエストフラグ(「0」にセットされているリクエストフラグ)から選択された任意のリクエストフラグに対応するアドレス/サイズテーブル42内のエントリに格納する。その後、ホスト2は、選択したリクエストフラグを、reqを示す状態にセットする。すなわち、ホスト2は、そのリクエストフラグを「1」にセットする。
【0111】
例えば、あるライト要求に関連付けられているライトデータD1がHMB32内のアドレス0xXXXXにホスト2によって書き込まれた場合、cmpを示す状態にセットされているあるリクエストフラグ(ここでは、リクエストフラグf1)に対応するアドレス/サイズテーブル42のエントリ(ここでは、エントリ1)には、アドレス0xXXXXと、ライトデータD1のサイズJを示すサイズ情報とがホスト2によって書き込まれる。そして、リクエストフラグf1がホスト2によってreqを示す状態にセットされる。
【0112】
また、あるライト要求に関連付けられているライトデータD2がHMB32内のアドレス0xYYYYにホスト2によって書き込まれた場合、「0」(cmp)を示す状態にセットされているあるリクエストフラグ(ここでは、リクエストフラグf2)に対応するアドレス/サイズテーブル42のエントリ(ここでは、エントリ2)には、アドレス0xYYYYと、ライトデータD2のサイズKを示すサイズ情報とがホスト2によって書き込まれる。そして、リクエストフラグf2がホスト2によってreqを示す状態にセットされる。
【0113】
また、あるライト要求に関連付けられているライトデータD32がHMB32内のアドレス0xZZZZにホスト2によって書き込まれた場合、cmpを示す状態にセットされているあるリクエストフラグ(ここでは、リクエストフラグf32)に対応するアドレス/サイズテーブル42のエントリ(ここでは、エントリ32)には、アドレス0xZZZZと、ライトデータD32のサイズLを示すサイズ情報とがホスト2によって書き込まれる。そして、リクエストフラグf32がホスト2によってreqを示す状態にセットされる。
【0114】
コントローラ4は、リクエストフラグテーブル41を参照することでリクエストフラグそれぞれの状態を判定する。コントローラ4は、一つ以上のリクエストフラグがreqを示す状態にセットされたことに応じて、ホスト2によってライト要求が生成されていることを検知する。reqを示す一つ以上のリクエストフラグに関連付けられたライトデータの書き込み(フォギー書き込み動作とファイン書き込み動作の双方)が完了すると、コントローラ4は、このリクエストフラグをcmpを示す状態に設定する。これにより、コントローラ4は、リクエストフラグをリセットする。
【0115】
次に、第2実施形態に係るSSD3において実行される複数段階の書き込み動作の詳細について説明する。
【0116】
図6Aは、第2実施形態に係るSSD3において実行される書き込み制御動作の詳細について説明するための図である。
【0117】
まず、ホスト2は、リクエストフラグf1に対応するライト要求req1に関連付けられたライトデータ,リクエストフラグf2に対応するライト要求req2に関連付けられたライトデータ、およびリクエストフラグf11に対応するライト要求req11に関連付けられたライトデータをHMB32に格納し、アドレス/サイズテーブル42内の3つのエントリにこれら3つのライトデータのアドレス、およびサイズ情報などを格納する(set addr/size/data)。
【0118】
エントリ1には、リクエストフラグf1に対応するライト要求req1に関連付けられたライトデータが格納されているHMB32内のアドレス(0xAAAA)と、そのライトデータのサイズ(32KiB)を示すサイズ情報とが格納されている。エントリ2には、リクエストフラグf2に対応するライト要求req2に関連付けられたライトデータが格納されているHMB32内のアドレス(0xBBBB)と、そのライトデータのサイズ(16KiB)を示すサイズ情報とが格納されている。エントリ11には、リクエストフラグf11に対応するライト要求req11に関連付けられたライトデータが格納されているHMB32内のアドレス(0xCCCC)と、そのライトデータのサイズ(16KiB)を示すサイズ情報とが格納されている。
【0119】
そして、ホスト2は、ライト要求req1、ライト要求req2、ライト要求req11が生成されたことをコントローラ4に通知するために、リクエストフラグf1,リクエストフラグf2、およびリクエストフラグf11のそれぞれを、reqを示す状態(「1」)に設定する(set req)。
【0120】
コントローラ4は、リクエストフラグテーブル41を参照し、reqにセットされているリクエストフラグが存在するか否かを確認する(check flag)。そして、コントローラ4は、reqにセットされているリクエストフラグのそれぞれに対応するアドレス/サイズテーブル42のエントリのそれぞれを参照することで、そのリクエストフラグに対応するライトデータが格納されているHMB32内のアドレスおよびこのライトデータのサイズ情報等を取得する(get addr/size)。これらの動作(check flag、get addr/size)では、コントローラ4は、HMB32から各テーブルの情報を読み出す(HMB/MRd1)。
【0121】
ここでは、リクエストフラグf1、リクエストフラグf2、およびリクエストフラグf11のそれぞれが、reqを示す状態にセットされているので、コントローラ4は、エントリ1、エントリ2、およびエントリ11のそれぞれに格納されている情報をHMB32から取得する。
【0122】
ここで、NAND型フラッシュメモリ5の書き込みサイズが64KiBである場合を想定する。コントローラ4は、アドレス/サイズテーブル42から取得した各ライトデータのサイズ情報から、これらライトデータのサイズの合計が64KiB以上であるか否かを判定する。リクエストフラグf1、リクエストフラグf2、およびリクエストフラグf11に対応する3つのライトデータのサイズの合計は64KiBであるので、コントローラ4は、HMB32から、これらライトデータを読み出す(read write data、HMB/MRd2)。そして、コントローラ4は、読み出したライトデータをNAND型フラッシュメモリ5へ転送し、書き込み先である第1のワード線に接続された複数のメモリセルにこれらライトデータを書き込むためのフォギー書き込み動作の実行をNAND型フラッシュメモリ5に指示する(Foggy)。
【0123】
フォギー書き込み動作が完了しても、コントローラ4は、リクエストフラグf1,リクエストフラグf2、およびリクエストフラグf11の各々をreq(「1」)に維持するために、リクエストフラグテーブル41の更新は実行しない。
【0124】
しばらくして、第1のワード線に対するファイン書き込み動作が実行可能になると、コントローラ4は、HMB32からこのライトデータを再び読み出す(read write data、HMB/MRd3)。ここで、第1のワード線に隣接する第2のワード線に対するフォギー書き込み動作が完了したことに応じて、コントローラ4は、第1のワード線に対するファイン書き込み動作が実行可能になったことを判定してもよい。また、このとき読み出されるライトデータは、先の第1のワード線に対するフォギー書き込み動作のために読み出されたライトデータと同じデータである。
【0125】
そして、コントローラ4は、HMB32から読み出したライトデータをNAND型フラッシュメモリ5へ転送し、第1のワード線に接続された複数のメモリセルにこのライトデータを再び書き込むためのファイン書き込み動作の実行をNAND型フラッシュメモリ5に指示する(Fine)。
【0126】
ファイン書き込み動作が完了すると、コントローラ4は、書き込みが完了したライト要求に対応するリクエストフラグを「0」にリセットし、cmpを示す状態にする(HMB/MWr、set cmp)。具体的には、コントローラ4は、リクエストフラグf1、リクエストフラグf2、およびリクエストフラグf11の各々を、cmpを示す状態(「0」)にすることで、これらのリクエストフラグの各々を初期状態にリセットする。
【0127】
図6Bは、第2実施形態に係るSSD3おいて実行される、ホストメモリバッファ32内のリクエストフラグテーブル41を更新する動作について説明するための図である。
【0128】
コントローラ4は、リクエストフラグテーブル41にライトアクセスすることで、リクエストフラグf1、リクエストフラグf2、およびリクエストフラグf11のそれぞれを、cmpを示す状態にリセットする。
【0129】
リクエストフラグf1、リクエストフラグf2、およびリクエストフラグf11のそれぞれがcmpを示す状態にリセットされると、これらリクエストフラグの各々に関連付けられたライトデータが格納されているHMB32内の領域は新たなライトデータを格納可能なフリー領域となる。
【0130】
図7は、第2実施形態に係るSSD3およびホスト2において実行される、ホストメモリバッファの初期化処理を示すシーケンス図である。
【0131】
まず、ホスト2は、SSD3に対してidentifyコマンドを送信して、ホストメモリバッファを使用するための機能をSSD3がサポートしているか否かを確認する(ステップS101)。
【0132】
identifyコマンドをホスト2から受信すると、SSD3のコントローラ4は、ホストメモリバッファを使用するための機能をSSD3がサポートしていることと、作成されるべきHMB32のサイズと、ホスト2がHMB32にデータを書き込むことが可能であること(書き込み許可)とを、ホスト2に通知する(ステップS102)。ホスト2にHMB32へのデータの書き込みを許可することを示す情報は、ホスト2が読み出し可能なコントローラ4内の特定のレジスタに格納され得る。ホスト2は、このレジスタからこの情報をリードすることによって、HMB32へのデータの書き込みが許可されているか否かを判定することができる。
【0133】
ステップS102でSSD3から上述の通知を受信すると、ホスト2は、SSD3が使用可能な記憶領域であるHMB32として、メモリ102の記憶領域の一部を割り当てる(ステップS103)。ここで、割り当てられるHMB32のサイズは、ステップS102においてSSD3によって指定されたサイズに基づいて決定される。
【0134】
さらに、HMB32への書き込み許可を受信していた場合、ホスト2は、HMB32上にリクエストフラグテーブル41と、アドレス/サイズテーブル42とを配置し、リクエストフラグテーブル41内の複数のリクエストフラグそれぞれを初期状態である「0」、すなわちcmpを示す状態にリセットする(ステップS104)。
【0135】
ホスト2は、メモリ102内のHMB32の位置を示す開始アドレスと、HMB32のサイズと、HMB32内のリクエストフラグテーブル41の位置を示す開始アドレスと、リクエストフラグテーブル41のサイズとをSSD3に通知する(ステップS105)。SSD3は、通知されたリクエストフラグテーブル41のサイズから、リクエストフラグテーブル41によって管理されているリクエストフラグの数を認識する。
【0136】
図8は、第2実施形態に係るSSD3において実行されるフォギー・ファイン書き込み動作を示すシーケンス図である。
【0137】
まず、ホスト2は、ライト要求を生成するためのライトリクエスト処理を実行する(ステップS201)。ホスト2は、生成すべきライト要求に関連付けられたライトデータをHMB32に格納し、そのライトデータが格納されているHMB32内の位置を示すアドレスと、そのライトデータのサイズとをアドレス/サイズテーブル42のエントリに格納する(set addr/size/data)。そして、ホスト2は、ライト要求に対応するリクエストフラグを「1」、すなわちreqを示す状態にセットする(set req)。
【0138】
SSD3のコントローラ4は、HMB32からリクエストフラグテーブル41をリードし、リクエストフラグそれぞれの状態をチェックする(ステップS202)。コントローラ4がリクエストフラグテーブル41をチェックする動作は、周期的に実行されてもよいし、あるいは、チェックするタイミングを決定するためのアルゴリズムが用意されていてもよい。あるいは、ホスト2が一つ以上のリクエストフラグを新たに「1」にセットした場合に、ホスト2が、新たなライト要求がリクエストフラグテーブル41に設定されたことを示す情報をコントローラ4内の特定のレジスタに格納してもよい。この情報がこの特定のレジスタに格納されたことに応じて、コントローラ4がリクエストフラグテーブル41をチェックする動作を実行してもよい。
【0139】
コントローラ4は、reqを示すリクエストフラグが存在する場合、そのリクエストフラグに対応するアドレス/サイズテーブル42のエントリを参照することで、そのリクエストフラグに対応するライトデータの情報を取得する。
【0140】
さらに、reqを示す一つ以上のリクエストフラグに関連付けられた一つ以上のライトデータのサイズの合計がNAND型フラッシュメモリ5の書き込みサイズ(64KiB)以上になると、SSD3のコントローラ4は、64KiBのサイズを有するライトデータをHMB32から取得し、取得したライトデータをNAND型フラッシュメモリ5へ転送し、書き込み先のあるワード線に接続された複数のメモリセルにライトデータを書き込むためのフォギー書き込み動作の実行をNAND型フラッシュメモリ5に指示する(ステップS203)。
【0141】
しばらくして、ステップS203でフォギー書き込みが実行されたあるワード線に対するファイン書き込み動作が実行可能になると、SSD3のコントローラ4は、HMB32からこのライトデータを取得し、NAND型フラッシュメモリ5へライトデータを再び転送し、フォギー書き込みが実行されたこのワード線に接続されている複数のメモリセルにこのライトデータを再び書き込むためのファイン書き込み動作の実行をNAND型フラッシュメモリ5に指示する(ステップS204)。
【0142】
SSD3のコントローラ4は、ファイン書き込み動作が完了したライト要求の各々に関連付けられているリクエストフラグを「0」、すなわちcmpを示す状態にリセットする(ステップS205)。
【0143】
ホスト2は、あるリクエストフラグがリセットされると、そのリクエストフラグに関連付けられていたライトデータが格納されていたHMB32上の記憶領域を新たなライトデータの格納のために再利用する(ステップS206)。
【0144】
図9は、第2実施形態に係るSSD3およびホスト2において実行される、ライトリクエスト処理の手順を示すフローチャートである。
【0145】
ホスト2は、リクエストフラグテーブル41と、アドレス/サイズテーブル42とを参照することで、HMB32内のフリー領域それぞれを特定し、ライトデータをHMB32内のあるフリー領域に格納する(ステップS301)。
【0146】
そして、ホスト2は、リセットされているリクエストフラグのうちの一つのリクエストフラグを選択し、ライトデータが格納されたHMB32内の位置を示す開始アドレスと、このライトデータのサイズ情報とを、選択したリクエストフラグに対応するアドレス/サイズテーブル42内のエントリに格納する(ステップS302)。ホスト2は、開始アドレスと、サイズ情報とに加え、ライトデータが書き込まれるべきSSD3の論理アドレス空間内の最初の論理アドレス(開始LBA)などを、選択したリクエストフラグに対応するアドレス/サイズテーブル42内のエントリに格納してもよい。
【0147】
そして、ホスト2は、選択したリクエストフラグを「1」にセットする(ステップS303)。「1」にセットされたリクエストフラグは、reqを示す。
【0148】
図10は、第2実施形態に係るSSD3において実行される、リクエストフラグテーブル41のチェック処理の手順を示すフローチャートである。
【0149】
コントローラ4は、リクエストフラグのチェックを実行する(ステップS401)。コントローラ4は、HMB32にアクセスし、リクエストフラグテーブル41を参照する。コントローラ4は、リクエストフラグテーブル41から取得したビットマップデータ(複数のリクエストフラグ)から各リクエストフラグが示す状態をチェックする。
【0150】
コントローラ4は、「1」にセットされているリクエストフラグが存在するか否かを判定する(ステップS402)。つまり、コントローラ4は、ステップS401で取得したリクエストフラグテーブル41の情報から、リクエストフラグの中にreqを示すリクエストフラグが存在するか否かを判定する。
【0151】
「1」にセットされているリクエストフラグが存在している場合(ステップS402でYes)、コントローラ4は、「1」にセットされているリクエストフラグ毎に、そのリクエストフラグに対応するライトデータのアドレスおよびサイズ情報を、アドレス/サイズテーブル42のエントリから取得する(ステップS403)。
【0152】
「1」にセットされているリクエストフラグが存在していない場合(ステップS402でNo)、コントローラ4は、リクエストフラグのチェックを終了する。
【0153】
図11は、第2実施形態に係るSSD3において実行される、フォギー書き込み動作を制御するための書き込み制御動作の手順を示すフローチャートである。
【0154】
コントローラ4は、「1」にセットされた一つ以上のリクエストフラグのそれぞれに対応するライトデータのサイズの合計が書き込みサイズに達しているか否かを判定する(ステップS501)。コントローラ4は、アドレス/サイズテーブル42から取得した各ライトデータのサイズ情報に基づいて、ライトデータのサイズの合計を取得する。そして、コントローラ4は、フォギー書き込み動作が実行可能となる書き込みサイズにライトデータのサイズの合計が達しているか否かを判定する。
【0155】
ライトデータのサイズの合計が書き込みサイズに達していた場合(ステップS501でYes)、コントローラ4は、これらライトデータをHMB32から読み出す(ステップS502)。コントローラ4は、ライトデータが格納されている記憶領域を示すアドレスおよびサイズ情報をアドレス/サイズテーブル42からあらかじめ取得していてもよい。
【0156】
コントローラ4は、ライトデータをNAND型フラッシュメモリ5に転送し、NAND型フラッシュメモリ5にフォギー書き込み動作の実行を指示する(ステップS503)。ここで、コントローラ4は、書き込み先の第1のワード線を指定して、NAND型フラッシュメモリ5にフォギー書き込み動作の実行を指示する。そして、NAND型フラッシュメモリ5は、第1のワード線にライトデータを書き込むフォギー書き込み動作を実行する。
【0157】
ライトデータのサイズの合計が書き込みサイズに達していない場合(ステップS501でNo)、コントローラ4は、フォギー書き込み制御動作を終了する。
【0158】
図12は、第2実施形態に係るSSD3において実行される、ファイン書き込み動作を制御するための書き込み制御動作の手順を示すフローチャートである。
【0159】
ここでは、ステップS503でのフォギー書き込み動作においてライトデータが書き込まれた第1のワード線に対するファイン書き込み動作を制御するための書き込み制御動作に着目して説明する。
【0160】
コントローラ4は、第1のワード線に対するファイン書き込み動作が実行可能になったか否かを判定する(ステップS601)。コントローラ4は、一度フォギー書き込み動作が実行された第1のワード線に隣接する第2のワード線に対するフォギー書き込み動作が完了した場合に、第1のワード線に対するファイン書き込み動作が実行可能であると判定してもよい。
【0161】
第1のワード線に対するファイン書き込み動作が実行可能である場合(ステップS601でYes)、コントローラ4は、第1のワード線に対するフォギー書き込み動作で使用したライトデータをHMB32から再び読み出す(ステップS602)。つまり、HMB32から読み出されるライトデータは、一度フォギー書き込み動作が実行されたライトデータと同じデータである。
【0162】
コントローラ4は、このライトデータをNAND型フラッシュメモリ5に転送し、NAND型フラッシュメモリ5にファイン書き込み動作の実行を指示する(ステップS603)。
【0163】
コントローラ4は、ファイン書き込み動作が完了したライトデータに対応するリクエストフラグを「0」にリセットする(ステップS604)。コントローラ4は、リクエストフラグをリセットすることで、ホスト2にファイン書き込み動作が完了したことを通知する。ホスト2は、リクエストフラグがリセットされたことで、ファイン書き込み動作が実行されたライトデータをHMB32に保持しておく必要がなくなったことを判別する。
【0164】
ファイン書き込み動作が可能ではない場合(ステップS601でNo)、コントローラ4は、ファイン書き込み制御動作を終了する。
【0165】
以上説明したように、第2実施形態によれば、コントローラ4は、NVMe規格によって規定されているHMB32上のリクエストフラグテーブル41に含まれる複数のリクエストフラグのうちの一つ以上のリクエストフラグが、SSD3に対してデータの書き込みを要求する「1」にホスト2によってセットされたことに応じてライト要求が発行されたことを検出する。
【0166】
「1」にセットされている一つ以上のリクエストフラグのそれぞれに関連付けられたライトデータのサイズの合計が書き込みサイズに達した場合、コントローラ4は、HMB32からこれらライトデータを読み出す。このとき、コントローラ4は、「1」にセットされているリクエストフラグのそれぞれに対応するアドレス/サイズテーブル42のエントリのそれぞれからそのリクエストフラグに関連付けられたライトデータが格納されているアドレスおよびライトデータのサイズ情報を取得する。コントローラ4は、読み出したライトデータをNAND型フラッシュメモリ5に転送し、書き込み先ワード線に接続された複数のメモリセルにライトデータを書き込むための第1段階の書き込み動作の実行をNAND型フラッシュメモリ5に指示する。
【0167】
この書き込み先ワード線に対する第2段階の書き込み動作の実行が可能になった場合、コントローラ4は、この書き込み先ワード線に対する第1段階の書き込み動作で使用したライトデータをHMB32から再び読み出す。コントローラ4は、読み出したライトデータをNAND型フラッシュメモリ5に再び転送し、書き込み先ワード線に接続された複数のメモリセルにライトデータを再び書き込むための第2段階の書き込み動作の実行をNAND型フラッシュメモリ5に指示する。
【0168】
NAND型フラッシュメモリ5は、第1段階の書き込み動作では、書き込み対象のワードラインに接続された複数のメモリセルの各々の閾値電圧を目的の閾値電圧分布の精度よりも粗い精度で設定し、第2段階の書き込み動作では、これらメモリセルの各々の閾値電圧が目的の閾値電圧分布の精度になるように、これらメモリセルの各々の閾値電圧を設定する。
【0169】
SSD3は、ファイン書き込み動作が完了したことに応じて、HMB32にアクセスし、第2段階の書き込み動作が完了したライトデータに対応するリクエストフラグそれぞれを、「0」にリセットする。これにより、「0」に設定された各リクエストフラグに対応するライトデータが格納されているHMB32内の領域は、ホスト2から見て、新たなライトデータを格納するために利用可能な状態になる。
【0170】
したがって、ホスト2は、各リクエストフラグを参照することで、各ライト要求に関連付けられるライトデータが格納されているHMB32内の領域毎に、当該領域がライトデータの格納のために使用中の領域であるか、あるいは新たなライトデータの格納に利用可能なフリー領域であるかを判別することができる。換言すれば、ホスト2は、HMB32の記憶領域のうち、SSD3によって使用されている各部分(使用中の領域)と、SSD3によって使用されていない他の部分(フリー領域)とを容易に特定することが可能となる。SSD3によって使用されていないHMB32内のフリー領域は、ホスト2が新たなライトデータの格納のために使用することができる。
【0171】
また、各ライト要求に関連付けられるライトデータが格納されているHMB32内の領域は、このライトデータのサイズと同じサイズを有している。このため、たとえ一つのライト要求に関連付けられるライトデータのサイズが大きい場合であっても、コントローラ4は、このライト要求に対応する一つのリクエストフラグをリセットするだけで、このライトデータのサイズと同じサイズを有するHMB32内の特定の領域を使用中の領域からフリー領域に変更することができる。
【0172】
よって、第2実施形態では、SSD3の内部にライトバッファを持たない構成であっても、HMB32を使用することで、QLC-フラッシュメモリに対する複数段階の書き込み動作を実行することができる。また、第1実施形態と比較して、ホスト2とSSD3との間で同じライトデータが送受信される回数を減らすことが出来る。したがって、ホスト2とSSD3との間のライトデータの転送のために消費されるホスト2とSSD3との間のバス帯域を、第1実施形態と比べて削減すること可能となる。これにより、消費されるバス帯域の増加に伴って生じるSSD3の消費電力の増大およびパフォーマンスの低下を防ぐことができる。
【0173】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0174】
1…情報処理システム、2…ホスト、3…SSD、4…コントローラ、5…NAND型フラッシュメモリ、10…バス、11…ホストインタフェース、12…CPU、13…NANDインタフェース、14…DMAC、15…SRAM、16…ECCエンコード/デコード部、21…ライト制御部、22…リード制御部、101…プロセッサ、102…メモリ、31…システムメモリ、32…ホストメモリバッファ。