本発明の実施形態について、図面を参照して説明する。尚、以下に説明する実施形態は特許請求の範囲にかかる発明を限定するものではなく、また実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図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はストレージシステムにおいて、ストレージシステム内部のボリュームと同様に扱うことができる。この具体的な方法については、特許文献3に記載されているため、詳細は割愛する。
次にストレージシステム104の内部構成について説明する。ストレージシステム104の内部では、内部ネットワーク112を介してポート106、保守I/F107、プロセッサパッケージ109、キャッシュメモリ110、共有メモリ111、ポート108、ドライブ113、ドライブ114を接続する。キャッシュメモリ110は、ストレージシステム104のI/O処理のスループットやレスポンスを向上させるために、データを一時的なキャッシュとして格納するための高速アクセスが可能なメモリである。プロセッサパッケージ109は、ローカルメモリ118とプロセッサ119により構成する。プロセッサ119はホスト101からのリードやライト命令を処理するために、ドライブ115、116、外部ストレージ105とキャッシュメモリ110間のデータの転送処理などを実行する。共有メモリ111は、プロセッサ119がリードやライト命令を処理し、またストレージの機能(ボリュームのコピー機能など)を実行する上で、必要な制御用の情報を格納するメモリであり、複数のプロセッサパッケージ109A,B間のプロセッサ119で共有している情報を格納するメモリである。ローカルメモリ118は、プロセッサ119がリードやライト命令を処理し、またストレージの機能を実行する上で、必要な制御用の情報を格納するメモリであり、プロセッサ119が占有して使用できる領域である。ローカルメモリ118には、例えばプロセッサ119により実行するプログラムなどを格納する。ドライブ113、114は例えばFC(Fibre Channel),SAS(Serial Attached SCSI),SATA(Serial Advanced Technology Attachment)などのインターフェイスを持つハードディスクドライブや、SSD(Solid State Drive)などにより構成する。
前述したさまざまな種類のドライブは、性能が異なる。例えば、ハードディスクドライブと比較し、SSDはI/Oスループット性能が高い。ストレージシステム104は、前述した複数の種類のドライブによって構成する。これらの複数の種類のドライブを、近い性能を持つドライブに分類したものが階層(Tier)115、116、117である。階層間の関係は性能の上下関係により定義される。この階層については、詳細は特許文献2に記載されているため、詳細は割愛する。
図2は、本発明の第一実施形態に係るストレージシステムの論理構成を示す図である。
仮想ボリューム201は、ホスト101から認識される論理的な記憶領域であり、ホスト101からリード又はライト命令が発行される際に対象となるボリュームである。プール206は、1個以上のプールボリューム203により構成される。プールボリューム204はドライブ113,114,外部ストレージ105によって構成される。具体的には、プールボリューム204の論理アドレスと、ドライブ113,114,外部ストレージ105の物理アドレスの対応関係を管理することにより、論理的なプールボリューム204を構成する。詳細については、後説する。
ストレージ管理者は、管理サーバ102からの指示により、プール206上に、複数の仮想ボリューム201を作成することが出来る。
ストレージシステム104は、仮想ボリューム201に対して、ホスト101がWrite命令を発行した記憶領域のみ、実際の記憶領域を割り当てる。具体的には、仮想ボリューム201のページ202Aに、初めてホスト101がWrite命令を発行した際に、未使用のプールボリューム203の領域と対応づけ(205A)、次回のホスト101からの同じページへのRead/Write命令に対しても、前記対応づけに基づき、ストレージシステム104が対応するプールボリューム203の領域に対してI/O処理を実行することにより、あたかもホスト101が仮想ボリュームに対してI/O処理を実行しているように処理することができる。以上のように、仮想ボリューム201を用いて、使用する部分のみプールボリューム203の領域を割り当てることにより、限られた記憶容量を効率的に使用できることが可能となる。
プール206は、複数の階層115,116,117を持ち、階層115、116、117によって、プールボリューム203を分類する。本実施例では、SSDの階層115(プールボリューム203Aに対応)と、SASの階層116(プールボリューム203B,203Cに対応)と、外部接続の階層117(プールボリューム203D,203Eに対応)の3個の階層を持つ。
各仮想ボリュームのページ202には、一般的にホストからのI/O処理の特性が存在する。例えば、一般的にはI/Oの頻度が高いページと低いページが存在することが多い(これをアクセスローカリティと呼ぶ)。この場合、I/Oの頻度が高いページを上位の階層に配置したほうが、システム全体の性能を向上することができる場合がある。
例えば、100IOPSを処理できるSSDの階層(115)と、10IOPS処理できるSASの階層(116)がプール206に存在する場合で、50IOPSの特性を持つページ202Cと、20IOPSの特性を持つページ203Aがあった場合、ページ202Cが現在SASに割当たっているとすると、SASの階層は最大で10IOPSの性能しか発揮できないため、ストレージシステム104は、全体として10+20=30IOPSの性能しか発揮できない(この状態をネック状態と呼ぶ)。ページ202Cが現在割当たっているSASから、SSDの階層へプロモーションすることができれば、ストレージシステム104は、全体として50+20=70IOPSの性能を発揮できる。以上のように、I/Oの頻度が高いページを上位の階層に配置(これを「階層に割り当てる」と呼ぶ)したほうが、システム全体の性能を向上することができる場合があることが分かる。
上述のプロモーションは、具体的には、ページ204Cのデータを未使用のページ204Bにコピーし、仮想ボリューム201Aのページ202Cとプールボリューム203Bのページ204Cとの対応づけ(205C)を、仮想ボリューム201Aのページ202Cとプールボリューム203Aのページ204Bとの対応づけ(205B)に変更することにより実行する。デモーションも同様に実施可能である。詳細は特許文献2(US7613945)に記載されているため、詳細は割愛する。
度数分布207は、各ページのI/O数の分布を表す。グラフ209は、I/O数の多い順番にページを並べたときの、各ページのI/O数を表す線である。つまり、I/O数の多いページが左側に、I/O数が少ないページが右側に並んでいる。Tier割り当て閾値208は、どのI/O数のページをどの階層に割り当てるかを決める閾値である。前述した通り、I/Oの頻度が高いページを上位の階層に配置したほうが、システム全体の性能を向上することができる場合があることから、I/O数の高い順番で上位階層から順番に割り当てる。
例えば、Tier割り当て閾値208Aと度数分布のグラフ209の交点から、最も性能の高いページの、範囲210Aに属するページは、SSDの階層115に割り当てる。また、Tier割り当て閾値208Aと度数分布のグラフ209の交点から、Tier割り当て閾値208Bと度数分布のグラフ209の交点までの、範囲210Bに属するページは、SASの階層116に割り当てる。また、Tier割り当て閾値208Bと度数分布のグラフ209の交点から、最小のI/O数のページまでを、外部ストレージの階層117に割り当てる。以上のようにして、I/O数の高い順番で上位階層から順番に割り当てることができる。
Tier割り当て閾値208はストレージ管理者が値を指定してもよいし、ストレージシステム104が算出してもよい。
度数分布207の詳細(作成方法など)については、後述するので、ここでは割愛する。
図3にて、共有メモリ111に配置するテーブルの種類を示す。各テーブルの詳細な構造は後述する。尚、本明細書には必要最小限のテーブルのみ記載しており、該共有メモリ上に他のテーブルが存在しても構わない。
ダイナミックマッピングテーブル301は、仮想ボリュームの各ページと、プールボリュームの領域と、モニタ情報との対応関係とを管理するテーブルである。論理物理アドレス変換テーブル308は、プールボリュームと、プールボリュームのデータを格納する物理ディスクのアドレスとの対応関係を管理するテーブルである。ページ毎モニタテーブル302は、I/O数を含む、各ページのモニタ情報を管理するテーブルである。仮想ボリューム度数分布テーブル305は、仮想ボリュームに関する、I/O数範囲毎のページ数の分布を管理するテーブルである。プール度数分布テーブル306は、プールに関する、I/O数範囲毎のページ数の分布を管理するテーブルである。プール加重指数テーブル303は、プール毎の、算出用カウンタ計算に使用する各種パラメータを管理するテーブルである。仮想ボリューム加重指数テーブル307は、仮想ボリューム毎の、算出用カウンタ計算に使用する各種パラメータを管理するテーブルである。ページ加重指数テーブル304は、ページ毎の、算出用カウンタ計算に使用する各種パラメータを管理するテーブルである。
また、ページ毎モニタテーブル302や、プール度数分布テーブル306、仮想ボリューム加重指数テーブル307は、本実施例では共有メモリ111上に配置しているが、ホスト101や管理サーバ102上にデータを配置してもよい。
図4にて、ローカルメモリ118に配置するプログラムの種類を示す。各プログラムの詳細なフローは後述する。尚、これらのプログラムは各ローカルメモリ118に配置してもよいし、共有メモリ111に配置してもよい。また、本明細書には必要最小限のプログラムのみ記載しており、該ローカルメモリ上に他のプログラムが存在しても構わない。
ホストI/O処理プログラム401は、ホストから受領した、仮想ボリュームに対するRead/Write要求を処理するプログラムである。デステージ処理プログラム404は、キャッシュメモリ上の物理ディスク未反映データを、物理ディスクに格納するプログラムである。度数分布作成処理プログラム402は、採取したページ毎のI/O数を基に度数分布を作成し、Tier割り当て閾値を計算するプログラムである。加重平均算出処理プログラム403は、度数分布作成処理プログラム中で使用することを目的の1つとしたプログラムであり、各種算出用カウンタを基にページのI/O数を算出するプログラムである。ページ再配置処理プログラム405は、ページ毎のI/O数と、Tier割り当て閾値を基に、適切なTierにページを再配置するプログラムである。
次に上述したプログラムが動作するタイミングについて説明する。ホストI/O処理プログラム401は、ホストI/Oの受領時に動作する。デステージ処理プログラム404は、ホストI/Oとは別に、周期的に動作する。度数分布作成処理プログラム402は、周期的に動作し、例えば、1時間毎に動作する。この周期はユーザが設定可能であってもよい。この周期の間に採取したモニタ情報について、度数分布作成処理プログラム402の対象となる。度数分布作成処理プログラム402は、加重平均算出処理プログラム403をその動作の過程で動作させる。度数分布作成処理プログラム402の動作が終了したら、プロセッサ109はページ再配置処理プログラム405を起動する。以上のように、度数分布作成処理プログラム402、加重平均算出処理プログラム403、ページ再配置処理プログラム405は、周期的に動作する。
ページ毎モニタテーブル302や、プール度数分布テーブル306、仮想ボリューム加重指数テーブル307をホスト101や管理サーバ102上に配置する場合は、度数分布作成処理プログラム402はホスト101や管理サーバ102上で動作する。
図5にて、ダイナミックマッピングテーブル301の構造を示す。ダイナミックマッピングテーブルの1つのエントリは、プール206と仮想ボリューム202と、仮想ボリューム202の各ページとプールボリューム204の領域と、該ページのモニタ情報との対応関係を示している。対応関係を管理するにあたり、仮想ボリュームの各ページは、仮想ボリューム番号501と、該仮想ボリューム内の該ページの開始論理アドレス502とで識別する。また、プールボリュームの各領域は、プールボリューム番号503と、プールボリューム内の該領域の開始論理アドレス504とで識別する。一方、モニタ情報は、モニタ情報インデックス番号505で識別する。該モニタ情報インデックス番号は、ページ毎モニタテーブル302の、モニタ情報インデックス番号701に対応する。いずれも、他の識別方法であって構わない。
また、ダイナミックマッピングテーブル301は、プール内の空き領域とデフォルト値ページを管理しており、サーバから仮想ボリューム501の論理アドレス502にデータの書き込みが一度も無かった場合は、仮想ボリューム501の論理アドレス502に対応するプールボリューム番号と論理アドレスには、デフォルト値ページのアドレスが格納されている。
またダイナミックマッピングテーブル301で、プール内の空きページのプールボリューム番号と論理アドレスを管理しており、サーバから仮想ボリューム501の論理アドレス502にデータの書き込みが一度も無かった箇所に初めてデータの書き込みがあった場合は、前記空きページのプールボリューム番号と論理アドレスを仮想ボリューム501の論理アドレス502に対応づけられる。
また、各仮想ボリュームは、プールに属し、プール番号506により、どの仮想ボリュームが所属しているか、仮想ボリューム番号501との対応をダイナミックマッピングテーブル301で管理する。
図6にて、論理物理アドレス変換テーブル308の構造を示す。論理物理アドレス変換テーブルの1つのエントリは、プールボリューム204と、該プールボリュームのデータを格納する物理ドライブ(113または114)の領域との対応関係を示す。プールボリュームは、プールボリューム番号601で識別する。また、物理ドライブの領域は、物理ドライブの番号602と、該物理ドライブの開始アドレス603とで識別する。本実施形態では、1つのプールボリュームを、1つの物理ディスクの連続領域に対応づけて管理しているが、他の対応づけを行ってもよい。例えば、1つのプールボリュームを、複数の物理ドライブに対応づけてもよい。または、1つのプールボリュームを、RAID構成を組む複数のドライブによって作成した論理領域の一部に対応づけ、論理領域を、物理ドライブの領域に対応づけることで、二段階の管理を行ってもよい。
図7にて、ページ毎モニタテーブル302の構造を示す。ページ毎モニタテーブルの1つのエントリは、ある1個のページ202のモニタ情報を示す。モニタ情報インデックス番号701は、モニタ情報の識別に使用するインデックス番号である。I/Oカウンタ(A面)702A、I/Oカウンタ(B面)702Bは、あるページのI/O数を示す。
I/Oカウンタ702は、一定の周期のI/O数を格納する。この周期は、前述した度数分布作成処理402の動作する周期と同じであり、度数分布作成処理402はこの一定の周期のI/O数を処理の対象とする。これは、たとえば周期毎に、採取対象のカウンタをI/Oカウンタ(A面)702AとI/Oカウンタ(B面)702Bとで切り替えることにより、一方をホストI/O処理プログラム401とデステージ処理プログラム404によるモニタ採取用のカウンタとして、他方を度数分布作成処理402とページ再配置処理プログラム405用のカウンタとして利用する。上記が、I/Oカウンタが2個存在する理由である。もちろん、I/Oカウンタの数は、3個以上存在し、それぞれを切り替えて使用しても構わない。
また、加重平均用カウンタ1(703A)、加重平均用カウンタ2(703B)は、算出用カウンタ計算用の値を保持する。例えば、加重平均用カウンタ1で短期用の算出用カウンタ値を保持し、加重平均用カウンタ2で長期用の算出用カウンタ値を保持する。加重平均用カウンタの数は、後述する加重指数テーブル(303または304または307)で管理する「カウンタ数」に依存するため、2個以上となる場合もある。
図8にて、プール度数分布テーブル306と、仮想ボリューム度数分布テーブル305の構造を示す。プール度数分布テーブル306は、プール206に関する、I/O数範囲毎のページ数の分布を管理している。プール度数分布テーブルの1つのエントリは、あるプールに関する1個のI/O数の範囲と、該I/O数の範囲に含まれるページ数を示す。I/O数802は、I/O数範囲の開始値を示している。該範囲の終了値は、(次のエントリのI/O数範囲の開始値−1)となる。ページ数803は、該I/O数の範囲に含まれるページ数に対応する。また、本テーブルでは、Tier割り当て閾値208も管理する。Tier割り当て閾値は0以上の値であればよく、必ずしも各範囲の境界値である必要はない。
仮想ボリューム度数分布テーブル305は、仮想ボリューム201に関する、I/O数範囲毎のページ数の分布を管理している。テーブル構造は、プール度数分布テーブル306と同じであるため、詳細な説明は割愛する。
図9にて、プール加重指数テーブル303の構造を示す。プール加重指数テーブルは、プール206毎の、算出用カウンタを算出する時に使用する各種パラメータを管理するテーブルである。プール加重指数テーブルの値を使用した各種計算方法の詳細は、後述する。
ページ毎モニタテーブル302の説明にて述べた通り、各ページ202は、複数個の加重平均算出用カウンタ703を持つ。種別903の列に記載した「カウンタ数」は、該加重平均算出用カウンタの個数を示す。加重平均算出用カウンタ番号902は、加重平均算出用カウンタに対応付く。本実施形態では、加重平均算出用カウンタ1(703A)を「1」、加重平均算出用カウンタ2(703B)を「2」として管理している。また、プール加重指数テーブルでは、加重平均算出用カウンタ毎に、該算出用カウンタ値の算出に使用するパラメータの種別903と各パラメータの値904を保持する。該パラメータは、加重平均算出用カウンタの算出方法に応じて、異なる種別のパラメータを持ってもよい。本実施例では、「加重平均算出用カウンタの加重値」、「I/Oカウンタの加重値」の2つを持つ。「加重平均算出用カウンタの加重値」は、0以上の値とし、「I/Oカウンタの加重値」は0より大の値とする必要がある。
「合算時加重値」は、各加重平均算出用カウンタを合算して、ページのI/O数を算出する時に使用する、各加重平均算出用カウンタの加重値を示している。また本実施例では、「合算方法」として、平均(AVG)または最大(MAX)を用意する。もちろん、他の合算方法であっても構わない。
図10にて、仮想ボリューム加重指数テーブル307の構造を示す。仮想ボリューム加重指数テーブルは、仮想ボリューム201毎の、算出用カウンタを算出する時に使用する各種パラメータを管理するテーブルである。加重平均算出用カウンタ番号1002、種別1003、値1004については、プール加重指数テーブル303にて説明したため、詳細な説明は割愛する。
図11にて、ページ加重指数テーブル304の構造を示す。ページ加重指数テーブルは、ページ202毎の、算出用カウンタを算出する時に使用する各種パラメータを管理するテーブルである。該テーブルでは、ページ202を、仮想ボリューム番号1101と論理アドレス領域1102とで識別しているが、他の識別方法であっても構わない。加重平均算出用カウンタ番号1103、種別1104、値1105については、プール加重指数テーブル303にて説明したため、詳細な説明は割愛する。
図12は、ホストが仮想ボリューム201に対するデータの読み書きを行う際に、ストレージシステム104内のホストI/O処理プログラム401の処理を示したフローチャートである。
ホストからI/O処理要求を受けると、ストレージシステム104内のホストI/O処理プログラム401は、仮想ボリューム201へのデータのリード要求かデータのライト要求かを判定する(S1201)。
I/O処理要求がライトの場合、ホストI/O処理プログラム401は、キャッシュメモリ110にI/O処理要求に対応する仮想ボリューム上のアドレスに対応した領域が確保されているか否かを確認し、確保されている場合もしくは確保されていなければキャッシュメモリ110の領域を確保した後、ホストにライトデータの転送可能であることを応答し、ホストから転送されてくるライトデータを前記確保されているキャッシュメモリ領域に書き込み、キャッシュメモリ管理テーブルにまだディスクに書き込んでいない領域であるとしてダーティフラグを立てる(S1207)。
ここで、ダーティフラグは、キャッシュメモリにのみデータがあり、ディスクにない状態を示す情報でキャッシュメモリの領域を管理するキャッシュメモリ管理テーブルに保持される。あとで説明するデステージ処理プログラム404は、このダーティフラグをみて、キャッシュメモリ上にあるデータをディスクに書き込む。
キャッシュメモリ管理テーブルにダーティフラグが立ててある領域のデータがディスクに書き込まれた後は、ダーティフラグは落され、リード処理に対応してディスクから読み込んだデータをキャッシュメモリに格納した場合を含め、キャッシュメモリ管理テーブルの情報はクリーンフラグが立てられる。
上記のように、キャッシュメモリ管理テーブルは、キャッシュメモリのアドレスと対応する仮想ボリュームのアドレスとキャッシュメモリにあるデータの状態を少なくとも保持管理している。また、キャッシュメモリのアドレスに対応する仮想ボリュームのアドレスは、仮想ボリュームのデータを置くためにキャッシュメモリの領域を確保した場合にのみ、有効な値である仮想ボリュームのアドレスが格納される。
さて、ホストI/O処理プログラム401は、上記S1207後、ホストにライトI/O処理が完了したことを応答した(S1208)後、処理を終了する。
一方S1201で、I/O処理要求がリードであった場合の処理は以下となる。
I/O処理要求がリードの場合、ホストI/O処理プログラム401は、I/O処理要求に対応する仮想ボリューム上のアドレスに対応したデータがキャッシュメモリ上に存在するか否かを確認する(S1202)。
S1202でキャッシュメモリ上にホストが要求したアドレスのデータが存在した場合をキャッシュヒットと呼ぶ。前記キャッシュヒットの場合、ホストI/O処理プログラム401は、キャッシュメモリ上のデータをホストに転送する(S1209)。
ホストI/O処理プログラム401は、ホストが要求したデータを全てホストに転送した後リード処理完了応答をホストに転送して、処理を終了する。
S1202でキャッシュミスした場合、ホストI/O処理プログラム401は、リード要求先仮想ボリュームのアドレスに対応したデータを格納するための領域をキャッシュメモリに確保する。次に、ホストI/O処理プログラム401は、ホストのリード要求先仮想ボリュームアドレスが、プールからページ202を割当てられているか否かを、ダイナミックマッピングテーブル301を用いて確認する。もし割り当てられていなかった場合、ホストI/O処理プログラム401は、デフォルト値を格納するページを、ダイナミックマッピングテーブル301を用いて求め、前記デフォルト値の格納ページのドライブのアドレスを算出し、ドライブからデフォルト値を前記確保したキャッシュメモリの領域に転送する(S1204)。
ここで、デフォルト値の場合は、ダイナミックマッピングテーブルの仮想ボリュームと論理アドレスに対応する、プールボリューム番号と論理アドレスはデフォルト値格納ページのあるプールボリューム番号と論理アドレスが設定されている。
デフォルト値ページはプールに1つ以上あればよい。容量効率を考えればプールにデフォルト値ページは1つもしくは2つである。
デフォルト値ページのアドレスと対応づけられている仮想ボリュームの論理アドレスは、ホストから新規にデータの書き込みがあった際に、ホストのデータ書き込み用のページで未だどの仮想ボリュームのアドレスにも対応づけられていない未使用のページと対応付け直される。
前記処理で、ページ202が割り当てられていた場合は、ホストI/O処理プログラム401は、ダイナミックマッピングテーブル301を用いプールボリューム番号と論理アドレスを求め、更に論理物理アドレス変換テーブル308を用い物理ドライブ番号、物理開始アドレスを求めることで、ホストが要求した仮想ボリュームのアドレスに対応したデータが格納されているドライブのアドレスを算出する(S1203)。次に、ホストI/O処理プログラム401は、算出したドライブアドレスからデータを前記確保したキャッシュメモリの領域に転送する(S1204)。
ホストI/O処理プログラム401は、前記キャッシュメモリへのデータ転送時にダイナミックマッピングテーブル301のモニタ情報インデックス番号に対応するページ毎モニタテーブル302のI/Oカウンタ値を更新する(S1205)。
続いて、ホストI/O処理プログラム401は、前記ドライブからキャッシュメモリ上に格納したデータを当該キャッシュメモリからホストに対してデータを送信する(S1206)。
ホストI/O処理プログラム401は、ホストが要求したデータを全てホストに転送した後リード処理完了応答をホストに転送して、処理を終了する。
図13は、デステージ処理プログラム404のフローチャートである。
図12に記したように、ホストI/O処理プログラムは、ホストからのデータの書き込み要求に応じてキャッシュメモリにホストのライトデータを書き込んだ後、ダーティフラグを立てる。
デステージ処理プログラム404は、キャッシュメモリ管理テーブルを参照し、キャッシュメモリ上にダーティフラグが立っている、ディスクへの書き込みがなされていない未反映データが無いかを定期的に確認する(S1301)。
もしダーティフラグが立っているデータがあるキャッシュ領域を見つけた場合は、デステージ処理プログラム404は、キャッシュメモリ管理テーブルに記載の仮想ボリューム番号及び論理アドレスを元に、ダイナミックマッピングテーブル301からプールボリューム番号及び論理アドレスを求める。
このとき、プールボリューム番号及び論理アドレスがデフォルトページのアドレスであった場合は、デステージ処理プログラム404は、新規データを書き込むために、ダイナミックマッピングテーブル301から新規空きページを割当てる。そして当該割当てページのプールボリューム番号と論理アドレスをダイナミックマッピングテーブル301の本デステージ処理に対応する仮想ボリューム番号及び論理アドレスに対応させて格納する。
既にページが割り当たっている場合は、デフォルト値のプールボリューム番号と論理アドレスとは異なるプールボリューム番号と論理アドレスの値が仮想ボリューム501の論理アドレス502に対応して格納されている。
プールボリューム番号と論理アドレスが求まった後、デステージ処理プログラム404は、論理物理アドレス変換テーブルで、ドライブのアドレスを求める(S1302)。
デステージ処理プログラム404は、前記S1302で求めた、ドライブのアドレスに対して、キャッシュメモリ上のダーティデータを書き込む(S1303)。
そして、デステージ処理プログラム404は、ダイナミックマッピングテーブル301のモニタ情報インデックス番号に対応するページ毎モニタテーブル302のI/Oカウンタ値を更新する(S1304)。
更に、デステージ処理プログラム404は、未反映データがキャッシュメモリ上にあるかチェックする(S1301)。もし未反映データがなければ、終了し、未反映データがあれば、再度S1302から実施する。
図14は、度数分布作成処理プログラム402のフローチャートである。
本プログラムは、度数分布を仮想ボリューム単位に作成していく。そのため、度数分布作成処理プログラム402は、度数分布を未作成の仮想ボリュームがあるか否かを確認する(S1401)。
ステップS1401においてもし度数分布を未作成の仮想ボリュームがあれば、度数分布作成処理プログラム402は、当該仮想ボリューム内で度数分布作成のために未処理ページがあるか否かをボリュームの先頭から確認していく(S1402)。
ステップS1402において未処理ページがあれば、度数分布作成処理プログラム402は、加重平均算出処理プログラム403を呼び出し、I/O数を算出する(S1403)。
そして、度数分布作成処理プログラム402は、算出したI/O数に対して、対応する度数分布のページ数を加算した(S1404)後、S1402に戻る。
ボリュームの後端まで実施もしくは処理している仮想ボリュームに関し未処理ページが無いことがわかった場合には、度数分布作成処理プログラム402は、他の仮想ボリュームが無いか確認するために、S1401に戻る。
度数分布作成処理プログラム402は、度数分布未作成の仮想ボリュームが無くなったら、プールの度数分布を作成する(S1405)。プールの度数分布は、仮想ボリュームの度数分布の合計値を計算することにより算出する。具体的には、仮想ボリューム加重指数テーブル307において、対象プールに属する各仮想ボリューム番号804のI/O数805に対応するページ数803の総和を求めて、プール度数分布テーブル306のI/O数805に対応するページ数802として格納する。
続いて、度数分布作成処理プログラム402は、Tier割り当て閾値208を計算して決定する(S1406)。Tier割り当て閾値208は、各Tierについて、Tierのポテンシャル(処理できる最大のI/O数)又はTierの容量何れかを超える限界点から、最大のページ割り当て量の範囲210を決定し、範囲210と度数分布のグラフ209の交点から、Tier割り当て閾値208を算出する方法がある。また、ユーザが指定した閾値を使用する方法でもよい。
図15は、ページ再配置処理プログラム405のフローチャートである。
度数分布作成処理プログラムが終了して、ページ再配置のためのTier割り当て閾値208が決定すると、ページ再配置プログラム405は、Tier割り当て閾値208を元に各仮想ボリュームに割り当てられているページをプール内の適切なTierに再配置する。
ページ再配置プログラム405は、プールに定義された仮想ボリュームを先頭から割り当てられているページの加重平均算出プログラムによって算出されたI/O数とTier割り当て閾値208に応じて、現在いるTierのままでよいか異なるTierに移動すべきかを判定する。そして、ページ再配置プログラム405は、異なるTierに移動すべきだと判断したらページ内データを他のTierの空きページに移動してダイナミックマッピングテーブル301の仮想ボリューム501の論理アドレス502とプールボリューム番号と論理アドレスとの関係を移動先ページに変更する。
まず、ページ再配置プログラム405は、ページ再配置未処理の仮想ボリュームの有無を確認する(S1501)。
もしページ再配置未処理の仮想ボリュームが有れば、ページ再配置プログラム405は、対象仮想ボリュームを先頭から後端に向かって順次、割当たったページ毎に再配置要否を確認する(S1502,S1503)。再配置要否を確認とは、具体的に説明すると、対象のプールのプール度数分布テーブル306のTier割り当て閾値208から、現在いるTierのままでよいか異なるTierに移動すべきかを判定することである。さらに言うと、Tier1とTier2のTier割り当て閾値208Aと、Tier2とTier3のTier割り当て閾値208Bについて、対象のページのI/Oカウンタ702のI/O数と比較する。例えばI/Oカウンタ702の値が、Tier割り当て閾値208Aよりも大きく、対象のページの現在のTierがTier2だった場合、対象のページはTier1にプロモーションするべきなので、再配置は“要”となる。また、対象のページの現在のTierがTier1だった場合は、既に対象のページはTier1に配置されているため、再配置は“否”となる。対象のページの現在のTierを知る方法として、ダイナミックマッピングテーブル301の仮想ボリューム501の論理アドレス502とプールボリューム番号との関係から、プールボリューム番号により、現在どのTierに属しているかを判断できる。
そして、ステップS1503において再配置要の場合、ページ再配置プログラム405は、対象ページを再配置する(S1504)。
再配置否の場合と対象ページを再配置した後は、ページ再配置プログラム405は、仮想ボリューム内の次ページが再配置対象ページか否かを確認する(S1502,S1503)。
ページ再配置プログラム405は、仮想ボリューム全体に渡って再配置処理を行った後は、別の再配置未処理の仮想ボリュームをチェックし、ページ再配置未処理の仮想ボリュームが無くなるまで行う(S1501)。
尚、周期処理であった場合は、周期処理の終わりで一度ページ再配置プログラムは終了し、次の周期処理で改めてページ再配置プログラムによってページ再配置処理は継続されていく。また周期の後端までに再配置処理が終了していた場合は、その時点で一度ページ再配置処理終了し、次の周期で改めて仮想ボリューム毎に再配置処理が行われる。
図16にて、加重平均算出用カウンタ1(703A)値、加重平均算出用カウンタ2(703B)値、およびI/Oカウンタ値702の算出式の例を示す。本実施形態ではまず、ホストI/O処理プログラム401や、デステージ処理プログラム404等にて一定の周期でカウントした、ページのI/O数カウンタ値(a_count)を基に、加重平均算出用カウンタ1値(c[1]_new)と、加重平均算出用カウンタ2値(c[2]_new)とを算出する(1601および1602)。そして、加重平均算出用カウンタ1値と、加重平均算出用カウンタ2値との合算により、ページのI/O数(a_result)を算出する(1603)。
まず、加重平均算出用カウンタ1値(c[1]_new)は、加重指数テーブル(303または304または307)で管理する、「加重平均算出用カウンタの加重値」(p[1]_1)と、「I/O数カウンタの加重値」(p[1]_2)とを加重指数1607として使用し、1604に示す算出式により求める。ここで、加重平均算出用カウンタ1は、短周期のカウンタとして使用するため、「加重平均算出用カウンタの加重値」(p[1]_1)を、軽めに設定する。図の例では、「加重平均算出用カウンタの加重値」(p[1]_1)を3、「I/O数カウンタの加重値」(p[1]_2)を1としているが、I/O数カウンタの値(最新の測定周期のI/O数)の重みを1とすると、加重平均算出用カウンタの値(過去のI/O数)の重みを3として、I/O数カウンタの値を算出することになる。例えば「加重平均算出用カウンタの加重値」(p[1]_1)を0、つまり無加重と設定すると、算出結果は、過去のI/O数を完全に無視することになるので、最新の測定周期のI/O数の値そのものとなる。算出式は、I/O数カウンタ値(a_count)と、前回算出した加重平均算出用カウンタ1値(c[1]_old)との加重平均を算出する式である。算出した加重平均算出用カウンタ1値(c[1]_new)は、次回のI/O数算出時のc[1]_old値として使用する。このため、加重平均算出用カウンタ1(703A)値をc[1]_newで更新する。
同様に、加重平均算出用カウンタ2値(c[2]_new)は、加重指数テーブル(303または304または307)で管理する、「加重平均算出用カウンタの加重値」(p[2]_1)と、「I/O数カウンタの加重値」(p[2]_2)とを加重指数1607として使用し、1605に示す算出式により求める。ここで、加重平均算出用カウンタ2は、長周期のカウンタとして使用するため、「加重平均算出用カウンタの加重値」(p[2]_1)を、重めに設定する。図の例では、「加重平均算出用カウンタの加重値」(p[2]_1)を127、「I/O数カウンタの加重値」(p[2]_2)を1としているが、I/O数カウンタの値(最新の測定周期のI/O数)の重みを1とすると、加重平均算出用カウンタの値(過去のI/O数)の重みを127として、I/O数カウンタの値を算出することになる。つまり、上述した短周期の場合と比較し、最新の測定周期のI/O数が加重平均算出用カウンタの値に与える影響が少ないことになる。算出式は、I/O数カウンタ値(a_count)と、前回算出した加重平均算出用カウンタ2値(c[2]_old)との加重平均を算出する式である。算出した加重平均算出用カウンタ2値(c[2]_new)は、次回のI/O数算出時のc[2]_old値として使用する。このため、加重平均算出用カウンタ2(703B)値をc[2]_newで更新する。以上が種別903でカウンタ数が2と設定されている場合であるが、種別903でカウンタ数が3以上と設定されている場合は、加重平均算出用カウンタ3値(c[3]_new)以降のカウンタについても同様にして算出を実行する。また、種別903でカウンタ数が1と設定されている場合は、前述の加重平均算出用カウンタ2値(c[2]_new)の算出は実施しない。
ページのI/O数(a_result)は、加重平均算出用カウンタ1値(c[1]_new)と、加重平均算出用カウンタ2値(c[2]_new)とを基に、加重指数テーブル(303または304または307)で管理する「合算方法」に従って、平均値または、最大値として算出する(1606)。平均値、最大値を計算する時は、前記加重指数テーブルで管理する、加重平均算出用カウンタ1の「合算時加重値」(p[1]_merge)および、加重平均算出用カウンタ2の「合算時加重値」(p[2]_merge)を合算時加重値1608として使用し、各加重平均算出用カウンタの重みづけを行う。I/Oカウンタ値702は、算出したページのI/O数(a_result)で更新する。以上が種別903でカウンタ数が2と設定されている場合であるが、種別903でカウンタ数が3以上と設定されている場合は、加重平均算出用カウンタ3値(c[3]_new)以降のカウンタについても同様にして算出を実行する。また、種別903でカウンタ数が1と設定されている場合は、平均値および最大値の算出を実行しない。
以上説明したように、「加重平均算出用カウンタの加重値」(p[X]_1)及び「I/O数カウンタの加重値」(p[X]_2)を、加重平均算出用カウンタごとに異なる値を設定することが可能である。(p[X]_1÷p[X]_2)の値(比重)を、各加重平均算出用カウンタで異なる値とすることにより、異なる周期の負荷を合わせたI/O数(a_result)が算出できる。(p[X]_1÷p[X]_2)>(p[Y]_1÷p[Y]_2)であれば、加重平均算出用カウンタXが長周期、加重平均算出用カウンタYが短周期となる。
また、図16の式ではI/Oカウンタ値算出(1606)時に、加重平均算出用カウンタのみを参照しているが、I/O数カウンタ値(a_count)そのものを最大値又は平均値の算出対象として含めてもよい。その場合は、同様にして、I/O数カウンタ値(a_count)用の合算時加重値を設け、その乗算を含めてもよい。例えば、p[1]_1が0だった場合は、c[1]_newの算出結果はI/O数カウンタ値(a_count)と同等であるため、加重平均算出用カウンタ1値(c[1]_new)を設けずに、代わりに上述の方法でI/O数カウンタ値(a_count)を使用することで、加重平均算出用カウンタ1値(c[1]_new)による記憶領域の使用量を削減することができる。
最大値の場合、I/O数の急激な上昇に対して、長周期の視点での低いカウンタ値により低めの値となってしまうことがなく、より敏感にプロモーションを実施できるという効果がある。また、最大値の場合、プール全体からするとI/O数が上昇し、相対的に、Tierの最大性能を低く考えることになり、急激な負荷変動に対してネック状態となりにくい、余裕をもったTier配置となる。
平均値の場合、I/O数の急激な上昇に対して、長周期の視点での低いカウンタ値との平均となるため、滑らかになるため、最大値よりも敏感なプロモーションを実施できないが、プロモーションによるTier間のページ再配置の量を削減できる。また、平均値の場合、最大値と比較し、プール全体からするとI/O数が実際のI/O数に近くなるという性質があり、Tierの最大性能を引き出すTier配置が可能となる。
なお、本実施形態では、加重平均算出用カウンタのパラメータ(加重指数)を変更できるようにしている。これは、ホストI/Oの特性に変化が生じ、加重平均算出用カウンタの修正が必要となった場合に、パラメータを変更することでその修正に対応できるようにしたものである。
具体的には、ホストI/Oの特性として、一時的な負荷停止期間が短くなった場合である。例えば、測定周期は1時間周期だった場合に、平日(5日間)動作して週末(2日間)動作しないジョブがあったとする。そのジョブが、4時間毎に2時間、周期的に稼働するようにスケジュールが変更された場合、2時間程度の負荷停止期間があることになる。この場合、従来想定していた土日の2日間程度の負荷停止期間とは異なるため、長周期用の加重平均算出用カウンタを用いなくても、短周期用の加重平均算出用カウンタのみで、2時間の負荷停止期間に対するデモーションを抑止できる場合がある。具体的には加重平均算出用カウンタ1値(c[1]_new)のp[1]_1とp[1]_2を3と1に設定することにより、一つの加重平均算出用カウンタによる負荷指標のみでも、長周期の視点(従来の設定では短周期に相当)で、特定のページの一時的なI/O数低下によるデモーションを抑止しつつ、特定のページのI/O数の上昇に対して、設定周期(1時間)での迅速なプロモーションが可能となる。この場合、従来の設定で使用していた2つ目の加重平均算出用カウンタを管理装置からの指示により解放させることにより、モニタリングに必要なメモリ使用量、計算負荷の低減を図れる。
また、システムの運用中に、途中で測定周期を変更する場合、上述した本方式は時間的な重み付けが変わってしまう。時間的な重み付けを同等に維持するには、変更した測定周期に応じて、負荷の重みを変更する。例えば、現在の測定周期が1時間の場合で、加重指数がp[1]_1=3、p[1]_2=1(Short−Range)、p[2]_1=127、p[2]_2=1(Long−Range)の場合を考える。この場合、測定周期をt時間に変更する場合、加重指数をp[1]_1=4÷t−1、p[1]_2=1、p[2]_1=128÷t−1、p[2]_2=1に設定する。前記のように加重指数の補正を実施すると、時間的な重み付けを同等に維持することができる。一般的には、現在の測定周期がt1時間の場合に、測定周期をt2時間に変更する場合、今までの加重指数をpとして、次の設定すべき加重指数をqで表すと、q[X]_1=(p[X]_1+p[X]_2)÷(t2÷t1)−p[X]_2、q[X]_2=p[X]_1となる。現在の測定周期をこの加重指数の補正は、ストレージシステムが上述の計算式により測定周期の設定変更に応じて自動的に算出してもよいし、ユーザが上述の計算式により計算してGUIから設定してもよい。
図17は、加重平均算出処理プログラム403のフローチャートである。
まず、ステップS1701では、加重平均算出処理プログラム403は、対象ページのページ加重指数テーブルの設定が有るか無いかを判断する。具体的には、加重平均算出処理プログラム403は、ページ加重指数テーブル304に、対象ページのエントリが有るか無いかを調べる。対象ページのエントリが有る場合は、加重平均算出処理プログラム403は、ステップS1704にジャンプし、加重指数の設定値として対象ページの加重値を用いることと決定し(ステップS1704)、ステップS1707にジャンプする。また、対象ページのエントリが無い場合は、加重平均算出処理プログラム403は、ステップS1702にジャンプする。
S1702では、加重平均算出処理プログラム403は、対象ページを含む対象仮想ボリュームの仮想ボリューム加重指数テーブルの設定が有るか無いかを判断する。具体的には、加重平均算出処理プログラム403は、仮想ボリューム加重指数テーブル304に、対象ページを含む対象仮想ボリュームのエントリが有るか無いかを調べる。対象仮想ボリュームのエントリがある場合は、加重平均算出処理プログラム403は、ステップS1706にジャンプし、加重指数の設定値として対象仮想ボリュームの加重値を用いることと決定し(ステップS1706)、ステップ1707にジャンプする。対象仮想ボリュームのエントリが無い場合は、加重平均算出処理プログラム403は、ステップS1703にジャンプする。
S1703では、加重平均算出処理プログラム403は、対象ページを含む対象プールのプール加重指数テーブルの設定が有るか無いかを判断する。具体的には、加重平均算出処理プログラム403は、対象ページを含むプールをダイナミックマッピングテーブルから調べ、当該プールを対象プールとし、対象プールのエントリが有るか無いかを調べる。対象プールのエントリがある場合は、加重平均算出処理プログラム403は、ステップS1705にジャンプし、加重指数の設定値として対象プールの加重値を用いることと決定し(ステップS1705)、ステップS1707にジャンプする。対象プールのエントリが無い場合は、加重平均算出処理プログラム403は、ステップS1707にジャンプする。
ステップS1707では、加重平均算出処理プログラム403は、ステップS1704、またはステップS1705、またはステップS1706で決定した加重値のうち、加重平均算出用カウンタ1(Short−Range)の種別を用いて、加重平均算出用カウンタ1(Short−Range)のカウンタ値を算出する。算出方法は、図16で説明したので詳細を割愛する。
ステップS1708では、加重平均算出処理プログラム403は、ステップS1704、またはステップS1705、またはステップS1706で決定した加重値のうち、加重平均算出用カウンタ2(Long−Range)の種別を用いて、加重平均算出用カウンタ2(Long−Range)のカウンタ値を算出する。算出方法は、図16で説明したので詳細を割愛する。
ステップS1709では、加重平均算出処理プログラム403は、ステップS1707で算出された加重平均算出用カウンタ1の値と、ステップS1708で算出された加重平均算出用カウンタ2の値を用いて、I/Oカウンタのカウンタ値を算出する。算出方法は、図16で説明したので詳細を割愛する。
なお、ここでは加重平均算出用カウンタが2個の場合を例に説明した。加重平均算出用カウンタがN個の場合は、各加重平均算出用カウンタについてステップS1707ないしはステップS1708に相当するステップを実行して加重平均算出用カウンタ値を算出し、ステップS1709において、N個の加重平均算出用カウンタを用いてI/Oカウンタ値を算出すればよい。
図18は、プール単位にページ再配置処理を行うときの、モニタモードや合算方法、カウンタ数等の設定を行う画面の例を示す図である。
プール単位のページ再配置処理設定画面1801は、設定対象のプールを特定できるプール番号を表示する領域1802と、モニタモードを選択する領域1803と、モニタモードが「加重モード」を選択した場合の詳細設定を行う領域1808で構成される。
ここで、モニタモードは、本発明で開示する加重平均算出によってページ再配置を決定する「加重モード」と、従来技術で開示するI/O数のみによってページ再配置を決定する「非加重モード」である。
モニタモードが「加重モード」を選択した場合の詳細設定を行う領域1808は、加重平均の合算方法を設定する領域1804と、加重平均を算出するカウンタ数を設定する領域1805と、加重平均を算出するカウンタの加重値を入力する領域1806と、予め設定された加重平均算出方法を選択できるプリセット選択を選ぶ領域1807から構成される。
領域1804、1805、1806が設定されたとき、ストレージシステムは、プール加重指数テーブルの、領域1802で特定されるプールのエントリを新規設定ないしは更新する。具体的には、領域1805の設定された数字に等しい加重平均算出用カウンタ番号エントリを設ける。各加重平均算出用カウンタ番号エントリには、領域1806に設定された値のうち、「旧」の値は、「加重平均算出用カウンタの加重値」種別として登録する。「新」の値は、「I/Oカウンタの加重値」種別として登録する。「合」の値は、「合算時加重値」種別として登録する。領域1804で「平均」が選択された場合、「合算方法」種別は「AVG」を登録する。領域1804で「最大」が選択された場合、「合算方法」種別は「MAX」を登録する。合算方法の設定領域1804で「最大」が選択された場合、プール加重指数テーブルの設定対象のプールを特定できるプール番号を表示する領域1802で示されたプールの合算時加重値は、「MAX」を登録する。
なお、上記で述べた詳細設定の設定値を「preSet1」のようなラベルで保存しておき、領域1807で簡便に設定できるようにしてもよい。
図19は、仮想ボリューム単位にページ再配置処理を行うときの、モニタモードや合算方法、カウンタ数等の設定を行う画面の例を示す図である。
仮想ボリューム単位のページ再配置処理設定画面1901は、設定対象の仮想ボリュームを特定できる仮想ボリューム番号を表示する領域1902と、モニタモードを選択する領域1903と、モニタモードが「加重モード」を選択した場合の詳細設定を行う領域1908で構成される。
ここで、モニタモードは、本発明で開示する加重平均算出によってページ再配置を決定する「加重モード」と、従来技術で開示するI/O数のみによってページ再配置を決定する「非加重モード」と、プール単位のページ再配置処理を行うために仮想ボリューム単位の再配置処理を実行しないことを示す「非設定」である。
モニタモードが「加重モード」を選択した場合の詳細設定を行う領域1908は、図18と同様の領域で構成されるため、説明を省略する。違いは、仮想ボリューム加重指数テーブルのエントリを新規設定ないしは更新する点である。
図20は、ページ単位にページ再配置処理を行うときの、モニタモードや合算方法、カウンタ数等の設定を行う画面の例を示す図である。
ページ単位のページ再配置処理設定画面2001は、設定対象のページを特定できる、仮想ボリューム番号と論理アドレスを表示する領域2002と、モニタモードを選択する領域2003と、モニタモードが「加重モード」を選択した場合の詳細設定を行う領域2008で構成される。
ここで、モニタモードは、本発明で開示する加重平均算出によってページ再配置を決定する「加重モード」と、従来技術で開示するI/O数のみによってページ再配置を決定する「非加重モード」と、プール単位あるいは仮想ボリューム単位のページ再配置処理を行うために仮想ボリューム単位の再配置処理を実行しないことを示す「非設定」である。
モニタモードが「加重モード」を選択した場合の詳細設定を行う領域2008は、図18と同様の領域で構成されるため、説明を省略する。違いは、ページ加重指数テーブルのエントリを新規設定ないしは更新する点である。
以上の算出法を採用すると、例えば週末(土日)だけ動作しないバッチジョブなどで、一時的に負荷が低下しても、長い期間のモニタと同様に、デモーションを抑止でき、月曜日の性能低下を抑止できる。且つ短周期でプロモーションが実施でき、日常業務の負荷への追随が可能となる。その効果を具体的に示したグラフが図21である。
グラフ2101は、週末(土日)の負荷低下時のI/Oカウンタの持続効果を示したものである。p[1]_1=3、p[1]_2=1(Short−Range)、p[2]_1=127、p[2]_2=1(Long−Range)として算出している。縦軸は負荷のI/O数を表し、横軸は時間経過を表す。線2103は、ページの実際のI/O数の時間的変化、つまりI/O数カウンタ値(a_count)を表すグラフである。線2104は、加重平均算出用カウンタ1値(c[1]_new)(Short−Range)の時間的変化を表すグラフである。線2105は、加重平均算出用カウンタ2値(c[2]_new)(Long−Range)の時間的変化を表すグラフである。線2106は、本発明の方法によるページのI/O数(a_result)の時間的変化を表すグラフである。線2107は、Tier割り当て閾値208を表す線である。I/O数カウンタ値(a_count)及び加重平均算出用カウンタ1値(c[1]_new)(Short−Range)は、土日(横軸の24時間目〜72時間目)の負荷低減に対して、Tier割り当て閾値208よりも低い値となるため、デモーションが発生する。しかし、本発明の方法によるページのI/O数(a_result)は、Tier割り当て閾値208を下回っていないので、デモーションの発生を抑止できる。
グラフ2102は、短周期でのプロモーションが実施できることを示したグラフである。p[1]_1=3、p[1]_2=1(Short−Range)、p[2]_1=127、p[2]_2=1(Long−Range)として算出している。縦軸は負荷のI/O数を表し、横軸は時間経過を表す。線2108は、ページの実際のI/O数の時間的変化、つまりI/O数カウンタ値(a_count)を表すグラフである。線2109は、加重平均算出用カウンタ1値(c[1]_new)(Short−Range)の時間的変化を表すグラフである。線2110は、加重平均算出用カウンタ2値(c[2]_new)(Long−Range)の時間的変化を表すグラフである。線2111は、本発明の方法によるページのI/O数(a_result)の時間的変化を表すグラフである。線2112は、Tier割り当て閾値208を表す線である。高い負荷(線2108に示す)が発生した場合に、加重平均算出用カウンタ2値(c[2]_new)(Long−Range)は、追従が遅れ、Tier割り当て閾値208を上回るのが24時間以降となってしまい、プロモーションが負荷の上昇発生時から大幅に遅れるが、本発明の方法によるページのI/O数(a_result)(線2109)は、負荷の上昇に迅速に追随することが可能であり、短周期でプロモーションが実施できる。
また、上述以外の方法として、測定周期を短周期のままとして、長周期(数週間以上)のI/O数の頻度の両方を保持する方法も考えられる。測定周期を1時間とすると、毎測定周期のI/O数を履歴データとしてそれぞれ数週間分(数百個分)保持し、毎測定周期に、数週間分の毎測定周期のI/O数のデータ(数百個分)を用いて一定の加重値を掛け、長周期のI/O数を算出する方法が考えられる。この方法はモニタリングの対象とする要素数が少ない場合には実装可能であるが、本発明のモニタリングの対象はページ単位であり、システムあたりの要素数は膨大である。このような場合は、算出に必要な記憶領域の容量が膨大となってしまい、またその集計処理にかかる時間も膨大となる。最初に述べた加重平均算出用カウンタを用いた方法であれば、ページの粒度でI/O数を採取する場合でも、周期の長さに依存せず、数個の加重平均算出用カウンタのみで算出可能であり、算出に必要な記憶領域の容量を削減することができ、またその集計処理にかかる時間も短くすることが可能となる。
また、上述以外の方法として、長周期、短周期でそれぞれI/O数のカウンタを持ち、それぞれの周期で更新していく方法が考えられる。この方法だと、上述のように長周期分の測定周期毎のI/O数の履歴を持つ必要はないため、算出に必要な記憶領域の容量を削減することができるが、各測定周期が長周期の切れ目に差し掛かる瞬間に、急激に変わってしまう場合があり、毎測定周期で純粋に、現時点から過去に渡る公平な加重とならないため、長周期の変わり目にデモーションが集中してしまう場合がある。最初に述べた加重平均算出用カウンタを用いた方法であれば、現時点から過去に渡る公平な加重とすることができ、この方法よりもデモーションが特定時点に集中して発生しないようにすることができる。