以下に、本願の開示するストレージシステム、ストレージ制御装置および割当解放プログラムの実施例を図面に基づいて詳細に説明する。なお、実施例によりこの発明が限定されるものではない。
まず、処理可能な最大サイズが異なる論理ボリュームに対する、物理データ格納領域の解放処理(UNMAP)の動作の参考例を、図17を参照して説明する。論理ボリュームは、シンプロビジョニングのボリュームである場合とする。図17は、処理可能な最大サイズが異なるボリュームに対するUNMAP動作の参考例を示す図である。図17に示すように、論理ボリューム#1のUNMAPの最大サイズは10ギガバイト(GB)であり、論理ボリューム#2のUNMAPの最大サイズは1MBである場合とする。
図17上図に示すように、ホストコンピュータから論理ボリューム#1に対してUNMAPサイズを10GBとしてUNMAPコマンドが発行されると、ストレージ装置は、論理ボリューム#1に対して一度に10GBの範囲で該当する物理データ格納領域を解放する。一方、ホストコンピュータから論理ボリューム#2に対してUNMAPサイズを1MBとしてUNMAPコマンドが発行されると、ストレージ装置は、論理ボリューム#2に対して一度に1MBの範囲で該当する物理データ格納領域を解放する。
図17下図では、論理ボリューム#1と論理ボリューム#2とがミラーリングの場合である。なお、コピー元とコピー先のデータのミラーリングを行い、等価状態になったときにコピーペアの関係を一時的に切り離すバックアップ方法をEC(Equivalent Copy)機能という。かかる場合には、ホストコンピュータから論理ボリューム#1に対してUNMAPサイズを10GBとしてUNMAPコマンドが発行されると、ストレージ装置は、論理ボリューム#1に対して一度に10GBの範囲で該当する物理データ格納領域を解放する。加えて、ストレージ装置は、コピー先の論理ボリューム#2に対して10GBの範囲で1MBずつ該当する物理データ格納領域を解放する。
コピー先の論理ボリューム#2のUNMAPの最大サイズは1MBであり、コピー元の論理ボリューム#1のUNMAPの最大サイズよりはるかに小さい。このため、論理ボリューム#2のUNMAPの方が論理ボリューム#1のUNMAPよりはるかに時間がかかる。つまり、論理ボリューム#2では、最大サイズ1MBを超えたUNMAPを動作させることができないため、論理ボリューム#2の最大サイズ1MBに合わせて繰り返しUNMAPを行うこととなり、論理ボリューム#1よりUNMAPに時間がかかる。このため、UNMAP中に解放範囲でデータの更新要求がされると、コピー先の論理ボリューム#2のUNMAPに時間がかかる場合、更新要求に対する応答に時間がかかってしまうという問題がある。
ここで、コピー元へUNMAPコマンドが発行された場合の処理と、UNMAP処理中のコピー元へ更新コマンドが発行された場合の処理とのフローチャートの参考例を、図18~図21を参照して説明する。なお、図18、図19は、ECのバックアップの場合であり、コピー元とコピー先がストレージ装置内の2つの筐体(CM)である場合である。図20、図21は、リモートのEC(REC)のバックアップの場合であり、コピー元とコピー先がそれぞれストレージ装置である場合である。
図18は、コピー元へUNMAP発行された場合の処理のフローチャートの参考例を示す図である。なお、図18では、ECのバックアップがされている場合である。
図18に示すように、ストレージ装置は、ホストコンピュータからUNMAPコマンドを受け付ける(ステップS101)。すると、ストレージ装置は、ECのコピー元の物理データ格納領域の割り当てを解放する(ステップS102)。加えて、ストレージ装置は、ECのコピー先の物理データ格納領域の割り当てを解放する(ステップS103)。そして、ストレージ装置は、ホストコンピュータにUNMAPコマンドに対する応答を返す(ステップS104)。
図19は、UNMAP処理中のコピー元へ更新発行された場合の処理のフローチャートの参考例を示す図である。なお、図19では、ECのバックアップがされている場合である。
図19に示すように、ストレージ装置は、ホストコンピュータからWriteコマンドを受け付ける(ステップS111)。すると、ストレージ装置は、コピー元およびコピー先でUNMAPが完了しているか否かを判定する(ステップS112)。コピー元またはコピー先でUNMAPが完了していないと判定した場合には(ステップS112;No)、ストレージ装置は、コピー元およびコピー先でUNMAPが完了するまで書き込みを待ち合わせる(ステップS113)。そして、ストレージ装置は、ステップS114に移行する。
一方、コピー元およびコピー先でUNMAPが完了したと判定した場合には(ステップS112;Yes)、ストレージ装置は、Writeコマンドに応じて、ECにおけるコピー元にデータを更新する(ステップS114)。そして、ストレージ装置は、ホストコンピュータにWriteコマンドに対する応答を返す(ステップS115)。ここで、ECにおけるコピー先のUNMAPに時間がかかっている場合、Writeコマンドに対する応答に時間がかかる。
そして、ストレージ装置は、ECにおけるセッションが一時的な切り離し状態か否かを判定する(ステップS116)。ECにおけるセッションが一時的に切り離し状態であると判定した場合には(ステップS116;Yes)、ストレージ装置は、処理を終了する。
一方、ECにおけるセッションが一時的な切り離し状態でないと判定した場合には(ステップS116;No)、ストレージ装置は、コピー先に書き込みデータを転送する(ステップS117)。そして、ストレージ装置は、処理を終了する。
図20は、リモートコピー元へUNMAP発行された場合の処理のフローチャートの参考例を示す図である。なお、図20では、プライマリのストレージ装置からセカンダリのストレージ装置へリモートのEC(REC)のバックアップがされている場合である。
図20に示すように、プライマリ装置側は、ホストコンピュータからUNMAPコマンドを受け付ける(ステップS121)。すると、プライマリ装置は、RECのコピー元の物理データ格納領域の割り当てを解放する(ステップS122)。そして、プライマリ装置は、セカンダリ装置とUNMAPコマンド発行の筐体間通信を行う(ステップS123)。
続いて、セカンダリ装置は、RECのコピー先の物理データ格納領域の割り当てを解放する(ステップS124)。セカンダリ装置は、プライマリ装置に筐体間通信の応答を返す(ステップS125)。そして、プライマリ装置は、ホストコンピュータにUNMAPコマンドに対する応答を返す(ステップS126)。
図21は、UNMAP処理中のリモートコピー元へ更新発行された場合の処理のフローチャートの参考例を示す図である。なお、図21では、プライマリのストレージ装置からセカンダリのストレージ装置へリモートのEC(REC)のバックアップがされている場合である。
図21に示すように、プライマリ装置は、ホストコンピュータからWriteコマンドを受け付ける(ステップS131)。すると、プライマリ装置は、コピー元およびコピー先でUNMAPが完了しているか否かを判定する(ステップS132)。コピー元またはコピー先でUNMAPが完了していないと判定した場合には(ステップS132;No)、プライマリ装置は、コピー元およびコピー先でUNMAPが完了するまで書き込みを待ち合わせる(ステップS133)。そして、プライマリ装置は、ステップS134に移行する。
一方、コピー元およびコピー先でUNMAPが完了したと判定した場合には(ステップS132;Yes)、プライマリ装置は、Writeコマンドに応じて、RECにおけるコピー元にデータを更新する(ステップS134)。そして、プライマリ装置は、ホストコンピュータにWriteコマンドに対する応答を返す(ステップS135)。ここで、RECにおけるコピー先のUNMAPに時間がかかっている場合、Writeコマンドに対する応答に時間がかかる。
そして、プライマリ装置は、RECにおけるセッションが一時的な切り離し状態か否かを判定する(ステップS136)。RECにおけるセッションが一時的に切り離し状態であると判定した場合には(ステップS136;Yes)、プライマリ装置は、処理を終了する。
一方、RECにおけるセッションが一時的な切り離し状態でないと判定した場合には(ステップS136;No)、プライマリ装置は、セカンダリ装置に書き込みデータを転送する(ステップS137)。そして、プライマリ装置は、処理を終了する。
このようにして、ECおよびRECにおけるコピー先のUNMAPに時間がかかる場合、Writeコマンドに対する応答に時間がかかってしまうという問題がある。
そこで、以降では、コピー元とコピー先との間でコピー処理を行うストレージシステムにおいて、物理データ格納領域の解放処理中に解放範囲内でデータの更新要求がされても、更新要求に対する応答にかかる時間を短縮するストレージシステムについて説明する。
実施例1では、ECにおけるコピー先のUNMAPに時間がかかる場合に、Writeコマンドに対する応答にかかる時間を短縮するストレージシステムについて説明する。
[ストレージ装置のハードウェア構成]
図1は、実施例1に係るストレージ装置のハードウェア構成の一例を示す図である。ストレージ装置1は、CM(Controller Module)2A及びCM2Bを有する。CM2AとCM2Bは、一方がバックアップ元として動作し、他方がバックアップ先として動作する。なお、実施例では、CM2Aは、バックアップ元であり、CM#0と記載する場合がある。CM2Bは、バックアップ先であり、CM#1と記載する場合がある。CM2Aは、Disk3Aと接続される。CM2Bは、Disk3Bと接続される。CM2Aは、Host8と接続される。CM2Bは、Host8と接続される。なお、CM2A,CM2Bは、ストレージ制御装置の一例である。
ストレージ装置1のCM2Aは、Host8からUNMAPコマンドを受け付けると、UNMAPコマンドに応じて、Disk3A上の記憶領域の領域解放(UNMAP)を実行する。CM2Aは、UNMAPを実行すると、CM2Bの領域解放を管理するために用いられるUNMAP制御テーブル231Aを生成する。CM2Aは、CM2BにUNMAPを非同期で実行させ、UNMAP制御テーブルを用いて、UNMAPの進捗情報を管理する。そして、CM2Aは、CM2BのUNMAP中にWriteコマンドが発生した場合に、Writeコマンドに応じて書き込み処理を実行するとともに、UNMAP制御テーブル231Aを用いて、CM2Bにおいて書き込み処理が発生した箇所のUNMAPが完了したか否かを判定する。そして、CM2Aは、書き込み処理が発生した箇所のUNMAPが完了していなければ、CM2Bにおける当該箇所についてUNMAPを完了させてから書き込み処理を実行させる。これにより、ストレージ装置1は、CM2AおよびCM2BのUNMAP完了まで書き込み処理を待ち合わせる場合と比べて、Writeコマンドに対する応答にかかる時間を短縮することが可能となる。
CM2A,2Bは、それぞれ、ストレージ装置1を制御する制御装置である。CM2A,2Bは、それぞれ、CA21、プロセッサ22、メモリ23、IOコントローラ24およびDI25を有する。
CA21は、Host8とのインタフェースを担う。DI25は、Disk3Aとのインタフェースを担う。IOコントローラ24は、CM同士を接続するためのインタフェースを担う。
プロセッサ22は、メモリ23が記憶するファームウェアを実行することでCM(2A、2B)をストレージ制御装置として動作させる。CM2Aのプロセッサ22は、第1UNMAP制御部221、第1更新制御部222、切り離し制御部223および第1コピー制御部224を有する。CM2Bのプロセッサ22は、第2UNMAP制御部225、第2更新制御部226、読出制御部227および第2コピー制御部228を有する。
メモリ23は、プロセッサ22で実行されるファームウェアやファームウェアが使用するデータ等を記憶するRAM(Random Access Memory)である。CM2Aのメモリ23は、UNMAP制御テーブル231Aを記憶する。UNMAP制御テーブル231Aは、バックアップ先のCM2BでのUNMAPを管理するために用いられるテーブルであり、CM2BでのUNMAPの進捗情報を管理する。なお、UNMAP制御テーブル231Aは、例えば、第1UNMAP制御部221によって生成され、更新される。
Disk3A、3Bは、それぞれ、業務ボリュームおよびバックアップボリュームのデータを格納する。バックアップ元のDisk3Aは、シンプロビジョニング用のボリュームを有するDiskである。バックアップ先のDisk3Bは、シンプロビジョニング用のボリュームを有するDiskであってもシンプロビジョニング用でないボリュームを有するDiskであっても良い。
ここで、UNMAP制御テーブル231Aのデータ構造の一例を、図2を参照して説明する。図2は、実施例1に係るUNMAP制御テーブルのデータ構造の一例を示す図である。図2に示すように、UNMAP制御テーブル231Aは、コピー元ボリューム番号、コピー先ボリューム番号、開始論理アドレス、終了論理アドレス、処理中論理アドレスおよびBitmapを対応付けて記憶する。
コピー元ボリューム番号は、コピー元のDisk3A内の論理ボリューム番号である。コピー先ボリューム番号は、コピー先のDisk3B内の論理ボリューム番号である。開始論理アドレスは、UNMAP開始の論理アドレスである。終了論理アドレスは、UNMAP終了の論理アドレスである。処理中論理アドレスは、UNMAP処理中の論理アドレスである。Bitmapは、UNMAPの進捗情報を管理するための情報である。Bitmapには、開始論理アドレスから終了論理アドレスまでの連続した数ブロックを1単位として、1単位につき1ビットでUNMAPの進捗情報が表される。数ブロックは、一例として16ブロックであるが、これに限定されるものではない。1ビットで表される進捗情報は、UNMAP完了であることを示す「0」、UNMAP未完了であることを示す「1」が設定される。
一例として、コピー元ボリューム番号が「1」、コピー先ボリューム番号が「2」である場合に、開始論理アドレスとして「0x00000100」、終了論理アドレスとして「0x013fffff」、処理中論理アドレスとして「0x00000100」が設定されている。加えて、Bitmap情報には、全てUNMAP未完了であることを示す「1」が設定されている。
第1UNMAP制御部221は、ECの実行中に、Host8からのUNMAPの要求に応じてコピー元の自己のCM2Aおよびコピー先のCM2BのUNMAP処理を制御する。
例えば、第1UNMAP制御部221は、Host8からUNMAPコマンドを受け付けると、UNMAPコマンドに含まれる開始論理アドレス、終了論理アドレス、UNMAPサイズに応じてコピー元のボリュームのUNMAPを実行する。すなわち、第1UNMAP制御部221は、開始論理アドレスから終了論理アドレスまでの物理データ格納領域の割り当てを、UNMAPサイズの範囲で解放する。Host8は、UNMAPすべきボリュームの最大UNMAPサイズを意識してUNMAPコマンドを発行する。このため、UNMAPコマンドにより指定されるUNMAPサイズは、UNMAPすべきボリュームの最大UNMAPサイズ以下に指定されるため、UNMAPは、UNMAPサイズの範囲で終了する。
また、第1UNMAP制御部221は、コピー先のCM2BでのUNMAPを管理するために用いられるUNMAP制御テーブル231Aをメモリ23上に獲得し、UNMAPすべき範囲を格納する。そして、第1UNMAP制御部221は、Host8に対して、UNMAP完了の応答を返す。そして、第1UNMAP制御部221は、コピー先のCM2Bに、UNMAPコマンドに応じたUNMAPを実行するように指示する。なお、指示を受け付けたコピー先のCM2Bは、非同期でUNMAPコマンドに応じたUNMAPを実行する。
また、第1UNMAP制御部221は、コピー先のCM2BでUNMAPが実行されるごとに、UNMAP制御テーブル231Aを更新する。すなわち、第1UNMAP制御部221は、UNMAP制御テーブル231Aについて、処理中の論理アドレスを更新するとともに、開始論理アドレスから終了論理アドレスまでの範囲で、UNMAPが終了した範囲をBitmapに設定する。
また、第1UNMAP制御部221は、コピー先のCM2BでUNMAPが完了すると、UNMAP制御テーブル231Aを解放する。
第1更新制御部222は、Host8からの更新要求に応じて、UNMAP中の更新を制御する。
例えば、第1更新制御部222は、Host8からWriteI/Oコマンドを受け付けると、WriteI/Oコマンドに応じて、コピー元のボリュームの更新範囲にデータを更新する。そして、第1更新制御部222は、Host8に対して、書き込み完了の応答を返す。
また、第1更新制御部222は、UNMAP制御テーブル231Aを参照して、コピー先において更新範囲が既にUNMAP済みであるか否かを判定する。第1更新制御部222は、コピー先において更新範囲がまだUNMAP済みでない場合には、コピー先のCM2Bに更新範囲のUNMAPを実行するように指示する。そして、第1更新制御部222は、コピー先のCM2Bで更新範囲のUNMAPが実行されると、UNMAP制御テーブル231Aを更新する。すなわち、第1更新制御部222は、UNMAP制御テーブル231Aについて、処理中の論理アドレスを更新するとともに、UNMAPが終了した更新範囲をBitmapに設定する。
また、第1更新制御部222は、コピー先において更新範囲のUNMAPが終了すると、コピーセッションが切り離されていなければ、コピー先のCM2Bに、更新範囲へのデータの更新を指示する。なお、第1更新制御部222は、コピーセッションが切り離されていれば、コピー先のCM2Bに、データの更新を指示しない。
切り離し制御部223は、Host8からの切り離し要求に応じてコピーセッションの一時切り離しを制御する。例えば、切り離し制御部223は、Host8からSuspendコマンドを受け付けると、CM2AとCM2Bとのコピーセッションを一時的に切り離す。
第1コピー制御部224は、Host8からのコピー要求に応じてバックアップのコピーを制御する。例えば、第1コピー制御部224は、Host8からバックアップのコピーコマンドを受け付けると、コピーセッションが接続されたCM2AからCM2Bへ順次コピーする。
第2UNMAP制御部225は、コピー元のUNMAP指示に応じて、コピー元と非同期で、UNMAPを実行する。
例えば、第2UNMAP制御部225は、コピー元からUNMAP指示を受け付けると、指示に含まれる開始論理アドレス、終了論理アドレス、UNMAPサイズおよび自己のボリュームの最大UNMAPサイズに応じてコピー先のボリュームのUNMAPを実行する。すなわち、第2UNMAP制御部225は、指示されたUNMAPサイズが自己のボリュームの最大UNMAPサイズより大きい場合には、以下の処理を行う。第2UNMAP制御部225は、開始論理アドレスから終了論理アドレスまでの物理データ格納領域の割り当てを、自己のボリュームの最大UNMAPサイズの範囲ずつ繰り返し解放する。そして、第2UNMAP制御部225は、1回のUNMAPが終了するごとに、終了した範囲および次の処理する論理アドレスをコピー元のCM2Aに通知する。
また、第2UNMAP制御部225は、コピー元から更新範囲のUNMAP指示を受け付けると、指示に含まれる更新範囲について、先行してUNMAPを実行する。そして、第2UNMAP制御部225は、1回または予め定められた数回のUNMAPが終了するごとに、終了した範囲および次の処理する論理アドレスをコピー元のCM2Aに通知する。
第2更新制御部226は、コピー元の更新指示に応じて、UNMAP中の更新を制御する。例えば、第2更新制御部226は、コピー元から更新指示を受け付けると、更新指示に応じて、コピー先のボリュームの更新範囲にデータを更新する。
読出制御部227は、ECの実行中に、Host8からの読み出しの要求に応じて読み出し処理を制御する。
例えば、読出制御部227は、Host8からReadコマンドを受け付けると、CM2Aで管理されるUNMAP制御テーブル231AのBitmap情報を用いて、読み出し箇所がUNMAP済みであるか否かを判定する。読出制御部227は、読出し箇所がUNMAP済みである場合には、Host8に、ボリューム上の読み出し箇所のデータを読み出し応答として返す。読出制御部227は、読出し箇所がまだUNMAP済みでない場合には、Host8に、まだUNMAP済みでないがUNMAP済みであることを示す「0」データを読み出し応答として返す。
第2コピー制御部228は、コピー元のコピー指示に応じてバックアップのコピーを制御する。例えば、第2コピー制御部228は、コピー元のCM2Aからコピー範囲のデータを受け付けると、自己のボリュームのコピー範囲にデータをコピーする。
[UNMAP制御処理の一例]
図3は、実施例1に係るUNMAP制御処理の一例を示す図である。図3では、CM2AのTypeAの論理ボリューム#1からCM2BのTypeBの論理ボリューム#2へのECの実行中に、Host8からCM2AへUNMAPコマンドが発行された場合である。TypeAは、一度にUNMAP可能な最大サイズが10GBである論理ボリュームのタイプである。TypeBは、一度にUNMAP可能な最大サイズが1MBである論理ボリュームのタイプである。すなわち、コピー元の論理ボリュームおよびコピー先の論理ボリュームでは、UNMAPの挙動が異なる。
図3に示すように、CM2Aでは、第1UNMAP制御部221が、Host8から発行されたUNMAPコマンドを受け付ける(1)。UNMAPコマンドには、「0x00000100」の開始論理アドレス、「0x013fffff」の終了論理アドレスおよび10GBのUNMAPサイズが含まれる。
そして、第1UNMAP制御部221は、コピー元の論理ボリューム#1について、開始論理アドレスから終了論理アドレスまでの物理データ格納領域の割り当てを、10GBのUNMAPサイズの範囲で解放する(2)。論理ボリューム#1の一度のUNMAP可能な最大サイズがUNMAPコマンドで指定されたUNMAPサイズと一致するので、第1UNMAP制御部221は、一度でUNMAP処理を完了する。
そして、第1UNMAP制御部221は、コピー先のCM2BでのUNMAPを管理するために用いられるUNMAP制御テーブル231Aをメモリ23上に獲得し、UNMAPすべき範囲を設定する(3)。ここでは、UNMAP制御テーブル231Aには、コピー元ボリューム番号として「1」、コピー先ボリューム番号として「2」が設定される。開始論理アドレスとして「0x00000100」、終了論理アドレスとして「0x013fffff」、処理中論理アドレスとして開始論理アドレスと同じ「0x00000100」が設定される。加えて、Bitmapには、UNMAPが全て未完了であることを示す「1」が設定される。
そして、第1UNMAP制御部221は、Host8に対して、UNMAP完了の応答を返す(4)。そして、第1UNMAP制御部221は、コピー先のCM2Bに、UNMAPコマンドに応じたUNMAPを実行するように指示する。
CM2Bでは、第2UNMAP制御部225が、CM2AからのUNMAPの指示を受け付けると、コピー先の論理ボリューム#2について、非同期でUNMAP処理を実施する(5)。ここでは、第2UNMAP制御部225は、コピー先の論理ボリューム#2について、開始論理アドレスから終了論理アドレスまでの物理データ格納領域の割り当てを、10GBのUNMAPサイズの範囲で1MBずつ解放する。
CM2Aでは、第1UNMAP制御部221が、コピー先のCM2BでUNMAPが実行されるごとに、UNMAP制御テーブル231Aを更新する(6)。ここでは、処理中論理アドレスとして「0x00000900」が設定される。加えて、Bitmapには、UNMAPが完了したブロックに対応するビットに完了したことを示す「0」が設定される。
そして、第1UNMAP制御部221は、コピー先のCM2Bで、10GBのUNMAPサイズの範囲のUNMAPが完了したら、UNMAP制御テーブル231Aを解放する。
[更新制御処理の一例]
図4は、実施例1に係る更新制御処理の一例を示す図である。図4では、CM2Aの論理ボリューム#1からCM2Bの論理ボリューム#2へのECの実行中に、Host8からCM2AへWriteI/Oコマンドが発行された場合である。なお、図3では、コピーセッションが切り離されていない場合について説明する。
図4に示すように、CM2Aでは、第1更新制御部222が、Host8から発行されたWriteI/Oコマンドを受け付ける(1)。WriteI/Oコマンドには、更新箇所および更新すべきデータが含まれる。
そして、第1更新制御部222は、WriteI/Oコマンドに応じて、コピー元の論理ボリューム#1の更新範囲にデータを更新する(2)。そして、第1更新制御部222は、Host8に対して、書き込み完了の応答を返す(3)。そして、第1更新制御部222は、UNMAP制御テーブル231Aを参照して、更新範囲が既にUNMAP済みであるか否かを判定する。第1更新制御部222は、更新範囲がまだUNMAP済みでない場合には、コピー先のCM2Bに更新範囲のUNMAPを実行するように指示する。
CM2Bでは、第2UNMAP制御部225が、CM2Aからの更新範囲のUNMAPの指示を受け付けると、コピー先の論理ボリューム#2について、先行して更新範囲でUNMAPを実行する(4)。
CM2Aでは、第1更新制御部222が、コピー先のCM2Bで更新範囲のUNMAPが実行されると、UNMAP制御テーブル231Aを更新する(5)。ここでは、Bitmapには、UNMAPが完了した更新範囲に対応するビットに、完了したことを示すoff(「0」)が設定される。
そして、第1更新制御部222は、コピーセッションが切り離されていないので、コピー先のCM2Bに、更新範囲へのデータの更新を指示する。CM2Bでは、第2更新制御部226が、更新範囲へのデータの更新指示を受け付けると、更新範囲にデータを更新する(6)。
この後、CM2Bでは、第2UNMAP制御部225が、更新された更新範囲のUNMAPを先行して実施したので、順次実施されるUNMAPの中で当該更新範囲のUNMAPを実施しない。
[読出制御処理の一例]
図5は、実施例1に係る読出制御処理の一例を示す図である。図5では、CM2Aの論理ボリューム#1からCM2Bの論理ボリューム#2へのECの実行中に、Host8からCM2BへReadコマンドが発行された場合である。
図5に示すように、CM2Bでは、読出制御部227が、Host8から発行されたReadコマンドを受け付ける(1)。Readコマンドには、読み出し箇所が含まれる。
読出制御部227は、CM2Aで管理されるUNMAP制御テーブル231AのBitmapを確認し、読み出し箇所がUNMAP済みであるか否かを判定する(3)。ここでは、読み出し箇所が「1111 1111」であるので、UNMAP済みでない、すなわちUNMAP未完了であると判定される。
そして、読出制御部227は、Host8に対して、UNMAPしたことを示す「0」データを読み出し応答として返す(4)。この段階では、UNMAP未完了であるが、今後、UNMAPが実施されるからである。なお、読出制御部227は、読出し箇所がUNMAP済みであると判定した場合には、Host8に対して、論理ボリューム上の読み出し箇所のデータを読み出し応答として返す。
[コピーセッションの切り離し後の更新制御処理の一例]
図6A~図6Cは、実施例1に係る切り離し後の更新制御処理の一例を示す図である。
図6Aでは、コピーセッションが一時的に切り離された(Suspend)状態の場合であってCM2BでUNMAPが実施されている場合に、Host8からCM2AへWriteI/Oコマンドが発行された場合について説明する。かかる場合には、CM2Aの第1UNMAP制御部221は、Suspend状態のまま、CM2BのUNMAP処理を実行させる。CM2Bの第2UNMAP制御部225は、非同期に、UNMAP処理を実行する。
図6Aに示すように、CM2Aでは、第1更新制御部222が、Host8から発行されたWriteI/Oコマンドを受け付ける(1)。WriteI/Oコマンドには、更新箇所および更新すべきデータが含まれる。
そして、第1更新制御部222は、WriteI/Oコマンドに応じて、コピー元の論理ボリューム#1の更新範囲にデータを更新する(2)。そして、第1更新制御部222は、Host8に対して、書き込み完了の応答を返す(3)。そして、第1更新制御部222は、UNMAP制御テーブル231Aを参照して、更新範囲が既にUNMAP済みであるか否かを判定する。第1更新制御部222は、更新範囲がまだUNMAP済みでない場合には、コピー先のCM2Bに更新範囲のUNMAPを実行するように指示する。
CM2Bでは、第2UNMAP制御部225が、CM2Aからの更新範囲のUNMAPの指示を受け付けると、コピー先の論理ボリューム#2について、先行して更新範囲でUNMAPを実行する(4)。
CM2Aでは、第1更新制御部222が、コピー先のCM2Bで更新範囲のUNMAPが実行されると、UNMAP制御テーブル231Aを更新する(5)。ここでは、Bitmapには、UNMAPが完了した更新範囲に対応するビットに、完了したことを示すoff(「0」)が設定される。
この後、CM2Aでは、第1更新制御部222は、Suspend状態であるので、CM2Bに対して更新範囲へのデータの更新を指示しない。
図6Bでは、コピーセッションが一時的に切り離された(Suspend)状態の場合であって、CM2BでUNMAPが実施されている場合に、Host8からCM2BへWriteI/Oコマンドが発行された場合について説明する。かかる場合には、CM2Aの第1UNMAP制御部221は、Suspend状態のまま、CM2BのUNMAP処理を実行させる。CM2Bの第2UNMAP制御部225は、非同期に、UNMAP処理を実行する。
図6Bに示すように、CM2Bでは、第2更新制御部226が、Host8から発行されたWriteI/Oコマンドを受け付ける(1)。WriteI/Oコマンドには、更新箇所および更新すべきデータが含まれる。
第2更新制御部226は、CM2Aで管理されるUNMAP制御テーブル231AのBitmapを確認し、更新箇所がUNMAP済みであるか否かを判定する。ここでは、更新箇所がUNMAP済みでない、すなわちUNMAP未完了であると判定されるとする。すると、第2UNMAP制御部225は、コピー先の論理ボリューム#2について、先行して更新範囲でUNMAPを実行する(2)。
そして、第2更新制御部226が、コピー先のCM2Bで更新範囲のUNMAPが実行されると、UNMAP制御テーブル231Aを更新する(3)。ここでは、Bitmapには、UNMAPが完了した更新範囲に対応するビットに、完了したことを示すoff(「0」)が設定される。
そして、第2更新制御部226は、更新範囲にデータを更新する(4)。そして、第2更新制御部226は、Host8に対して、書き込み完了の応答を返す(5)。
この後、CM2Bでは、第2UNMAP制御部225が、更新された更新範囲のUNMAPを先行して実施したので、順次実施されるUNMAPで当該範囲のUNMAPを実施しない。
図6Cでは、コピーセッションが完全に切り離された(停止された)場合であって、CM2BでUNMAPが実施されている場合に、Host8からCM2BへWriteI/Oコマンドが発行された場合について説明する。かかる場合でも、CM2Aの第1UNMAP制御部221は、Suspend状態のまま、CM2BのUNMAP処理を実行させる。CM2Bの第2UNMAP制御部225は、非同期に、UNMAP処理を実行する。
図6Cに示すように、CM2Bでは、第2更新制御部226が、Host8から発行されたWriteI/Oコマンドを受け付ける(1)。WriteI/Oコマンドには、更新箇所および更新すべきデータが含まれる。
第2更新制御部226は、CM2Aで管理されるUNMAP制御テーブル231AのBitmapを確認し、更新箇所がUNMAP済みであるか否かを判定する。ここでは、更新箇所がUNMAP済みでない、すなわちUNMAP未完了であると判定されるとする。すると、第2UNMAP制御部225は、コピー先の論理ボリューム#2について、先行して更新範囲でUNMAPを実行する(2)。
そして、第2更新制御部226が、コピー先のCM2Bで更新範囲のUNMAPが実行されると、UNMAP制御テーブル231Aを更新する(3)。ここでは、Bitmapには、UNMAPが完了した更新範囲に対応するビットに、完了したことを示すoff(「0」)が設定される。
そして、第2更新制御部226は、更新範囲にデータを更新する(4)。そして、第2更新制御部226は、Host8に対して、書き込み完了の応答を返す(5)。
この後、CM2Bでは、第2UNMAP制御部225が、更新された更新範囲のUNMAPを先行して実施したので、順次実施されるUNMAPで当該範囲のUNMAPを実施しない。また、コピーセッションが停止した後であるので、CM2Aでコピー元が更新されても、コピー先には何もしない。
[UNMAP発行された場合の処理のフローチャート]
図7は、コピー元へUNMAP発行された場合の処理のフローチャートの一例を示す図である。なお、図7では、コピー元のCM2Aからコピー先のCM2BへECを実行している場合であるとする。
図7に示すように、CM2Aでは、第1UNMAP制御部221が、Host8からUNMAPコマンドを受け付ける(ステップS11)。UNMAPコマンドには、開始論理アドレス、終了論理アドレス、UNMAPサイズが含まれる。すると、第1UNMAP制御部221は、ECのコピー元の論理ボリュームの物理データ格納領域の割り当てを解放する(ステップS12)。
そして、第1UNMAP制御部221は、UNMAP制御テーブル231Aをメモリ23上に作成し、UNMAP制御テーブル231Aに開始論理アドレスおよび終了論理アドレスを記憶する(ステップS13)。そして、第1UNMAP制御部221は、Host8に対して、UNMAP完了の応答を返す(ステップS14)。
その後、CM2AからUNMAP指示を受け付けたCM2Bでは、第2UNMAP制御部225が、非同期で、UNMAPすべく、UNMAPする範囲を決定する(ステップS15)。そして、第2UNMAP制御部225は、決定したUNMAPする範囲の物理データ格納領域の割り当てを解放(UNMAP)する(ステップS16)。
そして、CM2Aでは、第1UNMAP制御部221が、CM2BでのUNMAP終了に応じて、UNMAP制御テーブル231Aの、処理中論理アドレスとBitmap情報を更新する(ステップS17)。すなわち、第1UNMAP制御部221は、UNMAP制御テーブル231Aについて、処理中論理アドレスを更新するとともに、開始論理アドレスから終了論理アドレスまでの範囲で、UNMAPが終了した範囲をBitmapに設定する。
そして、CM2Bでは、第2UNMAP制御部225が、UNMAPすべき範囲でコピー先の全ての領域を解放したか否かを判定する(ステップS18)。コピー先の全ての領域を解放していないと判定した場合には(ステップS18;No)、第2UNMAP制御部225は、次回解放すべき範囲を決定する(ステップS19)。そして、第2UNMAP制御部225は、ステップS16に移行する。
一方、コピー先の全ての領域を解放したと判定した場合には(ステップS18;Yes)、CM2Aでは、第1UNMAP制御部221が、UNMAP制御テーブル231Aを解放する(ステップS20)。
[UNMAP処理中のコピー元へ更新発行された場合の処理のフローチャート]
図8は、UNMAP処理中のコピー元へ更新発行された場合の処理のフローチャートの一例を示す図である。なお、図8では、コピー元のCM2Aからコピー先のCM2BへECを実行している場合であり、さらにUNMAP処理中である場合であるとする。
図8に示すように、第1更新制御部222は、Host8からWriteI/Oコマンドを受け付ける(ステップS31)。すると、第1更新制御部222は、ECのコピー元の論理ボリュームの更新範囲にデータを更新する(ステップS32)。そして、第1更新制御部222は、Host8に対して、書き込み完了の応答を返す(ステップS33)。
第1更新制御部222は、更新範囲のBitmap情報をチェックし(ステップS34)、更新範囲に相当するコピー先の領域が既にUNMAP済みであるか否かを判定する(ステップS35)。UNMAP済みであると判定した場合には(ステップS35;Yes)、第1更新制御部222は、ステップS38に移行する。
一方、UNMAP済みでないと判定した場合には(ステップS35;No)、第1UNMAP制御部221は、コピー先に対して、更新範囲の論理ボリュームの物理データ格納領域の割り当てを解放させる(ステップS36)。
そして、第1UNMAP制御部221は、UNMAP制御テーブル231Aの、処理中論理アドレスとBitmap情報を更新する(ステップS37)。すなわち、第1UNMAP制御部231は、UNMAP制御テーブル231Aについて、処理中論理アドレスを更新するとともに、開始論理アドレスから終了論理アドレスまでの範囲で、UNMAPを終了させた更新範囲をBitmapに設定する。そして、第1更新制御部222は、ステップS38に移行する。
ステップS38において、第1更新制御部222は、ECのコピーセッションが一時切り離し状態であるか否かを判定する(ステップS38)。ECのコピーセッションが一時切り離し状態でないと判定した場合には(ステップS38;No)、第1更新制御部222は、コピー先に対して、更新範囲にデータを書き込ませるべく、当該データを転送する(ステップS39)。そして、第1更新制御部222は、更新制御処理を終了する。
一方、ECのコピーセッションが一時切り離し状態であると判定した場合には(ステップS38;Yes)、第1更新制御部222は、コピー先に対して、データを転送しないで、更新制御処理を終了する。
[コピー先のUNMAP中の読出処理のフローチャート]
図9は、コピー先UNMAP中の読出処理のフローチャートの一例を示す図である。なお、図9では、コピー元のCM2Aからコピー先のCM2BへECを実行している場合であり、さらにUNMAP処理中である場合であるとする。
図9に示すように、読出制御部227は、Host8からReadコマンドを受け付ける(ステップS41)。すると、読出制御部227は、読み出し箇所のBitmap情報をチェックし(ステップS42)、読み出し範囲に相当するコピー先の領域が既にUNMAP済みであるか否かを判定する(ステップS43)。
UNMAP済みであると判定した場合には(ステップS43;Yes)、読出制御部227は、コピー先の論理ボリュームに格納しているデータをキャッシュ上に読み出す(ステップS44)。そして、読出制御部227は、ステップS46に移行する。
一方、UNMAP済みでないと判定した場合には(ステップS43;No)、読出制御部227は、UNMAPしたことを示す「0」データをキャッシュ上に用意する(ステップS45)。そして、読出制御部227は、ステップS46に移行する。
ステップS46において、読出制御部227は、Host8に対して、キャッシュ上のデータをRead情報として応答する(ステップS46)。そして、読出制御部227は、読出処理を終了する。
[セッション停止後にコピー先へ更新発行された場合の処理のフローチャート]
図10は、セッション停止後にコピー先へ更新発行された場合の処理のフローチャートの一例を示す図である。なお、図10では、コピー元のCM2Aからコピー先のCM2BへECを実行していたが、コピーセッションを停止した場合であり、さらにUNMAP処理中である場合であるとする。図10のフローチャートは、図6Cで説明した切り離し後の更新制御処理の一例に対応する。
図10に示すように、第2更新制御部226は、Host8からWriteI/Oコマンドを受け付ける(ステップS51)。すると、第2更新制御部226は、UNMAP制御テーブル231Aを検索し(ステップS52)、更新範囲を管理するUNMAP制御テーブル23Aが存在するか否かを判定する(ステップS53)。更新範囲を管理するUNMAP制御テーブル231Aが存在しないと判定した場合には(ステップS53;No)、第2更新制御部226は、データを更新すべく、ステップS58に移行する。
一方、更新範囲を管理するUNMAP制御テーブル231Aが存在すると判定した場合には(ステップS53:Yes)、第2更新制御部226は、更新範囲のBitmap情報をチェックし(ステップS54)、更新範囲に相当するコピー先の領域が既にUNMAP済みであるか否かを判定する(ステップS55)。UNMAP済みであると判定した場合には(ステップS55;Yes)、第2更新制御部226は、データを更新すべく、ステップS58に移行する。
一方、UNMAP済みでないと判定した場合には(ステップS55;No)、第2更新制御部226は、更新範囲の論理ボリュームの物理データ格納領域の割り当てを解放する(ステップS56)。
そして、第2UNMAP制御部225は、UNMAP制御テーブル231Aの、処理中論理アドレスとBitmap情報を更新する(ステップS57)。すなわち、第2UNMAP制御部225は、UNMAP制御テーブル231Aについて、処理中論理アドレスを更新するとともに、開始論理アドレスから終了論理アドレスまでの範囲で、UNMAPを終了させた更新範囲をBitmapに設定する。そして、第2更新制御部226は、ステップS58に移行する。
ステップS58において、第2更新制御部226は、更新範囲にデータを更新する(ステップS58)。そして、第2更新制御部226は、Host8に対して、書き込み完了の応答を返す(ステップS59)。
[実施例1の効果]
上記実施例1によれば、ストレージ装置1は、CM2AからCM2Bへコピー処理を行う。CM2Aは、CM2Aの記憶領域の割当解放処理を実行する。CM2Aは、割当解放処理が実行されると、CM2Bの割当解放処理を管理するために用いられるUNMAP制御テーブル231Aを生成する。CM2Aは、CM2Bに割当解放処理を非同期で実行させ、UNMAP制御テーブル231Aを用いて、割当解放処理の進捗情報を管理する。CM2Aは、CM2Bの割当解放処理中に、書き込み処理が発生した場合に、書き込み処理を実行するとともに、UNMAP制御テーブル231Aを用いて、CM2Bにおいて書き込み処理が発生した箇所の割当解放処理が完了したか否かを判定する。そして、CM2Aは、CM2Bにおいて書き込み処理が発生した箇所の割当解放処理が完了していなければ、CM2Bにおける当該箇所について割当解放処理を完了させてから書き込み処理を実行させる。かかる構成によれば、ストレージ装置1は、コピー元とコピー先との間でコピー処理を行う場合であって物理データ格納領域の解放処理中に解放範囲にデータの更新要求がされても、更新要求に対する応答にかかる時間を短縮できる。
また、上記実施例1によれば、CM2Aは、Host8から割当解放処理の依頼を受け付けると、CM2Aの記憶領域の割当解放処理を実行し、実行が完了すると、当該依頼の応答をHost8に送信する。かかる構成によれば、ストレージ装置1は、Host8からの割当解放処理の依頼に対して、CM2Aの記憶領域の割当解放処理の実行が完了すると、CM2Bの割当解放処理の実行完了を待たないで応答を返すので、Host8への応答にかかる時間を短縮できる。
また、上記実施例1によれば、CM2Aは、Host8から書き込み処理の依頼を受け付けると、CM2Aの書き込み処理を実行し、実行が完了すると、当該依頼の応答をHost8に送信する。かかる構成によれば、ストレージ装置1は、Host8からの書き込み処理の依頼に対して、CM2Aの記憶領域の書き込み処理の実行が完了すると、CM2Bの書き込み処理の実行完了を待たないで応答を返すので、Host8への応答にかかる時間を短縮できる。
また、上記実施例1によれば、CM2Bは、CM2Aからの第1の指示に応じて、所定の箇所の割当解放処理を非同期で実行する。CM2Bは、CM2Aからの第2の指示に応じて、書き込み処理が発生した箇所について割当解放処理を先行して実行する。CM2Bは、CM2Aからの第3の指示に応じて、書き込み処理が発生した箇所にデータを書き込み、書き込みが完了したことをCM2Aに応答する。かかる構成によれば、ストレージ装置1は、コピー先で物理データ格納領域の解放処理中に、コピー元から書き込み指示があっても、コピー元に対する書き込み完了応答にかかる時間を短縮できる。
ところで、実施例1では、ECにおけるコピー先のUNMAPに時間がかかる場合に、Writeコマンドに対する応答にかかる時間を短縮するストレージ装置1(ストレージシステム)について説明した。実施例2では、RECにおけるコピー先のストレージ装置のUNMAPに時間がかかる場合に、Writeコマンドに対する応答にかかる時間を短縮する場合について説明する。
[ストレージシステムのハードウェア構成]
図11は、実施例2に係るストレージシステムのハードウェア構成の一例を示す図である。なお、図1に示すストレージ装置1と同一の構成については同一符号を示すことで、その重複する構成および動作の説明については省略する。実施例1と実施例2とが異なるところは、実施例1では、ストレージシステムに1個のストレージ装置1が構成されるのに対して、実施例2では、ストレージシステム9に第1ストレージ装置1Aおよび第2ストレージ装置1Bの2個のストレージ装置が構成される点である。そして、実施例1と実施例2とが異なるところは、IOコントローラ24をRA41に変更した点にある。実施例1と実施例2とが異なるところは、UNMAP制御テーブル231Aの記憶場所をCM2AからCM2Bに変更し、UNMAP制御テーブル231Bに変更した点にある。加えて、UNMAP制御テーブル231Aの記憶場所を変更したことにより、第1UNMAP制御部221、第1更新制御部222を、それぞれ第1UNMAP制御部221A、第1更新制御部222Aに変更した点にある。UNMAP制御テーブル231Aの記憶場所を変更したことにより、第2UNMAP制御部225、第2更新制御部226、読出制御部227を、それぞれ第2UNMAP制御部225B、第2更新制御部226B、読出制御部227Bに変更した点にある。
RA41は、ストレージ装置同士を接続するためのインタフェースを担う。
第1UNMAP制御部221Aは、RECの実行中に、Host8からのUNMAPの要求に応じてコピー元の自己のCM2Aおよびコピー先のCM2BのUNMAP処理を制御する。但し、第1UNMAP制御部221Aは、UNMAPの応答をHost8に返した後は、第2ストレージ装置1Bに対するUNMAP処理に関して関知しない。
例えば、第1UNMAP制御部221Aは、Host8からUNMAPコマンドを受け付けると、UNMAPコマンドに含まれる開始論理アドレス、終了論理アドレス、UNMAPサイズに応じてコピー元のボリュームのUNMAPを実行する。すなわち、第1UNMAP制御部221Aは、開始論理アドレスから終了論理アドレスまでの物理データ格納領域の割り当てを、UNMAPサイズの範囲で解放する。Host8は、コマンドを発行するボリュームの最大UNMAPサイズを意識している。このため、UNMAPコマンドにより指定されるUNMAPサイズは、最大UNMAPサイズ以下として指定されるため、UNMAPは、UNMAPサイズの範囲で終了する。
また、第1UNMAP制御部221Aは、コピー先の第2ストレージ装置1Bに、Host8から受け付けたUNMAPコマンドを発行する。そして、第1UNMAP制御部221Aは、第2ストレージ装置1BからUNMAPコマンドの発行に対する応答を受信すると、Host8に対して、UNMAP完了の応答を返す。この後、第1UNMAP制御部221Aは、第2ストレージ装置1BのUNMAP処理に関して一切関知しない。
第1更新制御部222Aは、Host8からの更新要求に応じて、UNMAP中の更新を制御する。
例えば、第1更新制御部222Aは、Host8からWriteI/Oコマンドを受け付けると、WriteI/Oコマンドに応じて、コピー元のボリュームの更新範囲にデータを更新する。そして、第1更新制御部222Aは、Host8に対して、書き込み完了の応答を返す。そして、第1更新制御部222Aは、第2ストレージ装置1Bに、更新があったことを通知する。
また、第1更新制御部222Aは、コピーセッションが切り離されていなければ、コピー先の第2ストレージ装置1Bに、更新範囲へのデータの更新を指示する。なお、第1更新制御部222Aは、コピーセッションが切り離されていれば、コピー先の第2ストレージ装置1Bに、データの更新を指示しない。
第2UNMAP制御部225Bは、コピー元のUNMAPコマンドの発行に応じて、コピー元と非同期で、UNMAPを実行する。
例えば、第2UNMAP制御部225Bは、コピー元の第1ストレージ装置1AからUNMAPコマンドを受け付けると、UNMAPを管理するために用いられるUNMAP制御テーブル231Bをメモリ23上に獲得し、UNMAPすべき範囲を格納する。そして、第2UNMAP制御部225Bは、第1ストレージ装置1Aに対して、UNMAPコマンドに対する応答を返す。
そして、第2UNMAP制御部225Bは、非同期で、UNMAPコマンドに含まれる開始論理アドレス、終了論理アドレス、UNMAPサイズおよび自己のボリュームの最大UNMAPサイズに応じてコピー先のボリュームのUNMAPを実行する。すなわち、第2UNMAP制御部225Bは、UNMAPサイズが自己のボリュームの最大UNMAPサイズより大きい場合には、開始論理アドレスから終了論理アドレスまでの物理データ格納領域の割り当てを、最大UMAPサイズの範囲ずつ繰り返し解放(UNMAP)する。そして、第2UNMAP制御部225Bは、1回のUNMAPが終了するごとに、終了した範囲および次の処理する論理アドレスをUNMAP制御テーブル231Bに設定する。
そして、第2UNMAP制御部225Bは、UNMAP中に、コピー元の第1ストレージ装置1Aから更新があったことを受け付けると、更新範囲のUNMAPを先行して実行する。そして、第2UNMAP制御部225Bは、更新範囲のUNMAPが終了すると、更新範囲であるUNMAPの終了した範囲をUNMAP制御テーブル231Bに設定する。
そして、第2UNMAP制御部225Bは、UNMAPが完了したら、UNMAP制御テーブル231Bを解放する。
第2更新制御部226Bは、コピー元の第1ストレージ装置1Aの更新指示に応じて、UNMAP中の更新を制御する。例えば、第2更新制御部226Bは、コピー元の第1ストレージ装置1Aの更新指示を受け付けると、更新指示に応じて、コピー先のボリュームの更新範囲にデータを更新する。
読出制御部227Bは、RECの実行中に、Host8からの読み出しの要求に応じて読み出し処理を制御する。
例えば、読出制御部227Bは、Host8からReadコマンドを受け付けると、UNMAP制御テーブル231BのBitmap情報を用いて、読み出し箇所がUNMAP済みであるか否かを判定する。読出制御部227Bは、読出し箇所がUNMAP済みである場合には、Host8に、ボリューム上の読み出し箇所のデータを読み出し応答として返す。読出制御部227Bは、読出し箇所がまだUNMAP済みでない場合には、Host8に、UNMAPしたことを示す「0」データを読み出し箇所のデータとして返す。
[UNMAP制御処理の一例]
図12は、実施例2に係るUNMAP制御処理の一例を示す図である。なお、図12では、第1ストレージ装置をプライマリ装置と称し、同じ符号1Aで表わす。第2ストレージ装置をセカンダリ装置と称し、同じ符号1Bで表わす。
図12では、コピー元のプライマリ装置1AのTypeAの論理ボリューム#1からコピー先のセカンダリ装置1BのTypeBの論理ボリューム#2へのRECの実行中に、Host8からプライマリ装置1AへUNMAPコマンドが発行された場合である。TypeAは、一度にUNMAP可能な最大サイズが10GBである論理ボリュームのタイプである。TypeBは、一度にUNMAP可能な最大サイズが1MBである論理ボリュームのタイプである。すなわち、コピー元の論理ボリュームおよびコピー先の論理ボリュームでは、UNMAPの挙動が異なる。
図12に示すように、プライマリ装置1Aでは、第1UNMAP制御部221Aが、Host8から発行されたUNMAPコマンドを受け付ける(1)。UNMAPコマンドには、「0x00000100」の開始論理アドレス、「0x013fffff」の終了論理アドレスおよび10GBのUNMAPサイズが含まれる。
そして、第1UNMAP制御部221Aは、コピー元の論理ボリューム#1について、開始論理アドレスから終了論理アドレスまでの物理データ格納領域の割り当てを、10GBのUNMAPサイズの範囲で解放する(2)。論理ボリューム#1の一度のUNMAP可能な最大サイズがUNMAPコマンドで指定されたUNMAPサイズと一致するので、第1UNMAP制御部221Aは、一度でUNMAP処理を完了する。
そして、第1UNMAP制御部221Aは、セカンダリ装置1Bに対し、リモート接続している物理経路を介して筐体間通信のUNMAPコマンドを発行する(3)。
セカンダリ装置1Bでは、第2UNMAP制御部225Bが、筐体間通信のUNMAPコマンドを受け付けると、UNMAP制御テーブル231Bをメモリ23上に獲得し、UNMAPすべき範囲を設定する(4)。ここでは、UNMAP制御テーブル231Bには、コピー元ボリューム番号として「1」、コピー先ボリューム番号として「2」が設定される。開始論理アドレスとして「0x00000100」、終了論理アドレスとして「0x013fffff」、処理中論理アドレスとして開始論理アドレスと同じ「0x00000100」が設定される。加えて、Bitmapには、UNMAPが全て未完了であることを示す「1」が設定される。
そして、UNMAP制御テーブル231Bを獲得した第2UNMAP制御部225Bは、プライマリ装置1Aに筐体間通信のUNMAPコマンドに対する応答を返す(5)。
プライマリ装置1Aでは、第1UNMAP制御部225Aが、Host8に対して、UNMAP完了の応答を返す(6)。
セカンダリ装置1Bでは、第2UNMAP制御部225Bが、コピー先の論理ボリューム#2について、非同期でUNMAP処理を実施する(7)。ここでは、第2UNMAP制御部225Bは、コピー先の論理ボリューム#2について、開始論理アドレスから終了論理アドレスまでの物理データ格納領域の割り当てを、10GBのUNMAPサイズの範囲で1MBずつ解放する。
そして、第2UNMAP制御部225Bは、UNMAPが実行されるごとに、UNMAP制御テーブル231Bを更新する(8)。ここでは、処理中論理アドレスとして「0x00000900」が設定される。加えて、Bitmapには、UNMAPが完了したブロックのビットに完了したことを示す「0」が設定される。
そして、第2UNMAP制御部225Bは、10GBのUNMAPサイズの範囲のUNMAPが完了したら、UNMAP制御テーブル231Bを解放する。
[更新制御処理の一例]
図13は、実施例2に係る更新制御処理の一例を示す図である。なお、図13では、第1ストレージ装置をプライマリ装置と称し、同じ符号1Aで表わす。第2ストレージ装置をセカンダリ装置と称し、同じ符号1Bで表わす。
図13では、コピー元のプライマリ装置1Aの論理ボリューム#1からコピー先のセカンダリ装置1Bの論理ボリューム#2へのRECの実行中に、Host8からプライマリ装置1AへWriteI/Oコマンドが発行された場合である。なお、図13では、コピーセッションが切り離されていない場合について説明する。
図13に示すように、プライマリ装置1Aでは、第1更新制御部222Aが、Host8から発行されたWriteI/Oコマンドを受け付ける(1)。WriteI/Oコマンドには、更新箇所および更新すべきデータが含まれる。
そして、第1更新制御部222Aは、WriteI/Oコマンドに応じて、コピー元の論理ボリューム#1の更新範囲にデータを更新する(2)。そして、第1更新制御部222Aは、Host8に対して、書き込み完了の応答を返す(3)。
そして、第1更新制御部222Aは、セカンダリ装置1Bに対し、リモート接続している物理経路を介して筐体間通信を行って、更新があったことを通知する(4)。
セカンダリ装置1Bでは、第2UNMAP制御部225Bは、通信を受け取った後、UNMAP制御テーブル231Bを参照して、更新範囲が既にUNMAP済みであるか否かを判定する。第2UNMAP制御部225Bは、更新範囲がまだUNMAP済みでない場合には、更新範囲でUNMAPを先行して実行する(5)。
そして、第2更新制御部226Bは、更新範囲のUNMAPが実行されると、UNMAP制御テーブル231Bを更新する(6)。ここでは、Bitmapには、UNMAPが完了した更新範囲に対応するビットに、完了したことを示すoff(「0」)が設定される。
プライマリ装置1Aでは、第1更新制御部222Aは、コピーセッションが切り離されていないので、セカンダリ装置1Bに、更新範囲へのデータの更新を指示する。セカンダリ装置1Bでは、第2更新制御部226Bが、更新範囲へのデータの更新指示を受け付けると、更新範囲にデータを更新する(7)。
セカンダリ装置1Bでは、第2更新制御部226Bは、プライマリ装置1AにWrite完了の応答を返す(8)。
[一時切り離し後の更新制御処理の一例]
図14は、実施例2に係る切り離し後の更新制御処理の一例を示す図である。なお、図14では、第1ストレージ装置をプライマリ装置と称し、同じ符号1Aで表わす。第2ストレージ装置をセカンダリ装置と称し、同じ符号1Bで表わす。
図14では、コピーセッションが一時的に切り離された(Suspend)状態の場合であってセカンダリ装置1BでUNMAPが実施されている場合に、Host8からプライマリ装置1AへWriteI/Oコマンドが発行された場合について説明する。かかる場合には、プライマリ装置1Aの第1UNMAP制御部221Aは、Suspend状態のまま、セカンダリ装置1BにUNMAP処理を実行させる。セカンダリ装置1Bの第2UNMAP制御部225Bは、非同期に、UNMAP処理を実行する。
図1に示すように、プライマリ装置1Aでは、第1更新制御部222Aが、Host8から発行されたWriteI/Oコマンドを受け付ける(1)。WriteI/Oコマンドには、更新箇所および更新すべきデータが含まれる。
そして、第1更新制御部222Aは、WriteI/Oコマンドに応じて、コピー元の論理ボリューム#1の更新範囲にデータを更新する(2)。そして、第1更新制御部222Aは、Host8に対して、書き込み完了の応答を返す(3)。そして、第1更新制御部222Aは、セカンダリ装置1Bに対し、リモート接続している物理経路を介して筐体間通信を行って、更新があったことを通知する(4)。
セカンダリ装置1Bでは、第2UNMAP制御部225Bは、通信を受け取った後、UNMAP制御テーブル231Bを参照して、更新範囲が既にUNMAP済みであるか否かを判定する。第2UNMAP制御部225Bは、更新範囲がまだUNMAP済みでない場合には、更新範囲でUNMAPを先行して実行する(5)。
そして、第2更新制御部226Bは、更新範囲のUNMAPが実行されると、UNMAP制御テーブル231Bを更新する(6)。ここでは、Bitmapには、UNMAPが完了した更新範囲に対応するビットに、完了したことを示すoff(「0」)が設定される。
プライマリ装置1Aでは、第1更新制御部222Aは、コピーセッションが切り離されているので、セカンダリ装置1Bに、更新範囲へのデータの更新を指示しない。
そして、セカンダリ装置1Bでは、第2更新制御部226Bが、UNMAPが完了すると、プライマリ装置1Aに対して、UNMAP完了の応答を返す(7)。
[UNMAP発行された場合の処理のフローチャート]
図15は、コピー元へUNMAP発行された場合の処理のフローチャートの一例を示す図である。なお、図15では、コピー元のプライマリ装置1Aからコピー先のセカンダリ装置1BへRECを実行している場合であるとする。
図15に示すように、プライマリ装置1Aでは、第1UNMAP制御部221Aが、Host8からUNMAPコマンドを受け付ける(ステップS61)。UNMAPコマンドには、開始論理アドレス、終了論理アドレス、UNMAPサイズが含まれる。すると、第1UNMAP制御部221Aは、RECのコピー元の論理ボリュームの物理データ格納領域の割り当てを解放する(ステップS62)。
そして、第1UNMAP制御部221Aは、セカンダリ装置1Bに、UNMAPする範囲を含むUNMAP指示を通知する(ステップS63)。そして、第1UNMAP制御部221Aは、Host8に対して、UNMAP完了の応答を返す(ステップS64)。
セカンダリ装置1Bでは、第2UNMAP制御部225Bが、プライマリ装置1AからUNMAP指示を受け付ける(ステップS65)。そして、第2UNMAP制御部225Bは、UNMAP制御テーブル231Bをメモリ23の空間上に作成し、UNMAP制御テーブル231Bに開始論理アドレスおよび終了論理アドレスを記憶する(ステップS66)。
そして、第2UNMAP制御部225Bは,プライマリ装置1AにUNMAP指示の応答を返す(ステップS67)。そして、第2UNMAP制御部225Bが、非同期で、UNMAPすべく、UNMAPする範囲を決定する(ステップS68)。そして、第2UNMAP制御部225Bは、決定したUNMAPする範囲の物理データ格納領域の割り当てを解放(UNMAP)する(ステップS69)。
そして、第2UNMAP制御部225Bは、UNMAP終了に応じて、UNMAP制御テーブル231Bの、処理中論理アドレスとBitmap情報を更新する(ステップS70)。すなわち、第2UNMAP制御部225Bは、UNMAP制御テーブル231Bについて、処理中論理アドレスを更新するとともに、開始論理アドレスから終了論理アドレスまでの範囲で、UNMAPが終了した範囲をBitmapに設定する。
そして、第2UNMAP制御部225Bは、UNMAPすべき範囲でコピー先の全ての領域を解放したか否かを判定する(ステップS71)。コピー先の全ての領域を解放していないと判定した場合には(ステップS71;No)、第2UNMAP制御部225Bは、次回解放すべき範囲を決定する(ステップS72)。そして、第2UNMAP制御部225Bは、ステップS69に移行する。
一方、コピー先の全ての領域を解放したと判定した場合には(ステップS71;Yes)、第2UNMAP制御部225Bが、UNMAP制御テーブル231Bを解放する(ステップS73)。
[UNMAP処理中のコピー元へ更新発行された場合の処理のフローチャート]
図16は、UNMAP処理中のコピー元へ更新発行された場合の処理のフローチャートの一例を示す図である。なお、図16では、コピー元のプライマリ装置1Aからコピー先のセカンダリ装置1BへRECを実行している場合であり、さらにUNMAP処理中である場合であるとする。
図16に示すように、プライマリ装置1Aでは、第1更新制御部222Aが、Host8からWriteI/Oコマンドを受け付ける(ステップS81)。すると、第1更新制御部222Aは、RECのコピー元の論理ボリュームの更新範囲にデータを更新する(ステップS82)。そして、第1更新制御部222Aは、Host8に対して、書き込み完了の応答を返す(ステップS83)。
第1更新制御部222Aは、セカンダリ装置1Bにデータ転送コマンドを発行する(ステップS84)。
セカンダリ装置1Bでは、第2更新制御部226Bが、データ転送コマンドを受信する(ステップS85)。第2更新制御部226Bは、更新範囲のBitmap情報をチェックし(ステップS86)、更新範囲に相当するコピー先の領域が既にUNMAP済みであるか否かを判定する(ステップS87)。UNMAP済みであると判定した場合には(ステップS87;Yes)、第2更新制御部226Bは、ステップS90に移行する。
一方、UNMAP済みでないと判定した場合には(ステップS87;No)、第2UNMAP制御部225Bは、コピー先の更新範囲の論理ボリュームの物理データ格納領域の割り当てを解放する(ステップS88)。
そして、第2UNMAP制御部225Bは、UNMAP制御テーブル231Bの、処理中論理アドレスとBitmap情報を更新する(ステップS89)。すなわち、第2UNMAP制御部225Bは、UNMAP制御テーブル231Bについて、処理中論理アドレスを更新するとともに、開始論理アドレスから終了論理アドレスまでの範囲で、UNMAPを終了させた更新範囲をBitmapに設定する。そして、第2更新制御部226Bは、ステップS90に移行する。
ステップS90において、プライマリ装置1Aでは、第1更新制御部222Aが、RECのコピーセッションが一時切り離し状態であるか否かを判定する(ステップS90)。RECのコピーセッションが一時切り離し状態でないと判定した場合には(ステップS90;No)、第1更新制御部222Aは、コピー先に対して、更新範囲にデータを書き込ませるべく、当該データを転送する(ステップS91)。そして、第1更新制御部222Aは、ステップS92に移行する。
一方、RECのコピーセッションが一時切り離し状態であると判定した場合には(ステップS90;Yes)、第1更新制御部222Aは、コピー先に対して、データを転送しないで、ステップS92に移行する。
ステップS92において、セカンダリ装置1Bでは、第2更新制御部226Bが、プライマリ装置1Aにデータ転送コマンドにおける通信の応答を返す(ステップS92)。そして、プライマリ装置1Aでは、第1更新制御部222Aが、更新制御処理を終了する。
[実施例2の効果]
上記実施例2によれば、ストレージシステム9は、第1ストレージ装置1Aから第2ストレージ装置1Bへコピー処理を行う。第1ストレージ装置1Aは、第1ストレージ装置1Aの記憶領域の割当解放処理を実行する。第1ストレージ装置1Aは、第2ストレージ装置1Bの割当解放処理中に、書き込み処理が発生した場合に、書き込み処理を実行する。第2ストレージ装置1Bは、第1ストレージ装置1Aから割当解放処理の依頼を受け付けると、自装置の割当解放処理を管理するために用いられるUNMAP制御テーブル231Bを生成する。第2ストレージ装置1Bは、割当解放処理を非同期で実行し、UNMAP制御テーブル231Bを用いて、割当解放処理の進捗情報を管理する。第2ストレージ装置1Bは、第1ストレージ装置1Aから書き込み処理の依頼を受け付けると、UNMAP制御テーブル231Bを用いて、書き込み処理が発生した箇所の割当解放処理が完了したか否かを判定し、完了していなければ、当該箇所の割当解放処理を完了してから書き込み処理を実行する。かかる構成によれば、ストレージシステム9は、コピー元とコピー先との間でコピー処理を行う場合であって物理データ格納領域の解放処理中に解放範囲にデータの更新要求がされても、更新要求に対する応答にかかる時間を短縮できる。
また、上記実施例2によれば、第2ストレージ装置1Bは、第1ストレージ装置1Aからの第1の指示に応じて、所定の箇所の割当解放処理を非同期で実行する。第2ストレージ装置1Bは、第1ストレージ装置1Aからの書き込みがあったことを示す第2の指示に応じて、UNMAP制御テーブル231Bを用いて、書き込み処理が発生した箇所について割当解放処理を先行して実行する。第2ストレージ装置1Bは、第1ストレージ装置1Aからの第3の指示に応じて、書き込み処理が発生した箇所にデータを書き込み、書き込みが完了したことを第1ストレージ装置1Aに応答する。かかる構成によれば、ストレージシステム9は、コピー先で物理データ格納領域の解放処理中に、コピー元から書き込み指示があっても、コピー元に対する書き込み完了応答にかかる時間を短縮できる。
[その他]
なお、実施例では、コピー元だけでなくコピー先もシンプロビジョニングである場合について説明した。しかしながら、実施例では、これに限定されず、コピー元はシンプロビジョニングであるが、コピー先はシンプロビジョニングでない場合であっても良い。かかる場合には、第2UNMAP制御部225は、コピー元からUNMAP指示を受け付けると、UNMAP指示に含まれる開始論理アドレス、終了論理アドレス、UNMAPサイズに応じて、UNMAPに代えてUNMAP対象範囲の更新を実行すれば良い。すなわち、第2UNMAP制御部225は、開始論理アドレスから終了論理アドレスまでのUNMAPサイズを全て「0」に更新すれば良い。
なお、実施例では、図示した装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、装置の分散・統合の具体的態様は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、第1UNMAP制御部221と第2UNMAP制御部225とを1個の部として統合しても良い。第1更新制御部222と第2更新制御部226とを1個の部として統合しても良い。第1コピー制御部224と第2コピー制御部228とを統合しても良い。また、メモリ23に記憶されたUNMAP制御テーブル231Aをストレージ装置1の外部装置としてネットワーク経由で接続するようにしても良い。また、メモリ23に記憶されたUNMAP制御テーブル231Bを第2ストレージ装置1Bの外部装置としてネットワーク経由で接続するようにしても良い。
また、実施例1,2では、CM2A、2Bが有する機能をソフトウェアによって実現することで、同様の機能を有する、例えば割当解放プログラムを得ることができる。例えば、メモリ23は、割当解放プログラムやプログラムの実行途中結果などを記憶する。プロセッサ22は、メモリ23から割当解放プログラムを読み出して実行する。
また、割当解放プログラムについては、必ずしも最初からメモリ31に記憶させておかなくても良い。例えば、CM2AおよびCM2Bに挿入されるフレキシブルディスク(FD)、CD-ROM(Compact Disk Read Only Memory)、DVD(Digital Versatile Disk)ディスク、光磁気ディスク、IC(Integrated Circuit)カード等の「可搬用の物理媒体」に当該プログラムを記憶させておく。そして、CM2AおよびCM2Bがこれらから割当解放プログラムを読み出して実行するようにしても良い。