(57)【要約】  I/OデバイスのVirtual Function (VF) 602-1〜602-Nが複数のコンピュータ1-1〜1-Nに個別に割り当てられる。アドレススワップテーブル506には、コンピュータ1のアドレス空間であるルートドメインと、I/Oデバイス 6の独自のアドレス空間であるI/Oドメインのマッピング情報が登録されている。マッピングはVF 602-1〜602-Nのそれぞれを単位として設定される。I/Oパケット転送部701は、コンピュータ1-1〜1-NのそれぞれがI/Oデバイス 6の割り当てられたVF 602-1〜602-Nにアクセスする際、パケットヘッダに記載された送信元・宛先アドレスを、アドレススワップテーブル506を参照してスワップする。
2009025381.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピュータと、I/Oデバイスと、前記複数のコンピュータと前記I/Oデバイスとの間に設けられたI/O仮想化デバイスとを有し、
前記I/O仮想化デバイスは、前記I/Oデバイスに独自のアドレス空間を形成し、前記複数のコンピュータのアドレス空間に前記I/Oデバイスのアドレス空間をマッピングするI/Oシステム。
【請求項２】
前記複数のコンピュータは、前記I/O仮想化デバイスとネットワークを介して接続されている請求項１に記載のI/Oシステム。
【請求項３】
複数のコンピュータと、
前記複数のコンピュータに対し、個別に割り当てるメモリ空間と割り込みリソースを保持するI/Oデバイスと、
前記I/Oデバイスに独自のアドレス空間を形成し、前記コンピュータと前記I/Oデバイスとのアクセスに用いられるパケット（I/Oパケット）に対し、前記コンピュータのアドレス空間と前記I/Oデバイスのアドレス空間をスワップするI/O仮想化デバイスと、
を備えたことを特徴とするI/Oシステム。
【請求項４】
前記I/O仮想化デバイスは、
前記I/Oデバイスのアドレス空間と前記複数のコンピュータのアドレス空間の間でI/Oパケットのアドレスをスワップするスワップ部と、
前記I/Oデバイスのアドレス空間と前記複数のコンピュータのアドレス空間の間のスワップ情報を保持する保持部と、
前記I/Oデバイスに独自のアドレス空間を形成するアドレス空間形成部と、
前記コンピュータのコンフィグレーションサイクルにおいて、前記コンピュータのアドレス空間に前記I/Oデバイスのアドレス空間をマッピングするために必要な空間を取得する取得部と、
を備えたことを特徴とする請求項３に記載のI/Oシステム。
【請求項５】
スワップする前記コンピュータのアドレス空間は、前記コンピュータのコンフィグレーションサイクルにおいて、標準に準拠したレジスタを用いて取得することを特徴とする請求項４に記載のI/Oシステム。
【請求項６】
前記アドレス空間形成部は、
前記I/Oデバイスを共有するコンピュータが前記I/Oデバイスのコンフィグレーションサイクルを開始する前に、共有される前記I/Oデバイスが個々のコンピュータに割り当てるリソースが必要とするアドレス空間を、前記コンピュータのコンフィグレーションアクセスを擬似して調査し、調査したアドレス空間に基づいて前記I/Oデバイス独自のアドレス空間を前記I/Oデバイスに割り当て、調査したアドレス空間を前記取得部に伝えることを特徴とする請求項５に記載のI/Oシステム。
【請求項７】
前記I/Oデバイスは、PCIエクスプレスで定められた規格に従うことを特徴とする請求項６に記載のI/Oシステム。
【請求項８】
前記I/Oデバイスは、PCIエクスプレスのSingle Root I/O Virtualization (SR-IOV)で定められた規格に従い、個々のコンピュータに割り当てるリソースは、前記I/Oデバイスが備える仮想機能（Virtual Function）を単位とすることを特徴とする請求項７に記載のI/Oシステム。
【請求項９】
複数のコンピュータと、
カプセル化された、前記I/Oデバイスへのアクセスで用いるパケット（I/Oパケット）を、伝達するネットワークと、
複数のコンピュータに対し、個別に割り当てるメモリ空間と割り込みリソースを保持するI/Oデバイスと、
前記コンピュータと前記ネットワークとをブリッジし、前記コンピュータが前記I/Oパケットに対しカプセル化・デカプセル化を行うコンピュータブリッジと、
前記ネットワークと前記I/Oデバイスをブリッジし、I/Oパケットのカプセル化・デカプセル化を行い、I/Oパケットのアドレス情報に対して、前記コンピュータのアドレス空間と、前記I/Oデバイスに独自に形成したアドレス空間とをスワップするI/O仮想化ブリッジと、
前記コンピュータブリッジと前記I/O仮想化ブリッジの接続を管理するマネージャと、
を備えたことを特徴とするI/Oシステム。
【請求項１０】
前記コンピュータブリッジは、
I/Oパケットのカプセル化に必要となる前記I/Oデバイスが接続する前記I/O仮想化ブリッジのネットワークアドレスを検出し、I/Oパケットをカプセル化・デカプセル化して前記コンピュータと前記ネットワークの間を転送する第１の転送部と、
前記I/Oデバイスが接続するI/O仮想化ブリッジのネットワークアドレスを保持する第１の保持部と、
I/Oデバイスが接続するI/O仮想化ブリッジのネットワークアドレスを前記マネージャの命令に従って前記第１の保持部に登録する第１の管理部とを含み、
前記I/O仮想化ブリッジは、
I/Oパケットのカプセル化に必要となる、コンピュータが接続する前記コンピュータブリッジのネットワークアドレスを検出し、I/Oパケットをカプセル化・デカプセル化して前記I/Oデバイスと前記ネットワークの間を転送する第２の転送部と、
前記コンピュータが接続する前記コンピュータブリッジのネットワークアドレスを保持する第２の保持部と、
前記コンピュータが接続する前記コンピュータブリッジのネットワークアドレスを前記マネージャの命令に従い前記第２の保持部に登録する第２の管理部と、
前記I/Oデバイスのアドレス空間と前記複数のコンピュータのアドレス空間の間でI/Oパケットのアドレスをスワップするスワップ部と、
前記I/Oデバイスのアドレス空間と前記複数のコンピュータのアドレス空間の間のスワップ情報を保持する第３の保持部と、
前記I/Oデバイスに独自のアドレス空間を形成するアドレス空間形成部と、
前記コンピュータのコンフィグレーションサイクルにおいて、前記コンピュータのアドレス空間にI/Oデバイスのアドレス空間をマッピングするために必要な空間を取得する取得部と、
を含むことを特徴とする請求項９に記載のI/Oシステム。
【請求項１１】
スワップする前記コンピュータのアドレス空間は、前記コンピュータのコンフィグレーションサイクルにおいて、標準に準拠したレジスタを用いて取得することを特徴とする請求項１０に記載のI/Oシステム。
【請求項１２】
前記アドレス空間形成部は、
前記I/Oデバイスを共有するコンピュータが前記I/Oデバイスのコンフィグレーションサイクルを開始する前に、共有されるI/Oデバイスが個々のコンピュータに割り当てるリソースが必要とするアドレス空間を、コンピュータのコンフィグレーションアクセスを擬似して調査し、調査したアドレス空間に基づいてI/Oデバイス独自のアドレス空間をI/Oデバイスに割り当て、調査したアドレス空間を前記取得部に伝えることを特徴とする請求項１１に記載のI/Oシステム。
【請求項１３】
前記I/Oデバイスは、PCIエクスプレスで定められた規格に従うことを特徴とする請求項１２に記載のI/Oシステム。
【請求項１４】
前記コンピュータブリッジは、上流PCI-PCIブリッジをさらに含み、
前記I/O仮想化ブリッジは、下流PCI-PCIブリッジをさらに含み、
前記ネットワークに接続された少なくとも1つのI/Oデバイスを、同じネットワークに接続された複数のコンピュータ間で共有することを特徴とする請求項１３に記載のI/Oシステム。
【請求項１５】
前記I/Oデバイスは、PCIエクスプレスのSingle Root I/O Virtualizationで定められた規格に従い、個々のコンピュータに割り当てるリソースは、I/Oデバイスが備える仮想機能（Virtual Function）を単位とすることを特徴とする請求項１３又は１４に記載のI/Oシステム。
【請求項１６】
I/Oデバイスに独自のアドレス空間を形成し、複数のコンピュータのアドレス空間に前記I/Oデバイスのアドレス空間をマッピングすることで、前記複数のコンピュータ間で前記I/Oデバイスを共有することを特徴とするI/O制御方法。
【請求項１７】
前記I/Oデバイスは、該複数のコンピュータとネットワークを介して接続されていることを特徴とする請求項１６に記載のI/O制御方法。
【請求項１８】
複数のコンピュータと、前記複数のコンピュータに対して設けられたI/Oデバイスと、を備えたI/OシステムのI/O制御方法であって、
前記コンピュータと前記I/Oデバイスとのアクセスに用いられるパケット（I/Oパケット）に対し、前記コンピュータのアドレス空間と前記I/Oデバイスのアドレス空間をスワップし、
前記複数のコンピュータに対し、前記I/Oデバイスのメモリ空間と割り込みリソースを個別に割り当てることを特徴とするI/O制御方法。
【請求項１９】
前記スワップするコンピュータのアドレス空間は、コンピュータのコンフィグレーションサイクルにおいて、標準に準拠したレジスタを用いて取得することを特徴とする請求項１８に記載のI/O制御方法。
【請求項２０】
前記I/Oデバイスに独自に形成されたアドレス空間は、前記I/Oデバイスを共有するコンピュータが前記I/Oデバイスのコンフィグレーションサイクルを開始する前に、共有される前記I/Oデバイスの個々のコンピュータに割り当てるリソースが必要とするアドレス空間を前記コンピュータのコンフィグレーションアクセスを擬似して調査し、調査したアドレス空間に基づいて前記I/Oデバイス独自のアドレス空間を前記I/Oデバイスに割り当てることにより形成することを特徴とする請求項１９に記載のI/O制御方法。
【請求項２１】
前記I/Oデバイスへのアクセス方法は、PCIエクスプレスで定められた規格に従うことを特徴とする請求項２０に記載のI/O制御方法。
【請求項２２】
前記I/Oデバイスは、PCIエクスプレスのSingle Root I/O Virtualizationで定められた規格に従い、個々のコンピュータに割り当てるリソースは、I/Oデバイスが備える仮想機能（Virtual Function）を単位とすることを特徴とする請求項２１に記載のI/O制御方法。
【請求項２３】
ネットワークにより接続された複数のコンピュータとI/Oデバイスの間で、前記コンピュータが前記I/Oデバイスへのアクセスで用いるパケット(I/Oパケット)をカプセル化・デカプセル化によりトンネリングし、
トンネリングにより接続される前記複数のコンピュータと前記I/Oデバイスの組み合わせを設定により変更し、
I/Oパケットのアドレス情報において前記コンピュータのアドレス空間と前記I/Oデバイスのアドレス空間をスワップし、
前記複数のコンピュータに対し、前記I/Oデバイスのメモリ空間と割り込みリソースを個別に割り当てることを特徴とするI/O制御方法。
【請求項２４】
前記スワップする前記コンピュータのアドレス空間は、前記コンピュータのコンフィグレーションサイクルにおいて、標準に準拠したレジスタを用いて取得することを特徴とする請求項２３に記載のI/O制御方法。
【請求項２５】
前記I/Oデバイスに独自に形成されたアドレス空間は、
前記I/Oデバイスを共有するコンピュータが前記I/Oデバイスのコンフィグレーションサイクルを開始する前に、共有される前記I/Oデバイスの個々のコンピュータに割り当てるリソースが必要とするアドレス空間をコンピュータのコンフィグレーションアクセスを擬似して調査し、調査したアドレス空間に基づいて前記I/Oデバイス独自のアドレス空間を前記I/Oデバイスに割り当てることにより形成することを特徴とする請求項２４に記載のI/O制御方法。
【請求項２６】
前記I/Oデバイスへのアクセス方法は、PCIエクスプレスで定められた規格に従って行うことを特徴とする請求項２５に記載のI/O制御方法。
【請求項２７】
前記コンピュータと前記I/Oデバイスの間のネットワークのトンネリングは、前記コンピュータ上のソフトウェアに対し、PCIエクスプレススイッチが前記コンピュータと前記I/Oデバイスの間に一段挿入される構成を取り、ネットワークに接続された少なくとも1つの前記I/Oデバイスを、前記ネットワークに接続された複数のコンピュータ間で共有することを特徴とする請求項２６に記載のI/O制御方法。
【請求項２８】
前記I/Oデバイスは、PCIエクスプレスのSingle Root I/O Virtualizationで定められた規格に従い、個々のコンピュータに割り当てるリソースは、前記I/Oデバイスが備える仮想機能（Virtual Function）を単位とすることを特徴とする請求項２６又は２７に記載のI/O制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はI/OシステムおよびI/O制御方法に関し、特にI/Oデバイスを複数のコンピュータ間で共有できるI/OシステムおよびI/O制御方法に関する。本願は、２００７年８月２３日に出願された特願２００７−２１７４０３号に基づき、優先権の利益を主張するものである。そして、特願２００７−２１７４０３号の内容は本願の明細書の内容に含まれる。
【背景技術】
【０００２】
この種のI/Oシステムは、例えば非特許文献1に示されるように、単一コンピュータの内部でI/Oデバイス（Input and Output device）を接続し、コンピュータがI/Oデバイスを使用するために用いられている。図１に示すように、このI/Oシステムは例えばPCIエクスプレス(登録商標、以下PCIエクスプレスをPCIeと記す)を用いており、CPU 101にPCIeバス13-0とメモリバス12とをブリッジ(bridge)するルートコンプレックス102と、PCIeバス13-0のファンアウト(fan-out)を行うPCIeスイッチ10と、PCIeスイッチ10とPCIeバス13-1〜13-Nを介して接続されるI/Oデバイス 11-1〜11-N（Nは２以上の自然数）とを含む。PCIeでは、ルートコンプレックス102側を上流、I/Oデバイス 11-1〜11-N側を下流と呼ぶ。【０００３】
PCIeスイッチ10は上流PCI-PCIブリッジ801と下流PCI-PCIブリッジ902-1〜902-Nとを含む。【０００４】
上流PCI-PCIブリッジ801と下流PCI-PCIブリッジ902-1〜902-Nは、それぞれコンフィグレーションレジスタ(CFG REG) 8011とコンフィグレーションレジスタ(CFG REG) 9021-1〜9021-Nとを備えている。CFG REG 8011とCFG REG 9021-1〜9021-Nは、それぞれブリッジ801、902-1〜902-Nより下流に接続するデバイスに割り当てられているアドレス空間の情報を保持する。具体的には、PCIeではアドレスとしてバス番号、デバイス番号、ファンクション番号の組からなるID番号と、メモリ空間を用いるが、CFG REG 8011と9021-1〜9021-Nとは、それぞれブリッジ801、902-1〜902-Nより下流に割り当てられたバス番号の下限値と上限値と、メモリ空間の下限値と上限値を保持する。【０００５】
I/Oデバイス 11-1〜11-Nは、図２に示すようにI/Oデバイス 11-1〜11-Nが接続されているコンピュータの物理メモリ空間 14にマッピングされている。図２ではI/Oデバイス 11-1〜11-Nがそれぞれ、物理メモリ空間１４におけるI/Oデバイス 11-1のマップ1401-1からI/Oデバイス 11-Nのマップ1401-Nにマッピングされている。【０００６】
このような構成を有するI/Oシステムは次のように動作する。【０００７】
CPU 101上で動作するソフトウェアが、I/Oデバイス 11-1〜11-Nのうちの例えばI/Oデバイス 11-1に対しアクセスを行う場合、CPU 101がルートコンプレックス102に命令を発行する。ルートコンプレックス102は、PCIeで標準化されているプロトコルに従い、TLP (Transaction Layer Packet)を作成し発行する。TLPのヘッダの宛先には、アクセスするI/Oデバイス 11-1に割り当てられたID番号か、I/Oデバイス 11-1がマップされているメモリ空間が記載されている。PCIeスイッチ 10はTLPを受信し、ヘッダに記載されたアドレスとCFG REG 8011が保持する情報を比較する。ここで、TLPの宛先が上流PCI-PCIブリッジ801の下流に接続している場合、続いてCFG REG 9021-1が保持する情報と比較し、TLPの宛先であるI/Oデバイス 11-1にTLPを送信する。【０００８】
一方、I/Oデバイス 11-1〜11-N のうち例えばI/Oデバイス 11-1からCPU 101に対しTLPを発行する場合、本手順と逆の手順が行われる。そのとき、I/Oデバイス 11-1からTLPを受信したPCIeスイッチ10は、CFG REG 9021-1を参照し、TLPの宛先がTLPを受信した下流PCI-PCIブリッジ902-1の下流に接続するデバイスに該当しないことを判断し、続いてCFG REG 8011が保持する情報と比較し、この場合もTLPの宛先が上流PCI-PCIブリッジ801の下流に接続するデバイスに該当しないことを判断し、TLPをルートコンプレックス102に転送する。以上よりTLPはCPU 101に送信される。【０００９】
また、DMA (Direct Memory Access)では、I/Oデバイス 11-1〜11-N のうち例えばI/Oデバイス 11-1がコンピュータのメモリ103に対し直接データの書き込みや読み取りを行う。この場合、例えば、I/Oデバイス 11-1はメモリ103がマッピングされたメモリのアドレスを宛先としてTLPを作成し、メモリ103にアクセスする。このとき、I/OシステムにおけるTLPの転送手順はI/Oデバイス 11-1がCPU 101にアクセスを行う場合の手順と同じである。
【非特許文献１】PCI-SIG, “PCI Express Base Specification Revision 2.0”, 2006年12月20日, pp. 35
【発明の開示】
【発明が解決しようとする課題】
【００１０】
第1の課題は、I/Oデバイスを複数のコンピュータ間で共有できないということである。その理由は、従来のI/Oシステムでは、I/Oデバイスを単一のコンピュータのアドレス空間内で占有して用いることを想定して設計を行っているためである。【００１１】
第2の課題は、I/Oデバイスを複数のコンピュータ間で共有するためには、オペレーティングシステムやデバイスドライバの変更が必要となるということである。その理由は、第1の課題と同様に、従来のI/Oシステムでは、I/Oデバイスを単一のコンピュータのアドレス空間内で占有して用いることを想定して設計を行っているためである。【００１２】
［発明の目的］
本発明の典型的な第１の目的は、I/Oデバイスを複数のコンピュータ間で共有することができるI/Oシステムを提供することにある。【００１３】
本発明の典型的な第２の目的は、従来のオペレーティングシステムやデバイスドライバの変更を行うことなくI/Oデバイスを複数のコンピュータ間で共有できるI/Oシステムを提供することにある。
【課題を解決するための手段】
【００１４】
本発明に係る典型的な第１のI/Oシステムは、複数のコンピュータと、I/Oデバイスと、前記複数のコンピュータと前記I/Oデバイスとの間に設けられたI/O仮想化デバイスとを有し、
前記I/O仮想化デバイスは、前記I/Oデバイスに独自のアドレス空間を形成し、前記複数のコンピュータのアドレス空間に前記I/Oデバイスのアドレス空間をマッピングすることを特徴とする。【００１５】
また本発明に係る典型的な第２のI/Oシステムは、複数のコンピュータと、
前記複数のコンピュータに対し、個別に割り当てるメモリ空間と割り込みリソースを保持するI/Oデバイスと、
前記I/Oデバイスに独自のアドレス空間を形成し、前記コンピュータと前記I/Oデバイスとのアクセスに用いられるパケット（I/Oパケット）に対し、前記コンピュータのアドレス空間と前記I/Oデバイスのアドレス空間をスワップするI/O仮想化デバイスと、
を備えたことを特徴とする。【００１６】
また本発明に係る典型的な第３のI/Oシステムは、複数のコンピュータと、
カプセル化された、前記I/Oデバイスへのアクセスで用いるパケット（I/Oパケット）を、伝達するネットワークと、
複数のコンピュータに対し、個別に割り当てるメモリ空間と割り込みリソースを保持するI/Oデバイスと、
前記コンピュータと前記ネットワークとをブリッジし、前記コンピュータが前記I/Oパケットに対しカプセル化・デカプセル化を行うコンピュータブリッジと、
前記ネットワークと前記I/Oデバイスをブリッジし、I/Oパケットのカプセル化・デカプセル化を行い、I/Oパケットのアドレス情報に対して、前記コンピュータのアドレス空間と、前記I/Oデバイスに独自に形成したアドレス空間とをスワップするI/O仮想化ブリッジと、
前記コンピュータブリッジと前記I/O仮想化ブリッジの接続を管理するマネージャと、
を備えたことを特徴とする。【００１７】
本発明に係る典型的な第１のI/O制御方法は、I/Oデバイスに独自のアドレス空間を形成し、複数のコンピュータのアドレス空間に前記I/Oデバイスのアドレス空間をマッピングすることで、前記複数のコンピュータ間で前記I/Oデバイスを共有することを特徴とする。【００１８】
また本発明に係る典型的な第２のI/O制御方法は、複数のコンピュータと、前記複数のコンピュータに対して設けられたI/Oデバイスと、を備えたI/OシステムのI/O制御方法であって、
前記コンピュータと前記I/Oデバイスとのアクセスに用いられるパケット(I/Oパケット)に対し、前記コンピュータのアドレス空間と前記I/Oデバイスのアドレス空間をスワップし、
前記複数のコンピュータに対し、前記I/Oデバイスのメモリ空間と割り込みリソースを個別に割り当てることを特徴とする。【００１９】
また本発明に係る典型的な第３のI/O制御方法は、ネットワークにより接続された複数のコンピュータとI/Oデバイスの間で、前記コンピュータが前記I/Oデバイスへのアクセスで用いるパケット(I/Oパケット)をカプセル化・デカプセル化によりトンネリングし、
トンネリングにより接続される前記複数のコンピュータと前記I/Oデバイスの組み合わせを設定により変更し、
I/Oパケットのアドレス情報において前記コンピュータのアドレス空間と前記I/Oデバイスのアドレス空間をスワップし、
前記複数のコンピュータに対し、前記I/Oデバイスのメモリ空間と割り込みリソースを個別に割り当てることを特徴とする。
【発明の効果】
【００２０】
本発明の第１の効果は、I/Oデバイスを複数のコンピュータ間で共有できることである。【００２１】
本発明の第２の効果は、従来のオペレーティングシステムやデバイスドライバに変更を行うことなく、I/Oデバイスを複数のコンピュータ間で共有できることである。
【図面の簡単な説明】
【００２２】
【図１】関連技術の構成を示すブロック図である。
【図２】関連技術を説明するための図である。
【図３】本発明の第１の実施の形態の構成を示すブロック図である。
【図４】本発明の第１の実施の形態を説明するための図である。
【図５】本発明の第１の実施の形態を説明するための図である。
【図６】本発明の第１の実施の形態の動作を示す流れ図である。
【図７】本発明の第１の実施の形態の動作を示す流れ図である。
【図８】本発明の第１の実施の形態の動作を示す流れ図である。
【図９】本発明の第１の実施の形態の動作を示す流れ図である。
【図１０】本発明の第２の実施の形態の全体構成を示すブロック図である。
【図１１】本発明の第２の実施の形態の構成の一部を示すブロック図である。
【図１２】本発明の第２の実施の形態の構成の他の一部を示すブロック図である。
【図１３】本発明の第２の実施の形態の動作を示す流れ図である。
【図１４】本発明の第２の実施の形態の動作を示す流れ図である。
【図１５】本発明の第２の実施の形態の動作を示す流れ図である。
【図１６】本発明の第３の実施の形態の全体構成を示すブロック図である。
【図１７】本発明の第３の実施の形態の構成の一部を示すブロック図である。
【図１８】本発明の第３の実施の形態の構成の他の一部を示すブロック図であ
【符号の説明】
【００２３】
1 コンピュータ
2 コンピュータブリッジ
3 ネットワーク
4 システムマネージャ
5 I/O仮想化ブリッジ
6 SR-IOV対応I/Oデバイス
7 I/O仮想化モジュール
8 コンピュータブリッジ
9 I/O仮想化ブリッジ
10 PCIeスイッチ
11 I/Oデバイス
101 CPU
102 ルートコンプレックス
103 メモリ
201 ネットワーク転送部
202 コネクション管理部
203 カプセル化テーブル
501 ネットワーク転送部
502 I/Oパケット転送部
503 仮想コンフィグレーションレジスタ (CFG REG)
504 コネクション管理部
505 カプセル化テーブル
506 アドレススワップテーブル
507 I/Oコンフィグレーション部
601 Physical Function (PF)
602 Virtual Function (VF)
701 パケット転送部
801 上流PCI-PCIブリッジ
901 ネットワーク転送部
902 下流PCI-PCIブリッジ
903 I/Oパケット転送部
【発明を実施するための最良の形態】
【００２４】
次に、本発明を実施するための典型的な実施形態（exemplary embodiment）について、図面を参照して詳細に説明する。【００２５】
［第１実施形態］
図３は、本発明を実施するための第1の実施の形態の構成を示すブロック図である。【００２６】
図３は、本実施形態のI/Oシステムで共有するI/OデバイスとしてPCIエクスプレス(登録商標、以下PCIエクスプレスをPCIeと記す)に準拠したI/Oデバイスを用いる場合を示している。本実施形態のI/Oシステムは、複数のコンピュータ1-1〜1-N（Nは２以上の自然数）と、複数のコンピュータ1-1〜1-Nから同時に共有されるSingle Root I/O Virtualization (SR-IOV)対応のI/Oデバイス 6と、複数のコンピュータ1-1〜1-NとPCIeバスで接続されるI/O仮想化モジュール7とを含む。I/O仮想化モジュール7は、I/Oデバイス 6を複数のコンピュータ1-1〜1-Nで共有するためにI/Oデバイス 6に独自のアドレス空間を作成する。I/O仮想化モジュール7はI/O仮想化デバイスとなる。【００２７】
コンピュータ1-1〜1-Nは、CPU101-1〜101-Nとルートコンプレックス102-1〜102-Nとメモリ103-1〜103-Nとを備えている。例えば、コンピュータ1-1はCPU 101-1と、ルートコンプレックス102-1と、メモリ103-1とを備えている。また、コンピュータ1-1〜1-N はI/O仮想化モジュール7とPCIeバスで接続されている。【００２８】
I/Oデバイス 6は、SR-IOV対応のI/Oデバイスである。このようなI/Oデバイスでは、単一コンピュータ内で複数の仮想マシンがI/Oデバイスを共有する際、共有に関するオーバヘッドが緩和されるように設計が行われている。I/Oデバイス 6はI/Oデバイス 6の全体の設定を受け付けるPhysical Function (PF) 601と、仮想マシンに個別に割り当てるリソースを表すVirtual Function (仮想機能；以下VFと記す) 602-1〜602-Nとを含む。各々のPF 601とVF 602-1〜602-Nとは、ID番号を構成するファンクション番号で区別される。PF 601とVF 602-1〜602-Nとは、それぞれPCIeに準拠したコンフィグレーションレジスタ(CFG REG)であるPF CFG REG 6011と、VF CFG REG 6021-1〜6021-Nとを含む。仮想マシンがI/Oデバイス 6を単一コンピュータ内で共有する場合、VF 602-1〜602-Nを個々の仮想マシンに割り当てる。これにより、VF 602-1〜602-Nが仮想マシンのメモリに直接マップされ、I/Oデバイス 6からの割り込みもVF 602-1〜602-NのID番号を識別子として仮想マシン毎に個別に行われる。本実施形態では図３に示すように、VF 602-1〜602-Nを複数のコンピュータ1-1〜1-Nに個別に割り当てることにより、コンピュータ1-1〜1-Nに対しVF 602-1〜602-Nを従来のI/Oデバイスが備えるファンクションと同等に運用可能とすることで、I/Oデバイス 6を複数コンピュータ1-1〜1-N間で共有する。【００２９】
I/O仮想化モジュール7は、I/Oデバイス 6を複数のコンピュータ1-1〜1-Nで共有するために、I/Oデバイス 6 に独自の単一アドレス空間を形成し、個々のコンピュータ1-1〜1-Nのアドレス空間に、I/Oデバイス 6が備えるVF 602-1〜602-N を単位としてマッピングする。どのVF 602-1〜602-Nをどのコンピュータ1-1〜1-Nにマッピングするかはコンピュータ1-1〜1-NとI/O仮想化モジュール7の結線で決まる。以下では、I/Oデバイス 6に作成した独自のアドレス空間をI/Oドメイン、コンピュータ1-1〜1-Nの個々のアドレス空間をルートドメインと呼ぶことで区別する。【００３０】
I/O仮想化モジュール7は、Transaction Layer Packet (TLP)（I/Oパケットとなる）のヘッダが保持する宛先・送信元アドレスをスワップして転送するI/Oパケット転送部701と、ルートドメインとI/OドメインのID番号とメモリ空間に関するマッピング情報を保持するアドレススワップテーブル506と、あらかじめI/Oデバイス 6をコンピュータ1-1〜1-Nのコンフィグレーションサイクルが開始する前に、I/Oデバイス 6をコンフィグレーションするI/Oコンフィグレーション部507と、コンピュータ1-1〜1-Nのコンフィグレーションサイクルにおいて、ルートドメインにVF 602-1〜602-Nをマッピングするために必要なアドレス空間を、標準に準拠したレジスタを用いて取得する仮想CFG REG 503-1〜503-Nとを含む。I/Oパケット転送部701はスワップ部、アドレススワップテーブル506はスワップ情報を保持する保持部、I/Oコンフィグレーション部507はアドレス空間形成部、仮想CFG REG 503-1〜503-Nは取得部を構成する。【００３１】
図４に示すように、コンピュータ1-1〜1-Nはそれぞれルートドメイン104-1〜104-Nを保持する。ルートドメイン104-1〜104-Nはバス番号、デバイス番号、ファンクション番号の組であるID番号のリソースを保持するID番号空間1041-1〜1041-Nと、物理メモリ空間1042-1〜1042-Nとから構成される。【００３２】
また図４に示すように、I/O仮想化モジュール7は、I/Oデバイス 6に独自のアドレス空間であるI/Oドメイン508を作成し、I/Oドメイン508を構成する単一のID番号空間5081と物理メモリ空間5082とをI/Oデバイス 6に割り振り、割り振ったID番号とメモリ空間をルートドメイン104-1〜104-NにVF 602-1〜602-Nを単位としてマッピングする。図４では、コンピュータ1-1の場合、ID番号空間5081においてコンピュータ1-1のマップ50811-1がI/Oデバイス 6のマップ10411-1に、物理メモリ空間5082においてコンピュータ1-1のマップ50821-1がI/Oデバイス 6のマップ10421-1にマッピングされている。コンピュータ1-2の場合、ID番号空間5081においてコンピュータ1-2のマップ50811-2がI/Oデバイス 6のマップ10411-2に、物理メモリ空間5082においてコンピュータ1-2のマップ50821-2がI/Oデバイス 6のマップ10421-2にマッピングされている。コンピュータ1-Nの場合、ID番号空間5081においてコンピュータ1-Nのマップ50811-NがI/Oデバイス 6のマップ10411-Nに、物理メモリ空間5082においてコンピュータ1-Nのマップ50821-NがI/Oデバイス 6のマップ10421-Nにマッピングされている。【００３３】
I/Oパケット転送部701は、割り当てられたVF 602-1〜602-Nに対応するコンピュータ1-1〜1-Nが発行したI/Oデバイス 6あてのTLPを受信し、TLPを送信元のコンピュータ1-1〜1-Nに対応する仮想CFG REG 503-1〜503-NかI/Oデバイス 6に転送する。例えば、I/Oパケット転送部701は、割り当てられたVF 602-1に対応するコンピュータ1-1が発行したI/Oデバイス 6あてのTLPを受信し、TLPを送信元のコンピュータ1-1に対応する仮想CFG REG 503-1かI/Oデバイス 6に転送する。【００３４】
仮想CFG REG 503-1〜503-Nに転送するTLPはコンフィグレーションアクセスに関するTLPの一部であり、残り全てのTLPはI/Oデバイス 6に転送する。TLPをI/Oデバイス 6に転送する場合、アドレススワップテーブル506から、送信元のコンピュータ1-1〜1-Nに対応するID番号とメモリアドレスのスワップ情報を検出し、得られた情報を用いてTLPのヘッダが保持する宛先・送信元アドレスをスワップしてI/Oデバイス 6に転送する。一方、仮想CFG REG 503-1〜503-NにTLPを転送する場合、アドレスのスワップは行わない。【００３５】
また、I/Oパケット転送部701は、I/Oデバイス 6からコンピュータ1-1〜1-NあてのTLPを受信し、TLPを発行したI/Oデバイス 6のVF 602-1〜602-Nのファンクション番号からVF 602-1〜602-Nが割り当てられている宛先のコンピュータ1-1〜1-Nのいずれかをアドレススワップテーブル506を用いて検出し、また、宛先となるコンピュータ1-1〜1-Nのいずれかに対応するID番号のスワップ情報を検出し、得られた情報を用いてTLPのヘッダが保持する宛先・送信元アドレスをスワップして宛先となるコンピュータ1-1〜1-Nのいずれかに送信する。例えば宛先のコンピュータがコンピュータ1-1である場合には、TLPをコンピュータ1-1に送信する。このとき、I/Oデバイスが発行するTLPの宛先ヘッダがメモリアドレスを保持している場合、スワップは行わない。これはコンピュータ1-1〜1-Nが、図示しないI/Oデバイス 6のDirect Memory Access (DMA)コントローラに渡す情報が、コンピュータ1-1〜1-Nのメモリアドレスの値を直接指定するからである。さらに、I/Oパケット転送部701は、コンピュータ1-1〜1-Nの仮想CFG REG 503-1〜503-Nに対するコンフィグレーションアクセスの応答TLPを仮想CFG REG 503-1〜503-Nから受信し、コンピュータ1-1〜1-Nに送信する。【００３６】
アドレススワップテーブル506は、図５に示す1つのターゲットコンピュータ検索テーブル5061と、コンピュータ1-1〜１-Nの数と同じ数のルートドメインマッピングテーブル5062-1〜5062-Nとから構成され、I/Oパケット転送部701に対しルートドメイン104-1〜104-NとI/Oドメイン508のマッピング情報を提供する。なお、図５ではルートドメインマッピングテーブル5062-1のみの内容が示されている。【００３７】
ターゲットコンピュータ検索テーブル5061は、コンピュータ1-1〜1-NにTLPを発行したVF 602-1〜602-NのI/Oドメイン508におけるファンクション番号(FVFnI; nはVF 602-1〜602-Nを区別する識別子であり、１≦ｎ≦Ｎである)から宛先のコンピュータ1-1〜1-Nを識別するテーブルである。ルートドメインマッピングテーブル5062-1〜5062-Nは、コンピュータ1-1〜1-Nに対して個々に用意され、ID番号とメモリ空間のマッピング情報を提供する。図５ではルートドメイン104-1〜104-Nにおけるルートコンプレックス102-1〜102-N、I/Oデバイス 6におけるVF 602-1〜602-N のID番号(バス番号、デバイス番号、ファンクション番号)がそれぞれ(BRnR, DRnR, FRnR)、(BVFnR, DVFnR, FVFnR)であり、それぞれI/Oドメイン508の(BRnI, DRnI, FRnI)、(BVFnI, DVFnI, FVFnI)にマッピングされている。一方、ルートドメイン104にメモリマップされたI/Oデバイス 6のマップ10421の下限値がMem下限VFnR、上限値がMem上限VFnRであり、I/Oドメイン508のMem下限VFnI、Mem上限VFnIがマッピングされている。【００３８】
I/Oコンフィグレーション部507は、コンピュータ1-1〜1-Nのコンフィグレーションサイクルが開始される前に、コンピュータ1-1〜1-Nのコンフィグレーションアクセスを擬似することにより、I/Oデバイス 6のコンフィグレーションを行う。I/Oコンフィグレーション部507は、PF CFG REG 6011より、個々のVF 602-1〜602-Nが要求するメモリ空間を読み取り、仮想CFG REG 503-1〜503-Nに反映する。また、I/Oコンフィグレーション部507はPF CFG REG 6011に対し、VF 602-1〜602-Nに割り当てるI/Oドメイン508のID番号と物理メモリ空間を設定し、設定した情報をアドレススワップテーブル506に登録する。また、I/Oコンフィグレーション部507は、PF CFG REG 6011とVF CFG REG 6021-1〜6021-Nに設定情報を書き込む。【００３９】
仮想CFG REG 503-1〜503-Nは、コンピュータ1-1〜1-Nのコンフィグレーションサイクルにおいて、ルートドメインにVF 602-1〜602-Nをマッピングするために必要なアドレス空間を、標準に準拠したレジスタを用いて取得する。図３では、仮想CFG REG 1 503-1〜仮想CFG REG N 503-NがVF 1 602-1〜VF N 602-Nに対応し、VF 602-1〜602-Nが割り当てられるコンピュータからマッピングに必要なアドレス空間を取得する。具体的には、仮想CFG REG 503-1〜503-Nは、対応するコンピュータ1-1〜1-NからVF 602-1〜602-Nが要求するメモリ空間を問い合わせるコンフィグレーションTLPを受信し、メモリ空間の情報を提供し、コンピュータ1-1〜1-NがVF 602-1〜602-Nに割り当てるID番号とメモリ空間を通知するコンフィグレーションTLPを受信し、情報を保持する。また、TLPの送信元であるルートコンプレックス102のID番号も記録する。これらの保持されたID番号とメモリ空間がルートドメイン104-1〜104-Nにおけるルートコンプレックス102と、VF 602-1〜602-NのID番号と、VF 602-1〜602-Nに割り当てられたメモリ空間を示し、その値はアドレススワップテーブル506に登録される。【００４０】
以上説明したように、本実施形態のI/Oシステムは、I/OドメインのID番号とメモリ空間をI/Oデバイスに割り振るI/Oコンフィグレーション部(図３の507)と、コンピュータにI/Oデバイスが備えるVirtual Function (VF)が必要とするアドレス空間をPCIeの標準に準拠したコンフィグレーションレジスタを用いて要求する仮想コンフィグレーションレジスタ(図３の503-1〜503-N)と、複数のコンピュータのルートドメインのID番号とメモリ空間にI/OドメインのID番号とメモリ空間をVFを単位としてマッピングする情報を保持するアドレススワップテーブル(図３の506)と、ルートドメインとI/Oドメインの間でTransaction Layer Packet (TLP)のヘッダが保持するアドレスをスワップするI/Oパケット転送部(図３の701)とを含む。このような構成を採用し、I/Oデバイスに独自のアドレス空間であるI/Oドメインを定義し、コンピュータのアドレス空間であるルートドメインからI/OデバイスのVFをマッピングするために必要なアドレス空間を標準に準拠したレジスタを用いて取得し、I/OドメインのID番号とメモリ空間を、VFを単位として複数のルートドメインのID番号とメモリ空間にマッピングし、複数のコンピュータに単一のI/Oデバイスが備えるVFを個別に割り当てる。こうして、I/Oデバイスを複数のコンピュータ間で共有できる。【００４１】
次に、本発明を実施するための第1の実施の形態の動作について説明する。【００４２】
始めに、図３、図５、図６を用いて、割り当てられたI/Oデバイス 6のVF 602-1〜602-Nにコンピュータ1-1〜1-NがTLPを発行する場合の動作を述べる。ここでは、I/Oデバイス 6のVF 602-1にコンピュータ1-1がTLPを発行する場合の動作を例にとって説明するが、I/Oデバイス 6のVF 602-2〜602-Nにコンピュータ1-2〜1-NがTLPを発行する場合も同様な動作で行われる。【００４３】
コンピュータ1-1がTLPを発行し(ステップA1)、I/Oパケット転送部701は、発行されたTLPを受信し(ステップE1)、TLPが仮想CFG REG 503-1あてかを判断し(ステップA6)、該当すればTLPヘッダのアドレスをスワップせずにTLPを発行したコンピュータ1-1に対応する仮想CFG REG 503-1にTLPを転送する(ステップA8)。ステップA6の判断は、コンフィグレーションTLPにおいて、アクセスするPCI準拠コンフィグレーションレジスタの種類やオフセットで判断する。ステップA6の判断に該当しないTLPは、TLPを受信したコンピュータ1-1に対応するルートドメインマッピングテーブル5062-1からアドレスのスワップ情報を検出する(ステップA7)。TLPがIDルーティングの場合、TLPの宛先と送信元をそれぞれスワップするためI/Oドメイン508におけるVF 602-1のID番号(BVF1I, DVF1I, FVF1I)と、ルートコンプレックス102-1のID番号(BR1I, DR1I, FR1I)とを検出する。TLPがアドレスルーティングの場合、TLPの宛先メモリアドレスをスワップするためにルートドメイン104-1とI/Oドメイン508におけるVF 602-1のメモリ空間の下限値であるMem下限VF1RとMem下限VF1Iとを検出する。これらの値より、TLPの宛先メモリアドレスをスワップするメモリアドレスは(ルートドメイン104-1における宛先メモリアドレス)-Mem下限VF1R+Mem下限VF1Iと求まる。また、I/Oドメイン508のルートコンプレックス102のID番号も送信元アドレスをスワップするために合わせて検出する。I/Oパケット転送部701は、得られた情報を用いてTLPヘッダのアドレスをスワップし(ステップA9)、TLPをI/Oデバイス 6へ送信する(ステップA10)。【００４４】
次に、図３、図５、図７を用いて、I/Oデバイス 6が備える、コンピュータ1-1〜1-Nに割り当てられたVF 602-1〜602-Nが、対応するコンピュータ1-1〜1-NにTLPを発行する場合の動作を述べる。ここでは、I/Oデバイス 6が備える、コンピュータ1-1に割り当てられたVF 602-1が、対応するコンピュータ1-1にTLPを発行する場合の動作を例にとって説明するが、I/Oデバイス 6が備える、コンピュータ1-2〜1-Nに割り当てられたVF 602-2〜602-Nが、対応するコンピュータ1-2〜1-NにTLPを発行する場合も同様な動作で行われる。【００４５】
VF 602-1がコンピュータ1-1にTLPを発行し(ステップB1)、I/Oパケット転送部701は、受信したTLPの送信元ID番号が保持する、TLPを発行したVF 602-1のファンクション番号を取得し、これを用いてターゲットコンピュータ検索テーブル5061から宛先のコンピュータ1-1を検出する(ステップB2)。続いてI/Oパケット転送部701は、宛先のコンピュータ1-1に対応するルートドメインマッピングテーブル5062-1を用いてアドレスのスワップ情報を検出する(ステップB3)。TLPがIDルーティングの場合、TLPの宛先と送信元をそれぞれスワップする、ルートドメイン104-1におけるルートコンプレックス102-1のID番号(BR1R, DR1R, FR1R)とVF 602-1のID番号(BVF1R, DVF1R, FVF1R)とを検出する。TLPがアドレスルーティングの場合、ルートドメイン104-1におけるVF 602-1のID番号(BVF1R, DVF1R, FVF1R)のみを検出する。次に、I/Oパケット転送部701は、得られた情報を用いてTLPをスワップする(ステップB4)。TLPがIDルーティングの場合、送信先・送信元アドレスの両方をスワップし、TLPがアドレスルーティングの場合、送信元アドレス(VF 602-1のアドレス)のみをスワップする。I/Oパケット転送部701は、アドレスをスワップしたTLPをコンピュータ1-1に送信する(ステップF1)。【００４６】
次に、I/Oデバイス 6を複数のコンピュータ1-1〜1-Nの間で共有するために、I/Oデバイス 6をコンフィグレーション(設定)する際の動作について述べる。I/Oデバイス 6のコンフィグレーションは、割り当てられたVF 602-1〜602-Nに対するコンピュータ1-1〜1-Nのコンフィグレーションサイクルが開始される前に、I/O仮想化モジュール7がI/Oデバイス 6に対して行うコンフィグレーションと、コンピュータ1-1〜1-Nが割り当てられたVF 602-1〜602-Nに対して行うコンフィグレーションの2段階から成る。I/O仮想化モジュール7がI/Oデバイス 6に対して行うコンフィグレーションは、共有されるI/Oデバイスが個々のコンピュータに割り当てるリソースが必要とするアドレス空間を、コンピュータのコンフィグレーションアクセスを擬似して調査し、調査したアドレス空間に基づいてI/Oデバイス独自のアドレス空間をI/Oデバイスに割り当てる動作となる。【００４７】
始めに、I/O仮想化モジュール7が、コンピュータ1-1〜1-Nのコンフィグレーションアクセスを擬似することにより、I/Oデバイス 6に対して行うコンフィグレーションについて図３と図８とを用いて述べる。I/Oコンフィグレーション部507は、PF CFG REG 6011から個々のVF 602-1〜602-Nが要求するメモリ空間の情報を取得する(ステップC1)。続いて、得られた情報に基づき、I/Oドメイン508のID番号とメモリ空間とをPF CFG REG 6011に設定し、VF 602-1〜602-Nに割り当てる(ステップC2)。また、I/Oコンフィグレーション部507は、PF CFG REG 6011に行った設定をアドレススワップテーブル506に登録し(ステップC3)、VF 602-1〜602-Nが対応する仮想CFG REG 503-1〜503-Nに、VF 602-1〜602-Nが要求するアドレス空間を反映する(ステップC4)。その他、I/Oコンフィグレーション部507は、PF CFG REG 6011とVF CFG REG 6021-1〜6021-Nに対し必要な設定を行う(ステップC5)。本設定はI/Oデバイス 6のデバイス制御、リンク制御、省電力モード制御、VF制御などに関する設定である。なおステップC5は必ずしもこの順番で行う必要ではなく、必要に応じてステップC1〜C4の前後各箇所に挿入可能である。【００４８】
次に、I/O仮想化モジュール7によりI/Oデバイス 6のコンフィグレーションが行われた後で、コンピュータ1-1〜1-Nによるコンフィグレーションが、コンピュータ1-1〜1-Nに割り当てられたVF 602-1〜602-Nに対して開始された場合の動作について図３と図９とを用いて述べる。【００４９】
コンピュータ1-1〜1-Nはシステムのブートか、VF 602-1〜602-Nが割り当てられたホットプラグイベントの通知により、VF 602-1〜602-Nのコンフィグレーションを開始する(ステップD3)。コンピュータ1-1〜1-Nは、コンフィグレーションTLPを用いて割り当てられたVF 602-1〜602-Nに対応する仮想CFG REG 503-1〜503-Nから、VF 602-1〜602-Nが要求するメモリ空間を取得し(ステップD4)、得られた情報を元にルートドメイン104-1〜104-NのID番号とメモリ空間を、仮想CFG REG 503-1〜503-Nに設定することでVF 602-1〜602-Nに割り当てる(ステップD5)。また、仮想CFG REG 503-1〜503-Nに登録された値はアドレススワップテーブル506に自動的に反映される(ステップD6)。以上図８と図９とに示した手順によりアドレススワップテーブル506のエントリが完成し、コンピュータ1-1〜1-Nは割り当てられたVF 602-1〜602-Nを、従来のI/Oデバイスにおけるファンクションと同等に使用することができる。【００５０】
次に、本発明を実施するための第1の実施の形態の効果について説明する。【００５１】
本発明の第1の実施の形態では、I/Oデバイスに対し独自のアドレス空間であるI/Oドメインを作成し、ID番号空間とメモリ空間とを割り当てる。続いて複数のコンピュータのルートドメインにおけるID番号空間とメモリ空間に対し、I/Oデバイスが備えるVFを単位としてI/OドメインのID番号空間とメモリ空間をマッピングし、複数のコンピュータに単一のI/Oデバイスが備えるVFを個々に割り当てることで、I/Oデバイスを複数のコンピュータ間で共有することができる。【００５２】
［第２実施形態］
次に、本発明を実施するための第2の実施の形態について図面を参照して詳細に説明する。【００５３】
図１０は、本発明の第2の実施の形態の全体構成を示すブロック図である。図１１は本発明の第２の実施の形態の構成の一部を示すブロック図である。図１２は本発明の第２の実施の形態の構成の他の一部を示すブロック図である。図１１では、コンピュータとコンピュータブリッジの詳細が示され、図１２ではＩ／Ｏ仮想化ブリッジとＳＲ−ＩＶＯ対応Ｉ／Ｏデバイスの詳細が示される。【００５４】
本実施形態では、ネットワークにより接続された複数のコンピュータとI/Oデバイスの間で、コンピュータがI/Oデバイスへのアクセスで用いるパケット(I/Oパケット)をカプセル化・デカプセル化によりトンネリングし、トンネリングにより接続される複数のコンピュータとI/Oデバイスの組み合わせを設定により変更し、I/Oパケットのアドレス情報においてコンピュータのアドレス空間とI/Oデバイスのアドレス空間をスワップし、複数のコンピュータに対し、I/Oデバイスのメモリ空間と割り込みリソースを個別に割り当てる。【００５５】
図１０〜図１２を参照すると、本実施の形態は図３に示した第1の実施の形態と比較して、複数のコンピュータ1-1〜1-NとI/Oデバイス 6を相互に接続するネットワーク3と、コンピュータ1-1〜1-Nとネットワーク3をブリッジするコンピュータブリッジ2-1〜2-Nと、I/Oデバイス 6のコンピュータ1-1〜1-Nへの割り当てを管理するシステムマネージャ4とをさらに含む。また、本実施の形態は第1の実施の形態のI/O仮想化モジュール7が、ネットワーク3とI/Oデバイス 6をブリッジするI/O仮想化ブリッジ5に置き換えられている。【００５６】
コンピュータブリッジ2-1〜２-Nは、TLPをネットワーク3で定められたパケットにカプセル化して送受信を行うネットワーク転送部201-1〜201-Nと、システムマネージャ4と通信し、I/O仮想化ブリッジ 5とのコネクションを管理するコネクション管理部202-1〜202-Nと、コネクションの対向ノードのネットワークアドレスを保持するカプセル化テーブル203-1〜203-Nとを含む。【００５７】
カプセル化テーブル203-1〜203-Nは、コンピュータ1-1〜1-Nに割り当てたVF 602-1〜602-NのID番号とメモリ空間に対し、VF 602-1〜602-Nが属するI/Oデバイス 6と接続するI/O仮想化ブリッジ5のネットワークアドレスを対応付ける。【００５８】
ネットワーク転送部201-1〜201-Nは、コンピュータ1-1〜1-NからI/Oデバイス 6あてのTLPを受信し、TLPのヘッダに記載されているメモリ空間やID番号で示される宛先情報を用いてI/Oデバイス 6が接続するI/O仮想化ブリッジ5のネットワークアドレスをカプセル化テーブル203-1〜203-Nから検出し、得られたネットワークアドレスを用いてTLPをカプセル化し、ネットワーク3に送信する。一方、ネットワーク3からコンピュータ1-1〜1-NあてのTLPがカプセル化されたパケットを受信し、TLPをデカプセル化し、コンピュータ1-1〜1-Nに送信する。【００５９】
コネクション管理部202-1〜202-Nは、システムマネージャ4と専用の制御パケットを用いて通信し、コンピュータブリッジ2-1〜2-NとI/O仮想化ブリッジ5との新たなコネクションをカプセル化テーブル203-1〜203-Nに登録し、切断されたコネクションをカプセル化テーブル203-1〜203-Nから削除する。【００６０】
I/O仮想化ブリッジ5は、図３に示した第1の実施の形態におけるI/O仮想化モジュール7と比較して、ネットワーク3とTLPがカプセル化されたパケットを送受信するネットワーク転送部501と、システムマネージャ4と通信し、コンピュータブリッジ2-1〜2-Nとのコネクションを管理するコネクション管理部504と、コネクションの対向ノードのネットワークアドレスを保持するカプセル化テーブル505とをさらに備え、I/Oパケット転送部701に代えてI/Oパケット転送部502を含む。【００６１】
カプセル化テーブル505は、コンピュータ1-1〜1-Nの識別子に対し、コンピュータ1-1〜1-Nが接続するコンピュータブリッジ2-1〜2-Nのネットワークアドレスを対応付ける。【００６２】
ネットワーク転送部501は、I/Oパケット転送部502からコンピュータ1-1〜1-NあてのTLPとTLPの宛先であるコンピュータ1-1〜1-Nを示す識別子を受信し、受信した識別子を用いてコンピュータ1-1〜1-Nが接続するコンピュータネットワークブリッジ2-1〜2-Nのいずれかのネットワークアドレスをカプセル化テーブル505から検出し、得られたネットワークアドレスを用いてTLPをカプセル化し、ネットワーク3に送信する。一方、ネットワーク転送部501は、ネットワーク3からI/Oデバイス 6あてのTLPがカプセル化されたパケットを受信し、TLPをデカプセル化し、デカプセル化時にパケットを送信したコンピュータを識別し、I/Oパケット転送部502に、受信したTLPと、送信元のコンピュータを識別する識別子とを渡す。【００６３】
コネクション管理部504は、システムマネージャ4と専用の制御パケットを用いて通信し、コンピュータブリッジ2-1〜2-NとI/O仮想化ブリッジ5との新たなコネクションをカプセル化テーブル505に登録し、切断されたコネクションをカプセル化テーブル505から削除する。【００６４】
I/Oパケット転送部502は、I/Oパケット転送部701と比較して、ネットワーク転送部501に対する動作の点が異なる。I/Oパケット転送部502は、ネットワーク転送部501からコンピュータ1-1〜1-Nが発行したI/Oデバイス 6あてのTLPを受信する際に、送信元のコンピュータを識別する識別子を受信する。また、I/Oパケット転送部502は、ネットワーク転送部501からコンピュータ1-1〜1-Nが発行した仮想CFG REG503-1〜503-NあてのTLPの受信する際に、送信元のコンピュータを識別する識別子を受信する。また、I/Oパケット転送部502は、I/Oデバイス 6からコンピュータ1-1〜1-NあてのTLPを受信し、TLPのヘッダが保持する宛先・送信元アドレスをスワップしてネットワーク転送部501に転送する際に、宛先のコンピュータを識別する識別子と共に渡す。同様に、仮想CFG REG 503-1〜503-Nからコンピュータ1-1〜1-Nの仮想CFG REG 503-1〜503-Nに対するコンフィグレーションアクセスの応答TLPを受信し、ネットワーク転送部501に転送する際に宛先コンピュータを示す識別子を渡す。【００６５】
システムマネージャ4はユーザインタフェースやプログラムの制御により、I/Oシステムにおいてコンピュータブリッジ2-1〜2-NとI/O仮想化ブリッジ5との接続を管理する。これにより、I/Oデバイス 6がコンピュータ1-1〜1-Nに割り当てられる。接続の管理はコネクション管理部202-1〜202-Nと504に対し、専用の制御パケットを用いて行う。【００６６】
次に、本発明を実施するための第2の実施の形態の動作について詳細に説明する。【００６７】
始めに、図１０〜図１２と図１３とを用いて、割り当てられたVF 602-1〜602-Nにコンピュータ1-1〜1-NがTLPを発行する場合の動作を述べる。ここでは、I/Oデバイス 6のVF 602-1にコンピュータ1-1がTLPを発行する場合の動作を例にとって説明するが、I/Oデバイス 6のVF 602-2〜602-Nにコンピュータ1-2〜1-NがTLPを発行する場合も同様な動作で行われる。【００６８】
図１０〜図１２を参照すると、第2の実施の形態の動作は、図６に示した第1の実施の形態の動作と比較して、ステップA2〜A5を含み、ステップE1を含まない点で異なる。ネットワーク転送部201-1は、コンピュータ1-1が発行したTLPを受信し、VF 602-1を含むI/Oデバイス 6が接続するI/O仮想化ブリッジ5のネットワークアドレスをカプセル化テーブル203-1から検出し(ステップA2)、検出したネットワークアドレスを用いてTLPをカプセル化する(ステップA3)。カプセル化されたTLPはネットワーク3によってI/O仮想化ブリッジ5に伝達される(ステップA4)。ネットワーク転送部501は、TLPがカプセル化されたパケットを受信し、TLPをデカプセル化する(ステップA5)。このとき、デカプセル化するパケットから送信元コンピュータ1-1を識別し、識別したコンピュータ1-1を示す識別子とデカプセル化したTLPをI/Oパケット転送部502に転送する。【００６９】
次に、図１０〜図１２と図１４とを用いて、VF 602-1〜602-Nが、割り当てられているコンピュータ1-1-1〜1-Nに対しTLPを発行する場合の動作を述べる。ここでは、VF 602-1が、割り当てられているコンピュータ1-1にTLPを発行する場合の動作を例にとって説明するが、VF 602-2〜602-Nが、割り当てられているコンピュータ1-2〜1-NにTLPを発行する場合も同様な動作で行われる。【００７０】
図１４を参照すると、第2の実施の形態の動作は、図７に示した第1の実施の形態の動作と比較してステップB5〜B7を含み、ステップF1を含まない点で異なる。ネットワーク転送部501は、I/Oパケット転送部502からTLPとTLPの宛先であるコンピュータ1-1の識別子を受信し、識別子を用いてコンピュータ1-1が接続するコンピュータブリッジ2-1のネットワークアドレスをカプセル化テーブル505から検出し、得られたネットワークアドレスを用いてTLPをカプセル化する(ステップB5)。ネットワーク3は、TLPがカプセル化されたパケットを宛先のコンピュータブリッジ2-1に伝達する(ステップB6)。ネットワーク転送部201-1はTLPがカプセル化されたパケットを受信し、TLPをデカプセル化し、コンピュータ1-1にTLPを送信する(ステップB7)。【００７１】
次に、I/Oデバイス 6を複数のコンピュータ1-1〜1-Nの間で共有するために、I/Oデバイス 6をコンフィグレーションする際の動作について述べる。I/Oデバイス 6のコンフィグレーションは、あらかじめI/Oデバイス 6がコンピュータ1-1〜1-Nに割り当てられる前にI/O仮想化ブリッジ5がI/Oデバイス 6に対して行うコンフィグレーションと、I/Oデバイス 6が備えるVF 602-1〜602-Nが、コンピュータ1-1〜1-Nに割り当てられるときに行われるコンフィグレーションの2段階から成る。【００７２】
I/Oデバイス 6がコンピュータ1-1〜1-Nに割り当てられる前に、I/O仮想化ブリッジ5が備えるI/Oコンフィグレーション部507が、I/Oデバイス 6のコンフィグレーションを行う場合の動作は、第1の実施の形態と同じであるため説明を省略する。【００７３】
次に、I/O仮想化ブリッジ5により、コンフィグレーションが行われたI/Oデバイス 6に対し、コンピュータ1-1〜1-Nにより割り当てられたVF 602-1〜602-Nのコンフィグレーションが行われる際の動作について図１０〜図１２と図１５とを用いて述べる。【００７４】
図１５を参照すると、第2の実施の形態の動作は、図９に示した第1の実施の形態の動作と比較して、ステップD1とD2とを含む点で異なる。システムマネージャ4は、VF 602-1〜602-Nを割り当てるコンピュータ1-1〜1-Nの設定を、ユーザインタフェースやプログラムから受付け、VF 602-1〜602-Nを割り当てるコンピュータ1-1〜1-Nが接続するコンピュータブリッジ2-1〜2-Nのコネクション管理部202-1〜202-Nと、VF 602-1〜602-Nを含むI/Oデバイス 6が接続するI/O仮想化ブリッジ5のコネクション管理部504に、制御パケットを用いてコネクション作成の命令を発行する(ステップD1)。コネクション管理部202-1〜202-Nとコネクション管理部504は、作成するコネクションの対向ノードのネットワークアドレスをそれぞれカプセル化テーブル203-1〜203-Nとカプセル化テーブル505に登録する(ステップD2)。本登録により、VF 602-1〜602-Nがコンピュータ1-1〜1-Nに自動的に割り当てられる。以降、コンピュータ1-1〜1-NではVF 602-1〜602-Nが従来のI/Oデバイスにおける1つのファンクションと同等に扱われる。【００７５】
次に、本発明を実施するための第2の実施の形態の効果について説明する。【００７６】
本発明の第2の実施の形態では、ネットワークとシステムマネージャによりコンピュータに対するVFの割り当てを自由に設定する。これにより、ネットワーク上のI/Oデバイスをコンピュータ間で柔軟に共有できることに加え、ネットワークを用いてI/OデバイスとI/Oデバイスを共有するコンピュータの配置を柔軟に設計できる。【００７７】
［第３実施形態］
次に、本発明を実施するための第3の実施の形態について図面を参照して詳細に説明する。【００７８】
図１６は、本発明の第3の実施の形態の全体構成を示すブロック図である。図１７は本発明の第３の実施の形態の構成の一部を示すブロック図である。図１８は本発明の第３の実施の形態の構成の他の一部を示すブロック図である。図１７では、コンピュータとコンピュータブリッジの詳細が示され、図１８ではＩ／Ｏ仮想化ブリッジとＳＲ−ＩＶＯ対応Ｉ／Ｏデバイスの詳細が示される。【００７９】
図１６〜図１８を参照すると、本発明の第3の実施の形態は、図１０〜図１２に示した第2の実施の形態と比較して、コンピュータブリッジ8-1〜8-Nが上流PCI-PCIブリッジ801-1〜801-Nをさらに含み、また、I/O仮想化ブリッジ9-1〜9-Mが下流PCI-PCIブリッジ902-1-1〜902-N-Mをさらに含み、ネットワーク転送部501とI/Oパケット転送部502が、それぞれネットワーク転送部901-1〜901-MとI/Oパケット転送部903-1〜903-Mに置き換えられている。また、I/Oシステムはネットワーク3上で複数のコンピュータ1-1〜1-N間で、複数のI/Oデバイス 6-1〜6-Mを共有する。【００８０】
コンピュータブリッジ8-1〜8-Nと、I/Oブリッジ 9-1〜9-Mとは、コンピュータ1-1〜1-Nに対しI/Oデバイス 6-1〜6-Mとの間に上流PCI-PCIブリッジ801-1〜801-Nと下流PCI-PCIブリッジ902-1-1〜902-N-Mを含むことで、コンピュータ1-1〜1-N上のソフトウェアからは、コンピュータ1-1〜1-NとI/Oデバイス 6-1〜6-Mとの間に図１に示すPCIエクスプレススイッチ10が挿入されているものと認識される。【００８１】
下流PCI-PCIブリッジ902-1-1〜902-N-Mは、I/Oデバイス 6-1〜6-Mが備えるVF 602-1-1〜602-N-1,・・・,602-1-M〜602-N-Mが割り当てられたコンピュータ1-1〜1-Nに対し、個別に割り当てられる。【００８２】
ネットワーク転送部901-1〜901-Mは、コンピュータ1-1〜1-Nが発行したTLPをI/Oデバイス 6-1〜6-Mに転送する際、コンピュータ1-1〜1-Nに対応するPCI-PCIブリッジ902-1-1〜902-N-1,・・・, 902-1-M〜902-N-Mを経由してTLPをI/Oパケット転送部903-1〜903-Mに転送する。【００８３】
I/Oパケット転送部903-1〜903-M は、I/Oデバイス 6-1〜6-Mが発行したTLPをコンピュータ1-1〜1-Nに転送する際、コンピュータ1-1〜1-Nに対応するPCI-PCIブリッジ902-1-1〜902-N-1,・・・, 902-1-M〜902-N-Mを経由してTLPをネットワーク転送部901-1〜901-Mに転送する。【００８４】
本発明を実施するための第3の実施の形態の動作は、第2の形態の動作と同じであるため説明を省略する。【００８５】
次に、本発明を実施するための第3の実施の形態の効果について説明する。【００８６】
本発明の第3の実施の形態では、コンピュータ上のソフトウェアに対し、複数のコンピュータが共有する複数のI/Oデバイスの間で、PCIエクスプレススイッチが挿入されているように認識させる。これにより、複数のコンピュータと複数のI/Oデバイスとの相互接続が可能となり、複数のコンピュータ間で複数のI/Oデバイスを同時に共有することができる。また、どのI/Oデバイスをどのコンピュータが共有するかをシステムマネージャを用いて柔軟に設定することができる。さらに、上流PCI-PCIブリッジと下流PCI-PCIブリッジを用いてコンピュータ、I/Oデバイスの近傍でPCIeバスをそれぞれ終端し、ネットワークを用いてTLPを転送する際にPCIeプロトコルで定められるパケット転送時間の制約からシステムを開放することで、市販のルートコンプレックス102とI/Oデバイス 6の仕様を改造することなくI/O共有を実現するI/Oシステムに適用することができる。【００８７】
以上説明した各実施形態では、I/Oデバイスを複数のコンピュータ間で共有できる。その理由は、I/OデバイスのVFを個々のコンピュータに割り当て、I/Oドメインを複数のコンピュータのルートドメインにマッピングすることで、コンピュータは、I/Oデバイスがコンピュータに占有に割り当たてられている場合と同等に使用するためである。【００８８】
また各実施形態では、オペレーティングシステムやデバイスドライバに変更を行うことなく、I/Oデバイスを複数のコンピュータ間で共有できる。その理由は、I/OデバイスのVFを個々のコンピュータに割り当て、I/Oドメインを複数のコンピュータのルートドメインにマッピングすることで、コンピュータは、I/Oデバイスがコンピュータに占有に割り当たてられている場合と同等に使用するためである。【００８９】
以上説明した実施形態では、標準の例としてPCIエクスプレスを取り上げて説明したが、本発明はPCIエクスプレスに限定されず、今後PCIに基づいて拡張される標準にも適用可能である。【００９０】
本願において「PCIエスクプレス」とは、非特許文献１（PCI-SIG, “PCI Express Base Specification Revision 2.0”, 2006年12月20日, pp. 35）において定義される標準規格及び前記標準規格に基づいて拡張される標準規格をいうものとする。【００９１】
以上、本発明の代表的な実施形態について説明したが、本発明は、本願の請求の範囲によって規定される、その精神または主要な特徴から逸脱することなく、他の種々の形で実施することができる。そのため、前述した各実施形態は単なる例示にすぎず、限定的に解釈されるべきではない。本発明の範囲は特許請求の範囲によって示すものであって、明細書や要約書の記載には拘束されない。さらに、特許請求の範囲の均等範囲に属する変形や変更はすべて本発明の範囲内のものである。
【産業上の利用可能性】
【００９２】
本発明は、コンピュータ装置やネットワーク装置、産業用機器やコンシューマ機器において、I/Oデバイスを複数のコンピュータ、あるいはCPUやCPUに類する演算装置を含む情報処理装置の間で、I/Oデバイスを共有する用途に適用できる。
【図１】
2009025381.tif 000003
【図２】
2009025381.tif 000004
【図３】
2009025381.tif 000005
【図４】
2009025381.tif 000006
【図５】
2009025381.tif 000007
【図６】
2009025381.tif 000008
【図７】
2009025381.tif 000009
【図８】
2009025381.tif 000010
【図９】
2009025381.tif 000011
【図１０】
2009025381.tif 000012
【図１１】
2009025381.tif 000013
【図１２】
2009025381.tif 000014
【図１３】
2009025381.tif 000015
【図１４】
2009025381.tif 000016
【図１５】
2009025381.tif 000017
【図１６】
2009025381.tif 000018
【図１７】
2009025381.tif 000019
【図１８】
2009025381.tif 000020
【国際調査報告】
2009025381.tif 000021
2009025381.tif 000022
2009025381.tif 000023
2009025381.tif 000024