(57)【特許請求の範囲】
【請求項１】
ホスト装置に対してデータストレージサービスを提供するストレージシステムであって、
前記ホスト装置に接続可能に構成されたホストインターフェース部と、
データを格納するボリュームが形成されたディスクアレイ部に接続可能に構成されたディスクインターフェース部と、
前記ホストインターフェース部及び前記ディスクインターフェース部にそれぞれ接続され、前記ユーザデータをキャッシュするキャッシュメモリ部と、
前記ホストインターフェース部、前記ディスクインターフェース部、及びキャッシュメモリ部にそれぞれ接続されたスイッチＬＳＩと、
複数のプロセッサを有し、前記スイッチＬＳＩに接続された制御部と、を備え、
前記スイッチＬＳＩは、
前記制御部内の部位に障害が発生した場合に出力されるエラー信号に基づいて、前記制御部との間の入出力パスを遮断し、
前記制御部の各プロセッサは、
障害発生時に、前記各プロセッサが参照可能な不揮発性メモリ部に障害の内容を記録するとともに、エラー信号を前記スイッチＬＳＩに出力し、前記スイッチＬＳＩにより、前記スイッチＬＳＩと前記制御部との間の入出パスが遮断されたことを条件に、自己診断処理を実行し、
前記自己診断処理を実行した前記各プロセッサのうち正常と自己診断したプロセッサは、
前記不揮発性メモリ部を参照して障害発生部位を特定し、前記特定された障害部位のプロセッサを閉塞状態とし、前記閉塞状態になったプロセッサを用いることなく、自身が稼働できることを条件に、前記スイッチＬＳＩに対して前記遮断の解除を指示することを特徴とするストレージシステム。
【請求項２】
前記ストレージシステムは、前記ディスクアレイ部に形成された複数のボリュームのそれぞれに対するＩ／Ｏ処理を受け持つ複数の制御部を備え、
第１の制御部内の部位に障害が発生した場合に、第２の制御部が、前記第１の制御部が受け持つＩ／Ｏ処理を引き継ぐことを特徴とする請求項１記載のストレージシステム。
【請求項３】
前記第１の制御部は、障害処理を行った後、稼働が継続可能であるときには、前記前記第２の制御部から前記Ｉ／Ｏ処理を引き戻すことを特徴とする請求項２記載のストレージシステム。
【請求項４】
前記第２の制御部は、前記Ｉ／Ｏ処理を引き継いだ結果、自身の負荷が所定のしきい値よりも高いと判断する場合に、自身が受け持つＩ／Ｏ処理の一部を第３の制御部が引き継ぐように制御することを特徴とする請求項２記載のストレージシステム。
【請求項５】
前記キャッシュメモリ部は、前記複数の制御部のそれぞれが保持する制御データのバックアップデータを保持することを特徴とする請求項２記載のストレージシステム。
【請求項６】
ホスト装置に対してデータストレージサービスを提供するストレージシステムの制御方法であって、
複数のプロセッサを有する少なくとも一つの制御部が、前記各プロセッサの制御の下、前記データストレージサービスを遂行するステップと、
前記制御部内の部位に障害が発生した場合に出力されるエラー信号を、スイッチＬＳＩが検出するステップと、
前記スイッチＬＳＩが、前記検出された障害に基づいて、前記制御部との間の入出力パスを遮断するステップと、
前記制御部に属する各プロセッサが、障害発生時に、前記各プロセッサが参照可能な不揮発性メモリ部に障害の内容を記録するとともに、前記エラー信号を前記スイッチＬＳＩに出力するステップと、
前記制御部に属する各プロセッサが、前記スイッチＬＳＩにより、前記スイッチＬＳＩと前記制御部との間の入出パスが遮断されたことを条件に、自己診断処理を実行するステップと、
前記自己診断処理を実行した前記各プロセッサのうち正常と自己診断したプロセッサが、前記不揮発性メモリ部を参照して障害発生部位を特定するステップと、
前記正常と自己診断したプロセッサが、前記特定された障害部位のプロセッサを閉塞状態するステップと、
前記正常と自己診断したプロセッサが、前記閉塞状態になったプロセッサを用いることなく、自身が稼働できることを条件に、前記スイッチＬＳＩに対して、前記遮断の解除を指示するステップと、
を含むことを特徴とするストレージシステムの制御方法。
【請求項７】
第１の制御部内の部位に障害が発生した場合に、第２の制御部が、前記第１の制御部が受け持つＩ／Ｏ処理を引き継ぐステップ、をさらに含むことを特徴とする請求項６記載のストレージシステムの制御方法。
【請求項８】
前記第１の制御部が、障害処理を行った後、稼働が継続可能であるときには、前記前記第２の制御部から前記Ｉ／Ｏ処理を引き戻すステップ、をさらに含むことを特徴とする請求項７記載のストレージシステム。
【請求項９】
前記第２の制御部が、前記Ｉ／Ｏ処理を引き継いだ結果、自身の負荷が所定のしきい値よりも高いと判断する場合に、自身が受け持つＩ／Ｏ処理の一部を第３の制御部が引き継ぐように制御するステップ、をさらに含むことを特徴とする請求項７記載のストレージシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム及びストレージシステムの制御方法に関する。
【背景技術】
【０００２】
ストレージシステムは、ホスト装置に対してデータストレージサービスを提供する装置である。ストレージシステムは、典型的には、ハードディスクドライブ等からなる複数のディスクアレイ装置とこれを制御する各種のディスクコントローラとで構成される。ディスクコントローラは、ストレージシステム全体を制御するためのプロセッサと、ホスト装置に接続するためのホストインターフェースと、ディスクアレイに接続するためのディスクインターフェースとを備え、さらに、ユーザデータをキャッシュするためのキャッシュメモリが両者のインターフェースの間に配置される。
【０００３】
ストレージシステムは、一般に、銀行や証券等におけるミッションクリティカルな業務に用いられることから、ユーザデータを失うことのない高い信頼性、ホスト装置に対してストレージサービスを継続する高い可用性が求められる。
【０００４】
ストレージシステムを構成するコンポーネントの障害は、確率的に起こりうることであり、避けることはできず、従って、システム設計の観点から耐障害性を十分に考慮する必要がある。
【０００５】
下記の非特許文献１には、サーバコンピュータに関して、「ＣＰＵガード」と呼ばれるプロセッサの動的なデアロケーション技術が開示されている。このデアロケーション技術では、複数のプロセッサのいずれかで障害が発生した場合に、当該障害が発生したプロセッサを使用しないで、残されたプロセッサのみで動作するように、システム構成を再構築（デアロケート）する。
【０００６】
より具体的には、ハードウェアエラーが検出された場合、システムの再起動処理において診断プログラムが起動される。障害がＣＰＵやＬ３キャッシュにあった場合には、そのようなハードウェアコンポーネントはシステム構成から取り除れることになる。
【非特許文献１】“ＩＢＭ  Ｓｙｓｔｅｍ  ｐ５  ５７０  Ｔｅｃｈｎｉｃａｌ  Ｏｖｅｒｖｉｅｗ  ａｎｄ  Ｉｎｔｒｏｄｕｃｔｉｏｎ，”  ２００６年９月，部位３．１．７
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上述したようなデアロケーション技術では、障害が発生したコンポーネントが特定されるまでの間、障害が発生したコンポーネントの誤動作により、他の正常なコンポーネントすなわち、キャッシュメモリやホストインターフェース、ディスクインターフェースに対して不正にアクセスを働きかけてしまい、その結果、キャッシュメモリに格納されているデータが破壊され、又はホストインターフェースやディスクインターフェースが誤ったデータを転送するおそれがあった。
【０００８】
そこで、本発明は、耐障害性を有するストレージシステム、すなわち、ストレージシステム内のコンポーネント（部位）に障害が発生した場合であっても、ユーザデータを失うことのない高い信頼性、ホスト装置に対してストレージサービスを継続する高い可用性を有するストレージシステムを提供することを課題としている。
【０００９】
より具体的には、本発明の課題は、ストレージシステムを構成するコンポーネントに障害が発生した場合であっても、その障害の影響範囲を最小限にとどめつつ、ストレージシステム内の他の正常なコンポーネントを用いて、ストレージシステムの稼働を継続させることである。
【課題を解決するための手段】
【００１０】
本発明のある観点によれば、本発明は、ホスト装置に対してデータストレージサービスを提供するストレージシステムである。当該ストレージシステムは、前記ホスト装置に接続可能に構成されたホストインターフェース部と、データを格納するボリュームが形成されたディスクアレイ部に接続可能に構成されたディスクインターフェース部と、前記ホストインターフェース部及び前記ディスクインターフェース部にそれぞれ接続され、前記ユーザデータをキャッシュするキャッシュメモリ部と、前記ホストインターフェース部、前記ディスクインターフェース部、及びキャッシュメモリ部にそれぞれ接続されたスイッチＬＳＩと、複数のプロセッサを有し、前記スイッチＬＳＩに接続された制御部と、を備える。
【００１１】
そして、前記スイッチＬＳＩは、前記制御部内の部位に障害が発生した場合に出力されるエラー信号に基づいて、前記制御部との間の入出力パスを遮断し、前記制御部は、前記複数のプロセッサのいずれかの制御の下、所定の障害処理を行った後、前記スイッチＬＳＩに対して前記遮断の解除を指示する。
【００１２】
また、本発明の別の観点によれば、本発明は、ホスト装置に対してデータストレージサービスを提供するストレージシステムの制御方法である。当該制御方法は、複数のプロセッサを有する少なくとも一つの制御部が、前記各プロセッサの制御の下、前記データストレージサービスを遂行するステップと、前記制御部内の部位に障害が発生した場合に出力されるエラー信号を、前記スイッチＬＳＩが検出するステップと、前記スイッチＬＳＩが、前記検出された障害に基づいて、前記制御部との間の入出力パスを遮断するステップと、前記制御部が、前記入出力パスが遮断されている間に、所定の障害処理を行うステップと、前記制御部が、前記スイッチＬＳＩに対して、前記遮断の解除を指示するステップと、を含む。
【００１３】
また、本発明のさらに別の観点によれば、ストレージシステムを構成するさまざまなユニットに適用することができる。より具体的には、ストレージシステムを構成する、複数の部位を含むあるユニットは、前記複数の部位のいずれかに障害が発生したことを検出する障害検出部と、前記検出された障害の発生に基づいて、外部のユニットとの間の入出力パスを遮断する遮断処理部と、前記入出力パスが遮断されている間に、前記障害が発生した部位を特定する障害特定部と、前記特定された部位を閉塞状態に設定する閉塞状態設定部と、を備える。そして、前記遮断処理部は、前記閉塞状態に設定された後に、前記遮断を解除する。
【発明の効果】
【００１４】
本発明によれば、ストレージシステムを構成するコンポーネント（部位）に障害が発生した場合であっても、その障害の影響範囲を最小限にとどめることができ、従って、ユーザデータを失うことがなく、信頼性の高いストレージシステムが実現される。
【００１５】
また、本発明によれば、ストレージシステムを構成するコンポーネントに障害が発生した場合であっても、ストレージシステム内の他の正常なコンポーネントを用いてストレージシステムの稼働を継続させることができ、従って、可用性の高いストレージシステムが実現される。
【発明を実施するための最良の形態】
【００１６】
次に、本発明の実施の形態について、図面を参照しつつ説明する。
［第１の実施形態］
【００１７】
本実施形態は、耐障害性に優れたストレージシステムを説明している。具体的には、本実施形態のストレージシステムは、制御部内のいずれかのコンポーネント乃至は部位に障害が発生した場合に、当該制御部の入出力パスを遮断し、当該遮断された状態において障害が発生したコンポーネントを特定し、これを無効化する機能を有するストレージシステムについて説明している。本実施形態のストレージシステムはまた、当該障害が発生したコンポーネントを無効化した後、正常なコンポーネントのみで動作可能であるか否かを判断し、動作可能であると判断した場合に、当該入出力パスの遮断を解除（開放）し、再起動によって、動作を再開する。当該制御部の入出力パスの遮断／開放は、障害検出信号に基づいて、制御部と他のユニットを仲介するスイッチＬＳＩによって行われる。
【００１８】
図１は、本発明の実施形態に係るストレージシステム１の構成を示す図である。同図に示すように、ストレージシステム１は、ネットワークＮを介してホスト装置Ｈに接続され、全体としてコンピュータシステムを形成している。コンピュータシステムは、例えば、銀行の業務システムや航空機の座席予約業務システム等として構築される。
【００１９】
ストレージシステム１は、ホスト装置Ｈに対してデータストレージサービスを提供するためのシステムである。ストレージシステム１は、制御部２と、スイッチＬＳＩ３を介して接続された他のユニット、すなわち、ホストインターフェース４と、ディスクアレイ部５と、ディスクインターフェース部６と、キャッシュメモリ部７と、を備える。スイッチＬＳＩ３、ホストインターフェース４、ディスクアレイ部５、及びキャッシュメモリ部７間は、内部ネットワーク８で接続される。
【００２０】
制御部２は、複数のプロセッサ２１と、制御メモリ部２２と、不揮発性メモリ部２３と、チップセット２４とを備え、ストレージシステム１全体の動作を司る。
【００２１】
プロセッサ２１は、不揮発性メモリ部２３に格納された各種のプログラムを実行し、これによって、ストレージシステム１のデータストレージサービスを実現する。本例では、制御部２には２つのプロセッサ２１が設けられ、さらに、各プロセッサ２１には、２つのプロセッサコア２１１が設けられている（図２参照）。以下では、説明の便宜上、プロセッサ２１をそれぞれ区別するときは、プロセッサＰ１及びＰ２と表記する。
【００２２】
各プロセッサ２１とチップセット２４とは、フロントサイドバス（ＦＳＢ）２５（同様に、「ＦＳＢ  Ａ」及び「ＦＳＢ  Ｂ」と表記する。）でそれぞれ接続されている。また、各プロセッサ２１は、第１のエラー信号線２７を介して、後述するスイッチＬＳＩ３に接続されている。各プロセッサ２１は、自身のエラーを検出した場合、第１のエラー信号線２７を介して、スイッチＬＳＩ３に通知する。
【００２３】
プロセッサ２１（プロセッサコア２１１）は、制御部２において障害が発生した場合に、後述する障害処理プログラム２３２を実行して、障害が発生した部位を特定し、当該特定した部位を除く正常な部位のみによる稼働の継続を試みる。
【００２４】
図２は、本発明の実施形態に係るプロセッサ２１の概略構成を示す図である。同図に示すように、各プロセッサ２１は、複数のプロセッサコア２１１を有し、各プロセッサコア２１１は、並列に処理を行うことができる。本例では、各プロセッサ２１は、２つのプロセッサコア２１１を含んで構成されている。従って、制御部２は、全体として、４つのプロセッサコア２１１を有することになる。ただし、プロセッサ２１は、シングルコア構造であってもよい。以下では、説明の便宜上、プロセッサコア２１１をそれぞれ区別するときは、プロセッサＰ１の各プロセッサコア２１１をプロセッサコアＣ１及びＣ２、プロセッサＰ２の各プロセッサコア２１１をプロセッサコアＣ３及びＣ４と表記することにする。
【００２５】
各プロセッサコア２１１は、その内部にＬ１キャッシュ２１２を備え、その外部には同一プロセッサ２１内の各プロセッサコア２１１によって共有されるＬ２キャッシュ２１３が配置されている。また、本実施形態では、各プロセッサコア２１１は、障害要因レジスタ２１４を含んで構成されている。障害要因レジスタ２１４の内容は、障害発生時に実行される障害処理プログラム２３２により不揮発性メモリ部２３に書き出される。
【００２６】
図１に戻り、制御メモリ部２２は、ＤＲＡＭ等の揮発性メモリからなる複数のメモリモジュール２２１（同様に、これらを区別するときは「Ｍ１」及び「Ｍ２」と表記する。）によって構成されている。各メモリモジュール２２１は、データ信号線によりチップセット２４に接続されている。メモリモジュール２２１は、キャッシュメモリ部７に格納されたユーザデータに関連付けられた制御データ及びシステム構成情報等のその他の情報を格納する。制御データは、ストレージシステム１によるデータストレージサービスの遂行に必要な管理情報を含んでいる。
【００２７】
なお、制御データは、複数のメモリモジュール２２１内の記憶領域に非連続的に格納されうるが、これらの領域は、プロセッサコア２１１上で動作するＩ／Ｏ処理プログラムが単一の連続したメモリ空間として認識可能なように、メモリ管理がなされる。以下では、メモリモジュール２２１に格納される制御データは、特に断りのない限り、単一のメモリ空間に格納されているものとして説明する。
【００２８】
不揮発性メモリ部２３は、フラッシュメモリ等の書き換え可能な不揮発性のメモリによって構成されている。不揮発性メモリ部２３は、各種のプログラム及び各種の情報を格納する。本実施形態では、図３に示すように、不揮発性メモリ部２３は、起動プログラム２３１、及び障害処理プログラム２３２並びに閉塞部位管理テーブル２３３が格納されている。また、不揮発性メモリ部２３には、ストレージシステム１がデータストレージサービスを提供するためのＩ／Ｏ処理を行うＩ／Ｏ処理プログラムが格納される。
【００２９】
起動プログラム２３１は、ストレージシステム１の電源が投入がされた場合や、本実施形態で説明されるように障害発生時にリセットされた場合に、Ｉ／Ｏ処理プログラムを実行可能にするためのイニシャライズ処理を行うプログラムである。障害処理プログラム２３２は、制御部２内で何らかの障害が発生した場合に呼び出され、データストレージサービスの継続に向けて必要な処理を行うプログラムである。閉塞部位管理テーブル２３３は、制御部２内の各部位の閉塞状態を管理するテーブルである。部位は、障害の発生を特定できるレベルで定義されている。閉塞部位管理テーブル２３３は、障害処理プログラム２３２により更新される。
【００３０】
図１に戻り、チップセット２４は、制御部２内の接続されているコンポーネント（部位）間のブリッジとして機能する。また、チップセット２４は、接続されている部位の有効／無効の状態を管理している。また、チップセット２４は、アドレス／データ信号線２６を介してスイッチＬＳＩ３に接続されている。制御部２内のコンポーネントと他のユニットと間のデータのやり取りは、アドレス／データ信号線２６を介して行われる。さらに、チップセット１２４は、第２のエラー信号線２８を介してスイッチＬＳＩ３に接続されている。
【００３１】
本実施形態では、制御部２は、２つのプロセッサ２１を有しているが、特に、これにこだわるものではない。また、プロセッサ２１についても、本実施形態では２つのプロセッサコア２１１を有しているが、特に、これにこだわるものではない。さらに、メモリモジュール２２１及び不揮発性メモリ部２３も必要な数及び容量だけ設けられる。さらにまた、各コンポーネント間を接続するデータ信号線やエラー信号線についてもさまざまな規格のものを採用することができる。
【００３２】
図４は、本発明の実施形態に係るチップセット２４内に設けられたレジスタを説明するための図である。同図に示すように、チップセット２４は、障害要因レジスタ２４１と、部位有効化レジスタ２４２とを含んでいる。障害要因レジスタ２４１は、チップセット２４に接続された部位における障害の有無を記録する。部位有効化レジスタ２４２は、チップセット２４に接続された部位のうち、どの部位を有効化するかを指定する。
【００３３】
図５は、本発明の実施形態に係るスイッチＬＳＩ３の構成を示す図である。同図に示すように、スイッチＬＳＩ３は、ルーティング部３１と、遮断処理部３２と、遮断状態レジスタ３３とを含んで構成されている。
【００３４】
ルーティング部３１は、アドレス／データ信号線２６を介して制御部２のチップセット２４に接続され、また、内部ネットワーク８を介してストレージシステム１内の他のユニットに接続されている。ルーティング部３１は、遮断状態レジスタ３３の値が“Ｙ”でない限り、データのルーティングを行う。すなわち、遮断状態レジスタ３３は、“Ｙ”又は“Ｎ”の２値の状態を持つ。ルーティング部３１は、遮断状態レジスタ３３の値が“Ｎ”であれば、制御部２のチップセット２４から受領したデータをストレージシステム１内の他のユニットに転送し、また、ストレージシステム１内の他のユニットから受領したデータを制御部２のチップセット２４に転送する。ルーティング部３１は、典型的には、受領したデータを転送する際に、所定のプロトコル変換を行う。
【００３５】
遮断処理部３２は、第１のエラー信号線２７を介していずれかのプロセッサ２１から送出されるプロセッサエラー信号及び／又は第２のエラー信号線２８を介してチップセット２４から送出されるチップセットエラー信号を受け付けると、遮断状態レジスタ３３の値を“Ｎ”から“Ｙ”に書き換える。また、遮断処理部３２は、後述するように、ルーティング部３１を介して閉塞解除指示のコマンドを受領すると、遮断状態レジスタ３３の値を“Ｙ”から“Ｎ”に書き換える。
【００３６】
図６は、本発明の実施形態に係る障害処理プログラム２３２が有する処理乃至は機能を列挙している。障害処理プログラム２３２は、上述したように、制御部１１内で障害が発生したときに呼び出され、プロセッサコア２１１により実行される。
【００３７】
同図に示すように、障害処理プログラム２３２は、これを実行するプロセッサコア２１１自身が正常に動作可能であるか否かを診断する自己診断機能、自身以外のプロセッサコア２１１が正常に動作可能であるか否かを診断する他プロセッサコア診断機能、他のプロセッサコア２１１との間で排他制御を行う排他制御機能、障害が発生した部位を特定する障害部位特定機能、障害部位を切り離したとしても制御部２が正常に動作できるかどうかを判定する稼働可能判定機能、障害部位が使用されないように制御部２の動作モードを設定する動作モード設定機能、及びハードウェアリセットを行うリセット機能を含んでいる。
【００３８】
図７は、本発明の実施形態に係る制御部２のプロセッサ２１に設けられた障害要因レジスタ２１４の一例を示す図である。障害要因レジスタ２１４は、プロセッサ２１内部の各部位における障害の有無（状態）を示す。具体的には、障害要因レジスタ２１４には、プロセッサコア２１１、Ｌ１キャッシュ２１２、及びＬ２キャッシュ２１３における障害の発生の有無が記録される。また、Ｌ２キャッシュ２１３については、障害の程度が示される。
【００３９】
図８は、本発明の実施形態に係る不揮発性メモリ部２３に格納された閉塞部位管理テーブル２３３の一例を示す図である。
【００４０】
閉塞部位管理テーブル２３３は、制御部２内の各部位についての閉塞状態を管理するために用いられる。閉塞部位管理テーブル２３３の各エントリは、部位２３３１と閉塞状態２３３２とを含んでいる。部位２３３１は、制御部２内のコンポーネント自身（例えば、プロセッサ２１）やそのコンポーネントの部分（例えば、プロセッサコアＣ１〜Ｃ４やメモリモジュールＭ１及びＭ２）として定義されている。これは、障害の発生が特定できるレベルに対応している。また、部位２３３１“共通部位”は、例えば、チップセット２４の内部バスのように、それ自体冗長的に構成されていない部位を示している。部位が閉塞している状態（つまり、使用不能の状態）の場合には、閉塞状態は“Ｙ”となり、閉塞していない状態（つまり、使用可能の状態）の場合には、閉塞状態は“Ｎ”となる。本例では、閉塞部位管理テーブル２３３は、メモリモジュールＭ１が閉塞状態にあることを示している。
【００４１】
図９は、本発明の実施形態に係るチップセット２４に設けられた障害要因レジスタ２４１の一例を示す図である。
【００４２】
チップセット２４内の障害要因レジスタ２４１は、チップセット２２及びこれに接続される信号線で発生する障害（エラー）の有無を記録する。障害要因レジスタ２４１はまた、コンポーネントによっては、当該エラーの程度（すなわち、修正可能か否か）を示している。例えば、メモリモジュールＭ１及びＭ２を接続する信号線においては、修正可能なエラーと修正不可能なエラーのいずれかが検出される。具体的には、ＥＣＣ（Error Correction Code）を用いて、修正可能か否かが判別される。本例では、メモリモジュールＭ１で修正不可能なエラーが発生したことを示している。
【００４３】
図１０は、本発明の実施形態に係る制御部２のチップセット２４に設けられた部位有効化レジスタ２４２の構成の一例を示す図である。部位有効化レジスタ２４２は、チップセット２４に接続されたハードウェアリソース、すなわち、ＦＳＢ  Ａ及びＢ並びにメモリモジュールＭ１及びＭ２を使用するか否かを示す。本例では、メモリモジュールＭ１が無効化され、使用できない状態になっている。
【００４４】
次に、以上のように構成されるストレージシステム１における障害発生時の動作例について説明する。図１１は、本発明の実施形態に係るストレージシステム１において障害が発生した場合の処理の流れを説明するためのシーケンスチャートである。より具体的には、同図は、制御部２内のプロセッサコア２１１のいずれかで障害が発生した場合に、障害が発生していないプロセッサコア２１１がＩ／Ｏ処理を再開するまでの処理の流れを説明している。
【００４５】
まず、４つのプロセッサコアＣ１〜Ｃ４が正常にＩ／Ｏ処理を遂行していたところ、プロセッサコアＣ３で障害が発生したとする（Ｓ１）。これは、プロセッサコアＣ３自身又はその内部のＬ１キャッシュに障害が発生した場合である。プロセッサコアＣ３は、障害を検出すると、第１のエラー信号線２７を介してプロセッサエラー信号をスイッチＬＳＩ３に送出し、スイッチＬＳＩ３は、エラー信号を検出する（Ｓ２）。
【００４６】
スイッチＬＳＩ３は、第１のエラー信号線２７を介してプロセッサコアＣ３からのエラー信号を検出すると、直ちに、遮断状態レジスタ３３の値を“Ｙ”に変更する。これにより、スイッチＬＳＩ３は、アクセス遮断モードに移行して、入力される全てのデータのルーティングを停止し（Ｓ３）、プロセッサコアＣ１〜４に対して割り込みをかける（Ｓ４）。これにより、アクセス遮断モード中は、たとえ障害を起こしたプロセッサＣ３が誤動作により、スイッチＬＳＩ３を介して外部のユニットにアクセスしようとしても、当該アクセスが遮断されることになる。
【００４７】
プロセッサコアＣ１〜Ｃ４のそれぞれは、当該割り込みを受けると、障害処理プログラム２３２を呼び出して、所定の障害処理を実行する。すなわち、プロセッサコアＣ１〜Ｃ４のそれぞれは、まず、自己診断処理を実行し、自身が正常に動作可能であるか否かを判定する（Ｓ５）。このとき、プロセッサコアＣ１〜Ｃ４のそれぞれは、自己診断処理により得られた障害要因レジスタ２１４の内容を、自身以外のプロセッサコアが参照可能なように、不揮発性メモリ部２３に書き出す。本例では、プロセッサコアＣ１，Ｃ２，及びＣ４が正常に動作可能であると判定されたとする。また、障害が発生し、正常に動作できないと診断したプロセッサコアＣ３は、他プロセッサコア診断処理（図示せず）を経て、障害処理プログラム２３２の実行を終了する。
【００４８】
次に、正常に動作可能であると自身で判定したプロセッサコアＣ１，Ｃ２，及びＣ４は、以降の障害処理を続行する一のプロセッサコアを決定するために、排他制御処理を実行する（Ｓ６）。排他制御は、例えば、どのプロセッサコアが共有フラグ（排他権）を先に取得したか否かにより行われる。ここでは、プロセッサコアＣ２が排他権を取得したものとする。これ以降は、排他権を取得できなかったプロセッサコアＣ１及びＣ４は、障害処理プログラム２３２の実行を停止する。
【００４９】
排他権を取得したプロセッサコアＣ２は、次に、障害部位特定処理を実行し、制御部２内で障害が発生したであろう部位の特定を試みる（Ｓ７）。具体的には、プロセッサコアＣ２は、不揮発メモリ部１１３に書き出された各プロセッサコアＣ１〜Ｃ４の障害要因レジスタの内容を参照するとともに、チップセット２４内の障害要因レジスタの内容を参照し、障害が発生した部位（以下、「障害部位」という。）を特定する。ここでは、プロセッサＣ３内部で障害が発生したものとする。
【００５０】
続いて、プロセッサコアＣ２は、稼働可能判定処理を実行し、特定された障害部位（すなわち、プロセッサコアＣ３）を使用しない設定においても制御部２がなお動作するか否かを判定し（Ｓ８）、稼働可能であると判定した場合には、動作モード設定処理を実行して、当該障害部位が無効化されるようにチップセット２４の設定を変更する（Ｓ９）。そして、プロセッサコアＣ２は、制御部２自体の初期化を行うために、ハードリセット処理を実行する（Ｓ１０）。ハードリセット処理の実行により、無効化されていないプロセッサコアＣ１，Ｃ２，及びＣ４のいずれかが、起動プログラムを実行する（Ｓ１１）。本例では、プロセッサコアＣ４が起動プログラムを実行したものとする。
【００５１】
起動プログラムを実行したプロセッサコアＣ４は、障害部位が閉塞状態になっていることを確認した後、スイッチＬＳＩ３に対してアクセス遮断の解除を指示する（Ｓ１２）。そして、プロセッサコアＣ４は、有効なプロセッサコアＣ１及びＣ２にＩ／Ｏ処理を再開するよう指示するとともに、自身も当該Ｉ／Ｏ制御処理を再開する（Ｓ１３）。
【００５２】
以上のように、制御部２内で障害が検出されると直ちにスイッチＬＳＩ３は、ルーティングを停止するので、たとえ障害部位の誤動作によりアクセスされた場合であっても、当該アクセスは確実に遮断されることになる。
【００５３】
次に、制御部２内のプロセッサ２１で実行される障害処理プログラム２３２の各機能について説明する。なお、上述したように、本実施形態のプロセッサ２１は、２つプロセッサコア２１１を有し、従って、実際上は、各プロセッサコア２１１が障害処理プログラム２３２を並列的に実行する。障害処理プログラム２３２は、制御部２内のいずれかのコンポーネントで障害が検出された場合に、呼び出される。
【００５４】
図１２は、本発明の実施形態に係る障害処理プログラム２３２を説明するための全体フローチャートである。障害処理プログラム２３２は、制御部２内のいずれかのコンポーネントで障害が検出されると、各プロセッサコア２１１により実行される。
【００５５】
障害処理プログラム２３２を実行しているプロセッサコア２１１は、まず、自己診断処理を実行し（ＳＴＥＰ１２０１）、プロセッサコア２１１自身が正常に動作可能であるか否かを判断する（ＳＴＥＰ１２０２のＹｅｓ）。プロセッサコア２１１自身が正常に動作可能でないと判断される場合、他プロセッサコア診断処理を行い（ＳＴＥＰ１２０３）、他のプロセッサコア２１１のいずれかが、動作可能であるか否かを判断する（ＳＴＥＰ１２０４）。他のプロセッサコア２１１のいずれかが動作可能である場合には、当該プロセッサコアは、そのまま終了する（ＳＴＥＰ１２０４のＹｅｓ）。これに対して、他のプロセッサコア２１１のいずれも動作不能である場合には、当該プロセッサコア２１１は、後述する障害部位特定処理を実行するために続行を試みる（ＳＴＥＰ１２０４のＮｏ）。
【００５６】
プロセッサコア２１１は、ＳＴＥＰ１２０２において正常動作可能であると判断する場合又はＳＴＥＰ１２０４において他プロセッサコア２１１のいずれも動作不能であると判断する場合には、排他制御処理を実行し（ＳＴＥＰ１２０５）、プロセッサコア２１１自身が排他権を取得することに成功したか否かを判断する（ＳＴＥＰ１２０６）。
【００５７】
プロセッサコア２１１は、自身が排他権を取得することに成功したと判断する場合には（ＳＴＥＰ１２０６のＹｅｓ）、次に、障害部位特定処理を実行する（ＳＴＥＰ１２０７）。これに対して、障害処理プログラム２３２は、排他権を取得できなかった場合には、排他権を取得した他のプロセッサコア２１１が以降の処理を継続することになるため、自身は障害処理プログラム２３２の実行を終了する。
【００５８】
排他権を取得し、障害部位特定処理を実行したプロセッサコア２１１は、次に、障害が発生した制御部２内の部位を特定できたか否かを判断する（ＳＴＥＰ１２０８）。プロセッサコア２１１は、障害部位を特定できた場合には（ＳＴＥＰ１２０８のＹｅｓ）、稼働可能判定処理を実行し（ＳＴＥＰ１２０９）、稼働可能な部位が制御部２内に存在するか否かを判断する（ＳＴＥＰ１２１０）。これは、稼働可能な部位が制御部２内に存在することで、たとえ当該障害が発生した状態であっても、稼働可能な部位のみを使用する動作モードでストレージサービスの継続が可能であるか否かを判断するものである。
【００５９】
プロセッサコア２１１は、稼働可能な部位が制御部２内に存在すると判断すると（ＳＴＥＰ１２１０のＹｅｓ）、次に、動作モード設定処理を実行する（ＳＴＥＰ１２１１）。
【００６０】
そして、プロセッサコア２１１は、ハードウェアリセット処理を実行する（ＳＴＥＰ１２１２）。これにより、制御部２内の全てのプロセッサコア２１１はリセットされ、起動プログラムが呼び出されることになる。
【００６１】
図１３は、本発明の実施形態に係る障害処理プログラム２３２における自己診断処理を説明するためのフローチャートである。自己診断処理では、これを実行しているプロセッサコア２１１は、自身が正常に動作可能であるか否かを判断するとともに、他のプロセッサコア２１１が自身の障害要因レジスタ２１４の内容を参照できるように、障害要因レジスタ２１４の内容を不揮発性メモリ部２３に書き出す。
【００６２】
すなわち、同図に示すように、プロセッサコア２１１は、まず、自身の障害要因レジスタ２１４の内容を読み出して（ＳＴＥＰ１３０１）、これを不揮発性メモリ部２３に書き出す（ＳＴＥＰ１３０２）。さらに、プロセッサコア２１１は、障害要因レジスタ２１４に修正不可能なエラーが記録されているか否かを判断する（ＳＴＥＰ１３０３）。障害要因レジスタ２１４に修正不可能なエラーが記録されている場合、プロセッサコア２１１は、正常に動作できないと判断し、処理を終了する（ＳＴＥＰ１３０８）。
【００６３】
これに対して、障害要因レジスタ２１４にエラーが記録されていない場合、又は修正可能なエラーのみが記録されている場合には、プロセッサコア２１１は、次に、チップセット２４内の障害要因レジスタ２４１を読み出す（ＳＴＥＰ１３０４）。プロセッサコア２１１は、障害要因レジスタ２４１に修正不可能なエラーが記録されているか否かを判断し（ＳＴＥＰ１３０５）、障害要因レジスタ２４１に修正不可能なエラーが記録されている場合、プロセッサコア２１１は、同様に、正常に動作できないと判断し、処理を終了する（ＳＴＥＰ１３０８）。
【００６４】
障害要因レジスタ２４１にエラーが記録されていない場合、又は修正可能なエラーのみが記録されている場合には、プロセッサコア２１１は、次に、自身が接続されているフロントサイドバス（ＦＳＢ）２５におけるエラーが記憶されているか否かを判断する（ＳＴＥＰ１３０６）。当該ＦＳＢ２５におけるエラーが記録されている場合には（ＳＴＥＰ１３０６のＹｅｓ）、同様に、正常に動作できないと判断し、処理を終了する（ＳＴＥＰ１３０８）。
【００６５】
これに対して、当該ＦＳＢ２５におけるエラーが記録されていない場合には（ＳＴＥＰ１３０６のＮｏ）、プロセッサコア２１１は、正常に動作できると判断し、処理を終了する（ＳＴＥＰ１３０７）。
【００６６】
図１４は、本発明の実施形態に係る障害処理プログラム２３２における他プロセッサコア診断処理を説明するためのフローチャートである。他プロセッサコア診断処理では、当該プロセッサコア２１１が、他のプロセッサコア２１１のいずれかが正常に動作して障害処理を行うことができるか否かを判断する。
【００６７】
すなわち、同図に示すように、障害処理プログラムを実行しているプロセッサコア２１１は、不揮発性メモリ部２３に書き出された他のプロセッサコア２１１の障害要因レジスタ２１４を読み出すとともに（ＳＴＥＰ１４０１）、閉塞部位管理テーブル２３３を読み出す（ＳＴＥＰ１４０２）。続いて、プロセッサコア２１１は、チップセット２４内の障害要因レジスタ２４１を読み出す（ＳＴＥＰ１４０３）。
【００６８】
プロセッサコア２１１は、次に、これら読み出した障害要因レジスタ２１４及び閉塞部位管理テーブル２３３並びに障害要因レジスタ２４１に基づいて、プロセッサコア内エラー又はＬ１キャッシュエラーであり、かつ、閉塞状態にない他のプロセッサコア２１１が少なくとも１つ以上あるか否かを判断する（ＳＴＥＰ１４０４）。プロセッサコア内エラー又はＬ１キャッシュエラーであり、かつ、閉塞状態にない他のプロセッサコア２１１が少なくとも１つ以上ある場合（ＳＴＥＰ１４０４のＹｅｓ）、プロセッサコア２１１は、他のプロセッサコア２１１は動作可能であると判定する（ＳＴＥＰ１４０７）。
【００６９】
これに対して、プロセッサコア内エラー及びＬ１キャッシュエラーのいずれでもない場合、あるいは、閉塞状態にない他のプロセッサコア２１１がない場合、プロセッサコア２１１は、さらに、Ｌ２キャッシュエラー又はＦＳＢエラーであり、かつ、閉塞状態にない他のプロセッサコア２１１が少なくとも１つ以上あるか否かを判断する（ＳＴＥＰ１４０５）。Ｌ２キャッシュエラー又はＦＳＢエラーであり、かつ、閉塞状態にない他のプロセッサ２１が少なくとも１つ以上ある場合には、当該プロセッサコア２１１は、同様に、他のプロセッサコア２１１は動作可能であると判定する（ＳＴＥＰ１４０７）。これに対して、Ｌ２キャッシュエラー及びＦＳＢエラーのいずれでもない場合、あるいは、閉塞状態にない他のプロセッサコア２１１がない場合、当該プロセッサコア２１１は、他プロセッサコア２１１は動作不可能であると判定する（ＳＴＥＰ１４０６）。
【００７０】
図１５は、本発明の実施形態に係る障害処理プログラム２３２における障害部位特定処理を説明するためのフローチャートである。障害部位特定処理では、プロセッサコア２１１は、制御部２内のどの部分で障害が発生したかを特定する。障害部位特定処理を実行するプロセッサコア２１１は、排他制御処理において排他権を取得したプロセッサコア２１１のみである。
【００７１】
すなわち、同図に示すように、プロセッサコア２１１は、各プロセッサコア２１１の自己診断処理において不揮発性メモリ部２３に書き出された各プロセッサコア２１１の障害要因レジスタ２１４の内容を読み出す（ＳＴＥＰ１５０１）。プロセッサコア２１１は、全てのプロセッサコア２１１の障害要因レジスタ２１４の内容を読み出したか否かを判断し（ＳＴＥＰ１５０２）、読み出していなければ上記読み出し処理を繰り返す。
【００７２】
プロセッサコア２１１は、次に、チップセット２４内の障害要因レジスタ２４１の内容を読み出して（ＳＴＥＰ１５０３）、いずれかのプロセッサコア２１１に障害があるか否かを判断する（ＳＴＥＰ１５０４）。プロセッサコア２１１は、いずれかのプロセッサコア２１１に障害があると判断する場合には（ＳＴＥＰ１５０４のＹｅｓ）、不揮発性メモリ部２３に記憶されている閉塞部位管理テーブル２３３における対応するプロセッサ２１１のエントリを“Ｙ”に設定する（ＳＴＥＰ１５０５）。これに対して、プロセッサコア２１１の障害でないと判断する場合には、当該プロセッサコア２１１は、そのまま次の処理に進む。
【００７３】
続いて、プロセッサコア２１１は、いずれかのＬ２キャッシュ又はＦＳＢに障害が発生しているか否かを判断する（ＳＴＥＰ１５０６）。いずれかのＬ２キャッシュ２１３又はＦＳＢ２５に障害が発生していると判断する場合（ＳＴＥＰ１５０６のＹｅｓ）、プロセッサ２１は使用できないとして、プロセッサコア２１１は、閉塞部位管理テーブル２３３における対応するＦＳＢ２５のエントリを“Ｙ”に設定する（ＳＴＥＰ１５０７）。
【００７４】
さらに、プロセッサコア２１１は、いずれかのメモリモジュール２２１に障害があるか否かを判断する（ＳＴＥＰ１５０８）。プロセッサコア２１１は、いずれかのメモリモジュール２２１に障害があると判断する場合には（ＳＴＥＰ１５０８のＹｅｓ）、不揮発性メモリ部２３に記憶されている閉塞部位管理テーブル２３３における対応するメモリモジュール２２１のエントリを“Ｙ”に設定する（ＳＴＥＰ１５０８）。
【００７５】
さらにまた、プロセッサコア２１１は、共通部位に障害があるか否かを判断する（ＳＴＥＰ１５１０）。共通部位は、例えば、チップセット２４内の内部バスのように冗長的に構成されていない部位である。プロセッサコア２１１は、共通部位に障害があると判断する場合には、不揮発性メモリ部２３に記憶されている閉塞部位管理テーブル２３３における共通部位のエントリを“Ｙ”に設定する（ＳＴＥＰ１５１１）。
【００７６】
そして、プロセッサコア２１１は、以上の処理の結果、閉塞部位管理テーブル２３３における各部位に閉塞状態（“Ｙ”）が設定されたか否かをチェックする（ＳＴＥＰ１５１２）。閉塞部位管理テーブル２３３のいずれかの部位に閉塞状態が設定されている場合には、障害部位の特定に成功したとして障害部位特定処理を終了する（ＳＴＥＰ１５１３）。これに対して、閉塞部位管理テーブル２３３に閉塞状態が設定されていない場合には、障害処理プログラム２３２が呼び出されたにもかかわらず、障害部位が特定できなかったことになる。従って、この場合には、プロセッサコア２１１は、障害処理が正しく動作しなかったと判断して、障害部位の特定に失敗したとして、障害部位特定処理を終了する（ＳＴＥＰ１５１４）。
【００７７】
このように、障害部位特定処理では、プロセッサコア２１１は、制御部２における全てのプロセッサコア２１１内の障害要因レジスタ２１４及びチップセット２４内の障害要因レジスタ２４１に基づいて、障害が発生した部位を特定し、当該障害部位が閉塞されるように閉塞部位管理テーブル２３３の閉塞状態を書き換える。
【００７８】
図１６は、本発明の実施形態に係る障害処理プログラム２３２における稼働可能判定処理を説明するためのフローチャートである。稼働可能判定処理では、プロセッサコア２１１は、制御部２内の正常な部位のみで制御部２を稼働させることができるか否かを判断する。
【００７９】
すなわち、同図に示すように、プロセッサコア２１１は、不揮発性メモリ部２３に記憶された閉塞部位管理テーブル２３３を読み出す（ＳＴＥＰ１６０１）。次に、プロセッサコア２１１は、起動用のプロセッサコア２１１が閉塞状態に設定されているか否かを判断する（ＳＴＥＰ１６０２）。起動用のプロセッサコア２１１は、プロセッサ２１内の予め定められた一のプロセッサコア２１１である。例えば、プロセッサＰ１のプロセッサコアＣ１及びプロセッサＰ２のプロセッサコアＣ３が起動用として設定される。この場合、起動時には、プロセッサコアＣ１又はＣ３のいずれかが起動プログラムを実行することになる。このため、プロセッサコアＣ１が閉塞状態になっている場合には、プロセッサＰ１を閉塞状態にする必要がある。
【００８０】
従って、プロセッサコア２１１は、起動用のプロセッサコア２１１が閉塞状態に設定されていると判断する場合には（ＳＴＥＰ１６０２のＹｅｓ）、障害が発生したプロセッサコア２１１を含むプロセッサ２１が起動プログラムを実行しないことを保証するため、閉塞部位管理テーブル２３３における当該起動用のプロセッサコア２１１を含むプロセッサ２１のエントリを“Ｙ”に設定する（ＳＴＥＰ１６０３）。
【００８１】
プロセッサコア２１１は、次に、全てのプロセッサ２１が閉塞状態になっているか否かを判断する（ＳＴＥＰ１６０４）。全てのプロセッサ２１が閉塞状態になっていると判断する場合（ＳＴＥＰ１６０４のＹｅｓ）、プロセッサコア２１１は、制御部２内に稼働可能な部位がないものと判断する（ＳＴＥＰ１６０８）。これに対して、全てのプロセッサ２１が閉塞状態になっていないと判断する場合（ＳＴＥＰ１６０４のＮｏ）、プロセッサコア２１１は、続いて、全てのメモリモジュール２２１が閉塞状態になっているか否かを判断する（ＳＴＥＰ１６０５）。
【００８２】
全てのメモリモジュール２２１が閉塞状態になっていると判断する場合（ＳＴＥＰ１６０５のＹｅｓ）、プロセッサコア２１１は、同様に、制御部２内に稼働可能な部位がないものと判断する（ＳＴＥＰ１６０８）。これに対して、全てのメモリモジュール２２１が閉塞状態になっていないと判断する場合（ＳＴＥＰ１６０５のＮｏ）、プロセッサコア２１は、さらに、共通部位が閉塞状態になっているか否かを判断する（ＳＴＥＰ１６０６）。
【００８３】
そして、共通部位が閉塞状態になっていると判断する場合（ＳＴＥＰ１６０６のＹｅｓ）、プロセッサコア２１１は、制御部２内に稼働可能な部位がないものと判断する（ＳＴＥＰ１６０８）。これに対して、共通部位が閉塞状態になっていないと判断する場合（ＳＴＥＰ１６０４のＮｏ）、プロセッサコア２１１は、稼働可能な部位があるものと判断し（ＳＴＥＰ１６０７）、稼働可能判定処理を終了する。
【００８４】
図１７は、本発明の実施形態に係る障害処理プログラム２３２における動作モード設定処理を説明するためのフローチャートである。動作モード設定処理では、プロセッサコア２１１は、制御部２が閉塞部位を使用しないで動作するように、チップセット２４の部位有効化レジスタ２４２の設定を変更する。
【００８５】
すなわち、同図に示すように、プロセッサコア２１１は、まず、不揮発性メモリ部２３に記憶された閉塞部位管理テーブル２３３の内容を読み出す（ＳＴＥＰ１７０１）。続いて、プロセッサコア２１１は、一のプロセッサ２１を選択し（ＳＴＥＰ１７０２）、当該選択したプロセッサ２１が閉塞状態であるか否かを判断する（ＳＴＥＰ１７０３）。
【００８６】
当該選択したプロセッサ２１が閉塞状態である場合（ＳＴＥＰ１７０３のＹｅｓ）、プロセッサコア２１１は、部位有効化レジスタ２４２における対応するプロセッサ２１に接続されたＦＳＢのエントリを“N”に設定する（ＳＴＥＰ１７０４）。つまり、この場合、選択したプロセッサ２１は、使用されないことになる。
【００８７】
そして、プロセッサコア２１１は、全てのプロセッサ２１を選択したか否かを判断し（ＳＴＥＰ１７０５）、全てのプロセッサ２１を選択していないと判断する場合に（ＳＴＥＰ１７０５のＮｏ）、次のプロセッサ２１を選択し、同様に処理を行う。当該選択したプロセッサ２１が閉塞状態でなければ（ＳＴＥＰ１７０３のＮｏ）、当該プロセッサコア２１１は、部位有効化レジスタ２４２を書き換えず、全てのプロセッサを選択したか否かを判断する（ＳＴＥＰ１７０５）。
【００８８】
以上により、プロセッサ２１が閉塞状態にある場合には、チップセット２４内の部位有効化レジスタ２４２における、当該閉塞状態にあるプロセッサ２１に接続されたＦＳＢ２５が無効化されるので、当該プロセッサ２１は動作しないことになる。
【００８９】
図１８は、本発明の実施形態に係る起動プログラムを説明するためのフローチャートである。起動プログラムは、障害プログラムを実行したプロセッサコア２１１によりハードウェアリセット処理が実行されることにより、最初に実行される。起動プログラムを実行するプロセッサコア２１１は、制御部２内の正常な部位のみを稼働させ、閉塞させるべき部位が稼働していないことを確認した後、スイッチＬＳＩ３に対して遮断解除を指示し、他のプロセッサコア２１１を起動させる。
【００９０】
すなわち、同図に示すように、起動プログラムの実行を開始したプロセッサコア２１１は、まず、不揮発性メモリ部２３に記憶された閉塞部位管理テーブル２３３の内容を読み出す（ＳＴＥＰ１８０１）。続いて、プロセッサコア２１１は、一のメモリモジュール２２１を選択し（ＳＴＥＰ１８０２）、読み出した閉塞部位管理テーブル２３３を参照し、当該選択したメモリモジュール２２１が閉塞状態であるか否かを判断する（ＳＴＥＰ１８０３）。当該選択したメモリモジュール２２１が閉塞状態でない場合、プロセッサコア２１１は、部位有効化レジスタ２４２の対応するメモリモジュール２２１のエントリを“Ｙ”に設定する（ＳＴＥＰ１８０４）。これに対して、当該選択したメモリモジュール２２１が閉塞状態である場合、プロセッサコア２１１は、部位有効化レジスタ２４２の対応するメモリモジュール２２１のエントリを“Ｎ”に設定する（ＳＴＥＰ１８０５）。プロセッサコア２１１は、全てのメモリモジュール２２１を選択したか否かを判断し（ＳＴＥＰ１８０６）、全てのメモリモジュール２２１を選択していないと判断する場合に（ＳＴＥＰ１８０６のＮｏ）、次のメモリモジュール２２１を選択し、同様に処理を行う。
【００９１】
全てのメモリモジュール２２１についてチェックした後、当該プロセッサコア２１１は、不揮発性メモリ部２３に記憶された閉塞部位管理テーブル２３３におけるプロセッサ閉塞状態と、チップセット２４に記憶された部位有効化レジスタ２４２におけるＦＳＢ有効化状態とが、矛盾なく対応しているか否かを判断する（ＳＴＥＰ１８０７）。もし、閉塞部位管理テーブル２３３におけるプロセッサ閉塞状態と、部位有効化レジスタ２４２におけるＦＳＢ有効化状態とが一致していない場合には（ＳＴＥＰ１８０７のＮｏ）、障害処理が正しく処理されていないことになるため、起動処理を停止する（ＳＴＥＰ１８１０）。
【００９２】
これに対して、閉塞部位管理テーブル２３３におけるプロセッサ閉塞状態と、部位有効化レジスタ２４２におけるＦＳＢ有効化状態とが一致している場合（ＳＴＥＰ１８０７のＹｅｓ）、当該プロセッサコア２１１は、スイッチＬＳＩ３に対して遮断解除コマンドを送出する（ＳＴＥＰ１８０８）。これを受けて、スイッチＬＳＩ３は、遮断状態レジスタ３３の値を“Ｎ”にして、停止していたルーティング処理を再開する。
【００９３】
そして、プロセッサコア２１１は、閉塞部位管理テーブル２３３において閉塞状態にないプロセッサコアに対して起動の指示を行う（ＳＴＥＰ１８０９）。
【００９４】
なお、チップセット２４内の部位有効化レジスタ２４２に対する設定は、適宜のタイミングでなされればよい。例えば、上記の実施形態では、プロセッサ２１に対する有効化／無効化の設定は、ハードウェアリセット処理前の動作モード設定処理において行われ、メモリモジュール２２１に対する有効化／無効化の設定は、ハードウェアリセット処理後の起動処理において行われているが、特にこれに限定されるものではない。
【００９５】
図１９は、本発明の実施形態に係るスイッチＬＳＩ３の遮断処理を説明するためのフローチャートである。
【００９６】
すなわち、同図に示すように、スイッチＬＳＩ３は、その動作中、第１のエラー信号線２７及び第２のエラー信号線２８を監視している（ＳＴＥＰ１９０１）。そして、スイッチＬＳＩ３は、第１のエラー信号線２７及び第２のエラー信号線２８のいずれかでエラー信号を検出した場合には（ＳＴＥＰ１９０１のＹｅｓ）、直ちに、遮断状態レジスタ３３の値を“Ｙ”に設定する。これにより、制御部２内で障害が発生した時点でスイッチＬＳＩ３は、全てのアクセスを遮断するため、制御部２の誤動作がストレージシステム１内の他のユニットに対して影響を与えることがない。
【００９７】
図２０は、本発明の実施形態に係るスイッチＬＳＩ３のルーティング部３１の動作を説明するためのフローチャートである。同図は、スイッチＬＳＩ３がチップセット２４を介してプロセッサ２１からデータを受信した場合の処理を説明している。
【００９８】
すなわち、同図に示すように、スイッチＬＳＩ３は、アドレス／データ線２６を介してデータを受信すると（ＳＴＥＰ２００１のＹｅｓ）、遮断状態レジスタ３３を参照して、遮断状態レジスタ３３の値が“Ｙ”であるか否かを判断する（ＳＴＥＰ２００２）。遮断状態レジスタ３３の値が“Ｎ”である場合、スイッチＬＳＩ３は、ルーティングテーブルに従って、当該データをストレージシステム１内の内部ネットワーク８に送出する（ＳＴＥＰ２００３）。
【００９９】
これに対して、遮断状態レジスタ３３の値が“Ｙ”である場合、スイッチＬＳＩ３は、続いて、当該データが遮断解除コマンドであるか否かを判断する（ＳＴＥＰ２００４）。スイッチＬＳＩ３は、当該データが遮断解除コマンドでないと判断する場合（ＳＴＥＰ２００４のＮｏ）、当該データを破棄する（ＳＴＥＰ２００５）。これは、スイッチＬＳＩ３に入ってくるデータが遮断されることを意味している。これに対して、当該データが遮断解除コマンドであると判断する場合（ＳＴＥＰ２００４のＹｅｓ）、スイッチＬＳＩ３は、遮断状態レジスタ３３の値を“Ｎ”に設定する（ＳＴＥＰ２００６）。
【０１００】
以上のように、制御部２内のプロセッサ２１が障害が発生した場合、スイッチＬＳＩ３は、残された正常なコンポーネントで制御部２が再稼働するまで、すべてのアクセスを遮断する。従って、障害が発生したプロセッサ２１が誤動作を引き起こすような場合であっても、そのような誤動作がストレージシステム１全体に波及することを防止することができ、その結果、ストレージシステム１の信頼性、可用性が向上することになる。
［第２の実施形態］
【０１０１】
上記実施形態では、制御部２内のいずれかのコンポーネント（部位）において障害が発生した場合の障害処理について説明したが、以下の実施形態では、ストレージシステム１内の他のユニット、例えば、キャッシュメモリ部１６内で障害が発生した場合について説明する。
【０１０２】
図２１は、本発明の実施形態に係るキャッシュメモリ部７の構成を示す図である。同図に示すように、キャッシュメモリ部７は、メモリコントローラ７１と、複数のメモリモジュール７２とを含んで構成されている。メモリコントローラ７１は、ストレージシステム１内の他のユニットからアクセス要求を受け付けて、適切なメモリモジュール１６２にアクセスするための制御を行う。
【０１０３】
メモリコントローラ７１と複数のメモリモジュール７２との間は、メモリバス７３及び制御信号線７４により接続されている。メモリバス７３は、メモリコントローラ７１がメモリモジュール７２に格納されているデータにアクセスするために、アドレス及び当該データの転送に使用される。制御信号線７４は、メモリモジュール７２やメモリバス７３で障害が発生した場合に、障害の発生通知やその障害要因情報の転送に使用される。以下では、説明の便宜上、メモリモジュール７２をそれぞれ区別するときは、メモリモジュールＣＭ１及びＣＭ２と表記する。
【０１０４】
図２２は、本発明の実施形態に係るキャッシュメモリ部７のメモリコントローラ７１の構成を示す図である。同図に示すように、メモリコントローラ７１は、閉塞部位管理テーブル７１１と、障害検出部７１２と、障害部位特定部７１３と、コマンド変換部７１４とを含んで構成されている。
【０１０５】
閉塞部位管理テーブル７１１は、キャッシュメモリ部７内の各メモリモジュール７２の閉塞状態を管理するテーブルであり、さらに、メモリモジュール７２に対してアクセスが許可されているか否かを管理している。
【０１０６】
図２３は、本発明の実施形態に係るキャッシュメモリ部７の閉塞部位管理テーブル７１１の一例を示す図である。同図に示すように、閉塞管理テーブル７１１は、アクセス遮断状態エントリ７１１１及び複数の閉塞部位エントリ７１１２を含んでいる。
【０１０７】
遮断状態エントリ７１１１は、メモリモジュール７２に対するアクセスが許可されているか否かを示す。遮断状態エントリ７１１１は、障害の発生を検出したが、それがどの部位で発生したかが特定されていない場合に、“Ｙ”で示される。閉塞部位エントリ７１１２は、各メモリモジュール７２又はそれに接続されたメモリバス７３で障害が発生した場合に、“Ｙ”で示される。
【０１０８】
図２２に戻り、障害検出部７１２は、キャッシュメモリ部７内で発生した障害を検出し、直ちに、閉塞部位管理テーブル７１１におけるアクセス遮断状態エントリ７１１１を“Ｙ”に設定する。
【０１０９】
障害部位特定部７１３は、障害検出部７１２により障害が検出された場合に起動される。障害部位特定部７１３は、制御信号線７１４をポーリングして、各メモリモジュール７２の状態を診断し、障害部位の特定を行う。また、障害部位特定部７１３は、特定した障害部位を使用しないように、閉塞処理を行う。
【０１１０】
コマンド変換部７１４は、ストレージシステム１内の他のユニットからコマンド及びユーザデータを受領し、閉塞部位管理テーブル７１１のアクセス遮断状態エントリ７１１１に従って、メモリモジュール７２に対するアクセスを制御する。
【０１１１】
図２４は、本発明の実施形態に係るキャッシュメモリ部７の障害検出部７１２の動作を説明するためのフローチャートである。
【０１１２】
すなわち、障害検出部７１２は、キャッシュメモリ部７内における障害の発生を監視している（ＳＴＥＰ２４０１）。障害検出部７１２は、障害を検出すると（ＳＴＥＰ２４０１のＹｅｓ）、閉塞部位管理テーブル７１１のアクセス遮断状態を“Ｙ”に設定する（Ｓ２４０２）。そして、障害検出部７１２は、障害部位を特定するために、障害部位特定部７１３を起動する（ＳＴＥＰ２４０３）。
【０１１３】
これにより、障害部位特定部７１３が障害部位を特定するまでの間、メモリモジュール７２に対するアクセスが制限されるようになる。
【０１１４】
図２５は、本発明の実施形態に係るキャッシュメモリ部７の障害部位特定部７１３の動作を説明するためのフローチャートである。
【０１１５】
すなわち、同図に示すように、障害部位特定部７１３は、まず、制御信号線７４を用いて、各メモリモジュール７２のステータスを取得する（ＳＴＥＰ２５０１）。その結果、メモリバス７３の障害（エラー）であると判断される場合（ＳＴＥＰ２５０２のＹｅｓ）、障害部位特定部７１３は、閉塞部位管理テーブル７１１における当該メモリバス７３に接続されたメモリモジュール７２のエントリを“Ｙ”に設定する（ＳＴＥＰ２５０３）。続いて、障害部位特定部７１３は、閉塞部位管理テーブル７１１のアクセス遮断状態エントリ７１１１を“Ｎ”に設定し（ＳＴＥＰ２５０４）、処理を終了する。
【０１１６】
これに対して、ＳＴＥＰ２５０２においてメモリバス７３の障害でないと判断される場合、障害部位特定部７１３は、メモリモジュール７２内のエラーか否かを判断する（ＳＴＥＰ２５０５）。メモリモジュール７２内のエラーであると判断される場合には、障害部位特定部７１３は、閉塞部位管理テーブル７１１における当該メモリモジュール７２のエントリを“Ｙ”に設定する（ＳＴＥＰ２５０６）。続いて、障害部位特定部７１３は、閉塞部位管理テーブル７１１の遮断状態エントリ７１１１を“Ｎ”に設定し（ＳＴＥＰ２５０７）、処理を終了する。
【０１１７】
一方、ＳＴＥＰ２５０５においてメモリモジュール８０内のエラーでないと判断した場合は、障害部位を特定できなかったことになるので、アクセス遮断を解除することなく、そのまま処理を終了する。
【０１１８】
これにより、キャッシュメモリ部７内で障害が発生した場合、障害部位が特定されるまでの間、誤動作を引き起こす可能性のあるメモリモジュール７２に対するアクセスを遮断することができるようになる。また、障害部位が特定された後は、正常なメモリモジュール７２のみが使用されることになる。
【０１１９】
図２６は、本発明の実施形態に係るキャッシュメモリ部７のコマンド変換部７１４の動作を説明するためのフローチャートである。
【０１２０】
すなわち、同図に示すように、コマンド変換部７１４は、コマンド及びユーザデータを受領すると、閉塞部位管理テーブル７１１を参照し（ＳＴＥＰ２６０１）、アクセス遮断中であるか否かを判断する（ＳＴＥＰ２６０２）。具体的には、コマンド変換部７１４は、閉塞部位管理テーブル７１１の遮断状態エントリ７１１１が“Ｙ”であるか否かを判断する。
【０１２１】
アクセス遮断中であると判断する場合、コマンド変換部７１４は、データ送信元にリトライを要求し（ＳＴＥＰ２６０３）、処理を終了する。
【０１２２】
これに対して、アクセス遮断中でないと判断する場合、コマンド変換部７１４は、受領したコマンド及びユーザデータに基づいて、アクセス先のメモリモジュール７２を特定する（ＳＴＥＰ２６０４）。次に、コマンド変換部７１４は、閉塞部位管理テーブル７１１を参照し、特定したメモリモジュール７２が閉塞状態であるか否かを判断する（ＳＴＥＰ２６０５）。
【０１２３】
特定したメモリモジュール７２が閉塞状態であると判断する場合（ＳＴＥＰ２６０５のＹｅｓ）、コマンド変換部７１４は、データ送信元にエラーステータスを送出し（ＳＴＥＰ２６０６）、処理を終了する。
【０１２４】
これに対して、特定したメモリモジュール７２が閉塞状態でないと判断する場合（ＳＴＥＰ２６０５のＮｏ）、コマンド変換部７１４は、特定したメモリモジュール７２に対してアクセスを行い（ＳＴＥＰ２６０７）、その結果をデータ送信元に送出する（ＳＴＥＰ２６０８）。
【０１２５】
このように、キャッシュメモリ部７は、アクセス遮断状態に応じて、データ送信元のユニットに対して適切に応答することができる。
【０１２６】
以上のように、キャッシュメモリ部７内で障害が発生した場合、障害部位が特定されるまでの間、誤動作を引き起こす可能性のあるメモリモジュール７２に対するアクセスを遮断することができるようになる。また、障害部位が特定された後は、正常なメモリモジュール７２のみが使用されることになる。従って、ストレージシステム１のデータストレージサービスに対する信頼性、可用性が向上することになる。
【０１２７】
本実施形態から明らかなように、本発明は、ストレージシステム１内の制御部２の障害処理のみならず、例えばキャッシュメモリ部７にも適用することができる。同様にして、ホストＩ／Ｆ部４やディスクＩ／Ｆ部６にも適用することができる。
［第３の実施形態］
【０１２８】
本実施形態は、多重化構成された制御部２のフェイルオーバ／フェイルバックメカニズムについて説明している。具体的には、本実施形態は、制御部２の一方において障害が発生した場合に、当該制御部２による障害処理の間、他方の制御部２に処理を引き継ぎ、当該障害処理が完了した時点で、他方の制御部２に引き継がれていた処理を当該制御部２に戻すメカニズムを説明している。
【０１２９】
図２７は、本発明の実施形態に係るストレージシステム１の構成を示す図である。同図に示すストレージシステム１は、多重化構成を採用しており、従って、制御部２、スイッチＬＳＩ３、ホストインターフェース（Ｉ／Ｆ）部４、ディスクインターフェース（Ｉ／Ｆ）部６、及びキャッシュメモリ部７がそれぞれ複数配置されている。
【０１３０】
本実施形態の制御部２の基本的構成は、上述した実施形態のそれと同じである。ただし、多重化構成されているため、各制御部２のアドレス／データ信号線２６は、複数のスイッチＬＳＩ３のそれぞれに接続されている。また、第１の信号線２７及び第２の信号線２８も、複数のスイッチＬＳＩ３のそれぞれに接続されている。本実施形態では、制御部２Ａ及び２Ｂが設けられているものとする。
【０１３１】
図２８は、本発明の実施形態に係る制御部２の制御メモリ部２２の内容を説明するための図である。
【０１３２】
制御メモリ部２２は、ストレージシステム１によるデータストレージサービスの遂行に必要な管理情報である制御データを記憶する制御データ記憶領域を有する。
【０１３３】
制御データ記憶領域には、制御部２自身が担当する論理デバイス及び物理デバイスに対する、ユーザデータとキャッシュメモリ部７上の格納位置とを対応付けるキャッシュディレクトリ情報や、ホスト装置ＨからのＩ／Ｏ要求又は当該Ｉ／Ｏ要求に対するディスクアレイ部５の処理の進捗状況が格納される。制御部２は、後述するように、制御データの更新とともに、キャッシュメモリ部７上にバックアップ（コピー）された制御データを更新する。
【０１３４】
論理デバイス（論理ボリューム）は、ホスト装置Ｈが認識する論理的なデバイスである。また、物理デバイス（物理ボリューム）は、ハードディスクドライブ等の物理的なデバイスである。図示はしないが、論理デバイスとディスクアレイ部７上の物理デバイスとは、例えば、論理デバイス／物理デバイス割当てテーブルにおいて対応付けられ、制御部２は、これを参照することにより、Ｉ／Ｏ要求で指定された論理デバイス上のアドレスを、物理デバイス上のアドレスに変換する。以下では、論理デバイス及び物理デバイスを、「ボリューム」と総称することもある。
【０１３５】
また、本実施形態では、制御メモリ部２２は、各種のプログラムを記憶するプログラム記憶領域を有する。プログラム記憶領域には、プロセッサ２１上で動作するＩ／Ｏ処理プログラムが制御データを更新する時に呼び出される制御データ更新処理プログラム、制御部２に障害が発生した際のフェイルオーバ先を決定するフェイルオーバ先決定プログラム、フェイルオーバを行なうフェイルオーバ処理プログラム、及びフェイルバックを行うフェイルバックプログラムが記憶されている。なお、これらの各プログラムの処理の詳細については後述する。
【０１３６】
図２９は、本発明の実施形態に係るストレージシステム１のホストＩ／Ｆ部４の構成を示す図である。同図に示すように、ホストＩ／Ｆ部４は、プロトコル制御部４１と、ルーティング部４２と、ルーティングテーブル４３とを含んで構成されている。
【０１３７】
プロトコル制御部４１は、図示しないポートに接続されたネットワークＮを介してホスト装置Ｈに接続される。プロトコル制御部４１は、ホスト装置Ｈとストレージシステム１との間でやりとりされるデータのプロトコル変換を行う。すなわち、プロトコル制御部４１は、ネットワークＮ上を伝送されてきたホスト装置Ｈからの外部データとしてのＩ／Ｏ要求を、ストレージシステム１内で処理するための内部データに変換し、また、Ｉ／Ｏ要求に対してホスト装置Ｈに送信すべき内部データをネットワークＮ上に伝送するために適した外部データに変換する。
【０１３８】
ルーティング部４２は、プロトコル制御部４１によりプロトコル変換されたホスト装置ＨからのＩ／Ｏ要求を、ルーティングテーブル４３に従って、適切な制御部２に転送する。
【０１３９】
ルーティングテーブル４３は、例えば論理デバイス番号と、制御部２を識別するための制御部識別子とが対応付けたテーブルである。従って、ルーティング部４２は、Ｉ／Ｏ要求で指定される論理デバイス番号に従って、当該Ｉ／Ｏ要求に基づく制御データを、当該論理デバイスに対するアクセスを受け持つ制御部２に振り分ける。
【０１４０】
図３０は、本発明の実施形態に係るストレージシステム１のホストＩ／Ｆ部４のルーティングテーブル４３の一例を示す図である。
【０１４１】
ホストＩ／Ｆ部４のルーティングテーブル４２は、ホスト装置Ｈが認識する論理デバイスを識別するための論理デバイス番号（ＬＤＥＶ  ＃）４２１と、当該論理デバイスに対するＩ／Ｏ処理を受け持つ制御部２を識別するための制御部識別子４２２とを対応付けたテーブル構造を有する。
【０１４２】
図３１は、本発明の実施形態に係るディスクＩ／Ｆ部６の構成を示す図である。ディスクＩ／Ｆ部６は、装置間でやりとりされるデータのプロトコル変換を行う点で、ホストＩ／Ｆ部４と同等の構成を有する。
【０１４３】
すなわち、プロトコル制御部６１は、図示しないポートに接続されたチャネルを介してディスクアレイ部５に接続され、ストレージシステム１内部の他のユニットとディスクアレイ部５との間でやりとりされるデータのプロトコル変換を行う。
【０１４４】
ルーティング部６２は、ディスクアレイ部５から読み出され、プロトコル制御部６１によりプロトコル変換されたユーザデータに関連付けられた制御データを、ルーティングテーブル６３に従って、適切な制御部２に転送する。
【０１４５】
図３２は、本発明の実施形態に係るディスクＩ／Ｆ部６のルーティングテーブル６３の一例を示す図である。
【０１４６】
ディスクＩ／Ｆ部６のルーティングテーブル６３は、ディスクアレイ部７の物理デバイスを識別するための物理デバイス番号（ＰＤＥＶ  ＃）と、当該物理デバイスに対するＩ／Ｏ処理を担う制御部２を識別するための制御部識別子６２２とを対応付けたテーブル構造を有する。
【０１４７】
図３３は、本発明の実施形態に係るストレージシステム１のキャッシュメモリ部７の構成を示す図である。
【０１４８】
同図に示すように、キャッシュメモリ部７は、メモリコントローラ７１と、メモリモジュール７２とを含んで構成されている。メモリコントローラ７１は、ストレージシステム１内の他のユニットからアクセス要求を受け付けて、メモリモジュール７２にアクセスするための制御を行う。メモリモジュール７２は、図２１で示したように、複数のメモリモジュールで構成されていてもよいが、ここでは、一つの連続した記憶空間として示している。メモリモジュール７２の当該記憶空間には、Ｉ／Ｏ要求に伴うユーザデータを格納するためのユーザデータ記憶領域７２１と、制御部２内で扱われる制御データをバックアップするための制御データバックアップ領域７２２と、論理デバイス又は物理デバイスであるボリュームを担当する制御部２を管理するボリューム割当てテーブル７２３と、どのボリュームをどの制御部２からどの制御部２にフェイルオーバしたかを記憶するフェイルオーバ記憶領域７２４とが形成されている。
【０１４９】
図３４は、本発明の実施形態に係るキャッシュメモリ部７の制御データバックアップ領域７２２の内容を説明するための図である。
【０１５０】
制御データバックアップ領域７２２は、ホスト装置Ｈとのデータのやり取りに使用される論理デバイスごとのバックアップ領域７２２１と、ディスクアレイ部５とのデータのやり取りに使用される物理デバイスごとのバックアップ領域７２２２を有する。各領域７２２１及び７２２２には、ユーザデータとキャッシュメモリ部７上の格納位置とを対応付けるキャッシュディレクトリ情報や、ホスト装置ＨからのＩ／Ｏ要求又は当該Ｉ／Ｏ要求に対するディスクアレイ部５の処理の進捗状況が記録される。
【０１５１】
図３５は、本発明の実施形態に係るキャッシュメモリ部７のボリューム割当てテーブル７２３の内容を説明するための図である。
【０１５２】
ボリューム割当てテーブル７２３は、どのボリューム（論理デバイス及び物理デバイス）をどの制御部２が受け持ち、また、障害発生時にどの制御部２が引き継ぐかを予め定義したテーブルである。ボリューム割当てテーブル７２３は、ボリューム番号７２３１と、そのボリューム番号７２３１で識別されるボリュームを管理する制御部２の制御部識別子７２３２と、フェイルオーバにより引き継がれる制御部２の制御部識別子７２３３とを対応付けたテーブル構造を有する。
【０１５３】
図３６は、本発明の実施形態に係るキャッシュメモリ部７のフェイルオーバボリューム記憶領域７２４の内容を説明するための図である。
【０１５４】
フェイルオーバボリューム記憶領域７２４は、フェイルオーバに関する情報、すなわち、どのボリュームをどの制御部２がどの制御部２から引き継いだかを記録する。フェイルオーバボリューム記憶領域７２４は、ボリューム番号（論理デバイス番号又は物理デバイス番号）７２４１ごとに、フェイルオーバ元の制御部２の制御部識別子７２４２と、フェイルオーバ先の制御部２の制御部識別子７２４３とを対応付けたテーブル構造を有する。
【０１５５】
次に、以上のように構成される本実施形態のストレージシステム１における障害発生時の動作例について説明する。
【０１５６】
図３７は、本発明の実施形態に係るストレージシステム１において障害が発生した場合の処理の流れを説明するためのシーケンスチャートである。より具体的には、同図は、多重化構成の制御部２Ａ及び２Ｂのいずれかにおいて障害が発生した場合の処理の流れを説明している。
【０１５７】
制御部２Ａ及び２Ｂのそれぞれは、平常時、所定のボリュームに対するＩ／Ｏ処理を受け持っている。つまり、ホストＩ／Ｆ部４及びディスクＩ／Ｆ部６のルーティングテーブル４３及び６３には、Ｉ／Ｏ要求で指定される論理デバイス又は物理デバイスに応じて当該Ｉ／Ｏを転送すべき制御部２が定義されている。
【０１５８】
今、制御部２Ａにおいて障害が発生したとする（Ｓ１）。これにより、図示はしていないが、上記実施形態で述べたように、スイッチＬＳＩ３Ａ及び３Ｂは、制御部２Ａとストレージシステム１内の他のユニットとの間の入出力パスを直ちに遮断する。
【０１５９】
制御部２Ｂは、スイッチＬＳＩ３Ａ又は３Ｂのいずれかを介して障害発生の通知を受けると、制御部Ａが受け持っていたＩ／Ｏ処理を引き継ぐためのフェイルオーバ処理を行う（Ｓ２）。従って、フェイルオーバ処理を行った制御部２Ｂは、自身が受け持っていたボリュームに対するＩ／Ｏ処理に加え、制御部２Ａが受け持っていたボリュームに対するＩ／Ｏ処理を行うことになる。
【０１６０】
一方、障害が発生した制御部２Ａは、障害処理を行って、稼働が継続可能であるか否かを判断する（Ｓ３）。制御部２Ａは、自身の稼働が継続可能な場合に、リセット処理後、フェイルバック処理を行う（Ｓ４）。これにより、制御部２Ｂに引き継がれていたＩ／Ｏ処理は、制御部２Ａに戻され、２つの制御部２Ａ及び２Ｂにより、データストレージサービスが中断されることなく、継続されることになる。
【０１６１】
図３８は、本発明の実施形態に係る制御部２における制御データ更新プログラムの動作を説明するためのフローチャートである。制御データ更新プログラムは、制御部２内のプロセッサ２１（プロセッサコア２１１）により、Ｉ／Ｏ処理に伴って、実行される。
【０１６２】
すなわち、同図に示すように、プロセッサコア２１１は、Ｉ／Ｏ処理に伴い、制御メモリ部２２に新たに制御データを格納し、又は制御メモリ部２２にすでに格納されている制御データを更新する（ＳＴＥＰ３８０１）。続いて、プロセッサコア２１１は、キャッシュメモリ部７上の制御データバックアップ領域７２２に制御データを追加し又は更新する（ＳＴＥＰ３８０２）。
【０１６３】
従って、制御メモリ部２２に格納された最新の制御データは、キャッシュメモリ８１上にバックアップされることになり、いずれかの制御部２に障害が発生したとしても、他の制御部２は、障害が発生した制御部２のＩ／Ｏ処理を引き継ぐことが可能になる。
【０１６４】
図３９は、本発明の実施形態に係る制御部２におけるフェイルオーバ先決定プログラムの処理の流れを説明するためのフローチャートである。フェイルオーバ先決定プログラムは、ストレージシステム１内に設けられた複数の制御部２のそれぞれについて、フェイルオーバによりＩ／Ｏ処理を引き継ぐべき制御部２を決定するための処理を行うプログラムであり、例えば、起動用のプロセッサコア２１１により、データストレージサービスに先立ち、実行される。
【０１６５】
すなわち、同図に示すように、プロセッサコア２１１は、ボリューム割当てテーブル７２２からエントリを一つ選択し（ＳＴＥＰ３９０１）、当該選択したエントリの制御部識別子７２３２を取得する（ＳＴＥＰ３９０２）。ボリューム割当てテーブル７２２において、ボリューム番号７２３１と制御部識別子７２３２との対応関係は、ホストＩ／Ｆ部４のルーティングテーブル４３及びディスクＩ／Ｆ部６のルーティングテーブル６３から作成されている。
【０１６６】
次に、プロセッサコア２１１は、取得した制御部識別子７２３２以外の、ストレージシステム１内に設けられた制御部２の制御部識別子７２３２を選択する（ＳＴＥＰ３９０３）。ストレージシステム１内の全ての制御部２の制御部識別子７２３２は、例えば、システム構成情報として制御メモリ部６に保持されている。続いて、プロセッサコア２１１は、当該選択した制御部識別子７２３２を、当該選択したエントリのフェイルオーバ先制御部識別子７２３３に設定する（ＳＴＥＰ３９０４）。
【０１６７】
そして、プロセッサコア２１１は、ボリューム割当てテーブル７２２における全てのエントリを、フェイルオーバ先制御部の制御部識別子７２３３を設定するために、選択したか否かを判断し（ＳＴＥＰ３９０５）、全てのエントリについて処理を行うまで、上記処理を繰り返す。
【０１６８】
従って、例えば、ストレージシステム１内に２つの制御部２Ａ及び２Ｂが設けられている場合（制御部識別子をそれぞれ「Ａ」及び「Ｂ」とする。）、制御部２Ａが受け持つボリュームに対するフェイルオーバ先は、制御部２Ｂとなり、制御部２Ｂが受け持つボリュームに対するフェイルオーバ先は、制御部２Ａとなる。
【０１６９】
図４０は、本発明の実施形態に係る制御部２におけるフェイルオーバ処理プログラムの処理の流れを説明するためのフローチャートである。フェイルオーバ処理プログラムは、いずれかの制御部２で障害が発生した場合に、正常な制御部２がＩ／Ｏ処理を引き継ぐためのものであり、障害が発生した制御部２以外の他の制御部２のプロセッサコア２１１によって、実行される。
【０１７０】
すなわち、同図に示すように、フェイルオーバ処理プログラムを実行することとなったプロセッサコア２１１は、まず、キャッシュメモリ部７に記憶されているボリューム割り当てテーブル７２２を読み出す（ＳＴＥＰ４００１）。続いて、プロセッサコア２１１は、ストレージシステム１内の全てのホストＩ／Ｆ部４及び全てのディスクＩ／Ｆ部６の中からルーティングテーブル４３又は６３を一つ選択し（ＳＴＥＰ４００２）、さらに、当該選択したルーティングテーブルの中からエントリを一つ選択する（ＳＴＥＰ４００３）。
【０１７１】
プロセッサコア２１１は、次に、ボリューム割当てテーブル７２２を参照し、選択したエントリのボリューム番号（すなわち、論理デバイス番号４２１又は物理デバイス番号６３１）と一致する、ボリューム割当てテーブル７２２のエントリを検索する（ＳＴＥＰ４００４）。
【０１７２】
次に、プロセッサコア２１１は、障害が発生した制御部２の制御部識別子と検索されたエントリの制御部識別子７２３２とが一致するか否かを判断する（ＳＴＥＰ４００５）。これは、障害が発生した制御部２が受け持つボリュームを特定するためである。障害が発生した制御部２の制御部識別子と検索されたエントリの制御部識別子７２３２とが一致しないと判断する場合（ＳＴＥＰ４００５のＮｏ）、プロセッサコア２１１は、未処理のエントリを選択するために、ＳＴＥＰ４００３に戻る（ＳＴＥＰ４０１０のＮｏ）。
【０１７３】
障害が発生した制御部２の制御部識別子と検索されたエントリの制御部識別子７２３２とが一致すると判断する場合（ＳＴＥＰ４００５のＹｅｓ）、プロセッサコア２１１は、さらに、自身の制御部２の制御部識別子と検索されたエントリのフェイルオーバ先制御部識別子７２３３とが一致するか否かを判断する（ＳＴＥＰ４００６）。これは、自身の制御部２がフェイルオーバ先として定義されているか否かを判断するためである。自身の制御部２の制御部識別子と検索されたエントリのフェイルオーバ先制御部識別子７２３３とが一致しないと判断する場合、プロセッサコア２１１は、未処理のエントリを選択するために、ＳＴＥＰ４００３に戻る（ＳＴＥＰ４０１０のＮｏ）。
【０１７４】
これに対して、自身の制御部２の制御部識別子と検索されたエントリのフェイルオーバ先制御部識別子７２３３とが一致すると判断する場合、プロセッサコア２１１は、当該ルーティングテーブル４３又は６３における選択したエントリを自身の制御部識別子で書き換える（ＳＴＥＰ４００７）。これにより、障害が発生した制御部２が受け持っていたボリュームに対するＩ／Ｏ処理は、自身の制御部２に振り分けられることになる。続いて、プロセッサコア２１１は、当該選択したエントリのボリューム番号に対する制御データをキャッシュメモリ部７から読み出して、自身の制御メモリ部２２に書き込む（ＳＴＥＰ４００８）。
【０１７５】
さらに、プロセッサコア２１１は、書き換えたルーティングテーブル４３又は６３のエントリの内容をキャッシュメモリ部７上のフェイルオーバボリューム記憶領域７２４に記録する（ＳＴＥＰ４００８）。
【０１７６】
そして、プロセッサコア２１１は、選択したルーティングテーブルの全てのエントリを選択したか否かを判断し（ＳＴＥＰ４０１０）、まだ選択していないエントリがある場合には（ＳＴＥＰ４００９のＮｏ）、全てのエントリについて処理するまで、上記処理を繰り返す。
【０１７７】
選択したルーティングテーブルの全てのエントリを選択した場合（ＳＴＥＰ４０１０のＹｅｓ）、プロセッサコア２１１は、全てのホストＩ／Ｆ部４及びディスクＩ／Ｆ部６を選択したか否かを判断する（ＳＴＥＰ４０１１）。プロセッサコア２１１は、まだ、選択していないホストＩ／Ｆ部４又はディスクＩ／Ｆ部６がある場合には、上記処理を繰り返す。
【０１７８】
図４１は、本発明の実施形態に係る制御部２におけるフェイルバック処理プログラムの動作を説明するためのフローチャートである。フェイルバック処理プログラムは、障害処理の終了により、稼働の継続が可能になった制御部２が、フェイルオーバ処理により一時的にＩ／Ｏ処理を引き継いでいた他の制御部２から当該Ｉ／Ｏ処理を引き戻すための処理を行うプログラムである。フェイルバック処理プログラムは、障害処理プログラムの終了後、起動プログラムから呼び出される。
【０１７９】
フェイルバック処理プログラムを実行するプロセッサコア２１１は、キャッシュメモリ部７に記憶されたフェイルオーバボリューム記憶領域７２４からエントリを一つ選択する（ＳＴＥＰ４１０１）。プロセッサコア２１１は、次に、フェイルオーバ元制御部２の制御部識別子７２４２と自身の制御部識別子とが一致するか否かを判断する（ＳＴＥＰ４１０２）。プロセッサコア２１１は、フェイルオーバ元制御部２の制御部識別子７２４２と自身の制御部識別子とが一致しないと判断する場合（ＳＴＥＰ４１０２のＮｏ）、未処理のエントリを選択するためにＳＴＥＰ４１０１の処理に戻る（ＳＴＥＰ４１０６のＮｏ）。
【０１８０】
これに対して、フェイルオーバ元制御部２の制御部識別子７２４２と自身の制御部識別子とが一致すると判断する場合（ＳＴＥＰ４１０２のＹｅｓ）、プロセッサコア２１１は、フェイルオーバボリューム記憶領域７２４のボリューム番号７２４１と一致する、ホストＩ／Ｆ部４のルーティングテーブル４３及びディスクインターフェース部６のルーティングテーブル６３のエントリを検索し（ＳＴＥＰ４１０３）、当該検索されたエントリを自身の制御部識別子で書き換える（ＳＴＥＰ４１０４）。
【０１８１】
プロセッサコア２１１は、さらに、該当するボリューム番号に対する制御データを、キャッシュメモリ部７の制御データバックアップ領域７２２に格納された該当するボリューム番号に対する制御データを、制御メモリ部６の制御データ領域に転送する（ＳＴＥＰ４１０５）。
【０１８２】
そして、プロセッサコア２１１は、フェイルオーバ記憶領域７２４の全てのエントリを選択したか否かを判断し（ＳＴＥＰ４１０６）、全てのエントリを選択するまで上記処理を繰り返す（ＳＴＥＰ４１０６のＮｏ）。
【０１８３】
これにより、ホストＩ／Ｆ部４のルーティングテーブル４３及びディスクインターフェース部６のルーティングテーブル６３は、フェイルオーバ処理前の状態に戻ることになり、障害が発生し、障害処理を行った制御部２は、Ｉ／Ｏ処理を再開することができるようになる。
【０１８４】
以上のように、本実施形態によれば、多重化構成された制御部２のいずれかに障害が発生した場合であっても、これを検出したスイッチＬＳＩ１３が、当該障害が発生した制御部２との入出力パスを直ちに遮断するので、誤動作等によりストレージシステム１内の他のユニットに対する影響を阻止することができるようになる。
【０１８５】
また、障害が発生していない他の制御部２は、当該障害が発生した制御部２が受け持っていたＩ／Ｏ処理を引き継ぐので、ストレージシステム１全体としてのデータストレージサービスを停止させることなく、継続することができる。
【０１８６】
さらに、当該障害が発生した制御部２は、Ｉ／Ｏ処理を引き継いでもらっている間に、障害処理を行い、その結果、稼働が継続可能な場合には、当該引き継いでもらっていたＩ／Ｏ処理を引き戻すことで、ストレージシステム全体としての高いパフォーマンスを維持することができるようになる。
［第４の実施形態］
【０１８７】
本実施形態は、多重化された制御部２を含むストレージシステム１において、稼働率（負荷）の高い制御部２のＩ／Ｏ処理を稼働率の低い制御部２に引き継いでもらうことで、制御部２間の負荷を均等化することを特徴とする。従って、ある制御部２で障害が発生し、上記実施形態で述べたようなフェイルオーバ処理によって、障害が発生した制御部２のＩ／Ｏ処理を引き継いだ制御部２は、一時的に、負荷が高い状況が考えられる。このような場合であっても、フェイルオーバ処理によってＩ／Ｏ処理を引き継いだ制御部２が、負荷の低い制御部２がＩ／Ｏ処理を引き継ぐように制御することで、負荷が特定の制御部２に集中する事態を回避できるようになる。
【０１８８】
図４２は、本発明の実施形態に係るストレージシステム１の構成を示す図である。同図に示すように、本実施形態のストレージシステム１においては、各ユニットは多重化されている。本例では、４つの制御部２及び４つのスイッチＬＳＩ３が設けられ、これらはアドレス／データ線２６を介して互いに接続されている。また、図の簡略のため省略されているが、各スイッチＬＳＩ３は、各制御部２の第１のエラー信号線２７及び第２のエラー信号２８を受けている。障害発生時には、上記実施形態同様、スイッチＬＳＩ３は、障害が発生した制御部２との入出力パスを遮断し、障害が発生した制御部２は、障害処理を行って、稼働を再開する。この場合、障害が発生した制御部２のＩ／Ｏ処理は、他の制御部２に一時的に引き継がれ、障害処理後、稼働を再開した制御部２に戻される。
【０１８９】
本実施形態の各ユニット内部の基本的構成は、上記実施形態のものと同様であるが、各制御部２の負荷状況に従ってＩ／Ｏ処理を振り分けるためのいくつかのメカニズム乃至は機能が実装されている。
【０１９０】
図４３は、本発明の実施形態に係る制御部２の制御メモリ部２２の内容を説明するための図である。同図に示すように、本実施形態の制御メモリ部２２には、上記第３の実施形態で説明された内容に加え、さらに、負荷均等化プログラム、Ｉ／Ｏ処理引き継ぎプログラム、及びフェイルオーバ負荷分散プログラムが記憶されている。
【０１９１】
負荷均等化プログラムは、各制御部２が行うＩ／Ｏ処理の量を制御部２間で均等化して、特定の制御部２の処理性能が限界に到達することを防ぐプログラムである。負荷均等化プログラムは、フェイルオーバ負荷分散プログラムによって呼び出され、実行されるが、平常時において常に実行されてもよい。
【０１９２】
また、Ｉ／Ｏ処理引き継ぎプログラムは、制御部２間でＩ／Ｏ処理の一部を引き継ぐための処理を行うプログラムである。
【０１９３】
そして、フェイルオーバ負荷分散プログラムは、フェイルオーバ処理によりＩ／Ｏ処理を一時的に引き継いだ制御部２の負荷が高くならないように、Ｉ／Ｏ処理を振り分けて負荷の分散を行うプログラムである。
【０１９４】
図４４は、本発明の実施形態に係るキャッシュメモリ部７の内容を説明するための図である。同図に示すように、キャッシュメモリ部７は、上記実施形態で説明した内容に加え、負荷記録テーブル７２５を保持している。
【０１９５】
図４５は、本発明の実施形態に係るキャッシュメモリ部７の負荷記録テーブル７２５の一例を示す図である。負荷記録テーブル７２５は、各制御部２についての稼働率を示し、制御部識別子７２５１と、稼働率７２５２とを対応付けたテーブル構造を有する。負荷記録テーブル７２５は、制御部２のプロセッサコア２１１によって更新される。例えば、制御部２内のプロセッサコア２１１は、定期的に、自身のプロセッサ２１の稼働率（ＣＰＵ負荷率）を算出して、キャッシュメモリ部７の負荷記録テーブル７２５に書き込む。あるいは、ホストＩ／Ｆ部４が、ホスト装置Ｈから受け取ったＩ／Ｏ要求の数に基づいて稼働率を算出し、キャッシュメモリ部７の負荷記録テーブル７２５に書き込むようにしてもよい。
【０１９６】
図４６は、本発明の実施形態に係る制御部２における負荷均等化プログラムの動作を説明するためのフローチャートである。負荷均等化プログラムは、各制御部２が行うＩ／Ｏ処理の量（負荷）に偏っているか否かを判断し、偏っている場合には、Ｉ／Ｏ処理の一部が他の制御部２に移行されるように制御する。
【０１９７】
同図に示すように、負荷均等化プログラムを実行するプロセッサコア２１１は、キャッシュメモリ部７上の負荷記録テーブル７２５を読み出す（ＳＴＥＰ４６０１）。プロセッサコア２１１は、次に、読み出した負荷記録テーブル７２５を参照して、自身の制御部２の稼働率７２５２が所定のしきい値以上であるか否かを判断する（ＳＴＥＰ４６０２）。自身の制御部２の稼働率が所定のしきい値以上であると判断する場合（ＳＴＥＰ４６０２のＹｅｓ）、ホストＩ／Ｆ部４のルーティングテーブル４３又はディスクＩ／Ｆ部６のルーティングテーブル６３を参照して、自身が受け持っているボリュームを一つ選択する（ＳＴＥＰ４６０３）。
【０１９８】
次に、プロセッサコア２１１は、負荷記録テーブル７２５から稼働率７２５２が低い制御部２を一つ選択する（ＳＴＥＰ４６０４）。この場合、稼働率が最低の制御部２が選択されることが好ましいが、例えば、所定の下限値を下回る稼働率の制御部２の中からランダムに一の制御部２を選択するようにしてもよい。
【０１９９】
そして、プロセッサコア２１１は、当該選択したボリュームに対するＩ／Ｏ処理を引き継ぐように、スイッチＬＳＩ３を介して、当該選択した制御部２に対して引き継ぎ指示を送出する（ＳＴＥＰ４６０４）。プロセッサコア２１は、自身の稼働率が所定のしきい値を下回るまで、上記処理を繰り返す。
【０２００】
図４７は、本発明の実施形態に係る制御部２におけるＩ／Ｏ処理引き継ぎプログラムの動作を説明するためのフローチャートである。Ｉ／Ｏ処理引き継ぎプログラムは、稼働率が高い制御部２のプロセッサコア２１１からの引き継ぎ指示に従い、Ｉ／Ｏ処理を引き継ぐための処理を行うプログラムであり、当該引き継ぎ指示を受けた制御部２のプロセッサコア２１１によって実行される。
【０２０１】
すなわち、同図に示すように、負荷均等化プログラムを実行する制御部２から引き継ぎ指示を受けた制御部２のプロセッサコア２１１は、ホストＩ／Ｆ部４のルーティングテーブル４３及びディスクＩ／Ｆ部６のルーティングテーブル６３における、負荷均等化プログラムの実行により選択されたボリュームのボリューム番号を含むエントリを、自身の制御部２の制御部識別子で書き換える（ＳＴＥＰ４７０１）。
【０２０２】
次に、プロセッサコア２１１は、当該ボリュームボリュームに対する制御データを、キャッシュメモリ部７から読み出して、制御メモリ部２２に転送する。
【０２０３】
そして、プロセッサコア２１１は、ルーティングテーブル４３及び６４における書き換えたエントリに基づいて、キャッシュボリューム割当てテーブル７２５を更新する（ＳＴＥＰ４７０３）。
【０２０４】
図４８は、本発明の実施形態に係る制御部２におけるフェイルオーバ負荷分散プログラムの動作を説明するためのフローチャートである。フェイルオーバ負荷分散プログラムは、障害が発生した制御部２からフェイルオーバ処理によりＩ／Ｏ処理を引き継いだ制御部２が、必要に応じて、負荷分散を行うためのプログラムである。
【０２０５】
Ｉ／Ｏ処理を引き継いだ制御部２は、自身が元々受け持つＩ／Ｏ処理に加え、引き継いだＩ／Ｏ処理を受け持つことになり、従って、稼働率が高くなり、レスポンス性能の低下を引き起こすおそれがある。特に、障害が発生した制御部２が、再稼働できなかった場合には、引き継いだＩ／Ｏ処理をさらに他の制御部２に振り分ける必要がある。このため、Ｉ／Ｏ処理を引き継いだ制御部２は、所定の条件の下、負荷均等化処理を行って、制御部２間でＩ／Ｏ処理の均等化を図る。
【０２０６】
すなわち、同図に示すように、Ｉ／Ｏ処理を引き継いだ制御部２のプロセッサコア２１１は、障害が発生した制御部２が、フェイルバック処理を行って、再稼働したか否かを判断する（ＳＴＥＰ４８０１）。障害が発生した制御部２が再稼働したと判断する場合（ＳＴＥＰ４８０１のＹｅｓ）、プロセッサコア２１１は、続いて、フェイルオーバ処理が行われてから所定の時間が経過したか否かを判断する（ＳＴＥＰ４８０２）。所定の時間が経過していないと判断する場合には（ＳＴＥＰ４８０２のＮｏ）、プロセッサコア２１１は、障害が発生した制御部２が再稼働を待つ。
【０２０７】
これに対して、所定の時間が経過した場合、障害が発生した制御部２は、稼働可能部位がなく、従って、再稼働できなかったものとして、プロセッサコア２１１は、負荷均等化処理プログラムを実行する（ＳＴＥＰ４８０３）。
【０２０８】
これにより、フェイルオーバ処理によってＩ／Ｏ処理を引き継いだ制御部２は、自身の稼働率が所定のしきい値以上であれば、自身が受け持っているボリュームの一部に対するＩ／Ｏ処理を他の制御部２に割り振ることにより、負荷の均等化を図ることができるようになる。
【０２０９】
従って、複数の制御部２を備えるストレージシステム１においてある制御部２に障害が発生した場合であっても、障害が発生した制御部２以外の制御部２が、Ｉ／Ｏ処理を引き継ぐことにより、データストレージサービスを停止させることなく、継続させることができるようになる。
【０２１０】
また、障害が発生した制御部２以外の制御部２がＩ／Ｏ処理を引き継いでいる間に、障害が発生した制御部２は、障害処理を行って、再稼働可能であるか否かを判断する。この場合、再稼働可能であれば、障害が発生した制御部２は、引き継いでもらったＩ／Ｏ処理を引き戻すことで、負荷の均等化に寄与することになる。一方、再稼働可能でない場合は、Ｉ／Ｏ処理を引き継いだ制御部２は、負荷均等化処理を行うことで、制御部２間で負荷の均等化を図り、これによって、システムパフォーマンスの低下を招くことなく、データストレージサービスを継続させることができるようになる。
【産業上の利用可能性】
【０２１１】
本発明は、データを格納するためのストレージシステムに広く適用することができる。
【図面の簡単な説明】
【０２１２】
【図１】本発明の実施形態に係るストレージシステムの構成を示す図である。
【図２】本発明の実施形態に係る制御部内のプロセッサの概略構成を示す図である。
【図３】本発明の実施形態に係る制御部内の不揮発性メモリ部の内容を示す図である。
【図４】本発明の実施形態に係る制御部内のチップセット内に設けられたレジスタを説明するための図である。
【図５】本発明の実施形態に係るスイッチＬＳＩの構成を示す図である。
【図６】本発明の実施形態に係る障害処理プログラムが有する処理乃至は機能を列挙している。
【図７】本発明の実施形態に係る制御部内のプロセッサに設けられた障害要因レジスタの一例を示す図である。
【図８】本発明の実施形態に係る制御部内の不揮発性メモリ部に格納された閉塞部位管理テーブルの一例を示す図である。
【図９】本発明の実施形態に係る制御部内のチップセットに設けられた障害要因レジスタの一例を示す図である。
【図１０】本発明の実施形態に係る制御部内のチップセットに設けられた部位有効化レジスタの構成の一例を示す図である。
【図１１】本発明の実施形態に係るストレージシステムにおいて障害が発生した場合の処理の流れを説明するためのシーケンスチャートである。
【図１２】本発明の実施形態に係る障害処理プログラムを説明するための全体フローチャートである。
【図１３】本発明の実施形態に係る障害処理プログラムにおける自己診断処理を説明するためのフローチャートである。
【図１４】本発明の実施形態に係る障害処理プログラムにおける他プロセッサコア診断処理を説明するためのフローチャートである。
【図１５】本発明の実施形態に係る障害処理プログラムにおける障害部位特定処理を説明するためのフローチャートである。
【図１６】本発明の実施形態に係る障害処理プログラムにおける稼働可能判定処理を説明するためのフローチャートである。
【図１７】本発明の実施形態に係る障害処理プログラムにおける動作モード設定処理を説明するためのフローチャートである。
【図１８】本発明の実施形態に係る起動プログラムを説明するためのフローチャートである。
【図１９】本発明の実施形態に係るスイッチＬＳＩの遮断処理を説明するためのフローチャートである。
【図２０】本発明の実施形態に係るスイッチＬＳＩのルーティング部の動作を説明するためのフローチャートである。
【図２１】本発明の実施形態に係るキャッシュメモリ部の構成を示す図である。
【図２２】本発明の実施形態に係るキャッシュメモリ部のメモリコントローラの構成を示す図である。
【図２３】本発明の実施形態に係るキャッシュメモリ部の閉塞部位管理テーブルの一例を示す図である。
【図２４】本発明の実施形態に係るキャッシュメモリ部の障害検出部の動作を説明するためのフローチャートである。
【図２５】本発明の実施形態に係るキャッシュメモリ部の障害部位特定部の動作を説明するためのフローチャートである。
【図２６】本発明の実施形態に係るキャッシュメモリ部のコマンド変換部の動作を説明するためのフローチャートである。
【図２７】本発明の実施形態に係るストレージシステムの構成を示す図である。
【図２８】本発明の実施形態に係る制御部の制御メモリ部の内容を説明するための図である。
【図２９】本発明の実施形態に係るストレージシステムのホストＩ／Ｆ部の構成を示す図である。
【図３０】本発明の実施形態に係るホストＩ／Ｆ部のルーティングテーブルの一例を示す図である。
【図３１】本発明の実施形態に係るストレージシステムのディスクＩ／Ｆ部の構成を示す図である。
【図３２】本発明の実施形態に係るディスクＩ／Ｆ部のルーティングテーブルの一例を示す図である。
【図３３】本発明の実施形態に係るストレージシステムのキャッシュメモリ部の構成を示す図である。
【図３４】本発明の実施形態に係るキャッシュメモリ部の制御データバックアップ領域の内容を説明するための図である。
【図３５】本発明の実施形態に係るキャッシュメモリ部のボリューム割当てテーブルの内容を説明するための図である。
【図３６】本発明の実施形態に係るキャッシュメモリ部のフェイルオーバボリューム記憶領域の内容を説明するための図である。
【図３７】本発明の実施形態に係るストレージシステムにおいて障害が発生した場合の処理の流れを説明するためのシーケンスチャートである。
【図３８】本発明の実施形態に係る制御部における制御データ更新プログラムの動作を説明するためのフローチャートである。
【図３９】本発明の実施形態に係る制御部におけるフェイルオーバ先決定プログラムの処理の流れを説明するためのフローチャートである。
【図４０】本発明の実施形態に係る制御部におけるフェイルオーバ処理プログラムの処理の流れを説明するためのフローチャートである。
【図４１】本発明の実施形態に係る制御部におけるフェイルバック処理プログラムの動作を説明するためのフローチャートである。
【図４２】本発明の実施形態に係るストレージシステムの構成を示す図である。
【図４３】本発明の実施形態に係る制御部の制御メモリ部の内容を説明するための図である。
【図４４】本発明の実施形態に係るキャッシュメモリ部の内容を説明するための図である。
【図４５】本発明の実施形態に係るキャッシュメモリ部の負荷記録テーブルの一例を示す図である。
【図４６】本発明の実施形態に係る制御部における負荷均等化プログラムの動作を説明するためのフローチャートである。
【図４７】本発明の実施形態に係る制御部におけるＩ／Ｏ処理引き継ぎプログラムの動作を説明するためのフローチャートである。
【図４８】本発明の実施形態に係る制御部２におけるフェイルオーバ負荷分散プログラムの動作を説明するためのフローチャートである。
【符号の説明】
【０２１３】
１…ストレージシステム
２…制御部
２１…プロセッサ
２２…制御メモリ部
２３…不揮発性メモリ部
２４…チップセット
２５…フロントサイドバス
２６…アドレス／データ信号線
２７…第１のエラー信号線
２８…第２のエラー信号線
３…スイッチＬＳＩ
４…ホストインターフェース部
５…ディスクアレイ部
６…ディスクインターフェース部
７…キャッシュメモリ部
８…内部ネットワーク
【図１】
0004475598.tif 000002
【図２】
0004475598.tif 000003
【図３】
0004475598.tif 000004
【図４】
0004475598.tif 000005
【図５】
0004475598.tif 000006
【図６】
0004475598.tif 000007
【図７】
0004475598.tif 000008
【図８】
0004475598.tif 000009
【図９】
0004475598.tif 000010
【図１０】
0004475598.tif 000011
【図１１】
0004475598.tif 000012
【図１２】
0004475598.tif 000013
【図１３】
0004475598.tif 000014
【図１４】
0004475598.tif 000015
【図１５】
0004475598.tif 000016
【図１６】
0004475598.tif 000017
【図１７】
0004475598.tif 000018
【図１８】
0004475598.tif 000019
【図１９】
0004475598.tif 000020
【図２０】
0004475598.tif 000021
【図２１】
0004475598.tif 000022
【図２２】
0004475598.tif 000023
【図２３】
0004475598.tif 000024
【図２４】
0004475598.tif 000025
【図２５】
0004475598.tif 000026
【図２６】
0004475598.tif 000027
【図２７】
0004475598.tif 000028
【図２８】
0004475598.tif 000029
【図２９】
0004475598.tif 000030
【図３０】
0004475598.tif 000031
【図３１】
0004475598.tif 000032
【図３２】
0004475598.tif 000033
【図３３】
0004475598.tif 000034
【図３４】
0004475598.tif 000035
【図３５】
0004475598.tif 000036
【図３６】
0004475598.tif 000037
【図３７】
0004475598.tif 000038
【図３８】
0004475598.tif 000039
【図３９】
0004475598.tif 000040
【図４０】
0004475598.tif 000041
【図４１】
0004475598.tif 000042
【図４２】
0004475598.tif 000043
【図４３】
0004475598.tif 000044
【図４４】
0004475598.tif 000045
【図４５】
0004475598.tif 000046
【図４６】
0004475598.tif 000047
【図４７】
0004475598.tif 000048
【図４８】
0004475598.tif 000049