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