(57)【特許請求の範囲】
【請求項１】
ＣＰＵと、メモリと、一以上の物理キューを有するマルチキューＩ／Ｏデバイスとを備えた物理計算機で、仮想計算機を生成する仮想化部を稼働させる仮想計算機の制御方法であって、
前記仮想化部が、前記メモリの記憶領域を割り当てて仮想計算機を生成する第１のステップと、
前記仮想化部が、前記仮想計算機に一以上の仮想キューを備えた仮想マルチキューＩ／Ｏデバイスを提供する第２のステップと、
前記仮想計算機が、前記仮想キューの使用を開始する第３のステップと、
前記仮想化部が、前記使用が開始された仮想キューに対して、前記物理キューを割り当てる第４のステップと、
前記仮想化部が、前記割り当てた物理キューに前記仮想計算機の前記記憶領域への直接アクセスを許可する第５のステップと、
を含み、
前記マルチキューＩ／Ｏデバイスは、
一以上の物理キューを備えたマルチキューＮＩＣであることを特徴とする仮想計算機の制御方法。
【請求項２】
請求項１に記載の仮想計算機の制御方法であって、
前記第４のステップは、
前記仮想化部は、前記使用を開始している仮想キューの数が、前記マルチキューＩ／Ｏデバイスが有する物理キューの数を上回ったか否かを判定する第６のステップと、
前記仮想化部が、前記仮想キューの通信量を取得する第７のステップと、
前記判定の結果、前記使用を開始している仮想キューの数が、前記マルチキューＩ／Ｏデバイスが有する物理キューの数を上回った場合には、前記使用を開始している仮想キューのうち通信量の多い順に前記物理キューを割り当て直す第８のステップと、
を含むことを特徴とする仮想計算機の制御方法。
【請求項３】
請求項１に記載の仮想計算機の制御方法であって、
前記第４のステップは、
前記仮想キューの設定パラメータを前記メモリに格納する第９のステップと、
前記仮想キューへ前記物理キューを割り当てたときに、前記仮想キューの設定パラメータを前記物理キューに反映させる第１０のステップと、
を含むことを特徴とする仮想計算機の制御方法。
【請求項４】
請求項１に記載の仮想計算機の制御方法であって、
前記仮想化部は、
第１の仮想計算機を生成する第１の仮想化部と、前記第１の仮想計算機上で稼動して第２の仮想計算機を生成する第２の仮想化部と、を含んで、前記第２の仮想化部は前記仮想キューを制御する第２のドライバを有し、前記第１の仮想化部は、前記物理キューを制御する第１のドライバを有し、
前記第２の仮想計算機が前記物理キューと通信する第１１のステップを更に含み、
前記第１１のステップは、
前記第２のドライバが前記仮想キューに対する操作指示を受け付けるステップと、
前記第１のドライバが前記物理キューに対する操作指示を受け付けるステップと、
を含むことを特徴とする仮想計算機の制御方法。
【請求項５】
請求項２に記載の仮想計算機の制御方法であって、
前記第７のステップは、
前記仮想キューに割り当て済みの前記物理キューの通信量を保持する転送量カウンタの値を取得するステップと、
前記取得した値を、前記物理キューが割り当てられた前記仮想キューの累計通信量として設定するステップと、
を含むことを特徴とする仮想計算機の制御方法。
【請求項６】
請求項２に記載の仮想計算機の制御方法であって、
前記第８のステップは、
前記仮想キューの優先度を受け付けるステップと、
前記判定の結果、前記使用を開始している仮想キューの数が、前記マルチキューＩ／Ｏデバイスが有する物理キューの数を上回った場合には、前記使用を開始している仮想キューのうち前記優先度の高い順に前記物理キューを割り当て直すステップと、
を含むことを特徴とする仮想計算機の制御方法。
【請求項７】
ＣＰＵと、メモリと、一以上の物理キューを有するマルチキューＩ／Ｏデバイスとを備えた物理計算機で、前記メモリの記憶領域を割り当てて仮想計算機を生成する仮想化部を有する仮想計算機システムであって、
前記仮想化部は、
前記仮想計算機に一以上の仮想キューを備えた仮想マルチキューＩ／Ｏデバイスを提供する仮想デバイスエミュレータと、
前記仮想キューの停止または使用開始の状態を格納する通信状態情報と、
前記使用を開始している仮想キューに対して前記物理キューを割り当てるキュー割り当て管理部と、
前記物理キューによる前記仮想計算機を割り当てた前記のメモリへのアクセスを許可するモジュールと、
を備え、
前記マルチキューＩ／Ｏデバイスは、
一以上の物理キューを備えたマルチキューＮＩＣであることを特徴とする仮想計算機システム。
【請求項８】
請求項７に記載の仮想計算機システムであって、
前記キュー割り当て管理部は、
前記仮想キューの通信量を取得する通信帯域測定部と、
前記使用を開始している仮想キューの数が、前記マルチキューＩ／Ｏデバイスが有する物理キューの数を上回ったか否かを判定して、前記使用を開始している仮想キューの数が、前記マルチキューＩ／Ｏデバイスが有する物理キューの数を上回った場合には、前記使用を開始している仮想キューのうち、前記通信量の多い順に前記物理キューを割り当て直すキュー割り当て調整部と、
を含むことを特徴とする仮想計算機システム。
【請求項９】
請求項７に記載の仮想計算機システムであって、
前記仮想化部は、
前記仮想キューの設定パラメータを格納する仮想キュー設定データと、
前記物理キューを割り当てたときに、前記仮想キューの設定パラメータを前記物理キューに反映させるデバイスドライバと、
を含むことを特徴とする仮想計算機システム。
【請求項１０】
請求項７に記載の仮想計算機システムであって、
前記仮想化部は、
第１の仮想計算機を生成する第１の仮想化部と、前記第１の仮想計算機上で稼動して第２の仮想計算機を生成する第２の仮想化部と、を含み、
前記第２の仮想化部は、
前記仮想キューを制御する第２のドライバを有して、前記第２のドライバが前記仮想キューに対する操作指示を受け付け、
前記第１の仮想化部は、
前記物理キューを制御する第１のドライバを有し、前記第１のドライバが前記物理キューに対する操作指示を受け付けることを特徴とする仮想計算機システム。
【請求項１１】
請求項８に記載の仮想計算機システムであって、
前記マルチキューＩ／Ｏデバイスは、
前記物理キューの通信量を測定する転送量カウンタを含み、
前記通信帯域測定部は、
前記仮想キューに割り当て済みの前記物理キューの通信量を保持する転送量カウンタの値を取得し、当該値を前記物理キューが割り当てられた前記仮想キューの累計通信量として設定することを特徴とする仮想計算機システム。
【請求項１２】
請求項７に記載の仮想計算機システムであって、
前記キュー割り当て管理部は、
前記仮想キューの優先度を受け付けて、前記使用を開始している仮想キューの数が、前記マルチキューＩ／Ｏデバイスが有する物理キューの数を上回った場合には、前記使用を開始している仮想キューのうち前記優先度の高い順に前記物理キューを割り当て直すことを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は仮想計算機に関し、仮想計算機上で更にＶＭＭ（Virtual Machine Monitor）を稼働させる際のＩ／Ｏ処理技術に関する。
【背景技術】
【０００２】
オープン系サーバの性能および機能拡充に伴い、サーバに搭載されるＣＰＵコアを有効に活用する方法として、サーバ仮想化ソフトウェア（ＶＭＭ：Virtual Machine Monitor）が広く用いられている。ＶＭＭは、１台の物理サーバが搭載するＣＰＵと、メモリ及びＩ／Ｏデバイスといった計算機資源を仮想化して複数の仮想計算機を生成し、それぞれの仮想計算機でＯＳやアプリケーションを稼働させる。
【０００３】
ＶＭＭの処理に伴う性能低下（オーバヘッド）を軽減するために、ＣＰＵやメモリまたはＩ／Ｏデバイスには仮想化支援機能が徐々に搭載されている。ＣＰＵやメモリに対してはＩｎｔｅｌ社とＡＭＤ社が、ＶＭＭの機能を実現するＶＴ−ｘ（Virtualization Technology for x86）とＳＮＶ（Secure Virtual Machine）、及びＩ／Ｏデバイスからメモリへの直接操作を許可するＶＴ−ｄ（Virtualization Technology for devices）とＩＯＭＭＵ（Input / Output Memory Management Unit）をそれぞれ提供している。
【０００４】
またＩ／Ｏデバイスについては、通信帯域が著しく向上しているＮＩＣ（Network Interface Card）の仮想化に関する性能が重要になっている。そこで仮想計算機向けにキュー（ネットワークフレームの送受信機能を提供するモジュール）を複数搭載するマルチキューＮＩＣが登場している。マルチキューＮＩＣを実現する技術としては、Ｉｎｔｅｌ社のＶＭＤｑ（Virtual Machine Device queue）や、ＰＣＩ（Peripheral Component Interconnect）の規格として標準化されたＳＲ−ＩＯＶ（Single Root I/O Virtualization）等が知られている。
【０００５】
上記ＶＭＤｑとＳＲ−ＩＯＶでは、ソフトウェアがＩ／Ｏを操作する際のインタフェースが異なる。ＮＩＣはキューだけでなく、Ｉ／Ｏデバイスの基本的な情報を保持するＰＣＩ  Ｃｏｎｆｉｇｕｒａｔｉｏｎレジスタも提供する必要がある。ＶＭＤｑでは、ＰＣＩ  Ｃｏｎｆｉｇｕｒａｔｉｏｎレジスタは１組のみで、キューだけを複数提供する機能である。一方のＳＲ−ＩＯＶは、ＰＣＩ  Ｃｏｎｆｉｇｕｒａｔｉｏｎレジスタとキューのセットを複数提供する機能である。各セットは独立したＮＩＣとして利用するための最低限の機能を備えており、ＶＦ（Virtual Function）と呼ばれる。なおＳＲ−ＩＯＶでは、ＶＦを含むＩ／Ｏカード全体を制御するモジュールをＰＦ（Physical Function）と呼ぶ。
【０００６】
マルチキューＮＩＣが登場するまでは、ＶＭＭが全てのフレームを受け取って、各フレームの宛先を調べた後、適切な仮想計算機のメモリにコピーするソフトウェア処理（ソフトウェアコピー）が不可避であった。しかし、ネットワーク帯域が１Ｇｂｐｓ、１０Ｇｂｐｓと向上するにつれて、ソフトウェアコピーがネックになって、物理ＮＩＣの帯域を活かせなくなった。一方でマルチキューＮＩＣでは、各キューを仮想計算機に独占的に割り当て、仮想計算機のメモリに直接フレームを届けることができるため、ソフトウェアコピーを回避できる。
【０００７】
これらのマルチキューＮＩＣを使うための技術として、例えば、特許文献２が知られている。特許文献２にはＳＲ−ＩＯＶで規定された共有機能を有するＩ／Ｏデバイスを制御するＩ／Ｏ管理パーティションの仕組みが開示されている。
【０００８】
また、仮想計算機の性能低下（オーバヘッド）が減少したため、性質の異なるＶＭＭを２つ組み合わせて使用する構成も提案され始めている。例えば、ハードウェア障害に対する耐性の高いＶＭＭ（以降、ハイパバイザと呼称）が作成する仮想計算機の上で、少ない計算機資源で多数の仮想計算機を作成できるＶＭＭ（以降、Ｌｖ１  ＶＭＭと呼称）を稼働させれば、多数の仮想計算機を安全に運用できる。
【０００９】
上記の構成を実現する技術として、例えば、特許文献１が知られている。この特許文献１には「ホストＶＭＭの呼び出しの要因に応じて、第２の仮想プロセッサ上のユーザプログラムを実行するためのゲスト状態エリアと、ゲストＶＭＭを実行するためのホスト状態エリアの何れかを選択し、物理プロセッサを制御するためのシャドウＶＭＣＢのゲスト状態エリアを更新することで、第１の仮想プロセッサ上で仮想化機能を備えた次世代ＯＳをユーザプログラムとして実行する」と記載されている。
【００１０】
マルチキューＮＩＣはＶＭＭを１つだけ用いる構成向けに登場した技術であるが、ＶＭＭを２つ組み合わせて使用する構成でもＬｖ１  ＶＭＭ上の仮想計算機（以降、サブ仮想計算機と呼称）で広帯域を利用したい。また仮想計算機は追加が容易であり、稼働したまま他の物理計算機に移動するライブマイグレーションが可能といった柔軟性を特長としているが、これらの柔軟性はサブ仮想計算機でも維持したい。
【００１１】
ＶＭＭを２つ組み合わせて使用する構成では物理計算機上でハイパバイザが実行され、物理計算機に搭載されたＮＩＣ等の資源を仮想計算機に配分する。更に仮想計算機上でＶＭＭが実行され、ＶＭＭは仮想計算機に搭載された資源をサブ仮想計算機に再配分する。サブ仮想計算機上ではＯＳ及びアプリケーションが実行される。
【００１２】
マルチキューＮＩＣを複数のＶＭＭで共有する技術として、例えば、特許文献３が知られている。特許文献３ではＶＭＭを「仮想計算機モニタ」、仮想計算機を「ＬＰＡＲ」と表記しており、特許文献３には「ＰＣＩのＳＲ−ＩＯＶデバイスをＩＯスイッチ経由で複数の物理計算機上の仮想計算機モニタ上に割当てる環境において、ＰＦを第１の仮想計算機モニタに割当て、複数のＶＦは任意の仮想計算機モニタ上のＬＰＡＲに割当てる。ＶＦからＰＦへのイベントを第２の仮想計算機モニタで検出した場合には、ＰＦが割当てられた第１の仮想計算機モニタへ通信して第１の仮想計算機モニタ上でＰＦイベントを実行する。また、第１の仮想計算機モニタがＰＦからＶＦへのイベントを検出した場合は、対象となるＶＦが割当てられた第２の仮想計算機モニタへ通信して第２の仮想計算機モニタ上のＬＰＡＲでＶＦイベントを実行する。」と記載されている。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００９−３７４９号公報
【特許文献２】米国特許出願公開第２００９／０１３３０１６号明細書
【特許文献３】特開２００９−３０１１６２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
上記特許文献３の技術を応用すると、ＶＭＭを２つ組み合わせて使用する仮想計算機に於いても、特許文献３の技術を用いて仮想マルチキューＮＩＣをそれぞれ仮想計算機に割り当てれば、Ｌｖ１  ＶＭＭが仮想キューをサブ仮想計算機に割り当てるため、ソフトウェアコピーを用いることなくサブ仮想計算機にフレームを直接届けることが考えられる。
【００１５】
しかしＶＭＭは一般に、マルチキューＮＩＣのキュー数が一定である前提で設計されている。そのため特許文献３の技術では、サブ仮想計算機の追加やライブマイグレーション等で、各仮想計算機上のサブ仮想計算機数が仮想計算機起動時に割り当てたキュー数を超える場合がある。ここで、サブ仮想計算機数が、マルチキューＮＩＣのキュー数を超えると、マルチキューＮＩＣはサブ仮想計算機にフレームを直接届けられなくなる。するとＬｖ１  ＶＭＭがソフトウェアコピーを始め、マルチキューＮＩＣのキューが割り当てられていないサブ仮想計算機への帯域が急激に劣化する。従って、通信帯域を確保するためにはサブ仮想計算機の追加やライブマイグレーション等が制限されてしまう場合があった。
【００１６】
そこで本発明は、上記問題点に鑑みてなされたもので、ハイパバイザが生成する仮想計算機上で更にＬｖ１  ＶＭＭを稼働させてサブ仮想計算機を作成する計算機システムのＮＩＣの性能に関して、Ｌｖ１  ＶＭＭによるソフトウェアコピーの回避によるピーク帯域の確保と、サブ仮想計算機の増設やライブマイグレーションに関する帯域劣化の抑止の両立を目的とする。
【課題を解決するための手段】
【００１７】
本発明は、ＣＰＵと、メモリと、一以上の物理キューを有するマルチキューＩ／Ｏデバイスとを備えた物理計算機で、仮想化部を稼働させる仮想計算機の制御方法であって、前記仮想化部が、前記メモリの記憶領域を割り当てて仮想計算機を生成する第１のステップと、前記仮想化部が、前記仮想計算機に一以上の仮想キューを備えた仮想マルチキューＩ／Ｏデバイスを提供する第２のステップと、前記仮想計算機が、前記仮想キューの使用を開始する第３のステップと、前記仮想化部が、前記使用が開始された仮想キューに対して、前記物理キューを割り当てる第４のステップと、前記仮想化部が、前記割り当てた物理キューに前記仮想計算機の前記記憶領域への直接アクセスを許可する第５のステップと、を含み、前記マルチキューＩ／Ｏデバイスは、一以上の物理キューを備えたマルチキューＮＩＣである。
【発明の効果】
【００１８】
したがって、本発明によれば、仮想化部（ハイパバイザ）がＩ／Ｏデバイスの物理キューを仮想計算機に搭載される仮想キューに割り当て、かつ物理キューから仮想計算機のメモリへの直接アクセスを許可する。更に、ハイパバイザは仮想計算機に仮想的なマルチキューＩ／Ｏデバイスを搭載するので、第２の仮想化部（Ｌｖ１ＶＭＭ）がマルチキューＮＩＣの各キューを第２の仮想計算機（サブ仮想計算機）に割り当て、Ｉ／Ｏデバイスの各キューからサブ仮想計算機のメモリへの直接アクセスを許可する。従って、ハイパバイザ及びＬｖ１ＶＭＭがソフトウェアコピーを実行するのを回避してＩ／Ｏデバイスのピーク帯域を確保でき、物理計算機の負荷の増大を抑制できる。
【００１９】
また本発明では各仮想計算機が物理計算機の保有する物理キューと同数の仮想キューを保持し、利用が開始された仮想キューに物理キューが割り当てられるため、仮想計算機を起動する時点でサブ仮想計算機の数が不明であっても、サブ仮想計算機の増設またはライブマイグレーションに関する帯域劣化を抑止できる。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１の実施形態を示し、物理計算機及び仮想計算機の関係を示すブロック図である。
【図２】本発明の第１の実施形態を示し、物理計算機及びソフトウェアの関係を示すブロック図である。
【図３】本発明の第１の実施形態を示し、物理メモリの内容を示すアドレスマップである。
【図４】本発明の第１の実施形態を示し、仮想計算機と物理メモリの対応関係を保持する物理メモリ割り当てテーブルの一例である。
【図５】本発明の第１の実施形態を示し、Ｉ／Ｏデバイスによるメモリ操作の可否を設定するＩＯＭＭＵ制御テーブルの一例である。
【図６】本発明の第１の実施形態を示し、物理キューの使用状態を保持する物理キュー使用テーブルの一例である。
【図７】本発明の第１の実施形態を示し、仮想キューに対する物理キューの割り当てを保持する物理キュー割り当て表の一例である。
【図８】本発明の第１の実施形態を示し、仮想キューの利用頻度を保持する仮想キュー使用量テーブルの例である。
【図９】本発明の第１の実施形態を示し、仮想キューの割り当て優先度を保持する仮想キュー優先度テーブルの例である。
【図１０】本発明の第１の実施形態を示し、仮想キュー毎にソフトウェアコピーした量を保持するソフトウェア転送量テーブルの例である。
【図１１】本発明の第１の実施形態を示し、Ｌｖ１  ＶＭＭが仮想キューに渡した設定パラメータを保持する仮想キュー設定データの例である。
【図１２】本発明の第１の実施形態を示し、サブ仮想計算機と仮想メモリの対応関係を保持する仮想メモリ割り当てテーブルの例である。
【図１３】本発明の第１の実施形態を示し、サブ仮想キューに対する仮想キューの割り当てを保持する仮想キュー割り当てテーブルの例である。
【図１４】本発明の第１の実施形態を示し、コンソールに表示されるユーザインタフェースの画面イメージの一例である。
【図１５】本発明の第１の実施形態を示し、ハイパバイザで行われる全体の処理を示すフローチャートの一例である。
【図１６】本発明の第１の実施形態を示し、ハイパバイザの初期化の処理の一例を示すフローチャートである。
【図１７】本発明の第１の実施形態を示し、ハイパバイザによる仮想計算機の起動処理の一例を示すフローチャートである。
【図１８】本発明の第１の実施形態を示し、ハイパバイザによる仮想計算機の終了処理の一例を示すフローチャートである。
【図１９】本発明の第１の実施形態を示し、ハイパバイザが物理キューの割り当てを解除する処理の一例を示すフローチャートである。
【図２０】本発明の第１の実施形態を示し、仮想キュー操作を契機とするハイパバイザの処理の一例を示すローチャートである。
【図２１】本発明の第１の実施形態を示し、ハイパバイザが物理キューの割り当てを追加する処理の一例を示すフローチャートである。
【図２２】本発明の第１の実施形態を示し、ハイパバイザが物理キューを再割り当てする処理の一例を示すフローチャートである。
【図２３】本発明の第１の実施形態を示し、ハイパバイザが仮想キューの割り当て優先度を算出する処理の一例を示すフローチャートである。
【図２４】本発明の第１の実施形態を示し、ハイパバイザが定期的に行う処理の一例を示すフローチャートである。
【図２５】本発明の第１の実施形態を示し、コンソールからの入力を契機とするハイパバイザの処理の一例を示すフローチャートである。
【図２６】本発明の第１の実施形態を示し、物理キューからの割り込みを契機とするハイパバイザの処理の一例を示すフローチャートである。
【図２７】本発明の第１の実施形態を示し、Ｌｖ１  ＶＭＭで行われる処理の一例を示すフローチャートである。
【図２８】本発明の第２の実施形態を示し、物理計算機及びソフトウェアの関係を示すブロック図の一例である。
【図２９】本発明の第２の実施形態を示し、物理メモリの内容を示すアドレスマップである。
【図３０】本発明の第２の実施形態を示し、ハイパバイザ初期化処理の一例を示すフローチャートである。
【図３１】本発明の第２の実施形態を示し、ハイパバイザが物理キューの割り当てを解除する処理の一例を示すフローチャートである。
【図３２】本発明の第２の実施形態を示し、仮想キュー操作を契機とするハイパバイザの処理の一例を示すフローチャートである。
【図３３】本発明の第２の実施形態を示し、ハイパバイザが物理キューの割り当てを追加する処理の一例を示すフローチャートである。
【図３４】本発明の第２の実施形態を示し、ハイパバイザが物理キューを再割り当てする処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００２１】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００２２】
＜第１実施形態＞
本実施形態では、ＳＲ−ＩＯＶ規格に準拠するマルチキューのＩ／ＯデバイスとしてマルチキューＮＩＣを採用し、マルチキューＮＩＣが搭載する複数のキューをサブ仮想計算機に割り当て、Ｉ／Ｏデバイスからメモリへの直接操作を許可するＩＯＭＭＵ（Ｉｎｔｅｌ社のＶＴ−ｄ又はＡＭＤ社のＩＯＭＭＵ）によってソフトウェアコピーを回避する制御する例について説明する。
【００２３】
＜１． ハードウェア構成＞
図１は、本発明の実施形態となる仮想計算機システムを実行させる物理計算機１０の構成の一例を示すブロック図である。物理計算機１０は、ＣＰＵ７０を１つ以上有し、これらのＣＰＵ７０−１〜７０−ｎはＱＰＩ（Quick Path Interconnect）やＳＭＩ（Scalable Memory Interconnect）等のインターコネクト１２１を介してＣｈｉｐＳｅｔ１００やメモリ９０に接続される。なお、図中ＣＰＵ７０−１〜７０ｎの総称をＣＰＵ７０とし、仮想計算機３０−１〜３０−ｎの総称を仮想計算機３０とする。
【００２４】
ＣｈｉｐＳｅｔ１００には、ＰＣＩｅｘｐｒｅｓｓ等のバス１２０を介してＩ／Ｏデバイスが接続される。Ｉ／Ｏデバイスとしては、ＬＡＮ１２２に接続される物理ＮＩＣ１５０（Network Interface Card）や、ストレージ装置１２３やＳＡＮ１２４（Storage  Area  Network）等に接続されるＨＢＡ(Host Bus Adapter)８０、コンソール１３０に接続されるグラフィックコントローラ８５などで構成される。以下、物理ＮＩＣ１５０を、複数の物理キューを有するマルチキューのＩ／Ｏデバイスの一例として説明する。なお、ＨＢＡをマルチキューのＩ／Ｏデバイスで構成してもよい。また、物理計算機１０は、物理ＮＩＣ１５０やＨＢＡ８０等のＩ／Ｏデバイスを複数備えることができる。
【００２５】
ＣＰＵ７０はインターコネクト１２１を介してメモリ９０にアクセスする。またＣＰＵ７０はＣｈｉｐＳｅｔ１００を介して物理ＮＩＣ１５０等のＩ／Ｏデバイスにアクセスして所定の処理を行う。同様に、物理ＮＩＣ１５０等のＩ／ＯデバイスはＣｈｉｐＳｅｔ１００を介してメモリ９０にアクセスする。
【００２６】
メモリ９０には、ハイパバイザ２０がロードされ、ＣＰＵ７０によって実行されることでメモリ９０の一部を仮想計算機３０に分配する。更に仮想計算機３０には第１レベルＶＭＭ（以下、Ｌｖ１  ＶＭＭとする）４０がロードされ、Ｌｖ１  ＶＭＭ４０は仮想計算機３０の計算機資源の一部をサブ仮想計算機５０に分配する。サブ仮想計算機５０にはＯＳ及びアプリケーションがサブ仮想メモリ５００にロードされ、サブ仮想計算機５０−１〜５０−ｙで実行される。本実施形態ではサブ仮想計算機５０上にロードされたＯＳ及びアプリケーションを総称して第２レベル（以下、Ｌｖ２とする）ゲスト６０−１〜６０−ｙと表記する。また、Ｌｖ１  ＶＭＭ４０−１〜４０−ｎの総称はＬｖ１  ＶＭＭ４０とし、サブ仮想計算機３０−１〜３０−ｙの総称は、サブ仮想計算機３０とし、Ｌｖ２ゲスト６０−１〜６０−ｙの総称を、Ｌｖ２ゲスト６０とする。なお、他の構成要素についても同様であり、総称については添え字のない符号を使用する。
【００２７】
＜２．ソフトウェア構成＞
次に、物理計算機１０上で実行されるソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図２を参照しながら詳述する。
【００２８】
図２は、物理計算機及びソフトウェアの関係を示すブロック図である。物理計算機１０上では、仮想計算機３０を生成するハイパバイザ２０が稼働する。仮想計算機３０上では、サブ仮想計算機５０を生成するＬｖ１ＶＭＭ４０が稼働する。サブ仮想計算機５０上では、Ｌｖ２ゲスト６０が実行される。
【００２９】
以下では、物理計算機１０は、メモリ９０と、複数の物理ＮＩＣ１５０と、ＣｈｉｐＳｅｔ１００を搭載して、通信を行う例について説明する。
【００３０】
メモリ９０は、ハイパバイザ２０によって仮想計算機３０に配分される。物理ＮＩＣ１５０は、ＳＲ−ＩＯＶ規格に準拠しており、それぞれが独立したＮＩＣとして機能するＶＦ１７０（Virtual Function）と、ＶＦ１７０を制御するＰＦ１６０（Physical Function）を備える。ＶＦ１７０は、メモリ上のデータをネットワークフレームとして送信する機能と、受信したネットワークフレームをメモリ上に格納する機能を備えた複数の物理キュー１８０を含む。またＶＦ１７０は、送受信した累積のデータ量を格納するハード転送量カウンタ１９０を含む。ＣｈｉｐＳｅｔ１００は、ＶＦ１７０及びメモリ９０のアドレスの組み合わせに応じて、直接アクセスを許可或いは禁止するＩＯＭＭＵ（Input / Output Memory Management Unit）１４０を含む。
【００３１】
ハイパバイザ２０は、仮想計算機３０を生成し、仮想計算機３０に対してメモリ９０や物理キュー１８０の一部を割り当て、仮想メモリ４００や仮想ＮＩＣ４１０を提供する。仮想ＮＩＣ４１０はＶＭＤｑ（Virtual Machine Device queue）の機能を有するマルチキューＮＩＣであり、物理計算機１０が保有する物理キュー１８０と同数の仮想キュー４２０を含む。
【００３２】
ハイパバイザ２０は、仮想キュー４２０に対する物理キュー１８０の割り当てを管理するキュー割り当て管理部３００と、物理キュー１８０が不足する場合に仮想キュー４２０のネットワークフレーム送受信機能を代替実行するソフトウェアスイッチ３６０と、仮想ＮＩＣ４１０の処理を模擬する仮想ＮＩＣエミュレータ２７０−１〜２７０−ｎと、物理ＮＩＣ１５０を制御する物理ＮＩＣ制御部２３０と、ＶＦ１７０毎のアクセス可能なメモリ範囲を規定するＩＯＭＭＵ制御テーブル２１０と、仮想メモリ４００として割り当てたメモリ９０の範囲を格納する物理メモリ割り当てテーブル（図中TBL）２００と、計算機管理者からメモリやキューの割り当て要求などを受け取るＵＩ（User Interface）制御部２２０を含む。
【００３３】
キュー割り当て管理部３００は、どの仮想キュー４２０に対して物理キュー１８０を割り当てるべきかを判断するキュー割り当て調整部３１０と、仮想キュー４２０と物理キュー１８０との対応付けを保持する物理キュー割り当てテーブル（図中TBL）３２０と、仮想キュー４２０を用いて実施されたデータ転送の量を保持する物理キュー使用量テーブル（図中TBL）３３０と、仮想キュー４２０に対する物理キュー１８０の割り当て優先度を保持する仮想キュー優先度テーブル（図中TBL）３４０と、仮想キュー４２０を用いて実施されたデータ転送量とデータ転送速度を測定する通信帯域測定部３５０を含む。
【００３４】
ソフトウェアスイッチ３６０は、仮想キュー４２０と物理キュー１８０を仲介してデータの送受信を実現するデータ転送部３７０と、仲介の際に発生したソフトウェアコピーの量を格納するソフトウェア転送量テーブル（図中TBL）３８０と、仮想キュー４２０から送信する仮想メモリ４００上のデータをソフトウェアコピーして一時的に保持し、物理キュー１８０に渡す送信バッファ３９０と、物理キュー１８０が受信するデータを仮想キュー４２０で指定された仮想メモリ４００条の領域にソフトウェアコピーするまで一時的に保持する受信バッファ３９５を含む。
【００３５】
仮想ＮＩＣエミュレータ２７０（仮想化デバイスエミュレータ）は、仮想キュー４２０が参照または更新すべき仮想メモリ４００の領域のアドレスや、通信の開始または停止状態などを保持する仮想キュー設定データ２８０を、仮想キュー４２０毎に保持する。
【００３６】
物理ＮＩＣ制御部２３０は、ＰＦ１６０を操作してＶＦ１７０を初期化させるＰＦドライバ２４０と、ＶＦ１７０に含まれる物理キュー１８０やハード転送量カウンタ１９０を操作するＶＦドライバ２５０と、各物理キュー１８０を仮想計算機またはハイパバイザのどちらが使用しているかを管理する物理キュー使用テーブル（図中TBL）２６０を含む。なお、ハード転送量カウンタ１９０は、物理キュー１８０毎のデータ転送量を保持するカウンタである。
【００３７】
Ｌｖ１ＶＭＭ４０は、サブ仮想計算機５０を生成し、サブ仮想計算機５０に対して仮想メモリ４００や仮想キュー４２０の一部を割り当て、サブ仮想メモリ５００やサブ仮想ＮＩＣ５１０と、サブ仮想ＮＩＣ５１０を構成するサブ仮想キュー５２０を提供する。
【００３８】
Ｌｖ１ＶＭＭ４０は、サブ仮想ＮＩＣ５１０の処理を模擬するサブ仮想ＮＩＣエミュレータ４３０と、サブ仮想メモリ５００として割り当てた仮想メモリ４００の範囲を格納する仮想メモリ割り当てテーブル（図中TBL）４４０と、サブ仮想キュー５２０に対する仮想キュー４２０の割り当てを保持する仮想キュー割り当てテーブル（図中TBL）４５０と、仮想ＮＩＣ４１０に含まれる複数の仮想キュー４２０を制御する仮想ＮＩＣドライバ４６０を含む。仮想ＮＩＣドライバ４６０は、ＶＭＤｑ機能を有するＮＩＣの複数のキューを制御するドライバをＶＭＤｑ対応ドライバと呼ぶ。
【００３９】
Ｌｖ２ゲスト６０は、サブ仮想ＮＩＣ５１０を制御するサブ仮想ＮＩＣドライバ５５０を含む。
【００４０】
ここで、ハイパバイザ２０のキュー割り当て管理部３００やソフトウェアスイッチ３６０や仮想ＮＩＣエミュレータ２７０または物理ＮＩＣ制御部２３０等の各機能部はプログラムとしてメモリ９０にロードされる。
【００４１】
ＣＰＵ７０は、各機能部のプログラムに従って動作することによって、所定の機能を実現する機能部として動作する。例えば、ＣＰＵ７０は、キュー割り当て管理プログラムに従って処理することでキュー割り当て管理部３００として機能する。他のプログラムについても同様である。さらに、ＣＰＵ７０は、各プログラムが実行する複数の処理のそれぞれを実現する機能部としても動作する。計算機及び計算機システムは、これらの機能部を含む装置及びシステムである。
【００４２】
ハイパバイザ２０やＬｖ１ＶＭＭ４０及びＬｖ２ゲスト６０の各機能を実現するプログラム、テーブル等の情報は、ストレージ装置１２３や不揮発性半導体メモリ、ハードディスクドライブ、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記憶デバイス、または、ＩＣカード、ＳＤカード、ＤＶＤ等の計算機読み取り可能な非一時的データ記憶媒体に格納することができる。
【００４３】
図２においては、ハイパバイザが第１の仮想化部となって、仮想計算機３０を生成し、仮想計算機３０上で第２の仮想化部としてＬｖ１ＶＭＭ４０を稼働させる。そして、Ｌｖ１ＶＭＭ４０が生成したサブ仮想計算機５０上でＬｖ２ゲストを稼働させる。本実施形態の複数の仮想化部は、階層的に構成されるものである。
【００４４】
図３は、ハイパバイザ２０が管理するメモリ９０の一例である。
【００４５】
ハイパバイザ２０は、メモリ９０上に自身を配置する領域と、複数の仮想計算機３０が仮想メモリ４００として使用する領域を割り当てる。
【００４６】
ハイパバイザ２０は、前述の様にメモリ割り当てテーブル（図中TBL）２００、ＩＯＭＭＵ制御テーブル２１０、ＵＩ制御部２２０、物理ＮＩＣ制御部２３０、仮想ＮＩＣエミュレータ２７０、キュー割り当て管理部３００、ソフトウェアスイッチ３６０をその中に含む。例えば図３のように、ハイパバイザ２０は、自身にアドレスＡＤ０〜ＡＤ１を割り当てて各モジュールを配置し、仮想計算機３０−１にアドレスＡＤ１〜ＡＤ２を、仮想計算機３０−ｎにアドレスＡＤ３〜ＡＤ４を割り当てる。
【００４７】
Ｌｖ１ＶＭＭ４０は、各仮想計算機３０上に自身を配置する領域と、サブ仮想計算機５００がサブ仮想メモリ５００として使用する領域を割り当てる。更にサブ仮想計算機５００には、Ｌｖ２ゲスト６０が格納される。
【００４８】
図４は、仮想計算機３０とメモリ９０の対応関係を保持する物理メモリ割り当てテーブル２００の例である。物理メモリ割り当てテーブル２００は、物理メモリ先頭アドレス６００とサイズ６１０で特定されるメモリ９０の連続領域に対して、当該領域を割り当てた仮想計算機番号６２０と当該仮想計算機の仮想メモリ先頭アドレス６３０を格納するエントリで構成される。
【００４９】
仮想計算機３０に割り当てられていない連続領域は、仮想計算機番号６２０と仮想メモリ先頭アドレス６３０に、未割り当てを意味する数値を格納する。また、ハイパバイザ２０が使用する連続領域は、仮想計算機番号６２０と仮想メモリ先頭アドレス６３０に、ハイパバイザを意味する数値を格納する。
【００５０】
なお、物理メモリ割り当てテーブル２００の各フィールドの値は、ハイパバイザ２０が決定した値を格納することができる。
【００５１】
図５は、物理ＮＩＣ１５０等のＩ／Ｏデバイスによるメモリ操作の可否を指定するＩＯＭＭＵ制御テーブル２１０の例である。ＩＯＭＭＵ制御テーブル２１０は、ＩＯＭＭＵ１４０に対して物理ＮＩＣ１５０等のＩ／Ｏデバイスに直接アクセスを許すメモリ領域を指示するテーブルである。
【００５２】
Ｉ／Ｏデバイス番号６４０は、Ｉ／Ｏデバイス（物理ＮＩＣ１５０やＨＢＡ８０）を一意に区別する番号であり、ＰＣＩのＲｅｑｕｅｓｔｅｒＩＤが使用される。物理ＮＩＣ１５０がＳＲ−ＩＯＶ規格に準拠する場合は、ＶＦ１７０がそれぞれＲｅｑｕｅｓｔｅｒＩＤを持つため、ＶＦ１７０毎に異なる設定を指示できる。Ｉ／Ｏデバイスのアクセスを許可する仮想メモリ４００上のアドレスを指示するために、仮想メモリ先頭アドレス６３０とサイズ６１０が保持される。また仮想メモリ４００の実体がメモリ９０上のどこであるかを指定するために、物理メモリ先頭アドレス６００が保持される。
【００５３】
なお、図５に示すＩＯＭＭＵ制御テーブル２１０の物理メモリ先頭アドレス６００、サイズ６１０及び仮想メモリ先頭アドレス６３０は、図４の物理メモリ割り当てテーブル２００と同種のデータを格納するフィールド（またはカラム）には同一の符号を付与したが、格納される値は各テーブル毎に異なる。以下に説明する他のテーブルも同様である。
【００５４】
図６は、物理キュー１８０の使用状態を保持する物理キュー使用テーブル２６０の例である。物理キュー使用テーブル２６０では、物理キュー１８０を一意に識別するために、物理計算機１０内の各物理ＮＩＣ１５０に付与する物理ＮＩＣ番号６５０と、物理ＮＩＣ１５０内の物理各キューに付与する物理キュー番号６６０のペアを格納する。また、使用者６７０には、いずれかの仮想計算機３０に割り当てている場合に「仮想計算機」、ハイパバイザ２０のソフトウェアスイッチが使用している場合に「ソフトウェアスイッチ」、使用していない場合は「なし」を格納する。
【００５５】
なお、物理ＮＩＣ番号６５０や物理キュー番号６６０は、コンソール１３０から管理者などが入力した値を格納するようにしても良い。
【００５６】
図７は、仮想キュー４２０に対する物理キュー１８０の割り当てを保持する物理キュー割り当てテーブル３２０の例である。物理キュー割り当てテーブル３２０では、仮想キュー４２０を一意に識別するために、仮想計算機番号６２０と、当該仮想計算機内の各仮想ＮＩＣ４１０に付与する仮想ＮＩＣ番号７００と、当該仮想ＮＩＣ内の各仮想キュー４２０に付与する仮想キュー番号７１０の組み合わせを格納する。さらに、仮想キュー４２０に対応付ける物理キュー１８０を一意に識別するために、物理ＮＩＣ番号６５０と物理キュー番号６６０を格納する。なお、仮想キュー４２０に物理キュー１８０が割り当てられていない場合は、物理ＮＩＣ番号６５０と物理キュー番号６６０に「未割り当て」を意味する値を格納する。
【００５７】
なお、仮想計算機番号６２０、仮想ＮＩＣ番号７００、仮想キュー番号７１０は、ハイパバイザ２０が決定した値を格納することができる。
【００５８】
図８は、仮想キュー４２０の利用頻度を保持する仮想キュー使用量テーブル３３０の例である。仮想キュー使用量テーブル３３０では、仮想キュー４２０を一意に識別するために、仮想計算機番号６２０と仮想ＮＩＣ番号７００と仮想キュー番号７１０の組み合わせを格納する。また仮想キュー４２０毎の利用頻度を算出するために、最後に計測した時点での累計データ転送量が今回累計転送量７２０に、１つ前に計測した時点での累計データ転送量が前回累計転送量７３０に、それぞれ格納される。そしてハイパバイザ２０は、今回累積転送量７２０と前回累積転送量７３０の差分を、計測する時間間隔で割って求めた仮想キューの利用頻度が、実測転送速度７４０に格納される。
【００５９】
なお、仮想キュー番号７１０毎の各転送量及び転送速度は、通信帯域測定部３５０が所定のタイミングで測定した値である。
【００６０】
図９は、仮想キュー４２０の割り当て優先度を保持する仮想キュー優先度テーブル３４０の例である。仮想キュー優先度テーブル３４０では、仮想キュー４２０を一意に特定するために、ＭＡＣ(Media Access Control)アドレス７５０を用いる。ＭＡＣアドレスは、ネットワークフレームの送信元や受信先を特定する番号であり、物理キュー１８０／仮想キュー４２０／サブ仮想キュー５２０の共通パラメータとして設定される。
【００６１】
仮想キュー優先度テーブル３４０でＭＡＣアドレスを指定する理由は、仮想キュー優先度テーブル３４０を設定する管理者が仮想キュー４２０ではなくサブ仮想キュー５２０を中心に優先度を考えるため、サブ仮想キュー５２０に関連する番号を用いた方が管理者の負担が小さいためである。
【００６２】
また仮想キュー優先度テーブル３４０では、優先度として各仮想キュー４２０が使用する予定の通信帯域を予約転送速度７６０として保持する。予約転送速度７６０を指定しない場合は「無効」を意味する値が格納される。予約転送速度７６０が有効の場合は、実測転送速度７４０に代わって予約転送速度７６０が、仮想キューの利用頻度と見なされ、物理キューを割り当てる際の優先順位に反映される。
【００６３】
図１０は、仮想キュー４２０毎にＬｖ１ＶＭＭ４０がソフトウェアコピーした量を保持するソフトウェア転送量テーブル３８０の例である。ソフトウェア転送量テーブル３８０では、仮想キュー４２０を一意に識別するために、仮想計算機番号６２０と仮想ＮＩＣ番号７００と仮想キュー番号７１０の組み合わせを格納する。また、ハイパバイザ２０はソフトウェアコピーしたデータ量の累計を累計転送量７７０に格納する。
【００６４】
図１１は、Ｌｖ１ＶＭＭ４０が仮想キュー４２０に渡した設定パラメータを保持する仮想キュー設定データ２８０の例である。仮想キュー設定データ２８０では、仮想キュー４２０を一意に識別するために、仮想計算機番号６２０と仮想ＮＩＣ番号７００と仮想キュー番号７１０の組み合わせを格納する。
【００６５】
また、仮想キュー４２０の設定パラメータとして、ＭＡＣアドレス７５０と、当該仮想キューを用いた通信が開始しているか停止しているかを示す通信状態７８０と、送信すべきデータの位置を仮想メモリ４００のアドレスで規定する送信バッファアドレス７９０と、受信データを格納すべき位置を仮想メモリ４００のアドレスで規定する受信バッファアドレス７９５を含む。
【００６６】
図１２は、サブ仮想計算機５０と仮想メモリ４００の対応関係を保持する仮想メモリ割り当てテーブル４４０の例である。仮想メモリ割り当てテーブル４４０は、仮想メモリ先頭アドレス６３０とサイズ６１０で特定される連続領域に対して、当該領域を割り当てたサブ仮想計算機番号８００と当該サブ仮想計算機のサブ仮想メモリ先頭アドレス８１０を格納する。サブ仮想計算機５０に割り当てられていない連続領域は、サブ仮想計算機番号８００とサブ仮想メモリ先頭アドレス８１０に、未割り当てを意味する数値を格納する。
【００６７】
仮想メモリ割り当てテーブル４４０の各フィールドは、Ｌｖ１ＶＭＭ４０が決定した値を格納することができる。
【００６８】
図１３は、サブ仮想キュー５２０に対する仮想キュー４２０の割り当てを保持する仮想キュー割り当てテーブル４５０の例である。仮想キュー割り当てテーブル４５０では、サブ仮想キュー５２０を一意に識別するために、サブ仮想計算機番号８００と、当該サブ仮想計算機内の各サブ仮想ＮＩＣ５１０に付与するサブ仮想ＮＩＣ番号８１０と、当該サブ仮想ＮＩＣ内の各サブ仮想キュー５２０に付与するサブ仮想キュー番号８２０の組み合わせを格納する。また仮想キュー４２０を一意に識別するために、仮想ＮＩＣ番号７００と仮想キュー番号７１０を格納する。
【００６９】
仮想キュー割り当てテーブル４５０の各フィールドは、Ｌｖ１ＶＭＭ４０が決定した値を格納することができる。
【００７０】
図１４は、コンソール１３０に表示されるユーザインタフェース１３１の例である。本ユーザインタフェース１３１は、仮想計算機３０の開始または終了と、ＭＡＣアドレスに対する物理キュー割り当ての優先度変更の画面を提供する。
【００７１】
ユーザインタフェース１３１の上半分には、仮想計算機番号６２０毎に実行状態８３０が表示されており、実行状態８３０をRunningまたはShutdownに書き換えると仮想計算機３０の開始または終了をハイパバイザ２０に指示することができる。なお、書き換えの入力は、コンソール１３０が有する図示しない入力装置（キーボードやマウス）を用いることができる。
【００７２】
ユーザインタフェース１３１の下半分には、ＭＡＣアドレス入力値７５５と予約転送速度入力値８５５のペアが表示されており、これらを書き換えると指定されたＭＡＣアドレス７５０が設定されている仮想キュー４２０に対する物理キュー１８０割り当ての優先度が変更され、物理キュー１８０の再割り当てを指示できる。
【００７３】
＜３．ハイパバイザによる処理＞
次に、ハイパバイザ２０が行う処理の一例について、以下のフローチャートを参照しながら説明する。
【００７４】
図１５は、ハイパバイザ２０が行う処理の全体を示すフローチャートの一例である。ハイパバイザ２０は、物理計算機１０の電源投入を契機に処理を開始し、ステップＳ１０００でハイパバイザ２０内の各モジュールを初期化する。
【００７５】
ハイパバイザ２０は、続くステップＳ１０１０で管理者のコンソール１３０からの指示等のイベントを待ち受け、ステップＳ１０２０では、発生したイベントの種類に応じた処理を呼び出す。
【００７６】
発生したイベントが仮想計算機の起動指示であった場合は、ステップＳ１０３０に遷移して、仮想計算機３０を起動するための資源割り当て処理や初期化処理を行う。
【００７７】
発生したイベントが仮想計算機の停止処理であった場合は、ステップＳ１０４０に遷移して、仮想計算機３０を停止させるための資源解放処理を行う。
【００７８】
発生したイベントがＬｖ１ＶＭＭ４０による仮想キュー４２０の設定変更操作であった場合は、ステップＳ１０５０に遷移して、仮想キュー４２０に渡された設定パラメータを物理キュー１８０の処理に反映させる処理を行う。
【００７９】
発生したイベントが定期タイマ割り込みの受信であった場合は、ステップＳ１０６０に遷移して、仮想キュー４２０の転送量監視といった定期処理を行う。
【００８０】
発生したイベントが物理キュー１８０の処理完了を知らせる割り込みの受信であった場合は、ステップＳ１０７０に遷移して、ハイパバイザ２０自身が物理キュー１８０に次の操作を指示するか、或いはＬｖ１ＶＭＭ４０に次の仮想キュー４２０操作を促す。
【００８１】
発生したイベントがコンソール１３０からの入力の場合は、ステップＳ１０７０へ遷移して、仮想キュー４２０に予約する転送速度等の各仮想キュー４２０に対する物理キュー１８０割り当ての優先度の変更が指示された場合は、この指示を物理キュー１８０の割り当てに反映させる処理を行う。
【００８２】
発生したイベントがその他のイベントであった場合は、ステップＳ１０９０に遷移して、発生したイベントに応じて一般的なハイパバイザと同様の処理を行う。
【００８３】
ハイパバイザ２０は、上記処理を繰り返して実行することで、発生したイベントに対応する処理を実行する。
【００８４】
図１６は、図１５のステップＳ１０００で行うハイパバイザ初期化処理のフローチャートの一例である。
【００８５】
ハイパバイザ２０はステップＳ１１００で、物理メモリ割り当てテーブル２００の第１エントリにハイパバイザ２０自身が使用するメモリ９０の物理メモリ先頭アドレス６００とサイズ６１０を登録し、仮想計算機番号６２０と仮想メモリ先頭アドレス６３０を「ハイパバイザ」とする。また第２エントリにその他全域の物理メモリ先頭アドレス６００とサイズ６１０を登録し、仮想計算機番号６２０と仮想メモリ先頭アドレス６３０を「未割り当て」とする。
【００８６】
続いてハイパバイザ２０は、ＶＦ１７０等のＩ／Ｏデバイスをハイパバイザ自身が使用するＩ／Ｏデバイスと、仮想計算機３０に割り当てるＩ／Ｏデバイスに分類する。この分類は、例えば、ＰＦ１６０と予め設定したＶＦ１７０をハイパバイザ２０に割り当てておき、残りのＶＦ１７０を仮想計算機３０用に分類しておくようにしてもよい。
【００８７】
そしてステップＳ１１１０で、ハイパバイザ２０が使用するＩ／Ｏデバイスについては、ＩＯＭＭＵ制御テーブル２１０に当該Ｉ／ＯデバイスのＩ／Ｏデバイス番号６４０を登録し、仮想メモリ先頭アドレス６３０を、物理メモリ先頭アドレス６００とサイズ６１０にはステップＳ１１１０で登録したハイパバイザのメモリ領域を記録する。
【００８８】
本設定により、ハイパバイザ２０が使用するＩ／Ｏデバイスは、ハイパバイザ２０のメモリ領域のみの直接アクセスが許可される。また仮想計算機３０に割り当てるＩ／ＯデバイスはＩＯＭＭＵ制御テーブル２１０で仮想メモリ先頭アドレス６３０が設定されていないため、いずれのメモリ領域も直接アクセスが禁止される。
【００８９】
続いてハイパバイザ２０は、ステップＳ１１２０で、物理キュー使用テーブル２６０を初期化する。ハイパバイザ２０が使用するＩ／Ｏデバイスの中にはＶＦ１７０も含まれるので、当該ＶＦ１７０に関して物理ＮＩＣ番号６５０と物理キュー番号６６０を登録し、使用中６７０を「ソフトウェアスイッチ」とする。また、仮想計算機３０に割り当てるＩ／Ｏデバイスの中にもＶＦ１７０が含まれるので、当該ＶＦ１７０に関しては使用中６７０を「なし」とする。
【００９０】
以上の処理により、物理メモリ割り当てテーブル２００と、ＩＯＭＭＵ制御テーブル２１０及び物理キュー使用テーブル２６０の初期化が完了する。
【００９１】
図１７は、ハイパバイザ２０が図１５のステップＳ１０３０で行う仮想計算機の起動処理のフローチャートの一例である。ハイパバイザ２０は、コンソール１３０等から起動指令を受けた仮想計算機３０の計算機資源を確保して、ステップＳ１２００で仮想キュー４２０を複数含む仮想ＮＩＣ４１０を生成し、当該仮想ＮＩＣ４１０を搭載する仮想計算機３０を生成する。
【００９２】
続いて、当該仮想計算機３０に含まれる全ての仮想キュー４２０についてステップＳ１２２０〜Ｓ１２３０の処理を繰り返してハイパバイザ２０が保有する各種表を更新する。ステップＳ１２２０では、キュー割り当て管理部３００内の物理キュー割り当てテーブル３２０に当該仮想キュー４２０の識別子として、仮想計算機番号６２０、仮想ＮＩＣ番号７００、仮想キュー番号７１０を記録し、物理ＮＩＣ番号６５０と物理キュー番号６６０に「未割り当て」を記録する。  ステップＳ１２３０では、仮想ＮＩＣエミュレータ２７０内の仮想キュー設定データ２８０に当該仮想キュー４２０の識別子として、仮想計算機番号６２０、仮想ＮＩＣ番号７００、仮想キュー番号７１０を記録し、ＭＡＣアドレス７５０に当該仮想計算機３０用に予め確保された番号を登録し、通信状態７８０には停止、送信バッファアドレス７９０と受信バッファアドレス７９５には０を登録する。
【００９３】
上記処理により、この処理によって、物理キュー割り当てテーブル３２０は、図７の２つ目のエントリのように、仮想計算機番号６２０、仮想ＮＩＣ番号７００、仮想キュー番号７１０に関して設定されるが、物理ＮＩＣ番号６５０と物理キュー番号６６０が未割当の状態となる。つまり、仮想計算機３０には仮想ＮＩＣ４１０と仮想キュー４２０のみが割り当てられ、当該仮想キュー４２０に物理キュー１８０が対応していない状態となる。また、仮想キュー設定データ２８０では、仮想キュー番号７１０に対する送信バッファアドレス７９０と受信バッファアドレス７９５が未定＝０で、通信状態７８０が「停止」のエントリが生成される。
【００９４】
図１８は、ハイパバイザ２０が図１５のＳ１０４０で行う仮想計算機の終了処理のフローチャートの例である。ハイパバイザ２０は、終了の指令を受けた仮想計算機３０に含まれる全ての仮想キュー４２０について、ステップＳ１３１０〜Ｓ１３３０を繰り返して、キュー割り当て管理部３００が保有する各種表を更新する。
【００９５】
ステップＳ１３１０では、物理キュー割り当てテーブル３２０を参照し、終了させる仮想計算機３０の仮想キュー４２０に対して物理キュー１８０の割り当てがあるか否かを判断する。物理キュー１８０の割り当てがある場合のみＳステップ１３２０に遷移し、物理キュー１８０の割り当てを解除する。この処理は、図１９で詳述する。ステップＳ１３３０では、ハイパバイザ２０が物理キュー割り当てテーブル３２０から当該仮想キュー４２０の情報を削除する。
【００９６】
そして、ハイパバイザ２０は、終了の指令を受けた仮想計算機３０に割り当てられている計算機資源を解放して仮想計算機３０を終了させる。
【００９７】
図１９は、キュー割り当て管理部３００が図１８のＳ１３２０などで物理キュー１８０の割り当てを解除する処理の一例を示すフローチャートである。キュー割り当て管理部３００は、ステップＳ１４００で物理キュー使用テーブル２６０のうち終了させる仮想計算機３０に対応する物理キュー１８０に関するエントリを更新し、使用中６７０を「なし」とする。
【００９８】
続いてステップＳ１４１０で、キュー割り当て管理部３００は、ＶＦドライバ２５０を呼び出して、終了させる仮想計算機３０に対応する物理キュー１８０を停止させる。ステップＳ１４２０では、キュー割り当て管理部３００は、ＩＯＭＭＵ制御テーブル２１０から当該物理キュー１８０を含むＶＦ１７０のエントリを削除し、当該物理キュー１８０が仮想メモリ４００へ直接アクセスするのを禁止する。
【００９９】
上記処理によって、使用を終了する仮想計算機３０の仮想キュー４２０への物理キュー１８０の割り当てが解除され、当該物理キュー１８０は空きリソースに遷移する。
【０１００】
図２０は、仮想キュー４２０に対する操作を契機として、図１５のステップＳ１０５０で仮想ＮＩＣエミュレータ２７０が行う処理の一例を示すフローチャートである。
【０１０１】
仮想ＮＩＣエミュレータ２７０は、ステップＳ１６００で、操作対象の仮想キュー４２０について、仮想キュー設定データ２８０を参照して操作前の設定パラメータを取得する。そして、仮想ＮＩＣエミュレータ２７０は、コンソール１３０等から受け付けた仮想キュー４２０の新たな設定パラメータで仮想キュー設定データ２８０を更新する。
【０１０２】
続いて仮想ＮＩＣエミュレータ２７０は、ステップＳ１６１０で、操作前後の設定パラメータを比較し、通信状態７８０が「停止」から「開始」に変化したか否かを判断する。通信状態７８０が「停止」から「開始」に変化していた場合はステップＳ１６５０に遷移してキュー割り当て管理部３００に処理を依頼し、それ以外はステップＳ１６２０に遷移する。
【０１０３】
ステップＳ１６２０では、仮想ＮＩＣエミュレータ２７０が、操作前後の設定パラメータを比較し、通信状態７８０が「開始」から「停止」に変化したか否かを判断する。通信状態７８０が「開始」から「停止」に変化していた場合はステップＳ１６４０に遷移してキュー割り当て管理部３００に物理キュー１８０の割り当て解除を依頼し、それ以外はステップＳ１６３０に遷移する。
【０１０４】
ステップＳ１６３０では、キュー割り当て管理部３００が、物理キュー割り当てテーブル３２０を参照し、操作対象の仮想キュー４２０に物理キュー１８０が割り当てられているか否かを判断する。操作対象の仮想キュー４２０に物理キュー１８０が割り当てられている場合はステップＳ１６８０に遷移し、仮想キュー４２０に物理キュー１８０が割り当てられていなければ図２０の処理を終了する。
【０１０５】
ステップＳ１６５０からステップＳ１６７５までの各手順とステップＳ１６９０は、仮想キュー４２０の通信が開始される際に呼び出されるキュー割り当て管理部３００の処理である。キュー割り当て管理部３００はステップＳ１６５０で、仮想キュー設定データ２８０を参照して通信状態７８０が「開始」になっている仮想キュー４２０の数を算出する。算出した仮想キュー４２０の数が、物理キュー１８０の総数を超える場合のみ物理キュー不足と判断する。この場合、通信中の仮想キュー４２０の数が物理キュー１８０の数を超えているので、Ｌｖ１ＶＭＭ４０ではソフトウェアコピーが行われることになる。
【０１０６】
ステップＳ１６６０では、ステップＳ１６５０で物理キュー不足と判断した場合はステップＳ１６９０に遷移して物理キュー１８０の割り当てをやり直す。一方、物理キュー１８０の数が不足していない場合はステップＳ１６７０に遷移する。
【０１０７】
ステップＳ１６７０では、キュー割り当て管理部３００が物理キュー使用テーブル２６０を参照し、使用中６７０が「なし」になっている未割当の物理キュー１８０を選択する。続くステップＳ１６７５では、キュー割り当て管理部３００が選択した物理キュー１８０を、通信を開始した仮想キュー４２０に割り当てる。
【０１０８】
仮想キュー４２０に物理キュー１８０が割り当てられている場合のみ実行されるステップＳ１６８５では、仮想ＮＩＣエミュレータ２７０が、ＶＦドライバ２５０に仮想キュー設定データ２８０が保持しているＭＡＣアドレス７５０および通信状態７８０と、送信バッファアドレス７９０と受信バッファアドレス７９５を渡し、各設定を物理キュー１８０に反映させる。
【０１０９】
上記の処理により、物理キュー１８０の数が不足していなければ、通信を開始した仮想キュー４２０に物理キュー１８０が割り当てられる。一方、物理キュー１８０の数が不足していれば、仮想キュー４２０の優先度に応じた物理キュー１８０の再割り当てが実行される。
【０１１０】
図２１は、キュー割り当て管理部３００が図２０のＳ１６７５で、仮想キュー４２０に対する物理キュー１８０の割り当てを追加する処理の一例を示すフローチャートである。
【０１１１】
キュー割り当て管理部３００は、ステップＳ１５００で、選択した物理キュー１８０に対応する物理キュー使用テーブル２６０のエントリを更新し、使用中６７０に「仮想計算機」を格納する。続くステップＳ１５１０では、キュー割り当て管理部３００が、仮想キュー４２０に対応する物理キュー割り当てテーブル３２０のエントリを更新し、物理ＮＩＣ番号６５０と物理キュー番号６６０に、選択した物理キュー１８０の情報を記録する。そしてステップＳ１５２０では、キュー割り当て管理部３００が選択した物理キュー１８０を含むＶＦ１７０に対応するＩＯＭＭＵ制御テーブル２１０のエントリを追加し、Ｉ／Ｏデバイス番号６４０に当該ＶＦ１７０の番号を記録する。また、ＩＯＭＭＵ制御テーブル２１０の仮想メモリ先頭アドレス６３０、サイズ６１０、物理メモリ先頭アドレス６００には、物理メモリ割り当てテーブル２００を参照して、仮想計算機番号６２０が当該仮想キュー４２０を含む仮想計算機３０と一致するエントリの情報をコピーする。本設定により物理キュー１８０から仮想計算機３０の仮想メモリ４００に対する直接アクセスが許可される。
【０１１２】
図２２は、キュー割り当て調整部３１０が図２０のステップＳ１６９０で、物理キュー１８０を仮想キュー４２０に再割り当てする処理の一例を示すフローチャートである。
【０１１３】
キュー割り当て調整部３１０は、ステップＳ１７００で、仮想キュー４２０に対する物理キュー１８０の割り当て優先度を算出する。この処理については、図２３で詳述する。
【０１１４】
続くステップＳ１７１０では、優先度が１番からＮ番まで（Ｎは物理キュー１８０の総数）の仮想キュー４２０に対して物理キュー１８０の割り当て漏れがないかを、物理キュー割り当てテーブル３２０を参照して判定する。優先度が高い仮想キュー４２０に割り当て漏れがある場合のみステップＳ１７２０に進む。割り当て漏れが無ければ本処理を終了する。なお、優先度が高いとは、優先度が所定の閾値以上であることを指す。また、閾値としては、例えば、Ｎ番目の優先度の値を用いることができる。後述の例では、優先度としてＩ／Ｏデバイスの通信帯域（Ｇｂ／ｓｅｃ）を用いる例を示す。
【０１１５】
ステップＳ１７２０では、キュー割り当て調整部３１０がＶＦドライバ２５０に対して全物理キュー１８０の通信状態を「停止」に変更する様に指令する。続くステップＳ１７３０では、キュー割り当て調整部３１０が全物理キュー１８０に対して図１９の処理を呼び出して、仮想キュー４２０に対する物理キュー１８０の割り当てを全て解除する。
【０１１６】
ステップＳ１７４０では、キュー割り当て調整部３１０が優先度の数値が大きい仮想キュー４２０から順に、物理キュー使用テーブル２６０から未割り当ての物理キュー１８０を選択し、図２１の処理を呼び出して仮想キュー４２０に割り当てる。
【０１１７】
ステップＳ１７６０では、ＶＦドライバ２５０に仮想キュー設定データ２８０が保持しているＭＡＣアドレス７５０および通信状態７８０と、送信バッファアドレス７９０と受信バッファアドレス７９５を渡し、各設定を物理キュー１８０に反映させる。
【０１１８】
上記処理によって、優先度の高い仮想キュー４２０に対して物理キュー１８０の割り当てがない場合には、キュー割り当て調整部３１０が全ての物理キュー１８０の割り当てを解除した後に、優先度の高い順、換言すれば通信量の多い順で、通信を開始した仮想キュー４２０に対して物理キュー１８０を再割り当てすることができる。
【０１１９】
図２３は、キュー割り当て調整部３１０が図２２のステップＳ１７００で、仮想キュー４２０に対する物理キュー１８０の割り当て優先度を算出する処理の一例を示すフローチャートである。
【０１２０】
本フローチャートでは全仮想計算機３０の全仮想キュー４２０に対して、ステップＳ１８００〜ステップＳ１８３０の間の処理を繰り返す。ステップＳ１８１０では、キュー割り当て調整部３１０が仮想キュー設定データ２８０を参照して、当該仮想キュー４２０のＭＡＣアドレス７５０を求め、当該ＭＡＣアドレス７５０に対して仮想キュー優先度テーブル３４０に予約転送速度７６０が登録されているか否かを判定する。
【０１２１】
予約転送速度７６０が登録されている場合のみステップＳ１８４０に進み、ステップＳ１８４０では、更に予約転送速度７６０が「無効」か否かを判定する。予約転送速度７６０が「無効」でない場合のみステップＳ１８５０に進み、予約転送速度７６０に登録されていた値を、当該仮想キュー４２０に対する物理キュー１８０の割り当て優先度とする。
【０１２２】
一方で、キュー割り当て調整部３１０は予約転送速度７６０が「無効」または優先度が無い場合には、ステップＳ１８２０で、仮想キュー使用量テーブル３３０を参照して、当該仮想キュー４２０の実測転送速度７４０を、当該仮想キュー４２０に対する物理キュー１８０の割り当て優先度とする。
【０１２３】
以上の処理により、仮想キュー優先度テーブル３４０に予約転送速度７６０が登録されていれば、この予約帯域（転送速度）が優先度として扱われ、予約転送速度７６０が登録されていなければ実測転送速度７４０の実測帯域が優先度として扱われる。これにより、各仮想キュー４２０毎に優先度が対応付けられる。なお、仮想キュー４２０と優先度の対応関係は、ＭＡＣアドレス７５０と優先度を図示しないテーブルや配列に格納しておくことができる。あるいは、仮想キュー優先度テーブル３４０に優先度のフィールドを設けても良い。また、実測転送速度７４０と予約転送速度７６０は、単位時間当たりのデータ通信量を示すものであるから、データ通信量の多い仮想キュー４２０程、優先度は高くなる。
【０１２４】
図２４は、通信帯域測定部３５０が図１５のステップＳ１０６０にて定期的に行う処理の一例を示すフローチャートである。
【０１２５】
通信帯域測定部３５０は、図１５で示すタイマ割り込みの度に、全仮想計算機３０の全仮想キュー４２０について、ステップＳ１９００とステップ１９５０の間の処理を繰り返す。
【０１２６】
ステップＳ１９１０では、通信帯域測定部３５０が物理キュー割り当てテーブル３２０を参照して、仮想キュー４２０に対する物理キュー１８０の割り当ての有無を判定する。仮想キュー４２０に物理キュー１８０の割り当てがあれば、ステップＳ１９３０に遷移し、物理ＮＩＣ制御部２３０のＶＦドライバ２５０に依頼して当該物理キュー１８０のハード転送量カウンタ１９０を取得する。一方で、物理キュー１８０の割り当てがなければ、ステップＳ１９２０に遷移し、通信帯域測定部３５０はソフトウェア転送量テーブル３８０を参照して当該仮想キュー４２０の累計転送量７７０を取得する。
【０１２７】
続くステップＳ１９４０では、通信帯域測定部３５０が仮想キュー使用量テーブル３３０の今回累計転送量７２０を取得して前回累計転送量７３０にコピーし、ステップＳ１９２０又はステップＳ１９３０で取得した数値を今回累計転送量７２０に格納する。また、通信帯域測定部３５０が仮想キュー使用量テーブル３３０の今回累計転送量７２０と前回累計転送量７３０の差を本処理の実行時間間隔（タイマ割り込み間隔）で割って転送速度を算出し、実測転送速度７４０に記録する。
【０１２８】
ステップＳ１９６０では、図２２の処理を呼び出して仮想キュー４２０に対する物理キュー１８０の割り当てに、実測転送速度７４０に起因する優先度を反映させる。
【０１２９】
上記処理により、所定のタイマ割り込み間隔で、仮想キュー使用量テーブル３３０の今回累計転送量７２０、前回累計転送量７３０、実測転送速度７４０が更新される。そして、更新された実測転送速度７４０を用いて図２２の物理キュー１８０の再割り当てを実行する。
【０１３０】
図２５は、ＵＩ制御部２２０がコンソール１３０からの入力を契機として図１５のステップＳ１０８０で行う処理の一例を示すフローチャートである。
【０１３１】
ステップＳ２０００では、ＵＩ制御部２２０が図１４に示したユーザインタフェース１３１を表示するコンソール１３０からＭＡＣアドレス入力値７５５と予約転送速度入力値８５５を受け付ける。
【０１３２】
ステップＳ２０１０では、ＵＩ制御部２２０は、コンソール１３０から入力されたＭＡＣアドレス入力値７５５と予約転送速度入力値８５５を、仮想キュー優先度テーブル３４０のＭＡＣアドレス７５０及び予約転送速度７６０にコピーする。
【０１３３】
ハイパバイザ２０はステップＳ２０２０で、仮想キュー設定データ２８０を参照して通信状態７８０が通信の「開始」になっている仮想キュー４２０の数を算出し、算出した仮想キュー４２０の数が、物理キュー１８０の総数を超える場合のみ物理キュー不足と判断する。物理キュー不足の場合のみステップＳ２０３０に遷移し、コンソール１３０に入力された値を用いて、物理キュー１８０の再割り当てを実行する。物理キュー１８０の再割り当て処理は、図２２の処理を行えばよい。
【０１３４】
上記処理により、コンソール１３０から入力されたＭＡＣアドレス入力値７５５と予約転送速度入力値８５５が仮想キュー優先度テーブル３４０に反映され、さらに物理キュー１８０の再割り当て処理を実行することで、仮想キュー優先度テーブル３４０の予約転送速度７６０の変更を、仮想キュー４２０への物理キュー１８０の割り当てに反映させることができる。
【０１３５】
図２６は、ハイパバイザ２０が物理キュー１８０からの割り込みを契機として図１５のステップＳ１０７０で行う処理の一例を示すフローチャートである。ハイパバイザ２０は、ステップＳ２１００で物理キュー使用テーブル２６０を参照し、受け取った割り込みの対象を使用中６７０から取得する。使用中６７０が「仮想計算機」の場合、ハイパバイザ２０は仮想計算機３０に割り当てた物理キュー１８０への割り込みであると判定してステップＳ２１１０に遷移する。一方、使用中６７０が「仮想計算機」でない場合は、ステップＳ２１２０に遷移する。
【０１３６】
ステップＳ２１１０では、ハイパバイザ２０が物理キュー割り当てテーブル３２０を参照して、当該物理キュー１８０に対応する仮想計算機３０と仮想キュー４２０を特定する。そして、ハイパバイザ２０は、特定した仮想計算機３０に当該仮想キュー４２０への割り込みを伝達して、仮想キュー４２０の処理完了を伝える。
【０１３７】
一方で、使用中６７０が「ソフトウェアスイッチ」である場合にはステップＳ２１２０に遷移する。ステップＳ２１２０では、ハイパバイザ２０がＶＦドライバ２５０に問い合わせて、受信した割り込みが送信完了を意味する割り込みであるか否かを判断する。ＶＦドライバ２５０からの応答によって受信した割り込みが送信完了割り込みであると判定された場合には、ステップＳ２１６０に遷移してソフトウェアスイッチ３６０による送信処理を行う。
【０１３８】
一方、ＶＦドライバ２５０からの応答によって受信した割り込みが受信完了割り込みであると判定された場合には、ステップＳ２１３０に遷移してソフトウェアスイッチ３６０による受信処理を行う。
【０１３９】
ステップＳ２１３０では、受信完了割り込みであるので、ソフトウェアスイッチ３６０のデータ転送部３７０が、物理キュー１８０から受信バッファ３９５で受信したデータの宛先ＭＡＣアドレスを取得し、仮想キュー設定データ２８０を参照して当該ＭＡＣアドレス７５０を持つ宛先の仮想キュー４２０を特定する。
【０１４０】
続くステップＳ２１４０では、データ転送部３７０が、受信バッファ３９５内のデータを仮想キュー設定データ２８０の受信バッファアドレス７９５で指定される仮想メモリ４００内の領域にコピーする。
【０１４１】
ステップＳ２１４５では、データ転送部３７０が、当該仮想キュー４２０を有する仮想計算機３０に対して、仮想キュー４２０がデータ受信を完了した旨の割り込みを伝達し、仮想計算機３０が受信データを処理できる様にする。
【０１４２】
そして、ステップＳ２１５０では、データ転送部３７０が、ステップＳ２１４０でコピーしたデータサイズをソフトウェア転送量テーブル３８０の累計転送量７７０に加算する。ステップＳ２１３０〜Ｓ２１５０で受信完了割り込みの処理が完了する。
【０１４３】
ステップＳ２１６０では、送信完了割り込みであるので、データ転送部３７０が、送信バッファ３９５を参照して送信元ＭＡＣアドレスを取得し、仮想キュー設定データ２８０を参照して当該ＭＡＣアドレス７５０を持つ宛先の仮想キュー４２０を特定する。更にデータ転送部３７０は、当該仮想キュー４２０を有する仮想計算機３０に対して、仮想キュー４２０がデータ送信を完了した旨の割り込みを伝達し、仮想計算機３０が次のデータを送信できる様にする。
【０１４４】
ステップＳ２１６５では、データ転送部３７０が、全仮想計算機３０の全仮想キュー４２０の中から、仮想キュー設定データ２８０の受信バッファアドレス７９５で指定される仮想メモリ４００内の領域に送信データを保持している仮想キュー４２０を選択する。続くステップＳ２１７０では、データ転送部３７０は、選択した当該仮想メモリ４００内の送信データを送信バッファ３９０にコピーする。
【０１４５】
そしてステップＳ２１８０では、データ転送部３７０が、ステップＳ２１７０でコピーしたデータサイズをソフトウェア転送量テーブル３８０の累計転送量７７０に加算する。ステップＳ２１６０〜Ｓ２１８０で送信完了割り込みの処理が完了する。
【０１４６】
以上の処理により、ハイパバイザ２０は物理キュー１８０からの割り込みを契機として、仮想計算機３０への割り込みの伝達またはソフトウェアスイッチ３６０による処理を実行する。
【０１４７】
＜４．Ｌｖ１  ＶＭＭによる処理＞
図２７は、ＬＶ１ＶＭＭ４０の処理を示すフローチャートの一例である。Ｌｖ１ＶＭＭ４０は、仮想計算機３０の電源投入を契機に処理を開始し、ステップＳ２２００でＬｖ１ＶＭＭ４０内の各モジュールを初期化する。
【０１４８】
Ｌｖ１ＶＭＭ４０は、続くステップＳ２２１０で管理者の指示等のイベントを待ち受け、ステップＳ２２２０で発生したイベントの種類に応じた処理を呼び出す。
【０１４９】
発生したイベントがサブ仮想計算機５０の起動指示であった場合は、ステップＳ２２３０に遷移して、サブ仮想計算機５０に仮想キュー４２０や仮想メモリ４００などの資源を割り当て、サブ仮想計算機５０を起動するための初期化処理を行う。
【０１５０】
発生したイベントがサブ仮想計算機５０の停止処理であった場合は、ステップＳ２２４０に遷移して、サブ仮想計算機５０から仮想キュー４２０と仮想メモリ４００等の計算機資源を解放する。
【０１５１】
発生したイベントがＬｖ２ゲスト６０によるサブ仮想キュー５２０の設定変更操作であった場合は、ステップＳ２２５０に遷移して、サブ仮想キュー５２０に渡された設定パラメータを仮想キュー４２０の処理に反映させる。この際、Ｌｖ２ゲスト６０から渡される送信バッファまたは受信バッファのアドレスをサブ仮想メモリ５００のアドレスから仮想メモリ４２０のアドレスに変換する。本処理により、仮想キュー４２０によるサブ仮想メモリ５００への直接アクセスが許可される。
【０１５２】
発生したイベントが仮想キュー４２０の処理完了を知らせる割り込みの受信であった場合は、ステップＳ２２６０に遷移し、サブ仮想計算機５０に割り込みを伝達してＬｖ２ゲスト６０に次のサブ仮想キュー５２０の操作を促す。
【０１５３】
発生したイベントがその他のイベントであった場合は、ステップＳ２２７０に遷移して、発生したイベントに応じて一般的なハイパバイザ２０と同様の処理を行う。
【０１５４】
上記Ｓ２２３０〜Ｓ２２７０処理は、上記図１５に示したハイパバイザ２０の処理と同様に処理することができ、ＬＶ１ＶＭＭ４０はサブ仮想ＮＩＣのサブ仮想キュー５２０に対する処理を行うことができる。
【０１５５】
＜５．まとめ＞
以上の構成及び処理により、ハイパバイザ２０が、ＳＲ−ＩＯＶ規格に準拠した物理ＮＩＣ１５０に搭載された物理キュー１８０を仮想計算機３０内の仮想キュー４２０に割り当て、かつ物理キュー１８０はＩＯＭＭＵ制御テーブル２１０によって仮想計算機３０内の仮想メモリ４００への直接アクセスが許可される。更に、ハイパバイザ２０は仮想計算機３０に仮想的なマルチキューＮＩＣを搭載するので、仮想計算機３０上のＬｖ１ＶＭＭ４０が各仮想キュー４２０をサブ仮想計算機５０に割り当て、かつ各仮想キュー４２０はアドレス変換処理Ｓ２２５０（図２７参照）によってサブ仮想計算機５０のサブ仮想メモリ５００への直接アクセスが許可される。
【０１５６】
これらの割り当て及びアクセス許可の結果、物理キュー１８０がサブ仮想メモリ５００に直接アクセスできるため、ハイパバイザ２０及びＬｖ１ＶＭＭ４０のソフトウェアコピーが回避され、Ｉ／Ｏデバイスとしての物理ＮＩＣ１５０のピーク帯域を確保できる。
【０１５７】
また、本発明では各仮想計算機３０が物理計算機１０の保有する物理キュー１８０と同数の仮想キュー４２０を保持し、利用が開始された仮想キュー４２０に随時の物理キュー１８０が割り当てられるため、仮想計算機３０の起動後にサブ仮想計算機５０の数がライブマイグレーション等で増減する場合のサブ仮想計算機５０の通信帯域の劣化を回避できる。
【０１５８】
＜第２実施形態＞
本実施形態では、ＳＲ−ＩＯＶ準拠の物理ＮＩＣやＩＯＭＭＵを必要としない構成及び制御方法を説明する。本実施形態では、ＶＭＤｑに代表される非標準のマルチキューＮＩＣが搭載するキューをサブ仮想計算機に割り当て、ハイパバイザによるアドレス検証処理によってソフトウェアコピーを回避する。
【０１５９】
＜１． ハードウェア構成＞
本発明の実施形態となる仮想計算機システムを稼働させる物理計算機の構成例は、前記実施形態１の図１と同一であるため、説明を省略する。なお、前記第１実施形態の物理ＮＩＣ１５０のＳＲ−ＩＯＶに代わって、本実施形態では物理ＮＩＣ１５０が上記ＶＭＤｑを備える点が相違する。
【０１６０】
＜２．ソフトウェア構成＞
次に、物理計算機１０上で実行されるソフトウェアの構成の主要部と、制御対象となるハードウェア要素について、図２８を参照しながら詳述する。ただし、前記第１実施形態において既に説明した図１に示された同一の符号を付された構成と同一の機能を有する部分については、説明を省略する。
【０１６１】
図２８は、本発明の第２の実施形態を示し、物理計算機及びソフトウェアの関係を示すブロック図の一例である。
【０１６２】
物理計算機１０上では、仮想計算機３０を生成するハイパバイザ２０が稼働する。仮想計算機３０上では、サブ仮想計算機５０を生成するＬｖ１ＶＭＭ４０が稼働する。サブ仮想計算機５０上では、Ｌｖ２ゲスト６０が実行される。
【０１６３】
物理計算機１０は、メモリ９０と、物理ＮＩＣ１５０と、ＣｈｉｐＳｅｔ１００を搭載する。メモリ９０は、ハイパバイザ２０によって仮想計算機３０に配分される。物理ＮＩＣ１５０はＶＭＤｑの機能を有しており、複数の物理キュー１８０を含む。また物理ＮＩＣ１５０は、各物理キュー１８０毎に送受信した累積のデータ量を格納するハード転送量カウンタ１９０を含む。
【０１６４】
ハイパバイザ２０は、仮想計算機３０を生成し、仮想計算機３０に対してメモリ９０や物理キュー１８０の一部を割り当て、仮想メモリ４００や仮想ＮＩＣ４１０を提供する。仮想ＮＩＣ４１０はＶＭＤｑの機能を有するマルチキューＮＩＣであり、物理計算機１０が保有する物理キュー１８０と同数の仮想キュー４２０を含む。
【０１６５】
ハイパバイザ２０は、仮想キュー４２０に対する物理キュー１８０の割り当てを管理するキュー割り当て管理部３００と、物理キュー１８０が不足する場合に仮想キュー４２０のネットワークフレームの送受信機能を代替するソフトウェアスイッチ３６０と、仮想ＮＩＣ４１０の処理を模擬する仮想ＮＩＣエミュレータ２７０と、物理ＮＩＣ１５０を制御する物理ＮＩＣ制御部２３０と、仮想メモリ４００として割り当てたメモリ９０の範囲を格納する物理メモリ割り当てテーブル２００と、管理者からメモリやキューの割り当て要求などを受け取るＵＩ（User Interface）制御部２２０を含む。
【０１６６】
キュー割り当て管理部３００は、ソフトウェアスイッチ３６０は、前記第１実施形態と同一であるので、説明は省略する。
【０１６７】
仮想ＮＩＣエミュレータ２７０は、仮想キュー４２０が参照または更新すべき仮想メモリ４００の領域のアドレスや、通信の開始または停止状態などを保持する仮想キュー設定データ２８０を、仮想キュー４２０毎に保持する。また、仮想キュー４２０の設定パラメータとして渡される仮想メモリ４００のアドレスを、メモリ９０のアドレスに変換することで、物理キュー１８０から仮想メモリ４００への直接アクセスを許可するＤＭＡアドレス変換部２９０を備える。
【０１６８】
物理ＮＩＣ制御部２３０は、各物理キュー１８０やハード転送量カウンタ１９０を操作するＶＭＤｑ対応ドライバ２５５と、各物理キュー１８０を仮想計算機３０またはハイパバイザ２０のどちらが使用しているかを管理する物理キュー使用テーブル２６０を含む。
【０１６９】
なお、仮想計算機３０上の、Ｌｖ１ＶＭＭ４０と、Ｌｖ２ゲスト６０は、前記実施形態１と同一である。
【０１７０】
図２９は、ハイパバイザ２０が管理するメモリ９０のアドレスマップの一例である。
【０１７１】
ハイパバイザ２０は、メモリ９０上に自身を配置する領域と、仮想計算機３０が仮想メモリ４００として使用する領域を割り当てる。
【０１７２】
ハイパバイザ２０は、前記第１実施形態と同様に物理メモリ割り当てテーブル２００、ＵＩ制御部２２０、物理ＮＩＣ制御部２３０、仮想ＮＩＣエミュレータ２７０、キュー割り当て管理部３００、ソフトウェアスイッチ３６０を含む。例えば図２９のように、ハイパバイザ２０は、自身にアドレスＡＤ０〜ＡＤ１を割り当てて各モジュールを配置し、仮想計算機３０−１にアドレスＡＤ１〜ＡＤ２を、仮想計算機３０−ｎにアドレスＡＤ３〜ＡＤ４を割り当てる。
【０１７３】
Ｌｖ１ＶＭＭ４０は、各仮想計算機３０上に自身を配置する領域と、サブ仮想計算機５０がサブ仮想メモリ５００として使用する領域を割り当てる。更にサブ仮想計算機５０には、Ｌｖ２ゲスト６０が格納される。
【０１７４】
仮想計算機３０とメモリ９０の対応関係を保持する物理メモリ割り当てテーブル２００は、前記第１実施形態の図４と同一である。
【０１７５】
物理キュー１８０の使用状態を保持する物理キュー使用テーブル２６０は、前記第１実施形態の図６と同一である。
【０１７６】
仮想キュー４２０に対する物理キュー１８０の割り当てを保持する物理キュー割り当てテーブル３２０は、前記第１実施形態の図７と同一である。
【０１７７】
仮想キュー４２０の利用頻度を保持する仮想キュー使用量テーブル３３０は、前記第１実施形態の図８と同一である。
【０１７８】
仮想キュー４２０の割り当て優先度を保持する仮想キュー優先度テーブル３４０は、前記第１実施形態の図９と同一である。
【０１７９】
仮想キュー４２０毎にソフトウェアコピーしたデータ量を保持するソフトウェア転送量テーブル４２０は、前記第１実施形態の図１０と同一である。
【０１８０】
Ｌｖ１ＶＭＭ４０が仮想キュー４２０に渡した設定パラメータを保持する仮想キュー設定データ２８０は、前記第１実施形態の図１１と同一である。
【０１８１】
サブ仮想計算機５０と仮想メモリ４００の対応関係を保持する仮想メモリ割り当てテーブル４４０は、前記第１実施形態の図１２と同一である。
【０１８２】
サブ仮想キュー５２０に対する仮想キュー４２０の割り当てを保持する仮想キュー割り当てテーブル４５０は、前記第１実施形態の図１３と同一である。
【０１８３】
コンソール１３０に表示されるユーザインタフェースは前記第１実施形態の図１４と同一である。
【０１８４】
＜３．ハイパバイザによる処理＞
次に、第２実施形態においてハイパバイザ２０が行う処理の一例について、以下、フローチャートを参照しながら説明する。
【０１８５】
ハイパバイザ２０が行う処理の全体を示すフローチャートは、前記第１実施形態の図１５と同一である。
【０１８６】
図３０は、図１５のステップＳ１０００で行うハイパバイザ２０の初期化処理の一例を示すフローチャートである。ハイパバイザ２０はステップＳ１１００で、物理メモリ割り当てテーブル２００の第１エントリにハイパバイザ自身が使用するメモリの物理メモリ先頭アドレス６００とサイズ６１０を登録し、仮想計算機番号６２０と仮想メモリ先頭アドレス６３０を「ハイパバイザ」とする。また第２エントリにその他全域の物理メモリ先頭アドレス６００とサイズ６１０を登録し、仮想計算機番号６２０と仮想メモリ先頭アドレス６３０を「未割り当て」とする。
【０１８７】
続いてハイパバイザ２０は、ステップＳ１１２０で、物理キュー使用テーブル２６０を初期化する。ハイパバイザ２０が使用するＩ／Ｏデバイスの中にはＶＦ１７０も含まれるので、当該ＶＦ１７０に関して物理ＮＩＣ番号６５０と物理キュー番号６６０を登録し、使用中６７０を「ソフトウェアスイッチ」とする。また、仮想計算機３０に割り当てるＩ／Ｏデバイスの中にもＶＦ１７０が含まれるので、当該ＶＦ１７０に関しては使用中６７０を「なし」とする。
【０１８８】
以上の処理により、物理メモリ割り当てテーブル２００及び物理キュー使用テーブル２６０の初期化が完了する。
【０１８９】
ハイパバイザ２０が図１５のステップＳ１０３０で行う仮想計算機の起動処理の一例を示すフローチャートは、前記第１実施形態の図１７と同一である。
【０１９０】
ハイパバイザ２０が図１５のステップＳ１０４０で行う仮想計算機の終了処理の一例を示すフローチャートは、前記第１実施形態の図１８と同一である。
【０１９１】
図３１は、キュー割り当て管理部３００が図１８のステップＳ１３２０などで物理キュー１８０の割り当てを解除する処理の一例を示すフローチャートである。
【０１９２】
キュー割り当て管理部３００は、ステップＳ１４００で物理キュー使用テーブル２６０の当該物理キュー１８０に関するエントリを更新し、使用中６７０を「なし」とする。続いてステップＳ１４１０で、ＶＭＤｑ対応ドライバ２５５を呼び出して当該物理キュー１８０を停止させる。
【０１９３】
上記処理によって、使用を終了する仮想計算機３０の仮想キュー４２０への物理キュー１８０の割り当てが解除され、当該物理キュー１８０は空きリソースに遷移する。
【０１９４】
図３２は、仮想キュー操作を契機として図１５のステップＳ１０５０で仮想ＮＩＣエミュレータ２７０が行う処理の一例を示すフローチャートである。
【０１９５】
仮想ＮＩＣエミュレータ２７０は、ステップＳ１６００で、操作対象の仮想キュー４２０について、仮想キュー設定データ２８０を参照して操作前の設定パラメータを取得し、そして、仮想ＮＩＣエミュレータ２７０は、コンソール１３０等から受け付けた仮想キュー４２０の新たな設定パラメータで仮想キュー設定データ２８０を更新する。
【０１９６】
続いて仮想ＮＩＣエミュレータ２７０は、ステップＳ１６１０で、操作前後の設定パラメータを比較し、通信状態７８０が「停止」から「開始」に変化したか否かを判断する。通信状態７８０が「停止か」ら「開始」に変化していた場合はステップＳ１６５０に遷移してキュー割り当て管理部３００に処理を依頼し、それ以外はステップＳ１６２０に遷移する。
【０１９７】
ステップＳ１６２０では、仮想ＮＩＣエミュレータ２７０が、操作前後の設定パラメータを比較し、通信状態７８０が「開始」から「停止」に変化したか否かを判断する。通信状態７８０が「開始」から「停止」に変化していた場合はステップＳ１６４０に遷移してキュー割り当て管理部３００に物理キュー１８０の割り当て解除を依頼し、それ以外はステップＳ１６３０に遷移する。
【０１９８】
ステップＳ１６３０では、キュー割り当て管理部３００が、物理キュー割り当てテーブル３２０を参照し、操作対象の仮想キュー４２０に物理キュー１８０が割り当てられているか否かを判断する。操作対象の仮想キュー４２０に物理キュー１８０が割り当てられている場合はステップＳ１６８０に遷移し、物理キュー１８０が割り当てられていなければ図３２の処理を終了する。
【０１９９】
ステップＳ１６５０からステップＳ１６７５までの各手順とステップＳ１６９０は、仮想キュー４２０の通信が開始される際に呼び出されるキュー割り当て管理部３００の処理である。キュー割り当て管理部３００はステップＳ１６５０で、仮想キュー設定データ２８０を参照して通信状態７８０が通信の「開始」になっている仮想キュー４２０の数を算出する。算出した仮想キュー４２０の数が、物理キュー１８０の総数を超える場合のみ物理キュー不足と判断する。
【０２００】
ステップＳ１６６０では、ステップＳ１６５０で物理キュー不足と判断した場合はステップＳ１６９０に遷移して物理キュー１８０の割り当てをやり直す。一方、物理キュー１８０の数が不足していない場合はステップＳ１６７０に遷移する。
【０２０１】
ステップＳ１６７０では、キュー割り当て管理部３００が物理キュー使用テーブル２６０を参照し、使用中６７０が「なし」になっている未割当の物理キュー１８０を選択する。続くステップＳ１６７５では、キュー割り当て管理部３００が選択した物理キュー１８０を、通信を開始した仮想キュー４２０に割り当てる。
【０２０２】
ステップＳ１６８０とステップＳ１６８５は、仮想キュー４２０に物理キュー１８０が割り当てられている場合のみ実行される手順である。ステップＳ１６８０では、仮想ＮＩＣエミュレータ２７０内のＤＭＡアドレス変換部２９０が物理メモリ割り当てテーブル２００を参照し、仮想キュー４２０に設定された仮想メモリ４００のアドレス（送信バッファアドレス７９０と受信バッファアドレス７９５が該当）を物理メモリ９０のアドレスに変換する。
【０２０３】
続くステップＳ１６８５では、仮想ＮＩＣエミュレータ２７０が、ＶＭＤｑ対応ドライバ２５５に仮想キュー設定データ２８０が保持しているＭＡＣアドレス７５０および通信状態７８０と、上位機ステップＳ１６８０で求めた物理メモリのアドレスを渡し、各設定を物理キュー１８０に反映させる。
【０２０４】
上記処理により、物理キュー１８０に、仮想メモリ４００のアドレスに対応する物理メモリのアドレスを設定するため、当該物理キュー１８０から仮想計算機３０に割り当てた物理メモリへの直接アクセスが許可される。また、前記第１実施形態と同様に、物理キュー１８０の数が不足していなければ、通信を開始した仮想キュー４２０に物理キュー１８０が割り当てられる。一方、物理キュー１８０の数が不足していれば、仮想キュー４２０の優先度に応じた物理キュー１８０の再割り当てが実行される。
【０２０５】
図３３は、キュー割り当て管理部３００が図３２のステップＳ１６７５で、仮想キュー４２０に対する物理キュー１８０の割り当てを追加する処理の一例を示すフローチャートである。
【０２０６】
キュー割り当て管理部３００は、ステップＳ１５００で、選択した物理キュー１８０に対応する物理キュー使用テーブル２６０のエントリを更新し、使用中６７０に「仮想計算機」を格納する。続くステップＳ１５１０では、仮想キュー４２０に対応する物理キュー割り当てテーブル３２０のエントリを更新し、物理ＮＩＣ番号６５０と物理キュー番号６６０に、選択した物理キュー１８０の情報を記録する。
【０２０７】
図３４は、キュー割り当て調整部３１０が図３２のステップＳ１６９０で、物理キュー１８０を仮想キュー４２０に再割り当てする処理の一例を示すフローチャートである。
【０２０８】
キュー割り当て調整部３１０は、ステップＳ１７００で、仮想キュー４２０に対する物理キュー１８０の割り当て優先度を算出する。優先度の算出処理は、前記第１実施形態の図２３と同様である。
【０２０９】
続くステップＳ１７１０では、優先度が１番からＮ番まで（Ｎは物理キュー１８０の総数）の仮想キュー４２０に対して物理キュー１８０の割り当て漏れがないかを、物理キュー割り当てテーブル３２０を参照して判定する。優先度が高い仮想キュー４２０に割り当て漏れがある場合のみステップＳ１７２０に進む。割り当て漏れが無ければ本処理を終了する。
【０２１０】
ステップＳ１７２０では、キュー割り当て調整部３１０が、ＶＭＤｑ対応ドライバ２５５に全物理キュー１８０の通信状態を「停止」に変更する様に指令する。続くステップＳ１７３０では、全物理キュー１８０に対して図３１の処理を呼び出して、物理キュー１８０の割り当てを全て解除する。
【０２１１】
ステップＳ１７４０では、キュー割り当て調整部３１０が優先度の数値が大きい仮想キュー４２０から順に、物理キュー使用テーブル２６０から未割り当ての物理キュー１８０を選択し、図３３の処理を呼び出して仮想キュー４２０に割り当てる。
【０２１２】
ステップＳ１７５０では、キュー割り当て調整部３１０が物理メモリ割り当てテーブル２００を参照し、仮想キュー４２０に設定された仮想メモリ４００のアドレス（送信バッファアドレス７９０と受信バッファアドレス７９５が該当）をメモリ９０のアドレスに変換する。
【０２１３】
続くステップＳ１７６０では、ＶＭＤｑ対応ドライバ２５５に仮想キュー設定データ２８０が保持しているＭＡＣアドレス７５０および通信状態７８０と、ステップＳ１７５０で求めた物理メモリのアドレスを渡し、各設定を物理キュー１８０に反映させる。
【０２１４】
上記処理によって物理キュー１８０に、仮想メモリ４００のアドレス（送信バッファアドレス７９０と受信バッファアドレス７９５）に対応する物理メモリ９０のアドレスを設定するため、当該物理キュー１８０から仮想計算機３０に割り当てた物理メモリ９０の領域に直接アクセスが許可される。
【０２１５】
キュー割り当て調整部３１０が図３４のステップＳ１７００で、仮想キュー４２０に対する物理キュー１８０の割り当て優先度を算出する処理の一例を示すフローチャートは、前記第１実施形態の図２３と同一である
通信帯域測定部３５０が図１５のステップＳ１０６０にて定期的に行うタイマ割り込み処理は、前記第１実施形態の図２４と同様である。ただし、ステップＳ１９３０では、前記第１実施形態のＶＦドライバに代わって、通信帯域測定部３５０がＶＭＤｑ対応ドライバ２５５に依頼して物理キュー１８０のハード転送量カウンタ１９０の値を取得する点が相違する。
【０２１６】
ＵＩ制御部２２０がコンソール１３０への入力を契機として図１５のステップＳ１０８０で行う処理の一例を示すフローチャートは、前記第１実施形態の図２５と同一である。
【０２１７】
ハイパバイザ２０が物理キュー１８０からの割り込みを契機として図１５のステップＳ１０７０で行う処理は、前記第１実施形態の図２６と同様である。ただし、ステップＳ２１２０において、前記第１実施形態ではハイパバイザ２０がＶＦドライバ２５０に問い合わせるのに代わって、本第２実施形態では、ハイパバイザ２０がＶＭＤｑ対応ドライバ２５５に問い合わせて、受信した割り込みが送信完了を意味する割り込みであるか否かを判断する点が相違する。その他は、前記第１実施形態の図２６と同一である。
【０２１８】
＜４．Ｌｖ１  ＶＭＭによる処理＞
ＬＶ１ＶＭＭ４０の処理を示すフローチャートは、前記第１前記第１実施形態の図２７と同一である。
【０２１９】
＜５．まとめ＞
以上の構成及び処理により、ハイパバイザ２０が、ＶＭＤｑの機能を持ったマルチキューの物理ＮＩＣ１５０に搭載された物理キュー１８０を仮想計算機３０内の仮想キュー４２０に割り当て、かつ物理キュー１８０はＤＭＡアドレス変換部２９０による送受信バッファのアドレス変換によって仮想計算機３０内の仮想メモリ４００への直接アクセスが許可される。更に、ハイパバイザ２０は仮想計算機３０に仮想的なマルチキューＮＩＣを搭載するので、仮想計算機３０上のＬｖ１ＶＭＭ４０が各仮想キュー４２０をサブ仮想計算機５０に割り当て、かつ各仮想キュー４２０はアドレス変換処理ステップＳ２２５０によってサブ仮想計算機５０のサブ仮想メモリ５００への直接アクセスが許可される。これらの割り当て及びアクセス許可の結果、物理キュー１８０がサブ仮想メモリ５００に直接アクセスできるため、ハイパバイザ２０及びＬｖ１ＶＭＭ４０のソフトウェアコピーが回避され、ピーク帯域を確保できる。
【０２２０】
また、第２実施形態においても、各仮想計算機３０が物理計算機１０の保有する物理キュー１８０と同数の仮想キュー４２０を保持し、利用が開始された仮想キュー４２０に随時物理キュー１８０が割り当てられるため、仮想計算機３０の起動後にサブ仮想計算機５０の数がライブマイグレーション等で増減する場合のサブ仮想計算機５０の帯域劣化を回避できる。
【０２２１】
上記第１及び第２の実施形態では、複数のキューを備えるＩ／Ｏデバイス（マルチキューＩ／Ｏデバイス）としてマルチキューＮＩＣで構成された物理ＮＩＣ１５０を用いる例を示したが、ＨＢＡやＣＮＡ（Converged Network Adapter）に本発明を適用しても良い。
【０２２２】
また、ＣＰＵ７０は、ホモジニアスのマルチコア・プロセッサに限定されることはなく、ヘテロジニアスのマルチコア・プロセッサで構成されてもよい。また、チップセット１００は、ＣＰＵ７０に含まれる構成であっても良い。
【０２２３】
また、上記第１及び第２の実施形態では、ハイパバイザ２０上にＬｖ１ＶＭＭ４０を稼働させる仮想計算機の例を示したが、本発明は、ハイパバイザ２０上で仮想計算機３０を稼働させる仮想計算機に適用することができる。
【産業上の利用可能性】
【０２２４】
以上のように、本発明は複数のキューを備えたＩ／Ｏデバイスを利用する仮想計算機または仮想計算機システムに適用することができる。
【符号の説明】
【０２２５】
１０  物理計算機
２０  ハイパバイザ
３０  仮想計算機
４０  Ｌｖ１ＶＭＭ
５０  サブ仮想計算機
６０  Ｌｖ２ゲスト
９０  メモリ
１３０  コンソール
１８０  物理キュー
１９０  ハード転送量カウンタ
２００  物理メモリ割り当てテーブル
２１０  ＩＯＭＭＵ制御テーブル
２５０  ＶＦドライバ
２５５  ＶＭＤｑ対応ドライバ
２６０  物理キュー使用テーブル
２８０  仮想キュー設定データ
２９０  ＤＭＡアドレス変換部
３１０  キュー割り当て調整部
３２０  物理キュー割り当てテーブル
３３０  仮想キュー使用量テーブル
３４０  仮想キュー優先度テーブル
３８０  ソフトウェア転送量テーブル
４００  仮想メモリ
４２０  仮想キュー
５００  サブ仮想メモリ
５２０  サブ仮想キュー
【図１】
0005748349.tif 000002
【図２】
0005748349.tif 000003
【図３】
0005748349.tif 000004
【図４】
0005748349.tif 000005
【図５】
0005748349.tif 000006
【図６】
0005748349.tif 000007
【図７】
0005748349.tif 000008
【図８】
0005748349.tif 000009
【図９】
0005748349.tif 000010
【図１０】
0005748349.tif 000011
【図１１】
0005748349.tif 000012
【図１２】
0005748349.tif 000013
【図１３】
0005748349.tif 000014
【図１４】
0005748349.tif 000015
【図１５】
0005748349.tif 000016
【図１６】
0005748349.tif 000017
【図１７】
0005748349.tif 000018
【図１８】
0005748349.tif 000019
【図１９】
0005748349.tif 000020
【図２０】
0005748349.tif 000021
【図２１】
0005748349.tif 000022
【図２２】
0005748349.tif 000023
【図２３】
0005748349.tif 000024
【図２４】
0005748349.tif 000025
【図２５】
0005748349.tif 000026
【図２６】
0005748349.tif 000027
【図２７】
0005748349.tif 000028
【図２８】
0005748349.tif 000029
【図２９】
0005748349.tif 000030
【図３０】
0005748349.tif 000031
【図３１】
0005748349.tif 000032
【図３２】
0005748349.tif 000033
【図３３】
0005748349.tif 000034
【図３４】
0005748349.tif 000035