(57)【要約】      （修正有）【課題】ガベージコレクションによるデータ移動を抑えることで、ソリッドステートドライブ（ＳＳＤ）の寿命を伸ばすことが可能な情報処理装置を提供する。【解決手段】ストレージコントローラと記憶デバイスとを有する情報処理装置で、ストレージコントローラは、ホストからの書き込みリクエストに対して追記形式で記録する第１のアドレス空間を管理し、記憶デバイスは、ストレージコントローラからの書き込みリクエストに対して追記形式で記録する第２のアドレス空間を管理し、ストレージコントローラは、第１のアドレス空間においてストレージコントローラがガベージコレクションを実行する単位を、第２のアドレス空間において記憶デバイスがガベージコレクションを実行する単位の倍数とする。【選択図】図１８
2020035300.tif 000002
【特許請求の範囲】
【請求項１】
ストレージコントローラと、
記憶デバイスと、
を有し、
前記ストレージコントローラは、ホストからの書き込みリクエストに対して追記形式で記録する第１のアドレス空間を管理し、
前記記憶デバイスは、前記ストレージコントローラからの書き込みリクエストに対して追記形式で記録する第２のアドレス空間を管理し、
前記ストレージコントローラは、前記第１のアドレス空間において前記ストレージコントローラがガベージコレクションを実行する単位を、前記第２のアドレス空間において前記記憶デバイスがガベージコレクションを実行する単位の倍数とする、ことを特徴とする情報処理装置。
【請求項２】
請求項１に記載の情報処理装置において、
前記ストレージコントローラは、前記第１のアドレス空間においてガベージコレクションを実行した際に、前記記憶デバイスにガベージコレクションによって空きとなった領域を通知するコマンドを発行する、ことを特徴とする情報処理装置。
【請求項３】
請求項１に記載の情報処理装置において、
前記ストレージコントローラは、前記記憶デバイスに対してガベージコレクションを実行する単位を要求し、
前記記憶デバイスは、前記ストレージコントローラの要求に対してガベージコレクションを実行する単位を、前記ストレージコントローラに応答し、
前記ストレージコントローラは、前記応答に基づいてガベージコレクションを実行する単位を決定する、
ことを特徴とする情報処理装置。
【請求項４】
請求項２に記載の情報処理装置において、
前記ストレージコントローラは、前記記憶デバイスに対してガベージコレクションを実行する単位を要求し、
前記記憶デバイスは、前記ストレージコントローラの要求に対してガベージコレクションを実行する単位を、前記ストレージコントローラに応答し、
前記ストレージコントローラは、前記応答に基づいてガベージコレクションを実行する単位を決定する、
ことを特徴とする情報処理装置。
【請求項５】
請求項１に記載の情報処理装置において、
前記記憶デバイスは、前記ストレージコントローラに対して、前記記憶デバイスが有する記憶領域を開示する、ことを特徴とする情報処理装置。
【請求項６】
ストレージコントローラと、
複数の記憶デバイスと、
を有し、
前記ストレージコントローラは、ホストからの書き込みリクエストに対して追記形式で記録し、セグメント単位で管理される第１のアドレス空間を有し、
前記記憶デバイスは、前記ストレージコントローラからの書き込みリクエストに対して追記形式で記録し、パリティグループ単位で管理される第２のアドレス空間を有し、
前記第１のアドレス空間において、前記ストレージコントローラがガベージコレクションを前記セグメント単位で実行し、前記第２のアドレス空間において前記記憶デバイスがガベージコレクションを前記パリティグループの単位で実行し、
前記ストレージコントローラは、前記セグメント単位を、前記パリティグループの単位の倍数とする、ことを特徴とする情報処理装置。
【請求項７】
請求項６に記載の情報処理装置において、
前記記憶デバイスは、複数のフラッシュメモリを有し、
前記記憶デバイスにより管理される前記パリティグループのサイズは、前記複数のフラッシュメモリの消去単位の倍数であり、
前記ストレージコントローラにより管理されるセグメントのサイズは、前記複数のフラッシュメモリの消去単位の倍数とする、ことを特徴とする情報処理装置。
【請求項８】
請求項７に記載の情報処理装置において、
前記ストレージコントローラは、前記第１のアドレス空間においてガベージコレクションを実行した際に、前記記憶デバイスにガベージコレクションによって空きとなった領域を通知するコマンドを発行する、ことを特徴とする情報処理装置。
【請求項９】
請求項７に記載の情報処理装置において、
前記ストレージコントローラは、前記記憶デバイスに対してガベージコレクションを実行する単位を要求し、
前記記憶デバイスは、前記ストレージコントローラの要求に対してガベージコレクションを実行する単位を、前記ストレージコントローラに応答し、
前記ストレージコントローラは、前記応答に基づいてガベージコレクションを実行する単位を決定する、
ことを特徴とする情報処理装置。
【請求項１０】
ストレージコントローラと、複数の記憶デバイスとを有する情報処理装置の記憶空間の制御方法であって、
前記ストレージコントローラは、ホストからの書き込みリクエストに対して追記形式で記録する第１のアドレス空間を管理し、
前記記憶デバイスは、前記ストレージコントローラからの書き込みリクエストに対して追記形式で記録する第２のアドレス空間を管理し、
前記ストレージコントローラは、前記第１のアドレス空間において前記ストレージコントローラがガベージコレクションを実行する単位を、前記第２のアドレス空間において前記記憶デバイスがガベージコレクションを実行する単位の倍数とする、ことを特徴とする制御方法。
【請求項１１】
請求項１０に記載の制御方法において、
前記ストレージコントローラは、前記第１のアドレス空間においてガベージコレクションを実行した際に、前記記憶デバイスにガベージコレクションによって空きとなった領域を通知するコマンドを発行する、ことを特徴とする制御方法。
【請求項１２】
請求項１０に記載の制御方法において、
前記ストレージコントローラは、前記記憶デバイスに対してガベージコレクションを実行する単位を要求し、
前記記憶デバイスは、前記ストレージコントローラの要求に対してガベージコレクションを実行する単位を、前記ストレージコントローラに応答し、
前記ストレージコントローラは、前記応答に基づいてガベージコレクションを実行する単位を決定する、
ことを特徴とする制御方法。
【請求項１３】
請求項１０に記載の制御方法において、
前記ストレージコントローラは、ホストからの書き込みリクエストに対して追記形式で記録し、セグメント単位で管理される第１のアドレス空間を有し、
前記記憶デバイスは、前記ストレージコントローラからの書き込みリクエストに対して追記形式で記録し、パリティグループ単位で管理される第２のアドレス空間を有し、
前記ストレージコントローラの前記第１のアドレス空間においてガベージコレクションを前記セグメント単位で実行し、前記記憶デバイスの前記第２のアドレス空間においてガベージコレクションを前記パリティグループの単位で実行し、
前記ストレージコントローラは、前記セグメント単位を、前記パリティグループの単位の倍数とする、ことを特徴とする制御方法。
【請求項１４】
請求項１３に記載の制御方法において、
前記記憶デバイスは、複数のフラッシュメモリを有し、
前記記憶デバイスにより管理される前記パリティグループのサイズは、前記複数のフラッシュメモリの消去単位の倍数であり、
前記ストレージコントローラにより管理されるセグメントのサイズは、前記複数のフラッシュメモリの消去単位の倍数とする、ことを特徴とする制御方法。
【請求項１５】
請求項１３に記載の制御方法において、
前記ストレージコントローラは、前記第１のアドレス空間においてガベージコレクションを実行した際に、前記記憶デバイスにガベージコレクションによって空きとなった領域を通知するコマンドを発行する、ことを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージメディアの特性を考慮して動作する情報処理装置およびその制御方法に関する。
【背景技術】
【０００２】
ストレージのデータドライブ購入コストを削減するため、圧縮・重複排除機能を搭載するストレージコントローラが主流になっている。特にプライマリストレージとして利用されるオールフラッシュアレイ（ＡＦＡ：Ａｌｌ  Ｆｌａｓｈ  Ａｒｒａｙ）にはソリッドステートドライブ（ＳＳＤ：Ｓｏｌｉｄ Ｓｔａｔｅ Ｄｒｉｖｅ）が搭載されており、そのデータ格納メディアであるフラッシュメモリ（ＦＭ）は高価である。そのため、圧縮・重複排除機能がますます重要になっている。
【０００３】
圧縮機能を搭載するストレージコントローラでは圧縮によって扱うデータが可変長になるため、データが書き換わった際に同一部分を必ずしも書き換えられるわけではない。そこで、ホストからのブロックアドレスを変換し、ストレージコントローラ内部の制御空間に対し、追記形式でデータを格納するのが一般的である。
【０００４】
このとき、データが更新されると旧データが無効化され、利用されないごみ（ガベージ）となる。ストレージコントローラは、このガベージ領域を再利用可能とするため、ある単位サイズ内の有効データを移動し、空き領域を生成するガベージコレクション（ＧＣ）を行う。このＧＣは、ホストからの書き込みとは独立して行われる。
【０００５】
一方ＦＭ自身も、ビットコストを低減するため、そのＮＡＮＤセルに複数のビットを格納する多値化を推進している。ＦＭは書き換え回数に制約があり、多値化によってビットコストは低減されるが、その書き換え可能回数は減少する。またＦＭは、累積の書き換え回数が増加するにつれて劣化し、読み出し時間が伸びるという特性がある。
【０００６】
ＦＭは物理特性上、上書きが不可能であり、一度書かれた領域を再利用するためには消去が必要となる。また一般に書き込み／読み出しを行う単位（ページと呼ぶ）よりも消去単位（ブロックと呼ぶ）が大きい。そのため、ＳＳＤにはドライブのインタフェースとして見せる論理的なアドレスと実際にＦＭにアクセスするための物理的なアドレスを変換する層があり、ＦＭへの書き込みは追記形式で行われる。このとき、上書きされた旧データはガベージとして残り、回収するためにはＳＳＤによるＧＣが必要となる。効率的なＧＣを行う技術として、特許文献１がある。特許文献１は、有効データ量が少ない領域をＧＣの対象として選択することでデータの移動を抑制する技術が開示されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１６−２１２８３５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
前述のように、ＦＭは書き換え可能回数に制約があり、ＳＳＤのＧＣにおけるデータの移動回数が増加すると、ホストからの書き込み量に関わらずＦＭの劣化が進行する。そのため、ＳＳＤの寿命が短くなったり、エラー訂正により読み出し時間がより早く伸びるようになる。また、ＧＣによるデータ移動と、本来行うべきストレージコントローラからのリード／ライト処理が衝突すると、ＳＳＤのリード／ライト性能が悪化する。
【０００９】
ストレージコントローラがＧＣを行う単位は、ストレージコントローラの事情に合わせて任意に設定が可能である。一方、ＳＳＤのＧＣはＦＭの物理構成に基づき消去単位の倍数で行わざるを得ない。これら２種類のＧＣは通常各々独立して行われるため、ストレージコントローラのＧＣによるデータの移動とＳＳＤのＧＣによるデータの移動もそれぞれ独立に発生する。すると、ＦＭの書き換え回数が二重で増加し、ＦＭの寿命劣化をさらに加速させてしまう。
【００１０】
しかし、上記特許文献１では、ストレージコントローラのＧＣとＳＳＤのＧＣが二重で発生する課題については言及されていない。
【００１１】
そこで、本発明の課題は、ストレージコントローラのＧＣ単位をＳＳＤのＦＭのブロックの整数倍とすることで、ＳＳＤのＧＣ時にデータの移動を少なくする情報処理装置、情報処理装置の記憶空間の制御方法を提供することである。
【課題を解決するための手段】
【００１２】
本発明に係る情報処理装置は、好ましくは、ストレージコントローラと、記憶デバイスと、を有し、ストレージコントローラは、ホストからの書き込みリクエストに対して追記形式で記録する第１のアドレス空間を管理し、記憶デバイスは、ストレージコントローラからの書き込みリクエストに対して追記形式で記録する第２のアドレス空間を管理し、ストレージコントローラは、第１のアドレス空間においてストレージコントローラがガベージコレクションを実行する単位を、第２のアドレス空間において記憶デバイスがガベージコレクションを実行する単位の倍数とする。
【００１３】
また、本発明に係る情報処理装置は、好ましくは、ストレージコントローラと、複数の記憶デバイスとを有し、ストレージコントローラは、ホストからの書き込みリクエストに対して追記形式で記録し、セグメント単位で管理される第１のアドレス空間を有し、記憶デバイスは、ストレージコントローラからの書き込みリクエストに対して追記形式で記録し、パリティグループ単位で管理される第２のアドレス空間を有し、第１のアドレス空間において、ストレージコントローラがガベージコレクションをセグメント単位で実行し、第２のアドレス空間において記憶デバイスがガベージコレクションをパリティグループの単位で実行し、ストレージコントローラは、セグメント単位を、パリティグループの単位の倍数とする。
【００１４】
また、本発明に係る情報処理装置の記憶空間の制御方法は、好ましくは、ストレージコントローラは、ホストからの書き込みリクエストに対して追記形式で記録する第１のアドレス空間を管理し、記憶デバイスは、ストレージコントローラからの書き込みリクエストに対して追記形式で記録する第２のアドレス空間を管理し、ストレージコントローラは、第１のアドレス空間においてストレージコントローラがガベージコレクションを実行する単位を、第２のアドレス空間において記憶デバイスがガベージコレクションを実行する単位の倍数とする。
【発明の効果】
【００１５】
本発明によれば、ガベージコレクションによるデータ移動を抑えることで、ＳＳＤの寿命を伸ばすことができ、ＳＳＤの寿命劣化によるエラー訂正処理の軽減等により性能の改善も図ることができる。
【図面の簡単な説明】
【００１６】
【図１】ストレージシステムを含む情報システムの構造を示す図である。
【図２】ＳＳＤの内部構造を示す図である。
【図３】ストレージシステムの記憶領域の階層構造を示す図である。
【図４】ストレージコントローラのアドレスマッピング情報を管理するテーブルを示す図である。
【図５】ホスト計算機がストレージコントローラに発行するライトリクエストの構造を示す図である。
【図６】新規ライトを行った際のストレージコントローラのアドレスマッピングの論理的構造を示す図である。
【図７】上書きライトを行った際のストレージコントローラのアドレスマッピングの論理的構造を示す図である。
【図８】ストレージコントローラのライトリクエスト処理を示すフローチャートである。
【図９】ガベージコレクションを行った際のストレージコントローラのアドレスマッピングの論理的構造を示す図である。
【図１０】ストレージコントローラのガベージコレクション処理を示すフローチャートである。
【図１１】ＳＳＤのアドレスマッピング情報を管理するテーブルを示す図である。
【図１２】ストレージコントローラがＳＳＤに発行するライトリクエストの構造を示す図である。
【図１３】新規ライトを行った際のＳＳＤのアドレスマッピングの論理的構造を示す図である。
【図１４】ＳＳＤのライトリクエスト処理を示すフローチャートである。
【図１５】ＳＳＤのガベージコレクション処理を示すフローチャートである。
【図１６】従来技術における、セグメントに着目したストレージコントローラとＳＳＤのアドレスマッピングの論理的構造を示す図である。
【図１７】従来技術における、セグメントに着目したＳＳＤへの新規ライト、上書きライトおよびガベージコレクションを示す図である。
【図１８】ストレージコントローラのセグメント作成処理を示すフローチャートである。
【図１９】セグメントサイズを調整した際のストレージコントローラとＳＳＤのアドレスマッピングの論理的構造を示す図である。
【図２０】セグメントサイズを調整した際のストレージコントローラのＳＳＤへの新規ライトおよび上書きライトを示す図である。
【図２１】ＳＳＤのアンマップ処理を示すフローチャートである。
【図２２】ストレージコントローラのオーバープロビジョニングを実施しないＳＳＤへの新規ライトおよびアンマップ処理を示す図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、各実施例は本発明を実現するための一例であり、本発明の技術的範囲を限定するものではない。また、各図において共通の構成については同一の参照番号が付されている。
【実施例１】
【００１８】
以下、図面を参照して本発明の実施形態を説明する。以下の記載および図面は、本発明を説明するための例示であって、説明の明確化のため、適宜、省略および簡略化がなされている。本発明は、他の種々の形態でも実施する事が可能である。特に限定しない限り、各構成要素は単数でも複数でも構わない。
【００１９】
図面において示す各構成要素の位置、大きさ、形状、範囲などは、発明の理解を容易にするため、実際の位置、大きさ、形状、範囲などを表していない場合がある。このため、本発明は、必ずしも、図面に開示された位置、大きさ、形状、範囲などに限定されない。
【００２０】
以下の説明では、「テーブル」、「リスト」、「キュー」等の表現にて各種情報を説明することがあるが、各種情報は、これら以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ＸＸテーブル」、「ＸＸリスト」等を「ＸＸ情報」と呼ぶことがある。識別情報について説明する際に、「識別情報」、「識別子」、「名」、「ＩＤ」、「番号」等の表現を用いるが、これらについてはお互いに置換が可能である。
【００２１】
同一あるいは同様な機能を有する構成要素が複数ある場合には、同一の符号に異なる添字を付して説明する場合がある。ただし、これらの複数の構成要素を区別する必要がない場合には、添字を省略して説明する場合がある。
【００２２】
また、以下の説明では、プログラムを実行して行う処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ、ＧＰＵ）によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）および／またはインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主体がプロセッサとされてもよい。同様に、プログラムを実行して行う処理の主体が、プロセッサを有するコントローラ、装置、システム、計算機、ノードであってもよい。プログラムを実行して行う処理の主体は、演算部であれば良く、特定の処理を行う専用回路（例えばＦＰＧＡやＡＳＩＣ）を含んでいてもよい。
【００２３】
プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサと配布対象のプログラムを記憶する記憶資源を含み、プログラム配布サーバのプロセッサが配布対象のプログラムを他の計算機に配布してもよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２４】
＜システム構成の概要＞
図１は、本発明を含む計算機システム１００の概要を示している。計算機システム１００は、ホスト計算機１０１と、ストレージシステム１０２を有する。ホスト計算機１０１とストレージシステム１０２は、ネットワーク１０３で接続されている。ネットワーク１０３は例えば、ファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ Ａｒｅａ Ｎｅｔｗｏｒｋ）である。またネットワーク１０３はＳＣＳＩコマンドが転送可能なプロトコルでもよいし、その他のＩ／Ｏプロトコルを使用してもよい。
【００２５】
ホスト計算機１０１はユーザのアプリケーションプログラムを実行する計算機であり、ストレージシステム１０２の論理的な記憶領域にネットワーク１０３経由でアクセスする。ストレージシステム１０２は、ホスト計算機からの要求に応じてＳＳＤ１０５にデータを格納したり、格納されたデータを取り出す。
【００２６】
なお、実施例１では、ホスト計算機１０１とストレージシステム１０２が共に１台ずつであるが、複数台のホスト計算機１０１がネットワーク１０３を介してストレージシステム１０２に接続されていたり、複数のストレージシステム１０２で冗長構成されていてもよい。また、ＳＤＳ（Ｓｏｆｔｗａｒｅ  Ｄｅｆｉｎｅｄ  Ｓｔｏｒａｇｅ）のように、同一のハードウェア資源で、ホスト計算機１０１とストレージシステム１０２のそれぞれの機能を単独あるいは複数台の計算機で実現することもできる。
【００２７】
ストレージシステム１０２は、ストレージコントローラ（または単にコントローラ）１０４と、ＳＳＤ１０５を有する。ストレージコントローラ１０４は、Ｃｏｎｔｒｏｌｌｅｒ ＣＰＵ（Ｃｅｎｔｒａｌ Ｐｒｏｃｅｓｓｉｎｇ Ｕｎｉｔ）１０７と、Ｃｏｎｔｒｏｌｌｅｒ ＲＡＭ（Ｒａｎｄｏｍ Ａｃｃｅｓｓ Ｍｅｍｏｒｙ）１０８と、ＦＥ  Ｉ／Ｆ（Ｆｒｏｎｔｅｎｄ  Ｉｎｔｅｒｆａｃｅ）１０９と、ＢＥ  Ｉ／Ｆ（Ｂａｃｋｅｎｄ Ｉｎｔｅｒｆａｃｅ）１１０を有する。ストレージコントローラ１０４の各部は、バスを介して接続される。
【００２８】
Ｃｏｎｔｒｏｌｌｅｒ ＲＡＭ１０８は、Ｃｏｎｔｒｏｌｌｅｒ  ＣＰＵ１０７上で動作するストレージシステム１０２を制御するためのプログラムおよびメタデータを格納する領域と、データを一時的に格納するキャッシュメモリを含む。またＣｏｎｔｒｏｌｌｅｒ ＲＡＭ１０８は、一般にＤＲＡＭ等の揮発性記憶媒体が用いられるが、不揮発性記憶媒体が用いられてもよい。また、実施例１のストレージコントローラ１０４はハードウェア（図示せず）もしくはソフトウェアによる圧縮機能を有する。但し、必ずしも圧縮機能を有さなくてもよい。
【００２９】
ＦＥ Ｉ／Ｆ１０９は、ネットワーク１０３に接続するインタフェースである。またＢＥ Ｉ／Ｆ１１０は、ＳＳＤ１０５に接続するインタフェースである。実施例１において、ストレージシステム１０２は高信頼化のため複数の記憶媒体をＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ（Ｉｎｅｘｐｅｎｓｉｖｅ）  Ｄｉｓｋｓ）機能を用いて、ＲＡＩＤ  グループ（ＲＧ）１０６として制御する。例えば図１では、ＳＳＤ１０５（Ａ）、（Ｂ）、（Ｃ）、（Ｄ）をＲＧとして構成している。ただし本発明は、ストレージシステム１０２にＲＧを構成する機能が無くても有効である。
【００３０】
ＳＳＤ１０５は、ホスト計算機１０１からの書き込みデータを記憶するための不揮発性記憶媒体を含む。記憶媒体としては、例えばフラッシュメモリを用いることができるが、その他の媒体を用いても良い。
【００３１】
＜ＳＳＤの概要＞
図２は、記憶デバイスであるＳＳＤ（Ｓｏｌｉｄ Ｓｔａｔｅ Ｄｒｉｖｅ）１０５の内部構成の概要を示している。ＳＳＤ１０５は、ＳＳＤコントローラ２００と、フラッシュメモリ２０１を有する。ＳＳＤコントローラ２００は、Ｄｒｉｖｅ  ＣＰＵ２０２と、Ｄｒｉｖｅ  ＲＡＭ２０３と、Ｄｒｉｖｅ  Ｉ／Ｆ２０４と、Ｆｌａｓｈ  Ｉ／Ｆ２０５を有する。ＳＳＤコントローラの各部は、バスを介して接続される。各ＳＳＤ１０５には複数のフラッシュメモリ２０１が搭載されるが、単独のフラッシュメモリ２０１であっても良い。
【００３２】
Ｄｒｉｖｅ ＲＡＭ２０３は、Ｄｒｉｖｅ ＣＰＵ２０２上で動作するＳＳＤを制御するためのプログラムおよびメタデータを格納する領域と、データを一時的に格納する領域を含む。またＤｒｉｖｅ  ＲＡＭ２０３は、一般にＤＲＡＭ等の揮発性記憶媒体が用いられるが、不揮発性記憶媒体が用いられてもよい。
【００３３】
Ｄｒｉｖｅ  Ｉ／Ｆ２０４は、ストレージコントローラ１０４に接続するインタフェースである。またＦｌａｓｈ  Ｉ／Ｆは、フラッシュメモリ２０１に接続するインタフェースである。フラッシュメモリ２０１のデータ格納領域は、消去単位であるブロック２０６を複数有する。また、ブロック２０６はリード／ライト単位であるページ２０７を有する。
【００３４】
＜記憶領域の階層構造概要＞
図３は、実施例１にかかる記憶領域における階層構造を模式的に表した一例を示す。ホストアドレス空間３００は、ホスト計算機１０１が認識するストレージコントローラ１０４のアドレス空間である。実施例１ではストレージコントローラ１０４がホスト計算機１０１に認識させるホストアドレス空間３００は１つだが、複数有していてもよい。ストレージコントローラは、ホストアドレス空間３００を管理し、ホスト１０１にアドレス空間として提供する。ホストアドレス空間３００は、ストレージコントローラ１０４のＨ−Ｃ変換テーブル３０１によってコントローラアドレス空間３０２にマッピングされる。コントローラアドレス空間３０２は、ライトリクエストを受領した順に従って前詰めでデータが格納される追記形式の空間になっている。また、コントローラアドレス空間３０２はＣ−Ｈ変換テーブル３０３によってホストアドレス空間３００にマッピングされる。ドライブアドレス空間３０５は、コントローラが認識する各ＳＳＤのアドレス空間である。Ｃ−Ｄ変換テーブル３０４は、コントローラアドレス空間３０２から、各ＳＳＤ１０５と、そのＳＳＤのドライブアドレス空間３０５へアドレスをマッピングする。
【００３５】
ホストアドレス空間３００、コントローラアドレス空間３０２、ドライブアドレス空間３０５は、ストレージコントローラ１０４によって管理され、上記の各種変換テーブル（Ｈ−Ｃ変換テーブル３０１、Ｃ−Ｈ変換テーブル３０３、Ｃ−Ｄ変換テーブル３０４）によって、各層のアドレスが対応付けられている。
【００３６】
Ｄ−Ｆ変換テーブル３０６は、ドライブアドレス空間３０５からフラッシュメモリ２０１と、当該フラッシュメモリ２０１のＦＭアドレス空間３０７へアドレスをマッピングする。ＳＳＤ１０５のＳＳＤコントローラ２００は、ＦＭアドレス空間３０７を管理する。またＦ−Ｄ変換テーブル３０８は、ＦＭアドレス空間３０７からドライブアドレス空間３０５へマッピングする。
【００３７】
Ｈ−Ｃ変換テーブル３０１、Ｃ−Ｈ変換テーブル３０３、Ｃ−Ｄ変換テーブル３０４は通常、それぞれＣｏｎｔｒｏｌｌｅｒ  ＲＡＭ１０８に格納されるが、これらのテーブルを一部ＳＳＤ１０５に格納されてもよい。また、Ｄ−Ｆ変換テーブル３０６およびＦ−Ｄ変換テーブル３０８は通常、それぞれＤｒｉｖｅ  ＲＡＭ２０３に格納されるが、これらのテーブルを一部フラッシュメモリ２０１に格納されてもよい。
【００３８】
ドライブアドレス空間３０５、ＦＭアドレス空間３０７は、ＳＳＤ１０５のＳＳＤコントローラ２００によって管理され、Ｄ−Ｆ変換テーブル３０６およびＦ−Ｄ変換テーブル３０８によって、各層のアドレスが対応付けられている。
【００３９】
なお、本発明は図３の階層構造に限定されるものではなく、ストレージコントローラ１０４はコントローラアドレス空間３０２よりもホスト側かつ/あるいはドライブ側にさらに階層があってもよく、ＳＳＤはドライブアドレス空間３０５とＦＭアドレス空間３０７の間にさらに階層があってもよい。
【００４０】
＜ストレージコントローラにおけるアドレス変換テーブル詳細＞
図４は、ストレージコントローラ１０４が有するＨ−Ｃ変換テーブル３０１、Ｃ−Ｈ変換テーブル３０３、Ｃ−Ｄ変換テーブル３０４の詳細を示す図である。Ｈ−Ｃ変換テーブル３０１は、フィールドとしてホストアドレス５１０、コントローラアドレス空間３０２におけるセグメント番号５２０、セグメントオフセット５３０、圧縮後サイズ５４０を有する。ホストアドレス５１０は、ホストアドレス空間３００内の位置を表す。例えば、ブロックアドレスである。セグメント番号５２０は、コントローラアドレス空間３０２に割り当てられた、ある一定のサイズからなるセグメント（詳細は後述）を一意に表す番号である。セグメントオフセット５３０は、当該行が表すデータのセグメント内での先頭の位置を示す。
【００４１】
コントローラアドレス空間内の位置は、セグメント番号５２０とセグメントオフセット５３０によって表される。圧縮後サイズ５４０は、ライトリクエスト４００のデータ(図５参照)を圧縮した後のデータサイズを表す。これらの情報により、あるホストアドレスに対するコントローラアドレスの位置を一意に特定できる。
【００４２】
例えば、ホストアドレス５１０が「１００」に対して、コントローラアドレス空間３０２は、セグメント番号５２０が「１００」、セグメントオフセット５３０が「０」、圧縮後サイズ５４０が「８」と対応付けられている。
【００４３】
Ｃ−Ｈ変換テーブル３０３は、フィールドとしてコントローラアドレス空間３０２におけるセグメント番号６１０、セグメントオフセット６２０、圧縮後サイズ６３０、ホストアドレス６４０を有する。セグメント番号６１０は、コントローラアドレス空間３０２に割り当てられた、ある一定サイズのセグメントを表す番号である。セグメントオフセット６２０は、当該行が表すデータのセグメント内での先頭の位置を示す。コントローラアドレス空間内の位置は、セグメント番号６１０とセグメントオフセット６２０によって表される。圧縮後サイズ６３０は、ライトリクエスト４００のデータ(図５参照)を圧縮した後のデータサイズを表す。ホストアドレス５１０は、ホストアドレス空間３００内の位置を表す。
【００４４】
例えば、コントローラアドレス空間３０２において、セグメント番号６１０が「１００」、セグメントオフセット６２０が「０」、圧縮後サイズ６３０が「８」に対して、ホストアドレス６４０の「１００」が対応付けられている。
【００４５】
Ｃ−Ｄ変換テーブル３０４は、コントローラアドレス空間３０２における、フィールドとしてセグメント番号７１０、セグメントオフセット７２０、圧縮後サイズ７３０と、ドライブアドレス空間３０５における、ドライブ番号７４０、ドライブアドレス７５０、ドライブアドレスオフセット７６０を有する。セグメント番号７１０は、コントローラアドレス空間３０２に割り当てられたセグメントを表す番号である。セグメントオフセット７２０は、当該行が表すデータのセグメント内での先頭の位置を示す。コントローラアドレス空間内の位置は、セグメント番号７１０とセグメントオフセット７２０によって表される。圧縮後サイズ７３０は、ライトリクエスト４００のデータを圧縮した後のデータサイズを表す。ドライブ番号７４０は、ＳＳＤ１０５を一意に表す番号である。ドライブアドレス７５０は、ドライブ番号７４０で指定されたＳＳＤ１０５のドライブアドレス空間３０５内の位置を表す。ドライブアドレスオフセット７６０は、ドライブアドレス７５０で指定されたアドレス内のオフセットを表す。
【００４６】
例えば、コントローラアドレス空間３０２において、セグメント番号７１０が「１００」、セグメントオフセット７２０が「０」、圧縮後サイズ７３０が「８」に対して、ドライブアドレス空間３０５のドライブ番号７４０が「０」、ドライブアドレス７５０が「２００」、ドライブアドレスオフセット７６０が「０」と対応付けられている。
【００４７】
＜ストレージコントローラにおけるライトリクエスト処理とアドレスマッピングの概要＞
図５は、ホスト計算機１０１がストレージシステム１０２に対してライトをリクエストする際の情報の一例を示す。ライトリクエスト４００は、ホストアドレス４０１、ライトサイズ４０２、ライトデータ４０３を含む。
【００４８】
図６は、実施例１にかかるコントローラにおけるアドレスマッピングの対応関係を模式的に表した一例を示す。ここでは例えば、ホスト計算機１０１が４００（Ａ）、４００（Ｂ）、４００（Ｃ）の順でライトをリクエストしたとする。実施例１では圧縮機能を持ち、ストレージコントローラ１０４がそれぞれのリクエストのライトデータ４０３（Ａ）、４０３（Ｂ）、４０３（Ｃ）を圧縮し圧縮データ４０４（Ａ）、４０４（Ｂ）、４０４（Ｃ）を生成した後、これら圧縮データをそれぞれホストアドレス空間３００とコントローラアドレス空間３０２にマッピングする。具体的には、Ｈ−Ｃ変換テーブル３０１とＣ−Ｈ変換テーブル３０３のエントリをそれぞれ追加する。このとき、コントローラアドレス空間３０２は追記形式の構造のため、図６に示す通り、リクエスト順に前詰めでデータが格納される。
【００４９】
また実施例１において、ストレージコントローラ１０４によって、コントローラアドレス空間３０２は、ドライブアドレス空間３０５にオンデマンドでマッピングされる。このマッピングを行う制御単位をセグメント６００と呼ぶ。ストレージコントローラ１０４が新規にセグメントを確保する際は、仮想的なセグメントプール空間６０２と呼ぶプール領域から任意のセグメントを選択し、コントローラアドレス空間にマッピングする。セグメントプール空間６０２は、ドライブアドレス空間３０５のリソースを一括管理する仮想的なプールである。セグメント６００は一般にはＲＧの一部を切り出した領域で、そのサイズは例えば４２ＭＢである。
【００５０】
セグメント６００の確保、つまりコントローラアドレス空間３０２からドライブアドレス空間３０５へのマッピングは、実際にはＣ−Ｄ変換テーブル３０４を更新することで行う。また、コントローラアドレス空間３０２にはマッピングが行われた最後のアドレスを示すコントローラアドレス末尾ポインタ６０１があり、ホスト計算機１０１からのライトデータはこの末尾ポインタがある部分に追記される。
【００５１】
図７は、図６の状態からホスト計算機１０１が上書きを実施した際の様子を模式的に表す。ホスト計算機１０１が、図６のライトデータ４０３（Ｂ）、４０３（Ｃ）が格納されたホストアドレスに対して、それぞれライトリクエスト４００（Ｄ）、４００（Ｅ）を発行したとする。ストレージコントローラ１０４はライトデータ４０３（Ｄ）、４０３（Ｅ）をそれぞれ圧縮し圧縮データ４０４（Ｄ）、４０４（Ｅ）を生成した後、これら圧縮データをコントローラアドレス空間３０２にマッピングする。このとき、前述のようにコントローラアドレス空間３０２は追記形式の構造であり、各データはコントローラアドレス末尾ポインタ６０１を起点にライト順にマッピングされる。その際、Ｈ−Ｃ変換テーブル３０１とＣ−Ｈ変換テーブル３０３はそれぞれ更新されるが、旧データは、Ｃ−Ｈ変換テーブル３０３上にマッピングするがＨ−Ｃ変換テーブル３０１上にはマッピングしない。即ち、Ｈ−Ｃ変換テーブル３０１上にはマッピングしないため、ホスト１０１からは参照しないとなる。Ｃ−Ｈ変換テーブル３０３上にマッピングされているため、一つのホストアドレス（データ４０３（Ｄ）が格納されているアドレス）に対し、二つのコントローラアドレス（コントローラガベージ６０３と新データ４０４（Ｄ）が格納されている６０４）の対応が管理される。
【００５２】
コントローラガベージ６０３は、ホストアドレス空間３００へ上書きを行うたびに発生する。すると、ホストアドレス空間３００上では容量に余裕があるにもかかわらず、コントローラアドレス空間３０２上ではガベージのため書き込み先が枯渇する状態が発生する。ガベージコレクション（ＧＣ）は、この問題を防止するために実施される。また、コントローラガベージ６０３がある程度溜まった状態でも動作可能にするため、ホストアドレス空間３００よりもコントローラアドレス空間３０２を大きくするオーバープロビジョニングが行われるのが一般的である。
【００５３】
＜ストレージコントローラのライトリクエスト処理フロー＞
上記の処理手順は、ストレージコントローラ１０４で実行される図８のフローチャートで表すことができる。なお本処理手順の項目は、ライトリクエスト４００と各アドレス空間の関係についての処理に着目した一例であり、その順序や処理内容について限定するものではない。
【００５４】
（Ｓ１００）ストレージコントローラ１０４がＦＥ  Ｉ／Ｆ１０９を介してホスト計算機１０１からのライトリクエストを受領する。ライトリクエストは、ライト先を示すホストアドレス、ライトするサイズ、ライトするデータ等を含む。
【００５５】
（Ｓ１０２）ライトリクエストされたデータが、コントローラアドレス末尾ポインタ６０１の示すセグメント６００の空き領域に収まるかどうかを、判断する。
空き領域に収まる場合、手順Ｓ１１０に進む。
空き領域に収まらない場合、手順Ｓ１０４に進む。
【００５６】
（Ｓ１０４）ＧＣが必要かどうかを判定する。判定の閾値は、例えばストレージシステム１０２の使用容量が９０％以上となった場合や、空き容量が１００ＧＢ以下となった場合などが考えられるが、他の閾値でもよい。ここで重要なのは、ホスト計算機１０１から見た空き容量が十分あるにもかかわらず、コントローラガベージ６０３によって新規のセグメントが割り当てられず動作不能となる状況を回避することである。
ＧＣが不要である場合、Ｓ１０８に進む。
ＧＣが必要である場合、Ｓ１０６に進む。
【００５７】
なお、後に示すストレージコントローラ１０４のＧＣ中の処理としてライトリクエスト処理が行われた場合は、ＧＣ不要と判定する。
【００５８】
（Ｓ１０６）ストレージコントローラ１０４がＧＣを実施する。ＧＣの詳細については後に示す図１０の１１００にて詳述する。
【００５９】
（Ｓ１０８）ストレージコントローラ１０４がプール６０２からセグメント６００を新規に割り当てる。
【００６０】
（Ｓ１１０）Ｈ−Ｃ変換テーブル３０１を更新する。具体的には、まずライトリクエスト４００が示すホストアドレスに該当する行をＨ−Ｃ変換テーブル３０１のホストアドレス５１０から選択する。その後、当該行の各エントリを、コントローラアドレス末尾ポインタ６０１が指し示している、つまりライトを実施するコントローラアドレス空間３０２に相当するセグメントＩＤ５２０、セグメントオフセット５３０、圧縮後サイズ５４０に書き換える。
【００６１】
（Ｓ１１２）Ｃ−Ｈ変換テーブル３０３を更新するために、まずＣ−Ｈ変換テーブル３０３の新しい行を確保する。次に、コントローラアドレス末尾ポインタ６０１が指し示しているコントローラアドレス空間３０２に相当するセグメントＩＤ６１０、セグメントオフセット６２０、圧縮後サイズ６３０と、ライトリクエスト４００が示すホストアドレス６４０をＣ−Ｈ変換テーブル３０３に確保した行に追記する。
【００６２】
（Ｓ１１４）Ｃ−Ｄ変換テーブル３０４を更新するために、まずＣ−Ｄ変換テーブル３０４の新しい行を確保する。次に、コントローラアドレス末尾ポインタ６０１が指し示しているコントローラアドレス空間３０２に相当するセグメントＩＤ７１０、セグメントオフセット７２０、圧縮後サイズ７３０と、ドライブ番号７４０、ドライブアドレス７５０、ドライブアドレスオフセット７６０をＣ−Ｄ変換テーブル３０４に確保した行に追記する。
【００６３】
（Ｓ１１６）Ｓ１１４にて追記したドライブアドレスに対して、ライトリクエストをＢＥ  Ｉ／Ｆを介して送信する。
【００６４】
＜ストレージコントローラのＧＣ＞
図９は、図７の状態からストレージコントローラ１０４がＧＣを実施した様子を模式的に表す。まず、ストレージコントローラ１０４がセグメント６００（Ａ）をＧＣ対象としたとする。ストレージコントローラ１０４は、ＧＣ対象としたセグメント中の各データが有効かどうかを確認する。有効であった場合、ストレージコントローラ１０４は当該データをコントローラアドレス末尾ポインタ６０１がある部分に追記すると共に、Ｈ−Ｃ変換テーブル３０１、Ｃ−Ｈ変換テーブル３０３、Ｃ−Ｄ変換テーブル３０４のコントローラアドレスをそれぞれ新しいアドレスに更新する。一方データが有効でなかった場合は何もしない。
【００６５】
ストレージコントローラ１０４がセグメント６００（Ａ）の全領域を確認した後、当該セグメントは全てホストアドレス空間３００からアクセスされない領域となるため、ストレージコントローラ１０４がセグメント６００（Ａ）を解放する。ストレージコントローラ１０４は、以上の動作により、ガベージ領域を回収する。なおストレージコントローラ１０４のＧＣは、ライトリクエスト処理時のほか、ホスト計算機１０１からのリクエストがない場合にも任意のタイミングで実施してよい。
【００６６】
＜ストレージコントローラのＧＣ処理フロー＞
上記のストレージコントローラによるＧＣ処理手順は、図１０のフローチャート１１００で表すことができる。
【００６７】
（Ｓ２００）ストレージコントローラ１０４がＧＣの対象とするセグメントを選択する。対象のセグメントは、例えばコントローラアドレスの先頭から順にセグメントを確認し、セグメント内の全領域に対するガベージの割合が１０％以上の場合に当該セグメントを選択する等の方法が考えられるが、他のアルゴリズムを使用してもよい。
【００６８】
（Ｓ２０２）ストレージコントローラ１０４が、Ｃ−Ｈ変換テーブル３０３中で、Ｓ２００で選択したセグメントかつＧＣ開始後これまで未確認のエントリを選択する。未確認のエントリとは、図４で示した各エントリである。一つのセグメントに対し、複数のエントリが存在するため、未確認エントリの選択を行っている。
【００６９】
（Ｓ２０４）ストレージコントローラ１０４がＳ２０２で選択したエントリを参照し、ホストアドレスのフィールド６４０を確認する。
【００７０】
（Ｓ２０６）ストレージコントローラ１０４が、Ｈ−Ｃ変換テーブル３０１中で、Ｓ２０４で確認したホストアドレスに対応するエントリを選択する。
【００７１】
（Ｓ２０８）ストレージコントローラ１０４がＳ２０６で選択したエントリを参照し、コントローラアドレスを表すセグメント番号５２０とセグメントオフセット５３０を確認する。
【００７２】
確認したコントローラアドレスが、Ｓ２０２で選択したエントリのコントローラアドレスと一致していれば当該コントローラアドレスに格納されているデータは有効であり、Ｓ２１０に進む。
【００７３】
確認したコントローラアドレスが、Ｓ２０２で選択したエントリのコントローラアドレスと不一致であれば、確認したコントローラアドレスに格納されているデータはガベージであり、Ｓ２１２に進む。
【００７４】
（Ｓ２１０）ストレージコントローラ１０４がＳ２０２で選択したエントリのコントローラアドレスに格納されているデータを読み出し、当該データのホストアドレスと合わせてライトリクエスト４００を作成し、図８に示したライトリクエスト処理１０００を行う。
【００７５】
（Ｓ２１２）ストレージコントローラ１０４がＣ−Ｈ変換テーブル３０３中のＳ２０２で選択したエントリを削除する。Ｃ−Ｈ変換テーブル３０３中のエントリの削除は、セグメント単位でまとめて行うこともできる。
【００７６】
（Ｓ２１４）ストレージコントローラ１０４が、Ｃ−Ｈ変換テーブル３０３中にＳ２００で選択したＧＣ対象セグメントのエントリが存在するかどうか確認する。
エントリが存在する場合、Ｓ２０２に戻る。
エントリが存在しない場合、Ｓ２１６に進む。
【００７７】
（Ｓ２１６）ストレージコントローラ１０４が、ＧＣ対象セグメントを解放する。
その際、ストレージコントローラ１０４がＳＳＤ１０５に当該ドライブアドレスの解放を通知してもよい。解放の通知は、ＳＣＳＩのＵＮＭＡＰコマンドを発行することによって実現できる。なお本処理は、コントローラアドレス空間３０２がオーバープロビジョニングされていた場合必須ではない。実施例１の以降の説明でも、解放の通知は前提としない。
【００７８】
＜ＳＳＤコントローラにおけるアドレス変換テーブルの詳細＞
図１１は、ＳＳＤ１０５が有するＤ−Ｆ変換テーブル３０６とＦ−Ｄ変換テーブル３０８の詳細を示す図である。Ｄ−Ｆ変換テーブル３０６は、フィールドとしてドライブアドレス８１０、ＦＭ番号８２０、ブロック番号８３０、ページ番号８４０、ページオフセット８５０を有する。ドライブアドレス８１０は、ＳＳＤ１０５のドライブアドレス空間３０５内の位置を表す。ＦＭ番号８２０は、ＳＳＤ１０５が有するＦＭを一意に表す。ブロック番号８３０は、ＦＭ番号８２０で示したＦＭ内のブロックを一意に表す。ページ番号８３０は、ブロック番号８３０で示したブロック内のページを一意に表す。ページオフセット８５０は、当該行が表すデータのページ内での先頭の位置を示す。ドライブアドレス空間３０５のドライブアドレス８１０が「２００」と、ＦＭアドレス空間３０７のＦＭ番号８２０が「２」、ブロック番号８３０が「５０」、ページ番号８４０が「０」、ページオフセット８５０が「０」を対応している。
【００７９】
Ｆ−Ｄ変換テーブル３０８は、フィールドとしてＦＭ番号９１０、ブロック番号９２０、ページ番号９３０、ページオフセット９４０、ドライブアドレス９５０を有する。ＦＭ番号９１０は、ＳＳＤ１０５が有するＦＭを一意に表す。ブロック番号９２０は、ＦＭ番号９１０で示したＦＭ内のブロックを一意に表す。ページ番号９３０は、ブロック番号９２０で示したブロック内のページを一意に表す。ページオフセット９４０は、当該行が表すデータのページ内での先頭の位置を示す。ドライブアドレス９５０は、ＳＳＤ１０５のドライブアドレス空間３０５内の位置を表す。
【００８０】
＜ＳＳＤにおけるライトリクエスト処理とアドレスマッピングの概要＞
図１２は、ストレージシステム１０２がＳＳＤ１０５に対してライトをリクエストする際の情報の一例を示す。ライトリクエスト４１０は、ドライブアドレス４１１、ライトサイズ４１２、ライトデータ４１３を含む。
【００８１】
図１３は、実施例１にかかるＳＳＤ１０５におけるアドレスマッピングの対応関係を模式的に表した一例を示す。ここでは例えば、ストレージコントローラ１０４が４１０（Ａ）、４１０（Ｂ）、４１０（Ｃ）の順でライトをリクエストしたとする。ＳＳＤコントローラ２００は、これらのリクエストがもつライトデータ４１３（Ａ）、４１３（Ｂ）、４１３（Ｃ）をそれぞれドライブアドレス空間３０５とＦＭアドレス空間３０７にマッピングする。具体的には、Ｄ−Ｆ変換テーブル３０６とＦ−Ｄ変換テーブル３０８のエントリをそれぞれ追加する。また実施例１において、ストレージコントローラによりドライブアドレス空間３０５は、ＦＭアドレス空間３０７にオンデマンドでマッピングされる。このマッピングを行う制御単位をＰａｒｉｔｙ Ｇｒｏｕｐ（ＰＧ）７００と呼ぶ。ＰＧ７００は、ＦＭの任意のブロックを１以上含む集合である。これは、後に示すＳＳＤのＧＣ時に実施するデータ消去が、ＦＭの物理制約上ブロック単位で実施されるためである。ＳＳＤ１０５が新規にＰＧを確保する際は、仮想的なＰＧプール空間７０２と呼ぶプール領域から任意のＰＧを選択し、ＦＭアドレス空間３０７にマッピングする。ＰＧプール空間７０２は、ＦＭアドレス空間３０７のリソースを一括管理する仮想的なプールである。ＦＭアドレス空間３０７はＰＧ単位で追記形式の構造を持ち、リクエスト順に前詰めでデータが格納される。
【００８２】
また、ＦＭアドレス空間３０７にはマッピングが行われた最後のアドレスを示すＦＭアドレス末尾ポインタ７０１があり、ストレージコントローラ１０４からのライトデータはこのＦＭアドレス末尾ポインタ７０１がある部分に追記される。さらに、ガベージがある程度溜まった状態でも動作可能にするため、ストレージコントローラ１０４と同様にＳＳＤ１０５内部でもドライブアドレス空間３０５よりもＦＭアドレス空間３０７を大きくするオーバープロビジョニングが行われるのが一般的である。
【００８３】
＜ＳＳＤのライトリクエスト処理フロー＞
上記の処理手順は、ＳＳＤコントローラ２００により実行される図１４のフローチャート１４００で表すことができる。なお本処理手順は、ストレージコントローラ１０４からのライトリクエストと各アドレス空間の関係についての処理に着目したシーケンスであり、その順序や処理内容について限定するものではない。
【００８４】
（Ｓ５００）ＳＳＤコントローラ２００がＤｒｉｖｅ  Ｉ／Ｆ２０４を介してストレージコントローラ１０４からのライトリクエスト４１０を受領する。
【００８５】
（Ｓ５０２）ライトリクエストされたデータが、ＦＭアドレス末尾ポインタ７０１の示すＰＧの空き領域に収まるかどうかを、ライトサイズ４１２をもとに判断する。
空き領域に収まる場合、手順Ｓ５１０に進む。
空き領域に収まらない場合、手順Ｓ５０４に進む。
【００８６】
（Ｓ５０４）ＧＣが必要かどうかを判定する。判定の閾値は、例えばＳＳＤ１０５の使用容量とガベージ量の合計が９０％以上となった場合や、空き容量が１００ＧＢ以下となった場合などが考えられるが、他の閾値でもよい。ここで重要なのは、ストレージコントローラ１０４から見た空き容量が十分あるにもかかわらず、ガベージによって新規のＰＧが割り当てられなくなる状況を回避することである。
ＧＣが不要である場合、Ｓ５０８に進む。
ＧＣが必要である場合、Ｓ５０６に進む。
なお、後に示すＳＳＤのＧＣ中の処理としてライトリクエスト処理が行われた場合は、ＧＣ不要と判定する。
【００８７】
（Ｓ５０６）ＳＳＤコントローラ２００がＧＣを実施する。ＧＣの詳細については図１５に示す１６００にて詳述する。
【００８８】
（Ｓ５０８）ＳＳＤコントローラ２００がＰＧを新規に割り当てる。
【００８９】
（Ｓ５１０）Ｄ−Ｆ変換テーブル３０６を更新する。具体的には、まずライトリクエスト４１０が示すドライブアドレス４１１に該当する行をＤ−Ｆ変換テーブル３０６のドライブアドレス８１０から選択する。その後、当該行の各エントリを、ＦＭアドレス末尾ポインタ７０１が指し示している、つまりライトを実施するＦＭアドレス空間３０７に相当するＦＭ  ＩＤ８２０、ブロックＩＤ８３０、ページＩＤ８４０、ページオフセット８５０に書き換える。
【００９０】
（Ｓ５１２）Ｆ−Ｄ変換テーブル３０８を更新するために、まずＦ−Ｄ変換テーブル３０８の新しい行を確保する。次に、ＦＭアドレス末尾ポインタ７０１が指し示しているドライブアドレス空間３０５に相当するＦＭ  ＩＤ９１０、ブロックＩＤ９２０、ページＩＤ９３０、ページオフセット９４０と、ライトリクエストが示すドライブアドレスをＦ−Ｄ変換テーブル３０８の確保した行に追記する。
【００９１】
（Ｓ５１４）Ｓ５１０にて追記したＦＭアドレスに対して、ライトをＦｌａｓｈ  Ｉ／Ｆを介して実施する。
【００９２】
＜ＳＳＤのＧＣ処理フロー＞
ＳＳＤ１０５のＧＣは、ストレージコントローラ１０４のＧＣにおけるセグメントを、Ｈ−Ｃ変換テーブル３０１、Ｃ−Ｈ変換テーブル３０３をそれぞれＰＧ、をＤ−Ｆ変換テーブル３０６、Ｆ−Ｄ変換テーブル３０８に置き換えた動作に相当する。
【００９３】
また本処理は、ＳＳＤコントローラ２００による上記ライトリクエスト処理時のほか、ストレージコントローラ１０４からのリクエストがない場合にも任意のタイミングで実施してよい。以下、図１５のフローチャート１６００を用いて、ＳＳＤのＧＣ（ドライブＧＣ）を説明する。
【００９４】
（Ｓ７００）ＳＳＤコントローラ２００がＧＣの対象とするＰＧを選択する。対象のＰＧは、例えばドライブアドレス空間３０５の先頭から順にＰＧを確認し、ＰＧ内の全領域に対するガベージの割合が１０％以上の場合に当該ＰＧを選択する等の方法が考えられるが、他のアルゴリズムを使用してもよい。
【００９５】
（Ｓ７０２）ＳＳＤコントローラ２００が、Ｆ−Ｄ変換テーブル３０８中で、Ｓ７００で選択したＰＧかつドライブＧＣ開始後これまで未確認のエントリを選択する。
【００９６】
（Ｓ７０４）ＳＳＤコントローラ２００がＳ７０２で選択したエントリを参照し、ドライブアドレスのフィールド８４０を確認する。
【００９７】
（Ｓ７０６）ＳＳＤコントローラ２００が、Ｄ−Ｆ変換テーブル３０６中で、Ｓ７０４で確認したドライブアドレスに対応するエントリを選択する。
【００９８】
（Ｓ７０８）ＳＳＤコントローラ２００がＳ７０６で選択したエントリを参照し、ＦＭアドレスを表すＦＭ番号９１０、ブロック番号９２０、ページ番号９３０、ページオフセット９４０を確認する。
【００９９】
確認したＦＭアドレスが、Ｓ７０２で選択したエントリのＦＭアドレスと一致していれば当該ＦＭアドレスに格納されているデータは有効であり、Ｓ７１０に進む。
【０１００】
確認したＦＭアドレスが、Ｓ７０２で選択したエントリのＦＭアドレスと不一致であれば、確認したＦＭアドレスに格納されているデータはガベージであり、Ｓ７１２に進む。
【０１０１】
（Ｓ７１０）ＳＳＤコントローラ２００がＳ７０２で選択したエントリのＦＭアドレスに格納されているデータを読み出し、ライトリクエスト処理１４００を行う。
【０１０２】
（Ｓ７１２）ＳＳＤコントローラ２００がＦ−Ｄ変換テーブル３０８中のＳ７０２で選択したエントリを削除する。Ｆ−Ｄ変換テーブル３０８のエントリの削除は、ＧＣ対象ＰＧ単位でまとめて行うこともできる。
【０１０３】
（Ｓ７１４）ＳＳＤコントローラ２００が、Ｆ−Ｄ変換テーブル３０８中にＳ７００で選択したＧＣ対象セグメントのエントリが存在するかどうか確認する。
エントリが存在する場合、Ｓ７０２に戻る。
エントリが存在しない場合、Ｓ７１６に進む。
【０１０４】
（Ｓ７１６）ＳＳＤコントローラ２００が、ＧＣ対象ＰＧ中のＦＭのそれぞれのブロックに対してデータ消去コマンドを発行する。
【０１０５】
＜従来技術＞
図１６に、本特許の実施例１について理解を深めるため、従来技術でのアドレスマッピングの模式図を示す。ストレージコントローラ１０４において、セグメント６００のサイズはストレージコントローラの各種機能、例えば、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ等、の仕様により決まる一方、ＳＳＤ１０５において、ＰＧ７００のサイズはＦＭのブロックサイズに依存する。また、ＲＧを組むＳＳＤ１０５の数は複数の選択肢が存在する（実施例１ではＳＳＤ１０５（Ａ）〜ＳＳＤ１０５（Ｄ）の４台）。そのため、１つのセグメント６００をあるＲＧに割り当てたとき、ＳＳＤ１台あたりに割り当てられる部分セグメント６０４はまちまちになる。図１６の模式図では、上記部分セグメント６０４は各ＳＳＤのＰＧ７００の一部としてマッピングされている。つまり、１ＰＧ中に２種類以上の部分セグメント６０４が存在しうることになる。
【０１０６】
例えば、ストレージコントローラ１０４によって管理されるセグメント６００が４２ＭＢであるとき、ＲＧを組む各ＳＳＤ１０５（Ａ）から（Ｄ）の４台のそれぞれの部分セグメント６０４の大きさは、４２／３で１４ＭＢとなる。ＲＧを組む一台のＳＳＤはパリティデータを格納するため、セグメントがマップされるホストアドレス空間３００には実質３台のＳＳＤ１０５の容量がマップされることになるためである。
【０１０７】
一方、ＰＧ７００の大きさは、ＦＭメモリ２０１のブロック単位で構成されるため、１ブロック４ＭＢの整数倍、即ち、ＰＧ７００を構成するＦＭの数に制約される。例えば、ＰＧが５つのＦＭで、４Ｄ＋１Ｐの構成をとる場合、ＰＧ７００の大きさは、４ＭＢ×４の２０ＭＢとなる。
【０１０８】
このように、ストレージコントローラ１０４で管理され、ストレージコントローラ１０４のＧＣの単位であるセグメントの大きさ(１４ＭＢ)と、ＳＳＤ１０５で管理され、ＳＳＤコントローラ２００のＧＣの単位であるＰＧの大きさ（２０ＭＢ）が異なるため、図１６に示したように、ＰＧの一部が部分セグメントに対応することになる。
【０１０９】
図１７に、ストレージコントローラ１０４がセグメントを再利用するにあたって、上書きを実施した際のドライブアドレス空間３０５とＦＭアドレス空間３０７のマッピングと、その後発生するＳＳＤにおけるＧＣについて示す。
【０１１０】
図１７（Ａ）は、ドライブアドレス空間３０５に部分セグメント６０４（Ａ）と６０４（Ｂ）が書き込まれた状態を示す。部分セグメント６０４（Ａ）は、一つのＰＧに、部分セグメント６０４（Ｂ）は、二つのＰＧに対応している。図１７（Ｂ）に示す通り、ストレージコントローラ１０４が、部分セグメント６０４（Ａ）を再利用するため、１以上のライトリクエスト４１０を当該アドレスに発行する。当該アドレスが全て上書きされた段階において、マッピングされていた旧データの属するＰＧは一部分のみがドライブガベージ７０３となる。図１７（Ｃ）に示すように、ＳＳＤコントローラ２００が当該ＰＧをＧＣする段階において、再利用されたものとは異なる部分セグメント６０４（Ｂ）の有効データ７０４が存在するため、データの移動が発生してしまう。
【０１１１】
例えば、部分セグメント６０４（Ａ）、６０４（Ｂ）のサイズが１４ＭＢ、ＰＧのサイズが２０ＭＢであった場合、図１７（Ｂ）のＰＧには、部分セグメント６０４（Ａ）の他に部分セグメント６０４（Ｂ）の有効データ７０４が６ＭＢ分残る。そのため図１７（Ｃ）に示す通り、ＦＭアドレス末尾ポインタ７０１に続くアドレスに有効データ７０４を移動させる。このようにＰＧ７００のＧＣには、ドライブアドレス空間の部分セグメントのサイズとＰＧのサイズが対応していないことにより、ＧＣによるデータの移動が発生する。
【０１１２】
＜実施例１のセグメント新規作成手順＞
実施例１では、ストレージコントローラ１０４におけるセグメント６００の新規割当てにあたり、図１８の処理フロー１３００を実施する。以下、その詳細を示す。
【０１１３】
（Ｓ４００）セグメント６００を作成するＲＧを決定する。
【０１１４】
（Ｓ４０２）ストレージコントローラ１０４がＳ４００で決定したＲＧに属するＳＳＤ１０５のＰＧサイズを取得する。ＰＧサイズの取得方法は例えば、あらかじめ制御プログラムにハードコーディングする、ホスト計算機１０１との固有Ｉ／Ｆを作成し通知を受け取る、ドライブとの固有Ｉ／Ｆを作成し通知を受け取る、等が挙げられるが、その他の方法を用いてもよい。
【０１１５】
（Ｓ４０４）「Ｓ４０２で取得したＳＳＤ１０５のＰＧサイズ×ＲＧドライブ数」の倍数のサイズをもつセグメント６００を作成する。なお、ここでの「ＰＧサイズ」「ＲＡＩＤグループのドライブ数」は、いずれも誤り訂正符号のサイズを除いた実容量とする。
【０１１６】
従来のストレージコントローラ１０４に本機能を追加することで、ＳＳＤ１０５のＧＣ実施時に有効データの移動を抑止することができる。尚、ＰＧは、ＦＭの任意のブロックを１以上含む集合である。これは、ＳＳＤのＧＣ時に実施するデータ消去が、ＦＭの物理制約上ブロック単位で実施されるためである。即ち、ＰＧのサイズは、ＦＭのブロックのサイズにＰＧを構成し、実容量に対応するＦＭの数によって決まる。例えば、ＰＧが５Ｄ＋１Ｐの構成をとる場合には、ＦＭの数は「５」となり、ＰＧのサイズは、５×ブロックサイズとなる。ブロックサイズが４ＭＢの場合には、ＰＧのサイズは２０ＭＢとなる。
【０１１７】
図１９に、その模式図を示す。処理フロー１３００に沿ってセグメントを作成することにより、各ＳＳＤ１０５に分散した部分セグメント６０４のサイズはＰＧサイズ７００の倍数となる。その結果、ＳＳＤ１０５の各ＰＧは高々１つの部分セグメントしか保持しないことになる。
【０１１８】
例えば、図１８のＳ４０２により取得したＰＧのサイズが２０ＭＢであったとする。この場合、ＰＧ７００を５Ｄ＋１Ｐ等で構成し、ＰＧ７００のサイズを２０ＭＢ（４ＭＢブロック×５）である場合が該当する。コントローラアドレス空間３０２にマッピングされるドライブアドレス空間３０５の部分セグメント６０４は、ＰＧ７００のサイズに合わせ２０ＭＢとすればよい。図１８のＳ４００で決定されたＲＡＩＤグループは、例えば、３Ｄ＋１Ｐであれば、２０ＭＢの部分セグメント６０４を構成すればよく、コントローラアドレス空間３０２のセグメントのサイズは、６０ＭＢとすればよいことになる。
【０１１９】
図２０に、ストレージコントローラ１０４がセグメントを再利用するにあたって上書きを実施した際のドライブアドレス空間３０５とＦＭアドレス空間３０７のマッピングを示す。図１７と同様に、ストレージコントローラ１０４が、部分セグメント６０４（Ａ）を再利用するため、１以上のライトリクエスト４１０を当該アドレスに発行する。当該アドレスが全て上書きされた段階において、マッピングされていた旧データは、その属するＰＧを全て使用している。そのため、ＳＳＤコントローラ２００が当該ＰＧをＧＣする段階において、有効データが存在せず全てドライブガベージ７０３となるため、データの移動が発生しない。
【０１２０】
なお、あるＰＧのデータがドライブアドレス空間３０５上で上書きされている過渡状態において、当該ＰＧがＧＣ対象として選択されると、その時点での当該ＰＧにはドライブガベージ７０３と有効データが混在しているためデータの移動が発生してしまう。しかし、実際には過渡状態のＰＧが選択されることはない。その理由は、オーバープロビジョニングによってドライブアドレス空間３０５よりもＦＭアドレス空間３０７が広くなっており、全領域がガベージのＰＧまたは未使用のＰＧが必ず存在しているためである。
【０１２１】
以上の通り、実施例１では、ストレージコントローラのセグメントのサイズを、ＰＧのサイズ、即ち、ＳＳＤのＦＭのブロックの整数倍とすることで、ＳＳＤのＧＣ時にデータの移動が発生することを防ぐことができる。即ち、ストレージコントローラのセグメントはストレージコントローラのＧＣ単位であり、ＰＧのサイズはＳＳＤのＧＣの単位である。
【０１２２】
そのため、ガベージコレクションによるデータ移動を抑えることで、ＳＳＤの寿命を伸ばすことができ、ＳＳＤの寿命劣化によるエラー訂正処理の軽減等により性能の改善も図ることができる。
【実施例２】
【０１２３】
実施例２は、実施例１におけるＳＳＤ１０５において、ＦＭアドレス空間３０７をオーバープロビジョニングしていない場合を対象とする。オーバープロビジョニングしないことにより、ＳＳＤ１０５に搭載されたＦＭの容量を全てストレージコントローラ１０４が使用可能になる。ただしこの場合、ストレージコントローラ１０４がＳＳＤ１０５の全容量を把握するため、各ＳＳＤに対し、容量を開示させるためのコマンドを発行する。各ＳＳＤ１０５は、容量開示コマンドに応答して、自身の容量をストレージコントローラ１０４に通知する。
【０１２４】
ストレージコントローラ１０４がコントローラＧＣの実施結果をＳＳＤ１０５に通知しなければ、ストレージコントローラ１０４によるＳＳＤ１０５への上書きライトでガベージが生成され、ＳＳＤ１０５の容量が不足してしまう。そのため、コントローラＧＣ時にＵＮＭＡＰコマンドを発行し、ストレージコントローラ１０４とＳＳＤ１０５が認識する空き領域を同期する。以下、図２１のフローチャート１６００を用いて、ＳＳＤのアンマップ処理を説明する。
【０１２５】
＜ＳＳＤのＵＮＭＡＰ処理＞
（Ｓ８００）ＳＳＤコントローラがＤｒｉｖｅ Ｉ／Ｆ２０４を介してストレージコントローラ１０４からＵＮＭＡＰコマンドを受領する。ＵＮＭＡＰコマンドには、ドライブアドレスとサイズを含む。
【０１２６】
（Ｓ８０２）ＳＳＤコントローラがＤ−Ｆ変換テーブル３０６を更新する。具体的には、ＵＮＭＡＰコマンドが示すドライブアドレスに該当する行をＤ−Ｆ変換テーブル３０６から選択し、当該行のＦＭアドレス空間を無効値に設定する。
【０１２７】
図２２は、ストレージコントローラ１０４のＧＣ実施時に、ＵＮＭＡＰコマンド４２０をＳＳＤ１０５に発行した際のドライブアドレス空間３０５とＦＭアドレス空間３０７のマッピングを示す。図２０と同様に、ストレージコントローラ１０４が、部分セグメント６０４（Ａ）を再利用するにあたり、マッピングされていた旧データはその属するＰＧを全て使用している。そのため、ＵＮＭＡＰコマンドもＰＧ全域に渡って発行され、データ移動なしにＧＣ可能である。よって新たにストレージコントローラ１０４がライトリクエストを発行しても、予備領域は不要である。
【０１２８】
例えば、ドライブアドレス空間３０５の部分セグメント６０４（Ａ）に対し、複数のライト要求４２０を受ける、新しいライトデータはＦＭアドレス末尾ポインタ７０１に基づいて、新たなＰＧに書き込まれ、旧データはドライブガベージ７０３となる。この部分セグメント６０４（Ａ）に割り当てられているＰＧをＵＮＭＡＰコマンドで開放する。
【０１２９】
実施例２によれば、オーバープロビジョニングしないことにより、ＳＳＤ１０５に搭載されたＦＭの容量を全てストレージコントローラ１０４が使用可能になる。
【符号の説明】
【０１３０】
１０１：ホスト計算機、１０２：ストレージシステム、１０３：ネットワーク、１０４：ストレージコントローラ、１０５：ＳＳＤ、１０６：ＲＡＩＤグループ、１０７：コントローラＣＰＵ、１０８：コントローラＲＡＭ、１０９：フロントエンドＩ／Ｆ、１１０バックエンドＩ／Ｆ、２００：ＳＳＤコントローラ、２０１：フラッシュメモリ、２０２：ドライブＣＰＵ、２０３：ドライブＲＡＭ、２０４：ドライブＩ／Ｆ、２０５：フラッシュＩ／Ｆ、３００：ホストアドレス空間、３０１：Ｈ−Ｃ変換テーブル、３０２：コントローラアドレス空間、３０３：Ｃ−Ｈ変換テーブル、３０４：Ｃ−Ｄ変換テーブル、３０５：ドライブアドレス空間、３０６：Ｄ−Ｆ変換テーブル、３０７ＦＭアドレス空間、３０８：Ｆ−Ｄ変換テーブル、６００：セグメント、６０３：コントローラガベージ、７００：ＰＧ、７０３：ドライブガベージ。
【図１】
2020035300.tif 000003
【図２】
2020035300.tif 000004
【図３】
2020035300.tif 000005
【図４】
2020035300.tif 000006
【図５】
2020035300.tif 000007
【図６】
2020035300.tif 000008
【図７】
2020035300.tif 000009
【図８】
2020035300.tif 000010
【図９】
2020035300.tif 000011
【図１０】
2020035300.tif 000012
【図１１】
2020035300.tif 000013
【図１２】
2020035300.tif 000014
【図１３】
2020035300.tif 000015
【図１４】
2020035300.tif 000016
【図１５】
2020035300.tif 000017
【図１６】
2020035300.tif 000018
【図１７】
2020035300.tif 000019
【図１８】
2020035300.tif 000020
【図１９】
2020035300.tif 000021
【図２０】
2020035300.tif 000022
【図２１】
2020035300.tif 000023
【図２２】
2020035300.tif 000024