(57)【要約】  記憶デバイスは、第１仮想アドレス空間へのライトに応じて、アドレス空間から第１仮想アドレス空間にアドレス領域を割り当てる。コントローラは、第１仮想アドレス空間において、実アドレス空間とのマッピングを切断されたアドレス領域を使用禁止領域として管理する。コントローラは又は記憶デバイスは、第１仮想アドレス空間の使用状況が予め設定された基準に達すると、第１仮想アドレス空間に新たな連続するアドレス領域を追加して、第１仮想アドレス空間を拡張する。記憶デバイスは、第１仮想アドレス空間とのマッピングが切断された領域を、拡張された前記第１仮想アドレス空間に割り当てる。
2018016003.tif 000002
【特許請求の範囲】
【請求項１】
記憶デバイスと、
コントローラと、を含み、
仮想ボリュームから記憶媒体の間においてマッピングされる複数階層のアドレス空間が定義され、
前記複数階層のアドレス空間は、
前記記憶デバイスの記憶媒体のアドレス空間であって、前記記憶デバイスに管理される実アドレス空間と、
前記記憶デバイスのアドレス空間であって、前記コントローラから見える第１仮想アドレス空間と、
前記第１仮想アドレス空間と仮想ボリュームとの間の第２仮想アドレス空間と、を含み、
前記コントローラは、前記仮想ボリュームへのライトに応じて前記第２仮想アドレス空間からアドレス領域を前記仮想ボリュームに割り当て、
前記コントローラは、前記仮想ボリュームの同一アドレスへのオーバーライトに対して、前記第２仮想アドレス空間の異なるアドレスを割り当て、
前記記憶デバイスは、前記第１仮想アドレス空間へのライトに応じて、前記実アドレス空間から前記第１仮想アドレス空間にアドレス領域を割り当て、
前記コントローラは、前記第１仮想アドレス空間において、前記実アドレス空間とのマッピングを切断されたアドレス領域を使用禁止領域として管理し、
前記コントローラは又は前記記憶デバイスは、前記第１仮想アドレス空間の使用状況が予め設定された基準に達すると、前記第１仮想アドレス空間に新たな連続するアドレス領域を追加して、前記第１仮想アドレス空間を拡張し、
前記コントローラは、前記第１仮想アドレス空間の拡張に応じて前記第２仮想アドレス空間を拡張し、
前記記憶デバイスは、前記第１仮想アドレス空間とのマッピングが切断された領域を、拡張された前記第１仮想アドレス空間に割り当てる、ストレージ装置。
【請求項２】
請求項１に記載のストレージ装置であって、
前記仮想ボリュームに対するライトデータを格納するキャッシュを含み、
前記コントローラは、
前記仮想ボリュームの同一アドレスへのオーバーライトに対して、キャッシュの異なる領域を割り当て、
前記第２仮想アドレス空間の拡張に応じて前記キャッシュの領域を拡張する、ストレージ装置。
【請求項３】
請求項１に記載のストレージ装置であって、
前記記憶デバイスを含みＲＡＩＤグループを構成する、複数の記憶デバイスを含み、
前記第２仮想アドレス空間は、複数のボリュームからなるプールのアドレス空間であり、
前記コントローラは、
前記複数の記憶デバイスの第１仮想アドレス空間それぞれに新しいアドレス領域を追加して、前記複数の記憶デバイスの前記第１仮想アドレス空間を拡張し、
前記複数の前記第１仮想アドレス空間の拡張に応じてボリュームを定義し、
定義した前記ボリュームを前記プールに追加して、前記第２仮想アドレス空間を拡張する、ストレージ装置。
【請求項４】
請求項３に記載のストレージ装置であって、
前記コントローラは、
前記ＲＡＩＤグループにおけるデータノードに、前記第１仮想アドレス空間における第１アドレス領域を指定して第１コマンドを送信し、
前記データノードは、前記第１コマンドに応答して、前記第１アドレス領域の第１データを前記コントローラに返し、さらに、前記第１アドレス領域の前記実アドレス空間へのマッピングを切断する、ストレージ装置。
【請求項５】
請求項４に記載のストレージ装置であって、
前記コントローラは、前記第１データのパリティデータを格納する第２アドレス領域を指定する第２コマンドを、前記第１データと共に、前記第１データのパリティノードに送信し、
前記パリティノードは、前記第２コマンドに応答して、前記第２アドレス領域に格納された旧パリティと前記第１データとを使用して新パリティを生成する、ストレージ装置。
【請求項６】
請求項３に記載のストレージ装置であって、
前記ＲＡＩＤグループにおけるデータノードに、前記第１仮想アドレス空間における第１アドレス領域と第２アドレス領域とを指定して、第１コマンドを送信し、
前記データノードは、前記第１コマンドに応答して、前記第１アドレス領域の第１データと前記第２アドレス領域の第２データを、前記コントローラに送信し、前記第１データを前記第２アドレス領域に移動し、前記第１アドレス領域の前記実アドレス空間とのマッピングを切断する、ストレージ装置。
【請求項７】
請求項６に記載のストレージ装置であって、
前記コントローラは、前記第１データのパリティデータを格納する第３アドレス領域及び前記第２データのパリティを格納する第４アドレス領域を指定する第２コマンドを、前記第１データ及び前記第２データと共に、前記第１データ及び前記第２データのパリティノードに送信し、
前記パリティノードは、前記第２コマンドに応答して、前記第３アドレス領域に格納された旧パリティと前記第１データとを使用して新パリティを生成し、前記第４アドレス領域に格納された旧パリティと前記第２データとを使用して新パリティを生成する、ストレージ装置。
【請求項８】
請求項３に記載のストレージ装置であって、
前記コントローラは、前記複数の記憶デバイスにおいて最も小さい空き領域に基づいて、前記複数の記憶デバイスの前記第１仮想アドレス空間を拡張する、ストレージ装置。
【請求項９】
記憶デバイスとコントローラとを含むストレージ装置を制御する方法であって、
仮想ボリュームから記憶媒体の間においてマッピングされる複数階層のアドレス空間が定義され、
前記複数階層のアドレス空間は、
前記記憶デバイスの記憶媒体のアドレス空間であって、前記記憶デバイスに管理される実アドレス空間と、
前記記憶デバイスのアドレス空間であって、前記コントローラから見える第１仮想アドレス空間と、
前記第１仮想アドレス空間と仮想ボリュームとの間の第２仮想アドレス空間と、を含み、
前記方法は、
前記仮想ボリュームへのライトに応じて前記第２仮想アドレス空間からアドレス領域を前記仮想ボリュームに割り当て、
前記仮想ボリュームの同一アドレスへのオーバーライトに対して、前記第２仮想アドレス空間の異なるアドレスを割り当て、
前記第１仮想アドレス空間へのライトに応じて、前記アドレス空間から前記第１仮想アドレス空間にアドレス領域を割り当て、
前記第１仮想アドレス空間において、前記実アドレス空間とのマッピングを切断されたアドレス領域を使用禁止領域として管理し、
前記第１仮想アドレス空間の使用状況が予め設定された基準に達すると、前記第１仮想アドレス空間に新たな連続するアドレス領域を追加して、前記第１仮想アドレス空間を拡張し、
前記第１仮想アドレス空間の拡張に応じて前記第２仮想アドレス空間を拡張し、
前記第１仮想アドレス空間とのマッピングが切断された領域を、拡張された前記第１仮想アドレス空間に割り当てる、方法。
【請求項１０】
請求項９に記載の方法であって、
前記仮想ボリュームの同一アドレスへのオーバーライトに対して、キャッシュの異なる領域を割り当て、
前記第２仮想アドレス空間の拡張に応じて前記キャッシュの領域を拡張する、方法。
【請求項１１】
請求項９に記載の方法であって、
前記ストレージ装置は、前記記憶デバイスを含みＲＡＩＤグループを構成する、複数の記憶デバイスを含み、
前記第２仮想アドレス空間は、複数のボリュームからなるプールのアドレス空間であり、
前記方法は、
前記複数の記憶デバイスの第１仮想アドレス空間それぞれに新しいアドレス領域を追加して、前記複数の記憶デバイスの前記第１仮想アドレス空間を拡張し、
前記複数の前記第１仮想アドレス空間の拡張に応じてボリュームを定義し、
定義した前記ボリュームを前記プールに追加して、前記第２仮想アドレス空間を拡張する、方法。
【請求項１２】
請求項１１に記載の方法であって、
前記方法は、
前記コントローラから前記ＲＡＩＤグループにおけるデータノードに、前記第１仮想アドレス空間における第１アドレス領域を指定して第１コマンドを送信し、
前記第１コマンドに応答して、前記データノードから、前記第１アドレス領域の第１データを前記コントローラに返し、
前記データノードにおいて、前記第１アドレス領域の前記実アドレス空間へのマッピングを切断する、方法。
【請求項１３】
請求項１２に記載の方法であって、
前記コントローラから、前記第１データのパリティデータを格納する第２アドレス領域を指定する第２コマンドを、前記第１データと共に、前記第１データのパリティノードに送信し、
前記第２コマンドに応答して、前記パリティノードにおいて、前記第２アドレス領域に格納された旧パリティと前記第１データとを使用して新パリティを生成する、方法。
【請求項１４】
請求項１１に記載の方法であって、
前記方法は、
前記コントローラから、前記ＲＡＩＤグループにおけるデータノードに、前記第１仮想アドレス空間における第１アドレス領域と第２アドレス領域とを指定して、第１コマンドを送信し、
前記第１コマンドに応答して、前記データノードから、前記第１アドレス領域の第１データと前記第２アドレス領域の第２データを、前記コントローラに送信し、
前記データノードにおいて、前記第１データを前記第２アドレス領域に移動し、前記第１アドレス領域の前記実アドレス空間とのマッピングを切断する、方法。
【請求項１５】
請求項１４に記載の方法であって、
前記コントローラから、前記第１データのパリティデータを格納する第３アドレス領域及び前記第２データのパリティを格納する第４アドレス領域を指定する第２コマンドを、前記第１データ及び前記第２データと共に、前記第１データ及び前記第２データのパリティノードに送信し、
前記パリティノードにおいて、前記第２コマンドに応答して、前記第３アドレス領域に格納された旧パリティと前記第１データとを使用して新パリティを生成し、前記第４アドレス領域に格納された旧パリティと前記第２データとを使用して新パリティを生成する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に関する。
【背景技術】
【０００２】
オールフラッシュアレイ（ＡＦＡ：Ａｌｌ  Ｆｌａｓｈ  Ａｒｒａｙ）がプライマリストレージに位置付けられていく中、益々Ｉ／Ｏ性能が重視されてきている。フラッシュメモリは高価であるため、使用量を抑える圧縮・重複排除機能が、多くのＡＦＡに搭載されている。【０００３】
フラッシュメモリは、ボリューム上の同じ領域へのライトを前回書き込んだデータ（旧データと呼ぶ）が格納された記憶領域にオーバーライトするのではなく、新規領域へ追記する。通常、旧データが格納された領域は、空き領域ではなく、ガベージと呼ばれる。ガベージにはデータをライトすることができず、使用不可な無効領域である。ガベージが増えることは、記憶領域の浪費になる。そこで、ストレージ装置は、ガベージが所定量たまると、空き領域を確保するために、ガベージコレクション（以下ＧＣ）を実行する。ＧＣはガベージを再利用可能な領域にする。【０００４】
ＧＣは、例えば、特許文献１に開示されている。ＧＣは、ガベージがたまった記憶領域において、有効なデータのみを新規の別記憶領域へコピーし、その後、ガベージがたまった記憶領域の全データを消去する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許第８５２７５４４号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ストレージコントローラがＧＣを行う場合、ストレージコントローラは、キャッシュ領域を介して、データを移動する。例えば、ストレージコントローラは、ＧＣにより空きページ（規定サイズの記憶領域）を生成する。ストレージコントローラは、ページ内の有効なデータのみをフラッシュデバイスからキャッシュにリードし、さらに、キャッシュ内で新たしいページに割り当てられた領域にコピーする。ストレージコントローラは、キャッシュ及びフラッシュデバイスのコピー元ページの全データを消去する。【０００７】
上述のようなＧＣのためのデータコピーの負荷は大きく、ストレージ装置全体の性能低下の原因となっている。従って、ストレージ装置において、ＧＣによる負荷を減らし、Ｉ／Ｏ性能を向上させることが望まれる。
【課題を解決するための手段】
【０００８】
本発明の一例のストレージ装置は、記憶デバイスと、コントローラと、を含み、仮想ボリュームから記憶媒体の間においてマッピングされる複数階層のアドレス空間が定義され、前記複数階層のアドレス空間は、前記記憶デバイスの記憶媒体のアドレス空間であって、前記記憶デバイスに管理される実アドレス空間と、前記記憶デバイスのアドレス空間であって、前記コントローラから見える第１仮想アドレス空間と、前記第１仮想アドレス空間と仮想ボリュームとの間の第２仮想アドレス空間と、を含み、前記コントローラは、前記仮想ボリュームへのライトに応じて前記第２仮想アドレス空間からアドレス領域を前記仮想ボリュームに割り当て、前記コントローラは、前記仮想ボリュームの同一アドレスへのオーバーライトに対して、前記第２仮想アドレス空間の異なるアドレスを割り当て、前記記憶デバイスは、前記第１仮想アドレス空間へのライトに応じて、前記アドレス空間から前記第１仮想アドレス空間にアドレス領域を割り当て、前記コントローラは、前記第１仮想アドレス空間において、前記実アドレス空間とのマッピングを切断されたアドレス領域を使用禁止領域として管理し、前記コントローラは又は前記記憶デバイスは、前記第１仮想アドレス空間の使用状況が予め設定された基準に達すると、前記第１仮想アドレス空間に新たな連続するアドレス領域を追加して、前記第１仮想アドレス空間を拡張し、前記コントローラは、前記第１仮想アドレス空間の拡張に応じて前記第２仮想アドレス空間を拡張し、前記記憶デバイスは、前記第１仮想アドレス空間とのマッピングが切断された領域を、拡張された前記第１仮想アドレス空間に割り当てる。
【発明の効果】
【０００９】
本発明の一態様によれば、ストレージ装置において、Ｉ／Ｏ性能を向上させることができる。
【図面の簡単な説明】
【００１０】
【図１】実施例の概要を示す。
【図２】計算機システムの構成例を示す。
【図３】フラッシュパッケージの構成例を示す。
【図４】仮想ページ、ページ、仮想ブロック、実ブロックの関係を示す。
【図５】実施例に係る記憶領域のレイヤ構成の一例を示す。
【図６】ストレージ装置の共有メモリに格納される管理情報を示す。
【図７】仮想ボリューム情報が示す一つの仮想ボリューム（ＴＰＶＯＬ）の情報の形式例を示す。
【図８】キャッシュアドレス空間とＬＳキャッシュアドレス空間との間のマッピングテーブルの形式例を示す。
【図９】キャッシュとプールとの間のマッピング情報の形式例を示す。
【図１０】プール情報の形式例を示す。
【図１１】ページ情報の形式例を示す。
【図１２】プール空間にあるページの、空きページ管理ポインタの例を示す。
【図１３】フラッシュパッケージグループ情報の形式一例を示す。
【図１４】フラッシュパッケージ情報の形式一例を示す。
【図１５Ａ】ストレージ装置が、ホストから仮想ボリュームに対する仮想ページに初めてライト要求を受けた時の処理（新規ライト処理）の流れを示す。
【図１５Ｂ】新規ライト処理の流れを示す。
【図１５Ｃ】新規ライト処理におけるデータの流れを示す。
【図１６Ａ】ストレージ装置が、ホストから仮想ボリュームに対する仮想ページへのオーバーライト要求を受けた時の処理（オーバーライト処理）の流れを示す。
【図１６Ｂ】オーバーライト処理の流れを示す。
【図１６Ｃ】オーバーライト処理におけるデータの流を示す。
【図１７Ａ】ＵＮＭＡＰコマンドを発行したときの処理を示す。
【図１７Ｂ】ＵＮＭＡＰコマンドを発行したときの処理を示す。
【図１８Ａ】複数のアドレス空間の拡張及び追加されたアドレス空間へのフラッシュメモリの空き領域の再割り当てを示す。
【図１８Ｂ】複数のアドレス空間の拡張及び追加されたアドレス空間へのフラッシュメモリの空き領域の再割り当てを示す。
【図１９】パリティ再計算処理のラダーチャートを示す。
【図２０Ａ】拡張ＵＮＭＡＰコマンド及びパリティライトコマンドによるフラッシュパッケージでのデータの変化の例を示す。
【図２０Ｂ】拡張ＵＮＭＡＰコマンド及びパリティライトコマンドによるフラッシュパッケージでのデータの変化の例を示す。
【図２０Ｃ】拡張ＵＮＭＡＰコマンド及びパリティライトコマンドによるフラッシュパッケージでのデータの変化の例を示す。
【図２１】ＭＯＶＥコマンドによる処理のラダーチャートを示す。
【図２２Ａ】ＭＯＶＥコマンド及び拡張パリティライトコマンドによるフラッシュパッケージでのデータの変化の例を示す。
【図２２Ｂ】ＭＯＶＥコマンド及び拡張パリティライトコマンドによるフラッシュパッケージでのデータの変化の例を示す。
【図２２Ｃ】ＭＯＶＥコマンド及び拡張パリティライトコマンドによるフラッシュパッケージでのデータの変化の例を示す。
【発明を実施するための形態】
【００１１】
以下、図面を参照しながら実施例を説明する。実施例は、発明を実現するための一例に過ぎず、発明の技術的範囲を限定するものではない。また、各図において共通の構成については、同一の参照番号が付されている。
【００１２】
なお、以後の説明では「テーブル」という表現にて本発明の情報を説明するが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、「リスト」、「ＤＢ（データベース）」、「キュー」等のデータ構造やそれ以外で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「ＤＢ」、「キュー」等については、単に「情報」と呼ぶこともできる。
【００１３】
各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。リード／ライト処理を読み出し／書き込み処理または更新処理と記載することがある。まとめてアクセス要求アクセス処理と記載することもある。
【００１４】
（１）概要
本実施例は、記憶デバイスに対してデータを追記するストレージ装置において、ストレージコントローラが参照するアドレス空間における所望サイズの連続空き領域を作成するための処理負荷を低減する技術を開示する。ストレージコントローラは、記憶デバイスの実アドレス空間にマッピングされる仮想アドレス空間において、実アドレス空間にマッピングされていた領域のマッピングを切断し、さらに、不使用領域に変更する。ストレージコントローラは、仮想アドレス空間に新たなアドレス領域を追加して、仮想アドレス空間を拡張する。
【００１５】
仮想アドレス空間は、実際にマッピングされている（割り当てられている）実アドレス空間（実アドレス領域）よりも容量が大きいアドレス空間である。仮想アドレス空間における空き領域に対しては、実アドレス空間の領域はマッピングされていない。仮想アドレス空間の空き領域にデータが格納されるときに、当該空き領域に実アドレス空間の空き領域がマッピングされる。実アドレス空間の領域は、拡張された仮想アドレス領域の空き領域にマッピングされ得る。
【００１６】
ストレージコントローラは、従来のガベージコレクションのためのデータ移動を行うことなく、仮想アドレス空間における所望の連続空き領域を確保することができる。ガベージコレクションによるオーバヘッドが抑えられ、Ｉ／Ｏ性能の低下を抑えることができる。ストレージコントローラは、仮想アドレス空間の末尾に新たなアドレス領域を追加することで、広い連続空き領域を確保することができる。
【００１７】
図１は、実施例の概要を示す。ストレージ装置１０４は、仮想ボリューム３１１を、ホスト１０１に提供する。仮想ボリューム３１１の容量は仮想化されている。仮想ボリューム３１１へのライトに応じて、複数のプールボリュームからなるプールから所定サイズのアドレス領域（ページ）が、仮想ボリューム３１１の対象アドレス領域（ページ）に割り当てられる。
【００１８】
ストレージ装置１０４において、複数階層のアドレス空間が定義されている。それらは、フラッシュメモリアドレス空間３６３、フラッシュパッケージアドレス空間３６２、プールアドレス空間３５１、ＬＳ（Ｌｏｇ  Ｓｔｒｕｃｔｕｒｅｄ）キャッシュアドレス空間３０２、及びキャッシュアドレス空間３０１である。
【００１９】
フラッシュメモリアドレス空間３６３は、ユーザデータの最終的な格納場所であるフラッシュメモリのアドレス空間であって、実（物理）アドレス空間である。実アドレス空間の容量は、実際にデータを格納できる容量に等しい。フラッシュメモリアドレス空間３６３のアドレスは、物理記憶媒体であるフラッシュメモリの、物理記憶領域に一意に割り当てられる。
【００２０】
フラッシュパッケージアドレス空間３６２は、上記フラッシュメモリを含む記憶デバイスであるフラッシュパッケージ１１３の、アドレス空間である。フラッシュパッケージ１１３は、動的に、フラッシュメモリアドレス空間３６３の領域をフラッシュパッケージアドレス空間３６２の領域に割り当てる。具体的には、フラッシュパッケージ１１３は、ライト要求を受け、実際にデータをフラッシュメモリに格納する時に、フラッシュメモリアドレス空間３６３のアドレスをフラッシュパッケージアドレス空間３６２のアドレスに割り当てる。
【００２１】
複数のフラッシュパッケージによりＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）グループを構成できる。プールアドレス空間３５１は、仮想ボリュームに（アドレス領域）を動的に割り当てるシンプロビジョニングプールのアドレス空間である。
【００２２】
フラッシュパッケージアドレス空間３６２及びプールアドレス空間３５１は、仮想アドレス空間である。仮想アドレス空間のアドレスは、必ずしも物理（実）記憶領域に割り当てられていなくてもよく、仮想アドレス空間の容量は仮想的に拡張され得る。つまり、仮想アドレス空間の容量が、実際に割り当てられている物理記憶領域（マッピングされている実アドレス領域）の容量よりも大きくなり得る。
【００２３】
ＬＳキャッシュアドレス空間３０２は、追記タイプのキャッシュであるＬＳキャッシュのアドレス空間である。仮想ボリューム３１１の同一アドレスのオーバーライトに対して、ＬＳキャッシュの異なる領域（スロット）が割り当てられる。キャッシュアドレス空間３０１は、通常のキャッシュのアドレス空間である。キャッシュアドレス空間３０１の領域が、仮想ボリューム３１１のアドレスに割り当て済みの場合、オーバーライトのデータは、その領域に格納される。
【００２４】
ストレージ装置１０４は、フラッシュメモリに形成されたガベージを回収し、ホスト１０１に提供する。ガベージは、旧データを格納していた領域であって、データをライトすることができず、使用不可な無効領域である。ガベージは、再割り当ての前に、フラッシュパッケージアドレス空間３６２（仮想アドレス空間）から切り離され、そのデータが物理的又は論理的に消去される。以下では、データが消去された後、再割り当ての前において、その領域をガベージと呼ぶことがある。
【００２５】
ガベージへのマッピングが切断されたフラッシュパッケージアドレス空間３６２のアドレス領域の使用は禁止される。結果として、当該アドレス領域にマッピングされているプールアドレス空間３５１のアドレス領域の使用も禁止される。例えば、マッピングが切断されるアドレス領域のサイズが、ページを仮想ボリュームに割り当てるために必要なサイズよりも小さい場合、そのアドレス領域のみを仮想ボリュームに割り当てることはできない。１ページを仮想ボリュームに割り当てるために一つのフラッシュパッケージ１１３に要求されるサイズは、ページサイズとＲＡＩＤ構成に依存する。図１の例において、１ページは一つのフラッシュパッケージ１１３に格納される。
【００２６】
ストレージ装置１０４は、フラッシュパッケージアドレス空間３６２に連続したアドレス領域を追加する。フラッシュパッケージ１１３は、フラッシュパッケージアドレス空間３６２を拡張することで、フラッシュパッケージの容量が増加したように見せる。ストレージ装置１０４は、フラッシュパッケージアドレス空間３６２の拡張に応じて、プールアドレス空間３５１も拡張する。ガベージは、空き領域に変更された後、拡張されたフラッシュパッケージアドレス空間３６２の空き領域に再割り当てされる。上述のように、フラッシュメモリアドレス空間３６３の領域は、データのライト時に割り当てられる。
【００２７】
フラッシュパッケージアドレス空間３６２及びプールアドレス空間３５１で使用が禁止されるアドレス領域は離散的である。新たに連続したアドレス領域を追加することで、離散的なアドレス領域を、連続したアドレス領域に置き換える。本手法により、ガベージコレクションのためにＬＳキャッシュを介したデータ移動を行うことなく、効率的に連続した空き領域をホストに提供できる。
【００２８】
例えば、フラッシュメモリアドレス空間３６３におけるガベージブロック（空きブロック）３４２は、フラッシュパッケージアドレス空間３６２において、追加された空間３７１のブロックに割り当てられる。なお、ガベージブロック（空きブロック）３４２は、既存の空間の空きブロックにも割り当てることができる。
【００２９】
ストレージコントローラ１０９は、フラッシュパッケージアドレス空間３６２の拡張に応じて、フラッシュ側プールアドレス空間３５２に新たなアドレス領域３７３を追加し、フラッシュ側プールアドレス空間３５２を拡張する。
【００３０】
ストレージコントローラ１０９は、フラッシュ側プールアドレス空間３５２の拡張に応じて、プールアドレス空間３５１にアドレス領域３７５を追加して、プールアドレス空間３５１を拡張する。ストレージコントローラ１０９は、フラッシュ側プールアドレス空間３５２の増加容量に応じた新しいプールボリュームを生成し、プールへ追加する。これにより、ホスト１０１へ連続した空き領域３７５を提供することができる。
【００３１】
ストレージコントローラ１０９は、ＬＳキャッシュアドレス空間３０２を拡張する。ストレージコントローラ１０９は、物理的な記憶領域をＬＳキャッシュ領域に追加する。ＬＳキャッシュ領域において、データは追記される。そのため、キャッシュメモリ上に使用できないガベージが発生する。
【００３２】
ＬＳキャッシュの物理記憶領域を追加することで、プールアドレス空間３５１の拡張に応じて使用できるＬＳキャッシュ領域（空き領域）を適切に増加させる。ＬＳキャッシュ領域への記憶領域の追加は、連続する記憶領域を増加させる。
【００３３】
上述のように、フラッシュパッケージアドレス空間を拡張することで回収した空き領域をホスト１０１に提供する。これにより、空き容量を確保するためのガベージコレクション処理に伴うデータ移動による負荷が減らされる。なお、ストレージコントローラ１０９は、ＬＳキャッシュアドレス空間３０２を拡張しなくてもよく、ＬＳキャッシュを省略してもよい。ストレージ装置は、フラッシュメモリと異なるタイプの記憶媒体を使用してもよい。
【００３４】
（２）システム構成
（ａ）システムハードウェア構成
図２は、計算機システム１００の構成例を示している。計算機システム１００は、ホスト計算機（ホスト）１０１、管理装置１０２、ストレージ装置１０４を有する。ホスト１０１、管理装置１０２、ストレージ装置１０４は、ネットワーク１０３で互いに接続される。
【００３５】
ネットワーク１０３は一例として、ファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）である。ネットワーク１０３は、ＳＣＳＩコマンドが転送可能なプロトコル以外にメインフレームのＩ／Ｏプロトコルを用いることもできる。管理装置１０２はネットワーク１０３とは別の管理ネットワークを介して接続されてもよい。管理装置１０２は無くてもよい。
【００３６】
図１に示されるように、ホスト１０１は、アプリケーションプログラムを実行する計算機であり、ストレージ装置１０４の論理的な記憶領域にネットワーク１０３経由でアクセスする。ストレージ装置１０４は、フラッシュパッケージ１１３の記憶領域にデータを格納する。ホスト１０１は複数台でもよい。なお、ストレージ装置１０４は、ストレージシステム、あるいはストレージサブシステムと言うこともできる。
【００３７】
ホスト１０１は、例えば、入力デバイス、出力デバイス、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、メモリ、ディスクアダプタ、ネットワークアダプタ、及び、記憶デバイスを備える。なお、各ホスト１０１のＣＰＵは、ユーザが使用するアプリケーションプログラム、ストレージ装置１０４とのインターフェイス制御をおこなうストレージ装置制御プログラムを実行する。
【００３８】
ホスト１０１はストレージ装置１０４が提供する仮想ボリュームを使用する計算機である。ホスト１０１は仮想ボリュームに対して、リードコマンドやライトコマンドを発行することで、仮想ボリュームに格納されたデータにアクセスする。
【００３９】
管理装置１０２は、ストレージ装置１０４の管理（例えばストレージ装置１０４の記憶領域の構成）を行うための計算機で、汎用のコンピュータと同様に、プロセッサとメモリを有する。管理装置１０２は、ストレージ装置１０４の管理を行うための管理プログラムを実行する。管理装置１０２は、キーボードやディスプレイ等の入出力デバイス、ＣＰＵ、メモリ、ネットワークアダプタ、及び、記憶デバイスを有し、ストレージ装置１０４の状態等の情報を、ディスプレイ等に出力（表示）する。
【００４０】
ストレージ装置１０４は、ホスト１０１に対して１以上のボリューム（仮想ボリューム又は論理ボリューム）を提供する。ストレージ装置１０４は、ホストインターフェイス１０６、保守インターフェイス（Ｉ／Ｆ）１０７、ストレージコントローラ１０９（１０９Ａ、１０９Ｂ）、少なくとも１つのキャッシュメモリ１１０、少なくとも１つの共有メモリ１１１、フラッシュパッケージ１１３（１１３Ａ〜１１３Ｄ）を有する。
【００４１】
これらのハードウェア構成は冗長化されているものとする。また、これらの各要素は、バス１１２によって相互接続されている。これらの構成要素のうち、ホストＩ／Ｆ１０６、保守Ｉ／Ｆ１０７、ストレージコントローラ１０９、キャッシュメモリ１１０、共有メモリ１１１、バス１１２の集合を、ストレージコントローラと呼ぶこともある。
【００４２】
ホストＩ／Ｆ１０６は、ストレージ装置１０４がホスト１０１等のイニシエータと通信するために用いられる、インターフェイスデバイスである。ホスト１０１がボリューム（以下の例で仮想ボリューム）にアクセスするために発行するコマンド（リードコマンド、ライトコマンド等）は、ホストＩ／Ｆ１０６に到来する。ストレージ装置１０４は、ホスト１０１にホストＩ／Ｆ１０６から情報（例えばリードデータやライト応答）を返す。
【００４３】
保守Ｉ／Ｆ１０７は、ストレージ装置１０４が管理装置１０２と通信するためのインターフェイスデバイスである。管理装置１０２からのコマンドは保守Ｉ／Ｆ１０７に到来する。ストレージ装置１０４は、管理装置１０２に、保守Ｉ／Ｆ１０７から情報を返す。
【００４４】
図２では、ホストＩ／Ｆ１０６と保守Ｉ／Ｆ１０７がいずれもネットワーク１０３に接続されているが、これ以外の構成もあり得る。ホストＩ／Ｆ１０６が接続されるネットワークと、保守Ｉ／Ｆ１０７が接続されるネットワークが、異なるネットワークであってもよい。
【００４５】
キャッシュメモリ１１０は、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等で構成され、フラッシュパッケージ１１３に読み書きされるデータを一時的に格納する。共有メモリ１１１は、ハードディスクやフラッシュメモリ、ＲＡＭ等で構成され、ストレージコントローラ１０９で動作するプログラムや構成情報等を格納する。
【００４６】
ストレージコントローラ１０９は、プロセッサ１１９とローカルメモリ１１８を有するパッケージボードである。プロセッサ１１９は、ストレージ装置１０４の各種制御を行うためのプログラムを実行するデバイスである。ローカルメモリ１１８は、プロセッサ１１９が実行するプログラムや、プロセッサ１１９が使用する情報を一時的に保存するために用いられる。
【００４７】
図２では、ストレージ装置１０４が２つのストレージコントローラ１０９（ストレージコントローラ１０９Ａ及び１０９Ｂ）を有する構成が示されているが、ストレージコントローラ１０９の数は２以外でもよい。ストレージ装置１０４にストレージコントローラ１０９が１つだけ搭載されている構成でも良いし、或いは３以上のストレージコントローラ１０９が搭載されていてもよい。
【００４８】
キャッシュメモリ１１０は、仮想ボリューム（フラッシュパッケージ１１３）に対するライトデータ、または仮想ボリューム（フラッシュパッケージ１１３）から読み出されたデータ（リードデータ）を一時的に記憶するために用いられる。キャッシュメモリ１１０には、ＤＲＡＭ、ＳＲＡＭ等の揮発性記憶媒体が用いられるが、別の実施形態として、キャッシュメモリ１１０に不揮発性メモリが用いられてもよい。
【００４９】
キャッシュメモリ１１０に揮発性記憶媒体が用いられる場合、ストレージ装置１０４は、バッテリ等の補助電源を搭載し、停電時に補助電源を用いてキャッシュメモリ１１０の記憶内容を維持できるように構成されていてもよい。
【００５０】
共有メモリ１１１は、ストレージコントローラ１０９（のプロセッサ１１９）が使用する管理情報を格納するための記憶領域である。キャッシュメモリ１１０と同様、共有メモリ１１１には、ＤＲＡＭ、ＳＲＡＭ等の揮発性記憶媒体が用いられるが、不揮発性メモリが用いられてもよい。キャッシュメモリ１１０と共有メモリ１１１は、ローカルメモリ１１８と異なり、任意のストレージコントローラ１０９のプロセッサ１１９からアクセス可能な記憶領域である。
【００５１】
フラッシュパッケージ１１３は、ホスト１０１からのライトデータを最終的に格納するための不揮発性記憶媒体を有する記憶デバイスである。ストレージコントローラ１０９は高信頼化のための一台のフラッシュパッケージ１１３が故障しても、そのフラッシュパッケージ１１３のデータを回復できるＲＡＩＤ機能をもっているものとする。
【００５２】
ストレージコントローラ１０９がＲＡＩＤ機能もつ場合、複数のフラッシュパッケージ１１３が、一つのＲＡＩＤグループを構成する。これを、フラッシュパッケージグループ１１５と呼ぶ。ストレージコントローラ１０９は、ＲＡＩＤ機能をもっていなくともよい。フラッシュパッケージ１１３は、記憶媒体として、たとえば磁気ディスクや、フラッシュメモリ等の不揮発性半導体を用いることができる。フラッシュパッケージの一例は、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である。
【００５３】
フラッシュパッケージ１１３は、ライトデータを圧縮して自身の記憶媒体に格納する機能（圧縮機能）を有してもよい。フラッシュパッケージ１１３は、圧縮機能を有してなくてもよい。フラッシュパッケージ１１３は、ＲＡＩＤグループに基づいて一つ以上の論理記憶領域（論理ボリューム）を提供する。論理ボリュームは、ＲＡＩＤグループのフラッシュパッケージ１１３が有する物理的な記憶領域と関連付けられる。
【００５４】
（ｂ）フラッシュパッケージ
図３は、フラッシュパッケージ１１３の構成例を示す。フラッシュパッケージ１１３は、コントローラ２１０と、ホスト１０１からのライトデータを記憶するための記憶媒体であるフラッシュメモリ２８０を有する。コントローラ２１０は、ドライブＩ／Ｆ２１１、プロセッサ２１３、メモリ２１４、フラッシュＩ／Ｆ２１５、圧縮機能を有する論理回路２１６を有し、これらは内部ネットワーク２１２を介して相互接続されている。圧縮機能は無くてもよい。
【００５５】
ドライブＩ／Ｆ２１１は、ストレージ装置１０４と通信するためのインターフェイスデバイスである。フラッシュＩ／Ｆ２１５は、コントローラ２１０がフラッシュメモリ２８０と通信するためのインターフェイスデバイスである。
【００５６】
プロセッサ２１３は、フラッシュパッケージ１１３の制御を行うためのプログラムを実行する。メモリ２１４は、プロセッサ２１３が実行するプログラムや、プロセッサ２１３が使用する制御情報等を格納する。以下で説明するフラッシュパッケージ１１３が行う処理（記憶領域の管理、ストレージ装置１０４からのアクセス要求の処理等）は、プロセッサ２１３がプログラムを実行することにより行われる。プロセッサ２１３は、ストレージコントローラ１０９からリード要求又はライト要求を受け付け、受けた要求に従う処理を実行する。
【００５７】
プロセッサ２１３が、ストレージコントローラ１０９からライト要求を受け、そのライト要求に従うデータをフラッシュメモリ２８０に書き込んだ段階で、そのライト要求を完了する（ライト要求の完了をストレージコントローラ１０９に報告する）。または、ストレージコントローラ１０９とフラッシュメモリ２８０との間でリード又はライトされるデータをバッファ（図示せず）に一時的に格納してもよい。プロセッサ２１３は、ストレージコントローラ１０９からのライト要求に従うデータをバッファに書き込んだ段階で、そのライト要求の完了報告をストレージコントローラ１０９に送信してもよい。
【００５８】
（３）ページ、ブロックの関係
本実施例においては、ストレージ装置１０４は、容量仮想化機能をもつ。容量仮想化の制御単位は、ページとよばれる。本実施例では、ページのサイズは、フラッシュメモリにおける消去単位であるブロックよりも大きい。例えば、ページのサイズは、ブロックのサイズのＸ倍である（Ｘは２以上の整数）。
【００５９】
通常、フラッシュメモリにおいては、リード及びライトの単位をページと呼ぶ。しかし、すでに述べたように、本実施例では、ページは、容量仮想化の制御単位（シンプロビジョニングに従う仮想ボリュームに割り当てられる記憶領域単位）を意味しており、そのサイズは、ブロックよりも大きい。なお、本実施例では、フラッシュメモリにおけるリード及びライトの単位を、容量仮想化の制御単位であるページと区別するため、「セグメント」と呼ぶ。
【００６０】
図４は、仮想ボリューム３１１のページ３２１、プールのページ３２４、フラッシュ側プール３０３のブロック３２５、そしてフラッシュパッケージのブロック３２６、の間の関係を示す。プール３０３のページ３２４は、仮想ボリューム３１１のページ３２１に含まれない冗長データを、格納することがある。
【００６１】
ターゲットデバイス３１０は仮想ボリューム又は論理ボリュームのうち、ホスト１０１からのアクセスを許す記憶領域である。ページ３２１は、仮想ボリューム３１１を構成する。仮想ボリューム３１１はプール３０３を用いて定義された、シンプロビジョニング又は／及びティアリングを適用した仮想記憶領域である。プール３０３は、シンプロビジョニングやティアリングに用いるプールボリューム３０５の集合である。
【００６２】
プールボリューム３０５は１つのプール３０３に所属する。ページ３２４は、プールボリューム３０５（プール３０３）から切り出される。ページ３２４は、仮想ボリュームのページ３２１に割り当てられる。ページ３２４は、フラッシュ側プール３０４を介して、フラッシュパッケージグループ（ＲＡＩＤグループ）１１５の実記憶領域が割り当てられる。ＲＡＩＤループは、複数のフラッシュパッケージ（記憶デバイス）１１３を用いて定義される。これにより、ＲＡＩＤによる高信頼化、高速化、大容量化が達成される。
【００６３】
本実施例において、フラッシュパッケージ１１３の容量の単位は、フラッシュメモリの消去単位であるブロックとする。ストレージコントローラ１０９は、ブロック単位で、フラッシュパッケージ１１３にアクセスする。フラッシュ側プール３０４のブロック３２５は、ストレージコントローラ１０９から見た仮想ブロックである。ブロック３２６は、実際にデータを格納する実ブロックである。
【００６４】
フラッシュ側プール３０４は、仮想ブロック３２５から構成される。プール３０３のページ３２４は、１又は複数の仮想ブロック３２５に対応付けられる。仮想ブロック３２５に格納されるデータは、フラッシュパッケージ１１３内の実ブロック３２６に格納される。フラッシュパッケージ１１３が圧縮機能を使用した場合、圧縮されたデータが実ブロック３２６に格納される。
【００６５】
本実施例では、ｍ個（ｍは１以上の整数）の仮想ブロック３２５のデータが、ｎ個（圧縮機能を使用した場合は圧縮率に応じて１個からｍ個）の実ブロック３２６に格納される。以上の格納方式は一例である。
【００６６】
フラッシュ側プール３０４の仮想ブロック３２５は、フラッシュパッケージアドレス空間３６２のブロックを介して、実ブロック３２６にマッピングされる。フラッシュパッケージアドレス空間３６２は、ストレージコントローラ１０９から見えるフラッシュパッケージのアドレス空間である。
【００６７】
一つのフラッシュパッケージ１１３において、フラッシュパッケージアドレス空間３６２の仮想ブロックにより構成される容量は、実ブロック３２６により構成される容量より大きくあり得る。実ブロック３２６は、フラッシュメモリアドレス空間３６３のブロックである。フラッシュパッケージ１１３は、実ブロック数より多くの仮想ブロックをもっているように、ストレージコントローラ１０９に見せる。仮想ブロックにより構成される容量のほうが、実ブロックにより構成される容量より大きい。
【００６８】
フラッシュパッケージ１１３は、まだ実ブロック３２６を割り当てていない仮想ブロック３２５に属するアドレスを指定したライト要求をストレージコントローラ１０９から受け付けた場合、その仮想ブロック３２５に実ブロック３２６を割り当てる。
【００６９】
（４）記憶領域のレイヤ構成
図５は、実施例に係る記憶領域のレイヤ構成の一例を示す。以下、下位のレイヤから順に記憶領域を説明する。ＲＡＩＤグループ３０８は、前述した通り、複数の同種且つ同一通信インターフェイスのフラッシュパッケージ１１３によって構成されており、それら複数のフラッシュパッケージ１１３に跨るストライプ列（記憶領域）３０７が定義される。フラッシュパッケージ１１３内のフラッシュメモリ２８０に対して、フラッシュメモリアドレス空間３６３が定義されている。
【００７０】
さらに、フラッシュメモリアドレス空間３６３とフラッシュ側プールアドレス空間３５２とのマッピングのための、フラッシュパッケージアドレス空間３６２が定義されている。各フラッシュパッケージ１１３に対して、フラッシュメモリアドレス空間３６３とラッシュパッケージアドレス空間３６２が定義されている。
【００７１】
ＲＡＩＤグループ３０８の上位に、フラッシュ側プール３０４が存在する。フラッシュ側プール３０４は、ＲＡＩＤグループ３０８に基づく仮想的な記憶資源である。フラッシュ側プール３０４に対して、フラッシュ側プールアドレス空間３５２が定義されている。このアドレス空間３５２は、ストレージコントローラ１０９側の記憶容量を管理するアドレス空間とフラッシュパッケージ内の記憶容量を管理するアドレス空間をマッピングためのアドレス空間である。
【００７２】
フラッシュパッケージアドレス空間３６２とフラッシュ側プールアドレス空間３５２との間のマッピングは、一度決定されると維持される（静的）。フラッシュ側プールアドレス空間３５２とプールアドレス空間３５１との間のマッピングも静的である。
【００７３】
ストレージコントローラ１０９側のプール３０３は、複数のプールボリューム３０５によって形成される。プールボリューム３０５は、オフラインボリュームであるため、ホスト１０１から指定されるターゲットデバイスには関連付けられていない。プールボリューム３０５は、複数のページ３２４から構成されている。
【００７４】
ページ３２４を構成するブロックは、フラッシュ側プール３０４（空間３５３）のブロック３２５と、１対１でマッピングされている。ブロック３２５は、ストライプ列３０７の記憶領域と関連付けられている。ページ３２４のブロックに格納されるデータは、そのブロックに関連付けられているストライプ列３０７に格納される。１つのページ３２４に複数のストライプ列３０７が関連付けられていてもよい。
【００７５】
容量が仮想化された仮想ボリューム（ＴＰＶＯＬ：Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ  Ｖｏｌｕｍｅ）３１１の仮想ページ３２１には、そのＴＰＶＯＬ３１１にマッピング関連付けられているプール３０３内の空きページがマッピングされる。ストレージコントローラ１０９は、割り当てたプール３０３内の空きページを、ブロック単位で、フラッシュ側プールアドレス空間３５２のブロックにマッピングし、そのマッピングを管理する。つまり、ブロックは、ストレージコントローラ１０９からのＩ／Ｏの単位でもある。
【００７６】
ストレージコントローラ１０９は、フラッシュ側プールアドレス空間３５２のブロックがマッピングされている、フラッシュパッケージアドレス空間３６２のブロックを検索して、フラッシュパッケージ側にリード／ライト要求を出す。マッピングは、セグメント単位でもよい。
【００７７】
ＴＰＶＯＬ３１１に対して、キャッシュアドレス空間３０１が割り当てられている。ＴＰＶＯＬ３１１の仮想ページは、実際の記憶領域を伴わない仮想的な記憶容量の単位である。ホスト１０１からＴＰＶＯＬ３１１に対してライト要求があったときに、ＴＰＶＯＬ３１１の仮想ページにプールボリューム３０５のページが割り当てられる。
【００７８】
本例において、ストレージ装置１０４は、ページが割り当てられていないＴＰＶＯＬ３１１の仮想ページへのライト要求をホスト１０１から受信すると、当該仮想ページにプールからページを割り当てる。当該仮想ページへのライト要求を受信すると、ストレージ装置１０４は、割り当てられているページの空き領域にデータを追記する。割り当てられているページの空き領域がなくなると、ストレージ装置１０４は、新たなページを当該仮想ページに割り当てる。
【００７９】
キャッシュアドレス空間３０１は、ＴＰＶＯＬ３０１の容量に応じたキャッシュ領域のアドレス空間を表し、それらの容量は一致する。ライト要求の場合、ＴＰＶＯＬ３０１の仮想ページにキャッシュアドレス空間３０１上の領域がページ容量分割り当てられる。ＴＰＶＯＬ３０１の仮想ページと、キャッシュアドレス空間３０１上の割り当てられた領域（ページ容量分）と、プールアドレス空間３５１（プールボリューム３０５）上のページがマッピングされ、関連付けられる。
【００８０】
圧縮及び／又は重複排除を実施する仮想ボリュームに対して、二つの領域が割り当てられる。第１のキャッシュ領域のアドレス空間はキャッシュアドレス空間３０１であり、第２のキャッシュ領域のアドレス空間はキャッシュアドレス空間３０２である。圧縮又は重複排除をすることで、データサイズが変化するため、ＴＰＶＯＬ３０１の同一アドレスへのオーバーライトの実記憶領域は、前回ライトの実記憶領域と必ずしも一致しない。このため、データを格納する実記憶領域がそのデータより大きく、容量効率が悪化し得る。
【００８１】
ストレージ装置１０４は、第１のキャッシュアドレス空間３０１とは別に、第２のキャッシュ領域のアドレス空間（第２のキャッシュアドレス空間）３０２を使用する。第２のキャッシュ領域とそのアドレス空間の容量は一致する。ストレージ装置１０４は、キャッシュアドレス空間３０１（キャッシュ領域）にデータを格納した後、圧縮・重複排除処理を実施し、第２のキャッシュアドレス空間３０２（第２のキャッシュ領域）へデータを格納する。
【００８２】
第２のキャッシュアドレス空間３０２へデータを格納する際、ストレージ装置１０４は、データを追記して、オーバーライトはしない。第１のキャッシュアドレス空間３０１と第２のキャッシュアドレス空間３０２の対応データ、アドレスマッピングは、アドレスマッピングテーブルによって管理される。
【００８３】
第１のキャッシュアドレス空間３０２にプールボリューム３０５のページが割り当てられる。第２のキャッシュアドレス空間３０２はＬＳキャッシュアドレス空間と呼ぶ。第１のキャッシュアドレス空間３０１は省略してもよい。第１のキャッシュとＬＳキャッシュは例えば、物理的には１つのキャッシュメモリ１１０上の記憶領域で定義され、論理的に２つのアドレス空間が定義される。
【００８４】
ＴＰＶＯＬ３１１の上位にターゲットデバイス３１０が定義される。１以上のターゲットデバイス３１０が、ＦＣ  ＩＦが有する通信ポート１２０に関連付けられており、ターゲットデバイス３１０に、ＴＰＶＯＬ３１１が関連付けられている。
【００８５】
ホスト１０１は、ターゲットデバイス３１０を指定したＩ／Ｏ要求（ライト要求又はリード要求）をストレージ装置１０４に送信する。ターゲットデバイス３１０には、前述した通り、ＴＰＶＯＬ３１１が関連付けられている。ストレージ装置１０４は、ＴＰＶＯＬ３１１に関連付けられているターゲットデバイス３１０を指定したライトコマンドを受信した場合、プール３０３から、空きのページ３２４を選択し、ライト先仮想ページ３２１に割り当てる。
【００８６】
ストレージ装置１０４は、ライト先ページ３２４に、ライトデータを書き込む。ページ３２４にデータを書き込むことは、そのページ３２４にマッピングされたフラッシュ側プールアドレス空間３５２のブロック３２５に関連づけられているストライプ列３０７、に書き込むことになる。即ちストライプ列３０７に関連付けられたフラッシュメモリ２８０にデータを書き込むということである。
【００８７】
以上のように説明したが、管理するデータの単位をそろえることで、プール３０３とフラッシュ側プール３０４はひとつのプールを設定して管理することができる。
【００８８】
（５）管理情報
図６は、ストレージ装置１０４の共有メモリ１１１に格納される管理情報を示す。仮想ボリューム情報２０００、キャッシュマッピング情報２１００、キャッシュとプールとの間のマッピング情報２２００、プール情報２３００、フラッシュパッケージグループ情報２４００、ページページ情報２５００、及び、空きページ管理ポインタ２６００が、共有メモリ１１１に格納されている。
【００８９】
空きページ管理ポインタ（情報）２６００は、フラッシュパッケージグループ１１５ごとに、空きページを管理する。フラッシュパッケージ情報２７００は、フラッシュパッケージ１１３のメモリ２１４に格納されている。本実施例においては、ストレージコントローラ１０９は、容量仮想化機能を有している。ストレージコントローラ１０９が、容量仮想化機能をもっていなくともよい。
【００９０】
図７は、仮想ボリューム情報２０００が示す一つの仮想ボリューム（ＴＰＶＯＬ）の情報の形式例を示す。仮想ボリューム情報２０００は、装置内の複数仮想ボリュームの情報を保持する。仮想ボリュームは、ホスト１０１がリード又はライトするデータが格納される仮想的な記憶デバイスである。ホスト１０１は、仮想ボリュームのＩＤ、仮想ボリューム内のアドレス、対象データの長さを指定して、リード要求やライト要求を発行する。
【００９１】
仮想ボリューム情報２０００は、仮想ボリュームＩＤ２００１、仮想容量２００２、仮想ボリュームＲＡＩＤタイプ２００３、仮想ボリュームのページ番号２００４、キャッシュアドレス空間のページへのポインタ２００５、及び、プール内のページへのポインタ２００６を示す。
【００９２】
仮想ボリュームＩＤ２００１は、対応する仮想ボリュームのＩＤを示す。仮想容量２００２は、ホスト１０１から見た、仮想ボリュームの容量を表す。仮想ボリュームＲＡＩＤタイプ２００３は、仮想ボリュームのＲＡＩＤタイプ（例えば、ＲＡＩＤ０、ＲＡＩＤ１など）を表す。ＲＡＩＤ５のように、Ｎ台のフラッシュパッケージ１１３に対し１台のフラッシュパッケージ１１３に冗長データを格納する場合、Ｎの具体的数値を指定する。
【００９３】
仮想ボリュームのページ番号２００４は、仮想ボリュームのページの番号を示す。仮想ボリュームのページ番号２００４のページ番号数は、仮想ボリュームのページ数（仮想容量２００２が表す値を仮想ページ容量（後述）が表す値で割った数の切り上げ）である。
【００９４】
キャッシュアドレス空間のページへのポインタ２００５は、仮想ボリュームのページに割り当てられた、キャッシュアドレス空間３０１内のページの情報へのポインタである。当該ポインタは、キャッシュマッピング情報２１００における、キャッシュアドレス空間のページ番号２１０１において、仮想ボリュームのページに割り当てられたキャッシュアドレス空間３０１内のページの情報をポイントする。仮想ボリュームのページにキャッシュアドレス空間３０１のページが割り当てられているということは、ページが割り当てられていることになる。
【００９５】
プール内のページへのポインタ２００６は、仮想ボリュームのページに割り当てられたプールページのページ情報２５００へのポインタを示す。ストレージ装置１０４は仮想容量機能をサポートしているので、ページが割り当てられる契機は、仮想ボリュームのページへの実際のデータ書き込みである。ポインタ２００６は、例えば、最初に仮想ボリュームのページに割り当てられたプールページを示す。仮想ページのブロックごとに最新データが格納されたプールページは、図７、図８、図９の管理情報から認識され得る。
【００９６】
まだ書き込みが行われていない仮想ページに対応するキャッシュアドレス空間のページへのポインタ２００５及びプール内のページへのポインタ２００６の値は、ヌル（ＮＵＬＬまたは‘０（ゼロ）’）である。
【００９７】
例えば、キャッシュアドレス空間３０１のページ＃１を示す場合、キャッシュアドレス空間のページへのポインタ２００５の値は、キャッシュマッピング情報２１００のキャッシュアドレス空間のページ番号２１０１における、ページ番号＃１の先頭アドレスであるｆである。同様にページ＃２を示す場合、キャッシュアドレス空間のページへのポインタ２００５の値はｓである。
【００９８】
ストレージ装置１０４は、仮想ボリュームのページにキャッシュアドレス空間の記憶領域を割り当て後、ページを割り当てるときに、プール内のページへのポインタ２００６に値を登録する。キャッシュアドレス空間の記憶領域の割り当ての詳細は後述する。
【００９９】
本例の仮想ボリューム情報２０００は、キャッシュアドレス空間のページへのポインタ２００５とプール内のページへのポインタ２００６の情報を保持するが、仮想ボリュームの各ページにプール内のどのページがマッピングされているか、また、仮想ボリュームのページにキャッシュアドレス空間のどのメモリ領域が対応するかが管理されていればよい。
【０１００】
本実施例では、仮想ボリュームのページの容量とプールのページの容量は等しいというわけではない。なぜなら、プールのページは、ＲＡＩＤのタイプにより異なる冗長データを格納することがあるためである。プールのページ容量は、そのページが割り当てられたフラッシュパッケージグループ１１５のＲＡＩＤタイプにより決まる。
【０１０１】
たとえば、ＲＡＩＤ１のようにデータを２重に書き込む場合、プールのページの容量は、仮想ページ容量の２倍になる。ＲＡＩＤ５のように、Ｎ台の記憶装置の容量に対し、１台分の記憶装置の容量の冗長データを格納する場合、仮想ページ容量の（Ｎ＋１）／Ｎの容量が、ページの容量である。また、１つの冗長データブロックとこれを生成するＮ個のデータブロックを、ストライプグループ又はストライプ列と呼ぶ。
【０１０２】
さらに、ストライプグループを構成する個々のデータブロックの長さをストライプサイズと呼ぶ。ＲＡＩＤ０のように、パリティデータが使用されない場合、仮想ボリュームｎページの容量とプールのページの容量が等しい。なお、本実施例においては、仮想ページの容量は、ストレージ装置１０４が提供する１又は複数の仮想ボリュームについて共通であるが、１又は複数の仮想ボリュームにおいて異なる容量のページが含まれていてもよい。
【０１０３】
図８は、キャッシュアドレス空間３０１とＬＳキャッシュアドレス空間３０２との間のマッピング情報２１００の形式例を示す。二つのアドレス空間の記憶領域（アドレス範囲）は、ブロック単位で関連付けられている。
【０１０４】
ページ番号２１０１は、キャッシュアドレス空間（キャッシュ領域）の記憶領域におけるページ（単位記憶領域）の番号を示す。ブロック番号２１０２は、ページを構成するブロックの番号を示す。ＬＳキャッシュアドレス空間３０２のページ番号２１０３及びブロック番号２１０４は、キャッシュアドレス空間３０１のブロックに関連づけられた、ＬＳキャッシュアドレス空間３０２内のブロックを示す。
【０１０５】
キャッシュアドレス空間３０１（キャッシュ領域）のページは、仮想ボリュームの仮想ページと関連づけられ、一度仮想ページにキャッシュアドレス空間３０１のページが割り当てられると、その関係は維持される。仮想ページの仮想ブロックへのオーバーライトが要求されると、キャッシュアドレス空間３０１における同じページの同じブロックへデータがオーバーライトされる。
【０１０６】
仮想ページの仮想ブロックへのオーバーライトに対して、ＬＳキャッシュアドレス空間３０２（ＬＳキャッシュ領域）では、別のブロックに新たにデータが書き込まれる。従って、キャッシュアドレス空間３０１のブロックと、ＬＳキャッシュアドレス空間３０２のブロックとの間の関係は、変化する。二つのキャッシュ領域のブロック間の関係の変化に伴い、ストレージ装置１０４は、キャッシュマッピング情報２１００に加え、仮想ボリューム情報２０００のプール内のページ番号２００４も更新する。
【０１０７】
図９は、キャッシュとプールとの間のマッピング情報２２００の形式例を示す。キャッシュとプールとの間のマッピング情報２２００は、ＬＳキャッシュアドレス空間のページ番号とプールアドレス空間のページ番号とのマッピングを管理する。キャッシュとプールとの間のマッピング情報２２００は、図５における関係３４７を示す。具体的には、ＬＳキャッシュアドレス空間上でのページ番号２２０１は、ＬＳキャッシュアドレス空間３０１におけるページ番号を示す。プール内のページへのポインタ２２０２は、ＬＳキャッシュアドレス空間３０１におけるページ番号に対応するページのページ情報２５００へのポインタを格納している。
【０１０８】
図１０は、プール情報２３００の形式例を示す。プール情報２３００は複数のプールの情報を含み得るが、図１０は、一つのプールの情報を示す。プール情報２３００は、プールＩＤ２３０１、フラッシュパッケージグループＩＤ２３０２、容量２３０３、空き容量２３０４、を含む。
【０１０９】
プールＩＤ２３０１はプールのＩＤを示す。フラッシュパッケージグループＩＤ２３０２は、プールを構成するフラッシュパッケージグループ１１５を示す。容量２３０３はプールの記憶容量を示す。空き容量２３０４は、プールの中で使用可能な記憶容量を示す。
【０１１０】
図１１は、ページ情報２５００の形式例を示す。ページ情報２５００は、プール内の複数のページの管理情報であるが、図１１は、一つのページのページ情報を示す。ページ情報２５００は、プールＩＤ２５０１、ページポインタ２５０３、ページ番号２５０４、プールボリューム番号２５０５、ページ番号２５０６、フラッシュ側プールＩＤ２５０７、プールページのブロック番号２５０８、フラッシュ側プールアドレス空間のブロック番号２５０９を含む。
【０１１１】
プールＩＤ２５０１はこのページが所属しているプールのＩＤを示す。ページポインタ２５０３は、プール内の空きページをキュー管理するときに使用される。プールボリューム番号２５０５は、このページが含まれるプールボリュームを示す。ページ番号２５０４は、このページのプールボリューム内の番号を示す。
【０１１２】
フラッシュ側プールＩＤ２５０７は、プールＩＤ２５０１が示すプールに関連づけられるフラッシュ側アドレス空間３５２を有するフラッシュ側プール３０４を示す。プール３０３及びフラッシュ側プール３０４の数がそれぞれひとつである場合、この情報は省略される。
【０１１３】
ページのブロック番号２５０８は、プールアドレス空間におけるページ内のブロック番号を示す。フラッシュ側プールアドレス空間のブロック番号２５０９は、ページのブロック番号に関連づけられたフラッシュ側プールアドレス空間のブロック番号を示す。このブロック番号間の関係は、図５において符号３４８で示されている。
【０１１４】
この関連付け又は割り当ては、ストレージ装置１０４の初期設定時に実施される。システム運用中に追加されたプールボリュームのページ情報２５００は、当該プールボリュームが追加された時に生成される。
【０１１５】
なお、プールアドレス空間のページとフラッシュパッケージアドレス空間のページとのマッピングのためには、ページ情報２５００が、フラッシュパッケージアドレス空間のページ番号を管理すればよい。フラッシュメモリへのアクセス単位はページサイズより小さいことがほとんどであるため、本例は、ブロック単位でマッピングを管理する。セグメント単位のマッピングも、同様の方法で管理できる。
【０１１６】
図１２は、プール３０３にあるページの、空きページ管理ポインタ２６００の例を示す。空きページと使用不可ページはキューにより管理される。図１２は、空きページ管理ポインタ２６００によって管理される空きページの集合を示す。空きページは、仮想ページに割り当てられていないページを意味する。空きページに対応したページ情報２５００を空きページ情報と呼ぶ。空きページ管理ポインタ２６００は、先頭の空きページ情報２５００のアドレスをさす。次に、先頭のページ情報２５００の中の空きページを指すページポインタ２５０３が次の空きページ情報２５００を指す。
【０１１７】
図１２において、最後の空きページ情報２５００の空きページポインタ２５０３は、空きページ管理ポインタ２６００を示しているが、ヌル値でもよい。ストレージコントローラ１０９は、ページを割り当てていない仮想ページに書き込み要求を受けると、仮想ボリュームの仮想ボリュームＲＡＩＤタイプ２００３と同一のフラッシュパッケージグループ１１５の中のいずれか、例えば、空きページ数の最も多いフラッシュパッケージグループ１１５の空きページを、空きページ管理ポインタ２６００から探し、見つかった空きページを仮想ページに割り当てる。
【０１１８】
１以上の空きページ管理ポインタ２６００が、一つのプールに対して設けられる。例えば、プールボリュームごとに空きページ管理ポインタ２６００が設けられてもよい。
【０１１９】
ストレージコントローラ１０９は、空きページ２５００をＬＳキャッシュアドレス空間３０２のページへ割り当てると、割り当てられページの一つ前の空きページのページポインタ２５０３を更新する。具体的には、ストレージコントローラ１０９は、一つ前の空きページのページ情報２５００のページポインタ２５０３を、割り当てられたページのページポインタ２５０３に変更する。ストレージコントローラ１０９は、さらに、該当するプール情報２３００の空き容量２３０４の値から割り当てられたページの容量を減算して、空き容量２３０４の値を更新する。
【０１２０】
図１３は、フラッシュパッケージグループ情報２４００の形式一例を示す。フラッシュパッケージグループ情報２４００は、フラッシュ側プールアドレス空間とフラッシュパッケージアドレス空間との間のマッピングを管理する。フラッシュパッケージグループ情報２４００の形式例を示す。フラッシュパッケージグループ情報２４００は、複数のフラッシュパッケージグループ１１５の情報を含み得るが、図１３は、一つのフラッシュパッケージグループ１１５の情報を図示する。
【０１２１】
フラッシュパッケージグループ情報２４００は、フラッシュパッケージグループＩＤ２４０１、パッケージグループＲＡＩＤタイプ２４０２、フラッシュ側プールブロック番号２４０３、フラッシュパッケージ番号２４０４、フラッシュパッケージアドレス空間のブロック番号２４０５、及び、使用可否状態２４０６を示す。フラッシュパッケージグループ情報２４００は、図５の関係３４５を示す。
【０１２２】
フラッシュパッケージグループＩＤ２４０１は、当該フラッシュパッケージグループ１１５の識別子を示す。パッケージグループＲＡＩＤタイプ２４０２は、当該フラッシュパッケージグループ１１５のＲＡＩＤタイプを示す。
【０１２３】
フラッシュ側プールブロック番号２４０３は、フラッシュパッケージグループのアドレス空間の管理単位であるブロックの番号である。フラッシュパッケージＩＤ２４０４は、当該フラッシュパッケージグループを構成するフラッシュパッケージの識別子を示す。
【０１２４】
フラッシュパッケージアドレス空間のブロック番号２４０５は、フラッシュ側プールブロック番号２４０３が示すアドレスそれぞれにマッピングされた、フラッシュパッケージアドレス空間のブロック番号を示す。
【０１２５】
使用可否状態２４０６は、フラッシュパッケージアドレス空間のブロック番号２４０５の値の使用（マッピング）が、許可されているか禁止されているかを示す。マッピング済み又はマッピング前のブロック番号は、使用が許可されているブロック番号である。
【０１２６】
後述するように、ＵＮＭＡＰコマンドを発行されることで、フラッシュパッケージアドレス空間のブロック番号は、使用が禁止された状態に変化する。ＵＮＭＡＰコマンドについては後で説明する。フラッシュパッケージアドレス空間３６２の拡張により追加される未割り当てのブロック番号は、使用が許可される。
【０１２７】
図１４は、フラッシュパッケージ情報２７００の形式一例を示す。フラッシュパッケージ情報２７００はフラッシュパッケージアドレス空間とフラッシュメモリのアドレス空間のマッピングを管理する。フラッシュパッケージ情報２７００は、各フラッシュパッケージ内で管理され、メモリ２１４に格納される。ストレージコントローラ１０９からはアクセスされない。
【０１２８】
フラッシュパッケージ情報２７００は、フラッシュパッケージＩＤ２７０１、フラッシュパッケージグループＩＤ２７０２、容量２７０３、空き容量２７０４、フラッシュパッケージアドレス空間のブロック番号２７０５、フラッシュメモリアドレス空間のブロック番号２７０６、アドレス空間ブロック数２７０７、使用フラッシュパッケージアドレス空間の最後のブロック番号２７０８を示す。
【０１２９】
フラッシュパッケージＩＤ２７０１は当該フラッシュパッケージ１１３のＩＤを示す。フラッシュパッケージグループＩＤ２７０２は、当該フラッシュパッケージ１１３が属するフラッシュパッケージグループ１１５を示す。容量２７０３は当該フラッシュパッケージ１１３（フラッシュメモリ）の実容量を示す。フラッシュパッケージアドレス空間の拡張によって、容量２７０３の値は変化しない。
【０１３０】
空き容量２７０４は、データを書き込むことができる領域の実容量を示す。空き容量は、容量２７０３の値から、データを格納する領域の容量とガベージの容量を引いた値を示す。フラッシュパッケージアドレス空間の拡張によって、空き容量２７０４の値は変化しない。ガベージのデータ消去により、空き容量２７０４の値は増加する。
【０１３１】
フラッシュパッケージアドレス空間のブロック番号２７０５は、フラッシュパッケージの容量をブロック単位で管理するアドレス空間の番号である。フラッシュメモリアドレス空間のブロック番号２７０６は、フラッシュメモリの容量をブロック単位で管理するアドレス空間の番号である。
【０１３２】
フラッシュメモリアドレス空間のブロック番号２７０６は、フラッシュパッケージアドレス空間のブロック番号２７０５に関連付けられた物理的なフラッシュメモリの格納位置を示す情報である。フラッシュパッケージアドレス空間の空きブロックに最初にデータが格納されるときに、そのブロック番号に、当該データを実際に格納するフラッシュメモリアドレス空間のブロック番号が割り当てられる。
【０１３３】
アドレス空間ブロック数２７０７は、フラッシュパッケージアドレス空間を構成するブロックの数を示す。具体的には、アドレス空間ブロック数２７０７は、フラッシュパッケージアドレス空間ブロック番号の最後の番号を示す。アドレス空間ブロック数２７０７の値は、後述のフラッシュパッケージアドレス空間の拡張において参照される。
【０１３４】
フラッシュパッケージアドレス空間は、拡張できるように、予め大きな容量（仮想容量）が用意されている。例えば、アドレス空間ブロック数２７０７の初期値が１０００であり、フラッシュパッケージアドレス空間に対して、ブロック３０００個分の容量が用意されているとする。
【０１３５】
ストレージ装置１０４の起動時、フラッシュパッケージアドレス空間の容量は、１０００ブロック１０００に設定されている。つまり、フラッシュパッケージアドレス空間において、１０００番までのブロック番号が定義されている。
【０１３６】
運用中に、フラッシュパッケージアドレス空間を拡張する場合、ストレージ装置１０４は、拡張されるブロック数を現在のブロック数に追加する。例えば、拡張されるブロック数が１０００の場合、ストレージ装置１０４は、アドレス空間ブロック数２７０７の値を１０００から２０００に更新し、使用できるブロック番号を再設定する。
【０１３７】
なお、プール３０３とフラッシュ側プール３０４の一方のみを使用してもよい。例えば、ストレージ装置１０４は、フラッシュ側プール３０４のみ使用する。この場合、ＬＳキャッシュアドレス空間３０２とフラッシュ側プールアドレス空間３５２とをブロック単位ではなく、ページ単位で管理してもよい。ページ情報２５００は不要となる。２２０２にフラッシュアドレス空間のページ番号、即ち２４００へのポインタを格納すればよい。
【０１３８】
（６）容量拡大処理
以下において、図５の構成を例として、ストレージ装置１０４による処理を説明する。図１５Ａ及び図１５Ｂは、ストレージ装置１０４が、ホスト１０１から仮想ボリュームに対する仮想ページに初めてライト要求を受けた時の処理（新規ライト処理）の流れを示す。図１５Ｃは、新規ライト処理におけるデータの流を示す。
【０１３９】
図１５Ａは、ホスト１０１に対する処理の流れを示す。ストレージ装置１０４は、ホスト１０１からライト要求を受信する（Ｓ１０１０）。ホスト１０１が発行するライト要求は、ライトデータの書き込み先の、仮想ボリュームの識別番号、及びライトデータの書き込み位置の情報（仮想ボリューム上のホストＬＢＡ（「Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）及びデータ長）を含む。以下では、ストレージ装置がホストに提供するボリューム（仮想ボリューム）のブロックにアサインされているＬＢＡのことを、「ホストＬＢＡ」と呼ぶことがある。
【０１４０】
ストレージコントローラ１０９は、ライト要求を解析し、ライト要求に関わる仮想ボリュームのアドレスを得る。プロセッサ１１９は、取得したアドレスにキャッシュアドレス空間３０１におけるアドレス領域をマッピングし、その領域に対応する記憶領域へ、ホスト１０１から送信されたライトデータを格納する（書き込む）（Ｓ１０１２）。
【０１４１】
図１５Ｃに示すように、ライト要求の対象となる仮想ボリューム３１１の仮想ページ３２１内のブロック（記憶領域）３３１に対して、キャッシュアドレス空間３０１（キャッシュ領域）のページ（記憶領域）３２２内のブロック（記憶領域）３３２が割り当てられる。
【０１４２】
図１５Ａに戻って、ストレージコントローラ１０９は、キャッシュメモリ１１０へのライトデータの書き込みが完了すると、ホスト１０１にライト要求の完了報告を送信する（Ｓ１０１４）。
【０１４３】
図１５Ｂは、ストレージ装置１０４によるキャッシュデータの処理の流れを示す。ストレージコントローラ１０９は、キャッシュメモリ１１０を監視する。フラッシュパッケージ１１３に未書き込みのライトデータを検出したら（Ｓ１０２０）、ストレージコントローラ１０９は、キャッシュアドレス空間３０１のブロックに対してＬＳキャッシュアドレス空間３０２のブロックをマッピングする（Ｓ１０２２）。図１５Ｃにおいて、ＬＳキャッシュアドレス空間３０２のページ３２３におけるブロック３３３が、キャッシュアドレス空間３０１のブロック３３２に割り当てられている。
【０１４４】
図１５Ｂに戻って、ストレージコントローラ１０９は、キャッシュアドレス空間３０１からＬＳキャッシュアドレス空間３０２へライトデータをコピーする（Ｓ１０２４）。ストレージコントローラ１０９は、ＬＳキャッシュアドレス空間３０２のページ３２３にプールアドレス空間３５１のページが割り当てられているか否か判定する（Ｓ１０２６）。
【０１４５】
ＬＳキャッシュアドレス空間３０２のページ３２３にプールアドレス空間３５１のページが割り当てられていない場合（Ｓ１０２６：ＮＯ）、ストレージコントローラ１０９は、ＬＳキャッシュアドレス空間３０２のページ３２３に、空きページ３２４（図１５Ｃ参照）を空きページ管理情報ポインタ２６００から選択して、割り当てる（Ｓ１０２８）。
【０１４６】
ストレージコントローラ１０９は、キャッシュとプールとの間のマッピング情報２２００において、ＬＳキャッシュアドレス空間３０２のページ３２３の番号と、割り当てられたページへのポインタを格納する。
【０１４７】
ＬＳキャッシュアドレス空間３０２のページ３２３にプールアドレス空間３５１のページが割り当てられている場合、つまり、キャッシュとプールとの間のマッピング情報２２００において、ＬＳキャッシュアドレス空間３０２のページ３２３の番号と、割り当てられたページ３２４へのポインタが登録されている場合、ストレージコントローラ１０９は、割り当てられているページを使用する（Ｓ１０３０）。
【０１４８】
図１５Ｃにおいて、プールアドレス空間３５１内のページ３２４が割り当てられている。ページ間のマッピングが決まれば、ページ内のブロック間のマッピングも決まる。ＬＳキャッシュアドレス空間３０２のブロック３３３と、プールアドレス空間３５１のブロック３３５がマッピング関係を有する。
【０１４９】
ストレージコントローラ１０９は、プールアドレス空間３５１内の割り当てられたページのページ情報２５００において、ライト対象のページブロック番号２５０８の値にマッピングされたフラッシュ側プールブロック番号２５０９の値を検索する（Ｓ１０３２）。
【０１５０】
ストレージコントローラ１０９は、フラッシュパッケージグループ情報２４００において、ステップＳ１０３２で見つけたフラッシュ側プールブロック番号に関連付けられる、フラッシュパッケージＩＤ２４０４及びフラッシュパッケージアドレス空間のブロック番号２４０５の値のペアを検索する（Ｓ１０３４）。
【０１５１】
ストレージコントローラ１０９は、ステップＳ１０３４において見つけたフラッシュパッケージ１１３に対し、見つけたフラッシュパッケージアドレス空間のブロック番号へのライト要求を、発行する（Ｓ１０３６）。図１５Ｃの例においては、１ページの全ブロックが１フラッシュパッケージ１１３とマッピングされている。
【０１５２】
ＬＳキャッシュ（ＬＳキャッシュアドレス空間３０２）のページにプール３０３のページを割り当てられると、フラッシュ側プール３０４のページはユニークに決まる。ストレージコントローラ１０９は、圧縮や重複排除処理を、例えばキャッシュアドレス空間３０１（キャッシュ領域）からＬＳキャッシュアドレス空間３０２（ＬＳキャッシュ領域）にコピーするときに、実施してもよい。
【０１５３】
フラッシュパッケージ１１３は、ライト要求を受信すると、フラッシュパッケージ１１３内のバッファにライトデータを一時的に格納し、ライト完了報告を返す。フラッシュパッケージ１１３は、フラッシュパッケージ１１３内のフラッシュメモリにデータを格納する処理を、ステップＳ１０３２で発行されたライト要求と非同期で実行する。
【０１５４】
フラッシュパッケージ１１３は、フラッシュパッケージアドレス空間の指定されたブロック番号に対して、フラッシュメモリアドレス空間の空きブロック番号を割り当てる。フラッシュパッケージ１１３は、割り当てたブロック番号に対応するフラッシュメモリの記憶領域に、ライトデータを格納する。フラッシュパッケージ１１３は、実ブロックを新たに割り当てると、フラッシュパッケージ情報２７００の空き容量２７０４の値を更新する。図１５Ｂの処理は、フラッシュメモリへのアクセス単位であるセグメント単位で実行されてもよい。
【０１５５】
次に、ライト要求のあった箇所へさらにライト要求があった場合のオーバーライト処理を説明する。図１６Ａ及び図１６Ｂは、ストレージ装置１０４が、ホスト１０１から仮想ボリュームに対する仮想ページへのオーバーライト要求を受けた時の処理（オーバーライト処理）の流れを示す。図１６Ｃは、オーバーライト処理におけるデータの流を示す。
【０１５６】
図１６Ａは、ホスト１０１に対する処理の流れを示す。ストレージ装置１０４は、ホスト１０１からライト要求を受信する（Ｓ１１１０）。ストレージコントローラ１０９は、ライト要求を解析し、ライト要求に関わる仮想ボリュームのアドレスを得る。プロセッサ１１９は、キャッシュアドレス空間３０１において取得したアドレスに割り当てられている領域３２２へ、ホスト１０１から送信されたライトデータを格納する（書き込む）（Ｓ１１１２）。
【０１５７】
図１６Ｃに示すように、ライト要求の対象となる仮想ボリューム３１１の仮想ページ３２１内のブロック３３１に対して、キャッシュアドレス空間３０１のページ３２２内のブロック３３２が、既に割り当て済みである。ブロック３３２の前データに対して、新ライトデータがオーバーライトされる。
【０１５８】
図１６Ａに戻って、ストレージコントローラ１０９は、キャッシュメモリ１１０へのライトデータの書き込みが完了すると、ホスト１０１にライト要求の完了報告を送信する（Ｓ１１１４）。
【０１５９】
図１６Ｂは、ストレージ装置１０４によるキャッシュデータの処理の流れを示す。フラッシュパッケージ１１３に未書き込みのライトデータを検出したら（Ｓ１１２０）、ストレージコントローラ１０９は、キャッシュアドレス空間３０１のブロックに対してＬＳキャッシュアドレス空間３０２のブロックをマッピングする（Ｓ１１２２）。図１６Ｃにおいて、ＬＳキャッシュアドレス空間３０２のページ３２３におけるブロック３３４が、キャッシュアドレス空間３０１のブロック３３２に割り当てられている。
【０１６０】
ＬＳキャッシュアドレス空間３０２内の、前回と同じブロック３３３（記憶領域）ではなく、一度もライトデータが格納されていないブロック（記憶領域）、即ち未使用なブロックが割り当てられる。例えば、最終使用記憶領域の次の記憶領域が割り当てられる。
【０１６１】
図１６Ｂに戻って、ストレージコントローラ１０９は、キャッシュアドレス空間３０１からＬＳキャッシュアドレス空間３０２へライトデータをコピーする（Ｓ１１２４）。ストレージコントローラ１０９は、新たに割り当てられた未使用ブロック３３４に、ライトデータを書き込む。つまり、ストレージコントローラ１０９は、ライトデータをＬＳキャッシュ領域に追記する。ストレージコントローラ１０９は、旧データを格納するブロック３３３を、無効領域として管理する。この領域は、データを新たに書き込むことができないガベージである。当該ガベージは、フラッシュメモリ内のデータ消去に応じて解放される。
【０１６２】
ライトデータは有効データでありライトデータが格納された記憶領域は使用領域である。一度もライトデータが格納されていない記憶領域は、空き領域であり未使用領域である。ライトデータが格納された後そのデータが更新された場合それは旧データとなる。これは無効データであり、格納された記憶領域は無効領域であり、ガベージである。
【０１６３】
ストレージコントローラ１０９は、キャッシュアドレス空間３０１とＬＳキャッシュアドレス空間３０２との間のマッピングを管理する、キャッシュマッピング情報２１００を変更する（Ｓ１１２６）。ストレージコントローラ１０９は、ブロック３３２に対応するブロックを、ブロック３３３からブロック３３４へ変更する。
【０１６４】
この後のステップＳ１１２８〜Ｓ１１３８は、図１５ＢにおけるステップＳ１０２６〜Ｓ１０３６と同様である。ＬＳキャッシュアドレス空間３０２の新しいブロック３３４に対して、プールアドレス空間３５１、フラッシュパッケージアドレス空間３６２、及びフラッシュメモリアドレス空間３６３において、新たしいブロックが割り当てられる。
【０１６５】
次に、ＵＮＭＡＰコマンドの処理を説明する。ストレージコントローラ１０９は、不要データを格納する、フラッシュパッケージアドレス空間３６２のアドレス領域に対して、ＵＮＭＡＰコマンドを発行する。図１７Ａ及び１７Ｂは、ＵＮＭＡＰコマンドを発行したときの処理を示す。ＵＮＭＡＰコマンドは、指定された記憶領域を解放し、空き領域にするためのコマンドである。図１７ＡはＵＮＭＡＰコマンドの処理の流れを示し、図１７ＢはＵＮＭＡＰコマンドによるマッピングの切断を示す。
【０１６６】
図１７Ａに示すように、ストレージコントローラ１０９は、フラッシュパッケージ１１３に対して、ＵＮＭＡＰコマンドを発行する（Ｓ１３１０）。ＵＮＭＡＰコマンドは、フラッシュパッケージアドレス空間３６２のブロックを指定する。図１７Ｂにおいて、ＵＮＭＡＰコマンドは、フラッシュパッケージアドレス空間３６２のブロック３４１を指定する。上述のように、本例において、ブロックはフラッシュメモリのデータ消去単位であると共に、フラッシュパッケージ１１３とプール３０３との間のマッピング単位、つまり、ストレージコントローラ１０９からのＩ／Ｏの単位である。
【０１６７】
図１７Ａ及び１７Ｂに示すように、フラッシュパッケージ１１３（プロセッサ２１３）は、ＵＮＭＡＰコマンドに指定されたフラッシュパッケージアドレス空間３６２のブロック３４１とフラッシュメモリアドレス空間３６３のブロック３４２と、のマッピングを切断する（Ｓ１３１２）。
【０１６８】
フラッシュパッケージ１１３は、フラッシュパッケージ情報２７００のフラッシュパッケージアドレス空間のブロック番号２７０５において、ＵＮＭＡＰコマンドに指定された番号を検索する。フラッシュパッケージ１１３は、当該ブロック番号に関連づけられた、フラッシュメモリアドレス空間のブロック番号２７０６のセルに、‘０’を登録する。登録される値は、‘０’に代えて、ＮＵＬＬまたは初期状態と同じ値でもよい。
【０１６９】
マッピング関係を切ることによって、フラッシュメモリアドレス空間３６３のブロック３４２は、ガベージに変化する。フラッシュパッケージ１１３のプロセッサ２１３は、ストレージコントローラ１０９にＵＮＭＡＰコマンド完了を応答する。ストレージコントローラ１０９は、ＵＮＭＡＰ対象のフラッシュパッケージアドレス空間３６２のブロック３４１を、使用が禁止された領域として管理し、この領域へのＩ／Ｏを禁止する。
【０１７０】
ストレージコントローラ１０９は、フラッシュパッケージグループ情報２４００の使用可否状態２４０６を使用して、フラッシュパッケージアドレス空間３６１において、使用できないアドレス領域を管理する。ストレージコントローラ１０９は、ＵＮＭＡＰコマンドに指定されたブロックのエントリにおいて、使用可否状態２４０６の値を‘否’に設定する。
【０１７１】
ＵＮＭＡＰコマンドに指定されたブロック３４１にマッピングされているフラッシュメモリアドレス空間３６３のブロック３４２は、ガベージである。フラッシュパッケージ１１３は、ガベージブロック３４２のデータを消去し、そのブロック３４２を使用可能な空きブロックとして管理する（Ｓ１３１３）。
【０１７２】
例えば、フラッシュパッケージ１１３は、図１２を参照して説明した空きページの管理と同様に、ポインタを使用してフラッシュメモリアドレス空間の空きブロックを管理することができる。フラッシュパッケージ１１３は、ガベージを空き領域に変化させると、フラッシュパッケージ情報２７００の空き容量２７０４の値を更新する。
【０１７３】
次に、フラッシュメモリにできたガベージ（空き領域）を回収し、フラッシュパッケージアドレス空間３６２の連続した空き領域を提供する手順を説明する。上述のように、ＵＮＭＡＰコマンドは、フラッシュメモリアドレス空間３６３におけるブロックを指定する。当該ブロック使用の使用は禁止される。フラッシュメモリアドレス空間３６３において、使用できないブロックが離散的に存在する。
【０１７４】
ストレージコントローラ１０９は、ページ単位で仮想ボリュームを管理し、フラッシュメモリアドレス空間３６３において、ページサイズの空き領域を必要とする。ストレージ装置１０４は、フラッシュパッケージアドレス空間３６２に新しい領域を追加することで、ページに必要な連続領域を形成できる。フラッシュメモリにおいてガベージから変換された空き領域は、拡張されたフラッシュパッケージアドレス空間３６２において、新たにプールに割り当てられるページに対して、再割り当てされる。
【０１７５】
ストレージ装置１０４は、フラッシュパッケージアドレス空間３６２の拡張に応じて、プールアドレス空間３５１も拡張する。これによって、ストレージコントローラ１０９によるキャッシュを介したデータ移動を伴うガベージコレクションを行うことなく、効率的に空き領域を形成できる。
【０１７６】
図１８Ａ及び図１８Ｂは、複数のアドレス空間の拡張及び追加されたアドレス空間へのフラッシュメモリの空き領域の再割り当てを示す。図１８Ａは複数のアドレス空間の拡張及びマッピングのフローチャートを示す。図１８Ｂは複数階層のアドレス空間及びフラッシュメモリの空き領域の間の関係を示す。
【０１７７】
図１８Ａに示すように、ストレージコントローラ１０９は、フラッシュパッケージアドレス空間３６２を拡張する（Ｓ１３１４）。例えば、ストレージコントローラ１０９は、パッケージグループ１１５のフラッシュパッケージ１１３それぞれの空き容量を参照する。一番少ない空き容量が、規定値ｘに達している場合、当該パッケージグループ１１５の各フラッシュパッケージ１１３の仮想容量を増加させることを決定する。これによりパッケージグループ１１５における空き容量の不足を効果的に避けることができる。
【０１７８】
ストレージコントローラ１０９は、追加する容量を決定する。例えば、ストレージコントローラ１０９は、式：（１００−ｘ）％×ｙ％に従って、フラッシュパッケージアドレス空間３６２に追加する容量を決定する。値ｘ、ｙは、ユーザにより設定される又は装置内に予め設定されている。空き容量は、ガベージを含まず、データをライトできる容量である。増加容量は、ページサイズ以上であり、例えば、ガベージの総容量より多い、容量追加の開始の条件及び追加容量は、ＵＮＭＡＰコマンドによりマッピングが切断されたアドレス領域の量に基づいてもよい。
【０１７９】
ストレージコントローラ１０９は、パッケージグループ１１５の各フラッシュパッケージ１１３へフラッシュパッケージアドレス空間３６２の拡張要求を送信する。拡張要求は、増加させる容量を指定する。
【０１８０】
フラッシュパッケージ１１３は、ストレージコントローラ１０９からの指示に応じて、フラッシュパッケージアドレス空間３６２を拡張する。フラッシュパッケージ１１３は、フラッシュパッケージ情報２７００を更新する。具体的には、フラッシュパッケージ１１３は、アドレス空間ブロック数２７０７の値を、拡張したフラッシュパッケージアドレス空間３６２に合わせて増加させる。フラッシュパッケージアドレス空間を拡張することで、フラッシュパッケージの容量が増加したように見せる。
【０１８１】
フラッシュパッケージ１１３は、フラッシュパッケージアドレス空間のブロック番号２７０５に、追加したアドレス空間のブロック番号を追加する。関連付けられるフラッシュメモリアドレス空間のブロック番号２７０６の値は、それぞれ、初期値である。つまり、フラッシュパッケージ１１３は、フラッシュパッケージアドレス空間３６２を拡張するのみで、追加されたアドレスをフラッシュメモリアドレス空間３６３にはマッピングしない。
【０１８２】
図１８Ｂを参照すると、フラッシュパッケージアドレス空間３６２が拡張され、その容量が、１０００ブロックから２０００ブロックに増加されている。図１８Ｂは、一つのフラッシュパッケージアドレス空間３６２を示すが、パッケージグループ１１５の各フラッシュパッケージ１１３のアドレス空間が拡張される。上記例において追加される容量は共通であるが、パッケージによって異なっていてもよい。
【０１８３】
フラッシュパッケージ１１３のフラッシュパッケージアドレス空間が拡張されると、ストレージコントローラ１０９は、フラッシュメモリの増設と同じように記憶階層を管理する。ストレージコントローラ１０９は、フラッシュパッケージアドレス空間の拡張に応じて、フラッシュ側プールアドレス空間３５２に新たな空間３７３を追加し、フラッシュ側プールアドレス空間３５２を拡張する（Ｓ１３１５）。
【０１８４】
ストレージコントローラ１０９は、フラッシュパッケージグループ情報２４００を更新する。ストレージコントローラ１０９は、追加されたフラッシュパッケージアドレス空間のブロックのエントリを、フラッシュパッケージグループ情報２４００に追加する。ストレージコントローラ１０９は、フラッシュ側プールブロック番号２４０３において、新規の番号を付与する。使用可否状態２４０６の値は、‘可’である。
【０１８５】
次に、ストレージコントローラ１０９は、フラッシュ側プールアドレス空間３５２の拡張に応じて、プールアドレス空間３５１にアドレス領域３７５を追加して、拡張する（Ｓ１３１６）。ストレージコントローラ１０９は、フラッシュ側プールアドレス空間３５２の増加容量に応じた新しいプールボリュームを生成し、プール３０３へ追加する。これにより、空き領域をコンパクションして確保し、ホスト１０１へ連続した空き領域３７５を提供することができる。ストレージコントローラ１０９は、新たに追加されたプールボリュームのページのページ情報２５００を生成する。
【０１８６】
次に、ストレージコントローラ１０９は、ＬＳキャッシュアドレス空間３０２を拡張する（Ｓ１３１７）。ストレージコントローラ１０９は、アドレス領域を追加するのみならず、物理的な記憶領域をＬＳキャッシュ領域に追加する。ＬＳキャッシュ領域において、データは追記される。そのため、キャッシュメモリ上に使用できないガベージが発生する。ＬＳキャッシュの物理記憶領域を追加することで、プールアドレス空間３５１の拡張に応じて使用できるＬＳキャッシュ領域（空き領域）を適切に増加させる。ＬＳキャッシュ領域への記憶領域の追加は、連続する記憶領域を増加させる。
【０１８７】
フラッシュメモリアドレス空間３６３のガベージを、フラッシュパッケージアドレス空間３６２において追加されたアドレス領域にマッピングする（Ｓ１３１８）。フラッシュパッケージ１１３は、ライト要求を受け、ライトデータをフラッシュメモリにライトする時に、ガベージをフラッシュパッケージアドレス空間３６２にマッピングする。
【０１８８】
図１８Ｂを参照すると、フラッシュメモリアドレス空間３６３におけるガベージブロック３４２は、フラッシュパッケージアドレス空間３６２において、追加された空間３７１のブロックにマッピングされている。フラッシュパッケージ１１３は、マッピングに応じてフラッシュパッケージ情報２７００を更新する。なお、ガベージブロック３４２は、拡張された後のフラッシュパッケージアドレス空間３６２の任意の空き領域にマッピングされ得る。
【０１８９】
フラッシュメモリアドレス空間のブロック３４２を空き領域として使用するため、フラッシュパッケージ１１３は、ブロック３４２のデータを消去する。上述のように、ブロックはフラッシュメモリの消去単位である。
【０１９０】
上述のように、フラッシュパッケージアドレス空間３６２を拡張することで、離散的なアドレス領域を回収して、広い連続したアドレス領域を形成することができる。フラッシュメモリにおいて回収された空き領域は、フラッシュパッケージアドレス空間３６２におけるページサイズ以上の連続したアドレス領域に再割り当てされ、ホスト１０１に提供される。これにより、空き容量を確保するためのガベージコレクション処理に伴うＬＳキャッシュを介したデータ移動やマッピング変更による負荷が減らされる。
【０１９１】
なお、ストレージコントローラ１０９は、プールアドレス空間３５１を拡張してからＬＳキャッシュアドレス空間３０２を拡張し、さらに、フラッシュパッケージアドレス空間３６２を拡張してもよい。
【０１９２】
ストレージコントローラ１０９に代わり、フラッシュパッケージ１１３が、フラッシュパッケージアドレス空間の拡張を開始してもよい。フラッシュパッケージ１１３は、パッケージグループ１１５を構成する他のフラッシュパッケージ１１３の情報を保持し、それら他のフラッシュパッケージ１１３にアドレス空間の拡張を通知する。
【０１９３】
フラッシュパッケージ１１３は、ストレージコントローラ１０９にアドレス空間の拡張を通知してもよい。ストレージコントローラ１０９は、ＲＡＩＤグループを構成する他のフラッシュパッケージ１１３に、フラッシュパッケージアドレス空間３６２の拡張を指示してもよい。他のフラッシュパッケージ１１３は、通知に応じて、フラッシュパッケージアドレス空間３６２を拡張する。
【０１９４】
上記例において、消去処理する単位とＵＮＭＡＰコマンドで指定される単位は、ブロックとされている。ＵＮＭＡＰコマンドがセグメントを指定する場合、フラッシュパッケージ１１３は、データを消去するブロック内の有効なセグメントデータを他の新しいブロックへコピーして退避したあと、そのブロックのデータを消去する。当該処理は、バックグラウンドでストレージ装置１０４からの処理とは非同期に実施される。
【０１９５】
上記例はＲＡＩＤを構成するフラッシュパッケージのフラッシュパッケージアドレス空間３６２を共に拡張する。設計によっては、フラッシュパッケージ１１３毎にフラッシュパッケージアドレス空間３６２を拡張してもよい。フラッシュパッケージ１１３がＲＡＩＤグループに含まれない場合、そのフラッシュパッケージ１１３のフラッシュパッケージアドレス空間３６２のみを拡張してもよい。そのフラッシュパッケージ１１３の記憶領域から一つのボリュームが提供される。
【０１９６】
（７）パリティ再計算
空き領域を作成するためのＵＮＭＡＰコマンドが、フラッシュパッケージアドレス空間３６２のアドレス＆ａ１を示すとする。アドレス＆ａ１にマッピングされるフラッシュメモリアドレス空間３６３のアドレス＆ａ２が示す記憶領域は、データＡを格納しているとする。ストレージコントローラ１０９は、アドレス＆ａ１を使用できないアドレスとして管理する。
【０１９７】
つまり、ストレージコントローラ１０９は、ＵＮＭＡＰコマンドにより、データＡが０データに更新されたと認識する。しかし実際には、アドレス＆ａ２の示す記憶領域は、旧データであるデータＡを格納したままである。従って、データＡが格納された記憶領域＆ａ２を含むフラッシュパッケージグループ１１５内のストライプ列から生成されるパリティは、記憶領域＆ａ２内のデータが０データであることを前提とした値に、再計算して更新する必要がある。
【０１９８】
従来、ストレージコントローラ１０９は、ＵＮＭＡＰコマンドを発行する前に、パリティ再計算に必要な旧データを、ＵＮＭＡＰコマンドが指定する領域からリードするコマンドを発行する。フラッシュパッケージ１１３は旧データを、ストレージコントローラ１０９に応答する。その後、ストレージコントローラ１０９は、フラッシュパッケージ１１３にＵＮＭＡＰコマンドを発行する。
【０１９９】
次に、ストレージコントローラ１０９は、パリティ再計算に必要な旧パリティの値を読み出すため、パリティが格納されているフラッシュパッケージ１１３へリードコマンドを発行する。フラッシュパッケージ１１３は旧パリティ値を応答する。ストレージコントローラ１０９は、旧データと旧パリティにより新パリティを計算する。ストレージコントローラ１０９は、ライトコマンドを発行して、新パリティを格納する。
【０２００】
本実施例は、パリティ再計算時のコマンド発行回数を低減し、性能を向上させる方法を与える。本実施例は、パリティ更新のため、拡張ＵＮＭＡＰコマンドをフラッシュパッケージ１１３に対して定義する。拡張ＵＮＭＡＰコマンドは、フラッシュパッケージアドレス空間３６２において、指定された範囲に格納されたデータを返答した後、当該指定範囲のＵＮＭＡＰ処理を実行することを指示する。
【０２０１】
さらに、本実施例は、パリティライトコマンドをフラッシュパッケージ１１３に対して定義する。パリティライトコマンドは、フラッシュパッケージアドレス空間３６２の範囲とデータとをパラメータとして含む。パリティライトコマンドは、指定されたフラッシュパッケージアドレス空間３６２のデータと指定されたアドレス範囲のデータのＸＯＲを算出して、指定されたアドレス範囲に書き戻すことを指示する。
【０２０２】
ストライプ列３０７を形成する複数のフラッシュパッケージ１１３のフラッシュパッケージアドレス空間は、リクラメーションやデータの移動などにより、それぞれでの使用率が異なり、空き容量も異なる。フラッシュパッケージアドレス空間は、通常先頭アドレスから上詰めして使用される。
【０２０３】
そのため、ストレージコントローラ１０９は、フラッシュパッケージグループ１１５の空き領域を使用する際は、使用量のもっとも多いフラッシュパッケージアドレス空間で使用された最後のアドレスにそろえて、ストライプ列を作成する。ストレージコントローラ１０９は、パッケージグループ１１５において、フラッシュパッケージそれぞれの使用フラッシュパッケージアドレス空間のブロック番号の最後の値を同定し、それらの値において一番大きい値を、使用されている容量と見なす。
【０２０４】
図１９は、パリティ再計算処理のラダーチャートを示す。ストレージコントローラ１０９は、拡張ＵＮＭＡＰコマンドを、フラッシュパッケージアドレス空間３６２における範囲を指定して、フラッシュパッケージ１１３（データノード）へ発行する（Ｓ１４１０）。
【０２０５】
拡張ＵＮＭＡＰコマンドを受信したフラッシュパッケージ１１３は、指定されたアドレス範囲に格納されている旧データを読み出した後、ＵＮＭＡＰコマンド処理を実行する。フラッシュパッケージ１１３は、コマンド応答と共に、旧データをストレージコントローラ１０９に返す（Ｓ１４１２）。
【０２０６】
ストレージコントローラ１０９は、パリティライトコマンドを、取得した旧データと共に、旧パリティを格納しているフラッシュパッケージ１１３（パリティノード）へ発行する（Ｓ１４１４）。パリティライトコマンドは、旧パリティを格納するフラッシュパッケージアドレス空間３６２における範囲を指定する。
【０２０７】
パリティライトコマンドを受信したフラッシュパッケージ１１３は、受け取った旧データと格納されているパリティ（旧パリティ）のＸＯＲ演算をし、新パリティを計算する（Ｓ１４１６）。フラッシュパッケージ１１３は、旧パリティを、新パリティに更新する（Ｓ１４１８）。
【０２０８】
パリティライトコマンドを受信したフラッシュパッケージ１１３は、パリティライトコマンドに対して、ストレージコントローラ１０９へ応答を返す（Ｓ１４２０）。旧データを返答する拡張ＵＮＭＡＰコマンドにより、パリティ再計算のためのコマンド発行回数を低減し、性能を向上できる。また、パリティ更新のためのストレージコントローラ１０９による計算は不要である。
【０２０９】
図２０Ａ〜２０Ｃは、拡張ＵＮＭＡＰコマンド及びパリティライトコマンドによるフラッシュパッケージ１１３でのデータの変化の例を示す。フラッシュパッケージグループ１１５が、三台のフラッシュパッケージ１１３で構成されている。二台のフラッシュパッケージ１１３はデータノードであり、１台のフラッシュパッケージ１１３はパリティノードである。アルファベットはデータを表し、（ＸＯＲ）はＸＯＲ演算を表す。
【０２１０】
図２０Ａに示すように、データＡ、Ｂ、及び、データＡとデータＢのパリティからなる、ストライプ列が存在する。図２０Ｂに示すように、データＡのアドレスへ拡張ＵＮＭＡＰコマンドが発行されると、当該アドレスのデータが、データＡから０に変化したように管理される。
【０２１１】
データ更新に応じて、パリティを再計算する必要がある。新パリティは、旧パリティと旧データのＸＯＲ演算により求まる。図２０Ｃに示すように、パリティノードは、Ａ（ＸＯＲ）ＢとＡとの、ＸＯＲ計算を行う。新パリティ演算するとパリティはＢとなるため、Ｂへ更新する。
【０２１２】
次に、フラッシュパッケージ１１３内でのデータ移動を説明する。フラッシュパッケージ１１３内で連続したアドレスの空き領域が必要となる場合がある。フラッシュパッケージ１１３内でのデータ移動により、このような空き領域を作成できる。
【０２１３】
従来のデータ移動において、ストレージコントローラ１０９は、コピー元とコピー先を指定してデータをコピーするコマンドをフラッシュパッケージ１１３に発行する。ストレージコントローラ１０９は、コピーコマンドの発行前に、コピー先とコピー元のデータを読み出す。
【０２１４】
フラッシュパッケージ１１３は、コピーコマンドに応じて、コピー元からコピー先へデータをコピーする。コピー元データを‘０’にするために、ストレージコントローラ１０９は、コピー元を指定して、ＵＮＭＡＰコマンドを発行する。
【０２１５】
コピー元とコピー先のデータが更新されたため、コピー元とコピー先それぞれのストライプ列のパリティを更新する必要である。ストレージコントローラ１０９は、パリティ再計算に必要な旧パリティの値を読み出すため、旧パリティを格納しているフラッシュパッケージ１１３へ、リードコマンドを発行する。
【０２１６】
フラッシュパッケージ１１３は旧パリティ値を応答する。ストレージコントローラ１０９は旧データと旧パリティにより新パリティを計算してライトコマンドを発行し、格納する。パリティ計算はストライプ列の全データをＸＯＲ計算する。これをコピー元ストライプ列とコピー先ストレージストライプ列の両方のパリティについて実施する。
【０２１７】
本実施例は、以下に説明する方法によりデータを移動する。本実施例は、ＭＯＶＥコマンドをフラッシュパッケージ１１３に対して定義する。
【０２１８】
図２１は、ＭＯＶＥコマンドによる処理のラダーチャートを示す。ストレージコントローラ１０９は、ＭＯＶＥコマンドをフラッシュパッケージ１１３へ発行する（Ｓ１５１０）。ＭＯＶＥコマンドは、フラッシュパッケージアドレス空間３６２における、二つのアドレス範囲ｘ、ｙを指定する。
【０２１９】
フラッシュパッケージ１１３は、アドレス範囲ｘに格納されたデータを、アドレス範囲ｙへ移動させる（Ｓ１５１２）。さらに、フラッシュパッケージ１１３は、アドレス範囲ｘに対しＵＮＭＡＰコマンドを実行する（Ｓ１５１４）。
【０２２０】
実際には、フラッシュパッケージ１１３は、マッピングテーブルの更新によってコピー処理を行う。フラッシュパッケージ１１３は、アドレス範囲ｘ、ｙに格納されていた処理前のデータと共に、ＭＯＶＥコマンドに対する応答をストレージコントローラ１０９へ返す（Ｓ１５１６）。ＭＯＶＥコマンドにより、データ移動のためのコマンド発行回数を低減できる。
【０２２１】
本実施例は、拡張パリティライトコマンドを、フラッシュパッケージ１１３対して定義する。拡張パリティライトコマンドは、フラッシュパッケージアドレス空間３６２の２つのアドレス範囲ｐ、ｑと、アドレス範囲ｐとｑに格納されたデータをパラメータとして含む。フラッシュパッケージ１１３は、それぞれのアドレス範囲に対して、指定されたデータとのＸＯＲを算出して、データを更新する。
【０２２２】
ストレージコントローラ１０９は、移動先の旧データと、フラッシュパッケージ１１３（パリティノード）のパリティ格納箇所を指定して、拡張パリティライトコマンドを発行する。また、ストレージコントローラ１０９は、移動元の旧データと、フラッシュパッケージ１１３（パリティノード）のパリティ格納箇所を指定して、拡張パリティライトコマンドを発行する。（Ｓ１５１８）。図２１は、一つのパリティノードのみ示すが、拡張パリティライトコマンドは、移動元の旧データと移動先の旧データのパリティノードそれぞれに発行される。
【０２２３】
拡張パリティライトコマンドを受信したフラッシュパッケージ１１３は、受け取った旧データと格納されているパリティ（旧パリティ）のＸＯＲ演算をし、新パリティを計算し（Ｓ１５２０）、旧パリティを新パリティに更新する（Ｓ１５２２）。拡張パリティライトコマンドを受信したフラッシュパッケージ１１３は、ストレージコントローラ１０９へ、拡張パリティライトコマンドへの応答を返す（Ｓ１５２４）。拡張パリティライトコマンドにより、パリティ再計算のためのコマンド発行回数を低減できる。
【０２２４】
図２２Ａ〜２２Ｃは、ＭＯＶＥコマンド及び拡張パリティライトコマンドによるフラッシュパッケージ１１３でのデータの変化の例を示す。図２２Ａに示すように、ＭＯＶＥコマンドは、アドレス範囲ｘとアドレス範囲ｙを指定する。アドレス範囲ｘに格納されているデータＡとアドレス範囲ｙに格納されているデータＥが、ストレージコントローラ１０９に送信される。その後、アドレス範囲ｙに格納されているデータＥが、アドレス範囲ｘに移動される。
【０２２５】
図２２Ｂに示すように、アドレス範囲ｙに格納されるデータは、‘０’に変更される。図２２Ｃに示すように、データＡ及びデータＥと共に拡張パリティライトコマンドが発行される。図２２Ｃにおいて、データＡ及びデータＥのパリティノードは同一である。データＡと旧パリティとのＸＯＲ演算によって新パリティが生成され、旧パリティが新パリティにより更新される。また、データＥと旧パリティとのＸＯＲ演算によって新パリティが生成され、旧パリティが新パリティにより更新される。
【０２２６】
以上、本発明の実施形態を説明したが、本発明が上記の実施形態に限定されるものではない。当業者であれば、上記の実施形態の各要素を、本発明の範囲において容易に変更、追加、変換することが可能である。ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、ある実施形態の構成に他の実施形態の構成を加えることも可能である。各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０２２７】
上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【図１】
2018016003.tif 000003
【図２】
2018016003.tif 000004
【図３】
2018016003.tif 000005
【図４】
2018016003.tif 000006
【図５】
2018016003.tif 000007
【図６】
2018016003.tif 000008
【図７】
2018016003.tif 000009
【図８】
2018016003.tif 000010
【図９】
2018016003.tif 000011
【図１０】
2018016003.tif 000012
【図１１】
2018016003.tif 000013
【図１２】
2018016003.tif 000014
【図１３】
2018016003.tif 000015
【図１４】
2018016003.tif 000016
【図１５Ａ】
2018016003.tif 000017
【図１５Ｂ】
2018016003.tif 000018
【図１５Ｃ】
2018016003.tif 000019
【図１６Ａ】
2018016003.tif 000020
【図１６Ｂ】
2018016003.tif 000021
【図１６Ｃ】
2018016003.tif 000022
【図１７Ａ】
2018016003.tif 000023
【図１７Ｂ】
2018016003.tif 000024
【図１８Ａ】
2018016003.tif 000025
【図１８Ｂ】
2018016003.tif 000026
【図１９】
2018016003.tif 000027
【図２０Ａ】
2018016003.tif 000028
【図２０Ｂ】
2018016003.tif 000029
【図２０Ｃ】
2018016003.tif 000030
【図２１】
2018016003.tif 000031
【図２２Ａ】
2018016003.tif 000032
【図２２Ｂ】
2018016003.tif 000033
【図２２Ｃ】
2018016003.tif 000034
【国際調査報告】
2018016003.tif 000035
2018016003.tif 000036