(57)【特許請求の範囲】
【請求項１】
上位に接続された演算処理装置から発行されたリード要求に応じて周辺装置にデータ転送要求を発行するホストブリッジと、前記周辺装置と各々複数のレーンを介して接続され、前記ホストブリッジと前記周辺装置との間を中継する第１および第２のホストバスアダプタと、前記第１および第２のホストバスアダプタと各々接続された第１および第２のポートを有するスイッチ装置とを有するコンピュータシステムであって、
前記ホストブリッジは、
前記周辺装置との間で前記第１のポートを介してデータ転送が行われている間、前記複数のレーンの各々に対して、前記第１のホストバスアダプタに対する通信が可能であるか否かを判断することによって前記レーンが正常であるか否かを判断するヘルスチェック機能と、
前記第１のポートの前記複数のレーンのうちのいずれかに通信エラーが発生した場合に、前記複数のレーンのうち正常であるレーンを使用して前記データ転送における転送未完了のデータを受信する未完了データ処理機能と、
前記転送未完了のデータの受信が完了した後、前記ホストブリッジと前記周辺装置との間の中継を前記第１のホストバスアダプタから前記第２のホストバスアダプタに切り替えるバス切り替え機能と
を有することを特徴とするコンピュータシステム。
【請求項２】
前記スイッチ装置は前記第１のポートを構成するレーンに異常が発生した場合に前記ホストブリッジに前記通信エラーを表すエラーメッセージを送信することを特徴とする、請求項１に記載のコンピュータシステム。
【請求項３】
前記第１のポートを構成する前記レーンの全てが異常である場合、前記ホストブリッジは前記転送未完了のデータを破棄して前記ホストブリッジと前記周辺装置との間の中継を前記第１のホストバスアダプタから前記第２のホストバスアダプタに切り替えることを特徴とする、請求項１に記載のコンピュータシステム。
【請求項４】
前記第１のホストバスアダプタが自らが送信待ちの状態であるか否かを表すサスペンドレジスタを有し、
前記ホストブリッジは前記サスペンドレジスタを前記第１のホストバスアダプタが送信待ちでない状態を表す値に書き換えることによって前記転送未完了のデータの送信を再開させることを特徴とする、請求項１に記載のコンピュータシステム。
【請求項５】
前記複数のレーンがＰＣＩ  Ｅｘｐｒｅｓｓ規格に準拠していることを特徴とする、請求項１ないし請求項４のうちいずれか１項に記載のコンピュータシステム。
【請求項６】
上位に接続された演算処理装置から発行されたリード要求に応じて周辺装置にデータ転送要求を発行するホストブリッジと、前記周辺装置と各々複数のレーンを介して接続され、前記ホストブリッジと前記周辺装置との間を中継する第１および第２のホストバスアダプタと、前記第１および第２のホストバスアダプタと各々接続された第１および第２のポートを有するスイッチ装置とを有するコンピュータシステムにおいて通信エラーが発生した場合の障害処理方法であって、
前記ホストブリッジが前記周辺装置にデータ転送要求を発行する転送要求工程と、
前記周辺装置が前記データ転送要求に反応して、前記第１のホストバスアダプタおよび前記第１のポートを介して前記ホストブリッジにデータを転送するデータ転送工程と、
前記データ転送工程が行われている間、前記複数のレーンの各々に対して、前記第１のホストバスアダプタに対する通信が可能であるか否かを判断することによって前記レーンが正常であるか否かを判断するヘルスチェック工程と、
前記データ転送工程が行われている間に前記第１のポートの前記複数のレーンのうちのいずれかに通信エラーが発生した場合に、前記ホストブリッジが前記複数のレーンのうち正常であるレーンを使用して前記データ転送における転送未完了のデータを受信する未完了データ処理工程と、
前記転送未完了のデータの受信が完了した後、前記ホストブリッジと前記周辺装置との間の中継を前記第１のホストバスアダプタから前記第２のホストバスアダプタに切り替えるバス切り替え工程と
を有することを特徴とする障害処理方法。
【請求項７】
前記第１のポートを構成する前記レーンの全てが異常である場合、前記バス切り替え工程は前記ホストブリッジが前記転送未完了のデータを破棄して前記ホストブリッジと前記周辺装置との間の中継を前記第１のホストバスアダプタから前記第２のホストバスアダプタに切り替えることを特徴とする、請求項６に記載の障害処理方法。
【請求項８】
上位に接続された演算処理装置から発行されたリード要求に応じて周辺装置にデータ転送要求を発行するホストブリッジと、前記周辺装置と各々複数のレーンを介して接続され、前記ホストブリッジと前記周辺装置との間を中継する第１および第２のホストバスアダプタと、前記第１および第２のホストバスアダプタと各々接続された第１および第２のポートを有するスイッチ装置とを有するコンピュータシステムにおいて、前記ホストブリッジが備えるコンピュータに、
前記周辺装置にデータ転送要求を発行する転送要求処理と、
前記データ転送要求に反応した前記周辺装置から、前記第１のホストバスアダプタおよび前記第１のポートを介してデータを受信するデータ転送処理と、
前記データ転送処理が行われている間、前記複数のレーンの各々に対して、前記第１のホストバスアダプタに対する通信が可能であるか否かを判断することによって前記レーンが正常であるか否かを判断するヘルスチェック処理と、
前記データ転送処理が行われている間に前記第１のポートの前記複数のレーンのうちのいずれかに通信エラーが発生した場合に、前記複数のレーンのうち正常であるレーンを使用して前記データ転送における転送未完了のデータを受信する未完了データ処理と、
前記転送未完了のデータの受信が完了した後、前記ホストブリッジと前記周辺装置との間の中継を前記第１のホストバスアダプタから前記第２のホストバスアダプタに切り替えるバス切り替え処理と
を実行させることを特徴とする障害処理プログラム。
【請求項９】
前記第１のポートを構成する前記レーンの全てが異常である場合、前記バス切り替え処理は前記ホストブリッジが前記転送未完了のデータを破棄して前記ホストブリッジと前記周辺装置との間の中継を前記第１のホストバスアダプタから前記第２のホストバスアダプタに切り替えることを特徴とする、請求項８に記載の障害処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータシステムにおいてデータの転送を行うバスに関し、特に該バスにおいて障害が発生した場合の処理に関する。
【背景技術】
【０００２】
ＰＣＩ  Ｅｘｐｒｅｓｓは、２００２年にＰＣＩ−ＳＩＧによって策定された、ＰＣＩバスに代わるパソコン向けシリアル転送インターフェースである。ＰＣＩ  Ｅｘｐｒｅｓｓで用いられる最小構成の伝送路はレーンと呼ばれ、１ポートがこのレーンを複数本束ねて構成されることが一般的である。
【０００３】
ＰＣＩ  Ｅｘｐｒｅｓｓ  １．１では、１レーンは片方向２．０Ｇｂｐｓ、双方向４．０Ｇｂｐｓ（いずれも実効速度）の全二重通信が可能である。複数本のレーンを束ねたポートにおける通信速度は、１レーンの通信速度に該ポートで束ねられたレーンの本数を乗算した値になる。なお、２００７年１月に発表されたＰＣＩ  Ｅｘｐｒｅｓｓ  ２．０では、１レーンあたりの通信速度はＰＣＩ  Ｅｘｐｒｅｓｓ  １．１の２倍に高められている。
【０００４】
１レーンで構成されたＰＣＩ  Ｅｘｐｒｅｓｓポートを「ＰＣＩ  Ｅｘｐｒｅｓｓ  ｘ１」、２レーンのポートを「ｘ２」というように呼称する。現在ではｘ２、ｘ４、ｘ８、ｘ１２、ｘ１６、ｘ３２などの製品が登場している。ｘ１６では通信速度が片方向３２Ｇｂｐｓ、ｘ３２では片方向６４Ｇｂｐｓとなる。
【０００５】
ＰＣＩ  Ｅｘｐｒｅｓｓバスは、転送効率を上げるため、リクエスタがコンプリタに対しリクエストを発行すると、一旦トランザクションを終了し、リクエストを受けたコンプリタがデータを準備できた時点で、コンプリタがトランザクションを開始しデータ転送をするスプリットトランザクション方式が採用されている。また、リクエスタは、発行したトランザクションの完了を待たずに次々とリード要求を発行し、リクエストに対するリプライデータの転送準備が完了したコンプリタから順番にデータを受け取ることができるリラックスオーダリングと呼ばれる機能が実装されている。
【０００６】
このＰＣＩ  Ｅｘｐｒｅｓｓバスで障害が発生すると、その時点で致命的エラーとして処理され、必要であればレジスタ情報が採取され、システムの再起動により装置の復旧が行われていた。また、高信頼性が要求されるシステムでは、ＰＣＩバスを冗長構成とし、障害が発生したときは、デバイスドライバによるソフトウェア制御により障害パスの閉塞、および冗長パスへの切り替えによりリカバリが行われていた。
【０００７】
なお、コンピュータ内部において障害が発生した際のリカバリ、特にＰＣＩ  Ｅｘｐｒｅｓｓなどのようなコンピュータ内部のバスにおいて障害が発生した際のリカバリについては、以下のような文献がある。特許文献１には、コンピュータ起動時の自己診断（ＰＯＳＴ）の際に発生したハードウェアのエラーを記録して表示する方法が記載されている。特許文献２には、データ転送中にエラーが発生した場合に未完了のデータ転送を延期して再送させる方法が記載されている。
【０００８】
特許文献３には、ＰＣＩ  Ｅｘｐｒｅｓｓにおいて入出力バスが閉塞された場合にデータ転送を一時中止させ、ポート番号の再設定を実行した後に該データ転送を再開させるという技術が記載されている。特許文献４には、チップセットのバッファ内で保留にされているトランザクションが所定の量を超えた場合にプロセッサが節電状態から脱するという技術が記載されている。
【０００９】
【特許文献１】特開２００１−３３１３４２号公報
【特許文献２】特開２００４−３２６１５１号公報
【特許文献３】特開２００６−１９５８２１号公報
【特許文献４】特表２００７−５１７３３２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかしながら、これまでのＰＣＩ  Ｅｘｐｒｅｓｓバスで障害が発生した場合、前述のスプリットトランザクションおよびリラックスオーダリングの機能により発行されてデータ転送が未完了となっているトランザクションは、障害の発生したパスが閉塞されることにより全て破棄されるという問題がある。
【００１１】
特にＰＣＩ  Ｅｘｐｒｅｓｓバスが冗長構成である場合、障害が発生してパスの閉塞および切り替えが発生した時に破棄されたトランザクションをリカバリするためには、上位のデバイスドライバからリトライを行う必要がある。このデバイスドライバによるリカバリ処理は、ソフトウェア制御によるパス閉塞から冗長パスへ切り替えが行われ、さらにソフトウェア制御によるリトライ処理（破棄されたトランザクションに係る未転送のデータの再送）が行われるため、障害発生から復旧までにある程度の時間が必要である。
【００１２】
ちなみに前述の特許文献１〜４においては、いずれもこの場合には未転送のデータを破棄してリトライする必要が生じるので、上記の問題を解決できない。
【００１３】
本発明の目的は、複数のレーンによって構成される複数のバスによって同一のデバイスに接続されるコンピュータシステムにおいて、バス障害が発生した場合において未転送のデータを破棄せず、迅速にリカバリ処理を行うことのできるコンピュータシステム、障害処理方法および障害処理プログラムを提供することにある。
【課題を解決するための手段】
【００１４】
上記目的を達成するため、本発明に係るコンピュータシステムは、上位に接続された演算処理装置から発行されたリード要求に応じて周辺装置にデータ転送要求を発行するホストブリッジと、周辺装置と各々複数のレーンを介して接続され、ホストブリッジと周辺装置との間を中継する第１および第２のホストバスアダプタと、第１および第２のホストバスアダプタと各々接続された第１および第２のポートを有するスイッチ装置とを有するコンピュータシステムであって、ホストブリッジは、周辺装置との間で第１のポートを介してデータ転送が行われている間、複数のレーンの各々に対して、第１のホストバスアダプタに対する通信が可能であるか否かを判断することによってレーンが正常であるか否かを判断するヘルスチェック機能と、第１のポートの複数のレーンのうちのいずれかに通信エラーが発生した場合に、複数のレーンのうち正常であるレーンを使用してデータ転送における転送未完了のデータを受信する未完了データ処理機能と、転送未完了のデータの受信が完了した後、ホストブリッジと周辺装置との間の中継を第１のホストバスアダプタから第２のホストバスアダプタに切り替えるバス切り替え機能とを有することを特徴とする。
【００１５】
上記目的を達成するため、本発明に係る障害処理方法は、上位に接続された演算処理装置から発行されたリード要求に応じて周辺装置にデータ転送要求を発行するホストブリッジと、周辺装置と各々複数のレーンを介して接続され、ホストブリッジと周辺装置との間を中継する第１および第２のホストバスアダプタと、第１および第２のホストバスアダプタと各々接続された第１および第２のポートを有するスイッチ装置とを有するコンピュータシステムにおいて通信エラーが発生した場合の障害処理方法であって、ホストブリッジが周辺装置にデータ転送要求を発行する転送要求工程と、周辺装置がデータ転送要求に反応して、第１のホストバスアダプタおよび第１のポートを介してホストブリッジにデータを転送するデータ転送工程と、データ転送工程が行われている間、複数のレーンの各々に対して、第１のホストバスアダプタに対する通信が可能であるか否かを判断することによってレーンが正常であるか否かを判断するヘルスチェック工程と、データ転送工程が行われている間に第１のポートの複数のレーンのうちのいずれかに通信エラーが発生した場合に、ホストブリッジが複数のレーンのうち正常であるレーンを使用してデータ転送における転送未完了のデータを受信する未完了データ処理工程と、転送未完了のデータの受信が完了した後、ホストブリッジと周辺装置との間の中継を第１のホストバスアダプタから第２のホストバスアダプタに切り替えるバス切り替え工程とを有することを特徴とする。
【００１６】
上記目的を達成するため、本発明に係る障害処理プログラムは、上位に接続された演算処理装置から発行されたリード要求に応じて周辺装置にデータ転送要求を発行するホストブリッジと、周辺装置と各々複数のレーンを介して接続され、ホストブリッジと周辺装置との間を中継する第１および第２のホストバスアダプタと、第１および第２のホストバスアダプタと各々接続された第１および第２のポートを有するスイッチ装置とを有するコンピュータシステムにおいて、ホストブリッジが備えるコンピュータに、周辺装置にデータ転送要求を発行する転送要求処理と、データ転送要求に反応した周辺装置から、第１のホストバスアダプタおよび第１のポートを介してデータを受信するデータ転送処理と、データ転送処理が行われている間、複数のレーンの各々に対して、第１のホストバスアダプタに対する通信が可能であるか否かを判断することによってレーンが正常であるか否かを判断するヘルスチェック処理と、データ転送処理が行われている間に第１のポートの複数のレーンのうちのいずれかに通信エラーが発生した場合に、複数のレーンのうち正常であるレーンを使用してデータ転送における転送未完了のデータを受信する未完了データ処理と、転送未完了のデータの受信が完了した後、ホストブリッジと周辺装置との間の中継を第１のホストバスアダプタから第２のホストバスアダプタに切り替えるバス切り替え処理とを実行させることを特徴とする。
【発明の効果】
【００１７】
本発明は、未転送のデータを障害の発生していないレーンを介して転送するように構成したので、データを破棄する必要がなくなる。これによって、データを破棄せず、迅速にリカバリ処理を行うことのできるという、従来にない優れたコンピュータシステム、障害処理方法および障害処理プログラムを提供することができる。
【発明を実施するための最良の形態】
【００１８】
図１は、本発明の実施の形態に係るコンピュータシステム１の構成を示すブロック図である。ＣＰＵ１１は、コンピュータシステム１の中枢機能を担う演算処理装置で、ＯＳ、ＢＩＯＳ、アプリケーションプログラムなどを実行する。ホストブリッジ１２は、ＣＰＵ１１とＰＣＩ  Ｅｘｐｒｅｓｓバス１０との間を接続するルートコンプレックス（Root Complex）である。
【００１９】
ＰＣＩ  Ｅｘｐｒｅｓｓバス１０は、ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３を介して４つのポート２１ａ〜ｄ（ポートＡ〜Ｄ）に接続される。各々のポート２１ａ〜ｄはｘ８レーン、つまりレーン０〜レーン７の８本のレーンによって構成される。そのうちのポート２１ａ（ポートＡ）が、ＰＣＩ  Ｅｘｐｒｅｓｓバス１０を介してホストブリッジ１２と接続される。以後この接続をバスＡという。
【００２０】
そしてポート２１ｃ〜ｄ（ポートＣ〜Ｄ）の２ポートに、各々ホストバスアダプタ（Host Bus Adopter、以後ＨＢＡという）１４〜１５が接続される。ＨＢＡ１４〜１５は、ＰＣＩ  Ｅｘｐｒｅｓｓバス１０のエンドポイント（End Point）をなす。
【００２１】
ＨＢＡ１４〜１５は各々、自らが送信待ちの状態であるか否かを表すサスペンドレジスタ２４〜２５を有する。これらのサスペンドレジスタ２４〜２５は、外部からリードライト可能なレジスタとしてＰＣＩのアドレス空間に可視化されている。つまり、ＰＣＩ  Ｅｘｐｒｅｓｓバス１０に接続されるすべての機器から、リードおよびライトのいずれのアクセスも可能である。
【００２２】
ＨＢＡ１４〜１５の各々を冗長パスとして、ディスク装置１６が接続される。ＨＢＡ１４をプライマリ、ＨＢＡ１５をセカンダリとしている。以後、ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３とＨＢＡ１４との接続をバスＢという。また、ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３とＨＢＡ１５との接続をバスＣという。バスＡ〜バスＣは各々、レーン０〜レーン７の８レーンで構成される。
【００２３】
ＣＰＵ１１は、ＰＣＩ  Ｅｘｐｒｅｓｓの仕様により（スプリットトランザクション、リラックスオーダリングなど）ディスク装置１６に対して複数のリード要求を発行することができる。ＣＰＵ１１から発行されたリード要求は、ホストブリッジ１２で管理されている。いま、ＲＥＱ１〜５の５本のリード要求が発行され、そのうちＲＥＱ１〜２は処理が完了し、各々のリード要求に対応するデータであるＤＡＴＡ１〜２が既にホストブリッジ１２に返信されている。ＲＥＱ３〜５は処理が未完了である。
【００２４】
一方、冗長パスのプライマリであるＨＢＡ１４は、ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３を介して受け取ったホストブリッジ１２からのリード要求ＲＥＱ１〜５のうち、ＲＥＱ１〜２に対応するデータであるＤＡＴＡ１〜２は既にディスク装置１６から読み出してホストブリッジ１２に返信したが、ＲＥＱ３〜５に対応するデータであるＤＡＴＡ３〜５についてはディスク装置１６からのデータ読み出しが完了して送信準備ができ次第、ホストブリッジ１２に送信されることになっている。
【００２５】
ここで、ＲＥＱ３〜５に対応するＤＡＴＡ３〜５について、ホストブリッジ１２とＨＢＡ１４との間でリードトランザクションが行われていたときに、バスＢに含まれるある１つのレーンで障害が発生したと想定する。ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３は、この障害を通信エラーとして検出し、ポートＣ（ポート２１ｃ）において障害が発生した旨のエラーメッセージをホストブリッジ１２に対して送信する。このエラーメッセージは、ＰＣＩ  Ｅｘｐｒｅｓｓの仕様に基づき送信される。同時に、ＤＡＴＡ３〜５を送信していたＨＢＡ１４は、通信エラーによりデータ送信を完了することができないので、送信処理を異常停止する。
【００２６】
ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３からエラーメッセージを受け取ったホストブリッジ１２は、リカバリモードに移行する。リカバリモードに移行したホストブリッジ１２は、障害が発生したＰＣＩ  Ｅｘｐｒｅｓｓバス１０のヘルスチェックを行う。ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３のポートＣ（ポート２１ｃ）からエラーメッセージを受信したので、ホストブリッジ１２は、バスＢの各レーンに対してヘルスチェックを行う。
【００２７】
ヘルスチェックは、ある１本のレーンでリンクを確立してコンフィグレーションレジスタリード命令を送信することによって行う。この命令は、ＨＢＡ１４のコンフィグレーションレジスタのヘッダ情報であるベンダーＩＤおよびデバイスＩＤをリードする命令である。ＨＢＡ１４〜１５は各々、ＰＣＩバスの仕様に基づき、コンフィグレーションレジスタリード命令に反応して、コントローラチップ（図示せず）に記憶されているベンダーＩＤおよびデバイスＩＤをコンフィグレーションレジスタのヘッダ情報に含めてホストブリッジ１２に返信する。
【００２８】
従って、コンフィグレーションレジスタリード命令に対する応答がエラーとならないことを確認することで、リンクが確立したか否かをチェックすることができる。このヘルスチェックの結果、暫定確立したレーンに問題が無かった場合、このレーンを用いて、該リードトランザクションの中断したことによって転送未完了となったデータを再送信する。
【００２９】
中断したデータの再送信処理は次のように行う。エラーが発生したとき、ＨＢＡ１４は送信処理を停止し、同時にサスペンドレジスタ２４の値を１にセットする。サスペンドレジスタ２４〜２５の値は、通信が中断している時は１にセットされ、通常に通信が行われている時は０にセットされる。
【００３０】
ＨＢＡ１４は、サスペンドレジスタ２４の値が１にセットされている間は、中断された未処理のリードデータについて送信処理を行わず、送信待ちの状態となる。ホストブリッジ１２は、ヘルスチェック後に健常なある１本のレーンでリンクを暫定確立すると、このレーンを使い転送未完了データの再送処理を開始する。
【００３１】
ホストブリッジ１２は、健常なレーンでリンクが確立した後に、ＨＢＡ１４のサスペンドレジスタ２４の値を０にセットする。ＨＢＡ１４は、サスペンドレジスタ２４の値が０にセットされたことを検出すると、未処理のまま中断していたリードデータＤＡＴＡ３〜５をホストブリッジ１２に対して送信する。
【００３２】
ホストブリッジ１２は、発行済みで未完了となっているリクエストＲＥＱ３〜５に対応するＤＡＴＡ３〜５が送信されたことを確認すると、障害が発生したＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３のポートＣを閉塞する。ポートＣの閉塞が完了すると、ホストブリッジ１２は、ディスク装置１６への通信経路をポートＤ（バスＣ）に切り替え、以降のデータ転送を再開する。
【００３３】
図２は、図１で開示したコンピュータシステム１において行われるリカバリ動作を表すタイムチャートである。サスペンドレジスタ２４の値は、この処理を開始する段階では「０」である。まず、ＣＰＵ１１がホストブリッジ１２を介してＨＢＡ１４に対してＲＥＱ１〜５のリード要求を発行し（ステップＳ１０１）、それに対してＨＢＡ１４はＲＥＱ１〜２に対応するＤＡＴＡ１〜２がホストブリッジ１２に返信する（ステップＳ１０２〜３）。
【００３４】
ＨＢＡ１４がＤＡＴＡ３を返信しようとした所で、バスＢのレーン０において障害が発生した（ステップＳ１０４）。この段階ではＲＥＱ１〜２が完了し、ＲＥＱ３〜５が未完了の状態で保留されたことになる。このことをサスペンドされたということがある。また、この段階でＨＢＡ１４は、自らのサスペンドレジスタ２４の値を「１」とする。
【００３５】
ステップＳ１０４で発生した障害を検出したＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３は、ポートＣ（ポート２１ｃ）において障害が発生した旨のエラーメッセージをホストブリッジ１２に対して送信する（ステップＳ１０５）。
【００３６】
該エラーメッセージを受信したホストブリッジ１２は、リカバリモードに移行し、まずバスＢのレーン０に対してリンクを確立し、ヘルスチェックのためのコンフィグレーションレジスタリード命令を発行する（ステップＳ１０６）。しかしレーン０においては障害が発生しているため、ＨＢＡ１４は該命令に対してベンダーＩＤ／デバイスＩＤを返信することができない。そこでＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３はホストブリッジ１２に対してＡＬＬ−Ｆ（エラー）を返信する（ステップＳ１０７）。
【００３７】
再びエラーメッセージを受信したホストブリッジ１２は、今度は、まずバスＢのレーン１に対してリンクを確立し、ヘルスチェックのためのコンフィグレーションレジスタリード命令を発行する（ステップＳ１０８）。レーン１は正常であるので、ＨＢＡ１４は該命令に対してベンダーＩＤ／デバイスＩＤを返信する（ステップＳ１０９）。
【００３８】
ベンダーＩＤ／デバイスＩＤの返信を受けたホストブリッジ１２は、これによってレーン１が正常であると判断できたので、レーン１のリンクを使って未完了のデータ転送を再開することに決定する。なお、レーンのヘルスチェックで正常か異常かを判断するときは、コンフィグレーションレジスタリード命令に対するデータが、ＡＬＬ−Ｆかそうでないかで判断する。
【００３９】
ホストブリッジ１２は、正常であると判断できたレーン１のリンクを介してサスペンドレジスタ２４にアクセスし、サスペンドレジスタ２４の値を「０」にセットして、ＨＢＡ４に中断されたＤＡＴＡ３〜５の送信再開を指示する（ステップＳ１１０）。ＨＢＡ１４は、サスペンドレジスタの値が「０」に戻されたことを検出すると、ＤＡＴＡ３〜５を送信する（ステップＳ１１１〜３）。
【００４０】
ＤＡＴＡ３〜５をすべて受信したことを確認したホストブリッジ１２は、ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３のポートＣ（ポート２１ｃ）をリセットしてポート閉塞する（ステップＳ１１４）。そして、ディスク装置１６との接続を、プライマリであるバスＢから、セカンダリであるバスＣに切り替える（ステップＳ１１５）。以後はバスＣを介してＨＢＡ１５に対してリード要求を発行し（ステップＳ１１６）、該リード要求に対応するデータを受け取る（ステップＳ１１７〜８）。
【００４１】
図３は、図２で示したリカバリ動作においてホストブリッジ１２が行う動作を表すフローチャートである。処理を開始し、ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ１３がＨＢＡ１４において障害の発生を検出して送信したエラーメッセージを受信すると（ステップＳ２０１）、ホストブリッジ１２はリカバリモードとなる（ステップＳ２０２）。
【００４２】
バスＢを構成するレーンが全部でＮ本あり、その各々をレーン０〜レーンＮ−１と呼ぶものとする（Ｎは２以上の整数）。図１に示した例ではＮ＝８で、バスＢはレーン０〜レーン７で構成される。ホストブリッジ１２は、まずｎ＝０として（ステップＳ２０３）、レーンｎに対してリンクを確立してヘルスチェックを行い（ステップＳ２０４）、レーンｎが健常であるか否かを判断する（ステップＳ２０５）。
【００４３】
ステップＳ２０５でレーンｎが健常であれば、該レーンを介してサスペンドレジスタ２４の値を「０」にセットして（ステップＳ２０６）、転送未完了のデータの送信を再開させる（ステップＳ２０７）。この転送未完了のデータの送信が完了した後で、ディスク装置１６との接続を、プライマリであるバスＢから、セカンダリであるバスＣに切り替える（ステップＳ２１０）。
【００４４】
ステップＳ２０５でレーンｎが健常でなければ、レーン番号ｎがＮ−１に到達しているか否かを判断する（ステップＳ２０８）。ｎ＜Ｎ−１であれば、まだヘルスチェックを行っていないレーンが残っていることになるので、ｎ＝ｎ＋１として（ステップＳ２０９）、ステップＳ２０４に戻って処理を繰り返す。
【００４５】
ステップＳ２０８でｎ＝Ｎ−１となれば、すべてのレーンに対してヘルスチェックを行ったが正常なレーンが存在しなかったことになるので、プライマリであるバスＢを断念して、ディスク装置１６との接続をセカンダリであるバスＣに切り替える（ステップＳ２１０）。ここで初めて転送未完了のデータが破棄されることになる。しかし、バスＢの全レーンが異常となる可能性は小さいので、多くの場合においては転送未完了のデータを破棄しないでリカバリを行うことができる。
【００４６】
複数のレーンのうち健常なレーンをサーチして暫定的にリンクを確立し、これを用いて中断したデータを送信させるという本実施の形態の動作は、１本のレーンしか使用しないので、全レーンが正常である場合と比べて転送速度は落ちる。しかしながら、この暫定的なリンクによるデータの転送は、転送未完了のデータの転送にのみ使用され、該データが転送された後はディスク装置１６との接続がバスＢからセカンダリであるバスＣに切り替えられる。従って、その後のデータの転送において転送速度が落ちることはない。
【００４７】
また、転送未完了のデータを破棄せずに接続を切り替えることにより、上位のデバイスドライバによるリトライ処理で破棄されたデータを再送させることが不要となる。従って、リカバリにかかる時間を短縮することができる。
【００４８】
なお、以上の説明ではディスク装置１６からのデータの読み出しという例に基づいて説明したが、実際にはディスク装置１６に限らず、ホストブリッジ１２側からの要求に基づいてデータを転送するデバイスに対して本実施の形態を適用できる。また、ＰＣＩ  Ｅｘｐｒｅｓｓ以外にも、複数のレーンによってバスを形成するインターフェースに対して本実施の形態を適用できる。
【００４９】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることは言うまでもないことである。
【産業上の利用可能性】
【００５０】
コンピュータシステムにおいてデータの転送を行うバスで、複数のレーンによってバスが形成されるものに対して適用できる。特にＰＣＩ  Ｅｘｐｒｅｓｓ規格に基づくバスに好適である。
【図面の簡単な説明】
【００５１】
【図１】本発明の実施の形態に係るコンピュータシステムの構成を示すブロック図である。
【図２】図１で開示したコンピュータシステムにおいて行われるリカバリ動作を表すタイムチャートである。
【図３】図２で示したリカバリ動作においてホストブリッジが行う動作を表すフローチャートである。
【符号の説明】
【００５２】
１  コンピュータシステム
１０  ＰＣＩ  Ｅｘｐｒｅｓｓバス
１１  ＣＰＵ
１２  ホストブリッジ
１３  ＰＣＩ  Ｅｘｐｒｅｓｓスイッチ
１４、１５  ＨＢＡ
１６  ディスク装置
２１ａ、２１ｂ、２１ｃ、２１ｄ  ポート
２４、２５  サスペンドレジスタ
【図１】
0005151500.tif 000002
【図２】
0005151500.tif 000003
【図３】
0005151500.tif 000004