以下、実施形態の一例について、図1〜図33に基づいて説明する。
図1は、本実施例に係るストレージシステム100の構成の概要を示す図である。
図1に示すストレージシステム100は、制御モジュール102a、102b、102cおよび102dを有するRAID装置101と、制御モジュール112a、112b、112cおよび112dを有するRAID装置111と、を備える分散キャッシュメモリ型のストレージシステムである。
制御モジュール102aは、所定のプログラム命令を実行して制御モジュール102aを動作させるCPU(Central Processing Unit)103aと、後述するBIT、記録バッファやバッファセット記憶部等に使用するメモリ104aと、ホストコンピュータ(以下、「ホスト」という)109とのインターフェース制御部であるCA(Channel Adapter)105aと、ネットワークまたは専用線120を介して接続される他のRAID装置等とのインターフェース制御部であるRA(Remote Adapter)106aと、ディスク装置108aとのインターフェース制御部であるFC(Fibre Channel)107aと、磁気ディスク装置などの記憶装置で構成されるディスク装置108aと、を備える。
RAID装置101に備わる制御モジュール102b、102cおよび102dや、RAID装置111に備わる制御モジュール112a、112b、112cおよび112dも同様の構成である。
以上の構成において、例えば、「識別情報取得部」、「データ転送制御部」、「転送処理部」、「退避制御部」、「復元制御部」などは、CPU103aがメモリ104a上の所定の領域に展開されたプログラム命令を実行することによって実現することができる。
また、「送信用バッファ」、「第1のポインタ」、「第2のポインタ」などは、メモリ104aの一部の領域を用いて実現することができ、「退避用ボリューム」は、1または2以上の磁気ディスク装置等で構成されるディスク装置108aの一部を用いて実現することができる。
以下の実施例では、RAID装置101からRAID装置111にリモートコピーを行なう場合について説明する。そして、この場合のRAID装置101を「コピー元装置101」といい、RAID装置111を「コピー先装置111」という。
なお、図1では、RAID装置101および111が4つの制御モジュールで構成されている場合について示しているが、これに限定する趣旨ではない。同様に、CA、RAおよびFCの数についても、図1に示す数に限定する趣旨ではない。
図2は、本実施例に係る制御モジュールが備えるメモリ、例えば、図1に示したメモリ104a、114aの具体的な構成例を示す図である。
図2に示すように、本実施例に係るRAID装置101または111の制御モジュールに備わるメモリ200は、ディスク装置に記憶しもしくは記憶したデータを一時的に記憶・管理する記録バッファ201と、バッファセットを格納するバッファセット記憶部202と、コピー先装置111における未使用のバッファのバッファIDを記憶する未使用バッファID記憶部203と、を備える。
バッファ201aは、一定サイズに分割された複数の領域(以下、「世代」という)毎にデータが管理される記憶部であり、各世代には、それぞれディスク装置108aなどのディスク装置に記憶しもしくは記憶するデータ(例えば、後述するWriteデータ)が一時的に記憶される。
バッファ201a内に記載の(0000)、(0001)、(0002)、・・・に関し、括弧内の数字0000、0001、0002、・・・は各世代に割当てられたバッファIDを示し、括弧付きの数字(0000)、(0001)、(0002)、・・・は、それぞれ括弧内の数字のバッファIDのバッファに任意のデータが格納されていることを意味している。
BIT201bは、バッファ201aの世代毎に、当該世代に記憶されているデータが展開されているLU(Logical Unit)やLBA(Logical Block Address)、データサイズ、コピーセッションの番号などが記憶されるテーブルである。
BIT201b内に記載の0000、0001、0002、・・・はバッファ201aの世代毎に割当てられているバッファIDを示す。例えば、BIT201b内の0000には、バッファIDが0000のバッファに記憶されているデータが展開されているLUやLBA、データサイズ、コピーセッションの番号などが記憶されていることを示す。 バッファセット記憶部202は、RAID装置間におけるリモートコピーを行なう場合、コピー対象のデータが格納されているコピー元装置101に備わるバッファのバッファID(以下、「コピー元ID」という)と、コピー先装置111に備わるバッファのバッファID(以下、「コピー先ID」という)と、の組合わせ(以下、「バッファセット」という)を記憶する。
本実施例のようにコピー元装置101やコピー先装置111に複数の制御モジュールを備える場合、バッファセットは、コピー対象のデータが格納されているバッファであってコピー元装置101に備わる複数の制御モジュールのバッファのバッファIDと、コピー元装置101から送られたデータを記憶するバッファであってコピー先装置111に備わる複数の制御モジュールのバッファのバッファIDと、の組合わせとなる。
例えば、図2に記載のバッファセット記憶部202には、図3に示すようにコピー元装置101に備わる制御モジュール00、01、02および03がそれぞれバッファIDが0000、0100、0200および0300のバッファを有し、図6に示すようにコピー先装置111に備わる制御モジュール00、01、02および03がそれぞれバッファIDが1000、1100、1001および1101のバッファを有する場合のバッファセットを示している。
すなわち、コピー元装置101に備わる制御モジュール00のバッファのバッファID「0000」とコピー先装置111に備わる制御モジュール00のバッファのバッファID「1000」、コピー元装置101に備わる制御モジュール01のバッファのバッファID「0100」とコピー先装置111に備わる制御モジュール01のバッファのバッファID「1100」、コピー元装置101に備わる制御モジュール02のバッファのバッファID「0200」とコピー先装置111に備わる制御モジュール02のバッファのバッファID「1001」、コピー元装置101に備わる制御モジュール03のバッファのバッファID「0300」とコピー先装置111に備わる制御モジュール03のバッファのバッファID「1101」、の組み合わせが定義されている。
なお、以下の説明では、新たに記録バッファ201に格納されるバッファ若しくはそのバッファについてのバッファセットの世代を「新世代」、既に記録バッファ201に格納されているバッファ若しくはそのバッファについてのバッファセットの世代を「旧世代」という。
未使用バッファID記憶部203は、コピー先装置111に備わる未使用のバッファのバッファIDを記憶する。例えば、コピー元装置101の未使用バッファIDの通知の要求に応じて、コピー先装置111から未使用のバッファのバッファIDの通知を受けると、コピー元装置101は、通知されたバッファIDを未使用バッファID記憶部203に記憶する。
以上の構成において、本実施例に係るリモートコピー処理では、例えば、コピー元装置101におけるWriteデータの記録バッファ201への格納、コピー先装置111への転送、コピー先装置111における転送データのディスク装置118aへの展開等の処理を、バッファセット単位で一括して行うことにより、ストレージシステム全体の順序性を保証している。
本実施例に係るコピー元装置101は、コピー元装置101−コピー先装置111間のネットワーク状態を監視し、ネットワークの状況に応じて、コピー元装置101−コピー先装置111間のリモートコピー処理を制御する。リモートコピー処理は、例えば、図11、図12、図14A、図14B、図15などに示す。
また、本実施例に係るコピー元装置101は、コピー元装置101からコピー先装置111へのデータ転送直前にバッファセットを確定する。すなわち、コピー元装置101は、データ転送直前に、転送対象のデータが記憶されているコピー元装置101のバッファと、転送先のコピー先装置111のバッファと、の関連づけを行なう。
その結果、コピー元装置101では、Writeデータ等をバッファに格納する際に転送先であるコピー先装置111のバッファを確保する必要がなくなるので、コピー元装置101は、転送先となるコピー先装置に空きバッファがなくても、Writeデータ等をコピー元装置101のバッファに格納する処理が可能となる。
そして、コピー先装置111に空きバッファが発生すると、コピー元装置101は、この段階でバッファセットを確定し、コピー先装置111へのデータ転送を行なう。そのため、コピー先装置111に備わるバッファがコピー元装置101に備わるバッファより少ない場合であっても、コピー元装置101のバッファを有効に使用してリモートコピー処理を行なうことが可能となる。
すなわち、コピー元装置101に備わるリモートコピーに使用するバッファのサイズと、コピー先装置111に備わるリモートコピーに使用するバッファのサイズと、が不一致の場合であっても、有効にバッファを使用して効率的なリモートコピー処理を行なうことが可能となる。
(本実施例に係るリモートコピー処理の概要)
図3〜図8に基づいて、本実施例に係るリモートコピー処理の概要を説明する。なお、図3〜図6および図8は、リモートコピー処理時におけるコピー元装置101またはコピー先装置111における記録バッファ201、バッファセット記憶部202および未使用バッファID記憶部203の状態を示す図である。
コピー元装置101が、ホスト109から、例えば、Write I/O命令を受付けると、Write I/O命令を受付けた制御モジュール00、01、02または03は、Write I/O命令にしたがって、その制御モジュールに備わるディスク装置108a、108b、108cまたは108dにWriteデータを記憶する。
同時に、Write I/O命令を受けた制御モジュール00、01、02または03は、図3に示すように、当該命令とともに受信したWriteデータをバッファ201a、301a、401aまたは501aの所定の世代に記憶するとともに、Writeデータを記憶した世代に割り当てたインデックスをBIT201bに記憶する。
また、コピー元装置101は、バッファセット記憶部202にコピー元IDだけを設定し、コピー先IDが未確定な状態のバッファセットを作成する。
一方、コピー元装置101は、コピー先装置111に対して未使用バッファの通知を依頼し、コピー先装置111から未使用状態となったバッファについて通知を受けると、コピー元装置101は、当該未使用バッファに対応する未使用バッファIDを未使用バッファID記憶部203に記憶する。
以上のように、本実施例に係るリモートコピー処理では、バッファセット作成時に、バッファセット記憶部にはコピー元IDだけを設定し、コピー先IDは設定しない。すなわち、コピー元のバッファとコピー先のバッファとのマッチング処理は、バッファセット作成時には行なわず、後述するように、バッファのデータを転送先に転送する直前に行なう。
これにより、コピー元装置101に備わるバッファを有効に使用することができる。その結果、コピー先装置に備わるバッファが、コピー元先装置に備わるバッファより少ない場合であっても、コピー元装置が有するバッファを有効に使用することが可能となる。
図4に示すように、(a)コピー元装置101は、格納対象のバッファセットで一定時間経過もしくは,データを格納すべき領域がなくなった場合、次のバッファセットを格納対象に切り替える「バッファセット切り替え」を行う。バッファセット切り替えが行われると、古いバッファセットは転送対象となる。
また、(b)コピー元装置101は、転送対象のバッファセットに未使用バッファID記憶部203から取得した未使用のコピー先IDを割当てる。そして、割り当てられたバッファIDは未使用バッファID記憶部203から削除される。
具体的には、コピー元装置101は、バッファセット切り替えの際に、未使用バッファID記憶部203を参照し、未使用バッファIDを必要に応じた数だけ取得する。そして、コピー元装置101は、バッファセット切り替えにより転送対象となったバッファセットにおけるバッファセット記憶部202のコピー先IDに、取得した未使用バッファIDを設定する。
そして、(c)バッファセットの設定(上述の(a)および(b)の処理)が完了すると、コピー元装置101は、バッファ単位でバッファに格納された情報を転送する。
なお、コピー元装置101は、未使用バッファID記憶部203から取得した未使用バッファIDは、未使用バッファID記憶部203から削除する。また、未使用バッファID記憶部203から必要な数の未使用バッファIDを取得できない場合には、必要な数の未使用バッファIDを取得できるまで、バッファの転送処理を中断する。
本実施例に係るリモートコピー処理では、以上に説明した処理に加えて、以下に説明する処理を行なう。
本実施例に係るコピー元装置101は、コピー元装置101−コピー先装置111間のネットワーク501の状態を監視する。そして、図5に示すように、装置間のデータ転送経路が閉塞状態(以下、「経路閉塞状態」という)であることを検出すると、コピー元装置101は、(a)経路閉塞により再転送対象となったバッファセットの組み合わせを保持する。すなわち、記録バッファ201およびバッファセット記憶部202の状態を保持する。また、コピー元装置101は、(b)未使用バッファID記憶部203に記憶されている未使用バッファIDを全てクリアする。
また、コピー元装置101は、経路閉塞状態中にホスト109からのWrite I/O命令を受けると、(c)可能な限りWrite I/O命令を受付ける。そして、コピー元装置101は、記録バッファ201、301、401または501にWriteデータを格納する。
例えば、経路閉塞中にホスト109からのWrite I/O命令を受付けると、コピー元装置101は、各制御モジュールのバッファにデータを格納していく。例えば、図5に示す制御モジュールaでは、記録バッファ201のバッファ0002、0003、・・・、0007に順次データが格納される。経路閉塞中にいずれかの制御モジュールの記録バッファのバッファにデータを格納しきってしまった場合、コピー元装置101は、バッファに格納されているデータをBIT情報にしたがって各セッションのビットマップに書き戻すバッファHalt処理を行なう。
したがって、記録バッファ201が枯渇する前に、経路閉塞状態が解消されれば、ホスト109への影響を抑えることが可能となる。
その結果、一時的な経路閉塞が発生しても、コピー元装置101には可能な限りのWrite I/Oを溜め込むことができ、経路再開通時までにバッファを使用しつくさなければ、バッファの転送再開時に経路閉塞中にバッファにためていたデータの送信を再開することが可能となるので、順序性を保証したリモートコピーを継続することが可能となる。
また、コピー元装置101は、(d)経路閉塞状態の検出時にバッファ転送完了または転送中などのバッファ未解放状態であったバッファセットを、再転送の対象とし、経路閉塞状態解消後に改めて転送を行なう。
コピー先装置111は、コピー元装置101と同様に、コピー元装置101−コピー先装置111間のネットワーク601の状態を監視する。図6に示すように、経路閉塞状態を検出すると、コピー先装置111は、(a)展開待ち状態の世代の展開処理は行わない。例えば、「転送中」または「転送済みかつ解放待ち」のバッファセットについては、記録バッファ601、701、801または901内のバッファに格納されているデータはディスク装置に展開せず、バッファセット記憶部602、702、802または902の内容を保持し、コピー元IDとのマッチングをそのままにコピー元装置101による再度転送待ちとなる。そして、コピー元装置101から未使用となったバッファIDの通知を要求する「未使用バッファ通知要求コマンド」が発行されるまで待ち状態となる。
また、コピー先装置111は、(b)経路閉塞検出時に展開処理をしていた世代は展開処理を完了するまで行う。すなわち、経路閉塞状態検出時に、記録バッファ601、701、801および901内のデータのディスク装置への展開処理が途中の処理は、完了するまで継続して行なう。
なお、図6に示したコピー先装置111も未使用バッファID記憶部203を備えていてもよいが、説明を簡単にするために図示省略してある。ただし、図示省略は図6の構成に本発明を限定する趣旨ではない。
図7は、経路閉塞状態解消時におけるコピー元装置101−コピー先装置111間のリモートコピー処理を示す図である。
(a)経路閉塞状態が解消すると、コピー元装置101は、コピー先装置111に対してバッファ通知要求コマンドを発行する。この時、コピー元装置101は、経路閉塞状態におけるバッファHalt処理の実施の有無についての情報をバッファ通知要求コマンドに付加する。
(b)バッファ通知要求コマンドを受付けると、コピー先装置111は、当該コマンドとともに通知されたバッファHalt処理の実施の有無を参照する。そして、コピー元装置101においてバッファHalt処理が実施されていた場合、コピー先装置111も、バッファHalt処理を行ない、コピー元装置101に対してエラー応答を返す。そして、バッファHalt処理が完了すると、コピー先装置111は、再度コピー元装置101からのバッファ通知要求コマンド受信待ちの状態となる。
一方、(b‘)コピー先装置111からの応答がエラー応答の場合、コピー元装置101は、リトライ処理を行う。すなわち、コピー先装置111に対して再度バッファ通知要求コマンドを発行する。
(c)コピー元装置101においてバッファHalt処理が実施されていない場合、コピー先装置111は、コピー元装置101に対してバッファ情報通知コマンドを発行し、未使用バッファID等のバッファ情報をコピー元装置101に通知し、リモートコピー処理を再開する。
(d)コピー元装置101は、通知されたバッファ情報を未使用バッファID記憶部に格納してConsistency動作を再開する。すなわち、コピー元装置101は、コピー先装置111から通知された未使用バッファIDを未使用バッファID記憶部203に記憶する。そして、コピー元装置101は、通知された未使用バッファIDと、再転送の対象としてバッファセット記憶部202に保持されているバッファセットにおけるコピー先IDとに矛盾がないことを確認すると、リモートコピー処理を再開するとともに、正常応答をコピー先装置111に返す。
この時のコピー元装置101の状態記録バッファ201、バッファセット記憶部202および未使用バッファID記憶部203の状態を図8に示す。
コピー元装置101は、経路閉塞状態が解消され、コピー先装置111から未使用バッファIDを通知されると、当該未使用バッファIDを未使用バッファID記憶部203に記憶する。
ここで、(a)経路閉塞を検出した時にデータが転送完了したが未解放のバッファ、または転送中などで未解放のバッファを再転送処理の対象とする。再転送処理の対象となるので、再転送処理の対象となる領域は開放されず記録バッファ201の内容が保持される。
図8では、例えば、バッファセット記憶部202、302、402および502にそれぞれ記憶されたバッファセットであって、(コピー元ID−コピー先ID)が(0000−1000)、(0100−1100)、(0200−1001)および(0300−1101)からなる組み合わせのバッファセットと、(0001−1002)、(0101−1102)、(0201−1003)および(0301−1103)からなる組み合わせのバッファセットと、が再転送の対象となっている場合を示している。
ここで、0000および0001、0100および0101、0200および0201、0300および0301は、それぞれコピー元装置101に備わる制御モジュール00、01、02および03が有するバッファ201a、301a、401aおよび501aのバッファIDである。
また、1000および1002、1100および1102、1001および1003、1101および1103は、それぞれ図6に示したコピー先装置111に備わる制御モジュール00、01、02および03が有するバッファ601a、701a、801aおよび901aのバッファIDである。
なお、図8に記載の記録バッファ201、301、401および501内は、バッファIDの一部を図示省略している。また、バッファセット記憶部202、302、402および502には、バッファセットの一部としてコピー元ID(例えば、0002、0102、0202、0302)が格納されている。
(b)経路再開通を検出すると、コピー元装置101は、未使用バッファID記憶部203を参照し、未使用バッファID記憶部203に含まれる未使用バッファIDと、バッファセット記憶部202に記憶されている再転送対象のバッファセットにおけるコピー先IDと、が重複しないことを確認する。
未使用バッファIDが重複して矛盾が生じたと判断した場合、コピー元装置101は、未使用バッファID記憶部203から矛盾が生じないように新たな未使用バッファIDをコピー先装置111から取得し、コピー先IDに設定する。
(c)再転送対象のバッファセットにおけるコピー先IDがコピー先装置111から通知された未使用バッファIDが経路閉塞前と同じ場合、すなわち、未使用バッファID記憶部203に含まれる未使用バッファIDと、バッファセット記憶部202に記憶されている再転送対象のバッファセットにおけるコピー先IDと、に重複するなどの矛盾がなければ、コピー元装置101は、そのままの状態から転送処理(リモートコピー処理)を再開する。矛盾が解消された場合も、コピー元装置101は、転送処理を再開する。
図9Aおよび図9Bは、本実施例に係るリモートコピー処理の概要を示すフローチャートである。以下、図9Aおよび図9Bに基づいて、本実施例に係るリモートコピー処理の概要を説明する。
ステップS900aにおいて、リモートコピー処理が開始されると、コピー元装置101は、処理をステップS901aに移行する。
ステップS901aにおいて、コピー元装置101は、バッファ初期構成処理を行なう。コピー元装置101は、例えば、あらかじめ設定された構成情報にしたがって、各制御モジュールに備わるメモリ200に、図2に示した構成の領域を確保し、各領域について初期化を行なう。
ステップS902aにおいて、コピー元装置101は、コピー先装置111に対して、未使用バッファの通知を要求するために、未使用バッファ通知要求コマンドを発行する。
一方、ステップS901bにおいて、コピー先装置111は、ステップS901aと同様にバッファ初期構成処理を行なう。そして、コピー先装置111は、ステップS902bに処理を移行し、コピー元装置101からの未使用バッファ通知要求コマンドを受けるまで、当該コマンドを監視する(S902b NO)。
ステップS902bにおいて、コピー元装置101からの未使用バッファ通知要求コマンドを検出すると(S902b YES)、コピー先装置111は、処理をステップS903bに移行する。そして、コピー先装置111は、自身に備わる制御モジュールの記録バッファ201において、領域が解放された空きバッファを検索し、空きバッファを検出すると、当該バッファのバッファIDを未使用バッファIDとしてコピー元装置101に通知する。
ステップS903aにおいて、コピー元装置101は、バッファセット初期作成処理を行う。例えば、既にホスト109からのWrite I/O命令を受付けてそのWrite I/O命令とともに受信したWriteデータが、記録バッファ201のバッファ201aに記録されている場合、バッファ201aに記録されているバッファのバッファIDをコピー元IDとするコピー先IDが未定のバッファセットを生成し、生成したバッファセットをバッファセット記憶部202に記憶する。なお、本ステップでは、図3でも説明したように、コピー元装置101のバッファIDのみからなるバッファセットを生成しバッファセット記憶部202に記憶する。
また、ステップS903aにおいて、コピー先装置111から未使用バッファIDの通知を受けると、コピー元装置101は、当該未使用バッファIDを未使用バッファID記憶部203に記憶する。そして、処理をステップS904aに移行する。
ステップS904aにおいて、コピー元装置101は、例えば、ホスト109からのWrite I/O命令を受付けると、当該命令とともに受信したWriteデータを、記録バッファ201のバッファ201aに格納する。また、ステップS903aと同様に、記憶したバッファのバッファIDをコピー元IDとするコピー先IDが未定のバッファセットを生成し、生成したバッファセットをバッファセット記憶部202に記憶する。
ステップS905aにおいて、コピー元装置101は、受付けた全てのWrite I/O命令について、バッファセット記憶部202へのバッファセットの格納が完了したか否かを判別する。バッファセット記憶部202へのバッファセットの格納が完了していないと判断した場合、コピー元装置101は、ステップS905aの処理を繰返す(S905a NO)。
ステップS905aにおいて、バッファセット記憶部202へのバッファセットの格納が全て完了したと判断すると(S905a YES)、コピー元装置101は、処理をステップS906aに移行する。
ステップS906aにおいて、コピー元装置101は、未使用バッファID記憶部203を参照する。そして、コピー元装置101は、未使用バッファIDが必要な数だけあるか否かを判別する。例えば、バッファセット記憶部202に格納されている全てのバッファセットにコピー先IDを設定できる分だけ未使用バッファIDがあるか否かを判別する。
そして、必要な数だけ未使用バッファIDがない場合(S906a NO)、コピー元装置101は、必要な数の未使用バッファIDを確認できるまでステップS906aの処理を繰返し行なう。また、必要な数の未使用バッファIDがあると判断すると、コピー元装置101は、処理をステップS907aに移行する(S906a YES)。
ステップS907aにおいて、コピー元装置101は、未使用バッファID記憶部203から、必要な数の未使用バッファIDを取得する。そして、コピー元装置101は、バッファセット記憶部202に設定されているバッファセットのコピー先IDとして、取得した未使用バッファIDを設定する(例えば、図4を参照)。この処理を「マッチング処理」という。
ステップS908aにおいて、コピー先装置111は、バッファセット記憶部202に記憶されているバッファセットにしたがって、コピー元IDとコピー先IDが設定されたバッファセットおよびバッファセットに設定されているコピー元IDのバッファに格納されているデータおよびそのBITをコピー先装置111に送信する。
一方、コピー先装置111は、コピー元装置101からバッファセット等を受信すると、処理をステップS904bに移行する。
ステップS904bにおいて、コピー先装置111は、バッファセットの受信処理を行なう。例えば、コピー先装置111は、受信したバッファセットをバッファセット記憶部202に記憶し、バッファセットとともに受信したデータを記録バッファ201に記憶する。
ステップS905bにおいて、コピー先装置111は、全てのバッファセットを受信したか否かを判別する。そして、まだ、全てのバッファセットを受信していないと判断すると(S905b NO)、コピー先装置111は、処理をステップS904bに移行し、ステップS904b〜S905bの処理を繰返す。
ステップS905bにおいて、全てのバッファセットを受信したと判断すると(S905b YES)、コピー先装置111は、処理をステップS906bに移行する
ステップS906bにおいて、コピー先装置111は、記録バッファ201のバッファ201aに記憶したデータを含む、ステップS904bで取得したバッファセットが、自身に備わる記憶装置のディスク装置に展開可能か否かを判断する。展開可能と判断すると(S906bYES)、コピー先装置111は、処理をステップS907bに移行する。
ステップS907bにおいて、コピー先装置111は、ステップS904bで取得したデータを、自身に備わるディスク装置に展開する。当該展開が終了すると、コピー先装置111は、処理をステップS908bに移行し、バッファセットの展開が完了した旨をコピー元装置101に通知する。以下、この通知を「バッファセット展開完了通知」という。
バッファセットのディスク装置への展開が終了すると、ステップS909bにおいて、コピー先装置111は、バッファセットの解放処理を行なう。例えば、バッファセットを記憶するバッファセット記憶部202、そのバッファのバッファIDを記憶する記録バッファ201の領域を解放する。
ステップS910bにおいて、コピー先装置111は、ステップS901bと同様に、解放した領域に新たにバッファセット記憶部202および記録バッファ201の領域を確保して、例えば、図2に示した構成を構築する。
以上の処理が終了すると、コピー先装置111は、処理をステップS911bに移行し、ステップS909b〜S910bの処理によって新たに使用可能となったバッファの未使用バッファIDをコピー元装置101に通知する。
一方、ステップS909aにおいて、コピー元装置101は、コピー先装置111からのバッファセット展開完了通知を受信したか否かを判断する。そして、バッファセット展開完了通知を受信しない場合(S909a NO)には、ステップS909aの処理を繰り返す。また、コピー先装置111からバッファセット完了通知を受信すると(S909a YES)、コピー元装置101は、処理をステップS910aに移行する。
ステップS910aにおいて、コピー元装置101は、ステップS908aでデータの転送が完了したバッファセットについて、ステップS909bと同様に、バッファセットの解放処理を行なう。そして、ステップS911aにおいて、コピー元装置101は、ステップS901aと同様に、バッファの再構築処理を行なう。
以上の処理が終了すると、コピー元装置101は、リモートコピー処理を終了する、または、ステップS902aに処理を移行してリモートコピー処理を継続、若しくは、ホスト109から新たにWrite I/O命令を受付けると、S904a等に移行して、リモートコピー処理を継続する。また、コピー先装置111は、上述の処理が終了すると、リモートコピー処理を終了する、または、ステップS902bもしくは904b等に処理を移行してリモートコピー処理を継続する。
(本実施例に係るリモートコピー機能の具体的な処理)
図9Aおよび図9Bに示した本実施例に係るリモートコピー処理において、以下の処理についてより具体的に説明する。
(1)バッファセット転送時におけるコピー元のバッファとコピー先のバッファとのマッチング処理(ステップS907a)。
(2)経路閉塞状態解消時に開始する転送処理を決定する処理。
(3)経路閉塞状態におけるI/O処理。
(4)経路閉塞状態解消後における未使用バッファID取得処理およびバッファセット転送再開処理。
(5)コピー先装置における経路閉塞状態検出時の処理。
(1)バッファセット転送時におけるコピー元のバッファとコピー先のバッファとのマッチング処理(ステップS907a)
図10は、図9Bに示したコピー先バッファ割り当て処理(ステップS907a)の具体的な処理を示すフローチャートである。なお、図10では、コピー元装置101に備わる制御モジュール全体を制御する制御モジュール(以下、「マスタ制御モジュール」という)と、その他の制御モジュールと、についての具体的な処理を示す。
ステップS1001aにおいて、マスタ制御モジュールは、未使用バッファID記憶部203を参照する。そして、未使用バッファID記憶部203に記録されている未使用バッファIDの数が、バッファセット記憶部202のバッファセットにおけるコピー先IDとして必要な数だけあるか否かを確認する。
そして、ステップS1001aにおいて、必要な数の未使用バッファIDを確認できない場合(S1001a NO)、マスタ制御モジュールは、処理をステップS1002aに移行する。そして、マスタ制御モジュールは、S1002aにてコピー先装置111からの未使用バッファ通知を待ち、未使用バッファ通知を受付けると、処理をステップS1001aに移行する。
また、ステップS1001aにおいて、必要な数の未使用バッファIDを確認すると(S1001a YES)、マスタ制御モジュールは、処理をステップS1003aに移行する。
ステップS1003aにおいて、マスタ制御モジュールは、未使用バッファID記憶部203から必要な数の未使用バッファIDを取得する。そして、既にステップS904aにおいてバッファセット記憶部202にセットされたバッファセットにおけるコピー先IDに、取得した未使用バッファIDを設定する。これにより、コピー元バッファとコピー先バッファとのマッチングが行なわれる。
このマッチング処理が終了すると、マスタ制御モジュールは、他の制御モジュールに対して、バッファセット情報の多重化依頼を通知する。
一方、ステップS1001bにおいて、マスタ制御モジュールからバッファセット情報の多重化依頼の通知を受けると、各制御モジュールは、バッファセット情報の多重化処理を行なう。ここで、バッファセット情報の多重化処理とは、コピー元装置101またはコピー先装置111に備わる全ての制御モジュールに同一のバッファセット情報を保持させる処理である。
例えば、マスタ制御モジュールから、ステップS1003aのマッチング処理が行なわれたバッファセットを取得する。そして、自身に備わるバッファセット記憶部202に取得したバッファセットを反映する。
そして、S1001bにおけるバッファセット情報の多重化処理が終了すると、各制御モジュールは、バッファセット情報の多重化処理の完了をマスタ制御モジュールに通知する。
ステップS1005aにおいて、マスタ制御モジュールは、バッファセット情報の多重化処理の依頼をした制御モジュールの全てから応答を受信したか否かを確認する。そして、当該応答を全ての制御モジュールから受信したと判断すると(S1005a YES)、コピー先バッファ割り当て処理を終了し(ステップS1005a)、図9Bに示したステップS908aの処理に移行する。
以上に説明したように、従来のリモートコピー処理では、におけるバッファセット作成時に、コピー元IDとコピー先IDとのマッチング処理を行なっていたが、本実施例に係るリモートコピー処理では、ステップS904aのタイミングでは行わず、バッファへの格納処理が完了して転送処理を行う直前(ステップS907a)で行う。
そのため、転送処理に関するバッファ以外に対して、転送処理と並行してデータの記憶処理を行うことができるため、コピー元装置101に備わる記録バッファ201およびバッファセット記憶部202を含むバッファを全て使用することが可能となる。例えば、ホスト109からのWrite I/Oに係るデータを、コピー元装置101に備わるバッファの容量がなくなるまで格納することが可能となる。
その結果、順序性を保証したリモートコピーに使用するバッファに関し、コピー先装置111に備わるバッファが、コピー元装置101に備わるバッファより少ない場合であっても、コピー元装置が有するバッファを有効に使用することが可能となる。
(2)経路閉塞状態解消時に開始する転送処理を決定する処理
本実施例に係るリモートコピー処理では、コピー元装置101において、経路閉塞状態を検出すると、バッファHalt処理が実行されていた場合にはバッファHalt処理を中止し、各バッファセットの転送状況に応じて、経路閉塞状態解消時における再転送対象を決定する。本実施例では、下記の条件を満たすバッファセットを再転送対象とする。
1)転送済みの旧世代のバッファセット
2)転送中の旧世代のバッファセット
3)転送処理開始待ち状態にある旧世代のバッファセット
また、本実施例に係るリモートコピー処理では、経路閉塞状態解消時におけるバッファセットの再転送では、古い世代からバッファセットの転送を行なう。
図11は、コピー元装置101において、経路閉塞状態解消後のバッファセット転送処理を決定する処理を示すフローチャートである。
ステップS1100aにおいて、経路閉塞状態を検出すると、コピー元装置101におけるマスタ制御モジュールは、処理をステップS1101aに移行する。
ステップS1101aにおいて、マスタ制御モジュールは、記録バッファ201もしくはバッファセット記憶部202を参照する。そして、マスタ制御モジュールは、1)転送済み、2)転送中、または3)転送処理開始待ち状態にある旧世代のバッファセットがあるか否かを確認する。
ステップS1101aにおいて、1)、2)あるいは3)の条件に該当するバッファセットが検出されない場合(S1001a NO)、マスタ制御モジュールは、処理をステップS1104aに移行し、図11の処理を終了する。また、該当するバッファセットを検出した場合(S1101a YES)、マスタ制御モジュールは、処理をステップS1102aに移行する。
ステップS1102aにおいて、マスタ制御モジュールは、ステップS1101aで検出した該当バッファセットをバッファ転送の順序制御に使用するキュー(以下、「転送キュー」という)に追加する。この時、旧世代のバッファセットに係る転送キューの優先度を高くするようにキューイングを行なう。
キューイング処理が終了すると、マスタ制御モジュールは、他の制御モジュールに対して、上述の転送キュー情報の多重化を依頼する通知を行なう。
一方、マスタ制御モジュールから転送キュー情報の多重化依頼の通知を受けると、各制御モジュールは、当該転送キュー情報をマスタ制御モジュールから取得し、自身に備わる転送キュー情報に反映させる(S1101b)。
各制御モジュールは、S1101bの処理による転送キュー情報の反映が終了すると、マスタ制御モジュールに対して転送キュー情報の多重化が完了した旨の通知を行なう。
ステップS1103aにおいて、マスタ制御モジュールは、他の制御モジュールからの転送キュー情報の多重化の完了通知を確認する。そして、全ての制御モジュールから完了通知を受付けると(S1103a YES)、マスタ制御モジュールは、処理をステップS1104aに移行し、経路閉塞状態解消後のバッファセット転送処理を決定する処理を終了する。
そして、経路閉塞状態が解消したことを検出すると、マスタ制御モジュールは、例えば、図8に説明した処理を行なった後に、キュー情報にしたがってバッファセットの再転送処理を行なう。
なお、上述の転送済みのバッファセットとは、コピー先装置111への転送は完了しているが、コピー先装置111からバッファセット展開完了通知を受信していないバッファセットを示している。この場合、バッファの解放をせずにコピー先装置111からのバッファセット展開完了通知を待つ必要がある。
(3)経路閉塞状態におけるI/O処理
従来のリモートコピー処理では、コピー元装置において経路閉塞状態を検出した場合、バッファHalt処理によって、バッファに格納されていたデータをBIT情報に応じて、各セッションのビットマップに書き戻していた。そして、バッファHalt処理後の経路閉塞状態解消時に、書き戻したビットマップに応じて順序性を保障しないリモートコピー処理を行なっていた。この順序性を保障しないリモートコピーが動作している間のホストからのWrite I/O処理については、順序性を保障しないリモートコピーが行なわれていた。
本実施例に係るリモートコピー処理では、経路閉塞状態を検出した場合、バッファHalt処理を行なわず、記録バッファ201およびバッファセット記憶部202(以下、あわせて単に「バッファ」という)を格納可能な状態にし、ホストからのWrite I/Oを可能な限りバッファへ格納する。
ただし、新たにデータを格納する領域がバッファになくなった状態でさらにホストからのWrite I/O等を受付けた場合は、バッファ切り替え依頼を行い、バッファ切り替えができない場合は、バッファHalt処理を行なう。
図12は、コピー元装置101において経路閉塞状態を検出した時のバッファの状態変更処理を示すフローチャートである。
ステップS1200aにおいて、経路閉塞状態を検出すると、マスタ制御モジュールは、処理をステップS1201aに移行する。
ここで、本実施例に係るバッファは、少なくとも3つの状態(Halt、ActiveおよびBuffering)を遷移する。例えば、経路閉塞状態を検出すると、連動して、バッファはBufferingの状態になる。Buffering状態の場合、バッファへのデータの格納はできるが、バッファに格納されたデータの送信ができない。また、Haltの場合、ホスト109からWrite I/O命令を受信してもバッファへのデータ格納はできない。Active状態は、バッファへのデータの格納が可能で、バッファに格納されたデータの送信もできる。
ステップS1201aにおいて、マスタ制御モジュールは、バッファの状態をActive状態からBuffering状態に変更する。そして、マスタ制御モジュールは、他の制御モジュールに対して、バッファ状態の多重化依頼を通知する。
一方、マスタ制御モジュールからバッファ状態の多重化依頼の通知を受けると、各制御モジュールは、処理をステップS1201bに移行する。そして、自身のバッファ状態をBuffering状態に変更する。
S1201bにてバッファ状態のBuffering状態への変更が終了した制御モジュールは、マスタ制御モジュールに対して、バッファ状態の多重化が完了した旨を通知する。
ステップS1202aにおいて、マスタ制御モジュールは、制御モジュールからのバッファ状態の多重化の完了通知を確認する。そして、全ての制御モジュールから完了通知を受付けると(S1202a YES)、マスタ制御モジュールは、処理をステップS1203aに移行し、バッファの状態変更処理を終了する。
図13は、経路閉塞状態におけるコピー元装置101でのI/O処理を示すフローチャートである。
S1300でホスト109からWrite I/O命令を受付けると、Write I/O命令を受付けたコピー元装置101における制御モジュールは、処理をステップS1301に移行する。
ステップS1301において、Write I/O命令を受信した制御モジュールは、記録バッファ201およびバッファセット記憶部202(以下、必要に応じて両者をあわせて単に「バッファ」という)の状態を参照する。そして、バッファがデータを格納な状態か否かを確認する。そして、制御モジュールは、当該バッファがActive状態かBuffering状態以外の状態の場合(S1301 NO)、データをバッファに格納可能な状態でないと判断し、処理をステップS1302に移行する。そして、制御モジュールはS1302で、自身に備わるメモリ等にあらかじめ用意されたビットマップにWrite I/Oを記録する。
一方、ステップS1301において、バッファの状態がActive状態かBuffering状態の場合(S1301 YES)、制御モジュールはバッファに対してデータを格納可能な状態と判断し、処理をステップS1303に移行する。
ステップS1303において、制御モジュールは、格納対象のバッファにデータを格納可能な領域があるか否かを確認する。データを格納可能な領域がないと判断した場合(S1303 NO)、制御モジュールは、処理をステップS1304に移行する。そして、制御モジュールはS1304において、マスタ制御モジュールに対して、バッファセットの切替えを依頼する。
S1304によるバッフ切替依頼を受付けると、マスタ制御モジュールは、自身のバッファセットの切替えを行なうとともに、他の制御モジュールに対してもバッファの切替依頼通知を行なう。制御モジュールは、切替えたバッファにWrite I/Oを格納することになる。なお、バッファ切替えができない場合、バッファHalt処理が行なわれる。
ステップS1303において、データを格納する領域があると判断した場合(S1303 YES)、制御モジュールは、処理をステップS1305に移行し、データを格納するための領域を獲得する。そして、処理をステップS1306に移行する。
ステップS1306において、ホスト109によるWrite I/O処理が行なわれる。この時、制御モジュールは、ホスト109からのWrite I/O命令にしたがって、自身に備わるディスク装置にデータの書き込み等を行なう。そして、制御モジュールは、処理をステップS1307またはS1308に移行する。
例えば、バッファに格納するWriteデータがない場合には、ステップS1307に処理を移行する。また、バッファに格納するWriteデータがある場合には、ステップS1308に移行し、Writeデータをバッファにコピーする。
(4)経路閉塞状態解消後における未使用バッファID取得処理およびバッファセット転送再開処理
コピー元装置101において、経路閉塞状態を検出し、図12で説明した(2)の処理、図13で説明した(3)の処理が行なわれ、経路閉塞状態が解消した場合、コピー元装置101からコピー先装置111に対して、経路閉塞中のコピー元装置101の状態に応じて、以下の2つのパターンのバッファ通知要求処理を行う。
1)経路閉塞状態にバッファHalt処理が行なわれていない場合。
2)経路閉塞状態にバッファHalt処理が行なわれた場合。
上記パターン2)の場合は、コピー元装置101で既にバッファHalt処理が行なわれているため、バッファがクリアされている。したがって、コピー先装置111でもバッファHalt処理を行なってバッファをクリアする必要がある。コピー先装置でバッファHalt処理を行う契機として、コピー元装置101でバッファHalt処理を行なった旨を示したバッファ通知要求をコピー先装置に対して発行する。バッファ通知要求を受けたコピー元装置101は、リトライを意図するエラーをコピー元装置に応答しつつ、コピー先装置のバッファHalt処理を行なう。
コピー先装置からのエラーを受信したコピー元装置101は、エラー受信から一定時間経過後にバッファ通知要求をコピー先装置に対して行うが、このときは、上記パターン1)の通知、つまり経路閉塞中にバッファHalt処理が行なわれていない旨の通知でバッファ通知要求を発行する。
1)経路閉塞状態でバッファHalt処理が行なわれていない場合
図14Aおよび図14Bは、経路閉塞状態解消後における未使用バッファID取得処理およびバッファセット転送再開処理を示すフローチャートである。以下、必要に応じて、コピー元装置101のマスタ制御モジュールを「コピー元マスタ制御モジュール」といい、コピー元装置101の制御モジュールを「コピー元制御モジュール」という。また、コピー先装置111のマスタ制御モジュールを「コピー先制御モジュール」という。
ステップS1400aにおいて、コピー元マスタ制御モジュールは、経路の再開通を検出すると、処理をステップS1401aに移行する。
ステップS1401aにおいて、コピー元マスタ制御モジュールは、コピー先装置111に対してバッファ通知要求のコマンドを発行する。この時、当該コマンドには、バッファHalt処理が行なわれていない旨の情報が付される。
ステップS1402aにいて、コピー元マスタ制御モジュールは、自身のバッファ状態をBuffering状態からActive状態に変更する。さらに、コピー元装置101に備わる他のコピー元制御モジュールに対して、バッファ状態をBuffering状態からActive状態へ変更するように依頼する。
一方、ステップS1401bにおいて、コピー元マスタ制御モジュールからバッファ状態の変更依頼を受付けると、各コピー元制御モジュールは、自身のバッファ状態をBuffering状態からActive状態に変更し、変更が完了した旨をコピー元マスタ制御モジュールに通知する。
ステップS1403aにおいて、コピー元マスタ制御モジュールは、依頼した全ての制御モジュールから、バッファ状態の変更完了の通知を受付けたか否かをチェックする。そして、依頼した全ての制御モジュールから通知を受付けると(S1403a YES)、コピー元マスタ制御モジュールは、処理をステップS1404aに移行する。
一方、ステップS1401cにおいて、コピー先マスタ制御モジュールは、コピー元装置101からバッファ通知要求を受付けると、処理をステップS1402cに移行する。
コピー先マスタ制御モジュールは、バッファの使用状況を確認し、ステップS1402cにおいてバッファ通知コマンドを発行して未使用のバッファ、つまり解放済みバッファをコピー元マスタ制御モジュールに対して通知する。
ステップS1404aにおいて、コピー先装置111からバッファ通知コマンドを受信すると、コピー元マスタ制御モジュールは、処理をステップS1405aに移行する。
ステップS1405aにおいて、コピー元マスタ制御モジュールは、自身のバッファを参照し、再転送すべき世代があるか否かを確認する。再転送すべき世代がないと判断した場合(S1405a NO)、コピー元マスタ制御モジュールは、処理をステップS1406aに移行し、通常動作を再開する。また、転送すべき世代があると判断した場合(S1405a YES)、コピー元マスタ制御モジュールは、処理をステップS1407aに移行する。
ステップS1407aにおいて、コピー元マスタ制御モジュールは、再転送の対象となっている世代のバッファセットに設定されているバッファIDと、ステップS1404aで受信したバッファIDと、に矛盾がないか否かをチェックする。
例えば、コピー元マスタ制御モジュールは、再転送の対象となっている世代のバッファセットのコピー先IDに設定されているバッファIDとステップS1404aで受信したバッファIDとが重複するか否かをチェックし、重複する場合、矛盾があると判断し(S1407 NO)、処理をステップS1408aに移行し、バッファHalt処理を実行する。
また、ステップS1407aにおいて、再転送の対象となっている世代のバッファセットに設定されているバッファIDとステップS1404aで受信したバッファIDとが重複しない場合(S1407a YES)、コピー元マスタ制御モジュールは、処理をステップS1409aに移行し、転送処理を開始する。
2)経路閉塞状態でバッファHalt処理が行なわれた場合
図15は、経路閉塞状態解消後における未使用バッファID取得処理およびバッファセット転送再開処理を示すフローチャートである。
ステップS1500aにおいて、コピー元マスタ制御モジュールは、経路の再開通を検出すると、処理をステップS1501aに移行する。
ステップS1501aにおいて、コピー元マスタ制御モジュールは、コピー先装置111に対してバッファ通知要求のコマンドを発行する。この時、当該コマンドには、バッファHalt処理が行なわれた旨の情報が付される。
一方、ステップS1501bにおいて、コピー先マスタ制御モジュールは、コピー元装置101から送られたバッファ通知要求のコマンドを受信すると、処理をステップS1502bに移行する。
ステップS1502bにおいて、コピー先マスタ制御モジュールは、バッファ通知要求コマンドに付された情報から、コピー元装置101においてバッファHalt処理が行なわれたことを検出すると、コピー元装置101に対してエラー応答を返す。そして、ステップS1503bに移行し、処理を終了する。
ステップS1502aにおいて、コピー先マスタ制御モジュールは、コピー先装置111からエラー応答を受付けると、エラー応答受信から一定時間待ってからステップS1501aの処理を1度だけ実行する。そして、処理をステップS1503に移行する。
(5)コピー先装置における経路閉塞状態検出時の処理
図16は、経路閉塞状態検出時におけるコピー先装置111での処理を示すフローチャートである。
ステップS1600において、コピー先装置111のマスタ制御モジュールは、既にコピー元装置101から転送されたデータが記憶されている世代のバッファのデータのディスク装置への展開処理が完了すると、処理をステップS1601に移行する。そして、経路閉塞が起きているか否かをチェックする。
ステップS1601において、経路閉塞を検出した場合(S1601 YES)、マスタ制御モジュールは、処理をステップS1602に移行し、図14Aおよび図14B、または、図15に示した処理の実行待ちとなる。
また、ステップS1601において、経路閉塞を検出しない場合(S1601 NO)、マスタ制御モジュールは、処理をステップS1603に移行し、ディスクへの展開処理が完了したバッファの次の世代のバッファに記憶されているデータのディスク装置への展開処理を開始する。
(本実施例に係るリモートコピー処理の変形例)
図17および図18に示すコピー元装置3301およびコピー先装置3302は、図33に示すコピー元装置3301およびコピー先装置3302と同じ構成であるが、本変形例についての説明を容易にするために、バッファセット記憶部を図示省略している。
順序性を保証したリモートコピー機能では、図17に示すように、(a)ホスト109からWrite I/O命令を受付けると、各制御モジュールは当該命令にしたがってWriteデータをディスク装置108a、108bに記憶する。同時に、(b)各制御モジュールは、Writeデータを転送してバッファに格納する。この時、Writeデータは、バッファセット単位で管理される。
そして、(c)バッファへのWriteデータの書込みが完了すると、制御モジュールは、当該Writeデータについて、バッファセット単位でデータ転送を実行し、リモートコピー処理を開始する。
(d)リモートコピーによってコピー元装置101から送られたWriteデータは、コピー先装置111の各制御モジュールに備わるバッファに記憶される。すると、制御モジュールは、バッファに記憶されたWriteデータをディスク装置1701a、1701bに反映する。
以上の処理が完了すると、(e)コピー元装置101およびコピー先装置111の制御モジュールは、バッファやBITを開放する。
しかし、図18に示すように、コピー元装置101で転送したバッファやBITのメモリ領域は、コピー先装置111でデータがディスク装置に展開されるまで解放されずに保持される。このため、(f)コピー先装置111での反映処理の遅延や、筐体間の回線状態により転送処理に遅延が発生すると、コピー先装置111のバッファやBITを格納するメモリの解放ができない。
例えば、筐体間の回線帯域の低さや不安定などにより転送処理に遅延が発生すると、その分コピー先装置111のバッファやBITのメモリ域は使用中の状態が長くなり、その間メモリの解放ができなくなる。
(g)このような状態でコピー元装置101に対してホストからWrite I/O命令を受けると、当該命令を受ける度に、コピー元装置101は、Writeデータをバッファに格納するためバッファを次々と消費する。
(h)データを格納可能なバッファのメモリ領域を確保できなくなり、コピー元装置のバッファ枯渇が発生してしまう場合が考えられる。また、設定されているバッファの大きさ以上にWriteデータが大きい場合でも、同様にバッファ枯渇が発生してしまう場合が考えられる。
バッファ枯渇の状態では、ホストからのWrite I/Oをコピー元装置101内部で処理させずに止めているため、この状態を長く継続することはできない。そのため、(i)一時的にI/O処理を停止し、一定時間経過してもバッファ枯渇状態が解消されない場合は、バッファHalt処理を行なう。バッファHalt処理によりバッファ状態をクリアするとともにI/O処理を再開させる。
この時、バッファ内のWriteデータ等の情報は専用のビットマップへ書き戻され、当該ビットマップを元に順序性を保障しないリモートコピー転送が行なわれる。したがって、順序性を保障したリモートコピーが中断されてしまう。
そこで、本実施例に係る変形例では、メモリ上のバッファセットを一時的に退避させる領域をディスク装置に確保する。以下、このディスク装置に確保された領域を「退避用バッファ」という。そして、メモリ上のバッファ(以下、必要に応じて「キャッシュバッファ」という)の使用状況に応じて、バッファセットを退避用バッファ190に退避する。この一連の処理を「バッファ退避処理」という。
例えば、コピー元装置101では、メモリ上にバッファの空き領域が少なくなると、転送対象となっているバッファセットをすぐにコピー先装置111に転送せずに退避用バッファ190に退避してメモリ上のバッファの空き領域を一定以上確保することにより、新たにWrite I/O命令を受付けてもバッファ枯渇となることを防止することができる。
そして、コピー先装置111に転送・反映されてバッファセットの領域が解放されると、解放されたバッファの領域に退避用バッファ190に退避されたバッファセットを格納し、転送処理を継続する。図19〜図21にバッファ退避処理の概要を示す。
図19および図20は、本実施例に係るバッファ退避処理を説明する図である。
図19は、バッファセット1−4が、転送中またはコピー先装置111における展開処理待ちのため使用中となっている状態で、Write I/O命令を受付けた場合のバッファ退避処理を説明する図である。
(a)Write I/O命令を受付けると、制御モジュールは、自身のディスク装置にWriteデータを記憶するとともに、(b)Writeデータのコピーデータをバッファセット5に格納する。以下、この場合のWriteデータのコピーデータも「Writeデータ」という。
ここで、制御モジュールは、例えば、バッファセットの使用率(例えば、「バッファセットで使用されているバッファの世代数」/「全バッファの世代数」)が一定以上(本実施例では50%以上)となると、(c)制御モジュールは、次にコピー先装置111に転送予定の例えばバッファセット5のデータを退避用バッファ190に退避するとともに、新たなWriteデータ等の記憶先をバッファセット5からバッファセット6に切り替える。
そして、(d)新たなWrite I/O命令を受付けると、制御モジュールは、Writeデータをディスク装置に記憶するとともに、Writeデータを切り替えられたバッファセット6に格納する。
しかし、バッファセット6よりも古いバッファセット、図19ではバッファセット5が退避用バッファ190に退避されているので、(e)制御モジュールは、バッファセット6のデータを退避用バッファ190に退避する。
そして、使用中の状態にあったバッファセット1が解放されると、(f)制御モジュールは、退避用バッファ190に記憶されているバッファセット5のデータを読み出して、バッファセット5に記憶する。
本実施例に係るリモートコピー処理の変形例において、以下の処理についてより具体的に説明する。
(1)退避用バッファの領域を作成する処理。
(2)制御モジュールへの退避用バッファの割り当て処理。
(3)ライトバックポインタ情報/ステージポインタ情報の更新処理。
(4)キャッシュバッファから退避用バッファへのライトバック処理。
(5)退避用バッファからキャッシュバッファへのステージング処理。
本実施例では、キャッシュバッファに格納されているデータを退避用バッファに格納することを「ライトバック処理」といい、退避用バッファに格納されているデータをキャッシュバッファに格納することを「ステージング処理」という。
(1)退避用バッファの領域を作成する処理
図21は、本実施例に係る退避用バッファの領域を生成する処理を示すフローチャートである。
ステップS2101において、コピー元装置101は、ユーザからの入力に応じて退避用バッファを設定すべきバッファを選択する。そして、コピー元装置101は、処理をステップS2102に移行し、ユーザからの入力に応じてRAIDを構成するためのディスク装置を選択する。
ステップS2103において、コピー元装置101は、ステップS2102で選択したディスク装置はRAIDを構成する条件を満たすか否かをチェックする。条件を満たさない場合(S2103 NO)、コピー元装置101は、例えば、他のディスク装置を指定すべき旨を表示装置等に表示して、処理をステップS2102に移行する。
ステップS2103において、条件を満たす場合(S2103 YES)、コピー元装置101は、処理をステップS2104に移行する。
ステップS2104において、コピー元装置101は、ステップS2102で選択されたディスク装置で構成されるRAIDグループを生成し、コピー元装置101の装置構成などを保持する構成情報にその情報を反映する。
ステップS2105において、コピー元装置101は、ステップS2104で作成したRAIDグループ内に複数のボリュームを作成する。コピー元装置101は、処理をステップS2106に移行し、ステップS2105で作成した論理ユニットの構成を構成情報に反映する。
ステップS2107において、コピー元装置101は、図22で示す処理によって、各制御モジュールで使用するボリューム(以下、必要に応じて「担当ボリューム」という)を決定する。各制御モジュールは、この決定したボリュームを退避用バッファの領域として使用する。
(2)制御モジュールへの退避用バッファの割り当て処理
図22は、本実施例に係る退避用バッファの制御モジュールへの割り当て(ステップS2107)の具体的な処理を示すフローチャートである。
ステップS2201において、コピー元装置101は、構成情報を参照し、バッファに割り当てるRAIDグループの数(A)を取得する。
さらに、コピー元装置101は、処理をステップS2202に移行し、構成情報からコピー元装置に実装されている制御モジュールの数(B)を取得する。
ステップS2203において、コピー元装置101は、RAIDグループあたりの制御モジュールの数(C)=(B)/(A)を算出する。そして、処理をステップS2204に移行し、各RAIDグループに対して(C)個の制御モジュールを割り当てる。
ステップS2205において、コピー元装置101は、各RAIDグループのボリュームの数を(C)で除算し、担当ボリュームの数(D)を算出する。そして、コピー元装置101は、処理をステップS2206に移行し、ステップS2205の算出結果から、RAIDグループ毎に割り当てた制御モジュールに対して担当ボリュームを(D)個を割り当てる。
ステップS2207において、コピー元装置101は、以上の処理によって決定した構成を構成情報に反映するとともに、各制御モジュールが備える設定情報にも反映し、処理を終了する(ステップS2208)。
図23は、本実施例に係る退避用バッファを1つのRAIDグループで構成する場合の構成例を示す図である。
図23に示す退避用バッファとして用いられるRAIDグループ2301は、論理ユニットLU#0〜LU#Fを有する。また、横長に点線で囲まれたLU#0−LU#3と、LU#4−LU#7と、LU#8−LU#Bと、LU#C−LU#Fと、がそれぞれボリュームグループを構成する。RAIDグループ2301は、ボリュームグループ単位で使用される。
そして、制御モジュール毎に、キャッシュバッファとボリュームグループとが割り当てられている。例えば、制御モジュール#00のキャッシュバッファには、論理ユニットLU#0、#4、#8および#Cが割り当てられている。同様に、制御モジュール#01のキャッシュバッファには、論理ユニットLU#1、#5、#9および#Dが割り当てられ、制御モジュール#02のキャッシュバッファには、論理ユニットLU#2、#6、#Aおよび#Eが割り当てられ、制御モジュール#03のキャッシュバッファには、論理ユニットLU#3、#7、#Bおよび#Fが割り当てられている。
なお、ボリュームグループを構成する論理ユニットの数が実装制御モジュール数を上回る場合は、1つの制御モジュールに対して複数の論理ユニットを割り当ててもよい。
また、各ボリュームグループを構成する論理ユニットは、キャッシュバッファと同様に、キャッシュバッファの1世代と同じサイズで世代毎に領域が分割されており、各制御モジュールのバッファセットのデータは、例えば、図23に示す矢印に示すように、各制御モジュールに割り当てられたボリュームグループの任意の世代の領域に記憶される。 図24は、本実施例に係る退避用バッファを2つのRAIDグループで構成する場合の構成例を示す図である。
図24に示す退避用バッファは、論理ユニットLU#0〜LU#Fを備えるRAIDグループ2401と、論理ユニットLU#10〜LU#1Fを備えるRAIDグループ2402と、で構成される。
また、RAIDグループ2401において、LU#0、LU#1、LU#4、LU#5、LU#8、LU#9、LU#CおよびLU#Dと、LU#2、LU#3、LU#6、LU#7、LU#A、LU#B、LU#EおよびLU#Fと、がそれぞれボリュームグループを構成する。
同様に、RAIDグループ2402において、LU#10、LU#11、LU#14、LU#15、LU#18、LU#19、LU#1CおよびLU#1Dと、LU#12、LU#13、LU#16、LU#17、LU#1A、LU#1B、LU#1EおよびLU#1Fと、がそれぞれボリュームグループを構成する。
そして、制御モジュール毎に、キャッシュバッファとボリュームグループとが割り当てられている。例えば、制御モジュール#00のキャッシュバッファには、論理ユニットLU#0、LU#1、LU#4、LU#5、LU#8、LU#9、LU#CおよびLU#Dで構成されるボリュームグループが割り当てられている。同様に、制御モジュール#02のキャッシュバッファには、論理ユニットLU#10、LU#11、LU#14、LU#15、LU#18、LU#19、LU#1CおよびLU#1Dで構成されるボリュームグループが割り当てられている。
また、各ボリュームグループを構成する論理ユニットは、キャッシュバッファと同様に、世代毎に領域が分割されており、各制御モジュールのバッファセットのデータは、例えば、図24に示す矢印に示すように、各制御モジュールに割り当てられたボリュームグループの任意の世代の領域に記憶される。
図24に示したように、キャッシュバッファに対して2以上のRAIDグループを割り当てた場合、各RAIDグループの負荷を分散する効果が得られる。なお、図24には、2つのRAIDグループを使用した場合を示したが、2以上のRAIDグループを使用しても同様の効果を得ることができるのは当然である。
上述のように、本実施例に係る退避用バッファは、キャッシュバッファと同様のサイズで世代毎に領域を分割して使用される。図25にその概要を示す。退避用バッファの各世代に、キャッシュバッファに記憶されているバッファセット、BITおよびバッファが格納される。
(3)ライトバックポインタ情報/ステージポインタ情報の更新処理
本実施例に係るバッファ退避処理では、ライトバック対象の世代のバッファセットを退避用バッファにライトバックする位置(世代)を記憶するライトバックポインタ情報(第1のポインタ)と、どの世代まで退避用バッファからデータを読み出してステージング処理を行なったかを記憶するステージポインタ情報(第2のポインタ)と、の2つの情報により、退避用バッファに格納するデータの書き込み位置(世代)と退避用バッファから読み出すデータの読み出し位置(世代)とを管理する。
図26は、本実施例に係るバッファ退避処理におけるライトバックポインタ情報・ステージポインタ情報を説明する図である。
例えば、制御モジュールにおいてx回目のバッファセット切り替えが行なわれた場合、ステージポインタ情報は、最後に処理された世代を情報として保持する。ライトバックポインタ情報は、ボリュームグループの世代xを情報として保持する。なお、キャッシュバッファの使用状況によって、バッファ退避処理を行なうか否かが変わるため、本実施例では、バッファセットx作成時にキャッシュバッファへの書き込み領域を決定している。
また、制御モジュールにおいてx+1回目のバッファセット切り替え時に世代xのバッファセットがすぐにコピー先装置111に転送された場合、世代xに格納されているデータがステージング処理されて転送処理が完了すると、ステージポインタ情報は、世代xから世代x+1に更新される。ライトバックポインタ情報は、ボリュームグループの世代x+1を情報として保持する。ただし、バッファセットx+1作成時にキャッシュバッファへの書き込み領域が決定される。
また、制御モジュールにおいてx+2回目のバッファセット切り替え時に世代x+1が退避用バッファにライトバックされた場合、ステージポインタ情報が保持するボリュームグループの世代が世代xであれば、次のステージング対象は世代x+1となる。ライトバックポインタ情報は、ボリュームグループの世代x+2を保持する。ただし、バッファセットx+2作成時にキャッシュバッファへの書込み領域が決定される。
図25に示したようにライトバックポインタ情報には、バッファセットが作成される毎に作成されたバッファセットの次の世代が情報として保持される。また、ステージポインタ情報は、切り替えられた旧世代のバッファセットの処理が完了する毎に、例えば、コピー先にデータ転送が完了しかつコピー先でデータの展開が完了する毎にステージポインタ情報が更新される。退避用バッファとして割当てたボリュームグループが複数ある場合、ボリュームグループに割り当てられた番号の小さい順にボリュームグループを使用していき、ボリュームグループを最後まで使用した場合は、最初にもどりサイクリックにボリュームグループを使用する。
以下、図27および図28にライトバックポインタ情報およびステージポインタ情報の具体的な更新処理を説明する。
図27は、本実施例に係るライトバックポインタ情報の更新処理を示すフローチャートである。
ステップS2700aにおいて、コピー元装置101のマスタ制御モジュールは、バッファセットの切替え処理を開始すると、処理をステップS2701aに移行する。
ステップS2701aにおいて、マスタ制御モジュールは、現在保持しているライトバックポインタ情報を1つ進める。例えば、現在保持している世代を1だけインクリメントして次の世代を情報として保持する。
ステップS2702aにおいて、マスタ制御モジュールは、退避用バッファに新規のバッファセットを作成し、バッファセットの世代をライトバックポインタ情報に設定する。例えば、ステップS2701aの世代をバッファセットの世代とする。
さらに、マスタ制御モジュールは、コピー元装置101に備わる他の制御モジュールに対して、ステップS2702aと同様の処理を依頼する。
一方、ステップS2701bにおいて、各制御モジュールは、退避用バッファに新規のバッファセットを作成し、当該バッファセットの世代をライトバックポインタ情報に設定する。そして、ライトバックポインタ情報の設定が完了すると、その旨をマスタ制御モジュールに通知する。
ステップS2703aにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には(S2703a NO)、ステップS2703aの処理を繰り返す。
ステップS2703aにおいて、依頼した全ての制御モジュールから応答を受信したと判断すると(S2703a YES)、マスタ制御モジュールは、処理をステップS2704aに移行し、ライトバックポインタ情報の更新処理を終了する。
図28は、本実施例に係るステージポインタ情報の更新処理を示すフローチャートである。
ステップS2800aにおいて、コピー元装置101のマスタ制御モジュールは、バッファセットの解放処理を開始すると、処理をステップS2801aに移行する。
ステップS2801aにおいて、マスタ制御モジュールは、解放対象のバッファセットがあるか否かを判別する。解放対象となるバッファセットがない場合(S2801a NO)、マスタ制御モジュールは、ステップS2804aに移行し、処理を終了する。
なお、本実施例では、コピー先装置111への転送が完了し、かつ、コピー先装置111から転送したデータのディスク装置への展開が完了した旨の通知を受けたバッファセットを領域解放の対象と判断する。
ステップS2801aにおいて、解放対象となるバッファセットがある場合(S2801a YES)、マスタ制御モジュールは、処理をステップS2802aに移行する。
ステップS2802aにおいて、マスタ制御モジュールは、解放対象となるバッファセット(BITを含む)とそのバッファ領域を解放するとともに、ステージポインタ情報を更新する。そして、マスタ制御モジュールは、コピー元装置101に備わる他の制御モジュールに対して、ステップS2802aと同様の処理を依頼する。
ステップS2801bにおいて、各制御モジュールは、マスタ制御モジュールから依頼を受けると、解放対象のバッファセット(BITを含む)とそのバッファ領域を解放するとともに、ステージポインタ情報を更新する。処理が完了すると、各制御モジュールは、マスタ制御モジュールに対して完了通知を行なう。
ステップS2803aにおいて、マスタ制御モジュールは、依頼した制御モジュールからの応答を確認し、全ての制御モジュールから応答を受信したか否かを判別する。そして、応答を受信していない制御モジュールがある場合(S2803a NO)、ステップS2803の処理を繰返す。
また、ステップS2803aにおいて、全ての制御モジュールから応答を受信したと判断した場合(S2803a YES)、マスタ制御モジュールは、ステップS2804aに移行してバッファセットの解放処理を終了する。
(4)キャッシュバッファから退避用バッファへのライトバック処理
図29は、本実施例に係るライトバック処理を示すフローチャートである。
ステップS2900aにおいて、例えば、Writeデータのバッファセットへの格納処理が完了すると、コピー元装置101におけるマスタ制御モジュールは、処理をステップS2901aに移行する。
ステップS2901aにおいて、マスタ制御モジュールは、キャッシュバッファに転送中または開放待ちのバッファセットの世代数(以下、「使用中の世代数」という)を取得する。そして、使用中の世代数とあらかじめ決められた閾値、例えば、全世代数の50%の値とを比較し、使用中の世代数が閾値より少ない場合(S2901a NO)は、処理をステップS2906aに移行し、使用中の世代数が閾値以上の場合は(S2901a YES)、処理をステップS2902aに移行する。
ステップS2902aにおいて、マスタ制御モジュールは、使用中の世代以外の世代のバッファセット、BITおよびバッファのデータを、当該バッファセットに割当てられた退避用バッファに退避するライトバック処理を行なう。
ライトバック処理が完了すると、マスタ制御モジュールは、コピー元装置101に備わる他の制御モジュールに対して、ステップS2902aと同様の処理を依頼する。
ステップS2901bにおいて、各制御モジュールは、マスタ制御モジュールから依頼のあったバッファセットおよびBITを、当該バッファセットに割当てられた退避用バッファに退避する。
ステップS2902bにおいて、各制御モジュールは、S2901bでライトバック対象となったバッファセットに対応するバッファにWriteデータが記憶されているか否かをチェックし、Writeデータがバッファにある場合(S2902b YES)、処理をステップS2903bに移行する。
ステップS2903bにおいて、各制御モジュールは、バッファに格納されているWriteデータを、該当するバッファセットに割当てられた退避用バッファに退避する。そして、マスタ制御モジュールに依頼された処理の完了を通知する。
一方、ステップS2903aにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には(S2903a NO)、ステップS2903aの処理を繰返す。
全ての制御モジュールから応答を受信した場合(S2903a YES)、ステップS2904aにおいて、マスタ制御モジュールは、バッファセット、BITおよびバッファの領域を解放する。バッファセット等の解放が完了すると、マスタ制御モジュールは、コピー元装置101に備わる他の制御モジュールに対して、ステップS2904aと同様の処理を依頼する。
一方、ステップS2904bにおいて、各制御モジュールは、マスタ制御モジュールからの依頼に応じて、該当するバッファセット等を解放する。バッファセット等の解放が完了すると、各制御モジュールは、マスタ制御モジュールに対して完了通知を行なう。
ステップS2905aにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には(S2906a NO)、ステップS2905aの処理を繰り返す。
ステップS2905aにおいて、依頼した全ての制御モジュールから応答を受信したと判断すると、マスタ制御モジュールは、処理をステップS2906aに移行し、バッファ退避処理を終了する。
図30および図31は、本実施例に係るライトバック処理の具体例を示す図である。
図30および図31は、コピー元装置101が制御モジュール#0〜#3を備え、各制御モジュールが8世代のバッファを備えるコピー元装置101において、図29で説明した閾値が4世代の場合のライトバック処理を説明する図である。
(a)バッファセットの世代1〜4が、転送中、転送完了待ち、解放待ちのいずれかの状態、かつ、(b)世代5がライトバック処理中の場合を考える。この場合、(c)Writeデータを格納するバッファセットの世代は世代6となる。
図31に示すように、(d)世代1が使用していた領域が解放されると、マスタ制御モジュールは、ステージポインタ情報を更新し、次のステージング処理によるデータの格納先を世代1に設定する。
今、世代5はライトバック処理対象となっているので、ステージング対象も世代5となっている。世代5のライトバック処理が処理中の場合、(e)キャッシュバッファ上にデータがあるので、世代5のライトバック処理を中断し、世代5のバッファセットのコピー先装置111への転送処理を開始する。
また、世代5のライトバック処理が完了している場合、退避用バッファからから世代5のバッファセットのデータを読み出して世代1の領域に記憶するステージング処理を行なう。
(5)退避用バッファからキャッシュバッファへのステージング処理
図32Aおよび図32Bは、本実施例に係るステージング処理を示すフローチャートである。
ステップS3200aにおいて、旧世代の解放処理が完了すると、コピー元装置101におけるマスタ制御モジュールは、処理をステップS3201aに移行する。
ステップS3201aにおいて、マスタ制御モジュールは、ステージング対象となる世代を決定する。例えば、マスタ制御モジュールは、ステージポインタ情報を参照し、ステージポインタ情報に記憶されている世代を1だけインクリメントし、インクリメントした世代を新たにステージング対象となる世代に決定する。
ステップS3202aにおいて、マスタ制御モジュールは、ステージング対象のステージング先の領域は解放処理待ちか否かをチェックする。ステージング先の領域が解放待ちの場合(S3202a YES)、マスタ制御モジュールは、処理をステップS3203aに移行する。
ステップS3203aにおいて、マスタ制御モジュールは、ステージング対象の世代に1を加算した世代を新たなステージング対象の世代に設定する。そして、マスタ制御モジュールは、処理をステップS3202aに移行する。
一方、ステップS3202aにおいて、ステージング先の領域が解放待ちでない場合(S3202a NO)、マスタ制御モジュールは、処理をステップS3204aに移行する。
ステップS3204aにおいて、マスタ制御モジュールは、ステージング先のバッファセットが転送中か否かをチェックする。ステージング先のバッファセットが転送中の場合(S3204a YES)、マスタ制御モジュールは、処理をステップS3203aに移行する。
一方、ステップS3204aにおいて、ステージング先のバッファセットが転送中でない場合(S3204a NO)、マスタ制御モジュールは、処理をステップS3205aに移行する。
ステップS3205aにおいて、マスタ制御モジュールは、ステージング対象がステージング処理中か否かをチェックする。ステージング対象がステージング処理中の場合(S3205a NO)、マスタ制御モジュールは、処理をステップS3203aに移行する。
一方、ステップS3205aにおいて、ステージング対象がステージング処理中でない場合(S3205a YES)、マスタ制御モジュールは、処理をステップS3206aに移行する。
ステップS3206aにおいて、マスタ制御モジュールは、ステージング対象がライトバック処理中か否かをチェックする。ステージング対象がライトバック処理中の場合(S3206a YES)、マスタ制御モジュールは、処理をステップS3207aに移行する。
ステップS3207aにおいて、マスタ制御モジュールは、自身のライトバック処理を中断するとともに、コピー元装置101に備わる他の制御モジュールに対して、ライトバック処理の中断を依頼する。
ステップS3201bにおいて、各制御モジュールは、マスタ制御モジュールからの依頼を受けると、処理中のライトバック処理を中断する。そして、マスタ制御モジュールに対して、ライトバック処理を中断した旨を通知する。
ステップS3208aにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信したか否かをチェックし、応答を受信していない制御モジュールがある場合には(S3208a NO)、ステップS3208aの処理を繰り返す。
ステップS3208aにおいて、依頼した全ての制御モジュールから応答を受信したと判断すると(S3208a YES)、マスタ制御モジュールは、処理をステップS3209aに移行し、ステージング処理を終了する。
一方、ステップS3206aにおいて、ステージング対象がライトバック処理中でないと判断した場合(S3206a NO)、マスタ制御モジュールは、処理をステップS3210aに移行する。
ステップS3210aにおいて、マスタ制御モジュールは、ステージング先のバッファセットが、Writeデータ等の格納処理中か否かをチェックする。ステージング先のバッファセットが格納処理中と判断した場合(S3210a YES)、マスタ制御モジュールは、処理をステップS3211aに移行し、ステージング処理を終了する。
ステップS3210aにおいて、ステージング先のバッファセットが格納処理中でないと判断した場合(S3210a YES)、マスタ制御モジュールは、処理をステップS3212aに移行する。
ステップS3212aにおいて、マスタ制御モジュールは、ステージング先のバッファセットを取得する。そして、マスタ制御モジュールは、処理をステップS3213aに移行し、ステージ処理用バッファセットに既にステージング対象のデータが格納されているか否かをチェックする。
ステージング対象のデータがある場合(S3213a YES)、マスタ制御モジュールは、ステップS3217aに移行してステージング処理を終了する。また、ステージング対象のデータがない場合(S3213a NO)、マスタ制御モジュールは、処理をステップS3214aに移行する。
ステップS3214aにおいて、マスタ制御モジュールは、退避用バッファからステージング対象の世代のデータを取得し、ステップS3212aで取得したバッファセットに格納する。そして、処理をステップS3215aに移行する。
ステップS3215aにおいて、マスタ制御モジュールは、各担当制御モジュールに対して、ステップS3214aと同様に、退避用バッファからステージング対象の世代のデータを取得してステージング処理を行うように依頼する。
ステップS3202bにおいて、依頼を受けた制御モジュールは、マスタ制御モジュールから依頼のあったバッファセットについてステージング処理を行なう。そして、処理をステップS3203bに移行する。
ステップS3203bにおいて、各制御モジュールは、退避用バッファを参照し、ステージング対象の世代のバッファにステージング処理をすべきWriteデータがあるか否かを判別する。そして、Writeデータがある場合(S3203b YES)、各制御モジュールは、当該Writeデータに対してステージング処理を行なう(S3204b)。ステージング処理が完了すると、各制御モジュールは、マスタ制御モジュールに対して完了通知を行なう。
また、ステップS3203bにおいて、ステージング対象の世代のバッファにステージング処理をすべきWriteデータがない場合(S3203b NO)、各制御モジュールは、マスタ制御モジュールに対して完了通知を行う。
ステップS3216aにおいて、マスタ制御モジュールは、依頼した全ての制御モジュールから応答を受信するまで完了通知を監視する。そして、依頼した全ての制御モジュールから応答を受信すると(S3216a YES)、マスタ制御モジュールは、処理をステップS3217aに移行し、ステージング処理を終了する。
以上に説明したように、本実施例に係るリモートコピー処理では、例えばステップS907aで説明されたように、バッファへの格納処理が完了して転送処理を行う直前に、バッファセットのコピー元IDとコピー先IDとのマッチング処理を行なって、バッファセットを確立するので、コピー元装置101に備わる記録バッファ201およびバッファセット記憶部202といったバッファには、ホスト109からのWrite I/Oに係るWriteデータを、バッファの容量がなくなるまで格納することが可能となる。
その結果、順序性を保証したリモートコピーに使用するバッファに関し、コピー先装置111に備わるバッファが、コピー元装置101に備わるバッファより少ない場合であっても、コピー元装置が有するバッファを有効に使用することが可能となる。
また、コピー元装置101−コピー先装置111間のネットワークに何らかのトラブルが生じる等して経路閉塞状態となった場合でも、コピー元装置101に備わるバッファに容量が許す限りWriteデータを格納することができるので、当該バッファが枯渇するまでに経路閉塞状態を解消すれば、順序性を保証したリモートコピー処理を中断する必要がなくなるという効果を奏する。その結果、リモートコピー処理の信頼性・安定性を向上するという効果を奏する。
さらに、本実施例にリモートコピー処理の変形例で示した退避用バッファ190を利用してバッファ退避処理を行なうことにより、コピー元装置101に備わるバッファが枯渇することがなくなるので、コピー元装置101−コピー先装置111間のネットワークに何らかのトラブルが生じる等して経路閉塞状態となった場合でも、ホスト側の制限等の条件が許す限り、順序性を保証したリモートコピー処理を継続することが可能となるという効果を奏する。
以上の実施例1〜nを含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
上位装置から送信されるデータを記憶する第1の記憶ボリュームと前記第1の記憶ボリュームへの記憶を制御する第1の制御部とを備えた第1の記憶装置と、前記第1の記憶装置に記憶されたデータがネットワークを介してコピーされる第2の記憶ボリュームと前記第2の記憶ボリュームへの記憶を制御する第2の制御部とを備えた第2の記憶装置とを備えたストレージシステムであって、
前記第1の制御部は、
前記第2の記憶装置に設けられた受信用バッファの識別に用いられる受信用バッファ識別情報を取得する識別情報取得部と、
前記第2の記憶装置の前記受信用バッファに転送するデータを格納する送信用バッファと、
転送処理を行う際に、前記送信用バッファに設けられた送信用バッファ識別情報と前記受信用バッファ識別情報とに基づいて前記送信用バッファと前記受信用バッファとを対応づけるデータ転送制御部と、
前記対応づけに基づいて前記送信用バッファのデータを前記受信用バッファに対して転送する転送処理部とを備えたことを特徴とするストレージシステム。
(付記2)
前記第1の記憶装置に、前記送信用バッファに記憶されたデータを一時的に退避する退避用ボリュームと、前記退避用ボリュームへのデータ退避を制御する退避制御部とをさらに備え、
前記退避制御部は、前記送信用バッファの使用状態が所定の状態に達すると前記送信用バッファに格納されたデータを世代単位で前記退避用バッファに退避させることを特徴とする付記1に記載のストレージシステム。
(付記3)
前記退避制御部は、前記送信用バッファに格納されたデータのうち、転送用意が完了し、かつ転送順位が低い世代のデータを前記退避用ボリュームに退避させることを特徴とする付記2に記載のストレージシステム。
(付記4)
前記制御部に、前記送信用バッファの書き込み状態を示す第1のポインタを備え、
前記退避制御部は、前記第1のポインタに基づいて前記退避用ボリュームに前記転送順位が低い世代のデータを退避さることを特徴とする付記3に記載のストレージシステム。
(付記5)
前記制御部に、前記送信用バッファの読み出し状態を示す第2のポインタと、
前記第2のポインタに基づいて前記退避用ボリュームから前記転送順位が低い世代のデータを復元する復元制御部をさらに備えた事を特徴とする付記1から4に記載のストレージシステム。
(付記6)
前記前記復元制御部は、前記送信用バッファに格納されている転送順位が低い世代のデータが使用可能な場合は、前記転送順位が低い世代のデータに付随する制御データのみを前記退避用ボリュームから前記送信用バッファに復元する事を特徴とする付記1から4に記載のストレージシステム。
(付記7)
上位装置から送信されるデータを記憶する第1の記憶ボリュームと、
前記第1の記憶ボリュームへの記憶制御とネットワークを介して接続される第2の記憶ボリュームへのコピー制御をおこなう制御部とを備えた記憶装置であって、
前記制御部は、
前記第2の記憶ボリュームを備える受信側記憶装置に設けられた受信用バッファの識別に用いられる受信用バッファ識別情報を取得する識別情報取得部と、
前記第2の記憶装置の前記受信用バッファに転送するデータを格納する送信用バッファと、
転送処理を行う際に、前記送信用バッファに設けられた送信用バッファ識別情報と前記受信用バッファ識別情報とに基づいて前記送信用バッファと前記受信用バッファとを対応づけるデータ転送制御部と、
前記対応づけに基づいて前記送信用バッファのデータを前記受信用バッファに対して転送する転送処理部とを備えたことを特徴とする記憶装置。
(付記8)
送信装置に、前記送信用バッファに記憶されたデータを一時的に退避する退避用ボリュームと、前記退避用ボリュームへのデータ退避を制御する退避制御部とをさらに備え、
前記退避制御部は、前記送信用バッファの使用状態が所定の状態に達すると前記送信用バッファに格納されたデータを世代単位で前記退避用バッファに退避させることを特徴とする付記7に記載の記憶装置。
(付記9)
前記退避制御部は、前記送信用バッファに格納されたデータのうち、転送用意が完了し、かつ転送順位が低い世代のデータを前記退避用ボリュームに退避させることを特徴とする付記8に記載の記憶装置。
(付記10)
前記制御部に、前記送信用バッファの書き込み状態を示す第1のポインタを備え、
前記退避制御部は、前記第1のポインタに基づいて前記退避用ボリュームに前記転送順位が低い世代のデータを退避さることを特徴とする付記9に記載の記憶装置。
(付記11)
前記制御部に、前記送信用バッファの読み出し状態を示す第2のポインタと、
前記第2のポインタに基づいて前記退避用ボリュームから前記転送順位が低い世代のデータを復元する復元制御部をさらに備えた事を特徴とする付記8から10に記載の記憶装置。
(付記12)
前記前記復元制御部は、前記送信用バッファに格納されている転送順位が低い世代のデータが使用可能な場合は、前記転送順位が低い世代のデータに付随する制御データのみを前記退避用ボリュームから前記送信用バッファに復元する事を特徴とする付記8から10に記載の記憶装置。
(付記13)
上位装置から送信されるデータを記憶する第1の記憶ボリュームへの記憶制御とネットワークを介して接続される第2の記憶ボリュームへのコピー制御をおこなう制御部とを備えた記憶装置の制御方法であって、
前記第2の記憶ボリュームを備える受信側記憶装置に設けられた受信用バッファの識別に用いられる受信用バッファ識別情報を取得する識別情報取得ステップと、
前記受信側記憶装置の前記受信用バッファに転送するデータを送信用バッファに格納するデータ格納ステップと、
転送処理を行う際に、前記送信用バッファに設けられた送信用バッファ識別情報と前記受信用バッファ識別情報とに基づいて前記送信用バッファと前記受信用バッファとを対応づけるデータ転送制御ステップと、
前記対応づけに基づいて前記送信用バッファのデータを前記受信用バッファに対して転送する転送処理ステップとを備えたことを特徴とする記憶装置の制御方法。
(付記14)
前記記憶装置に備えられた退避用ボリュームに、前記送信用バッファに記憶されたデータを一時的に退避する退避制御ステップをさらに備え、
前記退避制御ステップは、前記送信用バッファの使用状態が所定の状態に達すると前記送信用バッファに格納されたデータを世代単位で前記退避用バッファに退避させることを特徴とする付記13に記載の記憶装置の制御方法。
(付記15)
前記退避制御ステップは、前記送信用バッファに格納されたデータのうち、転送用意が完了し、かつ転送順位が低い世代のデータを前記退避用ボリュームに退避させることを特徴とする付記15に記載の記憶装置の制御方法。
(付記16)
前記退避制御ステップは、前記送信用バッファの書き込み状態を示す第1のポインタに基づいて前記退避用ボリュームに前記転送順位が低い世代のデータを退避さることを特徴とする付記15に記載の記憶装置の制御方法。
(付記17)
送信用バッファの読み出し状態を示す第2のポインタに基づいて前記退避用ボリュームから前記転送順位が低い世代のデータを復元する復元制御部をさらに備えた事を特徴とする付記14から16に記載の記憶装置の制御方法。
(付記18)
前記前記復元制御ステップは、前記送信用バッファに格納されている転送順位が低い世代のデータが使用可能な場合は、前記転送順位が低い世代のデータに付随する制御データのみを前記退避用ボリュームから前記送信用バッファに復元する事を特徴とする付記14から16に記載の記憶装置の制御方法。