図1を参照すると、ダイアグラム20は、ホスト22、ローカル記憶装置24、および遠隔記憶装置26の間の関係を示している。ホスト22は、ホスト・アダプタ(HA:Host Adapter)28を介してローカル記憶装置24との間でデータの読み出しおよび書き込みを行なう。ホスト・アダプタ(HA)28によって、ホスト22とローカル記憶装置24との間のインターフェースが容易になる。ダイアグラム20は1つのホスト22および1つのHA28のみを示しているが、当業者であれば理解するように、複数のHAを用いても良く、さらに1つまたは複数のHAに1つまたは複数のホストが結合されていても良い。
ローカル記憶装置24からのデータを、RDFリンク29を介して遠隔記憶装置26にコピーして、遠隔記憶装置26上のデータをローカル記憶装置24上のデータと同一にする。1つのリンク29のみを示しているが、記憶装置24と26との間にさらなるリンクを有すること、記憶装置24と26とのうちの一方または両方と、他の記憶装置(図示せず)との間にリンクを有することが可能である。なお、ローカル記憶装置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に示す記憶装置24には、複数のディスク33a,33b,33cが含まれ、記憶装置26には、複数のディスク34a,34b,34cが含まれている。本明細書で説明するRDF機能は、ローカル記憶装置24のディスク33a〜33cの少なくとも一部に対するデータが、遠隔記憶装置26のディスク34a〜34cの少なくとも一部に、RDFを用いてコピーされるように、適用される。記憶装置24,26の他のデータを記憶装置24と26との間でコピーせず、したがってこのデータが同一ではないようにすることもできる。
ディスク33a〜33cはそれぞれ、対応するディスク・アダプタ・ユニット(DA)35a,35b,35cに結合されている。ディスク・アダプタ・ユニット35a,35b,35cは、ディスク33a〜33cの対応する1つにデータを送り、ディスク33a〜33cの対応する1つからデータを受信する。同様に、遠隔記憶装置26の複数のDA36a,36b,36cは、ディスク34a〜34cの対応する1つにデータを送り、ディスク34a〜34cの対応する1つからデータを受信するために用いられる。ローカル記憶装置24のDA35a〜35c,HA28,およびRA30a〜30cの間に、内部データ・パスが存在する。同様に、遠隔記憶装置26のDA36a〜36cとRA32a〜32cとの間に、内部データ・パスが存在する。なお他の実施形態では、複数のディスクが1つのDAによってサービスされることが可能であり、さらに複数のDAが1つのディスクにサービスすることも可能である。
またローカル記憶装置24には、グローバル・メモリ37が含まれている。グローバル・メモリ37を用いて、DA35a〜35c,HA28,およびRA30a〜30cの間でのデータ転送を容易にすることができる。メモリ37には、DA35a〜35c,HA28,およびRA30a〜30cのうちの1つまたは複数によって行なわれるべきタスクと、ディスク33a〜33cのうちの1つまたは複数からフェッチされるデータに対するキャッシュとが収容されていても良い。同様に、遠隔記憶装置26には、グローバル・メモリ38が含まれている。グローバル・メモリ38には、DA36a〜36cおよびRA32a〜32cのうちの1つまたは複数によって行なわれるべきタスクと、ディスク34a〜34cのうちの1つまたは複数からフェッチされるデータに対するキャッシュとが収容されていても良い。メモリ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ボリュームとの間でデータの読み出しおよび書き込みを行ない、RDFは、R1ボリュームからR2ボリュームへのデータの自動コピーおよび更新を取り扱う。
図2を参照すると、ホスト22から、ローカル記憶装置24、および遠隔記憶装置26までのデータの経路が例示されている。ローカル記憶装置24のデータ要素51によって例示されるように、ホスト22からローカル記憶装置24に書き込まれるデータが、局所的に記憶される。またホストがローカル記憶装置24に書き込むデータは、ローカル記憶装置24によってリンク29を介して遠隔記憶装置26に送られるとともに、ローカル記憶装置24によって維持される。
本明細書で説明するシステムでは、ホスト22による各データ書き込み(たとえば記録、複数の記録、トラックなど)に、シーケンス番号が割り当てられる。シーケンス番号は、書き込みに関連する適切なデータ・フィールドにおいて与えても良い。図2では、ホスト22による書き込みには、シーケンス番号Nが割り当てられると示されている。シーケンス番号Nが割り当てられているホスト22によって行なわれる書き込みはすべて、データの単一領域52に集められる。領域52は、ほぼ同時に行なわれるホスト22による複数の別個の書き込みを表わしている。
一般的に、ローカル記憶装置24は、1つのシーケンス番号の領域を蓄積する一方で、以前に蓄積された領域(以前のシーケンス番号を有する)を遠隔記憶装置26に送信する。したがって、ローカル記憶装置24が、シーケンス番号Nが割り当てられたホスト22からの書き込みを蓄積している間に、以前のシーケンス番号(N−1)に対して行なわれた書き込みは、ローカル記憶装置24からリンク29を介して遠隔記憶装置26に送信される。領域54が示すのは、シーケンス番号N−1が割り当てられ遠隔記憶装置26にはまだ送信されていないホスト22からの書き込みである。
遠隔記憶装置26は、シーケンス番号N−1が割り当てられた書き込みに対応する領域54からのデータを受信して、シーケンス番号N−1を有するホスト書き込みの新しい領域56を構築する。データは、リンク29を越えて送られるデータを確認応答する適切なRDFプロトコルを用いて送信される。遠隔記憶装置26が領域54からのデータをすべて受信すると、ローカル記憶装置24は、遠隔記憶装置26にコミット・メッセージを送って、領域56に対応するN−1のシーケンス番号が割り当てられたデータをすべてコミットする。一般的に、特定のシーケンス番号に対応する領域がコミットされたら直ちに、その領域を論理記憶装置に書き込んでも良い。このことは、図2に例示されている。図2では、領域58が、シーケンス番号N−2が割り当てられた書き込みに対応している(すなわち、現在のシーケンス番号の2つ前が、ホスト22によるローカル記憶装置26への書き込みと関連して用いられている)。図2では、領域58は、遠隔記憶装置26に対するディスク記憶装置を表わすデータ要素62に書き込まれるとして示されている。したがって、遠隔記憶装置26が、シーケンス番号N−1に対応する領域56を受信および蓄積する間に、以前のシーケンス番号(N−2)に対応する領域58が、データ要素62によって例示される遠隔記憶装置26のディスク記憶装置に書き込まれる。いくつかの実施形態では、領域58に対するデータは、書き込みに対してマーキングされ(しかし必ずしも即座には書き込まれない)、一方で、領域56に対するデータはマーキングされない。
したがって動作中は、ホスト22がデータをローカル記憶装置24に書き込み、データは、データ要素51に局所的に記憶されるとともに領域52に蓄積される。特定のシーケンス番号に対するデータがすべて蓄積されたら直ちに(本明細書の他の場所で説明されている)、ローカル記憶装置24がシーケンス番号を増加させる。現在のシーケンス番号よりも小さい番号に対応する領域54からのデータは、ローカル記憶装置24からリンク29を介して遠隔記憶装置26に転送される。領域58は、遠隔記憶装置26にメッセージを送るローカル記憶装置24がコミットしたシーケンス番号に対するデータに対応する。領域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)の書き込みを単に完了しても良く、そして次のことが保障され得る。すなわち、遠隔記憶装置26におけるデータの状態は、データ要素62が、ある特定の時点の前に始められた書き込みをすべて収容し、その時点の後に始められた書き込みは収容しないという意味で順序付けられる。したがってR2には常に、R1のポイント・イン・タイム・コピーが収容され、R2装置から整合性のある画像を再確立することができる。
図3を参照すると、ダイアグラム70は、領域52,54を構築および維持するために用いられる項目を例示している。標準の論理装置72は、ホスト22が書き込むデータを収容し、図2のデータ要素51および図1のディスク33a〜33cに対応する。標準の論理装置72は、ホスト22がローカル記憶装置24に書き込むデータを収容する。
標準の論理装置72とともに、ポインタのリンクされた2つのリスト74,76が用いられる。リンクされたリスト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,76はそれぞれ、データ領域52,54の一方に対して用いても良い。その結果、たとえば、リンクされたリスト74が、シーケンス番号Nに対するデータ52の領域に対応しても良く、一方で、リンクされたリスト76が、シーケンス番号N−1に対するデータ54の領域に対応しても良い。したがって、ホスト22がデータをローカル記憶装置24に書き込むと、データはキャッシュ88に送られ、場合によっては(本明細書の他の場所で説明されている)、リンクされたリスト74の適切なポインタが形成される。データは、標準の論理装置72にデータがデステージされて、リンクされたリスト74のポインタ81〜85のうちの1つによってデータが示されることがもはやなくなるまで、キャッシュ88から取り除かれることはない。これは、本明細書の他の場所で説明されている通りである。
本明細書における実施形態では、リンクされたリスト74,76のうちの一方は「アクティブ」であるとみなされ、他方は「非アクティブ」であるとみなされる。すなわち、たとえばシーケンス番号Nが偶数であるときに、リンクされたリスト74はアクティブで、リンクされたリスト76は非アクティブであっても良い。リンクされたリスト74,76のうちのアクティブなリストは、ホスト22からの書き込みを取り扱い、一方で、リンクされたリスト74,76のうちの非アクティブなリストは、ローカル記憶装置24から遠隔記憶装置26に送信されているデータに対応する。
ホスト22が書き込むデータが、リンクされたリスト74,76のうちのアクティブなリスト(シーケンス番号Nに対する)を用いて蓄積される一方で、リンクされたリスト74,76のうちの非アクティブなリスト(以前のシーケンス番号N−1に対する)に対応するデータが、ローカル記憶装置24から遠隔記憶装置26に送信される。RA30a〜30cは、リンクされたリスト74,76を用いて、ローカル記憶装置24から遠隔記憶装置26に送信すべきデータを判定する。
リンクされたリスト74,76のうちの一方のリストにおけるポインタの特定の1つに対応するデータが遠隔記憶装置26に送信されると直ちに、ポインタの特定の1つを、リンクされたリスト74,76のうちの適切なリストから取り除いても良い。加えて、データを、キャッシュ88から取り除くことに対してマーキングしても良い(すなわちスロットを、スロットのプールに戻して、後に関連のないことに使用できるようにしても良い)。なお、これは、スロット内のデータが、そうでない場合に他の目的(たとえば、標準の論理装置72にデステージされること)に対して必要とされない場合である。すべての装置がもはやデータを使用していない状態になるまでキャッシュ88からデータが取り除かれないことを保証するためのメカニズムを用いても良い。このようなメカニズムは、たとえば以下の文献に記載されている。米国特許第5,537,568号明細書(1996年7月16日付与)、および米国特許出願第09/850,551号明細書(2001年7月7日出願)。いずれも本明細書において参照により取り入れられている。
図4を参照すると、スロット120には、キャッシュ88のスロット102〜104のうちの1つと同様に、ヘッダ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がディスクの一部に対してデータを書き込む場合、書き込みは、最終的にディスクにデステージされるキャッシュ・スロットに対して行なわれる。キャッシュ・スロットは、新しいキャッシュ・スロットであっても良いし、同じトラックに対する以前の読み出しおよび/または書き込み動作とともに形成されたすでに存在しているキャッシュ・スロットであっても良い。
処理は、第1のステップ142から始まる。ここでは、書き込みに対応するスロットがロックされる。本明細書における実施形態では、キャッシュ88のスロット102〜104はそれぞれ、標準の論理装置72上のデータのトラックに対応する。ステップ142でスロットをロックすることによって、フロー・チャート140のステップに対応する処理がHA28によって行なわれる間に、さらなるプロセスが当該のスロット上で動作することが防止される。
ステップ142の次はステップ144であり、ここではN(シーケンス番号)に対する値が設定される。本明細書の他の場所で説明されているように、ステップ144において得られるシーケンス番号に対する値は、スロットがロックされている間にHA28が行なう書き込み動作全体の間、維持される。本明細書の他の場所で説明されているように、シーケンス番号を各書き込みに割り当てて、書き込みが属するデータ領域52,54の一方を設定する。ホスト22が行なう書き込みには、現在のシーケンス番号を割り当てる。単一の書き込み動作が同じシーケンス番号を維持し続けることが有用である。
ステップ144の次は判定ステップ146である。ここでは、キャッシュ・スロットのパスワード・フィールドが有効か否かが判定される。前述したように、本明細書で説明するシステムでは、パスワード・フィールドを所定の値に設定して、キャッシュ・スロットがすでにポインタのリンクされたリスト74,76のうちの一方にあることを示す。判定ステップ146で判定されるのは、パスワード・フィールドが有効ではない(スロットが新しく、リスト74,76からのポインタがスロットを示さないことを示す)か否かである。次に制御は、ステップ146からステップ148に移る。ここでは、新しいスロットのキャッシュ・スタンプが設定される。設定は、パスワードを所定の値に設定し、シーケンス番号フィールドをNに設定し、ポインタ・フィールドをゼロに設定することによって、行なわれる。他の実施形態では、ポインタ・フィールドを、スロット自体を示すように設定しても良い。
ステップ148の次はステップ152である。ここでは、ポインタ・リスト74,76のうちのアクティブなリストに、新しいスロットに対するポインタが加えられる。本明細書における実施形態では、リスト74,76は、循環の二重にリンクされたリストであり、新しいポインタは、循環の二重にリンクされたリストに従来の方法で加えられる。当然のことながら、他の適切なデータ構造を用いてリスト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に移る。ここでは、スロットのシーケンス番号フィールドが、現在のシーケンス番号Nに等しいか否かが判定される。なお、有効なパスワードを伴うスロットのシーケンス番号フィールドに対しては、2つの有効な可能性が存在する。シーケンス番号フィールドが、N(現在のシーケンス番号)に等しい可能性がある。これが起きるのは、スロットが、シーケンス番号Nを伴う以前の書き込みに対応する場合である。他方の可能性は、シーケンス番号フィールドがN−1に等しいことである。これが起きるのは、スロットが、シーケンス番号N−1を伴う以前の書き込みに対応する場合である。シーケンス番号フィールドに対する他の値は、どれも無効である。したがって、いくつかの実施形態においては、ステップ162においてエラー/有効性のチェッキングを含むこと、またはおそらくエラー/有効性のチェッキングを別個のステップにすることが、可能であっても良い。このようなエラーは、適切であればいかなる方法で取り扱っても良い。このような方法には、ユーザにメッセージを送ることが含まれていても良い。
ステップ162において、スロットのシーケンス番号フィールドにおける値が現在のシーケンス番号Nに等しいと判定された場合には、特別な処理は必要とされず、制御はステップ162から前述のステップ156に移って、データがスロットに書き込まれる。そうではなく、シーケンス番号フィールドの値がN−1(唯一の他の有効な値)である場合には、制御はステップ162からステップ164に移って、新しいスロットを得る。ステップ164で得られる新しいスロットを用いて、書き込まれているデータを記憶しても良い。
ステップ164の次はステップ166であり、ここでは、古いスロットからのデータを、ステップ164で得られた新しいスロットにコピーする。なお、コピーされるデータにはRDF_WPフラッグが含まれている。このフラッグは、ステップ154において、スロットが最初に形成されたときの以前の書き込みに対して、設定されているはずである。ステップ166の次はステップ168であり、ここでは、新しいスロットに対するキャッシュ・スタンプを設定する。設定は、パスワード・フィールドを適切な値に設定し、シーケンス番号フィールドを現在のシーケンス番号Nに設定し、ポインタ・フィールドを古いスロットを示すように設定することによって行なう。ステップ168の次はステップ172であり、ここでは、新しいスロットに対するポインタを、リンクされたリスト74,76のうちのアクティブなリストに加える。ステップ172の次は、前述のステップ156であり、データをスロット(この場合は新しいスロット)に書き込む。
図6を参照すると、フロー・チャート200は、RA30a〜30cがリスト72,74のうちの非アクティブなリストを走査してRDFデータをローカル記憶装置24から遠隔記憶装置26に送信することとともに行なわれるステップを例示している。前述したように、ホストがリスト72,74のうちのアクティブなリストを用いてNサイクルをR1装置に書き込んでいるときに、リスト72,74のうちの非アクティブなリストは、R1装置に対するN−1サイクルに対応するスロットを示す。
処理は、第1のステップ202から始まる。ここでは、リスト72,74のうちお非アクティブなリストに、何らかのエントリが存在するか否かが判定される。データが送信されると、対応するエントリが、リスト72,74のうちの非アクティブなリストから取り除かれる。加えて、新しい書き込みが、リスト72,74のうちのアクティブなリストに送られ、一般的に、リスト72,74のうちの非アクティブなリストには送られない。このため、リスト72,74のうちの非アクティブなリストが、ある特定の時間にデータを収容していない可能性がある(かつ望ましい。これは本明細書の他の場所で説明されている通りである)。ステップ202において、送信すべきデータが存在しないと判定された場合には、データが利用可能になるまで、リスト72,74のうちの非アクティブなリストを連続的にポーリングする。送信用データが、サイクル切り換え(本明細書の他の場所で説明されている)とともに利用可能になる。サイクル切り換えでは、リスト72,74のうちの非アクティブなリストがリスト72,74のうちのアクティブなリストになる。逆もまた同様である。
ステップ202において、送信するために利用可能なデータが存在すると判定された場合には、制御はステップ202からステップ204に移る。ここでは、スロットが正しいことが検証される。ステップ204で行なわれる処理は、任意的な「サニティ・チェック」である。このチェックには、パスワード・フィールドが正しいことの検証と、シーケンス番号フィールドが正しいことの検証とが、含まれていても良い。スロット内に不正確な(予想外の)データが存在する場合には、エラー処理を行なっても良い。エラー処理には、ユーザにエラーとおそらくエラー・リカバリ処理とを通知することが含まれていても良い。
ステップ204の次はステップ212であり、ここでは、データをRDFを介して従来の方法で送る。本明細書における実施形態では、スロット全体が送信されてはいない。むしろ、適切なミラー・ビット組(記録が変わったことを示す)を有するスロット内の記録のみが、遠隔記憶装置26に送信される。しかし、他の実施形態では、遠隔記憶装置26が、適切なミラー・ビット組を有する記録に対応するデータのみを書き込んで、トラックに対する他のデータ(有効であるかも知れないし、有効でないかも知れない)を無視するならば、スロット全体を送信することが可能であっても良い。ステップ212の次は判定ステップ214であり、ここでは、送信されたデータがR2装置によって確認応答されたか否かが判定される。確認応答されていない場合には、データが再び送られる。これは、ステップ214からステップ212に戻るフローによって示されている通りである。他の実施形態では、さらに複雑な種々の処理を用いて、データを送りその受け取りに確認応答しても良い。このような処理には、エラー報告と、データを送るある特定の数の試みが失敗した後に行なわれる代替的な処理とが、含まれていても良い。
判定ステップ214において、データの送信に成功したと判定されたら直ちに、制御はステップ214からステップ216に移って、RDF_WPフラッグをクリアする(なぜならば、RDFを介したデータの送信に成功したからである)。ステップ216の次は判定ステップ218である。ここでは、スロットが、リスト72,74のうちの非アクティブなリストに既存のエントリをすでに有しているスロットへの書き込みとともに形成される複製スロットであるか否かが判定される。この可能性については、ステップ162,164,166,168,172に関連して前述している。ステップ218において、スロットが複製スロットであると判定された場合には、制御はステップ218からステップ222に移る。ここでは、スロットは、利用可能なスロット(再利用するため)のプールに戻される。加えて、スロットを、他のスロットの前に直ちに再利用できるように、エージング(または他の何らかの適切なメカニズムをスロットに適用)しても良い。なぜならば、スロット内に存在するデータは、他のどんな目的に対しても有効ではないからである。ステップ222の後、またはステップ218においてスロットが複製スロットでない場合には、ステップ224に続く。ここでは、スロットのパスワード・フィールド・ヘッダをクリアして、スロットの再利用時に、図5のステップ146の判定によってスロットが新しいスロットとして適切に分類されるようにする。
ステップ224の次はステップ226であり、ここでは、リスト72,74のうちの非アクティブなリストにおけるエントリが取り除かれる。ステップ226に続いて、制御は前述のステップ202に戻る。ここでは、転送する必要があるデータに対応してリスト72,74の非アクティブなリストにさらなるエントリが存在するか否かが判定される。
図7を参照すると、ダイアグラム240は、遠隔記憶装置26が用いる領域56,58の形成および操作を例示している。リンク29を介して遠隔記憶装置26が受信するデータが、遠隔記憶装置26のキャッシュ242に送られる。キャッシュ242は、たとえば、遠隔記憶装置26のメモリ38内に設けられていても良い。キャッシュ242には、複数のキャッシュ・スロット244〜246が含まれている。各キャッシュ・スロットは、標準の論理記憶装置252のトラックに対してマッピングされていても良い。キャッシュ242は、図3のキャッシュ88と同様であり、遠隔記憶装置26の標準の論理記憶装置252にデステージすることができるデータを収容しても良い。標準の論理記憶装置252は、図2に示すデータ要素62と図1に示すディスク34a〜34cとに対応する。
また遠隔記憶装置26は、一対のキャッシュ・オンリー仮想装置(COVD:Cache Only Virtual Device )254,256を収容している。キャッシュ・オンリー仮想装置254,256は、たとえば遠隔記憶装置26のメモリ38に記憶しても良い装置テーブルに対応した。各キャッシュ・オンリー仮想装置254,256のテーブルの各トラック・エントリは、標準の論理装置252のトラックを示すか、あるいはキャッシュ242のスロットを示す。キャッシュ・オンリー仮想装置は、同時係属中の米国特許出願、発明の名称「キャッシュ・オンリー仮想装置」(2003年3月25日出願)、第10/396,800号明細書に記載されている。なお、この文献は本明細書において参照により取り入れられている。
複数のキャッシュ・スロット244〜246は、標準の論理装置252への書き込みとともに用いても良く、同時に、キャッシュ・オンリー仮想装置254,256とともに用いても良い。本明細書における実施形態では、キャッシュ・オンリー仮想装置254,256の各トラック・テーブル・エントリには、そのトラックに対するデータが標準の論理装置252の対応するトラック上に記憶されていることを示すために、ゼロが収容される。その他の場合には、キャッシュ・オンリー仮想装置254,256のそれぞれに対するトラック・テーブル内のエントリには、キャッシュ242内のスロット244〜246のうちの1つに対するポインタが収容される。
キャッシュ・オンリー仮想装置254,256はそれぞれ、データ領域56,58の一方に対応している。したがって、たとえば、キャッシュ・オンリー仮想装置254はデータ領域56に対応していても良く、一方でキャッシュ・オンリー仮想装置256はデータ領域58に対応していても良い。本明細書における実施形態では、キャッシュ・オンリー仮想装置254,256のうちの一方を「アクティブ」とみなしても良く、一方でキャッシュ・オンリー仮想装置254,256の他方を「非アクティブ」とみなしても良い。キャッシュ・オンリー仮想装置254,256のうちの非アクティブな装置は、ローカル記憶装置24から受信しているデータ(すなわち領域56)に対応していても良く、一方でキャッシュ・オンリー仮想装置254,256のうちのアクティブな装置は、標準の論理装置252に復元されて(書き込まれて)いるデータに対応していても良い。
リンク29を介して受信したローカル記憶装置24からのデータを、キャッシュ242のスロット244〜246のうちの1つに配置しても良い。キャッシュ・オンリー仮想装置254,256のうちの非アクティブな装置の対応するポインタを、受信データを示すように設定しても良い。その後のデータは、同じシーケンス番号を有する場合、同様の仕方で処理される。ある時点において、ローカル記憶装置24から、同じシーケンス番号を用いて送られるすべてのデータをコミットするメッセージが出される。特定のシーケンス番号に対するデータがコミットされたら直ちに、キャッシュ・オンリー仮想装置254,256のうちの非アクティブな装置がアクティブになる。逆もまた同様である。その時点において、キャッシュ・オンリー仮想装置254,256のうちの現在アクティブな装置からのデータが、標準の論理装置252にコピーされ、一方でキャッシュ・オンリー仮想装置254,256のうちの非アクティブな装置が、ローカル記憶装置24から遠隔記憶装置26に送信される新しいデータ(新しいシーケンス番号を有する)を受信するために用いられる。
キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置(本明細書の他の場所で説明されている)からデータが取り除かれたときに、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置の対応するエントリを、ゼロに設定しても良い。加えて、データをキャッシュ244から取り除いても良い(すなわち、スロットを自由なスロットのプールに戻して、後で使用できるようにする)。これは、スロット内のデータが、他の目的(たとえば、標準の論理装置252にデステージすること)に対して必要とされない場合である。すべてのミラー(キャッシュ・オンリー仮想装置254,256を含む)がもはやデータを使用していない状態になるまでデータがキャッシュ242から取り除かれることがないことを保証するために、メカニズムを用いても良い。このようなメカニズムは、たとえば、米国特許第5,537,568号明細書(1996年7月16日付与)および米国特許出願第09/850,551号明細書(2001年7月7日出願)に記載されている。両文献とも、本明細書において参照により取り入れられている。
本明細書の他の場所で説明されているいくつかの実施形態では、遠隔記憶装置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に送信するシーケンス番号コミットに対するデータ処理に関連して遠隔記憶装置26が行なうステップを例示している。本明細書の他の場所で説明されているように、ローカル記憶装置24は、周期的にシーケンス番号を増加させる。これが行なわれると、ローカル記憶装置24は、以前のシーケンス番号に対するデータをすべて送信することを完了して、以前のシーケンス番号に対するコミット・メッセージを送る。
処理は、第1のステップ272から始まる。ここでは、コミットを受信する。ステップ272の次は判定ステップ274であり、ここでは、遠隔記憶装置26のキャッシュ・オンリー仮想装置254,256のうちのアクティブな装置が空であるか否かが判定される。本明細書の他の場所で説明されているように、遠隔記憶装置26のキャッシュ・オンリー仮想装置254,256のうちの非アクティブな装置は、RDFを用いて送られるローカル記憶装置24からのデータを蓄積するために用いられ、一方でキャッシュ・オンリー仮想装置254,256のうちのアクティブな装置は、標準の論理装置252に復元される。
判定ステップ274において、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置が空ではないと判定された場合、制御は判定ステップ274からステップ276に移る。ここでは、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置に対する復元を、さらなる処理を行なう前に完了する。キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置からのデータの復元については、本明細書の他の場所で詳細に説明されている。コミットを取り扱い、次のシーケンス番号に対するデータの復元を始める前に、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置が空であることは、有用である。
ステップ276の後、またはステップ274においてキャッシュ・オンリー仮想装置254,256のうちのアクティブな装置が空であると判定された場合には、ステップ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(遠隔記憶装置26が、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置を復元する)をより詳細に例示している。処理は、第1のステップ302から始まる。ここでは、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置の第1のスロットを示すように、ポインタを設定する。ポインタを用いて、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置の各トラック・テーブル・エントリを繰り返す。キャッシュ・オンリー仮想装置254,256はそれぞれ、別個に処理される。ステップ302の次は判定ステップ304であり、ここでは、処理中のキャッシュ・オンリー仮想装置254,256のうちのアクティブな装置のトラックが、標準の論理装置252を示すか否かが判定される。示す場合には、復元するものはない。示さない場合には、制御はステップ304からステップ306に移る。ここでは、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置の対応するスロットがロックされる。
ステップ306の次は判定ステップ308であり、ここでは、標準の論理装置252の対応するスロットがすでに遠隔記憶装置26のキャッシュ内にあるか否かが判定される。キャッシュ内にある場合には、制御は判定ステップ308からステップ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に移る。ここでは、標準の論理装置のスロット252に対するトラック・エントリを変えて、標準の論理装置のスロット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の次はステップ336であり、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置の次のスロットを処理するために次のスロットを示す。なおステップ336には、判定ステップ332からも到達する。それはステップ332において、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置が依然として他のミラーによって使用中であると判定された場合である。なお、ステップ336には、判定ステップ304からも到達する。それはステップ304において、処理中のスロットに対して、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置が標準の論理装置252を示すと判定された場合である。ステップ336の次は判定ステップ338であり、ここでは、処理すべきキャッシュ・オンリー仮想装置254,256のうちのアクティブな装置のスロットがまだ存在するか否かを判定する。存在しない場合には、処理は完了する。存在する場合には、制御は判定ステップ338からステップ304に戻る。
他の実施形態では、遠隔記憶装置26上のN−1サイクルに対応するデータの受信領域56に対する変更されるスロットのリスト(たとえば図7に示すリスト258,262)を構築することができる。データを受信したら、遠隔記憶装置26は、変更されるスロットのリンクされたリストを構築する。構築されるリストは、循環であっても良いし、線形(NULL終端を伴う)であっても良いし、適切であれば他のいかなる構成あっても良い。そしてリストを用いて、キャッシュ・オンリー仮想装置254,256のうちのアクティブな装置を復元しても良い。
図9のフロー・チャート300では、変更されるスロットのリストを用いる実施形態の動作を例示する2つの代替的な経路342,344を示している。ステップ302では、ポインタ(変更されるスロットのリストを繰り返すために用いられる)が、リストの第1の要素を示すようにされる。ステップ302の次はステップ306であり、ここには、代替的な経路342を通って到達される。変更されるスロットのリストを用いる実施形態では、判定ステップ304は必要ではない。なぜならば、リスト上のスロットは標準の論理装置252を示さないからである。
ステップ306に続いて、処理は、前の実施形態について前述したように続く。ただしステップ336は、COVD内の次のスロットを示すのではなく、変更されるスロットのリストを一巡することを指す。同様に、ステップ338における判定では、ポインタが、リストの終わりにあるか(または循環のリンクされたリストの場合には始まりに戻っているか)否かを判定する。同様に、ステップ338において、処理すべきスロットがまだ存在すると判定された場合には、制御はステップ338からステップ306に移る。これは、代替的な経路344によって例示されている通りである。前述したように、変更されるスロットのリストを用いる実施形態の場合には、ステップ304は除いても良い。
図10を参照すると、フロー・チャート350は、ローカル記憶装置24がシーケンス番号を増加させることと関連して行なわれるステップを例示している。処理は、第1のステップ352から始まる。ここでは、ローカル記憶装置24が、シーケンス番号を増加させる前に少なくともM秒間だけ待機する。本明細書における実施形態では、Mは30であるが、当然のことながら、Mは任意の数とすることができる。Mの値が大きくなると、記憶装置24と26との間の通信が乱れたときに失われ得るデータ量が増える。しかし、Mの値が小さくなると、シーケンス番号を増加させる頻度が増えることによって、オーバーヘッドの合計が増える。
ステップ352の次は判定ステップ354であり、ここでは、ローカル記憶装置24のすべてのHAが、以前のシーケンス番号に対するすべてのI/OをHAが完了したことを示すビットを、設定したか否かを判定する。シーケンス番号が変わると、各HAはその変化を知って、以前のシーケンス番号のすべてのI/Oが完了したことを示すビットを設定する。たとえば、シーケンス番号がN−1からNに変わった場合、HAがシーケンス番号N−1に対するすべてのI/Oを完了したときに、HAはビットを設定する。なお、場合によっては、HAに対するI/Oが単一であるときに、時間がかかることがあり、シーケンス番号が変わった後でも依然として進んでいることがある。またシステムによっては、すべてのHAがそれらのN−1のI/Oを完了したか否かを判定するために、異なるメカニズムを用いても良いことに注意されたい。異なるメカニズムとしては、メモリ37内の装置テーブルを検査することが含まれていても良い。
判定ステップ354において、以前のシーケンス番号からのI/Oが完了したと判定された場合には、制御はステップ354から判定ステップ356に移る。ここでは、リスト74,76のうちの非アクティブなリストが空であるか否かが判定される。なおリスト74,76のうちの非アクティブなリストに対応するデータがすべて、ローカル記憶装置24から遠隔記憶装置26にRDFプロトコルを用いて完全に送信されるまで、シーケンス番号切り換えは行なわなくても良い。リスト74,76のうちの非アクティブなリストが空であると判定されたら直ちに、制御はステップ356からステップ358に移る。ここでは、以前のシーケンス番号に対するコミットが、ローカル記憶装置24から遠隔記憶装置26に送られる。前述したように、遠隔記憶装置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に移る。ここでは、コピーの一時停止(ステップ362で行なわれた)をクリアして、コピーすることを再開できるようにしても良い。ステップ374に続いて、処理は完了する。なお、ステップ374からステップ352に戻って、新しいサイクルを開始してシーケンス番号を連続的に増加させることが可能である。
またアクティブなデータと非アクティブなデータ領域とに関連するスロットを集めるために、R1装置上のCOVDを用いることもできる。その場合、R2装置の場合と同様に、1つの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が収容されている。これらは、標準の論理装置402への書き込みとともに用いても良く、同時に、キャッシュ・オンリー仮想装置404,406とともに用いても良い。本明細書における実施形態では、キャッシュ・オンリー仮想装置404,406の各トラック・テーブル・エントリには、対応する標準の論理装置402のトラックを示すために、ゼロが収容される。その他の場合には、各キャッシュ・オンリー仮想装置404,406に対するトラック・テーブル内のエントリには、キャッシュ408内のスロット412〜414の1つに対するポインタが収容される。
キャッシュ・オンリー仮想装置404,406をそれぞれ、データ領域52,54のうちの一方に対して用いても良い。その結果、たとえば、キャッシュ・オンリー仮想装置404がシーケンス番号Nに対するデータ52の領域に対応する一方で、キャッシュ・オンリー仮想装置406がシーケンス番号N−1に対するデータ54の領域に対応しても良い。したがって、ホスト22がデータをローカル記憶装置24に書き込むと、データがキャッシュ408に送られて、キャッシュ・オンリー仮想装置404の適切なポインタが調整される。なお、データが標準の論理装置402にデステージされ、さらにデータがキャッシュ・オンリー仮想装置404によって解放されるまで、データはキャッシュ408から取り除かれない。これについては本明細書の他の場所で説明されている通りである。
本明細書における実施形態では、キャッシュ・オンリー仮想装置404,406のうちの一方を「アクティブ」とみなし、他方を「非アクティブ」とみなす。したがって、たとえばシーケンス番号Nが偶数であるときには、キャッシュ・オンリー仮想装置404がアクティブであり、キャッシュ・オンリー仮想装置406が非アクティブであっても良い。キャッシュ・オンリー仮想装置404,406のうちのアクティブな装置は、ホスト22からの書き込みを取り扱い、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置は、ローカル記憶装置24から遠隔記憶装置26に送信されているデータに対応する。
ホスト22が書き込むデータは、キャッシュ・オンリー仮想装置404,406のうちのアクティブな装置(シーケンス番号Nに対する)を用いて蓄積され、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置(以前のシーケンス番号N−1に対する)に対応するデータは、ローカル記憶装置24から遠隔記憶装置26に送信される。この実施形態および関連する実施形態の場合、ローカル記憶装置のDA35a〜35cが取り扱うのは、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置を走査して、コピー・リクエストをRA30a〜30cの1つまたは複数に送り、ローカル記憶装置24からのデータを遠隔記憶装置26に送信することである。したがって、ステップ362,374(コピーの一時停止および再開に関連して前述した)は、DA35a〜35cにメッセージ/コマンドを送ることを含んでいても良い。
データが遠隔記憶装置26に送信されたら直ちに、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置における対応するエントリを、ゼロに設定しても良い。加えて、データをキャッシュ408から取り除いても良い(すなわち、スロットをスロットのプールに戻して、後で使用できるようにする)。これは、スロット内のデータが、他の目的(たとえば、標準の論理装置402にデステージすること)に対して必要とされない場合である。すべてのミラー(キャッシュ・オンリー仮想装置404,406を含む)がもはやデータを使用していない状態になるまでデータがキャッシュ408から取り除かれることがないことを保証するために、何らかのメカニズムが用いられても良い。このようなメカニズムは、たとえば、米国特許第5,537,568号明細書(1996年7月16日付与)および米国特許出願第09/850,551号明細書(2001年7月7日出願)に記載されている。両文献とも、本明細書において参照により取り入れられている。
図12を参照すると、フロー・チャート440は、本明細書で説明するシステムを実現するためにR1装置が2つのCOVDを使用する実施形態に対して、ホスト22が書き込み動作を行なうことに関連してHA28によって行なわれるステップを例示している。処理は、第1のステップ442から始まる。ここでは、書き込みに対応するスロットがロックされる。本明細書における実施形態では、キャッシュ408のスロット412〜414はそれぞれ、標準の論理装置402上のデータのトラックに対応する。ステップ442においてスロットをロックすることによって、フロー・チャート440のステップに対応してHA28が行なう処理の間に、さらなるプロセスが当該のスロット上で動作することが防止される。
ステップ442の次はステップ444であり、ここでは、N(シーケンス番号)に対する値が設定される。R1サイド上のCOVDではなくリストを用いる実施形態の場合と同様に、ステップ444で得られるシーケンス番号に対する値は、スロットがロックされている間にHA28が行なう書き込み動作全体の間、維持される。本明細書の他の場所で説明されているように、シーケンス番号を各書き込みに割り当てて、書き込みが属するデータ領域52,54のうちの一方を設定する。ホスト22が行なう書き込みには、現在のシーケンス番号が割り当てられる。単一の書き込み動作を通して同じシーケンス番号が維持されることが有用である。
ステップ444の次は判定ステップ446であり、ここでは、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置が、ステップ442でロックされたスロット(操作されているスロット)をすでに示しているか否かを判定する。これは、シーケンス番号が現在のシーケンス番号よりも小さいときに同じスロットへの書き込みが行なわれたときに、起きる場合がある。以前のシーケンス番号に対する書き込みに対応するデータが、依然として遠隔記憶装置26に送信されていない場合がある。
判定ステップ446において、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置がスロットを示していないと判定された場合には、制御は判定ステップ446から他の判定ステップ448に移る。ここでは、キャッシュ・オンリー仮想装置404,406のうちのアクティブな装置がスロットを示すか否かが判定される。シーケンス番号が現在のシーケンス番号と同じであるとともにスロットに対して以前に書き込みがあった場合には、キャッシュ・オンリー仮想装置404,406のうちのアクティブな装置がスロットを示す可能性がある。判定ステップ448において、キャッシュ・オンリー仮想装置404,406のうちのアクティブな装置がスロットを示していないと判定された場合には、制御は判定ステップ448からステップ452に移って、データに対する新しいスロットを得る。ステップ452の次はステップ454であり、ここでは、キャッシュ・オンリー仮想装置404,406のうちのアクティブな装置が、スロットを示すようにする。
ステップ454の後、またはステップ448においてキャッシュ・オンリー仮想装置404,406のうちのアクティブな装置がスロットを示す場合に、ステップ456に続く。ここでは、フラッグが設定される。ステップ456において、RDF_WPフラッグ(RDF書き込み保留中フラッグ)を、RDFを用いてスロットを遠隔記憶装置26に送信する必要があることを示すように設定する。加えて、ステップ456において、IN_CACHEフラッグを、スロットを標準の論理装置402にデステージする必要があることを示すように設定する。なお、場合によっては、キャッシュ・オンリー仮想装置404,406のうちのアクティブな装置がすでにスロットを示している場合には(ステップ448で判定されるように)、ステップ456を実行する前にRDF_WPおよびINCACHEフラッグがすでに設定されている可能性がある。しかし、ステップ456においてフラッグを設定することによって、以前の状態が何であれフラッグが適切に設定されることが保証される。
ステップ456の次はステップ458であり、ここでは、スロットを示すトラック・テーブル内の間接的なフラッグをクリアして、当該のデータはスロット内に設けられていて間接的に示される違うスロット内ではないことを示す。ステップ458の次はステップ462であり、ここでは、ホスト22およびHA28が書き込んでいるデータをスロットに書き込む。ステップ462の次はステップ464であり、ここでは、スロットのロックを解除する。ステップ464に続いて処理は完了する。
判定ステップ446において、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置がスロットを示していると判定された場合には、制御はステップ446からステップ472に移って、新しいスロットを得る。ステップ472で得られる新しいスロットを、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置に対して用いてRDF転送を起こしても良く、一方で、古いスロットを、キャッシュ・オンリー仮想装置404,406のうちのアクティブな装置に関連させても良い。これについては後述する。
ステップ472の次はステップ474であり、ここでは、古いスロットからのデータを、ステップ472で得られた新しいスロットにコピーする。ステップ474の次はステップ476であり、ここでは、間接的なフラッグ(前述した)の設定を、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置に対するトラック・テーブル・エントリが古いスロットを示すこと、しかしデータは古いスロットが示す新しいスロット内にあること、を示すように行なう。このようにして、ステップ476で間接的なフラッグを設定することによって、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置のトラック・テーブルに作用して、トラック・テーブル・エントリに、データが新しいスロット内にあることを示させる。
ステップ476の次はステップ478であり、ここでは、新しいスロットにおける記録に対するミラー・ビットを調整する。ステップ474でデータが古いスロットから新しいスロットにコピーされたときにコピーされたローカル・ミラー・ビットはどれもクリアされる。なぜならば、新しいスロットの目的は単に、キャッシュ・オンリー仮想装置のうちの非アクティブな装置に対してRDF転送を引き起こすことだからである。古いスロットは、何れかのローカル・ミラーを取り扱うために用いられる。ステップ478の次はステップ462であり、ここでは、データをスロットに書き込む。ステップ462の次はステップ464であり、ここでは、スロットのロックが解除される。ステップ464に続いて処理は完了する。
図13を参照すると、フロー・チャート500は、ローカル記憶装置24がデータ領域54を遠隔記憶装置26に送信することに関連して行なわれるステップを例示している。送信には本質的に、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置を走査して、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置がアクティブだったときに、これに対して以前の繰り返しの間に書き込まれたトラックを探すことを伴う。この実施形態では、ローカル記憶装置24のDA35a〜35cが、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置を走査して、RDFプロトコルを用いてRA30a〜30cの1つまたは複数によって遠隔記憶装置26に送信するためのデータをコピーする。
処理は、第1のステップ502から始まる。ここでは、すべてのトラックを繰り返すプロセスを始めるために、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置の第1のトラックを示す。第1のステップ502の次は判定ステップ504であり、ここでは、RDF_WPフラッグが設定されているか否かが判定される。本明細書の他の場所で説明されているように、RDF_WPフラッグを用いて、RDFリンクを介して送信する必要があるデータをスロット(トラック)が収容していることを示す。RDF_WPフラッグが設定されているということは、スロット(トラック)に対する少なくとも一部のデータを、RDFを用いて送信すべきであることを示す。本明細書における実施形態では、スロット全体が送信されてはいない。むしろ、適切なミラー・ビット組(記録が変わったことを示す)を有するスロット内の記録のみが、遠隔記憶装置26に送信される。しかし、他の実施形態では、遠隔記憶装置26が、適切なミラー・ビット組を有する記録に対応するデータのみを書き込んで、トラックに対する他のデータ(有効であるかも知れないしそうでないかも知れない)を無視するならば、スロット全体を送信することが可能であっても良い。
判定ステップ504において、処理されているキャッシュ・スロットがRDF_WPフラッグを設定していると判定された場合には、制御はステップ504から判定ステップ505に移る。ここでは、スロットがデータを収容しているか否か、あるいはスロットが、当該データを収容する他のスロットを示す間接的なスロットであるか否かが、判定される。場合によっては、スロットは、スロットに対応するディスク部分に対するデータを収容していなくても良い。その代わりに、スロットは、データを収容する他のスロットを示す間接的なスロットであっても良い。ステップ505において、スロットが間接的なスロットであると判定された場合には、制御はステップ505からステップ506に移る。ここでは、データ(間接的なスロットが示すスロットから)が、得られる。こうして、スロットが直接的なスロットである場合には、RDFによって送るためのデータはスロット内に記憶され、一方で、スロットが間接的なスロットである場合には、RDFによって送るためのデータは、間接的なスロットが示す他のスロット内に存在する。
ステップ506の後、またはステップ505においてスロットが直接のスロットである場合には、ステップ507に続く。ここでは、送られているデータ(スロットから直接的または間接的に)が、DA35a〜35cの1つによってコピーされて、RDFプロトコルを用いてローカル記憶装置24から遠隔記憶装置26に送られる。ステップ507の次は判定ステップ508であり、ここでは、遠隔記憶装置26がデータの受け取りに確認応答したか否かが判定される。確認応答していない場合には、制御はステップ508からステップ507に戻って、データを再送信する。他の実施形態では、より複雑な種々の処理を用いてデータを送り、その受け取りに確認応答しても良い。このような処理には、エラー報告と、データを送る特定の数の試みが失敗した後に行なわれる代替的な処理とが含まれていても良い。
判定ステップ508において、データの送信が成功したことが判定されたら直ちに、制御はステップ508からステップ512に移って、RDF_WPフラッグをクリアする(なぜならば、RDFを介したデータの送信が成功しているからである)。ステップ512の次はステップ514であり、ここでは、適切なミラー・フラッグをクリアして、少なくともRDFミラー(R2)がもはやデータを必要としていないことを示す。本明細書における実施形態では、スロット(トラック)の一部である各記録は、どのミラーが特定の記録を用いているかを示す別個のミラー・フラッグを有している。R2装置は、各記録に対するミラーの1つであり、ステップ514でクリアされるのはR2装置に対応するフラッグである。
ステップ514の次は判定ステップ516であり、ここでは、処理中のトラックの記録の何れかが、他の何らかのミラー・フラッグの組(他のミラー装置に対する)を有しているか否かが判定される。有していない場合、制御はステップ516からステップ518に移り、ここでスロットは解放される(すなわち、もはや使用されていない)。いくつかの実施形態では、未使用のスロットは、使用するために利用可能なスロットのプールに維持される。なお、スロットの記録の一部に対してさらなるフラッグが依然として設定される場合、この意味は、記録を標準の論理装置402にデステージする必要があるか、あるいは記録が何らかの他のミラー(他のR2装置を含む)によって用いられている、ということであっても良い。ステップ518の後、またはステップ516においてミラー・フラッグがまだ存在する場合には、ステップ522に続く。ここでは、キャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置の各トラック・エントリを繰り返すために用いられるポインタを、次のトラックを示すようにする。ステップ522の次は判定ステップ524であり、ここでは、処理すべきキャッシュ・オンリー仮想装置404,406のうちの非アクティブな装置のトラックがまだ存在するか否かが判定される。存在しない場合には、処理は完了する。存在する場合には、制御は前述の判定ステップ504に戻る。なお、ステップ522は、判定ステップ504からも到達される。それは、RDF_WPフラッグが、処理中のトラックに対して設定されていないと判定された場合である。
図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であり、これらは、本明細書で説明した順序付けられた書き込みメカニズムを用いて結合しても良い。その結果、たとえば、ローカル記憶装置703を、順序付けられた書き込みメカニズムを用いて遠隔記憶装置706に結合しても良い。本明細書の他の場所で説明されているように、順序付けられた書き込みメカニズムによって、ローカル記憶装置および/またはホストが動作を停止しおよび/またはデータを失った場合に、遠隔記憶装置を用いてデータ・リカバリを行なうことができる。
場合によっては、ホスト702は、複数のローカル記憶装置703〜705を同時に用いる単一のアプリケーションを実行しても良い。このような場合、アプリケーションの構成は、ホスト702が任意の時間に動作を中止した場合および/またはローカル記憶装置703〜705の1つが破損した場合に、アプリケーション・データがローカル記憶装置703〜705において整合性がある(回復可能である)ことを保証するようなものであっても良い。しかし、ローカル記憶装置703〜705と遠隔記憶装置706〜708との間の各順序付けられた書き込み接続は、残りの接続とは非同期であるため、アプリケーションに対するデータが遠隔記憶装置706〜708において整合性がある(したがって回復可能である)ことは保証されない。すなわち、たとえば、ローカル記憶装置703と遠隔記憶装置706との間のデータ接続(第1のローカル/遠隔対)には整合性があり、ローカル記憶装置704と遠隔記憶装置707との間のデータ接続(第2のローカル/遠隔対)には整合性があったとしても、第1および第2のローカル/遠隔対の間に同期がないならば、遠隔記憶装置706,707上のデータに常に整合性があるとは限らない。
ホスト702上のアプリケーションが、複数のローカル記憶装置703〜705を同時に用いるものである場合には、データは遠隔記憶装置706〜708において整合性がありおよび回復可能であることが望ましい。これは、ホスト702がローカル記憶装置703〜705のそれぞれにおけるサイクル切り換えを制御するメカニズムとして、ホスト702上で実行されるアプリケーションからのデータが遠隔記憶装置706〜708において整合性があり、かつ回復可能となるようなものを用いることによって、実現しても良い。この機能は、複数のローカル記憶装置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が行なうステップを例示している。処理は、第1のステップ752から始まる。ここでは、マルチ・ボックス・モード動作を一時的に停止する。ステップ752でマルチ・ボックス動作を一時的に停止することは、マルチ・ボックス・モードへの遠隔/ローカル対の出入りとともになされる変更を容易にするのに有用である。ステップ752の次はステップ754であり、ここでは、図15のテーブル730のようなテーブルを、必要に応じて変更してエントリを加えるか、あるいは削除する。ステップ754の次はステップ756であり、ここでは、変更されたテーブルを、マルチ・ボックス・グループのローカル記憶装置および遠隔記憶装置に伝える。ステップ756でテーブルを伝えることによって、リカバリが容易になる。これについては、本明細書の他の場所で詳細に説明されている通りである。
ステップ756の次はステップ758であり、ここでは、影響を受けるローカル記憶装置にメッセージを送って、変更を加える。ローカル記憶装置はそれ自体を、マルチ・ボックス・モードで実行されるように構成しても良いし、しなくても良い。これについては、本明細書の他の場所で詳細に説明されている通りである。後に詳細に説明するように、順序付けられた書き込みを取り扱うローカル記憶装置は、この装置がマルチ・ボックス・グループの一部として動作しているか否かに応じて、動作の仕方が異なっている。ローカル記憶装置がマルチ・ボックス・グループに加えられている場合には、ステップ758で送られるメッセージは、ローカル記憶装置に対して、この装置がマルチ・ボックス・グループに加えられていることを示すため、ローカル記憶装置はそれ自体を、マルチ・ボックス・モードで実行するように構成しなければならない。あるいは、ローカル記憶装置がマルチ・ボックス・グループから取り除かれている場合には、ステップ758で送られるメッセージは、ローカル記憶装置に対して、この装置がマルチ・ボックス・グループから取り除かれていることを示すため、ローカル記憶装置はそれ自体を、マルチ・ボックス・モードで実行されないように構成しなければならない。
ステップ758の次は判定ステップ762であり、ここでは、ローカル/遠隔対がマルチ・ボックス・グループに加えられているか否か(取り除かれているのではなく)を判定する。加えられている場合には、制御は判定ステップ762からステップ764に移る。ここでは、加えられているローカル記憶装置にタグ値を送る。タグ値には、ローカル記憶装置から遠隔記憶装置に送信されるデータが付与されている。与える方法は、シーケンス番号にデータを与える場合と同様である。タグ値はホストによって制御され、その設定は、すべてのローカル/遠隔対から送られるデータが、同じサイクルの間に同じタグ値を有するようになされる。タグ値の使用方法については、後に詳細に説明する。ステップ764の後、あるいはステップ762において新しいローカル/遠隔対が加えられていない場合には、ステップ766に続く。ここでは、マルチ・ボックス動作が再開される。ステップ766に続いて処理は完了する。
図17を参照すると、フロー・チャート780は、ホストが、マルチ・ボックス・モードにおけるグループとして実行される複数のローカル/遠隔対に対するサイクル切り換えを管理することと関連して行なわれるステップを例示している。本明細書の他の場所で説明されているように、マルチ−ボックス・モードには、遠隔記憶装置間でのデータ整合性を維持するために、ホストに、複数の遠隔/ローカル対に対するサイクル切り換えに同期させることが含まれている。サイクル切り換えは、ローカル記憶装置によって内部的に生成されるのではなくて、ホストによって調整される。これについては、後に詳細に説明する。
フロー・チャート780の処理は、判定ステップ782から始まる。ここでは、M秒が過ぎたか否かが判定される。ノン・マルチ・ボックス動作の場合と同様に、サイクル切り換えは、M秒(Mは、種々の性能パラメータを最適化するように選択される数)ごとに、直ちに行なわれる。数Mが増加すると、切り換えに伴うオーバーヘッドの量は減少する。しかし、Mを増加させると、故障とともに潜在的に失われ得るデータ量も増加する。本明細書における実施形態では、Mは30秒となるように選択しているが、明らかに他の値をMに対して用いても良い。
判定ステップ782において、M秒は過ぎていないと判定された場合には、制御はステップ782に戻ってM秒が過ぎるまで待機し続ける。判定ステップ782において、M秒が過ぎたと判定されたら直ちに、制御はステップ782からステップ784に移る。ここでは、すべてのローカル/遠隔対が切り換えに対して準備完了であるか否かを判定するために、ホストがマルチ・ボックス・グループ内のすべてのローカル記憶装置に問い合わせる。ローカル/遠隔対が切り換えに対して準備完了であることについては、後に詳細に説明する。
ステップ784の次は判定ステップ786であり、ここでは、すべてのローカル/遠隔対が、切り換えに対して準備完了であるか否かが判定される。準備完了でない場合には、制御はステップ784に戻って、問い合わせを再開する。本明細書における実施形態では、切り換えに対して以前は準備完了ではなかったローカル/遠隔対に問い合わせることだけが必要である。なぜならば、ローカル/遠隔対が切り換えに対して準備完了になれば直ちに、対は、切り換えが行なわれるまでその状態に留まるからである。
判定ステップ786において、マルチ・ボックス・グループ内のすべてのローカル/遠隔対が切り換えに対して準備完了であると判定されたら直ちに、制御はステップ786からステップ788に移る。ここでは、インデックス変数Nが、1に等しくなるように設定される。インデックス変数Nは、すべてのローカル/遠隔対(すなわち、図15のテーブル730のすべてのエントリ732〜734)を繰り返すために用いられる。ステップ788の次は判定ステップ792であり、ここでは、インデックス変数Nが、マルチ・ボックス・グループ内のローカル/遠隔対の数よりも大きいか否かが判定される。大きくない場合には、制御はステップ792からステップ794に移る。ここでは、N番目の対のN番目のローカル記憶装置に対してウィンドウを開くことが行なわれる。これは、ホストがN番目のローカル記憶装置にコマンド(たとえば、適切なシステム・コマンド)を送ることによってなされる。ステップ794で、N番目のローカル記憶装置に対してウィンドウを開くことによって、N番目のローカル記憶装置は書き込みを一時停止する。その結果、ステップ794でウィンドウを開く前に始められていないホストによるいかなる書き込みも、ウィンドウを閉じるまで完了しない(後述する)。書き込み動作を完了させないことによって、サイクル切り換えの完了前に第2の従属的な書き込みが行なわれることが防止される。ウィンドウを開ける前に始められた進行中の書き込みはどれも、ウィンドウを閉じる前に完了しても良い。
ステップ794の次はステップ796であり、ここでは、N番目のローカル記憶装置に対してサイクル切り換えが行なわれる。ステップ796でサイクル切り換えを行なうことには、ホスト702からN番目のローカル記憶装置にコマンドを送ることが伴う。N番目のローカル記憶装置によってホストからのコマンドを処理することについては、後に詳細に説明する。ステップ796で行なわれる処理の一部には、ホストが、データに割り当てられるタグに対して新しい値を提供することが含まれていても良い。タグについては、本明細書の他の場所で詳細に説明されている。代替的な実施形態では、ステップ794,796で行なわれる動作は、単一の統合されたステップ797として行なっても良い。これは、ステップ794,796の周りに描かれたボックスによって例示されている。
ステップ796の次はステップ798であり、ここでは、インデックス変数Nを増加する。ステップ798の後、制御は判定ステップ792に戻って、インデックス変数Nがローカル/遠隔対の数よりも大きいか否かを判定する。
判定ステップ792において、インデックス変数Nがローカル/遠隔対の数よりも大きいと判定された場合には、制御は判定ステップ792からステップ802に移る。ここでは、インデックス変数Nが、1に等しくなるように設定される。ステップ802の次は判定ステップ804であり、ここでは、インデックス変数Nがローカル/遠隔対の数よりも大きいか否かが判定される。大きくない場合には、制御はステップ804からステップ806に移る。ここでは、N番目のローカル記憶装置に対するウィンドウを閉じる。ステップ806のウィンドウを閉じることは、ホストがN番目のローカル記憶装置にコマンドを送ってN番目のローカル記憶装置に書き込み動作を再開させることによって、行なわれる。したがって、ステップ794でウィンドウを開けることによって一時停止された進行中の書き込みはどれも、ステップ806を実行した後に完了しても良い。ステップ806の後に、制御はステップ808に移る。ここでは、インデックス変数Nを増加させる。ステップ808に続いて、制御は判定ステップ804に戻り、インデックス変数Nがローカル/遠隔対の数よりも大きいか否かを判定する。大きい場合には、制御は判定ステップ804からステップ782に戻って、次のサイクル切り換えに対する処理を始める。
図18を参照すると、フロー・チャート830は、サイクル切り換えに関連してローカル記憶装置によって行なわれるステップを例示している。図18のフロー・チャート830は、図10のフロー・チャート350において、ローカル記憶装置がマルチ・ボックス・モードおよびノン・マルチ・ボックス・モードの両方をサポートしている場合である。すなわちフロー・チャート830は、ノン・マルチ・ボックス・モードをサポートするために、図10のフロー・チャート350のステップと同様に行なわれるステップを示し、加えて、マルチ・ボックス・モードをサポートするためのステップを含んでいる。
処理は最初の判定ステップ832から始まる。ここでは、ローカル記憶装置がマルチ・ボックス・モードで動作しているか否かが判定される。なお、図16のフロー・チャート750は、ホストがメッセージをローカル記憶装置に送るステップ758を示している。ステップ758で送られるメッセージは、ローカル記憶装置に対して、ローカル記憶装置がマルチ・ボックス・モードであるか否かを示す。ステップ758でホストが送るメッセージを受信すると直ちに、ローカル記憶装置は、ローカル記憶装置がマルチ・ボックス・モードで動作している否かを示す内部変数を設定する。内部変数は判定ステップ832で検査することができる。
判定ステップ832において、ローカル記憶装置がマルチ・ボックス・モードでないと判定された場合には、制御は判定ステップ832からステップ834に移って、サイクル切り換えに対してM秒間だけ待機する。ローカル記憶装置がマルチ・ボックス・モードで動作していない場合、ローカル記憶装置はその特有のサイクル切り換えを制御することによってステップ834を実行して、次のサイクル切り換えを開始する前にM秒の間、待機する。
ステップ834の後、あるいはステップ832においてローカル記憶装置はマルチ・ボックス・モードであると判定された場合には、判定ステップ836に続く。ここでは、ローカル記憶装置のすべてのHAが、以前のシーケンス番号に対するすべてのI/OをHAが完了したことを示すビットを設定したか否かを判定する。シーケンス番号が変わると、各HAは変化を知って、以前のシーケンス番号のすべてのI/Oが完了したことを示すビットを設定する。たとえば、シーケンス番号がN−1からNに変わった場合、HAがシーケンス番号N−1に対するすべてのI/Oを完了したときに、HAはビットを設定する。なお、場合によっては、HAに対するI/Oが単一であるときに、時間がかかることがあり、シーケンス番号が変わった後でも依然として進んでいることがある。またシステムによっては、すべてのHAがそれらのN−1個のI/Oを完了したか否かを判定するために、異なるメカニズムを用いても良いことに注意されたい。異なるメカニズムとしては、装置テーブルを検査することが含まれていても良い。判定ステップ836において、すべてのHAが適切なビットを設定したと判定されたら直ちに、制御は判定ステップ836からステップ888に移る。ここでは、ローカル記憶装置に対する非アクティブな領域が空であるか否かが判定される。判定ステップ888において、非アクティブな領域が空であると判定されたら直ちに、制御はステップ888からステップ899に移る。ここでは、データをローカル記憶装置から遠隔記憶装置にコピーすることが一時停止される。シーケンス番号切り換えが完了するまでデータのコピーを一時停止することは有用である。
ステップ899の次は判定ステップ892であり、ここでは、ローカル記憶装置がマルチ・ボックス・モードであるか否かが判定される。判定ステップ892において、ローカル記憶装置がマルチ・ボックス・モードであると判定された場合には、制御は判定ステップ892から判定ステップ894に移って、対応する遠隔記憶装置のアクティブな領域が空であるか否かが判定される。後に詳細に説明するように、遠隔記憶装置は、そのアクティブな領域を空にしたら直ちに、ローカル記憶装置にメッセージを送る。メッセージに応答して、ローカル記憶装置は内部変数を設定し、この内部変数が判定ステップ894で検査される。
判定ステップ894において、遠隔記憶装置のアクティブな領域が空であると判定されたら直ちに、制御は判定ステップ894からステップ896に移る。ここでは、ローカル記憶装置がサイクル切り換えに対して準備完了であることを示す内部変数が、ローカル記憶装置上で設定される。図17のフロー・チャート780に関連して前述したように、ホストは、各ローカル記憶装置が切り換えに対して準備完了であるか否かを判定するために、各ローカル記憶装置に問い合わせる。ホストから送られる問い合わせに応答して、ローカル記憶装置は、ステップ896で設定される内部変数を検査して、結果をホストに戻す。
ステップ896の次は判定ステップ898であり、ここでは、ローカル記憶装置は、サイクル切り換えを行なうためにホストからコマンドを受信することを待つ。図17のフロー・チャート780に関連して前述したように、ホストは、ローカル記憶装置がマルチ・ボックス・モードで動作しているときに、サイクルを切り換えるためのコマンドをローカル記憶装置に送る。このようにして、ローカル記憶装置は、ステップ898においてコマンドを待つ。コマンドは、ローカル記憶装置がマルチ・ボックス・モードで動作しているときにのみ届く。
ローカル記憶装置がホストから切り換えコマンドを受信したら直ちに、制御はステップ898からステップ902に移って、遠隔記憶装置にコミット・メッセージが送られる。なお、ステップ902には、判定ステップ892からも到達する。これは、判定ステップ892において、ローカル記憶装置がマルチ・ボックス・モードではないと判定された場合である。ステップ902では、ローカル記憶装置が遠隔記憶装置にコミット・メッセージを送る。特定のシーケンス番号に対するコミット・メッセージを受信することに応答して、遠隔記憶装置は、シーケンス番号に対応するデータの復元を始める。これは、前述した通りである。
ステップ902の次はステップ906であり、ここでは、シーケンス番号が増加されて、タグに対する新しい値(ホストから)が記憶される。シーケンス番号については、前述した通りである。タグは、ステップ764およびステップ796でローカル記憶装置に送られるタグであり、前述した通りである。タグは、データ・リカバリを容易にするために用いられる。これについては、本明細書の他の場所で説明されている通りである。
ステップ906の次はステップ907であり、ここでは、サイクル切り換えが完了したことの確認が、ローカル記憶装置からホストに対して行なわれる。確認は、ローカル記憶装置からホストにメッセージが送られることによってなされる。いくつかの実施形態では、ローカル記憶装置がマルチ・ボックス・モードであるか否かに対してステップ907の実行を調整することが可能である。なぜならば、ローカル記憶装置がマルチ・ボックス・モードでない場合には、ホストは必ずしも、サイクル切り換えがいつ行なわれるかについて関心があるわけではないからである。
ステップ907の次はステップ908であり、ここでは、判定ステップ836で用いられるHAに対するビットがすべてクリアされ、その結果、シーケンス番号の増加とともにビットを再び設定することができる。ステップ908の次は判定ステップ912であり、ここでは、遠隔記憶装置がコミット・メッセージに確認応答したか否かが判定される。なお、ローカル/遠隔対がマルチ・ボックス・モードで動作していて、さらにステップ894において遠隔記憶装置のアクティブな領域が空であると判定された場合には、遠隔記憶装置はコミット・メッセージにほとんど即座に確認応答しなければならない。なぜならば、遠隔記憶装置は、そのアクティブな領域がすでに空であるので、サイクル切り換えに対して即座に準備完了となるからである。
判定ステップ912において、遠隔記憶装置がコミット・メッセージに確認応答したと判定されたら直ちに、制御はステップ912からステップ914に移る。ここでは、コピーの一時停止(ステップ899で行なわれた)がクリアされるため、ローカル記憶装置から遠隔記憶装置へのコピーを再開することができる。ステップ914に続いて処理は完了する。
図19を参照すると、フロー・チャート940は、RAが非アクティブなバッファを走査してRDFデータをローカル記憶装置から遠隔記憶装置に送信することと関連して行なわれるステップを例示している。図19のフロー・チャート940は、図6のフロー・チャート200と類似しており、類似するステップには同じ参照番号が付与されている。しかし、フロー・チャート940には、図6のフロー・チャート200にはない2つのさらなるステップ942,944が含まれている。さらなるステップ942,944は、マルチ・ボックス処理を容易にするために用いられる。ステップ212においてデータが送られた後で、制御はステップ212から判定ステップ942に移る。ここでは、送られているデータがローカル記憶装置の非アクティブな領域における最後のデータであるか否かが判定される。最後でない場合には、制御はステップ942からステップ214に移り、処理は、図6のフロー・チャート200に関連して説明したように続く。他方、判定ステップ942において、送られているデータが領域の最後のデータであると判定された場合には、制御はステップ942からステップ944に移り、ローカル記憶装置から遠隔記憶装置に特別なメッセージを送って、最後のデータが送られたことを示す。ステップ944の後に、制御はステップ214に移り、処理は、図6のフロー・チャート200に関連して説明したように続く。いくつかの実施形態では、ステップ942,944は、データを転送するプロセスおよび/またはハードウェア装置とは異なる別個のプロセス(および/または別個のハードウェア装置)によって行なっても良い。
図20を参照すると、フロー・チャート950は、RAが非アクティブなバッファを走査して、RDFデータをローカル記憶装置から遠隔記憶装置に送信することと関連して行なわれるステップを例示している。図20のフロー・チャート950は図13のフロー・チャート500と類似しており、類似するステップには、同じ参照番号が付与されている。しかし、フロー・チャート950には、図13のフロー・チャート500にはないさらなるステップ952が含まれている。さらなるステップ952は、マルチ・ボックス処理を容易にするために用いられ、図19のフロー・チャート940のさらなるステップ944と同様である。判定ステップ524において、ローカル記憶装置から遠隔記憶装置に送るべきスロットはもう残っていないと判定された後に、制御はステップ524からステップ952に移り、ローカル記憶装置から遠隔記憶装置に特別なメッセージを送って、領域に対する最後のデータが送られたことを示す。ステップ952に続いて処理は完了する。
図21を参照すると、フロー・チャート960は、遠隔記憶装置のアクティブな領域が空であるということを示すことに関連して遠隔記憶装置において行なわれるステップを例示する。フロー・チャート960は、図9のフロー・チャート300と同様である。ただし、フロー・チャート960は、遠隔記憶装置のアクティブな領域が復元された後に行なわれる新しいステップ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との間のリンクが依然として動作している場合には、リカバリはホスト982またはホスト702によって行なうことができる。リンクが動作していない場合には、データ・リカバリは、遠隔記憶装置706〜708に結合される第2の代替的なホスト984によって行なうことができる。第2の代替的なホスト984は、遠隔記憶装置706〜708の1つまたは複数と同じ場所に設けても良い。あるいは、第2の代替的なホスト984は、すべての遠隔記憶装置706〜708から離れていても良い。システム全体を通して伝えられるテーブル730に、データ・リカバリとともにアクセスして、マルチ・ボックス・グループのメンバを判定する。
図23を参照すると、フロー・チャート1000は、データ・リカバリ動作と関連して遠隔記憶装置706〜708のそれぞれによって行なわれるステップを例示する。フロー・チャート1000のステップは、信号またはメッセージ(データ・リカバリは必要であることを示す)を受け取ったら、遠隔記憶装置706〜708のそれぞれによって実行しても良い。いくつかの実施形態では、遠隔記憶装置が、たとえば前回の書き込みからの時間の長さなどの従来の基準を用いることで、データ・リカバリが必要であることを自動的に検知することが可能であっても良い。
処理は、第1のステップ1002から始まる。ここでは、遠隔記憶装置が、本明細書の他の場所で説明されている仕方でアクティブな領域を復元することを完了する。ステップ1002の次は判定ステップ1004であり、ここでは、遠隔記憶装置の非アクティブな領域が完了したか(すなわち、すべてのデータがそこに書き込まれたか)否かが判定される。なお、遠隔記憶装置は、非アクティブな領域が完了したか否かの判定を、ステップ944,952でローカル記憶装置が送るメッセージ(前述した)を用いて行なっても良い。すなわち、ステップ944またはステップ952でローカル記憶装置がメッセージを送った場合に、遠隔記憶装置は、そのメッセージの受け取りを用いて、非アクティブな領域が完了したことを確認しても良い。
判定ステップ1004において、遠隔記憶装置の非アクティブな領域が完了していないと判定された場合には、制御は判定ステップ1004からステップ1006に移る。ここでは、非アクティブな領域からのデータが廃棄される。不完了な非アクティブな領域を用いてデータ・リカバリが行なわれることはない。なぜならば、不完了な非アクティブな領域内のデータは、対応するアクティブな領域との整合性がない場合があるからである。したがって、データ・リカバリは、アクティブな領域を用いて、場合によっては、完了した非アクティブな領域を用いて行なわれる。ステップ1006に続いて処理は完了する。
判定ステップ1004において、非アクティブな領域が完了していると判定された場合には、制御はステップ1004からステップ1008に移る。ここでは、遠隔記憶装置が、ホストによる介入を待つ。非アクティブな領域、ホスト702,982,984のうちの1つ(必要に応じて)が、リカバリの実行方法を判定するために、マルチ・ボックス・グループ内のすべての遠隔記憶装置の状態の検査を必要とする場合には。これについては、後に詳細に説明する。
ステップ1008の次は判定ステップ1012であり、ここでは、非アクティブな領域を廃棄するためのコマンドをホストがすべての記憶装置に送ったか否かが判定される。送った場合には、制御はステップ1012からステップ1006に移って、非アクティブな領域を廃棄する。ステップ1006に続いて処理は完了する。
判定ステップ1002において、完了した非アクティブな領域を復元するためのコマンドをホストが送ったと判定された場合には、制御はステップ1012からステップ1014に移る。ここでは、非アクティブな領域が、遠隔記憶装置に対して復元される。遠隔記憶装置において非アクティブな領域を復元することには、非アクティブな領域をアクティブな領域にすることと、アクティブな領域をディスクに書き込むこととが伴う。これについては、本明細書の他の場所で説明されている通りである。ステップ1014に続いて処理は完了する。
図24を参照すると、フロー・チャート1030は、ホスト702,982,984のうちの1つが、各遠隔記憶装置の各非アクティブな領域を廃棄するべきか復元するべきかを判定することと関連して行なわれるステップを例示している。復元を行なっているホスト702,982,984のうちの1つは、遠隔記憶装置706〜708と通信して、それらにコマンドを送り、それらから情報を受け取ることを、ホストが割り当てるタグを用いて行なう。これについては、本明細書の他の場所で説明されている通りである。
処理は、第1のステップ1032から始まる。ここでは、遠隔記憶装置の何れかが、完了した非アクティブな領域を有するか否かが判定される。有していない場合には、行なうべきさらなる処理は存在せず、前述したように、遠隔記憶装置は、ホスト介入を伴うことなく自力で不完了な領域を廃棄する。有する場合には、制御は判定ステップ1032から判定ステップ1034に移る。ここでは、すべての遠隔記憶装置が、完了した非アクティブな領域を有するか否かが、ホストによって判定される。有する場合には、制御は判定ステップ1034から判定ステップ1036に移る。ここでは、すべての遠隔記憶装置のすべての完了した非アクティブな領域が同じタグ番号を有するか否かが、判定される。本明細書の他の場所で説明されているように、タグは、ホストによって割り当てられ、およびデータを識別するためにシステムによって用いられる。識別方法は、同じサイクルに対して同じ値を有するようにホストによってタグが制御されることを除いて、シーケンス番号の場合と同様である。
判定ステップ1036において、すべての遠隔記憶装置が非アクティブな領域に対して同じタグを有すると判定された場合には、制御はステップ1036からステップ1038に移る。ここでは、すべての非アクティブな領域が復元される。ステップ1038を行なうことによって、すべての遠隔記憶装置が同じサイクルからのデータを有することが保証される。ステップ1038に続いて処理は完了する。
判定ステップ1034において、すべての非アクティブな領域が完了してはいないと判定された場合、またはステップ1036において、すべての完了した非アクティブな領域が同じタグを有してはいないと判定された場合には、制御はステップ1042に移る。ここでは、ホストから遠隔記憶装置に、下位のタグ番号を有する完了した非アクティブな領域を復元するためのコマンドが送られる。説明の目的上、タグ番号は増加するため下位のタグ番号の方が古いデータを表わすということが仮定されている。一例として、第1の遠隔記憶装置が、タグ値が3である完了した非アクティブな領域を有し、第2の遠隔記憶装置が、タグ値が4である完了した非アクティブな領域を有していた場合、ステップ1042によって、第1の遠隔記憶装置(第2ではない)がその非アクティブな領域を復元する。ステップ1042の次はステップ1044であり、ここでは、ホストから遠隔記憶装置に、高位のタグ番号を有する完了した非アクティブなバッファ(たとえば、前の例の第2の遠隔記憶装置)を廃棄するコマンドが送られる。ステップ1044に続いて処理は完了する。
ステップ1044を実行した後、各遠隔記憶装置には、残りの遠隔記憶装置に対するデータと同じタグ値に関連するデータが収容されている。したがって、遠隔記憶装置706〜708上の回復されるデータは、整合性のあるものとなるはずである。
本発明を種々の実施形態に関連して開示してきたが、本発明に対する変更は当業者には容易に明らである。したがって本発明の趣旨および範囲は、添付の請求項に述べられている。