図1は、例示的な実施形態による、仮想PCIデバイス用のPCIバス番号及びメモリ空間を確保し発行するコンピュータシステム100のブロック図である。説明のために、PCI Expressアーキテクチャを用いてコンピュータシステムを示すが、例示的な実施形態は、如何なる特定タイプのPCIアーキテクチャにも限定するものではない。
図1は、単一ファブリックのインスタンス又は階層を示しており、このインスタンス又は階層は、ルートコンプレックス、複数のエンドポイント(例えば、入出力(I/O)デバイス)、スイッチ、PCI Express−to−PCI/PCI−Xブリッジを含み、全てがPCI Expressバス又はリンクを介して相互接続されている。具体的には、ルートノード、計算ノード又はホストコンピュータ110は、1つ又は複数のスイッチ130(説明の便宜上1つのスイッチを示したが)を介して、複数のPCI Expressのエンドポイント120に、接続している。ルートノードは、様々なデバイス(エンドポイント又はエンドノード、ブリッジ、スイッチ等)に、PCI Express又はリンク160を介して、接続している。1実施形態では、1つ又は複数のPCI Expressのエンドポイント120を、スイッチ130に物理的に接続する。他の実施形態では、1つ又は複数のPCI Expressのエンドポイント120を、スイッチ130からばらす。つまり、エンドポイント120を、物理的にポート170Bに接続せず、ばらしている。
ルートノード110は、CPU140と、メモリ145と、ホストバス155を介して接続したルートコンプレックス150を含む。ルートコンプレックス150は、様々な仮想PCI Expressのエンドポイント125と、PCI Express−to−PCI/PCI−Xブリッジ165と、スイッチ130に、別々のPCI Expressバス160を介して、接続する。PCI Express−to−PCI/PCI−Xブリッジ165により、PCI ExpressファブリックとPCI/PCI−X階層との接続を提供する。
ルートコンプレックス(RC)150は、CPU/メモリサブシステムをI/Oデバイスに接続するI/O階層のルートを表す。ルートコンプレックスにより、1つ又は複数のポートをサポートできる。
各インタフェースにより、別々の階層ドメインを定義し、各階層ドメインは、単一のエンドポイント或は、1つ又は複数のスイッチコンポーネント及びエンドポイントを含有するサブ階層を含む。階層ドメイン間でのピアツーピア(P2P)トランザクションをルートコンプレックス経由でルーティングする能力は、任意であって、実装次第とする。例えば、実装には、ソフトウェア透過的にピアツーピア(P2P)を完全にサポート可能にするよう、ルートコンプレックス内部に実際の又は仮想スイッチを含むことができる。
ルートコンプレックス150により、以下の1つ又は複数を機能させる又はサポートすることができる:リクエスタとしてコンフィグレーション要求の生成をサポートすること;リクエスタとしてI/O要求の生成をサポートすること;リクエスタとしてロック要求の生成をサポートすること。
エンドポイントは、仮想エンドポイントと実際のエンドポイント即ち物理エンドポイントの両方を含む。物理又は実際のエンドポイントは、それ自体又は異なる非PCIデバイス(PCIデバイス又はホストCPU以外)、例えばPCI Expressに接続したグラフィックスコントローラ、PCI Express−USBホストコントローラ等又は他のI/Oデバイス(ディスクドライブ等)のためにPCIトランザクションのリクエスタ又はコンプリータになれるデバイス又はデバイス群である。対照的に、仮想エンドポイントは、コンピュータシステムに実際に物理的に提示及び/又は接続されないデバイスである。従って、ホスト110は、物理デバイスがコンピュータシステムのスロット/ポートに接続されていると検出する又は信じるが、実は、物理デバイスは実際には全く存在してはいない。
図示するように、スイッチ130は、複数のポート170と複数の仮想PCI−PCIブリッジ175を含む。説明のために、スイッチ130を、1つの上流ポート170Aと3つの下流ポート170Bと共に示している。スイッチは、1つ又は複数の物理エンドポイント120及び仮想エンドポイント125と、PCIリンク160を介して接続する。
スイッチは1つ又は複数の以下のルールに従う:各スイッチは、設定ソフトウェアに2つ以上の論理的なPCI−to−PCIブリッジとして現れること;スイッチは、トランザクションをPCIブリッジメカニズム(アドレスに基づくルーティング)を用いて送ること;スイッチは、各種のトランザクションレイヤパケットをポート組間で送ること。
1実施形態では、各PCI Expressリンク160を、仮想PCI−to−PCIブリッジ構造を通してマッピングし、各PCI Expressリンク160は、それと関連する論理PCIバスを有する。仮想PCI−to−PCIブリッジ構造を、PCI Expressのルートコンプレックスポート、スイッチの上流ポート、又はスイッチの下流ポートの一部とすることができる。ルートポートを、PCI Express階層ドメインがPCIルートコンプレックスから始まる仮想PCI−to−PCIブリッジ構造とする。各デバイスが特定のデバイス番号に応答するように、デバイスをコンフィグレーション空間にマッピングする。
1実施形態では、ホスト110が最初に立ちあがる際に、ホストとデバイスとの間のブリッジ又はスイッチ(即ち、スイッチ130)が仮想デバイス(即ち、仮想PCI Expressのエンドポイント125)として表示する物理デバイスを、ホストが認識又は検出する。また、ホストは、仮想PCI Expressのエンドポイント125も、物理的に接続したデバイスと認識する。しかしながら、これらのデバイスは、仮想デバイスとして表示された物理デバイスをブリッジにホットプラグする今後のために、スイッチ130が作成した予約場所であり、実際にはダミーの仮想デバイスである。
図2は、例示的な実施形態による、仮想PCIデバイス用にPCIバス番号及びメモリ空間を確保するためのフローチャートである。
ブロック200によると、ホストコンピュータ又はルートノードが起動する。例えば、ホストをオンにする、或は再起動する。
ブロック210によると、ホストがPCI列挙を実行する。コンピュータが始動した後に、PCI列挙期間が始まる。その間に、コンピュータのPCI列挙ソフトウェアが、インストールされた周辺機器全てとそれらが必要とするメモリ空間リストをコンパイルする。つまり、コンピュータにより、どの周辺機器が実際に又は物理的にPCIバスに接続されているかを判定する。
1実施形態では、コンピュータを立ち上げる前に、コンピュータはオペレーションシステム(OS)にアドレスマップを構築する。列挙ソフトウェアにより、システムにどれ程のメモリ容量があるか、システムのI/Oコントローラがどれ程のアドレス空間を必要とするかを、判定する。このマップ(PCIリソース割当てマップと呼ばれることが多い)を、起動時にどのアドレスをPCIスロットのカード及び/又はI/Oコントローラと相互作用するよう割当てるかを示すアドレスマップとする。
ブロック220によると、ホストはPCIバスに接続しているデバイスのリストを取得する。例えば、ホストは、システムに接続している物理又は実際のエンドポイント(図1に示したPCI Expressのエンドポイント120等)のリストを受信する。
ブロック230によると、仮想エンドポイントを、実際の物理エンドポイントとして、ホスト又は計算ノードに提示する。これにより、ホストはブロック240による2つの機能を実行する。第1の機能として、ホストは、下流ブリッジ後方にあるバスのバス番号を確保する。第2の機能として、ホストは、仮想デバイス用に線形メモリマップでメモリを確保する。
こうして、ホストは、コンピュータシステムにインストールされたデバイス及び仮想デバイス全てに空間及びバス番号を割当てるメモリマップを作成する。メモリマップは、まだPCIバスに接続されていない任意の将来的なデバイス(例えば、PCIホットプラグ可能なデバイス)が使用可能な空間を含む。更に、PCIバス番号付けには、まだPCIバスに接続されていない任意の将来的なデバイスが使用可能な番号も含む。
図3は、例示的な実施形態による、確保したPCIバス番号及びメモリ空間を、ホットプラグしたPCIデバイスに発行するフローチャートである。
ブロック300によると、1つ又は複数のデバイスをコンピュータシステムにホットプラグする。例えば、エンドポイントをPCIブリッジ又はスイッチにホットプラグする。図1は、列挙後に実際の物理デバイスをスイッチ130に差し込み又は取付けできるPCI Expressの仮想エンドポイント125の例について、示している。
ブロック310によると、ホストが新たに追加されたデバイス又はエンドポイントを発見する。デバイスをポート又はスロットにホットプラグしたなら、仮想デバイスはもうホストに提示されない。つまり、実際の物理デバイスがその時点で接続されているので、下流ブリッジは、ブリッジに接続されているものとして仮想デバイスを提示しなくなる。
次に、ブロック320によると、ホストは新たに追加されたデバイスを、列挙中に仮想デバイス用に予め割当てた1つ又は複数のバス番号及びメモリに基づきセットアップする。例えば、ホストは、ポート又はスロットに割当てたバス番号をデバイスに提供し、対応するメモリ空間をそのポート又はスロット用に提供する。
デバイスがバス番号及びメモリ空間を備えたなら、デバイスは、ブロック330により、ポート又はスロットで使用可能になる。ホストは、この時点で別のポート又はスロットで別の新たなホットプラグデバイスに対応できる状態となり、その後ブロック300に戻る。
このプロセスにより、ホットプラグデバイスに対応可能なシステムに関する問題を解決できる。具体的には、新たなデバイスを追加した際に、メモリマップには新たに追加したホットプラグデバイス用の未使用又は使用可能な空間を既に含んでいるため、メモリマップを変更しなくて済む。そのため、コンピュータシステムでは、デバイスをホットプラグした後に、システムを再立ち上げ又は再起動する必要がない。従って、例示的な実施形態により、ホストを完全に再列挙する必要無く、共有I/Oシステムにおいてデバイスをホットプラグ可能となる。
定義:本明細書及び特許請求の範囲では、次の単語及び用語を以下の通り定義する。
単語「ブリッジ」は、同じプロトコル(例えば、イーサネット又はトークンリング)(イーサネットは登録商標)を用いて、2つのローカルエリアネットワーク(LAN)又はLANセグメントを接続するデバイスを意味する。例えば、ブリッジを、PCI/PCI−Xセグメント又はPCI Expressポートを内部コンポーネント相互接続部と又は別のPCI/PCI−Xバスセグメント若しくは別のPCI Expressポートと仮想的に或は実際に接続する機能とする。
用語「コンフィグレーション空間」は、PCIアーキテクチャ内のアドレス空間を意味する。コンフィグレーション空間のアドレスを有するパケットを使用して、デバイス内の機能(即ち、アドレスエンティティ)を構成する。
単語「下流」は、相互接続/システム要素(ポート/コンポーネント)の相対的な位置でルートコンプレックスから遠い位置を意味する。例えば、上流ポートではないスイッチのポートは、下流ポートとなる。ルートコンプレックスの全ポートは下流ポートとなる。このように、下流は、情報がルートコンプレックスから流れる情報流の方向も含む。
単語「エンドポイント」又は「エンドノード」は、異なるルールセットに従い動作するデバイス(アドレス可能な電子的エンティティ)又はデバイス群を意味する。
単語「ホットプラグ」、「ホットスワップ」等は、機械又はシステムの電子部品を継続動作させながら、取外し、交換できる能力を意味する。例えば、ホットスワップにより、1つ又は複数のデバイス(例えば、ハードドライブ)を、該デバイスを配置しているブレード全体又はエンクロージャの動作に影響を与えずに、交換或は修理可能となる。例えば、故障した場合に、個々のハードドライブをブレードから取外して、新たな又は異なるハードドライブと交換する。ブレードの継続動作を中断せずにエンクロージャ内に残したまま、新しいハードドライブをブレードに接続できる。
頭字語「PCI」は、Peripheral Component Interconnect(ペリフェラル コンポーネント インターコネクト)を意味する。PCI仕様には、バスの物理的属性、電気特性、バスタイミング、通信プロトコル等について記載されている。PCI−SIG(PCI Special Interest Group)が、様々なPCIアーキテクチャに関する仕様を、維持、管理している。
単語「ポート」は、コンポーネントとリンクとの間のインタフェース(即ち、2デバイス間の通信経路)を論理的に意味し、リンクを定義するチップに配設した送受信機群を物理的に意味する。
用語「ルートコンプレックス」は、ホストブリッジ及び1つ又は複数のポートを含むデバイス又はデバイス群を意味する。例えば、ホストコンピュータは、ルートコンプレックスである、PCIとホストをブリッジする機能を有する。ルートコンプレックスにより、CPUバス(ハイパートランスポート等)とPCIバスとの間にブリッジを提供する。
用語「ルートノード」は、ホストコンピュータ、コンピュータシステム、又はサーバを意味する。
単語「スイッチ」は、2つ以上のポートを接続して、パケットをポートからポートにルーティング可能にするデバイス又はデバイス群を意味する。設定ソフトウェアには、スイッチは、仮想のPCI−to−PCIブリッジ群として現れる。
単語「仮想」は、実在しないことを意味し、単なる概念的なもの(例えば、物理デバイス)を、物理的に実在するものと区別する。一例としては、事実上物理エンドポイントをバスに実際に接続していない場合に、ホストは、仮想エンドポイントを物理エンドポイントと見做し、検知する(想像上のデバイスだが、ホストが検出又は存在すると信じるデバイス)。仮想の反対は、実在又は物理的である。
単語「上流」は、相互接続/システム要素(ポート/コンポーネント)の相対的な位置でルートコンプレックスにより近い位置を意味する。例えば、トポロジ的にルートコンプレックスに最も近いスイッチのポートを、上流ポートとする。例えば、エンドポイントのみを含むコンポーネントのポートを、上流ポートとする。上流には、情報がルートコンプレックスへと流れる情報流の方向も含む。
例示的な1実施形態では、本明細書で記述した1つ又は複数のブロック又はステップを自動化する。つまり、装置、システム、及び方法は自動的に起動する。本明細書では、用語「自動化した」又は「自動的に」(及びこれらに類する用語)は、人間の介入、観察、取組み、決定の必要なく、コンピュータ及び/又は機械装置/電気装置を使用して、装置、システム、及び/又はプロセスを制御動作させることを意味する。
本発明の例示的な実施形態による方法は、例として提供するもので、本発明の範囲内で他の実施形態を限定すると解釈すべきものではない。例えば、図のブロック又は数字((1)、(2)等)は、特定の順序で進めねばならないステップとして、解釈すべきではない。更なるブロック/ステップを追加してもよく、幾つかのブロック/ステップを除去したもの、又はブロック/ステップの順序を変更したものも、依然として本発明の範囲内とする。更に、各図面中に記述した方法又はステップを、他の図面に加える、或は他の図面の方法又はステップと交換することもできる。更にまた、特定のデータ数値(特定の量、数、カテゴリ等)又は他の特定情報は、例示的な実施形態を記述するのに説明したように、解釈すべきである。そうした特定情報は、本発明を限定するために提供したものではない。
本発明による様々な実施形態では、実施形態を、方法、システム及び/又は装置として実行する。1例として、例示的な実施形態及びそれに関連するステップを、本明細書に記載した方法を実行する1つ又は複数のコンピュータソフトウェアプログラムとして実行する。ソフトウェアを、1つ又は複数のモジュール(コードサブルーチン、又はオブジェクト指向プログラミングで「オブジェクト」とも呼ぶ)として実行する。ソフトウェアの格納先は、個々の代替実施形態によって異なる。例えば、コンピュータ又はサーバの1プロセッサ又は複数のプロセッサが、CD−ROMドライブ、又はハードドライブ等の一種の長期記憶媒体から、ソフトウェアのプログラミングコードにアクセスする。ソフトウェアのプログラミングコードを、データ処理システムで使用するあらゆる既知の各種媒体や、ディスク、ハードドライブ、CD−ROM、ROM等を含む、半導体、磁気装置、光学デバイスといった記憶装置に、具現又は保存する。このコードを、そうした媒体で配信する、又はこのコードをユーザに、1コンピュータシステムのメモリ又はストレージから、何らかのネットワークを介して、他のコンピュータシステムに、かかる他のシステムのユーザが使用するために、配信する。或は、プログラミングコードを、メモリに具現し、このコードにプロセッサがバスを使用してアクセスする。ソフトウェアのプログラミングコードを、物理媒体のメモリに具現する、及び/又はソフトウェアコードをネットワークを介して配信する方法は、既知であり、本明細書では詳細には説明しない。
以上の記述は、本発明の原理及び様々な実施形態の例示を意図するものである。上記開示を完全に理解したなら、多くの変形例及び変更例が当業者には明らかになろう。以下の請求項は、そうした変形例及び変更例全てを包含すると解釈されるものとする。