(57)【特許請求の範囲】
【請求項１】
データ処理システム内で、入出力（Ｉ／Ｏ）仮想化を管理するための方法であって、
前記データ処理システム内で、前記データ処理システムのリソースの関連部分を有する１つ以上のクライアント・パーティションを作成するステップと、
前記データ処理システムに関連する１つ以上の入出力エンドポイントにより前記１つ以上の入出力エンドポイントの物理機能または仮想機能のうちの少なくとも１つを構成するように入出力仮想化管理動作を実行するステップと、
入出力仮想化管理パーティション（ＩＭＰ）から分離して、あるクライアント・パーティションが前記クライアント・パーティションに割り当てられていない前記１つ以上の入出力エンドポイントのリソースにアクセスするのを防止するための仮想仲介を使用して、前記１つ以上の入出力エンドポイントのリソースに対する前記入出力仮想化管理動作のアクセスを制御するステップと、
を含む方法。
【請求項２】
前記データ処理システム内で入出力仮想化管理パーティション（ＩＭＰ）を作成するステップであって、前記ＩＭＰは、前記データ処理システムに関連する１つ以上の入出力エンドポイントにより入出力仮想化管理動作を実行し、それにより、前記１つ以上の入出力エンドポイントの少なくとも１つの物理機能を管理し、前記１つ以上のクライアント・パーティションは、前記少なくとも１つの物理機能に対する入出力仮想化管理動作を実行することを許可されないステップ
をさらに含む、請求項１に記載の方法。
【請求項３】
１つ以上のクライアント・パーティションを作成する前記ステップと、前記ＩＭＰを作成する前記ステップが、前記仮想仲介によって実行され、前記仮想仲介が前記データ処理システムに関連するハイパーバイザである、請求項１に記載の方法。
【請求項４】
前記ハイパーバイザが、前記１つ以上の入出力エンドポイント内の物理機能および仮想機能用の構成空間にアクセスすることができ、前記ＩＭＰが、前記１つ以上の入出力エンドポイントにおいて、前記ＩＭＰに割り当てられた物理機能用の構成空間と、前記ＩＭＰに割り当てられた物理機能に属す仮想機能用の構成空間のみにアクセスすることができる、請求項３に記載の方法。
【請求項５】
前記ハイパーバイザが、前記１つ以上の入出力エンドポイントにおいて、あるクライアント・パーティションに割り当てられた仮想機能の構成空間に対する前記クライアント・パーティションによるアクセスを許可し、前記１つ以上の入出力エンドポイントにおいて、前記クライアント・パーティションに割り当てられていない仮想機能の構成空間に対する前記クライアント・パーティションによるアクセスをブロックする、請求項４に記載の方法。
【請求項６】
前記入出力仮想化管理動作の実行を指示するハードウェア管理コンソール（ＨＭＣ）から入力を受信するステップをさらに含む、請求項２に記載の方法。
【請求項７】
前記ＨＭＣからの前記入力が、新しい入出力エンドポイントを前記データ処理システムに追加するためにホット・プラグ動作を開始するためのコマンドであり、前記入出力仮想化管理動作を実行する前記ステップが、
前記新しい入出力エンドポイントの追加に基づいて前記１つ以上のクライアント・パーティションにリソースを割り振るステップと、
前記新しい入出力エンドポイントの追加に基づいて前記ＩＭＰを構成するステップと、
前記１つ以上のクライアント・パーティション内の少なくとも１つのクライアント・パーティションに前記新しい入出力エンドポイントの少なくとも１つの仮想機能を動的に追加するステップと、
を含む、請求項６に記載の方法。
【請求項８】
前記ＨＭＣからの前記入力が、前記データ処理システムから既存の入出力エンドポイントを除去するためにホット・プラグ動作を開始するためのコマンドであり、前記入出力仮想化管理動作を実行する前記ステップが、
除去すべき前記入出力エンドポイントの仮想機能に関連するリソースを有する前記１つ以上のクライアント・パーティション内の少なくとも１つのクライアント・パーティションを識別するステップと、
前記仮想機能と、前記仮想機能に関連するリソースを、前記少なくとも１つのクライアント・パーティションによる使用から除去するステップと、
物理機能と、前記物理機能に関連するリソースを、前記ＩＭＰによる使用から除去するステップと、
除去すべき前記入出力エンドポイントの電源を遮断するステップと、
を含む、請求項６に記載の方法。
【請求項９】
前記ＨＭＣからの前記入力が、前記データ処理システムを動的に再構成するためのコマンドであり、前記入出力仮想化管理動作を実行する前記ステップが、
前記１つ以上のクライアント・パーティション内の選択されたクライアント・パーティションに追加するための入出力エンドポイントの仮想機能の選択を受信するステップと、
前記選択されたクライアント・パーティション内で選択された仮想機能用のリソースをセットアップするステップと、
前記選択されたクライアント・パーティション内で前記選択された仮想機能用のデバイス・ドライバをロードするステップと、
を含む、請求項６に記載の方法。
【請求項１０】
前記ＨＭＣからの前記入力が、前記データ処理システムを動的に再構成するためのコマンドであり、前記入出力仮想化管理動作を実行する前記ステップが、
前記１つ以上のクライアント・パーティション内の選択されたクライアント・パーティションから除去するための入出力エンドポイントの仮想機能の選択を受信するステップと、
前記選択されたクライアント・パーティションによりさらに使用することから前記選択された仮想機能を除去するステップと、
前記選択されたクライアント・パーティション内で選択された仮想機能用のリソースを除去するステップと、
を含む、請求項６に記載の方法。
【請求項１１】
前記ＨＭＣからの前記入力が、入出力エンドポイントの選択された仮想機能に関連するネットワーク・アドレスを変更するためのコマンドであり、前記入出力仮想化管理動作を実行する前記ステップが、
前記選択された仮想機能に関連する物理機能を識別するステップと、
前記ＩＭＰに管理要求を送信するステップであって、前記管理要求が、前記選択された仮想機能の前記ネットワーク・アドレスを変更するためのアドレス情報を含むステップと、
前記管理要求内の前記アドレス情報に基づいて前記物理機能に関連するデバイス・ドライバを介して前記選択された仮想機能の前記ネットワーク・アドレスを変更するステップと、
を含む、請求項６に記載の方法。
【請求項１２】
前記入出力仮想化管理動作を実行する前記ステップが、
前記仮想仲介において、前記１つ以上のクライアント・パーティションのうちの１つのクライアント・パーティション内のデバイス・ドライバから、仮想機能エラー状態照会ファームウェア呼び出しを受信するステップと、
入出力エンドポイントの仮想機能のエラー状態を識別するエラー情報を前記仮想仲介から前記デバイス・ドライバに提供するステップと、
前記デバイス・ドライバにより、前記仮想仲介から受信した前記エラー情報をログ記録するステップと、
前記エラー状態を有する前記仮想機能をリセットするために前記デバイス・ドライバから前記データ処理システムのファームウェアに仮想機能リセット要求を送信するステップと、
リセット後に前記仮想機能を構成するステップと、
を含む、請求項１に記載の方法。
【請求項１３】
前記入出力仮想化管理動作を実行する前記ステップが、
前記仮想仲介により、クライアント・パーティション障害を検出するステップと、
クライアント・パーティション・リブート動作を実行すべきかどうかを判断するステップと、
前記クライアント・パーティションをリブートするべきではない場合に、前記１つ以上の入出力エンドポイントから故障クライアント・パーティションに関連する仮想機能リソースを除去し、前記除去された仮想機能リソースをフリー仮想機能リソース・プールに追加するステップと、
前記クライアント・パーティションをリブートするべきである場合に、前記仮想仲介により、前記故障クライアント・パーティションのリブート後に前記仮想機能リソースを前記故障クライアント・パーティションに再割り当てするステップと、
を含む、請求項１に記載の方法。
【請求項１４】
前記入出力仮想化管理動作を実行する前記ステップが、
前記ＩＭＰの障害を検出するステップと、
前記仮想仲介により、前記ＩＭＰのリブートを開始するステップと、
前記ＩＭＰの前記リブートが完了するまで前記ＩＭＰに割り当てられた物理機能に関連する仮想機能に関する前記１つ以上のクライアント・パーティションによるファームウェア呼び出しを停止するステップと、
前記ＩＭＰの前記リブートの完了後に前記１つ以上のクライアント・パーティションによるファームウェア呼び出しの停止を中断するステップと、
を含む、請求項１に記載の方法。
【請求項１５】
プロセッサと、
前記プロセッサに結合されたメモリとを含み、前記メモリが、前記プロセッサによって実行されたときに、前記プロセッサに、
データ処理システム内で前記データ処理システムのリソースの関連部分を有する１つ以上のクライアント・パーティションを作成するステップと、
前記データ処理システムに関連する１つ以上の入出力エンドポイントにより前記１つ以上の入出力エンドポイントの物理機能または仮想機能のうちの少なくとも１つを構成するように入出力仮想化管理動作を実行するステップと、
入出力仮想化管理パーティション（ＩＭＰ）から分離して、あるクライアント・パーティションが前記クライアント・パーティションに割り当てられていない前記１つ以上の入出力エンドポイントのリソースにアクセスするのを防止するための仮想仲介を使用して、前記１つ以上の入出力エンドポイントのリソースに対する前記入出力仮想化管理動作のアクセスを制御するステップと、
を実行させる命令を含む、データ処理システム。
【請求項１６】
前記命令が、前記プロセッサに、
前記データ処理システム内で入出力仮想化管理パーティション（ＩＭＰ）を作成するステップであって、前記ＩＭＰは、前記データ処理システムに関連する１つ以上の入出力エンドポイントにより入出力仮想化管理動作を実行し、それにより、前記１つ以上の入出力エンドポイントの少なくとも１つの物理機能を管理し、前記１つ以上のクライアント・パーティションは、前記少なくとも１つの物理機能に対する入出力仮想化管理動作を実行することを許可されないステップ
をさらに実行させる、請求項１５に記載のシステム。
【請求項１７】
１つ以上のクライアント・パーティションを作成する前記ステップと、前記ＩＭＰを作成する前記ステップが、前記仮想仲介によって実行され、前記仮想仲介が前記データ処理システムに関連するハイパーバイザである、請求項１５に記載のシステム。
【請求項１８】
前記ハイパーバイザが、前記１つ以上の入出力エンドポイント内の物理機能および仮想機能用の構成空間にアクセスすることができ、前記ＩＭＰが、前記１つ以上の入出力エンドポイントにおいて、前記ＩＭＰに割り当てられた物理機能用の構成空間と、前記ＩＭＰに割り当てられた物理機能に属す仮想機能用の構成空間のみにアクセスすることができる、請求項１７に記載のシステム。
【請求項１９】
前記ハイパーバイザが、前記１つ以上の入出力エンドポイントにおいて、あるクライアント・パーティションに割り当てられた仮想機能の構成空間に対する前記クライアント・パーティションによるアクセスを許可し、前記１つ以上の入出力エンドポイントにおいて、前記クライアント・パーティションに割り当てられていない仮想機能の構成空間に対する前記クライアント・パーティションによるアクセスをブロックする、請求項１８に記載のシステム。
【請求項２０】
前記命令が、前記プロセッサに、前記入出力仮想化管理動作の実行を指示するハードウェア管理コンソール（ＨＭＣ）から入力を受信するステップをさらに実行させる、請求項１６に記載のシステム。
【請求項２１】
前記ＨＭＣからの前記入力が、新しい入出力エンドポイントを前記データ処理システムに追加するためにホット・プラグ動作を開始するためのコマンドであり、前記命令が、
前記新しい入出力エンドポイントの追加に基づいて前記１つ以上のクライアント・パーティションにリソースを割り振るステップと、
前記新しい入出力エンドポイントの追加に基づいて前記ＩＭＰを構成するステップと、
前記１つ以上のクライアント・パーティション内の少なくとも１つのクライアント・パーティションに前記新しい入出力エンドポイントの少なくとも１つの仮想機能を動的に追加するステップと、
により、前記プロセッサに前記入出力仮想化管理動作を実行させる、請求項２０に記載のシステム。
【請求項２２】
前記命令が、
前記仮想仲介において、前記１つ以上のクライアント・パーティションのうちの１つのクライアント・パーティション内のデバイス・ドライバから、仮想機能エラー状態照会ファームウェア呼び出しを受信するステップと、
入出力エンドポイントの仮想機能のエラー状態を識別するエラー情報を前記仮想仲介から前記デバイス・ドライバに提供するステップと、
前記デバイス・ドライバにより、前記仮想仲介から受信した前記エラー情報をログ記録するステップと、
前記エラー状態を有する前記仮想機能をリセットするために前記デバイス・ドライバから前記データ処理システムのファームウェアに仮想機能リセット要求を送信するステップと、
リセット後に前記仮想機能を構成するステップと、
により、前記プロセッサに前記入出力仮想化管理動作を実行させる、請求項１５に記載のシステム。
【請求項２３】
前記命令が、
前記仮想仲介により、クライアント・パーティション障害を検出するステップと、
クライアント・パーティション・リブート動作を実行すべきかどうかを判断するステップと、
前記クライアント・パーティションをリブートするべきではない場合に、前記１つ以上の入出力エンドポイントから故障クライアント・パーティションに関連する仮想機能リソースを除去し、前記除去された仮想機能リソースをフリー仮想機能リソース・プールに追加するステップと、
前記クライアント・パーティションをリブートするべきである場合に、前記仮想仲介により、前記故障クライアント・パーティションのリブート後に前記仮想機能リソースを前記故障クライアント・パーティションに再割り当てするステップと、
により、前記プロセッサに前記入出力仮想化管理動作を実行させる、請求項１５に記載のシステム。
【請求項２４】
前記命令が、
前記ＩＭＰの障害を検出するステップと、
前記仮想仲介により、前記ＩＭＰのリブートを開始するステップと、
前記ＩＭＰの前記リブートが完了するまで前記ＩＭＰに割り当てられた物理機能に関連する仮想機能に関する前記１つ以上のクライアント・パーティションによるファームウェア呼び出しを停止するステップと、
前記ＩＭＰの前記リブートの完了後に前記１つ以上のクライアント・パーティションによるファームウェア呼び出しの停止を中断するステップと、
により、前記プロセッサに前記入出力仮想化管理動作を実行させる、請求項１５に記載のシステム。
【請求項２５】
コンピュータに請求項１〜１４のいずれか１項に記載のステップを実行させるためのコンピュータ実行可能なプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、改良されたデータ処理システムおよび方法に関する。より具体的には、本発明は、ハイパーバイザ内の仮想仲介（virtual intermediary）を介して、ならびに入出力仮想化（ＩＯＶ：input/outputvirtualization）管理パーティション内の管理プログラムを介して、周辺装置相互接続（ＰＣＩ：PeripheralComponent Interconnect）ＩＯＶアダプタなどのＩＯＶアダプタを管理するためのシステムおよび方法を対象とする。
【背景技術】
【０００２】
最新のコンピューティング・デバイスは、そもそも１９９０年代にインテル社によって作成された周辺装置相互接続規格の何らかのバージョンまたは実装例を使用する入出力（Ｉ／Ｏ：input/output）アダプタおよびバスを使用する。周辺装置相互接続（ＰＣＩ）規格では、コンピュータのマザーボードに周辺装置を接続するためのコンピュータ・バスを規定している。ＰＣＩエクスプレス（PCI Express）すなわちＰＣＩｅは、既存のＰＣＩプログラミング概念を使用するＰＣＩコンピュータ・バスの一実装例であるが、そのコンピュータ・バスは、まったく異なり、さらに高速のシリアル物理層通信プロトコルを基礎とする。この物理層は、複数の装置間で共用可能な双方向バスではなく、正確に２つの装置に接続される単一の単方向リンクから構成される。
【０００３】
図１は、ＰＣＩｅ規格によるＰＣＩエクスプレス（ＰＣＩｅ）ファブリック・トポロジを組み込むシステムを例示する模範的な図である。図１に図示されている通り、システム１００は、ルート複合体１３０に結合されたホスト・プロセッサ（ＣＰＵ）１１０およびメモリ１２０からなり、次にこのルート複合体１３０は、ＰＣＩｅエンドポイント１４０（「エンドポイント（endpoint）」という用語は、ＰＣＩｅ対応入出力アダプタを指すためにＰＣＩｅ規格で使用されている）、ＰＣＩｅエクスプレス−ＰＣＩブリッジ１５０、および１つ以上の相互接続スイッチ１６０のうちの１つ以上に結合されている。ルート複合体１３０は、ＣＰＵ／メモリを入出力アダプタに接続する入出力階層のルートを示す。ルート複合体１３０は、ホスト・ブリッジと、０個以上のルート複合体統合エンドポイントと、０個以上のルート複合体イベント・コレクタと、１つ以上のルート・ポートとを含む。各ルート・ポートは、個別の入出力階層をサポートする。入出力階層は、ルート複合体１３０と、０個以上の相互接続スイッチ１６０またはブリッジ１５０あるいはその両方（スイッチまたはＰＣＩｅファブリックを含む）と、エンドポイント１４０、１７０、１８２〜１８８などの１つ以上のエンドポイントからなる可能性がある。ＰＣＩおよびＰＣＩｅに関する詳細については、ｗｗｗ．ｐｃｉｓｉｇ．ｃｏｍにある周辺装置相互接続分科会（ＰＣＩ−ＳＩＧ：peripheral component interconnect special interest group）のＷｅｂサイトから入手可能なＰＣＩおよびＰＣＩｅ規格を参照する。
【０００４】
ＰＣＩおよびＰＣＩｅ規格に加えて、ＰＣＩ−ＳＩＧは、いくつかのロジカル・パーティション（ＬＰＡＲ：logical partition）によって共用可能な入出力アダプタ（ＩＯＡ：I/Oadapter）を設計する方法を定義するための入出力仮想化（ＩＯＶ）規格も定義した。ＬＰＡＲは、各リソース・セットがそれ自体のオペレーティング・システム・インスタンスおよびアプリケーションにより独立して動作できるように、複数のリソース・セットに分割されたコンピュータのプロセッサ、メモリ、および記憶域の一区分である。作成可能なロジカル・パーティションの数は、使用可能なシステムのプロセッサ・モデルおよびリソース次第である。典型的には、テストおよび実稼働環境などを分離するために、データベース動作、クライアント／サーバ動作などの種々の目的のためにパーティションが使用される。各パーティションは、他のパーティションが個別マシン内にある場合のように他のパーティションと通信することができる。ＬＰＡＲをサポートする最新システムでは、いくつかのリソースを複数のＬＰＡＲ間で共用することができる。前述の通り、ＰＣＩおよびＰＣＩｅ規格では、共用可能なリソースの１つは、入出力仮想化メカニズムを使用する入出力アダプタである。
【０００５】
ＰＣＩ−ＳＩＧは、いくつかのＬＰＡＲによって共用可能なＩＯＡを設計する方法を定義するための規格を提供しているが、この規格は、ＩＯＡをホスト・システム内に接続する方法を定義していない。その上、この規格は、入出力仮想化を使用するＩＯＡの共用機能を管理する方法を指定していない。これは、ＰＣＩ−ＳＩＧ規格がルート複合体の下にあるＰＣＩｅファブリックの動作に関する設定規格に関係しているからである。換言すれば、ＰＣＩ−ＳＩＧは、システム・ハウスの領域で考慮されるので、ルート複合体以上に関する規格の定義を提供していない。すなわち、たとえば、インテル・プラットフォーム、ＩＢＭ  Ｐｏｗｅｒ（商標）プラットフォーム、およびＳｐａｒｃプラットフォームのそれぞれは、ＰＣＩ−ＳＩＧ規格に明記されていない種々のシステム実装要件を有する可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
例示的な諸実施形態は、入出力仮想化（ＩＯＶ）管理パーティション内の機能管理とともにハイパーバイザ内の仮想仲介を介して、ＩＯＶアダプタを管理するためのシステムおよび方法を提供する。例示的な諸実施形態のメカニズムは、１つの入出力（Ｉ／Ｏ）ファブリックが２つ以上のロジカル・パーティション（ＬＰＡＲ）によって共用され、各ＬＰＡＲが潜在的に１つの入出力アダプタ（ＩＯＡ）を他のＬＰＡＲと共用できる状況に対処するものである。例示的な諸実施形態は、入出力仮想化管理パーティション（ＩＭＰ：I/O virtualization management partition）において、１つのＬＰＡＲが物理機能（ＰＦ：physical function）により入出力仮想化対応ＩＯＡの共用機能を制御するためのメカニズムを定義し、仮想機能（ＶＦ：virtual function）は通常の入出力動作のためにクライアント・パーティションに直接割り当てられる。
【課題を解決するための手段】
【０００７】
特に、例示的な諸実施形態のメカニズムにより、各ＬＰＡＲには、それに割り当てられた仮想機能（ＶＦ）にアクセスするため、ならびにそれに割り当てられたＶＦから直接、割り込みを受信するために、それ自体の個別アドレス空間が割り当てられ、各ＬＰＡＲの認識では、通常の入出力動作のためにそれがそれ自体の独立ＩＯＡを有することになっている。ＰＣＩエクスプレス（ＰＣＩｅ）入出力仮想（ＩＯＶ：I/O Virtual）アダプタなどのＩＯＡの各ＶＦは、複数のＬＰＡＲの全域で共用することができる。例示的な諸実施形態のメカニズムは、入出力仮想化管理パーティション（ＩＭＰ）にＩＯＶアダプタの物理機能（ＰＦ）を割り当てることにより、そのＰＦを介してＩＯＶアダプタの共用リソースを管理するための機能を提供する。加えて、ＩＭＰは、共通ＶＦ機能にアクセスするためにＰＦへのインターフェース（たとえば、ネットワーク・アダプタ用のＶＦのためのネットワーク・アドレス）として動作し、ここではアダプタ・サウスサイド管理（adapter south-side management）という。
【０００８】
ハイパーバイザは、ＩＭＰ内で実行されるコードに対してＩＯＶ独立機能を提供する。ＩＭＰは、ハイパーバイザがそのサイズ、頑強性、およびアップグレード性を犠牲にする必要なしに、装置固有コードを含むことができる。ハイパーバイザは、ＩＯＶアダプタの制御機能の共用および制御のための仮想仲介機能を提供する。より具体的には、ハイパーバイザ内で実行されるコードは、ＶＦエラー処理動作、ＶＦリセット動作、および構成動作を完全に管理するためにＶＦへの仮想仲介（ＶＩ）として動作する。
【０００９】
例示的な一実施形態では、入出力（Ｉ／Ｏ）仮想化を管理するための方法が提供される。この方法は、データ処理システム内で１つ以上のクライアント・パーティションを作成するステップであって、各クライアント・パーティションがデータ処理システムのリソースの関連部分を有するステップと、データ処理システムに関連する１つ以上の入出力エンドポイントにより入出力仮想化管理動作を実行するステップとを含むことができる。入出力仮想化管理動作は、１つ以上の入出力エンドポイントの物理機能または仮想機能のうちの少なくとも１つを構成するように動作することができる。この方法は、入出力仮想化管理パーティション（ＩＭＰ）から分離した仮想仲介を使用して、１つ以上の入出力エンドポイントのリソースに対する入出力仮想化管理動作のアクセスを制御するステップをさらに含むことができる。仮想仲介は、あるクライアント・パーティションがそのクライアント・パーティションに割り当てられていない１つ以上の入出力エンドポイントのリソースにアクセスするのを防止することができる。
【００１０】
この方法は、データ処理システム内で入出力仮想化管理パーティション（ＩＭＰ）を作成するステップをさらに含むことができる。ＩＭＰは、データ処理システムに関連する１つ以上の入出力エンドポイントにより入出力仮想化管理動作を実行することができ、それにより、１つ以上の入出力エンドポイントの少なくとも１つの物理機能を管理することができる。１つ以上のクライアント・パーティションは、少なくとも１つの物理機能に対する入出力仮想化管理動作を実行することを許可されない可能性がある。
【００１１】
１つ以上のクライアント・パーティションを作成するステップと、ＩＭＰを作成するステップは、仮想仲介によって実行することができる。この仮想仲介は、データ処理システムに関連するハイパーバイザにすることができる。ハイパーバイザは、１つ以上の入出力エンドポイント内の物理機能および仮想機能用の構成空間にアクセスすることができる。ＩＭＰは、１つ以上の入出力エンドポイントにおいて、ＩＭＰに割り当てられた物理機能用の構成空間と、ＩＭＰに割り当てられた物理機能に属す仮想機能用の構成空間のみにアクセスすることができる。ハイパーバイザは、１つ以上の入出力エンドポイントにおいて、あるクライアント・パーティションに割り当てられた仮想機能の構成空間に対するそのクライアント・パーティションによるアクセスを許可することができ、１つ以上の入出力エンドポイントにおいて、クライアント・パーティションに割り当てられていない仮想機能の構成空間に対するそのクライアント・パーティションによるアクセスをブロックすることができる。
【００１２】
この方法は、入出力仮想化管理動作の実行を指示するハードウェア管理コンソール（ＨＭＣ：hardware management console）から入力を受信するステップをさらに含むことができる。ＨＭＣからの入力は、新しい入出力エンドポイントをデータ処理システムに追加するためにホット・プラグ動作を開始するためのコマンドにすることができる。このような場合、入出力仮想化管理動作を実行するステップは、新しい入出力エンドポイントの追加に基づいて１つ以上のクライアント・パーティションにリソースを割り振るステップと、新しい入出力エンドポイントの追加に基づいてＩＭＰを構成するステップと、１つ以上のクライアント・パーティション内の少なくとも１つのクライアント・パーティションに新しい入出力エンドポイントの少なくとも１つの仮想機能を動的に追加するステップとを含むことができる。
【００１３】
ＨＭＣからの入力は、データ処理システムから既存の入出力エンドポイントを除去するためにホット・プラグ動作を開始するためのコマンドにすることができる。このような場合、入出力仮想化管理動作を実行するステップは、除去すべき入出力エンドポイントの仮想機能に関連するリソースを有する１つ以上のクライアント・パーティション内の少なくとも１つのクライアント・パーティションを識別するステップと、仮想機能と、仮想機能に関連するリソースを、少なくとも１つのクライアント・パーティションによる使用から除去するステップとを含むことができる。入出力仮想化管理動作を実行するステップは、物理機能と、物理機能に関連するリソースを、ＩＭＰによる使用から除去するステップと、除去すべき入出力エンドポイントの電源を遮断するステップとをさらに含むことができる。
【００１４】
ＨＭＣからの入力は、データ処理システムを動的に再構成するためのコマンドにすることができる。このような場合、入出力仮想化管理動作を実行するステップは、１つ以上のクライアント・パーティション内の選択されたクライアント・パーティションに追加するための入出力エンドポイントの仮想機能の選択を受信するステップと、選択されたクライアント・パーティション内で選択された仮想機能用のリソースをセットアップするステップと、選択されたクライアント・パーティション内で選択された仮想機能用のデバイス・ドライバをロードするステップとを含むことができる。
【００１５】
ＨＭＣからの入力は、データ処理システムを動的に再構成するためのコマンドにすることができる。このような場合、入出力仮想化管理動作を実行するステップは、１つ以上のクライアント・パーティション内の選択されたクライアント・パーティションから除去するための入出力エンドポイントの仮想機能の選択を受信するステップと、選択されたクライアント・パーティションによりさらに使用することから選択された仮想機能を除去するステップと、選択されたクライアント・パーティション内で選択された仮想機能用のリソースを除去するステップとを含むことができる。
【００１６】
ＨＭＣからの入力は、入出力エンドポイントの選択された仮想機能に関連するネットワーク・アドレスを変更するためのコマンドにすることができる。このような場合、入出力仮想化管理動作を実行するステップは、選択された仮想機能に関連する物理機能を識別するステップと、ＩＭＰに管理要求を送信するステップとを含むことができる。管理要求は、選択された仮想機能のネットワーク・アドレスを変更するためのアドレス情報を含むことができる。入出力仮想化管理動作を実行するステップは、管理要求内のアドレス情報に基づいて物理機能に関連するデバイス・ドライバを介して選択された仮想機能のネットワーク・アドレスを変更するステップをさらに含むことができる。
【００１７】
入出力仮想化管理動作を実行するステップは、仮想仲介において、１つ以上のクライアント・パーティションのうちの１つのクライアント・パーティション内のデバイス・ドライバから、仮想機能エラー状態照会ファームウェア呼び出しを受信するステップと、入出力エンドポイントの仮想機能のエラー状態を識別するエラー情報を仮想仲介からデバイス・ドライバに提供するステップとを含むことができる。その上、入出力仮想化管理動作を実行するステップは、デバイス・ドライバにより、仮想仲介から受信したエラー情報をログ記録するステップと、エラー状態を有する仮想機能をリセットするためにデバイス・ドライバからデータ処理システムのファームウェアに仮想機能リセット要求を送信するステップと、リセット後に仮想機能を構成するステップとを含むことができる。
【００１８】
入出力仮想化管理動作を実行するステップは、仮想仲介により、クライアント・パーティション障害を検出するステップと、クライアント・パーティション・リブート動作を実行すべきかどうかを判断するステップと、クライアント・パーティションをリブートするべきではない場合に、１つ以上の入出力エンドポイントから故障クライアント・パーティションに関連する仮想機能リソースを除去するステップと、除去された仮想機能リソースをフリー仮想機能リソース・プールに追加するステップとを含むことができる。その上、入出力仮想化管理動作を実行するステップは、クライアント・パーティションをリブートするべきである場合に、仮想仲介により、故障クライアント・パーティションのリブート後に仮想機能リソースを故障クライアント・パーティションに再割り当てするステップを含むことができる。
【００１９】
さらに、入出力仮想化管理動作を実行するステップは、ＩＭＰの障害を検出するステップと、仮想仲介により、ＩＭＰのリブートを開始するステップとを含むことができる。入出力仮想化管理動作を実行するステップは、ＩＭＰのリブートが完了するまでＩＭＰに割り当てられた物理機能に関連する仮想機能に関する１つ以上のクライアント・パーティションによるファームウェア呼び出しを停止するステップと、ＩＭＰのリブートの完了後に１つ以上のクライアント・パーティションによるファームウェア呼び出しの停止を中断するステップとをさらに含むことができる。
【００２０】
他の例示的な諸実施形態では、そこにコンピュータ可読プログラムが記録されたコンピュータ記録可能媒体を含むコンピュータ・プログラム（computer program product）が提供される。このコンピュータ可読プログラムは、コンピューティング・デバイス上で実行されたときに、方法の例示的な実施形態に関して上記で概要を示した動作のうちの様々なものおよびそれらの組み合わせをコンピューティング・デバイスに実行させる。
【００２１】
さらに他の例示的な実施形態では、装置が提供される。この装置は、プロセッサと、プロセッサに結合されたメモリとを含むことができる。このメモリは、プロセッサによって実行されたときに、方法の例示的な実施形態に関して上記で概要を示した動作のうちの様々なものおよびそれらの組み合わせをプロセッサに実行させる命令を含むことができる。
【００２２】
本発明の上記その他の特徴および利点は、本発明の模範的な諸実施形態に関する以下の詳細な説明に記載されるか、または以下の詳細な説明を考慮して当業者にとって明白なものになるであろう。
【００２３】
本発明ならびに本発明の好ましい使用態様と追加の目的および利点については、添付図面に併せて読んだときに、例示的な諸実施形態に関する以下の詳細な説明を参照することにより最も良く理解されるであろう。
【発明を実施するための最良の形態】
【００２４】
例示的な諸実施形態は、ハイパーバイザ内の仮想仲介を介して、ならびに入出力仮想化（ＩＯＶ）管理パーティション内の管理プログラムを介して、ＩＯＶアダプタを管理するためのメカニズムを提供する。したがって、例示的な諸実施形態のメカニズムを理解するために、ハイパーバイザまたはその他の仮想化プラットフォームを使用するシステム内で入出力仮想化をどのように実装できるかをまず理解することが重要である。周辺装置相互接続エクスプレス（ＰＣＩｅ）アダプタまたはエンドポイントに関して例示的な諸実施形態を説明するが、本発明はこれらに限定されないことを認識されたい。むしろ、例示的な諸実施形態のメカニズムは、入出力アダプタ内で入出力仮想化をサポートする任意の入出力ファブリックで実装することができる。その上、ハイパーバイザが使用される実装例に関して例示的な諸実施形態を説明するが、本発明はこれに限定されないことを認識されたい。それとは反対に、ハイパーバイザ以外のその他のタイプの仮想化プラットフォームは、現在知られているかまたは今後開発されるソフトウェア、ハードウェア、またはソフトウェアとハードウェアの任意の組み合わせのいずれで実装されるとしても、本発明の精神および範囲を逸脱せずに使用することができる。
【００２５】
図２は、当技術分野で一般に知られているシステム仮想化を例示する模範的な図である。システム仮想化は、各リソース・セットがそれ自体のシステム・イメージ・インスタンスおよびアプリケーションにより独立して動作する、物理システムのプロセッサ、メモリ、入出力アダプタ、記憶域、およびその他のリソースの一区分である。このようなシステム仮想化では、仮想リソースは、物理リソースから構成され、物理リソースのプロキシ、たとえば、同じ外部インターフェースおよび機能を有し、構築されたインターフェース／機能を備えたメモリ、ディスク・ドライブ、その他のハードウェア・コンポーネントとして動作する。システム仮想化は、典型的には、仮想リソースを作成し、それを物理リソースにマッピングする仮想化層を使用し、それにより、仮想リソース間の分離を提供する。仮想化層は、典型的には、ソフトウェア、ファームウェア、ハードウェア・メカニズムのうちの１つまたはこれらの組み合わせとして提供される。
【００２６】
図２に図示されている通り、典型的には仮想化システムでは、アプリケーション２１０は、汎用または特殊目的オペレーティング・システムなどのソフトウェア・コンポーネントであるシステム・イメージ（ＳＩ：system image）２２０と通信し、それにより特定の仮想および物理リソースが割り当てられる。システム・イメージ２２０は、単一のＳＩインスタンスを実行するために必要な物理または仮想化リソース、たとえば、仮想化プロセッサ、メモリ、入出力アダプタ、記憶域などからなる仮想システム２３０に関連付けられる。
【００２７】
システム・イメージ２２０は、仮想システム２３０の使用を介して、仮想化層２４０を経由して物理システム・リソース２５０にアクセスする。仮想化層２４０は、ＳＩへのリソースの割り振りを管理し、他のＳＩによるアクセスからＳＩに割り当てられたリソースを分離する。この割り振りおよび分離は、仮想化層２４０によって実行されるリソース・マッピングと、仮想化層２４０によって維持される１つ以上のリソース・マッピング・データ構造に基づいて実行される場合が多い。
【００２８】
このような仮想化を使用すると、入出力動作および入出力リソースの仮想化を可能にすることができる。すなわち、入出力仮想化（ＩＯＶ）に関しては、部分的にまたは全面的にハイパーバイザとして実装可能な仮想化層２４０を使用して、２つ以上のＳＩにより、単一の物理入出力装置を共用することができる。ハイパーバイザは、たとえば、ＳＩからの構成動作、入出力動作、およびメモリ動作と、ＳＩへの直接メモリ・アクセス（ＤＭＡ：direct memory access）動作、完了動作、および割り込み動作のうちの１つ以上について仲介することにより、ＩＯＶをサポートするために使用される、ソフトウェア、ファームウェアなどにすることができる。
【００２９】
図３は、仮想化層を使用して、ＰＣＩルート複合体の入出力を仮想化するための第１の手法を例示する模範的な図である。図３に図示されている通り、ホスト・プロセッサ・セット３１０は、チップ、マザーボード、ブレードなどの１つ以上のプロセッサにすることができ、それによりアプリケーション（図示せず）がＰＣＩｅエンドポイント３７０〜３９０などのシステム・リソースにアクセスできる複数のシステム・イメージ３２０〜３３０をサポートすることができる。システム・イメージは、仮想化層３４０、ＰＣＩｅルート複合体３５０、および１つ以上のＰＣＩｅスイッチ３６０またはその他のＰＣＩｅファブリック・エレメントあるいはその両方を介して仮想化リソースと通信する。
【００３０】
図３に例示されている手法により、仮想化層３４０は、部分的にまたは全面的にハイパーバイザまたはその他のタイプの仮想化プラットフォームとして実装可能であり、すべての入出力トランザクションに関わり、すべての入出力仮想化機能を実行する。たとえば、仮想化層３４０は、様々なＳＩの入出力キューからの入出力要求をＰＣＩｅエンドポイント３７０〜３９０内の単一のキューに多重化する。したがって、仮想化層３４０は、ＳＩ３２０〜３３０と物理ＰＣＩｅエンドポイント３７０〜３９０との間のプロキシとして動作する。
【００３１】
図４は、最初から共用されるＰＣＩ入出力アダプタを使用して、ＰＣＩルート複合体の入出力を仮想化するための第２の手法を例示する模範的な図である。図４に図示されている通り、ホスト・プロセッサ・セット４１０は、チップ、マザーボード、ブレードなどの１つ以上のプロセッサにすることができ、それによりアプリケーション（図示せず）がＰＣＩｅ入出力仮想化（ＩＯＶ）エンドポイント４７０〜４９０などのシステム・リソースにアクセスできる複数のシステム・イメージ４２０〜４３０をサポートすることができる。システム・イメージ４２０〜４３０は、ＰＣＩｅルート複合体４４０および１つ以上のＰＣＩｅスイッチ４６０またはその他のＰＣＩｅファブリック・エレメントあるいはその両方を介して仮想化リソースと通信する。
【００３２】
ＰＣＩｅルート複合体４４０は、１つ以上のアドレス変換および保護テーブル・データ構造、割り込みテーブル・データ構造などを含むことができ、ＩＯＶ対応エンドポイント４７０〜４９０による入出力動作の仮想化を容易にするルート複合体仮想化イネーブラ（ＲＣＶＥ：root complex virtualization enabler）４４２を含む。アドレス変換および保護テーブル・データ構造は、たとえば、仮想化リソースに関する仮想アドレスと実アドレスとのアドレス変換を実行し、仮想リソースからＳＩへのマッピングに基づいて仮想リソースへのアクセスを制御し、その他の仮想化動作を実行するために、ＰＣＩｅルート複合体４４０が使用することができる。これらのルート複合体割り込みテーブル・データ構造は、ＰＣＩｅメモリ・アドレス空間によりアクセス可能であり、たとえば、ＳＩに関連する適切な割り込みハンドラに割り込みをマッピングするために使用される。
【００３３】
図３に図示されている手法のように、図４の仮想化構造にも仮想化層４５０が提供される。仮想化層４５０は、ＰＣＩｅスイッチ４６０に結合可能な非ＩＯＶ対応ＰＣＩｅエンドポイントとともに使用される。すなわち、仮想化層４５０は、部分的にまたは全面的にハイパーバイザまたはその他の仮想化プラットフォームとして実装可能であり、固有のすなわち、エンドポイント内部の入出力仮想化（ＩＯＶ）用のサポートを備えていないＰＣＩｅエンドポイントについて図３に関して上述したものと同様に、ＰＣＩｅエンドポイントとともに使用される。
【００３４】
ＩＯＶ対応ＰＣＩｅエンドポイント４７０〜４９０の場合、仮想化層４５０は、主に構成トランザクションのために使用され、ＳＩから開始されるメモリ・マップ入出力（ＭＭＩＯ）動作またはＰＣＩｅエンドポイント４７０〜４９０から開始される直接メモリ・アクセス（ＤＭＡ）動作などのメモリ・アドレス空間動作に関わらない。それとは反対に、ＳＩ４２０〜４３０とエンドポイント４７０〜４９０との間のデータ転送は、仮想化層４５０による介入なしに直接実行される。ＳＩ４２０〜４３０とエンドポイント４７０〜４９０との間の直接入出力動作は、ＲＣＶＥ４４２およびＩＯＶ対応ＰＣＩｅエンドポイント４７０〜４９０の組み込み入出力仮想化ロジック、たとえば、物理機能および仮想機能を経由して可能になる。直接入出力動作を実行する能力により、入出力動作を実行できる速度が大幅に増加されるが、ＰＣＩｅエンドポイント４７０〜４９０が入出力仮想化をサポートすることが必要になる。
【００３５】
図５は、ＰＣＩｅ入出力仮想化（ＩＯＶ）対応エンドポイントの模範的な図である。図５に図示されている通り、ＰＣＩｅ  ＩＯＶエンドポイント５００は、それによりＰＣＩｅファブリックのＰＣＩｅスイッチなどとの通信が実行可能なＰＣＩｅポート５１０を含む。内部ルーティング５２０は、構成管理機能５３０および複数の仮想機能（ＶＦ）５４０〜５６０への通信経路を提供する。構成管理機能５３０は、仮想機能５４０〜５６０とは対照的に物理機能（ＰＦ）にすることができる。物理「機能」とは、この用語がＰＣＩ規格で使用されるように、単一の構成空間によって表される１組のロジックである。換言すれば、物理「機能」は、たとえば、分離不能リソース５７０内に設けることができるような、メモリ内のその機能の関連構成空間内に保管されたデータに基づいて構成可能な回路論理である。
【００３６】
構成管理機能５３０を使用して、仮想機能５４０〜５６０を構成することができる。仮想機能は、入出力仮想化対応エンドポイント内で、１つ以上の物理エンドポイント・リソース、たとえば、リンクを共用する機能であって、たとえば、他の機能とともにＰＣＩｅ  ＩＯＶエンドポイント５００の共用可能リソース・プール５８０内に設けることができる機能である。仮想機能は、ハイパーバイザによるランタイム介入なしに、システム・イメージからの入出力動作およびメモリ動作のためのシンクになることができ、システム・イメージ（ＳＩ）への直接メモリ・アクセス（ＤＭＡ）動作、完了動作、および割り込み動作のソースになることができる。
【００３７】
ＰＣＩｅエンドポイントは、ＰＣＩｅエンドポイントによってサポートされる「機能」に関する多種多様なタイプの構成を有することができる。たとえば、エンドポイントは、単一の物理機能（ＰＦ）、複数の独立ＰＦ、または複数の従属ＰＦをサポートすることができる。固有の入出力仮想化をサポートするエンドポイントでは、そのエンドポイントによってサポートされる各ＰＦは１つ以上の仮想機能（ＶＦ）に関連付けることができ、その仮想機能自体は他のＰＦに関連するＶＦに依存する可能性がある。
【００３８】
例示的な諸実施形態は、入出力仮想化（ＩＯＶ）管理パーティション内の機能管理とともにハイパーバイザ内の仮想仲介を介して、図５に図示されているＩＯＶ対応ＰＣＩｅエンドポイント５００などのＩＯＶアダプタを管理するためのシステムおよび方法を提供する。例示的な諸実施形態のメカニズムは、図４のＰＣＩｅスイッチ４６０などの１つ以上のＰＣＩｅスイッチを含むことができる１つの入出力（Ｉ／Ｏ）ファブリックが２つ以上のロジカル・パーティション（ＬＰＡＲ）によって共用され、各ＬＰＡＲが潜在的に１つの入出力アダプタ（ＩＯＡ）、たとえば、図４のＰＣＩｅエンドポイント４７０〜４９０を他のＬＰＡＲと共用できる状況に対処するものである。例示的な諸実施形態は、入出力仮想化管理パーティション（ＩＭＰ）において、１つのＬＰＡＲが物理機能（ＰＦ）により入出力仮想化対応ＩＯＡの共用機能を制御するためのメカニズムを定義し、仮想機能（ＶＦ）は通常の入出力動作のためにクライアント・パーティションに直接割り当てられる。
【００３９】
特に、例示的な諸実施形態のメカニズムにより、各ＬＰＡＲには、それに割り当てられた仮想機能（ＶＦ）にアクセスするため、ならびにそれに割り当てられたＶＦから直接、割り込みを受信するために、それ自体の個別アドレス空間が割り当てられ、各ＬＰＡＲの認識では、通常の入出力動作のためにそれがそれ自体の独立ＩＯＡを有することになっている。ＰＣＩエクスプレス（ＰＣＩｅ）入出力仮想（ＩＯＶ）アダプタまたは入出力エンドポイントなどのＩＯＡの１組のＶＦは、複数のＬＰＡＲの全域で共用することができ、各ＬＰＡＲはそれ自体のＶＦを取得する。例示的な諸実施形態のメカニズムは、入出力仮想化管理パーティション（ＩＭＰ）にそのＰＦを割り当てることにより、ＩＯＶアダプタ／エンドポイントの物理機能（ＰＦ）を介してＩＯＶアダプタまたは入出力エンドポイントの共用リソースを管理するための機能を提供する。加えて、ＩＭＰは、共通ＶＦ機能にアクセスするためにＰＦへのインターフェース（たとえば、ネットワーク・アダプタ用のＶＦのためのネットワーク・アドレス）として動作し、ここではアダプタ・サウスサイド管理という。
【００４０】
ハイパーバイザは、ＩＭＰ内で実行されるコードに対してＩＯＶ独立機能を提供する。ＩＭＰは、ハイパーバイザがそのサイズ、頑強性、およびアップグレード性を犠牲にする必要なしに、装置固有コードを含むことができる。ハイパーバイザは、ＩＯＶアダプタの制御機能の共用および制御のための仮想仲介機能を提供する。より具体的には、ハイパーバイザ内で実行されるコードは、ＶＦエラー処理動作、ＶＦリセット動作、および構成動作を完全に管理するためにＶＦへの仮想仲介（ＶＩ）として動作する。
【００４１】
図６は、例示的な一実施形態により、ＩＯＶ対応エンドポイントまたはアダプタが使用されるシステム構造の模範的な図である。図６に図示されているメカニズムは、図４に例示されているメカニズムに併せて実装することができる。たとえば、図６に図示されているＩＭＰ６０３は、図４のシステム・イメージ１  ４２０に関連して提供することができ、図６のクライアント・パーティション６０４は、図４のシステム・イメージ２  ４３０に関連して提供することができる。同様に、図６の入出力ファブリック６１１は図４のＰＣＩｅスイッチ４６０を含むことができ、ＩＯＶエンドポイント６１４は図４のＰＣＩｅエンドポイント４７０〜４９０のうちのいずれか１つと同様のものにすることができ、エンドポイント６１５および６１６は、図３のエンドポイント３７０〜３９０など、ＩＯＶ対応エンドポイントまたは非ＩＯＶ対応エンドポイントにすることができる。
【００４２】
図６に図示されている通り、システム６０１は、任意のデータ処理装置、たとえば、サーバ、クライアント・コンピューティング・デバイスなどにすることができるホスト・システム６２６と、１つまたは複数の通信リンクと１つ以上のスイッチを含むことができる入出力ファブリック６１１と、例示的な一実施形態ではＰＣＩｅ入出力エンドポイントにすることができる１つ以上の入出力エンドポイント６１４〜６１６とを含み、入出力エンドポイント６１４はＩＯＶ対応エンドポイントであり、残りのエンドポイント６１５〜６１６はＩＯＶ対応エンドポイントまたは非ＩＯＶ対応エンドポイントにすることができる。ホスト・システム６２６は、データ処理装置の基礎ハードウェアであるプラットフォーム・ハードウェア６１０と、ハイパーバイザ６２５と、ロジカル・パーティション（ＬＰＡＲ）６０３および６０４と、対応するパーティション・ファームウェア（ＰＦＷ：partition firmware）６２３および６２４とを含む。本明細書ではハイパーバイザ６２５による使用に関して例示的な諸実施形態を説明しているが、本発明の精神および範囲を逸脱せずに他のタイプの仮想化プラットフォームを使用できることが認識されるであろう。
【００４３】
ハイパーバイザ６２５は、例示的な一実施形態では、プラットフォーム・ハードウェア６１０上で実行されるコードにすることができ、プラットフォームのファームウェアの一部になる。同様に、パーティション・ファームウェア（ＰＦＷ）６２３〜６２４も、プラットフォームのファームウェアの一部になる可能性があるが、それらはＬＰＡＲ内で実行されるＬＰＡＲコードの一部であると論理的に見なされるので、ＬＰＡＲ６０３および６０４に関連して図示されている。
【００４４】
ＬＰＡＲ６０３および６０４は、リソースおよびＬＰＡＲ内で実行されるオペレーティング・システム・イメージまたはインスタンスを割り振っている。加えて、ＬＰＡＲ６０３および６０４は、ＬＰＡＲ内でその他のアプリケーション、ソフトウェア、コードなどを実行することができる。たとえば、例示的な諸実施形態に対する特定の重要性により、ＬＰＡＲのうちの１つ、たとえば、ＬＰＡＲ６０３は、そのＬＰＡＲ６０３にＩＯＶ管理パーティション（ＩＭＰ）６０３として動作させるコードを実行する。その他のＬＰＡＲ６０４はクライアント・パーティションとして動作することができる。図６には１つのＩＭＰ６０３と１つのクライアント・パーティション６０４のみが図示されているが、例示的な諸実施形態の精神および範囲を逸脱せずにホスト・システム６２６内に２つ以上のＩＭＰ６０３およびクライアント・パーティション６０４を設けることができることを認識されたい。
【００４５】
ハイパーバイザ６２５は、ＩＯＶエンドポイント６１４の構成空間６１９、６２１と、入出力ファブリック６１１の構成空間６１７にアクセスできる。「構成空間（configuration space）」という用語は、本明細書で使用されるように、システム６０１の特定のコンポーネントに関する構成データを保管する際に使用するために割り振られたメモリ・マップ入出力（ＭＭＩＯ）アドレス空間からの非結合アドレス空間（disjoint address space）を指す。さらに、ＩＭＰのオペレーティング・システム６３１およびデバイス・ドライバ６０５は、ＩＭＰ６０３に割り当てられたときに物理機能（ＰＦ）６１２のための構成空間６１９にアクセスでき、ＩＭＰ６０３に割り当てられたＰＦに属す仮想機能（ＶＦ）６１３の構成空間６２１にアクセスできる。クライアント・パーティションのオペレーティング・システム６３２およびデバイス・ドライバ６０６は、それに割り当てられたＶＦ６１３の構成空間６２１のいずれにも直接アクセスできる。ハイパーバイザ６２５は、仲介として、より具体的には、クライアント・パーティションがそのＶＦ６１３を適切に操作するために必要な構成空間にはアクセスできるが、他のクライアント・パーティションに関する問題を引き起こす可能性がある構成空間にはアクセスできないことを確認するための仮想仲介（ＶＩ）として動作する。すなわち、クライアント・パーティション６０４は、そのＶＦ６１３に割り振られた構成空間のみにアクセスできる。クライアント・パーティション６０４はさらに、その割り当てられたＶＦ６１３用のメモリ・マップ入出力（ＭＭＩＯ）空間６２２にアクセスできる。
【００４６】
ホスト・システム６２６上または個別データ処理システム（図示の通り）内に常駐する可能性のある、ハードウェア管理コンソール（ＨＭＣ）６０９上の管理アプリケーション６４０と、ＨＭＣ６０９自体は、リモート管理コマンド（ＲＭＣ：Remote Management Command）インターフェース６０２を介してＩＭＰ６０３およびクライアント・パーティション６０４に通報し、同じタイプのインターフェース６２０を介してハイパーバイザ６２５に通報する。管理アプリケーション６４０（以下、ＨＭＣ６０３とまとめて単純にＨＭＣ６０９という）は、システム６０１内の様々なコンポーネントの全域で機能を制御するためのオーケストレータ（orchestrator）として動作し、人間がシステム構成を眺め、どのリソースをどのＬＰＡＲ６０３〜６０４に割り当てる必要があるかに関する情報を入力するためのユーザ・インターフェース６４２を提供する。管理アプリケーション６４０は、以下により詳細に記述する通り、ユーザによって呼び出し可能な多種多様な機能を提供することができる。代わって、これらの機能は、このような機能の開始を起動するイベントまたは入力に応答してユーザ介入なしに自動的に呼び出すことができる。
【００４７】
前述の通り、クライアント・パーティション６０４は、ＩＯＶ対応エンドポイント６１４内のそれぞれの仮想機能（ＶＦ）６１３の構成空間６２１にアクセスするために、ＩＯＶ対応エンドポイント６１４と直接通信することができる。ハイパーバイザ６２５は、このような通信のための仮想仲介（ＶＩ）として動作し、他のクライアント・パーティションに影響する恐れのある構成空間について、たとえば、そのクライアント・パーティションに割り当てられていない仮想機能（ＶＦ）の構成空間について、クライアント・パーティションが構成動作を実行するのを防止する。
【００４８】
図７は、例示的な一実施形態により、ロジカル・パーティション（ＬＰＡＲ）からプラットフォーム・ファームウェアへの１組の模範的な呼び出しの定義を例示する模範的な図である。特に、図７は、例示的な諸実施形態の諸態様を実装するために使用できる模範的なプラットフォーム・ファームウェア呼び出し７００ならびにこれらの呼び出しがどちらのパーティション（クライアントまたはＩＭＰ）に適用されるかを例示している。これらの呼び出しは、たとえば、図６の関連プラットフォーム・ファームウェア６２３または６２４に対してパーティション６０３または６０４によって実行することができる。これらのＬＰＡＲからプラットフォーム・ファームウェアへの呼び出し７００の使用の例については、以下の図９〜図１８の様々なものに関する説明に示す。これらの呼び出しについては、これらの呼び出しに関連する動作を実行可能な諸要素の模範的なものとして図６の諸要素を引き続き参照して説明する。
【００４９】
第１の呼び出し７０２、すなわち、入出力構成空間読み取り／書き込み呼び出し７０２は、それに関連するＶＦ６１３の構成空間６２１にアクセスするためにクライアント・パーティション６０４によって使用される。ハイパーバイザ６２５は、これらの呼び出しのためのＶＩとして動作し、クライアント・パーティション６０４が他のクライアント・パーティションに影響する恐れのある構成動作を実行するのを防止する。また、この呼び出しは、そのＰＦ６１９を構成するためにＩＭＰ６０３によっても使用され、この場合もハイパーバイザ６２５は、ＩＭＰ６０３がその制御領域の一部ではないＰＦおよびＶＦの構成空間にアクセスするのを防止するためにＶＩとして動作する。加えて、ＩＯＶ環境内のＶＩとして、ハイパーバイザ６２５は、ＰＣＩ  ＳＩＧ  ＩＯＶ規格によって指定されたアクションを実行する必要もある。たとえば、構成フィールドの一部はＶＦ内で複製されず、したがって、ハイパーバイザ６２５によって提供されるＶＩは、ＶＦの構成空間６２１を介してアクセスされると、ＰＦの構成空間６１９からこれらのフィールドを入手しなければならない。
【００５０】
ＰＦリセット呼び出し７０４は、ＩＭＰ６０３によって行うことができるＰＦ固有の呼び出しの１つである。この呼び出しは、ＰＦ、たとえば、ＰＦ６１２をリセットし、その結果、そのＰＦに関連するすべてのＶＦ、たとえば、ＶＦ６１３もリセットする。この呼び出しが行われると、ＩＭＰ６０３は、まず、以下に記載するＶＦ使用不可呼び出し７０６を使用して、そのＰＦに関連するすべてのＶＦを使用不可にし、ＰＦをリセットし、次にＰＦリセット前の状態にすべてのＶＦ構成を復元しなければならない。
【００５１】
ＶＦ使用不可呼び出し７０６は、指定されたＶＦ（複数も可）に対する任意の追加ＭＭＩＯ動作を使用不可にし、ＶＦ（複数も可）からの直接メモリ・アクセス（ＤＭＡ）および割り込みがクライアント・パーティション６０４まで通過するのを防止するようプラットフォーム・ファームウェアに通知する。データ保全性の問題が発生しないことを確認するためにこれを実装する方法はいくつか存在する。例示的な一実施形態では、クライアント・パーティション６０４がそのＶＦからのＭＭＩＯロード動作を実行しようとした場合に、ＶＦが存在しない場合と同じようにクライアント・パーティション６０４がすべて１のデータを受信できるように、ハードウェアを設計することができる。デバイス・ドライバ６０６は、すべて１のデータを予想していないときにすべて１のデータの有無をチェックし、以下に記載するＰＦ／ＶＦエラー状態照会ファームウェア呼び出し７１０を使用して、すべて１のデータがエラー状態を表すかどうかを検証することが予想される。ＶＦ使用不可呼び出し７０６は、主にエラー回復シナリオで使用されることが予想され、したがって、上述し以下に詳述する通り、ＶＦドライバ、たとえば、デバイス・ドライバ６０６を呼び出して、それ自体の回復を始めることができる。
【００５２】
クライアント・パーティション６０４は、ＶＦリセット呼び出し７０８を使用することにより、そのＶＦ６１３をリセットすることができる。ハイパーバイザ６２５は、ＶＩとして動作し、ＶＦリセット呼び出し７０８に指定されたＶＦ６１３がＶＦ６１３に対してリセットを発行する前にそのパーティションに割り当てられていることを妥当性検査する。このようにして、ハイパーバイザ６２５は、あるクライアント・パーティションが他のクライアント・パーティションのＶＦ（複数も可）をリセットするのを防止する。ハイパーバイザは、以下に詳述する通り、このような割り当て動作に関わっているので、どのＶＦがどのパーティションに割り当てられるかを追跡し、たとえば、ハイパーバイザのデータ構造の１つにその情報を保管することにより、これらのような妥当性検査動作のためにその情報を手元に置いておくことができる。
【００５３】
ＰＦおよびＶＦエラー状態照会呼び出し７１０は、ＩＭＰ６０３内のＰＦドライバ、たとえば、デバイス・ドライバ６０５またはクライアント・パーティション６０４内のＶＦドライバ、たとえば、デバイス・ドライバ６０６が、それぞれＰＦ６１２またはＶＦ６１３に関するエラー状態情報を取得できるようにするプラットフォーム・ファームウェアへの呼び出しである。このエラー状態情報は、たとえば、プラットフォーム・ハードウェア６１０内のハードウェア状況レジスタからハイパーバイザによって入手することができる。このエラー状態は、たとえば、入出力エンドポイント６１４の動作におけるエラーの発生によって設定することができ、エラーから回復できるようにするためにＩＭＰ６０３内のＰＦドライバ、たとえば、デバイス・ドライバ６０５またはクライアント・パーティション６０４内のＶＦドライバ、たとえば、デバイス・ドライバ６０６によって使用することができる。このエラー状態情報は、たとえば、ＰＦリセット呼び出し７０４またはＶＦリセット呼び出し７０６によってハードウェアからクリアすることができる。
【００５４】
エラー回復に関するプラットフォーム・エラー・データを入手するために、ロードおよび保管動作のためのＰＦおよびＶＦ使用可能呼び出し７１２ならびに入出力ファブリック・エラー情報照会呼び出し７１４が提供される。ＰＦおよびＶＦエラー状態照会呼び出し７１０が、それに関連するＰＦ６１２またはＶＦ６１３がエラー状態にあることを適切なデバイス・ドライバ６０５または６０６に示すエラー状態情報を返すと、デバイス・ドライバ６０５、６０６は、ＤＭＡパスを開けるようにせずに、ロードおよび保管動作のためのＰＦおよびＶＦ使用可能呼び出し７１２を使用して、ＰＦ６１２またはＶＦ６１３へのパスを開放することができる。次に、デバイス・ドライバ６０５、６０６は、ＭＭＩＯロードおよび保管動作を使用して、問題判別のために入出力エンドポイント６１４から状態情報を取得することができる。入出力ファブリック・エラー情報照会呼び出し７１４は、ＭＭＩＯロードおよび保管動作からの装置固有エラー情報に加えて、問題判別のために非装置固有エラー情報を取得するために使用することができる。
【００５５】
割り込みソース照会呼び出し７１６は、割り込みコントローラを仮想化するために、割り込みソースを取得するためにすべての割り込みについて使用される。したがって、図７に描かれている通り、割り込みソース照会呼び出し７１６は、クライアント・パーティション６０４とＩＭＰ６０３の両方が使用することができる。ＤＭＡ変換セットアップ呼び出し７１８は、入出力アドレスをシステム・アドレスに変換するための変換メカニズムをセットアップするために使用される。このようなアドレス変換メカニズムは入出力仮想化に必要である。ハイパーバイザ６２５は、これらの呼び出しのためのＶＩとして動作し、クライアント・パーティション６０４が他のクライアント・パーティションに影響する恐れのあるアドレス変換をセットアップするのを防止する。ハイパーバイザ６２５は、たとえば、メモリ、プロセッサ、および入出力リソースなどのリソースを様々なパーティションに割り当てる責任があり、その後、そのリソースにアクセスするためのパーティションの権限を妥当性検査するためにその情報、たとえば、特定のメモリ・アドレスをそのデータ構造内に保持する。図７に図示されている通り、ＰＦは一般にＩＭＰ６０３へのＤＭＡ動作を実行する必要がないので、ＤＭＡ変換セットアップ呼び出し７１８は、クライアント・パーティション６０４が使用することができるが、一般にＩＭＰ６０３が使用することはできない。
【００５６】
最後に、ＬＰＡＲ使用からのＶＦの追加／除去呼び出し７２０およびＬＰＡＲ使用からのＰＦの追加／除去呼び出し７２２は、以下に記載する通り、ＩＯＡホット・プラグ動作および動的再構成動作で使用するためのものである。定義によれば、ＶＦはＩＭＰ６０３に割り当てられず、ＶＦの所有者がＶＦのホット・プラグを制御するので、ＬＰＡＲ使用からのＶＦの追加／除去呼び出し７２０は、クライアント・パーティション６０４が使用することができるが、ＩＭＰ６０３が使用することはできない。ＬＰＡＲ使用からのＰＦの追加／除去呼び出し７２２は、ＩＭＰ６０３が使用することができるが、クライアント・パーティション６０４が使用することはできない。クライアント・パーティション６０４がそれを行えるようにすると、そのＰＦに関連する他のクライアント・パーティションに関連するＶＦについてセキュリティ問題を提起する可能性があるので、クライアント・パーティション６０４は、いずれの方法でもＰＦを変更することが許可されておらず、したがって、ＬＰＡＲ使用からのＰＦの追加／除去呼び出し７２２を使用することができない。
【００５７】
図８は、例示的な一実施形態により、ハードウェア管理コンソール（ＨＭＣ）からプラットフォームへの１組の模範的な要求および応答の定義を例示する模範的な図である。特に、図８は、ＨＭＣからプラットフォーム・ファームウェアへの模範的な要求／応答８００を例示し、システム内のどのコンポーネントに対してこの要求が行われることが予想されるかならびにそのコンポーネントの予想応答を識別する。これらの呼び出しは、たとえば、インターフェース６０２および６２０のうちの１つ以上を介して、図６のＨＭＣ６０９によって行うことができる。たとえば、ＨＭＣ６０９がＩＭＰ６０３またはクライアント・パーティション６０４のいずれかをターゲットにする呼び出しを行う場合、ＨＭＣ６０９はＲＭＣインターフェース６０２を介して呼び出しを行うことができる。ＨＭＣ６０９がハイパーバイザ６２５、たとえば、あるハイパーバイザをターゲットにする呼び出しを行う場合、その呼び出しはインターフェース６２０を介して行うことができる。これらのＨＭＣからプラットフォームへの要求／応答８００の使用の例については、以下の図９〜図１８の様々なものに関してより詳細に示す。
【００５８】
図８に図示されている通り、ハイパーバイザ６２５は、入出力ファブリック構成照会要求８０２の使用により、入出力ファブリック構成について照会を受けることができる。この要求８０２は、たとえば、初期システム立ち上げ時に可能な入出力装置およびその機能をすべて取得するためにＨＭＣ６０９が使用することができ、その結果、ユーザが構成を希望する様々なＬＰＡＲに対する選択および割り当てのためにこれらをユーザに提示することができる。
【００５９】
初期ＬＰＡＲ入出力構成設定要求８０４は、ＨＭＣ６０９のユーザが何を構成しようと決定したかをハイパーバイザ６２５に通知するためにＨＭＣ６０９によって使用される。この構成は、入出力構成のみならず、システム内の様々なＬＰＡＲに割り当てられたＣＰＵの数およびメモリの量などのＬＰＡＲ構成特性も含む。
【００６０】
また、ハイパーバイザ６２５は、入出力アダプタまたはエンドポイントの電源を投入する時期および遮断する時期をＨＭＣ６０９から通知を受けることもできる。これは、ＩＯＡ電源投入／遮断要求８０６により実施することができる。
【００６１】
システムが動作可能である間および初期構成後に、システムへのＰＦまたはＶＦの動的追加を指示するためにＨＭＣによって使用される、ＨＭＣからプラットフォームへの要求８０８〜８１２がいくつか存在する。ＰＦ／ＶＦの動的追加要求８０８は、１つまたは複数のＬＰＡＲへの特定のリソースの追加を予想するよう、ハイパーバイザ６２５に通知するためにＨＭＣ６０９によって使用される。ハイパーバイザ６２５は、これらのＬＰＡＲ用のリソースを割り振ることができるように、このようなリソースを追加する意図について前もって通知を受ける必要がある。このようにして、ＬＰＡＲが、ＶＦまたはＰＦをそのＬＰＡＲに追加するようハイパーバイザ６２５に要求すると、ハイパーバイザ６２５はすでにこれらのリソースを割り振る準備が整っている。
【００６２】
ハイパーバイザ６２５がＰＦ／ＶＦの動的追加要求８０８を完了すると、ＩＭＰ６０３およびクライアント・パーティション６０４は、任意の追加について通知を受けることができる。ＰＦの動的追加要求８１０は、新しいＰＦが追加するために使用可能であることをＩＭＰ６０３に通知する。これは、たとえば、以下に述べるように、システムへの入出力アダプタまたはエンドポイントのホット・プラグ追加時に行われる可能性がある。この要求８１０は、そのファブリック構成にＰＦを追加し、ＰＦ構成空間を初期設定し、デバイス・ドライバをロードし、ＰＦのＩＯＶ機能を使用可能にするよう、ＩＭＰ６０３に通知する。ＩＭＰ６０３は、図７のＬＰＡＲ使用からのＰＦの追加／除去呼び出し７２２のうちの「追加」機能により、動作の完了をハイパーバイザ６２５に通知する。
【００６３】
ＶＦの動的追加要求８１２は、新しいＶＦが追加するために使用可能であることをクライアント・パーティション６０４に通知する。これは、たとえば、システムへの入出力アダプタまたはエンドポイントのホット・プラグ追加時、あるいはユーザがクライアント・パーティション６０４に対して未使用ＶＦとともに既存の入出力アダプタまたはエンドポイントの追加機能の追加を必要とするときに行われる可能性がある。この要求８１２は、そのファブリック構成にＶＦを追加し、ＶＦ構成空間を初期設定し、デバイス・ドライバをロードし、ＶＦの使用を開始するよう、クライアント・パーティション６０４に通知する。クライアント・パーティション６０４は、ＬＰＡＲ使用からのＶＦの追加／除去呼び出し７２０のうちの「追加」機能により、動作の完了をハイパーバイザ６２５に通知する。
【００６４】
システムが動作可能である間および初期構成後に、システムからのＰＦまたはＶＦの動的除去を指示するためにＨＭＣ６０９によって使用される、ＨＭＣからプラットフォームへの要求８１４〜８１８がいくつか存在する。ＰＦ／ＶＦの動的除去要求８１４は、１つまたは複数のＬＰＡＲからの特定のリソースの除去を予想するよう、ハイパーバイザ６２５に通知するためにＨＭＣ６０９によって使用される。ハイパーバイザ６２５は、ＬＰＡＲ（複数も可）によって除去が通知された後、これらのＬＰＡＲ用のリソースを割り振り解除できるように、前もって通知を受ける必要がある。ハイパーバイザ６２５がＰＦ／ＶＦの動的除去要求８１４を完了すると、ＩＭＰ６０３およびクライアント・パーティション６０４は、任意の除去について通知を受けることができる。
【００６５】
次にＶＦの動的除去要求８１６は、使用からならびにＬＰＡＲの構成からＶＦを除去する必要があることをクライアント・パーティション６０４に通知するために、ＨＭＣ６０９によって使用される。これは、たとえば、そのＬＰＡＲの使用のために他のＬＰＡＲに再割り当てできるように、システムからの入出力アダプタまたはエンドポイントのホット・プラグ除去時、あるいはユーザがクライアント・パーティション６０４から既存の入出力アダプタまたはエンドポイントの機能の除去を必要とするときに行われる可能性がある。この要求は、ＶＦの使用を停止し、ＶＦのリセットを要求し、デバイス・ドライバを除去し、ＯＳのファブリック構成からＶＦを除去するよう、クライアント・パーティション６０４に通知する。クライアント・パーティション６０４は、ＬＰＡＲ使用からのＶＦの追加／除去呼び出し７２０のうちの「除去」機能により、動作の完了をハイパーバイザ６２５に通知する。
【００６６】
ＰＦの動的除去要求８１８は、ＰＦが除去されることをＩＭＰ６０３に通知する。この要求を発行する前に、ＨＭＣ６０９は、上述の通り、ＰＦに関連するすべてのＶＦを使用中のクライアント・パーティション６０４から除去しておかなければならない。ＰＦの除去は、たとえば、システムからの入出力アダプタまたはエンドポイントのホット・プラグ除去時に行われる可能性がある。この要求８１８は、ＰＦの使用を停止し、リセット呼び出し７０４によりＰＦのリセットを要求し、デバイス・ドライバを除去し、ＯＳのファブリック構成からＰＦを除去するよう、ＩＭＰ６０３に通知する。ＩＭＰ６０３は、ＬＰＡＲ使用からのＰＦの追加／除去呼び出し７２２のうちの「除去」機能により、動作の完了をハイパーバイザ６２５に通知する。
【００６７】
ＩＭＰ６０３の重要な機能の１つは、あるＰＦに関連するＶＦを使用する複数のＬＰＡＲ全域で共用されるか、またはあるＶＦにとって固有のものであるが、そのＰＦによる変更のためにアクセス可能であってはならない入出力アダプタまたはエンドポイントのリソースへの確実なアクセスを可能にすることである。ネットワーク入出力アダプタまたはエンドポイントのこのようなリソースの一例は、複数のＶＦによって共用されるＰＦに関連するネットワーク・アドレスまたはあるＶＦにとって固有のものであるネットワーク・アドレスである。このような装置固有リソースの管理は、本明細書では入出力アダプタまたはエンドポイントの「サウスサイド」管理という。これは、入出力アダプタ（ＩＯＡ）またはエンドポイント・サウスサイド管理要求８２０によってＨＭＣ６０９を介して実施され、このような管理はいずれもＨＭＣ６０９上のセキュリティ・アプリケーション、たとえば、ログオン・アプリケーションまたはその他の認証アプリケーションを介して保護される。ＩＭＰ６０３がＩＯＡに関するＩＯＡサウスサイド管理要求８２０を受信すると、ＩＭＰ６０３はそのＰＦ用のデバイス・ドライバ６０５にその要求を渡し、デバイス・ドライバ６０５は、その要求を実施するためにＩＯＡへのＰＦインターフェースを介して装置固有要求を実行する。
【００６８】
ＨＭＣからプラットフォームへの要求８００のすべての現行状況は、前のコマンド完了および状況照会要求８２２の使用により、元の要求のターゲットに対して作成することができる。これにより、ＨＭＣ６０９は、一連のＨＭＣ要求を調整し、ＨＭＣインターフェースを介して前の要求の状況をユーザに対して示すことができる。動作によっては完了するのがかなり遅いものがあり、このような要求の現行状況にアクセスできることが望ましいので、このような要求が行われる可能性がある。
【００６９】
次に、この説明では、図７〜図８に上記で例示されている様々な要求および呼び出しの使用に関するより詳細な説明に取りかかる。図９〜図１８は、例示的な諸実施形態のメカニズムの様々な動作の概要を示す流れ図である。図９〜図１８に概要が示されている動作は、様々なメカニズム、たとえば、図６に描かれているＨＭＣ、ハイパーバイザ、ＩＭＰ、クライアント・パーティション、プラットフォーム・ファームウェア／ハードウェア、入出力エンドポイントなどによって実装することができる。したがって、適切であれば、図９〜図１８に概要が示されている動作の実行に関与可能な例示的な諸実施形態のメカニズムの一例として、図６の諸要素を参照する。
【００７０】
流れ図の各ブロックおよび流れ図内の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実装可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、マシンを生産するためにプロセッサまたはその他のプログラマブル・データ処理装置に提供することができ、プロセッサまたはその他のプログラマブル・データ処理装置上で実行される命令は流れ図の１つまたは複数のブロックに指定された機能を実装するための手段を作成する。また、これらのコンピュータ・プログラム命令は、特定の方法で機能するようプロセッサまたはその他のプログラマブル・データ処理装置に指示することができるコンピュータ可読メモリまたは記憶媒体に保管することもでき、コンピュータ可読メモリまたは記憶媒体に保管された命令は流れ図の１つまたは複数のブロックに指定された機能を実装する命令手段を含む装置（article of manufacture）を生産する。
【００７１】
したがって、流れ図の複数ブロックは、指定の機能を実行するための手段の組み合わせ、指定の機能を実行するための複数ステップの組み合わせ、および指定の機能を実行するためのプログラム命令手段をサポートする。また、流れ図の各ブロックおよび流れ図内の複数ブロックの組み合わせは、指定の機能またはステップを実行する特殊目的ハードウェアベースのコンピュータ・システムによって、または特殊目的ハードウェアとコンピュータ命令の組み合わせによって、実装可能であることが理解されるであろう。
【００７２】
さらに、流れ図は、例示的な諸実施形態内で実行される動作を実証するために提供されている。流れ図は、特定の動作または詳細には動作の順序に関する制限を明記または暗示するためのものではない。流れ図の動作は、本発明の精神および範囲を逸脱せずに特定の実装例に適合するように変更することができる。
【００７３】
図９は、例示的な一実施形態により、入出力仮想化（ＩＯＶ）アダプタを有するシステムに関する模範的な「立ち上げ（bring-up）」動作の概要を示す流れ図を例示している。図９に図示されている通り、初期入出力ファブリック立ち上げ動作９００は、入出力ファブリックの電源投入が実行されることから始まる（ステップ９０２）。入出力ファブリックの電源投入に応答して、ハイパーバイザ６２５は、入出力ファブリック６１１の構成空間を探索することなどにより、入出力ファブリック６１１に結合されたすべての入出力アダプタ６１４〜６１６を発見することができ（ステップ９０４）、発見動作によって検出された入出力アダプタ６１４〜６１６の機能を発見することができ（ステップ９０６）、ＩＯＶ構成空間の検出などにより、発見されたアダプタのうちのいずれがＰＦ６１２であるかを発見することができる（ステップ９０８）。
【００７４】
ＰＦについて、ハイパーバイザ６２５は、構成空間を探索し、たとえば、各ＰＦの構成空間内の初期ＶＦ（InitialVF）フィールドを読み取ることなどにより、各ＰＦによってサポート可能なＶＦの数をさらに決定することができる（ステップ９１０）。次にハイパーバイザ６２５は、システム６０１内の入出力アダプタ（ＩＯＡ）６１４〜６１６に必要なすべてのシステム・リソースを決定することができ、より具体的には、この場合、ＶＦが必要とするリソースを決定することができる（ステップ９１２）。リソースとしては、システム内のプロセッサからメモリ・マップ入出力（ＭＭＩＯ）ロードおよび保管動作用のメモリ空間にＩＯＡをマッピングするのに必要な入出力アドレス空間、必要なリクエスタＩＤ（ＲＩＤ：Requester Identifier）の数、必要なＤＭＡウィンドウ空間の量、および必要な割り込みの数などの項目を含む。ＤＭＡウィンドウ空間は、ルート複合体（ＲＣ）内のアドレス変換機能に必要なデーブル・スペースの量である。
【００７５】
必要なリソースについて決定が行われると、ハイパーバイザ６２５は、システム６０１内のリソース制限事項のために使用可能にするＶＦの数を制限する必要があるかどうかを判断することができる（ステップ９１４）。次にハイパーバイザ６２５は、ユーザへの提示などのために、入出力構成空間の探索から収集したすべての情報をＨＭＣ６０９に報告することができる（ステップ９１６）。ＨＭＣ６０９は、たとえば、図８の入出力ファブリック構成照会ＨＭＣ要求８０２に対する応答として、ハイパーバイザにこの情報を報告することができる。次にユーザは、ＬＰＡＲまたはフリー・リソースの使用可能プールにリソースを割り当てることができる。報告される情報としては、たとえば、ベンダＩＤ、デバイスＩＤ、および機能数などの項目を含み、入出力ファブリックおよびエンドポイント内に何があるかについて決定するためにユーザが必要とする情報を含むことができる。この情報は、入出力アダプタまたはエンドポイントによってサポートされるＰＦの数、ＰＦの初期ＶＦによって決定可能なものなどの各ＰＦについてサポート可能なＶＦの数、上述の方法でハイパーバイザ６２５によって計算されたシステム制限によるサポート可能ＶＦの数の計算などをさらに含むことができる。
【００７６】
次に、すべてのシステム・リソースをどのように割り振る必要があるかを決定することは、ＨＭＣ６０９のユーザの責務である。これは、人間ではなく、ＨＭＣ６０９内で実行される自動スクリプトあるいはシステム６０１のロジカル・パーティションにシステム・リソースを割り当てるかまたは割り振るための任意のその他の自動メカニズムによって実行できることも留意されたい。このため、ＨＭＣ６０９は、模範的な実施形態では、収集した入出力ファブリックおよびエンドポイント情報をユーザに提示し（ステップ９１８）、ユーザはリソースをどのように割り振るべきかを指定する（ステップ９２０）。この割り振りは、入出力を含むだけでなく、プロセッサおよびメモリなどの他のシステム・リソースを含むことにもなる。ユーザがリソースの割り当てを行うと、これは、たとえば、図８の初期ＬＰＡＲ入出力構成設定ＨＭＣ要求８０４を介してハイパーバイザ６２５に報告される（ステップ９２２）。
【００７７】
ＶＦについて、ユーザによって指定されたＶＦの数（割り当てられたものとフリー・プールの両方）が対応するＰＦ用の初期ＶＦ未満である場合、ハイパーバイザ６２５は、ＰＦのＶＦ数（NumVF）構成空間パラメータを所望の値に設定することができ、ＰＣＩ  ＩＯＶ規格によって定義されたＶＦイネーブル・ビットを介してＰＦに関する入出力仮想化を使用可能にすることができる。次にハイパーバイザ６２５は、ＭＭＩＯアドレッシング、ＤＭＡアドレッシング、割り込み、およびその他のリソースを含む、各パーティションのリソースをセットアップすることができ（ステップ９２６）、ＩＭＰ（複数も可）６０３に必要なパーティションを作成することができる（ステップ９２８）。
【００７８】
次にハイパーバイザ６２５は、ＩＭＰ（複数も可）６０３およびクライアント・パーティション（複数も可）６０４に関するパーティション・ファームウェア６２３および６２４をブートすることができ、これらのＬＰＡＲ内のＯＳが使用するためにＩＭＰ（複数も可）６０３およびクライアント・パーティション（複数も可）６０４に入出力構成構造を渡すことができる（ステップ９３０）。ハイパーバイザ６２５は、クライアント・パーティション（複数も可）６０４へのＶＦ（複数も可）６１３の割り当て時に、クライアント・パーティション（複数も可）６０４からそのＶＦ（複数も可）６１３へのすべての入出力構成アクセスについて、仲介（moderate）し始め、すなわち、仮想仲介として動作し始める（ステップ９３２）。ハイパーバイザ６２５は、ＩＭＰパーティションのＯＳ（複数も可）をブートすることができ、次にＰＦ（複数も可）６１２が初期設定されたというＩＭＰ（複数も可）６０３からの表示を待つことができる（ステップ９３４）。ＩＭＰ（複数も可）６０３は、たとえば、図７のＬＰＡＲ使用からのＰＦの追加／除去ファームウェア呼び出し７２２のうちの「追加」機能を介してこの表示を示すことができる。
【００７９】
ＶＦ６１３に関するＩＭＰ６０３がＰＦ６１２を初期設定すると、ＶＦ６１３用のＯＳをロードすることができる（ステップ９３６）。クライアント・パーティション（複数も可）６０４は、そのＶＦ（複数も可）６１３用のデバイス・ドライバ６０６をロードすることができる（ステップ９３８）。ＶＦ６１３用のデバイス・ドライバ６０６がロードされると、それは、たとえば、入出力構成空間読み取り／書き込み呼び出し７０２を介してそのＶＦ６１３を構成する必要がある（ステップ９４０）。次にデバイス・ドライバ６０６はそのＶＦ６１３を使用し始めることができ、次に動作は終了する。
【００８０】
システムが立ち上げられ、動作可能になると、新しい入出力アダプタまたはエンドポイントをシステムに動的に追加できることが望ましい。図１０〜図１１は、例示的な一実施形態により、システムにＩＯＶアダプタを追加するための模範的なホット・プラグ動作の概要を示す流れ図を例示している。図１０〜図１１に図示されている通り、ホット・プラグ追加動作１０００は、ホット・プラグ動作によりユーザに指示するためのユーザ・インターフェースを提供するホット・プラグ・アプリケーションをＨＭＣコンソール６０９のユーザが開始することから始まる（ステップ１００４）。ホット・プラグ・アプリケーションにより、ユーザまたはアプリケーションは、そこに新しい入出力アダプタまたはエンドポイント、たとえば、入出力エンドポイント６１４を差し込む、入出力ファブリック６１１内の空の入出力スロットを選択することができる（ステップ１００６）。次にユーザは、新しい入出力アダプタ（ＩＯＡ）またはエンドポイントを差し込むことができ（ステップ１００８）、ＩＯＡが差し込まれたことをＨＭＣ６０９を介して報告することができる（ステップ１０１０）。当業者であれば、新しいＩＯＡを未使用スロットに挿入し、システムにホット・プラグ・アプリケーションを自動的に呼び出させることにより、ＰＣＩｅなどの入出力バス用のホット・プラグ・アプリケーションを自動的に呼び出すことができることを認識している。次にＨＭＣ６０９は、たとえば、図８の電源投入／遮断ＨＭＣ要求８０６の「電源投入」機能を使用することにより、ＩＯＡの電源を投入するよう、ハイパーバイザ６２５にメッセージを送信することができ、その構成情報を取得することができ（ステップ１０１２）、動作は図１１のステップ１０１４に継続する。
【００８１】
ハイパーバイザ６２５が初期ファブリック立ち上げ動作９００で情報を収集したのと同様に、ハイパーバイザ６２５は、ＩＯＡを発見することができ（ステップ１０１４）、ＩＯＡ上の機能を発見することができ（ステップ１０１６）、どの機能がＰＦであるかを発見することができる（ステップ１０１８）。ＰＦについて、ハイパーバイザ６２５は、各ＰＦによってサポート可能なＶＦの数を発見することができ（ステップ１０２０）、必要なシステム・リソースを決定することができ（ステップ１０２２）、システム・リソース制限を決定し（ステップ１０２４）、ＩＯＡ構成情報をＨＭＣ６０９に報告することができる（ステップ１０１６）。
【００８２】
ＨＭＣ６０９は、構成情報をユーザに提示することができる（ステップ１０１８）。ユーザは、どのリソースをどのクライアント・パーティションに割り当てるかを指定することができ（ステップ１０３０）、ＨＭＣ６０９は、このリソース割り振りをハイパーバイザ６２５に報告することができ（ステップ１０３２）、ハイパーバイザ６２５は、必要であれば構成空間内のＶＦ数を設定することができる（ステップ１０３４）。ハイパーバイザ６２５は、各パーティションのリソースをセットアップすることができ（ステップ１０３６）、新しいＩＭＰ（複数も可）６０３に関するパーティション（複数も可）を作成することができる（ステップ１０３８）。ハイパーバイザ６２５は、ＩＭＰ（複数も可）６０３をブートし、これらのＩＭＰ（複数も可）６０３に入出力構成構造を渡すことができ（ステップ１０４０）、ＩＭＰ  ＯＳ（複数も可）をブートすることができ、ＰＦ６１２が初期設定されたというＩＭＰ  ＯＳ（複数も可）からの信号を待つことができる（ステップ１０４２）。この時点で、ＶＦ６１３の追加を除いてＩＯＡの追加は完了し、ハイパーバイザ６２５は、ＰＦ６１２の追加完了をＨＭＣ６０９に通知することができる（ステップ１０４４）。
【００８３】
次にＨＭＣ６０９は、新しいＩＯＡ６１４からＶＦ６１３を受信するクライアント・パーティション（複数も可）６０４にＶＦの動的追加要求８１２を発行することができる。これは、ＶＦ（複数も可）を追加するためのクライアント・パーティション６０４のプロセスを開始するものである（ステップ１０４６）。クライアント・パーティション（複数も可）６０４内のＯＳ（複数も可）は、新しいＶＦ（複数も可）６１３を検出することができ、新しいＶＦ（複数も可）６１３用のデバイス・ドライバ（複数も可）６０６をロードすることができる（ステップ１０４８）。ＶＦ（複数も可）６１３用のデバイス・ドライバ（複数も可）６０６は、たとえば、入出力構成空間読み取り／書き込み呼び出し７０２を介してそのＶＦ（複数も可）６１３を構成することができ（ステップ１０５０）、その新たに構成されたＶＦ（複数も可）６１３を使用し始めることができる。次に動作は終了する。
【００８４】
例示的な諸実施形態のシステム６０１の入出力ファブリック６１１に入出力アダプタまたはエンドポイントを動的に追加することに加えて、入出力アダプタまたはエンドポイントを入出力ファブリック６１１から動的に除去できるようにすることは有益なことである。図１２は、例示的な一実施形態により、システムからＩＯＶアダプタを除去するための模範的なホット・プラグ動作の概要を示す流れ図である。図１２に図示されている通り、ホット・プラグ除去動作１１００は、ＨＭＣコンソール６０９のユーザがホット・プラグ・アプリケーションを開始することから始まる（ステップ１１０４）。ユーザは、入出力エンドポイント６１４などの入出力アダプタ（ＩＯＡ）またはエンドポイントを除去することを選択することができる（ステップ１１０６）。
【００８５】
ＨＭＣ６０９は、除去すべきＩＯＡからのＰＦ６１２およびＶＦ６１３というリソースを含むパーティションがある場合に、どのパーティションであるかを決定する（ステップ１１０８）。ＨＭＣ６０９は、たとえば、ＰＦ／ＶＦの動的除去要求８１４の使用により、差し迫ったリソースの除去をハイパーバイザ６２５に通知することができる（ステップ１１１０）。次にＨＭＣ６０９は、ＩＯＡ上のＶＦ６１３を含む各クライアント・パーティション６０４に、たとえば、ＶＦの動的除去要求８１６を介して、そのＶＦを使用から除去するための要求を送信することができる（ステップ１１１２）。クライアント・パーティション（複数も可）６０４は、ＶＦの動的除去要求８１６に関連するそのＶＦ（複数も可）６１３の使用を停止することができる（ステップ１１１４）。
【００８６】
クライアント・パーティション（複数も可）６０４は、たとえば、ＬＰＡＲ使用からの追加／除去呼び出し７２０のうちの「除去」機能を介して、クライアント・パーティション（複数も可）６０４による使用からＶＦ（複数も可）６１３を除去するようハイパーバイザ６２５に通知することができる（ステップ１１１８）。ハイパーバイザ６２５は、そのＶＦ（複数も可）のそれぞれのリリースを通知するためにすべての使用クライアント・パーティション６０４を待ち（ステップ１１２０）、次にＶＦ除去（複数も可）をＨＭＣ６０９に報告することができる（ステップ１１２２）。
【００８７】
ＶＦ除去が完了すると、次にＨＭＣ６０９は、ＩＯＡ６１４に関連するＰＦ（複数も可）６１２を除去するプロセスを開始することができる。ＨＭＣ６０９は、たとえば、ＰＦの動的除去要求８１８を介してＰＦ（複数も可）６１２を使用から除去するためのメッセージをＩＯＡ６１４上のＰＦ６１２を含む各ＩＭＰ６０３に送信することにより、これを実行する（ステップ１１２４）。次にＩＭＰ（複数も可）６０３は、指示通り、指定のＰＦ（複数も可）６１２の使用を停止することができ（ステップ１１２６）、ＬＰＡＲ使用からのＰＦの追加／除去呼び出し７２２のうちの「除去」機能によりＰＦ６１２をそのパーティションの使用から除去するよう、ハイパーバイザ６２５に通知することができる。次にＩＭＰ（複数も可）６０３は、そのパーティションから関連ＰＦ６１２のリソースを除去することができる（ステップ１１２８）。
【００８８】
ハイパーバイザ６２５は、そのＶＦ（複数も可）６１２のそれぞれのリリースを通知するためにすべての使用ＩＭＰ（複数も可）６０３を待ち（ステップ１１３０）、次にＰＦ除去（複数も可）をＨＭＣ６０９に報告することができる（ステップ１１３２）。この時点でＩＯＡ６１４はもはや使用されておらず、ＨＭＣ６０９は、たとえば、ＩＯＡ電源投入／遮断要求８０６の「電源遮断」機能を介してＩＯＡ６１４への電源をオフにするようハイパーバイザ６２５にメッセージを送信することができる（ステップ１１３４）。次にハイパーバイザ６２５は、ＩＯＡ６１４の電源を遮断することができ、ハイパーバイザ６２５からＩＯＡ６１４のリソースを除去することができ、ＨＭＣ６０９に完了を報告することができる（ステップ１１３６）。ＨＭＣ６０９はユーザに完了を報告することができ（ステップ１１３８）、ユーザは、望ましい場合にはＩＯＡ６１４を抜くことができ、動作は完了する。
【００８９】
入出力仮想化およびＶＦの実装例の有用な特徴の１つは、ロード・バランシングに必要なときにこれらのリソースを動的にシフトするためにシステム内に十分なリソースを有する能力である。これは、それからＬＰＡＲに追加するためのＶＦを選択できる使用可能なリソースのプールを有することによるか、または必ずしもＶＦのリソースを適切に使用していないＬＰＡＲからＶＦを除去し、そのＶＦのリソースをより適切に使用できるＬＰＡＲにそのＶＦを追加することにより、行うことができる。図１３は、例示的な一実施形態により、ロジカル・パーティション（ＬＰＡＲ）に仮想機能（ＶＦ）を動的に追加するための模範的な動作の概要を示す流れ図である。図１３に概要が示されている動作は、たとえば、システム６０１の動作を最適化するために必要なときに、あるＬＰＡＲから他のＬＰＡＲにＶＦのリソースをシフトするために使用することができる。
【００９０】
図１３に図示されている通り、ＶＦ追加動作１２００は、ＨＭＣ６０９のユーザが動的再構成（ＤＲ：Dynamic Reconfiguration）アプリケーションを開始することから始まる（ステップ１２０４）。ユーザは、追加すべきＶＦ６１３の使用可能リストから選択することができ、どのクライアント・パーティションにＶＦ６１３を追加すべきかを指定することができる（ステップ１４０４）。ＨＭＣ６０９は、たとえば、ＰＦ／ＶＦの動的追加要求８０８を介して、この情報をハイパーバイザ６２５に提示することができる（ステップ１２０８）。ハイパーバイザ６２５は、ＭＭＩＯアドレッシング、ＤＭＡアドレッシング、割り込みなどのクライアント・パーティションのリソースをセットアップすることができない。
【００９１】
ハイパーバイザ６２５は、要求された動作の完了を通知することにより、動作が進行準備完了であることをＨＭＣ６０９に通知することができる（ステップ１２１２）。次にＨＭＣ６０９は、ＶＦの動的追加要求８１２を介して、ＶＦ６１３を動的に追加するようクライアント・パーティション６０４に要求することができる（ステップ１２１４）。クライアント・パーティション６０４は、新しいＶＦ６１３を検出することができ、新しいＶＦ６１３用のデバイス・ドライバ６０６をロードすることができる（ステップ１２１６）。ＶＦ６１３用のデバイス・ドライバ６０６は、たとえば、入出力構成空間読み取り／書き込み呼び出し７０２を介してそのＶＦ６１３を構成することができる（ステップ１２１８）。最後に、ＨＭＣ６０９は動作の完了をユーザに通知することができ、動作は完了する（ステップ１２２０）。
【００９２】
図１４は、例示的な一実施形態により、ＬＰＡＲからＶＦを動的に除去するための模範的な動作の概要を示す流れ図である。図１４の動的ＶＦ除去動作１３００は、システム６０１の様々なＬＰＡＲ間で入出力リソースを移動する能力のもう一方の部分である。すなわち、ＶＦは、図１４に図示されている動作を使用して、あるＬＰＡＲとの関連付けから除去することができ、上記の図１３に概要が示されているＶＦ追加動作を使用して、他のＬＰＡＲに追加することができる。このようにあるパーティションからＶＦを除去し、他のパーティションに追加することは、詳細な例に示す通り、手動ユーザ・プロセスによって実行することができるか、またはそのＶＦがあるパーティションによって十分利用されておらず、他のパーティションによって使用することができるというプログラムによる判断により自動的に実行することができる。このようなロード・バランシング・プログラムは、メモリのようなリソースに関する技術分野では既知のものである。本明細書に記載した本発明のＶＦ動的除去および追加を使用すると、入出力リソースのバランスを取るためのロード・バランシング・プログラムを拡張することもできる。
【００９３】
図１４に図示されている通り、ＶＦ除去動作１３００は、ユーザがＨＭＣ６０９でＤＲアプリケーションを開始することから始まる（ステップ１３０４）。ユーザは、ＶＦ６１３などの除去すべきＶＦを選択することができ（ステップ１３０６）、ＨＭＣ６０９は、たとえば、ＰＦ／ＶＦ動的除去要求８１８をハイパーバイザ６２５に送信することができる（ステップ１３０８）。ＨＭＣ６０９は、たとえば、ＶＦの動的除去要求８１６をクライアント・パーティション６０４に送信して、ＶＦ除去プロセスを開始することができる（ステップ１３１０）。クライアント・パーティション６０４は、この要求を受信し、指示通り、ＶＦ６１３の使用を停止することができる（ステップ１３１２）。
【００９４】
クライアント・パーティション６０４は、たとえば、ＬＰＡＲ使用からのＶＦの追加／除去呼び出し７２０のうちの「除去」機能を介してパーティションによる使用からＶＦ６１３を除去するよう、ハイパーバイザ６２５に通知することができる（ステップ１３１４）。次にハイパーバイザ６２５は、関連ＶＦ６１３のリソースをクライアント・パーティション６０４から除去することができる（ステップ１３１６）。ハイパーバイザ６２５は、ＶＦの除去をＨＭＣ６０９に報告することができる（ステップ１３１８）。ＨＭＣ６０９はユーザに動作の完了を通知することができ（ステップ１３２０）、動作は終了する。
【００９５】
入出力アダプタまたはエンドポイントを動的に追加および除去し、ＶＦおよびそれに関連するリソースをＬＰＡＲ間でシフトできることに加えて、仮想化システムでは、エラーから回復できることがエラー処理の頑強性（robustness）のために有用である。例示的な諸実施形態は、エラー情報を検索し、エラー情報をログ記録し、ＶＦをリセットおよび構成し、未処理の入出力動作を再始動するよう試みることにより、エラーから回復できるようにするためのメカニズムを提供する。この動作は、以下に記載する通り、図１５に概要が示されている。
【００９６】
図１５は、例示的な一実施形態により、ＶＦが被るエラーからのエラー回復のための模範的な動作の概要を示す流れ図である。図１５に概要が示されている動作は、エラーが存在することをデバイス・ドライバが認識でき、適切に回復できるまで、ＶＦへのすべてのＤＭＡおよびＭＭＩＯを停止する既存の技法を使用する。しかし、図１５の動作は、ＶＦに関するエラー回復プロセスを制御するためにこの既存の技法を拡大するように、例示的な諸実施形態のメカニズムを使用する。
【００９７】
図１５に図示されている通り、ＶＦエラー回復動作１４００は、ＶＦをＭＭＩＯ停止状態（MMIO Stopped State）およびＤＭＡ停止状態（DMA StoppedState）にしたエラーが発生した後で開始する。この状態では、ＶＦからのＤＭＡ動作はいずれも完了せず、ＭＭＩＯ保管動作はＭＭＩＯ停止状態である間に廃棄され、ＭＭＩＯロード動作では、すべて１のデータが返されることになる。エラー回復のプロセスは、デバイス・ドライバ、たとえば、デバイス・ドライバ６０６がＭＭＩＯロード動作からすべて１のデータを受信することから始まる（ステップ１４０４）。デバイス・ドライバ６０６は、すべて１のデータの取り戻しを予想しておらず（または予想しなければならないかどうかが確かではない）、たとえば、ＶＦ６１３についてＶＦエラー状態照会ファームウェア呼び出し７１０を使用して、ＶＦ状態情報を取得する（ステップ１４０６）。ＶＦ６１３はこの時点でエラー状態にあるので、ハイパーバイザ６２５は、照会に対して、ＶＦ６１３がＭＭＩＯ停止およびＤＭＡ停止エラー状態にあると応答することができる（ステップ１４０８）。デバイス・ドライバ６０６は、たとえば、入出力ファブリック・エラー情報照会ファームウェア呼び出し７１４を使用して、その後の問題判別のために入出力ファブリック６１１内のエラー・レジスタに関する情報を入手することができる（ステップ１４１０）。ハイパーバイザ６２５はエラー情報で照会に応答することができ（ステップ１４１２）、デバイス・ドライバ６０６はその後の分析のためにその情報をエラー・ログにログ記録することができる（ステップ１４１４）。
【００９８】
この時点でデバイス・ドライバ６０６は、そのＶＦをリセットする準備が完了し、動作を再始動しようと試みることができる。デバイス・ドライバ６０６は、たとえば、ＶＦリセット・ファームウェア要求７０８を使用してＶＦ６１３をリセットすることができ（ステップ１４１６）、ハイパーバイザ６２５は、完了応答で要求に応答することができる（ステップ１４１８）。次にデバイス・ドライバ６０６は、たとえば、入出力構成空間読み取り／書き込み呼び出し７０２を使用して、そのＶＦ６１３を構成することができる（ステップ１４２０）。デバイス・ドライバ６０６は未処理の入出力動作を再始動しようと試み（ステップ１４２２）、動作は終了する。
【００９９】
前述の通り、ＩＭＰ６０３の重要な機能の１つは、あるＰＦに関連するＶＦを使用する複数のＬＰＡＲ全域で共用されるか、またはあるＶＦにとって固有のものであるが、そのＰＦによる変更のためにアクセス可能であってはならないＩＯＡまたはエンドポイントのリソースへの確実なアクセスを可能にすることである。ネットワーク入出力アダプタ（ＩＯＡ）またはエンドポイントのこのようなリソースの一例は、複数のＶＦによって共用されるＰＦに関連するネットワーク・アドレスまたはあるＶＦにとって固有のものであるネットワーク・アドレスである。このような装置固有リソースの管理は、入出力アダプタまたはエンドポイントのＩＯＡ「サウスサイド」管理という。図１６は、例示的な一実施形態により、ネットワーク・アダプタ上のネットワーク・アドレスを変更するための模範的なＩＯＡサウスサイド管理動作の概要を示す流れ図である。図１６は、具体的にはネットワーク・アダプタ上のネットワーク・アドレスの変更を対象とするが、あるＰＦに関連するＶＦを使用するか、またはあるＶＦにとって固有のものである複数のＬＰＡＲ全域で共用されるその他のリソースについて、同様の動作を実行できることを認識されたい。
【０１００】
図１６に図示されている通り、動作は、ＨＭＣコンソール６０９のユーザがＶＦ６１３用のネットワーク・アドレスを変更するためのアプリケーションを開始することから始まる（ステップ１５０４）。ユーザは、ＶＦ６１３およびアドレスを選択することができる（またはアプリケーションは、動作のコンテキストに基づいてアドレスを提供することができる）（ステップ１５０６）。ＨＭＣ６０９は、ＶＦ６１３を制御するＰＦ６１２およびＩＭＰ６０３を決定することができ、ＩＭＰ６０３にＩＯＡサウスサイド管理要求８２０を送信し、ＩＯＡサウスサイド管理要求８２０内のＶＦ６１３およびアドレス情報を渡すことができる（ステップ１５０８）。ＩＭＰ６０３はＰＦデバイス・ドライバ６０５に情報を渡すことができ、ＰＦデバイス・ドライバ６０５は処理のためにＰＦ６１２にそれを渡すことができる（ステップ１５１０）。ＨＭＣ６０９は、コマンド完了についてＩＭＰ６０３に照会することができ、完了すると、動作が完了したことをユーザに通知することができ（ステップ１５１２）、動作は終了する。
【０１０１】
システム６０１内のクライアント・パーティション６０４は、システム６０１が動作可能である間に動作を終了できることを認識されたい。クライアント・パーティション内のソフトウェアの回復不能エラーまたはハードウェアが割り当てられているパーティションのみに影響する回復不能ハードウェア・エラーなど、クライアント・パーティション６０４が終了する可能性のある多種多様な理由が存在する可能性がある。図１７は、例示的な一実施形態により、クライアント・パーティション終了のための模範的な動作の概要を示す流れ図である。図１７に概要が示されている動作１６００は、クライアント・パーティションが終了してリブートするか、または永続的に終了するケースを対象とする。
【０１０２】
図１７に図示されている通り、クライアント・パーティション６０４が何らかの理由で終了すると動作が始まる。ハイパーバイザ６２５は、たとえば、回復不能ソフトウェア・エラーによるかまたは回復不能ハードウェア・エラー時のハードウェアからのマシン・チェック割り込みによるパーティションからハイパーバイザへのパニック呼び出し（panic call）によりクライアント・パーティションが終了する時期を検出することができ、クライアント・パーティション６０４が終了したことを検出することができる（ステップ１６０４）。次にハイパーバイザ６２５は、たとえば、パーティションの初期セットアップの一部として設定されたユーザのリブート・ポリシーにより判断された通り、クライアント・パーティション６０４がリブートのために設定されているかどうかを判断することができる（ステップ１６０６）。
【０１０３】
クライアント・パーティション６０４がリブートのために設定されていない場合、ハイパーバイザ６２５は、ＶＦリソースを除去し、終了したパーティションからハイパーバイザＶＦフリー・プールにＶＦ（複数も可）を追加することができる（ステップ１６０８）。それが終了であるということは、故障中のクライアント・パーティション６０４がいつでも直ちにリブートされるわけではないことを意味し、したがって、動作は終了する。
【０１０４】
クライアント・パーティション６０４がリブートされるという判断が行われた場合（ステップ１６０６）、ハイパーバイザ６２５は、終了したパーティション内のＶＦ（複数も可）に関連するリソースを、それがリブートされたときに対応するパーティションに再割り当てする（ステップ１６１０）。次に動作は終了する。
【０１０５】
システム６０１の動作中に、ＩＭＰ６０３が故障する可能性があることも可能であることを認識されたい。ＩＭＰ６０３は、多くのクライアント・パーティション６０４内の潜在的に多くのＶＦ８１３のためにリソース用のコントローラとして動作しているので、故障した場合にリブートするように必ず設定されることが予想される。図１８は、例示的な一実施形態により、ＩＭＰパーティション終了のための模範的な動作１７００の概要を示す流れ図である。図１８に図示されている通り、動作１７００は、ＩＭＰパーティションの終了から始まる。ハイパーバイザ６２５は、たとえば、回復不能ソフトウェア・エラーによるかまたは回復不能ハードウェア・エラー時のハードウェアからのマシン・チェック割り込みによるパーティションからハイパーバイザへのパニック呼び出しにより、ＩＭＰ６０３のパーティション終了を検出することができ、ＩＭＰ６０３のリブートを開始する（ステップ１７０４）。
【０１０６】
ハイパーバイザ６２５は、リブートが完了するまでリブート中のＩＭＰ６０３内のＰＦ（複数も可）に関連するすべてのＶＦ（複数も可）について、すべてのファームウェア呼び出し７００を停止することができるが（ステップ１７０６）、ただし、通常の動作が続行できるように、割り込みソース照会ファームウェア呼び出し７１６およびＤＭＡ変換セットアップ・ファームウェア呼び出し７１８は停止されない。リブート中のＩＭＰ６０３内のＰＦ（複数も可）に関連するＶＦ（複数も可）を有するクライアント・パーティション６０４は、停止するファームウェア呼び出しを実行する必要がない限り、通常通り動作し続け、必要がある場合は、ＩＭＰリブートが完了するまでハイパーバイザ６２５はファームウェア呼び出しを停止する（ステップ１７０８）。ハイパーバイザ６２５は同じＰＦリソースをＩＭＰ６０３に割り当て、リブート時のＩＭＰ６０３は、動作がリブートであることを検出し、ＶＦ動作に影響しないように状態を慎重に復元する（ステップ１７１０）。次に動作は終了する。
【０１０７】
したがって、例示的な諸実施形態は、サウスサイド・アダプタ固有管理のための管理ソフトウェアが、ハイパーバイザ内ではなく、個別の管理パーティション内で実行できるようにし、構成およびエラー管理のようなアダプタ独立動作はハイパーバイザによって実行されるメカニズムを提供する。ハイパーバイザに対するパフォーマンス上の影響を防止するために、入出力アダプタ依存コードをハイパーバイザの中に入れないようにすることが望ましい。その上、たとえば、異なるアダプタ固有のサウスサイド管理ソフトウェア用のコードの更新の必要性による頻繁な更新によるハイパーバイザ・コードの不安定性を最小限にするために、入出力アダプタ依存コードを個別の管理パーティションに入れることが望ましい。したがって、例示的な諸実施形態のメカニズムは、不安定性を最小限にしながら、ハイパーバイザのより効率的な動作を提供する。
【０１０８】
例示的な諸実施形態は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態、またはハードウェアとソフトウェアの両方の要素を含む実施形態の形を取ることができることを認識されたい。模範的な一実施形態では、例示的な諸実施形態のメカニズムは、ソフトウェアで実装され、そのソフトウェアは、ファームウェア、常駐ソフトウェア、マイクロコードなどを含むがこれらに限定されない。
【０１０９】
さらに、例示的な諸実施形態は、コンピュータまたは任意の命令実行システムによりあるいはそれに関連して使用するためのプログラム・コードを提供するコンピュータ使用可能媒体またはコンピュータ可読媒体からアクセス可能なコンピュータ・プログラムの形を取ることができる。この説明のために、コンピュータ使用可能媒体またはコンピュータ可読媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容、保管、通信、伝搬、または伝送可能な任意の装置にすることができる。
【０１１０】
この媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体システム（あるいは装置またはデバイス）もしくは伝搬媒体にすることができる。コンピュータ可読媒体の例としては、半導体またはソリッド・ステート・メモリ、磁気テープ、取り外し可能コンピュータ・ディスケット、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、剛性磁気ディスク、および光ディスクを含む。光ディスクの現在の例としては、コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクト・ディスク（ＣＤ−Ｒ／Ｗ）、およびＤＶＤを含む。
【０１１１】
プログラム・コードの保管または実行あるいはその両方に適したデータ処理システムは、システム・バスを介して記憶素子に直接または間接的に結合された少なくとも１つのプロセッサを含むことになる。記憶素子としては、プログラム・コードの実際の実行中に使用されるローカル・メモリと、大容量記憶装置と、実行中に大容量記憶装置からコードを検索しなければならない回数を削減するために少なくとも何らかのプログラム・コードの一時記憶を提供するキャッシュ・メモリとを含むことができる。
【０１１２】
入出力またはＩ／Ｏ装置（キーボード、ディスプレイ、ポインティング・デバイスなどを含むがこれらに限定されない）は、直接あるいは介在する入出力コントローラにより、システムに結合することができる。データ処理システムが介在する私設網または公衆網を介してその他のデータ処理システムあるいはリモート・プリンタまたは記憶装置に結合された状態になれるようにするために、ネットワーク・アダプタもシステムに結合することができる。モデム、ケーブル・モデム、およびイーサネット・カードは、現在使用可能なタイプのネットワーク・アダプタのうちのいくつかに過ぎない。
【０１１３】
本発明の説明は、例示および解説のために提示されたものであり、網羅するためまたは開示された形式に本発明を限定するためのものではない。多くの変更および変形は当業者にとって明白なものになるであろう。この実施形態は、本発明の原理、実用的な適用例を最も良く説明するため、ならびにその他の当業者が企図された特定の用途に適した様々な変更を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
【図面の簡単な説明】
【０１１４】
【図１】当技術分野で一般に知られているＰＣＩｅファブリック・トポロジを組み込むシステムを例示する模範的な図である。
【図２】当技術分野で一般に知られているシステム仮想化を例示する模範的な図である。
【図３】仮想化層を使用して、ＰＣＩルート複合体の入出力を仮想化するための第１の手法を例示する模範的な図である。
【図４】最初から共用されるＰＣＩ入出力アダプタを使用して、ＰＣＩルート複合体の入出力を仮想化するための第２の手法を例示する模範的な図である。
【図５】ＰＣＩｅ入出力仮想化対応エンドポイントの模範的な図である。
【図６】例示的な一実施形態により、ＩＯＶ対応エンドポイントまたはアダプタが使用されるシステム構造の模範的な図である。
【図７】例示的な一実施形態により、ロジカル・パーティション（ＬＰＡＲ）からプラットフォーム・ファームウェアへの１組の模範的な呼び出しの定義を例示する模範的な図である。
【図８】例示的な一実施形態により、ハードウェア管理コンソール（ＨＭＣ）からプラットフォームへの１組の模範的な要求および応答の定義を例示する模範的な図である。
【図９】例示的な一実施形態により、入出力仮想化（ＩＯＶ）アダプタを有するシステムに関する模範的な「立ち上げ」動作の概要を示す流れ図である。
【図１０】例示的な一実施形態により、システムにＩＯＶアダプタを追加するための模範的なホット・プラグ動作の概要を示す流れ図である。
【図１１】例示的な一実施形態により、システムにＩＯＶアダプタを追加するための模範的なホット・プラグ動作の概要を示す流れ図である。
【図１２】例示的な一実施形態により、システムからＩＯＶアダプタを除去するための模範的なホット・プラグ動作の概要を示す流れ図である。
【図１３】例示的な一実施形態により、ロジカル・パーティション（ＬＰＡＲ）に仮想機能（ＶＦ）を動的に追加するための模範的な動作の概要を示す流れ図である。
【図１４】例示的な一実施形態により、ＬＰＡＲからＶＦを動的に除去するための模範的な動作の概要を示す流れ図である。
【図１５】例示的な一実施形態により、ＶＦが被るエラーからのエラー回復のための模範的な動作の概要を示す流れ図である。
【図１６】例示的な一実施形態により、ネットワーク・アダプタ上のネットワーク・アドレスを変更するための模範的なＩＯＡサウスサイド管理動作の概要を示す流れ図である。
【図１７】例示的な一実施形態により、クライアント・パーティション終了のための模範的な動作の概要を示す流れ図である。
【図１８】例示的な一実施形態により、ＩＭＰパーティション終了のための模範的な動作の概要を示す流れ図である。
【符号の説明】
【０１１５】
３１０：ホストＣＰＵセット
３２０：ＳＩ（システム・イメージ）１
３３０：ＳＩ（システム・イメージ）２
３４０：仮想化層
３５０：ＰＣＩルート複合体
３６０：ＰＣＩｅスイッチ
３７０：ＰＣＩｅエンドポイント
３８０：ＰＣＩｅエンドポイント
３９０：ＰＣＩｅエンドポイント
【図１】
0005305848.tif 000002
【図２】
0005305848.tif 000003
【図３】
0005305848.tif 000004
【図４】
0005305848.tif 000005
【図５】
0005305848.tif 000006
【図６】
0005305848.tif 000007
【図７】
0005305848.tif 000008
【図８】
0005305848.tif 000009
【図９】
0005305848.tif 000010
【図１０】
0005305848.tif 000011
【図１１】
0005305848.tif 000012
【図１２】
0005305848.tif 000013
【図１３】
0005305848.tif 000014
【図１４】
0005305848.tif 000015
【図１５】
0005305848.tif 000016
【図１６】
0005305848.tif 000017
【図１７】
0005305848.tif 000018
【図１８】
0005305848.tif 000019