(57)【特許請求の範囲】
【請求項１】
Ｉ／Ｏ処理要求を出力するＣＰＵサブシステムと、前記Ｉ／Ｏ処理要求に応じてＩ／Ｏ処理を行うＩＯサブシステムと、前記ＣＰＵサブシステムおよび前記ＩＯサブシステムに接続され、１つのマスタＦＴ制御ＬＳＩと１つまたは複数のスレーブＦＴ制御ＬＳＩと、を具備するＦＴ制御部と、を具備するモジュールを複数具備する耐故障システムであって、
前記ＩＯサブシステムのいずれか１つがアクティブ側に設定され、他のＩＯサブシステムはスタンバイ側に設定され、
前記スレーブＦＴ制御ＬＳＩの各々は、当該スレーブＦＴ制御ＬＳＩに接続される前記ＣＰＵサブシステムまたは当該スレーブＦＴ制御ＬＳＩに接続される前記ＩＯサブシステムから故障情報が出力されると故障情報取得を示すステータス情報をマスタＦＴ制御ＬＳＩに出力し、また、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがアクティブ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとから同一のＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムに出力し、当該ＩＯサブシステムからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとに前記レスポンスを出力し、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがスタンバイ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムからＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを他のモジュールに出力し、他のモジュールからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムに当該レスポンスを出力し、
前記マスタＦＴ制御ＬＳＩは、前記スレーブＦＴ制御ＬＳＩから出力される前記ステータス情報に基づいて、故障したサブシステムに対する切り離し制御を行うコマンドを決定して前記スレーブＦＴ制御ＬＳＩに出力し、
前記スレーブＦＴ制御ＬＳＩは、前記コマンドに基づいて、故障したサブシステムに対する切り離し制御を行う、
ことを特徴とする耐故障システム。
【請求項２】
前記マスタＦＴ制御ＬＳＩと複数の前記スレーブＦＴ制御ＬＳＩとがリンク構造の経路にて接続され、
前記マスタＦＴ制御ＬＳＩは、前記リンク構造の経路を介して前記コマンドを前記スレーブＦＴ制御ＬＳＩに出力し、
前記スレーブＦＴ制御ＬＳＩは、前記リンク構造の経路を介して前記故障情報を前記マスタＦＴ制御ＬＳＩに出力する、
ことを特徴とする請求項１に記載の耐故障システム。
【請求項３】
前記マスタＦＴ制御ＬＳＩは、前記コマンドと当該コマンドを実行すべきタイミングを示す情報とを含むパケットを前記スレーブＦＴ制御ＬＳＩに出力し、
前記スレーブＦＴ制御ＬＳＩは、前記情報の示すタイミングにて前記コマンドを実行する、
ことを特徴とする請求項１または請求項２に記載の耐故障システム。
【請求項４】
耐故障システムの耐故障制御を行うマスタＦＴ制御ＬＳＩであって、
スレーブＦＴ制御ＬＳＩに接続可能であり、接続されたスレーブＦＴ制御ＬＳＩから出力される故障情報を取得するシンクバス入力部と、
シンクバス入力部が取得する故障情報に基づいて、故障したサブシステムに対する切り離し制御を行うコマンドを決定するマスタＦＴコントローラと、
接続する前記スレーブＦＴ制御ＬＳＩに、前記マスタＦＴコントローラが決定した前記コマンドを出力するシンクバス出力部と、
を具備することを特徴とするマスタＦＴ制御ＬＳＩ。
【請求項５】
耐故障システムの耐故障制御を行うスレーブＦＴ制御ＬＳＩであって、
マスタＦＴ制御ＬＳＩに接続可能であり、サブシステムから出力される故障情報を、接続する前記マスタＦＴ制御ＬＳＩに出力するシンクバス出力部と、
前記マスタＦＴ制御ＬＳＩから出力されるコマンドに基づいて、故障したサブシステムに対する切り離し制御を行うスレーブＦＴコントローラと、
を具備することを特徴とするスレーブＦＴ制御ＬＳＩ。
【請求項６】
Ｉ／Ｏ処理要求を出力するＣＰＵサブシステムと、前記Ｉ／Ｏ処理要求に応じてＩ／Ｏ処理を行うＩＯサブシステムと、前記ＣＰＵサブシステムおよび前記ＩＯサブシステムに接続され、１つのマスタＦＴ制御ＬＳＩと１つまたは複数のスレーブＦＴ制御ＬＳＩと、を具備するＦＴ制御部と、を具備するモジュールを複数具備し、前記ＩＯサブシステムのいずれか１つがアクティブ側に設定され、他のＩＯサブシステムはスタンバイ側に設定されている耐故障システムの耐故障制御方法であって、
前記スレーブＦＴ制御ＬＳＩの各々が、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがアクティブ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとから同一のＩ／Ｏ処理要求が出力されると、１つの当該Ｉ／Ｏ処理要求を、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムに出力し、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがスタンバイ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムからＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを他のモジュールに出力するＩ／Ｏ処理要求転送ステップと、
前記スレーブＦＴ制御ＬＳＩの各々が、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがアクティブ側に設定されているときは、当該ＩＯサブシステムからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとに前記レスポンスを出力し、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがスタンバイ側に設定されているときは、他のモジュールからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムに当該レスポンスを出力するレスポンス転送ステップと、
前記スレーブＦＴ制御ＬＳＩの各々が、当該スレーブＦＴ制御ＬＳＩに接続される前記ＣＰＵサブシステムまたは当該スレーブＦＴ制御ＬＳＩに接続される前記ＩＯサブシステムから故障情報が出力されると故障情報取得を示すステータス情報をマスタＦＴ制御ＬＳＩに出力するステータス情報出力ステップと、
前記マスタＦＴ制御ＬＳＩが、前記スレーブＦＴ制御ＬＳＩから出力される前記ステータス情報に基づいて、故障したサブシステムに対する切り離し制御を行うコマンドを決定して前記スレーブＦＴ制御ＬＳＩに出力するコマンド出力ステップと、
前記スレーブＦＴ制御ＬＳＩが、前記コマンドに基づいて、故障したサブシステムに対する切り離し制御を行う切り離し実行ステップと、
を具備することを特徴とする耐故障制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多重化されたサブシステムを具備する耐故障システム、前記耐故障システムにおける耐故障制御を行うマスタＦＴ制御ＬＳＩとスレーブＦＴ制御ＬＳＩ、および、前記耐故障システムにおける耐故障制御方法に関する。
【背景技術】
【０００２】
高度な信頼性を提供するコンピュータ・システムとして、耐故障システム（フォールト・トレラント・システム、Fault Tolerant System。以下「ＦＴシステム」と称する）がある。例えば、特許文献１では、二重化のための機能を有しない既存のＯＳ等を用いて、ＣＰＵと、ＶＧＡデバイス等のＩ／Ｏデバイスとが二重化されたＦＴシステムを構築する技術が示されている。この技術では、障害発生時に、ＣＰＵから発せられるリクエストのアドレスをルーティング・コントローラが書き換える等の処理を行うことにより、二重化をＯＳに対して隠蔽する。
【０００３】
一般に、ＦＴシステムでは、システムを構成するハードウェア・モジュール（Hardware Module）が多重化されており、全てのモジュールが同期動作している。そして、ある部位で故障が発生すると、ＦＴシステムは、故障したモジュールを切り離し、正常なモジュールで処理を続行する。
ここで、ＦＴシステムの基本構成は、ＣＰＵやメモリやＩ／Ｏデバイスなど、二重化されるハードウェア・モジュールと、これらのモジュールと接続され、同期動作処理や故障時の切り替え制御などの耐故障制御（フォールト・トレラント制御）を行うフォールト・トレラント制御部（以下、「ＦＴ制御部」と称する）からなる。
【０００４】
図９は、ＦＴシステムの概略構成例を示すブロック図である。同図のＦＴシステム１００１では、ＣＰＵ１１２０とメインメモリ１１１０とＩＯハブ１１３０とが、１つのＣＰＵサブシステムを構成し、これと同じ構成の、もう１つのＣＰＵサブシステム１６００により、ＣＰＵサブシステムが二重化されている。同様に、ＩＯデバイス１３１０〜１３３０が、１つのＩ／Ｏサブシステム１３００を構成し、これと同じ構成の、もう１つのＩ／Ｏサブシステム１８００により、Ｉ／Ｏサブシステムが二重化されている。
【０００５】
ＦＴ制御部１２００は、各々のサブシステム（ＣＰＵサブシステム１１００およびＩ／Ｏサブシステム１３００）の中間に位置し、サブシステム間の入出力を制御するとともに、もう一方のモジュールのＦＴ制御部１７００との接続により、サブシステムの両系同期動作の維持と、故障の検出と、故障モジュールの切り離し制御とを行う。
【０００６】
ＦＴシステムにおける切り離し制御方法には様々な形態があるが、一般に、ＦＴシステムは各モジュール内において、ハードウェアで切り離し制御する部分と、ソフトウェアで切り離し制御する部分とを有する。
例えば、ＣＰＵ１１２０やメインメモリ１１１０などを含むＣＰＵサブシステム１１００は、ＣＰＵサブシステム自体が、ソフトウェアを実行する基盤であることから、ハードウェアで切り離し制御される。ＣＰＵサブシステム１１００内でエラーが発生した場合、正常動作している側のＣＰＵサブシステム１６００に影響を及ぼさないよう、ハードウェア（ＦＴ制御部１２００）が、エラー発生側のＣＰＵサブシステム１１００をＦＴシステム１００１から切り離す。
【０００７】
また、２個のＣＰＵサブシステム１１００および１６００は、クロックレベルで同期して同一の動作（以下では、この同一の動作を「ロックステップ」（Lock Step）と称する）を行っており、一方が故障した場合、ＦＴ制御部１２００および１７００が、故障したＣＰＵサブシステムをＦＴシステム１００１から論理的に切り離す。そして、ＦＴシステム１００１は、残った１個のＣＰＵサブシステムで動作を継続する。
【０００８】
一方、Ｉ／Ｏデバイスが故障した場合、当該Ｉ／Ｏデバイスの切り替えをソフトウェアで行うことが可能である。例えば、ＩＯデバイス１３１０が故障した場合、この故障を検出したＦＴ制御部１２００が、Ｉ／Ｏデバイス１３１０の制御を行っているソフトウェア（以下では、このソフトウェアを「Ｉ／Ｏデバイス・ドライバ」と称する）に対してエラー通知を行う。そして、Ｉ／Ｏデバイス・ドライバは故障したＩ／Ｏデバイス１３１０の使用を中止し、二重化されている別のＩ／Ｏデバイス１８１０を使用する。
【０００９】
ここで、２個のＩ／Ｏサブシステム１３００および１８００は、使用されている側（以下では、「アクティブ側」と称する）のＩ／Ｏサブシステムと、待機している側（以下では、「スタンバイ側」と称する）のＩ／Ｏサブシステムとに別れる。そして、正常動作時には、両方のＩ／Ｏサブシステム１３００および１８００が、アクセス可能となっている。一方、故障時には、ＦＴ制御部１２００および１７００が、故障したＩ／Ｏサブシステムを切り離し、別のＩ／Ｏサブシステムに切り替える。この切替処理はフェイルオーバと呼ばれる。
【００１０】
前述の通り、双方のＣＰＵサブシステム１１００および１６００は、同一の動作（ロックステップ動作）をしており、なおかつ両方のＩ／Ｏサブシステム１３００および１８００がアクセス可能状態にある。そして、ＦＴ制御部１２００および１７００は、自モジュール内のＣＰＵサブシステムから発行されるＩ／Ｏ処理要求（Ｉ／Ｏトランザクション）を受け、２つのＩ／Ｏサブシステム１３００および１８００の何れかにルーティングする。相手側モジュールのＩ／Ｏサブシステムへアクセスする場合は、ＦＴ制御部間を接続しているクロスリンク（Cross-Link）Ｌ１０１０を介してアクセスする。
【００１１】
また、ＦＴ制御部１２００および１７００は、ＣＰＵサブシステム１１００および１６００から出力される２つのＩ／Ｏ処理要求を比較するボータ（Voter）１２２０および１７２０を備える。ボータは、２つのＣＰＵサブシステム１１００および１６００から出力されるＩ／Ｏ処理要求を逐時比較することにより、異常の有無を監視する。そして、２つのＩ／Ｏ処理要求が一致した場合、異常無しと考えられるので、ボータは、ターゲットとなるＩ／Ｏデバイスへ１個のＩ／Ｏ処理要求を出力する。
【００１２】
図１０は、ボータがＩ／Ｏ処理要求を出力する例を示す図である。同図において、ＣＰＵ１１２０および１６２０は、ロックステップ動作して同一のＩ／Ｏ処理要求を同時に出力する。ＣＰＵ１１２０から出力されたＩ／Ｏ処理要求は、ＩＯハブ１１３０を経由してルータ１２１０に出力される。同様に、ＣＰＵ１６２０から出力されたＩ／Ｏ処理要求は、ＩＯハブ１６３０を経由してルータ１７１０に出力される。
ここで、モジュール１０１０がアクティブ側のモジュールであり、モジュール１０６０がスタンバイ側のモジュールである場合、ルータ１２１０および１７１０は、ロックステップ動作して同一のＩ／Ｏ処理要求を同時にボータ１２２０に出力する。
【００１３】
ルータ１２１０および１７１０からＩ／Ｏ処理要求の出力を受けたボータ１２２０は、１つのＩ／Ｏ処理要求を、ターゲットとなるＩＯデバイス１３２０に出力する。
また、Ｉ／Ｏデバイス１３２０から返されたレスポンスは、ＦＴ制御部１２００によって２個に分岐され、それぞれ逆のルートを辿ってＣＰＵサブシステム１１２０および１６２０に同じタイミングで出力される。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】特開２００６−１７２２２０号公報
【発明の概要】
【発明が解決しようとする課題】
【００１５】
ＦＴシステムは、一般的なコンピュータ・システムと比べて、ハードウェア構成に関し幾つかの制限がある。特に、ＦＴシステムでは、サポート可能なＩ／Ｏの数が限られてしまうという制約がある。
一般に、ＦＴ制御部は１つのＬＳＩで構成され、ＣＰＵサブシステムから出力される全Ｉ／Ｏ処理要求がＦＴ制御部を経由する。このため、接続されるＩ／Ｏデバイスの数が増えれば増えるほど、ＦＴシステムのＩ／Ｏ性能のボトルネックがＦＴ制御ＬＳＩで発生してしまう。そして、ＦＴシステムのＩ／Ｏ性能を上げるためには、多数のPCI-Express（PCI-SIGによって策定されたシリアルインタフェース。以下では、１６チャネルを有するx16 PCI-Expressを用いる場合を例として説明する）などのＩＯパスをＦＴ制御部に接続する必要があり、さらに同様のバンド幅を有するクロスリンク（コミュニケーション・パス）にてモジュール間を接続する必要もある。その結果、ＦＴ制御ＬＳＩに多数の高速インタフェースが必要となり、ＬＳＩの規模が肥大化して高コストとなる問題がある。
【００１６】
図１１は、モジュール毎に１つのＦＴ制御ＬＳＩを備えるＦＴシステムの例を示す図である。同図において、ＦＴ制御ＬＳＩ１２００および１７００は、それぞれ１つのＬＳＩにてＦＴ制御部を構成し、それぞれ３本のPCI-Expressと接続する。この場合、PCI-Express１本あたりのチャンネル数は１６であり、ＦＴ制御ＬＳＩには、１６チャンネル×３本＝４８チャンネル分の高速インタフェースが必要となる。一般に、ＦＴ制御ＬＳＩには多数のＩＯパスが接続されるため、多数の高速インタフェースが必要となり、ＬＳＩチップサイズが大きくなる。このようにＬＳＩチップサイズが大きくなることにより、ＬＳＩを製造する際の歩留まりが悪くなり、製造コストが非常に高くなってしまう。
【００１７】
本発明は、このような事情を考慮してなされたものであり、その目的は、多数のＩ／Ｏパスに接続されるＦＴ制御部を、より安価に構築可能な耐故障システム、マスタＦＴ制御ＬＳＩ、スレーブＦＴ制御ＬＳＩおよび耐故障制御方法を提供することにある。
【課題を解決するための手段】
【００１８】
この発明は上述した課題を解決するためになされたもので、本発明の一態様による耐故障システムは、Ｉ／Ｏ処理要求を出力するＣＰＵサブシステムと、前記Ｉ／Ｏ処理要求に応じてＩ／Ｏ処理を行うＩＯサブシステムと、前記ＣＰＵサブシステムおよび前記ＩＯサブシステムに接続され、１つのマスタＦＴ制御ＬＳＩと１つまたは複数のスレーブＦＴ制御ＬＳＩと、を具備するＦＴ制御部と、を具備するモジュールを複数具備する耐故障システムであって、前記ＩＯサブシステムのいずれか１つがアクティブ側に設定され、他のＩＯサブシステムはスタンバイ側に設定され、前記スレーブＦＴ制御ＬＳＩの各々は、当該スレーブＦＴ制御ＬＳＩに接続される前記ＣＰＵサブシステムまたは当該スレーブＦＴ制御ＬＳＩに接続される前記ＩＯサブシステムから故障情報が出力されると故障情報取得を示すステータス情報をマスタＦＴ制御ＬＳＩに出力し、また、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがアクティブ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとから同一のＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムに出力し、当該ＩＯサブシステムからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとに前記レスポンスを出力し、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがスタンバイ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムからＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを他のモジュールに出力し、他のモジュールからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムに当該レスポンスを出力し、前記マスタＦＴ制御ＬＳＩは、前記スレーブＦＴ制御ＬＳＩから出力される前記ステータス情報に基づいて、故障したサブシステムに対する切り離し制御を行うコマンドを決定して前記スレーブＦＴ制御ＬＳＩに出力し、前記スレーブＦＴ制御ＬＳＩは、前記コマンドに基づいて、故障したサブシステムに対する切り離し制御を行う、ことを特徴とする。
【００１９】
また、本発明の一態様によるマスタＦＴ制御ＬＳＩは、耐故障システムの耐故障制御を行うマスタＦＴ制御ＬＳＩであって、スレーブＦＴ制御ＬＳＩに接続可能であり、接続されたスレーブＦＴ制御ＬＳＩから出力される故障情報を取得するシンクバス入力部と、シンクバス入力部が取得する故障情報に基づいて、故障したサブシステムに対する切り離し制御を行うコマンドを決定するマスタＦＴコントローラと、接続する前記スレーブＦＴ制御ＬＳＩに、前記マスタＦＴコントローラが決定した前記コマンドを出力するシンクバス出力部と、を具備することを特徴とする。
【００２０】
また、本発明の一態様によるスレーブＦＴ制御ＬＳＩは、多重化されたサブシステムを備える耐故障システムの耐故障制御を行うスレーブＦＴ制御ＬＳＩであって、耐故障システムの耐故障制御を行うスレーブＦＴ制御ＬＳＩであって、マスタＦＴ制御ＬＳＩに接続可能であり、サブシステムから出力される故障情報を、接続する前記マスタＦＴ制御ＬＳＩに出力するシンクバス出力部と、前記マスタＦＴ制御ＬＳＩから出力されるコマンドに基づいて、故障したサブシステムに対する切り離し制御を行うスレーブＦＴコントローラと、を具備することを特徴とする。
【００２１】
また、本発明の一態様による耐故障制御方法は、Ｉ／Ｏ処理要求を出力するＣＰＵサブシステムと、前記Ｉ／Ｏ処理要求に応じてＩ／Ｏ処理を行うＩＯサブシステムと、前記ＣＰＵサブシステムおよび前記ＩＯサブシステムに接続され、１つのマスタＦＴ制御ＬＳＩと１つまたは複数のスレーブＦＴ制御ＬＳＩと、を具備するＦＴ制御部と、を具備するモジュールを複数具備し、前記ＩＯサブシステムのいずれか１つがアクティブ側に設定され、他のＩＯサブシステムはスタンバイ側に設定されている耐故障システムの耐故障制御方法であって、前記スレーブＦＴ制御ＬＳＩの各々が、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがアクティブ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとから同一のＩ／Ｏ処理要求が出力されると、１つの当該Ｉ／Ｏ処理要求を、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムに出力し、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがスタンバイ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムからＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを他のモジュールに出力するＩ／Ｏ処理要求転送ステップと、前記スレーブＦＴ制御ＬＳＩの各々が、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがアクティブ側に設定されているときは、当該ＩＯサブシステムからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとに前記レスポンスを出力し、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがスタンバイ側に設定されているときは、他のモジュールからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムに当該レスポンスを出力するレスポンス転送ステップと、前記スレーブＦＴ制御ＬＳＩの各々が、当該スレーブＦＴ制御ＬＳＩに接続される前記ＣＰＵサブシステムまたは当該スレーブＦＴ制御ＬＳＩに接続される前記ＩＯサブシステムから故障情報が出力されると故障情報取得を示すステータス情報をマスタＦＴ制御ＬＳＩに出力するステータス情報出力ステップと、前記マスタＦＴ制御ＬＳＩが、前記スレーブＦＴ制御ＬＳＩから出力される前記ステータス情報に基づいて、故障したサブシステムに対する切り離し制御を行うコマンドを決定して前記スレーブＦＴ制御ＬＳＩに出力するコマンド出力ステップと、前記スレーブＦＴ制御ＬＳＩが、前記コマンドに基づいて、故障したサブシステムに対する切り離し制御を行う切り離し実行ステップと、を具備することを特徴とする。
【発明の効果】
【００２２】
本発明によれば、多数のＩ／Ｏパスに接続されるＦＴ制御部を、より安価に構築できる。
【図面の簡単な説明】
【００２３】
【図１】本発明の一実施形態におけるＦＴサーバの概略構成例を示すブロック図である。
【図２】同実施形態におけるマスタＦＴ制御ＬＳＩの概略構成を示すブロック図である。
【図３】同実施形態におけるスレーブＦＴ制御ＬＳＩの概略構成を示すブロック図である。
【図４】同実施形態におけるSyncBusの接続例を示す図である。
【図５】同実施形態において、マスタＦＴ制御ＬＳＩからスレーブＦＴ制御ＬＳＩに出力されるコマンドの例を示す表である。
【図６】同実施形態において、スレーブＦＴ制御ＬＳＩがマスタＦＴ制御ＬＳＩに出力するステータス情報の例を示す表である。
【図７】同実施形態において、マスタＦＴ制御ＬＳＩが出力する二重化関連パケットのデータ構造の例を示すデータ構造図である。
【図８】同実施形態において、ＦＴサーバ１が行うフォールト・トレラント制御動作の例を示すシーケンス図である。
【図９】ＦＴシステムの概略構成例を示すブロック図である。
【図１０】ボータがＩ／Ｏ処理要求を出力する例を示す図である。
【図１１】モジュール毎に１つのＦＴ制御ＬＳＩを備えるＦＴシステムの例を示す図である。
【発明を実施するための形態】
【００２４】
以下、図面を参照して、本発明の実施の形態について説明する。以下では、ＦＴシステムの例として、フォールト・トレラント・サーバ（以下、「ＦＴサーバ」と称する）に本発明を適用する場合について説明する。フォールト・トレラント・サーバは、フォールト・トレラント機能を有するサーバであり、１台のサーバが複数のモジュールを備えることによって多重化されている。ＦＴサーバには、例えば、フォールト・トレラント機能を有するＰＣ（Personal Computer、パソコン）サーバなどがある。
【００２５】
ただし、本発明の適用範囲は、ＦＴサーバに限らない。例えば、各モジュールが１台のコンピュータとして構成され、当該コンピュータ間で通信を行うＦＴシステムや、サーバ機能を有しないフォールト・トレラント・コンピュータなど、様々なＦＴシステムに適用可能である。
【００２６】
図１は、本発明の一実施形態におけるＦＴサーバの概略構成例を示すブロック図である。同図において、ＦＴサーバ１は、２つのモジュール１０および６０を具備する。モジュール１０は、ＣＰＵ（Central Processing Unit、中央処理装置）サブシステム１００と、ＦＴ制御部２００と、ＩＯサブシステム３００とを具備する。モジュール６０は、ＣＰＵサブシステム６００と、ＦＴ制御部７００と、ＩＯサブシステム８００とを具備する。
【００２７】
ＣＰＵサブシステム１００は、ＣＰＵ１２０と、ＣＰＵ１２０に接続されるメインメモリ１１０と、ＩＯサブシステムへのＩ／Ｏ処理要求をルーティングするＩＯハブ（I/O Hub）１３０とを具備する。ＩＯハブ１３０は３本のPCI-ExpressにてＦＴ制御部２００に接続される。
【００２８】
同様に、ＣＰＵサブシステム６００は、ＣＰＵ６２０と、ＣＰＵ６２０に接続されるメインメモリ６１０と、ＩＯサブシステムへのＩ／Ｏ処理要求をルーティングするＩＯハブ６３０とを具備する。そして、ＩＯハブ６３０は３本のPCI-ExpressＬ１１０〜Ｌ１３０にてＦＴ制御部７００に接続される。
なお、本発明の適用範囲は、図１に示す構成のＣＰＵサブシステムを具備するＦＴシステムに限らない。例えば、各ＣＰＵサブシステムが複数のＣＰＵを具備するマルチプロセッササブシステムであってもよい。
【００２９】
ＣＰＵサブシステム１００からの各PCI-Expressが接続されるＦＴ制御部２００は、１つのマスタＦＴ制御ＬＳＩと、１つ以上のスレーブＦＴ制御ＬＳＩとを具備する。図１の例では、ＦＴ制御部２００は、１つのマスタ制御ＬＳＩ２１０と、２つのスレーブ制御ＬＳＩ２２０および２３０とを具備する。同様に、ＦＴ制御部７００は、マスタＦＴ制御ＬＳＩ７１０と、スレーブＦＴ制御ＬＳＩ７２０および７３０とを具備する。
【００３０】
マスタＦＴ制御ＬＳＩ２１０は、１本のPCI-ExpressＬ１１０にてＣＰＵサブシステム１００に接続され、１本のPCI-ExpressＬ１４０にてＩＯサブシステム３００のサウスブリッジ３２０に接続され、クロスリンクＬ１０にて相手側モジュールのマスタＦＴ制御ＬＳＩ７１０に接続されている。
スレーブＦＴ制御ＬＳＩ２２０は、１本のPCI-ExpressＬ１２０にてＣＰＵサブシステム１００に接続され、１本のPCI-ExpressＬ１５０にてＩＯサブシステム３００のＩ／Ｏスイッチ３３０に接続され、クロスリンクＬ２０にて相手側モジュールのスレーブＦＴ制御ＬＳＩ７２０に接続されている。
スレーブＦＴ制御ＬＳＩ２３０は、１本のPCI-ExpressＬ１３０にてＣＰＵサブシステム１００に接続され、１本のPCI-ExpressＬ１６０にてＩＯサブシステム３００のＩ／Ｏスイッチ３４０に接続され、クロスリンクＬ３０にて相手側モジュールのスレーブＦＴ制御ＬＳＩ７３０に接続されている。
【００３１】
マスタＦＴ制御ＬＳＩは各モジュールに１つだけ存在し、スレーブＦＴ制御ＬＳＩから出力されるステータス情報に基づいて、故障したサブシステムに対する切り離し制御を行うコマンド（制御命令）を決定してスレーブＦＴ制御ＬＳＩに出力する。
また、マスタＦＴ制御ＬＳＩは、ＦＴ制御ＬＳＩとして動作する。具体的には、当該マスタＦＴ制御ＬＳＩに接続されるＩＯサブシステムがアクティブ側に設定されているときは、当該マスタＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとから同一のＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを、当該マスタＦＴ制御ＬＳＩに接続されるＩＯサブシステムに出力し、当該ＩＯサブシステムからレスポンスが出力されると、当該マスタＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとに前記レスポンスを出力する。一方、当該マスタＦＴ制御ＬＳＩに接続されるＩＯサブシステムがスタンバイ側に設定されているときは、当該マスタＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムからＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを他のモジュールに出力し、他のモジュールからレスポンスが出力されると、当該マスタＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムに当該レスポンスを出力する。
【００３２】
スレーブＦＴ制御ＬＳＩは、正常動作時は単体でＦＴ制御ＬＳＩとして機能するが、エラー発生時やロックステップ外れなどの異常発生時にはマスタＦＴ制御ＬＳＩからのコマンドに従って動作する。
具体的には、スレーブＦＴ制御ＬＳＩは、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがアクティブ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとから同一のＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムに出力し、当該ＩＯサブシステムからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムと他のモジュールとに前記レスポンスを出力する。また、当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムがスタンバイ側に設定されているときは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムからＩ／Ｏ処理要求が出力されると、当該Ｉ／Ｏ処理要求の１つを他のモジュールに出力し、他のモジュールからレスポンスが出力されると、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムに当該レスポンスを出力する。
また、スレーブＦＴ制御ＬＳＩは、当該スレーブＦＴ制御ＬＳＩに接続されるＣＰＵサブシステムまたは当該スレーブＦＴ制御ＬＳＩに接続されるＩＯサブシステムから故障情報が出力されると故障情報取得を示すステータス情報をマスタＦＴ制御ＬＳＩに出力する。
また、スレーブＦＴ制御ＬＳＩは、マスタＦＴ制御ＬＳＩから出力されるコマンドに基づいて、故障したサブシステムに対する切り離し制御を行う、
なお、図１では、１つのＦＴ制御部が２つのスレーブＦＴ制御ＬＳＩを備えるが、接続されるＩ／Ｏデバイス数に応じて更に多くのスレーブＦＴ制御ＬＳＩを備えることも可能である。
【００３３】
ＩＯサブシステム３００は、ディスプレイ表示のためのＬＳＩであるＶＧＡチップ（Video Graphics Array Chip）３１０と、ＰＳ／２デバイスなどのレガシーデバイス（Legacy Device）やＵＳＢなどのＩ／Ｏを制御するサウスブリッジ（South Bridge）３２０と、ＬＡＮ（Local Area Network、ローカルエリアネットワーク）との間の通信を制御するＬＡＮチップ（Local Area Network Chip）３５０と、ハードディスク（Hard Disk Drive；ＨＤＤ）などの記憶装置へのデータの読み書きを制御するストレージチップ（Storage Chip）３６０と、拡張用のＰＣＩｅスロット（PCI-express Slot）３７０および３８０と、ＦＴ制御部２００とＬＡＮチップ３５０やストレージチップ３６０やＰＣＩｅスロット３７０および３８０との間の信号のルーティングを行うＩ／Ｏスイッチ３３０および３４０とを具備する。同様に、ＩＯサブシステム８００は、ＶＧＡチップ８１０と、サウスブリッジ８２０と、ＬＡＮチップ８５０と、ストレージチップ８６０と、ＰＣＩｅスロット８７０および８８０と、Ｉ／Ｏスイッチ８３０および８４０とを具備する。
【００３４】
なお、本発明の適用範囲は、図１に示す構成のＩＯサブシステムを具備するＦＴシステムに限らない。接続されるＩ／Ｏデバイスは、図１に示されるものに限らないし、接続されるＩ／Ｏデバイス数も、図１に示されるものに限らない。上述したように、スレーブＦＴ制御ＬＳＩを増設することによって、より多数のＩ／Ｏデバイスに対応することができる。
【００３５】
ＩＯサブシステム３００および８００は、正常動作時において、いずれもアクセス可能状態にある。そして、初期設定により、一方のＩＯサブシステムがアクティブ側に設定され、他方がスタンバイ側に設定されている。
例えば、ＩＯサブシステム３００がアクティブ側に設定され、ＩＯサブシステム８００がスタンバイ側に設定されている場合、正常動作時は、ＩＯサブシステム３００のＩＯデバイスが使用される。一方、ＩＯサブシステム３００に何らかの異常が発生すると、ＩＯサブシステム８００がアクティブ側に設定される。そして、ＩＯサブシステム３００は、ＦＴ制御部２００の制御に基づいて、ＦＴシステム１から論理的に切り離される。
【００３６】
図２は、マスタＦＴ制御ＬＳＩの概略構成を示すブロック図である。同図において、マスタＦＴ制御ＬＳＩ２１０は、ルータ２１１と、ボータ２１２と、マスタＦＴコントローラ２１３と、Ｔｘクロスリンク２１４ａと、Ｒｘクロスリンク２１４ｂと、レガシーデバイスコントローラ２１５と、インタラプトコントローラ２１６と、シンクバス出力部２１７ａと、シンクバス入力部２１７ｂと、スレーブ数入力部２１８とを具備する。
【００３７】
ルータ２１１は、ＣＰＵサブシステム１００から出力されるＩ／Ｏ処理要求を、自モジュール１０のＩＯサブシステム３００に出力するか、他方のモジュール６０のＩＯサブシステム８００に出力するかを決定する。ルータ２１１は、アクティブ側およびスタンバイ側のＩＯサブシステムの設定に基づいて、当該決定を行う。
【００３８】
ボータ２１２は、自モジュール１０のＣＰＵサブシステム１００から出力されるＩ／Ｏ処理要求と、他方のモジュール６０のＣＰＵサブシステム６００から出力されるＩ／Ｏ処理要求との異同を判定する。また、ボータ２１２は、自モジュール１０のＣＰＵサブシステム１００およびＩＯサブシステム３００から、故障発生等を通知するエラー情報（故障情報）を受け付ける。
【００３９】
マスタＦＴコントローラ２１３は、マスタＦＴ制御ＬＳＩ２１０のボータ２１２による異同判定結果、および、後述するように、自ＦＴ制御部２００内のスレーブＦＴ制御ＬＳＩ２２０および２３０からSyncBusを介して出力される異同判定結果、および、ボータ２１２やスレーブＦＴ制御ＬＳＩ２２０および２３０から出力されるエラー情報に基づいて、アクティブ側とスタンバイ側とを切り換えるか否かの決定、および、自モジュール１０のＣＰＵサブシステム１００またはＩＯサブシステム３００を切り離すか否かの決定を行う。そして、マスタＦＴコントローラ２１３は、当該決定に従って、ＣＰＵサブシステム１００やＩＯサブシステム３００の切り離し処理を行うと共に、当該決定に応じたコマンドを、シンクバス出力部２１７ａを介してスレーブＦＴコントローラ２２０および２３０に出力する。
また、マスタＦＴコントローラ２１３は、ＣＰＵサブシステムから出力されるＩ／Ｏ処理要求が、アクティブ側のＩＯサブシステムに出力され、ＩＯサブシステムから出力されるレスポンスが、アクティブ側のＣＰＵサブシステムに出力されるよう、ルータ２１１とボータ２１２とＴｘクロスリンク２１４ａとを制御する。
【００４０】
Ｔｘクロスリンク２１４ａは、クロスリンクを介してマスタＦＴ制御ＬＳＩ７１０に接続され、マスタＦＴコントローラ２１３の制御に基づいてルータ２１１から出力されるＩ／Ｏ処理要求を、マスタＦＴ制御ＬＳＩ７１０に出力する。
Ｒｘクロスリンク２１４ｂは、クロスリンクを介してマスタＦＴ制御ＬＳＩ７１０に接続され、マスタＦＴ制御ＬＳＩ７１０から出力されるトランザクションをルータ２１１に出力する。
【００４１】
シンクバス出力部２１７ａは、マスタＦＴコントローラ２１３から出力されるコマンドをSyncBusを介してスレーブＦＴ制御ＬＳＩに出力する信号出力端である。
シンクバス入力部２１７ｂは、スレーブＦＴ制御ＬＳＩからSyncBusを介して出力されるステータス情報を取得する信号入力端であり、取得したステータス情報をマスタＦＴコントローラ２１３に出力する。
スレーブ数入力部２１８は、SyncBusを介してマスタＦＴ制御ＬＳＩに接続されるスレーブＦＴ制御ＬＳＩの数を示す信号の入力を受け付ける信号入力端（ストラップピン）であり、入力された信号をマスタＦＴコントローラ２１３に出力する。本実施形態では、マスタＦＴ制御ＬＳＩ２１０に、２つのスレーブＦＴ制御ＬＳＩが接続されており、個数「２」を示す信号がスレーブ数入力部２１８に入力される。このスレーブＦＴ制御ＬＳＩの数は、例えば、初期設定時にＦＴサーバ１の管理者によって設定される。
【００４２】
レガシーデバイスコントローラ２１５は、レガシーデバイスがサウスブリッジ３２０に接続されているときに、当該レガシーデバイスを制御する。また、ＩＯサブシステムのデバイスからレガシーＩＲＱ（Legacy Interrupt Request、旧式の割込信号）が出力されると、当該割込信号に基づいて割込処理を行う。インタラプトコントローラ２１６は、ＩＯサブシステムのデバイスから、レガシーＩＲＱ以外の割込信号が出力されると、当該割込信号に基づいて割込処理を行う。
ここで、レガシーデバイスコントローラおよびインタラプトコントローラは、１つのモジュールに１つのみ含まれるべきコントローラである。そこで、マスタＦＴ制御ＬＳＩがレガシーデバイスコントローラおよびインタラプトコントローラを備えることにより、モジュール内におけるレガシーデバイスコントローラやインタラプトコントローラの重複を回避している。
なお、マスタＦＴ制御ＬＳＩ７１０の構成はマスタＦＴ制御ＬＳＩ２１０の構成と同様であり、説明を省略する。
【００４３】
図３は、スレーブＦＴ制御ＬＳＩの概略構成を示すブロック図である。同図において、スレーブＦＴ制御ＬＳＩ２２０は、ルータ２２１と、ボータ２２２と、スレーブＦＴコントローラ２２３と、Ｔｘクロスリンク２２４ａと、Ｒｘクロスリンク２２４ｂとを具備する。
ルータ２２１の機能は、ルータ２１１（図６）の機能と同様であり、説明を省略する。また、ボータ２２２の機能は、ボータ２１２の機能と同様であり、説明を省略する。
【００４４】
スレーブＦＴコントローラ２２３は、ボータ２２２から出力される異同判定結果やエラー情報を、SyncBusを介してマスタＦＴ制御ＬＳＩ２１０に出力し、また、マスタＦＴ制御ＬＳＩ２１０からのコマンドを受け付け、受け付けたコマンドを実行する。また、スレーブＦＴコントローラ２２３は、シンクバス入力部２２７ｂを介してマスタＦＴ制御ＬＳＩ２１０から出力される、後述の二重化関連パケットを書き換え、書き換えたコマンドを、シンクバス出力部２２７ａに出力する。
【００４５】
Ｔｘクロスリンク２２４ａは、クロスリンクを介してスレーブＦＴ制御ＬＳＩ７２０に接続され、スレーブＦＴコントローラ２２３の制御に基づいてルータ２２１から出力されるＩ／Ｏ処理要求をスレーブＦＴ制御ＬＳＩ７２０に出力する。
Ｒｘクロスリンク２１４ｂは、クロスリンクを介してスレーブＦＴ制御ＬＳＩ７２０に接続され、スレーブＦＴ制御ＬＳＩ７２０から出力されるＩ／Ｏ処理要求をルータ２２１に出力する。
【００４６】
シンクバス入力部２２７ｂは、マスタＦＴ制御ＬＳＩ２１０からSyncBusを介して出力される、後述する二重化関連パケットを取得する信号入力端であり、取得したコマンドをマスタＦＴコントローラ２２３に出力する。
シンクバス出力部２２７ａは、スレーブＦＴコントローラ２２３から出力される、書き換えられた二重化関連パケットを、SyncBusを介してスレーブＦＴ制御ＬＳＩ２３０に出力する信号出力端である。
【００４７】
スレーブＩＤ入力部２２８は、スレーブＦＴ制御ＬＳＩ２２０を識別するための指標であるスレーブＩＤの入力を受け付ける信号入力端であり、入力された信号をマスタＦＴコントローラ２１３に出力する。このスレーブＩＤは、例えば、初期設定時にＦＴサーバ１の管理者によって設定される。なお、スレーブＩＤには、SyncBusにおける順序（本実施形態では、スレーブＦＴ制御ＬＳＩ２２０が「１」、スレーブＦＴ制御ＬＳＩ２３０が「２」）を示す情報が含まれる。
【００４８】
スレーブＦＴ制御ＬＳＩ２２０は、レガシーデバイスコントローラや、インタラプトコントローラを具備しない点、および、ＣＰＵサブシステム１００またはＩＯサブシステム３００を切り離すか否かの決定を行わない点で、マスタＦＴ制御ＬＳＩ２１０と異なる。
なお、スレーブＦＴ制御ＬＳＩ２３０、７２０および７３０の構成も同様であり、説明を省略する。
【００４９】
なお、マスタＦＴ制御ＬＳＩとしてもスレーブＦＴ制御ＬＳＩとしても使用可能なＦＴ制御ＬＳＩを製造し、当該ＦＴ制御ＬＳＩを用いてマスタ制御ＬＳＩやスレーブ制御ＬＳＩを実装するようにしてもよい。例えば、ＦＴ制御ＬＳＩにおいて、設定スイッチ等でマスタモードとスレーブモードとを切替可能とする。マスタモードでは、レガシーデバイスやインタラプトコントローラなど、マスタＦＴ制御ＬＳＩに特有の機能が有効となり、スレーブモードでは、これらマスタＦＴ制御ＬＳＩに特有の機能は無効となる。
このように、同型のＦＴ制御ＬＳＩを用いてマスタＦＴ制御ＬＳＩおよびスレーブＦＴ制御ＬＳＩを実装することにより、１つの型のＬＳＩを設計・製造すればよく、設計負荷を軽減し、また、製造効率を高めることができる。
【００５０】
図４は、SyncBusの接続例を示す図である。同図の例では、マスタＦＴコントローラ２１３と、スレーブＦＴコントローラ２２３および２３３とがリング型接続にて接続されている。この接続によって、マスタＦＴコントローラ２１３からスレーブＦＴコントローラ２２３および２３３に出力される命令が、マスタＦＴコントローラ２１３、スレーブＦＴコントローラ２２３、スレーブＦＴコントローラ２３３の順に伝送されるデイジーチェーンが構成される。また、スレーブＦＴコントローラ２２３および２３３からマスタＦＴコントローラ２１３に出力される異同判定結果やエラー情報が、スレーブＦＴコントローラ２２３、スレーブＦＴコントローラ２３３、マスタＦＴコントローラ２１３の順に伝送されるデイジーチェーンが構成される。
このようにSyncBusをリング型接続とすることにより、１つのＦＴ制御部に含まれるスレーブＦＴコントローラの数にかかわらず、マスタＦＴ制御ＬＳＩやスレーブＦＴ制御ＬＳＩはシンクバス出力部とシンクバス入力部とを１つずつ具備すればよい。従って、スレーブＦＴ制御ＬＳＩの数の変更が容易であり、ＦＴ制御部が具備するインタフェース数を柔軟に変更できる。
【００５１】
但し、SyncBusの接続形態は、上述したリング型に限らず、マスタＦＴコントローラ２１３とスレーブＦＴコントローラ２２３および２３３との間で命令やデータを伝送可能な様々な接続形態を用いることができる。例えば、マスタＦＴコントローラ２１３を中心とするスター型接続としてもよい。この場合、マスタＦＴコントローラと各スレーブＦＴコントローラとの間におけるデータ伝送速度を、より速く行うことができる。
【００５２】
図５は、マスタＦＴ制御ＬＳＩからスレーブＦＴ制御ＬＳＩに出力されるコマンドの例を示す表である。
同図に示す「NULL」は、無命令を指示するコマンドであり、正常動作時など、実行すべき命令がない場合に出力される。「Shoot CPU」は、ＣＰＵサブシステムの切り離しを指示するコマンドであり、自モジュールのＣＰＵサブシステムにエラーが検出された場合に出力される。「Shoot IO」は、ＩＯサブシステムの切り離しを指示するコマンドであり、自モジュールのＩＯサブシステムにエラーが検出された場合に出力される。
「Bring-up CPU」は、ＣＰＵサブシステムの組み込みを指示するコマンドであり、ＦＴサーバ１の起動時などに出力される。「Bring-up IO」は、ＩＯサブシステムの組み込みを指示するコマンドであり、ＦＴサーバ１の起動時などに出力される。
「Go CPU SMR」は、相手側モジュールのＣＰＵサブシステムの切り離しを指示するコマンドであり、相手側モジュールのＣＰＵサブシステムにエラーが検出された場合に出力される。「Go IO SMR」は、相手側ＩＯサブシステムの切り離しを指示するコマンドであり、相手側モジュールのＩＯサブシステムにエラーが検出された場合に出力される。
「Voter Wait」は、ボータの一旦停止を指示するコマンドであり、ＣＰＵサブシステムのロックステップのずれによって異常が検出された際に、故障箇所が特定されるまでの間ボータの動作を停止させる。
【００５３】
図６は、スレーブＦＴ制御ＬＳＩがマスタＦＴ制御ＬＳＩに出力するステータス情報の例を示す表である。
同図に示す「DMR」は、ＣＰＵサブシステムおよびＩＯサブシステムが二重化（Double Module Redundancy；ＤＭＲ）された状態にあることを示すステータス情報であり、正常動作時に出力される。
「CPU SMR」は、ＣＰＵサブシステムが一重化（Single Module Redundancy；ＳＭＲ）され、ＩＯサブシステムが二重化された状態にあることを示すステータス情報であり、相手側モジュールのＣＰＵサブシステムが切り離されている場合に出力される。
「IO SMR」は、ＣＰＵサブシステムが二重化され、ＩＯサブシステムが一重化された状態にあることを示すステータス情報であり、相手側モジュールのＩＯサブシステムが切り離されている場合に出力される。
「SMR」は、ＣＰＵサブシステムおよびＩＯサブシステムが一重化された状態にあることを示すステータス情報であり、相手側モジュールのＣＰＵサブシステムおよび相手側モジュールのＩＯサブシステムが切り離されている場合に出力される。
【００５４】
「CPU Broken」は、自モジュールのＣＰＵサブシステムが切り離され、ＩＯサブシステムが二重化された状態にあることを示すステータス情報であり、自モジュールのＣＰＵサブシステムが切り離されている場合に出力される。
「IO Broken」は、ＣＰＵサブシステムが二重化され、自モジュールのＩＯサブシステムが切り離された状態にあることを示すステータス情報であり、自モジュールのＩＯサブシステムが切り離されている場合に出力される。
「Broken」は、自モジュールのＣＰＵサブシステムおよび自モジュールのＩＯサブシステムが切り離された状態にあることを示すステータス情報であり、自モジュールのＣＰＵサブシステムおよび自モジュールのＩＯサブシステムが切り離された場合に出力される。
【００５５】
「CPU Error」は、ＣＰＵサブシステムのエラーを検出したことを示すステータス情報であり、当該エラー検出時に出力される。
「IO Error」は、ＩＯサブシステムのエラーを検出したことを示すステータス情報であり、当該エラー検出時に出力される。
「Unk Error」は、エラー発生箇所を特定できないエラーを検出したことを示すステータス情報であり、当該エラー検出時に出力される。
「DMR Violate」は、二重化状態を逸脱したこと、すなわち、ロックステップ動作が外れた状態にあることを示すステータス情報であり、自モジュールのＩ／Ｏ処理要求と相手側モジュールのＩ／Ｏ処理要求とのずれ検出時に出力される。
【００５６】
図７は、マスタＦＴ制御ＬＳＩが出力する二重化関連パケットのデータ構造の例を示すデータ構造図である。同図の例において、二重化関連パケットは、MasterCountフィールドと、Numフィールドと、Item#1フィールド〜Item#nフィールドとを含む。
MasterCountフィールドは、各スレーブＦＴ制御ＬＳＩが同期して動作するためのカウンタ値を格納するフィールドである。本実施形態では、マスタＦＴ制御ＬＳＩから出力される二重化関連パケットは、デイジーチェーン構造のSyncBusにて伝達されるため、マスタＦＴ制御ＬＳＩからの距離が遠い（間に介在するスレーブＬＳＩの数が多い）スレーブＦＴ制御ＬＳＩほど二重化関連パケットの到達時刻が遅くなる。例えば図４において、スレーブＦＴ制御ＬＳＩ２３０には、スレーブＦＴ制御ＬＳＩ２２０よりも遅れて二重化関連パケットが到達する。
【００５７】
そこで、スレーブＦＴ制御ＬＳＩ２２０と２３０とが、同期して動作するために、マスタＦＴ制御ＬＳＩは、MasterCountフィールドに、コマンド実行タイミングを示すカウンタ値を書き込む。本実施形態では、マスタＦＴ制御ＬＳＩは、当該マスタＦＴ制御ＬＳＩが二重化関連パケットを出力する際のカウンタ値をMasterCountフィールドに書き込む。
そして、スレーブＦＴ制御ＬＳＩは、全てのスレーブＦＴ制御ＬＳＩに二重化関連パケットが到達する時刻を待ってコマンドを実行する。例えば、スレーブＦＴ制御ＬＳＩは、
現在のカウンタ値＝MasterCountの示すカウンタ値＋ＬＳＩ間の伝送に要する時間×スレーブＦＴ制御ＬＳＩ数
となったときにコマンドを実行する。
【００５８】
Numフィールドは、１つのＦＴ制御部が具備するスレーブＦＴ制御ＬＳＩの数を示すフィールドである。本実施形態では、ＦＴ制御部２００が２つのスレーブＦＴ制御ＬＳＩ２１０および２２０を具備しており、Numフィールドには「２」が格納される。マスタＦＴコントローラ２１３は、スレーブ数入力部からスレーブＦＴ制御ＬＳＩの数の情報を得ており、このスレーブＦＴ制御ＬＳＩの数をNumフィールドに格納する。
【００５９】
Item#1フィールド〜Item#nフィールドは、スレーブＦＴ制御ＬＳＩの各々に対するコマンドを格納するｎ個のフィールドである。ここで、ｎは、１つのＦＴ制御部が具備するスレーブＦＴ制御ＬＳＩの数を示す正整数である。
本実施形態では、ＦＴ制御部２００が２つのスレーブＦＴ制御ＬＳＩ２１０および２２０を具備しており、二重化関連パケットにはCmd#1とCmd#2の２つのフィールドが含まれる。
【００６０】
マスタＦＴ制御ＬＳＩが出力した二重化関連パケットは、スレーブＦＴコントローラによって書き換えられ、マスタＦＴ制御ＬＳＩに返送される。
MasterCountフィールドと、Numフィールドとは、マスタＦＴ制御ＬＳＩが二重化関連パケットを出力する際の状態から変更されずに返送される。
なお、マスタＦＴコントローラは、MasterCountフィールドの値に基づいて、スレーブＦＴ制御ＬＳＩにおける異常の有無を判断するようにしてもよい。例えば、マスタＦＴコントローラは、MasterCountフィールドの値に基づいて、二重化関連パケットが出力時と同じ順序で返送されているか否かを判定する。二重化関連パケットが出力時と同じ順序で返送されていない場合や、返送されない二重化関連パケットがある場合、マスタＦＴコントローラは、いずれかのスレーブＦＴ制御ＬＳＩで異常が発生していると判定し、ＦＴサーバ１の管理者に対してエラー表示を行う。
【００６１】
一方、Item#１フィールド〜Item#nフィールドの内容は、スレーブＦＴ制御ＬＳＩによって図６で説明したステータス情報に書き換えられる。
各スレーブＦＴ制御ＬＳＩは、二重化関連パケットを受け取ると、Item#i（iは、SyncBusにおける当該スレーブＦＴ制御ＬＳＩの、マスタＦＴ制御ＬＳＩからの順番を示す、1≦i≦nの正整数）フィールドに格納されているコマンドを読み出し、Item#iフィールドの内容を、当該スレーブＦＴ制御ＬＳＩの現在のステータス情報に書き換えて、次のスレーブＦＴ制御ＬＳＩに出力する。従って、二重化関連パケットがマスタＦＴ制御ＬＳＩに返送される際は、全てのスレーブＦＴ制御ＬＳＩのステータス情報が二重化関連パケットに格納されている。
【００６２】
ｉ番目のスレーブＦＴ制御ＬＳＩにおいて、ＣＰＵサブシステムの同期外れやエラーが検出された場合、Item#iフィールドにその旨を示すステータス情報が書き込まれ、マスタＦＴ制御ＬＳＩに通知される。
以上のように、マスタＦＴ制御ＬＳＩからスレーブＦＴ制御ＬＳＩに、コマンドと同期タイミングを示す情報とを出力し、スレーブＦＴ制御ＬＳＩからマスタＦＴ制御ＬＳＩに、ステータス情報を出力することによって、これらマスタＦＴ制御ＬＳＩおよびスレーブＦＴ制御ＬＳＩによりフォールト・トレラント制御を行うことができる。このように、複数の比較的小型のＬＳＩにてＦＴ制御部を構成することができるので、製造コストを低減することができる。また、スレーブＦＴ制御ＬＳＩの数を増やすことでＩ／Ｏポート数を増やすことができるので、柔軟にＩ／Ｏ拡張を行うことができる。
【００６３】
次に図８を参照してＦＴサーバ１が行うフォールト・トレラント制御について説明する。
図８は、ＦＴサーバ１が行うフォールト・トレラント制御動作の例を示すシーケンス図である。同図の例では、初期設定により、モジュール１０がアクティブ側に設定され、モジュール６０がスタンバイ側に設定されている。また、上述したように、ＣＰＵサブシステム１００および６００は、ロックステップ動作により、同期して同一の処理を行っている。
【００６４】
まず、ＣＰＵサブシステム１００および２００から出力されるＩ／Ｏ処理要求は、全て、アクティブ側であるモジュール１０側の各ＦＴ制御ＬＳＩ２１０、２２０、２３０を通って、Ｉ／Ｏサブシステム３００に出力される。この際、各ＦＴ制御ＬＳＩ２１０、２２０、２３０の各ボータ２１２、２２２、２３２は、自モジュール１０のＣＰＵサブシステム１００から出力されたＩ／Ｏ処理要求と、相手側モジュール６０のＣＰＵサブシステム６００から出力されたＩ／Ｏ処理要求とを比較する。ここで、双方のＩ／Ｏ処理要求が一致する場合は、双方のモジュールのＣＰＵサブシステム１００および６００は、ロックステップ動作しており、二重化された状態にある。したがって、双方のＩ／Ｏ処理要求が一致し、かつ、何のエラーも検出されていない場合は、正常動作状態にあると考えられる。この場合、各ボータ２１２、２２２、２３２は、２つのＩ／Ｏ処理要求のうちいずれか１つをアクティブ側のＩ／Ｏサブシステム３００に出力する。
【００６５】
このように、モジュール間でＩ／Ｏ処理要求に差異が検出されず、エラーも検出されていない正常動作時には、マスタＦＴコントローラ２１３は、各スレーブＦＴコントローラ２２３および２３３に対して、指示が無いことを示すコマンド「ＮＵＬＬ」を二重化関連パケットに格納して出力する（シーケンスＳ１０１）。
これに対して、各スレーブＦＴコントローラ２２３および２３３は、ＣＰＵサブシステム１００および６００と、Ｉ／Ｏサブシステム３００および８００とが、いずれも二重化状態にあることを示すステータス情報「ＤＭＲ」にて、二重化関連パケットのコマンドを書き換えて、マスタＦＴコントローラ２１３に返送する（シーケンスＳ１０２）。
このように、正常動作時は、コマンド「ＮＵＬＬ」の出力（シーケンスＳ１０３）およびステータス情報「ＤＭＲ」の返送が繰り返される。
【００６６】
同様に、モジュール６０でも、マスタＦＴ制御ＬＳＩ７１０のマスタＦＴコントローラから、各スレーブＦＴ制御ＬＳＩ７２０および７３０のスレーブＦＴコントローラへのコマンド「ＮＵＬＬ」の出力（シーケンスＳ２０１、シーケンスＳ２０３）と、各スレーブＦＴコントローラからマスタＦＴコントローラへのステータス情報「ＤＭＲ」の返送（シーケンスＳ２０２）が繰り返される。
【００６７】
ここで、ＣＰＵサブシステムまたはＩＯサブシステムが備えるＬＳＩの内部や、Ｉ／Ｏデバイスの内部で故障が発生した場合、当該故障がＬＳＩの外部やＩ／Ｏデバイスの外部に通知されるまでは若干のタイムラグがあり、ロックステップ動作のずれが先に検出されることが通常である。
図８では、ＩＯハブ１３０の内部で故障が発生場合の動作例が示されている。ＩＯハブ１３０の内部で故障が発生することにより、ＩＯハブ１３０と６３０とは、異なる動作をするようになる。これにより、アクティブ側のモジュール１０のスレーブＦＴ制御ＬＳＩ２２０において、ボータ２２２が、両ＣＰＵサブシステムからのＩ／Ｏ処理要求の差分を検出する（シーケンスＳ１１１）。
そして、スレーブＦＴ制御ＬＳＩ２２０のスレーブＦＴコントローラ２２３は、ロックステップ動作のずれを検出したことを示すステータス情報「DMR Violate」をマスタＦＴ制御ＬＳＩ２１０に返送する（シーケンスＳ１２１）。
【００６８】
このステータス情報を受け取ったマスタＦＴ制御ＬＳＩ２１０は、クロスリンクを通じて相手側のモジュール６０のマスタＦＴ制御ＬＳＩ７１０に、スレーブＦＴ制御ＬＳＩ２２０におけるＤＭＲ逸脱検出を通知する（シーケンスＳ３２１）。また、自モジュール１０内では、一旦ボータの動作を止めて、次の指示待ち状態を示すコマンド「Voter Wait」を含む二重化関連パケットを、SyncBusを通じてスレーブＦＴ制御ＬＳＩ２２０に出力する（シーケンスＳ１２２）。
【００６９】
また、図８の例では、ＩＯハブ１３０の故障の影響によりスレーブＦＴ制御ＬＳＩ２３０でもロックステップ動作のずれを検出し、スレーブＦＴ制御ＬＳＩ２２０、２３０共にステータス情報「DMR Violate」をマスタＦＴ制御ＬＳＩ２１０に返送する（シーケンスＳ１２３）。これを受けて、マスタＦＴ制御ＬＳＩ２１０は、クロスリンクを通じて相手側のモジュール６０のマスタＦＴ制御ＬＳＩ７１０に、スレーブＦＴ制御ＬＳＩ２２０および２３０におけるＤＭＲ逸脱検出を通知する（シーケンスＳ３２３）。また、マスタＦＴ制御ＬＳＩ２１０は、コマンド「Voter Wait」を含む二重化関連パケットを、SyncBusを通じてスレーブＦＴ制御ＬＳＩ２２０および２３０に出力する（シーケンスＳ１２４）。
【００７０】
ここで、ボータによって検出されるＩ／Ｏ処理要求の差異は、何れかで故障が発生した可能性を示している。このため、エラー通知によって故障箇所が明らかになるまで、一旦Ｉ／Ｏ処理要求の実行を停止させるため、マスタＦＴ制御ＬＳＩ２１０は、コマンド「Voter Wait」を、スレーブＦＴ制御ＬＳＩ２２０および２３０に出力する。
【００７１】
また、スタンバイ側のモジュール６０では、マスタＦＴ制御ＬＳＩ７１０が、マスタＦＴ制御ＬＳＩ２１０から出力されるＤＭＲ逸脱検出の通知（シーケンスＳ３２１、３２３）に基づいて、スレーブＦＴ制御ＬＳＩ７２０および７３０にコマンド「Voter Wait」を出力する（シーケンスＳ２２２、２２４）。
【００７２】
さらに、図８の例では、スレーブＦＴ制御ＬＳＩ２２０が、ＩＯハブ１３０からエラー通知を受け（シーケンスＳ１３１）、ＣＰＵサブシステム１００でのエラー検出を示すステータス情報「CPU Error」を含む二重化関連パケットを、マスタＦＴ制御ＬＳＩ２１０に返送する（シーケンスＳ１４１）。
この二重化関連パケットを受け取ったマスタＦＴ制御ＬＳＩ２１０は、クロスリンクを介して相手側モジュール６０のマスタＦＴ制御ＬＳＩ７１０にエラーの通知を行う（シーケンスＳ３４１）。また、マスタＦＴ制御ＬＳＩ２１０は、自モジュール１０のスレーブＦＴ制御ＬＳＩ２２０および２３０に、ＣＰＵサブシステム１００を論理的に切り離すよう指示するコマンド「Shoot CPU」を含む二重化関連パケットを出力する（シーケンスＳ１４２）。ここで、切り離されるのはＣＰＵサブシステム１００だけであり、ＩＯサブシステム３００は、依然としてアクティブ側のＩＯサブシステムとして使用され続ける。
コマンド「Shoot CPU」を受け取ったスレーブＦＴ制御ＬＳＩ２２０および２３０は、ＣＰＵサブシステム１００の切り離しを行い、切り離しが完了すると、ＣＰＵサブシステム１００が切り離されている状態であることを示すステータス情報「CPU Broken」を含む二重化関連パケットを、マスタＦＴ制御ＬＳＩ２１０に返送する（シーケンスＳ１４３）。
【００７３】
一方、モジュール６０では、ＣＰＵサブシステムが二重化されていない状態で動作するよう指示するコマンド「Go CPU SMR」を含む二重化関連パケットを、マスタＦＴ制御ＬＳＩ７１０が、スレーブＦＴ制御ＬＳＩ７２０および７３０へ出力し（シーケンスＳ２４２）、スレーブＦＴ制御ＬＳＩ７２０および７３０は、ＣＰＵサブシステムが二重化されていない動作状態に移行する。そして、スレーブＦＴ制御ＬＳＩ７２０および７３０は、ＣＰＵサブシステムが二重化されていないことを示すステータス情報「CPU SMR」を含む二重化関連パケット情報をマスタＦＴ制御ＬＳＩ７１０に返送する（シーケンスＳ２４３）。
以上により、ＣＰＵサブシステム１００が、ＦＴサーバ１から論理的に切り離され、ＦＴサーバ１は、ＣＰＵサブシステム６００を用いて動作を継続する。
【００７４】
同様に、ＣＰＵサブシステムおよびＩＯサブシステムが共に二重化された状態（ＤＭＲ状態）で、ＩＯサブシステムにエラーが発生した場合、エラーが発生したＩ／Ｏデバイスが切り離される。
具体的には、エラーが発生したＩ／Ｏデバイスに接続されているスレーブＦＴ制御ＬＳＩが、ステータス情報「IO Error」を書き込んだ二重化関連パケットを、マスタＦＴ制御ＬＳＩに返送する。この二重化関連パケットを受け取ったマスタＦＴ制御ＬＳＩは、コマンド「Shoot IO」を含む二重化関連パケットを出力する。そして、各スレーブＦＴ制御ＬＳＩは、コマンド「Shoot IO」に基づいて、エラーが発生したＩ／Ｏサブシステムを論理的に切り離してIO Broken状態となる。一方、スタンバイ側のモジュールでは、マスタＦＴ制御ＬＳＩが、コマンド「Go IO SMR」の格納された二重化関連パケットをスレーブＦＴ制御ＬＳＩに出力し、各スレーブＦＴ制御ＬＳＩは、Ｉ／Ｏサブシステムが二重化されていないことを示すIO SMR状態となる。
【００７５】
以上のように、マスタＦＴ制御ＬＳＩとスレーブＦＴ制御ＬＳＩとをSyncBusで接続してコマンド通知やステータス情報の通知を可能とすることにより、ＦＴ制御部の機能をこれらマスタＦＴ制御ＬＳＩおよびスレーブＦＴ制御ＬＳＩに分担させることが出来る。これにより、ＦＴ制御部２００および７００を、比較的小さなサイズのＦＴ制御ＬＳＩで構築できる。具体的には、各ＦＴ制御ＬＳＩは、１６チャンネル分のPCI-Expressに接続できればよい。したがって、１つのＬＳＩでＦＴ制御部を構成する場合は、１つのＬＳＩで４８チャンネル分のPCI-Expressに接続できる必要があるのに対して、１つのＬＳＩあたりのＩ／Ｏポート数を少なくできる。
ここで、本発明を適用してＦＴ制御部を構成する場合、複数のＦＴ制御ＬＳＩが必要となるものの、ＬＳＩの小型化によりＬＳＩ製造の際の歩留まりを上げることができ、トータルの製造コストを低減させることができる。また、スレーブＦＴ制御ＬＳＩの数を増減させることによりＩ／Ｏバンド幅をフレキシブルに増減させることも可能となり、ＦＴシステムに許容されるコストや要求仕様に応じて、様々なＩ／Ｏポート数のＦＴシステムを提供できる。
【００７６】
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００７７】
１  ＦＴサーバ
１０、６０  モジュール
１００、６００  ＣＰＵサブシステム
１１０、６１０  メインメモリ
１２０、６２０  ＣＰＵ
１３０、６３０  ＩＯハブ
２００、７００  ＦＴ制御部
２１０、７１０  マスタＦＴ制御ＬＳＩ
２２０、２３０、７２０、７３０  スレーブＦＴ制御ＬＳＩ
２１１、２２１  ルータ
２１２、２２２  ボータ
２１３  マスタＦＴコントローラ
２２３、２３３  スレーブＦＴコントローラ
２１４ａ、２２４ａ  Ｔｘクロスリンク
２１４ｂ、２２４ｂ  Ｒｘクロスリンク
２１５  レガシーデバイスコントローラ
２１６  インタラプトコントローラ
２１７ａ、２２７ａ  シンクバス出力部
２１７ｂ、２２７ｂ  シンクバス入力部
２１８  スレーブ数入力部
２２８  スレーブＩＤ入力部
３００、８００  ＩＯサブシステム
３１０、８１０  ＶＧＡチップ
３２０、８２０  サウスブリッジ
３３０、３４０、８３０、８４０  Ｉ／Ｏスイッチ
３５０、８５０  ＬＡＮチップ
３６０、８６０  ストレージチップ
３７０、３８０、８７０、８８０  ＰＣＩｅスロット
【図１】
0005585332.tif 000002
【図２】
0005585332.tif 000003
【図３】
0005585332.tif 000004
【図４】
0005585332.tif 000005
【図５】
0005585332.tif 000006
【図６】
0005585332.tif 000007
【図７】
0005585332.tif 000008
【図８】
0005585332.tif 000009
【図９】
0005585332.tif 000010
【図１０】
0005585332.tif 000011
【図１１】
0005585332.tif 000012