(57)【要約】  ストレージシステムは、第１階層の記憶領域を提供し、消去回数と消去可能回数とに基づき消費寿命率が決定される、複数の第１記憶デバイスと、第２階層の記憶領域を提供し、消去可能回数が規定されていない、複数の第２記憶デバイスと、第１階層と第２階層との間でデータ再配置を実行する、コントローラと、を含む。コントローラは、複数の第１記憶デバイスの消費寿命率に基づき、ホストからのリードアクセスに対する重みとライトアクセスに対する重みと、を決定し、リードアクセスに対する重みと、ライトアクセスに対する重みと、第２階層に格納されているデータに対する期間内のリード回数と、データに対する前記期間内のライト回数と、に基づき、データを前記第１階層に移動するか否か判定する。
2016170631.tif 000002
【特許請求の範囲】
【請求項１】
第１階層と第２階層を含む複数の階層から、記憶領域を仮想ボリュームに割り当てる、ストレージシステムであって、
前記第１階層の記憶領域を提供し、消去回数と消去可能回数とに基づき消費寿命率が決定される、複数の第１記憶デバイスと、
前記第２階層の記憶領域を提供し、消去可能回数が規定されていない、複数の第２記憶デバイスと、
前記第１階層と前記第２階層との間でデータ再配置を実行する、コントローラと、を含み、
前記コントローラは、
前記複数の第１記憶デバイスの消費寿命率に基づき、ホストからのリードアクセスに対する重みとライトアクセスに対する重みと、を決定し、
前記リードアクセスに対する重みと、前記ライトアクセスに対する重みと、前記第２階層に格納されているデータに対する期間内のリード回数と、前記データに対する前記期間内のライト回数と、に基づき、前記データを前記第１階層に移動するか否か判定する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記コントローラは、
前記期間におけるリード頻度及びライト頻度を計算し、
前記リード頻度及び前記ライト頻度を、それぞれ、前記リードアクセスに対する重みと前記ライトアクセスに対する重みにより補正し、
補正された前記リード頻度と前記ライト頻度とにより、前記期間における第１Ｉ／Ｏ頻度指標を決定し、
前記第１Ｉ／Ｏ頻度指標に基づき、前記データを前記第１階層に移動するか否か判定する、ストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記コントローラは、
前記期間における前記リード頻度及び前記ライト頻度を加算して、前記期間における第２Ｉ／Ｏ頻度指標を決定し、
前記第１Ｉ／Ｏ頻度指標及び前記第２Ｉ／Ｏ頻度指標が閾値を越える場合に、前記データを前記第１階層に移動すると判定する、ストレージシステム。
【請求項４】
請求項１に記載のストレージシステムであって、
前記リードアクセスに対する重みは、カウンタの値を１単位だけ変化させるために必要なリード回数を示し、
前記ライトアクセスに対する重みは、前記カウンタの値を１単位だけ変化させるために必要なライト回数を示し、
前記コントローラは、
前記データに対する前記必要なリード回数のリードアクセス毎に前記カウンタの値を変化させ、
前記データに対する前記必要なライト回数のライトアクセス毎に前記カウンタの値を変化させ、
前記カウンタが初期値から所定値に達するまでの時間に基づき、前記データを前記第１階層に移動するか否か判定する、ストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記コントローラは、
第１期間における前記データに対するリード回数及びライト回数を測定し、
前記複数の第１記憶デバイスの消費寿命率に基づき、前記第１期間におけるリードアクセスに対する第１リード重みとライトアクセスに対する第１ライト重みを決定し、
前記第１期間における前記リード回数及び前記ライト回数、並びに、前記第１リード重み及び前記第１ライト重み、に基づき、前記第１期間における第１Ｉ／Ｏ頻度指標を計算し、
前記第１Ｉ／Ｏ頻度指標に基づき、前記データを前記第１階層に移動するか否か判定し、
前記第１期間よりも短い第２期間における前記データに対するリード回数及びライト回数を測定し、
前記複数の第１記憶デバイスの消費寿命率に基づき、前記第２期間におけるリードアクセスに対する第２リード重みとライトアクセスに対する第２ライト重みを決定し、
前記第２期間における前記リード回数及び前記ライト回数、並びに、前記第２リード重み及び前記第２ライト重み、に基づき、前記第２期間における第２Ｉ／Ｏ頻度指標を計算し、
前記第２Ｉ／Ｏ頻度指標に基づき、前記データを前記第１階層に移動するか否か判定する、ストレージシステム。
【請求項６】
請求項１に記載のストレージシステムであって、
前記複数の第１記憶デバイスは複数のグループに分割され、
前記コントローラは、
前記複数のグループそれぞれの消費寿命率を管理し、
前記複数のグループそれぞれの消費寿命率に基づき、前記データを移動するグループを決定する、ストレージシステム。
【請求項７】
請求項１に記載のストレージシステムであって、
前記複数の第１記憶デバイスは複数のグループに分割され、
前記複数のグループそれぞれから、前記第１階層に記憶領域が割り当てられ、
前記コントローラは、
前記複数のグループそれぞれの消費寿命率を、前記複数のグループそれぞれを構成する第１記憶デバイスの消費寿命率から決定し、
前記複数のグループそれぞれの消費寿命率と前記複数のグループそれぞれから前記第１階層に割り当てられている記憶容量とに基づき、前記第１階層の消費寿命率を決定し、
前記第１階層の消費寿命率に基づき、前記ホストからのリードアクセスに対する重みとライトアクセスに対する重みと、を決定する、ストレージシステム。
【請求項８】
請求項１に記載のストレージシステムであって、
前記コントローラは、
前記複数の第１記憶デバイスそれぞれの理想消費寿命率を使用年数に基づき決定し、
前記複数の第１記憶デバイスそれぞれの実際消費寿命率の情報を、前記複数の第１記憶デバイスそれそれから取得し、
前記複数の第１記憶デバイスの前記理想消費寿命率と前記実際消費寿命率との差に基づき、前記ホストからのリードアクセスに対する重みとライトアクセスに対する重みと、を決定する、ストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の階層を持つストレージシステムの自動階層制御に関する。
【背景技術】
【０００２】
データ量の増大化、データ種類の多様化と、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）より高速なＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）の普及によるストレージ内のドライブの多様化により、適切な性能のドライブ階層へのデータ配置が困難となってきている。この課題に応える一手段として、データのアクセス（Ｉ／Ｏ）頻度に応じてデータを適切な記憶媒体に自動的に格納することでストレージシステムの性能を向上させる、データ自動階層配置機能の普及が進んでいる。【０００３】
一般的に自動階層配置機能は、ページという単位で記憶領域を管理し、一定の周期内（負荷モニタリングの計測期間）で、ページのＩ／Ｏ頻度が高い場合に、ページを高速なドライブで構成される上位階層へ移動（プロモーションと呼ぶ）し、ページのＩ／Ｏ頻度が低い場合に、ページを安価で低速なドライブで構成される下位階層に移動（デモーションと呼ぶ）する。例えば、特許文献１は、論理ボリューム内のアドレスのアクセス状況に応じて、複数の記憶領域グループの１つに含まれる記憶領域から他の記憶領域グループ内の記憶領域へデータを移行することを開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許８４０７４１７号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
一般に、フラッシュメモリを記憶媒体とするＳＳＤが最上位の階層として用いられる。フラッシュメモリは、消去回数に限界値を有しており、消去回数が限界値を超えると、データが書き込めない、又はデータが書き込まれても短時間でエラービットが増加する。このため、ＳＳＤのように、フラッシュメモリを記憶媒体とするフラッシュデバイス（フラッシュドライブ）は、消去回数に依存する寿命を有している。【０００６】
フラッシュメモリはデータを上書きできない記憶媒体であるため、データをライトされた領域を再利用するためには、当該領域のデータを消去する必要がある。したがって、データのライト回数と共に消去回数が増加し、残寿命が短くなる。ストレージシステムに搭載されるＳＳＤやＨＤＤは所定期間（例えば、５年）動作することを保証することが求められる。しかし、特許文献１は、階層制御におけるＩ／Ｏ頻度においてリード頻度とライト頻度を区別していないため、残寿命が短いフラッシュデバイスに、ライト頻度が高いページが割り当てられる場合がある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。本願は上記課題を解決する手段を複数含んでいるが、その一例は、第１階層と第２階層を含む複数の階層から、記憶領域を仮想ボリュームに割り当てる、ストレージシステムであって、前記第１階層の記憶領域を提供し、消去回数と消去可能回数とに基づき消費寿命率が決定される、複数の第１記憶デバイスと、前記第２階層の記憶領域を提供し、消去可能回数が規定されていない、複数の第２記憶デバイスと、前記第１階層と前記第２階層との間でデータ再配置を実行する、コントローラと、を含み、前記コントローラは、前記複数の第１記憶デバイスの消費寿命率に基づき、ホストからのリードアクセスに対する重みとライトアクセスに対する重みと、を決定し、前記リードアクセスに対する重みと、前記ライトアクセスに対する重みと、前記第２階層に格納されているデータに対する期間内のリード回数と、前記データに対する前記期間内のライト回数と、に基づき、前記データを前記第１階層に移動するか否か判定する。
【発明の効果】
【０００８】
本発明の一態様によれば、システムを高速化しつつ、フラッシュデバイスの寿命の消費を抑制できる。上記以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【０００９】
【図１】計算機システムの構成例を示す。
【図２】ストレージシステムの論理構成を示す。
【図３】パリティグループの理想消費寿命率変化の例を示す。
【図４】Ｔｉｅｒ１、プールボリューム、パリティグループ、ドライブの消費寿命率の関係例を示す。
【図５】共有メモリに格納される情報（テーブル）を示す。
【図６】ローカルメモリに格納されるプログラムを示す。
【図７】プールＶＯＬ管理テーブルの構成例を示す。
【図８】仮想ボリュームの一部の仮想ＶＯＬページに対するＩ／Ｏモニタの情報を示す。
【図９】リード係数・ライト係数設定テーブルの構成例を示す。
【図１０】必要リード回数・ライト回数設定テーブルの構成例を示す。
【図１１】プロモーション先ＰＧ優先順位設定テーブルの構成例を示す。
【図１２】ＰＤＥＶ寿命管理テーブルの構成例を示す。
【図１３】ＰＧ寿命管理テーブルの構成例を示す。
【図１４】Ｔｉｅｒ１寿命管理テーブルの構成例を示す。
【図１５】移動先プールＶＯＬ優先順位管理テーブルの構成例を示す。
【図１６】仮想ボリュームへのリード要求／ライト要求に対する処理のフローチャートを示す。
【図１７】デステージプログラムのフローチャートを示す
【図１８】非同期再配置判定プログラムのフローチャートを示す。
【図１９】Ｔｉｅｒ１の実際消費寿命率、理想消費寿命率、ＩＯＰＨ、及びＩＯＰＨＷの関係例を示す。
【図２０】モニタ更新・階層判定プログラムの動作のフローチャートを示す。
【図２１】Ｔｉｅｒ１の実際消費寿命率、理想消費寿命率、ホストＩ／Ｏ数、及び短周期Ｉ／Ｏカウンタ値の関係例を示す。
【図２２】モニタ更新・階層判定プログラムが、下位階層からＴｉｅｒ１にページデータを移動する際、移動先のパリティグループを決定する処理のフローチャートを示す。
【発明を実施するための形態】
【００１０】
以下、図面に基づいて、本発明の実施の形態を説明する。添付図面では、機能的に同じ要素を同じ番号で表示する場合がある。添付図面は、本発明の原理に則った具体的な実施形態と実施例とを示している。それらの実施形態及び実施例は、本発明の理解のためのものであり、本発明を限定的に解釈するために用いてはならない。
【００１１】
さらに、本発明の実施形態は、後述するように、汎用コンピュータ上で稼動するソフトウェアで実装しても良いし、専用ハードウェアで実装してもよいし、またはソフトウェアとハードウェアの組み合わせで実装しても良い。
【００１２】
以後の説明では、管理用の情報をテーブル形式で説明するが、管理用の情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、リスト、ＤＢ、キュー等のデータ構造やディレクトリ構造等その他の方法で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「ＤＢ」、「キュー」等について単に「情報」と呼ぶことがある。
【００１３】
以下では「プログラム」を主語（動作主体）として本発明の実施形態における各処理について説明を行う場合がある。プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、プロセッサを主語とした説明としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていても良い。各種プログラムはプログラム配布サーバや非一時的記憶メディアによって各計算機にインストールされてもよい。
【００１４】
図１は、実施形態に係る計算機システムの構成例を示す。ホスト１０１は、例えば一般的なサーバにより構成され、ネットワーク１０３を介してストレージシステム１０４のポート１０６に接続する。ホスト１０１は、ストレージシステム１０４に対してデータのリード要求やライト要求を発行する。ストレージシステム１０４は、その命令に応じてデータの読み出しや書き込みを実行する。
【００１５】
ネットワーク１０３は、例えばＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）や、イーサネットなどにより構成される。管理サーバ１０２は、ネットワーク１０３を介して、ストレージシステム１０４の保守Ｉ／Ｆ１０７またはポート１０８に接続する。ストレージ管理者が、管理サーバ１０２を用いて、ストレージシステム１０４に対して、ストレージシステムを運用する上で必要な各種設定や管理のための命令を送信する。
【００１６】
外部ストレージ１０５は、ストレージシステム１０４のポート１０８に接続される。外部ストレージ１０５は、ネットワーク１０３を経由してストレージシステム１０４のポート１０８に接続されてもよい。外部ストレージ１０５の提供するボリュームは、ストレージシステム１０４にてストレージシステム１０４内部のボリュームと同様に扱うことができる。
【００１７】
ストレージシステム１０４の内部では、内部ネットワーク１１２を介してポート１０６、保守Ｉ／Ｆ１０７、プロセッサパッケージ１０９、キャッシュメモリ１１０、共有メモリ１１１、ポート１０８、ドライブ１１３、ドライブ１１４が接続される。
【００１８】
キャッシュメモリ１１０は、ストレージシステム１０４のＩ／Ｏ処理のスループットやレスポンスを向上させるために、データを一時的なキャッシュとして格納するための高速アクセスが可能なメモリである。
【００１９】
プロセッサパッケージ１０９は、ローカルメモリ１１８とプロセッサ１１９を含んで構成される。複数のプロセッサパッケージ１０９が実装されてもよい。プロセッサ１１９はホスト１０１からのリード要求やライト要求を処理するために、ドライブ１１３、１１４、外部ストレージ１０５とキャッシュメモリ１１０との間のデータの転送処理などを実行する。
【００２０】
共有メモリ１１１は、プロセッサ１１９がリード要求やライト要求を処理し、またストレージの機能（ボリュームのコピー機能など）を実行する上で、必要な制御用の情報を格納する。共有メモリ１１１は、複数のプロセッサパッケージ１０９Ａ、１０９Ｂのプロセッサ１１９間で共有されている情報を格納する。プロセッサパッケージは、ストレージシステムのコントローラである。
【００２１】
ローカルメモリ１１８は、プロセッサ１１９がリード要求やライト要求を処理し、またストレージの機能を実行する上で、必要な制御用の情報を格納する。ローカルメモリ１１８は、プロセッサ１１９が占有して使用できる領域である。ローカルメモリ１１８は、例えばプロセッサ１１９により実行するプログラムを格納する。
【００２２】
ドライブ１１３、１１４は性能の異なる複数種類のドライブで構成されている。ドライブの種類は、例えばＦＣ（Ｆｉｂｒｅ  Ｃｈａｎｎｅｌ）、ＳＡＳ（Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ）、ＳＡＴＡ（Ｓｅｒｉａｌ  Ａｄｖａｎｃｅｄ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｔｔａｃｈｍｅｎｔ）などのインターフェイスを持つハードディスクドライブ（ＨＤＤ）、ＨＤＤと比較し、Ｉ／Ｏスループット性能、Ｉ／Ｏレスポンス性能が高いＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）である。ＳＳＤはフラッシュメディアを実装されたフラッシュデバイスである。
【００２３】
複数種類のドライブを、近い性能を持つドライブに分類したものが階層（Ｔｉｅｒ）１１５、１１６、１１７である。階層間の関係は性能の上下関係により定義される。通常は性能の高いドライブ（ＳＳＤなど）から順に、Ｔｉｅｒ１、Ｔｉｅｒ２、Ｔｉｅｒ３を構成する。外部ストレージ１０５中のドライブは、性能が低いことを前提として最下位階層として管理してもよいし、ユーザが保守Ｉ／Ｆ１０７を通して外部ストレージ１０５の性能に応じた階層を設定してもよい。
【００２４】
本実施形態において、Ｔｉｅｒ１は消去可能回数が仕様で決められているドライブの記憶領域で構成され、他の階層は、消去可能回数が仕様で決められていないドライブの記憶領域で構成される。具体的には、Ｔｉｅｒ１はＳＳＤ（フラッシュデバイス）の記憶領域で構成され、他の階層は、例えば、ハードディスクドライブ（ＨＤＤ）の記憶領域で構成される。
【００２５】
図２は、実施形態に係るストレージシステムの論理構成を示す。プロセッサ１１９がホストに提供する仮想ボリューム（仮想ＶＯＬ）２０１Ａ、２０１Ｂは、ホスト１０１から認識される論理的な記憶領域であり、ホスト１０１からのリード要求又はライト要求が発行される対象である。
【００２６】
プール２０６は、１以上のプールボリューム（プールＶＯＬ）２０３Ａ〜２０３Ｅにより構成される。プールボリューム２０３Ａ〜２０３Ｅはそれぞれドライブ１１３、１１４、外部ストレージ１０５のドライブの何れかの記憶領域から構成され、ドライブの所属する階層に応じて分類されている。つまり、プール２０６の全体の記憶領域は、複数の階層で構成されている。
【００２７】
本例では、ＳＳＤの階層１１５（プールボリューム２０３Ａに対応）と、ＳＡＳの階層１１６（プールボリューム２０３Ｂ、２０３Ｃに対応）と、外部接続の階層１１７（プールボリューム２０３Ｄ、２０３Ｅに対応）の三つの階層が存在する。
【００２８】
プロセッサ１１９は、ホスト１０１がライト要求を発行した仮想ボリューム（例えば２０１Ａ）中の対象記憶領域に、未使用の記憶領域をプール２０６から所定単位（ページ又はプールＶＯＬページと呼ぶ）で割り当てる。一つの仮想ボリュームは、一つのプールからのみ記憶領域が割り当てられる。
【００２９】
次回のホスト１０１からの仮想ボリュームへの同じ記憶領域へのリード／ライト要求に対しては、既に割り当てられているプールボリューム２０３の領域に対してＩ／Ｏ処理を実行する。仮想ボリュームの所定単位の記憶領域をページ又は仮想ＶＯＬページと呼ぶ。図２において、仮想ＶＯＬページ２０２Ａ〜２０２Ｅに対して、それぞれ、プールＶＯＬページ２０４Ａ、２０４Ｅ、２０４Ｃ、２０４Ｄ、２０４Ｆが割り当てられている。
【００３０】
プロセッサ１１９は、あたかもホスト１０１が仮想ボリューム２０１Ａ、２０１Ｂに対してＩ／Ｏ処理を実行しているように、Ｉ／Ｏ要求（リード又はライト要求）を処理する。仮想ボリュームを用いて、使用する部分のみプールボリュームの領域（ページ）を割り当てることにより、限られた記憶容量を効率的に使用できることができる。
【００３１】
各仮想ボリューム２０１Ａ、２０１Ｂを構成する仮想ＶＯＬページ毎にホストからのＩ／Ｏ処理の特性が存在する。これをアクセスローカリティと呼ぶ。例えば、Ｉ／Ｏの頻度が高い仮想ＶＯＬページと低い仮想ＶＯＬページが混在する場合、一般的にはＩ／Ｏの頻度が高い仮想ＶＯＬページのデータを上位の階層に配置したほうが、システム全体の性能を向上できる。
【００３２】
例えば、ＳＳＤ階層１１５は１００ＩＯＰＳ（Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｐｅｒ  Ｓｅｃｏｎｄ）、ＳＡＳ階層１１６は１０ＩＯＰＳ処理できるとする。さらに、５０ＩＯＰＳの特性を持つ仮想ＶＯＬページ２０２ＣにＳＡＳ階層１１６が割り当てられ、２０ＩＯＰＳの特性を持つ仮想ＶＯＬページ２０２ＡにＳＳＤ階層１１５が割り当てられているとする。
【００３３】
ホスト１０１からのページに対するＩＯＰＳの比率は一定であることが多いため、ストレージシステム１０４は、１０（ＳＡＳ階層１１６の上限）＋２０＝３０ＩＯＰＳの性能しか発揮できない。この状態をネック状態と呼ぶ。ページ２０２ＣをＳＡＳ階層１１６から、ＳＳＤ階層１１５へプロモーションすることができれば、ストレージシステム１０４は、５０＋２０＝７０ＩＯＰＳの性能を発揮できる。
【００３４】
上述のプロモーションは、具体的には、プールＶＯＬページ２０４Ｃのデータを未使用のプールＶＯＬページ２０４Ｂにコピーし、仮想ＶＯＬページ２０２ＣとプールＶＯＬページ２０４Ｃとの対応づけ２０５Ｃを、仮想ＶＯＬページ２０２ＣとプールＶＯＬページ２０４Ｂとの対応づけ２０５Ｂに変更する。デモーションによるデータ再配置も同様の方法により実行可能である。プロモーション／デモーションは、同一プール内で実行される。
【００３５】
度数分布２０７は、各プールＶＯＬページ又は割り当てられている仮想ＶＯＬページのＩ／Ｏ頻度の分布を表す。Ｉ／Ｏ頻度は、例えば、時間（ｈ）当たりのＩ／Ｏ数（ＩＯＰＨ）である。グラフ２０９は、左からＩ／Ｏ頻度の多い順番にページを並べたときの、各ページのＩ／Ｏ頻度を縦軸に表す。階層割り当て閾値は、どのＩ／Ｏ頻度のページをどの階層に割り当てるかを決める閾値である。
【００３６】
最もＩ／Ｏ頻度が高い範囲２１０Ａに属するページは、Ｔｉｅｒ１（本例ではＳＳＤ）の階層１１５に割り当てられる。範囲２１０Ａは、階層割り当て閾値２０８Ａと度数分布のグラフ２０９の交点から最も性能の高いページまでの範囲である。
【００３７】
次にＩ／Ｏ頻度が高い範囲２１０Ｂに属するページは、Ｔｉｅｒ２（本実施例ではＳＡＳ）の階層１１６に割り当てられる。範囲２１０Ｂは、階層割り当て閾値２０８Ａと度数分布のグラフ２０９の交点から、階層割り当て閾値２０８Ｂと度数分布のグラフ２０９の交点までの範囲である。
【００３８】
最もＩ／Ｏ頻度が低い範囲２１０Ｃに属するページは、Ｔｉｅｒ３（本例では外部ストレージ１０５）の階層１１７に割り当てられる。範囲２１０Ｃは、階層割り当て閾値２０８Ｂと度数分布のグラフ２０９の交点から、最小のＩ／Ｏ頻度のページまでの範囲である。以上のようにして、Ｉ／Ｏ頻度の高い順番で仮想ＶＯＬページに上位階層からプールＶＯＬページを割り当てることができる。
【００３９】
階層割り当て閾値２０８Ａ、２０８Ｂはストレージ管理者により指定されてもよいし、ストレージシステム１０４が算出してもよい。その初期値（ストレージシステム１０４を起動した後、度数分布を未作成の段階時の値）は、例えば０であり、仮想ＶＯＬページに対して上位階層のプールＶＯＬページから順に割り当ててもよい。
【００４０】
以下において、本実施形態のページ再配置を説明する。ページ再配置は、階層に割り当てられている仮想ＶＯＬページを新たな階層に割り当てる、つまり、仮想ＶＯＬページのデータを格納する新たな階層を決定し、当該階層の記憶領域（プールＶＯＬページ）にデータを移動する。本実施形態のストレージシステム１０４は、長周期Ｉ／Ｏ（負荷）モニタ結果と短周期Ｉ／Ｏ（負荷）モニタ結果に基づいて、異なる種類の周期でデータの階層制御を行う。
【００４１】
ストレージシステム１０４は、予め定められた周期（長周期）のＩ／Ｏモニタ結果を基に、ページの再配置先を決定する。具体的には、図２で示したように、ストレージシステム１０４は、一定の長周期（例えば１２時間）のＩ／Ｏのモニタ結果を基に、プール２０６の度数分布２０７を作成し、階層割り当て閾値２０８Ａ、２０８Ｂを決定する。
【００４２】
ストレージシステム１０４は、長周期における各仮想ＶＯＬページのＩ／Ｏ数から、長周期におけるＩ／Ｏ頻度の指標を決定し、当該Ｉ／Ｏ頻度指標と階層割り当て閾値２０８Ａ、２０８Ｂとに基づき、各仮想ＶＯＬページの再配置先を決定する。ストレージシステム１０４は、上述のように、長周期負荷を基準にページ配置を決めた上で、短周期負荷、つまり、短周期における仮想ＶＯＬページのＩ／Ｏ頻度に基づき、長周期負荷とは異なる基準で、階層間データ再配置を行う。
【００４３】
ストレージシステム１０４は、仮想ＶＯＬページの短周期におけるＩ／Ｏ頻度の指標が所定値に達している場合に、当該仮想ＶＯＬページを短周期でのプロモーション対象として選択しＴｉｅｒ１へ再配置する。長周期の安定的なＴｉｅｒ１ヒット率を考慮しつつ、突発的にＩ／Ｏの高いページデータもＴｉｅｒ１に配置することで、全体のＴｉｅｒ１ヒット率を向上させることができる。
【００４４】
ストレージシステム１０４は、必要であれば、空きページ領域を確保するためにＴｉｅｒ１のページデータのデモーションを実行した後に、下階層ページデータのＴｉｅｒ１へのプロモーションを実行する。例えば、ストレージシステム１０４は、Ｔｉｅｒ割り当て閾値２０８Ａ、２０８Ｂと、長周期負荷及び短周期負荷との関係から、デモーション対象のページをＴｉｅｒ１から選択する。ストレージシステム１０４は、デモーション対象ページの長周期／短周期負荷よりも高く、所定閾値を越える短周期負荷のページデータを、プロモーション対象として選択する。
【００４５】
短周期のプロモーション／デモーションは、予め定めた一定周期の長さに依存するのではなく、Ｉ／Ｏ処理に同期して階層間の移動要否を判定する。例えば、後述するように、リード要求の受信及びライトデータのドライブへのデステージに同期して移動要否が判定される。
【００４６】
本実施形態において、Ｔｉｅｒ１はフラッシュデバイスであるＳＳＤの記憶領域で構成され、他のＴｉｅｒはＨＤＤの記憶領域で構成されている。フラッシュデバイスは、消去回数に依存する寿命を有しており、データのライト回数と共に消去回数が増加し、残寿命が短くなる。
【００４７】
本実施形態のページ再配置は、Ｔｉｅｒ１に高負荷ページを集中させることで、Ｔｉｅｒ１ヒット率を向上させる一方、ＳＳＤのドライブ寿命の消費を早め、寿命仕様よりも大幅に短い期間で故障を引き起こす可能性がある。本実施形態のストレージシステム１０４は、高負荷ページの集中によるドライブ寿命の消費を考慮して、Ｔｉｅｒ１へのページデータの配置を制御する。
【００４８】
具体的には、ストレージシステム１０４は、Ｔｉｅｒ１の消費寿命率に基づき、リードアクセスとライトアクセスのそれぞれの重み（重要度）を決定し、当該重みを使用して長周期及び短周期それぞれのＩ／Ｏ頻度指標を決定する。消費寿命率は、寿命において消費された分の割合であり、例えば、消去回数／消去可能回数で表わすことができる。ライトアクセスの重みは、リードアクセスの重み以下である。これにより、Ｔｉｅｒ１の総ライト回数の増加を抑制し、Ｔｉｅｒ１の寿命消費を抑制する。
【００４９】
Ｔｉｅｒ１の消費寿命率を説明する。Ｔｉｅｒ１の消費寿命率は、Ｔｉｅｒ１を構成するプールボリュームの消費寿命率から決定される。一般に、Ｔｉｅｒ１は複数プールボリュームで構成される。プールボリュームの消費寿命率は、プールボリュームの記憶領域を提供するパリティグループ（ＰＧ）の消費寿命率と一致する。パリティグループは、冗長構成を有するドライブのグループであり、ＲＡＩＤグループとも呼ばれる。
【００５０】
図３は、パリティグループの理想消費寿命率変化の例を示す。理想消費寿命率変化は、ストレージシステム１０４の設計において決定される。図３の例において、理想消費寿命率変化は、線３３に示すように、５年で９５％である。線３１、３２は、それぞれ、ＰＧ＃１、ＰＧ＃２のパリティグループの理想消費寿命率を示している。
【００５１】
線３１の例において、ＰＧ＃１のパリティグループ（のプールボリューム）がプールに追加された時の残寿命率は２４％である。寿命率の理想消費ペースは５年で９５％であり、残寿命率１９％が１年で消費される。
【００５２】
線３２の例において、ＰＧ＃２のパリティグループ（のプールボリューム）がプールに追加された時の残寿命率は８１％である。寿命率の理想消費ペースは５年で９５％であり、残寿命率７６％が４年で消費される。
【００５３】
図４は、Ｔｉｅｒ１（プール）、プールボリューム、パリティグループ、ドライブ（ＰＤＥＶ）の消費寿命率の関係例を示す。パリティグループは、ドライブの冗長グループであり、パリティグループの消費寿命率は、パリティグループ内のドライブの消費寿命率の最大値（ワースト値）に一致する。
ＰＧの実際消費寿命率＝ＰＧ内ドライブのワースト実際消費寿命率
ＰＧの理想消費寿命率＝ＰＧ内ドライブのワースト理想消費寿命率
【００５４】
実際消費寿命率は、ドライブの実際の消去回数／消去可能回数から決定され、ドライブがその値を管理している。ドライブの理想消費寿命率は、プールに追加された時の消費寿命率（初期消費寿命率）及びその後の経過年数（使用年数）から決定される。例えば、下記式で計算される。
ドライブの理想寿命率＝初期消費寿命率＋使用年数／５年＊１００
【００５５】
例えば、プールＶＯＬ♯１のプールボリュームは、ＰＧ＃１のパリティグループに属する。ＰＧ＃１のパリティグループにおいて、所属ドライブの実際消費寿命率の最大値は９５％であり、理想消費寿命率の最大値は、２０＋３／５年＊１００＝８０％である。したがって、ＰＧ＃１のパリティグループの実際消費寿命率及び理想消費寿命率は、それぞれ９５％及び８０％であり、それら差分は１５％である。
【００５６】
プールＶＯＬ♯２のプールボリュームは、ＰＧ＃２のパリティグループに属する。ＰＧ＃２のパリティグループにおいて、所属ドライブの実際消費寿命率の最大値は５０％であり、理想消費寿命率の最大値は、１０＋３／５年＊１００＝７０％である。したがって、ＰＧ＃１のパリティグループの実際消費寿命率及び理想消費寿命率は、それぞれ５０％及び７０％であり、それら差分は−２０％である。
【００５７】
プールにおけるＴｉｅｒ１の消費寿命率は、Ｔｉｅｒ１を構成するプールボリュームの消費寿命率から決定される。例えば、下記式で計算される。
Ｔｉｅｒ１の実際消費寿命率
＝Σ(プールＶＯＬ容量＊ＰＧの実際消費寿命率) ／Σ(プールＶＯＬ容量)
Ｔｉｅｒ１の理想消費寿命率
＝Σ(プールＶＯＬ容量＊ＰＧの理想消費寿命率) ／Σ(プールＶＯＬ容量)
【００５８】
上述のようにプールボリュームの消費寿命率はパリティグループの消費寿命率と一致し、Ｔｉｅｒ１の消費寿命率は、プールボリュームの容量比率と消費寿命率の積和である。例えば、プール＃１のプールにおいて、Ｔｉｅｒ１は、プールＶＯＬ＃１、プールＶＯＬ＃２のプールボリュームで構成されており、容量は共に１００ＧＢである。プール＃１のプールにおけるＴｉｅｒ１の実際消費寿命率は、（１００＊９５％＋１００＊５０％)／２００＝７２．５％である。また、理想消費寿命率は、（１００＊８０％＋１００＊７０％）／２００＝７５％である。
【００５９】
なお、消費寿命率は、次のようにブロックの劣化を示す指標（劣化度）を用いて算出されてもよい。劣化度の算出には、ブロックに最後データを書き込んでから、消去するまでの時間（以下、ＰＥ(Ｐｒｏｇｒａｍ−Ｅｒａｓｅ)間隔）を用いる。これは、ＰＥ間隔が短いほどブロックが劣化しやすいというフラッシュメモリの特性があるためである。劣化度は、ブロックに格納されたデータを消去する際に、ＰＥ間隔に応じて、点数を加算する。例えば、ブロック毎に許容可能劣化度を１００００点として、ＰＥ間隔が５分未満の場合は２０点、５分以上１０分未満の場合は１５点等、ＰＥ間隔が長いほど小さい点数を加算する。これにより、より正確な寿命を算出することができる。
【００６０】
劣化度を用いる場合の実際消費寿命率は、ドライブの実際の劣化度（ドライブ内の各ブロックの劣化度の合計値）／ドライブの許容可能劣化度（ドライブ内の各ブロックの許容可能劣化度の合計値）から決定される。
【００６１】
図５は、共有メモリ１１１に格納される情報（テーブル）を示し、図６はローカルメモリ１１８に格納されるプログラムを示す。これらのテーブル及びプログラムの配置場所は例示する場所に限らず、各ローカルメモリ１１８の他、共有メモリ１１１、ドライブ１１３、１１４等であってもよいし、これらの間で階層管理された空間でもよい。
【００６２】
ダイナミックマッピングテーブル５０１は、仮想ＶＯＬページと、割り当てられるプールボリュームの領域と、当該ページのモニタ情報との対応関係を管理する。仮想ＶＯＬページは、仮想ボリューム識別子及び論理アドレスで識別され、プールボリューム内の領域は、プールボリューム識別子及び論理アドレスで識別される。論理アドレスと仮想ＶＯＬページ番号とは、所定式によって対応づけられる。
【００６３】
ダイナミックマッピングテーブル５０１は、所定の初期値データ（例えば０データ）が格納されるデフォルト値ページ、及び、データの書き込みが一度もされていない仮想ボリュームの領域を管理する。ダイナミックマッピングテーブル５０１は、プール内で仮想ボリュームに未割当の記憶領域（プールＶＯＬページ）を管理する。仮想ボリュームの論理アドレスにデータの書き込みが一度も無かった箇所に初めてデータの書き込みがあった場合は、未割当のプールＶＯＬページを、書き込み先の仮想ＶＯＬページに対応づける。
【００６４】
プールＶＯＬ管理テーブル５０２は、パリティグループと、プールボリュームと、プールボリュームの容量との関係を管理する。論理物理アドレス変換テーブル５０４は、プールボリュームと、パリティグループと、プールボリュームのデータを格納するドライブのアドレス（記憶領域）との対応関係を示す。
【００６５】
度数分布テーブル５０５は、プールに関する、Ｉ／Ｏ頻度範囲毎のページ数の分布を管理する。度数分布テーブル５０５の１つのエントリは、あるプールに関するＩ／Ｏ頻度の範囲と、該Ｉ／Ｏ頻度の範囲に含まれるページ数を示す。度数分布テーブル５０５は、階層割り当て閾値も管理する。階層割り当て閾値は必ずしもＩ／Ｏ頻度範囲の境界値である必要はない。パラメータテーブル５０６は、保守Ｉ／Ｆ１０７等から設定される各種パラメータを管理する。
【００６６】
キャッシュ管理テーブル５０７は、キャッシュメモリ１１０にデータを格納する際にキャッシュメモリにあるデータのダーティ／クリーン状態を管理する。仮想ボリュームへの書き込みデータをキャッシュする場合には、キャッシュメモリ１１０のアドレスと対応する仮想ＶＯＬページを特定するアドレスとも対応づけて管理される。
【００６７】
リード係数・ライト係数設定テーブル５０８は、Ｔｉｅｒ１の消費寿命率を考慮した、長周期Ｉ／Ｏ頻度の計算において使用される、リードアクセス及びライトアクセスへの重みを示す。必要リード回数・ライト回数設定テーブル５０９は、Ｔｉｅｒ１の消費寿命率を考慮した、短周期Ｉ／Ｏ頻度の計算において使用される、リードアクセス及びライトアクセスへの重みを示す。プロモーション先ＰＧ優先順位設定テーブル５１０は、仮想ＶＯＬページのＴｉｅｒ１へのプロモーションにおいて、当該仮想ＶＯＬページを割り当てるパリティグループの優先順位と、パリティグループの消費寿命率との関係を示す。
【００６８】
ＰＤＥＶ寿命管理テーブル５１１は、物理ドライブの寿命を管理する。ＰＧ寿命管理テーブル５１２は、Ｔｉｅｒ１に記憶領域を提供するパリティグループの寿命を管理する。Ｔｉｅｒ１寿命管理テーブル５１３は、プールそれぞれのＴｉｅｒ１の寿命を管理する。移動先プールＶＯＬ優先順位管理テーブル５１４は、Ｔｉｅｒ１に移動するページデータの移動先プールボリュームの優先順位を管理する。
【００６９】
図６は、プロセッサ１１９にて実行されるプログラムを示す。ホストＩ／Ｏプログラム６０１は、ホスト１０１からのＩ／Ｏ受領時に、仮想ボリューム２０１に対するリード／ライト要求を処理する。デステージプログラム６０４は、キャッシュメモリ上のドライブ未反映データを、ドライブに格納し、ホストＩ／Ｏとは非同期に実行される。
【００７０】
度数分布作成プログラム６０２は、階層割り当て閾値を計算し、所定周期、具体的には上記長周期で実行される。モニタ更新・階層判定プログラム６０３は、ページモニタテーブル５０３の各種情報の更新と、ページの階層間移動の判定をホストＩ／Ｏ処理に同期して実施する。本プログラムは、Ｔｉｅｒ１へのプロモーション又はＴｉｅｒ１からのデモーションを実行する。
【００７１】
非同期再配置判定プログラム６０６は、図１４の度数分布作成が完了すると起動され、所定周期にてページモニタテーブル５０３を参照し、ページ毎に適切なＴｉｅｒの判定を実行するプログラムである。ページ再配置プログラム６０５は、ページを再配置するプログラムであり周期的に実行される。
【００７２】
寿命管理プログラム６０７は、ドライブ、パリティグループ、及びプールのＴｉｅｒ１の寿命を管理する。図５及び図６に示すテーブル及びプログラムのうち、一部はホスト１０１や管理サーバ１０２上に配置され、実行されてもよい。
【００７３】
図７は、プールＶＯＬ管理テーブル５０２の構成例を示す。プールＶＯＬ管理テーブル５０２は、プールボリュームが属するプールのプール＃５２１、プールボリュームのプールＶＯＬ＃５２２、プールボリュームの記憶領域提供するパリティグループのＰＧ＃５２３、プールボリュームの容量５２４及び使用量５２５の情報を値する。プール＃、プールＶＯＬ＃及びＰＧ＃は、それぞれ、プール、プールボリューム及びパリティグループの識別子である。
【００７４】
ページモニタテーブル５０３は、各ページのＩ／Ｏモニタ情報を管理する。図８は、ページモニタテーブル５０３の構成例を示す。図８は、ある仮想ボリュームの一部の仮想ＶＯＬページに対するＩ／Ｏモニタの情報を示す。
【００７５】
仮想ＶＯＬページは、仮想ＶＯＬページ＃で識別される。仮想ＶＯＬページ＃は、仮想ボリューム内のページの識別子である。長周期Ｉ／Ｏ負荷モニタのセクション５３０は、長周期リードカウンタ５３１、長周期ライトカウンタ５３２、前回ＩＯＰＨ５３３、前回ＩＯＰＨＷ５３４の値を格納する。本例において、長周期は、一定の時間（例えば６時間や２４時間）で定義される。長周期の長さは、プール毎に設定されてよく、例えばパラメータテーブル５０６に格納されている。
【００７６】
長周期リードカウンタ５３１は、現在の長周期における仮想ＶＯＬページへのリードアクセスをカウントする。長周期ライトカウンタ５３２は、現在の長周期における仮想ＶＯＬページへのライトアクセスをカウントする。前回ＩＯＰＨ５３３は、前回の長周期におけるＩＯＰＨの値を格納する。ＩＯＰＨはＩ／Ｏ頻度であり、具体的には、時間当たりのＩ／Ｏ数である。前回ＩＯＰＨ５３３の値は、前回の長周期におけるリード頻度及びライト頻度の和であり、具体的には、前回の長周期における時間当たりのリード回数と時間当たりのライト回数との和である。
【００７７】
前回ＩＯＰＨＷ５３４は、前回の長周期におけるＩＯＰＨＷの値を格納する。ＩＯＰＨＷは、Ｔｉｅｒ１の寿命を考慮したＴｉｅｒ１への移動の有無を判定するために参照されるＩ／Ｏ頻度指標である。ＩＯＰＨＷは、以下の数式により計算される。
ＩＯＰＨＷ＝リード頻度(回／ｈ)＊リード係数＋ライト頻度(回／ｈ)＊ライト係数
【００７８】
リード係数及びライト係数は、それぞれ、Ｔｉｅｒ１の消費寿命率に応じて決定され、長周期におけるリードアクセス及びライトアクセスの重みを表す。
【００７９】
図９は、リード係数・ライト係数設定テーブル５０８の構成例を示す。リード係数・ライト係数設定テーブル５０８は、Ｔｉｅｒ１の消費寿命率と、長周期ＩＯＰＨＷの計算において使用されるリード係数及びライト係数のペアと、の関係を示す。＃５４１は、当該テーブルのエントリ番号を示す。
【００８０】
Ｔｉｅｒ１の実際消費寿命率５４２は、Ｔｉｅｒ１の理想寿命率を基準とした、実際消費寿命率の範囲を示す。本例において、Ｔｉｅｒ１の実際消費寿命率５４２は、実際消費寿命率と理想寿命率との差の、理想消費寿命率に対する比率の範囲を示す。Ｔｉｅｒ１の実際消費寿命率５４２は、理想消費寿命率を基準とした値を使用しなくてもよく、例えば、実際消費寿命率のみで範囲を示してもよい。この点は、他の設定テーブル５０９、５１０において同様である。リード係数５４３及びライト係数５４４は、それぞれ、Ｔｉｅｒ１の実際消費寿命率５４２の範囲それぞれに対応するリード係数及びライト係数を示す。
【００８１】
ライト係数は、実際消費寿命率が理想消費寿命率を上回る度合が大きくなるにつれて、段階的に小さくなる。これにより、理想消費寿命率に対して実際消費寿命率が大きくなっているＴｉｅｒ１に対して、ライト頻度が大きいページデータが移動される可能性が小さくなり、Ｔｉｅｒ１の実際消費寿命率の増加率を小さくできる。
【００８２】
一方、リード係数は、実際消費寿命率が理想消費寿命率を上回る度合が大きくなるにつれて、段階的に大きくなる。理想消費寿命率に対して実際消費寿命率が大きくなっているＴｉｅｒ１に対して、リード頻度が大きいページデータが移動される可能性が大きくなり、Ｔｉｅｒ１ヒット率の低下を抑制できる。なお、リード係数は一定でもよい。
【００８３】
図８に戻って、短周期Ｉ／Ｏ負荷モニタのセクション５３５は、短周期リードカウンタ５３６、短周期ライトカウンタ５３７、短周期Ｉ／Ｏカウンタ５３８、及び前回判定時刻５３９の値を格納する。本例において、短周期は、短周期Ｉ／Ｏカウンタ５３８の値で定義され、短周期Ｉ／Ｏカウンタ５３８が０から所定値に達するまでが、１回の短周期である。したがって、短周期の時間長は一定ではない。短周期Ｉ／Ｏカウンタ５３８が所定値に達すると、その値がリセットされ、短周期の階層判定が実行される。
【００８４】
短周期リードカウンタ５３６は、現在の短周期における仮想ＶＯＬページへのリードアクセスをカウントする。短周期ライトカウンタ５３７は、現在の短周期における仮想ＶＯＬページへのライトアクセスをカウントする。短周期Ｉ／Ｏカウンタ５３８は、短周期リードカウンタ５３６の値及び短周期ライトカウンタ５３７の値から決定される値を格納する。前回判定時刻５３９は、前回の短周期におけるＴｉｅｒ判定の時刻を格納する。
【００８５】
短周期Ｉ／Ｏカウンタ５３８の値が所定値に達するまでの時間により、階層判定におけるＴｉｅｒ１寿命を考慮した短周期Ｉ／Ｏ頻度指標が算出される。具体的には、下記式が使用される。
短周期Ｉ／Ｏ頻度＝規定カウンタ値／規定カウンタ値に到達するまでの時間(回／ｈ)
【００８６】
短周期Ｉ／Ｏカウンタ５３８の各仮想ＶＯＬページの値は、当該仮想ＶＯＬページの所定のリード回数毎にインクリメントされる。つまり、短周期リードカウンタ５３６の値が所定値に達すると、短周期Ｉ／Ｏカウンタ５３８の値がインクリメントされる。短周期リードカウンタ５３６の値は、リセットされる。
【００８７】
さらに、短周期Ｉ／Ｏカウンタ５３８の各仮想ＶＯＬページの値は、当該仮想ＶＯＬページの所定のライト回数毎にインクリメントされる。つまり、短周期ライトカウンタ５３７の値が所定値に達すると、短周期Ｉ／Ｏカウンタ５３８の値がインクリメントされる。短周期ライトカウンタ５３７の値は、リセットされる。
【００８８】
リードアクセス及びライトアクセスそれぞれの所定回数、より具体的には所定回数の逆数は、Ｔｉｅｒ１の消費寿命率に応じて決定される、短周期における重みを表す。図１０は、必要リード回数・ライト回数設定テーブル５０９の構成例を示す。必要リード回数・ライト回数設定テーブル５０９は、Ｔｉｅｒ１の消費寿命率と、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントするために必要とされるリード回数及びライト回数と、の関係を示す。＃５４５は、当該テーブルのエントリ番号を示す。
【００８９】
Ｔｉｅｒ１の実際消費寿命率５４６は、Ｔｉｅｒ１の理想寿命率を基準とした、実際消費寿命率の範囲を示す。本例において、Ｔｉｅｒ１の実際消費寿命率５４２は、実際消費寿命率と理想寿命率との差の、理想消費寿命率に対する比率の範囲を示す。本例において、Ｔｉｅｒ１の実際消費寿命率５４６の各エントリの範囲は、リード係数・ライト係数設定テーブル５０８と同様である。
【００９０】
必要リード回数５４７及び必要ライト回数５４８は、それぞれ、対応する実際消費寿命率５４２の範囲において、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントするために必要とされるリード回数及びライト回数を示す。つまり、仮想ＶＯＬページに対して必要リード回数５４７が示す回数のリードアクセスが実行されると、短周期Ｉ／Ｏカウンタ５３８の値がインクリメントされる。
【００９１】
さらに、仮想ＶＯＬページに対して必要ライト回数５４８が示す回数のライトアクセスが実行されると、短周期Ｉ／Ｏカウンタ５３８の値がインクリメントされる。実際消費寿命率の理想消費寿命率に対する超過が、理想消費寿命率の１０％以上である場合、ライトアクセスによって短周期Ｉ／Ｏカウンタ５３８の値はインクリメントされない。
【００９２】
必要ライト回数５４８の値は、実際消費寿命率が理想消費寿命率を上回る度合が大きくなるにつれて、段階的に大きくなる。つまり、実際消費寿命率の理想消費寿命率からの乖離が大きくなるにつれて、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントするために必要なライト回数が段階的に大きくなる。
【００９３】
これにより、理想消費寿命率に対して実際消費寿命率が大きくなっているＴｉｅｒ１に対して、ライト頻度が大きいページデータが移動される可能性が小さくなり、Ｔｉｅｒ１の実際消費寿命率の増加率を小さくできる。さらに、Ｔｉｅｒ１へのプロモーション頻度が低下して、Ｔｉｅｒ１へのライト負荷の集中を抑制できる。
【００９４】
上記例における必要リード回数５４７の値は一定であるが、理想消費寿命率を超える実際消費寿命率の理想消費寿命率からのかい離が大きくなるにつれて、小さくなってもよい。つまり、１回のリード要求に対して、短周期Ｉ／Ｏカウンタ５３８の値を複数回インクリメントしてもよい。必要リード回数は１未満の数で表わされる。短周期Ｉ／Ｏカウンタ５３８の値は、初期値から所定値（例えば０）までデクリメントされてもよい。短周期Ｉ／Ｏカウンタ５３８の値が０になると、階層判定が実行される。インクリメント／デクリメントする単位は、１より大きい値でもよい。
【００９５】
図１１は、プロモーション先ＰＧ優先順位設定テーブル５１０の構成例を示す。プロモーション先ＰＧ優先順位設定テーブル５１０は、ユーザにより予め設定される。＃５５１は、エントリ番号を示す。ＰＧの実際消費寿命率５５２は、パリティグループの理想寿命率を基準とした、実際消費寿命率の範囲を示す。
【００９６】
本例において、ＰＧの実際消費寿命率５５２は、実際消費寿命率と理想寿命率との差の、理想消費寿命率に対する比率の範囲を示す。プロモーション先選択の優先順位５５３は、プロモーション対象のページデータを格納するパリティグループの優先順位を示す。実際消費寿命率が理想消費寿命率よりも少ないパリティグループの優先順位が最も高く、実際消費寿命率が理想消費寿命率に対して大きくなるにつれ、パリティグループの優先順位が下がる。
【００９７】
図１２は、ＰＤＥＶ寿命管理テーブル５１１の構成例を示す。寿命管理プログラム６０７は、ＰＤＥＶ寿命管理テーブル５１１を、ストレージシステム１０４の構成変更時に更新し、さらに、定期的に更新する。構成変更は、例えば、ドライブのシステムへの追加、削除、プールへの追加、削除等を含む。
【００９８】
ＰＤＥＶ＃５５４は、ドライブの識別子を示す。プール追加時の消費寿命率５５５は、ドライブ（のボリューム）をプールに追加したときのドライブの実際消費寿命率を示す。プール追加時からの経過時間５５６は、ドライブをプールに追加してからの経過時間（使用時間）を示す。経過時間は定期的に更新される。
【００９９】
実際消費寿命率５５７は、ドライブの実際消費寿命率を示す。実際消費寿命率の値は、ドライブの内部コントローラが管理し、寿命管理プログラム６０７は、ドライブから実際消費寿命率の値を取得して、実際消費寿命率５５７の値を更新する。
【０１００】
図１３は、ＰＧ寿命管理テーブル５１２の構成例を示す。寿命管理プログラム６０７は、ＰＧ寿命管理テーブル５１２を、ストレージシステム１０４の構成変更時に更新し、さらに、定期的に更新する。ＰＧ＃５６１は、パリティグループの識別子を示す。ＰＧを構成するＰＤＥＶ♯５６２は、パリティグループを構成するドライブのＰＤＥＶ♯を示す。最短残寿命のＰＤＥＶ♯５６３は、パリティグループにおいて最短残寿命のドライブのＰＤＥＶ♯を示す。
【０１０１】
実際消費寿命率５６４は、パリティグループの実際消費寿命率を示す。図４を参照して説明したように、パリティグループの実際消費寿命率は、当該パリティグループのワーストのドライブ実際消費寿命率に一致する。理想消費寿命率５６５は、パリティグループの理想消費寿命率を示す。図４を参照して説明したように、パリティグループの理想消費寿命率は、当該パリティグループのワーストのドライブ理想消費寿命率に一致する。ドライブ理想消費寿命率は、ドライブのプール追加時の実際消費寿命率と使用年数から計算される。
【０１０２】
図１４は、Ｔｉｅｒ１寿命管理テーブル５１３の構成例を示す。寿命管理プログラム６０７は、Ｔｉｅｒ１寿命管理テーブル５１３を、ストレージシステム１０４の構成変更時に更新し、さらに、定期的に更新する。プール＃５７１は、プールの識別子を示す。プールＶＯＬ＃５７２は、プールのＴｉｅｒ１に含まれるプールボリュームの識別子を示す。実際消費寿命率５７３は、プールのＴｉｅｒ１の実際消費寿命率を示す。図４を参照して説明したように、Ｔｉｅｒ１の実際消費寿命率は、属するプールボリュームの実際消費寿命率と容量とから計算される。
【０１０３】
理想消費寿命率５７４は、プールのＴｉｅｒ１の理想消費寿命率を示す。図４を参照して説明したように、Ｔｉｅｒ１の理想消費寿命率は、属するプールボリュームの理想消費寿命率と容量とから計算される。
【０１０４】
ＩＯＰＨＷリード係数５７５及びＩＯＰＨＷライト係数５７６は、それぞれ、ＩＯＰＨＷの計算で使用される係数を示す。ＩＯＰＨＷリード係数５７５及びＩＯＰＨＷライト係数５７６の値は、それぞれ、Ｔｉｅｒ１の実際寿命率、理想寿命率、及びリード係数・ライト係数設定テーブル５０８から決定される。
【０１０５】
必要リード回数５７７及び必要ライト回数５７８は、それぞれ、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントするために必要なリード回数及びライト回数を示し。必要リード回数５７７及び必要ライト回数５７８は、それぞれ、Ｔｉｅｒ１の実際寿命率、理想寿命率及び必要リード回数・ライト回数設定テーブル５０９から決定される。
【０１０６】
図１５は、移動先プールＶＯＬ優先順位管理テーブル５１４の構成例を示す。移動先優先順位５７１は、Ｔｉｅｒ１に移動するページデータの移動先優先順位を示す。プロモーション先ＰＧ優先順位設定テーブル５１０におけるプロモーション先選択の優先順位５５３の値と一致する。ＰＧ♯５７２は、優先順位それぞれに該当するパリティグループの識別子を示す。プールＶＯＬ♯５７３は、優先順位それぞれに該当するプールボリュームの識別子を示す。
【０１０７】
寿命管理プログラム６０７は、移動先プールＶＯＬ優先順位管理テーブル５１４を作成し、定期的に更新する。寿命管理プログラム６０７は、Ｔｉｅｒ１寿命管理テーブル５１３を参照し、Ｔｉｅｒ１のプールボリュームの実際消費寿命率５７３の値と理想消費寿命率５７４の値を取得する。寿命管理プログラム６０７は、プロモーション先ＰＧ優先順位設定テーブル５１０に従って、プールボリュームの優先順位を決定する。寿命管理プログラム６０７は、パリティグループの優先順位も、ＰＧ寿命管理テーブル５１２とプロモーション先ＰＧ優先順位設定テーブル５１０から、同様に決定する。
【０１０８】
図１６は、仮想ボリュームへのリード要求／ライト要求に対する処理のフローチャートを示す。ホスト１０１からＩ／Ｏ要求を受けると、ホストＩ／Ｏプログラム６０１が本フローを実行する。
【０１０９】
ホストＩ／Ｏプログラム６０１は、リード要求かライト要求か判定する（Ｓ１０１）。Ｉ／Ｏ要求がライト要求の場合（Ｓ１０１：Ｙ）、ダイナミックマッピングテーブル５０１を参照して当該仮想ＶＯＬページがプールＶＯＬページを割り当て済みかどうか判定する。未割り当ての場合、ホストＩ／Ｏプログラム６０１未使用のプールＶＯＬページを割り当てる（Ｓ１０９）。
【０１１０】
キャッシュメモリにＩ／Ｏ要求に対応する仮想ボリューム上のアドレスに対応した領域が確保されているか否かを確認し、確保されていなければキャッシュメモリの領域を確保する（Ｓ１１０）。次に、ホストＩ／Ｏプログラム６０１は、ホストから転送されてくるライトデータを確保されているキャッシュメモリに書き込み、キャッシュ管理テーブル５０７にまだドライブに書き込んでいない領域であるとしてダーティフラグを立てる（Ｓ１１１）。
【０１１１】
ダーティフラグは、キャッシュメモリ上のデータがディスクに反映されていない状態を示す。次に、ホストＩ／Ｏプログラム６０１は、ホストに完了応答を送信して終了する。
【０１１２】
Ｉ／Ｏ要求がリード要求である場合（Ｓ１０１：Ｎ）、ホストＩ／Ｏプログラム６０１は、仮想ボリューム上の要求されたアドレスに対応したデータが、キャッシュメモリ上に存在（キャッシュヒット）するか否かを確認する（Ｓ１０２）。キャッシュヒットの場合（Ｓ１０２：Ｙ）、ホストＩ／Ｏプログラム６０１は、キャッシュメモリ上のデータをホストに転送する（Ｓ１０８）。ホストが要求したデータを全てホストに転送した後、ホストＩ／Ｏプログラム６０１は、完了応答をホストに送信して終了する。
【０１１３】
キャッシュミスの場合（Ｓ１０２：Ｎ）、ホストＩ／Ｏプログラム６０１は、要求アドレスに対応するデータを格納するための領域をキャッシュメモリに確保する（Ｓ１０３）。次に、ホストＩ／Ｏプログラム６０１は、要求アドレスに、プールＶＯＬページが割り当てられているか否かを、ダイナミックマッピングテーブル５０１で確認する。
【０１１４】
割り当てられていなかった場合、ホストＩ／Ｏプログラム６０１は、ダイナミックマッピングテーブル５０１を用いてデフォルト値を格納するドライブのアドレスを算出し（Ｓ１０４）、ドライブからデフォルト値を確保したキャッシュメモリの領域に転送する（Ｓ１０５）。
【０１１５】
要求アドレスに、プールＶＯＬページが割り当てられている場合、ホストＩ／Ｏプログラム６０１は、ダイナミックマッピングテーブル５０１を用いて割り当てられたプールボリューム番号と論理アドレスを求め、更に論理物理アドレス変換テーブル５０４を用いて物理ドライブ番号、物理開始アドレスを求める（Ｓ１０４）。次に、ホストＩ／Ｏプログラム６０１は、算出したドライブアドレスからデータを確保したキャッシュメモリの領域に転送する（Ｓ１０５）。
【０１１６】
キャッシュメモリへのデータ転送時に、ページモニタテーブル５０３において、アクセス先仮想ＶＯＬページのモニタ情報を更新し、さらに、階層判定処理を実行する（Ｓ１０６）。次に、ホストＩ／Ｏプログラム６０１は、ドライブからキャッシュメモリ上に格納したデータをホストに送信する（Ｓ１０７）。ホストが要求したデータを全てホストに転送した後、完了応答をホストに転送して終了する。
【０１１７】
図１７は、デステージプログラム６０４のフローチャートを示す。図１６に示すように、Ｉ／Ｏプログラム６０１は、ホストからのデータの書き込み要求に応じてキャッシュメモリにホストのライトデータを書き込んだ後、ダーティフラグを立てる。
【０１１８】
デステージプログラム６０４は、キャッシュ管理テーブル５０７を参照し、立てられたダーティフラグがあるか定期的に確認する（Ｓ２０１）。ダーティフラグが立っているキャッシュ領域がある場合（Ｓ２０１：Ｙ）、デステージプログラム６０４は、キャッシュ管理テーブル５０７においてダーティフラグと対応付けられている仮想ＶＯＬ＃と論理アドレスに基づき、ダイナミックマッピングテーブル５０１から割り当てられているプールＶＯＬ＃番号と論理アドレスを求める。
【０１１９】
デステージプログラム６０４は、プールＶＯＬ＃番号と論理アドレスから、論理物理アドレス変換テーブル５０４により、格納先のドライブのアドレスを求める（Ｓ２０２）。デステージプログラム６０４は、ドライブのアドレスに対して、キャッシュメモリ上のダーティデータを書き込む（Ｓ２０３）。当該データの、ダーティフラグはＯＦＦとなる。
【０１２０】
デステージプログラム６０４は、ダイナミックマッピングテーブル５０１において、当該仮想ＶＯＬページに対応するページモニタテーブル５０３のモニタ情報を更新し、Ｔｉｅｒ判定処理を実行する（Ｓ２０４）。デステージプログラム６０４は、ステップＳ２０１に戻り、キャッシュメモリ上に未反映データがあるかチェックする（Ｓ２０１）。未反映データがなければ（Ｓ２０１：Ｎ）、デステージプログラム６０４は終了する。
【０１２１】
図１８は、非同期再配置判定プログラム６０６のフローチャートを示す。非同期再配置判定プログラム６０６は、長周期で繰り返し実行され、Ｉ／Ｏ要求の受信やデステージを含むＩ／Ｏ処理とは、非同期に実行される。本例において、長周期は予め定められている一定期間である。非同期再配置はページの基本配置を決定するため、全ページについて同じタイミングで階層判定及び再配置を行う。階層非同期再配置判定プログラム６０６は、長周期のＩＯＰＨ及びＩＯＰＨＷを使用して、仮想ＶＯＬページの再配置先Ｔｉｅｒを決定する。
【０１２２】
非同期再配置判定プログラム６０６は、度数分布テーブル５０５において決定されるＴｉｅｒ閾値を使用して、仮想ＶＯＬページ（ページデータ）の再配置先Ｔｉｅｒを決定する。度数分布テーブル５０５は、度数分布作成プログラム６０２により作成される。度数分布作成プログラム６０２は、非同期再配置判定プログラム６０６の実行前に、長周期で実行される。
【０１２３】
度数分布作成プログラム６０２は、ページモニタテーブル５０３からエントリを順次選択し、仮想ＶＯＬページの長周期のＩＯＰＨを算出し、対応する度数分布の負荷レベルのページ数をインクリメントする。長周期ＩＯＰＨは、長周期リードカウンタ５３１及び長周期ライトカウンタ５３２の値の和を、長周期（ｈ）で割った値である。
【０１２４】
Ｔｉｅｒ割り当て閾値は、各Ｔｉｅｒについて、Ｔｉｅｒのポテンシャル（処理できる最大Ｉ／Ｏ数）又はＴｉｅｒの容量の何れかを超える限界点から、最大のページ割り当て量の範囲を決定し、当該範囲と度数分布の交点から、算出される。Ｔｉｅｒ割り当て閾値は、ユーザが指定した値でもよい。
【０１２５】
図１８は、非同期再配置判定プログラム６０６による、一つの仮想ＶＯＬページの再配置先の決定を示す。非同期再配置判定プログラム６０６は、ページモニタテーブル５０３における長周期Ｉ／Ｏ負荷モニタ５３０の情報を更新する（Ｓ３０１）。具体的には、非同期再配置判定プログラム６０６は、前回ＩＯＰＨ５３３及び前回ＩＯＰＨＷ５３４の値を更新し、長周期リードカウンタ５３１及び長周期ライトカウンタ５３２の値をリセットする。
【０１２６】
前回ＩＯＰＨ５３３の値は、長周期リードカウンタ５３１の値と長周期ライトカウンタ５３２の値との和を、長周期（ｈ）で割った値である。前回ＩＯＰＨＷ５３４の値は、長周期リードカウンタ５３１の値にリード係数を掛けた値と及び長周期ライトカウンタ５３２の値にライト係数を掛けた値との和を、長周期（ｈ）で割った値である。
【０１２７】
非同期再配置判定プログラム６０６は、Ｔｉｅｒ１寿命管理テーブル５１３を参照して、当該プールのＩＯＰＨＷリード係数５７５の値と、ＩＯＰＨＷライト係数５７６の値とを取得する。
【０１２８】
非同期再配置判定プログラム６０６は、ページモニタテーブル５０３からエントリを順次選択し、ステップＳ３０２〜Ｓ３０８を繰り返す。非同期再配置判定プログラム６０６は、仮想ＶＯＬページの長周期ＩＯＰＨの値を取得し、度数分布テーブル５０５におけるＴｉｅｒ閾値と比較して、仮想ＶＯＬページの再配置先の階層を判定する（Ｓ３０２）。長周期ＩＯＰＨが階層割り当て閾値２０８Ａより大きい場合、仮想ＶＯＬページの再配置先は、Ｔｉｅｒ１と判定される。
【０１２９】
ステップＳ３０２の判定結果がＴｉｅｒ１ではない場合（Ｓ３０３：Ｎ）、非同期再配置判定プログラム６０６は、ステップＳ３０２で決定されたＴｉｅｒを、仮想ＶＯＬページの再配置先と決定する。再配置先は、現在のＴｉｅｒと異なる又は同じである。
【０１３０】
ステップＳ３０２の判定結果がＴｉｅｒ１である場合（Ｓ３０３：Ｙ）、非同期再配置判定プログラム６０６は、仮想ＶＯＬページの長周期ＩＯＰＨＷの値を取得し、度数分布テーブル５０５におけるＴｉｅｒ閾値と比較して、仮想ＶＯＬページの再配置先のＴｉｅｒを判定する（Ｓ３０５）。長周期ＩＯＰＨＷが階層割り当て閾値２０８Ａより大きい場合、仮想ＶＯＬページの再配置先は、Ｔｉｅｒ１と判定される。
【０１３１】
ステップＳ３０５の判定結果がＴｉｅｒ１ではない場合（Ｓ３０６：Ｎ）、非同期再配置判定プログラム６０６は、現在のＴｉｅｒを、仮想ＶＯＬページの再配置先と決定する。ステップＳ３０５の判定結果がＴｉｅｒ１である場合（Ｓ３０６：Ｙ）、非同期再配置判定プログラム６０６は、Ｔｉｅｒ１を仮想ＶＯＬページの再配置先と決定する。
【０１３２】
ページデータの移動が必要な場合、ページ再配置プログラム６０５が、ページデータを階層間で移動する。例えば、ページ再配置プログラム６０５は、ページ移動が必要な仮想ＶＯＬページと再配置先階層の情報を非同期再配置判定プログラム６０６から取得する。非同期再配置判定プログラム６０６は、ダイナミックマッピングテーブル５０１及びプールＶＯＬ管理テーブル５０２を参照して、仮想ＶＯＬページの現在の階層（パリティグループ）を特定できる。ページ再配置プログラム６０５は、取得した情報に応じてページデータを移動し、ダイナミックマッピングテーブル５０１を更新する。
【０１３３】
図１９は、Ｔｉｅｒ１の実際消費寿命率、理想消費寿命率、ＩＯＰＨ、及びＩＯＰＨＷの関係例を示す。グラフにおける破線内の数字は、リード係数・ライト係数設定テーブル５０８におけるエントリ番号を示す。
【０１３４】
実際消費寿命率Ａは理想消費寿命率以下であり、リード係数・ライト係数設定テーブル５０８において、エントリ番号１に対応する。そのリード係数は１.０であり、ライト係数は０．５である。実際消費寿命率ＡのページデータのＩＯＰＨ及びＩＯＰＨＷの双方が階層割り当て閾値よりも大きく、当該ページデータはＴｉｅｒ１に再配置される。
【０１３５】
実際消費寿命率Ｂは理想消費寿命率よりも大きく、リード係数・ライト係数設定テーブル５０８において、エントリ番号６に対応する。そのリード係数は１.５であり、ライト係数は０である。実際消費寿命率ＢのページデータのＩＯＰＨは階層割り当て閾値よりも大きく、ＩＯＰＨＷは階層割り当て閾値以下である。当該ページデータは、現在の階層から移動されない。
【０１３６】
上述のように、下位ＴｉｅｒからＴｉｅｒ１へのプロモーションは、ＩＯＰＨがＴｉｅｒ閾値より大きいことに加え、ＩＯＰＨＷがＴｉｅｒ閾値よりも大きいことを必要とする。ＩＯＰＨＷは、Ｔｉｅｒ１の寿命を考慮して決定されており、Ｔｉｅｒ１の残寿命が小さい程、ライト係数が小さくなる。つまり、長周期Ｉ／Ｏ頻度が高くても、ライト頻度が高いページデータは、Ｔｉｅｒ１に移動される可能性が小さくなる。
【０１３７】
これにより、実際消費寿命率が理想消費寿命率より大きい場合に、実際消費寿命率の増加率を小さくし、実際残寿命率の理想消費寿命率からのかい離を小さくできる。さらに、Ｔｉｅｒ１の残寿命が小さい程、リード係数が大きくなるので、Ｔｉｅｒ１ヒット率の低下を抑制できる。
【０１３８】
上記例は、長周期のＩ／Ｏ頻度指標のみにより、階層判定を行う。非同期再配置判定プログラム６０６は、短周期のＩ／Ｏ頻度指標を、合わせて参照してもよい。例えば、非同期再配置判定プログラム６０６は、短周期Ｉ／Ｏカウンタ５３８の値、前回判定時刻５３９の値及び現在時刻から、短周期ＩＯＰＨを計算し、その値が所定の値より大きい場合には、Ｔｉｅｒ１に配置されている仮想ＶＯＬページを、Ｔｉｅｒ１に維持してもよい。これにより、突発的にＩ／Ｏ頻度が増加し、その状態が続くページデータをＴｉｅｒ１に維持できる。
【０１３９】
図２０は、モニタ更新・階層判定プログラム６０３の動作のフローチャートを示す。モニタ更新・階層判定プログラム６０３は、ホストＩ／Ｏプログラム６０１によって、リード要求の受信に同期して呼び出され、さらに、デステージプログラム６０４によりデステージに同期して呼び出される。リード要求の受信やデステージは、Ｉ／Ｏ処理に含まれ、モニタ更新・階層判定プログラム６０３、Ｉ／Ｏ処理に同期してページの階層判定及び再配置を実行する。図２０は、１回のアクセスに対する処理を示す。
【０１４０】
モニタ更新・階層判定プログラム６０３は、呼び出しの契機のＩ／Ｏ種別が、リード要求であるかライト要求であるか判定する（Ｓ４０１）。モニタ更新・階層判定プログラム６０３は、呼び出し元からＩ／Ｏについての情報を取得し、当該情報を参照してＩ／Ｏ種別を判定する。
【０１４１】
Ｉ／Ｏ種別がリードである場合（Ｓ４０１：リード）、モニタ更新・階層判定プログラム６０３は、ページモニタテーブル５０３において、対応するエントリの、長周期リードカウンタ５３１の値と、短周期リードカウンタ５３６の値とを、インクリメントする（Ｓ４０２）。
【０１４２】
モニタ更新・階層判定プログラム６０３は、短周期リードカウンタ５３６の現在値が、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントするための必要リード回数の条件を満たすか判定する（Ｓ４０３）。例えば、モニタ更新・階層判定プログラム６０３は、Ｔｉｅｒ１寿命管理テーブル５１３から、アクセス先プールの必要リード回数５７７の値を取得し、短周期リードカウンタ５３６値が必要リード回数５７７の値の倍数であるか判定する。モニタ更新・階層判定プログラム６０３は、必要リード回数をカウントするための別のカウンタを使用してもよい。
【０１４３】
必要リード回数の条件が満たされている場合（Ｓ４０３：Ｙ）、モニタ更新・階層判定プログラム６０３は、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントする（Ｓ４０４）。必要リード回数の条件が満たされていない場合（Ｓ４０３：Ｎ）、モニタ更新・階層判定プログラム６０３は、終了する。
【０１４４】
ステップＳ４０１において、Ｉ／Ｏ種別がライトである場合（Ｓ４０１：ライト）、モニタ更新・階層判定プログラム６０３は、ページモニタテーブル５０３において、対応するエントリの、長周期ライトカウンタ５３２の値と、短周期ライトカウンタ５３７の値とを、インクリメントする（Ｓ４０５）。
【０１４５】
モニタ更新・階層判定プログラム６０３は、短周期ライトカウンタ５３７の現在値が、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントするための必要ライト回数の条件を満たすか判定する（Ｓ４０６）。例えば、モニタ更新・階層判定プログラム６０３は、Ｔｉｅｒ１寿命管理テーブル５１３から、アクセス先プールの必要ライト回数５７８の値を取得し、短周期ライトカウンタ５３７の値が必要ライト回数５７８の値の倍数であるか判定する。モニタ更新・階層判定プログラム６０３は、必要ライト回数をカウントするための別のカウンタを使用してもよい。
【０１４６】
必要ライト回数の条件が満たされている場合（Ｓ４０６：Ｙ）、モニタ更新・階層判定プログラム６０３は、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントする（Ｓ４０４）。必要ライト回数の条件が満たされていない場合（Ｓ４０６：Ｎ）、モニタ更新・階層判定プログラム６０３は、終了する。
【０１４７】
ステップＳ４０７において、モニタ更新・階層判定プログラム６０３は、短周期Ｉ／Ｏカウンタ５３８の値が規定値に達しているか判定する。規定値はプール毎に設定されてよく、例えば、パラメータテーブル５０６に予め格納されている。短周期Ｉ／Ｏカウンタ５３８の値が規定値に達していない場合（Ｓ４０７：Ｎ）、モニタ更新・階層判定プログラム６０３は、終了する。
【０１４８】
短周期Ｉ／Ｏカウンタ５３８の値が規定値に達している場合（Ｓ４０７：Ｙ）、モニタ更新・階層判定プログラム６０３は、対象の仮想ＶＯＬページのページデータが、Ｔｉｅｒ１に存在するか判定する（Ｓ４０８）。モニタ更新・階層判定プログラム６０３は、ダイナミックマッピングテーブル５０１及びプールＶＯＬ管理テーブル５０２を参照することで、対象仮想ＶＯＬページが配置された階層（パリティグループ）を特定できる。
【０１４９】
対象ページデータがＴｉｅｒ１に存在する場合（Ｓ４０８：Ｙ）、モニタ更新・階層判定プログラム６０３は、当該ページデータのＴｉｅｒ１からのデモーションの要否を判定する（Ｓ４０９）。
【０１５０】
具体的には、モニタ更新・階層判定プログラム６０３は、Ｔｉｅｒ１の寿命を考慮しない、長周期ＩＯＰＨ及び短周期ＩＯＰＨを計算する。デモーションの移動先はＴｉｅｒ１以外の階層であり、モニタ更新・階層判定プログラム６０３は、当該データのライト頻度とＴｉｅｒ１寿命との関係を考慮しない。
【０１５１】
モニタ更新・階層判定プログラム６０３は、長周期リードカウンタ５３１の値と長周期ライトカウンタ５３２の値の和を今回長周期の経過時間で割って、長周期ＩＯＰＨを計算する。モニタ更新・階層判定プログラム６０３は、短周期リードカウンタ５３６の値と短周期ライトカウンタ５３７の値の和を、今回短周期の長さで割って、短周期ＩＯＰＨを計算する。今回短周期の長さは、現在時刻から前回判定時刻を引いた値である。
【０１５２】
長周期ＩＯＰＨが所定閾値ＤＴより小さく、かつ、短周期ＩＯＰＨがＤＴ×Ｍより小さい場合、モニタ更新・階層判定プログラム６０３は、当該ページデータのデモーションを実行することを決定する。Ｍは１より大きい定数である。ＤＴ及びＭは、例えば、プール毎又はパリティグループ毎にパラメータテーブル５０６に格納されている。Ｍにより、短周期Ｉ／Ｏ頻度に基づく再配置の繰り返しを抑制する。なお、デモーションの実行条件は、Ｔｉｅｒ１の使用量が所定値より多いことを含んでもよい。
【０１５３】
デモーションが必要であると判定された場合（Ｓ４０９：Ｙ）、モニタ更新・階層判定プログラム６０３は、ページデータの移動をページ再配置プログラム６０５に指示し（Ｓ４１０）、終了する。デモーションが不要であると判定された場合（Ｓ４０９：Ｎ）、モニタ更新・階層判定プログラム６０３は、終了する。モニタ更新・階層判定プログラム６０３は、終了前に、短周期Ｉ／Ｏ負荷モニタ５３５の値を初期値にリセットする。
【０１５４】
対象ページデータがＴｉｅｒ１に存在しない場合（Ｓ４０８：Ｎ）、モニタ更新・階層判定プログラム６０３は、当該ページデータのＴｉｅｒ１へのプロモーションの要否を判定する（Ｓ４１１）。
【０１５５】
モニタ更新・階層判定プログラム６０３は、Ｔｉｅｒ１使用量から、ページデータの移動が可能であるか判定する。Ｔｉｅｒ１の容量と使用量の差分が所定値より小さい場合、プロモーションは実行されない。Ｔｉｅｒ１の空き容量が所定値以上である場合、モニタ更新・階層判定プログラム６０３は、Ｔｉｅｒ１の寿命を考慮した長周期Ｉ／Ｏ頻度（ＩＯＰＨＷ）及び短周期Ｉ／Ｏ頻度の指標を計算する。当該短周期Ｉ／Ｏ頻度指標を、ここでは、短周期ＩＯＰＨＷと呼ぶ。
【０１５６】
モニタ更新・階層判定プログラム６０３は、Ｔｉｅｒ１寿命管理テーブル５１３から、該当プールのＩＯＰＨＷリード係数５７５の値と、ＩＯＰＨＷライト係数５７６の値を取得する。モニタ更新・階層判定プログラム６０３は、これら係数と、長周期リードカウンタ５３１の値及び長周期ライトカウンタ５３２の値の積和を計算し、今回長周期の経過時間で割って、長周期ＩＯＰＨＷを計算する。
【０１５７】
さらに、モニタ更新・階層判定プログラム６０３は、短周期Ｉ／Ｏカウンタ５３８の値を、今回短周期の長さで割って、Ｔｉｅｒ１の寿命を考慮した短周期ＩＯＰＨＷを計算する。短周期Ｉ／Ｏカウンタ５３８の値は決められた値であり、短周期ＩＯＰＨＷは短周期の長さで決まる。
【０１５８】
長周期ＩＯＰＨＷが所定閾値ＰＴより大きい、又は、短周期ＩＯＰＨＷがＰＴ×Ｍより大きい場合、モニタ更新・階層判定プログラム６０３は、当該ページデータのプロモーションを実行することを決定する。閾値ＰＴは閾値ＤＴよりも大きい値であり、Ｍは１より大きい定数である。Ｍは、デモーションで参照される値と同じ又は異なる。ＰＴ及びＭは、例えば、プール毎又はパリティグループ毎にパラメータテーブル５０６に格納されている。Ｍにより、短周期のＩ／Ｏ頻度に基づく再配置の繰り返しを抑制する。
【０１５９】
プロモーションが必要であると判定された場合（Ｓ４１１：Ｙ）、モニタ更新・階層判定プログラム６０３は、ページデータの移動をページ再配置プログラム６０５に指示（Ｓ４１０）、終了する。プロモーションが不要であると判定された場合（Ｓ４１１：Ｎ）、モニタ更新・階層判定プログラム６０３は終了する。モニタ更新・階層判定プログラム６０３は、終了前に、短周期Ｉ／Ｏ負荷モニタ５３５の値を初期値にリセットする。
【０１６０】
上述のように、モニタ更新・階層判定プログラム６０３は、所定リード回数毎、さらに、所定ライト回数毎に短周期Ｉ／Ｏカウンタ５３８をインクリメントし、短周期Ｉ／Ｏカウンタ５３８が所定値に達するまでの時間（短周期）で短周期ＩＯＰＨＷを決定する。これにより、必要リード回数（重み）、必要ライト回数（重み）、短周期におけるリード回数（頻度）、及び短周期におけるライト回数（頻度）に基づき、短周期ＩＯＰＨＷが決定される。
【０１６１】
図２１は、Ｔｉｅｒ１の実際消費寿命率、理想消費寿命率、ホストＩ／Ｏ数、及び短周期Ｉ／Ｏカウンタ値の関係例を示す。グラフにおける破線内の数字は、必要リード回数・ライト回数設定テーブル５０９におけるエントリ番号を示す。
【０１６２】
実際消費寿命率Ａは理想消費寿命率以下であり、必要リード回数・ライト回数設定テーブル５０９において、エントリ番号１に対応する。その必要リード回数は１であり、必要ライト回数は２である。実際消費寿命率Ａのページデータの短周期Ｉ／Ｏカウンタ値が短周期長さに対する閾値を越えており、当該ページデータはＴｉｅｒ１に再配置される。
【０１６３】
実際消費寿命率Ｂは理想消費寿命率よりも大きく、必要リード回数・ライト回数設定テーブル５０９において、エントリ番号６に対応する。その必要リード回数は１であり、必要ライト回数は無限、つまり、ライトにより短周期Ｉ／Ｏカウンタ値はインクリメントされない。実際消費寿命率Ｂのページデータの短周期Ｉ／Ｏカウンタ値は短周期長さに対する閾値以下である。当該ページデータは、Ｔｉｅｒ１に移動されない。
【０１６４】
上述のように、Ｔｉｅｒ１へのプロモーションは、Ｔｉｅｒ１の寿命を考慮した長周期ＩＯＰＨＷ及び短周期ＩＯＰＨＷを参照する。長周期ＩＯＰＨＷは、Ｔｉｅｒ１の実際消費寿命率が理想消費寿命率より大きい程、ライト係数が小さくなる。また、短周期ＩＯＰＨＷは、短周期Ｉ／Ｏカウンタ５３８の値を短周期長で割った値であり、Ｔｉｅｒ１の実際消費寿命率が理想消費寿命率より大きい程、短周期Ｉ／Ｏカウンタ５３８をインクリメントするために必要なライト回数が大きくなる。
【０１６５】
つまり、長周期ＩＯＰＨＷ及び短周期ＩＯＰＨＷのいずれの基準においても、ライト頻度が高いページデータは、Ｔｉｅｒ１に移動される可能性が小さくなる。これにより、実際消費寿命率が理想消費寿命率より大きい場合に、実際消費寿命率の増加率を小さくし、実際残寿命率の理想消費寿命率からのかい離を小さくできる。短周期Ｉ／Ｏカウンタ５３８の値により短周期を決めることで、突発的にアクセス頻度が増加したページを適切に検出できる。また、アクセス頻度が増加していないページのための処理が不要であり、処理効率を向上できる。
【０１６６】
上記例は、Ｔｉｅｒ１寿命を考慮した、長周期Ｉ／Ｏ頻度指標及び短周期Ｉ／Ｏ頻度指標を参照するが、モニタ更新・階層判定プログラム６０３は、短周期Ｉ／Ｏ頻度指標のみを参照してもよい。短周期の長さが所定の値を超える場合には、長周期と比較して十分な短周期ではなくなる。したがって、（現在時刻−前回判定時刻）が所定の時間より長い場合、短周期ＩＯＰＨＷを参照した判定を省略してもよい。
【０１６７】
上記長周期Ｉ／Ｏ頻度指標及び短周期Ｉ／Ｏ頻度指標の算出方法は、一例を示したものであり、他の算出方法が採用されてもよい。例えば、長周期のＩ／Ｏ数が所定値に達したときに、長周期ページ再配置が実行されてもよい。長周期のために設定される所定値は、短周期Ｉ／Ｏカウンタに設定される所定値よりも十分大きい。短周期は、長周期よりも短い一定の期間であってもよい。
【０１６８】
上記例は、長周期における再配置（Ｉ／Ｏ非同期再配置）及び短周期における再配置（Ｉ／Ｏ同期再配置）の双方において、Ｔｉｅｒ１の寿命率を考慮して、Ｔｉｅｒ１へのページデータの移動の有無を判定する。ストレージシステム１０４は、上記再配置のいずれか一方のみにおいて、Ｔｉｅｒ１の寿命率を考慮してもよい。ストレージシステム１０４は、長周期又は短周期の再配置の一方を実行しなくてもよい。
【０１６９】
図２２は、モニタ更新・階層判定プログラム６０３が、下位階層からＴｉｅｒ１にページデータを移動する際、移動先のパリティグループを決定する処理のフローチャートを示す。モニタ更新・階層判定プログラム６０３は、実際消費寿命率に基づき、移動先パリティグループを決定する。これにより、パリティグループの寿命消費ペースを平滑化することができる。
【０１７０】
まず、モニタ更新・階層判定プログラム６０３は、仮想ＶＯＬページが対応するプールのＴｉｅｒ１において、優先順位１の移動先（プールボリューム）が存在するか判定する（Ｓ５０１）。具体的には、モニタ更新・階層判定プログラム６０３は、プールＶＯＬ管理テーブル５０２及び移動先プールＶＯＬ優先順位管理テーブル５１４を参照し、対応プールの優先順位１のプールボリュームであって、残容量（容量−使用量）が所定値以上のプールボリュームを検索する。条件を満たすプールボリュームが存在する場合（Ｓ５０１：Ｙ）、モニタ更新・階層判定プログラム６０３は、当該プールボリュームを移動先と決定する（Ｓ５０２）。
【０１７１】
優先順位１の移動先が存在しない場合（Ｓ５０１：Ｎ）、モニタ更新・階層判定プログラム６０３は、仮想ＶＯＬページが対応するプールのＴｉｅｒ１において、次の優先順位である、優先順位２の移動先（プールボリューム）が存在するか判定する（Ｓ５０３）。判定方法は、ステップＳ５０１と同様である。条件を満たすプールボリュームが存在する場合（Ｓ５０３：Ｙ）、モニタ更新・階層判定プログラム６０３は、当該プールボリュームを移動先と決定する（Ｓ５０４）。
【０１７２】
優先順位２の移動先が存在しない場合（Ｓ５０１：Ｎ）、モニタ更新・階層判定プログラム６０３は、仮想ＶＯＬページが対応するプールのＴｉｅｒ１において、次の優先順位である、優先順位３の移動先（プールボリューム）が存在するか判定する（Ｓ５０５）。以下同様に、移動先が見つかるまで、モニタ更新・階層判定プログラム６０３は、高い優先順位の移動先から順次検索する（Ｓ５０６〜Ｓ５１２）。移動先が見つからない場合、モニタ更新・階層判定プログラム６０３は、ページデータのＴｉｅｒ１へ移動しないと判定する。
【０１７３】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【０１７４】
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、または、ＩＣカード、ＳＤカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。
【図１】
2016170631.tif 000003
【図２】
2016170631.tif 000004
【図３】
2016170631.tif 000005
【図４】
2016170631.tif 000006
【図５】
2016170631.tif 000007
【図６】
2016170631.tif 000008
【図７】
2016170631.tif 000009
【図８】
2016170631.tif 000010
【図９】
2016170631.tif 000011
【図１０】
2016170631.tif 000012
【図１１】
2016170631.tif 000013
【図１２】
2016170631.tif 000014
【図１３】
2016170631.tif 000015
【図１４】
2016170631.tif 000016
【図１５】
2016170631.tif 000017
【図１６】
2016170631.tif 000018
【図１７】
2016170631.tif 000019
【図１８】
2016170631.tif 000020
【図１９】
2016170631.tif 000021
【図２０】
2016170631.tif 000022
【図２１】
2016170631.tif 000023
【図２２】
2016170631.tif 000024
【手続補正書】
【提出日】平成29年8月22日(2017.8.22)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００７１
【補正方法】変更
【補正の内容】
【００７１】
非同期再配置判定プログラム６０６は、度数分布作成が完了すると起動され、所定周期にてページモニタテーブル５０３を参照し、ページ毎に適切なＴｉｅｒの判定を実行するプログラムである。ページ再配置プログラム６０５は、ページを再配置するプログラムであり周期的に実行される。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００８９
【補正方法】変更
【補正の内容】
【００８９】
Ｔｉｅｒ１の実際消費寿命率５４６は、Ｔｉｅｒ１の理想寿命率を基準とした、実際消費寿命率の範囲を示す。本例において、Ｔｉｅｒ１の実際消費寿命率５４６は、実際消費寿命率と理想寿命率との差の、理想消費寿命率に対する比率の範囲を示す。本例において、Ｔｉｅｒ１の実際消費寿命率５４６の各エントリの範囲は、リード係数・ライト係数設定テーブル５０８と同様である。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００９０
【補正方法】変更
【補正の内容】
【００９０】
必要リード回数５４７及び必要ライト回数５４８は、それぞれ、対応する実際消費寿命率５４６の範囲において、短周期Ｉ／Ｏカウンタ５３８の値をインクリメントするために必要とされるリード回数及びライト回数を示す。つまり、仮想ＶＯＬページに対して必要リード回数５４７が示す回数のリードアクセスが実行されると、短周期Ｉ／Ｏカウンタ５３８の値がインクリメントされる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１７２
【補正方法】変更
【補正の内容】
【０１７２】
優先順位２の移動先が存在しない場合（Ｓ５０３：Ｎ）、モニタ更新・階層判定プログラム６０３は、仮想ＶＯＬページが対応するプールのＴｉｅｒ１において、次の優先順位である、優先順位３の移動先（プールボリューム）が存在するか判定する（Ｓ５０５）。以下同様に、移動先が見つかるまで、モニタ更新・階層判定プログラム６０３は、高い優先順位の移動先から順次検索する（Ｓ５０６〜Ｓ５１２）。移動先が見つからない場合、モニタ更新・階層判定プログラム６０３は、ページデータのＴｉｅｒ１へ移動しないと判定する。
【国際調査報告】
2016170631.tif 000025
2016170631.tif 000026
2016170631.tif 000027
2016170631.tif 000028