実施形態について、図面を参照して説明する。なお、以下に説明する実施形態は特許請求の範囲に係る発明を限定するものではなく、また実施形態の中で説明されている諸要素及びその組み合わせのすべてが発明の解決手段に必須であるとは限らない。
なお、以下の説明では、「xxxテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「xxxテーブル」を「xxx情報」と呼ぶことができる。
また、以下の説明では、種々の対象(例えば、ボリューム、チャンク、ページ等)の識別情報の種類として、番号が採用されるが、他種の識別情報が採用されても良い。
また、以下の説明において、後述するコントローラが行う処理の少なくとも一部は、プロセッサ(例えばCPU(Central Processing Unit))がコンピュータプログラムを実行することによって行われる。プロセッサは、CPUそれ自体であっても良いし、CPUが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。プログラムは、プログラムソースから各コントローラにインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
以下、実施形態を詳細に説明する。
図1は、実施形態に係る計算機システムの全体構成図である。
計算機システムは、ストレージシステムの一例としてのストレージ装置1と、ホスト計算機(以下、単に「ホスト」ということもある)2と、管理端末3とを有する。ストレージ装置1、ホスト2、管理端末3の数は、1以上とすることができる。ストレージ装置1と、ホスト2とは、通信ネットワーク(例えば、SAN(Storage Area Network))5を介して相互に接続されている。また、ストレージ装置1と、管理端末3は、通信ネットワーク(例えば、LAN(Local Area Network))6を介して相互に接続されている。ストレージ装置1は、ホスト2で利用されるデータを記憶する。ホスト2は、各種処理を実行し、ストレージ装置1からデータを読み出したり、ストレージ装置1へデータを書き込んだりする。管理端末3は、図示しないCPUが管理プログラム31を実行することにより各種処理を行う。管理端末3は、表示装置を有し、その表示装置にストレージ装置1の管理用の画面を表示することができる。管理端末3は、管理操作リクエストをユーザー(例えば、管理端末3のオペレーター)から受け付け、管理操作リクエストをストレージ装置1に対して送信する。
ストレージ装置1は、コントローラ11と、複数のディスク装置12とを有する。各コントローラ11は、図示しない内部バスを介して各ディスク装置12に接続されている。また、本実施形態では、複数のディスク装置12に基づく記憶領域(以下、プール)14が形成されている。
ディスク装置12は、ディスク型の記憶メディアのドライブであり、ホスト2からのライト要求に従うデータを記憶する。ストレージ装置1においては、ディスク装置12に加えて、又は、ディスク装置12に代えて、他種の記憶メディアを有する記憶デバイス(例えばフラッシュメモリドライブ)を備えても良い。
図2は、実施形態に係る正ボリュームと副ボリュームとの関係の一例を説明する図である。
正ボリューム(PVOL)301は、ホスト2が処理に利用するデータが書き込まれるボリュームである。PVOL301は、複数のディスク装置12で構成されたRAIDグループ(所定のRAID(Redundant Array of Independent (or Inexpensive) Disks)レベルでデータを記憶するディスク装置群)に基づく実体的な論理ボリュームであっても良いし、RAIDグループに基づかない仮想的な論理ボリューム(例えば、シンプロビジョニングに従うボリューム、或いは、外部のストレージ装置の記憶資源(例えば論理ボリューム)がマッピングされたボリューム)であっても良い。一方、各副ボリューム(SVOL)15は、PVOL301のスナップショット、すなわち、PVOL301に対するスナップショット取得時点におけるスナップショットイメージ(PVOL301のイメージ)を記憶するボリュームである。SVOL15は、仮想的な論理ボリュームであり、SVOL15が記憶するデータは、実際には、PVOL301又はプール14に記憶される。本実施形態においては、SVOL15に、世代番号(世代#)が関連付けられる。世代#は、スナップショットの取得時点に相当する。つまり、SVOL15に関連付けられている世代#は、そのSVOL15(スナップショット)の世代を意味する。世代#は、古い世代から順に、世代#1、世代#2、世代#3・・・となっている(つまり、旧い世代ほど世代番号が若い)。
世代#2と世代#3の間において、PVOL301内の領域R9に更新(データの書き込み)が発生した場合には、PVOL301内の領域R9のデータはプール14内の領域R6に退避される。このため、世代#3のSVOL15内の領域R10は、PVOL301内の領域R9を参照するように設定され、世代#3のSVOL15内の領域R10に対応する、世代#1のSVOL15内の領域R7、及び、世代#2のSVOL15内の領域R8は、プール14内の領域R6を参照するように設定される。
また、世代#1のSVOL15内の領域R2、及び、世代#2のSVOL15内の領域R3は、PVOL301内の領域R1を参照するように設定されている。このとき、世代#1のSVOL15内の領域R2、及び、世代#2のSVOL15内の領域R3に対応する、世代#3のSVOL内の領域R4に対して、更新(データの書き込み)が発生した場合には、世代#3のSVOL15内の領域R4は、プール14内の領域R5を参照するように設定される。またこの場合、世代#3と世代#4の間にPVOL301内の領域R1に対して更新が行われず、かつ、世代#3内のSVOL15内の領域R4に対応する世代#4の領域(図示なし)に対して更新が行われない場合は、その世代#4の領域は、PVOL301内の領域R1を参照するように設定される。
図3は、実施形態に係るコントローラの構成図である。
コントローラ11は、通信インタフェースデバイスと、記憶デバイスと、それらに接続された制御デバイスとを有する。通信インタフェースデバイスは、例えば、上位インターフェース(上位I/F)113と、下位インターフェース(下位I/F)114と、インターフェース(I/F)115とである。記憶デバイスは、例えば、メモリ111である。制御デバイスは、例えば、CPU112である。コントローラ11は、更に、ブリッジ116を有する。ブリッジ116は、メモリ111と、CPU112と、上位I/F113と、下位I/F114と、I/F115とを相互に通信可能に接続する。
メモリ111は、1以上の同種或いは異種のメモリで構成される。メモリ111は、制御に必要なデータ及びプログラムを記憶する。具体的には、例えば、メモリ111は、管理プログラム117と、コピー処理プログラム119と、I/O処理プログラム120とを記憶する。管理プログラム117は、ペア情報管理テーブル1171と、PVOL管理テーブル1172と、SVOL管理テーブル1173とを管理し、スナップショット及び/又はプール14の管理処理を実行する。コピー処理プログラム119は、データのコピー処理を実行する。I/O処理プログラム120は、他のプログラムを適宜呼び出して、データの入出力処理を実行する。
また、メモリ111は、キャッシュ領域121を有する。キャッシュ領域121は、例えば、SRAMやEEPROM(Electrically Erasable Programmable Read Only Memory)等の不揮発性メモリ、あるいは、バッテリーバックアップされたDRAM等で構成され、ストレージ装置1がシャットダウン状態であっても揮発させないようにするデータを格納する。
CPU112は、メモリ111に格納されたプログラムを実行することにより、各部を制御して各種処理を実行する。上位I/F113は、ホスト2との通信を仲介する。上位I/F113は、例えば、Fibre Channel(FC),iSCSI等であってもよい。下位I/F114は、ディスク装置12との通信を仲介する。下位I/F114は、例えば、FC、SAS、SATA等のディスクI/Fである。I/F115は、管理端末3との通信を仲介する。
図4は、実施形態に係るペア情報管理テーブルを説明する図である。なお、以下の説明では、適宜、論理ボリュームを「VOL」と記載する。
ペア情報管理テーブル1171は、PVOL番号(PVOL#)と、最新世代番号(最新世代#)と、ペアIDと、SVOL番号(SVOL#)と、世代番号(世代#)と、ステータスとを対応付けたレコードを管理する。
PVOL#は、コピー元となるボリューム(PVOL)をストレージ装置1内で一意に特定する番号である。最新世代#は、対応するPVOLにおける最新のスナップショットの世代番号である。ペアIDは、PVOLとSVOLとのペア(コピーペア)を一意に特定する番号である。SVOL#は、コピー先となるボリューム(SVOL)をストレージ装置1内で一意に特定する番号である。世代#は、対応するSVOLが格納するスナップショットの世代番号である。ステータスは、対応するコピーペアの状態である。ステータスとしては、スナップショットを保持している状態を示すSnapshot保持と、Snapshotを取得していない状態を示すSnapshot未取得と、対応する世代のPVOLのリストアを実行している状態を示すリストア中がある。PVOLのリストアでは、そのPVOLの世代に対応するSVOL内のデータが、そのSVOL以外のVOLであるリストア先VOL(例えばPVOL)にコピーされる。これにより、リストア先VOLは、SVOLの複製、言い換えれば、或る時点のPVOLとなる。
例えば、同図における一番上のレコードは、VOL#0のVOLがPVOLであり、その最新世代番号は、3であり、VOL#6のSVOLと、コピーペアが構成され、そのペアIDが0であり、このSVOLは、世代番号が1であり、スナップショットを保持していることを示している。
図5は、実施形態に係るPVOL管理テーブルを説明する図である。
PVOL管理テーブル1172は、PVOL番号(PVOL#)と、領域IDと、退避状態と、リストア状態と、CAW属性と、世代番号(世代#)とを対応付けたレコードを管理する。
PVOL#は、コピー元となるVOL(PVOL)をストレージ装置1内で一意に特定する番号である。領域IDは、領域特定情報の一例であり、VOLにおいて区分されている領域(スロット)を特定する番号である。退避状態は、PVOLにおける領域に書き込まれるデータがプール14に退避されているか否かを示す情報である。退避状態としては、例えば、データを退避していることを示す「退避済み」と、データを退避していないことを示す「未退避」とがある。例えば、PVOLにおける領域について、少なくとも1のSVOLが参照している場合には、「未退避」が設定されるようにしてもよい。リストア状態は、PVOLに対するリストアが実行された際のリストアの状態を示す情報である。リストア状態としては、PVOLのリストアが実行されていない場合には、「−」が設定され、PVOLのリストアが実行されている場合であって、対応する領域のリストアが済んでいる場合には「済み」が設定され、対応する領域のリストアが済んでいない場合には「未」が設定される。CAW属性は、当該領域についてライトされた際に、対応するPVOLの領域からデータを退避させるコピーを実行する必要がある場合には、「ON」が設定され、対応するPVOLの領域からデータを退避させる必要がない場合には、「OFF」が設定される。世代#は、該当する領域に書き込むべきデータ(キャッシュ領域121内のデータ(データ要素))に対応するスナップショットの世代番号を識別するための情報である。本実施形態では、最新のスナップショット取得時点以降に書き込まれたデータ要素の世代#としては、書き込まれた時点のスナップショットの最新世代#+1が設定される。ここで、この世代番号が、PVOLに対するスナップショット取得時点との時間的関係を示す時間関係情報の一例である。なお、世代#に代えて、スナップショット取得時間が管理されてもよく、要は、データ要素について、各スナップショットの取得時点との一致又は前後等の時間関係を把握できる情報であればよい。
例えば、同図における2番目のレコードは、VOL#が0のVOL内の領域#が1の領域においては、データ要素が未退避であり、リストアは実行されておらず、当該領域のキャッシュに書き込まれたデータがディスクに書き込まれる前に、データの退避が必要であることを示し、当該領域のデータは、世代#は、2であることを示している。
図6は、実施形態に係るSVOL管理テーブルを説明する図である。
SVOL管理テーブル1173は、VOL番号(VOL#)と、領域IDと、退避状態と、SVOL更新属性と、更新位置ビットマップ(BM)と、ページIDとを対応付けたレコードを管理する。
VOL#は、SVOLをストレージ装置1内で一意に特定する番号である。領域IDは、VOLにおいて区分されている領域を特定する番号である。退避状態は、SVOLにおける領域に書き込まれるデータがプール14に退避されているか否かを示す情報である。退避状態としては、例えば、データを退避している(すなわち、対象となる領域がプール内の領域を参照している)ことを示す「退避済み」と、データを退避していない(すなわち、対象となる領域がPVOL内の領域を参照している)ことを示す「未退避」とがある。加えて、退避済みとなったデータが格納されたプール14内の領域を2つ以上のSVOLが参照している場合には、共有状態を示す「共有」が設定される。SVOL更新属性は、対象のSVOL領域(SVOL内の領域)が参照するPVOL領域(PVOL内の領域)からデータを退避させる必要があるか否かを意味する。SVOL更新属性としては、PVOL領域からデータを退避させる必要がある場合には、「ON」が設定され、その必要がない場合には、「OFF」が設定される。更新位置BMは、対象のSVOL領域(スロット)におけるデータ更新位置を表す。例えば、スロット(例えば256KB)は、複数のサブブロック(例えば512byte)に分割されていて、更新位置BMは、複数のサブブロックにそれぞれ対応した複数のビットで構成されている。サブブロック内のデータが更新された場合、ビットは例えば「1」とされ、サブブロック内のデータが未更新の場合、ビットは例えば「0」である。具体的には、例えば、図7の上から2番目のレコードは、VOL#0のSVOLの領域#1のスロットについて、更新位置BMは「00111000・・・」である。これは、スロットの3〜5番目のサブブロックのデータが更新されており、スロットの1〜2及び6〜8番目のサブブロックのデータは更新されていないことを意味する。ページIDは、対象の領域のデータが格納されるプール14内の領域(ページ)を特定する番号である。ページは、対象の領域(SVOL内の領域)に参照されるページである。例えば、同図の一番上のレコードは、VOL#0のVOLの領域#0の領域について、割り当てられたプール内のページIDが10であることを示している。
次に、ストレージ装置1で行われる動作を説明する。
図7は、実施形態に係るストレージ装置におけるPVOLライト処理の概要を説明する図である。
コントローラ11は、PVOL301を指定したライト(WR)要求(ライト要求)をホスト2から受領した時に、CAW(Copy after write)実行の可否を判断する(図中(1))。コントローラ11は、PVOL301内の書き込み先の領域(スロット)からデータを未退避であって、キャッシュ領域121に確保されたキャッシュサブ領域(以下、「確保領域」と言うことがある)内がホストダーティでない場合には、PVOL301内のライト先領域について、CAW属性をONにし、世代#として、最新世代番号(最新世代#)+1(つまり最新世代番号に1を加算した値)を登録する(図中(2))。ここで、「確保領域がホストダーティでない」とは、確保領域内に保持されたデータが、PVOL301に格納されていないデータ(ダーティデータ)でないことをいう。また、CAW属性のONは、ディスクへ書き込む前にデータの退避が必要であることを意味し、CAW属性のOFFは、ディスクへ書き込む前にデータの退避が必要ではないことを意味する。スロットとは、キャッシュ領域121またはディスク領域における管理単位である所定の容量単位の領域である。スロットサイズは、例えば、ホスト2からのライト要求時のライトデータのサイズよりも大きくてもよい。なお、本実施形態では、PVOLがスロットと同じサイズの領域に分割して管理されており、PVOLにおける分割された領域もスロットと言うこととする。
次いで、コントローラ11は、ライト要求に従うライト対象のデータ(WRデータ:ライトデータ)をホスト2から受けとって、確保領域におけるライト面(W面)(ボリュームに書き込むデータを記憶する領域)にライトデータを書き込む。次いで、コントローラ11は、ホスト2にライト要求に対するレスポンスを送信する(図中(4))。
これとは、非同期で(バックエンドで)、コントローラ11は、PVOL301内のライト先領域についてのCAW属性を検出する(図中(5))。コントローラ11は、CAW属性がONの場合には、確保領域におけるリード面(R面)(ボリュームから読み出されたデータを記憶する領域)に、その確保領域におけるW面が記憶するデータのライト先領域(PVOL内の領域(スロット))の更新前のデータがキャッシュされているかを判定する。コントローラ11は、キャッシュミスの場合には、ステージング、すなわち、PVOL301内のライト先領域からデータを確保領域内のR面に読み出す(図中(6))。次いで、コントローラ11は、ライト先領域(PVOL301内の領域)に対応する、SVOL15内の領域に、プール14から領域(ページ)を割り当て(図中(7))、当該ページに、R面に読み出したデータを退避する(以下、このデータを退避データという)(図中(8))。ここで、ページとは、プール14において割り当てを行う単位領域をいう。ページのサイズは、例えば、スロットと同じサイズでよい。なお、この処理の後、コントローラ11は、ライトデータをライト要求に従うPVOL301内の領域に格納する。このとき、例えば、PVOL301の基となるRAIDグループ(例えば、RAIDレベルが5の場合)において、退避データを含むデータ(例えば、PVOL301内におけるパリティデータを生成するために必要な連続する複数のスロット(以下、パリティ列という)に格納されたデータ)によって生成されたパリティデータ(以下、旧パリティという)を格納している場合には、旧パリティ、退避データ及びライトデータによりリードモディファイライトを行うことによって(これらについてXOR演算を行うことによって)新たなパリティデータを生成しPVOL301内に反映しても良い。
図8は、実施形態に係るPVOLライト処理の第1のフローチャートである。
図8に示すように、PVOLライト処理においては、ストレージ装置1のコントローラ11は、ホスト2からライト要求を受領すると(ステップS1)、ペア情報管理テーブル1171におけるライト要求のライト対象のPVOL#のステータスを参照することにより、ライト要求に対応するPVOLがリストア中であるか否かを判定する(ステップS2)。ここで、ライト要求には、例えば、ライトデータを書き込むPVOLを示すLUN(論理ユニット番号)と、PVOLにおけるライト先領域に属するLBA(論理ブロックアドレス)とが含まれており、LUN及びLBAにより、PVOLのVOL#及びライト先領域の領域IDとを特定することができる。
ステップ2の判定の結果、リストア中である場合(ステップS2でYes)には、コントローラ11は、ポイントP(図13参照)に処理を進める。一方、リストア中でない場合(ステップS2でNo)、又は、ポイントRから進んできた場合には、コントローラ11は、PVOL管理テーブル1172に基づいて、ライト要求のライト対象の領域を含むスロットについてステータスが「Snapshot保持あり」であるか否かを判定する(ステップS3)。
この結果、「スナップショット保持あり」でない場合(ステップS3でNo)には、コントローラ11は、ポイントN(図10参照)に処理を進める。一方、「スナップショット保持あり」である場合(ステップS3でYes)には、コントローラ11は、PVOL管理テーブル1172を参照し、当該スロットが未退避であるか否か、すなわち、当該スロットに書き込むべきキャッシュ領域121のデータ要素が未退避であるか否かを判定する(ステップS4)。この結果、当該スロットが未退避でない場合(ステップS4でNo)には、コントローラ11は、ポイントN(図10参照)に処理を進める。一方、当該スロットが未退避である場合(ステップS4でYes)には、PVOL管理テーブル1172を参照し、当該スロットのCAW属性がONであるか否かを判定する(ステップS5)。
この結果、CAW属性がONではない場合(ステップS5でNo)には、コントローラ11は、キャッシュ領域121のキャッシュ状態がホストダーティであるか、すなわち、当該スロットに対応するキャッシュ領域121のW面に、データがあるか否かを判定し(ステップS6)、ホストダーティでない場合(ステップS6でNo)には、ポイントA(図9参照)に処理を進める一方、ホストダーティである場合(ステップS6でYes)には、ポイントB(図11参照)に処理を進める。
一方、ステップS5の結果、CAW属性がONの場合(ステップS5でYes)には、コントローラ11は、当該領域の世代#が最新世代#より大きいか否かを判定する(ステップS7)。この結果、当該領域の世代#が最新世代#より大きい場合(ステップS7でYes)には、当該領域に書き込むべきキャッシュ領域121のデータは、最新のスナップショットを取得した時点よりも後に更新されたデータであって、スナップショットを構成するデータ(スナップショット構成要素)ではないことを意味しているので、コントローラ11は、ポイントN(図10参照)に処理を進める。一方、当該領域の世代#が最新世代#以下の場合(ステップS7でNo)には、当該領域に書き込むべきキャッシュ領域121のデータが書き込まれた時点よりも後で、次のスナップショットの取得がされていることを示し、当該キャッシュ領域121のデータは、スナップショット構成要素であることを意味しているので、ポイントC(図12参照)に処理を進める。
図9は、実施形態に係るPVOLライト処理の第2のフローチャートである。
ポイントAに処理を進めると、図9に示すように、コントローラ11は、PVOL管理テーブル1172のライト要求に対応する領域のCAW属性をONに設定し(ステップS11)、当該領域の世代#に、ペア情報管理テーブル1171の対応するPVOLの最新世代#に1を加算した値を設定する(ステップS12)。これにより、当該領域に格納すべきキャッシュ領域121のデータが、最新のスナップショット取得時よりも後に更新されたデータであることが把握できるようになる。次いで、コントローラ11は、当該領域に書き込むべきライトデータをメモリ111のキャッシュ領域121に格納し(ステップS13)、ライト要求に対する応答をホスト2に対して送信する(ステップS14)。
図10は、実施形態に係るPVOLライト処理の第3のフローチャートである。
ポイントNに処理を進めると、図10に示すように、コントローラ11は、ライトデータをメモリ111のキャッシュ領域121に格納し(ステップS21)、ライト要求に対する応答をホスト2に対して送信する(ステップS22)。これにより、キャッシュ領域121のデータは、新たなライトデータに更新される。
図11は、実施形態に係るPVOLライト処理の第4のフローチャートである。
ポイントBに処理を進めると、図11に示すように、コントローラ11は、PVOL管理テーブル1172に基づいて、ライト対象のPVOLの領域に対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、当該世代#のSVOLを特定し、ライト対象の領域に対応する当該SVOLの領域に対してプール14から領域を割り当て、SVOL管理テーブル1173を、割り当てに従って更新する(ステップS31)。すなわち、SVOLの該当する領域に割り当てたページのページIDを設定する。次いで、コントローラ11は、キャッシュ領域121に格納されているPVOLのデータを割り当てられた領域(ページ)にコピーする(ステップS32)。なお、キャッシュ領域121に格納されているデータが、スロットの一部のデータのみである場合には、PVOLの対応するスロットのデータをキャッシュ領域121のR面に読み出し、スロットの足りない部分のデータをR面に読み出したデータで補充した後に、割り当てられたページにコピーする。
次いで、コントローラ11は、PVOL管理テーブル1172の当該領域に対応する退避状態に退避済みを設定し(ステップS33)、ライトデータをメモリ111のキャッシュ領域121に格納し(ステップS34)、ライト要求に対する応答をホスト2に対して送信する(ステップS35)。
図12は、実施形態に係るPVOLライト処理の第5のフローチャートである。
ポイントCに処理を進めると、図12に示すように、コントローラ11は、PVOL管理テーブル1172に基づいて、ライト対象のPVOLの領域に対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、ひとつ前の世代のSVOL、すなわち、当該世代#−1のSVOLを特定し、ライト対象の領域に対応する当該SVOLの領域に対してプール14からページを割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS41)。次いで、コントローラ11は、PVOLに格納されている対応する領域のデータ(旧データ:現在よりひとつ前の世代のスナップショットを構成するデータ)を割り当てられたページにコピーし(ステップS42)、PVOL管理テーブル1172の対応する領域のCAW属性をOFFに設定する(ステップS43)。これにより、ひとつ前の世代のスナップショット構成要素を適切にひとつ前の世代のスナップショットイメージを管理するSVOLに退避することができる。
次いで、コントローラ11は、PVOL管理テーブル1172に基づいて、ライト対象のPVOLの領域に対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、当該世代#のSVOLを特定し、ライト対象の領域に対応する当該SVOLの領域に対してプール14からページを割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS44)。次いで、コントローラ11は、キャッシュ領域121に格納されているPVOLに書き込むべきデータ(現在の世代のスナップショット構成要素)を割り当てられたページにコピーし(ステップS45)、PVOL管理テーブル1172の対応する領域の退避状態を退避済みに設定し、世代#を削除する(ステップS46)。これにより、現在の世代のスナップショット構成要素を適切に現在の世代のスナップショットイメージを管理するSVOLに退避することができる。また、PVOLの一つの領域に対応するキャッシュ領域121のデータ要素についての退避処理であるので、比較的短時間で処理を終了することができる。
コントローラ11は、ライトデータをメモリ111のキャッシュ領域121に格納し(ステップS47)、ライト要求に対する応答をホスト2に対して送信する(ステップS48)。この処理によると、PVOLの一つの領域に対応するデータ要素についての退避処理を2回行なうことになるが、2回目はキャッシュ領域のデータを使用できるのでレスポンス時間の悪化を最小限に抑えることができる。
図13は、実施形態に係るPVOLライト処理の第6のフローチャートである。
ポイントPに処理を進めると、図13に示すように、コントローラ11は、PVOL管理テーブル1172を参照し、ライト要求に対応するPVOLの領域におけるリストアが未実行であるか否かを判定し(ステップS51)、リストアが実行されて完了している場合(ステップS51でNo)には、ポイントR(図8参照)に処理を進める。一方、リストアが未実行の場合(ステップS51でYes)には、コントローラ11は、PVOL管理テーブル1172を参照し、対応する領域に格納すべきキャッシュ領域121のデータ要素が未退避であるか否かを判定する(ステップS52)。この結果、未退避でない場合(ステップS52でNo)には、ポイントS(図14参照)に進む。一方、対応する領域が未退避である場合(ステップS52でYes)には、PVOL管理テーブル1172を参照し、当該スロットのCAW属性がONであるか否かを判定する(ステップS53)。
この結果、CAW属性がONではない場合(ステップS53でNo)には、コントローラ11は、キャッシュ状態がホストダーティであるか、すなわち、キャッシュ領域121のW面にデータがあるか否かを判定し(ステップS54)、ホストダーティでない場合には、ポイントT(図15参照)に処理を進める(ステップS54でNo)一方、ホストダーティである場合(ステップS54でYes)には、ポイントU(図16参照)に処理を進める。
一方、ステップS53の結果、CAW属性がONの場合(ステップS53でYes)には、コントローラ11は、当該領域の世代#が最新世代#より大きいか否かを判定し(ステップS55)、当該領域の世代#が最新世代#より大きい場合(ステップS55でYes)には、処理をポイントS(図14参照)に進める一方、当該領域の世代#が最新世代#以下の場合(ステップS55でNo)には、ポイントW(図17参照)に処理を進める。
図14は、実施形態に係るPVOLライト処理の第7のフローチャートである。
ポイントSに処理を進めると、図14に示すように、コントローラ11は、対応する領域について、SVOLからPVOLへのリストアコピーを実行し(ステップS61)、PVOL管理テーブル1172の対応する領域のリストア状態をリストア済みに設定する(ステップS62)。次いで、コントローラ11は、ライトデータをメモリ111のキャッシュ領域121に格納し(ステップS63)、ライト要求に対する応答をホスト2に対して送信する(ステップS64)。
図15は、実施形態に係るPVOLライト処理の第8のフローチャートである。
ポイントTに処理を進めると、図15に示すように、コントローラ11は、PVOL管理テーブル1172のライト要求に対応する領域のCAW属性をONに設定し(ステップS71)、当該領域の世代#に、ペア情報管理テーブル1171の対応するPVOLの最新世代#に1を加算した値を設定する(ステップS72)。これにより、当該領域に格納すべきキャッシュ領域121のデータが、最新のスナップショット取得時よりも後に更新されたデータであることが把握できるようになる。次いで、コントローラ11は、対応する領域について、SVOLからPVOLへのリストアコピーを実行し(ステップS73)、PVOL管理テーブル1172の対応する領域のリストア状態をリストア済みに設定する(ステップS74)。次いで、コントローラ11は、ライトデータをメモリ111のキャッシュ領域121に格納し(ステップS75)、ライト要求に対する応答をホスト2に対して送信する(ステップS76)。
図16は、実施形態に係るPVOLライト処理の第9のフローチャートである。
ポイントUに処理を進めると、図16に示すように、コントローラ11は、PVOL管理テーブル1172に基づいて、ライト対象のPVOLの領域に対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、当該世代#のSVOLを特定し、ライト対象の領域に対応する当該SVOLの領域に対してプール14からページを割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS81)。次いで、コントローラ11は、キャッシュ領域121に格納されているPVOLのデータを割り当てられた領域にコピーする(ステップS82)。なお、キャッシュ領域121に格納されているデータが、スロットの一部のデータのみである場合には、PVOLの対応するスロットのデータをキャッシュ領域のR面に読み出し、スロットの足りない部分のデータをR面に読み出したデータで補充した後に、割り当てられたページにコピーする。次いで、PVOL管理テーブル1172の当該領域に対応する退避状態に退避済みを設定し(ステップS83)、処理をポイントS(図14参照)に進める。
図17は、実施形態に係るPVOLライト処理の第10のフローチャートである。
ポイントWに処理を進めると、図17に示すように、コントローラ11は、PVOL管理テーブル1172に基づいて、ライト対象のPVOLの領域に対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、ひとつ前の世代のSVOL、すなわち、当該世代#−1のSVOLを特定し、ライト対象の領域に対応する当該SVOLの領域に対してプール14から領域を割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS91)。次いで、コントローラ11は、PVOLに格納されている対応する領域のデータ(旧データ:現在よりひとつ前の世代のスナップショットのデータ)を割り当てられた領域にコピーし(ステップS92)、PVOL管理テーブル1172の対応する領域のCAW属性をOFFに設定し、世代#を削除する(ステップS93)。これにより、ひとつ前の世代のスナップショット構成要素を適切にひとつ前の世代のスナップショットイメージを管理するSVOLに退避することができる。
次いで、コントローラ11は、PVOL管理テーブル1172に基づいて、ライト対象のPVOLの領域に対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、当該世代#のSVOLを特定し、ライト対象の領域に対応する当該SVOLの領域に対してプール14から領域を割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS94)。次いで、コントローラ11は、キャッシュ領域121に格納されているPVOLに対応する領域のデータ(現在の世代のスナップショットのデータ)を割り当てられた領域にコピーし(ステップS95)、PVOL管理テーブル1172の対応する領域の退避状態を退避済みに設定し(ステップS96)、処理をポイントS(図14参照)に進める。これにより、現在の世代のスナップショット構成要素を適切に現在の世代のスナップショットイメージを管理するSVOLに退避することができる。また、PVOLの一つの領域に対応するキャッシュ領域121のデータ要素についての退避処理であるので、比較的短時間で処理を終了することができる。
図18は、実施形態に係るPVOLリード処理の第1のフローチャートである。
PVOLリード処理においては、コントローラ11は、ホスト2からリード要求を受領すると(ステップS111)、ペア情報管理テーブル1171におけるリード要求のリード対象のPVOLのステータスを参照することにより、リード要求に対応するPVOLがリストア中であるか否かを判定する(ステップS112)。この結果、リストア中でない場合(ステップS112でNo)には、コントローラ11は、対応するPVOLの領域(又は、当該領域のデータを格納するキャッシュ領域121)からデータを読み出す通常リード処理を実行する(ステップS113)。一方、リストア中である場合(ステップS112でYes)には、コントローラ11は、PVOL管理テーブル1172を参照し、リード要求に対応するPVOLのスロットにおけるリストアが未実行であるか否かを判定し(ステップS114)、リストアが完了している場合(ステップS114でYes)には、通常リード処理を実行する(ステップS115)。
一方、リストアが未実行である場合(ステップS114でNo)には、コントローラ11は、PVOL管理テーブル1172を参照し、対応するスロットが未退避であるか否か、すなわち、当該スロットに書き込むべきキャッシュ領域121のデータ要素が未退避であるか否かを判定する(ステップS116)。この結果、未退避でない場合(ステップS116でNo)には、処理をポイントD(図19参照)に進める。一方、未退避である場合(ステップS116でYes)には、PVOL管理テーブル1172を参照し、当該スロットのCAW属性がONであるか否かを判定する(ステップS117)。
この結果、CAW属性がONではない場合(ステップS117でNo)には、コントローラ11は、キャッシュ状態がホストダーティであるか、すなわち、キャッシュ領域121のW面にデータがあるか否かを判定し(ステップS118)、ホストダーティでない場合には、ポイントE(図20参照)に処理を進める(ステップS118でNo)一方、ホストダーティである場合(ステップS118でYes)には、ポイントF(図21参照)に処理を進める。
一方、ステップS117の結果、CAW属性がONの場合(ステップS117でYes)には、当該スロットの世代#が最新世代#より大きいか否かを判定し(ステップS119)、当該スロットの世代#が最新世代#より大きい場合(ステップS119でYes)には、処理をポイントD(図19参照)に進める一方、当該領域の世代#が最新世代#以下の場合(ステップS119でNo)には、ポイントG(図22参照)に処理を進める。
図19は、実施形態に係るPVOLリード処理の第2のフローチャートである。
ポイントDに処理を進めると、図19に示すように、コントローラ11は、対応するスロットについて、SVOLからPVOLへのリストアコピーを実行し(ステップS121)、PVOL管理テーブル1172の対応するスロットのリストア状態をリストア済みに設定する(ステップS122)。次いで、コントローラ11は、PVOLの対応する領域を読み出してホスト2へ送信する(ステップS123)。
図20は、実施形態に係るPVOLリード処理の第3のフローチャートである。
ポイントEに処理を進めると、図20に示すように、コントローラ11は、PVOL管理テーブル1172のリード要求に対応する領域を含むスロットのCAW属性をONに設定し(ステップS131)、当該領域の世代#に、ペア情報管理テーブル1171の対応するPVOLの最新世代#に1を加算した値を設定する(ステップS132)。次いで、コントローラ11は、対応する領域について、SVOLからPVOLへのリストアコピーを実行し(ステップS133)、PVOL管理テーブル1172の対応する領域のリストア状態をリストア済みに設定する(ステップS134)。次いで、コントローラ11は、PVOLの対応する領域を読み出してホスト2へ送信する(ステップS135)。
図21は、実施形態に係るPVOLリード処理の第4のフローチャートである。
ポイントFに処理を進めると、図21に示すように、コントローラ11は、PVOL管理テーブル1172に基づいて、リード対象のPVOLの領域を含むスロットに対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、当該世代#のSVOLを特定し、リード対象の領域に対応する当該SVOLの領域に対してプール14からページを割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS141)。次いで、コントローラ11は、キャッシュ領域121に格納されているPVOLに書き込むべきデータを割り当てられたページにコピーする(ステップS142)。なお、キャッシュ領域121に格納されているデータが、スロットの一部のデータのみである場合には、PVOLの対応するスロットのデータをキャッシュ領域のR面に読み出し、スロットの足りない部分のデータをR面に読み出したデータで補充した後に、割り当てられたページにコピーする。次いで、PVOL管理テーブル1172の当該スロットに対応する退避状態に退避済みを設定し(ステップS143)、処理をポイントD(図19参照)に進める。
図22は、実施形態に係るPVOLリード処理の第5のフローチャートである。
ポイントGに処理を進めると、図22に示すように、コントローラ11は、PVOL管理テーブル1172に基づいて、リード対象のPVOLの領域を含むスロットに対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、ひとつ前の世代のSVOL、すなわち、当該世代#−1のSVOLを特定し、リード対象の領域に対応する当該SVOLの領域に対してプール14からページを割り当て、ページ管理テーブル1182を割り当てに従って更新する(ステップS151)。次いで、コントローラ11は、PVOLに格納されている対応する領域のデータ(旧データ:現在よりひとつ前の世代のスナップショットを構成するデータ)を割り当てられた領域にコピーし(ステップS152)、PVOL管理テーブル1172の対応する領域のCAW属性をOFFに設定削除する(ステップS152)。これにより、ひとつ前の世代のスナップショット構成要素を適切にひとつ前の世代のスナップショットイメージを管理するSVOLに退避することができる。また、PVOLの一つの領域のデータ要素についての退避処理であるので、比較的短時間で処理を終了することができる。
次いで、コントローラ11は、PVOL管理テーブル1172に基づいて、リード対象のPVOLの領域に対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、当該世代#のSVOLを特定し、リード対象の領域に対応する当該SVOLの領域に対してプール14からページを割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS154)。次いで、コントローラ11は、キャッシュ領域121に格納されているPVOLに対応する領域のデータ(現在の世代のスナップショット構成要素)を割り当てられたページにコピーし(ステップS155)、PVOL管理テーブル1172の対応する領域の退避状態を退避済みに設定し(ステップS156)、処理をポイントD(図19参照)に進める。これにより、現在の世代のスナップショット構成要素を適切に現在の世代のスナップショットイメージを管理するSVOLに退避することができる。
なお、キャッシュ領域121に格納されているデータが、スロットの一部のデータのみである場合には、PVOLの対応するスロットのデータをキャッシュ領域121のR面に読み出し、スロットの足りない部分のデータをR面に読み出したデータで補充した後に、割り当てられたページにコピーする。
図23は、実施形態に係るストレージ装置におけるSVOLライト処理の概要を説明する図である。なお、以下の説明では、PVOL内のスロット(領域)を「PVOLスロット」と言い、SVOL内のスロット(領域)を「SVOLスロット」と言う。
コントローラ11は、SVOLスロットのアドレスを指定したライト(WR)要求(ライト要求)をホスト2から受領し(図中(1))、そのライト先SVOLスロットに対応したPVOLスロットからデータが未退避であれば、ライト先SVOLにプール14からページを割り当て、そのライト先スロットに対応したSVOL更新属性をONに設定する(図中(2))。ここでは、SVOLスロットを指定したライト要求を受領した(後に、SVOLの更新を行う)場合に、SVOL更新属性にONが設定されるようにしている。
なお、SVOL更新属性は、例えば、図に示すように、ライト要求に従うデータ(ライトデータ)の容量がスロットの容量よりも小さい場合にONが設定されてもよい。ライトデータは、キャッシュサブ領域(キャッシュ領域121における確保された領域)に格納されるが、ライトデータの容量がスロットの容量よりも小さい場合には、SVOL更新属性「ON」は、ライト先SVOLスロットに対応したキャッシュサブ領域(W面)に、ライトデータで満たされた領域(以下、ライト領域)の他に、ライトデータで満たされない領域(以下、非対象領域)が生じることを意味する。この場合、ライト先SVOLスロットに対応するPVOLスロット全域のデータ(旧データ)の一部分(以下、旧データ部分)が、ライトデータが格納されているキャッシュサブ領域(ライト先SVOLに対応したキャッシュサブ領域(W面))の非対象領域に格納される。この結果、ライト先SVOLに対応したキャッシュサブ領域(W面)は、旧データ部分とライトデータによって満たされることになる。ただし、そのライト先SVOLスロットからデータをページに退避する前に、複数のライト要求によって、そのライト先SVOLスロットの全サブブロックが更新された場合には(すなわち、ライト先SVOLスロットに対応した更新位置BMを構成する全てのビットが「1」であれば)、キャッシュサブ領域(W面)に非対象領域は無い。ページとは、プール14において割り当てを行う単位領域をいう。ページのサイズは、例えば、スロットと同じサイズでよい。
コントローラ11は、SVOL15を指定した上記ライト要求に従いライトデータをホスト2から受け、キャッシュ領域121に、ライト先SVOLに(割り当てられたページに)対応したキャッシュサブ領域(以下、「SVOL確保領域」と言うことがある)を確保し、SVOL確保領域(W面)(ライト先SVOLスロットにライトされるデータが格納される、キャッシュ領域における領域)にライトデータを書き込む。次いで、コントローラ11は、ライト先SVOLスロット内におけるライト先位置(ライト要求で指定されたアドレスに従うサブブロックの位置)を特定し、そのライト先位置を記憶する(図中(3))。具体的には、コントローラ11は、ライト先SVOLに対応する更新位置BM(図6参照)における、ライト先位置のサブブロックに対応したビットが未更新(例えば0)であれば、そのビットを更新済み(例えば1)に更新する。次いで、コントローラ11は、ホスト2にライト要求に対するレスポンスを送信する(図中(4))。
これとは非同期で(バックエンドで)、コントローラ11は、ライト先SVOLスロットについてのSVOL更新属性を検出する(図中(5))。コントローラ11は、SVOL更新属性がONの場合には、PVOL確保領域(R面)(ライト先SVOLスロットに対応したPVOLスロット(以下、対応PVOLスロット)から読み出されたデータを記憶するための、キャッシュ領域内の領域)についてキャッシュヒット(対応PVOLスロット内のデータ(旧データ)がPVOL確保領域(R面)に記憶されている)か否かを判定する。コントローラ11は、キャッシュミスの場合には、ステージング、すなわち、対応PVOLスロット領域から旧データをPVOL確保領域(R面)に読み出す(図中(6))。そして、コントローラ11は、SVOL確保領域(W面)に、PVOL確保領域(R面)に記憶されている旧データのうち、非対象領域に対応する部分(旧データ部分)をコピーする(図中(7))。ここで、SVOL確保領域(W面)における「非対象領域」は、そのSVOL確保領域(W面)に対応した更新位置BM(図6参照)において未更新のサブブロック(例えばビット0)に対応した領域である。つまり、SVOLスロットにおける未更新領域にデータが書き込まれる都度に、SVOL更新領域(W面)にダーティデータが増え、SVOL更新領域(W面)から非対象領域が減る。次いで、コントローラ11は、ライト先SVOLスロットに対応する退避状態(SVOL管理テーブル1173における退避状態)として「退避済み」を設定し、SVOL更新属性を「OFF」にする(図中(8))。
その後、コントローラ11は、SVOL確保領域(W面)の全データ(ライトデータと旧データ部分とのセット)を、ライト先SVOLスロットに割り当てられたページに書き込む。
図23に示した流れによれば、ライトデータと旧データ部分がキャッシュ領域でマージされ、ライトデータと旧データ部分のセットが、ページに書き込まれる。これにより、対応PVOLスロット内のデータをライト先SVOLスロットに割り当てられたページに退避しその後にライトデータをそのページに書き込むよりも、ページに対する書き込みの回数を減らすことができる。
また、図23の(6)及び(7)に示した流れによれば、SVOL確保領域(W面)に、まず、ライトデータが書き込まれ、ライト要求のレスポンスが返され、その後で、SVOL確保領域(W面)における非対象領域に、PVOL確保領域(R面)から旧データ部分がコピーされる。ライト先SVOLスロットに割り当てられたページに書き込まれるデータは、ホストから受けたデータであってもPVOLから読み出されたデータであってもSVOL確保領域(W面)に書き込まれるが、図23の(6)及び(7)に示した処理により、ライトデータが旧データで更新されてしまうことを回避することができる。
なお、図23の(6)及び(7)の処理は、ライトデータの容量がスロットの容量より小さい場合の処理であるが、ライトデータの容量とスロットの容量が同じであれば、それらの処理は、不要である。
図24は、実施形態に係るSVOLライト処理の第1のフローチャートである。
SVOLライト処理においては、コントローラ11は、ホスト2からSVOLスロットを指定したライト要求を受領すると(ステップS211)、ペア情報管理テーブル1171におけるライト要求に従うライト先SVOLに対応付けられたステータスを参照することにより、そのライト先SVOLがリストア中であるか否かを判定する(ステップS212)。この結果、リストア中である場合(ステップS212でYes)には、コントローラ11は、ライトを実行しない(ステップS213)。
一方、リストア中でない場合(ステップS212でNo)には、コントローラ11は、SVOL管理テーブル1173を参照し、ライト先SVOLスロット(領域)がPVOL301を参照している(すなわち、参照元のPVOL内のデータが未退避)か否かを判定する(ステップS214)。この結果、PVOL301を参照していない(退避済み)場合(ステップS214でNo)には、コントローラ11はポイントH(図25参照)に処理を進める。
一方、PVOL301を参照している場合(ステップS214でYes)には、コントローラ11は、ライト先SVOLスロットに対してプール14からページを割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS215)。次いで、コントローラ11は、SVOL管理テーブル1173のライト先SVOLスロットについて、SVOL更新属性をONに設定する(ステップS216)。次いで、コントローラ11は、ライトデータをSVOL確保領域(W面)に格納し、ライト先SVOL内におけるライト先位置に従いSVOL管理テーブル1173を更新し(ステップS217)、ホスト2に応答を送信する(ステップS218)。上記処理により、ライトデータをキャッシュ領域のSVOL確保領域(W面)に受領した後ホストに応答を返すので、SVOLの応答性能を向上することができる。
図25は、実施形態に係るSVOLライト処理の第2のフローチャートである。
ポイントHに処理を進めると、図25に示すように、コントローラ11は、SVOL管理テーブル1173を参照し、ライト先SVOLスロットに対応づけられたプール14内のページが、他のSVOLスロットにも対応づけられていない(共有でない)か否か、すなわち、ライト先SVOLスロットに対応づけられたページが自ページであるか否かを判定する(ステップS221)。自ページの場合(ステップS221でYes)には、ライト先SVOLスロットが参照する自ページのデータについて退避を行わずに更新できるので、コントローラ11は、ライトデータをその自ページに書き込み(ステップS222)、ホスト2に応答を送信する(ステップS226)。ここで、ライトデータがライト先SVOLスロットの一部である場合は、そのデータが格納される領域について(ライト領域)のみデータの更新が行われる。
一方、該当ライト先SVOLスロットに対応づけられたページが自ページでない場合(ステップS221でNo)には、コントローラ11は、PVOL管理テーブル1172に基づいて、ライト先SVOLスロットに対してプール14からページを割り当て、SVOL管理テーブル1173を割り当てに従って更新し(ステップS223)、対応するライト先SVOLスロットの更新属性にONを設定する(ステップS224)。次いで、コントローラ11は、ライトデータをSVOL確保領域(W面)に格納し、SVOL確保領域(W面)内のライト先位置に従いSVOL管理テーブル1173を更新し(ステップS225)、ホスト2に応答を送信する(ステップS226)。上記処理により、ライトデータをキャッシュ領域のSVOL確保領域(W面)に受領した後、ホストに応答を返すSVOLの応答性能を向上することができる。
図26は、実施形態に係るSVOLリード処理のフローチャートである。
SVOLリード処理においては、コントローラ11は、ホスト2からSVOLの領域とそのSVOLの世代#を指定したリード要求を受領すると(ステップS231)、SVOL管理テーブル1173を参照することにより、リード要求に対応するSVOL15の領域(リード先SVOLスロット)のSVOL更新属性がONであるか否かを判定する(ステップS232)。この結果、SVOL更新属性がONである場合(ステップS232でYes)には、図28のSVOL退避コピー処理へ進む(ステップS233)。
一方、SVOL更新属性がONでない場合(ステップS232でNO)には、コントローラ11は、SVOL管理テーブル1173を参照し、リード先SVOLスロットがPVOL301を参照している(未退避)か否かを判定する(ステップS234)。この結果、PVOL301を参照していない(退避済み)場合(ステップS234でNo)には、リード先SVOLスロットに対応付けられているプール14内のページからデータを読み出し、ホスト2にデータを送信する(ステップS235)。
一方、PVOL301を参照している(未退避)場合(ステップS234でYes)には、コントローラ11は、PVOL管理テーブル1172を参照し、リード先SVOLスロットに対応するPVOLスロットのCAW属性がONであるか否かを判定する(ステップS236)。この結果、CAW属性がONではない場合(ステップS236でNo)には、コントローラ11は、リード先SVOLスロットに対応するPVOLスロットからデータをリードし、ホスト2にデータを送信する(ステップS237)。
一方、CAW属性がONである場合(ステップS236でYes)には、コントローラ11は、ペア管理テーブル1171を参照し、リード先SVOLスロットの世代#が最新世代#より大きいか否かを判定し(ステップS238)、リード先SVOLスロットの世代#が最新世代#以下の場合(ステップS238でNo)には、リード先SVOLスロットに対応するPVOLスロットのPVOL確保領域(R面)に格納されているデータがSVOL15のスナップショットの取得後のデータ要素であるので、PVOL確保領域(R面)に格納されているデータをリードし、ホスト2にデータを送信する(ステップS239)。
一方、リード先SVOLスロットの世代#が最新世代#より大きい場合(ステップS238でYes)には、リード先SVOLスロットに対応するPVOLスロットのPVOL確保領域(R面)格納されているデータがSVOLのスナップショットの取得以前のデータ要素であるので、コントローラ11は、リード先SVOLスロットに対してプール14からページを割り当て、SVOL管理テーブル1173を割り当てに従って更新する(ステップS240)。次いで、コントローラ11は、PVOL301に格納されている対応するスロットのデータ(現在よりひとつ前の世代のスナップショットを構成するデータ)をリード先SVOLスロットに対応づけられたページにコピーし(ステップS241)、PVOL管理テーブル1172の対応する領域のCAW属性をOFFに設定し(ステップS242)、リード先SVOLスロットに対応付けられているページからデータをリードし、ホスト2にデータを送信する(ステップS243)。
図27は、実施形態に係るバックエンド処理のフローチャートである。
このバックエンド処理は、例えば、任意のタイミング、例えば、所定の時間毎や、アクセス頻度が低い時間において実行される。バックエンド処理は、1つの処理に対して、コントローラ11が、PVOL管理テーブル1172又はSVOL管理テーブル1173に基づき、対象となるPVOLスロット又はSVOLスロット(以下、対象スロットという)を選出して行うものとする。1つの処理が終了した後、コントローラ11は、次の対象スロットを選出し処理を進める。対象スロットの選出は、PVOL管理テーブル1172又はSVOL管理テーブル1173における番号順に行ってもよい。
コントローラ11は、PVOL管理テーブル1172(又はSVOL管理テーブル1173)を参照し、対象スロットのCAW属性又はSVOL更新属性のいずれかの属性がONであるか否かの判定を行う(ステップS251)。判定の結果、対象領域のCAW属性及びSVOL更新属性のいずれの属性もONでない場合(ステップS251でNo)には、処理を終了する。
一方、対象領域のCAW属性又はSVOL更新属性のずれかの属性がONの場合(ステップS251でYes)には、コントローラ11は、対象スロットへのライトがシーケンシャルか否かを判定する(ステップS252)。シーケンシャルか否かの判定は、PVOL管理テーブル1172(又はSVOL管理テーブル1173)に基づいて、対象スロットを含む、領域IDが続き番の所定個数(例えば10個)のスロットのCAW属性(又はSVOL更新属性)がすべてONか否かで行われてもよいし、対象スロットへのライトがシーケンシャルであるか否かの情報(例えば、ライト要求に含まれメモリに確保された情報)を確認することで行われてもよい。判定の結果、シーケンシャルライトであった場合(S252でYes)には、コントローラ11は、対象スロットがパリティ列の最終スロットか否かを判定し(ステップS260)、対象スロットがパリティ列の最終スロットでない場合(ステップS260でNo)には、処理を終了する。
一方、対象スロットがパリティ列の最終スロットである場合(ステップS260でYes)、又は、ステップS252においてシーケンシャルライトでないと判定された場合(ステップS252でNo)には、コントローラ11は、PVOL管理テーブル1172(又はSVOL管理テーブル1173)を参照し、対象スロットには隣接するスロットがあるか否かを判定する(ステップS252)。ここで、対象スロットに隣接スロットがあるとは、対象スロットを含む、当該対象スロットと領域IDが続き番でありかつ当該対象スロットと同じくCAW属性ON(又はSVOL更新属性ON)である複数のスロット(スロット群)が存在することをいう。判定の結果、隣接するスロットがある場合には、そのスロット群のデータをまとめて処理対象とする(ステップS261)。これらの処理により、スロット群のデータをまとめて処理対象することができるので、処理の回数を少なくディスクに対する負荷を軽減できる。加えて、パリティ列のデータをまとめて処理対象とした場合には、リードモディファイライトを行う必要なく(すなわち、旧パリティデータが必要なく、パリティ列のデータのみで)新たなパリティデータを生成することができるため、処理時間を比較的短くすることができる。
一方、隣接するスロットがない場合(ステップS252でNo)には、コントローラ11は、SVOL管理テーブル1173を参照し、対象スロットの更新属性がONか否かを判定する(ステップS255)。判定の結果、対象スロットの更新属性がONの場合(ステップS254でYes)は、対象スロットがSVOLスロットであり、かつそのSVOL更新属性がONであるので、SVOL退避コピー処理を行う(図28)。
一方、SVOL更新属性がONではない場合(ステップS254でNo)は、対象スロットがPVOLスロットであり、かつそのCAW属性がONであるので、コントローラ11は、PVOL管理テーブル1172に基づいて、対象PVOLスロットに対応付けられている世代#を特定し、ペア情報管理テーブル1171に基づいて、当該世代#−1のSVOLを特定し、特定されたSVOL内の対象スロットに対してプール14からページを割り当て、ページ管理テーブル1182を割り当てに従って更新する(ステップS255)。次いで、コントローラ11は、対象PVOLスロット内のデータをステップS255で割り当てたページにコピーする(ステップS256)。
次いで、コントローラ11は、対象PVOLスロットの世代#が最新世代#+1であるか否かを判定し(ステップS257)、対象PVOLスロットの世代#が最新世代#+1である場合(ステップS257でYes)には、PVOL管理テーブル1172の対象PVOLスロットに対応する退避状態に、退避済みを設定する(ステップS258)一方対象PVOLスロットの世代#が最新世代#+1でない場合(ステップS258でNo)には、何もしない。次いで、コントローラ11は、PVOL管理テーブル1172の対象PVOLスロットに対応するCAW属性をOFFに設定する(ステップS259)。上記処理により、PVOL301のCAW属性がONとなっているPVOLスロットのデータ、又はSVOL15のSVOL更新属性がONになっているSVOLスロットのデータについて、ホスト2に対するライト要求(又はリード要求)と非同期で、SVOL15へと退避することができる。また、PVOLスロットのデータをSVOL15へと退避することができるので、PVOLライト処理及びSVOLライト処理において、ライトデータをキャッシュ領域121に格納する前に、PVOL301に格納されたデータをSVOL15へと退避しなければならない状況、例えば、ステップS7のNoに該当するような状況を低減することができ、ライトレスポンスを向上することができる。
図28は、実施形態に係るSVOL退避コピー処理のフローチャートである。
SVOL退避コピー処理においては、コントローラ11は、対象SVOLスロットが参照するPVOLスロットのデータ(参照元データ)をPVOL確保領域(R面)にステージングさせる(ステップS261)。次いで、コントローラ11は、SVOL管理テーブル1173の更新位置BMに基づき、SVOL確保領域(W面)における更新位置を特定し、特定結果に基づいて、SVOL確保領域(W面)の参照元データよりSVOL確保領域(W面)における非対象領域に対応するデータ(旧データ)取得する。次いで、コントローラ11は、キャッシュ領域121内(具体的にはSVOL確保領域(W面))において、取得した旧データとライトデータをマージして、マージされたデータセットをプール14内のページにコピーする(ステップS262)。次いで、コントローラ11は、対象領域の退避状態を「退避済み」にするようSVOL管理テーブル1173を更新する。次いで、コントローラ11は、対象PVOLスロットのスロットのCAW属性をOFFにするようPVOL管理テーブル1172を更新する。上記処理により、対応PVOLスロット内のデータをライト先SVOLスロットに割り当てられたページに退避しその後にライトデータをそのページに書き込むよりも、ページに対する書き込みの回数を減らすことができる。
図29は、実施形態に係るスナップショット取得処理のフローチャートである。
スナップショット取得処理は、例えば、予め設定された時刻や、ホスト2等からスナップショット取得要求があった場合に実行される。
コントローラ11は、ペア情報管理テーブル1171において、スナップショット取得対象のPVOLの次のスナップショットの管理用のSVOLに対応するステータスをSnapshot保持に設定し(ステップS271)、対応する最新世代#をカウントアップし(ステップS272)、当該SVOLの世代#に最新世代#を設定する(ステップS273)。このように、本実施形態においては、次のスナップショットを取得処理においては、PVOLの領域のデータを退避等する処理を行う必要がなく、短時間でPVOLに対するアクセスを行うことができる。
図30は、実施形態に係るスナップショット削除処理のフローチャートである。
スナップショット削除処理は、例えば、ホスト2等からスナップショット削除要求があった場合に実行される。
コントローラ11は、PVOL管理テーブル1172から、スナップショット削除対象となるSVOLに対応するPVOLについてのCAW属性がONの領域を検出し(ステップS281)、当該CAW属性がONの領域に対して、必要に応じて退避コピーを実行する(ステップS282)。具体的には、削除するSVOLが記憶している領域であって、他のスナップショットにより参照されている領域のデータについては、参照しているSVOLの領域に退避コピーをする。
次いで、コントローラ11はPVOLの退避した領域について、PVOL管理テーブル1172のCAW属性をOFFに設定し(ステップS283)、ペア情報管理テーブル1171の対応するSVOLのステータスをSnapshot未取得に設定する(ステップS284)。
以上、実施形態に基づいて説明したが、本発明は上述した実施の形態に限られず、他の様々な態様に適用可能である。
例えば、スロットへのデータのライト及びリードのいずれのときでも、キャッシュサブ領域(W面)及び(R面)の両方が確保されても良いし、スロットへのデータのライトのときは、キャッシュサブ領域(W面)のみが確保され、スロットへのデータのリードのときは、キャッシュサブ領域(R面)のみが確保されても良い。また、キャッシュサブ領域は、予め、W面とR面に区別されていて、キャッシュサブ領域(W面)は、キャッシュ領域におけるW面から確保され、キャッシュサブ領域(R面)は、キャッシュ領域におけるR面から確保されても良い。
また、例えば、実施形態では、対応PVOLスロットの全域から旧データがPVOL確保領域(R面)に読み出されるが、対応PVOLスロットにおける、非対象領域に対応したスロット部分のみから、データ(旧データ部分)がPVOL確保領域(R面)に読み出されても良い。