(57)【特許請求の範囲】
【請求項１】
ストレージ装置であって、
第１のプロセッサと、前記第１のプロセッサに接続され、前記第１のプロセッサのみがアクセス可能な情報を格納するローカル領域と第１および第２の領域を有する共有メモリ領域とを有する第１のメモリとを有する第１のコントローラと、
第２のプロセッサと、前記第２のプロセッサに接続され、前記第２のプロセッサのみがアクセス可能な情報を格納するローカル領域と第１および第２の領域を有する共有メモリ領域とを有する第２のメモリとを有する第２のコントローラとを有し、
前記第１または前記第２のプロセッサは、第１の制御情報を前記第１及び前記第２のメモリの前記第１の領域に二重書きし、前記第１のメモリの前記第１の制御情報は、前記第１のプロセッサからリードされ、前記第２のメモリの前記第１の制御情報は、前記第２のプロセッサからリードされ、
前記第１または前記第２のプロセッサは、第２の制御情報を前記第１及び前記第２のメモリの前記第２の領域に二重書きし、その二重書きされた第２の制御情報のうち一方のみが前記第１及び前記第２のプロセッサからリードされることが許容されるストレージ装置。
【請求項２】
請求項１に記載のストレージ装置であって、
前記第１のプロセッサが前記第１及び前記第２のメモリに二重書きされた前記第１の制御情報を更新する場合、その更新が完了するまで、前記第２のプロセッサが前記第１及び前記第２のメモリの共有領域に対してライトすることを許容しないストレージ装置。
【請求項３】
請求項２に記載のストレージ装置であって、
複数のディスクドライブと、前記複数のディスクドライブにより提供される複数の論理ユニットとを更に有し、
前記複数の論理ユニットの各々には、その論理ユニットに対するＩ／Ｏを制御するコントローラとして前記第１または前記第２のコントローラの一方が割り当てられており、
前記第２の制御情報が前記複数の論理ユニットのいずれかに固有の制御情報は、その論理ユニットに割り当てられたコントローラの前記第１または前記第２のメモリに書かれたもののみが、前記第１及び前記第２のプロセッサからリードされることが許容されるストレージ装置。
【請求項４】
請求項３に記載のストレージ装置であって、
前記第１の制御情報の更新頻度は前記第２の制御情報の更新頻度より小さいストレージ装置。
【請求項５】
請求項３に記載のストレージ装置であって、
前記第２の制御情報の更新回数は所定の閾値より大きいストレージ装置。
【請求項６】
請求項３に記載のストレージ装置であって、
前記第１の制御情報は、論理ユニットのコピーペア情報または装置構成情報のいずれかを含むストレージ装置。
【請求項７】
請求項３に記載のストレージ装置であって、
前記第２の制御情報は、論理ユニットのコピーペアの差分情報または統計情報のいずれかを含むストレージ装置。
【請求項８】
ストレージ装置の制御方法であって、
前記ストレージ装置は、
第１のプロセッサと、前記第１のプロセッサのみがアクセス可能な情報を格納するローカル領域と第１および第２の領域を有する共有メモリ領域とを有する第１のメモリとを有する第１のコントローラと、
第２のプロセッサと、前記第２のプロセッサのみがアクセス可能な情報を格納するローカル領域と第１および第２の領域を有する共有メモリ領域とを有する第２のメモリとを有する第２のコントローラとを有し、
前記第１または前記第２のプロセッサは、第１の制御情報を前記第１及び前記第２のメモリの前記第１の領域に二重書きし、
前記第１のプロセッサは、前記第１のメモリの前記第１の制御情報をリードし、
前記第２のプロセッサは、前記第２のメモリの前記第１の制御情報をリードし、
前記第１または前記第２のプロセッサは、第２の制御情報を前記第１及び前記第２のメモリの前記第２の領域に二重書きし、
前記第１または前記第２のプロセッサは、二重書きされた前記第２の制御情報のうち予め定められた一方のみをリードする制御方法。
【請求項９】
請求項８に記載の制御方法であって、
前記第１のプロセッサが前記第１及び前記第２のメモリに二重書きされた前記第１の制御情報を更新する場合、その更新が完了するまで、前記第２のプロセッサが前記第１及び前記第２のメモリの共有領域に対してライトすることを許容しない制御方法。
【請求項１０】
請求項９に記載の制御方法であって、
前記ストレージ装置の有する複数のディスクドライブにより提供される論理ユニットに対するＩ／Ｏを制御するコントローラとして前記第１のコントローラを割り当て、
前記第１または前記第２のプロセッサは、前記第２の制御情報が前記複数の論理ユニットのいずれかに固有の制御情報の場合、前記第１のコントローラの有する前記第１のメモリに書かれた前記第２の制御情報のみをリードする制御方法。
【請求項１１】
請求項１０に記載の制御方法であって、
前記論理ユニットに割り当てるコントローラを前記第１のコントローラから前記第２のコントローラに変更し、
コントローラが変更された前記論理ユニットに属する前記第２の制御情報の内容を、前記第１及び前記第２のメモリの間で一致させた後に、前記第１または前記第２のプロセッサは、前記第２のコントローラの有する前記第２のメモリに書かれた前記第２の制御情報のみをリードする制御方法。
【請求項１２】
請求項１１に記載の制御方法であって、
前記第１の制御情報の更新頻度は前記第２の制御情報の更新頻度より小さい制御方法。
【請求項１３】
請求項１１に記載の制御方法であって、
前記第２の制御情報の更新回数は所定の閾値より大きい制御方法。
【請求項１４】
請求項１１に記載の制御方法であって、
前記第１の制御情報は、論理ユニットのコピーペア情報または装置構成情報のいずれかを含む制御方法。
【請求項１５】
請求項１１に記載の制御方法であって、
前記第２の制御情報は、論理ユニットのコピーペアの差分情報または統計情報のいずれかを含む制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置及びそのメモリ制御方法に関し、コントローラのクラスタ制御技術に適用して好適なるものである。
【背景技術】
【０００２】
クラスタ構成のコントローラ部（以下、ＣＴＬ）を持つストレージ装置においては、データキャッシュやディスクプールなどを各ＣＴＬで共有して使い、それらを管理するために共有メモリ（Shared  Memory、以下、ＳＭ）が用いられる。ストレージ装置では、ＳＭ上の消失が起きてはいけない制御情報（以下、二重化情報）などを、二重化領域と称する領域を用意し、各ＣＴＬのうちの二つのＣＴＬに配置されたＳＭ間の値が一致するように二重化して格納する。それ以外の制御情報（以下、非二重化情報）などは、非二重化領域と称する領域に格納する。
【０００３】
特許文献１には、このＳＭへのすべてのマイクロプロセッサ（Micro-processor、以下、ＭＰＵ）から同じアクセスコスト（アクセス時間などのアクセス性能）でアクセスすることが出来る技術が開示されている。さらに、特許文献１では、ＳＭキャッシュに関する技術も開示されている。ＳＭキャッシュ技術は、ＳＭアクセスを高性能化するために、ＭＰＵがＳＭより高速にアクセスできるＭＰＵに直結したローカルメモリ（以下、ＬＭ）に、ＳＭの内容の一部をキャッシングしておくものである。この技術によりＭＰＵのＳＭに対するアクセス性能を向上させることができる。また、特許文献１では、前記ＳＭ、ＬＭとは異なり、ホスト計算機からのデータやドライブ部からのデータを一時的に格納するキャッシュメモリ（以下、ＣＭ）の制御についても開示している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】日本特許公開２０１０−０８６２１１号公報                  （米国特許公開２０１０／００８３１２０号公報）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
近年、システム全体のコスト低減のために廉価な汎用ハードウェア部品を使って、デュアルＣＴＬのストレージ装置を構成することが求められている。そのハードウェア構成例として、二つのＣＴＬが、それぞれ、ＭＰＵ、ＬＭ、ＣＴＬ間接続用のデバイスを備え、両ＣＴＬの前記デバイス間は、例えば、５Ｇｂｐｓ以上の転送速度が望める高速なバスなどで接続し、ＭＰＵに直結しているＬＭを共有メモリとして使う方法が考えられる。
【０００６】
更に、２つのＣＴＬの内、一方を「自系」ＣＴＬ、他方を「他系」ＣＴＬという呼び、それぞれＣＴＬａ、ＣＴＬｂとして区別する。その場合、ＣＴＬａから見てＣＴＬａ及びＣＴＬａの各構成要素を「自系」、ＣＴＬｂ及びＣＴＬｂの各構成要素を「他系」と呼ぶ。また、ＣＴＬｂから見ると、ＣＴＬｂが自系、ＣＴＬａが他系である。前記ストレージ装置において、ＭＰＵは、前記ＣＴＬ間接続用のデバイスを介して他系メモリにアクセスすることが可能である。しかしながら、前記アクセスは、ＣＴＬ間接続用のデバイスを介すため、自系メモリへ直接アクセスする場合に比べ、アクセス性能が劣る。すなわち、自系のアクセスコスト（アクセス時間）と他系へのアクセスコストには差がある。
【０００７】
更に、非二重化情報は、いずれかのＳＭのみに配置される制御情報である。アクセス性能の低下を防止するには、他系アクセス頻度を低減させる配置方式が必要である。また、二重化情報については、自他系が異なる値を参照するような一貫性の欠如が起こるのを防ぎつつ、高速にアクセス可能な参照・更新方式が必要である。
【０００８】
しかしながら、特許文献１で開示されているＳＭ制御方式では、大容量の異なる種類のメモリが必要で、メモリコストも増加する。更に、異なる種類のメモリを制御するハードウェアも複雑で独自開発の専用部品を用いなければならない。そのため、従来技術では、コスト低減とアクセス性能向上の両立が難しかった。そこで、本発明では、従来以上のアクセス性能でコスト低減を達成するメモリ制御方法とそのシステムを提供することにある。
【課題を解決するための手段】
【０００９】
上記課題解決のために、本発明のストレージ装置では、第１のプロセッサと、前記第１のプロセッサに接続され、前記第１のプロセッサのみがアクセス可能な情報を格納するローカル領域と第１および第２の領域を有する共有メモリ領域とを有する第１のメモリとを有する第１のコントローラと、第２のプロセッサと、前記第２のプロセッサに接続され、前記第２のプロセッサのみがアクセス可能な情報を格納するローカル領域と第１および第２の領域を有する共有メモリ領域とを有する第２のメモリとを有する第２のコントローラとを有し、前記第１または前記第２のプロセッサは、第１の制御情報を前記第１及び前記第２のメモリの前記第１の領域に二重書きし、前記第１のメモリの前記第１の制御情報は、前記第１のプロセッサからリードされ、前記第２のメモリの前記第１の制御情報は、前記第２のプロセッサからリードされ、前記第１または前記第２のプロセッサは、第２の制御情報を前記第１及び前記第２のメモリの前記第２の領域に二重書きし、その二重書きされた第２の制御情報のうち一方のみが前記第１及び前記第２のプロセッサからリードされることを許容する。
【００１０】
また、本発明のストレージ装置は、前記第１のプロセッサが前記第１及び前記第２のメモリに二重書きされた前記第１の制御情報を更新する場合、その更新が完了するまで、前記第２のプロセッサが前記第１及び前記第２のメモリの共有領域に対してライトすることを許容しない。
【００１１】
更に、本発明のストレージ装置は、前記複数の論理ユニットの各々には、その論理ユニットに対するI/Oを制御するコントローラとして前記第１または前記第２のコントローラの一方が割り当てられており、前記第２の制御情報が前記複数の論理ユニットのいずれかに固有の制御情報は、その論理ユニットに割り当てられたコントローラの前記第１または前記第２のメモリに書かれたもののみが、前記第１及び前記第２のプロセッサからリードされることを許容する。
【００１２】
加えて、本発明のストレージ装置では、第１の制御情報の更新頻度は第２の制御情報の更新頻度より小さいこと、ないし、第２の制御情報の更新回数は所定の閾値より大きい。また、本発明のストレージ装置では、第１の制御情報は論理ユニットのコピーペア情報または装置構成情報のいずれかを含み、前記第２の制御情報は、論理ユニットのコピーペアの差分情報または統計情報のいずれかを含む。
【発明の効果】
【００１３】
本発明により、廉価な汎用部品でストレージ装置を構築でき、開発・製造コストを削減できる。更に、他系ＭＰＵによる自系ＳＭへのアクセスの頻度を減らすことによりＳＭアクセスの性能を向上できる。加えて、ＳＭキャッシュの対象を他系ＳＭのみに限定することにより、ＳＭ間で余分なデータコピーの発生を抑止でき、ＳＭキャッシュメモリ容量の削減によるシステムのコスト低減とＩ／Ｏ性能向上を達成できる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態における計算機システムの全体構成を示すブロック図である。
【図２】本発明の実施形態におけるＭＰＵメモリ構成図である。
【図３】本発明の実施形態におけるソフトウェア構成図である。
【図４】ローカルコピーでのペア情報管理テーブルの一例を示す図である。
【図５】ローカルコピーでの差分ビットテーブルの一例を示す図である。
【図６】ローカルコピーの概念図である。
【図７】ＳＭのマッピングを概念的に表したデータ構成図である。
【図８】制御情報特性テーブルの一例を示す図である。
【図９】制御情報アドレステーブルの一例を示す図である。
【図１０】ＬＵ（Logical  Unit）オーナ権テーブルの一例を示す図である。
【図１１】マスタ面情報テーブルの一例を示す図である。
【図１２】マスタ面設定処理を示すフローチャートである。
【図１３】ＳＭリード処理を示すフローチャートである。
【図１４】排他付きライト処理を示すフローチャートである。
【図１５】ＳＭライト処理を示すフローチャートである。
【図１６】ライト確定処理を示すフローチャートである。
【図１７】ＳＭライトの連続発生時の処理を示すフローチャートである。
【図１８】ＳＭアトミック処理を示すフローチャートである。
【図１９】ＬＵオーナ権切り替え時のマスタ面切り替え処理を示すフローチャートである。
【図２０】本発明の第２の実施形態におけるＳＭキャッシュメモリのデータ構成図である。
【図２１】ＳＭキャッシュを使用してのリードアクセス処理を示すフローチャートである。
【図２２】本発明の第３の実施形態におけるデータキャッシュ管理情報のＬＵオーナ権による配置を概念的に説明する図である。
【図２３】データキャッシュ管理情報をＬＵオーナ権に応じて配置する処理を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら本発明の実施の形態を説明する。ただし、本実施形態は、本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。また、各図において共通の構成については、同一の参照番号が付されている場合がある。まず、第１の実施例として、アクセス特性またはＬＵオーナ権に基づいて二重化情報のマスタ面を決定する方式について説明する。次に、第２の実施例として、他系の制御情報のみをＳＭキャッシュにキャッシングする方式について説明する。最後に、第３の実施例として、データキャッシュ管理情報をそのオーナ権を持つＣＴＬのＳＭ上に配置する方式について説明する。
【実施例１】
【００１６】
まず、本発明の第１の実施例であるアクセス特性またはＬＵオーナ権に基づいて二重化情報のマスタ面を決定する方式を図１から図１９で説明する。まず、図１は、本実施例における計算機システムの全体構成を示すブロック図である。図１での計算機システム１は、ホスト計算機２、管理端末３、ストレージ装置４、ネットワーク、例えば、ＳＡＮ（Storage  Area  Network）５及びＬＡＮ（Local  Area  Network）６を備えて構成される。ホスト計算機２は、ＳＡＮ５を介して各ストレージ装置４と接続され、管理端末３は、ＬＡＮ６を介してストレージ装置４と接続される。なお、ホスト計算機２は、例えば、大型汎用コンピュータ、サーバ、クライアント端末などである。また、管理端末３は、ＬＡＮ６を介さず直接ストレージ装置４と直接接続してもよい。
【００１７】
図１でのストレージ装置４は、二つのコントローラＣＴＬ１００ａ、１００ｂと、コントローラＣＴＬ１００ａ、ＣＴＬ１００ｂで制御されるドライブ部１０９を備える。以下、ＣＴＬ１００ａを「ＣＴＬａ」とし、ＣＴＬ１００ｂを「ＣＴＬｂ」とする。また、あるＣＴＬ内の構成要素を表現する際に、そのＣＴＬの呼び名の一部を用いる。例えば、ＣＴＬａの一構成要素としてのＳＭを「ＳＭａ」と末尾に”ａ”を付加して呼び、ＣＴＬｂの一要素としてのＳＭを「ＳＭｂ」と末尾に”ｂ”を付加して呼ぶことがある。これにより、同種の要素を区別する際、どちらのＣＴＬにある要素を表しているかがすぐに分かる。
【００１８】
また、ＣＴＬａ及びＣＴＬｂのどちらの構成要素かを区別しないで呼ぶ場合は、末尾の”ａ”、”ｂ”を付けないで呼ぶ。例えば、ＭＰＵ１０１ａ、１０１ｂを区別しない場合は、「ＭＰＵ１０１」と呼び、ＭＰＵａ、ＭＰＵｂを区別しない場合は、ＭＰＵと呼ぶ。
【００１９】
ＣＴＬａ、ＣＴＬｂは、それぞれ、ＭＰＵ１０１ａ、１０１ｂ、ＭＰＵメモリ１０２ａ、１０２ｂ、ＤＭＡ（Direct  Memory  Access）回路１０３ａ、１０３ｂ、ＨＯＳＴ＿Ｉ／Ｆ１０４ａ、１０４ｂ、ＤＲＩＶＥ＿Ｉ／Ｆ１０５ａ、１０５ｂ、管理Ｉ／Ｆ＿０６ａ、１０６ｂ、ＣＴＬ間を接続するためのデバイスであるＮＴＢ（Non  Transparent  Bridge）１０７ａ、１０７ｂを備えている。
【００２０】
ＣＴＬａとＣＴＬｂは、ＮＴＢ１０７ａ、１０７ｂを介して、例えば、転送速度５Ｇｂｐｓ以上の全二重方式の高速なバス１０８で接続されており、ユーザデータや制御情報を交換することが出来る。さらにＣＴＬａ、ＣＴＬｂは、ＨＯＳＴ＿Ｉ／Ｆ１０４ａ、１０４ｂを介してホスト計算機２と通信し、ＤＲＩＶＥ＿Ｉ／Ｆ１０５ａ、１０５ｂを介してドライブ部１０９と通信し、管理Ｉ／Ｆ＿１０６ａ、１０６ｂを介して管理端末２と通信する。なお、図示していないが、ドライブ部１０９には複数のＬＵ（Logical  Unit）が構成されている。
【００２１】
図２は、本発明の実施形態におけるＭＰＵメモリ構成図である。ＭＰＵメモリに格納するプログラム、制御情報、データの構成について、図２と図３で説明する。ＭＰＵメモリ１０２は、テキスト領域１０、ローカルメモリ１１、共有メモリ（以下、ＳＭ）１２、キャッシュメモリ１３と呼ばれる領域（アドレス範囲）を有し、それぞれの領域にプログラム、制御情報ないし各種データを格納する。なお、ＣＴＬａにはＭＰＵメモリ１０２ａを、ＣＴＬｂにはＭＰＵメモリ１０２ｂをそれぞれ設ける。ちなみに、従来技術では、共有メモリとローカルメモリ、キャシュメモリがそれぞれ独立に存在していたが、本発明ではＭＰＵメモリとして1つのメモリに統合している。
【００２２】
図３は、本発明の実施形態におけるソフトウェア構成図である。テキスト領域１０には、図３に示すストレージ装置としての処理や機能を実行する各種プログラムを格納する。ローカルメモリ１１には、それぞれのＣＴＬ上で動く前記プログラムが参照するが、他系のプログラムからは参照されないテーブル等を格納する。ローカルメモリ１１には、例えば、マスタ面情報テーブル１１０などを格納する。ＳＭ１２には、両ＣＴＬ間で共有する制御情報を格納する。前記制御情報の中には二重化すべき制御情報、つまり、いずれかのＣＴＬが故障した場合でも、消失することがないように、両ＣＴＬのＳＭに二重に配置する必要がある制御情報と、二重化しない非二重化情報がある。
【００２３】
また、前記制御情報はいずれのＭＰＵから参照しても一貫して同じ値を参照出来る必要がある。ＳＭ１２に配置する制御情報は、例えば、ペア情報管理テーブル１２０、差分ビットテーブル１２１、制御情報特性テーブル１２２、制御情報アドレステーブル１２３、ＬＵオーナ権テーブル１２４などがある。なお、それぞれのＬＵへのＩ／Ｏ（Input/Output）処理を担当するＣＴＬをオーナＣＴＬと呼び、そのＣＴＬはＬＵオーナ権を持つと表現する。
【００２４】
キャッシュメモリ１３は、ホスト計算機２からのユーザデータないしディスクに格納したユーザデータを一時的に保持する領域である。つまり、アクセスに時間がかかるディスクに毎回アクセスすることを防ぐために、ディスクのユーザデータの一部をディスクよりも短時間にアクセス出来るキャッシュメモリに置いておく。更に、キャッシュメモリは、ホスト計算機２からストレージ装置４へのアクセスの高速化の役割もある。
【００２５】
図３に示すＭＰＵメモリ１０２のテキスト領域１０には、ストレージ装置における各処理を実行するためのソフトウェアであるプログラムを格納する。具体的には、構成管理部２１、基本Ｉ／Ｏ制御部２２、ＳＭアクセス制御部２３、複数の拡張機能制御部２４という各種プログラムをテキスト領域に格納し、ＭＰＵが適宜アクセスして実行する。
【００２６】
構成管理部２１は、管理端末３からのコマンドや他のプログラムモジュールからの指示などによって、構成管理情報を参照・更新するためのプログラムである。基本Ｉ／Ｏ制御部２２は、ホスト計算機２からの指示を受け、データを参照・更新する処理を実行するためのプログラムである。基本Ｉ／Ｏ制御部２２が実行される際、必要に応じて、プログラムＳＭアクセス制御部２３などを呼び出し、一部の処理を実行させる。ＳＭアクセス制御部２３は、構成管理部２１や基本Ｉ／Ｏ制御部２２が、ＳＭにアクセスするときに呼び出され、ＳＭの制御情報を参照・更新する処理を実行するためのプログラムである。
【００２７】
拡張機能制御部２４は、例えば、後述するローカルコピー、仮想ボリューム機能、スナップショット機能などの拡張機能を実行するプログラムで、機能ごとに独立したプログラムモジュールを構成している。ローカルコピーとは、二つのＬＵにおいて、一方のＬＵの内容を他方のＬＵにコピーする機能であり、ローカルコピー機能では、ペア情報管理テーブルと差分ビットテーブルという制御情報を用いる。
【００２８】
図４は、ローカルコピーでのペア情報管理テーブルの一例を示す図である。図４のペア情報管理テーブル１２０は、Ｐ−ＶＯＬ（Primary  Volume）とＳ−ＶＯＬ（Secondary  Volumeとのペア状態を管理するテーブルで、ローカルコピーの拡張機能制御部２４が参照し、ペア番号１２００に対応するＰ−ＶＯＬ番号１２０１、Ｓ−ＶＯＬ番号１２０２、ペア状態１２０３で構成する。なお、ペア情報管理テーブルは、コピーペア情報とも呼ばれる。ペア番号は、Ｐ−ＶＯＬとＳ−ＶＯＬのペアに対するユニークな番号である。
【００２９】
ペア状態には、”同期”と”非同期”という状態があり、”同期”状態では、Ｐ−ＶＯＬとペアを構成するＳ−ＶＯＬの内容は一致するように制御されている。つまり、Ｐ−ＶＯＬが更新されると、続いてＳ−ＶＯＬも更新される。”非同期”状態では、Ｐ−ＶＯＬが更新されてもすぐにはＳ−ＶＯＬの内容は更新されず、ペアに対して、再同期という操作がなされたときに、Ｓ−ＶＯＬの内容は、Ｐ−ＶＯＬと一致するように更新される。例えば、ペア番号１２００が”０”であるＰ−ＶＯＬ１２０１は”３００”であり、ペアを構成するＶ−ＶＯＬ１２０２は”４００”となり、現在のペア状態１２０３は”同期”状態である。
【００３０】
図５は、ローカルコピーでの差分ビットテーブルの一例を示す図である。図５の差分ビットテーブル１２１は、ローカルコピー機能を制御する拡張機能制御部２４が参照し、各ペアのブロック番号に対応する差分ビットを管理するテーブルである。差分ビットによって、ブロック単位での更新を管理しておくことが出来る。差分ビットは、各ペアがブロック毎に持ち、ペア状態が非同期の時に、Ｐ−ＶＯＬの特定のブロックが更新されると、そのブロックに対応する差分ビットが”０”から”１”へ更新される。例えば、ブロック番号１２１０が“１００００”であるブロックでは、ペア０番１２１１とペア２番１２１３は“０”であるので差分は発生していないが、ペア１番１２１２は“１”であるのでＰ−ＶＯＬとＳ−ＶＯＬとの間には差分が発生している。このように、差分ビットを使って更新情報を管理することで、前記再同期処理が指示された際に、差分ビットが”１”であるブロックのみをコピーすれば良く、全ブロックをコピーする必要がない。なお、差分ビットテーブルは、コピーペア差分情報とも呼ばれる。
【００３１】
図６は、ローカルコピーの動作を示す概念図である。そのローカルコピーの動作を説明する。
（ｃ１）最初に、ホスト計算機２からのアクセスにより、Ｐ−ＶＯＬのブロック１００００−Ｐとブロック１０００３−Ｐとが更新される。
（ｃ２）この時、拡張機能制御部２４は、ペア情報管理テーブル１２０を参照し、ペア１のペア状態が非同期であると分かるため、当該ブロックに対応する差分ビットを更新する。但し、この時、Ｐ−ＶＯＬの更新データはＳ−ＶＯＬには反映されない。
（ｃ３）ホスト計算機２からストレージ装置４に対し、ペア１における再同期の指示が発行される。
（ｃ４）発行された再同期の指示をストレージ装置４が受信すると、拡張機能制御部２４は、差分ビットテーブル１２１を参照し、差分ビットが”１”であるブロック、つまり、ブロック１００００−Ｐの内容をブロック１００００−Ｓに、ブロック１０００３−Ｐの内容を１０００３−Ｓにコピーする。
【００３２】
制御情報には、前記ペア情報管理テーブル１２０や前記差分ビットテーブル１２１などがあると説明した。ペア情報管理テーブル１２０は、Ｉ／Ｏ処理の中で参照されることはあっても更新されることはなく、ユーザからの指示によってのみ更新される。一方、差分ビットテーブル１２１はＩ／Ｏ処理の度に更新され、更にホスト計算機からの再同期要求で参照・更新される。このように、ストレージ装置４で使用する制御情報には、それぞれライト処理の割合が多い、または、リード処理の割合が多いという特性がある。
【００３３】
次に、ローカルコピー以外の機能についても以下で説明する。まず、仮想ボリューム機能を説明する。仮想ボリューム機能とは、ホストに仮想的なボリュームを見せ、ディスクプールの容量を超えた容量の仮想ボリュームを定義することを可能にする機能である。本機能では、「論理アドレス−物理アドレス変換テーブル」と呼ぶ制御情報を使う。仮想ボリュームのある論理アドレスに対してアクセスが発行された場合に、物理アドレスを当該論理アドレスに割り当て、ホストには物理アドレスに対するアクセスを論理アドレスに対するアクセスのように見せる。この論理アドレスと物理アドレスの対応関係を管理しているのが、論理アドレス−物理アドレス変換テーブルである。
【００３４】
次に、スナップショット機能を説明する。スナップショット機能では、一つのＬＵをＲ−ＶＯＬ（Real  Volume）と定義し、それに対応するＶ−ＶＯＬ（Virtual  Volume）を定義し、これらをスナップショットペアであると定義する。ペアを定義する時、Ｖ−ＶＯＬはディスクの物理的な領域を持たず、Ｒ−ＶＯＬの各アドレスに対するリンク制御情報のみを持たせる。そのため、高速にアクセスを実行することが出来て、ディスク容量の消費量も低減できる。
【００３５】
Ｒ−ＶＯＬが更新されると、Ｄａｔａ  Ｐｏｏｌと定義された別のディスクの領域に、Ｒ−ＶＯＬの更新されたブロックをコピーし、Ｖ−ＶＯＬ側で対応するブロックはＤａｔａ  Ｐｏｏｌ上の当該ブロックに対するリンクを持つように変更される。スナップショット機能において使用されるＲ−ＶＯＬを指しているリンクの更新が発生すると、リンク制御情報も更新される。また、このリンク制御情報はＬＵに属するという特性を持っている。つまり、このリンク制御情報を、ＬＵオーナ権を持つＣＴＬ上に格納すれば更新と参照を高速に行えるので、ストレージ装置４全体のライト性能とリード性能を向上することが可能である。
【００３６】
図７は、ＳＭのマッピングを概念的に表したデータ構成図である。制御情報Ａ、制御情報Ｂ、制御情報Ｃ、制御情報Ｄは二重化情報であるので、二重化領域に格納する。つまり、制御情報Ａで説明すると、ＳＭ１２ａの０ｘ１０００を開始アドレスとする領域と、ＳＭ１２ｂの０ｘ１０００を開始アドレスとする領域には、同じ値を格納する。制御情報Ｍと制御情報Ｎは非二重化情報であるので、非二重化領域に格納する。非二重化領域では、ＳＭ１２ａの０ｘＦ０００を開始アドレスとする領域の値と、ＳＭ１２ｂの０ｘＦ０００を開始アドレスとする領域の値を一致させる必要はない。ちなみに、非二重化情報としては後述するデータキャッシュ管理情報などである。
【００３７】
斜線部は、マスタ面を表している。マスタ面とは、ＭＰＵａ、ＭＰＵｂの両方が参照（リード）の対象とするＳＭの領域である。二重化情報は、ＳＭａとＳＭｂで二重化されており、制御情報の内容の一貫性を保証するためには、各ＭＰＵが参照する内容を両ＳＭで一致させる必要がある。これは、ＭＰＵが参照するマスタ面を決めておくことで、参照する制御情報の内容の一貫性を保証することができる。
【００３８】
このように、ライト比率が高い（更新頻度が大きい）制御情報である制御情報Ｂと制御情報Ｃは、図７のように、いずれかのＳＭをマスタ面に設定し、そのマスタ面の内容をまず更新し参照することを可能とする。これにより、ＳＭの内容を一致させる処理が完了する前に他のＭＰＵがリードできるので、アクセス性能を向上出来る。なお、ライト比率とは、（ライト回数）／（ライト回数＋リード回数）で計算される値である。一方、リード比率は、（リード回数）／（ライト回数＋リード回数）で計算され、１からライト比率を引くことでも求められる。
【００３９】
また、内容を一致させる処理とは、例えば、排他処理の実行し、他のＭＰＵからの更新を禁止する処理である。また、制御情報がＬＵに属する制御情報である場合は、ＬＵオーナ権を有するオーナＣＴＬのみが更新できる。そのような制御情報は、オーナＣＴＬ上のＳＭにマスタ面を設定することで、オーナＣＴＬ上のＭＰＵは参照時に高速な自系ＳＭを参照出来て、リード性能を向上出来る。
【００４０】
一方、ライト比率が低い（更新頻度が小さい）制御情報の場合は、更新時に、例えば、前記排他処理を実行し、内容の一貫性を保証しつつ更新を完了させて、制御情報Ａのように、いずれのＳＭも参照することを可能にする。このように設定することで、いずれのＭＰＵも自系ＳＭから必要な制御情報を高速に参照できるので、リード性能を向上させることが出来る。以下の説明では、制御情報Ａと制御情報Ｄのような制御情報を「両マスタ情報」と呼び、制御情報Ｂと制御情報Ｃのような制御情報を「片マスタ情報」と呼ぶ。
【００４１】
ライト比率が低い制御情報は、両マスタ情報に設定することで参照時の性能向上を期待できる。そのため、例えば、ライト比率が低い制御情報である装置構成情報や前記ペア情報管理テーブル１２０などの制御情報は、両マスタ情報に設定することが望ましい。この装置構成情報とは、ＭＰＵメモリの容量、どのディスクを使ってＲＡＩＤグループを構成しているか、各ＬＵのサイズなどの制御情報である。そのため、これら制御情報は、装置構成を変更する時にのみ更新されるので、ライト比率は極めて低くゼロに近い。
【００４２】
ライト比率が高くてＬＵに属する制御情報は、片マスタ情報とし、かつマスタ面をオーナＣＴＬ上のＳＭに設定する。これにより、制御情報の更新時に排他制御などの処理をせずに制御情報を更新でき、更に、参照時は高速な自系ＳＭを参照出来るようになるため、アクセス性能を向上出来る。この制御情報としては、前記仮想ボリューム機能における論理アドレス−物理アドレス変換テーブルや前記差分ビットテーブル１２１などが該当する。前記テーブルは、Ｉ／Ｏ処理中に頻繁に更新されるライト比率が高い制御情報であるため、片マスタ情報に設定することが望ましい。
【００４３】
また、ライト比率は高いがＬＵに属さない片マスタ情報も、更新時に排他制御などの処理をせずに更新することで、ライト性能を向上できる。例えば、Ｉ／Ｏの頻度などに関する統計情報は、ライト比率は高いがＬＵに属さない片マスタ情報に該当し、Ｉ／Ｏ処理の度に更新される。そこで、これらの制御情報は片マスタ情報として設定し、マスタ面は、例えば、ラウンドロビンなどの方式を使って、いずれかのＳＭにのみマスタ面が偏ってしまわないように設定する。
【００４４】
図８は、制御情報特性テーブルの一例を示す図である。制御情報特性テーブル１２２は各制御情報の種類別に特性を管理するテーブルで、制御情報名フィールド１２２０に対応するライト比率フィールド１２２１、ＬＵに属する制御情報フィールド１２２２、属するＬＵ番号フィールド１２２３で構成する。なお、ライト比率フィールド１２２１には制御情報の更新頻度であるライト比率を、ＬＵに属する制御情報フィールド１２２２にはＬＵに属するか否かの情報を、属するＬＵ番号フィールド１２２３には、ＬＵに属する場合の属するＬＵ番号を格納する。この制御情報特性テーブル１２２をＭＰＵが参照することで、各制御情報の特性を判定することが出来る。
【００４５】
以上説明したように、各制御情報のライト比率（加えて、ライト比率から必然的に算出されるリード比率（リード比率＝１−ライト比率））に基づいて、制御情報を両マスタ情報として設定するか片マスタ情報として設定するかを決定できる。また、ライト比率は、ストレージ装置４のシステム構成時に予め登録しておくことも可能であるし、ユーザによって登録することも可能である。さらに、ライト比率は、ストレージ装置４がモニタリングした情報に基づいて、動的に更新することも可能である。
【００４６】
次に、本発明での両マスタ情報／片マスタ情報の決定方法の一例として、ライト比率とリード比率というアクセス特性を用いた方法を説明する。その決定方法は、各制御情報へのアクセス全体のオーバヘッドを最小とするように、両マスタ情報または片マスタ情報を選択する。
【００４７】
まず、リード比率をＣｒ、ライト比率をＣｗとする。このリード比率Ｃｒ及びライト比率Ｃｗは、ストレージ装置４の構成時に決めることも出来るし、モニタリングによって動的に決めることも出来る。
【００４８】
次に、両マスタ情報設定の時のリードのオーバヘッドをＲ＿ｄｏｕｂｌｅ、ライトのオーバヘッドをＷ＿ｄｏｕｂｌｅと表す。また、片マスタ情報設定の時のリードのオーバヘッドをＲ＿ｓｉｎｇｌｅ、ライトのオーバヘッドをＷ＿ｓｉｎｇｌｅと表す。
【００４９】
Ｗ＿ｄｏｕｂｌｅは、Ｗ＿ｓｉｎｇｌｅに排他制御分（排他付ライト処理分）のオーバヘッドを加算した値である。Ｒ＿ｄｏｕｂｌｅは自系ＳＭリードのオーバヘッドを表し、Ｒ＿ｓｉｎｇｌｅもＬＵオーナ権に基づく制御情報の場合は、自系ＳＭリードのオーバヘッドを表す。ＬＵオーナ権に基づかない制御情報の場合は、自系ＳＭリードと他系ＳＭリードがそれぞれ５割の確率で発生すると仮定して、Ｒ＿ｓｉｎｇｌｅは自系ＳＭリードと他系ＳＭリードの平均値をとる。
【００５０】
ＣＴＬは、これらの数値を元に、各制御情報における両マスタ情報設定時の全体オーバヘッドＯＨ＿ｄｏｕｂｌｅと、片マスタ情報設定時の全体オーバヘッドＯＨ＿ｓｉｎｇｌｅを、以下の式１及び式２でそれぞれ求める。求めた２つの値の内、ＣＴＬは、小さい方に該当する両マスタ情報または片マスタ情報を選択する。ＣＴＬは、選択した結果を、マスタ面情報テーブル１１０で各制御情報が格納されるアドレスフィールド１１００に対応するマスタ種別フィールド１１０１に格納する。
ＯＨ＿ｄｏｕｂｌｅ＝Ｒ＿ｄｏｕｂｌｅ＊Ｃｒ＋Ｗ＿ｄｏｕｂｌｅ＊Ｃｗ...式１
ＯＨ＿ｓｉｎｇｌｅ＝Ｒ＿ｓｉｎｇｌｅ＊Ｃｒ＋Ｗ＿ｓｉｎｇｌｅ＊Ｃｗ...式２
すなわち、ＣＴＬは、ＯＨ＿ｄｏｕｂｌｅよりＯＨ＿ｓｉｎｇｌｅが小さければマスタ種別フィールド１１０１に片マスタ情報と、逆に、ＯＨ＿ｄｏｕｂｌｅよりＯＨ＿ｓｉｎｇｌｅが大きければマスタ種別フィールド１１０１に両マスタ情報と設定する。
【００５１】
なお、本実施例では、ライト比率を両マスタ情報／片マスタ情報の決定の判断基準として用いるが、これ以外にも、例えば、システム内の制御情報アクセス比率、絶対値などを用いても構わない。このシステム内の制御情報アクセス比率での判断方法とは、システム内の全制御情報への更新に対して、当該制御情報への更新の比率に基づいて判断する方法である。この判断方法は、同時に使用可能な資源数や更新回数に制限があり、制御情報を排他付きで更新する時などに有効な方法である。
【００５２】
絶対値を使用する判断方法では、更新回数が閾値よりも大きいか小さいかで、両マスタ情報または片マスタ情報を選択する。この判断方法は、判断するプログラムを単純に構成でき、ライト回数のみを取得すれば良いため、ライト回数が動的に変化する場合でもモニタリングのオーバヘッドが少なくて済むというメリットがある。また、前記以外の方法や、前記の判断方法を複数組み合わせても良い。
【００５３】
なお、図８の制御情報特性テーブル１２２のＬＵに属する制御情報フィールド１２２２は、各制御情報がＬＵに属する制御情報であるかどうかを表す。制御情報フィールド１２２２が”ＹＥＳ”である場合には、その制御情報の処理を担当するオーナＣＴＬが定められており、属するＬＵ情報が属するＬＵ番号フィールド１２２３に格納される。例えば、差分ビットテーブル１２１の属するＬＵ番号は、”２０２”である。一方、制御情報フィールド１２２２が”ＮＯ”である場合には、属するＬＵ番号は存在（属するＬＵ番号フィールド１２２３が”ＮＵＬＬ”）せず、オーナＣＴＬも定められていない。
【００５４】
図９は、制御情報アドレステーブルの一例を示す図である。制御情報アドレステーブル１２３は、図７に示す各制御情報を格納するＭＰＵメモリ１０２でのアドレス領域を管理するテーブルで、アドレスフィールド１２３０と制御情報名フィールド１２３１で構成する。なお、ＭＰＵは、制御情報アドレステーブル１２３を参照することで、ＳＭの各アドレスにどのような種類の制御情報が格納されているか、判定することが出来る。例えば、アドレスフィールド１２３０のアドレス範囲が”０ｘ１０００−０ｘ１０ＦＦ（１６進数表記）”には制御情報名１２３１が”ペア情報管理テーブル”である制御情報が格納されている。また、同じく、”０ｘ１１００−０ｘ１１ＦＦ（１６進数表記）”には、制御情報名１２３１が”差分ビットテーブル”である制御情報が格納されている。ちなみに、図９の”ペア情報管理テーブル”や”差分ビットテーブル”が、図８の制御情報名１２２０に格納される制御情報名と同一であることは言うまでもない。
【００５５】
なお、アドレスと制御情報名はｎ対１の関係にあり、ある種類の制御情報が複数のアドレス領域に格納されている場合もある。例えば、ペア情報管理テーブルがそれに該当し、アドレス範囲”０ｘ１４００−０ｘ１４ＦＦ”にも格納されている。また、図７での制御情報Ａ、制御情報Ｂ、制御情報Ｃ、制御情報Ｄは、それぞれ、図９のペア情報管理テーブル、差分ビットテーブル、統計情報、装置構成情報に相当する。
【００５６】
図１０は、ＬＵ（Logical  Unit）オーナ権テーブルの一例を示す図である。ＬＵオーナ権テーブル１２４は、ＬＵを制御できるオーナＣＴＬを管理するもので、ＬＵ番号フィールド１２４０とＬＵオーナ権フィールド１２４１で構成する。ＭＰＵは、ＬＵオーナ権テーブル１２４を参照することで、各ＬＵのオーナＣＴＬを判定することが出来る。なお、ＬＵ番号とは、それぞれのＬＵを識別するために割り振られるユニークな番号のことである。ＬＵオーナ権フィールド１２４１には、”ＣＴＬａ”か”ＣＴＬｂ”のいずれかを格納する。例えば、ＬＵ番号フィールド１２４０が“２０１”であるＬＵのオーナＣＴＬは、ＬＵオーナ権フィールド１２４１から“ＣＴＬａ”である。ちなみに、ＬＵ番号が“２０１”の制御情報は、制御情報特性テーブル１２２から“ペア情報管理テーブル”であると判断できる。
【００５７】
図１１は、マスタ面情報テーブルの一例を示す図である。マスタ面情報テーブル１１０は、図７での各制御情報を格納するＭＰＵメモリ１０２上のアドレスとマスタ種別とマスタ面との対応関係を管理するテーブルである。マスタ面情報テーブル１１０は、アドレスフィールド１１００とアドレスフィールド１１００に対応するマスタ種別フィールド１１０１とマスタ面フィールド１１０２とで構成する。マスタ面情報テーブル１１０は、ＭＰＵがＳＭをアクセスする時に参照し、その参照結果で、ＭＰＵが各アドレスに格納される制御情報に対して、どのようにアクセスすべきかを判定する。
【００５８】
マスタ種別フィールド１１０１には、”片マスタ情報”か、”両マスタ情報”のいずれかを格納する。マスタ面フィールド１１０２には、片マスタ情報のマスタ面が、”ＳＭａ”か、”ＳＭｂ”のいずれかを格納する。ただし、両マスタ情報のマスタ面の場合、マスタ面フィールド１１０２は”ＮＵＬＬ”とする。ちなみに、マスタ面フィールド１１０２は、装置起動時は初期値として、全ての制御情報を“両マスタ情報”と設定している。これは、起動時の初期化処理の過程で、ＭＰＵがマスタ面情報テーブル１１０を参照するためである。
【００５９】
図１２は、マスタ面設定の処理Ｓ１０００を示すフローチャートである。ＭＰＵからＳＭへのアクセス性能及びストレージ装置全体のアクセス性能を向上させるためのマスタ面の設定方法を、図１２を用いて説明する。マスタ面設定の処理Ｓ１０００はストレージ装置の起動の初期設定処理であり、ＭＰＵがプログラムである構成管理部２１を実行して、それぞれの制御情報のマスタ面設定を行う。すなわち、制御情報アドレステーブル１２３のアドレスフィールド１２３０毎に、ＭＰＵがマスタ面設定の処理Ｓ１０００を実行し、その処理の結果を図１１のマスタ面情報テーブル１１０に格納する。マスタ面設定の処理Ｓ１０００の中で、ＭＰＵは、制御情報特性テーブル１２２、制御情報アドレステーブル１２３、ＬＵオーナ権テーブル１２４を参照する。なお、図及び以下の処理の説明では明記しないが、これらのテーブルはＳＭ上にある制御情報である。すなわち、ＭＰＵがプログラムであるＳＭアクセス制御部２３を実行し、これらテーブルへデータの設定とデータの参照を行う。
【００６０】
ＭＰＵがマスタ面設定の処理Ｓ１０００を実行する時には、ＳＭのアドレス、つまり、図９に示す制御情報アドレステーブル１２３のアドレスフィールド１２３０の各行の値（アドレス範囲）を取得する。処理を開始すると、ＭＰＵは、最初、図８の制御情報特性テーブル１２２のライト比率フィールド１２２１を参照し、前述の式１と式２の両マスタ情報設定時の全体オーバヘッドＯＨ＿ｄｏｕｂｌｅと、片マスタ情報設定時の全体オーバヘッドＯＨ＿ｓｉｎｇｌｅを計算する（ステップＳ１００１）。次に、ＭＰＵは、算出した両マスタ情報設定時の全体オーバヘッドＯＨ＿ｄｏｕｂｌｅと、片マスタ情報設定時の全体オーバヘッドＯＨ＿ｓｉｎｇｌｅを比較し、片マスタ情報設定時の全体オーバヘッドＯＨ＿ｓｉｎｇｌｅの方が小さいか否かを判定する（ステップＳ１００２）。
【００６１】
判定の結果、片マスタ情報設定時の全体オーバヘッドＯＨ＿ｓｉｎｇｌｅが大きい場合（ライト性能よりリード性能を優先）（ステップＳ１００２：Ｎｏ）は、当該制御情報を両マスタ情報とするため、ＭＰＵが、制御情報のアドレスに対応するマスタ種別フィールド１１０１に“両マスタ情報”と設定するとともに、マスタ面フィールド１１０２は”ＮＵＬＬ”のままとし、処理を終了する（ステップＳ１００４）。
【００６２】
前記”両マスタ情報”と設定する制御情報として、例えば、図８の制御情報特性テーブル１２２の制御情報名１２２０が”ペア情報管理テーブル”（図２で共有メモリ１２の領域に格納されるペア情報管理テーブル１２０）や”装置構成情報”などが該当する。そこで、ＭＰＵは、ペア情報管理テーブル１２０ないし装置構成情報が格納されるアドレスフィールド１１００の”０ｘ１０００−０ｘ１０ＦＦ”ないし”０ｘ１３００−０ｘ１３ＦＦ”に対応するマスタ種別フィールド１１０１を”両マスタ情報”と、マスタ面フィールド１１０１を”ＮＵＬＬ”とする。
【００６３】
なお、両マスタ情報は、更新時に、二つのＳＭの一貫性を保つ排他制御を行う必要があり、その処理のオーバヘッドが大きい。しかしながら、ＳＭａとＳＭｂのどちらからも同一の内容が格納され、ＭＰＵそれぞれが、それぞれの自系のＳＭを参照することが出来るため、高速なリードアクセスが可能で、ストレージ装置４全体のアクセス性能を向上できる。
【００６４】
一方、片マスタ情報設定時の全体オーバヘッドＯＨ＿ｓｉｎｇｌｅが小さい場合（ステップＳ１００２：Ｙｅｓ）は、ＭＰＵが、制御情報のアドレスに対応するマスタ種別１１０１に”片マスタ情報”と設定する（ステップＳ１００３）。前記”片マスタ情報”と設定する制御情報として、例えば、図８の制御情報特性テーブル１２２の制御情報名１２２０が”差分ビットテーブル”（図２で共有メモリ１２に格納される差分ビットテーブル１２１）や”統計情報”などが該当する。
【００６５】
すなわち、ＭＰＵは、差分ビットテーブルないし統計情報が格納されるアドレスフィールド１１００の”０ｘ１１００−０ｘ１１ＦＦ”ないし”０ｘ１２００−０ｘ１２ＦＦ”に対応するマスタ種別フィールド１１０１を”片マスタ情報”とする。片マスタ情報は、いずれかのＳＭをマスタ面とするもので、参照時には、他系のＳＭを読む可能性もあるため、リード性能が両マスタ情報よりも低下する場合がある。しかし、更新時に、二つのＳＭでの一貫性を保たなくても良い（後述する排他付ライトが不必要）ため、ライト性能は両マスタ情報よりも高い。
【００６６】
次に、ＭＰＵが制御情報特性テーブル１２２のＬＵに属する制御情報フィールド１２２２を参照し（ステップＳ１００５）、ＬＵに属する制御情報かどうかを判定する（ステップＳ１００６）。判定の結果、ＬＵに属する制御情報でない（制御情報フィールド１２２２に”ＮＯ”が格納）場合（Ｓ１００６：Ｎｏ）は、その制御情報を処理するＣＴＬは限定されないため、いずれのＣＴＬないしＭＰＵからでもアクセス可能である。この場合は、マスタ面の数に偏りが生じるのを防ぐために、例えば、ＭＰＵは、ラウンドロビンなどのアルゴリズムを用いて、ＳＭａかＳＭｂのいずれかをマスタ面に選び、選んだマスタ面をマスタ面フィールド１１０２に設定し（ステップＳ１００８）、処理を終了する。
【００６７】
この処理対象の制御情報は、制御情報アドレステーブル１２３のアドレスフィールド１２３０が”０ｘ１２００−０ｘ１２ＦＦ”である領域に格納されている統計情報である。そこで、マスタ面情報テーブル１１０のアドレスフィールド１１００が同じ”０ｘ１２００−０ｘ１２ＦＦ”であるマスタ種別１１０１に”片マスタ情報”と設定し、マスタ面フィールド１１０２に”ＳＭｂ”と設定する。
【００６８】
制御情報特性テーブル１２２のＬＵに属する制御情報フィールド１２２２に格納された制御情報が、ＬＵに属する制御情報である場合（Ｓ１００６：Ｙｅｓ）は、当該制御情報を処理するＣＴＬ、つまり、オーナ権を持つＣＴＬは、ＣＴＬａないしＣＴＬｂのいずれかである。そこで、ＬＵオーナ権があるＣＴＬを判定するために、制御情報特性テーブル１２２の属するＬＵ番号フィールド１２２３を参照する（ステップＳ１００７）。ステップＳ１００７で参照した値（ＬＵ番号）を用いて、ＬＵオーナ権テーブル１２４のＬＵオーナ権フィールド１２４１を参照し（ステップＳ１００９）、どちらのＣＴＬにＬＵオーナ権があるかを判定する（ステップＳ１０１０）。
【００６９】
例えば、差分ビットテーブルという制御情報名は、制御情報アドレステーブル１２３のアドレスフィールド１２３０の値より”０ｘ１１００−０ｘ１１ＦＦ”に配置されている。また、属するＬＵ番号は制御情報特性テーブル１２２の属するＬＵ番号フィールド１２２３から”２０２”となる。そこで、ＭＰＵは、そのＬＵ番号フィールド１２２３の値”２０２”に該当するＬＵオーナ権テーブル１２４のＬＵ番号フィールドの値を検索し、ＬＵオーナ権を有するＣＴＬが”ＣＴＬｂ”であると判断する。
【００７０】
次に、ステップＳ１０１０での判定結果により、ＭＰＵは、ＣＴＬａがオーナ権を持つ場合（ステップＳ１０１０：ＣＴＬａ）はＳＭａをマスタ面とする。更に、ＭＰＵは、マスタ面情報テーブル１１０のマスタ面フィールド１１０２に”ＳＭａ”と設定して（ステップＳ１０１１）、処理を終了する。この場合、当該制御情報に対してのオーナ権を持つＣＴＬａからのＳＭリードは、他系のＣＴＬｂからのＳＭリードと比べて、高速なアクセスが可能である。
【００７１】
一方、ステップＳ１０１０での判定結果で、ＣＴＬｂがオーナ権を持つ場合（ステップＳ１０１０：ＣＴＬｂ）、ＳＭｂをマスタ面とし、ＭＰＵはマスタ面情報テーブル１１０のマスタ面フィールド１１０２に”ＳＭｂ”と設定して（ステップＳ１０１１）、処理を終了する。この場合は、ＣＴＬａがオーナ権を持つ場合と逆に、当該制御情報に対してのＳＭリードは、オーナ権を持つＣＴＬｂの方が高速に行うことができる。ちなみに、前述の差分ビットテーブルに対するオーナ権ＣＴＬは”ＣＴＬｂ”なので、ＭＰＵはマスタ面情報テーブル１１０のマスタ面フィールド１１０２に”ＳＭｂ”と設定する。
【００７２】
ＭＰＵは、Ｓ１００２の判定によって決めたマスタ種別(両マスタ情報  ｏｒ  片マスタ情報)をマスタ種別フィールド１１０１に格納し、片マスタ情報に対してＳ１００８もしくは、Ｓ１０１０の判定の結果によって決めたマスタ面（ＳＭａ  ｏｒ  ＳＭｂ）をマスタ面フィールド１１０２に格納する。これにより、制御情報毎にマスタ種別とマスタ面の情報を細かく設定でき、更に必要に応じて情報を更新できるので、ＭＰＵによるＳＭ１００へのアクセス及びホスト計算機２からのストレージ装置全体４へのアクセス性能の向上ができる。
【００７３】
図１３は、ＳＭリード処理Ｓ１１００を示すフローチャートである。ＳＭへのリードアクセスを図１３で説明する。ＳＭリード処理Ｓ１１００は、ＭＰＵがプログラムであるＳＭアクセス制御部２３を実行する際に、実行される処理ルーチンであり、リードする制御情報を識別するため、ＳＭのアドレスが引数として与えられる。最初に、ＭＰＵは、引数として渡されたＳＭのアドレスを用い、マスタ面情報テーブル１１０のマスタ種別フィールド１１０１を参照する（ステップＳ１１０１）。
【００７４】
次に、参照したマスタ種別フィールド１１０１の内容が、両マスタ情報か片マスタ情報かを判定する（ステップＳ１１０２）。判定の結果、両マスタ情報の場合（ステップＳ１１０２：両マスタ）は、いずれのＳＭ（ＳＭａ、ＳＭｂどちらでもよい）も参照することが可能であるため、高速にアクセスできる自系のＳＭをリードして（ステップＳ１１０４）、リード処理を終了する。
【００７５】
判定結果が片マスタ情報の場合（ステップＳ１１０２：片マスタ）は、マスタ面情報テーブル１１０のマスタ面フィールド１１０２を参照し（ステップＳ１１０３）、どちらのＳＭがマスタ面かを判定する（ステップＳ１１０５）。片マスタ情報は、アクセスするマスタ面（本処理ではリードするマスタ面）を予め決めておくことで、全ＭＰＵの間で同じ値を参照でき、内容の一貫性も保証出来る。ＳＭａがマスタ面である場合（ステップＳ１１０５：ＳＭａ）は、ＭＰＵはＳＭａをリードして（ステップＳ１１０６）、リード処理を終了する。ＳＭｂがマスタ面である場合（ステップＳ１１０５：ＳＭｂ）は、ＭＰＵはＳＭｂをリードして（ステップＳ１１０７）、リード処理を終了する。
【００７６】
例えば、ＭＰＵａによる差分ビットテーブル１２１へのリードアクセスの場合、引数として渡されるＳＭのアドレスの範囲は”０ｘ１１００−０ｘ１１ＦＦ”である。そのため、そのアドレスに対応するマスタ種別フィールド１１０１の値である”片マスタ情報”とマスタ面フィールド１１０２の値である”ＳＭａ”の情報により、ＭＰＵａは自系のＳＭａを高速にリードできる。また、ＭＰＵａによるペア情報管理テーブル１２０へのリードアクセスでも、自系のＳＭａをリードできるのでシステムとして高速なアクセスが可能となる。
【００７７】
図１４は、ＳＭライト処理Ｓ１２００を示すフローチャートである。ＳＭへのライトアクセスを図１４で説明する。ＳＭライト処理Ｓ１２００は、ＭＰＵがプログラムであるＳＭアクセス制御部２３を実行する過程で、実行される処理ルーチンであり、ライトする制御情報を識別するため、ＳＭのアドレスが引数として与えられる。最初に、ＭＰＵは、引数として渡されたＳＭのアドレスを用い、マスタ面情報テーブル１１０のマスタ種別フィールド１１０１を参照する（ステップＳ１２０１）。
【００７８】
ＭＰＵは、参照した内容が両マスタ情報か片マスタ情報かを判定する（ステップＳ１２０２）。判定結果が両マスタ情報の場合（ステップＳ１２０２：両マスタ）は、ＭＰＵは、図１５の排他付きライト処理Ｓ１３００を実行する。この排他付きライト処理とは、ＳＭａ及びＳＭｂの値の一貫性を保つ処理である排他制御をしながら両ＳＭを更新する処理である。
【００７９】
判定結果が片マスタ情報の場合（ステップＳ１２０２：片マスタ）は、ＭＰＵは、マスタ面情報テーブル１１０のマスタ面フィールド１１０２を参照して（ステップＳ１２０３）、どちらのＳＭがマスタ面であるかを判定する（ステップＳ１２０４）。
【００８０】
判定の結果、マスタ面がＳＭａの場合（ステップＳ１２０４：ＳＭａ）は、マスタ面のＳＭａを優先して更新するために、まず、ＳＭａにライトする。続いて、ＳＭｂにライトし（ステップＳ１２０５）、ライト処理を終了する。判定の結果、マスタ面がＳＭｂの場合（ステップＳ１２０４：ＳＭｂ）も、同様の理由で、マスタ面のＳＭｂを優先して更新するために、まず、ＳＭｂにライトする。続いて、ＳＭａにライトし（ステップＳ１２０６）、ライト処理を終了する。
【００８１】
図１５は、排他付きライト処理Ｓ１３００を示すフローチャートである。前述の排他付きライト処理（図１４のステップＳ１３００）を図１５で説明する。排他付きライト処理Ｓ１３００は、ＳＭライト処理Ｓ１２００や後で説明する連続ＳＭライト処理Ｓ１４００の処理の過程で実行され、処理開始時に、ライトするＳＭのアドレスが引数として与えられる。排他付きライト処理は、前記ＳＭライト処理で説明したように、ＳＭａとＳＭｂの内容の一貫性を保つために行う処理である。
【００８２】
まず、本処理の必要性について説明する。例えば、ＣＴＬａ上のＭＰＵａとＣＴＬｂ上のＭＰＵｂが、ほぼ同時に、ＳＭａとＳＭｂの同じアドレスに対して異なったデータでライトを発行すると、書き込みアドレスに対するＳＭａの内容とＳＭｂの内容が異なり不一致が発生する。つまり、ＭＰＵａからのライトは、最初に自系であるＳＭａの更新を完了した後、ＳＭｂを更新する。反対に、ＭＰＵｂからのライトは、最初に自系であるＳＭｂの更新を完了した後、ＳＭａを更新する。そのため、ＳＭａはＭＰＵｂの書き込み内容とＳＭｂはＭＰＵａの書込み内容となり、ＳＭａとＳＭｂが異なる内容に更新されてしまう。そこで、本排他付きライト処理により、ＳＭ間でのデータ不整合を防止し一貫性（整合性）を維持する。
【００８３】
次に、処理動作を図１５で説明する。まず、排他付きライト処理Ｓ１３００を開始すると、最初に、ロックを取得する処理を行う（ステップＳ１３０１）。このロックを取得する処理は、１つのＭＰＵのみがＳＭに対してデータの更新を実行するための処理であり、ロック取得中は特定のＭＰＵ以外はＳＭに対して更新はできないよう制御される。なお、このロック取得は、例えば、セマフォレジスタなどの排他機能をももつ機構を使って行う。このセマフォレジスタに、例えば、コンペア・アンド・スワップなどのアトミック命令を発行し、セマフォレジスタの値が”０”であった場合は、それを”１”に書き換えてロック成功とし、セマフォレジスタの値が”１”であった場合は、別のＭＰＵが既にロックを取得していると判断して、ロック失敗とするような方式である。このように、あるＭＰＵがロックを取得している間は、別のＭＰＵがＳＭに対する更新を出来ないように制御することが出来る。まず、処理Ｓ１３００では、ロックの取得が成功したか判定し（ステップＳ１３０２）、失敗した場合（ステップＳ１３０１：Ｎｏ）は、ステップＳ１３０１に戻り、ロック取得処理を再び行う。
【００８４】
次に、ロックの取得に成功した場合（ステップＳ１３０２：Ｙｅｓ）は、ＭＰＵは、ＳＭａ及びＳＭｂに対して同一データをライトする（ステップＳ１３０３の“二重書き”）。最後に、ロックを解放し（ステップＳ１３０４）、排他付きライト処理を終了する。なお、ロック解放処理は、例えば、ロック取得中は”１”であるセマフォレジスタの値を、”０”に書き換えるという処理である。
【００８５】
図１６は、連続して２つのＳＭライトが発行されたときの処理Ｓ１４００のフローチャートである。ＳＭへ連続したライトアクセスが発生した場合の処理方法について、図１６を用いて説明する。複数のライトが連続する場合は、データの整合性を維持するためライトの順序を保証する必要がある。そのためには、先のライト処理が完了したことを確認してから、次のライトを開始する必要がある。そこで、ＳＭアクセス制御部２３は、Ｓ１４００の処理を実行しライトする順番を保証しデータの整合性を保つ。ただし、この処理は、連続してＳＭライトを行う場合に、アプリケーション側で、処理Ｓ１４００のような手順で複数のＳＭライトを実施させることも可能で、必ずしもＳＭアクセス制御部２３が処理Ｓ１４００を実行しなくとも良い。また、図１６では、例として連続して２つのＳＭライトを行う時の処理を示すが、３つ以上連続したライトでも構わない。
【００８６】
まず、処理Ｓ１４００が開始されると、まず、ＳＭアクセス制御部２３は、１番目のＳＭライト要求を受領する（ステップＳ１４０１）。１番目のＳＭライト要求受領後に、ＳＭアクセス制御部２３はＳＭライト処理Ｓ１２００を呼び出す。続いて、ライト確定処理Ｓ１５００を呼び出す。
【００８７】
ライト確定処理とは、前のライトが正常に終了したことを確認する処理のことであり、ライト確定処理の完了は、前のライト処理の完了を意味する。つまり、ライト確定処理Ｓ１５００から完了応答が返って来たときに、１番目のライト処理が完了する。続いて、ＳＭアクセス制御部２３は、２番目のＳＭライト要求を受領する（ステップＳ１４０２）。
【００８８】
２番目のＳＭライト要求受領後に、ＳＭアクセス制御部２３は、再び、ＳＭライト処理Ｓ１２００を呼び出す。その後にＳＭライトが無い場合は、ライト確定をする必要はないので、そのまま、ＳＭへの連続ライト処理を終了する。続けて、３番目以降のＳＭライト要求があった場合は、２番目のＳＭライトと同様、ライト確定処理１５００／ライト要求受領／ＳＭライト処理１２００を順次実行する。
【００８９】
図１７は、図１６でのライト確定処理Ｓ１５００を示すフローチャートである。ライト確定処理を図１７で説明する。ライト確定処理は、ＳＭアクセス制御部２３に呼び出される処理ルーチンであり、処理の開始時にライトするＳＭのアドレスと、コマンド処理を担当するＣＴＬ番号（ＣＴＬａ  or  ＣＴＬｂ）及びライトするデータ内容が引数として与えられる。ライト確定処理とは、前記複数ライト処理Ｓ１４００などの処理で使用され、ライトが正常に完了したかどうかを確認する処理である。
【００９０】
最初に、確定すべきライトが、自系ＳＭへのライトか、他系ＳＭへのライトかを判定する（ステップ１５０１）。判定の結果、自系ＳＭへのライトである場合（ステップＳ１５０１：自系）は、ノンポステッドライトであるため、そのまま、ライト確定処理を終了する。ノンポステッドライトとは、ライトが完了した時に、完了応答が返ってくるライトのことである。例えば、ストア命令などを使って自系ＳＭにライトをすると、ストア命令はライトが完了するまでは、完了応答を返さない。そのため、ストア命令を実行し完了応答があれば、ライトが正常に終了したことが保証される。
【００９１】
反対に、判定の結果、他系ＳＭへのライトである場合（ステップＳ１５０２：他系）は、ポステッドライトである。そこで、ライトしたアドレスに対してリードを行い、ライトした値とリードした値を比較し一致しているかを確認して、正常にライトが完了してことを確認（ステップ１５０２）し、ライト確定処理を終了する。ちなみに、ポステッドライトとは、ライトが完全に完了しない内に、完了応答を返すライト処理のことである。そのため、例えば、ライトアドレスへのリードとデータ比較によって正しく値が更新されているかを判断し、ライトの完了を確認する必要がある。もし、ステップＳ１５０２の確認の結果、正常にライトが完了していない場合は、”ＮＵＬＬ”などを戻り値として返し、呼び出し元に再度ＳＭライトを実行させる。
【００９２】
図１８は、ＳＭへのアトミックアクセスの例として、アトミック加算を示すフローチャートである。前述（図１５）のアトミックアクセス処理を図１８で詳細に説明する。アトミック加算の目的は、複数のＭＰＵによる加算のすれ違いを防止することにある。例えば、”１”という値を持つレジスタなどに”１”を加算したい場合、ＭＰＵは、”１”という値をリードし、その値に”１”を加算した値である”２”をレジスタにライトする。しかし、これを複数のＭＰＵが同時に行う場合は、例えば、ＭＰＵａが“１”をリードしたと同時に、ＭＰＵｂも”１”をリードする。そして、それぞれのＭＰＵが”１”を加算して、お互いに”２”を書いた場合、最終的にレジスタには”２“という値に更新されていて、ある事象（加算処理）が２回起きたか、１回起きたかを判別出来ない。
【００９３】
このようなＭＰＵ同士のすれ違いを防止するための処理の総称がアトミックアクセスである。アトミックアクセスでは、いずれかのＭＰＵが、アトミックアクセスを実行している間は、他のＭＰＵは、アトミックアクセスを行えないように制御しながら行う。アトミックアクセスには、アトミック加算以外にも、アトミック比較などが存在する。アトミック比較は、複数のＭＰＵの間で、ある処理を実行するための権利を取得する時に行われる。これら処理の実現方法は、例えば、セマフォレジスタのようなレジスタを使う。具体的には、ＭＰＵがセマフォレジスタの値をリードし、その時の値が”０”である場合は、ＭＰＵがセマフォレジスタの値を”１”に書き換える。逆に、セマフォレジスタの値が”１”である場合は、ＭＰＵは、何もしないというような特徴を持つレジスタである。
【００９４】
ＳＭへのアトミック処理Ｓ１６００は、ＳＭアクセス制御部２３によって呼び出され処理が開始する。ＳＭへのアトミック処理の開始時に、アドレスが引数として与えられる。最初に、ＭＰＵが、ロックを取得する処理を行い（ステップＳ１６０１）、そのロック取得が成功したか否かを判定する（ステップＳ１６０２）。ロックの取得に失敗した場合（ステップＳ１６０２：Ｎｏ）は、ロック取得処理を再実行するため、ステップＳ１６０１を繰り返し行う。
【００９５】
ロック取得の方式は、例えば、セマフォレジスタなどを使って行う。なお、ロック取得に使用するセマフォレジスタなどは、排他付きライト処理Ｓ１３００で使用するセマフォレジスタと共通（同一）のものを使う。つまり、単一のセマフォレジスタを使用することで、排他付きライト処理Ｓ１３００とアトミック処理Ｓ１６００という異なった処理が、同じアドレスを持つＳＭ上の領域に対して、同時に行われないようにする。
【００９６】
ＭＰＵがロック取得に成功したら（ステップＳ１６０２：Ｙｅｓ）、マスタ面情報テーブル１１０のマスタ種別フィールド１１０１を参照し（ステップＳ１６０３）、両マスタ情報か、片マスタ情報かを判定する（ステップＳ１６０４）。
【００９７】
判定の結果、マスタ種別フィールド１１０１の内容が両マスタ情報である場合（ステップＳ１６０４：両マスタ）は、ＭＰＵが自他系のいずれのＳＭもリードすることが可能であるため、ＭＰＵは、高速にアクセス可能な自系のＳＭをリードする（ステップＳ１６０６）。続いて、ＭＰＵはリードした値に”１”を加算し（ステップＳ１６０７）、加算した値をステップＳ１６０６で自系ＳＭに対しリードしたアドレスにライトし、他系ＳＭの同じアドレスにもライトする（ステップＳ１６０８）。最後に、ステップＳ１６０１で取得したロックを解放し（ステップＳ１６１６）、ＳＭアトミック処理Ｓ１６００を終了する。
【００９８】
判定の結果、マスタ種別フィールド１１０１の内容が片マスタ情報である場合（ステップＳ１６０４：片マスタ）は、ＭＰＵがマスタ面情報テーブル１１０のマスタ面フィールド１１０２を参照し（ステップＳ１６０５）、マスタ面を判定する（ステップＳ１６０９）。
【００９９】
ＳＭａがマスタ面である場合（ステップＳ１６０９：ＳＭａ）、ＭＰＵは、ＳＭａをリードし（ステップＳ１６１０）、リードした値に”１”を加算し（ステップＳ１６１１）、加算した値をステップＳ１６１０でリードしたＳＭａのアドレスに対してライトし、続いてＳＭｂの同じアドレスにもライトする（ステップＳ１６１２）。最後に、ＭＰＵは、ステップＳ１６０１で取得したロックを解放し（ステップＳ１６１６）、ＳＭアトミック処理Ｓ１６００を終了する。
【０１００】
ＳＭｂがマスタ面である場合（ステップＳ１６０９：ＳＭｂ）、ＭＰＵは、ＳＭｂをリードし（ステップＳ１６１３）、リードした値に”１”を加算し（ステップＳ１６１４）、加算した値をステップＳ１６１３でリードしたＳＭｂのアドレスに対してライトし、続いてＳＭａの同じアドレスにもライトする（ステップＳ１６１５）。最後に、ＭＰＵは、ステップＳ１６０１で取得したロックを解放し（ステップＳ１６１６）、ＳＭアトミック処理Ｓ１６００を終了する。
【０１０１】
図１９は、ＬＵオーナ権切り替えの処理を示すフローチャートである。ＬＵオーナ権切り替え処理について図１９で説明する。ＬＵオーナ権切り替え処理は構成管理部２１に呼び出され、オーナ権を切り替えるＬＵのＬＵ番号を引数として与えられる。構成管理部２１は、各ＬＵに対する各ＣＴＬでのＩ／Ｏアクセスをモニタリングし、モニタリング結果に負荷が平坦化（するよう負荷の偏りの防止）するよう、ＣＴＬのＬＵオーナ権を動的に切り替える。もしくは、ユーザの指示によって、ＣＴＬのＬＵオーナ権を構成管理部２１が切り替えても良い。ＬＵオーナ権が切り替わると、そのＬＵに関連する制御情報のオーナ権も切り替わり、それに応じてマスタ面も切り替える必要があるため、本ＬＵオーナ権切り替え処理を実施する。
【０１０２】
ＬＵオーナ権切り替え処理が開始されると、まず、ＭＰＵは、ＬＵオーナ権テーブル１２４のＬＵオーナ権フィールド１２４１を参照し（ステップＳ１７０１）、当該ＬＵの現在のオーナ権がＣＴＬａにあるかＣＴＬｂにあるか判定する（ステップＳ１７０２）。次に、現在のＬＵオーナ権がＣＴＬａであれば（ステップＳ１７０２：ＣＴＬａ）、ＬＵオーナ権をＣＴＬｂに切り替え（ステップＳ１７０３）、ＣＴＬｂであれば（ステップＳ１７０２：ＣＴＬｂ）、ＬＵオーナ権をＣＴＬａに切り替える（ステップＳ１７０４）。
【０１０３】
次に、オーナ権が切り替わったＬＵに関連する制御情報を特定するために、ＭＰＵは、制御情報特性テーブル１２２を参照し、属するＬＵ番号フィールド１２２３に対応する制御情報名フィールド１２２０の中から該当する制御情報を検索する（ステップＳ１７０５）。例えば、ＬＵオーナ権が切り替わったＬＵ番号が“２０１”でＬＵオーナ権テーブル１２４のＬＵオーナ権フィールド１２４１の値が“ＣＴＬａ”から“ＣＴＬｂ”に切り替わった場合、ＭＰＵが、制御情報特性テーブル１２２の属するＬＵ番号フィールド１２２３で“２０１”である制御情報名を検索する。この場合は、“ペア情報管理テーブル”が該当する。
【０１０４】
また、ＬＵオーナ権が切り替わったＬＵ番号が“２０２”でＬＵオーナ権テーブル１２４のＬＵオーナ権フィールド１２４１の値が“ＣＴＬｂ”から“ＣＴＬａ”に切り替わった場合、ＭＰＵが、制御情報特性テーブル１２２の属するＬＵ番号フィールド１２２３が“２０２”である制御情報名を検索する。この場合は、“差分ビットテーブル”が該当する。
【０１０５】
次に、ループ処理であるステップＳ１７０６を、検索された制御情報に対しマスタ面とスレーブ面の内容の一致処理Ｓ１７０７とマスタ面設定処理Ｓ１０００（図１２）を実行する。なお、処理ステップＳ１７０６のループ処理の終了条件は、ステップＳ１７０５で検索された全ての制御情報に対して、マスタ面とスレーブ面の内容の一致処理Ｓ１７０７とマスタ面設定処理Ｓ１０００を行うことである。
【０１０６】
つまり、ＬＵオーナ権が変更されたＬＵに関連する全ての制御情報のマスタ面を変更するために、マスタ面設定処理Ｓ１０００を繰り返し行う。ただし、制御情報の中には、マスタ面の内容とスレーブ面（マスタ面でない方のＳＭ）の内容が一致していない場合がある。例えば、ＳＭａの内容が主に更新される前記の片マスタ情報である“ペア情報管理テーブル”が該当する。
【０１０７】
そこで、マスタ面設定処理Ｓ１０００を実行する前に、マスタ面とスレーブ面の内容を一致させておく（ステップＳ１７０７）。具体的には、マスタ面の内容をスレーブ面にコピーしてから、マスタ面設定処理Ｓ１０００を実行する。全制御情報に対してのマスタ面設定処理が完了したら、ＬＵオーナ権切り替え処理を終了する。
【０１０８】
以上の説明したシステム構成、メモリ構成と各種テーブル及び各種処理方法により、従来、異なる複数の種類のメモリを使用して構成していたシステムを、本発明では１つのメモリでＭＰＵメモリに統合できる。また、アクセスするマスタ面の制御とＬＵオーナ権制御で、自系及び他系のＭＰＵが各系のＭＰＵメモリに対し、アクセス効率を向上できる。
【０１０９】
これにより、従来と互換性のあるソフトウェア環境及び装置制御環境を保ちつつ、異なる種類のメモリを共通化でき、さらに廉価な部品を少ない点数で従来と同等のハードウェア構成でストレージ装置を構築できる。さらに、メモリへのアクセスコストであるアクセス時間を短縮できるので、ホスト計算機からストレージ装置へのアクセス性能及びストレージ装置内の処理性能などを向上させることができる。
【実施例２】
【０１１０】
図２０は、ＳＭキャッシュのメモリ構成図である。図２１は、ＳＭキャッシュを使用してのリードアクセス処理を示すフローチャートである。第２の実施例として、他系の制御情報のみをＳＭキャッシュにキャッシングする方式について、図２０及び図２１で説明する。第２の実施例の特徴は、ＳＭキャッシュ１５に、片マスタ情報で他系にマスタ面がある制御情報のみをコピーすることにある。つまり、前記制御情報は、自系のＭＰＵが、他系のＳＭを頻繁にリードする情報である。ところが、他系のＳＭリードは自系のＳＭリードに比べ低速であるので、高速なアクセスが可能な自系ＳＭに前記制御情報の一部の内容をキャッシングしておくことで、ＭＰＵのリード性能を向上させることが目的である。
【０１１１】
具体的には、ＳＭアクセス制御部２３が、ＳＭキャッシュａ（符号１５ａ）に、ＳＭｂのみにマスタ面がある片マスタ情報をコピーし、ＳＭキャッシュｂ（符号１５ｂ）に、ＳＭａのみにマスタ面がある片マスタ情報をコピーする。例えば、図２１の場合は、ＳＭｂをマスタ面とする片マスタ情報は、制御情報Ｗと制御情報Ｚなので、ＳＭアクセス制御部２３がＳＭキャッシュａ１５ａに制御情報Ｗと制御情報Ｚをコピーする。
【０１１２】
ＳＭａをマスタ面とする片マスタ情報は、制御情報Ｖ／制御情報Ｘ／制御情報Ｙであるが、全ての制御情報をコピーする容量がＳＭキャッシュａにない。そこで、ＳＭアクセス制御部２３は、制御情報Ｖ／制御情報Ｘ／制御情報Ｙから制御情報Ｖと制御情報Ｘを選択し、ＳＭキャッシュｂにコピーする。選択方法は、例えば、最近に参照された制御情報から順番に選んでコピーする方法である。このようなＳＭｂにマスタ面がある片マスタ情報を自系にあるＳＭキャッシュａにコピーするＳＭキャッシュキャッシング方法により、自系のＭＰＵａは、必要な制御情報を高速にアクセス可能な自系ＭＰＵメモリ１０２ａからリード出来る。
【０１１３】
図２１は、ＳＭキャッシュを使った時のＳＭリードの処理Ｓ１９００を示すフローチャートである。ＳＭキャッシュキャッシング時のリード処理は、ＳＭアクセス制御部２３に呼び出され、リードする制御情報のアドレスを引数として与えられる。最初に、ＭＰＵは、引数として渡されたアドレスに該当するマスタ面情報テーブル１１０のマスタ種別フィールド１１０１を参照し（ステップＳ１９０１）、マスタ種別（両マスタ情報ないし片マスタ情報）を判定する（ステップＳ１９０２）。
【０１１４】
判定の結果、マスタ種別フィールド１１０１の内容が両マスタ情報の場合（ステップＳ１９０２：両マスタ）は、自系のＭＰＵが自系のＳＭをリードできるので高速なアクセスが可能となる。そこで、ＭＰＵは自系ＳＭをリードし（ステップＳ１９０４）、リード処理を終了する。
【０１１５】
判定の結果で、マスタ種別フィールド１１０１の内容が片マスタ情報の場合（ステップＳ１９０２：片マスタ）は、ＭＰＵが、マスタ面情報テーブル１１０のマスタ面フィールド１１０２を参照し（ステップＳ１９０３）、マスタ面が自系にあるか、他系にあるかを判定する（ステップＳ１９０５）。マスタ面が自系ＳＭにある場合（ステップＳ１９０５：自系）、ＭＰＵは自系ＳＭをリードして（ステップＳ１９０７）、リード処理を終了する。
【０１１６】
判定の結果で、マスタ面が他系にある場合（ステップＳ１９０５：他系）は、ＳＭキャッシュ用のキューを参照し（ステップＳ１９０６）、Ｈｉｔ／ＭｉｓｓＨｉｔ（以下Ｍｉｓs）判定を行う（ステップＳ１９０８）。Ｈｉｔ／Ｍｉｓｓ判定とは、自系ＳＭキャッシュにリードしたい制御情報があるかどうかを判定することで、Ｈｉｔ時はリードしたい制御情報が自系ＳＭキャッシュにあるので、高速にアクセスできる。一方、Ｍｉｓｓ時はリードしたい制御情報が自系ＳＭキャッシュにないので、他系ＳＭへのリードが必要なためアクセス時間が大きい。
【０１１７】
判定の結果、自系ＳＭキャッシュにリードしたい制御情報がある場合（ステップＳ１９０８：Ｈｉｔ）は、ＭＰＵは、他系ＳＭよりも高速にアクセス出来る自系ＳＭキャッシュをリードして（ステップＳ１９１０）、リード処理を終了する。これに相当する制御情報が、図２０でＳＭキャッシュｂに格納されている“制御情報Ｖ”である。
【０１１８】
判定の結果、自系ＳＭキャッシュにリードしたい制御情報がない場合（ステップＳ１９０８：Ｍｉｓｓ）は、ＭＰＵは、他系ＳＭをリードする（ステップＳ１９０９）。続いて、リードした当該制御情報を、自系ＳＭキャッシュにコピーして（ステップＳ１９１１）、リード処理を終了する。このように、他系ＳＭにのみ存在する制御情報を自系ＳＭキャッシュにコピーしておくことで、ＭＰＵが、再び、当該制御情報をリードする時に、高速アクセス可能な自系ＳＭキャッシュからリードすることが出来る。これに相当する制御情報が、図２０でＳＭｂにもＳＭキャッシュｂにも格納されていない“制御情報Ｙ”である。
【０１１９】
以上の説明したように、第２の実施例のキャッシング制御により、第１の実施例と同様に、ソフトウェア環境及び装置制御環境の互換性の維持しながら、メモリへのアクセスコストであるアクセス時間の短縮によるストレージ装置のアクセス性能向上が図れる。
【実施例３】
【０１２０】
図２２は、本発明の第３の実施形態におけるデータキャッシュ管理情報のＬＵオーナ権による配置を概念的に説明する図である。図２３は、データキャッシュ管理情報をＬＵオーナ権に応じて配置する処理を示すフローチャートである。第３の実施例として、データキャッシュ管理情報をそのオーナ権を持つＣＴＬのＳＭ上に配置する方式について図２２及び図２３で説明する。
【０１２１】
まず、図２２を用いてデータキャッシュ管理情報の配置方式について説明する。図２２のデータキャッシュ管理情報は非二重化情報であるため、図７で示すアドレス０ｘＦ０００以降の領域である非二重化領域に配置する。なお、データキャッシュ管理情報とは、ＳＭ１２上のデータキャッシュ管理情報格納領域１６に格納する制御情報で、キャッシュメモリ１３のデータのアドレスとディスクのアドレスとを対応付ける情報である。
【０１２２】
つまり、ドライブ部１０９のあるディスクのデータにアクセスする場合、ＭＰＵは、まず、データキャッシュ管理情報格納領域１６ａを参照する。そして、ＭＰＵは、キャッシュメモリ上にアクセスするデータがあるかどうかを判断でき、さらに、キャッシュメモリ１３ａのどのアドレスに格納されているかが直ぐに分かる。
【０１２３】
また、データキャッシュ管理情報は、対応するユーザデータと同じＣＴＬ側に配置する。この理由を以下で説明する。ライトするデータをディスクに書く前に、一時的にキャッシュへ二重化して格納しておくとする。どちらか一方のＣＴＬが故障した場合でもデータのアクセスを正常に実行するため、故障していない他方のＣＴＬのＭＰＵメモリ内には、ユーザデータとそのデータにアクセスするためのデータキャッシュ管理情報がセットになって残っている必要がある。以上のような理由から、ユーザデータとデータキャッシュ管理情報は同じＣＴＬ上に配置する。
【０１２４】
ユーザデータとデータキャッシュ管理情報はＬＵに属する情報であるので、ＬＵオーナ権を持ついずれかのＣＴＬが、ユーザデータとデータキャッシュ管理情報の処理を担当する。そこで、これらのユーザデータおよび制御情報は、オーナ権を持つＣＴＬ側に配置する。ただし、このような配置を継続すると、いずれか一方のＣＴＬにＩ／Ｏが集中した場合は、Ｉ／Ｏが集中したＣＴＬ側のキャッシュメモリが使用され続け、他方のキャッシュメモリはいつまでも古い情報を持ったまま、使用されていないこととなる。このようなメモリ使用上の無駄を省き効率的なメモリ使用とアクセスを実現するため、データの解放処理と再割り当て処理を行う。具体的には、両方のキャッシュメモリの一番古い情報同士のアクセス時刻（参照時刻ないし更新時刻など）を比較し、その時間差が所定の閾値を超えた一番古い情報を両方のキャッシュメモリから解放し、その空いた領域に新しいユーザデータを格納する。
【０１２５】
そのキャッシュメモリ領域の解放処理と再割り当て処理を、図２３で説明する。図２３は、データキャッシュ管理情報の割り当て処理Ｓ２０００を示すフローチャートであり、プログラムである基本Ｉ／Ｏ制御部２２に呼び出され、アドレスを引数として与えられる処理ルーチンである。
【０１２６】
最初に、基本Ｉ／Ｏ制御部２２を実行するＭＰＵは、自系及び他系のキャッシュメモリのキューを参照する。当該キューは、最近参照されたものから順番に格納し、最も古い情報から順番に除いていくキューで、ＣＴＬａ、ＣＴＬｂのそれぞれに備える。ＭＰＵは、キューに格納されるデータに、キューにデータが最初に格納された時間である遷移時間を付与する。
【０１２７】
データキャッシュ管理情報割り当て処理Ｓ２０００の実行が開始されると、ＭＰＵは、まず、両ＣＴＬのキューの中で、一番古いデータのキューにある遷移時間（最終アクセス時刻である参照時刻ないし更新時刻など）を求め、両者の差を算出する（ステップＳ２００１）。次に、ＭＰＵは、両者の差が所定の閾値以上であるか否かを判定する（ステップＳ２００２）。
【０１２８】
両者の差が閾値以上である場合（ステップＳ２００２：Ｎｏ）、ＭＰＵは、当該キューの最も古いデータの内、どちらがより古いかを両者の遷移時間で判定する（ステップＳ２００４）。この判定によって、ＭＰＵは、二つのキャッシュメモリにある最も古いデータを削除し、新しいデータを追加することが出来る。例えば、ＣＴＬａのデータが一番古ければ（ステップＳ２００４：ＣＴＬａ）、ＭＰＵは、ＣＴＬａのキューの一番古いデータを削除し、新規データをキャッシュメモリaに配置し、そのデータの管理情報はＳＭａに配置する（ステップＳ２００８）。逆に、ＣＴＬｂのデータが一番古ければ（ステップＳ２００４：ＣＴＬｂ）、ＭＰＵは、ＣＴＬｂのキューの一番古いデータを削除し、新規データをキャッシュメモリｂに配置し、そのデータの管理情報もＳＭｂに配置する（ステップＳ２００９）。
【０１２９】
両者の差が閾値未満である場合（ステップＳ２００２：Ｙｅｓ）、ＭＰＵは、ＬＵオーナ権テーブル１２４を参照し（ステップＳ２００３）、データのＬＵオーナ権を持つＣＴＬを判定する（ステップＳ２００５）。そして、データおよびデータの管理情報をＬＵオーナ権のあるＣＴＬ上に配置することで、ＭＰＵは自系ＳＭをリード出来るため、アクセス性能を向上できる。
【０１３０】
すなわち、ＣＴＬａがＬＵオーナ権を持つ場合（ステップＳ２００５：ＣＴＬａ）、ＭＰＵは、データをキャッシュメモリａに配置し、そのデータの管理情報をＳＭａに配置し、ＬＵオーナ権テーブル１２４を更新して（ステップＳ２００６）、処理を終了する。ＣＴＬｂがＬＵオーナ権を持つ場合（ステップＳ２００５：ＣＴＬｂ）は、データをキャッシュメモリｂに配置し、そのデータの管理情報をＳＭｂに配置し、ＬＵオーナ権テーブル１２４を更新して（ステップＳ２００７）、処理を終了する。
【０１３１】
以上の説明したように、本発明の各ＣＴＬのＬＵオーナ権制御とＭＰＵメモリへのデータ管理情報の格納制御により、ＭＰＵメモリの有効利用とアクセス性能の向上が図れる。これにより、実施例１ないし実施例２と同様、メモリへのアクセスコストであるアクセス時間の短縮によるストレージ装置のアクセス性能向上が図れる。
【０１３２】
なお、上記の説明では「テーブル」という表現にて本発明の情報を説明したが、これら情報は必ずしもテーブルによるデータ構造で表現されていなくても良く、「リスト」、「ＤＢ（データベース）」、「キュー」等のデータ構造やそれ以外で表現されていても良い。そのため、データ構造に依存しないことを示すために「テーブル」、「リスト」、「ＤＢ」、「キュー」等については、単に「情報」と呼ぶこともできる。
【０１３３】
また、上記の説明では「プログラム」を主語として説明を行ったが、プログラムはプロセッサによって実行されることで定められた処理をメモリ及び通信ポート（通信制御装置）を用いながら行うため、ＭＰＵなどのプロセッサを主語としてもよい。また、プログラムを主語として開示された処理は管理サーバ等の計算機、情報処理装置が行う処理としてもよい。プログラムの一部または全ては専用ハードウェアで実現してもよく、また、モジュール化されていても良い。各種プログラムはプログラム配布サーバや記憶メディアによって各計算機にインストールされてもよいことは言うまでもない。
【産業上の利用可能性】
【０１３４】
本発明は、大型コンピュータ、汎用コンピュータ、サーバなどの情報処理装置、ストレージシステムなどの記憶装置などに適用できる。
【符号の説明】
【０１３５】
１  計算機システム
２  ホスト計算機
３  管理端末
４  ストレージ装置
５  ＳＡＮ
６  ＬＡＮ
１０  テキスト領域
１１  ローカルメモリ
１２  ＳＭ
１３  キャッシュメモリ
１５、１５ａ、１５ｂ  ＳＭキャッシュ
１６、１６ａ、１６ｂ  データキャッシュ管理情報格納領域
２１  構成管理部
２２  基本Ｉ／Ｏ制御部
２３  ＳＭアクセス制御部
２４  拡張機能制御部
１００ａ、１００ｂ  ＣＴＬ
１０１ａ、１０１ｂ  ＭＰＵ
１０２ａ、１０２ｂ  ＭＰＵメモリ
１０３ａ、１０３ｂ  ＤＭＡ回路、
１０４ａ、１０４ｂ  ＨＯＳＴ＿Ｉ／Ｆ
１０５ａ、１０５ｂ  ＤＲＩＶＥ＿Ｉ／Ｆ
１０６ａ、１０６ｂ  管理＿Ｉ／Ｆ、
１０７ａ、１０７ｂ  ＮＴＢ
１０９  ドライブ部
１１０  マスタ面情報テーブル
１２０  ペア情報管理テーブル
１２１  差分ビットテーブル
１２２  制御情報特性テーブル
１２３  制御情報アドレステーブル
１２４  ＬＵオーナ権テーブル
１１００  アドレスフィールド
１１０１  マスタ種別フィールド
１１０２  マスタ面フィールド
１２２０  制御情報名フィールド
１２２１  ライト比率フィールド
１２２２  ＬＵに属する制御情報フィールド
１２２３  属するＬＵ番号フィールド
１２３０  アドレスフィールド
１２３１  制御情報名フィールド
１２４０  ＬＵ番号フィールド
１２４１  ＬＵオーナ権フィールド
【図１】
0005738471.tif 000002
【図２】
0005738471.tif 000003
【図３】
0005738471.tif 000004
【図４】
0005738471.tif 000005
【図５】
0005738471.tif 000006
【図６】
0005738471.tif 000007
【図７】
0005738471.tif 000008
【図８】
0005738471.tif 000009
【図９】
0005738471.tif 000010
【図１０】
0005738471.tif 000011
【図１１】
0005738471.tif 000012
【図１２】
0005738471.tif 000013
【図１３】
0005738471.tif 000014
【図１４】
0005738471.tif 000015
【図１５】
0005738471.tif 000016
【図１６】
0005738471.tif 000017
【図１７】
0005738471.tif 000018
【図１８】
0005738471.tif 000019
【図１９】
0005738471.tif 000020
【図２０】
0005738471.tif 000021
【図２１】
0005738471.tif 000022
【図２２】
0005738471.tif 000023
【図２３】
0005738471.tif 000024