(57)【要約】【解決課題】複数クラスタを有するストレージ装置において、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置を提供する。【解決手段】第１のクラスタから第２のクラスタに対してデータを転送する命令をライトし、第２のクラスタはこの命令に基づいて第１のクラスタから要求があったデータを第１のクラスタにライトすることによって、第１のクラスタから第２のクラスタにリード要求を発行することなく、第２のクラスタから第１のクラスタにデータがリアルタイムに転送できるようにしたものである。【選択図】図３
2012133405.tif 000002
【特許請求の範囲】
【請求項１】
上位計算機からのコマンドに基づいて、記憶デバイスに対するデータの入出力を制御するコントローラを備え、このコントローラが複数のクラスタを備えている、ストレージ装置において、
前記複数のクラスタのそれぞれは、
前記上位計算機とのインターフェースと、
前記記憶デバイスとのインターフェースと、
ローカルメモリと、
他クラスタとの接続用回路と、
当該他クラスタ間のデータ転送を処理する処理装置と、
備え、
前記複数のクラスタのうちの第１のクラスタが第２のクラスタからのデータ転送を必要とする時、
前記第１のクラスタは前記第２のクラスタの前記ローカルメモリにデータ転送要求をライトし、
前記第２のクラスタは、前記ローカルメモリにライトされたデータ転送要求を参照して、このデータ転送要求の対象となったデータを当該ローカルメモリからリードし、リードした前記対象データを前記第１のクラスタの前記ローカルメモリにライトする、
ストレージ装置。
【請求項２】
前記複数のクラスタのそれぞれはＤＭＡコントローラを備え、
前記第１のクラスタは、前記データ転送要求として、前記第２のクラスタのＤＭＡコントローラに対する転送リストを当該第２のクラスタの前記ローカルメモリにライトし、
前記第２のクラスタの前記ＤＭＡコントローラは、前記転送リストを参照して、前記対象データを前記第１のクラスタにライトし、
前記接続用回路がＮＴＢポートを有するPCI Expressスイッチを備え、二つのクラスタの前記ＮＴＢポート同士がPCI Expressバスによって接続され、
前記第２のクラスタの前記ＤＭＡコントローラは、前記対象データを前記第１のクラスタの前記ローカルメモリに転送後、当該ローカルメモリに前記データ転送のコンプリーションをライトし、
前記第１のクラスタが、前記第２のクラスタに、当該第２のクラスタの前記ＤＭＡコントローラに対する起動要求をライトし、
当該ＤＭＡコントローラはこの起動要求によって起動した後、前記転送リストにしたがって前記対象データを前記第１のクラスタの前記ローカルメモリにライトし、
前記複数のクラスタのそれぞれは、自クラスタの前記ローカルメモリに前記他クラスタの前記ＤＭＡコントローラのステータスを規定するテーブルを有し、
前記自クラスタは当該テーブルに対するライトを他クラスタから受け付け、
前記自クラスタは当該テーブルを参照して前記他クラスタの前記ローカルメモリに当該他クラスタの前記ＤＭＡコントローラに対する前記転送リストをライトし、
前記他クラスタは前記ＤＭＡコントローラのステータスを前記テーブルにライトする請求項１記載のストレージ装置。
【請求項３】
前記複数のクラスタのそれぞれはＤＭＡコントローラを備え、
前記第１のクラスタは、前記データ転送要求として、前記第２のクラスタのＤＭＡコントローラに対する転送リストを当該第２のクラスタの前記ローカルメモリにライトし、
前記第２のクラスタの前記ＤＭＡコントローラは、前記転送リストを参照して、前記対象データを前記第１のクラスタにライトする、請求項１記載のストレージ装置。
【請求項４】
前記接続用回路がPCI Expressのポートを備え、二つのクラスタの当該ポート同士がPCI Expressバスによって接続されている、請求項１記載のストレージ装置。
【請求項５】
前記接続用回路がＮＴＢポートを有するPCI Expressスイッチを備え、二つのクラスタの前記ＮＴＢポート同士がPCI Expressバスによって接続されている、請求項１記載のストレージ装置。
【請求項６】
前記第１のクラスタが、前記第２のクラスタに、当該第２のクラスタの前記ＤＭＡコントローラに対する起動要求をライトし、
当該ＤＭＡコントローラはこの起動要求によって起動した後、前記転送リストにしたがって前記対象データを前記第１のクラスタの前記ローカルメモリにライトする、請求項３記載のストレージ装置。
【請求項７】
前記接続用回路がＮＴＢポートを有するPCI Expressスイッチを備え、二つのクラスタの前記ＮＴＢポート同士がPCI Expressバスによって接続され、
前記第２のクラスタの前記ＤＭＡコントローラは、前記対象データを前記第１のクラスタの前記ローカルメモリに転送後、当該ローカルメモリに前記データ転送のコンプリーションをライトする、請求項３記載のストレージ装置。
【請求項８】
前記複数のクラスタのそれぞれでは、前記処理装置を用いた前記データ転送を実行する実行主体が複数定義され、
前記複数のクラスタのそれぞれは、前記ＤＭＡコントローラを複数備え、
前記複数の実行主体と前記複数ＤＭＡコントローラが１：１に割り当てられ、当該実行主体が割り当てられたＤＭＡコントローラに対してアクセス権を有するものであり、
前記第１のクラスタの前記ＤＭＡコントローラに前記第２のクラスタの前記実行主体が割り当てられている、請求項３記載のストレージ装置。
【請求項９】
前記処理装置は、当該処理装置が属するクラスタのＤＭＡに対して、当該クラスタ内でのデータ転送及び前記他クラスタとの間でのデータ転送を要求するものであり、
前記複数のクラスタのそれぞれは、自クラスタの前記ＤＭＡコントローラに対して複数のデータ転送要求が存在する場合、どの発行元からの当該要求を優先させるかを定めた優先制御テーブルを前記自クラスタ及び前記他クラスタの前記ＤＭＡコントローラに対して設定し、これを自クラスタの前記ローカルメモリに格納している、請求項１記載のストレージ装置。
【請求項１０】
前記複数のクラスタのそれぞれは、自クラスタの前記ローカルメモリに前記他クラスタの前記ＤＭＡコントローラのステータスを規定するテーブルを有し、
前記自クラスタは当該テーブルに対するライトを他クラスタから受け付け、
前記自クラスタは当該テーブルを参照して前記他クラスタの前記ローカルメモリに当該他クラスタの前記ＤＭＡコントローラに対する前記転送リストをライトする、請求項３記載のストレージ装置。
【請求項１１】
前記他クラスタは前記ＤＭＡコントローラのステータスを前記テーブルにライトする請求項１０記載のストレージ装置。
【請求項１２】
上位計算機からのコマンドに基づいて、記憶デバイスに対するデータの入出力を制御するコントローラを備え、このコントローラが複数のクラスタを備えている、ストレージ装置のデータ転送制御方法において、
第１のクラスタから第２のクラスタに対してデータを転送する命令をライトするステップと、
前記第２のクラスタがこの命令に基づいて前記第１のクラスタから要求があったデータを前記第１のクラスタにライトするステップと、
を備え、
前記第１のクラスタは前記第２のクラスタにリード要求を発行することなく、前記第２のクラスタから前記第１のクラスタに前記命令の対象となった対象データをリアルタイムに転送する、データ転送制御方法。
【請求項１３】
前記データ転送は、前記第１のクラスタと前記第２のクラスタと接続するPCI Expressスイッチを介したダイレクトメモリアクセスによって実行される、請求項１２記載のデータ転送制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置に係わり、特に、ホスト計算機に対してデータストレージサービスを提供する処理手段としてのクラスタを複数有し、ユーザに対してのデータ処理サービスの冗長性を高めたストレージ装置に関するものである。本発明はさらにストレージ装置のデータ転送制御方法に関するものである。
【背景技術】
【０００２】
ホスト計算機に対してデータストレージサービスを提供する計算機システムとしてのストレージ装置には、データ処理に信頼性を持たせることと、データ処理のための応答性を向上させることが求められている。
【０００３】
そこで、ストレージ装置では、ホスト計算機に対するデータストレージサービスを提供するコントローラを複数のクラスタから構成することが提案されている。
【０００４】
この種のストレージ装置では、一方のクラスタが受信したコマンドに基づく処理を、そのクラスタが備えるプロセッサと他方のクラスタが備えるプロセッサとによって実行できるために、データ処理の高速化を達成できる。
【０００５】
一方、複数のクラスタがストレージ装置に存在するために、一方のクラスタに障害が発生しても、他方のクラスタがその障害を補ってデータ処理を継続できるために、データ処理機能が冗長化できるという利点がある。複数クラスタを備えたストレージ装置は、例えば、特開２００８−１３４７７６号公報に記載されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−１３４７７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
この種のストレージ装置では、複数のクラスタ間でデータ処理を連携させるために、複数クラスタ相互間で相手のクラスタのステータスを確認する必要がある。そこで、例えば、一方のクラスタはマイクロプログラムのステータスを他方のクラスタに一定周期でライトするようにしている。
【０００８】
また、一方のクラスタが他方のクラスタのステータスに関する情報がリアルタイムに必要な場合は、他方のクラスタに直接アクセスしてそのステータス情報をリードするようにしている。
【０００９】
ところで、一方のクラスタが他方のクラスタからでデータをリードする方式では、リードが複数のクラスタを跨った処理であるために、リードの発行元クラスはリードの発行先クラスタからリード結果が帰ってくるまで他の処理ができない。リード処理は４バイト単位で行われるものであり一度に大量のステータスのリードは、大きな性能劣化に繋がる。これでは、複数のクラスタを連携させてデータ処理を迅速に行おうとする、複数クラスタ型ストレージ装置の目的を達成することができないことになる。
【００１０】
さらに、この課題は、複数のクラスタ間をPCI-Expressで接続した場合により顕著となる。すなわち、第１のクラスタから第２のクラスタのメモリにリードリクエストを発行すると、第２のクラスタから第１のクラスタにリードデータがコンプリーションとして応答される。第１のクラスタからリードリクエストが発行されると、クラスタ同士を接続するPCI-Expressポートでのデータ通信がタイマーによって管理される。
【００１１】
第１のクラスタからのリードリクエストに対して、第２のクラスタから一定時間内に、コンプリーションが発行できないと、PCI-Expressポートに対してコンプリーションタイムアウトが第１のクラスタによって判定され、PCI-Expressポートがエラー状態にあるとしてこれを閉塞してしまう。
【００１２】
このとき、コンプリーションを発行できない第２のクラスタ側に障害が発生しているため、ホスト計算機からのＩ／Ｏを第１のクラスタが処理しなければならないが、コンプリーションタイムアウトが発生したことで、第２クラスタに連れて第１のクラスタも強制的に障害状態にあると管理計算機によって判定されて、ストレージ装置の全体システムがダウンされてしまう。
【００１３】
そこで、本発明は、複数クラスタを有するストレージ装置において、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法を提供することを目的とするものである。
【課題を解決するための手段】
【００１４】
本発明はこの目的を達成するために、第１のクラスタから第２のクラスタに対してデータを転送する命令をライトし、第２のクラスタはこの命令に基づいて第１のクラスタから要求があったデータを第１のクラスタにライトすることによって、第１のクラスタから第２のクラスタにリード要求を発行することなく、第２のクラスタから第１のクラスタにデータがリアルタイムに転送できるようにしたものである。
【発明の効果】
【００１５】
本発明によれば、本発明は、複数クラスタを有するストレージ装置において、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法を提供することができる。
【発明を実施するための形態】
【００１６】
次に、本発明の実施形態について説明する。図１は本発明に係るストレージ装置を備える記憶システムのブロック図である。この記憶システムは、ストレージ装置１０に、上位計算機としてのホスト計算機２Ａ，２Ｂと、記憶デバイス４とが接続されることによって実現されている。
【００１７】
ストレージ装置１０は、ホスト計算機２Ａが接続された第１のクラスタ６Ａと、ホスト計算機２Ｂが接続された第２のクラスタ６Ｂとを備えている。両方のクラスタはそれぞれ独立してホスト計算機に対してデータストレージ処理を提供できるものである。すなわち、データストレージ制御用のコントローラがクラスタ６Ａとクラスタ６Ｂによって構成されている。
【００１８】
ホスト計算機２Ａに対するデータストレージ処理は、クラスタ６Ａ(クラスタＡ)によって提供されるほか、クラスタ６Ｂ(クラスタＢ)によっても提供される。ホスト計算機２Ｂについても同様である。そのために、二つのクラスタはデータストレージ処理を連携させるために、クラスタ間接続路１２によって接続されている。第１のクラスタ（クラスタ６Ａ）と第２のクラスタ（クラスタ６Ｂ）との間の制御情報やユーザデータの送受信は、この接続路１２を介して行われる。
【００１９】
クラスタ間接続路としては、例えば、１レーン片方向当たり（最大８レーン）のデータ転送量が2.5〔Gbit/sec〕と高速なデータ通信を実現するPCI(Peripheral Component Interconnect)-Express規格に準拠したバス及び通信プロトコルが適用される。
【００２０】
クラスタ６Ａとクラスタ６Ｂは、それぞれ同じデバイスを備えている。そこで、これらクラスタが備えるデバイスをクラスタ６Ａに基づいて説明し、クラスタ６Ｂの説明を省略する。クラスタ６Ａのデバイスとクラスタ６Ｂのデバイスとを、同一の算用数字で特定しながら、算用数字の後のアルファベットによって区別した。“**Ａ”はクラスタ６Ａのデバイスを示し、“**Ｂ”はクラスタ６Ｂのデバイスを示す。
【００２１】
クラスタ６Ａは、その全体の動作を制御するマイクロプロセッサ（ＭＰ）１４Ａと、ホスト計算機２Ａとの通信制御を行うホストコントローラ１６Ａと、記憶デバイス４との間の通信制御を行うI/Oコントローラ１８Ａと、ホストコントローラと記憶デバイスとクラスタ間接続路とに対するデータ転送を制御するスイッチ回路（PCI-Express Switch）２０Ａと、ＭＰ１４Ａをスイッチ回路２０Ａに中継するブリッジ回路２２Ａと、ローカルメモリ２４Ａと、を備えている。
【００２２】
ホストコントローラ１６Ａは、ホスト計算機２Ａとの通信制御を行なうインターフェースを備えており、これは、複数の通信ポート及びホスト通信プロトコルチップを有する。通信ポートは、クラスタ６Ａをネットワークやホスト計算機２Ａに接続するためのものであり、例えば、ＩＰ（Internet Protocol）アドレスやＷＷＮ（World Wide Name）などの固有のネットワークアドレスが割り当てられている。
【００２３】
ホスト通信プロトコルチップは、ホスト計算機２Ａとの間の通信時におけるプロトコル制御を行う。このためホスト通信プロトコルチップとしては、例えば、ホスト計算機２Ａとの間の通信プロトコルがファイバーチャネル（ＦＣ：Fibre Channel）プロトコルである場合にはファイバーチャネル変換プロトコルチップ、かかる通信プロトコルがｉＳＣＳＩプロトコルである場合にはｉＳＣＳＩプロトコルチップというように、ホスト計算機２Ａとの間の通信プロトコルに適合したものが適用される。
【００２４】
さらに、ホスト通信プロトコルチップには、複数のマイクロプロセッサとの間で通信を行い得るマルチマイクロプロセッサ機能が搭載されており、これにより、ホスト計算機２Ａがクラスタ６ＡのＭＰ１４Ａ、そして、クラスタ６ＢのＭＰ１４Ｂと通信を行えるようになっている。
【００２５】
ローカルメモリ２４Ａは、システムメモリとキャッシュメモリとからなる。システムメモリとキャッシュメモリとを、図１のように、同一のデバイス上に搭載してもよいし、システムメモリとキャッシュメモリとを別なデバイスとしてもよい。
【００２６】
システムメモリは、制御プログラムを格納するために用いられるほか、ホスト計算機２Ａから与えられるリードコマンドやライトコマンド等の各種コマンドを一時的に保持するために用いられる。ＭＰ１４Ａは、ローカルメモリ２４Ａに格納されたリードコマンドやライトコマンドを、ローカルメモリ２４Ａにこれらが格納された順番で処理する。
【００２７】
また、システムメモリ２４Ａには、クラスタ６Ａ，６ＢのステータスやＭＰ１４Ａが実行すべきマイクロプログラムが記録されている。ステータスとしては、マイクロプログラムの処理ステータス、マイクロプログラムのバージョン、ホストコントローラ１６Ａの転送リスト、Ｉ／Ｏコントローラの転送リストなどがある。
【００２８】
ＭＰ１４Ａが自身のマイクロプログラムのステータスを、クラスタ６Ｂのシステムメモリ２４Ｂに一定周期でライトするようにしてもよい。
【００２９】
キャッシュメモリは、ホスト計算機２Ａと記憶デバイス４間や、クラスタ６Ａのクラスタ６Ｂとの間で送受信されるデータを一時的に記憶するために利用される。
【００３０】
スイッチ回路２０Ａは、好適には、PCI-Express Switchからなり、クラスタ６Ｂのスイッチ回路２０Ｂとの間のデータ転送と、クラスタ６Ａ内の各デバイス間でのデータ転送をスイッチング制御する機能を備えている。
【００３１】
また、スイッチ回路２０Ａは、クラスタ６ＡのＭＰ１４Ａからの指示により、ホスト計算機２Ａから与えられたライトデータをクラスタ６Ａのキャッシュメモリ２４Ａにライトするとともに、接続路１２と他のクラスタ６Ｂのスイッチ回路２０Ｂとを介して、クラスタ６Ｂのキャッシュメモリ２４Ｂにライトする機能を備える。
【００３２】
ブリッジ回路２２Ａは、クラスタ６ＡのＭＰ１４Ａを、同じクラスタのローカルメモリ２４Ａと、スイッチ回路２０Ａに接続するための中継装置としてものである。
【００３３】
スイッチ回路（PCI-Express Switch）２０Ａは、PCI-Express規格のポート(PCIe)を複数備え、各ポートを介して、ホストコントローラ１６Ａ、Ｉ／Ｏコントローラ１８Ａと接続している他、ブリッジ回路２２ＡのPCI-Express規格のポート(PCIe)にも接続している。
【００３４】
スイッチ回路２０Ａには、ＮＴＢ(Non-Transparent Bridge)２６Ａが実装されており、スイッチ回路２０ＡのＮＴＢ２６Ａとスイッチ回路２０ＢのＮＴＢ２６Ｂとが接続路１２によって接続されている。これによって、ストレージ装置１０に複数のＭＰを配置することが可能になる。また、ＭＰ１４Ａは、ＮＴＢによってクラスタ６Ｂのアドレス空間にアクセスすることができる。
【００３５】
本発明のストレージ装置がＮＴＢを使用することによって、複数のクラスタ(ドメイン)を接続することが可能となる。換言すれば、一方のクラスタが他方のクラスタのメモリ空間を利用すること、即ち、複数のクラスタでメモリ空間を共有することができる。
【００３６】
一方、ブリッジ回路２２Ａは、ＤＭＡ（Direct Memory Access）コントローラ２８Ａと、ＲＡＩＤエンジン３０Ａを備えている。ＤＭＡコントローラ２８Ａは、ＭＰ１４Ａを介することなく、クラスタ６Ａのデバイス間でのデータ転送や、クラスタ６Ｂへのデータ転送を行う。
【００３７】
ＲＡＩＤエンジン３０Ａは、記憶デバイス４に格納されるユーザーデータに対して、ＲＡＩＤ演算を実行するＬＳＩである。ブリッジ回路２２ａは、ローカルメモリ２４Ａと接続されるポートを備えている。
【００３８】
既述のとおり、ＭＰ１４Ａは、クラスタ６Ａ全体の動作を制御する機能を有する。ＭＰ１４Ａは、ローカルメモリ２４Ａに格納されたライトコマンドやリードコマンドに応じて、予め自己に対して割り当てられた論理ボリュームに対するデータの読み書き等の処理を行う。また、ＭＰ１４Ａは、クラスタ６Ｂの制御も実行可能である。
【００３９】
クラスタ６Ａとクラスタ６ＢとのどちらのＭＰ１４Ａ(１４Ｂ)に対して論理ボリュームへのライト/リードを割り当てるかは、それぞれのマイクロプロセッサの負荷状況や、ホスト計算機から与えられる論理ボリュームごとの担当マイクロプロセッサを指定するコマンドの受信によって動的に変更することができる。
【００４０】
Ｉ／Ｏコントローラ１８Ａは、記憶デバイス４との通信を制御するインターフェースであり、記憶装置との通信プロトコルチップを備える。このプロトコルチップとしては、例えば、記憶デバイスがＦＣハードディスクドライブである場合にはＦＣプロトコルチップであり、記憶デバイスがＳＡＳハードディスクドライブである場合にはＳＡＳプロトコルチップである。
【００４１】
ＳＡＴＡハードディスクドライブを適用する場合には、記憶装置通信プロトコルチップ２２Ａ，２２Ｂとして、ＦＣプロトコルチップ又はＳＡＳプロトコルチップを適用でき、ＳＡＴＡハードディスクドライブにはＳＡＴＡプロトコル変換チップを介して接続する構成とすることもできる。
【００４２】
記憶デバイスは、複数のハードディスクドライブ、具体的にはＦＣハードディスクドライブ、ＳＡＳハードディスクドライブ、ＳＡＴＡハードディスクドライブである。これら複数のハードディスクドライブが提供する記憶領域上には、データを読み書きするための論理的な記憶領域である論理ユニットが複数設定される。
【００４３】
ハードディスクドライブに代えて、フラッシュメモリ等の半導体メモリや、光ディスク装置を適用することができる。また、フラッシュメモリとしては、安価で書込み速度が比較的低速であり、かつ、ライト回数制限が低い第１のタイプのものと、高価でライトコマンド処理が当該第１のタイプよりも高速であり、かつ、ライト回数制限が第１のタイプよりも高い第２のタイプとのいずれのタイプのフラッシュメモリを用いることもできる。
【００４４】
ＲＡＩＤ演算が、ブリッジ回路２２ＡのＲＡＩＤコントローラ（ＲＡＩＤエンジン）３０Ａによって実行されることを説明したが、これに代えて、ＭＰがＲＡＩＤマネージャプログラムなどのソフトウエアによって実行されてもよい。
【００４５】
図２は本発明が適用される第２の形態を説明するストレージ装置のハードウエアブロック図である。ストレージ装置からスイッチ回路２０Ａ(図１)を省略し、スイッチ回路のＮＴＢ用ポートをブリッジ回路２２Ａに持たせた点が、図１の実施形態と異なる点である。この実施形態では、ブリッジ回路２２Ａがスイッチ回路２０Ａの機能を兼ねている。ホストコントローラ１６ＡとＩ／Ｏコントローラ１８ＡPCIポートによってブリッジ回路２２Ａに接続されている。
【００４６】
図３は、さらに第３の実施形態に係るストレージ装置のハードウエアブロック図である。この実施形態は、スイッチ回路２０Ａを、ＤＭＡコントローラ２８ＡとＲＡＩＤエンジン３０Ａを有するASIC（Application Specific Integrated Circuit）から構成し、これにキャッシュメモリ２４Ａ−２を接続した点と、ブリッジ回路２２Ａにシステムメモリ２４Ａ−１を接続した点とが、図１の実施形態と異なる点である。
【００４７】
なお、図３のように、ＭＰ１４Ａに対して、ブリッジ回路２２Ａとスイッチ回路２０Ａを介して接続するキャッシュメモリ２４Ａ−２を、図１では、システムメモリと統合させローカルメモリ２４Ａとしているために、図１の実施形態は、ＭＰ１４Ａとキャッシュメモリ２４Ａとの間のレイテンシを削減できるものになっている。
【００４８】
図３のように、スイッチ回路２０ＡをASICによって構成することにより、コンプリーションタイムアウト時に、スイッチ回路２２Ａが、ＭＰ１４Ａによって実行されているマイクロプログラムにダミーコンプリーションを送信することによって、クラスタ６Ａのシステムダウンを回避することができるが、本発明は、後述のように、クラスタ６Ｂからクラスタ６Ａへのデータ転送をリード命令によらず、クラスタ６Ａとクラスタ６Ｂ間のライト処理によって達成しているので、コンプリーションタイムアウトの発生がなく、スイッチ回路２０ＡをASICではなく、汎用品(PCI Expressスイッチ)を備えたものから構成できる。
【００４９】
次に、本発明に係るストレージ装置(図１)の動作例を、図４を利用して説明する。なお、この動作は図２及び図３においても同様である。
【００５０】
ストレージ装置は、第１のクラスタが第２のクラスタからデータを取得する際、第１のクラスタが第２のクラスタからデータをリードするのではなく、第１のクラスタから第２クラスタのＤＭＡに転送命令をライトして、第２のクラスタから第１のクラスタへ目的のデータをＤＭＡ転送する。
【００５１】
図４は、第１のクラスタ６Ａと第２のクラスタ６Ｂとの間での制御データやユーザデータのやり取りを説明するブロック図である。なお、以後ＤＭＡコントローラを“ＤＭＡ”と略称する。
【００５２】
クラスタ６ＡのＭＰ１４Ａ、又は、クラスタ６ＢのＭＰ１４Ｂは、クラスタ６Ｂのシステムメモリ２４Ｂに、ＤＭＡ２８Ｂへのデータ転送命令である転送リストを記述する（Ｓ１）。転送リストのライトは、クラスタ６Ａがクラスタ６Ｂのステータスをリアルタイムに取得しようとする場合の他、ホスト計算機２Ａ又は２Ｂから、ストレージ装置にリードコマンドが発行された場合などに発生する。この転送リストは、クラスタ６Ｂのシステムメモリ２４Ｂのデータをクラスタ６Ａのシステムメモリ２４ＡにＤＭＡ転送すること規定する制御情報を備えている。
【００５３】
次いで、ＭＰ１４Ａが実行するマイクロプログラムが、クラスタ６ＢのＤＭＡ２８Ｂを起動する（Ｓ２）。起動されたＤＭＡ２８Ｂは、システムメモリ２４Ｂに設定された転送リストを読み取る（Ｓ３）。
【００５４】
ＤＭＡ２８Ｂは、読みとった転送リストにしたがって、クラスタ６Ｂのシステムメモリ２４Ｂからクラスタ６Ａのシステムメモリ２４Ａに目的のデータのライトを発行する（Ｓ４）。
【００５５】
なお、クラスタ６Ａがクラスタ６Ｂのユーザデータを必要とする場合には、ＭＰ１４ＢはＨＤＤ４からローカルメモリ２４Ｂのキャッシュメモリに目的データをステージングしておく。
【００５６】
ＤＭＡ２８Ｂは、ＤＭＡ転送終了を表すコンプリーションライトをシステムメモリ２４Ａの所定エリアに書き込む（Ｓ５）。
【００５７】
クラスタ６Ａのマイクロプログラムは、メモリ２４Ａに書き込まれたクラスタ６ＢからのＤＭＡ転送完了のコンプリーションライトをリードすることでデータの移動が完了したことを確認する（Ｓ６）。
【００５８】
なお、クラスタ６ＡのマイクロプログラムがＤＭＡ転送完了に関するコンプリーションライトを一定時間経過しても得ることができない場合は、クラスタ６Ａは、クラスタ６Ｂ側に何らかの障害が発生したと判定し、以後、クラスタ６Ｂのジョブを代行するなど、耐障害時の処理を継続する。
【００５９】
以上によって、ストレージ装置では、ライトのみでクラスタ間でのデータ移動が可能となる。ライトはリードと比較して、ＭＰを拘束する時間が短い。リードコマンドを発行したＭＰはリード結果が得られるまでその他の処理が停止されるのに対して、ライトコマンドが発行された時点でＭＰは開放される。
【００６０】
また、クラスタ６Ｂに何らかの障害があっても、コンプリーションタイムアウトは発生しない。したがって、ストレージ装置はクラスタ６Ａのシステムダウンを避けることができる。
【００６１】
クラスタ６Ａがクラスタ６Ｂのデータをリードすることを、クラスタ６Ａからクラスタ６ＢのＤＭＡ２８Ｂへ転送リストをライトし、クラスタ６ＢのＤＭＡ２８Ｂによるクラスタ６ＡへのＤＭＡデータ転送を実現するために、システムメモリ６Ａには複数の制御テーブルが設定されている。システムメモリ６Ｂについても同様である。
【００６２】
この制御テーブルを図５にしたがって説明する。クラスタ６Ａのシステムメモリ２４Ａに示すように、制御テーブルには、転送リストを格納するＤＭＡディスクリプターテーブル（DMA Descriptor Table）と、ＤＭＡのステータスを格納するＤＭＡステータステーブル（DMA Status Table）と、ＤＭＡ転送の終了を意味するコンプリーションライトを格納するＤＭＡコンプリーションステータステーブル（DMA Completion Status Table）と、ＤＭＡに対する使用権が、複数のマスタで競合した場合、マスタ間での優先度を格納するＤＭＡ優先度テーブルとが、が存在する。
【００６３】
クラスタ６ＡのＤＭＡ２８Ａは、クラスタ６Ａ内でのデータ転送の他、クラスタ６Ｂへのデータのライトを実行するものである。したがって、ＤＭＡ ディスクリプターテーブルには、自クラスタ（クラスタ６Ａ）のＤＭＡに自クラスタ内でのデータ転送のための転送リストであるテーブル（Ａ-１）と、自クラスタ（クラスタ６Ａ）のＤＭＡに他クラスタ６Ｂへデータを転送するための転送リストであるテーブル（Ａ−２）とが存在する。テーブルＡ−２は、クラスタ６Ｂによってライトされる。
【００６４】
また、ＤＭＡステータステーブルには、クラスタ６ＡのＤＭＡ２８Ａ用のステータステーブルと、クラスタ６ＢのＤＭＡ２８Ｂ用テーブルがある。そして、クラスタ６ＡのＤＭＡ２８Ａは、クラスタ６Ｂによってライトされた転送リストに応じて、クラスタ６Ａのデータをクラスタ６Ｂにライトし、これとは反対に、クラスタ６ＢのＤＭＡ２８Ｂは、クラスタ６Ａからライトされた転送リストに応じて、クラスタ６Ｂのデータをクラスタ６Ａにライトする。
【００６５】
クラスタ６Ａとクラスタ６Ｂとの間のライト処理を制御するために、クラスタ６ＡのＤＭＡ用のステータステーブルと、クラスタ６ＢのＤＭＡ用テーブルとのそれぞれにクラスタ６Ａによってライトされる、あるいはクラスタ６Ｂによってライトされるかの分類がある。
【００６６】
Ａ−３は自クラスタ（クラスタ６Ａ）によってライトされ、クラスタ６ＡのＤＭＡに対して割り当てられたステータステーブルである。
【００６７】
Ａ−４は、自クラスタによってライトされ、クラスタ６ＢのＤＭＡ２８Ｂに対して割り当てられたステータステーブルである。
【００６８】
Ａ−５は、クラスタ６Ｂによってライトされ、クラスタ６ＢのＤＭＡ２８Ｂに割り当てら得たステータステーブルであり、Ａ−６は、クラスタ６Ｂによってライトされ、クラスタ６ＡのＤＭＡ２８Ａに割り当てられたステータステーブルである。
【００６９】
ＤＭＡのステータスには、そのＤＭＡがデータ転送に使用されているのかいないのかに関する情報と、そのＤＭＡに転送リストが設定中か否かに関する情報とがある。ＤＭＡのステータスを示す複数ビットからなる信号のうちbit[0]に“１”（in use flag）が設定されていることは、そのＤＭＡがデータ転送に使用されていることを示す。
【００７０】
そして、bit[1]に“１”（standby flag）が設定されていることは、そのＤＭＡに転送リストが設定中であることを示す。両方のフラグが設定されていないことは、そのＤＭＡはデータ転送に関与していないことを示している。
【００７１】
クラスタ６Ａのシステムメモリのメモリ空間にマッピングされた既述のステータステーブルをさらに具体的に説明すると、次のとおりである。
【００７２】
A-3 bit[0]：“in use flag” クラスタ６Ａのライト用であって、自クラスタ(クラスタ６Ａ)が自クラスタのＤＭＡ２８Ａを、使用しているかどうかを示す。
【００７３】
A-3 bit[1]：“standby flag” クラスタ６Ａのライト用であって、自クラスタが自クラスタのＤＭＡ２８Ａを、設定中かどうかを示す。
【００７４】
A-4 bit[0]：“in use flag”クラスタ６Ａのライト用であって、自クラスタがクラスタ６ＢのＤＭＡを、使用しているかどうかを示す。
【００７５】
A-4 bit[1]：“standby flag”クラスタ６Ａのライト用であって、自クラスタがクラスタ６ＢのＤＭＡを、設定中かどうかを示す。
【００７６】
A-5 bit[0]：“in use flag”クラスタ６Ｂのライト用であって、クラスタ６Ｂ(別クラスタ)がクラスタ６Ｂ自身のＤＭＡ２８Ｂを、使用しているかどうかを示す。
【００７７】
A-5 bit[1]：“standby flag”クラスタ６Ｂのライト用であって、クラスタ６ＢがＤＭＡ２８Ｂを設定中かどうかを示す。
【００７８】
A-6 bit[0]：“in use flag” クラスタ６Ｂのライト用であって、クラスタ６Ａが別クラスタ(クラスタ６Ｂ)のＤＭＡ２８Ｂを使用しているかどうかを示す。
【００７９】
A-6 bit[1]：“standby flag”クラスタ６Ｂのライト用であって、クラスタ６Ａが別クラスタ(クラスタ６Ｂ)のＤＭＡ２８Ｂを、設定中かどうかを示す。
【００８０】
図５は、ＤＭＡ２８ＡとＤＭＡ２８Ｂが1channelしかないことを前提としており、そうすると、二つのクラスタから、同じＤＭＡを同時に使用することができない。そこで、ＤＭＡがどちらのクラスタに属するか、ＤＭＡへ転送リストがどちらのクラスタからライトされるかなどによって区別したステータステーブルを備え、二つのクラスタからＤＭＡへの競合するアクセスを制御することとした。
【００８１】
このようにＤＭＡについての排他制御を実施するためには、クラスタ６Ａからクラスタ６ＢのＤＭＡの使用状況を確認する必要がある。このとき、クラスタ６Ａがクラスタ間接続１２を介してクラスタ６Ｂの“インユースフラグ”をリードした場合、レイテンシは極めて大きくクラスタ６Ａの性能劣化に繋がる。
【００８２】
そこで、ストレージ装置１０は、“インユースフラグ”を含むＤＭＡステータステーブルを、(A/B-3,4,5,6)のように、各クラスタのローカルメモリ中に設定した。
【００８３】
図５のＡ−７は、クラスタ６ＡのＤＭＡ２８Ａによって“コンプリーションステータス”がライトされるテーブルであり、Ａ−８は、クラスタ６ＢのＤＭＡによって“コンプリーションステータス”がライトされるテーブルである。前者のテーブルは、クラスタ６Ａの内部データ転送用としてのものであり、後者のテーブルは、クラスタ６Ｂからクラスタ６Ａへのデータの転送用としてのものである。
【００８４】
さらに、Ａ−９は、クラスタ６ＡのＤＭＡ２８Ａに対して、複数のマスタ間での優先度を設定するためのテーブルであり、Ａ−１０は、クラスタ６ＢのＤＭＡ２８Ｂに対して、複数のマスタ間での優先度を設定するためのテーブルである。
【００８５】
マスタとは、ＤＭＡのデータ転送を実現するためのソフトウエア上の制御手段であり、マスタが複数存在する場合、ＤＭＡの転送ジョブは各マスタによって達成され、そして制御される。複数のマスタに依るジョブがＤＭＡに競合した場合の調整手段が優先度テーブルである。
【００８６】
クラスタ６Ａのシステムメモリ２４Ａに格納された既述のテーブルは、クラスタ６ＡのＭＰ１４Ａ、クラスタ６ＢのＭＰ１４Ｂによって、システムブート時、ストレージデータ処理時などに、設定あるいは更新されている。クラスタ６ＡのＤＭＡ２８Ａはシステムメモリ２４Ａのテーブルをリードして、クラスタ６Ａ内でのＤＭＡ転送、クラスタ６ＢへのＤＭＡ転送を実行する。
【００８７】
次に、クラスタ６Ａがクラスタ６ＢのＤＭＡからデータの転送を受ける処理の流れを、図６に示すフローチャートに従って説明する。クラスタ６ＡのＭＰ１４Ａがクラスタ６ＢのＤＭＡ２８Ｂを利用しようとすると、ＭＰ１４Ａは、マイクロプログラムを実行して、クラスタ６ＢのＤＭＡ２８Ｂのステータスに係る領域のテーブルの“インユースフラグ”（A-4,5のbit[0]）をそれぞれリードし、これがともに“０”か否かを判定する(６００)。
【００８８】
これを否定する場合は、クラスタ６ＢのＤＭＡが使用されているとして、両フラグの値が“０”になるまで、すなわち、このＤＭＡが未使用状態になるまでステップ６００を繰り返し実行する。
【００８９】
次いで、ステップ６０２において、ＭＰ１４Ａは、クラスタ６Ｂにアクセスし、そのローカルメモリのステータステーブルのB-6のbit[1]に“スタンドバイフラグ”として“1”を設定し、クラスタ６ＢのＤＭＡ２８Ｂに対する転送リストの設定権を得る。
【００９０】
また、ローカルメモリ２４ＡのステータステーブルのA-4bit[1]に、“スタンドバイフラグ”である“１”をライトする。スタンドバイフラグが立っていることは、クラスタ６Ａがクラスタ６ＢのＤＭＡ２８Ｂを設定中であることを示している。
【００９１】
次いで、ＭＰ１４Ａは、クラスタ６ＢのＤＭＡ２８Ｂのステータスに係る領域A-5bit[1]をリードして、“スタンドバイフラグ”が“１”であるか否かを判定する（６０４）。
【００９２】
このフラグが“０”の場合は、他のマスタもＤＭＡ２８Ｂに対して転送リストの設定権を有していないと判定してステップ６０６に移行する。
【００９３】
一方、このフラグが“１”であり、クラスタ６Ａとクラスタ６Ｂとが同時にクラスタ６ＢのＤＭＡ２８Ｂの使用権を所有する場合、ステップ６０４からステップ６０８に移行し、クラスタ６Ａの優先度がクラスタ６Ｂのマスタの優先度より高い場合は、クラスタ６Ａのマスタは、ステップ６０８からステップ６０６にリターンして、クラスタ６ＢのＤＭＡ２８Ｂからクラスタ６Ａへのデータ転送を実行しようとする。
【００９４】
一方、クラスタ６Ｂのマスタの優先度が高い場合には、クラスタ６Ｂのマスタは、クラスタ６Ａのマスタからクラスタ６ＢのＤＭＡ２８Ｂへのデータ転送命令は実行できないとしてＤＭＡエラーをクラスタ６Ａのマイクロプログラム、マスタに通知する(６１１)。
【００９５】
ステップ６０６においては、ＭＰ１４は、クラスタ６Ｂのローカルメモリ２４ＢのステータステーブルのB-4,6bit[0]に“インユースフラグ”＝“1”を設定し、クラスタ６ＢのＤＭＡ２８Ｂに対する使用権を確保する。
【００９６】
次いで、ステップ６０８において、ＭＰ１４Ａは、クラスタ６Ｂのローカルメモリ２４ＢのＤＭＡディスクリプターテーブルに転送リストを設定する。
【００９７】
さらに、ＭＰ１４は、メモリ６ＢのＤＭＡ２８Ｂを起動し、起動されたＤＭＡ２８Ｂは、転送リストを読み取り、読み取った転送リストをもとにシステムメモリ２４ＡＢのデータをリードしてリードしたデータをクラスタ６Ａのローカルメモリ２４Ａに転送する（６１０）。
【００９８】
ＤＭＡ２８Ｂがクラスタ６Ａに対してデータを正常にライトすると、ＤＭＡ２８Ｂは、システムメモリ２４のクラスタＢのＤＭＡ２８Ｂに対して割り当てられコンプリーションステータステーブルにコンプリーションライトを書き込む。
【００９９】
次いで、ＭＰ１４Ａは、このテーブルのコンプリーションステータスをテェック、すなわちCompletionライトが書き込まれているか否かをチェックする(６１２)。
【０１００】
コンプリーションライトが書き込まれている場合には、クラスタ６Ｂからクラスタ６Ａへデータ転送が正しく行われたと判断して、ステップ６１４に進む。
【０１０１】
ステップ６１４では、ＭＰ１４Ａは、システムメモリ２４ＢのステータステーブルB-6（クラスタ６Ａによってライトされ、クラスタ６ＢのＤＭＡのステータスを示すテーブル）とクラスタ６Ａのシステムメモリ２４ＡのステータステーブルA-4（クラスタ６Ａによってライトされ、クラスタ６ＢＤＭＡのステータスを示すテーブル）のインユースフラグに関係するbit[0]に“０”に設定する。
【０１０２】
次いで、ステップ６１６では、これらのテーブルのスタンドバイフラグに関係するbit[1]に“0”を設定して、クラスタ６ＡのＤＭＡ２８Ｂに対するアクセス権を開放する。
【０１０３】
なお、クラスタ６Ｂが自身のＤＭＡ２８Ｂを使用する場合は、A-5,B-3のbit[0]に“１”を設定し、クラスタ６Ｂ自身がクラスタ６ＢのＤＭＡ２８Ｂの使用権を所持していることを他のマスタに対して明らかにする。
【０１０４】
ステップ６１２において、ＭＰ１４Ａがコンプリーションライトを確認できない場合には、ＭＰ１４はタイムアウトを判定して(６１８)、ＤＭＡ２８Ｂの転送エラーをユーザに通知する(６１０)。
【０１０５】
次に図６のクラスタ６ＡのＭＰ１４Ａがクラスタ６ＢのＤＭＡ２８Ｂに転送リストを設定してからＤＭＡ２８Ｂを起動するまでの処理について補足説明を加える。
【０１０６】
図７は転送リストの一例であり、ＭＰ１４Ａは、転送リストフォーマットにしたがって転送リストをシステムメモリ２８Ｂに設定する。この転送リストは、転送オプションと、転送サイズと、データの転送元となるシステムメモリ２４Ｂのアドレスと、データ転送先となるシステムメモリ２４Ａのアドレスと、次の転送リストのアドレスと、を含んでいる。これらはオフセットアドレスによって定義され。転送リストは、キャッシュメモリに格納されてもよい。オフセットアドレスにベースアドレスを適用することによって、メモリ空間のアドレスが決まる。
【０１０７】
ＭＰ１４Ａが、転送リストをクラスタ６Ｂのローカルメモリ２４Ｂに設定する際は、ＤＭＡのレジスタ（ディスクリプターアドレス）にディスクリプター（転送リスト）を配置したメモリ空間上のアドレスを設定する。このレジスタに対するアドレス設定テーブルの一例を図８に示す。
【０１０８】
ＤＭＡ２８Ｂはこのレジスタを参照して、ローカルメモリ中に転送リストが格納されているアドレスを知り、転送リストにアクセスする。図８において、サイズはこのアドレスへ格納可能なデータ量である。
【０１０９】
ＭＰ１４ＡがＤＭＡ２８Ｂを起動する際には、ＤＭＡ２８Ｂに対するレジスタ（スタートＤＭＡ）にスタートフラグをライトする。ＤＭＡ２８Ｂはこのレジスタにスタートフラグが設定されると起動し、データの転送処理を開始する。図９はこのレジスタの一例であり、オフセットアドレス値は、レジスタのメモリ空間上のアドレスであり、サイズはこのアドレスへ格納可能なデータ量である。
【０１１０】
クラスタ６Ａへのコンプリーションライトのためのアドレスの設定は、ＮＴＢのMIMIO領域を利用して、クラスタ６ＢのＤＭＡのＭＭＩＯ領域に対して行なわれる。そして、ＭＰ１４Ａは、ＤＭＡ２８Ｂがデータ転送後、コンプリーションライトを発行するローカルメモリ２４Ａのアドレスを図１０に示すレジスタ（コンプリーションライトアドレス）に設定する。この設定はＤＭＡ２８Ｂからのデータ転送開始前に終了していなければならない。オフセットアドレスの値は、レジスタのメモリ空間上の位置であり、サイズはこのアドレスへ格納可能なデータ量である。
【０１１１】
クラスタ６Ａは、クラスタ６ＢからのＤＭＡ転送完了後、ＤＭＡ２８Ｂのアボートによるエラー通知のコンプリーションステータスライトを書き込む領域を、既述とおり、ＤＭＡコンプリーションステータステーブル（Ａ−８）として、システムメモリ２４Ａに設けている。
【０１１２】
ストレージ装置のＤＭＡには、ＤＭＡ転送の完了又はエラーを転送先のクラスタに通知する方式として、割り込みではなく、コンプリーションステータスライト機能が実装されている。
【０１１３】
なお、本発明は割り込み方式を否定するものではなく、ストレージ装置が同方式を採用してクラスタ６Ｂからクラスタ６ＡへＤＭＡ転送完了通知を実行するものであってもよい。
【０１１４】
クラスタ６Ｂからクラスタ６Ａへのデータ転送を行う際、コンプリーションライトをクラスタ６Ｂのメモリに書き込み、これをクラスタ６Ａからリードしにゆくと、このリードがクラスタ間の接続手段を跨がなくてはならないために、レイテンシが大きくなってしまうという問題が存在する。
【０１１５】
そこで、クラスタ６Ａのメモリ２４Ａにコンプリーションステータス領域を予め確保しておき、クラスタ６Ａのマスタが、この領域にライトアクセスするのをソフトウエアによって制限しながら、クラスタ６ＢのＤＭＡ２８Ｂからのコンプリーションライトをこの領域に対して実行し、クラスタ間でのリードが行われることなく、クラスタ６Ａのマスタがこの領域をリードすることによって、クラスタ６Ｂからクラスタ６ＡへのＤＭＡ転送が完了することを確認できるようにした。
【０１１６】
図６のステップ６０４とステップ６０８において、クラスタ６Ａ及びクラスタ６Ｂのマスタが同時にクラスタ６Ｂの１チャンネルのＤＭＡ２８Ｂにアクセス権を有している場合、優先度が高いマスタにＤＭＡの使用権を割り当てることを説明している。
【０１１７】
これは、ストレージ装置１０は、クラスタ６Ａに、クラスタ６Ｂ側のＤＭＡ２８Ｂにライトアクセスする権利を認めたが、ＤＭＡ２８Ｂがクラスタ６Ａとクラスタ６Ｂの双方から使用されようとすると、ＤＭＡ２８Ｂが競合状態に陥り、ＤＭＡの正常な動作が保証されないため、これを防ぐ目的からである。なお、優先度に関する処理の詳細については後述する。
【０１１８】
一方、ＤＭＡの実装数が増大し、全てのＤＭＡに対してクラスタ６Ａとクラスタ６Ｂからのアクセスを認めとすると、この排他処理が各ＤＭＡについて必要となり、処理が複雑となってストレージ装置のＩ／Ｏ処理性能が劣化するおそれが生じる。
【０１１９】
そこで、クラスタに複数のチャネルからなるＤＭＡが存在する形態において、優先度に基づく排他処理に代わる、複数のマスタのＤＭＡに対する競合を避けることができるシステムが次に説明する実施形態である。
【０１２０】
図１１にこの実施形態を説明する。ストレージ装置の各クラスタには、複数のＤＭＡ、例えば、４チャンネルを有するＤＭＡが存在する。ストレージ装置は、クラスタ６Ａの複数のＤＭＡのうちＤＭＡチャンネル１とＤＭＡチャンネル２に対するアクセス権をクラスタ６Ａのマスタに認め、同様に、ＤＭＡチャンネル３とＤＭＡチャンネル４をクラスタ６Ｂのマスタに割り当てている。
【０１２１】
さらに、クラスタ６Ｂの複数のＤＭＡのうちＤＭＡチャンネル１とＤＭＡチャンネル２とをクラスタ６Ａのマスタに割り当て、ＤＭＡチャンネル３とＤＭＡチャンネル４とをクラスタ６Ｂのマスタに割り当てている。このような割り当ては、クラスタ６Ａ,６Ｂのソフトウエアコーディング時に設定される。
【０１２２】
したがって、クラスタ６Ａとクラスタ６Ｂとのそれぞれにおいて、クラスタ６Ａのマスタとクラスタ６Ｂのマスタとが一つのＤＭＡに対してアクセス権を競合させることがないようにしている。
【０１２３】
クラスタ６Ａの複数のＤＭＡのそれぞれには、図１１の矢印に示す様に、同一クラスタ内のシステムメモリ２４Ａに格納されたテーブルが割り当ている。クラスタ６Ｂについても同じである。
【０１２４】
クラスタ６Ａのマスタは、ＤＭＡチャンネル１又はＤＭＡチャンネル２を使用して、転送リストテーブル（自クラスタライト用/自クラスタ（クラスタ６Ａ)のＤＭＡディスクリプターテーブル）（Ａ−１）を参照して、クラスタ６Ａ内でのＤＭＡ転送を行い、転送リストテーブル（クラスタ６Ｂライト用/自クラスタ（クラスタ６Ａ) のＤＭＡディスクリプターテーブル）（Ａ−２）を参照してクラスタ６ＢへのＤＭＡ転送を行う。
【０１２５】
このとき、クラスタ６Ａのマスタは、前者の転送では、システムメモリ２４Ａのクラスタ６Ａ用ＤＭＡステータステーブル（Ａ−３）を参照し、後者の転送では、システムメモリ２４Ａのクラスタ６Ｂ用ＤＭＡステータステーブル（Ａ−４）を参照する。
【０１２６】
クラスタ６Ｂのマスタは、クラスタ６Ａのデータを必要とする場合、クラスタ６ＡのＤＭＡチャンネル３又はＤＭＡチャンネル４のレジスタに起動フラグをライトする。
【０１２７】
すると、クラスタ６ＡのＤＭＡチャンネル３は、クラスタ６Ｂ用テーブル１１０に格納された転送リストにしたがって、クラスタ６Ａからクラスタ６ＢにデータをＤＭＡ転送する。また、クラスタ６ＡのＤＭＡチャンネル４は、クラスタ６Ｂ用テーブル１１２に格納された転送リストにしたがって、クラスタ６Ａからクラスタ６ＢにデータをＤＭＡ転送する。
【０１２８】
これらテーブルには、クラスタ６Ｂのマスタによって、転送リストが設定あるいは更新される。
【０１２９】
クラスタ６Ｂにおいては、ＤＭＡチャンネル１及びＤＭＡチャンネル２に、クラスタ６Ａのマスタのアクセス権が割り当てられている。ＤＭＡチャンネル３とＤＭＡチャンネル４にクラスタ６Ｂのマスタの専有権が認められている。テーブルとＤＭＡチャンネルとの割り当ては、図に示す矢印のとおりである。
【０１３０】
次に、既述の優先度について説明する。図１２は、ＤＭＡに複数のマスタのアクセスが競合した場合の優先度を規定する優先度テーブルを示すものである。物理的に1つしかないＤＭＡを２つ以上のマスタが同時に起動・使用することは不可能であるため、優先度テーブルによって、マスタのＤＭＡに対する使用権に優先度を設定することにしたものである。
【０１３１】
図１２はクラスタ６ＡのＤＭＡ２８Ａ(図５参照)についての優先度テーブルＡ−９，Ｂ−１０(図５)のフォーマットを示すものであり、図１３はクラスタ６ＢのＤＭＡ２８Ｂ（図５参照）についての優先度テーブルＡ−１０,Ｂ−９のフォーマットを示すものである。このテーブルは、マスターを特定するバリューと、優先度の設定を含んでいる。小さい数値ほど優先度が高いことを示している。優先度は、一つのＤＭＡに対するクラスタ６Ａ，６Ｂの複数のマスタ間の優先度の優劣として定義されるものである。
図１４は、クラスタ６Ａのマスター０、マスター１とクラスタ６Ｂのマスター０とマスター１の合計で４マスタを定義するテーブルである。マスターは、図１４に示す様に２ビット（バリュー）によって特定される。マスター定義用として合計で８ビット存在するために(図１２参照)、図１５に示す様に、優先度テーブルにはそれぞれ２ビットで特定される４つのマスターを優先度順にマッピングする。
【０１３２】
図１５はクラスタ６Ａのマスタ２８Ａについての優先度テーブルである。この優先度テーブルによれば、優先度の大小は、クラスタ６Ａのマスター１＞クラスタ６Ａのマスター０＞クラスタ６Ｂのマスター０＞クラスタ６Ｂのマスター１の順である。
【０１３３】
したがって、クラスタ６Ａのマイクロプログラムは、ＤＭＡに複数のマスタのアクセスが競合した場合、この優先度テーブルを参照して、優先度が最も高いマスタに対してアクセス権を認める。
【０１３４】
優先度のレベルはマスタの個数分用意する。既述の例では、クラスタ６Ａにマスタが２、クラスタ６Ｂにマスタが２存在することを前提にして優先度のレベルを４段階にしている。マスタがこれより増える場合には、優先度のレベルを増やすため、優先度を設定するためのビット数を増加させる。
【０１３５】
マイクロプログラムは、ＤＭＡに対して複数のマスタが競合したことを、このＤＭＡに対する複数のステータテーブルにそれぞれスタンドバイフラグ“１”がセットされることによって判定する。例えば、図５において、Ａ−３とＡ−６の双方においてスタンドバイフラグがセットされている状態である。
【０１３６】
一方、ストレージ装置には、一旦優先度を設定した後に、優先度の変更を要するケースが発生する。例えば、クラスタ６Ａにおいてファームウエアを交換する場合、ファームウエア高環中クラスタ６Ａのマスタは、ＤＭＡ２８Ａを一切使用しない。
【０１３７】
そこで、クラスタ６ＡのＤＭＡをクラスタ６Ｂのマスタに対して一時優先して割り当てることによって、クラスタ６Ｂがクラスタ６ＡのＤＭＡを使用するための待ち時間を低減させる。
【０１３８】
優先度テーブルの設定はストレージ装置のブート時である。ストレージ装置の起動時に、ソフトウェアによって、優先度テーブルが各クラスタのメモリに書き込まれる。この書き込みは、優先度テーブルが割り当てられたＤＭＡが属するクラスタの側から行われる。例えば、テーブルＡ−９はクラスタ６Ａのマイクロプログラムによって行われ、テーブルＡ−１０は、クラスタ６Ｂのマイクロプログラムによって行われる。
【０１３９】
各クラスタに複数のマスタが存在しても、既述の優先度の設定・変更・更新はそのうちの一つのマスタによって行われる。この権限がないマスタが優先度を変更しようとする場合は権限があるマスタに優先度の変更を依頼する。
【０１４０】
次に、図１６に基づいて優先度を変更するフローチャートについて説明する。優先度の変更処理のジョブは優先度変更対象ＤＭＡを特定することを含む（１６００）。
【０１４１】
このＤＭＡが属するクラスタに複数あるマスタは、このジョブの実行権限をランダムに選択して、優先度変更の権限があるか否かを判定する（１６０２）。この判定が否定された場合は、権限があるマスタに優先度変更ジョブを渡す(１６０４)。
【０１４２】
この判定が肯定されると、優先度変更の権限があるマスタは、優先度が変更されるＤＭＡに割り当てられたステータステーブルのインユースフラグが“１”であるかを判定し、“１”である場合には、ＤＭＡがデータ転送に使用されているために優先度を変更すべきではないため、このフラグが“０”になるまで処理を繰り返す（１６０６）。
【０１４３】
対象のＤＭＡがデータ転送を終了すると、このＤＭＡについてデータが転送されるとインユースフラグは解放されて“０”になり、ステップ１６０６を通過し、次いで、マスタはこのＤＭＡに割り当てられたステータステーブルのスタンドバイフラグに“１”を設定して、このＤＭＡに対するアクセス権を確保する(１６０８)。
【０１４４】
ステップ１６１０において、優先度変更ジョブを実行するマスタが属するクラスタのメモリに格納され、別マスタのライト用優先度変更対象ＤＭＡのステータステーブルに、ジョブ実行中マスタとは別マスタによってスタンドバイフラグが設定されているとき、優先度変更ジョブ実行中マスタは、当該マスタがライトする対象ＤＭＡの優先度変更テーブルを参照し、別マスタの優先度と優先度変更ジョブを行うマスタの優先度を比較し、前者の優先度が高い場合にはステップ１６２０に移行する。
【０１４５】
ステップ１６２０では、優先度変更ジョブ実行中マスタは、対象ＤＭＡへの転送リストが別マスタによって設定中であるため、ジョブ実行中マスタによって設定された対象ＤＭＡのスタンドバイフラグを解放、すなわちこれを“０”にし、次いで、別ＤＭＡについて優先度の設定・変更・更新の開始処理へ移行し(１６２２)、ステップ１６０２にリターンする。
【０１４６】
一方、ステップ１６１０の処理おいてジョブ実行中のマスタの方が優先度が高い場合、このマスタは、当該マスタのライト用の対象ＤＭＡのステータステーブル、及び、別マスタライト用の“対象ＤＭＡ”のインユースフラグに“１”に設定し、対象ＤＭＡを優先度変更処理にロックする（１６１２）。
【０１４７】
次のステップ１６１４では、ジョブ実行中のマスタは、クラスタに属する全てのＤＭＡについてのインユースフラグに，ＤＭＡの使用中を示す“１”が設定されている場合は、クラスタに属する全ＤＭＡに対するロックが完了したとして、このクラスタに属する全ＤＭＡに対して優先度変更処理を行い、その後全ＤＭＡに割り当てられたフラグをクリアして、全ＤＭＡを優先度変更処理から解放する。
【０１４８】
以上によって、複数のクラスタに属する全てのＤＭＡに対して優先度変更・更新処理が完了する。
【０１４９】
図１７は図１１の変形例であり、各クラスタのマスタにそれぞれＤＭＡのチャンネルを割り当てる方式のものである。システム全体のＤＭＡチャンネル数が、システム全体のマスタ数以下の場合に好適な方式のものである。
【０１５０】
クラスタＡ（６Ａ）のプロセッサ１４Ａには、マスタ１及びマスタ２が稼働している。クラスタＢ（６Ｂ）についても同様である。
【０１５１】
クラスタＡのＤＭＡチャンネル１はクラスタＡのマスタ１によって使用され、ＤＭＡチャンネル２はクラスタＡのマスタ２によって使用され、ＤＭＡチャンネル３はクラスタＢのマスタ1によって使用され、ＤＭＡチャンネル４はクラスタＢのマスタ２によって使用される。
【０１５２】
一方、クラスタＢのＤＭＡチャンネル１はクラスタＡのマスタ１によって使用され、ＤＭＡチャンネル２はクラスタＡのマスタ２によって使用され、ＤＭＡチャンネル３はクラスタＢのマスタ1によって使用され、ＤＭＡチャンネル４はクラスタＢのマスタ２によって使用される。
【０１５３】
クラスタＡのメモリ２４ＡとクラスタＢのメモリ２４Ｂとには、各ＤＭＡチャンネル用の制御テーブルが存在し、この制御テーブルにはＤＭＡディスクリプターテーブルとコンプリーションライト領域とが存在する。
【０１５４】
クラスタＡのメモリ２４Ａには、クラスタＡの各ＤＭＡチャンネル用の制御テーブルが存在し、チャンネル１及び２用のテーブルには、自クラスタ(クラスタＡ)によってライトされる、自クラスタ用のＤＭＡディスクリプターテーブルとコンプリーションライト領域とが存在する。
【０１５５】
そして、クラスタＡのチャンネル３及び４用のテーブルには、クラスタＢによってライトされる、自クラスタ用のＤＭＡディスクリプターテーブルとコンプリーションライト領域とが存在する。
【０１５６】
一方、クラスタＢのメモリ２４ＢＡには、クラスタＢの各ＤＭＡチャンネル用の制御テーブルが存在し、チャンネル１及び２用のテーブルには、クラスタＡによってライトされる、自クラスタ用のＤＭＡディスクリプターテーブルとコンプリーションライト領域とが存在する。
【０１５７】
そして、クラスタＢのチャンネル３及び４用のテーブルには、クラスタＢによってライトされる、自クラスタ用のＤＭＡディスクリプターテーブルとコンプリーションライト領域とが存在する。
既述の実施形態では、クラスタ６Ｂからクラスタ６ＡにデータがＤＭＡ転送によってライトされることを説明したが、この逆も勿論可能である。既述の実施形態では二つのクラスタ間のデータ転送をＤＭＡによって行うことを説明したが、これに限られるものではない。
【０１５８】
本発明は、ホスト計算機に対してデータストレージサービスを提供する処理手段としてのクラスタを複数有し、ユーザに対してのデータ処理サービスの冗長性を高めたストレージ装置に利用可能であり、特に、複数のクラスタ間でリアルタイムにデータを必要とする場合であっても、クラスタ連携処理の遅延や複数クラスタが一体となってシステムダウンしてしまうおそれがないストレージ装置及びそのデータ転送制御方法に利用可能である。
【図面の簡単な説明】
【０１５９】
【図１】本発明に係るストレージ装置の一例を備える記憶システムのハードウエアブロック図である。
【図２】第２の実施形態に係るストレージ装置を備える記憶システムのハードウエアブロック図である。
【図３】第３の実施形態に係るストレージ装置を備える記憶システムのハードウエアブロック図である。
【図４】図１のストレージ装置におけるデータ転送の流れの説明が付された記憶システムのハードウエアブロック図である。
【図５】図１のストレージ装置のローカルメモリ内の制御テーブルの詳細を説明するブロック図である。
【図６】図１のストレージ装置におけるデータ転送の流れを説明するフローチャートである。
【図７】転送リストの一例を示すテーブルである。
【図８】転送リストを格納したアドレスをＤＭＡコントローラに対して設定するためのレジスタのテーブル構成の一例である。
【図９】起動要求を格納したアドレスをＤＭＡコントローラに対して設定するためのレジスタのテーブル構成の一例である。
【図１０】コンプリーションステータスをＤＭＡに対して設定するためのレジスタのテーブル構成の一例である。
【図１１】ローカルメモリに複数存在するＤＭＡコントローラと複数の制御テーブルとの対応関係を示したブロック図である。
【図１２】第１のクラスタの優先度テーブルの一例である。
【図１３】第２のクラスタの優先度テーブルの一例である。
【図１４】複数のマスタを特定するためのテーブルの一例である。
【図１５】複数のマスタがマッピングされて、その優先度が規定された優先のテーブルの一例である。
【図１６】ＤＭＡコントローラに対する複数マスタの優先度を変更するためのフローチャートである。
【図１７】図１１の変形例に係るブロック図である。
【符号の説明】
【０１６０】
２Ａ,２Ｂ  ホスト計算機
６Ａ，６Ｂ  クラスタ
１０  ストレージ装置
１２  クラスタ間の接続路
１４Ａ，１４Ｂ  マイクロプロセッサ（ＭＰ又はＣＰＵ）
２０Ａ、２０Ｂ  スイッチ回路(PCI Expressスイッチ)
２２Ａ  ブリッジ回路
２４Ａ，２４Ｂ  ローカルメモリ
２６Ａ，２６Ｂ  ＮＴＢポート
２８Ａ，２８Ｂ  ＤＭＡコントローラ
【図１】
2012133405.tif 000003
【図２】
2012133405.tif 000004
【図３】
2012133405.tif 000005
【図４】
2012133405.tif 000006
【図５】
2012133405.tif 000007
【図６】
2012133405.tif 000008
【図７】
2012133405.tif 000009
【図８】
2012133405.tif 000010
【図９】
2012133405.tif 000011
【図１０】
2012133405.tif 000012
【図１１】
2012133405.tif 000013
【図１２】
2012133405.tif 000014
【図１３】
2012133405.tif 000015
【図１４】
2012133405.tif 000016
【図１５】
2012133405.tif 000017
【図１６】
2012133405.tif 000018
【図１７】
2012133405.tif 000019