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

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

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

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-09-16
(45)【発行日】2022-09-28
(54)【発明の名称】メモリシステムおよび制御方法
(51)【国際特許分類】
   G06F 12/00 20060101AFI20220920BHJP
   G06F 3/08 20060101ALI20220920BHJP
   G06F 3/06 20060101ALI20220920BHJP
【FI】
G06F12/00 560B
G06F12/00 597U
G06F3/08 H
G06F3/06 301S
【請求項の数】 9
(21)【出願番号】P 2019013222
(22)【出願日】2019-01-29
(65)【公開番号】P2020123040
(43)【公開日】2020-08-13
【審査請求日】2021-09-14
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】特許業務法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
【審査官】北村 学
(56)【参考文献】
【文献】特開2017-162068(JP,A)
【文献】特開2009-098910(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 3/06
G06F 3/08
G06F 12/00-12/06
(57)【特許請求の範囲】
【請求項1】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
ライトデータが格納されている前記ホストのライトバッファ内の記憶位置を示す記憶位置情報を指定するライトコマンドを前記ホストから受信し、
前記記憶位置情報に基づいて前記ライトデータを前記ホストのライトバッファから取得し、
前記ライトデータを前記複数のブロックから選択された書き込み先ブロックの書き込み先位置に書き込む書き込み動作を実行し、
前記書き込み動作が終了して前記ライトデータが前記不揮発性メモリから読み出し可能となる前に、前記ライトデータを読み出し対象データとして指定する第1のリードコマンドが前記ホストから受信された場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行し、
前記第1のリードコマンドの実行が完了するまで、前記ライトデータが格納されている前記ライトバッファ内の領域の解放を禁止し、
前記ホストから受信されたリードコマンドによって指定される読み出し対象データが前記書き込み先ブロックから読み出し可能であり、且つ前記読み出し対象データが前記ライトバッファに存在する場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行するように構成されている、メモリシステム。
【請求項2】
前記コントローラは、前記第1のリードコマンドの実行が完了した後に、前記ライトデータが格納されている前記ライトバッファ内の領域を解放するための解放要求をホストに送信するように構成されている請求項1記載のメモリシステム。
【請求項3】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
ライトデータが格納されている前記ホストのライトバッファ内の記憶位置を示す記憶位置情報を指定するライトコマンドを前記ホストから受信し、
前記記憶位置情報に基づいて前記ライトデータを前記ホストのライトバッファから取得し、
前記ライトデータを前記複数のブロックから選択された書き込み先ブロックの書き込み先位置に書き込む書き込み動作を実行し、
前記書き込み動作が終了して前記ライトデータが前記不揮発性メモリから読み出し可能となる前に、前記ライトデータを読み出し対象データとして指定する第1のリードコマンドが前記ホストから受信された場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行し、
前記第1のリードコマンドの実行が完了するまで、前記ライトデータが格納されている前記ライトバッファ内の領域の解放を禁止し、
前記ライトデータの前記書き込み動作は、前記ライトデータを前記不揮発性メモリに複数回転送することを含む複数回の書き込みステップによって実行され、
前記コントローラは、
第1のカウンタ値を、前記書き込み動作に必要な前記書き込みステップの回数に1を加えた値に設定し、
1回の書き込みステップの終了の度に前記第1のカウンタ値を1減少し、
前記書き込み動作が終了して前記ライトデータが読み出し可能となった場合、前記第1のカウンタ値を1減少し、
前記書き込み動作の実行中に前記第1のリードコマンドを受信した場合、前記第1のカウンタ値を1増やし、
前記読み出し動作が終了した場合、前記第1のカウンタ値を1減少し、
前記第1のカウンタ値が零になった場合、前記ライトデータが格納されている前記ライトバッファ内の領域を解放するための解放要求を前記ホストに送信するように構成されているメモリシステム。
【請求項4】
前記コントローラは、前記ホストから受信されたリードコマンドによって指定される読み出し対象データが前記書き込み先ブロックから読み出し可能であり、且つ前記読み出し対象データが前記ライトバッファに存在する場合、前記読み出し対象データを前記書き込み先ブロックから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行するように構成されている請求項記載のメモリシステム。
【請求項5】
ホストに接続可能なメモリシステムであって、
複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備し、
前記コントローラは、
ライトデータが格納されている前記ホストのライトバッファ内の記憶位置を示す記憶位置情報を指定するライトコマンドを前記ホストから受信し、
前記記憶位置情報に基づいて前記ライトデータを前記ホストのライトバッファから取得し、
前記ライトデータを前記複数のブロックから選択された書き込み先ブロックの書き込み先位置に書き込む書き込み動作を実行し、
前記書き込み動作が終了して前記ライトデータが前記不揮発性メモリから読み出し可能となる前に、前記ライトデータを読み出し対象データとして指定する第1のリードコマンドが前記ホストから受信された場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行し、
前記書き込み動作が終了して前記ライトデータが前記不揮発性メモリから読み出し可能となり、且つ前記第1のリードコマンドの実行が完了した後に、前記ライトデータが格納されている前記ライトバッファ内の領域を解放するための解放要求を前記ホストに送信し
前記ホストから受信されたリードコマンドによって指定される読み出し対象データが前記書き込み先ブロックから読み出し可能であり、且つ前記読み出し対象データが前記ライトバッファに存在する場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行するように構成されている、メモリシステム。
【請求項6】
複数のブロックを含む不揮発性メモリを制御する制御方法であって、
ライトデータが格納されているホストのライトバッファ内の記憶位置を示す記憶位置情報を指定するライトコマンドを前記ホストから受信することと、
前記記憶位置情報に基づいて前記ライトデータを前記ホストのライトバッファから取得することと、
前記ライトデータを前記複数のブロックから選択された書き込み先ブロックの書き込み先位置に書き込む書き込み動作を実行することと、
前記書き込み動作が終了して前記ライトデータが前記不揮発性メモリから読み出し可能となる前に、前記ライトデータを読み出し対象データとして指定する第1のリードコマンドが前記ホストから受信された場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行することと、
前記第1のリードコマンドの実行が完了するまで、前記ライトデータが格納されている前記ライトバッファ内の領域の解放を禁止することと
前記ホストから受信されたリードコマンドによって指定される読み出し対象データが前記書き込み先ブロックから読み出し可能であり、且つ前記読み出し対象データが前記ライトバッファに存在する場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行することとを具備する制御方法。
【請求項7】
前記第1のリードコマンドの実行が完了した後に、前記ライトデータが格納されている前記ライトバッファ内の領域を解放するための解放要求をホストに送信することをさらに具備する請求項記載の制御方法。
【請求項8】
複数のブロックを含む不揮発性メモリを制御する制御方法であって、
ライトデータが格納されているホストのライトバッファ内の記憶位置を示す記憶位置情報を指定するライトコマンドを前記ホストから受信することと、
前記記憶位置情報に基づいて前記ライトデータを前記ホストのライトバッファから取得することと、
前記ライトデータを前記複数のブロックから選択された書き込み先ブロックの書き込み先位置に書き込む書き込み動作を実行することと、
前記書き込み動作が終了して前記ライトデータが前記不揮発性メモリから読み出し可能となる前に、前記ライトデータを読み出し対象データとして指定する第1のリードコマンドが前記ホストから受信された場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行することと、
前記第1のリードコマンドの実行が完了するまで、前記ライトデータが格納されている前記ライトバッファ内の領域の解放を禁止することと、を具備し、
前記ライトデータの前記書き込み動作は、前記ライトデータを前記不揮発性メモリに複数回転送することを含む複数回の書き込みステップによって実行され、
第1のカウンタ値を、前記書き込み動作に必要な前記書き込みステップの回数に1を加えた値に設定することと、
1回の書き込みステップの終了の度に前記第1のカウンタ値を1減少することと、
前記書き込み動作が終了して前記ライトデータが読み出し可能となった場合、前記第1のカウンタ値を1減少することと、
前記書き込み動作の実行中に前記第1のリードコマンドを受信した場合、前記第1のカウンタ値を1増やすことと、
前記読み出し動作が終了した場合、前記第1のカウンタ値を1減少することと、
前記第1のカウンタ値が零になった場合、前記ライトデータが格納されている前記ライトバッファ内の領域を解放するための解放要求を前記ホストに送信することとをさらに具備する制御方法。
【請求項9】
前記ホストから受信されたリードコマンドによって指定される読み出し対象データが前記書き込み先ブロックから読み出し可能であり、且つ前記読み出し対象データが前記ライトバッファに存在する場合、前記読み出し対象データを前記書き込み先ブロックから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行することをさらに具備する請求項記載の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【0002】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。このようなメモリシステムの一つとして、NANDフラッシュ技術ベースのソリッドステートドライブ(SSD)が知られている。
データセンターのサーバにおいても、ストレージデバイスとしてSSDが使用されている。
【0003】
サーバのようなホスト計算機システムにおいて利用されるストレージデバイスにおいては、高いI/O性能が求められている。
このため、最近では、ホストがストレージデバイス内の不揮発性メモリを直接的に制御することを可能にする新たな技術が提案され始めている。
【先行技術文献】
【非特許文献】
【0004】
【文献】Yiying Zhang, 外, "De-indirection for flash-based SSDs with nameless writes." FAST. 2012, [online], [平成29年9月13日検索], インターネット<URL: https://www.usenix.org/system/files/conference/fast12/zhang.pdf >
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、ストレージデバイス内の不揮発性メモリを制御するためのホスト側の負担が増加されると、これによって十分なI/O性能が得られなくなる場合がある。このため、ホスト側の負担を軽減できるようにするための新たな技術の実現が要求される。
本発明が解決しようとする課題は、ホスト側の負担を軽減することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0006】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するように構成されたコントローラとを具備する。前記コントローラは、ライトデータが格納されている前記ホストのライトバッファ内の記憶位置を示す記憶位置情報を指定するライトコマンドを前記ホストから受信する。前記コントローラは、前記記憶位置情報に基づいて前記ライトデータを前記ホストのライトバッファから取得する。前記コントローラは、前記ライトデータを前記複数のブロックから選択された書き込み先ブロックの書き込み先位置に書き込む書き込み動作を実行する。前記コントローラは、前記書き込み動作が終了して前記ライトデータが前記不揮発性メモリから読み出し可能となる前に、前記ライトデータを読み出し対象データとして指定する第1のリードコマンドが前記ホストから受信された場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行する。前記コントローラは、前記第1のリードコマンドの実行が完了するまで、前記ライトデータが格納されている前記ライトバッファ内の領域の解放を禁止する。前記コントローラは、前記ホストから受信されたリードコマンドによって指定される読み出し対象データが前記書き込み先ブロックから読み出し可能であり、且つ前記読み出し対象データが前記ライトバッファに存在する場合、前記読み出し対象データを前記ライトバッファから読み出す動作と前記読み出した前記読み出し対象データを前記ホストに返す動作とを含む読み出し動作を実行する。
【図面の簡単な説明】
【0007】
図1】ホストと実施形態に係るメモリシステムとの関係を示すブロック図。
図2】同実施形態のメモリシステムとホストとの間の役割分担を説明するための図。
図3】同実施形態のメモリシステムの構成例を示すブロック図。
図4】同実施形態のメモリシステムに設けられた、NANDインタフェースと複数のNAND型フラッシュメモリチップとの関係を示すブロック図。
図5】複数の物理ブロックの集合によって構築される一つのブロック(スーパーブロック)の構成例を示す図。
図6】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
図7】同実施形態のメモリシステムからホストに送られるアドレス記録要求を説明するための図。
図8】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
図9】同実施形態のメモリシステムに適用されるQoSドメインクリエートコマンドを説明するための図。
図10】同実施形態のメモリシステムからホストに送られるライトバッファ解放要求を説明するための図。
図11】アドレス記録要求およびリードコマンドの各々に含まれる物理アドレスを規定するブロックアドレスおよびオフセットを説明するための図。
図12】スーパーブロックが使用される場合におけるブロックアドレスとオフセットとの関係を説明するための図。
図13】同実施形態のメモリシステムによって管理される複数のQoSドメインを説明するための図。
図14】ホストと同実施形態のメモリシステムとによって実行されるデータ書き込み処理を説明するためのブロック図。
図15】同実施形態のメモリシステムによって実行される、複数回の書き込みステップを含む書き込み動作を説明するための図。
図16】ホストと同実施形態のメモリシステムとによって実行されるデータ読み出し処理を説明するためのブロック図。
図17】リードコマンドによって指定されたデータの書き込み動作が終了していない場合に、このデータをホストのライトバッファから読み出すデータ読み出し処理を説明するためのブロック図。
図18】同実施形態のメモリシステムによって管理される、複数のQoSドメインと共通フラッシュブロックプールとの関係を示すブロック図。
図19】同実施形態のメモリシステムによって管理されるコマンド数カウンタを説明するためのブロック図。
図20】同実施形態のメモリシステムによって実行されるコマンド数カウンタ更新処理の手順を示すフローチャート。
図21】同実施形態のメモリシステムによって実行されるデータ読み出し動作の手順を示すフローチャート。
図22】同実施形態のメモリシステムによって実行されるデータ書き込み動作とライトバッファ解放処理の手順を示すフローチャート。
図23】リードコマンドによって指定されたデータがフラッシュメモリおよびホストのライトバッファの双方から読み出し可能である場合に実行されるデータ読み出し動作の手順を示すフローチャート。
図24】リードコマンドによって指定されたデータがフラッシュメモリおよびホストのライトバッファの双方から読み出し可能である場合に実行されるデータ読み出し動作の別の手順を示すフローチャート。
【発明を実施するための形態】
【0008】
以下、図面を参照して、実施形態を説明する。
まず、図1を参照して、本実施形態に係るメモリシステムとホストとの関係を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのフラッシュストレージデバイス3として実現されている。
【0009】
ホスト(ホストデバイス)2は、複数のフラッシュストレージデバイス3を制御するように構成されている。ホスト2は、複数のフラッシュストレージデバイス3によって構成されるフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
【0010】
なお、フラッシュストレージデバイス3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のフラッシュストレージデバイス3)を制御するコントローラを含む。フラッシュストレージデバイス3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス3のホストとして機能してもよい。
【0011】
以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。
ホスト(サーバ)2と複数のフラッシュストレージデバイス3は、インタフェース50を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
【0012】
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
【0013】
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
【0014】
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、この仮想マシンに対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。
【0015】
ホスト(サーバ)2においては、フラッシュトランスレーションレイヤ(ホストFTL)も実行される。このホストFTLは、アクセス対象のデータを識別するためのデータ識別子(タグ)それぞれとフラッシュストレージデバイス3内の不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルであるルックアップテーブル(LUT)を含む。ホストFTLは、このLUTを使用することによって、フラッシュストレージデバイス3内の不揮発性メモリ上のデータ配置を知ることができる。
【0016】
フラッシュストレージデバイス3は、NAND型フラッシュメモリのような不揮発性メモリを含む。不揮発性メモリは、各々が複数のページを含む複数のブロックを含む。これらブロックの各々はデータを消去する単位であり、複数のページの各々はデータの書き込みおよび読み出しの単位である。
【0017】
フラッシュストレージデバイス3は、ローレベルアブストラクションを実行することができる。ローレベルアブストラクションは不揮発性メモリのアブストラクションのための機能である。ローレベルアブストラクションは、データ配置を補助する機能等を含む。データ配置を補助する機能の例は、ホスト2からのユーザデータが書き込まれるべき書き込み先ブロックを割り当てる機能、ユーザデータの書き込み先位置(書き込み先ブロック、この書き込み先ブロック内の位置)を決定する機能、ユーザデータが書き込まれたこの書き込み先位置(ブロックアドレス、オフセット)を上位階層(ホスト2)に通知する機能、等を含んでいてもよい。
【0018】
フラッシュストレージデバイス3は、ホスト2から受信される様々なコマンドを実行する。これらコマンドには、フラッシュストレージデバイス3内の不揮発性メモリにデータを書き込むためのライトコマンド、不揮発性メモリからデータを読み出すためのリードコマンドが含まれる。本実施形態においては、各リードコマンドは、読み出すべきデータが格納されている記憶位置を示す物理アドレスを指定する。この物理アドレスは、読み出し対象のブロックのブロックアドレスと、この読み出し対象のブロック内の読み出し対象の記憶位置を示すオフセット(ブロック内オフセット)とによって表される。
【0019】
フラッシュストレージデバイス3は、読み出し対象のブロックのブロックアドレスとこの読み出し対象のブロック内の読み出し対象の記憶位置を示すオフセットとを指定するリードコマンドそれぞれをホスト2から受信し、受信された各リードコマンドに応じてデータ読み出し動作を実行する。
【0020】
図2はフラッシュストレージデバイス3とホスト2との間の役割分担を示す。
ホスト(サーバ)2においては、複数のエンドユーザにそれぞれ対応する複数の仮想マシン401が実行される。各仮想マシン401においては、対応するエンドユーザによって使用される、オペレーティングシステムおよびユーザアプリケーション402が実行される。
【0021】
また、ホスト(サーバ)2においては、複数のユーザアプリケーション402にそれぞれ対応する複数のI/Oサービス403が実行される。これらI/Oサービス403には、論理ブロックアドレス(LBA)ベースのブロックI/Oサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各I/Oサービス403は、タグそれぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル(LUT)を含む。
【0022】
ここで、タグとは、アクセス対象のデータを識別可能な識別子を意味する。このタグの典型的な例は、これに限定されないが、LBAのような論理アドレスである。あるいは、キー・バリュー・ストアのキー、またはこのキーのハッシュ値、等がタグとして利用されてもよい。
【0023】
フラッシュストレージデバイス3の物理アドレスは、フラッシュストレージデバイス3に含まれる不揮発性メモリ内の記憶位置(物理記憶位置)を特定するためのアドレスである。
LBAベースのブロックI/Oサービスにおいては、論理アドレス(LBA)それぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するLUTが使用されてもよい。
【0024】
一方、キー・バリュー・ストアサービスにおいては、キー(またはキーのハッシュ値)それぞれとこれらキーに対応するデータが格納されているフラッシュストレージデバイス3の物理アドレスそれぞれとこれらキーに対応するデータそれぞれのデータ長との間のマッピングを管理するLUTが使用されてもよい。
【0025】
各エンドユーザは、使用すべきアドレッシング方法(LBA、キー・バリュー・ストアのキー、このキーのハッシュ値、等)を選択することができる。
ホスト(サーバ)2においては、複数の仮想マシン401にそれぞれ対応する複数のライトバッファ(WB)404が管理されていてもよい。あるユーザアプリケーション402からのライトデータは、このユーザアプリケーション402に対応する仮想マシン401用のライトバッファ(WB)404に一時的に格納されてもよい。
【0026】
ホスト(サーバ)2からフラッシュストレージデバイス3へのコマンドの送信およびフラッシュストレージデバイス3からホスト(サーバ)2へのコマンド完了のレスポンス等の返送は、ホスト(サーバ)2およびフラッシュストレージデバイス3の各々に存在するI/Oキュー500を介して実行される。
【0027】
フラッシュストレージデバイス3は、フラッシュストレージデバイス3内の不揮発性メモリを論理的に分割することによって得られる複数の領域それぞれをQoSドメイン601として管理する。これらQoSドメイン601の各々は、不揮発性メモリに含まれる複数のブロックの部分集合である。不揮発性メモリに含まれる複数のブロックの各々は一つのQoSドメイン601のみに属し、同じブロックが異なるQoSドメイン601に同時に属することはない。
【0028】
これらQoSドメイン601は、QoSドメインIDと称される識別子によってそれぞれ識別される。これらQoSドメインIDは、これら複数の領域(複数のQoSドメイン)をそれぞれアクセスするための複数の識別子として使用される。
本実施形態においては、各ライトコマンドは、書き込まれるべきデータ(ライトデータ)が格納されているホスト2のライトバッファ(WB)404内の記憶位置を示す記憶位置情報を指定する。また、各ライトコマンドは、データ(ライトデータ)が書き込まれるべき領域(QoSドメイン)の識別子(QoSドメインID)を指定することができる。あるQoSドメインIDを指定するライトコマンドをホスト2から受信した場合、フラッシュストレージデバイス3は、複数のQoSドメイン601によって共有される共通ブロック群602のうちの一つのブロックを選択し、この選択したブロックを、このQoSドメインIDを有するQoSドメイン用の書き込み先ブロックとして割り当てる。
【0029】
ここで、書き込み先ブロックとは、データが書き込まれるべきブロックを意味する。共通ブロック群602は、複数のQoSドメイン601によって共有されるフリーブロックの集合を含む共通フリーブロック群である。
フリーブロックとは、新たな書き込み先ブロックとして再使用(再割り当て)可能な状態(フリー状態)のブロックを意味する。フリーブロックの典型的な例は、有効データを格納していないブロックである。有効データとは、LBAのようなタグに関連付けられている最新のデータを意味する。つまり、ホスト2のLUTから最新のデータとしてリンクされているデータは有効データである。また、無効データとは、LBAのようタグに関連付けられていないデータを意味する。ホスト2のLUTからリンクされていないデータは無効データである。例えば、あるLBAに対応する更新データがフラッシュストレージデバイス3に書き込まれた場合には、このLBAに対応する以前のデータは無効データとなる。
【0030】
そして、フラッシュストレージデバイス3は、受信されたライトコマンドに関連付けられたデータをホスト2のライトバッファ(WB)404から取得し、このデータをQoSドメイン用に割り当てられた書き込み先ブロックに書き込む。なお、利用可能な書き込み先ブロックが既にこのQoSドメイン用に割り当てられているならば、共通ブロック群602のうちの一つのブロック(フリーブロック)をこのQoSドメイン用の書き込み先ブロックとして割り当てるという上述の動作を行う必要は無い。フラッシュストレージデバイス3は、受信されたライトコマンドに関連付けられたデータを、既に割り当てられているこの書き込み先ブロック内の次の利用可能ページに書き込む。
【0031】
受信されたライトコマンドに関連付けられたデータが書き込み先ブロックに書き込まれると、フラッシュストレージデバイス3は、このデータのタグと、このデータが書き込まれた不揮発性メモリ内の記憶位置を示す物理アドレス(ブロックアドレス、オフセット)とをホスト2にアドレス記録要求として送出する。ブロックアドレスは、この書き込み先ブロックを識別するための識別子である。通常、不揮発性メモリは複数の不揮発性メモリチップによって構成されるので、あるブロックのブロックアドレスは、不揮発性メモリチップのチップ番号と、このチップ内のブロック番号とによって表されてもよい。オフセットは、この書き込み先ブロック内の記憶位置を示す。
【0032】
このアドレス記録要求に応じて、ホスト2は、このデータのタグにこの物理アドレス(ブロックアドレス、オフセット)が関連付けられるようにLUTを更新することができる。
各QoSドメインに含まれるブロックの各々について、ホスト2は、各ブロックに格納されているデータが有効データまたは無効データのいずれであるかを、LUTを使用して管理することができる。また、ホスト2は、既にデータが書き込まれている一つのブロックを新たな書き込み先ブロックとして再使用可能な状態(フリーブロック)に遷移させるためのコマンド(リユースコマンド)をフラッシュストレージデバイス3に送信することができる。
【0033】
図3は、フラッシュストレージデバイス3の構成例を示す。
フラッシュストレージデバイス3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。フラッシュストレージデバイス3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
【0034】
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKm-1を含む。ブロックBLK0~BLKm-1の各々は複数のページ(ここではページP0~Pn-1)を含む。ブロックBLK0~BLKm-1は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0~Pn-1は、データ書き込み動作およびデータ読み込み動作の単位である。
【0035】
コントローラ4は、ToggleNANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のような、NANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
【0036】
NAND型フラッシュメモリ5は、図4に示すように、複数のNAND型フラッシュメモリチップ(NAND型フラッシュメモリダイ)を含んでいてもよい。個々のNAND型フラッシュメモリチップは独立して動作可能である。このため、NAND型フラッシュメモリチップは、並列動作可能な単位として機能する。図4においては、NANDインタフェース13に16個のチャンネルCh.1~Ch.16が接続されており、16個のチャンネルCh.1~Ch.16の各々に2つのNAND型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルCh.1~Ch.16に接続された16個のNAND型フラッシュメモリチップ#1~#16がバンク#0として編成されてもよく、またチャンネルCh.1~Ch.16に接続された残りの16個のNAND型フラッシュメモリチップ#17~#32がバンク#1として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図4の構成例においては、16個のチャンネルと、2つのバンクを使用したバンクインタリーブとによって、最大32個のNAND型フラッシュメモリチップを並列動作させることができる。
【0037】
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループ(スーパーブロック)の単位で実行されてもよい。一つのブロックグループ(一つのスーパーブロック)は、これに限定されないが、NAND型フラッシュメモリチップ#1~#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリチップ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリチップ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリチップ#1~#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
【0038】
図5には、32個の物理ブロック(ここでは、NAND型フラッシュメモリチップ#1内の物理ブロックBLK2、NAND型フラッシュメモリチップ#2内の物理ブロックBLK3、NAND型フラッシュメモリチップ#3内の物理ブロックBLK7、NAND型フラッシュメモリチップ#4内の物理ブロックBLK4、NAND型フラッシュメモリチップ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリチップ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0039】
書き込み先ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【0040】
次に、図3のコントローラ4の構成について説明する。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、およびDRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、ECCエンコード/デコード部16等を含む。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、DMAC15、ECCエンコード/デコード部16は、バス10を介して相互接続される。
【0041】
このホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってもよい。あるいは、フラッシュストレージデバイス3がEthernet(登録商標)を介してホスト2に接続される構成においては、ホストインタフェース11は、NVMe over Fabrics(NVMeOF)コントローラであってもよい。
【0042】
ホストインタフェース11は、ホスト2から様々なコマンドを受信する。これらコマンドには、ライトコマンド、リードコマンド、コピーコマンド、イレーズコマンド、リユースコマンド、QoSドメインクリエートコマンド、他の様々なコマンドが含まれる。
【0043】
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、DMAC15、ECCエンコード/デコード部16を制御するように構成されたプロセッサである。CPU12は、フラッシュストレージデバイス3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。このCPU12は、ホスト2からの様々なコマンドを実行するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
【0044】
CPU12は、ライト制御部21、リード制御部22、コピー制御部23、およびライトバッファ解放制御部24として機能することができる。なお、これらライト制御部21、リード制御部22、コピー制御部23、およびライトバッファ解放制御部24の各々一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
【0045】
ライト制御部21は、ライトデータが格納されているホスト2のライトバッファ内の記憶位置を示す記憶位置情報を指定するライトコマンドをホスト2から受信する。ライト制御部21は、記憶位置情報に基づいてライトデータをホスト2のライトバッファから取得する。ライト制御部21は、このライトデータを、NAND型フラッシュメモリ5の複数のブロックから選択された書き込み先ブロックの書き込み先位置に書き込む書き込み動作を実行する。
【0046】
本実施形態では、ライトデータが書き込まれるべき記憶位置を示す物理アドレスを指定するタイプのライトコマンドが使用されてもよいし、QoSドメインIDとタグとを指定し物理アドレスを指定しないタイプのライトコマンドが使用されてもよい。
ホスト2が書き込み先ブロックおよびこの書き込み先ブロック内の書き込み先位置の双方を決定するという構成が利用されるケースにおいては、ライトデータが書き込まれるべき記憶位置を示す物理アドレスを指定するタイプのライトコマンドが使用される。
【0047】
一方、フラッシュストレージデバイス3が書き込み先ブロックおよびこの書き込み先ブロック内の書き込み先位置の双方を決定するという構成が利用されるケースにおいては、QoSドメインIDとタグとを指定し物理アドレスを指定しないタイプのライトコマンドが使用される。
【0048】
以下では、QoSドメインIDとタグとを指定し物理アドレスを指定しないタイプのライトコマンドが使用されるケースを想定する。
ライト制御部21は、ライトバッファ内の記憶位置情報とQoSドメインIDとタグとを指定するライトコマンドをホスト2から受信する。タグは、書き込むべきデータ(ユーザデータ)を識別可能な識別子であり、例えば、LBAであってもよいし、あるいはキー・バリュー・ストアのキーであってもよいし、このキーのハッシュ値であってもよい。ライトコマンドを受信した場合、ライト制御部21は、共通ブロック群602のうちの一つのブロックを選択し、選択したブロックを、ライトコマンドによって指定されたQoSドメインIDに対応するQoSドメイン用の書き込み先ブロックとして割り当てる。このQoSドメイン用の書き込み先ブロックとして割り当てられるブロックは、物理ブロックであってもよいし、スーパーブロックであってもよい。
【0049】
この場合、ライト制御部21は、共通ブロック群602から、最小プログラム/イレーズサイクルカウントを有するブロック(物理ブロックまたはスーパーブロック)を選択してもよい。これにより、QoSドメイン間でウェアレベリングを実行することができる。利用可能な書き込み先ブロックが既にこのQoSドメイン用に割り当てられているならば、共通ブロック群602のうちの一つのブロックをこのQoSドメイン用の書き込み先ブロックとして割り当てる動作は実行されない。
【0050】
ライト制御部21は、ページ書き込み順序の制約、およびこの書き込み先ブロック内の不良ページ等を考慮して、データが書き込まれるべき、この書き込み先ブロック内の位置(書き込み先位置)を決定する。次いで、ライト制御部21は、記憶位置情報に基づいてホスト2のライトバッファからデータ(ライトデータ)を取得し、このライトデータを、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト制御部21は、ホスト2からのライトデータのみならず、このライトデータとこのライトデータのタグの双方を書き込み先ブロックに書き込むことができる。
【0051】
あるQoSドメイン用の書き込み先ブロック全体がデータで満たされると、ライト制御部21は、共通ブロック群602のうちの一つのブロックをこのQoSドメイン用の新たな書き込み先ブロックとして割り当てる。例えば、あるライトコマンドに関連付けられたライトデータの一部分の書き込みによって現在の書き込み先ブロック全体がデータで満たされると、ライト制御部21は、共通ブロック群602のうちの一つのブロックをこのQoSドメイン用の新たな書き込み先ブロックとして割り当て、このライトコマンドに関連付けられたライトデータの残り部分をこの新たな書き込み先ブロックに書き込む。
【0052】
ライトデータが書き込み先ブロックに書き込まれると、ライト制御部21は、このデータが書き込まれたNAND型フラッシュメモリ5内の記憶位置を示す物理アドレス(ブロックアドレス、オフセット)をホスト2にアドレス記録要求として送出する。
一つの物理ブロックが書き込み先ブロックとして割り当てられたケースにおいては、ブロックアドレスは、この物理ブロックを識別するためのブロックアドレスである。このブロックアドレスはチップ番号とこのチップ内のブロック番号とによって表されてもよい。
【0053】
一つのスーパーブロックが書き込み先ブロックとして割り当てられたケースにおいては、ブロックアドレスは、このスーパーブロックを識別するためのブロックアドレス(スーパーブロックアドレスとも云う)である。フラッシュストレージデバイス3内の全てのスーパーブロックに異なるスーパーブロックアドレスが付与されていてもよい。
【0054】
オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット、つまり書き込み先ブロックの先頭に対する書き込み先位置のオフセットを示す。書き込み先ブロックの先頭から書き込み先位置までのオフセットのサイズは、あるサイズを有する粒度の倍数で表されてもよい。あるいは、オフセットは、一つのページのページアドレスと、このページ内のオフセットとによって表されてもよい。
【0055】
リード制御部22は、ホスト2から受信されるリードコマンドに応じて、このリードコマンドによって読み出し対象データとして指定されたデータをNAND型フラッシュメモリ5から読み出し、そしてこの読み出したデータをホスト2に転送する。
ホスト2が書き込み先ブロックおよびこの書き込み先ブロック内の書き込み先位置の双方を決定するという構成が利用されるケース、またはフラッシュストレージデバイス3が書き込み先ブロックおよびこの書き込み先ブロック内の書き込み先位置の双方を決定するという構成が利用されるケースのいずれにおいても、物理アドレス(すなわち、ブロックアドレスおよびオフセット)を指定するリードコマンドを使用することができる。
【0056】
物理アドレス(すなわち、ブロックアドレスおよびオフセット)を指定するリードコマンドをホスト2から受信した場合、リード制御部22は、これらブロックアドレスおよびオフセットに基づいてNAND型フラッシュメモリ5からデータをリードする。リード対象のブロックは、ブロックアドレスによって特定される。このブロック内のリード対象の記憶位置は、オフセットによって特定される。リードコマンドは、さらに、リード対象のQoSドメインのQoSドメインIDを含んでいてもよい。
【0057】
本実施形態では、あるライトデータの書き込み動作が終了してこのライトデータがNAND型フラッシュメモリ5から読み出し可能となる前に、このライトデータ(このライトデータの一部分または全て)を読み出し対象データとして指定するリードコマンドがホスト2から受信された場合、リード制御部22は、このライトデータ(このライトデータの一部分または全て)をホスト2のライトバッファから読み出す動作と読み出したライトデータ(このライトデータの一部分または全て)をホスト2に返す動作とを含む読み出し動作を実行する。このように、リードコマンドによって読み出し対象データとして指定されたデータの書き込み動作が終了しておらず、このデータをNAND型フラッシュメモリ5から読み出す事ができない場合には、リード制御部22は、リードエラーをホスト2に返すのでは無く、ホスト2のライトバッファからこのデータを読み出してこのデータをホスト2に返す。
【0058】
現代のNAND型フラッシュメモリの多くにおいては、プログラムディスターブを低減するための複雑な書き込み動作が実行される場合が多い。このため、現代のNAND型フラッシュメモリの多くにおいては、たとえブロック内のあるページにデータが書き込まれても、このページに書き込まれたデータは、その書き込み直後には読み出すことができず、このページに後続する1以上のページへのデータ書き込み後に、このページからのデータの読み出しが可能となるケースがある。
【0059】
NAND型フラッシュメモリにおいては、セルの微細化が進んでおり、セルへのデータ書き込みによって隣接するセルの閾値レベルが変動するというプログラムディスターブが起こり得る。このため、NAND型フラッシュメモリメモリにおいては、プログラムディスターブによる影響を考慮して、あるページ内の各セルへのデータの書き込みによって、その直前の一つ以上のページ内の各セルの閾値レベルを補正するといったプログラム動作が実行される場合がある。補正が完了する前のページからデータをリードすると、本来のデータとは異なる誤ったデータがリードされてしまう。補正を完了するタイミングは使用されるNAND型フラッシュメモリのタイプによって異なる。
【0060】
また、現代のNAND型フラッシュメモリにおいては、データ書き込み動作が、同じライトデータをNAND型フラッシュメモリに複数回転送することを含む複数回の書き込みステップによって実行されるケースもある。複数回の書き込みステップを含むデータ書き込み動作の例の一つとしては、フォギー・ファイン書き込み動作が挙げられる。
【0061】
複数回の書き込みステップを含むデータ書き込み動作は、少なくとも、フォギー書き込み動作のような第1段階の書き込み動作とファイン書き込み動作のような第2段階の書き込み動作とを含む。フォギー書き込み動作は各メモリセルの閾値分布を荒く設定する書き込み動作であり、ファイン書き込み動作は各メモリセルの閾値分布を調整する書き込み動作である。さらに、フォギー書き込み動作とファイン書き込み動作との間に、中間の書き込み動作が実行されてもよい。
【0062】
また、現代のNAND型フラッシュメモリにおいては、データ書き込み動作は、隣接する幾つかのワード線を往復しながら実行される。例えば、2つのワード線を往復するフォギー・ファイン書き込み動作では、(1)1番目のワード線に接続されたメモリセル群に対するフォギー書き込み動作、(2)2番目のワード線に接続されたメモリセル群に対するフォギー書き込み動作、(3)1番目のワード線に接続されたメモリセル群に対するファイン書き込み動作、(4)3番目のワード線に接続されたメモリセル群に対するフォギー書き込み動作、(5)2番目のワード線に接続されたメモリセル群に対するファイン書き込み動作、…、というプログラム順序が適用される。
【0063】
したがって、現代のNAND型フラッシュメモリにおいては、あるデータを書き込むための書き込み動作の開始から終了までに多くの時間が必要される。
本実施形態では、ライトデータの書き込み動作が終了(例えばフォギー書き込み動作とファイン書き込み動作の双方が終了)してこのライトデータが読み出し可能となる前に、このライトデータを読み出し対象データとして指定するリードコマンドがホスト2から受信された場合には、リード制御部22は、ホスト2のライトバッファからこの読み出し対象データを読み出し、この読み出したデータをホスト2に返す。したがって、ホスト2は、リードすべきデータがNAND型フラッシュメモリ5から読み出し可能であるか否かをチェックする処理およびライトバッファに向けたリード要求とフラッシュストレージデバイス3に向けたリードコマンドを選択的に発行する処理を行わずとも、フラッシュストレージデバイス3に向けたリードコマンドそれぞれを発行するというシンプルな処理を行うだけで、所望のデータをフラッシュストレージデバイス3から受け取ることができる。
【0064】
コピー制御部23は、ホスト2から受信されるコピーコマンドに応じて、あるQoSドメイン用に割り当てられているあるブロック内に格納されているデータを、このQoSドメイン用のまたは別のQoSドメイン用のブロック(コピー先ブロック)にコピーする。コピー先ブロックは、不揮発性メモリ内に既に書き込まれているデータが書き込まれるべき(コピーされるべき)書き込み先ブロックである。このコピーコマンドは、コピー元QoSドメインのQoSドメインIDと、コピー元ブロックのブロックアドレスと、コピー先QoSドメインのQoSドメインIDとを指定してもよい。コピー元ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。
【0065】
また、ホスト2は、所定の管理サイズ(例えば4KB)単位でコピー元ブロック内の各データが有効データまたは無効データのいずれであるかを示す管理データ(マップデータ)をフラッシュストレージデバイス3に送信することができる。このマップデータはコピーコマンドに含まれていてもよいし、コピーコマンドとは別にホスト2からフラッシュストレージデバイス3に送信されてもよい。コピー制御部23は、ホスト2から受信されるマップデータおよびコピーコマンドに応じて、コピー元ブロック内に格納されている有効データそれぞれを、このQoSドメイン用のまたは別のQoSドメイン用のブロック(コピー先ブロック)にコピーすることができる。
【0066】
コピー元ブロックからコピー先ブロックへのデータ(有効データ)それぞれのコピーが完了すると、コピー制御部23は、コピーされたデータ毎にこのデータのタグとこのデータのコピー先物理アドレス(ブロックアドレス、オフセット)とをホスト2に通知する。
【0067】
ライトバッファ解放制御部24は、NAND型フラッシュメモリ5から読み出し可能となっていないライトデータを読み出し対象データとして指定するリードコマンドが存在する場合には、このリードコマンドの実行が完了するまで、このライトデータが格納されているライトバッファ内の領域の解放を禁止する。そして、このリードコマンドの実行が完了した後に、ライトバッファ解放制御部24は、ライトデータが格納されているライトバッファ内の領域を解放するためのライトバッファ解放要求をホスト2に送信する。
【0068】
つまり、ライトバッファ解放制御部24は、あるライトデータの書き込み動作が終了してこのライトデータが読み出し可能となった場合、リードコマンドによって読み出し対象データとして指定されたこのライトデータをライトバッファから読み出してホスト2に返す読み出し動作が実行中であるか否かを判定する。この読み出し動作が実行中である場合、ライトバッファ解放制御部24は、この読み出し動作が終了するまでライトバッファ解放要求をホスト2に送信せず、この読み出し動作が終了した後、ライトバッファ解放要求をホスト2に送信する。よって、ライトバッファから読み出すべきことが決定されたデータまたはライトバッファから読み出し中のデータなどがライトバッファから消失されてしまうという、ライトバッファ解放要求とリードコマンドとの衝突(解放要求/リードコマンド衝突)を回避することができる。
【0069】
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域は、ブロック管理テーブル32を格納するために使用される。また、DRAM6の記憶領域は、ライトデータ等を一時的に格納するための内部バッファとしても利用され得る。なお、内部バッファがフラッシュストレージデバイス3内に存在しない、または内部バッファの容量がほぼゼロに近い、というバッファレス構成がフラッシュストレージデバイス3に適用されてもよい。
【0070】
ブロック管理テーブル32は、NAND型フラッシュメモリ5内の複数のブロックそれぞれに対応する複数の管理テーブルを含む。各管理テーブルは、この管理テーブルに対応するブロックを管理するための管理情報(メタデータ)を格納するために使用される。メタデータは、これに限定されないが、書き換え回数(プログラム/イレーズサイクルの数)、オープン/クローズ状態、書き込み先ページ範囲、等を含んでいてもよい。オープン/クローズ状態は、このブロックがオープン状態またはクローズ状態のいずれであるかを示す。オープン状態は、このブロックが書き込み先ブロックとして使用中の状態を示す。書き込み先ブロックには、ホスト2からのデータが書き込まれるホスト書き込み用の書き込み先ブロックと、不揮発性メモリ内に既に書き込まれているデータのコピー用の書き込み先ブロックとがある。データコピー用の書き込み先ブロックはコピー先ブロックと称される。
【0071】
クローズ状態は、ブロックがデータで満たされてアクティブブロックとして管理されている状態を示す。書き込み先ページ範囲は、どのページからどのページまでが現在書き込み(プログラム)動作中であるかを示す。
DMAC15は、CPU12の制御の下、ホスト2内のメモリ(ライトバッファ)とDRAM6(内部バッファ)との間のデータ転送を実行する。ホスト2のライトバッファから内部バッファにライトデータを転送すべき場合には、CPU12は、ライトバッファ上の位置を示す転送元アドレス、データサイズ、内部バッファ上の位置を示す転送先アドレスをDMAC15に対して指定する。
【0072】
ECCエンコード/デコード部16は、NAND型フラッシュメモリ5にデータをライトすべき時、書き込むべきライトデータをエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部16は、リードされたデータに付加されているECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
【0073】
図6は、フラッシュストレージデバイス3に適用されるライトコマンドを示す。
ライトコマンドは、フラッシュストレージデバイス3にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドID、QoSドメインID、タグ、長さ、ライトバッファアドレス、等を含んでもよい。
【0074】
コマンドIDはこのコマンド(このライトコマンド)の固有の識別子である。QoSドメインIDは、データが書き込まれるべきQoSドメインを一意に識別可能な識別子である。あるエンドユーザに対応するアプリケーションからのライト要求に応じてホスト2から送信されるライトコマンドは、このエンドユーザに対応するQoSドメインを指定するQoSドメインIDを含む。
【0075】
タグは、書き込まれるべきライトデータを識別するための識別子である。このタグは、上述したように、LBAのような論理アドレスであってもよいし、キー・バリュー・ストアのキーであってもよいし、このキーのハッシュ値であってもよい。
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、上述の粒度(Grainとしても参照される)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはバイトによって指定されてもよい。
【0076】
ライトバッファアドレスは、書き込まれるべきライトデータが格納されているホストメモリ(ホスト2のライトバッファ)内の記憶位置を示す記憶位置情報である。ライトバッファアドレスは、データポインタとしても参照される。
コントローラ4は、ホスト2から受信されるQoSドメインクリエートコマンドに基づいて、QoSドメインクリエートコマンドによって指定された容量を有するQoSドメインを作成することができる。この場合、コントローラ4は、図2の共通ブロック群602のうちの、指定された容量に対応する個数のブロックを、このQoSドメイン用に確保(予約)してもよい。ホスト2がQoSドメインクリエートコマンドを送信する度に、新たなQoSドメインが作成される。
【0077】
コントローラ4は、共通ブロック群602に加え、各QoSドメインに対応するアクティブブロックリスト(アクティブブロックプール)も管理することができる。
各ブロックの状態は、有効データを格納しているアクティブブロック(クローズ状態のブロック)と、有効データを格納しておらず書き込み先ブロックとして再使用可能なフリーブロックとに大別される。あるQoSドメインにおいては、アクティブブロックである各ブロックは、このQoSドメインに対応するアクティブブロックリストによって管理される。一方、各QoSドメインの各フリーブロックは、共通ブロック群602によって管理される。
【0078】
あるQoSドメインIDを指定するライトコマンドをホスト2から受信した時、コントローラ4は、共通ブロック群602内の一つのブロック(フリーブロック)を選択し、選択されたブロックを、このQoSドメインに書き込み先ブロックとして割り当てる。さらに、コントローラ4は、この書き込み先ブロック内の位置(書き込み先位置)を決定する。書き込み先ブロック内の書き込み先位置は、ページ書き込み順序の制約および不良ページ等を考慮して決定される。そして、コントローラ4は、ホスト2からのデータを、書き込み先ブロック内の書き込み先位置に書き込む。
【0079】
この書き込み先ブロック全体がユーザデータで満たされたならば、コントローラ4は、この書き込み先ブロックをこのQoSドメインのアクティブブロックリスト(アクティブブロックプール)に移動する。そして、コントローラ4は、共通ブロック群602内の一つのブロック(フリーブロック)を再び選択し、選択されたブロックをこのQoSドメインに新たな書き込み先ブロックとして割り当てる。
【0080】
あるQoSドメインに割り当て可能なブロックの数の上限は、このQoSドメインの容量に対応するブロックの個数までに制限される。共通ブロック群602から一つのブロックがこのQoSドメインに割り当てられると、コントローラ4は、このQoSドメインに割り当て可能なブロックの現在の個数を1だけ減らす。このQoSドメインの一つのブロックを指定する上述のリユースコマンドまたはイレーズコマンドによってこのブロックが共通ブロック群602に返却されると、コントローラ4は、このQoSドメインに割り当て可能なブロックの現在の個数を1だけ増やす。
【0081】
図7は、フラッシュストレージデバイス3からホスト2に送られるアドレス記録要求を示す。
アドレス記録要求は、ライトコマンドに関連付けられたライトデータが書き込まれたNAND型フラッシュメモリ5内の記憶位置(物理記憶位置)を示す物理アドレスをホスト2に通知するために使用される。このアドレス記録要求は、QoSドメインID、タグ、物理アドレス、長さを含んでもよい。
【0082】
QoSドメインIDは、ライトデータが書き込まれたQoSドメインを識別する識別子である。タグは、図6のライトコマンドに含まれていたタグである。物理アドレスは、ライトコマンドに関連付けられたライトデータが書き込まれた物理記憶位置を示す。物理アドレスは、ブロックアドレスとオフセットとによって表される。長さは、書き込まれたライトデータの長さを示す。
【0083】
フラッシュストレージデバイス3から受信されるアドレス記録要求に基づいて、ホスト2は、ライトデータが書き込まれた記憶位置を示す物理アドレス(ブロックアドレス、オフセット)がこのライトデータのタグ(例えばLBA)に関連付けられるように、このQoSドメインに対応するLUTを更新することができる。また、ホスト2は、各QoSドメインに対応するLUTの内容に基づいて、各QoSドメインで使用されているブロック毎に有効/無効管理情報を管理することができる。あるブロックに対応する有効/無効管理情報は、このブロックに格納されている複数のデータそれぞれが有効データであるか無効データであるかを示す。
【0084】
図8は、フラッシュストレージデバイス3に適用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス3にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドID、QoSドメインID、物理アドレス、長さ、リードバッファアドレスを含んでもよい。
【0085】
コマンドIDはこのコマンド(このリードコマンド)の固有の識別子である。QoSドメインIDは、読み出されるべきデータが格納されているQoSドメインを識別する識別子である。物理アドレスは、読み出されるべきデータが格納されている物理記憶位置を示す。物理アドレスは、ブロックアドレスとオフセットとによって表される。このブロックアドレスは、読み出し対象のブロックのブロックアドレスである。オフセットは、読み出し対象のブロック内の読み出し対象の記憶位置を示す。長さは、読み出されるべきデータの長さを示す。リードバッファアドレスは、読み出されたデータが転送されるべきホストメモリ(ホスト2のリードバッファ)内の位置を示す。
【0086】
図9は、QoSドメインクリエートコマンドを示す。
QoSドメインクリエートコマンドは、QoSドメインを作成するためのコマンドである。このQoSドメインクリエートコマンドは、コマンドID、QoSドメインID、容量を含んでもよい。
コマンドIDはこのコマンド(このQoSドメインクリエートコマンド)の固有の識別子である。QoSドメインIDは、作成すべきQoSドメインの識別子である。容量は、作成すべきQoSドメイン用に確保すべき容量を示す。コントローラ4は、この容量に対応する個数のブロックを共通ブロック群602から確保し、このQoSドメインIDを指定するライトコマンドに応じて、この確保されたブロックのうちの一つのブロックをこのQoSドメイン用の書き込み先ブロックとして割り当てる。
【0087】
図10は、フラッシュストレージデバイス3からホスト2に送られるライトバッファ解放要求を示す。
ライトバッファ解放要求は、NAND型フラッシュメモリ5への書き込みが終了することによってNAND型フラッシュメモリ5から読み出し可能になったデータが格納されているライトバッファ内の領域を解放するために使用される。ライトバッファ解放要求は、ライトコマンドIDを含んでいてもよい。ライトコマンドIDは、解放可能なライトデータに対応するライトコマンドの識別子である。例えば、あるライトコマンドに関連付けられたライトデータの書き込みが終了した場合、フラッシュストレージデバイス3のコントローラ4は、このライトコマンドの識別子(コマンドID)を含むライトバッファ解放要求をホスト2に送信してもよい。あるいは、ライトバッファ解放要求は、ライトバッファ内の解放可能領域を示す記憶位置情報を含んでいてもよい。
【0088】
図11は、物理アドレスを規定するブロックアドレスおよびオフセットを示す。
ブロックアドレスはある一つのブロックBLKを指定する。各ブロックBLKは、図11に示されているように、複数のページ(ここでは、ページ0~ページn)を含む。
ページサイズ(各ページのユーザデータ格納領域)が16Kバイトであり、粒度(Grain)が4KBのサイズであるケースにおいては、このブロックBLKは、4×(n+1)個の領域に論理的に分割される。
【0089】
オフセット+0はページ0の最初の4KB領域を示し、オフセット+1はページ0の2番目の4KB領域を示し、オフセット+2はページ0の3番目の4KB領域を示し、オフセット+3はページ0の4番目の4KB領域を示す。
オフセット+4はページ1の最初の4KB領域を示し、オフセット+5はページ1の2番目の4KB領域を示し、オフセット+6はページ1の3番目の4KB領域を示し、オフセット+7はページ1の4番目の4KB領域を示す。
【0090】
図12は、スーパーブロックが使用されるケースにおけるブロックアドレスとオフセットとの関係を示す。
ここでは、図示を簡単化するために、ある一つのスーパーブロックSB#1が4つのブロックBLK#11、BLK#21、BLK#31、BLK#41から構成されている場合が想定されている。スーパーブロックSB#1のブロックアドレス(スーパーブロックアドレス)はSB#1である。4つのブロックBLK#11、BLK#21、BLK#31、BLK#41は、異なる4個のNAND型フラッシュメモリチップからそれぞれ選択されたブロックであってもよい。
【0091】
コントローラ4は、ブロックBLK#11のページ0、ブロックBLK#21のページ0、ブロックBLK#31のページ0、ブロックBLK#41のページ0、ブロックBLK#11のページ1、ブロックBLK#21のページ1、ブロックBLK#31のページ1、ブロックBLK#41のページ1、…という順序でデータを書き込む。
【0092】
オフセット+0はブロックBLK#11のページ0の最初の4KB領域を示し、オフセット+1はブロックBLK#11のページ0の2番目の4KB領域を示し、オフセット+2はブロックBLK#11のページ0の3番目の4KB領域を示し、オフセット+3はブロックBLK#11のページ0の4番目の4KB領域を示す。
【0093】
オフセット+4はブロックBLK#21のページ0の最初の4KB領域を示し、オフセット+5はブロックBLK#21のページ0の2番目の4KB領域を示し、オフセット+6はブロックBLK#21のページ0の3番目の4KB領域を示し、オフセット+7はブロックBLK#21のページ0の4番目の4KB領域を示す。
【0094】
同様に、オフセット+12はブロックBLK#41のページ0の最初の4KB領域を示し、オフセット+13はブロックBLK#41のページ0の2番目の4KB領域を示し、オフセット+14はブロックBLK#41のページ0の3番目の4KB領域を示し、オフセット+15はブロックBLK#41のページ0の4番目の4KB領域を示す。
【0095】
オフセット+16はブロックBLK#11のページ1の最初の4KB領域を示し、オフセット+17はブロックBLK#11のページ1の2番目の4KB領域を示し、オフセット+18はブロックBLK#11のページ1の3番目の4KB領域を示し、オフセット+19はブロックBLK#11のページ1の4番目の4KB領域を示す。
【0096】
オフセット+20はブロックBLK#21のページ1の最初の4KB領域を示し、オフセット+21はブロックBLK#21のページ1の2番目の4KB領域を示し、オフセット+22はブロックBLK#21のページ1の3番目の4KB領域を示し、オフセット+23はブロックBLK#21のページ1の4番目の4KB領域を示す。
【0097】
同様に、オフセット+28はブロックBLK#41のページ1の最初の4KB領域を示し、オフセット+29はブロックBLK#41のページ1の2番目の4KB領域を示し、オフセット+30はブロックBLK#41のページ1の3番目の4KB領域を示し、オフセット+31はブロックBLK#41のページ1の4番目の4KB領域を示す。
【0098】
例えば、あるLBA(LBAx)を指定するライトコマンドに対応する4Kバイトデータをオフセット+8に対応する位置に書き込む場合には、コントローラ4は、タグ(=LBAx)、ブロック番号(=SB#1)、オフセット(=+8)、長さ(=1)をこのライトコマンドに対するアドレス記録要求としてホスト2に返してもよい。
【0099】
図13は、フラッシュストレージデバイス3によって管理される複数のQoSドメインを示す。
図13では、QoSドメイン#0、QoSドメイン#1、QoSドメイン#2、…、QoSドメイン#n-1が既に作成されている場合が明示されている。図13では、これらQoSドメインは四角によって表されている。あるQoSドメインを表す四角の縦幅は、このQoSドメインの容量を表している。
【0100】
ユーザアプリケーション#0は、QoSドメイン#0のQoSドメインID#0を含むリード/ライトコマンドを使用して、QoSドメイン#0をリード/ライトアクセスすることができる。同様に、ユーザアプリケーション#n-1は、QoSドメイン#n-1のQoSドメインID#n-1を含むリード/ライトコマンドを使用して、QoSドメイン#n-1をリード/ライトアクセスすることができる。
【0101】
図14は、ホスト2とフラッシュストレージデバイス3とによって実行されるデータ書き込み処理を示す。
(1)ホスト2においては、ホストFTL701が実行される。このホストFTL701は、LBAのようなタグとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングをLUTを使用して管理する。あるユーザアプリケーションからのライト要求に応じて、ホストFTL701は、このユーザアプリケーションに対応するQoSドメインのQoSドメインIDを指定するライトコマンドをフラッシュストレージデバイス3に送信する。ホストFTL701は、QoSドメインIDのみを指定すればよく、データが書き込まれるべきブロックおよびデータが書き込まれるべきページを指定する必要は無い。このため、ホストFTL701は、フラッシュストレージデバイス3内の不良ブロック、不良ページなどを管理する必要がなくなる。
【0102】
(2)フラッシュストレージデバイス3のコントローラ4は、複数のQoSドメイン601によって共有される共通ブロック群(フリーブロック群)602のうちの一つのブロックを選択する。コントローラ4は、この選択したブロックを、受信されたライトコマンドによって指定されたQoSドメインIDを有するQoSドメイン用の書き込み先ブロックとして割り当てる。共通ブロック群(フリーブロック群)602においては、不良ブロック以外のフリーブロック群のみが管理されていてもよい。例えば、最小プログラム/イレーズサイクル数を有するブロックが共通ブロック群602から選択されてもよい。そして、コントローラ4は、この書き込み先ブロックをデータが書き込まれるべきブロックとして決定し、さらに、データが書き込まれるべき、この書き込み先ブロック内の書き込み先位置を決定する。なお、上述したように、既にこのQoSドメイン用の書き込み先ブロックが割り当てられているならば、コントローラ4は、この既に割り当てられている書き込み先ブロックをデータが書き込まれるべきブロックとして決定すればよく、共通ブロック群602から一つのブロックをこのQoSドメイン用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。
【0103】
(3)コントローラ4は、決定された書き込み先ブロックを示すブロックアドレスと決定した書き込み先位置を示すオフセットとを含む物理アドレス記録要求をホスト2に送信して、このライトコマンドに関連付けられたライトデータが書き込まれる物理アドレスをホスト2に通知する。
【0104】
(4)コントローラ4は、ライトコマンドに含まれるライトバッファアドレスに基づいて、ホスト2のライトバッファ702からライトデータを取得する。ライトバッファ702からのライトデータの取得はDMA転送を使用して実行されてもよい。そして、コントローラ4は、ライトデータを書き込み先ブロック内の書き込み先位置に書き込むデータ書き込み動作を実行する。
【0105】
(5)ライトデータの書き込みが終了してこのライトデータがNAND型フラッシュメモリ5から読み出し可能になった後、コントローラ4は、このライトデータが格納されているライトバッファ702内の領域を解放するための解放要求をホスト2に送出する。この解放要求は、上述したように、書き込みが完了したライトデータに対応するライトコマンドの識別子を含んでいてもよい。あるいは、この解放要求は、このライトデータの格納位置を示すライトバッファアドレス、このライトデータの長さを含んでいてもよい。ホスト2は、この解放要求に応じて、このライトデータが格納されているライトバッファ702内の領域を解放する。このライトバッファ702内の解放された領域は他のライトデータの格納等のために利用可能となる。
【0106】
図15は、同じライトデータをNAND型フラッシュメモリ5に複数回転送することを含む複数回の書き込みステップによって実行されるデータ書き込み動作を示す。
ここでは、4つのワード線を往復する場合のフォギー・ファイン書き込み動作を例示する。また、ここでは、NAND型フラッシュメモリ5が、メモリセル当たりに4ビットのデータを格納するQLC-フラッシュである場合を想定する。NAND型フラッシュメモリ5内の一つの特定の書き込み先ブロック(ここでは、書き込み先ブロックBLK#1)に対するフォギー・ファイン書き込み動作は以下のように実行される。
【0107】
(1)まず、4ページ(P0~P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に転送され、この書き込み先ブロックBLK#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0~P3)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0108】
(2)次いで、次の4ページ(P4~P7)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先ブロックBLK#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4~P7)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0109】
(3)次いで、次の4ページ(P8~P11)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先ブロックBLK#1内のワード線WL2に接続された複数のメモリセルに、これら4ページ(P8~P11)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0110】
(4)次いで、次の4ページ(P12~P15)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先ブロックBLK#1内のワード線WL3に接続された複数のメモリセルに、これら4ページ(P12~P15)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0111】
(5)ワード線WL3に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL0に戻り、ワード線WL0に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL0に対するフォギー書き込み動作で使用された4ページ(P0~P3)分のライトデータと同じ4ページ(P0~P3)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、この書き込み先ブロックBLK#1内のワード線WL0に接続された複数のメモリセルに、これら4ページ(P0~P3)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP0~P3に対するフォギー・ファイン書き込み動作が終了する。この結果、これら4ページ(P0~P3)分のデータの読み出しが可能となる。
【0112】
(6)次いで、次の4ページ(P16~P19)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先ブロックBLK#1内のワード線WL4に接続された複数のメモリセルに、これら4ページ(P16~P19)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0113】
(7)ワード線WL4に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL1に戻り、ワード線WL1に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL1に対するフォギー書き込み動作で使用された4ページ(P4~P7)分のライトデータと同じ4ページ(P4~P7)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、この書き込み先ブロックBLK#1内のワード線WL1に接続された複数のメモリセルに、これら4ページ(P4~P7)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP4~P7に対するフォギー・ファイン書き込み動作が終了する。この結果、4ページ(P4~P7)分のデータの読み出しが可能となる。
【0114】
(8)次いで、次の4ページ(P20~P23)分のライトデータがこのNAND型フラッシュメモリ5にページ単位で転送され、この書き込み先ブロックBLK#1内のワード線WL5に接続された複数のメモリセルに、これら4ページ(P20~P23)分のライトデータを書き込むためのフォギー書き込み動作が実行される。
【0115】
(9)ワード線WL5に接続された複数のメモリセルに対するフォギー書き込み動作が終了すると、書き込み対象のワード線はワード線WL2に戻り、ワード線WL2に接続された複数のメモリセルに対するファイン書き込み動作の実行が可能となる。そして、ワード線WL2に対するフォギー書き込み動作で使用された4ページ(P8~P11)分のライトデータと同じ4ページ(P8~P11)分のライトデータがページ単位でNAND型フラッシュメモリ5に再び転送され、この書き込み先ブロックBLK#1内のワード線WL2に接続された複数のメモリセルに、これら4ページ(P8~P11)分のライトデータを書き込むためのファイン書き込み動作が実行される。これにより、ページP8~P11に対するフォギー・ファイン書き込み動作が終了する。この結果、4ページ(P8~P11)分のデータの読み出しが可能となる。
【0116】
図16は、ホスト2とフラッシュストレージデバイス3とによって実行されるデータ読み出し処理を示す。
(1)ホストFTL701があるユーザアプリケーションからのリード要求を受信した場合、ホストFTL701は、ホストFTL701内のLUTを参照して、このリード要求によって指定されるLBAのようなタグに対応する物理アドレスを取得する。ホストFTL701は、このユーザアプリケーションに対応するQoSドメインのQoSドメインIDと、取得した物理アドレス(ブロックアドレスとオフセット)と、長さと、リードバッファアドレスとを指定するリードコマンドを、フラッシュストレージデバイス3に送信する。
【0117】
(2)コントローラ4がこのリードコマンドを受信した場合、コントローラ4は、このリードコマンドによって指定されるブロックアドレスとオフセットに基づいて、NAND型フラッシュメモリ5からデータを読み出す。そして、コントローラ4は、この読み出したデータを、DMA転送を使用して、リードバッファアドレスによって指定されるホスト2のリードバッファ703内の位置に転送する。
【0118】
図17は、リードコマンドによって指定されたデータの書き込み動作が終了していない場合に、このデータをホスト2のライトバッファから読み出すデータ読み出し処理を示す。
(1)ホストFTL701があるユーザアプリケーションからのリード要求を受信した場合、ホストFTL701は、ホストFTL701内のLUTを参照して、このリード要求によって指定されるLBAのようなタグに対応する物理アドレスを取得する。ホストFTL701は、このユーザアプリケーションに対応するQoSドメインのQoSドメインIDと、取得した物理アドレス(ブロックアドレスとオフセット)と、長さと、リードバッファアドレスとを指定するリードコマンドを、フラッシュストレージデバイス3に送信する。
【0119】
(2)コントローラ4がこのリードコマンドを受信した場合、コントローラ4は、このリードコマンドによって指定されるブロックアドレスとオフセットと長さとに基づいて、リードコマンドによって指定された読み出し対象データの書き込み動作が終了しているか否かを判定する。指定されるブロックアドレスを有するブロックがクローズ状態のブロックであるならば、リードコマンドによって指定された読み出し対象データの書き込み動作が終了していると判定される。
【0120】
一方、指定されるブロックアドレスを有するブロックがオープン状態のブロックであるならば、このブロックの現在の書き込み先ページ範囲に基づいて、読み出し対象データの書き込み動作が終了しているか否かが判定される。読み出し対象データが格納されているこのブロック内の位置が現在の書き込み先ページ範囲よりも先行するページに属しているならば、読み出し対象データの書き込み動作が終了していると判定される。読み出し対象データが格納されているこのブロック内の位置が現在の書き込み先ページ範囲内のいずれかのページに属しているならば、読み出し対象データの書き込み動作が終了していないと判定される。
【0121】
読み出し対象データの書き込み動作が終了しておらずこの読み出し対象データをNAND型フラッシュメモリ5から読み出すことができない場合、コントローラ4は、DMA転送を使用して、読み出し対象データをホスト2のライトバッファから読み出す。各オープン状態のブロック(書き込み先ブロック)に書き込まれるライトデータ部それぞれに対応するライトバッファ内の位置は、書き込み先ブロック毎に用意されたライトバッファアドレスリストを使用して管理されてもよい。ある書き込み先ブロックに対応するライトバッファアドレスリストにおいては、この書き込み先ブロックに書き込むべきことが決定されたライトデータ毎に、このライトデータが格納されているライトバッファアドレスとこのライトデータに対応する書き込み先位置を示すオフセットとが記録されてもよい。コントローラ4は、リードコマンド内のブロックアドレスを有する書き込み先ブロックに対応するライトバッファアドレスリストを参照することによって、読み出し対象データが格納されているライトバッファアドレスを特定してもよい。
【0122】
(3)コントローラ4は、ライトバッファから読み出したデータを、DMA転送を使用して、リードバッファアドレスによって指定されるホスト2のリードバッファ703内の位置に転送する。
図18は、フラッシュストレージデバイス3のコントローラ4によって管理される、複数のQoSドメインと共通フラッシュブロックプールとの関係を示す。
【0123】
図18においては、図示の簡単化のために、QoSドメイン#0とQoSドメイン#n-1の2つのQoSドメインのみが例示されている。共通フラッシュブロックプール801は、複数のQoSドメインによって共有される上述の共通ブロック群602を管理するためのリストである。
【0124】
QoSドメイン#0のフラッシュブロックプール#0は、QoSドメイン#0に属するアクティブブロックそれぞれを管理するための上述のアクティブブロックリストである。
コントローラ4がQoSドメイン#0のQoSドメインID#0を指定するライトコマンドを受信した場合、コントローラ4は、QoSドメイン#0用の書き込み先ブロック(オープンブロック)が割り当て済みであるか否かを判定する。
【0125】
書き込み先ブロック(オープンブロック)が割り当て済みでないならば、コントローラ4は、共通フラッシュブロックプール801の内のフリーブロックをQoSドメイン#0用の書き込み先ブロック(オープンブロック)として割り当てる。そして、コントローラ4は、この書き込み先ブロック内の書き込み先位置を決定し、このライトコマンドに関連付けられたライトデータを、この書き込み先ブロック内のこの書き込み先位置に書き込む。
【0126】
一方、書き込み先ブロック(オープンブロック)が既に割り当て済みならば、コントローラ4は、この書き込み先ブロック内の書き込み先位置を決定し、このライトコマンドに関連付けられたライトデータを、この書き込み先ブロック内のこの書き込み先位置に書き込む。
【0127】
この書き込み先ブロック全体がホストからのデータで満たされると、コントローラ4は、この書き込み先ブロックをフラッシュブロックプール#0によって管理するとともに(クローズ)、共通フラッシュブロックプール801の内のフリーブロックをQoSドメイン#0用の新たな書き込み先ブロック(オープンブロック)として割り当てる。
【0128】
コントローラ4がQoSドメインID#0を示すコピー元QoSドメインと、コピー元ブロックのブロックアドレスと、QoSドメインID#0を示すコピー先QoSドメインとを指定するコピーコマンドを受信した場合、コントローラ4は、QoSドメイン#0用のコピー先ブロック(オープンブロック)が割り当て済みであるか否かを判定する。
【0129】
コピー先ブロック(オープンブロック)が割り当て済みでないならば、コントローラ4は、共通フラッシュブロックプール801の内のフリーブロックをQoSドメイン#0用のコピー先ブロック(オープンブロック)として割り当てる。そして、コントローラ4は、コピー元ブロックのブロックアドレスに基づいて、フラッシュブロックプール#0内のブロックをコピー元ブロックとして選択し、この選択したコピー元ブロック内のデータをコピー先ブロックにコピーする。上述のマップデータがホスト2から受信されている場合には、このマップデータに基づき、コントローラ4は、選択したコピー元ブロック内の有効データそれぞれをコピー先ブロックにコピーする。
【0130】
一方、コピー先ブロックが既に割り当て済みならば、コントローラ4は、選択したコピー元ブロック内のデータをこのコピー先ブロックにコピーする。
コピー先ブロック全体がホストからのデータで満たされると、コントローラ4は、このコピー先ブロックをフラッシュブロックプール#0によって管理するとともに(クローズ)、共通フラッシュブロックプール801の内のフリーブロックをQoSドメイン#0用の新たなコピー先ブロック(オープンブロック)として割り当てる。
【0131】
更新データの書き込みまたはデータコピー動作によってQoSドメイン#0に属する一つのブロック内のデータ全てが無効データになった場合、ホスト2は、このブロックのブロックアドレスを指定するリユースコマンドをフラッシュストレージデバイス3に送信する。
【0132】
コントローラ4がこのリユースコマンドをホスト2から受信した場合、コントローラ4は、このリユースコマンドによって指定されるフラッシュブロックプール#0内のブロックを共通フラッシュブロックプール801に返却して、このブロックを任意のQoSドメイン用の新たな書き込み先ブロック(またはコピー先ブロック)として再使用可能な状態にする。
【0133】
なお、更新データの書き込みまたはデータコピー動作によってQoSドメイン#0に属する一つのブロック内のデータ全てが無効データになった場合、ホスト2は、このブロックのブロックアドレスを指定するイレーズコマンドをフラッシュストレージデバイス3に送信してもよい。コントローラ4がこのイレーズコマンドをホスト2から受信した場合、コントローラ4は、このイレーズコマンドによって指定されるフラッシュブロックプール#0内のブロックに対する消去動作を実行し、且つこのブロックを共通フラッシュブロックプール801に返却して、このブロックを任意のQoSドメイン用の新たな書き込み先ブロック(またはコピー先ブロック)として再使用可能な状態にする。
【0134】
QoSドメイン#n-1においても、コントローラ4は、書き込み先ブロック/コピー先ブロックの割り当て、データで満たされた書き込み先ブロック/コピー先ブロックをフラッシュブロックプール#n-1によって管理する処理、リユースコマンド/イレーズコマンドによって指定されるブロックを共通フラッシュブロックプール801に返却する処理等を実行する。
【0135】
図19は、コントローラ4によって管理される、コマンド数カウンタを含むブロック管理テーブル32を示す。
例えば、ブロックBLK#1に対応するブロック管理テーブル32においては、ブロックBLK#1の状態を管理するためのメタデータとして、コマンド数カウンタ(以下、イン・フライトコマンド数カウンタと称する)が追加されている。
【0136】
イン・フライトコマンド数カウンタはライトコマンド毎に用意されていてもよい。この場合、あるライトコマンドIDに対応するイン・フライトコマンド数カウンタ値は、このライトコマンドに関連付けられたライトデータが格納されているライトバッファ内の領域が解放可能か否かを判定するために使用される。コントローラ4は、各書き込み先ブロックについてイン・フライトコマンド数カウンタを管理する。
【0137】
あるライトコマンドが受信され、このライトコマンドに関連付けられたライトデータを書き込み先ブロックBLK#1に書き込む場合を想定する。この場合、書き込み先ブロックBLK#1に対応するブロック管理テーブル32においては、このライトコマンドのライトコマンドIDに対応するイン・フライトコマンド数カウンタが管理される。
【0138】
コントローラ4は、このイン・フライトコマンド数カウンタ値を、データ書き込み動作に必要な書き込みステップの回数に1を加えた値に初期設定する。このライトコマンドに関連付けられたライトデータを、2回の書き込みステップを含むフォギー・ファイン書き込み動作によって書き込み先ブロックBLK#1に書き込むケースにおいては、データ書き込み動作に必要な書き込みステップの回数は2である。なお、書き込みステップの回数に1を加えるのは、書き込みエラーによって再書き込み動作が必要とされる場合があるからである。
【0139】
1回の書き込みステップの終了の度に、コントローラ4は、このイン・フライトコマンド数カウンタ値を1減少する。
データ書き込み動作が終了してライトデータが読み出し可能となった場合、コントローラ4は、このイン・フライトコマンド数カウンタ値を1減少する。
【0140】
データ書き込み動作の実行中に、このライトデータ(このライトデータの一部分または全て)を読み出し対象データとして指定するリードコマンドがホスト2から受信された場合、コントローラ4は、このイン・フライトコマンド数カウンタ値を1増やす。
リードコマンドによって指定された読み出し対象データをライトバッファから読み出してホスト2に返す読み出し動作が終了した場合、コントローラ4は、このイン・フライトコマンド数カウンタ値を1減少する。
【0141】
書き込みエラーによって再書き込み動作が必要となった場合は、コントローラ4は、このイン・フライトコマンド数カウンタ値を、再書き込み動作に必要な書き込みステップの回数だけ増やす。
イン・フライトコマンド数カウンタ値が零になった場合、コントローラ4は、このライトデータが格納されているライトバッファ内の領域を解放するためのライトバッファ解放要求をホスト2に送信する。このライトバッファ解放要求はこのライトコマンドのコマンドIDを含む。
【0142】
イン・フライトコマンド数カウンタをライトコマンド毎に用意する代わりに、4KBのような最小書き込み単位毎に用意してもよい。イン・フライトコマンド数カウンタが4KBのような最小書き込み単位毎に用意されている場合には、あるライトコマンドに対応するライトデータ全体に対応する複数のイン・フライトコマンド数カウンタ値の全てが零になった時点で、このライトデータが格納されているライトバッファ内の領域を解放するためのライトバッファ解放要求をホスト2に送信してもよい。
【0143】
なお、このように、ライトコマンド単位でライトバッファ解放要求をホスト2に送信する代わりに、4KBのような最小書き込み単位でライトバッファ解放要求をホスト2に送信してもよい。
図20のフローチャートは、コントローラ4によって実行されるイン・フライトコマンド数カウンタ更新処理の手順を示す。
【0144】
コントローラ4は、まず、イン・フライトコマンド数カウンタ値を、データ書き込み動作に必要な書き込みステップの回数(つまりデータ転送回数)に設定する(ステップS11)。そして、コントローラ4は、エラーのための再書き込み処理のために、イン・フライトコマンド数カウンタ値を1増やす(ステップS12)。そして、コントローラ4は、受信されたライトコマンドに関連付けられたライトデータを書き込み先ブロックに書き込みための書き込み動作を開始する(ステップS13)。
【0145】
このライトデータのための一回の書き込みステップが終了する度(ステップS14のYES)、コントローラ4は、イン・フライトコマンド数カウンタ値を1減らし(ステップS15)。そして、コントローラ4は、データ書き込み動作が終了してこの書き込み先ブロックからのライトデータの読み出しが可能になったか否かを判定する(ステップS16)。
【0146】
データ書き込み動作が終了してこの書き込み先ブロックからのライトデータの読み出しが可能になった場合(ステップS16のYES)、コントローラ4は、イン・フライトコマンド数カウンタ値を1減らす(ステップS17)。
データ書き込み動作の実行中に、このライトデータを読み出し対象データとして指定するリードコマンドが受信されたならば(ステップS18のYES)、コントローラ4は、イン・フライトコマンド数カウンタ値を1増やす(ステップS19)。そして、このリードコマンドの実行が完了すると(ステップS20のYES)、コントローラ4は、イン・フライトコマンド数カウンタ値を1減らす(ステップS21)。
【0147】
もし書き込みエラーが発生したならば(ステップS22のYES)、コントローラ4は、このイン・フライトコマンド数カウンタ値を、再書き込み動作に必要な書き込みステップの回数だけ増やす(ステップS23)。
図21のフローチャートは、データ読み出し動作の手順を示す。
【0148】
ホスト2からリードコマンドを受信すると(ステップS21のYES)、コントローラ4は、このリードコマンドによって読み出し対象データとして指定されたデータがNAND型フラッシュメモリ5から読み出し可能であるか否かを判定する(ステップS22)。
【0149】
ステップS22では、コントローラ4は、リードコマンドによって指定されるブロックアドレスを有するブロックがクローズ状態またはオープン状態のいずれであるかを判定する。このブロックがクローズ状態であるならば、読み出し対象データの書き込み動作は既に終了している。したがって、コントローラ4は、読み出し対象データがNAND型フラッシュメモリ5から読み出し可能であると判定する。
【0150】
一方、このブロックがオープン状態であるならば、コントローラ4は、読み出し対象データが格納されているこのブロック内の位置が、このブロックの現在の書き込み先ページ範囲よりも先行するページに属しているか否かを判定する。読み出し対象データが格納されているこのブロック内の位置が、このブロックの現在の書き込み先ページ範囲よりも先行するページに属しているならば、読み出し対象データの書き込み動作は既に終了している。したがって、コントローラ4は、読み出し対象データがNAND型フラッシュメモリ5から読み出し可能であると判定する。
【0151】
読み出し対象データが格納されているこのブロック内の位置が、このブロックの現在の書き込み先ページ範囲よりも先行するページに属しておらず、現在の書き込み先ページ範囲内のいずれかのページに属しているならば、読み出し対象データの書き込み動作は終了していない。したがって、コントローラ4は、読み出し対象データがNAND型フラッシュメモリ5から読み出し可能ではないと判定する。
【0152】
読み出し対象データがNAND型フラッシュメモリ5から読み出し可能である場合には(ステップS21のYES)、コントローラ4は、読み出し対象データをNAND型フラッシュメモリ5から読み出し、読み出したデータをホスト2に返す(ステップS23)。
【0153】
読み出し対象データがNAND型フラッシュメモリ5から読み出し可能でない場合には(ステップS21のN0)、つまりライトデータの書き込み動作が終了してこのライトデータが読み出し可能となる前にこのライトデータ(このライトデータの一部分又は全て)を読み出し対象データとして指定するリードコマンドが受信された場合には、コントローラ4は、このライトデータが格納されているライトバッファ内の領域の解放を禁止する(ステップS24)。この場合、たとえこのライトデータの書き込み動作が終了してこのライトデータが読み出し可能となっても、コントローラ4は、このライトデータが格納されているライトバッファ内の領域を解放するためのライトバッファ解放要求をホスト2に送信しない。ステップS24では、このライトデータのライトコマンドに対応するこのイン・フライトコマンド数カウンタ値を1増やすことによって、このライトデータが格納されているライトバッファ内の領域の開放を禁止してもよい。
【0154】
コントローラ4は、この読み出し対象データをホスト2のライトバッファから読み出し、読み出した読み出し対象データをホスト2に返す(ステップS25)。このステップS25のデータ読み出し動作が終了すると、つまりこのリードコマンドの実行が完了すると、コントローラ4は、このライトデータが格納されているライトバッファ内の領域の開放禁止状態を解除する(ステップS26)。ステップS26では、このライトデータのライトコマンドに対応するこのイン・フライトコマンド数カウンタ値を1減らすことによって、このライトデータが格納されているライトバッファ内の領域の開放禁止状態を解除してもよい。
【0155】
図22のフローチャートは、データ書き込み動作とライトバッファ解放処理の手順を示す。
ライトデータが格納されているライトバッファ内の記憶位置を示す記憶位置情報を指定するライトコマンドをホスト2から受信すると(ステップS31)、コントローラ4は、この記憶位置情報に基づいて、このライトデータをライトバッファから取得する(ステップS32)。コントローラ4は、NAND型フラッシュメモリ5に含まれる複数のブロックから選択された書き込み先ブロック内の書き込み先位置に書き込む書き込み動作を実行する(ステップS33)。
【0156】
この書き込み動作が終了してこのライトデータが読み出し可能になった場合(ステップS34のYES)、コントローラ4は、このライトデータ(このライトデータの一部分又は全て)を読み出し対象データとして指定するリードコマンドが既に受信され、且つこの読み出し対象データをライトバッファから読み出す動作とこの読み出した読み出し対象データをホスト2に返す動作とを含む読み出し動作が実行中であるか否かを判定する(ステップS35)。
【0157】
この読み出し動作が実行中である場合(ステップS35のYES)、コントローラ4は、このライトデータが格納されているライトバッファ内の領域を解放を禁止する。つまり、コントローラ4は、このライトデータが格納されているライトバッファ内の領域を解放するためのライトバッファ解放要求をホスト2に送信せず、ライトバッファ解放要求の発行を、このリードコマンドが完了するまで、つまりこの読み出し動作が終了するまで待機する(ステップS36、S37)。
【0158】
そして、この読み出し動作が終了した場合(ステップS37のYES)、つまりこのリードコマンドの実行が完了した場合、コントローラ4は、このライトデータが格納されているライトバッファ内の領域を解放するためのライトバッファ解放要求をホスト2に送信する(ステップS38)。
【0159】
図23のフローチャートは、リードコマンドによって指定されたデータがフラッシュメモリおよびホストのライトバッファの双方から読み出し可能である場合に実行されるデータ読み出し動作の手順を示す。
ホスト2からリードコマンドを受信すると(ステップS41のYES)、コントローラ4は、このリードコマンドによって指定された読み出し対象データが書き込み先ブロックから読み出し可能であり且つこの読み出し対象データがライトバッファに存在しているか否かを判定する(ステップS42)。
【0160】
例えば、ライトデータを書き込み先ブロックに書き込む書き込み動作が終了してからこのライトデータに対応するライトバッファ解放要求の送信までの期間中に、このライトデータ(このライトデータの一部分または全て)を読み出し対象データとして指定するリードコマンドが受信された場合には、コントローラ4は、この読み出し対象データが書き込み先ブロックから読み出し可能であり且つこの読み出し対象データがライトバッファに存在していると判定してもよい。
【0161】
この読み出し対象データが書き込み先ブロックから読み出し可能であり且つこの読み出し対象データがライトバッファに存在している場合(ステップS42のYES)、コントローラ4は、読み出し対象データをライトバッファから読み出す動作と読み出した読み出し対象データをホスト2に返す動作とを含む読み出し動作を実行する(ステップS43)。
【0162】
通常、ホスト2とフラッシュストレージデバイス3との間のデータ転送は高速に実行することができる。したがって、読み出し対象データをライトバッファから読み出すことにより、リードレイテンシを低減することが可能となる。
このリードコマンドの実行が管理用するまで、つまりこの読み出し動作が終了するまで、コントローラ3は、このライトデータが格納されているライトバッファ内の領域の解放を禁止する(ステップS44)。すなわち、読み出し動作の実行中は、コントローラ3は、このライトデータが格納されているライトバッファ内の領域を解放するためのライトバッファ解放要求をホスト2に送信しない。これにより、このライトデータの一部分または全てである読み出し対象データの読み出し動作が終了するまで、この読み出し対象データをライトバッファに維持することができる。
【0163】
図24のフローチャートは、リードコマンドによって指定されたデータがフラッシュメモリおよびホストのライトバッファの双方から読み出し可能である場合に実行されるデータ読み出し動作の別の手順を示す。
上述の図23のフローチャートで説明したデータ読み出し動作は、リードレイテンシの低減を優先するために、読み出し対象データをライトバッファから読み出した。図24のフローチャートで説明するデータ読み出し動作では、読み出し可能なデータが格納されているライトバッファ内の領域をできるだけ早期に解放することを優先するために、読み出し対象データは、ライトバッファからではなく、以下説明するように、書き込み先ブロックから読み出される。
【0164】
ホスト2からリードコマンドを受信すると(ステップS51のYES)、コントローラ4は、このリードコマンドによって指定された読み出し対象データが書き込み先ブロックから読み出し可能であり且つこの読み出し対象データがライトバッファに存在しているか否かを判定する(ステップS52)。
【0165】
例えば、ライトデータを書き込み先ブロックに書き込む書き込み動作が終了してからこのライトデータに対応するライトバッファ解放要求の送信までの期間中に、このライトデータ(このライトデータの一部分または全て)を読み出し対象データとして指定するリードコマンドが受信された場合には、コントローラ4は、この読み出し対象データが書き込み先ブロックから読み出し可能であり且つこの読み出し対象データがライトバッファに存在していると判定してもよい。
【0166】
この読み出し対象データが書き込み先ブロックから読み出し可能であり且つこの読み出し対象データがライトバッファに存在している場合(ステップS52のYES)、コントローラ4は、読み出し対象データを書き込み先ブロックから読み出す動作と読み出した読み出し対象データをホスト2に返す動作とを含む読み出し動作を実行する(ステップS53)。この場合、コントローラ4は、この読み出し対象データとして指定されたライトデータをライトバッファ内に維持する必要は無いので、この読み出し動作の開始の前に、またはこの読み出し動作の実行中に、このライトデータが格納されているライトバッファ内の領域を解放するための解放要求をホスト2に送信することができる。
【0167】
本実施形態のフラッシュストレージデバイス3においては、上述のライトコマンドのみならず、以下のタイプのライトコマンドを適用することもできる。
<ブロックアドレスを指定するライトコマンド>
このライトコマンドは、コマンドID、QoSドメインID、物理アドレス、タグ、長さ、ライトバッファアドレス、等を含んでもよい。
【0168】
コマンドIDはこのコマンド(このライトコマンド)の固有の識別子である。QoSドメインIDは、データが書き込まれるべきQoSドメインを一意に識別可能な識別子である。あるエンドユーザに対応するアプリケーションからのライト要求に応じてホスト2から送信されるライトコマンドは、このエンドユーザに対応するQoSドメインを指定するQoSドメインIDを含む。
【0169】
物理アドレスは、データが書き込まれるべきブロックのブロックアドレスを指定し、このブロック内の位置(例えば、ページアドレスおよびページ内のオフセット)は指定しない。
タグは、書き込まれるべきライトデータを識別するための識別子である。このタグは、上述したように、LBAのような論理アドレスであってもよいし、キー・バリュー・ストアのキーであってもよいし、このキーのハッシュ値であってもよい。
【0170】
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、上述の粒度(Grain)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはバイトによって指定されてもよい。
ライトバッファアドレスは、書き込まれるべきライトデータが格納されているホストメモリ(ホスト2のライトバッファ)内の位置を示す。ライトバッファアドレスは、データポインタとしても参照される。
【0171】
ホスト2からライトコマンドを受信した時、コントローラ4は、ライトコマンドによって指定されたブロックアドレスを有するブロック内の書き込み先位置を決定する。この書き込み先位置は、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ4は、ホスト2からのデータを、ライトコマンドによって指定されたブロックアドレスを有するこのブロック内のこの決定された書き込み先位置に書き込む。
【0172】
このタイプのライトコマンドを使用するケースにおいては、ホスト2は、ブロック割り当てコマンドをフラッシュストレージデバイス3に送出することによって、特定のQoSドメイン用のブロックの割り当てをフラッシュストレージデバイス3に要求してもよい。ブロック割り当てコマンドはQoSドメインIDを指定する。コントローラ4がブロック割り当てコマンドを受信した場合、コントローラ4は、共通ブロック群602内の一つのブロック(フリーブロック)を選択し、選択されたブロックを、このQoSドメインに書き込み先ブロックとして割り当てる。そして、コントローラ4は、この割り当てられたブロックのブロックアドレスをホスト2に通知する。ホスト2は、この割り当てられたブロックのブロックアドレスを指定するライトコマンドをフラッシュストレージデバイス3に送信することができる。
【0173】
<ブロックアドレスおよびオフセットを指定するライトコマンド>
このライトコマンドは、コマンドID、QoSドメインID、物理アドレス、タグ、長さ、ライトバッファアドレス、等を含んでもよい。
コマンドIDはこのコマンド(このライトコマンド)の固有の識別子である。QoSドメインIDは、データが書き込まれるべきQoSドメインを一意に識別可能な識別子である。あるエンドユーザに対応するアプリケーションからのライト要求に応じてホスト2から送信されるライトコマンドは、このエンドユーザに対応するQoSドメインを指定するQoSドメインIDを含む。
【0174】
物理アドレスは、データが書き込まれるべきブロックのブロックアドレスと、このブロック内書き込み先の位置を示すオフセット(例えば、ページアドレスおよびページ内のオフセット)とを指定する。
タグは、書き込まれるべきライトデータを識別するための識別子である。このタグは、上述したように、LBAのような論理アドレスであってもよいし、キー・バリュー・ストアのキーであってもよいし、このキーのハッシュ値であってもよい。
【0175】
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、上述の粒度(Grain)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはバイトによって指定されてもよい。
ライトバッファアドレスは、書き込まれるべきライトデータが格納されているホストメモリ(ホスト2のライトバッファ)内の位置を示す。
【0176】
以上説明したように、本実施形態によれば、リードコマンドによって読み出し対象データとして指定されたデータの書き込み動作が終了しておらず、このデータがNAND型フラッシュメモリ5から読み出す事ができない場合には、ホスト2のライトバッファからこのデータが読み出されてホスト2に返される。したがって、ホスト2は、リードすべきデータがNAND型フラッシュメモリ5から読み出し可能であるか否かをチェックする処理およびライトバッファに向けたリード要求とフラッシュストレージデバイス3に向けたリードコマンドを選択的に発行する処理を行わずとも、フラッシュストレージデバイス3に向けたリードコマンドそれぞれを発行するというシンプルな処理を行うだけで、所望のデータをフラッシュストレージデバイス3から受け取ることができる。
【0177】
さらに、このリードコマンドの実行が完了するまで、このライトデータが格納されているライトバッファ内の領域の解放は禁止される。したがって、ライトバッファから読み出すべきことが決定されたデータ、またはライトバッファから読み出し中のデータなどがライトバッファから消失されてしまうという、ライトバッファ解放要求とリードコマンドとの衝突(解放要求/リードコマンド衝突)を回避することができる。そして、このリードコマンドの実行が完了した後に、このライトデータが格納されているライトバッファ内の領域を解放するための解放要求がホストに送信される。したがって、ライトバッファの解放制御のためのホスト側の負担も軽減することができる。
【0178】
なお、本実施形態では、ライトデータの書き込み動作が終了してこのライトデータがNAND型フラッシュメモリ5から読み出し可能となる前に、このライトデータを読み出し対象データとして指定するリードコマンドがホスト2から受信された場合、コントローラ4は、ライトバッファからこの読み出し対象データを読み出した。しかし、別の実施形態では、ライトデータの書き込み動作が終了してこのライトデータがNAND型フラッシュメモリ5から読み出し可能となる前に、このライトデータを読み出し対象データとして指定するリードコマンドがホスト2から受信された場合、コントローラ4は、ライトバッファからこの読み出し対象データをリードコマンドに対する応答として返すように要求する転送要求をホスト2に送信してもよい。この転送要求は、読み出し対象データが格納されているライトバッファ内の位置を示す記憶位置情報を含んでいてもよい。
【0179】
この転送要求の受信に応じて、ホスト2のホストFTL701は、ライトバッファから読み出し対象データを読み出し、読み出した読み出し対象データをリードバッファに転送する。そして、ホストFTL701は、転送要求に対するレスポンスをフラッシュストレージデバイス3に返す。コントローラ4は、このレスポンスの受信をこのリードコマンドの実行の完了として扱ってもよい。この場合、このレスポンスが受信されるまで、コントローラ4は、このライトデータが格納されているライトバッファ内の領域の解放を禁止する。このレスポンスの受信の後、コントローラ4は、ライトデータが格納されているライトバッファ内の領域を解放するための解放要求をホスト2に送信する。この場合、コントローラ4は、ライトデータの書き込み動作が終了してライトデータがNAND型フラッシュメモリ5から読み出し可能となり、且つこのレスポンスが受信された後、ライトデータが格納されているライトバッファ内の領域を解放するための解放要求をホスト2に送信してもよい。
【0180】
また、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive Random Access Memory)、PRAM(Phase change Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
【0181】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0182】
2…ホスト、3…フラッシュストレージデバイス、4…コントローラ、5…NAND型フラッシュメモリ、21…ライト制御部、22…リード制御部、23…コピー制御部、24…ライトバッファ解放制御部。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24