(57)【要約】【課題】データ長が可変する圧縮後のデータを管理することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、アドレス変換テーブルの管理サイズ単位よりも大きいデータ長の書き込みデータをホストから受信し、書き込みデータを圧縮し、前記圧縮データを不揮発性メモリに書き込む。メモリシステムは、書き込みデータのデータ長と圧縮データのデータ長との差分に基づいて前記アドレス変換テーブルを更新して、書き込みデータが書き込まれるべき第１論理アドレス範囲の先頭論理アドレスから始まり前記圧縮データのデータ長に対応する第１範囲内の論理アドレスそれぞれに物理アドレスをマッピングし、前記差分に対応する第２範囲内の論理アドレスの各々を物理アドレスがマッピングされていない状態に設定する。【選択図】図７
2018049523.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、アドレス変換テーブルを使用して論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理サイズ単位で管理するコントローラとを具備し、前記コントローラは、
ホストからの書き込み要求の受信に応答して、前記管理サイズ単位よりも大きいデータ長の書き込みデータを前記ホストから受信し、
前記書き込みデータを圧縮し、前記圧縮されたデータを前記不揮発性メモリ内の第１記憶領域に書き込み、
前記書き込みデータのデータ長と前記圧縮されたデータのデータ長との差分に基づいて前記アドレス変換テーブルを更新して、前記書き込みデータが書き込まれるべき第１論理アドレス範囲の先頭論理アドレスから始まり前記圧縮されたデータのデータ長に対応する第１範囲内の論理アドレスそれぞれに前記第１記憶領域の物理アドレスそれぞれをマッピングし、且つ前記第１範囲に後続し前記差分に対応する第２範囲内の論理アドレスの各々を物理アドレスがマッピングされていない状態に設定するように構成されている、メモリシステム。
【請求項２】
前記コントローラは、前記ホストからの読み出し要求によって前記第１論理アドレス範囲が読み出し対象の論理アドレス範囲として指定された場合、前記第１範囲内の論理アドレスそれぞれにマッピングされた物理アドレスそれぞれに基づいて、前記不揮発性メモリから前記圧縮されたデータを読み出し、前記読み出した圧縮されたデータを伸張し、前記伸張によって得られたデータを前記ホストに返す請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、前記ホストからの読み出し要求によって前記第１論理アドレス範囲内の途中から始まる範囲が読み出し対象の論理アドレス範囲として指定された場合、エラーを示すレスポンスを前記ホストに返す請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、前記ホストから受信される後続の書き込み要求によって前記第１論理アドレス範囲の途中から始まる範囲が書き込み対象の論理アドレス範囲として指定された場合、エラーを示すレスポンスを前記ホストに返す請求項１記載のメモリシステム。
【請求項５】
前記書き込み要求は、複数種の圧縮方法の一つを指定するパラメータを含み、
前記コントローラは、前記パラメータによって指定される圧縮方法を使用して前記書き込みデータを圧縮する請求項１記載のメモリシステム。
【請求項６】
前記書き込み要求は、圧縮または非圧縮を指定するパラメータを含み、
前記コントローラは、
前記パラメータによって非圧縮が指定された場合、前記書き込みデータを圧縮せずに前記書き込みデータを前記不揮発性メモリ内の記憶領域に書き込み、
前記アドレス変換テーブルを更新して、前記第１論理アドレス範囲内の論理アドレスそれぞれに、前記書き込みデータが書き込まれた前記記憶領域の物理ブロックアドレスそれぞれをマッピングする請求項１記載のメモリシステム。
【請求項７】
前記コントローラは、
複数のネームスペースを管理し、
圧縮または非圧縮をネームスペース毎に指定する前記ホストからの要求に基づいて、前記複数のネームスペースの各々に圧縮モードまたは非圧縮モードを関連付け、
前記書き込み要求に含まれるネームスペースＩＤに対応するネームスペースに前記圧縮モードが関連付けられている場合、前記書き込み要求によって指定される書き込みデータを圧縮して前記不揮発性メモリに書き込み、
前記書き込み要求に含まれる前記ネームスペースＩＤに対応するネームスペースに前記非圧縮モードが関連付けられている場合、前記書き込みデータを圧縮せず、前記書き込みデータを前記不揮発性メモリに書き込む請求項１記載のメモリシステム。
【請求項８】
前記コントローラは、
ガベージコレクションの対象ブロックとして選択された前記不揮発性メモリ内のブロック内の有効データが前記圧縮されたデータであるか否かを判定し、
前記有効データが前記圧縮されたデータである場合、前記有効データを伸張し、
前記伸張されたデータを圧縮して、前記有効データよりもデータ長の短い第２圧縮データを生成し、
前記第２圧縮データを、前記不揮発性メモリのフリーブロック群から割り当てられたコピー先ブロックにコピーするように構成されている請求項１記載のメモリシステム。
【請求項９】
前記コントローラは、
ガベージコレクションの対象ブロックとして選択された前記不揮発性メモリ内のブロック内の有効データが前記圧縮されたデータであるか否かを判定し、
前記有効データが前記圧縮されたデータである場合、前記有効データが第１の更新頻度を有する第１タイプデータ、または前記第１の更新頻度よりも低い更新頻度を有する第２タイプデータのいずれであるかを判定し、
前記有効データが前記第２タイプデータである場合、前記有効データを伸張し、
前記伸張されたデータを圧縮して、前記有効データよりもデータ長の短い第２圧縮データを生成し、
前記第２圧縮データを、前記不揮発性メモリのフリーブロック群から割り当てられたコピー先ブロックにコピーするように構成されている請求項１記載のメモリシステム。
【請求項１０】
前記コントローラは、
前記ホストによって書き込まれたデータを含むブロック毎に、当該ブロック内のデータがガベージコレクションによって当該ブロックにコピーされた回数を示すガベージコレクション回数を管理し、
同じガベージコレクション回数に関連づけられた複数の第１ブロックを、前記ガベージコレクションの対象ブロックとして選択し、
前記ガベージコレクションの対象ブロックのガベージコレクション回数が閾値以上である場合、前記ガベージコレクションの対象ブロック内の前記有効データが前記第２タイプデータであると判定するように構成されている請求項９記載のメモリシステム。
【請求項１１】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、アドレス変換テーブルを使用して論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理サイズ単位で管理するコントローラとを具備し、前記コントローラは、
ホストからの書き込み要求の受信に応答して、前記管理サイズ単位よりも大きいデータ長の書き込みデータを前記ホストから受信し、
前記受信された書き込みデータを圧縮し、前記圧縮されたデータを前記不揮発性メモリの第１記憶領域に書き込み、
前記書き込み要求内の第１先頭論理アドレスと第１データ長との組によって規定される第１論理アドレス範囲を、前記第１先頭論理アドレスから始まり前記圧縮されたデータのデータ長に対応する第２論理アドレス範囲と、前記書き込みデータのデータ長と前記圧縮されたデータのデータ長との差分に対応する範囲を有する、前記第１論理アドレス範囲内の残りの第３論理アドレス範囲とに論理的に分割し、
前記アドレス変換テーブルを更新して前記第２論理アドレス範囲内の論理アドレスそれぞれに前記第１記憶領域の物理アドレスそれぞれをマッピングし、
前記第３論理アドレス範囲内の各論理アドレスを、物理アドレスがマッピングされていない状態に設定し、
前記ホストからの読み出し要求によって前記第１論理アドレス範囲が読み出し対象の論理アドレス範囲として指定された場合、前記第２論理アドレス範囲内の論理アドレスそれぞれにマッピングされた物理アドレスそれぞれに基づいて前記不揮発性メモリから前記圧縮されたデータを読み出し、前記読み出した圧縮されたデータを伸張し、前記伸張によって得られたデータを前記ホストに返すように構成されている、メモリシステム。
【請求項１２】
不揮発性メモリと、アドレス変換テーブルを使用して論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理サイズ単位で管理するコントローラとを具備するメモリシステムの制御方法であって、
ホストからの書き込み要求の受信に応答して、前記管理サイズ単位よりも大きいデータ長の書き込みデータを前記ホストから受信することと、
前記書き込みデータを圧縮し、前記圧縮されたデータを前記不揮発性メモリ内の第１記憶領域に書き込むことと、
前記書き込みデータのデータ長と前記圧縮されたデータのデータ長との差分に基づいて前記アドレス変換テーブルを更新して、前記書き込みデータが書き込まれるべき第１論理アドレス範囲の先頭論理アドレスから始まり前記圧縮されたデータのデータ長に対応する第１範囲内の論理アドレスそれぞれに前記第１記憶領域の物理アドレスそれぞれをマッピングし、且つ前記第１範囲に後続し前記書き込みデータのデータ長と前記圧縮されたデータのデータ長との差分に対応する第２範囲内の論理アドレスの各々を物理アドレスがマッピングされていない状態に設定することとを具備する制御方法。
【請求項１３】
前記ホストからの読み出し要求によって前記第１論理アドレス範囲が読み出し対象の論理アドレス範囲として指定された場合、前記第１範囲内の論理アドレスそれぞれにマッピングされた物理アドレスそれぞれに基づいて、前記不揮発性メモリから前記圧縮されたデータを読み出し、前記読み出した圧縮されたデータを伸張し、前記伸張によって得られたデータを前記ホストに返すことをさらに具備する請求項１２記載の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、その低電力消費、高性能という特徴により、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００４】
ＳＳＤはストレージサーバにおいても広く利用されている。大量且つ多様なデータを効率良く管理できるようにするために、最近では、データ圧縮機能を有するストレージサーバも開発されている。
【０００５】
データ圧縮機能を有するストレージサーバは、ＳＳＤに書き込むべきデータを圧縮し、この圧縮されたデータを書き込むための要求をＳＳＤに送出する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１４−５２８９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、圧縮後のデータの長さ（データ長）は、圧縮前のデータ（オリジナルデータ）の長さ（データ長）とは異なる。また、オリジナルデータの種類に応じて、このオリジナルデータを圧縮することによって得られる圧縮データのデータ長は様々である。このため、サーバ側では、ＳＳＤに格納された個々のデータをアドレス指定するために個々のデータの圧縮後のデータ長を管理することが必要となる。このことは、サーバ側のデータ管理コストを増大させる要因となり得る。したがって、そのデータ長が可変する圧縮後のデータをＳＳＤ側で管理できるようにするための新たな機能の実現が要求される。
【０００８】
本発明が解決しようとする課題は、データ長が可変する圧縮後のデータを管理することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態によれば、メモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、アドレス変換テーブルを使用して論理アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの間のマッピングを管理サイズ単位で管理するコントローラとを具備する。前記コントローラは、ホストからの書き込み要求の受信に応答して、前記管理サイズ単位よりも大きいデータ長の書き込みデータを前記ホストから受信する。前記コントローラは、前記書き込みデータを圧縮し、前記圧縮されたデータを前記不揮発性メモリ内の第１記憶領域に書き込む。前記コントローラは、前記書き込みデータのデータ長と前記圧縮されたデータのデータ長との差分に基づいて前記アドレス変換テーブルを更新して、前記書き込みデータが書き込まれるべき第１論理アドレス範囲の先頭論理アドレスから始まり前記圧縮されたデータのデータ長に対応する第１範囲内の論理アドレスそれぞれに前記第１記憶領域の物理アドレスそれぞれをマッピングし、且つ前記第１範囲に後続し前記差分に対応する第２範囲内の論理アドレスの各々を物理アドレスがマッピングされていない状態に設定する。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】ホスト側でデータ圧縮を実行するシステム構成において必要とされるホスト側の圧縮データ管理を説明するための図。
【図３】図２のシステム構成に適用されるＳＳＤ内の圧縮データ配置を説明するための図。
【図４】同実施形態に係るメモリシステムによって実行される圧縮データ管理を説明するための図。
【図５】図４の圧縮データ管理を実行するメモリシステムと連携するホストによって実行されるデータ管理を説明するための図。
【図６】同実施形態に係るメモリシステム内の圧縮データ配置を説明するための図。
【図７】同実施形態に係るメモリシステムによって実行されるデータ書き込み動作を説明するための図。
【図８】同実施形態に係るメモリシステムによって実行されるデータ読み出し動作を説明するための図。
【図９】同実施形態に係るメモリシステムに保存される管理情報の例を示す図。
【図１０】同実施形態に係るメモリシステムにおいて不揮発性メモリの各ページに書き込まれる管理情報の例を示す図。
【図１１】同実施形態に係るメモリシステムに適用される書き込み要求（ライトコマンド）の例を示す図。
【図１２】同実施形態に係るメモリシステムに適用される拡張ネームスペース管理コマンドの例を示す図。
【図１３】同実施形態に係るメモリシステムに適用される読み出し要求（リードコマンド）の例を示す図。
【図１４】同実施形態のメモリシステムによって実行されるライト処理の手順を示すフローチャート。
【図１５】同実施形態に係るメモリシステムに適用される、ネームスペース用の書き込み要求（ライトコマンド）の例を示す図。
【図１６】同実施形態のメモリシステムによって実行されるライト処理の別の手順を示すフローチャート。
【図１７】同実施形態のメモリシステムによって実行されるリード処理の手順を示すフローチャート。
【図１８】同実施形態のメモリシステムによって実行されるガベージコレクション動作を説明するための図。
【図１９】同実施形態のメモリシステムによって実行されるガベージコレクション動作の手順を示すフローチャート。
【図２０】同実施形態のメモリシステムによって実行されるガベージコレクション動作の別の手順を示すフローチャート。
【図２１】同実施形態のメモリシステムによって実行される、ガベージコレクション回数管理動作とガベージコレクション動作とを説明するための図。
【図２２】同実施形態のメモリシステムにおいて用いられるガベージコレクション回数管理リストの例を説明する図。
【図２３】同実施形態のメモリシステムに書き込まれる複数種のデータの例を説明する図。
【図２４】ガベージコレクション回数と複数種のデータ間のデータ量の割合との関係の例を説明する図。
【図２５】同実施形態のメモリシステムによって実行されるガベージコレクション動作の別の手順を示すフローチャート。
【図２６】ホストの構成例を示すブロック図。
【図２７】同実施形態のメモリシステムとホストとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、実施形態を説明する。  
まず、図１を参照して、一実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１２】
このメモリシステムは、不揮発性メモリにデータをライトし、不揮発性メモリからデータをリードするように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤフラッシュ技術ベースのソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１３】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、ＳＳＤ３をアクセスする情報処理装置（コンピューティングデバイス）である。ホスト２は、大量且つ多様なデータをＳＳＤ３に保存するストレージサーバ（サーバ）であってもよいし、パーソナルコンピュータであってもよい。
【００１４】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１５】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標），Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【００１６】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤフラッシュメモリ）５を備える。ＳＳＤ３は、ＤＲＡＭ６も備えていてもよい。ＮＡＮＤフラッシュメモリ５は、限定されないが、複数のＮＡＮＤフラッシュメモリチップを含んでいてもよい。ＮＡＮＤフラッシュメモリ５は、メモリセルアレイを含む。このメモリセルアレイは、多数のＮＡＮＤブロック（ブロック）Ｂ０〜Ｂｍ−１を含む。ブロックＢ０〜Ｂｍ−１は、消去単位として機能する。ブロックは「物理ブロック」または「消去ブロック」と称されることもある。
【００１７】
ブロックＢ０〜Ｂｍ−１は多数のページ（物理ページ）を含む。つまり、ブロックＢ０〜Ｂｍ−１の各々は、ページＰ０〜Ｐｎ−１を含む。ＮＡＮＤフラッシュメモリ５においては、データのリードおよびデータのライトはページ単位で実行される。データの消去はブロック単位で実行される。
【００１８】
コントローラ４は、Ｔｏｇｇｌｅ、ＯＮＦＩのようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤフラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤフラッシュメモリ５のデータ管理とＮＡＮＤフラッシュメモリ５のブロック管理とを実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能し得る。
【００１９】
データ管理には、（１）論理アドレスそれぞれとＮＡＮＤフラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、通常、論理ブロックアドレス（ＬＢＡ）が使用される。以下では、論理アドレスが論理ブロックアドレス（ＬＢＡ）である場合を想定する。
【００２０】
論理ブロックアドレス（ＬＢＡ）それぞれと物理アドレスそれぞれとの間のマッピングの管理は、アドレス変換テーブル（論理物理アドレス変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３２を用いて実行される。コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を使用して、ＬＢＡそれぞれと物理アドレスそれぞれとの間のマッピングを所定の管理サイズ単位で管理する。管理サイズ単位は、限定されないが、例えば、４Ｋバイトであってもよい。アドレス変換テーブル（ＬＵＴ３２）は、ＳＳＤ３の電源オン時にＮＡＮＤフラッシュメモリ５からＤＲＡＭ６にロードされてもよい。
【００２１】
あるＬＢＡに対応する物理アドレスは、このＬＢＡのデータがライトされたＮＡＮＤフラッシュメモリ５内の物理記憶位置を示す。物理アドレスは、物理ブロックアドレスと物理ページアドレスとを含む。物理ページアドレスは全てのページに割り当てられており、また物理ブロックアドレスは全てのブロックに割り当てられている。
【００２２】
ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。このため、コントローラ４は、同じＬＢＡへのライト（上書き）を、ＮＡＮＤフラッシュメモリ５上の異なるページにマッピングする。つまり、コントローラ４は、ホスト２から受信されるライトコマンドによって指定されるデータ（ライトデータ）を、このデータのＬＢＡとは無関係に、書き込み先ブロックとして現在割り当てられているブロック内の次の利用可能ページにライトする。そして、コントローラ４は、ルックアップテーブル（ＬＵＴ）３２を更新して、このＬＢＡを、このデータが実際にライトされたこのページの物理アドレスに関連付ける。書き込み先ブロックに利用可能ページが無くなると、新たなブロックが書き込み先ブロックとして割り当てられる。
【００２３】
ブロック管理には、不良ブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。
【００２４】
ホスト２は、読み出し要求（リードコマンド）、書き込み要求（ライトコマンド）、他の様々な要求（他の様々なコマンド）をＳＳＤ３に送出する。リードコマンドは、ＳＳＤ３に対してデータのリードを要求するコマンドである。リードコマンドは、リードすべきデータのＬＢＡ（先頭ＬＢＡ）と、リードすべきデータのデータ長（転送長）とを含む。ライトコマンドは、ＳＳＤ３に対してデータのライトを要求するコマンドである。ライトコマンドは、ライトデータ（つまり書き込むべきデータ）のＬＢＡ（先頭ＬＢＡ）と、ライトデータのデータ長（転送長）とを含む。
【００２５】
次に、コントローラ４の構成について説明する。
【００２６】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含む。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続される。
【００２７】
ホストインタフェース１１は、ホスト２から様々なコマンド（例えば、ライトコマンド、リードコマンド、イレーズコマンド、アンマップ（ＵＮＭＡＰ）／トリム（Ｔｒｉｍ）コマンド、等）を受信する。
【００２８】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行する。
【００２９】
コマンド処理には、データ圧縮機能を含むライト処理、データ伸張機能を含むリード処理が含まれる。データ圧縮／伸張機能はＣＰＵ１２によって実行されてもよい、専用のハードウェアによって実行されても良い。
【００３０】
これらＦＴＬ処理およびコマンド処理は、ＣＰＵ１２によって実行されるファームウェアによって制御されてもよい。このファームウェアは、ＣＰＵ１２を、ライト動作制御部２１、リード動作制御部２２、圧縮エンジン２３、伸張エンジン２４、ガベージコレクション動作制御部２５、およびネームスペース制御部２６として機能させる。
【００３１】
ライト動作制御部２１は、ホスト２からの書き込み要求（ライトコマンド）の受信に応答して、書き込みデータ（ライトデータ）をホスト２から受信する。そして、ライト動作制御部２１は、圧縮エンジン２３を使用してライトデータを圧縮し、圧縮されたデータをＮＡＮＤフラッシュメモリ５内の記憶領域に書き込む。本実施形態では、圧縮されるべきライトデータの最小データ長は、上述の管理サイズ（例えば４ＫＢ）よりも大きいデータ長に設定されている。例えば、ライトデータの最小データ長は１Ｍバイトであってもよい。ホスト２は、最小データ長の整数倍のデータ長を有するデータの書き込みをＳＳＤ３に要求することができる。圧縮されるべきライトデータの最小データ長を管理サイズ（例えば４ＫＢ）よりも大きいデータ長に制限することにより、ＮＡＮＤフラッシュメモリ５内に格納されるアドレス変換テーブル（ＬＵＴ３２）のサイズの増大を招くこと無く、そのデータ長が可変する圧縮後のデータが格納される物理記憶位置それぞれを効率良く管理することが可能となる。
【００３２】
もし例えば４ＫＢのホストデータを圧縮するという構成が採用されたならば、圧縮によって４ＫＢよりも小さくなった圧縮データの物理記憶位置を４ＫＢよりも小さい管理サイズ単位で管理することが必要とされる。この場合、非常に大きなサイズのアドレス変換テーブルが必要となる。通常、アドレス変換テーブルのサイズはＳＳＤの容量に比例する。したがって、小さい管理サイズ単位でアドレス変換情報を管理する構成では、大容量のＳＳＤの実現が不可能となる。
【００３３】
さらに、ライト動作制御部２１は、圧縮前のデータ（ライトデータ）のデータ長と圧縮後のライトデータのデータ長が一致しないことを考慮して、圧縮後のライトデータを次のように管理する。
【００３４】
すなわち、ライト動作制御部２１は、ライトデータのデータ長と圧縮されたデータのデータ長との差分に基づいてＬＵＴ３２を更新して、ライトデータが書き込まれるべき第１ＬＢＡ範囲の先頭ＬＢＡから始まり圧縮データのデータ長に対応する第１範囲内のＬＢＡそれぞれに、圧縮データが書き込まれた物理記憶領域の物理アドレスそれぞれをマッピングし、さらに、第１範囲に後続し、ライトデータのデータ長と圧縮されたデータのデータ長との差分に対応する第２範囲内のＬＢＡの各々を、物理アドレスがマッピングされていない状態（「アンマップ状態」または「割り当て無し（ｄｅａｌｏｃａｔｅｄ）状態」とも称される）に設定する。これにより、たとえライトデータが圧縮によってどのような長さになったとしても、第１ＬＢＡ範囲は変化せず、第１ＬＢＡ範囲内の第１範囲と第２範囲との比率が変わるだけであるので、ホスト２は、圧縮前のデータのデータ長に対応するＬＢＡ範囲（第１ＬＢＡ範囲）を使用して、このデータのリード及びライト（書き替え）を実行することができる。
【００３５】
このように、ホスト２は、圧縮後のデータの実際のデータ長を考慮することなく、圧縮前のデータ（ライトデータ）に対応するＬＢＡ範囲（第１ＬＢＡ範囲）のみを使用してこの圧縮後のデータを容易にアドレス指定することが可能となる。
【００３６】
リード動作制御部２２は、ホスト２からの読み出し要求（リードコマンド）によって第１論理アドレス範囲が読み出し対象の論理アドレス範囲として指定された場合、第１範囲内の論理アドレスそれぞれにマッピングされた物理アドレスそれぞれに基づいて、ＮＡＮＤフラッシュメモリ５から上述の圧縮データを読み出す。そして、リード動作制御部２２は、伸張エンジン２４を使用して、読み出した圧縮データを圧縮前のデータと同じデータ長のデータに伸張し、そして伸張によって得られたデータをホストインタフェース１１を介してホスト２に返す。
【００３７】
圧縮エンジン２３は、データを可逆圧縮するように構成されている。圧縮エンジン２３は、複数種の圧縮方法をサポートするように構成されていても良く、これら複数種の圧縮方法のいずれかを使用してデータを圧縮してもよい。使用する圧縮方法は、ホスト２によって指定されてもよい。
【００３８】
伸張エンジン２４は、圧縮データを伸張するように構成されている。伸張エンジン２４も、上述の複数種の圧縮方法に対応する複数種の伸張処理を実行することができる。
【００３９】
ガベージコレクション（ＧＣ）動作制御部２５は、ＮＡＮＤフラッシュメモリ５のフリーブロックの個数を増やすため、有効データと無効データとが混在する幾つかのブロック内の全ての有効データを別のブロック（コピー先フリーブロック）にコピーする。そして、ＧＣ動作制御部２５は、ルックアップテーブル（ＬＵＴ）３２を更新して、コピーされた有効データのＬＢＡそれぞれを正しい物理アドレスにマッピングする。有効データが別のブロックにコピーされることによって無効データのみなったブロックはフリーブロックとして開放される。これによって、このブロックの消去動作が実行された後にこのブロックは再利用することが可能となる。
【００４０】
有効データをコピーするＧＣ動作において、ガベージコレクション（ＧＣ）動作制御部２５は、圧縮エンジン２３を使用して、圧縮されている有効データを再圧縮してより短いデータ長の圧縮データを生成し、この生成された圧縮データをコピー先フリーブロックにコピーしてもよい。これにより、ＧＣ動作においてコピーすることが必要なデータ量を削減することができるので、ＳＳＤ３のライトアンプリフィケーションを低下させることができる。
【００４１】
通常、高圧縮率のデータ圧縮処理は低圧縮率のデータ圧縮処理よりも多くの処理時間を要する。このため、データ再圧縮処理を伴う上述のＧＣ動作は、ホスト２のアイドル期間中に実行されるＧＣ動作に特に有用である。
【００４２】
ネームスペース制御部２６は、複数のネームスペースを管理するマルチネームスペース機能をサポートすることができる。マルチネームスペース機能は、一つのストレージデバイス（ここではＳＳＤ３）をあたかも複数のドライブであるかのように扱うことを可能にするために、複数のネームスペースそれぞれに対応する複数の論理アドレス空間（ＬＢＡ空間）を管理することができる。各ネームスペースには、ＬＢＡ範囲（ＬＢＡ０〜ＬＢＡｎ−１）が割り当てられる。ＬＢＡ範囲のサイズ（つまりＬＢＡの数）はネームスペース毎に可変であってもよい。各ＬＢＡ範囲は、ＬＢＡ０から始まる。また、ネームスペース制御部２６は、ネームスペース毎に異なるＬＵＴを使用することによって、ＬＢＡそれぞれと物理アドレスとの間のマッピングをネームスペース毎に個別に管理しても良い。
【００４３】
ネームスペース制御部２６は、圧縮または非圧縮をネームスペース毎に指定するホスト２からの要求に基づいて、複数のネームスペースの各々に圧縮モードまたは非圧縮モードを関連付けることができる。ライトコマンドは、データが書き込まれるべきネームスペースを指定するネームスペースＩＤを含む。ライトコマンド内のネームスペースＩＤに対応するネームスペースに圧縮モードが関連付けられている場合、コントローラ４のライト動作制御部２１は、ライトコマンドによって指定されるライトデータを圧縮してＮＡＮＤフラッシュメモリ５に書き込む。一方、ライトコマンド内のネームスペースＩＤに対応するネームスペースに非圧縮モードが関連付けられている場合、ライト動作制御部２１は、ライトデータを圧縮せず、ライトデータをＮＡＮＤフラッシュメモリ５に書き込む。
【００４４】
このように、本実施形態では、データ圧縮および圧縮データの管理の機能はＳＳＤ３によって実行される。データ圧縮機能より、データの記憶のために必要なＮＡＮＤフラッシュメモリ５の物理記憶容量を削減することができる。平均圧縮率が例えば５０パーセントであると仮定すると、ＳＳＤ３は、ＳＳＤ３の容量（物理容量）の２倍のデータ量を格納することができる。このため、ＳＳＤ３は、ＳＳＤ３の容量（物理容量）よりも大きなＬＢＡ空間を、ＳＳＤ３の容量としてホスト２に報告してもよく、これによりシン・プロビジョニングされたストレージデバイスであるかのように動作してもよい。例えば、ＳＳＤ３の容量（物理容量）が２Ｔバイトである場合には、ＳＳＤ３のコントローラ４は、ホスト２に４ＴＢをＳＳＤ３の容量として報告してもよい。もし実際の圧縮率が、予期される圧縮率（例えば５０パーセント）よりも少ない場合には、ライト要求されたデータを格納するために必要な物理記憶領域が確保できなくなる可能性もある。この場合には、コントローラ４は、ライトエラーをホスト２に通知してもよい。
【００４５】
また、データ圧縮によって増えるデータ記憶容量をガベージコレクションのワークエリアとして活用することによってＳＳＤ３のライトアンプリフィケーションを低下させることも可能となる。つまり、ホストデータの格納に必要な物理記憶容量はデータ圧縮によって削減することができるので、これによってガベージコレクションが実行される頻度を下げる事ができ、この結果、ＳＳＤ３のライトアンプリフィケーションを低下させることが可能となる。
【００４６】
ホスト２からＳＳＤ３にオフロードされる処理には、以下の処理が含まれる。
【００４７】
（１）データ圧縮および伸張処理
（２）圧縮後の可変長データの管理処理
データ圧縮および伸張処理は、ＣＰＵ１２によって実行されてもよいし、専用ハードウェアによって各々構成される圧縮エンジン２３および伸張エンジン２４よって実行されてもよい。
【００４８】
通常、ホスト２がデータ圧縮を行うケースにおいては、圧縮後のデータ長のようなメタデータの管理をホスト２側で行うことが必要となる。さらに、ホスト２は、ＬＢＡ空間のフラグメンテーションを解消するために、あるＬＢＡ範囲に関連付けられた圧縮データを別のＬＢＡ範囲に移動するという一種のガベージコレクションを行う事が必要となる場合もある。このホスト２側のガベージコレクションに起因して、ＳＳＤ３に書き込まれるデータの量も増え、これによってＳＳＤ３の物理記憶容量が速く消費される。この結果、ＳＳＤ３によって実行されるガベージコレクション動作の頻度も高くなる。
【００４９】
次に、ホスト２の構成について説明する。
【００５０】
ホスト２は、様々なプログラムを実行する情報処理装置である。情報処理装置によって実行されるプログラムには、アプリケーションソフトウェアレイヤ４１、オペレーティングシステム（ＯＳ）４２、ファイルシステム４３が含まれる。
【００５１】
一般に知られているように、オペレーティングシステム（ＯＳ）４２は、ホスト２全体を管理し、ホスト２内のハードウェアを制御し、アプリケーションがハードウェアおよびＳＳＤ３を使用することを可能にするための制御を実行するように構成されたソフトウェアである。
【００５２】
ファイルシステム４３は、ファイルの操作（作成、保存、更新、削除等）のための制御を行うために使用される。例えば、ＺＦＳ、Ｂｔｒｆｓ、ＸＦＳ、ｅｘｔ４、ＮＴＦＳなどがファイルシステム４３として使用されても良い。あるいは、ファイルオブジェクトシステム（例えば、Ceph Object Storage Daemon）、Key Value Store System (例えば、Rocks DB) がファイルシステム４３として使用されても良い。
【００５３】
様々なアプリケーションソフトウェアスレッドがアプリケーションソフトウェアレイヤ４１上で走る。アプリケーションソフトウェアスレッドの例としては、クライアントソフトウェア、データベースソフトウェア、仮想マシン等がある。
【００５４】
アプリケーションソフトウェアレイヤ４１がリードコマンドまたはライトコマンドのようなリクエストをＳＳＤ３に送出することが必要な時、アプリケーションソフトウェアレイヤ４１は、ＯＳ４２にそのリクエストを送出する。ＯＳ４２はそのリクエストをファイルシステム４３に送出する。ファイルシステム４３は、そのリクエストを、コマンド（リードコマンド、ライトコマンド等）にトランスレートする。ファイルシステム４３は、コマンドを、ＳＳＤ３に送出する。ＳＳＤ３からのレスポンスが受信された際、ファイルシステム４３は、そのレスポンスをＯＳ４２に送出する。ＯＳ４２は、そのレスポンスをアプリケーションソフトウェアレイヤ４１に送出する。
【００５５】
図２は、ホスト側でデータ圧縮を実行するシステム構成において必要とされるホスト側の圧縮データ管理を示す。
【００５６】
ここでは、ホストが、データ＃１、データ＃２、データ＃３、データ＃４をそれぞれ圧縮し、圧縮されたデータ＃１、圧縮されたデータ＃２、圧縮されたデータ＃３、圧縮されたデータ＃４をＳＳＤに書き込む場合を想定する。また、説明を簡単にするために、データ＃１、データ＃２、データ＃３、データ＃４の圧縮前のデータ長が同じデータ長（例えば１ＭＢ）である場合を想定する。
【００５７】
１ＭＢのデータ＃１を圧縮して７００ＫＢの圧縮データ＃１が得られた場合、ホストは、圧縮データ＃１を７００ＫＢのＬＢＡ範囲に関連付け、このＬＢＡ範囲の先頭ＬＢＡをテーブルのエントリー＃１に登録し、圧縮データ＃１の書き込みをＳＳＤに要求する。
【００５８】
次の１ＭＢのデータ＃２を圧縮して５００ＫＢの圧縮データ＃２が得られた場合、ホストは、圧縮データ＃２を、７００ＫＢのＬＢＡ範囲に後続する５００ＫＢのＬＢＡ範囲に関連付け、この５００ＫＢのＬＢＡ範囲の先頭ＬＢＡをテーブルのエントリー＃２に登録し、圧縮データ＃２の書き込みをＳＳＤに要求する。
【００５９】
次の１ＭＢのデータ＃３を圧縮して２００ＫＢの圧縮データ＃３が得られた場合、ホストは、圧縮データ＃３を、５００ＫＢのＬＢＡ範囲に後続する２００ＫＢのＬＢＡ範囲に関連付け、この２００ＫＢのＬＢＡ範囲の先頭ＬＢＡをテーブルのエントリー＃３に登録し、圧縮データ＃３の書き込みをＳＳＤに要求する。
【００６０】
次の１ＭＢのデータ＃４を圧縮して６００ＫＢの圧縮データ＃４が得られた場合、ホストは、圧縮データ＃４を、２００ＫＢのＬＢＡ範囲に後続する６００ＫＢのＬＢＡ範囲に関連付け、この６００ＫＢのＬＢＡ範囲の先頭ＬＢＡをテーブルのエントリー＃４に登録し、圧縮データ＃４の書き込みをＳＳＤに要求する。
【００６１】
この後、ホストは、例えばデータ＃３を更新する場合がある。この更新された１ＭＢのデータ＃３’を圧縮することによって得られる圧縮データ＃３’のデータ長が、２００ＫＢよりも大きくなる場合がある。例えば、１ＭＢのデータ＃３’を圧縮して６００ＫＢの圧縮データ＃３’が得られた場合、ホストは、圧縮データ＃３’を、圧縮データ＃３の２００ＫＢのＬＢＡ範囲に関連付けることができない。このため、ホストは、圧縮データ＃３’を、圧縮データ＃４用の６００ＫＢのＬＢＡ範囲に後続する新たな６００ＫＢのＬＢＡ範囲に関連付け、この新たな６００ＫＢのＬＢＡ範囲の先頭ＬＢＡをテーブルの次のエントリー（エントリー＃３’）に登録し、圧縮データ＃３’の書き込みをＳＳＤに要求する。圧縮データ＃３に対応する２００ＫＢのＬＢＡ範囲は、有効データが割り当てられていないＬＢＡ範囲となる。
【００６２】
ＬＢＡ空間のサイズは有限であるため、いずれ、残りＬＢＡ範囲が足らなくなる。ホストは、ＬＢＡ空間のフラグメンテーションを解消して広い残りＬＢＡ範囲を確保するために、図４の右部に示すように、圧縮データ＃４および圧縮データ＃３’を移動することが必要となる。この場合、ホストは、まず、圧縮データ＃４を、圧縮データ＃３に対応する２００ＫＢのＬＢＡ範囲の先頭ＬＢＡから始まる６００ＫＢのＬＢＡ範囲に関連付け、圧縮データ＃４の書き込みをＳＳＤに要求する。この後、ホストは、圧縮データ＃３’を、移動された圧縮データ＃４に対応する６００ＫＢのＬＢＡ範囲に後続する６００ＫＢのＬＢＡ範囲に関連付け、圧縮データ＃３’の書き込みをＳＳＤに要求する。
【００６３】
このように、ホストは圧縮データ＃３を圧縮データ＃３’に書き替えたいだけであったにもかかわらず、圧縮データ＃３’のデータ長が圧縮データ＃３よりも大きいことに起因して、圧縮データ＃３用のＬＢＡ範囲とは異なる新たなＬＢＡ範囲への圧縮データ＃３’の書き込み、圧縮データ＃４を移動させるための圧縮データ＃４の再書き込み、圧縮データ＃３’を移動させるための圧縮データ＃３’の再書き込みといった様々な処理を行う事が必要となる。
【００６４】
図３は、図２のシステム構成に適用されるＳＳＤ内のデータ配置（圧縮データ配置）を示す。
【００６５】
図３の左部は、圧縮データ＃１、圧縮データ＃２、圧縮データ＃３、圧縮データ＃４、圧縮データ＃３’が書き込まれた後のＳＳＤ内の物理記憶領域上のデータ配置を示し、図４の右部は、圧縮データ＃４および圧縮データ＃３’の移動後におけるＳＳＤ内の物理記憶領域上のデータ配置を示す。図３から理解されるように、ＳＳＤ内においては、圧縮データ＃３’の書き込みが行われた後に、さらに、圧縮データ＃４の書き込み（圧縮データ＃４の２回目の書き込み）が実行され、この後、またさらに、圧縮データ＃３’の書き込み（圧縮データ＃３’の２回目の書き込み）が実行される。
【００６６】
このように、ホストは圧縮データ＃３を圧縮データ＃３’に書き替えたいだけであったにもかかわらず、ＳＳＤ内では、圧縮データ＃４の２回目の書き込み、圧縮データ＃３’の２回目の書き込みといった大量のデータの書き込みが実行される。
【００６７】
図４は、本実施形態のＳＳＤ３によって実行される圧縮データ管理を示す。
【００６８】
ＳＳＤ３のコントローラ４は、ホスト２から最小データ長（例えば１ＭＢ）以上のデータ長のライトデータを受信し、このライトデータを圧縮し、圧縮データをＮＡＮＤフラッシュメモリ５に書き込む。
【００６９】
１ＭＢのデータ＃１を圧縮して７００ＫＢの圧縮データ＃１が得られた場合、コントローラ４は、７００ＫＢの圧縮データ＃１をＮＡＮＤフラッシュメモリ５に書き込む。コントローラ４は、ホスト２が圧縮データ＃１のデータ長を考慮すること無く、圧縮前のデータ＃１の１ＭＢのＬＢＡ範囲＃１を利用してデータ＃１をアドレス指定できるようにするために、圧縮前のデータ＃１に対応するＬＢＡ範＃１をＬＢＡ範囲＃ＡとＬＢＡ範囲＃Ｂに論理的に分割する。
【００７０】
ＬＢＡ範＃１は、データ＃１のためのライトコマンドにそれぞれ含まれる先頭ＬＢＡおよびデータ長（ここでは例えば１ＭＢ）の組、によって規定される。ＬＢＡ範囲＃Ａは、ライトコマンドに含まれる先頭ＬＢＡから始まり圧縮データ＃１のデータ長（ここでは例えば７００ＫＢ）に対応する論理アドレス範囲である。ＬＢＡ範囲＃Ｂは、圧縮前のデータ＃１に対応する１ＭＢのＬＢＡ範囲＃１内の残りの論理アドレス範囲である。このＬＢＡ範囲＃Ｂは、ＬＢＡ範囲＃Ａの最後のＬＢＡの次のＬＢＡから始まり、データ＃１のデータ長と圧縮データ＃１のデータ長との差分（ここでは３００ＫＢ）に対応する範囲を有する。
【００７１】
コントローラ４は、ＬＵＴ３２を更新して、ＬＢＡ範囲＃Ａ内のＬＢＡそれぞれに、圧縮データ＃１が書き込まれた物理記憶領域の物理アドレスそれぞれをマッピングし、さらに、ＬＢＡ範囲＃Ｂ内の各ＬＢＡを、物理アドレスがマッピングされていない状態（アンマップ状態（割り当て無し状態））に設定する。ＬＢＡ範囲＃Ｂ内の各ＬＢＡは、このＬＢＡ範囲Ｂに対してアンマップ／トリム処理が実行された後の状態と同じ状態（アンマップ状態）となる。
【００７２】
この場合、コントローラ４は、ＬＢＡ範囲＃Ｂに対応するＬＵＴ３２内のエントリそれぞれを更新することによって、ＬＢＡ範囲＃Ｂに対応するＬＵＴ３２内のエントリそれぞれを空き状態にするか、またはこれらエントリーにアンマップ状態（割り当て無し状態）を示す特定の値を設定しても良い。これにより、ＬＢＡ範囲＃Ｂ内の各ＬＢＡをアンマップ状態に設定することができる。もしＬＢＡ範囲＃Ｂに対応するＬＵＴ３２内のエントリそれぞれが既に空き状態に設定されているならば、コントローラ４は、ＬＢＡ範囲＃Ｂに対応するＬＵＴ３２内のエントリそれぞれにどの物理アドレスも登録しない。これにより、ＬＢＡ範囲＃Ｂ内の各ＬＢＡをアンマップ状態に設定することができる。
【００７３】
この結果、ホスト２は、圧縮データ＃１のデータ長を何等考慮すること無く、データ＃１のためのライトコマンドに含まれていた先頭ＬＢＡとデータ長との組と同じ先頭ＬＢＡとデータ長との組を使用して、圧縮データ＃１を容易にアドレス指定することができる。
【００７４】
１ＭＢのデータ＃２を圧縮して５００ＫＢの圧縮データ＃２が得られた場合、コントローラ４は、５００ＫＢの圧縮データ＃２をＮＡＮＤフラッシュメモリ５に書き込む。コントローラ４は、ホスト２が圧縮データ＃２のデータ長を考慮すること無く、圧縮前のデータ＃２のための１ＭＢのＬＢＡ範囲＃２を利用してデータ＃２をアドレス指定できるようにするために、圧縮前のデータ＃２に対応するＬＢＡ範囲＃２をＬＢＡ範囲＃ＡとＬＢＡ範囲＃Ｂに論理的に分割する。
【００７５】
圧縮前のデータ＃２に対応するＬＢＡ範囲＃２は、データ＃２のためのライトコマンドにそれぞれ含まれる先頭ＬＢＡおよびデータ長（ここでは例えば１ＭＢ）の組によって規定される。ＬＢＡ範囲＃２は、例えば、ＬＢＡ範囲＃１に後続する１ＭＢのＬＢＡ範囲である。ＬＢＡ範囲＃Ａは、ＬＢＡ範囲＃２の先頭ＬＢＡから始まり圧縮データ＃２のデータ長（ここでは例えば５００ＫＢ）に対応する論理アドレス範囲である。ＬＢＡ範囲＃Ｂは、圧縮前のデータ＃２に対応する１ＭＢのＬＢＡ範囲＃２内の残りの論理アドレス範囲である。このＬＢＡ範囲＃Ｂは、ＬＢＡ範囲＃Ａの最後のＬＢＡの次のＬＢＡから始まり、データ＃２のデータ長と圧縮データ＃２のデータ長との差分（ここでは５００ＫＢ）に対応する範囲を有する。
【００７６】
コントローラ４は、ＬＵＴ３２を更新して、ＬＢＡ範囲＃２に含まれるＬＢＡ範囲＃Ａ内のＬＢＡそれぞれに、圧縮データ＃２が書き込まれた物理記憶領域の物理アドレスそれぞれをマッピングし、さらに、ＬＢＡ範囲＃２に含まれるＬＢＡ範囲＃Ｂ内の各ＬＢＡを、物理アドレスがマッピングされていない状態（アンマップ状態）に設定する。
【００７７】
１ＭＢのデータ＃３を圧縮して２００ＫＢの圧縮データ＃３が得られた場合、コントローラ４は、２００ＫＢの圧縮データ＃３をＮＡＮＤフラッシュメモリ５に書き込む。コントローラ４は、ホスト２が圧縮データ＃３のデータ長を考慮すること無く、圧縮前のデータ＃３のための１ＭＢのＬＢＡ範囲＃３を利用してデータ＃３をアドレス指定できるようにするために、圧縮前のデータ＃３に対応するＬＢＡ範囲＃３をＬＢＡ範囲＃ＡとＬＢＡ範囲＃Ｂに論理的に分割する。
【００７８】
圧縮前のデータ＃３に対応するＬＢＡ範囲＃３は、データ＃３のためのライトコマンドにそれぞれ含まれる先頭ＬＢＡおよびデータ長（ここでは例えば１ＭＢ）の組によって規定される。ＬＢＡ範囲＃３は、例えば、ＬＢＡ範囲＃２に後続する１ＭＢのＬＢＡ範囲である。ＬＢＡ範囲＃Ａは、ＬＢＡ範囲＃３の先頭ＬＢＡから始まり圧縮データ＃３のデータ長（ここでは例えば２００ＫＢ）に対応する論理アドレス範囲である。ＬＢＡ範囲＃Ｂは、圧縮前のデータ＃３に対応する１ＭＢのＬＢＡ範囲＃３内の残りの論理アドレス範囲である。このＬＢＡ範囲＃Ｂは、ＬＢＡ範囲＃Ａの最後のＬＢＡの次のＬＢＡから始まり、データ＃３のデータ長と圧縮データ＃３のデータ長との差分（ここでは８００ＫＢ）に対応する範囲を有する。
【００７９】
コントローラ４は、ＬＵＴ３２を更新して、ＬＢＡ範囲＃３に含まれるＬＢＡ範囲＃Ａ内のＬＢＡそれぞれに、圧縮データ＃３が書き込まれた物理記憶領域の物理アドレスそれぞれをマッピングし、さらに、ＬＢＡ範囲＃３に含まれるＬＢＡ範囲＃Ｂ内の各ＬＢＡを、物理アドレスがマッピングされていない状態（アンマップ状態）に設定する。
【００８０】
１ＭＢのデータ＃４を圧縮して６００ＫＢの圧縮データ＃４が得られた場合、コントローラ４は、６００ＫＢの圧縮データ＃４をＮＡＮＤフラッシュメモリ５に書き込む。コントローラ４は、ホスト２が圧縮データ＃４のデータ長を考慮すること無く、圧縮前のデータ＃４のための１ＭＢのＬＢＡ範囲＃４を利用してデータ＃４をアドレス指定できるようにするために、圧縮前のデータ＃４に対応するＬＢＡ範囲＃４をＬＢＡ範囲＃ＡとＬＢＡ範囲＃Ｂに論理的に分割する。
【００８１】
圧縮前のデータ＃４に対応するＬＢＡ範囲＃４は、データ＃４のためのライトコマンドにそれぞれ含まれる先頭ＬＢＡおわびデータ長（ここでは例えば１ＭＢ）の組によって規定される。ＬＢＡ範囲＃４は、例えば、ＬＢＡ範囲＃３に後続する１ＭＢのＬＢＡ範囲である。ＬＢＡ範囲＃Ａは、ＬＢＡ範囲＃４の先頭ＬＢＡから始まり圧縮データ＃４のデータ長（ここでは例えば６００ＫＢ）に対応する論理アドレス範囲である。ＬＢＡ範囲＃Ｂは、圧縮前のデータ＃４に対応する１ＭＢのＬＢＡ範囲＃４内の残りの論理アドレス範囲である。このＬＢＡ範囲＃Ｂは、ＬＢＡ範囲＃Ａの最後のＬＢＡの次のＬＢＡから始まり、データ＃４のデータ長と圧縮データ＃４のデータ長との差分（ここでは４００ＫＢ）に対応する範囲を有する。
【００８２】
コントローラ４は、ＬＵＴ３２を更新して、ＬＢＡ範囲＃４に含まれるＬＢＡ範囲＃Ａ内のＬＢＡそれぞれに圧縮データ＃４が書き込まれた物理記憶領域の物理アドレスそれぞれをマッピングし、さらに、ＬＢＡ範囲＃４に含まれるＬＢＡ範囲＃Ｂ内の各ＬＢＡを、物理アドレスがマッピングされていない状態（アンマップ状態）に設定する。
【００８３】
図５は、図４の圧縮データ管理を実行するＳＳＤ３と連携するように構成されたホスト２によって実行されるデータ管理を示す。
【００８４】
１ＭＢのデータ＃１をＳＳＤ３に書き込むことが必要とされた場合、ホスト２は、データ＃１を１ＭＢのＬＢＡ範囲＃１に関連付け、このＬＢＡ範囲＃１の先頭ＬＢＡをテーブルのエントリー＃１に登録し、データ＃１の書き込みをＳＳＤ３に要求する。この場合、ホスト２によって送出されるライトコマンドは、このＬＢＡ範囲＃１の先頭ＬＢＡと１ＭＢのデータ長を含む。
【００８５】
次の１ＭＢのデータ＃２をＳＳＤ３に書き込むことが必要とされた場合、ホスト２は、データ＃２を、データ＃１用のＬＢＡ範囲＃１に後続する次の１ＭＢのＬＢＡ範囲＃２に関連付け、次の１ＭＢのＬＢＡ範囲＃２の先頭ＬＢＡをテーブルのエントリー＃２に登録し、データ＃２の書き込みをＳＳＤ３に要求する。この場合、ホスト２によって送出されるライトコマンドは、ＬＢＡ範囲＃２の先頭ＬＢＡと、１ＭＢのデータ長とを含む。
【００８６】
次の１ＭＢのデータ＃３をＳＳＤ３に書き込むことが必要とされた場合、ホスト２は、データ＃３を、データ＃２用のＬＢＡ範囲＃２に後続する次の１ＭＢのＬＢＡ範囲＃３に関連付け、ＬＢＡ範囲＃３の先頭ＬＢＡをテーブルのエントリー＃３に登録し、データ＃３の書き込みをＳＳＤ３に要求する。この場合、ホスト２によって送出されるライトコマンドは、ＬＢＡ範囲＃３の先頭ＬＢＡと、１ＭＢのデータ長とを含む。
【００８７】
次の１ＭＢのデータ＃４をＳＳＤ３に書き込むことが必要とされた場合、ホスト２は、データ＃４を、データ＃３用のＬＢＡ範囲＃３に後続する次の１ＭＢのＬＢＡ範囲＃４に関連付け、ＬＢＡ範囲＃４の先頭ＬＢＡをテーブルのエントリー＃４に登録し、データ＃４の書き込みをＳＳＤ３に要求する。この場合、ホスト２によって送出されるライトコマンドは、ＬＢＡ範囲＃４の先頭ＬＢＡと、１ＭＢのデータ長とを含む。
【００８８】
この後、ホストは、例えばデータ＃３を更新する場合がある。この更新された１ＭＢのデータ＃３’をＳＳＤ３に書き込むことが必要とされた場合、ホスト２は、データ＃３’をデータ＃３用のＬＢＡ範囲＃３に関連付け、テーブルのエントリー＃３にＬＢＡ範囲＃３の先頭ＬＢＡをデータ＃３’の先頭ＬＢＡとして登録し、データ＃３’の書き込みをＳＳＤ３に要求する。この場合、ホスト２によって送出されるライトコマンドは、ＬＢＡ範囲＃３の先頭ＬＢＡと、１ＭＢのデータ長とを含む。
【００８９】
このように、データ＃３’をデータ＃３用のＬＢＡ範囲＃３に関連付けることができるので、ホスト２は、データ＃３’を新たなＬＢＡ範囲に関連付ける処理およびＬＢＡ範囲＃３のデータを無効化する処理を実行する必要が無い。さらに、フラグメンテーションも発生しないので、データ＃４、データ＃３’を移動する処理を実行する必要もなくなる。
【００９０】
図６は、ＳＳＤ３内のデータ配置（圧縮データ配置）を示す。
【００９１】
図６の左部は、データ＃１、データ＃２、データ＃３、データ＃４が書き込まれた後のＳＳＤ３内の物理記憶領域上のデータ配置を示している。
【００９２】
１ＭＢのデータ＃１はＳＳＤ３のコントローラ４によって圧縮される。データ＃１の圧縮によって７００ＫＢの圧縮データ＃１が生成された場合、コントローラ４は、７００ＫＢの圧縮データ＃１をＮＡＮＤフラッシュメモリ５内の７００ＫＢ分の記憶領域に書き込み、ＬＢＡ範囲＃１内の最初の７００ＫＢのＬＢＡそれぞれに対してのみ、圧縮データ＃１が書き込まれた記憶領域の物理アドレスそれぞれをマッピングし、ＬＢＡ範囲＃１内の残りの３００ＫＢ分のＬＢＡそれぞれをアンマップ状態に設定する。
【００９３】
次の１ＭＢのデータ＃２はＳＳＤ３のコントローラ４によって圧縮される。データ＃２の圧縮によって５００ＫＢの圧縮データ＃２が生成された場合、コントローラ４は、５００ＫＢの圧縮データ＃２をＮＡＮＤフラッシュメモリ５内の次の５００ＫＢ分の記憶領域に書き込み、ＬＢＡ範囲＃２内の最初の５００ＫＢのＬＢＡそれぞれに対してのみ、圧縮データ＃２が書き込まれた記憶領域の物理アドレスそれぞれをマッピングし、ＬＢＡ範囲＃２内の残りの５００ＫＢ分のＬＢＡそれぞれをアンマップ状態に設定する。
【００９４】
次の１ＭＢのデータ＃３はＳＳＤ３のコントローラ４によって圧縮される。データ＃３の圧縮によって２００ＫＢの圧縮データ＃３が生成された場合、コントローラ４は、２００ＫＢの圧縮データ＃３をＮＡＮＤフラッシュメモリ５内の次の２００ＫＢ分の記憶領域に書き込み、ＬＢＡ範囲＃３内の最初の２００ＫＢのＬＢＡそれぞれに対してのみ、圧縮データ＃３が書き込まれた記憶領域の物理アドレスそれぞれをマッピングし、ＬＢＡ範囲＃３内の残りの８００ＫＢ分のＬＢＡそれぞれをアンマップ状態に設定する。
【００９５】
次の１ＭＢのデータ＃４はＳＳＤ３のコントローラ４によって圧縮される。データ＃４の圧縮によって６００ＫＢの圧縮データ＃４が生成された場合、コントローラ４は、６００ＫＢの圧縮データ＃４をＮＡＮＤフラッシュメモリ５内の次の６００ＫＢ分の記憶領域に書き込み、ＬＢＡ範囲＃４内の最初の６００ＫＢのＬＢＡそれぞれに対してのみ、圧縮データ＃４が書き込まれた記憶領域の物理アドレスそれぞれをマッピングし、ＬＢＡ範囲＃４内の残りの４００ＫＢ分のＬＢＡそれぞれをアンマップ状態に設定する。
【００９６】
図６の右部は、データ＃３’が書き込まれた後のＳＳＤ３内の物理記憶領域上のデータ配置を示している。
【００９７】
１ＭＢのデータ＃３’はＳＳＤ３のコントローラ４によって圧縮される。データ＃３’の圧縮によって６００ＫＢの圧縮データ＃３’が生成された場合、コントローラ４は、６００ＫＢの圧縮データ＃３’をＮＡＮＤフラッシュメモリ５内の６００ＫＢ分の記憶領域に書き込み、ＬＢＡ範囲＃３内の最初の６００ＫＢのＬＢＡそれぞれに対してのみ、圧縮データ＃３’が書き込まれた記憶領域の物理アドレスそれぞれをマッピングし、ＬＢＡ範囲＃３内の残りの４００ＫＢ分のＬＢＡそれぞれをアンマップ状態に設定する。
【００９８】
次に、ＳＳＤ３によって実行される書き込み動作と読み出し動作の仕様の概要について説明する。
【００９９】
（１）書き込み動作（圧縮書き込み動作）
ホスト２は、先頭ＬＢＡとデータ長との組を指定するライトコマンドをＳＳＤ３に送出する。
【０１００】
ＳＳＤ３のコントローラ４は、圧縮データが記録済みの領域の途中からの書き換えは許容しない。つまり、ＳＳＤ３のコントローラ４は、ライトコマンドの先頭ＬＢＡの既存データが圧縮データであり、ライトコマンドの先頭ＬＢＡが前回記録時の先頭ＬＢＡと一致しなかった場合は、エラーを示すレスポンスをホスト２に返す。いま、例えば、ある１ＭＢのＬＢＡ範囲に対応するデータがＳＳＤ３によって圧縮され、この圧縮データがＳＳＤ３内に記録されている状態を想定する。もしホスト２から受信される後続のライトコマンドによってこのＬＢＡ範囲の途中から始まる範囲が書き込み対象のＬＢＡ範囲として指定されたならば、ＳＳＤ３のコントローラ４は、このライトコマンドの実行を許容せず、エラーを示すレスポンスをホスト２に返す。一方、もしホスト２から受信される後続のライトコマンドによってこのＬＢＡ範囲の先頭ＬＢＡから始まる範囲が書き込み対象のＬＢＡ範囲として指定されたならば、ＳＳＤ３のコントローラ４は、このライトコマンドの実行を許容し、このデータを圧縮して書き込むための書き込み動作（圧縮書き込み動作）を実行する。
【０１０１】
圧縮対象のデータ長の最小データ長は、管理サイズよりも大きい。最小データ長は、例えば１ＭＢで、ホスト２はその整数倍の長さを任意に選択できる。
【０１０２】
データの長さは書き込みの都度選択可能であるが、書き込み可能なデータの最大長は圧縮エンジンの制約を受ける。
【０１０３】
ＳＳＤ３のコントローラ４は、複数種の圧縮方法（圧縮メソッド）をサポートする。ホスト２は、必要に応じて、使用すべき圧縮方法（圧縮メソッド）を指定することができる。ライトコマンドは複数種の圧縮方法の一つを指定するパラメータを含んでもよい。ＳＳＤ３のコントローラ４は、このパラメータによって指定される圧縮方法を使用してライトデータを圧縮する。ホスト２が圧縮方法を指定しない場合、ＳＳＤ３のコントローラ４は、デフォルトの圧縮方法メソッドを使用してライトデータを圧縮する。
【０１０４】
さらに、ＳＳＤ３は、非圧縮モードもサポートする。この場合、ライトコマンドは、圧縮または非圧縮を指定するパラメータを含む。コントローラ４は、パラメータによって非圧縮が指定された場合、ライトデータを圧縮せずに、ライトデータをＮＡＮＤフラッシュメモリ５内の記憶領域に書き込む。
【０１０５】
さらに、ＳＳＤ３のコントローラ４は、ＳＳＤ３を非圧縮データと圧縮データの混在を許容するドライブ（ストレージデバイス）として機能させることができる。
【０１０６】
ホスト２は、ネームスペース毎に圧縮か非圧縮を選択することができる。コントローラ４は、圧縮または非圧縮をネームスペース毎に指定するホスト２からの要求に基づいて、複数のネームスペースの各々に圧縮モードまたは非圧縮モードを関連付ける。ライトコマンドに含まれるネームスペースＩＤに対応するネームスペースに圧縮モードが関連付けられている場合、コントローラ４は、ライトデータを圧縮する。ライトコマンドに含まれるネームスペースＩＤに対応するネームスペースに非圧縮モードが関連付けられている場合、コントローラ４は、ライトデータを圧縮しない。
【０１０７】
同一ネームスペース内に非圧縮データと圧縮データとが混在されてもよい。この場合には、ライトコマンドは、ネームスペースＩＤと、圧縮または非圧縮を指定するパラメータとを含んでもよい。
【０１０８】
（２）読み出し動作
ホスト２は、基本的には、書き込み時に指定した先頭ＬＢＡとデータ長との組と同じ先頭ＬＢＡとデータ長との組を指定するリードコマンドをＳＳＤ３に送出すればよい。
【０１０９】
ＳＳＤ３のコントローラ４は、圧縮データが記録済みの領域内の途中の一部のデータの読み出しをサポートしない。
【０１１０】
ＳＳＤ３のコントローラ４は、圧縮データが記録済みの領域の先頭から始まる一部のデータの読み出しをサポートする。
【０１１１】
いま、例えば、ある１ＭＢのＬＢＡ範囲に対応するデータがＳＳＤ３によって圧縮され、この圧縮データがＳＳＤ３内に記録されている状態を想定する。もしホスト２から受信されるリードコマンドによってこのＬＢＡ範囲の途中から始まる範囲が読み出し対象のＬＢＡ範囲として指定されたならば、ＳＳＤ３のコントローラ４は、このリードコマンドの実行を許容せず、エラーを示すレスポンスをホスト２に返す。一方、もしホスト２から受信されるリードコマンドによってこのＬＢＡ範囲の先頭ＬＢＡから始まる範囲が読み出し対象のＬＢＡ範囲として指定されたならば、ＳＳＤ３のコントローラ４は、このリードコマンドの実行を許容する。
【０１１２】
図７は、ＳＳＤ３によって実行される書き込み動作（圧縮書き込み動作）を示す。
【０１１３】
ＳＳＤ３のコントローラ４は、ホスト２からのライトコマンドの受信に応答して、上述の最小データ長以上のデータ長（例えば１ＭＢ）を有するライトデータをホスト２から受信する。ライトコマンドは、先頭ＬＢＡ（ＬＢＡｘ）とデータ長（例えば１ＭＢ）とを含む。
【０１１４】
コントローラ４は、ホスト２から到着したライトデータを圧縮し、この圧縮データのデータ長を確定する（ステップＳ１１）。コントローラ４は、圧縮データのデータ長を４ＫＢ単位（管理サイズ単位）に切り上げて丸めることによって圧縮データのデータ長を調整してもよい（ステップＳ１２）。コントローラ４は、通常のデータ書き込み動作と同様に圧縮データをＮＡＮＤフラッシュメモリ５の物理記憶位置、つまり現在の書き込み先ブロックの利用可能なページそれぞれに、書き込む（ステップＳ１３）。コントローラ４は、ＬＵＴ３２を更新して、圧縮データ（有効データ）を書き込むＬＢＡ範囲内のＬＢＡそれぞれに、圧縮データ（有効データ）が書き込まれた物理記憶位置それぞれの物理アドレスをマッピングする（ステップＳ１４）。圧縮データ（有効データ）を書き込むＬＢＡ範囲は、先頭ＬＢＡ（ＬＢＡｘ）から始まり、圧縮データのデータ長に対応する範囲を有する。例えば、圧縮データのデータ長が７００ＫＢであれば、先頭ＬＢＡ（ＬＢＡｘ）から始まる７００ＫＢのＬＢＡ範囲にのみ物理アドレスがマッピングされ、これによってこのＬＢＡ範囲内の各ＬＢＡが対応する物理アドレスに関連付けられる。そして、コントローラ４は、残りの３００ＫＢのＬＢＡ範囲を物理アドレスがマッピングされていないアンマップ状態に設定する（ステップＳ１５）。残りの３００ＫＢのＬＢＡ範囲に対応するＬＵＴ３２内のエントリーそれぞれが既に空き状態に設定されているか、あるいはアンマップ状態を示す値が各エントリーに設定されていれば、コントローラ４は、これらエントリーに物理アドレスを登録しなければよい。ステップＳ１５では、コントローラ４は、このＬＢＡ範囲に後続する残りの３００ＫＢのＬＢＡ範囲に対して必要に応じてトリム（Ｔｒｉｍ）処理を実施する。これにより、たとえ残りの３００ＫＢのＬＢＡ範囲に古いデータの物理アドレスが関連付けられていたとしても、残りの３００ＫＢのＬＢＡ範囲をアンマップ状態にすることができる。
【０１１５】
この結果、コントローラ４は、ライトデータのデータ長と圧縮データのデータ長との間の差分領域（ここでは、残りの３００ＫＢのＬＢＡ範囲）を、トリム／アンマップされたＬＢＡ範囲であるかのように扱うことができる。先頭ＬＢＡ（ＬＢＡｘ）から始まる１ＭＢのＬＢＡ範囲に対応するデータが圧縮によってどのようなデータ長に変わったとしても、ホスト２は、この１ＭＢのＬＢＡ範囲を使用して、このデータのリード及びライト（書き替え）を実行することができる。よって、図２で説明したようなホスト側でのガベージコレクションが不要となるので、ＳＳＤ３へ書き込まれるデータ量も減少される。
【０１１６】
図８は、ＳＳＤ３によって実行されるデータ読み出し動作を示す。
【０１１７】
ホスト２が、図７で書き込まれた上述のデータをリードすることが必要になった時、ホスト２は、先頭ＬＢＡ（ＬＢＡｘ）とデータ長（１ＭＢ）とを含むリードコマンドをＳＳＤ３に送出する。
【０１１８】
このリードコマンドの受信に応答して、ＳＳＤ３のコントローラ４は、ＬＵＴ３２を参照して、先頭ＬＢＡ（ＬＢＡｘ）から始まる１ＭＢのＬＢＡ範囲にマッピングされた物理アドレスそれぞれを特定する（ステップＳ２１）。本実施形態においては、このＬＢＡ範囲内の最初の７００ＫＢバイト分の範囲についてのみ物理アドレスが割り当てられており、残りの３００ＫＢバイト分の範囲については物理アドレスは割り当てられていない。したがって、コントローラ４は、最初の７００ＫＢバイト分の範囲内のＬＢＡそれぞれに対応する物理アドレスに基づいて、７００ＫＢバイトの圧縮データをＮＡＮＤフラッシュメモリ５からリードする（ステップＳ２３）。コントローラ４は、リードされた圧縮データを伸張して１ＭＢのデータを得る（ステップＳ２３）。そして、コントローラ４は、伸張によって得られた１ＭＢのデータをホスト２に返す（ステップＳ２４）。
【０１１９】
もしホスト２が先頭ＬＢＡ（ＬＢＡｘ）とデータ長（例えば２５６ＫＢ）とを含むリードコマンドをＳＳＤ３に送出したならば、コントローラ４は、伸張によって得られる最初の２５６ＫＢのデータのみをホスト２に返す。
【０１２０】
図９は、ＳＳＤ３のＮＡＮＤフラッシュメモリ５に保存される管理情報の例を示す。
【０１２１】
この管理情報は、受信されたライトコマンドそれぞれに対応する複数の記憶領域を含む。各記憶領域は、「先頭ＬＢＡ」フィールド、「圧縮前のデータ長」フィールド、「圧縮後のデータ長」フィールド、「圧縮メソッド」フィールド、「圧縮フラグ」フィールドを含んでいてもよい。「先頭ＬＢＡ」フィールドは、対応するライトコマンドによって指定された先頭ＬＢＡを示す。「圧縮前のデータ長」フィールドは、圧縮前のデータ（ホストから到来するライトデータ）のデータ長、つまり対応するライトコマンドによって指定されたデータ長を示す。「圧縮後のデータ長」フィールドは、圧縮後のデータのデータ長を示す。「圧縮メソッド」フィールドは、データ圧縮のために使用された圧縮方法を示す。「圧縮フラグ」フィールドは、書き込まれたデータが圧縮データまたは非圧縮データのいずれであるかを示す。
【０１２２】
ＳＳＤ３のコントローラ４は、この管理情報に基づいて、データ読み出し動作やガベージコレクション動作をより精度良く実行することができる。
【０１２３】
図１０は、ＮＡＮＤフラッシュメモリ５の各ブロックの各ページに書き込まれる管理情報の例を示す。
【０１２４】
各ページには、ユーザデータに加え、このユーザデータに関する管理情報が書き込まれても良い。この管理情報には、このユーザデータのＬＢＡ、このユーザデータが圧縮データまたは非圧縮データのいずれであるかを示す圧縮フラグ、このユーザデータに適用された圧縮方法を示す圧縮メソッド情報が含まれていても良い。さらに、このユーザデータに関する管理情報は、このユーザデータのＬＢＡが先頭ＬＢＡであるか否かを示す情報を含んで良い。
【０１２５】
図１１は、ＳＳＤ３に適用されるライトコマンドを示す。
【０１２６】
ライトコマンドは、以下のパラメータを含む。
【０１２７】
（１）先頭ＬＢＡ
（２）データ長（論理ブロックの数）
（３）圧縮モード
先頭ＬＢＡは、書き込まれるべきデータの先頭ＬＢＡを示す。
【０１２８】
データ長は、書き込まれるべきデータの長さ（書き込まれるべきデータに対応する論理ブロックの数）を示す。最小データ長は、管理サイズよりも大きいデータ長である。ホスト２は最小データ長の整数倍の長さを指定することができる。
【０１２９】
圧縮モードは、「００」、「０１」、「１０」、「１１」に対応する４つのモードのいずれかを指定することができる。「００」は、デフォルトの圧縮方法を使用することを指定する。「０１」は、圧縮方法＃１を使用することを指定する。「１０」は、圧縮方法＃１とは異なる圧縮方法＃２を使用することを指定する。「１１」は、データを圧縮せずに書き込むことを指定する。
【０１３０】
図１２は、ＳＳＤ３に適用される拡張ネームスペース管理コマンドを示す。
【０１３１】
拡張ネームスペース管理コマンドは、ネームスペースの作成および削除と、ネームスペースと圧縮モードとの間の関連付け、とを含むネームスペース管理のために使用される。拡張ネームスペース管理コマンドは、以下のパラメータを含む。
【０１３２】
（１）作成／削除
（２）ＬＢＡ範囲（論理ブロックの数）
（３）物理リソースサイズ
（４）圧縮モード
作成／削除のパラメータ「０」は、ネームスペースの作成をＳＳＤ３に要求する。作成／削除のパラメータ「１」は、ネームスペースの削除をＳＳＤ３に要求する。ネームスペースの削除を要求する場合には、削除対象のネームスペースのＩＤを示すパラメータが拡張ネームスペース管理コマンドに設定されてもよい。ネームスペースの削除を要求する場合には、ＬＢＡ範囲（論理ブロックの数）、物理リソースサイズ、圧縮モードは無視されても良い。
【０１３３】
ＬＢＡ範囲は、ネームスペース用のＬＢＡ範囲（ＬＢＡ０〜ｎ−１）を示す。このＬＢＡ範囲は、このネームスペースのユーザ領域にマッピングされる。
【０１３４】
物理リソースサイズは、ネームスペース用に確保されるべき物理ブロックの個数を示す。
【０１３５】
圧縮モードは、このネームスペースに関連付けるべき圧縮モードを示す。圧縮モードは、「００」、「０１」、「１０」、「１１」に対応する４つのモードのいずれかを指定する。「００」は、デフォルトの圧縮方法を使用することを指定する。「０１」は、圧縮方法＃１を使用することを指定する。「１０」は、圧縮方法＃１とは異なる圧縮方法＃２を使用することを指定する。「１１」は、データを圧縮せずに書き込むことを指定する。
【０１３６】
図１３は、ＳＳＤ３に適用されるリードコマンドを示す。
【０１３７】
リードコマンドは、以下のパラメータを含む。
【０１３８】
（１）先頭ＬＢＡ
（２）データ長（論理ブロックの数）
先頭ＬＢＡは、読み出すべきデータの先頭ＬＢＡを示す。
【０１３９】
データ長は、読み出すべきデータの長さ（読み出すべきデータに対応する論理ブロックの数）を示す。典型的には、
最小データ長は、管理サイズよりも大きいデータ長である。ホスト２は最小データ長の整数倍の長さを指定することができる。典型的には、先頭ＬＢＡとデータ長の組は、書き込み時のＬＢＡとデータ長との組と同じである。
【０１４０】
図１４は、ＳＳＤ３によって実行されるライト処理の手順を示す。
【０１４１】
ＳＳＤ３のコントローラ４は、書き込み要求（ライトコマンド）と書き込むべきデータ（ライトデータ）とをホスト２から受信する（ステップＳ３１、Ｓ３２）。コントローラ４は、ライトコマンド内の先頭ＬＢＡの既存データが圧縮データであるか否かを判定する（ステップＳ３３）。ライトコマンド内の先頭ＬＢＡの既存データが圧縮データであるならば（ステップＳ３３のＹＥＳ）、コントローラ４は、ライトコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致するか否かを判定する（ステップＳ３４）。ライトコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致しないならば（ステップＳ３４のＮＯ）、コントローラ４は、ライトコマンドに含まれる先頭ＬＢＡおよびデータ長の組によって指定される書き込み対象のＬＢＡ範囲が既存データ（圧縮データ）のＬＢＡ範囲の途中のＬＢＡから始まるＬＢＡ範囲であると認識し、このライトコマンドを実行せず、エラーを示すレスポンスをホスト２に返す（ステップＳ３５）。
【０１４２】
ライトコマンド内の先頭ＬＢＡの既存データが圧縮データではないならば（ステップＳ３３のＮＯ）、またはライトコマンド内の先頭ＬＢＡの既存データが圧縮データであり且つライトコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致するならば（ステップＳ３４のＹＥＳ）、コントローラ４は、ライトコマンドを実行する。
【０１４３】
この場合、コントローラ４は、まず、ライトコマンド内の圧縮モードのパラメータをチェックし（ステップＳ３６）、圧縮モードまたは非圧縮モードのどちらが指定されているかを判定する（ステップＳ３７）。
【０１４４】
非圧縮モードが指定されたならば（ステップＳ３７のＮＯ）、コントローラ４は、ライトデータをＮＡＮＤフラッシュメモリ５の物理記憶位置、つまり現在の書き込み先ブロックの利用可能なページそれぞれに書き込み（ステップＳ３８）、ＬＵＴ３２を更新してライトデータのＬＢＡ範囲内のＬＢＡそれぞれに物理記憶位置の物理アドレスそれぞれをマッピングし（ステップＳ３９）、ライト完了を示すレスポンスをホスト２に返す（ステップＳ４０）。
【０１４５】
圧縮モードが指定されたならば（ステップＳ３７のＹＥＳ）、コントローラ４は、指定された圧縮方法（デフォルトの圧縮方法、またはライトコマンドによって明示的に指定された圧縮方法）を使用してライトデータを圧縮し、圧縮データのデータ長を確定する（ステップＳ４１）。コントローラ４は、圧縮データのデータ長を４ＫＢ単位（管理サイズ単位）に切り上げて丸めることによって圧縮データのデータ長を調整してもよい（ステップＳ４２）。コントローラ４は、圧縮データをＮＡＮＤフラッシュメモリ５の物理記憶位置、つまり現在の書き込み先ブロックの利用可能なページそれぞれに書き込む（ステップＳ４３）。コントローラ４は、ＬＵＴ３２を更新して、圧縮データ（有効データ）が書き込まれたＬＢＡ範囲内のＬＢＡそれぞれに、圧縮データ（有効データ）が書き込まれた物理記憶位置それぞれの物理アドレスをマッピングする（ステップＳ４４）。圧縮データが書き込まれたＬＢＡ範囲は、ライトコマンド内の先頭ＬＢＡから始まり、圧縮データのデータ長に対応する範囲を有する。そして、コントローラ４は、ライトデータのデータ長と圧縮データのデータ長との間の差分に対応する残りのＬＢＡ範囲内の各ＬＢＡを、物理アドレスがマッピングされていないアンマップ状態に設定する（ステップＳ４５）。この後、コントローラ４は、ライト完了を示すレスポンスをホスト２に返す（ステップＳ４０）。このレスポンスは、ホスト２に圧縮データ長を通知するために、圧縮データのデータ長を示すパラメータを含んでいてもよい。
【０１４６】
図１５は、ＳＳＤ３に適用される、ネームスペース用のライトコマンドを示す。
【０１４７】
ネームスペース用のライトコマンドは、以下のパラメータを含む。
【０１４８】
（１）先頭ＬＢＡ
（２）データ長（論理ブロックの数）
（３）ＮＳＩＤ
先頭ＬＢＡは、書き込まれるべきデータの先頭ＬＢＡを示す。
【０１４９】
データ長は、書き込まれるべきデータの長さ（書き込まれるべきデータに対応する論理ブロックの数）を示す。最小データ長は、管理サイズよりも大きいデータ長である。ホスト２は最小データ長の整数倍の長さを指定することができる。
【０１５０】
ＮＳＩＤは、データが書き込まれるべきネームスペースの識別子（ＩＤ）を示す。
【０１５１】
図１６は、指定されたネームスペースにデータを書き込むライト処理の手順を示す。
【０１５２】
ＳＳＤ３のコントローラ４は、書き込み要求（ライトコマンド）と書き込むべきデータ（ライトデータ）とをホスト２から受信する（ステップＳ５１、Ｓ５２）。コントローラ４は、ライトコマンド内の先頭ＬＢＡの既存データが圧縮データであるか否かを判定する（ステップＳ５３）。ライトコマンド内の先頭ＬＢＡの既存データが圧縮データであるならば（ステップＳ５３のＹＥＳ）、コントローラ４は、ライトコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致するか否かを判定する（ステップＳ５４）。ライトコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致しないならば（ステップＳ５４のＮＯ）、コントローラ４は、ライトコマンドに含まれる先頭ＬＢＡおよびデータ長の組によって指定される書き込み対象のＬＢＡ範囲が既存データ（圧縮データ）のＬＢＡ範囲の途中のＬＢＡから始まるＬＢＡ範囲であると認識し、このライトコマンドを実行せず、エラーを示すレスポンスをホスト２に返す（ステップＳ５５）。
【０１５３】
ライトコマンド内の先頭ＬＢＡの既存データが圧縮データではないならば（ステップＳ５３のＮＯ）、またはライトコマンド内の先頭ＬＢＡの既存データが圧縮データであり且つライトコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致するならば（ステップＳ５４のＹＥＳ）、コントローラ４は、ライトコマンドを実行する。
【０１５４】
この場合、コントローラ４は、まず、ライトコマンド内のＮＳＩＤに関連付けられている圧縮モード情報をチェックし（ステップＳ５６）、このＮＳＩＤに圧縮モードまたは非圧縮モードのどちらが関連付けられているかを判定する（ステップＳ５７）。
【０１５５】
非圧縮モードが関連付けられているならば（ステップＳ５７のＮＯ）、コントローラ４は、ライトデータをＮＡＮＤフラッシュメモリ５の物理記憶位置、つまりこのＮＳＩＤのネームスペース用に割り当てられている現在の書き込み先ブロックの利用可能なページそれぞれに書き込み（ステップＳ５８）、このＮＳＩＤのネームスペース用のＬＵＴを更新してライトデータのＬＢＡ範囲内のＬＢＡそれぞれに物理記憶位置の物理アドレスそれぞれをマッピングし（ステップＳ５９）、ライト完了を示すレスポンスをホスト２に返す（ステップＳ６０）。
【０１５６】
圧縮モードが関連付けられているならば（ステップＳ５７のＹＥＳ）、コントローラ４は、このＮＳＩＤに関連付けられた圧縮方法（デフォルトの圧縮方法、または拡張ネームスペース管理コマンドによって明示的に指定された圧縮方法）を使用してライトデータを圧縮し、圧縮データのデータ長を確定する（ステップＳ６１）。コントローラ４は、圧縮データのデータ長を４ＫＢ単位（管理サイズ単位）に切り上げて丸めることによって圧縮データのデータ長を調整してもよい（ステップＳ６２）。コントローラ４は、圧縮データをＮＡＮＤフラッシュメモリ５の物理記憶位置、つまりこのＮＳＩＤのネームスペース用に割り当てられている現在の書き込み先ブロックの利用可能なページそれぞれに書き込む（ステップＳ６３）。コントローラ４は、このＮＳＩＤのネームスペース用のＬＵＴを更新して、圧縮データ（有効データ）が書き込まれたＬＢＡ範囲内のＬＢＡそれぞれに、圧縮データ（有効データ）が書き込まれた物理記憶位置それぞれの物理アドレスをマッピングする（ステップＳ６４）。圧縮データが書き込まれたＬＢＡ範囲は、ライトコマンド内の先頭ＬＢＡから始まり、圧縮データのデータ長に対応する範囲を有する。そして、コントローラ４は、ライトデータのデータ長と圧縮データのデータ長との間の差分に対応する残りのＬＢＡ範囲内の各ＬＢＡを、物理アドレスがマッピングされていないアンマップ状態に設定する（ステップＳ６５）。この後、コントローラ４は、ライト完了を示すレスポンスをホスト２に返す（ステップＳ６０）。このレスポンスは、ホスト２に圧縮データ長を通知するために、圧縮データのデータ長を示すパラメータ（リターン値）を含んでいてもよい。
【０１５７】
図１７は、ＳＳＤ３によって実行されるリード処理の手順を示す。
【０１５８】
ＳＳＤ３のコントローラ４は、読み出し要求（リードコマンド）をホスト２から受信する（ステップＳ７１）。コントローラ４は、リードコマンド内の先頭ＬＢＡの既存データが圧縮データであるか否かを判定する（ステップＳ７２）。リードコマンド内の先頭ＬＢＡの既存データが圧縮データであるならば（ステップＳ７２のＹＥＳ）、コントローラ４は、リードコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致するか否かを判定する（ステップＳ７３）。リードコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致しないならば（ステップＳ７３のＮＯ）、コントローラ４は、リードコマンドに含まれる先頭ＬＢＡおよびデータ長の組によって指定される読み出し対象のＬＢＡ範囲が既存データ（圧縮データ）のＬＢＡ範囲の途中のＬＢＡから始まるＬＢＡ範囲であると認識し、このリードコマンドを実行せず、エラーを示すレスポンスをホスト２に返す（ステップＳ７４）。
【０１５９】
リードコマンド内の先頭ＬＢＡの既存データが圧縮データではないならば（ステップＳ７２のＮＯ）、またはリードコマンド内の先頭ＬＢＡの既存データが圧縮データであり且つリードコマンド内の先頭ＬＢＡが既存データ（圧縮データ）の先頭ＬＢＡに一致するならば（ステップＳ７３のＹＥＳ）、コントローラ４は、リードコマンドを実行する。
【０１６０】
この場合、コントローラ４は、リードコマンドに含まれる先頭ＬＢＡおよびデータ長によって指定される読み出し対象のＬＢＡ範囲に対応する既存データが圧縮データであるか非圧縮データであるかを判定するために既存データの圧縮モードをチェックする（ステップＳ７５）。以下では、読み出し対象のＬＢＡ範囲に対応する既存データが圧縮データである場合を想定する。
【０１６１】
コントローラ４は、ＬＵＴ３２を参照し（ステップＳ７６）、読み出し対象のＬＢＡ範囲内のＬＢＡそれぞれにマッピングされた物理アドレスそれぞれを取得する（ステップＳ７７）。本実施形態においては、このＬＢＡ範囲内の最初の範囲（圧縮データが書き込まれている物理記憶位置それぞれに対応するＬＢＡ範囲）についてのみ物理アドレスが割り当てられており、このＬＢＡ範囲の残りの範囲については物理アドレスは割り当てられていない。したがって、コントローラ４は、最初の範囲内のＬＢＡそれぞれに対応する物理アドレスに基づいて、圧縮データをＮＡＮＤフラッシュメモリ５からリードする（ステップＳ７８）。コントローラ４は、リードされた圧縮データを伸張し（ステップＳ７９）、伸張によって得られたデータをホスト２に返す（ステップＳ８０）。ステップＳ７９では、コントローラ４は、対応する「圧縮前のデータ長」フィールドを参照することにより、リードされた圧縮データをオリジナルのデータ長に伸張することができる。
【０１６２】
図１８は、ＳＳＤ３によって実行されるガベージコレクション（ＧＣ）動作を示す。
【０１６３】
コントローラ４は、有効データと無効データとが混在するブロック群から一つ以上のＧＣ対象ブロックを選択する。図１８では、ブロックＢ１１、Ｂ１２、Ｂ１３がＧＣ対象ブロックとして選択された場合が想定されている。また、コントローラ４は、全てのフリーブロックを含むフリーブロックプール（フリーブロックリスト）６０を管理する。コントローラ４は、これらフリーブロックから一つのフリーブロックＢ１０１をコピー先ブロックとして割り当てる。コントローラ４は、各ＧＣ対象ブロックの有効データのみをコピー先ブロックにコピーする。
【０１６４】
有効データが圧縮データであるならば、コントローラ４は、この有効データを再圧縮し、この有効データよりもデータ長の短い圧縮データを生成する。そして、コントローラ４は、この生成された圧縮データをコピー先フリーブロックにコピーする。
【０１６５】
図１９は、ＳＳＤ３によって実行されるガベージコレクション処理の手順を示す。
【０１６６】
ＳＳＤ３のコントローラ４は、ＧＣ開始条件が満たされたか否かを判定する（ステップＳ９１）。ＧＣ開始条件は、ＧＣ動作を開始するための条件である。例えば、残りフリーブロックの数が閾値以下になった場合、あるいはＧＣ開始を要求するコマンドがホスト２から受信された場合に、コントローラ４は、ＧＣ開始条件が満たされたと判定する。
【０１６７】
ＧＣ開始条件が満たされたならば（ステップＳ９１のＹＥＳ）、コントローラ４は、有効データと無効データとが混在する一つ以上のブロックをＧＣ対象ブロックとして選択する（ステップＳ９２）。
【０１６８】
コントローラ４は、あるＧＣ対象ブロック内の有効データを選択し（ステップＳ９３）、この有効データを読み出し、この有効データが圧縮データであるか否かを判定する（ステップＳ９４）。
【０１６９】
読み出された有効データが圧縮データであるならば（ステップＳ９４のＹＥＳ）、コントローラ４は、この圧縮データを伸張し（ステップＳ９５）、伸張されたデータを、読み出された圧縮データに適用されていた圧縮方法よりも高圧縮率の別の圧縮方法を使用して圧縮（再圧縮）して、圧縮データよりもデータ長の短い圧縮データ（再圧縮データ）を生成する（ステップＳ９６）。そして、コントローラ４は、この再圧縮データをコピー先ブロックにコピーする（圧縮書き込む）（ステップＳ９７）。ステップＳ９７では、読み出された圧縮データの圧縮前のデータ長に対応するＬＢＡ範囲は、このＬＢＡ範囲の先頭ＬＢＡから開始され且つ再圧縮データのデータ長に対応する範囲を有するＬＢＡ範囲＃Ａと、圧縮前のデータ長と再圧縮データのデータ長との間の差分に対応するＬＢＡ範囲＃Ｂとに論理的に分割される。そして、ＬＵＴ３２が更新されて、ＬＢＡ範囲＃Ａにのみコピー先ブロックの物理アドレスそれぞれがマッピングされ、ＬＢＡ範囲＃Ｂはアンマップ状態に設定される。
【０１７０】
読み出された有効データが圧縮データでないならば（ステップＳ９４のＹＥＳ）、コントローラ４は、読み出された有効データを、コピー先ブロックにコピーする（ステップＳ９７）。ステップＳ９７では、読み出された有効データのＬＢＡ範囲内のＬＢＡそれぞれにコピー先ブロックの物理アドレスそれぞれがマッピングされる。
【０１７１】
図２０は、ＳＳＤ３によって実行されるガベージコレクション処理の別の手順を示す。ここでは、図１９のステップＳ９４とＳ９５との間にステップＳ１００が追加されている。
【０１７２】
読み出された有効データが圧縮データであるならば（ステップＳ９４のＹＥＳ）、コントローラ４は、読み出された有効データ（圧縮データ）が、頻繁に更新されるデータ（ホットデータ）、または、頻繁に更新されないかあるいは滅多に更新されないデータ（コールドデータ）のいずれであるかを判定する（ステップＳ１００）。ホットデータは、ある高い更新頻度を有する第１タイプデータである。コールドデータは、ホットデータの更新頻度よりも低い更新頻度を有する第２タイプデータである。
【０１７３】
読み出された有効データがホットデータであるならば、たとえこの有効データを高い圧縮率で再圧縮しても、この再圧縮されたデータは再び書き替えられてしまう可能性が高い。したがって、本実施形態では、読み出された有効データ（圧縮データ）がコールドデータである場合に、再圧縮が実行される。
【０１７４】
すなわち、読み出された有効データ（圧縮データ）がコールドデータであるならば、コントローラ４は、読み出された有効データ（圧縮データ）を伸張し（ステップＳ９５）、伸張されたデータを、読み出された圧縮データに適用されていた圧縮方法よりも高圧縮率の別の圧縮方法を使用して圧縮（再圧縮）して、圧縮データよりもデータ長の短い圧縮データ（再圧縮データ）を生成する（ステップＳ９６）。そして、コントローラ４は、この再圧縮データをコピー先ブロックにコピーする（圧縮書き込む）（ステップＳ９７）。
【０１７５】
このように、ＧＣ時にコールドデータを再圧縮してコピー先ブロックにコピーすることにより、ホストデータの格納に必要な物理記憶容量をより削減することができる。
【０１７６】
ホットデータ／コールドデータを判定する方法の例について説明する。
【０１７７】
コントローラ４は、ブロック使用順序管理リストを管理しても良い。ブロック使用順序管理リストは、書き込み先ブロック用に割り当てられたブロックそれぞれに付与される割り当て番号（シーケンシャル番号）を保持する。すなわち、コントローラ４は、書き込み先ブロックとして割り当てられたブロックそれぞれに対してその割り当て順序を示す番号（割り当て番号）を付与する。番号は１から始まるシーケンシャル番号であってもよい。例えば、最初に書き込み先ブロック用に割り当てられたブロックには割り当て番号＝１が付与され、２番目に書き込み先ブロック用に割り当てられたブロックには割り当て番号＝２が付与され、３番目に書き込み先ブロック用に割り当てられたブロックには割り当て番号＝３が付与される。これにより、どのブロックがどのような順序で書き込み先ブロックとして割り当てられたかを示すブロック使用履歴を管理することができる。割り当て番号としては、新たなフリーブロックが書き込み先ブロック用に割り当てられる度にインクリメントされるカウンタの値を使用できる。
【０１７８】
古い割り当て番号が付与されたブロックに存在する有効データは、現在までに更新されなかったデータである。したがって、コントローラ４は、例えば、現在の書き込み先ブロックの割り当て番号とＧＣ対象ブロックの割り当て番号との差が閾値以上であるならば、このＧＣ対象ブロック内の有効データをコールドデータであると判定してもよい。
【０１７９】
あるいは、コントローラ４は、ＧＣ回数管理リストを管理しても良い。ＧＣ回数管理リストは、ホスト２によって書き込まれたデータを含むブロック毎にガベージコレクション回数（ＧＣ回数）を保持するためのリストである。ＧＣ回数は、ホスト２によって書き込まれたデータを含む各ブロック内のデータがガベージコレクション（ＧＣ）動作によって当該ブロックにコピーされた回数を示す。ＧＣ回数管理リストは、ＧＣ回数（例えば、ＧＣ回数＝０〜ＧＣ回数＝ｎ）別にブロックそれぞれを管理するための複数のＧＣ回数リストから構成されてもよい。ここで、ｎは、管理すべきＧＣ回数の上限値である。例えば、ＧＣ回数＝０のＧＣ回数リストは、０回のＧＣ回数に関連づけられたブロックそれぞれのブロックＩＤ（例えば物理ブロックアドレス）のリストを保持する。ＧＣ回数＝１のＧＣ回数リストは、１回のＧＣ回数に関連づけられたブロックそれぞれのブロックＩＤ（例えば物理ブロックアドレス）のリストを保持する。
【０１８０】
図２１は、ＳＳＤ３によって実行されるＧＣ回数管理動作とＧＣ動作とを示す。
【０１８１】
ＳＳＤ３のコントローラ４は、あるフリーブロックを、ホスト２からのデータ（ライトデータ）の書き込み用の書き込み先ブロックとして割り当て、ホスト２から受信されるライトデータをこの書き込み先ブロック内の利用可能ページそれぞれに順次書き込む。現在の書き込み先ブロックの全てのページがデータで満たされた時、コントローラ４は、現在の書き込み先ブロックをアクティブブロック（データを含むブロック）として管理する。さらに、コントローラ４は、別のフリーブロックを新たな書き込み先ブロックとして割り当てる。このようにして、ＳＳＤ３においては、ホスト２から受信されるデータ（ライトデータ）は、その到着順に、現在の書き込み先ブロックの最初のページから最後のページに向けて順次書き込まれる。
【０１８２】
図２１のブロックＢ１１〜Ｂ１８は、ホスト２によってデータがライトされた直後のブロック、つまりそのブロック内のデータがガベージコレクション（ＧＣ）動作によって一度もコピーされたことのないブロックである。これらブロックＢ１１〜Ｂ１８に対応するＧＣ回数は０である。
【０１８３】
時間が経過するにつれ、ブロックＢ１１〜Ｂ１８の各々のデータは、その書き換えによって無効化されるかもしれない。これにより、ブロックＢ１１〜Ｂ１８の各々においては、有効データと無効データとが混在される場合がある。
【０１８４】
フリーブロックの数が閾個数以下に低下した場合、コントローラ４は、有効データと無効データとが混在される幾つかのブロックからフリーブロックを作り出すＧＣ動作を開始する。
【０１８５】
コントローラ４は、まず、有効データと無効データとが混在する幾つかのブロックをＧＣ対象ブロックとして選択する。このＧＣ対象ブロックの選択においては、コントローラ４は、同じＧＣ回数に関連づけられたブロック群をＧＣ対象ブロックとして選択する。
【０１８６】
コントローラ４は、選択した幾つかのＧＣ対象ブロック（同じＧＣ回数に関連づけられた幾つかのブロック）内の有効データをコピー先ブロックにコピーし、これらＧＣ対象ブロックのＧＣ回数に１を加えた値を、コピー先ブロックのＧＣ回数として設定する。これにより、ＧＣ対象ブロックのＧＣ回数に１を加えた値がコピー先ブロックに引き継がれるので、コピー先ブロックのＧＣ回数は、そのコピー先ブロック内のデータがＧＣ動作によって過去に何回コピーされたかを正しく表すことができる。
【０１８７】
例えば、同じＧＣ回数に関連づけられた２つのブロックＢ１１，Ｂ１２がＧＣ対象ブロックとして選択され、これらブロックＢ１１，Ｂ１２の有効データがコピー先ブロックＢ２１にコピーされたならば、このコピー先ブロックＢ２１のＧＣ回数は、ブロックＢ１１，Ｂ１２のＧＣ回数（ここでは、０）に１を加えた値（ここでは１）に設定される。
【０１８８】
同様に、同じＧＣ回数に関連づけられた３つのブロックＢ１３、Ｂ１４、Ｂ１５がＧＣ対象ブロックとして選択され、これらブロックＢ１３、Ｂ１４、Ｂ１５の有効データがコピー先ブロックＢ２２にコピーされたならば、このコピー先ブロックＢ２２のＧＣ回数は、ブロックＢ１３、Ｂ１４、Ｂ１５のＧＣ回数（ここでは、０）に１を加えた値（ここでは１）に設定される。
【０１８９】
同様に、同じＧＣ回数に関連づけられた２つのブロックＢ１６、Ｂ１７がＧＣ対象ブロックとして選択され、これらブロックＢ１６、Ｂ１７の有効データがコピー先ブロックＢ２３にコピーされたならば、このコピー先ブロックＢ２３のＧＣ回数は、ブロックＢ１６、Ｂ１７のＧＣ回数（ここでは、０）に１を加えた値（ここでは１）に設定される。
【０１９０】
時間が経過するに連れ、ブロックＢ２１、Ｂ２２、Ｂ２３の各々のデータは、その書き換えによって無効化されるかもしれない。これにより、ブロックＢ２１、Ｂ２２、Ｂ２３の各々においては、有効データと無効データとが混在される場合がある。
【０１９１】
同じＧＣ回数に関連づけられた２つのブロックＢ２１、Ｂ２２がＧＣ対象ブロックとして選択され、これらブロックＢ２１、Ｂ２２の有効データがコピー先ブロックＢ３１にコピーされたならば、このコピー先フリーブロックＢ３１のＧＣ回数は、ブロックＢ２１、Ｂ２２のＧＣ回数（ここでは１）に１を加えた値（ここでは２）に設定される。
【０１９２】
このように、ブロック毎に管理されるＧＣ回数はそのブロック内のデータが過去のＧＣ動作によってコピーされた回数を示す。このＧＣ回数を正しく管理するために、ＧＣ対象ブロックのＧＣ回数に１を加えた値が、コピー先フリーブロック内のデータに引き継がれる。
【０１９３】
図２２は、ＧＣ回数管理リストの例を示す。
【０１９４】
管理すべきＧＣ回数の上限値ｎが例えば１０である場合、ＧＣ回数管理リストは、ＧＣ回数=０〜ＧＣ回数=１０にそれぞれ対応する１１個のＧＣ回数リストから構成されてもよい。
【０１９５】
ＧＣ回数=０のＧＣ回数リストは、ＧＣ回数＝０に関連づけられたブロックそれぞれのブロックＩＤ（例えば物理ブロックアドレス）のリストを示す。ＧＣ回数=１のＧＣ回数リストは、ＧＣ回数＝１に関連づけられたブロックそれぞれのブロックＩＤ（例えば物理ブロックアドレス）のリストを示す。同様にして、ＧＣ回数=１０のＧＣ回数リストは、ＧＣ回数＝１０に関連づけられたブロックそれぞれのブロックＩＤ（例えば物理ブロックアドレス）のリストを示す。各ＧＣ回数リストは、限定されないが、有効データと無効データとが混在するブロックだけを含んでもよい。
【０１９６】
図２３は、ＳＳＤ３に書き込まれる複数種のデータの例を示す。
【０１９７】
図２３では、互いに更新頻度の異なる３種類のデータ（データＡ、データＢ、データＣ）がＳＳＤ３に書き込まれる場合が想定されている。ＳＳＤ３のデータ記憶領域（ＬＢＡ空間）は、ＬＢＡグループＡ、Ｂ、Ｃに対応する３つのスペースを含む。
【０１９８】
ＬＢＡグループＡに書き込まれるデータＡは更新頻度の低いデータであり、且つデータＡの量はデータＡ、Ｂ、Ｃの中で最も多い。つまり、ＬＢＡグループＡは最も大きいＬＢＡ範囲を有する。
【０１９９】
ＬＢＡグループＣに書き込まれるデータＣは、更新頻度の高いデータであり、且つデータＣの量はデータＡ、Ｂ、Ｃの中で最も少ない。つまり、ＬＢＡグループＣは最も小さいＬＢＡ範囲を有する。
【０２００】
ＬＢＡグループＢに書き込まれるデータＢは、データＡとデータＣの中間の更新頻度を有するデータであり、且つデータＢの量はデータＡの量とデータＣの量の中間である。
【０２０１】
ＳＳＤ３の総ユーザ容量に対するデータＡの量の割合は、例えば、５０％であってもよい。ＳＳＤ３の総ユーザ容量に対するデータＢの量の割合は、例えば、３０％であってもよい。ＳＳＤ３の総ユーザ容量に対するデータＣの量の割合は、例えば、２０％であってもよい。
【０２０２】
データＡの更新頻度つまりＬＢＡグループＡへのライトの頻度は、例えば、２０％であってもよい。データＢの更新頻度つまりＬＢＡグループＢへのライトの頻度は、例えば、３０％であってもよい。データＣの更新頻度つまりＬＢＡグループＣへのライトの頻度は、例えば、５０％であってもよい。
【０２０３】
この場合、例えば、ＳＳＤ３がデータＡ、データＢ、データＣで満たされた後は、２回のライトコマンドに１回の割合で、データＣ（ＬＢＡグループＣ）へのライトを要求するライトコマンドがホスト２からＳＳＤ３に発行され、また５回のライトコマンドに１回の割合で、データＡ（ＬＢＡグループＡ）へのライトを要求するライトコマンドがホスト２からＳＳＤ３に発行される。例えば、データＣは、２回のライトコマンドに１回の割合（５０％）という高い頻度で更新される。
【０２０４】
ＳＳＤ３に書き込まれるデータが図２３のようなデータ局所性を有する場合においては、図２３の下部に示すように、各書き込み先ブロックにはデータＡ、データＢ、データＣが混在される。
【０２０５】
一つの書き込み先ブロックにおいて、ブロックの容量に対するデータＣの量の割合は５０％、ブロックの容量に対するデータＢの量の割合は３０％、ブロックの容量に対するデータＡの量の割合は２０％となる。
【０２０６】
上述したように、データＣの量は、データＡ、データＢよりも少なく、且つデータＣの更新頻度は、データＡ、データＢよりも高いので、各ブロック内のデータＣのほとんどは速いタイミングで無効化される確率が高い。一方、データＡおよびデータＢについては、特にデータＡについては、長い間、有効状態に維持される確率が高い。
【０２０７】
データＣの更新（書き換え）よって無効データ量が増えたブロックそれぞれは、いずれＧＣ対象ブロックとなり、これらブロックからコピー先ブロックに有効データがコピーされる。各ＧＣ対象ブロックにおいては、データＣの多くが無効化され且つデータＡ、データＢの多くが有効データに維持されている確率が高い。このため、コピー先ブロックにおいては、ＧＣ対象ブロックに比べてデータＡの量とデータＢの量とが増え、代わりに、ＧＣ対象ブロックに比べてデータＣの量が減る。
【０２０８】
本実施形態では、同じＧＣ回数の幾つかのブロック内の有効データがコピー先フリーブロックにコピーされるので、ＧＣ回数の少ないブロック内の有効データとＧＣ回数の多いブロック内の有効データとがＧＣ動作によって同じコピー先フリーブロックにコピーされることはない。したがって、ＧＣ回数の多いブロックほど、そのブロックの容量に対するデータＡの量の割合を増やすことができ、これによってデータＡ（Ｃｏｌｄデータ）を、データＣ（ホットデータ）から分離することができる。
【０２０９】
図２４は、ＧＣ回数と、各ブロック内のデータＡ，Ｂ，Ｃ間のデータ量の割合との関係の例を示す。
【０２１０】
ＧＣ回数＝０の各ブロックにおいては、ブロックの容量に対するデータＣの量の割合は５０％、ブロックの容量に対するデータＢの量の割合は３０％、ブロックの容量に対するデータＡの量の割合は２０％である。
【０２１１】
ブロックの容量に対するデータＣの量の割合は、１回または２回程度のＧＣ動作によって速く低下される。ＧＣ回数が増えるにつれて、ブロックの容量に対するデータＢの量の割合も徐々に低下される。
【０２１２】
上述したように、本実施形態では、ＧＣ回数の少ないブロック内の有効データとＧＣ回数の多いブロック内の有効データとが同じコピー先フリーブロックにコピーされることはないので、データを含むブロックそれぞれを、（１）ほぼデータＡのみを含むグループ（例えばＧＣ回数７〜１０程度）、（２）データＡとデータＢとを含み、且つデータＣをほとんど含まないグループ（例えばＧＣ回数３〜６程度）、（３）データＡとデータＢとデータＣを含むグループ（例えばＧＣ回数０〜２程度）に分類できる。
【０２１３】
このように、ホスト２によって書き込まれたデータを含むブロック毎に、当該ブロック内のデータがガベージコレクション（ＧＣ）動作によってコピーされた回数を示すＧＣ回数が管理され、ＧＣ動作では、同じＧＣ回数に関連づけられた複数のブロックがＧＣ対象ブロックとして選択される。そして、これら第１ブロック内の有効データがコピー先ブロックにコピーされ、これらＧＣ対象ブロックのＧＣ回数に１を加えた値が、コピー先ブロックのＧＣ回数として設定される。したがって、更新頻度の高いデータと更新頻度の低いデータとがＧＣ動作によって一緒に同じブロックにコピーされてしまうことを防止できるようになるので、ＧＣ回数の多いブロックにコールドデータを集めることができる。
【０２１４】
図２５は、ＧＣ回数を利用してホット／コールドを判定する処理を含むＧＣ処理の手順を示す。
【０２１５】
ＳＳＤ３のコントローラ４は、ＧＣ開始条件が満たされたか否かを判定する（ステップＳ１０１）。ＧＣ開始条件は、ＧＣ動作を開始するための条件である。例えば、残りフリーブロックの数が閾値以下になった場合、あるいはＧＣ開始を要求するコマンドがホスト２から受信された場合に、コントローラ４は、ＧＣ開始条件が満たされたと判定する。
【０２１６】
ＧＣ開始条件が満たされたならば（ステップＳ１０１のＹＥＳ）、コントローラ４は、同じＧＣ回数を有するブロック群をＧＣ対象ブロックとして選択する（ステップＳ１０２）。
【０２１７】
コントローラ４は、あるＧＣ対象ブロック内の有効データを選択し（ステップＳ１０３）、この有効データを読み出し、この有効データが圧縮データであるか否かを判定する（ステップＳ１０４）。
【０２１８】
読み出された有効データが圧縮データであるならば（ステップＳ１０４のＹＥＳ）、コントローラ４は、ＧＣ対象ブロックのＧＣ回数が閾値以上であるか否かを判定する（ステップＳ１０５）。ＧＣ対象ブロックのＧＣ回数が閾値以上であるならば（ステップＳ１０５のＹＥＳ）、コントローラ４は、読み出された有効データ（圧縮データ）がコールドデータであると判定することができる。
【０２１９】
したがって、ＧＣ対象ブロックのＧＣ回数が閾値以上であるならば（ステップＳ１０５のＹＥＳ）、コントローラ４は、読み出された有効データ（圧縮データ）を伸張し（ステップＳ１０６）、伸張されたデータを、読み出された圧縮データに適用されていた圧縮方法よりも高圧縮率の別の圧縮方法を使用して圧縮（再圧縮）して、圧縮データよりもデータ長の短い圧縮データ（再圧縮データ）を生成する（ステップＳ１０７）。そして、コントローラ４は、この再圧縮データをコピー先ブロックにコピーする（圧縮書き込む）（ステップＳ１０８）。ステップＳ１０８では、読み出された圧縮データの圧縮前のデータ長に対応するＬＢＡ範囲は、このＬＢＡ範囲の先頭ＬＢＡから開始され且つ再圧縮データのデータ長に対応する範囲を有するＬＢＡ範囲＃Ａと、圧縮前のデータ長と再圧縮データのデータ長との間の差分に対応するＬＢＡ範囲＃Ｂとに論理的に分割される。そして、ＬＢＡ範囲＃Ａにのみコピー先ブロックの物理アドレスそれぞれがマッピングされ、ＬＢＡ範囲＃Ｂはアンマップ状態に設定される。
【０２２０】
この後、コントローラ４は、ＧＣ対象ブロックのＧＣ回数をコピー先ブロックのＧＣ回数として設定する（ステップＳ１０９）。
【０２２１】
読み出された有効データが圧縮データでないならば（ステップＳ１０４のＮＯ）、コントローラ４は、ステップＳ１０５〜Ｓ１０７の処理を実行せずに、読み出された有効データをコピー先ブロックにコピーする（ステップＳ１０８）。そして、コントローラ４は、ステップＳ１０９に進む。
【０２２２】
読み出された有効データが圧縮データであるが、ＧＣ対象ブロックのＧＣ回数が閾値以上でないならば（ステップＳ１０５のＮＯ）、コントローラ４は、ステップＳ１０６〜Ｓ１０７の処理を実行せずに、読み出された有効データ（圧縮データ）をコピー先ブロックにコピーする（ステップＳ１０８）。そして、コントローラ４は、ステップＳ１０９に進む。
【０２２３】
図２６は、ホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示す。
【０２２４】
この情報処理装置は、サーバ（例えばストレージサーバ）のようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０２２５】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。プロセッサ１０１によって実行されるプログラムは、上述のアプリケーションソフトウェアレイヤ４１、ＯＳ４２およびファイルシステム４３を含む。また、プロセッサ１０１によって実行されるプログラムは、Ｉ／Ｏ管理モジュール４４を含んでいてもよい。このＩ／Ｏ管理モジュール４４は、上述の最小データ長の単位で、またはこの最小データ長の整数倍のデータ長単位で、ＳＳＤ３にデータＩ／Ｏ要求（書き込み要求、読み出し要求）を送出する。Ｉ／Ｏ管理モジュール４４は、アプリケーションソフトウェアレイヤ４１に含まれていても良いし、あるいはＯＳ４２またはファイルシステム４３に含まれていてもよい。
【０２２６】
Ｉ／Ｏ管理モジュール４４は、ＳＳＤ３のＬＢＡ空間を使用して、図５で説明したデータ管理を実行する。上述したように、ＳＳＤ３のコントローラ４は、ＮＡＮＤフラッシュメモリ５の容量よりも大きな容量をＳＳＤ３の容量としてホスト２に報告してもよい。Ｉ／Ｏ管理モジュール４４は、ＳＳＤ３から報告された容量に対応するＬＢＡ空間を使用して、図５で説明したデータ管理を実行することができる。
【０２２７】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０２２８】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０２２９】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。本実施形態では、複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続される。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０２３０】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。ＥＣ１０８はワンチップマイクロコントローラのような処理回路として実現されている。ＥＣ１０８は、キーボード（ＫＢ）などの入力デバイスを制御するキーボードコントローラを内蔵していてもよい。
【０２３１】
図２７は、複数のＳＳＤ３とホスト２とを含む情報処理装置の構成例を示す。
【０２３２】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されても良い。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０２３３】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０２３４】
以上説明したように、本実施形態によれば、管理サイズよりも大きなデータ長を有する書き込みデータがＳＳＤ３のコントローラ４によって圧縮され、この圧縮データがＮＡＮＤフラッシュメモリ５の記憶領域に書き込まれる。そして、書き込みデータのデータ長と圧縮データのデータ長との差分がコントローラ４によって識別され、この差分に基づいて、ＬＵＴ３２が自動的に更新されて、書き込まれるべき第１論理アドレス範囲（第１ＬＢＡ範囲）の先頭論理アドレス（先頭ＬＢＡ）から始まり圧縮データのデータ長に対応する第１範囲（ＬＢＡ範囲＃Ａ）内の論理アドレス（ＬＢＡ）それぞれに、圧縮データが書き込まれた記憶領域の物理アドレスそれぞれがマッピングされ、さらに、第１範囲（ＬＢＡ範囲＃Ａ）に後続し、書き込みデータ（圧縮前のデータ）のデータ長と圧縮データのデータ長との差分に対応する第２範囲（ＬＢＡ範囲＃Ｂ）内の論理アドレス（ＬＢＡ）の各々が、物理アドレスがマッピングされていない状態に設定される。したがって、書き込みデータのデータ長と圧縮データのデータ長との間の差分領域をトリム／アンマップされたＬＢＡ範囲であるかのように扱うことができる。よって、書き込みデータが圧縮によってどのようなデータ長に変わったとしても、ホスト２は、圧縮前のデータのデータ長に対応するＬＢＡ範囲を使用して、このデータのリード及びライト（書き替え）を実行することができる。この結果、図２で説明したようなホスト側でのガベージコレクションが不要となるので、ＳＳＤ３へ書き込まれるデータ量も減少され、ＳＳＤ３のライトアンプリフィケーションを低下させることが可能となる。
【０２３５】
また、本実施形態では、不揮発性メモリとしてＮＡＮＤメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０２３６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２３７】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤメモリ、２１…ライト動作制御部、２２…リード動作制御部２２…圧縮エンジン、２４…伸張エンジン、２５…ガベージコレクション動作制御部、２６…ネームスペース制御部。
【図１】
2018049523.tif 000003
【図２】
2018049523.tif 000004
【図３】
2018049523.tif 000005
【図４】
2018049523.tif 000006
【図５】
2018049523.tif 000007
【図６】
2018049523.tif 000008
【図７】
2018049523.tif 000009
【図８】
2018049523.tif 000010
【図９】
2018049523.tif 000011
【図１０】
2018049523.tif 000012
【図１１】
2018049523.tif 000013
【図１２】
2018049523.tif 000014
【図１３】
2018049523.tif 000015
【図１４】
2018049523.tif 000016
【図１５】
2018049523.tif 000017
【図１６】
2018049523.tif 000018
【図１７】
2018049523.tif 000019
【図１８】
2018049523.tif 000020
【図１９】
2018049523.tif 000021
【図２０】
2018049523.tif 000022
【図２１】
2018049523.tif 000023
【図２２】
2018049523.tif 000024
【図２３】
2018049523.tif 000025
【図２４】
2018049523.tif 000026
【図２５】
2018049523.tif 000027
【図２６】
2018049523.tif 000028
【図２７】
2018049523.tif 000029