(57)【要約】  論物管理情報のライトによる空きブロックの枯渇を防ぐことができる。  プロセッサは、割当ユーザブロックに格納されているユーザデータを移動させることで、割当ユーザブロックのうちの空きブロックである空きユーザブロックを生成する空きユーザブロック生成処理と、割当メタブロックに格納されているメタデータを移動させることで、割当メタブロックのうちの空きブロックである空きメタブロックを生成する空きメタブロック生成処理とを実行可能であり、プロセッサは、空きユーザブロック生成処理により消費される空きメタブロックの数である消費空きメタブロック数を算出し、プロセッサは、消費空きメタブロック数に基づいて空きメタブロック生成処理を行う。
2017126096.tif 000002
【特許請求の範囲】
【請求項１】
主メモリと、
不揮発性半導体メモリと、
前記主メモリ及び前記不揮発性半導体メモリに接続されるプロセッサと、
を備え、
前記プロセッサは、上位装置へ提供する論理アドレスと前記不揮発性半導体メモリ内のユーザデータの物理アドレスとの関係を示すメタデータの、少なくとも一部を前記不揮発性半導体メモリに格納し、前記メタデータの一部を前記主メモリに格納し、
前記プロセッサは、前記不揮発性半導体メモリ内のブロックを、前記ユーザデータを格納するための割当ユーザブロックと、前記メタデータを格納するための割当メタブロックとへ割り当て、
前記プロセッサは、前記割当ユーザブロックに格納されているユーザデータを移動させることで、前記割当ユーザブロックのうちの空きブロックである空きユーザブロックを生成する空きユーザブロック生成処理と、前記割当メタブロックに格納されているメタデータを移動させることで、前記割当メタブロックのうちの空きブロックである空きメタブロックを生成する空きメタブロック生成処理とを実行可能であり、
前記プロセッサは、前記空きユーザブロック生成処理により消費される空きメタブロックの数である消費空きメタブロック数を算出し、
前記プロセッサは、前記消費空きメタブロック数に基づいて前記空きメタブロック生成処理を行う、
記憶装置。
【請求項２】
前記プロセッサは、前記上位装置からライトデータを受信し、前記ライトデータのデータ量を削減することでユーザデータを生成し、前記生成されたユーザデータを前記割当ユーザブロックへ書き込む、
請求項１に記載の記憶装置。
【請求項３】
前記プロセッサは、前記空きユーザブロックが不足するか否かを判定し、
前記空きユーザブロックが不足すると判定された場合、前記プロセッサは、前記空きユーザブロック生成処理により移動するユーザデータの量である移動ユーザデータ量を算出し、
前記プロセッサは、前記移動ユーザデータ量に基づいて前記消費空きメタブロック数を算出し、
前記プロセッサは、前記消費空きメタブロック数に基づいて前記空きメタブロックが不足するか否かを判定し、
前記空きメタブロックが不足すると判定された場合、前記プロセッサは、前記空きメタブロック生成処理を行い、前記空きユーザブロック生成処理を行う、
請求項２に記載の記憶装置。
【請求項４】
前記プロセッサは、前記不揮発性半導体メモリへのライトを計測することで計測値を取得し、
前記プロセッサは、前記計測値に基づいて、前記割当ユーザブロックの数及び前記割当メタブロックの数を変更する、割当ブロック変更処理を行う、
請求項３に記載の記憶装置。
【請求項５】
前記割当ブロック変更処理は、前記割当ユーザブロックの数及び前記割当メタブロックの数を示す割当情報に対し、前記計測値に基づいて、前記不揮発性半導体メモリへのライト量を最小化する前記割当情報である最適割当情報を決定し、前記最適割当情報に基づいて前記割当情報を変更する、
請求項４に記載の記憶装置。
【請求項６】
前記割当ブロック変更処理は、前記割当メタブロックの数を増加させる場合、空きユーザブロックを空きメタブロックへ変更し、前記割当メタブロックの数を減少させる場合、空きメタブロックを空きユーザブロックへ変更する、
請求項５に記載の記憶装置。
【請求項７】
前記計測値は、前記不揮発性半導体メモリに格納されているユーザデータのサイズと、前記不揮発性半導体メモリに格納されているメタデータのサイズと、前記不揮発性半導体メモリへのユーザデータのライト量と、前記不揮発性半導体メモリへのメタデータのライト量と、及びユーザデータのＩ／Ｏパタンとの何れかを含み、
前記割当ブロック変更処理は、予め設定された前記計測値と前記最適割当情報の関係を用いて、前記計測値から前記最適割当情報を決定する、
請求項６に記載の記憶装置。
【請求項８】
前記プロセッサは、前記計測値を繰り返し取得し、前記計測値の変化が予め設定された変化条件を満たすか否かを判定し、
前記計測値の変化が前記変化条件を満たすと判定された場合、前記プロセッサは、前記割当ブロック変更処理を行う、
請求項７に記載の記憶装置。
【請求項９】
前記プロセッサは、前記論理アドレスの空間を複数の部分に分割し、前記メタデータを前記複数の部分に夫々対応する複数のサブセットに分割し、
前記プロセッサは、前記主メモリ及び前記不揮発性半導体メモリのうち、各サブセットが格納されている位置を示すサブセット位置情報を、前記主メモリに格納し、
前記プロセッサは、特定ユーザデータにアクセスする場合、前記サブセット位置情報に基づいて、前記特定ユーザデータに対応するサブセットの位置を取得する、サブセット位置取得処理を行う、
請求項８に記載の記憶装置。
【請求項１０】
前記プロセッサは、前記不揮発性半導体メモリ内の各ブロックの状態を示すブロック管理情報を、前記主メモリへ格納し、
前記プロセッサは、前記上位装置から第一論理アドレスへの前記ライトデータを受信した場合、前記サブセット位置取得処理を行うことで、前記第一論理アドレスに対応するサブセットの位置を取得し、前記ブロック管理情報に基づいて、前記ライトデータに基づくユーザデータの書き先の物理アドレスを選択し、前記生成されたユーザデータを前記書き先へ書き込み、前記第一論理アドレスと前記書き先の物理アドレスの関係を、前記第一論理アドレスに対応するサブセットへ反映する、
請求項９に記載の記憶装置。
【請求項１１】
前記プロセッサは、前記ライトデータを圧縮することで、前記ライトデータに基づくユーザデータを生成する、
請求項１０に記載の記憶装置。
【請求項１２】
前記プロセッサは、前記上位装置から第二論理アドレスのアンマップの要求を受信した場合、前記サブセット位置取得処理を行うことで、前記第二論理アドレスに対応するサブセットの位置を取得し、前記第二論理アドレスに対応するサブセットに基づいて、前記第二論理アドレスに対する物理アドレスの解除を、前記第二論理アドレスに対応するサブセットへ反映する、
請求項１１に記載の記憶装置。
【請求項１３】
主メモリと不揮発性半導体メモリとを含む記憶装置の制御方法であって、
上位装置へ提供する論理アドレスと前記不揮発性半導体メモリ内のユーザデータの物理アドレスとの関係を示すメタデータの、少なくとも一部を前記不揮発性半導体メモリに格納し、前記メタデータの一部を前記主メモリに格納し、
前記不揮発性半導体メモリ内のブロックを、前記ユーザデータを格納するための割当ユーザブロックと、前記メタデータを格納するための割当メタブロックとへ割り当て、
前記割当ユーザブロックに格納されているユーザデータを移動させることで、前記割当ユーザブロックのうちの空きブロックである空きユーザブロックを生成する空きユーザブロック生成処理と、前記割当メタブロックに格納されているメタデータを移動させることで、前記割当メタブロックのうちの空きブロックである空きメタブロックを生成する空きメタブロック生成処理とを実行可能であり、前記空きユーザブロック生成処理により消費される空きメタブロックの数である消費空きメタブロック数を算出し、
前記消費空きメタブロック数に基づいて前記空きメタブロック生成処理を行う、
制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置に関する。
【背景技術】
【０００２】
ストレージ装置や計算機では、物理記憶媒体として一般的にＨＤＤ（Hard  Disk  Drive）が用いられているが、近年、ＨＤＤに変わる新しい物理記憶媒体として、Flash  Memory（ＦＭ）を搭載する物理記憶媒体（例えば、ＳＳＤ（Solid  State  Drive））が普及してきている。ＳＳＤは、主に一つ以上のＦＭチップとＦＭチップを制御するコントローラを含み、ＨＤＤに比べＩ／Ｏ処理が非常に高速という利点がある。しかし、この高速性を実現するには、ＦＭの特性にあわせた制御技術が必要である。【０００３】
ＦＭ（典型的には、ＮＡＮＤ型）は、ブロックと呼ばれる単位でデータを消去（ブロック消去）し、ページと呼ばれる単位でデータをリード・ライトする。なお、ブロックは、所定数のページの集合である。また、ブロック消去に要する時間は、リード・ライトに比べ、一桁長い。以降、特に断りがない場合、単にブロック／ページと記述した際は、ＦＭのものを指す。【０００４】
ＦＭの特性上、データを格納しているページへデータを上書きすることはできない。このため、当該ページのデータを書き換えるには、ブロック消去を実施した後、データを書き込む必要がある。よって、ブロック消去を実施する場合、当該ブロックの有効なデータを他のブロックに複写した後、実施する必要があり、ブロック消去後の未使用領域へのライトに比べてデータ書き換え時間を要するため、この時間を短縮、または上位装置に応答時間の長大化を見せないようにする必要がある。【０００５】
上記で述べたデータ書き換え時間の短縮を実現するため、ＦＭにおけるデータ書き換えは、未使用領域へデータを追記する方式を用いる。このため、ＳＳＤは、上位装置へ提供する論理アドレス空間と、各ＦＭのページに対応した物理アドレス空間とを有する。論理アドレス空間と物理アドレス空間は、各アドレスの対応情報（論物管理情報）を用いてマッピングされる。また、論物管理情報を参照し、論理アドレスから対応する物理アドレスを取得する処理を、論理アドレス−物理アドレス変換（論物変換）と呼ぶ。なお、本処理は、ＳＳＤに搭載されたコントローラにより実現される。【０００６】
ここで、ＳＳＤにおけるＦＭへのリード、およびライトの動作を簡単に述べる。リードでは、ＳＳＤは、要求データの格納された物理アドレスを特定するため、論理アドレス−物理アドレス管理情報（論物管理情報）を参照し、論物変換を実施する。その後、ＳＳＤは、論物変換により取得した物理アドレスを基に、ＦＭから要求データを取得する。また、ライトでは、ＳＳＤは、ライトデータをＦＭのブロック消去後の未使用領域へ書き込む。その後、ＳＳＤは、論物管理情報において、要求された論理アドレスに対応付けられた物理アドレスを、新規に書き込んだデータの物理アドレスへ更新（論物更新）する。このとき、ライト可能なブロック消去済みのブロック（以降、空きブロックと呼ぶ）が無い場合、ＳＳＤはライトを実行できないため、空きブロックを確保する処理を実施する必要がある。【０００７】
空きブロックの確保には、書き込み済みのブロックから有効なデータのみを他のブロックへ移動（リライト）し、全データが無効な消去可能ブロック（完全無効ブロック）を作成する、リクラメーション（または、ガベージコレクション）（以降、ＲＣＭと略す）と呼ばれる処理を実施する。なお、本処理の実行自体にも空きブロックが必要となるため、空きブロックが１つもない状態に陥ると、ＳＳＤはＩ／Ｏを継続することができなくなる。このＦＭ資源のＤｅａｄ  Ｌｏｃｋを起こすことを、空きブロック枯渇と呼ぶ。【０００８】
よって、ＳＳＤは、ＲＣＭに必要な空きブロック数を考慮し、必要な空きブロック数を維持できるようにＲＣＭにより移動するデータ量（以降、ＲＣＭ量）を調整することで、継続したＩ／Ｏを可能としている。また、ＳＳＤにおけるＦＭへのリード、ライト、およびＲＣＭ動作では、論物管理情報へのアクセスを伴う。このため、ＳＳＤでは、ＦＭへ格納されている全ての論物管理情報を高速なＤＲＡＭ（Dynamic  Random  Access  Memory）等の主記憶へキャッシュすることで、論物管理情報へのアクセス処理オーバヘッドを小さくしている。【０００９】
上で述べたような技術により、ＳＳＤはＨＤＤよりも性能面で優れている。しかし、単位容量当たりの価格（ビットコスト）では、ＨＤＤよりも高価である。そのため、特許文献１のように、データ圧縮等のデータ削減機能を用いることで、ビットコストの低減を図る技術が知られている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許第８８６２８０５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ＳＳＤでは、論物管理情報のサイズは論理アドレス空間の大きさによって決まる。このため、データ圧縮等のデータ削減機能を搭載したＳＳＤでは、データ削減機能を持たないＳＳＤに比べて論理アドレス空間が大きくなり、数倍から数十倍の論物管理情報を有することになる。このとき、ＳＳＤは、全ての論物管理情報を主記憶へキャッシュできない。また、主記憶に収まらない論物管理情報を、ＦＭへ格納すると、論物管理情報のＦＭへのリード・ライトが発生する。これにより、空きブロックが枯渇する場合がある。
【課題を解決するための手段】
【００１２】
上記課題を解決するために、本発明の一態様である記憶装置は、主メモリと、不揮発性半導体メモリと、前記主メモリ及び前記不揮発性半導体メモリに接続されるプロセッサと、を備える。前記プロセッサは、上位装置へ提供する論理アドレスと前記不揮発性半導体メモリ内のユーザデータの物理アドレスとの関係を示すメタデータの、少なくとも一部を前記不揮発性半導体メモリに格納し、前記メタデータの一部を前記主メモリに格納し、前記プロセッサは、前記不揮発性半導体メモリ内のブロックを、前記ユーザデータを格納するための割当ユーザブロックと、前記メタデータを格納するための割当メタブロックとへ割り当て、前記プロセッサは、前記割当ユーザブロックに格納されているユーザデータを移動させることで、前記割当ユーザブロックのうちの空きブロックである空きユーザブロックを生成する空きユーザブロック生成処理と、前記割当メタブロックに格納されているメタデータを移動させることで、前記割当メタブロックのうちの空きブロックである空きメタブロックを生成する空きメタブロック生成処理とを実行可能であり、前記プロセッサは、前記空きユーザブロック生成処理により消費される空きメタブロックの数である消費空きメタブロック数を算出し、前記プロセッサは、前記消費空きメタブロック数に基づいて前記空きメタブロック生成処理を行う。
【発明の効果】
【００１３】
論物管理情報のライトによる空きブロックの枯渇を防ぐことができる。
【図面の簡単な説明】
【００１４】
【図１】ＳＳＤ０１００の構成例を示す図である。
【図２】主記憶０１０４の構成例を示す図である。
【図３】論理アドレス空間０３００と物理アドレス空間０３０１の対応関係を示す図である。
【図４】Ｌ２ＰＴＢＬ０２０９の構成例を示す図である。
【図５】Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０の構成例を示す図である。
【図６】第１状態におけるブロック制御０６００の概要を示す。
【図７】第２状態におけるブロック制御０６００の概要を示す。
【図８】ブロック管理ＴＢＬ０２１１の構成例を示す図である。
【図９】装置情報ＴＢＬ０２１２の構成例を示す図である。
【図１０】統計情報ＴＢＬ０２１３の構成例を示す図である。
【図１１】ユーザデータライト処理の一例を示すフローチャートである。
【図１２】アンマップ処理の一例を示すフローチャートである。
【図１３】Ｌ２ＰＴＢＬアドレス取得処理の一例を示すフローチャートである。
【図１４】ブロック制御処理の一例を示すフローチャートである。
【図１５】ＲＣＭ制御処理の一例を示すフローチャートである。
【図１６】ブロック割当制御処理の一例を示すフローチャートである。
【図１７】割当メタブロック増加処理の一例を示すフローチャートである。
【図１８】割当メタブロック減少処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を用いて実施例を説明する。なお、本実施例では、データ圧縮機能を有したＳＳＤを前提としているが、データ圧縮機能に限らず、主記憶に収まりきらないメタデータの管理を必要とするＳＳＤに適用できる。また、実施例は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。
【００１６】
以下の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていても良い。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。
【００１７】
また、以下の説明では、要素（例えばＬ２ＰＴＢＬ）の識別情報として番号が使用されるが、他種の識別情報（例えば名前、識別子）が使用されて良い。
【００１８】
また、以下、「プログラム」を主語として処理を説明することがある場合、プログラムは、コントローラ（ストレージコントローラ、およびＳＳＤコントローラ）に含まれるプロセッサ（例えばＣＰＵ（Central  Processing  Unit））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又は通信インタフェース装置（例えば通信ポート）を用いながら行うため、処理の主語がコントローラ或いはプロセッサとされても良い。また、コントローラは、処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースからインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ、又は、コンピュータ読取可能な記憶メディアであっても良い。
【００１９】
また、以下の説明では、期間或いは時間の単位は、限定されない。例えば、期間或いは時間の単位は、年、月、日、時、分、秒のうちのいずれか１つ或いはいずれか２つ以上の組合せで表現されて良い。
【００２０】
また、以下の説明では、ＳＳＤに含まれる不揮発半導体記憶媒体は、フラッシュメモリ（ＦＭ）であるとする。そのフラッシュメモリは、ブロック単位で消去が行われ、ページ単位でリード／ライトが行われる種類のフラッシュメモリ、典型的にはＮＡＮＤ型のフラッシュメモリであるとする。しかし、フラッシュメモリは、ＮＡＮＤ型に代えて他種のフラッシュメモリ（例えばＮＯＲ型）でも良い。また、フラッシュメモリに代えて、他種の不揮発半導体記憶媒体、例えば相変化メモリが採用されても良い。
【００２１】
図１は、ＳＳＤ０１００の構成例を示す図である。
【００２２】
ＳＳＤ０１００は、ＳＳＤコントローラ０１０１と、１つ以上のＦＭ０１０２とを有する。ＳＳＤコントローラ０１０１は、ＳＳＤ０１００の動作を制御する。ＳＳＤコントローラ０１０１は、上位装置０１０８との接続を担うストレージＩ／Ｆ０１０３、主記憶０１０４、ＦＭを制御するＦＭコントローラ０１０５、およびＣＰＵ０１０６を含み、内部ネットワーク０１０７を介してそれぞれ接続されている。
【００２３】
上位装置０１０８は、ＳＳＤ０１００を利用する装置の一例であり、例えばアプリケーションサーバやストレージ装置やストレージコントローラである。
【００２４】
ＣＰＵ０１０６は、ＳＳＤコントローラ０１０１の全体を制御するプロセッサであり、主記憶０１０４に格納されたマイクロプログラムに基づき動作する。ＦＭコントローラ０１０５は、ＣＰＵ０１０６によって制御され、ＦＭ０１０２に対するリード・ライト・消去を実施する。内部ネットワーク０１０７は、スイッチを含んでも良い。また、スイッチ機能を有したＡＳＩＣｓ（Application  Specific  Integrated  Circuit）で代用しても良い。
【００２５】
本実施例において、ＳＳＤ０１００は、１つ以上のＦＭとそれらを制御するコントローラを備える記憶媒体であり、外観形状等がフォームファクタに限定されるものではない。
【００２６】
図２は、主記憶０１０４の構成例を示す図である。
【００２７】
主記憶０１０４は、プログラム領域０２００、ＴＢＬ領域０２０１、およびデータバッファ領域０２０２を有する。プログラム領域０２００とＴＢＬ領域０２０１は、ＳＳＤ０１００を制御するためのプログラムや各種テーブルを格納する。データバッファ領域０２０２は、上位装置０１０８との間で送受信されるユーザデータ０２１４を、一時的に格納する。
【００２８】
プログラム領域０２００は、Ｉ／Ｏプログラム０２０３、アンマッププログラム０２０４、論物変換プログラム０２０５、データ圧縮・伸張プログラム０２０６、Ｌ２Ｐ（Logical  to  Physical、論物変換）ＴＢＬ（ＴＢＬ：テーブル）０２０７、およびブロック制御プログラム０２０８を格納する。
【００２９】
Ｉ／Ｏプログラム０２０３は、上位装置０１０８からのリードまたはライト要求を処理するプログラムである。アンマッププログラム０２０４は、上位装置０１０８からのアンマップ（任意のデータの無効化）要求を処理するプログラムである。論物変換プログラム０２０５は、論物変換するプログラムである。データ圧縮・伸張プログラム０２０６は、Ｉ／Ｏプログラム０２０３の処理過程において、ユーザデータの圧縮と伸張を処理するものである。Ｌ２ＰＴＢＬ制御プログラム０２０７は、メタデータであるＬ２ＰＴＢＬ０２０９の格納場所（主記憶０１０４、またはＦＭ０１０２）を制御するものである。ブロック制御プログラム０２０８は、ライト先ブロックの管理、空きブロック数の管理、ＲＣＭ量の管理、およびユーザデータとメタデータに割り当てるブロック数の管理など、ＦＭ資源を制御するものである。
【００３０】
Ｌ２ＰＴＢＬ０２０９は、論理アドレスと物理アドレスのマッピングに関する情報を有する。Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０は、Ｌ２ＰＴＢＬ０２０９が主記憶０１０４、またはＦＭ０１０２のどちらに格納されているかを管理するための情報を有する。ブロック管理ＴＢＬ０２１１は、ブロックの状態に関する情報を有する。装置情報ＴＢＬ０２１２は、装置の各資源に関する情報を有する。統計情報ＴＢＬ０２１３は、装置のある時点での状態の履歴を有する。
【００３１】
論物管理情報について説明する。
【００３２】
ＳＳＤ０１００は、ライトデータを圧縮してＦＭ０１０２へ格納することで、物理アドレス空間より大きい論理アドレス空間を上位装置０１０８へ提供する。これにより、論物管理情報のサイズは、主記憶０１０４に格納しきれないほど大きくなる。
【００３３】
ＳＳＤ０１００は、このような論物管理情報を管理するために、ＦＭ０１０２から論物管理情報を適宜、主記憶０１０４へ読み出したり書き戻したりする方式（階層論物方式）を用いる。圧縮機能を持たないＳＳＤでは、論物管理情報は、全て主記憶に格納することができるため、リード・ライト処理に伴う論物管理情報へのアクセス時にＦＭへのリード・ライトは発生しない。一方、階層論物方式では、論物変換及び論物管理情報の更新時に当該の論物管理情報が主記憶にない（論物ミス）の場合、主記憶上の論物管理情報をＦＭへ退避（ライト）し、その後にＦＭから必要な論物管理情報を主記憶へ取得（リード）する必要がある。よって、論物ミス多発時は、ＦＭに対し、メタデータである論物管理情報のリード・ライトが多発する。
【００３４】
一般的に、ユーザデータの管理単位（論物変換の単位）である論理ページのサイズは数ｋＢｙｔｅであるのに対し、論物管理情報のサイズは１論理ページあたり数Ｂｙｔｅであり、相対的に小さいといえる。このため、ユーザデータのライトに対し、論物ミスに伴うメタデータのライト量は小さいように思われる。しかし、階層論物方式では、メタデータが主記憶とＦＭのどちらに存在するかを管理する必要があるうえ、ＦＭはページ単位でのリード・ライトが必要となるため、複数論理ページ単位（例えば、論理ページサイズと同じ数ｋＢｙｔｅ）でメタデータを管理することになる。よって、一度の論物ミスに対し、数ｋＢｙｔｅのメタデータのライトが発生する。さらに、圧縮機能を有するＳＳＤでは、ユーザデータは圧縮してＦＭへライトされるため、ユーザデータのデータ圧縮率が良くなるほど（圧縮前のデータサイズに対して圧縮後のデータサイズが小さくなるほど）、ＳＳＤに格納できるユーザデータ量が増え、管理する論理ページ数が増加する。これによりメタデータ量が増加し、主記憶上に格納できるメタデータの割合が減る。つまり、データ圧縮率が良いほど、ユーザデータのＦＭへのライト量が減るうえ、論物ミスの発生する確率が上がるため、ＦＭへの総ライト量において、メタデータのライト量が支配的になる。
【００３５】
また、ＦＭへのメタデータのライトについても、ユーザデータと同様に空きブロックを消費する。しかし、従来のＳＳＤにおけるＲＣＭをはじめとした、Ｉ／Ｏ継続に必要な空きブロック数を維持する制御（以降、ブロック制御と呼ぶ）では、このメタデータライトを考慮できていないため、データ圧縮機能を有したＳＳＤにおいては、空きブロックが枯渇する場合がある。
【００３６】
例えば、ＲＣＭを実施しようとしたとき、効率良く空きブロックを生成するには、有効データを移動する量を少なくする、つまり、ＲＣＭは、有効データの割合が低い（無効データの割合が高い）ブロックをＲＣＭ対象として選択し、そのブロック内の有効データを移動させる。しかし、このＲＣＭ対象に選択したブロックにユーザデータが格納されていた場合、ユーザデータの移動には、論物管理情報の参照と更新が必要である。よって、ＲＣＭ時にも論物ミスが発生し、これに伴うＦＭへのメタデータのライトによっても、空きブロックが消費されてしまう。さらに、この空きブロック消費を回復させるためにＲＣＭ量を増加させたとしても、従来のブロック制御では、ユーザデータとメタデータを区別できないので、同様の理由でさらに空きブロックを消費してしまう。これが連鎖し、ＲＣＭによる空きブロック生成速度が空きブロックの消費速度を下回り、空きブロックが枯渇する場合がある。
【００３７】
このような空きブロックの枯渇を防ぐための、論物管理情報の管理方法について説明する。
【００３８】
図３は、論理アドレス空間０３００と物理アドレス空間０３０１の対応関係を示す図である。
【００３９】
論理アドレス空間０３００は、上位装置０１０８に提供される空間であり、１つ以上の論理ページ０３０２に対応している。物理アドレス空間０３０１は、ＦＭ０１０２に対応づけられた空間であり、１つ以上のページ０３０４に対応している。ＦＭ０１０２は１つ以上のブロック０３０３を有する。ブロック０３０３は、ＦＭ０１０２におけるデータの消去単位であり、１つ以上のページ０３０４を有する。ページ０３０４は、ＦＭ０１０２におけるデータのリード・ライト単位である。
【００４０】
論理アドレス空間０３００と物理アドレス空間０３０１は、Ｌ２ＰＴＢＬ０２０９によりマッピングされている。Ｌ２ＰＴＢＬ０２０９は、１つ以上のＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５を有する。Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０は、主記憶０１０４に格納されており、各Ｌ２ＰＴＢＬＳｕｂｓｅｔ０３０５（メタデータ）が主記憶０１０４とＦＭ０１０２のどちらに格納されているか、加えて主記憶０１０４とＦＭ０１０２内のどのアドレスに格納されているかの情報を有している。
【００４１】
ＣＰＵ０１０６は、論理アドレス空間全体のＬ２ＰＴＢＬを、所定数のエントリを有するＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５に分割して管理する。Ｌ２ＰＴＢＬＳｕｂｓｅｔ０３０５のデータサイズは例えば、ＦＭ０１０２のアクセス単位であるページサイズ以下である。全てのユーザデータの論理アドレスと物理アドレスのマッピングは、複数のＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５により表される。ＣＰＵ０１０６は、複数のＬ２ＴＢＬＳｕｂｓｅｔ０３０５のうち、一部を主記憶０１０４に格納し、残りをＦＭ０１０２に格納する。なお、ＣＰＵ０１０６は、全てのＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５をＦＭ０１０２に格納し、その一部を主記憶０１０４に格納してもよい。
【００４２】
この管理方法によれば、主記憶０１０４に収まらないＬ２ＰＴＢＬをＦＭ０１０２へ格納できる。更に、Ｌ２ＰＴＢＬの一部を主記憶０１０４に格納することで論物変換を高速化できる。
【００４３】
図４は、Ｌ２ＰＴＢＬ０２０９の構成例を示す図である。
【００４４】
Ｌ２ＰＴＢＬ０２０９は、論理ページ毎のエントリを有する。各エントリは、論理ページ＃（番号）０４００、ステータス０４０１、物理アドレス０４０２、サイズ０４０３、およびＳｕｂｓｅｔ＃０４０４を含む。論理ページ＃０３００は、論理ページの識別子であり、ユニークなものである。ステータス０４０１は、当該論理ページが物理アドレスへ対応づけられているか否か（有効／未割当）を表す。物理アドレス０４０２は、ＦＭ０１０２のうち、当該論理ページが対応づけられている領域の先頭の物理アドレスを示す。サイズ０４０３は、当該論理ページのデータの圧縮後のデータサイズを示す。Ｓｕｂｓｅｔ＃０４０４は、当該論理ページが属するＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５の識別子を表す。なお、物理アドレス０４０２及びサイズ０４０３の代わりに、物理ページ番号や物理ページ数等が用いられてもよい。また、Ｌ２ＰＴＢＬ０２０９は、論理ページ番号順に、所定数のエントリ毎のＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５に分割される。
【００４５】
図５は、Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０の構成例を示す図である。
【００４６】
Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０は、Ｌ２ＰＴＢＬＳｕｂｓｅｔ０３０５毎のエントリを有する。各エントリは、Ｌ２ＰＴＢＬＳｕｂｓｅｔ＃０５００、ステータス０５０１、格納場所０５０２、およびＳｕｂｓｅｔアドレス０５０３を含む。Ｌ２ＰＴＢＬＳｕｂｓｅｔ＃０５００は、Ｌ２ＰＴＢＬＳｕｂｓｅｔの識別子であり、ユニークなものである。ステータス０５０１は、当該Ｌ２ＰＴＢＬＳｕｂｓｅｔがＬ２ＰＴＢＬ０２０９へ対応づけられているか否か（有効／未割当）を表す。格納場所０５０２は、当該Ｌ２ＰＴＢＬＳｕｂｓｅｔが主記憶０１０４とＦＭ０１０２のどちらに格納されているかを示す。なお、格納場所０５０２は、当該Ｌ２ＰＴＢＬＳｕｂｓｅｔが主記憶０１０４に格納されているか否かを示していてもよい。Ｓｕｂｓｅｔアドレス０５０３は、当該Ｌ２ＰＴＢＬＳｕｂｓｅｔが格納されているＦＭ０１０２上の格納位置である物理アドレス、または当該Ｌ２ＰＴＢＬＳｕｂｓｅｔが格納されている主記憶０１０４上の格納位置である主記憶アドレスを示す。なお、当該Ｌ２ＰＴＢＬＳｕｂｓｅｔがＦＭ０１０２と主記憶０１０４の両方に格納されている場合、Ｓｕｂｓｅｔアドレス０５０３は、両方のアドレスを示していてもよい。
【００４７】
図６は、第１状態におけるブロック制御０６００の概要を示す。図７は、第２状態におけるブロック制御０６００の概要を示す。
【００４８】
ＦＭ０１０２に対するライトとして、上位装置０１０８からのユーザデータをＦＭ０１０２へライトするユーザデータライト（ユーザＷＲ）０６０１、ＦＭ０１０２に格納されたユーザデータをＲＣＭにより移動させるユーザデータＲＣＭ（ユーザＲＣＭ）０６０２、ユーザＷＲ０６０１されたユーザデータを示すメタデータをＦＭ０１０２へライトするメタデータライト（メタＷＲ）０６０３、ＦＭ０１０２に格納されたメタデータをＲＣＭにより移動させるメタデータＲＣＭ（メタＲＣＭ）０６０４が行われる。ユーザＷＲ、メタＷＲ、ユーザＲＣＭ、及びメタＲＣＭにより、ＦＭ０１０２へ書き込まれるデータ量を総ＦＭライト量と呼ぶ。
【００４９】
ブロック制御０６００は、ユーザＷＲ０６０１、ユーザＲＣＭ０６０２、メタＷＲ０６０３、メタＲＣＭ０６０４で生成・消費されるブロック数の管理、およびＲＣＭ量の調整を実施する。また、ブロック制御０６００は、ＦＭ０１０２をブロック０３０３単位で、有効ユーザブロック０６０５、空きユーザブロック０６０６、有効メタブロック０６０７、および空きメタブロック０６０８の４つに、分割して管理する。有効ユーザブロック０６０５は、ユーザデータのために割り当てられ、有効なユーザデータを格納しているブロックである。空きユーザブロック０６０６は、ユーザデータのために割り当てられている空きブロックである。有効メタブロック０６０７は、メタデータのために割り当てられ、有効なメタデータを格納しているブロックである。空きメタブロック０６０８は、メタデータのために割り当てられている空きブロックである。ここで、有効ユーザブロック０６０５と空きユーザブロック０６０６を合わせて割当ユーザブロックと呼び、有効メタブロック０６０７と空きメタブロック０６０８を合わせて割当メタブロックと呼ぶ。また、ブロック制御０６００は、割当ユーザブロック数と割当メタブロック数を制御する。
【００５０】
これらの図を用いて、割当メタブロック数を動的に変更する様子を説明する。第１状態は、ユーザＷＲ０６０１とユーザＲＣＭ０６０２に対し、メタＷＲ０６０３とメタＲＣＭ０６０４が少ない状態である。圧縮されないデータが多いと、ユーザデータサイズに対して論理アドレス空間は小さく、メタデータ量は少なく、主記憶０１０４とＦＭ０１０２の間のメタデータの移動量は少ない。また、Ｉ／Ｏパタンが局所的アドレスへのアクセスであれば、主記憶０１０４とＦＭ０１０２の間のメタデータの移動量は少ない。このような場合、ブロック制御０６００は、割当メタブロック数を少なくする。これにより、各有効ユーザブロック０６０５の有効データ率が低くなり、ユーザＲＣＭ０６０２の量が少なくなり、総ＦＭライト量を減らすことができる。ここで、有効データ率は、ブロック内のページ数に対する有効ページ数の割合である。総ＦＭライト量は、ユーザＷＲ０６０１、ユーザＲＣＭ０６０２、メタＷＲ０６０３、メタＲＣＭ０６０４によるＦＭ０１０２へのライト量の合計である。
【００５１】
一方、第２状態は、第１状態に比べて、メタデータＷＲ０６０３とメタＲＣＭ０６０４が増加した状態である。圧縮されるデータが多いと、ユーザデータサイズに対して論理アドレス空間は大きく、メタデータ量は多く、主記憶０１０４とＦＭ０１０２の間のメタデータの移動量は多い。また、Ｉ／Ｏパタンが広域的アドレスへのアクセスであれば、主記憶０１０４とＦＭ０１０２の間のメタデータの移動量は多い。このような場合、ブロック制御０６００は、割当メタブロック数を多くする。これにより、各有効メタブロック０６０７の有効データ率が低くなり、メタＲＣＭ０６０４の量が少なくなり、総ＦＭライト量を減らすことができる。
【００５２】
図８は、ブロック管理ＴＢＬ０２１１の構成例を示す図である。
【００５３】
ブロック管理ＴＢＬ０２１１は、ブロック毎のエントリを有する。各エントリは、ブロック＃０７００、ステータス０７０１、データ種別０７０２、有効データ率０７０３、およびＦＭ寿命情報０７０４を含む。ブロック＃０７００は、ブロックの識別子であり、ユニークなものである。ステータス０７０１は、当該ブロックのステータスであり、当該ブロックの全ページがライト済みである状態「有効（クローズ）」、当該ブロックの一部のページがライト済みである状態「有効（オープン）」、および当該ブロックが消去済みである状態「空き」の何れか一つを示す。有効データ率０７０３は、ブロック内のページ数に対する有効ページ数の割合を示す。ＦＭ寿命情報０７０４は、例えばブロックの消去回数などの寿命に関する情報を示す。なお、ステータス７００１は、当該ブロックの全ページが無効であり且つ当該ブロックが消去前である状態「無効」を示してもよい。また、有効データ率０７０３の代わりに、有効ページ数、無効ページ数、ブロック内のページ数に対する無効ページ数の割合である無効データ率等が用いられてもよい。
【００５４】
図９は、装置情報ＴＢＬ０２１２の構成例を示す図である。
【００５５】
装置情報ＴＢＬ０２１２は、最大論理容量０８００、ＦＭ総容量０８０１、主記憶メタ容量０８０２、有効論理データサイズ０８０３、ユーザデータサイズ０８０４、メタデータサイズ０８０５、有効ユーザブロック数０８０６、空きユーザブロック数０８０７、有効メタブロック数０８０８、および空きメタブロック数０８０９を含む。
【００５６】
最大論理容量０８００は、予め設定され、データ圧縮機能を持つＳＳＤ０１００へ格納可能なユーザデータの最大容量を示す。ＦＭ総容量０８０１は、予め設定され、ＳＳＤ０１００に搭載されたＦＭ０１０２の容量を示す。即ち、ＳＳＤ０１００は、ＦＭ総容量０８０１より大きい最大論理容量０８００を上位装置０１０８へ提供することができる。主記憶メタ容量０８０２は、予め設定され、ＳＳＤ０１００に搭載された主記憶０１０４の容量のうち、メタデータの格納に利用できる容量を示す。有効論理データサイズ０８０３は、ＳＳＤ０１００に格納されているユーザデータの圧縮前のサイズを示す。ユーザデータサイズ０８０４は、データ圧縮後にＦＭ０１０２に格納されているユーザデータの物理サイズを示している。メタデータサイズ０８０５は、主記憶０１０４とＦＭ０１０２に格納されているメタデータの物理サイズを示している。有効ユーザブロック数０８０６は、ユーザデータ用に割り当てられた割当ユーザブロックのうち、有効データが格納されているブロックの総数を示している。空きユーザブロック数０８０７は、割当ユーザブロックのうち、空きブロックの総数を示し、空きユーザブロック０６０６に対応している。有効メタブロック数０８０８は、メタデータ用に割り当てられた割当メタブロックのうち、有効データが格納されているブロックの総数を示している。空きメタブロック数０８０９は、割当メタブロックのうち、空きブロックの総数を示し、空きメタブロック０６０８に対応する。
【００５７】
有効論理データサイズ０８０３が増加すると、メタデータサイズ０８０５も増加する。
【００５８】
図１０は、統計情報ＴＢＬ０２１３の構成例を示す図である。
【００５９】
統計情報ＴＢＬ０２１３は、世代毎のエントリを有する。各エントリは、世代＃０９００、更新日時０９０１、ユーザデータサイズ０９０２、メタデータサイズ０９０３、ＦＭライト比率０９０４、およびユーザライト傾向０９０５を含む。
【００６０】
世代＃０９００は、一つの時点を示す識別子であり、ユニークなものである。更新日時０９０１は、当該エントリの情報が更新された日時を示す。ユーザデータサイズ０９０２は、当該エントリが更新された時点において、データ圧縮後にＦＭ０１０２に格納されているユーザデータの物理サイズを示し、装置情報ＴＢＬ０２１２のユーザデータサイズ０８０４に相当する。メタデータサイズ０９３０は、当該エントリが更新された時点において、主記憶０１０４とＦＭ０１０２に格納されているメタデータの物理サイズを示し、装置情報ＴＢＬ０２１２のメタデータサイズ０８０５に相当する。ＦＭライト比率０９０４は、前回のエントリの更新時点から当該エントリの更新時点までの期間中の、ＦＭ０１０２へのユーザデータのライト量と、ＦＭ０１０２へのメタデータのライト量との比率を示す。ユーザライト傾向０９０５は、前回の統計情報更新時点から当該エントリが更新されるまでの期間におけるユーザライトの傾向に関する情報であり、Ｉ／Ｏレングスやアクセスパタン（シーケンシャルかランダムか）等を示す。
【００６１】
ＣＰＵ０１０６は、定期的に統計情報ＴＢＬ０２１３のエントリを作成してもよいし、ライトの度に統計情報ＴＢＬ０２１３のエントリを作成してもよいし、Ｌ２ＰＴＢＬ０２０９の参照の度に統計情報ＴＢＬ０２１３のエントリを作成してもよい。
【００６２】
以下、ＳＳＤ０１００の動作について説明する。
【００６３】
図１１は、ユーザデータライト処理の一例を示すフローチャートである。
【００６４】
ユーザデータライト処理は、上位装置０１０８からライトコマンドが発行され、このライトコマンドが完了するまでの処理である。
【００６５】
ＣＰＵ０１０６は、上位装置０１０８からライトコマンドを取得する（１０００）。
【００６６】
ＣＰＵ０１０６は、ライトコマンドを解析した後、ライトデータを上位装置０１０８へ要求し、上位装置０１０８から受領したライトデータをデータバッファ領域０２０２へ格納する（１００１）。
【００６７】
ＣＰＵ０１０６は、上位装置０１０８へライト完了応答を送信する（１００２）。
【００６８】
ＣＰＵ０１０６は、データバッファ領域０２０２へ格納したライトデータを圧縮する（１００３）。
【００６９】
ＣＰＵ０１０６は、Ｌ２ＰＴＢＬアドレス取得処理を行うことで、Ｌ２ＰＴＢＬ０２０９のうち当該ライトコマンドに示された論理アドレスに対応するＳｕｂｓｅｔの主記憶アドレスを取得する（１００４）。なお、本処理の詳細は、後述する。
【００７０】
ＣＰＵ０１０６は、処理１００４で取得したＳｕｂｓｅｔの主記憶アドレスと、ライトコマンドから算出される論理ページ＃をもとに、Ｓｕｂｓｅｔのうち当該論理ページのエントリを取得する（１００５）。
【００７１】
ＣＰＵ０１０６は、ブロック管理ＴＢＬ０２１１の情報をもとに、書き先物理アドレスを決定する（１００６）。なお、書き先物理アドレスの決定は、ブロック管理ＴＢＬ０２１１のステータス０７０１や寿命情報０７０４を用いて決定する。例えば、ＣＰＵ０１０６は、残寿命が長いブロックや、オープンブロックの続きのページ等を、書き先物理アドレスとして選択する。
【００７２】
ＣＰＵ０１０６は、処理１００６で決定した書き先物理アドレスへ、圧縮されたデータを書き込むためのライト要求をＦＭ０１０２へ発行し、ライト完了を待つ（１００７）。
【００７３】
ＣＰＵ０１０６は、処理１００７で発行したライト要求が完了した後、Ｌ２ＰＴＢＬ０２０９の当該エントリの物理アドレス０４０２を更新する（１００８）。
【００７４】
ＣＰＵ０１０６は、ブロック制御処理を呼び出し、ＲＣＭの制御やメタデータへ割り当てるブロック数の制御などを実施した後、処理を終了する（１００９）。なお、本処理の詳細は後述する。
【００７５】
以上のライト処理によれば、ＣＰＵ０１０６は、主記憶０１０４上で、ライトコマンドで指定された論理アドレスに対応するＳｕｂｓｅｔに、書き先物理アドレスを登録することができる。
【００７６】
図１２は、アンマップ処理の一例を示すフローチャートである。
【００７７】
アンマップ処理は、上位装置０１０８からアンマップコマンドが発行され、このアンマップコマンドが完了するまでの処理である。
【００７８】
ＣＰＵ０１０６は、上位装置０１０８からアンマップコマンドを取得する（１１００）。このコマンドは例えば、trimコマンドである。アンマップコマンドは、指定する論理アドレス範囲のデータが上位装置０１０８により使用されなくなったことを示す。これにより、ＣＰＵ０１０６は、指定された論理アドレス範囲を無効化することができる。
【００７９】
ＣＰＵ０１０６は、Ｌ２ＰＴＢＬアドレス取得処理を行うことで、Ｌ２ＰＴＢＬ０２０９のうち当該アンマップコマンドに対応するＳｕｂｓｅｔの主記憶アドレスを取得する（１００４）。なお、本処理の詳細は、後述する。
【００８０】
ＣＰＵ０１０６は、処理１００４で取得したＳｕｂｓｅｔの主記憶アドレスと、アンマップコマンドから算出される論理ページ＃をもとに、Ｓｕｂｓｅｔのうち当該論理ページのエントリを取得する（１００５）。
【００８１】
ＣＰＵ０１０６は、当該Ｓｕｂｓｅｔの当該エントリのステータス０４０１を「未割当」に変更する（１１０１）。
【００８２】
ＣＰＵ０１０６は、当該Ｓｕｂｓｅｔの全エントリが無効か否かを判断する（１１０２）。判断の結果、全エントリが無効であれば（１１０２：Ｙｅｓ）、ＣＰＵ０１０６は、処理１１０３（Ａ）へ進む。一方、全エントリが無効でない場合（１１０２：Ｎｏ）、ＣＰＵ０１０６は、処理１１０４（Ｂ）へ進む。
【００８３】
（Ａ）
ＣＰＵ０１０６は、Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０を参照し、当該Ｓｕｂｓｅｔのエントリのステータス０５０１を「未割当」に変更する（１１０３）。これにより、割当メタブロックの無効データ率を高めることができる。その後、ＣＰＵ０１０６は、処理１１０４（Ｂ）へ進む。
【００８４】
（Ｂ）
ＣＰＵ０１０６は、上位装置０１０８へアンマップ完了応答を送信する（１１０４）。
【００８５】
ＣＰＵ０１０６は、ブロック制御処理を呼び出し、ＲＣＭの制御やメタデータへ割り当てるブロック数の制御などを実施した後、処理を終了する（１００９）。なお、本処理の詳細は後述する。
【００８６】
以上のアンマップ処理によれば、ＣＰＵ０１０６は、主記憶０１０４上で、アンマップコマンドにより指定された論理アドレスに対応するＳｕｂｓｅｔにおいて、物理アドレスのマッピングを解除することができる。
【００８７】
図１３は、Ｌ２ＰＴＢＬアドレス取得処理の一例を示すフローチャートである。
【００８８】
前述のユーザデータライト処理及びアンマップ処理の１００４において、ＣＰＵ０１０６は、Ｌ２ＰＴＢＬアドレス取得処理を行う。
【００８９】
ＣＰＵ０１０６は、Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０を参照し、コマンドの対象の論理ページに対応するＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５のエントリを取得する（１２００）。
【００９０】
ＣＰＵ０１０６は、処理１２００で取得した情報をもとに、当該Ｌ２ＰＴＢＬＳｕｂｓｅｔ０３０５のステータス０５０１が有効であるか否かを判断する（１２０１）。判断の結果、ステータス０５０１が有効である場合（１２０１：Ｙｅｓ）、ＣＰＵ０１０６は、処理１２０２（Ｄ）へ進む。一方、ステータス０５０１が有効でない場合（１２０１：Ｎｏ）、ＣＰＵ０１０６は、処理１２０３（Ｅ）へ進む。
【００９１】
（Ｄ）
ＣＰＵ０１０６は、処理１２００で取得した情報をもとに、当該Ｌ２ＰＴＢＬＳｕｂｓｅｔ０３０５の格納場所０５０２が主記憶であるか否かを判断する（１２０２）。判断の結果、格納場所０５０２が主記憶である場合（１２０２：Ｙｅｓ）、ＣＰＵ０１０６は、処理１２０６（Ｈ）へ進む。一方、格納場所０５０２が主記憶でない場合（１２０２：Ｎｏ）、ＣＰＵ０１０６は、処理１２０３（Ｅ）へ進む。
【００９２】
（Ｅ）
ＣＰＵ０１０６は、主記憶０１０４に、Ｌ２ＰＴＢＬＳｕｂｓｅｔ０３０５を新たに格納可能な領域が空いているか否かを判断する（１２０３）。判断の結果、空きがない場合（１２０３：Ｙｅｓ）、ＣＰＵ０１０６は、処理１２０４（Ｆ）へ進む。一方、空きがある場合（１２０３：Ｎｏ）、ＣＰＵ０１０６は、処理１２０５（Ｇ）へ進む。
【００９３】
（Ｆ）
ＣＰＵ０１０６は、主記憶０１０４に格納されているＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５を選択し、選択されたＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５をＦＭ０１０２へライトし、Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０の当該エントリの格納場所０５０２を「ＦＭ」、物理アドレス／主記憶アドレス０５０３を格納先の物理アドレスへ変更することで、空きを確保する（１２０４）。なお、ＦＭ０５０１へライトするＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５は、参照や更新頻度などの情報を管理し、これら情報をもとに決定しても良い。その後、ＣＰＵ０１０６は、処理１２０５（Ｇ）へ進む。なお、主記憶０１０４に格納されているＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５がＦＭ０１０２にも格納されており、且つ主記憶０１０４に格納されているＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５が更新されていない場合、ＣＰＵ０１０６は、１２０４を行わなくてもよい。
【００９４】
（Ｇ）
処理１２０１の結果が「Ｙｅｓ」であった場合、ＣＰＵ０１０６は、当該Ｌ２ＰＴＢＬＳｕｂｓｅｔをＦＭ０１０２から主記憶０１０４へリードし、Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０の当該Ｌ２ＰＴＢＬＳｕｂｓｅｔの格納場所０５０２を主記憶へ変更し、Ｓｕｂｓｅｔアドレス０５０３を格納先の主記憶アドレスへ変更する（１２０５）。一方、処理１２０１の結果が「Ｎｏ」であった場合、ＣＰＵ０１０６は、Ｌ２ＰＴＢＬＳｕｂｓｅｔ０３０５を主記憶０１０４に新規作成し、Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０の当該エントリのステータス０５０１を有効へ変更し、格納場所０５０２を主記憶へ変更し、Ｓｕｂｓｅｔアドレス０５０３を格納先の主記憶アドレスへ変更する（１２０５）。その後、ＣＰＵ０１０６は、処理１２０６（Ｈ）へ進む。
【００９５】
（Ｈ）
ＣＰＵ０１０６は、Ｌ２ＰＴＢＬ管理ＴＢＬ０２１０の当該エントリのＳｕｂｓｅｔアドレス０５０３を返却し、処理を終了する（１２０６）。
【００９６】
以上のＬ２ＰＴＢＬアドレス取得処理によれば、ＣＰＵ０１０６は、指定された論理アドレスに対応するＳｕｂｓｅｔについて、主記憶０１０４上の位置を取得することができる。また、ＣＰＵ０１０６は、当該Ｓｕｂｓｅｔが主記憶０１０４に格納されていない場合、ＦＭ０１０２から主記憶０１０４へ読み出すことができる。
【００９７】
図１４は、ブロック制御処理の一例を示すフローチャートである。
【００９８】
前述のユーザデータライト処理及びアンマップ処理の１００９において、ＣＰＵ０１０６は、ブロック制御処理を行う。
【００９９】
ＣＰＵ０１０６は、装置情報ＴＢＬ０２１２および統計情報ＴＢＬ０２１３の少なくとも何れか一つより、各種情報を取得する（１３００）。
【０１００】
ＣＰＵ０１０６は、ＲＣＭ制御処理を行うことで、処理１３００で取得した各種情報をもとに、ユーザデータとメタデータのそれぞれで必要なＲＣＭ量を算出し、ＲＣＭを実行する（１３０１）。なお、本処理の詳細は後述する。
【０１０１】
ＣＰＵ０１０６は、処理１３００で取得した、統計情報ＴＢＬ０２１３の最新の世代のエントリをもとに、過去の世代のエントリから変化があったか否かを判断する（１３０２）。例えば、ＣＰＵ０１０６は、統計情報ＴＢＬ０２１３の特定のフィールドについて、最新の世代のエントリとその直前の世代のエントリとの比を算出し、比が予め設定された範囲外である場合、変化があったと判断する。特定のフィールドは、例えば、メタデータサイズ０９０３である。なお、特定のフィールドは、ユーザデータサイズ０９０２、メタデータサイズ０９０３、ＦＭライト比率０９０４、およびユーザライト傾向０９０５の少なくとも一つであってもよい。判断の結果、変化がある場合（１３０２：Ｙｅｓ）、ＣＰＵ０１０６は、処理１３０３（Ｊ）へ進む。一方、変化がない場合（１３０２：Ｎｏ）、ＣＰＵ０１０６は、処理１３０４（Ｋ）へ進む。
【０１０２】
（Ｊ）
ＣＰＵ０１０６は、ブロック割当制御処理を行うことで、処理１３００で取得した情報をもとに、総ＦＭライト量が最小となるような、割当ユーザブロック数と割当メタブロック数を算出し、必要に応じてそれらのブロック数を増減させる（１３０３）。なお、本処理の詳細は後述する。その後、ＣＰＵ０１０６は、処理１３０４（Ｋ）へ進む。
【０１０３】
（Ｋ）
ＣＰＵ０１０６は、装置情報ＴＢＬ０２１２および統計情報ＴＢＬ０２１３の各種情報を更新し、処理を終了する（１３０４）。なお、ＣＰＵ０１０６は、統計情報ＴＢＬ０２１３の更新を、処理１３０４が実行される毎に実施しても良いし、前回の更新から指定時間以上が経過していた場合のみ実施しても良い。
【０１０４】
以上のブロック制御処理によれば、ＣＰＵ０１０６は、統計情報に変化があったと判定した場合、割当ユーザブロック数と割当メタブロック数を変更することができる。また、ＣＰＵ０１０６は、統計情報に変化がないと判定した場合、現在の割当ユーザブロック数と割当メタブロック数が最適であると判断し、割当ユーザブロック数と割当メタブロック数を維持することができる。
【０１０５】
図１５は、ＲＣＭ制御処理の一例を示すフローチャートである。
【０１０６】
前述のブロック制御処理の１３０１において、ＣＰＵ０１０６は、ＲＣＭ制御処理を行う。
【０１０７】
ＣＰＵ０１０６は、処理１３００で取得した情報をもとに、空きユーザブロックが不足しているか否かを判断する（１４００）。例えば、ＣＰＵ０１０６は、空きユーザブロック数が空きユーザブロック数閾値より少ない場合、空きユーザブロックが不足していると判断する。空きユーザブロック数閾値は、予め設定されていてもよいし、割当ユーザブロック数に予め設定された空きユーザブロック率を乗ずることにより算出されてもよい。なお、ＲＣＭ制御処理に対して使用ブロック数が与えられる場合、空きユーザブロック数から使用ブロック数を減ずることで新たな空きユーザブロック数を算出し、空きユーザブロックが不足しているか否かを判断する。判断の結果、不足している場合（１４００：Ｙｅｓ）、ＣＰＵ０１０６は、処理１４０１（Ｍ）へ進む。一方、不足していない場合（１４００：Ｎｏ）、ＣＰＵ０１０６は、処理１４０３（Ｎ）へ進む。
【０１０８】
（Ｍ）
ＣＰＵ０１０６は、処理１３００で取得した情報、およびブロック管理ＴＢＬ０２１１をもとに、十分な空きユーザブロック確保に必要なユーザＲＣＭ量（空きユーザブロックを確保するために移動（リライト）するユーザデータの量）を算出する（１４０１）。例えば、ＣＰＵ０１０６は空きユーザブロック数閾値に対する空きユーザブロックの不足ブロック数を算出し、不足ブロック数と、有効ユーザブロック内の有効データ率から移動する有効ページ数をユーザＲＣＭ量として算出する。
【０１０９】
ＣＰＵ０１０６は、処理１４０１で算出したユーザＲＣＭ量をもとに、当該ＲＣＭによって消費される空きメタブロック数（消費空きメタブロック数）を算出する（１４０２）。例えば、ＣＰＵ０１０６は、ユーザＲＣＭ対象ブロックに含まれる有効ページに対応するＬ２ＰＴＢＬＳｕｂｓｅｔ０３０５のうち、ＦＭ０１０２に格納されているものの合計サイズを求め、これと同サイズのメタデータをＦＭ０１０２へライトするために必要な空きメタブロック数を消費空きメタブロック数として算出する。また、ＣＰＵ０１０６は、論物ミス率を算出し、論物ミス率に基づいて統計的に消費空きメタブロック数を算出してもよい。その後、処理１４０３（Ｎ）へ進む。
【０１１０】
（Ｎ）
ＣＰＵ０１０６は、処理１３００で取得した情報をもとに、処理１４０２を実施した場合、ここで算出したメタＲＣＭ消費ブロック数を考慮して、空きメタブロックが不足しているか否かを判断する（１４０３）。例えば、ＣＰＵ０１０６は、空きメタブロック数からメタＲＣＭ消費ブロック数を減ずることで空きメタブロック数予測値を算出し、空きメタブロック数予測値が空きメタブロック数閾値より少ない場合、空きメタブロックが不足していると判断する。空きメタブロック数閾値は、予め設定されていてもよいし、割当メタブロック数に予め設定された空きメタブロック率を乗ずることにより算出されてもよい。判断の結果、不足していれば（１４０３：Ｙｅｓ）、ＣＰＵ０１０６は、処理１４０４（Ｏ）へ進む。一方、不足していない場合（１４０３：Ｎｏ）、ＣＰＵ０１０６は、処理１４０６（Ｐ）へ進む。
【０１１１】
（Ｏ）
ＣＰＵ０１０６は、処理１３００で取得した情報、およびブロック管理ＴＢＬ０２１１をもとに、十分な空きブロック確保に必要なメタＲＣＭ量（空きメタブロックを確保するために移動（リライト）するメタデータの量）を算出する（１４０４）。
【０１１２】
ＣＰＵ０１０６は、処理１４０４で算出したメタＲＣＭ量をもとに、メタＲＣＭを実施し、空きメタブロックを確保する（１４０５）。その後、ＣＰＵ０１０６は、処理１４０６（Ｐ）へ進む。
【０１１３】
（Ｐ）
ＣＰＵ０１０６は、処理１４０１で算出したユーザＲＣＭ量をもとに、ユーザＲＣＭを実施し、空きユーザブロックを確保した後、処理を終了する（１４０６）。なお、処理１４０１を実施していない場合は、本処理も実施しない。
【０１１４】
以上のＲＣＭ制御処理によれば、ＣＰＵ０１０６は、まず、ユーザＲＣＭ量を算出し、ユーザＲＣＭ量に基づいてメタＲＣＭ量を算出することで、割当ユーザブロックに影響を与えないメタＲＣＭを行うことができる。その後、ＣＰＵ０１０６は、ユーザＲＣＭを行うことで、ユーザＲＣＭによるメタ空きブロックの枯渇を防ぐことができる。
【０１１５】
図１６は、ブロック割当制御処理の一例を示すフローチャートである。
【０１１６】
前述のブロック制御処理の１３０３において、ＣＰＵ０１０６は、ブロック割当制御処理を行う。
【０１１７】
ＣＰＵ０１０６は、処理１３００で取得した情報をもとに、メタデータサイズ０８０５が主記憶メタ容量０８０２を超えるか否かを判断する（１５００）。判断の結果、メタデータサイズ０８０５が主記憶メタ容量０８０２を超える場合（１５００：Ｙｅｓ）、ＣＰＵ０１０６は、処理１５０１（Ｒ）へ進む。一方、メタデータサイズ０８０５が主記憶メタ容量０８０２以下である場合（１５００：Ｎｏ）、ＣＰＵ０１０６は、処理を終了する。
【０１１８】
（Ｒ）
ＣＰＵ０１０６は、現在のユーザデータサイズ０９０２を算出する（１５０１）。
【０１１９】
ＣＰＵ０１０６は、現在のメタデータサイズ０９０３を算出する（１５０２）。
【０１２０】
ＣＰＵ０１０６は、現在のＦＭライト比率０９０４を算出する（１５０３）。
【０１２１】
ＣＰＵ０１０６は、現在のユーザライト傾向０９０５を算出する（１５０４）。
【０１２２】
ＣＰＵ０１０６は、処理１５０１〜１５０４で算出した値をもとに、総ＦＭライト量が最小となる、ユーザデータとメタデータのブロック割当比率を最適ブロック割当比率として算出する（１５０５）。ブロック割当比率は、割当ユーザブロック数と割当メタブロック数の比率である。ここで、ＣＰＵ０１０６は例えば、ユーザデータサイズとメタデータサイズとＦＭライト比率とユーザライト傾向と最適ブロック割当比率との値の組み合わせを示すテーブルを主記憶０１０４に保持しておき、そのテーブルから、処理１５０１〜１５０４で算出した値に対応する最適ブロック割当比率を参照しても良い。なお、ブロック割当比率は、ＦＭ０１０２の全ブロック数に対する割当メタブロック数の比率であってもよい。ブロック割当比率の代わりに、割当メタブロック数及び割当ユーザブロック数の何れかが用いられてもよい。なお、ＣＰＵ０１０６は、予め設定された算出式を用いて、処理１５０１〜１５０４で算出した値から最適ブロック割当比率を求めても良い。
【０１２３】
ＣＰＵ０１０６は、処理１３００で取得した情報をもとに現在のブロック割当比率を求め、最適ブロック割当比率が現在のブロック割当比率と異なるか否かを判断する（１５０６）。例えば、ＣＰＵ０１０６は、最適ブロック割当比率と現在のブロック割当比率の比が、予め設定された範囲外である場合、最適ブロック割当比率が現在のブロック割当比率と異なると判断する。判断の結果、最適ブロック割当比率が現在のブロック割当比率と異なる場合（１５０６：Ｙｅｓ）、ＣＰＵ０１０６は、処理１５０７（Ｓ）へ進める。一方、最適ブロック割当比率が現在のブロック割当比率と異ならない場合（１５０６：Ｎｏ）、ＣＰＵ０１０６は、処理を終了する。
【０１２４】
（Ｓ）
ＣＰＵ０１０６は、処理１５０６の結果を踏まえ、総ＦＭライト量を最小にするには、割当メタブロック数を増やすべきか、減らすべきかを判断する（１５０７）。ここでＣＰＵ０１０６は、最適ブロック割当比率により決まる割当メタブロック数を最適割当メタブロック数とし、最適割当メタブロック数から現在の割当メタブロック数を減じて得られる変更メタブロック数が正である場合、割当メタブロック数を増やすべきであると判定する。判断の結果、増やすべきであれば（１５０７：増）、ＣＰＵ０１０６は、処理１５０８（Ｔ）へ進める。一方、減らすべきであれば（１５０７：減）、ＣＰＵ０１０６は、処理１５０９（Ｕ）へ進める。
【０１２５】
（Ｔ）
ＣＰＵ０１０６は、割当メタブロック数を増加させる割当メタブロック増加処理を実施し、処理を終了する（１５０８）。なお、本処理の詳細は、後述する。
【０１２６】
（Ｕ）
ＣＰＵ０１０６は、割当メタブロック数を減少させる割当メタブロック減少処理を実施し、処理を終了する（１５０９）。なお、本処理の詳細は、後述する。
【０１２７】
以上のブロック割当制御処理によれば、ＣＰＵ０１０６は、ＳＳＤ０１００の状態に基づいて最適ブロック割当比率を算出することができる。また、ＣＰＵ０１０６は、現在のブロック割当比率が最適ブロック割当比率と異なる場合、ブロック割当比率を最適ブロック割当比率に近づけることができる。また、ＣＰＵ０１０６は、装置情報ＴＢＬ０２１２や統計情報ＴＢＬ０２１３等の計測値と、計測値及び最適ブロック割当比率の関係を用いることにより、総ＦＭライト量を最小化する最適ブロック割当比率を算出することができる。また、総ＦＭライト量を最小化することにより、空きブロックの枯渇を防ぐと共に、ＳＳＤ０１００の性能を向上させることや、ＦＭ０１０２の寿命を向上させることができる。
【０１２８】
なお、ブロック割当比率の代わりに、割当メタブロック数または割当ユーザブロック数が用いられてもよい。また、最適ブロック割当比率の代わりに、最適割当メタブロック数または最適割当ユーザブロック数が用いられてもよい。
【０１２９】
図１７は、割当メタブロック増加処理の一例を示すフローチャートである。
【０１３０】
前述のブロック割当制御処理の１５０８において、ＣＰＵ０１０６は、割当メタブロック増加処理を行う。
【０１３１】
ＣＰＵ０１０６は、変更ブロック数の割当メタブロックを増加させるために、増加させるブロックを空きユーザブロックから確保するため、確保した後の空きユーザブロック数が不足するか否かを判断する（１６００）。ここでＣＰＵ０１０６は、現在の空きユーザブロック数から変更ブロック数を減ずることで変更後空きユーザブロック数を算出し、変更後空きユーザブロック数が空きユーザブロック数閾値より少なくなる場合、空きユーザブロック数が不足していると判断する。判断の結果、空きユーザブロック数が不足していれば（１６００：Ｙｅｓ）、ＣＰＵ０１０６は、処理１３０１（Ｗ）へ進める。一方、空きユーザブロック数が不足していない場合（１６００：Ｎｏ）、ＣＰＵ０１０６は、処理１６０１（Ｘ）へ進める。
【０１３２】
（Ｗ）
ＣＰＵ０１０６は、変更ブロック数を使用ブロック数として、前述のＲＣＭ制御処理を実施することで、空きユーザブロックを生成する（１３０１）。その後、ＣＰＵ０１０６は、処理１６０１（Ｘ）へ進める。
【０１３３】
（Ｘ）
ＣＰＵ０１０６は、変更ブロック数の空きユーザブロックを空きメタブロックに変更する（１６０１）。
【０１３４】
ＣＰＵ０１０６は、処理１６０１で変更したブロックについて、ブロック管理ＴＢＬ０２１１の情報を更新し、処理を終了する（１６０２）。
【０１３５】
以上の割当メタブロック増加処理によれば、ＣＰＵ０１０６は、空きユーザブロックを空きメタブロックに変更することで、割当メタブロック数を増加させることができる。
【０１３６】
図１８は、割当メタブロック減少処理の一例を示すフローチャートである。
【０１３７】
前述のブロック割当制御処理の１５０９において、ＣＰＵ０１０６は、割当メタブロック減少処理を行う。
【０１３８】
ＣＰＵ０１０６は、変更ブロック数の割当メタブロックを減少させるために、減少させるブロックを空きメタブロックから確保するため、確保した後の空きメタブロック数が不足しているか否かを判断する（１７００）。ここでＣＰＵ０１０６は、現在の空きメタブロック数から変更ブロック数を減ずることで変更後空きメタブロック数を算出し、変更後空きメタブロック数が空きメタブロック数閾値より少なくなる場合、空きメタブロック数が不足していると判断する。判断の結果、空きメタブロック数が不足していれば（１７００：Ｙｅｓ）、ＣＰＵ０１０６は、処理１３０１（Ｙ）へ進める。一方、空きメタブロック数が不足していない場合（１７００：Ｎｏ）、ＣＰＵ０１０６は、処理１７０１（Ｚ）へ進める。
【０１３９】
（Ｙ）
ＣＰＵ０１０６は、変更ブロック数を使用ブロック数として、前述のＲＣＭ制御処理を実施することで、空きメタブロックを生成する（１３０１）。その後、ＣＰＵ０１０６は、処理１７０１（Ｚ）へ進める。
【０１４０】
（Ｚ）
ＣＰＵ０１０６は、変更ブロック数の空きメタブロックを空きユーザブロックに変更する（１７０１）。
【０１４１】
ＣＰＵ０１０６は、処理１７０１で変更したブロックについて、ブロック管理ＴＢＬ０２１１の情報を更新し、処理を終了する（１７０２）。
【０１４２】
以上の割当メタブロック減少処理によれば、ＣＰＵ０１０６は、空きメタブロックを空きユーザブロックに変更することで、割当メタブロック数を減少させることができる。
【０１４３】
本実施例によれば、データ圧縮機能を有したＳＳＤにおいて、空きブロックが枯渇することなく、Ｉ／Ｏを継続できる。さらに、ユーザデータとメタデータへのブロック割り当て数を動的に変更することで、ユーザＲＣＭおよびメタＲＣＭの際に発生する有効データの移動量を少なくできる。例えば、総ＦＭライト量においてメタデータのライト量が支配的である場合、メタデータに割り当てるブロック数を増加させることで、メタデータの各ブロックに含まれる有効データの割合を低くでき、ＲＣＭ時の有効データの移動量を小さくできる。つまり、総ＦＭライト量を小さくできるため、装置性能と装置寿命を向上できる。
【０１４４】
なお、ＳＳＤ０１００は、データ圧縮機能の代わりに、重複排除機能等、上位装置０１０８からのライトデータ量を削減してＦＭ０１０２へ書き込むことができる他のデータ削減機能を有していてもよい。このようなデータ削減機能により、ＳＳＤ０１００の論理アドレス空間が変化し、メタデータ量が変化する。また、データ削減機能により、割当ユーザブロック数で定まる物理アドレス空間より大きい論理アドレス空間を上位装置０１０８へ提供することができ、ビットコストを低減できる。
【０１４５】
用語について説明する。記憶装置は、ＳＳＤ０１００等に対応する。主メモリは、主記憶０１０４等に対応する。不揮発性半導体メモリは、ＦＭ０１０２等に対応する。プロセッサは、ＣＰＵ０１０６等に対応する。空きユーザブロック生成処理は、ユーザＲＣＭ等に対応する。空きメタブロック生成処理は、メタＲＣＭ等に対応する。移動ユーザデータ量は、ユーザＲＣＭ量等に対応する。移動メタデータ量は、メタＲＣＭ量等に対応する。割当情報は、ブロック割当比率、割当メタブロック数、割当ユーザブロック数等に対応する。最適割当情報は、最適ブロック割当比率、最適割当メタブロック数、最適割当ユーザブロック数等に対応する。割当ブロック変更処理は、ブロック割当制御処理等に対応する。変化条件は、処理１３０２の条件等に対応する。計測値は、装置情報ＴＢＬ０２１２や統計情報ＴＢＬ０２１３における何れかの値等に対応する。
【０１４６】
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲を上記構成に限定する趣旨ではない。本発明は、他の種々の形態でも実施する事が可能である。
【符号の説明】
【０１４７】
０１００…ＳＳＤ、  ０１０１…ＳＳＤコントローラ、  ０１０２…ＦＭ、  ０１０３…ストレージＩ／Ｆ、  ０１０４…主記憶、  ０１０５…ＦＭコントローラ、  ０１０６…ＣＰＵ、  ０１０７…内部ネットワーク、  ０１０８…上位装置、  ０３００…論理アドレス空間、  ０３０１…物理アドレス空間、  ０３０２…論理ページ、  ０３０３…ブロック、  ０３０４…ページ
【図１】
2017126096.tif 000003
【図２】
2017126096.tif 000004
【図３】
2017126096.tif 000005
【図４】
2017126096.tif 000006
【図５】
2017126096.tif 000007
【図６】
2017126096.tif 000008
【図７】
2017126096.tif 000009
【図８】
2017126096.tif 000010
【図９】
2017126096.tif 000011
【図１０】
2017126096.tif 000012
【図１１】
2017126096.tif 000013
【図１２】
2017126096.tif 000014
【図１３】
2017126096.tif 000015
【図１４】
2017126096.tif 000016
【図１５】
2017126096.tif 000017
【図１６】
2017126096.tif 000018
【図１７】
2017126096.tif 000019
【図１８】
2017126096.tif 000020
【国際調査報告】
2017126096.tif 000021
2017126096.tif 000022
2017126096.tif 000023