(57)【要約】【課題】Ｉ／Ｏ性能の改善を図ることができるメモリシステムを実現する。【解決手段】メモリシステムは、第１のブロック番号と第１の論理アドレスを指定するライト要求をホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロックの前記第１の位置に書き込む。前記メモリシステムは、論理アドレスそれぞれと前記第１のブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理する第１のアドレス変換テーブルを更新して、前記第１の位置を示す第１のブロック内物理アドレスを前記第１の論理アドレスにマッピングする。【選択図】図２
2019057155.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続可能なメモリシステムであって、
各々が複数のページを含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
第１のブロック番号と第１の論理アドレスを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロックの前記第１の位置に書き込み、論理アドレスそれぞれと前記第１のブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理する第１のアドレス変換テーブルを更新して、前記第１の位置を示す第１のブロック内物理アドレスを前記第１の論理アドレスにマッピングする動作を実行し、
前記第１のブロック番号と前記第１の論理アドレスを指定するリード要求を前記ホストから受信した場合、前記第１の論理アドレスを使用して前記第１のアドレス変換テーブルを参照して、前記第１のブロック内物理アドレスを取得し、前記第１のブロック番号と前記取得された第１のブロック内物理アドレスとに基づいて、前記第１の論理アドレスに対応するデータを前記不揮発性メモリからリードする動作を実行するように構成されている、メモリシステム。
【請求項２】
前記第１のブロック内物理アドレスは、前記第１のブロックの先頭から前記第１の位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す第１のブロック内オフセットによって表される請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記不揮発性メモリのガベージコレクションのためのコピー元ブロック番号およびコピー先ブロック番号を指定する制御コマンドを前記ホストから受信した場合、前記複数のブロックから、前記コピー元ブロック番号を有する第２のブロックと前記コピー先ブロック番号を有する第３のブロックとを選択し、前記第２のブロックに格納されている有効データを書き込むべき前記第３のブロック内のコピー先位置を決定し、前記有効データを前記第３のブロックの前記コピー先位置にコピーする動作を実行するように構成されている請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、前記有効データの論理アドレスにマッピングされているブロック内物理アドレスが、前記有効データが格納されている前記第２のブロック内のコピー元位置を示す第２のブロック内物理アドレスから、前記第３のブロックの前記コピー先位置を示す第３のブロック内物理アドレスに変更されるように、論理アドレスそれぞれと前記第２のブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理する第２のアドレス変換テーブルと、論理アドレスそれぞれと前記第３のブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理する第３のアドレス変換テーブルとを更新するように構成されている請求項３記載のメモリシステム。
【請求項５】
前記第２のブロック内物理アドレスは、前記第２のブロックの先頭から前記コピー元位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す第２のブロック内オフセットによって表され、
前記第３のブロック内物理アドレスは、前記第３のブロックの先頭から前記コピー先位置までのオフセットを前記粒度の倍数で示す第３のブロック内オフセットによって表される請求項４記載のメモリシステム。
【請求項６】
前記コントローラは、前記有効データの論理アドレスと、前記有効データがコピーされた前記コピー先ブロック番号とを前記ホストに通知するように構成されている請求項３記載のメモリシステム。
【請求項７】
前記コントローラは、
最大ブロック番号を要求する第１のコマンドを前記ホストから受信した場合、前記複数のブロックの数を示す最大ブロック番号を前記ホストに通知し、
ブロックサイズを要求する第２のコマンドを前記ホストから受信した場合、前記複数のブロックの各々のブロックサイズを前記ホストに通知するように構成されている請求項１記載のメモリシステム。
【請求項８】
前記コントローラは、前記第２のコマンドにブロック番号が含まれている場合、前記第２のコマンドに含まれている前記ブロック番号を有するブロックのブロックサイズを前記ホストに通知するように構成されている請求項７記載のメモリシステム。
【請求項９】
ホストに接続可能なメモリシステムであって、
各々が複数のページを含む複数のブロックを含む不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、
前記コントローラは、
最大ブロック番号を要求する第１のコマンドを前記ホストから受信した場合、前記複数のブロックの数を示す最大ブロック番号を前記ホストに通知し、
ブロックサイズを要求する第２のコマンドを前記ホストから受信した場合、前記複数のブロックの各々のブロックサイズを前記ホストに通知し、
第１のブロック番号と第１の論理アドレスを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロックの前記第１の位置に書き込み、論理アドレスそれぞれと前記第１のブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理する第１のアドレス変換テーブルを更新して、前記第１の位置を示す第１のブロック内物理アドレスを前記第１の論理アドレスにマッピングする動作を実行し、
前記第１のブロック番号と前記第１の論理アドレスを指定するリード要求を前記ホストから受信した場合、前記第１の論理アドレスを使用して前記第１のアドレス変換テーブルを参照して、前記第１のブロック内物理アドレスを取得し、前記第１のブロック番号と前記取得された第１のブロック内物理アドレスとに基づいて、前記第１の論理アドレスに対応するデータを前記不揮発性メモリからリードする動作を実行するように構成されている、メモリシステム。
【請求項１０】
前記第１のブロック内物理アドレスは、前記第１のブロックの先頭から前記第１の位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す第１のブロック内オフセットによって表される請求項９記載のメモリシステム。
【請求項１１】
前記コントローラは、前記不揮発性メモリのガベージコレクションのための複数のコピー元ブロック番号および複数のコピー先ブロック番号を指定する制御コマンドを前記ホストから受信した場合、前記複数のブロックから、前記複数のコピー元ブロック番号を有する複数の第２のブロックと前記複数のコピー先ブロック番号を有する複数の第３のブロックとを選択し、前記複数の第２のブロックの一つの第２のブロックに格納されている有効データを書き込むべき前記複数の第３のブロックの一つの第３のブロック内のコピー先位置を決定し、前記有効データを前記一つの第３のブロックの前記コピー先位置にコピーし、前記コピーされた有効データの論理ドレスと、前記一つの第３のブロックのブロック番号とを前記ホストに通知する動作を実行するように構成されている請求項９記載のメモリシステム。
【請求項１２】
各々が複数のページを含む複数のブロックを含む不揮発性メモリを制御する制御方法であって、
第１のブロック番号と第１の論理アドレスを指定するライト要求をホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定する動作と、前記ホストからのデータを前記第１のブロックの前記第１の位置に書き込む動作と、論理アドレスそれぞれと前記第１のブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理する第１のアドレス変換テーブルを更新して、前記第１の位置を示す第１のブロック内物理アドレスを前記第１の論理アドレスにマッピングする動作とを実行することと、
前記第１のブロック番号と前記第１の論理アドレスを指定するリード要求を前記ホストから受信した場合、前記第１の論理アドレスを使用して前記第１のアドレス変換テーブルを参照して、前記第１のブロック内物理アドレスを取得する動作と、前記第１のブロック番号と前記取得された第１のブロック内物理アドレスとに基づいて、前記第１の論理アドレスに対応するデータを前記不揮発性メモリからリードする動作とを実行することとを具備する制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。
【０００４】
データセンターのサーバにおいても、ストレージとしてＳＳＤが使用されている。サーバのようなホスト計算機において利用されるストレージにおいては、高いＩ／Ｏ性能が求められている。このため、最近では、ホストとストレージとの間の新たなインタフェースが提案され始めている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】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 >
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、一般に、ＮＡＮＤ型フラッシュメモリの制御は複雑であるため、Ｉ／Ｏ性能を改善するための新たなインタフェースの実現に際しては、ホストとストレージ（メモリシステム）との間の適切な役割分担を考慮することが必要とされる。
【０００７】
本発明が解決しようとする課題は、Ｉ／Ｏ性能の改善を図ることができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００８】
実施形態によれば、ホストに接続可能なメモリシステムは、各々が複数のページを含む複数のブロックを含む不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、第１のブロック番号と第１の論理アドレスを指定するライト要求を前記ホストから受信した場合、前記ホストからのデータを書き込むべき、前記第１のブロック番号を有する第１のブロック内の第１の位置を決定し、前記ホストからのデータを前記第１のブロックの前記第１の位置に書き込み、論理アドレスそれぞれと前記第１のブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理する第１のアドレス変換テーブルを更新して、前記第１の位置を示す第１のブロック内物理アドレスを前記第１の論理アドレスにマッピングする動作を実行する。前記コントローラは、前記第１のブロック番号と前記第１の論理アドレスを指定するリード要求を前記ホストから受信した場合、前記第１の論理アドレスを使用して前記第１のアドレス変換テーブルを参照して、前記第１のブロック内物理アドレスを取得し、前記第１のブロック番号と前記取得された第１のブロック内物理アドレスとに基づいて、前記第１のブロックからデータをリードする動作を実行する。
【図面の簡単な説明】
【０００９】
【図１】ホストと実施形態のメモリシステム（フラッシュストレージデバイス）との関係を示すブロック図。
【図２】従来型ＳＳＤとホストとの間の役割分担と、同実施形態のフラッシュストレージデバイスとホストとの間の役割分担とを説明するための図。
【図３】複数のホストと複数のフラッシュストレージデバイスとの間のデータ転送がネットワーク機器を介して実行される計算機システムの構成例を示すブロック図。
【図４】同実施形態のメモリシステムの構成例を示すブロック図。
【図５】同実施形態のメモリシステムに設けられたＮＡＮＤインタフェースと複数のＮＡＮＤ型フラッシュメモリダイとの関係を示すブロック図。
【図６】複数のブロックの集合によって構築されるスーパーブロックの構成例を示す図。
【図７】ホストによって管理されるブロックレベルアドレス変換テーブルと同実施形態のメモリシステムによって管理されるブロック内アドレス変換テーブルを説明するための図。
【図８】同実施形態のメモリシステムに適用されるライトコマンドを説明するための図。
【図９】同実施形態のメモリシステムに適用されるＴｒｉｍコマンドを説明するための図。
【図１０】物理アドレスを表す、ブロック番号およびオフセットを説明するための図。
【図１１】ライトコマンドに応じて実行される書き込み動作を説明するための図。
【図１２】不良ページをスキップする書き込み動作を説明するための図。
【図１３】不良ページをスキップする書き込み動作の別の例を説明するための図。
【図１４】論理アドレスとデータのペアをブロック内のページに書き込む動作を説明するための図。
【図１５】データをブロック内のページのユーザデータ領域に書き込み、このデータの論理アドレスをこのページの冗長領域に書き込む動作を説明するための図。
【図１６】スーバーブロックが使用される場合におけるブロック番号とオフセットとの関係を説明するための図。
【図１７】同実施形態のメモリシステムに適用される最大ブロック番号ゲットコマンドを説明するための図。
【図１８】最大ブロック番号ゲットコマンドに対するレスポンスを説明するための図。
【図１９】同実施形態のメモリシステムに適用されるブロックサイズゲットコマンドを説明するための図。
【図２０】ブロックサイズゲットコマンドに対するレスポンスを説明するための図。
【図２１】同実施形態のメモリシステムに適用されるブロックアロケートコマンドを説明するための図。
【図２２】ブロックアロケートコマンドに対するレスポンスを説明するための図。
【図２３】ホストと同実施形態のメモリシステムとによって実行されるブロック情報取得処理を示すシーケンスチャート。
【図２４】ホストと同実施形態のメモリシステムとによって実行される書き込み処理のシーケンスを示すシーケンスチャート。
【図２５】すでに書き込まれているデータに対する更新データを書き込むデータ更新動作を示す図。
【図２６】同実施形態のメモリシステムによって管理されるブロック番号ＢＬＫ＃１用のブロック内ＬＵＴを説明するための図。
【図２７】同実施形態のメモリシステムによって管理されるブロック管理テーブルを更新する動作を説明するための図。
【図２８】ホストによって管理されるブロックレベルＬＵＴを更新する動作を説明するための図。
【図２９】無効化すべきデータに対応するブロック番号および物理アドレスを示すホストからの通知に応じてブロック内ＬＵＴおよびブロック管理テーブルを更新する動作を説明するための図。
【図３０】同実施形態のメモリシステムに適用されるリードコマンドを説明するための図。
【図３１】同実施形態のメモリシステムによって実行されるリード動作を説明するためのシーケンスチャート図。
【図３２】同実施形態のメモリシステムに適用されるガベージコレクション（ＧＣ）制御コマンドを説明するための図。
【図３３】同実施形態のメモリシステムに適用されるＧＣ用コールバックコマンドを説明するための図。
【図３４】ホストと同実施形態のメモリシステムとによって実こうされるガベージコレクション（ＧＣ）動作の手順を示すシーケンスチャート。
【図３５】複数のＧＣソースブロック内の全ての有効データを複数のＧＣデスティネーションブロックにコピーする動作を説明するための図。
【図３６】ガベージコレクション（ＧＣ）のために実行されるデータコピー動作の例を説明するための図。
【図３７】図３６のデータコピー動作の結果に基づいて更新されるＧＣデスティネーションブロックのブロック内ＬＵＴの内容を説明するための図。
【図３８】図３６のデータコピー動作の結果に基づいて更新されるＧＣソースブロックのブロック内ＬＵＴの内容を説明するための図。
【図３９】図３６のデータコピー動作の結果に基づいて更新されるホストのブロックレベルＬＵＴの内容を説明するための図。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、実施形態を説明する。  
【００１１】
まず、図１を参照して、一実施形態に係るメモリシステムを含む計算機システムの構成を説明する。
【００１２】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み出すように構成された半導体ストレージデバイスである。このメモリシステムは、ＮＡＮＤフラッシュ技術ベースのフラッシュストレージデバイス３として実現されている。
【００１３】
この計算機システムは、ホスト（ホストデバイス）２と、複数のフラッシュストレージデバイス３とを含んでいてもよい。ホスト２は、複数のフラッシュストレージデバイス３によって構成されるフラッシュアレイをストレージとして使用するように構成されたサーバであってもよい。ホスト（サーバ）２と複数のフラッシュストレージデバイス３は、インタフェース５０を介して相互接続される（内部相互接続）。この内部相互接続のためのインタフェース５０としては、これに限定されないが、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）（登録商標）、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）、Ｅｔｈｅｒｎｅｔ（登録商標）、ＮＶＭｅ  ｏｖｅｒ  Ｆａｂｒｉｃｓ（ＮＶＭｅＯＦ）等を使用し得る。
【００１４】
ホスト２として機能するサーバの典型例としては、データセンター内のサーバが挙げられる。
【００１５】
ホスト２がデータセンター内のサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５１を介して複数のエンドユーザ端末（クライアント）６１に接続されてもよい。ホスト２は、これらエンドユーザ端末６１に対して様々なサービスを提供することができる。
【００１６】
ホスト（サーバ）２によって提供可能なサービスの例には、（１）システム稼働プラットフォームを各クライアント（各エンドユーザ端末６１）に提供するプラットホーム・アズ・ア・サービス（ＰａａＳ）、（２）仮想サーバのようなインフラストラクチャを各クライアント（各エンドユーザ端末６１）に提供するインフラストラクチャ・アズ・ア・サービス（ＩａａＳ）、等がある。
【００１７】
複数の仮想マシンが、このホスト（サーバ）２として機能する物理サーバ上で実行されてもよい。ホスト（サーバ）２上で走るこれら仮想マシンの各々は、対応する幾つかのクライアント（エンドユーザ端末６１）に各種サービスを提供するように構成された仮想サーバとして機能することができる。
【００１８】
ホスト（サーバ）２は、フラッシュアレイを構成する複数のフラッシュストレージデバイス３を管理するストレージ管理機能と、エンドユーザ端末６１それぞれに対してストレージアクセスを含む様々なサービスを提供するフロントエンド機能とを含む。
【００１９】
従来型ＳＳＤにおいては、ＮＡＮＤ型フラッシュメモリのブロック／ページの階層構造はＳＳＤ内のフラッシュトランスレーション層（ＦＴＬ）によって隠蔽されている。つまり、従来型ＳＳＤのＦＴＬは、（１）論理物理アドレス変換テーブルとして機能するルックアップテーブルを使用して、論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスそれぞれとの間のマッピングを管理する機能、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための機能と、（３）ＮＡＮＤ型フラッシュメモリのガベージコレクション（ＧＣ）を実行する機能、等を有している。論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリの物理アドレスの間のマッピングは、ホストからは見えない。ＮＡＮＤ型フラッシュメモリのブロック／ページ構造もホストからは見えない。
【００２０】
一方、ホストにおいても、一種のアドレス変換（アプリケーションレベルアドレス変換）が実行されることがある。このアドレス変換は、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーションレベルの論理アドレスそれぞれとＳＳＤ用の論理アドレスそれぞれとの間のマッピングを管理する。また、ホストにおいても、ＳＳＤ用の論理アドレス空間上に生じるフラグメントの解消のために、この論理アドレス空間上のデータ配置を変更する一種のＧＣ（アプリケーションレベルＧＣ）が実行される。
【００２１】
しかし、ホストおよびＳＳＤがそれぞれアドレス変換テーブルを有するという冗長な構成（ＳＳＤは論理物理アドレス変換テーブルとして機能するルックアップテーブルを有し、ホストはアプリケーションレベルアドレス変換テーブルを有する）においては、これらアドレス変換テーブルを保持するために膨大なメモリリソースが消費される。さらに、ホスト側のアドレス変換とＳＳＤ側のアドレス変換とを含む２重のアドレス変換は、Ｉ／Ｏ性能を低下させる要因にもなる。
【００２２】
さらに、ホスト側のアプリケーションレベルＧＣは、ＳＳＤへのデータ書き込み量を実際のユーザデータ量の数倍（例えば２倍）程度に増やす要因となる。このようなデータ書き込み量の増加は、ＳＳＤのライトアンプリフィケーションとあいまってシステム全体のストレージ性能を低下させ、またＳＳＤの寿命も短くする。
【００２３】
このような問題点を解消するために、従来型ＳＳＤのＦＴＬの機能の全てをホストに移すという対策も考えられる。
【００２４】
しかし、この対策を実装するためには、ＮＡＮＤ型フラッシュメモリのブロックおよびページをホストが直接的にハンドリングすることが必要となる。ＮＡＮＤ型フラッシュメモリにおいては、ページ書き込み順序制約があるため、ホストがページを直接ハンドリングすることは困難である。また、ＮＡＮＤ型フラッシュメモリにおいては、ブロックが不良ページ（バッドページ）を含む場合がある。バッドページをハンドリングすることはホストにとってはなおさら困難である。
【００２５】
そこで、本実施形態では、ＦＴＬの役割はホスト２とフラッシュストレージデバイス３との間で分担される。概していえば、ホスト２は、ブロックを割り当てるためのブロックレベルＦＴＬを実行し、フラッシュストレージデバイス３は、ブロック内のページを割り当てるためのブロック内ＦＴＬを実行する。
【００２６】
ホスト２は、論理アドレスそれぞれとブロック番号それぞれとの間のマッピングを管理するためのブロックレベルアドレス変換テーブルであるブロックレベルルックアップテーブル（ブロックレベルＬＵＴ）を管理し、フラッシュストレージデバイス３は、論理アドレスそれぞれと各ブロックのブロック内物理アドレスとの間のマッピングを管理するためのページレベルアドレス変換テーブルであるブロック内ルックアップテーブル（ブロック内ＬＵＴ）を管理する。
【００２７】
フラッシュストレージデバイス３にデータを書き込む必要がある時、ホスト２は、ブロック番号を選択（またはフラッシュストレージデバイス３にフリーブロックを割り当てるように要求）し、論理アドレスと、選択したブロックのブロック番号（またはフラッシュストレージデバイス３によって通知される割り当てられたブロックのブロック番号）とを指定するライト要求（ライトコマンド）をフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３は、ライト要求（ライトコマンド）内の指定されたブロック番号に対応するブロックにホスト２からのデータを書き込む。この場合、フラッシュストレージデバイス３、このブロック内の書き込み先位置を決定し、ホスト２からのデータをこの書き込み先位置に書き込む。
【００２８】
ホスト２のブロックレベルＦＴＬは、ストレージサービスを実行する機能、ウェアー制御機能、高可用性を実現するための機能、同じ内容を有する複数の重複データ部がストレージに格納されることを防止する重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）機能、ガベージコレクション（ＧＣ）ブロック選択機能、ＱｏＳ制御機能等を有する。ＱｏＳ制御機能には、ＱｏＳドメイン毎（またはブロック毎）にアクセス単位を決める機能が含まれる。アクセス単位は、ホスト２がライト／リードすることが可能な最小データサイズ（Ｇｒａｉｎ）を示す。フラッシュストレージデバイス３は単一、あるいは複数のアクセス単位（Ｇｒａｉｎ）をサポートしており、ホスト２は、フラッシュストレージデバイス３が複数のアクセス単位をサポートしている場合にはＱｏＳドメイン毎（またはブロック毎）に、使用すべきアクセス単位をフラッシュストレージデバイス３に指示することができる。
【００２９】
また、ＱｏＳ制御機能には、ＱｏＳドメイン間の性能干渉をできるだけ防ぐための機能が含まれている。この機能は、基本的には、安定したレイテンシを保つための機能である。
【００３０】
一方、フラッシュストレージデバイス３のブロック内ＦＴＬは、ブロック内のページを割り当てる機能に加え、ＧＣ実行機能を有する。ＧＣ実行機能は、ホスト２によって選択されたコピー元ブロック（ＧＣソースブロック）内の有効データを、ホスト２によって選択されたコピー先ブロック（ＧＣデスティネーションブロック）にコピーする。フラッシュストレージデバイス３のブロック内ＦＴＬは、有効データを書き込むべきＧＣデスティネーションブロック内の位置（コピー先位置）を決定し、ＧＣソースブロック内の有効データを、ＧＣデスティネーションブロック内のコピー先位置にコピーする。
【００３１】
図２は、従来型ＳＳＤとホストとの間の役割分担と、本実施形態のフラッシュストレージデバイス３とホスト２との間の役割分担とを示す。
【００３２】
図２の左部は、従来型ＳＳＤと仮想ディスクサービスを実行するホストとを含む計算機システム全体の階層構造を表している。
【００３３】
ホスト（サーバ）においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス１０１が実行される。仮想マシンサービス１０１上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション１０２が実行される。
【００３４】
また、ホスト（サーバ）においては、複数のユーザアプリケーション１０２に対応する複数の仮想ディスクサービス１０３が実行される。各仮想ディスクサービス１０３は、従来型ＳＳＤ内のストレージリソースの容量の一部を、対応するユーザアプリケーション１０２用のストレージリソース（仮想ディスク）として割り当てる。各仮想ディスクサービス１０３においては、アプリケーションレベルアドレス変換テーブルを使用して、アプリケーションレベルの論理アドレスをＳＳＤ用の論理アドレスに変換するアプリケーションレベルアドレス変換も実行される。さらに、ホストにおいては、アプリケーションレベルＧＣ１０４も実行される。
【００３５】
ホスト（サーバ）から従来型ＳＳＤへのコマンドの送信および従来型ＳＳＤからホスト（サーバ）へのコマンド完了のレスポンスの返送は、ホスト（サーバ）および従来型ＳＳＤの各々に存在するＩ／Ｏキュー２００を介して実行される。
【００３６】
従来型ＳＳＤは、ライトバッファ（ＷＢ）３０１、ルックアップテーブル（ＬＵＴ）３０２、ガベージコレクション機能３０３、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）３０４を含む。従来型ＳＳＤは、一つのルックアップテーブル（ＬＵＴ）３０２のみを管理しており、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）３０４のリソースは複数の仮想ディスクサービス１０３によって共有される。
【００３７】
この構成においては、仮想ディスクサービス１０３下のアプリケーションレベルＧＣ１０４と従来型ＳＳＤ内のガベージコレクション機能３０３（ＬＵＴレベルＧＣ）とを含む重複したＧＣにより、ライトアンプリフィケーションが大きくなる。また、従来型ＳＳＤにおいては、あるエンドユーザまたはある仮想ディスクサービス１０３からのデータ書き込み量の増加によってＧＣの頻度が増加し、これによって他のエンドユーザまたは他の仮想ディスクサービス１０３に対するＩ／Ｏ性能が劣化するというノイジーネイバー問題が生じうる。
【００３８】
また、各仮想ディスクサービス内のアプリケーションレベルアドレス変換テーブルと従来型ＳＳＤ内のＬＵＴ３０２とを含む重複したリソースの存在により、多くのメモリリソースが消費される。
【００３９】
図２の右部は、本実施形態のフラッシュストレージデバイス３とホスト２とを含む計算機システム全体の階層構造を表している。
【００４０】
ホスト（サーバ）２においては、複数のエンドユーザに複数の仮想マシンを提供するための仮想マシンサービス４０１が実行される。仮想マシンサービス４０１上の各仮想マシンにおいては、対応するエンドユーザによって使用されるオペレーティングシステムおよびユーザアプリケーション４０２が実行される。
【００４１】
また、ホスト（サーバ）２においては、複数のユーザアプリケーション４０２に対応する複数のＩ／Ｏサービス４０３が実行される。これらＩ／Ｏサービス４０３には、ＬＢＡベースのブロックＩ／Ｏサービス、キー・バリュー・ストアサービスなどが含まれてもよい。各Ｉ／Ｏサービス４０３は、論理アドレスそれぞれとフラッシュストレージデバイス３のブロック番号それぞれとの間のマッピングを管理するブロックレベルＬＵＴを含む。ここで、論理アドレスとは、アクセス対象のデータを識別可能な識別子を意味する。この論理アドレスは、論理アドレス空間上の位置を指定する論理ブロックアドレス（ＬＢＡ）であってもよいし、あるいは、キー・バリュー・ストアのキー（タグ）であってもよいし、キーのハッシュ値であってもよい。
【００４２】
ＬＢＡベースのブロックＩ／Ｏサービスにおいては、論理アドレス（ＬＢＡ）それぞれとフラッシュストレージデバイス３のブロック番号それぞれとの間のマッピングを管理するブロックレベルＬＵＴが使用されてもよい。
【００４３】
キー・バリュー・ストアサービスにおいては、論理アドレス（つまり、キーのようなタグ）それぞれとこれら論理アドレス（つまり、キーのようなタグ）に対応するデータが格納されているフラッシュストレージデバイス３のブロック番号それぞれとの間のマッピングを管理するブロックレベルＬＵＴが使用されてもよい。このブロックレベルＬＵＴにおいては、タグと、このタグによって識別されるデータが格納されているブロック番号と、このデータのデータ長との対応関係が管理されてもよい。
【００４４】
各エンドユーザは、使用すべきアドレッシング方法（ＬＢＡ、キー・バリュー・ストアのキー、等）を選択することができる。
【００４５】
これら各ブロックレベルＬＵＴは、ユーザアプリケーション４０２からの論理アドレスそれぞれをフラッシュストレージデバイス３用の論理アドレスそれぞれに変換するのではなく、ユーザアプリケーション４０２からの論理アドレスそれぞれをフラッシュストレージデバイス３のブロック番号それぞれに変換する。つまり、これら各ブロックレベルＬＵＴは、フラッシュストレージデバイス３用の論理アドレスをブロック番号に変換するテーブルとアプリケーションレベルアドレス変換テーブルとが統合（マージ）されたテーブルである。
【００４６】
また、各Ｉ／Ｏサービス４０３は、ＧＣブロック選択機能を含む。ＧＣブロック選択機能は、対応するブロックレベルＬＵＴを使用して各ブロックの有効データ量を管理することができ、これによってＧＣソースブロックを選択することができる。
【００４７】
ホスト（サーバ）２においては、上述のＱｏＳドメイン毎にＩ／Ｏサービス４０３が存在してもよい。あるＱｏＳドメインに属するＩ／Ｏサービス４０３は、対応するＱｏＳドメイン内のユーザアプリケーション４０２によって使用される論理アドレスそれぞれと対応するＱｏＳドメインに割り当てられたリソースグループに属するブロック群のブロック番号それぞれとの間のマッピングを管理する。
【００４８】
ホスト（サーバ）２からフラッシュストレージデバイス３へのコマンドの送信およびフラッシュストレージデバイス３からホスト（サーバ）２へのコマンド完了のレスポンス等の返送は、ホスト（サーバ）２およびフラッシュストレージデバイス３の各々に存在するＩ／Ｏキュー５００を介して実行される。これらＩ／Ｏキュー５００も、複数のＱｏＳドメインに対応する複数のキューグループに分類されていてもよい。
【００４９】
フラッシュストレージデバイス３は、複数のＱｏＳドメインに対応する複数のライトバッファ（ＷＢ）６０１、複数のＱｏＳドメインに対応する複数のブロック内ＬＵＴ６０２、複数のＱｏＳドメインに対応する複数のガベージコレクション（ＧＣ）機能６０３、ＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）６０４を含む。
【００５０】
この図２の右部に示す構成においては、上位階層（ホスト２）はブロック境界を認識することができるので、ブロック境界／ブロックサイズを考慮してユーザデータを各ブロックに書き込むことができる。つまり、ホスト２はＮＡＮＤ型フラッシュメモリ（ＮＡＮＤフラッシュアレイ）６０４の個々のブロックを認識することができ、これにより、例えば、一つのブロック全体に一斉にデータを書き込む、一つのブロック内のデータ全体を削除または更新によって無効化する、といった制御を行うことが可能となる。この結果、一つのブロックに有効データと無効データが混在されるという状況を起こりにくくすることが可能となる。したがって、ＧＣを実行することが必要となる頻度を低減することができる。ＧＣの頻度を低減することにより、ライトアンプリフィケーションが低下され、フラッシュストレージデバイス３の性能の向上、フラッシュストレージデバイス３の寿命の最大化を実現できる。このように、上位階層（ホスト２）がブロック番号を認識可能な構成は有用である。
【００５１】
一方、ページ書き込み順序制約により、現在書き込み可能なページはブロックあたり１ページのみである。このため、ページ番号を上位階層に見せることは、ブロック番号を上位階層に見せることに比較して有用ではない。
【００５２】
図３は、図１のシステム構成の変形例を示す。
【００５３】
図３においては、複数のホスト２Ａと複数のフラッシュストレージデバイス３との間のデータ転送がネットワーク機器（ここでは、ネットワークスイッチ１）を介して実行される。
【００５４】
すなわち、図３の計算機システムにおいては、図１のサーバ２のストレージ管理機能がマネージャ２Ｂに移され、且つサーバ２のフロントエンド機能が複数のホスト（エンドユーザサービス用ホスト）２Ａに移されている。
【００５５】
マネージャ２Ｂは、複数のフラッシュストレージデバイス３を管理し、各ホスト（エンドユーザサービス用ホスト）２Ａからの要求に応じて、これらフラッシュストレージデバイス３のストレージリソースを各ホスト（エンドユーザサービス用ホスト）２Ａに割り当てる。
【００５６】
各ホスト（エンドユーザサービス用ホスト）２Ａは、ネットワークを介して一つ以上のエンドユーザ端末６１に接続される。各ホスト（エンドユーザサービス用ホスト）２Ａは、上述のブロックレベルＬＵＴを管理する。各ホスト（エンドユーザサービス用ホスト）２Ａは、自身のブロックレベルＬＵＴを使用して、対応するエンドユーザによって使用される論理アドレスそれぞれと自身に割り当てられたリソースのブロック番号それぞれとの間のマッピングのみを管理する。したがって、この構成は、システムを容易にスケールアウトすることを可能にする。
【００５７】
各ホスト２ＡのブロックレベルＦＴＬは、ブロックレベルＬＵＴを管理する機能、高可用性を実現するための機能、ＱｏＳ制御機能、ＧＣブロック選択機能等を有する。
【００５８】
マネージャ２Ｂは、複数のフラッシュストレージデバイス３を管理するための専用のデバイス（計算機）である。マネージャ２Ｂは、各ホスト２Ａから要求された容量分のストレージリソースを予約するグローバルリソース予約機能を有する。さらに、マネージャ２Ｂは、各フラッシュストレージデバイス３の消耗度を監視するためのウェアー監視機能、予約されたストレージリソース（ＮＡＮＤリソース）を各ホスト２Ａに割り当てるＮＡＮＤリソース割り当て機能、ＱｏＳ制御機能、グローバルクロック管理機能、等を有する。
【００５９】
各フラッシュストレージデバイス３のブロック内ＦＴＬは、ライトバッファを管理する機能、ＧＣ実行機能等を有する。
【００６０】
図３のシステム構成によれば、各フラッシュストレージデバイス３の管理はマネージャ２Ｂによって実行されるので、各ホスト２Ａは、自身に割り当てられた一つ以上のフラッシュストレージデバイス３にＩ／Ｏ要求を送信する動作と、フラッシュストレージデバイス３からのレスポンスを受信するという動作とのみを実行すればよい。つまり、複数のホスト２Ａと複数のフラッシュストレージデバイス３との間のデータ転送はスイッチ１のみを介して実行され、マネージャ２Ｂはこのデータ転送には関与しない。また、上述したように、ホスト２Ａそれぞれによって管理されるブロックレベルＬＵＴの内容は互いに独立している。よって、容易にホスト２Ａの数を増やすことができるので、スケールアウト型のシステム構成を実現することができる。
【００６１】
図４は、フラッシュストレージデバイス３の構成例を示す。
【００６２】
フラッシュストレージデバイス３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。フラッシュストレージデバイス３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００６３】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。
【００６４】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、複数のブロックＢＬＫ０〜ＢＬＫｍ−１を含む。ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。ブロックＢＬＫ０〜ＢＬＫｍ−１は、消去単位として機能する。ブロックは、「消去ブロック」、「物理ブロック」、または「物理消去ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００６５】
コントローラ４は、Ｔｏｇｇｌｅ、オープンＮＡＮＤフラッシュインタフェース（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリコントローラ（制御回路）である。
【００６６】
ＮＡＮＤ型フラッシュメモリ５は、図５に示すように、複数のＮＡＮＤ型フラッシュメモリダイを含む。各ＮＡＮＤ型フラッシュメモリダイは、複数のブロックＢＬＫを含むメモリセルアレイとこのメモリセルアレイを制御する周辺回路とを含む不揮発性メモリダイである。個々のＮＡＮＤ型フラッシュメモリダイは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリダイは、並列動作単位として機能する。ＮＡＮＤ型フラッシュメモリダイは、「ＮＡＮＤ型フラッシュメモリチップ」または「不揮発性メモリチップ」とも称される。図５においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６が接続されており、これらチャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６の各々に、同数（例えばチャンネル当たり２個のダイ）のＮＡＮＤ型フラッシュメモリダイそれぞれが接続されている場合が例示されている。各チャンネルは、対応するＮＡＮＤ型フラッシュメモリダイと通信するための通信線（メモリバス）を含む。
【００６７】
コントローラ４は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６を介してＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２を制御する。コントローラ４は、チャンネルＣｈ１、Ｃｈ２、…Ｃｈ１６を同時に駆動することができる。
【００６８】
チャンネルＣｈ１〜Ｃｈ１６に接続された１６個のＮＡＮＤ型フラッシュメモリダイ＃１〜＃１６は第１のバンクとして編成されてもよく、またチャンネルＣｈ１〜Ｃｈ１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリダイ＃１７〜＃３２は第２のバンクとして編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図５の構成例においては、１６チャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリダイを並列動作させることができる。
【００６９】
本実施形態では、コントローラ４は、各々が複数のブロックＢＬＫから構成される複数のブロック（以下、スーパーブロックと称する）を管理してもよく、スーパーブロックの単位で消去動作を実行してもよい。
【００７０】
スーパーブロックは、これに限定されないが、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２から一つずつ選択される計３２個のブロックＢＬＫを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個のブロックＢＬＫを含んでいてもよい。図６には、一つのスーパーブロックＳＢが、ＮＡＮＤ型フラッシュメモリダイ＃１〜＃３２から一つずつ選択される計３２個のブロックＢＬＫ（図５においては太枠で囲まれているブロックＢＬＫ）から構成される場合が例示されている。
【００７１】
図４に示されているように、コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００７２】
このホストインタフェース１１は、ホスト２との通信を実行するように構成されたホストインタフェース回路である。このホストインタフェース１１は、例えば、ＰＣＩｅコントローラ（ＮＶＭｅコントローラ）であってよい。ホストインタフェース１１は、ホスト２から様々な要求（コマンド）を受信する。これら要求（コマンド）には、ライト要求（ライトコマンド）、リード要求（リードコマンド）、他の様々な要求（コマンド）が含まれる。
【００７３】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、フラッシュストレージデバイス３の電源オンに応答してＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭから制御プログラム（ファームウェア）をＤＲＡＭ６にロードし、そしてこのファームウェアを実行することによって様々な処理を行う。なお、ファームウェアはコントローラ４内の図示しないＳＲＡＭ上にロードされてもよい。このＣＰＵ１２は、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、コマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００７４】
ＣＰＵ１２は、ライト動作制御部２１、リード動作制御部２２、およびＧＣ動作制御部２３として機能することができる。これらライト動作制御部２１、リード動作制御部２２、およびＧＣ動作制御部２３においては、図２の右部に示すシステム構成を実現するためのアプリケーションプログラムインタフェース（ＡＰＩ）が実装されている。
【００７５】
ライト動作制御部２１は、ブロック番号と論理アドレスを指定するライト要求（ライトコマンド）をホスト２から受信する。論理アドレスは、書き込むべきデータ（ユーザデータ）を識別可能な識別子であり、例えば、ＬＢＡであってもよいし、あるいはキー・バリュー・ストアのキーのようなタグであってもよいし、キーのハッシュ値であってもよい。ブロック番号は、このデータが書き込まれるべきブロックを指定する識別子である。ブロック番号としては、複数のブロック内の任意の一つを一意に識別可能な様々な値を使用し得る。ブロック番号によって指定されるブロックは、物理ブロックであってもよいし、上述のスーパーブロックであってもよい。ライトコマンドを受信した場合、ライト動作制御部２１は、まず、ホスト２からのデータを書き込むべき、この指定されたブロック番号を有するブロック（書き込み先ブロック）内の位置（書き込み先位置）を決定する。次いで、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）を、この書き込み先ブロックの書き込み先位置に書き込む。この場合、ライト動作制御部２１は、ホスト２からのデータのみならず、このデータとこのデータの論理アドレスの双方を書き込み先ブロックに書き込むことができる。
【００７６】
そして、ライト動作制御部２１は、論理アドレスそれぞれとこのブロックのブロック内物理アドレスそれぞれとの間のマッピングを管理するブロック内ＬＵＴ３２を更新して、この書き込み先ブロックの上述の書き込み先位置を示すブロック内物理アドレスをライトデータの論理アドレスにマッピングする。
【００７７】
この場合、このブロック内物理アドレスは、この書き込み先ブロック内の書き込み先位置を示すブロック内オフセットによって表される。
【００７８】
この場合、このブロック内オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセット、つまり書き込み先ブロックの先頭に対する書き込み先位置のオフセットを示す。書き込み先ブロックの先頭から書き込み先位置までのオフセットのサイズは、ページサイズとは異なるサイズを有する粒度（Ｇｒａｉｎ）の倍数で示される。粒度（Ｇｒａｉｎ）は、上述のアクセス単位である。粒度（Ｇｒａｉｎ）のサイズの最大値は、ブロックサイズまでに制限される。換言すれば、ブロック内オフセットは、書き込み先ブロックの先頭から書き込み先位置までのオフセットをページサイズとは異なるサイズを有する粒度の倍数で示す。
【００７９】
粒度（Ｇｒａｉｎ）は、ページサイズよりも小さいサイズを有していてもよい。例えば、ページサイズが１６Ｋバイトである場合、粒度（Ｇｒａｉｎ）は、そのサイズが４Ｋバイトであってもよい。この場合、ある一つのブロックにおいては、各々サイズが４Ｋバイトである複数のオフセット位置が規定される。ブロック内の最初のオフセット位置に対応するブロック内オフセットは、例えば０であり、ブロック内の次のオフセット位置に対応するブロック内オフセットは、例えば１である、ブロック内のさらに次のオフセット位置に対応するブロック内オフセットは、例えば２である。
【００８０】
あるいは、粒度（Ｇｒａｉｎ）は、ページサイズよりも大きなサイズを有していてもよい。例えば、粒度（Ｇｒａｉｎ）は、ページサイズの数倍のサイズであってもよい。ページサイズが１６Ｋバイトである場合、粒度は、３２Ｋバイトのサイズであってもよい。
【００８１】
このように、ライト動作制御部２１は、ホスト２からのブロック番号を有するブロック内の書き込み先位置を自身で決定し、そしてホスト２からのライトデータをこのブロック内のこの書き込み先位置に書き込む。そして、ライト動作制御部２１は、このブロックに対応するブロック内ＬＵＴ３２を更新して、書き込み先位置を示すブロック内物理アドレス（ブロック内オフセット）をライトデータの論理アドレスにマッピングする。これにより、フラッシュストレージデバイス３は、ブロック番号をホスト２にハンドリングさせつつ、ページ書き込み順序制約、バッドページ、ページサイズ等を隠蔽することができる。
【００８２】
この結果、ホスト２は、ブロック境界は認識できるが、ページ書き込み順序制約、バッドページ、ページサイズについては意識することなく、どのユーザデータがどのブロック番号に存在するかを管理することができる。
【００８３】
リード動作制御部２２は、論理アドレスとブロック番号を指定するリード要求（リードコマンド）をホスト２から受信した場合、この論理アドレスを使用して、このリード要求によって指定されたブロック番号を有するブロックに対応するブロック内ＬＵＴ３２を参照する。これにより、リード動作制御部２２は、この論理アドレスに対応するデータが格納されている、このブロックのブロック内物理アドレス（ブロック内オフセット）を取得することができる。そして、リード動作制御部２２は、リード要求によって指定されたブロック番号と、取得されたブロック内物理アドレスとに基づいて、この論理アドレスに対応するデータをＮＡＮＤ型フラッシュメモリ５からリードする。
【００８４】
この場合、リード対象のブロックは、ブロック番号によって特定される。このブロック内のリード対象の物理記憶位置は、ブロック内オフセットによって特定される。リード対象の物理記憶位置を得るために、リード動作制御部２２は、まず、このブロック内オフセットを、ページサイズを表す粒度の数（ここでは、４）で除算し、そしてこの除算によって得られる商および余りを、リード対象のページ番号およびリード対象のページ内オフセットとしてそれぞれ決定してもよい。
【００８５】
ＧＣ動作制御部２３は、ＮＡＮＤ型フラッシュメモリ５のガベージコレクションのためのコピー元ブロック番号（ＧＣソースブロック番号）およびコピー先ブロック番号（ＧＣデスティネーションブロック番号）を指定するＧＣ制御コマンドをホスト２から受信した場合、ＮＡＮＤ型フラッシュメモリ５の複数のブロックから、指定されたコピー元ブロック番号を有するブロックと指定されたコピー先ブロック番号を有するブロックとをコピー元ブロック（ＧＣソースブロック）およびコピー先ブロック番号（ＧＣデスティネーションブロック）として選択する。ＧＣ動作制御部２３は、選択されたＧＣソースブロックに格納されている有効データを書き込むべきＧＣデスティネーションブロック内のコピー先位置を決定し、有効データをＧＣデスティネーションブロック内のコピー先位置にコピーする。
【００８６】
そして、ＧＣ動作制御部２３は、有効データの論理アドレスにマッピングされているブロック内物理アドレス（ブロック内オフセット）が、この有効データが格納されているＧＣソースブロック内のコピー元位置を示すブロック内物理アドレスから、ＧＣデスティネーションブロック内のコピー先位置を示すブロック内物理アドレスに変更されるように、ＧＣソースブロックに対応するブロック内ＬＵＴとＧＣデスティネーションブロックに対応するブロック内ＬＵＴを更新する。
【００８７】
有効データ／無効データの管理は、ブロック管理テーブル３３を使用して実行されてもよい。このブロック管理テーブル３３は、例えば、ブロック毎に存在してもよい。あるブロックに対応するブロック管理テーブル３３においては、このブロック内のデータそれぞれの有効／無効を示すビットマップフラグが格納されている。ここで、有効データとは、論理アドレスから最新のデータとして紐付けられているデータであって、後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされる可能性が無いデータを意味する。例えば、ある論理アドレスに関連付けられているデータは有効データであり、どの論理アドレスにも関連付けられていないデータは無効データである。
【００８８】
上述したように、ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）内に格納されている有効データを書き込むべきコピー先ブロック（ＧＣデスティネーションブロック）内の位置（コピー先位置）を決定し、有効データをコピー先ブロック（ＧＣデスティネーションブロック）のこの決定された位置（コピー先位置）にコピーする。この場合、ＧＣ動作制御部２３は、有効データとこの有効データの論理アドレスの双方を、コピー先ブロック（ＧＣデスティネーションブロック）にコピーしてもよい。
【００８９】
本実施形態では、上述したように、ライト動作制御部２１は、ホスト２からのデータ（ライトデータ）とホスト２からの論理アドレスの双方を書き込み先ブロックに書き込むことができる。このため、ＧＣ動作制御部２３は、コピー元ブロック（ＧＣソースブロック）内の各データの論理アドレスをこのコピー元ブロック（ＧＣソースブロック）から容易に取得することができるので、コピー元ブロックに対応するブロック内ＬＵＴおよびコピー先ブロックに対応するブロック内ＬＵＴを容易に更新することができる。
【００９０】
ＮＡＮＤインタフェース１３は、ＣＰＵ１２の制御の下、ＮＡＮＤ型フラッシュメモリ５を制御するように構成されたメモリ制御回路である。ＤＲＡＭインタフェース１４は、ＣＰＵ１２の制御の下、ＤＲＡＭ６を制御するように構成されたＤＲＡＭ制御回路である。ＤＲＡＭ６の記憶領域の一部は、ライトバッファ（ＷＢ）３１の格納のために使用される。また、ＤＲＡＭ６の記憶領域の他の一部は、ブロック内ＬＵＴ３２、ブロック管理テーブル３２の格納のために使用される。なお、これらライトバッファ（ＷＢ）３１、ブロック内ＬＵＴ３２、およびブロック管理テーブル３２は、コントローラ４内の図示しないＳＲＡＭに格納されてもよい。
【００９１】
図８は、ホスト２によって管理されるブロックレベルＬＵＴ（ブロックレベルアドレス変換テーブル）とフラッシュストレージデバイス３によって管理されるブロック内ＬＵＴ（ブロック内アドレス変換テーブル）を示す。
【００９２】
ブロックレベルＬＵＴは、論理アドレスそれぞれとフラッシュストレージデバイス３の複数のブロックそれぞれに対応するブロック番号それぞれとの間のマッピングを管理する。このブロックレベルＬＵＴは、ある論理アドレスをあるブロック番号ＢＬＫ＃に変換するテーブルである。
【００９３】
フラッシュストレージデバイス３においては、複数のブロックそれぞれに対応する複数のブロック内ＬＵＴが管理される。各ブロック内ＬＵＴは、論理アドレスそれぞれと対応するブロック内のブロック内物理アドレス（フロック内オフセット）それぞれの間のマッピングを管理する。各ブロック内ＬＵＴは、ある論理アドレスをあるブロック内物理アドレス（ブロック内ＰＢＡ）に変換するテーブルである。ブロック内物理アドレス（ブロック内ＰＢＡ）は、上述したようにブロック内オフセットによって表される。
【００９４】
アドレス変換は以下のように実行される。
【００９５】
例えば、リード動作においては、ホスト２は、ある論理アドレス（例えば、あるＬＢＡ）を使用してブロックレベルＬＵＴを参照して、この論理アドレス（ＬＢＡ）をブロック番号ＢＬＫ＃に変換する。この論理アドレスおよびブロック番号ＢＬＫ＃がホスト２からフラッシュストレージデバイス３に送信される。本実施形態においては、各ブロックに特定の論理アドレス範囲を割り当てるのではなく、どのブロックに対しても任意の論理アドレスに対応するデータを格納できるようにするために、この論理アドレスそのものがブロック番号ＢＬＫ＃と一緒にホスト２からフラッシュストレージデバイス３に送信される。
【００９６】
フラッシュストレージデバイス３においては、コントローラ４は、ブロック番号ＢＬＫ＃に対応するブロック内ＬＵＴを選択する。例えば、ホスト２からのブロック番号ＢＬＫ＃がブロック番号ＢＬＫ＃０を示すならば、ブロック番号ＢＬＫ＃０に対応するブロック内ＬＵＴが選択され、ホスト２からのブロック番号ＢＬＫ＃がブロック番号ＢＬＫ＃１を示すならば、ブロック番号ＢＬＫ＃１に対応するブロック内ＬＵＴが選択され、ホスト２からのブロック番号ＢＬＫ＃がブロック番号ＢＬＫ＃２を示すならば、ブロック番号ＢＬＫ＃２に対応するブロック内ＬＵＴが選択される。
【００９７】
選択されたブロック内ＬＵＴは、ホスト２からの論理アドレスによって参照される。そして、この論理アドレスに対応するブロック内ＰＢＡが選択されたブロック内ＬＵＴから取得される。
【００９８】
図８は、フラッシュストレージデバイス３に適用されるライトコマンドを示す。
【００９９】
ライトコマンドは、フラッシュストレージデバイス３にデータの書き込みを要求するコマンドである。このライトコマンドは、コマンドＩＤ、ブロック番号ＢＬＫ＃、論理アドレス、長さ、等を含んでもよい。
【０１００】
コマンドＩＤはこのコマンドがライトコマンドであることを示すＩＤ（コマンドコード）であり、ライトコマンドにはライトコマンド用のコマンドＩＤが含まれる。
【０１０１】
ブロック番号ＢＬＫ＃は、データが書き込まれるべきブロックを一意に識別可能な識別子（ブロックアドレス）である。
【０１０２】
論理アドレスは、書き込まれるべきライトデータを識別するための識別子である。この論理アドレスは、上述したように、ＬＢＡであってもよいし、キー・バリュー・ストアのキーであってもよいし、キーのハッシュ値であってもよい。論理アドレスがＬＢＡである場合には、このライトコマンドに含まれる論理アドレス（開始ＬＢＡ）は、ライトデータが書き込まれるべき論理位置（最初の論理位置）を示す。
【０１０３】
長さは、書き込まれるべきライトデータの長さを示す。この長さ（データ長）は、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、ＬＢＡの数によって指定されてもよいし、あるいはそのサイズがバイトによって指定されてもよい。
【０１０４】
ホスト２からライトコマンドを受信した時、コントローラ４は、ライトコマンドによって指定されたブロック番号を有するブロック内の書き込み先位置を決定する。この書き込み先位置は、ページ書き込み順序の制約およびバッドページ等を考慮して決定される。そして、コントローラ４は、ホスト２からのデータを、ライトコマンドによって指定されたブロック番号を有するこのブロック内のこの書き込み先位置に書き込む。
【０１０５】
図８は、フラッシュストレージデバイス３に適用されるＴｒｉｍコマンドを示す。
【０１０６】
このＴｒｉｍコマンドは、無効にすべきデータが格納されているブロックのブロック番号およびこのデータの論理アドレスを含むコマンドである。このＴｒｉｍコマンドは、コマンドＩＤ、ブロック番号ＢＬＫ＃、論理アドレス、長さを含む。
【０１０７】
コマンドＩＤはこのコマンドがＴｒｉｍコマンドであることを示すＩＤ（コマンドコード）であり、ＴｒｉｍコマンドにはＴｒｉｍコマンド用のコマンドＩＤが含まれる。
【０１０８】
ブロック番号は、無効化すべきデータが格納されているブロックを示す。
【０１０９】
論理アドレスは、無効化すべきデータの最初の論理位置を示す。
【０１１０】
長さは、無効化すべきデータの長さを示す。この長さ（データ長）は、論理アドレスの数によって指定されてもよいし、粒度（Ｇｒａｉｎ）の数によって指定されてもよいし、バイトによって指定されてもよい。
【０１１１】
コントローラ４は、複数のブロックの各々に含まれるデータそれぞれの有効／無効を示すフラグ（ビットマップフラグ）をブロック管理テーブル３３を使用して管理する。無効にすべきデータが格納されているブロックを示すブロック番号および論理アドレスを含むＴｒｉｍコマンドをホスト２から受信した場合、コントローラ４は、ブロック管理テーブル３３を更新して、Ｔｒｉｍコマンドに含まれるブロック番号および論理アドレスによって特定されるブロック内物理アドレスに対応するフラグ（ビットマップフラグ）を無効を示す値に変更する。
【０１１２】
図１０は、ブロック内物理アドレスを規定するブロック内オフセットを示す。
【０１１３】
ブロック番号はある一つのブロックＢＬＫを指定する。各ブロックＢＬＫは、図１０に示されているように、複数のページ（ここでは、ページ０〜ページｎ）を含む。
【０１１４】
ページサイズ（各ページのユーザデータ格納領域）が１６Ｋバイトであり、粒度（Ｇｒａｉｎ）が４ＫＢのサイズであるケースにおいては、このブロックＢＬＫは、４×（ｎ＋１）個の領域に論理的に分割される。
【０１１５】
オフセット＋０はページ０の最初の４ＫＢ領域を示し、オフセット＋１はページ０の２番目の４ＫＢ領域を示し、オフセット＋２はページ０の３番目の４ＫＢ領域を示し、オフセット＋３はページ０の４番目の４ＫＢ領域を示す。
【０１１６】
オフセット＋４はページ１の最初の４ＫＢ領域を示し、オフセット＋５はページ１の２番目の４ＫＢ領域を示し、オフセット＋６はページ１の３番目の４ＫＢ領域を示し、オフセット＋７はページ１の４番目の４ＫＢ領域を示す。
【０１１７】
図１１は、ライトコマンドに応じて実行される書き込み動作を示す。
【０１１８】
いま、ブロックＢＬＫ＃１が書き込み先ブロックとして割り当てられている場合を想定する。コントローラ４は、ページ０、ページ１、ページ２、…ページｎという順序で、データをページ単位でブロックＢＬＫ＃１に書き込む。
【０１１９】
図１１においては、ブロックＢＬＫ＃１のページ０に１６Ｋバイト分のデータがすでに書き込まれている状態で、ブロック番号（＝ＢＬＫ＃１）、論理アドレス（ＬＢＡｘ）および長さ（＝４）を指定するライトコマンドがホスト２から受信された場合が想定されている。コントローラ４は、ブロックＢＬＫ＃１のページ１を書き込み先位置として決定し、ホスト２から受信される１６Ｋバイト分のライトデータをブロックＢＬＫ＃１のページ１に書き込む。そして、コントローラ４は、ブロックＢＬＫ＃１に対応するブロック内ＬＵＴ３２を更新して、オフセット＋５、オフセット＋６、オフセット＋７、オフセット＋８をＬＢＡｘ、ＬＢＡｘ＋１、ＬＢＡｘ＋２、ＬＢＡｘ＋３にそれぞれマッピングする。
【０１２０】
図１２は、不良ページ（バッドページ）をスキップする書き込み動作を示す。
【０１２１】
図１２においては、ブロックＢＬＫ＃１のページ０、ページ１にデータがすでに書き込まれている状態で、ブロック番号（＝ＢＬＫ＃１）、論理アドレス（ＬＢＡｘ＋１）および長さ（＝４）を指定するライトコマンドがホスト２から受信された場合が想定されている。もしブロックＢＬＫ＃１のページ２が不良ページであるならば、コントローラ４は、ブロックＢＬＫ＃１のページ３を書き込み先位置として決定し、ホスト２から受信される１６Ｋバイト分のライトデータをブロックＢＬＫ＃１のページ３に書き込む。そして、コントローラ４は、ブロックＢＬＫ＃１に対応するブロック内ＬＵＴ３２を更新して、オフセット＋１２、オフセット＋１３、オフセット＋１４、オフセット＋１５をＬＢＡｘ＋１、ＬＢＡｘ＋２、ＬＢＡｘ＋３、ＬＢＡｘ＋４にそれぞれマッピングする。
【０１２２】
図１３は、不良ページをスキップする書き込み動作の別の例を示す。
【０１２３】
図１３においては、不良ページを挟む２つのページに跨がってデータが書き込まれる場合が想定されている。いま、ブロックＢＬＫ＃２のページ０、ページ１にデータがすでに書き込まれており、且つライトバッファ３１に未書き込みの８Ｋバイト分のライトデータが残っている場合を想定する。この状態で、ブロック番号（＝ＢＬＫ＃２）、論理アドレス（ＬＢＡｙ）および長さ（＝６）を指定するライトコマンドが受信されたならば、コントローラ４は、未書き込みの８Ｋバイトライトデータと、ホスト２から新たに受信される２４Ｋバイトライトデータ内の最初の８Ｋバイトライトデータとを使用して、ページサイズに対応する１６Ｋバイトライトデータを準備する。そして、コントローラ４は、この準備した１６ＫバイトライトデータをブロックＢＬＫ＃２のページ２に書き込む。
【０１２４】
もしブロックＢＬＫ＃２の次のページ３が不良ページであるならば、コントローラ４は、ブロックＢＬＫ＃２のページ４を次の書き込み先位置として決定し、ホスト２から受信された２４Ｋバイトライトデータ内の残りの１６Ｋバイトライトデータを、ブロックＢＬＫ＃２のページ４に書き込む。
【０１２５】
そして、コントローラ４は、ブロックＢＬＫ＃２に対応するブロック内ＬＵＴ３２を更新して、オフセット＋１０、オフセット＋１１をＬＢＡｙ、ＬＢＡｙ＋１にマッピングし、且つオフセット＋１６、オフセット＋１７、オフセット＋１８、オフセット＋１９をＬＢＡｙ＋２、ＬＢＡｙ＋３、ＬＢＡｙ＋４、ＬＢＡｙ＋５にそれぞれマッピングする。
【０１２６】
図１４、図１５は、論理アドレスとデータのペアをブロック内のページに書き込む動作を示す。
【０１２７】
各ブロックにおいて、各ページは、ユーザデータを格納するためのユーザデータ領域と管理データを格納するための冗長領域とを含んでもよい。ページサイズは１６ＫＢ＋アルファである。
【０１２８】
コントローラ４は、４ＫＢユーザデータとこの４ＫＢユーザデータに対応する論理アドレス（例えばＬＢＡ）との双方を書き込み先ブロックＢＬＫに書き込む。この場合、図１４に示すように、各々がＬＢＡと４ＫＢユーザデータとを含む４つのデータセットが同じページに書き込まれてもよい。ブロック内オフセットは、セット境界を示してもよい。
【０１２９】
あるいは、図１５に示されているように、４つの４ＫＢユーザデータがページ内のユーザデータ領域に書き込まれ、これら４つの４ＫＢユーザデータに対応する４つのＬＢＡがこのページ内の冗長領域に書き込まれてもよい。
【０１３０】
図１６は、スーバーブロックが使用されるケースにおけるブロック番号とオフセット（ブロック内オフセット）との関係を示す。以下では、ブロック内オフセットは単にオフセットとしても参照される。
【０１３１】
ここでは、図示を簡単化するために、ある一つのスーパーブロックＳＢ＃１が４つのブロックＢＬＫ＃１１、ＢＬＫ＃２１、ＢＬＫ＃３１、ＢＬＫ＃４１から構成されている場合が想定されている。コントローラ４は、ブロックＢＬＫ＃１１のページ０、ブロックＢＬＫ＃２１のページ０、ブロックＢＬＫ＃３１のページ０、ブロックＢＬＫ＃４１のページ０、ブロックＢＬＫ＃１１のページ１、ブロックＢＬＫ＃２１のページ１、ブロックＢＬＫ＃３１のページ１、ブロックＢＬＫ＃４１のページ１、…という順序でデータを書き込む。
【０１３２】
オフセット＋０はブロックＢＬＫ＃１１のページ０の最初の４ＫＢ領域を示し、オフセット＋１はブロックＢＬＫ＃１１のページ０の２番目の４ＫＢ領域を示し、オフセット＋２はブロックＢＬＫ＃１１のページ０の３番目の４ＫＢ領域を示し、オフセット＋３はブロックＢＬＫ＃１１のページ０の４番目の４ＫＢ領域を示す。
【０１３３】
オフセット＋４はブロックＢＬＫ＃２１のページ０の最初の４ＫＢ領域を示し、オフセット＋５はブロックＢＬＫ＃２１のページ０の２番目の４ＫＢ領域を示し、オフセット＋６はブロックＢＬＫ＃２１のページ０の３番目の４ＫＢ領域を示し、オフセット＋７はブロックＢＬＫ＃２１のページ０の４番目の４ＫＢ領域を示す。
【０１３４】
同様に、オフセット＋１２はブロックＢＬＫ＃４１のページ０の最初の４ＫＢ領域を示し、オフセット＋１３はブロックＢＬＫ＃４１のページ０の２番目の４ＫＢ領域を示し、オフセット＋１４はブロックＢＬＫ＃４１のページ０の３番目の４ＫＢ領域を示し、オフセット＋１５はブロックＢＬＫ＃４１のページ０の４番目の４ＫＢ領域を示す。
【０１３５】
オフセット＋１６はブロックＢＬＫ＃１１のページ１の最初の４ＫＢ領域を示し、オフセット＋１７はブロックＢＬＫ＃１１のページ１の２番目の４ＫＢ領域を示し、オフセット＋１８はブロックＢＬＫ＃１１のページ１の３番目の４ＫＢ領域を示し、オフセット＋１９はブロックＢＬＫ＃１１のページ１の４番目の４ＫＢ領域を示す。
【０１３６】
オフセット＋２０はブロックＢＬＫ＃２１のページ１の最初の４ＫＢ領域を示し、オフセット＋２１はブロックＢＬＫ＃２１のページ１の２番目の４ＫＢ領域を示し、オフセット＋２２はブロックＢＬＫ＃２１のページ１の３番目の４ＫＢ領域を示し、オフセット＋２３はブロックＢＬＫ＃２１のページ１の４番目の４ＫＢ領域を示す。
【０１３７】
同様に、オフセット＋２８はブロックＢＬＫ＃４１のページ１の最初の４ＫＢ領域を示し、オフセット＋２９はブロックＢＬＫ＃４１のページ１の２番目の４ＫＢ領域を示し、オフセット＋３０はブロックＢＬＫ＃４１のページ１の３番目の４ＫＢ領域を示し、オフセット＋３１はブロックＢＬＫ＃４１のページ１の４番目の４ＫＢ領域を示す。
【０１３８】
図１７は、フラッシュストレージデバイス３に適用される最大ブロック番号ゲットコマンドを示す。
【０１３９】
最大ブロック番号ゲットコマンドは、フラッシュストレージデバイス３から最大ブロック番号を取得するためのコマンドである。ホスト２は、フラッシュストレージデバイス３に最大ブロック番号ゲットコマンドに送信することにより、フラッシュストレージデバイス３に含まれるブロックの数を示す最大ブロック番号を認識することができる。最大ブロック番号ゲットコマンドは、最大ブロック番号ゲットコマンド用のコマンドＩＤを含み、パラメータは含まない。
【０１４０】
図１８は、最大ブロック番号ゲットコマンドに対するレスポンスを示す。
【０１４１】
最大ブロック番号ゲットコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、図１８に示すレスポンスをホスト２に返す。このレスポンスは、最大ブロック番号（つまり、フラッシュストレージデバイス３に含まれる利用可能なブロックの総数）を示すパラメータを含む。
【０１４２】
図１９は、フラッシュストレージデバイス３に適用されるブロックサイズゲットコマンドを示す。
【０１４３】
ブロックサイズゲットコマンドは、フラッシュストレージデバイス３からブロックサイズを取得するためのコマンドである。ホスト２は、フラッシュストレージデバイス３にブロックサイズゲットコマンドに送信することにより、フラッシュストレージデバイス３に含まれるＮＡＮＤ型フラッシュメモリ５のブロックサイズを認識することができる。
【０１４４】
なお、別の実施形態では、ブロックサイズゲットコマンドは、ブロック番号を指定するパラメータを含んでいてもよい。あるブロック番号を指定するブロックサイズゲットコマンドをホスト２から受信した場合、フラッシュストレージデバイス３は、このブロック番号を有するブロックのブロックサイズをホスト２に返す。これにより、たとえＮＡＮＤ型フラッシュメモリ５に含まれるブロックそれぞれのブロックサイズが不均一である場合であっても、ホスト２は、個々のブロックそれぞれのブロックサイズを認識することができる。
【０１４５】
図２０は、ブロックサイズゲットコマンドに対するレスポンスを示す。
【０１４６】
ブロックサイズゲットコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、ブロックサイズ（ＮＡＮＤ型フラッシュメモリ５に含まれるブロックそれぞれの共通のブロックサイズ）をホスト２に返す。この場合、もしブロック番号がブロックサイズゲットコマンドによって指定されていたならば、フラッシュストレージデバイス３は、上述したように、このブロック番号を有するブロックのブロックサイズをホスト２に返す。
【０１４７】
図２１は、フラッシュストレージデバイス３に適用されるブロックアロケートコマンドを示す。
【０１４８】
ブロックアロケートコマンドは、フラッシュストレージデバイス３にブロック（フリーブロック）の割り当てを要求するコマンドである。ホスト２は、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによって、フリーブロックを割り当てるようにフラッシュストレージデバイス３に要求し、これによってブロック番号（割り当てられたフリーブロックのブロック番号）を取得することができる。
【０１４９】
フラッシュストレージデバイス３がフリーブロック群をフリーブロックリストによって管理し、ホスト２はフリーブロック群を管理しないケースにおいては、ホスト２は、フリーブロックを割り当てるようにフラッシュストレージデバイス３に要求し、これによってブロック番号を取得する。一方、ホスト２がフリーブロック群を管理するケースにおいては、ホスト２は、フリーブロック群の一つを自身で選択することができるので、ブロックアロケートコマンドをフラッシュストレージデバイス３に送信する必要は無い。
【０１５０】
図２２は、ブロックアロケートコマンドに対するレスポンスを示す。
【０１５１】
ブロックアロケートコマンドをホスト２から受信した時、フラッシュストレージデバイス３は、フリーブロックリストから、ホスト２に割り当てるべきフリーブロックを選択し、選択したフリーブロックのブロック番号を含むレスポンスをホスト２に返す。
【０１５２】
図２３は、ホスト２とフラッシュストレージデバイス３とによって実行されるブロック情報取得処理を示す。
【０１５３】
ホスト２がフラッシュストレージデバイス３の使用を開始する時、ホスト２は、まず、最大ブロック番号ゲットコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３のコントローラは、最大ブロック番号をホスト２に返す。最大ブロック番号は、利用可能なブロックの総数を示す。なお、上述のスーパーブロックが使用されるケースにおいては、最大ブロック番号は、利用可能なスーパーブロックの総数を示してもよい。
【０１５４】
次いで、ホスト２は、ブロックサイズゲットコマンドをフラッシュストレージデバイス３に送信して、ブロックサイズを取得する。この場合、ホスト２は、ブロック番号１を指定するブロックサイズゲットコマンド、ブロック番号２を指定するブロックサイズゲットコマンド、ブロック番号３を指定するブロックサイズゲットコマンド、…をフラッシュストレージデバイス３にそれぞれ送信して、全てのブロックそれぞれのブロックサイズを個別に取得してもよい。
【０１５５】
このブロック情報取得処理により、ホスト２は、利用可能ブロック数、個々のブロックのブロックサイズを認識することができる。
【０１５６】
図２４は、ホスト２とフラッシュストレージデバイス３とによって実行される書き込み処理のシーケンスを示す。
【０１５７】
ホスト２は、まず、書き込みのために使用すべきブロック（フリーブロック）を自身で選択するか、またはブロックアロケートコマンドをフラッシュストレージデバイス３に送信することによってフリーブロックを割り当てるようにフラッシュストレージデバイス３に要求する。そして、ホスト２は、自身で選択したブロックのブロック番号ＢＬＫ＃（またはフラッシュストレージデバイス３によって割り当てられたフリーブロックのブロック番号ＢＬＫ＃）と、論理アドレス（ＬＢＡ）と、長さとを含むライトコマンドをフラッシュストレージデバイス３に送信する（ステップＳ２０）。
【０１５８】
フラッシュストレージデバイス３のコントローラ４がこのライトコマンドを受信した時、コントローラ４は、ホスト２からのライトデータを書き込むべき、このブロック番号ＢＬＫ＃を有するブロック（書き込み先ブロックＢＬＫ＃）内の書き込み先位置を決定し、この書き込み先ブロックＢＬＫ＃の書き込み先位置にライトデータを書き込む（ステップＳ１１）。ステップＳ１１では、コントローラ４は、論理アドレス（ここではＬＢＡ）とライトデータの双方を書き込み先ブロックに書き込んでもよい。
【０１５９】
コントローラ４は、書き込み先ブロックＢＬＫ＃に対応するブロック内ＬＵＴを更新して、書き込み先位置を示すオフセット（ブロック内オフセット）をこの論理アドレスにマッピングする（ステップＳ１２）。
【０１６０】
次いで、コントローラ４は、書き込み先ブロックＢＬＫ＃に対応するブロック管理テーブル３２を更新して、書き込まれたデータに対応するビットマップフラグ（つまり、このデータが書き込まれたオフセット（ブロック内オフセット）に対応するビットマップフラグ）を０から１に変更する（ステップＳ１３）。
【０１６１】
例えば、図２５に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１のオフセット＋４〜＋７に対応する物理記憶位置に書き込まれた場合を想定する。この場合、図２６に示されているように、ブロックＢＬＫ＃１用のブロック内ＬＵＴにおいては、オフセット＋４〜＋７がＬＢＡｘ〜ＬＢＡｘ＋３にマッピングされる。また、図２７に示されているように、ブロックＢＬＫ＃１用のブロック管理テーブルにおいては、オフセット＋４〜＋７に対応するビットマップフラグそれぞれが０から１に変更される。
【０１６２】
コントローラ４は、このライトコマンドに対するレスポンス（成功／失敗）をホスト２に返す（ステップＳ１４）。
【０１６３】
ホスト２がこのレスポンスを受信した時、ホスト２は、ホスト２によって管理されているブロックレベルＬＵＴを更新して、書き込み先ブロックＢＬＫ＃のブロック番号ＢＬＫ＃を、書き込まれたライトデータに対応する論理アドレスにマッピングする（ステップＳ２１）。図２８に示されているように、ブロックレベルＬＵＴは、複数の論理アドレス（例えばＬＢＡ）それぞれに対応する複数のエントリを含む。ある論理アドレス（例えばあるＬＢＡ）に対応するエントリには、このＬＢＡに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５のブロック番号が格納される。図２５に示されているように、開始ＬＢＡがＬＢＡｘである１６Ｋバイト更新データがブロックＢＬＫ＃１に書き込まれたならば、図２８に示されているように、ブロック内ＬＵＴが更新されて、ＬＢＡｘ〜ＬＢＡｘ＋３に対応するブロック番号がＢＬＫ＃０からＢＬＫ＃１に変更される。
【０１６４】
この後、図２４に示すように、ホスト２は、上述の更新データの書き込みによって不要になった以前のデータを無効化するためのＴｒｉｍコマンドをフラッシュストレージデバイス３に送信する。フラッシュストレージデバイス３のコントローラ４は、このＴｒｉｍコマンドに応じて、ブロック内ＬＵＴ、ブロック管理テーブルを更新する（ステップＳ１５、Ｓ１６）。
【０１６５】
もし図２５に示されているように、以前のデータがブロックＢＬＫ＃０に格納されている場合には、図２９に示すように、ブロック番号（＝ＢＬＫ＃０）、ＬＢＡｘ、長さ（＝４）を指定するＴｒｉｍコマンドがホスト２からフラッシュストレージデバイス３に送信される。フラッシュストレージデバイス３のコントローラ４は、このＴｒｉｍコマンドに応じて、ＢＬＫ＃０に対応するブロック内ＬＵＴを更新して、ＬＢＡｘ〜ＬＢＡｘ＋３それぞれとオフセット＋１〜＋３それぞれとの間のマッピングを示す情報を削除する。この場合、コントローラ４は、これらＬＢＡｘ〜ＬＢＡｘ＋３とオフセット＋１〜＋３を無効を示す値（ｎｕｌｌ）に変更してもよい。さらに、コントローラ４は、ＢＬＫ＃０に対応するブロック管理テーブル３２を更新して、オフセット＋０〜＋３に対応するビットマップフラグそれぞれを１から０に変更する。
【０１６６】
図３０は、フラッシュストレージデバイス３に適用されるリードコマンドを示す。
【０１６７】
リードコマンドは、フラッシュストレージデバイス３にデータの読み出しを要求するコマンドである。このリードコマンドは、コマンドＩＤ、ブロック番号ＢＬＫ＃、論理アドレス、長さ、転送先ポインタを含む。
【０１６８】
コマンドＩＤはこのコマンドがリードコマンドであることを示すＩＤ（コマンドコード）であり、リードコマンドにはリードコマンド用のコマンドＩＤが含まれる。
【０１６９】
ブロック番号ＢＬＫ＃は、リードされるべきデータが格納されているブロックのブロック番号を示す。論理アドレスは、リードされるべきデータの論理アドレスである。
【０１７０】
長さは、リードすべきデータの長さを示す。このデータ長は、ＬＢＡの数によって示されてもよいし、Ｇｒａｉｎの数によって示されてもよい。
【０１７１】
転送先ポインタは、読み出されたデータが転送されるべきホスト２内のメモリ上の位置を示す。
【０１７２】
図３１は、ホスト２とフラッシュストレージデバイス３とによって実行されるリード処理のシーケンスを示す。
【０１７３】
ホスト２は、ホスト２によって管理されているブロック内ＬＵＴを参照して、ユーザアプリケーションからのリード要求に含まれる論理アドレス（ＬＢＡ）をブロック番号に変換する。そして、ホスト２は、このブロック番号、ＬＢＡ、長さを指定するリードコマンドをフラッシュストレージデバイス３に送信する。
【０１７４】
フラッシュストレージデバイス３のコントローラ４がリードコマンドをホスト２から受信した時、コントローラ４は、このリードコマンドによって指定されたブロック番号に対応するブロック内ＬＵＴを選択し、この選択したブロック内ＬＵＴをリードコマンド内のＬＢＡを使用して参照して、このＬＢＡに対応するオフセット（ブロック内オフセット）を取得する（ステップＳ３１）。コントローラ４は、リードコマンドによって指定されたブロック番号と、取得したオフセット（ブロック内オフセット）とに基づいて、このＬＢＡに対応するデータをＮＡＮＤ型フラッシュメモリ５からリードし（ステップＳ３２）、このリードデータをホスト２に送信する。
【０１７５】
図３２は、フラッシュストレージデバイス３に適用されるＧＣ制御コマンドを示す。
【０１７６】
ＧＣ制御コマンドは、ＧＣソースブロック番号およびＧＣデスティネーションブロック番号をフラッシュストレージデバイス３に通知するために使用される。ホスト２は、各ブロックの有効データ量／無効データ量を管理しており、有効データ量がより少ない幾つかのブロックをＧＣソースブロックとして選択することができる。また、ホスト２は、フリーブロックリストを管理しており、幾つかのフリーブロックをＧＣデスティネーションブロックとして選択することができる。このＧＣ制御コマンドは、コマンドＩＤ、ＧＣソースブロック番号、ＧＣデスティネーションブロック番号、等を含んでもよい。
【０１７７】
コマンドＩＤはこのコマンドがＧＣ制御コマンドであることを示すＩＤ（コマンドコード）であり、ＧＣ制御コマンドにはＧＣ制御コマンド用のコマンドＩＤが含まれる。
【０１７８】
ＧＣソースブロック番号は、ＧＣソースブロックを示すブロック番号である。ホスト２は、どのブロックをＧＣソースブロックとすべきかを指定することができる。ホスト２は、複数のＧＣソースブロック番号を一つのＧＣ制御コマンドに設定してもよい。
【０１７９】
ＧＣデスティネーションブロック番号は、ＧＣデスティネーションブロックを示すブロック番号である。ホスト２は、どのブロックをＧＣデスティネーションブロックとすべきかを指定することができる。ホスト２は、複数のＧＣデスティネーションブロック番号を一つのＧＣ制御コマンドに設定してもよい。
【０１８０】
図３３は、ＧＣ用コールバックコマンドを示す。
【０１８１】
ＧＣ用コールバックコマンドは、論理アドレス（ＬＢＡ）とデスティネーションブロック番号との複数のペアを含むリストをホスト２に通知するために使用される。あるペアに含まれる論理アドレス（ＬＢＡ）は、コピーされた有効データの論理アドレスである。このペアに含まれるデスティネーションブロック番号は、この有効データがコピーされたＧＣデスティネーションブロックのブロック番号である。このＧＣ用コールバックコマンドは、ＧＣ制御コマンドによって複数のＧＣソースブロック番号および複数のデスティネーションブロック番号が指定された場合にのみ、フラッシュストレージデバイス３からホスト２に送信されてもよい。
【０１８２】
図２８は、ガベージコレクション（ＧＣ）動作の手順を示す。
【０１８３】
例えば、ホスト２は、ホスト２によって管理されているフリーブロックリストに含まれている残りフリーブロックの数が閾値以下に低下した場合、ＧＣソースブロックおよびＧＣデスティネーションブロックを選択し、ＧＣ制御コマンドをフラッシュストレージデバイス３に送信する（ステップＳ４１）。
【０１８４】
このＧＣ制御コマンドを受信すると、フラッシュストレージデバイス３のコントローラ４は、ＧＣソースブロック内の有効データを書き込むべきＧＣデスティネーションブロック内の位置（コピー先位置）を決定する動作と、ＧＣソースブロック内の有効データをＧＣデスティネーションブロック内のコピー先位置にコピーする動作とを含むデータコピー動作を実行する（ステップＳ５１）。ステップＳ５１では、ＧＣソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。複数のＧＣソースブロックがＧＣ制御コマンドによって指定された場合には、全てのＧＣソースブロック内の全ての有効データのコピーが完了するまでデータコピー動作が繰り返し実行される。
【０１８５】
そして、コントローラ４は、論理アドレス（ＬＢＡ）とデスティネーションブロック番号との複数のペアを含むリストをＧＣ用コールバックコマンドを使用してホスト２に通知するとともに（ステップＳ５２）、コピーされた有効データの論理アドレスにマッピングされているオフセット（ブロック内オフセット）が、ＧＣソースブロック内のコピー元位置を示すオフセット（ブロック内オフセット）からＧＣデスティネーションブロック内のコピー先位置を示すオフセット（ブロック内オフセット）に変更されるように、ＧＣソースブロックに対応するブロック内ＬＵＴおよびＧＣデスティネーションブロックに対応するブロック内ＬＵＴを更新する（ステップＳ５３）。
【０１８６】
ホスト２は、フラッシュストレージデバイス３から通知されるリストに基づいて、ブロック内ＬＵＴを更新する（ステップＳ４２）。
【０１８７】
図３５は、複数のＧＣソースブロック内の全ての有効データを複数のＧＣデスティネーションブロックにコピーする動作を示す。
【０１８８】
ここでは、ブロックＢＬＫ＃１、ブロックＢＬＫ＃２、ブロックＢＬＫ＃３がホスト２によってＧＣソースブロックとして指定され、ブロックＢＬＫ＃５０、ブロックＢＬＫ＃５１がホスト２によってＧＣデスティネーションブロックとして指定された場合が想定されている。ブロックＢＬＫ＃１、ブロックＢＬＫ＃２、ブロックＢＬＫ＃３の各々においては、有効データと無効データとが混在されている。
【０１８９】
まず、ブロックＢＬＫ＃１内の全ての有効データがブロックＢＬＫ＃５０にコピーされる。次いで、ブロックＢＬＫ＃２の全ての有効データの一部がブロックＢＬＫ＃５０の残り空き領域にコピーされ、ブロックＢＬＫ＃２の残りの有効データがブロックＢＬＫ＃５１にコピーされる。そして、ブロックＢＬＫ＃３の全ての有効データがブロックＢＬＫ＃５１にコピーされる。
【０１９０】
なお、コントローラ４は、各ＧＣソースブロック内の有効データのみならず、この有効データとこの有効データに対応する論理アドレスの双方を、ＧＣソースブロック（コピー元ブロック）からＧＣデスティネーションブロック（コピー先ブロック）にコピーしてもよい。これにより、ＧＣデスティネーションブロック（コピー先ブロック）内にデータと論理アドレスとのペアを保持することができる。
【０１９１】
図３６は、ＧＣのために実行されるデータコピー動作の例を示す。
【０１９２】
図３６では、ＧＣソースブロック（ここではブロックＢＬＫ＃１）のオフセット＋０に対応する位置に格納されている有効データ（ＬＢＡ＝１０）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃５０）のオフセット＋０に対応する位置にコピーされ、ＧＣソースブロック（ここではブロックＢＬＫ＃１）のオフセット＋１に対応する位置に格納されている有効データ（ＬＢＡ＝１１）が、ＧＣデスティネーションブロック（ここではブロックＢＬＫ＃５０）のオフセット＋１に対応する位置にコピーされた場合が想定されている。
【０１９３】
この場合、コントローラ４は、図３７に示すように、ブロックＢＬＫ＃５０に対応するブロック内ＬＵＴを更新して、ＬＢＡ１０とオフセット＋０のペアと、ＬＢＡ１１とオフセット＋１のペアをブロックＢＬＫ＃５０に対応するブロック内ＬＵＴに格納する。これにより、オフセット＋０がＬＢＡ１０にマッピングされ、オフセット＋１がＬＢＡ１０にマッピングされる。また、コントローラ４は、図３８に示すように、ブロックＢＬＫ＃１０に対応するブロック内ＬＵＴを更新して、ＬＢＡ１０とオフセット＋０のペアと、ＬＢＡ１１とオフセット＋１のペアを、ブロックＢＬＫ＃１に対応するブロック内ＬＵＴから削除する。さらに、コントローラ４は、ＬＢＡ１０とデスティネーションブロック番号（ＢＬＫ＃５０）とのペアと、ＬＢＡ１１とデスティネーションブロック番号（ＢＬＫ＃５０）とのペアとをホスト２に通知する。
【０１９４】
ホスト２は、この通知に基づき、図３９に示すように、ブロックレベルＬＵＴを更新して、ＬＢＡ１０にマッピングされているブロック番号をＢＬＫ＃１からＢＬＫ＃５０に変更し、ＬＢＡ１１にマッピングされているブロック番号もＢＬＫ＃１からＢＬＫ＃５０に変更する。
【０１９５】
以上説明したように、本実施形態によれば、第１のブロック番号と第１の論理アドレスを指定するライト要求をホスト２から受信した場合、フラッシュストレージデバイス３のコントローラ４は、ホスト２からのデータを書き込むべき、第１のブロック番号を有するブロック（書き込み先ブロック）内の位置（書き込み先位置）を決定し、ホスト２からのデータを書き込み先ブロックの書き込み先位置に書き込み、論理アドレスそれぞれとこの書き込み先ブロックのブロック内物理アドレス（ブロック内オフセット）それぞれとの間のマッピングを管理するブロック内ＬＵＴを更新して、書き込み先位置を示すブロック内オフセットを第１の論理アドレスにマッピングする。また、上述の第１のブロック番号と上述の第１の論理アドレスを指定するリード要求をホスト２から受信した場合、コントローラ４は、第１の論理アドレスを使用してブロック内ＬＵＴを参照して、第１の論理アドレスに対応するデータが書き込まれているブロック内物理アドレス（ブロック内オフセット）を取得し、第１のブロック番号と取得されたブロック内物理アドレス（ブロック内オフセット）とに基づいて、第１の論理アドレスに対応するデータをＮＡＮＤ型フラッシュメモリ５からリードする。
【０１９６】
したがって、ホスト２がブロック番号をハンドリングし、フラッシュストレージデバイス３がページ書き込み順序制約／バッドページ等を考慮して、ホスト２によって指定されるブロック番号を有するブロック内の書き込み先位置を決定するという構成を実現できる。ホスト２がブロック番号をハンドリングすることにより、上位階層（ホスト２）のアプリケーションレベルアドレス変換テーブルと従来型ＳＳＤのＬＵＴレベルアドレス変換テーブルとのマージを実現できる。また、フラッシュストレージデバイス３は、ＮＡＮＤ型フラッシュメモリ５の特徴／制約を考慮してＮＡＮＤ型フラッシュメモリ５を制御することができる。さらに、ホスト２はブロック境界を認識することができるので、ブロック境界／ブロックサイズを考慮してユーザデータを各ブロックに書き込むことができる。これにより、ホスト２が同一ブロック内のデータをデータ更新等によって一斉に無効化する等の制御を行うことが可能となるので、ＧＣが実行される頻度を下げることが可能となる。この結果、ライトアンプリフィケーションが低下され、フラッシュストレージデバイス３の性能の向上、フラッシュストレージデバイス３の寿命の最大化を実現できる。
【０１９７】
したがって、ホスト２とフラッシュストレージデバイス３との間の適切な役割分担を実現でき、これによってホスト２とフラッシュストレージデバイス３とを含むシステム全体のＩ／Ｏ性能の向上を図ることができる。
【０１９８】
また、本実施形態によれば、コントローラ４は、有効データを書き込むべき、コピー先ブロック内のコピー先位置を決定し、有効データをコピー先ブロック内のこのコピー先位置にコピーする。したがって、ホスト２はコピー元ブロックとコピー先ブロックとを選択するという動作のみを行うだけでよい。また、アプリケーションレベルＧＣをフラッシュストレージデバイス３のＧＣとマージすることができので、ライトアンプリフィケーションを大幅に低減することができる。
【０１９９】
なお、フラッシュストレージデバイス３は、ストレージアレイ内に設けられる複数のフラッシュストレージデバイス３の一つとして利用されてもよい。ストレージアレイは、サーバ計算機のような情報処理装置にケーブルまたはネットワークを介して接続されてもよい。ストレージアレイは、このストレージアレイ内の複数のフラッシュストレージデバイス３を制御するコントローラを含む。フラッシュストレージデバイス３がストレージアレイに適用された場合には、このストレージアレイのコントローラが、フラッシュストレージデバイス３のホスト２として機能してもよい。
【０２００】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２０１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２０２】
２…ホスト、３…フラッシュストレージデバイス、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…ライト動作制御部、２２…リード動作制御部、２３…ＧＣ動作制御部。
【図１】
2019057155.tif 000003
【図２】
2019057155.tif 000004
【図３】
2019057155.tif 000005
【図４】
2019057155.tif 000006
【図５】
2019057155.tif 000007
【図６】
2019057155.tif 000008
【図７】
2019057155.tif 000009
【図８】
2019057155.tif 000010
【図９】
2019057155.tif 000011
【図１０】
2019057155.tif 000012
【図１１】
2019057155.tif 000013
【図１２】
2019057155.tif 000014
【図１３】
2019057155.tif 000015
【図１４】
2019057155.tif 000016
【図１５】
2019057155.tif 000017
【図１６】
2019057155.tif 000018
【図１７】
2019057155.tif 000019
【図１８】
2019057155.tif 000020
【図１９】
2019057155.tif 000021
【図２０】
2019057155.tif 000022
【図２１】
2019057155.tif 000023
【図２２】
2019057155.tif 000024
【図２３】
2019057155.tif 000025
【図２４】
2019057155.tif 000026
【図２５】
2019057155.tif 000027
【図２６】
2019057155.tif 000028
【図２７】
2019057155.tif 000029
【図２８】
2019057155.tif 000030
【図２９】
2019057155.tif 000031
【図３０】
2019057155.tif 000032
【図３１】
2019057155.tif 000033
【図３２】
2019057155.tif 000034
【図３３】
2019057155.tif 000035
【図３４】
2019057155.tif 000036
【図３５】
2019057155.tif 000037
【図３６】
2019057155.tif 000038
【図３７】
2019057155.tif 000039
【図３８】
2019057155.tif 000040
【図３９】
2019057155.tif 000041