図1を参照して、略図20は、ホスト22とローカル記憶装置24と遠隔記憶装置26との間の関係を示している。ホスト22は、ホストアダプタ(HA)28を介してローカル記憶装置24からデータを読み出し、ローカル記憶装置24へデータを書き込む。ホストアダプタ28は、ホスト22とローカル記憶装置24との間のインターフェースを円滑にする。略図20は、1つのホスト22および1つのHA28のみを示しているが、複数のHAを使用でき、1つ以上のHAに1つ以上のホストを接続できることが当業者には理解されよう。
ローカル記憶装置24からのデータは、RDFリンク29を介して遠隔記憶装置26へコピーされ、それによって、遠隔記憶装置26のデータは、ローカル記憶装置24のデータと同一になる。1つのリンク29のみが示されているが、記憶装置24、26の間に追加リンクを有することができ、記憶装置24、26の一方または双方と他の記憶装置(図示せず)との間にリンクを有することができる。これに加えて、リンク29は、直接接続(有線、無線、またはそれらの或る組み合わせ)を使用して提供することもできるし、ネットワーク(インターネット等)を使用して提供することもできるし、データを搬送する他の任意の適切な手段を使用して提供することもできる。ローカル記憶装置24から遠隔記憶装置26へのデータの転送の間、時間遅延が存在することがあり、その結果、遠隔記憶装置26は、一定の時点で、ローカル記憶装置24のデータと同一でないデータを含む
ことがあることに留意されたい。RDFを使用した通信は、例えば、米国特許第5,742,792号に記載されている。この米国特許は、参照により本明細書に援用される。
ローカル記憶装置24は、第1の複数のRDFアダプタユニット(RA)30a、30b、30cを含み、遠隔記憶装置26は、第2の複数のRA32a〜32cを含む。RA30a〜30c、32a〜32cは、RDFリンク29に接続され、ホストアダプタ28と同様のものであるが、記憶装置24、26間でデータを転送するのに使用される。RA30a〜30c、32a〜32cに関連して使用されるソフトウェアについては、以下でさらに詳細に説明する。
記憶装置24、26は、1つ以上のディスクを含むことができる。各ディスクは、記憶装置24、26のそれぞれに記憶されたデータの異なる部分を含む。図1は、複数のディスク33a、33b、33cを含む記憶装置24、および、複数のディスク34a、34b、34cを含む記憶装置26を示している。本明細書で説明するRDFの機能は、ローカル記憶装置24のディスク33a〜33cの少なくとも一部のデータが、RDFを使用して、遠隔記憶装置26のディスク34a〜34cの少なくとも一部へコピーされるように適用することができる。記憶装置24、26のそれ以外のデータは、記憶装置24、26間でコピーされず、したがって、同一でないようにすることが可能である。
ディスク33a〜33cのそれぞれは、対応するディスクアダプタユニット(DA)35a、35b、35cに接続される。このDA35a、35b、35cは、ディスク33a〜33cの対応するものへデータを提供し、ディスク33a〜33cの対応するものからデータを受信する。同様に、遠隔記憶装置26の複数のDA36a、36b、36cも、ディスク34a〜34cの対応するものへデータを提供し、ディスク34a〜34cの対応するものからデータを受信するのに使用される。ローカル記憶装置24のDA35a〜35cとHA28とRA30a〜30cとの間には、内部データパスが存在する。同様に、遠隔記憶装置26のDA36a〜36cとRA32a〜32cとの間にも、内部データパスが存在する。他の実施の形態では、2つ以上のディスクが1つのDAによってサービスの提供を受けることが可能であり、2つ以上のDAが1つのディスクにサービスを提供することが可能であることに留意されたい。
また、ローカル記憶装置24は、DA35a〜35cとHA28とRA30a〜30cとの間で転送されるデータを円滑にするのに使用できるグローバルメモリ37も含む。このメモリ37は、DA35a〜35c、HA28、およびRA30a〜30cの1つ以上によって実行されるタスクと、ディスク33a〜33cの1つ以上からフェッチされたデータ用のキャッシュとを含むことができる。同様に、遠隔記憶装置26も、DA36a〜36cおよびRA32a〜32cの1つ以上によって実行されるタスクと、ディスク34a〜34cの1つ以上からフェッチされたデータ用のキャッシュとを含むことができるグローバルメモリ38を含む。メモリ37、38の使用については、以下でさらに詳細に説明する。
ディスク33a〜33cに対応するローカル記憶装置24のストレージ空間は、複数のボリュームまたは論理デバイスに細分することができる。これらの論理デバイスは、ディスク33a〜33cの物理ストレージ空間に対応することもあるし、対応しないこともある。したがって、例えば、ディスク33aが、複数の論理デバイスを含むこともあるし、あるいは、単一の論理デバイスが、ディスク33a、33bの双方にまたがることもできる。同様に、ディスク34a〜34cを備える遠隔記憶装置26の記憶空間も、複数のボリュームまたは論理デバイスに細分することができ、これら論理デバイスのそれぞれは、ディスク34a〜34cの1つ以上に対応することもあるし、対応しないこともある。
ローカル記憶装置24の一部と遠隔記憶装置26の一部との間のRDFマッピングを提供するには、ローカル記憶装置24の論理デバイスの遠隔ミラーである遠隔記憶装置26の論理デバイスをセットアップすることが必要である。ホスト22は、ローカル記憶装置24の論理デバイスからデータを読み出し、この論理デバイスへデータを書き込み、RDFマッピングによって、変更されたデータをローカル記憶装置24から遠隔記憶装置26へ、RA30a〜30c、32a〜32c、およびRDFリンク29を使用して転送させる。定常状態の動作時には、遠隔記憶装置26の論理デバイスは、ローカル記憶装置24の論理デバイスのデータと同一のデータを含む。ホスト22がアクセスするローカル記憶装置24の論理デバイスは、「R1ボリューム」(または単に「R1」)と呼ばれる一方、R1ボリュームのデータのコピーを含む遠隔記憶装置26の論理デバイスは、「R2ボリューム」(または単に「R2」)と呼ばれる。したがって、ホストは、R1ボリュームからデータを読み出し、R1ボリュームへデータを書き込み、RDFは、R1ボリュームからR2ボリュームへのデータの自動的なコピーおよび更新をハンドリングする。本明細書で説明するシステムは、ソフトウェア、ハードウェア、ならびに/または、ソフトウェアおよびハードウェアの組み合わせを使用して実施することができる。ソフトウェアおよびハードウェアの組み合わせにおいては、ソフトウェアは、適切な記憶媒体に記憶することができ、1つ以上のプロセッサによって実行することができる。
図2を参照して、ホスト22からローカル記憶装置24および遠隔記憶装置26へのデータのパスが示されている。ホスト22からローカル記憶装置24へ書き込まれたデータは、ローカル記憶装置24のデータ要素51によって示すように、ローカルに記憶される。また、ホスト22がローカル記憶装置24に書き込むデータは、ローカル記憶装置24がリンク29を介して遠隔記憶装置26へ送信することに関連して、ローカル記憶装置24によって保持される。
本明細書で説明するシステムでは、ホスト22による(例えば、1つのレコード、複数のレコード、トラック等の)各データ書き込みにシーケンス番号が割り当てられる。このシーケンス番号は、書き込みに関連した適切なデータフィールドに設けることができる。図2では、ホスト22による書き込みは、シーケンス番号Nが割り当てられたものとして示されている。ホスト22が実行する、シーケンス番号Nが割り当てられた書き込みのすべては、単一の大量のデータ・セット52に収集される。このデータ・セット52は、ホスト22によりほぼ同時に行われた複数の個別の書き込みを表す。
一般に、ローカル記憶装置24は、或るシーケンス番号のデータ・セットを蓄積すると同時に、前に蓄積されたデータ・セット(前のシーケンス番号を有する)を遠隔記憶装置26に送信する。このように、ローカル記憶装置24が、ホスト22からのシーケンス番号Nが割り当てられた書き込みを蓄積している間、前のシーケンス番号(N−1)の間に行われた書き込みが、ローカル記憶装置24によりリンク29を介して遠隔記憶装置26へ送信される。データ・セット54は、ホスト22からのシーケンス番号N−1が割り当てられた書き込みを表している。これらの書き込みは、遠隔記憶装置26へまだ送信されていない。
遠隔記憶装置26は、シーケンス番号N−1が割り当てられた書き込みに対応するデータ・セット54からデータを受信し、シーケンス番号N−1を有するホスト書き込みの新たなデータ・セット56を作成する。データは、リンク29を横断して送信されたデータに肯定応答する適切なRDFプロトコルを使用して送信することができる。遠隔記憶装置26がデータ・セット54からデータのすべてを受信すると、ローカル記憶装置24は、コミットメッセージを遠隔記憶装置26へ送信して、データ・セット56に対応するシーケンス番号N−1が割り当てられたすべてのデータをコミットする。一般に、特定のシーケンス番号に対応するデータ・セットがコミットされると、そのデータ・セットを論理記
憶装置に書き込むことができる。このことは、図2では、シーケンス番号N−2(すなわち、現在のシーケンス番号が、ホスト22によるローカル記憶装置24への書き込みに関連して使用される2つ前)が割り当てられた書き込みに対応するデータ・セット58で示されている。図2では、データ・セット58は、遠隔記憶装置26のディスクストレージを表すデータ要素62に書き込まれるものとして示されている。このように、前のシーケンス番号(N−2)に対応するデータ・セット58が、データ要素62によって示される遠隔記憶装置26のディスクストレージに書き込まれている間、遠隔記憶装置26は、シーケンス番号N−1に対応するデータ・セット56を受信して蓄積している。いくつかの実施の形態では、データ・セット58のデータは書き込み用のマークを付けられる(ただし、必ずしも直ちに書き込まれるとは限らない)一方、データ・セット56のデータはそうではない。
このように、動作時に、ホスト22は、データ要素51にローカルに記憶されてデータ・セット52に蓄積されるデータをローカル記憶装置24へ書き込む。特定のシーケンス番号のデータのすべてが蓄積されると(本明細書の他の箇所で説明)、ローカル記憶装置24はシーケンス番号をインクリメントする。現在のシーケンス番号よりも1つ小さいシーケンス番号に対応するデータ・セット54からのデータは、ローカル記憶装置24から遠隔記憶装置26へリンク29を介して転送される。データ・セット58は、ローカル記憶装置24が遠隔記憶装置26へメッセージを送信することによってコミットされたシーケンス番号のデータに対応する。データ・セット58からのデータは、遠隔記憶装置26のディスクストレージへ書き込まれる。
データ・セット52、54、56、58の特定の1つのデータ・セット内での書き込みは、必ずしも順序付けられていないことに留意されたい。しかしながら、本明細書の他の箇所でさらに詳細に説明するように、シーケンス番号N−2に対応するデータ・セット58のあらゆる書き込みは、シーケンス番号N−1に対応するデータ・セット54、56の書き込みのいずれの開始よりも前に開始されている。これに加えて、シーケンス番号N−1に対応するデータ・セット54、56のあらゆる書き込みは、シーケンス番号Nに対応するデータ・セット52の書き込みのいずれの開始よりも前に開始されている。したがって、ローカル記憶装置24と遠隔記憶装置26との間の通信障害の場合に、遠隔記憶装置26は、最後にコミットされた大量のデータ・セット(図2の例ではデータ・セット58)の書き込みを単に終了するだけでよく、データ要素62が一定の時点よりも前に開始された書き込みのすべてを含み、その時点よりも後に開始された書き込みを含まないという意味で、遠隔記憶装置26におけるデータの状態が順序付けられることを遠隔記憶装置26に保証することができる。したがって、R2は、常に、R1の或る時点のコピーを含み、R2デバイスからの一貫したイメージを再確立することが可能である。
図3を参照して、略図70は、データ・セット52、54を作成および保持するのに使用される項目を示している。標準論理デバイス72は、ホスト22によって書き込まれたデータを含み、図2のデータ要素51および図1のディスク33a〜33cに対応するものである。標準論理デバイス72は、ホスト22によってローカル記憶装置24へ書き込まれたデータを含む。
ポインタの2つのリンクリスト74、76は、標準論理デバイス72に関連して使用される。これらのリンクリスト74、76は、例えば、ローカル記憶装置24のメモリ37に記憶できるデータに対応する。リンクリスト74は、複数のポインタ81〜85を含み、これらのポインタのそれぞれは、ローカル記憶装置24に関連して使用されるキャッシュ88のスロットを指し示す。同様に、リンクリスト76は、複数のポインタ91〜95を含み、これらのポインタのそれぞれは、キャッシュ88のスロットを指し示す。いくつかの実施の形態では、キャッシュ88は、ローカル記憶装置24のメモリ37に設けるこ
とができる。キャッシュ88は、複数のキャッシュスロット102〜104を含む。これらのキャッシュスロット102〜104は、標準論理デバイス72への書き込みに関連して使用することができ、同時に、リンクリスト74、76に関連して使用することができる。
例えば、リンクリスト74はシーケンス番号Nの大量のデータ・セット52に対応できる一方、リンクリスト76はシーケンス番号N−1の大量のデータ・セット54に対応できるように、リンクリスト74、76のそれぞれは、大量のデータ・セット52、54の一方に使用することができる。したがって、データがホスト22によってローカル記憶装置24へ書き込まれると、そのデータは、キャッシュ88に提供され、場合によっては(本明細書の他の箇所で説明)、リンクリスト74の適切なポインタが作成される。本明細書の他の箇所で説明するように、このデータは、標準論理デバイス72へデステージされて、また、リンクリスト74のポインタ81〜85の1つによってもはや指し示されなくなるまで、キャッシュ88から削除されないことに留意されたい。
本明細書の一実施の形態では、リンクリスト74、76の一方は「アクティブ」とみなされる一方、他方は「非アクティブ」とみなされる。したがって、例えば、シーケンス番号Nが偶数である場合、リンクリスト74はアクティブとすることができる一方、リンクリスト76は非アクティブである。リンクリスト74、76のうちアクティブなものは、ホスト22からの書き込みをハンドリングする一方、リンクリスト74、76のうち非アクティブなものは、ローカル記憶装置24から遠隔記憶装置26へ送信されているデータに対応する。
ホスト22によって書き込まれるデータが、(シーケンス番号Nについて)リンクリスト74、76のうちアクティブなものを使用して蓄積されている間、(前のシーケンス番号N−1について)リンクリスト74、76のうち非アクティブなものに対応するデータは、ローカル記憶装置24から遠隔記憶装置26へ送信される。RA30a〜30cは、リンクリスト74、76を使用して、ローカル記憶装置24から遠隔記憶装置26へ送信するデータを決定する。
リンクリスト74、76の一方のポインタのうち特定の1つに対応するデータが遠隔記憶装置26へ送信されると、ポインタのうちその特定の1つは、リンクリスト74、76の適切な一方から削除することができる。これに加えて、スロットのデータがそれ以外に別の目的(例えば、標準論理デバイス72へデステージされる)で必要とされないという条件で、キャッシュ88から削除するためのマークをそのデータに付けることもできる(すなわち、そのスロットを後の関係しない使用のためにスロットのプールに戻すことができる)。すべてのデバイスがもはやデータを使用していない状態になるまで、当該データをキャッシュ88から削除しないことを保証するメカニズムを使用することができる。このようなメカニズムは、例えば、1996年7月16日に発行された米国特許第5,537,568号および2003年7月15日に発行された米国特許第6,594,742号に記載されている。これらの米国特許の双方は、参照により本明細書に援用される。
図4を参照して、キャッシュ88のスロット102〜104の1つと同様のスロット120は、ヘッダ122およびデータ124を含む。ヘッダ122は、システムがスロット120を管理するのに使用するオーバーヘッド情報に対応する。データ124は、スロット120に(一時的に)記憶されているディスクからの対応するデータである。ヘッダ122の情報は、ディスクへ戻るポインタ、タイムスタンプ(単数または複数)等を含む。
また、ヘッダ122は、本明細書で説明するシステムに関連して使用されるキャッシュスタンプ126も含む。本明細書の一実施の形態では、このキャッシュスタンプ126は
8バイトである。これらバイトのうちの2バイトは、スロット120が、本明細書で説明するシステムによって使用されているかどうかを示す「パスワード」である。他の実施の形態では、このパスワードは1バイトとすることができる一方、その次のバイトはパッドに使用される。本明細書の他の箇所で説明するように、2バイトのパスワード(または、場合によっては1バイト)が特定の値に等しいということは、スロット120がリンクリスト74、76の少なくとも1つのエントリによって指し示されていることを示す。パスワードが特定の値に等しくないということは、スロット120がリンクリスト74、76のエントリによって指し示されていないことを示す。パスワードの使用については、本明細書の他の箇所で説明する。
また、キャッシュスタンプ126は、スロット120のデータ124のシーケンス番号(例えば、N、N−1、N−2等)を示す2バイトのフィールドも含む。本明細書の他の箇所で説明するように、キャッシュスタンプ126のシーケンス番号フィールドは、本明細書で説明する処理を円滑にするのに使用することができる。キャッシュスタンプ126の残りの4バイトは、本明細書の他の箇所で説明するように、ポインタに使用することができる。もちろん、2バイトのシーケンス番号および4バイトのポインタは、スロット120がリスト74、76の一方の少なくとも1つのエントリによって指し示されることを示す特定の値にパスワードが等しい場合にのみ有効である。
図5を参照して、フローチャート140は、ホスト22が書き込みオペレーションを実行することに関連してHA28により実行されるステップを示している。もちろん、ホスト22が書き込みを実行する時、データがR1/R2 RDFグループの一部であるかどうかにかかわらず、通常の方法で書き込みをハンドリングする処理が行われる。例えば、ホスト22がディスクの一部にデータを書き込む時、その書き込みは、最終的にはディスクへデステージされるキャッシュスロットに対して行われる。このキャッシュスロットは、新たなキャッシュスロットとすることもできるし、同じトラックへの前の読み出しオペレーションおよび/または書き込みオペレーションに関連して作成された既存のキャッシュスロットとすることもできる。
処理は最初のステップ142で開始する。このステップ142では、書き込みに対応するスロットがロックされる。本明細書の一実施の形態では、キャッシュ88のスロット102〜104のそれぞれは、標準論理デバイス72のデータのトラックに対応する。ステップ142でスロットをロックすることによって、別のプロセスが、フローチャート140のステップに対応する、HA28によって実行される処理の期間中に、該当するスロットに対して処理を行うことが防止される。
ステップ142に続いてステップ144では、シーケンス番号Nの値が設定される。本明細書の他の箇所で説明するように、HA28によって実行される書き込みオペレーション全体の期間中、ステップ144で得られたシーケンス番号の値は維持されると同時に、スロットはロックされる。本明細書の他の箇所で説明するように、シーケンス番号は各書き込みに割り当てられ、その書き込みが属する大量のデータ・セット52、54の一方を設定する。ホスト22によって実行された書き込みには、現在のシーケンス番号が割り当てられる。単一の書き込みオペレーションは、終始同じシーケンス番号を保持することが有益である。
ステップ144に続いて、テストステップ146は、キャッシュスロットのパスワードフィールドが有効かどうかを判断する。上述したように、本明細書で説明するシステムは、パスワードフィールドを、そのキャッシュスロットがポインタのリンクリスト74、76の一方にすでにあることを示す所定の値に設定する。テストステップ146において、パスワードフィールドが有効でない(スロットが新しく、リスト74、76からのポイン
タがそのスロットを指し示していないことを示す)と判断されると、制御はステップ146からステップ148へ渡される。ステップ148では、パスワードを所定の値に設定し、シーケンス番号フィールドをNに設定し、かつ、ポインタフィールドをNull(ヌル)に設定することによって、新たなスロットのキャッシュスタンプが設定される。他の実施の形態では、ポインタフィールドは、そのスロット自身を指し示すように設定することができる。
ステップ148に続いてステップ152では、新たなスロットへのポインタが、ポインタリスト74、76のうちアクティブのものに追加される。本明細書の一実施の形態では、リスト74、76は循環2重リンクリストであり、新たなポインタは、従来通りの方法で循環2重リンクリストに追加される。もちろん、他の適切なデータ構造体を使用して、リスト74、76を管理することもできる。ステップ152に続いてステップ154では、フラグが設定される。ステップ154では、RDF_WPフラグ(RDF書き込み保留フラグ)が、RDFを使用してスロットを遠隔記憶装置26へ送信する必要があることを示すように設定される。これに加えて、ステップ154では、IN_CACHEフラグが、スロットを標準論理デバイス72へデステージする必要があることを示すように設定される。ステップ154に続いてステップ156では、ホスト22およびHA28によって書き込まれているデータがスロットへ書き込まれる。ステップ156に続いてステップ158では、スロットのロックが解除される。ステップ158に続いて、処理は完了する。
テストステップ146において、スロットのパスワードフィールドが有効である(そのスロットがリスト74、76の少なくとも1つのポインタによってすでに指し示されていることを示す)と判断されると、制御はステップ146からテストステップ162へ移る。ステップ162では、スロットのシーケンス番号フィールドが現在のシーケンス番号Nに等しいかどうかが判断される。有効なパスワードを有するスロットのシーケンス番号フィールドについて、2つの有効な可能性があることに留意されたい。シーケンス番号フィールドが現在のシーケンス番号Nに等しい可能性がある。これは、スロットが、シーケンス番号Nを有する前の書き込みに対応する場合に起こる。他の可能性は、シーケンス番号フィールドがN−1に等しくなることである。これは、スロットが、シーケンス番号N−1を有する前の書き込みに対応する場合に起こる。シーケンス番号フィールドがそれ以外のどの値であっても、それは無効である。したがって、いくつかの実施の形態に対して、ステップ162のエラー/有効性チェックを含めること、または、場合により、個々のステップのエラー/有効性チェックを行うことが可能な場合がある。このようなエラーは、任意の適切な方法でハンドリングすることができる。この方法には、ユーザにメッセージを提供することが含まれ得る。
ステップ162において、スロットのシーケンス番号フィールドの値が現在のシーケンス番号Nに等しいと判断されると、特別な処理は必要なく、制御は、上述したようにステップ162からステップ156へ移り、ステップ156で、データがスロットに書き込まれる。そうでなく、シーケンス番号フィールドの値がN−1(他の唯一の有効な値)であると、制御はステップ162からステップ164へ移り、ステップ164で、新たなスロットが取得される。ステップ164で取得された新たなスロットは、書き込み中のデータを記憶するのに使用することができる。
ステップ164に続いてステップ166では、旧スロットからのデータが、ステップ164で取得された新たなスロットへコピーされる。このコピーされたデータはRDF_WPフラグを含むことに留意されたい。このフラグは、そのスロットが最初に作成された時の前の書き込みの際に、ステップ154で設定されているはずである。ステップ166に続いてステップ168では、新たなスロットのキャッシュスタンプが設定される。この設定は、パスワードフィールドを適切な値に設定し、シーケンス番号フィールドを現在のシ
ーケンス番号Nに設定し、かつ、ポインタフィールドを旧スロットを指し示すように設定することによって行われる。ステップ168に続いてステップ172では、新たなスロットへのポインタがリンクリスト74、76のうちアクティブなものに追加される。ステップ172に続いてステップ156では、上述したように、データがスロットへ書き込まれる。このスロットは、この場合、新たなスロットである。
図6を参照して、フローチャート200は、RA30a〜30cがリスト72、74のうち非アクティブなものをスキャンして、ローカル記憶装置24から遠隔記憶装置26へRDFデータを送信することに関連して実行されるステップを示している。上述したように、Nサイクルが、リスト72、74のうちアクティブなものを使用してホストによりR1デバイスへ書き込まれている時、リスト72、74のうち非アクティブなものは、R1デバイスのN−1サイクルに対応するスロットを指し示す。
処理は最初のステップ202で開始する。ステップ202では、リスト72、74のうち非アクティブなものにエントリがあるかどうかが判断される。データが送信されると、その対応するエントリは、リスト72、74のうち非アクティブなものから削除される。これに加えて、新たな書き込みが、リスト72、74のうちアクティブなものへ提供され、一般に、リスト72、74のうち非アクティブなものへは提供されない。したがって、リスト72、74のうち非アクティブなものは、一定の時期にデータを含まない可能性がある(また、本明細書の他の箇所で説明するように、含まないことが望ましい)。ステップ202において、送信されるデータがないと判断されると、リスト72、74のうち非アクティブなものは、データが利用可能となるまで、継続的にポーリングされる。リスト72、74のうち非アクティブなものがリスト72、74のうちアクティブなものになるサイクルスイッチ(本明細書の他の箇所で説明)に関連して、送信用データは利用可能になる。この逆もまた同様である。
ステップ202において、送信に利用可能なデータがあると判断されると、制御はステップ202からステップ204へ移る。ステップ204では、スロットが正しいことが検証される。スロット204で実行された処理は、オプションの「健全性チェック」である。この健全性チェックは、パスワードフィールドが正しいことの検証、および、シーケンス番号フィールドが正しいことの検証を含むことができる。正しくない(予期しない)データがスロットにあると、エラー処理を実行することができる。このエラー処理は、エラーをユーザに通知すること、および、場合により、エラー復旧処理を含んでもよい。
ステップ204に続いてステップ212では、データが、従来通りの方法でRDFを介して送信される。本明細書の一実施の形態では、スロット全体が送信されるのではない。逆に、適切なミラービット(レコードが変更されたことを示す)が設定された、スロット内のレコードのみが遠隔記憶装置26へ送信される。一方、他の実施の形態において、遠隔記憶装置26が、適切なミラービットが設定されたレコードに対応するデータのみを書き込み、かつ、トラックの他のデータを無視するという条件で、スロット全体を送信することが可能な場合がある。他のデータは、有効な場合もあるし、有効でない場合もある。ステップ212に続いてテストステップ214では、送信されたデータがR2デバイスによって肯定応答されたかどうかが判断される。肯定応答されていない場合には、ステップ214からステップ212へ戻るフローによって示すように、データは再送される。他の実施の形態では、さらに必要とされる異なる処理を使用して、データを送信し、その受信に肯定応答することができる。このような処理は、エラー報告、および、一定の回数のデータ送信の試みが失敗した後に実行される代替的な処理を含むことができる。
テストステップ214において、データの送信が成功したと判断されると、制御はステップ214からステップ216へ渡り、RDF_WPフラグがクリアされる(データはR
DFを介して送信に成功しているので)。ステップ216に続いてステップ218では、スロットが複製スロットであるかどうかが判断される。この複製スロットは、リスト72、74のうち非アクティブなものの既存のエントリをすでに有するスロットへの書き込みに関連して作成されたものである。この可能性については、ステップ162、164、166、168、172に関連して上述している。ステップ218において、スロットが複製スロットであると判断されると、制御はステップ218からステップ222へ渡り、ステップ222では、スロットが、(再利用される)利用可能なスロットのプールに戻される。これに加えて、スロットに設けられたデータは他のどの目的にも有効でないので、スロットは、エージングされて(または他の或る適切なメカニズムが適用されて)、他のスロットよりも先に即座の再利用に備えることができる。ステップ222に続いて、または、スロットが複製スロットでない場合のステップ218に続いて、ステップ224では、スロットが再利用される場合に、図5のステップ146のテストがそのスロットを新たなスロットとして適切に分類するように、スロットヘッダのパスワードフィールドがクリアされる。
ステップ224に続いてステップ226では、リスト72、74のうち非アクティブなもののエントリが削除される。ステップ226に続いて、制御が上述したステップ202に戻り、ステップ202では、リスト72、74のうち非アクティブなものに、転送する必要のあるデータに対応したエントリがさらにあるかどうかが判断される。
図7を参照して、略図240は、遠隔記憶装置26によって使用されるデータ・セット56、58の作成および操作を示している。遠隔記憶装置26がリンク29を介して受信したデータは、遠隔記憶装置26のキャッシュ242へ提供される。キャッシュ242は、例えば、遠隔記憶装置26のメモリ38に設けることができる。キャッシュ242は、複数のキャッシュスロット244〜246を含む。これらキャッシュスロットのそれぞれは、標準論理記憶装置252のトラックにマッピングすることができる。キャッシュ242は、図3のキャッシュ88と同様のものであり、遠隔記憶装置26の標準論理記憶装置252へデステージできるデータを含むことができる。標準論理記憶装置252は、図2に示すデータ要素62および図1に示すディスク34a〜34cに対応する。
また、遠隔記憶装置26は、1対のキャッシュオンリー仮想デバイス(cache only virtual device )254、256も含む。これらのキャッシュオンリー仮想デバイス254、256は、例えば、遠隔記憶装置26のメモリ38に記憶できるデバイステーブルに対応する。キャッシュオンリー仮想デバイス254、256のそれぞれのテーブルの各トラックエントリは、標準論理デバイス252のトラックを指し示すか、または、キャッシュ242のスロットを指し示す。キャッシュオンリー仮想デバイスは、2003年3月25日に出願されてシリアル番号10/396,800号を有する「CACHE-ONLY VIRTUAL DEVICES」という発明の名称の同時係属中の米国特許出願に記載されている。この米国特許出願は、参照により本明細書に援用される。
複数のキャッシュスロット244〜246は、標準論理デバイス252への書き込みに関連して使用することができ、同時に、キャッシュオンリー仮想デバイス254、256に関連して使用することができる。本明細書の一実施の形態では、キャッシュオンリー仮想デバイス254、256のトラックテーブルエントリのそれぞれは、そのトラックのデータが、標準論理デバイス252の対応するトラックに記憶されていることを示すヌルを含む。そうでない場合、キャッシュオンリー仮想デバイス254、256のそれぞれについてのトラックテーブルのエントリは、キャッシュ242のスロット244〜246の1つへのポインタを含む。
キャッシュオンリー仮想デバイス254、256のそれぞれは、大量のデータ・セット
56、58の1つに対応する。したがって、例えば、キャッシュオンリー仮想デバイス254は大量のデータ・セット56に対応することができる一方、キャッシュオンリー仮想デバイス256は大量のデータ・セット58に対応することができる。本明細書の一実施の形態では、キャッシュオンリー仮想デバイス254、256の一方は「アクティブ」とみなすことができる一方、キャッシュオンリー仮想デバイス254、256の他方は「非アクティブ」とみなすことができる。キャッシュオンリー仮想デバイス254、256のうち非アクティブなものは、ローカル記憶装置24(すなわち、データ・セット56)から受信されているデータに対応することができる一方、キャッシュオンリー仮想デバイス254、256のうちアクティブなものは、標準論理デバイス252へリストアされている(書き込まれている)データに対応する。
ローカル記憶装置24からリスト29を介して受信されたデータは、キャッシュ242のスロット244〜246の1つに配置することができる。キャッシュオンリー仮想デバイス254、256のうち非アクティブなものの対応するポインタは、受信したデータを指し示すように設定することができる。同じシーケンス番号を有する後続のデータも同様にして処理することができる。或る時点において、ローカル記憶装置24は、同じシーケンス番号を使用する送信データのすべてをコミットするメッセージを提供する。特定のシーケンス番号のデータがコミットされると、キャッシュオンリー仮想デバイス254、256のうち非アクティブなものがアクティブになり、アクティブなものが非アクティブになる。その時点で、キャッシュオンリー仮想デバイス254、256のうち現在アクティブなものからのデータが、標準論理デバイス252へコピーされる一方、キャッシュオンリー仮想デバイス254、256のうち非アクティブなものは、ローカル記憶装置24から遠隔記憶装置26へ送信された新たなデータ(新たなシーケンス番号を有する)を受信するのに使用される。
キャッシュオンリー仮想デバイス254、256のうちアクティブなものからデータが削除されると(本明細書の他の箇所で説明)、キャッシュオンリー仮想デバイス254、256のうちアクティブなものの対応するエントリをヌルに設定することができる。これに加えて、スロットのデータが、それ以外に、別の目的(例えば、標準論理デバイス252へデステージされる)で必要とされないという条件で、キャッシュ244からもそのデータを削除することができる(すなわち、スロットは、後の使用のためフリースロットのプールに戻される)。すべてのミラー(キャッシュオンリー仮想デバイス254、256を含む)がもはやデータを使用していない状態になるまで、当該データをキャッシュ242から削除しないことを保証するメカニズムを使用することができる。このようなメカニズムは、例えば、1996年7月16日に発行された米国特許第5,537,568号および2003年7月15日に発行された米国特許第6,594,742号に記載されている。これらの米国特許の双方は、参照により本明細書に援用される。
本明細書の他の箇所で説明する或る実施の形態では、遠隔記憶装置26は、ローカル記憶装置24によって使用されるリスト74、76と同様のリンクリスト258、262を保持することができる。リスト258、262の一方がキャッシュオンリー仮想デバイス254、256の一方に対応し、リスト258、262の他方がキャッシュオンリー仮想デバイス254、256の他方に対応する場合に、これらのリスト258、262は、変更された対応するキャッシュオンリー仮想デバイス254、256のスロットを特定する情報を含むことができる。本明細書の他の箇所で説明するように、リスト258、262を使用して、キャッシュオンリー仮想デバイス254、256から標準論理デバイス252へデータをリストアすることを円滑にすることができる。
図8を参照して、フローチャート270は、ローカル記憶装置24によって遠隔記憶装置26へ送信されたシーケンス番号コミットのデータの処理に関連して、遠隔記憶装置2
6によって実行されるステップを示している。本明細書の他の箇所で説明するように、ローカル記憶装置24は、シーケンス番号を定期的にインクリメントする。これが行われると、ローカル記憶装置24は、前のシーケンス番号のデータのすべての送信を終了し、次に、前のシーケンス番号のコミットメッセージを送信する。
処理は最初のステップ272で開始する。ステップ272では、コミットが受信される。ステップ272に続いて、テストステップ274では、遠隔記憶装置26のキャッシュオンリー仮想デバイス254、256のうちアクティブなものが空であるかどうかを判断する。本明細書の他の箇所で説明するように、遠隔記憶装置26のキャッシュオンリー仮想デバイス254、256のうち非アクティブなものは、RDFを使用して送信されたローカル記憶装置24からのデータを蓄積するのに使用される一方、キャッシュオンリー仮想デバイス254、256のうち非アクティブなものは、標準論理デバイス252へリストアされる。
テストステップ274において、キャッシュオンリー仮想デバイス254、256のうちアクティブなものが空でないと判断されると、制御はテストステップ274からステップ276へ移り、ステップ276で、キャッシュオンリー仮想デバイス254、256のうちアクティブなもののリストアが、さらに処理が実行される前に完了される。キャッシュオンリー仮想デバイス254、256のうちアクティブなものからのデータのリストアについては、本明細書の他の箇所でさらに詳細に説明する。キャッシュオンリー仮想デバイス254、256のうちアクティブなものが、コミットのハンドリングおよび次のシーケンス番号のデータのリストアの開始に先立って空になることは有益である。
ステップ276に続いて、または、キャッシュオンリー仮想デバイス254、256のうちアクティブなものが空であると判断された場合のステップ274に続いて、ステップ278では、キャッシュオンリー仮想デバイス254、256のうちアクティブなものが非アクティブにされる。ステップ278に続いてステップ282では、キャッシュオンリー仮想デバイス254、256のうち前に非アクティブであったもの(すなわち、ステップ278の実行前に非アクティブであったもの)はアクティブにされる。ステップ278、282においてアクティブおよび非アクティブなキャッシュオンリー仮想デバイス254、256を交換することによって、キャッシュオンリー仮想デバイス254、256のうち現在非アクティブ(および空)なものは、次のシーケンス番号についてローカル記憶装置24からのデータの受信を開始する準備を行う。
ステップ282に続いてステップ284では、キャッシュオンリー仮想デバイス254、256のうちアクティブなものが、遠隔記憶装置26の標準論理デバイス252へリストアされる。キャッシュオンリー仮想デバイス254、256のうちアクティブなものを標準論理デバイス252へリストアすることについては、以下でさらに詳細に説明する。しかしながら、いくつかの実施の形態では、リストアプロセスは開始されるが、必ずしもステップ284で完了しないことに留意されない。ステップ284に続いてステップ286では、ローカル記憶装置24から遠隔記憶装置26へ送信されたコミットが、ローカル記憶装置24へ肯定応答され、その結果、コミットの成功がローカル記憶装置24に通知される。ステップ286に続いて、処理は完了する。
図9を参照して、フローチャート300は、図8のステップ276、284をさらに詳細に示している。これらのステップ276、284では、遠隔記憶装置26が、キャッシュオンリー仮想デバイス254、256のうちアクティブなものをリストアする。処理は最初のステップ302で開始する。ステップ302では、ポインタが、キャッシュオンリー仮想デバイス254、256のうちアクティブなものの最初のスロットを指し示すように設定される。このポインタは、キャッシュオンリー仮想デバイス254、256のうち
アクティブなものの各トラックテーブルエントリにわたって繰り返すのに使用される。このトラックテーブルエントリのそれぞれは個別に処理される。ステップ302に続いてテストステップ304では、キャッシュオンリー仮想デバイス254、256のうちアクティブなものの処理中のトラックが、標準論理デバイス252を指し示すかどうかが判断される。指し示す場合、リストアするものはない。そうでない場合、制御はステップ304からステップ306へ移り、ステップ306で、キャッシュオンリー仮想デバイス254、256のうちアクティブなものの対応するスロットがロックされる。
ステップ306に続いて、テストステップ308は、標準論理デバイス252の対応するスロットが、遠隔記憶装置26のキャッシュにすでにあるかどうかを判断する。すでにある場合には、制御はテストステップ308からステップ312へ移り、ステップ312で、標準論理デバイスのスロットがロックされる。ステップ312に続いてステップ314では、キャッシュオンリー仮想デバイス254、256のうちアクティブなものからのデータが、標準論理デバイス252のキャッシュのデータとマージされる。ステップ314におけるデータのマージには、標準論理デバイスのデータを、キャッシュオンリー仮想デバイス254、256のうちアクティブなものの新たなデータで上書きすることが必要である。レコードレベルフラグを提供する実施の形態では、キャッシュオンリー仮想デバイス254、256のうちアクティブなものからの新たなレコードを、キャッシュの標準論理デバイス252のレコードと単にOR演算することが可能な場合がある。すなわち、レコードがインターリーブされる場合、キャッシュオンリー仮想デバイス254、256のうちアクティブなものからの、変更されたレコードを使用すること、および、標準論理デバイス252のキャッシュスロットへレコードを提供することのみが必要である。ステップ314に続いてステップ316では、標準論理デバイス252のスロットのロックが解除される。ステップ316に続いてステップ318では、処理中のキャッシュオンリー仮想デバイス254、256のうちアクティブなもののスロットのロックも解除される。
テストステップ308において、標準論理デバイス252の対応するスロットがキャッシュにないと判断されると、制御はテストステップ308からステップ322へ移る。ステップ322では、標準論理デバイス252のスロットがキャッシュにあり(例えば、IN_CACHEフラグが設定されることがある)、デステージされる必要があることを示すように、標準論理デバイス252のスロットのトラックエントリが変更される。本明細書の他の箇所で説明するように、いくつかの実施の形態では、適切なミラービットが設定されたトラックのレコードのみをデステージすることが必要な場合がある。ステップ322に続いてステップ324では、トラックのフラグを、そのトラックのデータがキャッシュにあることを示すように設定することができる。
ステップ324に続いてステップ326では、標準論理デバイス252のスロットポインタが、キャッシュのスロットを指し示すように変更される。ステップ326に続いて、テストステップ328は、ステップ322、324、326で実行されたオペレーションが成功したかどうかを判断する。場合によっては、「比較および交換」オペレーションと呼ばれる単一のオペレーションを使用して、ステップ322、324、326を実行することができる。これらのオペレーションがいかなる理由があるにせよ成功しない場合には、制御はステップ328からステップ308へ戻り、標準論理デバイス252の対応するトラックがキャッシュにあるかどうかが再検査される。そうでなく、テストステップ328において、前のオペレーションが成功したと判断されると、制御はテストステップ328から上述したステップ318へ移る。
ステップ318に続いて、テストステップ332は、(リストアされている)キャッシュオンリー仮想デバイス254、256のうちアクティブなもののキャッシュスロットがまだ使用されているかどうかを判断する。場合によっては、キャッシュオンリー仮想デバ
イス254、256のうちアクティブなもののスロットは別のミラーによってまだ使用されている可能性がある。テストステップ332において、キャッシュオンリー仮想デバイスのスロットが別のミラーによって使用されていないと判断されると、制御はテストステップ332からステップ334へ移る。ステップ334では、そのスロットは、他のプロセスによる使用のために解放される(例えば、本明細書の他の箇所で説明するように、利用可能なスロットのプールへリストアされる)。ステップ334に続いてステップ336では、次のスロットが指し示され、キャッシュオンリー仮想デバイス254、256のうちアクティブなものの次のスロットが処理される。テストステップ332において、キャッシュオンリー仮想デバイス254、256のうちアクティブなものが別のミラーによってまだ使用されていると判断された場合に、当該テストステップ332からもステップ336に到達することに留意されたい。また、テストステップ304において、処理されているスロットについて、キャッシュオンリー仮想デバイス254、256のうちアクティブなものが標準論理デバイス252を指し示すと判断された場合に、当該テストステップ304からステップ336に到達することにも留意されたい。ステップ336に続いて、テストステップ338では、キャッシュオンリー仮想デバイス254、256のうちアクティブなものの処理されるスロットがさらにあるかどうかを判断する。ない場合には、処理は完了する。さらにある場合には、制御はテストステップ338からステップ304へ戻る。
別の実施の形態では、遠隔記憶装置26のN−1サイクルに対応する受信した大量のデータ・セット56の修正スロットのリストを作成することができる。このリストは、図7に示すリスト258、262等である。データが受信されると、遠隔記憶装置26は、修正スロットのリンクリストを作成する。作成されるリストは、循環とすることもできるし、直線(NULL終端を有する)とすることもできるし、他の任意の適切な設計とすることもできる。このリストは、次に、キャッシュオンリー仮想デバイス254、256のうちアクティブなものをリストアするのに使用することができる。
図9のフローチャート300は、2つの代替的なパス342、344を示している。これらのパスは、修正スロットのリストが使用される実施の形態のオペレーションを示している。ステップ302では、リストの最初の要素を指し示すポインタ(修正スロットのリストにわたって繰り返すのに使用される)が作成される。ステップ302に続いて、ステップ306には、代替的なパス342が到達する。修正スロットのリストを使用する実施の形態では、リストのスロットは、標準論理デバイス252を指し示すはずはないので、テストステップ304は必要とされない。
ステップ306に続いて、処理は、ステップ336がCOVDの次のスロットを指し示すのではなく、修正スロットのリストをトラバースすることに関連していることを除き、前の実施の形態で上述したように続く。同様に、ステップ338のテストは、ポインタがリストの最後(または、循環リンクリストの場合には始点に戻っている)にあるかどうかを判断する。また、ステップ338において、処理するスロットがさらにあると判断されると、代替的なパス344によって示すように、制御はステップ338からステップ306へ移る。上述したように、修正スロットのリストを使用する実施の形態では、ステップ304を省略することができる。
図10を参照して、フローチャート350は、ローカル記憶装置24がシーケンス番号を増加させることに関連して実行されるステップを示している。処理は最初のステップ352で開始する。ステップ352では、ローカル記憶装置24が、シーケンス番号を増加させる前に少なくともM秒待つ。本明細書の一実施の形態では、Mは30であるが、もちろん、Mは任意の数とすることができる。Mの値が大きくなると、記憶装置24、26間の通信が不通になった場合に失われるおそれのあるデータ量が増加する。一方、Mの値が
小さくなると、シーケンス番号をより高い頻度でインクリメントすることによって引き起こされるオーバーヘッドの総量が増加する。
ステップ352に続いて、テストステップ354では、HAが前のシーケンス番号のI/Oのすべてを完了したことを示すビットを、ローカル記憶装置24のHAのすべてが設定したかどうかを判断する。シーケンス番号が変化すると、HAのそれぞれは、その変化を通知し、前のシーケンス番号のすべてのI/Oが完了したことを示すビットを設定する。例えば、シーケンス番号がN−1からNに変化すると、HAは、シーケンス番号N−1のすべてのI/Oを完了した時にビットを設定する。場合によっては、HAの単一のI/Oが長い時間を要する場合があり、シーケンス番号が変化した後であってもまだ実行中の場合があることに留意されたい。また、いくつかのシステムでは、異なるメカニズムを使用して、HAのすべてがHAのN−1のI/Oを完了したかどうかを判断することができることにも留意されたい。この異なるメカニズムには、メモリ37のデバイステーブルを調べることが含まれ得る。
テストステップ354において、前のシーケンス番号からのI/Oが完了したと判断されると、制御はステップ354からテストステップ356へ移る。テストステップ356は、リスト74、76のうち非アクティブなものが空であるかどうかを判断する。リスト74、76のうち非アクティブなものに対応するデータのすべてが、RDFプロトコルを使用してローカル記憶装置24から遠隔記憶装置26へ完全に送信されるまで、シーケンス番号の切り換えは行われないようにすることができる。リスト74、76のうち非アクティブなものが空であると判断されると、制御はステップ356からステップ358へ移る。ステップ358では、前のシーケンス番号のコミットが、ローカル記憶装置24から遠隔記憶装置26へ送信される。上述したように、遠隔記憶装置26は、特定のシーケンス番号のコミットメッセージを受信することによって、そのシーケンス番号に対応するデータのリストアを開始する。
ステップ358に続いてステップ362では、リスト74、76のうち非アクティブなもののデータのコピーが一時中断される。本明細書の他の箇所で説明するように、リストのうち非アクティブなものは、スキャンされて、ローカル記憶装置24から遠隔記憶装置26へ対応するデータが送信される。シーケンス番号の切り換えが完了するまで、データのコピーを一時中断することは有益である。本明細書の一実施の形態では、この一時中断は、RA30a〜30cへメッセージを送信することによって提供される。しかしながら、本明細書で説明するシステムを使用してデータの送信を円滑にするために他のコンポーネントを使用する実施の形態では、適切なメッセージ/コマンドを当該他のコンポーネントへ送信することによって、コピーの一時中断を提供できることが、当業者には理解されよう。
ステップ362に続いてステップ364では、シーケンス番号がインクリメントされる。ステップ364に続いてステップ366では、テストステップ354で使用されたHAのビットがすべてクリアされ、それらのビットは、シーケンス番号のインクリメントに関連して再び設定できるようにされる。ステップ366に続いて、テストステップ372は、遠隔記憶装置26が、ステップ358で送信されたコミットメッセージに肯定応答したかどうかを判断する。コミットメッセージに肯定応答することについては、図8に関連して上述している。遠隔記憶装置26が、ステップ358で送信されたコミットメッセージに肯定応答したと判断されると、制御はステップ372からステップ374へ移る。ステップ374では、ステップ362で提供されたコピーの一時停止がクリアされ、その結果、コピーを再開することができる。ステップ374に続いて、処理は完了する。ステップ374からステップ352へ戻って、新たなサイクルを開始し、シーケンス番号を引き続きインクリメントすることが可能であることに留意されたい。
R1デバイスのCOVDを使用して、アクティブな大量のデータ・セットおよび非アクティブな大量のデータ・セットに関連したスロットを収集することも可能である。その場合、R2デバイスと同様に、或るCOVDを非アクティブなシーケンス番号に関連付けることができ、別のCOVDをアクティブなシーケンス番号に関連付けることができる。これについては以下で説明する。
図11を参照して、略図400は、データ・セット52、54の作成および保持に使用される項目を示している。標準論理デバイス402は、ホスト22によって書き込まれたデータを含み、図2のデータ要素51および図1のディスク33a〜33cに対応する。標準論理デバイス402は、ホスト22によってローカル記憶装置24へ書き込まれたデータを保持する。
2つのキャッシュオンリー仮想デバイス404、406は、標準論理デバイス402に関連して使用される。これらのキャッシュオンリー仮想デバイス404、406は、例えば、ローカル記憶装置24のメモリ37に記憶できるデバイステーブルに対応する。キャッシュオンリー仮想デバイス404、406のそれぞれのテーブルの各トラックエントリは、標準論理デバイス402のトラック、または、ローカル記憶装置24に関連して使用されるキャッシュ408のスロットのいずれかを指し示す。いくつかの実施の形態では、キャッシュ408は、ローカル記憶装置24のメモリ37に設けることができる。
キャッシュ408は、複数のキャッシュスロット412〜414を含む。これらのキャッシュスロット412〜414は、標準論理デバイス402への書き込みに関連して使用することができ、同時に、キャッシュオンリー仮想デバイス404、406に関連して使用することができる。本明細書の一実施の形態では、キャッシュオンリー仮想デバイス404、406の各トラックテーブルエントリは、標準論理デバイス402の対応するトラックを指し示すヌルを含む。別の状況では、キャッシュオンリー仮想デバイス404、406のそれぞれについてのトラックテーブルのエントリは、キャッシュ408のスロット412〜414の1つへのポインタを含む。
例えば、キャッシュオンリー仮想デバイス404がシーケンス番号Nの大量のデータ・セット52に対応できる一方、キャッシュオンリー仮想デバイス406がシーケンス番号N−1の大量のデータ・セット54に対応できるように、キャッシュオンリー仮想デバイス404、406のそれぞれは、大量のデータ・セット52、54の一方に使用することができる。したがって、データがホスト22によってローカル記憶装置24に書き込まれると、そのデータは、キャッシュ408に提供され、キャッシュオンリー仮想デバイス404の適切なポインタが調整される。本明細書の他の箇所で説明するように、このデータは、標準論理デバイス402へデステージされるまでキャッシュ408から削除されず、また、キャッシュオンリー仮想デバイス404によってのみ解放されることに留意されたい。
本明細書の一実施の形態では、キャッシュオンリー仮想デバイス404、406の一方は「アクティブ」とみなされる一方、他方は「非アクティブ」とみなされる。したがって、例えば、シーケンス番号Nが偶数である場合、キャッシュオンリー仮想デバイス404はアクティブとすることができる一方、キャッシュオンリー仮想デバイス406は非アクティブである。キャッシュオンリー仮想デバイス404、406のうちアクティブなものは、ホスト22からの書き込みをハンドリングする一方、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものは、ローカル記憶装置24から遠隔記憶装置26へ送信されているデータに対応する。
ホスト22によって書き込まれるデータが、(シーケンス番号Nについて)キャッシュオンリー仮想デバイス404、406のうちアクティブなものを使用して蓄積されている間、(前のシーケンス番号N−1について)キャッシュオンリー仮想デバイス404、406のうち非アクティブなものに対応するデータは、ローカル記憶装置24から遠隔記憶装置26へ送信される。この実施の形態および関連した実施の形態の場合、ローカル記憶装置のDA35a〜35cは、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものをスキャンして、RA30a〜30cの1つ以上へコピー要求を送信することをハンドリングして、ローカル記憶装置24から遠隔記憶装置26へデータを送信する。したがって、コピーの一時停止および再開に関連して上述したステップ362、374は、DA35a〜35cへメッセージ/コマンドを提供することを含むことができる。
データが遠隔記憶装置26へ送信されると、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものにおける対応するエントリをヌルに設定することができる。これに加えて、スロットのデータがそれ以外に別の目的(例えば、標準論理デバイス402へデステージされる)で必要とされない場合には、データをキャッシュ408から削除することもできる(すなわち、そのスロットを後の使用のためにスロットのプールに戻すことができる)。すべてのミラー(キャッシュオンリー仮想デバイス404、406を含む)がもはやデータを使用していない状態になるまで、当該データをキャッシュ408から削除しないことを保証するメカニズムを使用することができる。このようなメカニズムは、例えば、1996年7月16日に発行された米国特許第5,537,568号および2003年7月15日に発行された米国特許第6,594,742号に記載されている。これらの米国特許の双方は、参照により本明細書に援用される。
図12を参照して、フローチャート440は、2つのCOVDがR1デバイスによって使用されて本明細書で説明するシステムを提供する実施の形態について、ホスト22が書き込みオペレーションを実行することに関連してHA28により実行されるステップを示している。処理は最初のステップ442で開始する。このステップ442では、書き込みに対応するスロットがロックされる。本明細書の一実施の形態では、キャッシュ408のスロット412〜414のそれぞれは、標準論理デバイス402のデータのトラックに対応する。ステップ442でスロットをロックすることによって、別のプロセスが、フローチャート440のステップに対応する、HA28によって実行される処理の期間中に、該当するスロットに対して処理を行うことが防止される。
ステップ442に続いてステップ444では、シーケンス番号Nの値が設定される。R1側のCOVD以外のリストを使用する実施の形態と同様に、HA28によって実行される書き込みオペレーション全体の期間中、ステップ444で得られたシーケンス番号の値は維持されると同時に、スロットはロックされる。本明細書の他の箇所で説明するように、シーケンス番号は各書き込みに割り当てられ、その書き込みが属する大量のデータ・セット52、54の一方を設定する。ホスト22によって実行された書き込みには、現在のシーケンス番号が割り当てられる。単一の書き込みオペレーションは、終始同じシーケンス番号を保持することが有益である。
ステップ444に続いて、テストステップ446は、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものが、ステップ442でロックされたスロット(処理されているスロット)をすでに指し示しているかどうかを判断する。これは、シーケンス番号が現在のシーケンス番号よりも1つ小さい場合において、同じスロットへの書き込みが提供された場合に生じることがある。前のシーケンス番号の書き込みに対応するデータは、遠隔記憶装置26へまだ送信されていない場合がある。
テストステップ446において、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものがスロットを指し示さないと判断されると、制御はテストステップ446から別のテストステップ448へ移る。ステップ448では、キャッシュオンリー仮想デバイス404、406のうちアクティブなものがスロットを指し示すかどうかが判断される。シーケンス番号が現在のシーケンス番号と同じであった期間中にスロットへの前の書き込みが行われていた場合に、キャッシュオンリー仮想デバイス404、406のうちアクティブなものは、スロットを指し示すことが可能である。テストステップ448において、キャッシュオンリー仮想デバイス404、406のうちアクティブなものがスロットを指し示さないと判断されると、制御はテストステップ448からステップ452へ移る。ステップ452では、新たなスロットがデータ用に取得される。ステップ452に続いてステップ454では、キャッシュオンリー仮想デバイス404、406のうちアクティブなものが、スロットを指し示すようにされる。
ステップ454に続いて、または、キャッシュオンリー仮想デバイス404、406のうちアクティブなものがスロットを指し示す場合のステップ448に続いて、ステップ456では、フラグが設定される。ステップ456では、RDF_WPフラグ(RDF書き込み保留フラグ)が、RDFを使用してスロットを遠隔記憶装置26へ送信する必要があることを示すように設定される。これに加えて、ステップ456では、IN_CACHEフラグが、スロットを標準論理デバイス402へデステージする必要があることを示すように設定される。場合によって、キャッシュオンリー仮想デバイス404、406のうちアクティブなものがスロットをすでに指し示している場合(ステップ448で判断される)、RDF_WPフラグおよびIN_CACHEフラグは、ステップ456の実行前にすでに設定されていた可能性があることに留意されたい。一方、ステップ456でのフラグの設定によって、たとえ前の状態が何であっても、フラグを適切に設定することが保証される。
ステップ456に続いてステップ458では、スロットを指し示すトラックテーブルの間接フラグがクリアされ、該当するデータはそのスロットに設けられており、間接的に示される異なるスロットには設けられていないことが示される。ステップ458に続いてステップ462では、ホスト22およびHA28によって書き込まれているデータがスロットへ書き込まれる。ステップ462に続いてステップ464では、スロットのロックが解除される。ステップ464に続いて、処理は完了する。
ステップ446において、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものがスロットを指し示すと判断されると、制御はステップ446からステップ472へ移り、ステップ472で、新たなスロットが取得される。上述したように、ステップ472で取得された新たなスロットは、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものに使用してRDF転送を行うことができる一方、旧スロットは、キャッシュオンリー仮想デバイス404、406のうちアクティブなものに関連付けることができる。
ステップ472に続いてステップ474では、旧スロットからのデータが、ステップ472で取得された新たなスロットへコピーされる。ステップ474に続いてステップ476では、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものについてのトラックテーブルエントリは、旧スロットを指し示すが、データは、旧スロットによって指し示される新たなスロットにあることを示すように、間接フラグ(上述)が設定される。したがって、ステップ476で間接フラグを設定することによって、キャッシュオンリー仮想デバイス404、406のうち非アクティブなもののトラックテーブルが影響を受け、それによって、トラックテーブルエントリは、データが新たなスロットにあることを示す。
ステップ476に続いてステップ478では、新たなスロットのレコードのミラービットが調整される。新たなスロットの目的は、キャッシュオンリー仮想デバイスのうち非アクティブなもののRDF転送を単に行うためであるので、データがステップ474で旧スロットから新たなスロットへコピーされた時にコピーされたどのローカルミラービットもクリアされる。旧スロットは、あらゆるローカルミラーをハンドリングするのに使用されることになる。ステップ478に続いてステップ462では、データがスロットに書き込まれる。ステップ462に続いてステップ464では、スロットのロックが解除される。ステップ464に続いて、処理は完了する。
図13を参照して、フローチャート500は、ローカル記憶装置24が遠隔記憶装置26へ大量のデータ・セット54を送信することに関連して実行されるステップを示している。この送信は、基本的に、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものがアクティブであった時の前の繰り返しの間に書き込まれたトラックを得るために、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものをスキャンすることを含む。この実施の形態では、ローカル記憶装置24のDA35a〜35cが、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものをスキャンし、RDFプロトコルを使用してRA30a〜30cの1つ以上により遠隔記憶装置26へ送信用データをコピーする。
処理は最初のステップ502で開始する。ステップ502では、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものの最初のトラックが、トラックのすべてにわたって繰り返すプロセスを開始するために指し示される。最初のステップ502に続いて、テストステップ504では、RDF_WPフラグが設定されているかどうかが判断される。本明細書の他の箇所で説明するように、RDF_WPフラグは、スロット(トラック)が、RDFリンクを介して送信する必要のあるデータを含むことを示すのに使用される。RDF_WPフラグが設定されていることは、スロット(トラック)の少なくともいくつかのデータが、RDFを使用して送信されることを示す。本明細書の一実施の形態では、スロット全体が送信されるのではない。逆に、適切なミラービット(レコードが変更されたことを示す)が設定された、スロット内のレコードのみが遠隔記憶装置26へ送信される。一方、他の実施の形態において、遠隔記憶装置26が、適切なミラービットが設定されたレコードに対応するデータのみを書き込み、かつ、トラックの他のデータを無視するという条件で、スロット全体を送信することが可能な場合がある。他のデータは、有効な場合もあるし、有効でない場合もある。
テストステップ504において、処理されているキャッシュスロットのRDF_WPフラグが設定されていると判断されると、制御はステップ504からテストステップ505へ移る。ステップ505では、スロットがデータを含むかどうか、または、スロットが、該当するデータを含んだ別のスロットを指し示す間接スロットであるかどうかが判断される。場合によって、スロットは、スロットに対応するディスクの一部のデータを含まないことがある。その代わり、そのスロットは、そのデータを含んだ別のスロットを指し示す間接スロットである場合がある。ステップ505において、スロットが間接スロットであると判断されると、制御はステップ505からステップ506へ移る。ステップ506では、データが(間接スロットによって指し示されたスロットから)取得される。このように、スロットが直接スロットである場合には、RDFによって送信されるデータがスロットに記憶される一方、スロットが間接スロットである場合には、RDFによって送信されるデータは、間接スロットによって指し示された別のスロットにある。
ステップ506に続いて、または、スロットが直接スロットである場合のステップ505に続いて、ステップ507では、(スロットから直接的または間接的に)送信されてい
るデータが、RDFプロトコルを使用してローカル記憶装置24から遠隔記憶装置26へ送信されるDA35a〜35cの1つによってコピーされる。ステップ507に続いてテストステップ508では、遠隔記憶装置26がデータの受信に対して肯定応答したかどうかが判断される。肯定応答していない場合、制御はステップ508からステップ507へ戻り、データが再送される。他の実施の形態では、さらに必要な異なる処理を使用して、データを送信し、その受信に肯定応答することができる。このような処理は、エラー報告、および、一定の回数のデータ送信の試みが失敗した後に実行される代替的な処理を含むことができる。
テストステップ508において、データの送信が成功したと判断されると、制御はステップ508からステップ512へ渡り、RDF_WPフラグがクリアされる(データはRDFを介して送信に成功しているので)。ステップ512に続いてステップ514では、適切なミラーフラグがクリアされて、少なくともRDFミラー(R2)がもはやデータを必要としていないことが示される。本明細書の一実施の形態では、スロット(トラック)の一部である各レコードは、どのミラーが特定のレコードを使用するかを示す個別のミラーフラグを有する。R2デバイスは、レコードのそれぞれについてのこれらミラーの1つであり、このミラーの1つは、ステップ514でクリアされるR2デバイスに対応したフラグである。
ステップ514に続いて、テストステップ516では、処理されているトラックのレコードのいずれかに、(他のミラーデバイス用の)他の何らかのミラーフラグが設定されているかどうかを判断する。設定されていない場合、制御はステップ516からステップ518へ移る。ステップ518では、スロットが解放される(すなわち、もはや使用されない)。いくつかの実施の形態では、未使用のスロットは、使用するのに利用可能なスロットのプールに保持される。スロットのレコードのいくつかについて、さらに別のフラグがまだ設定されている場合、それは、レコードを標準論理デバイス402へデステージする必要があることを意味するか、または、レコードが他の或るミラー(別のR2デバイスを含む)によって使用されていることを意味することがあることに留意されたい。ステップ518に続いて、または、ミラーフラグがさらに存在する場合のステップ516に続いて、ステップ522では、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものの各トラックエントリにわたって繰り返すのに使用されるポインタが、次のトラックを指し示すようにされる。ステップ522に続いて、テストステップ524では、キャッシュオンリー仮想デバイス404、406のうち非アクティブなものの処理されるトラックがさらにあるかどうかを判断する。ない場合には、処理は完了する。ある場合には、制御は、上述したテストステップ504へ戻る。RDF_WPフラグが、処理されているトラックについて設定されていないと判断された場合、テストステップ504からもステップ522に到達することに留意されたい。
図14を参照して、略図700は、複数のローカル記憶装置703〜705に接続されたホスト702を示している。また、この略図700は、複数の遠隔記憶装置706〜708も示している。略図700には、3つのローカル記憶装置703〜705および3つの遠隔記憶装置706〜708のみを示しているが、本明細書で説明するシステムは、任意の個数のローカル記憶装置および遠隔記憶装置を使用するように拡張することができる。
ローカル記憶装置703〜705のぞれぞれは、遠隔記憶装置706〜708の対応する1つに接続され、そこで、例えば、ローカル記憶装置703が遠隔記憶装置706に接続され、ローカル記憶装置704が遠隔記憶装置707に接続され、ローカル記憶装置705が遠隔記憶装置708に接続される。ローカル記憶装置703〜705および遠隔記憶装置706〜708は、本明細書で説明する順序書き込みメカニズム(ordered writes
mechanism)を使用して接続することができ、そこで、例えば、ローカル記憶装置703は、順序書き込みメカニズムを使用して遠隔記憶装置706へ接続することができる。本明細書の他の箇所で説明するように、順序書き込みメカニズムによって、ローカル記憶装置および/またはホストが作業を停止し、かつ/もしくは、データを失う場合に、遠隔記憶装置を使用したデータの復旧が可能になる。
場合により、ホスト702は、ローカル記憶装置703〜705の2つ以上を同時に使用する単一のアプリケーションを実行することができる。このような場合、ホスト702がいかなる時点で作業を中止しても、かつ/または、ローカル記憶装置703〜705の1つが故障しても、ローカル記憶装置703〜705においてアプリケーションデータが一貫性を有する(復旧可能である)ことを保証するようにアプリケーションを構成することができる。しかしながら、ローカル記憶装置703〜705と遠隔記憶装置706〜708との間の順序書き込み接続のそれぞれが他の接続と非同期であるので、アプリケーションのデータが、遠隔記憶装置706〜708において一貫性を有する(したがって、復旧可能である)保証はない。すなわち、例えば、ローカル記憶装置703と遠隔記憶装置706(第1のローカル/遠隔対)との間のデータ接続が一貫性を有し、かつ、ローカル記憶装置704と遠隔記憶装置707(第2のローカル/遠隔対)との間のデータ接続が一貫性を有する場合であっても、第1のローカル/遠隔対と第2のローカル/遠隔対との間が同期していないときは、遠隔記憶装置706、707のデータが常に一貫性を有するとは限らない。
複数のローカル記憶装置703〜705を同時に使用するホスト702のアプリケーションの場合、遠隔記憶装置706〜708においてデータを一貫性をあるものとし、かつ、復旧可能なものとすることが望ましい。これは、ホスト702で実行されているアプリケーションからのデータが、遠隔記憶装置706〜708において一貫性を有し、かつ、復旧可能であるように、ホスト702がローカル記憶装置703〜705のそれぞれにおけるサイクル切り換えを制御するメカニズムによって提供することができる。この機能は、以下でさらに詳細に説明するように、複数のローカル記憶装置703〜705をマルチボックスモードに切り換える、ホスト702で実行される特別なアプリケーションによって提供される。
図15を参照して、テーブル730は、複数のエントリ732〜734を有する。エントリ732〜734のそれぞれは、記憶装置の単一のローカル/遠隔対に対応し、それで、例えば、エントリ732は、ローカル記憶装置703および遠隔記憶装置706の対に対応することができ、エントリ733は、ローカル記憶装置704および遠隔記憶装置707の対に対応することができ、エントリ734は、ローカル記憶装置705および遠隔記憶装置708の対に対応することができる。エントリ732〜734のそれぞれは複数のフィールドを有する。これらのフィールドにおいて、第1のフィールド736a〜736cは、対応するローカル記憶装置のシリアル番号を表し、第2のフィールド738a〜738cは、マルチボックスグループによって使用されるセッション番号を表し、第3のフィールド742a〜742cは、ローカル/遠隔対の対応する遠隔記憶装置のシリアル番号を表し、第4のフィールド744a〜744cは、マルチボックスグループのセッション番号を表す。テーブル730は、マルチボックスモードでの動作に関連してホスト702により作成されて保持される。これに加えて、テーブル730は、マルチボックスグループの一部であるローカル記憶装置および遠隔記憶装置のそれぞれへ伝えられる。以下でさらに詳細に説明するように、テーブル730を使用して、復旧を円滑にすることができる。
異なるローカル/遠隔対は、いつどのような順序でも独立してマルチボックスモードに入出することができる。ホスト702は、ローカル記憶装置/遠隔記憶装置の対のマルチ
ボックスモードへの入出を管理する。これについては、以下でさらに詳細に説明する。
図16を参照して、フローチャート750は、ローカル/遠隔対のマルチボックスモードへの入出に関連してホスト702により実行されるステップを示している。処理は最初のステップ752で開始する。ステップ752では、マルチボックスモードオペレーションが一時的に中断される。ステップ752でマルチボックスオペレーションを一時的に中断することは、遠隔/ローカル対のマルチボックスモードへの入出に関連して行われる変更を円滑にするのに有益である。ステップ752に続いてステップ754では、図15のテーブル730と同様のテーブルが、適宜、エントリを追加または削除するように変更される。ステップ754に続いてステップ756では、変更されたテーブルが、マルチボックスグループのローカル記憶装置および遠隔記憶装置へ伝えられる。本明細書の他の箇所でさらに詳細に説明するように、ステップ756でテーブルを伝えることによって、復旧が円滑になる。
ステップ756に続いてステップ758では、メッセージが、影響を受けるローカル記憶装置へ送信され、変更が提供される。本明細書の他の箇所でさらに詳細に説明するように、ローカル記憶装置は、マルチボックスモードで実行するようにローカル記憶装置を構成することもできるし、当該モードで実行しないようにローカル記憶装置を構成することもできる。以下でさらに詳細に説明するように、順序書き込みをハンドリングするローカル記憶装置は、マルチボックスグループの一部として動作しているか否かに応じて、異なって動作する。ローカル記憶装置がマルチボックスグループに追加される予定である場合、ステップ758で送信されたメッセージは、ローカル記憶装置がマルチボックスグループに追加される予定であり、それで、ローカル記憶装置がマルチボックスモードで実行するようにローカル記憶装置を構成すべきであることを、当該ローカル記憶装置へ示す。あるいは、ローカル記憶装置がマルチボックスグループから削除される予定である場合には、ステップ758で送信されたメッセージは、ローカル記憶装置がマルチボックスグループから削除される予定であり、それで、ローカル記憶装置がマルチボックスモードで動作しないようにローカル記憶装置を構成すべきであることを、当該ローカル記憶装置へ示す。
ステップ758に続いてテストステップ762では、ローカル/遠隔対がマルチボックスグループへ追加される予定である(削除される予定ではなく)かどうかが判断される。追加される予定である場合、制御はテストステップ762からステップ764へ移る。ステップ764では、タグ値が、追加される予定のローカル記憶装置へ送信される。このタグ値は、データでシーケンス番号を提供するのと同様の方法で、ローカル記憶装置から遠隔記憶装置へ送信されるデータで提供される。タグ値は、ホストによって制御され、ローカル/遠隔対のすべてが、同じサイクルの間、同じタグ値を有するデータを送信するように設定される。このタグ値の使用については、以下でさらに詳細に説明する。ステップ764に続いて、または、新たなローカル/遠隔対が追加される予定でない場合のステップ762に続いて、ステップ766では、マルチボックスオペレーションが再開される。ステップ766に続いて、処理は完了する。
図17を参照して、フローチャート780は、ホストがマルチボックスモードのグループとして実行されている複数のローカル/遠隔対のサイクル切り換えを管理することに関連して実行されるステップを示している。本明細書の他の箇所で説明するように、マルチボックスモードは、ホストに2つ以上の遠隔/ローカル対のサイクル切り換えを同期させて遠隔記憶装置間のデータ一貫性を維持することを含む。サイクル切り換えは、ローカル記憶装置によって内部で生成されるのはなく、ホストによって調整される。これについては、以下でさらに詳細に説明する。
フローチャート780の処理はテストステップ782で開始する。テストステップ782は、M秒が経過したかどうかを判断する。非マルチボックスオペレーションと同様に、サイクルの切り換えは、M秒ごとに直ちに行われる。ここで、Mは、さまざまな性能パラメータを最適にするように選ばれた数である。数Mが増加すると、切り換えに関連したオーバーヘッド量が減少する。一方、Mが増加すると、故障に関連して失われる可能性のあるデータ量も増加する。本明細書の一実施の形態では、Mは、30秒となるように選ばれる。ただし、Mについて他の値を使用できることも明らかである。
テストステップ782において、M秒が経過していないと判断されると、制御はステップ782に戻って、M秒が経過するまで待ち続ける。テストステップ782において、M秒が経過したと判断されると、制御はステップ782からステップ784へ移る。ステップ784において、ホストは、ローカル/遠隔対のすべてが切り換わる準備ができているかどうかを判断するために、マルチボックスグループのローカル記憶装置のすべてに問い合わせを行う。ローカル/遠隔対が切り換わる準備ができていることについては、以下でさらに詳細に説明する。
ステップ784に続いて、テストステップ786は、ローカル/遠隔対のすべてが切り換わる準備ができているかどうかを判断する。できていないと判断されると、制御はステップ784に戻り、問い合わせを再開する。本明細書の一実施の形態では、その後の問い合わせは、前の問い合わせの際に切り換わる準備ができていなかったローカル/遠隔対にのみ行う必要があり、或るローカル/遠隔対が一旦切り換わる準備ができると、その対は、切り換えが行われるまでその状態を維持する。
テストステップ786において、マルチボックスグループのローカル/遠隔対のすべてが切り換わる準備ができていると判断されると、制御はステップ786からステップ788へ移る。ステップ788では、インデックス変数Nが1に等しく設定される。このインデックス変数Nは、すべてのローカル/遠隔対(すなわち、図15のテーブル730のエントリ732〜734のすべて)にわたって繰り返すのに使用される。ステップ788に続いて、テストステップ792は、インデックス変数Nがマルチボックスグループのローカル/遠隔対の個数よりも大きいかどうかを判断する。大きくない場合には、制御はステップ792からステップ794へ移る。ステップ794では、ホストがコマンド(例えば、適切なシステムコマンド)をN番目のローカル記憶装置へ送信することによって、N番目の対のN番目のローカル記憶装置について、ウィンドウオープンが実行される。ステップ794においてN番目のローカル記憶装置のウィンドウをオープンすることにより、ウィンドウがクローズされるまで、ステップ794のウィンドウのオープン前に開始されていないホストによるあらゆる書き込みが完了しないように、N番目のローカル記憶装置は書き込みを一時中断する(以下で説明)。書き込みオペレーションを完了しないことによって、第2の依存した書き込みが、サイクルの切り換えの完了前に行われることが防止される。ウィンドウをオープンする前に開始された進行中のどの書き込みも、ウィンドウがクローズされる前に完了することができる。
ステップ794に続いてステップ796では、N番目のローカル記憶装置について、サイクルの切り換えが実行される。ステップ796でサイクルの切り換えを実行するには、ホスト702からN番目のローカル記憶装置へコマンドを送信する必要がある。N番目のローカル記憶装置によるホストからのコマンドの処理については、以下でさらに詳細に説明する。ステップ796で実行される処理の一部は、データに割り当てられるタグの新たな値をホストに提供させることを含むことができる。タグについては、本明細書の他の箇所でさらに詳細に説明する。代替的な一実施の形態では、ステップ794、796で実行されるオペレーションを単一の統合ステップ797として実行することもできる。このステップ797は、ステップ794、796の周囲に描いたボックスによって示されている
。
ステップ796に続いてステップ798では、インデックス変数Nがインクリメントされる。ステップ798に続いて、制御はテストステップ792に戻り、インデックス変数Nがローカル/遠隔対の個数よりも大きいかどうかが判断される。
テストステップ792において、インデックス変数Nがローカル/遠隔対の個数よりも大きいと判断されると、制御はテストステップ792からステップ802へ移る。ステップ802では、インデックス変数Nが1に等しく設定される。ステップ802に続いて、テストステップ804は、インデックス変数Nがローカル/遠隔対の個数よりも大きいかどうかを判断する。大きくない場合には、制御はステップ804からステップ806へ移る。ステップ806では、N番目のローカル記憶装置のウィンドウがクローズされる。ステップ806のウィンドウのクローズは、ホストが、N番目のローカル記憶装置に書き込みオペレーションを再開させるコマンドを当該N番目のローカル記憶装置へ送信することによって行われる。したがって、ステップ794のウィンドウのオープンによって一時中断された処理中のあらゆる書き込みを、今度は、ステップ806の実行後に完了することができる。ステップ806に続いて、制御はステップ808へ移る。ステップ808では、インデックス変数Nがインクリメントされる。ステップ808に続いて、制御はテストステップ804へ戻り、インデックス変数Nがローカル/遠隔対の個数よりも大きいかどうかが判断される。大きい場合には、制御はテストステップ804からステップ782へ戻り、次のサイクル切り換え処理が開始される。
図18を参照して、フローチャート830は、サイクル切り換えに関連してローカル記憶装置により実行されるステップを示している。図18のフローチャート830は、ローカル記憶装置がマルチボックスモードおよび非マルチボックスモードの双方をサポートする場合において、図10のフローチャート350を取り替えたものである。すなわち、フローチャート830は、非マルチボックスモードをサポートする図10のフローチャート350のステップと同様に実行されるステップを示すことに加えて、マルチボックスモードをサポートするステップをも含む。
処理は最初のテストステップ832で開始する。テストステップ832では、ローカル記憶装置がマルチボックスモードで動作しているかどうかを判断する。図16のフローチャート750は、ホストがローカル記憶装置へメッセージを送信するステップ758を示していることに留意されたい。ステップ758で送信されたメッセージは、ローカル記憶装置がマルチボックスモードで動作しているかどうかを当該ローカル記憶装置へ示す。ステップ758でホストによって送信されたメッセージを受信すると、ローカル記憶装置は、ローカル記憶装置がマルチボックスモードで動作しているかどうかを示すように内部変数を設定する。この内部変数は、テストステップ832で調べることができる。
テストステップ832において、ローカル記憶装置がマルチボックスモードにないと判断されると、制御はテストステップ832からステップ834へ移り、サイクル切り換えのためM秒間待機する。ローカル記憶装置がマルチボックスモードで動作していない場合には、当該ローカル記憶装置は、ローカル記憶装置のサイクル切り換えを制御し、したがって、ステップ834を実行して、次のサイクル切り換えを開始する前にM秒間待機する。
ステップ834に続いて、または、ローカル記憶装置がマルチボックスモードにある場合のステップ832に続いて、テストステップ836では、ローカル記憶装置のHAのすべてが、当該HAが前のシーケンス番号のI/Oのすべてを完了したことを示すビットを設定したかどうかを判断する。シーケンス番号が変化すると、HAのそれぞれは、その変
化を通知し、前のシーケンス番号のすべてのI/Oが完了したことを示すビットを設定する。例えば、シーケンス番号がN−1からNへ変化すると、HAは、HAがシーケンス番号N−1のすべてのI/Oを完了した時にビットを設定する。場合によって、HAの単一のI/Oが長い時間を要することがあり、シーケンス番号が変化した後であっても依然として実行中の場合があることに留意されたい。また、いくつかのシステムでは、異なるメカニズムを使用して、すべてのHAがHAのN−1のI/Oを完了したかどうかを判断することができることにも留意されたい。この異なるメカニズムには、デバイステーブルを調べることが含まれ得る。テストステップ836において、すべてのHAが適切なビットを設定したと判断されると、制御はテストステップ836からステップ888へ移る。ステップ888は、ローカル記憶装置の非アクティブのデータ・セットが空であるかどうかを判断する。テストステップ888において、非アクティブのデータ・セットが空であると判断されると、制御はステップ888からステップ899へ移る。ステップ899では、ローカル記憶装置から遠隔記憶装置へのデータのコピーが一時中断される。シーケンス番号の切り換えが完了するまでデータのコピーを一時中断することは有益である。
ステップ899に続いて、テストステップ892では、ローカル記憶装置がマルチボックスモードにあるかどうかを判断する。テストステップ892において、ローカル記憶装置がマルチボックスモードにあると判断されると、制御はテストステップ892からテストステップ894へ移る。テストステップ894では、対応する遠隔記憶装置のアクティブなデータ・セットが空であるかどうかを判断する。以下でさらに詳細に説明するように、遠隔記憶装置は、遠隔記憶装置のアクティブなデータ・セットを空にすると、ローカル記憶装置へメッセージを送信する。このメッセージに応答して、ローカル記憶装置は、テストステップ894で調べられる内部変数を設定する。
テストステップ894において、遠隔記憶装置のアクティブなデータ・セットが空であると判断されると、制御はテストステップ894からステップ896へ移る。ステップ896では、ローカル記憶装置において、当該ローカル記憶装置がサイクルを切り換える準備ができていることを示す内部変数が設定される。図17のフローチャート780に関連して上述したように、ホストは、ローカル記憶装置のそれぞれが切り換わる準備ができているかどうかを判断するために、ローカル記憶装置のそれぞれに問い合わせを行う。ホストが提供したこの問い合わせに応答して、ローカル記憶装置は、ステップ896で設定された内部変数を調べ、その結果をホストへ返す。
ステップ896に続いて、テストステップ898では、ローカル記憶装置が、サイクル切り換えを実行するコマンドを待ち、それをホストから受信する。図17のフローチャート780に関連して上述したように、ローカル記憶装置がマルチボックスモードで動作している場合に、ホストは、サイクルを切り換えるコマンドをローカル記憶装置へ提供する。したがって、ローカル記憶装置は、ステップ898でコマンドを待つ。ローカル記憶装置がマルチボックスモードで動作している場合にのみステップ898に到達する。
ローカル記憶装置がホストから切り換えコマンドを受信すると、制御はステップ898からステップ902へ移り、コミットメッセージが遠隔記憶装置へ送信される。テストステップ892において、ローカル記憶装置がマルチボックスモードにないと判断されると、テストステップ892からもステップ902に到達することに留意されたい。ステップ902では、ローカル記憶装置が、コミットメッセージを遠隔記憶装置へ送信する。遠隔記憶装置は、特定のシーケンス番号のコミットメッセージの受信に応答して、上述したように、そのシーケンス番号に対応するデータのリストアを開始する。
ステップ902に続いてステップ906では、シーケンス番号がインクリメントされ、(ホストからの)タグの新たな値が記憶される。シーケンス番号は上述した通りである。
タグは、上述したように、ステップ764およびステップ796においてローカル記憶装置へ提供されたタグである。タグは、本明細書の他の箇所で説明するように、データ復旧を円滑にするのに使用される。
ステップ906に続いてステップ907では、サイクル切り換えの完了が、ローカル記憶装置からホストへメッセージを送信することによって、ローカル記憶装置からホストへ確認される。いくつかの実施の形態では、ローカル記憶装置がマルチボックスモードにない場合に、ホストは必ずしもサイクル切り換えが行われる時に関心を持つとは限らないので、ローカル記憶装置がマルチボックスモードにあるかどうかを、ステップ907を実行することの条件とすることができる。
ステップ907に続いてステップ908では、テストステップ836で使用されるHAのビットをシーケンス番号のインクリメントに関連して再び設定できるように、当該ビットがすべてクリアされる。ステップ908に続いて、テストステップ912では、遠隔記憶装置がコミットメッセージに肯定応答したかどうかを判断する。ローカル/遠隔対がマルチボックスモードで動作しており、かつ、遠隔記憶装置のアクティブなデータ・セットがステップ894で空であると判断された場合に、そのアクティブなデータ・セットがすでに空であるので、遠隔記憶装置は、サイクル切り換えの準備を直ちに行ってから、そのほぼ直後に、コミットメッセージに肯定応答すべきであることに留意されたい。
テストステップ912において、コミットメッセージが遠隔記憶装置によって肯定応答されたと判断されると、制御はステップ912からステップ914へ移る。ステップ914では、ローカル記憶装置から遠隔記憶装置へのコピーが再開できるように、ステップ899で提供されたコピーの一時中断がクリアされる。ステップ914に続いて、処理は完了する。
図19を参照して、フローチャート940は、RAが非アクティブなバッファをスキャンして、ローカル記憶装置から遠隔記憶装置へRDFデータを送信することに関連して実行されるステップを示している。図19のフローチャート940は、図6のフローチャート200と類似しており、類似したステップには、同じ参照番号が与えられている。一方、フローチャート940は、追加された2つのステップ942、944を含む。これらのステップ942、944は、図6のフローチャート200には見られない。追加されたステップ942、944は、マルチボックス処理を円滑にするのに使用される。データがステップ212で送信された後、制御はステップ212からテストステップ942へ移る。テストステップ942は、送信されているデータが、ローカル記憶装置の非アクティブのデータ・セットにおける最後のデータであるかどうかを判断する。最後のデータでない場合、制御はステップ942からステップ214へ移り、処理は、図6のフローチャート200に関連して上述したように続く。そうではなく、テストステップ942において、送信されているデータがデータ・セットの最後のデータであると判断されると、制御はステップ942からステップ944へ移り、最後のデータが送信されたことを示す特別なメッセージがローカル記憶装置から遠隔記憶装置へ送信される。ステップ944に続いて、制御はステップ214へ移り、処理は、図6のフローチャート200に関連して上述したように続く。いくつかの実施の形態では、ステップ942、944は、データを転送するプロセスおよび/またはハードウェアデバイスとは異なる別個のプロセス(および/または別個のハードウェアデバイス)によって実行することができる。
図20を参照して、フローチャート950は、RAが非アクティブなバッファをスキャンして、ローカル記憶装置から遠隔記憶装置へRDFデータを送信することに関連して実行されるステップを示している。図20のフローチャート950は、図13のフローチャート500と類似しており、類似したステップには、同じ参照番号が与えられている。一
方、フローチャート950は、追加されたステップ952を含む。このステップ952は、図13のフローチャート500には見られない。追加されたステップ952は、マルチボックス処理を円滑にするのに使用され、図19のフローチャート940の追加されたステップ944と同様である。テストステップ524において、ローカル記憶装置から遠隔記憶装置へ送信されるスロットがそれ以上残っていないと判断された後、制御は、ステップ524からステップ952へ移り、データ・セットの最後のデータが送信されたことを示す特別なメッセージがローカル記憶装置から遠隔記憶装置へ送信される。ステップ952に続いて、処理は完了する。
図21を参照して、フローチャート960は、遠隔記憶装置のアクティブなデータ・セットが空であることの表示を提供することに関連して、遠隔記憶装置で実行されるステップを示している。フローチャート960は、新たなステップ962を示すことを除いて、図9のフローチャート300と同様である。この新たなステップ962は、遠隔記憶装置のアクティブなデータ・セットがリストアされた後に実行される。ステップ962では、遠隔記憶装置が、遠隔記憶装置のアクティブなデータ・セットが空であることを示すメッセージをローカル記憶装置へ送信する。ローカル記憶装置は、ステップ962で送信されたメッセージを受信すると、遠隔記憶装置の非アクティブなバッファが空であることを示す内部変数を設定する。このローカル変数は、上述した図18のフローチャート830のテストステップ894に関連して調べられる。
図22を参照して、略図980は、ホスト702、ローカル記憶装置703〜705、および遠隔記憶装置706〜708を示している。これらは、図14の略図700に示したものである。また、略図980は、ホスト702およびローカル記憶装置703〜705に接続された第1の代替ホスト982も含む。また、略図980は、遠隔記憶装置706〜708に接続された第2の代替ホスト984も含む。これらの代替ホスト982、984は、以下でさらに詳細に説明するように、データ復旧に使用することができる。
遠隔側でのデータの復旧が必要な場合に、その復旧は、ローカル記憶装置703〜705と遠隔記憶装置706〜708との間のリンクが依然として動作しているという条件では、ホスト702またはホスト982によって行うことができる。これらのリンクが動作していない場合、データ復旧は、遠隔記憶装置706〜708に接続された第2の代替ホスト984によって実行することができる。第2の代替ホスト984は、遠隔記憶装置706〜708の1つ以上と同じロケーションに設けることができる。あるいは、第2の代替ホスト984は、遠隔記憶装置706〜708のすべてから遠隔にすることもできる。システム全体にわたって伝達されるテーブル730は、データ復旧に関連してアクセスされ、マルチボックスグループのメンバが決定される。
図23を参照して、フローチャート1000は、データ復旧オペレーションに関連して、遠隔記憶装置706〜708のそれぞれにより実行されるステップを示している。フローチャート1000のステップは、データ復旧が必要であることを示す信号またはメッセージの受信時に、遠隔記憶装置706〜708のそれぞれによって実行することができる。いくつかの実施の形態では、遠隔記憶装置は、例えば、最後の書き込みからの時間の長さ等の従来通りの判定基準を使用して、データ復旧が必要であることを自動的に検知することが可能な場合がある。
処理は最初のステップ1002で開始する。ステップ1002では、遠隔記憶装置は、本明細書の他の箇所で説明する方法で、アクティブなデータ・セットをリストアすることを終了する。ステップ1002に続いて、テストステップ1004では、遠隔記憶装置の非アクティブのデータ・セットが完全である(すなわち、データのすべてがそこに書き込まれている)かどうかを判断する。遠隔記憶装置は、上述したステップ944、952で
ローカル記憶装置によって送信されたメッセージを使用して、非アクティブのデータ・セットが完全であるかどうかを判断できることに留意されたい。すなわち、ローカル記憶装置は、ステップ944またはステップ952でメッセージを送信した場合、そのメッセージの受信を使用して、非アクティブのデータ・セットが完全であることを確認することができる。
テストステップ1004において、遠隔記憶装置の非アクティブのデータ・セットが完全でないと判断されると、制御はテストステップ1004からステップ1006へ移る。ステップ1006では、非アクティブのデータ・セットからのデータが廃棄される。不完全な非アクティブのデータ・セットのデータは、対応するアクティブなデータ・セットと矛盾する場合があるので、不完全な非アクティブのデータ・セットを使用してデータ復旧は実行されない。したがって、データ復旧は、アクティブなデータ・セットを使用して実行され、場合により、完全である非アクティブのデータ・セットを使用して実行される。ステップ1006に続いて、処理は完了する。
テストステップ1004において、非アクティブのデータ・セットが完全であると判断されると、制御はステップ1004からステップ1008へ移る。ステップ1008では、遠隔記憶装置がホストによる介入を待つ。非アクティブのデータ・セットにおいて、ホスト702、982、984の1つは、適宜、マルチボックスグループの遠隔記憶装置のすべての状態を調べて、復旧を実行する方法を決定する必要がある。これについては、以下でさらに詳細に説明する。
ステップ1008に続いてテストステップ1012では、ホストが、非アクティブのデータ・セットを廃棄するコマンドをすべての記憶装置へ提供したかどうかが判断される。提供した場合、制御はステップ1012からステップ1006へ移り、非アクティブのデータ・セットが廃棄される。ステップ1006に続いて、処理は完了する。
テストステップ1002において、ホストが完全な非アクティブのデータ・セットをリストアするコマンドを提供したと判断されると、制御はステップ1012からステップ1014へ移る。ステップ1014では、非アクティブのデータ・セットが遠隔記憶装置へリストアされる。非アクティブのデータ・セットを遠隔記憶装置にリストアすることには、本明細書の他の箇所で説明するように、非アクティブのデータ・セットをアクティブなデータ・セットにし、次いで、そのアクティブなデータ・セットをディスクへ書き込むことが必要とされる。ステップ1014に続いて、処理は完了する。
図24を参照して、フローチャート1030は、ホスト702、982、984の1つが、遠隔記憶装置のそれぞれの非アクティブのデータ・セットのそれぞれを廃棄するのか、それともリストアするのかを判断することに関連して実行されるステップを示している。リストアを実行しているホスト702、982、984の1つは、本明細書の他の箇所で説明したように、ホストに割り当てられたタグを使用して、遠隔記憶装置706〜708と通信し、それら遠隔記憶装置へコマンドを提供し、それら遠隔記憶装置から情報を受信する。
処理は最初のステップ1032で開始する。ステップ1032では、遠隔記憶装置のいずれかが完全な非アクティブのデータ・セットを有するかどうかが判断される。有しない場合、それ以上、処理は実行されず、上述したように、遠隔記憶装置は、ホストの介入なしに、遠隔記憶装置の不完全なデータ・セットを廃棄する。有する場合、制御はテストステップ1032からテストステップ1034へ移る。テストステップ1034では、ホストが、遠隔記憶装置のすべてが完全な非アクティブのデータ・セットを有するかどうかを判断する。有する場合、制御はテストステップ1034からテストステップ1036へ移
る。テストステップ1036では、遠隔記憶装置のすべての完全な非アクティブのデータ・セットのすべてが同じタグ番号を有するかどうかが判断される。本明細書の他の箇所で説明するように、タグは、ホストによって制御されて同じサイクルの間同じ値を有することを除いて、シーケンス番号と類似の方法で、ホストによって割り当てられ、システムによって使用されてデータが特定される。
テストステップ1036において、遠隔記憶装置のすべてが、非アクティブのデータ・セットについて同じタグを有すると判断されると、制御はステップ1036からステップ1038へ移る。ステップ1038では、非アクティブのデータ・セットのすべてがリストアされる。ステップ1038を実行することによって、遠隔記憶装置のすべてが同じサイクルからのデータを有することが保証される。ステップ1038に続いて、処理は完了する。
テストステップ1034において、非アクティブのデータ・セットのすべてが完全でないと判断されるか、または、ステップ1036において、完全な非アクティブのデータ・セットのすべてが同じタグを有しないと判断されると、制御はステップ1042に移る。ステップ1042において、ホストは、小さい方のタグ番号を有する完全な非アクティブのデータ・セットをリストアするコマンドを遠隔記憶装置へ提供する。説明の目的で、タグ番号がインクリメントされ、その結果、タグ番号が小さいほど、古いデータを表すものと仮定する。例として、第1の遠隔記憶装置が、タグ値3を備えた完全な非アクティブのデータ・セットを有し、第2の遠隔記憶装置が、タグ値4を備えた完全な非アクティブのデータ・セットを有する場合、ステップ1042によって、第1の遠隔記憶装置(第2ではない)は、第1の遠隔記憶装置の非アクティブのデータ・セットをリストアする。ステップ1042に続いて、ステップ1044では、ホストは、大きい方のタグ番号(例えば、上記例の第2の遠隔記憶装置)を有する完全な非アクティブなバッファを廃棄するコマンドを遠隔記憶装置へ提供する。ステップ1044に続いて、処理は完了する。
ステップ1044の実行に続いて、遠隔記憶装置のそれぞれは、当該遠隔記憶装置の他のもののデータと同じタグ値に関連付けられたデータを含む。したがって、遠隔記憶装置706〜708における復旧されたデータは一貫性を有するはずである。
図25を参照して、略図1120は、記憶装置1124が、メモリ1126に接続された複数のディレクタ1152a〜1152cを含む一実施の形態を示している。記憶装置1124は、記憶装置24および/または記憶装置26と同様のものである。メモリ1126は、記憶装置24、26のメモリ37および/またはメモリ38と同様のものである。ディレクタ1152a〜1152cのそれぞれは、HA、DA、および/またはRAを表す。HAは、記憶装置のHA28と同様のものであり、DAは、記憶装置のDA35a〜35c、36a〜36cと同様のものであり、かつ/またはRAは、記憶装置のRA30a〜30c、32a〜32cと同様のものである。本明細書に開示する一実施の形態では、最大16個までのディレクタをメモリ1126に接続することができる。もちろん、他の実施の形態の場合、より大きな最大数またはより小さな最大数のディレクタを使用することができる。
また、略図1120は、オプションの通信モジュール(CM)1154も示している。このCM1154は、ディレクタ1152a〜1152c間の代替的な通信パスを提供する。ディレクタ1152a〜1152cのそれぞれは、CM1154に接続することができ、その結果、ディレクタ1152a〜1152cのどの1つも、メモリ1126を通過する必要なく、ディレクタ1152a〜1152cの他のどの1つにもメッセージおよび/またはデータを送信することができる。ディレクタ1152a〜1152cのうちの送信ディレクタが適切なアドレスを提供し、それによって、ディレクタ1152a〜115
2cのうちの目的の受信ディレクタにメッセージおよび/またはデータを受信させる従来のMUX/ルータ技術を使用して、CM1154を実施することができる。これに加えて、ディレクタ1152a〜1152cのうちの送信ディレクタは、同時に、他のディレクタ1152a〜1152cのすべてへメッセージをブロードキャストできる場合がある。
図26を参照して、略図1200は、送信元グループ1202、ローカル宛先1204、および遠隔宛先1206を含むシステムを示している。送信元グループ1202は、ローカル宛先1204および遠隔宛先1206の双方と通信する。送信元グループ1202は、単一の記憶装置、複数の記憶装置、単一のホストを有する単一もしくは複数の記憶装置、または、複数のホストを有する単一もしくは複数の記憶装置を表すことができる。データが、送信元グループ1202で生成され、送信元グループ1202で記憶され、そして、ローカル宛先1204および遠隔宛先1206へ送信される。いくつかの実施の形態では、ローカルグループは、図14に関連して上述した実施の形態に関連して上述したようないくつかの方法で動作することができる。
本明細書の一実施の形態では、ローカル宛先1204は、送信元グループ1202に比較的近接した単一または複数の記憶装置を表し、それによって、送信元グループ1202からローカル宛先1204へ同期データミラーリングすることが可能になる。本明細書の一実施の形態では、ローカル宛先1204は、送信元グループ1202と同じ建物、同じ施設、および/または同じ企業ロケーションに位置する。したがって、例えば、ローカル宛先1204は、送信元グループ1202を管理する同じ一群の個人によって管理されるバックアップ記憶装置(単数または複数)を表すことができる。
遠隔宛先1206は、送信元グループ1202から地理的に遠いロケーションの1つの記憶装置および/または複数の記憶装置を表す。例えば、遠隔宛先1206は、米国の西海岸の1つの記憶装置または1群の記憶装置を表すことがある一方、送信元グループ1202は、米国の東海岸に位置する。送信元グループ1202と遠隔宛先1206との間の地理的距離が比較的大きいため、同期データ転送モードまたは準同期データ転送モードを使用して、遠隔宛先1206におけるデータを送信元グループ1202からミラーリングすることは実際的でない場合がある。すなわち、送信元グループ1202から遠隔宛先1206へ、および、戻りの送信元グループ1202へのラウンドトリップ時間が長いため、ローカルグループ1202のホストへの書き込みに肯定応答する前に、遠隔宛先1206においてデータの肯定応答を提供する同期データミラーリングまたは準同期データミラーリングを使用することが実現できない場合がある。このような場合、送信元グループ1202と遠隔宛先1206との間で順序書き込みを使用できる場合があり、その結果、遠隔宛先1206は、幾分時間は遅延するが、送信元グループ1202の一貫性のあるミラーとなる。
ローカル宛先1204と遠隔宛先1206との間にも、通信パス1208が存在することがある。送信元グループ1202が動作している間、通信パス1208を使用することはできない。一方、本明細書の他の箇所でさらに詳細に説明するように、送信元グループ1202が動作しなくなった場合、ならびに/または、送信元グループ1202と、ローカル宛先1204および遠隔宛先1206の一方または双方との間の通信リンクが動作しなくなった場合、通信パス1208を使用して、ローカル宛先1204と遠隔宛先1206との間でデータを同期させることができる。これに加えて、本明細書の他の箇所でさらに詳細に説明するように、ローカル宛先1204または遠隔宛先1206の一方へホストを提供して、同期後にシステムのオペレーションを再開することもできる。ホストがローカル宛先1204に接続された状態で、オペレーションが再開されると、遠隔宛先1206がローカル宛先1204のミラーとなるように通信リンク1208を使用することができることに留意されたい。逆に、ホストを遠隔宛先1206に提供することによって、オ
ペレーションが再開されると、ローカル宛先1204が遠隔宛先1206のミラーとなるように通信リンク1208を使用することができる。
図27を参照して、フローチャート1230は、ローカル宛先1204におけるパラメータを初期化して、本明細書で説明する復旧メカニズムを提供することに関連して実行されるステップを示している。本明細書で説明する復旧メカニズムは、シンメトリックスディファレンシャルデータファシリティ(SDDF(Symmetrix Differential Data Facility))を使用する。このSDDFは複数のセッションを考慮する。各セッションは各セッションに関連付けられたビットマップを有し、このビットマップは、特定の期間中、対応するデータロケーションへ書き込みが行われるたびに1に設定されるビットを有する。特定のロケーションに対する書き込みが行われない場合、対応するビットはクリアされた状態を維持する(すなわち、0を維持する)。本明細書の一実施の形態では、各ビットはデータのトラックに対応することができる。しかしながら、他の実施の形態の場合、各ビットをデータのより大きなインクリメントまたはより小さなインクリメントに対応させることが可能であり、また、異なるビットおよび/または異なる数組のビットが、異なる量のデータに対応することも可能である。
SDDFセッションに関連したオペレーションは、SDDFセッションを作成すること、SDDFセッションをアクティブにすること、SDDFセッションのビットマップのビットをクリアすること、SDDFセッションを非アクティブにすること、およびSDDFセッションを終了することを含む。SDDFセッションを作成すること、SDDFセッションのビットをクリアすること、およびSDDFセッションを終了することは、全く説明を要しない。SDDFセッションをアクティブにすることによって、SDDFセッションのビットマップのビットは、対応するトラック(または、他の適切なデータインクリメント)が書き込まれるたびに設定される。SDDFセッションを非アクティブにすることによって、ビットの設定が一時中断される。本明細書で説明するSDDFメカニズムは、米国特許第6,366,986号に提供された説明を使用して実施することができる。この米国特許は、参照により本明細書に援用される。
フローチャート1230の処理は最初のステップ1232で開始する。ステップ1232では、第1のSDDFセッションSDDF_1が作成される。本明細書で説明する一実施の形態では、SDDFセッションの作成により、そのセッションは自動的にアクティブにはならない。ステップ1232に続いてステップ1234では、ステップ1232で作成されたSDDFセッションのビットマップのビットがクリアされる。ステップ1234に続いてステップ1236では、第2のSDDFセッションSDDF_2が作成される。ステップ1236に続いてステップ1238では、ステップ1236で作成されたSDDFセッションのビットマップのビットがクリアされる。
ステップ1238に続いてステップ1242では、状態が初期化される。ステップ1242で初期化された状態は、SDDFセッションSDDF_1またはSDDF_2のいずれをアクティブにするかを決定するのに使用することができる。本明細書の他の箇所でさらに詳細に説明するように、2つの可能な状態があり得、ステップ1242で設定される状態はトグルさせることができ、それによって、SDDF_1セッションおよびSDDF_2セッションを交互にアクティブにすることができる。他の実施の形態では、トークンまたは他の或るタイプの変数を使用して、SDDF_1またはSDDF_2のいずれを選択するかを示すことができる。ステップ1242に続いてステップ1244では、SDDF_1がアクティブにされる。ステップ1244でSDDF_1をアクティブにすることによって、ローカル宛先1204のトラック(または他のデータインクリメント)が変更されるたびに、SDDF_1セッションのビットマップのビットが設定される。
SDDF_1セッションおよびSDDF_2セッションは、送信元グループ1202による遠隔宛先1206への順序書き込みに関連して、ローカル宛先1204が送信元グループ1202により使用されるアクティブなバッファおよび非アクティブなバッファの経過を追跡するのに使用される。本明細書の他の箇所でさらに詳細に説明するように、送信元グループ1202は、送信元グループ1202から遠隔宛先1206への順序書き込みに関連してサイクル切り換えを行うごとに、サイクル切り換えが実行されたことを示すメッセージをローカル宛先1204へ送信し、その結果、ローカル宛先1204は(上述したステップ1242で初期化された)状態をトグルさせることができる。ローカル宛先1204によるサイクル切り換え情報の使用については、本明細書の他の箇所でさらに詳細に説明する。
図28Aを参照して、フローチャート1250は、通常(すなわち非故障)動作中の送信元グループ1202からのI/Oの受信に関連してローカル宛先1204により実行されるステップを示している。処理は最初のステップ1252で開始する。ステップ1252では、I/Oがローカル宛先1204によって受信される。ステップ1252に続いて、テストステップ1254では、ローカルグループ1202が、当該ローカルグループ1202と遠隔宛先1206との間の順序書き込みに関連して切り換わる準備ができていることを、送信元グループ1202から受信されたI/Oが示しているかどうかを判断する。ローカルグループ1202が切り換わる準備ができていることについては、本明細書の他の箇所でさらに詳細に説明する。
ローカルグループ1202が切り換わる準備ができていることを、受信されたデータが示している場合、制御はステップ1254からステップ1256へ移る。ステップ1256では、SDDFセッションのうち非アクティブのもの(SDDF_1またはSDDF_2)がクリアであるかどうかが判断される。いくつかの実施の形態では、ステップ1256でSDDFセッションをクリアすることができる。他の場合には、ステップ1256でSDDFセッションをクリアするのに必要な時間量を許容することができず、この場合、3つ以上のSDDFセッションをSDDF_1およびSDDF_2に使用することができ、まさにアクティブにされようとしているSDDFセッションが非同期で常にクリアされるように回転させることができる。いずれにしても、ステップ1256で実行される処理は、SDDF_1およびSDDF_2のうち非アクティブのものをクリアすることに関係し、その結果、ステップ1256の実行後、非アクティブなセッションはクリアになっている。
ステップ1256に続いてステップ1258では、SDDFセッションのうち非アクティブのものがアクティブにされ、その結果、SDDF_1およびSDDF_2の双方が、ステップ1258の処理の実行後、アクティブにされる。したがって、その後の書き込みは、SDDF_1およびSDDF_2の双方のビットマップに反映される。ステップ1258に続いて、処理は完了する。
ステップ1254において、受信されたデータが信号の切り換えの準備に対応したものでないと判断されると、制御はステップ1254からテストステップ1262へ移る。ステップ1262では、受信されたデータが、サイクル切り換えが実行されることに対応したものであるかどうかが判断される。対応したものである場合、制御はステップ1262からステップ1264へ移る。ステップ1264では、図27のフローチャート1230のステップ1242で初期化された状態がトグルされる。本明細書の他の箇所で説明するように、状態は、SDDF_1およびSDDF_2のいずれをアクティブにし、いずれを非アクティブにするかを決定するのに使用される。ステップ1264に続いてステップ1266では、SDDFセッションSDDF_1またはSDDF_2の一方が、ステップ1264で設定された状態の特定の値に応じて非アクティブにされる。SDDFセッション
がステップ1266で非アクティブにされても、そのSDDFセッションは、信号の切り換えの次の準備が受信されるまでクリアされない。もちろん、上述したように、3つ以上のSDDFセッションが、SDDF_1およびSDDF_2に使用される場合には、ステップ1266で非アクティブにされたSDDFセッションを維持できる一方、別のSDDFセッションは、上述したステップ1258において、アクティブにする準備のためクリアされる。
ステップ1262において、受信されたデータがサイクル切り換えに対応しないものであると判断されると、制御はテストステップ1262からステップ1268へ移る。ステップ1268では、I/Oが実行される。例えば、I/Oが書き込みオペレーションである場合、ステップ1268では、データがローカル宛先1204のストレージ領域へ書き込まれる。ステップ1268に続いてステップ1272では、I/Oオペレーションが書き込みオペレーションであるかどうかが判断される。書き込みオペレーションでない(例えば、I/Oオペレーションが読み出しオペレーションである)場合、処理は完了する。書き込みオペレーションである場合、制御はステップ1272からステップ1274へ移る。ステップ1274では、SDDFセッションのいずれがアクティブにされるかに応じて、SDDFセッションSDDF_1、SDDF_2の適切な一方または双方のビットが設定される。ステップ1274に続いて、処理は完了する。
場合によっては、SDDFビットマップを、同じSDDFビットマップを指し示す直前にクリアするのを待つことが望ましくない場合がある。そのような場合、3つ以上のSDDFビットマップを有することが有益な場合がある。この場合、SDDF_1およびSDDF_2のような2つが同時に使用される一方、SDDFビットマップの残りのものはすでにクリアであり、使用されるのを待っているか、または、バックグラウンドプロセスを使用してクリアされていることになる。例えば、3つのビットマップSDDF_A、SDDF_B、およびSDDF_Cを使用すると、SDDF_1はSDDF_Aに対応することができる一方、SDDF_2はSDDF_Cに対応することができる。このような場合、SDDF_AおよびSDDF_Cに対して処理が実行されている間、SDDF_Bをクリアすることができる。サイクルが切り換わる時、SDDF_B(すでにクリアである)を使用できる一方、SDDF_Cは、サイクル切り換えが完了した後であっても実行できるバックグラウンドプロセスを使用してクリアされ、新たなデータがSDDF_Bにログ記録されている。
図28Bを参照して、フローチャート1280は、複数のSDDFビットマップSDDF[0]、SDDF[1]、…SDDF[NMAPS−1]を使用する代替的な一実施の形態を示している。ここで、NMAPSはSDDFマップの個数である。本明細書の一実施の形態では、NMAPSは2より大きい(例えば、3)。フローチャート1280のステップの多くは、図28Aのフローチャート1250のステップと同様である。
処理は最初のステップ1282で開始する。ステップ1282では、I/Oがローカル宛先1204によって受信される。ステップ1282に続いて、テストステップ1283では、ローカルグループ1202が、当該ローカルグループ1202と遠隔宛先1206との間の順序書き込みに関連して切り換わる準備ができていることを、送信元グループ1202から受信されたI/Oが示しているかどうかを判断する。ローカルグループ1202が切り換わる準備ができていることについては、本明細書の他の箇所でさらに詳細に説明する。
ローカルグループ1202が切り換わる準備ができていることを、受信されたデータが示している場合、制御はステップ1283からステップ1284へ移る。ステップ1284では、インデックスKがインクリメントされ、その結果がモジュロNMAPSに設定さ
れる。ステップ1284に続いてステップ1285では、SDDF[K]がクリアであることが確認される。ステップ1285に続いてステップ1286では、SDDF[K]がアクティブにされ、その結果、ステップ1286の処理の実行後、SDDF[K]およびSDDF[K−1]の双方がアクティブにされる。したがって、その後の書き込みは、SDDF[K]およびSDDF[K−1]の双方のビットマップに反映される。ステップ1286に続いて、処理は完了する。Kが0である場合、SDDF[K−1]は実際にはSDDF[NMAPS−1]を指すことに留意されたい。
ステップ1283において、受信されたデータが信号の切り換えの準備に対応したものでないと判断されると、制御はステップ1283からテストステップ1287へ移る。ステップ1287では、受信されたデータがサイクル切り換えに対応したものであるかどうかが判断される。ステップ1287において、受信されたデータがサイクル切り換えに対応したものであると判断されると(図28Aのフローチャート1250に関連した上記説明を参照)、制御はステップ1287からステップ1288へ移る。ステップ1288では、状態(上述)がトグルされる。ステップ1288に続いてステップ1289では、変数Jが、モジュロNMAPS(K−2)に等しく設定される。Kは、最も近時にアクティブにされたSDDFビットマップの経過を追跡するのに使用されるインデックス変数であるので、ステップ1289でJを設定することによって、Jは、3番目の最も近時にアクティブにされたSDDFビットマップを指し示す。ステップ1289に続いてステップ1292では、SDDF[J]ビットマップをクリアするプロセスが開始される。本明細書の他の箇所で説明するように、サイクル切り換えを完了して、新たなデータの蓄積を開始するために、ステップ1292で開始されたプロセスは完了する必要はない。
ステップ1292に続いてステップ1294では、変数Jが、モジュロNMAPS(K−1)に等しく設定される。Kは最も近時にアクティブにされたSDDFビットマップの経過を追跡するのに使用されるインデックス変数であるので、ステップ1294でJを設定することによって、Jは、2番目の最も近時にアクティブにされたSDDFビットマップを指し示す。ステップ1294に続いてステップ1296では、SDDF[J]が非アクティブにされる。しかしながら、SDDF[J]がステップ1296で非アクティブにされても、データは、次のサイクル切り換えまでリストアのために保持される。ステップ1296に続いて、処理は完了する。
図28Cを参照して、フローチャート1300は、ローカル宛先1204が通常(すなわち非故障)動作中に送信元グループ1202からI/Oを受信することに関連した処理のさらに別の実施の形態を示している。処理は最初のステップ1302で開始する。ステップ1302では、I/Oがローカル宛先1204によって受信される。ステップ1302に続いて、テストステップ1304では、受信されたデータが、サイクル切り換えが実行されていることに対応するものであるかどうかが判断される。対応するものである場合、制御はステップ1304からテストステップ1306へ移る。ステップ1306では、状態が最後にトグルされてから、2つまたは3つ以上のサイクル切り換えが行われたかどうかが判断される。行われていない場合、処理は完了する。行われた場合、制御はステップ1306からステップ1307へ移る。ステップ1307では、現在非アクティブなSDDFセッションSDDF_Xがクリアであるかどうかが判断される。クリアである場合、制御はステップ1307からステップ1308へ移る。ステップ1308では、図27のフローチャート1230のステップ1242で初期化された状態がトグルされる。本明細書の他の箇所で説明するように、状態を使用して、SDDF_1およびSDDF_2のいずれがアクティブにされ、いずれが非アクティブにされるかが判断される。
ステップ1308に続いてステップ1309では、SDDFセッションSDDF_1またはSDDF_2の一方が、その状態によって示されるように、アクティブにされる。ス
テップ1309に続いてステップ1312では、SDDFセッションの他方が非アクティブにされる。ステップ1312に続いて、処理は完了する。
テストステップ1307において、SDDF_Xがクリアでないと判断されると、制御はステップ1307からステップ1313へ移る。ステップ1313では、SDDF_Xをクリアにすることがすでに(すなわち、前の繰り返しで)開始されたかどうかが判断される。すでに開始された場合には、処理は完了する。開始されていない場合には、制御はステップ1313からステップ1314へ移る。ステップ1314では、SDDF_Xをクリアするプロセスが開始される。ステップ1314に続いて、処理は完了する。
ステップ1304において、受信されたデータがサイクル切り換えに対応するものでないと判断されると、制御はテストステップ1304からステップ1316へ移る。ステップ1316では、I/Oが実行される。例えば、I/Oが書き込みオペレーションである場合、ステップ1316では、データがローカル宛先1204のストレージ領域へ書き込まれる。ステップ1316に続いてステップ1317では、I/Oオペレーションが書き込みオペレーションであるかどうかが判断される。書き込みオペレーションでない(例えば、I/Oオペレーションが読み出しオペレーションである)場合、処理は完了する。書き込みオペレーションである場合、制御はステップ1317からステップ1318へ移る。ステップ1318では、SDDFセッションのいずれがアクティブにされるかに応じて、SDDFセッションSDDF_1またはSDDF_2(SDDF_XまたはSDDF_Y)の適切な一方のビットが設定される。ステップ1318に続いて、処理は完了する。
図29を参照して、フローチャート1320は、遠隔宛先1206における復旧データの収集に関連して実行されるステップを示している。定常状態のオペレーション中、常に復旧データを収集しているローカル宛先1204と異なり、遠隔宛先1206は、復旧データを収集する信号を受信するまで、復旧データを収集することができない。本明細書の一実施の形態では、例えば、送信元グループ1202とローカル宛先1204との間のリンク(単数または複数)が機能していないことを送信元グループ1202が検出した時、および/または、ローカル宛先1204がデータの適切な受信も処理も行っていないことを送信元グループ1202が検出した時、送信元グループ1202は、遠隔宛先1206へこのような信号を提供することができる。他の実施の形態または他の状況では、遠隔宛先1206は、送信元グループ1202以外のロケーションまたは要素から適切な信号を受信することができる。
処理は最初のステップ1322で開始する。ステップ1322では、第3のSDDFセッションSDDF_3が作成される。ステップ1322に続いて、ステップ1324では、ステップ1322で作成されたSDDFセッションのビットマップがクリアされる。ステップ1324に続いてステップ1326では、トークン値(本明細書の他の箇所でさらに詳細に説明)が0に設定される。ステップ1326に続いて、処理は完了する。
図30を参照して、フローチャート1330は、復旧データの収集に関連して遠隔宛先1206により実行されるステップを示している。処理は最初のステップ1331で開始する。ステップ1331では、遠隔宛先1206が、送信元グループ1202からの、または、適宜、他の或る送信元からの故障メッセージを待つ。故障メッセージが受信されると、制御は、ステップ1331からステップ1332へ移る。ステップ1332では、SDDF_3セッションがアクティブにされて、書き込みが実行された遠隔宛先1206のトラック(または、他の適切なデータインクリメント)に関するデータの収集が開始される。しかしながら、SDDF_3は、コミットされた書き込み(すなわち、受信されている現在のサイクルに遅れたサイクルの書き込み)を反映することに留意されたい。
ステップ1332に続いてステップ1333では、トークン値(後述)が0に初期化される。ステップ1333に続いてステップ1334では、遠隔宛先1206が送信元グループ1202からI/Oを受信する。ステップ1334で受信されたI/Oは、ローカルグループ1202が非障害モードで遠隔宛先1206へ送信した順序書き込みデータを表すことができることに留意されたい。
ステップ1334に続いて、テストステップ1336では、ステップ1334で送信元グループ1202から受信されたI/Oが、送信元グループ1202によるサイクル切り換えを示しているかどうかを判断する。示していない(すなわち、データは、遠隔宛先1206へ書き込まれる従来の順序書き込みデータまたは他の或るタイプのデータである)場合、制御はテストステップ1336からステップ1334へ戻り、次のI/Oが受信される。
テストステップ1336において、送信元グループ1202からのデータがサイクル切り換えを示していると判断されると、制御はテストステップ1336からステップ1338へ移り、トークンがインクリメントされる。トークンは、復旧データの収集を開始してからのサイクル切り換えの回数の経過を追跡するものである。ステップ1338に続いてステップ1342では、SDDF_3のビットマップが、書き込みが行われた、コミットされたサイクルのデータを反映するように設定される。ステップ1342の処理は、アクティブにされたSDDFセッションのオペレーションに関連して自動的に実行できることに留意されたい。この場合、ステップ1342を、図30に示す復旧プロセスの一部とすることが必要でないことがある。
コミットされたサイクルは、サイクル切り換え前にデータを収集するのに使用されるサイクルであることに留意されたい。ステップ1342に続いて、テストステップ1344では、処理が完了した(すなわち、エラー復旧データの収集が完了した)かどうかを判断する。エラー状況(例えば、ローカルグループ1202からローカル宛先1204へのリンクの故障)が修正された場合、または、例えば、ローカル宛先1204および遠隔宛先1206が同期している(後述)場合、処理は完了することができる。ステップ1344において、処理が完了していないと判断されると、制御はテストステップ1344からステップ1334へ戻り、別のI/Oが受信される。処理が完了していると判断されると、制御はステップ1344からステップ1331へ戻り、新たな故障メッセージを待つ。以下でさらに詳細に説明するように、いくつかの実施の形態では、ステップ1344で完了する処理は、一定の復旧パラメータのリセットも引き起こすことができることに留意されたい。
図31を参照して、フローチャート1360は、ローカル宛先1204および遠隔宛先1206を同期させることに関連して実行されるステップを示している。上述したように、ローカル宛先1204および遠隔宛先1206は、通信リンク1208を使用してそれらの間でデータを転送することによって同期させることができる。同期後、ローカル宛先1204において、または、遠隔宛先1206において、ミラーとしての他方を使用してシステムを再起動することができる。
同期に関連して、ローカル宛先1204および遠隔宛先1206のいずれが最後(すなわち、最も最新)のデータを有するかを決定し、そのデータが遠隔宛先1206およびローカル宛先1204のうち、最も最新のデータを有する一方から他方へ転送されるようにすることは有益な場合がある。
フローチャート1360の処理は、最初のステップ1362で開始する。ステップ1362では、送信元グループ1202とローカル宛先1204との間のリンクがドロップさ
れ、送信元グループ1202と遠隔宛先1206との間のリンクがドロップされる。ステップ1362におけるリンクのドロップによって、同期プロセスを損なわないことを保証することが援助される。ステップ1362に続いてステップ1364では、復旧情報が収集されている間に作成されたSDDFマップが保存される。ステップ1364に続いてステップ1366では、ステップ1362でリンクをドロップしたのと同様の理由で、送信元グループ1202とローカル宛先1204との間の順序書き込みが終了される。
ステップ1366に続いてテストステップ1368では、トークン値(上述)が所定の値Nよりも大きいかどうかが判断される。トークン値は、エラー復旧データの収集が遠隔宛先1206で開始されてから行われたサイクル切り換えの回数を示すことに留意されたい。送信元グループ1202とローカル宛先1204との間のリンクが機能しておらず、遠隔宛先1206が復旧データの収集を開始している場合、遠隔宛先1206は、ローカル宛先1204よりも最新のデータを含むことがある。これは、トークンの値を調べることによって判断される。このトークンの値は、遠隔宛先1206が復旧データの収集を開始する信号を受信してから行われたサイクル切り換えの回数を示している。したがって、テストステップ1368において、トークンが或る所定の値N(例えば2)よりも大きいと判断されると、制御はテストステップ1368からステップ1371へ移る。ステップ1371では、SDDFセッション(SDDF_1、SDDF_2、およびSDDF_3)のすべてのビットマップが(包含的論理和を使用して)OR演算され、遠隔宛先1206のトラック(または他のデータ量)、および場合によりローカル宛先1204のトラック(または他のデータ量)が決定される。これらのトラック(または他のデータ量)は、送信元グループの故障の前に送信元グループ1202と遠隔宛先1206との間で送信された、または、移動中のアクティブなバッファおよび非アクティブなバッファのデータに対応するものであると共に、場合によっては、ローカル宛先1204において相違することがあるデータに対応するものである。
ステップ1371に続いてステップ1372では、遠隔宛先1206が、SDDF_1、SDDF_2、およびSDDF_3の3つのビットマップのOR演算の結果であるビットマップの設定されたビットに対応するトラックからのデータを送信する。これらのトラックからのデータは、遠隔宛先1206およびローカル宛先1204を同期させることができるように、ローカル宛先1204へコピーすることができる。ステップ1372に続いて、処理は完了する。本明細書の一実施の形態では、Nは2よりも小さくならないように設定することができる。また、ステップ1376またはステップ1372で開始されたコピーの完了前に、ローカル宛先1204または遠隔宛先1206の適切な一方に接続されたホストによってオペレーションを再開することも可能な場合があることに留意されたい。
テストステップ1368において、トークンがNよりも大きな値を有しない(例えば、トークンが0である)と判断されると、制御はテストステップ1368からステップ1374へ移る。ステップ1374では、SDDFセッション(SDDF_1、SDDF_2、および、存在するならばSDDF_3)のすべてのビットマップが(包含的論理和を使用して)OR演算され、ローカル宛先1204のトラック(または他のデータ量)が決定される。これらのトラック(または他のデータ量)は、送信元グループ1202の故障の前に送信元グループ1202と遠隔宛先1206との間で送信された、または、移動中のアクティブなバッファおよび非アクティブなバッファのデータに対応するものである。ステップ1374に続いてステップ1376では、ビットマップのOR演算に対応するデータが、通信リンク1208を介してローカル宛先1204から遠隔宛先1206へ送信される。このデータがローカル宛先1204から遠隔宛先1206へ送信されると、ローカル宛先1204および遠隔宛先1206は同期される。ステップ1376に続いて、処理は完了する。
ステップ1372、1374、1376は、任意の個数の適切な技法を使用して達成することができる。例えば、バックグラウンドコピーは、SDDFセッションのビットマップをOR演算した結果により示されるビットを使用してデータをコピーするように開始することができる。本明細書の一実施の形態では、ステップ1372、1374、1376は、RDFを使用して実行される。この場合、R1/R2対は、まず、例えば米国特許出願第09/997,810号に開示された動的RDFメカニズムを使用して確立される。この米国特許出願は、参照により本明細書に援用される。その後、ビットマップを使用して、ローカル宛先1204および遠隔宛先1206の一方または双方のデバイステーブルマップを変更し、RDFメカニズムにバックグラウンドコピーを実行させることができる。
図32を参照して、フローチャート1380は、図31のフローチャート1360の順序書き込みの終了ステップ1366に関連して実行されるステップをさらに詳細に示している。図32の処理は、送信元グループ1202が単一の記憶装置を使用する場合のクリーンアップを示している。送信元グループ1202が2つ以上の記憶装置を含む場合、図23が示す処理を代わりに使用することができる。
処理は最初のテストステップ1382で開始する。テストステップ1382では、遠隔宛先1206が送信元グループ1202から受信した順序書き込みデータのすべてが、完全に処理された(遠隔宛先によって保存された)かどうかが判断される。すなわち、テストステップ1382では、遠隔宛先1206のディスクスペースにも少なくともキャッシュにも記憶されておらず、そのディスクスペースへの書き込み用のマークが付けられた順序書き込みサイクルに対応するデータが、遠隔宛先1206にあるかどうかが判断される。テストステップ1382において、すべての順序書き込みデータが遠隔宛先1206で処理されたと判断されると、処理は完了する。
テストステップ1382において、送信元グループ1202からの順序書き込みデータのいくつかが処理されていないと判断されると、制御はテストステップ1382からテストステップ1384へ移る。テストステップ1384では、遠隔宛先1206において受信されたが処理されてない順序書き込みデータが、完了した順序書き込みサイクルに対応するかどうかを判断する。送信元グループ1202が、特定のサイクルに対応するデータを遠隔宛先1206へ送信すると、遠隔宛先1206のサイクルは、コミットメッセージが送信元グループ1202から遠隔宛先1206へ送信されるまで完了しないことに留意されたい。テストステップ1384において、未処理のデータが、完了した順序書き込みサイクルに対応すると判断されると、制御はテストステップ1384からステップ1385へ移る。ステップ1385では、そのサイクルのデータを遠隔宛先1206のディスクへ保存し、かつ/または、遠隔記憶装置1206のキャッシュのデータをそのディスクへの書き込み用にマークを付けることによって、当該データは記憶される。ステップ1385に続いて、処理は完了する。
テストステップ1384において、送信元グループ1202からの未処理の順序書き込みデータが、完了したサイクルに対応しないと判断されると、制御はテストステップ1384からステップ1386へ移る。ステップ1386では、無効なビットが遠隔宛先1206のデバイステーブルに設定される。ステップ1386で設定された無効なビットは、遠隔宛先1206のトラック(または他の或るデータインクリメント)が、無効なデータを含み、したがって、最新のものにするために別のデバイスからコピーを行う必要があることを示す。この場合、この別のデバイスは、ローカル宛先1204および遠隔宛先1206のいずれが最も最新の情報を含むかに応じてローカル宛先1204とすることができる。遠隔宛先1206のデバイステーブルで無効に設定された特定のトラック(または他
のデータ要素)は、送信元グループ1202から受信された未処理の順序書き込みデータによって示されたトラックに対応する。ステップ1386に続いてステップ1387では、未完了のサイクルの未処理の順序書き込みデータが廃棄される。ステップ1387に続いて、処理は完了する。
図33を参照して、フローチャート1390は、ローカル宛先1204から遠隔宛先1206へデータがコピーされるステップ1376、または、遠隔宛先1206からローカル宛先1204へデータがコピーされるステップ1372に関連して実行されるステップをさらに詳細に示している。処理は最初のステップ1392で開始する。ステップ1392では、ローカル宛先1204および遠隔宛先1206のいずれが復旧後のR1デバイスであろうとも、(ステップ1374からの)SDDF_1、SDDF_2、およびSDDF_3のOR演算を使用して、デバイステーブルが設定される。データがR1デバイスからR2デバイスへコピーされる場合、遠隔トラックに対応するデバイステーブルのロケーションが、ステップ1392で設定される。そうではなく、データがR2デバイスからR1デバイスへコピーされる場合、ローカルトラックに対応するデバイステーブルのロケーションが、ステップ1392で設定される。多くの場合、ステップ1392におけるテーブルの変更に対応するトラックは、同じであるか、または、上述したステップ1386からのテーブルに対する変更の上位セットである。
ステップ1392に続いてステップ1396では、バックグラウンドコピープロセスが開始される。ステップ1396で開始されたバックグラウンドコピープロセスによって、データはバックグラウンドプロセスでコピーされる。ステップ1396に続いて、処理は完了する。
図34を参照して、フローチャート1450は、送信元グループ1202と、ローカル宛先1204と、遠隔宛先1206との間で通常オペレーションがリストアされた時に復旧パラメータを再初期化することに関連して実行されるステップを示している。処理は最初のステップ1452で開始する。ステップ1452では、SDDFセッションSDDF_1およびSDDF_2の双方が非アクティブにされる。ステップ1452に続いてステップ1454では、SDDF_1がクリアされる。ステップ1454に続いてステップ1456では、SDDF_2がクリアされる。ステップ1456に続いてステップ1458では、SDDFセッションの1つを指し示すポインタがSDDF_1を指し示すようにされる。ステップ1458に続いてステップ1462では、SDDF_1がアクティブにされる。ステップ1462に続いて、処理は完了する。
図35を参照して、フローチャート1470は、遠隔宛先1206によって使用された復旧パラメータをリセットすることに関連して実行されるステップを示している。処理は最初のステップ1472で開始する。ステップ1472では、SDDF_3が非アクティブにされる。ステップ1472に続いてステップ1474では、SDDF_3がクリアされる。ステップ1474に続いてステップ1476では、遠隔宛先1206によって使用されたトークンがクリアされる(0に設定される)。ステップ1476に続いて、処理は完了する。いくつかの実施の形態では、上述した図29のフローチャート1320のステップ1322でSDDF_3を再び作成できるように、ステップ1472において、または、ステップ1472の後にSDDF_3を終了させることも可能であることに留意されたい。
図36を参照して、略図は、送信元グループ1202の可能な構成を示している。図36の略図では、送信元グループ1202は、単一のローカル記憶装置1504に接続されたホスト1502を含む。ローカル記憶装置1202は、ローカル宛先1204および遠隔宛先1206の双方に接続されている。図36に示す構成では、本明細書で説明する処
理のすべては、ローカル記憶装置1504によって実行することもできるし、あるいは、処理の一部は、適宜、ホスト1502によって実行することもできる。
図37を参照して、略図は、ホスト1512が複数のローカル記憶装置1514〜1516に接続されている送信元グループ1202の別の構成を示している。ローカル記憶装置1514〜1516のそれぞれは、ローカル宛先1204および遠隔宛先1206の双方に接続されている。図37に示す構成では、ホスト1512は、本明細書で説明する処理の一部をハンドリングすることができ、例えば、順序書き込みに関連したローカル記憶装置1514〜1516のすべてのサイクル切り換え等をハンドリングすることができる。
場合によっては、送信元グループ1202とローカル宛先1204との間のデータ転送が困難な場合、サイクル切り換えを防止することが望ましい場合がある。もちろん、ローカル宛先1204の完全な故障、または、送信元グループ1202とローカル宛先1204との間のリンクの完全な故障の場合、システムは作業を完全に停止することができ、復旧が上述したように進むことになる。一方、断続的な故障(例えば、送信元グループ1202とローカル宛先1204との間のリンクの一時的な接続損失)が存在し得る他の場合には、対応するデータがまず送信元グループ1202からローカル宛先1204への転送に成功するまで、送信元グループ1202と遠隔宛先1206との間の通信に関連して単に送信元グループ1202でサイクル切り換えをしないことが望ましい場合がある。この強化については以下で説明する。
図38を参照して、フローチャート200’は、図6のフローチャート200の変更部分を示している。この変更部分は、リスト72、74(図3に示す)のうち非アクティブなものから別の記憶装置へのデータの転送に関連して実行されるステップを示している。フローチャート200’は、ステップ204およびステップ212を示している。これらのステップは、フローチャート200にもあり、図6を説明する本文に関連して上述している。一方、以下でさらに詳細に説明するように、フローチャート200’は、図6のフローチャート200には設けられていない追加された新たなステップを含んでいる。
ステップ204に続いて、テストステップ1602は、別の記憶装置へ転送されているデータが特別なデータであるかどうかを判断する。フローチャート200’に関連して使用されるように、ステップ1602の特別なデータは、送信元グループ1202から、ローカル宛先1204および遠隔宛先1206の双方へ送信される予定のデータを指す。本明細書の一実施の形態では、特別なデータは、当該データがローカル宛先1204および遠隔宛先1206の双方への転送用キューに入れられるかどうかを判断する組み込みメカニズムを使用して特定することができる。もちろん、特別なデータを特定してテストする他のメカニズムを使用することもできる。
テストステップ1602において、データが特別なデータでないと判断されると、制御はステップ1602からステップ212へ移り、図6のフローチャート200に関連して上述したようにデータが送信される。ステップ212に続いて、処理は、図6のフローチャート200に示し、かつ、本明細書の他の箇所で説明したように続く。テストステップ1602において、送信予定のデータが(送信元グループ1202からローカル記憶装置1204および遠隔記憶装置1206の双方へ転送される予定の)特別なデータであると判断されると、制御はテストステップ1602からテストステップ1604へ移る。テストステップ1604では、調べられる特定の転送が、送信元グループ1202から遠隔宛先1206への特別なデータの転送であるかどうかが判断される。本明細書の他の箇所で説明するように、まず、送信元グループ1202からローカル宛先1204へのデータの転送が成功するまで、送信元グループ1202から遠隔宛先1206へのデータの送信を
回避することが望ましい。したがって、ステップ1604のテストは、調べられる特定のデータ転送が、送信元グループ1202から遠隔宛先1206への転送であるかどうかを判断する。そのような転送でない場合、制御はテストステップ1604からステップ212へ移り、本明細書の他の箇所で説明したように処理が続けられる。そうではなく、テストステップ1604において、調べられるデータが、送信元グループ1202から遠隔宛先1206への転送に対応する場合、制御はテストステップ1604からテストステップ1606へ移る。テストステップ1606では、送信元グループ1202からローカル宛先1204へのデータの対応する転送が、先に完了に成功していたかどうかを判断する。すなわち、所与のスロットまたはデータの一部が遠隔宛先1206およびローカル宛先1204の双方へ転送される場合、ステップ1606のテストは、送信元グループ1202からローカル宛先1204への転送の実行が成功したかどうかを判断する。成功しなかった場合、制御はテストステップ1606からステップ1607へ移り、ステップ1607では、エラー処理/テストが実行される。
場合によっては、送信元グループ1202からローカル宛先1204へのデータの転送ができないことにより、システムは、遠隔宛先1206にデータの蓄積を開始する。このデータの蓄積の開始は、例えば、システムが遠隔宛先へ故障メッセージを送信して(図30のフローチャート1330および対応する説明を参照)、図38のフローチャート200’によって示す処理から抜け出ることによって行われる。その結果、送信元グループ1202からローカル宛先1204へのデータの送信に常に成功していたかどうかに関係なく、データが送信元グループ1202から遠隔宛先1206へ送信される。他の処理も行うことができ、例えば、送信元グループ1202からローカル宛先1204へ転送されないデータについてデバイステーブルに無効ビットを設定すること等の処理を行うことができる。送信元グループ1202とローカル宛先1204との間の接続が再確立されると、遠隔宛先1204を同期させ、次いで、本明細書で説明したような定常状態のオペレーション(例えば、フローチャート200’のステップ)を再開することが可能であることに留意されたい。
上述したエラー処理を実行するかどうかを判断する判定基準は、当業者が識別できるいくつかの機能的要因に従って設定することができる。本明細書の一実施の形態では、この判定基準は、送信元グループ1202とローカル宛先1204との間のリンクの故障、および/または、ローカル宛先1204の故障が起こる尤度に従って設定される。例えば、ステップ1607のエラー処理は、送信元グループ1202からローカル宛先1204へのデータの転送が成功することなく一定の時間が経過した場合に故障が発生したと判断することができる。ステップ1607のエラー処理が、故障が発生していない(したがって、処理を継続すべきである)と判断すると、制御はステップ1607からテストステップ1608へ移る。テストステップ1608では、送信元グループ1202から遠隔宛先1206へ送信される非アクティブなデータがさらにあるかどうかを判断する。当該非アクティブなデータがさらにある場合、制御はテストステップ1608からステップ1612へ移る。ステップ1612では、データにわたって繰り返す(例えば、リスト74、76のうち非アクティブなものの要素にわたって繰り返す)ポインタが、送信されるデータの次の非アクティブなブロックを指し示すように調整される。ステップ1612に続いて、制御はステップ204へ戻り、本明細書の他の箇所で説明したような処理が継続される。
テストステップ1608において、送信される非アクティブなデータがそれ以上ないと判断されると、制御はテストステップ1608からステップ1614へ移る。ステップ1614では、プロセスは待機状態になる。データの送信が、送信元グループ1202から遠隔宛先1206への転送に対応するとすでに判断されており(テストステップ1604において)、かつ、送信元グループ1202からローカル宛先1204への対応する転送がまだ完了していないことが確認されている(ステップ1606のテストに従って)。し
たがって、テストステップ1608において、送信されるデータがそれ以上ないと判断されると、より多くの非アクティブなデータを送信に利用可能にするようにステップ1614で待つか、または、別のプロセスが、送信元グループ1202からローカル宛先1204への対応するデータの転送に成功するまでステップ1614で待ち、したがって、次の繰り返しでは、テストステップ1606の結果を変更させることが適切である。ステップ1614に続いて、制御はステップ204へ戻り、本明細書の他の箇所で説明したような処理が継続される。
テストステップ1606において、ローカル宛先1204への対応する転送が事前に完了に成功していたと判断されると、制御はテストステップ1606から別のテストステップ1616へ移り、転送予定のデータが、その転送に関連して、当該データに関連付けられた2つ以上のスロット(例えば、アクティブなスロットおよび非アクティブなスロット)を有するかどうかが判断される。本明細書の他の箇所で説明するように、一定の条件の下、通常は単一のスロットであるものに2つ以上のスロットを関連付けることができる。例えば、図12のフローチャート440およびステップ446、472、474、476、478に関連した上記説明を参照されたい。したがって、テストステップ1616において、2つ以上のスロットが存在しないと判断されると、制御はテストステップ1616からステップ212へ移り、本明細書の他の箇所で説明したような処理が継続される。そうではなく、テストステップ1616において、2つ以上の対応するスロットが存在すると判断されると、制御はテストステップ1616からテストステップ1618へ移る。テストステップ1618では、ステップ1606におけるスロットのテストと同様に、ローカル記憶装置1204への他のスロットの転送が成功していたかどうかを判断する。テストステップ1618において、他の対応するスロットのすべてがローカル記憶装置1204へ適切に転送されたと判断されると、制御はテストステップ1618からステップ212へ移り、本明細書の他の箇所で説明したような処理が継続される。適切に転送されなかったと判断されると、制御はテストステップ1618からステップ1608へ移る。これについても本明細書の他の箇所で説明した。
本明細書で説明したシステムの別の実施の形態では、図7の略図240に示したものと同様のR2デバイスのCOVDを使用しないことが可能である。すなわち、R2デバイスにおいてCOVDを使用することなくR2が非同期データを受信することを実施することができる。
図39を参照して、略図1640は、データを受信する遠隔記憶装置26に設けられるキャッシュ1642を示している。キャッシュ1642は、ローカル記憶装置24から受信された非同期データが置かれる複数のスロット1652〜1654を含む。また、第1の循環リンクリスト1674および第2の循環リンクリスト1676も示されている。これら第1の循環リンクリスト1674および第2の循環リンクリスト1676は、キャッシュ1642のスロット1652〜1654へのポインタを含む。したがって、例えば、循環リンクリスト1674は、複数のポインタ1681〜1685を含む。これらのポインタのそれぞれは、キャッシュ1642のスロット1652〜1654の1つを指し示す。同様に、循環リンクリスト1676も、複数のポインタ1691〜1695を含む。これらのポインタのそれぞれは、キャッシュ1642のスロット1652〜1654の1つを指し示す。また、標準論理デバイス1698も、キャッシュ1642の一部にマッピングされる。
本明細書の一実施の形態では、リスト1674、1676の一方が、(例えば、図2に示すデータ・セット56のような)非アクティブな大量のデータ・セットに対応する一方、リスト1674、1676の他方が、(例えば、図2のデータ・セット58のような)アクティブな大量のデータ・セットに対応する。図7の略図240およびその対応する本
文に関連して本明細書の他の箇所で説明したように、受信されたデータは、大量のデータ・セットのうち非アクティブなものを使用して蓄積される一方、大量のデータ・セットのうちアクティブなものは、標準論理デバイス1698においてデータを記憶するのに使用される。したがって、新たなデータが到着すると、そのデータはキャッシュ1642に置かれ、循環リンクリスト1674、1676の一方が対応する新たなポインタが、データの受信時に非アクティブな大量のデータ・セットへ追加される。
場合によっては、標準論理デバイス1698(または、他の任意の論理デバイス)の一部が、受信されたデータに対応する、当該標準論理デバイス1698に関連したスロットをキャッシュ1642に有するかどうかを判断できることが有益な場合がある。もちろん、リスト1674、1676の双方をトラバースして、対応するスロットがキャッシュ1642にあるかどうかを判断することは常に可能である。しかしながら、論理デバイスの特定のデバイス値、シリンダ値、およびヘッド値を使用して、デバイスへデステージされるのを待機しているスロット1652〜1654の対応するものがキャッシュ1642にあるかどうかを判断する方法があると、より有益であろう。
図40を参照して、略図1700は、複数のエントリ1704〜1706を含むハッシュテーブル1702を示している。本明細書の一実施の形態では、エントリ1704〜1706のそれぞれは、ヌルポインタを含むか、または、受信されたが標準論理デバイス1698(または、別の標準論理デバイス)にまだ記憶されていないデータに対応するキャッシュスロット1652〜1654の1つを指し示す。テーブル1702は、ハッシュ関数を使用してインデックスされる。このハッシュ関数は、対応するエントリを見つけるために、デバイス、シリンダ、およびヘッドの特定の値を使用して数学的オペレーションを実行し、テーブル1702内へのインデックスを生成するものである。したがって、データがR2デバイスによって受信されると、このハッシュ関数が、デバイス、シリンダ、およびヘッドに適用されて、テーブル1702内へのR2デバイスのインデックス値が求められ、次いで、キャッシュ1642の特定のスロット1652〜1654を指し示すポインタが、エントリ1704〜1706の対応するものへ書き込まれる。受信されたデータが、標準論理デバイス1698(または別のデバイス)へ適切にデステージされると、エントリ1704〜1706の対応するものはヌルに設定される。このように、ハッシュテーブル1702によって、標準論理デバイスの特定の部分が、まだデステージされていない受信されたデータに対応するかどうかを素早く判断することが可能になる。本明細書に説明するシステムでは、テーブル1702内へのインデックスを生成するのに、任意の適切なハッシュ関数を使用することができる。
場合によっては、或る特定のデバイス値、シリンダ値、およびヘッド値が生成したテーブル1702内へのインデックスが、そのデバイス、シリンダ、およびヘッドの異なる値によって生成されたインデックスと同じである可能性がある。これは、「コリジョン」と呼ばれる。コリジョンが発生した場合、その同じインデックスに対応するテーブル1702内への第2のエントリが設けられ、特定のインデックスが2つ以上のエントリに対応するように、この第2のエントリが第1のエントリへリンクされる。これは、テーブル1702の要素1705へリンクされた要素1708によって示されている。したがって、第1のデバイス、シリンダ、およびヘッドがハッシュされて、エントリ1705へのインデックスが生成される一方、異なるデバイス、シリンダ、およびヘッドがハッシュ関数に入力されて、そのインデックスの同じ値が生成される。本明細書の一実施の形態では、エントリ1705は、第1のデバイス、シリンダ、およびヘッドに対応するキャッシュ1642のデータを指し示すのに使用される一方、エントリ1708は、第2のデバイス、シリンダ、およびヘッドに対応するキャッシュ1642のデータを指し示すのに使用される。もちろん、データが適切なデバイスへデステージされると、エントリ1705、1708の対応するものは、テーブル1702から削除することができる。
任意の個数のエントリが単一のインデックスに対応することができ、その結果、例えば、デバイス、シリンダ、およびヘッドの3つの別個の組の値が同じインデックスを生成するコリジョンが発生すると、テーブル1702内への特定のインデックスにおいて3つの(または4つ以上の)エントリが互いにリンクされることに留意されたい。また、他の適切な技法を使用して、コリジョンをハンドリングできることにも留意されたい。この技法には、追加テーブル(例えば、第2のテーブル、第3のテーブル、第4のテーブル等)を設けることが含まれる。
図41を参照して、略図1720は、代替的な一実施の形態のハッシュテーブル1722を示している。このハッシュテーブル1722は、複数のエントリ1724〜1726を含む。図41の実施の形態は、本明細書で説明するように、いくつかの相違を有するが、図40の実施の形態と同様である。エントリ1724〜1726のそれぞれは、ヌルポインタを含むか、または、略図1720に示すキャッシュスロット1728、1732、1734の1つを指し示す。キャッシュスロット1728、1732、1734は、受信されたが標準論理デバイス1698(または別の標準論理デバイス)にまだ記憶されていないデータに対応する。テーブル1722は、ハッシュ関数を使用してインデックスされる。このハッシュ関数は、デバイス、シリンダ、およびヘッドの特定の値を使用して数学的オペレーションを実行し、対応するエントリを見つけるための、テーブル1722内へのインデックスを生成するものである。したがって、データがR2デバイスによって受信されると、ハッシュ関数が、デバイス、シリンダ、およびヘッドに適用されて、テーブル1722内へのそのインデックス値が求められ、次いで、特定のスロット1728、1732、1734を指し示すポインタが、エントリ1724〜1726の対応するものへ書き込まれる。受信されたデータが、標準論理デバイス1698(または別のデバイス)へ適切にデステージされると、エントリ1724〜1726の対応するものは適切に調整される。このように、ハッシュテーブル1722によって、標準論理デバイスの特定の部分が、まだデステージされていない受信されたデータに対応するかどうかを素早く判断することが可能になる。本明細書に説明するシステムでは、テーブル1722内へのインデックスを生成するのに、任意の適切なハッシュ関数を使用することができる。
図41に示す実施の形態では、コリジョンが発生した場合、テーブルエントリによって指し示される第1のスロットは、コリジョンを引き起こした第2のスロットを指し示す。したがって、例えば、スロット1732およびスロット1736がテーブルエントリ1725でコリジョンを引き起こすと、テーブルエントリ1725はスロット1732を指し示す一方、スロット1732はスロット1736を指し示す。したがって、次のスロットが追加されても、次のスロットの追加には、単に前のスロットのポインタ値の変更が必要となるだけであるので、コリジョンは、テーブル1722の変更を引き起こすことはない。もちろん、任意の個数のスロットが単一のテーブルエントリに対応することができる。
任意の個数のエントリが単一のインデックスに対応することができ、その結果、例えば、デバイス、シリンダ、およびヘッドの3つの別個の組の値が同じインデックスを生成するコリジョンが発生すると、テーブル1722への特定のインデックスにおいて3つ(または4つ以上)のエントリが共にリンクされることに留意されたい。また、他の適切な技法を使用して、コリジョンをハンドリングできることにも留意されたい。この技法には、追加テーブル(例えば、第2のテーブル、第3のテーブル、第4のテーブル等)を設けることが含まれる。
場合によっては、図26の略図1200に示すローカル宛先1204以外のものを使用できることが有利な場合がある。もちろん、ローカル宛先1204が送信元グループの完全ミラーでない場合、復旧は遠隔宛先1206で実行されることになる。一方、遠隔宛先
1206は、送信元グループ1202からローカル宛先1204へ同期して書き込まれたデータと同程度に最新であるデータを含まないことがある。したがって、遠隔宛先1206において復旧することが可能であるが、しかし、送信元グループ1202からローカル宛先1204へ同期して書き込まれたデータと同程度に最新のデータを有することが可能であることが望ましい。
図42を参照して、略図1780は、図26の略図1200の送信元グループ1202と同様の送信元グループ1782を含むシステムを示している。また、この略図1780は、図26の略図1200の遠隔宛先1206と同様の遠隔宛先1786も示している。
また、略図1780は、最小記憶ローカル宛先1788も示している。この最小記憶ローカル宛先1788は、送信元グループ1782から同期データ書き込みを受信するのに使用される。本明細書の一実施の形態では、最小記憶ローカル宛先1788は、送信元グループ1782には、図26の略図1200のローカル宛先1204と同様の記憶装置のように見える。しかしながら、本明細書の一実施の形態では、最小記憶ローカル宛先1788は、送信元グループ1782のミラーではない。その代わり、最小記憶ローカル宛先1788は、復旧が必要となった場合に遠隔宛先1786へ転送されるデータを記憶するのに使用される。本明細書の一実施の形態では、すべての復旧は遠隔宛先1786で実行される。他の実施の形態では、送信元グループ1782は、送信元グループ1782が最小記憶ローカル宛先1788に接続されていることを知ることが可能である。
送信元グループ1782は、図26の略図1200の送信元グループ1202と同様に動作することができる。したがって、送信元グループ1782は、最小記憶ローカル宛先1788へ同期書き込みを提供し、遠隔宛先1786へ順序書き込みを提供する。最小記憶ローカル宛先1788は、送信元グループ1782のミラーとなるのではなく、送信元グループ1782からの最も近時の同期書き込みのみを記憶する。その結果、復旧が必要となった場合、最小記憶ローカル宛先1788は、最も近時の書き込みを遠隔宛先1786へ転送することができる。送信元グループ1782から遠隔宛先1786へデータが転送されると、対応するデータが最小記憶ローカル宛先1788から削除され、その結果、例えば、2つの最も近時のサイクルよりも古いどのサイクルも、遠隔記憶装置1786にすでに記憶されているので、最小記憶ローカル宛先1788は、2つの最も近時のサイクルの順序書き込みデータのみを保持する。
図43を参照して、データ構造体1800は、最小記憶ローカル宛先1788におけるデータのストレージを示している。本明細書の一実施の形態では、このデータ構造体1800は、複数の要素1802〜1805を有するリンクリストである。リストトップポインタは第1の要素1802を指し示す。この第1の要素は第2の要素1803を指し示し、第2の要素は第3の要素1804を指し示す。以下、同様である。また、リンクリスト1800は最後の要素1805も有する。この最後の要素1805は、リストの終点を示すために、次の要素としてヌルポインタを指し示す。もちろん、他の適切なデータ構造体を使用することもできる。
本明細書の一実施の形態では、例えば、要素1802が標準論理デバイスの一連の要素における最初の要素となり、第2の要素1803が第1の要素1802に続き、以下、同様になるように、リスト1800は、標準論理デバイスのトラックおよびヘッドのロケーションに従って分類される。別の実施の形態では、リスト1800は、送信元グループ1782から最小記憶ローカル宛先1788へデータ書き込みが提供された順序に従って分類される。双方の実施の形態については、以下でさらに詳細に説明する。
図44を参照して、略図は、リンクリスト1800のデータ要素1820をさらに詳細
に示している。データ要素1820は、TRACK(トラック)フィールド1822を含む。このTRACKフィールド1822は、対応する標準論理デバイスにデータを記憶するのに使用されるトラック番号を示す。セクタ番号、標準論理デバイスの始点からのオフセット、または他の任意の適切な指示子等の他のデータストレージロケーションをトラック番号の代わりに使用することもできる。
また、データ要素1820は、サイクル番号1824(CYCNO)も含む。このサイクル番号1824は、本明細書の他の箇所で説明したように、送信元グループ1782から遠隔宛先1786へのデータの転送に使用されるサイクルを示す。本明細書の他の箇所でさらに詳細に説明するように、データが送信元グループ1782から最小記憶ローカル宛先1788へ転送されると、最小記憶ローカル宛先1788は、送信元グループ1782と遠隔宛先1786との間の転送に対応するサイクルの変化の経過を追跡し、適切なサイクル番号をデータ要素1820に割り当てる。
また、データ要素1820は、データフィールド1826(DATA)も含む。このデータフィールド1826は、送信元グループ1782から最小記憶ローカル宛先1788へ転送されたデータに対応する。また、データ要素1820は、次フィールド1828(NEXT)も含む。この次フィールド1828は、リンクリスト1800の次のデータ要素を指し示すのに使用される。
図45を参照して、フローチャート1850は、送信元グループ1782が最小記憶ローカル宛先1788へ提供するデータの受信に関連して最小記憶ローカル宛先1788により実行されるステップを示している。本明細書の他の箇所で説明するように、最小記憶ローカル宛先1788は、送信元グループ1782には、送信元グループ1782のミラーのように見えることがある。しかしながら、本明細書で説明したように、最小記憶ローカル宛先1788は、必ずしも、送信元グループ1782のミラーではなく、その代わり、送信元グループ1782からの最も近時のデータを含む。復旧が必要になると、最小記憶ローカル宛先1788は、自身に記憶されたデータを遠隔宛先1786へ転送して、復旧を円滑にする。
フローチャート1850の処理はステップ1852で開始する。ステップ1852では、ローカルサイクル番号CYCNOが0に設定される。ステップ1852で設定されたローカルサイクル番号は、送信元グループ1782におけるサイクルの変化の経過を追跡するのに使用される。ローカルサイクル番号は、送信元グループ1782で使用される特定のサイクル番号に正確に対応する必要はないことに留意されたい。むしろ、ステップ1852で設定されたサイクル番号は、送信元グループ1782によるサイクル切り換えの経過を追跡することで足りる。
ステップ1852に続いてステップ1854では、データが送信元グループ1782から受信される。ステップ1854に続いて、テストステップ1856は、受信されたデータが、送信元グループ1782によって提供されたサイクル切り換えに対応するかどうかを判断する。テストステップ1856は、上述した図28Aのテストステップ1262と同様である。
テストステップ1856において、受信されたデータがサイクル切り換えに対応していないと判断されると、制御はテストステップ1856からステップ1858へ移る。ステップ1858では、受信されたデータが最小記憶ローカル宛先1788のストレージに追加される。ステップ1858で最小記憶ローカル宛先1788のストレージにデータを追加することについては、本明細書の他の箇所でさらに詳細に説明する。ステップ1858に続いてステップ1862では、最小記憶ローカル宛先1788によって、受信されたデ
ータの肯定応答が送信元グループ1782へ返される。ステップ1862におけるデータの肯定応答は、送信元グループ1782に対して最小記憶ローカル宛先1788を完全な同期ミラーとして演じさせるのに使用することができる(すなわち、ステップ1862で提供される肯定応答は、完全な同期ミラーによって提供されるのと同じ肯定応答である)。ステップ1862に続いて、制御はステップ1854へ戻り、さらにデータが受信される。
テストステップ1856において、ステップ1854で受信されたデータが、サイクル切り換えに対応すると判断されると、制御はステップ1856からステップ1864へ移る。ステップ1864では、最小記憶ローカル宛先1788と共に使用される内部サイクル番号CYCNOがインクリメントされる。本明細書の一実施の形態では、最大サイクル番号MAXCYCNOが設けられ、そして、内部サイクル番号CYCNOは、ステップ1864において、当該CYCNOに1を加え、次いで、その結果のモジュロMAXCYCNOを取ることによってインクリメントされる。
ステップ1864に続いてステップ1866では、前のサイクル番号に対応するデータが廃棄される。本明細書の他の箇所で説明したように、最小記憶ローカル宛先1788は、2つの最も近時のサイクル番号に対応するデータを記憶する。2つのサイクル番号よりも古いどのデータも、すでに、送信元グループ1782から遠隔宛先1786への転送に成功しているはずである。したがって、復旧は、遠隔宛先1786で提供されるので、最小記憶ローカル宛先1788は、現在のサイクル番号に対応するデータ、および、その1つ前のサイクル番号に対応するデータのみを記憶するだけでよい。他の実施の形態では、異なるデータ(例えば、3つまたは4つの最も近時のサイクル)を保持することが可能な場合がある。ステップ1866でデータを廃棄することについては、本明細書の他の箇所でさらに詳細に説明する。ステップ1866に続いて、制御は、上述したステップ1854へ戻り、さらにデータが受信される。
図46を参照して、フローチャート1900は、受信されたデータを最小記憶ローカル宛先1788で記憶されたデータに追加するステップ1858に関連して、最小記憶ローカル宛先1788により実行されるステップをさらに詳細に示している。処理は最初のステップ1902で開始する。ステップ1902では、一時変数P1がリストトップに等しく設定される。このリストトップは、最小記憶ローカル宛先1788で記憶されたデータのリンクリスト1800を指し示すポインタである
ステップ1902に続いて、テストステップ1904では、一時変数P1がヌルに等しいかどうかが判断される。ヌルに等しい場合には、リンクリスト1800に記憶されたデータは存在せず、フローチャート1900のステップによって記憶されるデータは、最小記憶ローカル宛先1788で記憶される最初のデータに対応する。テストステップ1904において、P1がヌルに等しいと判断されると、制御はテストステップ1904からステップ1906へ移る。ステップ1906では、データを一時的に記憶するのに使用される一時変数T用に、mallocコマンド(または適した類似のもの)を使用して、メモリがヒープ(または適した類似のもの)から取得される。ステップ1906に続いてステップ1908では、データレコードTのトラック番号フィールド(T.TRACK)が、送信元グループ1782でデータを記憶する標準論理デバイスのトラックに等しく設定される。ステップ1908に続いてステップ1912では、T.CYCNOが、最小記憶ローカル宛先1778における現在のローカルサイクル番号に等しく設定される。
ステップ1912に続いてステップ1914では、受信されたデータがTのデータフィールド(すなわち、T.DATA)へコピーされる。ステップ1914に続いてステップ1916では、次のフィールド(T.NEXT)がヌルに等しく設定される。ステップ1916に続いてステップ1918では、リストトップがTに等しく設定される。ステップ
1918に続いて、処理は完了する。
テストステップ1904において、変数P1がヌルに等しくないと判断されると、制御はテストステップ1904からテストステップ1922へ移る。テストステップ1922では、受信されたデータに対応するトラック番号が、P1が指し示すデータ要素のトラック番号に等しいかどうかが判断される。等しい場合には、制御はテストステップ1922からステップ1924へ移る。ステップ1924では、受信されたデータがP1.DATAのデータフィールドに書き込まれる(おそらく、既存のデータを上書きする)。ステップ1924に続いてステップ1926では、P1が指し示す要素のサイクル番号フィールド(P1.CYCNO)が、最小記憶ローカル宛先1778に記憶された現在のローカルサイクル番号(CYCNO)で上書きされる。ステップ1926に続いて、処理は完了する。
テストステップ1922において、P1が指し示す要素のトラック番号が、受信されたデータに対応するトラック番号に等しくないと判断されると、制御はテストステップ1922からステップ1928へ移る。ステップ1928では、別の一時変数P2がP1.NEXTに等しく設定される。ステップ1928に続いてテストステップ1932では、P2がヌルに等しい(すなわち、P1がリンクリスト1800の最後の要素を指し示す)かどうかが判断される。等しくない場合には、制御はテストステップ1932からテストステップ1934へ移る。テストステップ1934では、P2が指し示す要素に対応するトラック番号が、受信されたデータに対応するトラック番号よりも小さいかどうかが判断される。ステップ1934のテストは、受信されたデータが、P1とP2との間に挿入される新たな要素となるかどうかを判断する。テストステップ1934において、P2が指し示す要素のトラック番号が、受信されたデータに対応するトラック番号よりも小さくないと判断されると、制御はテストステップ1934からステップ1936へ移る。ステップ1936では、次の繰り返しの準備をするために、一時変数P1がP2に等しく設定される。ステップ1936に続いて、制御は、上述した1922のテストへ戻る。
テストステップ1932において、P2がヌルを指し示すと判断されるか、または、テストステップ1934において、P2が指し示すデータ要素のトラック番号が、受信されたデータに対応するトラック番号よりも小さいと判断されると、制御はステップ1938へ移る。ステップ1938では、(リスト1800の)新たな要素が、一時変数Tを使用して割り当てられる。ステップ1938に続いてステップ1942では、Tのトラック番号(T.TRACK)が、受信されたデータに対応するトラック番号に等しく設定される。ステップ1942に続いてステップ1944では、Tのサイクル番号フィールド(T.CYCNO)が、最小記憶ローカル宛先1788におけるローカルサイクル番号に等しく設定される。
ステップ1944に続いてステップ1946では、受信されたデータが一時ストレージ領域のデータフィールド(T.DATA)へ書き込まれる。ステップ1946に続いてステップ1948では、Tの次のフィールド(T.NEXT)がP2に等しく設定される。ステップ1948に続いてステップ1952では、P1が指し示す要素の次のフィールド(P1.NEXT)が、Tを指し示すように設定される。ステップ1952に続いて、処理は完了する。
図46のフローチャート1900は、最小記憶ローカル宛先1788におけるリンクリスト1800が、受信されたデータに対応するトラック番号に従って記憶される一実施の形態を示している。受信されたデータは、最小記憶ローカル宛先1788におけるデータの受信順序に従ってソートすることもできる。
図47を参照して、フローチャート2000は、データが追加されるステップ1858において、最小記憶ローカル宛先1788により実行されるステップを示している。フローチャート2000が示す代替的な実施の形態では、リンクリスト1800のデータは、最小記憶ローカル宛先1788におけるデータの受信順序に従って記憶される。
処理は最初のステップ2002で開始する。ステップ2002では、新たなデータ要素Tが割り当てられる。ステップ2002に続いてステップ2004では、割り当てられた要素のトラック番号フィールド(T.TRACK)が、受信されたデータに対応するトラック番号に等しく設定される。ステップ2004に続いてステップ2006では、割り当てられた要素のサイクル番号フィールド(T.CYCNO)が、最小記憶ローカル宛先1788で提供されたローカルサイクル番号(CYCNO)に等しく設定される。
ステップ2006に続いてステップ2008では、受信されたデータが、割り当てられた要素のデータフィールド(T.DATA)へ書き込まれる。ステップ2008に続いてステップ2012では、割り当てられた要素の次のフィールド(T.NEXT)がヌルに等しく設定される。本明細書の一実施の形態では、最も近時に受信されたデータが、リンクリスト1800の終点に追加される。ステップ2012に続いて、テストステップ2014は、リストトップ(リンクリスト1800の先頭へのポインタ)がヌルに等しいかどうかを判断する。第1のデータがリンクリスト1800へ書き込まれた場合、または、すべてのデータがリスト1800から削除された場合、リストトップはヌルに等しくなることができることに留意されたい。テストステップ2014において、リストトップがヌルに等しいと判断されると、制御はテストステップ2014からステップ2016へ移る。ステップ2016では、リストトップが、新たに割り当てられたデータ要素Tを指し示すように設定される。ステップ2016に続いて、ステップ2018では、リスト1800の終点の経過を追跡するリストエンド要素LEも、新たに割り当てられたデータ要素Tを指し示すように設定される。ステップ2018に続いて、処理は完了する。
テストステップ2014において、リストトップがヌルに等しくないと判断されると、制御はテストステップ2014からステップ2022へ移る。ステップ2022では、リストエンドポインタが指し示すデータ要素の次のフィールド(LE.NEXT)が、新たに割り当てられたデータ要素Tを指し示すように設定される。ステップ2022に続いてステップ2024では、リストエンドポインタLEが、新たに割り当てられたデータ要素Tに等しく設定される。ステップ2024に続いて、処理は完了する。
図48を参照して、フローチャート2050は、図45のフローチャート1850の廃棄ステップ1866に関連して、最小記憶ローカル宛先1788により実行されるステップを示している。本明細書の一実施の形態では、データが、トラック番号(図46の実施の形態)に従ってリンクリスト1800に記憶されているのか、それとも受信順序(図47の実施の形態)に従ってリンクリスト1800に記憶されているのかにかかわらず、廃棄について同じ処理を使用することができる。データを廃棄するのに使用される技法は、データを追加するのに使用される技法から独立したものとすることができることに留意されたい。
フローチャート2050の処理は最初のステップ2052で開始する。ステップ2052では、一時変数P1が、リンクリスト1800の最初の要素を指し示すリストトップ変数に等しく設定される。ステップ2052に続いてテストステップ2054では、P1がヌルに等しいかどうかが判断される。等しい場合、処理は完了する。等しくない場合、制御はテストステップ2054からステップ2056へ移る。ステップ2056では、別の一時変数P2が、P1が指し示すデータ要素の次のフィールドに等しく設定される(すなわち、P1.NEXTに等しく設定される)。ステップ2056に続いてテストステップ
2058では、P2がヌルを指し示すかどうかが判断される。指し示す場合、処理は完了する。指し示さない場合、制御はテストステップ2058からテストステップ2062へ移る。テストステップ2062は、P2が指し示すデータ要素のフィールドのサイクル番号(P2.CYCNO)が、廃棄されるデータのサイクル番号(例えば、MAXCYCNOを法とする(CYCNO−2))に等しいかどうかを判断する。等しい場合、制御はテストステップ2062からステップ2064へ移る。ステップ2064では、P1が指し示す要素の次のフィールド(P1.NEXT)が、P2が指し示す要素の次のフィールド(P2.NEXT)に等しく設定される。したがって、P2が指し示す要素は、リンクリスト1800から削除される。ステップ2064に続いてステップ2066では、P2が指し示す要素が解放される(すなわち、ヒープに戻される)。ステップ2066に続いてステップ2068では、P1が、当該P1が指し示す次のフィールドに等しく設定される(すなわち、P1=P1.NEXT)。ステップ2068に続いて、制御はステップ2056へ戻って、次の繰り返しが行われる。テストステップ2062において、P1が指し示す要素のサイクル番号フィールドが、廃棄されるデータのサイクル番号に等しくないと判断されると、制御はテストステップ2062から、上述したステップ2068へ移ることに留意されたい。
図42〜図48に関連して説明した実施の形態では、復旧は常に遠隔宛先1786で実行され、記憶されたデータのすべては最小記憶ローカル宛先1788から遠隔宛先1786復旧へ転送されるので、SDDFマップを保持する必要はないことに留意されたい。したがって、転送する必要のある特定のデータの経過を追跡する必要はない。これに加えて、遠隔宛先1786が、図42〜図48の実施の形態に関連して、常に復旧に使用されるので、どのデバイスが復旧に使用されるかの経過を追跡するトークンも、他のどのメカニズムも有する必要はない。さらに、トークンもSDDFマップも存在しないので、図29および図30の処理を遠隔宛先で実行する必要はない。
図49を参照して、フローチャート2100は、例えば、送信元グループ1782が動作状態を停止した時に、遠隔宛先1786における復旧に関連して実行されるステップを示している。処理は最初のステップ2102で開始する。最初のステップ2102では、送信元グループ1782と遠隔宛先1786と最小記憶ローカル宛先1788との間のリンクがドロップされる。ステップ2102におけるリンクのドロップは、図31のフローチャート1360のステップ1362におけるリンクのドロップと同様である。ステップ2102に続いてステップ2104では、順序書き込みが終了する。ステップ2104における順序書き込みの終了は、図31のフローチャート1360のステップ1366における順序書き込みの終了と同様である。
ステップ2104に続いてステップ2106では、すべてのデータが、最小記憶ローカル宛先1788から遠隔宛先1786へ転送される。このデータは、リンクリスト1800のデータ要素の順序に従って転送することができる。したがって、例えば、リンクリスト1800が、最小記憶ローカル宛先1788への書き込みの時系列に従って記憶される場合(図47に示す実施の形態)、データは、書き込みの時系列に従って、最小記憶ローカル宛先1788から遠隔宛先1786へ転送される。あるいは、データが、対応する標準論理デバイスにストレージロケーションの順序でリンクリスト1800に記憶される場合(図46の実施の形態)、データは、その順序で、最小記憶ローカル宛先1788から遠隔宛先1786へ転送することができる。ステップ2106に続いて、処理は完了し、オペレーションは、最も最新のデータを有する遠隔記憶装置1786を使用して再開することができる。
図50を参照して、略図2120は資源の共有を示している。この略図2120は、図42の送信元グループ1782および遠隔宛先1786と同様の送信元グループ2122
および遠隔宛先2126を含む。また、略図2120は、最小記憶ローカル宛先2128も示している。この最小記憶ローカル宛先2128は、無関係なストレージシステムによって共有可能である点を除いて、図42の最小記憶ローカル宛先1788と同様のものである。最小記憶ローカル宛先2128は、任意のタイプの記憶装置とすることができることに留意されたい。この任意のタイプの記憶装置には、EMC社が提供するシンメトリックスデバイス、パーソナルコンピュータ、またはデータを記憶できて本明細書で説明した機能を提供できる他の任意のデバイスが含まれることに留意されたい。
また、この略図は、第2の送信元グループ2126’および第2の遠隔宛先2122’も示している。一方、送信元グループ2122’は、送信元グループ2122によっても使用される最小記憶ローカル宛先2128へデータを転送する。復旧が送信元グループ2122、2122’の一方または双方に必要になると、復旧データは、最小記憶ローカル宛先2128によって、遠隔宛先2126、2126’の一方または双方へ提供される。本明細書の一実施の形態では、最小記憶ローカル宛先2128は、送信元グループ2122’用に記憶されたデータとは別のロケーションに、送信元グループ2122からのデータを記憶する。
また、略図2120は、第3の送信元グループ2122”および第3の遠隔宛先2126”も示している。第3の送信元グループ2122”も、最小記憶ローカル宛先2128へデータを転送する。これに加えて、復旧が必要になると、最小記憶ローカル宛先2128は、復旧データを遠隔宛先2126”へ転送することもできる。
最小記憶ローカル宛先に接続される送信元グループおよび遠隔宛先の個数は、最小記憶ローカル宛先の記憶容量および処理能力によって制限することができる。また、単一の記憶装置を複数の送信元グループ用の遠隔宛先として使用できることにも留意されたい。
本発明をさまざまな実施の形態に関連して開示してきたが、本発明に対する変更は当業者には容易に明らかとなろう。したがって、本発明の精神および範囲は添付した特許請求の範囲において述べられる。
22・・・ホストプロセッサ。24、703,704、705・・・ローカル記憶装置。26、706,707,708・・・遠隔記憶装置。52、54・・・データ・セット。
1204・・・ローカル宛先。1206・・・遠隔宛先。2128・・・最小記憶ローカル宛先。