以下、本発明の好適な実施形態について、実施例に即して添付図面を参照しながら説明する。
[実施例1]
図1から図22を用いて、本発明の実施例1による情報処理システム1を説明する。
まず、図1を用いて情報処理システム1のシステム構成について説明する。次に、図2から図7を用いて、情報処理システム1に備えられるストレージシステム200において必要となる制御情報(テーブル)について説明する。そして、図7から図10を用いてボリュームの担当MPPKを切り替えする処理について説明する。最後に、図11から図22を用いて、ストレージシステム200によって提供されるストレージ機能の概要、ストレージ機能が適用されているボリュームの担当MPPKを切り替えする処理、リモートコピーグループ(後述)の担当MPPKを切り替えする処理について説明する。
情報処理システム1の構成
図1は、本実施例による情報処理システム1の全体構成の一例を示している。情報処理システム1は、ホスト100とストレージシステム200とを備えている。ストレージシステム200は、後述するように、ホスト100が処理するデータを格納するための記憶領域を提供する記憶媒体を備える装置である。ホスト100とストレージシステム200とは、ネットワーク110によって接続される。ネットワーク110としては、例えばSAN(Storage Area Network)である。通信プロトコルとして、Fibre Channelなどを採用することができる。
ホスト100
外部装置であるホスト100は、UNIX(登録商標)等の適宜のOS(Operation System)が稼働しているコンピュータであり、そのOS上で、例えばデータベース管理システムなどのアプリケーションソフトウェアを実行することで、所定の業務処理を行う装置である。ホスト100で実行される業務処理に用いられるデータの一部、又は全ては、ストレージシステム200によって提供される記憶領域に格納される。ホスト100はストレージシステム200に格納するデータの書き込み及び読み出しを行うため、ストレージシステム200に対してネットワーク110を用いてリード要求、ライト要求を発行する。
図2に、ホスト100として使用することができるコンピュータ10の構成例を示している。このコンピュータ10は、中央処理装置11(例えばCPU(Central Processing Unit)やMPU(Micro Processing Unit)、以下簡単のため「CPU」と称する)、主記憶装置12(例えばRAM(Random Access Memory)やROM(Read Only Memory))、補助記憶装置13(例えばHDD)、ユーザの操作入力を受け付ける入力装置14(例えばキーボードやマウス)、出力装置15(例えば液晶モニタ)、他の装置との間の通信を実現する通信インタフェース16(例えばNIC(Network Interface Card)やHBA(Host Bus Adapter))を備えている。
保守端末270
次に、保守端末270について説明する。保守端末270は、後述するストレージシステム200の動作状態をモニタし、あるいは例えば保守上必要な操作命令を与えるための端末であり、例えばSVP(SerVice Processor)である。
図1に示すように、保守端末270は、保守ポート275、CPU271、メモリ272、及び入出力部274を備え、これらの間は内部ネットワークによって互いに通信可能に接続されている。保守ポート275は、後述するストレージシステム200のMPPK210にある保守ポート213と接続されており、MPPK210から稼動情報を取得し、あるいはMPPK210に保守操作命令を送信するために使用するポートである。
メモリ272には、前記MPPK210に関する処理を実行するための保守用プログラム273が格納されており、CPU271がメモリ272からこの保守用プログラム273を読み出し実行することで、前記したMPPK210に関する保守を実現する。なお、メモリ272は、MPPK210から得た情報を格納するためにも使用される。
入出力部274は、ユーザからの操作入力を受け付けるためのキーボード、マウス等の入力装置、及びユーザにMPPK210から取得したストレージシステム200の稼動情報を表示するためのディスプレイ装置等の出力装置を含む。なお、保守端末270は、ストレージシステム200の内部ネットワーク280によってMPPK210の保守ポート213に接続されている。
ストレージシステム200
次に、本実施例のストレージシステム200の構成を、図1を参照して説明する。本実施例のストレージシステム200は、大きく分けて、フロントエンドパッケージ260(Front End Package、以下「FEパッケージ」)、マイクロプロセッサパッケージ210(MPPK)、メモリパッケージ220、バックエンドパッケージ230(Back End Package、以下「BEパッケージ」)、及びディスク装置(記憶装置)240を備え、これらは、内部ネットワーク280を介して相互に通信可能に接続されている。
なお、ストレージシステム200は、それぞれ複数のFEパッケージ260、メモリパッケージ220、BEパッケージ230、ディスク装置240、及び3以上のMPPK210を有するように構成してもよい。
FEパッケージ260は、通信ポート261とメモリ262とを有する。通信ポート261は、ホスト100がストレージシステム200にIO要求を発行するために用いるポート(図2の例では、通信インタフェース16である。)と接続されており、ホスト100からライト要求及びリード要求を受け付けることができる。なお、ホスト100のポートとポート261は、ネットワーク110によって直接接続してもよいし、1以上のスイッチなどを介して間接的に接続してもよい。
メモリ262は例えばRAMで構成されており、ホスト100から受領したリード要求及びライト要求を、当該要求を処理するMPPK210(要求先のボリュームに関するデータ処理を担当しているMPPK)の情報や、ホスト100から転送されたデータ、ホスト100へ転送するデータを一時的に格納する。なお、FEパッケージ260は複数のポート261とメモリ262とを有してもよい。
演算装置であるMPPK210は、プロセッサ211、ローカルメモリ212、及び保守ポート213を有し、これらは、ネットワーク214によって相互に通信可能に接続されている。一つのMPPK210が、複数のプロセッサ211、ローカルメモリ212、又は保守ポート213を有するとしてもよい。MPPK210としては、例えば種々のデュアルコアプロセッサ(Dual Core Processor)、カッドコアプロセッサ(Quad Core Processor)を採用することができ、この場合、それぞれのプロセッサパッケージ内に実装されているコアがプロセッサ211に相当する。
プロセッサ211は、後述するメモリパッケージ220のプログラム部222に格納されているプログラムを読み出して実行することで、ホスト100からのライト要求及びリード要求の処理などを実行する装置である。
ローカルメモリ212は、例えばRAMで構成され、プロセッサ211が実行するプログラムのデータを一時格納しておく、及びHDD240やメモリ220に格納されているデータ(後述する制御情報、業務データ、プログラムなど)を格納するためのキャッシュメモリとして使用される。ローカルメモリ212は、プロセッサ211からの距離が後述するメモリパッケージ220及びディスク装置240に比べ近いため、プロセッサ211がより高速にアクセスすることが可能となる。
保守ポート213は、ネットワーク280を介して、保守端末270にある保守ポート275に接続されている。保守ポート213は、保守端末270にMPPK210の稼動情報を送信し、あるいは保守端末270からの保守操作命令を受け付けるために使用される通信ポートである。
メモリパッケージ220は、制御情報部221、プログラム部222、及びキャッシュ部223を有する。プログラム部222には、ストレージシステム200による処理を実現するためのプログラムが記録されている。制御情報部221には、これらプログラム部222のプログラムが利用する制御情報が、例えばテーブルの形式で記録されている。メモリパッケージ220に格納されたプログラム及びプログラムが利用する制御情報は、MPPK210のプロセッサ211がメモリパッケージ220から読み出し処理する。プログラム部222に記録されるプログラム、及び制御情報部221に記録される制御情報の詳細は後述する。
キャッシュ部223には、HDD240に格納されるデータ及びディスク装置240から読み出したデータを一時的に格納する。メモリパッケージ220は、ディスク装置240に比べて高速な記憶媒体であるRAM等で構成されるため、ディスク装置240に格納される使用頻度の高いデータなどを、キャッシュ部223に格納することにより、常に全てのデータIOについてディスク装置240にアクセスする場合に比べて、ホスト100からのリード要求、ライト要求などの処理の高速化を図ることができる。なお、メモリパッケージ220は、障害発生時におけるデータ消失などを避けるために多重化してもよい。
BEパッケージ230は、ポート231とメモリ232とを有する。ポート231は、ネットワーク283を介してディスク装置240に接続されており、ホスト100からのライトデータをディスク装置240に書き込んだり、ホスト100からのリード要求に応じてディスク装置240からデータを読み出したりするために使用される通信ポートである。メモリ232には、ディスク装置240へ転送するデータ、及びディスク装置240から読み出したデータを一時的に格納する。なお、BEパッケージ230は2以上のポート231及びメモリ232を有しても良い。
ディスク装置240は、本実施例では例えばハードディスクドライブ(Hard Disk Drive、「HDD」)によって構成されており、ホスト100によって実行されるアプリケーションソフトウェア等がデータを格納するための論理記憶領域を提供する物理記憶装置である。
1つ以上のディスク装置240を、パリティグループという単位でまとめてRAID(Redundant Arrays of independent (or Inexpensive) Disks)で運用し、高信頼化を図ることができる。前記のように、ディスク装置240からなるパリティグループを一つ以上の論理記憶領域に分割して、それぞれを単位論理記憶領域である論理ボリューム250としている。
なお、本実施例では、物理的な記憶媒体としてHDD240を使用したが、フラッシュメモリ、半導体ドライブ(Solid State Drive、「SSD))、あるいはDVDなどの光ディスクを記録媒体として採用してもよい。
メモリパッケージ220の構成
図3にはメモリパッケージ220の構成例を示している。メモリパッケージ220の制御情報部221には、ストレージシステム200がホスト100からのデータIO処理、及び本発明に関する処理を実行するために用いる制御情報が、テーブルの形式で格納されている。本実施例では、制御情報部221には、ボリュームテーブル2211、担当MPPKテーブル2212、ローカルコピーテーブル2213、拡張ボリュームテーブル2214、リモートコピーグループテーブル2215、リモートコピー用担当MPPKテーブル2216、MPPK使用率テーブル2217、及び処理コストテーブル2218が格納されている。
プログラム部222には、MPPK210によって実行されるプログラムが格納されている。本実施例では、プログラム部222には、切り替え開始プログラム2221、IOプログラム2222、切り替え可否チェックプログラム2223、担当切り替えプログラム2224、モニタプログラム2225、負荷計算プログラム2226、拡張ボリューム負荷計算プログラム2227、ローカルコピー負荷計算プログラム2228、及びリモートコピー負荷計算プログラム2229が格納されている。これらのプログラムを、演算装置(MPPK)変更部と総称することがある。各テーブル、プログラムの詳細は、関連図面を参照して後述する。なお、キャッシュ部223は、上記したように、ホスト100とディスク装置240との間で授受されるデータの一時記憶領域として使用されるもので、詳細な説明は省略する。
制御情報部221
次に、メモリパッケージ220の制御情報部221に格納されるテーブルについて説明する。図3には、制御情報部221内に格納されるボリュームテーブル2211の一例を示す。
ボリュームテーブル2211は、ディスク装置240によって提供される単位論理記憶領域であるボリューム250に関する属性情報を格納する。ボリュームテーブル2211は、ボリューム番号欄22111、機能ビット欄22112、使用中ジョブ情報欄22113、ライト数欄22114、及びリード数欄22115を備える。なお、以下簡単のため、ボリュームテーブル2211等のテーブルに設定された各欄に記録される情報自体についても、例えば「ボリューム番号22111」等のように、その情報が記録される欄に付した符号と同一の符号を付けて表すものとする。
ボリューム番号欄22111には、ストレージシステム200内部で各ボリューム250を一意に識別するための識別符号であるボリューム番号が記録される。ボリューム番号は、ディスク装置240によって提供される複数のボリューム250に対して、MPPK210がシリアルにユニークな番号を付与する。
機能ビット欄22112には、ボリューム番号22111によって識別されるボリューム250に適用されているストレージ機能(後述)の情報を表す機能ビット(機能情報)が記録される。使用中ビット欄22113には、ボリューム番号22111によって識別されるボリューム250を使用中のジョブが存在するかを表す情報である使用中ビットが記録される。当該ボリューム250を使用中のジョブが存在する場合、使用中ビット欄22113には、当該ジョブに付されたジョブ番号を記録する。
ライト数欄22114には、ボリューム番号22111によって識別されるボリューム250が単位時間内にホスト100から受領したライト要求の回数を表す情報であるライト数が記録される。リード数欄22115には、ボリューム番号22111によって識別されるボリューム250が単位時間内にホスト100から受領したリード要求の回数を表す情報であるリード数が記録される。ライト数22114及びリード数22115は、例えばあるボリューム250を担当しているMPPK210が直近の単位時間に受けたライト数及びリード数をカウントしておき、適宜の時間間隔でライト数欄22114及びリード数欄22115の記録を更新するように構成することができる。
図4の例では、ボリューム番号22111が1であるボリューム250について、ストレージ機能が適用されていないため機能ビット欄22112に記録がなく、使用中ジョブ番号欄22113にはジョブ番号1,2,5が記録され、これらのジョブによって使用されていることを示している。そして、ライト数欄22114及びリード数欄22115に示されているように、ボリューム番号22111が1であるボリューム250は、ホスト100からライト要求を200回、リード要求を100回受領したことを示している。ボリュームテーブル2211の各欄に記録される情報は、各ボリューム250を担当するMPPK210が適時に更新する。
次に、特定のボリューム250と、そのボリューム250の処理を担当するMPPK210との関係について説明する。本実施例のストレージシステム200では、各ボリューム250に関するデータ処理(ホスト100からボリューム250へのIO処理など)を担当するMPPK210が予め決定されている。このように、各ボリューム250のデータ処理を担当するMPPK210を予め決めておくことで、ボリューム250の特定のデータ処理に必要となる制御情報へアクセスするMPPK210を一つに限定することができる。
特定ボリューム250に関するデータ処理を行うMPPK210が予め決定されていれば、他のMPPK210と通信を行う必要がなく、処理に必要となる制御情報を1のMPPK210のローカルメモリ212に格納することができ、ボリューム250の処理を高速化することができる。例えば、ボリューム250のデータのうちダーティデータ(キャッシュ部223には書き込まれているがまだディスク装置240にデステージされていないデータ)がどのアドレスに存在するかを示す情報、あるいは後述するローカルコピー機能における差分データを示すコピー済みビットマップをローカルメモリ212に置くことで、MPPK210がそれらにアクセスする処理を高速化できる。
特定のボリューム250を担当する担当MPPK210を決める場合、FEパッケージ260は、ホスト100からIOを受領すると、IO発行先ボリューム250の情報に基づき、IO要求を担当MPPK210へ割り振る必要がある。FEパッケージ260は、この割り振りを実現するための情報として担当MPPKテーブル263を保持している。
図5には、メモリ262の構成例を示している。メモリ262には、FEパッケージ260の処理において使用される担当MPPKテーブル263が格納されている。図6に担当MPPKテーブル263の一例を示している。
担当MPPKテーブル263は、ボリューム番号欄2631及び担当MPPK番号欄2632を備える。ボリューム番号欄2631には、ボリュームテーブル2211のボリューム番号欄22111と同じボリューム250の識別符号であるボリューム番号が記録される。
担当MPPK番号欄2632には、ボリューム番号2631によって識別されるボリューム250の処理(当該ボリューム250へのIO処理など)を担当しているMPPK210の識別番号である担当MPPK番号が記録される。担当MPPK番号2632は、例えばストレージシステム200の運用開始前に、あらかじめシステム管理者が各MPPK210に対して一意に付与しておく識別番号である。FEパッケージ260は、ホスト100からIOを受領した場合、そのIO対象のボリューム250が有するボリューム番号2631により、担当MPPKテーブル263を検索し、IO対象ボリューム250を担当しているMPPK210のMPPK番号2632を取得して、当該MPPK210にIOを送信する。
担当MPPKテーブル2212は、メモリパッケージ220内の制御情報部221にも保持されている。図7に制御情報部221内にある担当MPPKテーブル2212の一例を示している。
制御情報部221内の担当MPPKテーブル2212は、ボリューム番号欄22121、担当MPPK番号欄22122、切り替え中ビット欄22123、及び切り替え先MPPK番号欄22124を備える。ボリューム番号欄22121及び担当MPPK番号欄22122は、図6の担当MPPKテーブル263のボリューム番号欄2631及び担当MPPK番号欄2632に該当する。
切り替え中ビット欄22123及び切り替え先MPPK番号欄22124に記録される情報は、担当MPPK210を切り替える際に必要となる情報である。切り替え中ビット欄22123には、対応するボリューム番号22121で特定されるボリューム250の担当MPPK210が切り替え処理中であることを意味する情報である切り替え中ビットが記録される。切り替え中ビット22123の値が「ON」である場合、当該担当MPPK210について切り替え処理が実行されていることを示し、その値が「OFF」である場合、当該担当MPPK210が切り替え処理中でないことを示す。切り替え先MPPK番号欄22124には、担当MPPK切り替え処理により新しく担当MPPK210となるMPPK210の番号である切り替え先MPPK番号が記録される。
図7の例では、ボリューム番号22121が1であるボリューム250の担当MPPK210が、MPPK番号が1のMPPK210から、MPPK番号が2のMPPK210へ切り替え中であることを示している。なお、切り替え中ビット22123が「OFF」である場合、切り替え先MPPK210が存在しないので、図7では、切り替え先MPPK210が存在しないことを示す「−」符号を切り替え先MPPK番号欄22124に記録している。
切り替え中ビット22123を用いて、あるボリューム250の担当MPPK210が切り替え中であるかを管理する理由は次の通りである。あるボリューム250について担当MPPK210をMPPK番号が1のMPPK210(以下「」MPPK1)からMPPK番号が2のMPPK210(以下「MPPK2」)へ切り替えするとき、MPPK1に実行中の処理が存在する可能性がある。このMPPK1で実行中の処理の完了を待たずに、MPPK2で新たな処理を開始すると、MPPK1とMPPK2の両方がローカルメモリ212にそれぞれ当該実行中処理についての制御情報を持ち、かつ、当該制御情報を更新する結果となる。このため、両者のローカルメモリ212に記録される制御情報が不整合な状態になる可能性がある。この不整合な状態が起こるのを回避するため、切り替え中ビット22123を設け、切り替え中のMPPK210が識別可能となるようにしている。
図7の例で、MPPK1に実行中の処理が残っている間は、切り替え中ビット22123をONに設定する。そして、切り替え中ビット22123がONの間は、担当MPPKテーブル2212の担当MPPK番号22122を切り替えせず、切り替え先MPPK210(図7の例では切り替え先MPPK番号が2であるMPPK210)での新しい処理を実行しないように制御する。
なお、特定のボリューム250への新たなIO要求が切り替え元MPPK210へ発行され続けた場合、切り替え元MPPK210で実行中の処理は完了しない。この事態を防ぐため、当該ボリューム250への新たなIOは、FEパッケージ260によって切り替え先MPPK210へ送信されるように構成している。担当MPPK210切り替え処理については、図8から図11を参照して詳述する。
担当MPPK切り替え処理
図8から図11を参照して、担当MPPK210の切り替え切り替え処理と、切り替え切り替え中のIO処理の一例を説明する。これらの処理は、ストレージシステム200のプロセッサ211が、メモリパッケージ220のプログラム部222に格納されている切り替え開始プログラム2221、IOプログラム2222、担当切り替え可否チェックプログラム2223、及び担当切り替えプログラム2224を実行することで実現される。
図8に、切り替え開始プログラム2221による処理フローの一例を示す。図8の切り替え開始プログラム2221は、担当MPPKテーブル2212に記録されている切り替え中ビット22123などを更新し、担当MPPK210の切り替え処理を開始するプログラムである。以下、処理主体をプログラムとして記載した場合は、当該プログラムがプロセッサ211で実行されて該当処理が実現されることを意味するものとする。
切り替え開始プログラム2221は、保守端末270からの入力、あるいは他のプログラムからのアクセスによって起動される。このとき、切り替え開始プログラム2221は、担当MPPK210が切り替えられることとなるボリューム(以下「切り替え対象ボリューム」)250のボリューム番号22121、及び切り替え先MPPK210(新しい担当MPPK210)のMPPK番号22124を受領する。
切り替え開始プログラム2221は、担当MPPKテーブル2212から切り替え対象ボリューム250に関するエントリを特定する。そして、当該エントリの切り替え中ビット22123をONとし、切り替え先MPPK210に指定された切り替え先MPPK210のMPPK番号22124を登録する(S100)。
次に、切り替え開始プログラム2221は、FEパッケージ260の担当MPPKテーブル263を更新し(S101)、処理を終了する(S102)。具体的には、担当MPPKテーブル263の担当MPPK番号欄2632に、切り替え先MPPK210のMPPK番号22124を格納する。これにより、切り替え対象ボリューム250へ発行される新たなIOは、FEパッケージ260によって切り替え先MPPK210に送信されることになる。
次に、図9を参照して、担当MPPK210切り替え前のIO処理、切り替え中のIO処理、切り替え開始時に切り替え元MPPK210で実行中であったIO処理について説明する。
まず、担当MPPK210の切り替え前のIO処理について説明する。IOプログラム2222は、担当MPPKテーブル2212を参照して、IO対象ボリューム250の担当MPPK210の情報を取得し(S200)、切り替え中ビット22123がONであるか否かをチェックする(S201)。切り替え前の場合、切り替え中ビット22123はOFFであるため(S201、No)、処理はS202へ進む。
IOプログラム2222は、ボリュームテーブル2211の使用中ジョブ情報欄22113に、実行しようとするジョブ番号を登録する。ジョブ番号は、ストレージシステム200がジョブを起動する毎に割り当てる番号である。ストレージシステム200で同時に実行されているジョブのジョブ番号は、それぞれ異なる番号である。この使用中ジョブ情報22123を登録するのは、ボリューム250使用中に当該ボリューム250の担当MPPK210が切り替えられないようにするためである。
次いで、IOプログラム2222は、ボリューム250に対して指定されたIO処理を実行し(S203)、使用中ジョブ情報欄22113から該当ジョブ番号を削除する(S204)。
次に、IOプログラム2222は、担当MPPKテーブル2212を参照して、IO対象ボリューム250の担当MPPK210の情報を取得し、切り替え中ビット22123がONであるか否かをチェックする(S205)。これは、IO実行中に担当MPPK210の切り替えが開始している場合にS206の処理を実行するためである。S206の処理は後述する。切り替え前のIO処理の場合、切り替え中ビット22123はOFFであるため、処理を終了する(S207)。
次に、担当MPPK切り替え中のIO処理について説明する。担当MPPK210の切り替え中にMPPK210が受領するIOとしては、FEパッケージ260が切り替え元MPPK210に振り分けたIOと、FEパッケージ260が切り替え先MPPK210に振り分けたIOの二つが考えられる。
処理S201において、担当MPPK210切り替え中の場合(S201、Yes)、IOプログラム2222はS208へ進む。S208で、IOプログラム2222は、自MPPK210のMPPK番号と、担当MPPKテーブル2212の切り替え先MPPK番号22124を比較する(S208)。MPPK番号が異なる場合(S208、No)、IOは、FEパッケージ260によって切り替え元MPPK210へ振り分けられたIOであると特定される。
一方、自MPPK210のMPPK番号と、担当MPPKテーブル2212の切り替え先MPPK番号22124とが同一の場合(S208、Yes)、IOは、FEパッケージ260によって切り替え先MPPK210へ振り分けられたIOであると特定される。切り替え先MPPK210へ振り分けられたIOの場合、IOプログラム2222は、切り替え中ビット22123を繰り返し参照し(S209)、切り替えが完了するのを待つ(S209、No)。切り替え中ビット22123がOFFであった場合(S209、Yes)、切り替えが完了したと判定し、IOプログラム2222は、S202からS207を実行してIO処理を完了する。
一方、処理S208で自MPPK210のMPPK番号と、担当MPPKテーブル2212の切り替え先MPPK番号22124とが同一でないと判定され(S208、No)、当該IOが切り替え元MPPK210へ振り分けられたIOであると特定された場合、IOプログラム2222は、切り替え先MPPK210へIO処理を依頼する(S210)。依頼を受領した切り替え先MPPK210のIOプログラム2222は、S200からS210を実行することでIOを処理する。
切り替え元MPPK210で実行中の処理が全て完了した場合、担当MPPKテーブル2212の担当MPPK番号欄22122に切り替え先MPPK番号22124を書き込み、切り替え中ビット22123をOFFすることで、切り替え先MPPK210での処理を開始する必要がある。これを実現するために、切り替え元MPPK210で切り替え対象ボリューム250を使用しているジョブが存在しなくなったことを検出し、担当MPPKテーブル2212の担当MPPK番号、切り替え中ビットを更新する。
切り替え対象ボリューム250を使用しているジョブが存在しないことをチェックする契機として、IO完了契機、IOとは独立の契機の二つが考えられる。IO完了契機でチェックするための処理がS206である。S205で切り替え中ビット22123がONと判定された場合(S205、Yes)、IOプログラム2222は担当切り替え可否チェックプログラム2223を起動する(S206)。
なお、S202からS205の間に、担当MPPK210の切り替えが開始された場合、S205実行時に切り替え中ビット22123がONになっている可能性がある。IOとは独立の契機の場合、監視プログラム(図示しない)などが、定期的に担当MPPKテーブル2212を参照して、切り替え中ビット22123がONに設定されているボリューム250に対して、担当切り替え可否チェックプログラム2223を起動する。
図10に、担当切り替え可否チェックプログラム2223による処理フローの一例を示している。担当切り替え可否チェックプログラム2223は、切り替え対象ボリューム250の担当MPPK210を切り替えることができるか否かをチェックするためのプログラムである。具体的には、担当切り替え可否チェックプログラム2223は、切り替え対象ボリューム250を使用中のジョブが存在するか否かによって切り替え可否を判定する。
まず、担当切り替え可否チェックプログラム2223は、切り替え対象ボリューム250を使用中のジョブが存在するか否かをチェックする(S300)。この処理は、ボリュームテーブル2211の使用中ジョブ情報22113を参照することで実現する。切り替え対象ボリューム250を使用中のジョブが存在する場合(S300、Yes)、担当MPPK210を切り替えることができないため、担当切り替え可否チェックプログラム2223は処理を終了する(S302)。一方、切り替え対象ボリューム250を使用中のジョブが存在しない場合(S300、No)、担当切り替え可否チェックプログラム2223は担当切り替えプログラム2224をコールし(S301)、処理を終了する(S302)。
図11に担当切り替えプログラム2224による処理フローの一例を示している。担当切り替えプログラム2224は、担当MPPKテーブル2212の担当MPPK番号22122、切り替え中ビット22123、及び切り替え先MPPK番号22124を更新することなどで、切り替え対象ボリューム250の担当MPPK210を実際に切り替えるためのプログラムである。担当切り替えプログラム2224の処理を実行することにより、切り替え先MPPK210で、切り替え対象ボリューム250の処理を開始することができる。
担当切り替えプログラム2224は、切り替え元MPPK210のローカルメモリ212から切り替え対象ボリューム250に関する制御情報を、メモリパッケージ220の制御情報部221に書き出す(S400)。この制御情報は、MPPK210がボリューム250に対してデータIO処理を実行する際に使用する情報であり、例えば対象ボリューム250のダーティデータが格納されているキャッシュ部223のアドレスを示す情報を含む。
次に、担当切り替えプログラム2224は、担当MPPKテーブル2212の担当MPPK番号22122、切り替え中ビット22123、及び切り替え先MPPK番号22124を更新する。例えば、担当MPPK210を、MPPK1からMPPK2へ切り替えする場合、担当切り替えプログラム2224は、担当MPPK番号22122を1から2へ切り替えし、切り替え中ビット22123をONからOFFへ切り替えし、切り替え先MPPK番号22124を2から切り替え先MPPK210が存在しないことを意味する符号である「−」へ切り替える(S401)。
次いで、担当切り替えプログラム2224は、対象ボリューム250にいずれかのストレージ機能が設定されているか否かを判定する(S402)。ストレージ機能が設定されている場合(S402、Yes)、担当切り替えプログラム2224は、当該ストレージ機能に関する制御情報を、ローカルメモリ212からメモリパッケージ220の制御情報部221に書き出し(S403)、処理を終了する(S404)。機能が設定されていない場合、S403をスキップし処理を終了する(S404)。
以下、ストレージ機能が適用されたボリューム250の担当MPPK210を切り替える処理について説明する。上述したように、ストレージ機能が設定されていることを考慮して担当MPPK210の切り替え処理を行うことにより、切り替えによる性能低下を回避するようにしている。まず、本実施例のストレージシステム200におけるストレージ機能の概要を述べ、担当MPPK210を予め決めておくアーキテクチャでの問題点、及びその問題点を解消することが可能な担当MPPK210の切り替え方法について述べる。
ストレージ機能の一つにローカルコピー機能がある。ローカルコピー機能は、ストレージシステム200内で、ボリューム250のコピーを作成する機能である。ローカルコピー機能では、コピー元となる正ボリューム(Primary VOLume、以下「PVOL))と、コピー先となる副ボリューム(Secondary VOLume、以下「SVOL」)の二つのボリューム250を関連付ける。このように関連づけられたPVOLとSVOLとをまとめてペアと呼ぶ。
図12は、ローカルコピー機能におけるPVOLとSVOLとの関係を管理するために使用されるローカルコピーテーブル2213の一例である。ローカルコピーテーブル2213は、ペア番号欄22131、PVOL番号欄22132、SVOL番号欄22133、及びコピー量欄22134を備える。ペア番号欄22131には、PVOLとSVOLのペアに対して一意に割当てられている番号であるペア番号が記録される。このペア番号22131を用いて、ストレージシステム200内部で各ペアを一意に識別することができる。PVOL番号欄22132には、PVOLに付与されているボリューム番号が記録される。SVOL番号欄22133には、SVOLに付与されているボリューム番号が記録される。コピー量欄22134には、直近の単位時間あたりにPVOLからSVOLへコピーされたデータの量を示す情報であるコピー量が記録される。コピー量22134は、例えば直近の1秒間にPVOLからSVOLへコピーされたデータ量として規定することができ、図12の例では、MB/sの単位で記録されている。
次に、ローカルコピー機能の動作を簡単に説明する。以下ローカルコピー機能を主体として記載された処理は、ローカルコピー機能を実現するプログラムをMPPK210で実行して実現されるものとする。他のストレージ機能について、当該ストレージ機能を処理主体として記載した場合も、同様である。
まず、ローカルコピー機能は、保守端末270あるいはホスト100からローカルコピー開始指示を受領する。この指示は、PVOLとSVOLのボリューム番号を含む。指示を受領すると、ローカルコピー機能は、ローカルコピーテーブル2213に、ペア番号22131、PVOL番号22132、SVOL番号22133、及びコピー量22134を記録する。
ローカルコピー機能は、ある時刻のPVOLのデータをSVOLにコピーする機能、及び常にPVOLとSVOLのデータを同一に保持する機能を提供する。
まず、ある時刻のPVOLのデータをSVOLにコピーする方法について述べる。ローカルコピー機能は、コピー実行指示を受領すると、PVOLの先頭アドレスからPVOLの末尾に向かって順次データを読み出し、SVOLに書き込む。PVOLの末尾までのコピーが完了するとコピー完了となる。上記の処理によって、ある時刻のPVOLのデータのコピーをSVOLに作成するためには、ホスト100からのPVOLへのライトを一旦停止してデータをコピーする必要がある。
PVOLへのライトを停止せず、ホスト100からPVOLへのライトを受領しながらデータをコピーする方法を述べる。このようなコピー処理を実現するために、ストレージシステム200は、例えばメモリパッケージ220の制御情報部221にコピー済みビットマップ(図示しない)を有する。このコピー済みビットマップとは、PVOL内のアドレス毎に、当該アドレスに格納されているデータがSVOLにコピー済みか否かを示す情報である。本実施例では、あるアドレスのコピー済みビットマップの値が「OFF」の場合はコピー済み、「ON」の場合は未コピーを表すものとする。
ローカルコピー機能は、PVOLからSVOLへのコピーを開始する時、コピー済みビットマップの内容を全て「ON」とする。次に、ローカルコピー機能は、PVOLからSVOLへデータをコピーするとき、コピーが完了したアドレスに対するコピー済みビットマップの値を「OFF」へと変更する。さらに、ホスト100からPVOLへのライト要求を受領したときにも、コピー済みビットマップを参照し、ライトアドレスに対するコピー済みビットマップの値が「ON」であれば、その時点でPVOLからSVOLへとライトアドレスのデータをコピーし、コピー済みビットマップを「OFF」へ変更する。PVOLからSVOLへのコピー完了後、ホスト100からのライトデータをPVOLの該当アドレスに書き込む。
これによって、ホスト100からのライトを受領しつつ、そのライト要求受領前のある時刻におけるPVOL格納データのコピーを作成することができる。
次に、常にPVOLとSVOLのデータを同一に保持する機能について述べる。ある時刻のPVOLのデータをSVOLにコピーする場合と同様に、ローカルコピー機能は、PVOLの先頭アドレスからPVOLの末尾に向かって順次データを読み出し、SVOLに書き込む。また、ローカルコピー機能は、コピー状況をコピー済みビットマップによって管理する。
ホスト100からPVOLへのライト要求を受領したとき、ローカルコピー機能は、ライトデータをPVOLのみに書き込むのではなく、PVOLとSVOLの両方に書き込むことによって常にPVOLとSVOLのデータを同一に保つ。
別の方法として、ローカルコピー機能がライト要求を受領したときに、ライトデータをPVOLのみに書込む方法がある。具体的には、ローカルコピー機能は、ライトデータをPVOLに書込み、さらに、コピー済みビットマップを「ON」に変更する。そして、ローカルコピー機能が定期的にコピー済みビットマップの値が「ON」の箇所を探し、当該箇所に対応するPVOLのデータを、SVOLへコピーする。
上述したように、ローカルコピー機能は、ホスト100からのIO要求と同期したタイミングで、あるいはIO要求とは独立したタイミングでPVOLからSVOLへデータをコピーする。PVOLとSVOLの担当MPPK210が同一である場合と、PVOLとSVOLの担当MPPK210が異なる場合とで、ローカルコピー機能による処理は異なる。
図13を参照して、本実施例で担当MPPK210の切り替えを行わない場合のPVOLからSVOLへのコピー処理の方法を説明する。図13に示すコピープログラム2230は、IOプログラム2222や、上述したコピー済みビットマップをチェックし、コピー処理を起動するプログラムなどからコールされる。なお、ローカルコピー機能は、ストレージシステム200のプロセッサ211がプログラム部222に格納されているコピープログラム2230を実行することで実現される。また、図13のコピープログラム2230は、PVOLの担当MPPK210で起動され、必要に応じてSVOLの担当MPPK210と通信しながら処理を実行する例であるが、SVOLの担当MPPK210で起動され、必要に応じてPVOLの担当MPPK210と通信しながら処理を実行してもよい。
まず、コピープログラム2230は、担当MPPKテーブル2212を参照することで、PVOLの担当MPPK210が自MPPK210であるか否かをチェックする(S500)。自MPPK210がPVOLの担当MPPK210でないと判定した場合(S500、No)、処理を終了し(S507)、PVOLの担当MPPK210で図13のコピープログラム2230を再起動する。
自MPPK210がPVOLの担当MPPK210であると判定した場合(S500、Yes)、コピープログラム2230は、PVOLのボリュームテーブル2211の使用中ジョブ情報欄22113に、コピープログラムのジョブ番号を登録する(S501)。次に、コピープログラム2230は、担当MPPKテーブル2212を参照することで、SVOLの担当MPPK210が自MPPK210であるか否かをチェックする(S502)。
自MPPK210がSVOLの担当MPPK210であると判定した場合(S502、Yes)、自MPPK210がPVOLとSVOLの両方の担当MPPK210であるため、SVOLのボリュームテーブル2211の使用中ジョブ情報欄22113に、ジョブ番号を登録し(S503)、PVOLからSVOLへデータをコピーする(S504)。コピー完了後、コピープログラム2230は、SVOLと、PVOLの使用中ジョブ情報欄22113からジョブ番号を削除し(S505、S506)、処理を終了する(S507)。
次に、SVOLの担当MPPK210がPVOLの担当MPPK210と異なる場合の処理について説明する。図13のS502で、自MPPK210がSVOLの担当MPPK210でないと判定した場合(S502、No)、コピープログラム2230は、SVOLの担当MPPK210へSVOL側の処理を依頼し、SVOLの担当MPPK210からの応答を待つ(S508)。このとき、コピープログラム2230は、コピーするデータのアドレスをSVOLの担当MPPK210へ通知するものとする。
SVOLの担当MPPK210で動作するコピープログラム2230は、PVOLの担当MPPK210で動作するコピープログラム2230から、SVOL側の処理依頼を受領すると、SVOLのボリュームテーブル2211の使用中ジョブ情報欄22113にジョブ番号を登録し(S510)、PVOLからSVOLへデータをコピーする(S511)。最後に、SVOLの担当MPPK210で動作するコピープログラム2230は、SVOLのボリュームテーブル2211の使用中ジョブ情報欄22113からジョブ番号を削除し(S512)、PVOLの担当MPPK210で動作するコピープログラム2230にコピー処理完了を報告する(S513)。
S508実行後に待機していたPVOLの担当MPPK210で動作するコピープログラム2230は、SVOLの担当MPPK210で動作するコピープログラムからの完了報告を受領すると(S509)、PVOLのボリュームテーブル2211の使用中ジョブ情報欄22113からジョブ番号を削除し(S506)、処理を終了する(S507)。
上述したローカルコピー機能におけるコピー処理の説明からも分るように、PVOLとSVOLの担当MPPK210が異なる場合、図13のS508とS513においてMPPK210間の通信が必要となり、性能が低下する可能性がある。ローカルコピー機能の場合、関連付けられるボリューム250は、PVOLとSVOLの二つのボリューム250であるため、PVOLとSVOLの担当MPPK210をなるべく一致させ、MPPK210間の通信を回避することが望ましい。また、PVOLとSVOLの担当MPPK210を必ず一致させることで、コピープログラム2230におけるS508からS513の処理を省略することも可能である。
次に、本実施例におけるローカルコピー機能が設定されているボリューム250の担当MPPK210を切り替える処理について述べる。
PVOLあるいはSVOLの担当MPPK210を、ローカルコピー機能の設定状況を考慮せずに切り替える場合、以下のような問題が発生する。
PVOL又はSVOLの担当MPPK210のみを切り替えると、PVOLからSVOLへデータをコピーする時は、常に図13のS508からS513の処理が必要となり、MPPK210間の通信が発生してコピー性能が低下してしまう。この問題を回避するためには、PVOLの担当MPPK210を切り替えるときは、SVOLの担当MPPK210も切り替える必要がある。また、同様にSVOLの担当MPPK210を切り替えるときは、PVOLの担当MPPK210も切り替える必要がある。
PVOLとSVOLの両方の担当MPPK210を切り替える場合でも、図13のS501とS502の間で、SVOLの担当MPPK210が切り替えられると、データコピーが一時的に実行不可能となる。このため、ローカルコピー機能の場合、PVOL及びSVOLを使用中のジョブが存在しなくなったとき、PVOLとSVOLの担当MPPK210をまとめて切り替える必要がある。
図14及び図15を参照して、上記問題を回避することができる担当MPPK210の切り替え方法の一例を説明する。具体的にはこの切り替え方法では、ローカルコピーの設定状況をチェックし、ローカルコピーの処理が行われない状況になった後、PVOLとSVOLの担当MPPK210をまとめて切り替える。図14は、図8に示した切り替え開始プログラム2221を変更したプログラムであり、図15は、図10に示した担当切り替え可否チェックプログラム2223を変更したプログラムである。なお、これらプログラムによる処理は、ストレージシステム200のプロセッサ211がプログラム部222に格納されている切り替え開始プログラム2221、担当切り替え可否チェックプログラム2223を実行することで実現される。
切り替え開始プログラム2221のS100及びS101は、図8に示した切り替え開始プログラム2221と同様である。保守端末270から切り替え開始プログラム2221に渡されるパラメータの切り替え対象ボリューム250としてPVOLが指定されている場合、S100及びS101によって、PVOLの担当MPPK210の切り替えが開始される。具体的には、担当MPPKテーブル2212の切り替え中ビット22123をONに変更し、切り替え先MPPK番号欄22124にパラメータとして渡された切り替え先MPPK210のMPPK番号を設定する。そして、FEパッケージ260内の担当MPPKテーブル263の担当MPPK番号2632を、切り替え先MPPK番号22124に変更する。
次に、切り替え開始プログラム2221は、切り替え対象ボリューム250にローカルコピー機能が設定されているか否かを判定する(S103)。具体的には、この処理は、切り替え開始プログラム2221が対象ボリューム250のボリュームテーブル2211に記録されている機能ビット22112を参照することで実現される。
対象ボリューム250にローカルコピー機能が設定されていないと判定した場合(S103、No)、切り替え開始プログラム2221は処理を終了する(S102)。この場合に、図8の切り替え開始プログラム2221と同じ処理となる。
一方、S103で対象ボリューム250にローカルコピー機能が設定されていると判定した場合(S103、Yes)、切り替え開始プログラム2221は、ローカルコピー機能によって関連付けられている相手ボリューム250のボリューム番号22133を得る(S104)。この処理は、ローカルコピーテーブル2213を参照することで実現する。
次に、切り替え開始プログラム2221は、S104で得たボリューム番号22133で特定されるボリューム250の切り替えが開始済みであるか否かをチェックし(S105)、切り替えが開始されていないと判定した場合は(S105、No)、当該ボリューム250の担当MPPK切り替えを開始する(S106)。S106では、S104で特定されたボリューム250に対して、切り替え開始プログラム2221をコールすることで切り替えを開始する。最後に、切り替え開始プログラム2221は処理を終了する(S102)。
以上のように、切り替え開始プログラム2221によってPVOLとSVOLの担当MPPKの切り替え処理が開始される。この場合、PVOLとSVOLの担当MPPK210の切り替え先は同じMPPK210である。
図14の切り替え開始処理では、切り替え開始プログラム2221が起動されたとき、PVOLとSVOLの担当MPPK210が異なる場合でも、PVOLとSVOLの担当MPPK210を同一のMPPK210に切り替える。
切り替え開始プログラム2221が起動されたとき、PVOLとSVOLの担当MPPK210が異なる場合は、指定されたボリューム250(PVOL又はSVOL)の担当MPPK210のみを切り替えてもよい。さらに、PVOLの担当MPPK210を切り替えるとき、SVOLの担当MPPK210も同時に切り替えるか否かを、ローカルコピー機能が設定されているペア毎に変えてもよい。すなわち、ローカルコピーペアに関しては、所定の条件を満たす場合にのみPVOLとSVOLの担当MPPK210を同時に切り替える。この切り替え処理は、例えば、ストレージ管理者が予め保守端末270からPVOLとSVOLの担当を同時に切り替えるか否かを示す情報をローカルコピーテーブル2213に登録しておき、切り替え開始プログラム2221が上記情報を参照することで実現できる。
次に図15を参照して担当切り替え可否チェックプログラム2223を説明する。図15は、担当切り替え可否チェックプログラム2223による処理フローの一例を示している。担当切り替え可否チェックプログラム2223は、IOプログラム2222や監視プログラム(図示せず)からコールされる。
担当切り替え可否チェックプログラム2223は、コール元から通知される対象ボリューム250のボリュームテーブル2211に記録されている使用中ジョブ情報欄22113を参照することで、対象ボリューム250を使用中のジョブが存在するか否かをチェックする(S600)。使用中ジョブが存在すると判定した場合(S600、Yes)、図10と同様に担当切り替え可否チェックプログラム2223は処理を終了する(S612)。
使用中ジョブが存在しないと判定した場合(S600、No)、切り替え可否チェックプログラム2223は、対象ボリューム250を切り替えリストに追加する。切り替えリストは、使用中ジョブが存在しない切り替え対象ボリューム250について、さらに他の条件に照らして切り替え可否を判定するために、一時的に切り替え対象ボリューム250のボリューム番号を保持しておくテーブルであり、例えば担当切り替え可否チェックプログラム2223を実行しているMPPK210のローカルメモリ212に設定される。この時点では、当該ボリューム250にローカルコピー機能などが適用されている可能性があり、切り替えを実施してよいかどうかが判定できないからである。
次に、切り替え可否チェックプログラム2223は、対象ボリューム250にローカルコピー機能が設定されているか否かをチェックする(S602)。そして、ローカルコピー機能が設定されていないと判定した場合(S602、No)、さらに他のストレージ機能が適用されているか否かのチェックを行う(S606、S608)。いずれのストレージ機能も適用されていないと判定した場合は(S606及びS608、No)、図10と同様に担当切り替えプログラム2224をコールし(S611)、処理を終了する(S612)。なお、ローカルコピー機能以外のストレージ機能が適用されているときに実行される処理S606〜S610については後述する。
一方、対象ボリューム250にローカルコピー機能が設定されていると判定した場合(S602、Yes)、担当切り替え可否チェックプログラム2223は、ローカルコピーテーブル2213を参照して、ローカルコピー機能によって関連付けられている相手ボリューム250のボリューム番号22133を得る(S603)。そして、S603で得たボリューム番号22133で特定される相手ボリューム250についてのボリュームテーブル2211の記録を参照することで、相手ボリューム250を使用中のジョブが存在するか否かをチェックする(S604)。
相手ボリューム250を使用中のジョブが存在すると判定した場合(S604、Yes)、担当切り替え可否チェックプログラム2223は処理を終了する(S604)。相手ボリューム250を使用中のジョブが存在しないと判定した場合(S604、No)、担当切り替え可否チェックプログラム2223は、担当切り替えプログラム2224をコールし(S611)、処理を終了する(S612)。すなわち、ローカルコピー機能が設定されているPVOL及びSVOLを使用中のジョブが存在しない場合のみ、担当切り替えプログラム2224をコールし、担当MPPK210を切り替える。S611からコールされる担当切り替えプログラム2224による処理フローは、図11に示した処理フローと同様である。
なお、S600、S604で、PVOL及びSVOLの使用中ジョブが存在しないことを確認した後、コピープログラム2230が動作し、PVOL又はSVOLが使用中となる場合がある。この状態でコピープログラム2230が起動されるのを防止するため、コピープログラムが起動した時点で、PVOLが切り替え中の場合は、切り替え先MPPK210でコピープログラム2230が再起動するように構成する。具体的には、図13のコピープログラム2230のS500とS501の間で、担当MPPKテーブル2212を参照し、PVOLに対応するボリューム番号22121についての切り替え中ビット22123がONの場合は、S507へ進み、切り替え先MPPK番号22124で特定されるMPPK210でコピープログラム2230を再起動する(図示せず)。
以上のように、ローカルコピー機能の設定状況を考慮して、PVOL及びSVOLの担当MPPK210を切り替えることで、ローカルコピー処理の性能低下やローカルコピー処理そのものが動作不可能になる状況を回避することができる。
拡張ボリューム機能
次に、ストレージ機能の一つである拡張ボリューム機能について説明する。ローカルコピー機能に関する説明と同様に、まず拡張ボリューム機能の概要を述べ、担当MPPK210を予め決めるアーキテクチャでの問題点、及びその問題点を解消しうる担当MPPK210の切り替え方法について述べる。
拡張ボリューム機能は、複数個のボリューム250をまとめて一つの大容量のボリューム250としてホスト100に提供する機能である。以下、複数個のボリューム250から構成されるボリューム250を拡張ボリューム、拡張ボリュームを構成するボリューム250を構成ボリュームと呼ぶ。複数個のボリューム250を使用することにより、通常ボリューム250より多くのディスク装置240を記憶領域として使用することができ、大容量のボリューム250を提供できる。ホスト100は、複数のボリューム250を個別に認識するのではなく、一体化された大容量のボリューム250として認識する。
図16は、拡張ボリュームを管理するための拡張ボリュームテーブル2214の一例である。拡張ボリュームテーブル2214は、拡張ボリューム番号欄22141及び構成ボリューム番号欄22142を備える。拡張ボリューム番号欄22141には、ストレージシステム200に設定されている各拡張ボリュームを識別するための識別符号である拡張ボリューム番号が記録される。構成ボリューム番号欄22142には、一つの拡張ボリュームを構成する構成ボリューム250を識別するための識別符号である構成ボリューム番号が記録される。本実施例では、一つの拡張ボリュームを構成する構成ボリューム250のうちのいずれかのボリューム250に付与されている構成ボリューム番号22142を拡張ボリューム番号22141とする。このため、ホスト100からのIO要求は、FEパッケージ260によって、拡張ボリューム番号22141と同一の構成ボリューム番号22142を有するボリューム250の担当MPPK210へ振り分けられる。
図16の1行目に記録されている例では、構成ボリューム番号1,2,3で特定されるの三つの構成ボリューム250(以下、「構成ボリューム1〜構成ボリューム3」)から一の拡張ボリュームが構成されており、その拡張ボリュームの拡張ボリューム番号は1である。したがって、ホスト100からのIO要求は、FEパッケージ260によって、構成ボリューム1の担当MPPK210へ振り分けられる。ホスト100からのIO要求の対象領域が構成ボリューム2に含まれていたとしても、同様にIO要求は構成ボリューム1の担当MPPK210へ振り分けられる。このとき、構成ボリューム2の担当MPPK210と構成ボリューム1の担当MPPK210が異なれば、構成ボリューム1の担当MPPK210は、構成ボリューム2に対するIO要求を処理することはできない。
次に、図17を参照して、拡張ボリュームへ発行されたIO要求の処理について説明する。図17は拡張ボリュームへIO要求が発行されたときに実行されるIOプログラム2222の処理フローの一例である。
IOプログラム2222は、制御情報部221に保持されている各ボリューム250の記憶領域アドレスを参照して、IO対象領域の開始アドレスを含む構成ボリューム250を特定する(S700)。次に、IOプログラム2222は、S700で特定した構成ボリューム250の担当MPPK210が、自MPPK210か否かを判定する(S701)。
担当MPPKが自MPPK210であると判定した場合(S701、Yes)、IOプログラム2222は、ボリュームテーブル2211を参照し、構成ボリューム250についての使用中ジョブ情報欄22113に、当該IO要求が有するジョブ番号を登録する(S702)。次に、IOプログラム2222は、当該構成ボリューム250に対して実行可能な範囲のIOを実行する。具体的には、IOプログラム2222は、IOの終了アドレスが、構成ボリューム250の記憶領域アドレスに含まれるか否かを判定する(S703)。含まれると判定した場合(S703、Yes)、IOプログラム2222はホスト100が指定したIO範囲の末尾までのIOを構成ボリューム250に対して実行し(S707)、ボリュームテーブル2211の使用中ジョブ情報欄22113からジョブ番号を削除する(S708)。これで、IOプログラム2222は処理を終了する(S709)。
一方で、S703において、IOの終了アドレスが、構成ボリューム250に含まれないと判定した場合(S703、No)、すなわち、IO要求のIO範囲が次の構成ボリューム250の記憶領域アドレスを含む場合、IOプログラム2222は、現在処理対象としている構成ボリューム250の末尾までのIOを実行し(S704)、ボリュームテーブル2211の使用中ジョブ情報欄22113からジョブ番号を削除する(S705)。そして、IOプログラム2222は、現在処理対象としている構成ボリューム250の次の構成ボリューム250を処理対象としてS701へ戻る(S706)。S701からS706を繰り返し実行することで、IOを最後まで実行することができる。
S701で構成ボリュームの担当MPPK210が他MPPK210であると判定した場合(S701、No)、IOプログラム2222は、構成ボリューム250の担当MPPK210へIO処理の実行を依頼する(S710)。この依頼を受領した担当MPPK210は、IOプログラム2222のS700からS710を実行することでIOを処理する。
以上の図17の説明からも分るように、構成ボリューム250の担当MPPK210が異なっている場合、IOに同期してMPPK210が通信を行う必要がある。
拡張ボリュームの場合、関連付けられるボリューム250の数は、数十個程度である。それに対して、ストレージシステム200には、数千個以上のボリューム250を作成可能である。よって、拡張ボリューム機能の場合も、ローカルコピー機能と同様に、構成ボリューム250の担当MPPK210は、なるべく一致させ、MPPK210間の通信を回避することが望ましい。構成ボリューム250の担当MPPK210を必ず一致させることで、IOプログラム2222のS701、S710を省略してプログラム構造を簡略化することもできる。
ここで、拡張ボリューム機能が設定されているボリューム250の担当MPPK210を切り替える場合に発生しうる問題について述べる。拡張ボリュームを構成する構成ボリューム250の担当MPPK210を、拡張ボリューム機能の設定状況を考慮せずに切り替えると、以下のような問題が発生するおそれがある。
ローカルコピー機能と同様に、一部の構成ボリューム250のみの担当MPPK210を切り替えると、MPPK210間の通信を伴うS710を実行しなければならなくなり、IO性能が低下する。また、ボリューム1、ボリューム2から構成されている拡張ボリュームに対して、構成ボリューム1、構成ボリューム2の記憶領域アドレスを跨ぐIO要求を受領することがある。このとき以下の様な順序で処理が実行され、S710を実行しなければならなくなったり、IOが実行不可能となったりするおそれがある。
拡張ボリュームの担当MPPK210の切り替えを開始する前に、切り替え元MPPK210が構成ボリューム1、構成ボリューム2を跨ぐIO要求を受領し、構成ボリューム1に対するIOを実行しているときに、拡張ボリュームの担当MPPK210の切り替えが開始される。この時点で、当該IOは、構成ボリューム2を使用していないため、図示しない監視プログラムが構成ボリューム2の担当MPPK210を切り替えてしまう。この場合、IOプログラム2222は、S710を実行することで構成ボリューム2の担当MPPK210にIO処理を依頼しなければならず、IO性能が低下してしまう。さらに、IOプログラム2222に処理S701、S710を設けない場合には、拡張ボリュームに対するIO要求が途中で実行不可能となってしまう。これを回避するため、拡張ボリューム機能では、拡張ボリュームの先頭部分に対応する構成ボリューム250から順に拡張ボリュームの末尾に向かって構成ボリューム250の担当MPPK210を切り替えていく必要がある。
図18と図15とを用いて、上記問題を回避する担当MPPK210の切り替え方法の一例を説明する。図18は、図14に示した切り替え開始プログラム2221の一部を変更したプログラムである。なお、この切り替え開始プログラム2221の処理は、ストレージシステム200のプロセッサ211がプログラム部222に格納されている切り替え開始プログラム2221、及び担当切り替え可否チェックプログラム2223を実行することで実現される。
図18の切り替え開始プログラム2221は、図14の切り替え開始プログラム2221に、S107からS110までの処理を追加したものである。切り替え対象ボリューム250に拡張ボリューム機能が設定されている場合、S108以下の処理が実行される。
切り替え開始プログラム2221は、切り替え対象ボリューム250が拡張ボリュームの構成ボリューム250であるか否かを判定する(S107)。切り替え対象ボリューム250が構成ボリューム250でないと判定した場合(S107、No)、切り替え開始プログラム2221は処理を終了する(S102)。一方で、切り替え対象ボリューム250が構成ボリューム250であると判定した場合(S107、Yes)、切り替え開始プログラム2221は、切り替え対象ボリューム250を含む拡張ボリュームを構成する全構成ボリューム250の情報を取得する(S108)。これは、切り替え開始プログラム2221が拡張ボリュームテーブル2214を参照することで実現する。
次に、切り替え開始プログラム2221は、全ての構成ボリューム250の担当MPPK210の切り替えが開始されているか否かをチェックする(S109)。この処理は、切り替え開始プログラム2221が担当MPPKテーブル2212の切り替え中ビット22123を参照することで実現する。切り替え中でない構成ボリューム250が一つ以上存在する場合(S109、No)、切り替え開始プログラム2221は、S110へ進む。切り替え開始プログラム2221は、切り替え中でない全構成ボリューム250に対して切り替え開始プログラム2221をコールして、切り替えを開始する(S110)。最後に、切り替え開始プログラム2221は処理を終了する(S102)。
図15の担当切り替え可否チェックプログラム2223の処理フローを参照して、拡張ボリュームを構成する各構成ボリューム250の切り替え可否のチェック方法について説明する。切り替え対象ボリューム250が拡張ボリュームを構成する構成ボリューム250の場合、担当切り替え可否チェックプログラム2223は、S607以下の処理を実行する。
担当切り替え可否チェックプログラム2223は、切り替え対象ボリューム250が拡張ボリュームの構成ボリューム250であるか否かをチェックする(S606)。そして、構成ボリュームでないと判定した場合(S606、No)、他のストレージ機能が適用されているか否かのチェックを行う(S608)。いずれのストレージ機能も適用されていないと判定した場合は(S608、No)、図10と同様に担当切り替えプログラム2224をコールし(S611)、処理を終了する(S612)。
一方で、切り替え対象ボリューム250が拡張ボリュームの構成ボリューム250であると判定した場合(S606、Yes)、担当切り替え可否チェックプログラム2223は、切り替え対象ボリューム250が拡張ボリュームの先頭部分に対応する構成ボリューム250であるか、又は切り替え対象ボリューム250より前に位置する別の構成ボリューム250の担当MPPK210が切り替え済みであるか否かの判定を行う(S607)。いずれかの条件を満たすと判定した場合(S607、Yes)、他のストレージ機能が設定されていなければ、担当切り替え可否チェックプログラム2223は、担当切り替えプログラム2224をコールし(S611)、処理を終了する(S612)。
一方で、S607でいずれの条件も満たさないと判定した場合(S607、No)、担当切り替え可否チェックプログラム2223は、処理を終了する(S612)。具体的には、拡張ボリュームが構成ボリューム1,2,3から構成され、切り替え対象ボリューム250が構成ボリューム3であるとき、他の構成ボリューム1,2の担当MPPK210の切り替えが完了しており、かつ、構成ボリューム3を使用中のジョブが存在しなければ、担当切り替えプログラム2224が構成ボリューム3の担当MPPK210を切り替える。また、切り替え対象ボリューム250が構成ボリューム1であるとき、構成ボリューム1を使用中のジョブがなければ、担当切り替えプログラム2224が構成ボリューム1の担当MPPK210を切り替える。S611からコールされる担当切り替えプログラム2224による処理フローは図11と同様である。
以上のように、拡張ボリューム機能の設定状況を考慮して、構成ボリューム250の担当MPPK210を切り替えることで、拡張ボリューム機能におけるIO性能の低下や、IO実行不可能となってしまう状況を回避することができる。
リモートコピー機能
次に、ストレージ機能の一つであるリモートコピー機能について述べる。ローカルコピー機能と同様に、まずリモートコピー機能の概要を述べ、担当MPPK210を予め決めるアーキテクチャでの問題点、及びその問題点を解消する担当MPPK210の切り替え方法について述べる。
リモートコピー機能は、あるストレージシステム200にあるボリューム250に格納されているデータのコピーを、別筐体であるストレージシステム200に作成する機能である。ローカルコピー機能と同様に、コピー元ボリューム250をPVOL、コピー先ボリューム250をSVOLと呼ぶ。リモートコピー機能を用いて、PVOLのデータを別のストレージシステム200にあるSVOLにコピーしておくことで、災害、または、システム障害などによりPVOL側のストレージシステム200が被害を受けた場合にも、SVOLに格納されているデータを用いて業務を継続することが可能となる。
図19には、リモートコピー機能を実現する構成の一例を示している。正ストレージシステム300は、PVOLを有するストレージシステム200であり、副ストレージシステム400は、SVOLを有するストレージシステム200である。
まず、正ストレージシステム300の構成について説明する。PVOL301及びPVOL302は、リモートコピーのコピー元ボリューム250である。ジャーナルボリューム303(以下「JVOL」)は副ストレージシステム400へ転送するためのデータを一時的に格納しておくためのボリューム250である。
次に、副ストレージシステム400の構成について説明する。副ストレージシステム400は、正ストレージシステム300と同様の構成を有する。SVOL401、SVOL402はリモートコピーのコピー先ボリューム250である。JVOL403は正ストレージシステム300から副ストレージシステム400へ転送されたデータを一時的に格納しておくためのボリューム250である。
矢印307は、リモートコピーのペア関係を示している。図19の例では、PVOL301とSVOL401がペアである。すなわちPVOL301のコピーはSVOL401である。そして、PVOL302とSVOL402がペアである。
また、正ストレージシステム300から副ストレージシステム400へ転送するデータを、JVOL303、JVOL403ではなく、キャッシュ部223に一時的に格納するようにしてもよい。
次に、リモートコピーのコピー動作の概要を説明する。コピープログラムは、リモートコピーのPVOLにホスト100からライト要求を受けると、ライトデータとライトデータに対する制御情報から成るジャーナルと呼ばれる転送データを作成し、JVOL303へ格納する。ホスト100のライト要求受け付けを完了した後、ジャーナルをJVOL303から副ストレージシステム400のJVOL403へコピーする。最後に、副ストレージシステム400において、JVOL403からジャーナルを読み出し、ジャーナル内のライトデータをSVOLに書き込む。以上のようにして、コピープログラムは、PVOLのデータをSVOLへコピーする。
矢印304は、PVOL302に対するライト要求を意味している。ジャーナル305は、JVOL303に格納前のジャーナルの様子を示している。そして、ジャーナル308は、正ストレージシステム300から副ストレージシステム400へ転送中のジャーナルの様子を示している。ジャーナル405は、副ストレージシステム400のJVOL403からSVOL402へコピー前のジャーナルの様子を示している。
最後に、リモートコピーグループ306について説明する。リモートコピーグループ406は、リモートコピーグループ306と同様である。
リモートコピーグループ306は、複数のPVOL301,302、及び複数のJVOL303を有する。リモートコピーグループ306の特徴は、ホスト100から同一リモートコピーグループ306内のPVOL301,302に発行されたライト順序どおりに、ライトデータをSVOLに書き込むことである。図19の例で具体的に説明する。
ホスト100からライト要求1がPVOL301に発行され、その後、ライト要求2がPVOL302へ発行されたとする。このとき、副ストレージシステム400では、ライト要求1をSVOL401へ書き込んだ後、ライト要求2をSVOL402へ書き込むように制御される。
以上のように正副リモートコピーグループにおいてライト順序を保証する理由は、ライト順序が入れ替わると、あるPVOLで先に書き込まれたデータが、コピー先であるSVOLに未反映であるなど、SVOLを用いた業務復旧ができない可能性があるためである。
リモートコピー機能は、ライト順序を保証するためにジャーナルに後述するライト順序番号を格納し、副ストレージシステム400へ転送する。そして、副ストレージシステム400は、ジャーナルに格納されているライト順序番号順にライトデータをSVOLに書き込む。
図20は、リモートコピーグループ306、406の管理情報を格納するリモートコピーテーブル2215の一例を示している。リモートコピーテーブル2215は、リモートコピーグループ番号欄22151、属性欄22152、JVOL番号欄22153、PVOL番号欄22154、SVOL番号欄22155、及びライト順序番号欄22156を備える。
リモートコピーグループ番号欄22151には、各リモートコピーグループ306,406を識別するための番号であるリモートコピーグループ番号が記録される。属性欄22152には、リモートコピーグループ番号で特定される各リモートコピーグループ306,406が、コピー元のリモートコピーグループであるか、コピー先のリモートコピーグループであるかを示す情報である属性が記録される。JVOL番号欄22153には、各リモートコピーグループ306,406に設けられているJVOLを識別するためのボリューム番号であるJVOL番号が記録される。PVOL番号欄22154には、各リモートコピーグループ306が有するPVOLのボリューム番号が記録される。SVOL番号欄22155には、各リモートコピーグループ406が有するSVOLのボリューム番号が記録される。ライト順序番号欄22156には、PVOLにデータが書き込まれた順に生成されるジャーナルに付与する番号であるライト順序番号が記録される。ライト順序番号22156は、リモートコピーグループ単位に、PVOLにデータが書き込まれる都度自動発番される。
図20の例では、リモートコピーグループ番号が1であるリモートコピーグループ306は、PVOLを含むコピー元のリモートコピーグループである。そして、このリモートコピーグループ306は、JVOL11,12、及び、PVOL1,2,3を有している。PVOL1,2,3のデータのコピー先となるSVOLが、それぞれSVOL20,12,13である。最後に、ライト順序番号の現在値が100である。すなわち、次に作成されるジャーナルに対して、ライト順序番号100が割り当てられる。その割り当て後、ライト順序番号22156は101へ更新される。
ボリューム250の処理に必要となる制御情報と同様に、リモートコピーテーブル2215も、MPPK210内のローカルメモリ212に格納すれば、PVOLへのライト要求の性能を向上することができる。
しかし、リモートコピーテーブル2215のライト順序番号22156は、ライト要求が発生するたびに参照され、更新される。このため、リモートコピーテーブル2215をローカルメモリ212に格納するためには、リモートコピーテーブル2215のライト順序番号22156へアクセスするMPPK210を一つのMPPK210に限定し、当該MPPK210のローカルメモリ212のみに格納する必要がある。
これを実現するために、リモートコピー機能では、リモートコピーグループ毎にリモートコピーの処理を担当するMPPK210を予め決め、当該MPPK210がリモートコピーテーブル2215を自身のローカルメモリ212に格納する。
ここで、一つのジャーナルを処理する毎にリモートコピーテーブル2215を参照及び更新する処理の例として、ジャーナル作成処理及びジャーナルリストア処理を以下に説明する。
まず、図21を参照して、ジャーナル作成処理フローの一例を説明する。ジャーナル作成処理は、ストレージシステム200のプロセッサ211が、メモリパッケージ220のプログラム部222に格納されているライトデータ受領プログラム及びジャーナル作成プログラム(図示省略)を実行することで行われる。
ストレージシステム200のライトデータ受領プログラムがホスト100からライト要求を受領すると(S1400)、ライト対象のボリューム250に対してライトデータを書き込む(S1401)。続けて、ライトデータ受領プログラムは、ジャーナル作成プログラムを起動する(S1402)。
ジャーナル作成プログラムは、リモートコピーテーブル2215からライト順序番号22156を取得する(S1403)。後続のジャーナル作成に使用するライト順序番号を用意しておくため、ジャーナル作成プログラムは、取得したライト順序番号に1を加えてライト順序番号を更新する(S1404)。
次いで、ジャーナル作成プログラムは、取得したライト順序番号22156、PVOL番号22154、SVOL番号22155、リモートコピーグループ番号22151などのジャーナルに関する制御情報と、ライトデータからジャーナルを作成しJVOLに格納する(S1405)。
ジャーナルの格納によりJVOLの使用率が変わるため、ジャーナル作成プログラムはJVOLの使用率を更新する(S1406)。最後に、ジャーナル作成プログラムは、呼び出し元のライトデータ受領プログラムへ完了報告する(S1407)。完了報告を受領したライトデータ受領プログラム231は処理を終了する(S1408)。
次に、図22を参照して、PVOL側から転送されてきたジャーナルをJVOLからSVOLへ書き込む処理の一例を説明する。ジャーナルをJVOLからSVOLへ書き込む処理をリストア処理と呼ぶ。このリストア処理は、ストレージシステム200のプロセッサ211が、メモリパッケージ220のプログラム部222に格納されているリストアプログラム(図示省略)を実行することで行われる。
まず、リストアプログラムは、リストア対象のジャーナルを決定する(S1500)。
但し、リストア対象のジャーナルは、JVOLに格納されているジャーナルのうち、最も古いジャーナルからライト順序番号が連続するように決定する。例えば、ライト順序番号1から1000までのジャーナルがある場合、ライト順序番号1から100までのジャーナルをリストア対象とすることは可能である。しかし、ライト順序番号50から100までをリストア対象とすることはできない。また、ライト順序番号1から30までと、ライト順序番号50から70までのジャーナルをリストア対象とすることもできない。これは、ホスト100からPVOLに書き込まれたデータを、ライト順序番号22156どおりにSVOLに書き込むことで、SVOLの状態を常に、PVOLで過去に起こり得た状態に保つためである。これにより、PVOLに障害が発生した場合、SVOLを利用した業務処理の再開が可能となる。
次に、リストアプログラムは、リストア対象に決定したジャーナルのライト順序番号22156のうちの最小値を変数iに代入する(S1501)。なお、変数iは、MPPK210のローカルメモリ212に一時的に格納するものとする。リストアプログラムは、ライト順序番号順にジャーナルを参照し、当該ジャーナルがリストア対象か否かをチェックする(S1502)。リストア対象でないと判定した場合(S1502、No)、リストア処理を終了する(S1510)。
S1502でリストア対象であると判定した場合(S1502、Yes)、リストアプログラムは、リストア対象と判定したジャーナルをリストアする処理(S1503〜S1506)を実行する。
まず、リストアプログラムは、参照したジャーナルの適用先SVOLを決定する(S1503)。あるPVOLへのライトに対して作成されたジャーナルは、当該PVOLとリモートコピー機能のペア関係にあるSVOLにリストアする必要がある。リストアプログラムは、ジャーナル作成時にジャーナルに格納したSVOL番号22155を用いてジャーナルの適用先SVOLを決定する。
ジャーナルの適用先SVOLを決定すると、リストアプログラムは、ジャーナルをSVOLに書き込み(S1504)、リストア済みライト順序番号22156を、適用したジャーナルのライト順序番号22156で置き換える(S1505)。最後に、リストアプログラムは、変数iに1を加えて(S1506)、次のジャーナルを処理するためS1502へ返る。
以上の構成により、リモートコピー機能が設定されているPVOLへのライトデータが、PVOLに書き込まれた順序を保持したままSVOLにコピーされる。なお、このように構成されたリモートコピーグループは、一般にコンシステンシーグループ(consistency group)と呼ばれる。
図23に、リモートコピーグループの処理担当MPPK210を管理するリモートコピーグループ用担当MPPKテーブル2216(以下簡単のため「担当MPPKテーブル2216」と称する。)の一例を示している。担当MPPKテーブル2216は、リモートコピーグループ番号欄22161、及び担当MPPK番号欄22162を備える。
リモートコピーグループ番号欄22161には、各リモートコピーグループ306,406を識別するための識別番号であるリモートコピーグループ番号22161が記録される。担当MPPK番号欄22162には、図6に示した担当MPPKテーブル2212の場合と同じ担当MPPK番号22162が記録される。
次に、ローカルコピー機能、拡張ボリューム機能と同様に、リモートコピー機能のPVOL、JVOL、SVOL、及びリモートコピーグループの担当MPPKをどのように設定すれば最適であるかについて説明する。
まず、正ストレージシステム300におけるリモートコピーの処理について説明する。リモートコピー機能は、ホスト100からPVOLへのライト要求を受領すると、そのライト要求に係るデータをPVOLに書き込むと共に、ジャーナルを作成し、JVOLに格納する。PVOLの担当MPPK210とリモートコピーグループの担当MPPK210が異なる場合、PVOLの担当MPPK210はリモートコピーグループの担当MPPK210へジャーナル作成処理を依頼する必要がある。このとき、PVOLの担当MPPK210とリモートコピーグループの担当MPPK210との間での通信が必要となる。
次に、リモートコピーグループの担当MPPK210が作成したジャーナルをJVOLに格納する。リモートコピーグループの担当MPPK210とJVOLの担当MPPK210が異なる場合、リモートコピーグループの担当MPPK210はJVOLの担当MPPK210へジャーナル格納処理を依頼する必要がある。このとき、リモートコピーグループの担当MPPK210とJVOLの担当MPPK210との間での通信が必要となる。
最後に、JVOLに格納されたジャーナルを副ストレージシステム400へ転送する。具体的には、リモートコピー機能を実現するコピープログラムによってリモートコピーグループの担当MPPK210が、転送すべきジャーナルの決定や、決定したジャーナルが格納されているJVOLの格納アドレスなどを取得し、ジャーナルを転送する。このため、リモートコピーグループの担当MPPK210とJVOLの担当MPPK210が異なる場合、リモートコピーグループの担当MPPK210は、転送ジャーナルの特定や、格納アドレスを決定した後、JVOLの担当MPPK210へ副ストレージシステム400への転送を依頼する必要がある。このとき、リモートコピーグループの担当MPPK210とJVOLの担当MPPK210との間での通信が必要となる。
以上のようにして、正ストレージシステム300では、ジャーナルを作成するために、最大2往復のMPPK210間の通信、作成したジャーナルを転送するために1往復のMPPK210間の通信が必要となる。
ここで、リモートコピー機能におけるPVOL、JVOLの担当MPPK210をどのように決定すれば最適であるかについて説明する。前記のように、JVOLは、PVOLからSVOLへの転送データを一時的に格納するためのボリューム250である。このため、一つのリモートコピーグループが有するJVOLの数は、数個から十数個程度である。よって、リモートコピーグループとJVOLの担当MPPK210は、なるべく一致させ、MPPK210間の通信を回避することが望ましい。
一方で、一つのリモートコピーグループが有するPVOLの数は、数百から数千個である。PVOLとリモートコピーグループの担当MPPK210を同一とした場合、ライト要求に伴うジャーナル作成処理だけでなく、PVOLへのリード処理も一つのMPPK210で処理しなければならなくなってしまう。このように、一つのMPPK210に処理負荷が集中するのを防止するため、PVOLとリモートコピーグループの担当MPPK210は、同一化しないほうが望ましい。
次に、副ストレージシステム400におけるリモートコピーの処理について説明する。副ストレージシステム400では、正ストレージシステム300から転送され、JVOLに格納されているジャーナル内のライトデータをSVOLに書き込む。
まず、副ストレージシステム400のコピープログラムにより、JVOLに格納されているジャーナルのうち、最も小さいライト順序番号22156を有するジャーナルが検索される。そして、当該ジャーナルのライト順序番号22156が、前回SVOLに書き込んだジャーナルのライト順序番号22156の次の番号であるか否かを判定する。検索して取得されたジャーナルのライト順序番号22156が前回SVOLに書き込んだジャーナルのライト順序番号22156の次の番号であれば、リモートコピープログラムは、ローカルコピープログラムを起動し、JVOLからSVOLへのコピーを指示する。
この際、リモートコピーグループの担当MPPK210とJVOLの担当MPPK210が異なる場合、コピープログラムをJVOLの担当MPPK210で起動する必要がある。このとき、リモートコピーグループの担当MPPK210とJVOLの担当MPPK210との間での通信が必要となる。
また、JVOLの担当MPPK210とSVOLの担当MPPK210が異なる場合、ローカルコピー処理のSVOL側処理をSVOLの担当MPPK210へ依頼する必要がある。このとき、JVOLの担当MPPK210とSVOLの担当MPPK210との間での通信が必要となる。
以上のようにして、副ストレージシステム400でジャーナルをSVOLに書き込むために、最大2往復のMPPK210間通信が必要となる。
ここで、リモートコピー機能のSVOL、JVOLの担当MPPK210をどのように決定すれば最適であるかについて説明する。JVOLの処理は、正ストレージシステム300側と同様の理由でリモートコピーグループの担当MPPK210が担当することが望ましい。
一方、一つのリモートコピーグループが有するSVOLの数は、PVOLと同様に、数百から数千個である。しかしながら、SVOLは災害時などに業務復旧用として用いるボリューム250であるため、正常運用中においてはPVOLのようにホスト100からのライト及びリード要求は発生しない。このため、PVOLのようにリード要求の負荷分散を考慮する必要がない。よって、リモートコピーグループとSVOLの担当MPPK210は、なるべく一致させ、MPPK210間の通信を回避することが望ましい。
次に、リモートコピーグループの担当MPPK210、リモートコピー機能が設定されているボリューム250の担当MPPK210の切り替えによって発生する問題について説明する。リモートコピーグループの担当MPPK210及びリモートコピー機能が設定されているボリューム250の担当MPPK210を、リモートコピー機能の設定状況を考慮せずに切り替える場合、以下のような問題が発生するおそれがある。
なお、PVOLの担当MPPK210と、リモートコピーグループの担当MPPK210が異なる場合のJNL作成処理は、図21のステップS1400からS1402およびS1408をPVOLの担当MPPK210が実行し、ステップS1403からS1407をリモートコピーグループの担当MPPK210が実行することで実現される。この場合、ステップS1402はMPPK間通信を行い、リモートコピーグループの担当MPPK210で、ジャーナル作成プログラムを起動するものとする。
まず、正ストレージシステム300における問題を説明する。リモートコピーグループの担当MPPK210を切り替える場合は、前記したように、JVOLの担当MPPK210も切り替えなければ、ジャーナルを格納するためにMPPK210間の通信が必要になりIO性能が低下してしまう。また、リモートコピーグループの担当MPPK210と、JVOLの担当MPPK210の両方を切り替える場合でも、リモートコピーグループの担当MPPK210よりも先に、JVOLの担当MPPK210を切り替えると、ジャーナルをJVOLに格納するためにMPPK210間の通信が必要になりIO性能が低下してしまう。さらに、リモートコピーグループとJVOLの担当MPPK210を必ず一致させることを前提として、ジャーナルをJVOLに格納するためのMPPK210間通信機能を実装しない場合は、リモートコピー機能のIO処理が途中で実行不可能となってしまう。
以下、前記問題点をより具体的に説明する。以下の説明では、リモートコピーグループの担当MPPK210とJVOLの担当MPPK210を、MPPK1からMPPK2へ切り替えるケースを前提とする。JVOLについては、JVOLの使用中ジョブ情報欄22113にジョブ番号が設定されていなければ、担当MPPK210が切り替えられる可能性がある。この場合、MPPK1には、ジャーナルを作成し、作成したジャーナルを格納する直前の処理が存在する可能性があるが、JVOLの担当MPPK210は、MPPK1からMPPK2へ切り替えられており、このMPPK1での処理は継続不可能となる。一方で、切り替え先であるMPPK2へ依頼されるジャーナル作成処理は、JVOLの担当MPPK210が、いずれMPPK2へ切り替えられることがわかるため、切り替え待ちを行うことができる。
次に、副ストレージシステム400における問題を説明する。副ストレージシステム400でも正ストレージシステム300と同様に、リモートコピーグループの担当MPPK210を切り替える場合は、JVOL及びSVOLの担当MPPK210も切り替えなければ、ジャーナルをJVOLから読み出す処理、ジャーナルをSVOLに書き込む処理においてMPPK210間の通信が必要になり性能が低下してしまう。また、リモートコピーグループの担当MPPK210よりも先に、JVOL又はSVOLの担当MPPK210を切り替える場合、JVOLからSVOLへのコピー処理が途中で実行不可能となってしまう可能性がある。
上述した問題を回避するため、リモートコピー機能は、実行中の処理(ジャーナル作成、ジャーナルのJVOLへの格納、及びJVOLからSVOLへのコピー処理)を完了してから、リモートコピーグループの担当MPPK210を切り替える。そして、リモートコピーグループの担当MPPK210を切り替えた後に、JVOL及びSVOLの担当MPPK210の切り替えを行う。これにより、上述した問題を回避することができる。
次に、図24及び図25を参照して、上記問題を回避することができる担当MPPK210の切り替え方法の一例を説明する。図24は、図18に示した切り替え開始プログラム2221を一部変更したプログラムである。図25は、リモートコピーグループの担当MPPK210を切り替えるリモートコピープログラムの処理の一例である。なお、このリモートコピープログラムの処理は、ストレージシステム200のプロセッサ211が、メモリパッケージ220のプログラム部222に格納されている切り替え開始プログラム2221、及びリモートコピープログラムを実行することで実現される。本実施例では、リモートコピープログラムは図2のコピープログラム2230の一部として実装されているものとするが、特にこのような構成に限定されるものではない。
図24の切り替え開始プログラム2221は、図18の切り替え開始プログラム2221に、S111からS114までの処理を追加したものである。切り替え対象資源がリモートコピーグループ、リモートコピー機能のSVOL、又はJVOLの場合、S112からS114が実行される。切り替え対象資源がPVOL又はリモートコピーグループの場合、S100、S101の実行によって、担当MPPK210の切り替えは開始される。なお、切り替え対象資源がリモートコピーグループの場合、S112からS114までの処理も実行される。
図24の切り替え開始プログラム2221におけるS111からS114までの処理について説明する。切り替え開始プログラム2221は、切り替え対象資源が、リモートコピーグループ、リモートコピーのSVOL、又は、JVOLであるか否かを判定する(S111)。切り替え対象資源がリモートコピーグループ、リモートコピー機能のSVOL、及びJVOLのいずれでもないと判定した場合(S111、No)、切り替え開始プログラム2221は処理を終了する(S102)。
S111で切り替え対象資源がリモートコピーグループやリモートコピーのSVOL、又は、JVOLであると判定した場合(S111、Yes)、切り替え開始プログラム2221は、切り替え対象資源に係るリモートコピーグループ、SVOL、又はJVOLの情報を取得する(S112)。この処理は、切り替え開始プログラム2221がリモートコピーテーブル2215、ボリュームテーブル2211を参照することによって実現する。
次に、切り替え開始プログラム2221は、S112で取得した資源のうち、担当MPPK210の切り替えが開始していない資源が存在するか否かをチェックする(S113)。この処理は、切り替え開始プログラム2221が担当MPPKテーブル2212、2216の切り替え中ビット22123,22153を参照することで実現する。切り替え中でない資源(JVOL、SVOL、又はリモートコピーグループ)が一つ以上存在すると判定した場合(S113、Yes)、切り替え開始プログラム2221は、S114へ進む。切り替え開始プログラム2221は、切り替え中でない全ての資源に対して切り替え開始プログラム2221をコールして、切り替え処理を開始する(S114)。最後に、切り替え開始プログラム2221は処理を終了する(S102)。
図25に示すリモートコピープログラムの処理は、リモートコピー処理中にリモートコピーグループの担当MPPK210が切り替え中になったことを検出し、切り替え元MPPK210のリモートコピー処理を終了し、切り替えを実行する処理である。リモートコピープログラムは、リモートコピーグループ単位に起動されており、ジャーナルを正ストレージシステム300から副ストレージシステム400へ転送する処理、転送済みのジャーナルを正ストレージシステム300のJVOLから削除する処理、副ストレージシステム400でJVOLからSVOLへの書込みをコピープログラムに指示するリモートコピー処理などを実行する。
リモートコピープログラムは、担当MPPKテーブル2216を参照し、担当するリモートコピーグループの担当MPPK210の情報を取得し(S800)、担当MPPKテーブル2216の切り替え中ビット22163がONであるか否かを判定する(S801)。切り替え中ビットがOFFであると判定した場合(S801、No)、リモートコピープログラムは、リモートコピー処理(転送データの送信や、JVOLからSVOLへの書込みの指示など)を実行し(S808)、S800へ戻る。
切り替え中ビットがONであると判定した場合(S801、Yes)、リモートコピープログラムは、切り替え先MPPK210が自MPPK210であるか否かを判定する(S802)。自MPPK210が切り替え先であと判定した場合(S802、Yes)、リモートコピープログラムの処理はS807へ進み、リモートコピーグループの担当MPPK210が切り替わるのを待つ(S807)。リモートコピーグループの担当MPPK210の切り替えが完了すると、リモートコピープログラムはS807からS808へ進み、前記のリモートコピー処理を実行する。
一方で、S802において、切り替え先は自MPPK210でないと判定した場合(S802、No)、リモートコピープログラムは、切り替え元MPPK210で実行中の処理を終了し、担当MPPK210を切り替える。具体的には、リモートコピープログラムは、リモートコピー処理を実行している他のプログラムへ処理終了を要求する(S803)。他のプログラムとは、リモートコピープログラムから指示を受けてJVOLからSVOLへデータを書き込んでいるコピープログラムや、転送済みジャーナルを正ストレージシステム300のJVOLから削除しているプログラムなどである。これらのプログラムは、リモートコピープログラムから処理終了の要求を受領すると、実行途中であった処理を完結し、処理を終了する。
リモートコピープログラムは、リモートコピー処理を実行している他のプログラムの処理終了を監視する(S804)。この監視処理は、処理を終了する他のプログラムが処理を終了する直前に、処理を終了したことを制御情報としてローカルメモリ212や制御情報部221に書込み、リモートコピープログラムが書き込まれた制御情報をS804で参照することなどにより実現できる。
次いで、リモートコピープログラムは、他のプログラムによるリモートコピー処理が終了したか判定する(S804)。終了したと判定した場合(S804、Yes)、リモートコピープログラムは、担当切り替えプログラム2224をコールし(S805)、処理を終了する(S806)。その後、リモートコピープログラムは、リモートコピーグループの新しい担当MPPK210において再起動するものとする。
図25に示したリモートコピープログラムのS805からコールされる担当切り替えプログラム2224による処理フローは、図11と同様である。
図11のS400で、リモートコピーテーブル2215がローカルメモリ212からメモリパッケージ220の制御情報部221へ書き出される。そして、S401でリモートコピーグループの担当MPPK210が切り替えられる。具体的には、担当切り替えプログラム2224は、担当MPPKテーブル2216の担当MPPK番号22162を新しい担当MPPK210のMPPK番号22162に変更し、切り替え中ビット22163をONからOFFへ変更し、切り替え先MPPK番号22164を、切り替え先MPPK210が存在しないことを意味する「−」へ変更する。
複数のストレージ機能の適用
同一のボリューム250に対して、複数のストレージ機能を適用することができる。例えば、あるボリューム250がリモートコピー機能のSVOLであり、かつ、ローカルコピー機能のPVOLでもある場合がある。このように、同一のボリューム250に複数のストレージ機能が適用されている場合にも、本実施例を適用することができる。すなわち、図24に示した切り替え開始プログラム2221や、図15に示した切り替え可否チェックプログラム2223は、同一ボリューム250に複数のストレージ機能が適用されている場合にも対応できるように考慮されている。
あるボリューム250がリモートコピー機能のSVOLであり、かつ、ローカルコピー機能のPVOLである場合の本実施例の構成について、図24、及び図15を参照して説明する。
切り替え対象ボリューム250としてリモートコピー機能のSVOLに設定されているボリューム250が指定され、図24の切り替え開始プログラム2221がコールされた場合、切り替え開始プログラム2221のS100において、指定されたリモートコピー機能のSVOL及びローカルコピー機能のPVOLの切り替えが開始され、S106において、ローカルコピー機能のSVOLの切り替えが開始される。そして、S111からS114において、指定されたリモートコピー機能のSVOLが属するリモートコピーグループに設けられているJVOL、及び他のSVOLの切り替えが開始される。よって、関連する全ボリューム250の切り替えが正しく開始される。
また、切り替え対象ボリューム250としてローカルコピー機能のSVOLが設定されているボリューム250が指定され、図24の切り替え開始プログラム2221がコールされた場合、切り替え開始プログラム2221のS106で、切り替え開始プログラム2221をコールすることで、ローカルコピー機能のPVOLの切り替えが開始される。
指定ボリューム250がローカルコピー機能のPVOL、かつリモートコピー機能のSVOLであることから、ローカルコピー機能のPVOLを指定してコールされた切り替え開始プログラム2221は、S111からS114において、リモートコピー機能のSVOLが属するリモートコピーグループに設けられているJVOL、及び他のSVOLの切り替えを開始する。よって、関連する全ボリューム250の切り替えが正しく開始される。
次に、図15を参照して、担当切り替え可否チェックプログラム2223の処理フローについて説明する。図15のS602〜S604はローカルコピー機能の切り替え可否チェック条件であり、S608〜S610がリモートコピー機能の切り替え可否チェック条件である。これら切り替え可否チェック条件のチェック対象となっているボリューム250が、リモートコピー機能のSVOL、かつローカルコピー機能のPVOLである場合について説明する。
まず、担当切り替え可否チェックプログラム2223は、S604でローカルコピー機能の担当切り替え可否チェック条件をチェックする。条件を満たす場合(S604、No)、担当切り替え可否チェックプログラム2223は、S605を経てS608へ進む。担当切り替え可否チェック条件のチェック対象となっているボリューム250は、リモートコピー機能のSVOLでもあるためである。担当切り替え可否チェックプログラム2223は、S608からS610でリモートコピーの切り替え可否チェック条件をチェックする。条件を満たさない場合(S610、No)、担当切り替え可否チェックプログラム2223は処理を終了する。すなわち、ローカルコピー機能のチェック条件を満たしても、リモートコピー機能のチェック条件が満たされていないため、担当の切り替えは行わない。
以上のように、同一ボリューム250に複数のストレージ機能が適用されている場合、それら複数のストレージ機能の担当MPPK切り替え条件をすべて満たす場合にのみ担当MPPKを切り替えることができる。
[実施例2]
次に、本発明を実施するための実施例2について説明する。実施例1では、ボリューム250へのストレージ機能の設定を考慮して、担当MPPK210を切り替える処理方式について説明した。本実施例では、各MPPK210の負荷に偏りが発生したとき、ストレージ機能の設定状況、及びストレージ機能の処理負荷を考慮することで、より高精度の負荷分散の実現方法について説明する。
まず、ストレージ機能の処理負荷を考慮した負荷分散について説明する。ホスト100からストレージシステム200に発行されるIO要求の量の変化などにより、MPPK210間で処理負荷に偏りが生じる可能性がある。このとき、MPPK210間で負荷を均等に配分するために、負荷の高いMPPK210が処理を担当している資源(ボリューム250、リモートコピーグループ)の担当MPPK210を、負荷の低いMPPK210へ切り替えることで、特定MPPK210に負荷が集中するのを防ぐことができる。
ホスト100からIO要求がほとんど発行されていないボリューム250の担当MPPK210を切り替えても、他のMPPK210の負荷はあまり影響を受けない。このため、担当MPPK210の切り替えによって、MPPK210間の負荷ができるだけ均等になるように、担当MPPK210を切り替える対象となる資源を選択する必要がある。
次に、本実施例における各MPPK210の負荷の計算方法について説明する。ボリューム250についての負荷の計算は、例えば、ストレージ機能が適用されていない通常ボリューム250の場合、「当該ボリューム250へのライト数×ライト処理コスト+当該ボリューム250へのリード数×リード処理コスト」で表される計算式によって行うことができる。また、現在の負荷を正しく表現するために、当該ボリューム250へのライト数は、ボリューム250作成時点からの合計ライト数ではなく、直近1秒間のライト数などとすればよい。
また、対象ボリューム250にストレージ機能が適用されている場合、前記負荷の計算には、そのストレージ機能特有の処理の負荷も考慮する必要がある。具体的には、ストレージ機能特有の処理の負荷は、例えばローカルコピー機能においては、PVOLからSVOLへのコピー処理の負荷、リモートコピー機能においては、転送データをJVOLから削除する処理の負荷を含む。
なお、一つのMPPK210の合計負荷は、当該MPPK210が担当する全ボリューム250、及び全リモートコピーグループの合計負荷で計算する。
以下、ボリューム250のストレージ機能の設定状況、及びストレージ機能の処理負荷を考慮した担当MPPK210の切り替えによる負荷分散処理に必要となる、MPPK210間での負荷の偏りの検出方法、各MPPK210の負荷の計算方法、及びそれらの処理に必要となる制御情報について説明する。なお、ホスト100及びストレージシステム200を含む情報処理システム1のの構成は、実施例1と同じである。
まず、図26、図27、及び図28を参照して、各MPPK210の負荷の偏りを検出する処理について説明する。図26は、MPPK210のプロセッサ211の使用率を管理するMPPK使用率テーブル2217の一例である。図27は、MPPK210で実行される各種処理の処理コスト(後述)を管理するための処理コストテーブル2218の一例である。図28は、各MPPK210の使用率をチェックし負荷が偏っているか否かを判定するためのモニタプログラム2225の処理フローの一例である。
MPPK使用率テーブル2217は、MPPK番号欄22171と使用率欄22172とを備える。MPPK番号欄22171には、各MPPK210を識別するための識別符号であるMPPK番号が記録される。使用率欄22172には、MPPK番号22171で特定される各MPPK210の使用率が百分率で記録される。本実施例では、MPPK210の現在の使用率を表現するために、例えば後述するモニタプログラム2225によって各MPPK210から直近1秒間の使用率を取得し、これを適時に使用率欄22172に記録するものとしている。
処理コストテーブル2218は、処理種別欄22181と処理コスト欄22182とを備える。処理種別欄22181には、MPPK210で実行される処理の種類を表す処理種別が記録される。本実施例では、図示のように、処理種別欄22181に、通常ボリュームリード、通常ボリュームライト、拡張ボリュームのリード、拡張ボリュームのライト、ローカルコピーのPVOLリード、ローカルコピーのPVOLライト、ローカルコピーのPVOL側のコピー処理、ローカルコピーのSVOL側のコピー処理、リモートコピーのPVOLリード、リモートコピーのPVOLライト、リモートコピーのSVOLリード、リモートコピーのSVOLライト、リモートコピーのジャーナル作成処理、リモートコピーのジャーナル転送処理(コピー元)、リモートコピーのジャーナル削除処理、リモートコピーのジャーナル転送処理(コピー先)、リモートコピーの書込みジャーナル決定処理、リモートコピーのジャーナル書き込み処理を記録している。これらの処理種別は網羅的なものではなく、システム条件等に応じて適宜種別を追加、削除してよい。
処理コスト欄22182には、処理種別欄22181に記録された各処理を実行するためにプロセッサ211を使用する時間である処理コストが記録される。図27の例では、通常ボリューム250のリード処理を実行するためには、MPPK210のプロセッサ211を10マイクロ秒使用することを表している。なお、通常ボリューム250は、ストレージ機能が適用されていないボリューム250を意味する。処理コスト22182は、予め保守端末270などからストレージシステム200に登録してもよいし、ストレージシステム200内のモニタプログラムが各処理実行時の処理時間を実測して設定してもよい。
図28は、MPPK210間での負荷の偏りを検出し、担当MPPK210を切り替える資源を決定するためのモニタプログラム2225の処理の一例である。なお、このモニタプログラム2225の処理は、ストレージシステム200のプロセッサ211が、メモリパッケージ220のプログラム部222に格納されているモニタプログラム2225を実行することで実現される。
まず、モニタプログラム2225は、MPPK使用率テーブル2217を参照することで、各MPPK210の使用率22172を取得する(S900)。そして、モニタプログラム2225は、使用率22172が最も高いMPPK210と、使用率22172が最も低いMPPK210の使用率の差が所定の閾値以上であるか否かを判定する(S901)。使用率22172の差が閾値より小であると判定した場合(S901、No)、MPPK210間での負荷分散処理は不要であると判定し、S900へ戻る。
一方で、使用率22172の差が閾値以上であると判定した場合(S901、Yes)、使用率22172が最も高いMPPK210が処理を担当している資源の担当MPPK210を、使用率22172が最も低いMPPK210へ切り替えることで負荷を分散する。
このMPPK210間での負荷分散のために、担当MPPK210を切り替える資源を決定するための処理について説明する。
まず、モニタプログラム2225は、使用率22172が最も高いMPPK210の現在の合計負荷と、使用率22172が最も低いMPPK210の現在の負荷の合計を計算する(S902、S903)。負荷の計算は、後述の負荷計算プログラム2226によって実現される。
次に、モニタプログラム2225は、各MPPK210の負荷を均等にするために、どの程度の負荷を有する資源の担当MPPK210を切り替えるべきかを決定する(S904)。
例えば、モニタプログラム2225は、「(切り替え元MPPK210の合計負荷−切り替え先MPPK210の負荷)÷2」の負荷を有する資源の担当MPPK210を切り替えるように構成することができる。また、切り替え元MPPK210の合計負荷、切り替え先MPPK210の合計負荷だけでなく、それ以外のMPPK210の合計負荷も考慮してもよい。例えば、全てのMPPK210の平均負荷を計算し、「切り替え元MPPK210の合計負荷−平均負荷」の負荷を有する資源の担当MPPK210を切り替えるようにモニタプログラム2225を構成してもよい。
次に、担当MPPK210を切り替え元MPPK210から切り替え先MPPK210に切り替える対象となる資源の選択方法について説明する。
ここでは、モニタプログラム2225が、S904での計算によって求められる負荷の値を有する資源を選択する。S904の計算結果の値と等しくなる負荷を有する資源がないと判定された場合は、計算結果の値を超えない最大の負荷を有する資源を選択するものとする。また、負荷の合計が上記計算結果となる複数個の資源を求め、それらを切り替え対象としてもよい。
ストレージ機能によって、資源の担当MPPK210が同一化されている場合、例えば、ローカルコピーのPVOLとSVOLの担当MPPK210が同一MPPK210である場合は、PVOLとSVOLの担当MPPK210を一括して切り替えるため、本実施例ではPVOLとSVOLの合計負荷を一つの切り替え単位として扱うものとする。本実施例では、切り替え単位毎の負荷は、後述する負荷計算プログラム2226が算出してリスト化するものとする。
最後に、モニタプログラム2225は、S904で決定した資源の担当MPPK210の切り替えを開始する(S905)。S905で、モニタプログラム2225は、図24に示した切り替え開始プログラム2221をコールする。
次に、図29〜図32を参照して、モニタプログラム2225のS902、S903からコールされる負荷計算プログラム2226について説明する。
図29は、負荷計算プログラム2226の処理フローの一例を、図30は拡張ボリューム負荷計算プログラム2227の処理フローの一例を、図31はローカルコピー負荷計算プログラム2228の処理フローの一例を、図32はリモートコピー負荷計算プログラム2229の処理フローの一例を示している。なお、これらのプログラムによる処理は、ストレージシステム200のプロセッサ211が、メモリパッケージ220のプログラム部222に格納されている負荷計算プログラム2226、拡張ボリューム負荷計算プログラム2227、ローカルコピー負荷計算プログラム2228、及びリモートコピー負荷計算プログラム2229を実行することで実現される。
最初に、負荷計算プログラム2226は、自MPPK210が担当する通常ボリューム250をリストアップする(S1000)。この処理は、ボリュームテーブル2211から機能ビット22112が「−」であるボリューム250を検索し、担当MPPKテーブル2212を参照して当該ボリューム250の担当MPPK210が自MPPK210であるかを判定することで実現する。
負荷計算プログラム2226は、リストアップした各通常ボリューム250に対して、S1001からS1004までの処理を実行し、合計負荷を計算する。負荷計算プログラム2226は、負荷計算の対象となるボリューム250を一つ決める(S1001)。そして、当該ボリューム250の負荷を計算し、合計負荷に加算する(S1002)。この負荷計算処理は、前記のように、ボリュームテーブル2211のライト数22114、リード数22115、処理コストテーブル2218の通常ボリュームリードの処理コスト、及び通常ボリュームライトの処理コストの値を用いて実行することができる。
次に、負荷計算プログラム2226は、担当MPPK210の切り替え単位となるボリューム250毎の負荷をリストとして作成するため、S1001で決定したボリューム250の負荷をリストに追加する(S1003)。このリストは、モニタプログラム2225のS904が、どの資源の担当MPPK210を切り替えるかを決定するために利用される。
次に、負荷計算プログラム2226は、S1000で、リストアップした全通常ボリューム250の計算が完了したか否かを判定する(S1004)。未だ全通常ボリューム250の計算が完了していない場合、負荷計算プログラム2226はS1001へ戻ることで、負荷の計算を行っていない別のボリューム250の負荷を計算する。
一方で、全ての通常ボリューム250の計算が完了している場合、負荷計算プログラム2226は、拡張ボリュームの負荷、ローカルコピーの負荷、リモートコピーの負荷を計算するためにS1005からS1007までの処理を実行した後、処理を終了する(S1008)。
次に、図30を参照して、負荷計算プログラム2226からコールされる拡張ボリューム負荷計算プログラム2227について説明する。
拡張ボリューム負荷計算プログラム2227は、少なくとも一つの構成ボリューム250を自MPPK210が担当している拡張ボリュームをリストアップする(S1100)。この処理は、拡張ボリューム負荷計算プログラム2227が、拡張ボリュームテーブル2214及び担当MPPKテーブル2212を参照することで実現する。
拡張ボリューム負荷計算プログラム2227は、リストアップした拡張ボリュームに対して、S1101からS1105までの処理を実行し、合計負荷を計算する。拡張ボリューム負荷計算プログラム2227は、負荷計算の対象となる拡張ボリュームを一つ決める(S1101)。続けて、当該拡張ボリュームを構成する構成ボリューム250を一つ決める(S1102)。そして、当該ボリューム250の担当MPPK210が自MPPK210である場合に、当該ボリューム250の負荷を計算し、合計負荷に加算する(S1103、S1104)。この負荷計算処理は、ボリュームテーブル2211のライト数、リード数、処理コストテーブル2218の拡張ボリュームリードの処理コスト、拡張ボリュームライトの処理コストの値を用いて実行することができる。
次に、拡張ボリューム負荷計算プログラム2227は、S1105で、S1101で決めた拡張ボリュームを構成する全構成ボリューム250についての計算が完了したか否かを判定する(S1105)。未だ全構成ボリュームについての計算が完了していないと判定した場合(S1105、No)、S1102へ戻ることで、負荷の計算を行っていない別の構成ボリューム250の負荷を計算する。この処理は、通常ボリュームについての計算同様に、ボリュームテーブル2211、処理コストテーブル2218を参照することによって実現する。
一方で、全ての構成ボリューム250についての計算が完了していると判定した場合(S1105、Yes)、拡張ボリューム負荷計算プログラム2227は、通常ボリューム同様に、担当MPPK210をまとめて切り替える複数の構成ボリューム250(切り替え単位)の合計負荷をリストとして作成するため、S1104で計算した負荷の合計をリストに追加する(S1106)。拡張ボリュームの場合、全構成ボリューム250の担当MPPK210が同一であれば、全構成ボリューム250の合計負荷がリストに追加される。
次に、拡張ボリューム負荷計算プログラム2227は、全拡張ボリュームの計算が完了したか否かを判定する(S1107)。全拡張ボリュームについての計算が完了していると判定した場合(S1107、Yes)、拡張ボリューム負荷計算プログラム2227は処理を終了する(S1108)。未だ全拡張ボリュームについての計算が完了していないと判定した場合(S1107、No)、拡張ボリューム負荷計算プログラム2227は、S1101へ戻ることで、負荷の計算を行っていない別の拡張ボリュームの負荷を計算する。
次に、図31を参照して、負荷計算プログラム2226からコールされるローカルコピー負荷計算プログラム2228について説明する。
まず、ローカルコピー負荷計算プログラム2228は、ローカルコピー機能のPVOL又はSVOLを自MPPK210が担当するローカルコピーペアをリストアップする(S1200)。この処理は、ローカルコピー負荷計算プログラム2228がローカルコピーテーブル2213及び担当MPPKテーブル2212を参照することにより実現する。
次に、ローカルコピー負荷計算プログラム2228は、リストアップしたローカルコピーペアに対して、S1201からS1206までの処理を実行し、合計負荷を計算する。次いでローカルコピー負荷計算プログラム2228は、負荷計算対象となるローカルコピーペアを一つ決め(S1201)、当該ローカルコピーのPVOL情報とSVOL情報を取得する(S1202)。そして、ローカルコピー負荷計算プログラム2228は、S1202で得たPVOLの担当MPPK210が自MPPK210であるか判定する(S1203)。
PVOLの担当MPPK210が自MPPK210であると判定した場合(S1203、Yes)、当該PVOLの負荷を計算し、合計負荷に加算する(S1204)。続けて、ローカルコピー負荷計算プログラム2228は、S1202で得たSVOLの担当MPPK210が自MPPK210であるか判定する(S1205)。SVOLの担当MPPK210が自MPPK210であると判定した場合(S1205、Yes)、当該SVOLの負荷を計算し、合計負荷に加算する(S1206)。ローカルコピー負荷計算プログラム2228は、S1203からS1206までの処理によって、S1202で決定したPVOLとSVOLのうち、自MPPK210が担当しているPVOLとSVOLの合計負荷を計算できる。
ローカルコピーについての負荷計算では、通常ボリューム250、拡張ボリュームの場合と異なり、PVOLからSVOLへのコピー負荷も考慮する必要がある。本実施例では、ローカルコピー負荷計算プログラム2228は、(PVOLからSVOLへのコピー回数((合計コピー量÷コピーサイズ)によって算出)×1回のコピー処理コスト)によって、PVOLからSVOLへのコピー負荷を計算する。
PVOLの担当MPPK210とSVOLの担当MPPK210が異なる場合、PVOLからSVOLへのコピー処理が二つのMPPK210によって実現される。このため、上記計算結果は一つのMPPK210の負荷を表していない。PVOLの担当MPPK210の負荷、SVOLの担当MPPK210の負荷をそれぞれ正しく計算するため、処理コストテーブル2218の処理コスト欄22182には、処理種別欄22181のPVOL側コピー処理、SVOL側コピー処理にそれぞれ対応して、PVOLの担当MPPK210のコピー処理コスト、SVOLの担当MPPK210のコピー処理コストが格納される。そして、PVOLの担当MPPK210の負荷計算では、(コピー回数×PVOL側のコピー処理コスト)によって負荷を計算し、SVOLの担当MPPK210の負荷計算では、(コピー回数×SVOL側のコピー処理コスト)によって負荷を計算する。
次に、ローカルコピー負荷計算プログラム2228は、通常ボリューム250と同様に、担当MPPK210を一括して切り替える必要があるボリューム250(切り替え単位)の合計負荷をリストとして作成するため、S1204及びS1206で計算した負荷の合計をリストに追加する(S1207)。PVOLとSVOLの担当MPPK210が同一MPPK210であれば、PVOLとSVOLの合計負荷(ペアの負荷)がリストに追加される。
次に、ローカルコピー負荷計算プログラム2228は、リストアップした全ローカルコピーペアの計算が完了したか否かを判定する(S1208)。未だ全ローカルコピーペアの計算が完了していないと判定した場合(S1208、No)、ローカルコピー負荷計算プログラム2228はS1201へ戻ることで、負荷の計算を行っていない別のローカルコピーペアの負荷を計算する。
一方で、全てのローカルコピーペアの計算が完了していると判定した場合(S1208、Yes)、ローカルコピー負荷計算プログラム2228は、処理を終了する(S1209)。
次に、図32を参照して、負荷計算プログラム2226からコールされるリモートコピー負荷計算プログラム2229について説明する。
リモートコピー負荷計算プログラム2229は、S1300からS1304までの処理によって、PVOLのIO処理の負荷を計算する。そして、S1305からS1313までの処理によって、リモートコピー処理の負荷、及びSVOLのIO処理負荷を計算する。リモートコピー処理の負荷は、例えばジャーナルを作成し、JVOLに格納する処理、ジャーナルを正ストレージシステム300から副ストレージシステム400へ転送する処理、転送済みのジャーナルを正ストレージシステム300のJVOLから削除する処理を含む。
まず、PVOLのIO処理の負荷の計算について説明する。リモートコピー負荷計算プログラム2229は、自MPPK210が担当しているPVOLをリストアップする(S1300)。次に、リモートコピー負荷計算プログラム2229は、負荷計算対象となるPVOLを一つ決め(S1301)、当該PVOLの負荷を計算し、合計負荷に加算する(S1302)。
この負荷計算処理は、ボリュームテーブル2211のライト数、リード数、処理コストテーブル2218のリモートコピーのPVOLリードの処理コスト、リモートコピーのPVOLライトの処理コストの値を用いて実行することができる。
リモートコピー負荷計算プログラム2229は、担当MPPK210の切り替え単位となるPVOL毎の負荷をリストとして作成するため、S1301で決定したPVOLの負荷をリストに追加する(S1303)。このリストは、モニタプログラム2225のS904が、どの資源の担当MPPK210を切り替えるかを決定するために利用される。
次に、リモートコピー負荷計算プログラム2229は、S1300でリストアップした全PVOLの計算が完了したか否かを判定する(S1304)。未だ全PVOLの計算が完了していないと判定した場合(S1304、No)、リモートコピー負荷計算プログラム2229は、S1301へ戻ることで、負荷の計算を行っていない別のPVOLの負荷を計算する。
一方で、全PVOLの計算が完了していると判定した場合(S1304、Yes)、リモートコピー負荷計算プログラム2229は、S1305へ進み、リモートコピー処理の負荷、及びSVOLのIO処理負荷を計算する。
以下に、リモートコピー処理の負荷、及びSVOLのIO処理負荷の計算について説明する。リモートコピー負荷計算プログラム2229は、リモートコピー用担当MPPKテーブル2216を参照して、自MPPK210が担当しているリモートコピーグループをリストアップする(S1305)。次に、リモートコピー負荷計算プログラム2229は、負荷計算対象となるリモートコピーグループを一つ決め(S1306)、リモートコピーテーブル2215の属性欄22152を参照して、当該リモートコピーグループがコピー元のリモートコピーグループであるかコピー先のリモートコピーグループであるかの判定を行う(S1307)。
S1306で決めたリモートコピーグループがコピー元のリモートコピーグループであると判定した場合(S1307、Yes)、S1308で、コピー元で実行するリモートコピー処理の負荷を計算した後、S1311へ進む。一方、S1306で決めたリモートコピーグループがコピー先のリモートコピーグループでないと判定した場合(S1307、No)、S1306で決定したリモートコピーグループに属し、自MPPK210が担当するSVOLを特定した後(S1309)、コピー先で実行するリモートコピー処理の負荷、及びSVOLのIO処理負荷を計算する(S1310)。その後、S1311へ進む。
S1308で、リモートコピー負荷計算プログラム2229は、ボリュームテーブル2211を参照して、S1306で決定したリモートコピーグループに属する全PVOLの合計ライト数を計算する。続けて、リモートコピー処理計算プログラム2229は、(計算したライト数×(ジャーナル作成処理コスト+ジャーナル転送処理コスト+ジャーナル削除処理コスト))を計算する。最後に、計算結果を合計負荷に加算する。
また、S1310で、リモートコピー負荷計算プログラム2229は、ボリュームテーブル2211を参照して、(S1306で決定したリモートコピーグループがコピー元リモートコピーグループから受領した合計ジャーナル数×(ジャーナル転送処理コスト+ジャーナル削除処理コスト+書込みジャーナル決定処理コスト+ジャーナル書込み処理コスト)+SVOLリード数×SVOLリード処理コスト+SVOLライト数×SVOLライト処理コスト)を計算する。そして、計算結果を合計負荷に加算する。
次に、リモートコピー負荷計算プログラム2229は、通常ボリューム250の場合と同様に、担当MPPK210をまとめて切り替える必要がある資源(切り替え単位)の合計負荷をリストとして作成するため、S1308又は、S1309で計算した負荷をリストに追加する(S1311)。
リモートコピーグループがコピー元の場合、S1308で計算したリモートコピー処理の負荷の合計をリストに追加する。また、リモートコピーグループがコピー先の場合、S1310で計算したリモートコピー処理の負荷、及び、SVOLのIO処理負荷の合計をリストに追加する。
なお、前記のように、PVOLの合計ライト数は、ボリュームテーブル2211を参照することで得ることができる。そして、各処理の処理コストは、処理コストテーブル2218を参照することで得ることができる。コピー先リモートコピーグループがコピー元リモートコピーグループから受領した合計ジャーナル数は、例えばリモートコピーグループ担当MPPK210が、リモートコピーテーブル2215に記録することにより取得することができる。
最後に、リモートコピー負荷計算プログラム2229は、リストアップした全リモートコピーグループの計算が完了したか否かを判定する(S1312)。未だ全リモートコピーグループの計算が完了していないと判定した場合(S1312、No)、リモートコピー負荷計算プログラム2229はS1306へ戻ることで、負荷の計算を行っていない別のリモートコピーグループの負荷を計算する。
一方で、全てのリモートコピーグループの計算が完了していると判定した場合(S1312、Yes)、リモートコピー負荷計算プログラム2229は、処理を終了する(S1313)。
以上要するに、本発明の実施形態によれば、ボリュームの担当MPPKの切り替えを、当該ボリュームについてのストレージ機能の設定状況を考慮して行う。また、ストレージ機能の処理負荷を考慮して担当MPPKを切り替える資源と、切り替え先MPPKを決定する。このため、ストレージ機能が適用されているボリュームの担当MPPK切り替えによる性能低下を回避することができる。また、ストレージ機能を考慮しない場合に比べ、MPPK間での負荷分散をより均等にすることができる。これにより、MPPKの利用率を向上させることができる。
以上、本願発明を、その実施例に即して添付図面を参照しながら説明したが、本願発明は、これらの実施例に限定されるものではない。また、本願発明の趣旨を逸脱しないいかなる変形例、均等物も本願発明の範囲内のものである。