以下、図面に基づいて、本発明の実施の形態を説明する。添付図面では、機能的に同じ要素を同じ番号で表示する場合がある。添付図面は、本発明の原理に則った具体的な実施形態と実施例とを示している。それらの実施形態及び実施例は、本発明の理解のためのものであり、本発明を限定的に解釈するために用いてはならない。
さらに、本発明の実施形態は、後述するように、汎用コンピュータ上で稼動するソフトウェアで実装しても良いし、専用ハードウェアで実装してもよいし、またはソフトウェアとハードウェアの組み合わせで実装しても良い。
以後の説明では、管理用の情報をテーブル形式で説明するが、管理用の情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、リスト、DB、キュー等のデータ構造やディレクトリ構造等その他の方法で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「DB」、「キュー」等について単に「情報」と呼ぶことがある。
以下では「プログラム」を主語(動作主体)として本発明の実施形態における各処理について説明を行う場合がある。プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート(通信制御装置)を用いながら行うため、プロセッサを主語とした説明としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていても良い。各種プログラムはプログラム配布サーバや非一時的記憶メディアによって各計算機にインストールされてもよい。
図1は、実施形態に係る計算機システムの構成例を示す。ホスト101は、例えば一般的なサーバにより構成され、ネットワーク103を介してストレージシステム104のポート106に接続する。ホスト101は、ストレージシステム104に対してデータのリード要求やライト要求を発行する。ストレージシステム104は、その命令に応じてデータの読み出しや書き込みを実行する。
ネットワーク103は、例えばSAN(Storage Area Network)や、イーサネットなどにより構成される。管理サーバ102は、ネットワーク103を介して、ストレージシステム104の保守I/F107またはポート108に接続する。ストレージ管理者が、管理サーバ102を用いて、ストレージシステム104に対して、ストレージシステムを運用する上で必要な各種設定や管理のための命令を送信する。
外部ストレージ105は、ストレージシステム104のポート108に接続される。外部ストレージ105は、ネットワーク103を経由してストレージシステム104のポート108に接続されてもよい。外部ストレージ105の提供するボリュームは、ストレージシステム104にてストレージシステム104内部のボリュームと同様に扱うことができる。
ストレージシステム104の内部では、内部ネットワーク112を介してポート106、保守I/F107、プロセッサパッケージ109、キャッシュメモリ110、共有メモリ111、ポート108、ドライブ113、ドライブ114が接続される。
キャッシュメモリ110は、ストレージシステム104のI/O処理のスループットやレスポンスを向上させるために、データを一時的なキャッシュとして格納するための高速アクセスが可能なメモリである。
プロセッサパッケージ109は、ローカルメモリ118とプロセッサ119を含んで構成される。複数のプロセッサパッケージ109が実装されてもよい。プロセッサ119はホスト101からのリード要求やライト要求を処理するために、ドライブ113、114、外部ストレージ105とキャッシュメモリ110との間のデータの転送処理などを実行する。
共有メモリ111は、プロセッサ119がリード要求やライト要求を処理し、またストレージの機能(ボリュームのコピー機能など)を実行する上で、必要な制御用の情報を格納する。共有メモリ111は、複数のプロセッサパッケージ109A、109Bのプロセッサ119間で共有されている情報を格納する。プロセッサパッケージは、ストレージシステムのコントローラである。
ローカルメモリ118は、プロセッサ119がリード要求やライト要求を処理し、またストレージの機能を実行する上で、必要な制御用の情報を格納する。ローカルメモリ118は、プロセッサ119が占有して使用できる領域である。ローカルメモリ118は、例えばプロセッサ119により実行するプログラムを格納する。
ドライブ113、114は性能の異なる複数種類のドライブで構成されている。ドライブの種類は、例えばFC(Fibre Channel)、SAS(Serial Attached SCSI)、SATA(Serial Advanced Technology Attachment)などのインターフェイスを持つハードディスクドライブ(HDD)、HDDと比較し、I/Oスループット性能、I/Oレスポンス性能が高いSSD(Solid State Drive)である。SSDはフラッシュメディアを実装されたフラッシュデバイスである。
複数種類のドライブを、近い性能を持つドライブに分類したものが階層(Tier)115、116、117である。階層間の関係は性能の上下関係により定義される。通常は性能の高いドライブ(SSDなど)から順に、Tier1、Tier2、Tier3を構成する。外部ストレージ105中のドライブは、性能が低いことを前提として最下位階層として管理してもよいし、ユーザが保守I/F107を通して外部ストレージ105の性能に応じた階層を設定してもよい。
本実施形態において、Tier1は消去可能回数が仕様で決められているドライブの記憶領域で構成され、他の階層は、消去可能回数が仕様で決められていないドライブの記憶領域で構成される。具体的には、Tier1はSSD(フラッシュデバイス)の記憶領域で構成され、他の階層は、例えば、ハードディスクドライブ(HDD)の記憶領域で構成される。
図2は、実施形態に係るストレージシステムの論理構成を示す。プロセッサ119がホストに提供する仮想ボリューム(仮想VOL)201A、201Bは、ホスト101から認識される論理的な記憶領域であり、ホスト101からのリード要求又はライト要求が発行される対象である。
プール206は、1以上のプールボリューム(プールVOL)203A〜203Eにより構成される。プールボリューム203A〜203Eはそれぞれドライブ113、114、外部ストレージ105のドライブの何れかの記憶領域から構成され、ドライブの所属する階層に応じて分類されている。つまり、プール206の全体の記憶領域は、複数の階層で構成されている。
本例では、SSDの階層115(プールボリューム203Aに対応)と、SASの階層116(プールボリューム203B、203Cに対応)と、外部接続の階層117(プールボリューム203D、203Eに対応)の三つの階層が存在する。
プロセッサ119は、ホスト101がライト要求を発行した仮想ボリューム(例えば201A)中の対象記憶領域に、未使用の記憶領域をプール206から所定単位(ページ又はプールVOLページと呼ぶ)で割り当てる。一つの仮想ボリュームは、一つのプールからのみ記憶領域が割り当てられる。
次回のホスト101からの仮想ボリュームへの同じ記憶領域へのリード/ライト要求に対しては、既に割り当てられているプールボリューム203の領域に対してI/O処理を実行する。仮想ボリュームの所定単位の記憶領域をページ又は仮想VOLページと呼ぶ。図2において、仮想VOLページ202A〜202Eに対して、それぞれ、プールVOLページ204A、204E、204C、204D、204Fが割り当てられている。
プロセッサ119は、あたかもホスト101が仮想ボリューム201A、201Bに対してI/O処理を実行しているように、I/O要求(リード又はライト要求)を処理する。仮想ボリュームを用いて、使用する部分のみプールボリュームの領域(ページ)を割り当てることにより、限られた記憶容量を効率的に使用できることができる。
各仮想ボリューム201A、201Bを構成する仮想VOLページ毎にホストからのI/O処理の特性が存在する。これをアクセスローカリティと呼ぶ。例えば、I/Oの頻度が高い仮想VOLページと低い仮想VOLページが混在する場合、一般的にはI/Oの頻度が高い仮想VOLページのデータを上位の階層に配置したほうが、システム全体の性能を向上できる。
例えば、SSD階層115は100IOPS(Input Output Per Second)、SAS階層116は10IOPS処理できるとする。さらに、50IOPSの特性を持つ仮想VOLページ202CにSAS階層116が割り当てられ、20IOPSの特性を持つ仮想VOLページ202AにSSD階層115が割り当てられているとする。
ホスト101からのページに対するIOPSの比率は一定であることが多いため、ストレージシステム104は、10(SAS階層116の上限)+20=30IOPSの性能しか発揮できない。この状態をネック状態と呼ぶ。ページ202CをSAS階層116から、SSD階層115へプロモーションすることができれば、ストレージシステム104は、50+20=70IOPSの性能を発揮できる。
上述のプロモーションは、具体的には、プールVOLページ204Cのデータを未使用のプールVOLページ204Bにコピーし、仮想VOLページ202CとプールVOLページ204Cとの対応づけ205Cを、仮想VOLページ202CとプールVOLページ204Bとの対応づけ205Bに変更する。デモーションによるデータ再配置も同様の方法により実行可能である。プロモーション/デモーションは、同一プール内で実行される。
度数分布207は、各プールVOLページ又は割り当てられている仮想VOLページのI/O頻度の分布を表す。I/O頻度は、例えば、時間(h)当たりのI/O数(IOPH)である。グラフ209は、左からI/O頻度の多い順番にページを並べたときの、各ページのI/O頻度を縦軸に表す。階層割り当て閾値は、どのI/O頻度のページをどの階層に割り当てるかを決める閾値である。
最もI/O頻度が高い範囲210Aに属するページは、Tier1(本例ではSSD)の階層115に割り当てられる。範囲210Aは、階層割り当て閾値208Aと度数分布のグラフ209の交点から最も性能の高いページまでの範囲である。
次にI/O頻度が高い範囲210Bに属するページは、Tier2(本実施例ではSAS)の階層116に割り当てられる。範囲210Bは、階層割り当て閾値208Aと度数分布のグラフ209の交点から、階層割り当て閾値208Bと度数分布のグラフ209の交点までの範囲である。
最もI/O頻度が低い範囲210Cに属するページは、Tier3(本例では外部ストレージ105)の階層117に割り当てられる。範囲210Cは、階層割り当て閾値208Bと度数分布のグラフ209の交点から、最小のI/O頻度のページまでの範囲である。以上のようにして、I/O頻度の高い順番で仮想VOLページに上位階層からプールVOLページを割り当てることができる。
階層割り当て閾値208A、208Bはストレージ管理者により指定されてもよいし、ストレージシステム104が算出してもよい。その初期値(ストレージシステム104を起動した後、度数分布を未作成の段階時の値)は、例えば0であり、仮想VOLページに対して上位階層のプールVOLページから順に割り当ててもよい。
以下において、本実施形態のページ再配置を説明する。ページ再配置は、階層に割り当てられている仮想VOLページを新たな階層に割り当てる、つまり、仮想VOLページのデータを格納する新たな階層を決定し、当該階層の記憶領域(プールVOLページ)にデータを移動する。本実施形態のストレージシステム104は、長周期I/O(負荷)モニタ結果と短周期I/O(負荷)モニタ結果に基づいて、異なる種類の周期でデータの階層制御を行う。
ストレージシステム104は、予め定められた周期(長周期)のI/Oモニタ結果を基に、ページの再配置先を決定する。具体的には、図2で示したように、ストレージシステム104は、一定の長周期(例えば12時間)のI/Oのモニタ結果を基に、プール206の度数分布207を作成し、階層割り当て閾値208A、208Bを決定する。
ストレージシステム104は、長周期における各仮想VOLページのI/O数から、長周期におけるI/O頻度の指標を決定し、当該I/O頻度指標と階層割り当て閾値208A、208Bとに基づき、各仮想VOLページの再配置先を決定する。ストレージシステム104は、上述のように、長周期負荷を基準にページ配置を決めた上で、短周期負荷、つまり、短周期における仮想VOLページのI/O頻度に基づき、長周期負荷とは異なる基準で、階層間データ再配置を行う。
ストレージシステム104は、仮想VOLページの短周期におけるI/O頻度の指標が所定値に達している場合に、当該仮想VOLページを短周期でのプロモーション対象として選択しTier1へ再配置する。長周期の安定的なTier1ヒット率を考慮しつつ、突発的にI/Oの高いページデータもTier1に配置することで、全体のTier1ヒット率を向上させることができる。
ストレージシステム104は、必要であれば、空きページ領域を確保するためにTier1のページデータのデモーションを実行した後に、下階層ページデータのTier1へのプロモーションを実行する。例えば、ストレージシステム104は、Tier割り当て閾値208A、208Bと、長周期負荷及び短周期負荷との関係から、デモーション対象のページをTier1から選択する。ストレージシステム104は、デモーション対象ページの長周期/短周期負荷よりも高く、所定閾値を越える短周期負荷のページデータを、プロモーション対象として選択する。
短周期のプロモーション/デモーションは、予め定めた一定周期の長さに依存するのではなく、I/O処理に同期して階層間の移動要否を判定する。例えば、後述するように、リード要求の受信及びライトデータのドライブへのデステージに同期して移動要否が判定される。
本実施形態において、Tier1はフラッシュデバイスであるSSDの記憶領域で構成され、他のTierはHDDの記憶領域で構成されている。フラッシュデバイスは、消去回数に依存する寿命を有しており、データのライト回数と共に消去回数が増加し、残寿命が短くなる。
本実施形態のページ再配置は、Tier1に高負荷ページを集中させることで、Tier1ヒット率を向上させる一方、SSDのドライブ寿命の消費を早め、寿命仕様よりも大幅に短い期間で故障を引き起こす可能性がある。本実施形態のストレージシステム104は、高負荷ページの集中によるドライブ寿命の消費を考慮して、Tier1へのページデータの配置を制御する。
具体的には、ストレージシステム104は、Tier1の消費寿命率に基づき、リードアクセスとライトアクセスのそれぞれの重み(重要度)を決定し、当該重みを使用して長周期及び短周期それぞれのI/O頻度指標を決定する。消費寿命率は、寿命において消費された分の割合であり、例えば、消去回数/消去可能回数で表わすことができる。ライトアクセスの重みは、リードアクセスの重み以下である。これにより、Tier1の総ライト回数の増加を抑制し、Tier1の寿命消費を抑制する。
Tier1の消費寿命率を説明する。Tier1の消費寿命率は、Tier1を構成するプールボリュームの消費寿命率から決定される。一般に、Tier1は複数プールボリュームで構成される。プールボリュームの消費寿命率は、プールボリュームの記憶領域を提供するパリティグループ(PG)の消費寿命率と一致する。パリティグループは、冗長構成を有するドライブのグループであり、RAIDグループとも呼ばれる。
図3は、パリティグループの理想消費寿命率変化の例を示す。理想消費寿命率変化は、ストレージシステム104の設計において決定される。図3の例において、理想消費寿命率変化は、線33に示すように、5年で95%である。線31、32は、それぞれ、PG#1、PG#2のパリティグループの理想消費寿命率を示している。
線31の例において、PG#1のパリティグループ(のプールボリューム)がプールに追加された時の残寿命率は24%である。寿命率の理想消費ペースは5年で95%であり、残寿命率19%が1年で消費される。
線32の例において、PG#2のパリティグループ(のプールボリューム)がプールに追加された時の残寿命率は81%である。寿命率の理想消費ペースは5年で95%であり、残寿命率76%が4年で消費される。
図4は、Tier1(プール)、プールボリューム、パリティグループ、ドライブ(PDEV)の消費寿命率の関係例を示す。パリティグループは、ドライブの冗長グループであり、パリティグループの消費寿命率は、パリティグループ内のドライブの消費寿命率の最大値(ワースト値)に一致する。
PGの実際消費寿命率=PG内ドライブのワースト実際消費寿命率
PGの理想消費寿命率=PG内ドライブのワースト理想消費寿命率
実際消費寿命率は、ドライブの実際の消去回数/消去可能回数から決定され、ドライブがその値を管理している。ドライブの理想消費寿命率は、プールに追加された時の消費寿命率(初期消費寿命率)及びその後の経過年数(使用年数)から決定される。例えば、下記式で計算される。
ドライブの理想寿命率=初期消費寿命率+使用年数/5年*100
例えば、プールVOL♯1のプールボリュームは、PG#1のパリティグループに属する。PG#1のパリティグループにおいて、所属ドライブの実際消費寿命率の最大値は95%であり、理想消費寿命率の最大値は、20+3/5年*100=80%である。したがって、PG#1のパリティグループの実際消費寿命率及び理想消費寿命率は、それぞれ95%及び80%であり、それら差分は15%である。
プールVOL♯2のプールボリュームは、PG#2のパリティグループに属する。PG#2のパリティグループにおいて、所属ドライブの実際消費寿命率の最大値は50%であり、理想消費寿命率の最大値は、10+3/5年*100=70%である。したがって、PG#1のパリティグループの実際消費寿命率及び理想消費寿命率は、それぞれ50%及び70%であり、それら差分は−20%である。
プールにおけるTier1の消費寿命率は、Tier1を構成するプールボリュームの消費寿命率から決定される。例えば、下記式で計算される。
Tier1の実際消費寿命率
=Σ(プールVOL容量*PGの実際消費寿命率) /Σ(プールVOL容量)
Tier1の理想消費寿命率
=Σ(プールVOL容量*PGの理想消費寿命率) /Σ(プールVOL容量)
上述のようにプールボリュームの消費寿命率はパリティグループの消費寿命率と一致し、Tier1の消費寿命率は、プールボリュームの容量比率と消費寿命率の積和である。例えば、プール#1のプールにおいて、Tier1は、プールVOL#1、プールVOL#2のプールボリュームで構成されており、容量は共に100GBである。プール#1のプールにおけるTier1の実際消費寿命率は、(100*95%+100*50%)/200=72.5%である。また、理想消費寿命率は、(100*80%+100*70%)/200=75%である。
なお、消費寿命率は、次のようにブロックの劣化を示す指標(劣化度)を用いて算出されてもよい。劣化度の算出には、ブロックに最後データを書き込んでから、消去するまでの時間(以下、PE(Program−Erase)間隔)を用いる。これは、PE間隔が短いほどブロックが劣化しやすいというフラッシュメモリの特性があるためである。劣化度は、ブロックに格納されたデータを消去する際に、PE間隔に応じて、点数を加算する。例えば、ブロック毎に許容可能劣化度を10000点として、PE間隔が5分未満の場合は20点、5分以上10分未満の場合は15点等、PE間隔が長いほど小さい点数を加算する。これにより、より正確な寿命を算出することができる。
劣化度を用いる場合の実際消費寿命率は、ドライブの実際の劣化度(ドライブ内の各ブロックの劣化度の合計値)/ドライブの許容可能劣化度(ドライブ内の各ブロックの許容可能劣化度の合計値)から決定される。
図5は、共有メモリ111に格納される情報(テーブル)を示し、図6はローカルメモリ118に格納されるプログラムを示す。これらのテーブル及びプログラムの配置場所は例示する場所に限らず、各ローカルメモリ118の他、共有メモリ111、ドライブ113、114等であってもよいし、これらの間で階層管理された空間でもよい。
ダイナミックマッピングテーブル501は、仮想VOLページと、割り当てられるプールボリュームの領域と、当該ページのモニタ情報との対応関係を管理する。仮想VOLページは、仮想ボリューム識別子及び論理アドレスで識別され、プールボリューム内の領域は、プールボリューム識別子及び論理アドレスで識別される。論理アドレスと仮想VOLページ番号とは、所定式によって対応づけられる。
ダイナミックマッピングテーブル501は、所定の初期値データ(例えば0データ)が格納されるデフォルト値ページ、及び、データの書き込みが一度もされていない仮想ボリュームの領域を管理する。ダイナミックマッピングテーブル501は、プール内で仮想ボリュームに未割当の記憶領域(プールVOLページ)を管理する。仮想ボリュームの論理アドレスにデータの書き込みが一度も無かった箇所に初めてデータの書き込みがあった場合は、未割当のプールVOLページを、書き込み先の仮想VOLページに対応づける。
プールVOL管理テーブル502は、パリティグループと、プールボリュームと、プールボリュームの容量との関係を管理する。論理物理アドレス変換テーブル504は、プールボリュームと、パリティグループと、プールボリュームのデータを格納するドライブのアドレス(記憶領域)との対応関係を示す。
度数分布テーブル505は、プールに関する、I/O頻度範囲毎のページ数の分布を管理する。度数分布テーブル505の1つのエントリは、あるプールに関するI/O頻度の範囲と、該I/O頻度の範囲に含まれるページ数を示す。度数分布テーブル505は、階層割り当て閾値も管理する。階層割り当て閾値は必ずしもI/O頻度範囲の境界値である必要はない。パラメータテーブル506は、保守I/F107等から設定される各種パラメータを管理する。
キャッシュ管理テーブル507は、キャッシュメモリ110にデータを格納する際にキャッシュメモリにあるデータのダーティ/クリーン状態を管理する。仮想ボリュームへの書き込みデータをキャッシュする場合には、キャッシュメモリ110のアドレスと対応する仮想VOLページを特定するアドレスとも対応づけて管理される。
リード係数・ライト係数設定テーブル508は、Tier1の消費寿命率を考慮した、長周期I/O頻度の計算において使用される、リードアクセス及びライトアクセスへの重みを示す。必要リード回数・ライト回数設定テーブル509は、Tier1の消費寿命率を考慮した、短周期I/O頻度の計算において使用される、リードアクセス及びライトアクセスへの重みを示す。プロモーション先PG優先順位設定テーブル510は、仮想VOLページのTier1へのプロモーションにおいて、当該仮想VOLページを割り当てるパリティグループの優先順位と、パリティグループの消費寿命率との関係を示す。
PDEV寿命管理テーブル511は、物理ドライブの寿命を管理する。PG寿命管理テーブル512は、Tier1に記憶領域を提供するパリティグループの寿命を管理する。Tier1寿命管理テーブル513は、プールそれぞれのTier1の寿命を管理する。移動先プールVOL優先順位管理テーブル514は、Tier1に移動するページデータの移動先プールボリュームの優先順位を管理する。
図6は、プロセッサ119にて実行されるプログラムを示す。ホストI/Oプログラム601は、ホスト101からのI/O受領時に、仮想ボリューム201に対するリード/ライト要求を処理する。デステージプログラム604は、キャッシュメモリ上のドライブ未反映データを、ドライブに格納し、ホストI/Oとは非同期に実行される。
度数分布作成プログラム602は、階層割り当て閾値を計算し、所定周期、具体的には上記長周期で実行される。モニタ更新・階層判定プログラム603は、ページモニタテーブル503の各種情報の更新と、ページの階層間移動の判定をホストI/O処理に同期して実施する。本プログラムは、Tier1へのプロモーション又はTier1からのデモーションを実行する。
非同期再配置判定プログラム606は、度数分布作成が完了すると起動され、所定周期にてページモニタテーブル503を参照し、ページ毎に適切なTierの判定を実行するプログラムである。ページ再配置プログラム605は、ページを再配置するプログラムであり周期的に実行される。
寿命管理プログラム607は、ドライブ、パリティグループ、及びプールのTier1の寿命を管理する。図5及び図6に示すテーブル及びプログラムのうち、一部はホスト101や管理サーバ102上に配置され、実行されてもよい。
図7は、プールVOL管理テーブル502の構成例を示す。プールVOL管理テーブル502は、プールボリュームが属するプールのプール#521、プールボリュームのプールVOL#522、プールボリュームの記憶領域提供するパリティグループのPG#523、プールボリュームの容量524及び使用量525の情報を値する。プール#、プールVOL#及びPG#は、それぞれ、プール、プールボリューム及びパリティグループの識別子である。
ページモニタテーブル503は、各ページのI/Oモニタ情報を管理する。図8は、ページモニタテーブル503の構成例を示す。図8は、ある仮想ボリュームの一部の仮想VOLページに対するI/Oモニタの情報を示す。
仮想VOLページは、仮想VOLページ#で識別される。仮想VOLページ#は、仮想ボリューム内のページの識別子である。長周期I/O負荷モニタのセクション530は、長周期リードカウンタ531、長周期ライトカウンタ532、前回IOPH533、前回IOPHW534の値を格納する。本例において、長周期は、一定の時間(例えば6時間や24時間)で定義される。長周期の長さは、プール毎に設定されてよく、例えばパラメータテーブル506に格納されている。
長周期リードカウンタ531は、現在の長周期における仮想VOLページへのリードアクセスをカウントする。長周期ライトカウンタ532は、現在の長周期における仮想VOLページへのライトアクセスをカウントする。前回IOPH533は、前回の長周期におけるIOPHの値を格納する。IOPHはI/O頻度であり、具体的には、時間当たりのI/O数である。前回IOPH533の値は、前回の長周期におけるリード頻度及びライト頻度の和であり、具体的には、前回の長周期における時間当たりのリード回数と時間当たりのライト回数との和である。
前回IOPHW534は、前回の長周期におけるIOPHWの値を格納する。IOPHWは、Tier1の寿命を考慮したTier1への移動の有無を判定するために参照されるI/O頻度指標である。IOPHWは、以下の数式により計算される。
IOPHW=リード頻度(回/h)*リード係数+ライト頻度(回/h)*ライト係数
リード係数及びライト係数は、それぞれ、Tier1の消費寿命率に応じて決定され、長周期におけるリードアクセス及びライトアクセスの重みを表す。
図9は、リード係数・ライト係数設定テーブル508の構成例を示す。リード係数・ライト係数設定テーブル508は、Tier1の消費寿命率と、長周期IOPHWの計算において使用されるリード係数及びライト係数のペアと、の関係を示す。#541は、当該テーブルのエントリ番号を示す。
Tier1の実際消費寿命率542は、Tier1の理想寿命率を基準とした、実際消費寿命率の範囲を示す。本例において、Tier1の実際消費寿命率542は、実際消費寿命率と理想寿命率との差の、理想消費寿命率に対する比率の範囲を示す。Tier1の実際消費寿命率542は、理想消費寿命率を基準とした値を使用しなくてもよく、例えば、実際消費寿命率のみで範囲を示してもよい。この点は、他の設定テーブル509、510において同様である。リード係数543及びライト係数544は、それぞれ、Tier1の実際消費寿命率542の範囲それぞれに対応するリード係数及びライト係数を示す。
ライト係数は、実際消費寿命率が理想消費寿命率を上回る度合が大きくなるにつれて、段階的に小さくなる。これにより、理想消費寿命率に対して実際消費寿命率が大きくなっているTier1に対して、ライト頻度が大きいページデータが移動される可能性が小さくなり、Tier1の実際消費寿命率の増加率を小さくできる。
一方、リード係数は、実際消費寿命率が理想消費寿命率を上回る度合が大きくなるにつれて、段階的に大きくなる。理想消費寿命率に対して実際消費寿命率が大きくなっているTier1に対して、リード頻度が大きいページデータが移動される可能性が大きくなり、Tier1ヒット率の低下を抑制できる。なお、リード係数は一定でもよい。
図8に戻って、短周期I/O負荷モニタのセクション535は、短周期リードカウンタ536、短周期ライトカウンタ537、短周期I/Oカウンタ538、及び前回判定時刻539の値を格納する。本例において、短周期は、短周期I/Oカウンタ538の値で定義され、短周期I/Oカウンタ538が0から所定値に達するまでが、1回の短周期である。したがって、短周期の時間長は一定ではない。短周期I/Oカウンタ538が所定値に達すると、その値がリセットされ、短周期の階層判定が実行される。
短周期リードカウンタ536は、現在の短周期における仮想VOLページへのリードアクセスをカウントする。短周期ライトカウンタ537は、現在の短周期における仮想VOLページへのライトアクセスをカウントする。短周期I/Oカウンタ538は、短周期リードカウンタ536の値及び短周期ライトカウンタ537の値から決定される値を格納する。前回判定時刻539は、前回の短周期におけるTier判定の時刻を格納する。
短周期I/Oカウンタ538の値が所定値に達するまでの時間により、階層判定におけるTier1寿命を考慮した短周期I/O頻度指標が算出される。具体的には、下記式が使用される。
短周期I/O頻度=規定カウンタ値/規定カウンタ値に到達するまでの時間(回/h)
短周期I/Oカウンタ538の各仮想VOLページの値は、当該仮想VOLページの所定のリード回数毎にインクリメントされる。つまり、短周期リードカウンタ536の値が所定値に達すると、短周期I/Oカウンタ538の値がインクリメントされる。短周期リードカウンタ536の値は、リセットされる。
さらに、短周期I/Oカウンタ538の各仮想VOLページの値は、当該仮想VOLページの所定のライト回数毎にインクリメントされる。つまり、短周期ライトカウンタ537の値が所定値に達すると、短周期I/Oカウンタ538の値がインクリメントされる。短周期ライトカウンタ537の値は、リセットされる。
リードアクセス及びライトアクセスそれぞれの所定回数、より具体的には所定回数の逆数は、Tier1の消費寿命率に応じて決定される、短周期における重みを表す。図10は、必要リード回数・ライト回数設定テーブル509の構成例を示す。必要リード回数・ライト回数設定テーブル509は、Tier1の消費寿命率と、短周期I/Oカウンタ538の値をインクリメントするために必要とされるリード回数及びライト回数と、の関係を示す。#545は、当該テーブルのエントリ番号を示す。
Tier1の実際消費寿命率546は、Tier1の理想寿命率を基準とした、実際消費寿命率の範囲を示す。本例において、Tier1の実際消費寿命率546は、実際消費寿命率と理想寿命率との差の、理想消費寿命率に対する比率の範囲を示す。本例において、Tier1の実際消費寿命率546の各エントリの範囲は、リード係数・ライト係数設定テーブル508と同様である。
必要リード回数547及び必要ライト回数548は、それぞれ、対応する実際消費寿命率546の範囲において、短周期I/Oカウンタ538の値をインクリメントするために必要とされるリード回数及びライト回数を示す。つまり、仮想VOLページに対して必要リード回数547が示す回数のリードアクセスが実行されると、短周期I/Oカウンタ538の値がインクリメントされる。
さらに、仮想VOLページに対して必要ライト回数548が示す回数のライトアクセスが実行されると、短周期I/Oカウンタ538の値がインクリメントされる。実際消費寿命率の理想消費寿命率に対する超過が、理想消費寿命率の10%以上である場合、ライトアクセスによって短周期I/Oカウンタ538の値はインクリメントされない。
必要ライト回数548の値は、実際消費寿命率が理想消費寿命率を上回る度合が大きくなるにつれて、段階的に大きくなる。つまり、実際消費寿命率の理想消費寿命率からの乖離が大きくなるにつれて、短周期I/Oカウンタ538の値をインクリメントするために必要なライト回数が段階的に大きくなる。
これにより、理想消費寿命率に対して実際消費寿命率が大きくなっているTier1に対して、ライト頻度が大きいページデータが移動される可能性が小さくなり、Tier1の実際消費寿命率の増加率を小さくできる。さらに、Tier1へのプロモーション頻度が低下して、Tier1へのライト負荷の集中を抑制できる。
上記例における必要リード回数547の値は一定であるが、理想消費寿命率を超える実際消費寿命率の理想消費寿命率からのかい離が大きくなるにつれて、小さくなってもよい。つまり、1回のリード要求に対して、短周期I/Oカウンタ538の値を複数回インクリメントしてもよい。必要リード回数は1未満の数で表わされる。短周期I/Oカウンタ538の値は、初期値から所定値(例えば0)までデクリメントされてもよい。短周期I/Oカウンタ538の値が0になると、階層判定が実行される。インクリメント/デクリメントする単位は、1より大きい値でもよい。
図11は、プロモーション先PG優先順位設定テーブル510の構成例を示す。プロモーション先PG優先順位設定テーブル510は、ユーザにより予め設定される。#551は、エントリ番号を示す。PGの実際消費寿命率552は、パリティグループの理想寿命率を基準とした、実際消費寿命率の範囲を示す。
本例において、PGの実際消費寿命率552は、実際消費寿命率と理想寿命率との差の、理想消費寿命率に対する比率の範囲を示す。プロモーション先選択の優先順位553は、プロモーション対象のページデータを格納するパリティグループの優先順位を示す。実際消費寿命率が理想消費寿命率よりも少ないパリティグループの優先順位が最も高く、実際消費寿命率が理想消費寿命率に対して大きくなるにつれ、パリティグループの優先順位が下がる。
図12は、PDEV寿命管理テーブル511の構成例を示す。寿命管理プログラム607は、PDEV寿命管理テーブル511を、ストレージシステム104の構成変更時に更新し、さらに、定期的に更新する。構成変更は、例えば、ドライブのシステムへの追加、削除、プールへの追加、削除等を含む。
PDEV#554は、ドライブの識別子を示す。プール追加時の消費寿命率555は、ドライブ(のボリューム)をプールに追加したときのドライブの実際消費寿命率を示す。プール追加時からの経過時間556は、ドライブをプールに追加してからの経過時間(使用時間)を示す。経過時間は定期的に更新される。
実際消費寿命率557は、ドライブの実際消費寿命率を示す。実際消費寿命率の値は、ドライブの内部コントローラが管理し、寿命管理プログラム607は、ドライブから実際消費寿命率の値を取得して、実際消費寿命率557の値を更新する。
図13は、PG寿命管理テーブル512の構成例を示す。寿命管理プログラム607は、PG寿命管理テーブル512を、ストレージシステム104の構成変更時に更新し、さらに、定期的に更新する。PG#561は、パリティグループの識別子を示す。PGを構成するPDEV♯562は、パリティグループを構成するドライブのPDEV♯を示す。最短残寿命のPDEV♯563は、パリティグループにおいて最短残寿命のドライブのPDEV♯を示す。
実際消費寿命率564は、パリティグループの実際消費寿命率を示す。図4を参照して説明したように、パリティグループの実際消費寿命率は、当該パリティグループのワーストのドライブ実際消費寿命率に一致する。理想消費寿命率565は、パリティグループの理想消費寿命率を示す。図4を参照して説明したように、パリティグループの理想消費寿命率は、当該パリティグループのワーストのドライブ理想消費寿命率に一致する。ドライブ理想消費寿命率は、ドライブのプール追加時の実際消費寿命率と使用年数から計算される。
図14は、Tier1寿命管理テーブル513の構成例を示す。寿命管理プログラム607は、Tier1寿命管理テーブル513を、ストレージシステム104の構成変更時に更新し、さらに、定期的に更新する。プール#571は、プールの識別子を示す。プールVOL#572は、プールのTier1に含まれるプールボリュームの識別子を示す。実際消費寿命率573は、プールのTier1の実際消費寿命率を示す。図4を参照して説明したように、Tier1の実際消費寿命率は、属するプールボリュームの実際消費寿命率と容量とから計算される。
理想消費寿命率574は、プールのTier1の理想消費寿命率を示す。図4を参照して説明したように、Tier1の理想消費寿命率は、属するプールボリュームの理想消費寿命率と容量とから計算される。
IOPHWリード係数575及びIOPHWライト係数576は、それぞれ、IOPHWの計算で使用される係数を示す。IOPHWリード係数575及びIOPHWライト係数576の値は、それぞれ、Tier1の実際寿命率、理想寿命率、及びリード係数・ライト係数設定テーブル508から決定される。
必要リード回数577及び必要ライト回数578は、それぞれ、短周期I/Oカウンタ538の値をインクリメントするために必要なリード回数及びライト回数を示し。必要リード回数577及び必要ライト回数578は、それぞれ、Tier1の実際寿命率、理想寿命率及び必要リード回数・ライト回数設定テーブル509から決定される。
図15は、移動先プールVOL優先順位管理テーブル514の構成例を示す。移動先優先順位571は、Tier1に移動するページデータの移動先優先順位を示す。プロモーション先PG優先順位設定テーブル510におけるプロモーション先選択の優先順位553の値と一致する。PG♯572は、優先順位それぞれに該当するパリティグループの識別子を示す。プールVOL♯573は、優先順位それぞれに該当するプールボリュームの識別子を示す。
寿命管理プログラム607は、移動先プールVOL優先順位管理テーブル514を作成し、定期的に更新する。寿命管理プログラム607は、Tier1寿命管理テーブル513を参照し、Tier1のプールボリュームの実際消費寿命率573の値と理想消費寿命率574の値を取得する。寿命管理プログラム607は、プロモーション先PG優先順位設定テーブル510に従って、プールボリュームの優先順位を決定する。寿命管理プログラム607は、パリティグループの優先順位も、PG寿命管理テーブル512とプロモーション先PG優先順位設定テーブル510から、同様に決定する。
図16は、仮想ボリュームへのリード要求/ライト要求に対する処理のフローチャートを示す。ホスト101からI/O要求を受けると、ホストI/Oプログラム601が本フローを実行する。
ホストI/Oプログラム601は、リード要求かライト要求か判定する(S101)。I/O要求がライト要求の場合(S101:Y)、ダイナミックマッピングテーブル501を参照して当該仮想VOLページがプールVOLページを割り当て済みかどうか判定する。未割り当ての場合、ホストI/Oプログラム601未使用のプールVOLページを割り当てる(S109)。
キャッシュメモリにI/O要求に対応する仮想ボリューム上のアドレスに対応した領域が確保されているか否かを確認し、確保されていなければキャッシュメモリの領域を確保する(S110)。次に、ホストI/Oプログラム601は、ホストから転送されてくるライトデータを確保されているキャッシュメモリに書き込み、キャッシュ管理テーブル507にまだドライブに書き込んでいない領域であるとしてダーティフラグを立てる(S111)。
ダーティフラグは、キャッシュメモリ上のデータがディスクに反映されていない状態を示す。次に、ホストI/Oプログラム601は、ホストに完了応答を送信して終了する。
I/O要求がリード要求である場合(S101:N)、ホストI/Oプログラム601は、仮想ボリューム上の要求されたアドレスに対応したデータが、キャッシュメモリ上に存在(キャッシュヒット)するか否かを確認する(S102)。キャッシュヒットの場合(S102:Y)、ホストI/Oプログラム601は、キャッシュメモリ上のデータをホストに転送する(S108)。ホストが要求したデータを全てホストに転送した後、ホストI/Oプログラム601は、完了応答をホストに送信して終了する。
キャッシュミスの場合(S102:N)、ホストI/Oプログラム601は、要求アドレスに対応するデータを格納するための領域をキャッシュメモリに確保する(S103)。次に、ホストI/Oプログラム601は、要求アドレスに、プールVOLページが割り当てられているか否かを、ダイナミックマッピングテーブル501で確認する。
割り当てられていなかった場合、ホストI/Oプログラム601は、ダイナミックマッピングテーブル501を用いてデフォルト値を格納するドライブのアドレスを算出し(S104)、ドライブからデフォルト値を確保したキャッシュメモリの領域に転送する(S105)。
要求アドレスに、プールVOLページが割り当てられている場合、ホストI/Oプログラム601は、ダイナミックマッピングテーブル501を用いて割り当てられたプールボリューム番号と論理アドレスを求め、更に論理物理アドレス変換テーブル504を用いて物理ドライブ番号、物理開始アドレスを求める(S104)。次に、ホストI/Oプログラム601は、算出したドライブアドレスからデータを確保したキャッシュメモリの領域に転送する(S105)。
キャッシュメモリへのデータ転送時に、ページモニタテーブル503において、アクセス先仮想VOLページのモニタ情報を更新し、さらに、階層判定処理を実行する(S106)。次に、ホストI/Oプログラム601は、ドライブからキャッシュメモリ上に格納したデータをホストに送信する(S107)。ホストが要求したデータを全てホストに転送した後、完了応答をホストに転送して終了する。
図17は、デステージプログラム604のフローチャートを示す。図16に示すように、I/Oプログラム601は、ホストからのデータの書き込み要求に応じてキャッシュメモリにホストのライトデータを書き込んだ後、ダーティフラグを立てる。
デステージプログラム604は、キャッシュ管理テーブル507を参照し、立てられたダーティフラグがあるか定期的に確認する(S201)。ダーティフラグが立っているキャッシュ領域がある場合(S201:Y)、デステージプログラム604は、キャッシュ管理テーブル507においてダーティフラグと対応付けられている仮想VOL#と論理アドレスに基づき、ダイナミックマッピングテーブル501から割り当てられているプールVOL#番号と論理アドレスを求める。
デステージプログラム604は、プールVOL#番号と論理アドレスから、論理物理アドレス変換テーブル504により、格納先のドライブのアドレスを求める(S202)。デステージプログラム604は、ドライブのアドレスに対して、キャッシュメモリ上のダーティデータを書き込む(S203)。当該データの、ダーティフラグはOFFとなる。
デステージプログラム604は、ダイナミックマッピングテーブル501において、当該仮想VOLページに対応するページモニタテーブル503のモニタ情報を更新し、Tier判定処理を実行する(S204)。デステージプログラム604は、ステップS201に戻り、キャッシュメモリ上に未反映データがあるかチェックする(S201)。未反映データがなければ(S201:N)、デステージプログラム604は終了する。
図18は、非同期再配置判定プログラム606のフローチャートを示す。非同期再配置判定プログラム606は、長周期で繰り返し実行され、I/O要求の受信やデステージを含むI/O処理とは、非同期に実行される。本例において、長周期は予め定められている一定期間である。非同期再配置はページの基本配置を決定するため、全ページについて同じタイミングで階層判定及び再配置を行う。階層非同期再配置判定プログラム606は、長周期のIOPH及びIOPHWを使用して、仮想VOLページの再配置先Tierを決定する。
非同期再配置判定プログラム606は、度数分布テーブル505において決定されるTier閾値を使用して、仮想VOLページ(ページデータ)の再配置先Tierを決定する。度数分布テーブル505は、度数分布作成プログラム602により作成される。度数分布作成プログラム602は、非同期再配置判定プログラム606の実行前に、長周期で実行される。
度数分布作成プログラム602は、ページモニタテーブル503からエントリを順次選択し、仮想VOLページの長周期のIOPHを算出し、対応する度数分布の負荷レベルのページ数をインクリメントする。長周期IOPHは、長周期リードカウンタ531及び長周期ライトカウンタ532の値の和を、長周期(h)で割った値である。
Tier割り当て閾値は、各Tierについて、Tierのポテンシャル(処理できる最大I/O数)又はTierの容量の何れかを超える限界点から、最大のページ割り当て量の範囲を決定し、当該範囲と度数分布の交点から、算出される。Tier割り当て閾値は、ユーザが指定した値でもよい。
図18は、非同期再配置判定プログラム606による、一つの仮想VOLページの再配置先の決定を示す。非同期再配置判定プログラム606は、ページモニタテーブル503における長周期I/O負荷モニタ530の情報を更新する(S301)。具体的には、非同期再配置判定プログラム606は、前回IOPH533及び前回IOPHW534の値を更新し、長周期リードカウンタ531及び長周期ライトカウンタ532の値をリセットする。
前回IOPH533の値は、長周期リードカウンタ531の値と長周期ライトカウンタ532の値との和を、長周期(h)で割った値である。前回IOPHW534の値は、長周期リードカウンタ531の値にリード係数を掛けた値と及び長周期ライトカウンタ532の値にライト係数を掛けた値との和を、長周期(h)で割った値である。
非同期再配置判定プログラム606は、Tier1寿命管理テーブル513を参照して、当該プールのIOPHWリード係数575の値と、IOPHWライト係数576の値とを取得する。
非同期再配置判定プログラム606は、ページモニタテーブル503からエントリを順次選択し、ステップS302〜S308を繰り返す。非同期再配置判定プログラム606は、仮想VOLページの長周期IOPHの値を取得し、度数分布テーブル505におけるTier閾値と比較して、仮想VOLページの再配置先の階層を判定する(S302)。長周期IOPHが階層割り当て閾値208Aより大きい場合、仮想VOLページの再配置先は、Tier1と判定される。
ステップS302の判定結果がTier1ではない場合(S303:N)、非同期再配置判定プログラム606は、ステップS302で決定されたTierを、仮想VOLページの再配置先と決定する。再配置先は、現在のTierと異なる又は同じである。
ステップS302の判定結果がTier1である場合(S303:Y)、非同期再配置判定プログラム606は、仮想VOLページの長周期IOPHWの値を取得し、度数分布テーブル505におけるTier閾値と比較して、仮想VOLページの再配置先のTierを判定する(S305)。長周期IOPHWが階層割り当て閾値208Aより大きい場合、仮想VOLページの再配置先は、Tier1と判定される。
ステップS305の判定結果がTier1ではない場合(S306:N)、非同期再配置判定プログラム606は、現在のTierを、仮想VOLページの再配置先と決定する。ステップS305の判定結果がTier1である場合(S306:Y)、非同期再配置判定プログラム606は、Tier1を仮想VOLページの再配置先と決定する。
ページデータの移動が必要な場合、ページ再配置プログラム605が、ページデータを階層間で移動する。例えば、ページ再配置プログラム605は、ページ移動が必要な仮想VOLページと再配置先階層の情報を非同期再配置判定プログラム606から取得する。非同期再配置判定プログラム606は、ダイナミックマッピングテーブル501及びプールVOL管理テーブル502を参照して、仮想VOLページの現在の階層(パリティグループ)を特定できる。ページ再配置プログラム605は、取得した情報に応じてページデータを移動し、ダイナミックマッピングテーブル501を更新する。
図19は、Tier1の実際消費寿命率、理想消費寿命率、IOPH、及びIOPHWの関係例を示す。グラフにおける破線内の数字は、リード係数・ライト係数設定テーブル508におけるエントリ番号を示す。
実際消費寿命率Aは理想消費寿命率以下であり、リード係数・ライト係数設定テーブル508において、エントリ番号1に対応する。そのリード係数は1.0であり、ライト係数は0.5である。実際消費寿命率AのページデータのIOPH及びIOPHWの双方が階層割り当て閾値よりも大きく、当該ページデータはTier1に再配置される。
実際消費寿命率Bは理想消費寿命率よりも大きく、リード係数・ライト係数設定テーブル508において、エントリ番号6に対応する。そのリード係数は1.5であり、ライト係数は0である。実際消費寿命率BのページデータのIOPHは階層割り当て閾値よりも大きく、IOPHWは階層割り当て閾値以下である。当該ページデータは、現在の階層から移動されない。
上述のように、下位TierからTier1へのプロモーションは、IOPHがTier閾値より大きいことに加え、IOPHWがTier閾値よりも大きいことを必要とする。IOPHWは、Tier1の寿命を考慮して決定されており、Tier1の残寿命が小さい程、ライト係数が小さくなる。つまり、長周期I/O頻度が高くても、ライト頻度が高いページデータは、Tier1に移動される可能性が小さくなる。
これにより、実際消費寿命率が理想消費寿命率より大きい場合に、実際消費寿命率の増加率を小さくし、実際残寿命率の理想消費寿命率からのかい離を小さくできる。さらに、Tier1の残寿命が小さい程、リード係数が大きくなるので、Tier1ヒット率の低下を抑制できる。
上記例は、長周期のI/O頻度指標のみにより、階層判定を行う。非同期再配置判定プログラム606は、短周期のI/O頻度指標を、合わせて参照してもよい。例えば、非同期再配置判定プログラム606は、短周期I/Oカウンタ538の値、前回判定時刻539の値及び現在時刻から、短周期IOPHを計算し、その値が所定の値より大きい場合には、Tier1に配置されている仮想VOLページを、Tier1に維持してもよい。これにより、突発的にI/O頻度が増加し、その状態が続くページデータをTier1に維持できる。
図20は、モニタ更新・階層判定プログラム603の動作のフローチャートを示す。モニタ更新・階層判定プログラム603は、ホストI/Oプログラム601によって、リード要求の受信に同期して呼び出され、さらに、デステージプログラム604によりデステージに同期して呼び出される。リード要求の受信やデステージは、I/O処理に含まれ、モニタ更新・階層判定プログラム603、I/O処理に同期してページの階層判定及び再配置を実行する。図20は、1回のアクセスに対する処理を示す。
モニタ更新・階層判定プログラム603は、呼び出しの契機のI/O種別が、リード要求であるかライト要求であるか判定する(S401)。モニタ更新・階層判定プログラム603は、呼び出し元からI/Oについての情報を取得し、当該情報を参照してI/O種別を判定する。
I/O種別がリードである場合(S401:リード)、モニタ更新・階層判定プログラム603は、ページモニタテーブル503において、対応するエントリの、長周期リードカウンタ531の値と、短周期リードカウンタ536の値とを、インクリメントする(S402)。
モニタ更新・階層判定プログラム603は、短周期リードカウンタ536の現在値が、短周期I/Oカウンタ538の値をインクリメントするための必要リード回数の条件を満たすか判定する(S403)。例えば、モニタ更新・階層判定プログラム603は、Tier1寿命管理テーブル513から、アクセス先プールの必要リード回数577の値を取得し、短周期リードカウンタ536値が必要リード回数577の値の倍数であるか判定する。モニタ更新・階層判定プログラム603は、必要リード回数をカウントするための別のカウンタを使用してもよい。
必要リード回数の条件が満たされている場合(S403:Y)、モニタ更新・階層判定プログラム603は、短周期I/Oカウンタ538の値をインクリメントする(S404)。必要リード回数の条件が満たされていない場合(S403:N)、モニタ更新・階層判定プログラム603は、終了する。
ステップS401において、I/O種別がライトである場合(S401:ライト)、モニタ更新・階層判定プログラム603は、ページモニタテーブル503において、対応するエントリの、長周期ライトカウンタ532の値と、短周期ライトカウンタ537の値とを、インクリメントする(S405)。
モニタ更新・階層判定プログラム603は、短周期ライトカウンタ537の現在値が、短周期I/Oカウンタ538の値をインクリメントするための必要ライト回数の条件を満たすか判定する(S406)。例えば、モニタ更新・階層判定プログラム603は、Tier1寿命管理テーブル513から、アクセス先プールの必要ライト回数578の値を取得し、短周期ライトカウンタ537の値が必要ライト回数578の値の倍数であるか判定する。モニタ更新・階層判定プログラム603は、必要ライト回数をカウントするための別のカウンタを使用してもよい。
必要ライト回数の条件が満たされている場合(S406:Y)、モニタ更新・階層判定プログラム603は、短周期I/Oカウンタ538の値をインクリメントする(S404)。必要ライト回数の条件が満たされていない場合(S406:N)、モニタ更新・階層判定プログラム603は、終了する。
ステップS407において、モニタ更新・階層判定プログラム603は、短周期I/Oカウンタ538の値が規定値に達しているか判定する。規定値はプール毎に設定されてよく、例えば、パラメータテーブル506に予め格納されている。短周期I/Oカウンタ538の値が規定値に達していない場合(S407:N)、モニタ更新・階層判定プログラム603は、終了する。
短周期I/Oカウンタ538の値が規定値に達している場合(S407:Y)、モニタ更新・階層判定プログラム603は、対象の仮想VOLページのページデータが、Tier1に存在するか判定する(S408)。モニタ更新・階層判定プログラム603は、ダイナミックマッピングテーブル501及びプールVOL管理テーブル502を参照することで、対象仮想VOLページが配置された階層(パリティグループ)を特定できる。
対象ページデータがTier1に存在する場合(S408:Y)、モニタ更新・階層判定プログラム603は、当該ページデータのTier1からのデモーションの要否を判定する(S409)。
具体的には、モニタ更新・階層判定プログラム603は、Tier1の寿命を考慮しない、長周期IOPH及び短周期IOPHを計算する。デモーションの移動先はTier1以外の階層であり、モニタ更新・階層判定プログラム603は、当該データのライト頻度とTier1寿命との関係を考慮しない。
モニタ更新・階層判定プログラム603は、長周期リードカウンタ531の値と長周期ライトカウンタ532の値の和を今回長周期の経過時間で割って、長周期IOPHを計算する。モニタ更新・階層判定プログラム603は、短周期リードカウンタ536の値と短周期ライトカウンタ537の値の和を、今回短周期の長さで割って、短周期IOPHを計算する。今回短周期の長さは、現在時刻から前回判定時刻を引いた値である。
長周期IOPHが所定閾値DTより小さく、かつ、短周期IOPHがDT×Mより小さい場合、モニタ更新・階層判定プログラム603は、当該ページデータのデモーションを実行することを決定する。Mは1より大きい定数である。DT及びMは、例えば、プール毎又はパリティグループ毎にパラメータテーブル506に格納されている。Mにより、短周期I/O頻度に基づく再配置の繰り返しを抑制する。なお、デモーションの実行条件は、Tier1の使用量が所定値より多いことを含んでもよい。
デモーションが必要であると判定された場合(S409:Y)、モニタ更新・階層判定プログラム603は、ページデータの移動をページ再配置プログラム605に指示し(S410)、終了する。デモーションが不要であると判定された場合(S409:N)、モニタ更新・階層判定プログラム603は、終了する。モニタ更新・階層判定プログラム603は、終了前に、短周期I/O負荷モニタ535の値を初期値にリセットする。
対象ページデータがTier1に存在しない場合(S408:N)、モニタ更新・階層判定プログラム603は、当該ページデータのTier1へのプロモーションの要否を判定する(S411)。
モニタ更新・階層判定プログラム603は、Tier1使用量から、ページデータの移動が可能であるか判定する。Tier1の容量と使用量の差分が所定値より小さい場合、プロモーションは実行されない。Tier1の空き容量が所定値以上である場合、モニタ更新・階層判定プログラム603は、Tier1の寿命を考慮した長周期I/O頻度(IOPHW)及び短周期I/O頻度の指標を計算する。当該短周期I/O頻度指標を、ここでは、短周期IOPHWと呼ぶ。
モニタ更新・階層判定プログラム603は、Tier1寿命管理テーブル513から、該当プールのIOPHWリード係数575の値と、IOPHWライト係数576の値を取得する。モニタ更新・階層判定プログラム603は、これら係数と、長周期リードカウンタ531の値及び長周期ライトカウンタ532の値の積和を計算し、今回長周期の経過時間で割って、長周期IOPHWを計算する。
さらに、モニタ更新・階層判定プログラム603は、短周期I/Oカウンタ538の値を、今回短周期の長さで割って、Tier1の寿命を考慮した短周期IOPHWを計算する。短周期I/Oカウンタ538の値は決められた値であり、短周期IOPHWは短周期の長さで決まる。
長周期IOPHWが所定閾値PTより大きい、又は、短周期IOPHWがPT×Mより大きい場合、モニタ更新・階層判定プログラム603は、当該ページデータのプロモーションを実行することを決定する。閾値PTは閾値DTよりも大きい値であり、Mは1より大きい定数である。Mは、デモーションで参照される値と同じ又は異なる。PT及びMは、例えば、プール毎又はパリティグループ毎にパラメータテーブル506に格納されている。Mにより、短周期のI/O頻度に基づく再配置の繰り返しを抑制する。
プロモーションが必要であると判定された場合(S411:Y)、モニタ更新・階層判定プログラム603は、ページデータの移動をページ再配置プログラム605に指示(S410)、終了する。プロモーションが不要であると判定された場合(S411:N)、モニタ更新・階層判定プログラム603は終了する。モニタ更新・階層判定プログラム603は、終了前に、短周期I/O負荷モニタ535の値を初期値にリセットする。
上述のように、モニタ更新・階層判定プログラム603は、所定リード回数毎、さらに、所定ライト回数毎に短周期I/Oカウンタ538をインクリメントし、短周期I/Oカウンタ538が所定値に達するまでの時間(短周期)で短周期IOPHWを決定する。これにより、必要リード回数(重み)、必要ライト回数(重み)、短周期におけるリード回数(頻度)、及び短周期におけるライト回数(頻度)に基づき、短周期IOPHWが決定される。
図21は、Tier1の実際消費寿命率、理想消費寿命率、ホストI/O数、及び短周期I/Oカウンタ値の関係例を示す。グラフにおける破線内の数字は、必要リード回数・ライト回数設定テーブル509におけるエントリ番号を示す。
実際消費寿命率Aは理想消費寿命率以下であり、必要リード回数・ライト回数設定テーブル509において、エントリ番号1に対応する。その必要リード回数は1であり、必要ライト回数は2である。実際消費寿命率Aのページデータの短周期I/Oカウンタ値が短周期長さに対する閾値を越えており、当該ページデータはTier1に再配置される。
実際消費寿命率Bは理想消費寿命率よりも大きく、必要リード回数・ライト回数設定テーブル509において、エントリ番号6に対応する。その必要リード回数は1であり、必要ライト回数は無限、つまり、ライトにより短周期I/Oカウンタ値はインクリメントされない。実際消費寿命率Bのページデータの短周期I/Oカウンタ値は短周期長さに対する閾値以下である。当該ページデータは、Tier1に移動されない。
上述のように、Tier1へのプロモーションは、Tier1の寿命を考慮した長周期IOPHW及び短周期IOPHWを参照する。長周期IOPHWは、Tier1の実際消費寿命率が理想消費寿命率より大きい程、ライト係数が小さくなる。また、短周期IOPHWは、短周期I/Oカウンタ538の値を短周期長で割った値であり、Tier1の実際消費寿命率が理想消費寿命率より大きい程、短周期I/Oカウンタ538をインクリメントするために必要なライト回数が大きくなる。
つまり、長周期IOPHW及び短周期IOPHWのいずれの基準においても、ライト頻度が高いページデータは、Tier1に移動される可能性が小さくなる。これにより、実際消費寿命率が理想消費寿命率より大きい場合に、実際消費寿命率の増加率を小さくし、実際残寿命率の理想消費寿命率からのかい離を小さくできる。短周期I/Oカウンタ538の値により短周期を決めることで、突発的にアクセス頻度が増加したページを適切に検出できる。また、アクセス頻度が増加していないページのための処理が不要であり、処理効率を向上できる。
上記例は、Tier1寿命を考慮した、長周期I/O頻度指標及び短周期I/O頻度指標を参照するが、モニタ更新・階層判定プログラム603は、短周期I/O頻度指標のみを参照してもよい。短周期の長さが所定の値を超える場合には、長周期と比較して十分な短周期ではなくなる。したがって、(現在時刻−前回判定時刻)が所定の時間より長い場合、短周期IOPHWを参照した判定を省略してもよい。
上記長周期I/O頻度指標及び短周期I/O頻度指標の算出方法は、一例を示したものであり、他の算出方法が採用されてもよい。例えば、長周期のI/O数が所定値に達したときに、長周期ページ再配置が実行されてもよい。長周期のために設定される所定値は、短周期I/Oカウンタに設定される所定値よりも十分大きい。短周期は、長周期よりも短い一定の期間であってもよい。
上記例は、長周期における再配置(I/O非同期再配置)及び短周期における再配置(I/O同期再配置)の双方において、Tier1の寿命率を考慮して、Tier1へのページデータの移動の有無を判定する。ストレージシステム104は、上記再配置のいずれか一方のみにおいて、Tier1の寿命率を考慮してもよい。ストレージシステム104は、長周期又は短周期の再配置の一方を実行しなくてもよい。
図22は、モニタ更新・階層判定プログラム603が、下位階層からTier1にページデータを移動する際、移動先のパリティグループを決定する処理のフローチャートを示す。モニタ更新・階層判定プログラム603は、実際消費寿命率に基づき、移動先パリティグループを決定する。これにより、パリティグループの寿命消費ペースを平滑化することができる。
まず、モニタ更新・階層判定プログラム603は、仮想VOLページが対応するプールのTier1において、優先順位1の移動先(プールボリューム)が存在するか判定する(S501)。具体的には、モニタ更新・階層判定プログラム603は、プールVOL管理テーブル502及び移動先プールVOL優先順位管理テーブル514を参照し、対応プールの優先順位1のプールボリュームであって、残容量(容量−使用量)が所定値以上のプールボリュームを検索する。条件を満たすプールボリュームが存在する場合(S501:Y)、モニタ更新・階層判定プログラム603は、当該プールボリュームを移動先と決定する(S502)。
優先順位1の移動先が存在しない場合(S501:N)、モニタ更新・階層判定プログラム603は、仮想VOLページが対応するプールのTier1において、次の優先順位である、優先順位2の移動先(プールボリューム)が存在するか判定する(S503)。判定方法は、ステップS501と同様である。条件を満たすプールボリュームが存在する場合(S503:Y)、モニタ更新・階層判定プログラム603は、当該プールボリュームを移動先と決定する(S504)。
優先順位2の移動先が存在しない場合(S503:N)、モニタ更新・階層判定プログラム603は、仮想VOLページが対応するプールのTier1において、次の優先順位である、優先順位3の移動先(プールボリューム)が存在するか判定する(S505)。以下同様に、移動先が見つかるまで、モニタ更新・階層判定プログラム603は、高い優先順位の移動先から順次検索する(S506〜S512)。移動先が見つからない場合、モニタ更新・階層判定プログラム603は、ページデータのTier1へ移動しないと判定する。
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明したすべての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
また、上記の各構成・機能・処理部等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード等の記録媒体に置くことができる。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしもすべての制御線や情報線を示しているとは限らない。実際には殆どすべての構成が相互に接続されていると考えてもよい。