(57)【特許請求の範囲】
【請求項１】
計算機に接続された計算機システムであって、
少なくとも１つ論理ボリュームを前記計算機に提供する複数のストレージデバイスと、それぞれが前記計算機によって発行されたコマンドを処理する複数のプロセッサユニットとを含むストレージサブシステムを備え、
前記論理ボリュームの少なくとも１つが複数のサブボリュームに分割され、
前記論理ボリュームのためのコマンドの処理を担当する前記論理ボリュームのボリュームオーナプロセッサユニットは、前記複数のプロセッサユニットのうちの１つのプロセッサユニットであり、前記複数のサブボリュームの少なくとも１つのサブボリュームオーナプロセッサユニットは、前記複数のプロセッサユニットのうちの前記論理ボリュームのボリュームオーナプロセッサユニットでない１つのプロセッサユニットであり、
前記サブボリュームオーナプロセッサユニットのそれぞれは、前記担当するサブボリュームについての読出又は書込コマンドを処理し、前記ボリュームオーナプロセッサユニットは、担当する論理ボリュームについての読出及び書込コマンド以外のコマンドであって、前記担当する論理ボリューム全体の処理に関連するコマンドを処理する計算機システム。
【請求項２】
前記ストレージサブシステムは、前記計算機からのコマンドのタイプを解析し、前記サブボリュームオーナプロセッサユニット又は前記ボリュームオーナプロセッサユニットに前記コマンドを送信するプロセッサユニットを更に備える請求項１記載の計算機システム。
【請求項３】
前記読出及び書込コマンド以外のコマンドは、前記担当する論理ボリュームの予約又は解放コマンドを含む請求項１記載の計算機システム。
【請求項４】
プロセッサユニットが、受信した論理ボリューム作成の要求に応じて、作成する論理ボリューム内のサブボリュームの数と、作成する論理ボリュームのボリュームオーナプロセッサユニットと、作成する論理ボリューム内で定義される各サブボリュームのサブボリュームオーナプロセッサユニットとを判定する請求項１記載の計算機システム。
【請求項５】
前記論理ボリューム作成の要求を処理するプロセッサユニットは、前記複数のプロセッサユニットの数によって前記論理ボリュームを分割することによって、前記作成する論理ボリューム内のサブボリュームを定義する請求項４記載の計算機システム。
【請求項６】
前記論理ボリューム作成の要求を処理するプロセッサユニットは、所定のサブボリュームサイズに基づいて前記論理ボリュームを分割することによって、前記作成する論理ボリューム内のサブボリュームを定義する請求項４記載の計算機システム。
【請求項７】
前記プロセッサユニットは、各プロセッサユニットの稼働率の情報を取得し、前記稼働率の情報に基づいて、前記論理ボリュームのサブボリュームの少なくとも１つのオーナシップを変更する請求項１記載の計算機システム。
【請求項８】
前記ストレージサブシステムは、少なくとも１つのフロントエンドユニットを含み、前記コマンドのタイプを解析するプロセッサユニットは、前記フロントエンドユニットのローカルルータとして提供される請求項２記載の計算機システム。
【請求項９】
前記論理ボリュームの少なくとも１つは、第１の論理ボリューム及び第２の論理ボリュームを含み、
前記第１の論理ボリュームは、コピーペアとして前記第２の論理ボリュームとペアにされ、
前記ボリュームオーナプロセッサユニットは、前記第１の論理ボリュームと前記第２の論理ボリュームとの間で共通であり、
前記サブボリュームオーナプロセッサユニットは、前記第１及び第２の論理ボリューム内の対応するサブボリュームのそれぞれの間で共通である請求項１記載の計算機システム。
【請求項１０】
前記第２の論理ボリュームは、前記第１の論理ボリュームに保存されているデータの複製データを保存する論理ボリューム又はストレージ領域が第１の論理ボリューム内の対応するストレージ領域又はプールボリューム内のストレージ領域にマッピングされた仮想ボリュームである請求項９記載の計算機システム。
【請求項１１】
前記計算機からのコマンドは、前記コマンドの種類に基づいて、前記第１及び第２の論理ボリュームのボリュームオーナプロセッサユニット又は前記第１及び第２の論理ボリューム内の前記各サブボリュームのサブボリュームオーナプロセッサユニットの１つに送信される請求項９記載の計算機システム。
【請求項１２】
前記第１及び第２の論理ボリュームのボリュームオーナプロセッサユニットに送信されるコマンドは、前記第１及び第２の論理ボリュームのペアのための分離又は再同期コマンドを含む請求項１１記載の計算機システム。
【請求項１３】
前記各プロセッサユニットは、複数のマイクロプロセッサを含み、
前記論理ボリュームのボリュームオーナプロセッサユニット及びサブボリュームオーナプロセッサユニットは、前記プロセッサユニットに代えて、前記複数のマイクロプロセッサに割り当てられる請求項１記載の計算機システム。
【請求項１４】
前記各プロセッサユニットは、更に、少なくとも１つコアプロセッサによってアクセスされるローカルメモリを含む請求項１３記載の計算機システム。
【請求項１５】
計算機に接続された計算機システムであって、少なくとも１つ論理ボリュームを前記計算機に提供する複数のストレージデバイスと、それぞれが前記計算機によって発行されたコマンドを処理する複数のプロセッサユニットとを含むストレージサブシステムを備える計算機システムのためのボリューム管理方法であって、
前記プロセッサユニットの１つによって、前記論理ボリュームを複数のサブボリュームに分割するステップと、
前記プロセッサユニットの１つによって、前記論理ボリュームのためのコマンドの処理を担当する前記論理ボリュームのボリュームオーナプロセッサユニットとして複数のプロセッサユニットの１つを決定するステップと、
前記プロセッサユニットの１つによって、前記複数のサブボリュームの少なくとも１つのためのサブボリュームオーナプロセッサユニットとして、前記複数のプロセッサユニットの他の１つを決定するステップと、を有し、
前記サブボリュームオーナプロセッサユニットのそれぞれは、前記担当するサブボリュームについての読出又は書込コマンドを処理し、前記ボリュームオーナプロセッサユニットは、担当する論理ボリュームについての読出及び書込コマンド以外のコマンドであって、前記担当する論理ボリューム全体の処理に関連するコマンドを処理するボリューム管理方法。
【請求項１６】
前記複数のプロセッサユニットの１つによって、前記計算機からのコマンドのタイプを解析し、前記サブボリュームオーナプロセッサユニット又は前記ボリュームオーナプロセッサユニットに前記コマンドを送信するステップを更に有する請求項１５記載のボリューム管理方法。
【請求項１７】
前記複数のプロセッサユニットの１つによって、各プロセッサユニットの稼働率の情報を取得するステップと、
前記複数のプロセッサユニットの１つによって、前記稼働率の情報に基づいて、前記論理ボリュームのサブボリュームの少なくとも１つのオーナシップを変更するステップと、
を有する請求項１５記載のボリューム管理方法。
【請求項１８】
前記論理ボリュームの少なくとも１つは、第１の論理ボリューム及び第２の論理ボリュームを含み、
前記第１の論理ボリュームは、コピーペアとして前記第２の論理ボリュームとペアにされ、
前記ボリュームオーナプロセッサユニットは、前記第１の論理ボリュームと前記第２の論理ボリュームとの間で共通であり、
前記サブボリュームオーナプロセッサユニットは、前記第１及び第２の論理ボリューム内の対応するサブボリュームのそれぞれの間で共通である請求項１５記載のボリューム管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システム及び計算機システムのボリューム管理方法に関し、例えば、計算機システム内のストレージサブシステムの複数のプロセッサユニット間の負荷平衡技術に関する。
【背景技術】
【０００２】
特許文献１、２は、それぞれ複数のプロセッサユニットを含むストレージシステムを開示している。
【０００３】
これらのストレージシステムは、複数の論理的ストレージデバイス（以下、「論理的ストレージデバイス」を「論理ボリューム（logical volume）」又は「ＶＯＬ」とも呼ぶ。）を管理し、各ＶＯＬについて、単一のプロセッサユニットにＶＯＬのオーナシップを与える。ここで用いる「ＶＯＬオーナシップ」とは、ＶＯＬにアクセスする権利を意味する。
【０００４】
例えば、ストレージシステムがプロセッサユニット＃０、＃１を有し、ＶＯＬ＃０、＃１及び＃２を管理しており、ストレージシステムがプロセッサユニット＃０にＶＯＬ＃１のオーナシップを与えているとする。このストレージシステムでは、ストレージシステムが、ＶＯＬ＃１についてのＩ／Ｏ（入力／出力）コマンドを受け取ると、ＶＯＬ＃１のオーナシップを有するプロセッサユニット＃０がこのＩ／Ｏ（入力／出力）コマンドを処理する。
【０００５】
複数のＶＯＬのオーナシップを１つのプロセッサユニットに集中させると、このプロセッサユニットの負荷が増大する。特許文献１では、ストレージシステムが各プロセッサユニットの負荷を監視し、この監視の結果に基づいて、プロセッサユニット間でオーナシップを変更する。
特許文献２では、ストレージシステムがＶＯＬのオーナ権（これも「オーナシップ」と呼ぶことができる。）を変更することによって、負荷の平衡を図る。ＶＯＬのオーナ権の変更は、静的情報に基づいて行われ、ＶＯＬに関連するＩ／Ｏコマンドの数に応じて動的に変更されることはない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】米国特許番号第７９１２９９６号
【特許文献２】米国特許公開番号第２０１０／０３０６４６５号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
特許文献１、２に開示されているストレージシステムは、ＶＯＬ全体のオーナシップを単一のプロセッサユニットに割り当てる。したがって、ＶＯＬのためのＩ／Ｏ処理によってオーナプロセッサユニットに生じた負荷は、他のプロセッサユニットに分散させることができない。ストレージシステムができることは、負荷が比較的少ない他のプロセッサユニットにこのＶＯＬのオーナシップを変更することだけである。
【０００８】
しかしながら、単一又は少数のより大きいＶＯＬについて多数のＩ／Ｏ動作を実行するビッグデータ（Big Data）のアプリケーションでは、問題が生じる。ストレージシステムが複数のプロセッサユニットを有していても、このようなアプリケーションの性能は、単一のプロセッサユニットの性能によって制限される。
【０００９】
また、ストレージシステムのＶＯＬの総数が比較的少ない場合にもＶＯＬの負荷を分散できないことによる問題が生じる。この場合、各ＶＯＬによって生じる負荷が均等ではないために、全てのプロセッサユニットの合計の負荷がプロセッサユニット間で均等に分散されない可能性がある。また、ＶＯＬの総数が非常に少ないために、ＶＯＬのオーナシップを変更しても不均等な負荷分散を均等化することができない。負荷のこの不均等な負荷分散によって、ストレージシステムの性能が低下することがある。
【００１０】
本発明は、このような状況に鑑み、プロセッサユニットの負荷を均等に分散させ、ストレージシステムのリソースを効率的に利用する技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述の課題を解決するために、本発明は、複数のプロセッサユニットを備える計算機システム（ストレージシステム）を提供する。このストレージシステムでは、ＶＯＬが複数のより小さいＶＯＬ（このより小さいＶＯＬ（ＶＯＬの部分）を「サブボリューム（sub-volume）」又は「Ｓｕｂ−ＶＯＬ」と呼ぶ。）から構成されているとみなしてＶＯＬを処理することができる。複数のＳｕｂ−ＶＯＬへのＶＯＬの分割は、ＶＯＬの制御情報を複数のＳｕｂ−ＶＯＬに分割し、Ｓｕｂ−ＶＯＬにアクセスするためにＳｕｂ−ＶＯＬオーナプロセッサユニットテーブル及びＳｕｂ−ＶＯＬ制御情報テーブルを使用することによって実現される。各プロセッサユニットは、１つ以上のＶＯＬのオーナシップを有し、及び／又は１つ以上のＳｕｂ−ＶＯＬについての全てのＩ／Ｏ要求を処理する権利を有する（以下では、Ｓｕｂ−ＶＯＬのためのＩ／Ｏを処理するこの権利をＳｕｂ−ＶＯＬのオーナシップと呼ぶ）。
【００１２】
すなわち、本発明は、計算機に接続された計算機システムを提供し、計算機システムは、少なくとも１つ論理ボリュームを計算機に提供する複数のストレージデバイスと、それぞれが計算機によって発行されたコマンドを処理する複数のプロセッサユニットとを含むストレージサブシステムを備える。論理ボリュームの少なくとも１つは、複数のサブボリュームに分割される。論理ボリュームのためのＩ／Ｏの処理を担当する論理ボリュームのボリュームオーナプロセッサは、複数のプロセッサユニットのうちの１つのプロセッサユニットであり、複数のサブボリュームの少なくとも１つのサブボリュームオーナプロセッサは、複数のプロセッサユニットのうちの論理ボリュームのボリュームオーナプロセッサでない１つのプロセッサユニットである。
【発明の効果】
【００１３】
本発明によって、プロセッサユニットの負荷を均等に分散させ、ストレージシステムのリソースを効率的に利用することができる。
【図面の簡単な説明】
【００１４】
【図１】ストレージシステムの構造を示す図である。
【図２】実施形態１に基づくストレージシステムのキャッシュメモリパッケージに保存されるコンテンツの具体例を示す図である。
【図３】実施形態１に基づくＦＥ−ＰＫのメモリのコンテンツの具体例を示す図である。
【図４】実施形態１に基づくＭＰ−ＰＫのローカルメモリのコンテンツの具体例を示す図である。
【図５】実施形態１に基づくＶＯＬオーナＭＰ−ＰＫテーブルの具体例を示す図である。
【図６】実施形態１に基づくＳｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブルの具体例を示す図である。
【図７】実施形態１に基づくＶＯＬ制御情報テーブルの具体例を示す図である。
【図８】実施形態１に基づくＳｕｂ−ＶＯＬ制御情報テーブルの具体例を示す図である。
【図９】実施形態１に基づくＶＯＬ作成プログラムのフローチャートである。
【図１０】実施形態１に基づくローカルルータ処理プログラムのフローチャートである。
【図１１】実施形態１に基づく読出コマンド処理プログラムのフローチャートである。
【図１２】実施形態１に基づく書込コマンド処理プログラムのフローチャートである。
【図１３】実施形態１に基づく予約／解放コマンド処理プログラムのフローチャートである。
【図１４】実施形態２に基づくＦＥ−ＰＫのメモリのコンテンツの具体例を示す図である。
【図１５】実施形態２に基づくＭＰ−ＰＫのローカルメモリのコンテンツの具体例を示す図である。
【図１６】実施形態２に基づくＶＯＬペア情報テーブルの具体例を示す図である。
【図１７】実施形態２に基づくＳｕｂ−ＶＯＬペア情報テーブルの具体例を示す図である。
【図１８】実施形態２に基づくペア作成プログラムのフローチャートである。
【図１９】実施形態２に基づくＶＯＬオーナＭＰ−ＰＫのためのペア動作（ペア分離／ペア再同期）のフローチャートである。
【図２０】Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫのためのペア動作（ペア分離／ペア再同期／ペア作成）のフローチャートである。
【図２１】実施形態２に基づくＰＶＯＬ書込動作のフローチャートである。
【図２２】実施形態３に基づくＭＰ−ＰＫのローカルメモリのコンテンツの具体例を示す図である。
【図２３】実施形態３に基づくＳｕｂ−ＶＯＬペア情報テーブルの具体例を示す図である。
【図２４】実施形態３に基づくＬＢＡデータポインタテーブルの具体例を示す図である。
【図２５】実施形態３に基づくＰＶＯＬ／ＳＶＯＬ読出動作のフローチャートである。
【図２６】実施形態３に基づくＰＶＯＬ書込動作のフローチャートである。
【発明を実施するための形態】
【００１５】
以下、添付の図面を参照して本発明の実施形態について説明する。添付の図面では、同様の機能を有する要素に同様の参照符号を付している場合がある。
【００１６】
なお、以後の説明では「テーブル」形式によって本発明の各情報について説明するが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、リスト、ＤＢ、キュー等のデータ構造やそれ以外で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「ＤＢ」、「キュー」等について単に「情報」と呼ぶことがある。
【００１７】
また、各情報の内容を説明する際に、「識別情報」、「識別子」、「名」、「名前」、「ＩＤ」という表現を用いることが可能であり、これらについてはお互いに置換が可能である。
【００１８】
以下では「プログラム」を主語（動作主体）として本発明の実施形態における各処理について説明を行うが、プログラムは、プロセッサユニット又は複数のプロセッサユニットによって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、プロセッサユニット又はプロセッサユニットを主語とした説明としても良い。
【００１９】
（１）実施形態１
＜計算機システムの構成＞
図１は、本発明の第１の実施形態に基づく計算機システム（また、ストレージシステムとも呼ばれる。）のブロック図である。
【００２０】
計算機システムは、少なくとも１つのホスト計算機１００、ストレージサブシステム２００及び管理コンソール（管理計算機とも呼ばれる。）３００を備える。ストレージサブシステム２００は、ケーブル又はネットワークを介してデータの読出及び書込を行う１つ以上のホスト計算機１００に接続されている。ホスト計算機１００に接続するためのネットワークとしては、ストレージエリアネットワーク（Storage Area Network：ＳＡＮ）、ローカルエリアネットワーク（Local Area Network：ＬＡＮ）、インターネット、専用回線及び公衆回線等データ通信を実行できる如何なるネットワークを使用してもよい。図１に示すように、ホスト計算機１００をストレージサブシステム２００に接続するための具体例としてＳＡＮ５００を用いてもよい。ネットワーク又はケーブルでは、ホスト計算機１００とストレージサブシステム２００との間でデータを交換できる限り、例えば、ファイバチャネルプロトコル又はＴＣＰ／ＩＰプロトコル等の如何なるプロトコルを用いてもよい。
【００２１】
ストレージサブシステム２００は、大きくは、１又は複数のディスクユニット２５０と、コントローラとに分割される。
【００２２】
ディスクユニット２５０は、ディスクドライブ２５１を１つ以上のバックエンド（Back End：ＢＥ）ポート２３１に接続するための筐体である。ディスクユニット２５０は、複数のディスクスロットを備え、各ディスクスロットに１つ以上のディスクドライブ２５１が挿入される。したがって、ディスクユニット２５０は、複数のディスクドライブ２５１を有する。ディスクドライブ２５１は、物理的記憶装置（physical storage device：ＰＤＥＶ）である。ディスクドライブ２５１は、例えば、ハードディスクドライブ（Hard Disk Drive：ＨＤＤ）又はソリッドステートドライブ（Solid State Drive：ＳＳＤ）である。ＨＤＤは、例えば、シリアルアタッチドＳＣＳＩ（Serial Attached SCSI：ＳＡＳ）ドライブ及びシリアルＡＴＡ（Advanced Technology Attachment：ＳＡＴＡ）ドライブを含んでいてもよい。ディスクドライブ２５１は、これらに限定されず、他のタイプのディスクドライブ（例えば、ＦＣドライブ、デジタルバーサタイルディスク（Digital Versatile Disk：ＤＶＤ）ドライブ）を用いてもよい。また、ディスクドライブ２５１以外に他のタイプのＰＤＥＶを用いてもよい。
【００２３】
コントローラは、複数のフロントエンドパッケージ（front end package：以下、ＦＥ−ＰＫとする。）２１０、複数のマイクロプロセッサパッケージ（Microprocessor package：以下、ＭＰ−ＰＫとする。）２２０、複数のキャッシュメモリパッケージ（cache memory package：以下、ＣＭ−ＰＫとする。）２４０、複数のバックエンドパッケージ（back end package：以下、ＢＥ−ＰＫとする。）２３０、ネットワークインタフェース２６０及び内部ネットワーク２７０を備える。各パッケージは、内部ネットワーク（例えば、クロスバースイッチ）２７０を介して相互接続されている。更に、ＦＥ−ＰＫ２１０、ＭＰ−ＰＫ２２０、ＣＭ−ＰＫ２４０及びＢＥ−ＰＫ２３０の少なくとも１つは、１個のみであってもよい。
【００２４】
ＦＥ−ＰＫ２１０は、複数のフロントエンド（Front End：ＦＥ）ポート２１１及びローカルルータ２１２を備える。ＦＥポート２１１は、ホスト１００からＩ／Ｏコマンド（書込コマンド／読出コマンド）を受信する。メモリ２１３については、図３を用いて後に説明する。ローカルルータ２１２は、テーブル２１３１、２１３２を用いて、受信したＩ／ＯコマンドのＶＯＬ番号に対応するＶＯＬのオーナＭＰ−ＰＫ２２０を判定する。また、ローカルルータ２１２は、Ｉ／Ｏコマンドのターゲットアドレスに対応するサブボリューム（Ｓｕｂ−ＶＯＬ）のオーナＭＰ−ＰＫを判定する。そして、ローカルルータは、書込（write）コマンド、読出（read）コマンド、予約（reserve）コマンド、解放（release）コマンド等のコマンドのタイプに基づいて、ＶＯＬのオーナＭＰ−ＰＫ２２０又はＳｕｂ−ＶＯＬのオーナＭＰ−ＰＫ２２０の何れかにコマンドを転送する。更に、ローカルルータ２１２は、プロセッサから構成してもよく、ＭＰ−ＰＫ２２０の１つがローカルルータとして動作してもよいので、ローカルルータ２１２の代わりに所定のＭＰ−ＰＫ２２０が上述した処理を実行してもよい。更に、ローカルルータ２１２は、ＡＳＩＣハードウェアから構成してもよい。
【００２５】
ＭＰ−ＰＫ２２０は、１又は複数のマイクロプロセッサ（microprocessor：ＭＰ）２２１及びローカルメモリ２２２を備える。更に、ＭＰ２２１は、シングルコアＭＰから構成してもよく、マルチコアＭＰから構成してもよい。ＭＰ２２１は、計算機プログラムを実行することによって、様々な処理（例えば、ホスト１００からのＩ／Ｏコマンドの処理、ＶＯＬオーナ権の変更等）を実行する。更に、複数のＭＰが協働して作業を行ってもよく、この場合、ＭＰ−ＰＫの各ＭＰは、それぞれプログラムの一部を実行する。更に、ＭＰ−ＰＫの各ＭＰは、異なるＶＯＬ又はＳｕｂ−ＶＯＬについて個別にプログラムを実行してもよい。同様に、マルチコアＭＰの各コアが協働してもよく、この場合、ＭＰの各コアは、それぞれプログラムの一部を実行する。またＭＰの各コアが異なるＶＯＬ又はＳｕｂ−ＶＯＬについて個別にプログラムを実行してもよい。この実施形態では、ＶＯＬオーナ権は、各ＭＰ−ＰＫ２２０に割り当てられる。したがって、ＭＰ−ＰＫは、単にプロセッサユニットと呼ぶことができる。また、ＶＯＬオーナ権は、ＭＰ−ＰＫ２２０内の複数のマイクロプロセッサ（ＭＰ）に割り当てることもできる。更に、ＶＯＬオーナ権は、ＭＰの複数のマイクロプロセッサコアのそれぞれに割り当てることができる。この場合、ＭＰ−ＰＫによって実行されるプロセスは、そのオーナ権を有するＭＰによって行われる。ローカルメモリ２２２は、例えば、ＭＰ２２１によって実行される計算機プログラム、及び計算機プログラムによって使用される制御情報等の様々なデータを保存することができる。本発明の実施形態では、このローカルメモリ２２２は、Ｓｕｂ−ＶＯＬ制御情報テーブル２２２１を格納する。このようなテーブルの具体例を図８に示す。ＭＰ−ＰＫ２２０は、ネットワークインタフェース２６０を介して、管理計算機３００と通信する。ネットワークインタフェース２６０は、通信インタフェースデバイス、例えば、ＬＡＮコントローラである。
【００２６】
ＣＭ−ＰＫ２４０は、１又は複数のメモリを備える。例えば、ＣＭ−ＰＫ２４０は、共有メモリ２４１、プログラムメモリ２４２及びキャッシュメモリ２４３を備える。キャッシュメモリ２４３は、ホスト１００からＶＯＬに書き込まれるホストデータ及びホスト１００によってＶＯＬから読み出されるホストデータを一時的に保存する。共有メモリ２４１は、ＭＰ−ＰＫ間の通信のための制御情報を保存する。制御情報は、ストレージサブシステム２００の構成に関連する構成データを含む。プログラムメモリ２４２は、異なるＭＰ−ＰＫによって実行されるプログラムを保存する。これらのプログラムは、関連するＭＰ−ＰＫ２２０のローカルメモリ２２２にキャッシュできる。
【００２７】
ＢＥ−ＰＫ２３０は、１つ以上のＢＥポート２３１を備える。ディスクドライブ２５１は、ＢＥポート２３１に通信可能に接続されている。
【００２８】
このストレージサブシステム２００では、例えば、以下の処理フローを用いて、書込コマンドが処理される。すなわち、ＦＥ−ＰＫ２１０のＦＥポート２１１は、ホスト１００から書込みコマンドを受信する。ローカルルータ２１２は、この書込コマンドで指定されているポート番号、ＬＵＮ及び書込アドレスに対応するＳｕｂ−ＶＯＬ（以下、この段落では「ターゲットＳｕｂ−ＶＯＬ」と言う。）のオーナＭＰ−ＰＫ２２０を特定し、このオーナＭＰ−ＰＫ２２０にこの書込コマンドを転送する。この書込コマンドに応答して、オーナＭＰ−ＰＫ２２０内の何れかのＭＰ２２１がこのコマンドに付随するデータ（書込データ）をキャッシュメモリ２４３に書き込む。ＭＰ２２１は、ホスト１００に書込完了を報告する。オーナＭＰ−ＰＫ２２０内の何れかのＭＰ２２１は、キャッシュメモリ２４３から書込データを読み出し、ターゲットＶＯＬの基礎を構成するディスクドライブ２５１にこの書込データを書き込む。
【００２９】
このストレージサブシステム２００では、読出コマンドは、例えば、以下の処理フローを用いて処理される。すなわち、ＦＥ−ＰＫ２１０のＦＥポート２１１は、ホスト１００から読出コマンドを受信する。ローカルルータ２１２は、読出コマンド内のポート番号及びＬＵＮに対応するＳｕｂ−ＶＯＬ（以下、この段落では「ターゲットＳｕｂ−ＶＯＬ」と言う。）のオーナＭＰ−ＰＫ２２０を特定し、このオーナＭＰ−ＰＫ２２０にこの読出コマンドを転送する。オーナＭＰ−ＰＫ２２０内の何れかのＭＰ２２１は、この読出コマンドに応答して、このデータがキャッシュメモリ２４３に格納されているか否かを判定する。データがキャッシュメモリ２４３に格納されている場合、ＭＰは、キャッシュメモリ２４３からデータを読み出し、読み出したデータを、ＦＥ−ＰＫ２１１を介してホスト１００に送信する。キャッシュメモリ２４３にデータが格納されていない場合、ＭＰは、このコマンドに基づいて、ターゲットＳｕｂ−ＶＯＬの基礎を構成するディスクドライブ２５１からデータ（読出データ）を読み出し、この読出データをキャッシュメモリ２４３に書き込む。そして、このＭＰ２２１は、キャッシュメモリ２４３からこのデータを読み出し、読み出したデータを、ＦＥ−ＰＫ２１１を介してホスト１００に送信する。
【００３０】
＜キャッシュメモリパッケージ（ＣＭ−ＰＫ）の構造＞
図２は、キャッシュメモリパッケージ（ＣＭ−ＰＫ）２４０の例示的構造を示している。ＣＭ−ＰＫ２４０は、ＶＯＬオーナＭＰ−ＰＫテーブル２４１１、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２４１２及びＶＯＬ制御情報テーブル２４１３を格納する共有メモリ２４１と、ＶＯＬ作成プログラム２４２１、読出要求処理プログラム２４２２、書込要求処理プログラム２４２３、予約／解放要求処理プログラム２４２４、ＶＯＬオーナ変更プログラム２４２５及びＳｕｂ−ＶＯＬオーナ変更プログラム２４２６を格納するプログラムメモリ２４２とを備える。共有メモリ２４１内の各テーブルの具体例及びプログラムメモリ２４２内の各プログラムの具体例は、後述する図に示している。
【００３１】
＜ＦＥ−ＰＫのメモリの構造＞
図３は、ＦＥ−ＰＫ２１０のメモリ２１３の例示的構造を示している。メモリ２１３は、ＶＯＬオーナＭＰ−ＰＫテーブル２１３１、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２１３２及びＬＲ処理プログラム２１３３を格納している。
【００３２】
テーブル２１３１は、ストレージシステム内の各ＶＯＬのオーナＭＰ−ＰＫに関する情報を維持し、ＳＭ２４１内のＶＯＬオーナＭＰ−ＰＫテーブル２４１１と実質的に同じであり、詳しくは、図５を用いて後に説明する。テーブル２１３２は、ストレージシステムの各Ｓｕｂ−ＶＯＬのオーナＭＰ−ＰＫに関する情報を維持し、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２４１２と実質的に同じであり、詳しくは、図６を用いて後に説明する。これらのテーブル２１３１、２１３２は、ＬＲ２１２によって実行されるＬＲ処理プログラム２１３３によって使用される。ＬＲ処理プログラム２１３３は、受信コマンドのターゲットであるＶＯＬのオーナＭＰ−ＰＫ及び／又はＳｕｂ−ＶＯＬに関する情報を得る。そして、ＬＲは、オーナＭＰ−ＰＫにコマンドを送信する。このようなプログラムの具体例は、図１０を用いて後に説明する。
【００３３】
＜ＭＰ−ＰＫのローカルメモリの構造＞
図４は、ＭＰ−ＰＫのローカルメモリ（ＬＭ）２２２の例示的構造を示している。ＬＭ２２２は、Ｓｕｂ−ＶＯＬ制御情報テーブル２２２１を格納し、この具体例は、図８を用いて後に説明する。
【００３４】
ＭＰ−ＰＫによって共有メモリ２４１及びプログラムメモリ２４２のコンテンツに速やかにアクセスするために、ＬＭ２２２は、ＣＭ−ＰＫ２４０の共有メモリ２４１及びプログラムメモリ２４２のコンテンツの同期コピーを維持する。ＳＭ又はＰＭのコンテンツが更新されると、全てのＭＰ−ＰＫのＬＭ内の同期コピーも更新される。
【００３５】
＜ＶＯＬオーナＭＰ−ＰＫテーブルの構造＞
図５は、ＶＯＬオーナＭＰ−ＰＫテーブル２１３１の具体例を示している。このテーブルは、ストレージサブシステム２００内の全てのＶＯＬのＶＯＬ番号及びこれらに対応するオーナＭＰ−ＰＫ番号から構成されている。
【００３６】
ＶＯＬ番号は、ストレージサブシステム２００の各ＶＯＬを一意的に特定するために各ＶＯＬに割り当てられた番号を示している。オーナＭＰ−ＰＫ番号は、テーブル内の対応するＶＯＬ番号によって一意的に特定されているＶＯＬについて、読出／書込コマンド以外の処理コマンド（すなわち、完全なＶＯＬをターゲットとするコマンド）を担当するオーナＭＰ−ＰＫを一意的に特定するために使用される番号である。
【００３７】
＜Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブルの構造＞
図６は、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２１３２の具体例を示している。このテーブルは、ストレージサブシステム２００内の全てのＶＯＬのＶＯＬ番号、ＶＯＬ内の全てのＳｕｂ−ＶＯＬのＳｕｂ−ＶＯＬ番号、各Ｓｕｂ−ＶＯＬのアドレス範囲及びこれらに対応するオーナＭＰ−ＰＫ番号から構成される。
【００３８】
ＶＯＬ番号は、ストレージシステムの各ＶＯＬを一意的に特定するために各ＶＯＬに割り当てられた番号を示している。Ｓｕｂ−ＶＯＬ番号は、Ｓｕｂ−ＶＯＬの数に基づいて各Ｓｕｂ−ＶＯＬに割り当てられたＳｕｂ−ＶＯＬのシリアル番号である。ストレージシステム内でＳｕｂ−ＶＯＬを一意的に特定するために、ＶＯＬ番号及びＳｕｂ−ＶＯＬ番号は、組合せて使用される。
【００３９】
オーナＭＰ−ＰＫ番号は、テーブル内の対応するＶＯＬ番号及びＳｕｂ−ＶＯＬ番号によって一意的に特定されているＳｕｂ−ＶＯＬについて、Ｉ／Ｏ処理を担当するオーナＭＰ−ＰＫを一意的に特定するために使用される番号である。
【００４０】
但し、Ｉ／Ｏコマンドは、Ｓｕｂ−ＶＯＬではなくＶＯＬをターゲットとするため、テーブル内には、各Ｓｕｂ−ＶＯＬに関連付けられているＶＯＬのアドレス範囲も維持されている。
【００４１】
図６のテーブルに示すように、ターゲットＶＯＬ内のＳｕｂ−ＶＯＬのためのＳｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ターゲットＶＯＬのためのＶＯＬオーナＭＰ−ＰＫとは異なっていてもよい。
【００４２】
＜ＶＯＬ制御情報テーブルの構造＞
図７は、ＶＯＬ制御情報テーブル２４１３の具体例を示している。このテーブルは、ＶＯＬをターゲットとする異なるコマンドを処理する必要があるＶＯＬに関連する様々な情報から構成されている。テーブル２４１３は、ＣＭ−ＰＫのＳＭ内にある。テーブル２４１３は、速やかなアクセスのために、テーブル２４１１、２４１２と同様に、ＭＰ−ＰＫのＬＭにコピーされる。
【００４３】
この情報は、ＶＯＬ番号、ＶＯＬ内のＳｕｂ−ＶＯＬの総数、ＶＯＬ全体のサイズ、ＶＯＬの状態（例えば、ＶＯＬが「予約されている（RESERVED）」か否か）、ＶＯＬを予約しているホスト計算機のホストＩＤ等を含んでいてもよい。ホストＩＤは、各ホストコンピュータに割り当てられ、同じＳＡＮに接続されている複数のホスト内で各ホストを一意的に特定するための固有のＩＤである。このＩＤは、ＳＡＮ内でローカルに一意的であってもよく、又はグローバルに一意的なＩＤであってもよい。
【００４４】
このテーブルは、例えば、ＶＯＬに対する何らかのＩ／Ｏ動作を実行する前に、ＶＯＬの状態（ホスト計算機のために「予約されている」か否か）を確認するために使用される。
【００４５】
ここで「予約（RESERVED）」とは、ホスト計算機によってターゲットＶＯＬが使用中であり、他のホスト計算機からのターゲットＶＯＬへのアクセスがロックされていることを意味する。一方、「解放（RELEASED）」とは、ターゲットＶＯＬへのアクセスのロックが解除され、他のホスト計算機がターゲットＶＯＬにアクセスできることを意味する。
【００４６】
＜Ｓｕｂ−ＶＯＬ制御情報テーブルの構造＞
図８は、Ｓｕｂ−ＶＯＬ制御情報テーブル２２２１の具体例を示している。このテーブルは、Ｓｕｂ−ＶＯＬ  ＩＤ、ＶＯＬ番号、Ｓｕｂ−ＶＯＬ番号、Ｓｕｂ−ＶＯＬのサイズ、各Ｓｕｂ−ＶＯＬの状態（例えば、Ｓｕｂ−ＶＯＬが「予約されている」か否か）、及びＳｕｂ−ＶＯＬを予約しているホスト計算機のホストＩＤから構成されている。
【００４７】
Ｓｕｂ−ＶＯＬ  ＩＤは、ストレージシステム内でＳｕｂ−ＶＯＬを一意的に特定するＩＤである。この実施形態では、このＩＤは、ＶＯＬ番号とＳｕｂ−ＶＯＬのシリアル番号の組合せである。ＶＯＬ番号、Ｓｕｂ−ＶＯＬ番号及びホストＩＤの定義は、テーブル２１３１、２１３２、２４１３のそれぞれにおいて同様である。このテーブルは、オーナＭＰ−ＰＫが、テーブルが存在するＬＭのＭＰ−ＰＫであるＳｕｂ−ＶＯＬに関する情報のみから構成されている。
【００４８】
ＶＯＬオーナＭＰ−ＰＫは、Ｓｕｂ−ＶＯＬ制御情報テーブル２２２１内の各Ｓｕｂ−ＶＯＬの状態コラムに「予約（RESERVED）」又は「解放（RELEASED）」を書き込む。「予約」及び「解放」の意味は、ＶＯＬ制御情報テーブル２４１３について説明した通りである。
【００４９】
＜ＶＯＬ作成処理＞
図９は、本発明の実施形態に基づくＶＯＬ作成プログラム２４２１によるＶＯＬ作成処理のフローチャートである。このＶＯＬ作成プログラムは、ストレージサブシステム２００内で新しいＶＯＬ（以下、「ターゲットＶＯＬ」と言う。）を作成するプログラムである。このプログラムは、ＭＰ−ＰＫ２２０によって実行され、このＭＰ−ＰＫ２２０は、ＶＯＬのオーナＭＰ−ＰＫではなくてもよい。
【００５０】
図９に示すように、ステップＳ１００において、ＭＰ−ＰＫは、まず、管理計算機３００から、ＬＡＮ４００及びネットワークＩ／Ｆ２６０を介して、ＶＯＬ作成コマンドを受信する。このＶＯＬ作成コマンドは、ターゲットＶＯＬに関する制御情報、例えば、ＶＯＬのサイズ、ＶＯＬ  ＩＤ、ＲＡＩＤグループ等を含む。
【００５１】
ステップＳ１０１において、ＭＰ−ＰＫ２２０は、要求されたＶＯＬサイズがストレージサブシステム２００において使用可能な空き領域より大きいかを判定する。ストレージシステムにおいて、要求されたサイズが使用可能でない場合、プロセスは、Ｓ１０２に移行し、ＭＰ−ＰＫは、管理計算機にエラーを返し、プログラムが終了する（Ｓ１０２）。一方、ストレージサブシステム２００が新しいＶＯＬを収容する十分な空き領域を有している場合、ＭＰ−ＰＫは、ステップＳ１０３〜Ｓ１１４を実行してターゲットＶＯＬを作成する。
【００５２】
ステップＳ１０３において、ＭＰ−ＰＫは、ターゲットＶＯＬを作成するために必要な１つ以上のディスクドライブ２５１内の領域を予約する。
【００５３】
ステップＳ１０４において、ＭＰ−ＰＫは、数式を用いて、ターゲットＶＯＬのために作成する必要があるＳｕｂ−ＶＯＬの数を算出する。ステップＳ１０４で使用される数式は、例えば、ターゲットＶＯＬのサイズ（数）を所定のＳｕｂ−ＶＯＬサイズによって除算する式であってもよい。この除算の商は、整数にならない場合、整数に切り上げられ、これによって、Ｓｕｂ−ＶＯＬのサイズ（数）が求められる。例えば、ターゲットＶＯＬサイズが１６ＧＢであり、所定のＳｕｂ−ＶＯＬサイズが５ＧＢである場合、１６ＧＢを５ＧＢで除算した商は、３．２であり、この商は、整数４に切り上げられる。したがって、ターゲットＶＯＬのために、それぞれ５ＧＢの４つのＳｕｂ−ＶＯＬを作成する必要がある。これに代えて、各ＭＰ−ＰＫが作成されたＳｕｂ−ＶＯＬの１つをそれぞれ担当するように、ＭＰ−ＰＫの数に基づいてＳｕｂ−ＶＯＬの数を決定してもよい。例えば、ターゲットＶＯＬサイズが１６ＧＢであり、利用可能なＭＰ−ＰＫの数が５である場合、５つのＳｕｂ−ＶＯＬを作成する。そして、ターゲットＶＯＬサイズ１６ＧＢを５で除算し、３．２ＧＢを求めることによって各Ｓｕｂ−ＶＯＬのサイズを決定する。すなわち、５つのＳｕｂ−ＶＯＬのそれぞれを３．２ＧＢとする。
【００５４】
次に、ステップＳ１０５において、ＭＰ−ＰＫは、数式を用いて、各Ｓｕｂ−ＶＯＬに対応するターゲットＶＯＬのアドレス範囲を算出する。この数式は、例えば、サイズが固定された連続するＳｕｂ−ＶＯＬについてアドレス０から始まるアドレス範囲であってもよい。例えば、ターゲットＶＯＬサイズが１６ＧＢであり、所定のＳｕｂ−ＶＯＬサイズが５ＧＢである場合、４個のＳｕｂ−ＶＯＬのためのアドレス範囲は、それぞれ、０Ｇ〜５Ｇ−１、５Ｇ〜１０Ｇ−１、１０Ｇ〜１５Ｇ−１、１５Ｇ〜２０Ｇ−１になる。
【００５５】
ステップＳ１０６では、ＭＰ−ＰＫが、所定の規則に基づいて、ターゲットＶＯＬのためのオーナＭＰ−ＰＫを決定する。例えば、ＭＰ−ＰＫは、ＶＯＬオーナＭＰ−ＰＫテーブルを参照して、最後に割り当てられたオーナＭＰ−ＰＫ＃（番号）を判定し、ラウンドロビン法を用いて、ターゲットＶＯＬのＶＯＬオーナＭＰ−ＰＫ＃を判定する。オーナＭＰ−ＰＫを判定する技術の他の具体例として、各ＭＰ−ＰＫについてＭＰ−ＰＫ稼働率を算出し、稼働率が最も低いＭＰ−ＰＫを選択してもよい。ＭＰ−ＰＫ稼働率は、ＭＰ−ＰＫの各ＭＰのプロセッサ稼働率の平均又はＭＰ−ＰＫ毎の全てのＭＰのプロセッサ稼働率の合計である。ＭＰのプロセッサ稼働率の算出については周知であり、ここではこれ以上説明しない。
【００５６】
次に、ステップＳ１０７において、ＭＰ−ＰＫは、ターゲットＶＯＬの各Ｓｕｂ−ＶＯＬのＳｕｂ−ＶＯＬオーナＭＰ−ＰＫを判定する。ここでは、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブルを参照することによって、Ｓ１０６で説明した規則を使用する。
【００５７】
ステップＳ１０８において、ＭＰ−ＰＫは、ターゲットＶＯＬ及びターゲットＶＯＬのオーナＭＰ−ＰＫの情報によって、共有メモリ２４１内のＶＯＬオーナＭＰ−ＰＫテーブル２４１１及びＦＥ−ＰＫ２１０のメモリ２１３内のＶＯＬオーナＭＰ−ＰＫテーブル２１３１を更新する。
【００５８】
ステップＳ１０９において、ＭＰ−ＰＫは、ターゲットＶＯＬのＳｕｂ−ＶＯＬ及びＳｕｂ−ＶＯＬオーナＭＰ−ＰＫに関する情報によって、各ＭＰ−ＰＫ２２０のローカルメモリ２２２内のＳｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２４１２及びＦＥ−ＰＫ２１０のメモリ２１３内のＳｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２１３２を更新する。
【００５９】
ステップＳ１１０において、ＭＰ−ＰＫは、ターゲットＶＯＬのための制御情報を生成し、ステップＳ１１１において、ＭＰ−ＰＫは、生成した情報及びＶＯＬ作成コマンドと共に受信した情報によって、ＳＭ２４１内のＶＯＬ制御情報テーブル２４１３を更新する。
【００６０】
ステップＳ１１２において、ＭＰ−ＰＫは、ターゲットＶＯＬの各Ｓｕｂ−ＶＯＬのための制御情報を生成し、ステップＳ１１３において、ＭＰ−ＰＫは、この情報によって、各ＭＰ−ＰＫ２２０のＬＭ２２２内のＳｕｂ−ＶＯＬ制御情報テーブル２２２１を更新する。
【００６１】
一旦、テーブルが更新されると、ＭＰ−ＰＫは、ＶＯＬ（ターゲットＶＯＬ）が作成されたことを示す肯定応答を返し（Ｓ１１４）、プログラムが終了する。
【００６２】
＜ローカルルータによる分散処理＞
図１０は、ホスト計算機１００からコマンドを受信したローカルルータ（ＬＲ）２１２によって実行されるコマンドの分散処理（distribution processing）を示すフローチャートである。
【００６３】
まず、ステップＳ２０１において、ＬＲ２１２がホスト計算機１００からコマンドを受信する。
そして、ステップ２０２において、ＬＲ２１２がコマンドを解析し、コマンドがＶＯＬ読出／書込関連コマンドであるか、ＶＯＬ全体に関連する他のタイプコマンド、例えば、ＶＯＬ状態変更コマンドであるかを判定する。コマンドがＶＯＬ読出／書込関連コマンドである場合、プロセスは、ステップＳ２０３に進む。コマンドが他のタイプのコマンドの１つである場合、プロセスは、ステップＳ２０６に進む。
【００６４】
ステップＳ２０３では、ＬＲ２１２がコマンドからコマンドのターゲットアドレス及びＶＯＬ＃を抽出する。そして、ステップＳ２０４において、ＬＲ２１２は、メモリ２１３内のＳｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２１３２を参照し、ターゲットアドレスのＳｕｂ−ＶＯＬ＃（ターゲットＳｕｂ−ＶＯＬ）及びこのターゲットＳｕｂ−ＶＯＬのオーナＭＰ−ＰＫを判定する。
【００６５】
次のステップＳ２０５において、ＬＲ２１２は、処理のためにこのオーナＭＰ−ＰＫにコマンドを送信する。
【００６６】
ステップＳ２０２において、コマンドが読出／書込関連コマンドでなかった場合（他のタイプのコマンドであった場合）、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫではなく、ＶＯＬオーナＭＰ−ＰＫがコマンドを処理する必要がある。したがって、ＬＲ２１２は、ターゲットＶＯＬのＶＯＬオーナＭＰ−ＰＫにコマンドを送信するステップを実行する。
【００６７】
ステップＳ２０６では、ＬＲ２１２がコマンドからＶＯＬ＃を抽出し、ステップＳ２０７では、ＬＲ２１２がメモリ２１３内のＶＯＬオーナＭＰ−ＰＫテーブル２１３１を参照して、ターゲットＶＯＬのオーナＭＰ−ＰＫを判定する。
【００６８】
最後に、ステップＳ２０８において、ＬＲ２１２は、処理されるターゲットＶＯＬのオーナＭＰ−ＰＫにコマンドを送信する。
【００６９】
＜Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫによる読出コマンド／要求処理＞
図１１は、読出コマンドを受信したＳｕｂ−ＶＯＬオーナＭＰ−ＰＫによって実行される読出要求処理プログラム２４２２に基づく読出処理のフローチャートである。
【００７０】
ステップＳ３００では、ステップＳ２０５においてＬＲ２１２が送信した読出コマンドをその宛先であるＳｕｂ−ＶＯＬオーナＭＰ−ＰＫが受信する。
【００７１】
ステップＳ３０１では、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫがＳｕｂ−ＶＯＬ制御情報テーブル２２２１を参照し、予約競合（reservation conflict）があるか否かをチェックする。Ｓｕｂ−ＶＯＬの状態が「予約（RESERVED）」であり、ホスト計算機１００が読出コマンドを送信した計算機と異なる（すなわち、ターゲットＳｕｂ−ＶＯＬが他のホスト計算機１００によって使用中である）場合、ＭＰ−ＰＫは、ステップＳ３０２において、ホスト計算機１００に「予約競合（RESERVATION CONFLICT）」を返し、プログラムが終了する。
【００７２】
一方、Ｓｕｂ−ＶＯＬが「解放（RELEASED）」又は読出コマンドを送信したホスト計算機１００のために「予約（RESERVED）」されている場合、ＭＰ−ＰＫは、プロセスをステップＳ３０３に進める。
【００７３】
ステップＳ３０３では、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫがキャッシュ又はディスクから要求されたデータを読み出し、読出コマンドを送信してきたホスト計算機にデータを返す。
【００７４】
データ転送が完了すると、ステップＳ３０４において、ＭＰ−ＰＫは、読出コマンドを送信してきたホスト計算機に「グッド（GOOD）」を返し、プログラムが終了する。
【００７５】
＜Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫによる書込コマンドの処理＞
図１２は、書込コマンドを受信したＳｕｂ−ＶＯＬオーナＭＰ−ＰＫによって実行される書込要求処理プログラム２４２３に基づく書込コマンドの処理のフローチャートである。
【００７６】
ステップＳ４００では、ステップＳ２０５においてＬＲ２１２が送信した書込コマンドをその宛先であるＳｕｂ−ＶＯＬオーナＭＰ−ＰＫが受信する。
【００７７】
ステップＳ４０１では、ステップＳ３０１と同様に、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫがＳｕｂ−ＶＯＬ制御情報テーブル２２２１を参照し、予約競合があるか否かをチェックする。Ｓｕｂ−ＶＯＬが「解放（RELEASED）」又は読出コマンドを送信したホスト計算機１００のために「予約（RESERVED）」されている場合、ＭＰ−ＰＫは、プロセスをステップＳ４０３に進める。
【００７８】
ＭＰ−ＰＫは、ステップＳ４０３において、データ受信バッファが、ホストコンピュータ１００によって送信されるデータをバッファリングするために十分な容量を有しているかをチェックする。データ受信バッファが十分な容量を有していない場合、ＭＰ−ＰＫは、書込コマンドを送信してきたホスト計算機に「エラー（ERROR）」を返し、プログラムが終了する。
【００７９】
一方、ＭＰ−ＰＫは、ステップＳ４０３において、データ受信バッファが、ホスト計算機１００によって送信されるデータを受信するために十分な容量を有していると判定した場合、ステップＳ４０５において、書込コマンドを送信してきたホスト計算機に「転送準備完了（TRANSFER READY）」を返し、ホストによるデータ送信を待機する。ホスト計算機１００は、ストレージサブシステム２００から「転送準備完了」を受信すると、書込コマンドに関連するデータを送信する。
【００８０】
ストレージサブシステム２００のオーナＭＰ−ＰＫは、ステップＳ４０６において、このデータを受信してデータ受信バッファにバッファリングし、ステップＳ４０７において、ホスト計算機１００に「グッド（GOOD）」を返し、プログラムが終了する。
【００８１】
データ受信バッファからディスクドライブ２５１へのこのデータのデステージング（de-staging）は、別のプログラムによって実行される。このデータデステージング処理は周知であり、ここではこれ以上説明しない。
【００８２】
＜ＶＯＬオーナＭＰ−ＰＫによる予約及び解放コマンドの処理＞
図１３は、ＶＯＬについての「予約」又は「解放」コマンドを受信したＶＯＬオーナＭＰ−ＰＫによって実行される予約／解放要求プログラム２４２４に基づく予約及び解放コマンドの処理のフローチャートである。これらのコマンドは、ＶＯＬ全体の処理に関連し、（読出／書込コマンドの場合のように）ＶＯＬの一部の領域に限定されることはないので、ＶＯＬオーナＭＰ−ＰＫによって処理される。
【００８３】
ステップＳ５００において、ＶＯＬオーナＭＰ−ＰＫがホスト計算機１００の１つから「予約」又は「解放」コマンドを受信する。このコマンドは、ステップＳ２０８において、ＬＲ処理プログラム２１３３に基づき、ＬＲ２１２によってＶＯＬオーナＭＰ−ＰＫに送信される。
【００８４】
ＶＯＬオーナＭＰ−ＰＫは、コマンドを受信した後、ステップＳ５０１において、ＶＯＬ制御情報テーブル２４１３を参照し、ターゲットＶＯＬが既に予約されているか否か（ＶＯＬが別のホスト計算機による使用のためにロックされているか、又はＶＯＬが如何なるホスト計算機による使用のためにもロックされていないか）をチェックする。ＶＯＬがまだ予約されていない場合、ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ５０４に進める。
【００８５】
一方、ステップＳ５０２において、ＶＯＬが既に予約されている場合、ＭＰ−ＰＫは、コマンドを発行したホスト計算機１００と、ＶＯＬを現在予約しているホスト計算機１００とが同じであるかをチェックする。ホスト計算機１００が同じでない場合、ＶＯＬオーナＭＰ−ＰＫは、コマンドを送信してきたホスト計算機に「予約競合」を返し、プログラムを終了する。
【００８６】
ステップＳ５０４において、ＶＯＬオーナＭＰ−ＰＫは、ＳＭ２４１内のＶＯＬ制御情報テーブル２４１３を更新することによって、ターゲットＶＯＬの状態を「予約」又は「解放」の何れかに更新する。
【００８７】
このとき、読出／書込関連コマンドを受信したＳｕｂ−ＶＯＬオーナＭＰ−ＰＫがＶＯＬの状態と同様にＳｕｂ−ＶＯＬの状態を確実に判定できるようにするため、ターゲットＶＯＬの各Ｓｕｂ−ＶＯＬの状態も同様に更新する必要がある。このため、ＶＯＬオーナＭＰ−ＰＫは、ステップＳ５０５において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２４１２を参照し、ターゲットＶＯＬの全てのＳｕｂ−ＶＯＬ及びそれぞれのオーナＭＰ−ＰＫに関する情報を取得する。
【００８８】
次に、ステップＳ５０６において、ＶＯＬオーナＭＰ−ＰＫは、受信コマンドに基づいて、ターゲットＶＯＬのＳｕｂ−ＶＯＬを担当する各Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫのＬＭ２２２内のＳｕｂ−ＶＯＬ制御情報テーブル２２２１を更新することによって、Ｓｕｂ−ＶＯＬ状態を「予約」又は「解放」の何れかに更新する。
【００８９】
ステップＳ５０７において、ＶＯＬオーナＭＰ−ＰＫは、コマンドを送信してきたホスト計算機に「グッド（GOOD）」を返し、プログラムを終了する。
【００９０】
＜ＶＯＬオーナ変更プログラム及びＳｕｂ−ＶＯＬオーナ変更プログラムの処理＞
ＶＯＬオーナ変更プログラム２４２５は、米国特許７９１２９９６Ｂ２に開示されているように、ＶＯＬのオーナＭＰ−ＰＫを変更し、及びこれに応じてＶＯＬオーナＭＰ−ＰＫテーブル２１３１を更新するプログラムである。Ｓｕｂ−ＶＯＬは、本質的には、より小さいＶＯＬであるので、Ｓｕｂ−ＶＯＬオーナ変更プログラム２４２６は、ＶＯＬオーナＭＰ−ＰＫテーブル２１３１ではなく、ＬＭ２２２及びメモリ２１３内のＳｕｂ−ＶＯＬオーナＭＰＰＫテーブル２１３２を更新する点を除いて、ＶＯＬオーナ変更プログラム２４２５と同様である。
【００９１】
＜Ｓｕｂ−ＶＯＬサイズ／数変更＞
また、何れかのＶＯＬによって生じる負荷は、動的に（時間の経過に伴って）変化することがあるので、新たな演算結果に基づいて、ＶＯＬのＳｕｂ−ＶＯＬのサイズ及び数を変更してもよい。ＭＰ−ＰＫの１つは、各ＭＰ−ＰＫの稼働率に関する情報を取得し、又は各ＭＰ−ＰＫへのＩ／Ｏを監視することによって、各ＭＰ−ＰＫの稼働率を判定し、各ＭＰ−ＰＫの稼働率が同等又は略々同等となるように、論理ボリュームのサブボリュームのオーナシップをＭＰ−ＰＫに分担／分散させる。例えば、稼働率が高いＭＰ−ＰＫの幾つかのＶＯＬのオーナシップを、稼働率が比較的低い他の１又は複数のＭＰ−ＰＫに移転させて、ＭＰ−ＰＫの稼働率を均一に分散させることができる。同様に、各ＶＯＬについてのＩ／Ｏを計数し、各ＶＯＬによって生じるＭＰ−ＰＫ上の負荷を判定し、ＶＯＬのオーナシップを入れ替えることによって、ＶＯＬのオーナシップを有することに起因するＭＰ−ＰＫ上の全負荷が他のＭＰ−ＰＫの負荷と同等又は略々同等となるようにしてもよい。ストレージシステムは、この変更を周期的に実行するか、１つ以上のプロセッサユニットの負荷が閾値を超えたときにこの変更を実行するかを自律的に決定することができる。また、ストレージ管理者が同様の演算に基づいて及び／又は自らの入力パラメータによって、この変更を実行することを決定してもよい。このアーキテクチャによって、各プロセッサユニットに負荷を同等に分散させることができる。
【００９２】
実施形態１では、ＶＯＬを複数のより小さいＳｕｂ−ＶＯＬに分割し、これらのオーナシップを複数のＭＰ−ＰＫに分散させることによって、ＭＰ−ＰＫ上で単一のＶＯＬによって生成される負荷を複数のＭＰ−ＰＫに分散でき、複数のＭＰ−ＰＫの間で負荷を均一にすることができる。これによって、マイクロプロセッサをより効率的に使用できるようになり、したがって、ストレージシステムの性能が向上する。この効果は、ＶＯＬのサイズが非常に大きい場合に特に顕著となる。この発明は、ＶＯＬサイズが大きく、単一のプロセッサに完全なＶＯＬのオーナシップを与えるより、ＶＯＬのオーナシップを複数のＭＰ−ＰＫに分散させた方がより効率的になるビッグデータアプリケーションにおいて特に有用である。
【００９３】
（２）実施形態２
この実施形態は、Ｓｕｂ−ＶＯＬを使用したＶＯＬコピー技術の実現に関する。この技術では、同じストレージサブシステム２００内にＶＯＬのフルコピー（full copy）を作成する。この実施形態では、非同期フルコピー技術を説明する。但し、同様の原理によって、Ｓｕｂ−ＶＯＬを用いて同期フルコピー技術も実現することができる。この技術では、プライマリＶＯＬ及びセカンダリＶＯＬ（コピーＶＯＬ）のオーナは、同じにする。また、プライマリＳｕｂ−ＶＯＬ及び対応するセカンダリＳｕｂ−ＶＯＬ（コピーＳｕｂ−ＶＯＬ）のオーナも同じにする（例えば、プライマリＳｕｂ−ＶＯＬ＃１及び対応するセカンダリＳｕｂ−ＶＯＬ＃１のオーナは、単一のＭＰ−ＰＫであり、プライマリＳｕｂ−ＶＯＬ＃２及び対応するセカンダリＳｕｂ−ＶＯＬ＃２のオーナも単一のＭＰ−ＰＫであり、このＭＰ−ＰＫは、プライマリ及びセカンダリのＳｕｂ−ＶＯＬペアのためのオーナＭＰ−ＰＫと同じであっても異なっていてもよい）。
この実施形態の計算機システムの構成としては、図１に示した計算機システムと同様の構成を適用できる。
【００９４】
＜キャッシュメモリパッケージの構造＞
図１４は、この実施形態におけるキャッシュメモリパッケージ（ＣＭ−ＰＫ）２４０の例示的構造を示している。このセクションでは、図２のＣＭ−ＰＫ２４０との違いを説明する。
【００９５】
共有メモリ２４１は、更に、図１６を用いて後に説明するＶＯＬペア情報テーブル２４１４Ａを格納している。
【００９６】
ＶＯＬオーナＭＰ−ＰＫテーブル２４１１Ａ、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２４１２Ａ及びＶＯＬ制御情報テーブル２４１３Ａは、それぞれテーブル２４１１、テーブル２４１２及びテーブル２４１３に対応している。
【００９７】
また、図１４は、プログラムメモリのコンテンツの具体例も示している。このプログラムメモリは、ＶＯＬ作成プログラム２４２１（図９参照）に対応するＶＯＬ作成プログラム２４２１Ａ、読出要求処理プログラム２４２２Ａ、ＰＶＯＬ書込要求処理プログラム２４２３Ａ、ＶＯＬオーナ変更プログラム２４２５Ａ、Ｓｕｂ−ＶＯＬオーナ変更プログラム２４２６Ａ、ペア作成プログラム（pair create program）２４２７Ａ、ＶＯＬオーナＭＰ−ＰＫのためのペア動作プログラム（pair operation program）２４２８Ａ及びＳｕｂ−ＶＯＬオーナＭＰ−ＰＫのためのペア動作プログラム２４２９Ａから構成されている。
【００９８】
読出要求処理プログラム２４２２Ａは、読出動作関連コマンド／要求を処理するために使用される。ＰＶＯＬ及びＳＶＯＬは、ＶＯＬと同じプロパティを有するので、このプログラムは、ＰＶＯＬ読出動作及びＳＶＯＬ読出動作の両方に共通である。このプログラムは、実施形態１の図１１に示すシンプレックスＶＯＬ（Simplex VOL）の読出要求処理プログラムと同じである。「シンプレックス」状態とは、ペアボリューム（ＰＶＯＬ及びＳＶＯＬ）の依存関係がない状態を意味する。
【００９９】
ＰＶＯＬ書込要求処理プログラム２４２３Ａは、書込動作関連コマンド／要求を処理するために使用される。このプログラムのフローチャートの具体例は、図２１を用いて後に説明する。
【０１００】
ＶＯＬオーナ変更プログラム２４２５Ａは、ＶＯＬオーナ変更プログラム２４２５に対応しており、Ｓｕｂ−ＶＯＬオーナ変更プログラム２４２６Ａは、Ｓｕｂ−ＶＯＬオーナ変更プログラム２４２６に対応している。
【０１０１】
ペア作成プログラム２４２７Ａは、コピーペアを生成するために使用される。これについては、図１８のフローチャートを用いて後に説明する。
【０１０２】
ペア動作プログラム２４２８Ａは、シャドウイメージ（Shadow Image）コピーペア関連動作、例えば、ペア分離／ペア再同期等を実行する。このプログラムは、基本的にＰＶＯＬ／ＳＶＯＬペアのＶＯＬオーナＭＰ−ＰＫによって実行され、Ｓｕｂ−ＰＶＯＬ（ＰＶＯＬのＳｕｂ−ＶＯＬ）／Ｓｕｂ−ＳＶＯＬ（ＳＶＯＬのＳｕｂ−ＶＯＬ）ペアのそれぞれのオーナＭＰ−ＰＫによって実行されるＳｕｂ−ＶＯＬオーナＭＰ−ＰＫのためのペア動作プログラム２４２９Ａによって補われる。プログラム２４２８Ａ、２４２９Ａのフローチャートは、それぞれ図１９及び図２０に示している。
【０１０３】
＜ＦＥ−ＰＫ２１０のメモリ２１３の構造＞
この実施形態のＦＥ−ＰＫ２１０のメモリ２１３の構造は、実施形態１と同じである。また、テーブル２１３１、２１３２は、この実施形態でも同じ目的のために使用される。
【０１０４】
＜ＬＲ処理プログラム２１３３＞
また、実施形態１のＬＲ処理プログラム２１３３は、この実施形態でも同じ目的のために使用され、更に、このプログラムは、ＶＯＬ（ＰＶＯＬ／ＳＶＯＬペア）のオーナＭＰ−ＰＫにコピーペア関連コマンドを送信する。図１０のＬＲ処理プログラムのフローチャートに示すように、ステップＳ２０２において、コマンドがＶＯＬ読出／書込コマンド以外のコマンド（コピーペア関連コマンドも含まれる。）であると判定された場合、このコマンドは、ステップＳ２０６〜Ｓ２０８によってＶＯＬ（ＰＶＯＬ／ＳＶＯＬ）オーナＭＰ−ＰＫに送信される。
【０１０５】
＜ＭＰ−ＰＫのローカルメモリの構造＞
図１５は、ローカルメモリ（ＬＭ）２２２の構造の具体例を示す図である。ＬＭ２２２は、図８の２２２１に対応するＳｕｂ−ＶＯＬ制御情報テーブル２２２１Ａと、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａとから構成されている。
Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａについては、図１７を用いて後に説明する。
【０１０６】
＜ＶＯＬペア情報テーブルの構造＞
図１６は、ＶＯＬペア情報テーブル２４１４Ａの具体例を示す図である。ＶＯＬペア情報テーブル２４１４Ａは、コピーＶＯＬペアに関する情報を維持する。このテーブルは、コピーＶＯＬペアＩＤ、ＰＶＯＬ番号、ＳＶＯＬ番号及びペア状態を含む。コピーＶＯＬペアＩＤは、ストレージサブシステム２００内の各コピーＶＯＬペアに付された一意的な番号である。ペア状態は、コピーＶＯＬペアの状態を示している。例えば、フィールドの値が「ＰＡＩＲ」である場合、これは、対応するＶＯＬペアがペア状態であることを意味する。「ＣＯＰＹ（ＰＤ）」は、対応するＶＯＬペアがＣＯＰＹ保留状態（COPY pending state）であることを意味する。ＣＯＰＹ保留状態は、ＰＶＯＬからＳＶＯＬへのコンテンツの最初のコピー動作が進行中であることを意味する。「ＰＳＵＳ」は、対応するＶＯＬペアが分離状態（split state）であることを意味する。すなわち、Ｓｕｂ−ＳＶＯＬは、ペア分離動作の実行時点のＳｕｂ−ＰＶＯＬのコンテンツを維持し、ペア分離動作後にＳｕｂ−ＰＶＯＬのコンテンツが変更されても、Ｓｕｂ−ＳＶＯＬのコンテンツは、変更されない。
【０１０７】
＜Ｓｕｂ−ＶＯＬペア情報テーブルの構造＞
図１７は、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａの具体例を示す図である。このテーブルは、コピーＳｕｂ−ＶＯＬペアに関する情報を維持する。Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａは、そのフィールドとして、Ｓｕｂ−ＰＶＯＬ番号、Ｓｕｂ−ＳＶＯＬ番号、ペア状態及び差分ビットマップ（Differential Bitmap）を含む。Ｓｕｂ−ＰＶＯＬ及び対応するＳｕｂ−ＳＶＯＬの処理は、同じＳｕｂ−ＶＯＬオーナＭＰ−ＰＫによって担当される。
【０１０８】
ペア状態フィールドは、コピーＳｕｂ−ＶＯＬペアの状態を示す。ペア状態は、上述したように、その値としてＰＡＩＲ状態、ＣＯＰＹ（ＰＤ）状態、ＰＳＵＳ状態等を含む。
【０１０９】
差分ビットマップフィールドは、Ｓｕｂ−ＰＶＯＬ及びＳｕｂ−ＳＶＯＬの論理ブロックアドレス間の差分を示すビットマップを維持する。例えば、時刻Ｔ１において、Ｓｕｂ−ＰＶＯＬ及びＳｕｂ−ＳＶＯＬが完全に同じである場合、ＬＢＡのビットマップは、全てゼロになる。そして、時刻Ｔ２（＞Ｔ１）において、Ｓｕｂ−ＰＶＯＬの特定のＬＢＡに書込が行われると、そのＳｕｂ−ＰＶＯＬは、そのＬＢＡにおいて更新される。これによって、そのＬＢＡについては、Ｓｕｂ−ＰＶＯＬ及びＳｕｂ−ＳＶＯＬが異なり、したがって、ビットマップフィールドのそのＬＢＡの位置が１に設定され、これは、そのＬＢＡにおいて、Ｓｕｂ−ＰＶＯＬがＳｕｂ−ＳＶＯＬとは異なることを示す。
【０１１０】
＜ペア作成動作＞
図１８は、ペア作成プログラム２４２７Ａによるペア作成動作を示すフローチャートである。この処理は、既に作成されているが、互いに関連付けられていないＰＶＯＬ及びＳＶＯＬをペアにする処理である。ペア作成プログラム２４２７Ａは、２つのＶＯＬをペア状態にして、コピー動作を実行できるようにするプログラムである。図１８に示すプログラムは、ＰＶＯＬのオーナＭＰ−ＰＫによって実行されるが、ペア作成プロセスの一部（Ｓ６０８）は、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫによって実行され、このプロセスのフローチャートは、図２０に示している。
【０１１１】
ＰＶＯＬのオーナＭＰ−ＰＫ（ＰＶＯＬオーナＭＰ−ＰＫと呼ぶ。）は、まず、ステップＳ６００において、ホスト計算機１００からペア作成コマンドを受信し、ステップＳ６０１において、コピーペアのＰＶＯＬ及びＳＶＯＬ（以下にこの段落ではパラグラフの「ターゲットＰＶＯＬ」及び「ターゲットＳＶＯＬ」と呼ぶ。）のＶＯＬ番号をコマンドから抽出する。
【０１１２】
ステップＳ６０２において、ターゲットＰＶＯＬオーナＭＰ−ＰＫは、ＶＯＬオーナＭＰ−ＰＫテーブル２４１１Ａを参照して、ターゲットＰＶＯＬ及びターゲットＳＶＯＬが同じオーナを有するか否かを確認する。これらが同じオーナを有する場合、ターゲットＰＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ６０４に進める。一方、ターゲットＰＶＯＬ／ＳＶＯＬペアが同じオーナＭＰ−ＰＫ（そのオーナＭＰ−ＰＫ自体）を有さない場合、ターゲットＰＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ６０３に進め、ＶＯＬオーナ変更プログラム２４２５Ａを実行し、ターゲットＳＶＯＬのオーナオーソリティ（Owner Authority）を変更して、ターゲットＰＶＯＬオーナＭＰ−ＰＫと同じにする。
【０１１３】
次に、ステップＳ６０４において、ターゲットＰＶＯＬオーナＭＰ−ＰＫは、ターゲットＳＶＯＬの各Ｓｕｂ−ＶＯＬのオーナオーソリティがターゲットＰＶＯＬの対応するＳｕｂ−ＶＯＬのオーナオーソリティと同じであるか否かをチェックする。これらが同じオーナを有する場合、ターゲットＰＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ６０６に進める。これらが同じオーナＭＰ−ＰＫを有さない場合、ターゲットＰＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ６０５に進め、Ｓｕｂ−ＶＯＬオーナ変更プログラム２４２６Ａを実行し、ターゲットＳＶＯＬの全てのＳｕｂ−ＶＯＬのオーナオーソリティをターゲットＰＶＯＬのＳｕｂ−ＶＯＬと同じにする。
【０１１４】
ステップＳ６０６の時点では、ターゲットＰＶＯＬ及びターゲットＳＶＯＬは、同じＶＯＬオーナＭＰ−ＰＫを有する。また、ＰＶＯＬ／ＳＶＯＬペアの各Ｓｕｂ−ＶＯＬも同じオーナを有する。そこで、ステップＳ６０６において、ＰＶＯＬオーナＭＰ−ＰＫは、ターゲットＰＶＯＬ／ＳＶＯＬをペアとする情報をＶＯＬペア情報テーブル２４１４Ａに加える。
【０１１５】
次に、ステップＳ６０７において、ＰＶＯＬオーナＭＰ−ＰＫは、ＶＯＬペア情報テーブル２４１４Ａ内のＶＯＬペア状態をＣＯＰＹ（ＰＤ）に更新する。ＣＯＰＹ（ＰＤ）は、最初のコピーが進行中であることを示す状態である。
【０１１６】
ステップＳ６０８では、ターゲットＰＶＯＬからターゲットＳＶＯＬへの最初のコピーを実行する必要がある。しかしながら、Ｓｕｂ−ＶＯＬに対する読出及び書込動作は、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫのみが実行するため、ＰＶＯＬオーナＭＰ−ＰＫは、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２４１２Ａを参照して、ターゲットＰＶＯＬ／ＳＶＯＬの全てのＳｕｂ−ＶＯＬオーナＭＰ−ＰＫに関する情報を取得する。そして、ＰＶＯＬオーナＭＰ−ＰＫは、各Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫに対して、Ｓｕｂ−ＶＯＬペアを作成し、Ｓｕｂ−ＰＶＯＬから対応するＳｕｂ−ＳＶＯＬに最初のコピーを実行することを要求する。ステップＳ６０８の詳細な処理は、図２０を用いて後に説明する。
【０１１７】
ステップＳ６０９において、ＰＶＯＬオーナＭＰ−ＰＫは、各Ｓｕｂ−ＶＯＬペアオーナＭＰ−ＰＫによるＳｕｂ−ＶＯＬペア作成及び最初のコピー動作の完了を待機する。各Ｓｕｂ−ＶＯＬペアオーナＭＰ−ＰＫは、要求された動作を完了すると、完了に関する肯定応答をＶＯＬペアオーナＭＰ−ＰＫ（ＰＶＯＬ及びＳＶＯＬのオーナＭＰ−ＰＫ）に送る。
【０１１８】
ＰＶＯＬオーナＭＰ−ＰＫは、全てのＳｕｂ−ＶＯＬオーナＭＰ−ＰＫから肯定応答を取得すると、プロセスをステップＳ６１０に進める。ＰＶＯＬオーナＭＰ−ＰＫは、ステップＳ６１０において、ＶＯＬペア情報テーブル２４１４Ａのペア状態を「ＰＡＩＲ」に更新する。
【０１１９】
ステップＳ６１１において、ＰＶＯＬオーナＭＰ−ＰＫは、コピーペア作成動作の完了を示す肯定応答をホスト計算機１００に返し、プログラムが終了する。
【０１２０】
＜ＰＶＯＬ及びＳＶＯＬのためのペア動作（ペア分離及びペア再同期）＞
図１９は、ＰＶＯＬ及びＳＶＯＬについてＶＯＬオーナＭＰ−ＰＫによって実行されるペア動作（ペア分離／ペア再同期）のフローチャートである。ペア再同期動作は、分離状態（ＰＳＵＳ）であるＳＶＯＬをＰＶＯＬに再同期させ、ＳＶＯＬがＰＶＯＬのコピーになり、ＰＶＯＬの最新のコピーを維持するための動作である。
【０１２１】
ステップＳ７００では、コピーペアオーナＭＰ−ＰＫ（ＰＶＯＬ及び対応するＳＶＯＬのＶＯＬオーナＭＰ−ＰＫ（ＰＶＯＬオーナＭＰ−ＰＫとも呼ぶ。））がペア動作コマンドを受信する。
【０１２２】
ステップＳ７０１において、ＰＶＯＬオーナＭＰ−ＰＫは、コマンドからＰＶＯＬ及びＳＶＯＬのＶＯＬ番号を抽出する。
【０１２３】
ステップＳ７０２において、ＰＶＯＬオーナＭＰ−ＰＫは、コマンドからペア動作を抽出する。このフローチャートでは、ペア動作は、ペア分離動作及びペア再同期動作の何れかを意味する。
【０１２４】
ステップＳ７０３において、ＰＶＯＬオーナＭＰ−ＰＫは、ＶＯＬペア情報テーブル２４１４Ａを参照し、要求されたペアのＰＶＯＬ及びＳＶＯＬが、要求された動作を実行するために適切な状態にあるかをチェックする。例えば、ペア分離動作の場合、ＰＶＯＬオーナＭＰ−ＰＫは、ＰＶＯＬ及びＳＶＯＬがペア状態にあるか否かをチェックする。これらがペア状態ではない場合、要求された動作は、実行できない。ＰＶＯＬ及びＳＶＯＬが要求された動作を実行するために適切な状態ではない場合、ＰＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ７０４に進め、コマンドを発したホスト計算機１００にエラー（ERROR）を返し、プログラムが終了する。
【０１２５】
一方、ステップＳ７０３において、ＰＶＯＬ及びＳＶＯＬの状態が要求された動作を実行するために適切であると判定された場合、ＰＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ７０５に進める。
【０１２６】
ステップＳ７０５において、ＰＶＯＬオーナＭＰ−ＰＫは、ＶＯＬペア情報テーブル２４１４Ａ内のコピーペアの状態を、要求された動作が進行中であることを示す状態に更新する。例えば、動作が「ペア作成」である場合、状態は、ＣＯＰＹ（ＰＤ）に変更され、これは、最初のコピーが進行中であることを意味する。動作が「ペア分離」である場合、状態は、ＣＯＰＹ（ＳＰ）になり、これは、Ｓｕｂ−ＰＶＯＬからＳｕｂ−ＳＶＯＬへの差分コピー（differential copy）が進行中であることを意味する。動作が「ペア再同期」である場合、状態は、ＣＯＰＹ（ＲＳ）になり、これは、Ｓｕｂ−ＰＶＯＬからＳｕｂ−ＳＶＯＬへの差分コピーが進行中であることを意味する。
【０１２７】
ステップＳ７０６において、ＰＶＯＬオーナＭＰ−ＰＫは、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２４１２Ａを参照し、ＰＶＯＬ及びＳＶＯＬのＳｕｂ−ＶＯＬオーナＭＰ−ＰＫに関する情報を取得する。そして、ＰＶＯＬオーナＭＰ−ＰＫは、これらのＳｕｂ−ＶＯＬオーナＭＰ−ＰＫのそれぞれに対し、それらが担当するＳｕｂ−ＶＯＬペアについて要求された動作を実行することを要求する。ステップＳ７０６の詳細な処理は、図２０を用いて後に説明する。
【０１２８】
ステップＳ７０７において、ＰＶＯＬオーナＭＰ−ＰＫは、前のステップにおいて要求されたタスクの完了を待機する。ＰＶＯＬオーナＭＰ−ＰＫは、全てのＳｕｂ−ＶＯＬオーナＭＰ−ＰＫから肯定応答を受け取ると、プロセスをステップＳ７０８に進め、要求された動作に基づいて、ＶＯＬペアの状態を更新する。例えば、要求された動作がペア分離動作である場合、ＰＶＯＬオーナＭＰ−ＰＫは、ペア状態を「ＰＳＵＳ」に更新する。
【０１２９】
ＰＶＯＬオーナＭＰ−ＰＫは、ステップＳ７０９において、コマンドを送信してきたホスト計算機１００に、要求された動作の完了を示す肯定応答を返し、プログラムが終了する。
【０１３０】
＜Ｓｕｂ−ＰＶＯＬ及びＳｕｂ−ＳＶＯＬのためのペア動作（ペア分離、ペア再同期及びペア作成）＞
図２０は、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫによって実行されるＳｕｂ−ＰＶＯＬ及びＳｕｂ−ＳＶＯＬのためのペア動作（例えば、ペア分離／ペア再同期／ペア作成）のフローチャートである。これらのペア動作は、図１８のステップＳ６０８の処理に対応する。したがって、図１８のＳ６０８に示すように、何れのペア動作も、まずターゲットコピーペアＶＯＬのオーナＭＰ−ＰＫ（ＰＶＯＬオーナＭＰ−ＰＫ）によって部分的に実行される。そして、ターゲットコピーペアＶＯＬのオーナＭＰ−ＰＫは、ターゲットコピーペアＶＯＬの各Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫに対し、要求されたタスクの一部を実行することを要求する。Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、要求された動作を実行すると、タスクの完了を示す肯定応答をＶＯＬオーナＭＰ−ＰＫに送る。全てのＳｕｂ−ＶＯＬオーナＭＰ−ＰＫがタスクの完了を示す肯定応答を送ると、コピーペアＶＯＬのオーナは、要求された動作に関する最終的なタスクを実行し、プログラムが終了する。図２０のフローチャートは、このようなプロセスの具体例を示している。
【０１３１】
ステップＳ８００において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ＰＶＯＬオーナＭＰ−ＰＫからペア動作のコマンドを受け取る。この具体例では、ペア動作は、ペア作成、ペア分離又はペア再同期であってもよい。
【０１３２】
ステップＳ８０１において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、コマンドからＰＶＯＬ及びＳＶＯＬのＶＯＬ番号を抽出する。
【０１３３】
ステップＳ８０２において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ペア動作を抽出する。
【０１３４】
ステップＳ８０３において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ステップＳ７０３に関連して説明したように、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａを参照し、要求された対のＳｕｂ−ＰＶＯＬ及びＳｕｂ−ＳＶＯＬが要求された動作を実行するために適切な状態にあるかをチェックする。Ｓｕｂ−ＰＶＯＬ及びＳｕｂ−ＳＶＯＬが要求された動作を実行するために適切な状態にない場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをＳ８０４に進め、ＶＯＬオーナＭＰ−ＰＫ（図１８の処理を実行するＰＶＯＬオーナＭＰ−ＰＫ）にエラー通知を返し、プログラムが終了する。
【０１３５】
一方、ステップＳ８０３において、Ｓｕｂ−ＰＶＯＬ及びＳｕｂ−ＳＶＯＬの状態が要求された動作を実行するために適切であると判定された場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ８０５に進める。
【０１３６】
ステップＳ８０５において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ステップＳ７０８について説明したように、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａ内のコピーペアの状態を、要求された動作が進行中であることを示す状態に更新する。
【０１３７】
ステップＳ８０６において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、要求された動作に基づくアクションを実行する。ペア動作のためのアクションの３つの具体例は、以下の通りである。要求された動作が「ペア再同期」である場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａから差分ビットマップを読み出し、差分ビットマップに従ってＳｕｂ−ＳＶＯＬを（現在のＳｕｂ−ＰＶＯＬの正確なコピーになるように）更新する。要求された動作がペア分離である場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、非同期コピープロセスをトリガし、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａから再び差分ビットマップを読み出し、差分ビットマップに従ってＳｕｂ−ＳＶＯＬを（現在のＳｕｂ−ＰＶＯＬの正確なコピーになるように）更新する。要求された動作がペア作成である場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、Ｓｕｂ−ＳＶＯＬに対する最初のコピー動作を実行して、現在のＳｕｂ−ＰＶＯＬの正確なコピーにする。このように、上述した３つの動作では、全て、Ｓｕｂ−ＳＶＯＬをＳｕｂ−ＰＶＯＬの正確なコピーにするコピー動作を実行する。したがって、これらの３つの動作は、単一のサブプログラムで実行でき、このサブプログラムは、異なる状況でトリガすることができる。
【０１３８】
ステップＳ８０７において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、要求された動作に応じて、Ｓｕｂ−ＶＯＬ情報テーブル内のＳｕｂ−ＶＯＬペアの状態を更新する。例えば、要求された動作がペア分離動作である場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、Ｓｕｂ−ＶＯＬペアの状態を「ＰＳＵＳ」に更新する。
【０１３９】
ステップＳ８０８において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、要求された動作の完了を示す肯定応答をＶＯＬオーナＭＰ−ＰＫに返し、プログラムが終了する。
【０１４０】
＜ＰＶＯＬ書込動作＞
図２１は、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫによって実行されるＰＶＯＬ書込動作のフローチャートである。全てのＰＶＯＬ書込コマンドは、実施形態１のシンプレックスＶＯＬの場合と同様に、書込動作のターゲットアドレス範囲に含まれるＳｕｂ−ＶＯＬのオーナシップを有するＭＰ−ＰＫに宛てられる。
【０１４１】
ステップＳ９００〜Ｓ９０６は、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫが参照するテーブルがこの実施形態のためのテーブルである点を除いて、実施形態１における図１２のステップＳ４００〜Ｓ４０６と同様である。
【０１４２】
ステップＳ９０７において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａを参照し、Ｓｕｂ−ＶＯＬがコピーペアＳｕｂ−ＶＯＬ（Ｓｕｂ−ＳＶＯＬ）を有するか否かをチェックする。ターゲットＳｕｂ−ＰＶＯＬのためのＳｕｂ−ＳＶＯＬがない場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ９０９に進める。一方、Ｓｕｂ−ＳＶＯＬがある場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ９０８に進め、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａ内のＳｕｂ−ＶＯＬペアの差分ビットマップを更新する。
【０１４３】
ステップＳ９０９において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ホスト計算機１００に「グッド（GOOD）」を返し、プログラムが終了する。
【０１４４】
データ受信バッファからディスクドライブ２５１へのこのデータのデステージングは、別のプログラムによって実行される。このデータデステージング処理は周知であり、ここではこれ以上説明しない。
【０１４５】
本発明では、コピー機能のオリジナルボリューム（ＰＶＯＬ）及びコピーボリューム（ＳＶＯＬ）のオーナオーソリティを同じプロセッサに割り当て、コピー機能（ＰＰ）の性能を向上させている。更に、ＰＶＯＬ及びＳＶＯＬをそれぞれ複数のサブボリューム（プライマリサブボリューム及びセカンダリサブボリューム）に分割し、対応するプライマリサブボリューム及びセカンダリサブボリュームに同じプロセッサを割り当てる。ここで、１つのＰＶＯＬに対して複数のＳＶＯＬが存在することがあり、ＰＶＯＬ及びＳＶＯＬによって生じる累積的な負荷は、非常に大きくなることがある。本発明により、ＭＰＰＫの利用率を向上させて、負荷を均等に分散させることができる。
【０１４６】
（３）実施形態３
この実施形態は、Ｓｕｂ−ＶＯＬを用いて、スナップショット（Snapshot）と名付けられたＶＯＬコピー機能を実現する方法に関する。
【０１４７】
スナップショットＶＯＬコピー技術は、ＰＶＯＬが必要とする容量以下のＰＶＯＬのポイントインタイム（Point-in-Time）コピーを作成する技術である。スナップショットＳＶＯＬは、データがＰＶＯＬの物理データと同じである仮想ＶＯＬ、データがプールＶＯＬ（Pool VOL）と呼ばれる異なるＶＯＬに保存された仮想ＶＯＬ、又は部分的にこれらの両方であってもよい。スナップショットＶＯＬを生成する際は、ＳＶＯＬのデータがどこに保存されているかについて、テーブル、すなわち、論理ブロックアドレス（又は他のユニット）ポインタテーブルを追跡する。スナップショットコピーペアＶＯＬがペア状態であり、すなわち、ＳＶＯＬデータがＰＶＯＬデータと同じである必要がある場合、ＳＶＯＬの各論理ブロックアドレス（Logical Block Address：以下、ＬＢＡ）ポインタは、ＰＶＯＬのＬＢＡを指す。スナップショットコピーペアが分離状態（ＰＳＵＳ）である場合、ＳＶＯＬは、分離動作が実行されたときのＰＶＯＬのデータを維持する必要がある。この目的のために、プールＶＯＬを用いて、ペア分離動作が実行された後に変更されるＰＶＯＬの元のデータの全てを維持する。また、ＬＢＡデータポインタテーブル２２２３Ｂと呼ばれるテーブルにおいて、ＰＶＯＬのデータが保存されているプールＶＯＬのためのＬＢＡポインタも維持する。そして、この実施形態では、Ｓｕｂ−ＶＯＬを用いて、上述したスナップショットコピー機能を実現する。このために、各Ｓｕｂ−ＶＯＬについてのＬＢＡデータポインタテーブル２２２３Ｂを作成する。実施形態２の場合と同様に、この実施形態でもプライマリＶＯＬ及びセカンダリＶＯＬ（コピーＶＯＬ）のオーナは同じにする。各プライマリＳｕｂ−ＶＯＬ及び対応するセカンダリＳｕｂ−ＶＯＬ（コピーＳｕｂ−ＶＯＬ）のオーナもそれぞれ同じにする。以下では、この方法の詳細を説明する。
【０１４８】
＜キャッシュメモリパッケージの構造＞
この実施形態のキャッシュメモリパッケージ（ＣＭ−ＰＫ）２４０の構造は、図１４のＶＯＬペア情報テーブル２４１４Ａの代わりに別のＶＯＬペア情報テーブルを用いる点を除いて、図１４に示した構造と実質的に同じである。このＶＯＬペア情報テーブルは、スナップショットコピーＶＯＬペアに関する情報を維持する。このテーブルの状態フィールドは、スナップショットコピーペアの状態に関する情報を維持する。状態フィールドは、スナップショットコピーペアＶＯＬがペア状態であり、ＰＶＯＬのコンテンツがＳＶＯＬのコンテンツと同じである場合、値「ＰＡＩＲ」になり、新しいペアが作成され、実際にペア状態を達成する前に処理（例えば、プールＶＯＬの作成）が進行中である場合、値「ＣＯＰＹ（ＰＤ）」になり、この状態では、コピーペアの「ＣＯＰＹ（ＰＤ）」状態の場合のように最初のコピー動作を実行せず、ＶＯＬペアが分離状態にあり、ＳＶＯＬは、ペア分離動作が実行されたときのＰＶＯＬのデータを維持する必要がある場合、値「ＰＳＵＳ」になる。
【０１４９】
＜プログラムメモリ内の各プログラムについて＞
プログラムメモリ内のプログラムは、図１４に示す通りである。ＶＯＬ作成プログラム２４２１Ａは、新しいＶＯＬ（ＰＶＯＬ及びＳＶＯＬ）を作成するために用いられる。ＰＶＯＬについては、このプログラムは、図９に示す実施形態１で用いるプログラム２４２１と同じである。また、ＳＶＯＬについては、ＳＶＯＬが仮想ＶＯＬであり、スナップショットＳＶＯＬは、作成時に物理的容量を必要としないので、図９のステップＳ１０１及びステップＳ１０３をスキップする点を除いて、このプログラムは、プログラム２４２１と同じである。
【０１５０】
この実施形態における読出要求処理プログラム２４２２Ａは、読出処理関連コマンドを処理するために用いられる。このプログラムは、後述する図２５のフローチャートとして示されている。
【０１５１】
この実施形態におけるＰＶＯＬ書込み要求処理プログラム２４２３Ａは、書込動作関連コマンドを処理するために用いられる。このプログラムのフローチャートは、図２６を用いて後に説明する。
【０１５２】
この実施形態のペア作成プログラム２４２７Ａは、スナップショットコピーペアを作成するために用いられる。プログラムのフローは、図１８に示すペア生成プログラムと同様であるが、ステップＳ６０６、ステップＳ６０７、ステップＳ６１０において使用されるＶＯＬペア情報テーブルがスナップショットコピーＶＯＬペアの情報を用いる点が先の説明と異なる。また、ステップＳ６０８において、Ｓｕｂ−ＶＯＬペアについての最初のコピー動作は、実行されず、これに代えて、対応するＳｕｂ−ＶＯＬペアオーナＭＰ−ＰＫがＰｏｏｌ−ＶＯＬを作成し、作成したＰｏｏｌ−ＶＯＬ又は既存のＰｏｏｌ−ＶＯＬを各Ｓｕｂ−ＶＯＬペアに割り当てる。
【０１５３】
ＶＯＬオーナＭＰ−ＰＫのためのペア動作プログラム２４２８Ａは、実施形態２で説明したペア分離／ペア再同期等のスナップショットコピーペア関連動作を実行する。
【０１５４】
この実施形態におけるＳｕｂ−ＶＯＬオーナＭＰ−ＰＫのためのペア動作プログラム２４２９Ａは、図２０のステップＳ８０５、ステップＳ８０６及びステップＳ８０７において、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ａの代わりにＳｕｂ−ＶＯＬペア情報テーブル２２２２Ｂを参照する。テーブル２２２２Ｂの具体例は、図２３に示し、後に説明する。
【０１５５】
この実施形態のステップＳ８０６では、所与のペア動作についてＳｕｂ−ＶＯＬペア情報テーブル２２２２Ｂを更新すると共に、対応するＰｏｏｌ番号及びＬＢＡデータポインタテーブル番号を更新し、更に、動作の要求に応じて対応するＬＢＡデータポインタテーブルのコンテンツを更新する。例えば、動作が「ペア生成」である場合、ペアのために新しいＬＢＡデータポインタテーブル２２２３Ｂを作成し、Ｓｕｂ−ＶＯＬペアにＰｏｏｌ−ＶＯＬを割り当て、ターゲットＳｕｂ−ＰＶＯＬ  ＩＤ、ターゲットＳｕｂ−ＳＶＯＬ  ＩＤ、割り当てられたＰｏｏｌ  ＶＯＬ番号及び作成されたＬＢＡポインタアドレステーブル番号を用いて、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ｂに新たなエントリを追加する。動作が「ペア分離」である場合、ステップＳ８０６では、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ｂ内の状態だけを変更する。動作が「ペア再同期」である場合、ステップＳ８０６では、ＬＢＡデータポインタテーブル２２２３Ｂに「ＮＵＬＬ」を埋め、これは、全てのＳｕｂ−ＳＶＯＬのデータが現在のＳｕｂ−ＰＶＯＬと同じであることを表す。
【０１５６】
＜ＦＥ−ＰＫ内のメモリの構造＞
この実施形態のＦＥ−ＰＫ２１０のメモリ２１３の構造は、実施形態１と同じである。また、ＶＯＬオーナＭＰ−ＰＫテーブル２１３１及びＳｕｂ−ＶＯＬオーナＭＰ−ＰＫテーブル２１３２は、この実施形態でも同じ目的で使用される。
【０１５７】
また、実施形態１のＬＲ処理プログラム２１３３は、この実施形態でも同じ目的で使用されると共に、更に、ＶＯＬ（ＰＶＯＬ／ＳＶＯＬペア）オーナＭＰ−ＰＫにスナップショットコピーペア関連コマンドを送信する。
【０１５８】
図１０のＬＲ処理プログラムの例示的なフローに示すように、ステップＳ２０２において、ＶＯＬ（ＰＶＯＬ又はＳＶＯＬ）読出／書込コマンド以外のコマンド（スナップショットコピーペア関連コマンドも含まれる。）は、図１０におけるステップＳ２０６〜Ｓ２０８によってＶＯＬ（ＰＶＯＬ／ＳＶＯＬ）オーナＭＰ−ＰＫに送信される。
【０１５９】
＜ＭＰ−ＰＫのローカルメモリの構造＞
図２２は、ＭＰ−ＰＫ２２０内のＬＭ２２２のコンテンツの具体例を示す図である。ＬＭ２２２のコンテンツは、Ｓｕｂ−ＶＯＬ制御情報テーブル２２２１Ｂ、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ｂ及び複数のＬＢＡデータポインタテーブル２２２３Ｂから構成される。
【０１６０】
Ｓｕｂ−ＶＯＬ制御情報テーブル２２２１Ｂは、実施形態１のＳｕｂ−ＶＯＬ制御情報テーブル２２２１と同じである。
Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ｂは、Ｓｕｂ−ＶＯＬペアに関する情報を含む。このテーブルの具体例は、図２３に示し、後に説明する。
ＬＢＡデータポインタテーブル２２２３Ｂの具体例は、図２４に示している。
【０１６１】
＜ＶＯＬペア情報テーブルの構造＞
この実施形態のためのＶＯＬペア情報テーブルは、シャドウイメージコピーＶＯＬペアの代わりにスナップショットコピーＶＯＬペアに関するペア情報を維持する点を除いて、テーブル２４１４Ａと同じである。
【０１６２】
＜Ｓｕｂ−ＶＯＬペア情報テーブルの構造＞
図２３は、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ｂの具体例を示している。このテーブルは、２つの追加フィールドを有し、ビットマップフィールドを有していない点を除いて、テーブル２２２２Ａと同様である。追加フィールドの一方は、「Ｐｏｏｌ番号」であり、他方は、「ＬＢＡデータポインタテーブル（２２２３Ｂ）番号」である。Ｐｏｏｌ番号は、対応するスナップショットコピーペアＳｕｂ−ＶＯＬに関連するＰｏｏｌ  ＶＯＬの番号を示す。ＬＢＡデータポインタテーブル２２２３Ｂは、対応するＳｕｂ−ＳＶＯＬのデータのアドレスポインタを追跡する。ＬＢＡデータポインタテーブルの具体例は、図２４に示している。
【０１６３】
＜ＬＢＡデータポインタテーブルの構造＞
図２４は、ＬＭ２２２内のＬＢＡデータポインタテーブル２２２３Ｂの１つの具体例を示している。スナップショットコピーＶＯＬ毎に対応するＬＢＡデータポインタテーブル２２２３Ｂがある。
【０１６４】
ＬＢＡデータポインタ２２２３Ｂは、「ＬＢＡ」フィールド及び「データポインタ」フィールドから構成されている。ＬＢＡフィールドは、テーブルが関連付けられているＳｕｂ−ＳＶＯＬの論理ブロックアドレス（Logical Block Address：ＬＢＡ）である。「データポインタ」フィールドは、Ｓｕｂ−ＳＶＯＬの対応するＬＢＡのデータのためのアドレスポインタである。このフィールドが「ＮＵＬＬ」である場合、これは、Ｓｕｂ−ＳＶＯＬデータがＳｕｂ−ＰＶＯＬデータと同じであり、Ｓｕｂ−ＰＶＯＬの同じＬＢＡから読み出す必要があることを意味する。このフィールドが「ＮＵＬＬ」ではない場合、フィールドの値は、Ｓｕｂ−ＳＶＯＬのデータが存在する対応するＰｏｏｌ  ＶＯＬのアドレスである。
【０１６５】
＜ＰＶＯＬ及びＳＶＯＬの読出動作＞
図２５は、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫによって実行されるＰＶＯＬ／ＳＶＯＬ読出動作のフローチャートである。
【０１６６】
ステップＳ１１００では、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫが、ホスト計算機１００から送信された読出コマンドを受信する。
【０１６７】
ステップＳ１１０１は、ステップ３０１に対応している。何らかの予約競合があった場合、プロセスは、ステップＳ１１０２に進み、プログラムが終了する。一方、Ｓｕｂ−ＶＯＬが「解放（RELEASED）」又は読出コマンドを送信したホスト計算機１００のために「予約（RESERVED）」されている場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ１１０３に進める。
【０１６８】
ステップＳ１１０３では、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫがＳｕｂ−ＶＯＬ制御情報テーブル２２２１Ｂを参照し、ターゲットＳｕｂ−ＶＯＬがＳｕｂ−ＰＶＯＬであるか、Ｓｕｂ−ＳＶＯＬであるかをチェックする。ターゲットＳｕｂ−ＶＯＬがＳｕｂ−ＰＶＯＬである場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ１１０４に進め、実施形態１における図１１のステップＳ３０３と同様のシンプレックスＶＯＬ読出処理を実行する。
【０１６９】
ステップＳ１１０３において、ターゲットＳｕｂ−ＶＯＬがＳｕｂ−ＳＶＯＬであると判定された場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ１１０５に進め、このステップＳ１１０５において、Ｓｕｂ−ＶＯＬペア情報テーブル２２２２Ｂを参照して、Ｐｏｏｌ番号及び対応するＬＢＡデータポインタテーブル番号の情報を取得する。
【０１７０】
ステップＳ１１０６では、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫが関連するＬＢＡデータポインタテーブル２２２３Ｂを参照し、ターゲットＬＢＡのアドレスを取得する。
【０１７１】
ステップＳ１１０７において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ポインタフィールドが「ＮＵＬＬ」であるか否かをチェックする。ポインタフィールドが「ＮＵＬＬ」である場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ１１０８に進め、ターゲットペアのＳｕｂ−ＰＶＯＬの対応するＬＢＡからデータを読み出す。一方、ステップＳ１１０７において、データポインタフィールドが「ＮＵＬＬ」以外の値を格納していると判定された場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、その値を対応するＰｏｏｌ  ＶＯＬのアドレスと判断し、ステップＳ１１０９において、対応するＰｏｏｌ  ＶＯＬからデータを読み出す。
【０１７２】
Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ステップＳ１１０８又はステップＳ１１０９によってデータを読み出した後、プロセスをステップＳ１１１０に進め、読出データを返す。
【０１７３】
ステップＳ１１１１において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、「グッド（GOOD）」を返し、プログラムが終了する。
【０１７４】
＜ＰＶＯＬの書込動作＞
図２６は、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫによって実行されるＰＶＯＬ書込動作のフローチャートである。このフローチャートは、この段落で説明する幾つかの点を除いて、図２１に示すフローチャートと同じである。
【０１７５】
図２６のステップＳ１２００〜Ｓ１２０７は、図２１のステップＳ９００〜Ｓ９０７と同じである。ステップＳ１２０７で参照されるＳｕｂ−ＶＯＬペア情報テーブルは、テーブル２２２２Ｂである。ステップＳ１２０８において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、スナップショットＳｕｂ−ＶＯＬペアが分離状態（ＰＳＵＳ）であるかをチェックする。スナップショットＳｕｂ−ＶＯＬペアが分離状態ではない場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ１２１０に進める。スナップショットＳｕｂ−ＶＯＬペアが分離状態である場合、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、プロセスをステップＳ１２０９に進め、バッファリングされたデータをＳｕｂ−ＰＶＯＬにデステージングする前に、ＰＶＯＬデータを読み出し、このデータを対応するＰｏｏｌ  ＶＯＬに書き込む。またＳｕｂ−ＶＯＬオーナＭＰ−ＰＫは、ＭＰ−ＰＫがデータを書き込んだＰｏｏｌ  ＶＯＬのアドレスによってＬＢＡデータポインタテーブル２２２３Ｂを更新する。
【０１７６】
ステップ１２１０において、Ｓｕｂ−ＶＯＬオーナＭＰ−ＰＫは、書込コマンドを発行したホスト計算機に「グッド（GOOD）」を返し、プログラムが終了する。
【０１７７】
（４）その他
本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによって実現することもできる。この場合、システム又は装置には、このプログラムコードを記録したストレージ媒体が提供され、システム又は装置の計算機（又はＣＰＵ又はＭＰＵ）が、このストレージ媒体に保存されているプログラムコードを読み出す。この場合、ストレージ媒体から読み出されるプログラムコード自体が上述した実施形態の機能を実現する。プログラムコード自体及びプログラムコードが保存されるストレージ媒体は、本発明を構成する。このようなプログラムコードを供給するためのストレージ媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発メモリカード又はＲＯＭを使用してもよい。
【０１７８】
更に、実施形態の機能を実現するソフトウェアのプログラムコードは、ネットワークを介して配信してもよく、プログラムコードは、記録手段、例えば、システム又は装置のハードディスク又はメモリ、又はＣＤ−ＲＷ又はＣＤ−Ｒ等のストレージ媒体に保存され、プログラムコードの使用時に、システム又は装置の計算機（又はＣＰＵ又はＭＰＵ）が記録手段又はストレージ媒体に保存されているプログラムコードを読み出し、実行してもよい。
【０１７９】
なお、上述したプロセス及び技術は、本質的には、特定の装置に限定されず、コンポーネントの適切な如何なる組合せによって実現してもよい。更に、上述した開示に基づいて、様々なタイプの汎用デバイスを用いることもできる。上述した方法のステップを実行するために専用の装置を構築することも有用である。実施形態で開示した複数のコンポーネントの適切な組合せによって様々な実施形態を構成することができる。例えば、実施形態で説明した全てのコンポーネントから幾つかのコンポーネントを省略してもよい。更に、異なる実施形態で説明したコンポーネントを適切に組み合わせてもよい。特定の具体例に関連付けて本発明を説明した。但し、特定の具体例は、説明を目的とするものであり、全ての側面を限定するものではない。本発明の実施に適するハードウェア、ソフトウェア及びファームウェアの多くの組合せがあることは、当業者にとって明らかである。例えば、上述したソフトウェアは、様々なプログラム又はスクリプト言語、例えば、Ｃ／Ｃ＋＋、パール（Perl）、シェル（Shell）、ＰＨＰ及びＪａｖａ（登録商標）によって実現してもよい。
【０１８０】
更に、実施形態では、説明のために必要な制御線及び情報線を示した。全ての制御線及び情報線は、製品に関して示したものではない。全てのコンポーネントを互いに接続してもよい。
【０１８１】
更に、この技術分野で通常の知識を有する者は、本明細書及びここに開示した本発明の実施形態に基づいて、本発明の他の具体例を想到できることは明らかである。ここに説明した実施形態の様々なフォーム及び／又はコンポーネントは、データの管理機能を有するコンピュータ化されたストレージシステムにおいて、個別に又は如何なる組合せで用いてもよい。詳細な説明及び特定の具体例は、典型的なもののみを示している。本発明の範囲及び思想は、特許請求の範囲に示されている。
【符号の説明】
【０１８２】
１００  ホスト計算機
２００  ストレージサブシステム
２１０  フロントエンドパッケージ（ＦＥ−ＰＫ）
２１２  ローカルルータ（ＬＲ）
２１３  メモリ
２２０  マイクロプロセッサパッケージ（ＭＰ−ＰＫ）
２２１  マイクロプロセッサ（ＭＰ）
２２２  ローカルメモリ（ＬＭ）
２３０  バックエンドパッケージ（ＢＥ−ＰＫ）
２４０  キャッシュメモリパッケージ（ＣＭ−ＰＫ）
２４１  共有メモリ（ＳＭ）
２４２  プログラムメモリ
２４３  キャッシュメモリ
２５０  ディスクユニット
２５１  ディスクドライブ
３００  管理計算機
４００  ローカルエリアネットワーク（ＬＡＮ）
５００  ストレージエリアネットワーク（ＳＡＮ）
【図１】
0006025973.tif 000002
【図２】
0006025973.tif 000003
【図３】
0006025973.tif 000004
【図４】
0006025973.tif 000005
【図５】
0006025973.tif 000006
【図６】
0006025973.tif 000007
【図７】
0006025973.tif 000008
【図８】
0006025973.tif 000009
【図９】
0006025973.tif 000010
【図１０】
0006025973.tif 000011
【図１１】
0006025973.tif 000012
【図１２】
0006025973.tif 000013
【図１３】
0006025973.tif 000014
【図１４】
0006025973.tif 000015
【図１５】
0006025973.tif 000016
【図１６】
0006025973.tif 000017
【図１７】
0006025973.tif 000018
【図１８】
0006025973.tif 000019
【図１９】
0006025973.tif 000020
【図２０】
0006025973.tif 000021
【図２１】
0006025973.tif 000022
【図２２】
0006025973.tif 000023
【図２３】
0006025973.tif 000024
【図２４】
0006025973.tif 000025
【図２５】
0006025973.tif 000026
【図２６】
0006025973.tif 000027