(58)【調査した分野】(Int.Cl.,DB名)
前記ストレージサブシステムは、前記計算機からのコマンドのタイプを解析し、前記サブボリュームオーナプロセッサユニット又は前記ボリュームオーナプロセッサユニットに前記コマンドを送信するプロセッサユニットを更に備える請求項1記載の計算機システム。
プロセッサユニットが、受信した論理ボリューム作成の要求に応じて、作成する論理ボリューム内のサブボリュームの数と、作成する論理ボリュームのボリュームオーナプロセッサユニットと、作成する論理ボリューム内で定義される各サブボリュームのサブボリュームオーナプロセッサユニットとを判定する請求項1記載の計算機システム。
前記論理ボリューム作成の要求を処理するプロセッサユニットは、前記複数のプロセッサユニットの数によって前記論理ボリュームを分割することによって、前記作成する論理ボリューム内のサブボリュームを定義する請求項4記載の計算機システム。
前記論理ボリューム作成の要求を処理するプロセッサユニットは、所定のサブボリュームサイズに基づいて前記論理ボリュームを分割することによって、前記作成する論理ボリューム内のサブボリュームを定義する請求項4記載の計算機システム。
前記プロセッサユニットは、各プロセッサユニットの稼働率の情報を取得し、前記稼働率の情報に基づいて、前記論理ボリュームのサブボリュームの少なくとも1つのオーナシップを変更する請求項1記載の計算機システム。
前記第2の論理ボリュームは、前記第1の論理ボリュームに保存されているデータの複製データを保存する論理ボリューム又はストレージ領域が第1の論理ボリューム内の対応するストレージ領域又はプールボリューム内のストレージ領域にマッピングされた仮想ボリュームである請求項9記載の計算機システム。
前記計算機からのコマンドは、前記コマンドの種類に基づいて、前記第1及び第2の論理ボリュームのボリュームオーナプロセッサユニット又は前記第1及び第2の論理ボリューム内の前記各サブボリュームのサブボリュームオーナプロセッサユニットの1つに送信される請求項9記載の計算機システム。
前記第1及び第2の論理ボリュームのボリュームオーナプロセッサユニットに送信されるコマンドは、前記第1及び第2の論理ボリュームのペアのための分離又は再同期コマンドを含む請求項11記載の計算機システム。
計算機に接続された計算機システムであって、少なくとも1つ論理ボリュームを前記計算機に提供する複数のストレージデバイスと、それぞれが前記計算機によって発行されたコマンドを処理する複数のプロセッサユニットとを含むストレージサブシステムを備える計算機システムのためのボリューム管理方法であって、
前記プロセッサユニットの1つによって、前記論理ボリュームを複数のサブボリュームに分割するステップと、
前記プロセッサユニットの1つによって、前記論理ボリュームのためのコマンドの処理を担当する前記論理ボリュームのボリュームオーナプロセッサユニットとして複数のプロセッサユニットの1つを決定するステップと、
前記プロセッサユニットの1つによって、前記複数のサブボリュームの少なくとも1つのためのサブボリュームオーナプロセッサユニットとして、前記複数のプロセッサユニットの他の1つを決定するステップと、を有し、
前記サブボリュームオーナプロセッサユニットのそれぞれは、前記担当するサブボリュームについての読出又は書込コマンドを処理し、前記ボリュームオーナプロセッサユニットは、担当する論理ボリュームについての読出及び書込コマンド以外のコマンドであって、前記担当する論理ボリューム全体の処理に関連するコマンドを処理するボリューム管理方法。
前記複数のプロセッサユニットの1つによって、前記計算機からのコマンドのタイプを解析し、前記サブボリュームオーナプロセッサユニット又は前記ボリュームオーナプロセッサユニットに前記コマンドを送信するステップを更に有する請求項15記載のボリューム管理方法。
【発明を実施するための形態】
【0015】
以下、添付の図面を参照して本発明の実施形態について説明する。添付の図面では、同様の機能を有する要素に同様の参照符号を付している場合がある。
【0016】
なお、以後の説明では「テーブル」形式によって本発明の各情報について説明するが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、リスト、DB、キュー等のデータ構造やそれ以外で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「DB」、「キュー」等について単に「情報」と呼ぶことがある。
【0017】
また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ID」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。
【0018】
以下では「プログラム」を主語(動作主体)として本発明の実施形態における各処理について説明を行うが、プログラムは、プロセッサユニット又は複数のプロセッサユニットによって実行されることで定められた処理をメモリ及び通信ポート(通信制御装置)を用いながら行うため、プロセッサユニット又はプロセッサユニットを主語とした説明としても良い。
【0019】
(1)実施形態1
<計算機システムの構成>
図1は、本発明の第1の実施形態に基づく計算機システム(また、ストレージシステムとも呼ばれる。)のブロック図である。
【0020】
計算機システムは、少なくとも1つのホスト計算機100、ストレージサブシステム200及び管理コンソール(管理計算機とも呼ばれる。)300を備える。ストレージサブシステム200は、ケーブル又はネットワークを介してデータの読出及び書込を行う1つ以上のホスト計算機100に接続されている。ホスト計算機100に接続するためのネットワークとしては、ストレージエリアネットワーク(Storage Area Network:SAN)、ローカルエリアネットワーク(Local Area Network:LAN)、インターネット、専用回線及び公衆回線等データ通信を実行できる如何なるネットワークを使用してもよい。
図1に示すように、ホスト計算機100をストレージサブシステム200に接続するための具体例としてSAN500を用いてもよい。ネットワーク又はケーブルでは、ホスト計算機100とストレージサブシステム200との間でデータを交換できる限り、例えば、ファイバチャネルプロトコル又はTCP/IPプロトコル等の如何なるプロトコルを用いてもよい。
【0021】
ストレージサブシステム200は、大きくは、1又は複数のディスクユニット250と、コントローラとに分割される。
【0022】
ディスクユニット250は、ディスクドライブ251を1つ以上のバックエンド(Back End:BE)ポート231に接続するための筐体である。ディスクユニット250は、複数のディスクスロットを備え、各ディスクスロットに1つ以上のディスクドライブ251が挿入される。したがって、ディスクユニット250は、複数のディスクドライブ251を有する。ディスクドライブ251は、物理的記憶装置(physical storage device:PDEV)である。ディスクドライブ251は、例えば、ハードディスクドライブ(Hard Disk Drive:HDD)又はソリッドステートドライブ(Solid State Drive:SSD)である。HDDは、例えば、シリアルアタッチドSCSI(Serial Attached SCSI:SAS)ドライブ及びシリアルATA(Advanced Technology Attachment:SATA)ドライブを含んでいてもよい。ディスクドライブ251は、これらに限定されず、他のタイプのディスクドライブ(例えば、FCドライブ、デジタルバーサタイルディスク(Digital Versatile Disk:DVD)ドライブ)を用いてもよい。また、ディスクドライブ251以外に他のタイプのPDEVを用いてもよい。
【0023】
コントローラは、複数のフロントエンドパッケージ(front end package:以下、FE−PKとする。)210、複数のマイクロプロセッサパッケージ(Microprocessor package:以下、MP−PKとする。)220、複数のキャッシュメモリパッケージ(cache memory package:以下、CM−PKとする。)240、複数のバックエンドパッケージ(back end package:以下、BE−PKとする。)230、ネットワークインタフェース260及び内部ネットワーク270を備える。各パッケージは、内部ネットワーク(例えば、クロスバースイッチ)270を介して相互接続されている。更に、FE−PK210、MP−PK220、CM−PK240及びBE−PK230の少なくとも1つは、1個のみであってもよい。
【0024】
FE−PK210は、複数のフロントエンド(Front End:FE)ポート211及びローカルルータ212を備える。FEポート211は、ホスト100からI/Oコマンド(書込コマンド/読出コマンド)を受信する。メモリ213については、
図3を用いて後に説明する。ローカルルータ212は、テーブル2131、2132を用いて、受信したI/OコマンドのVOL番号に対応するVOLのオーナMP−PK220を判定する。また、ローカルルータ212は、I/Oコマンドのターゲットアドレスに対応するサブボリューム(Sub−VOL)のオーナMP−PKを判定する。そして、ローカルルータは、書込(write)コマンド、読出(read)コマンド、予約(reserve)コマンド、解放(release)コマンド等のコマンドのタイプに基づいて、VOLのオーナMP−PK220又はSub−VOLのオーナMP−PK220の何れかにコマンドを転送する。更に、ローカルルータ212は、プロセッサから構成してもよく、MP−PK220の1つがローカルルータとして動作してもよいので、ローカルルータ212の代わりに所定のMP−PK220が上述した処理を実行してもよい。更に、ローカルルータ212は、ASICハードウェアから構成してもよい。
【0025】
MP−PK220は、1又は複数のマイクロプロセッサ(microprocessor:MP)221及びローカルメモリ222を備える。更に、MP221は、シングルコアMPから構成してもよく、マルチコアMPから構成してもよい。MP221は、計算機プログラムを実行することによって、様々な処理(例えば、ホスト100からのI/Oコマンドの処理、VOLオーナ権の変更等)を実行する。更に、複数のMPが協働して作業を行ってもよく、この場合、MP−PKの各MPは、それぞれプログラムの一部を実行する。更に、MP−PKの各MPは、異なるVOL又はSub−VOLについて個別にプログラムを実行してもよい。同様に、マルチコアMPの各コアが協働してもよく、この場合、MPの各コアは、それぞれプログラムの一部を実行する。またMPの各コアが異なるVOL又はSub−VOLについて個別にプログラムを実行してもよい。この実施形態では、VOLオーナ権は、各MP−PK220に割り当てられる。したがって、MP−PKは、単にプロセッサユニットと呼ぶことができる。また、VOLオーナ権は、MP−PK220内の複数のマイクロプロセッサ(MP)に割り当てることもできる。更に、VOLオーナ権は、MPの複数のマイクロプロセッサコアのそれぞれに割り当てることができる。この場合、MP−PKによって実行されるプロセスは、そのオーナ権を有するMPによって行われる。ローカルメモリ222は、例えば、MP221によって実行される計算機プログラム、及び計算機プログラムによって使用される制御情報等の様々なデータを保存することができる。本発明の実施形態では、このローカルメモリ222は、Sub−VOL制御情報テーブル2221を格納する。このようなテーブルの具体例を
図8に示す。MP−PK220は、ネットワークインタフェース260を介して、管理計算機300と通信する。ネットワークインタフェース260は、通信インタフェースデバイス、例えば、LANコントローラである。
【0026】
CM−PK240は、1又は複数のメモリを備える。例えば、CM−PK240は、共有メモリ241、プログラムメモリ242及びキャッシュメモリ243を備える。キャッシュメモリ243は、ホスト100からVOLに書き込まれるホストデータ及びホスト100によってVOLから読み出されるホストデータを一時的に保存する。共有メモリ241は、MP−PK間の通信のための制御情報を保存する。制御情報は、ストレージサブシステム200の構成に関連する構成データを含む。プログラムメモリ242は、異なるMP−PKによって実行されるプログラムを保存する。これらのプログラムは、関連するMP−PK220のローカルメモリ222にキャッシュできる。
【0027】
BE−PK230は、1つ以上のBEポート231を備える。ディスクドライブ251は、BEポート231に通信可能に接続されている。
【0028】
このストレージサブシステム200では、例えば、以下の処理フローを用いて、書込コマンドが処理される。すなわち、FE−PK210のFEポート211は、ホスト100から書込みコマンドを受信する。ローカルルータ212は、この書込コマンドで指定されているポート番号、LUN及び書込アドレスに対応するSub−VOL(以下、この段落では「ターゲットSub−VOL」と言う。)のオーナMP−PK220を特定し、このオーナMP−PK220にこの書込コマンドを転送する。この書込コマンドに応答して、オーナMP−PK220内の何れかのMP221がこのコマンドに付随するデータ(書込データ)をキャッシュメモリ243に書き込む。MP221は、ホスト100に書込完了を報告する。オーナMP−PK220内の何れかのMP221は、キャッシュメモリ243から書込データを読み出し、ターゲットVOLの基礎を構成するディスクドライブ251にこの書込データを書き込む。
【0029】
このストレージサブシステム200では、読出コマンドは、例えば、以下の処理フローを用いて処理される。すなわち、FE−PK210のFEポート211は、ホスト100から読出コマンドを受信する。ローカルルータ212は、読出コマンド内のポート番号及びLUNに対応するSub−VOL(以下、この段落では「ターゲットSub−VOL」と言う。)のオーナMP−PK220を特定し、このオーナMP−PK220にこの読出コマンドを転送する。オーナMP−PK220内の何れかのMP221は、この読出コマンドに応答して、このデータがキャッシュメモリ243に格納されているか否かを判定する。データがキャッシュメモリ243に格納されている場合、MPは、キャッシュメモリ243からデータを読み出し、読み出したデータを、FE−PK211を介してホスト100に送信する。キャッシュメモリ243にデータが格納されていない場合、MPは、このコマンドに基づいて、ターゲットSub−VOLの基礎を構成するディスクドライブ251からデータ(読出データ)を読み出し、この読出データをキャッシュメモリ243に書き込む。そして、このMP221は、キャッシュメモリ243からこのデータを読み出し、読み出したデータを、FE−PK211を介してホスト100に送信する。
【0030】
<キャッシュメモリパッケージ(CM−PK)の構造>
図2は、キャッシュメモリパッケージ(CM−PK)240の例示的構造を示している。CM−PK240は、VOLオーナMP−PKテーブル2411、Sub−VOLオーナMP−PKテーブル2412及びVOL制御情報テーブル2413を格納する共有メモリ241と、VOL作成プログラム2421、読出要求処理プログラム2422、書込要求処理プログラム2423、予約/解放要求処理プログラム2424、VOLオーナ変更プログラム2425及びSub−VOLオーナ変更プログラム2426を格納するプログラムメモリ242とを備える。共有メモリ241内の各テーブルの具体例及びプログラムメモリ242内の各プログラムの具体例は、後述する図に示している。
【0031】
<FE−PKのメモリの構造>
図3は、FE−PK210のメモリ213の例示的構造を示している。メモリ213は、VOLオーナMP−PKテーブル2131、Sub−VOLオーナMP−PKテーブル2132及びLR処理プログラム2133を格納している。
【0032】
テーブル2131は、ストレージシステム内の各VOLのオーナMP−PKに関する情報を維持し、SM241内のVOLオーナMP−PKテーブル2411と実質的に同じであり、詳しくは、
図5を用いて後に説明する。テーブル2132は、ストレージシステムの各Sub−VOLのオーナMP−PKに関する情報を維持し、Sub−VOLオーナMP−PKテーブル2412と実質的に同じであり、詳しくは、
図6を用いて後に説明する。これらのテーブル2131、2132は、LR212によって実行されるLR処理プログラム2133によって使用される。LR処理プログラム2133は、受信コマンドのターゲットであるVOLのオーナMP−PK及び/又はSub−VOLに関する情報を得る。そして、LRは、オーナMP−PKにコマンドを送信する。このようなプログラムの具体例は、
図10を用いて後に説明する。
【0033】
<MP−PKのローカルメモリの構造>
図4は、MP−PKのローカルメモリ(LM)222の例示的構造を示している。LM222は、Sub−VOL制御情報テーブル2221を格納し、この具体例は、
図8を用いて後に説明する。
【0034】
MP−PKによって共有メモリ241及びプログラムメモリ242のコンテンツに速やかにアクセスするために、LM222は、CM−PK240の共有メモリ241及びプログラムメモリ242のコンテンツの同期コピーを維持する。SM又はPMのコンテンツが更新されると、全てのMP−PKのLM内の同期コピーも更新される。
【0035】
<VOLオーナMP−PKテーブルの構造>
図5は、VOLオーナMP−PKテーブル2131の具体例を示している。このテーブルは、ストレージサブシステム200内の全てのVOLのVOL番号及びこれらに対応するオーナMP−PK番号から構成されている。
【0036】
VOL番号は、ストレージサブシステム200の各VOLを一意的に特定するために各VOLに割り当てられた番号を示している。オーナMP−PK番号は、テーブル内の対応するVOL番号によって一意的に特定されているVOLについて、読出/書込コマンド以外の処理コマンド(すなわち、完全なVOLをターゲットとするコマンド)を担当するオーナMP−PKを一意的に特定するために使用される番号である。
【0037】
<Sub−VOLオーナMP−PKテーブルの構造>
図6は、Sub−VOLオーナMP−PKテーブル2132の具体例を示している。このテーブルは、ストレージサブシステム200内の全てのVOLのVOL番号、VOL内の全てのSub−VOLのSub−VOL番号、各Sub−VOLのアドレス範囲及びこれらに対応するオーナMP−PK番号から構成される。
【0038】
VOL番号は、ストレージシステムの各VOLを一意的に特定するために各VOLに割り当てられた番号を示している。Sub−VOL番号は、Sub−VOLの数に基づいて各Sub−VOLに割り当てられたSub−VOLのシリアル番号である。ストレージシステム内でSub−VOLを一意的に特定するために、VOL番号及びSub−VOL番号は、組合せて使用される。
【0039】
オーナMP−PK番号は、テーブル内の対応するVOL番号及びSub−VOL番号によって一意的に特定されているSub−VOLについて、I/O処理を担当するオーナMP−PKを一意的に特定するために使用される番号である。
【0040】
但し、I/Oコマンドは、Sub−VOLではなくVOLをターゲットとするため、テーブル内には、各Sub−VOLに関連付けられているVOLのアドレス範囲も維持されている。
【0041】
図6のテーブルに示すように、ターゲットVOL内のSub−VOLのためのSub−VOLオーナMP−PKは、ターゲットVOLのためのVOLオーナMP−PKとは異なっていてもよい。
【0042】
<VOL制御情報テーブルの構造>
図7は、VOL制御情報テーブル2413の具体例を示している。このテーブルは、VOLをターゲットとする異なるコマンドを処理する必要があるVOLに関連する様々な情報から構成されている。テーブル2413は、CM−PKのSM内にある。テーブル2413は、速やかなアクセスのために、テーブル2411、2412と同様に、MP−PKのLMにコピーされる。
【0043】
この情報は、VOL番号、VOL内のSub−VOLの総数、VOL全体のサイズ、VOLの状態(例えば、VOLが「予約されている(RESERVED)」か否か)、VOLを予約しているホスト計算機のホストID等を含んでいてもよい。ホストIDは、各ホストコンピュータに割り当てられ、同じSANに接続されている複数のホスト内で各ホストを一意的に特定するための固有のIDである。このIDは、SAN内でローカルに一意的であってもよく、又はグローバルに一意的なIDであってもよい。
【0044】
このテーブルは、例えば、VOLに対する何らかのI/O動作を実行する前に、VOLの状態(ホスト計算機のために「予約されている」か否か)を確認するために使用される。
【0045】
ここで「予約(RESERVED)」とは、ホスト計算機によってターゲットVOLが使用中であり、他のホスト計算機からのターゲットVOLへのアクセスがロックされていることを意味する。一方、「解放(RELEASED)」とは、ターゲットVOLへのアクセスのロックが解除され、他のホスト計算機がターゲットVOLにアクセスできることを意味する。
【0046】
<Sub−VOL制御情報テーブルの構造>
図8は、Sub−VOL制御情報テーブル2221の具体例を示している。このテーブルは、Sub−VOL ID、VOL番号、Sub−VOL番号、Sub−VOLのサイズ、各Sub−VOLの状態(例えば、Sub−VOLが「予約されている」か否か)、及びSub−VOLを予約しているホスト計算機のホストIDから構成されている。
【0047】
Sub−VOL IDは、ストレージシステム内でSub−VOLを一意的に特定するIDである。この実施形態では、このIDは、VOL番号とSub−VOLのシリアル番号の組合せである。VOL番号、Sub−VOL番号及びホストIDの定義は、テーブル2131、2132、2413のそれぞれにおいて同様である。このテーブルは、オーナMP−PKが、テーブルが存在するLMのMP−PKであるSub−VOLに関する情報のみから構成されている。
【0048】
VOLオーナMP−PKは、Sub−VOL制御情報テーブル2221内の各Sub−VOLの状態コラムに「予約(RESERVED)」又は「解放(RELEASED)」を書き込む。「予約」及び「解放」の意味は、VOL制御情報テーブル2413について説明した通りである。
【0049】
<VOL作成処理>
図9は、本発明の実施形態に基づくVOL作成プログラム2421によるVOL作成処理のフローチャートである。このVOL作成プログラムは、ストレージサブシステム200内で新しいVOL(以下、「ターゲットVOL」と言う。)を作成するプログラムである。このプログラムは、MP−PK220によって実行され、このMP−PK220は、VOLのオーナMP−PKではなくてもよい。
【0050】
図9に示すように、ステップS100において、MP−PKは、まず、管理計算機300から、LAN400及びネットワークI/F260を介して、VOL作成コマンドを受信する。このVOL作成コマンドは、ターゲットVOLに関する制御情報、例えば、VOLのサイズ、VOL ID、RAIDグループ等を含む。
【0051】
ステップS101において、MP−PK220は、要求されたVOLサイズがストレージサブシステム200において使用可能な空き領域より大きいかを判定する。ストレージシステムにおいて、要求されたサイズが使用可能でない場合、プロセスは、S102に移行し、MP−PKは、管理計算機にエラーを返し、プログラムが終了する(S102)。一方、ストレージサブシステム200が新しいVOLを収容する十分な空き領域を有している場合、MP−PKは、ステップS103〜S114を実行してターゲットVOLを作成する。
【0052】
ステップS103において、MP−PKは、ターゲットVOLを作成するために必要な1つ以上のディスクドライブ251内の領域を予約する。
【0053】
ステップS104において、MP−PKは、数式を用いて、ターゲットVOLのために作成する必要があるSub−VOLの数を算出する。ステップS104で使用される数式は、例えば、ターゲットVOLのサイズ(数)を所定のSub−VOLサイズによって除算する式であってもよい。この除算の商は、整数にならない場合、整数に切り上げられ、これによって、Sub−VOLのサイズ(数)が求められる。例えば、ターゲットVOLサイズが16GBであり、所定のSub−VOLサイズが5GBである場合、16GBを5GBで除算した商は、3.2であり、この商は、整数4に切り上げられる。したがって、ターゲットVOLのために、それぞれ5GBの4つのSub−VOLを作成する必要がある。これに代えて、各MP−PKが作成されたSub−VOLの1つをそれぞれ担当するように、MP−PKの数に基づいてSub−VOLの数を決定してもよい。例えば、ターゲットVOLサイズが16GBであり、利用可能なMP−PKの数が5である場合、5つのSub−VOLを作成する。そして、ターゲットVOLサイズ16GBを5で除算し、3.2GBを求めることによって各Sub−VOLのサイズを決定する。すなわち、5つのSub−VOLのそれぞれを3.2GBとする。
【0054】
次に、ステップS105において、MP−PKは、数式を用いて、各Sub−VOLに対応するターゲットVOLのアドレス範囲を算出する。この数式は、例えば、サイズが固定された連続するSub−VOLについてアドレス0から始まるアドレス範囲であってもよい。例えば、ターゲットVOLサイズが16GBであり、所定のSub−VOLサイズが5GBである場合、4個のSub−VOLのためのアドレス範囲は、それぞれ、0G〜5G−1、5G〜10G−1、10G〜15G−1、15G〜20G−1になる。
【0055】
ステップS106では、MP−PKが、所定の規則に基づいて、ターゲットVOLのためのオーナMP−PKを決定する。例えば、MP−PKは、VOLオーナMP−PKテーブルを参照して、最後に割り当てられたオーナMP−PK#(番号)を判定し、ラウンドロビン法を用いて、ターゲットVOLのVOLオーナMP−PK#を判定する。オーナMP−PKを判定する技術の他の具体例として、各MP−PKについてMP−PK稼働率を算出し、稼働率が最も低いMP−PKを選択してもよい。MP−PK稼働率は、MP−PKの各MPのプロセッサ稼働率の平均又はMP−PK毎の全てのMPのプロセッサ稼働率の合計である。MPのプロセッサ稼働率の算出については周知であり、ここではこれ以上説明しない。
【0056】
次に、ステップS107において、MP−PKは、ターゲットVOLの各Sub−VOLのSub−VOLオーナMP−PKを判定する。ここでは、Sub−VOLオーナMP−PKテーブルを参照することによって、S106で説明した規則を使用する。
【0057】
ステップS108において、MP−PKは、ターゲットVOL及びターゲットVOLのオーナMP−PKの情報によって、共有メモリ241内のVOLオーナMP−PKテーブル2411及びFE−PK210のメモリ213内のVOLオーナMP−PKテーブル2131を更新する。
【0058】
ステップS109において、MP−PKは、ターゲットVOLのSub−VOL及びSub−VOLオーナMP−PKに関する情報によって、各MP−PK220のローカルメモリ222内のSub−VOLオーナMP−PKテーブル2412及びFE−PK210のメモリ213内のSub−VOLオーナMP−PKテーブル2132を更新する。
【0059】
ステップS110において、MP−PKは、ターゲットVOLのための制御情報を生成し、ステップS111において、MP−PKは、生成した情報及びVOL作成コマンドと共に受信した情報によって、SM241内のVOL制御情報テーブル2413を更新する。
【0060】
ステップS112において、MP−PKは、ターゲットVOLの各Sub−VOLのための制御情報を生成し、ステップS113において、MP−PKは、この情報によって、各MP−PK220のLM222内のSub−VOL制御情報テーブル2221を更新する。
【0061】
一旦、テーブルが更新されると、MP−PKは、VOL(ターゲットVOL)が作成されたことを示す肯定応答を返し(S114)、プログラムが終了する。
【0062】
<ローカルルータによる分散処理>
図10は、ホスト計算機100からコマンドを受信したローカルルータ(LR)212によって実行されるコマンドの分散処理(distribution processing)を示すフローチャートである。
【0063】
まず、ステップS201において、LR212がホスト計算機100からコマンドを受信する。
そして、ステップ202において、LR212がコマンドを解析し、コマンドがVOL読出/書込関連コマンドであるか、VOL全体に関連する他のタイプコマンド、例えば、VOL状態変更コマンドであるかを判定する。コマンドがVOL読出/書込関連コマンドである場合、プロセスは、ステップS203に進む。コマンドが他のタイプのコマンドの1つである場合、プロセスは、ステップS206に進む。
【0064】
ステップS203では、LR212がコマンドからコマンドのターゲットアドレス及びVOL#を抽出する。そして、ステップS204において、LR212は、メモリ213内のSub−VOLオーナMP−PKテーブル2132を参照し、ターゲットアドレスのSub−VOL#(ターゲットSub−VOL)及びこのターゲットSub−VOLのオーナMP−PKを判定する。
【0065】
次のステップS205において、LR212は、処理のためにこのオーナMP−PKにコマンドを送信する。
【0066】
ステップS202において、コマンドが読出/書込関連コマンドでなかった場合(他のタイプのコマンドであった場合)、Sub−VOLオーナMP−PKではなく、VOLオーナMP−PKがコマンドを処理する必要がある。したがって、LR212は、ターゲットVOLのVOLオーナMP−PKにコマンドを送信するステップを実行する。
【0067】
ステップS206では、LR212がコマンドからVOL#を抽出し、ステップS207では、LR212がメモリ213内のVOLオーナMP−PKテーブル2131を参照して、ターゲットVOLのオーナMP−PKを判定する。
【0068】
最後に、ステップS208において、LR212は、処理されるターゲットVOLのオーナMP−PKにコマンドを送信する。
【0069】
<Sub−VOLオーナMP−PKによる読出コマンド/要求処理>
図11は、読出コマンドを受信したSub−VOLオーナMP−PKによって実行される読出要求処理プログラム2422に基づく読出処理のフローチャートである。
【0070】
ステップS300では、ステップS205においてLR212が送信した読出コマンドをその宛先であるSub−VOLオーナMP−PKが受信する。
【0071】
ステップS301では、Sub−VOLオーナMP−PKがSub−VOL制御情報テーブル2221を参照し、予約競合(reservation conflict)があるか否かをチェックする。Sub−VOLの状態が「予約(RESERVED)」であり、ホスト計算機100が読出コマンドを送信した計算機と異なる(すなわち、ターゲットSub−VOLが他のホスト計算機100によって使用中である)場合、MP−PKは、ステップS302において、ホスト計算機100に「予約競合(RESERVATION CONFLICT)」を返し、プログラムが終了する。
【0072】
一方、Sub−VOLが「解放(RELEASED)」又は読出コマンドを送信したホスト計算機100のために「予約(RESERVED)」されている場合、MP−PKは、プロセスをステップS303に進める。
【0073】
ステップS303では、Sub−VOLオーナMP−PKがキャッシュ又はディスクから要求されたデータを読み出し、読出コマンドを送信してきたホスト計算機にデータを返す。
【0074】
データ転送が完了すると、ステップS304において、MP−PKは、読出コマンドを送信してきたホスト計算機に「グッド(GOOD)」を返し、プログラムが終了する。
【0075】
<Sub−VOLオーナMP−PKによる書込コマンドの処理>
図12は、書込コマンドを受信したSub−VOLオーナMP−PKによって実行される書込要求処理プログラム2423に基づく書込コマンドの処理のフローチャートである。
【0076】
ステップS400では、ステップS205においてLR212が送信した書込コマンドをその宛先であるSub−VOLオーナMP−PKが受信する。
【0077】
ステップS401では、ステップS301と同様に、Sub−VOLオーナMP−PKがSub−VOL制御情報テーブル2221を参照し、予約競合があるか否かをチェックする。Sub−VOLが「解放(RELEASED)」又は読出コマンドを送信したホスト計算機100のために「予約(RESERVED)」されている場合、MP−PKは、プロセスをステップS403に進める。
【0078】
MP−PKは、ステップS403において、データ受信バッファが、ホストコンピュータ100によって送信されるデータをバッファリングするために十分な容量を有しているかをチェックする。データ受信バッファが十分な容量を有していない場合、MP−PKは、書込コマンドを送信してきたホスト計算機に「エラー(ERROR)」を返し、プログラムが終了する。
【0079】
一方、MP−PKは、ステップS403において、データ受信バッファが、ホスト計算機100によって送信されるデータを受信するために十分な容量を有していると判定した場合、ステップS405において、書込コマンドを送信してきたホスト計算機に「転送準備完了(TRANSFER READY)」を返し、ホストによるデータ送信を待機する。ホスト計算機100は、ストレージサブシステム200から「転送準備完了」を受信すると、書込コマンドに関連するデータを送信する。
【0080】
ストレージサブシステム200のオーナMP−PKは、ステップS406において、このデータを受信してデータ受信バッファにバッファリングし、ステップS407において、ホスト計算機100に「グッド(GOOD)」を返し、プログラムが終了する。
【0081】
データ受信バッファからディスクドライブ251へのこのデータのデステージング(de-staging)は、別のプログラムによって実行される。このデータデステージング処理は周知であり、ここではこれ以上説明しない。
【0082】
<VOLオーナMP−PKによる予約及び解放コマンドの処理>
図13は、VOLについての「予約」又は「解放」コマンドを受信したVOLオーナMP−PKによって実行される予約/解放要求プログラム2424に基づく予約及び解放コマンドの処理のフローチャートである。これらのコマンドは、VOL全体の処理に関連し、(読出/書込コマンドの場合のように)VOLの一部の領域に限定されることはないので、VOLオーナMP−PKによって処理される。
【0083】
ステップS500において、VOLオーナMP−PKがホスト計算機100の1つから「予約」又は「解放」コマンドを受信する。このコマンドは、ステップS208において、LR処理プログラム2133に基づき、LR212によってVOLオーナMP−PKに送信される。
【0084】
VOLオーナMP−PKは、コマンドを受信した後、ステップS501において、VOL制御情報テーブル2413を参照し、ターゲットVOLが既に予約されているか否か(VOLが別のホスト計算機による使用のためにロックされているか、又はVOLが如何なるホスト計算機による使用のためにもロックされていないか)をチェックする。VOLがまだ予約されていない場合、VOLオーナMP−PKは、プロセスをステップS504に進める。
【0085】
一方、ステップS502において、VOLが既に予約されている場合、MP−PKは、コマンドを発行したホスト計算機100と、VOLを現在予約しているホスト計算機100とが同じであるかをチェックする。ホスト計算機100が同じでない場合、VOLオーナMP−PKは、コマンドを送信してきたホスト計算機に「予約競合」を返し、プログラムを終了する。
【0086】
ステップS504において、VOLオーナMP−PKは、SM241内のVOL制御情報テーブル2413を更新することによって、ターゲットVOLの状態を「予約」又は「解放」の何れかに更新する。
【0087】
このとき、読出/書込関連コマンドを受信したSub−VOLオーナMP−PKがVOLの状態と同様にSub−VOLの状態を確実に判定できるようにするため、ターゲットVOLの各Sub−VOLの状態も同様に更新する必要がある。このため、VOLオーナMP−PKは、ステップS505において、Sub−VOLオーナMP−PKテーブル2412を参照し、ターゲットVOLの全てのSub−VOL及びそれぞれのオーナMP−PKに関する情報を取得する。
【0088】
次に、ステップS506において、VOLオーナMP−PKは、受信コマンドに基づいて、ターゲットVOLのSub−VOLを担当する各Sub−VOLオーナMP−PKのLM222内のSub−VOL制御情報テーブル2221を更新することによって、Sub−VOL状態を「予約」又は「解放」の何れかに更新する。
【0089】
ステップS507において、VOLオーナMP−PKは、コマンドを送信してきたホスト計算機に「グッド(GOOD)」を返し、プログラムを終了する。
【0090】
<VOLオーナ変更プログラム及びSub−VOLオーナ変更プログラムの処理>
VOLオーナ変更プログラム2425は、米国特許7912996B2に開示されているように、VOLのオーナMP−PKを変更し、及びこれに応じてVOLオーナMP−PKテーブル2131を更新するプログラムである。Sub−VOLは、本質的には、より小さいVOLであるので、Sub−VOLオーナ変更プログラム2426は、VOLオーナMP−PKテーブル2131ではなく、LM222及びメモリ213内のSub−VOLオーナMPPKテーブル2132を更新する点を除いて、VOLオーナ変更プログラム2425と同様である。
【0091】
<Sub−VOLサイズ/数変更>
また、何れかのVOLによって生じる負荷は、動的に(時間の経過に伴って)変化することがあるので、新たな演算結果に基づいて、VOLのSub−VOLのサイズ及び数を変更してもよい。MP−PKの1つは、各MP−PKの稼働率に関する情報を取得し、又は各MP−PKへのI/Oを監視することによって、各MP−PKの稼働率を判定し、各MP−PKの稼働率が同等又は略々同等となるように、論理ボリュームのサブボリュームのオーナシップをMP−PKに分担/分散させる。例えば、稼働率が高いMP−PKの幾つかのVOLのオーナシップを、稼働率が比較的低い他の1又は複数のMP−PKに移転させて、MP−PKの稼働率を均一に分散させることができる。同様に、各VOLについてのI/Oを計数し、各VOLによって生じるMP−PK上の負荷を判定し、VOLのオーナシップを入れ替えることによって、VOLのオーナシップを有することに起因するMP−PK上の全負荷が他のMP−PKの負荷と同等又は略々同等となるようにしてもよい。ストレージシステムは、この変更を周期的に実行するか、1つ以上のプロセッサユニットの負荷が閾値を超えたときにこの変更を実行するかを自律的に決定することができる。また、ストレージ管理者が同様の演算に基づいて及び/又は自らの入力パラメータによって、この変更を実行することを決定してもよい。このアーキテクチャによって、各プロセッサユニットに負荷を同等に分散させることができる。
【0092】
実施形態1では、VOLを複数のより小さいSub−VOLに分割し、これらのオーナシップを複数のMP−PKに分散させることによって、MP−PK上で単一のVOLによって生成される負荷を複数のMP−PKに分散でき、複数のMP−PKの間で負荷を均一にすることができる。これによって、マイクロプロセッサをより効率的に使用できるようになり、したがって、ストレージシステムの性能が向上する。この効果は、VOLのサイズが非常に大きい場合に特に顕著となる。この発明は、VOLサイズが大きく、単一のプロセッサに完全なVOLのオーナシップを与えるより、VOLのオーナシップを複数のMP−PKに分散させた方がより効率的になるビッグデータアプリケーションにおいて特に有用である。
【0093】
(2)実施形態2
この実施形態は、Sub−VOLを使用したVOLコピー技術の実現に関する。この技術では、同じストレージサブシステム200内にVOLのフルコピー(full copy)を作成する。この実施形態では、非同期フルコピー技術を説明する。但し、同様の原理によって、Sub−VOLを用いて同期フルコピー技術も実現することができる。この技術では、プライマリVOL及びセカンダリVOL(コピーVOL)のオーナは、同じにする。また、プライマリSub−VOL及び対応するセカンダリSub−VOL(コピーSub−VOL)のオーナも同じにする(例えば、プライマリSub−VOL#1及び対応するセカンダリSub−VOL#1のオーナは、単一のMP−PKであり、プライマリSub−VOL#2及び対応するセカンダリSub−VOL#2のオーナも単一のMP−PKであり、このMP−PKは、プライマリ及びセカンダリのSub−VOLペアのためのオーナMP−PKと同じであっても異なっていてもよい)。
この実施形態の計算機システムの構成としては、
図1に示した計算機システムと同様の構成を適用できる。
【0094】
<キャッシュメモリパッケージの構造>
図14は、この実施形態におけるキャッシュメモリパッケージ(CM−PK)240の例示的構造を示している。このセクションでは、
図2のCM−PK240との違いを説明する。
【0095】
共有メモリ241は、更に、
図16を用いて後に説明するVOLペア情報テーブル2414Aを格納している。
【0096】
VOLオーナMP−PKテーブル2411A、Sub−VOLオーナMP−PKテーブル2412A及びVOL制御情報テーブル2413Aは、それぞれテーブル2411、テーブル2412及びテーブル2413に対応している。
【0097】
また、
図14は、プログラムメモリのコンテンツの具体例も示している。このプログラムメモリは、VOL作成プログラム2421(
図9参照)に対応するVOL作成プログラム2421A、読出要求処理プログラム2422A、PVOL書込要求処理プログラム2423A、VOLオーナ変更プログラム2425A、Sub−VOLオーナ変更プログラム2426A、ペア作成プログラム(pair create program)2427A、VOLオーナMP−PKのためのペア動作プログラム(pair operation program)2428A及びSub−VOLオーナMP−PKのためのペア動作プログラム2429Aから構成されている。
【0098】
読出要求処理プログラム2422Aは、読出動作関連コマンド/要求を処理するために使用される。PVOL及びSVOLは、VOLと同じプロパティを有するので、このプログラムは、PVOL読出動作及びSVOL読出動作の両方に共通である。このプログラムは、実施形態1の
図11に示すシンプレックスVOL(Simplex VOL)の読出要求処理プログラムと同じである。「シンプレックス」状態とは、ペアボリューム(PVOL及びSVOL)の依存関係がない状態を意味する。
【0099】
PVOL書込要求処理プログラム2423Aは、書込動作関連コマンド/要求を処理するために使用される。このプログラムのフローチャートの具体例は、
図21を用いて後に説明する。
【0100】
VOLオーナ変更プログラム2425Aは、VOLオーナ変更プログラム2425に対応しており、Sub−VOLオーナ変更プログラム2426Aは、Sub−VOLオーナ変更プログラム2426に対応している。
【0101】
ペア作成プログラム2427Aは、コピーペアを生成するために使用される。これについては、
図18のフローチャートを用いて後に説明する。
【0102】
ペア動作プログラム2428Aは、シャドウイメージ(Shadow Image)コピーペア関連動作、例えば、ペア分離/ペア再同期等を実行する。このプログラムは、基本的にPVOL/SVOLペアのVOLオーナMP−PKによって実行され、Sub−PVOL(PVOLのSub−VOL)/Sub−SVOL(SVOLのSub−VOL)ペアのそれぞれのオーナMP−PKによって実行されるSub−VOLオーナMP−PKのためのペア動作プログラム2429Aによって補われる。プログラム2428A、2429Aのフローチャートは、それぞれ
図19及び
図20に示している。
【0103】
<FE−PK210のメモリ213の構造>
この実施形態のFE−PK210のメモリ213の構造は、実施形態1と同じである。また、テーブル2131、2132は、この実施形態でも同じ目的のために使用される。
【0104】
<LR処理プログラム2133>
また、実施形態1のLR処理プログラム2133は、この実施形態でも同じ目的のために使用され、更に、このプログラムは、VOL(PVOL/SVOLペア)のオーナMP−PKにコピーペア関連コマンドを送信する。
図10のLR処理プログラムのフローチャートに示すように、ステップS202において、コマンドがVOL読出/書込コマンド以外のコマンド(コピーペア関連コマンドも含まれる。)であると判定された場合、このコマンドは、ステップS206〜S208によってVOL(PVOL/SVOL)オーナMP−PKに送信される。
【0105】
<MP−PKのローカルメモリの構造>
図15は、ローカルメモリ(LM)222の構造の具体例を示す図である。LM222は、
図8の2221に対応するSub−VOL制御情報テーブル2221Aと、Sub−VOLペア情報テーブル2222Aとから構成されている。
Sub−VOLペア情報テーブル2222Aについては、
図17を用いて後に説明する。
【0106】
<VOLペア情報テーブルの構造>
図16は、VOLペア情報テーブル2414Aの具体例を示す図である。VOLペア情報テーブル2414Aは、コピーVOLペアに関する情報を維持する。このテーブルは、コピーVOLペアID、PVOL番号、SVOL番号及びペア状態を含む。コピーVOLペアIDは、ストレージサブシステム200内の各コピーVOLペアに付された一意的な番号である。ペア状態は、コピーVOLペアの状態を示している。例えば、フィールドの値が「PAIR」である場合、これは、対応するVOLペアがペア状態であることを意味する。「COPY(PD)」は、対応するVOLペアがCOPY保留状態(COPY pending state)であることを意味する。COPY保留状態は、PVOLからSVOLへのコンテンツの最初のコピー動作が進行中であることを意味する。「PSUS」は、対応するVOLペアが分離状態(split state)であることを意味する。すなわち、Sub−SVOLは、ペア分離動作の実行時点のSub−PVOLのコンテンツを維持し、ペア分離動作後にSub−PVOLのコンテンツが変更されても、Sub−SVOLのコンテンツは、変更されない。
【0107】
<Sub−VOLペア情報テーブルの構造>
図17は、Sub−VOLペア情報テーブル2222Aの具体例を示す図である。このテーブルは、コピーSub−VOLペアに関する情報を維持する。Sub−VOLペア情報テーブル2222Aは、そのフィールドとして、Sub−PVOL番号、Sub−SVOL番号、ペア状態及び差分ビットマップ(Differential Bitmap)を含む。Sub−PVOL及び対応するSub−SVOLの処理は、同じSub−VOLオーナMP−PKによって担当される。
【0108】
ペア状態フィールドは、コピーSub−VOLペアの状態を示す。ペア状態は、上述したように、その値としてPAIR状態、COPY(PD)状態、PSUS状態等を含む。
【0109】
差分ビットマップフィールドは、Sub−PVOL及びSub−SVOLの論理ブロックアドレス間の差分を示すビットマップを維持する。例えば、時刻T1において、Sub−PVOL及びSub−SVOLが完全に同じである場合、LBAのビットマップは、全てゼロになる。そして、時刻T2(>T1)において、Sub−PVOLの特定のLBAに書込が行われると、そのSub−PVOLは、そのLBAにおいて更新される。これによって、そのLBAについては、Sub−PVOL及びSub−SVOLが異なり、したがって、ビットマップフィールドのそのLBAの位置が1に設定され、これは、そのLBAにおいて、Sub−PVOLがSub−SVOLとは異なることを示す。
【0110】
<ペア作成動作>
図18は、ペア作成プログラム2427Aによるペア作成動作を示すフローチャートである。この処理は、既に作成されているが、互いに関連付けられていないPVOL及びSVOLをペアにする処理である。ペア作成プログラム2427Aは、2つのVOLをペア状態にして、コピー動作を実行できるようにするプログラムである。
図18に示すプログラムは、PVOLのオーナMP−PKによって実行されるが、ペア作成プロセスの一部(S608)は、Sub−VOLオーナMP−PKによって実行され、このプロセスのフローチャートは、
図20に示している。
【0111】
PVOLのオーナMP−PK(PVOLオーナMP−PKと呼ぶ。)は、まず、ステップS600において、ホスト計算機100からペア作成コマンドを受信し、ステップS601において、コピーペアのPVOL及びSVOL(以下にこの段落ではパラグラフの「ターゲットPVOL」及び「ターゲットSVOL」と呼ぶ。)のVOL番号をコマンドから抽出する。
【0112】
ステップS602において、ターゲットPVOLオーナMP−PKは、VOLオーナMP−PKテーブル2411Aを参照して、ターゲットPVOL及びターゲットSVOLが同じオーナを有するか否かを確認する。これらが同じオーナを有する場合、ターゲットPVOLオーナMP−PKは、プロセスをステップS604に進める。一方、ターゲットPVOL/SVOLペアが同じオーナMP−PK(そのオーナMP−PK自体)を有さない場合、ターゲットPVOLオーナMP−PKは、プロセスをステップS603に進め、VOLオーナ変更プログラム2425Aを実行し、ターゲットSVOLのオーナオーソリティ(Owner Authority)を変更して、ターゲットPVOLオーナMP−PKと同じにする。
【0113】
次に、ステップS604において、ターゲットPVOLオーナMP−PKは、ターゲットSVOLの各Sub−VOLのオーナオーソリティがターゲットPVOLの対応するSub−VOLのオーナオーソリティと同じであるか否かをチェックする。これらが同じオーナを有する場合、ターゲットPVOLオーナMP−PKは、プロセスをステップS606に進める。これらが同じオーナMP−PKを有さない場合、ターゲットPVOLオーナMP−PKは、プロセスをステップS605に進め、Sub−VOLオーナ変更プログラム2426Aを実行し、ターゲットSVOLの全てのSub−VOLのオーナオーソリティをターゲットPVOLのSub−VOLと同じにする。
【0114】
ステップS606の時点では、ターゲットPVOL及びターゲットSVOLは、同じVOLオーナMP−PKを有する。また、PVOL/SVOLペアの各Sub−VOLも同じオーナを有する。そこで、ステップS606において、PVOLオーナMP−PKは、ターゲットPVOL/SVOLをペアとする情報をVOLペア情報テーブル2414Aに加える。
【0115】
次に、ステップS607において、PVOLオーナMP−PKは、VOLペア情報テーブル2414A内のVOLペア状態をCOPY(PD)に更新する。COPY(PD)は、最初のコピーが進行中であることを示す状態である。
【0116】
ステップS608では、ターゲットPVOLからターゲットSVOLへの最初のコピーを実行する必要がある。しかしながら、Sub−VOLに対する読出及び書込動作は、Sub−VOLオーナMP−PKのみが実行するため、PVOLオーナMP−PKは、Sub−VOLオーナMP−PKテーブル2412Aを参照して、ターゲットPVOL/SVOLの全てのSub−VOLオーナMP−PKに関する情報を取得する。そして、PVOLオーナMP−PKは、各Sub−VOLオーナMP−PKに対して、Sub−VOLペアを作成し、Sub−PVOLから対応するSub−SVOLに最初のコピーを実行することを要求する。ステップS608の詳細な処理は、
図20を用いて後に説明する。
【0117】
ステップS609において、PVOLオーナMP−PKは、各Sub−VOLペアオーナMP−PKによるSub−VOLペア作成及び最初のコピー動作の完了を待機する。各Sub−VOLペアオーナMP−PKは、要求された動作を完了すると、完了に関する肯定応答をVOLペアオーナMP−PK(PVOL及びSVOLのオーナMP−PK)に送る。
【0118】
PVOLオーナMP−PKは、全てのSub−VOLオーナMP−PKから肯定応答を取得すると、プロセスをステップS610に進める。PVOLオーナMP−PKは、ステップS610において、VOLペア情報テーブル2414Aのペア状態を「PAIR」に更新する。
【0119】
ステップS611において、PVOLオーナMP−PKは、コピーペア作成動作の完了を示す肯定応答をホスト計算機100に返し、プログラムが終了する。
【0120】
<PVOL及びSVOLのためのペア動作(ペア分離及びペア再同期)>
図19は、PVOL及びSVOLについてVOLオーナMP−PKによって実行されるペア動作(ペア分離/ペア再同期)のフローチャートである。ペア再同期動作は、分離状態(PSUS)であるSVOLをPVOLに再同期させ、SVOLがPVOLのコピーになり、PVOLの最新のコピーを維持するための動作である。
【0121】
ステップS700では、コピーペアオーナMP−PK(PVOL及び対応するSVOLのVOLオーナMP−PK(PVOLオーナMP−PKとも呼ぶ。))がペア動作コマンドを受信する。
【0122】
ステップS701において、PVOLオーナMP−PKは、コマンドからPVOL及びSVOLのVOL番号を抽出する。
【0123】
ステップS702において、PVOLオーナMP−PKは、コマンドからペア動作を抽出する。このフローチャートでは、ペア動作は、ペア分離動作及びペア再同期動作の何れかを意味する。
【0124】
ステップS703において、PVOLオーナMP−PKは、VOLペア情報テーブル2414Aを参照し、要求されたペアのPVOL及びSVOLが、要求された動作を実行するために適切な状態にあるかをチェックする。例えば、ペア分離動作の場合、PVOLオーナMP−PKは、PVOL及びSVOLがペア状態にあるか否かをチェックする。これらがペア状態ではない場合、要求された動作は、実行できない。PVOL及びSVOLが要求された動作を実行するために適切な状態ではない場合、PVOLオーナMP−PKは、プロセスをステップS704に進め、コマンドを発したホスト計算機100にエラー(ERROR)を返し、プログラムが終了する。
【0125】
一方、ステップS703において、PVOL及びSVOLの状態が要求された動作を実行するために適切であると判定された場合、PVOLオーナMP−PKは、プロセスをステップS705に進める。
【0126】
ステップS705において、PVOLオーナMP−PKは、VOLペア情報テーブル2414A内のコピーペアの状態を、要求された動作が進行中であることを示す状態に更新する。例えば、動作が「ペア作成」である場合、状態は、COPY(PD)に変更され、これは、最初のコピーが進行中であることを意味する。動作が「ペア分離」である場合、状態は、COPY(SP)になり、これは、Sub−PVOLからSub−SVOLへの差分コピー(differential copy)が進行中であることを意味する。動作が「ペア再同期」である場合、状態は、COPY(RS)になり、これは、Sub−PVOLからSub−SVOLへの差分コピーが進行中であることを意味する。
【0127】
ステップS706において、PVOLオーナMP−PKは、Sub−VOLオーナMP−PKテーブル2412Aを参照し、PVOL及びSVOLのSub−VOLオーナMP−PKに関する情報を取得する。そして、PVOLオーナMP−PKは、これらのSub−VOLオーナMP−PKのそれぞれに対し、それらが担当するSub−VOLペアについて要求された動作を実行することを要求する。ステップS706の詳細な処理は、
図20を用いて後に説明する。
【0128】
ステップS707において、PVOLオーナMP−PKは、前のステップにおいて要求されたタスクの完了を待機する。PVOLオーナMP−PKは、全てのSub−VOLオーナMP−PKから肯定応答を受け取ると、プロセスをステップS708に進め、要求された動作に基づいて、VOLペアの状態を更新する。例えば、要求された動作がペア分離動作である場合、PVOLオーナMP−PKは、ペア状態を「PSUS」に更新する。
【0129】
PVOLオーナMP−PKは、ステップS709において、コマンドを送信してきたホスト計算機100に、要求された動作の完了を示す肯定応答を返し、プログラムが終了する。
【0130】
<Sub−PVOL及びSub−SVOLのためのペア動作(ペア分離、ペア再同期及びペア作成)>
図20は、Sub−VOLオーナMP−PKによって実行されるSub−PVOL及びSub−SVOLのためのペア動作(例えば、ペア分離/ペア再同期/ペア作成)のフローチャートである。これらのペア動作は、
図18のステップS608の処理に対応する。したがって、
図18のS608に示すように、何れのペア動作も、まずターゲットコピーペアVOLのオーナMP−PK(PVOLオーナMP−PK)によって部分的に実行される。そして、ターゲットコピーペアVOLのオーナMP−PKは、ターゲットコピーペアVOLの各Sub−VOLオーナMP−PKに対し、要求されたタスクの一部を実行することを要求する。Sub−VOLオーナMP−PKは、要求された動作を実行すると、タスクの完了を示す肯定応答をVOLオーナMP−PKに送る。全てのSub−VOLオーナMP−PKがタスクの完了を示す肯定応答を送ると、コピーペアVOLのオーナは、要求された動作に関する最終的なタスクを実行し、プログラムが終了する。
図20のフローチャートは、このようなプロセスの具体例を示している。
【0131】
ステップS800において、Sub−VOLオーナMP−PKは、PVOLオーナMP−PKからペア動作のコマンドを受け取る。この具体例では、ペア動作は、ペア作成、ペア分離又はペア再同期であってもよい。
【0132】
ステップS801において、Sub−VOLオーナMP−PKは、コマンドからPVOL及びSVOLのVOL番号を抽出する。
【0133】
ステップS802において、Sub−VOLオーナMP−PKは、ペア動作を抽出する。
【0134】
ステップS803において、Sub−VOLオーナMP−PKは、ステップS703に関連して説明したように、Sub−VOLペア情報テーブル2222Aを参照し、要求された対のSub−PVOL及びSub−SVOLが要求された動作を実行するために適切な状態にあるかをチェックする。Sub−PVOL及びSub−SVOLが要求された動作を実行するために適切な状態にない場合、Sub−VOLオーナMP−PKは、プロセスをS804に進め、VOLオーナMP−PK(
図18の処理を実行するPVOLオーナMP−PK)にエラー通知を返し、プログラムが終了する。
【0135】
一方、ステップS803において、Sub−PVOL及びSub−SVOLの状態が要求された動作を実行するために適切であると判定された場合、Sub−VOLオーナMP−PKは、プロセスをステップS805に進める。
【0136】
ステップS805において、Sub−VOLオーナMP−PKは、ステップS708について説明したように、Sub−VOLペア情報テーブル2222A内のコピーペアの状態を、要求された動作が進行中であることを示す状態に更新する。
【0137】
ステップS806において、Sub−VOLオーナMP−PKは、要求された動作に基づくアクションを実行する。ペア動作のためのアクションの3つの具体例は、以下の通りである。要求された動作が「ペア再同期」である場合、Sub−VOLオーナMP−PKは、Sub−VOLペア情報テーブル2222Aから差分ビットマップを読み出し、差分ビットマップに従ってSub−SVOLを(現在のSub−PVOLの正確なコピーになるように)更新する。要求された動作がペア分離である場合、Sub−VOLオーナMP−PKは、非同期コピープロセスをトリガし、Sub−VOLペア情報テーブル2222Aから再び差分ビットマップを読み出し、差分ビットマップに従ってSub−SVOLを(現在のSub−PVOLの正確なコピーになるように)更新する。要求された動作がペア作成である場合、Sub−VOLオーナMP−PKは、Sub−SVOLに対する最初のコピー動作を実行して、現在のSub−PVOLの正確なコピーにする。このように、上述した3つの動作では、全て、Sub−SVOLをSub−PVOLの正確なコピーにするコピー動作を実行する。したがって、これらの3つの動作は、単一のサブプログラムで実行でき、このサブプログラムは、異なる状況でトリガすることができる。
【0138】
ステップS807において、Sub−VOLオーナMP−PKは、要求された動作に応じて、Sub−VOL情報テーブル内のSub−VOLペアの状態を更新する。例えば、要求された動作がペア分離動作である場合、Sub−VOLオーナMP−PKは、Sub−VOLペアの状態を「PSUS」に更新する。
【0139】
ステップS808において、Sub−VOLオーナMP−PKは、要求された動作の完了を示す肯定応答をVOLオーナMP−PKに返し、プログラムが終了する。
【0140】
<PVOL書込動作>
図21は、Sub−VOLオーナMP−PKによって実行されるPVOL書込動作のフローチャートである。全てのPVOL書込コマンドは、実施形態1のシンプレックスVOLの場合と同様に、書込動作のターゲットアドレス範囲に含まれるSub−VOLのオーナシップを有するMP−PKに宛てられる。
【0141】
ステップS900〜S906は、Sub−VOLオーナMP−PKが参照するテーブルがこの実施形態のためのテーブルである点を除いて、実施形態1における
図12のステップS400〜S406と同様である。
【0142】
ステップS907において、Sub−VOLオーナMP−PKは、Sub−VOLペア情報テーブル2222Aを参照し、Sub−VOLがコピーペアSub−VOL(Sub−SVOL)を有するか否かをチェックする。ターゲットSub−PVOLのためのSub−SVOLがない場合、Sub−VOLオーナMP−PKは、プロセスをステップS909に進める。一方、Sub−SVOLがある場合、Sub−VOLオーナMP−PKは、プロセスをステップS908に進め、Sub−VOLペア情報テーブル2222A内のSub−VOLペアの差分ビットマップを更新する。
【0143】
ステップS909において、Sub−VOLオーナMP−PKは、ホスト計算機100に「グッド(GOOD)」を返し、プログラムが終了する。
【0144】
データ受信バッファからディスクドライブ251へのこのデータのデステージングは、別のプログラムによって実行される。このデータデステージング処理は周知であり、ここではこれ以上説明しない。
【0145】
本発明では、コピー機能のオリジナルボリューム(PVOL)及びコピーボリューム(SVOL)のオーナオーソリティを同じプロセッサに割り当て、コピー機能(PP)の性能を向上させている。更に、PVOL及びSVOLをそれぞれ複数のサブボリューム(プライマリサブボリューム及びセカンダリサブボリューム)に分割し、対応するプライマリサブボリューム及びセカンダリサブボリュームに同じプロセッサを割り当てる。ここで、1つのPVOLに対して複数のSVOLが存在することがあり、PVOL及びSVOLによって生じる累積的な負荷は、非常に大きくなることがある。本発明により、MPPKの利用率を向上させて、負荷を均等に分散させることができる。
【0146】
(3)実施形態3
この実施形態は、Sub−VOLを用いて、スナップショット(Snapshot)と名付けられたVOLコピー機能を実現する方法に関する。
【0147】
スナップショットVOLコピー技術は、PVOLが必要とする容量以下のPVOLのポイントインタイム(Point-in-Time)コピーを作成する技術である。スナップショットSVOLは、データがPVOLの物理データと同じである仮想VOL、データがプールVOL(Pool VOL)と呼ばれる異なるVOLに保存された仮想VOL、又は部分的にこれらの両方であってもよい。スナップショットVOLを生成する際は、SVOLのデータがどこに保存されているかについて、テーブル、すなわち、論理ブロックアドレス(又は他のユニット)ポインタテーブルを追跡する。スナップショットコピーペアVOLがペア状態であり、すなわち、SVOLデータがPVOLデータと同じである必要がある場合、SVOLの各論理ブロックアドレス(Logical Block Address:以下、LBA)ポインタは、PVOLのLBAを指す。スナップショットコピーペアが分離状態(PSUS)である場合、SVOLは、分離動作が実行されたときのPVOLのデータを維持する必要がある。この目的のために、プールVOLを用いて、ペア分離動作が実行された後に変更されるPVOLの元のデータの全てを維持する。また、LBAデータポインタテーブル2223Bと呼ばれるテーブルにおいて、PVOLのデータが保存されているプールVOLのためのLBAポインタも維持する。そして、この実施形態では、Sub−VOLを用いて、上述したスナップショットコピー機能を実現する。このために、各Sub−VOLについてのLBAデータポインタテーブル2223Bを作成する。実施形態2の場合と同様に、この実施形態でもプライマリVOL及びセカンダリVOL(コピーVOL)のオーナは同じにする。各プライマリSub−VOL及び対応するセカンダリSub−VOL(コピーSub−VOL)のオーナもそれぞれ同じにする。以下では、この方法の詳細を説明する。
【0148】
<キャッシュメモリパッケージの構造>
この実施形態のキャッシュメモリパッケージ(CM−PK)240の構造は、
図14のVOLペア情報テーブル2414Aの代わりに別のVOLペア情報テーブルを用いる点を除いて、
図14に示した構造と実質的に同じである。このVOLペア情報テーブルは、スナップショットコピーVOLペアに関する情報を維持する。このテーブルの状態フィールドは、スナップショットコピーペアの状態に関する情報を維持する。状態フィールドは、スナップショットコピーペアVOLがペア状態であり、PVOLのコンテンツがSVOLのコンテンツと同じである場合、値「PAIR」になり、新しいペアが作成され、実際にペア状態を達成する前に処理(例えば、プールVOLの作成)が進行中である場合、値「COPY(PD)」になり、この状態では、コピーペアの「COPY(PD)」状態の場合のように最初のコピー動作を実行せず、VOLペアが分離状態にあり、SVOLは、ペア分離動作が実行されたときのPVOLのデータを維持する必要がある場合、値「PSUS」になる。
【0149】
<プログラムメモリ内の各プログラムについて>
プログラムメモリ内のプログラムは、
図14に示す通りである。VOL作成プログラム2421Aは、新しいVOL(PVOL及びSVOL)を作成するために用いられる。PVOLについては、このプログラムは、
図9に示す実施形態1で用いるプログラム2421と同じである。また、SVOLについては、SVOLが仮想VOLであり、スナップショットSVOLは、作成時に物理的容量を必要としないので、
図9のステップS101及びステップS103をスキップする点を除いて、このプログラムは、プログラム2421と同じである。
【0150】
この実施形態における読出要求処理プログラム2422Aは、読出処理関連コマンドを処理するために用いられる。このプログラムは、後述する
図25のフローチャートとして示されている。
【0151】
この実施形態におけるPVOL書込み要求処理プログラム2423Aは、書込動作関連コマンドを処理するために用いられる。このプログラムのフローチャートは、
図26を用いて後に説明する。
【0152】
この実施形態のペア作成プログラム2427Aは、スナップショットコピーペアを作成するために用いられる。プログラムのフローは、
図18に示すペア生成プログラムと同様であるが、ステップS606、ステップS607、ステップS610において使用されるVOLペア情報テーブルがスナップショットコピーVOLペアの情報を用いる点が先の説明と異なる。また、ステップS608において、Sub−VOLペアについての最初のコピー動作は、実行されず、これに代えて、対応するSub−VOLペアオーナMP−PKがPool−VOLを作成し、作成したPool−VOL又は既存のPool−VOLを各Sub−VOLペアに割り当てる。
【0153】
VOLオーナMP−PKのためのペア動作プログラム2428Aは、実施形態2で説明したペア分離/ペア再同期等のスナップショットコピーペア関連動作を実行する。
【0154】
この実施形態におけるSub−VOLオーナMP−PKのためのペア動作プログラム2429Aは、
図20のステップS805、ステップS806及びステップS807において、Sub−VOLペア情報テーブル2222Aの代わりにSub−VOLペア情報テーブル2222Bを参照する。テーブル2222Bの具体例は、
図23に示し、後に説明する。
【0155】
この実施形態のステップS806では、所与のペア動作についてSub−VOLペア情報テーブル2222Bを更新すると共に、対応するPool番号及びLBAデータポインタテーブル番号を更新し、更に、動作の要求に応じて対応するLBAデータポインタテーブルのコンテンツを更新する。例えば、動作が「ペア生成」である場合、ペアのために新しいLBAデータポインタテーブル2223Bを作成し、Sub−VOLペアにPool−VOLを割り当て、ターゲットSub−PVOL ID、ターゲットSub−SVOL ID、割り当てられたPool VOL番号及び作成されたLBAポインタアドレステーブル番号を用いて、Sub−VOLペア情報テーブル2222Bに新たなエントリを追加する。動作が「ペア分離」である場合、ステップS806では、Sub−VOLペア情報テーブル2222B内の状態だけを変更する。動作が「ペア再同期」である場合、ステップS806では、LBAデータポインタテーブル2223Bに「NULL」を埋め、これは、全てのSub−SVOLのデータが現在のSub−PVOLと同じであることを表す。
【0156】
<FE−PK内のメモリの構造>
この実施形態のFE−PK210のメモリ213の構造は、実施形態1と同じである。また、VOLオーナMP−PKテーブル2131及びSub−VOLオーナMP−PKテーブル2132は、この実施形態でも同じ目的で使用される。
【0157】
また、実施形態1のLR処理プログラム2133は、この実施形態でも同じ目的で使用されると共に、更に、VOL(PVOL/SVOLペア)オーナMP−PKにスナップショットコピーペア関連コマンドを送信する。
【0158】
図10のLR処理プログラムの例示的なフローに示すように、ステップS202において、VOL(PVOL又はSVOL)読出/書込コマンド以外のコマンド(スナップショットコピーペア関連コマンドも含まれる。)は、
図10におけるステップS206〜S208によってVOL(PVOL/SVOL)オーナMP−PKに送信される。
【0159】
<MP−PKのローカルメモリの構造>
図22は、MP−PK220内のLM222のコンテンツの具体例を示す図である。LM222のコンテンツは、Sub−VOL制御情報テーブル2221B、Sub−VOLペア情報テーブル2222B及び複数のLBAデータポインタテーブル2223Bから構成される。
【0160】
Sub−VOL制御情報テーブル2221Bは、実施形態1のSub−VOL制御情報テーブル2221と同じである。
Sub−VOLペア情報テーブル2222Bは、Sub−VOLペアに関する情報を含む。このテーブルの具体例は、
図23に示し、後に説明する。
LBAデータポインタテーブル2223Bの具体例は、
図24に示している。
【0161】
<VOLペア情報テーブルの構造>
この実施形態のためのVOLペア情報テーブルは、シャドウイメージコピーVOLペアの代わりにスナップショットコピーVOLペアに関するペア情報を維持する点を除いて、テーブル2414Aと同じである。
【0162】
<Sub−VOLペア情報テーブルの構造>
図23は、Sub−VOLペア情報テーブル2222Bの具体例を示している。このテーブルは、2つの追加フィールドを有し、ビットマップフィールドを有していない点を除いて、テーブル2222Aと同様である。追加フィールドの一方は、「Pool番号」であり、他方は、「LBAデータポインタテーブル(2223B)番号」である。Pool番号は、対応するスナップショットコピーペアSub−VOLに関連するPool VOLの番号を示す。LBAデータポインタテーブル2223Bは、対応するSub−SVOLのデータのアドレスポインタを追跡する。LBAデータポインタテーブルの具体例は、
図24に示している。
【0163】
<LBAデータポインタテーブルの構造>
図24は、LM222内のLBAデータポインタテーブル2223Bの1つの具体例を示している。スナップショットコピーVOL毎に対応するLBAデータポインタテーブル2223Bがある。
【0164】
LBAデータポインタ2223Bは、「LBA」フィールド及び「データポインタ」フィールドから構成されている。LBAフィールドは、テーブルが関連付けられているSub−SVOLの論理ブロックアドレス(Logical Block Address:LBA)である。「データポインタ」フィールドは、Sub−SVOLの対応するLBAのデータのためのアドレスポインタである。このフィールドが「NULL」である場合、これは、Sub−SVOLデータがSub−PVOLデータと同じであり、Sub−PVOLの同じLBAから読み出す必要があることを意味する。このフィールドが「NULL」ではない場合、フィールドの値は、Sub−SVOLのデータが存在する対応するPool VOLのアドレスである。
【0165】
<PVOL及びSVOLの読出動作>
図25は、Sub−VOLオーナMP−PKによって実行されるPVOL/SVOL読出動作のフローチャートである。
【0166】
ステップS1100では、Sub−VOLオーナMP−PKが、ホスト計算機100から送信された読出コマンドを受信する。
【0167】
ステップS1101は、ステップ301に対応している。何らかの予約競合があった場合、プロセスは、ステップS1102に進み、プログラムが終了する。一方、Sub−VOLが「解放(RELEASED)」又は読出コマンドを送信したホスト計算機100のために「予約(RESERVED)」されている場合、Sub−VOLオーナMP−PKは、プロセスをステップS1103に進める。
【0168】
ステップS1103では、Sub−VOLオーナMP−PKがSub−VOL制御情報テーブル2221Bを参照し、ターゲットSub−VOLがSub−PVOLであるか、Sub−SVOLであるかをチェックする。ターゲットSub−VOLがSub−PVOLである場合、Sub−VOLオーナMP−PKは、プロセスをステップS1104に進め、実施形態1における
図11のステップS303と同様のシンプレックスVOL読出処理を実行する。
【0169】
ステップS1103において、ターゲットSub−VOLがSub−SVOLであると判定された場合、Sub−VOLオーナMP−PKは、プロセスをステップS1105に進め、このステップS1105において、Sub−VOLペア情報テーブル2222Bを参照して、Pool番号及び対応するLBAデータポインタテーブル番号の情報を取得する。
【0170】
ステップS1106では、Sub−VOLオーナMP−PKが関連するLBAデータポインタテーブル2223Bを参照し、ターゲットLBAのアドレスを取得する。
【0171】
ステップS1107において、Sub−VOLオーナMP−PKは、ポインタフィールドが「NULL」であるか否かをチェックする。ポインタフィールドが「NULL」である場合、Sub−VOLオーナMP−PKは、プロセスをステップS1108に進め、ターゲットペアのSub−PVOLの対応するLBAからデータを読み出す。一方、ステップS1107において、データポインタフィールドが「NULL」以外の値を格納していると判定された場合、Sub−VOLオーナMP−PKは、その値を対応するPool VOLのアドレスと判断し、ステップS1109において、対応するPool VOLからデータを読み出す。
【0172】
Sub−VOLオーナMP−PKは、ステップS1108又はステップS1109によってデータを読み出した後、プロセスをステップS1110に進め、読出データを返す。
【0173】
ステップS1111において、Sub−VOLオーナMP−PKは、「グッド(GOOD)」を返し、プログラムが終了する。
【0174】
<PVOLの書込動作>
図26は、Sub−VOLオーナMP−PKによって実行されるPVOL書込動作のフローチャートである。このフローチャートは、この段落で説明する幾つかの点を除いて、
図21に示すフローチャートと同じである。
【0175】
図26のステップS1200〜S1207は、
図21のステップS900〜S907と同じである。ステップS1207で参照されるSub−VOLペア情報テーブルは、テーブル2222Bである。ステップS1208において、Sub−VOLオーナMP−PKは、スナップショットSub−VOLペアが分離状態(PSUS)であるかをチェックする。スナップショットSub−VOLペアが分離状態ではない場合、Sub−VOLオーナMP−PKは、プロセスをステップS1210に進める。スナップショットSub−VOLペアが分離状態である場合、Sub−VOLオーナMP−PKは、プロセスをステップS1209に進め、バッファリングされたデータをSub−PVOLにデステージングする前に、PVOLデータを読み出し、このデータを対応するPool VOLに書き込む。またSub−VOLオーナMP−PKは、MP−PKがデータを書き込んだPool VOLのアドレスによってLBAデータポインタテーブル2223Bを更新する。
【0176】
ステップ1210において、Sub−VOLオーナMP−PKは、書込コマンドを発行したホスト計算機に「グッド(GOOD)」を返し、プログラムが終了する。
【0177】
(4)その他
本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによって実現することもできる。この場合、システム又は装置には、このプログラムコードを記録したストレージ媒体が提供され、システム又は装置の計算機(又はCPU又はMPU)が、このストレージ媒体に保存されているプログラムコードを読み出す。この場合、ストレージ媒体から読み出されるプログラムコード自体が上述した実施形態の機能を実現する。プログラムコード自体及びプログラムコードが保存されるストレージ媒体は、本発明を構成する。このようなプログラムコードを供給するためのストレージ媒体としては、例えば、フレキシブルディスク、CD−ROM、DVD−ROM、ハードディスク、光ディスク、光磁気ディスク、CD−R、磁気テープ、不揮発メモリカード又はROMを使用してもよい。
【0178】
更に、実施形態の機能を実現するソフトウェアのプログラムコードは、ネットワークを介して配信してもよく、プログラムコードは、記録手段、例えば、システム又は装置のハードディスク又はメモリ、又はCD−RW又はCD−R等のストレージ媒体に保存され、プログラムコードの使用時に、システム又は装置の計算機(又はCPU又はMPU)が記録手段又はストレージ媒体に保存されているプログラムコードを読み出し、実行してもよい。
【0179】
なお、上述したプロセス及び技術は、本質的には、特定の装置に限定されず、コンポーネントの適切な如何なる組合せによって実現してもよい。更に、上述した開示に基づいて、様々なタイプの汎用デバイスを用いることもできる。上述した方法のステップを実行するために専用の装置を構築することも有用である。実施形態で開示した複数のコンポーネントの適切な組合せによって様々な実施形態を構成することができる。例えば、実施形態で説明した全てのコンポーネントから幾つかのコンポーネントを省略してもよい。更に、異なる実施形態で説明したコンポーネントを適切に組み合わせてもよい。特定の具体例に関連付けて本発明を説明した。但し、特定の具体例は、説明を目的とするものであり、全ての側面を限定するものではない。本発明の実施に適するハードウェア、ソフトウェア及びファームウェアの多くの組合せがあることは、当業者にとって明らかである。例えば、上述したソフトウェアは、様々なプログラム又はスクリプト言語、例えば、C/C++、パール(Perl)、シェル(Shell)、PHP及びJava(登録商標)によって実現してもよい。
【0180】
更に、実施形態では、説明のために必要な制御線及び情報線を示した。全ての制御線及び情報線は、製品に関して示したものではない。全てのコンポーネントを互いに接続してもよい。
【0181】
更に、この技術分野で通常の知識を有する者は、本明細書及びここに開示した本発明の実施形態に基づいて、本発明の他の具体例を想到できることは明らかである。ここに説明した実施形態の様々なフォーム及び/又はコンポーネントは、データの管理機能を有するコンピュータ化されたストレージシステムにおいて、個別に又は如何なる組合せで用いてもよい。詳細な説明及び特定の具体例は、典型的なもののみを示している。本発明の範囲及び思想は、特許請求の範囲に示されている。