(57)【特許請求の範囲】
【請求項１】
コピー元装置のデータ記憶領域とコピー先装置のデータ記憶領域とを関連づけたコピーセッション情報に従って、データをコピー先装置にコピーするストレージ装置であって、
データを記憶する複数のボリュームと、
前記複数のボリュームに対応づけられた複数のコントローラモジュールと、を備え、
各コントローラモジュールは、
複数の領域に分割され、分割された個々の領域は、世代として時系列に管理されるバッファを形成し、かつ複数のコントローラモジュール間の同一世代でまとめられてバッファセットを形成するメモリと、
上位装置からのライト命令に対して、前記複数のボリュームの中の予め対応づけられたボリュームにデータを格納するとともに、前記バッファセットにデータを格納し、バッファセットを形成するいずれかのバッファがフルになるか、あるいはバッファセットへのデータの格納から一定時間が経過すると、バッファセットのデータをコピー先装置に送信する制御部とを有し、
前記制御部は、
コピー先装置へのバッファセットのコピーが完了すると、バッファセットを新しい世代に切り替えるとともに、
一世代前の各コントローラモジュールのライト命令数とコピーセッション数を基に、各コントローラモジュールのコピーセッション数が偏らないように各コントローラモジュールの新たな世代のコピーセッション数を決定し、
上位装置から最初のライト命令を受けたときに、ライト命令のデータを格納するボリュームに対応づけられたコントローラモジュールのコピーセッション数が「１」以上であれば、当該コピーセッションに対応するライト命令のデータを自コントローラモジュールのバッファに格納するとともにコピーセッション数を「１」減算し、コピーセッション数が「１」未満であれば、コピーセッション数が「１」以上の他コントローラモジュールに当該コピーセッションに対応するライト命令のデータをバッファに格納する処理を依頼することを特徴とするストレージ装置。
【請求項２】
一世代前の各コントローラモジュールが受信したライト命令数を該ライト命令数が「０」より大きい最小値のライト命令受信数で除算して、各コントローラモジュールのライト命令数の比率を求め、求められた比率についての全コントローラモジュールの総和で一世代前の各コントローラモジュールのセッション受信数の総和である総セッション数を除算し、除算結果と該各コントローラモジュールのライト命令数の比率の総和をコントローラモジュール数で除算した比率平均とを乗算して各コントローラモジュールのセッション数の上限値を求め、求められた上限値と一世代前の各コントローラモジュールのセッション数を基に、上限値を超えた部分のセッション数を他のコントローラモジュールに振り分けることで、切り替え後の世代の各コントローラモジュールのセッション数を決定することを特徴とする請求項１に記載のストレージ装置。
【請求項３】
データを記憶する複数のボリュームと、複数のボリュームに対応づけられた複数のコントローラモジュールとを備え、各コントローラモジュールは、複数の領域に分割され、分割された個々の領域は、世代として時系列に管理されるバッファを形成し、かつ複数のコントローラモジュール間の同一世代でまとめられてバッファセットを形成するメモリを有し、コピー元装置のボリュームとコピー先装置のボリュームとを関連づけたコピーセッション情報に従ってコピー処理を行うストレージ装置の制御方法であって、
上位装置からのライト命令に対して、前記複数のボリュームの中の予め対応づけられたボリュームにデータを格納するとともに、前記バッファセットにデータを格納し、
バッファセットを形成するいずれかのバッファがフルになるか、あるいはバッファセットへのデータの格納から一定時間が経過すると、バッファセットのデータをコピー先装置に送信し、
コピー先装置へのバッファセットのコピーが完了すると、バッファセットを新しい世代に切り替え、
一世代前の各コントローラモジュールのライト命令数とコピーセッション数を基に、各コントローラモジュールのコピーセッション数が偏らないように各コントローラモジュールの新たな世代のコピーセッション数を決定し、
上位装置から最初のライト命令を受けたときに、ライト命令のデータを格納するボリュームに対応づけられたコントローラモジュールのコピーセッション数が「１」以上であれば、当該コピーセッションに対応するライト命令のデータを自コントローラモジュールのバッファに格納するとともにコピーセッション数を「１」減算し、コピーセッション数が「１」未満であれば、コピーセッション数が「１」以上の他コントローラモジュールに当該コピーセッションに対応するライト命令のデータをバッファに格納する処理を依頼することを特徴とするストレージ装置の制御方法。
【請求項４】
データを記憶する複数のボリュームと、複数のボリュームに対応づけられた複数のコントローラモジュールと、を備え、各コントローラモジュールは、複数の領域に分割され、分割された個々の領域は、世代として時系列に管理されるバッファを形成し、かつ複数のコントローラモジュール間の同一世代でまとめられてバッファセットを形成するメモリを備え、コピー元装置のボリュームとコピー先装置のボリュームとを関連づけたコピーセッション情報に従ってコピー処理を行うストレージ装置の制御プログラムであって、
上位装置からのライト命令に対して、前記複数のボリュームの中の予め対応づけられたボリュームにデータを格納するとともに、前記バッファセットにデータを格納し、
バッファセットを形成するいずれかのバッファがフルになるか、あるいはバッファセットへのデータの格納から一定時間が経過すると、バッファセットのデータをコピー先装置に送信し、
コピー先装置へのバッファセットのコピーが完了すると、バッファセットを新しい世代に切り替え、
一世代前の各コントローラモジュールのライト命令数とコピーセッション数を基に、各コントローラモジュールのコピーセッション数が偏らないように各コントローラモジュールの新たな世代のコピーセッション数を決定し、
上位装置から最初のライト命令を受けたときに、ライト命令のデータを格納するボリュームに対応づけられたコントローラモジュールのコピーセッション数が「１」以上であれば、当該コピーセッションに対応するライト命令のデータを自コントローラモジュールのバッファに格納するとともにコピーセッション数を「１」減算し、コピーセッション数が「１」未満であれば、コピーセッション数が「１」以上の他コントローラモジュールに当該コピーセッションに対応するライト命令のデータをバッファに格納する処理を依頼することをコンピュータに実行させることを特徴とするストレージ装置の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はストレージ装置間でデータをコピーする技術に関する。
【背景技術】
【０００２】
ストレージシステムは、ストレージシステムのデータ転送の性能の向上あるいはデータの保持の信頼性の向上のために、複数のディスクにデータを記録する。ストレージシステムは例えば、サーバのオペレーティングシステム（ＯＳ）がクラッシュする等してディスクへの書き込みが突然停止した場合であっても、復旧後に、停止前に複数のディスクに記録されたデータを復元可能である。ストレージシステムはデータの復元を可能とするために、ディスクへの書き込み順序を制御する。また、ストレージシステムは複数のストレージ装置間でデータのミラーリングを行う場合がある。データのミラーリングにおいて、ミラーリングの元となるデータを格納するボリュームを有するコピー元のストレージ装置とミラーリングされるデータを格納する先のボリュームを有するコピー先のストレージ装置は、ディスクへの書き込み順序を制御することで、データコピー処理途中で異常が発生した場合に、より短期間でデータの復旧を可能とする。以上から、ストレージシステムはデータをコピーする際、書き込み順序と同じ順序でコピーする。書き込みと同期してコピーが行われる同期コピーモードでは、書込み処理とコピー処理はストレージ装置で同じ順序で実行される。しかし、コピー元のストレージ装置とコピー先のストレージ装置が遠隔地にある場合がある。遠隔地間のミラーリングに同期コピーモードを使用することは、伝送路の遅延の影響を受けるため不適当である。よって、ストレージシステムは、遠隔地間でミラーリングを行う場合、遅延の影響を受けにくい非同期コピーモードを使用する。
【０００３】
順序性を保証した非同期コピーモードは、コピー元装置においてホストからライトされたデータをコピー元装置キャッシュ上の専用バッファ（ＲＥＣバッファ）に格納する。専用バッファは順序性を保証した非同期コピー機能に使用する専用のバッファである。分散キャッシュメモリ型のストレージシステムでは、構成の簡単化のため、装置内のいずれかのコントローラモジュールにＲＡＩＤグループやその中のボリュームを割り当て、各コントローラモジュールが割り当てられたボリュームを管理する。このため、専用バッファはコントローラモジュールごとに存在する。各コントローラモジュールの専用バッファは、その領域内が複数の世代に時系列で分割されている。さらに、各コントローラの世代は、非同期コピーでデータ読書きの順序を保証するために、複数のコントローラ間で予めバッファセットという単位にまとめられる。ストレージシステムはバッファセットを単位としたコピー処理を実行する。コピー元装置キャッシュ上の専用バッファの全領域の使用率が一定量を超えた場合（全領域を使用する場合を含む）、あるいはデータ格納開始から一定時間経過した場合にコピー元装置キャッシュ上バッファデータを各コントローラで同期させてまとめてコピー先装置へ送信する。各コントローラで同期させられて転送されてくるデータをすべて完了したコピー先装置は、受信したデータをまとめてコピー先装置記憶媒体へ展開する。
【０００４】
しかし、ストレージ装置間コピーはバッファセットを単位とするため、コピー元のボリュームが一つのコントローラモジュールに集中する場合、あるいはコピー元の一つのコントローラモジュール配下のボリュームに格納されたデータの更新が集中する場合がある。これらの場合、コントローラモジュールのＲＥＣバッファにコピーデータが集中して格納される。このため、他のコントローラモジュールのＲＥＣバッファが空いてある場合でも世代でまとめて送信する。一部の専用バッファにはデータが格納されていないにも関わらずデータを送信するため、専用バッファ領域の無駄が多い。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−２７５５２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明はコピー処理を効率的に実行可能なストレージ装置の提供を目的とする。
【課題を解決するための手段】
【０００７】
コピー元装置のデータ記憶領域とコピー先装置のデータ記憶領域とを関連づけたコピーセッション情報に従って、データをコピー先装置にコピーするストレージ装置は、データを記憶する複数のボリュームと、複数のボリュームに対応づけられた複数のコントローラモジュールと、を備え、各コントローラモジュールは、複数の領域に分割され、分割された個々の領域は、世代として時系列に管理されるバッファを形成し、かつ複数のコントローラモジュール間の同一世代でまとめられてバッファセットを形成するメモリと、上位装置からのライト命令に対して、複数のボリュームの中の予め対応づけられたボリュームにデータを格納するとともに、バッファセットにデータを格納し、バッファセットを形成するいずれかのバッファがフルになるか、あるいはバッファセットへのデータの格納から一定時間が経過すると、バッファセットのデータをコピー先装置に送信する制御部とを有し、制御部は、コピー先装置へのバッファセットのコピーが完了すると、バッファセットを新しい世代に切り替えるとともに、一世代前の各コントローラモジュールのライト命令数とコピーセッション数を基に、各コントローラモジュールのコピーセッション数が偏らないように各コントローラモジュールの新たな世代のコピーセッション数を決定し、上位装置から最初のライト命令を受けたときに、ライト命令のデータを格納するボリュームに対応づけられたコントローラモジュールのコピーセッション数が「１」以上であれば、当該コピーセッションに対応するライト命令のデータを自コントローラモジュールのバッファに格納するとともにコピーセッション数を「１」減算し、コピーセッション数が「１」未満であれば、コピーセッション数が「１」以上の他コントローラモジュールに当該コピーセッションに対応するライト命令のデータをバッファに格納する処理を依頼する構成である。
【発明の効果】
【０００８】
開示のストレージ装置は、ストレージ装置間コピーで使用するバッファの使用量の偏りを無くすようにコントローラの担当ボリュームを変更するため、各コントローラのバッファを無駄なく使用できる。この結果、開示のストレージ装置はコピー処理を効率的に実行可能になる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施例のストレージシステムである。
【図２】図２は、本実施例のコピー元ストレージ装置２０の各ＣＭが管理するＲＥＣバッファの説明図である。
【図３】図３は、本実施例のバッファインデックステーブルである。
【図４】図４は、本実施例のセッション管理テーブルである。
【図５】図５は、本実施例のバッファセットテーブルである。
【図６】図６は、本実施例のＲＥＣバッファにデータを格納する処理のフローチャートである。
【図７】図７は、本実施例のバッファセット切り替え時の処理のフローチャートである。
【図８】図８は、本実施例のＣＭ０１に送信するセッション振り分け情報の例である。
【図９】図９は、本実施例のＣＭ０２に送信するセッション振り分け情報の例である。
【図１０】図１０は、本実施例のＣＭ０３に送信するセッション振り分け情報の例である。
【図１１】図１１は、本実施例のＣＭ０４に送信するセッション振り分け情報の例である。
【図１２】図１２は、セッション割り当て処理のフローチャートである。
【図１３】図１３は、本実施例の各ＣＭから取得したＩ／Ｏ数の例である
【図１４】図１４は、本実施例の算出したＩ／Ｏ比の例である。
【図１５】図１５は、本実施例の各ＣＭのセッション数の一例である。
【図１６】図１６は、本実施例の各セッションの割り当ての上限数の例である。
【図１７】図１７は、本実施例の確定したセッション振り分け数の例である。
【図１８】図１８は、本実施例の格納先ＲＥＣバッファ決定処理のフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の一形態について、図面を参照して説明する。
【００１１】
［ストレージシステム］
図１は、本実施例のストレージシステムである。
【００１２】
ストレージシステム１は、ホスト装置１０とストレージ装置２０とストレージ装置３０とを含む。本実施例では、ホスト装置１０はストレージ装置２０にストレージエリアネットワーク（ＳＡＮ）等のネットワークで接続し、ストレージ装置２０はストレージ装置３０にＷＡＮ等のネットワーク４０を介して接続する。ストレージ装置２０とストレージ装置３０は、例えば、互いに遠隔地にあるものとする。本実施例では、ホスト装置１０がストレージ装置２０にデータを書込むものとし、ストレージ装置２０のデータをストレージ装置３０にコピーするものとする。つまり、ストレージ装置２０がコピー処理の対象の元となるデータを有するコピー元装置であり、ストレージ装置３０がコピー処理によってデータを新たに格納するコピー先装置となる。以降の説明では、コピー処理の対象のデータをコピーデータとも言う。
【００１３】
ホスト装置１０はストレージ装置２０に対してデータの読出し、あるいはデータの書込みに関する命令を送信することにより、ストレージ装置２０からのデータの読出しあるいはデータの書込みを行う。
【００１４】
［ストレージ装置］
次に、ストレージ装置２０およびストレージ装置３０について説明する。なお、本実施例では説明の便宜上、ストレージ装置２０とストレージ装置３０は同じボリューム構成を有するとする。以下ストレージ装置２０について説明し、ストレージ装置２０の同じ機能を有するモジュール、およびストレージ装置３０のストレージ装置２０と同様な部分については説明を省略する。また、以下の説明においてコピー元のストレージ装置２０を単にコピー元、コピー先のストレージ装置３０を単にコピー先という場合もある。
【００１５】
本実施例のストレージ装置２０およびストレージ装置３０は、コントローラモジュール毎にキャッシュメモリを分散して有する分散キャッシュメモリ形である。このため、データが格納されるディスク装置の管理単位であるボリュームは、ストレージ装置内のいずれかのコントローラモジュール（以下ＣＭとする）に属するように予め設定されているものとする。なお、ボリュームは、各ディスク装置の記憶領域をまとめること、各ボリュームからＲＡＩＤを構成すること、ＲＡＩＤを組み合わせるなどの物理的に独立な２つ以上のボリュームを組み合わせることなどによって定義された論理的に存在する論理ボリュームも含む。なお、ストレージ装置２０からストレージ装置３０へのコピー処理は、コピー元とコピー先のストレージ装置が異なるＲＡＩＤ構成であっても、コピー先のストレージ装置３０にコピー対象のデータを格納可能な領域が確保できれば、実施可能である。
【００１６】
ストレージ装置２０は、複数のコントローラモジュールＣＭ０１、ＣＭ０２、ＣＭ０３、ＣＭ０４を有する。ディスク２６０、２７０、２８０、および２９０はデータを格納する例えば磁気ディスク装置である。バックエンドルーター（ＢＲＴ）２４０は、各ディスク（２６０、２７０、２８０、および２９０）と各コントローラ（ＣＭ０１、ＣＭ０２、ＣＭ０３、およびＣＭ０４）間を接続する接続部である。各コントローラは各ディスクに対してデータのリード（ＲＥＡＤ）、ライト（ＷＲＩＴＥ）を行う。可能である。
【００１７】
ストレージ装置２０は、ストレージ装置２０内の任意の一つのＣＭをマスタＣＭとして機能させる。以降の説明では、ストレージ装置２０の各ＣＭを管理するＣＭをマスタＣＭとし、マスタＣＭ以外のＣＭを単にＣＭとする。マスタＣＭは通常のＣＭとしての機能と、他のＣＭを管理する機能を有する。本実施例では、ＣＭ０１をマスタＣＭとする。マスタＣＭは世代交代時、ストレージ装置２０のＣＭ０１、ＣＭ０２、ＣＭ０３およびＣＭ０４からそれぞれが担当するＲＥＣバッファのＩ／Ｏ情報を取得して次世代で各ＣＭが担当するボリュームを決定する処理を実行する。
【００１８】
ＣＭ０１（ＣＭ０２、ＣＭ０３、およびＣＭ０４）は、チャネルアダプタ（ＣＡ）２０１（２１１、２２１、２３１）、リモートアダプタ（ＲＡ）２０２（２１２、２２２、２３２）、メモリ２０４（２１４、２２４、２３４）、ＣＰＵ２０３（２１３、２２３、２３３）、デバイスアダプタ（ＤＡ）２０５、２０６（２１５、２１６、２２５、２２６、２３５、２３６）を有する。ＣＡ２０１は、ホスト１０とストレージ装置２０間を接続するためのインターフェースである。ＲＡ２０２は、ストレージ装置３０のＲＡ３０２に接続するためのインターフェースである。各ＲＡは、例えば、ストレージ装置間コピー処理時にデータを転送するために使用する。ＤＡはＢＲＴ２４０とＣＭ間を接続するためのインターフェースである。
【００１９】
メモリ２０４はＲＥＣバッファ、ＢＩＴテーブル、バッファセット管理テーブル、セッション管理テーブルを記憶する。また、ＣＰＵ２０３が動作するための制御プログラムが展開される領域である。
【００２０】
ＣＰＵ２０３は、例えば、ディスク装置への読み書きを制御するディスク制御、ホスト装置１０に対する情報の送受信を制御するＣＡ制御、メモリを管理するキャッシュメモリ制御、コピー処理を管理するコピー処理制御、他ＣＭとへのコピー処理依頼等、ＣＭ０１の全体を制御する。
【００２１】
本実施例においてコピー先となるストレージ装置３０のコントローラモジュールＣＭ１１、ＣＭ１２、ＣＭ１３、ＣＭ１４、ＢＲＴ３４０、ディスク３５０、３６０、３７０、３８０については説明を省略する。また各ＣＭ（ＣＭ１１、ＣＭ１２、ＣＭ１３、ＣＭ１４）が有するチャネルアダプタ（ＣＡ）３０１（３１１、３２１、３３１）、リモートアダプタ（ＲＡ）３０２（３１２、３２２、３３２）、メモリ３０４（３１４、３２４、３３４）、ＣＰＵ３０３（３１３、３２３、３３３）、ファイバチャネル（ＦＣ）３０５、３０６（３１５、３１６、３２５、３２６、３３５、３３６）については、説明を省略する。
【００２２】
Ｉ／Ｏデータは、ホスト装置１０から受信した読み書きの対象のデータである。Ｉ／Ｏデータはデータ本体とコピーを制御するためのコピー制御情報を含むコピー制御情報はコピー元のアドレス、コピー先のアドレス等を含む。
【００２３】
データ本体はＲＥＣバッファに格納され、コピー制御情報はＢＩＴテーブルに格納される。
【００２４】
ストレージシステム１０は、データの読み書き処理の順序を保証する場合、コピー対象のデータをコピー元ストレージ装置２０のディスク装置からコピー先ストレージ装置３０のディスク装置へ転送する際に、ＲＥＣバッファを使用する。例えば以下の手順でコピー元からコピー先へデータをコピーする。まず、コピー対象のボリュームを管理するＣＭはディスク装置からＲＥＣバッファにデータを格納する。コピー元は、バッファセットの処理対象世代のいずれかのＲＥＣバッファが一杯になるか、コピーデータのＲＥＣバッファへの格納時間が一定時間経過した後に、バッファセットのデータをまとめてコピー先ストレージ装置３０のＲＥＣバッファに転送する。コピー先ストレージ装置３０は、受信したコピーデータをＲＥＣバッファに展開する。コピー先ストレージ装置３０は、全てのコピーデータを専用バッファに格納し、その後、コピー先ストレージ装置３０の記録媒体１２へ全てのコピーデータを展開する。コピー先ストレージ装置３０はコピーデータの展開が完了すると、コピー元ストレージ装置２０へ展開完了を通知する。その後、コピー元ストレージ装置２０はＲＥＣバッファのコピーデータを開放する。
【００２５】
次に、メモリに格納されるＲＥＣバッファ、ＢＩＴ管理テーブル、バッファセット管理テーブル等の情報について説明する。
【００２６】
［ＲＥＣバッファ］
まず、ＲＥＣバッファ（専用バッファ）について説明する。ＲＥＣバッファは、各ＣＭが有しており、ストレージ装置間コピー（Ｒｅｍｏｔｅ  Ｅｑｕｉｖａｌｅｎｔ  Ｃｏｐｙ（ＲＥＣ））処理時にコピー処理に必要な情報を格納するための記憶領域である。本実施例では、ＲＥＣバッファにコピー対象のデータ本体が格納される。
【００２７】
図２は、コピー元ストレージ装置２０の各ＣＭが管理するＲＥＣバッファの説明図である。図２のＣＭ＃０１、ＣＭ＃０２、ＣＭ＃０３、ＣＭ＃０４はそれぞれＣＭ０１のＲＥＣバッファ領域、ＣＭ０１のＲＥＣバッファ領域、ＣＭ０３のＲＥＣバッファ領域、ＣＭ０４のＲＥＣバッファ領域を示す。各ＣＭは、データの読み書き処理の順序性を保証するため、ＲＥＣバッファを複数の領域に分割して管理する。分割した個々の領域は世代として管理する。図２では、ＲＥＣバッファは、世代１、世代２、世代３、世代４、および未使用の４つ世代、合計で８つの世代に分割されている。各世代は時系列で管理される。各ＣＭのＲＥＣバッファは同じ数に分割されているものとする。各世代はストレージ装置間のコピー処理の完了後に開放される。開放とは、当該世代にデータを格納可能な状態であることである。世代内はさらに複数の固定長のバッファに分割される。ＣＭは例えば固定長のバッファに格納可能なようにデータを適宜分割して格納する。
【００２８】
３０１、３０２、３０３、３０４、および３０５はボリュームである。各ボリュームが属するＣＭは予め定義されている。ストレージ装置間コピー処理時、原則として、コピー元の各ＣＭは、それぞれのＣＭが担当するボリュームのデータをそれぞれのＣＭのＲＥＣバッファに読み出す。
【００２９】
例えば、図２の場合、ボリューム３０１、３０２、３０３はＣＭ０１に属する。従ってい、ストレージ装置間コピー処理時、ＣＭ０１は、ボリューム３０１、３０２、３０３のいずれかに対する書込み命令（Ｗｒｉｔｅ  Ｉ／Ｏ）をホスト１０から受け付けると、書込み命令に対応するＲＥＣバッファの現在の格納対象のバッファ領域に書込み命令（Ｗｒｉｔｅ  Ｉ／Ｏ）に対応するデータを格納する。
【００３０】
また、例えば、図２において、ボリューム３０１、３０２、３０３、３０４、３０５以外の図示しないボリュームに対してホスト１０から書き込み命令がないとする。この場合でかつ後述する処理を適用しない場合、ＣＭ０２およびＣＭ０４は、それぞれのＣＭが管理するＲＥＣバッファにはデータを展開しない。各ＣＭがそれぞれＲＥＣバッファを管理する。
【００３１】
各ＣＭのＲＥＣバッファをまとめて管理するため、ストレージ装置間コピーは、バッファセット３０６を単位として実行する。図２では、破線で囲ったバッファの組が一つのバッファセットになる。バッファセット３０６は、各ＣＭのＲＥＣバッファを時系列に分割した世代を複数のＣＭ間でまとめたデータの集合である。バッファセットを単位としてコピー処理を実行することにより、バッファセットに含まれる複数のＣＭが担当するＲＥＣバッファでデータ書込みの順序性を保つことができる。
【００３２】
図２では、ＣＭ０２とＣＭ０４のバッファセット３０６に属する世代は、データが格納されていないにも関わらずバッファセットとして使用される。一方、ＣＭ０１は書込み命令を受けたボリューム３０１、３０２、３０３を担当しているため、ＲＥＣバッファに格納すべきデータが多い。このため、ＣＭ０１のＲＥＣバッファの世代の領域は一杯になり易い。ストレージ装置２０は、バッファセットを構成するいずれかのＲＥＣバッファが一杯になると、格納対象バッファの世代を切り替えて、次の世代にデータを格納する。図２では、ストレージ装置２０は、現状の世代４のＲＥＣバッファが一杯になると未使用のＲＥＣバッファから世代５を作成する。またストレージ装置２０は世代４のバッファセットをストレージ装置３０への転送の対象にする。
【００３３】
［ＢＩＴテーブル］
次に、バッファインデックステーブル（以降、ＢＩＴテーブルとする）について説明する。図３はバッファインデックステーブルである。各ＣＭは、それぞれＢＩＴテーブルを有する。ＢＩＴテーブルは、各ＣＭの世代内の個々のバッファに格納されたデータについて、コピー元からコピー先にコピーするための情報を格納するテーブルである。ＢＩＴテーブルの情報は、バッファセットテーブルに格納されたＣＭＩＤおよびＢｉｔＩＤにより特定することができる。
【００３４】
ストレージ装置間コピーでは、コピー元はＲＥＣバッファのコピーデータとＢＩＴテーブルの情報とをコピー先に送信する。この結果、この結果コピー先はバッファを適切な領域に格納することができる。
【００３５】
ＢＩＴテーブルは、バッファＩＤ、ステータス、サイズ，バッファアドレス、格納済Ｉ／Ｏ数を含む。バッファＩＤは管理対象のバッファを特定するための識別情報である。ステータスは、格納中、切り出し中、切り出し完了、転送中などの当該バッファの状態を特定する情報である。サイズは、当該バッファのサイズを特定するための情報である。バッファアドレスは、コピー元、コピー先のボリューム識別こやボリューム内の論理アドレスなどのバッファに含まれるデータの実アドレスを特定するための情報である。
【００３６】
格納済Ｉ／Ｏ数は、ＲＥＣバッファの現在の処理対象の世代にＷｒｉｔｅＩ／Ｏのデータをコピーした数を示す情報である。初期値は「０」である。バッファセットの世代が切り替えられたとき、各ＣＭは切り替えられたバッファに対応する格納済Ｉ／Ｏ数をマスタに送信する。
【００３７】
［セッション管理テーブル］
ここで、ＲＥＣのセッションを管理するセッション管理テーブルについて説明する。セッションは、コピー元とコピー先とを関連づけた情報である。図４はセッション管理テーブルである。各ＣＭはそれぞれセッション管理テーブルを記憶する。例えば、管理者は、コピー先とコピー元のボリュームの組合せをコピー開始前に設定する。各ＣＭはセッション管理テーブルとして組合せの情報をメモリに保持する。
【００３８】
セッション管理テーブルは、コピーセッションに関連する情報を含むため、セッション毎に存在する。コピーセッションに関連する情報は、セッションＩＤ、セッション種別、コピー元ボリューム、コピー先ボリューム、コピー範囲、格納先ＣＭ等である。セッションＩＤはセッション毎に存在する固有の識別情報である。セッション種別はリモートコピーや、ローカルコピーの種別を示す情報である。コピー元ボリュームはコピー元のボリューム番号やコピー元の先頭の論理アドレス（ＬＢＡ）を含む情報である。コピー先ボリュームコピー先のボリューム番号やコピー先の先頭の論理アドレス（ＬＢＡ）を含む情報である。コピー範囲は、コピー処理の範囲を示すブロック数を含む情報である。
【００３９】
格納先ＣＭはセッションの格納先のＲＥＣバッファを管理するＣＭを特定する情報である。ＲＥＣバッファは複数の世代に分割されて管理されているため、その分割数に対応する数のメンバを有する。本実施例ではＲＥＣバッファは８分割される。セッション管理テーブルの格納先ＣＭは８個分のメンバとなる。各ＣＭは、世代の交代時に、新たに使用するときにそれぞれのメンバを初期化する。各ＣＭは、当該世代で格納先のＲＥＣバッファが未決定のセッションに関するコピーデータのＷｒｉｔｅＩ／Ｏを受付けた場合、格納先のＲＥＣバッファを決定し、決定したＲＥＣバッファを管理するＣＭを格納先ＣＭとして設定する。格納先ＣＭは、例えば、８分割されたＲＥＣバッファ内の第一の領域に対する格納先ＣＭとして「格納先ＣＭ情報「０」」、８分割されたＲＥＣバッファ内の第二の領域に対する格納先ＣＭとして「格納先ＣＭ情報「１」」、以下同様に「格納先ＣＭ情報「２」」、、、「格納先ＣＭ情報「７」」となる。
【００４０】
［バッファセットテーブル］
次に、マスタＣＭが管理するバッファセットテーブルについて説明する。図５は、バッファセットテーブルである。バッファセットテーブルはバッファセットを管理し、特にコピー元とコピー先のＲＥＣバッファの組合せを管理するためのテーブルである。バッファセットは各ＣＭのＲＥＣバッファの集まりであり、バッファセットを構成するＲＥＣバッファを全て含む。
【００４１】
本実施例ではＲＥＣバッファは８つの世代に分割されているため、各ＣＭは世代数に相当する８個のバッファセットテーブルを有する。バッファセットの世代は時系列で管理される。
【００４２】
バッファセットテーブルは、バッファセットに含まれるＣＭ毎に、ＣＭＩＤ、ＢｉｔＩＤ、セッション割り当て数、Ｉ／Ｏ数の情報、次格納先ＣＭ情報を含む。
【００４３】
ＣＭＩＤはバッファを管理するＣＭを識別する情報である。ＢｉｔＩＤはバッファを管理するＩＤである。
【００４４】
セッション割り当て数は新規にバッファセットを作成するとき、当該ＣＭに対して設定される。各ＣＭは、当該世代で始めてのＷｒｉｔｅＩ／Ｏ処理のときに本メンバ（他のＣＭも参照）と「次格納先ＣＭ情報」を参照して、データ格納先のＣＭバッファを決定する。Ｉ／Ｏ数はバッファセットを切り替えるとき、各ＣＭから通知される１世代前のバッファに格納したＩ／Ｏ数である。次格納先ＣＭ情報は、当該ＣＭのセッションに対して、その世代で初回のＷｒｉｔｅＩ／Ｏのときに格納するＲＥＣバッファを決定するための情報である。マスタＣＭが新しい世代に関するバッファセットテーブルを作成した時点では、セッション割り当て数には初期値（無効値）が設定される。当該ＣＭのセッションに対して、その世代で初回のＷｒｉｔｅＩ／Ｏが処理されるときに更新される。
【００４５】
次に、ストレージ装置間のコピー処理を説明する。
【００４６】
［ＲＥＣバッファへのデータ格納処理］
まず、図６のＲＥＣバッファにデータを格納する処理のフローチャートに沿って、ＲＥＣバッファへのデータ格納処理を説明する。ＣＭ０１乃至ＣＭ０４の何れかのＣＭは、ＲＥＣバッファへのデータ格納処理を実行する。
【００４７】
ＣＭは、ホスト１０から書込み命令（ＷｒｉｔｅＩ／Ｏ）を受け付ける（Ｓ０１）。ＷｒｉｔｅＩ／Ｏは、書込み先のボリュームのアドレス情報、サイズ情報、データ本体などの情報を含む。
【００４８】
ＣＭは、ＷｒｉｔｅＩ／Ｏを格納するＲＥＣバッファを決定する（Ｓ０２）。なお、Ｓ０２のＲＥＣバッファの決定処理の詳細は後述する。
【００４９】
格納先のＲＥＣバッファの決定後、Ｓ０１で受け付けたＷｒｉｔｅＩ／Ｏで特定されるボリュームのアドレス情報に対応するディスク装置にデータ本体を書込む（Ｓ０３）。なお、書込みはディスク装置ではなく、データを一時的に格納するためのキャッシュメモリへの書込みでもよい。
【００５０】
Ｓ０３のデータ本体の書込み後、ＣＭは書込み命令に対する応答をホスト１０に出力する（Ｓ０４）。次に、ＣＭは、Ｓ０２で決定したＲＥＣバッファに、書込み処理によって書き込まれたデータを展開する（Ｓ０５）。なお、Ｓ０４とＳ０５の処理は同期する必要はない。
【００５１】
Ｓ０５のＲＥＣバッファへの書込み処理の後、データが書込まれたＲＥＣバッファを管理するＣＭは、ＢＩＴ管理テーブルのＩ／Ｏ数を一つインクリメントする（Ｓ０６）。また、データが書込まれたＲＥＣバッファを管理するＣＭは、展開したデータに対応するように、ＢＩＴテーブルにバッファＩＤ、ステータス、サイズ，バッファアドレス、格納済Ｉ／Ｏ数を書き込む。
［他ＣＭへの委託］
ここで、Ｓ０５のデータの展開について説明する。本実施例では、各ＣＭは、自ＣＭが管理するＲＥＣバッファにデータを展開するだけでなく、他ＣＭが管理するＲＥＣバッファにデータを展開する場合がある。
【００５２】
自ＣＭが、他のＣＭの管理するＲＥＣバッファにコピーデータを展開する場合の処理の一例を説明する。まず、自ＣＭは他ＣＭ（データを展開するＲＥＣバッファを管理するＣＭ）に対して、データを格納するのに十分な領域を確保することが可能か否かについて問い合わせる。自ＣＭは他ＣＭに、例えばデータのサイズを送信することで問い合わせる。他ＣＭは問い合わせに含まれるサイズの領域を確保する。他ＣＭはサイズに相当する領域をＲＥＣバッファに確保したことを自ＣＭに対して応答する。自ＣＭはコピーデータを他ＣＭに送信する。他ＣＭは自ＣＭから受信したコピーデータをＲＥＣバッファに格納する。
【００５３】
自ＣＭが担当するボリュームに対するデータを自ＣＭのＲＥＣバッファに展開する場合、ＲＥＣバッファの領域を確保して、当該領域にデータを展開する。よって、自ＣＭのＲＥＣバッファにデータを展開する処理は、自ＣＭが担当するボリュームに関するコピーデータを他ＣＭのＲＥＣバッファに展開する処理よりも簡単である。
［バッファセット切り替え処理］
次に、図７のバッファセット切り替え時の処理のフローチャートに沿って、バッファセット切り替え時の処理を説明する。バッファセット切り替え時では、マスタＣＭ（ＣＭ０１）と他のＣＭ（ＣＭ０２、ＣＭ０３、ＣＭ０４）間で情報の送受信が発生する。マスタＣＭは、バッファセットの切り替え時に、次世代において各ＣＭの担当するセッションの数を決定する。
【００５４】
本実施例では、世代交代のときにＣＭが担当するセッションを変更する。世代途中で一つのセッションに属する個々のコピーデータを複数のＲＥＣバッファに格納する場合、コピー先の各ＣＭはＲＥＣバッファ間でＩ／Ｏの順序の判定処理が必要になり、効率が悪い。
【００５５】
マスタＣＭはバッファセットの世代の切り替え依頼を受け付ける（Ｓ１１）。バッファセットの世代は、現在の世代になって所定時間が経過した場合、あるいは、ＣＭ０１乃至ＣＭ０４のいずれかのＲＥＣバッファの現在の世代の記憶領域がコピーデータで一杯になった場合に切り替える。本実施例では、バッファセットの世代の切り替え依頼は、マスタＣＭが所定時間経過の検出時に受け付ける場合や、あるいはＣＭ０１乃至ＣＭ０４から記憶領域がコピーデータで一杯になった通知により受け付ける場合がある。
【００５６】
マスタＣＭはＳ１１で世代の切り替え依頼を受け付けると、データのＲＥＣバッファへの格納処理の停止を各ＣＭ（ＣＭ０１、ＣＭ０２、ＣＭ０３、ＣＭ０４）に依頼する（Ｓ１２）。このとき、マスタＣＭは、バッファセットを構成する全てのＣＭに、ＲＥＣバッファへのコピーデータの格納処理の停止命令を送信する。
【００５７】
ここで、他のＣＭの動作を説明する。マスタＣＭによるバッファセット切り替え処理の実行前において、各ＣＭ（ＣＭ０１、ＣＭ０２、ＣＭ０３、ＣＭ０４）はそれぞれのＲＥＣバッファにデータを格納する処理が可能な状態である。他のＣＭ（ＣＭ０２、ＣＭ０３、ＣＭ０４）は、ホスト装置１０からのＷｒｉｔｅＩ／Ｏに応じて、ＲＥＣバッファへのデータ格納を実行する（Ｓ２１）。Ｓ１２においてマスタＣＭが格納処理の停止依頼を各ＣＭ（ＣＭ０２、ＣＭ０３、ＣＭ０４）に依頼する。このとき、各ＣＭはマスタＣＭからの格納処理の停止依頼を取得する。
【００５８】
各ＣＭは格納停止依頼を検出した否かを判別する（Ｓ２２）。各ＣＭは格納停止依頼を検出していない場合（Ｓ２２：ＮＯ）、格納処理を継続して実行する。各ＣＭは格納停止依頼を検出した場合（Ｓ２２：ＹＥＳ）、現在の世代への新規のデータの格納を停止する（Ｓ２３）。各ＣＭは、Ｓ２３の格納処理の停止後、マスタＣＭに格納停止の応答および各ＣＭの格納対象であったＲＥＣバッファの現在の世代に格納したデータのＩ／Ｏ数をＢＩＴテーブルから読み出して、送信する。
【００５９】
一方、マスタＣＭは、他のＣＭ（ＣＭ０２、ＣＭ０３、ＣＭ０４）と同様にＣＭ０１として、Ｓ１３とＳ１４の処理を実行する。マスタＣＭ（ＣＭ０１）は格納停止依頼を検出した否かを判別する（Ｓ１３）。マスタＣＭ（ＣＭ０１）は格納停止依頼を検出していない場合（Ｓ１３：ＮＯ）、継続して格納停止依頼の取得を待つ。マスタＣＭ（ＣＭ０１）は格納停止依頼を検出した場合（Ｓ１３：ＹＥＳ）、現在の世代への新規のデータの格納を停止する（Ｓ１４）。。
【００６０】
マスタＣＭは、新しい世代のバッファセット管理テーブルの各ＣＭのＩ／Ｏ数に、各ＣＭから取得した直前まで格納対象であった世代のＩ／Ｏ数を記録する（Ｓ１５）。マスタＣＭは、格納停止依頼に対する応答を各ＣＭから取得したか否かを判定する（Ｓ１６）。マスタＣＭは、格納停止依頼に対する応答を各ＣＭから取得していない場合（Ｓ１６：ＮＯ）、各ＣＭからの応答があるまで待つ。一方、マスタＣＭは、格納停止依頼に対する応答を各ＣＭから取得した場合（Ｓ１６：ＹＥＳ）、新しい世代のバッファセット（新規バッファセット）用に各ＣＭのセッション数の割り当てを計算する（Ｓ１７）。セッション数の割り当て処理については後述する。
【００６１】
マスタＣＭは、各ＣＭに新規バッファセットへの切り替え指示を送信する（Ｓ１８）。なお、マスタＣＭはＳ１８の切り替え指示とともに更新したセッション振り分け情報を含むバッファセットテーブルを各ＣＭに送信する。図８乃至図１１は、それぞれＣＭ０１乃至ＣＭ０４に送信するセッション振り分け情報の例である。図９において、ＣＭ０２がＣＭ０１のＲＥＣバッファに格納するセッションは「６」であり、ＣＭ０２がＣＭ０２のＲＥＣバッファに格納するセッションは「１４」であることを示す。
【００６２】
ここで、他のＣＭの動作を説明する。Ｓ１８において、マスタＣＭは各ＣＭに新規バッファセットへの切り替え指示を送信する。このとき、各ＣＭは受信した切り替え指示に応じて世代の切り替え処理を実行する（Ｓ２４）。各ＣＭは、マスタＣＭから送信されたセッション割り当て情報を記憶する。一方、マスタＣＭは他のＣＭ（ＣＭ０２、ＣＭ０３、ＣＭ０４）と同様にＣＭ０１として、世代の切り替え処理を実行する（Ｓ１９）。マスタＣＭ（ＣＭ０１）は、セッション割り当て情報を記憶する。各ＣＭは、世代の切り替え依頼に対する応答をマスタＣＭに送信する。
【００６３】
マスタＣＭは、世代の切り替え依頼に対する応答を各ＣＭから取得したか否かを判定する（Ｓ２０）。マスタＣＭは、世代の切り替え依頼に対する応答を各ＣＭから取得していない場合（Ｓ２０：ＮＯ）、各ＣＭからの応答があるまで待つ。マスタＣＭは、世代の切り替え依頼に対する応答を各ＣＭから取得した場合（Ｓ２０：ＹＥＳ）、切り替え処理を終了する。各ＣＭは、新世代の領域にコピーデータを格納する処理を再開する。
［セッション数割り当て処理］
次に、図１２のセッション割り当て処理のフローチャートに沿って、Ｓ１７の新規バッファセットの各ＣＭのＲＥＣバッファに対するセッション数の割り当て処理について説明する。本実施例では、セッションの単位で担当ＣＭの割り振りを決定する。新規バッファセットのセッション数の割り当ては、直前に格納対象であったバッファセット（１世代前のバッファセット）のデータ格納の状況に基づき決定する。マスタＣＭは各ＣＭから取得したＩ／Ｏ数からセッション数の割り当てを決定する。
【００６４】
Ｉ／Ｏ数からセッション数の割り当てを決定するのは、Ｉ／Ｏ数とセッション数は比例関係にあると想定可能であるためである。また、世代交代時に行うため、直前のＲＥＣバッファへのデータの格納状況に応じて、コントローラの担当ボリュームの配分が可能になる。  マスタＣＭは１世代前のバッファセットから、各ＣＭのＩ／Ｏの比を算出する（Ｓ３１）。図１３は各ＣＭから取得したＩ／Ｏ数を示す。図１３では、ＣＭ０１のＩ／Ｏ数は「０」、ＣＭ０２のＩ／Ｏ数は「５００」、ＣＭ０３のＩ／Ｏ数は「２００」、ＣＭ０４のＩ／Ｏ数は「３００」である。ここでマスタＣＭは、例えば、「０」より大きいＩ／Ｏ数の中で最小のＩ／Ｏ数を検出する。図１３ではＣＭ０３の「２００」が該当する。マスタＣＭは検出したＩ／Ｏ数で他のＣＭのＩ／Ｏ数を割ることによってＩ／Ｏ比を算出する。なお、小数点未満の値は繰り上がるとする。図１４は算出したＩ／Ｏ比である。
【００６５】
マスタＣＭはＳ３１で算出した各ＣＭのＩ／Ｏ比の総和を求め、バッファセットを構成するＣＭ数で割ることで、ＣＭあたりのＩ／Ｏ数の平均を算出する（Ｓ３２）。例えば、図１４の各ＣＭのＩ／Ｏ比の総和は「０」＋「３」＋「１」＋「２」＝「６」になる。マスタＣＭは、求めた総和を、バッファセットを構成するＣＭ数「４」で割る。なお、小数点未満の値は繰り上がるとする。この結果、Ｉ／Ｏ比の平均は「２」となる。
【００６６】
次に、マスタＣＭは、総セッション数をＩ／Ｏ比の総和で除算して１つのＩ／Ｏ比あたりのセッション数を算出する（Ｓ３３）。マスタＣＭは、各ＣＭのセッション数をセッション管理テーブルから取得する。図１５は各ＣＭのセッション数の一例である。図１５の各ＣＭのセッションの総和は「０」＋「２０」＋「８」＋「１０」＝「３８」になる。マスタＣＭは総セッション数「３８」をＩ／Ｏ比の総和「６」で割り、１つのＩ／Ｏ比あたりのセッション数「７」を求める。
【００６７】
マスタＣＭは、Ｓ３３で算出した１つのＩ／Ｏ比あたりのセッション数の値とＳ３２で算出した各ＣＭのＩ／Ｏ比の平均とを乗算して、各ＣＭのセッションの割り当て数を算出する（Ｓ３４）。図１６は各セッションの割り当ての上限数である。
【００６８】
次に、マスタＣＭは、セッションの割り当てが初回の処理か否かを判別する（Ｓ３５）。マスタＣＭは、セッションの割り当てが初回の処理である場合（Ｓ３５：ＹＥＳ）、各ＣＭの担当セッション数をセッションの割り当て情報に使用する（Ｓ３６）。マスタＣＭは、セッションの割り当てが２回目以降である場合（Ｓ３５：ＮＯ）、前回の世代で使用していたセッション割り当て情報を使用する（Ｓ３７）。
【００６９】
次にマスタＣＭは、Ｓ３４で決定した各ＣＭのセッション割り当て数の平均と、Ｓ３５乃至Ｓ３７で決定した現在の直前世代の割り当て情報から、新規世代の各ＲＥＣバッファに対する割り当てセッション数を決定する（Ｓ３８）。以下で一例を説明する。例えば、各ＣＭのセッション割り当て数の平均は「１４」である。初回の割り当て処理であるとすると、マスタＣＭは、セッション割り当て情報として図１５の各ＣＭの担当セッション数を使用する。マスタＣＭは、セッション割り当ての上限となる「１４」を超えないように各ＣＭにセッションを振り分ける。図１５の各ＣＭの担当セッション数によれば、ＣＭ０２のセッション数は「２０」であり、平均「１４」より大きい。そこで、マスタＣＭはＣＭ０２の担当するセッションが１４を超えないように制限する。制限した結果、６つのセッションが余る。そこでマスタＣＭは振り分けられたセッション数が最小のＣＭに余ったセッションを振り分ける。この結果、セッション振り分けが完了する。図１７は確定したセッション振り分け数である。以上によってマスタＣＭは各ＣＭの次世代でのセッションの割り当て数を決定する。決定の後、マスタＣＭはＳ１８以降の処理を実行する。
［各ＣＭの格納先ＲＥＣバッファ決定処理］
次に、図１８の格納先ＲＥＣバッファ決定処理のフローチャートに沿って、各ＣＭが実行する格納先ＲＥＣバッファの決定処理を説明する。
【００７０】
格納先ＲＥＣバッファ決定処理は、ストレージ装置の各ＣＭ（ＣＭ０１、ＣＭ０２、ＣＭ０３、ＣＭ０４）がそれぞれ実行する。
【００７１】
なお、各ＣＭはセッション管理テーブルを有する。各ＣＭは、世代交代後Ｓ４１を処理するまでにセッション管理テーブルの格納先ＣＭ情報を初期化する。
【００７２】
また、各ＣＭはバッファセットテーブルを有する。各ＣＭは、世代交代後Ｓ４３を処理するまでにバッファセットテーブルの次格納先ＣＭ情報を初期化する。
【００７３】
コピー元のいずれかのＣＭ（ＣＭ０１、ＣＭ０２、ＣＭ０３、ＣＭ０４）は、ＣＭが担当するボリュームに対して、ホスト１０からのＷｒｉｔｅＩ／Ｏを受け付ける。以下、Ｉ／Ｏを受け付けたＣＭを自ＣＭとする。
【００７４】
自ＣＭは、受け付けたＩ／Ｏが現在の格納処理の対象の世代で始めてのＩ／Ｏか否かを、セッション管理テーブルの現在の格納処理の対象の世代に相当する格納先ＣＭ情報によって判別する（Ｓ４１）。ＣＭ情報が設定されている場合すなわち初めてのＩ／Ｏではない場合（Ｓ４１：ＮＯ）、自ＣＭはセッションの格納先が決定しているＣＭのＲＥＣバッファに格納領域の獲得の依頼を送信する（Ｓ４２）。一方、ＣＭ情報が設定されていない場合すなわち初めてのＩ／Ｏである場合（Ｓ４１：ＹＥＳ）、自ＣＭは、バッファセットテーブルの次格納先ＣＭ情報が無効か否か（次格納先ＣＭ情報が設定されているか）を判別する（Ｓ４３）。
【００７５】
自ＣＭは、次格納先ＣＭ情報が設定されている場合、すなわちＳ４３で次格納先ＣＭ情報が無効ではないと判別した場合（Ｓ４３：ＮＯ）、バッファセットテーブルの設定された格納先ＣＭのセッション割り当て数を減算する（Ｓ４４）。その後、自ＣＭはＳ４８の処理を実行する。一方、自ＣＭは、バッファセットテーブルの次格納先ＣＭ情報にＣＭ情報が設定されていない場合、すなわちＳ４３で次格納先ＣＭ情報が無効であると判別した場合（Ｓ４３：ＹＥＳ）、当該世代の初めてのコピー元ボリュームとコピー先ボリュームの組合せのセッションであるので、格納対象の世代のバッファセットテーブルの各ＣＭに対する割り当て数を見て、自ＣＭ向けのセッション割り当て数が１以上であるか否かを判定する（Ｓ４５）。Ｓ４５で、自ＣＭ向けの割り当て数が１以上である場合（Ｓ４５：ＹＥＳ）、自ＣＭ向けのセッション割り当て数を「１」減算する（Ｓ４６）。一方、Ｓ４５で、自ＣＭ向けの割り当て数が１未満である場合（Ｓ４５：ＮＯ）、割り当て数が１以上の他ＣＭを選択し、選択したＣＭの割り当て数を減算する（Ｓ４７）。本実施例の処理では、自ＣＭに割り当てられたセッション数を優先して使用する。なお、セッションを自ＣＭと他ＣＭに交互に振り分けることも可能である。
【００７６】
自ＣＭはセッションの割り当ての決定後、Ｓ４４、Ｓ４６、またはＳ４７で決定した当該世代の格納先ＣＭ情報をセッション管理テーブルの該当セッションの格納先ＣＭ情報に設定する（Ｓ４８）。
【００７７】
自ＣＭは格納対象世代のバッファセットテーブルの次格納先ＣＭ情報を更新する（Ｓ４９）。例えば、Ｓ４８で設定したＣＭ以外でセッション割り当て数が１以上のＣＭを検索して、検索したＣＭを次格納先ＣＭ情報として設定する。また、自ＣＭおよび他ＣＭの割り当て数が全て「０」である場合、自ＣＭは自ＣＭを次格納先ＣＭ情報として設定する。
決定したＣＭのＲＥＣバッファに格納領域獲得の依頼を送信する（Ｓ５０）。
［世代の解放］
コピー元はコピーが完了したバッファセットの世代を未使用バッファに変更することで、バッファ領域の枯渇を防ぐ。コピー先のマスタＣＭはバッファセットの処理対象の世代に含まれるデータをディスク装置に展開する処理が完了すると、当該世代に関してコピーが完了した旨をコピー元に送信する。コピー元のマスタＣＭは、コピー先からコピーの完了を受信すると、当該完了通知に対応する世代を未使用の世代に変更する。
【産業上の利用可能性】
【００７８】
本実施例のストレージ装置は、データを格納するストレージシステムに適用できる。
【符号の説明】
【００７９】
１０  ホスト装置
４０  ネットワーク
２０、３０  ストレージ装置
０１、０２、０３、０４、１１、１２、１３、１４  ＣＭ
２０１、２１１、２２１、２３１、３０１、３１１、３２１、３３１  ＣＡ
２０２、２１２、２２２、２３２、３０２、３１２、３２２、３３２  ＲＡ
２０３、２１３、２２３、２３３、３０３、３１３、３２３、３３３  ＣＰＵ
２０４、２１４、２２４、２３４、３０４、３１４、３２４、３３４  ＭＥＭＯＲＹ
２０５、２０６、２１５、２１６、２２５、２２６、２３５、２３６、３０５、３０６、３１５、３１６、３２５、３２６、３３５、３３６  ＦＣ
２４０、３４０  ＢＲＴ
【図３】
0005549243.tif 000002
【図４】
0005549243.tif 000003
【図５】
0005549243.tif 000004
【図６】
0005549243.tif 000005
【図７】
0005549243.tif 000006
【図８】
0005549243.tif 000007
【図９】
0005549243.tif 000008
【図１０】
0005549243.tif 000009
【図１１】
0005549243.tif 000010
【図１２】
0005549243.tif 000011
【図１３】
0005549243.tif 000012
【図１４】
0005549243.tif 000013
【図１５】
0005549243.tif 000014
【図１６】
0005549243.tif 000015
【図１７】
0005549243.tif 000016
【図１８】
0005549243.tif 000017
【図１】
0005549243.tif 000018
【図２】
0005549243.tif 000019