(57)【要約】  複数のオペレーティングシステムが稼動する計算機であって、仮想計算機を管理する仮想化機能部を備え、仮想計算機上ではオペレーティングシステムが稼動し、仮想化機能部は割込コントローラを含み、割込コントローラは、ホスト側割込みベクタを管理するためのベクタ情報と、オペレーティングシステムによって設定されたゲスト側割込みベクタに対するホスト側割込みベクタの割当てを管理するための割込みベクタ割当情報とを保持し、割込コントローラは、ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当て状態を解析し、解析の結果に基づいて、ゲスト側割込みベクタに対するホスト側割込みベクタの割当てを変更する。
2015132942.tif 000002
【特許請求の範囲】
【請求項１】
複数のオペレーティングシステムが稼動する計算機であって、
前記計算機は、物理リソースとして、プロセッサ、前記プロセッサに接続される揮発性メモリ、前記プロセッサに接続される不揮発性メモリ、及び前記プロセッサに接続される少なくとも一つのＩ／Ｏデバイスを備え、
前記物理リソースを用いて少なくとも一つの仮想計算機を生成し、前記少なくとも一つの仮想計算機を管理する仮想化機能部を備え、
前記少なくとも一つの仮想計算機上では、オペレーティングシステムが稼動し、
前記オペレーティングシステムは、
当該オペレーティングシステムが稼動する仮想計算機に割り当てられる仮想的なＩ／Ｏデバイスが割り込みを通知するために設定されたゲスト側割込みベクタを管理するための第１のベクタ情報を保持し、
前記仮想化機能部は、前記少なくとも一つのＩ／Ｏデバイスからの割り込み通知に対する処理を実行する割込コントローラを含み、
前記割込コントローラは、
前記物理リソースに含まれる前記少なくとも一つのＩ／Ｏデバイスが割り込みを通知するために設定されたホスト側割込みベクタを管理するための第２のベクタ情報と、
前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを管理するための割込みベクタ割当情報と、を保持し、
前記ゲスト側割込みベクタは、一つの前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられたユニーク割込みベクタ、及び、複数の前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられた共有割込みベクタを含み、
前記割込コントローラは、
前記ホスト側割込みベクタを含む割り込み通知を受けつけた場合、前記割込みベクタ割当情報に基づいて、当該ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタを特定し、
前記特定されたゲスト側割込みベクタが前記ユニーク割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記オペレーティングシステムに当該特定されたゲスト側割込みベクタを含む割り込みを通知し、
前記特定されたゲスト側割込みベクタが前記共有割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記ホスト側割込みベクタが割り当てられる前記Ｉ／Ｏデバイスにアクセスすることによって、前記ゲスト側割込みベクタ及び割り込み先の前記オペレーティングシステムを特定し、前記特定されたオペレーティングシステムに、当該特定されたゲスト側割込みベクタを含む割り込みを通知し、
前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当て状態を解析し、
前記解析の結果に基づいて、前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを変更することを特徴とする計算機。
【請求項２】
請求項１に記載の計算機であって、
前記割込コントローラは、
前記ゲスト側割込みベクタ毎の割り込みの発生回数を管理するための統計情報を保持し、
前記統計情報に基づいて、複数の共有割込みベクタの中から処理対象の共有割込みベクタを選択し、複数のユニーク割込みベクタの中から処理対象のユニーク割込みベクタを選択し、
前記共有割込みベクタを前記ユニーク割込みベクタに変更し、前記ユニーク割込みベクタを前記共有割込みベクタに変更することを特徴とする計算機。
【請求項３】
請求項２に記載の計算機であって、
前記割込コントローラは、
前記複数の共有割込みベクタの中から、前記割り込みの発生回数が最も大きい共有割込みベクタを検索し、
前記複数のユニーク割込みベクタの中から、前記割り込みの発生回数が最も小さいユニーク割込みベクタを検索し、
前記検索された共有割込みベクタに割り当てられるホスト側割込みベクタを、前記検索されたユニーク割込みベクタに割り当てられるホスト側割込みベクタに変更し、
前記検索されたユニーク割込みベクタに割り当てられるホスト側割込みベクタを、前記検索された共有割込みベクタに割り当てられるホスト側割込みベクタに変更することを特徴とする計算機。
【請求項４】
請求項２に記載の計算機であって、
前記物理リソースは、複数のＩ／Ｏデバイスを含み、
前記複数のＩ／Ｏデバイスの各々は、割り込みの要因を示す値を格納する割込要因レジスタを含み、
前記複数のＩ／Ｏデバイスは、
前記仮想化機能部が前記割込要因レジスタにアクセスした場合に、前記割込要因レジスタの値が保持されたままの状態となる複数の第１のＩ／Ｏデバイスと、
前記仮想化機能部が前記割込要因レジスタにアクセスした場合に、前記割込要因レジスタの値が消去された状態となる複数の第２のＩ／Ｏデバイスと、を含み、
前記割込コントローラは、
前記複数の第１のＩ／Ｏデバイスから構成される第１のベクタグループを生成し、
前記第１のベクタグループに含まれる前記複数の第１のＩ／Ｏデバイスの各々に設定される前記ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタの前記割り込みの発生回数を管理するための前記統計情報を生成し、
一つの第２のＩ／Ｏデバイスから構成される第２のベクタグループを生成し、
前記第２のＩ／Ｏデバイスに設定される前記ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタの前記割り込みの発生回数を管理するための前記統計情報を生成し、
前記ゲスト側割込みベクタの割当てを変更する場合に、処理対象のベクタグループを選択し、前記選択されたベクタグループに対応する前記統計情報を参照して、前記処理対象の共有割込みベクタ及び前記処理対象のユニーク割込みベクタを選択することを特徴とする計算機。
【請求項５】
請求項１に記載の計算機であって、
前記割込コントローラは、
前記ゲスト側割込みベクタの優先順位を示すランク情報を受信し、
前記ランク情報に基づいて、複数の共有割込みベクタの中から処理対象の共有割込みベクタを選択し、
前記ランク情報に基づいて、複数のユニーク割込みベクタの中から処理対象のユニーク割込みベクタを選択し、
前記共有割込みベクタを前記ユニーク割込みベクタに変更し、前記ユニーク割込みベクタを前記共有割込みベクタに変更することを特徴とする計算機。
【請求項６】
複数のオペレーティングシステムが稼動する計算機における割込みベクタ管理方法であって、
前記計算機は、
物理リソースとして、プロセッサ、前記プロセッサに接続される揮発性メモリ、前記プロセッサに接続される不揮発性メモリ、及び前記プロセッサに接続される少なくとも一つのＩ／Ｏデバイスを備え、
前記物理リソースを用いて少なくとも一つの仮想計算機を生成し、前記少なくとも一つの仮想計算機を管理する仮想化機能部を備え、
前記少なくとも一つの仮想計算機上では、オペレーティングシステムが稼動し、
前記オペレーティングシステムは、
当該オペレーティングシステムが稼動する仮想計算機に割り当てられる仮想的なＩ／Ｏデバイスが割り込みを通知するために設定されたゲスト側割込みベクタを管理するための第１のベクタ情報を保持し、
前記仮想化機能部は、前記少なくとも一つのＩ／Ｏデバイスからの割り込み通知に対する処理を実行する割込コントローラを含み、
前記割込コントローラは、
前記物理リソースに含まれる前記少なくとも一つのＩ／Ｏデバイスが割り込みを通知するために設定されたホスト側割込みベクタを管理するための第２のベクタ情報と、
前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを管理するための割込みベクタ割当情報と、を保持し、
前記ゲスト側割込みベクタは、一つの前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられたユニーク割込みベクタ、及び、複数の前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられた共有割込みベクタを含み、
前記割込みベクタ管理方法は、
前記割込コントローラが、前記ホスト側割込みベクタを含む割り込み通知を受けつけた場合、前記割込みベクタ割当情報に基づいて、当該ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタを特定する第１のステップと、
前記割込コントローラが、前記特定されたゲスト側割込みベクタが前記ユニーク割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記オペレーティングシステムに当該特定されたゲスト側割込みベクタを含む割り込みを通知する第２のステップと、
前記割込コントローラが、前記特定されたゲスト側割込みベクタが前記共有割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記ホスト側割込みベクタが割り当てられる前記Ｉ／Ｏデバイスにアクセスすることによって、前記ゲスト側割込みベクタ及び割り込み先の前記オペレーティングシステムを特定し、前記特定されたオペレーティングシステムに、当該特定されたゲスト側割込みベクタを含む割り込みを通知する第３のステップと、
前記割込コントローラが、前記ゲスト側割込みベクタの割当て状態を解析する第４のステップと、
前記割込コントローラが、前記解析の結果に基づいて、前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを変更する第５のステップと、を含むことを特徴とする割込みベクタ管理方法。
【請求項７】
請求項６に記載の割込みベクタ管理方法であって、
前記割込コントローラは、前記ゲスト側割込みベクタ毎の割り込みの発生回数を管理するための統計情報を保持し、
前記第４のステップは、前記統計情報に基づいて、複数の共有割込みベクタの中から処理対象の共有割込みベクタを選択し、複数のユニーク割込みベクタの中から処理対象のユニーク割込みベクタを選択する第６のステップを含み、
前記第５のステップは、前記共有割込みベクタを前記ユニーク割込みベクタに変更し、前記ユニーク割込みベクタを前記共有割込みベクタに変更する第７のステップを含むことを特徴とする割込みベクタ管理方法。
【請求項８】
請求項７に記載の割込みベクタ管理方法であって、
前記第６のステップは、
前記複数の共有割込みベクタの中から、前記割り込みの発生回数が最も大きい共有割込みベクタを検索するステップと、
前記複数のユニーク割込みベクタの中から、前記割り込みの発生回数が最も小さいユニーク割込みベクタを検索するステップと、を含み、
前記第７のステップは、
前記検索された共有割込みベクタに割り当てられるホスト側割込みベクタを、前記検索されたユニーク割込みベクタに割り当てられるホスト側割込みベクタに変更するステップと、
前記検索されたユニーク割込みベクタに割り当てられるホスト側割込みベクタを、前記検索された共有割込みベクタに割り当てられるホスト側割込みベクタに変更するステップと、を含むことを特徴とする割込みベクタ管理方法。
【請求項９】
請求項７に記載の割込みベクタ管理方法であって、
前記物理リソースは、複数のＩ／Ｏデバイスを含み、
前記複数のＩ／Ｏデバイスの各々は、割り込みの要因を示す値を格納する割込要因レジスタを含み、
前記複数のＩ／Ｏデバイスは、
前記仮想化機能部が前記割込要因レジスタにアクセスした場合に、前記割込要因レジスタの値が保持されたままの状態となる複数の第１のＩ／Ｏデバイスと、
前記仮想化機能部が前記割込要因レジスタにアクセスした場合に、前記割込要因レジスタの値が消去された状態となる複数の第２のＩ／Ｏデバイスと、を含み、
前記割込みベクタ管理方法は、
前記割込コントローラが、前記複数の第１のＩ／Ｏデバイスから構成される第１のベクタグループを生成するステップと、
前記割込コントローラが、前記第１のベクタグループに含まれる前記複数の第１のＩ／Ｏデバイスの各々に設定される前記ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタの前記割り込みの発生回数を管理するための前記統計情報を生成するステップと、
前記割込コントローラが、一つの第２のＩ／Ｏデバイスから構成される第２のベクタグループを生成するステップと、
前記割込コントローラが、前記第２のＩ／Ｏデバイスに設定される前記ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタの前記割り込みの発生回数を管理するための前記統計情報を生成するステップと、を含み、
前記第４のステップは、
処理対象のベクタグループを選択するステップと、
前記選択されたベクタグループに対応する前記統計情報を参照して、前記処理対象の共有割込みベクタ及び前記処理対象のユニーク割込みベクタを選択するステップと、を含むことを特徴とする割込みベクタ管理方法。
【請求項１０】
請求項６に記載の割込みベクタ管理方法であって、
前記第４のステップは、
前記ゲスト側割込みベクタの優先順位を示すランク情報を受信するステップと、
前記ランク情報に基づいて、複数の共有割込みベクタの中から処理対象の共有割込みベクタを選択するステップと、
前記ランク情報に基づいて、複数のユニーク割込みベクタの中から処理対象のユニーク割込みベクタを選択するステップと、を含み
前記第５のステップは、前記共有割込みベクタを前記ユニーク割込みベクタに変更し、前記ユニーク割込みベクタを前記共有割込みベクタに変更するステップを含むことを特徴とする割込みベクタ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想化機能を備える計算機システムにおけるＩ／Ｏデバイスの割込み処理に関する。
【背景技術】
【０００２】
ハイパバイザ等の仮想化機能部を備える物理計算機から構成される計算機システムでは、単一の物理計算機のリソースを分割し、複数の仮想的な計算機（仮想計算機）に提供する。仮想計算機のそれぞれでは、ゲストＯＳが動作する。また、仮想計算機には、物理計算機に搭載される複数のＩ／Ｏデバイスの少なくともいずれかが割り当てられる。【０００３】
Ｉ／Ｏデバイスには、Ｈｏｓｔ  Ｂａｓｓ  Ａｄａｐｔｅｒ  （ＨＢＡ）、Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ  （ＮＩＣ）等のネットワークアダプタが含まれる。各仮想計算機上で稼動するゲストＯＳは、当該仮想計算機に割り当てられたＩ／Ｏデバイスを介して、ネットワークに接続される、記憶装置などの外部装置へアクセスすることができる。【０００４】
一般的な計算機システムでは、Ｉ／Ｏデバイスの障害の発生等によってＩ／Ｏデバイスから割込みが通知された場合、Ｉ／Ｏデバイスを制御するＯＳが、割り込み通知に対応する割り込み処理を実行する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２５０４５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
仮想化機能部を備える計算機システムでは、仮想化機能部が、障害が発生したＩ／Ｏデバイスが割り当てられる仮想計算機上で稼動するゲストＯＳに割込みを通知する。ゲストＯＳは、Ｉ／Ｏデバイスの割込処理を実行する。例えば、仮想化機能部は、Ｉ／Ｏデバイスの動作が停止等によってＩ／Ｏデバイスから障害の発生を示す割込みをゲストＯＳに通知する（例えば、特許文献１参照）。【０００７】
仮想化機能部は、Ｉ／Ｏデバイスに割込要因毎に割込みベクタ（ホスト側割込みベクタ）を割り当てる。これによって、Ｉ／Ｏデバイスは、ホスト側割込みベクタを含む割り込み通知を仮想化機能部に通知できる。仮想計算機上で動作するゲストＯＳも同様に、当該仮想計算機に割り当てられるＩ／Ｏデバイスに割込みベクタ（ゲスト側割込みベクタ）を割り当てる。【０００８】
仮想化機能部は、Ｉ／Ｏデバイスからホスト側割込みベクタを含む割り込みの通知を受け付けた場合、ホスト側割込みベクタをゲストＯＳが管理するゲスト側割込みベクタに変換し、ゲスト側割込みベクタを含む割り込みを当該ゲストＯＳに通知する。【０００９】
ゲストＯＳは、仮想化機能部から割り込みの通知を受け付けた場合、当該通知に含まれるゲスト側割込みベクタに基づいて、割り込みを通知したＩ／Ｏデバイス、及び通知された割り込みに対応する割り込み処理の種類を特定できる。【００１０】
一般的に、仮想化機能部は、ゲストＯＳと同じ数だけのホスト側割込みベクタを確保し、確保された割込みベクタをＩ／Ｏデバイスに割り当てる。【００１１】
しかし、物理計算機が備えるＣＰＵにおいて利用可能な割込みベクタにはハードウェア上の制限がある。そのため、各ゲストＯＳが仮想計算機に割り当てられたＩ／Ｏデバイスにゲスト側割込みベクタを設定できても、物理計算機に搭載される全てのＩ／ＯデバイスにおいてＣＰＵのベクタから確保する必要があり、Ｉ／Ｏデバイス数が非常に多い物理計算機の場合、Ｉ／Ｏデバイスに割り当てるホスト側割込みベクタが不足する。【００１２】
これに対し、仮想化機能部は、複数のゲスト側割込みベクタに、同一のホスト側割込みベクタを設定する。すなわち、ホスト側割込みベクタは、複数のゲスト側割込みベクタの共有となる。この場合、仮想化機能部は、前述のホスト側割込みベクタを含む割り込みを受け付けた場合、各Ｉ／Ｏデバイスの割り込み要因レジスタを参照することによって、割り込み通知を発行したＩ／Ｏデバイス及び割込要因を特定する。仮想化機能部は、特定されたＩ／Ｏデバイスが割り当てられた仮想計算機上のゲストＯＳに割り込みを通知する。【００１３】
しかし、Ｉ／Ｏデバイスの割込要因レジスタへのアクセス処理は、計算機システム上の処理の中でも特にオーバーヘッドが大きいため、当該アクセス処理の増加によってシステム性能が低下する。【００１４】
したがって、Ｉ／Ｏデバイスの割込要因レジスタへのアクセス処理によるオーバーヘッドを最小とするためにＣＰＵに割り当て可能な割り込みベクタの数を把握し、計算機システムの稼動中に割込みベクタの割当てを最適にする技術が必要となる。
【課題を解決するための手段】
【００１５】
本願において開示される発明の代表的な一例を示せば以下の通りである。すなわち、複数のオペレーティングシステムが稼動する計算機であって、前記計算機は、物理リソースとして、プロセッサ、前記プロセッサに接続される揮発性メモリ、前記プロセッサに接続される不揮発性メモリ、及び前記プロセッサに接続される少なくとも一つのＩ／Ｏデバイスを備え、前記物理リソースを用いて少なくとも一つの仮想計算機を生成し、前記少なくとも一つの仮想計算機を管理する仮想化機能部を備え、前記少なくとも一つの仮想計算機上では、オペレーティングシステムが稼動し、前記オペレーティングシステムは、当該オペレーティングシステムが稼動する仮想計算機に割り当てられる仮想的なＩ／Ｏデバイスが割り込みを通知するために設定されたゲスト側割込みベクタを管理するための第１のベクタ情報を保持し、前記仮想化機能部は、前記少なくとも一つのＩ／Ｏデバイスからの割り込み通知に対する処理を実行する割込コントローラを含み、前記割込コントローラは、前記物理リソースに含まれる前記少なくとも一つのＩ／Ｏデバイスが割り込みを通知するために設定されたホスト側割込みベクタを管理するための第２のベクタ情報と、前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを管理するための割込みベクタ割当情報と、を保持し、前記ゲスト側割込みベクタは、一つの前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられたユニーク割込みベクタ、及び、複数の前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられた共有割込みベクタを含み、前記割込コントローラは、前記ホスト側割込みベクタを含む割り込み通知を受けつけた場合、前記割込みベクタ割当情報に基づいて、当該ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタを特定し、前記特定されたゲスト側割込みベクタが前記ユニーク割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記オペレーティングシステムに当該特定されたゲスト側割込みベクタを含む割り込みを通知し、前記特定されたゲスト側割込みベクタが前記共有割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記ホスト側割込みベクタが割り当てられる前記Ｉ／Ｏデバイスにアクセスすることによって、前記ゲスト側割込みベクタ及び割り込み先の前記オペレーティングシステムを特定し、前記特定されたオペレーティングシステムに、当該特定されたゲスト側割込みベクタを含む割り込みを通知し、前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当て状態を解析し、前記解析の結果に基づいて、前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを変更することを特徴とする。
【発明の効果】
【００１６】
本発明の一形態によれば、仮想化機能部は、ゲスト側割込みベクタに対するホスト側割込みベクタの割当て状態の解析結果に基づいて、動的に、共有割込みベクタとユニーク割込みベクタとの割当てを変更できる。したがって、Ｉ／Ｏデバイスへのアクセスによる性能低下を最小限に抑えることができる。さらに、ゲスト側割込みベクタに対するホスト側割込みベクタの割当て状態に応じて、最適な割当て状態を実現できる。【００１７】
前述した以外の課題、構成及び効果は、以下の実施例の説明によって明らかにされる。
【図面の簡単な説明】
【００１８】
【図１】本発明の実施例１の物理計算機のハードウェア構成の一例を示す説明図である。
【図２】本発明の実施例１のＩ／Ｏデバイスの構成を示すブロック図である。
【図３】本発明の実施例１のゲスト側割込みベクタに対するホスト側割込みベクタの割当て状態を示す説明図である。
【図４】本発明の実施例１の割込みベクタ割当情報の一例を示す説明図である。
【図５Ａ】本発明の実施例１の統計情報の一例を示す説明図である。
【図５Ｂ】本発明の実施例１の統計情報の一例を示す説明図である。
【図６】本発明の実施例１のハイパバイザ及びゲストＯＳが、割り込みが発生した場合に実行する処理の流れを説明するシーケンス図である。
【図７Ａ】本発明の実施例１のハイパバイザが実行する割込みベクタの割当変更処理を説明するフローチャートである。
【図７Ｂ】本発明の実施例１のハイパバイザが実行する割込みベクタの割当変更処理を説明するフローチャートである。
【図８】本発明の実施例１のゲスト側割込みベクタに対するホスト側割込みベクタの割当て状態を示す説明図である。
【図９】本発明の実施例１の割込みベクタ割当情報を示す説明図である。
【図１０】本発明の実施例２のハイパバイザが実行する割込みベクタの割当変更処理を説明するフローチャートである。
【発明を実施するための形態】
【００１９】
以下、発明の一実施例を添付図面に基づいて説明する。
【実施例１】
【００２０】
図１は、本発明の実施例１の物理計算機のハードウェア構成及びソフトウェア構成の一例を示す説明図である。【００２１】
物理計算機１０は、物理ハードウェア１００として、プロセッサ１０１、メモリ１０２、及び、複数のＩ／Ｏデバイス１０３を備える。なお、物理ハードウェア１００には、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）及びＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等、その他のハードウェア構成が含まれてもよい。【００２２】
プロセッサ１０１は、メモリ１０２に格納されるプログラムを実行する。プロセッサ１０１は、複数のＣＰＵコアを有する。プロセッサ１０１がプログラムを実行することによって、ハイパバイザ２００等の機能が実現される。以下、プログラムを主体に処理を説明する場合、当該プログラムがプロセッサ１０１によって実行されていることを示す。【００２３】
メモリ１０２は、プロセッサ１０１によって実行されるプログラム及び当該プログラムの実行に必要な情報を格納する。また、メモリ１０２は、各プログラムのワークエリアを含む。本実施例のメモリ１０２には、ハイパバイザ２００を実現するプログラム、及びゲストＯＳ４００を実現するプログラム等が格納される。【００２４】
Ｉ／Ｏデバイス１０３は、外部装置と接続することによって、外部から情報を入力し、外部に情報を出力するためのデバイスである。Ｉ／Ｏデバイス１０３は、例えば、ＮＩＣ、ＨＢＡ等が考えられる。本実施例では一つのカードが一つのＩ／Ｏデバイス１０３に対応するものとする。なお、一つのカードに複数のコントローラが含まれる場合、ハイパバイザ２００は、一つのコントローラによって管理されるデバイスを一つのＩ／Ｏデバイス１０３として認識できる。【００２５】
物理計算機１０が起動すると、メモリ１０２の一部の記憶領域にハイパバイザ２００を実現するプログラムが格納され、プロセッサ１０１によって実行される。【００２６】
ハイパバイザ２００は、物理ハードウェア１００を用いて仮想計算機を生成し、生成された仮想計算機を管理する。本実施例では、ハイパバイザ２００は、物理ハードウェア１００を論理的に分割することによって、ＬＰＡＲ３００を生成し、生成されたＬＰＡＲ３００上にゲストＯＳ４００を稼動させる。【００２７】
ここで、ハイパバイザ２００が管理する割込みベクタ及びゲストＯＳ４００が管理する割込みベクタについて説明する。【００２８】
ハイパバイザ２００は、物理ハードウェア１００の各Ｉ／Ｏデバイス１０３に割込みベクタを割り当てる。なお、ハイパバイザ２００は、一つの割込みベクタを用いて一つの割込要因を管理することもできるし、一つの割込みベクタを用いて複数の割込要因を管理することもできる。ハイパバイザ２００が管理する割込みベクタをホスト側割込みベクタとも記載する。【００２９】
ゲストＯＳ４００は、ＬＰＡＲ３００に割り当てられたＩ／Ｏデバイス１０３に割込みベクタを割り当てる。なお、ゲストＯＳ４００は、一つの割込みベクタを用いて一つの割込要因を管理することもできるし、一つの割込みベクタを用いて複数の割込要因を管理することもできる。ゲストＯＳ４００が管理する割込みベクタをゲスト側割込みベクタとも記載する。【００３０】
ハイパバイザ２００は、プロセッサ割当て管理部２０１、メモリコントローラ２０２、及び割込コントローラ２０３を備える。なお、ハイパバイザ２００は、前述した機能部以外の機能部を備えてもよい。【００３１】
プロセッサ割当て管理部２０１は、ＬＰＡＲ３００に対する論理プロセッサの割当てを管理する。プロセッサ割当て管理部２０１は、論理プロセッサ管理部２１０及びスケジューラ２２０を含む。【００３２】
論理プロセッサ管理部２１０は、ＬＰＡＲ３００に対する論理プロセッサの割当てを管理する。スケジューラ２２０は、ＬＰＡＲ３００上で稼動するゲストＯＳ４００が実行する処理に対する論理プロセッサの割当てを制御する。【００３３】
メモリコントローラ２０２は、ＬＰＡＲ３００に対する論理メモリの割当てを管理する。本実施例では、メモリコントローラ２０２は、メモリ１０２の記憶領域の一部を論理メモリとしてＬＰＡＲに割り当てる。また、メモリコントローラ２０２は、ＬＰＡＲ３００上で稼動するゲストＯＳ４００のメモリアクセスを制御する。【００３４】
割込コントローラ２０３は、Ｉ／Ｏデバイス１０３等からの割り込みに対する処理を制御する。また、割込コントローラ２０３は、ゲスト側割込みベクタに対するホスト側割込みベクタの割当てを管理する。割込コントローラ２０３は、ベクタ割当変更部２３０、割込みハンドラ２４０、統計情報２５０、ベクタテーブル２６０、及び割込みベクタ割当情報２７０を含む。【００３５】
ベクタ割当変更部２３０は、統計情報２５０に基づいて、ゲスト側割込みベクタに割り当てるホスト側割込みベクタの割当てを変更する。割込みハンドラ２４０は、発生した割り込みに対する処理を実行する。【００３６】
統計情報２５０は、発生した割り込みの統計情報を格納する。本実施例では、後述する一つのベクタグループに対して一つの統計情報２５０が生成される。統計情報２５０については、図５Ａ及び図５Ｂを用いて後述する。【００３７】
ベクタテーブル２６０は、ハイパバイザが管理するＩ／Ｏデバイス１０３に割り当てたホスト側割込みベクタと、ホスト側割込みベクタに対応する割込みハンドラ２４０を読み出すためのアドレスとが対応付けられたエントリを複数格納する。ベクタテーブル２６０は、公知のものであるため詳細な説明は省略する。【００３８】
割込みベクタ割当情報２７０は、ゲスト側割込みベクタに対するホスト側割込みベクタの割当状態を管理するための情報である。割込みベクタ割当情報２７０については、図４を用いて後述する。【００３９】
ハイパバイザ２００は、Ｉ／Ｏデバイス１０３からホスト側割込みベクタを含む割り込みの通知を受けつけた場合、割込みベクタ割当情報２７０に基づいてホスト側割込みベクタをゲスト側割込みベクタに変換し、変換されたゲスト側割込みベクタを含む割り込みの通知をゲストＯＳ４００に出力する。ゲストＯＳ４００は、ハイパバイザ２００から割り込みの通知を受け付けた場合、当該通知からゲスト側割込みベクタを取得する。ゲストＯＳ４００は、自身が保持するベクタテーブルを参照して、取得されたゲスト側割込みベクタに対応する割込みハンドラを呼び出して、割込処理を実行する。【００４０】
図２は、本発明の実施例１のＩ／Ｏデバイス１０３の構成を示すブロック図である。【００４１】
Ｉ／Ｏデバイス１０３は、割込要因レジスタ５００を備える。また、Ｉ／Ｏデバイス１０３には、ホスト側割込みベクタ５１０が割り当てられる。【００４２】
割込要因レジスタ５００は、割り込みが発生した要因を示す値を保持するレジスタである。ホスト側割込みベクタ５１０は、Ｉ／Ｏデバイス１０３がプロセッサ１０１（ハイパバイザ２００）に割り込みを通知する場合に用いられる割込みベクタである。図２に示す例では、二つのベクタが設定される。「ベクタ０１」は、二つの割込要因を有する割り込みを通知するために用いられる割込みベクタであり、「ベクタ０２」は、一つの割込要因を有する割込を通知するために用いられるベクタである。【００４３】
Ｉ／Ｏデバイス１０３には、以下のような三つのタイプが存在する。【００４４】
一つのタイプのＩ／Ｏデバイス１０３は、ハイパバイザ２００が割込要因レジスタ５００にアクセスした場合、割込要因レジスタ５００に格納される値が消去されないＩ／Ｏデバイスである。以下の説明では、前述したＩ／Ｏデバイス１０３をＴｙｐｅ１のＩ／Ｏデバイスとも記載する。【００４５】
一つのタイプのＩ／Ｏデバイス１０３は、ハイパバイザ２００が割込要因レジスタ５００にアクセスした場合、割込要因レジスタ５００に格納される値が消去されるＩ／Ｏデバイスである。以下の説明では、前述したＩ／Ｏデバイス１０３をＴｙｐｅ２のＩ／Ｏデバイスとも記載する。【００４６】
複数のＴｙｐｅ２のＩ／Ｏデバイスを用いて、複数のゲスト側割込みベクタがホスト側割込みベクタを共有する場合、ハイパバイザ２００は、割込要因を特定するために割込要因レジスタ５００にアクセスする必要がある。しかし、Ｔｙｐｅ２のＩ／Ｏデバイスはハイパバイザ２００からアクセスされると割込要因レジスタ５００に格納される値が消去される。そのため、複数の割込が同時に発生した場合、割込要因を発生することが困難になる。前述したような理由によって、本実施例のハイパバイザ２００は、複数のＴｙｐｅ２のＩ／Ｏデバイスを用いてホスト側割込みベクタが共有されないように制御する。なお、ホスト側割込みベクタの共有については図３を用いて後述する。【００４７】
一つのタイプのＩ／Ｏデバイス１０３は、Ｉ／Ｏデバイス１０３の仕様が公開されていない等の理由によって、割込要因レジスタ５００にアクセスできないＩ／Ｏデバイスである。以下の説明では、前述したＩ／Ｏデバイス１０３をＴｙｐｅ３のＩ／Ｏデバイスとも記載する。【００４８】
Ｔｙｐｅ３のＩ／Ｏデバイスでは、ハイパバイザ２００が割込要因レジスタ５００にアクセスできないため割込要因を特定できない。したがって、Ｔｙｐｅ３のＩ／Ｏデバイスを用いたホスト側割込みベクタの共有は行われない。【００４９】
図３は、本発明の実施例１のゲスト側割込みベクタに対するホスト側割込みベクタの割当て状態を示す説明図である。【００５０】
図３では、物理ハードウェア１００は、第１のＩ／Ｏデバイス１０３、第２のＩ／Ｏデバイス１０３及び第３のＩ／Ｏデバイス１０３を含むものとする。ここで、第１のＩ／Ｏデバイス１０３及び第２のＩ／Ｏデバイス１０３は、Ｔｙｐｅ１のＩ／Ｏデバイスであり、第３のＩ／Ｏデバイス１０３は、Ｔｙｐｅ２のＩ／Ｏデバイスであるものとする。【００５１】
また、図３では、物理計算機１０には二つのＬＰＡＲ３００が生成され、それぞれのＬＰＡＲ３００に第１のゲストＯＳ４００及び第２のゲストＯＳ４００が稼動しているものとする。第１のゲストＯＳ４００が稼動するＬＰＡＲ３００には第１のＩ／Ｏデバイス１０３及び第３のＩ／Ｏデバイス１０３が割り当てられ、第２のゲストＯＳ４００が稼動するＬＰＡＲ３００には第２のＩ／Ｏデバイス１０３が割り当てられているものとする。【００５２】
ハイパバイザ２００は、物理ハードウェア１００に含まれる各Ｉ／Ｏデバイス１０３に割込みベクタ（ホスト側割込みベクタ）を割り当てる。Ｉ／Ｏデバイス１０３は、所定の割込要因が発生した場合、当該割込要因に対応する割込みベクタ（ホスト側割込みベクタ）を用いて、割り込みの発生をハイパバイザ２００に通知する。【００５３】
図３では、ハイパバイザ２００は、第１のＩ／Ｏデバイス１０３にホスト側割込みベクタとして「ベクタ０１」を割り当てる。ハイパバイザ２００は、「ベクタ０１」を用いて三つの割込要因を管理する。また、ハイパバイザ２００は、第２のＩ／Ｏデバイス１０３にホスト側割込みベクタとして、「ベクタ０２」及び「ベクタ０３」を割り当てる。ハイパバイザ２００は、「ベクタ０２」を用いて二つの割込要因を管理し、また、「ベクタ０３」を用いて二つの割込要因を管理する。ハイパバイザ２００は、第３のＩ／Ｏデバイス１０３にホスト側割込みベクタとして、「ベクタ０４」及び「ベクタ０５」を割り当てる。ハイパバイザ２００は、「ベクタ０４」を用いて一つの割込要因を管理し、また、「ベクタ０５」を用いて三つの割込要因を管理する。【００５４】
ゲストＯＳ４００は、ＬＰＡＲ３００に割り当てられたＩ／Ｏデバイス１０３に割込みベクタ（ゲスト側割込みベクタ）を割り当てる。【００５５】
ハイパバイザ２００は、一つゲスト側割込みベクタに一つのホスト側割込みベクタを割り当てる。一つのホスト側割込みベクタに一つのゲスト側割込みベクタが割り当てられている場合、当該ゲスト側割込みベクタをユニーク割込みベクタとも記載する。一方、一つのホスト側割込みベクタに複数のゲスト側割込みベクタが割り当てられている場合、当該ゲスト側割込みベクタを共有割込みベクタとも記載する。【００５６】
なお、一つのホスト側割込みベクタを用いて複数の割込要因が管理されている場合には以下のように取り扱う。一つのゲスト側割込みベクタを用いて管理される割込要因の数が、当該ゲスト側割込みベクタに割り当てられるホスト側割込みベクタを用いて管理される割込要因の数と同一の場合、当該ゲスト側割込みベクタはユニーク割込みベクタとして扱う。それ以外の場合のゲスト側割込みベクタは共有割込みベクタとして扱う。【００５７】
図３では、ゲスト側割込みベクタのうち、「ベクタ１４」、「ベクタ２１」及び「ベクタ２２」はユニーク割込みベクタであり、「ベクタ１１」、「ベクタ１３」、「ベクタ１５」及び「ベクタ１６」は、共有割込みベクタである。【００５８】
本実施例のハイパバイザ２００は、割り込みが発生した場合に統計情報２５０を更新し、また、発生した割り込みに対応する割込処理を実行する。また、本実施例のハイパバイザ２００は、統計情報２５０に基づいて、ゲスト側割込みベクタに対するホスト側割込みベクタの割当てを最適化する。【００５９】
ハイパバイザ２００は、複数のＴｙｐｅ１のＩ／Ｏデバイスから構成される第１のベクタグループ、及び一つのＴｙｐｅ２のＩ／Ｏデバイスから構成される第２のベクタグループを生成する。後述するように、ハイパバイザ２００は、ベクタグループ内で、ゲスト側割込みベクタに対するホスト側割込みベクタの割当てを変更する。そのため、ハイパバイザ２００は、ベクタグループ毎に統計情報を管理する。【００６０】
なお、第１のベクタグループ及び第２のベクタグループが複数存在する場合、ハイパバイザ２００は、それぞれのベクタグループに識別子を付与し、ベクタグループの識別子及びベクタグループの種別を対応付けて管理する。ここで、ベクタグループの種別は、第１のベクタグループ及び第２のベクタグループのいずれであるかを示す情報である。【００６１】
図３では、ハイパバイザ２００は、第１のＩ／Ｏデバイス１０３及び第２のＩ／Ｏデバイス１０３から構成される第１のベクタグループの統計情報２５０と、第３のＩ／Ｏデバイス１０３から構成される第２のベクタグループの統計情報２５０とを生成する。ハイパバイザ２００は、割り込みが発生すると、いずれかの統計情報２５０を更新する。【００６２】
なお、一つのカードに複数のコントローラが含まれる場合には以下のように扱われる。カード内の一つのコントローラによって管理されるデバイスがＴｙｐｅ１のＩ／Ｏデバイスとして認識される場合、複数のコントローラをまたいでゲスト側割込みベクタの割当てを変更できる。そのため、複数のコントローラから構成されるグループを、第１のベクタグループとして扱うことができる。一方、カード内の一つのコントローラによって管理されるデバイスがＴｙｐｅ２のＩ／Ｏデバイスとして認識される場合、コントローラ内でのみゲスト側割込みベクタの割当てを変更できる。そのため、一つのコントローラから構成されるグループを、第２のベクタグループとして扱うことができる。すなわち、ハイパバイザ２００は、ハイパバイザ２００自身がＩ／Ｏデバイス１０３として管理するデバイスをタイプ別にグループ化し、グループ毎にゲスト側割込みベクタの割当てを管理する。【００６３】
次に、統計情報２５０及び割込みベクタ割当情報２７０についてについて説明する。【００６４】
図４は、本発明の実施例１の割込みベクタ割当情報２７０の一例を示す説明図である。【００６５】
割込みベクタ割当情報２７０は、ホスト側割込みベクタ６０１、ゲスト側割込みベクタ６０２、ゲストＯＳ６０３、及びデバイス名６０４を含む。【００６６】
ホスト側割込みベクタ６０１は、ホスト側割込みベクタの値を格納する。ゲスト側割込みベクタ６０２は、ゲスト側割込みベクタの値を格納する。ゲストＯＳ６０３は、ゲストＯＳの識別子を格納する。デバイス名６０４は、ゲストＯＳ６０３に割り当てられるＩ／Ｏデバイス１０３の識別子を格納する。【００６７】
図５Ａ及び図５Ｂは、本発明の実施例１の統計情報２５０の一例を示す説明図である。図５Ａは第１のベクタグループの統計情報２５０を示し、図５Ｂは第２のベクタグループの統計情報２５０を示す。【００６８】
統計情報２５０は、ＩＤ７０１、ゲスト側割込みベクタ７０２、ホスト側割込みベクタ７０３、ベクタ種別７０４、デバイス名７０５、及び統計値７０６を含む。【００６９】
ＩＤ７０１は、統計情報におけるエントリを一意に識別するための識別子を格納する。ゲスト側割込みベクタ７０２は、ゲスト側割込みベクタの値を格納する。ホスト側割込みベクタ７０３は、ゲスト側割込みベクタ７０２に対応するゲスト側割込みベクタに割り当てられるホスト側割込みベクタの値を格納する。【００７０】
ベクタ種別７０４は、ゲスト側割込みベクタ７０２に対応するゲスト側割込みベクタがユニーク割込みベクタ及び共有割込みベクタのいずれであるかを示す情報を格納する。ベクタ種別７０４に「ユニーク」が格納される場合、ゲスト側割込みベクタがユニーク割込みベクタであることを示し、ベクタ種別７０４に「共有」が格納される場合、ゲスト側割込みベクタが共有割込みベクタであることを示す。【００７１】
デバイス名７０５は、ホスト側割込みベクタ７０３に対応するホスト側割込みベクタが割り当てられるＩ／Ｏデバイス１０３の識別子を格納する。統計値７０６は、ゲスト側割込みベクタ７０２に対応する割り込みが発生した数を格納する。図５Ａに示すように、本実施例では、ハイパバイザ２００は、ゲスト側割込みベクタを処理単位として統計値を管理する。【００７２】
ここで、統計情報２５０の生成方法について説明する。【００７３】
ハイパバイザ２００は、物理ハードウェア１００に含まれるＩ／Ｏデバイス１０３の種別を特定し、一つ以上のベクタグループを生成する。ハイパバイザ２００は、生成されたベクタグループに識別子を付与する。【００７４】
例えば、物理ハードウェア１００に複数のＴｙｐｅ１のＩ／Ｏデバイスが含まれている場合、複数のＴｙｐｅ１のＩ／Ｏデバイスから構成される第１のベクタグループを一つ生成する。また、物理ハードウェア１００に複数のＴｙｐｅ２のＩ／Ｏデバイスが含まれる場合、一つのＴｙｐｅ２のＩ／Ｏデバイスから構成される第２のベクタグループを複数生成する。【００７５】
ハイパバイザ２００は、生成されたベクタグループの中から一つベクタグループを選択する。ハイパバイザ２００は、選択されたベクタグループを構成するＩ／Ｏデバイス１０３を全て特定する。さらに、ハイパバイザ２００は、ベクタテーブル２６０を参照して、特定されたＩ／Ｏデバイス１０３に割り当てられるホスト側割込みベクタを特定する。さらに、ハイパバイザ２００は、割込みベクタ割当情報２７０を参照して、ホスト側割込みベクタが割り当てられるゲスト側割込みベクタを特定する。【００７６】
次に、ハイパバイザ２００は、選択されたベクタグループの空の統計情報２５０を一つ生成する。【００７７】
ハイパバイザ２００は、特定されたゲスト側割込みベクタの中から処理対象のゲスト側割込みベクタを選択し、統計情報２５０に選択されたゲスト側割込みベクタに対して一つのエントリを追加する。なお、ハイパバイザ２００は、一つのゲスト側割込みベクタを用いて複数の割込要因が管理されているか否かにかかわらず、一つのゲスト側割込みベクタ（番号）に対して一つのエントリを追加する。ハイパバイザ２００は、追加されたエントリのＩＤ７０１に所定の識別子を設定し、また、統計値７０６に「０」を設定する。【００７８】
ハイパバイザ２００は、追加されたエントリのゲスト側割込みベクタ７０２にゲスト側割込みベクタを設定する。また、ハイパバイザ２００は、割込みベクタ割当情報２７０を参照してゲスト側割込みベクタに対応するホスト側割込みベクタ及びＩ／Ｏデバイス１０３を特定し、追加されたエントリのホスト側割込みベクタ７０３に特定されたホスト側割込みベクタを設定し、また、当該エントリのデバイス名７０５に特定されたＩ／Ｏデバイスの識別子を設定する。【００７９】
ハイパバイザ２００は、割込みベクタ割当情報２７０を参照して、ゲスト側割込みベクタがユニーク割込みベクタ及び共有割込みベクタのいずれであるかを判定する。ゲスト側割込みベクタがユニーク割込みベクタである場合、ハイパバイザ２００は、追加されたエントリのベクタ種別７０４に「ユニーク」を設定する。一方、ゲスト側割込みベクタが共有割込みベクタである場合、ハイパバイザ２００は、追加されたエントリのベクタ種別７０４に「共有」を設定する。【００８０】
ハイパバイザ２００は、前述した処理を全てのゲスト側割込みベクタに対して実行する。他のベクタグループについても同様の処理を実行することによって統計情報２５０を生成できる。以上が、統計情報２５０の生成方法の説明である。【００８１】
図６は、本発明の実施例１のハイパバイザ２００及びゲストＯＳ４００が、割り込みが発生した場合に実行する処理の流れを説明するシーケンス図である。【００８２】
まず、ゲスト側割込みベクタがユニーク割込みベクタである場合に実行される処理の流れについて説明する。ここでは、図３に示す、第３のＩ／Ｏデバイス１０３に割り当てられたホスト側割込みベクタである「ベクタ０４」を例に説明する。【００８３】
第３のＩ／Ｏデバイス１０３は、「ベクタ０４」に対応する割込要因が発生すると、ハイパバイザ２００に「ベクタ０４」を含む割り込みを通知する（ステップＳ１０１）。【００８４】
ハイパバイザ２００は、割込みベクタ割当情報２７０を参照して、割り込みの通知に含まれるホスト側割込みベクタが割り当てられたゲスト側割込みベクタを含む割り込みを、第１のゲストＯＳ４００に通知する（ステップＳ１０２）。具体的には、以下のような処理が実行される。【００８５】
ハイパバイザ２００は、割り込みの通知を受けつけると、ベクタテーブル２６０を参照して、割り込みを通知したＩ／Ｏデバイス１０３を特定する。さらに、ハイパバイザ２００は、割込みベクタ割当情報２７０を参照して、割り込みの通知に含まれる「ベクタ０４」が割り当てられるゲスト側割込みベクタを特定する。ハイパバイザ２００は、特定されたゲスト側割込みベクタがユニーク割込みベクタであるか否かを判定する。【００８６】
ここでは、「ベクタ０４」は第１のゲストＯＳ４００が管理するゲスト側割込みベクタである「ベクタ１４」にのみ割り当てられているため、ハイパバイザ２００は、「ベクタ１４」がユニーク割込みベクタであると判定する。これによって、ハイパバイザ２００は、割込要因を特定するために割込要因レジスタ５００にアクセスする必要がないことが分かる。【００８７】
ハイパバイザ２００は、割込みベクタ割当情報２７０に基づいて、「ベクタ１４」を含む割り込みを第１のゲストＯＳ４００に通知する。以上がステップＳ１０２の処理の説明である。【００８８】
第１のゲストＯＳ４００は、ハイパバイザから「ベクタ１４」を含む割り込みの通知を受けつけると、「ベクタ１４」に対応する割込処理を実行する（ステップＳ１０３）。【００８９】
具体的には、第１のゲストＯＳ４００は、第１のゲストＯＳ４００が管理するベクタテーブルを参照して、「ベクタ１４」に対応する割込みハンドラを呼び出す。【００９０】
このとき、ハイパバイザ２００は、第１のゲストＯＳ４００に割り込みを通知した後、第２のベクタグループの統計情報２５０を更新する（ステップＳ１０４）。具体的には、以下のような処理が実行される。【００９１】
ハイパバイザ２００は、ステップＳ１０２において特定された第３のＩ／Ｏデバイス１０３が所属するベクタグループを特定する。ここでは、ハイパバイザ２００は、第３のＩ／Ｏデバイス１０３が第２のベクタグループに所属することを特定する。【００９２】
ハイパバイザ２００は、第２のベクタグループの統計情報２５０を参照し、ゲスト側割込みベクタ７０２が「ベクタ１４」であるエントリを検索する。ハイパバイザ２００は、検索されたエントリの統計値７０６の値を「１」加算する。以上がステップＳ１０４の処理の説明である。【００９３】
次に、ゲスト側割込みベクタが共有割込みベクタである場合に実行される処理の流れについて説明する。ここでは、図３に示す、第１のＩ／Ｏデバイス１０３に割り当てられたホスト側割込みベクタである「ベクタ０１」を例に説明する。【００９４】
第１のＩ／Ｏデバイス１０３は、「ベクタ０１」に対応する割込要因が発生すると、ハイパバイザ２００に「ベクタ０１」を含む割り込みを通知する（ステップＳ１１１）。【００９５】
ハイパバイザ２００は、第１のＩ／Ｏデバイス１０３の割込要因レジスタ５００にアクセスし（ステップＳ１１２）、割込要因レジスタ５００に格納される値を取得する（ステップＳ１１３）。具体的には、以下のような処理が実行される。【００９６】
ハイパバイザ２００は、割り込みの通知を受けつけると、ベクタテーブル２６０を参照して、割り込みを通知したＩ／Ｏデバイス１０３を特定する。さらに、ハイパバイザ２００は、割込みベクタ割当情報２７０を参照して、割り込みの通知に含まれる「ベクタ０１」が割り当てられるゲスト側割込みベクタを特定する。ハイパバイザ２００は、特定されたゲスト側割込みベクタがユニーク割込みベクタであるか否かを判定する。【００９７】
ここでは、ハイパバイザ２００は、割込みベクタ割当情報２７０に基づいて、「ベクタ０１」が第１のゲストＯＳ４００が管理するゲスト側割込みベクタである「ベクタ１１」及び「ベクタ１３」に割り当てられていることを特定する。さらに、ハイパバイザ２００は、「ベクタ１１」及び「ベクタ１３」が共有割込みベクタであると判定する。【００９８】
ハイパバイザ２００は、割込みベクタ割当情報２７０を参照して、割り込みの発生元が第１のＩ／Ｏデバイス１０３であることを特定する。ハイパバイザ２００は、割込みベクタ割当情報２７０を参照して、第１のＩ／Ｏデバイス１０３が第２のゲストＯＳ４００に割り当てられていることを特定する。ハイパバイザ２００は、第１のＩ／Ｏデバイス１０３の割込要因レジスタ５００から値を取得する。ここでは、ハイパバイザ２００が「ベクタ１１」への割り込みであることを特定したものとする。以上がステップＳ１１２及びステップＳ１１３の処理の説明である。【００９９】
ハイパバイザ２００は、割込みベクタ割当情報２７０に基づいて、ゲスト側割込みベクタを特定し、特定されたゲスト側割込みベクタを含む割り込みを第２のゲストＯＳ４００に通知する（ステップＳ１１４）。ここでは、ハイパバイザ２００は、「ベクタ１１」を含む割り込みを、第１のゲストＯＳ４００に通知するものとする。【０１００】
第２のゲストＯＳ４００は、ハイパバイザ２００から「ベクタ１１」を含む割り込みの通知を受けつけると、「ベクタ１１」に対応する割込処理を実行する（ステップＳ１１５）。【０１０１】
具体的には、第２のゲストＯＳ４００は、第２のゲストＯＳ４００が管理するベクタテーブルを参照して、「ベクタ１１」に対応する割込みハンドラを呼び出す。【０１０２】
このとき、ハイパバイザ２００は、第２のゲストＯＳ４００に割り込みを通知した後、第１のベクタグループの統計情報２５０を更新する（ステップＳ１１６）。具体的には、以下のような処理が実行される。【０１０３】
ハイパバイザ２００は、ステップＳ１１２において特定された第１のＩ／Ｏデバイス１０３が所属するベクタグループを特定する。ここでは、ハイパバイザ２００は、第１のＩ／Ｏデバイス１０３が第１のベクタグループに所属することを特定する。【０１０４】
ハイパバイザ２００は、第１のベクタグループの統計情報２５０を参照する。ハイパバイザ２００は、ゲスト側割込みベクタ７０２が「ベクタ１１」であるエントリを検索する。ハイパバイザ２００は、検索されたエントリの統計値７０６の値を「１」加算する。以上がステップＳ１１６の処理の説明である。【０１０５】
図５を用いて説明したように、ゲスト側割込みベクタがユニーク割込みベクタである場合、Ｉ／Ｏデバイス１０３の割込要因レジスタ５００へのアクセスは発生しない。一方、ゲスト側割込みベクタが共有割込みベクタである場合、Ｉ／Ｏデバイス１０３の割込要因レジスタ５００へのアクセスが発生する。ステップＳ１１２及びステップＳ１１３の処理は、オーバーヘッドが最も大きい処理である。【０１０６】
図７Ａ及び図７Ｂは、本発明の実施例１のハイパバイザ２００が実行する割込みベクタの割当変更処理を説明するフローチャートである。【０１０７】
ハイパバイザ２００のベクタ割当変更部２３０が割込みベクタの割当変更処理を実行する。ベクタ割当変更部２３０には、予め、処理の回数を示す閾値が設定されているものとする。また、処理対象のベクタグループの識別子を入力することもできる。【０１０８】
ベクタ割当変更部２３０は、周期的に、又は、ユーザから指示を受け付けると処理を開始する。このとき、ベクタ割当変更部２３０は、処理の開始時に、割込みベクタの変更が可能であるか否かを判定してもよい。【０１０９】
例えば、ベクタ割当変更部２３０は、物理ハードウェア１００に含まれるＩ／Ｏデバイス１０３が全てＴｙｐｅ３のＩ／Ｏデバイスであるか否かを判定する。Ｉ／Ｏデバイス１０３が全てＴｙｐｅ３のＩ／Ｏデバイスである場合、ベクタ割当変更部２３０は、割込みベクタの割当て変更処理を実行しない。これは、共有割込みベクタの設定ができないためである。また、ベクタ割当変更部２３０は、物理計算機１０に設定可能なホスト側割込みベクタの数が「２」以上であるか否かを判定する。物理計算機１０に設定可能なホスト側割込みベクタの数が「２」より小さい場合、ベクタ割当変更部２３０は、割込みベクタの割当変更処理を実行しない。これは、共有割込みベクタの設定ができないためである。【０１１０】
ベクタ割当変更部２３０は、ベクタグループのループ処理を開始する（ステップＳ２０１）。具体的には、ベクタ割当変更部２３０は、ベクタグループの中から処理対象のベクタグループを選択し、選択されたベクタグループの統計情報２５０を取得する。なお、予め処理対象のベクタグループが指定されている場合には、ベクタ割当変更部２３０は、指定されたベクタグループのみを選択する。【０１１１】
ベクタ割当変更部２３０は、選択されたベクタグループに含まれるＩ／Ｏデバイス１０３に設定されたホスト側割込みベクタの数が「２」以上であるか否かを判定する（ステップＳ２０２）。【０１１２】
具体的には、ベクタ割当変更部２３０は、ベクタテーブル２６０を参照して、Ｉ／Ｏデバイス１０３に設定されるホスト側割込みベクタの数を算出する。ベクタ割当変更部２３０は、算出されたホスト側割込みベクタの数が「２」以上であるか否かを判定する。【０１１３】
選択されたベクタグループに含まれるＩ／Ｏデバイス１０３に設定されたホスト側割込みベクタの数が「２」より小さいと判定された場合、ベクタ割当変更部２３０は、統計情報２５０を初期化し（ステップＳ２０９）、ステップＳ２１０に進む。具体的には、ベクタ割当変更部２３０は、統計値７０６の値を「０」に設定する。【０１１４】
選択されたベクタグループに含まれるＩ／Ｏデバイス１０３に設定されたホスト側割込みベクタの数が「２」以上であると判定された場合、ベクタ割当変更部２３０は、選択されたベクタグループが第１のベクタグループであるか否かを判定する（ステップＳ２０３）。具体的には、ベクタ割当変更部２３０は、ベクタグループの種別に基づいて、選択されたベクタグループが第１のベクタグループであるか否かを判定する。【０１１５】
選択されたベクタグループが第１のベクタグループであると判定された場合、ベクタ割当変更部２３０は、選択されたベクタグループの統計情報２５０に基づいて、変更対象のユニーク割込みベクタ及び共有割込みベクタを選択する（ステップＳ２０４）。【０１１６】
具体的には、ベクタ割当変更部２３０は、ベクタ種別７０４に「共有」が設定されるエントリの中から、統計値７０６の値が最も大きいエントリを選択する。また、ベクタ割当変更部２３０は、ベクタ種別７０４に「ユニーク」が設定されるエントリの中から、統計値７０６の値が最も小さいエントリを選択する。【０１１７】
ベクタ割当変更部２３０は、ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できるか否かを判定する（ステップＳ２０５）。【０１１８】
具体的には、ベクタ割当変更部２３０は、共有割込みベクタに対応するエントリの統計値７０６の値（ＳＶｅｃＭａｘ）が、ユニーク割込みベクタに対応するエントリの統計値７０６の値（ＵＶｅｃＭｉｎ）より大きいか否かを判定する。すなわち、下式（１）を満たすか否か判定される。式（１）を満たす場合、ベクタ割当変更部２３０は、ユニーク割込みベクタと共有割込みベクタの割当てを変更できると判定する。【０１１９】
【数１】
2015132942.tif 000003
【０１２０】
ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できないと判定された場合、ベクタ割当変更部２３０は、統計情報２５０を初期化し（ステップＳ２０９）、ステップＳ２１０に進む。具体的には、ベクタ割当変更部２３０は、統計値７０６の値を「０」に設定する。【０１２１】
ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できると判定された場合、ベクタ割当変更部２３０は、割込みベクタの割当てを変更する（ステップＳ２０６）。すなわち、ベクタ割当変更部２３０は、割込みベクタ割当情報２７０を更新する。【０１２２】
具体的には、ベクタ割当変更部２３０は、共有割込みベクタに対応するエントリのホスト側割込みベクタ６０１に、ユニーク割込みベクタに割り当てられたホスト側割込みベクタを設定し、ユニーク割込みベクタにエントリのホスト側割込みベクタ６０１に、共有割込みベクタに割り当てられたホスト側割込みベクタを設定する。【０１２３】
このとき、ハイパバイザ２００は、単に、ゲスト側割込みベクタに対するホスト側割込みベクタの割り当てを変更するだけではなく、Ｉ／Ｏデバイス１０３に対するホスト側割込みベクタの割り当ても変更する。【０１２４】
ベクタ割当変更部２３０は、ユニーク割込みベクタ及び共有割込みベクタに対応するエントリを選択できないように制御する。これは、同一の処理が繰り返し実行される場合に、すでに変更されたゲスト側割込みベクタが選択されないようにするためである。【０１２５】
ベクタ割当変更部２３０は、統計情報２５０についても以下のように変更する。すなわち、ベクタ割当変更部２３０は、共有割込みベクタに対応するエントリのホスト側割込みベクタ７０３に、ユニーク割込みベクタに割り当てられたホスト側割込みベクタを設定し、ユニーク割込みベクタに対応するエントリのホスト側割込みベクタ７０３に、共有割込みベクタに割り当てられたホスト側割込みベクタを設定する。【０１２６】
前述した処理によって、共有割込みベクタに割り当てられるホスト側割込みベクタが、ユニーク割込みベクタに割り当てられるホスト側割込みベクタに変更され、ユニーク割込みベクタに割り当てられるホスト側割込みベクタが、共有割込みベクタに割り当てられるホスト側割込みベクタに変更される。【０１２７】
ベクタ割当変更部２３０は、ユニーク割込みベクタと共有割込みベクタとの間の割当ての変更回数が、閾値より小さいか否かを判定する（ステップＳ２０７）。【０１２８】
変更回数が閾値以上である場合、ベクタ割当変更部２３０は、統計情報２５０を初期化し（ステップＳ２０９）、ステップＳ２１０に進む。具体的には、ベクタ割当変更部２３０は、統計値７０６の値を「０」に設定する。【０１２９】
変更回数が閾値より小さいと判定された場合、ホスト側割込みベクタの数から変更回数を減算した数が「２」以上であるか否かを判定する（ステップＳ２０８）。【０１３０】
ホスト側割込みベクタの数から変更回数を減算した数が「２」以上であると判定された場合、ベクタ割当変更部２３０は、ステップＳ２０４に戻り同様の処理を実行する。【０１３１】
ホスト側割込みベクタの数から変更回数を減算した数が「２」より小さいと判定された場合、ベクタ割当変更部２３０は、統計情報２５０を初期化し（ステップＳ２０９）、ステップＳ２１０に進む。具体的には、ベクタ割当変更部２３０は、統計値７０６の値を「０」に設定する。【０１３２】
ベクタ割当変更部２３０は、統計情報２５０を初期化した後、全てのベクタグループについて処理が完了したか否かを判定する（ステップＳ２１０）。【０１３３】
全てのベクタグループについて処理が完了していないと判定された場合、ベクタ割当変更部２３０は、ステップＳ２０１に戻り、新たなベクタグループに対して同様の処理を実行する。【０１３４】
全てのベクタグループについて処理が完了したと判定された場合、ベクタ割当変更部２３０は、処理を終了する。【０１３５】
ステップＳ２０３において、選択されたベクタグループが第２のベクタグループであると判定された場合、ベクタ割当変更部２３０は、選択されたベクタグループの統計情報２５０に基づいて、変更対象のユニーク割込みベクタ及び共有割込みベクタを選択する（ステップＳ２１１）。ステップＳ２１１からステップＳ２１６の処理は、ステップＳ２０４からステップＳ２０９と同一の処理であるため説明を省略する。【０１３６】
第１のベクタグループに対する処理と第２のベクタグループに対する処理とでは、以下のような違いがある。第１のベクタグループの場合、複数のＴｙｐｅ１のＩ／Ｏデバイスに設定されたホスト側割込みベクタに対してゲスト側割込みベクタの割当てが変更される。一方、第２のベクタグループの場合、一つのＴｙｐｅ２のＩ／Ｏデバイスに設定されたホスト側割込みベクタに対してゲスト側割込みベクタの割当てが変更される。【０１３７】
割込みベクタの割当変更処理を実行することによって、ゲスト側割込みベクタに対するホスト側割込みベクタの割当て状態が最適化される。これによって、計算機システム全体におけるオーバーヘッドを低減できる。【０１３８】
ここで、図８及び図９を用いて、割込みベクタの割当変更処理の具体的な処理結果について説明する。以下の説明では、ステップＳ２０１において、図３に示す第１のベクタグループが選択されたものとする。また、処理の回数を示す閾値は「１」であるものとする。【０１３９】
図８は、本発明の実施例１のゲスト側割込みベクタに対するホスト側割込みベクタの割当て状態を示す説明図である。図９は、本発明の実施例１の割込みベクタ割当情報２７０を示す説明図である。図８及び図９は、割込みベクタの割当変更処理が実行された後の状態を示す。【０１４０】
ステップＳ２０２では、「ベクタ０１」、「ベクタ０２」、及び「ベクタ０３」の三つホスト側割込みベクタが存在するため、ホスト側割込みベクタの数は「３」と算出される。したがって、ベクタ割当変更部２３０は、選択されたベクタグループに含まれるＩ／Ｏデバイス１０３に設定されるホスト側割込みベクタの数は「２」以上であると判定する。【０１４１】
ステップＳ２０４では、ベクタ割当変更部２３０は、ユニーク割込みベクタとして「ベクタ２１」を選択し、共有割込みベクタとして「ベクタ１１」を選択する。【０１４２】
ステップＳ２０５では、「ベクタ２１」に対応するエントリの統計値７０６の値は、「ベクタ２１」に対応するエントリの統計値７０６の値より大きいため、式（１）を満たす。したがって、ベクタ割当変更部２３０は、ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できると判定する。【０１４３】
ステップＳ２０６では、ベクタ割当変更部２３０は、ゲスト側割込みベクタ６０２が「ベクタ１１」であるエントリのホスト側割込みベクタ６０１を「ベクタ０１」から「ベクタ０２」に変更する。また、ベクタ割当変更部２３０は、ゲスト側割込みベクタ６０２が「ベクタ２１」であるエントリのホスト側割込みベクタ６０１を「ベクタ０２」から「ベクタ０１」に変更する。これによって、共有割込みベクタであった「ベクタ１１」はユニーク割込みベクタに変更され、ユニーク割込みベクタであった「ベクタ２１」は共有割込みベクタに変更される。
【実施例２】
【０１４４】
実施例１では、統計情報２５０に基づいて、ゲスト側割込みベクタに対するホスト側割込みベクタの割当てが変更されていた。実施例２では、ゲストＯＳ４００における割込要因のランクに基づいて、ゲスト側割込みベクタに対するホスト側割込みベクタの割当てが変更される。【０１４５】
実施例２の物理計算機１０、Ｉ／Ｏデバイス１０３の構成は実施例１と同一であるため説明を省略する。なお、実施例２では、割込コントローラ２０３は、統計情報２５０を保持していなくてもよい。第２の実施例の割込みベクタ割当情報２７０は、実施例１と同一であるため説明を省略する。実施例２では、割込みベクタの割当変更処理の内容が異なる。【０１４６】
図１０は、本発明の実施例２のハイパバイザ２００が実行する割込みベクタの割当変更処理を説明するフローチャートである。【０１４７】
ベクタ割当変更部２３０は、ゲスト側割込みベクタのランク情報を受け付けると処理を開始する（ステップＳ３０１）。ここで、ゲスト側割込みベクタのランク情報は、ゲストＯＳ４００における割込要因の優先順位を示す情報であり、ゲスト側割込みベクタと優先順位とが対応付けられる。【０１４８】
ベクタ割当変更部２３０は、ゲスト側割込みベクタのループ処理を開始する（ステップＳ３０２）。具体的には、ベクタ割当変更部２３０は、ランク情報の中から、最も優先順位が高いゲスト側割込みベクタを選択する。【０１４９】
ベクタ割当変更部２３０は、選択されたゲスト側割込みベクタに対応するＩ／Ｏデバイス１０３に設定されるホスト側割込みベクタの数が「２」以上であるか否かを判定する（ステップＳ３０３）。ステップＳ３０３の処理はステップＳ２０２の処理と同一の処理である。【０１５０】
具体的には、ベクタ割当変更部２３０は、割込みベクタ割当情報２７０を参照して、選択されたゲスト側割込みベクタに割り当てられるホスト側割込みベクタが設定されたＩ／Ｏデバイス１０３を特定する。ベクタ割当変更部２３０は、ベクタテーブル２６０を参照して、当該Ｉ／Ｏデバイス１０３に設定されたホスト側割込みベクタの数を算出する。【０１５１】
Ｉ／Ｏデバイス１０３に設定されたホスト側割込みベクタの数が「２」より小さいと判定された場合、ベクタ割当変更部２３０は、ループ処理を終了し、また、割込みベクタ割当変更処理を終了する。【０１５２】
Ｉ／Ｏデバイス１０３に設定されたホスト側割込みベクタの数が「２」以上であると判定された場合、ベクタ割当変更部２３０は、割込みベクタ割当情報２７０を参照して、選択されたゲスト側割込みベクタがユニーク割込みベクタであるか否かを判定する（ステップＳ３０４）。【０１５３】
選択されたゲスト側割込みベクタがユニーク割込みベクタであると判定された場合、ベクタ割当変更部２３０は、ステップＳ３１０に進む。【０１５４】
選択されたゲスト側割込みベクタがユニーク割込みベクタでないと判定された場合、ベクタ割当変更部２３０は、ランク情報及び割込みベクタ割当情報２７０に基づいて、変更対象のユニーク割込みベクタを選択する（ステップＳ３０５）。具体的には、以下のような処理が実行される。【０１５５】
ベクタ割当変更部２３０は、割込みベクタ割当情報２７０を参照して、ベクタ種別７０４に「ユニーク」が設定されるエントリを検索し、検索されたエントリのホスト側割込みベクタ６０１の値を取得する。【０１５６】
ベクタ割当変更部２３０は、取得されたホスト側割込みベクタに基づいてランク情報を参照して、ユニーク割込みベクタの優先順位を取得する。ベクタ割当変更部２３０は、ユニーク割込みベクタが複数存在する場合、取得された各ユニーク割込みベクタの優先順位を比較する。ベクタ割当変更部２３０は、最も優先順位が低いユニーク割込みベクタを、変更対象のユニーク割込みベクタとして選択する。【０１５７】
ベクタ割当変更部２３０は、ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できるか否かを判定する（ステップＳ３０６）。【０１５８】
具体的には、ベクタ割当変更部２３０は、共有割込みベクタの優先順位が、ユニーク割込みベクタの優先順位より高いか否かを判定する。共有割込みベクタの優先順位が、ユニーク割込みベクタの優先順位より高い場合、ベクタ割当変更部２３０は、ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できると判定する。【０１５９】
ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できないと判定された場合、ベクタ割当変更部２３０は、ループ処理を終了し、また、割込みベクタ割当変更処理を終了する。【０１６０】
ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できると判定された場合、ベクタ割当変更部２３０は、割込みベクタ割当情報２７０を更新する（ステップＳ３０７）。すなわち、ベクタ割当変更部２３０は、共有割込みベクタに割り当てられるホスト側割込みベクタと、ユニーク割込みベクタに割り当てられるホスト側割込みベクタとを入れ替える。なお、ステップＳ３０７の処理は、ステップＳ２０６の処理と同一であるため説明を省略する。【０１６１】
ベクタ割当変更部２３０は、ユニーク割込みベクタと共有割込みベクタとの間の割当ての変更回数が、閾値より小さいか否かを判定する（ステップＳ３０８）。ステップＳ３０８の処理は、ステップＳ２０７と同一の処理である。【０１６２】
変更回数が閾値以上である場合、ベクタ割当変更部２３０は、ループ処理を終了し、また、割込みベクタ割当変更処理を終了する。【０１６３】
変更回数が閾値より小さいと判定された場合、ホスト側割込みベクタの数から変更回数を減算した数が「２」以上であるか否かを判定する（ステップＳ３０９）。ステップＳ３０９の処理は、ステップＳ２０８の処理と同一の処理である。【０１６４】
ホスト側割込みベクタの数から変更回数を減算した数が「２」以上であると判定された場合、ベクタ割当変更部２３０は、ステップＳ３１０に進む。【０１６５】
ホスト側割込みベクタの数から変更回数を減算した数が「２」より小さいと判定された場合、ベクタ割当変更部２３０は、ループ処理を終了し、また、割込みベクタ割当変更処理を終了する。【０１６６】
ステップＳ３１０において、ベクタ割当変更部２３０は、全てのゲスト側割込みベクタについて処理が完了したか否かを判定する（ステップＳ３１０）。【０１６７】
全てのゲスト側割込みベクタについて処理が完了していないと判定された場合、ベクタ割当変更部２３０は、ステップＳ３０２に戻り、新たなゲスト側割込みベクタに対して同様の処理を実行する。【０１６８】
全てのゲスト側割込みベクタについて処理が完了したと判定された場合、ベクタ割当変更部２３０は、割込みベクタ割当変更処理を終了する。【０１６９】
以上説明したように、本発明によれば、ハイパバイザ２００は、統計情報２５０又はランク情報に基づいて、ゲスト側割込みベクタに対するホスト側割込みベクタの割当状態を解析し、解析結果に基づいて、ゲスト側割込みベクタに対するホスト側割込みベクタの割当てを変更する。【０１７０】
統計情報２５０に基づいて割込みベクタの割当てが変更された場合、アクセス頻度が高い割込要因に対応するゲスト側割込みベクタが、優先的にユニーク割込みベクタとなるためオーバーヘッドを低減することができる。また、ランク情報に基づいて割込みベクタの割当てが変更された場合、優先順位が高いゲスト側割込みベクタがユニーク割込みベクタとなるためオーバーヘッドを低減することができる。【０１７１】
なお、仮想計算機をＬＰＡＲとして説明したが、本発明はこれに限定されない。複数の仮想計算機が同一の物理ハードウェア１００を共有する割り当て方式でも同様の構成を実現することができる。この場合、仮想計算機に割り当てられるＩ／Ｏデバイス１０３は時間毎に異なる。そのため、前述した方式を用いた仮想計算機の場合、Ｉ／Ｏデバイス１０３の割り当ても管理する必要がある点が異なる。【０１７２】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。また、例えば、上記した実施例は本発明を分かりやすく説明するために構成を詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、各実施例の構成の一部について、他の構成に追加、削除、置換することが可能である。【０１７３】
また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、本発明は、実施例の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をコンピュータに提供し、そのコンピュータが備えるプロセッサが記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施例の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。【０１７４】
また、本実施例に記載の機能を実現するプログラムコードは、例えば、アセンブラ、Ｃ／Ｃ＋＋、ｐｅｒｌ、Ｓｈｅｌｌ、ＰＨＰ、Ｊａｖａ等の広範囲のプログラム又はスクリプト言語で実装できる。【０１７５】
さらに、実施例の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することによって、それをコンピュータのハードディスクやメモリ等の記憶手段又はＣＤ−ＲＷ、ＣＤ−Ｒ等の記憶媒体に格納し、コンピュータが備えるプロセッサが当該記憶手段や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしてもよい。【０１７６】
上述の実施例において、制御線や情報線は、説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。全ての構成が相互に接続されていてもよい。
【図１】
2015132942.tif 000004
【図２】
2015132942.tif 000005
【図３】
2015132942.tif 000006
【図４】
2015132942.tif 000007
【図５Ａ】
2015132942.tif 000008
【図５Ｂ】
2015132942.tif 000009
【図６】
2015132942.tif 000010
【図７Ａ】
2015132942.tif 000011
【図７Ｂ】
2015132942.tif 000012
【図８】
2015132942.tif 000013
【図９】
2015132942.tif 000014
【図１０】
2015132942.tif 000015
【手続補正書】
【提出日】平成28年6月21日(2016.6.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のオペレーティングシステムが稼動する計算機であって、
前記計算機は、物理リソースとして、プロセッサ、前記プロセッサに接続される揮発性メモリ、前記プロセッサに接続される不揮発性メモリ、及び前記プロセッサに接続される少なくとも一つのＩ／Ｏデバイスを備え、
前記物理リソースを用いて少なくとも一つの仮想計算機を生成し、前記少なくとも一つの仮想計算機を管理する仮想化機能部を備え、
前記少なくとも一つの仮想計算機上では、オペレーティングシステムが稼動し、
前記オペレーティングシステムは、
当該オペレーティングシステムが稼動する仮想計算機に割り当てられる仮想的なＩ／Ｏデバイスが割り込みを通知するために設定されたゲスト側割込みベクタを管理するための第１のベクタ情報を保持し、
前記仮想化機能部は、前記少なくとも一つのＩ／Ｏデバイスからの割り込み通知に対する処理を実行する割込コントローラを含み、
前記割込コントローラは、
前記物理リソースに含まれる前記少なくとも一つのＩ／Ｏデバイスが割り込みを通知するために設定されたホスト側割込みベクタを管理するための第２のベクタ情報と、
前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを管理するための割込みベクタ割当情報と、を保持し、
前記ゲスト側割込みベクタは、一つの前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられたユニーク割込みベクタ、及び、複数の前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられた共有割込みベクタを含み、
前記割込コントローラは、
前記ホスト側割込みベクタを含む割り込み通知を受けつけた場合、前記割込みベクタ割当情報に基づいて、当該ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタを特定し、
前記特定されたゲスト側割込みベクタが前記ユニーク割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記オペレーティングシステムに当該特定されたゲスト側割込みベクタを含む割り込みを通知し、
前記特定されたゲスト側割込みベクタが前記共有割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記ホスト側割込みベクタが割り当てられる前記Ｉ／Ｏデバイスにアクセスすることによって、前記ゲスト側割込みベクタ及び割り込み先の前記オペレーティングシステムを特定し、前記特定されたオペレーティングシステムに、当該特定されたゲスト側割込みベクタを含む割り込みを通知し、
前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当て状態を解析し、
前記解析の結果に基づいて、前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを変更することを特徴とする計算機。
【請求項２】
請求項１に記載の計算機であって、
前記割込コントローラは、
前記ゲスト側割込みベクタ毎の割り込みの発生回数を管理するための統計情報を保持し、
前記統計情報に基づいて、複数の共有割込みベクタの中から処理対象の共有割込みベクタを選択し、複数のユニーク割込みベクタの中から処理対象のユニーク割込みベクタを選択し、
前記共有割込みベクタを前記ユニーク割込みベクタに変更し、前記ユニーク割込みベクタを前記共有割込みベクタに変更することを特徴とする計算機。
【請求項３】
請求項２に記載の計算機であって、
前記割込コントローラは、
前記複数の共有割込みベクタの中から、前記割り込みの発生回数が最も大きい共有割込みベクタを検索し、
前記複数のユニーク割込みベクタの中から、前記割り込みの発生回数が最も小さいユニーク割込みベクタを検索し、
前記検索された共有割込みベクタに割り当てられるホスト側割込みベクタを、前記検索されたユニーク割込みベクタに割り当てられるホスト側割込みベクタに変更し、
前記検索されたユニーク割込みベクタに割り当てられるホスト側割込みベクタを、前記検索された共有割込みベクタに割り当てられるホスト側割込みベクタに変更することを特徴とする計算機。
【請求項４】
請求項２に記載の計算機であって、
前記物理リソースは、複数のＩ／Ｏデバイスを含み、
前記複数のＩ／Ｏデバイスの各々は、割り込みの要因を示す値を格納する割込要因レジスタを含み、
前記複数のＩ／Ｏデバイスは、
前記仮想化機能部が前記割込要因レジスタにアクセスした場合に、前記割込要因レジスタの値が保持されたままの状態となる複数の第１のＩ／Ｏデバイスと、
前記仮想化機能部が前記割込要因レジスタにアクセスした場合に、前記割込要因レジスタの値が消去された状態となる複数の第２のＩ／Ｏデバイスと、を含み、
前記割込コントローラは、
前記複数の第１のＩ／Ｏデバイスから構成される第１のベクタグループを生成し、
前記第１のベクタグループに含まれる前記複数の第１のＩ／Ｏデバイスの各々に設定される前記ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタの前記割り込みの発生回数を管理するための前記統計情報を生成し、
一つの第２のＩ／Ｏデバイスから構成される第２のベクタグループを生成し、
前記第２のＩ／Ｏデバイスに設定される前記ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタの前記割り込みの発生回数を管理するための前記統計情報を生成し、
前記ゲスト側割込みベクタの割当てを変更する場合に、処理対象のベクタグループを選択し、前記選択されたベクタグループに対応する前記統計情報を参照して、前記処理対象の共有割込みベクタ及び前記処理対象のユニーク割込みベクタを選択することを特徴とする計算機。
【請求項５】
請求項１に記載の計算機であって、
前記割込コントローラは、
前記ゲスト側割込みベクタの優先順位を示すランク情報を受信し、
前記ランク情報に基づいて、複数の共有割込みベクタの中から処理対象の共有割込みベクタを選択し、
前記ランク情報に基づいて、複数のユニーク割込みベクタの中から処理対象のユニーク割込みベクタを選択し、
前記共有割込みベクタを前記ユニーク割込みベクタに変更し、前記ユニーク割込みベクタを前記共有割込みベクタに変更することを特徴とする計算機。
【請求項６】
複数のオペレーティングシステムが稼動する計算機における割込みベクタ管理方法であって、
前記計算機は、
物理リソースとして、プロセッサ、前記プロセッサに接続される揮発性メモリ、前記プロセッサに接続される不揮発性メモリ、及び前記プロセッサに接続される少なくとも一つのＩ／Ｏデバイスを備え、
前記物理リソースを用いて少なくとも一つの仮想計算機を生成し、前記少なくとも一つの仮想計算機を管理する仮想化機能部を備え、
前記少なくとも一つの仮想計算機上では、オペレーティングシステムが稼動し、
前記オペレーティングシステムは、
当該オペレーティングシステムが稼動する仮想計算機に割り当てられる仮想的なＩ／Ｏデバイスが割り込みを通知するために設定されたゲスト側割込みベクタを管理するための第１のベクタ情報を保持し、
前記仮想化機能部は、前記少なくとも一つのＩ／Ｏデバイスからの割り込み通知に対する処理を実行する割込コントローラを含み、
前記割込コントローラは、
前記物理リソースに含まれる前記少なくとも一つのＩ／Ｏデバイスが割り込みを通知するために設定されたホスト側割込みベクタを管理するための第２のベクタ情報と、
前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを管理するための割込みベクタ割当情報と、を保持し、
前記ゲスト側割込みベクタは、一つの前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられたユニーク割込みベクタ、及び、複数の前記ゲスト側割込みベクタに一つの前記ホスト側割込みベクタが割り当てられた共有割込みベクタを含み、
前記割込みベクタ管理方法は、
前記割込コントローラが、前記ホスト側割込みベクタを含む割り込み通知を受けつけた場合、前記割込みベクタ割当情報に基づいて、当該ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタを特定する第１のステップと、
前記割込コントローラが、前記特定されたゲスト側割込みベクタが前記ユニーク割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記オペレーティングシステムに当該特定されたゲスト側割込みベクタを含む割り込みを通知する第２のステップと、
前記割込コントローラが、前記特定されたゲスト側割込みベクタが前記共有割込みベクタである場合、前記第２のベクタ情報及び前記割込みベクタ割当情報に基づいて、前記ホスト側割込みベクタが割り当てられる前記Ｉ／Ｏデバイスにアクセスすることによって、前記ゲスト側割込みベクタ及び割り込み先の前記オペレーティングシステムを特定し、前記特定されたオペレーティングシステムに、当該特定されたゲスト側割込みベクタを含む割り込みを通知する第３のステップと、
前記割込コントローラが、前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当て状態を解析する第４のステップと、
前記割込コントローラが、前記解析の結果に基づいて、前記ゲスト側割込みベクタに対する前記ホスト側割込みベクタの割当てを変更する第５のステップと、を含むことを特徴とする割込みベクタ管理方法。
【請求項７】
請求項６に記載の割込みベクタ管理方法であって、
前記割込コントローラは、前記ゲスト側割込みベクタ毎の割り込みの発生回数を管理するための統計情報を保持し、
前記第４のステップは、前記統計情報に基づいて、複数の共有割込みベクタの中から処理対象の共有割込みベクタを選択し、複数のユニーク割込みベクタの中から処理対象のユニーク割込みベクタを選択する第６のステップを含み、
前記第５のステップは、前記共有割込みベクタを前記ユニーク割込みベクタに変更し、前記ユニーク割込みベクタを前記共有割込みベクタに変更する第７のステップを含むことを特徴とする割込みベクタ管理方法。
【請求項８】
請求項７に記載の割込みベクタ管理方法であって、
前記第６のステップは、
前記複数の共有割込みベクタの中から、前記割り込みの発生回数が最も大きい共有割込みベクタを検索するステップと、
前記複数のユニーク割込みベクタの中から、前記割り込みの発生回数が最も小さいユニーク割込みベクタを検索するステップと、を含み、
前記第７のステップは、
前記検索された共有割込みベクタに割り当てられるホスト側割込みベクタを、前記検索されたユニーク割込みベクタに割り当てられるホスト側割込みベクタに変更するステップと、
前記検索されたユニーク割込みベクタに割り当てられるホスト側割込みベクタを、前記検索された共有割込みベクタに割り当てられるホスト側割込みベクタに変更するステップと、を含むことを特徴とする割込みベクタ管理方法。
【請求項９】
請求項７に記載の割込みベクタ管理方法であって、
前記物理リソースは、複数のＩ／Ｏデバイスを含み、
前記複数のＩ／Ｏデバイスの各々は、割り込みの要因を示す値を格納する割込要因レジスタを含み、
前記複数のＩ／Ｏデバイスは、
前記仮想化機能部が前記割込要因レジスタにアクセスした場合に、前記割込要因レジスタの値が保持されたままの状態となる複数の第１のＩ／Ｏデバイスと、
前記仮想化機能部が前記割込要因レジスタにアクセスした場合に、前記割込要因レジスタの値が消去された状態となる複数の第２のＩ／Ｏデバイスと、を含み、
前記割込みベクタ管理方法は、
前記割込コントローラが、前記複数の第１のＩ／Ｏデバイスから構成される第１のベクタグループを生成するステップと、
前記割込コントローラが、前記第１のベクタグループに含まれる前記複数の第１のＩ／Ｏデバイスの各々に設定される前記ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタの前記割り込みの発生回数を管理するための前記統計情報を生成するステップと、
前記割込コントローラが、一つの第２のＩ／Ｏデバイスから構成される第２のベクタグループを生成するステップと、
前記割込コントローラが、前記第２のＩ／Ｏデバイスに設定される前記ホスト側割込みベクタが割り当てられる前記ゲスト側割込みベクタの前記割り込みの発生回数を管理するための前記統計情報を生成するステップと、を含み、
前記第４のステップは、
処理対象のベクタグループを選択するステップと、
前記選択されたベクタグループに対応する前記統計情報を参照して、前記処理対象の共有割込みベクタ及び前記処理対象のユニーク割込みベクタを選択するステップと、を含むことを特徴とする割込みベクタ管理方法。
【請求項１０】
請求項６に記載の割込みベクタ管理方法であって、
前記第４のステップは、
前記ゲスト側割込みベクタの優先順位を示すランク情報を受信するステップと、
前記ランク情報に基づいて、複数の共有割込みベクタの中から処理対象の共有割込みベクタを選択するステップと、
前記ランク情報に基づいて、複数のユニーク割込みベクタの中から処理対象のユニーク割込みベクタを選択するステップと、を含み
前記第５のステップは、前記共有割込みベクタを前記ユニーク割込みベクタに変更し、前記ユニーク割込みベクタを前記共有割込みベクタに変更するステップを含むことを特徴とする割込みベクタ管理方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００３
【補正方法】変更
【補正の内容】
【０００３】
Ｉ／Ｏデバイスには、Ｈｏｓｔ  Ｂｕｓ  Ａｄａｐｔｅｒ  （ＨＢＡ）、Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ  （ＮＩＣ）等のネットワークアダプタが含まれる。各仮想計算機上で稼動するゲストＯＳは、当該仮想計算機に割り当てられたＩ／Ｏデバイスを介して、ネットワークに接続される、記憶装置などの外部装置へアクセスすることができる。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００４６
【補正方法】変更
【補正の内容】
【００４６】
複数のＴｙｐｅ２のＩ／Ｏデバイスを用いて、複数のゲスト側割込みベクタがホスト側割込みベクタを共有する場合、ハイパバイザ２００は、割込要因を特定するために割込要因レジスタ５００にアクセスする必要がある。しかし、Ｔｙｐｅ２のＩ／Ｏデバイスはハイパバイザ２００からアクセスされると割込要因レジスタ５００に格納される値が消去される。そのため、複数の割込が同時に発生した場合、割込要因を特定することが困難になる。前述したような理由によって、本実施例のハイパバイザ２００は、複数のＴｙｐｅ２のＩ／Ｏデバイスを用いてホスト側割込みベクタが共有されないように制御する。なお、ホスト側割込みベクタの共有については図３を用いて後述する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００９９
【補正方法】変更
【補正の内容】
【００９９】
ハイパバイザ２００は、割込みベクタ割当情報２７０に基づいて、ゲスト側割込みベクタを特定し、特定されたゲスト側割込みベクタを含む割り込みを第２のゲストＯＳ４００に通知する（ステップＳ１１４）。ここでは、ハイパバイザ２００は、「ベクタ１１」を含む割り込みを、第２のゲストＯＳ４００に通知するものとする。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１４２
【補正方法】変更
【補正の内容】
【０１４２】
ステップＳ２０５では、「ベクタ１１」に対応するエントリの統計値７０６の値は、「ベクタ２１」に対応するエントリの統計値７０６の値より大きいため、式（１）を満たす。したがって、ベクタ割当変更部２３０は、ユニーク割込みベクタと共有割込みベクタとの間の割当てを変更できると判定する。
【国際調査報告】
2015132942.tif 000016
2015132942.tif 000017
2015132942.tif 000018
2015132942.tif 000019