(57)【要約】【課題】ハードウェア・レベルでＩ／Ｏデバイスの二重化を実現すると共に、マスターデバイスの動的縮退を可能とすることである。【解決手段】マスターデバイスとスレーブデバイスとに二重化されたＩ／Ｏデバイスの動的縮退装置によって解決する。トランザクションルーティングコントローラ１４３は、トランザクションを受信し、ルーティングし、送出する。ルーティングテーブル１４２は、Ｉ／Ｏデバイスの二重化が有効であることを示す有効情報と、マスターデバイス識別情報と、スレーブデバイス識別情報とを有する。サービスプロセッサ２１は、前記トランザクションルーティングコントローラ１４３と、前記ルーティングテーブル１４２とを制御する。【選択図】図２
2008225534.tif 000002
【特許請求の範囲】
【請求項１】
マスターデバイスとスレーブデバイスとに二重化されたＩ／Ｏデバイスの動的縮退装置であって、
トランザクションを受信し、ルーティングし、送出するトランザクションルーティングコントローラと、
Ｉ／Ｏデバイスの二重化が有効であることを示す有効情報と、当該有効情報に関連付けられた二つの識別情報であって、前記マスターデバイスへの経路を示すマスターデバイス識別情報と、前記スレーブデバイスへの経路を示すスレーブデバイス識別情報とを有するルーティングテーブルと、
前記トランザクションルーティングコントローラと、前記ルーティングテーブルとを制御するサービスプロセッサと
を具備する動的縮退装置。
【請求項２】
前記ルーティングテーブルは、ルーティング・レコードから成り、
当該ルーティング・レコードは、
前記有効ビット情報を格納する第一のフィールドと、
前記マスターデバイス識別情報を格納する第二のフィールドと、
前記スレーブデバイス識別情報を格納する第三のフィールドと
を具備する請求項１記載の動的縮退装置。
【請求項３】
前記Ｉ／ＯデバイスがマルチファンクションＩ／Ｏデバイスの場合には、
前記ルーティング・テーブルは、
前記有効情報と、当該有効情報に関連付けられる前記マスターデバイス識別情報と、前記スレーブデバイス識別情報とを、ファンクション単位に具備する
請求項１又は２記載の動的縮退装置。
【請求項４】
前記サービスプロセッサは、
Ｉ／Ｏデバイスの二重化が有効である場合には、メモリマップドＩ／Ｏ空間に、前記マスターデバイスと前記スレーブデバイスとに共用される一つのみのアドレス領域を割り当てる
請求項１〜３いずれか１項に記載の動的縮退装置。
【請求項５】
前記トランザクションルーティングコントローラは、
トランザクションを受信したときに、前記メモリマップドＩ／Ｏ空間を参照することにより、当該トランザクションの宛先となるＩ／Ｏデバイスを割り出し、
前記ルーティングテーブルを参照することにより、当該Ｉ／Ｏデバイスに係る前記有効情報が、有効を示していた場合には、前記マスターデバイス識別情報と、前記スレーブデバイス識別情報とに基づいて、前記マスターデバイスと前記スレーブデバイスとの双方に、前記トランザクションを送出する
請求項４記載の動的縮退装置。
【請求項６】
前記トランザクションルーティングコントローラは、
前記スレーブデバイスから、リプライ・トランザクションを受信したときに、当該リプライ・トランザクションのルーティングを行うことなく、破棄する
請求項５記載の動的縮退装置。
【請求項７】
請求項１〜４いずれか１項に記載の動的縮退装置を使用して、二重化されたＩ／Ｏデバイスからマスターデバイスを動的に縮退する方法であって、
前記トランザクションルーティングコントローラが、トランザクションを受信するステップと、
前記トランザクションルーティングコントローラが、トランザクションをルーティングするステップと、
前記ルーティングテーブルを参照するステップと、
ルーティングの宛先がＩ／Ｏデバイスであって、当該Ｉ／Ｏデバイスに係る前記有効情報が有効を示していた場合には、前記トランザクションルーティングコントローラが、前記マスターデバイス識別情報と、前記スレーブデバイス識別情報とに基づいて、前記マスターデバイスと前記スレーブデバイスとの双方に、前記トランザクションを送出するステップと、
前記トランザクションルーティングコントローラが、前記スレーブデバイスから、リプライ・トランザクションを受信したときに、当該リプライ・トランザクションのルーティングを行うことなく、破棄するステップと、
二重化されたＩ／Ｏデバイスからマスターデバイスを縮退するときには、
前記サービスプロセッサが、前記送出するステップによる送出を抑止するステップと、
一定時間待ち合わせを行うステップと、
前記サービスプロセッサが、前記マスターデバイスを縮退するステップと、
前記サービスプロセッサが、当該ルーティングテーブルを更新するステップと、
前記サービスプロセッサが、前記抑止するステップによる抑止を解除するステップと
を有する動的縮退方法。
【請求項８】
請求項６記載の動的縮退装置を使用して、二重化されたＩ／Ｏデバイスからマスターデバイスを動的に縮退する方法であって、
前記サービスプロセッサが、前記トランザクションルーティングコントローラによるトランザクションの送出を抑止するステップと、
一定時間待ち合わせを行うステップと、
前記サービスプロセッサが、前記マスターデバイスを縮退するステップと、
前記サービスプロセッサが、前記ルーティングテーブルを更新するステップと、
前記サービスプロセッサが、前記抑止するステップによる抑止を解除するステップと
を有する動的縮退方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マスターデバイスとスレーブデバイスとに二重化されたＩ／Ｏデバイスの動的縮退装置、方法に関する。
【背景技術】
【０００２】
ＰＣＩデバイスに代表されるＩ／Ｏコントローラデバイスを二重化し、システムの耐故障性を向上させるものとして、従来からフォルトトレラントコンピュータなどが知られる。フォルトトレラントコンピュータなどでは、二重化されたＩ／Ｏデバイスへのアクセスをソフトウェアのデバイスドライバ層で吸収し、上位層のオペレーティングシステムやアプリケーションからは単一のＩ／Ｏデバイスとして見えるようにする手法が採用されている。この方式の問題点は、二重化を実現するために、専用のデバイスドライバが必要となることである。
【０００３】
この問題点を解決するために、Ｉ／Ｏデバイスの二重化をハードウェア層で実現するようにしたシステムも知られる。しかし、ハードウェア層の機能で二重化されたＩ／Ｏデバイスを、障害などを契機に縮退する場合には、システムを一旦ダウンさせ、一方を切り離した後に再立ち上げを行う方法が採られている。この縮退方法は、システムの耐故障性の観点から問題となっている。
【０００４】
特開２０００−１４８５２３号公報（特許文献１参照）には「二重化メモリ装置」の発明が記載されている。この二重化メモリ装置においては、共有メモリ部は、バスで接続した複数のプロセッサが扱うデータを運用系メモリ及び待機系メモリに二重化して格納する。障害検知部は、前記運用系メモリでの障害発生を検知する。メモリ切替部は、前記障害検知部が障害発生を検知した場合に、前記バスの使用権を調停することなく前記データの格納先を前記運用系メモリから前記待機系メモリに自発的に切り替える。
【０００５】
特開２００１−３３１４６７号公報（特許文献２参照）には「計算機システム」の発明が記載されている。この計算機システムは、独立して演算処理が可能な複数の計算機と、記憶装置と、ネットワークとを備える。記憶装置は、当該複数の計算機が共通に利用するデータを記憶する共有記憶領域を提供する。ネットワークは、これら複数の計算機および記憶装置を接続する。各計算機はシステムメモリ上に上記記憶装置に対応するエリアを確保するとともに、当該エリアへのアクセスに応じて上記共有記憶領域に対するアクセスを行う。サーバ装置を、上記記憶装置とネットワークとの間に設ける。サーバ装置は、上記共有記憶領域を管理して上記各計算機からのアクセスに応じた処理を行うとともに、各計算機の動作状態を監視し、その監視結果に応じて各計算機による当該共有記憶領域への書込みの許可／禁止を制御する。
【０００６】
特開平５−３１３８３１号公報（特許文献３参照）には「二重化ボリュームの制御方式」の発明が記載されている。この二重化ボリュームの制御方式においては、二重化されたボリュームに対してアクセスを行いボリュームの制御を行う。二重化論理ボリュームアドレス格納手段と二重化ボリュームの状態を示す運用状態格納手段とを備える。これらの手段内の情報に基づいて、前記二重化ボリュームに対する制御を実行する。すなわち、二重化し、常に両系の状態を同期して運用する形態のＩ／Ｏデバイスの片系に障害が発生した際に、障害系を切り離して継続運用する際のオーバーヘッドを軽減するものである。
【０００７】
特開平１１−２４２６０８号公報（特許文献４参照）には「二重化制御システム」の発明が記載されている。この二重化制御システムは、二以上の装置から重複したデータが周期的に送信される場合に、前記装置のうち一のマスタとなる装置からのデータを採用する二重化制御システムである。二以上のメモリ手段は、前記二以上の装置それぞれに対応して設けられ、その各々が対応する装置から送信されたデータを格納する。マスタ指定手段は、前記二以上のメモリ手段のうち一つを前記マスタからのデータを格納するものとして指定するとともに、当該メモリ手段に対応する装置からのデータ到着が遅れた場合には、他のメモリ手段をマスタからのデータを格納するものとして指定し直す。
【０００８】
【特許文献１】特開２０００−１４８５２３号公報
【特許文献２】特開２００１−３３１４６７号公報
【特許文献３】特開平５−３１３８３１号公報
【特許文献４】特開平１１−２４２６０８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明の課題は、トランザクションをルーティングする際に用いられるルーティングテーブルに、Ｉ／Ｏデバイスの二重化が有効であることを示す有効情報と、当該有効情報に関連付けられたスレーブデバイスへの経路を示すスレーブデバイス識別情報とを追加することにより、ハードウェア・レベルでＩ／Ｏデバイスの二重化を実現すると共に、マスターデバイスの動的縮退を可能とすることである。
【課題を解決するための手段】
【００１０】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００１１】
本発明は、マスターデバイス（３０）とスレーブデバイス（４０）とに二重化されたＩ／Ｏデバイスの動的縮退装置である。トランザクションルーティングコントローラ（１４３）は、トランザクションを受信し、ルーティングし、送出する。ルーティングテーブル（１４２）は、Ｉ／Ｏデバイスの二重化が有効であることを示す有効情報（５４）と、当該有効情報（５４）に関連付けられた二つの識別情報であって、前記マスターデバイス（３０）への経路を示すマスターデバイス識別情報（５３）と、前記スレーブデバイス（４０）への経路を示すスレーブデバイス識別情報（５５）とを有する。サービスプロセッサ（２１）は、前記トランザクションルーティングコントローラ（１４３）と、前記ルーティングテーブル（１４２）とを制御する。
【００１２】
本発明による動的縮退装置においては、前記ルーティングテーブル（１４２）は、ルーティング・レコードから成る。当該ルーティング・レコードは、前記有効ビット情報（５４）を格納する第一のフィールドと、前記マスターデバイス識別情報（５３）を格納する第二のフィールドと、前記スレーブデバイス識別情報（５５）を格納する第三のフィールドとを具備する。本発明による動的縮退装置においては、前記Ｉ／ＯデバイスがマルチファンクションＩ／Ｏデバイスの場合には、前記ルーティング・テーブル（１４２）は、前記有効情報（５４）と、当該有効情報（５４）に関連付けられる前記マスターデバイス識別情報（５３）と、前記スレーブデバイス識別情報（５５）とを、ファンクション単位に具備する。本発明による動的縮退装置においては、前記サービスプロセッサ（２１）は、Ｉ／Ｏデバイスの二重化が有効である場合には、メモリマップドＩ／Ｏ空間に、前記マスターデバイス（３０）と前記スレーブデバイス（４０）とに共用される一つのみのアドレス領域を割り当てる。
【００１３】
本発明による動的縮退装置においては、前記トランザクションルーティングコントローラ（１４３）は、トランザクションを受信したときに、前記メモリマップドＩ／Ｏ空間を参照することにより、当該トランザクションの宛先となるＩ／Ｏデバイスを割り出す。また、前記ルーティングテーブル（１４２）を参照することにより、当該Ｉ／Ｏデバイスに係る前記有効情報（５４）が、有効を示していた場合には、前記マスターデバイス識別情報（５３）と、前記スレーブデバイス識別情報（５５）とに基づいて、前記マスターデバイス（３０）と前記スレーブデバイス（４０）との双方に、前記トランザクションを送出する。本発明による動的縮退装置においては、前記トランザクションルーティングコントローラ（１４３）は、前記スレーブデバイス（４０）から、リプライ・トランザクションを受信したときに、当該リプライ・トランザクションのルーティングを行うことなく、破棄する。
【００１４】
本発明による動的縮退方法においては、上記の動的縮退装置を使用して、二重化されたＩ／Ｏデバイスからマスターデバイス（３０）を動的に縮退する方法である。受信するステップは、前記トランザクションルーティングコントローラ（１４３）が、トランザクションを受信する。ルーティングするステップは、前記トランザクションルーティングコントローラ（１４３）が、トランザクションをルーティングする。参照するステップは、前記ルーティングテーブル（１４２）を参照する。送出するステップは、ルーティングの宛先がＩ／Ｏデバイスであって、当該Ｉ／Ｏデバイスに係る前記有効情報（５４）が有効を示していた場合には、前記トランザクションルーティングコントローラ（１４３）が、前記マスターデバイス識別情報（５３）と、前記スレーブデバイス識別情報（５５）とに基づいて、前記マスターデバイス（３０）と前記スレーブデバイス（４０）との双方に、前記トランザクションを送出する。破棄するステップは、前記トランザクションルーティングコントローラ（１４３）が、前記スレーブデバイス（４０）から、リプライ・トランザクションを受信したときに、当該リプライ・トランザクションのルーティングを行うことなく、破棄する。二重化されたＩ／Ｏデバイスからマスターデバイス（３０）を縮退するときには、以下のステップを実行する。抑止するステップは、前記サービスプロセッサ（２１）が、前記送出するステップによる送出を抑止する。待ち合わせを行うステップは、一定時間待ち合わせを行う。縮退するステップは、前記サービスプロセッサ（２１）が、前記マスターデバイス（３０）を縮退する。更新するステップは、前記サービスプロセッサ（２１）が、当該ルーティングテーブル（１４２）を更新する。解除するステップは、前記サービスプロセッサ（２１）が、前記抑止するステップによる抑止を解除する。
【００１５】
本発明による動的縮退方法においては、上記の動的縮退装置を使用して、二重化されたＩ／Ｏデバイスからマスターデバイス（３０）を動的に縮退する方法である。抑止するステップは、前記サービスプロセッサ（２１）が、前記トランザクションルーティングコントローラ（１４３）によるトランザクションの送出を抑止する。待ち合わせを行うステップは、一定時間待ち合わせを行う。縮退するステップは、前記サービスプロセッサ（２１）が、前記マスターデバイス（３０）を縮退する。更新するステップは、前記サービスプロセッサ（２１）が、前記ルーティングテーブル（１４２）を更新する。解除するステップは、前記サービスプロセッサ（２１）が、前記抑止するステップによる抑止を解除する。
【発明の効果】
【００１６】
本発明によれば、トランザクションをルーティングする際に用いられるルーティングテーブルに、Ｉ／Ｏデバイスの二重化が有効であることを示す有効情報と、当該有効情報に関連付けられたスレーブデバイスへの経路を示すスレーブデバイス識別情報とを追加することにより、ハードウェア・レベルでＩ／Ｏデバイスの二重化を実現すると共に、マスターデバイスの動的縮退を可能とすることができる。
【発明を実施するための最良の形態】
【００１７】
Ｉ／Ｏデバイスの二重化をハードウェア層で実現する場合、例えば、メモリを搭載したＩ／Ｏデバイスを二重化する場合を考えると、プロセッサからＩ／Ｏデバイス上のメモリへの書き込みを複製して、双方のＩ／Ｏデバイスへ書き込み、Ｉ／Ｏデバイスからプロセッサへの読み出しはいずれか一方のＩ／Ｏデバイスからのみアクセスする機構をチップセットに実装する方法が考えられる。この方法はＩ／Ｏデバイスをファイバーチャネル（FibreChannel）やＳＣＳＩ（Small Computer System Interface）などのインタフェースに置き換え、各々の先に同一諸元のストレージデバイスを接続した構成に置き換えてもうまく機能するであろう。
【００１８】
しかしながら、この方式の問題点は、二系統あるチップセットからメモリやストレージデバイスまでの経路の何れかで障害が発生した場合に、システムの運用を継続したまま動的にその経路を縮退させることが困難な点にある。その理由は、一般に双方のメモリやストレージデバイスまでのアクセスレイテンシ（Access  Latency）は一致しないため、任意のタイミングで片方の経路を縮退させると、仕掛かり中のトランザクションが失われてシステムの継続運用ができなくなる可能性があるためである。
【００１９】
このようなＩ／Ｏデバイスの動的縮退時に関わる問題は、Ｉ／ＯデバイスがシステムのコアＩ／Ｏ、すなわちシステム構成上必須となるリアルタイムクロック（ＲＴＣ）や割り込みコントローラ、不揮発メモリ（ＮｖＲＡＭ）を集約したマルチファンクションＩ／Ｏカードではさらに深刻になる。例えば、マルチファンクションＩ／Ｏカードにおける不揮発メモリのみを二重化し、他のファンクションは二重化しないことを考えると、上記の方法では到底対応できない。
【００２０】
図１に、本実施の形態におけるコンピュータシステムのブロック構成を示す。図１は、コンピュータシステム内で二重化されたＩ／Ｏデバイス、特に一つのＩ／Ｏデバイスに複数の機能を兼ね備えたマルチファンクションＰＣＩデバイスをマスター・スレーブ方式で二重化した構成になっている。本実施の形態では、マルチファンクションＩ／Ｏデバイスをファンクション単位に二重化すること、及び、システム運用中に動的にマスターデバイスからスレーブデバイスへの切り替えを実現することが可能になる。
【００２１】
図１において、プロセッサ（Central  Processing  Unit）１１，１２は、同一のフロントサイドバス（Front  Side  Bus）１３に接続され、対称型マルチプロセッシング（Symmetric  Multi  Processing）構成を形成している。また、ＦＳＢ１３に接続されたメモリコントローラ１４は、ＣＰＵ１１，１２、メモリ１５、Ｉ／Ｏデバイス３０，４０間のトランザクションのルーティングを司る。さらに、メモリコントローラ１４には、メモリ１５、複数のＩ／Ｏコントローラ１６，１７が接続されている。Ｉ／Ｏコントローラ１６，１７は、メモリコントローラ１４と、複数のＰＣＩバス（Peripheral  Components  Interconnect  Bus）１８，１９とを接続するバスブリッジである。ＰＣＩバス１８にはＩ／Ｏデバイス３０が、また、ＰＣＩバス１９にはＩ／Ｏデバイス４０が、それぞれ接続されている。Ｉ／Ｏデバイス３０は、不揮発メモリ（Nonvolatile  RAM）３１と、リアルタイムクロック（Real  Time  Clock）３２と、外部Ｉ／Ｏインタフェース３３とを実装したマルチファンクションＩ／Ｏデバイスである。Ｉ／Ｏデバイス４０も、Ｉ／Ｏデバイス３０と同等の構成要素４１〜４３を有する。外部Ｉ／Ｏインタフェース３３，４３は、それぞれ外部入出力デバイスに接続される。
【００２２】
また、図１のコンピュータシステムには、システムの運用制御を司るサービスプロセッサ（Service  Processor）２１が搭載されている。このサービスプロセッサ２１は、メモリコントローラ１４をはじめ、システム内の各要素に対する初期化、モード設定、リセットなどの制御を行うことができる。なお、図中には、本実施の形態の説明に直接関係しない通信経路などは図示していない。
【００２３】
本実施の形態において、コンピュータシステムに接続されるプロセッサ、メモリの数は本願発明の要件に直接関与するものではなく、任意の構成において本願発明は実施可能であることは明らかである。同様に、Ｉ／Ｏコントローラの数、Ｉ／Ｏコントローラに接続されるＰＣＩバスの数も本願発明の権利範囲に関与するものではない。また、ＰＣＩバスの代わりにＰＣＩ−ＸバスやＰＣＩエクスプレス（Express）バスの他、任意のＩ／Ｏバスを用いることも可能である。さらに、Ｉ／Ｏデバイスの機能・構成も本実施の形態に記載する機能・構成に限定するものではない。
【００２４】
図２に、メモリコントローラ１４の機能ブロック図を示す。図２を参照すると、メモリコントローラ１４と、コンピュータシステム内の各要素１３，１５〜１７とを接続するインタフェースが、ＦＳＢインタフェース１４１、メモリインタフェース１４４、Ｉ／Ｏインタフェース１４５，１４６として図示されている。各インタフェース１４１，１４４〜１４６を結ぶ位置に存在するのがトランザクションルーティングコントローラ１４３である。トランザクションルーティングコントローラ１４３は、各インタフェース１４１，１４４〜１４６から入力されるメモリリード・メモリライト・リプライ・割り込み等のトランザクションをルーティングし、適切なインタフェース１４１，１４４〜１４６へ出力する。これらの各種トランザクションに含まれる情報は、本願発明の解説範囲を超えるため詳細には説明しないが、メモリアクセスのターゲットアドレス、リプライデータ、リプライや割り込みのソースデバイスＩＤ、ターゲットデバイスＩＤなどである。また、トランザクションルーティングコントローラ１４３は、ルーティング経路を決定するためにルーティングテーブル１４２を参照する。
【００２５】
図３に、ルーティングテーブル１４２に格納されるルーティング・レコードの形式を示す。ルーティングテーブル１４２は、図示するような一連の情報を含むルーティング・レコードから成るテーブルである。すなわち、物理主記憶空間の各々のアドレスレンジに対するトランザクションのルーティング情報を格納したレコードからなるテーブルである。図１のコンピュータシステムは、メモリ１５の他、Ｉ／Ｏデバイス３０，４０上のレジスタやメモリデバイスを物理記憶空間上にメモリマップドＩ／Ｏ（Memory-mapped I/O：図面においては、「ＭＭＩＯ」とも称す。）としてマッピングする構成を採っている。ルーティングテーブル１４２の一レコードに格納される情報は、これら物理記憶空間上にマッピングされた何れかのデバイスへのルーティング経路情報である。
【００２６】
図３のルーティング・レコードの個々のフィールドを見ると、アドレスオフセット５１と、アドレスレンジ５２と、マスターデバイスＩＤ５３とが含まれるほか、有効ビット（ＶａＩｉｄ）５４と、スレーブデバイスＩＤ５５とが追加されている。アドレスオフセット５１およびアドレスレンジ５２は、プロセッサ及びＩ／Ｏデバイスからのメモリアクセスに対し、当該トランザクションをルーティングすべきアドレスレンジを定義する。アドレスオフセット５１は、連続したメモリ領域ごとにその領域における先頭アドレスを示す。アドレスレンジ５２は、メモリ領域のサイズを示す。マスターデバイスＩＤ５３は、その物理記憶空間の当該アドレスにマッピングされたメモリ１５やＩ／Ｏデバイス３０，４０へのルーティング経路情報となる。有効ビット５４は、マッピングされたデバイスが二重化されており、二重化されたスレーブデバイスへのルーティングが有効である（ＶａＩｉｄ）ことを示す。スレーブデバイスＩＤ５５は、二重化されたスレーブＩ／Ｏデバイスへのルーティング経路情報となる。
【００２７】
本実施の形態では、Ｉ／Ｏデバイスをマスター・スレーブ方式で二重化する際に、マスターデバイス３０へのトランザクションを、トランザクションルーティングコントローラ１４３にて複製する。そして、当該トランザクションを、マスターデバイス３０と、スレーブデバイス４０との双方へ送出する。複製のためのルーティング情報を、メモリコントローラ１４に実装するルーティングテーブル１４２に持たせている。
【００２８】
図２において、トランザクションルーティングコントローラ１４３は、プロセッサ１１，１２側のＦＳＢインタフェース１４１およびＩ／Ｏデバイス３０，４０側のＩ／Ｏインタフェース１４５，１４６からのトランザクションを受け付ける。当該トランザクションがメモリアクセスのトランザクションであれば、ルーティングテーブル１４２を参照して、当該トランザクションのターゲットデバイスを決定する。そして、そのターゲットデバイスに向けたインタフェースへトランザクションを送出する。さて、ルーティングテーブル１４２を参照したとき、当該トランザクションの送出先デバイスが二重化されたＩ／Ｏデバイスであり、有効なスレーブデバイスが存在するか否か、すなわちスレーブデバイスへのルーティングが有効であるか否かが判明する。その結果、スレーブデバイスへのルーティングが有効である場合には、当該トランザクションをマスターデバイスとスレーブデバイスとに向けて、それぞれのＩ／Ｏインタフェース１４５，１４６へ送出する。
【００２９】
さらに、トランザクションルーティングコントローラ１４３が、ＦＳＢインタフェース１４１、Ｉ／Ｏインタフェース１４５、１４６もしくはメモリインタフェース１４４からメモリアクセスに対するリプライトランザクションを受け付けた場合にも、ルーティングテーブル１４２を参照する。そして、当該リプライトランザクションを送出したデバイスが有効なスレーブデバイスであることが判明した場合には、当該リプライトランザクションを破棄する。そうでない場合は、リプライトランザクションが指示するターゲットデバイスへルーティングする。
【００３０】
このように、本実施の形態では、二重化されたＩ／Ｏデバイスに対するメモリアクセスを、トランザクションルーティングコントローラ１４３にて複製し、それぞれのデバイスへ向けて送出する。よって、マスターデバイスに対する単一のメモリアクセスで、マスター・スレーブ両方のデバイスへのアクセスを実現することができる。
【００３１】
以上、メモリコントローラ１４の動作概要を説明した。メモリコントローラ１４の動作を更に詳述する。まず始めに、システム立ち上げ時の初期設定方法について説明する。図１に示すように、Ｉ／Ｏデバイス３０，４０を二重化する。このとき、Ｉ／Ｏデバイス３０をマスターデバイスとし、Ｉ／Ｏデバイス４０をスレーブデバイスとする設定が必要である。この設定は、システムの立ち上げ時にサービスプロセッサ２１からルーティングテーブル１４２に対し、表１に記載するような情報を書き込むことにより実現される。
【００３２】
【表１】
2008225534.tif 000003
【００３３】
表１の設定内容を詳細に説明する。表１の上方には、Ｉ／Ｏデバイス３０に対する設定項目が三レコード分定義されている。図１では、Ｉ／Ｏデバイス３０は、三種のファンクションを搭載したマルチファンクションＩ／Ｏカードであるので、個々のファンクションに対応するメモリマップドＩ／Ｏ空間のアドレスを一レコードずつ定義する。ここでは、個々のファンクション名をそれぞれＡ，Ｂ，Ｃと記載している。さらに三種のファンクションのうち、ファンクションＢのみに対して二重化の設定が行われている。よって、ファンクションＢに対応する二重化の有効ビットが真（Ｔ）、他のファンクションＡ、Ｃは偽（Ｆ）に定義される。また、ファンクションＢに対応するスレーブデバイスへのルーティング経路情報が、スレーブデバイスＩＤの欄に設定される。ファンクションＢに対応するスレーブデバイスは、Ｉ／Ｏデバイス４０のファンクションＢ’（Ｉ／Ｏデバイス４０側は、「’」を付加して、「Ｂ’」と記載する。）である。
【００３４】
表１の下方には、スレーブ側のＩ／Ｏデバイス４０に対する設定項目が二レコード分定義されている。図１では、Ｉ／Ｏデバイス４０は、スレーブデバイスとして定義されているが、Ｉ／Ｏデバイス４０のファンクションＡ’，Ｃ’については、二重化定義が設定されていない。そこで、Ｉ／Ｏデバイス４０のファンクションＡ’，Ｃ’は、Ｉ／Ｏデバイス３０のファンクションＡ，Ｃとは独立した別デバイスとして動作させる。表１の下方に、これらのファンクションＡ’，Ｃ’に対応するルーティング経路情報が設定されている。
【００３５】
このような設定の結果、物理記憶空間上にマッピングされた各デバイス、ファンクションのメモリマップドＩ／Ｏ空間は、図４に示すようなレイアウトになる。Ｉ／Ｏデバイス３０のファンクションＡ，Ｂ，ＣおよびＩ／Ｏデバイス４０のファンクションＡ’，Ｃ’が個々に物理記憶空間上にマッピングされている。加えて、Ｉ／Ｏデバイス４０のファンクションＢ’が、Ｉ／Ｏデバイス３０のファンクションＢと同じアドレスにマッピングされており、ソフトウェアからは単一のデバイスとして見えることがわかる。
【００３６】
次に、システム運用中の動作について説明する。トランザクションルーティングコントローラ１４３がプロセッサ１１，１２からのメモリリードやメモリライトなどメモリアクセス・トランザクションをＦＳＢインタフェース１４１を経由して受け取ったとする。この場合、トランザクションルーティングコントローラ１４３はルーティングテーブル１４２を参照して、当該トランザクションで指定されるアドレスレンジに該当するルーティング・レコードを検索する。該当するルーティング・レコードが見つかると、そこからマスターデバイスＩＤを取り出す。そして、トランザクションのターゲットとなるデバイスへのルーティング経路情報に従い、メモリインタフェース１４４、Ｉ／Ｏインタフェース１４５、１４６のいずれかへトランザクションを送出する。さらに、ルーティングテーブル１４２の有効ビット５４を参照してターゲットとなるデバイスが二重化されたＩ／Ｏデバイスであるか否かを確認する。二重化されたＩ／Ｏデバイスであることが判明したとすると、当該トランザクションをスレーブデバイスＩＤで指定されるデバイスへのルーティング経路情報に従い、Ｉ／Ｏインタフェース１４５、１４６のいずれかへトランザクションを送出する。すなわち、有効ビット５４が有効の場合には、トランザクションを、マスターデバイスとスレーブデバイスとの双方へ送出する。
【００３７】
一方、トランザクションルーティングコントローラ１４３がメモリリードなどのトランザクションに対するリプライや、割り込みをいずれかのインタフェース１４１，１４４〜１４６から受信した場合は、トランザクションルーティングコントローラ１４３はルーティングテーブル１４２を参照する。そして、当該トランザクションの送出元のデバイスＩＤと一致するスレーブデバイスＩＤが登録されたレコードを検索する。一致するレコードが存在し、かつ有効ビット５４が真（Ｔ）であれば、当該トランザクションは二重化されたスレーブデバイスからのトランザクションなので、ルーティングは行わずに廃棄する。その他の場合、トランザクションルーティングコントローラ１４３はトランザクションのターゲットデバイスＩＤに従い、ルーティング経路を決定し、適切なインタフェース１４１，１４４〜１４６へトランザクションを送出する。
【００３８】
次に、システム運用中に二重化されたＩ／Ｏデバイスのマスターデバイスを動的に縮退する手順を説明する。二重化されたＩ／Ｏデバイスにおけるマスターデバイス３０を縮退する際には、サービスプロセッサ２１の制御により、メモリコントローラ１４中のＩ／Ｏインタフェース１４５，１４６からＩ／Ｏデバイス３０，４０へのトランザクション送出を一時的に抑止する。そして、先行する仕掛中のトランザクションが流れ終わるのを待ち合わせてからルーティングテーブル１４２を更新する。二重化されたＩ／Ｏデバイス３０，４０のスレーブデバイス４０をマスターデバイスとして再定義し、Ｉ／Ｏインタフェース１４５，１４６の動作を再開することで、Ｉ／Ｏデバイスのマスター・スレーブ切替えを実現する。以下説明する手順は、サービスプロセッサ２１が、トランザクションルーティングコントローラ１４３をはじめとしたシステム内の各要素の動作を制御することで実現するものである。制御の手順は、サービスプロセッサ２１に実装されるプログラムによって実行される。
【００３９】
まず最初に、サービスプロセッサ２１は、メモリコントローラ１４のＩ／Ｏインタフェース１４５，１４６からＩ／Ｏコントローラ１６，１７へのトランザクション送出を抑止する。その結果、抑止されたトランザクションは、トランザクションルーティングコントローラ１４３中に存在するバッファ等に一時的に滞留する。実装に依存して、Ｉ／Ｏインタフェース１４５，１４６から送出を抑止するトランザクションは、二重化されたＩ／Ｏデバイスに向けたもののみに限定しても良い。この場合には、ルーティングテーブル１４２を参照し、トランザクションのターゲットが二重化されたＩ／Ｏデバイスか否かを調べて、トランザクションの送出・抑止を決定することになる。サービスプロセッサ２１は、Ｉ／Ｏコントローラ１６，１７へのトランザクション送出を抑止したとき、Ｉ／Ｏコントローラ１６，１７からＩ／Ｏインタフェース１４５，１４６へのトランザクションは抑止しない。メモリコントローラ１４は、Ｉ／Ｏデバイスから来るトランザクションの処理は継続する。
【００４０】
サービスプロセッサ２１は、この状態で一定時間待ち合わせを行う。これにより、プロセッサ１１，１２、メモリ１５などから受信し、かつ、Ｉ／Ｏインタフェース１４５，１４６を経由して送出済みとなっている仕掛かり中のトランザクションに対する、リプライ処理等が完了する。待ち合わせ時間はコンピュータシステムの実装に依存して適切な値を設定する。
【００４１】
待ち合わせ時間が経過し、Ｉ／Ｏデバイスに対する先行するトランザクションの処理が完了した後に、サービスプロセッサ２１はマスターデバイスを縮退させる。Ｉ／Ｏデバイスの縮退方法は本願発明の解説範囲を超えるため、ここでは詳細に説明はしないが、ＰＣＩデバイスであれば、［ａ］デバイスの機能に依存して、当該デバイスのコンフィグレーション（Configuration）レジスタを操作してデバイスの動作を止める方法、［ｂ］デバイスが接続されるバスブリッジが存在すればバスブリッジを操作してＰＣＩバスをリセットする方法、［ｃ］Ｉ／Ｏインタフェースの機能に依存して当該デバイスからのトランザクションを受け取らないようにマスクする方法などが考えられる。当該デバイスがメモリデバイスのような受動的なデバイスであれば、何もせずにそのまま放置する方法でも構わない。
【００４２】
マスターデバイスの動的縮退が終了したら、サービスプロセッサ２１は、ルーティングテーブル１４２を更新する。具体的には、二重化されたデバイスが定義されているレコードに記載されるルーティング経路情報のうち、スレーブデバイスＩＤの情報をマスターデバイスＩＤに上書きし、有効ビット５４を偽（Ｆ）に書き換えればよい。
【００４３】
最後に、サービスプロセッサ２１は、Ｉ／Ｏインタフェース１４５，１４６からＩ／Ｏコントローラ１６，１７へのトランザクション送出を再開する。これによりトランザクションルーティングコントローラ１４３内に滞留していたトランザクションは、更新されたルーティングテーブル１４２に従い、新しいマスターデバイスへルーティングされ、Ｉ／Ｏインタフェース１４５，１４６から送出されることになる。このようにして、マスター・スレーブ方式で二重化されたＩ／Ｏデバイスのマスターデバイスとスレーブデバイスとをシステム運用中に入れ替えることができる。
【００４４】
以上説明したように、本実施の形態においては、以下に記載するような効果を奏する。第一の効果は、ルーティングテーブル１４２に格納されるルーティング・レコードに有効ビット５４とスレーブデバイスＩＤ５５とを追加しているので、トランザクションルーティングコントローラ１４３が当該ルーティング・レコードを検索・参照することにより、トランザクション送出先のＩ／Ｏデバイスが二重化されていると判断できた場合に、二重化されたマスターデバイスとスレーブデバイスとの双方に対してトランザクションを送出することができ、Ｉ／Ｏデバイスのマスター・スレーブ方式による二重化を実現できることである。
【００４５】
第二の効果は、ルーティングテーブル１４２に格納されるアドレス情報で定義されるメモリマップドＩ／Ｏ空間のマッピングが、Ｉ／Ｏデバイスのファンクション単位で定義できるため、二重化する対象のＩ／Ｏデバイスが複数の機能を持つマルチファンクションＩ／Ｏデバイスの場合に、ファンクション単位で各ファンクションを二重化するか、各ファンクションを個別のデバイスとして動作させるかを選択的に設定できることである。
【００４６】
第三の効果は、サービスプロセッサ２１からメモリコントローラ１４の各機能ブロック１４１〜１４６を制御することにより、一定時間だけＩ／Ｏデバイスへのトランザクションを停止し、マスターデバイスを縮退し、ルーティングテーブル１４２を更新し、トランザクションの処理を再開することで、二重化されたＩ／Ｏデバイスのマスターデバイスを動的に縮退し、スレーブデバイスへ動作を引き継ぐことができることである。
【図面の簡単な説明】
【００４７】
【図１】図１は、本実施の形態におけるコンピュータシステムのブロック構成を示す図である。
【図２】図２は、メモリコントローラ１４の機能ブロック図である。
【図３】図３は、ルーティングテーブル１４２に格納されるルーティング・レコードの形式を示す図である。
【図４】図４は、メモリマップドＩ／Ｏ空間のレイアウトを示す図である。
【符号の説明】
【００４８】
１１，１２  プロセッサ
１３  フロントサイドバス
１４  メモリコントローラ
１５  メモリ
１６，１７  Ｉ／Ｏコントローラ
１８，１９  ＰＣＩバス
２１  サービスプロセッサ
３０，４０  Ｉ／Ｏデバイス
３１，４１  不揮発メモリ
３２，４２  リアルタイムクロック
３３，４３  外部Ｉ／Ｏインタフェース
５１  アドレスオフセット
５２  アドレスレンジ
５３，５５  デバイスＩＤ
５４  有効ビット
１４１  ＦＳＢインタフェース
１４２  ルーティングテーブル
１４３  トランザクションルーティングコントローラ
１４４  メモリインタフェース
１４５，１４６  Ｉ／Ｏインタフェース
【図１】
2008225534.tif 000004
【図２】
2008225534.tif 000005
【図３】
2008225534.tif 000006
【図４】
2008225534.tif 000007