(57)【要約】  本発明の一観点に係るストレージ装置は、１以上の記憶デバイスとストレージコントローラを有する。ストレージコントローラは、記憶デバイスの領域を、上書き用記憶領域と追記書き用記憶領域に分けて管理しており、上書き用記憶領域と追記書き用記憶領域との間でデータ移動を実施する。たとえば追記書き用の記憶領域には、ホストからのライトデータのうち、更新頻度の少なくなったデータが上書き用記憶領域から移動される。追記書き用の記憶領域に格納されたデータに対する更新データをホストから受領すると、ストレージコントローラは更新データを圧縮後、追記書き用記憶領域に圧縮された更新データを追記する。
2016203612.tif 000002
【特許請求の範囲】
【請求項１】
１以上の記憶デバイスと、ストレージコントローラと、を有し、
前記ストレージコントローラは、前記記憶デバイスの記憶領域を、前記ホストからの更新データの上書きを許す上書き用領域と、前記ホストからの更新データを追記格納するための追書き用領域に分けて管理しており、
前記ストレージコントローラは、前記上書き用領域と前記追書き用領域の間でデータの移動を行う、
ことを特徴とする、ストレージ装置。
【請求項２】
前記ストレージコントローラは、データの格納された前記上書き用領域が、あらかじめ定められた条件に該当する状態にあることを検出した時、前記上書き用領域に格納された前記データを前記追書き用領域に移動する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項３】
前記ストレージコントローラは、データの格納された前記上書き用領域に対し、前記ホストからの書き込みが所定期間発生していないことを検出した時、前記上書き用領域に格納された前記データを前記追書き用領域に移動する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項４】
前記ストレージコントローラは、前記上書き用領域に格納された前記データを前記追書き用領域に移動する時、
前記データから圧縮データを生成し、前記圧縮データを前記追書き用領域に追記する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項５】
前記ストレージコントローラは、前記上書き用領域から前記追書き用領域に移動される前記データの量に基づいて、前記追書き用領域のサイズを決定する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項６】
前記ストレージコントローラは、ホストに対してボリュームを提供し、前記ホストからライト要求のあった前記ボリューム上領域に動的に前記記憶デバイスの記憶領域を割り当てるよう構成されており、
前記ストレージコントローラは、前記追書き用領域が割り当てられた前記ボリューム上領域に対するライトデータを前記ホストから受領すると、前記ライトデータを前記追書き用領域に追記し、
前記追書き用領域に書き込まれるデータ量が、前記追書き用領域のサイズを超過する場合、前記追書き用領域内のデータを前記上書き用領域に戻す、
ことを特徴とする、請求項５に記載のストレージ装置。
【請求項７】
前記ストレージコントローラは、前記追書き用領域に圧縮データが格納されている場合、前記圧縮データのうち圧縮率の低い前記圧縮データから優先的に前記上書き用領域に戻し、
前記ストレージコントローラは、前記圧縮データを前記上書き用領域に戻す際に、前記圧縮データを伸長してから前記上書き用領域に戻す、
ことを特徴とする、請求項６に記載のストレージ装置。
【請求項８】
前記ストレージコントローラは、前記ホストからのライトデータを一時格納するキャッシュメモリを有し、
前記ストレージコントローラは、前記追書き用領域が割り当てられた前記ボリューム上領域に対する前記ライトデータが、所定量以上前記キャッシュメモリに蓄積された場合、
前記追書き用領域に格納されているデータを前記上書き用領域に戻す、
ことを特徴とする、請求項６に記載のストレージ装置。
【請求項９】
前記ストレージコントローラは、前記追書き用領域が割り当てられた前記ボリューム上領域のうち、第１の領域に対する前記ライトデータが前記キャッシュメモリに蓄積されており、第２の領域に対する前記ライトデータは前記キャッシュメモリに蓄積されていない場合、
前記追書き用領域に格納されているデータのうち、前記第１の領域に対する前記ライトデータの更新前データは前記上書き用領域に戻さない、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１０】
前記ストレージコントローラは、前記ボリューム上領域に対する前記ホストからのアクセスパターンを観測することで、前記ボリューム上領域の更新周期を推定し、
前記推定した更新周期に基づいて、前記ホストから前記ボリューム上領域に対するライト要求を受領する前に、前記ボリューム上領域に割り当てられた前記追書き用領域に格納されたデータを、前記上書き領域に戻す、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項１１】
前記ストレージコントローラは、前記ホストからのライトデータを一時格納するキャッシュメモリを有し、
前記ストレージコントローラは、ホストに対してボリュームを提供し、前記ホストからライト要求のあった前記ボリューム上領域に、前記上書き用領域か前記追書き用領域のいずれかを動的に割り当てるよう構成されており、
前記ストレージコントローラは、
Ａ）前記ボリューム上領域に対する更新データを前記ホストから受領すると、前記キャッシュメモリに前記更新データを格納し、
Ｂ）前記更新データが、前記上書き用領域が割り当てられた前記ボリューム上領域に対する更新データの場合、前記上書き用領域に前記更新データを上書きし、
Ｃ）前記上書き用領域が割り当てられた前記ボリューム上領域に対して書き込みが所定期間発生していないことを検出した時、前記ボリューム上領域に前記追書き用領域を割り当て、前記上書き用領域に格納されているデータを圧縮して前記追書き用領域に移動し、前記上書き用領域から前記追書き用領域に移動される前記データの量に基づいて、前記追書き用領域のサイズを増加させ、
Ｄ）前記更新データが、前記追書き用領域が割り当てられた前記ボリューム上領域に対する更新データの場合、前記ボリューム上領域に対する前記更新データが、所定量以上前記キャッシュメモリに格納されているか判定し、
Ｄ−１）前記ボリューム上領域に対する前記更新データが、所定量以上前記キャッシュメモリに格納されている場合、前記ボリューム上領域に前記上書き用領域を割り当て、前記キャッシュメモリに格納されている前記更新データを前記上書き用領域に格納し、前記ボリューム上領域に割り当てられていた前記追書き用領域に格納されているデータのうち、前記更新データが前記キャッシュメモリに格納されていないデータについて、前記上書き領域に移動し、
Ｄ−２）前記ボリューム上領域に対する前記更新データが、所定量以上前記キャッシュメモリに格納されていない場合、
Ｄ−２−１）前記追書き用領域に前記更新データを追記可能な領域がある時には、前記ライトデータを前記追書き用領域に追記し、
Ｄ−２−１）前記追書き用領域に前記更新データを追記可能な領域がない時には、前記追書き用領域内のデータを前記上書き用領域に戻す、
よう構成されている、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項１２】
１以上の記憶デバイスと、ストレージコントローラと、を有するストレージ装置の制御方法であって、
前記ストレージコントローラが、前記前記複数の前記記憶デバイスの記憶領域を、前記ホストからの更新データの上書きを許す上書き用領域と、前記ホストからの更新データを追記格納するための追書き用領域に分けて管理し、
前記ストレージコントローラが、前記上書き用領域と前記追書き用領域の間で前記データの移動を行う、
ことを特徴とする、ストレージ装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に関する。
【背景技術】
【０００２】
ストレージ装置は、データを格納する複数の記憶デバイスと、記憶デバイスを制御するストレージコントローラとを有しており、ホスト計算機に大容量のデータ格納空間を提供することを目的としている。【０００３】
ストレージ装置には、低コストで大量のデータを保存することが求められる。こうした要求を満たすために、データを可逆圧縮（以降、単に圧縮と記す）して記録する技術が知られている。圧縮によりデータサイズを縮小し、記憶デバイスに記録すると、データの保持コスト（記憶媒体のビットコスト、ストレージ装置の消費電力コスト等）を削減できる。【０００４】
データを圧縮して記憶デバイスに記録する場合、ライト時には圧縮処理、リード時には圧縮データの伸長処理のオーバヘッドが発生するため、アクセス性能が低下することがある。これを避けるために、選択的にデータの圧縮を行う技術が存在する。たとえば特許文献１には、複数の記憶階層（ｔｉｅｒ）を管理するストレージシステムにおいて、例えば下位ｔｉｅｒに移動されるデータを圧縮して格納することが開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許８３５９４４４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
データを圧縮する場合、データ内容に依存して圧縮率が変化する。そのため、ストレージシステムがデータを圧縮して記憶デバイスに格納したあと、そのデータの更新データをホスト計算機から受領した場合、更新データの圧縮後のサイズは記憶デバイスに格納された圧縮データのサイズよりも大きくなることがある。この場合、圧縮された更新データを、更新前の圧縮データの記録されている領域に上書きすることはできず、異なる格納方法が必要である。
【課題を解決するための手段】
【０００７】
本発明の一観点に係るストレージ装置は、１以上の記憶デバイスとストレージコントローラを有する。ストレージコントローラは、記憶デバイスの領域を、上書き用記憶領域と追記用記憶領域に分けて管理しており、上書き用記憶領域と追記用記憶領域との間でデータ移動を実施する。【０００８】
たとえば追記用記憶領域には、ホストからのライトデータのうち、更新頻度の少なくなったデータが上書き用記憶領域から移動される。追記用記憶領域に格納されたデータに対する更新データをホストから受領すると、ストレージコントローラは追記用記憶領域に更新データの追記を行う。
【発明の効果】
【０００９】
本発明の一観点に係るストレージ装置によれば、ストレージ装置の効率を向上させることが出来る。
【図面の簡単な説明】
【００１０】
【図１】第１の実施例に係るストレージ装置を含む計算機システムの構成例である。
【図２】仮想ボリュームとページの関係を表した図である。
【図３】プール管理テーブルの構成例である。
【図４】仮想ボリューム管理テーブルの構成例である。
【図５】ＬＢＡ管理テーブルの構成例である。
【図６】圧縮ページ管理テーブルの構成例である。
【図７】閾値テーブルの構成例である。
【図８】空き領域管理テーブルの構成例である。
【図９】ライト処理のフローチャートである。
【図１０】デステージ処理のフローチャートである。
【図１１】追書きページから上書きページへのデータ移動の概念図である。
【図１２】移動判定処理のフローチャートである。
【図１３】データ移動に伴う空き領域管理テーブルの内容変化を説明する図である。
【図１４】実施例２に係るストレージ装置の有する仮想ボリューム管理テーブルの構成例である。
【図１５】実施例２に係るストレージ装置の有する閾値テーブルの構成例である。
【図１６】移動判定処理のフローチャート（１）である。
【図１７】移動判定処理のフローチャート（２）である。
【図１８】学習結果に基づく、追書きページのデータの上書きページへの移動処理のフローチャートである。
【発明を実施するための形態】
【００１１】
以下、幾つかの実施例について、図面を用いて説明する。実施例の説明に入る前に、実施例で用いられる各種用語について説明する。
【００１２】
本実施例では、「圧縮」とは、ＬＺＷアルゴリズム等の可逆圧縮アルゴリズムを用いて、データの意味を保ったままデータサイズを縮小する処理のことを意味する。本実施例に係るストレージ装置では、ホストからストレージ装置に対して書き込まれるデータの圧縮を行うことがある。ストレージ装置で圧縮処理が行われたことによりサイズの縮小されたデータのことを、「圧縮データ」と呼び、ストレージ装置で圧縮処理が施されていないデータの事を「非圧縮データ」と呼ぶ。また可逆圧縮アルゴリズムを用いて、圧縮データを元のデータサイズに戻す処理のことを、「伸長」または「解凍」と呼ぶ。
【００１３】
また本実施例では、データ圧縮によるデータサイズの縮小効率の指標として、「圧縮率」を用いる。本実施例における圧縮率は、以下の計算式により定義されるものである。
圧縮率＝（非圧縮データのサイズ−圧縮データのサイズ）÷非圧縮データのサイズ
【００１４】
本実施例では上の計算式に基づいて圧縮率が定義されるので、圧縮率は０から１の間の値をとり得る。そのため、「圧縮率が低い」とは、圧縮によりデータサイズがあまり縮小されなかったことを意味する。一例として圧縮処理の結果、データサイズが全く変化しなかった場合には、圧縮率は０となる。逆に「圧縮率が高い」とは、圧縮によるデータサイズの縮小量が多いことを意味する。
【００１５】
記憶領域の「更新」とは、記憶領域に格納されているデータの内容を新しい内容に書き換える（上書きする）ことを意味する。ある記憶領域が更新される前に、その記憶領域に格納されていたデータは、「更新前データ」と呼ばれる。一方その記憶領域に新たに書き込まれるデータのことは、「更新データ」または「更新後データ」と呼ばれる。
【００１６】
「ボリューム」とは、ストレージ装置や記憶デバイス等のターゲットデバイスが、ホスト計算機等のイニシエータデバイスに提供する記憶空間のことを意味する。イニシエータデバイスが記憶空間上の領域に対するデータ書き込み要求を発行すると、その領域に対応付けられているターゲットデバイス上の領域にデータが格納される。本実施例に係るストレージ装置はボリュームとして、いわゆるＴｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ技術により形成される仮想ボリュームをホストに提供する。仮想ボリュームは、その初期状態（仮想ボリュームが定義された直後）では、記憶空間上の領域に記憶デバイスが対応付けられていない。イニシエータデバイス（ホスト）が記憶空間上の領域にデータ書き込み要求を発行した時点で、ストレージ装置はその領域に対応付けられる記憶デバイスを動的に決定する。
【００１７】
本実施例において、「ブロック」とは、ターゲットデバイスがイニシエータデバイスに提供する記憶空間（ボリューム等）上の領域を意味する。また本実施例において、ブロックはボリューム等の最小アクセス単位と等しいサイズの領域で、固定長である。ブロックのサイズは一例として５１２バイトである。イニシエータデバイスが記憶空間内の各ブロックにアクセスする際には、各ブロックにアサインされているアドレスを指定することでアクセスする。このアドレスは、「Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ（ＬＢＡ）」と呼ばれる。本実施例では特に、ストレージ装置がホストに提供するボリューム（仮想ボリューム）のブロックにアサインされているＬＢＡのことを、「ホストＬＢＡ」と呼ぶことがある。
【００１８】
「追書き（ａｐｐｅｎｄ  ｗｒｉｔｅ）」または「追記（ａｐｐｅｎｄ）」とは、データを記憶領域の未使用領域に対してシーケンシャルに書き込む動作のことを意味する。本実施例に係るストレージ装置では、追書き用の記憶領域が設けられる。ストレージ装置が追書き処理を行う場合、追書き用の記憶領域の先頭から順にデータを書き込んでいく。ストレージ装置は、直前に行われた追書き処理でデータが書き込まれた終端アドレスを記憶しており、追書き処理を行う際には、この終端アドレスの次のアドレスから、データを書き込む。
【実施例１】
【００１９】
（１）システム構成
図１は、第１の実施例に係るストレージ装置１を含む計算機システムの構成例を示している。ストレージ装置１は、ストレージコントローラ１０と、ストレージコントローラ１０に接続された複数の記憶デバイス２０を有する。【００２０】
記憶デバイス２０は、ストレージ装置１がホスト２などの上位装置からのライトデータを記憶するために用いられる。記憶デバイスとしては、たとえば磁気ディスクを記憶媒体として用いるＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２５や、フラッシュメモリ等の不揮発性半導体メモリを記憶媒体として採用したＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）２１が用いられる。あるいはＤＶＤ−ＲＷ（２２）等のリムーバブルストレージメディアが用いられてもよい。記憶デバイス２０は一例として、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）規格に従う伝送線（ＳＡＳリンク）や、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）規格に従う伝送線（ＰＣＩリンク）などによって、ストレージコントローラ１０と接続される。【００２１】
ストレージコントローラ１０には、１以上のホスト２が接続される。またストレージコントローラ１０には、管理ホスト５が接続される。ストレージコントローラ１０とホスト２とは、一例としてファイバチャネルを用いて形成されるＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）３を介して接続される。ストレージコントローラ１０と管理ホスト５とは、一例としてイーサネットを用いて形成されるＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）６を介して接続される【００２２】
ストレージコントローラ１０は少なくとも、プロセッサ（ＣＰＵとも呼ばれる）１１、ホストインタフェース（「ホストＩ／Ｆ」とも呼ばれる）１２、デバイスインタフェース（「デバイスＩ／Ｆ」とも呼ばれる）１３、メモリ１４、管理用Ｉ／Ｆ１５、圧縮回路（圧縮部とも呼ばれる）１６を有する。そしてプロセッサ１１、ホストＩ／Ｆ１２、デバイスＩ／Ｆ１３、メモリ１４、管理用Ｉ／Ｆ１５、圧縮部１６は、内部スイッチ（内部ＳＷとも呼ばれる）１７を介して相互接続されている。図１ではこれらの構成要素がそれぞれ１つだけ示されているが、高性能化及び高可用性の確保のため、これらの構成要素のそれぞれがストレージコントローラ１０内に複数搭載されていてもよい。また内部ＳＷ１７ではなく、共通バスを介して各構成要素が相互接続された構成にしてもよい。【００２３】
デバイスＩ／Ｆ１３は少なくとも、インタフェースコントローラと転送回路を有する。インタフェースコントローラは、記憶デバイス２０で用いられているプロトコル（一例ではＳＡＳ）をストレージコントローラ１０内部で用いられている通信プロトコル（一例としてＰＣＩ−Ｅｘｐｒｅｓｓ）に変換するためのコンポーネントである。転送回路は、ストレージコントローラ１０が、記憶デバイス２０に対してデータの転送（リード、ライト）を行う際に用いられる。【００２４】
ホストＩ／Ｆ１２は、デバイスＩ／Ｆ１３と同様に、少なくともインタフェースコントローラと転送回路を有する。ホストＩ／Ｆ１２が有するインタフェースコントローラは、ホスト２とストレージコントローラ１０間のデータ転送経路で用いられている通信プロトコル（たとえばファイバチャネル）と、ストレージコントローラ１０内部で用いられている通信プロトコルを変換するためのものである。【００２５】
プロセッサ１１は、ストレージ装置１の各種制御を行う。メモリ１４は、プロセッサ１１が実行するプログラム（ストレージ制御プログラムと呼ぶ）や、プロセッサ１１が使用するストレージ装置１の各種管理情報を記憶するために用いられる。【００２６】
本明細書では、ストレージ装置１（またはストレージコントローラ１０）が、デステージ処理や移動判定処理（後述）等の処理を実施する、という表現が用いられている箇所がある。これをより正確に表現すると、ストレージ制御プログラムがプロセッサ（ＣＰＵ）１１で実行されることによって、ＣＰＵ１１がホストＩ／Ｆ１２、デバイスＩ／Ｆ１３、メモリ１４や圧縮回路１６を用いてこれらの処理を行う、という表現になるが、説明が冗長になることを避けるため、以下の説明では、ストレージコントローラ１０（またはストレージ装置１）がこれらの処理を実施する、と表現することもある。【００２７】
またメモリ１４は、記憶デバイス２０に対するＩ／Ｏ対象データを一時的に記憶するためにも用いられる。以下、記憶デバイス２０に対するＩ／Ｏ対象データを一時的に記憶するために用いられる、メモリ１４中の記憶領域のことを、「キャッシュメモリ」または「キャッシュ」と呼ぶ。メモリ１４には、ＤＲＡＭ、ＳＲＡＭ等の揮発性記憶媒体が用いられるが、別の実施形態として、不揮発性メモリを用いてメモリ１４を構成してもよい。また、メモリ１４に揮発性記憶媒体が用いられる場合、ストレージ装置１にバッテリ等の補助電源を搭載し、停電時にメモリ１４の記憶内容を維持できるように構成されていてもよい。【００２８】
管理ホスト５は、ストレージ装置１の管理操作を行うための計算機である。管理ホスト５は、キーボードやディスプレイ等の入出力デバイス（非図示）を備え、ユーザ（管理者）は入出力デバイスを用いてストレージ装置１に対する設定指示を行うことができる。また管理ホスト５は、ストレージ装置１の状態等の情報をディスプレイ等の出力デバイスに表示することもできる。【００２９】
圧縮部（圧縮回路）１６は、データの圧縮、または圧縮されたデータの伸長を行う機能を備えたハードウェアである。ストレージ装置１は、記憶デバイス２０に格納されるデータの一部（または全部）を、圧縮部１６を用いて圧縮することができる。圧縮部１６は、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等のハードウェアで実装される．ただし、圧縮部１６にプロセッサとメモリを設け、プロセッサでデータ圧縮を行うためのプログラムを実行させることで、圧縮部１６がデータの圧縮または伸長を行うように構成されていてもよい。あるいは、圧縮部（圧縮回路）１６のような専用のハードウェアをストレージコントローラ１０に設けずに、ＣＰＵ１１でデータ圧縮を行うためのプログラムを実行させることで、ＣＰＵ１１にデータの圧縮または伸長を行わせるようにしてもよい。【００３０】
（２）記憶領域の管理
続いて、本実施例に係るストレージ装置１が管理する記憶領域について説明する。本実施例に係るストレージ装置１が有する１以上の記憶デバイス２０は、所定サイズの記憶空間をストレージコントローラ１０に提供する。ストレージコントローラ１０は、記憶デバイス２０の提供する記憶空間を直接ホスト２には提供しない。ストレージコントローラ１０はホスト２に、記憶デバイス２０の提供する記憶空間とは異なる、１以上の仮想的な記憶空間を提供する。この仮想的な記憶空間を「仮想ボリューム」と呼ぶ。なお、ストレージコントローラ１０は複数の仮想ボリュームをホスト２に提供可能だが、以下では特に断りのない限り、ストレージコントローラ１０が仮想ボリュームを１つ、ホスト２に提供する例について説明する。【００３１】
ストレージ装置１は、仮想ボリュームの記憶空間を、複数の所定サイズ（一例として４２ＭＢ）の部分領域に分割して管理している。本実施例では、この部分領域のことを「仮想ページ」と呼ぶ。なお、以下では仮想ページのサイズが４２ＭＢの場合について説明するが、仮想ページのサイズはこれ以外のサイズであってもよい。仮想ボリュームは、公知のＴｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇ技術などを用いて形成されるボリュームであり、ストレージ装置１は仮想ボリュームの仮想ページに対するアクセス要求を受け付けた時点で、記憶デバイス２０の記憶領域を動的に仮想ページに割り当てる（マップする）。【００３２】
ストレージ装置１がホスト２から、仮想ボリュームの仮想ページに対するライト要求を受信すると、ストレージ装置１は、記憶デバイス２０の記憶領域のうち未使用の領域（まだ仮想ページに割り当てられていない領域）を選択し、アクセス対象の仮想ページに、選択された領域を割り当てる（マップする）。ホスト２からのライトデータは、このアクセス対象仮想ページにマップされた領域（ページ）に格納される。またストレージ装置１は、仮想ページと、仮想ページに割り当てられた記憶領域との対応関係（マッピング）をマッピングテーブル（本実施例では仮想ボリューム管理テーブル１００と呼ばれる）に記憶している。仮想ページに対するリード要求を受け付けた時には、ストレージ装置１はマッピングテーブルを参照することで、仮想ページに割り当てられた記憶領域を特定し、特定された記憶領域からデータを読み出す。【００３３】
図２に、仮想ボリュームと、仮想ボリュームに割り当てられる記憶領域の関係の例を示す。本実施例では、複数の記憶デバイス２０の記憶領域のうち、仮想ボリュームに割り当てるための記憶領域の集合を「プール」と呼ぶ。プール内の記憶領域は、仮想ページと同サイズの部分領域に区分されて管理される。この仮想ページと同サイズの部分領域のことを、「物理ページ」または「ページ」と呼ぶ。【００３４】
図２に示されている長方形状のオブジェクト４０は、仮想ボリュームの記憶空間を表す。また円柱状のオブジェクト５０はプールを表す。【００３５】
各仮想ページには、仮想ページ番号（ＶＰ＃と表記されることもある）と呼ばれる、一意な識別番号（識別番号には非負の整数値が用いられる）が付される。以下では、仮想ページ番号がｎ（ｎは非負の整数値）の仮想ページのことを、「ＶＰ＃ｎ」と表記する。同様に各物理ページには、物理ページ番号（またはページ＃）と呼ばれる、ストレージ装置１内で一意な識別番号が付される（この識別番号も非負の整数値である）。以下では、物理ページ番号がｎ（ｎは非負の整数値）の物理ページのことを、「ページ＃ｎ」と表記する。【００３６】
仮想ボリュームが定義された直後は、仮想ボリュームの各仮想ページには、ページがマップされていない。ストレージコントローラ１０は、ホスト２から仮想ページ上の領域に対するライト要求を受信した時にはじめて、当該領域を含む仮想ページに対して割り当てるべき物理ページを決定する。ここで決定される物理ページは、まだどの仮想ページにも割り当てられていないページ（未使用ページ）のなかから、任意の１つのページが選択される。図２の例では、ＶＰ＃０にページ＃１がマップされ、ＶＰ＃１にページ＃０がマップされた例が示されている。【００３７】
ストレージ装置１がホスト２から、仮想ページ内の領域（１または複数のブロック）に対するライト要求（及びライトデータ）を受け付けた場合、仮想ページにマップされている物理ページ内のブロックにライトデータが格納される。本実施例に係るストレージ装置１では原則として（後述する、圧縮データ格納のケースを除いて）、仮想ページの先頭からｎ番目のブロックに対してライト要求のあったライトデータは、仮想ページにマップされている物理ページの先頭からｎ番目のブロックに格納されるという関係にある。そのため、ストレージ装置１は、仮想ページと、仮想ページに割り当てられた記憶領域（物理ページ）とのマッピングだけを、マッピングテーブルに記録しておけば、仮想ボリューム上の任意のブロックにマップされている、記憶デバイス２０上記憶領域を一意に特定できる。【００３８】
ただし、ページに圧縮データが格納される場合には、この限りではない。図２において、ＶＰ＃２、ＶＰ＃３は、圧縮データが格納される場合の例を表しているが、その場合、仮想ページの先頭からｎ番目のブロックに対して書き込まれたデータが、物理ページのｎ番目のブロックに書き込まれるというような、規則的な関係は維持されない。詳細は後述する。【００３９】
図３はプール管理テーブル２００の例を示している。プール管理テーブル２００は、プール、つまり仮想ボリュームに割り当てるための記憶領域の集合を管理するテーブルで、メモリ１４に格納されている。プール管理テーブル２００の各行（レコード）には、プール内の物理ページの情報が格納される。各レコードは、ページ＃（２０１）、ＤＥＶ＃（２０２）、Ａｄｄｒ（２０３）、ｔｙｐｅ（２０４）、ｕｓｅ（２０５）の欄を有する。ページ＃（２０１）には、物理ページのページ番号が格納される。つまりページ＃（２０１）がｎのレコードは、ページ＃ｎの情報を管理するレコードである。【００４０】
ＤＥＶ＃（２０２）とＡｄｄｒ（２０３）には、物理ページの属する記憶デバイスの識別番号及び記憶デバイス内のアドレスが格納される。ｔｙｐｅ（２０４）には、物理ページの属する記憶デバイスの種別（たとえばＨＤＤ、ＳＳＤ等）が格納される。ｕｓｅ（２０５）には、物理ページの使用状況を表す情報が格納される。物理ページが仮想ページにマップされている場合、ｕｓｅ（２０５）には“１”が格納される。逆に物理ページが仮想ページにマップされていない場合、ｕｓｅ（２０５）には“０”が格納される。【００４１】
なお、本実施例では、プール５０に、記憶デバイス２０（たとえばＨＤＤ）の記憶領域が登録され、各ページが、１つの記憶デバイス２０内の記憶領域から構成される例を示しているが、これ以外のプールの構成方法もあり得る。たとえばストレージ装置１がＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  Ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  （ｏｒ  Ｉｎｅｘｐｅｎｓｉｖｅ）  Ｄｉｓｋｓ）技術を用いて、複数の記憶デバイス２０から１つの論理的な記憶デバイス（論理デバイスと呼ぶ）を形成する場合、論理デバイスの記憶領域がプールに登録されるようにしてもよい。その場合、プール管理テーブル２００のＤＥＶ＃（２０２）とＡｄｄｒ（２０３）には、論理デバイスの識別番号と、論理デバイス内のアドレスが格納される。【００４２】
図４は、仮想ボリューム管理テーブル１００の例を示している。仮想ボリューム管理テーブル１００もメモリ１４に格納されている。仮想ボリューム管理テーブル１００の各レコードには、仮想ボリューム内の仮想ページについての情報が格納される。具体的には各レコードには、仮想ページ＃（１０１）、ホストＬＢＡ（１０２）、ページ配置（１０３）、ページ＃（１０４）、更新有無（１０５）、連続更新無し期間（１０７）、割当量（１１１）の情報が格納される。【００４３】
仮想ページ＃（１０１）には、仮想ページの仮想ページ番号が格納される。ホストＬＢＡ（１０２）には、仮想ページ内の先頭ブロックに対応するＬＢＡ（ホストＬＢＡ）が格納される。つまり仮想ボリューム管理テーブル１００の各レコードは、仮想ページ＃（１０１）で特定される仮想ページが、ホストＬＢＡ（１０２）を開始アドレスとする１ページ分（４２ＭＢ）の領域に相当することを表している。図４の例では、仮想ページ＃（１０１）が１のレコードのホストＬＢＡ（１０２）は“０００１５０００”であるから、仮想ボリュームのホストＬＢＡが０００１５０００〜０００１９ｆｆｆの領域がＶＰ＃１に対応することを表している。【００４４】
ページ＃（１０４）には、仮想ページに割り当てられている物理ページのページ＃が格納される。物理ページが割り当てられていない場合、ページ＃（１０４）には無効値（ｎｕｌｌ。たとえば“−１”等の、通常はページ番号として用いられない値）が格納される。【００４５】
なお、ここで説明している仮想ボリューム管理テーブル１００の例は、ストレージ装置１に仮想ボリュームが１つ定義された場合の例を示している。ストレージ装置１に仮想ボリュームが複数定義される場合、仮想ボリューム上の領域を一意に特定可能にするために、ホストＬＢＡ（１０２）の他に、仮想ボリュームの識別子（たとえばホスト２がボリュームを特定するために用いる識別番号であるＬｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ（ＬＵＮ）等）も、仮想ボリューム管理テーブル１００に含まれる。【００４６】
更新有無（１０５）には、所定期間（たとえば１日間）仮想ページにライト要求がなかった場合には「無」が格納され、所定期間の間に仮想ページにライト要求があった場合には「有」が格納される。連続更新無し期間（１０７）には、仮想ページにライト要求がなかった期間が格納される。【００４７】
ページ配置１０３と割当量（１１１）について説明する前に、本実施例に係るストレージ装置１で行われるページ圧縮についての説明を行う。ストレージ装置１が、ホスト２から仮想ボリュームの仮想ページに対するデータの書き込み要求を受け付けると、その仮想ページにページがマッピングされていない場合には、その仮想ページにページをマッピングした後、データをそのまま（圧縮処理を行わずに）ページに書き込む。その後ストレージ装置１は、ページの状態に応じて、ページ内のデータを圧縮する。【００４８】
本実施例では、ストレージ装置１が、「ある定められた期間以上、ページに書き込み（更新）が行われなかった状態」のページを検出した場合、そのページ内のデータを圧縮する例を説明する。ただし、ページ内データの圧縮を行う条件として、これ以外の条件が用いられてもよい。たとえば外部（管理ホスト５やホスト２等）から、圧縮を行うページが指定された場合に、そのページ内のデータを圧縮するようにしてもよい。【００４９】
ページに格納された、圧縮処理の行われていない状態のデータ（非圧縮データ）を圧縮した場合、圧縮されたデータは、非圧縮データの格納されていたページとは異なるページに格納される。以下では、非圧縮データの格納されるページのことを「上書きページ」と呼び、圧縮データの格納されるページは「追書きページ」と呼ぶ。追書きページは、圧縮ページと呼ばれることもある。本実施例に係るストレージ装置１では、追書きページもプール５０内のページ（プール管理テーブル２００で管理されているページ）である。ただしストレージ装置１は、上書きページと追書きページを区別できるよう、追書きページのみを管理するテーブル（追書きページ管理テーブル）を持つ。詳細は後述する。【００５０】
データを圧縮する際、ストレージ装置１は仮想ページ（または上書きページ）内の所定サイズの部分領域ごとに圧縮を行う。本実施例に係るストレージ装置１では、仮想ページ内の領域を、仮想ページの先頭から順に８ＫＢの部分領域に区分し、この部分領域ごとにデータ圧縮を行う。本実施例では、この８ＫＢの部分領域は「セグメント」と呼ばれる。なお、部分領域の大きさには、８ＫＢ以外の大きさが採用されてもよい。【００５１】
たとえばＶＰ＃２にマッピングされているページ（上書きページ）のデータを圧縮する場合、ストレージコントローラ１０はＶＰ＃２にマッピングされているページの先頭からデータを８ＫＢずつ読み出して、圧縮回路１６を用いて、読み出された８ＫＢのデータをそれぞれ圧縮する。８ＫＢのデータを圧縮することで生成されたデータの塊（チャンク）を「圧縮セグメント」と呼ぶ。そしてストレージコントローラ１０は圧縮セグメントを追書きページへと格納する。原則として、上書きページのデータを圧縮する場合、上書きページ内の全データが圧縮され、追書きページへと移動される。【００５２】
１つの追書きページには、複数の上書きページのデータ（圧縮セグメント）を格納することができる。図２の例では、ＶＰ＃２に書き込まれたデータ（正確にはＶＰ＃２にマッピングされている上書きページに格納されたデータ）とＶＰ＃３に書き込まれたデータが、追書きページであるページ＃２に移される例を示している。【００５３】
図４のページ配置１０３と割当量（１１１）の説明に戻る。あるレコードのページ配置１０３に「上書き」が格納されている場合、そのレコードで管理されている仮想ページのデータは、上書きページに格納されていることを意味する。またレコードのページ配置１０３に「追書き」が格納されている場合、そのレコードで管理されている仮想ページのデータは、追書きページに格納されていることを意味する。レコードのページ配置１０３に「追書き」が格納されている場合、そのレコードのページ＃（１０４）には無効値（ｎｕｌｌ）が設定される。【００５４】
各レコードの割当量１１１には、そのレコードで管理されている仮想ページのデータ量が格納される。仮想ページのデータが圧縮されていない場合には、割当量１１１にはページ（または仮想ページ）のサイズと同サイズ（たとえば４２ＭＢ）が格納される。仮想ページのデータが圧縮されている場合には、割当量１１１には仮想ページのデータの圧縮後のサイズが格納される。図４の例では、仮想ページ＃（１０１）が“２”のレコード（つまりＶＰ＃２の管理情報が格納されたレコード）の割当量１１１は１０ＭＢであるから、ＶＰ＃２のデータは１０ＭＢに圧縮されたことを意味している。【００５５】
仮想ページのデータが追書きページに移された場合、仮想ページにマッピングされている記憶領域の管理を行うには、ページよりも細粒度での管理が必要になる。そのため本実施例に係るストレージ装置１は、データが追書きページに移された仮想ページについてのマッピング情報を管理するためのテーブル（ＬＢＡ管理テーブル）を有する。図５にＬＢＡ管理テーブル１２０の例を示す。ＬＢＡ管理テーブル１２０は、ホストＬＢＡ１２１、データ長１２２、データ格納位置１２３のカラムを有する。ＬＢＡ管理テーブル１２０もメモリ１４に格納される。【００５６】
ＬＢＡ管理テーブル１２０の各レコードには、仮想ページ内のセグメントにマッピングされている記憶領域の情報が格納される。ホストＬＢＡ１２１には、仮想ページ内セグメントの先頭ブロックのホストＬＢＡが格納される。データ格納位置１２３には、追書きページ上の位置情報が格納される。データ格納位置１２３に格納される位置情報として、物理ページ番号と、物理ページ内の相対アドレスのセットが用いられる。物理ページ内の相対アドレスとは、物理ページ内先頭ブロックのアドレスを０としたときのオフセットアドレスである。たとえばページ＃ｎ（ｎは整数値）の先頭からｋ番目のブロックの位置情報が格納される場合、（ｎ，（ｋ−１））が格納される。【００５７】
データ長１２２には、圧縮データのサイズが格納される。つまり各レコードは、仮想ボリューム（仮想ページ）内の領域のうち、ホストＬＢＡ１２１で特定されるアドレスから始まる８ＫＢの領域に対して、データ格納位置１２３から始まる、長さがデータ長１２２の領域がマッピングされている（かつこの領域に圧縮されたデータが格納されている）ことを表している。【００５８】
図６に追書きページ（圧縮ページ）管理テーブル１３０と最終書き込み位置１３４の例を示す。追書きページ管理テーブル１３０は、追書きページとして確保されているページを管理するためのテーブルで、メモリ１４に格納されている。追書きページ管理テーブル１３０は、相対アドレス１３１、ページ＃（１３２）、ホストＬＢＡ（１３３）のカラムを有する。ページ＃（１３２）カラムに記録されているページ番号の物理ページが、追書きページとして確保されていることを表す。相対アドレス１３１は、ページ＃（１３２）で特定される物理ページ内の相対アドレスが格納される。【００５９】
そして相対アドレス１３１、ページ＃（１３２）で特定されるブロックが、ホストＬＢＡ（１３３）を開始アドレスとする、８ＫＢの仮想ボリューム上領域にマッピングされていることを表す。なお、圧縮データのサイズは不定のため（データ内容により変動する）、ホストＬＢＡ（１３３）を開始アドレスとする、８ＫＢの仮想ボリューム上領域に、複数のブロックがマッピングされることもある。たとえば圧縮データのサイズが１ＫＢの場合、ホストＬＢＡ（１３３）が同じで、相対アドレス１３１、ページ＃（１３２）が異なるレコードが２つ存在する。【００６０】
仮想ボリューム管理テーブル１００、プール管理テーブル２００、追書きページ管理テーブル１３０を維持することで、ストレージ装置１は、プール内の記憶領域を追書きページと上書きページに分けて管理することができる。仮想ボリューム管理テーブル１００の中で、ページ配置（１０３）が「上書き」の仮想ページにマッピングされているページ（ページ＃（１０４）で特定されるページ）が上書きページであり、また追書きページ管理テーブル１３０内のページ＃（１３２）にページ番号が記録されているページが追書きページである。上書きページでも追書きページでもないページ（プール管理テーブル２００内で、ｕｓｅ（２０５）が“０”のページ）は、上書きページにも追書きページにもなり得る。【００６１】
なお、上書きページとして用いられる記憶領域と、追書きページとして用いられる記憶領域は、同一の記憶デバイス２０に属する記憶領域でもよい。ただし、上書きページとして用いられる記憶領域と、追書きページとして用いられる記憶領域が、それぞれ異なる記憶デバイス２０に属する記憶領域になるようにしてもよい。また追書きページの集合を「追書きプール」と呼ぶこともある。【００６２】
また、ストレージコントローラ１０は、最終書き込み位置１３４も管理する（メモリ１４上に保持される）。最終書き込み位置１３４は、最後に圧縮セグメントが書き込まれた領域の位置を示しており、ストレージコントローラ１０は追書き時に、最終書き込み位置１３４に基づいて圧縮セグメントの書き込み先を決定する。最終書き込み位置１３４の次のアドレスが追書きページの未使用領域の先頭位置に相当し、最終書き込み位置１３４以前の領域は、圧縮セグメントが格納されている領域（あるいは過去に圧縮セグメントが格納されていた領域）である。ストレージコントローラ１０が追書きページに圧縮セグメントを書き込む際、最終書き込み位置１３４の次のアドレスから圧縮セグメントを書き込む（つまり追記する）。圧縮セグメントの書き込みの後、ストレージコントローラ１０は最終書き込み位置１３４を更新する。【００６３】
続いて、ストレージコントローラ１０が追書きページに対するリード・ライトを行う時に、どのように上で説明した各管理テーブル（ＬＢＡ管理テーブル１２０や追書きページ管理テーブル１３０等）を用いるか、概説する。まずストレージ装置１がホスト２から、追書きページにマッピングされた仮想ページ上領域へのリード要求を受領した時の処理の概要を説明する。【００６４】
ストレージ装置１がホスト２からリード要求を受領すると、ストレージコントローラ１０はリード要求に含まれるリード先アドレス（ＬＢＡ）からＶＰ＃を算出する。以下では仮に、ＶＰ＃がｋであった場合の例を説明する。続いてストレージコントローラ１０は仮想ボリューム管理テーブル１００を参照し、ＶＰ＃ｋのページ配置１０３が「追書き」であった場合には、ＬＢＡ管理テーブル１２０を参照することによりリード対象データの格納位置（データ格納位置１２３、データ長１２２）を特定する。リード対象データのデータ格納位置１２３とデータ長１２２が特定されると、これとプール管理テーブル２００を参照することで、ストレージコントローラ１０は、リード対象データがどの記憶デバイスのどの領域に格納されているかを特定することができる。【００６５】
ストレージコントローラ１０は特定された記憶デバイスからリード対象データを読み出す。読み出されたデータは圧縮されているので、ストレージコントローラ１０は圧縮回路１６を用いてデータを伸長し、伸長されたデータをホスト２に返却する。【００６６】
またストレージ装置１は、データが追書きページに移された仮想ページへの、ホスト２からの更新要求も受け付け可能である。ストレージ装置１がホスト２から、追書きページのマッピングされている仮想ページへの書き込み（更新）要求を受け付けた場合に行われる処理について概説する。なおここでは、書き込み要求で指定されたデータ書き込み範囲は、セグメント境界に一致している場合を想定する。【００６７】
この時、ストレージコントローラ１０はホスト２から受領したライトデータ（更新データ）を圧縮して圧縮セグメントを生成する。以下では、この圧縮セグメントのことを「更新後圧縮セグメント」と呼ぶ。一方ライトデータ（更新データ）の更新前データは、追書きページに圧縮状態で記録されている。この追書きページに記録されている圧縮状態の更新前データのことは「更新前圧縮セグメント」と呼ぶ。【００６８】
上で述べたように、更新後圧縮セグメントは、追書きページに格納されている終端の圧縮セグメントの後に追記される。そしてストレージコントローラ１０はＬＢＡ管理テーブル１２０と追書きページ管理テーブル１３０の更新を行う。【００６９】
ＬＢＡ管理テーブル１２０と追書きページ管理テーブル１３０の更新について概説する。以下では、ライトデータ（更新データ）の書き込み先のホストＬＢＡがｘ、そして更新後圧縮セグメントの書き込み先のページ番号と相対アドレスの組が（ｙ、ｚ）の場合、そして更新前圧縮セグメントが格納されている領域のページ番号と相対アドレスの組が（ｙ’、ｚ’）であった場合の例について説明する。この場合、ＬＢＡ管理テーブル１２０のレコードのうち、ホストＬＢＡ（１２１）がｘのレコードについて、データ格納位置１２３には（ｙ、ｚ）が書き込まれ、データ長１２２には、圧縮セグメントのサイズが格納される。【００７０】
また、追書きページ管理テーブル１３０中の、ページ＃（１３２）がｙ、相対アドレス（１３１）がｚのレコードの、ホストＬＢＡ（１３３）にｘが格納される。そして追書きページ管理テーブル１３０中の、ページ＃（１３２）がｙ’、相対アドレス（１３１）がｚ’のレコードの、ホストＬＢＡ（１３３）の値は“ｎｕｌｌ”に変更される。つまり更新前圧縮セグメントの格納されていた領域は、仮想ページにマッピングされていない領域に変更される。【００７１】
更新前圧縮セグメントが格納されている記憶領域に更新後圧縮セグメントを格納（上書き）しない理由は、更新後圧縮セグメントのサイズが、更新前圧縮セグメントのサイズと異なる場合があるためである。特に更新後圧縮セグメントのサイズが、更新前圧縮セグメントのサイズより大きい場合、更新前圧縮セグメントが格納されている記憶領域に更新後圧縮セグメントを上書きできない。本実施例に係るストレージ装置１では、更新後圧縮セグメントを追書きページに追記格納することで、この問題を解決している。【００７２】
なお、ライトデータのサイズがセグメントのサイズより小さい場合、ストレージコントローラ１０は追書きページに格納された圧縮セグメントを読み出し、圧縮回路１６を用いて伸長し、キャッシュメモリ上に伸長されたデータを格納する。そしてストレージコントローラ１０は、ホスト２から受領したライトデータをキャッシュメモリ上の伸長データに上書きし、圧縮回路１６を用いて上書きされた伸長データを圧縮することで、更新後の圧縮セグメントを作成する。更新後の圧縮セグメントはやはり、追書きページの未使用領域に追記される。【００７３】
また、上の説明は、各管理テーブル（ＬＢＡ管理テーブル１２０や追書きページ管理テーブル１３０等）の使用方法を中心に説明するためのものである。そのため、特に仮想ページに対してホスト２からの書き込み（更新）要求を受け付けた場合に、ストレージコントローラ１０で実際に行われる処理は、上で説明したものとやや異なる点もある。たとえば、データが追書きページに移された仮想ページに対してホスト２からの書き込み（更新）要求を受け付けた場合、条件によっては、データが追書きページから上書きページへと移される等、ここで説明した処理とは異なる処理が行われる。ストレージ装置１が、ホスト２からの書き込み（更新）要求を受け付けた時に行う処理の詳細は後述する。【００７４】
続いて、ガベージコレクションについて説明する。最終書き込み位置１３４が追書きページ管理テーブル１３０で管理されている領域の終端に達した場合、追書きページへのデータ書き込みはできなくなる。そのためストレージ装置１は、未使用の追書きページを新たに確保するか、追書きページのガベージコレクションを行う必要がある。ガベージコレクションは、追書きページの領域のうち、仮想ページにマッピングされていない領域（未使用領域）を回収し、データのパッキング（追書きページの前方にデータを移動）を行う処理である。【００７５】
図６を参照すると、相対アドレス１３１が１、ページ＃（１３２）が２のブロックに対応するホストＬＢＡ１３３がｎｕｌｌである。そのため、ガベージコレクション処理では、次のブロック（相対アドレス（１３１）が２、ページ（１３２）が２のブロック）のデータを、相対アドレス１３１が１、ページ＃（１３２）が２のブロックに移動し、さらに次のブロック（相対アドレス（１３１）が３、ページ（１３２）が２のブロック）のデータを、相対アドレス１３１が２、ページ＃（１３２）が２のブロックに移動する．．．、という処理が繰り返し実行されることにより、データのパッキングが行われる。同時にＬＢＡ管理テーブル１２０の更新も行われる。なお、ここではガベージコレクションの概念を簡単に説明するために、１ブロックずつデータを移動する例を説明したが、ここで説明した以外の方法でガベージコレクションが行われてもよい。たとえば処理の効率化のために、複数ブロックをまとめて読み出して移動するようにしてもよい。【００７６】
（３）閾値、及び空き領域サイズの管理
図７に、本実施例に係るストレージ装置１が管理する、閾値テーブル３００の内容を示す。閾値テーブル３００はメモリ１４に格納されている。閾値テーブル３００には、圧縮許可閾値３０１、ＣＭ上ページ更新量閾値３０２が格納される。閾値テーブル３００に格納される値は、管理者が管理ホスト５等を用いて設定または変更することになっている。あるいは別の実施形態として、推奨値があらかじめ閾値テーブル３００に設定されていても良い。圧縮許可閾値３０１には、日数（または時間）が格納される。本実施例に係るストレージ装置１は、上書きページが、圧縮許可閾値３０１で指定される期間以上更新されていなかった場合、その上書きページ内のデータを追書きページに移動する。図７の例では、圧縮許可閾値３０１に「７日」が格納されているので、この場合ストレージ装置１は、７日以上更新が行われなかった上書きページのデータを、追書きページに移動する。【００７７】
ＣＭ上ページ更新量閾値３０２は、追書きページのデータを上書きページに移動する際の契機に関する情報が格納される。本実施例に係るストレージ装置１は、ある追書きページに対する（ホスト２からの）更新データ量が、ＣＭ上ページ更新量閾値３０２で指定されている量以上存在する場合、その追書きページのデータを上書きページに移動する。ＣＭ上ページ更新量閾値３０２には、１ページサイズに対する更新データ量の比率（百分率）が格納される。ただし、比率に代えて、データ量（バイト、ＭＢ等）を格納するようにしてもよい。【００７８】
図７の例では、ＣＭ上ページ更新量閾値３０２に「７０％」が格納されている。そのためストレージ装置１は、追書きページがマッピングされている１つの仮想ページに対し、ホスト２からの更新データを２９．４ＭＢ（４２ＭＢ（１ページのサイズ）×７０％＝２９．４ＭＢ）以上受領し、それらのデータがキャッシュメモリ上に蓄積された場合、その仮想ページには追書きページに代えて上書きページをマップし、追書きページに格納されていたデータを上書きページに格納するとともに、キャッシュメモリ上の更新データを上書きページに書き込む。詳細は後述する。【００７９】
続いて図８に、本実施例に係るストレージ装置１が管理する、空き領域管理テーブル４００の内容を示す。空き領域管理テーブル４００はメモリ１４に格納されている。空き領域管理テーブル４００には、空き領域確保割合４０１、追書きデータ量４０２、更新用確保可能量４０３、空き領域使用量４０４、更新用空き容量４０５の情報が格納される。空き領域管理テーブル４００に格納される情報のうち、空き領域確保割合４０１はあらかじめ設定されている値（この値は変更不可能な固定値でもよいし、あるいは管理者が管理ホスト５等を用いて設定または変更可能な値であってもよい）であるが、それ以外の値は、上書きページから追書きページに移動されたデータの量などに基づいて、ストレージ装置１が決定（算出）する値である。【００８０】
追書きデータ量４０２は、上書きページから追書きページに移動されたデータの量である。なお本実施例では、このデータ量は圧縮時のデータ量を表す。ただし非圧縮時のデータ量が追書きデータ量４０２に用いられてもよい。また、追書きページのデータの更新が発生した時、追書きデータ量４０２の値は再計算される。詳細は後述する。【００８１】
空き領域確保割合４０１は、追書きページ内データに対する更新データを格納するためのページの量を算出するための情報である。この、更新データを格納するためのページ（の集合）のことを、「空き領域」と呼ぶ。本実施例に係るストレージ装置１は、空き領域として確保可能なページの量を追書きデータ量４０２に基づいて決定する。空き領域確保割合４０１に格納される値は、追書きデータ量４０２に対する空き領域のサイズの比率（百分率）である。図８の例では追書きデータ量４０２が４２００ＭＢ、空き領域確保割合４０１は１０％であるので、ストレージ装置１は４２０ＭＢ（４２００ＭＢ×１０％）に相当する数のページを空き領域として確保可能である。更新用確保可能量４０３には、この値（つまり４２０ＭＢ）が格納される。【００８２】
空き領域使用量４０４には、追書きページのうち、更新データの格納されている領域の量が格納される。これには、上書きページから追書きページに移動されたデータの量は含まれない。そのため、上書きページから追書きページに移動されたデータに対する更新が発生しなかった場合には、空き領域使用量４０４は０である。また空き領域使用量４０４は追書きページに実際に書き込まれたデータ（更新データ）の合計サイズを表す。そのため、圧縮された更新データが格納される時には、空き領域使用量４０４は、追書きページに書き込まれた圧縮後更新データの合計サイズに等しい。【００８３】
更新用空き容量４０５には、更新用確保可能量４０３と空き領域使用量４０４の差が格納される。なお、更新用確保可能量４０３は追書きページとして確保してよいページ量の上限値であり、更新用確保可能量４０３を超える量のページは、空き領域として確保されない。もし追書きページに書き込まれる更新データの量の総和が、更新用確保可能量４０３以上になる場合（これは更新用空き容量４０５が０以下になる場合と同じである）、更新データを追書きページに格納（追記）できない。このような場合には、ストレージ装置１は更新が行われた追書きページ内のデータを上書きページに戻す。ストレージ装置１はこのような制御を行うことにより、追書きページを過度に確保しないようにし、また更新頻度が高くなったページが追書きページに留まり続けることを抑制している。【００８４】
（４）ライト処理
続いてストレージ装置１が、ホスト２から仮想ボリュームに対するライト要求及びライトデータを受領した時の処理（ライト処理）の流れを、図９を用いて説明する。なお、ホスト２が発行するライト要求には、ライトデータの書き込み先位置の情報（ホストＬＢＡ及びデータ長）が含まれている。ストレージコントローラ１０がライト要求を受領すると、ＣＰＵ１１はライト要求に含まれる書き込み先位置の情報から、ライトデータの書き込み先となる仮想ページの仮想ページ番号を算出する（ｓ５１）。【００８５】
続いてＣＰＵ１１は、仮想ボリューム管理テーブル１００を参照し、ｓ５１で特定された仮想ページにページが割り当てられているか判定する（ｓ５２）。仮想ボリューム管理テーブル１００の仮想ページ＃（１０１）が、ｓ５１で特定された仮想ページ番号と等しいレコードのページ＃（１０４）に有効な値（ｎｕｌｌでない値）が格納されている場合、あるいは仮想ボリューム管理テーブル１００の仮想ページ＃（１０１）が、ｓ５１で特定された仮想ページ番号と等しいレコードのページ配置（１０３）が「追書き」に設定されている場合、ｓ５１で特定された仮想ページにページが割り当てられていることを意味する。【００８６】
ｓ５１で特定された仮想ページにページが割り当てられていない場合（ｓ５２：Ｎｏ）、ＣＰＵ１１は、プール管理テーブル２００から、未使用のページ（ｕｓｅ（２０５）が“０”のページ）を１つ選択し、選択されたページをライト対象仮想ページに割り当てる（ｓ５３）。またｓ５３でＣＰＵ１１は、選択されたページのページ番号（ページ＃（２０１））を、仮想ボリューム管理テーブル１００内のライト対象仮想ページのページ＃（１０４）に格納し、またライト対象仮想ページのページ配置（１０３）に「上書き」を格納することで、選択されたページをライト対象仮想ページに割り当てる作業を行う。また選択されたページのｕｓｅ（２０５）は、“１”に変更される。【００８７】
ｓ５４でＣＰＵ１１は、ホスト２から受領したライトデータを一時格納するためのキャッシュメモリ領域の確保を行い、ｓ５５でＣＰＵ１１は、ｓ５４で確保されたキャッシュ領域にライトデータを格納する。最後にＣＰＵ１１は、ライト対象仮想ページの更新有無（１０５）をセット（「有」を設定）し（ｓ５６）、処理を終了する。キャッシュメモリ領域の確保等の処理は公知の処理であるため、説明は略す。また、ＣＰＵ１１はキャッシュメモリ上に格納されたライトデータを管理するための情報（たとえばライトデータの格納先仮想ボリュームのＬＢＡ等）も有するが、これも公知の情報であるので、説明を略す。【００８８】
図９のライト処理は、ホスト２から受領したライトデータをキャッシュメモリに格納するまでの処理であり、この処理の内容は、書き込み先の仮想ページに上書きページ、追書きページのいずれがマッピングされていても、同じである。また、本実施例に係るストレージ装置１では、キャッシュメモリをいわゆるライトバックキャッシュとして用いる。そのため、ライトデータをキャッシュメモリに格納した直後（図９のｓ５５またはｓ５６の完了後）に、ホスト２にライト処理が完了した旨を通知する。ライトデータがキャッシュメモリに格納されて、しばらく時間が経過した後、ＣＰＵ１１はキャッシュメモリ上のライトデータを記憶デバイス２０へ格納する。この処理は、「デステージ」と呼ばれる。【００８９】
（５）デステージ処理
図１０を用いてデステージ処理の流れを説明する。図１０の処理は定期的に実施される。あるいはキャッシュメモリ上の未使用領域が所定量を下回った時にデステージ処理が実行されるようにしてもよい。最初にＣＰＵ１１は、キャッシュメモリ上に格納された各データの中から、処理対象のデータを選択する（ｓ５０１）。データの選択方法は、様々な方法がありえる。一例として、ホスト２からライトされた時刻が最も古いデータを選択する方法がある。その場合、ストレージコントローラ１０は、キャッシュメモリ上に格納された各データについて、ホスト２からライトされた時刻を記憶しておく必要がある。【００９０】
続いてＣＰＵ１１は、ｓ５０１で選択されたデータの書き込み先仮想ページの仮想ページ番号を特定し、その仮想ページのページ配置（１０３）が「上書き」か「追書き」か判定する（ｓ５０２）。ページ配置（１０３）が「上書き」の場合（ｓ５０２：Ｎｏ）、データの書き込み先仮想ページには上書きページがマッピングされている。そのためＣＰＵ１１は、ｓ５０１で選択されたデータのデステージ先の領域、つまり仮想ページにマッピングされている上書きページ上領域（記憶デバイス２０上の領域である）を特定し、特定されたデステージ先領域にデータをデステージし（ｓ５１１）、処理を終了する。デステージ先の領域を特定するには、仮想ボリューム管理テーブル１００のページ＃（１０４）を参照することでページ＃を特定し、その後プール管理テーブル２００の中から、ページ＃（２０１）が特定されたページ＃と等しいレコードの、ＤＥＶ＃（２０２）、Ａｄｄｒ（２０３）を参照すればよい。【００９１】
ページ配置（１０３）が「追書き」の場合（ｓ５０２：Ｙｅｓ）、データの書き込み先仮想ページには追書きページがマッピングされている。この場合ＣＰＵ１１は、キャッシュメモリ上のデータのうち、書き込み先仮想ページがｓ５０１で選択されたデータの書き込み先仮想ページと同じであるデータをすべて選択する。以下では、ここで選択されたデータを「デステージ対象データ」と呼び、また選択されたデータの書き込み先仮想ページのことを「デステージ対象仮想ページ」と呼ぶ。そしてデステージ対象データの量が、ＣＭ上ページ更新量閾値３０２以上であるかを判定する（ｓ５０３）。デステージ対象データの量がＣＭ上ページ更新量閾値３０２以上の場合（ｓ５０３：Ｙｅｓ）、ＣＰＵ１１はデステージ対象仮想ページにマッピングされている追書きページのデータを上書きページに移動する（ｓ５０４）。【００９２】
ｓ５０４では、具体的には以下の処理が行われる。ＣＰＵ１１は追書きページ（に相当する記憶デバイス２０上領域）から、ｓ５０１で選択されたデータの書き込み先仮想ページ番号と同じ仮想ページに属するデータをキャッシュメモリ上に読み出す。この時、キャッシュメモリ上にデータが格納されている領域については、追書きページから読み出す必要はない。またデータをキャッシュメモリ上に読み出す際に、ＣＰＵ１１は圧縮回路１６を用いてデータの伸長を行い、キャッシュメモリには伸長されたデータを格納する。【００９３】
続いてＣＰＵ１１はデステージ対象仮想ページへのページ割り当てを実施する。ここで割り当てられるページは上書きページであり、ここではｓ５３と同じ処理が行われる。その後ＣＰＵ１１は割り当てた上書きページにデータをデステージし、処理を終了する。なお、ｓ５０４のデステージと同時に、ＬＢＡ管理テーブル１２０、追書きページ管理テーブル１３０の更新も行われる。具体的には、ホストＬＢＡ１２１が、デステージ対象仮想ページの範囲内の値であるレコードを、ＬＢＡ管理テーブル１２０から削除する。また、追書きページ管理テーブル１３０内のレコードのうち、ホストＬＢＡ１３３の値がデステージ対象仮想ページの範囲内に含まれるレコードについて、ホストＬＢＡ１３３をｎｕｌｌに変更する。【００９４】
ｓ５０４の処理の概念について、図１１を用いて説明する。図１１は、追書きページから上書きページにデータを移動する処理の概念図である。図１１（１）は、追書きページがマッピングされている仮想ページに対するホスト２からの更新データが、キャッシュメモリに所定量（ＣＭ上ページ更新量閾値３０２）以上蓄積されている状態を表している。仮想ページ上の領域Ａ、Ｂ、Ｃ、Ｄのうち、領域Ｂ、Ｃ、Ｄに対してホスト２から書き込みがあり、ライトデータ（更新データ）がキャッシュメモリ上に蓄積されている（領域Ａ、Ｂ、Ｃ、Ｄはそれぞれ、１つのセグメント、あるいは複数セグメントの集合である）。また図１１（１）に記載の仮想ページには追書きページがマッピングされており、仮想ページ上の領域Ａ、Ｂ、Ｃ、Ｄに対応付けられる圧縮セグメントはそれぞれ、圧縮セグメント（ａ）、（ｂ）、（ｃ）、（ｄ）である。【００９５】
仮想ページ、キャッシュメモリ上のデータ、追書きページが、図１１（１）の状態にある場合、ｓ５０４で行われるデータ移動の方法を表した図が、図１１（２）である。ＣＰＵ１１は圧縮セグメント（ａ）を追書きページから読み出し、伸長した後、上書きページ（の領域（Ａ））に書き込む（この時、伸長したデータを一旦キャッシュメモリ上に格納してもよい）。一方追書きページの圧縮セグメント（ｂ）、（ｃ）、（ｄ）は、追書きページから読み出す必要はない。代わりに、キャッシュ上のデータ（Ｂ、Ｃ、Ｄのデータ）が上書きページにデステージされる。【００９６】
ｓ５０４ではこのように、更新データ量が多い仮想ページについて、追書きページから上書きページへのデータ移動が行われるので、データ圧縮処理のオーバヘッドを削減することができる。また記憶デバイス上の追書きページから読み出される圧縮データの量は最小限に抑えられるので、記憶デバイスからのデータ読み出し処理のオーバヘッド及び読み出したデータの伸長処理のオーバヘッドを削減することができる。【００９７】
図１０の説明に戻る。ｓ５０３の判定において、データの量が所定値未満の場合（ｓ５０３：Ｎｏ）、ＣＰＵ１１はデステージ対象データを圧縮し（ｓ５０５）、圧縮データのサイズを更新用空き容量４０５と比較することで、デステージ対象データ（圧縮後）を格納可能な空き領域が存在するか判定する。デステージ対象データを格納可能な空き領域が存在しない場合（ｓ５０６：Ｎｏのケース。これは言い換えれば、デステージ対象データを格納すると更新用確保可能量４０３を超過してしまう場合である）、ＣＰＵ１１はデステージ対象データの書き込み先仮想ページにマッピングされている追書きページのデータを伸長して上書きページに戻す（ｓ５０９）。ｓ５０９の処理はｓ５０４と同じである。つまり、キャッシュメモリ上にデステージ対象データが格納されている領域については追書きページから読み出す必要はない。【００９８】
それからＣＰＵ１１は、空き領域管理テーブル４００の内容の更新を行い（ｓ５１０）、処理を終了する。【００９９】
なお、ｓ５０１で処理対象のデータが複数選択され、かつそれぞれのデータの書き込み先仮想ページが異なる仮想ページであることもあり得る。その場合ｓ５０９で追書きページからデータを上書きページに移動する際、ＣＰＵ１１は圧縮率の低いページを優先的に選択して、そのページのデータを上書きページに移動するとよい。圧縮率の高いページを優先的に追書きページ（圧縮ページ）に格納するほうが、記憶領域を節約できるからである。【０１００】
図４（仮想ボリューム管理テーブル１００）の例では、仮想ページ＃（１０１）が４〜７の仮想ページ（ＶＰ＃４〜ＶＰ＃７）にマッピングされているページ（追書きページ）のデータが、上書きページへの移動対象データである（更新有無（１０５）が「有」だからである）。これらを圧縮率の低い順（割当量（１１１）が大きい順）に並べ替えると、ＶＰ＃６、ＶＰ＃５、ＶＰ＃７、ＶＰ＃４である。そのため、ＶＰ＃６にマッピングされている追書きページを最優先で上書きページに戻し、その後、ＶＰ＃５、ＶＰ＃７、ＶＰ＃４の順で、上書きページにデータを戻す処理を行うとよい。【０１０１】
デステージ対象データ（圧縮後）を格納可能な空き領域が存在する場合（ｓ５０６：Ｙｅｓ）、ＣＰＵ１１は、デステージ対象データ（圧縮後）を追書きページに追記し（ｓ５０７）、空き領域管理テーブル４００の内容を更新し（ｓ５０８）、処理を終了する。ｓ５０７では追書きページへのデータ（圧縮セグメント）の追記が行われるので、ＣＰＵ１１は先に述べた要領で、ＬＢＡ管理テーブル１２０と追書きページ管理テーブル１３０の更新も行う。【０１０２】
なお、上では、更新データ（デステージ対象データ）を圧縮してから追書きページに格納（追記）する例（図１０のｓ５０５〜ｓ５０８）を説明してきた。ただし別の実施形態として、ストレージ装置１は更新データを圧縮せずに追書きページに追記してもよい。その場合、ｓ５０５の処理は不要で、圧縮処理のオーバヘッドを削減できる。【０１０３】
（６）上書きページの追書きページへの移動
続いて、上書きページの移動判定処理について図１２を用いて説明する。ここでは、所定の条件（所定期間更新がないか？）を満たしている上書きページを特定し、その上書きページのデータを追書きページに移動する処理が行われる。この処理はＣＰＵ１１が定期的に、たとえば１日に１回の頻度で実行する。【０１０４】
最初にＣＰＵ１１は、仮想ボリューム管理テーブル１００を検索することで、上書きページがマッピングされた仮想ページ（つまりページ配置（１０３）が「上書き」の仮想ページ）を１つ選択する（ｓ１０１０）。以下、図１２の説明において、ｓ１０１０で選択された仮想ページのことを、「対象仮想ページ」と呼ぶ。続いてＣＰＵ１１は、対象仮想ページの更新有無（１０５）が「無」か「有」か判定する（ｓ１０２０）。【０１０５】
更新有無（１０５）が「有」の場合（ｓ１０２０：Ｎｏ）、ＣＰＵ１１は対象仮想ページの連続更新無し期間（１０７）を０にする（ｓ１１２０）。そしてＣＰＵ１１は対象仮想ページの更新有無（１０５）を「無」に変更する（ｓ１０９５）。その後ＣＰＵ１１は、全ての仮想ページに対して処理が行われている場合には（ｓ１１００：Ｙｅｓ）、処理を終了し、まだ処理が行われていない仮想ページが残っている場合には（ｓ１１００：Ｎｏ）、ｓ１０１０から処理を繰り返す。【０１０６】
ｓ１０２０の判定で、更新有無（１０５）が「無」の場合（ｓ１０２０：Ｙｅｓ）、ＣＰＵ１１は対象仮想ページの連続更新無し期間（１０７）を更新する（ｓ１０３０）。具体的には、たとえば図１２の処理が２４時間（１日）ごとに行われる場合には、対象仮想ページの連続更新無し期間（１０７）に“１”を加算する。【０１０７】
続いてＣＰＵ１１は、対象仮想ページの連続更新無し期間（１０７）が圧縮許可閾値３０１以上か判定する。対象仮想ページの連続更新無し期間（１０７）が圧縮許可閾値３０１以上の場合（ｓ１０６０：Ｙｅｓ）、ＣＰＵ１１は対象仮想ページにマッピングされている上書きページからデータを読み出して、圧縮回路１６を用いて読み出されたデータを圧縮する。そしてＣＰＵ１１は圧縮されたデータを追書きページに追記し、また先に述べた要領でＬＢＡ管理テーブル１２０と追書きページ管理テーブル１３０の更新も行う（ｓ１０８０）。なお、追書きページに追記する前に、ＣＰＵ１１は追書きページ管理テーブル１３０と最終書き込み位置１３４を参照することで、圧縮データを追記するために必要な量の未使用追書きページがあるか判定する。未使用追書きページがない場合にはＣＰＵ１１は、プール管理テーブル２００で管理されているページの中から未使用ページ（ｕｓｅ（２０５）が“０”のページ）を選択し、追書きページ管理テーブル１３０に、選択された未使用ページを登録する。【０１０８】
その後ＣＰＵ１１は、対象仮想ページの、ページ配置１０３を「追書き」に、ページ＃（１０４）をｎｕｌｌに、割当量（１１１）をｓ１０８０で圧縮したデータのサイズ（圧縮後のサイズ）に変更する（ｓ１０９０）。さらにｓ１０９０では、ＣＰＵ１１は空き領域管理テーブル４００の内容を更新する。なお、これまで対象仮想ページにマッピングされていたページ（上書きページ）について、対象仮想ページへのマッピングが解除される。そのためＣＰＵ１１は、プール管理テーブル２００のレコードのうち、対象仮想ページにマッピングされていたページのｕｓｅ（２０５）欄を“０”に更新する。【０１０９】
ｓ１０９０の後（あるいは対象仮想ページの連続更新無し期間（１０７）が圧縮許可閾値３０１未満の場合（ｓ１０６０：Ｎｏ）にはｓ１０６０の後）、ＣＰＵ１１はｓ１０９５、ｓ１１００を実行する。全ての仮想ページに対して処理が行われている場合には（ｓ１１００：Ｙｅｓ）、処理を終了し、まだ処理が行われていない仮想ページが残っている場合には（ｓ１１００：Ｎｏ）、ｓ１０１０から処理を繰り返す。【０１１０】
（７）空き領域管理テーブルの更新
空き領域管理テーブル４００の更新が行われる箇所、つまりｓ５０４、ｓ５０８、ｓ５１０、そしてｓ１０８０での処理内容について、図１３を用いて説明する。図１３は、ある仮想ページ（以下では、「仮想ページＶ」と呼ぶ）にマッピングされている上書きページのデータが追書きページに移動された時の、ページ（特に追書きページ）の状態変化を概念的に表している。図１３（１）は、仮想ページＶにマッピングされている上書きページを表している。【０１１１】
図１３（１）の領域Ａ、Ｂ、Ｃはそれぞれ、１または複数セグメントで構成されている。図１３（２）は、図１３（１）の上書きページのデータ移動先となる追書きページを表している。図１３（２）の領域（ａ）、（ｂ）、（ｃ）にはそれぞれ、領域Ａ、Ｂ、Ｃから移動されたデータ（圧縮後）が格納されている。【０１１２】
そして図１３（３）は、図１３（２）の領域（ｂ）への更新が発生し（ホスト２から、領域（ｂ）がマッピングされている仮想ページＶ上領域に対する更新データを受け付けた場合である）、更新データが領域（ｂ’）に追記された場合の例を表している。この時、領域（ｂ）は無効な領域（仮想ページにマッピングされていない領域）になる。図１３（４）は、追書きページのデータ（領域（ａ）、（ｂ’）、（ｃ）内のデータ）が上書きページに移動された場合の例を表している。【０１１３】
以下、図１３（１）〜（４）のようにページの状態が変化する時の、空き領域管理テーブル４００の内容の変化について説明する。なお、以下の説明では、領域（ａ）、（ｂ）、（ｂ’）、（ｃ）のサイズをそれぞれ、ａ、ｂ、ｂ’、ｃとし、空き領域確保割合４０１をｐとする。また以下では説明を簡単にするため、仮想ページＶにマッピングされたページのデータだけが、追書きページに格納されている場合の例を説明する。【０１１４】
まず、上書きページから追書きページにデータが移動される場合（ページの状態が図１３の（１）から（２）の状態に遷移する時）について説明する。これは図１２のｓ１０８０、ｓ１０９０が実行される時である。ＣＰＵ１１はｓ１０９０で、空き領域管理テーブル４００の追書きデータ量４０２に、“ａ＋ｂ＋ｃ”（上書きページから移動された１ページ分のデータの圧縮後のサイズである）を格納（加算）する。【０１１５】
また追書きデータ量４０２が変更されることに伴い更新用確保可能量４０３も更新される。更新用確保可能量４０３には、追書きページに移動されたデータ量（ａ＋ｂ＋ｃ）に、空き領域確保割合４０１（ｐ）を乗じた値が格納（加算）される。その結果、更新用確保可能量４０３は、“（ａ＋ｂ＋ｃ）×ｐ”になる。さらに更新用空き容量４０５は、更新後の更新用確保可能量４０３から、空き領域使用量４０４を減算した値（つまり“（ａ＋ｂ＋ｃ）×ｐ”である）に更新される。【０１１６】
続いて、追書きページのデータが更新された場合（ページの状態が図１３の（２）から（３）の状態に遷移する時）について説明する。これは図１０のｓ５０７、ｓ５０８が実行される時である。図１３（３）の状態の時、領域（ｂ）は無効になり、領域（ｂ）に代わって領域（ｂ’）が格納されている。この場合には、追書きデータ量４０２からは領域（ｂ）のサイズが減算され、代わりに領域（ｂ’）のサイズが加算される。これは、図１３（２）の状態の時は、領域（ａ）、（ｂ）、（ｃ）が仮想ページＶにマッピングされているのではなく、領域（ａ）、（ｂ’）、（ｃ）が仮想ページＶにマッピングされているからである。そのためｓ５０８でＣＰＵ１１は、追書きデータ量４０２の値を“ａ＋ｃ＋ｂ’”に更新する。【０１１７】
また、追書きページに更新データが追記された（領域（ｂ’）にデータが追記された）ため、ＣＰＵ１１は空き領域使用量４０４に、“ｂ’”を加算する。また追書きデータ量４０２が変更されることに伴い更新用確保可能量４０３も更新される。更新用確保可能量４０３には、追書きデータ量４０２（つまり“ａ＋ｃ＋ｂ’”）に空き領域確保割合４０１（ｐ）を乗じた値が格納される。さらに更新用空き容量４０５は、更新後の更新用確保可能量４０３から、空き領域使用量４０４（ｂ’）を減算した値（つまり“（ａ＋ｃ＋ｂ’）×ｐ−ｂ’”）に更新される。【０１１８】
次に、追書きページから上書きページにデータが移動される場合（ページの状態が図１３の（３）から（４）の状態に遷移する時）について説明する。これは図１０のｓ５０４またはｓ５１０が実行される時である。ここでは、領域（ａ）、（ｂ’）、（ｃ）のデータが上書きページに移動される。そのためｓ５０４またはｓ５１０では、ＣＰＵ１１は空き領域管理テーブル４００の追書きデータ量４０２から、領域（ａ）、（ｂ’）、（ｃ）のサイズ（つまり“ａ＋ｃ＋ｂ’”）を減算し、そして更新用確保可能量４０３から、（ａ＋ｃ＋ｂ’）×ｐを減算する。また空き領域使用量４０４は変更されない。更新用空き容量４０５はその他のケースと同様、更新後の更新用確保可能量４０３から、空き領域使用量４０４を減算した値に更新される。図１３（４）の場合のように、更新用空き容量４０５が負の値になることもある。【０１１９】
図１３（４）の状態に遷移する場合、空き領域使用量４０４は変更（削減）されない（ｂ’のままである）。領域（ｂ’）には有効なデータは格納されていないが、追書きページへのデータ書き込みは追記書きしか許されていないため、領域（ｂ’）に更新データを書き込めないためである。空き領域使用量４０４の削減される契機は、ガベージコレクションが行われる時である。ガベージコレクションが行われた後、ＣＰＵ１１は空き領域使用量４０４を０に変更し、併せて更新用空き容量４０５も変更する（更新用確保可能量４０３から空き領域使用量４０４を減算した値に変更する）。【０１２０】
またガベージコレクションで、未使用領域の回収とデータのパッキングのみが行われる場合、追書きデータ量４０２は変動しないため、追書きデータ量４０２、更新用確保可能量４０３の値は更新されない。ただしガベージコレクションで、追書きデータ量４０２の変動が発生する処理（たとえば圧縮率の低いデータを上書きページに移動する等の処理）が併せて行われる場合には、追書きデータ量４０２、更新用確保可能量４０３の値の更新も行われる。【０１２１】
本実施例に係るストレージ装置１は、ガベージコレクションを定期的に実行する。ただし、上で説明してきた処理の途中でガベージコレクションが実行されてもよい。たとえばＣＰＵ１１は、図１０のｓ５０６で、デステージ対象データを格納可能な空き領域が存在しないと判定されたことを契機にガベージコレクションを実行してもよい。【０１２２】
以上が、実施例１に係るストレージ装置の説明である。実施例１に係るストレージ装置では、所定条件に合致する仮想ページ（たとえば所定期間以上更新が発生しなかった仮想ページ）にマッピングされているページ（上書きページ）のデータを圧縮し、圧縮データを別のページ（追書きページ）へと移動する。これにより、ストレージ装置のアクセス性能を維持しつつ、記憶領域を節約することができる。【０１２３】
また実施例１に係るストレージ装置では、追書きページへデータが移動されると、追書きページに移動されるデータ量に基づいて、追書きページ内データに対する更新データを書き込む（追記する）ための空き領域の量を決定する。更新データ量が増加し空き領域がなくなった場合、追書きページのデータを伸長し、上書きページへと戻す。空き領域は更新データの書き込みに用いられ、上書きページ（非圧縮データを格納するページ）へのライトデータの格納には用いられない領域であるため、空き領域を多く確保するとストレージ装置の記憶効率が実質的に減少する。一方空き領域が少ない場合、追書きページのガベージコレクション時の効率（性能）が低下する。実施例１に係るストレージ装置のように空き領域のサイズを制御することで、記憶効率の維持とガベージコレクション性能の両立を図ることができる。【０１２４】
また実施例１に係るストレージ装置は、ホストからの仮想ページに対する書き込みデータを一旦キャッシュメモリに蓄積する。そして追書きページがマッピングされている（つまり圧縮データが格納されている）仮想ページに対する、キャッシュメモリ上の蓄積データ量が閾値（ＣＭ上ページ更新量閾値３０２）を超過する場合、データを追書きページから読み出して上書きページに移動する。その際、ホストからのライトデータがキャッシュメモリ上に蓄積されている領域については追書きページからの読み出しを行わない。そのため、追書きページから上書きページへのデータ移動効率が良い。
【実施例２】
【０１２５】
続いて実施例２に係るストレージ装置の説明を行う。実施例２に係るストレージ装置のハードウェア構成は実施例１で説明したものと同じである。【０１２６】
実施例１に係るストレージ装置では、ある仮想ページにマッピングされていた上書きページから追書きページにデータが移動された後、その追書きページ（のマッピングされた仮想ページ）に対して多量のライト（更新）が発生すると、追書きページのデータが上書きページへと戻される。たとえば１仮想ページに対してＣＭ上ページ更新量閾値３０２以上のデータ書き込みが発生し、そのデータがキャッシュメモリに蓄積された場合、その仮想ページに追書きページがマッピングされていても、上書きページに戻される。【０１２７】
このような事象はたとえば、ホスト２から仮想ボリュームに対してシーケンシャルライト要求を受領した場合が考えられる。たとえばホスト２が仮想ボリュームをデータバックアップ先ボリュームとして使用する場合、ホスト２は仮想ボリュームに大量のデータをシーケンシャル書込みする。【０１２８】
ここで、たとえば圧縮許可閾値３０１が２８日で、かつホスト２が１か月（３０日）に１回の頻度で、仮想ボリュームをバックアップ先ボリュームに使用するケースを想定する。その場合、ホストが仮想ボリュームにデータを書き込んでから２８日を経過すると、２９日目には、その仮想ボリュームの仮想ページにマッピングされているページ（上書きページ）から、追書きページへのデータ移動が発生する。【０１２９】
しかしその翌日（３０日目）には、ホスト２がバックアップのために、仮想ボリュームに大量のデータをシーケンシャル書込みするため、データは追書きページから上書きページへと移動される。そのためこのケースでは、３０日のうち、データが圧縮されて格納されている期間は２日間のみに限定され、圧縮による記憶領域の節約の効果は殆ど得られない。且つこのケースでは、データ更新は３０日のうち１日しか発生しないため、このケースで書き込まれるデータは圧縮状態で保存されることが望ましい。【０１３０】
実施例２に係るストレージ装置では、データアクセスパターンの学習を行い、上で説明したようなケースの場合に、データが圧縮されて保存される期間を長くする。またデータアクセスパターンの学習を行うことで、データ更新が発生する時（日）を事前予測し、その日の前にデータが上書きページに移動されるようにする。【０１３１】
図１４は、実施例２に係るストレージ装置が管理する、仮想ボリューム管理テーブル１００’の構成例である。仮想ボリューム管理テーブル１００’は、仮想ページ＃（１０１’）、ホストＬＢＡ（１０２’）、ページ配置（１０３’）、ページ＃（１０４’）、更新有無（今回）（１０５’）、更新有無（前回）（１０６’）、連続更新無し期間（現在）（１０７’）、連続更新無し期間（退避）（１０８’）、連続更新無し期間（学習移動後）（１０９’）、学習移動フラグ（１１０’）、割当量（１１１’）のカラムを有する。【０１３２】
仮想ページ＃（１０１’）、ホストＬＢＡ（１０２’）、ページ配置（１０３’）、ページ＃（１０４’）、更新有無（今回）（１０５’）、連続更新無し期間（現在）（１０７’）、割当量（１１１’）に格納される情報の内容は、実施例１で説明した仮想ボリューム管理テーブル１００の、仮想ページ＃（１０１）、ホストＬＢＡ（１０２）、ページ配置（１０３）、ページ＃（１０４）、更新有無（１０５）、連続更新無し期間（１０７）、割当量（１１１）と同じである。これ以外の情報については、後述する。【０１３３】
図１５は、実施例２に係るストレージ装置が管理する、閾値テーブル３００’の構成例である。閾値テーブル３００’には、圧縮許可閾値３０１、ＣＭ上ページ更新量閾値３０２、学習移動閾値３０３が格納される。圧縮許可閾値３０１、ＣＭ上ページ更新量閾値３０２は、実施例１で説明したものと同じである。学習移動閾値３０３の内容については、上書きページの移動判定処理の説明の過程で述べる。【０１３４】
実施例２に係るストレージ装置では、上で述べた仮想ボリューム管理テーブル１００’と閾値テーブル３００’の内容が異なる他、上書きページの移動判定処理の内容が、実施例１で説明したもの（図１２）と相違する。また、実施例２に係るストレージ装置では、学習結果に基づいて、追書きページのデータを上書きページに移動する処理が追加される。また、ライト処理の流れは基本的に実施例１で説明したもの（図９）と同様だが、ライト処理の最後にＣＰＵ１１は、更新有無（１０５）に代えて更新有無（今回）（１０５’）に対して「有」を設定する点が異なる。その他の点については、実施例２に係るストレージ装置は実施例１に係るストレージ装置と同じである。たとえば実施例１で説明したデステージ処理（図１０）は、実施例２に係るストレージ装置でも実施される。【０１３５】
以下では、実施例２に係るストレージ装置で行われる、上書きページの移動判定処理（以下、「移動判定処理」と呼ぶ）の流れを、図１６、図１７を用いて説明する。多くの処理は実施例１（図１２）で説明したものと共通であるため、以下では、図１２の処理と相違する点を中心に説明する。【０１３６】
図１６のｓ１０１０、ｓ１０２０、ｓ１０３０は、実施例１（図１２）で説明したものと同様である。ただし実施例２における移動判定処理では、ｓ１０２０でＣＰＵ１１は、ｓ１０１０で選択された仮想ページ（以下、この仮想ページを「対象仮想ページ」と呼ぶ）の更新有無（今回）（１０５’）に基づいて判定を行う。以下ではまず、ｓ１０２０の判定で、対象仮想ページの更新有無（今回）（１０５’）が「有」の場合（ｓ１０２０：Ｎｏ）について説明する。【０１３７】
対象仮想ページの更新有無（今回）（１０５’）が「有」の場合、ＣＰＵ１１は対象仮想ページの連続更新無し期間（現在）（１０７’）の値を、連続更新無し期間（退避）（１０８’）に格納する（ｓ１１１０）。その後ＣＰＵ１１は、対象仮想ページの連続更新無し期間（現在）（１０７’）と連続更新無し期間（学習移動後）（１０９’）とを０にする（ｓ１１２０’）。そしてＣＰＵ１１は、対象仮想ページの更新有無（今回）（１０５’）の値を、更新有無（前回）（１０６’）に退避した後、更新有無（今回）（１０５’）の値を「無」に変更する（ｓ１０９５’）。この後、全ての仮想ページに対して処理が行われている場合には（ｓ１１００：Ｙｅｓ）、ＣＰＵ１１は処理を終了し、まだ処理が行われていない仮想ページが残っている場合には（ｓ１１００：Ｎｏ）、ｓ１０１０から処理を繰り返す。【０１３８】
対象仮想ページの更新有無（今回）（１０５’）が「無」の場合（ｓ１０２０：Ｙｅｓ）、ＣＰＵ１１はｓ１０３０を実行する。ｓ１０３０の後、ＣＰＵ１１は対象仮想ページの学習移動フラグ１１０’がＯＮか判定する。学習移動フラグ１１０’がＯＮの場合（ｓ１０４０：Ｙｅｓ）、ＣＰＵ１１は連続更新無し期間（学習移動後）（１０９’）を更新する（ｓ１０５０）。たとえば移動判定処理（図１６、図１７の処理）が２４時間（１日）ごとに行われる場合には、対象仮想ページの連続更新無し期間（学習移動後）（１０９’）に“１”を加算する。その後ｓ１０６０の処理が行われる。学習移動フラグ１１０’がＯＦＦの場合（ｓ１０４０：Ｎｏ）、ｓ１０５０の処理はスキップされる。【０１３９】
続いてＣＰＵ１１は、対象仮想ページの連続更新無し期間（現在）（１０７’）が圧縮許可閾値３０１以上か判定する（ｓ１０６０）。対象仮想ページの連続更新無し期間（現在）（１０７’）が圧縮許可閾値３０１以上の場合（ｓ１０６０：Ｙｅｓ）、ＣＰＵ１１は学習移動フラグ１１０’がＯＮか判定する（ｓ１０７０）。学習移動フラグ１１０’がＯＦＦの場合（ｓ１０７０：Ｎｏ）、実施例１と同じくＣＰＵ１１はｓ１０８０とｓ１０９０を実施する。そしてＣＰＵ１１はｓ１０９５’を実施した後、全ての仮想ページに対して処理が行われている場合には（ｓ１１００：Ｙｅｓ）処理を終了し、まだ処理が行われていない仮想ページが残っている場合には（ｓ１１００：Ｎｏ）、ｓ１０１０から処理を繰り返す。【０１４０】
学習移動フラグ１１０’がＯＮの場合（ｓ１０７０：Ｙｅｓ）、ＣＰＵ１１は連続更新無し期間（学習移動後）（１０９’）が、学習移動閾値３０３以上か判定する（ｓ１０７２）。ｓ１０７２の判定がＹｅｓの場合、ＣＰＵ１１は学習移動フラグ１１０’をＯＦＦに変更し（ｓ１０７４）、その後ｓ１０８０以降の処理を行う。連続更新無し期間（学習移動後）（１０９’）が、学習移動閾値３０３以上か判定する（ｓ１０７２）。ｓ１０７２の判定がＮｏの場合、つまり連続更新無し期間（学習移動後）（１０９’）が、学習移動閾値３０３未満の場合、ｓ１０７４、ｓ１０８０、ｓ１０９０の処理はスキップされる（つまり対象仮想ページのデータ移動は行われない）。【０１４１】
ｓ１０６０の判定で、対象仮想ページの連続更新無し期間（現在）（１０７’）が圧縮許可閾値３０１未満の場合（ｓ１０６０：Ｎｏ）、ＣＰＵ１１は更新有無（前回）（１０６’）が「有」か「無」かを判定する（ｓ１０６２）。更新有無（前回）（１０６’）が「無」の場合（ｓ１０６２：Ｎｏ）、ＣＰＵ１１はｓ１０９５’以降の処理を行う。【０１４２】
一方ｓ１０６２の判定で、更新有無（前回）（１０６’）が「有」の場合（ｓ１０６２：Ｙｅｓ）、ＣＰＵ１１は連続更新無し期間（退避）（１０８’）が、学習移動閾値３０３以上か判定する（ｓ１０６４）。ｓ１０６４の判定がＹｅｓの場合、ＣＰＵ１１は学習移動フラグ１１０’をＯＦＦに変更し（ｓ１０６６）、その後ｓ１０８０以降の処理を行う。ｓ１０６４の判定がＮｏの場合、ＣＰＵ１１はｓ１０９５’以降の処理を行う。【０１４３】
続いて、実施例２に係るストレージ装置で実施される、学習結果に基づいた、追書きページのデータの上書きページへの移動処理の流れを、図１８を用いて説明する。この処理は定期的、たとえば１日に１回等の頻度で実行される。【０１４４】
最初にＣＰＵ１１は仮想ボリューム管理テーブル１００を検索することで、追書きページがマッピングされた仮想ページ（つまりページ配置（１０３）が「追書き」の仮想ページ）のうち、学習移動フラグ１１０’がＯＮの仮想ページを１つ選択する（ｓ１５１０）。以下、図１８の説明において、ｓ１５１０で選択された仮想ページのことを、「対象仮想ページ」と呼ぶ。そして対象仮想ページにマッピングされている追書きページのことを、「対象追書きページ」と呼ぶ。【０１４５】
続いてＣＰＵ１１は、対象仮想ページの更新有無（今回）（１０５’）が「有」か「無」かを判定する（ｓ１５２０）。対象仮想ページの更新有無（今回）（１０５’）が「無」の場合（ｓ１５２０：Ｙｅｓ）、対象仮想ページの連続更新無し期間（現在）（１０７’）を更新する（ｓ１５３０）。この処理はｓ１０３０と同じである。【０１４６】
ｓ１５５０では、ＣＰＵ１１は対象仮想ページの連続更新無し期間（現在）（１０７’）が連続更新無し期間（退避）（１０８’）と同じか否か判定し（ｓ１５５０）、同じ場合には対象仮想ページにマッピングされている追書きページのデータを伸長して上書きページに移動する（ｓ１５６０）。ｓ１５６０では、実施例１のｓ５０９とｓ５１０と同様の処理が行われる。その後ＣＰＵ１１は対象仮想ページの連続更新無し期間（学習移動後）（１０９’）を０にし（ｓ１５７０）、また更新有無（前回）（１０６’）に退避した後、更新有無（今回）（１０５’）の値を「無」に変更する（ｓ１５７５）。追書きページがマッピングされている全ての仮想ページについて、図１８の処理が行われた場合には（ｓ１５８０：Ｙｅｓ）、処理を終了する。まだ図１８の処理が行われていない仮想ページがある場合には、再びＣＰＵ１１はｓ１５１０から処理を繰り返す。【０１４７】
ｓ１５２０の判定で、対象仮想ページの更新有無（今回）（１０５’）が「有」の場合（ｓ１５２０：Ｎｏ）、ＣＰＵ１１は連続更新無し期間（現在）（１０７’）の内容を連続更新無し期間（退避）（１０８’）にコピー（退避）し（ｓ１６１０）、連続更新無し期間（現在）（１０７’）と連続更新無し期間（学習移動後）（１０９’）の内容を０にし（ｓ１６２０）、学習移動フラグ（１１０’）をＯＦＦに設定する（ｓ１６３０）。その後ｓ１５８０の判定が行われる。【０１４８】
以上が、実施例２に係るストレージ装置の説明である。実施例２に係るストレージ装置は仮想ページの更新周期（更新パターン）を学習し、更新頻度の少ない仮想ページのデータが上書きページを占有することを抑制する。具体的にはストレージ装置は、（ｎ＋１）日に１回更新が発生する（ｎ日間連続して更新がなく、（ｎ＋１）日目に更新が行われる）、という更新パターンの仮想ページを特定する。ここでｎは、学習移動閾値３０３以上の値である。そのような仮想ページがあった場合、ストレージ装置はその仮想ページのデータを上書きページから追書きページに移動する（図１７：ｓ１０６２〜ｓ１０９０の処理）。同時にストレージ装置はその仮想ページに対して更新の発生しなかった期間を記憶しておく（連続更新無期間（退避）１０８’に）。つまりストレージ装置は、その仮想ページの更新周期が（１＋連続更新無期間（退避）１０８’）日であるという学習結果（推定結果）を記憶する。【０１４９】
追書きページにデータが移動された後、その追書きページがマッピングされた仮想ページに対して所定期間（連続更新無期間（退避）１０８’に記憶された期間）、更新がなかった場合、ストレージ装置は、まもなくその仮想ページに対する更新が発生すると判断し、更新が発生する前に、その仮想ページにマッピングされている追書きページのデータを上書きページへと移動する（図１８：ｓ１５５０〜ｓ１５７０）。そのため、データ更新が発生する時のアクセス性能を向上させることができる。【０１５０】
また実施例１に係るストレージ装置の場合、先に述べたように、仮想ページの更新頻度が低い場合でも、データが圧縮されて格納される（追い書きページに格納される）期間が短くなる。実施例２に係るストレージ装置では、上書きページへと移動されたデータは、更新周期に変動がない限り、図１７の処理（ｓ１０６２〜ｓ１０９０等の処理）が実行されることによって、圧縮許可閾値３０１が経過するのを待つことなく追書きページへと移される。そのため、データ更新のない期間はデータが圧縮状態で記憶デバイスに格納されるため、ストレージ装置の性能と記憶効率の両立を図ることができる。【０１５１】
以上、本発明の実施例を説明したが、これらは、本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。すなわち、本発明は、他の種々の形態でも実施する事が可能である。【０１５２】
上では、ストレージ装置が使用するいくつかの情報が、プール管理テーブル２００等のテーブル構造で管理される例を説明したが、テーブル構造で情報を管理する態様に限定されるわけではない。ストレージ装置はテーブル以外のデータ構造、例えばリスト構造などを用いて、情報を管理してもよい。【０１５３】
また、上で説明した実施例では、追書きページに格納されるデータは圧縮データであったが、追書きページに格納されるデータは圧縮データに限定されなくともよい。たとえばストレージ装置が、暗号化等のデータ変換を行う機能を有し、かつそのデータ変換機能によってデータサイズが変動するようなデータ変換が行われる場合、変換後のデータを追書きページに格納し、追書きページから上書きページにデータを戻す時にはデータを逆変換するようにしてもよい。【０１５４】
また、追書きページに格納されるデータは、圧縮や暗号化等のデータ変換が施されているデータに限定されない。上書きページと追書きページに格納されるデータがいずれも、非圧縮データあるいはデータ変換等の行われていないデータでもよい。一例として記憶デバイスとして、ランダムライト性能が高くないがシーケンシャルライト性能は高い記憶デバイスがストレージ装置に用いられる場合を想定する。この場合、ストレージ装置が各仮想ページのアクセス特性（ライト頻度、シーケンシャル・ランダムライト比率等）を観測し、観測結果に基づいて、ランダムライト頻度の高い仮想ページのデータは追書きページに移動し、シーケンシャルライトされることが多い仮想ページには上書きページを割り当てるように制御すると、ランダムライトデータが追書きページに格納されることにより、記憶デバイスへのデータ書き込み時にシーケンシャルライトされる。そのため、アクセス性能の向上が見込める。【０１５５】
また別の例として、複数の異なる種類の記憶デバイスが搭載されるストレージ装置の場合にも、上の実施例で説明した制御方法は有効である。たとえば記憶デバイスとして、追記型の記憶デバイス（ＤＶＤ−ＲＷあるいはフラッシュメモリなどのように、上書き不可で、再書き込みには記憶領域の消去が必要な記憶媒体を用いた記憶デバイス）と、上書き可能な記憶デバイス（ＨＤＤ等）の両方を搭載するストレージ装置の場合、ストレージ装置は、上書き可能な記憶デバイスの記憶領域を上書きページとして用い、追記型記憶デバイスの記憶領域を追書きページとして用いるように制御するとよい。そして、上の実施例のように、更新頻度の低いデータを追書きページに移動するように制御すると、追記型記憶デバイスで記憶媒体の消去頻度が低く抑えられ、ストレージ装置のアクセス効率向上が見込める。この場合も、追書きページに格納されるデータは、圧縮等のデータ変換が行われるデータであってもよいし、非圧縮データであってもよい。
【符号の説明】
【０１５６】
１：ストレージ装置，  ２：ホスト，  ３：ＳＡＮ，  ５：管理ホスト，  １０：ストレージコントローラ，  １１：ＣＰＵ，  １２ホストＩ／Ｆ，  １３：デバイスＩ／Ｆ，  １４：メモリ，  １５：管理用Ｉ／Ｆ，１６：圧縮回路，  ２０：記憶デバイス
【図１】
2016203612.tif 000003
【図２】
2016203612.tif 000004
【図３】
2016203612.tif 000005
【図４】
2016203612.tif 000006
【図５】
2016203612.tif 000007
【図６】
2016203612.tif 000008
【図７】
2016203612.tif 000009
【図８】
2016203612.tif 000010
【図９】
2016203612.tif 000011
【図１０】
2016203612.tif 000012
【図１１】
2016203612.tif 000013
【図１２】
2016203612.tif 000014
【図１３】
2016203612.tif 000015
【図１４】
2016203612.tif 000016
【図１５】
2016203612.tif 000017
【図１６】
2016203612.tif 000018
【図１７】
2016203612.tif 000019
【図１８】
2016203612.tif 000020
【手続補正書】
【提出日】平成29年6月2日(2017.6.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１以上の記憶デバイスと、ストレージコントローラと、を有し、
前記ストレージコントローラは、前記記憶デバイスの記憶領域を、ホストからの更新データの上書きを許す上書き用領域と、前記ホストからの更新データを追記格納するための追書き用領域に分けて管理しており、
前記ストレージコントローラは、前記上書き用領域と前記追書き用領域の間でデータの移動を行う、
ことを特徴とする、ストレージ装置。
【請求項２】
前記ストレージコントローラは、データの格納された前記上書き用領域が、あらかじめ定められた条件に該当する状態にあることを検出した時、前記上書き用領域に格納された前記データを前記追書き用領域に移動する、
ことを特徴とする、請求項１に記載のストレージ装置。
【請求項３】
前記ストレージコントローラは、データの格納された前記上書き用領域に対し、前記ホストからの書き込みが所定期間発生していないことを検出した時、前記上書き用領域に格納された前記データを前記追書き用領域に移動する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項４】
前記ストレージコントローラは、前記上書き用領域に格納された前記データを前記追書き用領域に移動する時、
前記データから圧縮データを生成し、前記圧縮データを前記追書き用領域に追記する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項５】
前記ストレージコントローラは、前記上書き用領域から前記追書き用領域に移動される前記データの量に基づいて、前記追書き用領域のサイズを決定する、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項６】
前記ストレージコントローラは、前記ホストに対してボリュームを提供し、前記ホストからライト要求のあった前記ボリュームの領域に動的に前記記憶デバイスの記憶領域を割り当てるよう構成されており、
前記ストレージコントローラは、前記追書き用領域が割り当てられた前記ボリュームの領域に対するライトデータを前記ホストから受領すると、前記ライトデータを前記追書き用領域に追記し、
前記追書き用領域に書き込まれるデータ量が、前記追書き用領域のサイズを超過する場合、前記追書き用領域内のデータを前記上書き用領域に戻す、
ことを特徴とする、請求項５に記載のストレージ装置。
【請求項７】
前記ストレージコントローラは、前記追書き用領域に圧縮データが格納されている場合、前記圧縮データのうち圧縮率の低い前記圧縮データから優先的に前記上書き用領域に戻し、
前記ストレージコントローラは、前記圧縮データを前記上書き用領域に戻す際に、前記圧縮データを伸長してから前記上書き用領域に戻す、
ことを特徴とする、請求項６に記載のストレージ装置。
【請求項８】
前記ストレージコントローラは、前記ホストからの前記ライトデータを一時格納するキャッシュメモリを有し、
前記ストレージコントローラは、前記追書き用領域が割り当てられた前記ボリュームの領域に対する前記ライトデータが、所定量以上前記キャッシュメモリに蓄積された場合、
前記追書き用領域に格納されているデータを前記上書き用領域に戻す、
ことを特徴とする、請求項６に記載のストレージ装置。
【請求項９】
前記ストレージコントローラは、前記追書き用領域が割り当てられた前記ボリュームの領域のうち、第１の領域に対する前記ライトデータが前記キャッシュメモリに蓄積されており、第２の領域に対する前記ライトデータは前記キャッシュメモリに蓄積されていない場合、
前記追書き用領域に格納されているデータのうち、前記第１の領域に対する前記ライトデータの更新前データは前記上書き用領域に戻さない、
ことを特徴とする、請求項８に記載のストレージ装置。
【請求項１０】
前記ストレージコントローラは、前記ボリュームの領域に対する前記ホストからのアクセスパターンを観測することで、前記ボリュームの領域の更新周期を推定し、
前記推定した更新周期に基づいて、前記ホストから前記ボリュームの領域に対するライト要求を受領する前に、前記ボリュームの領域に割り当てられた前記追書き用領域に格納されたデータを、前記上書き領域に戻す、
ことを特徴とする、請求項６に記載のストレージ装置。
【請求項１１】
前記ストレージコントローラは、前記ホストからのライトデータを一時格納するキャッシュメモリを有し、
前記ストレージコントローラは、前記ホストに対してボリュームを提供し、前記ホストからライト要求のあった前記ボリュームの領域に、前記上書き用領域か前記追書き用領域のいずれかを動的に割り当てるよう構成されており、
前記ストレージコントローラは、
Ａ）前記ボリュームの領域に対する更新データを前記ホストから受領すると、前記キャッシュメモリに前記更新データを格納し、
Ｂ）前記更新データが、前記上書き用領域が割り当てられた前記ボリュームの領域に対する更新データの場合、前記上書き用領域に前記更新データを上書きし、
Ｃ）前記上書き用領域が割り当てられた前記ボリュームの領域に対して書き込みが所定期間発生していないことを検出した時、前記ボリュームの領域に前記追書き用領域を割り当て、前記上書き用領域に格納されているデータを圧縮して前記追書き用領域に移動し、前記上書き用領域から前記追書き用領域に移動される前記データの量に基づいて、前記追書き用領域のサイズを増加させ、
Ｄ）前記更新データが、前記追書き用領域が割り当てられた前記ボリュームの領域に対する更新データの場合、前記ボリュームの領域に対する前記更新データが、所定量以上前記キャッシュメモリに格納されているか判定し、
Ｄ−１）前記ボリュームの領域に対する前記更新データが、所定量以上前記キャッシュメモリに格納されている場合、前記ボリュームの領域に前記上書き用領域を割り当て、前記キャッシュメモリに格納されている前記更新データを前記上書き用領域に格納し、前記ボリュームの領域に割り当てられていた前記追書き用領域に格納されているデータのうち、前記更新データが前記キャッシュメモリに格納されていないデータについて、前記上書き領域に移動し、
Ｄ−２）前記ボリュームの領域に対する前記更新データが、所定量以上前記キャッシュメモリに格納されていない場合、
Ｄ−２−１）前記追書き用領域に前記更新データを追記可能な領域がある時には、前記ライトデータを前記追書き用領域に追記し、
Ｄ−２−１）前記追書き用領域に前記更新データを追記可能な領域がない時には、前記追書き用領域内のデータを前記上書き用領域に戻す、
よう構成されている、
ことを特徴とする、請求項２に記載のストレージ装置。
【請求項１２】
１以上の記憶デバイスと、ストレージコントローラと、を有するストレージ装置の制御方法であって、
前記ストレージコントローラが、前記１以上の前記記憶デバイスの記憶領域を、ホストからの更新データの上書きを許す上書き用領域と、前記ホストからの更新データを追記格納するための追書き用領域に分けて管理し、
前記ストレージコントローラが、前記上書き用領域と前記追書き用領域の間でデータの移動を行う、
ことを特徴とする、ストレージ装置の制御方法。
【国際調査報告】
2016203612.tif 000021
2016203612.tif 000022