(1)計算機システムの構成
図1は、本発明の実施例に係る計算機システムの構成図である。計算機システムは、ホスト計算機100(以下、「ホスト100」と略記)とストレージシステム300とから構成される。ストレージシステム300は、少なくとも2台のストレージ装置400−1、400−2から構成される。ホスト100はSAN(Storage Area Network)210を介してストレージ装置400−1、400−2の両方に接続されている。
ストレージ装置400−1、400−2のハードウェア構成について説明する。なお、本発明の実施例に係るストレージシステム300において、ストレージ装置400−1、400−2のハードウェア構成は同一とする。そのため以下では、ストレージ装置400−1とストレージ装置400−2を区別せずに呼ぶ場合には、「ストレージ装置400」と呼ぶ。ただし、ストレージ装置400−1、400−2のハードウェア構成は、必ずしも同一である必要はない。
ストレージ装置400は、1以上のチャネルアダプタ(CHA)530(530a及び530b)、1以上のディスクアダプタ(DKA)540、1以上のメモリパッケージ(メモリ)510、1以上のMPパッケージ(MPPK)520を有するストレージコントローラ500と、1以上のドライブ900から構成される。
CHA530は、ホスト100あるいは他のストレージ装置400と接続するためのインタフェース(I/F)531を1以上有し、ホスト100や他のストレージ装置400との間で送受信される制御情報やデータの中継を行うコンポーネントである。本実施例のストレージ装置400では、ホスト100との通信には、SCSI(Small Computer System Interface)で定められている規格に従ったコマンド(以下、SCSIコマンドと呼ぶ)を用いる。そのためI/F531は原則として、ホスト100との間で、SCSIコマンド及びその付随情報(ライトデータ、リードデータ、応答情報等)の送受信を行う機能を有する。
CHA530は、I/F531の他、バッファ532を有する。バッファ532は、CHA530が中継する制御情報及びデータを一時的に記憶するための記憶領域であり、各種の揮発性メモリや不揮発性メモリを用いて構成される。また、図1では、1台のストレージ装置400内に2つのCHA530(CHA530a、CHA530b)だけが記載されているが、CHA530の数はこれに限定されない。またI/F531の数も図で示された数に限定されるものではない。
なお、図1では、CHA530のうち、ホスト100に接続されるものを、CHA530aと表記しており、また他のストレージ装置400(たとえばストレージ装置400−2)と接続されるものをCHA530bと表記している。ただしCHA530aとCHA530bのハードウェア構成は同一である。また、図1では、ホスト100とストレージ装置400−1を接続する伝送線、あるいはホスト100とストレージ装置400−2を接続する伝送線は1本のみ記載されているが、耐障害性を高めるために、複数の伝送線でホスト100とストレージ装置400が接続されるようにしてもよい。またストレージ装置400−1とストレージ装置400−2を接続する伝送線も1本のみ記載されているが、複数の伝送線で接続されるようにしてもよい。
DKA540は、ドライブ900と接続するためのインタフェース(非図示)を複数有し、ドライブ900と、メモリ510またはMPPK520との間で送受信される制御情報やデータの中継を行うコンポーネントである。
MPPK520は、プロセッサ(MP)521、ローカルメモリ(LM)522、そして非図示の内部バス及び内部ポートとから構成される。MPPK520は、ストレージ装置400内の各種データ処理を行うためのコンポーネントである。MP521がLM522上のプログラムを実行することにより、以下で説明する、ホスト100から受信する各種コマンドに応じた処理が実現される。
また、図1ではMP521は1つのみ記載されているが、複数のMP521が搭載されていてよい。複数のMP521が搭載されている場合、以下で説明する、ホスト100から受信する各種コマンドに応じた処理は、任意のMP521で実行されてもよい。LM522は、各種の揮発性メモリや不揮発性メモリを用いて構成することができる。
メモリ510は、ホスト100からのライトデータやドライブ900からリードされたデータを一時的に格納するためのキャッシュと、各種制御情報を格納する共有メモリを備えたコンポーネントである。以下では、メモリ510上の、キャッシュとして用いられる領域は、キャッシュ領域と呼ばれる。また、制御情報を格納する共有メモリとして用いられる領域は、共有メモリ領域と呼ばれる。メモリ510は、停電等の障害が発生した場合のデータ消失を防ぐために、バッテリを備え、停電時にメモリ510上のデータを保持できるように構成されていてもよい。
ドライブ900は、ホスト100からのライトデータが最終的に格納される記憶デバイスである。ドライブ900の記憶メディアとしては、HDDで用いられるような磁気記憶媒体のほか、NANDフラッシュメモリ、MRAM、ReRAM、及びPRAMのような不揮発性半導体記憶媒体を用いることができる。
(2)ボリュームとキャッシュ
ホスト100からのライトデータは、最終的にはドライブ900に格納されるが、本発明の実施例に係るストレージ装置400は、ホスト100に対してドライブ900の記憶空間を直接提供していない。代わりにストレージ装置400は、周知のThin Provisioning技術によって形成される、1以上のボリュームをホスト100に提供する。以下ではこの、ホスト100に提供されるボリュームのことを「論理ボリューム」と呼ぶ。ストレージ装置400は論理ボリュームの記憶空間を、固定サイズの領域ごとに分割して管理している。この固定サイズの領域は「ページ」と呼ばれる。ページのサイズは、一例として42MB等のサイズである。各ページには動的に、1以上のドライブ900のいずれかの記憶領域が割り当てられる。以下では、ページに割り当てられる記憶領域のことを、「物理記憶領域」と呼ぶ。
論理ボリュームは、ユーザがストレージ装置400に接続された管理端末(非図示)あるいはホスト100からストレージ装置400に対して、論理ボリューム作成指示を出すことにより、自由に定義可能なボリュームである。ただし論理ボリュームが定義された時点では、論理ボリュームの各ページには全くドライブ900の記憶領域が割り当てられていない。ホスト100が論理ボリュームの記憶空間上のあるアドレスが指定されたライト要求(ライトコマンド)を論理ボリュームに対して発行すると、ストレージ装置400は指定されたアドレスに対応するページに対し、ドライブ900上の未使用の(まだどのページにも割り当てられていない)記憶領域を割り当てる。このように、ドライブ900の記憶領域が動的に論理ボリューム(のページ)に割り当てられるため、少なくとも初期状態では、ストレージ装置400に搭載されるドライブ900の合計記憶容量(サイズ)は、各論理ボリュームの合計サイズ未満であってよい。そしてストレージ装置400の運用開始後に、必要に応じてドライブ900を追加していけば良いので、導入コストを低くできる。
また、本発明の実施例に係るストレージ装置400は、いわゆるライトバックキャッシュ方式を採用している。そのためホスト100から論理ボリュームに対してWRITEコマンド等のデータ更新要求を受け付けると、キャッシュ領域にライトデータを格納するための部分領域を確保し、当該確保された部分領域にライトデータを格納した時点で、ホスト100にライト処理が完了した旨を返信する。なお、この処理は、ディスクキャッシュを搭載したストレージ装置で通常行われている処理である。
つまりライトデータがキャッシュ領域に格納され、ホスト100にライト処理が完了した旨を返信された時点で、実質的に論理ボリュームに対してデータが格納された状態と等価な状態になる。そのため、以下の説明で、「論理ボリュームにデータを書き込む」と説明している箇所は、必ずしもドライブ900にデータが書き込まれる事を意味するわけではない。キャッシュ領域にデータが格納されただけの状態でドライブ900にはデータが未書き込みの状態であっても、「論理ボリュームにデータを書き込む」と表現する。逆に、「キャッシュ(後述するキャッシュスロットなど)にデータを書き込む」という処理は、実質的に論理ボリュームにデータを格納する処理を行っていると理解することもできる。
キャッシュ領域に格納されたライトデータはその後、ホスト100からのデータ更新要求とは非同期に(所定のタイミングで)、ドライブ900に書き込まれる(デステージされる)。ただしデステージ処理自体は周知の処理であるため、本発明の実施例では説明を省略する。
ここで、本発明の実施例に係るストレージ装置400における、キャッシュ領域の使用方法について説明しておく。ホスト100からのライトデータ等を一時的にキャッシュ領域に格納する際、ストレージ装置400はキャッシュ領域上の未使用領域を、部分領域として確保し、当該確保された部分領域にライトデータを格納する。確保される部分領域の最小サイズは固定サイズで、一例として256KBである。以下では、この最小サイズの部分領域のことを、「キャッシュスロット」または「スロット」と呼ぶ。
続いて図2を用いて、本発明の実施例に係るストレージシステム300とホスト100との関係について説明する。先に述べたとおり、ストレージシステム300は少なくとも2台のストレージ装置400から構成され、各ストレージ装置400では論理ボリュームを定義できる。
本発明の実施例に係るストレージシステム300では耐障害性を高めるため、原則としてホスト100からアクセスされる論理ボリュームを、ストレージシステム300内の2台のストレージ装置(ストレージ装置400−1、ストレージ装置400−2)の間で複製して運用する。図2の構成例の場合、ストレージ装置400−1内の論理ボリューム90−1に書き込まれたデータは、ストレージ装置400−2の論理ボリューム90−2にも書き込まれる(これを、「ミラーされる」と呼ぶ)。この複製処理はストレージ装置400−1及び400−2のMP521によって実施される。
以下、ストレージ装置400−1及び400−2のMP521によって実施される、論理ボリュームの内容を複製する機能のことを、「ミラーリング機能」と呼ぶ。また詳細は後述するが、2つの論理ボリュームにデータがミラーされる場合、2つの論理ボリュームに対するデータの書き込み順は、論理ボリュームに設定された一種の属性情報によって決められている。最初にデータが書き込まれる論理ボリュームのことはプライマリボリューム(P−VOLと表記されることもある)と呼ばれ、2番目にデータが書き込まれる論理ボリュームのことはセカンダリボリューム(S−VOLと表記されることもある)と呼ばれる。
図2は、論理ボリューム90−1がP−VOL、論理ボリューム90−2がS−VOLであると定められている場合の例を表している。また論理ボリューム90−1または論理ボリューム90−2に対するデータの書き込み順を表す属性情報(P−VOLであるかS−VOLであるかを示す属性情報)は、後述するペア管理テーブルT400に格納されている。ストレージ装置400がホスト100から、ある論理ボリュームの更新を指示するコマンドを受信した時、この属性情報に基づいて、当該論理ボリュームの書き込み順(当該論理ボリュームを最初に更新すべきか、2番目に更新すべきか)を特定することができる。
ミラーリング機能により、S−VOL(論理ボリューム90−2)の内容が常にP−VOL(論理ボリューム90−1)の内容と同一になるように制御されるため、ホスト100は、P−VOL、S−VOLのいずれにアクセスしてもよい(同じデータにアクセスすることが可能である)。また、あるP−VOLの複製が格納されるS−VOLは、「P−VOLとペア関係にあるボリューム」あるいは「P−VOLのペアボリューム」と呼ばれる。逆に、あるS−VOLの複製元データが格納されている論理ボリュームであるP−VOLのことも、「S−VOLとペア関係にあるボリューム」、「S−VOLのペアボリューム」と呼ばれる。そしてP−VOL及びP−VOLのペアボリュームであるS−VOLのセットのことは、「ペア」あるいは「ボリュームペア」と呼ばれる。
ここで、ホスト100がストレージ装置400−1内のP−VOLに対して、WRITEコマンドを発行した場合に、ストレージシステム300で行われる処理の概要を説明する。WRITEコマンド及びWRITEコマンドでライト対象となるデータ(これをライトデータと呼ぶ)をストレージ装置400−1が受信すると、ストレージ装置400−1はP−VOLにライトデータを格納し、その後ストレージ装置400−2に対して、ペアボリュームであるS−VOLにライトデータを格納するコマンド(後述するWRFBAコマンド)を発行する。WRFBAコマンド及びライトデータは、ストレージ装置400−1のI/F(531b)及びSAN220を経由してストレージ装置400−2へと送信される。
WRFBAコマンドを受信したストレージ装置400−2は、S−VOLにライトデータを格納する。S−VOLへのライトデータの格納が完了した時点で、ストレージ装置400−2はストレージ装置400−1に対して、S−VOLへのライトデータの格納が完了した旨を通知する。ストレージ装置400−1はこの通知を受信したことに応じて、ホスト100にライト処理が完了したことを返答する。
逆に、ホスト100がストレージ装置400−2内のS−VOLに対して、WRITEコマンドを発行した場合に、ストレージシステム300で行われる処理の概要を説明する。WRITEコマンド及びライトデータをストレージ装置400−2が受信すると、ストレージ装置400−2はストレージ装置400−1に対して、P−VOLにライトデータを格納するコマンド(WRFBAコマンド)を発行する。このコマンドを受信したストレージ装置400−1は、P−VOLにライトデータを格納する。P−VOLへのライトデータの格納が完了した時点で、ストレージ装置400−1はストレージ装置400−2に対して、P−VOLへのライトデータの格納が完了した旨を通知する。ストレージ装置400−2はこの通知を受信したことに応じて、S−VOLにライトデータを格納する。S−VOLへのライトデータの格納が完了した後、ストレージ装置400−2はホスト100にライト処理が完了したことを返答する。
つまりS−VOLに対するWRITEコマンドを受信した場合も、P−VOLに対するWRITEコマンドを受信した場合と同様、ストレージシステム300は最初にP−VOLにデータを格納し、その後S−VOLにデータを格納する。ストレージシステム300は、WRITEコマンドを受信した時、このような流れで処理を行うことにより、P−VOLとS−VOLの内容を同一に維持している。ただし、詳細は後述するが、P−VOLとS−VOLに設定された属性の状態によっては、内容を同一にする制御を行わないこともある。
なお、上ではストレージ装置400−1にP−VOLが、そしてストレージ装置400−2にS−VOLが存在する場合について説明したが、ストレージ装置400−2にP−VOLが、そしてストレージ装置400−1にS−VOLが存在する構成でも良い。その場合にもホスト100からのライトデータは、最初にP−VOLに格納され、その次にS−VOLに格納される。また、ストレージ装置400(たとえばストレージ装置400−1)内に論理ボリュームが複数存在する場合、全ての論理ボリュームがP−VOLでなければならない(あるいは全ての論理ボリュームがS−VOLでなければならない)という制約はなく、ストレージ装置400内にP−VOLとS−VOLが混在していてもよい。
また、ストレージ装置400−1(または400−2)内の全ての論理ボリュームが、ストレージ装置400−2(または400−1)内の論理ボリュームとペア関係にある必要はない(ペア関係にない論理ボリュームがストレージ装置400内に存在していてもよい)。ただし本実施例では、ペア関係にあるボリュームに対するI/Oコマンドを受け付けた場合に、ストレージ装置400が実施する処理について中心に説明する。
上で述べたとおり、ホスト100は、ペア関係にあるP−VOL(論理ボリューム90−1)とS−VOL(論理ボリューム90−2)のうち、いずれの論理ボリュームにアクセスしても同じデータにアクセスすることが可能である。ただしホスト100は、論理ボリューム90−1と論理ボリューム90−2が、同一のデータが格納されているボリュームであるか否かを認識している必要はない。これは、本発明の実施例に係るストレージシステム300がホスト100に対して、ストレージ装置400−1の論理ボリューム90−1とストレージ装置400−2の論理ボリューム90−2とが、みかけ上同一ボリュームであるかのように認識させる機能を有していることによる。以下、この機能について説明する。
ストレージ装置400は、ストレージ装置400等の物理的なストレージ装置とは異なる、1または複数の仮想的なストレージ装置(以下、これを仮想ストレージと呼ぶ)がSAN210上に存在するように見せかける機能を有する。この機能のことを、本発明の実施例では「仮想ストレージ機能」と呼ぶ。図2を用いて、ストレージ装置400に仮想ストレージを定義した場合の例を説明する。
仮想ストレージは、装置シリアル番号(Ser#)を有する。以下、仮想ストレージの有する装置シリアル番号のことを、「仮想製番」と呼ぶ。また、ユーザの指示に応じて、仮想ストレージには、ストレージ装置400の論理ボリュームを1以上所属させることができる。図2は、ストレージ装置400−1のシリアル番号が65000、ストレージ装置400−2のシリアル番号が66000、そして定義された仮想ストレージのシリアル番号が63500である構成例を示している。また図2において、ストレージ装置400−1は論理ボリューム90−1を有し、ストレージ装置400−2は論理ボリューム90−2を有している。
ストレージ装置400の有する論理ボリュームには、ストレージ装置400内で一意な識別子(識別番号)が付されており、その番号のことを「LDEV#」または「R−LDEV#」と呼ぶ。図2の例では、論理ボリューム90−1のR−LDEV#が0x2000(「0x2000」とは、16進数で「2000」の意味である)、そして論理ボリューム90−2のR−LDEV#が0x5000である。
ここで論理ボリューム90−1と論理ボリューム90−2を、ユーザからの指示によって仮想ストレージに所属させたとする。その場合論理ボリューム90−1と論理ボリューム90−2には、R−LDEV#に加えて、仮想ストレージ内で一意な番号を付すことができる。本実施例では、この番号は「仮想LDEV#」または「V−LDEV#」と呼ばれる。この番号はまた、ユーザが任意に設定することができる番号である(ただし各論理ボリュームに付されるV−LDEV#は、仮想ストレージ内で一意でなければならない)。図2の例では、仮想ストレージに所属させた論理ボリューム90−1及び論理ボリューム90−2のV−LDEV#が、いずれも0x1000に設定されている。
一方、図2の構成において、ホスト100では交替パスソフト1111が稼働している。交替パスソフト1111は、ホスト100から論理ボリュームへのアクセス経路(パスと呼ばれる)が複数存在する場合にそれを認識し、論理ボリュームにアクセスする際に、複数のパスのうち、使用するパスを選択する機能を持つ。パスの認識のために、交替パスソフト1111は、ホスト100から認識できている論理ボリュームに対して、SCSI規格で規定されているINQUIRYコマンド等、ボリュームの識別情報を取得するコマンドを発行することによって、ボリュームの識別情報を取得する。
ストレージ装置400は、論理ボリュームに対するINQUIRYコマンドを受信した時、ボリュームの識別情報として、装置シリアル番号及びR−LDEV#を返却するように構成されている。また、INQUIRYコマンドによる問い合わせ対象の論理ボリュームが仮想ストレージに所属していた場合には、ボリュームの識別情報として、仮想ストレージの装置シリアル番号、およびV−LDEV#を返却する機能を有する。図2の構成において、ストレージ装置400−1が論理ボリューム90−1に対するINQUIRYコマンドを受信すると、ストレージ装置は論理ボリューム90−1の識別情報として、(装置シリアル番号=63500、V−LDEV#=0x1000)を返却する。同様にストレージ装置400−2が論理ボリューム90−2に対するINQUIRYコマンドを受信すると、ストレージ装置は論理ボリューム90−2の識別情報として、(装置シリアル番号=63500、V−LDEV#=0x1000)を返却する。
つまり論理ボリューム90−1と論理ボリューム90−2から、同一のボリューム識別情報が交替パスソフト1111に返却されるため、交替パスソフト1111は論理ボリューム90−1と論理ボリューム90−2が同一のボリュームと認識する。結果として、ホスト100から論理ボリューム90−1へのパス(図中の実線矢印。以下このパスを「パス1」と呼ぶ)の交替パスが、ホスト100から論理ボリューム90−2へのパス(図中の点線矢印。以下このパスを「パス2」と呼ぶ)であると判断する。そしてパス1が障害などの要因で遮断され、ホスト100から論理ボリューム90−1へのアクセスができなくなった場合などには、交替パスソフト1111がアプリケーションプログラム1112などから論理ボリューム90−1へのアクセス要求を受け付けると、交替パスソフト1111はパス2を介してアクセス要求を発行する(つまり論理ボリューム90−2にアクセス要求を発行する)。そして先に述べたとおり、交替パスソフト1111が論理ボリューム90−2にアクセス要求を発行しても、論理ボリューム90−2には論理ボリューム90−1と同一データが格納されているため、問題なく動作する。
仮想ストレージ機能とミラーリング機能の実現のために必要となる管理情報について、図3〜5を用いて説明していく。
ホスト100が、WRITEコマンド等を発行することで論理ボリュームにアクセスする際、論理ボリュームを一意に特定する情報として、少なくともLUN(論理ユニット番号)とI/F531の識別子(ポートID)を指定する。そのため、本発明の実施例に係るストレージ装置400は、ホスト100からアクセスされる論理ボリュームに、LUNとポートIDとを付している。そしてストレージ装置400は、論理ボリュームと、当該論理ボリュームに付されたLUN及びポートIDとの対応関係を、ボリューム管理テーブルT300に格納して管理している。
図3は、ボリューム管理テーブルT300の例を示している。ボリューム管理テーブルT300は、ストレージ装置400のメモリ510内の共有メモリ領域に格納される。また図3において、上段のテーブルT300−1と下段のテーブルT300−2は、いずれもボリューム管理テーブルであり、テーブルT300−1がストレージ装置400−1で管理されるボリューム管理テーブルで、テーブルT300−2がストレージ装置400−2で管理されるボリューム管理テーブルである。
いずれのテーブルも、以下で説明するT301〜T307の項目を有するテーブルであるので、以下ではテーブルT300−1とテーブルT300−2を区別せずに呼ぶ場合には「ボリューム管理テーブルT300」と呼び、区別する必要がある場合には、テーブルT300−1のことを「ボリューム管理テーブルT300−1」と呼ぶ。また、テーブルT300−1には、ストレージ装置400−1内の論理ボリュームについての情報だけが格納され、テーブルT300−2には、ストレージ装置400−2内の論理ボリュームについての情報だけが格納される。
ボリューム管理テーブルT300の各項目について説明する。ボリューム管理テーブルT300の各行は、1つの論理ボリュームについての情報を表している。LDEV(T303)は、論理ボリュームのR−LDEV#が格納され、R−Ser#(T304)には論理ボリュームの存在するストレージ装置のシリアル番号(Ser#)が格納される(なお、以下では論理ボリュームの存在するストレージ装置のシリアル番号のことを、「論理ボリュームのシリアル番号」と呼ぶ)。
そしてポートID(T301)とLUN(T302)が、論理ボリュームに付されているポートID及びLUNを格納する欄である。また、論理ボリュームが仮想ストレージに所属している場合には、VLDEV#(T305)に論理ボリュームに設定された仮想LDEV#が、そしてV−Ser#(T306)には、当該論理ボリュームが所属する仮想ストレージの仮想製番が格納される(以下、表記が冗長になることを防ぐため、論理ボリュームが所属する仮想ストレージの仮想製番のことを、「論理ボリュームの仮想製番」と呼ぶ)。
I/Oモード(T307)は、論理ボリュームのライト可否等の状態を表す、一種の属性情報であり、具体内容は後述する。
図3の例において、ボリューム管理テーブルT300−1の行(R300−1)に格納されている論理ボリュームのV−LDEV#は0x1000、そして仮想製番は63500である。またボリューム管理テーブルT300−2の行(R300−2)に格納されている論理ボリュームのV−LDEV#も0x1000、そして仮想製番は63500である。
そのため、ホスト100がストレージ装置400−1に対して、ボリューム管理テーブルT300−1の行(R300−1)に格納されている論理ボリュームについてINQUIRYコマンドを発行することで、論理ボリュームの情報を問い合わせてきた場合(この時、ホスト100は、ポートID(3e243174 aaaaaaaa)とLUN(0)を指定して、INQUIRYコマンドを発行する)、ストレージ装置400−1のMP521はボリューム管理テーブルT300−1を参照し、問い合わせ対象の論理ボリュームのVLDEV#(T305)及びV−Ser#(T306)の情報を返却する。ホスト100がストレージ装置400−2に対して、ボリューム管理テーブルT300−2の行(R300−2)に格納されている論理ボリュームについてINQUIRYコマンドを発行することで、論理ボリュームの情報を問い合わせてきた場合にも同様に、ストレージ装置400−2のMP521はボリューム管理テーブルT300−2を参照して、問い合わせ対象の論理ボリュームのVLDEV#(T305)及びV−Ser#(T306)の情報を返却する。その結果、ホスト100(の交替パスソフト1111)には2つの論理ボリュームが同一であると認識される。
次に、ミラーリング機能の実行する際に管理されるテーブルである、ペア管理テーブルについて、図4を用いて説明する。ペア管理テーブルT400は、ボリューム管理テーブルと同様、ストレージ装置400の共有メモリ領域に格納される。またペア管理テーブルT400は、ストレージ装置400−1、ストレージ装置400−2のいずれもが有しているテーブルである。以下ではボリューム管理テーブルT300と同様、ストレージ装置400−1とストレージ装置400−2が有しているペア管理テーブルT400を区別して呼ぶ場合には、それぞれを、ペア管理テーブルT400−1、ペア管理テーブルT400−2と表現する。逆に両者を区別せずに呼ぶ場合には、ペア管理テーブルT400と表現する。
ペア管理テーブルT400は、ボリュームペアの情報を管理するためのテーブルで、各行が1つのボリュームペアについての情報を表している。各ボリュームペアにはペア番号という識別番号を付して管理されており、ペア番号(T401)にはそのペア番号が格納される。P−VOL#(T404)にはP−VOLである論理ボリュームのR−LDEV#が格納される。PDKC#(T403)には、P−VOL#(T404)で特定される論理ボリュームの装置シリアル番号が格納される。またS−VOL(T405)には、P−VOL#(T404)で特定される論理ボリュームとペア関係にあるボリューム(S−VOL)のR−LDEV#が格納され、SDKC#(T406)には、S−VOL#(T405)で特定される論理ボリュームの装置シリアル番号が格納される。
ペアステータス(T402)には、ボリュームペアの状態についての情報が格納される。以下、ペアステータスについて説明する。上でボリュームペアに対してホスト100からデータが書き込まれる際の処理について説明したが、上では、P−VOLに書き込まれたデータが常時S−VOLに複製される例を説明した。ただし実際には、ストレージ装置400の状態、あるいはストレージ装置400−1、400−2間の伝送路であるSAN220の状態によっては、複製が実施できない状態等も発生する。ストレージ装置400では、ボリュームペアの状態を管理しており、P−VOLまたはS−VOLへのデータアクセス(ライト等)を実施する際には、ボリュームペアの状態に応じた処理を行う。
本発明の実施例では、P−VOLとS−VOLの内容が同一である状態のことを、「Pair」状態と呼ぶ。あるボリュームペアの状態(ステータス)がPairの時には、ペア管理テーブルT400のペアステータス(T402)に「1」が格納される。そしてホスト100からペアステータスがPairの場合、当該ボリュームペアのP−VOLまたはS−VOLに対してデータ更新を指示するコマンド(WRITEコマンド等)を受信すると、P−VOLとS−VOLの両方が更新される。たとえばP−VOLまたはS−VOLに対するWRITEコマンド及びライトデータを受信した場合、ライトデータはP−VOLとS−VOLの両方に書き込まれる(二重書きされる)。
一方、ボリュームペアを構成するP−VOLとS−VOLにデータが二重書きされない状態にすることもできる。その時のボリュームペアのペアステータスは、「Suspend」状態と呼ばれる。ペアステータスがSuspendの時には、ペア管理テーブルT400のペアステータス(T402)に「0」が格納される。ペアステータスがSuspendの場合、当該ボリュームペアのP−VOLまたはS−VOLに対してデータ更新を指示するコマンド(WRITEコマンド等)を受信すると、P−VOLまたはS−VOLのいずれか一方のみが更新される。
なお、ペアステータスがSuspend状態にされる場合の例として、P−VOLまたはS−VOLに障害が発生して、P−VOLまたはS−VOLへのデータアクセス(リード、ライトなど)ができなくなった場合などがあげられる。この場合、ストレージ装置400が自律的にペアステータスを「Pair」から「Suspend」へと遷移させる。ただしストレージ装置400のユーザが、ホスト400または管理端末からストレージ装置400にペアステータスを変更させる(PairからSuspendに変更させる等)指示を発行したことに応じて、ペアステータスが変更されることもある。
修復フラグ(T407)には、論理ボリュームへのデータ書き込み中に障害が発生したために、P−VOLとS−VOLの内容が一部不一致になった場合に「1」が格納される。またその時、P−VOLとS−VOLの内容が不一致になっている領域の情報(たとえば論理ブロックアドレス(LBA))が、位置(T408)に格納される。具体的な用いられ方は後述する。
続いてボリューム管理テーブルT300で管理されているI/Oモード(T307)について説明する。先に述べたとおり、I/Oモードは、論理ボリュームのライト可否等の状態を表す、一種の属性情報であり、ストレージ装置400は、ホスト100からP−VOLまたはS−VOLに対してWRITEコマンド等のデータ更新要求を受け付けた場合、ペアステータスに加えて、I/Oモードも考慮して処理を行う。
I/Oモードに設定される属性には少なくとも、「Mirror」、「Local」、「Remote」、「Block」の4種類がある。ある論理ボリュームのI/Oモードが「Mirror」属性の場合、当該論理ボリュームについてのI/Oモード(T307)の欄に、「0001」(2進数表記)が格納される。また、ある論理ボリュームのI/Oモードが「Mirror」、「Local」、「Remote」、「Block」の場合にはそれずれ、当該論理ボリュームについてのI/Oモード(T307)の欄に、「0010」「0100」「1000」が格納される。なお、1つの論理ボリュームに設定されるI/Oモードは、「Mirror」、「Local」、「Remote」、「Block」のいずれか1つに限られる(たとえばLocalとBlockという2つのI/Oモードが設定されることはない)。
ある論理ボリュームのI/Oモードが「Mirror」の場合、当該論理ボリュームはペアボリュームとの間でデータを複製できる状態にあることを意味する。ある論理ボリュームのI/Oモードが「Mirror」の場合には、当該論理ボリュームとそのペアボリュームから構成されるボリュームペアのペアステータスは「Pair」に設定されている。
ある論理ボリュームのI/Oモードが「Local」の場合、当該論理ボリュームに対するデータ更新要求(WRITEコマンド等)を受け付けると、当該論理ボリュームのみが更新される。当該論理ボリュームのペアボリュームに対するデータ更新は行われない。
またある論理ボリュームのI/Oモードが「Remote」の場合、当該論理ボリュームに対するデータ更新要求を受け付けても、当該論理ボリュームの更新は行われない。代わりに、当該論理ボリュームのペアボリュームに対してデータ更新が行われる。
論理ボリュームのI/Oモードが「Block」の場合、当該論理ボリュームに対するデータ更新要求を受け付けても、当該論理ボリュームの更新は行われず、データ更新要求を発行してきた機器(ホスト100等)に対してエラーを返却する。
I/Oモードもペアステータスと同様、ストレージ装置400等の状態に応じて、ストレージ装置400が自律的に変化させることもあるが、ストレージ装置400のユーザが、ホスト400または管理端末から指示を発行することで、I/Oモードを変更させることもできる。
本実施例では、ストレージ装置400が、ボリューム管理テーブルT300とペア管理テーブルT400というテーブルに管理情報を格納している例を説明しているが、管理情報はテーブルというデータ構造で管理されなければならないわけではない。管理情報はテーブル以外のデータ構造を用いて管理されてもよい。
また、ペア管理テーブルT400で管理されている情報の一部が、ボリューム管理テーブルT300で管理されるようにしてもよい。たとえば、ペア管理テーブルT400には、ある論理ボリュームがP−VOLかS−VOLかを識別するための情報(P−VOL#(T404)、S−VOL(T406)等)が格納されている。しかし、ある論理ボリュームがP−VOLかS−VOLかを識別するための情報は、論理ボリュームに設定されている属性情報の一種ともいえる。そのためボリューム管理テーブルT300のI/Oモード(T307)に、論理ボリュームがP−VOLかS−VOLかを表す情報が格納されるようにしてもよい。
以下、ボリューム管理テーブルT300のI/Oモード(T307)に格納されている情報と、論理ボリュームがP−VOLかS−VOLかを識別するための情報(P−VOL#(T404)、S−VOL(T406)等)のことを総称して、「ボリューム属性情報」と呼ぶ。
なお、ストレージ装置400のMP521は、ホスト100からある論理ボリュームに対するアクセスコマンド(WRITEコマンド等)を受信すると、自装置の共有メモリ領域に格納されているボリューム管理テーブルT300とペア管理テーブルT400を参照することによって、アクセス対象論理ボリュームのボリューム属性情報、そしてアクセス対象論理ボリュームの属性(P−VOLであるかS−VOLであるか)を特定する。そしてMP521は、特定されたボリュームの属性に応じた処理を行う。その際に参照されるボリューム管理テーブルT300とペア管理テーブルT400は、自装置のテーブルであり、他装置のテーブルを参照することは行わない(つまりストレージ装置400−1のMP521は、ストレージ装置400−1内で管理されているボリューム管理テーブルT300とペア管理テーブルT400を参照することで動作し、ストレージ装置400−2内のテーブルを参照することは行わない)。ただし、ストレージ装置400−1とストレージ装置400−2のそれぞれで管理されているボリューム管理テーブルT300とペア管理テーブルT400に格納されている内容が、不整合状態にならないように管理されている。たとえばペア管理テーブルT400−1で、ある論理ボリュームがP−VOLとして管理されている場合、ペア管理テーブルT400−2でも同様に、当該論理ボリュームはP−VOLとして管理されている。
(3)コマンド処理の流れ
続いて、ホスト100からコマンドを受信した時に、ストレージ装置400で行われる処理の流れについて説明していく。なお、本発明の実施例では、ホスト100から以下のコマンドを受信した時について、ストレージ装置400で行われる処理の流れを説明していく。
(a) GET LBA STATUS
(b) LOG SENSE
(c) WRITE SAME
(d) UNMAP
(e) COMPARE AND WRITE
(f) WRITE
上の(a)〜(f)のコマンドは、いずれもSCSIで規格化されているコマンドであるため、以下では本発明の実施例に関係のある点を中心に説明し、詳細な仕様の説明は省略する。(a)、(b)のコマンドは、本明細書では情報採取系コマンドと呼ばれることもある。情報採取系コマンドは、ホスト100が論理ボリュームの状態などを取得したい場合に用いられる。(a)のコマンドは、ホスト100が、指定されたLBAの状態の問い合わせを行うためのコマンドで、具体的には指定されたLBAに物理記憶領域が割り当てられているか等の問い合わせを行うためのコマンドである。(b)のコマンドは、ホスト100が、指定された論理ボリュームの状態、たとえば容量の問い合わせを行う時に用いられる。
(c)〜(f)のコマンドは、ホスト100が論理ボリュームに対するI/O、とくに更新に関する処理を行うために用いられるコマンドであるため、本明細書では「I/O系コマンド」あるいは「更新系コマンド」と呼ぶ。(c)のWRITE SAMEコマンドは、ホスト100が、論理ボリュームの所定の領域(1ブロック以上)の全てに対して、同一データを書き込む際に用いられる。コマンドのパラメータとして、論理ボリューム上の領域を特定する情報(具体的には論理ボリュームを特定する情報であるLUN、及び当該LUNで特定された論理ボリューム上の領域を特定する情報である、LBA及びデータ長)が指定され、さらにライトデータとして、1ブロックのデータが指定される(以下、この指定される1ブロックのデータのことを「パターンデータ」と呼ぶ)。このコマンドを受信したストレージ装置400は、指定されたパターンデータを、指定された領域全てに書き込む。たとえばパターンデータとして、all zeroデータ(1ブロック内の全ビットが0のデータ)が指定された時、ストレージ装置400は指定された領域全てに0を書き込む。
(d)のUNMAPコマンドは、ホスト100が、論理ボリュームの所定の領域のアンマップ(後述)を行いたいときに用いられる。
アンマップについて説明する。ユーザ(またはホスト100)によって論理ボリュームに書き込まれたデータは、ある程度の期間が経過するとユーザ(またはホスト100)にとって不要になることがある。ここで論理ボリューム上のあるページ(ページAと呼ぶことにする)のデータが全て不要になった場合を想定する。その場合、ページAに割り当てられていた物理記憶領域を、ページAに割り当てられていない状態にし、当該物理記憶領域を他のページに割り当てるようにしたほうが、物理記憶領域を有効に活用できる。
本発明の実施例に係るストレージ装置400では、物理記憶領域が割り当てられているページを、物理記憶領域が割り当てられていない状態にする機能を有する。本発明の実施例では、この機能のことをアンマップ機能と呼ぶ。また、ページが、物理記憶領域が割り当てられていない状態にあることを、「アンマップ状態」と呼ぶ。さらに、ページをアンマップ状態にするオペレーションのことを、「アンマップ」または「ページ割り当て解除」と呼ぶ。
ストレージ装置400は、ホスト100からUNMAPコマンドを受信したことに応じて、アンマップを実施する。UNMAPコマンドを発行するユーザ(またはホスト100)は、アンマップしたい領域(LUN、LBA及びデータ長で特定される領域)の情報を1または複数、UNMAPコマンドのパラメータに指定することができる。
ただしUNMAPコマンドで指定可能な領域の最小単位は、1ブロック(ホスト100がストレージ装置400のボリュームのデータのリードまたはライトを実施する際の、最小アクセス単位であり、サイズは一例として512バイトである)である。一方本発明の実施例に係るストレージシステム300では、論理ボリュームのページのサイズはたとえば42MB等の、1ブロックよりも大きいサイズである。そのため、ホスト100から発行される1回のUNMAPコマンドでは、ページ全体のUNMAPが行われない場合がある。
そこで本発明の実施例に係るストレージ装置400では、UNMAPコマンドを受信すると、UNMAPコマンドのパラメータで指定される領域全てに対して「0」を書き込む。またストレージ装置400は、ページ内の領域(正確には、「ページに割り当てられた物理記憶領域」だが、記載が冗長になることを避けるために「ページ内の領域」と表記する)のうち、「0」が格納されている領域を認識する機能(または各ページについて、ページ内の全領域に0が格納されている状態か否かを判定する機能)を備えている。そしてUNMAPコマンドを1回以上受信して、UNMAPコマンドで指定された領域に「0」を書き込む処理を行った結果、あるページの全領域に「0」が格納された状態になったことが認識された時点で、ストレージ装置400はそのページについて、ページ割り当て解除を行う。
(e)のCOMPARE AND WRITEコマンドは、ATS(Atomic Test and Set)コマンドとも呼ばれることがある。コマンドのパラメータとして、論理ボリューム上の領域を特定する情報(LUN、LBA及びデータ長)が指定される。またコマンドとともにホスト100からストレージ装置400に送信されるデータとして、コンペアデータとライトデータという2種類のデータがある。COMPARE AND WRITEコマンドを受信したストレージ装置400は、パラメータで指定された論理ボリューム上領域のデータを、送信されてきたコンペアデータと比較する。そして比較の結果、論理ボリューム上の領域のデータの内容がコンペアデータと同一であった場合にはライトデータを書き込むが、そうでない場合にはライト処理を行わない。また、データの比較処理を開始してからライトデータの書き込みが完了するまでは、パラメータで指定された領域がロックされる。つまり他の処理による、当該領域に対するデータアクセスは禁止される。
(f)のコマンド(WRITEコマンド)は、ホスト100が、論理ボリュームの所定の領域に対して、指定されたデータを書き込む際に用いられる。一般的にホスト100が、アプリケーション1112からの指示に基づいて、データを論理ボリュームに対して書き込む際には、このWRITEコマンドをストレージ装置に発行する(ただし、特定のパターンのデータ(たとえばall zero、all 1等)を、論理ボリュームの所与の領域に書き込む場合、たとえば論理ボリュームの所定範囲のデータをすべて消去したい場合等には、(c)のWRITE SAMEコマンドを発行する)。コマンドのパラメータとして、論理ボリューム上の領域を特定する情報(LUN、LBA及びデータ長)が指定される。さらにライトデータとして、指定された領域の長さと同サイズのデータが送信される。
以下、ストレージ装置400がホスト100から上で説明したいずれかのコマンドを受信した時に行う処理を説明していく。まず図5を用いて、全体の流れを説明する。ストレージ装置400がコマンドを受信すると、まずストレージ装置400のMP521は、受信したコマンドが情報採取系のコマンドであるか否かを判定し(S1)、受信したコマンドが情報採取系のコマンドである場合にはS3以降の処理を行う。
(3ーa、3−b)情報採取系コマンド(GET LBA STATUS, LOG SENSE)に係るオペレーション
S3では、MP521は、コマンドの種類の解析をさらに行い、たとえばコマンドの種類がGET LBA STATUSであれば、コマンドのパラメータで指定されたLBAの状態(たとえば物理記憶領域が割り当てられているか等)を取得し、その情報をホスト100に返却する処理を行う。またコマンドの種類がLOG SENSEであれば、コマンドのパラメータで指定された論理ボリュームあるいはストレージ装置400の情報を返却する。つまり、ストレージ装置400は情報採取系のコマンドを受信した場合には、論理ボリュームのI/Oモードやペアステータスを考慮せず、コマンドのパラメータで指定された論理ボリュームまたはストレージ装置400の情報を、コマンド発行元(ホスト100等)に返却する処理を行う。
一方S1で、コマンドが情報採取系のコマンドでないと判定された場合(S1:N)、S2以降の処理が行われる。S2ではMP521は、コマンドの種類を判定し、コマンドの種類に応じて、S11、S21、S31、S40のいずれかの処理を行う。コマンドがWRITE SAMEであった場合には、MP521はS11以降の処理を行い、コマンドがUNMAPであった場合には、MP521はS21以降の処理を行う。またコマンドがATSであった場合には、MP521はS31以降の処理を行い、コマンドがWRITEであった場合には、MP521はS40以降の処理を行う。
また、ストレージ装置400は、上で説明していないコマンド(たとえば論理ボリュームに格納されたデータを読み出す際に用いられるコマンドであるREADコマンド等)を受信することもある。その場合、たとえばREADコマンドを受信した場合には、ストレージ装置400は論理ボリュームのリード処理などを実施するが、本明細書ではこれらの処理は省略している。
以降では、S2の判定において、コマンドが、WRITE SAME、UNMAP、ATS、またはWRITEであった場合について説明する。また以下では特に断りのない限り、ストレージ装置400での処理中に、エラーが発生しなかった場合の処理の流れを説明する。
S2の判定において、コマンドが、WRITE SAME、UNMAP、ATS、またはWRITEであった場合、いずれの場合においても、MP521はまずボリューム管理テーブルT300を参照し、コマンドで指定されているポートID、LUNを論理ボリューム番号(R−LDEV#)に変換する。そしてペア管理テーブルT400を参照し、変換された論理ボリューム番号で特定される論理ボリューム(アクセス対象ボリューム)がP−VOLであるかS−VOLであるかを判定する(S11、S21、S31、S41。なお、S41は図5には記載がなく、図19に記載されている)。これはアクセス対象ボリュームがP−VOLであるかS−VOLによって、行うべき処理が異なるためである。
続いてMP521はボリューム管理テーブルT300を参照し、アクセス対象ボリュームの状態(I/Oモード)がBlockであるか否かを判定する(S12、S13、S22、S23、S32、S33、S42,S43)。アクセス対象ボリュームの状態がBlockである場合には、MP521はエラーをホスト100に返却し、処理を終了する。アクセス対象ボリュームの状態がBlockでない場合、S14,S15,S24,S25,S34,S44またはS45の処理を行う。
(3ーc)WRITE SAMEコマンド
図6を用いて、ストレージ装置400がWRITE SAMEコマンドを受信した場合で、かつ当該コマンドでアクセス対象ボリュームとして指定されているボリュームがP−VOLであった場合に、ストレージ装置400で行われる処理の流れを説明する。なお、以下の処理では一例として、P−VOLがストレージ装置400−1に、そして当該P−VOLとペア関係にあるボリューム(S−VOL)がストレージ装置400−2に存在する場合を例にとって説明する。そして以下で説明する処理は特に断りがない限り、ストレージ装置400−1(P−VOLが存在するストレージ装置)のMP521が実行する処理である。
まずMP521は、ボリューム管理テーブルT300を参照し、アクセス対象ボリュームのI/Oモードを判定する(S140)。以下、I/OモードがLocalの場合、Remoteの場合、あるいはMirrorの場合について説明していく。なお以下では、特に断りのない限り、WRITE SAMEコマンドで指定される、論理ボリュームのアクセス対象領域の範囲が、1スロットに一致している場合について説明する。
I/OモードがLocalの場合、MP521はLM522上に1スロット分のデータ領域を確保する。そして、WRITE SAMEコマンドで指定されているライトデータ(1ブロック分)を、確保した領域全てに書き込む(S1421)。たとえば指定されたライトデータがall 1(1ブロック内の全ビットが「1」)の場合には、確保した領域の全てのビットに「1」を書き込む。さらにCHA530aのバッファ532aにも1スロット分の領域を確保し、LM522上に確保された領域に格納されているデータを、バッファ532a上の確保された領域にコピーする。
なお以下では、ここでの処理、つまりWRITE SAMEコマンドで指定された1ブロック分のデータを、バッファ532の1スロット分の領域全体に書き込む処理のことを、「データ拡張処理」と呼ぶ。また、上の説明ではデータ拡張処理によって作成される1スロット分のデータが、CHA530aのバッファ532aに作成される例を説明しているが、バッファ532a以外の領域に作成するようにしてもよい。たとえばLM522に作成するようにしても本発明は有効である。
続いてMP521は、キャッシュ領域の中の、1スロット分の未使用領域を確保する(S1422)。この処理は、ディスクキャッシュを搭載したストレージ装置が実施する周知の処理である。また、以下では、この処理(キャッシュ領域上の1スロットあるいは複数スロット分の未使用領域を確保する処理)のことを、「スロット確保処理」または「キャッシュスロット確保処理」と呼ぶ。なお、WRITE SAMEコマンドで指定される論理ボリュームのアクセス対象領域の範囲が、複数スロット分の範囲である場合には、MP521は複数のスロットを確保する。
S1423ではMP521は、S1421でバッファ532a上に確保された領域に格納されているデータを、S1422で確保された、キャッシュ領域上の1スロット分の未使用領域にライトする。これにより、WRITE SAMEコマンドで指定された論理ボリューム上のアクセス対象領域の全範囲に対して、(WRITE SAMEコマンドで指定された)同一のデータが格納されたことになる。
S1423の処理が終わると、MP521はホスト100に対して、WRITE SAMEコマンドに係る処理が正常に終了した旨を返答する(S1424)。なお、SCSIの規格では、処理が正常に終了した場合には、ホスト100には「GOOD」というステータスが返却される。一方処理中にエラーが発生したために処理が正常に終了しなかった場合には、ホスト100には「CHECK CONDITION」というステータスが返却される。そのため、以下では、ストレージ装置400がホスト100に対し、処理が正常に終了した旨を返答することを、「GOODステータスを返却する」と表現する。
そしてS1422で確保したキャッシュスロットを解放し(S1425)、処理を終了する。
一方S140の判定で、I/OモードがRemoteであると判断された場合、S1431以降の処理が実行される。S1431ではMP521は、データ拡張処理を行う。この処理はS1421と同じ処理である。
続いてS1432で、MP521はペア管理テーブルT400を参照し、アクセス対象ボリュームとペア関係にあるボリューム(S−VOL)の装置シリアル番号、LDEV#を特定する。そして、S−VOLの存在するストレージ装置400(ストレージ装置400−2)に対して、S1431で作成されたデータをS−VOLに書き込むことを指示するコマンドを発行する。本発明の実施例では、ここで発行されるコマンドのことをWRFBAコマンドと呼ぶ。
WRFBAコマンドは、ストレージ装置400間でのみ有効なコマンドである。WRFBAコマンドを受信したストレージ装置400が行う内容は、WRITEコマンドを受信した場合と類似しており、指定されたデータを指定された論理ボリューム上の領域(LBA)に格納する処理を行う。そのため、S1432の処理によって、ストレージ装置400−1から送信されたWRFBAコマンドを受信したストレージ装置400−2では、S−VOLに対してデータを書き込む処理を行う。この処理については後述する。
また、WRFBAコマンドは、1スロット分のデータ書き込みを指示するコマンドである。そのため、WRITE SAMEコマンドで複数スロットに相当する領域への書き込みが指示された場合には、ここではWRFBAコマンドを複数回発行することで、ストレージ装置400−2に対してS−VOLへのデータ書き込みの指示を行う。また、WRFBAコマンド及びライトデータは、I/F(531b)及びSAN220を経由してストレージ装置400−2へと送信される。
本発明の実施例に係るストレージ装置400で用いられる、WRFBAコマンドのフォーマットの例を、図25に示す。WRFBAコマンドには、オペレーションコード(Opcode。また、オペコードと呼ばれることもある)701、ライト位置情報702、発行元I/Oモード703、排他確保フラグ704の情報が含まれる。また、これ以外の情報が含まれていてもよい。
オペレーションコード701は、送信されたコマンドがWRFBAコマンドであることを表す、1バイトのコード(たとえば0xDA等の値)である。ライト位置情報702は、ライトデータの書き込み対象の論理ボリュームの領域を特定する情報であり、論理ボリュームのLDEV#と論理ブロックアドレス(LBA)が含まれている。WRFBAコマンドを受信したストレージ装置400は、ライト位置情報702で特定される論理ボリュームのLBAから1スロット分の領域に対して、ライトデータを格納する処理を行う。
また、発行元I/Oモード703は、ライト位置情報702で特定される論理ボリュームとペア関係にある論理ボリュームのI/Oモードの情報である。つまりWRFBAコマンドを発行するストレージ装置400(仮にストレージ装置400−1とする)は、コマンド発行先のストレージ装置400(400−2)のS−VOLに対する書き込みを指示する場合、発行元I/Oモード703に、自身(ストレージ装置400−1)にあるP−VOLのI/Oモードの情報が含まれたWRFBAコマンドを作成し、ストレージ装置400−2に送信する。この情報の使われ方は後述する。
排他確保フラグ704には、0または1が格納される。1が格納されていた場合、WRFBAコマンドを受信したストレージ装置400は、後述するデータ排他確保処理を行ってから、論理ボリュームへのライト処理を行う。なお、ストレージ装置400は、WRFBAコマンドによるライト対象の論理ボリュームがP−VOLで、かつそのP−VOLのI/Oモードが「Mirror」の場合に限って、排他確保フラグ704が「1」に設定されたコマンドを作成する。そのためS1432では、排他確保フラグ704に0が設定されたコマンドが作成され、送信される。
ストレージ装置400−2で、S−VOLに対してデータ書き込みが終了すると、ストレージ装置400−1に、処理が完了した旨を表す応答が返信される。S1433で、ストレージ装置400−1のMP521は、ストレージ装置400−2からの応答を受信する(逆に言えばストレージ装置400−1は、S1432でWRFBAコマンドを発行した後、ストレージ装置400−2から応答が返信されて来るまで待つ)。
なお、先にも述べたとおり、WRITE SAMEコマンドで複数スロットに相当する領域への書き込みが指示された場合には、MP521はS−VOLの存在するストレージ装置400−2にWRFBAコマンドを複数回発行する。より正確には、MP521はS1432(WRFBAコマンドの発行)とS1433(ストレージ装置400−2からの応答の受信)を複数回実施する。
S1433で処理が完了した旨の応答を受信すると、MP521はホスト100に対して、GOODステータスを返却する(S1434)。この処理はS1424と同じ処理である。GOODステータスをホスト100に返却した後、MP521は処理を終了する。
さらにI/OモードがMirrorの場合について説明する。I/OモードがMirrorの場合、データはP−VOLとS−VOLの双方に書き込まれる。そのため、P−VOLの存在するストレージ装置400−1とS−VOLの存在するストレージ装置400−2の両方で、論理ボリュームに対するデータ書き込みが行われる。データ書き込みの順は、P−VOLに対する書き込みを最初に行って、そのあとでS−VOLに対する書き込みを行うように決められている。なお以下では、WRITE SAMEコマンドで指定される、論理ボリュームのアクセス対象領域の範囲が、複数スロット分のサイズである場合について説明する。
S1411でMP521は、WRITE SAMEコマンドで指定される、論理ボリュームのアクセス対象領域の範囲全体のロックを行う。この処理を本明細書では「データ排他確保処理」と呼ぶ。この処理を行うことにより、論理ボリュームのアクセス対象領域の範囲全体は、後述するデータ排他解放処理が行われるまでは、他の処理(当該範囲に対するリードあるいはライトを行う処理等)によってアクセスされることが防止される。
ここで説明する例では、データ排他確保処理はP−VOLの存在するストレージ装置400(400−1)で実施されるため、データ排他確保処理により、P−VOLの領域についてロックが行われる。ただし、I/OモードがMirrorの論理ボリュームに対する書き込みは、P−VOLから最初に行われる。そのため、S1411が実行された直後に、たとえばホスト100からS−VOLに対する書き込み要求(WRITEコマンド等)を受信した場合でも、まずP−VOLへの書き込み処理が開始される。その時、S1411が実行されていることにより、P−VOLの領域が排他されているため、ホスト100からS−VOLに対する書き込み要求(WRITEコマンド等)は待たされることになる(つまり、WRITE SAMEコマンドに係る処理が完了するまでは、他の処理がボリュームペアに対してアクセスできない状態が維持できる)。
S1412〜S1414では、先に説明したS1421〜S1423と同じ処理が行われる。つまりMP521は、データ拡張処理、キャッシュスロット確保処理、キャッシュ領域へのデータライト処理を行う。ただし、S1413では、論理ボリュームのアクセス対象領域の範囲が複数スロット分のサイズであれば、複数のキャッシュスロットが確保される。
S1415、S1416では、先に説明したS1432,S1433と同じ処理が行われる。これによりS−VOLに対するデータ書き込みが行われ、S−VOLの存在するストレージ装置400−2からの応答が返却される。
なお、ここでは1スロットごとにデータ書き込みを行う。そのため、S1414〜S1416の処理を1スロットずつ行う(つまりWRITE SAMEコマンドで、8スロット分のデータ書き込みが指示された場合、S1414〜S1416の処理を8回繰り返す)。
ストレージ装置400−2から処理完了の応答を受信(S1416)した後、MP521(ストレージ装置400−1)は、S1411でロックした領域のロックを解放する(S1417)。以下ではこの処理のことを、「データ排他解放処理」と呼ぶ。その後MP521は、S1424,S1425の処理を行って、処理を終了する。なおS1425で行われるスロット解放処理では、S1413で確保されたキャッシュスロットがすべて解放される。
続いて図7を用いて、ストレージ装置400がWRITE SAMEコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがS−VOLであった場合に、ストレージ装置400で行われる処理の流れを説明する。なお、図6の説明の場合と同様に、以下の処理では一例として、P−VOLがストレージ装置400−1に、そして当該P−VOLとペア関係にあるボリューム(S−VOL)がストレージ装置400−2に存在する場合を例にとって説明する。そして以下で説明する処理は特に断りがない限り、ストレージ装置400−2(S−VOLが存在するストレージ装置)のMP521が実行する処理である。
まずMP521は、ボリューム管理テーブルT300を参照し、アクセス対象ボリュームのI/Oモードを判定する(S150)。以下、I/OモードがLocalの場合、Remoteの場合、あるいはMirrorの場合について説明していく。なお、以下では特に断りのない限り、WRITE SAMEコマンドで指定される、論理ボリュームのアクセス対象領域の範囲が、1スロットに一致している場合について説明する。
I/OモードがLocalの場合(S150:Local)、MP521はS1521〜S1525の処理を行うことで、S−VOLへのデータ書き込みを行う。S1521〜S1525の処理は、図6のS1421〜S1425と同じであるため、説明を省略する。
一方S140の判定で、I/OモードがRemoteであると判断された場合、S1531以降の処理が実行される。まずMP521はデータ拡張処理を行う(S1531)。この処理はS1421やS1431と同じ処理である。ただしデータ拡張処理によって作成された1スロット分のデータは、バッファ532b、つまりSAN220を介してストレージ装置400−1に接続されているCHA530bのバッファ532bに格納される。ただし別の実施形態として、LM522に作成されたデータを格納しておき、P−VOL(ストレージ装置400−1)にデータを送信するときに、LM522から作成されたデータを読み出して送信する実施形態もあり得る。
続いてS1532で、MP521はペア管理テーブルT400を参照し、アクセス対象ボリュームとペア関係にあるボリューム(P−VOL)の装置シリアル番号、R−LDEV#を特定する。これらの情報をもとにWRFBAコマンドを作成し、P−VOLの存在するストレージ装置400(ストレージ装置400−1)に対して、WRFBAコマンドとS1531で作成されたデータを送信する。そしてMP521は、ストレージ装置400−1から応答が返信されて来るまで待つ。
S1533で、ストレージ装置400−2のMP521が、ストレージ装置400−1からの応答を受信すると、MP521はホスト100に対して、GOODステータスを返却する(S1534)。この処理はS1434と同じ処理である。GOODステータスをホスト100に返却した後、MP521は処理を終了する。
さらにS150の判定で、I/OモードがMirrorと判断された場合、S1511以降の処理が行われる。まずS1511でMP521は、データ拡張処理を行う(これはS1531と同じ処理である)。続いてS1512でMP521はWRFBAコマンドを作成し、アクセス対象ボリュームとペア関係にあるボリューム(P−VOL)に対し、WRFBAコマンドとS1511で作成されたデータを送信し、P−VOLのあるストレージ装置400(ストレージ装置400−1)から応答が返却されるのを待つ(S1513)。この処理はS1532、S1533と同様の処理である。ただし、S1512で作成されるWRFBAコマンドには、排他確保フラグ704に「1」が設定される点が、S1532と異なる。
P−VOLのあるストレージ装置400(ストレージ装置400−1)から応答を受信すると(S1513)、MP521はS1514〜S1517の処理を行うことで、S−VOLへのデータ書き込みを行う。S1514〜S1517の処理は、S1522〜S1525と同じ処理である。
最後にMP521は、P−VOLのあるストレージ装置400(ストレージ装置400−1)に対して、データ排他解放コマンドを送信し(S1518)、処理を終了する。詳細は後述するが、S1512でストレージ装置400−1(P−VOLのあるストレージ装置)にWRFBAコマンドが発行されると、ストレージ装置400−1では、データ排他確保処理を行う。そしてストレージ装置400−2は、S−VOLへの書き込みが完了した後、ストレージ装置400−1にデータ排他解放処理を行わせるため、ここでデータ排他解放コマンドを送信する。データ排他解放コマンドもWRFBAコマンドと同様、ストレージ装置400間でのみやり取りされるコマンドである。データ排他解放コマンドには、ロックを解放すべき論理ボリュームのアクセス対象領域の情報が含まれており、データ排他解放コマンドを受信したストレージ装置400はその情報をもとに、論理ボリュームのアクセス対象領域のロックを解放する。
続いて、ストレージ装置400がWRFBAコマンドを受信した時に行われる処理の流れを、図8を用いて説明する。
ストレージ装置400がWRFBAコマンドを受信すると、MP521はペア管理テーブルT400を参照し、アクセス対象論理ボリュームがP−VOLであるかS−VOLであるか判定する(S1001)。アクセス対象論理ボリュームがP−VOLであった場合、MP521はアクセス対象ボリュームのペアボリューム(S−VOL)のI/Oモードを判定する(S1011)。ペアボリュームのI/Oモードは、WRFBAコマンドのパラメータ(発行元I/Oモード703)に含まれているので、MP521は発行元I/Oモード703を参照することによって、S1011の判定を行う。
S1011の判定で、ペアボリュームのI/OモードがMirrorであった場合、MP521はS1012以降の処理を行う。S1012では、WRFBAコマンドに含まれている排他確保フラグ704を参照し、排他確保フラグ704が「1」であれば、アクセス対象領域のロック(データ排他確保)を行う。
続いてS1014でMP521はキャッシュスロット確保処理を行い、S1015でMP521はライトデータをキャッシュスロットに書き込む。その後MP521は、WRFBAコマンドの発行元のストレージ装置400に対して、処理が完了した旨を応答する(S1016)。そしてWRFBAコマンドの発行元のストレージ装置400から、新たな指示が到来するのを待つ。
S1017でMP521が、WRFBAコマンドの発行元のストレージ装置400からデータ排他解放コマンドを受信すると、MP521はデータ排他解放を実施する(S1018)。その後MP521は、S1014で確保したキャッシュスロットを解放し(S1019)、処理を終了する。
なお、アクセス対象領域が1スロット分の領域ではなく、複数スロット(仮にnスロットとする)に跨る領域であった場合には、S1012〜S1019の処理をn回繰り返し実行する。
S1011の判定で、ペアボリュームのI/OモードがRemoteであった場合、またはS1001の判定でアクセス対象論理ボリュームがS−VOLであった場合、MP521はS1022〜S1025の処理を行う。S1022〜S1025の処理はそれぞれ、S1014〜S1016、及びS1019と同じ処理であるので、ここでは説明を省略する。
以上が、ストレージ装置400がWRITE SAMEコマンドを受信した場合に行う処理の説明である。なお、上で説明した処理では、論理ボリューム上のアクセス対象領域にデータをライトする(正確には、アクセス対象領域用に確保されたキャッシュ領域にデータをライトする、というべきだが、先に述べたとおり、キャッシュ領域にライトデータが格納された時点で、実質的に論理ボリュームへのライトが完了した状態になるので、このように表現する)より前に、WRITE SAMEコマンドとともに送信されてくる、1ブロック分のライトデータを1スロット分のバッファ532a上の領域に書き込んで、1ブロック分のライトデータを1スロットに拡張するデータ拡張処理が行われる。
ただしよく使われる種類のデータ、たとえばライトデータとしてall zeroが良く使われる場合、バッファ532あるいはLM522上に、全て0が書き込まれている1スロット分の領域をあらかじめ用意しておき、論理ボリューム上のアクセス対象領域にall zeroをライトする時には、用意されている1スロット分の領域のデータ(all zero)を読み出して、アクセス対象領域にライトすれば、データ拡張処理を行う手間が省ける。
そのため、本発明の実施例に係るストレージ装置400では、バッファ532(532a及び532b)上に、全て0が書き込まれている1スロット分の領域を用意している。そしてMP521は、WRITE SAMEコマンドとともに送信されてくるライトデータがall zeroであるか判定し、all zeroの場合には、データ拡張処理(たとえば図7のS1411、S1421,S1431、図8のS1511,S1521、S1531等)を行わず、バッファ532上に用意されている1スロット分の領域のデータ(つまり1スロット分のall zeroデータ)をキャッシュ領域に書き込む。
[変形例]
上で説明した処理の流れでは、ストレージ装置400−1からストレージ装置400−2のボリュームに対して、WRITE SAMEコマンドで指定されたデータを書き込む場合(またはストレージ装置400−2からストレージ装置400−1のボリュームに対して、WRITE SAMEコマンドで指定されたデータを書き込む場合)、WRFBAコマンドが用いられていた。ただしWRFBAコマンドは、全領域に同内容のデータを書き込む場合であっても、データ書き込み範囲と同じサイズのデータを送信する必要があるコマンドである。そのため、上で説明した実施例の変形として、WRITE SAMEコマンドのように、書き込みデータのごく一部(たとえば1ブロック)だけを送信するだけで、データ書き込み範囲に全て同一データの書き込みが行われるコマンド(以下ではこのコマンドのことを、「WRITE SAME伝搬コマンド」と呼ぶ)を定義し、それを用いる例を説明する。
WRITE SAME伝搬コマンドは、論理ボリュームの所定の領域の全てに対して、同一データを書き込むことを指示するコマンドである。図26を用いて、WRFBAコマンドとWRITE SAME伝搬コマンドとの違いを説明する。図26の上段は、ストレージ装置400−1からストレージ装置400−2に対して、WRFBAコマンドを使って、論理ボリューム内の1つのスロットの全領域に、「1」を書き込む場合の例である。この場合、ストレージ装置400−1からストレージ装置400−2には、WRFBAコマンドを送信するとともに、ライト対象データとして、1スロット分のデータを送信する。WRFBAコマンドを受信したストレージ装置400−2は、受信したライトデータをそのまま、WRFBAコマンドのパラメータで指定されている論理ボリュームの領域へと書き込む。
図26の下段は、ストレージ装置400−1からストレージ装置400−2に対して、WRITE SAME伝搬コマンドを使って、論理ボリューム内の1つのスロットの全領域に、「1」を書き込む場合の例である。この場合ストレージ装置400−1からストレージ装置400−2に、コマンド(WRITE SAME伝搬コマンド)を送信する必要がある点は、WRFBAコマンドの場合と同様である。ただしWRITE SAME伝搬コマンドを用いる場合、ライト対象データとして、1ブロック分のデータ(パターンデータ)だけを送信すればよい。そしてWRITE SAME伝搬コマンドを受信したストレージ装置400−2は、受信したパターンデータを、1スロット分の長さに拡張する。この処理は、上で説明したデータ拡張処理と同様の処理が行われる。そしてストレージ装置400−2内で拡張されたデータを、論理ボリュームに書き込む。また、ライト範囲が複数スロットにわたる場合には、この拡張されたデータを、複数のスロットに書き込む。つまり、WRITE SAME伝搬コマンドを受信したストレージ装置400は、ホスト100からWRITE SAMEコマンドを受信した時と同様の処理を行う。
変形例に係るストレージ装置400において、WRITE SAMEコマンドを受信した時に行われる処理の流れについて、図9、10、11を用いて説明する。図9は、ストレージ装置400がWRITE SAMEコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがP−VOLであった場合に、ストレージ装置400で行われる処理の流れを表している。図9の処理の多くは、図6を用いて説明した処理と共通しているので、ここでは図6と相違する点を中心に説明する。
P−VOLのI/OモードがMirrorの場合(S140:Mirror)、MP521はS1411〜S1417、S1424、S1425の処理を順次実行する。このうち、図6と相違する処理はS1415’のみであり、後の処理は図6に記載の処理と同じである。
図6のS1415ではWRFBAコマンドを発行していたのに対し、S1415’ではP−VOLとペア関係にあるボリューム(S−VOL)の存在するストレージ装置400に対して、WRITE SAME伝搬コマンドを発行する。またS1415’で、WRITE SAME伝搬コマンドとともにライトデータを送信するが、ここで送信されるデータは、先に図26を用いて説明したとおり、1ブロック分のデータ(パターンデータ)のみの送信でよい。WRITE SAMEコマンドで指定される論理ボリュームのアクセス対象領域の範囲が、複数スロット分の範囲である場合でも、S1415’のWRITE SAME伝搬コマンドの発行は1回で良い。これはWRITE SAME伝搬コマンドのパラメータにライト範囲を指定する際、WRITE SAMEコマンドで指定されたアクセス対象範囲と同じ範囲が指定できるためである。
P−VOLのI/OモードがRemoteの場合(S140:Remote)、MP521はS1432’〜S1434の処理を順次実行する。このうち、図6と相違する点は、図9の処理では、図6のS1431(データ拡張処理)が行われない点、図6のS1432(WRFBAコマンドの送信)に代えて、S1432’(WRITE SAME伝搬コマンドの送信)が行われる点である。S1432’の処理はS1415’と同じであるため、ここでは説明を省略する。
図10は、ストレージ装置400がWRITE SAMEコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがS−VOLであった場合に、ストレージ装置400で行われる処理の流れを表している。図10の処理の多くは、図7を用いて説明した処理と共通しているので、ここでは図7と相違する点を中心に説明する。
S−VOLのI/OモードがMirrorの場合(S150:Mirror)、MP521はS1511〜S1518の処理を順次実行する。このうち、図7と相違する処理はS1512’のみであり、後の処理は図7に記載の処理と同じである。
図7のS1512ではWRFBAコマンドを発行していたのに対し、S1512’では、S−VOLとペア関係にあるボリューム(P−VOL)の存在するストレージ装置400に対して、WRITE SAME伝搬コマンドを発行する。ここでWRITE SAME伝搬コマンドとともに送信されるライトデータは、S1415’の処理と同様、1ブロック分のデータのみの送信でよい。
なお、本発明は上で説明した処理手順に限定されない。たとえば上で説明した処理の流れでは、S1512’の前にデータ拡張処理(S1511)が実行されているが、データ拡張処理は、S−VOLに対してデータ書き込みをするまでに行われていればよい(図10の例では、P−VOLに対するデータ書き込みにはWRITE SAME伝搬コマンドが使用されるため、拡張されたデータをP−VOLに送信するわけではないからである)。そのため、S1512’の前でデータ拡張処理を行わず、たとえばS1514(キャッシュスロット確保処理)の前に、S1511の処理を行うようにしてもよい。
S−VOLのI/OモードがRemoteの場合(S150:Remote)、MP521はS1532’〜S1534の処理を順次実行する。このうち、図7と相違する点は、図10の処理では、図7のS1531(データ拡張処理)が行われない点、図7のS1532(WRFBAコマンドの送信)に代えて、S1532’(WRITE SAME伝搬コマンドの送信)が行われる点である。S1532’の処理はS1512’と同じであるため、ここでは説明を省略する。
続いて、変形例に係るストレージ装置400がWRITE SAME伝搬コマンドを受信した時に行われる処理の流れを、図11を用いて説明する。図11の処理の多くは、図8を用いて説明した処理と共通しているので、ここでは図8と相違する点を中心に説明する。
図11の処理と図8の処理との違いは、図11の処理ではデータ拡張処理が行われる点である。S1001の判定で、アクセス対象論理ボリュームがP−VOLであった場合、かつアクセス対象論理ボリューム(P−VOL)とペア関係にあるボリューム(S−VOL)のI/OモードがMirrorであった場合、S1014のスロット確保処理の前にデータ拡張処理が行われる(S1013)。
またS1001の判定で、アクセス対象論理ボリュームがP−VOLであった場合、かつアクセス対象論理ボリューム(P−VOL)とペア関係にあるボリューム(S−VOL)のI/OモードがRemoteであった場合、S1022のスロット確保処理の前にデータ拡張処理が行われる(S1021)。同様にS1001の判定で、アクセス対象論理ボリュームがS−VOLであった場合、S1022のスロット確保処理の前にデータ拡張処理が行われる(S1021)。それ以外の点は、図8の処理と変わりはない。
以上が、変形例に係るストレージ装置400における、WRITE SAMEコマンドに係る処理の説明である。変形例に係るストレージ装置400では、WRFBAコマンドに代えてWRITE SAME伝搬コマンドを用いることで、ストレージ装置400−1とストレージ装置400−2の間で伝送すべきライトデータの量、及び伝送すべきコマンドの数を削減することができ、結果としてストレージシステム300の性能が向上する。
(3ーd)UNMAPコマンド
次に、ストレージ装置400がUNMAPコマンドを受信した場合に行われる処理について、図12、図13を用いて説明していく。なお、以下の処理では一例として、P−VOLがストレージ装置400−1に、そして当該P−VOLとペア関係にあるボリューム(S−VOL)がストレージ装置400−2に存在する場合を例にとって説明する。
まず、ストレージ装置400がUNMAPコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがP−VOLであった場合に、ストレージ装置400で行われる処理の流れを、図12を用いて説明する。先に述べたとおり、本発明の実施例に係るストレージ装置400では、UNMAPコマンドを受信すると、UNMAPコマンドで指定されている論理ボリューム上領域の全てに対して、0を書き込む処理を行う。これはWRITE SAMEコマンドを受信した時に行う処理と実質的に同じである。そのためMP521は、UNMAPコマンドを受信すると、そのコマンドを、指定された領域の全てに「0」を書き込む旨を指示するWRITE SAMEコマンドに変換する(S241)。S241の処理の後は、WRITE SAMEコマンドを受信したものとして、処理が行われる。
以降の処理は、ほぼWRITE SAMEコマンドを受信した時に行われる処理と同じである。S242の処理は、図6のS140と同じである。またS2422〜S2425の処理(I/OモードがLocalの場合に行われる処理)は、図6のS1432〜S1434と同じである。またS2432〜S2434の処理(I/OモードがRemoteの場合に行われる処理)は、図6のS1422〜S1425と同じである。またS2411〜S2417の処理(I/OモードがMirrorの場合に行われる処理)は、図6のS1411、S1413〜S1417と同じである。
先に述べたとおり、WRITE SAMEコマンドでライト対象となるデータがall zeroである場合、データ拡張処理が行われない。そのため、UNMAPコマンドを受信した場合にも同様に、MP521はデータ拡張処理を行う代わりに、ライト処理(S2414,S2423)において、バッファ532上のall zeroが格納された1スロット分の領域のデータを書き込む処理を行う。また、S2432の処理(S−VOLに対してWRFBAコマンドとライトデータを送信する処理)においても、バッファ532上のall zeroが格納された1スロット分の領域のデータを送信する。
続いてストレージ装置400がUNMAPコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがS−VOLであった場合に、ストレージ装置400で行われる処理の流れを、図13を用いて説明する。この処理も、多くの部分はWRITE SAMEコマンドを受信した場合に行われる処理と同様である。
まずストレージ装置400の内部では、UNMAPコマンドを受信すると、そのコマンドを、指定された領域の全てに「0」を書き込む旨を指示するWRITE SAMEコマンドに変換する(S251)。
以降の処理は、WRITE SAMEコマンドを受信した時に行われる処理(図7)とほぼ同じである。図13の処理が図7の処理と異なる点は、図13の処理ではデータ拡張処理が行われない点である。S252の処理は、図7のS150と同じである。またS2522〜S2525の処理(I/OモードがLocalの場合に行われる処理)は、図7のS1522〜S1525と同じである。またS2532〜S2534の処理(I/OモードがRemoteの場合に行われる処理)は、図7のS1532〜S1534と同じである。またS2512〜S2518の処理(I/OモードがMirrorの場合に行われる処理)は、図7のS1512〜S1518と同じである。
また、S2415,S2432、S2512、S2532が実行されることで、S−VOL(またはP−VOL)が存在するストレージ装置400に対してWRFBAコマンドが発行される。ただし、このコマンドを受信した時のストレージ装置400の行うべき処理は、WRITE SAMEコマンドに係る処理で説明したもの(図8)と同じであるので、ここでは説明を省略する。
なお、図12、図13、または図8の処理が完了した後、MP521はライト対象領域が含まれているページ内の全領域に全て0が格納されているかどうかの判定を行う。全て0が格納されている場合には、当該ページについて、ページ割り当て解除を行う。この判定とページ割り当て解除は、図12、図13、または図8の処理に引き続いて必ず実施されるようにしてもよいし、あるいは図12、図13、または図8の処理とは非同期のタイミングで実行されるようにしてもよい。たとえば定期的に各ページ内の全領域に0が格納されているかの判定及びページ割り当ての解除を行うようにしてもよい。
また、上ではS−VOL(またはP−VOL)が存在するストレージ装置400に対してWRFBAコマンドを発行することで、S−VOL(またはP−VOL)にデータ(all zero)を書き込んでいるが、[変形例]で説明したWRITE SAME伝搬コマンドを発行するようにしてもよい。このようにすることで、ストレージ装置400−1とストレージ装置400−2の間で伝送すべきライトデータの量、及び伝送すべきコマンドの数を削減することができる。
(3ーe)COMPARE AND WRITE (ATS)コマンド
次に、ストレージ装置400がCOMPARE AND WRITE(ATS)コマンドを受信した場合に行われる処理について説明していく。なお、以下の処理では一例として、P−VOLがストレージ装置400−1に、そして当該P−VOLとペア関係にあるボリューム(S−VOL)がストレージ装置400−2に存在する場合を例にとって説明する。
最初に、ストレージ装置400がATSコマンドを受信した場合で、かつ受信したATSコマンドによってアクセス対象ボリュームとして指定されているボリュームがP−VOLであった場合に、ストレージ装置400で行われる処理の流れを、図14を用いて説明する。以下で説明する処理は特に断りがない限り、ストレージ装置400−1(P−VOLが存在するストレージ装置)のMP521が実行する処理である。
まずMP521は、ボリューム管理テーブルT300を参照し、アクセス対象ボリュームのI/Oモードを判定する(S340)。この処理は、S140と同じ処理である。以下、I/OモードがLocalの場合、Remoteの場合、あるいはMirrorの場合について説明していく。なお以下では、説明が冗長にならないように、特に断りのない限り、ATSコマンドで指定される、論理ボリュームのアクセス対象領域の範囲が、1スロットに一致している場合について説明する。
I/OモードがLocalの場合、MP521は、キャッシュスロット確保処理を行う(S34220)。この処理は、S1422と同じである。また、ATSコマンドで指定される論理ボリュームのアクセス対象領域の範囲が、複数スロット分の範囲である場合には複数のスロットを確保する点も、S1422と同様である。
S34221でMP521は、ATSコマンドで指定された論理ボリュームのアクセス対象領域の範囲のデータを、S34220で確保したキャッシュ領域にリードする。リード処理が終了すると、MP521は一旦キャッシュ領域を解放する(S34222)。なお、キャッシュ領域を解放しても、当該領域のデータがキャッシュ領域上から削除されることはなく、当該領域には論理ボリュームのアクセス対象領域の範囲のデータが格納されている状態にある。
また、キャッシュスロット確保処理(S34220)の実行前に、論理ボリュームのアクセス対象領域の範囲のデータが格納されたキャッシュ領域が、すでに存在しているケースもあり得る(いわゆる「キャッシュヒット」状態)。その場合にはS34221のリード処理を行う必要はない。
S34230では、MP521は、S34222で解放したキャッシュ領域を再び確保する。ここでの確保処理は、S34220で行われたキャッシュスロット確保処理とは若干異なり、排他確保処理と呼ばれる。排他確保処理によって確保されたキャッシュ領域は、他の処理からアクセスできない状態になる。たとえばATSコマンドで指定された論理ボリュームのアクセス対象領域の範囲と同じ範囲に対するデータ書き込みを要求するWRITEコマンドを受信した場合、MP521はキャッシュ領域確保を試みるが、排他確保処理が行われていると、WRITEコマンドに伴って行われるキャッシュスロット確保処理は、ATSコマンドに係る処理が終了するまで待たされる。
S34231では、MP521は、S34230で排他確保したキャッシュスロット上のデータと、ATSコマンドとともに受信したコンペアデータとを比較する。図示していないが、S34231での比較の結果、両データが異なっていた場合、MP521はホスト100に対してエラーを返却して、ATSコマンドに係る処理を終了する。
S34231での比較の結果、S34231で排他確保したキャッシュスロット上のデータと、ATSコマンドとともに受信したコンペアデータとが同一であった場合、S3424以降の処理が行われる。S3424でMP521は、ATSコマンドとともに受信したライトデータを、S34220で排他確保したキャッシュスロットに格納する。これにより、ATSコマンドとともに受信したライトデータが、論理ボリュームに格納されたことになる。
S3424の処理が終わると、MP521はホスト100に対してGOODステータスを返却する(S3425)。そしてS3426で、MP521は確保したキャッシュスロットを解放し(S3426)、処理を終了する。
一方S340の判定で、I/OモードがRemoteであると判断された場合、S3432以降の処理が実行される。S3432では、MP521はペア管理テーブルT400を参照し、アクセス対象ボリュームとペア関係にあるボリューム(S−VOL)の装置シリアル番号、LDEV#を特定する。そして、S−VOLの存在するストレージ装置400(ストレージ装置400−2)に対して、ATS伝搬コマンドと呼ばれるコマンドを送信する。
ATS伝搬コマンドは、WRFBAコマンドと同様に、ストレージ装置400間でのみ有効なコマンドである。ATS伝搬コマンドのパラメータにはアクセス対象論理ボリュームの領域を特定する情報が含まれている。そのためATS伝搬コマンドを受信したストレージ装置400は、パラメータに指定されている情報に基づいて、アクセス対象論理ボリュームの領域に対してATSコマンドを受信した時と同様の処理(具体的にはS34220〜S3424と同様の処理)を行うことができる。
さらにATS伝搬コマンドが送信される時、ホスト100がストレージ装置400にATSコマンドを発行する時と同様に、ATS伝搬コマンドとともに、コンペアデータとライトデータも、コマンド発行先のストレージ装置400に送信される。ATS伝搬コマンドを受信したストレージ装置400は、受信したコンペアデータを用いてコンペア処理を行い、コンペア結果が正しい(コンペアデータと論理ボリュームのアクセス対象範囲に格納されているデータとが同一である)場合に、ライトデータを論理ボリュームに格納する処理を行う。この処理は後述する。
S3432で(ストレージ装置400−1の)MP521がストレージ装置400−2にATS伝搬コマンドを送信すると、MP521はストレージ装置400−2から応答が返信されて来るのを待つ。S3433でストレージ装置400−2からの応答を受信し、その結果が正常であれば(つまりコンペア及びライトが成功した)、MP521はホスト100に対してGOODステータスを返却し(S3434)、処理を終了する。
S340の判定でI/OモードがMirrorであると判断された場合、S3411以降の処理が実行される。S3411では、論理ボリュームのアクセス対象領域の範囲全体のロックを確保する。この処理はS1411と同様である。続いて、S34120〜S3414の処理を行うことで、自身の論理ボリューム(P−VOL)のアクセス対象領域に対するコンペア及びライトを行う。この処理はI/OモードがLocalであると判断された場合に行われる処理(S34220〜S3424)と同じである。
S3415ではMP521は、S−VOLに対してATSコマンドとともに送信されてきたライトデータを、S−VOLのアクセス対象領域に格納させるため、S−VOLの存在するストレージ装置400(ストレージ装置400−2)に対してWRFBAコマンドを発行する。WRFBAコマンドとともに送信されるライトデータは、ATSコマンドとともにストレージ装置400−1に送信されてきたライトデータである。なお、コンペアデータの送信は行われない。WRFBAコマンドの送信が終了すると、MP521は、ストレージ装置400−2から応答が戻ってくるのを待つ。
MP521はS3416でストレージ装置400−2からの応答を受信すると、データ排他解放処理(S3417)、ホスト100へのGOODステータスの返信(S3425)、キャッシュスロット解放(S3426)を行って、処理を終了する。
次に、ストレージ装置400がATSコマンドを受信した場合で、かつコマンドでアクセス対象ボリュームとして指定されているボリュームがS−VOLであった場合に、ストレージ装置400で行われる処理の流れを、図15を用いて説明する。以下で説明する処理は特に断りがない限り、ストレージ装置400−2(S−VOLが存在するストレージ装置)のMP521が実行する処理である。
まずMP521は、ボリューム管理テーブルT300を参照し、アクセス対象ボリュームのI/Oモードを判定する(S350)。この処理は、S340と同じ処理である。
I/OモードがLocalの場合、MP521はS35220〜S3526の処理を行う。この処理は、図14のS34220〜S3426と同じ処理である。
I/OモードがRemoteの場合、MP521はS3532〜S3534の処理を行う。この処理は、図14のS3432〜S3434とほとんど同じ処理である。S3532〜S3534の処理のうち、S3432〜S3434と異なる点は、図14の処理ではS3532でS−VOLの存在するストレージ装置400(400−2)にATS伝搬コマンドが送信されているのに対し、図15のS3532では、MP521はP−VOLの存在するストレージ装置400(400−1)にATS伝搬コマンドを送信する点、またS3533でストレージ装置400−2ではなくストレージ装置400−1(P−VOLの存在するストレージ装置)から応答を受信する点である。
S350の判定でI/OモードがMirrorであると判断された場合、S3512以降の処理が実行される。S3512、S3513の処理は、S3532、S3533と同じで、P−VOLの存在するストレージ装置400−1にATS伝搬コマンドを送信し、その処理結果を受信する処理が行われる。
S3514でMP521は、キャッシュスロット確保処理を行い、その後ATSコマンドとともに受信したライトデータを、S3514で確保されたキャッシュ領域に格納する(S3515)。MP512はS3516で、ホスト100に対してGOODステータスを返信し、S3517ではS3514で確保したキャッシュスロットの解放処理を行う。その後MP521はストレージ装置400−1に対して、データ排他解放コマンドを送信し、ストレージ装置400−1にデータ排他解放処理を行わせ(S3518)、処理を終了する。
続いて、ストレージ装置400がATS伝搬コマンドを受信した時に行われる処理の流れを、図16を用いて説明する。先に述べたとおり、ATS伝搬コマンドを受信したストレージ装置400は、ATSコマンドを受信した時と同様の処理を行う。
ストレージ装置400がATS伝搬コマンドを受信すると、MP521はアクセス対象論理ボリュームがP−VOLであるかS−VOLであるか判定する(S2001)。アクセス対象論理ボリュームがP−VOLであった場合(S2001:PVOL)、MP521はS2011で、アクセス対象ボリュームのペアボリューム(S−VOL)のI/Oモードを判定する。ペアボリュームのI/Oモードは、(WRFBAコマンドと同様に)ATS伝搬コマンドのパラメータに含まれているので、MP521はATS伝搬コマンドのパラメータを参照することによって、S2011の判定を行える。
S2011の判定で、ペアボリュームのI/OモードがMirrorであった場合、MP521はS2012以降の処理を行う。S2012〜S2018は、P−VOLに対するデータコンペア及びライトを行う処理であり、図14のS3411〜S3414と同じ処理が行われる。
P−VOLへのライト(S2018)が終了すると、MP521は、ATS伝搬コマンドの発行元であるストレージ装置(たとえばP−VOLがストレージ装置400−1に存在する場合には、ATS伝搬コマンドの発行元ストレージ装置はストレージ装置400−2である)に対して処理が終了したことを返答する。その後MP521は、ATS伝搬コマンドの発行元であるストレージ装置から、データ排他解放コマンドが送信されて来るのを待つ。
S2020でMP521がデータ排他解放コマンドを受信すると、MP521はデータ排他解放を実施する(S2021)。その後MP521はS2016で排他確保したキャッシュ領域を解放し(S2022)、処理を終了する。
アクセス対象論理ボリュームがS−VOLであった場合(S2001:SVOL)、あるいはアクセス対象論理ボリュームがP−VOLだが、そのペアボリューム(S−VOL)のI/OモードがRemoteであった場合(S2011:remote)、S2033以降の処理が行われる。S2033〜S2039は、先に説明したS2013〜S2019の処理と同じである。S2039の後、MP521はS2036で確保したキャッシュスロットを解放し(S2042)、処理を終了する。
(3−f)WRITEコマンド及びエラー時の処理
ここまで、WRITE SAME、UNMAP、COMPARE AND WRITEコマンドを受信した時に、ストレージ装置400が実施する処理の流れを説明してきたが、上で説明した処理は原則として、処理中にエラーが発生しなかった場合の処理である。ただし実際には、ストレージ装置400の状態によっては処理中にエラーが発生することもあり、その場合にストレージ装置400がどのような処理を行うか、以下で説明していく。
先にも述べたが、本発明の実施例に係るストレージ装置は、Thin Provisioning技術によって形成されるボリューム(論理ボリューム)をホスト100に提供する。Thin Provisioning技術を用いると、(少なくとも初期状態では)物理記憶領域のサイズは論理ボリュームの総容量より小さくてもよい。ただし、物理記憶領域のサイズを論理ボリュームの総容量よりも少ない状態のままストレージ装置400を運用していると、ホスト100から論理ボリュームに対して多量のデータが書き込まれた時、論理ボリュームのページに割り当てるべき物理記憶領域がなくなるケースが発生し得る。その場合には、ストレージ装置400はホスト100からのライトデータを格納することができないため、ホスト100に対して、物理記憶領域がなくなったためにライト等の処理が実行できない旨を報告する必要がある。
また、論理ボリュームのページに割り当てるべき物理記憶領域が全く存在しないわけではないが、ページに割り当て可能な(未使用の)物理記憶領域が少なくなった場合(たとえば所定の閾値以下になった場合)には、その旨をホスト100に対して通知することが望ましい。以下では、未使用の物理記憶領域が全くなくなった場合、または未使用の物理記憶領域が少なくなった場合(未使用の物理記憶領域の量が、所定の閾値以下になった場合)にストレージ装置400が行う処理について、ストレージ装置400がWRITEコマンドを受信した時の処理を例にとって説明する。
図17はホスト100から受信したコマンドがWRITEであった場合の処理の流れを示した図である(図5のS40に相当する処理である)。また、以下の説明では、ストレージ装置400−1にP−VOLが存在し、ストレージ装置400−2に、(ストレージ装置400−1内の)P−VOLとペア関係にあるS−VOLが存在する場合を例にとって説明する。
S41において、MP521はボリューム管理テーブルT300を参照し、コマンドで指定されているLUNを論理ボリューム番号に変換する。そしてペア管理テーブルT400を参照し、変換された論理ボリューム番号で特定される論理ボリューム(アクセス対象ボリューム)がP−VOLであるかS−VOLであるかを判定する。
続いてMP521は、アクセス対象ボリュームの状態がBlockであるか否かを判定する(S42,S43)。アクセス対象ボリュームの状態がBlockである場合には、MP521はエラーをホスト100に返却し、処理を終了する。アクセス対象ボリュームの状態がBlockでない場合、S44またはS45の処理を行う。
S44またはS45では、ボリューム管理テーブルT300を参照し、アクセス対象ボリュームのI/Oモードを判定する。そしてI/Oモードに応じた処理を行う。以下、アクセス対象ボリュームのI/Oモードごとに、処理の流れを説明していく。
図18は、アクセス対象ボリュームがP−VOLで、かつそのI/OモードがMirrorであった場合に、ストレージ装置400が行う処理の流れを示している。S4201でMP521は、WRITEコマンドで指定される、論理ボリュームのアクセス対象領域の範囲全体のロックを確保する処理(データ排他確保処理)を行う。続いてS4202で、MP521はキャッシュスロット確保処理を行う。
次にMP521は、論理ボリュームのアクセス対象領域に該当するページに対して、新たに未使用の物理記憶領域を割り当てる必要があるか、かつ割り当てる必要がある場合に、未使用の物理記憶領域が存在するか否か判定する(S4203)。以下、未使用の物理記憶領域が存在しない状態のことを、「未使用物理記憶領域が枯渇している状態」(あるいは「未使用」を略して、「物理記憶領域が枯渇している状態」)、と呼ぶ。
物理記憶領域が枯渇していると判断された場合、MP521は、アクセス対象論理ボリュームのI/Oモード、ペアステータスを変更する(S4221)。具体的には、P−VOLのI/Oモードを「Block」に変更する。さらに、ペアステータスを「SUSPEND」に変更する。同時にアクセス対象論理ボリュームのペアボリューム(S−VOL)を有するストレージ装置400−2には、ペアボリューム(S−VOL)のI/Oモードを「Local」に変更し、ペアステータスを「SUSPEND」に変更するよう指示を出す。
S4222でMP521は、ホスト100に対して、エラーを返却する。先にも述べたが、処理中にエラーが発生したために処理が正常に終了しなかった場合には、ストレージ装置400はホスト100に「CHECK CONDITION」というステータスを返却する。この時、SCSIの規格では、Sense Key,Sense Code等のエラーの詳細情報も返却される。S4222ではMP521は詳細情報として、処理が中断されたことを示す、「ABORTED COMMAND」というSense Keyをホスト100に返却する。以下、MP521がエラー詳細情報として「ABORTED COMMAND」というSense Keyをホスト100に返却する場合には、「エラー(ABORT)を返却する」と表現する。
最後にMP521はデータ排他解放処理、スロット解放処理を行い(S4223)、処理を終了する。
S4203の判定で、新たに未使用の物理記憶領域を割り当てる必要がない、または割り当てる必要があっても未使用の物理記憶領域が存在すると判定された場合には、MP521はS4204以降の処理を実行する。MP521はS4204で、ストレージ装置400(アクセス対象ボリュームを有するストレージ装置)の未使用物理記憶領域の量が、所定の閾値以下になったか判定する。未使用物理記憶領域の量が所定の閾値以下であった場合(S4204:Y)、MP521はホスト100に対し、未使用物理記憶領域が所定の閾値以下であった旨を知らせるためのエラーを返却する(S4211)。本実施例に係るストレージ装置400では、未使用物理記憶領域の量が所定の閾値以下であった場合に、Sense Keyとして「UNIT ATTENTION」を返却し、また、未使用物理記憶領域の量が所定の閾値以下になったことをホスト100が認識できるような詳細情報も、Additional Sense Code等に含めて返送する。以下では、ホスト100に対し未使用物理記憶領域が所定の閾値以下になった旨を返答する場合、「エラー(UNIT ATTENTION)を返却する」または「エラー(UA)を返却する」と表現する。なお、上では、未使用物理記憶領域の量が、所定の閾値以下になったか判定する例を説明しているが、これ以外の判定方法を用いてもよい。たとえば、使用済みの物理記憶領域(すでに論理ボリュームのページに割り当てられている物理記憶領域)の量(あるいは物理記憶領域の使用率、つまり「使用済物理記憶領域量÷ページに割り当て可能な物理記憶領域の総量」)が、所定の上限値を超過したか否かを判定し、所定の上限値を超過した場合にその旨(使用済み物理記憶領域量が上限値に達した、あるいは上限値を超過した)を示すエラーをホスト100に返却するようにしても良い。
その後MP521はキャッシュスロット解放処理を行い(S4213)、処理を終了する。
未使用物理記憶領域が所定の閾値以下であった場合(S4204:Y)、S4205の処理が行われる。S4205では、MP521はS4202で確保されたキャッシュスロットに、ホスト100からWRITEコマンドとともに送信されてきたライトデータを格納する。
S4206では、MP521はアクセス対象ボリュームのペアボリューム(S−VOL)を有するストレージ装置400−2に対してWRFBAコマンドを送信することで、S−VOLへのライトデータの格納を指示し、ストレージ装置400−2からの応答を待つ。なお、ストレージ装置400−2は、S−VOLに割り当てるべき未使用の物理記憶領域が枯渇していたために、S−VOLへのデータ書き込みに失敗した場合には、その旨を応答情報としてストレージ装置400−1に返却する。またストレージ装置400−2は、S−VOLに割り当てるべき未使用の物理記憶領域が所定の閾値以下になっていた場合にも、その旨を応答情報としてストレージ装置400−1に返却する。
S4207でMP521がストレージ装置400−2からの応答を受信すると、MP521は応答内容を参照し、ストレージ装置400−2においてS−VOLに割り当てるべき未使用の物理記憶領域が枯渇したか否かを判定する(S4208)。
ストレージ装置400−2からの応答情報の中に、S−VOLに割り当てるべき未使用の物理記憶領域が枯渇した旨の情報が含まれている場合、MP521はS4231以降の処理を行う。S4231では、MP521はアクセス対象論理ボリュームのI/Oモードを変更する。具体的には、P−VOLのI/Oモードを「Local」に変更する。またペアステータスを「SUSPEND」に変更する。さらにアクセス対象論理ボリュームのペアボリューム(S−VOL)を有するストレージ装置400−2に対し、ペアボリューム(S−VOL)のI/Oモードを「Block」に変更し、ペアステータスを「SUSPEND」に変更するよう指示を出す。
S4232でMP521は、ホスト100に対して、エラー(ABORT)を返却し、S4233でデータ排他解放処理、スロット解放処理を行い、処理を終了する。なお、各ステップの処理順は必ずしも上で説明したものに限定されない。たとえばデータ排他解放処理をS4231またはS4232の前に行うようにしてもよい。
S4208において、S−VOLに割り当てるべき未使用の物理記憶領域が枯渇していないと判定された場合、S4209以降の処理が行われる。MP521はデータ排他解放処理(S4209)を行い、ホスト100に対してGOODステータスを返却し(S4212)、スロット解放処理(S4213)を行った後、処理を終了する。
続いて、アクセス対象ボリュームがP−VOLで、かつそのI/OモードがLocalであった場合にストレージ装置400が行う処理の流れを、図19を用いて説明する。まずMP521はS4301で、キャッシュスロット確保処理を行う。
次にMP521は、物理記憶領域が枯渇しているか判定する(S4302)。物理記憶領域が枯渇していると判断された場合(S4302:Y)、MP521は、ホスト100に対してエラーを返却し(S4311)、処理を終了する。S4311で返却される詳細情報の中には、物理記憶領域が枯渇した旨を示す情報が含まれている。以下、このように、物理記憶領域が枯渇した旨を示す情報をホスト100に返却することを、「エラー(Stun)を返却する」と呼ぶ。一方、I/OモードがMirrorの場合に、物理記憶領域が枯渇していた場合(S4203:Y、あるいはS4208:Yに該当するケース)、ペアボリューム(たとえばS−VOL)の物理記憶領域がまだ枯渇していない可能性がある。つまりP−VOLと同一内容のデータが格納されているS−VOLに対する書き込みはできる可能性があるので、エラー(Stun)の返却は行われない。
物理記憶領域が枯渇していない場合(S4302:N)、MP521はS4304で、ストレージ装置400(アクセス対象ボリュームを有するストレージ装置)の未使用物理記憶領域の量が、所定の閾値以下になったか判定する。未使用物理記憶領域が所定の閾値以下であった場合(S4304:Y)、MP521はホスト100に対してエラー(UA)を返却する(S4315)。その後MP521はキャッシュスロット解放処理を行い(S4306)、処理を終了する。
未使用物理記憶領域が所定の閾値よりも多く存在する場合(S4304:N)には、MP521は、S4301で確保されたキャッシュスロットにライトデータを格納し(S4303)、ホスト100に対し、ライト処理が正常終了した旨を返却する(S4305)。その後MP521はキャッシュスロット解放処理を行い(S4306)、処理を終了する。
続いて、アクセス対象ボリュームがP−VOLで、かつそのI/OモードがRemoteであった場合にストレージ装置400が行う処理の流れを、図20を用いて説明する。まずMP521はアクセス対象ボリュームのペアボリューム(S−VOL)を有するストレージ装置(ストレージ装置400−2)に対し、WRFBAコマンドを送信することで、S−VOLへのライトデータの書き込みを指示し(S4401)、その後ストレージ装置400−2からの応答を待つ。
S4402でMP521がストレージ装置400−2からの応答を受信すると、MP521は応答内容を参照し、ストレージ装置400−2においてS−VOLに割り当てるべき物理記憶領域が枯渇したか否かを判定する(S4403)。S−VOLに割り当てるべき物理記憶領域が枯渇したと判定された場合(S4403:Y)、MP521はホスト100にエラー(Stun)を返却し(S4405)、処理を終了する。
S−VOLに割り当てるべき物理記憶領域が枯渇していないと判定された場合(S4403:N)、MP521はストレージ装置400−2において未使用の物理記憶領域が所定の閾値以下になっているか判定する(S4404)。未使用物理記憶領域が所定の閾値以下になっている場合(S4404:Y)、MP521はホスト100に対してエラー(UA)を返却し(S4411)、処理を終了する。未使用物理記憶領域が所定の閾値以下になっていない場合(S4404:N)、MP521はホスト100にGOODステータスを返却して(S4405)、処理を終了する。
図21は、アクセス対象ボリュームがS−VOLで、かつそのI/OモードがMirrorであった場合に、ストレージ装置400が行う処理の流れを示している(以下では、ストレージ装置400−2が処理を行う場合を例にとって説明する)。
S6201では、MP521はアクセス対象ボリュームのペアボリューム(P−VOL)を有するストレージ装置400−1に対してWRFBAコマンドを送信することで、P−VOLへのライトデータの格納を指示し、ストレージ装置400−1からの応答を待つ。なお、ストレージ装置400−2と同様に、ストレージ装置400−1は、P−VOLに割り当てるべき物理記憶領域が枯渇していたために、P−VOLへのデータ書き込みに失敗した場合には、その旨を応答情報としてストレージ装置400−2に返却する。またストレージ装置400−1は、P−VOLに割り当てるべき未使用物理記憶領域が所定の閾値以下になっていた場合にも、その旨を応答情報としてストレージ装置400−2に返却する。
S6202でMP521がストレージ装置400−1からの応答を受信すると、MP521は応答内容を参照し、ストレージ装置400−1においてP−VOLに割り当てるべき未使用の物理記憶領域が枯渇したか否かを判定する(S6203)。
S6203の判定で、物理記憶領域が枯渇したと判定された場合(S6203:Y)、MP521はS6221以降の処理を行う。S6221でMP521は、アクセス対象論理ボリュームのI/Oモードを変更する。具体的には、S−VOLのI/Oモードを「Local」に変更する。さらに、ペアステータスを「SUSPEND」に変更する。そしてS6222でMP521はホスト100にエラー(ABORT)を返却し、処理を終了する。
一方物理記憶領域が枯渇していないと判定された場合(S6203:N)、MP521はキャッシュスロット確保処理を行う(S6204)。続いて、ストレージ装置400−2でS−VOLに割り当てるべき未使用物理記憶領域が枯渇しているか否か判定し(S6205)、枯渇している場合には(S6205:Y)、S6231以降の処理を行う。
S6231でMP521は、アクセス対象論理ボリュームのI/Oモードを変更する。具体的には、S−VOLのI/Oモードを「Block」に変更する。そしてS6232でMP521はホスト100にエラー(ABORT)を返却し、S6233でキャッシュスロット解放処理を行う。
S6234でMP521はストレージ装置400−1に対してデータ排他解放コマンドの送信を行う。なお、S6234でMP521は、データ排他解放コマンドのパラメータに、修復フラグをONする旨の指示を含めたデータ排他解放コマンドを作成する。そしてこのデータ排他解放コマンドを受信したストレージ装置400−1では、ボリューム管理テーブルT300の修復フラグ(T407)をONし(1を格納する)、位置(T408)にWRITEコマンド(またはWRFBAコマンド)で指定されているアクセス対象領域の情報を格納する。これはP−VOLにはWRITEコマンドで指定されたデータが書き込まれたが、S−VOLにはデータが書き込まれず、P−VOLとS−VOLの内容が不一致になったためである。
修復フラグ(T407)がONに設定された領域については、S−VOLに割り当てるべき未使用物理記憶領域の枯渇状態が解消された後で、当該領域に対するアクセス要求をホスト100から受信した時に、P−VOLの内容をS−VOLに反映する処理が行われる。これにより再びP−VOLとS−VOLの内容が一致した(同期された)状態にすることができる。
S−VOLに割り当てるべき未使用物理記憶領域が枯渇していない場合(S6205:N)、MP521は未使用物理記憶領域の量の判定を行い(S6206)、未使用物理記憶領域が所定の閾値以下である場合(S6206:Y)には、MP521はホスト100にエラー(UA)を返却する(S6210)。その後MP521はスロット解放(S6233)、データ排他解放コマンドの送信(S6234)を行って、処理を終了する。
未使用物理記憶領域が所定の閾値よりも多い場合(S6206:N)には、ライト処理を行う(S6211)とともに、ホスト100にGOODステータスを返却する(S6212)。その後MP521は、キャッシュスロット解放処理(S6213)、及びストレージ装置400−1に対してデータ排他解放コマンドの送信を行い(S6214)、処理を終了する。なおS6214での処理はS6234の処理と異なり、データ排他解放コマンドのパラメータには修復フラグをONする旨の指示は含まれない。
続いて、アクセス対象ボリュームがS−VOLで、かつそのI/OモードがMirrorでない場合に、ストレージ装置400が行う処理の流れを説明する。まずアクセス対象ボリュームがS−VOLで、かつそのI/OモードがLocalであった場合の処理は図19と同じであるため、説明を省略する。
続いてアクセス対象ボリュームがS−VOLで、かつそのI/OモードがRemoteであった場合について、図22を用いて説明する。この処理は図20の処理とほとんど同様の処理が行われる
まずS6401でMP521はアクセス対象ボリュームのペアボリューム(P−VOL)を有するストレージ装置(ストレージ装置400−1)に対し、WRFBAコマンドを送信することで、P−VOLへのライトデータの書き込みを指示し、その後ストレージ装置400−1からの応答を待つ。
S6402でMP521がストレージ装置400−1からの応答を受信すると、MP521は応答内容を参照し、ストレージ装置400−1においてP−VOLに割り当てるべき物理記憶領域が枯渇しているか否かを判定する(S6403)。P−VOLに割り当てるべき物理記憶領域が枯渇していると判定された場合(S6403:Y)、MP521はホスト100にエラー(Stun)を返却し、処理を終了する。
P−VOLに割り当てるべき物理記憶領域が枯渇していないと判定された場合(S6403:N)、MP521はストレージ装置400−1において、未使用物理記憶領域が所定の閾値以下になっているか判定する(S6404)。未使用物理記憶領域が所定の閾値以下になっている場合(S6404:Y)、MP521はホスト100に対し、エラー(UA)を返却し(S6411)、処理を終了する。未使用物理記憶領域が所定の閾値以下になっていない場合(S6404:N)、MP521はホスト100にGOODステータスを返却して(S6405)、処理を終了する。
続いて、ストレージ装置400がWRFBAコマンドを受信した時に行われる処理の流れを、図23、図24を用いて説明する。なお、ストレージ装置400がWRFBAコマンドを受信した時に行われる処理の流れについては、上で図8を用いて説明しているが、図23、図24に記載の処理は、図8の処理に対して物理記憶領域の枯渇が検出された場合の処理が追加された点のみが異なり、それ以外の点は同じである。
なお本実施例では、ストレージ装置400がWRFBAコマンドに係る処理を実行した後に、処理が正常に行われた旨、あるいはエラーが発生した旨を通知する際には、SCSIの規格に従ったステータスを返送することにしている。そのため、処理が正常に行われた場合には、GOODステータスが返却される。また、ストレージ装置400の未使用物理記憶領域が枯渇していた場合には、エラー(Stun)が返却される。また、ストレージ装置400の未使用物理記憶領域が所定の閾値以下であった場合には、エラー(UNIT ATTENTION)が返却される。ただし、WRFBAコマンドはストレージ装置400間でのみ用いられる、独自に定義されたコマンドであるから、コマンド発行元のストレージ装置400に返却するステータスやエラー情報に、独自の情報を用いるようにしてもよい。
図24において、物理記憶領域が枯渇しているかの判定(S5014,S5015)が、キャッシュスロット確保処理(S1014,S1022)の後に設けられる。そしてS−VOLのI/OモードがMirrorであり、かつ物理記憶領域が枯渇していると判定された場合(S5014:Y)には、WRFBAコマンドを受信したストレージ装置400のMP521は、アクセス対象ボリューム(P−VOL)のI/Oモードを「Block」に変更し(S5221)、コマンド発行元のストレージ装置400に対してエラー(Stun)を返却(S5222)、し、最後に、キャッシュスロット解放処理及びデータ排他解放処理を実施し(S5223)、処理を終了する。また、S−VOLのI/OモードがRemoteであり、かつ物理記憶領域が枯渇していると判定された場合(S5015:Y)にも同様に、コマンド発行元のストレージ装置400に対してエラー(Stun)を返却(S5222)、し、最後に、キャッシュスロット解放処理(S5223)を実施して処理を終了する。ただし、I/Oモードの変更(S5221)は行われない。
また、受信したWRFBAコマンドで指定されているアクセス対象論理ボリュームがP−VOLで、かつ当該P−VOLのペアボリューム(S−VOL)のI/OモードがMirrorの場合(S1011:mirror)、物理記憶領域が枯渇していないときにはP−VOLへのライト処理(S1015)が行われる。そしてP−VOLへのライト処理(S1015)が終了した後、S−VOLを有するストレージ装置400からデータ排他解放コマンドの受信を待つ(S1017)。
ここで、S−VOLを有するストレージ装置400において、物理記憶領域が枯渇している場合があり得る。その場合にはS1017で受信するデータ排他解放コマンドには、物理記憶領域が枯渇していたためにS−VOLへのデータ書き込みが失敗した旨の通知が含まれている。S1017で、S−VOLへのデータ書き込みが失敗した旨の通知を受信した場合には、MP521はデータ排他解放処理(S1018)を実行するとともに、S5018で、アクセス対象ボリューム(P−VOL)のI/Oモードを「Local」に変更する。またS5018では、MP521はボリューム管理テーブルT300内のP−VOLに該当する行について、修復フラグ(T407)に1を格納し、修復が必要な領域の情報を、位置(T408)に格納する。
受信したWRFBAコマンドで指定されているアクセス対象論理ボリュームがP−VOLで、かつ当該P−VOLのペアボリューム(S−VOL)のI/OモードがRemoteの場合(S1011:remote)、物理記憶領域が枯渇しているかの判定(S5015)の後に、未使用物理記憶領域の量が所定の閾値以下であるか否かの判定が行われる(S5022)。未使用物理記憶領域の量が所定の閾値以下でない場合(S5022:N)は、図8の処理と同様、MP521は、ライト処理(S1023)、WRFBAコマンドの発行元のストレージ装置400に対する、処理完了した旨(GOODステータス)の返答(S1024)、キャッシュスロットの解放処理(S1025)を行って、処理を終了する。
一方S5022の判定で、未使用物理記憶領域が所定の閾値以下であると判定された場合(S5022:Y)、MP521はWRFBAコマンドの発行元のストレージ装置400(400−2)に対して、エラー(UNIT ATTENTION)を返却することで、未使用物理記憶領域の量が所定の閾値以下になったことを通知する(S5024)。そしてこの場合、ライト処理(S1023)は行われない。
その後MP521はキャッシュスロットの解放処理(S1025)を行って、処理を終了する。以上が図8との相違点であり、その他の点は図8で説明した処理と同じである。
また、受信したWRFBAコマンドで指定されているアクセス対象論理ボリュームがS−VOLである場合(S1001:SVOL)、図24に記載のS1053以降の処理が行われる。この処理も図8に記載のS1053以降の処理と類似している。以下、図8の処理と異なる点を中心に説明する。
図23に記載の処理と同様に、物理記憶領域が枯渇しているか否かの判定(S5102)が、キャッシュスロット確保処理(S1022)の後に設けられる。そして物理記憶領域が枯渇していると判定された場合(S5102:Y)には、WRFBAコマンドを受信したストレージ装置400のMP521は、P−VOLのI/Oモードを判定する(S5110)。S5110の判定において、I/OモードがMirrorであった場合、MP521は、アクセス対象ボリューム(S−VOL)のI/Oモードを「Block」に変更し(S5111)、コマンド発行元のストレージ装置400に対してエラー(Stun)を返却(S5112)する。最後にMP521は、キャッシュスロット解放処理を実施し(S5113)、処理を終了する。また、S5110の判定において、I/OモードがRemoteであった場合には、MP521はS5112、S5113を実行するが、S5111(I/Oモードの変更)は行われない。
一方、S5102の判定で、物理記憶領域が枯渇していないと判定された場合(S5102:N)、未使用物理記憶領域が所定の閾値以下であるか否かの判定が行われる(S5122)。未使用物理記憶領域が所定の閾値以下でない場合(S5122:N)は、図8の処理と同様、MP521は、ライト処理(S1023)、WRFBAコマンドの発行元のストレージ装置400に対する、処理完了した旨(GOODステータス)の返答(S1024)、キャッシュスロットの解放処理(S1025)を行って、処理を終了する。
一方S5022の判定で、未使用物理記憶領域が所定の閾値以下であると判定された場合(S5022:Y)、MP521はWRFBAコマンドの発行元のストレージ装置400(400−1)に対して、エラー(UNIT ATTENTION)を返却することで、未使用物理記憶領域が所定の閾値以下になったことを通知する(S5124)。そしてこの場合、ライト処理は行われない。
その後MP521はキャッシュスロットの解放処理(S1025)を行って、処理を終了する。それ以外の点は、図8で説明した処理と同じである。
以上が、ストレージ装置400がホスト100からWRITEコマンドを受信した時に行う処理の流れである。参考までに、ホスト100からP−VOL、S−VOLのボリュームペアに対してWRITEコマンドを発行した際に、物理記憶領域が枯渇した場合の計算機システムの状態の変化について、図27、図28を用いて説明する。
図27は、ホスト100がP−VOLにWRITEコマンドを発行した際に、P−VOLのあるストレージ装置400で物理記憶領域が枯渇した場合(ただしS−VOLのあるストレージ装置400では物理記憶領域は枯渇していない)の計算機システムの状態の変化を説明する図である。なお、以下で説明する例は、ホスト100がWRITEコマンドを発行する前のボリュームペアのペアステータスは「Pair」であった場合の例である。また、P−VOLはストレージ装置400−1に、S−VOLはストレージ装置400−2に存在している構成とする。
ホスト100がWRITEコマンドを発行する前の、計算機システムの状態を[状態1]と呼ぶ。状態1で、P−VOLに対するWRITEコマンドを受信した時、ストレージ装置400−1では図18で説明した処理フローに従って処理が行われる。物理記憶領域が枯渇していることを検知すると(図18 S4203)、ホストにはエラー(ABORT)を返却する(図18 S4222)。またP−VOLのI/OモードはBlockに、S−VOLのI/OモードはLocalに変更され、またペアステータスはSuspendに変更(図18 S4221)された状態になる(図27 [状態2])。
[状態2]ではP−VOLのI/OモードがBlockになっているため、ホスト100はP−VOLへのコマンド発行は行わなくなる(ホスト100は、P−VOLへのコマンド発行をリトライ(再試行)することはある。ただし、P−VOLのI/OモードがBlockになっている場合、ストレージ装置400はホスト100にエラーを返却するとともに、エラー詳細情報(Sense Key等)として、NOT READY等、P−VOLにアクセス不可能である旨の情報を返却する。そのため、ホスト100はP−VOLへのコマンド発行は行わなくなる)。代わりにホスト100(の交替パスソフト1111)は、S−VOLに対してI/O要求を発行する。S−VOLのあるストレージ装置400−2では物理記憶領域は枯渇していないため、S−VOLへのライト処理(図19に記載の処理)を実行する。つまりP−VOLのあるストレージ装置400−1で物理記憶領域が枯渇しても、S−VOLのあるストレージ装置400−2で物理記憶領域が枯渇していない場合には、ホスト100は業務継続が可能である。
ただしこの後、S−VOLへのライト処理が何回か行われた結果、ストレージ装置400−2でも物理記憶領域は枯渇した場合には、エラーステータス(Stun)が返却される(図27 [状態3])。エラーステータス(Stun)が返却されることにより、計算機システムのユーザは、ストレージ装置400で物理記憶領域が枯渇していることを認識することができる。そのためユーザは、ストレージ装置400に物理記憶領域を追加することで枯渇状態を解消し、ボリュームペアの状態を正常な状態(Pair状態)に復旧させることができる。
また、ホスト100がP−VOLにWRITEコマンドを発行した際に、S−VOLのあるストレージ装置400で物理記憶領域が枯渇した場合(ただしP−VOLのあるストレージ装置400では物理記憶領域は枯渇していない)には、図28で示されている[状態1’]〜[状態3’]のように、計算機システムの状態が変化する。以下、図28を用いて状態変化の様子を説明する。なお、以下で説明する例は、ホスト100がWRITEコマンドを発行する前のボリュームペアのペアステータスは「Pair」であった場合の例である。また、P−VOLはストレージ装置400−1に、S−VOLはストレージ装置400−2に存在している構成とする。
[状態1’]は、ホスト100がWRITEコマンドを発行する前の、計算機システムの状態である。状態1’で、P−VOLに対するWRITEコマンドを受信した時、ストレージ装置400−1では図18で説明した処理フローに従って処理が行われる。S−VOLのあるストレージ装置400−2で物理記憶領域が枯渇していることを検知すると(図18 S4208)、ストレージ装置400−1はホスト100にエラーステータス(ABORT)を返却する(図18 S4232)。またP−VOLのI/OモードはLocalに、S−VOLのI/OモードはBlockに変更され、またペアステータスはSuspendに変更(図18 S4231)された状態になる(図27 [状態2’])。
[状態2’]ではP−VOLのI/OモードがBlockになっていないため、ホスト100はP−VOLへのWRITEコマンドの発行をリトライする。P−VOLのI/OモードがLocalで、またペアステータスはSuspend(S−VOLへのコピーが行われない)状態であるため、P−VOLのあるストレージ装置400−1は、ホスト100からのWRITEコマンドを受け付けると、P−VOLへの書き込みを行い、ホスト100にはGoodステータスを返却するよう動作する。
つまり図27の場合と同様、S−VOLのあるストレージ装置400−2で物理記憶領域が枯渇しても、P−VOLのあるストレージ装置400−1で物理記憶領域が枯渇していない場合には、ホスト100は業務継続が可能である。もし仮に[状態2]と同様に、P−VOLのI/OモードがBlockに変更されたとすると、ホスト100(の交替パスソフト1111)は、S−VOLに対してI/O要求を発行する。しかし[状態2’]の場合、S−VOLのあるストレージ装置400−2では物理記憶領域が枯渇しているため、WRITEコマンドを受け付けることができず、ホスト100は業務継続できなくなる。そのため、本発明の実施例に係るストレージ装置400は、計算機システムの状態が[状態1’]から[状態2’]に遷移する際、P−VOLのI/OモードをLocalに設定している。また、上ではホスト100がP−VOLに対して、WRITEコマンドなどのI/Oコマンドを発行する例を説明したが、ホスト100がS−VOLに対してI/Oコマンドを発行する場合でも、計算機システムでは同様のことが行われる。
上では、(未使用)物理記憶領域が枯渇した場合の例を説明したが、それ以外の障害が発生した場合にも同様に業務継続が可能である。また、障害の種類によっては、障害の発生したボリュームのI/OモードをBlockにする代わりに、Remoteに変更する方法を採ってもよい。たとえば図27[状態1]において、P−VOLの物理記憶領域(ドライブ900)に障害が発生して、P−VOLへのアクセスができなくなった場合(ただしそれ以外の構成要素は正常で、P−VOLのあるストレージ装置400−1も正常に稼働している場合)、P−VOLのI/OモードをRemoteに、S−VOLのI/OモードをLocalに変更してもよい。
このようにした場合、ホスト100がP−VOLへのアクセス(たとえばWRITE)を再試行すると、P−VOLのI/OモードがRemoteであるので、(ストレージ装置400−1からストレージ装置400−2を経由して)S−VOLにWRITEコマンドに係るデータが書き込まれる。つまりホスト100は業務継続が可能であることに加えて、アクセスパスの交替もする必要がない。
もちろんこの場合、ホスト100はS−VOL(ストレージ装置400−2)にアクセスしてもよい。つまりホスト100は、ホスト100からP−VOLへのアクセスパスとホスト200からP−VOLへのアクセスパスの両方を用いることができるため、アクセスパスの負荷分散も可能になる。
以上が、ストレージ装置400の未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合に行われる処理の説明である。なお上ではストレージ装置400がWRITEコマンドを受信した時を例にとって説明したが、それ以外の更新系コマンドを受け付けた場合(たとえば上で説明してきたWRITE SAME,UNMAP,ATSコマンド)でも同様に、未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合に対応できることが望ましい。
上で説明してきた処理(WRITEコマンドを受信した時の処理)では、論理ボリューム(正確には、論理ボリュームへのライトデータ一時格納用に確保されたキャッシュスロット)へのデータ書き込み処理(図18 S4205等)の前、及びペアボリュームのあるストレージ装置400から応答を受信する処理(図18 S4207等)の後、ストレージ装置400の未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合の処理(以下、これを枯渇エラー処理と呼ぶ)が挿入されている。そのため、他のコマンドに係る処理が行われる時にも、未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合に対応できるようにするためには、論理ボリュームへのデータ書き込み処理(たとえば図6 S1414等)の前、及びペアボリュームのあるストレージ装置400から応答を受信する処理(図18 S1416等)の後に、枯渇エラー処理を挿入すればよい。
以下、WRITE SAMEコマンドを受け付けた場合の処理(図6〜7)で、枯渇エラー処理が挿入される箇所を具体的に列挙する。なお、WRFBAコマンドを受け付けた場合は、図8に記載の処理に代えて、図23、24に記載の処理が行われるようにすればよい。
(1) 図6 S1414の前に、図18のS4203、S4221〜S4223の処理、及び図18のS4204、S4211〜S4213の処理が挿入される。
(2) 図6 S1416の後に、図18のS4208、S4231〜S4233の処理が挿入される。
(3) 図6 S1423の前に、図19のS4302、S4311の処理、及び図19のS4304、S4315の処理が挿入される。
(4) 図6 S1433の後に、図20のS4403、S4410、S4404,S4411の処理が挿入される。
(5) 図7 S1513の後に、図21のS6203、S6221〜S6222の処理が挿入される。
(6) 図7 S1515の前に、図21のS6205、S6206、S6210、S6231〜S5234の処理が挿入される。
(7) 図7 S1523の前に、図19のS4302、S4311の処理、及び図19のS4304、S4315の処理が挿入される。
(8) 図7 S1533の後に、図22のS6403、S6410、S6404,S6411の処理が挿入される。
図6〜8の処理に、上で述べた変更を施すことにより、ストレージ装置400がWRITE SAMEコマンドに係る処理の実行中に、未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合にも、適切な処理が行われるようになる。また他のコマンド(UNMAP、ATS)についても同様に、論理ボリュームへのデータ書き込み処理の前、及びペアボリュームのあるストレージ装置400から応答を受信する処理の後に、枯渇エラー処理を挿入することにより、未使用物理記憶領域が枯渇、あるいは未使用物理記憶領域の量が所定の閾値以下になった場合にも、適切な処理が行われるようになる。
以上が、本発明の実施例に係るストレージシステムで行われる処理の内容である。本発明のストレージシステムでは、2台のストレージ装置のボリュームに属性情報を設定している。そしてホストからボリュームに対するI/Oコマンドを受け付けた時に、ボリュームの属性情報(Local,Remote,Mirror,Block)に応じて、アクセス対象のボリュームに対するI/O処理を実行するか、アクセス対象のボリュームのペアボリュームに対するI/O処理を実行するかを決定する。またアクセス対象のボリュームと、そのペアボリュームの両方にI/O処理を実行する場合には、いずれのボリュームについて先にI/O処理を実行するかを決定する。
通常は、2台のストレージ装置の各ボリューム(第1ボリューム、第2ボリューム)には、属性情報としてMirror属性を設定することで、ホストが第1ボリューム、第2ボリュームのいずれに対してデータ更新を行うことが可能で、かつ第1ボリューム、第2ボリュームのいずれが更新されても、その内容がもう一方のボリュームにも反映され、第1ボリューム、第2ボリュームの二重化状態が維持されるように運用される。
1つのストレージ装置の未使用物理記憶領域が枯渇した場合には、未使用物理記憶領域の枯渇したストレージ装置のボリュームの属性情報をBlockに変更することで、ホストからのI/Oを受け付け不可能な状態にする一方で、残りのストレージ装置のボリュームの属性情報をLocal属性に設定することで、ボリュームの二重化は行われないが、ボリュームへのI/O(リード、ライト)を可能にする。これにより、物理記憶領域の枯渇など、ストレージ装置の状態に変化が生じた場合にも、計算機システムの業務継続を可能にすることができる。
なお、本発明は上で説明した実施例に限定されるものではなく、様々な変形例が含まれる。また、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置いてもよい。また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。