(57)【特許請求の範囲】
【請求項１】
プロキシコントローラと組み合わされるデータスイッチであって、少なくとも１つの入力／出力（Ｉ／Ｏ）装置と、メモリを含む少なくとも１つのサーバーとの間で、データトラフィック及び制御トラフィックをルーティングするように構成され、前記メモリは、一組のデータバッファ、及びコマンド／状態記述子のリストを含むアドレス空間を有するデータスイッチにおいて、このデータスイッチが、
i) パケットヘッダーを検査することによって、異なる種類のトラフィックを区別し；
ii) データトラフィックは、前記少なくとも１つのＩ／Ｏ装置と前記少なくとも１つのサーバーとの間で直接ルーティングし；
iii) 制御トラフィックのみを、前記プロキシコントローラを経由してルーティングする
ように構成され、
前記プロキシコントローラが、前記記述子を読み込むことによってコピーし、前記記述子内のポインタが、前記データバッファへのポインタである第１クラスのポインタであるか、後続する記述子へのポインタである第２クラスのポインタであるかを示すように、前記記述子のコピーを修正することを特徴とするデータスイッチ。
【請求項２】
前記プロキシコントローラが、前記第１クラスのポインタと前記第２クラスのポインタとが前記データスイッチによって互いに区別可能になるように、当該プロキシコントローラが有する前記記述子のコピーを修正することを特徴とする請求項１に記載のデータスイッチ。
【請求項３】
前記プロキシコントローラが、前記第１クラスのポインタ中の１つ以上の非上位ビットを第１設定値に設定し、前記第２クラスのポインタ中の１つ以上の非上位ビットを第２設定値に設定するように構成されていることを特徴とする請求項２に記載のデータスイッチ。
【請求項４】
前記第１クラスのポインタ及び／または前記第２クラスのポインタ中の、前記１つ以上の非上位ビット以外の追加的な非上位ビットを、複数のサーバーのうち、元の未修正の前記記述子及び／または前記データバッファを含むサーバーを識別するように設定することを特徴とする請求項３に記載のデータスイッチ。
【請求項５】
前記プロキシコントローラが、前記サーバーの前記アドレス空間を、前記プロキシコントローラの仮想アドレス空間内にマッピングするように構成されていることを特徴とする請求項１〜４のいずれかに記載のデータスイッチ。
【請求項６】
前記記述子を、前記仮想空間の第１組の領域内にマッピングし、前記データバッファを、前記仮想アドレス空間の第２組の領域内にマッピングすることを特徴とする請求項５に記載のデータスイッチ。
【請求項７】
前記第１組の領域と前記第２組の領域とが、不連続な領域であることを特徴とする請求項６に記載のデータスイッチ。
【請求項８】
前記第１組の領域及び前記第２組の領域の各々が、それぞれ単一の第１領域及び単一の第２領域で構成されることを特徴とする請求項６または７に記載のデータスイッチ。
【請求項９】
前記データスイッチが、前記仮想アドレス空間の前記第１組の領域へのアクセスを、前記プロキシコントローラを経由してルーティングし、前記仮想アドレス空間の前記第２組の領域へのアクセスを、前記Ｉ／Ｏ装置と前記サーバーとの間で直接ルーティングするように構成され、前記第１組の領域へのアクセスは制御トラフィックから成り、前記第２組の領域へのアクセスはデータトラフィックから成ることを特徴とする請求項６、７または８に記載のデータスイッチ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の好適例は、入出力（Ｉ／Ｏ）装置、例えばイーサネット（登録商標）コントローラ、ファイバーチャンネル・コントローラの仮想化に関するものである。
【背景技術】
【０００２】
コンピュータネットワークの実現では、イーサネット（登録商標）コントローラ及びストレージ・コントローラのようなＩ／Ｏリソースは、従来、サーバー内に組み込まれ、各サーバーは、それ自身のＩ／Ｏリソースの組を有する。しかし、高性能Ｉ／Ｏリソースはしばしば、サーバー自体より高価になり得るので、複数のサーバーが、これらのサーバーの外部にある１つ以上のＩ／Ｏリソースを共用することが有利である。さらに、これらのサーバーの１つ以上が故障した場合でも、関連するＩ／Ｏリソースはまだ使用することができるので、こうした構成はよりロバスト（頑健）であり得る。
【０００３】
Ｉ／Ｏ仮想化は、標準的なＩ／Ｏ装置と標準的なサーバーとの間でアクセスを変換して、これらのＩ／Ｏ装置を複数のサーバー間で共用することができ、この共用がサーバー及びＩ／Ｏ装置の両方に対して隠蔽されるようにする手法である。
【０００４】
Ｉ／Ｏ仮想化は多数の利点を有する。各仮想システムは、それ自身の専用Ｉ／Ｏリソースを必要とするのに対し、多数の物理的構成では、クライアントまたはサーバー上で利用可能なＩ／Ｏ装置は、その数が不十分であるか、あるいは、各アプリケーションに必要なＩ／Ｏ接続性及び帯域幅を提供するための適正な種類ではないことがある。
【０００５】
さらに、集中管理型Ｉ／Ｏリソースの使用は、ネットワーク及びシステムの管理を簡略化しつつ、Ｉ／Ｏのスケーラビリティ（拡張性）を改善する。ブレードサーバー及びラックマウントサーバーは共に、必要時に、必要なリソースにアクセスすることができる。さらに、Ｉ／Ｏは集中化したスイッチから管理することができるので、管理者はリソースをより容易かつ効率的に割り当てることができる。
【０００６】
集中化によるＩ／Ｏ仮想化への取り組みは、ネットワークＩ／Ｏ負荷平衡化及び帯域幅管理を最大化するための新たな機会をネットワーク管理者に提供する。例えば、サーバーが追加的帯域幅を必要とする場合に、ネットワーク管理者は、より大きいＩ／Ｏ容量を割り当てることができる。これに加えて、サーバーが必要以上のＩ／Ｏリソースを有する場合は、これらのリソースを、より必要としている他のサーバーに再割り当てすることができる。
【０００７】
Ｉ／Ｏ仮想化は、より高いシステム信頼性に役立つ見込みがある。ネットワーク・インフラストラクチャ（基盤）全体にわたって、周辺装置及びポートにおける過度の冗長性を解消して、ネットワーク内の構成要素数を低減することによって、故障率が最小化される。
【０００８】
ネットワーク管理者は、Ｉ／Ｏリソースを性能上の必要性により良好に整合させることができ、これにより、使用するカード、ケーブル及びポートをより少数にすることができるので、Ｉ／Ｏ仮想化は、システムコストを劇的に低減することも約束する。
【０００９】
今日の一般的なＩ／Ｏ装置仮想化の解決法は次の通りである：
１．VMware（登録商標）、Xen（登録商標）、及びマイクロソフト・バーチャルサーバー(Microsoft Virtual Server)（登録商標）のようなサーバー仮想化ソフトウェアによる仮想装置のエミュレーション。これは、単一の物理的サーバー上の複数の仮想マシンが、単一の物理的Ｉ／Ｏ装置を共用することを可能にする。複数の物理的サーバー間でＩ／Ｏリソースを共用する能力は存在しない。
２．イーサネット（登録商標）またはインフィニバンド(Infiniband)（登録商標）のような、Ｉ／Ｏネットワークと組み合わされた高レベルのＩ／Ｏ仮想化。これは、複数のサーバーが、特化したＩ／Ｏゲートウェイ機器によって提供される抽象化されたＩ／Ｏサービスへのアクセスを共用することを可能にする。
３．PCI-SIG IOV規格によって規定される低レベル、ＰＣＩベースのＩ／Ｏ仮想化。これは、普遍的なＰＣＩプロトコルへの拡張を規定して、複数のサーバーがコモディティ（標準品）のＩ／Ｏ装置を共用することを可能にする。
４．PCI IOV的な特徴を既存の装置に追加する、帯域内仮想化装置の追加による、レガシー（旧式的）Ｉ／Ｏ装置の低レベル、ＰＣＩベースのＩ／Ｏ仮想化。これは、２００５年に見られたNextIOの非営利技術デモンストレータを代表例とする。
【００１０】
高レベルの解決法（上記１及び２）は、Ｉ／Ｏ仮想化の管理的利点のいくつかをもたらすが、大きなコストを要し、厳しい性能ペナルティ（性能上の不利）を頻繁に伴う。このことは、Ｉ／Ｏトラフィックは、変換／カプセル化のいくつかの層を経なければならず、そしてハードウェアＩ／Ｏ装置をソフトウェアでエミュレートするということによる。低性能のＩ／Ｏにとっては、このことは許容可能な解決法であるが、高Ｉ／Ｏ性能システムでは、これらの解決法は非実用的である。
【００１１】
PCI-SIG IOVの解決法（上記３）は、ネイティブのＩ／Ｏインタフェースが真のマルチホストのネットワークになることを可能にし、そしてＩ／Ｏ装置が複数のサーバーをサポートすることができるようにＩ／Ｏ装置を変更することによって、これらのコスト／性能の問題を解決する。エミュレーション及びプロトコルの変換は存在しない。しかし、既存のＰＣＩインフラストラクチャが、完全に前方（上位）互換性ではないという実用上の問題が存在する。特にこの問題を解決するためには、種々の新式のＩ／Ｏ装置及びスイッチ装置を設計し、実現し、市場に出さなければならず、複雑な相互依存性があれば、この技術を導入することのできる方法が明らかでない。
【００１２】
NextIOは、２００５年にPCI IOVデモンストレータ（実証装置）を製造し（上記４）、PCI IOVデモンストレータは、（例えばPCI-SIG規格通りの）IOVスイッチを実現し、かつ帯域内仮想化フロントエンド装置を各装置に追加することによって、既存のＩ／Ｏ装置を使用している。しかし、フロントエンド装置はコモディティＩ／Ｏ装置に比べて非常に高価であるので、このことは商業的に実現可能な解決法ではなかった。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
従って、既存のＩ／Ｏ装置、（これだけではないが）例えばＰＣＩ Ｉ／Ｏ装置に仮想化を加え、さらに、既存の解決法に関して以上で概説した問題を回避することが望まれる。
【課題を解決するための手段】
【００１４】
以下の説明では、本発明のＰＣＩ（Peripheral Component Interconnect Standard（周辺装置相互接続規格）、ＰＣＩエクスプレス（登録商標）を含む）実現を参照するが、異なる環境では他の具体例が用途を見出し得ることは明らかである。
【００１５】
本発明の第１の態様によれば、プロキシコントローラと組み合わされるデータスイッチが提供され、このデータスイッチは、少なくとも１つの入力／出力（Ｉ／Ｏ）装置と、メモリを含む少なくとも１つのサーバーとの間で、データトラフィック及び制御トラフィックをルーティング（経路設定）するように構成され、上記メモリは、一組のデータバッファ、及びコマンド／状態記述子（ステータス・ディスクリプタ）のリストを有し、このデータスイッチは：
i) パケットヘッダーを検査することによって、異なる種類のトラフィックを区別し；
ii) データトラフィックは、少なくとも１つのＩ／Ｏ装置と少なくとも１つのサーバーとの間で直接ルーティング（経路設定）し；
iii) 制御トラフィックは、プロキシコントローラを経由してルーティングする
ように構成されている。
【００１６】
本発明の第２の態様によれば、少なくとも１つの入力／出力（Ｉ／Ｏ）装置と少なくとも１つのサーバーとの間で、プロキシコントローラと組み合わされるデータスイッチを経由して、データトラフィック及び制御トラフィックをルーティングする方法が提供され、このサーバーは、一組のデータバッファ及びコマンド／状態記述子のリストを有するメモリを含み、このデータスイッチは：
i) パケットヘッダーを検査することによって、異なる種類のトラフィックを区別し；
ii) データトラフィックは、少なくとも１つのＩ／Ｏ装置と少なくとも１つのサーバーとの間で直接ルーティング（経路設定）し；
iii) 制御トラフィックは、プロキシコントローラを経由してルーティングする
ように構成されている。
【００１７】
プロキシコントローラは、上記記述子を読み込み、この記述子のフォーマットを理解するように構成されている。大部分の記述子は、少なくとも１つのデータバッファ及び／または後続するコマンドまたは状態記述子への少なくとも１つのポインタを有するが、一部の記述子はポインタを含まないことがある（例えば、単純な「リセット」コマンド用の記述子）。プロキシコントローラはこれらの記述子のフォーマットを理解することができるので、従って、どのポインタがデータバッファへのポインタであり、どのポインタが後続する記述子へのポインタかがわかる。メモリ内の記述子とデータバッファの配分は任意である。プロキシコントローラは、記述子へのポインタとデータバッファへのポインタとを容易に区別することができるように、当該プロキシコントローラが有する記述子のコピーを修正し、このことは一般に、ポインタ中の１つ以上の非上位ビットを割り当てて、このポインタが記述子ポインタであるか否かを示すことによって行う。さらに、あるポインタが後続する記述子へのポインタであるかデータバッファポインタであるかを示すために使用する以外の１つ以上の非上位ビットを修正するように当該ポインタを修正して、複数のサーバーまたはサーバーメモリのどれが、元の未修正の記述子またはデータバッファを含んでいるかを示すことができる。
【００１８】
修正に使用する非上位ビットの数は、サーバーの数が与えられれば、無理なく可能な限り少なく選定して、スイッチハードウェアを簡略化することが好ましい。例えば、１ビットを使用して、記述子とデータバッファとを区別することができ、そして追加的にＮビットを使用して、最大２N台のサーバーをサポートする発信元サーバーを識別することができる。
【００１９】
このようにして、Ｉ／Ｏ装置は、データバッファ及び記述子がいくつかのサーバーメモリ空間内に散在している通常の（例えばＰＣＩ）物理アドレス空間内ではなく、記述子とデータバッファの配分が構造化された、単一の統合された仮想アドレス空間内で（無意識のうちに）動作するように作製されている。
【００２０】
このような、仮想アドレス空間内の記述子及びデータバッファの構造化した配置は、データスイッチが、制御トラフィック（記述子アクセス）をプロキシコントローラ経由でルーティングすることを可能にするが、（データバッファへの、またはデータバッファからの）データトラフィックを、スイッチによって、Ｉ／Ｏ装置と適切なサーバーとの間で直接ルーティングすることも可能にする。
【００２１】
換言すれば、スイッチが制御トラフィックとデータトラフィックとを識別して分離し、制御トラフィックをプロキシコントローラにリダイレクト（転送）することができるように、プロキシコントローラは制御トラフィックを修正し、このことは、ハードウェア仮想化「コプロセッサ」として実現することができ、データトラフィックはＩ／Ｏ装置とサーバーとの間で直接ルーティングされる。
【００２２】
好適例では、非上位ビットの修正は、アドレス空間内の一組の領域内への記述子のマッピング、及びこのアドレス空間内の他の不連続な一組の領域内へのデータバッファのマッピングとして見ることができ、これにより、スイッチは、これらの二組の（領域の）一方へのアクセスと他方へのアクセスとを容易に区別することができることは明らかである。単純な好適例では、このことは、各組を１つの領域のみで構成することによって比較的簡単にすることができるが、複数の領域で構成される組は、その代わりに、より複雑な好適例において実現することができる。
【００２３】
上記マッピングは、プロキシコントローラによって、及びスイッチによって共に行われる。一般に、プロキシコントローラは、上記ポインタを修正することによって、フォワードマッピング（例えば、複数のサーバー空間から単一の仮想空間へのマッピング）を行う。スイッチは、上記ポインタを元の形に戻すことによって、リバースマッピング（仮想空間から複数のサーバー空間へのマッピング）を行う。このことは、スイッチ及びプロキシコントローラは、サーバー及びＩ／Ｏ装置に対して本質的にトランスペアレントであることを意味する。
【００２４】
ＰＣＩでは、制御トラフィックは一般に、全帯域幅の約６〜８％のみを構成し、このことは、NextIOの解決法のように高い実現コストを生じさせることなしに、あるいは、現在のソフトウェアの解決法におけるように低性能を生じさせることなしに、プロキシコントローラをハードウェアで実現することができることを意味する。プロキシコントローラは、全帯域幅の残りの９２〜９４％を構成するデータトラフィックにアクセスするかデータトラフィックを処理する必要がない。データトラフィックは、通常のようにスイッチによってルーティングされ、プロキシコントローラを完全にバイパスする。
【００２５】
本願に記載するデータスイッチは、これに限らないが例えばＰＣＩスイッチであり、通常は、サーバーとＩ／Ｏ装置との間で次のトランザクション型を搬送する：
i) サーバーからＩ／Ｏ装置へのコマンド。
ii) サーバーによるＩ／Ｏ装置内のリソースの状態読出し。
iii) Ｉ／Ｏ装置が、サーバーメモリ内のコマンド記述子を読出し中。
iv) Ｉ／Ｏ装置が、状態記述子をサーバーメモリに書込み中。
v) Ｉ／Ｏ装置が、サーバーメモリ内のデータバッファを読出し／書込み中。
【００２６】
スイッチは、上記トランザクションのすべてを識別し、型v)以外のすべてをプロキシコントローラにリダイレクト（転送）する。（帯域幅の９０％以上を占める）トランザクション型v)は、通常のように進めることができる。トランザクション型i)及びii)は、所定伝搬方向用の一意的なフィールドをＰＣＩパケットヘッダー内に有するので、容易に識別される（トランザクション型i)及びii)は共に、サーバーからＩ／Ｏ装置へのサーバー主導のトランザクションである（即ち、最初のパケットが下流に送信される）のに対し、トランザクション型iii)、iv)及びv)はすべて、Ｉ／Ｏ装置からサーバーへの装置主導のトランザクションである）。しかし、スイッチが型v)を型iii)及びiv)から分離するためには、以下の節で説明する新たなメカニズムを必要とする。
【００２７】
データバッファは、メモリ内の当該データバッファのアドレスのみによって、コマンド／状態記述子と区別することができる。現実のシステムでは、すべてのデータバッファがメモリ内に任意に散在する例が多数存在するので、すべてのデータバッファ及び記述子が、すべてのサーバーメモリ空間内に存在する場所をスイッチが記憶していることは、実用的でない。Ｉ／Ｏ装置のデータバッファへのアクセスを、コマンド／状態記述子へのアクセスから分離するために、Ｉ／Ｏ装置は、通常のＰＣＩ物理アドレス空間ではなく、単純な「仮想アドレス空間」内で（無意識のうちに）動作するように作製されている。この仮想アドレス空間は、すべてのコマンド／状態記述子のリストを、明確に規定された領域内に有する。スイッチは、メモリアドレスを単純な値と比較しさえすればよいので、このことは、スイッチが、型v)のトランザクションを型iii)及びiv)のトランザクションから分離することを容易にする。
【００２８】
制御トランザクションとデータトランザクションとを分離すると共に、スイッチは、特定データバッファが配置されているサーバーを知る必要がある。コマンド／状態記述子と同様に、プロキシコントローラは、各サーバーのデータバッファを特定の仮想アドレス空間領域内にマッピングすることができ、これにより、スイッチは単純なアドレス比較によってサーバーを識別することができる。スイッチは、上位ビットを用いてサーバーを識別すると共に、これらのビットをトランザクション上に戻すこともできる。
【００２９】
プロキシコントローラは、次のように仮想アドレス空間を生成することができる：
Ｉ／Ｏ動作を開始するために、サーバーは：
１．一組のデータバッファをメモリ内に生成し、
２．コマンド／状態記述子のリストをメモリ内に作成することができる。これらの記述子は、データバッファへのポインタ、及び「次の」コマンド／状態記述子へのポインタも有する。
３．サーバーは、最初のコマンド記述子へのポインタを有するＩ／Ｏ装置に直接、コマンドを送信する（型i)のトランザクション）。従来は、Ｉ／Ｏ装置がこのことを利用して、最初のコマンド記述子をメモリから読み出していたが、今度は、スイッチがこのコマンドをプロキシコントローラにリダイレクトする。
４．プロキシコントローラは、コマンド記述子を読み込む。プロキシコントローラは、記述子のフォーマットを理解し、従って、どれがデータバッファへのポインタであり、どれが次の記述子へのポインタであるかを知る。プロキシコントローラは、他の記述子へのポインタが（例えば最上位ビットを設定することによって）アドレス空間の上位領域内にマッピングされるように、当該プロキシコントローラが有する記述子のコピーを修正する。データバッファポインタは、各サーバーのバッファが連続領域内にマッピングされるように修正される。
５．プロキシコントローラは、サーバーからの元の直接的なコマンドを、今度は第１記述子の新たな位置を指示（ポイント）するように修正して、このコマンドをＩ／Ｏ装置に転送する。
６．Ｉ／Ｏ装置は、このコマンド中のポインタを用いて、最初のコマンド記述子をフェッチする。スイッチは、これが上位アドレスからの記述子クセスであることを識別して、要求をプロキシコントローラにリダイレクトし、プロキシコントローラは、修正した記述子の内容で応答する。
７．Ｉ／Ｏ装置がデータバッファにアクセスすると、スイッチは下位アドレスによってこのことを識別して、トランザクションを適切なサーバーに直接ルーティングする。
８．Ｉ／Ｏ動作が完了すると、Ｉ／Ｏ装置は「割込み（インタラプト）」によってサーバーに信号通知し、この「割込み」は、単にサーバーメモリ内の所定位置へのメモリ書込みである。コマンド／状態記述子と同様に、この「割込み」は、初期化中に、プロキシコントローラによって上位アドレス領域内に再マッピングされており、これにより、スイッチは、この「割込み」を容易にプロキシコントローラにリダイレクトすることができる。
ことができる。
【００３０】
上記メカニズムにより、スイッチは、低帯域幅の制御トラフィックを、高帯域幅のデータトラフィックから分離して、低帯域幅の制御トラフィックのみをプロキシコントローラに送信することができる。こうして、このプロキシコントローラは、仮想化機能（本明細書では説明しない）を提供することができる。
【００３１】
また、重要なこととして、この動作中には、サーバーもＩ／Ｏ装置も、何か異常な（非仮想化システムとは異なる）ことが発生したことには気が付かない。本発明の実施例の動作は全体的に、サーバー及びＩ／Ｏ装置に対してトランスペアレントである。
【００３２】
例えば、ＰＣＩスイッチの通常動作を修正し、Ｉ／Ｏ装置を仮想アドレス空間内で動作させることによって、本発明の実施例は、サーバーとＩ／Ｏ装置との間にあるＰＣＩインタフェース内の制御パスとデータパスとの厳密な分離を可能にする。
【００３３】
このことは、プロキシコントローラまたは仮想化コプロセッサが、高帯域幅のデータパスを取り扱う負担なしに、専ら制御パス上で動作することを可能にする。
【００３４】
本発明の好適な実施例は、これに加えて、要求されたデータバッファを有するサーバーをスイッチが容易に識別することを可能にし、従って、上記トランザクションをいくつかのサーバーのうち１つに対して適切にルーティングすることを可能にする。このことは、単一のＩ／Ｏ装置をいくつかのサーバー間で共用することを可能にする。
【００３５】
本発明の実施例を、ネイティブなＰＣＩの解決法として実現して、ソフトウェア仮想化に関連する高コスト及び低性能を回避することができる。
【００３６】
さらに、本発明の実施例は、ＰＣＩマルチルートＩＯＶ（PCI Multi-Root IOV）のような新たな規格に準拠するために、Ｉ／Ｏ装置の集合の再設計を必要としない。本発明の実施例は、既存のレガシー（旧式的）Ｉ／Ｏ装置と協働することができる。
【００３７】
さらに、本発明の実施例は、高帯域幅のデータパスを、サーバーとＩ／Ｏ装置との間で直接ルーティングすることを可能にすることによって、プロキシコントローラまたは仮想化コプロセッサのデータ処理要求を簡略化する。このことは、プロキシコントローラまたはコプロセッサを、低コストのハードウェアで実現することができ、従って、商業的に実現可能なシステムに要求されるコスト／性能をもたらすことができることを意味する。
【００３８】
以上で説明したポインタ操作は、スイッチによって実行される、最上位の制御トラフィックのプロキシコントローラへの再ルーティングの一態様に過ぎないことは明らかである。サーバーとＩ／Ｏ装置との間の大部分のトランザクションについては、制御トラフィック自体はパケットヘッダーから容易に識別することができ、従って、特別な処理または準備を必要としない。複雑性が生じるのは、Ｉ／Ｏ装置によって開始されるメモリアクセスにおいてのみであり（この点では、記述子アクセスとデータバッファアクセスとは通常、区別がつかないことによる）、このメモリアクセスでは、ポインタ修正またはポインタ操作が必要になる。
【００３９】
本明細書の説明及び特許請求の範囲全体を通して、「備える」及び「含む」、及びこれらの語の変化形、例えば「備えている」は、「含むが、それに限定されない」ことを意味し、他の成分、添加物、構成要素、整数値またはステップを排除せず、排除することを意図したものではない。
【００４０】
本明細書の説明及び特許請求の範囲全体を通して、各構成要素は複数存在し得るが、文脈上そう解釈すべきでない場合を除く。特に、本明細書は、単数並びに複数を意図しているが、文脈上そう解釈すべきでない場合を除く。
【００４１】
本発明の特定態様、実施例、または例に関連して説明した特徴、整数値、特性、化合物、化学的成分または化学基は、不適合でなければ、本明細書で説明した他のあらゆる態様、実施例または例に適用可能であることは明らかである。
【００４２】
本発明をより良く理解し、本発明を実施することのできる方法を示すために、以下、例として図面を参照しながら説明する。
【図面の簡単な説明】
【００４３】
【図１】本発明の実施例のアーキテクチャを示す図である。
【図２】２つのサーバーアドレス空間の、仮想アドレス空間内へのマッピングを示す図である。
【発明を実施するための形態】
【００４４】
図１に、一対のサーバー２、３と一対のnon-Multi Root Aware（non-MRA：非マルチルート・アウェア）Ｉ／Ｏ装置４、５間に相互接続されたデータスイッチ１を略図形式で示す。図からわかるように、データトラフィック６は、サーバー２、３とＩ／Ｏ装置４、５との間にあるスイッチ１を通して直接ルーティングされるのに対し、制御トラフィック７は、プロキシコントローラまたは仮想化コプロセッサ８に指向される。トラフィック６、７の帯域幅は一般に約２０Gbit／sであり、トラフィックの９０％以上はデータトラフィック６であり、従って、スイッチング／制御目的とは無関係である。
【００４５】
プロキシコントローラ８は、既存のＰＣＩ Ｉ／Ｏ装置４、５に仮想化を加える実用的手段であり、従来技術の解決法の欠点の一部を回避するのに役立つ。プロキシコントローラ８は、ネイティブなＰＣＩ Ｉ／Ｏ相互接続に基づき、従って、性能を低下させるプロトコル変換及びソフトウェアエミュレーションを回避する。プロキシコントローラ８は、新式のPCI-SIG Multi-Root IOV装置（と互換性はあるが）を必要としない。プロキシコントローラ８は、NextIO技術デモンストレータのコスト及び他の実用上の問題（電力、空間）を抱えることがない。プロキシコントローラ８は、スイッチ１がＰＣＩ制御パス７とデータパス６とを分離し、制御トラフィック７をハードウェア仮想化「コプロセッサ」８にリダイレクトすることができるように、ＰＣＩスイッチ１の通常の挙動を変更することによって、このことを行う。制御トラフィック７は、ＰＣＩ帯域幅の約６〜８％のみを構成し、従って、コプロセッサ８は、NextIOの解決法におけるような高い実現コスト、あるいはソフトウェアの解決法にけるような低性能を生じさせることなしに、ハードウェアで実現することができる。仮想化機能は、データへのアクセスを必要としない。高帯域幅データは、ＰＣＩスイッチ１内で通常のようにルーティングされ、コプロセッサ８を完全にバイパスする。
【００４６】
このことは、サーバーバッファをコプロセッサ８の仮想アドレス空間内にマッピングすることによって達成される。こうしたマッピングの例を図２に示し、サーバー２のアドレス空間９を左側に示し、サーバー３のアドレス空間１０を右側に示し、仮想アドレス空間１１を中央に示す。図からわかるように、各アドレス空間９及び１０内の記述子ポインタＤ0、Ｄ1、Ｄ2は、仮想アドレス空間１１の上位にマッピングされる。このことは、関連する記述子内のポインタを修正することによって、例えば、ポインタの最上位ビットを、データバッファポインタの等価なビットの値とは異なる値（０または１）に設定することによって達成される。
【００４７】
次に、Ｉ／Ｏ装置は、これらのポインタを用いて、メモリアクセス要求を発行することによって記述子及びデータバッファにアクセスし、これらのポインタは、要求パケットのヘッダー内のアドレスフィールド中に配置する。
【００４８】
このようにして、型v)のデータトラフィックと、型iii)またはiv)の制御トラフィックとを区別し、このトラフィックを、パケットヘッダーの単純な検査による要求に応じて、サーバー２、３またはコプロセッサ８に対してルーティングすることは、スイッチ１にとって簡単なことになる。
【００４９】
さらに、いくつかのサーバー２、３が単一のＩ／Ｏ装置４を共用することを可能にするために、パケットヘッダーの次の４ビットを用いて、どちらの特定サーバー２、３が制御パケットの意図した受信機であるかを識別することができる。４ビットを使用することは、１６台のサーバーが１つのＩ／Ｏ装置を共用することを可能にする。追加的ビット（即ち、先行ビットに続く５ビット）を借りることは、３２台のサーバーが１つのＩ／Ｏ装置を共用することを可能にする。
【００５０】
例えば、再び図２を参照すれば、サーバー２内のデータバッファからのデータは、仮想アドレス空間１１内の、記述子ポインタＤをマッピングした領域の直下にある連続領域にマッピングし、サーバー３のデータバッファからのデータは、仮想アドレス空間１１内の、サーバー２のデータバッファからのデータをマッピングした領域の直下にある連続領域にマッピングする。
【００５１】
コプロセッサ８及びスイッチ１は、パケットヘッダーの、最上位ビット及び後続するビット以外の部分を使用するように構成するか、プログラムすることができる。
【００５２】
本発明の実施例のアドレスマッピング態様の具体例を挙げるために、次のシーケンス（順序）を考えることができる。このことは、最上位ビットを制御／データトラフィック識別用に使用し、後続する４ビットをサーバー識別用に使用することを仮定する：
・Ｉ／Ｏ装置４を仮想化して、最大１６台のサーバー２、３間で共用する。
・コプロセッサ８は、６４ビットサーバーのアドレス空間の上位５ビットが未使用である（すべて「０」である）ものと仮定する。
・コプロセッサ８は、記述子及びデータバッファを、ビット５９〜６２がサーバーＩＤを含むように修正する。
・コプロセッサ８は、ビット「６３」＝１となるように記述子ポインタを修正する。
・スイッチ１は、ビット６３＝「１」では、Ｉ／Ｏ装置４からのすべてのメモリアクセスを、コプロセッサ８にリダイレクトする。
・スイッチ１は、ビット６３＝「０」では、Ｉ／Ｏ装置４からのすべてのメモリアクセスを、ビット５９：６２によって指示されるサーバー２、３にルーティングすると共に、これらのビットをクリアする。
【図１】
0005469081.tif 000002
【図２】
0005469081.tif 000003