(57)【要約】  一般的に、キャッシュメモリとしてＤＲＡＭが利用されており、ヒット率を上げるべくキャッシュメモリの容量を拡張しようとすると、ＤＲＡＭの物理的な増加が必要となり、簡単ではない。一方で、容量仮想化機能を有するストレージシステムには、比較的多くの空きページが存在することがある。そこで、ストレージシステムは、容量仮想化機能に従うページ（例えば、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇに従い論理ボリュームに割り当てられ得るページ）を、キャッシュ領域として使用する。これによって、動的なキャッシュ容量の増減が可能となる。【選択図】図２
2015517697.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続されるストレージシステムであって、
性能の異なる２種類以上の記憶装置と、
前記２種類以上の記憶装置と前記ホストに接続された制御装置と
を有し、
前記制御装置は、
（Ａ）同一種類の１つ以上の記憶装置を複数の実ページに分割して、実ページがそれぞれ割り当てられ得る複数の仮想ページで構成された論理ボリュームであり前記ホストからのアクセス要求で指定されるホストボリュームを前記ホストに提供し、
（Ｂ）前記複数の実ページのうちの１以上の実ページを、前記ホストボリュームのキャッシュ領域として使用する、
ストレージシステム。
【請求項２】
前記制御装置は、
（Ｃ）前記記憶装置のキャッシュのヒット率を計測し、
（Ｄ）前記計測されたヒット率を基に、前記キャッシュ領域として使用する実ページの数を調整する、
請求項１記載のストレージシステム。
【請求項３】
前記制御装置は、前記（Ｃ）で、前記ヒット率を、記憶装置の種類毎に計測し、
前記制御装置は、前記（Ｄ）で、キャッシュ領域として使用する実ページの数を、記憶装置の種類毎に、調整する、
請求項２記載のストレージシステム。
【請求項４】
前記制御装置は、
（Ｅ）実ページのアクセス状況を計測し、
（Ｆ）実ページのアクセス状況と、実ページの基になっている記憶装置の性能とを基に、同種又は異種の記憶装置間で、実ページ内のデータを移動させる、
請求項３記載のストレージシステム。
【請求項５】
前記制御装置は、前記キャッシュ領域として使用されるページの割当先となる論理ボリュームであるキャッシュボリュームを管理する、
請求項１記載のストレージシステム。
【請求項６】
前記制御装置は、
（Ｅ）実ページのアクセス状況を計測し、
（Ｆ）実ページのアクセス状況と、実ページの基になっている記憶装置の性能とを基に、同種又は異種の記憶装置間で、実ページ内のデータを移動させる、
請求項５記載のストレージシステム。
【請求項７】
前記（Ｆ）の対象となるページは、前記ホストボリュームに割り当てられているページであって、前記キャッシュボリュームに割り当てられているページではない、
請求項６記載のストレージシステム。
【請求項８】
前記キャッシュボリュームは、記憶装置の種類毎にある、
請求項５記載のストレージシステム。
【請求項９】
前記キャッシュ領域として使用されるページは、前記ホストボリュームに割り当てられデータの格納先のページの基になっている記憶装置よりも性能の高い記憶装置に基づくページである、
請求項１記載のストレージシステム。
【請求項１０】
前記２種類以上の記憶装置は、データの消去単位であるブロックを複数個有するフラッシュメモリを有する２以上のフラッシュパッケージを含み、
（Ｇ）前記制御装置は、前記各フラッシュパッケージの消去回数を計測し、
前記制御装置は、前記（Ｆ）で、前記消去回数を基に、前記フラッシュパッケージ間で、ページ内のデータを移動する、
ストレージシステム。
【請求項１１】
前記制御装置は、複数のストレージシステムによって構成される仮想的なストレージシステムの識別子を前記複数のストレージシステムにおける他のストレージシステムと共有し、
前記ホストボリュームは、仮想的な論理ボリュームの基になっており、
前記制御装置は、
（Ｈ）前記仮想的な論理ボリュームがどのストレージシステムの論理ボリュームであるかを認識し、
（Ｉ）前記複合型ストレージシステムに属するほかのストレージシステムとの間のデータ転送に伴う遅延を認識し、
（Ｊ）前記認識した遅延にしたがって、前記複合型ストレージシステムに属するほかのストレージシステムのデータを前記ページにキャッシュする、
ストレージステム。
【請求項１２】
前記制御装置が、前記認識した遅延にしたがって、前記２種類以上の記憶装置のなかから、キャッシング先の記憶装置を選択する、
請求項１１記載のストレージシステム。
【請求項１３】
前記制御装置が、前記（Ｉ）で、前記複合型ストレージシステムそれぞれのストレージシステムと接続された前記ホストとの間の転送遅延時間を認識し、
前記制御装置は、前記（Ｊ）で、前記認識した遅延にしたがって、前記複合型ストレージシステムに属するほかのストレージシステムのデータをキャッシュする、
請求項１１記載のストレージシステム。
【請求項１４】
複数のストレージシステムによって構成される複合型のストレージシステムであって、
前記複数のストレージシステムは、仮想的なストレージシステムの識別子を共有し、仮想的な論理ボリュームを提供し、
各ストレージシステムは、
（Ａ）前記仮想的な論理ボリュームがどのストレージシステムの論理ボリュームであるかを認識し、
（Ｂ）前記複合型ストレージシステムに属するほかのストレージシステムとの間のデータ転送に伴う遅延を認識し、
（Ｃ）前記認識した遅延にしたがって、前記複合型ストレージシステムに属するほかのストレージシステムのデータをキャッシュする、
複合型ストレージステム。
【請求項１５】
複数のストレージシステムによって構成される複合型のストレージシステムであって、
前記複数のストレージシステムは、仮想的なストレージシステムの識別子を共有し、仮想的な論理ボリュームを提供し、第１のストレージシステムを含み、
各ストレージシステムが、記憶装置を有し、
前記第１のストレージシステムが、
（Ａ）同一種類の１つ以上の記憶装置を複数の実ページに分割して、実ページがそれぞれ割り当てられ得る複数の仮想ページで構成された論理ボリュームであり前記ホストからのアクセス要求で指定されるホストボリュームを前記ホストに提供し、
（Ｂ）前記記憶装置の前記ページを、前記複合型ストレージシステムを構成する他のストレージシステムのデータを格納するキャッシュとして使用する、
複合型ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二次記憶装置に基づく記憶領域をキャッシュ領域として用いる技術に関する。
【背景技術】
【０００２】
近年のストレージシステムは、多種多様なストレージ機能を有している。また、これらのストレージ機能を有償で販売しているストレージベンダが存在し、この点で、ストレージ機能の高性能化は、ストレージベンダの顧客にとって価値が高いと考えられる。また、フラッシュメモリデバイスは、磁気ディスクデバイス等のディスク記憶装置に比べ性能が優れており、フラッシュメモリの最近の低価格化に伴い、フラッシュメモリデバイスがディスク記憶装置に加えてストレージシステムに搭載されるケースが増えてきている。また、ストレージシステムは、一般に、キャッシュメモリ（例えばＤＲＡＭ（Dynamic  Random  Access  Memory））を有しており、フラッシュメモリ装置又はディスク記憶装置のような二次記憶装置に格納された、アクセス頻度の高いデータを、キャッシュメモリに格納する。
【０００３】
フラッシュメモリデバイスは、フラッシュメモリの特性上、データを書き換えようとした時、そのデータが元々格納されていた物理領域上に、そのデータを、直接上書きすることはできない。フラッシュメモリデバイスは、すでに書き込みを行った領域に、データの書き込みを行う際には、フラッシュメモリの消去単位であるブロックと呼ばれる単位で、消去処理を実行した後、データを書き込む必要がある。このため、フラッシュメモリデバイスは、データを書きかえる場合、元々そのデータが格納されていた領域に書き込むのではなく、同じブロック内の別の領域に書き込むことが多い。同一のデータが複数の領域に書き込まれ、ブロックにデータが満杯になると（ブロックに空きの領域が無くなると）、フラッシュメモリデバイスは、ブロック内の有効データを別のブロックに移し、移動元のブロックの消去処理を行うことで、空きのブロックを作成する。
【０００４】
データを格納するアドレスを固定的に割り当てる方式をとると、通常はアドレスごとに書換え頻度が異なるので、消去回数のばらつきがブロックごとに生ずることになる。また、フラッシュメモリの各々ブロックの消去回数には限界数があり、消去回数が限界数を超えたブロックには、通常、データを格納することができない。以上の問題を解決するため、このばらつきを少なくする技術として、ウエアレベリングと呼ばれる技術が公開されている（例えば、特許文献１）。ウエアレベリングの基本的な考え方は、外側に見せるアドレス層として、物理的なアドレスとは別に、論理的なアドレス層を設け、物理的なアドレスに割り当てる論理的なアドレスを適宜変更していく（例えば、頻繁にアクセスされる論理的なアドレスには、消去回数の少ないアドレスを割り当てる）ことによって、物理的なブロックの消去回数の偏りを削減しようというものである。また、物理的なアドレスが変更になっても、論理的なアドレスは変わらないので、外側からは、同一のアドレスでデータクセスが可能である。このため、使い勝手の良さも維持できる。
【０００５】
次に、格納容量削減技術について述べる。近年、ストレージシステムでは、格納容量を削減する技術が注目されている。その代表的な技術の１つが、容量の仮想化技術である。容量の仮想化技術とは、ストレージシステムがもっている物理的な容量より大きな仮想的な容量をホスト側に見せる技術である。これは、ユーザが定義した論理ボリュームであるユーザボリューム（ユーザからみた記憶装置）の容量に対し、実際に格納されるデータの量は、この定義容量（ユーザボリュームの容量）には、なかなか達しないという特性を利用したものである。すなわち、容量仮想化技術がない場合には、ボリューム定義時に、ストレージシステムの二次記憶装置群が提供する記憶空間（以下、物理空間）から定義容量が確保されるのに対し、容量仮想化技術が適用されている場合には、実際にデータが格納される場合に、容量が確保されることになる。これによって、格納容量（物理空間から確保される容量）を削減することができ、かつ、ユーザは、ユーザボリュームの容量を厳密に定義する必要なく、単純に大きく余裕をもった値を定義すればよいため、使い勝っても向上できる。この技術において、データが書き込まれたときに確保される物理的な記憶領域は、例えば「ページ」と呼ばれる。一般に、ページのサイズは、多様性にとんでいるが、本発明では、ページのサイズのほうが、フラッシュメモリの消去単位であるブロックのサイズより大きいものとする。一方、フラッシュメモリにおいては、一般的に、消去の単位は、前述したようにブロックと呼ぶのに対し、ブロックの中での読み書きの単位をページとよぶ。当然、フラッシュメモリにおいては、ブロックのサイズのほうが、ページのサイズより大きくなる。しかし、本発明では、「ページ」という言葉は、容量仮想化におけるページをさすこととし、フラッシュメモリでの読み書きの単位をささないこととする。ただし、本発明では、ストレージシステムには、上記の容量仮想化技術が適用されているものとする。
【０００６】
容量仮想化技術が適用されているストレージステムにおいては、ページ単位で、ページ内のデータを記憶装置（典型的にはＨＤＤ（Hard  Disk  Drive））の間で移動させ、性能向上を実現させる技術が、公開されている（例えば特許文献２）。さらに、価格性能比が異なる記憶装置に基づくページ間でデータを移動させ、価格性能比を向上させる技術も公開されている。
【０００７】
一方、複数のフラッシュメモリデバイスを、複数接続した、容量仮想化技術をもったストレージステムにおいて、それぞれの記憶装置の中で、フラッシュメモリの書き換え回数を均衡させ（ローカルウエアレベリング）、さらに、ページ間でデータを移動させることによって、フラッシュメモリデバイスを含む複数の記憶装置間で、書き換え回数を均衡させる（グローバルウエアレベリング）技術が公開されている（例えば特許文献３）。
【０００８】
一方、ディスクデバイスとフラッシュメモリデバイスを含むストレージシステムにおいて、フラッシュメモリデバイスの一部の領域を、ディスクデバイスに格納されたデータのキャッシュングメモリとして利用し、そのフラッシュメモリデバイス内の別の領域を、恒久的にデータを格納する領域として、利用する技術が公開されている（例えば特許文献４）。
【０００９】
また、ファイルレベルのファイルストレージシステムにおいて、ネットワークを経由した階層構成で、サーバに近いエッジ側のファイルトレージシステムで、コア側のファイルストレージシステムのデータをキャッシングする技術が公開されている（例えば特許文献５）。
【００１０】
また、広域のネットワークに接続されたそれぞれがストレージシステムをもつ複数のデータセンタにおいて、いくつかのデータセンタのストレージシステムが論理ボリュームの複製を持つ環境で、ユーザ端末の位置とアクセス先の論理ボリュームとを基に、ユーザがログインするデータセンタが決定され、アクセス先の論理ボリュームの複製をもつデータセンタのストレージシステムが、論理ボリュームとその複製間でデータをリモートコピーする技術も公開されている（例えば特許文献６）。
【００１１】
また、複数のストレージシステムが同一の仮想ストレージ識別子を有することで複数のストレージシステムを１つの仮想的なストレージシステムとして提供される技術も開示されている（例えば特許文献７）
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特許第３５０７１３２号公報
【特許文献２】特開２００５−３０１６２７号公報
【特許文献３】国際公開第２０１１/０１０３４４号パンフレット
【特許文献４】特開２００９−０４３０３０号公報
【特許文献５】特開２０１０−０９７３５９号公報
【特許文献６】特許第０４２０８５０６号公報
【特許文献７】特開２００８-０４０５７１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
第１の課題は、１つのストレージシステムにおいて、二次記憶装置（例えば、フラッシュメモリデバイス及びディスクデバイスのうちの少なくとも１つ）の一部に基づく領域を、キャッシュ領域として、効率的に利用することである。第２の課題は、複数のストレージシステムにおいて、他のストレージシステムに格納されたデータを格納するために、二次記憶装置（例えば、フラッシュメモリデバイス及びディスクデバイスのうちの少なくとも１つ）の一部に基づく領域を、キャッシュ領域として、効率的に利用することである。
【００１４】
まず、第１の課題について述べる。（１）まず、キャッシングの効果は、ヒット率（アクセスされるデータがキャッシュに存在する確率）が一定値以上ないと効果がないので、これをある値以上に保つ必要がある。（２）次に、二次記憶装置（例えば、フラッシュメモリデバイス及びディスクデバイスのうちの少なくとも１つ）の一部に基づく領域を、キャッシュ領域として用いる場合、キャッシュ領域とそれ以外の領域（例えば恒久的にデータを格納した領域）との負荷をうまく調整する必要がある。（３）さらに、フラッシュメモリデバイスに基づく領域をキャッシュ領域として用いる場合、キャッシュ領域の書き換え回数とそれ以外の領域（例えば恒久的なデータを格納した領域）の書き換え回数をバランスさせる必要がある。（４）また、一般的に、恒久的なデータを格納している記憶領域を有する記憶装置の性能に比較して、キャッシュ領域を有する記憶装置の性能は高いのが一般的である。したがって、ディスクデバイスに恒久的に格納されているデータをキャッシングするためのキャッシュ領域として、フラッシュメモリデバイスを用いるのは効果がある。また、ディスクデバイスとして、高速なディスクデバイス（アクセス速度が速いディスクデバイス）と低速なディスクデバイス（アクセス速度が低速なディスク）があり、低速ディスクデバイスに恒久的に格納されているデータをキャッシングするためのキャッシュ領域として高速ディスクデバイスを用いるのは一定の効果がある。
【００１５】
第２の課題について説明する。第２の課題は、第１の課題で説明した、（１）、（２）、（３）については、共通である。（４）が異なる。第２の課題では、他のストレージシステムの記憶装置に格納されているデータのキャッシングを行う。（５）一般的には、ホスト、あるいは、サーバは、データが恒久的に格納されているストレージシステムに対してリード要求又はライト要求を発行する。しかし、あるストレージステムでキャッシングするためには、このストレージシステムが、サーバからのリード要求／ライト要求を受け取れるようにする必要がある。（６）他のストレージシステムのデータをキャッシングする場合、データを恒久的に記憶しているストレージシステムから、キャッシングするストレージシステムに、データを転送することにかかった時間（キャッシュ転送時間）が、サーバにとって、リード要求を発行してから応答を受けるまでのレスポンス時間の短縮につながる。このため、このキャッシュ転送時間を考慮して、キャシングを行う必要がある。
【課題を解決するための手段】
【００１６】
第１の課題を解決するための手段を説明する。
【００１７】
上記（１）について、十分なヒット率を確保するために、ストレージシステムは、二次記憶装置に基づくキャッシュ領域に、容量仮想化機能で利用している、ページを割り当てる。一般的に、キャッシュメモリとしてＤＲＡＭが利用されており、ヒット率を上げるべくキャッシュメモリの容量を拡張しようとすると、ＤＲＡＭの物理的な増加が必要となり、簡単ではない。
【００１８】
一方で、恒久的にデータを格納する二次記憶装置に基づくページを論理ボリューム（仮想的な論理ボリューム）に割り当てる容量仮想化機能をストレージシステムがもっていると、データの書き込み先の論理領域（論理ボリュームにおける領域）にしかページが割り当てられない。このため、ストレージシステムには、比較的多くの空きページが存在することがある。
【００１９】
そこで、空きページが、キャッシュ領域として利用される。具体的には、例えば、容量仮想化機能で提供される論理ボリュームが、キャッシュ領域（ページ）が割り当てられるキャッシュボリュームとして使用される。キャッシュ容量（キャッシュボリュームの実際の容量）が拡張される都度に、キャッシュボリュームにページが割り当てられる。これにより、キャッシュ容量（キャッシュボリュームに割り当てられているキャッシュ領域（ページ）の総容量）を容易に増やすことができ、以って、ヒット率を向上することができる。
【００２０】
キャッシュ容量を増やしても、それ程ヒット率が改善しない場合、ストレージシステムは、キャッシュボリュームからページを解放することで、比較的容易に、キャッシュ容量を削減することができる。
【００２１】
上記（２）について、二次記憶装置（例えば、フラッシュメモリデバイス及びディスクデバイスのうちの少なくとも１つ）の一部に基づく領域を、キャッシュ領域として用いる場合、キャッシュ領域以外の領域（例えば、恒久的にデータを格納した領域）との負荷をうまく調整するために、ストレージシステムは、ページ間の負荷を監視し、記憶装置間の負荷をバランスさせる。ストレージシステムは、性能の異なる複数の記憶装置で構成される記憶階層構成を有する場合、記憶階層間でページ内のデータを移動するが、キャッシュ領域として利用されているページであるキャッシュページ内のデータの移動先を、恒久的にデータを格納する二次記憶装置より性能の良い二次記憶装置に基づくページのみに制約する。
【００２２】
一般に、ＤＲＡＭのようなキャッシュメモリにおける領域毎のキャッシュ管理情報があり、ストレージシステムは、領域からデータを移動した場合、その領域に対応するキャッシュ管理情報を書き換える必要がある。これは、オーバーヘッドが大きい。
【００２３】
そこで、キャッシュ管理情報は、キャッシュボリュームにおけるどの領域にページが割り当てられているかを表す。これによって、ストレージシステムは、ページ間でデータを移動させても、キャッシュ管理情報を書き換えるが必要ない。
【００２４】
上記（３）について、キャッシュ領域がフラッシュメモリデバイスに基づく領域の場合、フラッシュメモリデバイスは、ローカルにウエアレベリングを実行し、ストレージシステムは、異なるフラッシュメモリデバイス間でページ内のデータを移動させることで、複数のフラッシュメモリデバイス間で書き換え回数を均衡させる。
【００２５】
上記（４）について、ストレージシステムは、キャッシュ領域の基になる二次記憶装置として、恒久的にデータを格納している二次記憶装置より高速な二次記憶装置を選択する。
【００２６】
第２の課題を解決するための手段を説明する。
【００２７】
上記（５）ついて、複数のストレージシステムを１つの仮想的なストレージステムに見せ、さらに、リード要求又はライト要求を受けるために、個々のストレージシステムがもつポートについては、仮想的なストレージシステムがすべてもつようにする。ホスト（例えばサーバ）には、仮想的なストレージシステムのリード要求又はライト要求を受けるポートを変更する通知を行うことで、キャッシングを行うストレージシステムが、恒久的にデータを格納しているストレージシステムへのリード要求又はライト要求を受け取ることができる。
【００２８】
上記（６）について、まず、恒久的にデータを格納しているストレージシステム内のデータのキャッシングを行う場合、仮想的なストレージシステムを構成するどのストレージシステムのどの二次記憶装置に基づく領域に、キャッシングを行うかが決定される。これは、ホストから、キャッシングを行うことにより得られる効果を基に決定される。この効果とは、データが格納されているストレージシステムからそのデータのアクセス元のホストまで距離があるような場合、ホストに近いストレージシステムで、キャッシングを行うことで、ストレージシステムへデータを転送する時間を削減することができる。ストレージシステム間の距離が長い、或いは、遅延の大きいネットワークでストレーシステム同士が接続されている場合、キャッシングの効果が大きい。このため、データが恒久的に格納されている二次記憶装置と同等の性能の二次記憶装置にキャッシングしても、効果がある。場合によっては、恒久的にデータが格納されている二次記憶装置よりも性能が或る程度落ちる二次記憶装置にデータがキャッシングされても、効果が期待できる。このため、ストレージシステム間のデータ転送時間を考慮したキャッシングを行う必要がある。
【発明の効果】
【００２９】
二次記憶装置（例えば、フラッシュメモリデバイス及びディスクデバイスのうちの少なくとも１つ）の一部に基づく領域としてのキャッシュ領域にデータをキャッシングすることを、１つのストレージシステム内でも、異なるストレージシステム間でも、効率的に行うことができ、以って、高性能化を実現することができる。
【図面の簡単な説明】
【００３０】
【図１】図１は、実施例１における情報システムの構成を示す図である。
【図２】図２は、実施例１におけるストレージシステムの構成を示す図である。
【図３】図３は、実施例１におけるストレージシステムの共有メモリに格納された情報を示す図である。
【図４】図４は、実施例１における論理ボリューム情報の形式を示す図である。
【図５】図５は、実施例１におけるスケジュール情報の形式を示す図である。
【図６】図６は、実施例１における実ページ情報の形式を示す図である。
【図７】図７は、実施例１における仮想ページ、実ページ、仮想ブロック及び実ブロックの関係を表した図である。
【図８】図８は、実施例１における空き実ページ情報ポインタからポイントされた空き状態にある実ページ情報の集合を表した図である。
【図９】図９は、実施例１における記憶装置グループ情報の形式を示す図である。
【図１０】図１０は、実施例１における記憶装置情報の形式を示す図である。
【図１１】図１１は、実施例１におけるキャッシュ管理情報の形式を示す図である。
【図１２】図１２は、実施例１におけるLRUスロットキュー、LRUセグメントキューの構造を表した図である。
【図１３】図１３は、実施例１における、空きキャッシュ管理情報キュー、空きスロットキュー、空きセグメントキュー、無効セグメントキューの構成を表した図である。
【図１４】図１４は、実施例１におけるスロット管理情報の形式を表した図である。
【図１５】図１５は、実施例１におけるセグメント管理情報の形式を表した図である。
【図１６】図１６は、実施例１におけるヒット率情報の形式を表した図である。
【図１７】図１７は、実施例１におけるストレージコントローラのメモリ内に格納されたプログラムを示す図である。
【図１８】図１８は、実施例１におけるリード処理実行部の処理フローを示す図である。
【図１９】図１９は、実施例１におけるライト要求受付部の処理フローを示す図である。
【図２０】図２０は、実施例１におけるスロット確保部の処理フローを示す図である。
【図２１】図２１は、実施例１におけるセグメント確保部の処理フローを示す図である。
【図２２】図２２は、実施例１の別の情報システムの構成を表す図である。
【図２３】図２２は、実施例１におけるDRAMキャッシュの構成を表す図である。
【図２４】図２４は、実施例１における移動ページスケジュール部の処理フローを示す図である。
【図２５】図２５は、実施例１における実ページ移動処理実行部の処理フローを示す図である。
【図２６】図２６は、実施例１における記憶装置選択部の処理フローを表した図である。
【図２７】図２７は、実施例１におけるキャッシュ容量調整部の処理フローを表す図である。
【図２８】図２８は、実施例２における情報システムの構成を表した図である。
【図２９】図２９は、実施例２の別の情報システムの構成を表した図である。
【図３０】図３０は、実施例２におけるストレージシステムの共有メモリに格納された情報を示す図である。
【図３１】図３１は、実施例２における仮想ストレージシステム情報を示す図である。
【図３２】図３２は、実施例２における外部論理ボリューム情報を示す図である。
【図３３】図３３は、実施例２における論理ボリューム情報を示す図である。
【図３４】図３４は、実施例２におけるキャッシング判別処理部の処理フローを示す図である。
【図３５】図３５は、実施例２におけるリード処理実行部の処理フローを示す図である。
【図３６】図３６は、実施例２におけるライト要求受付部の処理フローを示す図である。
【図３７】図３７は、実施例２における記憶装置選択部の処理フローを表した図である。
【図３８】図３８は、実施例２におけるセグメント確保部の処理フローを示す図である。
【図３９】図３９は、実施例２におけるポート情報のフォーマットを示す図である。
【図４０】図４０は、実施例２におけるホスト情報のフォーマットを示す図である。
【図４１】図４１は、実施例２におけるストレージコントローラのメモリ内に格納されたプログラムを示す図である。
【図４２】図４２は、実施例２における遅延送信部の処理フローである。
【発明を実施するための形態】
【００３１】
以下、図面を参照して、幾つかの実施例を説明する。
【実施例１】
【００３２】
図１は、実施例１における情報システムの構成を示す。
【００３３】
情報システムは、ストレージシステム１００とホスト１１０とを有し、それらは、例えば、SAN（Storage  Area  Network）１２０のような通信ネットワークを介して接続される。ホスト１２０は、ユーザアプリケーションが動作するシステムで、ストレージステム１００との間で、SAN１２０経由で、必要なデータを読み書きする。SAN１２０では、SCSIコマンドが転送可能なプロトコル、例えば、Fibre Channel等のプロトコルが用いられる。
【００３４】
本実施例は、フラッシュメモリデバイスの一部とディスクデバイスの一部に基づく記憶領域をキャッシュ領域として用いるストレージシステム、そのストレージシステムの制御デバイス、および、制御方法に関する。実施例１では、ストレージシステムは、フラッシュメモリデバイスの一部とディスクデバイスの一部に基づく記憶領域を、恒久的に格納しているデータのキャッシュ領域として用いる。これによって、高性能化が達成される。キャッシュ領域として利用可能な記憶領域は、恒久的にデータが格納されている記憶領域の基になっている二次記憶装置より性能の高い二次記憶装置に基づく記憶領域である。キャッシングは、ヒット率（アクセスされるデータがキャッシュ領域に存在する確率）が一定値以上ないと効果がないので、ヒット率をある値以上に保つ必要がある。本実施例では、十分なヒット率を確保するために、データのキャッシングに関して、容量仮想化機能が利用される。具体的には、データがキャッシングされる領域として、論理ボリューム（典型的には、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇに従う仮想的な論理ボリューム）が用意され、その論理ボリューム（以下、キャッシュボリューム）に、キャッシュ領域としてのページが割り当てられる。
【００３５】
一般的に、キャッシュ領域としては、ＤＲＡＭのような揮発性のメモリが使用されるが、ヒット率を上げるためにキャッシュ領域の容量を拡張しようとすると、ＤＲＡＭを増加するといった物理的な増強が必要となり、それ程簡単ではない。一方で、恒久的にデータを格納する記憶装置の場合、容量仮想化機能があると、通常、データの書込み先の領域にのみページが割り当てられるので、ストレージシステムには、比較的多くの空きページが存在し得る。
【００３６】
本実施例では、空きページが、キャッシュ領域として利用される。このため、ヒット率の向上を目的としてキャッシュボリュームにページを動的にわりあてることで、キャッシュ容量を比較的容易に拡張することができる。一方で、キャッシュ容量を増やしても、それ程ヒット率が改善しない場合、キャッシュボリュームからページを解放することで、比較的容易にキャッシュ容量を削減することができる。
【００３７】
次に、フラッシュメモリデバイスの一部とディスクデバイスの一部に基づく記憶領域をキャッシュ領域として用いる場合、恒久的にデータを格納した記憶領域との負荷をうまく調整する必要がある。本実施例では、その負荷調整のために、ページ間の負荷を監視し、記憶装置間の負荷をバンランスさせる仕組みが利用される。この機構は、ストレージシステムが、性能の異なる複数の記憶装置で構成される記憶階層構成を有する場合、或る記憶階層のページから異なる記憶階層のページにデータを移動させるが、キャッシュ領域として利用されているページ内のデータの移動先を、恒久的にデータを記憶する二次記憶装置より性能のよい二次記憶装置に基づくページだけに制約する。１つの記憶階層には、同じ性能（実質的に同じアクセス性能）の１以上の二次記憶装置が属する。
【００３８】
一般に、ＤＲＡＭのようなキャッシュメモリにおける領域毎のキャッシュ管理情報があり、ストレージシステムは、領域からデータを移動した場合、その領域に対応するキャッシュ管理情報を書き換える必要がある。これは、オーバーヘッドが大きい。
【００３９】
そこで、キャッシュ管理情報は、キャッシュボリュームにおけるどの領域にページが割り当てられているかを表す。これによって、ストレージシステムは、ページ間でデータを移動させても、キャッシュ管理情報を書き換えるが必要ない。
【００４０】
さらに、フラッシュメモリデバイスに基づく領域をキャッシュ領域として用いる場合、キャッシュ領域の書き換え回数とそれ以外の領域（例えば恒久的なデータを格納した領域）の書き換え回数をバランスさせる必要がある。
【００４１】
そこで、キャッシュ領域がフラッシュメモリデバイスに基づく領域の場合、フラッシュメモリデバイスは、自デバイスにおいてローカルにウエアレベリングを実行し、ストレージシステムは、異なるフラッシュメモリデバイス間でページ内のデータを移動させる。これにより、複数のフラッシュメモリデバイス間で書き換え回数を均衡させる。さらに、ストレージシステムは、フラッシュメモリデバイス間でページ内のデータを移動させることで、複数のフラッシュメモリデバイスにおける空きブロックの数も均衡させることができる。
【００４２】
また、一般的に、恒久的なデータを格納している記憶領域を有する記憶装置の性能に比較して、キャッシュ領域を有する記憶装置の性能は高いのが一般的である。したがって、ディスクデバイスに恒久的に格納されているデータをキャッシングするためのキャッシュ領域として、フラッシュメモリデバイスを用いるのは効果がある。また、ディスクデバイスとして、高速なディスクデバイス（アクセス速度が速いディスクデバイス）と低速なディスクデバイス（アクセス速度が低速なディスク）があり、低速ディスクデバイスに恒久的に格納されているデータをキャッシングするためのキャッシュ領域として高速ディスクデバイスを用いるのは一定の効果がある。
【００４３】
そこで、本実施例では、ストレージシステムは、キャッシュ領域の基になる二次記憶装置として、恒久的にデータを格納している二次記憶装置より高速な二次記憶装置を選択する。
【００４４】
図２は、ストレージシステム１００の構成を示している。
【００４５】
ストレージシステム１００は、１つ以上のストレージコントローラ２００、キャッシュメモリ２１０、共有メモリ２２０、タイマ２４０、性能の異なる複数種類（例えば３種類）の二次記憶装置（例えば、１つ以上のフラッシュパッケージ２３０、１つ以上の高速ディスク（アクセス速度が速いディスクデバイス）２６５、１つ以上の低速ディスク（アクセス速度が遅いディスクデバイス）２９０）、及び、これらの構成要素を接続する１つ以上の接続部２５０を有する。タイマ２４０は、必ずしも実際の時刻を表す必要はなく、カウンタのようなものでもよい。高速ディスク２６５は、例えば、ＳＡＳ（Serial Attached SCSI（Small Computer System Interface））のＨＤＤ（Hard Disk Drive）で良い。低速ディスク２９０は、例えば、ＳＡＴＡ（Serial ATA（Advanced Technology Attachment））のＨＤＤで良い。
【００４６】
フラッシュパッケージ２３０が有するフラッシュメモリとして、いくつかの種類がある。例えば、フラッシュメモリとして、高価格、高性能、消去可能回数の多いＳＬＣ（Single Level Cell）と、低価格、低性能、消去可能回数の少ないＭＬＣ（Multiple Level Cell）がある。ただし、いずれも、ディスクデバイスよりも高いアクセス速度が期待できる。本発明は、ＳＬＣ及びＭＬＣのいずれでも有効である。また、将来は、相変化メモリなどの新しい不揮発性のメモリが登場してくる可能性がある。二次記憶装置として、そのような不揮発記憶媒体を含んだ記憶装置が用いられても、本発明は有効である。以下、フラッシュパッケージ２３０、高速ディスク２６５及び低速ディスク２９０を区別しない場合には、「記憶装置」（或いは二次記憶装置）と呼ぶ。
【００４７】
また、本実施例においては、ストレージシステムが、フラッシュパッケージ２３０、高速ディスク２６５及び低速ディスク２９０の少なくとも１つに代えて又は加えて、さらに性能（例えばアクセス速度）の異なる記憶装置を含んでいても、本発明は有効である。また、本実施例におけるフラッシュパッケージ２３０、高速ディスク２６５、低速ディスク２９０の容量は、同一性能の記憶装置について、すべて等しいものとする。ただし、本発明は、同一性能の複数の記憶装置に容量の異なる記憶装置が混在していても、有効である。
【００４８】
ストレージコントローラ２００は、プログラムや情報を保管するメモリ２７０と、ストレージコントローラ２００に入出力されるデータが一時的に保管されるバッファ２７５と、それらに接続されており、ホスト１２０から発行されたリード要求及びライト要求を処理するプロセッサ２６０とを有する。バッファ２７５は、例えば、（１）後述する冗長データを生成する際、生成に必要な情報、及び、生成した冗長データを格納するための領域、及び、（２）記憶装置に基づくキャッシュ領域に格納されたデータを、恒久的にデータを格納する記憶装置に書き込む際の一時的な格納領域、として使用される。
【００４９】
接続部２５０は、ストレージシステム１００内の各構成要素を接続する機構である。また、本実施例では、高信頼化のために、１つのフラッシュパッケージ２３０、高速ディスク２６５、低速ディスク２９０は、複数の接続機構２５０で、複数のストレージコントローラ２００に接続されているものとする。ただし、１つのフラッシュパッケージ２３０、高速ディスク２６５、低速ディスク２９０が１つの接続部２５０にしか接続されていない場合も本発明は有効である。
【００５０】
キャッシュメモリ２１０及び共有メモリ２２０のうちの少なくとも１つは、ＤＲＡＭのような揮発メモリで構成されるが、バッテリーなどにより不揮発化されていて良い。また、高信頼化のため、それぞれが２重化されていてもよい。ただ、本発明は、キャッシュメモリ２１０、共有メモリ２２０が不揮発化されていなくても有効である。キャッシュメモリ２１０には、フラッシュパッケージ２３０、高速ディスク２６５、低速ディスク２９０に格納されたデータの中で、ストレージコントローラ２００からよくアクセスされるデータが格納されて良い。ストレージコントローラ２００は、ホスト１２０からライト要求を受けた場合、ライト対象のデータを、キャッシュメモリ２１０に書き込んで、該当するライト要求を完了させて良い（ライトの完了をホスト１２０に通知して良い）。ただし、本発明は、ライト対象のデータを記憶装置（フラッシュパッケージ２３０、高速ディスク２６５又は低速ディスク２９０）に格納した段階でライト要求を完了させる方式でも有効である。本実施例の１つの特徴は、高速ディスク２６５（又は低速ディスク２９０）に格納に格納されたデータのキャッシュ領域として、フラッシュパッケージ２３０（又は高速ディスク２６５）の一部に基づく記憶領域を利用することである。共有メモリ２２０は、キャッシュメモリ２１０の制御情報、ストレージシステム１００内の管理情報、ストレージコントローラ２００間の連絡情報、及び同期情報などを記憶する。また、本実施例では、共有メモリ２２０は、キャッシュ領域の基になるフラッシュパッケージ２３０、高速ディスク２６５の管理情報も、記憶する。なお、これらの管理情報が、フラッシュパッケージ２３０、高速ディスク２６０に格納されも、本発明は有効である。
【００５１】
図２３は、キャッシュメモリ２１０の構成を表している。
【００５２】
キャッシュメモリ２１０は、固定長のスロット２１１００に分割されている。スロット２１１００が、データの記憶単位となる。なお、本実施例では、フラッシュパッケージ２３０、高速ディスク２６５及び低速ディスク２９０は、ストレージコントローラ２００からは、それぞれ、１台の記憶装置に見えているものとする。したがって、ストレージコントローラ２００が、高信頼化のために、１台の記憶装置が故障してもその記憶装置のデータを回復できるRAID（Redundant Array of Independent (or Inexpensive) Disks）機能をもっているものとする。RAID機能もった場合、複数の同一種類の記憶装置が、１つのRAID構成をとる。これを、本実施例において記憶装置グループと呼ぶ。すなわち、複数のフラッシュパッケージ２３０、複数の高速ディスク２６５、複数の低速ディスク２９０は、それぞれ、ＲＡＩＤ構成をとり、それぞれを、フラッシュパッケージグループ２８０、高速ディスクグループ２８５、低速ディスクグループ２９５と呼ぶことができる。なお、これらを総称して、記憶装置グループと呼ぶことができる。ただ、そのようなRAID機能を、ストレージコントローラ２００が、もっていなくとも、本発明は有効である。
【００５３】
図３は、共有メモリ２２０に格納された情報を示す。
【００５４】
共有メモリ２２０は、ストレージシステム情報２０５０、論理ボリューム情報２０００、実ページ情報２１００、空きページ管理情報ポインタ２２００、記憶装置グループ情報２３００、記憶装置情報２５００、仮想ページ容量２６００、スケジュール情報２７００、空きキャッシュ管理情報ポインタ２６５０、キャッシュ管理情報２７５０、スロット管理情報２７６０、ＬＲＵスロット前方ポインタ２７７０、ＬＲＵスロット後方ポインタ２７８０、空きスロットポインタ２８００、空きスロット数２８２０、セグメント管理情報２８５０、ＬＲＵセグメント前方ポインタ２８７０、ＬＲＵセグメント後方ポインタ２８８０、空きセグメントポインタ２９１０、空きセグメント数２９２０、無効スロットポインタ２９５０、及び、ヒット率情報２９８０を記憶する。この中で、ストレージシステム情報２０５０は、ストレージシステム１００に関する情報で、実施例１では、ストレージシステム識別子を含む。ストレージシステム識別子は、当該ストレージシステム１００の識別子である。
【００５５】
前述したように、ストレージステム１００は、容量仮想化機能を有する。通常、容量仮想化機能において、記憶領域の割り当て単位は、ページと呼ばれる。また、論理ボリュームは、通常、ホスト１１０が読み書きをする論理的な記憶装置である。ただし、本発明では、キャッシングのために使用する記憶装置に基づく領域（ページ）の割当先が、論理ボリューム（キャッシュボリューム）として定義される。そして、そのキャッシュボリュームに、容量仮想化機能に従いページを割り当てることで、キャッシュ容量（実容量）が増える。なお、本実施例では、論理ボリューム（キャッシュボリューム）の空間は、仮想ページという単位で、分割されているものとし、実際の記憶装置グループは、実ページという単位で分割されているものとする。容量仮想化機能は、一般に、論理ボリュームの記憶容量を、実ページ総数の容量よりも大きく見せることができる。一般に、１つの仮想ページに対して１つの実ページが割り当てられる。このため、仮想ページの数のほうが、実ページの数より大きいのが、一般的である。ストレージコントローラ２００は、ホスト１２０からのライト要求で指定されたライト先アドレスが属する仮想ページに実ページが割り当てられていないとき、その仮想ページに実ページを割り当てる。
【００５６】
仮想ページ容量２６００は、仮想ページの容量である。しかし、本実施例では、仮想ページ容量２６００と実ページの容量は等しいというわけではない。というのは、実ページの容量は、RAIDのタイプにより異なってくる冗長データを含むためである。したがって、実ページの容量は、その実ページが割り当てられた記憶装置グループのRAIDタイプにより決まる。たとえば、RAID１のようにデータを２重に書き込む場合、実ページの容量は、仮想ページ容量２６００の２倍になる。RAID５のように、N台の記憶装置の容量に対し、１台分の記憶装置の容量の冗長データを格納する場合、仮想ページ容量２６００の(N+１)/Nの容量が確保される。当然、RAID０のように、冗長性がない場合、仮想ページ容量２６００と等しい容量が実ページの容量ということになる。なお、本実施例においては、仮想ページ容量２６００はストレージシステム１００の中で共通であるが、ストレージシステム１００に仮想ページ容量２６００に異なったものがあっても、本発明は有効である。なお、本実施例では、それぞれの記憶装置グループは、RAID５で構成されているものとする。もちろん、本発明は、記憶装置グループが任意のRAIDグループで構成されていても有効である。
【００５７】
図４は、論理ボリューム情報２０００の形式を示したものである。
【００５８】
論理ボリュームは、ホスト１２０からデータがライト又はリードされる論理的な記憶装置である。一般的に、論理ボリュームの識別子は、ストレージシステム１００内でユニークな情報である。また、ホスト１１０から発行されるリード要求又はライト要求は、論理ボリュームのID（例えばLUN（Logical Unit Number）)、論理ボリューム内のアドレス、リード対象又はライト対象のデータの長さを含む。
【００５９】
論理ボリューム情報２０００は、論理ボリュームごとに存在する情報である。この情報２０００は、論理ボリューム識別子２００１、論理容量２００２、論理ボリュームRAIDタイプ２００３、初期割り当て記憶装置２０１０、論理ボリュームタイプ２００５、割り当て範囲２００６、キャシングフラグ２００９、実ページポインタ２００４、使用セグメント数２００７、及び、ページ返却フラグ２００８を含む。
【００６０】
論理ボリューム識別子２００１は、対応する論理ボリュームのIDを示す。
【００６１】
論理容量２００２は、この論理ボリュームの容量を表す。
【００６２】
論理ボリュームタイプ２００５は、論理ボリュームのタイプを表す。本実施例では、当該論理ボリュームが、ホスト１１０が読み書きする論理ボリュームか、キャッシュ領域のために使用されるキャッシュボリュームのどちらかを示す。
【００６３】
論理ボリュームRAIDタイプ２００３は、該当する論理ボリュームのRAIDタイプ、RAID０、RAID１などを指定する。RAID５のように、N台の容量に対し、１台の容量の冗長データを格納する場合、Nの具体的数値を指定するものとする。ただし、任意のRAIDタイプが指定できるわけでなく、少なくとも１つ記憶装置グループがもつRAIDタイプである必要がある。
【００６４】
割り当て範囲２００６は、当該論理ボリュームに割り当てる記憶装置の範囲（例えば、どの記憶装置に基づくページを当該論理ボリュームに割り当てられるかを表す情報）を示している。一般に、キャッシングのために使用される領域（キャッシュボリューム）は、データを格納する領域（ホストが読み書きする論理ボリューム）より、よい性能の記憶装置に基づく領域であるべきである。したがって、キャッシュボリュームは、フラッシュパッケージグループ２８０に基づく実ページが固定的に割り当てられても良いし、フラッシュパッケージグループ２８０と高速ディスクグループ２８５のどちらかに基づく実ページが固定的に割り当てられても良いし、高速ディスクグループ２８５に基づく実ページが固定的に割り当てられても良い。ただし、本発明は、キャッシュボリュームに、低速ディスクグループ２９５に基づく実ページが割り当られても有効である。以下の実施例では、キャッシュボリュームには、フラッシュパッケージ２３０に基づく実ページが固定的に割り当てられるものとする。もちろん、キャッシュボリュームに、フラッシュパッケージグループ２８０と高速ディスクグループ２８５のどちらかに基づく実ページが固定的に割り当てられても、高速ディスクグループ２８５に基づく実ページが固定的に割り当てられても、本発明は有効である。一方、ホスト１１０から読み書きされるデータを格納する論理ボリューム（以下、ホストボリューム）の割り当て範囲２００６も、制限されてよい。本実施例では、フラッシュパッケージグループ２８０に基づく複数の実ページのうちキャッシュボリュームに割り当てられる実ページはホストボリュームには割り当てないように割り当て範囲２００６が設定されているものとする。
【００６５】
実ページポインタ２００４は、当該論理ボリュームの仮想ページに割り当てられた実ページの実ページ情報２１００へのポインタである。実ページポインタ２００４の数は、当該論理ボリュームの仮想ページの数（論理ボリューム容量２００２を仮想ページ容量２６００で割った数になるが、余りがでれば＋１）である。最初の実ページポインタ２００４に対応する実ページが、論理ボリュームの先頭の仮想ページに割り当てられた実ページで、以降、次の実ページポインタ２００４には、次の仮想ページに割り当てる実ページに対応するポインタが格納される。また、容量仮想化機能によれば、実ページが割り当てられるのは、論理ボリュームを定義した契機ではなく、該当する仮想ページにデータ書き込みが行われる契機である。したがって、まだ書き込みが行われていない仮想ページの場合、対応する実ページポインタ２００４はヌルになっている。キャッシュボリュームを構成する各仮想ページは、キャッシュの割り当て単位であるセグメントに分割される。セグメントのサイズは、スロットのサイズと同じである。仮想ページのセグメント数は、仮想ページの容量を、セグメントの容量で割った数となる。使用セグメント数２００７、ページ返却フラグ２００８も仮想ページ対応の情報であるが、これらの情報が用いられるのは、当該論理ボリュームがキャッシュボリュームとして用いられているときである。使用セグメント数２００７は、当該仮想ページに含まれるセグメントの中で、データを格納しているセグメントの数である。ページ返却フラグ２００８は、仮想ページ単位に、存在する。有効なのは、対応する仮想ページが、キャッシュボリューム内の仮想ページである場合のみである。ページ返却フラグ２００８は、キャッシュ容量を削減しても、十分なヒット率が得られると判断したとき、当該仮想ページへの実ページの割り当てを終了したいときＯＮにする。ただし、使用セグメント数２００７が０でなければ、対応する実ページには、データが格納されているので、直ちに、当該実ページの解放はできない。本実施例では、ページ返却フラグ２００８をオンにした直後、ストレージコントローラ２００は、そのフラグ２００８に対応する仮想ページで使用しているセグメントを別仮想ページに移して（すなわち、そのフラグ２００８に対応する仮想ページに割り当てられている実ページ内のデータを別の実ページに移し、かつ、その別の実ページを別の仮想ページに割り当て）、当該仮想ページを解放してもよい。ただし、本実施例では、ストレージコントローラ２００は、
新たに、本仮想ページに含まれるセグメントを割り当てることはやめ、それまで割り当てていたセグメントが解放されるのを待ち、当該仮想ページの解放を行うようにする。
【００６６】
キャシングフラグ２００９は、当該論理ボリュームのデータを記憶装置（キャッシュボリューム）にキャッシングするかを示す。
【００６７】
初期割り当て記憶装置２０１０は、記憶装置へのキャッシングを行う際、フラッシュパッケージ２３０、高速ディスク２６５及び低速ディスク２９０のどの記憶装置にキャッシングするかを示す。後述するように、実施例１は、キャッシングを行う際には、フラッシュパッケージ２３０に行うとするので、初期割り当て記憶装置２０１０は、フラッシュパッケージ２３０を示していることになる。
【００６８】
図５は、スケジュール情報２７００の形式である。
【００６９】
本実施例では、ストレージコントローラ２００は、記憶装置グループの利用率（さらに、フラッシュパッケージグループ２８０の場合、空き容量や平均余命）などを計算し、算出された値が、その値と比較される基準値を満たさない場合、実ページ間でデータを移動し、移動元の実ページの割当て先の仮想ページに、移動元の実ページに代えて移動先の仮想ページを割り当てる。本実施例では、この処理を開始するのは、特定のスケジュール時間とする。ただし、任意の時間に実ページの割り当てが変更されても（実ページ間でデータが移動されても）も本発明は有効である。
【００７０】
スケジュール情報２７００は、前回スケジュール時刻２７０１と次回スケジュール２７０２とを含む。前回スケジュール時刻２７０１は、実ページ間データ移動が直近に実行されたスケジュール時刻（過去）であり、次回スケジュール時刻２７０２は、次回に実ページ間データ移動を変更するスケジュールする時刻（将来）である。ここで言う実ページ間データ移動とは、例えば、仮想ページ毎に、次の（１）乃至（３）を行うこと、
（１）仮想ページ（言い換えれば、仮想ページに割り当てられた実ページ）のアクセス状況（例えば、アクセス頻度或いは最終アクセス時刻）が、その仮想ページに割り当てられている実ページを含んだ記憶階層に対応したアクセス状況許容範囲に属しているか否かを判断すること、
（２）その（１）の判断結果が否定的の場合に、その仮想ページに割り当てられている実ページ内のデータを、その仮想ページのアクセス状況が属するアクセス状況許容範囲に対応した記憶階層内の未割当ての実ページに移動すること、
（３）その仮想ページに、移動元実ページに代えて移動先実ページを割り当てること、
を含んで良い。
【００７１】
図６は、実ページ情報２１００の形式である。
【００７２】
実ページ情報２１００は、実ページごとに存在する、該当する実ページの管理情報である。実ページ情報２１００は、記憶装置グループ２１０１、実ページアドレス２１０２、空きページポインタ２１０３、実ブロック割り当て数２１０４、追加実ブロック割り当て数２１０５、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７、追加実ブロック割り当て時間２１０８、移動中フラグ２１０９、移動先実ページ情報２１１０、移動待ちフラグ２１１１、累積ページ動作時間２１１３、累積ページＲ／Ｗ回数２１１４、追加ページ動作時間２１１５、及び追加ページＲ／Ｗ回数２１１６を含む。なお、実ブロック割り当て数２１０４、追加実ブロック割り当て数２１０５、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７、追加実ブロック割り当て時間２１０８は、当該実ページが、フラッシュパッケージグループ２８０に定義された実ページの場合、有効になる情報（有効な値が設定される情報）である。
【００７３】
記憶装置グループ２１０１は、該当する実ページが、どの記憶装置グループの基になっている実ページを示す。実ページアドレス２１０２は、当該実ページの基になっている記憶装置グループの中で、当該実ページが、どの相対的なアドレスに属する実ページかを示す情報である。空きページポインタ２１０３は、この実ページが仮想ページに割り当てられていない場合、有効な値となる。この場合、その値は、対応する記憶装置グループの中で、仮想ページが割り当てられていない次の実ページに対応する空きページ情報２１００をさす。仮想ページが割り当てられている場合、空きページポインタ２１０３は、ヌル値となる。実ブロック割り当て数２１０４、追加実ブロック割り当て数２１０５は、当該記憶装置グループを構成する記憶装置の数だけ存在する。
【００７４】
本実施例においては、それぞれのフラッシュパッケージ２３０は、容量仮想化機能をもっており、ストレージコントローラ２００には、見かけ上、実際の物理容量より大きな容量を提供している。フラッシュパッケージ２３０の容量仮想化の単位は、本実施例では、フラッシュメモリの消去単位であるブロックとする。以下、ストレージコントローラ２００から見たブロックを仮想ブロックと呼び、仮想ブロックに割り当てられ得るブロックを実ブロックと呼ぶ。したがって、本実施例では、実ページは、仮想ブロックにより構成されることになる。また、本実施例では、仮想ブロックにより構成される容量空間のほうが、実ブロックにより構成される容量空間より大きいことになる。図７は、仮想ページ、実ページ、仮想ブロック、実ブロックの関係を示したものである。すでに述べたように、実ページには、仮想ページにはない、冗長データが含まれている。一方、仮想ブロック、実ブロックに含まれるデータは同じである。また、本実施例では、フラッシュパッケージ２３０は、実ブロック数より多くの仮想ブロックをもっているように、ストレージコントローラ２００に見せていることになる。ただし、本実施例では、ストレージコントローラ２００は、実際にフラッシュパッケージ２３０がいくつの実ブロックをもっているかを意識して、実ページの再配置を行う。本実施例では、フラッシュパッケージ２３０が、まだ実ブロックを割り当てていない仮想ブロックに、ライト要求を受け付けたとき、実ブロックを割り当てる。新たに、実ブロックを割り当てた場合、フラッシュパッケージ２３０は、その旨を、ストレージコントローラ２００に通知する。実ブロック割り当て数２１０４は、当該実ページに実際に割り当てられている実ブロックの数の中で前回スケジュール時刻２７０１以前に割り当てられた実ブロックの数である。また、追加実ブロック数２１０５は、当該実ページに実際に割り当てられている実ブロックの数の中で前回スケジュール時刻２７０１以降に割り当てられた実ブロックの数である。
【００７５】
累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７、追加実ブロック割り当て時間２１０８も、それぞれ、当該実ページの基になっているフラッシュパッケージグループ２８０を構成するフラッシュパッケージ２３０の数だけ存在する。ただし、これらの情報は、この実ページに含まれる仮想ブロックの属性情報ではなく、この実ページ内のデータに関する属性情報である。したがって、この仮想ページが別の実ページに割り当てられ、現在の実ページからその別の実ページにデータが移動された場合、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７、追加実ブロック割り当て時間２１０８の情報も、移動元実ページの実ページ情報２１００から移動先実ページの実ページ情報２１００にコピーされる必要がある。
【００７６】
累積実ブロック割り当て時間２１０６は、この実ページに対応しているそれぞれの仮想ブロックに実ブロックが割り当てられた契機（この割り当て契機は、現在の実ページでではなく、過去の実ページで起こった可能性もある。）から、前回スケジュール時刻２７０１までの経過時間を、すべての仮想ブロックに関して合計したものである。累積実ブロック消去回数２１０７は、この実ページに対応しているそれぞれの仮想ブロックに実ブロックが割り当てられた契機からの、仮想ブロックが割り当てられていた実ブロックの消去回数を、すべての仮想ブロックに関して合計したものである。追加実ブロック割り当て時間２１０８は、前回スケジュール時刻２７０１以降に仮想ブロックに割り当てた実ブロックの割り当て時間である。当該実ページに実ブロックが新たに１つ割り当てられると、追加実ブロック割り当て時間２１０８には、次回スケジュール時刻２７０２から割り当てを行った時刻を引いた値が加算される。この値を加算する理由については、後で説明する。
【００７７】
移動中フラグ２１０９、移動先実ページ情報２１１０、移動待ちフラグ２１１１は、当該実ページのデータを別の実ページに移動するときに使用される情報である。移動中フラグ２１０９は、この実ページのデータを別実ページに移動中のときにONになるフラグである。移動先実ページ情報２１１０は、この実ページのデータを移動している移動先の実ページのアドレス情報である。移動待ちフラグ２１１１は、当該実ブロックを移動すると決定したときに、ONになるフラグである。
【００７８】
累積ページ動作時間２１１３、累積ページＲ／Ｗ回数２１１４、追加ページ動作時間２１１５、追加ページＲ／Ｗ回数２１１６は、対応する実ページの動作に関する情報である。Ｒ／Ｗは、リード／ライト（リード及びライト）の略である。累積ページ動作時間２１１３、累積ページＲ／Ｗ回数２１１４は、これまで、この実ページがＲ／Ｗを行っていた時間の累積時間と累積Ｒ／Ｗ回数を示す。対応する実ページの、追加ページ動作時間２１１５、追加ページＲ／Ｗ回数２１１６は、前回スケジュール時刻２７０１以降の、この実ページがＲ／Ｗを行っていた時間の合計時間とＲ／Ｗ回数を示す。これらの実ページに関する情報で、ストレージコントローラ２００は、当該実ページの混雑度を評価し、必要があれば、対応する実ページ内のデータを、同一の種類の記憶装置グループに基づく他の実ページに移動したり、割り当て範囲２００６の範囲内で、他の種類の記憶装置グループに基づく実ページに移動したり（例えば、フラッシュパッケージ２３０から高速ディスク２６５へのデータ移動）する。
【００７９】
図８は、空きページ管理情報ポインタ２２００によって管理される空き実ページの集合を表している。
【００８０】
空きページ管理情報ポインタ２２００は、記憶装置グループごとに設けられる情報である。空きページ（空き実ページ）とは、仮想ページに割り当てられていない実ページを意味する。また、空き実ページに対応した実ページ情報２１００を空き実ページ情報２１００と呼ぶことがある。空き実ページ管理情報ポインタ２２００は、先頭の空き実ページ情報２１００のアドレスをさす。次に、先頭の実ページ情報２１００の中の空きページポインタ２１０３が、次の空き実ページ情報２１００を指す。図８では、最後の空き実ページ情報２１００の空き実ページポインタ２１０３は、空きページ管理情報ポインタ２２００を示しているが、ヌル値でもよい。ストレージコントローラ２００は、実ページが割り当てられていない仮想ページをライト先としたライト要求を受け付けると、論理ボリュームRAIDタイプ２００３と割り当て範囲２００６に該当する、記憶装置グループのいずれか、例えば、該当する記憶装置グループの中の空き実ページ数の最も多い記憶装置グループに対応する空きページ管理情報ポインタ２２００から、空き実ページを探し、見つかった空き実ページを仮想ページに割り当てる。
【００８１】
図９は、記憶装置グループ情報２３００の形式を示す。
【００８２】
記憶装置グループ情報２３００は、記憶装置グループID２３０１、記憶装置グループRAIDタイプ２３０２、実ページ数２３０３、空き実ページ数２３０４、及び記憶装置ポインタ２３０５を含む。
【００８３】
記憶装置グループID２３０１は、当該記憶装置グループの識別子である。記憶装置グループRAIDタイプ２３０２は、当該記憶装置グループのRAIDタイプである。本実施例におけるRAIDタイプは、論理ボリュームRAIDタイプ２００３を説明したときに述べたとおりである。実ページ数２３０３、空き実ページ数２３０４は、それぞれ、フラッシュパッケージグループ２８０の、全体の実ページ数、空き実ページの数を示す。記憶装置ポインタ２３０５は、当該記憶装置グループ２８０に属する記憶装置２３０の記憶装置情報２５００へのポインタである。記憶装置ポインタ２３０５の数は、当該記憶装置グループ２８０に属する記憶装置の数であるが、これは、記憶装置グループRAIDタイプ２３０２によって決まる値である。
【００８４】
図１０は、記憶装置情報２５００の形式である。
【００８５】
記憶装置情報２５００は、記憶装置ID２５０１、記憶装置タイプ２５１０、記憶装置仮想容量２５０２、ブロック容量２５０３、記憶装置内実ブロック割り当て数２５０５、記憶装置内追加実ブロック割り当て数２５０６、記憶装置内累積実ブロック割り当て時間２５０７、記憶装置内累積実ブロック消去回数２５０８、記憶装置内追加実ブロック割り当て時間２５０９、記憶装置累積動作時間２５１１、記憶装置累積ページＲ／Ｗ回数２５１２、記憶装置追加ページ動作時間２５１３、及び記憶装置追加ページＲ／Ｗ回数２５１４を含む。
【００８６】
記憶装置仮想容量２５０２、ブロック容量２５０３、記憶装置内実ブロック割り当て数２５０５、記憶装置内追加実ブロック割り当て数２５０６、記憶装置内累積実ブロック割り当て時間２５０７、記憶装置内累積実ブロック消去回数２５０８、記憶装置内追加実ブロック割り当て時間２５０９は、記憶装置がフラッシュパッケージ２３０のときに、有効な情報である。記憶装置累積動作時間２５１１、記憶装置累積ページＲ／Ｗ回数２５１２は、該当する記憶装置の動作時間、Ｒ／Ｗ回数の累積値である。一方、記憶装置追加ページ動作時間２５１３、記憶装置追加ページＲ／Ｗ回数２５１４は、該当する記憶装置の、前回スケジュール時刻以降の、記憶装置の動作時間、Ｒ／Ｗ回数の合計値である。
【００８７】
記憶装置ID２５０１は、当該記憶装置の識別子である。記憶装置タイプ２５１０は、当該記憶装置のタイプ、例えば、フラッシュパッケージ２３０、高速ディスク２６５、低速ディスク２９０のいずかを示す。記憶装置仮想容量２５０２は、当該記憶装置の仮想的な容量である。ブロック容量２５０３は、仮想ブロック、実ブロックに含まれるデータの容量である（仮想ブロックに格納されるデータが実際に実ブロックに格納される）。したがって、記憶装置仮想容量２５０２をブロック容量２５０３で割った値が、この記憶容量の仮想ブロック数となる。記憶装置内実ブロック割り当て数２５０５、記憶装置内追加実ブロック割り当て数２５０６、記憶装置内累積実ブロック割り当て時間２５０７、記憶装置内累積実ブロック消去回数２５０８、記憶装置内追加実ブロック割り当て時間２５０９は、対応する記憶装置グループ２８０に基づくすべての実ページ情報２１００に対応する当該記憶装置に関するページ情報２１００の中の実ブロック割り当て数２１０４、追加実ブロック割り当て数２１０５、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７、追加実ブロック割り当て時間２１０８が、それぞれ合計されたものである。
【００８８】
キャッシュ管理情報２７５０は、スロット２１１００（又はセグメント）に格納されたデータの管理情報で、スロット２１１００（又はセグメント）対応に存在する。
【００８９】
図１１は、キャッシュ管理情報２７５０のフォーマットを示している。
【００９０】
キャッシュ管理情報２７５０は、前方ポインタ２７５１、後方ポインタ２７５２、パリティ生成後領域ポインタ２７５３、パリティ生成前領域ポインタ２７５４、ダーティビットマップ２７５５、パリティ生成前ダーティビットマップ２７５６及びキャッシュアドレス２７５７を含む。
【００９１】
前方ポインタ２７５１は、図１２に示すＬＲＵスロットキュー１２００、ＬＲＵセグメントキュー１２１０の前方のキャッシュ管理情報２７５０を示す。後方ポインタ２７５２は、ＬＲＵスロットキュー１２００、ＬＲＵセグメントキュー１２１０の後方のキャッシュ管理情報２７５０を示す。パリティ生成後領域ポインタ２７５３は、クリーンデータ（二次記憶装置に格納されたデータ）を格納したスロット２１１００（又はセグメント）へのポインタを示す。パリティ生成前領域ポインタ２７５４は、パリティを生成していないダーティデータを格納したスロット２１１００（又はセグメント）へのポインタを示す。パリティ生成前ダーティビットマップ２７５６は、パリティ生成前領域ポインタ２７５４がポイントするスロット２１１００（又はセグメント）の中のダーティデータを示す。キャッシュドアドレス２７５７は、当該キャッシュ管理情報２７５０に対応したスロット２１１００（又はセグメント）に格納したデータの論理ボリュームとその相対アドレスを示す。
【００９２】
図１２は、ＬＲＵスロットキュー１２００、ＬＲＵセグメントキュー１２１０を表している。
【００９３】
ＬＲＵスロットキュー１２００は、スロットにデータが格納されたキャッシュ管理情報２７５０をＬＲＵ順に管理している。ＬＲＵスロット前方ポインタ２７７０は、最近アクセスされたキャッシュ管理情報２７５０を示している。ＬＲＵスロット後方ポインタ２７８０は、最も以前にアクセスされたキャッシュ管理情報２７５０を示している。本実施例では、空きスロット２１１００が少なくなってくると、ＬＲＵスロット後方ポインタ２７８０が示したキャッシュ管理情報２７５０に対応したデータが、セグメントに移される。ＬＲＵセグメントキュー１２１０は、セグメントにデータが格納されたキャッシュ管理情報をＬＲＵ順に管理している。ＬＲＵ前方セグメントポインタ２８７０は、スロット２１１００に格納されたデータをセグメントに移した際に、該当するキャッシュ管理情報２７５０をポイントするようにする。ＬＲＵ後方セグメントポインタ２８８０は、セグメントの中で最も以前にアクセスされたキャッシュ管理情報２７５０をポイントしている。
【００９４】
図１３は、空きキャッシュ管理情報キュー１３００、空きスロットキュー１３１０、空きセグメントキュー１３２０、無効セグメントキュー１３３０を表している。
【００９５】
空きキャッシュ管理情報キュー１３００は、空いた状態のスロット２１１００（又はセグメント）に対応したキャッシュ管理情報２７５０のキューである。空きキャッシュ管理情報ポインタ２６５０は、空きキャッシュ管理情報キュー１３００の中の先頭のキャッシュ管理情報２７５０を示している。
【００９６】
空きスロットキュー１３１０は、空いた状態のスロット２１１００に対応したスロット管理情報２７６０のキューである。空きスロットポインタ２８００は、空きスロットキュー１３１０キューの中の先頭のスロット管理情報２７６０を示す。空きスロット数２８２０は、空いた状態のスロット管理情報２７６０の数である。
【００９７】
空きセグメントキュー１３２０は、空いた状態のセグメントに対応したセグメント管理情報２８５０のキューである。なお、空きセグメントキューは、記憶装置の種類ごとに設けられる。記憶装置の種類は、例えば、記憶装置のアクセス性能によって異なる。例えば、フラッシュパッケージ２３０、高速ディスク２６５、低速ディスク２９０の３種類にそれぞれ対応した３つの空きセグメントキューが設けられて良い。ただし、本実施例では、キャッシングがされるのは、フラッシュパッケージ２３０なので、フラッシュパッケージ２３０対応の情報が有効で良い。ただし、高速ディスク２６５がキャッシング用に用いられる場合、高速ディスク２６５に対応した空きセグメントキュー１３２０が設けられることになる。空きセグメントポインタ２９１０は、空きセグメントキュー１３２０の中の先頭のセグメント管理情報２８５０へのポインタである。空きセグメント数２９２０は、空いた状態のセグメント管理情報２８５０の数である。
【００９８】
無効セグメントキュー１３３０は、割り当てられていないセグメントに対応したセグメント管理情報２８５０のキューである。ページが割り当てられ、そのページに含まれるセグメントに、無効セグメントキュー１３３０の先頭のセグメント管理情報２８５０が取得され、無効セグメントキュー１３３０に接続された無効セグメントポインタ２９５０は、無効セグメントキュー１３３０の中の先頭のセグメント管理情報２８５０へのポインタである。なお、無効セグメントキュー１３３０は、記憶装置の種類ごとに設けられて良い。したがって、フラッシュパッケージ２３０、高速ディスク２６５、低速ディスク２９０の３種類のそれぞれについて無効セグメントキュー１３３０が設けられて良い。ただし、本実施例では、キャッシングがされるのは、フラッシュパッケージ２３０なので、フラッシュパッケージ２３０に対応する無効セグメントキュー１３３０が設けられて良い。
【００９９】
図１４は、スロット管理情報２７６０のフォーマットである。
【０１００】
スロット管理情報２７６０は、スロット毎に存在し、次スロットポインタ１４００とスロットアドレス１４０１とを有する。
【０１０１】
次スロットポインタ１４００は、スロット管理情報２７６０が空き状態のスロットに対応しているとき、空き状態にあるスロットの次のスロット管理情報２７６０を示している。スロットアドレス１４０１は、対応するスロット２１１００のアドレスを示す。
【０１０２】
図１５は、セグメント管理情報２８５０のフォーマットである。
【０１０３】
セグメント管理情報２８５０は、セグメント毎に存在し、次セグメントポインタ１５００とセグメントアドレス１５０１とを有する。
【０１０４】
次セグメントポインタ１５００は、セグメント管理情報２８５０が空き状態のセグメントに対応しているとき、空き状態にあるセグメントに対応した次のセグメント管理情報２８５０を示している。セグメントアドレス１５０１は、対応するセグメントのアドレスを示す。このアドレスは、キャッシュボリュームのＩＤと、当該論理ボリュームの相対アドレスとを含む。これによって、ストレージコントローラ２００は、このセグメントを含む仮想ページに割り当てた実ページを移動しても、セグメントアドレス１５０１を変更せずに済む。
【０１０５】
図１６は、ヒット率情報２９８０のフォーマットである。
【０１０６】
ヒット率情報２９８０は、目標ヒット率１６００、最新ポインタ１６０１、キャッシュ容量１６０２、ヒット数１６０３及びミス数１６０４を含む。目標ヒット率１６００及び最新ポインタ１６０１は、それぞれ１つであり、キャッシュ容量１６０２、ヒット数１６０３及びミス数１６０４は、それぞれである。本来であれば、目標ヒット率１６００、最新ポインタ１６０１は１つ、キャッシュ容量１６０２、ヒット数１６０３及びミス数１６０４は、記憶装置ごと、例えば、フラッシュパッケージ２３０、高速ディスク２６５及び低速ディスク２９５のそれぞれについて存在して良い。ただし、実施例１では、キャッシングがされるのは、フラッシュパッケージ２３０であるため、有効なのは、フラッシュパッケージ２３０に対応した情報１６０２〜１６０４である。
【０１０７】
目標ヒット率１６００は、記憶装置のキャッシュの目標とするヒット率である。本実施例では、キャッシュのヒット率が目標ヒット率１６００と同等であれば、キャッシュ容量の増加及び削減のいずれもされないで良い。ヒット率が目標ヒット率１６００に到達していなければ、キャッシュ容量が増加される。ヒット率が目標ヒット率１６００より明らかに高い場合（例えば、ヒット率が目標ヒット率１６００より所定値以上大きい場合）、キャッシュ容量が削減されて良い。キャッシュ容量の調整の判断は、スケジュール時点２７００において行われて良い。ここでは、過去ｍ回分のスケジュール時点２７００の、キャッシュ容量１６０２とヒット率（ヒット数１６０３／（ヒット数１６０３＋ミス数１６０４）から、目標ヒット率１６００を達成するのに必要なキャッシュ容量が予測され良い。この予測容量にキャッシュ容量を近づける（望ましくは等しくさせる）ため、実ページの確保又は解放が行われる。
【０１０８】
次に、上記に説明した管理情報を用いて、ストレージコントローラ２００が実行する動作の説明を行う。まず、ストレージコントローラ２００の動作を説明する。ストレージコントローラ２００の動作は、ストレージコントローラ２００内のプロセッサ２６０が実行し、そのプログラムは、メモリ２７０に格納されている。
【０１０９】
図１７は、メモリ２７０内のプログラムを示す。
【０１１０】
本実施例に関するプログラムは、リード処理実行部４０００、ライト要求受付部４１００、スロット確保部４２００、セグメント確保部４３００、移動ページスケジュール部４４００、実ページ移動処理実行部４５００、記憶装置選択部４７００及びキャッシュ容量調整部４６００である。これらのプログラムは、上位レベルの（例えば複数のフラッシュパッケージ２３０についての）ウエアレベリング技術、容量仮想化技術を実現するプログラムである。これらのプログラムは、プロセッサ２６０によって実行される。プロセッサ２６０によって実行される処理の主語を、プログラムとすることもあればプロセッサ２６０とすることもある。
【０１１１】
図１８は、リード処理実行部４０００の処理フローである。リード処理実行部４０００は、ホスト１２０から、ストレージコントローラ２００がリード要求を受け付けたときに実行される。
【０１１２】
ステップ５０００：プロセッサ２６０は、受け取ったリード要求で指定されたリード対象とするアドレスから、対応する仮想ページとアクセスする仮想ページ内の相対アドレスを計算する。
【０１１３】
ステップ５００１：プロセッサ２６０は、リード対象となったデータが、スロット２１１００、あるいは、セグメントにヒットしているか（存在しているか）をチェックする。データがヒットしている場合、ステップ５０１０へジャンプする。
【０１１４】
ステップ５００２：データがミスしている場合、プロセッサ２６０は、空きスロット数２８２０をチェックする。この空きスロット数２８２０が、一定値未満であれば、プロセッサ２６０は、スロット確保部４２００を起動する。この空きスロット数２８２０が、一定値以上であれば、ステップ５００３へ移る。
【０１１５】
ステップ５００３：プロセッサ２６０は、リード対象となっているデータを含むスロット分のデータを格納するための空きキャッシュ管理情報キュー１３００から、キャッシュ管理情報２７５０を確保し、その情報２７５０内のキャッシュアドレス２７５７に、リード対象とする論理ボリュームのＩＤと相対アドレスとを格納する。また、プロセッサ２６０は、今回の時点（スケジュール時点２７００）に対応するミス数１６４０を１つ増やす。さらに、プロセッサ２６０は、上記確保した情報２７５０内の前方ポインタ２７５１及び後方ポインタ２７５２などを操作して、当該キャッシュ管理情報２７５０を、ＬＲＵスロットキュー１２００の先頭に設定する。さらに、プロセッサ２６０は、空きスロット管理情報キュー１３１０から、スロット管理情報２７６０を確保し、キャッシュ管理情報２７５０に、このスロット管理情報２７６０のアドレスを設定する。
【０１１６】
ステップ５００４：ここでは、プロセッサ２６０は、リード対象としているデータを含むスロット分のデータをスロット２１１００にロードする必要がある。まず、当該ステップでは、プロセッサ２６０は、リード対象となった仮想ページに割り当てた実ページに対応する実ページ情報２１００を、論理ブロック管理情報２０００の実ページポインタ２００４から獲得する。
【０１１７】
ステップ５００５:プロセッサ２６０は、獲得した実ページ情報２１００の記憶装置グループ２１０１、実ページアドレス２１０２から、当該実ページが属する記憶装置グループと当該実ページの記憶装置グループの先頭アドレスを得る。
【０１１８】
ステップ５００６:プロセッサ２６０は、ステップ５００５で得た仮想ページ内の相対アドレスと記憶装置グループ内ＲＡＩＤタイプ２３０２から、当該要求のアクセス対象となる実ページ内の相対アドレスを計算する。プロセッサ２６０は、計算した実ページ内相対アドレス、記憶装置グループ内ＲＡＩＤタイプ２３０２と、記憶装置ポインタ２３０５とを基に、どの記憶装置のどのアドレスがアクセス先かを獲得する。 
【０１１９】
ステップ５００７:ステップ５００６で獲得した記憶装置に対し、プロセッサ２６０は、獲得したアドレスを指定したリード要求を発行する。
【０１２０】
ステップ５００８：プロセッサ２６０は、記憶装置２３０からデータが送られてくるのを待つ。
【０１２１】
ステップ５００９：プロセッサ２６０は、記憶装置から送られてきたデータをスロット２１１００に格納する。 この後、ステップ５０１６へジャンプする。
【０１２２】
ステップ５０１０：ここでは、プロセッサ２６０は、要求されたデータがスロット２１１００にヒットしているかをチェックする。そうであれば、ステップ５０１６ヘジャンプする。
【０１２３】
ステップ５０１１：要求されたデータ（リード対象データ）がスロットではなくセグメントに格納されている場合、まず、当該キャッシュ管理情報２７５０でセグメントのデータを一度、スロット２１１００（ＤＲＡＭキャッシュ）に移すという方法がある。もちろん、このような方法をとることは、本発明で有効である。また、プロセッサ２６０は、ヒット数１６０３を１つ増加させる。ただし、本実施例では、プロセッサ２６０は、当該セグメントに対応するキャッシュ管理情報をＬＲＵセグメントキュー１２１０の先頭に移すようにする。まず、本ステップでは、プロセッサ２６０は、このセグメントを含む仮想ページのページ返却フラグ２００８がオンかをチェックする。オンであれば、キュー移動は行わず、ステップ５０１３へジャンプする。
【０１２４】
ステップ５０１２：プロセッサ２６０は、当該キャッシュ管理情報２７５０を、ＬＲＵセグメントキューの先頭に移す。
【０１２５】
ステップ５０１３:プロセッサ２６０は、キャッシュ領域に格納された要求データを、記憶装置からバッファ２７５に読み出すよう、記憶装置にリード要求を発行する。
【０１２６】
ステップ５０１４：プロセッサ２６０は、記憶装置２３０からデータが、バッファ２７５に送られてくるのを待つ。
【０１２７】
ステップ５０１５：プロセッサ２６０は、記憶装置から送られバッファ２７５に格納されたデータを、ホスト１１０へ送る。
【０１２８】
ステップ５０１６：プロセッサ２６０は、当該リード要求で指定されたデータを、スロット２１１００から、ホスト１１０へ送る。
【０１２９】
図１９は、ライト要求受付部４１００の処理フローである。ライト要求受付部４１００は、ストレージコントローラ２００が、ホスト１１０からライト要求を受け付けたときに実行される。
【０１３０】
ステップ６０００：プロセッサ２６０は、受け取ったライト要求がライト対象とするアドレスから、対応する仮想ページとアクセスする仮想ページ内の相対アドレスを計算する。
【０１３１】
ステップ６００１：プロセッサ２６０は、ライト要求で指定されている論理ボリュームＩＤに対応した論理ボリューム情報２０００の中で、ステップ６０００で得た仮想ページに実ページが割り当てられているかを、実ページポインタ２００４を参照して、チェックする。割り当てている場合、ステップ６００３へジャンプする。 
【０１３２】
ステップ６００２：当該ステップでは、プロセッサ２６０は、対応する仮想ページに実ページを割り当てる。プロセッサ２６０は、論理ボリューム情報２０００のＲＡＩＤタイプ２００２と割り当て範囲２００６と、記憶装置グループ情報の、パッケージグループＲＡＩＤタイプ２３０３、空き実ページ数２３０４等を参照して、どの記憶装置グループの実ページを割り当てるかを決める 。その後、プロセッサ２６０は、対応する記憶装置グループの空きページ管理情報ポインタ２４００を参照して、先頭の空きページ情報２１００を、当該実ページポインタ２００４が示すようにする。これで、プロセッサ２６０は、仮想ページに実ページを割り当てたことになる。なお、プロセッサ２６０は、空きページ管理情報ポインタ２４００を、次の実ページ情報２１００（仮想ページに割り当てた実ページの実ページ情報２１００の中の空きページポインタ２１０３が示す実ページ情報２１００）を示すようにし、さらに、仮想ページに割り当てた実ページの実ページ情報２１００の中の空きページポインタ２１０３をヌルにする。また、プロセッサ２６０は、当該実ページに対応するフラッシュパッケージグループ管理情報の空きページ数２３０４の数を減らす。仮想ページを実ページに割り当てる処理を、本実施例では、ライト要求を受け付けたときに実施したが、本発明では、この割り当て処理は、フラッシュパッケージ２３０へデータを格納するまでに実行すればよい。
【０１３３】
ステップ６００３：プロセッサ２６０は、ライト対象となったデータを含むスロット２１１００に、キャッシュ管理情報２７５０が、割り当てられているかをチェックする。割り当てられている場合、ステップ６００７へジャンプする。
【０１３４】
ステップ６００４：割り当てられていない場合、プロセッサ２６０は、空きスロット数２８２０をチェックする。この空きスロット数２８２０が、一定値未満であれば、プロセッサ２６０は、スロット確保部４２００を起動する。この空きスロット数２８２０が一定値以上であれば、ステップ６００５へ移る。
【０１３５】
ステップ６００５：プロセッサ２６０は、ライト対象となっているデータを含むスロット分のデータを格納するための空きキャッシュ管理情報キュー１３００から、キャッシュ管理情報２７５０を確保し、その情報２７５０におけるキャッシュアドレス２７０５にリード対象とする論理ボリュームと相対アドレスを格納する。
【０１３６】
ステップ６００６：プロセッサ２６０は、獲得したキャッシュ管理情報２７５０を、LRUスロットキュー１２００の先頭位置にセットする。
【０１３７】
ステップ６００７：プロセッサ２６０は、当該キャッシュ管理情報２７５０で確保されている領域は、スロット２１１０（キャッシュメモリ２１０）であるか、セグメント（記憶装置）であるかを判別する。その確保されている領域がセグメントであれば、ステップ６０１９へジャンプする。
【０１３８】
ステップ６００８：このステップは、ライトデータが記憶装置にキャッシングされている場合に、実行されるステップである。本実施例では、プロセッサ２６０は、記憶装置（キャッシュボリュームに割り当てられている、記憶装置に基づく実ページ）にライトデータを書き込んで、ライト要求を完了させる。本発明は、 ライトデータをキャッシュメモリ２１０に書き込んだ段階で、ライト要求を完了させても有効である。ここでは、プロセッサ２６０は、ホスト１１０から受け取ったライトデータをバッファ２７５に格納する。
【０１３９】
ステップ６００９:ここでは、プロセッサ２６０は、キャッシュ管理情報２７５０のパリティ生成前領域ポインタ２７０３が有効かをチェック（スロット２１１００が確保されているか）をチェックする。この後、ステップ６０１１へジャンプする。
【０１４０】
ステップ６０１０:プロセッサ２６０は、ライトデータを格納するため、空きスロット管理情報キュー１４００から、スロット管理情報２７００を確保し、パリティ生成前ポインタ２７５３に、このスロット管理情報２７５０のアドレスを設定する。
【０１４１】
ステップ６０１１:プロセッサ２６０は、パリティ作成前ポインタ２７０３から、対応するセグメント管理情報２９２０を参照して、冗長データの領域を認識する。冗長データを生成するのに必要な情報をバッファ２７５に格納するために、プロセッサ２６０は、記憶装置にリード要求を発行する。
【０１４２】
ステップ６０１２：プロセッサ２６０は、必要なデータが、バッファ２７５に読み込まれるのを待つ。
【０１４３】
ステップ６０１３：プロセッサ２６０は、新しい冗長データをバッファ２７５に生成する。
【０１４４】
ステップ６０１４:プロセッサ２６０は、生成した冗長データを、記憶装置に書き込むため、記憶装置にライト要求を発行する。
【０１４５】
ステップ６０１５：プロセッサ２６０は、書き込みが完了するのを待つ。
【０１４６】
ステップ６０１６：プロセッサ２６０は、パリティ生成前領域ポインタ２７０３が示すセグメント管理情報に対応するセグメントに書き込むため、記憶装置にライト要求を発行する。
【０１４７】
ステップ６０１７：プロセッサ２６０は、書き込みが完了するのを待つ。
【０１４８】
ステップ６０１８：ここでは、プロセッサ２６０は、該当するキャッシュ管理情報２７５０を、前方ポインタ２７５１及び後方ポインタ２７５２などを操作して、ＬＲＵスロットキュー１３００の先頭に設定する。さらに、プロセッサ２６０は、対応する更新前ダーティビットマップ２７０２をオンにする。プロセッサ２６０は、バッファ２７５から、スロット２１１０にライトデータを転送する。
【０１４９】
ステップ６０１９：ここでは、プロセッサ２６０は、該当するキャッシュ管理情報２７５０を、前方ポインタ２７５１及び後方ポインタ２７５２などを操作して、ＬＲＵスロットキュー１３００の先頭に設定する。さらに、プロセッサ２６０は、対応する更新前ダーティビットマップ２７０２をオンにして、ホスト１１０から、ライトデータを受け取り、スロット２１１００に格納する。
【０１５０】
記憶装置グループは、ＲＡＩＤ構成をとるので、キャッシュメモリ２１０上に格納したライトデータに対して、冗長データを生成する必要がある。これは、キャッシュボリューム及びホストボリュームのいずれにデータが書き込まれる場合にも必要である。また、実ページの中には、冗長データを格納する領域も含まれているので、ライトデータに対応する冗長データの実ページ内の格納アドレスも一意に定まる。本実施例では、プロセッサ２６０は、冗長データを生成するのに必要で、キャッシュメモリ２１０にないデータ、および、生成した冗長データはバッファ２７５に格納する。なお、プロセッサ２６０は、バッファ２７５上の冗長データも、ライトデータと同様に、どの記憶装置のどのアドレスに書き込むべきかを示す情報をつけておく。本実施例では、プロセッサ２６０は、記憶装置への書き込みは、大きく２つに分けられる。すなわち、（Ａ）キャッシュボリュームへのデータの書込みと、（Ｂ）ホストボリュームへのデータの書込みである。（Ａ）は、空きスロット数２８２０が少なくなってきたときに実行されるスロット確保部４２００の一部の処理であり、（Ｂ）は、空きセグメント数２９２０が少なくなってきたときに、実行されるセグメント確保部４６００の一部の処理である。
【０１５１】
図２０は、スロット確保部４２００の処理フローである。スロット確保部４２００は、プロセッサ２６０が、適宜実行する処理である。ホスト１２０からリード要求又はライト要求を受け取ったときに行われる処理において、空きスロット数２８２０が一定値以下の場合に、空きスロット数２８２０を増加させるために、スロット確保部４２００が起動される。
【０１５２】
ステップ７０００：プロセッサ２６０は、ＬＲＵスロットキュー１３００のＬＲＵスロット後方ポインタ２７８０が示すキャッシュ管理情報２７５０を、ＬＲＵスロットキューからはずす。また、初期キャッシング記憶装置２０１０で示されている記憶装置にキャッシングをするので、プロセッサ２６０は、その記憶装置に対応した空きセグメントキュー１３２０を認識する。ただし、実施例１では、キャッシング先の記憶装置は、フラッシュパッケージ２３０となるので、これに対応した空きセグメントキューが認識されることになる。
【０１５３】
ステップ７０００１：ここでは、プロセッサ２６０は、取り出したキャッシュ管理情報２７５０のキャッシュアドレス２７５７をチェックして、当該スロットに対応する論理ボリュームを認識する。さらに、該当する論理ボリュームのキャッシングフラグ２００９がオンかをチェックする。オフの場合、記憶装置のキャッシングは行わないので、プロセッサ２６０は、所定の処理を行う。この処理は、公知の処理で良い。そのため、説明を省略する。以下、キャッシングフラグ２００９がオンの場合の処理を説明する。
【０１５４】
ステップ７００２：プロセッサ２６０は、空きセグメント数２９２０をチェックする。空きセグメント数２９２０が、一定値以下であれば、プロセッサ２６０は、セグメント確保部４３００を起動する。 
【０１５５】
ステップ７００３：プロセッサ２６０は、パリティ生成後領域ポインタ２７０２をチェックする。無効であれば、ステップ７０１３へジャンプする。本実施例では、パリティ生成後領域ポインタ２７０２が示すスロット２１１００は、クリーン状態であるが、記憶装置にはキャッシングするようにしている。ただし、本発明は、更新データがないクリーンなデータは、記憶装置にキャシングしないようにしても、有効である。
【０１５６】
ステップ７００４：プロセッサ２６０は、空きセグメントキュー１３２０から、セグメント管理情報２８５０のセグメントアドレス１５０１を取り出し、このセグメント管理情報２８５０に対応するセグメント(論理ボリュームと相対アドレス)を認識する。このとき、プロセッサ２６０は、空きセグメント数２９２０を減らす。さらに、プロセッサ２６０は、このセグメントの冗長データが格納されている領域を認識する。
【０１５７】
ステップ７００５:ここでは、プロセッサ２６０は、冗長データを生成するのに必要な情報をバッファ２７５に格納するために、記憶装置にリード要求を発行する。
【０１５８】
ステップ７００６：プロセッサ２６０は、必要なデータが、バッファ２７５に読み込まれるのを待つ。
【０１５９】
ステップ７００７：プロセッサ２６０は、新しい冗長データをバッファ２７５に生成する。
【０１６０】
ステップ７００８:プロセッサ２６０は、生成した冗長データを、記憶装置に書き込むため、記憶装置にライト要求を発行する。
【０１６１】
ステップ７００９：プロセッサ２６０は、書き込みが完了するのを待つ。
【０１６２】
ステップ７０１０：プロセッサ２６０は、パリティ生成後領域ポインタ２７０２が示すスロット２１１００に格納されたデータを、ステップ７００３で認識したセグメントに書き込むため、記憶装置にライト要求を発行する。
【０１６３】
ステップ７０１１：プロセッサ２６０は、書き込みが完了するのを待つ。
【０１６４】
ステップ７０１２：プロセッサ２６０は、パリティ生成後領域ポインタ２７０２が示すスロット管理情報２７６０を空きスロットキューにつなぎ、空きスロット数２８２０を増やす。さらに、プロセッサ２６０は、パリティ生成後領域ポインタ２７０２が、ステップ７００３で認識したセグメント管理情報２８５０を示すようにする。
【０１６５】
ステップ７０１３： プロセッサ２６０は、パリティ生成前領域ポインタ２７０３をチェックする。無効であれば、ステップ７０２３へジャンプする。
【０１６６】
ステップ７０１４：プロセッサ２６０は、空きセグメントキュー１３２０から、セグメント管理情報２８５０のセグメントアドレス１５０１を取り出し、このセグメント管理情報２８５０に対応するセグメント(論理ボリュームと相対アドレス)を認識する。このとき、プロセッサ２６０は、空きセグメント数２９２０を減らす。さらに、プロセッサ２６０は、このセグメントの冗長データが格納されている領域を認識する。
【０１６７】
ステップ７０１５:ここでは、プロセッサ２６０は、冗長データを生成するのに必要な情報をバッファ２７５に格納するために、記憶装置にリード要求を発行する。
【０１６８】
ステップ７０１６：プロセッサ２６０は、必要なデータが、バッファ２７５に読み込まれるのを待つ。
【０１６９】
ステップ７０１７：プロセッサ２６０は、新しい冗長データをバッファ２７５に生成する。
【０１７０】
ステップ７０１８: プロセッサ２６０は、生成した冗長データを、記憶装置に書き込むため、記憶装置にライト要求を発行する。
【０１７１】
ステップ７０１９：プロセッサ２６０は、書き込みが完了するのを待つ。
【０１７２】
ステップ７０２０：プロセッサ２６０は、パリティ生成前領域ポインタ２７０３が示すスロットに格納されたデータを、ステップ７００３で認識したセグメントに書き込むため、記憶装置にライト要求を発行する。
【０１７３】
ステップ７０２１：プロセッサ２６０は、書き込みが完了するのを待つ。
【０１７４】
ステップ７０２２：プロセッサ２６０は、パリティ生成前領域ポインタ２７０３が示すスロット管理情報２７６０を空きスロットキューにつなぎ、空きスロット数２８２０を増やす。さらに、パリティ生成前領域ポインタ２７０２が、ステップ７００３で認識したセグメント管理情報２８５０を示すようにする。
【０１７５】
ステップ７０２３：プロセッサ２６０は、空きスロットキュー２８２０の数をチェックする。これが、所定値より大きければ。処理を終了する。そうでなければ、ステップ７０００へジャンプする。
【０１７６】
図２１は、セグメント確保４３００の処理フローである。セグメント確保部４３００は、プロセッサ２６０が、適宜実行する処理である。ホスト１２０からリード要求又はライト要求を受け取ったときに行われる処理において、空きセグメント数２８２０が一定値以下の場合に、空きセグメント数２８２０を増加させるために、セグメント確保部４３００が起動される。
【０１７７】
ステップ８０００：プロセッサ２６０は、ＬＲＵセグメントキュー１３１０のＬＲＵセグメント後方ポインタ２７８０が示すセグメント管理情報２７００を、ＬＲＵセグメントキューからはずす。
【０１７８】
ステップ８００１：プロセッサ２６０は、パリティ生成前領域ポインタ２７０３をチェックする。無効であれば、ステップ８００１１へジャンプする。
【０１７９】
ステップ８００２：プロセッサ２６０は、対応するセグメント管理情報２８５０のセグメントアドレス１５０１を取り出し、このセグメント管理情報２８５０に対応するセグメント(論理ボリュームと相対アドレス)を認識する。また、プロセッサ２６０は、このセグメントの冗長データが格納されている領域を認識する。プロセッサ２６０は、パリティ生成前ビットマップ２７０４で示されたデータを記憶装置に書き込むため、データを書き込む記憶装置とアドレスを認識する。加えて、プロセッサ２６０は、対応するパリティの記憶装置とアドレスを認識する。
【０１８０】
ステップ８００３:ここでは、プロセッサ２６０は、冗長データを生成するのに必要な情報をバッファ２７５に格納するために、記憶装置にリード要求を発行する。
【０１８１】
ステップ８００４：プロセッサ２６０は、必要なデータが、バッファ２７５に読み込まれるのを待つ。
【０１８２】
ステップ８００５：プロセッサ２６０は、新しい冗長データをバッファ２７５に生成する。
【０１８３】
ステップ８００６: プロセッサ２６０は、生成した冗長データを、記憶装置に書き込むため、記憶装置にライト要求を発行する。
【０１８４】
ステップ８００７：プロセッサ２６０は、書き込みが完了するのを待つ。
【０１８５】
ステップ８００８：プロセッサ２６０は、ステップ８００２で認識したデータを同ステップで認識した記憶装置に、認識したアドレスに書き込むよう要求する。
【０１８６】
ステップ８００９：プロセッサ２６０は、書き込みが完了するのを待つ。
【０１８７】
ステップ８０１０：プロセッサ２６０は、当該セグメントを含む仮想ページに対応したページ返却フラグが、オンかをチェックする。そのフラグがオフであれば、プロセッサ２６０は、パリティ生成前ポインタ２７０３で示されたセグメント管理情報２８５０を、空きセグメントキュー１３２０に戻し、空きセグメント数２９２０を増やす。そのフラグがオンであれば、プロセッサ２６０は、当該セグメント管理情報を無効セグメントキュー１３０２に移し、使用セグメント数２００７を１減算し、その使用セグメント数２００７が０になったら、プロセッサ２６０は、対応する仮想ページに割り当てた実ページを解放する。また、プロセッサ２６０は、いずれの場合も、パリティ生成前ポインタ２７０３をヌルにする。
【０１８８】
ステップ８０１１:ここでは、プロセッサ２６０は、パリティ生成後ポインタ２７０２が有効かをチェックする。有効でなければ、ステップ８０１４へジャンプする。
【０１８９】
ステップ８０１２：プロセッサ２６０は、当該セグメントを含む仮想ページに対応したページ返却フラグが、オンかをチェックする。そのフラグがオフであれば、プロセッサ２６０は、パリティ生成後ポインタ２７０２で示されていたセグメント管理情報２８５０を、空きセグメントキュー１３２０に戻し、空きセグメント数２９２０を増やす。そのフラグがオンであれば、プロセッサ２６０は、当該セグメント管理情報を無効セグメントキュー１３０２に移し、使用セグメント数２００７を１減算し、その使用セグメント数２００７が０になったら、対応する仮想ページに割り当てた実ページを解放する。また、いずれの場合でも、プロセッサ２６０は、パリティ生成後ポインタ２７０２をヌルにする。
【０１９０】
ステップ８０１３：ここでは、プロセッサ２６０は、キャッシュ管理情報２７５０を、空きキャッシュ管理情報キュー１４００に戻す。
【０１９１】
ステップ８０１４:ここでは、プロセッサ２６０は、空きセグメント数２９２０が所定値以上になっているかをチェックする。所定値以上になっていない場合、ステップ８０００へ戻る。なっていれば、処理を完了する。
【０１９２】
図２４は、移動ページスケジュール部４４００の処理フローである。移動ページスケジュール部４４００は、タイマ２４０が、次回スケジュール時刻２７０２になったときに、実行を開始する。移動ページスケジュール部４４００は、記憶装置グループ間の性能バランスを保つために、記憶装置グループ間で、実ページ内のデータを移動する。本実施例では、ストレージコントローラ２００が、キャッシュ領域として割り当てられている実ページと、ホストボリュームボリュームに割り当てられる実ページとの両方を制御することで、ストレージシステム１００全体で統制のとれた性能を達成する実ページの配置が可能となる。なお、キャッシュ領域と割り当てられる実ページは、ホストボリュームに割り当てられる実ページに比べ、アクセス性能のよい（アクセス速度が速い）ことが望ましい。したがって、本実施例では、キャッシュ領域として割り当てる実ページは、フラッシュパッケージグループ２８０に基づく実ページであり、ホストボリュームに割り当てられる実ページは、高速ディスクグループ又は低速ディスクグループに基づく実ページで良い。また、フラッシュパッケージグループ２８０に関しては、性能だけでなく、ブロックの消去回数を考慮したページ配置を行うことができる。また、本実施例では、ストレージコントローラ２００は、容量仮想化機能をもっており、フラッシュパッケージ間の空きブロックの数も均衡させるようなページ配置も実現することができる。
【０１９３】
ステップ１００００：プロセッサ２６０は、すべての記憶装置の記憶装置動作時間２５１１を、（次回スケジジュ−ル時刻２７０２−前回スケジュール時刻２７０１）で割って、仮想的な稼働率を計算する。プロセッサ２６０は、この値が一定値Ａ以上の記憶装置を含む記憶装置グループから、実ページ内のデータを移動し、負荷を軽減することを決定する。さらに、プロセッサ２６０は、どれだけの仮想的な稼働率を減らすかを計算しておく。また、プロセッサ２６０は、仮想的な稼働率の最大値が一定値Ｂ以下の記憶装置グループを移動先実ページの基になるグループとし、どれだけの仮想稼働率を増やしてもよいかを決定する。
【０１９４】
ステップ１０００１：まず、プロセッサ２６０は、同じ種類の記憶装置グループ間で、移動元と移動先となる記憶装置グループのペアを決定する。この場合、プロセッサ２６０は、移動元と移動先となる記憶装置グループのペア間で、それぞれ、どれだけの仮想的な稼働率を移動するかを決定する。この場合、移動元と移動先の仮想的な稼働率は、１対１になる。
【０１９５】
ステップ１０００２: プロセッサ２６０は、移動元のすべての仮想的な稼働率を移動先の記憶装置グループに加えても、移動先の許容範囲であれば、ステップ１０００４へジャンプする。
【０１９６】
ステップ１０００３：プロセッサ２６０は、異なった種類の記憶装置グループ間で、移動元と移動先の記憶装置グループのペアを決定する。この場合、仮想的な稼働率が、移動先と移動元で異なるので、正規化を行う。プロセッサ２６０は、異なった記憶装置グループ間で、移動元と移動先の記憶装置グループのペアと、移動元となる記憶装置グループの減らす正規化された仮想的な稼働率、移動先となる記憶装置グループの増やす正規化された仮想的な稼働率を決定する。
【０１９７】
ステップ１０００４：プロセッサ２６０は、ステップ１０００１とステップ１０００３で定めた移動元記憶装置グループの移動元実ページと、ステップ１０００１とステップ１０００３で定めた移動先記憶装置グループの実ページを決定する。具体的には、プロセッサ２６０は、当該記憶装置グループの実ページのページ動作時間２１１３を参照して、この値を累積していき、先の合計値と同等なるまで、実ページを見出し、これらを移動先の実ページとする。もちろん、ページ動作時間２１１３が大きなものを選択するのが効率がよい。これを、移動先となるすべての記憶装置グループに対し、実行する。ただし、本実施例では、以下の制約の範囲で、移動元なるページが決定される。
（１キャッシュボリュームに割り当てた実ページ内のデータは、他の種類の記憶装置グループに基づく実ページには移動しない。
（２）ホストボリュームに割り当てた実ページ内のデータで、かつ、キャッシュボリュームに割り当てた実ページにキャッシュされているデータは、フラッシュパッケージグループ２８０に基づく実ページには移動しない。
【０１９８】
なお、プロセッサ２６０は、移動を決定したすべての実ページに対応する実ページ情報２１００の移動待ちフラグ２１１１をオンにする。また、プロセッサ２６０は、移動先となる記憶装置グループの実ページを、移動元実ページの割当て先の仮想ページに割り当てる。具体的には、プロセッサ２６０は、移動元の実ページの数だけ、以下の処理を実行する。すなわち、プロセッサ２６０は、移動先となる記憶装置グループに対応する空き実ページ管理情報ポインタ２２００がさす実ページ情報２１００を、移動元の実ページの実ページ情報２１００のコピー先実ページ情報ポインタ２１１０に設定し、空き実ページ管理情報ポインタ２２００が、次の空いた状態にある実ページ情報２１００を示すようにする。
【０１９９】
ステップ１０００５：プロセッサ２６０は、すべての記憶装置の記憶装置動作時間２５１１とすべての実ページのページ動作時間２１１３を０クリアする（０にリセットする）。次に、プロセッサ２６０は、フラッシュパッケージグループ２８０が存在するかをチェックする。フラッシュパッケージグループ２８０が存在すれば、プロセッサ２６０は、ブロック消去回数を、フラッシュパッケージグループ２８０間で、実ページ内のデータを移動することで、均衡を図る必要があるかをチェックする。このため、フラッシュパッケージグループ２８０がなければ、ステップ１００１１へジャンプする。
【０２００】
ステップ１０００６:プロセッサ２６０は、すべてのフラッシュパッケージ１６０に対応するフラッシュパッケージ情報２５００のパッケージ内累積実ブロック割り当て時間２５０７に、パッケージ内実ブロック割り当て数２５０５に（次回スケジジュ−ル時刻２７０２−前回スケジュール時刻２７０１）を乗算した値を加える。さらに、プロセッサ２６０は、パッケージ内累積実ブロック割り当て時間２５０７に、パッケージ内追加実ブロック割り当て時間２５０９を加える。パッケージ内追加実ブロック割り当て時間２５０９には、前回スケジュール時刻２７０１以降割り当てた当該フラッシュパッケージ２３０の実ブロックごとに、（次回スケジュール実時刻２７０２−実ブロック割り当て時刻）を加算してきたので、これにより、前回スケジュール時刻２７０１以降割り当てた実ブロックの割り当て時間を反映できたことになる。さらに、プロセッサ２６０は、ブロックパッケージ内追加実ブロック割り当て時間２５０９を０にする。また、プロセッサ２６０は、パッケージ内実ブロック割り当て数２５０５に、パッケージ内追加実ブロック数２５０６を加え、パッケージ内追加実ブロック数２５０６を０にする。
【０２０１】
ステップ１０００７：プロセッサ２６０は、すべての実ページに対応する実ページ情報２１００の累積実ブロック割り当て時間２１０６に、追加実ブロック数２１０５に（次回スケジュール時刻２７０２−前回スケジュール時刻２７０１）を乗算した値を、加える。さらに、プロセッサ２６０は、累積実ブロック割り当て時間２１０６に、追加実ブロック割り当て時間２１０８を加える。追加実ブロック割り当て時間２１０８には、前回スケジュール時刻２７０１以降割り当てた当該実ページの実ブロックごとに、（次回スケジュール実時刻２７０２−割り当て時刻）を加算してきたので、これにより、前回スケジュール時刻２７０１以降割り当てた実ブロックの割り当て時間を反映できたことになる。さらに、プロセッサ２６０は、追加実ブロック割り当て時間２１０８を０にする。また、プロセッサ２６０は、実ブロック割り当て数２１０４に、追加実ブロック数２１０５を加え、追加実ブロック数２１０５を０にする。
【０２０２】
ステップ１０００８：プロセッサ２６０は、すべてのフラッシュパッケージ２３０に対応するフラッシュパッケージ情報２５００のパッケージ内累積実ブロック消去回数２５０８をパッケージ内累積実ブロック割り当て時間２５０７で割る。この値は、実ページの割り当ての変更を行わなかった場合のそれぞれのフラシュパッケージ１６０の実ブロックの単位時間当りの平均消去回数となる。さらに、プロセッサ２６０は、すべてのフラッシュパッケージ２３０に対応するフラッシュパッケージ情報２５００のパッケージ内実ブロック割り当て数２５０５を、割り当て可能実ブロック数２５０４で割る。この値は、実ページの割り当ての変更を行わなかった場合のそれぞれのフラシュパッケージ２３０の実ブロックの占有率になる。本実施例では、この平均消去回数が、一定値以上である（フラッシュパッケージ２３０の余命が短い）、又は、他のフラッシュパッケージ１６０に比べて一定の割合以上大きい（フラッシュパッケージ２３０間で、平均消去回数の偏りが大きい）、あるいは、占有率が一定値以上である（フラッシュパッケージ２３０が満杯になる可能性がある）場合、プロセッサ２６０は、そのフラッシュパッケージ２３０を含むフラッシュパッケージグループ２８０に基づく実ページ内のデータを、他のフラッシュパッケージグループ２８０の実ページに移動する。また、プロセッサ２６０は、割り当て可能実ブロック数２５０４がある基準を満たさなくなったとき、そのフラッシュパッケージ２３０を含むフラッシュパッケージグループ２８０に基づく実ページ内のデータを、他のフラッシュパッケージグループ２８０の実ページに移動してもよい。ここでは、プロセッサ２６０は、どのフラッシュパッケージグループ２８０の実ページ内のデータを移動するかを決める。さらに、プロセッサ２６０は、上記のフラッシュパッケージ２３０ごとの実ブロックの単位時間当たりの平均消去回数、実ブロックの占有率、割り当て可能実ブロック数２５０４などを参照して、移動先となるフラッシュパッケージグループ２８０を決定する。
【０２０３】
ステップ１０００９：プロセッサ２６０は、実ページの移動元となると決めたフラッシュパッケージグループ２８０に基づく複数の実ページのうち、どの実ページ内のデータを移動するかを決める。ここでは、プロセッサ２６０は、移動元となるすべてのフラッシュパッケージグループ２８０に属する各実ブロック情報２１００の、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７、実ブロック割り当て数２１０４などを参照して、移動元実ページを決定する。なお、プロセッサ２６０は、移動を決定したすべての実ページに対応する実ページ情報２１００の移動待ちフラグ２１１１をオンにする。
【０２０４】
ステップ１００１０：プロセッサ２６０は、ステップ１０００９で移動を決定した実ページ（移動待ちフラグ２１１１をオンにした実ページ情報２１００に対応する実ページ）を、ステップ１０００２で決定した移動先のフラッシュパッケージグループ２８０の中のどの実ページを移動先とするかを決定する。プロセッサ２６０は、移動先としたフラッシュパッケージグループ２８０に対応するフラッシュパッケージグループ情報２３００の実ページ数２３０３、空きページ数２３０４、当該フラッシュパッケージグループ２８０に属するフラッシュパッケージ２３０に対応するフラッシュパッケージ情報２５００の割り当て可能実ブロック数２５０４、パッケージ内実ブロック割り当て数２５０５、パッケージ内累積実ブロック割り当て時間２５０７、パッケージ内累積実ブロック消去回数２５０８を参照して、移動先実ページを決める。プロセッサ２６０は、移動先の実ページを決めると、移動先のフラッシュパッケージグループ２８０に対応する空き実ページ管理情報ポインタ２２００がさす実ページ情報２１００を、移動元の実ページの実ページ情報２１００のコピー先実ページ情報ポインタ２１１０に設定する。プロセッサ２６０は、空き実ページ管理情報ポインタ２２００を次の空いた状態にある実ページ情報２１００を示すようにする。プロセッサ２６０は、以上の処理をステップ１０００３で移動を決定したすべての実ページに対して実行する。以上で、移動元となる実ページの集合のそれぞれの移動元実ページに対する移動先ページが決まったことになる。
【０２０５】
ステップ１００１１：プロセッサ２６０は、記憶装置グループごとに存在する実ページ移動処理実行部４５００の中で、少なくとも移動元となる実ページを１つもつ記憶装置グループに対応した実ページ移動処理実行部４５００を起動する。
【０２０６】
ステップ１００１２：プロセッサ２６０は、記憶装置選択部４７００をコールする。
【０２０７】
ステップ１００１３：プロセッサ２６０は、次回スケジュール時刻２７０１を前回スケジュール時刻２７０１にコピーする。次に、プロセッサ２６０は、次回スケジュール時刻２７０１に次のスケジュール時刻を設定する。
【０２０８】
図２５は、実ページ移動処理実行部４５００の処理フローである。実ページ移動処理実行部４５００は、フラッシュパッケージグループ２８０ごとに存在する。また、図２４のステップ１００１１で述べたように、対応するフラッシュパッケージグループ２８０の中に、少なくとも移動元となる実ページを１つもつフラッシュパッケージグループ２８０に対応した実ページ移動処理実行部４５００が、移動ページスケジュール部４４００から起動される。
【０２０９】
ステップ１１０００：プロセッサ２６０は、対応するフラッシュパッケージグループ２８０の中で、移動待ちフラグ２１１１が、オンになっている実ページ情報２１００を探す。この実ページ情報２１００に対応する実ページが移動元（コピー元）なる。もし、移動待ちフラグ２１１１がオンになっている実ページ情報２１００がない場合、当該フラッシュパッケージグループ２８０で移動すべき実ページ処理はすべて完了したことになるので、処理を終了する。
【０２１０】
ステップ１１００１：プロセッサ２６０は、当該実ページ情報２１００の移動待ちフラグ２１１１をオフにして、移動中フラグ２１０９をオンにする。
【０２１１】
ステップ１１００２：ここでは、プロセッサ２６０は、当該実ページ情報２１００に対応する実ページが、実ページが割り当てられている記憶装置グループを構成する記憶装置と、記憶装置内の相対アドレスと読み出しを行う長さを算出する。実ページ情報２１００の記憶装置グループ２１０１が示す記憶装置グループ情報２３００が該当する記憶装置グループ情報２３００である。この記憶装置グループ情報２３００に格納された記憶装置ポインタ２３０５が示す記憶装置情報２５００に対応する記憶装置がコピー元の実ページが割り当てられている記憶装置となる。次に、プロセッサ２６０は、実ページ情報２１００の、実ページアドレス２１０２と、記憶装置情報２５００から、それぞれの記憶装置の中で、移動対象となる相対アドレスと長さを、すべての記憶装置に関して求める。
【０２１２】
ステップ１１００３：プロセッサ２６０は、移動元となる実ページが割り当てられている記憶装置グループを構成する記憶装置に、指定した相対アドレスから指定した長さの分のデータを移動するよう要求する。
【０２１３】
ステップ１１００４：プロセッサ２６０は、要求を発行したすべての記憶装置からの完了報告をまつ。 
【０２１４】
ステップ１１００５：記憶装置から、帰ってくる情報は、フラッシュパッケージ２３０以外は、記憶装置に格納されていた情報である。フラッシュパッケージ２３０の場合、本実施例では、下位レベルの容量仮想化機能をサポートしているので、次のような情報が返ってくる。すなわち、各仮想ブロックに実ブロックが割りてられていたか、いないかの情報が返ってくる。実ブロックを割り当てていた場合、その情報は、格納されていたデータ、その仮想ブロックに実ブロックを割り当てていない状態から始めて実ブロック（現在割り当てている実ブロックとは限らない）を割り当てた時刻、その時刻以降、この仮想ブロックに割り当てていた実ブロックの消去回数を含んで良い。プロセッサ２６０は、これらの情報を、キャッシュメモリ２１０上に格納する。
【０２１５】
ステップ１１００６：ここでは、移動先実ページが、割り当てられた当該実ページが割り当てられている記憶装置グループを構成する記憶装置の集合と、それぞれの記憶装置の相対アドレスと長さになるかを算出する。この場合、移動元になる実ページ情報２１００の移動先実ページアドレスが示す実ページ情報２１００が、移動先の実ページに対応する実ページ情報２１００となる。実ページ情報２１００から、記憶装置グループを構成する記憶装置の集合と、それぞれの記憶装置のどの相対アドレスと長さ仮想ブロッになるかを算出する処理は、ステップ１１００２で説明したので省略する。
【０２１６】
ステップ１１００７：プロセッサ２６０は、移動先となる実ページが割り当てられている記憶装置グループを構成する各記憶装置に、指定した相対アドレスから指定した長さだけのデータを格納するよう要求する。このとき、各記憶装置に送られる情報は、ステップ１１０５でキャッシュに格納した移動元になる記憶装置から送られてきた情報である。
【０２１７】
ステップ１１００８：プロセッサ２６０は、要求を発行したすべての記憶装置からの完了報告をまつ。
【０２１８】
ステップ１１００９：プロセッサ２６０は、移動元実ページを空き実ページに、移動先実ページにこれまで移動元実ページを割り当てていた仮想ページを割り当てる。これは、移動元の実ページに空き実ページ管理ポインタ２２００につなぎ、これまで移動元の実ページ情報を示していた実ページポインタ２００４を移動先の実ページ情報を示すことで、実現されてよい。また、プロセッサ２６０は、移動元の実ページ情報のうち、実ブロック割り当て数２１０４、追加実ブロック割り当て数２１０５、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７、追加実ブロック割り当て時間２１０８を、移動先の実ブロック情報２１００にコピーする。コピーの後、プロセッサ２６０は、実ブロック割り当て数２１０４、追加実ブロック割り当て数２１０５、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７、追加実ブロック割り当て時間２１０８、移動元の実ページ情報２１００のうち、移動中フラグ２１０９、移動先実ページ情報２１１０、移動待ちフラグ２１１１を、クリアする（所定値にリセットする）。
【０２１９】
ステップ１１０１０：プロセッサ２６０は、移動元となったすべてのフラッシュパッケージグループ情報２３００と移動先となったすべてのフラッシュパッケージグループ情報２３００の更新を行う。ここでは、プロセッサ２６０は、移動元実ページと移動先実ページのセット毎に、移動元となったフラッシュパッケージグループ情報２３００の実ページ数２３０３を１減らし、移動先のフラッシュパッケージグループ情報２３００の実ページ数２３０３を１増やす。
【０２２０】
ステップ１１０１１：プロセッサ２６０は、移動元となったすべてのフラッシュパッケージ情報２５００と移動先となったすべてのフラッシュパッケージ情報２５００の更新を行う。ここでは、プロセッサ２６０は、移動元となったそれぞれのフラッシュパッケージ情報２５００のパッケージ内実ブロック割り当て数２５０５、パッケージ内累積実ブロック割り当て時間２５０７、パッケージ内累積実ブロック消去回数２５０８の値から、移動先となった実ページの実ページ情報２１００の中で、それぞれのフラッシュパッケージ２３０に対応する実ブロック割り当て数２１０４、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７の値を、減らす。また、プロセッサ２６０は、移動先となったそれぞれのフラッシュパッケージ情報２５００のパッケージ内実ブロック割り当て数２５０５、パッケージ内累積実ブロック割り当て時間２５０７、パッケージ内累積実ブロック消去回数２５０８の値に、移動先となった実ページの実ページ情報２１００の中の、それぞれのフラッシュパッケージに対応する実ブロック割り当て数２１０４、累積実ブロック割り当て時間２１０６、累積実ブロック消去回数２１０７の値を、加える。この後、ステップ１１０００へ戻る。
【０２２１】
図２６は、記憶装置選択部４７００の処理フローである。記憶装置選択部４７００は、移動ページスケジュール部４４００により、コールされる。
【０２２２】
ステップ１２０００：実施例１では、キャッシング先は、フラッシュパッケージ２３０である。ここでは、プロセッサ２６０は、フラッシュパッケージ２３０対応のヒット率情報２９８０を選択する。また、プロセッサ２６０は、選択した記憶装置が、フラッシュパッケージ２３０であるという情報をセットする。
【０２２３】
ステップ１２００１：プロセッサ２６０は、キャッシュ容量調整部４６００をコールする。
【０２２４】
図２７は、キャッシュ容量調整部４６００の処理フローである。キャッシュ容量調整部４６００は、記憶装置選択部４４００により、コールされる。
【０２２５】
ステップ１３０００：プロセッサ２６０は、指定されたヒット率情報２９８０の、最新ポインタ１６０１が指す、ヒット数１６０３とミス数１６０４から、今回のスケジュール期間のヒット率を算出する。
【０２２６】
ステップ１３００１：プロセッサ２６０は、ステップ１３０００で算出されたヒット率と目標ヒット率１６００との差を計算し、その差が所定の範囲に入っているかを判断する。入っていれば、ステップ１３００６へジャンプする。
【０２２７】
ステップ１３００２：入っていない場合、プロセッサ２６０は、過去のキャッシュ容量１６０２、ヒット数１６０２、ミス数１６０３から、目標ヒット率１６００を達成するのに必要なキャッシュ容量を予測する。具体的には、例えば、プロセッサ２６０は、過去のキャッシュ容量と、過去のヒット数１６０２及びミス数１６０３とを基に算出した過去のヒット率から、目標ヒット率１６００を達成するためのキャッシュ容量を予測する。より具体的には、例えば、プロセッサ２６０は、過去のキャッシュ容量と過去のヒット率との関係から、ヒット率＝Ｆ（Ｘ）（Ｘはキャッシュ容量）となるような関数を近似的に導出して、この関数に、目標ヒット率を入力して、得られた値を、キャッシュ容量と予測値とすることができる。次に、プロセッサ２６０は、最新ポインタ１６０１を１つ進める。プロセッサ２６０は、予測したキャッシュ容量を、最新ポインタ１６０１が示すキャッシュ容量１６０２にセットし、ヒット数１６０３、ミス数１６０４を０クリアする（０にリセットする）。
【０２２８】
ステップ１３００３: プロセッサ２６０は、設定したキャッシュ容量１６０２が、これまでの（最新ポインタ１６０２より１つ前の）キャッシュ容量１６０２より大きい場合、ステップ１３０００５へジャンプする。
【０２２９】
ステップ１３００４:この場合、プロセッサ２６０は、記憶装置に基づくキャッシュ領域を増やす必要がある。ここでは、プロセッサ２６０は、指定された記憶装置グループから、空き実ページを必要数、確保する。例えば、プロセッサ２６０は、記憶装置グループから均等に実ページを、空き実ページ管理情報キュー２２０１から確保し、キャッシュボリューム２００の中の実ページを割り当てていない仮想ページに割り当てる。次に、プロセッサ２６０は、仮想ページあたりのセグメント数と割り当てた仮想ページ数から、有効になったセグメント数を計算し、対応する記憶装置の無効セグメントキュー１３０２から、その数のセグメント管理情報２５００を取り出し、空きセグメントキュー１３０１につなげる。この際、プロセッサ２６０は、各セグメント管理情報２８５０のセグメントアドレス１５０１に、当該論理ボリュームの識別子と相対アドレスを設定する。 
【０２３０】
ステップ１３００５：この場合、プロセッサ２６０は、記憶装置のキャッシュ領域を減らす必要がある。ここでは、プロセッサ２６０は、返却する実ページを決め（すなわち、キャッシュボリュームに割り当てられ得る実ページからホストボリュームに割り当てられ得る実ページへとの変更される実ページを決め）、すでに空き状態にあるセグメント管理情報２８５０を、無効セグメントキューに戻し、データを格納しているセグメント管理情報２５００を、ＬＲＵ位置に達し、セグメント管理情報２８５０が空き状態になったとき、無効セグメントキューに戻す。したがって、プロセッサ２６０は、ステップ１３００２で計算したキャッシュ容量から、減らすべき実ページ数を計算し、仮想ページから解放する実ページを決定する。そして、プロセッサ２６０は、論理ボリューム情報２０００の中で、該当する仮想ページに対応したページ返却フラグ２００８をオンにする。さらに、プロセッサ２６０は、空きセグメント情報キュー１３０１をサーチして、対応する実ページに含まれるセグメントのセグメント管理情報２８５０を、無効セグメントキュー１３０２に戻す。また、このとき、プロセッサ２６０は、ページあたりに含まれるセグメントの数から、無効セグメントキュー１３０２に戻したセグメントの数を減算する。減算後の値が０なら、すべてのセグメントを無効にできたので、減算後の値が０でない場合に行う処理は行われない。減算後の値が０でない場合、プロセッサ２６０は、論理ボリューム情報２０００の中で、該当する仮想ページに対応したページ返却フラグ２００８をオンにし、減算した値を使用セグメント数２００７にセットする。
【０２３１】
ステップ１３００６：プロセッサ２６０は、最新ポインタ１６０１を１つ進める。プロセッサ２６０は、１つ前のキャッシュ容量１６０２に、最新ポインタ１６０２が示すキャッシュ容量１６０２にセットし、ヒット数１６０３、ミス数１６０４を０クリアする。
【０２３２】
図２２は、実施例１における情報システムの別の構成例である。
【０２３３】
図１の構成では、ストレージステム１００が、ホスト１１０とSAN１２０を経由して接続されていた。一方、図２２では、ホスト１１０とストレージシステム１００が、１つのIT装置（ITプラットフォーム）１３０の中に実装され、連絡機構１４０を経由して、接続されている形態である。連絡機構１４０は、論理的な機構であっても物理的な機構であってもよい。この構成においても、本発明は有効で、これまで説明してきたストレージシステム１００の構成、機能も同様に有効である。
【実施例２】
【０２３４】
以下、実施例２を説明する。その際、実施例１との相違点を主に説明し、実施例１との共通点については説明を省略或いは簡略する。
【０２３５】
図２８は、実施例２における情報システムの構成図である。
【０２３６】
実施例２では、複数のストレージシステム１００によって構成される仮想ストレージシステム１５０が存在する。本実施例では、仮想ストレージシステム１５０は、１つであるが、複数存在しても、本発明は有効である。また、それぞれのストレージステム１００はSAN１２０経由で接続されているものとする。さらに、ストレージステム１００の中に、WAN１６０経由で接続されるものがあってもよい。この場合、ストレージシステム１００の間の距離はかなり長いものになるが、１つの仮想ストレージシステム１５０に含まれるものとする。本実施例では、仮想ストレージシステム１５０を構成するすべてのストレージシステム１００は、SAN１２０、WAN１６０経由で、お互いに、通信可能であるとする。ただし、本発明は、仮想ストレージシステム１５０を構成するストレージシステム１００の中に、通信ができないものがあっても有効である。また、仮想ストレージシステム１５０において、複数のストレージシステム１００が直列に接続されていても良い。ホスト１１０は、論理的には、個々のストレージシステム１００を認識しているのではなく、仮想ストレージシステム１５０を認識する。また、ホスト１１０は、物理的には、仮想ストレージステム１５０に含まれる少なくとも１つのストレージシステム１００と接続される。ホスト１１０と直接接続されていないストレージシステムには、ホスト１１０は、仮想ストレージシステム１５０に含まれるストレージシステム１００経由でアクセスする。また、個々のストレージシステム１００は、そのストレージシステム１００が属する仮想ストレージシステム１５０の識別子と、そのストレージシステム１００の識別子の２種類をもつ。また、ポート１７０は、ホスト１１０からの要求（リード要求及びライト要求）を受け取る装置で、ホスト１１０は、ポート１７０と仮想論理ボリュームを指定して、リード要求及びライト要求を発行する。仮想論理ボリュームは、仮想ストレージシステム１５０内に定義された論理ボリュームで、仮想論理ボリュームの識別子は、仮想ストレージシステム１５０内で、ユニークである。仮想論理ボリュームは、１以上のストレージシステムが有する１以上の論理ボリュームが仮想化された論理ボリュームである。ストレージシステム１００内のストレージコントローラ２００は、仮想論理ボリュームのアクセス先を指定したアクセス要求（リード要求又はライト要求）を受けた場合、そのアクセス先に対応する論理ボリュームをそのストレージシステム１００が有していれば、その論理ボリュームに対するアクセスを行い、そのアクセス先に対応する論理ボリュームを別のストレージシステム１００が有していれば、その別のストレージシステム１００へ０以上のストレージシステム１００を介して上記アクセス要求を転送する。上記アクセス要求を受けた別のストレージシステム１００からの応答は、転送されたアクセス要求を経由した０以上のストレージシステム１００を介して、転送元のストレージシステム１００に受信されて良い。応答を受けたストレージシステム１００内のストレージコントローラ２００は、その応答をホスト１１０に送信して良い。管理サーバは、ホスト１１０、仮想ストレージシステム１５０を管理するサーバである。図２８の構成では、管理サーバ１９０が存在するが、管理サーバが存在しない場合にも、本実施例は有効である。
【０２３７】
実施例２では、ストレージシステム１００は、仮想ストレージシステム１５０を構成する別のストレージシステム１００内のデータを、当該ストレージシステム１００の記憶装置（キャッシュボリューム）にキャッシングする。
【０２３８】
実施例２が実施例１と異なるのは、別のストレージシステム１００のデータを、当該ストレージシステム１００の記憶装置にキャッシングすることである。以下、リード要求／ライト要求を受けキャッシングを行うストレージシステムを「第１のストレージシステム」と言い、リード対象のデータを格納している又はライト対象のデータの格納先となるストレージシステムを「第２のストレージシステム」と言うことがある。具体的には、例えば、実施例２では、下記の処理が行われる。第１のストレージステム１００が、第２のストレージシステム１００のデータをキャッシングするためには、第１のストレージシステム１００が、ホスト１００からのリード要求／ライト要求を受け取れるようにする必要がある。したがって、実施例２では、複数のストレージシステムを１つの仮想ストレージステム１５０を定義し、リード要求／ライト要求を受け取るために、個々のストレージシステム１１０がもつポート１７０については、ホスト１１０には、仮想的なストレージシステムがすべてもつように見せる。ホスト１１０は、仮想ストレージシステム１５０のポート情報１８０を持つが、リード要求／ライト要求を受け付けるポート１７０を変更する通知を行うことで、キャッシングを行う第１のストレージシステム１００が、データを格納している第２のストレージシステム１００へのリード要求／ライト要求を受け取ることができ、キャッシングを行うことができる。
【０２３９】
実施例２では、第１のストレージシステム１００が第２のストレージシステム１００のデータをキャッシングするので、アクセスしたデータが、ヒット(キャッシュに存在)した場合、データを記憶している第２のストレージシステム１００から、キャッシングする第１のストレージシステム１００に、データを転送する時間を、アクセスするホスト１１０から見ると短縮することができる。このため、この短縮可能な時間を考慮して、キャシングを行う必要がある。故に、それぞれのストレージシステム１００は、仮想ストレージシステム１５０を構成するどのストレージシステム１００のデータを、自分のストレージシステム１００のどの記憶装置にキャッシングを行うかを決定する。これは、アクセスするホスト１００から、キャッシングを行うことにより得られる効果により決定する。この効果とは、まず、ホストからアクセス時間が短いストレージシステム１００にキャッシングを行うのが効率的である。つまり、データが格納されている第２のストレージシステム１００がデータにアクセスするホスト１１０から距離があるような場合、ホスト１１０に近い第１のストレージシステム１００で、キャッシングを行うことで、ホスト１１０へデータを転送する時間が削減できる。ストレージシステム１００間の距離が長くなったり、遅延の大きいネットワークで接続されている場合、キャッシングの効果が大きい。このため、データが恒久的に格納されている記憶装置と同等のアクセス性能の記憶装置にデータがキャッシングされも効果がある。場合によっては、データが恒久的に格納されている記憶装置よりもアクセス性能がある程度落ちる記憶装置にそのデータがキャッシングされても、効果が期待できる。このため、ストレージシステム１００間のデータ転送時間を考慮したキャッシングを行う必要がある。
【０２４０】
図３０は、実施例２におけるストレージシステム１００の共有メモリ２２０に記憶される情報を示している。
【０２４１】
実施例２では、更に、仮想ストレージシステム情報４０１０、外部論理ボリューム情報４１１０、ホスト情報４２１０が記憶される。
【０２４２】
図３１は、仮想ストレージステム情報４０００の構成を示す。
【０２４３】
仮想ストレージシステム情報４０００は、仮想ストレージシステム識別子４００１、ストレージシステム数４００２、他ストレージシステム識別子４００３、転送遅延時間４００４を含む。
【０２４４】
仮想ストレージシステム識別子４００１は、当該ストレージシステム１００が属する仮想ストレージシステム１５０の識別子である。ストレージシステム数４００２は、その仮想ストレージシステム１５０が含むストレージシステム１００の数である。ストレージシステム識別子４００３、転送遅延時間４００４は、ストレージシステム数４１０２に含まれる数より１小さい数だけ存在する。これらは、当該ストレージシステム１００が属する仮想ストレージシステム１５０に属する他のストレージステム１００に関する情報である。他ストレージステム識別子４００３は、他のストレージシステム１００の識別子で、転送遅延時間４００４は、当該ストレージシステム１００と他のストレージシステム１００の間でデータ転送を行う際の遅延時間である。
【０２４５】
図３２は、外部論理ボリューム情報４１００の構成を示す。
【０２４６】
外部論理ボリューム情報４１００は、仮想論理ボリュームID４１０１、外部ストレージシステムID４１０２、外部論理ボリュームID４１０３、記憶装置遅延時間４１０４、キャッシングフラグ２００９、初期割り当て記憶装置２０１０を含む。外部論理ボリューム情報４１００は、当該ストレージシステムが属する仮想ストレージシステム１５０の含まれる他のストレージシステム１００の論理ボリュームごとに存在する情報である。
【０２４７】
仮想論理ボリュームID４１０１は、当該外部論理ボリュームの仮想論理ボリューム識別子である。外部ストレージシステムID４１０２、外部論理ボリュームID４１０３は、当該仮想論理ボリュームが、どのストレージシステム１００のどの論理ボリュームかを識別するための情報である。実施例２では、ホスト１１０は、リード要求／ライト要求を発行する際、仮想ストレージシステムの識別子、ポート１７０の識別子、仮想論理ボリュームの識別子を指定する。ストレーシシステム１００は、指定されたポート１２７０からリード要求／ライト要求を受け取る。ストレージシステム１００は、要求で指定された仮想論理ボリュームを見て、外部論理ボリューム情報４１１０、論理ボリューム情報２０００を参照して、どのストレージシステム１００のどの論理ボリュームに対する要求であるかを判別する。指定された仮想論理ボリュームが、外部論理ボリューム４１１０情報内の仮想論理ボリュームID４１０１に含まれれば、指定された論理ボリュームは、外部のストレージシステム１００の論理ボリュームということになる。記憶装置遅延時間４１０４は、他のストレージシステム１００内の記憶装置の遅延時間である。したがって、転送遅延時間４１０４＋記憶装置遅延時間４００５が実際の遅れになる。また、実施例２では、初期割り当て記憶装置２０１０は、ヌル状態か、該当なし、フラッシュパッケージ２３０、高速ディスク装置２６５,低速ディスク装置２９５のいずれかになる。ヌル状態は、当該論理ボリュームをキャッシングすべきかどうかを判断していないことになる。この判断を行い、キャッシングする（キャッシングフラグがオン）とした場合、初期割り当て記憶装置２０１０が、フラッシュパッケージ２３０、高速ディスク２６５,低速ディスク２９０のいずれかを示す。
【０２４８】
図３３は、実施例２の論理ボリューム情報２０００の構成である。
【０２４９】
実施例２では、論理ボリューム情報２０００は、当該ストレージシステム１００の内部の論理ボリュームごとに存在する情報となる。実施例２では、ホスト１１０は、仮想論理ボリュームを指定する。したがって、実施例２の論理ボリューム情報２０００は、仮想論理ボリューム識別子４３０１を含む。ホスト１１０から指定された仮想論理ボリュームが、論理ボリューム情報２０００内の仮想論理ボリューム識別子４３０１が示すボリュームであれば、指定された論理ボリュームは、当該ストレージシステム１００の論理ボリュームということになる。それ以外は、実施例１と同様である。また、本実施例では、ストレージシステムは、外部ストレージシステム４１０２、外部論理ボリューム識別子４１０３で示される外部論理ボリュームのデータのキャッシングを行うが、キャッシング先の記憶装置は、当該ストレージシステム１００に含まれる記憶装置である。この際、実施例１と同様、キャッシングボリュームが定義されるが、これは、内部の論理ボリュームなので、図３３に示される論理ボリューム情報２０００として定義されることになる。キャッシュボリュームは、ホストからのリード要求／ライト要求の指定対象にならないので、仮想論理ボリューム識別子４３０１はヌル状態でよい。
【０２５０】
図４０は、ホスト情報４２１０の構成である。
【０２５１】
ホスト情報４２１０は、当該ストレージシステム１００に接続されたホスト１１０の情報で、接続ホスト数４２０１、ホストID４２０２、ホスト遅延時間４２０３、接続ポート数４２０４、接続ポートID４２０５を含む。
【０２５２】
接続ホスト数４２０１は、当該ストレージシステム１００に接続されたホスト１１０の数である。ホストID４２０２、ホスト遅延時間４２０３は、接続されたホストごとに存在する情報である。ホストID４２０２は、対応するホスト１１０の識別子である。ホスト遅延時間４２０３は、当該ストレージシステム１００と対応するホスト１１０との間で、データ転送に伴い発生する遅延時間である。接続ポート数４２０４は、対応するホスト１１０がアクセス可能な当該ストレージシステム１００内のポート１７０の数である。接続ポートID４２０５は、対応するホスト１１０がアクセス可能な当該ストレージシステム１００のポート１７０の識別子であり、接続ポート数４２０４の数だけ存在する。
【０２５３】
実施例２のキャッシュ管理情報２７５０の構成は、実施例１と同様である。キャッシュドアドレス２７０７は、当該キャッシュ管理情報２７５０に対応したスロット２１１００（あるいは、セグメント）に格納したデータの論理ボリュームとその相対アドレスを示すが、実施例２の場合、当該ストレージシステム１００の論理ボリュームと、他のストレージシステムの論理ボリュームのどちらかになる。他のストレージシステム１００の場合、そのストレージシステムの識別子が、キャッシュドアドレス２７０７に含まれることになる。
【０２５４】
空きセグメントキュー１３０１、無効セグメントキュー１３０２は、実施例１では、フラッシュパッケージ２３０対応の情報が有効であったが、実施例２では、フラッシュパッケージ２３０、高速ディスク２６５、低速ディスク９０、いずれの空きセグメントキュー１３０１、無効セグメントキュー１３０２も有効となる。また、ヒット率情報２９８０も、フラッシュパッケージ２３０、高速ディスク２９０、低速ディスク２６５、いずれのヒット率情報２９８０も有効となる。
【０２５５】
以上の点以外は、実施例２において、ストレージシステム１００が持つ情報は、実施例１と同様で良い。
【０２５６】
実施例２では、ホスト１１０が、ポート情報１８０を持つ。
【０２５７】
図３９は、ポート情報１８０のフォーマットである。
【０２５８】
ポート情報１８０は、仮想ストレージID１８１、ポート数１８２、ポート識別子１８３、仮想ボリューム数１８４、仮想ボリューム識別子１８５を含む。本実施例では、仮想ストテージシステム１５０は、１つであるが、複数存在しても、本発明は有効である。
【０２５９】
仮想ストレージID１８１は、当該ホスト１１０に接続した仮想ストレージシステム１５０の識別子である。ポート数１８２は、仮想ストレージシステム１５０が持つポート１７０の数である。実際には、ポート１７０は、それぞれのストレージシステム１００がもっているが、ホスト１１０からは、見かけ上、仮想ストレージシステム１５０が持っているように見える。ポート識別子１８３は、仮想ストレージシステム１５０がもつポート１７０の識別子である。したがって、ポート識別子１８３は、ポート数１８２に示された数分存在することになる。仮想ボリューム数１８４は、それぞれのポート１７０からアクセス可能な仮想論理ボリュームの数である。仮想ボリュームID１８５は、対応するポート１７０からアクセス可能な仮想論理ボリュームの識別子である。したがって、対応するポート１７０の仮想ボリューム数だけ、仮想ボリュームID１８５は存在することになる。また、１つの仮想論理ボリュームは、複数のポート１７０からアクセスしてもよいので、同一の仮想論理ボリュームの識別子が、異なったポート１７０の仮想ボリュームID１８５に定義されていてもよい。
【０２６０】
次に、上記に説明した管理情報を用いて、実施例２において、ストレージコントローラ２００が実行する動作の説明を行う。
【０２６１】
図４１は、実施例２においてプロセッサ２６０が実行するメモリ２７０上のプログラムが示されている。
【０２６２】
実施例２においては、図１７に示した各プログラムに加えて、キャッシング判別処理部４８００、遅延送信部４９００が存在する。ただし、リード処理実行部４０００、ライト要求受付部４１００、スロット確保部４２００、セグメント確保部４３００、記憶装置選択部４７００は、実施例１とは異なる。
【０２６３】
まず、キャッシング判別部４８００、遅延送信部４９００の説明を行う。次に、リード処理実行部４０００、ライト要求受付部４１００、スロット確保部４２００、セグメント確保部４３００、記憶装置選択部４７００は、実施例１と、異なる部分について、説明を行う。
【０２６４】
図３４は、キャッシング判別処理部４８００の処理フローである。キャッシング判別処理部４８００は、適当な周期で、プロセッサ２０６が処理する。
【０２６５】
ステップ１４０００：ここでは、プロセッサ２６０は、他のストレージシステム１００上の論理ボリュームの中で、初期割り当て記憶装置２０１０がヌルの外部論理ボリューム情報４１００を探す。見つからなかったら処理を終了する。
【０２６６】
ステップ１４００１：ここでは、当該ストレージシステム１００でキャッシングを行うべきかを判断するために、まず、プロセッサ２６０は、見つけた外部論理ボリューム情報４１１の仮想論理ボリュームID４１０１から仮想論理ボリュームの識別子を取り出す。
【０２６７】
ステップ１４００２：プロセッサ２６０は、当該仮想論理ボリュームが当該ストレージシステム１００と接続されているホスト１１０からアクセスされているかを確認するため、接続されているすべてのホスト１１０に、仮想論理ボリュームの識別子を送る。この送信は、SAN１２０、WAN１６０経由でも、管理サーバ１９０経由どちらでもよい。
【０２６８】
ステップ１４００３：プロセッサ２６０は、ホスト１１０からの回答を待つ。
【０２６９】
ステップ１４００４：プロセッサ２６０は、当該ストレージシステム１００から接続されているホスト１１０の中に、対応する仮想論理ボリュームをアクセスしているホスト１１０があったかを確認する。アクセスしているホスト１１０がなければ、ステップ１４０１８へジャンプする。
【０２７０】
ステップ１４００５：プロセッサ２６０は、当該仮想論理ボリュームをアクセスしているホスト１１０のホストID４２０２とホスト遅延時間４２０３を取り出す。
【０２７１】
ステップ１４００６: プロセッサ２６０は、取り出したこれらの値と認識している仮想論理ボリュームの識別子を、仮想ストレージシステム１５０を構成する他のストレージシステム１００に送る。
【０２７２】
ステップ１４００７：プロセッサ２６０は、回答が返ってくるのを待つ。
【０２７３】
ステップ１４００８：ここでは、プロセッサ２６０は、当該ストレージシステム１００で、キャッシングを行うのが効果的かを判断する。まず、プロセッサ２６０は、この仮想論理ボリュームに対応する論理ボリュームを含むストレージシステム１００から送られてきた、ホスト１１０との間の遅延時間と当該ストレージシステム１００のホスト遅延時間４２０３を比較し、当該ストレージシステム１００のホスト遅延時間４２０３のほうがある範囲より小さければ、当該ストレージシステム１００でキャッシングを行う可能性を残す。これは、多少遅延時間が短いくらいでは、その論理ボリュームを含むストレージシステム１００に、ホスト１１０が直接アクセスしたほうがよいと考えられるためである。その論理ボリュームを含むストレージシステム１００かどうかは、ステップ１４０００で認識した外部論理ボリューム情報４１１０に含まれる外部ストレージシステムID４１０２を用いて判別することができる。つぎに、プロセッサ２６０は、残りのストレージシステム１００から返ってきた遅延時間と当該ストレージシステム１００のホスト遅延時間４２０３を比較し、当該ストレージシステム１００のホスト遅延時間４２０３が、最も短いとき、当該ストレージシステム１００でキャッシングを行うのが効果的と判断する。そうでなければ、ステップ１４０１７へジャンプする。
【０２７４】
ステップ１４００９：プロセッサ２６０は、対応する仮想論理ボリュームへのアクセスを当該ストレージステムに発行させるため、仮想論理ボリュームの識別子と対応するホスト１００に接続されたポート１７０の識別子を、対応するホストに送る。この送信は、SAN１２０、WAN１６０経由でも、管理サーバ１９０経由どちらでもよい。この要求を受け取ったホスト１１０は、それまで当該仮想論理ボリュームにアクセスしていたポート１７０を、当該ステップで送ったポート１７０に切り換えることになる。この場合、ホスト１１０は、仮想ストレージシステムと仮想論理ボリュームは変化なく、当該仮想論理ボリュームをアクセスする（同一の仮想ストレージシステム１５０内の）ポート１７０をかえるよう要求しているだけであるため、ホスト１１０からは、矛盾ないように見えるので、切り換えがうまくいく。仮想ストレージシステム１５０がないと、アクセスするポート１７０を別のストレージシステム１００に移すと、アクセスするストレージシステム１００と論理ボリュームが変更になってしまう。この変更は、ホスト１１上のアプリケーションプログラムに影響があるので、本実施例では、仮想ストレージシステム１５０を導入することで、うまくポート１７０を変更して、リードライト要求を受け取るストレージシステム１００を変更できる。
【０２７５】
ステップ１４０１０プロセッサ２６０は、：完了報告を待つ。
【０２７６】
ステップ１４０１１：プロセッサ２６０は、転送遅延時間４１０４と記憶装置遅延時間４００５とを合計する。
【０２７７】
ステップ１４０１２：プロセッサ２６０は、ステップ１４０１１の合計値が、低速ディスクのアクセスタイムより十分大きいか（例えば所定値以上に大きいか）を判別する。そうでなければ、ステップ１４００４へジャンプする。
【０２７８】
ステップ１４０１３：プロセッサ２６０は、初期割り当て記憶装置２０１０に、低速ディスクを設定し、キャッシングフラグをオンにして、ステップ１４０００へジャンプする。
【０２７９】
ステップ１４０１４：プロセッサ２６０は、ステップ１４０１１の合計値が、高速ディスクのアクセスタイムより十分大きいか（例えば所定値以上に大きいか）を判別する。そうでなければ、ステップ１４００６へジャンプする。
【０２８０】
ステップ１４０１５：プロセッサ２６０は、初期キャッシング記憶装置２０１０に、高速ディスクを設定し、キャッシングフラグ２００９をオンにして、ステップ１４０００へジャンプする。
【０２８１】
ステップ１４０１６：プロセッサ２６０は、ステップ１４０１１の合計値が、フラッシュパッケージのアクセスタイムより十分大きいか（例えば所定値以上に大きいか）を判別する。そうでなければ、ステップ１４００８へジャンプする。
【０２８２】
ステップ１４０１７：プロセッサ２６０は、初期キャッシング記憶装置２０１０に、フラッシュパッケージ２３０を設定し、キャッシングフラグ２００９をオンにして、ステップ１４０００へジャンプする。
【０２８３】
ステップ１４０１８：プロセッサ２６０は、初期キャッシング記憶装置２０１０に、該当なしを設定し、キャッシングフラグをオフにする。この後、ステップ１４０００へ戻る。
【０２８４】
ストレージシステム１００から送られてきた仮想論理ボリュームの識別子を含む問合せ（ステップ１４００２で送信された問合せ）を受け取ったホスト１１０は、ホスト１１０のポート情報１８０の仮想ボリュームID１８５を参照し、受け取った仮想論理ボリュームの識別子が１つでも存在すれば、当該ホスト１１０から、その仮想論理ボリュームにアクセスしている旨を、ステップ１４００２の問合せ元のストレージシステムに通知する。この通知は、SAN１２０、WAN１６０経由でも、管理サーバ１９０経由どちらでもよい。
【０２８５】
ストレージシステムから送られてきた情報（仮想論理ボリュームとポート１７０の識別子を含んだ情報）（ステップ１４００９で送信された情報）を受け取ったとき、ホスト１１０は、下記の処理、
（１）受け取った仮想論理ボリュームとそれまで接続していたポート１７０（複数存在する場合もある）を認識し、認識した各ポート１７０の仮想論理ボリューム数１８４を１つ減算し、対応する仮想論理ボリューム識別子１８５を削除する、
（２）受け取った各ポート１７０の識別子（複数存在する場合もある）の仮想論理ボリューム数１８４を認識し、対応する仮想論理ボリューム数１８４を１つ増加し、対応する仮想論理ボリューム識別子１８５を追加する、
を行う。
【０２８６】
図４２は、遅延時間送信部４９００の処理フローである。転送時間遅延部は、仮想ストレージシステム１５０を構成する他のストレージシステムから、情報を送られてきたときに実行される。
【０２８７】
ステップ１９０００：プロセッサ２６０は、指定されたホスト１１０のホスト遅延時間４２０３を、要求の送信元のストレージシステム１００に送る。
【０２８８】
ステップ１９００１：プロセッサ２６０は、送られてきた情報を参照して、指定された仮想論理ボリュームを、当該ストレージシステム１００でキャッシングするのがよいかを判別する。まず、プロセッサ２６０は、論理ボリューム情報２０００を参照して、この仮想論理ボリュームに対応する論理ボリュームが当該ストレージシステム１００に含まれるかそうでないかを判別する。含まれる場合、プロセッサ２６０は、要求元のストレージシステム１００から送られてきた、ホスト１１０との間の遅延時間と当該ストレージシステム１００のホスト遅延時間４２０３を比較し、当該ストレージシステム１００のホスト遅延時間４２０３を比較し、要求元のストレージシステム１００のホスト遅延時間４２０３のほうがある範囲より小さければ、当該ストレージシステム１００でキャッシングを行うべきでないと判断する。この「ある範囲」は、図３４のステップ１４００８の「ある範囲」と同じ値にして、矛盾が起きないようにする。その仮想論理ボリュームが当該ストレージシステムに含まれない場合、プロセッサ２６０は、送られてきた遅延時間と当該ストレージシステム１００のホスト遅延時間４２０３を比較し、当該ストレージシステム１００のホスト遅延時間４２０３が大きい場合、当該ストレージシステム１００でキャッシングを行うべきでないと判断する。当該ストレージシステム１００で、「キャッシングを行うべきでない」と判断していなければ、処理を終了する。
【０２８９】
ステップ１９００２：プロセッサ２６０は、受け取った仮想論理ボリュームの識別子に対応するキャッシングオフフラグをオンにし、初期割り当て記憶装置を該当なしにする。
【０２９０】
図３５は、実施例２におけるリード処理実行部４０００の処理フローである。リード処理実行部４０００は、ホスト１２０から、ストレージコントローラ２００が、リード要求を受け付けたときに実行される。以下、実施例１との相違について述べる。
【０２９１】
ステップ１５０００：プロセッサ２６０は、まず、受け取ったリード要求で指定されたリード対象とする仮想論理ボリュームから、論理ボリュームを認識する。この後、ステップ５０００へ移る。
【０２９２】
実施例２の場合、ステップ５００３の後に、ステップ１５００１以降の処理が入る。
【０２９３】
ステップ１５００１:ここでは、プロセッサ２６０は、論理ボリュームが、当該ストレージシステム１００の論理ボリュームか、それ以外のストレージステム１００の論理ボリュームかを識別する。当該ストレージシステム１００の場合、ステップ５００４へジャンプする。
【０２９４】
ステップ１５００２: プロセッサ２６０は、指定された論理ボリュームをもつストレージステム１００に、指定された論理ボリュームの指定アドレスから要求されたデータを読み出す要求を発行する。
【０２９５】
ステップ１５００３: プロセッサ２６０は、指定したストレージシステム１００から、データが送られてくるのを待つ。この後、ステップ５００９へジャンプする。
【０２９６】
以上が、実施例１に対して、実施例２のリード処理実行部４０００の異なる部分である。
【０２９７】
図３６は、実施例２におけるライト要求受付部４１００の処理フローである。ライト要求受付部４１００は、ストレージコントローラ２００が、ホスト１１０からライト要求を受け付けたときに実行される。以下、実施例１との相違を述べる。
【０２９８】
ステップ１６０００：プロセッサ２６０は、最初に、受け取ったライト要求で指定された仮想論理ボリュームから、指定された論理ボリュームを認識する。
【０２９９】
ステップ１６００１：プロセッサ２６０は、指定された論理ボリュームが、当該ストレージシステムの論理ボリュームであれば、ステップ６０００へジャンプする。それ以外のストレージシステム１００の論理ボリュームであれば、ステップ６００３へジャンプする。
【０３００】
以上が、実施例１に対して、実施例２のライト要求受付部４１００の異なる部分である。
【０３０１】
図３７は、記憶装置選択部４７００の処理フローである。記憶装置選択部４７００は、移動ページスケジュール部４４００により、コールされる。実施例２では、ステップ１２００１の後に、ステップ１７０００以下の処理が追加される。
【０３０２】
ステップ１７０００：ここでは、プロセッサ２６０は、高速ディスク２６５対応のヒット率情報２９８０を選択する。また、プロセッサ２６０は、選択した記憶装置は、高速ディスク２６５であるという情報をセットする。
【０３０３】
ステップ１７００１：プロセッサ２６０は、キャッシュ容量調整部４６００をコールする。
【０３０４】
ステップ１７００２：ここでは、プロセッサ２６０は、低速ディスク２９０対応のヒット率情報２９８０を選択する。また、プロセッサ２６０は、選択した記憶装置は、低速ディスク２９０であるという情報をセットする。
【０３０５】
ステップ１７００３：プロセッサ２６０は、キャッシュ容量調整部４６００をコールする。
【０３０６】
図３８は、実施例２におけるセグメント確保４３００の処理フローである。セグメント確保部４３００は、プロセッサ２６０が、適宜実行する処理である。セグメント確保部４３００は、ホスト１２０からリード要求／ライト要求を受け取ったときに行われる処理において、空きセグメント数２８２０が一定値以下の場合に、空きセグメント数２８２０を増加させるために、起動される。以下、実施例１との相違について述べる。
【０３０７】
実施例１との相違は、ステップ８００２の後、以下のステップを実行する点である。
【０３０８】
ステップ１８０００:ここでは、プロセッサ２６０は、論理ボリュームが、当該ストレージシステム１００の論理ボリュームか、それ以外のストレージステム１００の論理ボリュームかを識別する。当該ストレージシステム１００の場合、ステップ８００３へジャンプする。
【０３０９】
ステップ１８００１: プロセッサ２６０は、指定された論理ボリュームをもつストレージステム１００に、指定された論理ボリュームの指定アドレスに、パリティ生成前ビットマップ２７０４で示されたデータを書き込む要求を発行する。
【０３１０】
ステップ１８００２:プロセッサ２６０は、指定したストレージシステム１００からの完了報告をまつ。この後、ステップ８００８へジャンプする。
【０３１１】
図２４に示した移動ページスケジュール部４４００は、基本的には、実施例１と同様である。
【０３１２】
ただし、ここで、ステップ１０００４の説明を補足する。ステップ１０００４では、種類の異なる記憶装置グループ間で実ページ内のデータを移動する際に、移動元となる記憶装置グループのページと、移動先の記憶装置グループを決定する。その際、下記の制約の範囲、
（１）キャッシュボリュームに割り当てた実ページ内のデータは、異なった種類の記憶装置グループに基づく実ページへの移動を行わない、
（２）記憶装置グループに基づく実ページへデータがキャッシングされるホストボリュームに割り当てられる実ページ内のデータは、フラッシュパッケージグループ２８０に基づく実ページへ移動しない移動先が決定される。実施例２では、新たに、該当するストレージシステム１００以外の論理ボリュームのキャッシングが行われる。したがって、上記（２）の状況は実施例１と同様である。ストレージシステム１００以外の論理ボリュームのキャッシングは、フラッシュパッケージ２３０、高速ディスク、低速ディスクのいずれかであるが、本実施例では、記憶装置グループ間では実ページ内のデータが移動しないようされる。もちろん、実施例２においても、上記（１）及び（２）の制約がなくとも、本発明は有効である。
【０３１３】
図２９は、実施例２における情報システムの別の構成である。
【０３１４】
ホスト１１０とストレージシステム１００が、１つのIT装置（ITプラットフォーム）１３０の中に実装され、連絡機構１４０を経由して、接続されている形態である。連絡機構１４０は、論理的な機構であっても物理的な機構であってもよい。この構成においても、本発明は有効で、これまで説明してきたストレージシステム１００の構成、機能も同様に有効である。
【０３１５】
以上、実施例１及び２の少なくとも１つによれば、次の事項が導き出される。
【０３１６】
ストレージシステムは、仮想ストレージシステムの基になる複数のストレージシステムのうちの１つであっても良いし、仮想ストレージシステムを提供するストレージシステムとは別のストレージシステムであっても良い。
【０３１７】
ストレージシステムは、アクセス性能の異なる２種類以上の記憶装置と、それらの記憶装置に接続された制御装置とを有する。制御装置は、ストレージシステムの外部の装置（例えば、ホスト装置又は別のストレージシステム）と通信するための上位インタフェース装置と、上記２種類以上の記憶装置と通信するための下位インタフェース装置と、キャッシュメモリを含む記憶資源と、それらに接続されプロセッサを含むコントローラとを有する。同種の記憶装置は、２以上設けられていて良い。
【０３１８】
制御装置は、複数の記憶階層を管理しており、１つの記憶階層には、アクセス性能が同等の記憶装置が属する。制御装置は、論理ボリューム（例えば、Ｔｈｉｎ  Ｐｒｏｖｉｓｉｏｎｉｎｇに従う論理ボリューム）と、複数の実ページとを管理する。論理ボリュームとして、ホストボリュームと、キャッシュボリュームとがあって良く、いずれも、実ページが割り当てられ得る論理ボリュームであって良い。ホストボリュームは、外部装置からのアクセス要求で指定され得る論理ボリューム（つまり外部装置に提供される論理ボリューム）である。キャッシュボリュームは、ホストボリューム内のデータがキャッシングされる論理ボリュームであって、外部装置からのアクセス要求で指定され得ない論理ボリューム（つまり外部装置に提供されない論理ボリューム）である。キャッシュボリュームは、記憶装置の種類毎に用意されて良い。
【０３１９】
実ページは、単一の記憶装置に基づいていても良いが、典型的には、アクセス性能が同等の複数の記憶装置で構成された記憶装置グループ（典型的には、ＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）グループ）に基づいていて良い。また、実ページは、別のストレージシステム（外部のストレージシステム）の記憶資源（例えば、別のストレージシステム内の１以上の記憶装置に基づく論理ボリューム）に基づいていても良い。
【０３２０】
２種類以上の記憶装置のうち、アクセス性能が最も高い記憶装置は、メモリパッケージであるとする。メモリパッケージは、不揮発性メモリと、不揮発性メモリに接続され上位装置（ここではストレージシステム内の制御装置）からのアクセスを制御するメモリコントローラとを有して良い。不揮発性メモリは、例えばフラッシュメモリであり、そのフラッシュメモリは、ブロック単位でデータが消去され、サブブロック単位でデータが書き込まれるタイプのフラッシュメモリ、例えばＮＡＮＤ型のフラッシュメモリで良い。ブロックは、複数のサブブロック（一般にページと呼ばれるが、論理ボリュームに割り当てられるページとは異なる）で構成されている。
【０３２１】
ヒット率として、キャッシュメモリについてのヒット率であるメモリヒット率と、キャッシュボリュームについてのヒット率であるボリュームヒット率とがあって良い。
【０３２２】
キャッシュ容量、すなわち、キャッシュ領域として使用される実ページの数の上限が決められていて良い。制御装置は、例えば、キャッシュ容量を増やすとボリュームヒット率があがるが、キャッシュ容量が上限値に達する場合には、キャッシュ容量を増やさない（つまりキャッシュ領域として使用する実ページの数を増やさない）で良い。
【０３２３】
或いは、制御装置は、空き実ページの残数に応じて、キャッシュ領域として使用する実ページの数を決定して良い。制御装置は、キャッシュボリュームよりもホストボリュームに対して優先的に空き実ページを割り当てるようにする。例えば、制御装置は、空き容量（空き実ページの総数）に対するホストボリューム未使用容量（実ページが割り当てられていない仮想ページの総数）が所定割合以上であれば、残りの空き実ページをホストボリューム用とし、キャッシュボリュームに割当てないようにして良い。或いは、複数の実ページのうちキャッシュ領域として使用可能な実ページが予め決められていて、その範囲で、空き実ページがキャッシュボリュームに割り当てられて良い。
【０３２４】
また、制御装置は、ホストボリュームに格納されるアクセス対象データ（ホストからのアクセス要求に従うデータ）のキャッシング先の実ページとして、アクセス対象データを記憶する記憶装置の性能よりも高いアクセス性能の記憶装置に基づく実ページを選択するようにする。従って、例えば、制御装置は、ホストボリュームに割り当てられている、メモリパッケージに基づく実ページに、アクセス対象データが格納されている場合、そのアクセス対象データのキャッシング先として、メモリパッケージに基づく実ページを選択し無いようにする。すなわち、例えば、この場合には、制御装置は、アクセス対象データのキャッシング先として、キャッシュメモリと実ページの両方を使用せず、キャッシュメモリのみを使用して良い。
【０３２５】
しかし、仮想ストレージシステム（複合型ストレージシステム）の場合であれば、制御装置は、ホストとこの制御装置を含む第１のストレージシステムとの間の通信についての遅延時間（転送時間長）と、第１のストレージシステムとアクセス対象のデータを格納している第２のストレージシステムとの間の通信についての遅延時間（転送時間長）とに基づいて、アクセス対象データを記憶する記憶装置（第２のストレージシステム）の性能と同等又はそれよりも低いアクセス性能の記憶装置に基づく実ページを選択しても良い。
【０３２６】
制御装置は、リード要求又はライト要求をホスト装置から受信した場合、キャッシュボリュームよりも先にキャッシュメモリについてヒット（領域確保できたか）か否かを判定し、ミスであった場合に、キャッシュボリュームについてヒットか否かを判定する。
【０３２７】
なお、例えば、キャッシュ領域として使用する複数の実ページが同一の記憶装置に基づいていると、その記憶装置にアクセスが集中し、その記憶装置がボトルネックになってしまう。そこで、それを回避するべく、制御装置は、記憶装置間（記憶装置グループ間）で実ページ内のデータを移動する。その際、実ページが、フラッシュパッケージグループに基づいていれば、制御装置は、各メモリパッケージから消去回数を受信し、フラッシュパッケージグループの消去回数がなるべく均一になるように、実ページ内のデータを移動する。例えば、制御装置は、消去回数の総数が多い第１のフラッシュパッケージグループと、消去回数の総数が少ない第２のフラッシュパッケージグループとがある場合、第１のフラッシュパッケージグループに基づくキャッシュ領域（実ページ）内のデータを第２のフラッシュパッケージグループに基づく実ページに移動する。これにより、負荷分散と消去回数の均等化の両方を実現することができる。すなわち、書き換え頻度がキャッシュ領域ではない実ページよりも多いと考えられる実ページ（キャッシュ領域）の基になるフラッシュパッケージグループが、第１のフラッシュパッケージから第２のフラッシュパッケージに変わるので、消去回数の均等化が期待できる。なお、その際、移動元は、第１のフラッシュパッケージグループに基づく複数の実ページのうちアクセス頻度が最も高い実ページであって、移動先は、第２のフラッシュパッケージグループに基づく複数の実ページのうちアクセス頻度が最も低い実ページであることが好ましい。
【０３２８】
また、制御装置は、キャッシュ領域として使用している実ページ内のデータを、その実ページの基づく記憶装置のアクセス性能と同等の（又はそれより低い）アクセス性能の記憶装置に基づく実ページに移動しないよう制御する。
【０３２９】
また、仮想ストレージシステムに関して、ホスト計算機が、そのホスト計算機が発行するアクセス要求で指定可能なアクセス先情報（例えば、ストレージシステムが有するポートの番号）を含んだ情報であるポート情報を有する。管理計算機（例えば実施例２の管理サーバ１８０）が、ホスト毎に、そのホストが有するポート情報に記述されるアクセス先情報を、仮想ストレージシステムを構成する複数のストレージシステムのうちそのホストからの距離が所定距離未満である（例えばレスポンスタイムが所定時間以内となる）ストレージシステムが有するポートに関する情報に制限する。言い換えれば、管理計算機は、ホストがアクセス先とすることができるストレージシステムとして、そのホストから所定距離以上にあるストレージシステムを選択しないようにする（例えば、ホストが有するポート情報１８０から、そのホストが選択してはならないポートＩＤを記載しないでおく（或いは、例えば、仮想ストレージシステムが有する全てのポートのＩＤを記載しておいて、無効とするポートＩＤのみ無効化しておく））。
【０３３０】
制御装置は、ボリュームヒット率が所定値未満となった場合には、キャッシュボリュームへのキャッシングを中止して良い。その際、制御装置は、キャッシュボリュームに既に割り当たっている実ページ内のデータを、キャッシュメモリに移動して、その実ページを解放しても良いし、キャッシュボリュームに既に割り当たっている実ページ内のデータをキャッシュメモリに移動することなくその実ページを解放しても良い。また、制御装置は、共有メモリ内のキャッシュ管理情報を参照し、メモリヒット率が高くなってきたようであれば、キャッシュボリュームへのキャッシングを再開して良い。
【０３３１】
また、ホストからアクセス要求を受けた制御装置は、仮想ストレージシステムにおいて、この制御装置を含むストレージシステムである第１のストレージシステムからアクセス対象データを格納している第２のストレージシステムとの間の第１の遅延時間（転送時間）を基に、キャッシング先の実ページの基になる記憶装置を選択して良い。
【０３３２】
また、第１のストレージシステム内の制御装置は、第１の遅延時間に加えて、仮想ストレージシステムの各ストレージシステムに接続されているホストとの間の第２の遅延時間を基に、キャッシング先の実ページの基になる記憶装置を選択して良い。
【０３３３】
また、制御装置（又は仮想計算機）が、ホストのアクセス先のストレージシステムを変更させて良い（例えば、そのホストが有するポート情報中のアクセス先情報を書き変えて良い）。
【０３３４】
また、制御装置は、ボリュームヒット率に応じて、キャッシュ領域として使用可能な実ページの数を調整（増加又は減少）して良い。ボリュームヒット率は、記憶装置の種類別に計測されて良い。
【０３３５】
また、制御手段は、実ページ（或いは実ページの割当先の仮想ページ）のアクセス状況のような混雑度を計測し、実ページの混雑度に基づいて、移動元と移動先の実ページを決定し、同種又は異種の記憶装置間で、移動元実ページから移動先実ページへデータを移動させて良い。
【０３３６】
以上、幾つかの実施例を説明したが、本発明は、上記の実施例に限られない。
【符号の説明】
【０３３７】
１００…ストレージシステム、１１０…ホスト、１２０…ストレージエリアネットワーク（SAN)、１４０…連絡機構、１５０…仮想ストレージシステム、１６０…ワールドエリアネットワーク（WAN）、１７０…ポート、１８０…ポート情報、２００…ストレージコントローラ、２１０…キャッシュメモリ、２２０…共有メモリ、２３０…フラッシュパッケージ、２６５…高速ディスク装置、２９０…低速ディスク装置、２４０…タイマ、２５０…接続装置、２６０…プロセッサ、２７０…メモリ、２８０…フラッシュパッケージグループ、２８５…高速ディスクグループ、２９５…低速ディスクグループ、２０５０…ストレージシステム情報、２０００…論理ボリューム情報、２１００…実ページ情報、２３００…記憶装置グループ情報、２５００…記憶装置情報、２７５０…キャッシュ管理情報、２７６０…スロット管理情報、２８５０…セグメント管理情報、４０１０…仮想ストレージシステム情報、４１１０…外部論理ボリューム情報、４２１０…ホスト情報、４０００…リード処理実行部、４１００…ライト処理受付部、４２００…スロット確保部、４３００…セグメント確保部、４４００…移動ページスケジュール部、４５００…実ページ移動処理実行部、４６００…キャッシュ容量調整部、４７００…記憶装置選択部、４８００…キャッシング判別処理部、４９００…遅延送信部
【図１】
2015517697.tif 000003
【図２】
2015517697.tif 000004
【図３】
2015517697.tif 000005
【図４】
2015517697.tif 000006
【図５】
2015517697.tif 000007
【図６】
2015517697.tif 000008
【図７】
2015517697.tif 000009
【図８】
2015517697.tif 000010
【図９】
2015517697.tif 000011
【図１０】
2015517697.tif 000012
【図１１】
2015517697.tif 000013
【図１２】
2015517697.tif 000014
【図１３】
2015517697.tif 000015
【図１４】
2015517697.tif 000016
【図１５】
2015517697.tif 000017
【図１６】
2015517697.tif 000018
【図１７】
2015517697.tif 000019
【図１８】
2015517697.tif 000020
【図１９】
2015517697.tif 000021
【図２０】
2015517697.tif 000022
【図２１】
2015517697.tif 000023
【図２２】
2015517697.tif 000024
【図２３】
2015517697.tif 000025
【図２４】
2015517697.tif 000026
【図２５】
2015517697.tif 000027
【図２６】
2015517697.tif 000028
【図２７】
2015517697.tif 000029
【図２８】
2015517697.tif 000030
【図２９】
2015517697.tif 000031
【図３０】
2015517697.tif 000032
【図３１】
2015517697.tif 000033
【図３２】
2015517697.tif 000034
【図３３】
2015517697.tif 000035
【図３４】
2015517697.tif 000036
【図３５】
2015517697.tif 000037
【図３６】
2015517697.tif 000038
【図３７】
2015517697.tif 000039
【図３８】
2015517697.tif 000040
【図３９】
2015517697.tif 000041
【図４０】
2015517697.tif 000042
【図４１】
2015517697.tif 000043
【図４２】
2015517697.tif 000044
【国際調査報告】
2015517697.tif 000045
2015517697.tif 000046