(57)【特許請求の範囲】
【請求項１】
外部装置のデータ記憶領域として使用される複数の単位論理記憶領域を提供する記憶媒体を備えた記憶装置と、前記記憶装置と通信可能に接続されており、前記外部装置から前記各単位論理記憶領域に対するデータＩＯ処理を実行する複数の演算装置とを備えたストレージシステムであって、
前記各単位論理記憶領域と、当該単位論理記憶領域の前記データＩＯ処理を実行する前記演算装置とを対応付けて保持している担当演算装置指定部と、
前記各単位論理記憶領域と、当該単位論理記憶領域について設定されている、前記単位論理記憶領域の使用態様を示す情報であるストレージ機能情報とを対応付けて保持しているストレージ機能保持部と、
前記各単位論理記憶領域について、前記ストレージ機能保持部から取得した当該各単位論理記憶領域に設定されているストレージ機能に基づいて、当該各論理記憶領域に関するデータ処理を担当している前記演算装置を前記担当演算装置指定部から取得して前記各単位論理記憶領域を同一の前記演算装置が担当しているか判定し、同一の前記演算装置が担当していないと判定した場合に、前記単位論理記憶領域を担当しているいずれかの前記演算装置が他の前記単位論理記憶領域を担当するように他の前記単位論理記憶領域を担当する前記演算装置を変更する演算装置変更部と、を備え、
前記演算装置変更部は、前記各単位論理記憶領域に、常時前記外部装置のデータＩＯを処理する正記憶領域と、前記正記憶領域のある時点における格納データがコピーされる副記憶領域と、前記正記憶領域から前記副記憶領域へコピーされるデータを一時格納する一時記憶領域とで構成されるリモートコピー機能が設定されており、
前記正記憶領域と前記一時記憶領域とが正リモートコピーグループを構成し、前記副記憶領域と前記一時記憶領域とが副リモートコピーグループを構成し、
前記正リモートコピーグループに属する前記一時記憶領域を担当する前記演算装置を変更するときに、前記正リモートコピーグループを担当する前記演算装置を、前記一時記憶領域を担当する変更先である前記演算装置に変更し、
前記副リモートコピーグループに属する前記一時記憶領域を担当する前記演算装置を変更するときに、前記副リモートコピーグループを担当する前記演算装置を、前記一時記憶領域を担当する変更先である前記演算装置に変更する、ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記各演算装置と、当該各演算装置が有する前記データＩＯ処理を行うプロセッサの使用率を取得して前記各演算装置と対応付けて保持しているプロセッサ使用率保持部と、
前記各単位論理記憶領域に対応付けられている前記ストレージ機能情報によって特定される前記ストレージ機能で実行されるデータ処理それぞれについて前記プロセッサが負担する負荷を示す負荷情報を保持している負荷情報保持部と、
前記各演算装置が担当している前記単位論理記憶領域であって、前記ストレージ機能が設定されていない前記単位論理記憶領域について、単位時間あたりの当該各単位論理記憶領域へのデータライト数、及び当該各単位論理記憶領域からのデータリード数を保持しており、これらデータライト数及びデータリード数と、前記負荷情報保持部から取得した一回のデータライト及びデータリードに必要とされる前記負荷情報とから、前記ストレージ機能が設定されていない前記単位論理記憶領域の前記データ処理に要する合計負荷を算出する負荷計算部と、をさらに備え、
前記演算装置変更部は、
前記各単位論理記憶領域に対して実行中のデータＩＯ処理が存在すると判定した場合に、実行中のデータＩＯ処理が存在しなくなるまで、前記演算装置の変更を保留し、
前記単位論理記憶領域に、同一の前記ストレージシステム内の他の前記単位論理記憶領域に当該各単位論理記憶領域に格納されているデータをコピーする機能であるローカルコピー機能が設定されている場合、一方の前記単位論理記憶領域を担当する前記演算装置を変更するときに、他の前記単位論理記憶領域を担当する前記演算装置を前記一方の単位論理記憶領域の変更先である前記演算装置に変更し、
前記各単位論理記憶領域が、前記外部装置に対して複数の前記単位論理記憶領域によって作成された一つの論理記憶領域である拡張記憶領域を提供する拡張記憶領域機能が設定されており、当該各単位論理記憶領域が前記拡張記憶領域を構成する単位論理記憶領域であると判定した場合、前記拡張記憶領域を構成する前記単位論理記憶領域のいずれかを担当する前記演算装置を変更するときに、前記拡張記憶領域を構成する他の前記単位論理記憶領域を担当している前記演算装置を、変更先である前記演算装置に変更し、
前記プロセッサ使用率保持部から前記各演算装置の前記プロセッサの使用率を取得して互いに比較し、比較結果が所定の条件を満たすと判定した場合に、前記負荷情報保持部から取得した当該単位論理記憶領域の前記負荷情報を前記各演算装置について算出して、前記各演算装置の前記負荷情報が平準化されるように変更先の前記演算装置を決定する、ストレージシステム。
【請求項３】
請求項１に記載のストレージシステムであって、
前記各演算装置と、当該各演算装置が有する前記データＩＯ処理を行うプロセッサの使用率を取得して前記各演算装置と対応付けて保持しているプロセッサ使用率保持部と、
前記各単位論理記憶領域に対応付けられている前記ストレージ機能情報によって特定される前記ストレージ機能で実行されるデータ処理それぞれについて前記プロセッサが負担する負荷を示す負荷情報を保持している負荷情報保持部と、をさらに備え、
前記演算装置変更部は、前記プロセッサ使用率保持部から前記各演算装置の前記プロセッサの使用率を取得して互いに比較し、比較結果が所定の条件を満たすと判定した場合に、前記負荷情報保持部から取得した当該単位論理記憶領域の前記負荷情報を前記各演算装置について算出して、前記各演算装置の前記負荷情報が平準化されるように変更先の前記演算装置を決定する、ストレージシステム。
【請求項４】
請求項３に記載のストレージシステムであって、
前記演算装置変更部は、前記各演算装置について前記単位論理記憶領域の前記負荷情報を算出する際に、前記各演算装置のいずれかが複数の前記単位論理記憶領域を担当している場合、当該演算装置についてそれら複数の前記単位論理記憶領域についての前記負荷情報の合計を算出する、ストレージシステム。
【請求項５】
請求項１に記載のストレージシステムであって、
前記演算装置変更部は、前記各単位論理記憶領域に対して実行中のデータＩＯ処理が存在すると判定した場合に、実行中のデータＩＯ処理が存在しなくなるまで、前記演算装置の変更を保留する、ストレージシステム。
【請求項６】
請求項１に記載のストレージシステムであって、
前記演算装置変更部は、前記単位論理記憶領域に、同一の前記ストレージシステム内の他の前記単位論理記憶領域に当該各単位論理記憶領域に格納されているデータをコピーする機能であるローカルコピー機能が設定されている場合、一方の前記単位論理記憶領域を担当する前記演算装置を変更するときに、他の前記単位論理記憶領域を担当する前記演算装置を前記一方の単位論理記憶領域の変更先である前記演算装置に変更する、ストレージシステム。
【請求項７】
請求項６に記載のストレージシステムであって、
前記演算装置変更部は、前記ローカルコピー機能が設定されている前記単位論理記憶領域のいずれかにアクセスしているジョブが存在すると判断した場合に、当該ジョブが存在しなくなるまで、前記各単位論理記憶領域を担当している前記演算装置の変更を保留する、ストレージシステム。
【請求項８】
請求項１に記載のストレージシステムであって、
前記演算装置変更部は、前記各単位論理記憶領域が、前記外部装置に対して複数の前記単位論理記憶領域によって作成された一つの論理記憶領域である拡張記憶領域を提供する拡張記憶領域機能が設定されており、当該各単位論理記憶領域が前記拡張記憶領域を構成する単位論理記憶領域であると判定した場合、
前記拡張記憶領域を構成する前記単位論理記憶領域のいずれかを担当する前記演算装置を変更するときに、前記拡張記憶領域を構成する他の前記単位論理記憶領域を担当している前記演算装置を、変更先である前記演算装置に変更する、ストレージシステム。
【請求項９】
請求項８に記載のストレージシステムであって、
前記演算装置変更部は、前記拡張記憶領域を構成している前記単位論理記憶領域を担当している前記演算装置を変更するときに、前記単位論理記憶領域に対して実行されているデータＩＯ処理が存在しないこと、かつ担当する前記演算装置を変更しようとしている前記単位論理記憶領域の先頭アドレスより前のアドレスを含む他の前記単位論理記憶領域を担当する前記演算装置がすでに変更されていることが成立していると判定した場合に、当該演算装置の変更を実行する、ストレージシステム。
【請求項１０】
請求項１に記載のストレージシステムであって、
前記副リモートコピーグループに属する前記一時記憶領域又は前記副記憶領域を担当する前記演算装置を変更するときに、前記一時記憶領域又は前記副記憶領域にアクセスしているジョブが存在しないこと、かつ、前記一時記憶領域及び前記副記憶領域が属する前記副リモートコピーグループを担当する前記演算装置が、前記一時記憶領域又は前記副記憶領域の変更先である前記演算装置であることが成立していると判定した場合に、前記一時記憶領域又は前記副記憶領域を担当する前記演算装置の変更を実行する、ストレージシステム。
【請求項１１】
請求項１に記載のストレージシステムであって、
前記演算装置変更部は、前記各演算装置が担当している前記単位論理記憶領域であって、前記ストレージ機能が設定されていない前記単位論理記憶領域について、単位時間あたりの当該各単位論理記憶領域へのデータライト数、及び当該各単位論理記憶領域からのデータリード数を保持しており、これらデータライト数及びデータリード数と、前記負荷情報保持部から取得した一回のデータライト及びデータリードに必要とされる前記負荷情報とから、前記ストレージ機能が設定されていない前記単位論理記憶領域の前記データ処理に要する合計負荷を算出する、ストレージシステム。
【請求項１２】
外部装置のデータ記憶領域として使用される複数の単位論理記憶領域を提供する記憶媒体を備えた記憶装置と、前記記憶装置と通信可能に接続されており、前記外部装置から前記各単位論理記憶領域に対するデータＩＯ処理を実行する複数の演算装置とを備えたストレージシステムの処理効率向上方法であって、
前記ストレージシステムは、
前記各単位論理記憶領域と、当該単位論理記憶領域の前記データＩＯ処理を実行する前記演算装置とを対応付けて保持している担当演算装置指定部と、
前記各単位論理記憶領域と、当該単位論理記憶領域について設定されている、前記単位論理記憶領域の使用態様を示す情報であるストレージ機能情報とを対応付けて保持しているストレージ機能保持部と、を備え、
前記各単位論理記憶領域について、前記ストレージ機能保持部から取得した当該各単位論理記憶領域に設定されているストレージ機能に基づいて、当該各論理記憶領域と対応付けられている前記演算装置を前記担当演算装置指定部から取得して前記各単位論理記憶領域を同一の前記演算装置が担当しているか判定し、同一の前記演算装置が担当していないと判定した場合に、前記単位論理記憶領域を担当しているいずれかの前記演算装置が他の前記単位論理記憶領域を担当するように他の前記単位論理記憶領域を担当する前記演算装置を変更し、
前記ストレージシステムは、前記各単位論理記憶領域に、常時前記外部装置のデータＩＯを処理する正記憶領域と、前記正記憶領域のある時点における格納データがコピーされる副記憶領域と、前記正記憶領域から前記副記憶領域へコピーされるデータを一時格納する一時記憶領域とで構成されるリモートコピー機能が設定されており、前記正記憶領域と前記一時記憶領域とが正リモートコピーグループを構成し、前記副記憶領域と前記一時記憶領域とが副リモートコピーグループを構成し、
前記正リモートコピーグループに属する前記一時記憶領域を担当する前記演算装置を変更するときに、前記正リモートコピーグループを担当する前記演算装置を、前記一時記憶領域を担当する変更先である前記演算装置に変更し、
前記副リモートコピーグループに属する前記一時記憶領域を担当する前記演算装置を変更するときに、前記副リモートコピーグループを担当する前記演算装置を、前記一時記憶領域を担当する変更先である前記演算装置に変更する、
ストレージシステムの処理効率向上方法。
【請求項１３】
請求項１２に記載のストレージシステムの処理効率向上方法であって、
前記ストレージシステムは、前記単位論理記憶領域に、同一の前記ストレージシステム内の他の前記単位論理記憶領域に当該各単位論理記憶領域に格納されているデータをコピーする機能であるローカルコピー機能が設定されている場合、一方の前記単位論理記憶領域を担当する前記演算装置を変更するときに、他の前記単位論理記憶領域を担当する前記演算装置を前記一方の単位論理記憶領域の変更先である前記演算装置に変更する、ストレージシステムの処理効率向上方法。
【請求項１４】
請求項１２に記載のストレージシステムの処理効率向上方法であって、
前記ストレージシステムは、前記各単位論理記憶領域が、前記外部装置に対して複数の前記単位論理記憶領域によって作成された一つの論理記憶領域である拡張記憶領域を提供する拡張記憶領域機能が設定されており、当該各単位論理記憶領域が前記拡張記憶領域を構成する単位論理記憶領域であると判定した場合、前記拡張記憶領域を構成する前記単位論理記憶領域のいずれかを担当する前記演算装置を変更するときに、前記拡張記憶領域を構成する他の前記単位論理記憶領域を担当している前記演算装置を、変更先である前記演算装置に変更する、ストレージシステムの処理効率向上方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びストレージシステムの処理効率向上方法に係わり、特にストレージシステムが備える複数の論理記憶領域について入出力処理を行うプロセッサの通信オーバヘッド増大を防止し、もってストレージシステムの処理効率向上を可能とするストレージシステム及びストレージシステムの処理効率向上方法に関する。
【背景技術】
【０００２】
政府、企業、大学等の各種機関では、多種多量のデータを取り扱うために、比較的大規模なストレージシステムを用いてデータを管理する。このストレージシステムは、多数の記憶デバイス(例えばハードディスクドライブ（Hard Disk Drive, 以下「ＨＤＤ」）など)をアレイ状に配設して構成されるもので、例えば、ＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）に基づく記憶領域を提供する。記憶デバイス群が提供する物理的な記憶領域上には少なくとも１つの論理ボリューム(以下、「ボリューム」)が形成され、このボリュームがホストコンピュータ(以下、「ホスト」)に提供される。ホストは、所定のコマンドをストレージシステムに送信することにより、ボリュームに対してデータの書込み、読み出しを行うことができる。
【０００３】
なお、上記の論理ボリュームは、前記記憶デバイス群によって提供される論理記憶領域の一単位であり、一つあるいは複数の論理ボリュームが作成する論理記憶領域をホストから識別可能に設定することによって、ホストが単位論理記憶領域として認識する論理ユニット（Logical Unit、ＬＵ）が生成される。
【０００４】
従来からストレージシステムには、高性能化が求められている。特許文献１には、ストレージシステムの高性能化に関する技術が開示されている。具体的には、特許文献１は、各ボリュームでデータ処理(データの書込み、読み出しなど)を実行する制御部において、前記各ボリュームを担当するマイクロプロセッサパッケージ(MicroProcessor PacKage、以下、「ＭＰＰＫ」）を予め決めておき、処理に必要となる制御情報をＭＰＰＫ内のローカルメモリに格納しておく技術を開示している。また、あるボリュームの処理を担当するＭＰＰＫを別のＭＰＰＫに切り替えする技術も開示している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２６９４２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ストレージシステムは、複数のボリュームを利用する種々のストレージ機能を有する。例えば、一のボリュームに格納されているデータを他のボリュームにコピーするボリュームコピー機能がある。ボリュームコピー機能は、コピー元とコピー先の二つのボリュームを関連付け、コピー元のボリュームからコピー先のボリュームへデータをコピーする処理であり、例えばリモートコピー処理が含まれる。
【０００７】
特定のボリュームに関するデータ処理を担当するＭＰＰＫを予め決めておく技術に、ストレージ機能を適用する場合、ストレージ機能の実現方法として、主に二つの方法が考えられる。第一の方法は、ストレージ機能により関連付けられる複数のボリュームを、同一のＭＰＰＫに担当させる方法である。第二の方法は、複数のＭＰＰＫ同士が連携しながら処理（コピー元ボリュームからコピー先ボリュームへのデータのコピーなど）を行う方法である。
【０００８】
第一の方法には、ＭＰＰＫの連携オーバヘッドが発生しないというメリットがある反面、一つのＭＰＰＫが多数のボリュームを担当することとなり、特定のＭＰＰＫに負荷が集中する結果となるおそれがある。第二の方法では、各ＭＰＰＫが担当するボリューム数を平準化できる反面、複数ＭＰＰＫ間での連携オーバヘッドを解消することはできない。このように、各方法には一長一短がある。また、ストレージ機能の仕様や動作によって適している方法が異なる。
【０００９】
特定のボリュームに関するデータ処理を担当するＭＰＰＫを予め決めておく方法を採用した場合、ホストから発行されるＩＯ量の変化、あるいはあるストレージ機能が適用されたボリュームを、同一ＭＰＰＫが担当するように、担当ＭＰＰＫを切り替え切り替えすることなどにより、各ＭＰＰＫの負荷が変動する。ＭＰＰＫの負荷が変動した場合、ボリュームの担当ＭＰＰＫを切り替え切り替えすることで、各ＭＰＰＫの負荷を均等にすることができる。しかしながら、特許文献１に開示されている技術では、「ストレージ機能の設定によるボリューム同士の関連」、及び「ストレージ機能の処理負荷」は考慮されていない。このため、次のような問題が発生する可能性がある。
【００１０】
（１）ストレージ機能によって関連付けられている複数のボリュームの担当ＭＰＰＫが同一であるとき、当該複数のボリュームの一部のボリュームの担当ＭＰＰＫのみを切り替え切り替えしてしまい、ストレージ機能の性能低下を招くおそれがある。例えば、上述の第一の方法が適しているストレージ機能によって、複数のボリュームの担当ＭＰＰＫが同一化されている場合、一部のボリュームの担当ＭＰＰＫが切り替え切り替えられると、ＭＰＰＫ間の通信を伴う第二の方法により処理を実現しなければならなくなる。
【００１１】
（２）第一の方法が適しているストレージ機能によって関連付けられている全ボリュームの担当ＭＰＰＫが、ストレージ機能の処理負荷を考慮せずに切り替え切り替えされた場合、新しい担当ＭＰＰＫが過負荷になるおそれがある。
【００１２】
本発明は、上記の、及び他の課題を解決するためになされたもので、その一つの目的は、ストレージシステムが備える複数の論理記憶領域について入出力処理を行うプロセッサの通信オーバヘッド増大を防止し、もってストレージシステムの処理効率向上を可能とするストレージシステム及びストレージシステムの処理効率向上方法を提供することである。
【課題を解決するための手段】
【００１３】
上記の、及び他の目的を達成するための、本発明の一態様は、外部装置のデータ記憶領域として使用される複数の単位論理記憶領域を提供する記憶媒体を備えた記憶装置と、前記記憶装置と通信可能に接続されており、前記外部装置から前記各単位論理記憶領域に対するデータＩＯ処理を実行する複数の演算装置とを備えたストレージシステムであって、前記各単位論理記憶領域と、当該単位論理記憶領域の前記データＩＯ処理を実行する前記演算装置とを対応付けて保持している担当演算装置指定部と、前記各単位論理記憶領域と、当該単位論理記憶領域について設定されている、前記単位論理記憶領域の使用態様を示す情報であるストレージ機能情報とを対応付けて保持しているストレージ機能保持部と、前記各単位論理記憶領域について、前記ストレージ機能保持部から取得した当該各単位論理記憶領域に設定されているストレージ機能に基づいて、当該各論理記憶領域と対応付けられている前記演算装置を前記担当演算装置指定部から取得して前記各単位論理記憶領域を同一の前記演算装置が担当しているか判定し、同一の前記演算装置が担当していないと判定した場合に、前記単位論理記憶領域を担当しているいずれかの前記演算装置が他の前記単位論理記憶領域を担当するように他の前記単位論理記憶領域を担当する前記演算装置を変更する演算装置変更部とを備え、前記演算装置変更部は、前記各単位論理記憶領域に、常時前記外部装置のデータＩＯを処理する正記憶領域と、前記正記憶領域のある時点における格納データがコピーされる副記憶領域と、前記正記憶領域から前記副記憶領域へコピーされるデータを一時格納する一時記憶領域とで構成されるリモートコピー機能が設定されており、前記正記憶領域と前記一時記憶領域とが正リモートコピーグループを構成し、前記副記憶領域と前記一時記憶領域とが副リモートコピーグループを構成し、前記正リモートコピーグループに属する前記一時記憶領域を担当する前記演算装置を変更するときに、前記正リモートコピーグループを担当する前記演算装置を、前記一時記憶領域を担当する変更先である前記演算装置に変更し、前記副リモートコピーグループに属する前記一時記憶領域を担当する前記演算装置を変更するときに、前記副リモートコピーグループを担当する前記演算装置を、前記一時記憶領域を担当する変更先である前記演算装置に変更するストレージシステムである。
【発明の効果】
【００１４】
本発明によれば、ストレージシステムが備える複数の論理記憶領域について入出力処理を行うプロセッサの通信オーバヘッド増大を防止し、もってストレージシステムの処理効率向上を可能とするストレージシステム及びストレージシステムの処理効率向上方法を提供することができる。
【図面の簡単な説明】
【００１５】
【図１】図１は、本発明の一実施形態による情報処理システム１及びストレージシステム２００の構成例を示す図である
【図２】図２は、ホスト１００として使用することができるコンピュータ１０の構成例を示す図である
【図３】図３は、ストレージシステム２００のメモリパッケージ２２０に格納される制御情報部、プログラム部、及びキャッシュ部の一例を示す図である
【図４】図４は、ボリュームテーブル２２１１の一例を示す図である。
【図５】図５は、メモリ２６２に格納される制御情報の一例を示す図である。
【図６】図６は、メモリ２６２に格納される担当ＭＰＰＫテーブル２６３の一例を示す図である。
【図７】図７は、制御情報部２２１に格納される担当ＭＰＰＫテーブル２２１２の一例を示す図である。
【図８】図８は、実施例１の切り替え開始プログラムの処理の一例を示す図である。
【図９】図９は、実施例１のＩＯプログラムの処理の一例を示す図である。
【図１０】図１０は、実施例１の担当切り替え可否チェックプログラムの処理の一例を示す図である。
【図１１】図１１は、実施例１の担当切り替えプログラムの処理の一例を示す図である。
【図１２】図１２は、ローカルコピーテーブル２２１３の一例を示す図である。
【図１３】図１３は、コピープログラムの処理の一例を示す図である。
【図１４】図１４は、ローカルコピーの設定を考慮した切り替え開始プログラムの処理の一例を示す図である。
【図１５】図１５は、担当切り替え可否チェックプログラムの処理の別の一例を示す図である。
【図１６】図１６は、実施例１の拡張ボリュームテーブル２２１４の一例を示す図である。
【図１７】図１７は、拡張ボリュームへのＩＯを処理するＩＯプログラムの処理の一例である。
【図１８】図１８は、拡張ボリュームの設定を考慮した切り替え開始プログラムの処理の一例を示す図である。
【図１９】図１９は、リモートコピー機能の構成の一例を示す図である。
【図２０】図２０は、リモートコピーテーブル２２１５の一例を示す図である。
【図２１】図２１は、リモートコピー機能で実行されるジャーナル作成処理フローの一例を示す図である。
【図２２】図２２は、リモートコピー機能で実行されるリストア処理フローの一例を示す図である。
【図２３】図２３は、リモートコピーグループの担当ＭＰＰＫを管理するリモートコピー用担当ＭＰＰＫテーブル２２１６の一例を示す図である。
【図２４】図２４は、リモートコピーの設定を考慮した切り替え開始プログラムの処理の一例を示す図である。
【図２５】図２５は、リモートコピーグループの担当ＭＰＰＫを切り替えるためのリモートコピープログラムの処理の一例を示す図である。
【図２６】図２６は、ＭＰＰＫ使用率テーブル２２１７の一例を示す図である。
【図２７】図２７は、各種処理の処理コストを格納する処理コストテーブル２２１８の一例を示す図である。
【図２８】図２８は、ＭＰＰＫ間の負荷の偏りを監視するモニタプログラムの処理の一例を示す図である。
【図２９】図２９は、負荷計算プログラムの処理の一例を示す図である。
【図３０】図３０は、拡張ボリュームの負荷を計算する拡張ボリューム負荷計算プログラムの処理の一例を示す図である。
【図３１】図３１は、ローカルコピーの負荷を計算するローカルコピー負荷計算プログラムの処理の一例を示す図である。
【図３２】図３２は、リモートコピーの負荷を計算するリモートコピー負荷計算プログラムの処理の一例を示す図である。
【発明を実施するための形態】
【００１６】
以下、本発明の好適な実施形態について、実施例に即して添付図面を参照しながら説明する。
【００１７】
［実施例１］
図１から図２２を用いて、本発明の実施例１による情報処理システム１を説明する。  
まず、図１を用いて情報処理システム１のシステム構成について説明する。次に、図２から図７を用いて、情報処理システム１に備えられるストレージシステム２００において必要となる制御情報（テーブル）について説明する。そして、図７から図１０を用いてボリュームの担当ＭＰＰＫを切り替えする処理について説明する。最後に、図１１から図２２を用いて、ストレージシステム２００によって提供されるストレージ機能の概要、ストレージ機能が適用されているボリュームの担当ＭＰＰＫを切り替えする処理、リモートコピーグループ（後述）の担当ＭＰＰＫを切り替えする処理について説明する。
【００１８】
情報処理システム１の構成
図１は、本実施例による情報処理システム１の全体構成の一例を示している。情報処理システム１は、ホスト１００とストレージシステム２００とを備えている。ストレージシステム２００は、後述するように、ホスト１００が処理するデータを格納するための記憶領域を提供する記憶媒体を備える装置である。ホスト１００とストレージシステム２００とは、ネットワーク１１０によって接続される。ネットワーク１１０としては、例えばＳＡＮ（Storage Area Network）である。通信プロトコルとして、Fibre Channelなどを採用することができる。
【００１９】
ホスト１００
外部装置であるホスト１００は、ＵＮＩＸ（登録商標）等の適宜のＯＳ（Operation System）が稼働しているコンピュータであり、そのＯＳ上で、例えばデータベース管理システムなどのアプリケーションソフトウェアを実行することで、所定の業務処理を行う装置である。ホスト１００で実行される業務処理に用いられるデータの一部、又は全ては、ストレージシステム２００によって提供される記憶領域に格納される。ホスト１００はストレージシステム２００に格納するデータの書き込み及び読み出しを行うため、ストレージシステム２００に対してネットワーク１１０を用いてリード要求、ライト要求を発行する。
【００２０】
図２に、ホスト１００として使用することができるコンピュータ１０の構成例を示している。このコンピュータ１０は、中央処理装置１１（例えばＣＰＵ（Central Processing Unit）やＭＰＵ（Micro Processing Unit）、以下簡単のため「ＣＰＵ」と称する）、主記憶装置１２（例えばＲＡＭ（Random Access Memory）やＲＯＭ（Read Only Memory））、補助記憶装置１３（例えばＨＤＤ）、ユーザの操作入力を受け付ける入力装置１４（例えばキーボードやマウス）、出力装置１５（例えば液晶モニタ）、他の装置との間の通信を実現する通信インタフェース１６（例えばＮＩＣ（Network Interface Card）やＨＢＡ（Host Bus Adapter）)を備えている。
【００２１】
保守端末２７０
次に、保守端末２７０について説明する。保守端末２７０は、後述するストレージシステム２００の動作状態をモニタし、あるいは例えば保守上必要な操作命令を与えるための端末であり、例えばＳＶＰ（SerVice Processor）である。
【００２２】
図１に示すように、保守端末２７０は、保守ポート２７５、ＣＰＵ２７１、メモリ２７２、及び入出力部２７４を備え、これらの間は内部ネットワークによって互いに通信可能に接続されている。保守ポート２７５は、後述するストレージシステム２００のＭＰＰＫ２１０にある保守ポート２１３と接続されており、ＭＰＰＫ２１０から稼動情報を取得し、あるいはＭＰＰＫ２１０に保守操作命令を送信するために使用するポートである。
【００２３】
メモリ２７２には、前記ＭＰＰＫ２１０に関する処理を実行するための保守用プログラム２７３が格納されており、ＣＰＵ２７１がメモリ２７２からこの保守用プログラム２７３を読み出し実行することで、前記したＭＰＰＫ２１０に関する保守を実現する。なお、メモリ２７２は、ＭＰＰＫ２１０から得た情報を格納するためにも使用される。
【００２４】
入出力部２７４は、ユーザからの操作入力を受け付けるためのキーボード、マウス等の入力装置、及びユーザにＭＰＰＫ２１０から取得したストレージシステム２００の稼動情報を表示するためのディスプレイ装置等の出力装置を含む。なお、保守端末２７０は、ストレージシステム２００の内部ネットワーク２８０によってＭＰＰＫ２１０の保守ポート２１３に接続されている。
【００２５】
ストレージシステム２００
次に、本実施例のストレージシステム２００の構成を、図１を参照して説明する。本実施例のストレージシステム２００は、大きく分けて、フロントエンドパッケージ２６０（Front End Package、以下「ＦＥパッケージ」）、マイクロプロセッサパッケージ２１０（ＭＰＰＫ）、メモリパッケージ２２０、バックエンドパッケージ２３０（Back End Package、以下「ＢＥパッケージ」）、及びディスク装置（記憶装置）２４０を備え、これらは、内部ネットワーク２８０を介して相互に通信可能に接続されている。
【００２６】
なお、ストレージシステム２００は、それぞれ複数のＦＥパッケージ２６０、メモリパッケージ２２０、ＢＥパッケージ２３０、ディスク装置２４０、及び３以上のＭＰＰＫ２１０を有するように構成してもよい。
【００２７】
ＦＥパッケージ２６０は、通信ポート２６１とメモリ２６２とを有する。通信ポート２６１は、ホスト１００がストレージシステム２００にＩＯ要求を発行するために用いるポート（図２の例では、通信インタフェース１６である。）と接続されており、ホスト１００からライト要求及びリード要求を受け付けることができる。なお、ホスト１００のポートとポート２６１は、ネットワーク１１０によって直接接続してもよいし、１以上のスイッチなどを介して間接的に接続してもよい。
【００２８】
メモリ２６２は例えばＲＡＭで構成されており、ホスト１００から受領したリード要求及びライト要求を、当該要求を処理するＭＰＰＫ２１０（要求先のボリュームに関するデータ処理を担当しているＭＰＰＫ）の情報や、ホスト１００から転送されたデータ、ホスト１００へ転送するデータを一時的に格納する。なお、ＦＥパッケージ２６０は複数のポート２６１とメモリ２６２とを有してもよい。
【００２９】
演算装置であるＭＰＰＫ２１０は、プロセッサ２１１、ローカルメモリ２１２、及び保守ポート２１３を有し、これらは、ネットワーク２１４によって相互に通信可能に接続されている。一つのＭＰＰＫ２１０が、複数のプロセッサ２１１、ローカルメモリ２１２、又は保守ポート２１３を有するとしてもよい。ＭＰＰＫ２１０としては、例えば種々のデュアルコアプロセッサ（Dual Core Processor）、カッドコアプロセッサ（Quad Core Processor）を採用することができ、この場合、それぞれのプロセッサパッケージ内に実装されているコアがプロセッサ２１１に相当する。
【００３０】
プロセッサ２１１は、後述するメモリパッケージ２２０のプログラム部２２２に格納されているプログラムを読み出して実行することで、ホスト１００からのライト要求及びリード要求の処理などを実行する装置である。
【００３１】
ローカルメモリ２１２は、例えばＲＡＭで構成され、プロセッサ２１１が実行するプログラムのデータを一時格納しておく、及びＨＤＤ２４０やメモリ２２０に格納されているデータ（後述する制御情報、業務データ、プログラムなど）を格納するためのキャッシュメモリとして使用される。ローカルメモリ２１２は、プロセッサ２１１からの距離が後述するメモリパッケージ２２０及びディスク装置２４０に比べ近いため、プロセッサ２１１がより高速にアクセスすることが可能となる。
【００３２】
保守ポート２１３は、ネットワーク２８０を介して、保守端末２７０にある保守ポート２７５に接続されている。保守ポート２１３は、保守端末２７０にＭＰＰＫ２１０の稼動情報を送信し、あるいは保守端末２７０からの保守操作命令を受け付けるために使用される通信ポートである。
【００３３】
メモリパッケージ２２０は、制御情報部２２１、プログラム部２２２、及びキャッシュ部２２３を有する。プログラム部２２２には、ストレージシステム２００による処理を実現するためのプログラムが記録されている。制御情報部２２１には、これらプログラム部２２２のプログラムが利用する制御情報が、例えばテーブルの形式で記録されている。メモリパッケージ２２０に格納されたプログラム及びプログラムが利用する制御情報は、ＭＰＰＫ２１０のプロセッサ２１１がメモリパッケージ２２０から読み出し処理する。プログラム部２２２に記録されるプログラム、及び制御情報部２２１に記録される制御情報の詳細は後述する。
【００３４】
キャッシュ部２２３には、ＨＤＤ２４０に格納されるデータ及びディスク装置２４０から読み出したデータを一時的に格納する。メモリパッケージ２２０は、ディスク装置２４０に比べて高速な記憶媒体であるＲＡＭ等で構成されるため、ディスク装置２４０に格納される使用頻度の高いデータなどを、キャッシュ部２２３に格納することにより、常に全てのデータＩＯについてディスク装置２４０にアクセスする場合に比べて、ホスト１００からのリード要求、ライト要求などの処理の高速化を図ることができる。なお、メモリパッケージ２２０は、障害発生時におけるデータ消失などを避けるために多重化してもよい。
【００３５】
ＢＥパッケージ２３０は、ポート２３１とメモリ２３２とを有する。ポート２３１は、ネットワーク２８３を介してディスク装置２４０に接続されており、ホスト１００からのライトデータをディスク装置２４０に書き込んだり、ホスト１００からのリード要求に応じてディスク装置２４０からデータを読み出したりするために使用される通信ポートである。メモリ２３２には、ディスク装置２４０へ転送するデータ、及びディスク装置２４０から読み出したデータを一時的に格納する。なお、ＢＥパッケージ２３０は２以上のポート２３１及びメモリ２３２を有しても良い。
【００３６】
ディスク装置２４０は、本実施例では例えばハードディスクドライブ（Hard Disk Drive、「ＨＤＤ」）によって構成されており、ホスト１００によって実行されるアプリケーションソフトウェア等がデータを格納するための論理記憶領域を提供する物理記憶装置である。
【００３７】
１つ以上のディスク装置２４０を、パリティグループという単位でまとめてＲＡＩＤ（Redundant Arrays of independent (or Inexpensive) Disks）で運用し、高信頼化を図ることができる。前記のように、ディスク装置２４０からなるパリティグループを一つ以上の論理記憶領域に分割して、それぞれを単位論理記憶領域である論理ボリューム２５０としている。
【００３８】
なお、本実施例では、物理的な記憶媒体としてＨＤＤ２４０を使用したが、フラッシュメモリ、半導体ドライブ（Solid State Drive、「ＳＳＤ））、あるいはＤＶＤなどの光ディスクを記録媒体として採用してもよい。
【００３９】
メモリパッケージ２２０の構成
図３にはメモリパッケージ２２０の構成例を示している。メモリパッケージ２２０の制御情報部２２１には、ストレージシステム２００がホスト１００からのデータＩＯ処理、及び本発明に関する処理を実行するために用いる制御情報が、テーブルの形式で格納されている。本実施例では、制御情報部２２１には、ボリュームテーブル２２１１、担当ＭＰＰＫテーブル２２１２、ローカルコピーテーブル２２１３、拡張ボリュームテーブル２２１４、リモートコピーグループテーブル２２１５、リモートコピー用担当ＭＰＰＫテーブル２２１６、ＭＰＰＫ使用率テーブル２２１７、及び処理コストテーブル２２１８が格納されている。
【００４０】
プログラム部２２２には、ＭＰＰＫ２１０によって実行されるプログラムが格納されている。本実施例では、プログラム部２２２には、切り替え開始プログラム２２２１、ＩＯプログラム２２２２、切り替え可否チェックプログラム２２２３、担当切り替えプログラム２２２４、モニタプログラム２２２５、負荷計算プログラム２２２６、拡張ボリューム負荷計算プログラム２２２７、ローカルコピー負荷計算プログラム２２２８、及びリモートコピー負荷計算プログラム２２２９が格納されている。これらのプログラムを、演算装置（ＭＰＰＫ）変更部と総称することがある。各テーブル、プログラムの詳細は、関連図面を参照して後述する。なお、キャッシュ部２２３は、上記したように、ホスト１００とディスク装置２４０との間で授受されるデータの一時記憶領域として使用されるもので、詳細な説明は省略する。
【００４１】
制御情報部２２１
次に、メモリパッケージ２２０の制御情報部２２１に格納されるテーブルについて説明する。図３には、制御情報部２２１内に格納されるボリュームテーブル２２１１の一例を示す。
【００４２】
ボリュームテーブル２２１１は、ディスク装置２４０によって提供される単位論理記憶領域であるボリューム２５０に関する属性情報を格納する。ボリュームテーブル２２１１は、ボリューム番号欄２２１１１、機能ビット欄２２１１２、使用中ジョブ情報欄２２１１３、ライト数欄２２１１４、及びリード数欄２２１１５を備える。なお、以下簡単のため、ボリュームテーブル２２１１等のテーブルに設定された各欄に記録される情報自体についても、例えば「ボリューム番号２２１１１」等のように、その情報が記録される欄に付した符号と同一の符号を付けて表すものとする。
【００４３】
ボリューム番号欄２２１１１には、ストレージシステム２００内部で各ボリューム２５０を一意に識別するための識別符号であるボリューム番号が記録される。ボリューム番号は、ディスク装置２４０によって提供される複数のボリューム２５０に対して、ＭＰＰＫ２１０がシリアルにユニークな番号を付与する。
【００４４】
機能ビット欄２２１１２には、ボリューム番号２２１１１によって識別されるボリューム２５０に適用されているストレージ機能（後述）の情報を表す機能ビット（機能情報）が記録される。使用中ビット欄２２１１３には、ボリューム番号２２１１１によって識別されるボリューム２５０を使用中のジョブが存在するかを表す情報である使用中ビットが記録される。当該ボリューム２５０を使用中のジョブが存在する場合、使用中ビット欄２２１１３には、当該ジョブに付されたジョブ番号を記録する。
【００４５】
ライト数欄２２１１４には、ボリューム番号２２１１１によって識別されるボリューム２５０が単位時間内にホスト１００から受領したライト要求の回数を表す情報であるライト数が記録される。リード数欄２２１１５には、ボリューム番号２２１１１によって識別されるボリューム２５０が単位時間内にホスト１００から受領したリード要求の回数を表す情報であるリード数が記録される。ライト数２２１１４及びリード数２２１１５は、例えばあるボリューム２５０を担当しているＭＰＰＫ２１０が直近の単位時間に受けたライト数及びリード数をカウントしておき、適宜の時間間隔でライト数欄２２１１４及びリード数欄２２１１５の記録を更新するように構成することができる。
【００４６】
図４の例では、ボリューム番号２２１１１が１であるボリューム２５０について、ストレージ機能が適用されていないため機能ビット欄２２１１２に記録がなく、使用中ジョブ番号欄２２１１３にはジョブ番号１，２，５が記録され、これらのジョブによって使用されていることを示している。そして、ライト数欄２２１１４及びリード数欄２２１１５に示されているように、ボリューム番号２２１１１が１であるボリューム２５０は、ホスト１００からライト要求を２００回、リード要求を１００回受領したことを示している。ボリュームテーブル２２１１の各欄に記録される情報は、各ボリューム２５０を担当するＭＰＰＫ２１０が適時に更新する。
【００４７】
次に、特定のボリューム２５０と、そのボリューム２５０の処理を担当するＭＰＰＫ２１０との関係について説明する。本実施例のストレージシステム２００では、各ボリューム２５０に関するデータ処理（ホスト１００からボリューム２５０へのＩＯ処理など）を担当するＭＰＰＫ２１０が予め決定されている。このように、各ボリューム２５０のデータ処理を担当するＭＰＰＫ２１０を予め決めておくことで、ボリューム２５０の特定のデータ処理に必要となる制御情報へアクセスするＭＰＰＫ２１０を一つに限定することができる。
【００４８】
特定ボリューム２５０に関するデータ処理を行うＭＰＰＫ２１０が予め決定されていれば、他のＭＰＰＫ２１０と通信を行う必要がなく、処理に必要となる制御情報を１のＭＰＰＫ２１０のローカルメモリ２１２に格納することができ、ボリューム２５０の処理を高速化することができる。例えば、ボリューム２５０のデータのうちダーティデータ（キャッシュ部２２３には書き込まれているがまだディスク装置２４０にデステージされていないデータ）がどのアドレスに存在するかを示す情報、あるいは後述するローカルコピー機能における差分データを示すコピー済みビットマップをローカルメモリ２１２に置くことで、ＭＰＰＫ２１０がそれらにアクセスする処理を高速化できる。
【００４９】
特定のボリューム２５０を担当する担当ＭＰＰＫ２１０を決める場合、ＦＥパッケージ２６０は、ホスト１００からＩＯを受領すると、ＩＯ発行先ボリューム２５０の情報に基づき、ＩＯ要求を担当ＭＰＰＫ２１０へ割り振る必要がある。ＦＥパッケージ２６０は、この割り振りを実現するための情報として担当ＭＰＰＫテーブル２６３を保持している。
【００５０】
図５には、メモリ２６２の構成例を示している。メモリ２６２には、ＦＥパッケージ２６０の処理において使用される担当ＭＰＰＫテーブル２６３が格納されている。図６に担当ＭＰＰＫテーブル２６３の一例を示している。
【００５１】
担当ＭＰＰＫテーブル２６３は、ボリューム番号欄２６３１及び担当ＭＰＰＫ番号欄２６３２を備える。ボリューム番号欄２６３１には、ボリュームテーブル２２１１のボリューム番号欄２２１１１と同じボリューム２５０の識別符号であるボリューム番号が記録される。
【００５２】
担当ＭＰＰＫ番号欄２６３２には、ボリューム番号２６３１によって識別されるボリューム２５０の処理（当該ボリューム２５０へのＩＯ処理など）を担当しているＭＰＰＫ２１０の識別番号である担当ＭＰＰＫ番号が記録される。担当ＭＰＰＫ番号２６３２は、例えばストレージシステム２００の運用開始前に、あらかじめシステム管理者が各ＭＰＰＫ２１０に対して一意に付与しておく識別番号である。ＦＥパッケージ２６０は、ホスト１００からＩＯを受領した場合、そのＩＯ対象のボリューム２５０が有するボリューム番号２６３１により、担当ＭＰＰＫテーブル２６３を検索し、ＩＯ対象ボリューム２５０を担当しているＭＰＰＫ２１０のＭＰＰＫ番号２６３２を取得して、当該ＭＰＰＫ２１０にＩＯを送信する。
【００５３】
担当ＭＰＰＫテーブル２２１２は、メモリパッケージ２２０内の制御情報部２２１にも保持されている。図７に制御情報部２２１内にある担当ＭＰＰＫテーブル２２１２の一例を示している。
【００５４】
制御情報部２２１内の担当ＭＰＰＫテーブル２２１２は、ボリューム番号欄２２１２１、担当ＭＰＰＫ番号欄２２１２２、切り替え中ビット欄２２１２３、及び切り替え先ＭＰＰＫ番号欄２２１２４を備える。ボリューム番号欄２２１２１及び担当ＭＰＰＫ番号欄２２１２２は、図６の担当ＭＰＰＫテーブル２６３のボリューム番号欄２６３１及び担当ＭＰＰＫ番号欄２６３２に該当する。
【００５５】
切り替え中ビット欄２２１２３及び切り替え先ＭＰＰＫ番号欄２２１２４に記録される情報は、担当ＭＰＰＫ２１０を切り替える際に必要となる情報である。切り替え中ビット欄２２１２３には、対応するボリューム番号２２１２１で特定されるボリューム２５０の担当ＭＰＰＫ２１０が切り替え処理中であることを意味する情報である切り替え中ビットが記録される。切り替え中ビット２２１２３の値が「ＯＮ」である場合、当該担当ＭＰＰＫ２１０について切り替え処理が実行されていることを示し、その値が「ＯＦＦ」である場合、当該担当ＭＰＰＫ２１０が切り替え処理中でないことを示す。切り替え先ＭＰＰＫ番号欄２２１２４には、担当ＭＰＰＫ切り替え処理により新しく担当ＭＰＰＫ２１０となるＭＰＰＫ２１０の番号である切り替え先ＭＰＰＫ番号が記録される。
【００５６】
図７の例では、ボリューム番号２２１２１が１であるボリューム２５０の担当ＭＰＰＫ２１０が、ＭＰＰＫ番号が１のＭＰＰＫ２１０から、ＭＰＰＫ番号が２のＭＰＰＫ２１０へ切り替え中であることを示している。なお、切り替え中ビット２２１２３が「ＯＦＦ」である場合、切り替え先ＭＰＰＫ２１０が存在しないので、図７では、切り替え先ＭＰＰＫ２１０が存在しないことを示す「−」符号を切り替え先ＭＰＰＫ番号欄２２１２４に記録している。
【００５７】
切り替え中ビット２２１２３を用いて、あるボリューム２５０の担当ＭＰＰＫ２１０が切り替え中であるかを管理する理由は次の通りである。あるボリューム２５０について担当ＭＰＰＫ２１０をＭＰＰＫ番号が１のＭＰＰＫ２１０（以下「」ＭＰＰＫ１）からＭＰＰＫ番号が２のＭＰＰＫ２１０（以下「ＭＰＰＫ２」）へ切り替えするとき、ＭＰＰＫ１に実行中の処理が存在する可能性がある。このＭＰＰＫ１で実行中の処理の完了を待たずに、ＭＰＰＫ２で新たな処理を開始すると、ＭＰＰＫ１とＭＰＰＫ２の両方がローカルメモリ２１２にそれぞれ当該実行中処理についての制御情報を持ち、かつ、当該制御情報を更新する結果となる。このため、両者のローカルメモリ２１２に記録される制御情報が不整合な状態になる可能性がある。この不整合な状態が起こるのを回避するため、切り替え中ビット２２１２３を設け、切り替え中のＭＰＰＫ２１０が識別可能となるようにしている。
【００５８】
図７の例で、ＭＰＰＫ１に実行中の処理が残っている間は、切り替え中ビット２２１２３をＯＮに設定する。そして、切り替え中ビット２２１２３がＯＮの間は、担当ＭＰＰＫテーブル２２１２の担当ＭＰＰＫ番号２２１２２を切り替えせず、切り替え先ＭＰＰＫ２１０（図７の例では切り替え先ＭＰＰＫ番号が２であるＭＰＰＫ２１０）での新しい処理を実行しないように制御する。
【００５９】
なお、特定のボリューム２５０への新たなＩＯ要求が切り替え元ＭＰＰＫ２１０へ発行され続けた場合、切り替え元ＭＰＰＫ２１０で実行中の処理は完了しない。この事態を防ぐため、当該ボリューム２５０への新たなＩＯは、ＦＥパッケージ２６０によって切り替え先ＭＰＰＫ２１０へ送信されるように構成している。担当ＭＰＰＫ２１０切り替え処理については、図８から図１１を参照して詳述する。
【００６０】
担当ＭＰＰＫ切り替え処理
図８から図１１を参照して、担当ＭＰＰＫ２１０の切り替え切り替え処理と、切り替え切り替え中のＩＯ処理の一例を説明する。これらの処理は、ストレージシステム２００のプロセッサ２１１が、メモリパッケージ２２０のプログラム部２２２に格納されている切り替え開始プログラム２２２１、ＩＯプログラム２２２２、担当切り替え可否チェックプログラム２２２３、及び担当切り替えプログラム２２２４を実行することで実現される。
【００６１】
図８に、切り替え開始プログラム２２２１による処理フローの一例を示す。図８の切り替え開始プログラム２２２１は、担当ＭＰＰＫテーブル２２１２に記録されている切り替え中ビット２２１２３などを更新し、担当ＭＰＰＫ２１０の切り替え処理を開始するプログラムである。以下、処理主体をプログラムとして記載した場合は、当該プログラムがプロセッサ２１１で実行されて該当処理が実現されることを意味するものとする。
【００６２】
切り替え開始プログラム２２２１は、保守端末２７０からの入力、あるいは他のプログラムからのアクセスによって起動される。このとき、切り替え開始プログラム２２２１は、担当ＭＰＰＫ２１０が切り替えられることとなるボリューム（以下「切り替え対象ボリューム」）２５０のボリューム番号２２１２１、及び切り替え先ＭＰＰＫ２１０（新しい担当ＭＰＰＫ２１０）のＭＰＰＫ番号２２１２４を受領する。
【００６３】
切り替え開始プログラム２２２１は、担当ＭＰＰＫテーブル２２１２から切り替え対象ボリューム２５０に関するエントリを特定する。そして、当該エントリの切り替え中ビット２２１２３をＯＮとし、切り替え先ＭＰＰＫ２１０に指定された切り替え先ＭＰＰＫ２１０のＭＰＰＫ番号２２１２４を登録する（Ｓ１００）。
【００６４】
次に、切り替え開始プログラム２２２１は、ＦＥパッケージ２６０の担当ＭＰＰＫテーブル２６３を更新し（Ｓ１０１）、処理を終了する（Ｓ１０２）。具体的には、担当ＭＰＰＫテーブル２６３の担当ＭＰＰＫ番号欄２６３２に、切り替え先ＭＰＰＫ２１０のＭＰＰＫ番号２２１２４を格納する。これにより、切り替え対象ボリューム２５０へ発行される新たなＩＯは、ＦＥパッケージ２６０によって切り替え先ＭＰＰＫ２１０に送信されることになる。
【００６５】
次に、図９を参照して、担当ＭＰＰＫ２１０切り替え前のＩＯ処理、切り替え中のＩＯ処理、切り替え開始時に切り替え元ＭＰＰＫ２１０で実行中であったＩＯ処理について説明する。
【００６６】
まず、担当ＭＰＰＫ２１０の切り替え前のＩＯ処理について説明する。ＩＯプログラム２２２２は、担当ＭＰＰＫテーブル２２１２を参照して、ＩＯ対象ボリューム２５０の担当ＭＰＰＫ２１０の情報を取得し（Ｓ２００）、切り替え中ビット２２１２３がＯＮであるか否かをチェックする（Ｓ２０１）。切り替え前の場合、切り替え中ビット２２１２３はＯＦＦであるため（Ｓ２０１、Ｎｏ）、処理はＳ２０２へ進む。
【００６７】
ＩＯプログラム２２２２は、ボリュームテーブル２２１１の使用中ジョブ情報欄２２１１３に、実行しようとするジョブ番号を登録する。ジョブ番号は、ストレージシステム２００がジョブを起動する毎に割り当てる番号である。ストレージシステム２００で同時に実行されているジョブのジョブ番号は、それぞれ異なる番号である。この使用中ジョブ情報２２１２３を登録するのは、ボリューム２５０使用中に当該ボリューム２５０の担当ＭＰＰＫ２１０が切り替えられないようにするためである。
【００６８】
次いで、ＩＯプログラム２２２２は、ボリューム２５０に対して指定されたＩＯ処理を実行し（Ｓ２０３）、使用中ジョブ情報欄２２１１３から該当ジョブ番号を削除する（Ｓ２０４）。
【００６９】
次に、ＩＯプログラム２２２２は、担当ＭＰＰＫテーブル２２１２を参照して、ＩＯ対象ボリューム２５０の担当ＭＰＰＫ２１０の情報を取得し、切り替え中ビット２２１２３がＯＮであるか否かをチェックする（Ｓ２０５）。これは、ＩＯ実行中に担当ＭＰＰＫ２１０の切り替えが開始している場合にＳ２０６の処理を実行するためである。Ｓ２０６の処理は後述する。切り替え前のＩＯ処理の場合、切り替え中ビット２２１２３はＯＦＦであるため、処理を終了する（Ｓ２０７）。
【００７０】
次に、担当ＭＰＰＫ切り替え中のＩＯ処理について説明する。担当ＭＰＰＫ２１０の切り替え中にＭＰＰＫ２１０が受領するＩＯとしては、ＦＥパッケージ２６０が切り替え元ＭＰＰＫ２１０に振り分けたＩＯと、ＦＥパッケージ２６０が切り替え先ＭＰＰＫ２１０に振り分けたＩＯの二つが考えられる。
【００７１】
処理Ｓ２０１において、担当ＭＰＰＫ２１０切り替え中の場合（Ｓ２０１、Ｙｅｓ）、ＩＯプログラム２２２２はＳ２０８へ進む。Ｓ２０８で、ＩＯプログラム２２２２は、自ＭＰＰＫ２１０のＭＰＰＫ番号と、担当ＭＰＰＫテーブル２２１２の切り替え先ＭＰＰＫ番号２２１２４を比較する（Ｓ２０８）。ＭＰＰＫ番号が異なる場合（Ｓ２０８、Ｎｏ）、ＩＯは、ＦＥパッケージ２６０によって切り替え元ＭＰＰＫ２１０へ振り分けられたＩＯであると特定される。
【００７２】
一方、自ＭＰＰＫ２１０のＭＰＰＫ番号と、担当ＭＰＰＫテーブル２２１２の切り替え先ＭＰＰＫ番号２２１２４とが同一の場合（Ｓ２０８、Ｙｅｓ）、ＩＯは、ＦＥパッケージ２６０によって切り替え先ＭＰＰＫ２１０へ振り分けられたＩＯであると特定される。切り替え先ＭＰＰＫ２１０へ振り分けられたＩＯの場合、ＩＯプログラム２２２２は、切り替え中ビット２２１２３を繰り返し参照し（Ｓ２０９）、切り替えが完了するのを待つ（Ｓ２０９、Ｎｏ）。切り替え中ビット２２１２３がＯＦＦであった場合（Ｓ２０９、Ｙｅｓ）、切り替えが完了したと判定し、ＩＯプログラム２２２２は、Ｓ２０２からＳ２０７を実行してＩＯ処理を完了する。
【００７３】
一方、処理Ｓ２０８で自ＭＰＰＫ２１０のＭＰＰＫ番号と、担当ＭＰＰＫテーブル２２１２の切り替え先ＭＰＰＫ番号２２１２４とが同一でないと判定され（Ｓ２０８、Ｎｏ）、当該ＩＯが切り替え元ＭＰＰＫ２１０へ振り分けられたＩＯであると特定された場合、ＩＯプログラム２２２２は、切り替え先ＭＰＰＫ２１０へＩＯ処理を依頼する（Ｓ２１０）。依頼を受領した切り替え先ＭＰＰＫ２１０のＩＯプログラム２２２２は、Ｓ２００からＳ２１０を実行することでＩＯを処理する。
【００７４】
切り替え元ＭＰＰＫ２１０で実行中の処理が全て完了した場合、担当ＭＰＰＫテーブル２２１２の担当ＭＰＰＫ番号欄２２１２２に切り替え先ＭＰＰＫ番号２２１２４を書き込み、切り替え中ビット２２１２３をＯＦＦすることで、切り替え先ＭＰＰＫ２１０での処理を開始する必要がある。これを実現するために、切り替え元ＭＰＰＫ２１０で切り替え対象ボリューム２５０を使用しているジョブが存在しなくなったことを検出し、担当ＭＰＰＫテーブル２２１２の担当ＭＰＰＫ番号、切り替え中ビットを更新する。
【００７５】
切り替え対象ボリューム２５０を使用しているジョブが存在しないことをチェックする契機として、ＩＯ完了契機、ＩＯとは独立の契機の二つが考えられる。ＩＯ完了契機でチェックするための処理がＳ２０６である。Ｓ２０５で切り替え中ビット２２１２３がＯＮと判定された場合（Ｓ２０５、Ｙｅｓ）、ＩＯプログラム２２２２は担当切り替え可否チェックプログラム２２２３を起動する（Ｓ２０６）。
【００７６】
なお、Ｓ２０２からＳ２０５の間に、担当ＭＰＰＫ２１０の切り替えが開始された場合、Ｓ２０５実行時に切り替え中ビット２２１２３がＯＮになっている可能性がある。ＩＯとは独立の契機の場合、監視プログラム（図示しない）などが、定期的に担当ＭＰＰＫテーブル２２１２を参照して、切り替え中ビット２２１２３がＯＮに設定されているボリューム２５０に対して、担当切り替え可否チェックプログラム２２２３を起動する。
【００７７】
図１０に、担当切り替え可否チェックプログラム２２２３による処理フローの一例を示している。担当切り替え可否チェックプログラム２２２３は、切り替え対象ボリューム２５０の担当ＭＰＰＫ２１０を切り替えることができるか否かをチェックするためのプログラムである。具体的には、担当切り替え可否チェックプログラム２２２３は、切り替え対象ボリューム２５０を使用中のジョブが存在するか否かによって切り替え可否を判定する。
【００７８】
まず、担当切り替え可否チェックプログラム２２２３は、切り替え対象ボリューム２５０を使用中のジョブが存在するか否かをチェックする（Ｓ３００）。この処理は、ボリュームテーブル２２１１の使用中ジョブ情報２２１１３を参照することで実現する。切り替え対象ボリューム２５０を使用中のジョブが存在する場合（Ｓ３００、Ｙｅｓ）、担当ＭＰＰＫ２１０を切り替えることができないため、担当切り替え可否チェックプログラム２２２３は処理を終了する（Ｓ３０２）。一方、切り替え対象ボリューム２５０を使用中のジョブが存在しない場合（Ｓ３００、Ｎｏ）、担当切り替え可否チェックプログラム２２２３は担当切り替えプログラム２２２４をコールし（Ｓ３０１）、処理を終了する（Ｓ３０２）。
【００７９】
図１１に担当切り替えプログラム２２２４による処理フローの一例を示している。担当切り替えプログラム２２２４は、担当ＭＰＰＫテーブル２２１２の担当ＭＰＰＫ番号２２１２２、切り替え中ビット２２１２３、及び切り替え先ＭＰＰＫ番号２２１２４を更新することなどで、切り替え対象ボリューム２５０の担当ＭＰＰＫ２１０を実際に切り替えるためのプログラムである。担当切り替えプログラム２２２４の処理を実行することにより、切り替え先ＭＰＰＫ２１０で、切り替え対象ボリューム２５０の処理を開始することができる。
【００８０】
担当切り替えプログラム２２２４は、切り替え元ＭＰＰＫ２１０のローカルメモリ２１２から切り替え対象ボリューム２５０に関する制御情報を、メモリパッケージ２２０の制御情報部２２１に書き出す（Ｓ４００）。この制御情報は、ＭＰＰＫ２１０がボリューム２５０に対してデータＩＯ処理を実行する際に使用する情報であり、例えば対象ボリューム２５０のダーティデータが格納されているキャッシュ部２２３のアドレスを示す情報を含む。
【００８１】
次に、担当切り替えプログラム２２２４は、担当ＭＰＰＫテーブル２２１２の担当ＭＰＰＫ番号２２１２２、切り替え中ビット２２１２３、及び切り替え先ＭＰＰＫ番号２２１２４を更新する。例えば、担当ＭＰＰＫ２１０を、ＭＰＰＫ１からＭＰＰＫ２へ切り替えする場合、担当切り替えプログラム２２２４は、担当ＭＰＰＫ番号２２１２２を１から２へ切り替えし、切り替え中ビット２２１２３をＯＮからＯＦＦへ切り替えし、切り替え先ＭＰＰＫ番号２２１２４を２から切り替え先ＭＰＰＫ２１０が存在しないことを意味する符号である「−」へ切り替える（Ｓ４０１）。
【００８２】
次いで、担当切り替えプログラム２２２４は、対象ボリューム２５０にいずれかのストレージ機能が設定されているか否かを判定する（Ｓ４０２）。ストレージ機能が設定されている場合（Ｓ４０２、Ｙｅｓ）、担当切り替えプログラム２２２４は、当該ストレージ機能に関する制御情報を、ローカルメモリ２１２からメモリパッケージ２２０の制御情報部２２１に書き出し（Ｓ４０３）、処理を終了する（Ｓ４０４）。機能が設定されていない場合、Ｓ４０３をスキップし処理を終了する（Ｓ４０４）。
【００８３】
以下、ストレージ機能が適用されたボリューム２５０の担当ＭＰＰＫ２１０を切り替える処理について説明する。上述したように、ストレージ機能が設定されていることを考慮して担当ＭＰＰＫ２１０の切り替え処理を行うことにより、切り替えによる性能低下を回避するようにしている。まず、本実施例のストレージシステム２００におけるストレージ機能の概要を述べ、担当ＭＰＰＫ２１０を予め決めておくアーキテクチャでの問題点、及びその問題点を解消することが可能な担当ＭＰＰＫ２１０の切り替え方法について述べる。
【００８４】
ストレージ機能の一つにローカルコピー機能がある。ローカルコピー機能は、ストレージシステム２００内で、ボリューム２５０のコピーを作成する機能である。ローカルコピー機能では、コピー元となる正ボリューム（Primary VOLume、以下「ＰＶＯＬ））と、コピー先となる副ボリューム（Secondary VOLume、以下「ＳＶＯＬ」）の二つのボリューム２５０を関連付ける。このように関連づけられたＰＶＯＬとＳＶＯＬとをまとめてペアと呼ぶ。
【００８５】
図１２は、ローカルコピー機能におけるＰＶＯＬとＳＶＯＬとの関係を管理するために使用されるローカルコピーテーブル２２１３の一例である。ローカルコピーテーブル２２１３は、ペア番号欄２２１３１、ＰＶＯＬ番号欄２２１３２、ＳＶＯＬ番号欄２２１３３、及びコピー量欄２２１３４を備える。ペア番号欄２２１３１には、ＰＶＯＬとＳＶＯＬのペアに対して一意に割当てられている番号であるペア番号が記録される。このペア番号２２１３１を用いて、ストレージシステム２００内部で各ペアを一意に識別することができる。ＰＶＯＬ番号欄２２１３２には、ＰＶＯＬに付与されているボリューム番号が記録される。ＳＶＯＬ番号欄２２１３３には、ＳＶＯＬに付与されているボリューム番号が記録される。コピー量欄２２１３４には、直近の単位時間あたりにＰＶＯＬからＳＶＯＬへコピーされたデータの量を示す情報であるコピー量が記録される。コピー量２２１３４は、例えば直近の１秒間にＰＶＯＬからＳＶＯＬへコピーされたデータ量として規定することができ、図１２の例では、ＭＢ／ｓの単位で記録されている。
【００８６】
次に、ローカルコピー機能の動作を簡単に説明する。以下ローカルコピー機能を主体として記載された処理は、ローカルコピー機能を実現するプログラムをＭＰＰＫ２１０で実行して実現されるものとする。他のストレージ機能について、当該ストレージ機能を処理主体として記載した場合も、同様である。
【００８７】
まず、ローカルコピー機能は、保守端末２７０あるいはホスト１００からローカルコピー開始指示を受領する。この指示は、ＰＶＯＬとＳＶＯＬのボリューム番号を含む。指示を受領すると、ローカルコピー機能は、ローカルコピーテーブル２２１３に、ペア番号２２１３１、ＰＶＯＬ番号２２１３２、ＳＶＯＬ番号２２１３３、及びコピー量２２１３４を記録する。
【００８８】
ローカルコピー機能は、ある時刻のＰＶＯＬのデータをＳＶＯＬにコピーする機能、及び常にＰＶＯＬとＳＶＯＬのデータを同一に保持する機能を提供する。
【００８９】
まず、ある時刻のＰＶＯＬのデータをＳＶＯＬにコピーする方法について述べる。ローカルコピー機能は、コピー実行指示を受領すると、ＰＶＯＬの先頭アドレスからＰＶＯＬの末尾に向かって順次データを読み出し、ＳＶＯＬに書き込む。ＰＶＯＬの末尾までのコピーが完了するとコピー完了となる。上記の処理によって、ある時刻のＰＶＯＬのデータのコピーをＳＶＯＬに作成するためには、ホスト１００からのＰＶＯＬへのライトを一旦停止してデータをコピーする必要がある。
【００９０】
ＰＶＯＬへのライトを停止せず、ホスト１００からＰＶＯＬへのライトを受領しながらデータをコピーする方法を述べる。このようなコピー処理を実現するために、ストレージシステム２００は、例えばメモリパッケージ２２０の制御情報部２２１にコピー済みビットマップ（図示しない）を有する。このコピー済みビットマップとは、ＰＶＯＬ内のアドレス毎に、当該アドレスに格納されているデータがＳＶＯＬにコピー済みか否かを示す情報である。本実施例では、あるアドレスのコピー済みビットマップの値が「ＯＦＦ」の場合はコピー済み、「ＯＮ」の場合は未コピーを表すものとする。
【００９１】
ローカルコピー機能は、ＰＶＯＬからＳＶＯＬへのコピーを開始する時、コピー済みビットマップの内容を全て「ＯＮ」とする。次に、ローカルコピー機能は、ＰＶＯＬからＳＶＯＬへデータをコピーするとき、コピーが完了したアドレスに対するコピー済みビットマップの値を「ＯＦＦ」へと変更する。さらに、ホスト１００からＰＶＯＬへのライト要求を受領したときにも、コピー済みビットマップを参照し、ライトアドレスに対するコピー済みビットマップの値が「ＯＮ」であれば、その時点でＰＶＯＬからＳＶＯＬへとライトアドレスのデータをコピーし、コピー済みビットマップを「ＯＦＦ」へ変更する。ＰＶＯＬからＳＶＯＬへのコピー完了後、ホスト１００からのライトデータをＰＶＯＬの該当アドレスに書き込む。
【００９２】
これによって、ホスト１００からのライトを受領しつつ、そのライト要求受領前のある時刻におけるＰＶＯＬ格納データのコピーを作成することができる。
【００９３】
次に、常にＰＶＯＬとＳＶＯＬのデータを同一に保持する機能について述べる。ある時刻のＰＶＯＬのデータをＳＶＯＬにコピーする場合と同様に、ローカルコピー機能は、ＰＶＯＬの先頭アドレスからＰＶＯＬの末尾に向かって順次データを読み出し、ＳＶＯＬに書き込む。また、ローカルコピー機能は、コピー状況をコピー済みビットマップによって管理する。
【００９４】
ホスト１００からＰＶＯＬへのライト要求を受領したとき、ローカルコピー機能は、ライトデータをＰＶＯＬのみに書き込むのではなく、ＰＶＯＬとＳＶＯＬの両方に書き込むことによって常にＰＶＯＬとＳＶＯＬのデータを同一に保つ。
【００９５】
別の方法として、ローカルコピー機能がライト要求を受領したときに、ライトデータをＰＶＯＬのみに書込む方法がある。具体的には、ローカルコピー機能は、ライトデータをＰＶＯＬに書込み、さらに、コピー済みビットマップを「ＯＮ」に変更する。そして、ローカルコピー機能が定期的にコピー済みビットマップの値が「ＯＮ」の箇所を探し、当該箇所に対応するＰＶＯＬのデータを、ＳＶＯＬへコピーする。
【００９６】
上述したように、ローカルコピー機能は、ホスト１００からのＩＯ要求と同期したタイミングで、あるいはＩＯ要求とは独立したタイミングでＰＶＯＬからＳＶＯＬへデータをコピーする。ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０が同一である場合と、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０が異なる場合とで、ローカルコピー機能による処理は異なる。
【００９７】
図１３を参照して、本実施例で担当ＭＰＰＫ２１０の切り替えを行わない場合のＰＶＯＬからＳＶＯＬへのコピー処理の方法を説明する。図１３に示すコピープログラム２２３０は、ＩＯプログラム２２２２や、上述したコピー済みビットマップをチェックし、コピー処理を起動するプログラムなどからコールされる。なお、ローカルコピー機能は、ストレージシステム２００のプロセッサ２１１がプログラム部２２２に格納されているコピープログラム２２３０を実行することで実現される。また、図１３のコピープログラム２２３０は、ＰＶＯＬの担当ＭＰＰＫ２１０で起動され、必要に応じてＳＶＯＬの担当ＭＰＰＫ２１０と通信しながら処理を実行する例であるが、ＳＶＯＬの担当ＭＰＰＫ２１０で起動され、必要に応じてＰＶＯＬの担当ＭＰＰＫ２１０と通信しながら処理を実行してもよい。
【００９８】
まず、コピープログラム２２３０は、担当ＭＰＰＫテーブル２２１２を参照することで、ＰＶＯＬの担当ＭＰＰＫ２１０が自ＭＰＰＫ２１０であるか否かをチェックする（Ｓ５００）。自ＭＰＰＫ２１０がＰＶＯＬの担当ＭＰＰＫ２１０でないと判定した場合（Ｓ５００、Ｎｏ）、処理を終了し（Ｓ５０７）、ＰＶＯＬの担当ＭＰＰＫ２１０で図１３のコピープログラム２２３０を再起動する。
【００９９】
自ＭＰＰＫ２１０がＰＶＯＬの担当ＭＰＰＫ２１０であると判定した場合（Ｓ５００、Ｙｅｓ）、コピープログラム２２３０は、ＰＶＯＬのボリュームテーブル２２１１の使用中ジョブ情報欄２２１１３に、コピープログラムのジョブ番号を登録する（Ｓ５０１）。次に、コピープログラム２２３０は、担当ＭＰＰＫテーブル２２１２を参照することで、ＳＶＯＬの担当ＭＰＰＫ２１０が自ＭＰＰＫ２１０であるか否かをチェックする（Ｓ５０２）。
【０１００】
自ＭＰＰＫ２１０がＳＶＯＬの担当ＭＰＰＫ２１０であると判定した場合（Ｓ５０２、Ｙｅｓ）、自ＭＰＰＫ２１０がＰＶＯＬとＳＶＯＬの両方の担当ＭＰＰＫ２１０であるため、ＳＶＯＬのボリュームテーブル２２１１の使用中ジョブ情報欄２２１１３に、ジョブ番号を登録し（Ｓ５０３）、ＰＶＯＬからＳＶＯＬへデータをコピーする（Ｓ５０４）。コピー完了後、コピープログラム２２３０は、ＳＶＯＬと、ＰＶＯＬの使用中ジョブ情報欄２２１１３からジョブ番号を削除し（Ｓ５０５、Ｓ５０６）、処理を終了する（Ｓ５０７）。
【０１０１】
次に、ＳＶＯＬの担当ＭＰＰＫ２１０がＰＶＯＬの担当ＭＰＰＫ２１０と異なる場合の処理について説明する。図１３のＳ５０２で、自ＭＰＰＫ２１０がＳＶＯＬの担当ＭＰＰＫ２１０でないと判定した場合（Ｓ５０２、Ｎｏ）、コピープログラム２２３０は、ＳＶＯＬの担当ＭＰＰＫ２１０へＳＶＯＬ側の処理を依頼し、ＳＶＯＬの担当ＭＰＰＫ２１０からの応答を待つ（Ｓ５０８）。このとき、コピープログラム２２３０は、コピーするデータのアドレスをＳＶＯＬの担当ＭＰＰＫ２１０へ通知するものとする。
【０１０２】
ＳＶＯＬの担当ＭＰＰＫ２１０で動作するコピープログラム２２３０は、ＰＶＯＬの担当ＭＰＰＫ２１０で動作するコピープログラム２２３０から、ＳＶＯＬ側の処理依頼を受領すると、ＳＶＯＬのボリュームテーブル２２１１の使用中ジョブ情報欄２２１１３にジョブ番号を登録し（Ｓ５１０）、ＰＶＯＬからＳＶＯＬへデータをコピーする（Ｓ５１１）。最後に、ＳＶＯＬの担当ＭＰＰＫ２１０で動作するコピープログラム２２３０は、ＳＶＯＬのボリュームテーブル２２１１の使用中ジョブ情報欄２２１１３からジョブ番号を削除し（Ｓ５１２）、ＰＶＯＬの担当ＭＰＰＫ２１０で動作するコピープログラム２２３０にコピー処理完了を報告する（Ｓ５１３）。
【０１０３】
Ｓ５０８実行後に待機していたＰＶＯＬの担当ＭＰＰＫ２１０で動作するコピープログラム２２３０は、ＳＶＯＬの担当ＭＰＰＫ２１０で動作するコピープログラムからの完了報告を受領すると（Ｓ５０９）、ＰＶＯＬのボリュームテーブル２２１１の使用中ジョブ情報欄２２１１３からジョブ番号を削除し（Ｓ５０６）、処理を終了する（Ｓ５０７）。
【０１０４】
上述したローカルコピー機能におけるコピー処理の説明からも分るように、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０が異なる場合、図１３のＳ５０８とＳ５１３においてＭＰＰＫ２１０間の通信が必要となり、性能が低下する可能性がある。ローカルコピー機能の場合、関連付けられるボリューム２５０は、ＰＶＯＬとＳＶＯＬの二つのボリューム２５０であるため、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０をなるべく一致させ、ＭＰＰＫ２１０間の通信を回避することが望ましい。また、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０を必ず一致させることで、コピープログラム２２３０におけるＳ５０８からＳ５１３の処理を省略することも可能である。
【０１０５】
次に、本実施例におけるローカルコピー機能が設定されているボリューム２５０の担当ＭＰＰＫ２１０を切り替える処理について述べる。
【０１０６】
ＰＶＯＬあるいはＳＶＯＬの担当ＭＰＰＫ２１０を、ローカルコピー機能の設定状況を考慮せずに切り替える場合、以下のような問題が発生する。
【０１０７】
ＰＶＯＬ又はＳＶＯＬの担当ＭＰＰＫ２１０のみを切り替えると、ＰＶＯＬからＳＶＯＬへデータをコピーする時は、常に図１３のＳ５０８からＳ５１３の処理が必要となり、ＭＰＰＫ２１０間の通信が発生してコピー性能が低下してしまう。この問題を回避するためには、ＰＶＯＬの担当ＭＰＰＫ２１０を切り替えるときは、ＳＶＯＬの担当ＭＰＰＫ２１０も切り替える必要がある。また、同様にＳＶＯＬの担当ＭＰＰＫ２１０を切り替えるときは、ＰＶＯＬの担当ＭＰＰＫ２１０も切り替える必要がある。
【０１０８】
ＰＶＯＬとＳＶＯＬの両方の担当ＭＰＰＫ２１０を切り替える場合でも、図１３のＳ５０１とＳ５０２の間で、ＳＶＯＬの担当ＭＰＰＫ２１０が切り替えられると、データコピーが一時的に実行不可能となる。このため、ローカルコピー機能の場合、ＰＶＯＬ及びＳＶＯＬを使用中のジョブが存在しなくなったとき、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０をまとめて切り替える必要がある。
【０１０９】
図１４及び図１５を参照して、上記問題を回避することができる担当ＭＰＰＫ２１０の切り替え方法の一例を説明する。具体的にはこの切り替え方法では、ローカルコピーの設定状況をチェックし、ローカルコピーの処理が行われない状況になった後、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０をまとめて切り替える。図１４は、図８に示した切り替え開始プログラム２２２１を変更したプログラムであり、図１５は、図１０に示した担当切り替え可否チェックプログラム２２２３を変更したプログラムである。なお、これらプログラムによる処理は、ストレージシステム２００のプロセッサ２１１がプログラム部２２２に格納されている切り替え開始プログラム２２２１、担当切り替え可否チェックプログラム２２２３を実行することで実現される。
【０１１０】
切り替え開始プログラム２２２１のＳ１００及びＳ１０１は、図８に示した切り替え開始プログラム２２２１と同様である。保守端末２７０から切り替え開始プログラム２２２１に渡されるパラメータの切り替え対象ボリューム２５０としてＰＶＯＬが指定されている場合、Ｓ１００及びＳ１０１によって、ＰＶＯＬの担当ＭＰＰＫ２１０の切り替えが開始される。具体的には、担当ＭＰＰＫテーブル２２１２の切り替え中ビット２２１２３をＯＮに変更し、切り替え先ＭＰＰＫ番号欄２２１２４にパラメータとして渡された切り替え先ＭＰＰＫ２１０のＭＰＰＫ番号を設定する。そして、ＦＥパッケージ２６０内の担当ＭＰＰＫテーブル２６３の担当ＭＰＰＫ番号２６３２を、切り替え先ＭＰＰＫ番号２２１２４に変更する。
【０１１１】
次に、切り替え開始プログラム２２２１は、切り替え対象ボリューム２５０にローカルコピー機能が設定されているか否かを判定する（Ｓ１０３）。具体的には、この処理は、切り替え開始プログラム２２２１が対象ボリューム２５０のボリュームテーブル２２１１に記録されている機能ビット２２１１２を参照することで実現される。
【０１１２】
対象ボリューム２５０にローカルコピー機能が設定されていないと判定した場合（Ｓ１０３、Ｎｏ）、切り替え開始プログラム２２２１は処理を終了する（Ｓ１０２）。この場合に、図８の切り替え開始プログラム２２２１と同じ処理となる。
【０１１３】
一方、Ｓ１０３で対象ボリューム２５０にローカルコピー機能が設定されていると判定した場合（Ｓ１０３、Ｙｅｓ）、切り替え開始プログラム２２２１は、ローカルコピー機能によって関連付けられている相手ボリューム２５０のボリューム番号２２１３３を得る（Ｓ１０４）。この処理は、ローカルコピーテーブル２２１３を参照することで実現する。
【０１１４】
次に、切り替え開始プログラム２２２１は、Ｓ１０４で得たボリューム番号２２１３３で特定されるボリューム２５０の切り替えが開始済みであるか否かをチェックし（Ｓ１０５）、切り替えが開始されていないと判定した場合は（Ｓ１０５、Ｎｏ）、当該ボリューム２５０の担当ＭＰＰＫ切り替えを開始する（Ｓ１０６）。Ｓ１０６では、Ｓ１０４で特定されたボリューム２５０に対して、切り替え開始プログラム２２２１をコールすることで切り替えを開始する。最後に、切り替え開始プログラム２２２１は処理を終了する（Ｓ１０２）。
【０１１５】
以上のように、切り替え開始プログラム２２２１によってＰＶＯＬとＳＶＯＬの担当ＭＰＰＫの切り替え処理が開始される。この場合、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０の切り替え先は同じＭＰＰＫ２１０である。
【０１１６】
図１４の切り替え開始処理では、切り替え開始プログラム２２２１が起動されたとき、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０が異なる場合でも、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０を同一のＭＰＰＫ２１０に切り替える。
【０１１７】
切り替え開始プログラム２２２１が起動されたとき、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０が異なる場合は、指定されたボリューム２５０（ＰＶＯＬ又はＳＶＯＬ）の担当ＭＰＰＫ２１０のみを切り替えてもよい。さらに、ＰＶＯＬの担当ＭＰＰＫ２１０を切り替えるとき、ＳＶＯＬの担当ＭＰＰＫ２１０も同時に切り替えるか否かを、ローカルコピー機能が設定されているペア毎に変えてもよい。すなわち、ローカルコピーペアに関しては、所定の条件を満たす場合にのみＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０を同時に切り替える。この切り替え処理は、例えば、ストレージ管理者が予め保守端末２７０からＰＶＯＬとＳＶＯＬの担当を同時に切り替えるか否かを示す情報をローカルコピーテーブル２２１３に登録しておき、切り替え開始プログラム２２２１が上記情報を参照することで実現できる。
【０１１８】
次に図１５を参照して担当切り替え可否チェックプログラム２２２３を説明する。図１５は、担当切り替え可否チェックプログラム２２２３による処理フローの一例を示している。担当切り替え可否チェックプログラム２２２３は、ＩＯプログラム２２２２や監視プログラム（図示せず）からコールされる。
【０１１９】
担当切り替え可否チェックプログラム２２２３は、コール元から通知される対象ボリューム２５０のボリュームテーブル２２１１に記録されている使用中ジョブ情報欄２２１１３を参照することで、対象ボリューム２５０を使用中のジョブが存在するか否かをチェックする（Ｓ６００）。使用中ジョブが存在すると判定した場合（Ｓ６００、Ｙｅｓ）、図１０と同様に担当切り替え可否チェックプログラム２２２３は処理を終了する（Ｓ６１２）。
【０１２０】
使用中ジョブが存在しないと判定した場合（Ｓ６００、Ｎｏ）、切り替え可否チェックプログラム２２２３は、対象ボリューム２５０を切り替えリストに追加する。切り替えリストは、使用中ジョブが存在しない切り替え対象ボリューム２５０について、さらに他の条件に照らして切り替え可否を判定するために、一時的に切り替え対象ボリューム２５０のボリューム番号を保持しておくテーブルであり、例えば担当切り替え可否チェックプログラム２２２３を実行しているＭＰＰＫ２１０のローカルメモリ２１２に設定される。この時点では、当該ボリューム２５０にローカルコピー機能などが適用されている可能性があり、切り替えを実施してよいかどうかが判定できないからである。
【０１２１】
次に、切り替え可否チェックプログラム２２２３は、対象ボリューム２５０にローカルコピー機能が設定されているか否かをチェックする（Ｓ６０２）。そして、ローカルコピー機能が設定されていないと判定した場合（Ｓ６０２、Ｎｏ）、さらに他のストレージ機能が適用されているか否かのチェックを行う（Ｓ６０６、Ｓ６０８）。いずれのストレージ機能も適用されていないと判定した場合は（Ｓ６０６及びＳ６０８、Ｎｏ）、図１０と同様に担当切り替えプログラム２２２４をコールし（Ｓ６１１）、処理を終了する（Ｓ６１２）。なお、ローカルコピー機能以外のストレージ機能が適用されているときに実行される処理Ｓ６０６〜Ｓ６１０については後述する。
【０１２２】
一方、対象ボリューム２５０にローカルコピー機能が設定されていると判定した場合（Ｓ６０２、Ｙｅｓ）、担当切り替え可否チェックプログラム２２２３は、ローカルコピーテーブル２２１３を参照して、ローカルコピー機能によって関連付けられている相手ボリューム２５０のボリューム番号２２１３３を得る（Ｓ６０３）。そして、Ｓ６０３で得たボリューム番号２２１３３で特定される相手ボリューム２５０についてのボリュームテーブル２２１１の記録を参照することで、相手ボリューム２５０を使用中のジョブが存在するか否かをチェックする（Ｓ６０４）。
【０１２３】
相手ボリューム２５０を使用中のジョブが存在すると判定した場合（Ｓ６０４、Ｙｅｓ）、担当切り替え可否チェックプログラム２２２３は処理を終了する（Ｓ６０４）。相手ボリューム２５０を使用中のジョブが存在しないと判定した場合（Ｓ６０４、Ｎｏ）、担当切り替え可否チェックプログラム２２２３は、担当切り替えプログラム２２２４をコールし（Ｓ６１１）、処理を終了する（Ｓ６１２）。すなわち、ローカルコピー機能が設定されているＰＶＯＬ及びＳＶＯＬを使用中のジョブが存在しない場合のみ、担当切り替えプログラム２２２４をコールし、担当ＭＰＰＫ２１０を切り替える。Ｓ６１１からコールされる担当切り替えプログラム２２２４による処理フローは、図１１に示した処理フローと同様である。
【０１２４】
なお、Ｓ６００、Ｓ６０４で、ＰＶＯＬ及びＳＶＯＬの使用中ジョブが存在しないことを確認した後、コピープログラム２２３０が動作し、ＰＶＯＬ又はＳＶＯＬが使用中となる場合がある。この状態でコピープログラム２２３０が起動されるのを防止するため、コピープログラムが起動した時点で、ＰＶＯＬが切り替え中の場合は、切り替え先ＭＰＰＫ２１０でコピープログラム２２３０が再起動するように構成する。具体的には、図１３のコピープログラム２２３０のＳ５００とＳ５０１の間で、担当ＭＰＰＫテーブル２２１２を参照し、ＰＶＯＬに対応するボリューム番号２２１２１についての切り替え中ビット２２１２３がＯＮの場合は、Ｓ５０７へ進み、切り替え先ＭＰＰＫ番号２２１２４で特定されるＭＰＰＫ２１０でコピープログラム２２３０を再起動する（図示せず）。
【０１２５】
以上のように、ローカルコピー機能の設定状況を考慮して、ＰＶＯＬ及びＳＶＯＬの担当ＭＰＰＫ２１０を切り替えることで、ローカルコピー処理の性能低下やローカルコピー処理そのものが動作不可能になる状況を回避することができる。
【０１２６】
拡張ボリューム機能
次に、ストレージ機能の一つである拡張ボリューム機能について説明する。ローカルコピー機能に関する説明と同様に、まず拡張ボリューム機能の概要を述べ、担当ＭＰＰＫ２１０を予め決めるアーキテクチャでの問題点、及びその問題点を解消しうる担当ＭＰＰＫ２１０の切り替え方法について述べる。
【０１２７】
拡張ボリューム機能は、複数個のボリューム２５０をまとめて一つの大容量のボリューム２５０としてホスト１００に提供する機能である。以下、複数個のボリューム２５０から構成されるボリューム２５０を拡張ボリューム、拡張ボリュームを構成するボリューム２５０を構成ボリュームと呼ぶ。複数個のボリューム２５０を使用することにより、通常ボリューム２５０より多くのディスク装置２４０を記憶領域として使用することができ、大容量のボリューム２５０を提供できる。ホスト１００は、複数のボリューム２５０を個別に認識するのではなく、一体化された大容量のボリューム２５０として認識する。
【０１２８】
図１６は、拡張ボリュームを管理するための拡張ボリュームテーブル２２１４の一例である。拡張ボリュームテーブル２２１４は、拡張ボリューム番号欄２２１４１及び構成ボリューム番号欄２２１４２を備える。拡張ボリューム番号欄２２１４１には、ストレージシステム２００に設定されている各拡張ボリュームを識別するための識別符号である拡張ボリューム番号が記録される。構成ボリューム番号欄２２１４２には、一つの拡張ボリュームを構成する構成ボリューム２５０を識別するための識別符号である構成ボリューム番号が記録される。本実施例では、一つの拡張ボリュームを構成する構成ボリューム２５０のうちのいずれかのボリューム２５０に付与されている構成ボリューム番号２２１４２を拡張ボリューム番号２２１４１とする。このため、ホスト１００からのＩＯ要求は、ＦＥパッケージ２６０によって、拡張ボリューム番号２２１４１と同一の構成ボリューム番号２２１４２を有するボリューム２５０の担当ＭＰＰＫ２１０へ振り分けられる。
【０１２９】
図１６の１行目に記録されている例では、構成ボリューム番号１，２，３で特定されるの三つの構成ボリューム２５０（以下、「構成ボリューム１〜構成ボリューム３」）から一の拡張ボリュームが構成されており、その拡張ボリュームの拡張ボリューム番号は１である。したがって、ホスト１００からのＩＯ要求は、ＦＥパッケージ２６０によって、構成ボリューム１の担当ＭＰＰＫ２１０へ振り分けられる。ホスト１００からのＩＯ要求の対象領域が構成ボリューム２に含まれていたとしても、同様にＩＯ要求は構成ボリューム１の担当ＭＰＰＫ２１０へ振り分けられる。このとき、構成ボリューム２の担当ＭＰＰＫ２１０と構成ボリューム１の担当ＭＰＰＫ２１０が異なれば、構成ボリューム１の担当ＭＰＰＫ２１０は、構成ボリューム２に対するＩＯ要求を処理することはできない。
【０１３０】
次に、図１７を参照して、拡張ボリュームへ発行されたＩＯ要求の処理について説明する。図１７は拡張ボリュームへＩＯ要求が発行されたときに実行されるＩＯプログラム２２２２の処理フローの一例である。
【０１３１】
ＩＯプログラム２２２２は、制御情報部２２１に保持されている各ボリューム２５０の記憶領域アドレスを参照して、ＩＯ対象領域の開始アドレスを含む構成ボリューム２５０を特定する（Ｓ７００）。次に、ＩＯプログラム２２２２は、Ｓ７００で特定した構成ボリューム２５０の担当ＭＰＰＫ２１０が、自ＭＰＰＫ２１０か否かを判定する（Ｓ７０１）。
【０１３２】
担当ＭＰＰＫが自ＭＰＰＫ２１０であると判定した場合（Ｓ７０１、Ｙｅｓ）、ＩＯプログラム２２２２は、ボリュームテーブル２２１１を参照し、構成ボリューム２５０についての使用中ジョブ情報欄２２１１３に、当該ＩＯ要求が有するジョブ番号を登録する（Ｓ７０２）。次に、ＩＯプログラム２２２２は、当該構成ボリューム２５０に対して実行可能な範囲のＩＯを実行する。具体的には、ＩＯプログラム２２２２は、ＩＯの終了アドレスが、構成ボリューム２５０の記憶領域アドレスに含まれるか否かを判定する（Ｓ７０３）。含まれると判定した場合（Ｓ７０３、Ｙｅｓ）、ＩＯプログラム２２２２はホスト１００が指定したＩＯ範囲の末尾までのＩＯを構成ボリューム２５０に対して実行し（Ｓ７０７）、ボリュームテーブル２２１１の使用中ジョブ情報欄２２１１３からジョブ番号を削除する（Ｓ７０８）。これで、ＩＯプログラム２２２２は処理を終了する（Ｓ７０９）。
【０１３３】
一方で、Ｓ７０３において、ＩＯの終了アドレスが、構成ボリューム２５０に含まれないと判定した場合（Ｓ７０３、Ｎｏ）、すなわち、ＩＯ要求のＩＯ範囲が次の構成ボリューム２５０の記憶領域アドレスを含む場合、ＩＯプログラム２２２２は、現在処理対象としている構成ボリューム２５０の末尾までのＩＯを実行し（Ｓ７０４）、ボリュームテーブル２２１１の使用中ジョブ情報欄２２１１３からジョブ番号を削除する（Ｓ７０５）。そして、ＩＯプログラム２２２２は、現在処理対象としている構成ボリューム２５０の次の構成ボリューム２５０を処理対象としてＳ７０１へ戻る（Ｓ７０６）。Ｓ７０１からＳ７０６を繰り返し実行することで、ＩＯを最後まで実行することができる。
【０１３４】
Ｓ７０１で構成ボリュームの担当ＭＰＰＫ２１０が他ＭＰＰＫ２１０であると判定した場合（Ｓ７０１、Ｎｏ）、ＩＯプログラム２２２２は、構成ボリューム２５０の担当ＭＰＰＫ２１０へＩＯ処理の実行を依頼する（Ｓ７１０）。この依頼を受領した担当ＭＰＰＫ２１０は、ＩＯプログラム２２２２のＳ７００からＳ７１０を実行することでＩＯを処理する。
【０１３５】
以上の図１７の説明からも分るように、構成ボリューム２５０の担当ＭＰＰＫ２１０が異なっている場合、ＩＯに同期してＭＰＰＫ２１０が通信を行う必要がある。
【０１３６】
拡張ボリュームの場合、関連付けられるボリューム２５０の数は、数十個程度である。それに対して、ストレージシステム２００には、数千個以上のボリューム２５０を作成可能である。よって、拡張ボリューム機能の場合も、ローカルコピー機能と同様に、構成ボリューム２５０の担当ＭＰＰＫ２１０は、なるべく一致させ、ＭＰＰＫ２１０間の通信を回避することが望ましい。構成ボリューム２５０の担当ＭＰＰＫ２１０を必ず一致させることで、ＩＯプログラム２２２２のＳ７０１、Ｓ７１０を省略してプログラム構造を簡略化することもできる。
【０１３７】
ここで、拡張ボリューム機能が設定されているボリューム２５０の担当ＭＰＰＫ２１０を切り替える場合に発生しうる問題について述べる。拡張ボリュームを構成する構成ボリューム２５０の担当ＭＰＰＫ２１０を、拡張ボリューム機能の設定状況を考慮せずに切り替えると、以下のような問題が発生するおそれがある。
【０１３８】
ローカルコピー機能と同様に、一部の構成ボリューム２５０のみの担当ＭＰＰＫ２１０を切り替えると、ＭＰＰＫ２１０間の通信を伴うＳ７１０を実行しなければならなくなり、ＩＯ性能が低下する。また、ボリューム１、ボリューム２から構成されている拡張ボリュームに対して、構成ボリューム１、構成ボリューム２の記憶領域アドレスを跨ぐＩＯ要求を受領することがある。このとき以下の様な順序で処理が実行され、Ｓ７１０を実行しなければならなくなったり、ＩＯが実行不可能となったりするおそれがある。
【０１３９】
拡張ボリュームの担当ＭＰＰＫ２１０の切り替えを開始する前に、切り替え元ＭＰＰＫ２１０が構成ボリューム１、構成ボリューム２を跨ぐＩＯ要求を受領し、構成ボリューム１に対するＩＯを実行しているときに、拡張ボリュームの担当ＭＰＰＫ２１０の切り替えが開始される。この時点で、当該ＩＯは、構成ボリューム２を使用していないため、図示しない監視プログラムが構成ボリューム２の担当ＭＰＰＫ２１０を切り替えてしまう。この場合、ＩＯプログラム２２２２は、Ｓ７１０を実行することで構成ボリューム２の担当ＭＰＰＫ２１０にＩＯ処理を依頼しなければならず、ＩＯ性能が低下してしまう。さらに、ＩＯプログラム２２２２に処理Ｓ７０１、Ｓ７１０を設けない場合には、拡張ボリュームに対するＩＯ要求が途中で実行不可能となってしまう。これを回避するため、拡張ボリューム機能では、拡張ボリュームの先頭部分に対応する構成ボリューム２５０から順に拡張ボリュームの末尾に向かって構成ボリューム２５０の担当ＭＰＰＫ２１０を切り替えていく必要がある。
【０１４０】
図１８と図１５とを用いて、上記問題を回避する担当ＭＰＰＫ２１０の切り替え方法の一例を説明する。図１８は、図１４に示した切り替え開始プログラム２２２１の一部を変更したプログラムである。なお、この切り替え開始プログラム２２２１の処理は、ストレージシステム２００のプロセッサ２１１がプログラム部２２２に格納されている切り替え開始プログラム２２２１、及び担当切り替え可否チェックプログラム２２２３を実行することで実現される。
【０１４１】
図１８の切り替え開始プログラム２２２１は、図１４の切り替え開始プログラム２２２１に、Ｓ１０７からＳ１１０までの処理を追加したものである。切り替え対象ボリューム２５０に拡張ボリューム機能が設定されている場合、Ｓ１０８以下の処理が実行される。
【０１４２】
切り替え開始プログラム２２２１は、切り替え対象ボリューム２５０が拡張ボリュームの構成ボリューム２５０であるか否かを判定する（Ｓ１０７）。切り替え対象ボリューム２５０が構成ボリューム２５０でないと判定した場合（Ｓ１０７、Ｎｏ）、切り替え開始プログラム２２２１は処理を終了する（Ｓ１０２）。一方で、切り替え対象ボリューム２５０が構成ボリューム２５０であると判定した場合（Ｓ１０７、Ｙｅｓ）、切り替え開始プログラム２２２１は、切り替え対象ボリューム２５０を含む拡張ボリュームを構成する全構成ボリューム２５０の情報を取得する（Ｓ１０８）。これは、切り替え開始プログラム２２２１が拡張ボリュームテーブル２２１４を参照することで実現する。
【０１４３】
次に、切り替え開始プログラム２２２１は、全ての構成ボリューム２５０の担当ＭＰＰＫ２１０の切り替えが開始されているか否かをチェックする（Ｓ１０９）。この処理は、切り替え開始プログラム２２２１が担当ＭＰＰＫテーブル２２１２の切り替え中ビット２２１２３を参照することで実現する。切り替え中でない構成ボリューム２５０が一つ以上存在する場合（Ｓ１０９、Ｎｏ）、切り替え開始プログラム２２２１は、Ｓ１１０へ進む。切り替え開始プログラム２２２１は、切り替え中でない全構成ボリューム２５０に対して切り替え開始プログラム２２２１をコールして、切り替えを開始する（Ｓ１１０）。最後に、切り替え開始プログラム２２２１は処理を終了する（Ｓ１０２）。
【０１４４】
図１５の担当切り替え可否チェックプログラム２２２３の処理フローを参照して、拡張ボリュームを構成する各構成ボリューム２５０の切り替え可否のチェック方法について説明する。切り替え対象ボリューム２５０が拡張ボリュームを構成する構成ボリューム２５０の場合、担当切り替え可否チェックプログラム２２２３は、Ｓ６０７以下の処理を実行する。
【０１４５】
担当切り替え可否チェックプログラム２２２３は、切り替え対象ボリューム２５０が拡張ボリュームの構成ボリューム２５０であるか否かをチェックする（Ｓ６０６）。そして、構成ボリュームでないと判定した場合（Ｓ６０６、Ｎｏ）、他のストレージ機能が適用されているか否かのチェックを行う（Ｓ６０８）。いずれのストレージ機能も適用されていないと判定した場合は（Ｓ６０８、Ｎｏ）、図１０と同様に担当切り替えプログラム２２２４をコールし（Ｓ６１１）、処理を終了する（Ｓ６１２）。
【０１４６】
一方で、切り替え対象ボリューム２５０が拡張ボリュームの構成ボリューム２５０であると判定した場合（Ｓ６０６、Ｙｅｓ）、担当切り替え可否チェックプログラム２２２３は、切り替え対象ボリューム２５０が拡張ボリュームの先頭部分に対応する構成ボリューム２５０であるか、又は切り替え対象ボリューム２５０より前に位置する別の構成ボリューム２５０の担当ＭＰＰＫ２１０が切り替え済みであるか否かの判定を行う（Ｓ６０７）。いずれかの条件を満たすと判定した場合（Ｓ６０７、Ｙｅｓ）、他のストレージ機能が設定されていなければ、担当切り替え可否チェックプログラム２２２３は、担当切り替えプログラム２２２４をコールし（Ｓ６１１）、処理を終了する（Ｓ６１２）。
【０１４７】
一方で、Ｓ６０７でいずれの条件も満たさないと判定した場合（Ｓ６０７、Ｎｏ）、担当切り替え可否チェックプログラム２２２３は、処理を終了する（Ｓ６１２）。具体的には、拡張ボリュームが構成ボリューム１，２，３から構成され、切り替え対象ボリューム２５０が構成ボリューム３であるとき、他の構成ボリューム１，２の担当ＭＰＰＫ２１０の切り替えが完了しており、かつ、構成ボリューム３を使用中のジョブが存在しなければ、担当切り替えプログラム２２２４が構成ボリューム３の担当ＭＰＰＫ２１０を切り替える。また、切り替え対象ボリューム２５０が構成ボリューム１であるとき、構成ボリューム１を使用中のジョブがなければ、担当切り替えプログラム２２２４が構成ボリューム１の担当ＭＰＰＫ２１０を切り替える。Ｓ６１１からコールされる担当切り替えプログラム２２２４による処理フローは図１１と同様である。
【０１４８】
以上のように、拡張ボリューム機能の設定状況を考慮して、構成ボリューム２５０の担当ＭＰＰＫ２１０を切り替えることで、拡張ボリューム機能におけるＩＯ性能の低下や、ＩＯ実行不可能となってしまう状況を回避することができる。
【０１４９】
リモートコピー機能
次に、ストレージ機能の一つであるリモートコピー機能について述べる。ローカルコピー機能と同様に、まずリモートコピー機能の概要を述べ、担当ＭＰＰＫ２１０を予め決めるアーキテクチャでの問題点、及びその問題点を解消する担当ＭＰＰＫ２１０の切り替え方法について述べる。
【０１５０】
リモートコピー機能は、あるストレージシステム２００にあるボリューム２５０に格納されているデータのコピーを、別筐体であるストレージシステム２００に作成する機能である。ローカルコピー機能と同様に、コピー元ボリューム２５０をＰＶＯＬ、コピー先ボリューム２５０をＳＶＯＬと呼ぶ。リモートコピー機能を用いて、ＰＶＯＬのデータを別のストレージシステム２００にあるＳＶＯＬにコピーしておくことで、災害、または、システム障害などによりＰＶＯＬ側のストレージシステム２００が被害を受けた場合にも、ＳＶＯＬに格納されているデータを用いて業務を継続することが可能となる。
【０１５１】
図１９には、リモートコピー機能を実現する構成の一例を示している。正ストレージシステム３００は、ＰＶＯＬを有するストレージシステム２００であり、副ストレージシステム４００は、ＳＶＯＬを有するストレージシステム２００である。
【０１５２】
まず、正ストレージシステム３００の構成について説明する。ＰＶＯＬ３０１及びＰＶＯＬ３０２は、リモートコピーのコピー元ボリューム２５０である。ジャーナルボリューム３０３（以下「ＪＶＯＬ」）は副ストレージシステム４００へ転送するためのデータを一時的に格納しておくためのボリューム２５０である。
【０１５３】
次に、副ストレージシステム４００の構成について説明する。副ストレージシステム４００は、正ストレージシステム３００と同様の構成を有する。ＳＶＯＬ４０１、ＳＶＯＬ４０２はリモートコピーのコピー先ボリューム２５０である。ＪＶＯＬ４０３は正ストレージシステム３００から副ストレージシステム４００へ転送されたデータを一時的に格納しておくためのボリューム２５０である。
【０１５４】
矢印３０７は、リモートコピーのペア関係を示している。図１９の例では、ＰＶＯＬ３０１とＳＶＯＬ４０１がペアである。すなわちＰＶＯＬ３０１のコピーはＳＶＯＬ４０１である。そして、ＰＶＯＬ３０２とＳＶＯＬ４０２がペアである。
【０１５５】
また、正ストレージシステム３００から副ストレージシステム４００へ転送するデータを、ＪＶＯＬ３０３、ＪＶＯＬ４０３ではなく、キャッシュ部２２３に一時的に格納するようにしてもよい。
【０１５６】
次に、リモートコピーのコピー動作の概要を説明する。コピープログラムは、リモートコピーのＰＶＯＬにホスト１００からライト要求を受けると、ライトデータとライトデータに対する制御情報から成るジャーナルと呼ばれる転送データを作成し、ＪＶＯＬ３０３へ格納する。ホスト１００のライト要求受け付けを完了した後、ジャーナルをＪＶＯＬ３０３から副ストレージシステム４００のＪＶＯＬ４０３へコピーする。最後に、副ストレージシステム４００において、ＪＶＯＬ４０３からジャーナルを読み出し、ジャーナル内のライトデータをＳＶＯＬに書き込む。以上のようにして、コピープログラムは、ＰＶＯＬのデータをＳＶＯＬへコピーする。
【０１５７】
矢印３０４は、ＰＶＯＬ３０２に対するライト要求を意味している。ジャーナル３０５は、ＪＶＯＬ３０３に格納前のジャーナルの様子を示している。そして、ジャーナル３０８は、正ストレージシステム３００から副ストレージシステム４００へ転送中のジャーナルの様子を示している。ジャーナル４０５は、副ストレージシステム４００のＪＶＯＬ４０３からＳＶＯＬ４０２へコピー前のジャーナルの様子を示している。
【０１５８】
最後に、リモートコピーグループ３０６について説明する。リモートコピーグループ４０６は、リモートコピーグループ３０６と同様である。
【０１５９】
リモートコピーグループ３０６は、複数のＰＶＯＬ３０１，３０２、及び複数のＪＶＯＬ３０３を有する。リモートコピーグループ３０６の特徴は、ホスト１００から同一リモートコピーグループ３０６内のＰＶＯＬ３０１，３０２に発行されたライト順序どおりに、ライトデータをＳＶＯＬに書き込むことである。図１９の例で具体的に説明する。
【０１６０】
ホスト１００からライト要求１がＰＶＯＬ３０１に発行され、その後、ライト要求２がＰＶＯＬ３０２へ発行されたとする。このとき、副ストレージシステム４００では、ライト要求１をＳＶＯＬ４０１へ書き込んだ後、ライト要求２をＳＶＯＬ４０２へ書き込むように制御される。
【０１６１】
以上のように正副リモートコピーグループにおいてライト順序を保証する理由は、ライト順序が入れ替わると、あるＰＶＯＬで先に書き込まれたデータが、コピー先であるＳＶＯＬに未反映であるなど、ＳＶＯＬを用いた業務復旧ができない可能性があるためである。
【０１６２】
リモートコピー機能は、ライト順序を保証するためにジャーナルに後述するライト順序番号を格納し、副ストレージシステム４００へ転送する。そして、副ストレージシステム４００は、ジャーナルに格納されているライト順序番号順にライトデータをＳＶＯＬに書き込む。
【０１６３】
図２０は、リモートコピーグループ３０６、４０６の管理情報を格納するリモートコピーテーブル２２１５の一例を示している。リモートコピーテーブル２２１５は、リモートコピーグループ番号欄２２１５１、属性欄２２１５２、ＪＶＯＬ番号欄２２１５３、ＰＶＯＬ番号欄２２１５４、ＳＶＯＬ番号欄２２１５５、及びライト順序番号欄２２１５６を備える。
【０１６４】
リモートコピーグループ番号欄２２１５１には、各リモートコピーグループ３０６，４０６を識別するための番号であるリモートコピーグループ番号が記録される。属性欄２２１５２には、リモートコピーグループ番号で特定される各リモートコピーグループ３０６，４０６が、コピー元のリモートコピーグループであるか、コピー先のリモートコピーグループであるかを示す情報である属性が記録される。ＪＶＯＬ番号欄２２１５３には、各リモートコピーグループ３０６，４０６に設けられているＪＶＯＬを識別するためのボリューム番号であるＪＶＯＬ番号が記録される。ＰＶＯＬ番号欄２２１５４には、各リモートコピーグループ３０６が有するＰＶＯＬのボリューム番号が記録される。ＳＶＯＬ番号欄２２１５５には、各リモートコピーグループ４０６が有するＳＶＯＬのボリューム番号が記録される。ライト順序番号欄２２１５６には、ＰＶＯＬにデータが書き込まれた順に生成されるジャーナルに付与する番号であるライト順序番号が記録される。ライト順序番号２２１５６は、リモートコピーグループ単位に、ＰＶＯＬにデータが書き込まれる都度自動発番される。
【０１６５】
図２０の例では、リモートコピーグループ番号が１であるリモートコピーグループ３０６は、ＰＶＯＬを含むコピー元のリモートコピーグループである。そして、このリモートコピーグループ３０６は、ＪＶＯＬ１１，１２、及び、ＰＶＯＬ１，２，３を有している。ＰＶＯＬ１，２，３のデータのコピー先となるＳＶＯＬが、それぞれＳＶＯＬ２０，１２，１３である。最後に、ライト順序番号の現在値が１００である。すなわち、次に作成されるジャーナルに対して、ライト順序番号１００が割り当てられる。その割り当て後、ライト順序番号２２１５６は１０１へ更新される。
【０１６６】
ボリューム２５０の処理に必要となる制御情報と同様に、リモートコピーテーブル２２１５も、ＭＰＰＫ２１０内のローカルメモリ２１２に格納すれば、ＰＶＯＬへのライト要求の性能を向上することができる。
【０１６７】
しかし、リモートコピーテーブル２２１５のライト順序番号２２１５６は、ライト要求が発生するたびに参照され、更新される。このため、リモートコピーテーブル２２１５をローカルメモリ２１２に格納するためには、リモートコピーテーブル２２１５のライト順序番号２２１５６へアクセスするＭＰＰＫ２１０を一つのＭＰＰＫ２１０に限定し、当該ＭＰＰＫ２１０のローカルメモリ２１２のみに格納する必要がある。
【０１６８】
これを実現するために、リモートコピー機能では、リモートコピーグループ毎にリモートコピーの処理を担当するＭＰＰＫ２１０を予め決め、当該ＭＰＰＫ２１０がリモートコピーテーブル２２１５を自身のローカルメモリ２１２に格納する。
【０１６９】
ここで、一つのジャーナルを処理する毎にリモートコピーテーブル２２１５を参照及び更新する処理の例として、ジャーナル作成処理及びジャーナルリストア処理を以下に説明する。
【０１７０】
まず、図２１を参照して、ジャーナル作成処理フローの一例を説明する。ジャーナル作成処理は、ストレージシステム２００のプロセッサ２１１が、メモリパッケージ２２０のプログラム部２２２に格納されているライトデータ受領プログラム及びジャーナル作成プログラム（図示省略）を実行することで行われる。
【０１７１】
ストレージシステム２００のライトデータ受領プログラムがホスト１００からライト要求を受領すると（Ｓ１４００）、ライト対象のボリューム２５０に対してライトデータを書き込む（Ｓ１４０１）。続けて、ライトデータ受領プログラムは、ジャーナル作成プログラムを起動する（Ｓ１４０２）。
【０１７２】
ジャーナル作成プログラムは、リモートコピーテーブル２２１５からライト順序番号２２１５６を取得する（Ｓ１４０３）。後続のジャーナル作成に使用するライト順序番号を用意しておくため、ジャーナル作成プログラムは、取得したライト順序番号に１を加えてライト順序番号を更新する（Ｓ１４０４）。
【０１７３】
次いで、ジャーナル作成プログラムは、取得したライト順序番号２２１５６、ＰＶＯＬ番号２２１５４、ＳＶＯＬ番号２２１５５、リモートコピーグループ番号２２１５１などのジャーナルに関する制御情報と、ライトデータからジャーナルを作成しＪＶＯＬに格納する（Ｓ１４０５）。
【０１７４】
ジャーナルの格納によりＪＶＯＬの使用率が変わるため、ジャーナル作成プログラムはＪＶＯＬの使用率を更新する（Ｓ１４０６）。最後に、ジャーナル作成プログラムは、呼び出し元のライトデータ受領プログラムへ完了報告する（Ｓ１４０７）。完了報告を受領したライトデータ受領プログラム２３１は処理を終了する（Ｓ１４０８）。
【０１７５】
次に、図２２を参照して、ＰＶＯＬ側から転送されてきたジャーナルをＪＶＯＬからＳＶＯＬへ書き込む処理の一例を説明する。ジャーナルをＪＶＯＬからＳＶＯＬへ書き込む処理をリストア処理と呼ぶ。このリストア処理は、ストレージシステム２００のプロセッサ２１１が、メモリパッケージ２２０のプログラム部２２２に格納されているリストアプログラム（図示省略）を実行することで行われる。
【０１７６】
まず、リストアプログラムは、リストア対象のジャーナルを決定する（Ｓ１５００）。
【０１７７】
但し、リストア対象のジャーナルは、ＪＶＯＬに格納されているジャーナルのうち、最も古いジャーナルからライト順序番号が連続するように決定する。例えば、ライト順序番号１から１０００までのジャーナルがある場合、ライト順序番号１から１００までのジャーナルをリストア対象とすることは可能である。しかし、ライト順序番号５０から１００までをリストア対象とすることはできない。また、ライト順序番号１から３０までと、ライト順序番号５０から７０までのジャーナルをリストア対象とすることもできない。これは、ホスト１００からＰＶＯＬに書き込まれたデータを、ライト順序番号２２１５６どおりにＳＶＯＬに書き込むことで、ＳＶＯＬの状態を常に、ＰＶＯＬで過去に起こり得た状態に保つためである。これにより、ＰＶＯＬに障害が発生した場合、ＳＶＯＬを利用した業務処理の再開が可能となる。
【０１７８】
次に、リストアプログラムは、リストア対象に決定したジャーナルのライト順序番号２２１５６のうちの最小値を変数ｉに代入する（Ｓ１５０１）。なお、変数ｉは、ＭＰＰＫ２１０のローカルメモリ２１２に一時的に格納するものとする。リストアプログラムは、ライト順序番号順にジャーナルを参照し、当該ジャーナルがリストア対象か否かをチェックする（Ｓ１５０２）。リストア対象でないと判定した場合（Ｓ１５０２、Ｎｏ）、リストア処理を終了する（Ｓ１５１０）。
【０１７９】
Ｓ１５０２でリストア対象であると判定した場合（Ｓ１５０２、Ｙｅｓ）、リストアプログラムは、リストア対象と判定したジャーナルをリストアする処理（Ｓ１５０３〜Ｓ１５０６）を実行する。
【０１８０】
まず、リストアプログラムは、参照したジャーナルの適用先ＳＶＯＬを決定する（Ｓ１５０３）。あるＰＶＯＬへのライトに対して作成されたジャーナルは、当該ＰＶＯＬとリモートコピー機能のペア関係にあるＳＶＯＬにリストアする必要がある。リストアプログラムは、ジャーナル作成時にジャーナルに格納したＳＶＯＬ番号２２１５５を用いてジャーナルの適用先ＳＶＯＬを決定する。
【０１８１】
ジャーナルの適用先ＳＶＯＬを決定すると、リストアプログラムは、ジャーナルをＳＶＯＬに書き込み（Ｓ１５０４）、リストア済みライト順序番号２２１５６を、適用したジャーナルのライト順序番号２２１５６で置き換える（Ｓ１５０５）。最後に、リストアプログラムは、変数ｉに１を加えて（Ｓ１５０６）、次のジャーナルを処理するためＳ１５０２へ返る。
【０１８２】
以上の構成により、リモートコピー機能が設定されているＰＶＯＬへのライトデータが、ＰＶＯＬに書き込まれた順序を保持したままＳＶＯＬにコピーされる。なお、このように構成されたリモートコピーグループは、一般にコンシステンシーグループ（consistency group）と呼ばれる。
【０１８３】
図２３に、リモートコピーグループの処理担当ＭＰＰＫ２１０を管理するリモートコピーグループ用担当ＭＰＰＫテーブル２２１６（以下簡単のため「担当ＭＰＰＫテーブル２２１６」と称する。）の一例を示している。担当ＭＰＰＫテーブル２２１６は、リモートコピーグループ番号欄２２１６１、及び担当ＭＰＰＫ番号欄２２１６２を備える。
【０１８４】
リモートコピーグループ番号欄２２１６１には、各リモートコピーグループ３０６，４０６を識別するための識別番号であるリモートコピーグループ番号２２１６１が記録される。担当ＭＰＰＫ番号欄２２１６２には、図６に示した担当ＭＰＰＫテーブル２２１２の場合と同じ担当ＭＰＰＫ番号２２１６２が記録される。
【０１８５】
次に、ローカルコピー機能、拡張ボリューム機能と同様に、リモートコピー機能のＰＶＯＬ、ＪＶＯＬ、ＳＶＯＬ、及びリモートコピーグループの担当ＭＰＰＫをどのように設定すれば最適であるかについて説明する。
【０１８６】
まず、正ストレージシステム３００におけるリモートコピーの処理について説明する。リモートコピー機能は、ホスト１００からＰＶＯＬへのライト要求を受領すると、そのライト要求に係るデータをＰＶＯＬに書き込むと共に、ジャーナルを作成し、ＪＶＯＬに格納する。ＰＶＯＬの担当ＭＰＰＫ２１０とリモートコピーグループの担当ＭＰＰＫ２１０が異なる場合、ＰＶＯＬの担当ＭＰＰＫ２１０はリモートコピーグループの担当ＭＰＰＫ２１０へジャーナル作成処理を依頼する必要がある。このとき、ＰＶＯＬの担当ＭＰＰＫ２１０とリモートコピーグループの担当ＭＰＰＫ２１０との間での通信が必要となる。
【０１８７】
次に、リモートコピーグループの担当ＭＰＰＫ２１０が作成したジャーナルをＪＶＯＬに格納する。リモートコピーグループの担当ＭＰＰＫ２１０とＪＶＯＬの担当ＭＰＰＫ２１０が異なる場合、リモートコピーグループの担当ＭＰＰＫ２１０はＪＶＯＬの担当ＭＰＰＫ２１０へジャーナル格納処理を依頼する必要がある。このとき、リモートコピーグループの担当ＭＰＰＫ２１０とＪＶＯＬの担当ＭＰＰＫ２１０との間での通信が必要となる。
【０１８８】
最後に、ＪＶＯＬに格納されたジャーナルを副ストレージシステム４００へ転送する。具体的には、リモートコピー機能を実現するコピープログラムによってリモートコピーグループの担当ＭＰＰＫ２１０が、転送すべきジャーナルの決定や、決定したジャーナルが格納されているＪＶＯＬの格納アドレスなどを取得し、ジャーナルを転送する。このため、リモートコピーグループの担当ＭＰＰＫ２１０とＪＶＯＬの担当ＭＰＰＫ２１０が異なる場合、リモートコピーグループの担当ＭＰＰＫ２１０は、転送ジャーナルの特定や、格納アドレスを決定した後、ＪＶＯＬの担当ＭＰＰＫ２１０へ副ストレージシステム４００への転送を依頼する必要がある。このとき、リモートコピーグループの担当ＭＰＰＫ２１０とＪＶＯＬの担当ＭＰＰＫ２１０との間での通信が必要となる。
【０１８９】
以上のようにして、正ストレージシステム３００では、ジャーナルを作成するために、最大２往復のＭＰＰＫ２１０間の通信、作成したジャーナルを転送するために１往復のＭＰＰＫ２１０間の通信が必要となる。
【０１９０】
ここで、リモートコピー機能におけるＰＶＯＬ、ＪＶＯＬの担当ＭＰＰＫ２１０をどのように決定すれば最適であるかについて説明する。前記のように、ＪＶＯＬは、ＰＶＯＬからＳＶＯＬへの転送データを一時的に格納するためのボリューム２５０である。このため、一つのリモートコピーグループが有するＪＶＯＬの数は、数個から十数個程度である。よって、リモートコピーグループとＪＶＯＬの担当ＭＰＰＫ２１０は、なるべく一致させ、ＭＰＰＫ２１０間の通信を回避することが望ましい。
【０１９１】
一方で、一つのリモートコピーグループが有するＰＶＯＬの数は、数百から数千個である。ＰＶＯＬとリモートコピーグループの担当ＭＰＰＫ２１０を同一とした場合、ライト要求に伴うジャーナル作成処理だけでなく、ＰＶＯＬへのリード処理も一つのＭＰＰＫ２１０で処理しなければならなくなってしまう。このように、一つのＭＰＰＫ２１０に処理負荷が集中するのを防止するため、ＰＶＯＬとリモートコピーグループの担当ＭＰＰＫ２１０は、同一化しないほうが望ましい。
【０１９２】
次に、副ストレージシステム４００におけるリモートコピーの処理について説明する。副ストレージシステム４００では、正ストレージシステム３００から転送され、ＪＶＯＬに格納されているジャーナル内のライトデータをＳＶＯＬに書き込む。
【０１９３】
まず、副ストレージシステム４００のコピープログラムにより、ＪＶＯＬに格納されているジャーナルのうち、最も小さいライト順序番号２２１５６を有するジャーナルが検索される。そして、当該ジャーナルのライト順序番号２２１５６が、前回ＳＶＯＬに書き込んだジャーナルのライト順序番号２２１５６の次の番号であるか否かを判定する。検索して取得されたジャーナルのライト順序番号２２１５６が前回ＳＶＯＬに書き込んだジャーナルのライト順序番号２２１５６の次の番号であれば、リモートコピープログラムは、ローカルコピープログラムを起動し、ＪＶＯＬからＳＶＯＬへのコピーを指示する。
【０１９４】
この際、リモートコピーグループの担当ＭＰＰＫ２１０とＪＶＯＬの担当ＭＰＰＫ２１０が異なる場合、コピープログラムをＪＶＯＬの担当ＭＰＰＫ２１０で起動する必要がある。このとき、リモートコピーグループの担当ＭＰＰＫ２１０とＪＶＯＬの担当ＭＰＰＫ２１０との間での通信が必要となる。
【０１９５】
また、ＪＶＯＬの担当ＭＰＰＫ２１０とＳＶＯＬの担当ＭＰＰＫ２１０が異なる場合、ローカルコピー処理のＳＶＯＬ側処理をＳＶＯＬの担当ＭＰＰＫ２１０へ依頼する必要がある。このとき、ＪＶＯＬの担当ＭＰＰＫ２１０とＳＶＯＬの担当ＭＰＰＫ２１０との間での通信が必要となる。
【０１９６】
以上のようにして、副ストレージシステム４００でジャーナルをＳＶＯＬに書き込むために、最大２往復のＭＰＰＫ２１０間通信が必要となる。
【０１９７】
ここで、リモートコピー機能のＳＶＯＬ、ＪＶＯＬの担当ＭＰＰＫ２１０をどのように決定すれば最適であるかについて説明する。ＪＶＯＬの処理は、正ストレージシステム３００側と同様の理由でリモートコピーグループの担当ＭＰＰＫ２１０が担当することが望ましい。
【０１９８】
一方、一つのリモートコピーグループが有するＳＶＯＬの数は、ＰＶＯＬと同様に、数百から数千個である。しかしながら、ＳＶＯＬは災害時などに業務復旧用として用いるボリューム２５０であるため、正常運用中においてはＰＶＯＬのようにホスト１００からのライト及びリード要求は発生しない。このため、ＰＶＯＬのようにリード要求の負荷分散を考慮する必要がない。よって、リモートコピーグループとＳＶＯＬの担当ＭＰＰＫ２１０は、なるべく一致させ、ＭＰＰＫ２１０間の通信を回避することが望ましい。
【０１９９】
次に、リモートコピーグループの担当ＭＰＰＫ２１０、リモートコピー機能が設定されているボリューム２５０の担当ＭＰＰＫ２１０の切り替えによって発生する問題について説明する。リモートコピーグループの担当ＭＰＰＫ２１０及びリモートコピー機能が設定されているボリューム２５０の担当ＭＰＰＫ２１０を、リモートコピー機能の設定状況を考慮せずに切り替える場合、以下のような問題が発生するおそれがある。
【０２００】
なお、ＰＶＯＬの担当ＭＰＰＫ２１０と、リモートコピーグループの担当ＭＰＰＫ２１０が異なる場合のＪＮＬ作成処理は、図２１のステップＳ１４００からＳ１４０２およびＳ１４０８をＰＶＯＬの担当ＭＰＰＫ２１０が実行し、ステップＳ１４０３からＳ１４０７をリモートコピーグループの担当ＭＰＰＫ２１０が実行することで実現される。この場合、ステップＳ１４０２はＭＰＰＫ間通信を行い、リモートコピーグループの担当ＭＰＰＫ２１０で、ジャーナル作成プログラムを起動するものとする。
【０２０１】
まず、正ストレージシステム３００における問題を説明する。リモートコピーグループの担当ＭＰＰＫ２１０を切り替える場合は、前記したように、ＪＶＯＬの担当ＭＰＰＫ２１０も切り替えなければ、ジャーナルを格納するためにＭＰＰＫ２１０間の通信が必要になりＩＯ性能が低下してしまう。また、リモートコピーグループの担当ＭＰＰＫ２１０と、ＪＶＯＬの担当ＭＰＰＫ２１０の両方を切り替える場合でも、リモートコピーグループの担当ＭＰＰＫ２１０よりも先に、ＪＶＯＬの担当ＭＰＰＫ２１０を切り替えると、ジャーナルをＪＶＯＬに格納するためにＭＰＰＫ２１０間の通信が必要になりＩＯ性能が低下してしまう。さらに、リモートコピーグループとＪＶＯＬの担当ＭＰＰＫ２１０を必ず一致させることを前提として、ジャーナルをＪＶＯＬに格納するためのＭＰＰＫ２１０間通信機能を実装しない場合は、リモートコピー機能のＩＯ処理が途中で実行不可能となってしまう。
【０２０２】
以下、前記問題点をより具体的に説明する。以下の説明では、リモートコピーグループの担当ＭＰＰＫ２１０とＪＶＯＬの担当ＭＰＰＫ２１０を、ＭＰＰＫ１からＭＰＰＫ２へ切り替えるケースを前提とする。ＪＶＯＬについては、ＪＶＯＬの使用中ジョブ情報欄２２１１３にジョブ番号が設定されていなければ、担当ＭＰＰＫ２１０が切り替えられる可能性がある。この場合、ＭＰＰＫ１には、ジャーナルを作成し、作成したジャーナルを格納する直前の処理が存在する可能性があるが、ＪＶＯＬの担当ＭＰＰＫ２１０は、ＭＰＰＫ１からＭＰＰＫ２へ切り替えられており、このＭＰＰＫ１での処理は継続不可能となる。一方で、切り替え先であるＭＰＰＫ２へ依頼されるジャーナル作成処理は、ＪＶＯＬの担当ＭＰＰＫ２１０が、いずれＭＰＰＫ２へ切り替えられることがわかるため、切り替え待ちを行うことができる。
【０２０３】
次に、副ストレージシステム４００における問題を説明する。副ストレージシステム４００でも正ストレージシステム３００と同様に、リモートコピーグループの担当ＭＰＰＫ２１０を切り替える場合は、ＪＶＯＬ及びＳＶＯＬの担当ＭＰＰＫ２１０も切り替えなければ、ジャーナルをＪＶＯＬから読み出す処理、ジャーナルをＳＶＯＬに書き込む処理においてＭＰＰＫ２１０間の通信が必要になり性能が低下してしまう。また、リモートコピーグループの担当ＭＰＰＫ２１０よりも先に、ＪＶＯＬ又はＳＶＯＬの担当ＭＰＰＫ２１０を切り替える場合、ＪＶＯＬからＳＶＯＬへのコピー処理が途中で実行不可能となってしまう可能性がある。
【０２０４】
上述した問題を回避するため、リモートコピー機能は、実行中の処理（ジャーナル作成、ジャーナルのＪＶＯＬへの格納、及びＪＶＯＬからＳＶＯＬへのコピー処理）を完了してから、リモートコピーグループの担当ＭＰＰＫ２１０を切り替える。そして、リモートコピーグループの担当ＭＰＰＫ２１０を切り替えた後に、ＪＶＯＬ及びＳＶＯＬの担当ＭＰＰＫ２１０の切り替えを行う。これにより、上述した問題を回避することができる。
【０２０５】
次に、図２４及び図２５を参照して、上記問題を回避することができる担当ＭＰＰＫ２１０の切り替え方法の一例を説明する。図２４は、図１８に示した切り替え開始プログラム２２２１を一部変更したプログラムである。図２５は、リモートコピーグループの担当ＭＰＰＫ２１０を切り替えるリモートコピープログラムの処理の一例である。なお、このリモートコピープログラムの処理は、ストレージシステム２００のプロセッサ２１１が、メモリパッケージ２２０のプログラム部２２２に格納されている切り替え開始プログラム２２２１、及びリモートコピープログラムを実行することで実現される。本実施例では、リモートコピープログラムは図２のコピープログラム２２３０の一部として実装されているものとするが、特にこのような構成に限定されるものではない。
【０２０６】
図２４の切り替え開始プログラム２２２１は、図１８の切り替え開始プログラム２２２１に、Ｓ１１１からＳ１１４までの処理を追加したものである。切り替え対象資源がリモートコピーグループ、リモートコピー機能のＳＶＯＬ、又はＪＶＯＬの場合、Ｓ１１２からＳ１１４が実行される。切り替え対象資源がＰＶＯＬ又はリモートコピーグループの場合、Ｓ１００、Ｓ１０１の実行によって、担当ＭＰＰＫ２１０の切り替えは開始される。なお、切り替え対象資源がリモートコピーグループの場合、Ｓ１１２からＳ１１４までの処理も実行される。
【０２０７】
図２４の切り替え開始プログラム２２２１におけるＳ１１１からＳ１１４までの処理について説明する。切り替え開始プログラム２２２１は、切り替え対象資源が、リモートコピーグループ、リモートコピーのＳＶＯＬ、又は、ＪＶＯＬであるか否かを判定する（Ｓ１１１）。切り替え対象資源がリモートコピーグループ、リモートコピー機能のＳＶＯＬ、及びＪＶＯＬのいずれでもないと判定した場合（Ｓ１１１、Ｎｏ）、切り替え開始プログラム２２２１は処理を終了する（Ｓ１０２）。
【０２０８】
Ｓ１１１で切り替え対象資源がリモートコピーグループやリモートコピーのＳＶＯＬ、又は、ＪＶＯＬであると判定した場合（Ｓ１１１、Ｙｅｓ）、切り替え開始プログラム２２２１は、切り替え対象資源に係るリモートコピーグループ、ＳＶＯＬ、又はＪＶＯＬの情報を取得する（Ｓ１１２）。この処理は、切り替え開始プログラム２２２１がリモートコピーテーブル２２１５、ボリュームテーブル２２１１を参照することによって実現する。
【０２０９】
次に、切り替え開始プログラム２２２１は、Ｓ１１２で取得した資源のうち、担当ＭＰＰＫ２１０の切り替えが開始していない資源が存在するか否かをチェックする（Ｓ１１３）。この処理は、切り替え開始プログラム２２２１が担当ＭＰＰＫテーブル２２１２、２２１６の切り替え中ビット２２１２３，２２１５３を参照することで実現する。切り替え中でない資源（ＪＶＯＬ、ＳＶＯＬ、又はリモートコピーグループ）が一つ以上存在すると判定した場合（Ｓ１１３、Ｙｅｓ）、切り替え開始プログラム２２２１は、Ｓ１１４へ進む。切り替え開始プログラム２２２１は、切り替え中でない全ての資源に対して切り替え開始プログラム２２２１をコールして、切り替え処理を開始する（Ｓ１１４）。最後に、切り替え開始プログラム２２２１は処理を終了する（Ｓ１０２）。
【０２１０】
図２５に示すリモートコピープログラムの処理は、リモートコピー処理中にリモートコピーグループの担当ＭＰＰＫ２１０が切り替え中になったことを検出し、切り替え元ＭＰＰＫ２１０のリモートコピー処理を終了し、切り替えを実行する処理である。リモートコピープログラムは、リモートコピーグループ単位に起動されており、ジャーナルを正ストレージシステム３００から副ストレージシステム４００へ転送する処理、転送済みのジャーナルを正ストレージシステム３００のＪＶＯＬから削除する処理、副ストレージシステム４００でＪＶＯＬからＳＶＯＬへの書込みをコピープログラムに指示するリモートコピー処理などを実行する。
【０２１１】
リモートコピープログラムは、担当ＭＰＰＫテーブル２２１６を参照し、担当するリモートコピーグループの担当ＭＰＰＫ２１０の情報を取得し（Ｓ８００）、担当ＭＰＰＫテーブル２２１６の切り替え中ビット２２１６３がＯＮであるか否かを判定する（Ｓ８０１）。切り替え中ビットがＯＦＦであると判定した場合（Ｓ８０１、Ｎｏ）、リモートコピープログラムは、リモートコピー処理（転送データの送信や、ＪＶＯＬからＳＶＯＬへの書込みの指示など）を実行し（Ｓ８０８）、Ｓ８００へ戻る。
【０２１２】
切り替え中ビットがＯＮであると判定した場合（Ｓ８０１、Ｙｅｓ）、リモートコピープログラムは、切り替え先ＭＰＰＫ２１０が自ＭＰＰＫ２１０であるか否かを判定する（Ｓ８０２）。自ＭＰＰＫ２１０が切り替え先であと判定した場合（Ｓ８０２、Ｙｅｓ）、リモートコピープログラムの処理はＳ８０７へ進み、リモートコピーグループの担当ＭＰＰＫ２１０が切り替わるのを待つ（Ｓ８０７）。リモートコピーグループの担当ＭＰＰＫ２１０の切り替えが完了すると、リモートコピープログラムはＳ８０７からＳ８０８へ進み、前記のリモートコピー処理を実行する。
【０２１３】
一方で、Ｓ８０２において、切り替え先は自ＭＰＰＫ２１０でないと判定した場合（Ｓ８０２、Ｎｏ）、リモートコピープログラムは、切り替え元ＭＰＰＫ２１０で実行中の処理を終了し、担当ＭＰＰＫ２１０を切り替える。具体的には、リモートコピープログラムは、リモートコピー処理を実行している他のプログラムへ処理終了を要求する（Ｓ８０３）。他のプログラムとは、リモートコピープログラムから指示を受けてＪＶＯＬからＳＶＯＬへデータを書き込んでいるコピープログラムや、転送済みジャーナルを正ストレージシステム３００のＪＶＯＬから削除しているプログラムなどである。これらのプログラムは、リモートコピープログラムから処理終了の要求を受領すると、実行途中であった処理を完結し、処理を終了する。
【０２１４】
リモートコピープログラムは、リモートコピー処理を実行している他のプログラムの処理終了を監視する（Ｓ８０４）。この監視処理は、処理を終了する他のプログラムが処理を終了する直前に、処理を終了したことを制御情報としてローカルメモリ２１２や制御情報部２２１に書込み、リモートコピープログラムが書き込まれた制御情報をＳ８０４で参照することなどにより実現できる。
【０２１５】
次いで、リモートコピープログラムは、他のプログラムによるリモートコピー処理が終了したか判定する（Ｓ８０４）。終了したと判定した場合（Ｓ８０４、Ｙｅｓ）、リモートコピープログラムは、担当切り替えプログラム２２２４をコールし（Ｓ８０５）、処理を終了する（Ｓ８０６）。その後、リモートコピープログラムは、リモートコピーグループの新しい担当ＭＰＰＫ２１０において再起動するものとする。
【０２１６】
図２５に示したリモートコピープログラムのＳ８０５からコールされる担当切り替えプログラム２２２４による処理フローは、図１１と同様である。
【０２１７】
図１１のＳ４００で、リモートコピーテーブル２２１５がローカルメモリ２１２からメモリパッケージ２２０の制御情報部２２１へ書き出される。そして、Ｓ４０１でリモートコピーグループの担当ＭＰＰＫ２１０が切り替えられる。具体的には、担当切り替えプログラム２２２４は、担当ＭＰＰＫテーブル２２１６の担当ＭＰＰＫ番号２２１６２を新しい担当ＭＰＰＫ２１０のＭＰＰＫ番号２２１６２に変更し、切り替え中ビット２２１６３をＯＮからＯＦＦへ変更し、切り替え先ＭＰＰＫ番号２２１６４を、切り替え先ＭＰＰＫ２１０が存在しないことを意味する「−」へ変更する。
【０２１８】
複数のストレージ機能の適用
同一のボリューム２５０に対して、複数のストレージ機能を適用することができる。例えば、あるボリューム２５０がリモートコピー機能のＳＶＯＬであり、かつ、ローカルコピー機能のＰＶＯＬでもある場合がある。このように、同一のボリューム２５０に複数のストレージ機能が適用されている場合にも、本実施例を適用することができる。すなわち、図２４に示した切り替え開始プログラム２２２１や、図１５に示した切り替え可否チェックプログラム２２２３は、同一ボリューム２５０に複数のストレージ機能が適用されている場合にも対応できるように考慮されている。
【０２１９】
あるボリューム２５０がリモートコピー機能のＳＶＯＬであり、かつ、ローカルコピー機能のＰＶＯＬである場合の本実施例の構成について、図２４、及び図１５を参照して説明する。
【０２２０】
切り替え対象ボリューム２５０としてリモートコピー機能のＳＶＯＬに設定されているボリューム２５０が指定され、図２４の切り替え開始プログラム２２２１がコールされた場合、切り替え開始プログラム２２２１のＳ１００において、指定されたリモートコピー機能のＳＶＯＬ及びローカルコピー機能のＰＶＯＬの切り替えが開始され、Ｓ１０６において、ローカルコピー機能のＳＶＯＬの切り替えが開始される。そして、Ｓ１１１からＳ１１４において、指定されたリモートコピー機能のＳＶＯＬが属するリモートコピーグループに設けられているＪＶＯＬ、及び他のＳＶＯＬの切り替えが開始される。よって、関連する全ボリューム２５０の切り替えが正しく開始される。
【０２２１】
また、切り替え対象ボリューム２５０としてローカルコピー機能のＳＶＯＬが設定されているボリューム２５０が指定され、図２４の切り替え開始プログラム２２２１がコールされた場合、切り替え開始プログラム２２２１のＳ１０６で、切り替え開始プログラム２２２１をコールすることで、ローカルコピー機能のＰＶＯＬの切り替えが開始される。
【０２２２】
指定ボリューム２５０がローカルコピー機能のＰＶＯＬ、かつリモートコピー機能のＳＶＯＬであることから、ローカルコピー機能のＰＶＯＬを指定してコールされた切り替え開始プログラム２２２１は、Ｓ１１１からＳ１１４において、リモートコピー機能のＳＶＯＬが属するリモートコピーグループに設けられているＪＶＯＬ、及び他のＳＶＯＬの切り替えを開始する。よって、関連する全ボリューム２５０の切り替えが正しく開始される。
【０２２３】
次に、図１５を参照して、担当切り替え可否チェックプログラム２２２３の処理フローについて説明する。図１５のＳ６０２〜Ｓ６０４はローカルコピー機能の切り替え可否チェック条件であり、Ｓ６０８〜Ｓ６１０がリモートコピー機能の切り替え可否チェック条件である。これら切り替え可否チェック条件のチェック対象となっているボリューム２５０が、リモートコピー機能のＳＶＯＬ、かつローカルコピー機能のＰＶＯＬである場合について説明する。
【０２２４】
まず、担当切り替え可否チェックプログラム２２２３は、Ｓ６０４でローカルコピー機能の担当切り替え可否チェック条件をチェックする。条件を満たす場合（Ｓ６０４、Ｎｏ）、担当切り替え可否チェックプログラム２２２３は、Ｓ６０５を経てＳ６０８へ進む。担当切り替え可否チェック条件のチェック対象となっているボリューム２５０は、リモートコピー機能のＳＶＯＬでもあるためである。担当切り替え可否チェックプログラム２２２３は、Ｓ６０８からＳ６１０でリモートコピーの切り替え可否チェック条件をチェックする。条件を満たさない場合（Ｓ６１０、Ｎｏ）、担当切り替え可否チェックプログラム２２２３は処理を終了する。すなわち、ローカルコピー機能のチェック条件を満たしても、リモートコピー機能のチェック条件が満たされていないため、担当の切り替えは行わない。
【０２２５】
以上のように、同一ボリューム２５０に複数のストレージ機能が適用されている場合、それら複数のストレージ機能の担当ＭＰＰＫ切り替え条件をすべて満たす場合にのみ担当ＭＰＰＫを切り替えることができる。
【０２２６】
［実施例２］
次に、本発明を実施するための実施例２について説明する。実施例１では、ボリューム２５０へのストレージ機能の設定を考慮して、担当ＭＰＰＫ２１０を切り替える処理方式について説明した。本実施例では、各ＭＰＰＫ２１０の負荷に偏りが発生したとき、ストレージ機能の設定状況、及びストレージ機能の処理負荷を考慮することで、より高精度の負荷分散の実現方法について説明する。
【０２２７】
まず、ストレージ機能の処理負荷を考慮した負荷分散について説明する。ホスト１００からストレージシステム２００に発行されるＩＯ要求の量の変化などにより、ＭＰＰＫ２１０間で処理負荷に偏りが生じる可能性がある。このとき、ＭＰＰＫ２１０間で負荷を均等に配分するために、負荷の高いＭＰＰＫ２１０が処理を担当している資源（ボリューム２５０、リモートコピーグループ）の担当ＭＰＰＫ２１０を、負荷の低いＭＰＰＫ２１０へ切り替えることで、特定ＭＰＰＫ２１０に負荷が集中するのを防ぐことができる。
【０２２８】
ホスト１００からＩＯ要求がほとんど発行されていないボリューム２５０の担当ＭＰＰＫ２１０を切り替えても、他のＭＰＰＫ２１０の負荷はあまり影響を受けない。このため、担当ＭＰＰＫ２１０の切り替えによって、ＭＰＰＫ２１０間の負荷ができるだけ均等になるように、担当ＭＰＰＫ２１０を切り替える対象となる資源を選択する必要がある。
【０２２９】
次に、本実施例における各ＭＰＰＫ２１０の負荷の計算方法について説明する。ボリューム２５０についての負荷の計算は、例えば、ストレージ機能が適用されていない通常ボリューム２５０の場合、「当該ボリューム２５０へのライト数×ライト処理コスト＋当該ボリューム２５０へのリード数×リード処理コスト」で表される計算式によって行うことができる。また、現在の負荷を正しく表現するために、当該ボリューム２５０へのライト数は、ボリューム２５０作成時点からの合計ライト数ではなく、直近１秒間のライト数などとすればよい。
【０２３０】
また、対象ボリューム２５０にストレージ機能が適用されている場合、前記負荷の計算には、そのストレージ機能特有の処理の負荷も考慮する必要がある。具体的には、ストレージ機能特有の処理の負荷は、例えばローカルコピー機能においては、ＰＶＯＬからＳＶＯＬへのコピー処理の負荷、リモートコピー機能においては、転送データをＪＶＯＬから削除する処理の負荷を含む。
【０２３１】
なお、一つのＭＰＰＫ２１０の合計負荷は、当該ＭＰＰＫ２１０が担当する全ボリューム２５０、及び全リモートコピーグループの合計負荷で計算する。
【０２３２】
以下、ボリューム２５０のストレージ機能の設定状況、及びストレージ機能の処理負荷を考慮した担当ＭＰＰＫ２１０の切り替えによる負荷分散処理に必要となる、ＭＰＰＫ２１０間での負荷の偏りの検出方法、各ＭＰＰＫ２１０の負荷の計算方法、及びそれらの処理に必要となる制御情報について説明する。なお、ホスト１００及びストレージシステム２００を含む情報処理システム１のの構成は、実施例１と同じである。
【０２３３】
まず、図２６、図２７、及び図２８を参照して、各ＭＰＰＫ２１０の負荷の偏りを検出する処理について説明する。図２６は、ＭＰＰＫ２１０のプロセッサ２１１の使用率を管理するＭＰＰＫ使用率テーブル２２１７の一例である。図２７は、ＭＰＰＫ２１０で実行される各種処理の処理コスト（後述）を管理するための処理コストテーブル２２１８の一例である。図２８は、各ＭＰＰＫ２１０の使用率をチェックし負荷が偏っているか否かを判定するためのモニタプログラム２２２５の処理フローの一例である。
【０２３４】
ＭＰＰＫ使用率テーブル２２１７は、ＭＰＰＫ番号欄２２１７１と使用率欄２２１７２とを備える。ＭＰＰＫ番号欄２２１７１には、各ＭＰＰＫ２１０を識別するための識別符号であるＭＰＰＫ番号が記録される。使用率欄２２１７２には、ＭＰＰＫ番号２２１７１で特定される各ＭＰＰＫ２１０の使用率が百分率で記録される。本実施例では、ＭＰＰＫ２１０の現在の使用率を表現するために、例えば後述するモニタプログラム２２２５によって各ＭＰＰＫ２１０から直近１秒間の使用率を取得し、これを適時に使用率欄２２１７２に記録するものとしている。
【０２３５】
処理コストテーブル２２１８は、処理種別欄２２１８１と処理コスト欄２２１８２とを備える。処理種別欄２２１８１には、ＭＰＰＫ２１０で実行される処理の種類を表す処理種別が記録される。本実施例では、図示のように、処理種別欄２２１８１に、通常ボリュームリード、通常ボリュームライト、拡張ボリュームのリード、拡張ボリュームのライト、ローカルコピーのＰＶＯＬリード、ローカルコピーのＰＶＯＬライト、ローカルコピーのＰＶＯＬ側のコピー処理、ローカルコピーのＳＶＯＬ側のコピー処理、リモートコピーのＰＶＯＬリード、リモートコピーのＰＶＯＬライト、リモートコピーのＳＶＯＬリード、リモートコピーのＳＶＯＬライト、リモートコピーのジャーナル作成処理、リモートコピーのジャーナル転送処理（コピー元）、リモートコピーのジャーナル削除処理、リモートコピーのジャーナル転送処理（コピー先）、リモートコピーの書込みジャーナル決定処理、リモートコピーのジャーナル書き込み処理を記録している。これらの処理種別は網羅的なものではなく、システム条件等に応じて適宜種別を追加、削除してよい。
【０２３６】
処理コスト欄２２１８２には、処理種別欄２２１８１に記録された各処理を実行するためにプロセッサ２１１を使用する時間である処理コストが記録される。図２７の例では、通常ボリューム２５０のリード処理を実行するためには、ＭＰＰＫ２１０のプロセッサ２１１を１０マイクロ秒使用することを表している。なお、通常ボリューム２５０は、ストレージ機能が適用されていないボリューム２５０を意味する。処理コスト２２１８２は、予め保守端末２７０などからストレージシステム２００に登録してもよいし、ストレージシステム２００内のモニタプログラムが各処理実行時の処理時間を実測して設定してもよい。
【０２３７】
図２８は、ＭＰＰＫ２１０間での負荷の偏りを検出し、担当ＭＰＰＫ２１０を切り替える資源を決定するためのモニタプログラム２２２５の処理の一例である。なお、このモニタプログラム２２２５の処理は、ストレージシステム２００のプロセッサ２１１が、メモリパッケージ２２０のプログラム部２２２に格納されているモニタプログラム２２２５を実行することで実現される。
【０２３８】
まず、モニタプログラム２２２５は、ＭＰＰＫ使用率テーブル２２１７を参照することで、各ＭＰＰＫ２１０の使用率２２１７２を取得する（Ｓ９００）。そして、モニタプログラム２２２５は、使用率２２１７２が最も高いＭＰＰＫ２１０と、使用率２２１７２が最も低いＭＰＰＫ２１０の使用率の差が所定の閾値以上であるか否かを判定する（Ｓ９０１）。使用率２２１７２の差が閾値より小であると判定した場合（Ｓ９０１、Ｎｏ）、ＭＰＰＫ２１０間での負荷分散処理は不要であると判定し、Ｓ９００へ戻る。
【０２３９】
一方で、使用率２２１７２の差が閾値以上であると判定した場合（Ｓ９０１、Ｙｅｓ）、使用率２２１７２が最も高いＭＰＰＫ２１０が処理を担当している資源の担当ＭＰＰＫ２１０を、使用率２２１７２が最も低いＭＰＰＫ２１０へ切り替えることで負荷を分散する。
【０２４０】
このＭＰＰＫ２１０間での負荷分散のために、担当ＭＰＰＫ２１０を切り替える資源を決定するための処理について説明する。
【０２４１】
まず、モニタプログラム２２２５は、使用率２２１７２が最も高いＭＰＰＫ２１０の現在の合計負荷と、使用率２２１７２が最も低いＭＰＰＫ２１０の現在の負荷の合計を計算する（Ｓ９０２、Ｓ９０３）。負荷の計算は、後述の負荷計算プログラム２２２６によって実現される。
【０２４２】
次に、モニタプログラム２２２５は、各ＭＰＰＫ２１０の負荷を均等にするために、どの程度の負荷を有する資源の担当ＭＰＰＫ２１０を切り替えるべきかを決定する（Ｓ９０４）。
【０２４３】
例えば、モニタプログラム２２２５は、「（切り替え元ＭＰＰＫ２１０の合計負荷−切り替え先ＭＰＰＫ２１０の負荷）÷２」の負荷を有する資源の担当ＭＰＰＫ２１０を切り替えるように構成することができる。また、切り替え元ＭＰＰＫ２１０の合計負荷、切り替え先ＭＰＰＫ２１０の合計負荷だけでなく、それ以外のＭＰＰＫ２１０の合計負荷も考慮してもよい。例えば、全てのＭＰＰＫ２１０の平均負荷を計算し、「切り替え元ＭＰＰＫ２１０の合計負荷−平均負荷」の負荷を有する資源の担当ＭＰＰＫ２１０を切り替えるようにモニタプログラム２２２５を構成してもよい。
【０２４４】
次に、担当ＭＰＰＫ２１０を切り替え元ＭＰＰＫ２１０から切り替え先ＭＰＰＫ２１０に切り替える対象となる資源の選択方法について説明する。
【０２４５】
ここでは、モニタプログラム２２２５が、Ｓ９０４での計算によって求められる負荷の値を有する資源を選択する。Ｓ９０４の計算結果の値と等しくなる負荷を有する資源がないと判定された場合は、計算結果の値を超えない最大の負荷を有する資源を選択するものとする。また、負荷の合計が上記計算結果となる複数個の資源を求め、それらを切り替え対象としてもよい。
【０２４６】
ストレージ機能によって、資源の担当ＭＰＰＫ２１０が同一化されている場合、例えば、ローカルコピーのＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０が同一ＭＰＰＫ２１０である場合は、ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０を一括して切り替えるため、本実施例ではＰＶＯＬとＳＶＯＬの合計負荷を一つの切り替え単位として扱うものとする。本実施例では、切り替え単位毎の負荷は、後述する負荷計算プログラム２２２６が算出してリスト化するものとする。
【０２４７】
最後に、モニタプログラム２２２５は、Ｓ９０４で決定した資源の担当ＭＰＰＫ２１０の切り替えを開始する（Ｓ９０５）。Ｓ９０５で、モニタプログラム２２２５は、図２４に示した切り替え開始プログラム２２２１をコールする。
【０２４８】
次に、図２９〜図３２を参照して、モニタプログラム２２２５のＳ９０２、Ｓ９０３からコールされる負荷計算プログラム２２２６について説明する。
【０２４９】
図２９は、負荷計算プログラム２２２６の処理フローの一例を、図３０は拡張ボリューム負荷計算プログラム２２２７の処理フローの一例を、図３１はローカルコピー負荷計算プログラム２２２８の処理フローの一例を、図３２はリモートコピー負荷計算プログラム２２２９の処理フローの一例を示している。なお、これらのプログラムによる処理は、ストレージシステム２００のプロセッサ２１１が、メモリパッケージ２２０のプログラム部２２２に格納されている負荷計算プログラム２２２６、拡張ボリューム負荷計算プログラム２２２７、ローカルコピー負荷計算プログラム２２２８、及びリモートコピー負荷計算プログラム２２２９を実行することで実現される。
【０２５０】
最初に、負荷計算プログラム２２２６は、自ＭＰＰＫ２１０が担当する通常ボリューム２５０をリストアップする（Ｓ１０００）。この処理は、ボリュームテーブル２２１１から機能ビット２２１１２が「−」であるボリューム２５０を検索し、担当ＭＰＰＫテーブル２２１２を参照して当該ボリューム２５０の担当ＭＰＰＫ２１０が自ＭＰＰＫ２１０であるかを判定することで実現する。
【０２５１】
負荷計算プログラム２２２６は、リストアップした各通常ボリューム２５０に対して、Ｓ１００１からＳ１００４までの処理を実行し、合計負荷を計算する。負荷計算プログラム２２２６は、負荷計算の対象となるボリューム２５０を一つ決める（Ｓ１００１）。そして、当該ボリューム２５０の負荷を計算し、合計負荷に加算する（Ｓ１００２）。この負荷計算処理は、前記のように、ボリュームテーブル２２１１のライト数２２１１４、リード数２２１１５、処理コストテーブル２２１８の通常ボリュームリードの処理コスト、及び通常ボリュームライトの処理コストの値を用いて実行することができる。
【０２５２】
次に、負荷計算プログラム２２２６は、担当ＭＰＰＫ２１０の切り替え単位となるボリューム２５０毎の負荷をリストとして作成するため、Ｓ１００１で決定したボリューム２５０の負荷をリストに追加する（Ｓ１００３）。このリストは、モニタプログラム２２２５のＳ９０４が、どの資源の担当ＭＰＰＫ２１０を切り替えるかを決定するために利用される。
【０２５３】
次に、負荷計算プログラム２２２６は、Ｓ１０００で、リストアップした全通常ボリューム２５０の計算が完了したか否かを判定する（Ｓ１００４）。未だ全通常ボリューム２５０の計算が完了していない場合、負荷計算プログラム２２２６はＳ１００１へ戻ることで、負荷の計算を行っていない別のボリューム２５０の負荷を計算する。
【０２５４】
一方で、全ての通常ボリューム２５０の計算が完了している場合、負荷計算プログラム２２２６は、拡張ボリュームの負荷、ローカルコピーの負荷、リモートコピーの負荷を計算するためにＳ１００５からＳ１００７までの処理を実行した後、処理を終了する（Ｓ１００８）。
【０２５５】
次に、図３０を参照して、負荷計算プログラム２２２６からコールされる拡張ボリューム負荷計算プログラム２２２７について説明する。
【０２５６】
拡張ボリューム負荷計算プログラム２２２７は、少なくとも一つの構成ボリューム２５０を自ＭＰＰＫ２１０が担当している拡張ボリュームをリストアップする（Ｓ１１００）。この処理は、拡張ボリューム負荷計算プログラム２２２７が、拡張ボリュームテーブル２２１４及び担当ＭＰＰＫテーブル２２１２を参照することで実現する。
【０２５７】
拡張ボリューム負荷計算プログラム２２２７は、リストアップした拡張ボリュームに対して、Ｓ１１０１からＳ１１０５までの処理を実行し、合計負荷を計算する。拡張ボリューム負荷計算プログラム２２２７は、負荷計算の対象となる拡張ボリュームを一つ決める（Ｓ１１０１）。続けて、当該拡張ボリュームを構成する構成ボリューム２５０を一つ決める（Ｓ１１０２）。そして、当該ボリューム２５０の担当ＭＰＰＫ２１０が自ＭＰＰＫ２１０である場合に、当該ボリューム２５０の負荷を計算し、合計負荷に加算する（Ｓ１１０３、Ｓ１１０４）。この負荷計算処理は、ボリュームテーブル２２１１のライト数、リード数、処理コストテーブル２２１８の拡張ボリュームリードの処理コスト、拡張ボリュームライトの処理コストの値を用いて実行することができる。
【０２５８】
次に、拡張ボリューム負荷計算プログラム２２２７は、Ｓ１１０５で、Ｓ１１０１で決めた拡張ボリュームを構成する全構成ボリューム２５０についての計算が完了したか否かを判定する（Ｓ１１０５）。未だ全構成ボリュームについての計算が完了していないと判定した場合（Ｓ１１０５、Ｎｏ）、Ｓ１１０２へ戻ることで、負荷の計算を行っていない別の構成ボリューム２５０の負荷を計算する。この処理は、通常ボリュームについての計算同様に、ボリュームテーブル２２１１、処理コストテーブル２２１８を参照することによって実現する。
【０２５９】
一方で、全ての構成ボリューム２５０についての計算が完了していると判定した場合（Ｓ１１０５、Ｙｅｓ）、拡張ボリューム負荷計算プログラム２２２７は、通常ボリューム同様に、担当ＭＰＰＫ２１０をまとめて切り替える複数の構成ボリューム２５０（切り替え単位）の合計負荷をリストとして作成するため、Ｓ１１０４で計算した負荷の合計をリストに追加する（Ｓ１１０６）。拡張ボリュームの場合、全構成ボリューム２５０の担当ＭＰＰＫ２１０が同一であれば、全構成ボリューム２５０の合計負荷がリストに追加される。
【０２６０】
次に、拡張ボリューム負荷計算プログラム２２２７は、全拡張ボリュームの計算が完了したか否かを判定する（Ｓ１１０７）。全拡張ボリュームについての計算が完了していると判定した場合（Ｓ１１０７、Ｙｅｓ）、拡張ボリューム負荷計算プログラム２２２７は処理を終了する（Ｓ１１０８）。未だ全拡張ボリュームについての計算が完了していないと判定した場合（Ｓ１１０７、Ｎｏ）、拡張ボリューム負荷計算プログラム２２２７は、Ｓ１１０１へ戻ることで、負荷の計算を行っていない別の拡張ボリュームの負荷を計算する。
【０２６１】
次に、図３１を参照して、負荷計算プログラム２２２６からコールされるローカルコピー負荷計算プログラム２２２８について説明する。
【０２６２】
まず、ローカルコピー負荷計算プログラム２２２８は、ローカルコピー機能のＰＶＯＬ又はＳＶＯＬを自ＭＰＰＫ２１０が担当するローカルコピーペアをリストアップする（Ｓ１２００）。この処理は、ローカルコピー負荷計算プログラム２２２８がローカルコピーテーブル２２１３及び担当ＭＰＰＫテーブル２２１２を参照することにより実現する。
【０２６３】
次に、ローカルコピー負荷計算プログラム２２２８は、リストアップしたローカルコピーペアに対して、Ｓ１２０１からＳ１２０６までの処理を実行し、合計負荷を計算する。次いでローカルコピー負荷計算プログラム２２２８は、負荷計算対象となるローカルコピーペアを一つ決め（Ｓ１２０１）、当該ローカルコピーのＰＶＯＬ情報とＳＶＯＬ情報を取得する（Ｓ１２０２）。そして、ローカルコピー負荷計算プログラム２２２８は、Ｓ１２０２で得たＰＶＯＬの担当ＭＰＰＫ２１０が自ＭＰＰＫ２１０であるか判定する（Ｓ１２０３）。
【０２６４】
ＰＶＯＬの担当ＭＰＰＫ２１０が自ＭＰＰＫ２１０であると判定した場合（Ｓ１２０３、Ｙｅｓ）、当該ＰＶＯＬの負荷を計算し、合計負荷に加算する（Ｓ１２０４）。続けて、ローカルコピー負荷計算プログラム２２２８は、Ｓ１２０２で得たＳＶＯＬの担当ＭＰＰＫ２１０が自ＭＰＰＫ２１０であるか判定する（Ｓ１２０５）。ＳＶＯＬの担当ＭＰＰＫ２１０が自ＭＰＰＫ２１０であると判定した場合（Ｓ１２０５、Ｙｅｓ）、当該ＳＶＯＬの負荷を計算し、合計負荷に加算する（Ｓ１２０６）。ローカルコピー負荷計算プログラム２２２８は、Ｓ１２０３からＳ１２０６までの処理によって、Ｓ１２０２で決定したＰＶＯＬとＳＶＯＬのうち、自ＭＰＰＫ２１０が担当しているＰＶＯＬとＳＶＯＬの合計負荷を計算できる。
【０２６５】
ローカルコピーについての負荷計算では、通常ボリューム２５０、拡張ボリュームの場合と異なり、ＰＶＯＬからＳＶＯＬへのコピー負荷も考慮する必要がある。本実施例では、ローカルコピー負荷計算プログラム２２２８は、（ＰＶＯＬからＳＶＯＬへのコピー回数（（合計コピー量÷コピーサイズ）によって算出）×１回のコピー処理コスト）によって、ＰＶＯＬからＳＶＯＬへのコピー負荷を計算する。
【０２６６】
ＰＶＯＬの担当ＭＰＰＫ２１０とＳＶＯＬの担当ＭＰＰＫ２１０が異なる場合、ＰＶＯＬからＳＶＯＬへのコピー処理が二つのＭＰＰＫ２１０によって実現される。このため、上記計算結果は一つのＭＰＰＫ２１０の負荷を表していない。ＰＶＯＬの担当ＭＰＰＫ２１０の負荷、ＳＶＯＬの担当ＭＰＰＫ２１０の負荷をそれぞれ正しく計算するため、処理コストテーブル２２１８の処理コスト欄２２１８２には、処理種別欄２２１８１のＰＶＯＬ側コピー処理、ＳＶＯＬ側コピー処理にそれぞれ対応して、ＰＶＯＬの担当ＭＰＰＫ２１０のコピー処理コスト、ＳＶＯＬの担当ＭＰＰＫ２１０のコピー処理コストが格納される。そして、ＰＶＯＬの担当ＭＰＰＫ２１０の負荷計算では、（コピー回数×ＰＶＯＬ側のコピー処理コスト）によって負荷を計算し、ＳＶＯＬの担当ＭＰＰＫ２１０の負荷計算では、（コピー回数×ＳＶＯＬ側のコピー処理コスト）によって負荷を計算する。
【０２６７】
次に、ローカルコピー負荷計算プログラム２２２８は、通常ボリューム２５０と同様に、担当ＭＰＰＫ２１０を一括して切り替える必要があるボリューム２５０（切り替え単位）の合計負荷をリストとして作成するため、Ｓ１２０４及びＳ１２０６で計算した負荷の合計をリストに追加する（Ｓ１２０７）。ＰＶＯＬとＳＶＯＬの担当ＭＰＰＫ２１０が同一ＭＰＰＫ２１０であれば、ＰＶＯＬとＳＶＯＬの合計負荷（ペアの負荷）がリストに追加される。
【０２６８】
次に、ローカルコピー負荷計算プログラム２２２８は、リストアップした全ローカルコピーペアの計算が完了したか否かを判定する（Ｓ１２０８）。未だ全ローカルコピーペアの計算が完了していないと判定した場合（Ｓ１２０８、Ｎｏ）、ローカルコピー負荷計算プログラム２２２８はＳ１２０１へ戻ることで、負荷の計算を行っていない別のローカルコピーペアの負荷を計算する。
【０２６９】
一方で、全てのローカルコピーペアの計算が完了していると判定した場合（Ｓ１２０８、Ｙｅｓ）、ローカルコピー負荷計算プログラム２２２８は、処理を終了する（Ｓ１２０９）。
【０２７０】
次に、図３２を参照して、負荷計算プログラム２２２６からコールされるリモートコピー負荷計算プログラム２２２９について説明する。
【０２７１】
リモートコピー負荷計算プログラム２２２９は、Ｓ１３００からＳ１３０４までの処理によって、ＰＶＯＬのＩＯ処理の負荷を計算する。そして、Ｓ１３０５からＳ１３１３までの処理によって、リモートコピー処理の負荷、及びＳＶＯＬのＩＯ処理負荷を計算する。リモートコピー処理の負荷は、例えばジャーナルを作成し、ＪＶＯＬに格納する処理、ジャーナルを正ストレージシステム３００から副ストレージシステム４００へ転送する処理、転送済みのジャーナルを正ストレージシステム３００のＪＶＯＬから削除する処理を含む。
【０２７２】
まず、ＰＶＯＬのＩＯ処理の負荷の計算について説明する。リモートコピー負荷計算プログラム２２２９は、自ＭＰＰＫ２１０が担当しているＰＶＯＬをリストアップする（Ｓ１３００）。次に、リモートコピー負荷計算プログラム２２２９は、負荷計算対象となるＰＶＯＬを一つ決め（Ｓ１３０１）、当該ＰＶＯＬの負荷を計算し、合計負荷に加算する（Ｓ１３０２）。
【０２７３】
この負荷計算処理は、ボリュームテーブル２２１１のライト数、リード数、処理コストテーブル２２１８のリモートコピーのＰＶＯＬリードの処理コスト、リモートコピーのＰＶＯＬライトの処理コストの値を用いて実行することができる。
【０２７４】
リモートコピー負荷計算プログラム２２２９は、担当ＭＰＰＫ２１０の切り替え単位となるＰＶＯＬ毎の負荷をリストとして作成するため、Ｓ１３０１で決定したＰＶＯＬの負荷をリストに追加する（Ｓ１３０３）。このリストは、モニタプログラム２２２５のＳ９０４が、どの資源の担当ＭＰＰＫ２１０を切り替えるかを決定するために利用される。
【０２７５】
次に、リモートコピー負荷計算プログラム２２２９は、Ｓ１３００でリストアップした全ＰＶＯＬの計算が完了したか否かを判定する（Ｓ１３０４）。未だ全ＰＶＯＬの計算が完了していないと判定した場合（Ｓ１３０４、Ｎｏ）、リモートコピー負荷計算プログラム２２２９は、Ｓ１３０１へ戻ることで、負荷の計算を行っていない別のＰＶＯＬの負荷を計算する。
【０２７６】
一方で、全ＰＶＯＬの計算が完了していると判定した場合（Ｓ１３０４、Ｙｅｓ）、リモートコピー負荷計算プログラム２２２９は、Ｓ１３０５へ進み、リモートコピー処理の負荷、及びＳＶＯＬのＩＯ処理負荷を計算する。
【０２７７】
以下に、リモートコピー処理の負荷、及びＳＶＯＬのＩＯ処理負荷の計算について説明する。リモートコピー負荷計算プログラム２２２９は、リモートコピー用担当ＭＰＰＫテーブル２２１６を参照して、自ＭＰＰＫ２１０が担当しているリモートコピーグループをリストアップする（Ｓ１３０５）。次に、リモートコピー負荷計算プログラム２２２９は、負荷計算対象となるリモートコピーグループを一つ決め（Ｓ１３０６）、リモートコピーテーブル２２１５の属性欄２２１５２を参照して、当該リモートコピーグループがコピー元のリモートコピーグループであるかコピー先のリモートコピーグループであるかの判定を行う（Ｓ１３０７）。
【０２７８】
Ｓ１３０６で決めたリモートコピーグループがコピー元のリモートコピーグループであると判定した場合（Ｓ１３０７、Ｙｅｓ）、Ｓ１３０８で、コピー元で実行するリモートコピー処理の負荷を計算した後、Ｓ１３１１へ進む。一方、Ｓ１３０６で決めたリモートコピーグループがコピー先のリモートコピーグループでないと判定した場合（Ｓ１３０７、Ｎｏ）、Ｓ１３０６で決定したリモートコピーグループに属し、自ＭＰＰＫ２１０が担当するＳＶＯＬを特定した後（Ｓ１３０９）、コピー先で実行するリモートコピー処理の負荷、及びＳＶＯＬのＩＯ処理負荷を計算する（Ｓ１３１０）。その後、Ｓ１３１１へ進む。
【０２７９】
Ｓ１３０８で、リモートコピー負荷計算プログラム２２２９は、ボリュームテーブル２２１１を参照して、Ｓ１３０６で決定したリモートコピーグループに属する全ＰＶＯＬの合計ライト数を計算する。続けて、リモートコピー処理計算プログラム２２２９は、（計算したライト数×（ジャーナル作成処理コスト＋ジャーナル転送処理コスト＋ジャーナル削除処理コスト））を計算する。最後に、計算結果を合計負荷に加算する。
【０２８０】
また、Ｓ１３１０で、リモートコピー負荷計算プログラム２２２９は、ボリュームテーブル２２１１を参照して、（Ｓ１３０６で決定したリモートコピーグループがコピー元リモートコピーグループから受領した合計ジャーナル数×（ジャーナル転送処理コスト＋ジャーナル削除処理コスト＋書込みジャーナル決定処理コスト＋ジャーナル書込み処理コスト）＋ＳＶＯＬリード数×ＳＶＯＬリード処理コスト＋ＳＶＯＬライト数×ＳＶＯＬライト処理コスト）を計算する。そして、計算結果を合計負荷に加算する。
【０２８１】
次に、リモートコピー負荷計算プログラム２２２９は、通常ボリューム２５０の場合と同様に、担当ＭＰＰＫ２１０をまとめて切り替える必要がある資源（切り替え単位）の合計負荷をリストとして作成するため、Ｓ１３０８又は、Ｓ１３０９で計算した負荷をリストに追加する（Ｓ１３１１）。
【０２８２】
リモートコピーグループがコピー元の場合、Ｓ１３０８で計算したリモートコピー処理の負荷の合計をリストに追加する。また、リモートコピーグループがコピー先の場合、Ｓ１３１０で計算したリモートコピー処理の負荷、及び、ＳＶＯＬのＩＯ処理負荷の合計をリストに追加する。
【０２８３】
なお、前記のように、ＰＶＯＬの合計ライト数は、ボリュームテーブル２２１１を参照することで得ることができる。そして、各処理の処理コストは、処理コストテーブル２２１８を参照することで得ることができる。コピー先リモートコピーグループがコピー元リモートコピーグループから受領した合計ジャーナル数は、例えばリモートコピーグループ担当ＭＰＰＫ２１０が、リモートコピーテーブル２２１５に記録することにより取得することができる。
【０２８４】
最後に、リモートコピー負荷計算プログラム２２２９は、リストアップした全リモートコピーグループの計算が完了したか否かを判定する（Ｓ１３１２）。未だ全リモートコピーグループの計算が完了していないと判定した場合（Ｓ１３１２、Ｎｏ）、リモートコピー負荷計算プログラム２２２９はＳ１３０６へ戻ることで、負荷の計算を行っていない別のリモートコピーグループの負荷を計算する。
【０２８５】
一方で、全てのリモートコピーグループの計算が完了していると判定した場合（Ｓ１３１２、Ｙｅｓ）、リモートコピー負荷計算プログラム２２２９は、処理を終了する（Ｓ１３１３）。
【０２８６】
以上要するに、本発明の実施形態によれば、ボリュームの担当ＭＰＰＫの切り替えを、当該ボリュームについてのストレージ機能の設定状況を考慮して行う。また、ストレージ機能の処理負荷を考慮して担当ＭＰＰＫを切り替える資源と、切り替え先ＭＰＰＫを決定する。このため、ストレージ機能が適用されているボリュームの担当ＭＰＰＫ切り替えによる性能低下を回避することができる。また、ストレージ機能を考慮しない場合に比べ、ＭＰＰＫ間での負荷分散をより均等にすることができる。これにより、ＭＰＰＫの利用率を向上させることができる。
【０２８７】
以上、本願発明を、その実施例に即して添付図面を参照しながら説明したが、本願発明は、これらの実施例に限定されるものではない。また、本願発明の趣旨を逸脱しないいかなる変形例、均等物も本願発明の範囲内のものである。
【図１】
0005391277.tif 000002
【図２】
0005391277.tif 000003
【図３】
0005391277.tif 000004
【図４】
0005391277.tif 000005
【図５】
0005391277.tif 000006
【図６】
0005391277.tif 000007
【図７】
0005391277.tif 000008
【図８】
0005391277.tif 000009
【図９】
0005391277.tif 000010
【図１０】
0005391277.tif 000011
【図１１】
0005391277.tif 000012
【図１２】
0005391277.tif 000013
【図１３】
0005391277.tif 000014
【図１４】
0005391277.tif 000015
【図１５】
0005391277.tif 000016
【図１６】
0005391277.tif 000017
【図１７】
0005391277.tif 000018
【図１８】
0005391277.tif 000019
【図１９】
0005391277.tif 000020
【図２０】
0005391277.tif 000021
【図２１】
0005391277.tif 000022
【図２２】
0005391277.tif 000023
【図２３】
0005391277.tif 000024
【図２４】
0005391277.tif 000025
【図２５】
0005391277.tif 000026
【図２６】
0005391277.tif 000027
【図２７】
0005391277.tif 000028
【図２８】
0005391277.tif 000029
【図２９】
0005391277.tif 000030
【図３０】
0005391277.tif 000031
【図３１】
0005391277.tif 000032
【図３２】
0005391277.tif 000033