説明

コンピュータシステム

【課題】IO制御回路の配下にデバイスが接続され、そのデバイスの配下に複数のバスが接続された場合でも、障害が発生したバスを閉塞することができるコンピュータシステムを提供する。
【解決手段】本発明のコンピュータシステムは、複数のバス4−1、4−2と、複数のバス4−1、4−2が接続されたデバイス3と、デバイス3に接続されたIO制御回路2とを具備している。デバイス3は、複数のバス4−1、4−2のうちの第1バス4−1に障害が発生したときに、それを表すエラーメッセージを送信する。IO制御回路2は、エラーメッセージに応じて、第1バス4−1を閉塞する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、PCI(Peripheral Component Interconect)バスを具備するコンピュータシステムに関する。
【背景技術】
【0002】
従来のコンピュータシステムについて、特開2005−215809号公報(特許文献1)を参照して説明する。特許文献1に記載されたコンピュータシステムは、プロセッサと、IO制御回路と、PCIバスと、メモリ(主記憶)とを具備している。
プロセッサは、IO制御回路に接続されている。
メモリは、プロセッサとIO制御回路とに接続されている。メモリには、ドライバを含むOS(Operating System)が格納されている。
PCIバスは、IO制御回路2の配下に接続されている。そのPCIバスには、複数の周辺装置が接続される。
【0003】
プロセッサは、ジョブを実行させるために、PCIバスに対する動作用トランザクションを発行する。この場合、プロセッサは、動作用トランザクションを、IO制御回路を介してPCIバスに出力する。
例えば、PCIバスで障害が発生した場合、IO制御回路は、バス障害インジケータ(閉塞フラグ)を設定し、そのPCIバスを閉塞する。
そこで、プロセッサは、PCIバスに対する動作用トランザクションを発行する。この場合、IO制御回路は、閉塞フラグを設定しているため、動作用トランザクションに対して、PCIバスが閉塞されていることを表す閉塞用トランザクションを生成し、プロセッサに出力する(リプライする)。閉塞用トランザクションは、例えば、全ビットが1であり(ALL1と称する)、4バイトのデータである場合、FFFFFFFFhにより表される。プロセッサは、動作用トランザクションに対して、ALL1を表す閉塞用トランザクションが返ったため、PCIバスに障害が発生したものと判断することができる。
閉塞されたPCIバスが復旧した場合、IO制御回路は、閉塞フラグを解除する。この場合、プロセッサは、再度、ジョブを実行させるために、PCIバスに対する動作用トランザクションを発行する。これにより、本発明では、PCIバス4−1に障害が発生しても、コンピュータシステムを停止させず、復旧、継続動作させることにより、エラーリカバリを行うことができる。
【0004】
【特許文献1】特開2005−215809号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかし、特許文献1に記載されたコンピュータシステムでは、PCIバスがIO制御回路の配下に直接接続されている。このため、次の様な課題がある。
【0006】
第1の課題は、PCIバスの配下に接続されるデバイスが、ブリッジやスイッチであった場合、そのデバイスの配下に1つ又は複数のPCIバスが接続されることも考えられる。この場合、ブリッジやスイッチの配下のPCIバスで故障が発生した場合、IO制御回路は、閉塞対象となるPCIバスを認識できない。このように、IO制御回路の配下にデバイスが接続され、そのデバイスの配下に複数のPCIバスが接続された場合、特許文献1に記載されたコンピュータシステムでは、障害が発生したPCIバスを閉塞することができない。
【0007】
一般にPCIはバス構成を取ることも可能だが、そのバス上に複数のデバイスを実装すると、クロックキューやバス上の負荷容量増加などの電気的な問題で、動作周波数が上げられなくなる問題があり、近年のPCIでは、PCI Expressに見られるように1つのバスに1つのデバイスを搭載する方法で接続し、性能を向上させることが多い。それではスロット数が減ってしまうため、PCIブリッジや、PCIスイッチを接続して、バスを増やすことで、PCIスロット数を確保する必要がある。ブリッジやスイッチは安価で、開発費が不要となる汎用品を使うことが多いが、汎用品であるブリッジやスイッチには、特許文献1に記載されているような機能が実装されていないため、エラーリカバリを実現しようとすると、汎用のブリッジやスイッチを使えない問題がある。
【0008】
したがって、本発明の課題は、IO制御回路の配下にデバイスが接続され、そのデバイスの配下に複数のバスが接続された場合でも、障害が発生したバスを閉塞することができるコンピュータシステムを提供することにある。
【課題を解決するための手段】
【0009】
以下に、[発明を実施するための最良の形態]で使用する番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、[特許請求の範囲]の記載と[発明を実施するための最良の形態]の記載との対応関係を明らかにするために付加されたものであるが、[特許請求の範囲]に記載されている発明の技術的範囲の解釈に用いてはならない。
【0010】
本発明のコンピュータシステムは、複数のバス(4−1、4−2)(6−1、6−2)と、前記複数のバス(4−1、4−2)(6−1、6−2)が接続されたデバイス(3)(5)と、前記デバイス(3)(5)に接続されたIO制御回路(2)とを具備している。
前記デバイス(3)(5)は、前記複数のバス(4−1、4−2)(6−1、6−2)のうちの第1バス(4−1)(6−1)に障害が発生したときに、それを表すエラーメッセージを送信する。
前記IO制御回路(2)は、前記エラーメッセージに応じて、前記第1バス(4−1)(6−1)を閉塞する。
【0011】
前記デバイス(3)(5)は、それぞれ前記複数のバス(4−1、4−2)(6−1、6−2)が接続された複数のバス制御部(31−1、31−2)(51−1、51−2)を具備している。
(S2)通常動作において、前記IO制御回路(2)は、送信元(1;71)からの第1動作用トランザクションを前記複数のバス制御部(31−1、31−2)(51−1、51−2)のうちの第1バス制御部(31−1)(51−1)を介して前記第1バス(4−1)(6−1)に出力する。
(S3)前記第1バス(4−1)(6−1)に障害が発生したバス障害発生動作において、前記IO制御回路(2)は、前記エラーメッセージであるエラーメッセージトランザクションに応じて、前記第1バス(4−1)(6−1)を閉塞する。
(S4)前記第1バス(4−1)(6−1)が閉塞されているバス閉塞動作において、前記IO制御回路(2)は、前記送信元(1;71)からの前記第1動作用トランザクションを前記第1バス(4−1)(6−1)に出力しない。
【0012】
(S4)前記バス閉塞動作において、前記第1動作用トランザクションが、リプライが不要なトランザクションである場合、前記IO制御回路(2)は、前記第1動作用トランザクションを破棄する。前記第1動作用トランザクションが、リプライが必要なトランザクションである場合、前記IO制御回路(2)は、前記第1バス(4−1)(6−1)が閉塞されていることを表す第1閉塞用トランザクションを生成して前記送信元(1;71)に出力する。
【0013】
前記IO制御回路(2)は、バス閉塞回路(22)を具備している。
(S3)前記バス障害発生動作において、前記IO制御回路(2)は、前記エラーメッセージトランザクションに応じて、前記第1バス(4−1)(6−1)に対応する閉塞情報(21−1)を前記バス閉塞回路(22)に設定する。
(S4)前記閉塞情報(21−1)が前記バス閉塞回路(22)に設定されている前記バス閉塞動作において、前記IO制御回路(2)は、前記送信元(1;71)からの前記第1動作用トランザクションを前記第1バス(4−1)(6−1)に出力しない。
【0014】
(S5)前記第1バス(4−1)(6−1)が復帰したときの閉塞バス復帰動作において、前記IO制御回路(2)は、前記送信元(1;71)からの第1リセット用コンフィグライトトランザクションを前記第1バス制御部(31−1)(51−1)を介して前記第1バス(4−1)(6−1)に出力して、前記第1バス(4−1)(6−1)をリセットする。前記第1バス制御部(31−1)(51−1)は、前記第1リセット用コンフィグライトトランザクションに対するリプライである第1リセット用リプライトランザクションを前記IO制御回路(2)を介して前記送信元(1;71)に出力する。前記IO制御回路(2)は、前記第1リセット用コンフィグライトトランザクションに応じて、前記バス閉塞回路(22)に設定されている前記閉塞情報(21−1)を消去する。
(S2)通常動作において、IO制御回路(2)は、送信元(1;71)からの第1動作用トランザクションを第1バス制御部(31−1)(51−1)を介して第1バス(4−1)(6−1)に出力する。
【0015】
前記IO制御回路(2)は、更に、それぞれ前記複数のバス(4−1、4−2)(6−1、6−2)に対応する複数のIO制御用レジスタ(21−1、21−2)(21−1、21−2、21’−1、21’−2)を具備している。
前記複数のバス制御部(31−1、31−2)(51−1、51−2)は、それぞれ前記複数のバス(4−1、4−2)(6−1、6−2)に対応する複数のレジスタ(32−1、32−2)(52−1、52−2、52’−1、52’−2)を具備している。
(S1)初期化動作において、前記IO制御回路(2)は、前記送信元(1;71)からの複数の初期化用コンフィグライトトランザクションを受け取る。前記複数の初期化用コンフィグライトトランザクションは、それぞれ複数の識別子を含んでいる。前記IO制御回路(2)は、前記複数の初期化用コンフィグライトトランザクションに含まれる前記複数の識別子をそれぞれ前記複数のIO制御用レジスタ(21−1、21−2)(21−1、21−2、21’−1、21’−2)に格納し、前記複数の初期化用コンフィグライトトランザクションをそれぞれ前記複数のバス制御部(31−1、31−2)(51−1、51−2)に出力する。前記複数のバス制御部(31−1、31−2)(51−1、51−2)は、前記複数の初期化用コンフィグライトトランザクションに含まれる前記複数の識別子をそれぞれ前記複数のレジスタ(32−1、32−2)(52−1、52−2、52’−1、52’−2)に格納する。
【0016】
前記複数のバス制御部(31−1、31−2)(51−1、51−2)は、(S1)前記初期化動作を実行したとき、前記複数の初期化用コンフィグライトトランザクションに対するリプライである前記複数の初期化用リプライトランザクションを前記IO制御回路(2)を介して前記送信元(1;71)に出力する。
【0017】
(S3)前記バス障害発生動作において、前記エラーメッセージトランザクションは、前記複数のレジスタ(32−1、32−2)(52−1、52−2、52’−1、52’−2)のうちの第1レジスタ(32−1)(52−1、52’−1)に格納された第1識別子を含んでいる。前記IO制御回路(2)は、前記エラーメッセージトランザクションに含まれる前記第1識別子が、前記複数のIO制御用レジスタ(21−1、21−2)(21−1、21−2、21’−1、21’−2)のうちの第1IO制御用レジスタ(21−1)(21−1、21’−1)に格納された識別子と一致するとき、前記第1IO制御用レジスタ(21−1)(21−1、21’−1)に対応する前記閉塞情報(21−1)を前記バス閉塞回路(22)に設定する。
【0018】
前記IO制御回路(2)は、更に、バスリセット認識回路(23)を具備している。
(S5)前記閉塞バス復帰動作において、前記第1リセット用コンフィグライトトランザクションは、前記第1識別子とIDとを含んでいる。前記IO制御回路(2)は、前記第1リセット用コンフィグライトトランザクションに含まれる前記IDを前記バスリセット認識回路(23)に格納し、前記第1リセット用コンフィグライトトランザクションを前記第1バス制御部(31−1)(51−1)を介して前記第1バス(4−1)(6−1)に出力して、前記第1バス(4−1)(6−1)をリセットする。前記第1リセット用リプライトランザクションは、前記第1リセット用コンフィグライトトランザクションに含まれる前記第1識別子と前記IDとを含んでいる。前記第1リセット用コンフィグライトトランザクション又は前記第1リセット用リプライトランザクションに含まれる前記第1識別子が、前記第1IO制御用レジスタ(21−1)(21−1、21’−1)に格納された識別子と一致し、且つ、前記バスリセット認識回路(23)に格納された前記IDが、前記第1リセット用リプライトランザクションに含まれるIDと一致するとき、前記IO制御回路(2)は、前記バス閉塞回路(22)に設定されている前記閉塞情報(21−1)を消去する。
【0019】
本発明のIO制御回路(2)は、デバイス(3)(5)を介して複数のバス(4−1、4−2)(6−1、6−2)に接続され、制御回路(26)と、バス閉塞回路(22)とを具備している。
前記制御回路(26)は、前記複数のバス(4−1、4−2)(6−1、6−2)のうちの第1バス(4−1)(6−1)に障害が発生したことを表すエラーメッセージを前記デバイス(3)(5)から受け取る。
前記バス閉塞回路(22)は、前記エラーメッセージに応じて、前記第1バス(4−1)(6−1)を閉塞する。
【0020】
上記の複数のバス(4−1、4−2)(6−1、6−2)として、PCI(Peripheral Component Interconect)が適用される。
【0021】
上記の複数のバス(4−1、4−2)(6−1、6−2)として、Star Fabric、Advanced Switching Interconnect(ASI)が適用される。
【発明の効果】
【0022】
以上により、本発明のコンピュータシステムでは、IO制御回路(2)の配下にデバイス(3)(5)が接続され、そのデバイス(3)(5)の配下に複数のバスが接続された場合でも、障害が発生したバス(4−1)(6−1)を閉塞することができる。
【発明を実施するための最良の形態】
【0023】
以下に添付図面を参照して、本発明のコンピュータシステムについて詳細に説明する。
【0024】
(第1実施形態)
図1は、本発明の第1実施形態によるコンピュータシステムの構成を示している。そのコンピュータシステムは、プロセッサ1と、IO制御回路2と、PCI(Peripheral Component Interconect)デバイスと、複数のPCIバス4−1、4−2と、メモリ(図示しない)とを具備している。
プロセッサ1は、例えばCPU(Central Processing Unit)、MPU(MicroProcessor Unit)であり、IO制御回路2に接続されている。
メモリは、プロセッサ1とIO制御回路2とに接続されている。メモリには、ドライバソフト(以下、ドライバ)を含むOS(Operating System)が格納されている。
PCIデバイスとしては、PCIブリッジ3が例示される。PCIブリッジ3は、IO制御回路2の配下に接続されている。
複数のPCIバス4−1、4−2は、PCIブリッジ3の配下に接続されている。複数のPCIバス4−1、4−2の各々には、周辺装置として、例えばIOカード(図示しない)が接続される。
【0025】
IO制御回路2は、レンジ保持回路21と、バス閉塞回路22と、バスリセット認識回路23と、OB(Outbound)ルーティング回路24と、IB(Inbound)ルーティング回路25と、スイッチ制御回路26と、セレクタ27、28とを具備している。
【0026】
レンジ保持回路21は、複数のレンジレジスタ21−1、21−2を具備している。複数のレンジレジスタ21−1、21−2は、それぞれ複数のPCIバス4−1、4−2に対応付けられている。複数のレンジレジスタ21−1、21−2には、識別子としてファンクション番号(後述)が格納される。
【0027】
バス閉塞回路22は、バスリセット認識回路23とIBルーティング回路25とに接続されている。バス閉塞回路22には、複数の閉塞フラグ(閉塞情報)22−1、22−2が設定される。複数の閉塞フラグ22−1、22−2は、それぞれ複数のPCIバス4−1、4−2に対応付けられている。例えば、閉塞フラグ22−1がバス閉塞回路22に設定された場合、障害が発生したPCIバス4−1をIO制御回路2が閉塞していることを表している。
【0028】
バスリセット認識回路23は、OBルーティング回路24とIBルーティング回路25とスイッチ制御回路26とに接続されている。
OBルーティング回路24は、プロセッサ1とレンジ保持回路21とバス閉塞回路22とに接続されている。
IBルーティング回路25は、スイッチ制御回路26とバス閉塞回路22とに接続されている。
スイッチ制御回路26は、PCIブリッジ3に接続されている。ブリッジ制御回路26は、PCIプロトコルに従ってPCIブリッジ3とのI/F(インタフェース)を制御する。
【0029】
セレクタ27は、OBルーティング回路24とIBルーティング回路25とスイッチ制御回路26とに接続されている。セレクタ27は、OBルーティング回路24からのトランザクション、又は、IBルーティング回路25からのリプライトランザクションをスイッチ制御回路26に出力する。
セレクタ28は、OBルーティング回路24とIBルーティング回路25とプロセッサ1とに接続されている。セレクタ28は、IBルーティング回路25からのトランザクション、又は、OBルーティング回路24からのリプライトランザクションをプロセッサ1に出力する。
【0030】
PCIブリッジ3は、複数のバス制御部31−1、31−2を具備している。
複数のバス制御部31−1、31−2は、それぞれ複数のPCIバス4−1、4−2に対応付けられている。複数のバス制御部31−1、31−2には、それぞれ、複数のPCIバス4−1、4−2を識別する識別子であるバス番号が割り当てられている。
複数のバス制御部31−1、31−2は、複数のレンジレジスタ32−1、32−2を具備している。複数のレンジレジスタ32−1、32−2は、それぞれ複数のPCIバス4−1、4−2に対応付けられている。複数のレンジレジスタ32−1、32−2には、それぞれ、複数のバス制御部31−1、31−2を識別する識別子であるファンクション番号(後述)が格納される。
【0031】
複数のPCIバス4−1、4−2は、それぞれ複数のリセットレジスタ(図示しない)を具備している。複数のリセットレジスタには、それぞれ自己を識別するレジスタ番号が割り当てられている。複数のリセットレジスタに1が設定されたとき、それぞれ複数のPCIバス4−1、4−2がリセットされる。
【0032】
プロセッサ1、メモリの構成は公知であるため、その説明を省略する。また、PCIブリッジ3、複数のPCIバス4−1、4−2の上記の構成以外の構成は公知であるため、その説明を省略する。
【0033】
上記のコンピュータシステムの動作について説明する。コンピュータシステムの動作としては、(S1)初期化動作、(S2)通常動作、(S3)PCIバス障害発生動作、(S4)PCIバス閉塞動作、(S5)閉塞PCIバス復帰動作、が挙げられる。
【0034】
最初に、(S1)初期化動作について説明する。
PCIブリッジ3の初期化は、レンジレジスタ32−1、32−2に対する第1、第2初期化用コンフィグライトトランザクションにより行われる。第1、第2初期化用コンフィグライトトランザクションは、それぞれ、第1、第2アドレスを含んでいる。第1、第2アドレスは、PCIの仕様で決められていて、それぞれ、第1、第2バス番号と、第1、第2ファンクション番号と、第1、第2レジスタ番号とを含んでいる。これについて具体的に説明する。
【0035】
まず、プロセッサ1は、レンジレジスタ32−1に対する第1初期化用コンフィグライトトランザクションを発行する。第1初期化用コンフィグライトトランザクションは、OB(Outbound)方向に出力される。この場合、プロセッサ1は、第1初期化用コンフィグライトトランザクションをIO制御回路2に出力し、IO制御回路2のOBルーティング回路24は、その第1初期化用コンフィグライトトランザクションを受け取り、セレクタ27を介してブリッジ制御回路26に出力する。ブリッジ制御回路26は、その第1初期化用コンフィグライトトランザクションをPCIブリッジ3に出力する。PCIブリッジ3のバス制御部31−1は、ブリッジ制御回路26からの第1初期化用コンフィグライトトランザクションを実行する。このとき、バス制御部31−1は、第1初期化用コンフィグライトトランザクションの第1アドレスに含まれる第1ファンクション番号をレンジレジスタ32−1に格納する。
PCIブリッジ3のバス制御部31−1は、第1初期化用コンフィグライトトランザクションに対するリプライである第1初期化用リプライトランザクションを生成する。第1初期化用リプライトランザクションは、IB(Inbound)方向に出力される。この場合、バス制御部31−1は、第1初期化用リプライトランザクションをIO制御回路2に出力し、IO制御回路2のブリッジ制御回路26は、その第1初期化用リプライトランザクションをIBルーティング回路25に出力する。IBルーティング回路25は、その第1初期化用リプライトランザクションを、セレクタ28を介してプロセッサ1に出力する。
レンジ保持回路21は、プロセッサ1からOBルーティング回路24へのトランザクションを監視する。レンジ保持回路21は、第1初期化用コンフィグライトトランザクションに応じて、その第1アドレスに含まれる第1ファンクション番号をレンジレジスタ21−1に格納する。
【0036】
次に、プロセッサ1は、レンジレジスタ32−2に対する第2初期化用コンフィグライトトランザクションを発行する。この場合、第2初期化用コンフィグライトトランザクションは、OB方向に出力される。PCIブリッジ3のバス制御部31−2は、その第2初期化用コンフィグライトトランザクションを実行する。このとき、バス制御部31−2は、第2初期化用コンフィグライトトランザクションの第2アドレスに含まれる第2ファンクション番号をレンジレジスタ32−2に格納する。
バス制御部31−2は、第2初期化用コンフィグライトトランザクションに対するリプライである第2初期化用リプライトランザクションを生成する。この場合、第2初期化用リプライトランザクションは、IB方向に出力される。
レンジ保持回路21は、第2初期化用コンフィグライトトランザクションに応じて、その第2アドレスに含まれる第2ファンクション番号をレンジレジスタ21−2に格納する。
【0037】
その結果、(S1)初期化動作が終了した時点で、レンジレジスタ21−1、32−1には、同じ値(第1ファンクション番号)が格納され、レンジレジスタ21−2、32−2には、同じ値(第2ファンクション番号)が格納されている。
【0038】
次に、(S2)通常動作について説明する。
【0039】
例えば、プロセッサ1は、ジョブを実行させるために、PCIバス4−1(IOカード)に対する第1動作用トランザクションを発行する。第1動作用トランザクションは、OB方向に出力される。この場合、プロセッサ1は、第1動作用トランザクションをIO制御回路2に出力する。その第1動作用トランザクションの第1アドレスに含まれる第1ファンクション番号は、レンジ保持回路21のレンジレジスタ21−1に格納されたファンクション番号と一致する。このとき、IO制御回路2のOBルーティング回路24は、そのレンジレジスタ21−1に対応する閉塞フラグがバス閉塞回路22に設定されてないため(後述)、第1動作用トランザクションを、セレクタ27を介してブリッジ制御回路26に出力する。ブリッジ制御回路26は、その第1動作用トランザクションをPCIブリッジ3に出力する。ここで、第1動作用トランザクションの第1アドレスに含まれる第1バス番号は、PCIブリッジ3のバス制御部31−1に割り当てられたバス番号と一致する。このため、バス制御部31−1は、第1動作用トランザクションをPCIバス4−1に出力する。
そこで、第1動作用トランザクションが、リプライが必要なトランザクションである場合、PCIブリッジ3のバス制御部31−1は、第1動作用トランザクションに対するリプライである第1動作用リプライトランザクションを生成する。第1動作用リプライトランザクションは、IB方向に出力される。この場合、バス制御部31−1は、第1動作用リプライトランザクションをIO制御回路2に出力し、IO制御回路2のブリッジ制御回路26は、その第1動作用リプライトランザクションをIBルーティング回路25に出力する。IBルーティング回路25は、その第1動作用リプライトランザクションを、セレクタ28を介してプロセッサ1に出力する。
【0040】
次に、(S3)PCIバス障害発生動作について説明する。
PCIバス4−1、4−2で障害が発生した場合、バス制御部31−1、31−2はエラーメッセージを生成する。これについて具体的に説明する。
【0041】
例えば、PCIバス4−1で障害が発生した場合、バス制御部31−1はエラーメッセージトランザクションを生成する。このエラーメッセージトランザクションは、トランザクションIDを含んでいる。トランザクションIDには、バス制御部31−1のレンジレジスタ32−1に格納されている第1ファンクション番号が付加される。エラーメッセージトランザクションは、IB方向に出力される。この場合、バス制御部31−1は、エラーメッセージトランザクションをIO制御回路2に出力し、IO制御回路2のブリッジ制御回路26は、そのエラーメッセージトランザクションをIBルーティング回路25に出力する。IBルーティング回路25は、そのエラーメッセージトランザクションをバス閉塞回路22に出力する。バス閉塞回路22は、そのエラーメッセージトランザクションのトランザクションIDから第1ファンクション番号を抽出して、レンジ保持回路21のレンジレジスタ21−1、21−2に格納されたファンクション番号と比較することにより、障害が発生したPCIバスを特定し、それに対応する閉塞フラグを設定する。この場合、抽出された第1ファンクション番号は、レンジレジスタ21−1に格納されたファンクション番号と一致する。このため、バス閉塞回路22は、レンジレジスタ21−1に対応する閉塞フラグ22−1を設定する。
IO制御回路2は、この閉塞フラグ22−1を設定することにより、PCIバス4−1を閉塞するPCIバス閉塞動作を行なう。
【0042】
このように、本発明では、IO制御回路2の配下にPCIブリッジ3が接続され、そのPCIブリッジ3の配下に複数のPCIバスが接続された場合でも、IO制御回路2は、この閉塞フラグ22−1を設定することにより、障害が発生したPCIバス4−1を閉塞することができる。この場合、IO制御回路2は、後述の(S4)PCIバス閉塞動作を実行する。
【0043】
次に、(S4)PCIバス閉塞動作について説明する。
【0044】
例えば、プロセッサ1は、PCIバス4−1に対する第1動作用トランザクションを発行する。第1動作用トランザクションは、OB方向に出力される。この場合、プロセッサ1は、第1動作用トランザクションをIO制御回路2に出力する。その第1動作用トランザクションの第1アドレスに含まれる第1ファンクション番号は、レンジ保持回路21のレンジレジスタ21−1に格納されたファンクション番号と一致する。このとき、IO制御回路2のOBルーティング回路24は、そのレンジレジスタ21−1に対応する閉塞フラグ22−1がバス閉塞回路22に設定されているため、PCIバス4−1が閉塞されていると判断(認識)する。
そこで、第1動作用トランザクションが、リプライが必要なトランザクションである場合、OBルーティング回路24は、第1動作用トランザクションに対して、PCIバス4−1が閉塞されていることを表す第1閉塞用トランザクションを生成し、セレクタ27を介してプロセッサ1に出力する(リプライする)。第1閉塞用トランザクションは、例えば、全ビットが1であり(ALL1と称する)、4バイトのデータである場合、FFFFFFFFhにより表される。プロセッサ1は、第1動作用トランザクションに対して、ALL1を表す第1閉塞用トランザクションが返ったため、PCIバス4−1に障害が発生したものと判断することができる。
第1動作用トランザクションが、リプライが不要なトランザクションである場合、OBルーティング回路24は、第1動作用トランザクションを破棄する。
一方、プロセッサ1は、PCIバス4−2に対する第2動作用トランザクションを発行した場合、PCIバス4−2が閉塞されていないため、上記(S2)の通常動作が実行される。即ち、第2動作用トランザクションは、OB方向に出力される。
【0045】
例えば、PCIブリッジ3のバス制御部31−1は、PCIバス4−1からのリクエストに対してリクエスト用トランザクションを生成する。このリクエスト用トランザクションは、バス制御部31−1のレンジレジスタ32−1に格納されている第1ファンクション番号が付加されたトランザクションIDを含んでいる。この場合、バス制御部31−1は、リクエスト用トランザクションをIO制御回路2に出力し、IO制御回路2のブリッジ制御回路26は、そのリクエスト用トランザクションをIBルーティング回路25に出力する。そのリクエスト用トランザクションに含まれるトランザクションIDの第1ファンクション番号は、レンジ保持回路21のレンジレジスタ21−1に格納されたファンクション番号と一致する。このとき、IBルーティング回路25は、そのレンジレジスタ21−1に対応する閉塞フラグ22−1がバス閉塞回路22に設定されているため、PCIバス4−1が閉塞されていると判断(認識)する。
そこで、リクエスト用トランザクションが、リプライが必要なトランザクションである場合、IBルーティング回路25は、リクエスト用トランザクションに対して、Unsupportedリクエストを表すトランザクションを生成し、セレクタ27を介してPCIブリッジ3に出力する。
リクエスト用トランザクションが、リプライが不要なトランザクションである場合、IBルーティング回路25は、リクエスト用トランザクションを破棄する。
一方、PCIブリッジ3のバス制御部31−2は、PCIバス4−2からのリクエストに対してリクエスト用トランザクションを生成する。この場合、PCIバス4−2が閉塞されていないため、上記(S2)の通常動作が実行される。即ち、リクエスト用トランザクションは、OB方向に出力される。
【0046】
次に、(S5)閉塞PCIバス復帰動作について説明する。
ドライバは、PCIバスをリセットすることにより、閉塞されているPCIバスを復帰させる。これについて具体的に説明する。
【0047】
ドライバは、PCIバス4−1のリセットレジスタに対する第1リセット用コンフィグライトトランザクションを発行する。第1リセット用コンフィグライトトランザクションは、第1アドレスと、トランザクションIDとを含み、OB(Outbound)方向に出力される。この場合、ドライバは、第1リセット用コンフィグライトトランザクションをIO制御回路2に出力し、IO制御回路2のOBルーティング回路24は、その第1リセット用コンフィグライトトランザクションを、セレクタ27を介してブリッジ制御回路26に出力する。ブリッジ制御回路26は、その第1リセット用コンフィグライトトランザクションをPCIブリッジ3に出力する。ここで、第1リセット用コンフィグライトトランザクションの第1アドレスに含まれる第1バス番号は、PCIブリッジ3のバス制御部31−1に割り当てられたバス番号と一致する。また、その第1アドレスに含まれる第1ファンクション番号は、バス制御部31−1のレンジレジスタ32−1に格納されたファンクション番号と一致する。また、その第1アドレスに含まれる第1レジスタ番号は、PCI4−1のリセットレジスタに割り当てられたレジスタ番号と一致する。この場合、PCIブリッジ3のバス制御部31−1は、ブリッジ制御回路26からの第1リセット用コンフィグライトトランザクションを実行する。バス制御部31−1は、閉塞されているPCIバス4−1のリセットレジスタをコンフィグライトで1に設定することにより、そのPCIバス4−1をリセットする。
そこで、PCIブリッジ3のバス制御部31−1は、第1リセット用コンフィグライトトランザクションに対するリプライである第1リセット用リプライトランザクションを生成する。この第1リセット用リプライトランザクションは、第1アドレスと、トランザクションIDとを含み、IB方向に出力される。この場合、バス制御部31−1は、第1リセット用リプライトランザクションをIO制御回路2に出力し、IO制御回路2のブリッジ制御回路26は、その第1リセット用リプライトランザクションをIBルーティング回路25に出力する。IBルーティング回路25は、その第1リセット用リプライトランザクションをバスリセット認識回路23に出力し、セレクタ28を介してドライバに出力する。
【0048】
バスリセット認識回路23は、OBルーティング回路24からブリッジ制御回路26へのトランザクションを監視する。バスリセット認識回路23は、第1リセット用コンフィグライトトランザクションに応じて、そのトランザクションIDを保持する。第1リセット用リプライトランザクションに含まれるトランザクションIDは、バスリセット認識回路23が保持するトランザクションIDと一致する。また、第1リセット用コンフィグライトトランザクション又は第1リセット用リプライトランザクションの第1アドレスに含まれる第1ファンクション番号は、レンジ保持回路21のレンジレジスタ21−1に格納されたファンクション番号と一致する。この場合、バスリセット認識回路23は、対象のPCIバス4−1がリセット完了したものと判断して、そのレンジレジスタ21−1に対応する閉塞フラグ22−1を解除するための第1リセット指示をバス閉塞回路22に出力する。バス閉塞回路22は、この第1リセット指示に応じて、閉塞フラグ22−1を解除する。
IO制御回路2は、この閉塞フラグ22−1を解除することにより、PCIバス4−1に対する閉塞を解除する。
バスリセット認識回路23が第1リセット用リプライトランザクションを待って閉塞フラグ22−1の設定を解除する理由は、リクエスト前に(閉塞されているPCIバス4−1を復帰させる前に)閉塞フラグ22−1の設定を解除した場合、閉塞されているPCIバス4−1からの不正なリクエストがプロセッサ1に送出されてしまうことを防ぐためである。
【0049】
PCIバス4−1が復旧した場合、プロセッサ1は、上記(S2)の通常動作を再度実行する。即ち、プロセッサ1は、再度、ジョブを実行させるために、PCIバス4−1(IOカード)に対する第1動作用トランザクションを発行する。
これにより、本発明では、PCIバス4−1に障害が発生しても、コンピュータシステムを停止させず、復旧、継続動作させることにより、エラーリカバリを行うことができる。
【0050】
図2は、本発明の第1実施形態によるコンピュータシステムの動作として、通常動作を示している。ここで、PCIバス4−1に接続されたIOカードであるIOカード8−1は、VID(ヴェンダーID)を保持しているものとする。
【0051】
(S11)の動作
まず、上記のドライバであるドライバ71は、DMA(Direct Memory Access)を行うために、IO制御回路2、バス制御部31−1、PCIバス4−1を介して、IOカード8−1にDMA用のアドレスを書き込む(ライトする)。この場合、IO制御回路2は、上記(S2)の通常動作を実行し、PCIバス4−1(IOカード8−1)に対するライトトランザクションとして第1動作用トランザクションをバス制御部31−1に出力する。このときの第1動作用トランザクションは、postedライトと呼ばれ、リプライが必要ではない。
【0052】
(S12)の動作
次に、ドライバ71は、上記(S11)の一連の動作が正しく終わったか否かを確認するため、IO制御回路2、バス制御部31−1、PCIバス4−1を介して、IOカード8−1が保持するVID(ヴェンダーID)を読み出す(リードする)。この場合、IO制御回路2は、上記(S2)の通常動作を実行し、PCIバス4−1(IOカード8−1)に対するリードトランザクションとして第1動作用トランザクションをバス制御部31−1に出力する。
上記(S11)の動作が正常に終了している場合、IOカード8−1は、自己が保持しているVIDを読み出し、そのVIDを期待値として、PCIバス4−1、バス制御部31−1、IO制御回路2を介して、ドライバ71に出力する。この場合、IO制御回路2は、上記(S2)の通常動作を実行し、VIDを含むトランザクションとして第1動作用トランザクションをドライバ71に出力する。
ここで、(S12)の作業は、本発明で行うドライバ71の動作であり、一般的に行われるものではない。また、このVIDのリードは、必要に応じて行うが、この例では、(S12)でのみ行っている。
【0053】
(S13)の動作
ドライバ71は、上記(S12)の動作が確認された場合、IO制御回路2、バス制御部31−1、PCIバス4−1を介して、IOカード8−1に起動をかける。この場合、IO制御回路2は、上記(S2)の通常動作を実行し、PCIバス4−1(IOカード8−1)に対するトランザクションとして、起動命令を表す第1動作用トランザクションをバス制御部31−1に出力する。このときの第1動作用トランザクションは、上記と同様にpostedライトで行われる。
【0054】
(S14)の動作
IOカード8−1は、起動命令を表すトランザクションに応じて、起動して、PCIバス4−1、バス制御部31−1、IO制御回路2を介して、上記のメモリであるメモリ7上のデータを読み出す。(S14)の動作では、S14−1〜S14−M(Mは1以上の整数)の動作を含み、IOカード8−1は、予め決められたM個のデータを1番目からM番目まで順番にメモリ7から読み出す。
【0055】
(S15)の動作
IOカード8−1は、M個のデータ転送が完了したところで、割り込みを発生し、PCIバス4−1、バス制御部31−1、IO制御回路2を介して、ドライバ71に完了を通知する。
【0056】
図3は、本発明の第1実施形態によるコンピュータシステムの動作として、PCIバス4−1に障害が発生したときの動作を示している。
【0057】
(S21)の動作
まず、ドライバ71は、DMAを行うために、IO制御回路2、バス制御部31−1、PCIバス4−1を介して、IOカード8−1にDMA用のアドレスを書き込む。この場合、IO制御回路2は、上記(S2)の通常動作を実行し、PCIバス4−1(IOカード8−1)に対するライトトランザクションとして第1動作用トランザクションをバス制御部31−1に出力する。このときの第1動作用トランザクションは、postedライトで行われる。しかし、PCIバス4−1で障害が発生しているため、ドライバ71は、IOカード8−1に対するDMA用のアドレスの書き込みを失敗した。
【0058】
(S22)の動作
次に、バス制御部31−1は、上記(S3)のPCIバス障害発生動作を実行する。即ち、バス制御部31−1は、エラーメッセージトランザクションを生成し、IO制御回路2に出力する。IO制御回路2は、エラーメッセージトランザクションに応じて、PCIバス4−1を閉塞する。
【0059】
(S23)の動作
次に、ドライバ71は、上記(S21)の一連の動作が正しく終わったか否かを確認するため、IO制御回路2、バス制御部31−1、PCIバス4−1を介して、IOカード8−1が保持するVID(ヴェンダーID)を読み出す。しかし、IO制御回路2は、PCIバス4−1を閉塞している。この場合、IO制御回路2は、上記(S4)のPCIバス閉塞動作を実行し、ALL1を表すリプライトランザクションとして第1閉塞用トランザクションを、ドライバ71に出力する。
【0060】
ドライバ71は、VIDを読む出すことに対して、ALL1が返ったため、IOカード8−1に障害が発生したと判断する。この場合、ドライバ71は、ジョブが失敗したことを認識し、再度ジョブを実行する。しかし、このときに、IOカード8−1は不正な状態になっている可能性があるため、ドライバ71は、IOカード8−1を初期化する。
【0061】
(S24)の動作
ドライバ71は、IOカード8−1を初期化する前に、IO制御回路2、バス制御部31−1を介して、PCIバス4−1に対してバスリセットを発行する。この場合、IO制御回路2は、上記(S5)の閉塞PCIバス復帰動作を実行し、PCIバス4−1に対するコンフィグライトトランザクションとして、バスリセットを表す第1リセット用コンフィグライトトランザクションをバス制御部31−1に出力する。バス制御部31−1は、この第1リセット用コンフィグライトトランザクションに応じて、PCIバス4−1のリセットレジスタに1を書き込み、リセット信号(RST#)をアサートしてPCIバス4−1をリセットする。バス制御部31−1は、第1リセット用コンフィグライトトランザクションに対するリプライである第1リセット用リプライトランザクションを、IO制御回路2を介してドライバ71に出力する。このとき、IO制御回路2は、この第1リセット用リプライトランザクションに応じて、PCIバス4−1に対する閉塞を解除する。
【0062】
(S25)の動作
次に、ドライバ71は、バスリセットを解除するために、IO制御回路2、バス制御部31−1を介して、PCIバス4−1に対してバスリセット解除を発行する。この場合、IO制御回路2は、上記(S5)の閉塞PCIバス復帰動作と同様の動作を実行し、PCIバス4−1に対するコンフィグライトトランザクションとして、バスリセット解除を表す第1リセット用コンフィグライトトランザクションをバス制御部31−1に出力する。バス制御部31−1は、この第1リセット用コンフィグライトトランザクションに応じて、PCIバス4−1のリセットレジスタに0を書き戻し、リセット信号(RST#)をディアサートしてPCIバス4−1のリセットを解除する。バス制御部31−1は、第1リセット用コンフィグライトトランザクションに対するリプライである第1リセット用リプライトランザクションを、IO制御回路2を介してドライバ71に出力する。
【0063】
(S26)の動作
ドライバ71は、上記(S24)、(S25)が終わったところで、IOカード8−1の初期化を開始する。この場合、IO制御回路2は、上記(S1)の初期化動作を実行する。
その後、ドライバ71は、再度ジョブを実行するために、上記(S11)を実行することにより、エラーリカバリを行う。
【0064】
本発明の効果について説明する。
【0065】
上述のように、本発明の第1実施形態によるコンピュータシステムでは、IO制御回路2の配下にデバイス(PCIブリッジ3)が接続され、そのPCIブリッジ3の配下に複数のPCIバス4−1、4−2が接続されている。
そこで、(S2)通常動作において、IO制御回路2は、送信元(プロセッサ1、ドライバ71)からの第1動作用トランザクションをPCIブリッジ3のバス制御部31−1を介してPCIバス4−1に出力する。
(S3)PCIバス4−1に障害が発生したPCIバス障害発生動作において、バス制御部31−1は、PCIバス4−1に障害が発生したときに、それを表すエラーメッセージであるエラーメッセージトランザクションを送信する。IO制御回路2は、エラーメッセージトランザクションに応じて、PCIバス4−1に対応する閉塞フラグ21−1をバス閉塞回路22に設定する。これにより、IO制御回路2は、PCIバス4−1を閉塞する。
(S4)閉塞フラグ21−1がバス閉塞回路22に設定されているPCIバス閉塞動作において、IO制御回路2は、送信元(プロセッサ1、ドライバ71)からの第1動作用トランザクションをPCIバス4−1に出力しない。そこで、第1動作用トランザクションが、リプライが不要なトランザクションである場合、IO制御回路2は、第1動作用トランザクションを破棄する。第1動作用トランザクションが、リプライが必要なトランザクションである場合、IO制御回路2は、PCIバス4−1が閉塞されていることを表す第1閉塞用トランザクションを生成して送信元に出力する。
このように、本発明の第1実施形態によるコンピュータシステムでは、IO制御回路2の配下にPCIブリッジ3が接続され、そのPCIブリッジ3の配下に複数のPCIバスが接続された場合でも、障害が発生したPCIバス4−1を閉塞することができる。
【0066】
(S5)PCIバス4−1が復帰したときの閉塞PCIバス復帰動作において、IO制御回路2は、送信元(プロセッサ1、ドライバ71)からの第1リセット用コンフィグライトトランザクションをバス制御部31−1を介してPCIバス4−1に出力して、PCIバス4−1をリセットする。バス制御部31−1は、第1リセット用コンフィグライトトランザクションに対するリプライである第1リセット用リプライトランザクションをIO制御回路2を介して送信元(プロセッサ1、ドライバ71)に出力する。IO制御回路2は、第1リセット用コンフィグライトトランザクションに応じて、バス閉塞回路22に設定されている閉塞フラグ21−1を解除する。
(S2)通常動作において、IO制御回路2は、送信元(プロセッサ1、ドライバ71)からの第1動作用トランザクションをバス制御部31−1を介してPCIバス4−1に出力する。
このように、本発明の第1実施形態によるコンピュータシステムでは、PCIバス4−1に障害が発生しても、そのシステムを停止させず、復旧、継続動作させることにより、エラーリカバリを確実に行なうことができる。
【0067】
(S1)初期化動作において、IO制御回路2は、送信元(プロセッサ1、ドライバ71)からの複数の初期化用コンフィグライトトランザクションを受け取る。IO制御回路2は、複数の初期化用コンフィグライトトランザクションに含まれる複数の識別子(ファンクション番号)をそれぞれ複数のレジスタ21−1、21−2に格納し、複数の初期化用コンフィグライトトランザクションをそれぞれ複数のバス制御部31−1、31−2に出力する。複数のバス制御部31−1、31−2は、複数の初期化用コンフィグライトトランザクションに含まれる複数の識別子をそれぞれ複数のレジスタ32−1、32−2に格納する。そこで、複数のバス制御部31−1、31−2は、複数の初期化用コンフィグライトトランザクションに対するリプライである複数の初期化用リプライトランザクションをIO制御回路2を介して送信元に出力する。
例えば、(S3)PCIバス障害発生動作において、IO制御回路2は、エラーメッセージトランザクションに含まれる第1識別子が、複数のレジスタ21−1、21−2のうちの第1レジスタ21−1に格納された識別子と一致するとき、第1レジスタ21−1に対応する閉塞フラグ21−1をバス閉塞回路22に設定する。
このように、本発明の第1実施形態によるコンピュータシステムでは、IO制御回路2とPCIブリッジ3に対して識別子(ファンクション番号)を用いて初期化用コンフィグライトトランザクションにより初期設定を行ない、初期設定における識別子をIO制御回路2とPCIブリッジ3が自動的に保持する。これにより、IO制御回路2は、トランザクションの送出先を特定することができ、障害が発生したPCIバスに対する閉塞動作{(S3)、(S4)}を実行することができる。このため、バス閉塞機能を持たないPCIブリッジ3がIO制御回路2の配下に接続された場合でもPCIのエラーリカバリを実現することができる。
【0068】
(S5)閉塞PCIバス復帰動作において、IO制御回路2は、第1リセット用コンフィグライトトランザクションに含まれるID(トランザクションID)をバスリセット認識回路23に格納し、第1リセット用コンフィグライトトランザクションをバス制御部31−1を介してPCIバス4−1に出力して、PCIバス4−1をリセットする。第1リセット用コンフィグライトトランザクション又は第1リセット用リプライトランザクションに含まれる第1識別子が、第1レジスタ21−1に格納された識別子と一致し、且つ、バスリセット認識回路23に格納されたIDが、第1リセット用リプライトランザクションに含まれるIDと一致するとき、IO制御回路2は、バス閉塞回路22に設定されている閉塞フラグ21−1を解除する。
このように、本発明の第1実施形態によるコンピュータシステムでは、閉塞解除動作{(S5)}をPCIブリッジ3配下のPCIバス4−1におけるリプライ(第1リセット用リプライトランザクション)を用いるため、バス閉塞機能を持たないPCIブリッジ3がIO制御回路2の配下に接続された場合でもリセットが確実にかかったことを保証できる。このため、ハードウェアが自動的に閉塞解除可能となり、ドライバに閉塞解除用のレジスタを意識させないことができる。従って、PCIで共通に決められたレジスタだけを使ってPCIエラーリカバリを実現することができる。
【0069】
なお、上記の第1実施形態では、IO制御回路2にPCIブリッジ3が1つだけ実装されているが、IO制御回路2は、複数のブリッジ制御回路26を具備し、その複数のブリッジ制御回路26に複数のPCIブリッジ3が接続されても良い。
また、PCIブリッジ3の配下に更にPCIブリッジ3が接続されるような多段構成のPCIブリッジ3に対して、それに対応するレンジ保持回路21、バス閉塞回路22、バスリセット認識回路23をIO制御回路2が具備することにより、上記の動作を実現できる。
【0070】
(第2実施形態)
本発明の第2実施形態によるコンピュータシステムでは、第1実施形態と異なる点のみ説明する。
図4に示されるように、PCIデバイスとしては、PCIブリッジ3に代えて、PCI Expressスイッチ5(又は、PCIスイッチ5と称する)が例示される。PCIスイッチ5は、IO制御回路2の配下に接続されている。
また、第2実施形態では、複数のPCIバス4−1、4−2をそれぞれ複数のPCI Expressバス6−1、6−2と称する(又は、PCIバス6−1、6−2と称する)。また、第2実施形態では、ブリッジ制御回路26をスイッチ制御回路26と称する。
【0071】
IO制御回路2のレンジ保持回路21は、更に、複数のバス番号レジスタ21’−1、21’−2を具備している。複数のバス番号レジスタ21’−1、21’−2は、それぞれ複数のPCIバス4−1、4−2に対応付けられている。複数のバス番号レジスタ21’−1、21’−2には、バス番号(後述)が格納される。
【0072】
PCIスイッチ5は、複数のP2Pブリッジ51−1、51−2と、P2Pブリッジ53と、バーチャルPCIバス54とを具備している。
P2Pブリッジ53は、スイッチ制御回路26に接続されている。
バーチャルPCIバス54は、P2Pブリッジ53と複数のP2Pブリッジ51−1、51−2と接続されている。
複数のP2Pブリッジ51−1、51−2は、前述のPCIブリッジ3の複数のバス制御部31−1、31−2に対応し、それぞれ複数のPCIバス4−1、4−2に対応付けられている。
複数のP2Pブリッジ51−1、51−2は、複数のレンジレジスタ52−1、52−2を具備している。複数のレンジレジスタ52−1、52−2は、前述のPCIブリッジ3の複数のレンジレジスタ32−1、32−2に対応し、それぞれ複数のPCIバス4−1、4−2に対応付けられている。複数のレンジレジスタ52−1、52−2には、それぞれ、複数のP2Pブリッジ51−1、51−2を識別するデバイス識別子であるファンクション番号が格納される。
複数のP2Pブリッジ51−1、51−2は、更に、複数のバス番号レジスタ52’−1、52’−2を具備している。複数のバス番号レジスタ52’−1、52’−2は、それぞれ複数のPCIバス4−1、4−2に対応付けられている。複数のバス番号レジスタ52’−1、52’−2には、バス番号(後述)が格納される。
【0073】
PCI Expressスイッチ5の上記の構成以外の構成は公知であるため、その説明を省略する。
【0074】
上記のコンピュータシステムの動作について説明する。コンピュータシステムの動作としては、(S1)初期化動作、(S2)通常動作、(S3)PCIバス障害発生動作、(S4)PCIバス閉塞動作、(S5)閉塞PCIバス復帰動作、が挙げられる。
【0075】
最初に、(S1)初期化動作について説明する。
PCIスイッチ5の初期化は、レンジレジスタ52−1、52−2、バス番号レジスタ52’−1、52’−2に対する第1、第2初期化用コンフィグライトトランザクションにより行われる(バス・ウォーク;BUS Walkと呼ばれる)。
【0076】
まず、プロセッサ1は、レンジレジスタ52−1、バス番号レジスタ52’−1に対する第1初期化用コンフィグライトトランザクションを発行する。第1初期化用コンフィグライトトランザクションは、OB(Outbound)方向に出力される。この場合、プロセッサ1は、第1初期化用コンフィグライトトランザクションをIO制御回路2に出力し、IO制御回路2のOBルーティング回路24は、その第1初期化用コンフィグライトトランザクションを、セレクタ27を介してスイッチ制御回路26に出力する。スイッチ制御回路26は、その第1初期化用コンフィグライトトランザクションをPCIスイッチ5に出力する。PCIスイッチ5のP2Pブリッジ51−1は、スイッチ制御回路26からP2Pブリッジ53、バーチャルPCIバス54を経由した第1初期化用コンフィグライトトランザクションを実行する。P2Pブリッジ51−1は、第1初期化用コンフィグライトトランザクションの第1アドレスに含まれる第1ファンクション番号をレンジレジスタ52−1に格納する。また、P2Pブリッジ51−1は、その第1アドレスに含まれる第1バス番号に1を足したバス番号を、バーチャルPCIバス54を考慮したバス番号として、バス番号レジスタ52’−1に格納する。
PCIスイッチ5のP2Pブリッジ51−1は、第1初期化用コンフィグライトトランザクションに対するリプライである第1初期化用リプライトランザクションを、IO制御回路2を介してプロセッサ1に出力する。
IO制御回路2のレンジ保持回路21は、第1初期化用コンフィグライトトランザクションに応じて、その第1アドレスに含まれる第1ファンクション番号をレンジレジスタ21−1に格納する。また、レンジ保持回路21は、その第1アドレスに含まれる第1バス番号に1を足したバス番号を、バーチャルPCIバス54を考慮したバス番号として、バス番号レジスタ21’−1に格納する。
【0077】
次に、プロセッサ1は、レンジレジスタ32−2に対する第2初期化用コンフィグライトトランザクションを発行する。
その結果、(S1)初期化動作が終了した時点で、レンジレジスタ21−1、52−1には、同じ値(第1ファンクション番号)が格納され、レンジレジスタ21−2、52−2には、同じ値(第2ファンクション番号)が格納されている。また、バス番号レジスタ21’−1、52’−1には、同じ値(第1バス番号)が格納され、バス番号レジスタ21’−2、52’−2には、同じ値(第2バス番号)が格納されている。バス番号は、IOカードの増減などで毎回変わり固定てきでないため、バスWALKの時の値を保持する必要がある。
【0078】
次に、(S2)通常動作について説明する。
ここで、(S2)の通常動作については、PCIブリッジ3をPCIスイッチ5に置き換え、バス制御部31−1、31−2をP2Pブリッジ51−1、51−2に置き換え、PCIバス4−1、4−2をPCIバス6−1、6−2に置き換えればよいので、その詳細な説明を省略する。
【0079】
次に、(S3)PCIバス障害発生動作について説明する。
PCIバス6−1、6−2で障害が発生した場合、P2Pブリッジ51−1、51−2はエラーメッセージを生成する。これについて具体的に説明する。
【0080】
例えば、PCIバス6−1で障害が発生した場合、P2Pブリッジ51−1はエラーメッセージトランザクションを生成する。このエラーメッセージトランザクションは、トランザクションIDを含んでいる。トランザクションIDには、P2Pブリッジ51−1のレンジレジスタ52−1に格納されている第1ファンクション番号と、P2Pブリッジ51−1のバス番号レジスタ52’−1に格納されている第1バス番号とが付加される。エラーメッセージトランザクションは、IB方向に出力される。この場合、P2Pブリッジ51−1は、エラーメッセージトランザクションをIO制御回路2に出力し、IO制御回路2のスイッチ制御回路26は、そのエラーメッセージトランザクションをIBルーティング回路25に出力する。IBルーティング回路25は、そのエラーメッセージトランザクションをバス閉塞回路22に出力する。バス閉塞回路22は、そのエラーメッセージトランザクションのトランザクションIDから第1ファンクション番号、第1バス番号を抽出して、レンジ保持回路21のレンジレジスタ21−1、21−2に格納されたファンクション番号、バス番号レジスタ21’−1、21’−2に格納されたバス番号と比較することにより、障害が発生したPCIバスを特定し、それに対応する閉塞フラグを設定する。この場合、抽出された第1ファンクション番号は、レンジレジスタ21−1に格納されたファンクション番号と一致し、抽出された第1バス番号は、バス番号レジスタ21’−1に格納されたバス番号と一致する。このため、バス閉塞回路22は、閉塞フラグ22−1を設定する。
IO制御回路2は、この閉塞フラグ22−1を設定することにより、PCIバス4−1を閉塞する。
【0081】
次に、(S4)PCIバス閉塞動作について説明する。
ここで、(S4)のPCIバス閉塞動作については、PCIブリッジ3をPCIスイッチ5に置き換え、バス制御部31−1、31−2をP2Pブリッジ51−1、51−2に置き換え、PCIバス4−1、4−2をPCIバス6−1、6−2に置き換えればよいので、その詳細な説明を省略する。
【0082】
次に、(S5)閉塞PCIバス復帰動作について説明する。
ドライバは、PCIバスをリセットすることにより、閉塞されているPCIバスを復帰させる。これについて具体的に説明する。
【0083】
ドライバは、PCIバス6−1のリセットレジスタに対する第1リセット用コンフィグライトトランザクションを発行する。第1リセット用コンフィグライトトランザクションは、第1アドレスと、トランザクションIDとを含み、OB(Outbound)方向に出力される。この場合、ドライバは、第1リセット用コンフィグライトトランザクションをIO制御回路2に出力し、IO制御回路2のOBルーティング回路24は、その第1リセット用コンフィグライトトランザクションを、セレクタ27を介してスイッチ制御回路26に出力する。スイッチ制御回路26は、その第1リセット用コンフィグライトトランザクションをPCIスイッチ5に出力する。ここで、第1リセット用コンフィグライトトランザクションの第1アドレスに含まれる第1ファンクション番号は、P2Pブリッジ51−1のレンジレジスタ32−1に格納されたファンクション番号と一致する。また、その第1アドレスに含まれる第1レジスタ番号は、PCI4−1のリセットレジスタに割り当てられたレジスタ番号と一致する。この場合、PCIスイッチ5のP2Pブリッジ51−1は、スイッチ制御回路26からの第1リセット用コンフィグライトトランザクションを実行する。P2Pブリッジ51−1は、閉塞されているPCIバス6−1のリセットレジスタをコンフィグライトで1に設定することにより、そのPCIバス6−1をリセットする。
そこで、PCIスイッチ5のP2Pブリッジ51−1は、第1リセット用コンフィグライトトランザクションに対するリプライである第1リセット用リプライトランザクションを生成する。この第1リセット用リプライトランザクションは、第1アドレスと、トランザクションIDとを含み、IB方向に出力される。この場合、P2Pブリッジ51−1は、第1リセット用リプライトランザクションをIO制御回路2に出力し、IO制御回路2のスイッチ制御回路26は、その第1リセット用リプライトランザクションをIBルーティング回路25に出力する。IBルーティング回路25は、その第1リセット用リプライトランザクションをバスリセット認識回路23に出力し、セレクタ28を介してドライバに出力する。
【0084】
バスリセット認識回路23は、第1リセット用コンフィグライトトランザクションに応じて、そのトランザクションIDを保持する。第1リセット用リプライトランザクションに含まれるトランザクションIDは、バスリセット認識回路23が保持するトランザクションIDと一致する。また、その第1リセット用リプライトランザクションの第1アドレスに含まれる第1ファンクション番号は、レンジ保持回路21のレンジレジスタ21−1に格納されたファンクション番号と一致する。その第1アドレスに含まれる第1バス番号に1を加えてバーチャルPCIバス54を考慮したときのバス番号は、レンジ保持回路21のバス番号レジスタ21’−1に格納されたバス番号と一致する。この場合、バスリセット認識回路23は、対象のPCIバス6−1がリセット完了したものと判断して、そのレンジレジスタ21−1に対応する閉塞フラグ22−1を解除するための第1リセット指示をバス閉塞回路22に出力する。バス閉塞回路22は、この第1リセット指示に応じて、閉塞フラグ22−1を解除する。
IO制御回路2は、この閉塞フラグ22−1を解除することにより、PCIバス6−1に対する閉塞を解除する。
バスリセット認識回路23が第1リセット用リプライトランザクションを待って閉塞フラグ22−1の設定を解除する理由は、リクエスト前に(閉塞されているPCIバス6−1を復帰させる前に)閉塞フラグ22−1の設定を解除した場合、閉塞されているPCIバス6−1からの不正なリクエストがプロセッサ1に送出されてしまうことを防ぐためである。
【0085】
本発明の第2実施形態によるコンピュータシステムの動作については、PCIブリッジ3をPCIスイッチ5に置き換え、バス制御部31−1、31−2をP2Pブリッジ51−1、51−2に置き換え、PCIバス4−1、4−2をPCIバス6−1、6−2に置き換えることにより実現できるので、その詳細な説明を省略する。
【0086】
上述のように、本発明の第2実施形態によるコンピュータシステムでは、IO制御回路2の配下にPCIスイッチ5が接続され、そのPCIスイッチ5の配下に複数のPCIバスが接続された場合でも、第1実施形態と同じ理由により、障害が発生したPCIバス6−1を閉塞することができる。
【0087】
また、本発明の第2実施形態によるコンピュータシステムでは、PCIバス6−1に障害が発生しても、第1実施形態と同じ理由により、そのシステムを停止させず、復旧、継続動作させることにより、エラーリカバリを確実に行なうことができる。
【0088】
また、本発明の第2実施形態によるコンピュータシステムでは、IO制御回路2とPCIスイッチ5に対して識別子(ファンクション番号、バス番号)を用いて初期化用コンフィグライトトランザクションにより初期設定を行ない、初期設定における識別子をIO制御回路2とPCIスイッチ5が自動的に保持する。これにより、IO制御回路2は、トランザクションの送出先を特定することができ、障害が発生したPCIバスに対する閉塞動作{(S3)、(S4)}を実行することができる。このため、バス閉塞機能を持たないPCIスイッチ5がIO制御回路2の配下に接続された場合でもPCIのエラーリカバリを実現することができる。
【0089】
また、本発明の第2実施形態によるコンピュータシステムでは、閉塞解除動作{(S5)}をPCIスイッチ5配下のPCIバス4−1におけるリプライ(第1リセット用リプライトランザクション)を用いるため、バス閉塞機能を持たないPCIスイッチ5がIO制御回路2の配下に接続された場合でもリセットが確実にかかったことを保証できる。このため、ハードウェアが自動的に閉塞解除可能となり、ドライバに閉塞解除用のレジスタを意識させないことができる。従って、PCIで共通に決められたレジスタだけを使ってPCIエラーリカバリを実現することができる。
【0090】
なお、上記の第2実施形態では、IO制御回路2にPCIスイッチ5が1つだけ実装されているが、IO制御回路2は、複数のスイッチ制御回路26を具備し、その複数のスイッチ制御回路26に複数のPCIスイッチ5が接続されても良い。
また、PCIスイッチ5の配下に更にPCIスイッチ5が接続されるような多段構成のPCIスイッチ5に対して、それに対応するレンジ保持回路21、バス閉塞回路22、バスリセット認識回路23をIO制御回路2が具備することにより、上記の動作を実現できる。
【0091】
また、本発明の第1、第2実施形態によるコンピュータシステムでは、IO制御回路2の配下にデバイス(PCIブリッジ3、PCIスイッチ5)が接続され、そのデバイス3、5の配下に接続される複数のバスとしてPCIが適用されているが、これに限定されない。
本発明の第1、第2実施形態によるコンピュータシステムでは、PCIに代えて、Star Fabricでも適用することができる。この場合、図1〜図4において、PCIをStar Fabricに置き換えればよい。
または、本発明の第1、第2実施形態によるコンピュータシステムでは、PCIに代えて、Advanced Switching Interconnect(ASI)でも適用することができる。この場合、図1〜図4において、PCIをASIに置き換えればよい。
【図面の簡単な説明】
【0092】
【図1】図1は、本発明の第1実施形態によるコンピュータシステムの構成を示している。
【図2】図2は、本発明の第1実施形態によるコンピュータシステムの動作として、通常動作を示している。
【図3】図3は、本発明の第1実施形態によるコンピュータシステムの動作として、PCIバス4−1に障害が発生したときの動作を示している。
【図4】図4は、本発明の第2実施形態によるコンピュータシステムの構成を示している。
【符号の説明】
【0093】
1 プロセッサ
2 IO制御回路
21 レンジ保持回路
21−1、21−2 レンジレジスタ
21’−1、21’−2 バス番号レジスタ
22 バス閉塞回路
22−1、22−2 閉塞フラグ
23 バスリセット認識回路
24 OB(Outbound)ルーティング回路
25 IB(Inbound)ルーティング回路
26 スイッチ制御回路
27、28 セレクタ
3 PCI(Peripheral Component Interconect)ブリッジ
31−1、31−2 バス制御部
32−1、32−2 レンジレジスタ
4−1、4−2 PCIバス
5 PCI Expressスイッチ
51−1、51−2 P2Pブリッジ
52−1、52−2 レンジレジスタ
52’−1、52’−2 バス番号レジスタ
53 P2Pブリッジ
54 バーチャルPCIバス
6−1、6−2 PCI Expressバス
7 メモリ
71 ドライバ
8−1 IOカード

【特許請求の範囲】
【請求項1】
複数のバスと、
前記複数のバスが接続され、前記複数のバスのうちの第1バスに障害が発生したときに、それを表すエラーメッセージを送信するデバイスと、
前記デバイスに接続され、前記エラーメッセージに応じて、前記第1バスを閉塞するIO制御回路と
を具備するコンピュータシステム。
【請求項2】
前記デバイスは、それぞれ前記複数のバスが接続された複数のバス制御部を具備し、
通常動作において、前記IO制御回路は、送信元からの第1動作用トランザクションを前記複数のバス制御部のうちの第1バス制御部を介して前記第1バスに出力し、
前記第1バスに障害が発生したバス障害発生動作において、前記IO制御回路は、前記エラーメッセージであるエラーメッセージトランザクションに応じて、前記第1バスを閉塞し、
前記第1バスが閉塞されているバス閉塞動作において、前記IO制御回路は、前記送信元からの前記第1動作用トランザクションを前記第1バスに出力しない
請求項1に記載のコンピュータシステム。
【請求項3】
前記バス閉塞動作において、
前記IO制御回路は、
前記第1動作用トランザクションが、リプライが不要なトランザクションである場合、前記第1動作用トランザクションを破棄し、
前記第1動作用トランザクションが、リプライが必要なトランザクションである場合、前記第1バスが閉塞されていることを表す第1閉塞用トランザクションを生成して前記送信元に出力する
請求項2に記載のコンピュータシステム。
【請求項4】
前記IO制御回路は、バス閉塞回路を具備し、
前記バス障害発生動作において、前記IO制御回路は、前記エラーメッセージトランザクションに応じて、前記第1バスに対応する閉塞情報を前記バス閉塞回路に設定し、
前記閉塞情報が前記バス閉塞回路に設定されている前記バス閉塞動作において、前記IO制御回路は、前記送信元からの前記第1動作用トランザクションを前記第1バスに出力しない
請求項2又は3に記載のコンピュータシステム。
【請求項5】
前記第1バスが復帰したときの閉塞バス復帰動作において、
前記IO制御回路は、前記送信元からの第1リセット用コンフィグライトトランザクションを前記第1バス制御部を介して前記第1バスに出力して、前記第1バスをリセットし、
前記第1バス制御部は、前記第1リセット用コンフィグライトトランザクションに対するリプライである第1リセット用リプライトランザクションを前記IO制御回路を介して前記送信元に出力し、
前記IO制御回路は、前記第1リセット用コンフィグライトトランザクションに応じて、前記バス閉塞回路に設定されている前記閉塞情報を消去し、
前記通常動作において、前記IO制御回路は、前記送信元からの前記第1動作用トランザクションを前記第1バス制御部を介して前記第1バスに出力する
請求項4に記載のコンピュータシステム。
【請求項6】
前記IO制御回路は、更に、それぞれ前記複数のバスに対応する複数のIO制御用レジスタを具備し、
前記複数のバス制御部は、それぞれ前記複数のバスに対応する複数のレジスタを具備し、
初期化動作において、
前記IO制御回路は、前記送信元からの複数の初期化用コンフィグライトトランザクションを受け取り、
前記複数の初期化用コンフィグライトトランザクションは、それぞれ複数の識別子を含み、
前記IO制御回路は、前記複数の初期化用コンフィグライトトランザクションに含まれる前記複数の識別子をそれぞれ前記複数のIO制御用レジスタに格納し、前記複数の初期化用コンフィグライトトランザクションをそれぞれ前記複数のバス制御部に出力し、
前記複数のバス制御部は、前記複数の初期化用コンフィグライトトランザクションに含まれる前記複数の識別子をそれぞれ前記複数のレジスタに格納する
請求項5に記載のコンピュータシステム。
【請求項7】
前記複数のバス制御部は、前記初期化動作を実行したとき、前記複数の初期化用コンフィグライトトランザクションに対するリプライである前記複数の初期化用リプライトランザクションを前記IO制御回路を介して前記送信元に出力する
請求項6に記載のコンピュータシステム。
【請求項8】
前記バス障害発生動作において、
前記エラーメッセージトランザクションは、前記複数のレジスタのうちの第1レジスタに格納された第1識別子を含み、
前記IO制御回路は、前記エラーメッセージトランザクションに含まれる前記第1識別子が、前記複数のIO制御用レジスタのうちの第1IO制御用レジスタに格納された識別子と一致するとき、前記第1IO制御用レジスタに対応する前記閉塞情報を前記バス閉塞回路に設定する
請求項6又は7に記載のコンピュータシステム。
【請求項9】
前記IO制御回路は、更に、バスリセット認識回路を具備し、
前記閉塞バス復帰動作において、
前記第1リセット用コンフィグライトトランザクションは、前記第1識別子とIDとを含み、
前記IO制御回路は、前記第1リセット用コンフィグライトトランザクションに含まれる前記IDを前記バスリセット認識回路に格納し、前記第1リセット用コンフィグライトトランザクションを前記第1バス制御部を介して前記第1バスに出力して、前記第1バスをリセットし、
前記第1リセット用リプライトランザクションは、前記第1リセット用コンフィグライトトランザクションに含まれる前記第1識別子と前記IDとを含み、
前記第1リセット用コンフィグライトトランザクション又は前記第1リセット用リプライトランザクションに含まれる前記第1識別子が、前記第1IO制御用レジスタに格納された識別子と一致し、且つ、前記バスリセット認識回路に格納された前記IDが、前記第1リセット用リプライトランザクションに含まれるIDと一致するとき、前記IO制御回路は、前記バス閉塞回路に設定されている前記閉塞情報を消去する
請求項8に記載のコンピュータシステム。
【請求項10】
デバイスを介して複数のバスに接続されたIO制御回路であって、
前記複数のバスのうちの第1バスに障害が発生したことを表すエラーメッセージを前記デバイスから受け取る制御回路と、
前記エラーメッセージに応じて、前記第1バスを閉塞するバス閉塞回路と
を具備するIO制御回路。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate