(57)【要約】【課題】本発明のストレージシステムは、複数の記憶制御装置を接続し、各記憶制御装置間でコマンドやデータを直接的に交換可能として、ホスト接続数を増加させる。【解決手段】  第１記憶制御装置１０は複数のコントローラ１００Ａ，１００Ｂを備えており、第２記憶制御装置２０も複数のコントローラ２００Ａ，２００Ｂを備えている。各記憶制御装置１０，２０内において、各コントローラはそれぞれコントローラ間通信経路Ｐ１，Ｐ２により接続されている。また、記憶制御装置を跨ぐようにして、別々の記憶制御装置に属するコントローラ同士も、装置間通信経路NPA，NPBにより接続されている。一方の記憶制御装置で受信されたコマンドの処理対象が、他方の記憶制御装置の管理下にある場合、そのコマンドは、装置間通信経路を介して、一方の記憶制御装置から他方の記憶制御装置に転送される。【選択図】        図１
2007328408.tif 000002
【特許請求の範囲】
【請求項１】
上位装置に接続される記憶制御装置を複数備えたストレージシステムであって、
前記各記憶制御装置は、前記上位装置及び記憶デバイスとの通信をそれぞれ制御するコントローラをそれぞれ備えており、
前記各記憶制御装置内の前記各コントローラ同士を接続する装置間通信経路を設け、
前記各コントローラは、前記装置間通信経路を介して接続されている接続先コントローラの有するメモリに、前記上位装置を介さずにアクセス可能となっているストレージシステム。
【請求項２】
前記各コントローラは、
前記上位装置との間で通信を行うための上位通信制御部と、
前記記憶デバイスとの間で通信を行うための下位通信制御部と、
前記上位通信制御部及び前記下位通信制御部により利用される前記メモリと、
前記上位通信制御部及び前記下位通信制御部と前記メモリとの間のデータ転送を制御するデータ転送制御部と、
前記コントローラの動作を制御するプロセッサと、をそれぞれ備え、かつ、
前記データ転送制御部は、前記装置間通信経路に接続するための装置間インターフェース部を備えている請求項１に記載のストレージシステム。
【請求項３】
前記各コントローラは、前記上位装置からアクセスを要求された記憶デバイスが前記接続先コントローラの管理下にある場合、前記装置間通信経路を介して、前記接続先コントローラの有する前記メモリにアクセスする請求項２に記載のストレージシステム。
【請求項４】
前記各コントローラは、前記上位装置からアクセスを要求された記憶デバイスが前記接続先コントローラの管理下にある場合、前記上位装置から受信したコマンド及び／またはデータを、前記装置間通信経路を介して、前記接続先コントローラに転送する請求項２に記載のストレージシステム。
【請求項５】
前記各コントローラ内の前記上位通信制御部は、前記上位装置から受信したコマンドを所定の転送先に転送するためのコマンド転送機能をそれぞれ備えており、
前記上位装置からアクセスを要求された記憶デバイスが前記接続先コントローラの管理下にある場合、前記上位通信制御部は、前記上位装置から受信したコマンド及び／またはデータを、前記装置間インターフェース部及び前記装置間通信経路を介して、前記接続先コントローラに転送する請求項２に記載のストレージシステム。
【請求項６】
前記各コントローラは、前記上位装置からライトコマンド受信した場合、このライトコマンドに係るライトデータを前記メモリにそれぞれ記憶させ、かつ、前記ライトコマンドに係る前記ライトデータを前記接続先コントローラの前記メモリにも記憶させる請求項２に記載のストレージシステム。
【請求項７】
前記各コントローラは、前記上位装置からライトコマンドを受領した場合、このライトコマンドの書込み対象が自己の管理下にある記憶デバイスであるか前記接続先コントローラの管理下にある記憶デバイスであるかを問わずに、前記ライトコマンドに係るライトデータを前記メモリにそれぞれ記憶させ、かつ、前記ライトコマンドの書込み対象が前記接続先コントローラの管理下にある記憶デバイスである場合は、前記ライトコマンドに係る前記ライトデータを前記接続先コントローラのメモリに転送して記憶させる請求項２に記載のストレージシステム。
【請求項８】
前記各コントローラは、前記ライトデータを前記接続先コントローラのメモリに転送して記憶させた後、前記メモリに記憶させた前記ライトデータを消去させる請求項７に記載のストレージシステム。
【請求項９】
前記上位装置から受信したライトコマンドを処理するための第１書込みモード及び第２書込みモードが予め用意されており、かつ、前記記憶デバイス毎に、前記第１書込みモードまたは前記第２書込みモードのいずれか一つを予め設定可能となっており、
（１）前記ライトコマンドの書込み対象の記憶デバイスに前記第１書込みモードが設定されている場合には、前記ライトコマンドを受信した接続元コントローラが有する前記メモリ及び前記接続元コントローラに前記装置間通信経路を介して接続されている接続先コントローラが有する前記メモリに、前記ライトコマンドに係るライトデータをそれぞれ記憶させ、
（２）前記ライトコマンドの書込み対象の記憶デバイスに前記第２書込みモードが設定されている場合には、前記接続元コントローラの有する前記メモリに前記ライトコマンドに係るライトデータを記憶させた後、前記書込み対象の記憶デバイスが前記接続先コントローラの管理下にある記憶デバイスであるか否かを判定し、前記書込み対象の記憶デバイスが前記接続先コントローラの管理下にある記憶デバイスであると判定されたときは、前記ライトデータを前記接続先コントローラの有する前記メモリに転送して記憶させる、請求項２に記載のストレージシステム。
【請求項１０】
前記第２書込みモードが設定された場合には、さらに、前記接続元コントローラの有する前記メモリに記憶された前記ライトデータを消去させるデータ消去モードを設定可能となっており、前記データ消去モードが設定されている場合には、前記ライトデータを前記接続先コントローラの有する前記メモリに転送して記憶させた後、前記接続元コントローラの有する前記メモリに記憶された前記ライトデータを消去させる、請求項９に記載のストレージシステム。
【請求項１１】
前記各記憶制御装置は、コントローラ間通信経路によって互いに接続された第１コントローラ及び第２コントローラをそれぞれ備えており、前記第１コントローラと前記第２コントローラとは互いに相手をバックアップ可能となっている請求項１に記載のストレージシステム。
【請求項１２】
前記装置間通信経路は複数ずつ設けられており、いずれか一方の装置間通信経路を利用できない場合には、他方の装置間通信経路が使用される請求項１に記載のストレージシステム。
【請求項１３】
前記各コントローラは、自分の管理下にある記憶デバイスの負荷をそれぞれ監視しており、予め設定された閾値以上の負荷を有する高負荷記憶デバイスが検出された場合、前記装置間通信経路を介して接続された前記接続先コントローラに、前記高負荷記憶デバイスの管理を委ねる請求項１に記載のストレージシステム。
【請求項１４】
前記装置間インターフェース部には、前記装置間通信経路に代えて、前記上位通信制御部とは別の上位通信制御部を接続可能である請求項２に記載のストレージシステム。
【請求項１５】
筐体と、
前記筐体に設けられる第１コントローラ及び第２コントローラと、を備える記憶制御装置であって、
前記第１コントローラ及び前記第２コントローラは、
前記上位装置との間で通信を行うための上位通信制御部と、
前記記憶デバイスとの間で通信を行うための下位通信制御部と、
前記上位通信制御部及び前記下位通信制御部により利用される前記メモリと、
前記上位通信制御部及び前記下位通信制御部と前記メモリとの間のデータ転送を制御するデータ転送制御部と、
前記コントローラの動作を制御するプロセッサと、をそれぞれ備え、かつ、
前記データ転送制御部は、
前記第１コントローラと前記第２コントローラとを接続するコントローラ間通信経路に接続するためのコントローラ間インターフェース部と、
他の記憶制御装置内の対応するコントローラに接続される装置間通信経路に接続するための装置間インターフェース部と、を備えている記憶制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及び記憶制御装置に関する。
【背景技術】
【０００２】
例えば、企業や病院、政府機関等の各種組織で管理される各種のデータは、記憶制御装置によって管理される。記憶制御装置は、例えば、多数のハードディスクを備えており、ホストコンピュータ（以下、ホスト）にRAID（Redundant Array of Independent Disks）に基づく記憶容量を提供する。企業等の各種組織で管理されるデータの量は、日々増大するため、記憶制御装置の記憶容量が不足する場合もある。記憶容量が不足した場合は、新たなハードディスクを記憶制御装置に追加して記憶容量を増加させたり、または、古いデータを記憶制御装置内からテープデバイス等に移し替えることにより、対処することができる。
【０００３】
一方、記憶制御装置を利用するホストの数が増加する場合もある。記憶制御装置に接続可能なホストの数には、記憶制御装置の仕様上の制限があるため、仕様を超えた数のホストを接続することは一般的に難しい。従って、この場合は、例えば、ホスト接続数の少ない既存の記憶制御装置を、ホスト接続数の多い別の記憶制御装置に置き換えるか、または、記憶制御装置の数を増加させることが考えられる。
【０００４】
記憶制御装置の数を増加させる場合、新たに追加された記憶制御装置に、既存の記憶制御装置からデータを移行させる。そして、ホストに設けられたパス切替ソフトウェアやスイッチ等を用いることにより、ホストは、所望のデータの存在する記憶制御装置にアクセスする（特許文献１）。
【特許文献１】特開２００５−３５３０３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
前記文献に記載の従来技術では、複数の記憶制御装置のいずれの記憶制御装置にアクセスするかを、各ホストがその都度それぞれ判断しなければならない。従って、各ホストのそれぞれにおいて、アクセスパスの切替設定等を行う必要があり、ストレージシステムを管理するための手間がかかる。また、各ホストに、アクセスパスの切替を行うためのソフトウェアを搭載する必要があり、ストレージシステムのコストも増加する。
【０００６】
本発明は、上記の問題点に鑑みてなされたもので、その目的は、上位装置に意識させることなく、記憶制御装置側で処理経路を切り替えることができるようにしたストレージシステム及び記憶制御装置を提供することにある。本発明の他の目的は、対等の立場にある複数の記憶制御装置を連結させることにより、接続可能な上位装置の数を簡単に増加させることができるストレージシステム及び記憶制御装置を提供することにある。本発明の更なる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【０００７】
上記課題を解決すべく、本発明に従うストレージシステムは、上位装置に接続される記憶制御装置を複数備えたストレージシステムであって、各記憶制御装置は、上位装置及び記憶デバイスとの通信をそれぞれ制御するコントローラをそれぞれ備えており、各記憶制御装置内の各コントローラ同士を接続する装置間通信経路を設け、各コントローラは、装置間通信経路を介して接続されている接続先コントローラの有するメモリに、上位装置を介さずにアクセス可能となっている。
【０００８】
本発明の一態様では、各コントローラは、上位装置との間で通信を行うための上位通信制御部と、記憶デバイスとの間で通信を行うための下位通信制御部と、上位通信制御部及び下位通信制御部により利用されるメモリと、上位通信制御部及び下位通信制御部とメモリとの間のデータ転送を制御するデータ転送制御部と、コントローラの動作を制御するプロセッサと、をそれぞれ備え、かつ、データ転送制御部は、装置間通信経路に接続するための装置間インターフェース部を備えている。
【０００９】
本発明の一態様では、各コントローラは、上位装置からアクセスを要求された記憶デバイスが接続先コントローラの管理下にある場合、装置間通信経路を介して、接続先コントローラの有するメモリにアクセスする。
【００１０】
本発明の一態様では、各コントローラは、上位装置からアクセスを要求された記憶デバイスが接続先コントローラの管理下にある場合、上位装置から受信したコマンド及び／またはデータを、装置間通信経路を介して、接続先コントローラに転送する。
【００１１】
本発明の一態様では、各コントローラ内の上位通信制御部は、上位装置から受信したコマンドを所定の転送先に転送するためのコマンド転送機能をそれぞれ備えており、上位装置からアクセスを要求された記憶デバイスが接続先コントローラの管理下にある場合、上位通信制御部は、上位装置から受信したコマンド及び／またはデータを、装置間インターフェース部及び装置間通信経路を介して、接続先コントローラに転送する。
【００１２】
本発明の一態様では、各コントローラは、上位装置からライトコマンド受信した場合、このライトコマンドに係るライトデータをメモリにそれぞれ記憶させ、かつ、ライトコマンドに係るライトデータを接続先コントローラのメモリにも記憶させる。
【００１３】
本発明の一態様では、各コントローラは、上位装置からライトコマンドを受領した場合、このライトコマンドの書込み対象が自己の管理下にある記憶デバイスであるか接続先コントローラの管理下にある記憶デバイスであるかを問わずに、ライトコマンドに係るライトデータをメモリにそれぞれ記憶させ、かつ、ライトコマンドの書込み対象が接続先コントローラの管理下にある記憶デバイスである場合は、ライトコマンドに係るライトデータを接続先コントローラのメモリに転送して記憶させる。
【００１４】
本発明の一態様では、各コントローラは、ライトデータを接続先コントローラのメモリに転送して記憶させた後、メモリに記憶させたライトデータを消去させる。
【００１５】
本発明の一態様では、上位装置から受信したライトコマンドを処理するための第１書込みモード及び第２書込みモードが予め用意されており、かつ、記憶デバイス毎に、第１書込みモードまたは第２書込みモードのいずれか一つを予め設定可能となっており、
（１）ライトコマンドの書込み対象の記憶デバイスに第１書込みモードが設定されている場合には、ライトコマンドを受信した接続元コントローラが有するメモリ及び接続元コントローラに装置間通信経路を介して接続されている接続先コントローラが有するメモリに、ライトコマンドに係るライトデータをそれぞれ記憶させ、（２）ライトコマンドの書込み対象の記憶デバイスに第２書込みモードが設定されている場合には、接続元コントローラの有するメモリにライトコマンドに係るライトデータを記憶させた後、書込み対象の記憶デバイスが接続先コントローラの管理下にある記憶デバイスであるか否かを判定し、書込み対象の記憶デバイスが接続先コントローラの管理下にある記憶デバイスであると判定されたときは、ライトデータを接続先コントローラの有するメモリに転送して記憶させるようになっている。
【００１６】
本発明の一態様では、第２書込みモードが設定された場合には、さらに、接続元コントローラの有するメモリに記憶されたライトデータを消去させるデータ消去モードを設定可能となっており、データ消去モードが設定されている場合には、ライトデータを接続先コントローラの有するメモリに転送して記憶させた後、接続元コントローラの有するメモリに記憶されたライトデータを消去させる。
【００１７】
本発明の一態様では、各記憶制御装置は、コントローラ間通信経路によって互いに接続された第１コントローラ及び第２コントローラをそれぞれ備えており、第１コントローラと第２コントローラとは互いに相手をバックアップ可能となっている。
【００１８】
本発明の一態様では、装置間通信経路は複数ずつ設けられており、いずれか一方の装置間通信経路を利用できない場合には、他方の装置間通信経路が使用される。
【００１９】
本発明の一態様では、各コントローラは、自分の管理下にある記憶デバイスの負荷をそれぞれ監視しており、予め設定された閾値以上の負荷を有する高負荷記憶デバイスが検出された場合、装置間通信経路を介して接続された接続先コントローラに、高負荷記憶デバイスの管理を委ねる。
【００２０】
本発明の一態様では、装置間インターフェース部には、装置間通信経路に代えて、上位通信制御部とは別の上位通信制御部を接続可能である。
【００２１】
本発明の他の観点に従う記憶制御装置は、筐体と、筐体に設けられる第１コントローラ及び第２コントローラと、を備える記憶制御装置であって、第１コントローラ及び第２コントローラは、上位装置との間で通信を行うための上位通信制御部と、記憶デバイスとの間で通信を行うための下位通信制御部と、上位通信制御部及び下位通信制御部により利用されるメモリと、上位通信制御部及び下位通信制御部とメモリとの間のデータ転送を制御するデータ転送制御部と、コントローラの動作を制御するプロセッサと、をそれぞれ備え、かつ、データ転送制御部は、第１コントローラと第２コントローラとを接続するコントローラ間通信経路に接続するためのコントローラ間インターフェース部と、他の記憶制御装置内の対応するコントローラに接続される装置間通信経路に接続するための装置間インターフェース部と、を備えている。
【００２２】
本発明の各構成要素の少なくとも一部は、コンピュータプログラムによって実行可能な場合がある。そして、このコンピュータプログラムは、各種記録媒体に固定された状態で配布したり、あるいは、通信媒体を介して送信することができる。
【発明を実施するための最良の形態】
【００２３】
以下、図面に基づき、本発明の実施形態を説明する。本実施形態では、図１に示すように、例えば、互いに対等の関係に立つ複数の記憶制御装置１０，２０を装置間通信経路NPA，NPBを介して相互に連結し、ホスト１からのアクセス要求をいずれの記憶制御装置１０，２０が担当するのかを、記憶制御装置１０，２０側で判断する。これにより、ホスト１から記憶制御装置１０，２０へアクセスするためのパスを制御するソフトウェア等をホスト１に搭載することなく、比較的簡易な方法で、ストレージシステムの構成を拡張することができ、ホスト１の接続数を増加させることができる。
【実施例１】
【００２４】
図１は、本実施例に係るストレージシステムの全体構成を示す説明図である。このストレージシステムは、例えば、複数のホスト１にそれぞれ接続可能な複数の記憶制御装置１０，２０を備えている。以下の説明では、各記憶制御装置１０，２０が同種類の記憶制御装置である場合を例に挙げて説明する。しかし、これに限らず、各記憶制御装置１０，２０の種類が異なってもよい。また、別の実施例で述べるように、３台以上の記憶制御装置からストレージシステムを構成することもできる。
【００２５】
以下の説明では、記憶制御装置１０を第１記憶制御装置１０または一方の記憶制御装置１０と、記憶制御装置２０を第２記憶制御装置２０または他方の記憶制御装置２０と、それぞれ呼ぶ場合がある。
【００２６】
ホスト１は、例えば、パーソナルコンピュータ、サーバコンピュータ、メインフレーム、エンジニアリングワークステーション等のようなコンピュータ装置である。ホスト１は、例えば、SAN（Storage Area Network）やLAN（Local Area Network）等のような通信経路CNを介して、記憶制御装置１０，２０に接続されている。
【００２７】
各ホスト１のうちいずれか一つまたは複数のホスト１に、記憶制御装置１０，２０の構成等を管理するためのストレージ管理ソフトウェアを設けることもできる。この場合、ストレージシステムのユーザは、ホスト１上のストレージ管理ソフトウェアを用いて、論理ボリューム１３０の生成やアクセスパスの設定等を行うことができる。なお、ホスト１とは別の管理用コンピュータ装置を用いて、記憶制御装置１０，２０の構成等を管理する構成でもよい。
【００２８】
記憶制御装置１０は、例えば、筐体内に収容された第１コントローラ１００Ａ及び第２コントローラ１００Ｂと、各コントローラ１００Ａ，１００Ｂに通信経路１４０Ａ，１４０Ｂを介して接続された論理ボリューム１３０とを備えて構成される。記憶制御装置１０は、制御機能（コントローラ１００Ａ，１００Ｂ）及び記憶機能（１３０）の両方を備えている基本的な装置であり、基本筐体と呼ぶこともできる。
【００２９】
記憶制御装置１０の記憶容量を増加させる場合は、記憶制御装置１０に拡張筐体１１が接続される。拡張筐体１１は、論理ボリューム１３０のみを備えており、制御機能を備えない。拡張筐体１１内の論理ボリューム１３０は、コントローラ１００Ａ，１００Ｂによって管理される。なお、本実施例では記憶制御装置１０内に２個のコントローラ１００Ａ，１００Ｂを設ける場合を例示するが、これに限らず、１台または３台以上のコントローラを設ける構成でもよい。
【００３０】
記憶制御装置１０は、上述のように、複数のコントローラ１００Ａ，１００Ｂを備えている。ここで、図中では、第１コントローラ１００Ａの属する系統を「Ａ系統」とし、第２コントローラ１００Ｂの属する系統を「Ｂ系統」として表示する。図中の表示要素に付されている符号「１Ａ」は、第１記憶制御装置１０内のＡ系統に属する要素であることを、符号「１Ｂ」は、第１記憶制御装置１０内のＢ系統に属する要素であることを、それぞれ示している。第２記憶制御装置２０についても同様であり、符号「２Ａ」は、第２記憶制御装置２０内のＡ系統に属する要素であることを、符号「２Ｂ」は、第２記憶制御装置２０内のＢ系統に属する要素であることを、それぞれ示している。
【００３１】
上述の通り、各コントローラ１００Ａ，１００Ｂには、通信経路CNを介して、それぞれホスト１が接続されている。図中では、説明の便宜上、各コントローラ１００Ａ，１００Ｂにそれぞれ一つずつのホスト１を接続している。しかし、実際には、各コントローラ１００Ａ，１００Ｂにそれぞれ複数ずつのホスト１を接続することができる。コントローラ１００Ａ，１００Ｂに接続可能なホスト１の数は、各コントローラ１００Ａ，１００Ｂの有する通信ポート（図３中のホスト側プロトコルチップ１０１）の数により定まる。
【００３２】
各コントローラ１００Ａ，１００Ｂは、例えば、ファイバチャネル等の通信経路１４０Ａ，１４０Ｂを介して、各論理ボリューム１３０にそれぞれ接続されている。即ち、第１コントローラ１００Ａは、一方の通信経路１４０Ａを介して、各論理ボリューム１３０にそれぞれ接続されている。第２コントローラ１００Ｂは、他方の通信経路１４０Ｂを介して、各論理ボリューム１３０にそれぞれ接続されている。また、第１コントローラ１００Ａは、交代経路１４１Ａを介して、他方の通信経路１４０Ｂにも接続されており、これと同様に、第２コントローラ１００Ｂは、交代経路１４１Ｂを介して、一方の通信経路１４０Ａに接続されている。
【００３３】
第１コントローラ１００Ａは、通常の場合、通信経路１４０Ａを介して、論理ボリューム１３０にアクセスする。通信経路１４０Ａに障害が発生した場合、コントローラ１００Ａは、交代経路１４１Ａ及び通信経路１４０Ｂを介して、論理ボリューム１３０にアクセス可能である。同様に、第２コントローラ１００Ｂは、通常の場合、通信経路１４０Ｂを介して、論理ボリューム１３０にアクセスする。通信経路１４０Ｂに障害が発生した場合、コントローラ１００Ｂは、交代経路１４１Ｂ及び通信経路１４０Ａを介して、論理ボリューム１３０にアクセス可能である。
【００３４】
もっとも、本実施例では、後述のように、各コントローラ１００Ａ，１００Ｂ間を接続するためのコントローラ間通信経路Ｐ１と、一方の記憶制御装置１０内のコントローラ１００Ａ，１００Ｂと他方の記憶制御装置２０内のコントローラ２００Ａ，２００Ｂとを接続するためのノード間通信経路NPA，NPBとを備えている。
【００３５】
従って、例えば、コントローラ１００Ａは、通信経路Ｐ１を介して、コントローラ１００Ｂにコマンド及びデータを渡すことにより、論理ボリューム１３０へのアクセスをコントローラ１００Ｂに行わせることもできる。また、コントローラ１００Ａは、装置間通信経路NPAを介して、他方の記憶制御装置２０内のコントローラ２００Ａにコマンド及びデータを渡すことにより、論理ボリューム２３０へのアクセスをコントローラ２００Ａに行わせることもできる。
【００３６】
同様に、コントローラ１００Ｂは、通信経路Ｐ１を介してコントローラ１００Ａにコマンド及びデータを渡すことにより、コントローラ１００Ａに論理ボリューム１３０へのアクセスを行わせることができる。また、コントローラ１００Ｂは、装置間通信経路NPBを介して、コントローラ２００Ｂにコマンド及びデータを渡すことにより、論理ボリューム２３０へのアクセスをコントローラ２００Ｂに行わせることもできる。
【００３７】
さらに、後述のように、場合によっては、コントローラ間通信経路Ｐ１，Ｐ２と装置間通信経路NPA,NPBを適宜組み合わせて用いることもできる。例えば、コントローラ１００Ａは、通信経路Ｐ１とコントローラ１００Ｂ及び装置間通信経路NPBを介して、コントローラ２００Ｂにコマンド及びデータを転送することもできる。装置間通信経路NPA，NPBは、ノード間通信経路と呼ぶこともできる。
【００３８】
コントローラ間通信経路Ｐ１，Ｐ２と装置間通信経路NPA，NPBとは、例えば、PCI（Peripheral Component Interconnect）Expressのようなシリアルインターフェースとして、それぞれ構成可能である。これにより、ホスト側プロトコルチップの備えるコマンド転送機能を有効に利用することができ、転送時のオーバーヘッドを低減することができる。
【００３９】
このように、本実施例では、コントローラ１００Ａが、コントローラ１００Ａの管理下にある論理ボリューム１３０にアクセスする場合は、通信経路１４０Ａ、または、交代経路１４１Ａ及び通信経路１４０Ｂのいずれかを使用する。即ち、コントローラ１００Ａは、コントローラ１００Ａが処理すべきコマンドをホスト１から受信した場合、通信経路１４０Ａや交代経路１４１Ａを用いて、目的の論理ボリューム１３０にアクセスする。
【００４０】
これに対し、コントローラ１００Ａは、他のコントローラ（１００Ｂ，２００Ａ，２００Ｂ）の管理下にある論理ボリュームに関するコマンドを受信した場合、このコマンドを、そのコマンドを処理すべきコントローラ（担当コントローラ）に転送する。これにより、そのコマンドを処理すべき担当コントローラによって、そのコマンドを処理させるようになっている。以上、コントローラ１００Ａを例に挙げて説明したが、コントローラ１００Ｂ，２００Ａ，２００Ｂについても同様である。
【００４１】
第２記憶制御装置２０は、本実施例では、第１記憶制御装置１０と同様の構成を備えている。即ち、第２記憶制御装置２０は、第１記憶制御装置１０の筐体とは別の筐体内に収容された第１コントローラ２００Ａ及び第２コントローラ２００Ｂと、各コントローラ２００Ａ，２００Ｂに通信経路２４０Ａ，２４０Ｂを介して接続された論理ボリューム２３０とを備えて構成される。第２記憶制御装置２０には、論理ボリューム２３０を備えた拡張筐体２１を接続することができる。なお、第１記憶制御装置１０により管理される論理ボリューム１３０の総数と、第２記憶制御装置２０により管理される論理ボリューム２３０の総数とは、それぞれ異なっていてもよい。ユーザは、必要に応じて、拡張筐体１１，２１を適宜増設することができる。
【００４２】
図２を参照して、論理ボリューム１３０，２３０を説明する。以下、論理ボリューム１３０を中心に説明する。論理ボリューム１３０（２３０）は、一つまたは複数の記憶ドライブ１１０（２１０）の有する物理的な記憶領域上に設けられる論理的な記憶デバイスである。
【００４３】
図２（ａ）に示すように、複数の記憶ドライブ１１０（２１０）がそれぞれ有する物理的な記憶領域をRAIDグループ（パリティグループ）１２０（２２０）としてグループ化することができる。そして、このRAIDグループ１２０（２２０）に、複数の論理ボリューム１３０（２３０）を設定することができる。図２（ｂ）に示すように、一つの記憶ドライブ１１０（２１０）に一つまたは複数の論理ボリューム１３０（２３０）を設けることもできる。
【００４４】
記憶ドライブ１１０（２１０）としては、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス、磁気テープデバイス、フレキシブルディスクデバイス等のデータを読み書き可能な種々のデバイスを利用することができる。ハードディスクデバイスを用いる場合、例えば、FC（Fibre Channel）ディスク、SCSI（Small Computer System Interface）ディスク、SATAディスク、ATA（AT Attachment）ディスク、SAS（Serial Attached SCSI）ディスク等を利用可能である。半導体メモリデバイスを用いる場合、例えば、フラッシュメモリ、FeRAM（Ferroelectric Random Access Memory）、MRAM（Magnetoresistive Random Access Memory）、相変化メモリ（Ovonic Unified Memory）、RRAM（Resistance RAM）」等の種々のメモリデバイスを利用可能である。
【００４５】
なお、異なる種類の記憶ドライブを混在させてもよい。例えば、第１記憶制御装置１０の管理下にある記憶ドライブ１１０を第１種類の記憶ドライブから構成し、第２記憶制御装置２０の管理下にある記憶ドライブ２１０を第２種類の記憶ドライブから構成することができる。または、基本筐体１０，２０内の記憶ドライブ（例えば、半導体メモリ）と拡張筐体１１，２１内の記憶ドライブ（例えば、ハードディスク）との種類を変えることもできる。さらに、基本筐体１０，２０または拡張筐体１１，２１の少なくともいずれか一方において、異なる種類の記憶ドライブを混在させる構成でもよい。
【００４６】
図３を参照して、各コントローラ１００Ａ，１００Ｂ，２００Ａ，２００Ｂの構成を説明する。本実施例では、各コントローラ１００Ａ，１００Ｂ，２００Ａ，２００Ｂは、それぞれ同一の構成を備えているため、コントローラ１００Ａを中心に説明する。なお、以下の説明では、特に区別する必要が無い場合、コントローラ１００Ａ，１００Ｂをコントローラ１００と、コントローラ２００Ａ，２００Ｂをコントローラ２００と略称することがある。
【００４７】
コントローラ１００Ａは、例えば、ホスト側プロトコルチップ１０１と、ドライブ側プロトコルチップ１０２と、データ転送制御回路１０３と、キャッシュメモリ１０４と、プロセッサ（図中「MPU」）１０５と、メモリ１０６とを備えて構成される。
【００４８】
ホスト側プロトコルチップ１０１は、ホスト１の有するインターフェースと通信経路CNを介して接続されており、ホスト１との間の通信を担当する。後述のように、ホスト側プロトコルチップ１０１は、ホスト１から受信したコマンドを解析し、そのコマンドを処理すべきコントローラ（プロセッサ）に、コマンドを転送する機能を備えている。この機能を、例えば、コマンド転送機能、コマンド分配機能、コマンド振り分け機能等と呼ぶこともできる。
【００４９】
ドライブ側プロトコルチップ１０２は、通信経路１４０Ａを介して、各記憶ドライブ１１０にそれぞれ接続されており、記憶ドライブ１１０との間の通信を担当する。データ転送制御回路１０３については、後述する。
【００５０】
キャッシュメモリ１０４は、ホスト１から受信されたライトデータや、論理ボリューム１３０から読み出されたリードデータ等を記憶する。キャッシュメモリ１０４に、後述するテーブルＴ１〜Ｔ４のような制御情報や管理情報を記憶させることもできる。また、本実施例では、後述のように、同一筐体内に存在するコントローラ間で、あるいは別々の筐体に存在するコントローラ間で、キャッシュメモリ１０４に記憶されているデータを多重管理することができるようになっている。なお、キャッシュメモリ１０４を揮発性メモリから構成する場合、バッテリ電源や電池によって、キャッシュメモリ１０４の記憶内容を保持する。
【００５１】
プロセッサ１０５は、コントローラ１００Ａの全体動作を制御する。プロセッサ１０５は、メモリ１０６に記憶されたプログラムを読み込んで実行することにより、例えば、ホスト１から発行されたアクセス要求等を処理する。
【００５２】
データ転送制御回路１０３は、例えば、ホストDMA（Direct Memory Access）回路１０３Ａと、ドライブDMA回路１０３Ｂと、キャッシュ側データ転送回路１０３Ｃと、プロセッサ側データ転送回路１０３Ｄと、コントローラ間通信回路１０３Ｅと、装置間通信回路１０３Ｆとを備えて構成することができる。
【００５３】
ホストDMA回路１０３Ａは、ホスト側プロトコルチップ１０１とキャッシュメモリ１０４との間のデータ転送（DMA転送）を行う。ドライブDMA回路１０３Ｂは、ドライブ側プロトコルチップ１０２とキャッシュメモリ１０４との間のデータ転送（DMA転送）を行う。
【００５４】
キャッシュ側データ転送回路１０３Ｃは、キャッシュメモリ１０４へのデータ入出力を担当する。この回路１０３Ｃは、例えば、所定サイズのデータ毎にチェックコードを算出して付加したり、既に付加されたチェックコードの検査を行うこともできる。プロセッサ側データ転送回路１０３Ｄは、プロセッサ１０５からのデータ入出力を担当する。
【００５５】
コントローラ間通信回路１０３Ｅは、コントローラ間通信経路Ｐ１を介して、同一筐体内に設けられている他のコントローラ１００Ｂとの間の通信を行う。装置間通信回路１０３Ｆは、装置間通信経路NPAを介して、他の筐体内のコントローラ２００Ａとの間の通信を行う。本実施例では、第１記憶制御装置１０内のコントローラ１００Ａと第２記憶制御装置２０内のコントローラ２００Ａとが対応し、第１記憶制御装置１０内のコントローラ１００Ｂと第２記憶制御装置２０内のコントローラ２００Ｂとが対応している。装置間通信経路NPA，NPBは、別々の筐体（記憶制御装置）に属している対応するコントローラ間を接続するための通信経路である。
【００５６】
第１記憶制御装置１０内のコントローラ１００Ｂは、コントローラ１００Ａと同様に構成されているので、説明を省略する。第２記憶制御装置２０のコントローラ２００Ａも、コントローラ１００Ａと同様に構成されている。即ち、コントローラ２００Ａは、例えば、ホスト側プロトコルチップ２０１と、ドライブ側プロトコルチップ２０２と、データ転送制御回路２０３と、キャッシュメモリ２０４と、プロセッサ２０５と、メモリ２０６とを備えて構成される。
【００５７】
データ転送制御回路２０３は、例えば、ホストDMA回路２０３Ａと、ドライブDMA回路２０３Ｂと、キャッシュ側データ転送回路２０３Ｃと、プロセッサ側データ転送回路２０３Ｄと、コントローラ間通信回路２０３Ｅと、装置間通信回路２０３Ｆとを備えて構成することができる。
【００５８】
コントローラ間通信回路２０３Ｅは、コントローラ間通信経路Ｐ２を介して、コントローラ２００Ｂ内のコントローラ間通信回路に接続されている。装置間通信回路２０３Ｆは、装置間通信経路NPAを介して、コントローラ１００Ａの装置間通信回路１０３Ｆに接続されている。第２記憶制御装置２０内のコントローラ２００Ｂは、コントローラ２００Ａと同様の構成であるため、説明を省略する。
【００５９】
図４〜図７を参照して、記憶制御装置１０，２０を制御するためのテーブル構造を説明する。以下に説明する各テーブルＴ１〜Ｔ４は、例えば、キャッシュメモリ１０４，２０４に記憶させることができる。
【００６０】
図４は、各記憶制御装置１０，２０の筐体を管理するための管理テーブルＴ１の構成例を示す。この筐体管理テーブルＴ１は、例えば、各基本筐体をそれぞれ管理するための基本筐体管理テーブルＴ１１，Ｔ１２，...Ｔ１２Ｍを含んで構成される。
【００６１】
各基本筐体テーブルＴ１１等は、例えば、筐体識別番号と、基本筐体番号及び拡張筐体番号を対応付けることにより構成される。筐体識別番号とは、ストレージシステム内において各筐体を一意に特定するための情報である。例えば、各筐体にディップスイッチやロータリースイッチ等を設けておけば、このスイッチを用いて各筐体毎に筐体識別番号を設定することができる。
【００６２】
基本筐体番号とは、その筐体の属する基本筐体を特定するための情報である。例えば、第１記憶制御装置１０に属する筐体には基本筐体番号として「１」が設定され、第２記憶制御装置２０に属する筐体には基本筐体番号として「２」が設定される。拡張筐体番号とは、同一の基本筐体に連結された拡張筐体を識別するための情報である。図４に示すような筐体管理テーブルＴ１を用いることにより、ストレージシステム内の各筐体をそれぞれ識別して、管理することができる。
【００６３】
図５は、ドライブ１１０，２１０を管理するためのテーブルＴ２の一例を示す。このドライブ管理テーブルＴ２は、例えば、RAIDグループ番号と、RAIDレベルと、筐体識別番号と、ドライブ番号リストとを対応付けて構成される。
【００６４】
RAIDグループ番号とは、ストレージシステム内に設けられている各RAIDグループ１２０，２２０を、ストレージシステム内で一意に特定するための情報である。RAIDレベルとは、そのRAIDグループのRAID構成を示す情報である。筐体識別番号とは、そのRAIDグループが設けられている筐体を識別するための情報である。ドライブ番号リストとは、そのRAIDグループを構成する記憶ドライブ１１０，２１０を示す情報である。このようなテーブルＴ２を用いることにより、ストレージシステム内の各RAIDグループ１２０，２２０が、どの筐体に設けられており、どの記憶ドライブ１１０，２１０から構成されているのか等を管理することができる。
【００６５】
図６は、ストレージシステム内の各コントローラ１００Ａ，１００Ｂ，２００Ａ，２００Ｂを管理するためのテーブルＴ３の一例を示す。このコントローラ管理テーブルＴ３は、例えば、コントローラ識別番号と、基本筐体番号と、コントローラ種別とを対応付けることにより構成される。
【００６６】
コントローラ識別番号とは、各コントローラ１００Ａ，１００Ｂ等をストレージシステム内で一意に識別するための情報である。基本筐体番号は、そのコントローラが設けられている基本筐体を特定するための情報である。コントローラ種別とは、そのコントローラの属する制御系統（本実施例では、Ａ系統かＢ系統化の区別）を示す情報である。このようなテーブルＴ３を用いることにより、コントローラがいずれの基本筐体に設けられており、いずれの制御系統に属するのかを管理することができる。
【００６７】
図７は、ストレージシステム内の各論理ボリューム１３０，２３０を管理するためのテーブルＴ４の一例を示す。このボリューム管理テーブルＴ４は、例えば、論理ボリューム番号（図中「LU番号」）と、コントローラ識別番号と、RAIDグループ番号と、RAIDグループ開始位置と、記憶容量とを対応付けることにより構成される。論理ボリューム番号とは、ストレージシステム内において各論理ボリューム１３０，２３０を一意に特定するための情報である。コントローラ識別番号とは、その論理ボリュームへのデータ入出力を担当しているコントローラを特定するための情報である。RAIDグループ番号とは、その論理ボリュームが設けられているRAIDグループを特定するための情報である。RAIDグループ開始位置とは、RAIDグループ内において、その論理ボリュームが開始される位置を示すアドレス情報である。即ち、RAIDグループ開始位置は、RAIDグループ内における論理ボリュームの先頭アドレスを意味する。記憶容量とは、その論理ボリュームの記憶容量を示す情報である。
【００６８】
なお、図７では、ボリューム管理テーブルＴ４の基本構造を示している。実際には、書込みモードの設定内容等を管理するための情報もテーブルＴ４に含まれる。書込みモードの設定内容等まで管理可能なボリューム管理テーブルＴ４Ａについては、図を改めて後述する。
【００６９】
図８〜図１１に基づいて、本実施例によるストレージシステムの動作を述べる。図８は、ホスト１を介さずに、ホスト１から受信したコマンドやデータを記憶制御装置１０，２０間で転送する様子を示す説明図である。
【００７０】
図８では、説明の便宜上、構成の一部や符号を省略して示す。ホスト１から発行されたライトコマンドをコントローラ１００Ａが受信し、コントローラ１００Ａからコントローラ２００Ａにライトコマンドを転送する様子を説明する。
【００７１】
ホスト１から発行されたライトコマンドは、コントローラ１００Ａのホスト側プロトコルチップ１０１によって受信される。ライトコマンド及びライトデータは、ホストDMA回路１０３Ａ及びキャッシュ側データ転送回路１０３Ｃを介して、コントローラ１００Ａ内のキャッシュメモリ１０４に記憶される。
【００７２】
また、キャッシュメモリ１０４に記憶されたライトデータは、キャッシュ側データ転送回路１０３Ｃから装置間通信回路１０３Ｆに転送され、装置間通信経路NPAを介して、対応するコントローラ２００Ａ内に転送される。
【００７３】
コントローラ２００Ａは、装置間通信経路NPAを介してコントローラ１００Ａに接続されている。コントローラ１００Ａからコントローラ２００Ａを見た場合、コントローラ１００Ａが接続元コントローラ（または転送元コントローラ）となり、コントローラ２００Ａが接続先コントローラ（または転送先コントローラ）となる。
【００７４】
コントローラ２００Ａ内の装置間通信回路２０３Ｆは、コントローラ１００Ａから送信されたライトデータを受信する。このライトデータは、回路２０３Ｆから回路２０３Ｃを介して、コントローラ２００Ａ内のキャッシュメモリ２０４に記憶される。このように、本実施例では、装置間通信経路NPAを介して、コントローラ１００Ａ，２００Ａ間で、コマンドやデータを転送することができるようになっている。なお、コントローラ１００Ｂ，２００Ｂ間においても、装置間通信経路NPBを介して、コマンドやデータを転送可能となっている。
【００７５】
図９は、第１記憶制御装置１０内の各コントローラ１００Ａ，１００Ｂが備えるキャッシュメモリ１０４，１０４と、第２記憶制御装置２０内の各コントローラ２００Ａ，２００Ｂが備えるキャッシュメモリ２０４，２０４との関係を模式的に示す。
【００７６】
本実施例では、ホスト１から受信したライトデータを、合計４個のキャッシュメモリ１０４，２０４にそれぞれ書き込む。この書込みモードは、例えば、第１書込みモード、または、４重書きモード、あるいは、装置間多重書込みモードと呼ぶことができる。
【００７７】
図９において、例えば、ホスト１から、第１記憶制御装置１０の管理下にあるＡ系統の論理ボリューム１３０に向けて、ライトコマンドが発行されたものとする。このライトコマンドをコントローラ１００Ａが受信すると、コントローラ１００Ａは、ライトデータをコントローラ１００Ａ内のキャッシュメモリ１０４に記憶させる。
【００７８】
コントローラ１００Ａは、キャッシュメモリ１０４に記憶させたライトデータを、コントローラ間通信経路Ｐ１を介してコントローラ１００Ｂに転送する。コントローラ１００Ｂは、コントローラ１００Ａから受信したライトデータを、コントローラ１００Ｂ内のキャッシュメモリ１０４に記憶させる。
【００７９】
さらに、コントローラ１００Ａは、キャッシュメモリ１０４に記憶させたライトデータを、装置間通信経路NPAを介して、別の記憶制御装置２０内のコントローラ２００Ａに向けて転送する。コントローラ２００Ａは、コントローラ１００Ａから受信したライトデータを、コントローラ２００Ａ内のキャッシュメモリ２０４に記憶させる。また、コントローラ２００Ａは、キャッシュメモリ２０４に記憶させたライトデータを、コントローラ間通信経路Ｐ２を介してコントローラ２００Ｂに転送する。コントローラ２００Ｂは、コントローラ２００Ａから受信したライトデータを、コントローラ２００Ｂ内のキャッシュメモリ２０４に記憶させる。このように、本実施例では、ホスト１から受信したライトデータを４個のキャッシュメモリ１０４，２０４でそれぞれ保持する。
【００８０】
図１０は、上述のライト処理を示すフローチャートである。なお、以下に述べる各フローチャートは、本発明の理解及び実施に必要な範囲内で処理の概要を示しており、実際のプログラムと相違する場合がある。以下の説明では、ステップを「Ｓ」と略記する。また、以下に述べる各処理は、各コントローラ１００Ａ，１００Ｂ，２００Ａ，２００Ｂによってそれぞれ実行することができるが、理解を容易にするために、コントローラ１００Ａを動作の主体とする場合を中心に説明する。
【００８１】
コントローラ１００Ａは、ホスト１からライトコマンドを受信すると（Ｓ１１）、ホスト１から受信したライトデータにチェックコードを付加する（Ｓ１２）。ここで、チェックコードとは、ライトデータの内容を保証するための情報である。例えば、５１２バイトのライトデータ毎にそれぞれ８バイトのチェックコードが生成され、ライトデータに付加される。
【００８２】
コントローラ１００Ａは、自分の存在する筐体内（この場合は、第１記憶制御装置１０内）において、ライトデータを多重管理させる（Ｓ１３）。即ち、コントローラ１００Ａは、コントローラ間通信経路Ｐ１を介して、同一基本筐体（記憶制御装置１０）に属する他のコントローラ１００Ｂにライトデータを転送し、コントローラ１００Ｂ内のキャッシュメモリ１０４にライトデータを記憶させる。
【００８３】
また、コントローラ１００Ａは、装置間通信経路NPAを介して、他の基本筐体（記憶制御装置２０）に設けられているコントローラ２００Ａにライトデータを転送し、他の基本筐体内においてもライトデータを多重管理させる（Ｓ１４）。即ち、コントローラ２００Ａは、コントローラ１００Ａから受信したライトデータをコントローラ２００Ａ内のキャッシュメモリ２０４に記憶させると共に、コントローラ１００Ａから受信したライトデータを、コントローラ間通信経路Ｐ２を介してコントローラ２００Ｂに転送する。これにより、コントローラ２００Ｂは、コントローラ２００Ａから受信したライトデータを、コントローラ２００Ｂ内のキャッシュメモリ２０４に記憶させる。
【００８４】
このようにして、それぞれ異なる筐体で同一のライトデータを多重管理させた後、コントローラ１００Ａは、ライトコマンドで指定された書込み先の論理ボリューム１３０がコントローラ１００Ａの管理下にあるか否かを判定する（Ｓ１５）。
【００８５】
コントローラ１００Ａの管理下にある論理ボリューム１３０についてのライトコマンドである場合（S15:YES）、コントローラ１００Ａは、所定の記憶ドライブ１１０にライトデータを書き込む（Ｓ１６）。所定の記憶ドライブ１１０とは、書込み先の論理ボリューム１３０を構成する記憶ドライブである。
【００８６】
コントローラ１００Ａは、記憶ドライブ１１０にライトデータを書き込む際に、チェックコードを改めて算出し、この算出されたチェックコードとＳ１２で付加されたチェックコードとを比較する（Ｓ１７）。コントローラ１００Ａは、両チェックコードが一致するか否かを判定する（Ｓ１８）。
【００８７】
両チェックコードが一致する場合（S18:YES）、コントローラ１００Ａは、ホスト１にライトコマンドが正常に処理された旨を通知する（Ｓ１９）。これに対し、両チェックコードが不一致の場合（S18:NO）、コントローラ１００Ａは、ホスト１にライトコマンドの処理が異常終了した旨を通知する（Ｓ２０）。
【００８８】
このように、ライトデータを所定サイズに区切ってチェックコードをそれぞれ付加し、記憶ドライブ１１０に対してデータを読み書きする際に、チェックコードを検査することにより、データの読み書きが正常に行われたことを保証できる。従って、記憶制御装置１０，２０の信頼性を高めることができる。しかし、それほどの信頼性が必要とされていない場合等には、チェックコードの付加及び検査に関する構成を除いてもよい。
【００８９】
また、図１０では、コントローラ１００Ａは、記憶ドライブ１１０にライトデータを書き込んだ後で、ホスト１に書込み完了を報告する場合を述べた。しかし、これに限らず、ホスト１から受信したライトデータを、コントローラ１００Ａ，１００Ｂ内の各キャッシュメモリ１０４にそれぞれ記憶させた時点で、ホスト１に書込み完了を報告する構成としてもよい。即ち、記憶ドライブ１１０へライトデータを書き込む前に、ホスト１にライトコマンドの処理が完了した旨を通知することもできる。
【００９０】
なお、コントローラ１００Ｂ，２００Ａ，２００Ｂ内のキャッシュメモリ１０４，２０４，２０４にそれぞれ記憶されたライトデータは、適切なタイミングで消去することができる。例えば、キャッシュメモリの空き容量が所定値以下に低下した場合、他のコントローラが管理責任を負うライトデータについては、消去させることができる。例えば、コントローラ２００Ａは、コントローラ１００Ａの管理下にある論理ボリューム１３０へのライトデータを、所定の場合に、キャッシュメモリ２０４から消去可能である。
【００９１】
図１１は、リード処理を示すフローチャートである。コントローラ１００Ａは、ホスト１からリードコマンドを受信すると（Ｓ３１）、リードコマンドで要求されたデータを所定の記憶ドライブ１１０から読み出す（Ｓ３２）。即ち、コントローラ１００Ａは、リードコマンドで指定された論理アドレスに対応する記憶デバイス１１０の記憶領域から、リードコマンドで指定されたサイズのデータを読出す。このデータには、図１０中のＳ１２で算出されたチェックコードが付加されている。コントローラ１００Ａは、チェックコードを含めてデータを読み出す。
【００９２】
コントローラ１００Ａは、記憶ドライブ１１０から読み出されたデータについて、チェックコードを改めて算出し、この算出されたチェックコードと記憶ドライブ１１０から読み出されたデータに付加されているチェックコードとを比較する（Ｓ３３）。
【００９３】
両チェックコードが一致する場合（S33:YES）、コントローラ１００Ａは、記憶ドライブ１１０から読み出されたデータからチェックコードを削除する（Ｓ３４）。コントローラ１００Ａは、チェックコードの除去されたデータをホスト１に送信し、リードコマンドが正常に終了した旨を報告する（Ｓ３５）。
【００９４】
これに対し、両チェックコードが不一致の場合（S33:NO）、コントローラ１００Ａは、リードコマンドが異常終了した旨をホスト１に通知する（Ｓ３６）。なお、コマンドが異常終了した場合、例えば、ホスト１は、再びコマンドを発行することができる。
【００９５】
図１２は、第２の書込みモードが設定された場合の様子を示す説明図である。図１２には、担当外のコマンドをホスト１から受信した場合に、そのコマンドを担当するべきコントローラに転送させる様子が模式的に示されている。
【００９６】
例えば、コントローラ１００Ａが、コントローラ２００Ａの管理下にある論理ボリューム２３０に関するライトコマンドをホスト１から受信した場合、コントローラ１００Ａは、このライトコマンド及びライトデータを、担当コントローラであるコントローラ２００Ａに装置間通信経路NPAを介して転送する。
【００９７】
コントローラ２００Ａは、コントローラ１００Ａから受信したライトデータをコントローラ２００Ａ内のキャッシュメモリ２０４に記憶させる。また、コントローラ２００Ａは、同一筐体内の他のコントローラ２００Ｂにライトデータを転送し、コントローラ２００Ｂ内のキャッシュメモリ２０４にも記憶させる。
【００９８】
即ち、図１２に示すように、本実施例では、第２の書込みモードが設定された場合、コマンド受信元のコントローラ（この例では、コントローラ１００Ａ）は、受信したコマンドが対象とする論理ボリュームがコマンド受信元コントローラの設けられている基本筐体の管理下にあるか否かを判定する。そのコマンドの対象となる論理ボリュームがコマンド受信元コントローラの設けられている基本筐体の管理下に無い場合、受信元コントローラは、そのコマンドを処理すべきコントローラに、そのコマンドを転送する。そのコマンドを処理すべきコントローラとは、そのコマンドの処理対象となっている論理ボリュームを管理するコントローラであり、担当コントローラとも呼ぶ。
【００９９】
コマンド受信元コントローラ（図１２の例では、１００Ａ）と、担当コントローラ（図１２の例では、２００Ａ）とは、それぞれ別々の基本筐体に設けられており、両コントローラは装置間通信経路NPAを介して接続されている。従って、コマンドやデータの転送に着目すると、コマンド受信元コントローラは接続元コントローラとなり、担当コントローラは接続先コントローラとなる。コマンド受信元のコントローラは、ライトデータを担当コントローラに転送した後、コマンド受信元コントローラ内のキャッシュメモリに記憶されているライトデータを消去することができる。なお、上述の第２書込みモードは、例えば、２重書きモード、または、装置内多重書込みモードと呼ぶことができる。
【０１００】
図１３は、第２書込みモードによるライト処理を示すフローチャートである。理解のために、コントローラ１００Ａを動作の主体として述べる。コントローラ１００Ａは、ホスト１からライトコマンドを受信すると（Ｓ４１）、このライトデータにチェックコードを付加する（Ｓ４２）。
【０１０１】
コントローラ１００Ａは、ライトコマンドを受信した筐体内において、ホスト１から受信したライトデータを多重管理する（Ｓ４３）。即ち、コントローラ１００Ａは、ホスト１から受信したライトデータをコントローラ１００Ａ内のキャッシュメモリ１０４に記憶させると共に、このライトデータを同一筐体内の他のコントローラ１００Ｂに転送し、コントローラ１００Ｂ内のキャッシュメモリ１０４にも記憶させる。
【０１０２】
コントローラ１００Ａは、Ｓ４１で受信したライトコマンドの書込み先論理ボリュームが、コントローラ１００Ａの設けられている基本筐体の管理下にあるか否かを判定する（Ｓ４４）。
【０１０３】
ライトコマンドの書込み対象の論理ボリュームが別の基本筐体の管理下にある場合（S44:NO）、即ち、この例では、第２記憶制御装置２０の管理下にある論理ボリューム２３０に関するライトコマンドである場合、コントローラ１００Ａは、担当コントローラ２００Ａのキャッシュメモリ２０４に、ライトデータを転送する（Ｓ４５）。つまり、コントローラ１００Ａは、書込み対象の論理ボリューム２３０の記憶領域に対応するキャッシュメモリ２０４に、ライトデータを転送する。コントローラ２００Ａ内のデータ転送制御回路２０３は、コントローラ１００Ａから受信したライトデータについてチェックコードを生成する。
【０１０４】
ライトデータの転送元であるコントローラ１００Ａは、転送前のチェックコードと転送後のチェックコードとを比較し（Ｓ４６）、両チェックコードが一致するか否かを判定する（Ｓ４７）。両チェックコードが不一致の場合（S47:NO）、コントローラ１００Ａは、コントローラ２００Ａにライトデータを再送する（Ｓ４５）。
【０１０５】
両チェックコードが一致する場合（S47:YES）、コントローラ１００Ａは、削除モードが設定されているか否かを判定する（Ｓ４８）。削除モードとは、ライトデータ転送元のコントローラ１００Ａのキャッシュメモリ１０４に記憶されたライトデータを削除させるためのモードである。後述のように、書込みモードや削除モードは、ユーザが、各論理ボリューム１３０，２３０毎に個別に設定可能となっている。
【０１０６】
削除モードが設定されている場合（S48:YES）、コントローラ１００Ａは、コントローラ１００Ａ内のキャッシュメモリ１０４に記憶されているライトデータを、消去させる（Ｓ４９）。これにより、担当外の論理ボリュームに関するライトデータによって、キャッシュメモリが使用されるのを抑制することができる。
【０１０７】
Ｓ４１で受信したライトコマンドの書込み対象となっている論理ボリュームが、コマンド受信元であるコントローラ１００Ａの属する基本筐体の管理下にある場合（S44:YES）、コントローラ１００Ａは、ライトコマンドの書込み対象となっている論理ボリューム１３０が、コントローラ１００Ａの管理下にあるか否かを判定する（Ｓ５０）。
【０１０８】
コントローラ１００Ａの管理下にある論理ボリューム１３０に関するライトコマンドである場合（S50:YES）、コントローラ１００Ａは、所定の記憶ドライブ１１０にライトデータを書込み（Ｓ５１）、上述のようにチェックコードを比較する（Ｓ５２）。Ｓ４２で付加したチェックコードと記憶ドライブ１１０にライトデータを書き込む際に算出したチェックコードとが一致する場合（S53:YES）、コントローラ１００Ａは、ホスト１に書込みが正常に終了した旨を通知する（Ｓ５４）。前記各チェックコードが不一致の場合（S53:NO）、コントローラ１００Ａは、ホスト１にライトコマンドの処理が異常終了した旨を通知する（Ｓ５５）。
【０１０９】
一方、コントローラ１００Ｂの管理下にある論理ボリューム１３０に関するライトコマンドである場合（S50:NO）、コントローラ１００Ａは、ホスト１から受信したライトデータを、コントローラ間通信経路Ｐ１を介してコントローラ１００Ｂに転送し、コントローラ１００Ｂ内のキャッシュメモリ１０４に記憶させる（Ｓ５６）。
【０１１０】
図１４は、上述の第１書込みモード及び第２書込みモードを論理ボリューム毎に設定するための処理を示すフローチャートである。ユーザは、例えば、ホスト１に設けられたストレージ管理ソフトウェア等を介して、モード設定処理を行うためのユーザインターフェースを利用することができる。
【０１１１】
まず、ユーザは、論理ボリュームを選択し（Ｓ６１）、次に、選択した論理ボリュームに適用する書込みモードを選択する（Ｓ６２）。ユーザの選択した書込みモードが２重書きモードの場合、Ｓ６１で選択された論理ボリュームには２重書きモードが設定される（Ｓ６３）。ユーザの選択した書込みモードが４重書きモードの場合、Ｓ６１で選択された論理ボリュームには４重書きモードが設定される（Ｓ６４）。
【０１１２】
２重書きモードが選択された場合、ユーザは、削除モードをオンに設定するか否かを決定することができる（Ｓ６５）。ユーザが削除モードの利用を望む場合（S65:YES）、Ｓ６１で選択された論理ボリュームに削除モードが適用される（Ｓ６６）。ユーザによって選択された設定内容は、ボリューム管理テーブルＴ４Ａに登録される（Ｓ６７）。
【０１１３】
図１４に示すボリューム管理テーブルＴ４Ａは、図７に示すテーブルＴ４に比べて、書込みモードの種別を特定するための情報と、削除モードのオンオフを判別するための情報とが含まれている。従って、各コントローラは、このボリューム管理テーブルＴ４Ａを用いることにより、キャッシュメモリへのデータ転送等を制御することができる。
【０１１４】
このように構成される本実施例では、ホスト１から受信したコマンドの実行先（担当コントローラ）を、記憶制御装置１０，２０側で判別し、そのコマンドを処理すべきコントローラに転送することができる。これにより、複数の記憶制御装置１０，２０を連結した場合でも、ホスト１に経路切替ソフトウェア等のような特別なソフトウェアを設ける必要がなく、ホスト１に全く意識させずに、記憶制御装置１０，２０側で処理経路を切り替えることができる。従って、複数の記憶制御装置１０，２０を容易かつ低コストに連結して運用することができ、接続可能なホスト１の数を増加させて、使い勝手を高めることができる。
【０１１５】
本実施例では、複数種類の書込みモードをユーザが自由に選択可能であり、別々の筐体内のキャッシュメモリ１０４，２０４を用いて同一のライトデータを多重管理することができる。つまり、記憶制御装置１０，２０を結合させることにより、全体としての信頼性を高めることができる。
【０１１６】
本実施例では、論理ボリューム毎に書込みモードや削除モードを設定可能である。これにより、論理ボリューム単位で信頼性レベル等を適宜設定することができ、使い勝手が向上する。
【実施例２】
【０１１７】
図１５〜図１７に基づいて第２実施例を説明する。本実施例を含む以下の各実施例は、第１実施例の変形例である。従って、重複する説明を割愛し、各実施例に特徴的な部分を中心に述べる。
【０１１８】
図１５は、記憶制御装置１０，２０を連結された場合の障害回避方法（経路変更方法）を模式的に示す説明図である。図１５（ａ）は障害発生前の通常状態を示す。コントローラ１００Ａが、コントローラ２００Ａの管理下にある論理ボリューム２３０を書込み対象とするライトコマンドを受信した場合を例に挙げて説明する。
【０１１９】
図１５（ａ）に点線で示すように、通常時においては、コントローラ１００Ａは、装置間通信経路NPAを介して、担当コントローラであるコントローラ２００Ａ内のキャッシュメモリ２０４にライトデータを転送する。コントローラ２００Ａは、キャッシュメモリ２０４に書き込まれたライトデータを、通信経路２４０Ａを介して、書込み対象の論理ボリューム２３０に記憶させる。
【０１２０】
図１５（ｂ）は、装置間通信経路NPAに通信障害が生じた場合を示す。障害が発生した場合、図中に点線で示すように、コントローラ１００Ａは、同一基本筐体内の他のコントローラ１００Ｂを介して、担当コントローラであるコントローラ２００Ａにライトデータを転送し、コントローラ２００Ａ内のキャッシュメモリ２０４に記憶させる。即ち、コントローラ１００Ａ→コントローラ１００Ｂ→装置間通信経路NPB→コントローラ２００Ｂ→コントローラ２００Ａの経路を通って、ライトデータは転送される。
【０１２１】
図１６は、障害回避を行う場合の処理を示すフローチャートである。ここでは、コントローラ１００Ａが２重書きモードを行う場合を例に挙げて説明する。まず、コントローラ１００Ａは、ホスト１からライトコマンドを受信すると（Ｓ７１）、ライトデータにチェックコードを付加し（Ｓ７２）、次に、同一基本筐体内の各キャッシュメモリ１０４，１０４にそれぞれ保持させる（Ｓ７３）。
【０１２２】
コントローラ１００Ａは、書込み先の論理ボリュームがコントローラ１００Ａの設けられている基本筐体の管理下にあるか否かを判定する（Ｓ７４）。書込み先の論理ボリュームがコントローラ１００Ａの設けられている基本筐体の管理下に無い場合（S74:NO）、コントローラ１００Ａは、装置間通信経路NPAが正常か否かを判定する（Ｓ７５）。
【０１２３】
装置間通信経路NPAが正常である場合（S75:YES）、コントローラ１００Ａは、装置間通信経路NPAを介して、担当コントローラであるコントローラ２００Ａ内のキャッシュメモリ２０４にライトデータを転送する（Ｓ７６）。そして、コントローラ１００Ａは、転送前後のチェックコードを比較し（Ｓ７７）、両チェックコードが一致するか否かを判定する（Ｓ７８）。両チェックコードが不一致の場合（S78:NO）、Ｓ７６に戻る。両チェックコードが一致する場合（S78:YES）、コントローラ１００Ａは、書込み対象の論理ボリュームについて削除モードがオンに設定されているか否かを判定する（Ｓ７９）。削除モードがオンに設定されている場合（S79:YES）、コントローラ１００Ａは、コントローラ１００Ａ内のキャッシュメモリ１０４からライトデータを消去させる（Ｓ８０）。
【０１２４】
一方、接続元（転送元）のコントローラ１００Ａと接続先（転送先）のコントローラ２００Ａとを接続する装置間通信経路NPAに障害が発生している場合（S75:NO）、コントローラ１００Ａは、障害を迂回するための経路を探索する。
【０１２５】
コントローラ１００Ａは、同一基本筐体に設けられている他のコントローラ１００Ｂに接続するためのコントローラ間通信経路Ｐ１が正常か否かを判定する（Ｓ８１）。コントローラ間通信経路Ｐ１が正常な場合（S81:YES）、コントローラ１００Ａは、コントローラ１００Ｂのキャッシュメモリ１０４にライトデータを転送して記憶させる（Ｓ８２）。
【０１２６】
コントローラ１００Ａは、コントローラ１００Ｂとコントローラ２００Ｂとを接続する装置間通信経路NPBが正常であるか否かを判定する（Ｓ８３）。装置間通信経路NPBが正常な場合（S83:YES）、コントローラ１００Ａは、コントローラ１００Ｂのキャッシュメモリ１０４に記憶されたライトデータを、コントローラ２００Ａ内のキャッシュメモリ２０４に転送して記憶させる（Ｓ８４）。即ち、ライトデータは、装置間通信経路NPB→コントローラ２００Ｂ→コントローラ間通信経路Ｐ２→コントローラ２００Ａという経路を通って、コントローラ２００Ａ内のキャッシュメモリ２０４に記憶される。
【０１２７】
コントローラ１００Ａは、転送前後のチェックコードを検査し、チェックコードが一致する場合は、削除モードが設定されているか否かを確認し、削除モードが設定されている場合にはコントローラ１００Ａ及びコントローラ１００Ｂ内のキャッシュメモリ１０４，１０４に記憶されているライトデータを消去させる（Ｓ８５）。
【０１２８】
一方、コントローラ１００Ａ，１００Ｂ間の通信経路Ｐ１に障害が発生している場合（S81:NO）、または、コントローラ１００Ｂ，コントローラ２００Ｂ間の通信経路NPBに障害が発生している場合（S83:NO）には、担当コントローラであるコントローラ２００Ａにライトデータを転送することができない。そこで、コントローラ１００Ａは、ホスト１にライトコマンドを正常に終了できなかった旨を通知する（Ｓ８６）。
【０１２９】
図１７は、図１６に続くフローチャートである。図１６中のＳ７４で「NO」と判定された場合、つまり、書込み対象の論理ボリュームがコントローラ１００Ａの属する基本筐体の管理下にある場合、コントローラ１００Ａは、書込み対象の論理ボリュームがコントローラ１００Ａの管理下にあるか否かを判定する（Ｓ９１）。
【０１３０】
書込み対象の論理ボリュームがコントローラ１００Ａの管理下にある場合（S91:YES）、コントローラ１００Ａは、記憶ドライブ１１０にアクセスするための通信経路１４０Ａが正常であるか否かを判定する（Ｓ９２）。通信経路１４０Ａが正常に機能している場合（S92:YES）、コントローラ１００Ａは、所定の記憶ドライブ１１０にライトデータを書込む（Ｓ９３）。そして、コントローラ１００Ａは、コントローラ１００Ａ内のキャッシュメモリ１０４に記憶されているライトデータのチェックコードと記憶ドライブ１１０に書き込まれたライトデータのチェックコードとを比較し（Ｓ９４）、両チェックコードが一致するか否かを判定する（Ｓ９５）。
【０１３１】
両チェックコードが一致する場合（S95:YES）、コントローラ１００Ａは、ホスト１にライトコマンドが正常に終了した旨を報告する（Ｓ９６）。両チェックコードが不一致の場合（S95:NO）、コントローラ１００Ａは、ホスト１にライトコマンドの処理に失敗した旨を報告する（Ｓ９７）。
【０１３２】
記憶ドライブ１１０へアクセスするための通信経路１４０Ａに障害が発生している場合（S92:NO）、コントローラ１００Ａは、書込み対象の論理ボリュームを担当するコントローラをコントローラ１００Ａからコントローラ１００Ｂに変更し、Ｓ９９に移る。
【０１３３】
書込み対象の論理ボリュームがコントローラ１００Ａの管理下になく、同一基本筐体に属する他のコントローラ１００Ｂの管理下にある場合（S91:NO）、即ち、そのライトコマンドを処理すべき担当コントローラがコントローラ１００Ｂの場合、コントローラ１００Ａは、コントローラ間通信経路Ｐ１が正常であるか否かを判定する（Ｓ９９）。
【０１３４】
コントローラ間通信経路Ｐ１が正常である場合（S99:YES）、コントローラ１００Ａは、コントローラ１００Ｂ内のキャッシュメモリ１０４にライトデータを転送して記憶させる（Ｓ１００）。コントローラ間通信経路Ｐ１に障害が発生している場合（S99:NO）、迂回経路を発見することができないため、コントローラ１００Ａは、ホスト１にライトコマンドの異常終了を報告する（Ｓ１０１）。なお、Ｓ９９で「NO」と判定された場合であっても、装置間通信経路NPA，NPBが正常である場合には、コントローラ１００Ａ→NPA→コントローラ２００Ａ→Ｐ２→コントローラ２００Ｂ→NPB→コントローラ１００Ｂの経路を通って、コントローラ１００Ａからコントローラ１００Ｂ内のキャッシュメモリ１０４にライトデータを転送させることもできる。
【０１３５】
また、Ｓ９２で「NO」と判定された場合に、コントローラ１００Ａは、交代経路１４１Ａを利用して記憶ドライブ１１０にアクセスすることもできる。交代経路１４１Ａに障害が発生している場合、コントローラ１００Ａは、担当コントローラをコントローラ１００Ｂに変更すればよい。
【０１３６】
このように構成される本実施例も前記第１実施例と同様の効果を奏する。これに加えて、本実施例では、通信経路に障害が発生した場合に、各記憶制御装置１０，２０内の通信経路Ｐ１，Ｐ２及び各記憶制御装置１０，２０間の通信経路NPA，NPBを利用して、有効な迂回経路を自動的に探索する。これにより、記憶制御装置１０，２０を連結した場合の耐障害性を高めることができ、信頼性も向上する。
【実施例３】
【０１３７】
図１８〜図２０に基づいて第３実施例を説明する。本実施例では、記憶制御装置１０，２０内で負荷を分散させるようになっている。図１８は、モード設定処理を示すフローチャートである。図１８のフローチャートは、図１４中に示す各ステップに加えて、新規なステップＳ６８，Ｓ６９を備えている。
【０１３８】
ユーザは、Ｓ６１で選択した論理ボリュームについて、負荷分散モードをオンに設定するか否かを選択することができる（Ｓ６８）。ユーザが負荷分散モードの利用を希望する場合（S68:YES）、選択された論理ボリュームについて負荷分散モードがオンに設定される（Ｓ６９）。また、ユーザは、負荷分散モードを実行させるための閾値を適宜設定することもできる（Ｓ６９）。
【０１３９】
図１８中のボリューム管理テーブルＴ４Ｂに示すように、本実施例では、テーブルＴ４Ｂに負荷分散モードの設定状態を示す情報及び負荷分散モードで使用される閾値を示す情報が登録される。
【０１４０】
図１９は、各プロセッサ１０５，２０５の使用率（負荷）を監視するための処理を示すフローチャートである。各コントローラ１００，２００は、自分の管理下にある各論理ボリューム１３０，２３０毎に、プロセッサの使用率を監視する。以下、コントローラ１００Ａの場合を例に挙げて説明する。
【０１４１】
まず、コントローラ１００Ａは、最初の論理ボリューム１３０を選択し（Ｓ１１０）、この選択された論理ボリューム１３０に関して、プロセッサ１０５の使用率を取得する（Ｓ１１１）。例えば、選択された論理ボリューム１３０へのアクセス要求（ライトコマンドやリードコマンド）が多い場合、その論理ボリューム１３０に関するプロセッサ使用率は高くなる。
【０１４２】
コントローラ１００Ａは、取得したプロセッサ使用率を記憶する（Ｓ１１２）。コントローラ１００Ａは、未だ負荷を調査していない論理ボリューム１３０が存在するか否かを判定する（Ｓ１１３）。未調査の論理ボリューム１３０が存在する場合（S113:NO）、コントローラ１００Ａは、次の論理ボリューム１３０を選択し（Ｓ１１４）、その論理ボリューム１３０に関するプロセッサ使用率を取得して記憶する（Ｓ１１１，Ｓ１１２）。このようにして、コントローラ１００Ａは、自己の管理下にある各論理ボリューム１３０について、プロセッサ使用率を定期的にまたは不定期に調査し、監視する。
【０１４３】
図２０は、負荷分散処理を示すフローチャートである。コントローラ１００Ａが実行する場合を例に挙げて説明する。コントローラ１００Ａは、ホスト１からコマンドを受信すると、そのコマンドの処理対象である論理ボリューム１３０について負荷分散モードがオンに設定されているか否かを判定する（Ｓ１２０）。
【０１４４】
負荷分散モードがオンに設定されている場合（S120:YES）、コントローラ１００Ａは、図１９に示す処理で収集されたプロセッサ使用率を参照する（Ｓ１２１）。コントローラ１００Ａは、コマンドの処理対象である論理ボリューム１３０に関するプロセッサ使用率が閾値よりも低いか否かを判定する（Ｓ１２２）。
【０１４５】
プロセッサ使用率が閾値よりも低い場合（S122:YES）、高負荷状態が発生していないため、コントローラ１００Ａは、負荷分散を行うことなく本処理を正常に終了する。これに対し、プロセッサ使用率が閾値以上の場合（S122:NO）、コマンドの処理対象の論理ボリューム１３０について高負荷状態が発生している。そこで、コントローラ１００Ａは、その高負荷の論理ボリューム１３０について、担当コントローラを同一基本筐体内の他のコントローラ１００Ｂに一時的に変更させる（Ｓ１２３）。
【０１４６】
コントローラ１００Ａは、コントローラ間通信経路Ｐ１が正常であり（S124:YES）、かつ、一時的に変更された担当コントローラ１００Ｂから記憶ドライブ１１０へアクセスするための通信経路１４０Ｂが正常であり（S125:YES）、かつ、コントローラ１００Ｂのプロセッサ使用率が閾値よりも低い場合に（S126:YES）、高負荷の論理ボリューム１３０を担当するコントローラの変更を確定させる（Ｓ１２７）。
【０１４７】
これにより、高負荷の論理ボリューム１３０へのデータ読み書きを担当するコントローラは、同一の基本筐体内において、コントローラ１００Ａからコントローラ１００Ｂに変更される。そして、コントローラ１００Ａは、高負荷の論理ボリューム１３０について、コントローラ１００Ａ内のホスト側プロトコルチップ１０１の有するコマンド転送機能の設定を変更する（Ｓ１２８）。これ以後、高負荷の論理ボリューム１３０を対象とするコマンドを受信した場合、そのコマンドは、コントローラ１００Ａのホスト側プロトコルチップ１０１からコントローラ１００Ｂのデータ転送制御回路１０３に転送される。
【０１４８】
一方、通信経路Ｐ１に障害が発生している場合（S124:NO）、通信経路１４０Ｂに障害が発生している場合（S125:NO）、または、コントローラ１００Ｂのプロセッサ使用率が閾値以上の場合（S126:NO）、高負荷の論理ボリューム１３０を担当するコントローラとしてコントローラ１００Ｂを用いることはできない。
【０１４９】
そこで、コントローラ１００Ａは、別の基本筐体に属するコントローラ２００Ａを、高負荷の論理ボリューム１３０を担当するコントローラとして一時的に選択する（Ｓ１２９）。即ち、高負荷の論理ボリューム１３０へのデータ読み書きを担当するコントローラは、コントローラ１００Ａからコントローラ２００Ａに一時的に変更される。
【０１５０】
そして、コントローラ１００Ａは、装置間通信経路NPAが正常であり（S130:YES）、かつ、コントローラ２００Ａから記憶ドライブ２１０へアクセスするための通信経路２４０Ａが正常であり（S131:YES）、かつ、コントローラ２００Ａのプロセッサ使用率が閾値よりも低い場合（S132:YES）、高負荷の論理ボリューム１３０に関する担当コントローラを、コントローラ１００Ａからコントローラ２００Ａに正式に変更させる（Ｓ１３３）。
【０１５１】
装置間通信経路NPAに障害が発生しているか（S130:NO）、または、記憶ドライブ２１０へアクセスするための通信経路２４０Ａに障害が発生しているか（S131:NO）、または、コントローラ２００Ａのプロセッサ使用率が閾値以上である場合（S132:NO）、コントローラ１００Ａは、高負荷の論理ボリューム１３０を担当するコントローラを元のコントローラ（この場合、コントローラ１００Ａ）に戻す（Ｓ１３５）。
【０１５２】
このように構成される本実施例も前記第１実施例と同様の効果を奏する。これに加えて、本実施例では、互いに接続された記憶制御装置１０，２０において、高負荷の論理ボリュームを担当するプロセッサを自動的に変更することができる。これにより、記憶制御装置１０，２０のプロセッサを有効に利用することができ、応答性能が低下するのを抑制することができる。
【実施例４】
【０１５３】
図２１に基づいて第４実施例を説明する。前記各実施例では、２台の記憶制御装置１０，２０を接続する場合を例に挙げたが、図２１の構成説明図に示すように、３台以上の記憶制御装置１０，２０，３０を接続することもできる。
【０１５４】
図２１に示すストレージシステムでは、第１記憶制御装置１０、第２記憶制御装置２０及び第３記憶制御装置３０が互いに接続されている。各記憶制御装置１０，２０，３０の各コントローラ１００Ａ，１００Ｂ，２００Ａ，２００Ｂ，３００Ａ，３００Ｂは、それぞれ複数の装置間通信回路を備えている。そして、各コントローラは、複数の装置間通信回路及び装置間通信経路を介して、他の基本筐体内のコントローラとそれぞれ接続されている。
【０１５５】
図中の符号「NPA1-2」は、第１記憶制御装置１０内のＡ系統のコントローラ１００Ａと第２記憶制御装置２０内のＡ系統のコントローラ２００Ａとを接続する装置間通信経路であることを示す。同様に、「NPB2-3」は、第２記憶制御装置２０内のＢ系統のコントローラ２００Ｂと第３記憶制御装置３０内のＢ系統のコントローラ３００Ｂとを接続する装置間通信経路であることを示す。
【０１５６】
このように構成される本実施例も前記第１実施例と同様の効果を奏する。これに加えて、本実施例では３台以上の記憶制御装置１０，２０，３０を接続可能であるため、より多くのホスト１と接続可能である。
【実施例５】
【０１５７】
図２２に基づいて第５実施例を説明する。本実施例では、図２２の構成説明図に示すように、スイッチ４０Ａ，４０Ｂを用いることにより、３台以上の記憶制御装置１０，２０，３０を互いに接続している。
【０１５８】
各スイッチ４０Ａ，４０Ｂは、いずれかの基本筐体内に設けることができる。一方のスイッチ４０Ａは、Ａ系統に属する各コントローラ１００Ａ，２００Ａ，３００Ａを互いに接続する。他方のスイッチ４０Ｂは、Ｂ系統に属する各コントローラ１００Ｂ，２００Ｂ，３００Ｂを互いに接続する。このように、制御系統毎にスイッチを設けることにより、３台以上の記憶制御装置１０，２０，３０を連結してストレージシステムを構成することもできる。
【０１５９】
このように構成される本実施例も前記第１実施例と同様の効果を奏する。これに加えて、本実施例では、第１実施例に比べてホスト接続数を増加させることができる。また、本実施例では、スイッチ４０Ａ，４０Ｂを用いるため、前記第４実施例に比べて各コントローラの構成を簡素化することができる。
【実施例６】
【０１６０】
図２３に基づいて第６実施例を説明する。図２３は、本実施例による記憶制御装置１０のコントローラ１００Ａを示すブロック図である。本実施例では、装置間通信回路１０３Ｆに、ホスト側プロトコルチップ１０１を接続する。
【０１６１】
これにより、本実施例では、記憶制御装置１０を単独で運用する場合でも、ホスト接続数を増加させることができる。そして、ホスト接続数のさらなる増加をユーザが希望する場合、第１実施例で述べたように、記憶制御装置２０を追加し、記憶制御装置１０と記憶制御装置２０とを接続することも可能である。この場合は、コントローラ１００Ａ，１００Ｂを第１実施例で述べた構成を有するコントローラに交換すればよい。
【０１６２】
なお、本発明は、上述した各実施例に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。
【図面の簡単な説明】
【０１６３】
【図１】本発明の実施形態に係るストレージシステムの全体構成を示す説明図である。
【図２】記憶ドライブ、RAIDグループ及び論理ボリュームの関係を示す説明図である。
【図３】コントローラの構成を示すブロック図である。
【図４】筐体を管理するためのテーブルを示す説明図である。
【図５】記憶ドライブを管理するためのテーブルを示す説明図である。
【図６】コントローラを管理するためのテーブルを示す説明図である。
【図７】ボリュームを管理するためのテーブルを示す説明図である。
【図８】筐体を跨るコントローラ間でコマンド等を転送する様子を示す説明図である。
【図９】各コントローラの有するキャッシュメモリの記憶状態を示す説明図である。
【図１０】第１書込みモードによるライト処理を示すフローチャートである。
【図１１】リード処理を示すフローチャートである。
【図１２】第２書込みモードの場合の各キャッシュメモリの記憶状態を示す説明図である。
【図１３】第２書込みモードによるライト処理を示すフローチャートである。
【図１４】モード設定処理を示すフローチャートである。
【図１５】第２実施例に係るストレージシステムの構成を模式的に示す説明図であって、（ａ）は通信経路が正常な場合を、（ｂ）は異常の生じた通信経路を迂回する場合を、それぞれ示す。
【図１６】第２書込みモードによるライト処理を示すフローチャートである。
【図１７】図１６に続くフローチャートである。
【図１８】第３実施例に係るストレージシステムで使用されるモード設定処理を示すフローチャートである。
【図１９】プロセッサの使用率を監視する処理を示すフローチャートである。
【図２０】負荷分散処理を示すフローチャートである。
【図２１】第４実施例に係るストレージシステムの構成を模式的に示す説明図である。
【図２２】第５実施例に係るストレージシステムの構成を模式的に示す説明図である。
【図２３】第６実施例に係る記憶制御装置のコントローラのブロック図である。
【符号の説明】
【０１６４】
１…ホスト、１０，２０，３０…記憶制御装置、１１，２１…拡張筐体、４０Ａ，４０Ｂ…スイッチ、１００Ａ，１００Ｂ，２００Ａ，２００Ｂ，３００Ａ，３００Ｂ…コントローラ、１０１，２０１…ホスト側プロトコルチップ、１０２，２０２…ドライブ側プロトコルチップ、１０３，２０３…データ転送制御回路、１０３Ａ，２０３Ａ…ホストDMA回路、１０３Ｂ，２０３Ｂ…ドライブDMA回路、１０３Ｃ，２０３Ｃ…キャッシュ側データ転送回路、１０３Ｄ，２０３Ｄ…プロセッサ側データ転送回路、１０３Ｅ，２０３Ｅ…コントローラ間通信回路、１０３Ｆ，２０３Ｆ…装置間通信回路、１０４、２０４…キャッシュメモリ、１０５…プロセッサ、１０６…メモリ、１１０，２１０…記憶ドライブ、１２０，２２０…RAIDグループ、１３０，２３０…論理ボリューム、１４０Ａ，１４０Ｂ，２４０Ａ，２４０Ｂ…通信経路、１４１Ａ，１４１Ｂ，２４１Ａ，２４１Ｂ…交代経路、Ｐ１，Ｐ２…コントローラ間通信経路、NPA，NPB…装置間通信経路。
【図１】
2007328408.tif 000003
【図２】
2007328408.tif 000004
【図３】
2007328408.tif 000005
【図４】
2007328408.tif 000006
【図５】
2007328408.tif 000007
【図６】
2007328408.tif 000008
【図７】
2007328408.tif 000009
【図８】
2007328408.tif 000010
【図９】
2007328408.tif 000011
【図１０】
2007328408.tif 000012
【図１１】
2007328408.tif 000013
【図１２】
2007328408.tif 000014
【図１３】
2007328408.tif 000015
【図１４】
2007328408.tif 000016
【図１５】
2007328408.tif 000017
【図１６】
2007328408.tif 000018
【図１７】
2007328408.tif 000019
【図１８】
2007328408.tif 000020
【図１９】
2007328408.tif 000021
【図２０】
2007328408.tif 000022
【図２１】
2007328408.tif 000023
【図２２】
2007328408.tif 000024
【図２３】
2007328408.tif 000025