(57)【要約】  本発明は、Ｉ／Ｏファブリックの柔軟性を損なうことなく、コンピュータを構成するリソース同士を接続することを可能とする。ファブリック内のスイッチは、受信したパケットのヘッダを解析する解析部と、前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する決定部と、前記決定部で決定された前記操作に従って、前記パケットに含まれるリクエストへの応答、前記パケットの書き換え、前記パケットの転送のうちの少なくとも１つを実行する手段を備えた実行部を備える。
2015194534.tif 000002
【特許請求の範囲】
【請求項１】
ファブリック内のスイッチ装置であって、
受信したパケットのヘッダを抽出し前記ヘッダの情報を取得する解析部と、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する決定部と、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
のうちの少なくとも１つを実行する手段を備えた実行部と、
を備えた、ことを特徴とするスイッチ装置。
【請求項２】
前記決定部に対して、パケットの識別子と、パケットに対して実行する操作を示す識別子とを登録する手段と、
前記実行部の前記パケットに含まれるリクエストへの応答を実行する手段に対して、仮想的なＩ／Ｏデバイスの構成を設定する手段と、
前記実行部の前記パケットの書き換えを行う手段に対して、パケットの識別子と、パケットの書き換えを行う領域と、書き換え後の値のうちの少なくとも１つを設定する手段と、
前記実行部の前記パケットの転送を実行する手段に対して、パケットの識別子と、パケットの転送先の識別子とを設定する手段と、
のうちの少なくとも１つを含む制御部を備えた、ことを特徴とする請求項１に記載のスイッチ装置。
【請求項３】
前記実行部が、仮想的なＩ／Ｏデバイスに対するリクエストに応答して、仮想的なＩ／Ｏデバイスを提供する仮想Ｉ／Ｏデバイス提供手段を備え、
前記仮想Ｉ／Ｏデバイス提供手段は、Ｉ／Ｏファブリックの仕様に基づいたＩ／Ｏデバイス設定情報を保持する第１の記憶手段と、
前記仮想的なＩ／Ｏデバイスに固有のデータを保持する第２の記憶手段と、
を備える、ことを特徴とする請求項１又は２に記載のスイッチ装置。
【請求項４】
前記実行部は、前記仮想Ｉ／Ｏデバイス提供手段を用いて、異なるＩ／Ｏファブリック間の通信を行う、ことを特徴とする請求項３に記載のスイッチ装置。
【請求項５】
前記実行部が、前記Ｉ／Ｏファブリックに接続された所定のＩ／Ｏデバイスの初期化シーケンスのときに転送されるパケットをキャプチャする手段と、
前記仮想Ｉ／Ｏデバイス提供手段が用いる前記Ｉ／Ｏデバイス固有のデータを生成する手段と、
を備えた、ことを特徴とする請求項３又は４に記載のスイッチ装置。
【請求項６】
前記パケットの書き換え、前記ヘッダの情報に基づくパケットの転送を行うスイッチチップを備え、
前記スイッチチップを制御するコントローラと、
を備えた、ことを特徴とする請求項１乃至５のいずれか１項に記載のスイッチ装置。
【請求項７】
前記実行部は、Ｉ／Ｏファブリック中の少なくとも１つのノードに対して仮想的なＩ／Ｏデバイスを提供するＩ／Ｏデバイスエミュレーション部と、
前記Ｉ／Ｏファブリックの異なるデバイスツリーに対して、仮想的なＩ／Ｏデバイスを提供し、データや制御情報のやりとりを実現する第１のブリッジエミュレーション部と、
前記Ｉ／ＯファブリックのルートコンプレックスとＩ／Ｏデバイス間、及び前記Ｉ／Ｏデバイス間のパケットの転送を実現する第２のブリッジエミュレーション部と、
前記パケットの書き換えを行うパケット書換部と、
前記決定部で決定された前記操作に従って、前記Ｉ／Ｏデバイスエミュレーション部、前記第１のブリッジエミュレーション部、前記第２のブリッジエミュレーション部、前記パケット書換部のいずれかを選択する選択部と、
前記パケットを出力する出力インタフェースと、
を備えている、ことを特徴とする請求項１乃至６のいずれか１項に記載のスイッチ装置。
【請求項８】
Ｉ／Ｏファブリックを備え、前記Ｉ／Ｏファブリック内に、請求項１乃至７のいずれか１項に記載のスイッチ装置を備えたコンピュータシステム。
【請求項９】
ファブリック内のスイッチが、
前記ファブリック内を転送されるパケットを受信すると、前記パケットのヘッダを抽出して前記ヘッダの情報を取得し、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定し、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
のうちの少なくとも１つを実行する、コンピュータ構成方法。
【請求項１０】
受信したパケットのヘッダを抽出し前記ヘッダの情報を取得する解析処理と、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する決定処理と、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
の少なくとも１つを実行する処理と、
を、ファブリック内のスイッチを構成するコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願についての記載］
本発明は、日本国特許出願：特願２０１４−１２４２１４号（２０１４年６月１７日出願）に基づくものであり、同出願の全記載内容は引用をもって本書に組み込み記載されているものとする。【０００２】
本発明はスイッチ装置とコンピュータシステムと方法並びにプログラムに関する。
【背景技術】
【０００３】
コンピュータを構成するＣＰＵ（Central Processing Unit）や、メモリ、Ｉ／Ｏ（Input/Output：入出力）バスなどを搭載する基板（例えばマザーボード）上のプリント配線で実現されていたコンピュータのＩ／Ｏファブリックを、ネットワークケーブルとネットワークスイッチを用いてコンピュータの筐体外に延長する技術が現れてきている。【０００４】
ＰＣＩ（Peripheral Component Interconnect）−Ｅｘｐｒｅｓｓ（PCI-ExpressはPCI-SIGの登録商標）に接続するＧＰＵ（Graphics Processing Unit）やＮＩＣ（Network Interface Card）などのＩ／Ｏデバイスを搭載するためのＩ／Ｏデバイス収容ボックスが知られている（例えばインターネットURL：http://www.magma.com/）。このＩ／Ｏデバイス収容ボックスは、コンピュータからＰＣＩ−ＥｘｐｒｅｓｓのＩ／Ｏファブリックを専用のＩ／Ｏカードとケーブルを用いてコンピュータ筐体外に出し、該ケーブルとＩ／Ｏデバイス収容ボックスとを接続する。こうすることで、コンピュータの筐体と物理的に離れた地点に設置されたＩ／Ｏデバイスをコンピュータから使用できるようにする。この製品では、ケーブルを流れる信号はＰＣＩ−Ｅｘｐｒｅｓｓの仕様に準拠したものになっている。また、コンピュータの筐体とＩ／Ｏデバイス収容ボックスの間の距離は、数メートルとされている。したがって、サーバラック（例えばEIA（Electronic Industries Alliance）規格の19インチラック：１段当たりの幅：19インチ、高さを1.75インチの倍数で規定し1.75インチを1Uという単位で定めている）内の接続程度であれば、届く距離となっている。【０００５】
また、コンピュータとＩ／Ｏデバイス収容ボックスとの接続にイーサネット（登録商標）を用いた製品（例えばＥｘｐＥｔｈｅｒ（エクスプレスイーサ）等）も知られている（例えばインターネットURL：http://www.nec.co.jp/products/workstation/solution/expether/））。この製品では、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の信号をイーサネット（登録商標）パケットでカプセル化することにより、イーサネット（登録商標）ケーブルとイーサネット（登録商標）スイッチを用いて、コンピュータの筐体と、Ｉ／Ｏデバイス収容ボックスとの間の物理的な距離を、イーサネット（登録商標）が仕様で定める距離（最大でキロメートル単位）まで延ばすことが可能となっている。【０００６】
上記した製品等では、イーサネット（登録商標）スイッチは、主にＩ／Ｏデバイス収容ボックスとコンピュータを接続するために用いられる。より正確には、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリックにおける、ルートコンプレックス（Root Complex）と、エンドポイント（ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ではＩ／Ｏデバイスを「エンドポイント」という）を接続するために用いられる。【０００７】
一方、ノントランスペアレントブリッジ（Non Transparent Bridge：ＮＴＢ）を用いることで、コンピュータ同士を接続することが可能となる。ＮＴＢは、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリックにおけるルートコンプレックス同士を、直接、あるいはＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）スイッチやＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ブリッジを介して、接続する。ルートコンプレックスは、コンピュータ内のＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリックのルート（階層の根幹）に位置するデバイスであり、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ポート、及びホストブリッジを備え、ＣＰＵからＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリック内のＩ／Ｏデバイスにアクセスするためのインタフェースを提供する。【０００８】
ＮＴＢは、各ＣＰＵ（あるいはルートコンプレックス）からはエンドポイントとして見える。ＮＴＢは、各ＣＰＵに、データ転送などに使用するためのインタフェースを提供する。ＮＴＢは、このインタフェースを介して、一方のＣＰＵから転送されてきたデータの転送先を示す情報を変換し、他方のＣＰＵにデータを転送するといった処理を行う。【０００９】
上記した関連技術を用いることで、データセンタに収容するサーバを、ＣＰＵやメモリ、Ｉ／Ｏデバイスなどのリソース単位に分割し、それらをネットワークを介して柔軟に接続するというリソース分離型データセンタの実現が可能となる（例えば非特許文献１参照）。【００１０】
コンピュータとＩ／Ｏデバイス収容ボックスとの接続にイーサネット（登録商標）を用いた製品（例えばＥｘｐＥｔｈｅｒ等）では、Ｉ／Ｏデバイス収容ボックスや、コンピュータに、該製品に対応したＩ／Ｏインタフェースを持たせる。各Ｉ／ＯインタフェースにはＭＡＣ（Media Access Control）アドレスが割り振られている。コンピュータやＩ／Ｏデバイス収容ボックスに収容されたＩ／Ｏデバイスが、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の信号を送信する際に、Ｉ／ＯインタフェースがＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の信号をイーサネット（登録商標）パケットでカプセル化する。その際に、イーサネット（登録商標）パケットに含まれる宛先ＭＡＣアドレスには、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の信号の送信先となるＩ／Ｏデバイス収容ボックスやコンピュータが備えるＩ／ＯインタフェースのＭＡＣアドレスを設定し、送信元ＭＡＣアドレスには、自身のＩ／ＯインタフェースのＭＡＣアドレスを設定する。【００１１】
カプセル化されたＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の信号は、ＭＡＣアドレスに基づいてイーサネット（登録商標）上を流れ、宛先ＭＡＣアドレスが示すＩ／Ｏインタフェースに届けられる。【００１２】
宛先のＩ／Ｏインタフェースでは、イーサネット（登録商標）パケットからＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の信号を取り出し（アンカプセル化）、最終的にＩ／ＯデバイスやコンピュータにＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の信号が届けられる。【００１３】
コンピュータとＩ／Ｏデバイス収容ボックスとの接続にイーサネット（登録商標）を用いた前記製品では、どのＩ／Ｏデバイス収容ボックスとコンピュータを接続するかを、ＶＬＡＮ（Virtual Local Area Network）を用いて制御している。コンピュータとＶＬＡＮ  ＩＤが一致するＩ／Ｏデバイス収容ボックスを、このコンピュータが使用可能なＩ／Ｏデバイス収容ボックスとしている。【００１４】
なお、特許文献１には、ネットワーク上に多数のＶＬＡＮを構築するためには、ネットワーク機器の追加等に起因してコストが増加する、という問題を解消するための構成が開示されている。特許文献１には、複数のポートを備えるスイッチング装置であって、入力ポート識別子、入力仮想パス識別子、送信先アドレスの組み合わせに対して、出力ポート識別子を格納するスイッチ情報格納部と、入力パケットに付与されている第１の入力仮想パス識別子および第１の送信先アドレスを検出する検出部と、前記入力パケットが入力されたポートを識別する第１の入力ポート識別子、前記第１の入力仮想パス識別子、前記第１の送信先アドレスに基づいて、前記スイッチ情報格納部から第１の出力ポート識別子を検索する検索部と、前記第１の出力ポート識別子により識別されるポートへ前記入力パケットを転送するパケットスイッチ部を備えるスイッチング装置が開示されている。【００１５】
特許文献２には、複数のＣＰＵと、複数の拡張ＮＷ  ＩＦをマルチルート対応のＰＣＩエクスプレス（ＰＣｌｅ）スイッチで接続し、複数の拡張ネットワークインタフェース（ＮＷ  ＩＦ）によるスイッチポートを構成し、ソフトウェアベースのスイッチノードで大容量のフローテーブルを構成するスイッチノードが開示されている。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２０１１−２５４３７８号公報
【特許文献２】国際公開第２０１２／１２８２８２号
【非特許文献】
【００１７】
【非特許文献１】Sangjin Han、他、「Network Support for Resource Disaggregation in Next-Generation Datacenters」、２０１３年１１月、［平成２６年５月１２日検索］、インターネット（URL:http://conferences.sigcomm.org/hotnets/2013/papers/hotnets-final40.pdf）
【発明の概要】
【発明が解決しようとする課題】
【００１８】
以下の分析は、本発明によって与えられたものである。【００１９】
上記した関連技術においては、コンピュータを構成するリソースを接続するためのＩ／Ｏファブリックの柔軟性が損なわれる、という問題点がある。その理由は以下の通りである。【００２０】
上記したＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）では、ルートコンプレックス同士を接続する場合に、ＮＴＢが必要である。例えば非特許文献１で示すような、コンピュータを構成するリソースが分割され、該分割されたリソース同士を、Ｉ／Ｏファブリックを通じて接続するようなデータセンタについて検討する。このようなデータセンタを実現する場合、Ｉ／Ｏファブリック内にＮＴＢを備える必要がある。そして、ルートコンプレックス同士を接続する際には、ＮＴＢを経由するように、Ｉ／Ｏファブリックを制御することになる。これにより、リソース同士を接続するＩ／Ｏファブリックの経路制御などに制約がかかることになる。すなわち、コンピュータを構成するリソースを接続するためのＩ／Ｏファブリックの柔軟性が損なわれる。【００２１】
したがって、本発明の目的は、上述した問題点に鑑みて創案されたものであって、その目的は、Ｉ／Ｏファブリック等の柔軟性を損なうことなく、コンピュータを構成するリソース同士を接続できるシステム、装置、方法、プログラムを提供することにある。
【課題を解決するための手段】
【００２２】
本発明の１つの側面によれば、ファブリック内のスイッチ装置であって、受信したパケットのヘッダを抽出し前記ヘッダの情報を取得する解析部と、前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する決定部と、前記決定部で決定された前記操作に従って、前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
のうちの少なくとも１つを実行する手段を備えた実行部とを備えたスイッチ装置が提供される。【００２３】
本発明によれば、Ｉ／Ｏファブリック内に前記スイッチ装置を備えたコンピュータシステムが提供される。【００２４】
本発明の１つの側面によれば、ファブリック内のスイッチが、受信したパケットのヘッダを抽出して前記ヘッダの情報を取得し、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定し、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
のうちの少なくとも１つを実行する、コンピュータ構成方法が提供される。【００２５】
本発明によれば、受信したパケットのヘッダを抽出し前記ヘッダの情報を取得する処理と、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する処理と、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
の少なくとも１つを実行する処理と、
を、ファブリック内のスイッチを構成するコンピュータに実行させるプログラムが提供される。本発明によれば、該プログラムを記録したコンピュータ読み出し可能な記録媒体（半導体メモリ、磁気／光ディスク等）が提供される。
【発明の効果】
【００２６】
本発明によれば、Ｉ／Ｏファブリック等の柔軟性を損なうことなく、コンピュータを構成するリソース同士を接続することができる。
【図面の簡単な説明】
【００２７】
【図１】本発明の一実施の形態の構成を例示する図である。
【図２】図１のＩ／ＯファブリックがＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）のプロトコルに従って動作する場合の構成を例示する図である。
【図３】デバイスツリーを例示する図である。
【図４】図２のスイッチの構成を例示する図である。
【図５】ＴＬＰヘッダのフォーマットの一例を示す図である。
【図６】ＴＬＰヘッダのフォーマットのパケットの宛先情報をＢＤＦ番号で表記する例を示す図である。
【図７】アクション決定部が備えるテーブルを説明する図である。
【図８】アクション実行部の構成を例示する図である。
【図９】メモリアドレス空間を説明する図である。
【図１０】デバイスツリーを例示する図である。
【図１１】Ｉ／Ｏデバイスエミュレーション部の構成を例示する図である。
【図１２】仮想Ｉ／Ｏデバイス管理テーブルの構成と、仮想Ｉ／Ｏデバイス構成情報管理部の構成を例示する図である。
【図１３】スイッチの一例を示す図である。
【図１４】本発明の基本概念を説明する図である。
【発明を実施するための形態】
【００２８】
以下では、はじめに本発明の形態（modes）の基本概念を説明し、つづいて例示的な実施形態について説明する。本発明の一形態において、図１４を参照すると、ファブリック内のスイッチ装置（スイッチノード）１００は、前記ファブリック内を転送されるパケットを受信すると、前記パケットのヘッダを抽出し前記ヘッダの情報を取得する解析部１０１と、前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する決定部１０２と、前記決定部１０２で決定された前記操作に従って、前記パケットに含まれるリクエストへの応答、前記パケットの書き換え、前記パケットの転送、のうちの少なくとも１つを実行する手段を備えた実行部１０３と、を備えている。ファブリック内のスイッチ装置は、当該ファブリックを構成する複数のノード（例えばルートコンプレックス及びＩ／Ｏデバイス）と通信接続する。
【００２９】
いくつかの形態の一つによれば、前記スイッチ装置は、入力されたパケットに対して、パケットヘッダを抽出する手段（例えば図４のヘッダ解析部６２）と、
抽出したパケットヘッダからパケットに対する操作を決定する手段（例えば図４のアクション決定部６４）と、
決定された前記操作に従って、
パケットに含まれるリクエストへの応答（例えば図８のＩ／Ｏデバイスエミュレーション部６６４）、
パケットの書き換え（例えば図８のパケット書換部６６８、図８のＣＰＵ間ブリッジエミュレーション部６６６）、
パケットの転送（例えば図８のＰＣＩブリッジエミュレーション部６６２、図８のＣＰＵ間ブリッジエミュレーション部６６６）の少なくとも１つを実行する手段（図４のアクション実行部６６）と、
パケットを出力する手段（例えば図４のパケット出力部６８）と、
制御手段（例えば図４のスイッチ制御部７０）と、を備えた構成としてもよい。
【００３０】
いくつかの形態の一つによれば、制御手段（図４のスイッチ制御部７０）は、前記パケットに対する操作を決定する手段（例えば図４のアクション決定部６４）に、パケットの識別子と、パケットに対して実行する操作を示す識別子を登録する手段を備えた構成としてもよい。
【００３１】
さらに、いくつかの形態の一つによれば、制御手段（図４のスイッチ制御部７０）は、前記パケットに含まれるリクエストへの応答を行う手段（例えば図８のＩ／Ｏデバイスエミュレーション部６６４）に対して、仮想的なＩ／Ｏデバイスの構成を設定する手段を備えた構成としてもよい。
【００３２】
いくつかの形態の一つによれば、制御手段（図４のスイッチ制御部７０）は、前記パケットの書き換えを行う手段（例えば図８のパケット書換部６６８、図８のＣＰＵ間ブリッジエミュレーション部６６６）に対して、パケットの識別子と、パケットの書き換える領域と、書き換え後のデータを設定する手段を備えた構成としてもよい。
【００３３】
さらにまた、いくつかの形態の一つによれば、制御手段（図４のスイッチ制御部７０）は、前記パケットの転送を実行する手段（例えば図８のＰＣＩブリッジエミュレーション部６６２、図８のＣＰＵ間ブリッジエミュレーション部６６６）に対して、パケットの識別子と、パケットの転送先の識別子を設定する手段を備えた構成としてもよい。
【００３４】
本発明の形態によれば、Ｉ／Ｏファブリックに含まれるスイッチに対して、該Ｉ／Ｏファブリックを構成するノード間の通信をどのように行うかを設定することができる。その結果、コンピュータシステムが備えるＩ／Ｏファブリックの構成を柔軟に変更することができる。
【００３５】
本発明の例示的な一実施形態について図面を参照して説明する。なお、この概要で参照される図面の番号や参照符号は、理解を助けるための一例として各要素に便宜上、記載したものであり、本発明を図示の態様に限定することを意図するものではない。
【００３６】
［第１の例示的な実施の形態］  
図１は、本発明の第１の例示的な実施の形態に係る、コンピュータシステム１の構成を例示する図である。図１を参照すると、コンピュータシステム１は、ＣＰＵ（Central Processing Unit）２と、メモリ３と、Ｉ／Ｏファブリックインタフェース（I/O Fabric I/F（Interface））４と、Ｉ／Ｏデバイス５と、ファブリックスイッチ（Fabric Switch）６と、を備えている。ＣＰＵ２は、Ｉ／Ｏファブリックインタフェース４と、ファブリックスイッチ６と、を介して、Ｉ／Ｏデバイス５に接続される。Ｉ／Ｏデバイス５の例として、ＮＩＣ（Network Interface Card）や、ＧＰＵ（Graphics Processing Unit）、ストレージコントローラなどが挙げられる。Ｉ／Ｏデバイス５は、図１には不図示のＩ／Ｏファブリックインタフェースを内蔵する。ファブリックスイッチ６と、Ｉ／Ｏファブリックインタフェース４と、Ｉ／Ｏデバイス５に内蔵されるＩ／Ｏファブリックインタフェース（不図示）と、これらを互いに接続するリンクによって、Ｉ／Ｏファブリック７を形成する。Ｉ／Ｏファブリック７は、例えばＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）のプロトコルに従って動作する。
【００３７】
図２は、図１において、Ｉ／Ｏファブリック７がＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）のプロトコルに従って動作する場合の、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリック１１の構成を示した図である。この場合、図１のＩ／Ｏファブリックインタフェース４は、図２のルートコンプレックス（Root Complex）８に相当する。図１のＩ／Ｏデバイス５に内蔵されるＩ／Ｏファブリックインタフェース（不図示）は、図２のエンドポイント（Endpoint）１０に相当する。図１のファブリックスイッチ６は、図２のスイッチ９に相当する。図２のスイッチ９は、不図示の複数のＰＣＩ−ＰＣＩブリッジを備えている。以下では、Ｉ／Ｏファブリック７を、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリック１１とした例に即して説明するが、本発明は、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）を備えるコンピュータシステムに制限されるものでないことは勿論である。
【００３８】
図２において、ＣＰＵ２とＩ／Ｏデバイス５は、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリック１１を介して、データや制御情報の送受信を行う。ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の場合、１つのルートコンプレックス８に対して、スイッチ９を介して、複数のエンドポイント１０がツリー状に接続されるデバイスツリーを構成する。つまり、同一のデバイスツリー内に、ルートコンプレックス８はただ１つのみ存在する。そのため、図２のコンピュータシステム１では、図３のように、各ルートコンプレックス８をルートとするデバイスツリー１２が３つ存在することになる。図３は、デバイスツリー１２の例を示す図である。図３では、各Ｉ／Ｏデバイス５が、各デバイスツリー１２に排他的に割り当てられている。ただし、Ｉ／Ｏデバイス５がＭＲ−ＩＯＶ（Multi Root I/O Virtualization）に対応している場合には、複数のルートコンプレックス８に対して、単一のＩ／Ｏデバイス５を接続することが可能である。
【００３９】
図４は、図２のスイッチ９の構成を例示する図である。図４を参照すると、スイッチ９は、パケット入力部６０と、ヘッダ解析部６２と、アクション決定部６４と、アクション実行部６６と、パケット出力部６８と、スイッチ制御部７０と、を備えている。各部を以下に説明する。
【００４０】
パケット入力部６０は、スイッチ９の外部から、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）パケット（以下、「パケット」と表記する）の入力を受け付ける。ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の場合、物理層では、パケットは８ｂ／１０ｂ符号化あるいは１２８ｂ／１３０ｂ符号化等の符号化（エンコーディング）方式によって、符号化されている。このため、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリック１１の物理層がＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）のプロトコルに従う場合、パケット入力部６０は、パケットの復号（デコード）を行う。一方、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリックの物理層がＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ではない場合、例えば、コンピュータとＩ／Ｏデバイス収容ボックスとの接続にイーサネット（登録商標）を用いている場合には、物理層がイーサネット（登録商標）である。この場合、パケットは符号化されていないため、パケットの復号は不要である。
【００４１】
パケット入力部６０から入力されたパケットは、ヘッダ解析部６２へ渡される。ヘッダ解析部６２は、パケットのヘッダ領域を抽出し、パケットの種別や、パケットの宛先情報を取得する。
【００４２】
ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）において、パケットの種別や宛先を保持するのはトランザクション層（ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の最上層、データリンクレイヤの上層）である。トランザクションレイヤは、ソフトウェアレイヤからの要求に応じてトランザクションレイヤパケット（Transaction Layer Packet：ＴＬＰ）を生成し、データリンクレイヤに渡し、データリンクレイヤから受け取ったデータを解析しデータをソフトウェアレイヤに渡す。ＴＬＰには、メモリやＩ／Ｏのリード／ライト処理ごとに、リクエストと、処理の終了を示すコンプリーションの２種類がある。リクエストＴＬＰは、ヘッダにどのデバイスからのリスエストかを示すリクエスタＩＤ(Requester ID)と、リクエスト固有のタグ（Tag）を含む。処理の完了通知であるコンプリーションは、処理を行ったデバイスを示すコンプリーション（Completer ID）とリクエスト元を示すリクエスタＩＤ(Requester ID)および完了させたリクエストのタグ（Tag）を含む。
【００４３】
図５は、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）プロトコルにおけるＴＬＰヘッダのフォーマットのうち、パケットの宛先情報をメモリアドレスで表記する例を示す図である。図５を参照すると、パケットの送信元は、リクエスタＩＤ（(Requester ID)５２６で指定される。パケットの宛先は、メモリアドレス（Address[31：2]、2ビットから３１ビット）５２４で指定される。このように、パケットの宛先がメモリアドレスで指示されるのは、ルートコンプレックス８とエンドポイント１０（図２）の間などでやり取りされるリクエストが、メモリリクエストか、Ｉ／Ｏリクエストの場合である。
【００４４】
リクエストの種別は、フォーマット（format: FMT）５３８と、タイプ(Type)５３６の組み合わせで表現される。
【００４５】
リクエスタＩＤ５２６として、デバイスツリーの｛バス番号(Bus Number)、デバイス番号（Device Number）、ファンクション番号（Function Number）｝の組み合わせ（ＢＤＦ番号）や、ＡＲＩ（Alternative Routing ID）が用いられる。以下では、リクエスタＩＤ５２６としてＢＤＦ番号を用いる例を説明するが、このことは、本発明において、リクエスタＩＤとしてＢＤＦ番号を用いることに限定されるものではない。
【００４６】
図６は、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）プロトコルにおけるＴＬＰヘッダのフォーマットのうち、パケットの宛先情報をＢＤＦ番号で表記する例を示す図である。図６を参照すると、パケットの送信元は、リクエスタＩＤ５２６で示される。パケットの宛先は、ＢＤＦ番号５２８で示される。パケットの宛先がＢＤＦ番号で示されるのは、ルートコンプレックス８とエンドポイント１０の間などでやり取りされるリクエストが、
・コンフィギュレーションリクエスト、
・メッセージリクエスト、
・コンプリーションの通知
のいずれかの場合である。
【００４７】
再び図４を参照すると、スイッチ９において、ヘッダ解析部６２で抽出されたパケットヘッダ（例えば図５又は図６のＴＬＰヘッダ）の情報は、パケットのペイロード部とともに、アクション決定部６４へ渡される。
【００４８】
アクション決定部６４は、ヘッダ解析部６２から渡されたパケットヘッダの情報に基づいて、パケットに対してどのような処理を行うかを決定する。特に制限されないが、アクション決定部６４は、例えば図７に示すようなテーブルを用い、パケットヘッダの情報に基づいて、パケットに対する処理を決定する。図７は、アクション決定部６４が備えるテーブルの例を示した図である。
【００４９】
図７を参照すると、リクエストタイプ（Request Type）と、リクエスタＩＤ（Requester ID）と、宛先情報（Destination(Memory Range or BDF#））によって、アクション（Action ID）を決定する構成となっている。リクエストタイプによって、宛先情報のフィールドに保持される情報はメモリアドレスまたはＢＤＦ番号となる。アクションの例として、
・スイッチのどのポートから出力するかを指定する、
・パケットのヘッダ領域を変更する、
・パケットのペイロード部を変更する、
などが挙げられる。これらのアクションに対して一意な識別子(ACTION ID)が割り当てられている。
【００５０】
再び図４を参照すると、アクション決定部６４は、アクションを決定すると、決定したアクションの識別子（Action ID）と、パケットヘッダの情報と、パケットのペイロード部をアクション実行部６６に渡す。
【００５１】
図８は、図４のアクション実行部６６の構成を例示する図である。図８を参照すると、アクション実行部６６は、アクション選択部６６０と、パケット出力インタフェース６７０と、アクション実行部制御インタフェース６７２と、アクション実行処理部６７４と、を備えている。ただし、アクション実行部６６は、上記構成に限定されるものでないことは勿論ある。各部について以下に説明する。
【００５２】
アクション実行処理部６７４は、パケットに対する処理（アクション）の種類に応じて、複数の処理ブロックを備える。図８に示す例では、アクション実行処理部６７４は、ＰＣＩブリッジエミュレーション部６６２と、Ｉ／Ｏデバイスエミュレーション部６６４と、ＣＰＵ間ブリッジエミュレーション部６６６と、パケット書換部６６８と、を備えている。ただし、アクション実行処理部６７４は、上記構成に限定されるものでないことは勿論である。
【００５３】
図８を参照すると、アクション選択部６６０は、図４のアクション決定部６４から渡されたアクションの識別子（Action ID）に基づいて、アクション実行処理部６７４が備える処理部に、パケットヘッダ（例えば図６のＴＬＰヘッダ）の情報と、パケットのペイロード部を渡す。
【００５４】
アクション実行部制御インタフェース６７２は、アクション実行部６６の設定や制御を行うためのインタフェースである。図４のスイッチ制御部７０は、アクション実行部制御インタフェース６７２を介して、アクション実行部６６に対して、各種設定を行う。なお、設定の例については後述する。スイッチ制御部７０は、例えばスイッチ管理用のサーバや、コンピュータシステム１からアクセス可能なように実現することも可能である。これは、例えば、イーサネット（登録商標）スイッチやルータ等の管理用ポートと同様の構成をとることで実現される。
【００５５】
アクション実行処理部６７４が備える処理部は、図４のアクション決定部６４が指定する識別子と一対一で対応する、各々に一意な識別子を持っている。図８を参照して、アクション実行処理部６７４の各処理部について以下に説明する。
【００５６】
ＰＣＩブリッジエミュレーション部６６２は、ルートコンプレックス８とＩ／Ｏデバイス５（図２、図３）、あるいは、Ｉ／Ｏデバイス５（図２、図３）同士のデータ転送を実現する。ＰＣＩブリッジエミュレーション部６６２は、図２、図３のルートコンプレックス８や、Ｉ／Ｏデバイス５が送信するパケットを、スイッチ９の適切なポートに出力するためのフォワーディングテーブル（図１３の８２）を備える。フォワーディングテーブル（図１３の８２は、例えば、アクション決定部６４の説明で参照した図７のような構成をとる。
【００５７】
ただし、ＰＣＩブリッジエミュレーション部６６２が備えるフォワーディングテーブルでは、図７のアクションＩＤ（Action ID）を示すフィールド（欄）には、パケットの出力先を示す情報が格納される。また、パケットの出力先を示す情報として、図２のスイッチ９のポートの識別子のほか、パケットの書き換えなど、パケットに対する処理が必要な場合に対応するために、アクション実行処理部６７４が備える処理部の識別子も用いられる。また、別の処理部にパケットを出力する場合、ＰＣＩブリッジエミュレーション部６６２は、アクション選択部６６０に対して、パケットと、当該別の処理部の識別子を出力する。アクション選択部６６０は、ＰＣＩブリッジエミュレーション部６６２から出力された、処理部の識別子を受け取り、処理部の識別子を参照して、適切な処理部にパケットを転送する。
【００５８】
図３等の各Ｉ／Ｏデバイス５（各エンドポイント１０）には、デバイスツリー１２内で一意なＢＤＦ番号（Bus Number、Device Number、Function Number）が割り振られている。Ｉ／Ｏデバイス５が送出するパケットのヘッダ（図６参照）には、リクエスタＩＤとして、Ｉ／Ｏデバイス５のＢＤＦ番号５２８（図６参照）が格納されている。
【００５９】
図８のＰＣＩブリッジエミュレーション部６６２は、
・パケットヘッダに含まれるリクエスタＩＤと、
・パケットの宛先情報である宛先Ｉ／Ｏデバイス５のＢＤＦ番号（図６参照）、または、宛先Ｉ／Ｏデバイス５を指示するメモリアドレス（図５参照）
を用いて、パケットを他のＩ／Ｏデバイス５に転送するかどうかを決定する。
【００６０】
一般的に、コンピュータシステムでは、メモリ３や、各Ｉ／Ｏデバイス５に、そのコンピュータシステムで定義されるメモリアドレス空間の特定の領域が割り当てられる。図９は、メモリアドレス空間の例を模式的に示す図である。図９には、３２ビットのメモリアドレス空間が示されており、メモリアドレスの範囲は0x00000000〜0xFFFFFFFFである（０ｘは１６進数を示す記号である）。
【００６１】
このメモリアドレス空間のうち、
・0x00000000〜0xBFFFFFFFの範囲は、メモリ３用(図２又は図３)のアドレス空間(memory address space)、
・0xC0000000〜0xCFFFFFFFの範囲は、Ｉ／Ｏデバイス５(図２又は図３)用のアドレス空間(I/O address space)として確保されている。
【００６２】
図９に示す例では、Ｉ／Ｏデバイス用のアドレス空間の一部（0xC0000000〜0xC7FFFFFF）が第１のＩ／Ｏデバイス（I/O Device 1）５に割り当てられており、Ｉ／Ｏデバイス用のアドレス空間のまた別の領域（0xC8000000〜0xCFFFFFFF）が、第２のＩ／Ｏデバイス(I/O Device 2)５に割り当てられている。
【００６３】
図２又は図３において、スイッチ９は、図９に一例を示したメモリアドレスの割り当てに関する情報を保持しており、スイッチ９の各ポートに対応するメモリアドレスの範囲を管理している。これにより、パケットヘッダに含まれるメモリアドレスに基づいて、スイッチ９が適切なポートにパケットを出力することができる。
【００６４】
図２又は図３において、各Ｉ／Ｏデバイス５は、ＣＰＵ２の上で動くオペレーティングシステム（Operating System：ＯＳ）やドライバソフトウェアからの通知によって、どのメモリアドレスに対して、リードリクエストやライトリクエストを発行すればよいのかを知る。
【００６５】
ここで、図１０に示すような、１つのデバイスツリーにスイッチ９を介してＩ／Ｏデバイス５が３つ接続されている場合を例に説明する。図１０は、Ｉ／Ｏデバイスエミュレーション部６６４の動作を説明するためのデバイスツリーを例示した図である。
【００６６】
図１０を参照すると、各Ｉ／Ｏデバイス５は、ＮＩＣ（Ｉ／Ｏデバイス１）、ディスク装置１（Ｉ／Ｏデバイス２）、ディスク装置２（Ｉ／Ｏデバイス２’）とする。また、ＣＰＵ２とスイッチ９が管理用リンク１３を通じて接続されている。管理用リンク１３は、スイッチ９の内部で、スイッチ制御部７０（図４参照）に接続されている。
【００６７】
ＮＩＣは、ディスク装置１に対して、外部ネットワークから受信したイーサネット（登録商標）パケットを書き込むために、ディスク装置１を示すメモリアドレスに対して、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）のパケットを送信する。
【００６８】
ここで、ＣＰＵ２上で動くＯＳなどがディスク装置１の残り容量が少なくなったことを検知すると、ＣＰＵ２は、管理用リンク１３を通じて、スイッチ９に「ＮＩＣからのＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）のパケットのうち、ディスク装置１に対するライトリクエストのものは、ディスク装置２に送信する」という指示を出す。
【００６９】
この指示を具体的に示すと、
（１）図８のＰＣＩブリッジエミュレーション部６６２のフォワーディングテーブルに対して、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）パケットの
｛リクエストタイプ＝メモリライト、
リクエスタＩＤ＝ＮＩＣのＢＤＦ番号、
宛先＝ディスク装置１を示すメモリアドレス、
アクション＝パケット書換部６６８を示すＩＤ｝
というエントリを追加する指示、及び、
（２）図８のパケット書換部６６８（構成は後述する）が備えるアクションテーブルに対して、
「パケットの宛先アドレスをディスク装置２が示す領域に書き換えて、ディスク装置２が接続されているスイッチ９のポートに出力する」
というエントリを追加する指示、
となる。
【００７０】
上記指示によって、図１０において、ＮＩＣが受信する後続のイーサネット（登録商標）パケットは、ＮＩＣに対する設定変更を行うことなく、ディスク装置２（Disk 2）に転送されるようになる。
【００７１】
再び図８を参照すると、Ｉ／Ｏデバイスエミュレーション部６６４は、ルートコンプレックス８に対して、仮想的なＩ／Ｏデバイス（仮想Ｉ／Ｏデバイス）を見せるエミュレーションを実行する。どのような構成（デバイスのベンダＩＤ、デバイスの種別、デバイスの機能、必要とするアドレス空間のサイズなど）の仮想Ｉ／Ｏデバイスとするかは、図４のスイッチ制御部７０からの指示に基づく。これらの構成情報は、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）のレジスタマップの仕様に従って、レジスタを示すアドレスとともに、Ｉ／Ｏデバイスエミュレーション部６６４に保持される。
【００７２】
図１１は、図８のＩ／Ｏデバイスエミュレーション部６６４の構成を例示する図である。図１１を参照すると、Ｉ／Ｏデバイスエミュレーション部６６４は、仮想Ｉ／Ｏデバイス管理テーブル６６４０と、仮想Ｉ／Ｏデバイス構成情報管理部（テーブル）６６４２と、構成情報参照部６６４４と、ＢＤＦ番号判定部６６４６と、リクエストタイプ判定部６６４８と、メモリ空間参照部６６５４と、仮想Ｉ／Ｏデバイスメモリ空間管理部６６５６と、を備えている。ただし、Ｉ／Ｏデバイスエミュレーション部６６４はかかる構成にのみ制限されるものでないことは勿論である。
【００７３】
Ｉ／Ｏデバイスエミュレーション部６６４は、デバイスツリーごとに１つ、図８のアクション実行処理部６７４に備えられる。各Ｉ／Ｏデバイスエミュレーション部６６４の内部には、複数の仮想Ｉ／Ｏデバイスを保持することができる。これにより、Ｉ／Ｏデバイスエミュレーション部６６４は、１つのデバイスツリーに複数個の仮想Ｉ／Ｏデバイスを提供することが可能である。この各仮想Ｉ／Ｏデバイスは、コンピュータシステム１（図２又は図３）内で、一意なＢＤＦ番号を持つ。特に、バス番号については、スイッチ９の各リンクに割り当てられているバス番号と異なるものが用いられる。
【００７４】
図４のアクション決定部６４は、ルートコンプレックス８（図２又は図３）からのパケットの宛先情報が、仮想Ｉ／Ｏデバイスに対応するＢＤＦ番号であるか、仮想Ｉ／Ｏデバイスに対応するメモリアドレスである場合に、Ｉ／Ｏデバイスエミュレーション部６６４に対して、当該パケット（リクエスト）を転送する。ただし、コンピュータシステム１はシステム起動時に、ＢＩＯＳ（Basic Input/Output System）によって仮想Ｉ／Ｏデバイスを含むＩ／Ｏデバイスの初期化が行われ、Ｉ／Ｏデバイスの初期化後に、各Ｉ／Ｏデバイスに対応するメモリアドレスが決まる。このため、仮想Ｉ／Ｏデバイスについては、仮想Ｉ／Ｏデバイスの初期化後に、アクション決定部６４が備えるフォワーディングテーブルに、対応するエントリが追加される。なお、仮想Ｉ／Ｏデバイスを含むＩ／Ｏデバイスの初期化は、コンフィギュレーションリクエストによって行われる。
【００７５】
まず、図８において、Ｉ／Ｏデバイスエミュレーション部６６４が、アクション決定部６４から、コンフィギュレーションリクエストを受け取った場合について説明する。
【００７６】
コンフィギュレーションリクエストの場合、図６に示すパケットフォーマットとなる。図６に示すように、図６の８バイトから１１バイトの４バイト分で、ＢＤＦ番号、レジスタ番号を指定する。
【００７７】
ＢＤＦ番号で指定されたＩ／Ｏ、レジスタ番号で指定されたレジスタに対して、読み書きが行われる。コンフィギュレーションライトリクエストの場合は、さらに、１２バイト目からの４バイト（図６には不図示）で書き込むデータを指定する。
【００７８】
図１１において、リクエストタイプ判定部６６４８は、図８のアクション選択部６６０を通じて、図４のアクション決定部６４から渡されたパケットに含まれるリクエストタイプから、宛先情報が、ＢＤＦ番号であるか、メモリアドレスであるかを判定する。リクエストタイプ判定部６６４８は、宛先情報が、ＢＤＦ番号である場合に、ＢＤＦ番号判定部６６４６にリクエストを渡す。ＢＤＦ番号判定部６６４６は、リクエストタイプ判定部６６４８から送られてきたコンフィギュレーションリクエストのＢＤＦ番号を用いて、仮想Ｉ／Ｏデバイス管理テーブル６６４０にアクセスする。
【００７９】
図１２は、図１１の仮想Ｉ／Ｏデバイス管理テーブル６６４０の構成と、仮想Ｉ／Ｏデバイス構成情報管理部６６４２の構成を例示する図である。図１２を参照すると、仮想Ｉ／Ｏデバイス管理テーブル６６４０は、入力された宛先ＢＤＦ番号をキーとし、仮想Ｉ／Ｏデバイス構成情報管理部６６４２のオフセット値（例えば先頭アドレス０Ｘ００００からのオフセット）を得る構成とされている。
【００８０】
図１１において、ＢＤＦ番号判定部６６４６は、オフセット値を、仮想Ｉ／Ｏデバイス管理テーブル６６４０から得たのちに、当該オフセット値とコンフィギュレーションリクエストを、構成情報参照部６６４４に渡す。
【００８１】
構成情報参照部６６４４は、コンフィギュレーションリクエストに含まれるレジスタ番号と、オフセット値とを足した結果と、コンフィギュレーションリクエストの種別（リードなのかライトなのか）を示す識別子を、仮想Ｉ／Ｏデバイス構成情報管理部６６４２に渡す。
【００８２】
仮想Ｉ／Ｏデバイス構成情報管理部６６４２は、図１２に示される通り、入力された値をアドレスとし、そのアドレスに対応したデータ保持領域に、データを格納する、あるいはデータ保持領域から読み出す。本実施の形態では、仮想Ｉ／Ｏデバイス構成情報管理部６６４２は、構成情報参照部６６４４から渡されたオフセット値とレジスタ番号の合計値をアドレスとし、コンフィギュレーションリクエストの種別に応じて、アドレスに対応したデータ保持領域から、データを読み出す（コンフィギュレーションリードリクエスト）か、アドレスに対応したデータ保持領域にデータを書き込む（コンフィギュレーションライトリクエスト）。
【００８３】
ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）において、コンフィギュレーションリクエストはノン・ポステッドトランザクションであるため、構成情報参照部６６４４は、コンプリーションパケットを生成し、リクエスタＩＤを持つデバイスに送信する。
【００８４】
コンフィギュレーションリードリクエストの場合は、構成情報参照部６６４４は、仮想Ｉ／Ｏデバイス構成情報管理部６６４２から読み出したデータをコンプリーションパケットに含めて、リクエスタＩＤを持つデバイスに送信する。
【００８５】
アクション決定部６４からのコンフィギュレーションリクエストに対してＩ／Ｏデバイスエミュレーション部６６４が、このようなコンフィギュレーションリクエストに関するパケットのやり取りをルートコンプレックス８と行うことによって、仮想Ｉ／Ｏデバイスは初期化され、メモリ領域が割り当てられる。割り当てられたメモリ領域に関する情報は、図４のスイッチ制御部７０を通じて、例えば、仮想Ｉ／ＯデバイスのＢＤＦ番号とともに、アクション決定部６４に伝えられる。
【００８６】
図４のアクション決定部６４では、当該メモリ領域に含まれるメモリアドレスを宛先情報とするパケットを、図８のＩ／Ｏデバイスエミュレーション部６６４に渡すようなエントリが追加される。
【００８７】
次に、図８のＩ／Ｏデバイスエミュレーション部６６４が、図４のアクション決定部６４から、メモリリードリクエストまたはメモリライトリクエストを受け取った場合について説明する。
【００８８】
仮想Ｉ／Ｏデバイスへのメモリリードリクエスト、あるいはメモリライトリクエストがスイッチ９に届くと、まず、図４のアクション決定部６４において、パケットに含まれるリクエスタＩＤと、リクエストタイプと、宛先情報とに基づいて、アクションを決定する。アクションが仮想Ｉ／Ｏデバイスに対するものであった場合、当該パケットとアクションＩＤ（図７参照）が、図４のアクション実行部６６に渡される。さらに、アクション実行部６６では、アクションＩＤに基づいて、該仮想Ｉ／Ｏデバイスへのリクエストを図１１のＩ／Ｏデバイスエミュレーション部６６４に渡す。
【００８９】
図１１を参照すると、Ｉ／Ｏデバイスエミュレーション部６６４では、リクエストタイプ判定部６６４８が、図４のアクション実行部６６から渡されたリクエストが、メモリリードリクエストあるいはメモリライトリクエストであるかを判定し、該リクエストをメモリ空間参照部６６５４に渡す。
【００９０】
メモリ空間参照部６６５４は、リクエストに含まれる宛先情報（メモリアドレス）と、リクエストタイプを用いて、仮想Ｉ／Ｏデバイスメモリ空間管理部６６５６を参照する。
【００９１】
仮想Ｉ／Ｏデバイスメモリ空間管理部６６５６は、アドレス値を入力とし、対応する領域に対して、データの読み出し、データの書き込みを行う。
【００９２】
仮想Ｉ／Ｏデバイスメモリ空間管理部６６５６は、メモリ空間参照部６６５４から入力されたリクエストタイプに基づいて、入力されたアドレス値が示す領域に対して、データの読み出し、又は書き込みを行う。
【００９３】
データの読み出しの場合、仮想Ｉ／Ｏデバイスメモリ空間管理部６６５６から読み出されたデータは、メモリ空間参照部６６５４に渡される。
【００９４】
メモリ空間参照部６６５４は、ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）の仕様に基づいてコンプリーションパケットを生成し、読み出したデータをリクエスタ宛に送出する。
【００９５】
仮想Ｉ／Ｏデバイス構成情報管理部６６４２に設定するレジスタマップの設定情報を生成する際に、例えば、実Ｉ／Ｏデバイスの初期化シーケンスを利用するようにしてもよい。レジスタマップのフォーマットは、Ｉ／Ｏファブリックの仕様で定められているため、
・アクセスするレジスタの番地と、
・レジスタに書き込んだデータ、あるいはレジスタから読み出したデータ、
を図２又は図３等のＣＰＵ２、あるいはスイッチ９などでキャプチャすることで、レジスタマップの設定情報を生成することが可能である。
【００９６】
例えば、スイッチ９で受信したパケットを、スイッチ９のアクション実行部６６（図４）から、スイッチ制御部７０に転送し、スイッチ９に直接、あるいは間接的に接続された実Ｉ／Ｏデバイスの初期化シーケンス中に転送されるパケットをキャプチャする。ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）では、Ｉ／Ｏデバイスの初期化時にアクセスするレジスタの順番が定められている。レジスタのアクセスを契機として、Ｉ／Ｏデバイスエミュレーション部６６４では、キャプチャを開始する。
【００９７】
例えば、コンフィギュレーションリクエストをすべて、アクション実行部６６のＩ／Ｏデバイスエミュレーション部６６４（図８）に転送するように、アクション決定部６４が備えるテーブルにルールを設定する。
【００９８】
Ｉ／Ｏデバイスエミュレーション部６６４（図８）では、転送されてきたコンフィギュレーションリクエストから、Ｉ／Ｏデバイス（図２又は図３等の５）の初期化時にアクセスするレジスタのうち、最初にアクセスされるレジスタへのリクエストを抽出し、キャプチャを開始する。
【００９９】
キャプチャを開始すると、Ｉ／Ｏデバイスエミュレーション部６６４は、仮想Ｉ／Ｏデバイス構成情報管理部６６４２（図１１）に、構成情報を書き込む領域を確保する。
【０１００】
Ｉ／Ｏデバイスエミュレーション部６６４は、当該コンフィギュレーションリクエストを、ＰＣＩブリッジエミュレーション部６６２（図８）に渡すことで、適切な（もともとリクエストが転送されるべき）Ｉ／Ｏデバイスに転送される。
【０１０１】
Ｉ／Ｏデバイス（図２又は図３等の５）からのコンフィギュレーションリクエストへの応答は、ＰＣＩブリッジエミュレーション部６６２（図８）から、Ｉ／Ｏデバイスエミュレーション部６６４に渡される。このため、Ｉ／Ｏデバイスエミュレーション部６６４は、Ｉ／Ｏデバイス初期化時に流れるパケットを、キャプチャすることができる。
【０１０２】
Ｉ／Ｏデバイスエミュレーション部６６４は、このようにして取得したレジスタマップの生成情報を用いて、仮想Ｉ／Ｏデバイスを提供する。
【０１０３】
図８のＣＰＵ間ブリッジエミュレーション部６６６は、異なるデバイスツリー間のデータや制御情報のやり取りを実現するモジュールである。ＣＰＵ間ブリッジエミュレーション部６６６は、各デバイスツリーに対して、仮想Ｉ／Ｏデバイスを提供する。この仮想Ｉ／Ｏデバイスは、例えば、ＮＴＢと同様の構成をとる。
【０１０４】
なお、仮想Ｉ／Ｏデバイスの構成については、Ｉ／Ｏデバイスエミュレーション部６６４に関連して既に説明済みであるため、その説明は省略する。
【０１０５】
ＮＴＢでは、データや制御情報のやり取りを行うＣＰＵ２のペアごとに、各デバイスツリーに１つ備えられる。そのため、送信元のＣＰＵ２がアクセスする仮想Ｉ／Ｏデバイス（ＮＴＢ）を選択すると、送信先のＣＰＵ２が一意に決定される。
【０１０６】
ＮＴＢでは、メモリリードリクエスト、あるいはメモリライトリクエストを使用して、ＣＰＵ２同士の通信を実現する。このため、ＣＰＵ間ブリッジエミュレーション部６６６が提供する各仮想Ｉ／Ｏデバイス（ＮＴＢ）は、メモリリードリクエスト、あるいはメモリライトリクエストを受け取る。
【０１０７】
送信元のＣＰＵ２によってアクセスされた仮想Ｉ／Ｏデバイス（ＮＴＢ）は、宛先情報（メモリアドレス）を送信先ＣＰＵ２のデバイスツリーにおいて、この仮想Ｉ／Ｏデバイス（ＮＴＢ）に割り当てられたメモリアドレスに変換する。また、送信元情報を、送信先ＣＰＵ２のデバイスツリーにおける、この仮想Ｉ／Ｏデバイス（ＮＴＢ）のＢＤＦ番号に書き換える。そして、書き換えられた宛先情報（メモリアドレス）に従って、送信先ＣＰＵ２のデバイスツリー内にリクエストが送出される。
【０１０８】
図８において、パケット書換部６６８は、送られてきたパケットの書き換えを行う。どのような書き換えを行うかは、図４のスイッチ制御部７０よりアクション実行部制御インタフェース６７２を介して指定される。指定される情報には、少なくとも、
・書き換え対象となるパケットの情報、
・パケットの書き換える領域、及び、
・書き換え後の値、
が含まれる。
【０１０９】
このようにして、図２、図３のスイッチ９にてルートコンプレックス８とＩ／Ｏデバイス５、あるいはルートコンプレックス８同士のデータ、制御情報のやり取りを可能にすることによって、柔軟なＩ／Ｏファブリックを提供することが可能となる。
【０１１０】
以下では、スイッチ９の一例（具体例）について、図１３を参照して説明する。図１３において、スイッチ１４は、図２乃至図４等を参照して説明したスイッチ９に対応する。図１３を参照すると、スイッチ１４は、スイッチチップ（Switch Chip）８０と、フォワーディングテーブル(Forwarding Table)８２と、コントロールＣＰＵ８４と、メモリ８６と、マネジメントポート(Management Port)８８と、を備えている。スイッチ１４は、一般的なイーサネット（登録商標）スイッチやルータなどのネットワークスイッチと同様の構成をとる。
【０１１１】
スイッチチップ８０は、パケットの入出力ポートを備える。パケットがスイッチチップ８０に入力されると、スイッチチップ８０は、フォワーディングテーブル８２を参照し、パケットの転送先を決定する。決定した転送先に応じて、スイッチチップ８０は、パケットを出力する。あるいは、必要であれば、スイッチチップ８０は、パケットヘッダの書き換えを行う。スイッチチップ８０が、図４に示したスイッチ９のパケット入力部６０と、パケット出力部６８と、ヘッダ解析部６２と、アクション決定部６４が備える、ＰＣＩブリッジエミュレーション部６６２とパケット書換部６６８に相当し、フォワーディングテーブル８２が、図４のアクション決定部６４に相当する。
【０１１２】
スイッチチップ８０は、一般的にはＡＳＩＣ（Application Specific Integrated Circuit）で実現される。このため、シンプルな機能のみを備える場合が多い。そのため、Ｉ／Ｏデバイスのエミュレーション機能など、複雑な機能は別ブロックで実現する。
【０１１３】
フォワーディングテーブル８２は、例えばＴＣＡＭ（Ternary Content Addressable Memory）などで構成され、パケットヘッダを入力値とし、その入力値に該当するエントリが存在するかどうか、存在すれば、そのパケットに対してどのような処理を行うかを出力する。
【０１１４】
コントロールＣＰＵ８４は、スイッチチップ８０の制御や、フォワーディングテーブル８２へのエントリの設定などを行う汎用ＣＰＵである。一般的には、Ｌｉｎｕｘ（登録商標）などの汎用ＯＳがコントロールＣＰＵ８４とメモリ８６の上で稼働する。コントロールＣＰＵ８４は、スイッチ制御部７０の機能を有する。
【０１１５】
また、コントロールＣＰＵ８４は汎用ＣＰＵから構成してもよい。この場合、スイッチチップ８０で処理することができない複雑な処理をソフトウェアで実現することが可能である。例えば、図８のＩ／Ｏデバイスエミュレーション部６６４や、ＣＰＵ間ブリッジエミュレーション部６６６の機能を実現可能である。この場合、図１１を参照して説明した、Ｉ／Ｏデバイスエミュレーション部６６４が備える、仮想Ｉ／Ｏデバイス管理テーブル６６４０や、仮想Ｉ／Ｏデバイス構成情報管理部６６４２、仮想Ｉ／Ｏデバイスメモリ空間管理部６６５６は、例えばメモリ８６を用いて実現される。これらのブロックは、アドレスを入力とし、そのアドレスに対応する領域への読み書きを行う機能を持つため、コンピュータのメインメモリ等に用いられるメモリモジュールを用いて実現することができる。
【０１１６】
マネジメントポート８８は、スイッチ１４をスイッチ１４の外部から制御するためのポートであり、スイッチ制御部７０の外部ブロックとのインタフェース機能を持つ。
【０１１７】
スイッチ１４は、オープンフロースイッチを用いて実現することも可能である。フォワーディングテーブル８２にエントリが登録されていないパケットについては、すべてコントロールＣＰＵ８４または、マネジメントポート８８の先に接続されるスイッチ１４の管理システム（オープンフローコントローラなど）が処理する。
【０１１８】
スイッチ１４がイーサネット（登録商標）スイッチ、あるいはオープンフロースイッチであり、図１３の構成をとる場合、コンピュータとＩ／Ｏデバイス収容ボックスとの接続にイーサネット（登録商標）を用いた構成のスイッチとして用いることが可能である。この場合、異なるデバイスツリー間のデータや制御情報のやり取りを実現するうえで、ＮＴＢではなく、仮想Ｉ／ＯデバイスでＮＩＣをエミュレーションすることが、単一のスイッチで実現可能となる。この場合、送信元のＣＰＵ２と、送信先のＣＰＵ２（図２参照）のそれぞれに、ＮＩＣをエミュレーションする仮想Ｉ／Ｏデバイスが備えられる。そして、これらの仮想Ｉ／Ｏデバイスを接続するスイッチ（例えばスイッチ９）は、イーサネット（登録商標）スイッチ相当の機能を備える。
【０１１９】
送信元のＣＰＵ２は、ソケットインタフェースなどを用いて、例えばＩＰパケットやイーサネットフレームを構築する。そして、構築したＩＰパケットやイーサネット（登録商標）フレームを仮想Ｉ／Ｏデバイス（ＮＩＣ）に送出する。この時に、送信元のＣＰＵ２のルートコンプレックス８（図２参照）において、ＩＰパケットやイーサネット（登録商標）フレームは、ＴＬＰパケットのペイロード部に分割されて格納され、仮想Ｉ／Ｏデバイス（ＮＩＣ）に送出される。
【０１２０】
仮想Ｉ／Ｏデバイス（ＮＩＣ）では、受信したＴＬＰパケットから、ＩＰパケットやイーサネット（登録商標）フレームを構築し、該ＩＰパケットやイーサネット（登録商標）フレームに含まれる宛先アドレスにしたがって、パケットを送出する。
【０１２１】
図１３のスイッチ１４では、パケットヘッダを参照し、ＭＡＣアドレスに基づいて、パケットを転送する。
【０１２２】
送信先のＣＰＵ２（図２参照）の仮想Ｉ／Ｏデバイス（ＮＩＣ）では、受信したＩＰパケットやイーサネット（登録商標）フレームを、ＴＬＰパケットのペイロード部に格納し、コンピュータとＩ／Ｏデバイス収容ボックスとの接続にイーサネット（登録商標）を用いた構成（例えばＥｘｐＥｔｈｅｒ等）に対応したヘッダを挿入して、パケットを送出する。
【０１２３】
このようにして、ＣＰＵ２（図２参照）同士の通信を仮想Ｉ／Ｏデバイス（ＮＩＣ）を利用して実現することが可能である。なお、上記実施形態において、コンピュータとＩ／Ｏデバイス収容ボックスとの接続にイーサネット（登録商標）を用いた構成と組み合わせる場合、Ｉ／Ｏインタフェースが使用するＭＡＣアドレスとは異なるＭＡＣアドレスを仮想Ｉ／Ｏデバイス（ＮＩＣ）に割り当てる。
【０１２４】
上記実施形態によれば、Ｉ／Ｏファブリック中のスイッチに対して、Ｉ／Ｏファブリックを構成するノード間の通信をどのように行うか設定することができる。その結果、コンピュータシステムが備えるＩ／Ｏファブリックの構成を柔軟に変更できる。
【０１２５】
本発明によれば、コンピュータにおいて、ＣＰＵとＩ／Ｏデバイスの接続を柔軟に変更するといった用途に適用して好適とされる。
【０１２６】
上記した各形態は、以下のように付記される（ただし、以下に限定されない）。
【０１２７】
（付記１）
ファブリック内のスイッチ装置が、
受信したパケットのヘッダを抽出し前記ヘッダの情報を取得する解析部と、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する決定部と、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
のうちの少なくとも１つを実行する手段を備えた実行部と、
を備えた、ことを特徴とするスイッチ装置。
【０１２８】
（付記２）
前記実行部が、
前記パケットに含まれるリクエストへの応答を実行する手段と、
前記パケットの書き換えを行う手段と、
前記パケットの転送を実行する手段と、
を備え、
前記決定部に対して、パケットの識別子と、パケットに対して実行する操作を示す識別子とを登録する処理と、
前記パケットに含まれるリクエストへの応答を実行する手段に対して、仮想的なＩ／Ｏデバイスの構成を設定する処理と、
前記パケットの書き換えを行う手段に対して、パケットの識別子と、パケットの書き換えを行う領域と、書き換え後の値のうちの少なくとも１つを設定する処理と、
前記パケットの転送を実行する手段に対して、パケットの識別子と、パケットの転送先の識別子とを設定する処理と、
のうちの少なくとも１つを行うスイッチ制御部を備えた、ことを特徴とする付記１に記載のスイッチ装置。
【０１２９】
（付記３）
前記実行部が、仮想的なＩ／Ｏデバイスに対するリクエストに応答して、仮想的なＩ／Ｏデバイスを提供する仮想Ｉ／Ｏデバイス提供手段を備え、
前記仮想Ｉ／Ｏデバイス提供手段は、Ｉ／Ｏファブリックの仕様に基づいたＩ／Ｏデバイス設定情報を保持する第１の記憶手段と、
前記仮想的なＩ／Ｏデバイスに固有のデータを保持する第２の記憶手段と、
を備える、ことを特徴とする付記１又は２に記載のスイッチ装置。
【０１３０】
（付記４）
前記実行部は、前記仮想Ｉ／Ｏデバイス提供手段を用いて、異なるＩ／Ｏファブリック間の通信を行う、ことを特徴とする付記３に記載のスイッチ装置。
【０１３１】
（付記５）
前記実行部が、前記Ｉ／Ｏファブリックに接続された所定のＩ／Ｏデバイスの初期化シーケンスのときに転送されるパケットをキャプチャする手段と、
前記仮想Ｉ／Ｏデバイス提供手段が用いる前記Ｉ／Ｏデバイス固有のデータを生成する手段と、
を備えた、ことを特徴とする付記３又は４に記載のスイッチ装置。
【０１３２】
（付記６）
前記パケットの書き換え、前記ヘッダの情報に基づいてパケットの転送を行うスイッチチップを備え、
前記スイッチチップを制御するコントローラと、
を備えた、ことを特徴とする付記１乃至５のいずれかに記載のスイッチ装置。
【０１３３】
（付記７）
前記実行部は、Ｉ／Ｏファブリック中の少なくとも１つのノードに対して仮想的なＩ／Ｏデバイスを提供するＩ／Ｏデバイスエミュレーション部と、
前記Ｉ／Ｏファブリックの異なるデバイスツリーに対して、仮想的なＩ／Ｏデバイスを提供し、データや制御情報のやりとりを実現する第１のブリッジエミュレーション部と、
前記Ｉ／ＯファブリックのルートコンプレックスとＩ／Ｏデバイス間、及び前記Ｉ／Ｏデバイス間のパケットの転送を実現する第２のブリッジエミュレーション部と、
前記パケットの書き換えを行うパケット書換部と、
前記決定部で決定された前記操作に従って、前記Ｉ／Ｏデバイスエミュレーション部、前記第１のブリッジエミュレーション部、前記第２のブリッジエミュレーション部、前記パケット書換部のいずれかを選択する選択部と、
前記パケットを出力する出力インタフェースと、
を備えている、ことを特徴とする付記１乃至６のいずれかに記載のスイッチ装置。
（付記８）
Ｉ／Ｏファブリックを備え、
Ｉ／Ｏファブリックが、スイッチを備え、
スイッチが、
受信したパケットのヘッダを抽出し前記ヘッダの情報を取得する解析部と、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する決定部と、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
のうちの少なくとも１つを実行する手段を備えた実行部と、
を備えたコンピュータシステム。
【０１３４】
（付記９）
前記スイッチにおいて、
前記実行部が、
前記パケットに含まれるリクエストへの応答を実行する手段と、
前記パケットの書き換えを行う手段と、
前記パケットの転送を実行する手段と、
を備え、
前記決定部に対して、パケットの識別子と、パケットに対して実行する操作を示す識別子とを登録する処理と、
前記パケットに含まれるリクエストへの応答を実行する手段に対して、仮想的なＩ／Ｏデバイスの構成を設定する処理と、
前記パケットの書き換えを行う手段に対して、パケットの識別子と、パケットの書き換えを行う領域と、書き換え後の値のうちの少なくとも１つを設定する処理と、
前記パケットの転送を実行する手段に対して、パケットの識別子と、パケットの転送先の識別子とを設定する処理と、
のうちの少なくとも１つを行うスイッチ制御部を備えた、ことを特徴とする付記８に記載のコンピュータシステム。
【０１３５】
（付記１０）
前記スイッチにおいて、
前記実行部が、仮想的なＩ／Ｏデバイスに対するリクエストに応答して、仮想的なＩ／Ｏデバイスを提供する仮想Ｉ／Ｏデバイス提供手段を備え、
前記仮想Ｉ／Ｏデバイス提供手段は、Ｉ／Ｏファブリックの仕様に基づいたＩ／Ｏデバイス設定情報を保持する第１の記憶手段と、
前記仮想的なＩ／Ｏデバイスに固有のデータを保持する第２の記憶手段と、
を備える、ことを特徴とする付記８又は９に記載のコンピュータシステム。
【０１３６】
（付記１１）
前記スイッチにおいて、
前記実行部は、前記仮想Ｉ／Ｏデバイス提供手段を用いて、異なるＩ／Ｏファブリック間の通信を行う、ことを特徴とする付記１０に記載のコンピュータシステム。
【０１３７】
（付記１２）
前記スイッチにおいて、
前記実行部が、前記Ｉ／Ｏファブリックに接続された所定のＩ／Ｏデバイスの初期化シーケンスのときに転送されるパケットをキャプチャする手段と、
前記仮想Ｉ／Ｏデバイス提供手段が用いる前記Ｉ／Ｏデバイス固有のデータを生成する手段と、
を備えた、ことを特徴とする付記１０又は１１に記載のコンピュータシステム。
【０１３８】
（付記１３）
前記パケットの書き換え、前記ヘッダの情報に基づいてパケットの転送を行うスイッチチップを備え、
前記スイッチチップを制御するコントローラと、
を備えた、ことを特徴とする付記８乃至１２のいずれかに記載のコンピュータシステム。
【０１３９】
（付記１４）
前記実行部は、Ｉ／Ｏファブリック中の少なくとも１つのノードに対して仮想的なＩ／Ｏデバイスを提供するＩ／Ｏデバイスエミュレーション部と、
前記Ｉ／Ｏファブリックの異なるデバイスツリーに対して、仮想的なＩ／Ｏデバイスを提供し、データや制御情報のやりとりを実現する第１のブリッジエミュレーション部と、
前記Ｉ／ＯファブリックのルートコンプレックスとＩ／Ｏデバイス間、及び前記Ｉ／Ｏデバイス間のパケットの転送を実現する第２のブリッジエミュレーション部と、
前記パケットの書き換えを行うパケット書換部と、
前記決定部で決定された前記操作に従って、前記Ｉ／Ｏデバイスエミュレーション部、前記第１のブリッジエミュレーション部、前記第２のブリッジエミュレーション部、前記パケット書換部のいずれかを選択する選択部と、
前記パケットを出力する出力インタフェースと、
を備えている、ことを特徴とする付記８乃至１３のいずれかに記載のコンピュータシステム。
【０１４０】
（付記１５）
ファブリック内のスイッチが、前記ファブリック内を転送されるパケットを受信すると、前記パケットのヘッダを抽出して前記ヘッダの情報を取得し、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定し、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
のうちの少なくとも１つを実行する、コンピュータ構成方法。
【０１４１】
（付記１６）
受信したパケットのヘッダを抽出し前記ヘッダの情報を取得する第１の処理と、
前記ヘッダに含まれるリクエストの種別、要求元、宛先の情報から、前記パケットに対する操作を決定する第２の処理と、
決定された前記操作に従って、
前記パケットに含まれるリクエストへの応答、
前記パケットの書き換え、
前記パケットの転送、
の少なくとも１つを実行する第３の処理と、
を、ファブリック内のスイッチを構成するコンピュータに実行させるプログラム。
【０１４２】
（付記１７）
前記第２の処理に対して、パケットの識別子と、パケットに対して実行する操作を示す識別子とを登録する処理と、
前記パケットに含まれるリクエストへの応答を実行する処理に対して、仮想的なＩ／Ｏデバイスの構成を設定する処理と、
前記パケットの書き換えを行う処理に対して、パケットの識別子と、パケットの書き換えを行う領域と、書き換え後の値のうちの少なくとも１つを設定する処理と、
前記パケットの転送を実行する処理に対して、パケットの識別子と、パケットの転送先の識別子とを設定する処理と、
のうちの少なくとも１つを行う第４の処理を前記コンピュータに実行させる付記１６記載のプログラム。
【０１４３】
（付記１８）
前記第３の処理が、仮想的なＩ／Ｏデバイスに対するリクエストに応答して、仮想的なＩ／Ｏデバイスを提供する仮想Ｉ／Ｏデバイス提供処理を備え、
前記仮想Ｉ／Ｏデバイス提供処理は、第１の記憶手段でＩ／Ｏファブリックの仕様に基づいたＩ／Ｏデバイス設定情報を保持し、
第２の記憶手段で前記仮想的なＩ／Ｏデバイスに固有のデータを保持する付記１６記載のプログラム。
【０１４４】
（付記１９）
前記第３の処理は、前記仮想Ｉ／Ｏデバイス提供処理を用いて、異なるＩ／Ｏファブリック間の通信を行う、付記１８に記載のプログラム。
【０１４５】
（付記２０）
前記第３の処理が、前記Ｉ／Ｏファブリックに接続された所定のＩ／Ｏデバイスの初期化シーケンスのときに転送されるパケットをキャプチャする処理と、
前記仮想Ｉ／Ｏデバイス提供処理が用いる前記Ｉ／Ｏデバイス固有のデータを生成する処理と、を行う、付記１８又は１９に記載のプログラム。
【０１４６】
（付記２１）
前記第３の処理は、Ｉ／Ｏファブリック中の少なくとも１つのノードに対して仮想的なＩ／Ｏデバイスを提供するＩ／Ｏデバイスエミュレーション処理と、
前記Ｉ／Ｏファブリックの異なるデバイスツリーに対して、仮想的なＩ／Ｏデバイスを提供し、データや制御情報のやりとりを実現する第１のブリッジエミュレーション処理と、
前記Ｉ／ＯファブリックのルートコンプレックスとＩ／Ｏデバイス間、及び前記Ｉ／Ｏデバイス間のパケットの転送を実現する第２のブリッジエミュレーション処理、
前記パケットの書き換えを行うパケット書換処理と、
前記第２の処理で決定された前記操作に従って、前記Ｉ／Ｏデバイスエミュレーション部、前記第１のブリッジエミュレーション部、前記第２のブリッジエミュレーション部、前記パケット書換部のいずれかを選択する選択処理と、
前記パケットを出力インタフェースから出力する処理と、を行う、付記１８乃至２０のいずれかに記載のプログラム。
【０１４７】
なお、上記の特許文献、非特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ乃至選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１４８】
１  コンピュータシステム
２  ＣＰＵ
３  メモリ
４  Ｉ／Ｏファブリックインタフェース
５  Ｉ／Ｏデバイス
６  ファブリックスイッチ
７  Ｉ／Ｏファブリック
８  ルートコンプレックス
９  スイッチ
１０  エンドポイント
１１  ＰＣＩ−Ｅｘｐｒｅｓｓ（登録商標）ファブリック
１２  デバイスツリー
１３  管理用リンク
１４  スイッチ
６０  パケット入力部
６２  ヘッダ解析部
６４  アクション決定部
６６  アクション実行部
６８  パケット出力部
７０  スイッチ制御部
８０  スイッチチップ
８２  フォワーディングテーブル
８４  コントロールＣＰＵ
８６  メモリ
８８  マネジメントポート
１００  スイッチ
１０１  解析部
１０２  決定部
１０３  実行部
５２４  メモリアドレス
５２６  リクエスタＩＤ
５２８  ＢＤＦ番号
５３６  タイプ
５３８  フォーマット
６６０  アクション選択部
６６２  ＰＣＩブリッジエミュレーション部
６６４  Ｉ／Ｏデバイスエミュレーション部
６６６  ＣＰＵ間ブリッジエミュレーション部
６６８  パケット書換部
６７０  パケット出力インタフェース
６７２  アクション実行部制御インタフェース
６７４  アクション実行処理部
６６４０  仮想Ｉ／Ｏデバイス管理テーブル
６６４２  仮想Ｉ／Ｏデバイス構成情報管理部
６６４４  構成情報参照部
６６４６  ＢＤＦ番号判定部
６６４８  リクエストタイプ判定部
６６５４  メモリ空間参照部
６６５６  仮想Ｉ／Ｏデバイスメモリ空間管理部
【図１】
2015194534.tif 000003
【図２】
2015194534.tif 000004
【図３】
2015194534.tif 000005
【図４】
2015194534.tif 000006
【図５】
2015194534.tif 000007
【図６】
2015194534.tif 000008
【図７】
2015194534.tif 000009
【図８】
2015194534.tif 000010
【図９】
2015194534.tif 000011
【図１０】
2015194534.tif 000012
【図１１】
2015194534.tif 000013
【図１２】
2015194534.tif 000014
【図１３】
2015194534.tif 000015
【図１４】
2015194534.tif 000016
【国際調査報告】
2015194534.tif 000017
2015194534.tif 000018