(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-27
(45)【発行日】2023-12-05
(54)【発明の名称】メモリシステム
(51)【国際特許分類】
G06F 12/02 20060101AFI20231128BHJP
G06F 12/00 20060101ALI20231128BHJP
【FI】
G06F12/02 510A
G06F12/00 597U
G06F12/02 570K
(21)【出願番号】P 2022178942
(22)【出願日】2022-11-08
(62)【分割の表示】P 2019013221の分割
【原出願日】2019-01-29
【審査請求日】2022-11-08
(73)【特許権者】
【識別番号】318010018
【氏名又は名称】キオクシア株式会社
(74)【代理人】
【識別番号】110001737
【氏名又は名称】弁理士法人スズエ国際特許事務所
(72)【発明者】
【氏名】菅野 伸一
【審査官】北村 学
(56)【参考文献】
【文献】特開2017-162067(JP,A)
【文献】特開2019-008730(JP,A)
【文献】特開2003-317489(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 12/00 - 12/06
(57)【特許請求の範囲】
【請求項1】
ホストに接続可能であって、
複数のブロックを含む不揮発性メモリと、
前記ホストから受信される領域作成コマンドそれぞれに応じて、各々が前記複数のブロックの部分集合である複数の領域を作成し、前記複数の領域のうちの一つの領域を作成する度に、前記一つの領域に対応する領域作成コマンドによって指定された容量に対応する個数のブロックを、前記複数のブロックのうちのフリーブロックの集合である共通フリーブロック群から、前記一つの領域に対して確保し、
前記複数の領域に1対1の関係でそれぞれ対応付けられた複数の識別子のうちの第1の識別子と、ライトデータに対応する論理アドレスとを含むライトコマンドを前記ホストから受信した場合、前記第1の識別子に対応する領域に対して前記共通フリーブロック群から確保されたブロックのうちの一つのブロックを前記第1の識別子に対応する領域用の第1の書き込み先ブロックとして割り当て、
前記ライトデータを前記第1の書き込み先ブロックに書き込み、前記第1の書き込み先ブロックのブロックアドレスと、前記ライトデータが書き込まれた、前記第1の書き込み先ブロック内の記憶位置を示すオフセットとを指定するアドレス記録要求を前記ホストに通知し、
前記第1の識別子に対応する領域に属するブロックのうちのコピー元ブロックのブロックアドレスを指定し、且つ前記第1の識別子を、前記複数の領域のうちのコピー先対象領域の識別子として指定するコピーコマンドを前記ホストから受信した場合、前記第1の識別子に対応する領域に対して前記共通フリーブロック群から確保されたブロックのうちの一つのブロックを前記第1の識別子に対応する領域用の第1のコピー先ブロックとして割り当て、
前記コピー元ブロックから前記第1のコピー先ブロックにコピー対象データをコピーし、前記第1のコピー先ブロックのブロックアドレスと、前記コピー対象データがコピーされた、前記第1のコピー先ブロック内の位置を示すオフセットとを指定するアドレス変更要求を前記ホストに通知する
ように構成されるコントローラと、
を備えるメモリシステム。
【請求項2】
前記コントローラは、前記ライトデータの一部分である第1のデータ部分の書き込みによって前記第1の書き込み先ブロック全体がデータで満たされた場合、前記第1の識別子に対応する領域に対して前記共通フリーブロック群から確保されたブロックのうちの一つのブロックを前記第1の識別子に対応する領域用の第2の書き込み先ブロックとして割り当て、前記ライトデータの残り部分である第2のデータ部分を前記第2の書き込み先ブロックに書き込むように構成される請求項1記載のメモリシステム。
【請求項3】
前記コントローラは、前記第1の書き込み先ブロックの前記ブロックアドレスと、前記第1のデータ部分が書き込まれた、前記第1の書き込み先ブロック内の記憶位置を示すオフセットと、前記第2の書き込み先ブロックのブロックアドレスと、前記第2のデータ部分が書き込まれた、前記第2の書き込み先ブロック内の記憶位置を示すオフセットとを指定するアドレス記録要求を前記ホストに通知するように構成される請求項2記載のメモリシステム。
【請求項4】
前記コントローラは、前記コピー元ブロック内の前記コピー対象データの一部分である第3のデータ部分のコピーによって前記第1のコピー先ブロック全体がデータで満たされた場合、前記第1の識別子に対応する領域に対して前記共通フリーブロック群から確保されたブロックのうちの一つのブロックを前記第1の識別子に対応する領域用の第2のコピー先ブロックとして割り当て、前記コピー対象データの残り部分である第4のデータ部分を前記第2のコピー先ブロックにコピーするように構成される請求項1記載のメモリシステム。
【請求項5】
前記コントローラは、前記第1のコピー先ブロックの前記ブロックアドレスと、前記第3のデータ部分がコピーされた、前記第1のコピー先ブロック内の記憶位置を示すオフセットと、前記第2のコピー先ブロックのブロックアドレスと、前記第4のデータ部分がコピーされた、前記第2のコピー先ブロック内の記憶位置を示すオフセットとを指定するアドレス変更要求を前記ホストに通知するように構成される請求項4記載のメモリシステム。
【請求項6】
前記複数のブロックの各々は前記複数の領域のいずれか一つに属し、同じブロックが異なる領域に同時に属さない請求項1記載のメモリシステム。
【請求項7】
前記コピーコマンドが前記コピー元ブロックに含まれる有効データそれぞれをコピーするための第1タイプのコピーコマンドである場合、前記コントローラは、前記ホストから通知される、前記コピー元ブロックに含まれるデータが有効データまたは無効データのいずれであるかを示すマップ情報に基づいて、前記コピー元ブロック内の有効データそれぞれを前記第1のコピー先ブロックにコピーし、コピーされた有効データ毎に、有効データに対応する論理アドレスと前記第1のコピー先ブロックのブロックアドレスと有効データが格納されている前記第1のコピー先ブロック内の記憶位置を示すオフセットとを指定するアドレス変更要求を前記ホストに通知するように構成される請求項1記載のメモリシステム。
【請求項8】
前記コピーコマンドが、前記コピー元ブロックの前記ブロックアドレスと、前記コピー対象データが格納されている、前記コピー元ブロック内の記憶位置を示すオフセットと、前記コピー対象データの長さとを指定する第2タイプのコピーコマンドである場合、前記コントローラは、前記第2タイプのコピーコマンドによって指定される前記オフセットおよび長さに基づいて、前記コピー対象データを前記コピー元ブロックから前記第1のコピー先ブロックにコピーするように構成される請求項1記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【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】
本発明が解決しようとする課題は、データ配置に関するホスト側の負担を軽減することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【0007】
実施形態によれば、ホストに接続可能なメモリシステムは、複数のブロックを含む不揮発性メモリと、コントローラとを具備する。前記コントローラは、前記ホストから受信される領域作成コマンドそれぞれに応じて、各々が前記複数のブロックの部分集合である複数の領域を作成し、前記複数の領域のうちの一つの領域を作成する度に、前記一つの領域に対応する領域作成コマンドによって指定された容量に対応する個数のブロックを、前記複数のブロックのうちのフリーブロックの集合である共通フリーブロック群から、前記一つの領域に対して確保する。前記コントローラは、前記複数の領域に1対1の関係でそれぞれ対応付けられた複数の識別子のうちの第1の識別子と、ライトデータに対応する論理アドレスとを含むライトコマンドを前記ホストから受信した場合、前記第1の識別子に対応する領域に対して前記共通フリーブロック群から確保されたブロックのうちの一つのブロックを前記第1の識別子に対応する領域用の第1の書き込み先ブロックとして割り当てる。前記コントローラは、前記ライトデータを前記第1の書き込み先ブロックに書き込み、前記第1の書き込み先ブロックのブロックアドレスと、前記ライトデータが書き込まれた、前記第1の書き込み先ブロック内の記憶位置を示すオフセットとを指定するアドレス記録要求を前記ホストに通知する。前記コントローラは、前記第1の識別子に対応する領域に属するブロックのうちのコピー元ブロックのブロックアドレスを指定し、且つ前記第1の識別子を、前記複数の領域のうちのコピー先対象領域の識別子として指定するコピーコマンドを前記ホストから受信した場合、前記第1の識別子に対応する領域に対して前記共通フリーブロック群から確保されたブロックのうちの一つのブロックを前記第1の識別子に対応する領域用の第1のコピー先ブロックとして割り当てる。前記コントローラは、前記コピー元ブロックから前記第1のコピー先ブロックにコピー対象データをコピーし、前記第1のコピー先ブロックのブロックアドレスと、前記コピー対象データがコピーされた、前記第1のコピー先ブロック内の位置を示すオフセットとを指定するアドレス変更要求を前記ホストに通知する。
【図面の簡単な説明】
【0008】
【
図1】ホストと実施形態に係るメモリシステムとの関係を示すブロック図。
【
図2】同実施形態のメモリシステムとホストとの間の役割分担を説明するための図。
【
図3】同実施形態のメモリシステムの構成例を示すブロック図。
【
図4】同実施形態のメモリシステムに設けられた、NANDインタフェースと複数のNAND型フラッシュメモリチップとの関係を示すブロック図。
【
図5】複数の物理ブロックの集合によって構築される一つのブロック(スーパーブロック)の構成例を示す図。
【
図6】同実施形態のメモリシステムに適用されるQoSドメインクリエートコマンド(領域作成コマンド)を説明するための図。
【
図7】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【
図8】同実施形態のメモリシステムからホストに送られるアドレス記録要求を説明するための図。
【
図9】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【
図10】同実施形態のメモリシステムに適用されるコピーコマンドを説明するための図。
【
図11】同実施形態のメモリシステムに適用されるセット・有効マップコマンドを説明するための図。
【
図12】同実施形態のメモリシステムからホストに送られるアドレス変更要求を説明するための図。
【
図13】同実施形態のメモリシステムに適用される別のタイプのコピーコマンドを説明するための図。
【
図14】アドレス記録要求、アドレス変更要求およびリードコマンドの各々に含まれる物理アドレスを規定するブロックアドレスおよびオフセットを説明するための図。
【
図15】スーパーブロックが使用される場合におけるブロックアドレスとオフセットとの関係を説明するための図。
【
図16】同実施形態のメモリシステムによって管理される複数のQoSドメインを説明するための図。
【
図17】同実施形態のメモリシステムによって実行されるQoSドメイン作成処理の手順を示すシーケンス図。
【
図18】ホストと同実施形態のメモリシステムとによって実行されるデータ書き込み処理を説明するためのブロック図。
【
図19】ホストと同実施形態のメモリシステムとによって実行されるデータ読み出し処理を説明するためのブロック図。
【
図20】ホストと同実施形態のメモリシステムとによって実行されるデータコピー処理を説明するためのブロック図。
【
図21】同実施形態のメモリシステムによって管理される、複数のQoSドメインと共通フラッシュブロックプールとの関係を示すブロック図。
【
図22】ライトコマンドに関連付けられたライトデータの一部分の書き込みによって現在の書き込み先ブロックがデータで満たされた場合に同実施形態のメモリシステムによって実行される書き込み先ブロック割り当て動作を説明するための図。
【
図23】ホストから通知されるマップ情報に基づいて、同実施形態のメモリシステムによって実行される有効データコピー動作を説明するための図。
【
図24】コピー対象データの一部分の書き込みによって現在のコピー先ブロックがデータで満たされた場合に同実施形態のメモリシステムによって実行されるコピー先ブロック割り当て動作を説明するための図。
【
図25】同実施形態のメモリシステムによって実行される書き込み先ブロック割り当て動作およびデータ書き込み動作の手順を示すフローチャート。
【
図26】同実施形態のメモリシステムによって実行されるコピー先ブロック割り当て動作およびデータコピー動作の手順を示すフローチャート。
【発明を実施するための形態】
【0009】
以下、図面を参照して、実施形態を説明する。
まず、
図1を参照して、本実施形態に係るメモリシステムとホストとの関係を説明する。
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、NANDフラッシュ技術ベースのフラッシュストレージデバイス3として実現されている。
【0010】
ホスト(ホストデバイス)2は、複数のフラッシュストレージデバイス3を制御するように構成されている。ホスト2は、複数のフラッシュストレージデバイス3によって構成されるフラッシュアレイをストレージとして使用するように構成された情報処理装置によって実現される。この情報処理装置はパーソナルコンピュータであってもよいし、サーバコンピュータであってもよい。
【0011】
なお、フラッシュストレージデバイス3は、ストレージアレイ内に設けられる複数のストレージデバイスの一つとして利用されてもよい。ストレージアレイは、サーバコンピュータのような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のストレージ(例えば複数のフラッシュストレージデバイス3)を制御するコントローラを含む。フラッシュストレージデバイス3がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス3のホストとして機能してもよい。
【0012】
以下では、サーバコンピュータのような情報処理装置がホスト2として機能する場合を例示して説明する。
ホスト(サーバ)2と複数のフラッシュストレージデバイス3は、インタフェース50を介して相互接続される(内部相互接続)。この相互接続のためのインタフェース50としては、これに限定されないが、PCI Express(PCIe)(登録商標)、NVM Express(NVMe)(登録商標)、Ethernet(登録商標)、NVMe over Fabrics(NVMeOF)等を使用し得る。
【0013】
ホスト2として機能するサーバコンピュータの典型例としては、データセンター内のサーバコンピュータ(以下、サーバと称する)が挙げられる。
ホスト2がデータセンター内のサーバによって実現されるケースにおいては、このホスト(サーバ)2は、ネットワーク60を介して複数のエンドユーザ端末(クライアント)61に接続されてもよい。ホスト2は、これらエンドユーザ端末61に対して様々なサービスを提供することができる。
【0014】
ホスト(サーバ)2によって提供可能なサービスの例には、(1)システム稼働プラットフォームを各クライアント(各エンドユーザ端末61)に提供するプラットホーム・アズ・ア・サービス(PaaS)、(2)仮想サーバのようなインフラストラクチャを各クライアント(各エンドユーザ端末61)に提供するインフラストラクチャ・アズ・ア・サービス(IaaS)、等がある。
【0015】
複数の仮想マシンが、このホスト(サーバ)2として機能する物理サーバ上で実行されてもよい。ホスト(サーバ)2上で走るこれら仮想マシンの各々は、この仮想マシンに対応するクライアント(エンドユーザ端末61)に各種サービスを提供するように構成された仮想サーバとして機能することができる。各仮想マシンにおいては、この仮想マシンに対応するエンドユーザ端末61によって使用される、オペレーティングシステムおよびユーザアプリケーションが実行される。
【0016】
ホスト(サーバ)2においては、フラッシュトランスレーションレイヤ(ホストFTL)も実行される。このホストFTLは、アクセス対象のデータを識別するためのデータ識別子(タグ)それぞれとフラッシュストレージデバイス3内の不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理するアドレス変換テーブルであるルックアップテーブル(LUT)を含む。ホストFTLは、このLUTを使用することによって、フラッシュストレージデバイス3内の不揮発性メモリ上のデータ配置を知ることができる。
【0017】
フラッシュストレージデバイス3は、NAND型フラッシュメモリのような不揮発性メモリを含む。不揮発性メモリは、各々が複数のページを含む複数のブロックを含む。これらブロックの各々はデータを消去する単位であり、複数のページの各々はデータの書き込みおよび読み出しの単位である。
【0018】
フラッシュストレージデバイス3は、ローレベルアブストラクションを実行することができる。ローレベルアブストラクションは不揮発性メモリのアブストラクションのための機能である。ローレベルアブストラクションは、データ配置を補助する機能等を含む。データ配置を補助する機能の例は、ホスト2からのユーザデータが書き込まれるべき書き込み先ブロックを割り当てる機能、ユーザデータの書き込み先位置(書き込み先ブロック、この書き込み先ブロック内の位置)を決定する機能、ユーザデータが書き込まれたこの書き込み先位置(ブロックアドレス、オフセット)を上位階層(ホスト2)に通知する機能、等を含んでいてもよい。
【0019】
また、データ配置を補助する機能の例は、不揮発性メモリに既に書き込まれているユーザデータがコピーされるべきコピー先ブロックを割り当てる機能、ユーザデータのコピー先位置(コピー先ブロック、このコピー先ブロック内の位置)を決定する機能、ユーザデータがコピーされたこのコピー先位置(ブロックアドレス、オフセット)を上位階層(ホスト2)に通知する機能、等を含んでいてもよい。
【0020】
フラッシュストレージデバイス3は、ホスト2から受信される様々なコマンドを実行する。これらコマンドには、フラッシュストレージデバイス3内の不揮発性メモリにデータを書き込むためのライトコマンド、不揮発性メモリからデータを読み出すためのリードコマンドが含まれる。本実施形態においては、各リードコマンドは、読み出すべきデータが格納されている記憶位置を示す物理アドレスを指定する。この物理アドレスは、読み出し対象のブロックのブロックアドレスと、この読み出し対象のブロック内の読み出し対象の記憶位置を示すオフセット(ブロック内オフセット)とによって表される。
【0021】
フラッシュストレージデバイス3は、読み出し対象のブロックのブロックアドレスとこの読み出し対象のブロック内の読み出し対象の記憶位置を示すオフセットとを指定するリードコマンドそれぞれをホスト2から受信し、受信された各リードコマンドに応じてデータ読み出し動作を実行する。
【0022】
図2はフラッシュストレージデバイス3とホスト2との間の役割分担を示す。
ホスト(サーバ)2においては、複数のエンドユーザにそれぞれ対応する複数の仮想マシン401が実行される。各仮想マシン401においては、対応するエンドユーザによって使用される、オペレーティングシステムおよびユーザアプリケーション402が実行される。
【0023】
また、ホスト(サーバ)2においては、複数のユーザアプリケーション402にそれぞれ対応する複数のI/Oサービス403が実行される。これらI/Oサービス403には、論理ブロックアドレス(LBA)ベースのブロックI/Oサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各I/Oサービス403は、タグそれぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するルックアップテーブル(LUT)を含む。
【0024】
ここで、タグとは、アクセス対象のデータを識別可能な識別子を意味する。このタグの典型的な例は、これに限定されないが、LBAのような論理アドレスである。あるいは、キー・バリュー・ストアのキー、またはこのキーのハッシュ値、等がタグとして利用されてもよい。
【0025】
フラッシュストレージデバイス3の物理アドレスは、フラッシュストレージデバイス3に含まれる不揮発性メモリ内の記憶位置(物理記憶位置)を特定するためのアドレスである。
LBAベースのブロックI/Oサービスにおいては、論理アドレス(LBA)それぞれとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングを管理するLUTが使用されてもよい。
【0026】
一方、キー・バリュー・ストアサービスにおいては、キー(またはキーのハッシュ値)それぞれとこれらキーに対応するデータが格納されているフラッシュストレージデバイス3の物理アドレスそれぞれとこれらキーに対応するデータそれぞれのデータ長との間のマッピングを管理するLUTが使用されてもよい。
【0027】
各エンドユーザは、使用すべきアドレッシング方法(LBA、キー・バリュー・ストアのキー、このキーのハッシュ値、等)を選択することができる。
ホスト(サーバ)2においては、複数の仮想マシン401にそれぞれ対応する複数のライトバッファ(WB)404が管理されていてもよい。あるユーザアプリケーション402からのライトデータは、このユーザアプリケーション402に対応する仮想マシン401用のライトバッファ(WB)404に一時的に格納されてもよい。
【0028】
ホスト(サーバ)2からフラッシュストレージデバイス3へのコマンドの送信およびフラッシュストレージデバイス3からホスト(サーバ)2へのコマンド完了のレスポンス等の返送は、ホスト(サーバ)2およびフラッシュストレージデバイス3の各々に存在するI/Oキュー500を介して実行される。
【0029】
フラッシュストレージデバイス3は、フラッシュストレージデバイス3内の不揮発性メモリを論理的に分割することによって得られる複数の領域それぞれをQoSドメイン601として管理する。これらQoSドメイン601の各々は、不揮発性メモリに含まれる複数のブロックの部分集合である。不揮発性メモリに含まれる複数のブロックの各々は一つのQoSドメイン601のみに属し、同じブロックが異なるQoSドメイン601に同時に属することはない。
【0030】
これらQoSドメイン601は、QoSドメインIDと称される識別子によってそれぞれ識別される。これらQoSドメインIDは、これら複数の領域(複数のQoSドメイン)をそれぞれアクセスするための複数の識別子として使用される。
本実施形態においては、各ライトコマンドは、データが書き込まれるべき領域(QoSドメイン)の識別子(QoSドメインID)を指定する。あるQoSドメインIDを指定するライトコマンドをホスト2から受信した場合、フラッシュストレージデバイス3は、複数のQoSドメイン601によって共有される共通ブロック群602のうちの一つのブロックを選択し、この選択したブロックを、このQoSドメインIDを有するQoSドメイン用の書き込み先ブロックとして割り当てる。
【0031】
ここで、書き込み先ブロックとは、データが書き込まれるべきブロックを意味する。共通ブロック群602は、複数のQoSドメイン601によって共有されるフリーブロックの集合を含む共通フリーブロック群である。
フリーブロックとは、新たな書き込み先ブロックとして再使用(再割り当て)可能な状態(フリー状態)のブロックを意味する。フリーブロックの典型的な例は、有効データを格納していないブロックである。有効データとは、LBAのようなタグに関連付けられている最新のデータを意味する。つまり、ホスト2のLUTから最新のデータとしてリンクされているデータは有効データである。また、無効データとは、LBAのようタグに関連付けられていないデータを意味する。ホスト2のLUTからリンクされていないデータは無効データである。例えば、あるLBAに対応する更新データがフラッシュストレージデバイス3に書き込まれた場合には、このLBAに対応する以前のデータは無効データとなる。
【0032】
そして、フラッシュストレージデバイス3は、受信されたライトコマンドに関連付けられたデータを、このQoSドメイン用に割り当てられた書き込み先ブロックに書き込む。なお、利用可能な書き込み先ブロックが既にこのQoSドメイン用に割り当てられているならば、共通ブロック群602のうちの一つのブロック(フリーブロック)をこのQoSドメイン用の書き込み先ブロックとして割り当てるという上述の動作を行う必要は無い。フラッシュストレージデバイス3は、受信されたライトコマンドに関連付けられたデータを、既に割り当てられているこの書き込み先ブロック内の次の利用可能ページに書き込む。
【0033】
受信されたライトコマンドに関連付けられたデータが書き込み先ブロックに書き込まれると、フラッシュストレージデバイス3は、このデータのタグと、このデータが書き込まれた不揮発性メモリ内の記憶位置を示す物理アドレス(ブロックアドレス、オフセット)とをホスト2にアドレス記録要求として送出する。ブロックアドレスは、この書き込み先ブロックを識別するための識別子である。通常、不揮発性メモリは複数の不揮発性メモリチップによって構成されるので、あるブロックのブロックアドレスは、不揮発性メモリチップのチップ番号と、このチップ内のブロック番号とによって表されてもよい。オフセットは、この書き込み先ブロック内の記憶位置を示す。
【0034】
このアドレス記録要求に応じて、ホスト2は、このデータのタグにこの物理アドレス(ブロックアドレス、オフセット)が関連付けられるようにLUTを更新することができる。
各QoSドメインに含まれるブロックの各々について、ホスト2は、各ブロックに格納されているデータが有効データまたは無効データのいずれであるかを、LUTを使用して管理することができる。また、ホスト2は、既にデータが書き込まれている一つのブロックを新たな書き込み先ブロックとして再使用可能な状態(フリーブロック)に遷移させるためのコマンド(リユースコマンド)をフラッシュストレージデバイス3に送信することができる。
【0035】
図3は、フラッシュストレージデバイス3の構成例を示す。
フラッシュストレージデバイス3は、コントローラ4および不揮発性メモリ(NAND型フラッシュメモリ)5を備える。フラッシュストレージデバイス3は、ランダムアクセスメモリ、例えば、DRAM6も備えていてもよい。
【0036】
NAND型フラッシュメモリ5は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。NAND型フラッシュメモリ5は、2次元構造のフラッシュメモリであってもよいし、3次元構造のフラッシュメモリであってもよい。
NAND型フラッシュメモリ5のメモリセルアレイは、複数のブロックBLK0~BLKm-1を含む。ブロックBLK0~BLKm-1の各々は複数のページ(ここではページP0~Pn-1)を含む。ブロックBLK0~BLKm-1は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページP0~Pn-1は、データ書き込み動作およびデータ読み込み動作の単位である。
【0037】
コントローラ4は、ToggleNANDフラッシュインタフェース、オープンNANDフラッシュインタフェース(ONFI)のような、NANDインタフェース13を介して、不揮発性メモリであるNAND型フラッシュメモリ5に電気的に接続されている。コントローラ4は、NAND型フラッシュメモリ5を制御するように構成されたメモリコントローラとして動作する。このコントローラ4は、System-on-a-chip(SoC)のような回路によって実現されてもよい。
【0038】
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型フラッシュメモリチップを並列動作させることができる。
【0039】
消去動作は、一つのブロック(物理ブロック)の単位で実行されてもよいし、並列動作可能な複数の物理ブロックの集合を含むブロックグループ(スーパーブロック)の単位で実行されてもよい。一つのブロックグループ(一つのスーパーブロック)は、これに限定されないが、NAND型フラッシュメモリチップ#1~#32から一つずつ選択される計32個の物理ブロックを含んでいてもよい。なお、NAND型フラッシュメモリチップ#1~#32の各々はマルチプレーン構成を有していてもよい。例えば、NAND型フラッシュメモリチップ#1~#32の各々が、2つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、NAND型フラッシュメモリチップ#1~#32に対応する64個のプレーンから一つずつ選択される計64個の物理ブロックを含んでいてもよい。
【0040】
図5には、32個の物理ブロック(ここでは、NAND型フラッシュメモリチップ#1内の物理ブロックBLK2、NAND型フラッシュメモリチップ#2内の物理ブロックBLK3、NAND型フラッシュメモリチップ#3内の物理ブロックBLK7、NAND型フラッシュメモリチップ#4内の物理ブロックBLK4、NAND型フラッシュメモリチップ#5内の物理ブロックBLK6、…、NAND型フラッシュメモリチップ#32内の物理ブロックBLK3)を含む一つのスーパーブロック(SB)が例示されている。
【0041】
書き込み先ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【0042】
次に、
図3のコントローラ4の構成について説明する。
コントローラ4は、ホストインタフェース11、CPU12、NANDインタフェース13、およびDRAMインタフェース14、直接メモリアクセスコントローラ(DMAC)15、ECCエンコード/デコード部16等を含む。これらホストインタフェース11、CPU12、NANDインタフェース13、DRAMインタフェース14、DMAC15、ECCエンコード/デコード部16は、バス10を介して相互接続される。
【0043】
このホストインタフェース11は、ホスト2との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース11は、例えば、PCIeコントローラ(NVMeコントローラ)であってもよい。あるいは、フラッシュストレージデバイス3がEthernet(登録商標)を介してホスト2に接続される構成においては、ホストインタフェース11は、NVMe over Fabrics(NVMeOF)コントローラであってもよい。
【0044】
ホストインタフェース11は、ホスト2から様々なコマンドを受信する。これらコマンドには、QoSドメインクリエートコマンド、ライトコマンド、リードコマンド、コピーコマンド、イレーズコマンド、リユースコマンド、他の様々なコマンドが含まれる。
【0045】
CPU12は、ホストインタフェース11、NANDインタフェース13、DRAMインタフェース14、DMAC15、ECCエンコード/デコード部16を制御するように構成されたプロセッサである。CPU12は、フラッシュストレージデバイス3の電源オンに応答してNAND型フラッシュメモリ5または図示しないROMから制御プログラム(ファームウェア)をDRAM6にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ4内の図示しないSRAM上にロードされてもよい。このCPU12は、ホスト2からの様々なコマンドを実行するためのコマンド処理等を実行することができる。CPU12の動作は、CPU12によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ4内の専用ハードウェアによって実行してもよい。
【0046】
CPU12は、QoSドメイン作成部21、ライト制御部22、リード制御部23、およびコピー制御部24として機能することができる。なお、これらQoSドメイン作成部21、ライト制御部22、リード制御部23、およびコピー制御部24の各々一部または全部も、コントローラ4内の専用ハードウェアによって実現されてもよい。
【0047】
QoSドメイン作成部21は、ホスト2から受信される領域作成コマンド(QoSドメインクリエートコマンド)それぞれに応じて、各々が、NAND型フラッシュメモリ5に含まれる複数のブロックの部分集合である複数の領域(QoSドメイン)を作成する。各QoSドメインクリエートコマンドは、作成すべき一つのQoSドメインの容量を指定するパラメータを含んでいてもよい。QoSドメイン作成部21は、受信されたQoSドメインクリエートコマンドに応じて一つのQoSドメインを作成し、共通ブロック群602のうちの所定個数のブロックをこのQoSドメイン用に確保(予約)する。確保されるべきブロックの数は、受信されたQoSドメインクリエートコマンドによって指定される容量によって決定される。
【0048】
ライト制御部22は、複数のQoSドメインをアクセスするための複数のQoSドメインIDのうちの第1のQoSドメインIDを含むライトコマンドをホスト2から受信した場合、共通ブロック群602のうちの一つのブロックを第1のQoSドメインIDに対応するQoSドメイン用の書き込み先ブロックとして割り当てる。このQoSドメイン用の書き込み先ブロックとして割り当てられるブロックは、物理ブロックであってもよいし、スーパーブロックであってもよい。
【0049】
この場合、ライト制御部22は、共通ブロック群602から、最小プログラム/イレーズサイクルカウントを有するブロック(物理ブロックまたはスーパーブロック)を選択してもよい。これにより、QoSドメイン間でウェアレベリングを実行することができる。利用可能な書き込み先ブロックが既にこのQoSドメイン用に割り当てられているならば、共通ブロック群602のうちの一つのブロックをこのQoSドメイン用の書き込み先ブロックとして割り当てる動作は実行されない。
【0050】
ライト制御部22は、ページ書き込み順序の制約、およびこの書き込み先ブロック内の不良ページ等を考慮して、データが書き込まれるべき、この書き込み先ブロック内の記憶位置を決定する。そして、ライト制御部22は、受信されたライトコマンドに関連付けられたライトデータをこのQoSドメイン用の書き込み先ブロックに書き込む。この場合、ライト制御部22は、ホスト2からのライトデータのみならず、このライトデータとこのライトデータのタグの双方を書き込み先ブロックに書き込むことができる。
【0051】
そして、ライト制御部22は、ライトデータの識別子(タグ)と、この書き込み先ブロックのブロックアドレスと、ライトデータが書き込まれた、この書き込み先ブロック内の記憶位置(書き込み先位置)を示すオフセットとをホスト2に通知する。
一つの物理ブロックが書き込み先ブロックとして割り当てられたケースにおいては、ブロックアドレスは、この物理ブロックを識別するためのブロックアドレスである。このブロックアドレスはチップ番号とこのチップ内のブロック番号とによって表されてもよい。
【0052】
一つのスーパーブロックが書き込み先ブロックとして割り当てられたケースにおいては、ブロックアドレスは、このスーパーブロックを識別するためのブロックアドレス(スーパーブロックアドレスとも云う)である。フラッシュストレージデバイス3内の全てのスーパーブロックに異なるスーパーブロックアドレスが付与されていてもよい。
【0053】
オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット、つまり書き込み先ブロックの先頭に対する書き込み先位置のオフセットを示す。書き込み先ブロックの先頭から書き込み先位置までのオフセットのサイズは、あるサイズを有する粒度の倍数で表されてもよい。あるいは、オフセットは、一つのページのページアドレスと、このページ内のオフセットとによって表されてもよい。
【0054】
同様に、ライト制御部22は、複数のQoSドメインをアクセスするための複数のQoSドメインIDのうちの第2のQoSドメインIDを含むライトコマンドをホスト2から受信した場合、共通ブロック群602のうちの一つのブロックを第2のQoSドメインIDに対応するQoSドメイン用の書き込み先ブロックとして割り当てる。ライト制御部22は、受信されたライトコマンドに関連付けられたライトデータをこのQoSドメイン用の書き込み先ブロックに書き込む。そして、ライト制御部22は、ライトデータの識別子(タグ)と、この書き込み先ブロックのブロックアドレスと、ライトデータが書き込まれた、この書き込み先ブロック内の記憶位置を示すオフセットとをホスト2に通知する。
【0055】
このようにして、本実施形態では、複数のQoSドメインそれぞれに対応する複数の書き込み先ブロックが割り当てられる。そして、あるQoSドメインIDを指定するライトコマンドに関連付けられたライトデータは、このQoSドメインIDに対応するQoSドメイン用の書き込み先ブロックに書き込まれる。また、別のQoSドメインIDを指定するライトコマンドに関連付けられたライトデータは、この別のQoSドメインIDに対応するQoSドメイン用の書き込み先ブロックに書き込まれる。
【0056】
これにより、異なるユーザアプリケーションからのライトデータを異なる書き込み先ブロックに書き込むことができる。よって、複数のユーザアプリケーションからのライトデータを互い異なるブロックに書き込むというデータ配置のためのホスト2側の負担を軽減することができる。
【0057】
さらに、ライト制御部22は、第1のQoSドメインIDを含むライトコマンドの実行中にこの第1のQoSドメインIDに対応するQoSドメイン用の書き込み先ブロック全体がデータで満たされた場合、新たな書き込み先ブロックを自動的に割り当てる動作を実行する。
【0058】
すなわち、第1のQoSドメインIDを含むライトコマンドに関連付けられたライトデータの一部分である第1のデータ部分の書き込みによって第1のQoSドメインIDに対応するQoSドメイン用の現在の書き込み先ブロック全体がデータで満たされた場合、ライト制御部22は、共通ブロック群602のうちの一つのブロックを第1のQoSドメインIDに対応するQoSドメイン用の新たな書き込み先ブロックとして割り当てる。そして、ライト制御部22は、このライトデータの残り部分である第2のデータ部分を、この新たな書き込み先ブロックに書き込む。
【0059】
同様に、第2のQoSドメインIDを含むライトコマンドに関連付けられたライトデータの一部分である第1のデータ部分の書き込みによって第2のQoSドメインIDに対応するQoSドメイン用の現在の書き込み先ブロック全体がデータで満たされた場合、ライト制御部22は、共通ブロック群602のうちの一つのブロックを第2のQoSドメインIDに対応するQoSドメイン用の新たな書き込み先ブロックとして割り当てる。そして、ライト制御部22は、このライトデータの残り部分である第2のデータ部分を、この新たな書き込み先ブロックに書き込む。
【0060】
これにより、たとえライトコマンドの実行中に現在の書き込み先ブロックが使い切られた場合であっても、ホスト2にエラーを通知することなく、このライトコマンドに対応する書き込み動作を継続することができる。よって、データが書き込まれるべきブロックを現在の書き込み先ブロックから別のブロックに変更するためのホスト2側の負担を軽減することができる。また、ホスト2はブロック境界を意識すること無く、ライトコマンドそれぞれを発行することができる。
【0061】
なお、先行するライトコマンドによって現在の書き込み先ブロック内の複数のページの中の幾つかのページにデータが既に書き込まれている場合には、新たなライトコマンドに関連付けられたライトデータは、既にデータが書き込まれているページに後続する一つ以上のページに書き込まれる。あるライトコマンドに関連付けられたライトデータ全体が現在の書き込み先ブロックに書き込まれ、且つ現在の書き込み先ブロックが使い切られた場合には、このQoSドメイン用の書き込み先ブロックが割り当てられていない状態となる。この状態で、このQoSドメインを指定する新たなライトコマンドが受信されると、このQoSドメイン用の新たな書き込み先ブロックが割り当てられる。
【0062】
リード制御部23は、リード対象のQoSドメインのQoSドメインIDと、物理アドレス(すなわち、ブロックアドレスおよびオフセット)とを指定するリードコマンドをホスト2から受信した場合、これらブロックアドレスおよびオフセットに基づいてNAND型フラッシュメモリ5からデータをリードする。リード対象のブロックは、ブロックアドレスによって特定される。このブロック内のリード対象の記憶位置は、オフセットによって特定される。
【0063】
コピー制御部24は、ホスト2から受信されるコピーコマンドに応じて、あるQoSドメイン用に割り当てられているあるブロック内に格納されているデータを、このQoSドメイン用のまたは別のQoSドメイン用のブロック(コピー先ブロック)にコピーする。コピー先ブロックは、不揮発性メモリ内に既に書き込まれているデータが書き込まれるべき(コピーされるべき)書き込み先ブロックである。このコピーコマンドは、コピー元QoSドメインのQoSドメインIDと、コピー元ブロックのブロックアドレスと、コピー先QoSドメインのQoSドメインID(コピー先QoSドメインID)とを指定してもよい。コピー元ブロックは一つの物理ブロックであってもよいし、一つのスーパーブロックであってもよい。
【0064】
例えば、コピー制御部24は、第1のQoSドメインIDに対応するQoSドメインに属するブロックのうちのコピー元ブロックのブロックアドレスと、第1のQoSドメインIDを示すコピー先QoSドメインIDとを含むコピーコマンドをホスト2から受信した場合、共通ブロック602のうちの一つのブロックを、この第1のQoSドメインIDに対応するQoSドメイン用のコピー先ブロックとして割り当てる。このQoSドメイン用のコピー先ブロックとして割り当てられるブロックは、物理ブロックであってもよいし、スーパーブロックであってもよい。
【0065】
この場合、コピー制御部24は、共通ブロック群602から、最小プログラム/イレーズサイクルカウントを有するブロック(物理ブロックまたはスーパーブロック)を選択してもよい。これにより、QoSドメイン間でウェアレベリングを実行することができる。利用可能なコピー先ブロックが既にこのQoSドメイン用に割り当てられているならば、共通ブロック群602のうちの一つのブロックをこのQoSドメイン用のコピー先ブロックとして割り当てる動作は実行されない。
【0066】
コピー制御部24は、コピー元ブロックからコピー先ブロックにコピー対象データをコピーする。そして、コピー制御部24は、コピー対象データの識別子(タグ)と、コピー先ブロックのブロックアドレスと、コピー対象データがコピーされた、コピー先ブロック内の位置を示すオフセットとをホスト2に通知する。
【0067】
このように、第1のQoSドメインIDに対応するQoSドメインにおいては、書き込み先ブロックとは異なる別のブロックがコピー先ブロックとして割り当てられる。これにより、ホスト2の制御なしで、ホスト2からのデータが書き込まれる書き込み先ブロックとNAND型フラッシュメモリ5に既に書き込まれているデータがコピーされるコピー先ブロックとを分離するというデータ配置を実現することができる。
【0068】
また、コピー制御部24は、第2のQoSドメインIDに対応するQoSドメインに属するブロックのうちのコピー元ブロックのブロックアドレスと、第2のQoSドメインIDを示すコピー先QoSドメインIDとを含むコピーコマンドをホスト2から受信した場合、共通ブロック602のうちの一つのブロックを、この第2のQoSドメインIDに対応するQoSドメイン用のコピー先ブロックとして割り当てる。
【0069】
コピー制御部24は、コピー元ブロックからコピー先ブロックにコピー対象データをコピーする。そして、コピー制御部24は、コピー対象データの識別子(タグ)と、コピー先ブロックのブロックアドレスと、コピー対象データがコピーされた、コピー先ブロック内の位置を示すオフセットとをホスト2に通知する。
【0070】
このようにして、本実施形態では、QoSドメイン毎に、書き込み先ブロックと、この書き込み先ブロックとは異なるコピー先ブロックとが割り当てられる。
一般に、ホスト2によって書き込まれた直後のデータ(新しいデータ)ほど更新されやすく、ホスト2によって書き込まれてからの経過時間が長いデータ(古いデータ)ほど、更新されにくい、という傾向がある。コピー対象のデータは、NAND型フラッシュメモリ5に既に書き込まれているデータである。このため、コピー対象のデータは、通常、古いデータである場合が多い。
【0071】
したがって、ホストライトとコピー用のライトとを分離することにより、新しいデータ(高い更新頻度を有するデータ)と古いデータ(低い更新頻度を有するデータ)とが同じブロックに混在されることを抑制することができる。
新しいデータ(高い更新頻度を有するデータ)と古いデータ(低い更新頻度を有するデータ)との混在は、フラッシュストレージデバイス3のライトアンプリフィケーションを増加させる要因となり得る。
【0072】
なぜなら、新しいデータと古いデータとが混在するブロックにおいては、新しいデータの更新によってブロック内の一部の領域だけが早いタイミングで無効化される一方、このブロック内の残りの領域(古いデータ)は有効状態に長い間維持されるからである。
【0073】
もし新しいデータのみによってブロックが満たされていたならば、このブロック内の全てのデータがそれらデータの更新(書き替え)によって、比較的速いタイミングで無効化される可能性が高い。したがって、このブロックは、ガベージコレクション動作を実行すること無しで、このブロックに対する消去動作を実行することのみによって、再使用することが可能となる。
【0074】
一方、古いデータのみによってブロックが満たされているならば、このブロック内の全てのデータは、長い間、有効状態に維持される。したがって、このブロックは、長い間、ガベージコレクション動作の対象とならない可能性が高い。
ライトアンプリフィケーションの増加は、ブロックそれぞれの書き換え回数(プログラム/イレーズサイクルの数)の増加を引き起こす。つまり、ライトアンプリフィケーション(WA)が大きい程、ブロックの書き換え回数が、その書き換え回数の上限値に速く達しやすくなる。この結果、フラッシュストレージデバイス3の寿命の劣化が引き起こされる。
【0075】
本実施形態では、QoSドメイン毎に、書き込み先ブロックと、この書き込み先ブロックとは異なるコピー先ブロックとがフラッシュストレージデバイス3によって割り当てられる。したがって、データが書き込まれるべきブロックとデータがコピーされるべきブロックとを使い分けるためのホスト2側の処理無しで、ライトアンプリフィケーションを低減することができる。
【0076】
さらに、コピー制御部24は、第1のQoSドメインIDに対応するQoSドメインをコピー先QoSドメインとして指定するコピーコマンドの実行中にこの第1のQoSドメインIDに対応するQoSドメイン用のコピー先ブロック全体がデータで満たされた場合、新たなコピー先ブロックを自動的に割り当てる動作を実行する。
【0077】
すなわち、コピー元ブロック内のコピー対象データの一部分である第3のデータ部分のコピーによって第1のQoSドメインIDに対応するQoSドメイン用の現在のコピー先ブロック全体がデータで満たされた場合、コピー制御部24は、共通ブロック群602のうちの一つのブロックを第1のQoSドメインIDに対応するQoSドメイン用の新たなコピー先ブロックとして割り当てる。そして、コピー制御部24は、このコピー対象データの残り部分である第4のデータ部分を、この新たなコピー先ブロックにコピーする。
【0078】
同様に、第2のQoSドメインIDに対応するQoSドメインをコピー先QoSドメインとして指定するコピーコマンドの実行中にこの第2のQoSドメインIDに対応するQoSドメイン用のコピー先ブロック全体がデータで満たされた場合も、コピー制御部24は、この第2のQoSドメインIDに対応するQoSドメイン用の新たなコピー先ブロックを自動的に割り当てる動作を実行する。
【0079】
これにより、たとえコピーコマンドの実行中に現在のコピー先ブロックが使い切られた場合であっても、ホスト2にエラーを通知することなく、このコピーコマンドに対応するコピー動作を継続することができる。よって、データがコピーされるべきブロックを現在のコピー先ブロックから別のブロックに変更するためのホスト2側の負担を軽減することができる。
【0080】
なお、先行するコピーコマンドに基づくデータコピー動作によって現在のコピー先ブロック内の複数のページの中の幾つかのページがデータで満たされている場合には、新たなコピーコマンドに基づくコピー対象データは、既にデータが書き込まれているページに後続する一つ以上のページに書き込まれる。あるコピーコマンドに基づくコピー対象データ全体が現在のコピー先ブロックにコピーされ、且つ現在のコピー先ブロックが使い切られた場合には、このQoSドメイン用のコピー先ブロックが割り当てられていない状態となる。この状態で、このQoSドメインをコピー先QoSドメインとして指定する新たなコピーコマンドが受信されると、このQoSドメイン用の新たなコピー先ブロックが割り当てられる。
【0081】
NANDインタフェース13は、CPU12の制御の下、NAND型フラッシュメモリ5を制御するように構成されたメモリ制御回路である。
DRAMインタフェース14は、CPU12の制御の下、DRAM6を制御するように構成されたDRAM制御回路である。DRAM6の記憶領域は、ブロック管理テーブル32を格納するために使用される。また、DRAM6の記憶領域は、ライトデータ等を一時的に格納するための内部バッファとしても利用され得る。なお、内部バッファがフラッシュストレージデバイス3内に存在しない、または内部バッファの容量がほぼゼロに近い、というバッファレス構成がフラッシュストレージデバイス3に適用されてもよい。
【0082】
ブロック管理テーブル32は、NAND型フラッシュメモリ5内の複数のブロックそれぞれに対応する複数の管理テーブルを含む。各管理テーブルは、この管理テーブルに対応するブロックを管理するための管理情報(メタデータ)を格納するために使用される。メタデータは、これに限定されないが、書き換え回数(プログラム/イレーズサイクルの数)、オープン/クローズ状態、書き込み先ページ範囲、等を含んでいてもよい。オープン/クローズ状態は、このブロックがオープン状態またはクローズ状態のいずれであるかを示す。オープン状態は、このブロックが書き込み先ブロックとして使用中の状態を示す。書き込み先ブロックには、ホスト2からのデータが書き込まれるホスト書き込み用の書き込み先ブロックと、不揮発性メモリ内に既に書き込まれているデータのコピー用の書き込み先ブロック(コピー先ブロック)とがある。
【0083】
クローズ状態は、ブロックがデータで満たされてアクティブブロックとして管理されている状態を示す。書き込み先ページ範囲は、どのページからどのページまでが現在書き込み(プログラム)動作中であるかを示す。
DMAC15は、CPU12の制御の下、ホスト2内のメモリ(ライトバッファ)とDRAM6(内部バッファ)との間のデータ転送を実行する。ホスト2のライトバッファから内部バッファにライトデータを転送すべき場合には、CPU12は、ライトバッファ上の位置を示す転送元アドレス、データサイズ、内部バッファ上の位置を示す転送先アドレスをDMAC15に対して指定する。
【0084】
ECCエンコード/デコード部16は、NAND型フラッシュメモリ5にデータをライトすべき時、書き込むべきライトデータをエンコード(ECCエンコード)することによってこのデータにエラー訂正コード(ECC)を付加する。NAND型フラッシュメモリ5からデータがリードされた時、ECCエンコード/デコード部16は、リードされたデータに付加されているECCを使用して、このデータのエラー訂正を行う(ECCデコード)。
【0085】
図6は、フラッシュストレージデバイス3に適用されるQoSドメインクリエートコマンドを示す。
QoSドメインクリエートコマンドは、QoSドメインを作成するためのコマンド(領域作成コマンド)である。このQoSドメインクリエートコマンドは、コマンドID、QoSドメインID、容量を含んでもよい。
【0086】
コマンドIDはこのコマンド(ここではこのQoSドメインクリエートコマンド)の固有の識別子である。QoSドメインIDは、作成すべきQoSドメインの識別子である。容量は、作成すべきQoSドメイン用に確保すべき容量を示す。コントローラ4は、この容量に対応する個数のブロックを共通ブロック群602から確保し、このQoSドメインIDを指定するライトコマンドに応じて、この確保されたブロックのうちの一つのブロックをこのQoSドメイン用の書き込み先ブロックとして割り当てる。
【0087】
図7は、フラッシュストレージデバイス3に適用されるライトコマンドを示す。
ライトコマンドは、フラッシュストレージデバイス3にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドID、QoSドメインID、タグ、長さ、ライトバッファアドレス、等を含んでもよい。
【0088】
コマンドIDはこのコマンド(ここではこのライトコマンド)の固有の識別子である。QoSドメインIDは、データが書き込まれるべきQoSドメインを一意に識別可能な識別子である。あるエンドユーザに対応するアプリケーションからのライト要求に応じてホスト2から送信されるライトコマンドは、このエンドユーザに対応するQoSドメインを指定するQoSドメインIDを含む。
【0089】
タグは、書き込まれるべきライトデータを識別するための識別子である。このタグは、上述したように、LBAのような論理アドレスであってもよいし、キー・バリュー・ストアのキーであってもよいし、このキーのハッシュ値であってもよい。
長さは、書き込まれるべきライトデータの長さを示す。この長さ(データ長)は、上述の粒度(Grainとしても参照される)の数によって指定されてもよいし、LBAの数によって指定されてもよいし、あるいはバイトによって指定されてもよい。
【0090】
ライトバッファアドレスは、書き込まれるべきライトデータが格納されているホストメモリ(ホスト2のライトバッファ)内の位置を示す。ライトバッファアドレスは、データポインタとしても参照される。
コントローラ4は、共通ブロック群602に加え、各QoSドメインに対応するアクティブブロックリスト(アクティブブロックプール)も管理することができる。
【0091】
各ブロックの状態は、有効データを格納しているアクティブブロック(クローズ状態のブロック)と、有効データを格納しておらず書き込み先ブロックとして再使用可能なフリーブロックとに大別される。あるQoSドメインにおいては、アクティブブロックである各ブロックは、このQoSドメインに対応するアクティブブロックリストによって管理される。一方、各QoSドメインの各フリーブロックは、共通ブロック群602によって管理される。
【0092】
あるQoSドメインIDを指定するライトコマンドをホスト2から受信した時、コントローラ4は、共通ブロック群602内の一つのブロック(フリーブロック)を選択し、選択されたブロックを、このQoSドメインに書き込み先ブロックとして割り当てる。さらに、コントローラ4は、この書き込み先ブロック内の位置(書き込み先位置)を決定する。書き込み先ブロック内の書き込み先位置は、ページ書き込み順序の制約および不良ページ等を考慮して決定される。そして、コントローラ4は、ホスト2からのデータを、書き込み先ブロック内の書き込み先位置に書き込む。
【0093】
この書き込み先ブロック全体がユーザデータで満たされたならば、コントローラ4は、この書き込み先ブロックをこのQoSドメインのアクティブブロックリスト(アクティブブロックプール)に移動する。そして、コントローラ4は、共通ブロック群602内の一つのブロック(フリーブロック)を再び選択し、選択されたブロックをこのQoSドメインに新たな書き込み先ブロックとして割り当てる。
【0094】
あるQoSドメインに割り当て可能なブロックの数の上限は、このQoSドメインの容量に対応するブロックの個数までに制限される。共通ブロック群602から一つのブロックがこのQoSドメインに割り当てられると、コントローラ4は、このQoSドメインに割り当て可能なブロックの現在の個数を1だけ減らす。このQoSドメインの一つのブロックを指定するリユースコマンド(またはイレーズコマンド)によってこのブロックが共通ブロック群602に返却されると、コントローラ4は、このQoSドメインに割り当て可能なブロックの現在の個数を1だけ増やす。
【0095】
図8は、フラッシュストレージデバイス3からホスト2に送られるアドレス記録要求を示す。
アドレス記録要求は、ライトコマンドに関連付けられたライトデータが書き込まれたNAND型フラッシュメモリ5内の記憶位置(物理記憶位置)を示す物理アドレスをホスト2に通知するために使用される。このアドレス記録要求は、QoSドメインID、タグ、物理アドレス、長さを含んでもよい。
【0096】
QoSドメインIDは、ライトデータが書き込まれたQoSドメインを識別する識別子である。タグは、
図7のライトコマンドに含まれていたタグである。物理アドレスは、ライトコマンドに関連付けられたライトデータが書き込まれた物理記憶位置を示す。物理アドレスは、ブロックアドレスとオフセットとによって表される。長さは、書き込まれたライトデータの長さを示す。
【0097】
一つのライトコマンドに関連付けられたライトデータの一部分が現在の書き込み先ブロックBLKmのオフセットnに書き込まれ、このライトデータの残り部分が新たに割り当てられた書き込み先ブロックBLKxのオフセット0に書き込まれる場合もある。この場合には、アドレス記録要求は、物理アドレス(BLKm、オフセットn)、BLKmに書き込まれたデータの長さL1、物理アドレス(BLKx、オフセット0)、BLKxに書き込まれたデータの長さL2、を含む。また、アドレス記録要求は、2つのタグ、つまりBLKmに書き込まれたデータを識別するタグ(例えばLBAj)およびBLKxに書き込まれたデータを識別するタグ(例えばLBAk)を含んでいてもよい。LBAjはライトコマンドに含まれていたタグ(LBA)である。LBAkは、長さL1に対応するLBAの数をLBAkに加えることによって得られる値であってもよい。
【0098】
フラッシュストレージデバイス3から受信されるアドレス記録要求に基づいて、ホスト2は、ライトデータが書き込まれた記憶位置を示す物理アドレス(ブロックアドレス、オフセット)がこのライトデータのタグ(例えばLBA)に関連付けられるように、LUTを更新することができる。
【0099】
例えば、QoSドメインID=#1、タグ=LBA10、ブロックアドレス=BLK1、オフセット=0、長さ=1を示すアドレス記録要求を受信した場合、ホスト2は、LBA10に物理アドレス(ブロックアドレスBLK1、オフセット0)が関連付けられるように、QoSドメインID#1に対応するLUTを更新する。
【0100】
また、例えば、QoSドメインID=#1、タグ=LBA10、ブロックアドレス=BLK1、オフセット=0、長さ=2を示すアドレス記録要求を受信した場合、ホスト2は、LBA10に物理アドレス(ブロックアドレスBLK1、オフセット0)が関連付けられ、且つLBA11に物理アドレス(ブロックアドレスBLK1、オフセット1)が関連付けられるように、QoSドメインID#1に対応するLUTを更新する。
【0101】
また、ホスト2は、各QoSドメインに対応するLUTの内容に基づいて、各QoSドメインで使用されているブロック毎に有効/無効管理情報を管理することができる。あるブロックに対応する有効/無効管理情報は、このブロックに格納されている複数のデータそれぞれが有効データであるか無効データであるかを示す。
【0102】
図9は、フラッシュストレージデバイス3に適用されるリードコマンドを示す。
リードコマンドは、フラッシュストレージデバイス3にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドID、QoSドメインID、物理アドレス、長さ、リードバッファアドレスを含んでもよい。
【0103】
コマンドIDはこのコマンド(ここではこのリードコマンド)の固有の識別子である。QoSドメインIDは、読み出されるべきデータが格納されているQoSドメインを識別する識別子である。物理アドレスは、読み出されるべきデータが格納されている物理記憶位置を示す。物理アドレスは、ブロックアドレスとオフセットとによって表される。このブロックアドレスは、読み出し対象のブロックのブロックアドレスである。オフセットは、読み出し対象のブロック内の読み出し対象の記憶位置を示す。長さは、読み出されるべきデータの長さを示す。リードバッファアドレスは、読み出されたデータが転送されるべきホストメモリ(ホスト2のリードバッファ)内の位置を示す。
【0104】
図10は、フラッシュストレージデバイス3に適用されるコピーコマンドを示す。
コピーコマンドは、NAND型フラッシュメモリ5に既に書き込まれているデータをNAND型フラッシュメモリ5内の別の記憶位置にコピーすることをフラッシュストレージデバイス3に要求するコマンドである。本実施形態では、2種類のコピーコマンドがサポートされていてもよい。
【0105】
図10のコピーコマンドは第1タイプのコピーコマンドである。第1タイプのコピーコマンドは、特定のコピー元ブロックに含まれる有効データそれぞれをコピーするために使用される。
図10のコピーコマンドは、コマンドID、ソースQoSドメインID、ソース物理アドレス、ディスティネーションQoSドメインIDを含んでもよい。さらに、このコピーコマンドは、コピーすべき有効データの数を指定するパラメータをコピー終了条件として含んでいてもよい。
【0106】
コマンドIDはこのコマンド(この第1タイプのコピーコマンド)の固有の識別子である。ソースQoSドメインIDは、コピー元QoSドメインを識別する識別子である。ソース物理アドレスは、コピーすべきデータが格納されているコピー元ブロックのブロックアドレスを示す。ディスティネーションQoSドメインIDはコピー先QoSドメインを識別する識別子である。コピー先QoSドメインはコピー元QoSドメインと同じQoSドメインであってもよいし、コピー元QoSドメインとは異なるQoSドメインであってもよい。
【0107】
あるディスティネーションQoSドメインIDを指定するコピーコマンドをホスト2から受信した時、コントローラ4は、共通ブロック群602内の一つのブロック(フリーブロック)を選択し、選択されたブロックを、このディスティネーションQoSドメインIDに対応するコピー先QoSドメインにコピー先ブロックとして割り当てる。コントローラ4は、コピー元ブロックからコピー先ブロックにコピー対象データをコピーする。
【0108】
コピー対象データは、ホスト2から通知されるマップ情報に基づいて決定される。このマップ情報(有効マップ)は、コピー元ブロックに含まれる各データが有効データまたは無効データのいずれであるかを示す。マップ情報は、コピーコマンド内に含まれていてもよいし、コピーコマンドとは別個にホスト2からフラッシュストレージデバイス2に送られてもよい。コントローラ4は、このマップ情報に基づいて、コピー元ブロック内の有効データそれぞれをコピー先ブロックにコピーする。
【0109】
コントローラ4は、コピー元ブロックからコピー先ブロックへの全ての有効データそれぞれのコピーが完了するまでデータコピー動作を繰り返し実行してもよい。あるいは、このコピーコマンドが、コピーすべき有効データの数を指定するパラメータを含む場合には、コントローラ4は、このパラメータによって指定された数の有効データのコピーが完了した時点でデータコピー動作を終了してもよい。
【0110】
このコピー先ブロック全体がデータで満たされたならば、コントローラ4は、このコピー先ブロックをこのディスティネーションQoSドメインのアクティブブロックリスト(アクティブブロックプール)に移動する。そして、コントローラ4は、共通ブロック群602内の一つのブロック(フリーブロック)を再び選択し、選択されたブロックをこのディスティネーションQoSドメインに新たなコピー先ブロックとして割り当てる。
【0111】
図11は、セット・有効マップコマンドを示す。
セット・有効マップコマンドは、マップ情報(有効マップ)をフラッシュストレージデバイス3に通知するためのコマンドである。セット・有効マップコマンドは、コマンドID、ソースQoSドメインID、ソース物理アドレス、ビットマップを含んでもよい。
【0112】
コマンドIDはこのコマンド(このセット・有効マップコマンド)の固有の識別子である。ソースQoSドメインIDは、コピー元QoSドメインを識別する識別子である。ソース物理アドレスは、コピーすべきデータが格納されているコピー元ブロックのブロックアドレスを示す。ビットマップは、コピー元ブロックに含まれる各データが有効データまたは無効データのいずれであるかを示す。
【0113】
図12は、フラッシュストレージデバイス3からホスト2に送られるアドレス変更要求を示す。
アドレス変更要求は、コピーされたデータの新たな物理アドレスをホストに通知するために使用される。つまり、アドレス変更要求は、コピー対象データの識別子(タグ)、コピー対象データがコピーされたコピー先ブロックのブロックアドレス、コピー対象データがコピーされた、コピー先ブロック内の位置を示すオフセット、等をホスト2に通知するために使用される。
【0114】
このアドレス変更要求は、旧QoSドメインID、タグ、旧物理アドレス、新QoSドメインID、新物理アドレスを含んでもよい。
旧QoSドメインIDは、コピー元QoSドメインを識別する識別子である。タグは、コピーされたデータの識別子である。複数のデータがコピーされた場合には、アドレス変更要求は、これら複数のデータに対応する複数のタグを含む。
【0115】
本実施形態では、データ書き込み動作においては、コントローラ4は、ライトデータとこのライトデータのタグの双方を書き込み先ブロックに書き込むことができる。したがって、データコピー動作においては、コントローラ4は、コピー対象データとこのコピー対象データのタグの双方をコピー元ブロックからコピー先ブロックにコピーすることができる。コントローラ4は、コピー対象データと一緒にコピー元ブロックからコピー先ブロックにコピーされたタグを、コピーされたデータのタグとしてホスト2に通知することができる。
【0116】
旧物理アドレスは、コピー対象データが格納されているコピー元物理記憶位置を示す。コピー元物理記憶位置は、コピー元ブロックのブロックアドレスと、コピー対象データが格納されている、コピー元ブロック内の記憶位置を示すオフセットによって表される。複数のデータがコピーされた場合には、アドレス変更要求は、これら複数のデータに対応する複数の旧物理アドレスを含む。
【0117】
新QoSドメインIDは、コピー先QoSドメインを識別する識別子である。新物理アドレスは、コピー対象データがコピーされたコピー先物理記憶位置を示す。コピー先物理記憶位置は、コピー先ブロックのブロックアドレスと、コピー対象データがコピーされた、コピー先ブロック内の記憶位置を示すオフセットとによって表される。複数のデータがコピーされた場合には、アドレス変更要求は、これら複数のデータに対応する複数の新物理アドレスを含む。
【0118】
図13は、コピー元ブロックのブロックアドレスと、コピー対象データが格納されている、コピー元ブロック内の記憶位置を示すオフセットと、コピー対象データの長さとを指定する第2のタイプのコピーコマンドを示す。第2のタイプのコピーコマンドはマップ情報を使用しない。
【0119】
この第2のタイプのコピーコマンドは、コマンドID、ソースQoSドメインID、ソース物理アドレス、長さ、ディスティネーションQoSドメインIDを含んでいてもよい。
コマンドIDはこのコマンド(この第2タイプのコピーコマンド)の固有の識別子である。ソースQoSドメインIDは、コピー元QoSドメインを識別する識別子である。ソース物理アドレスは、コピー元ブロックのブロックアドレスと、コピーすべきコピー対象データが格納されている、コピー元ブロック内の記憶位置を示すオフセットとによって表される。長さは、コピー対象データの長さを示す。ディスティネーションQoSドメインIDはコピー先QoSドメインを識別する識別子である。コピー先QoSドメインはコピー元QoSドメインと同じQoSドメインであってもよいし、コピー元QoSドメインとは異なるQoSドメインであってもよい。
【0120】
あるディスティネーションQoSドメインIDを指定する第2タイプのコピーコマンドをホスト2から受信した時も、コントローラ4は、共通ブロック群602内の一つのブロック(フリーブロック)を選択し、選択されたブロックを、このディスティネーションQoSドメインIDに対応するコピー先QoSドメインにコピー先ブロックとして割り当てる。このコピー先QoSドメインにコピー先ブロックが既に割り当てられている場合には、この処理は不要である。各コピー先QoSドメインに割り当てられたコピー先ブロックは第1タイプコピーコマンドおよび第2タイプコピーコマンドとの間で共有されることができる。
【0121】
コントローラ4は、第2タイプコピーコマンドによって指定されるオフセットおよび長さに基づいて、コピー元ブロック内のコピー対象データを特定し、この特定されたコピー対象データをコピー元ブロックからコピー先QoSドメインのコピー先ブロックにコピーする。
【0122】
なお、第2タイプコピーコマンドは、長さの代わりに、コピー元ブロック内の複数のコピー対象データそれぞれの記憶位置を示すソース物理アドレスのリストを含んでいてもよい。
図14は、物理アドレスを規定するブロックアドレスおよびオフセットを示す。
【0123】
ブロックアドレスはある一つのブロックBLKを指定する。各ブロックBLKは、
図14に示されているように、複数のページ(ここでは、ページ0~ページn)を含む。
ページサイズ(各ページのユーザデータ格納領域)が16Kバイトであり、粒度(Grain)が4KBのサイズであるケースにおいては、このブロックBLKは、4×(n+1)個の領域に論理的に分割される。
【0124】
オフセット+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領域を示す。
【0125】
図15は、スーパーブロックが使用されるケースにおけるブロックアドレスとオフセットとの関係を示す。
ここでは、図示を簡単化するために、ある一つのスーパーブロック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型フラッシュメモリチップからそれぞれ選択されたブロックであってもよい。
【0126】
コントローラ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、…という順序でデータを書き込む。
【0127】
オフセット+0はブロックBLK#11のページ0の最初の4KB領域を示し、オフセット+1はブロックBLK#11のページ0の2番目の4KB領域を示し、オフセット+2はブロックBLK#11のページ0の3番目の4KB領域を示し、オフセット+3はブロックBLK#11のページ0の4番目の4KB領域を示す。
【0128】
オフセット+4はブロックBLK#21のページ0の最初の4KB領域を示し、オフセット+5はブロックBLK#21のページ0の2番目の4KB領域を示し、オフセット+6はブロックBLK#21のページ0の3番目の4KB領域を示し、オフセット+7はブロックBLK#21のページ0の4番目の4KB領域を示す。
【0129】
同様に、オフセット+12はブロックBLK#41のページ0の最初の4KB領域を示し、オフセット+13はブロックBLK#41のページ0の2番目の4KB領域を示し、オフセット+14はブロックBLK#41のページ0の3番目の4KB領域を示し、オフセット+15はブロックBLK#41のページ0の4番目の4KB領域を示す。
【0130】
オフセット+16はブロックBLK#11のページ1の最初の4KB領域を示し、オフセット+17はブロックBLK#11のページ1の2番目の4KB領域を示し、オフセット+18はブロックBLK#11のページ1の3番目の4KB領域を示し、オフセット+19はブロックBLK#11のページ1の4番目の4KB領域を示す。
【0131】
オフセット+20はブロックBLK#21のページ1の最初の4KB領域を示し、オフセット+21はブロックBLK#21のページ1の2番目の4KB領域を示し、オフセット+22はブロックBLK#21のページ1の3番目の4KB領域を示し、オフセット+23はブロックBLK#21のページ1の4番目の4KB領域を示す。
【0132】
同様に、オフセット+28はブロックBLK#41のページ1の最初の4KB領域を示し、オフセット+29はブロックBLK#41のページ1の2番目の4KB領域を示し、オフセット+30はブロックBLK#41のページ1の3番目の4KB領域を示し、オフセット+31はブロックBLK#41のページ1の4番目の4KB領域を示す。
【0133】
例えば、あるLBA(LBAx)を指定するライトコマンドに対応する4Kバイトデータをオフセット+8に対応する位置に書き込む場合には、コントローラ4は、タグ(=LBAx)、ブロック番号(=SB#1)、オフセット(=+8)、長さ(=1)をこのライトコマンドに対するアドレス記録要求としてホスト2に返してもよい。
【0134】
図16は、フラッシュストレージデバイス3によって管理される複数のQoSドメインを示す。
図16では、QoSドメイン#0、QoSドメイン#1、QoSドメイン#2、…、QoSドメイン#n-1が既に作成されている場合が明示されている。
図16では、これらQoSドメインは四角によって表されている。あるQoSドメインを表す四角の縦幅は、このQoSドメインの容量を表している。
【0135】
ユーザアプリケーション#0は、QoSドメイン#0のQoSドメインID#0を含むリード/ライトコマンドを使用して、QoSドメイン#0をリード/ライトアクセスすることができる。同様に、ユーザアプリケーション#n-1は、QoSドメイン#n-1のQoSドメインID#n-1を含むリード/ライトコマンドを使用して、QoSドメイン#n-1をリード/ライトアクセスすることができる。
【0136】
図17のシーケンス図は、フラッシュストレージデバイス2によって実行されるQoSドメイン作成処理の手順を示す。
QoSドメインID#0を指定するQoSドメインクリエートコマンドをホスト2から受信した場合、コントローラ4は、QoSドメインID#0に関連付けられたQoSドメイン#0を作成する(ステップS11)。ステップS11では、コントローラ4は、共通ブロック群602から、このQoSドメインクリエートコマンドによって指定される容量に対応する数のブロックをQoSドメイン#0用に確保(予約する)。そして、コントローラ4は、コマンド完了のレスポンスをホスト2に返す。
【0137】
QoSドメインID#1を指定するQoSドメインクリエートコマンドをホスト2から受信した場合、コントローラ4は、QoSドメインID#1に関連付けられたQoSドメイン#1を作成する(ステップS12)。ステップS12では、コントローラ4は、共通ブロック群602から、このQoSドメインクリエートコマンドによって指定される容量に対応する数のブロックをQoSドメイン#1用に確保(予約する)。そして、コントローラ4は、コマンド完了のレスポンスをホスト2に返す。
【0138】
同様に、QoSドメインID#n-1を指定するQoSドメインクリエートコマンドをホスト2から受信した場合、コントローラ4は、QoSドメインID#n-1に関連付けられたQoSドメイン#n-1を作成する(ステップS13)。ステップS13では、コントローラ4は、共通ブロック群602から、このQoSドメインクリエートコマンドによって指定される容量に対応する数のブロックをQoSドメイン#n-1用に確保(予約する)。そして、コントローラ4は、コマンド完了のレスポンスをホスト2に返す。
【0139】
図18は、ホスト2とフラッシュストレージデバイス3とによって実行されるデータ書き込み処理を示す。
(1)ホスト2においては、ホストFTL701が実行される。このホストFTL701は、LBAのようなタグとフラッシュストレージデバイス3の物理アドレスそれぞれとの間のマッピングをLUTを使用して管理する。あるユーザアプリケーションからのライト要求に応じて、ホストFTL701は、このユーザアプリケーションに対応するQoSドメインのQoSドメインIDを指定するライトコマンドをフラッシュストレージデバイス3に送信する。ホストFTL701は、QoSドメインIDのみを指定すればよく、データが書き込まれるべきブロックおよびデータが書き込まれるべきページを指定する必要は無い。このため、ホストFTL701は、フラッシュストレージデバイス3内の不良ブロック、不良ページなどを管理する必要がなくなる。
【0140】
(2)フラッシュストレージデバイス3のコントローラ4は、複数のQoSドメイン601によって共有される共通ブロック群(フリーブロック群)602のうちの一つのブロックを選択する、コントローラ4は、この選択したブロックを、受信されたライトコマンドによって指定されたQoSドメインIDを有するQoSドメイン用の書き込み先ブロックとして割り当てる。共通ブロック群(フリーブロック群)602においては、不良ブロック以外のフリーブロック群のみが管理されていてもよい。例えば、最小プログラム/イレーズサイクル数を有するブロックが共通ブロック群602から選択されてもよい。そして、コントローラ4は、この書き込み先ブロックをデータが書き込まれるべきブロックとして決定し、さらに、データが書き込まれるべき、この書き込み先ブロック内の書き込み先位置を決定する。なお、上述したように、既にこのQoSドメイン用の書き込み先ブロックが割り当てられているならば、コントローラ4は、この既に割り当てられている書き込み先ブロックをデータが書き込まれるべきブロックとして決定すればよく、共通ブロック群602から一つのブロックをこのQoSドメイン用の書き込み先ブロックとして割り当てる動作を実行する必要は無い。
【0141】
(3)コントローラ4は、決定された書き込み先ブロックを示すブロックアドレスと決定した書き込み先位置を示すオフセットとを含む物理アドレス記録要求をホスト2に送信して、このライトコマンドに関連付けられたライトデータが書き込まれる物理アドレスをホスト2に通知する。
【0142】
(4)コントローラ4は、ライトコマンドに含まれるライトバッファアドレスに基づいて、ホスト2のライトバッファ702からライトデータを取得する。ライトバッファ702からのライトデータの取得はDMA転送を使用して実行されてもよい。そして、コントローラ4は、ライトデータを書き込み先ブロック内の書き込み先位置に書き込むデータ書き込み動作を実行する。
【0143】
(5)ライトデータの書き込みが完了してこのライトデータがNAND型フラッシュメモリ5から読み出し可能になった後、コントローラ4は、このライトデータが格納されているライトバッファ702内の領域を解放するための解放要求をホスト2に送出する。この解放要求は、書き込みが完了したライトデータに対応するライトコマンドの識別子を含んでいてもよい。あるいは、この解放要求は、このライトデータの格納位置を示すライトバッファアドレス、このライトデータの長さを含んでいてもよい。ホスト2は、この解放要求に応じて、このライトデータが格納されているライトバッファ702内の領域を解放する。このライトバッファ702内の解放された領域は他のライトデータの格納等のために利用可能となる。
【0144】
図19は、ホスト2とフラッシュストレージデバイス3とによって実行されるデータ読み出し処理を示す。
(1)ホストFTL701があるユーザアプリケーションからのリード要求を受信した場合、ホストFTL701は、ホストFTL701内のLUTを参照して、このリード要求によって指定されるLBAのようなタグに対応する物理アドレスを取得する。ホストFTL701は、このユーザアプリケーションに対応するQoSドメインのQoSドメインIDと、取得した物理アドレス(ブロックアドレスとオフセット)と、長さと、リードバッファアドレスとを指定するリードコマンドを、フラッシュストレージデバイス3に送信する。
【0145】
(2)コントローラ4がこのリードコマンドを受信した場合、コントローラ4は、このリードコマンドによって指定されるブロックアドレスとオフセットに基づいて、NAND型フラッシュメモリ5からデータを読み出す。そして、コントローラ4は、この読み出したデータを、DMA転送を使用して、リードバッファアドレスによって指定されるホスト2のリードバッファ703内の位置に転送する。
【0146】
図20は、ホスト2とフラッシュストレージデバイス3とによって実行されるデータコピー処理を示す。ここでは、第1タイプのコピーコマンドを例示してデータコピー処理を説明する。
(1)ホストFTL701は、セット・有効マップコマンドをフラッシュストレージデバイス3に送信することによって、コピー元QoSドメインのコピー元ブロックに対応するマップ情報をフラッシュストレージデバイス3に通知する。
【0147】
(2)ホストFTL701は、ソースQoSドメインIDと、このソースQoSドメインIDを有するQoSドメインに属するブロックのうちのコピー元ブロックのブロックアドレスと、ディスティネーションQoSドメインIDとを含むコピーコマンドをフラッシュストレージデバイス3に送信する。ここでは、ソースQoSドメインIDおよびディスティネーションQoSドメインIDの各々がQoSドメインID#0である場合を想定する。
【0148】
(3)フラッシュストレージデバイス3のコントローラ4は、複数のQoSドメイン601によって共有される共通ブロック群(フリーブロック群)602のうちの一つのブロックを選択し、この選択したブロックを、受信されたコピーコマンドによって指定されたディスティネーションQoSドメインID(ここではQoSドメインID#0)を有するQoSドメイン(ここではQoSドメイン#0)用のコピー先ブロックとして割り当てる。共通ブロック群(フリーブロック群)602においては、不良ブロック以外のフリーブロック群のみが管理されていてもよい。例えば、最小プログラム/イレーズサイクル数を有するブロックが共通ブロック群602から選択されてもよい。そして、コントローラ4は、マップ情報に基づいて、QoSドメイン#0に属するコピー元ブロックに格納されている有効データそれぞれを、QoSドメイン#0用のコピー先ブロックにコピーする。なお、上述したように、既にこのQoSドメイン#0用のコピー先ブロックが割り当てられているならば、コントローラ4は、この既に割り当てられているコピー先ブロックを、データがコピーされるべきブロックとして決定すればよく、共通ブロック群602から一つのブロックをこのQoSドメイン#0用のコピー先ブロックとして割り当てる動作を実行する必要は無い。
【0149】
(4)コントローラ4は、アドレス変更要求をホスト2に送信することによって、コピーされた有効データ毎に、有効データの識別子(タグ)と、コピー先ブロックのブロックアドレスと、有効データが格納されている、コピー先ブロック内の記憶位置を示すオフセットとを示す情報をホスト2に通知する。
【0150】
図21は、フラッシュストレージデバイス3のコントローラ4によって管理される、複数のQoSドメインと共通フラッシュブロックプールとの関係を示す。
図21においては、図示の簡単化のために、QoSドメイン#0とQoSドメイン#n-1の2つのQoSドメインのみが例示されている。共通フラッシュブロックプール801は、複数のQoSドメインによって共有される上述の共通ブロック群602を管理するためのリストである。
【0151】
QoSドメイン#0のフラッシュブロックプール#0は、QoSドメイン#0に属するアクティブブロックそれぞれを管理するための上述のアクティブブロックリストである。
コントローラ4がQoSドメイン#0のQoSドメインID#0を指定するライトコマンドを受信した場合、コントローラ4は、QoSドメイン#0用の書き込み先ブロック(オープンブロック)が割り当て済みであるか否かを判定する。
【0152】
書き込み先ブロック(オープンブロック)が割り当て済みでないならば、コントローラ4は、共通フラッシュブロックプール801の内のフリーブロックをQoSドメイン#0用の書き込み先ブロック(オープンブロック)として割り当てる。そして、コントローラ4は、この書き込み先ブロック内の書き込み先位置を決定し、このライトコマンドに関連付けられたライトデータを、この書き込み先ブロック内のこの書き込み先位置に書き込む。
【0153】
一方、書き込み先ブロック(オープンブロック)が既に割り当て済みならば、コントローラ4は、この書き込み先ブロック内の書き込み先位置を決定し、このライトコマンドに関連付けられたライトデータを、この書き込み先ブロック内のこの書き込み先位置に書き込む。
【0154】
この書き込み先ブロック全体がホストからのデータで満たされると、コントローラ4は、この書き込み先ブロックをフラッシュブロックプール#0によって管理するとともに(クローズ)、共通フラッシュブロックプール801の内のフリーブロックをQoSドメイン#0用の新たな書き込み先ブロック(オープンブロック)として割り当てる。
【0155】
コントローラ4がQoSドメインID#0を示すコピー元QoSドメインと、コピー元ブロックのブロックアドレスと、QoSドメインID#0を示すコピー先QoSドメインとを指定するコピーコマンドを受信した場合、コントローラ4は、QoSドメイン#0用のコピー先ブロック(オープンブロック)が割り当て済みであるか否かを判定する。
【0156】
コピー先ブロック(オープンブロック)が割り当て済みでないならば、コントローラ4は、共通フラッシュブロックプール801の内のフリーブロックをQoSドメイン#0用のコピー先ブロック(オープンブロック)として割り当てる。コントローラ4は、コピー先ブロック内のコピー先位置を決定する。コントローラ4は、コピー元ブロックのブロックアドレスに基づいて、フラッシュブロックプール#0内のブロックの一つをコピー元ブロックとして選択する。コントローラ4は、この選択したコピー元ブロック内のデータを、コピー先ブロック内のコピー先位置にコピーする。一方、コピー先ブロックが既に割り当て済みならば、コントローラ4は、既に割り当てられているコピー先ブロック内のコピー先位置を決定し、選択したコピー元ブロック内のデータを、既に割り当てられているコピー先ブロック内のコピー先位置にコピーする。
【0157】
受信されたコピーコマンドが第1タイプコピーコマンドであるならば、ホスト2から通知される上述のマップ情報に基づき、コントローラ4は、選択したコピー元ブロック内の有効データそれぞれをコピー先ブロックにコピーする。
コピー先ブロック全体がホストからのデータで満たされると、コントローラ4は、このコピー先ブロックをフラッシュブロックプール#0によって管理するとともに(クローズ)、共通フラッシュブロックプール801の内のフリーブロックをQoSドメイン#0用の新たなコピー先ブロック(オープンブロック)として割り当てる。
【0158】
更新データの書き込みまたはデータコピー動作によってQoSドメイン#0に属する一つのブロック内のデータ全てが無効データになった場合、ホスト2は、このブロックのブロックアドレスを指定するリユースコマンドをフラッシュストレージデバイス3に送信する。
【0159】
コントローラ4がこのリユースコマンドをホスト2から受信した場合、コントローラ4は、このリユースコマンドによって指定されるフラッシュブロックプール#0内のブロックを共通フラッシュブロックプール801に返却して、このブロックを任意のQoSドメイン用の新たな書き込み先ブロック(またはコピー先ブロック)として再使用可能な状態にする。
【0160】
なお、更新データの書き込みまたはデータコピー動作によってQoSドメイン#0に属する一つのブロック内のデータ全てが無効データになった場合、ホスト2は、このブロックのブロックアドレスを指定するイレーズコマンドをフラッシュストレージデバイス3に送信してもよい。コントローラ4がこのイレーズコマンドをホスト2から受信した場合、コントローラ4は、このイレーズコマンドによって指定されるフラッシュブロックプール#0内のブロックに対する消去動作を実行し、且つこのブロックを共通フラッシュブロックプール801に返却して、このブロックを任意のQoSドメイン用の新たな書き込み先ブロック(またはコピー先ブロック)として再使用可能な状態にする。
【0161】
QoSドメイン#n-1においても、コントローラ4は、書き込み先ブロック/コピー先ブロックの割り当て、データで満たされた書き込み先ブロック/コピー先ブロックをフラッシュブロックプール#n-1によって管理する処理、リユースコマンド/イレーズコマンドによって指定されるブロックを共通フラッシュブロックプール801に返却する処理等を実行する。
【0162】
このように、本実施形態においては、ホストライト用の書き込み先ブロックとデータコピー用のコピー先ブロックとがコントローラ4によってQoSドメイン毎に割り当てられる。
図22は、ライトコマンドの実行中に書き込み先ブロック全体がデータで満たされた場合に、コントローラ4によって実行される書き込み先ブロック割り当て動作を示す。
【0163】
ブロックBLK#1は、QoSドメイン#0に割り当てられている現在の書き込み先ブロックである。ここでは、図示の簡単化のために、ブロックBLK#1が4つのページから構成されており、ページサイズが16KBである場合を想定する。
いま、QoSドメインID#0、タグ(LBAx)、長さ=16を指定するライトコマンドがホスト2から受信された場合を想定する。書き込み先ブロックBLK#1のページ0,ページ1にはデータが既に書き込まれている。長さ=16は、このライトコマンドに関連付けられたライトデータのサイズが64Kバイト(=16×4KB)であることを表している。
【0164】
コントローラ4は、このライトデータ(D1~D16)の一部分である第1のデータ部分、つまりライトデータの最初の32KBのデータ部分(D1~D8)、を書き込み先ブロックBLK#1のページ2,ページ3に書き込む。これにより、書き込み先ブロックBLK#1全体がデータで満たされた状態となる。
【0165】
コントローラ4は、共通フラッシュブロックプール801から新たな書き込み先ブロックBLK#2をQoSドメイン#0用に割り当てる。そして、コントローラ4は、ライトデータ(D1~D16)の残り部分である第2のデータ部分、つまりライトデータの残りの32KBのデータ部分(D9~D16)、を書き込み先ブロックBLK#2のページ0,ページ1に書き込む。
【0166】
この場合、コントローラ4からホスト2に送られるアドレス記録要求は、ライトデータの第1のデータ部分の識別子と、2つの物理アドレスとを含む。2つの物理アドレスの一方は、ブロックアドレス=BLK#1、オフセット=+8を示す。2つの物理アドレスの他方は、ブロックアドレス=BLK#2、オフセット=+0を示す。
【0167】
より詳しくは、このアドレス記録要求は以下のパラメータを含んでいてもよい。LBA=LBAxブロックアドレス=BLK#1オフセット=+8長さ=8LBA=LBAx+8ブロックアドレス=BLK#2オフセット=+0長さ=8
図23は、ホスト2から通知されるマップ情報に基づいて実行される有効データコピー動作を示す。
【0168】
ここでは、QoSドメイン#0のコピー元ブロックBLK#11に格納されている有効データそれぞれを、QoSドメイン#0用に割り当てられたコピー先ブロックBLK#100にコピーする場合を想定する。
コピー元ブロックBLK#11において、d1~d3、d8~d9、d11、d15~d16の各々は有効データであり、d4~d7、d10、d12~d14の各々は無効データである。この場合、コピー元ブロックBLK#11に対応するマップ情報(ビットマップ)は「1110000110100011」を示す。ビットマップ内の各ビット「1」はこのビットに対応するデータが有効データであることを示し、ビットマップ内の各ビット「0」はこのビットに対応するデータが無効データであることを示す。
【0169】
コピー元ブロックBLK#11を指定する第1タイプのコピーコマンドを受信すると、コントローラ4は、4つの有効データ(d1~d3、d8)をコピー先ブロックBLK#100のページ0にコピーし、4つの有効データ(d9、d11、d15~d16)をコピー先ブロックBLK#100のページ1にコピーする。そして、コントローラ4は、データd1の識別子、データd1の新物理アドレス(BLK#100、オフセット+0)、データd2の識別子、データd2の新物理アドレス(BLK#100、オフセット+1)、データd3の識別子、データd3の新物理アドレス(BLK#100、オフセット+2)、データd8の識別子、データd8の新物理アドレス(BLK#100、オフセット+3)、データd9の識別子、データd9の新物理アドレス(BLK#100、オフセット+4)、データd11の識別子、データd11の新物理アドレス(BLK#100、オフセット+5)、データd15の識別子、データd15の新物理アドレス(BLK#100、オフセット+6)、データd16の識別子、データd16の新物理アドレス(BLK#100、オフセット+7)、等を、アドレス変更要求としてホスト2に通知する。
【0170】
図24は、コピーコマンドの実行中にコピー先ブロックBLK#100全体がデータで満たされた場合に、コントローラ4によって実行されるコピー先ブロック割り当て動作を示す。
ここでは、先行するコピーコマンドによってBLK#100のページ0~ページ2にデータが既にコピーされている状態で、コントローラ4、コピー元ブロックBLK#11を指定する第1タイプのコピーコマンドをホスト2から受信した場合を想定する。
【0171】
コントローラ4は、4つの有効データ(d1~d3、d8)をコピー先ブロックBLK#100のページ3にコピーする。これにより、コピー先ブロックBLK#100全体がデータで満たされた状態となる。
コントローラ4は、共通フラッシュブロックプール801から新たなコピー先ブロックBLK#200をQoSドメイン#0用に割り当てる。そして、コントローラ4は、残りの4つの有効データ(d9、d11、d15~d16)をコピー先ブロックBLK#200のページ0にコピーする。
【0172】
そして、コントローラ4は、データd1の識別子、データd1の新物理アドレス(BLK#100、オフセット+12)、データd2の識別子、データd2の新物理アドレス(BLK#100、オフセット+13)、データd3の識別子、データd3の新物理アドレス(BLK#100、オフセット+14)、データd8の識別子、データd8の新物理アドレス(BLK#100、オフセット+15)、データd9の識別子、データd9の新物理アドレス(BLK#200、オフセット+0)、データd11の識別子、データd11の新物理アドレス(BLK#200、オフセット+1)、データd15の識別子、データd15の新物理アドレス(BLK#200、オフセット+2)、データd16の識別子、データd16の新物理アドレス(BLK#200、オフセット+3)、等を、アドレス変更要求としてホスト2に通知する。
【0173】
図25のフローチャートは、書き込み先ブロック割り当て動作およびデータ書き込み動作の手順を示す。
コントローラ4は、ライトコマンドをホスト2から受信する(ステップS21)。このライトコマンドは、作成された複数のQoSドメインをアクセスするための複数のQoSドメインIDのうちの一つを指定する。コントローラ4は、複数のQoSドメインによって共有される共通フラッシュブロックプール801内の一つのブロック(フリーブロック)を選択する。そして、コントローラ4は、この選択したブロックを、受信されたライトコマンドによって指定されたQoSドメインIDに対応するQoSドメイン用の書き込み先ブロックとして割り当てる(ステップS22)。上述したように、もしこのQoSドメイン用の書き込み先ブロックが既に割り当てられているならば、この割り当て動作を実行する必要は無い。
【0174】
コントローラ4は、この書き込み先ブロック内の書き込み先位置を決定し、受信されたライトコマンドに関連付けられたライトデータを、この書き込み先ブロック内のこの書き込み先位置に書き込む(ステップS23)。
受信されたライトコマンドに関連付けられたライトデータの一部分の書き込みによってこの書き込み先ブロック全体がデータで満たされたならば(ステップS24のNO、ステップS25のYES)、コントローラ4は、共通フラッシュブロックプール801内の一つのブロック(フリーブロック)を選択し、この選択したブロックを、このQoSドメイン用の新たな書き込み先ブロックとして割り当てる(ステップS22)。そして、コントローラ4は、この新たな書き込み先ブロック内の書き込み先位置(通常は先頭ページ)を決定し、このライトデータ内の残り部分を、この新たな書き込み先ブロック内のこの書き込み先位置に書き込む(ステップS23)。
【0175】
ライトデータ全体の書き込みが完了したならば(ステップS24のYES)、コントローラ4は、このライトデータの識別子(例えば、LBA)とこのライトデータが書き込まれた物理アドレス(ブロックアドレス、オフセット)をアドレス記録要求としてホスト2に通知する(ステップS26)。
【0176】
ライトデータが2つの書き込み先ブロックに跨がって書き込まれた場合、つまりライトデータの一部分である第1のデータ部分が第1の書き込み先ブロックに書き込まれ、ライトデータの残り部分である第2のデータ部分が第2の書き込み先ブロックに書き込まれた場合には、コントローラ4は、第1のデータ部分のタグと、第1のデータ部分が書き込まれた物理アドレス(第1の書き込み先ブロックのブロックアドレス、第1のデータ部分が書き込まれた、第1の書き込み先ブロック内の記憶位置を示すオフセット)と、第2のデータ部分のタグと、第2のデータ部分が書き込まれた物理アドレス(第2の書き込み先ブロックのブロックアドレス、第2のデータ部分が書き込まれた、第2の書き込み先ブロック内の記憶位置を示すオフセット)とをアドレス記録要求としてホスト2に通知する(ステップS26)。ライトデータのタグがLBAxである場合、第1のデータ部分のLBAはLBAxであってもよく、第2のデータ部分のLBAは、第1のデータ部分の長さに対応するLBAの数をLBAxに加えることによって得られるLBAであってもよい。
【0177】
図26のフローチャートは、コピー先ブロック割り当て動作およびデータコピー動作の手順を示す。
コントローラ4は、コピーコマンドをホスト2から受信する(ステップS31)。このコピーコマンドは、コピー元ブロックのブロックアドレスと、一つのQoSドメインIDを示すコピー先対象QoSドメインの識別子とを指定する。コピー先対象QoSドメインの識別子は、ディスティネーションQoSドメインIDである。より詳しくは、このコピーコマンドは、ソースQoSドメインID、ソース物理アドレス(コピー元ブロックのブロックアドレス)、ディスティネーションQoSドメインIDを指定する。
【0178】
コントローラ4は、複数のQoSドメインによって共有される共通フラッシュブロックプール801内の一つのブロック(フリーブロック)を選択する。そして、コントローラ4は、この選択したブロックを、受信されたコピーコマンドによって指定されたディスティネーションQoSドメインIDに対応するディスティネーションQoSドメイン用のコピー先ブロックとして割り当てる(ステップS32)。上述したように、もしこのディスティネーションQoSドメイン用のコピー先ブロックが既に割り当てられているならば、この割り当て動作を実行する必要は無い。
【0179】
コントローラ4は、このコピー先ブロック内のコピー先位置を決定し、受信されたコピーコマンドによって指定されたコピー元ブロック内のデータ(コピー対象データ)を、このコピー先ブロック内のこのコピー先位置にコピーする(ステップS33)。受信されたコピーコマンドが第1タイプコピーコマンドである場合には、マップ情報によって指定される有効データそれぞれがコピー元ブロック内のコピー対象データとして決定される。受信されたコピーコマンドが第2タイプコピーコマンドである場合には、第2タイプコピーコマンドによって指定されるソース物理アドレスに含まれるオフセットと、第2タイプコピーコマンドによって指定される長さとに基づいて、コピー元ブロック内のコピー対象データが決定される。
【0180】
コピー対象データの一部分のコピーによってディスティネーションQoSドメインのコピー先ブロック全体がデータで満たされたならば(ステップS34のNO、ステップS35のYES)、コントローラ4は、共通フラッシュブロックプール801内の一つのブロック(フリーブロック)を選択し、この選択したブロックを、このディスティネーションQoSドメイン用の新たなコピー先ブロックとして割り当てる(ステップS32)。そして、コントローラ4は、この新たなコピー先ブロック内のコピー先位置(通常は先頭ページ)を決定し、このコピー対象データ内の残り部分を、この新たなコピー先ブロック内のこのコピー先位置にコピーする(ステップS33)。
【0181】
コピー対象データ全体のコピーが完了したならば(ステップS34のYES)、コントローラ4は、このコピー対象データの識別子(例えば、LBA)とこのコピー対象データがコピーされた新物理アドレス(ブロックアドレス、オフセット)をホスト2に通知する(ステップS36)。
【0182】
コピー対象データが2つのコピー先ブロックに跨がってコピーされた場合、つまりコピー対象データの一部分である第3のデータ部分が第1のコピー先ブロックにコピーされ、コピー対象データの残り部分である第4のデータ部分が第2のコピー先ブロックにコピーされた場合には、コントローラ4は、第3のデータ部分のタグと、第3のデータ部分がコピーされた物理アドレス(第1のコピー先ブロックのブロックアドレス、第3のデータ部分がコピーされた、第1のコピー先ブロック内の記憶位置を示すオフセット)と、第4のデータ部分のタグと、第4のデータ部分がコピーされた物理アドレス(第2のコピー先ブロックのブロックアドレス、第4のデータ部分がコピーされた、第2のコピー先ブロック内の記憶位置を示すオフセット)とをアドレス変更要求としてホスト2に通知する(ステップS36)。
【0183】
以上説明したように、本実施形態によれば、複数のQoSドメインそれぞれに対応する複数の書き込み先ブロックが割り当てられる。そして、あるQoSドメインIDを指定するライトコマンドに関連付けられたライトデータは、このQoSドメインIDに対応するQoSドメイン用の書き込み先ブロックに書き込まれる。また、別のQoSドメインIDを指定するライトコマンドに関連付けられたライトデータは、この別のQoSドメインIDに対応するQoSドメイン用の書き込み先ブロックに書き込まれる。これにより、ホスト2によるデータ配置の制御なしで、異なるユーザアプリケーションからのライトデータを異なる書き込み先ブロックに書き込むことができる。よって、複数のユーザアプリケーションからのライトデータを互い異なるブロックに書き込むというデータ配置のためのホスト2側の負担を軽減することができる。
【0184】
また、QoSドメイン毎に、書き込み先ブロックとは異なる別のブロックがコピー先ブロックとして割り当てられる。これにより、ホスト2の制御なしで、ホスト2からのデータが書き込まれる書き込み先ブロックとNAND型フラッシュメモリ5に既に書き込まれているデータがコピーされるコピー先ブロックとを分離するというデータ配置を実現することができる。
【0185】
なお、本実施形態では、不揮発性メモリとしてNAND型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、MRAM(Magnetoresistive
Random Access Memory)、PRAM(Phase change
Random Access Memory)、ReRAM(Resistive Random Access Memory)、又は、FeRAM(Ferroelectric Random Access Memory)のような他の様々な不揮発性メモリにも適用できる。
【0186】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0187】
2…ホスト、3…フラッシュストレージデバイス、4…コントローラ、5…NAND型フラッシュメモリ、21…QoSドメイン作成部、22…ライト制御部、23…リード制御部、24…コピー制御部。