(57)【要約】      （修正有）【課題】仮想計算機システムにおいて、滞留数の多いリクエストや滞留期間の長いリクエストを迅速に処理する。【解決手段】仮想計算機システムは、ゲストＯＳ２０とハイパーバイザ３０を備える。ゲストＯＳは、受け付けたリクエストを蓄積する記憶部と、仮想ＣＰＵの識別子を含むハイパーバイザコールをハイパーバイザに対して発行する要求部２２とを有する。ハイパーバイザは、識別子に対応する仮想ＣＰＵを実現するスレッドに割り当てられた物理ＣＰＵの実行時間を変更する変更部３２を有する。要求部は、記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する。【選択図】図１
2017199044.tif 000002
【特許請求の範囲】
【請求項１】
ゲストＯＳ（Operating System）とハイパーバイザを備え、
前記ゲストＯＳは、受け付けたリクエストを蓄積する記憶部と、
仮想ＣＰＵ（Central Processing Unit）の識別子を含むハイパーバイザコールを前記ハイパーバイザに対して発行する要求部とを有し、
前記ハイパーバイザは、前記識別子に対応する仮想ＣＰＵを実現するスレッドに割り当てられた物理ＣＰＵの実行時間を変更する変更部を有し、
前記要求部は、前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する、
ことを特徴とする仮想計算機システム。
【請求項２】
前記ゲストＯＳは、受け付けたリクエストを処理するアプリケーションと前記アプリケーションを実行する仮想ＣＰＵの識別子を関連付けて保持する第１のキューを備え、
前記要求部は、前記第１のキューを参照して、前記アプリケーションを実行する仮想ＣＰＵの識別子を特定し、特定した仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する、
請求項１に記載の仮想計算機システム。
【請求項３】
前記ハイパーバイザは、優先度ごとに分類されたスレッドと前記スレッドを優先度に応じて実行する物理ＣＰＵを関連付けて保持する第２のキューを備え、
前記変更部は、前記識別子に対応する仮想ＣＰＵを実現するスレッドが物理ＣＰＵ上で実行中である場合、当該スレッドの実行時間を延長し、それ以外の場合、当該スレッドの前記第２のキューにおける優先度、および／または、当該スレッドの前記第２のキューにおける順序を変更する、
請求項１または２に記載の仮想計算機システム。
【請求項４】
前記ゲストＯＳは、受け付けたリクエストの優先度を計算する優先度計算部を備え、
前記要求部は、前記記憶部に蓄積された未処理のリクエストの優先度が所定の優先度を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する、
請求項１ないし３のいずれか１項に記載の仮想計算機システム。
【請求項５】
前記ハイパーバイザは、前記要求部によって発行されるハイパーバイザコールの頻度が所定の頻度を超えた場合、警告を出力する警告部を備える、
請求項１ないし４のいずれか１項に記載の仮想計算機システム。
【請求項６】
ゲストＯＳ（Operating System）が、受け付けたリクエストを記憶部に蓄積するステップと、
仮想ＣＰＵ（Central Processing Unit）の識別子を含むハイパーバイザコールをハイパーバイザに対して発行するステップと、
前記ハイパーバイザが、前記識別子に対応する仮想ＣＰＵを実現するスレッドに割り当てられた物理ＣＰＵの実行時間を変更するステップと、を含み、
前記ゲストＯＳは、前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する、
ことを特徴とするスケジューリング方法。
【請求項７】
前記ゲストＯＳが、受け付けたリクエストを処理するアプリケーションと前記アプリケーションを実行する仮想ＣＰＵの識別子を関連付けて第１のキューに蓄積するステップと、
前記第１のキューを参照して、前記アプリケーションを実行する仮想ＣＰＵの識別子を特定し、特定した仮想ＣＰＵの識別子を含むハイパーバイザコールを発行するステップと、を含む、
請求項６に記載のスケジューリング方法。
【請求項８】
ゲストＯＳ（Operating System）が、受け付けたリクエストを記憶部に蓄積する処理と、
仮想ＣＰＵ（Central Processing Unit）の識別子を含むハイパーバイザコールをハイパーバイザに対して発行する処理と、
前記ハイパーバイザが、前記識別子に対応する仮想ＣＰＵを実現するスレッドに割り当てられた物理ＣＰＵの実行時間を変更する処理と、をコンピュータに実行させ、
前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを前記ゲストＯＳが発行する処理を前記コンピュータに実行させる、
ことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システム、スケジューリング方法、および、プログラムに関し、特に、物理計算機上に構築された仮想計算機を備える仮想計算機システム、仮想計算機システムにおけるスケジューリング方法、および、プログラムに関する。
【背景技術】
【０００２】
仮想計算機システムとは、１台の物理計算機上に複数の仮想計算機を構築したシステムをいう。仮想計算機システムでは、各仮想計算機上で「ゲストＯＳ（Operating System）」と呼ばれるＯＳが動作する。一方、物理計算機上で動作するＯＳを「バーチャルマシンモニタ（ＶＭＭ：Virtual Machine Monitor）」と呼ぶ。
【０００３】
ゲストＯＳは、通常のＯＳと同様に、ゲストＯＳ上で動作するアプリケーションを管理する。一方、ＶＭＭは、仮想計算機を自身のアプリケーションとして管理する。ゲストＯＳが管理下のアプリケーションに与えるリソースを「仮想ＣＰＵ（Central Processing Unit）」という。仮想ＣＰＵは、ソフトウェアプログラムによって作られた擬似的なＣＰＵであり、物理計算機上のスレッドとして動作する。一方、ＶＭＭが仮想計算機に与えるリソースを「物理ＣＰＵ」という。
【０００４】
仮想計算機システムにおいては、ＶＭＭによるスケジューリングとゲストＯＳによるスケジューリングとの時間的な「ズレ」によって、ゲストＯＳ上のアプリケーションが正常に動作しないという問題がある。アプリケーションを動作させるには、ゲストＯＳに仮想ＣＰＵが割り当てられ、かつ、ＶＭＭに物理ＣＰＵが割り当てられなければならない。仮想ＣＰＵを割り当てるゲストＯＳのスケジューラと、物理ＣＰＵを割り当てるＶＭＭのスケジューラは、相手方が当該アプリケーションに対していつＣＰＵを割り当てているかを関知しない。
【０００５】
したがって、ゲストＯＳが仮想ＣＰＵをアプリケーションに割り当てたとしても、ＶＭＭが仮想計算機に物理ＣＰＵを割り当てていない場合がある。この場合、アプリケーションを実行することができない。逆に、ＶＭＭが仮想計算機に物理ＣＰＵを割り当てても、ゲストＯＳがアプリケーションに仮想ＣＰＵを割り当てていない場合がある。この場合、割り当てられた物理ＣＰＵのＣＰＵ時間が無駄になる。
【０００６】
かかる問題を解決する技術が、一例として、特許文献１に記載されている。図１６は、特許文献１に記載された仮想計算機システムの構成を例示するブロック図である。
【０００７】
図１６を参照すると、仮想計算機システム１は物理計算機２を備えている。物理計算機２は、仮想計算機５、ＶＭＭ３、および、ハードウェア４を備えている。仮想計算機５は、ゲストＯＳ６を備えている。ＶＭＭ３は、ゲストＯＳインターフェイス部７、ゲストＯＳ依存関係作成モジュール８、ゲストＯＳ依存関係テーブル９、ディスパッチャ１０、ＣＰＵ割り当てテーブル１１、および、ゲストＯＳスケジューラ１２を備えている。ハードウェア４は、ＣＰＵ１３を備えている。さらに、ゲストＯＳスケジューラ１２は、ＣＰＵ割り当てテーブル管理部１４、判定部１５、サーバゲストＯＳスケジュール部１６、クライアントゲストＯＳ探索部１７、および、クライアントゲストＯＳスケジュール部１８を備えている。
【０００８】
図１６に示した仮想計算機システムは、次のように動作する。すなわち、ＶＭＭ３のゲストＯＳインターフェイス部７は、ゲストＯＳ６のうちのクライアントとして機能する任意のゲストＯＳが、サーバとして機能する他のゲストＯＳに処理を要求する際、処理の要求元のゲストＯＳがクライアントとなり、処理の要求先のゲストＯＳがサーバとなるサーバ／クライアント関係を、要求元のゲストＯＳからＶＭＭ３に通知するためのインターフェイスを含む。ＶＭＭ３のゲストＯＳスケジューラ１２は、このインターフェイスによって通知されたサーバ／クライアント関係に基づいて、ゲストＯＳ６に対してＣＰＵを割り当てる時間を調整する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１０−２１８１５１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明者によってなされたものである。
【００１１】
特許文献１に記載された仮想計算機システムによると、仮想計算機のどの仮想ＣＰＵ上でアプリケーションが動作しているかが考慮されておらず、アプリケーションが動作しないおそれがある。
【００１２】
その理由は、ゲストＯＳを対象として、割り当てる物理ＣＰＵ時間を調整しているためである。背景技術で述べた通り、仮想ＣＰＵと物理ＣＰＵを同時に割り当てることによってアプリケーションを実行することができる。ゲストＯＳが持つ仮想ＣＰＵは１つとは限らない。また、ＶＭＭが持つ物理ＣＰＵも１つとは限らない。つまり、ゲストＯＳがアプリケーションに割り当てた仮想ＣＰＵが存在し、かつ、割り当てられた仮想ＣＰＵをＶＭＭ上で具現するスレッドに対して物理ＣＰＵを割り当てなければ、アプリケーションは動作しない。
【００１３】
特許文献１に記載された仮想計算機システムでは、ゲストＯＳに対して物理ＣＰＵ使用率の割合が与えられており、どの仮想ＣＰＵ（スレッド）に対して物理ＣＰＵを割り当ててよいかを判断することができない。一例として、ある仮想計算機が４つの仮想ＣＰＵ１〜ＣＰＵ４を保持するものとする。また、仮想ＣＰＵ１〜ＣＰＵ４を具現化したＶＭＭ上のスレッドを、それぞれ、スレッド１〜スレッド４とする。ここで、仮想ＣＰＵ１がアプリケーションに対して割り当てられたとする。このとき、ＶＭＭが物理ＣＰＵを割り当てるべきスレッドは、スレッド１である。しかしながら、特許文献１に記載された仮想計算機システムでは、仮想ＣＰＵ１がアプリケーションに割り当てられたときに、ＶＭＭが物理ＣＰＵをスレッド１に割り当てる機能を備えていない。
【００１４】
また、特許文献１に記載された仮想計算機システムでは、リクエストの滞留量を考慮していないため、物理ＣＰＵ時間を余分に割り当てている可能性がある。
【００１５】
その理由は、クライアントとサーバ間でやり取りされるリクエストがなければ、割り当てられた物理ＣＰＵ時間は使用されないからである。特許文献１では、クライアントとなる仮想計算機とサーバとなる仮想計算機のそれぞれがＶＭＭに対してそれぞれの関係を登録する。すなわち、クライアントはサーバとなる仮想計算機を指定し、サーバはクライアントとなる仮想計算機を指定する。これにより、クライアントとサーバの関係をＶＭＭ内で構築し、それぞれの仮想計算機に必要な物理ＣＰＵ時間を調整している。しかし、実際にクライアントとサーバがリクエストをやり取りしているかどうかは考慮されていない。したがって、クライアントとサーバがリクエストを送受信していない場合であっても、物理ＣＰＵ時間が割り当てられるおそれがある。
【００１６】
そこで、仮想計算機システムにおいて、滞留数の多いリクエストや滞留期間の長いリクエストを迅速に処理することが課題となる。本発明の目的は、かかる課題解決に寄与する仮想計算機システム、スケジューリング方法、および、プログラムを提供することにある。
【課題を解決するための手段】
【００１７】
本発明の第１の態様に係る仮想計算機システムは、ゲストＯＳ（Operating System）とハイパーバイザを備え、前記ゲストＯＳは、受け付けたリクエストを蓄積する記憶部と、仮想ＣＰＵ（Central Processing Unit）の識別子を含むハイパーバイザコールを前記ハイパーバイザに対して発行する要求部とを有し、前記ハイパーバイザは、前記識別子に対応する仮想ＣＰＵを実現するスレッドに割り当てられた物理ＣＰＵの実行時間を変更する変更部を有し、前記要求部は、前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する。
【００１８】
本発明の第２の態様に係るスケジューリング方法は、ゲストＯＳ（Operating System）が、受け付けたリクエストを記憶部に蓄積するステップと、仮想ＣＰＵ（Central Processing Unit）の識別子を含むハイパーバイザコールをハイパーバイザに対して発行するステップと、前記ハイパーバイザが、前記識別子に対応する仮想ＣＰＵを実現するスレッドに割り当てられた物理ＣＰＵの実行時間を変更するステップと、を含み、前記ゲストＯＳは、前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する。
【００１９】
本発明の第３の態様に係るプログラムは、ゲストＯＳ（Operating System）が、受け付けたリクエストを記憶部に蓄積する処理と、仮想ＣＰＵ（Central Processing Unit）の識別子を含むハイパーバイザコールをハイパーバイザに対して発行する処理と、前記ハイパーバイザが、前記識別子に対応する仮想ＣＰＵを実現するスレッドに割り当てられた物理ＣＰＵの実行時間を変更する処理と、をコンピュータに実行させ、前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを前記ゲストＯＳが発行する処理を前記コンピュータに実行させる。なお、プログラムは、非一時的なコンピュータ可読記録媒体（non-transitory computer-readable storage medium）に記録されたプログラム製品として提供することもできる。
【発明の効果】
【００２０】
本発明に係る仮想計算機システム、スケジューリング方法、および、プログラムによると、仮想計算機システムにおいて、滞留数の多いリクエストや滞留期間の長いリクエストを迅速に処理することが可能となる。
【図面の簡単な説明】
【００２１】
【図１】一実施形態に係る仮想計算機システムの構成を例示するブロック図である。
【図２】第１の実施形態に係る仮想計算機システムの構成を例示するブロック図である。
【図３】第１の実施形態における滞留リクエスト記憶部の構成を例示する図である。
【図４】第１の実施形態におけるＳＩＰ（Session Initiation Protocol）リクエストのデータ構造を説明する図である。
【図５】第１の実施形態におけるスケジューリングキューの構成を説明する図である。
【図６】第１の実施形態に係る仮想計算機システムの動作を例示するフロー図である。
【図７】第２の実施形態に係る仮想計算機システムの構成を例示するブロック図である。
【図８】第２の実施形態に係る仮想計算機システムの動作を例示するフロー図である。
【図９】第３の実施形態に係る仮想計算機システムの構成を例示するブロック図である。
【図１０】第４の実施形態に係る仮想計算機システムの構成を例示するブロック図である。
【図１１】第４の実施形態における優先度表のデータ構造を例示する図である。
【図１２】第４の実施形態における優先度作成例を例示する図である。
【図１３】第４の実施形態における優先度追加後の滞留リクエスト記憶部のデータ構造を例示する図である。
【図１４】第４の実施形態に係る仮想計算機システムの動作を例示するフロー図である。
【図１５】第５の実施形態に係る仮想計算機システムの構成を例示するブロック図である。
【図１６】特許文献１に記載された仮想計算機システムの構成を例示するブロック図である。
【発明を実施するための形態】
【００２２】
はじめに、一実施形態の仮想計算機システムの概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００２３】
図１は、一実施形態に係る仮想計算機システムの構成を例示するブロック図である。図１を参照すると、仮想計算機システムは、ゲストＯＳ（Operating System）２０とハイパーバイザ３０を備え、ゲストＯＳ２０は、仮想ＣＰＵ（Central Processing Unit）の識別子を含むハイパーバイザコールをハイパーバイザ３０に対して発行する要求部２２を有し、ハイパーバイザ３０は、識別子に対応する仮想ＣＰＵを実現するスレッドに割り当てられた物理ＣＰＵの実行時間を変更する変更部３２を有する。
【００２４】
かかる仮想計算機システムによると、アプリケーションを実行する仮想ＣＰＵを実現するスレッドに対して、物理ＣＰＵの実行時間を適切に割り当てることが可能となる。なぜなら、ゲストＯＳ２０は、ゲストＯＳ２０が稼働する仮想マシンに到着したリクエストを処理するアプリケーションが実行される仮想ＣＰＵを指定してハイパーバイザコールを発行し、ハイパーバイザは指定された仮想ＣＰＵを実現するスレッドに対する物理ＣＰＵの実行時間を変更することができるからである。
【００２５】
また、図２を参照すると、ゲストＯＳ１００は、受け付けたリクエストを処理するアプリケーションとアプリケーションを実行する仮想ＣＰＵの識別子を関連付けて保持する第１のキュー（スケジューリングキュー１７０）を備え、要求部１２０は、第１のキュー（１７０）を参照して、アプリケーションを実行する仮想ＣＰＵの識別子を特定し、特定した仮想ＣＰＵの識別子を含むハイパーバイザコールを発行するようにしてもよい。
【００２６】
さらに、ゲストＯＳ１００は、受け付けたリクエストを蓄積する記憶部（滞留リクエスト記憶部１５０）を備え、要求部１２０は、記憶部（１５０）に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、記憶部（１５０）に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行するようにしてもよい。
【００２７】
かかる仮想計算機システムによると、滞留しているリクエストの数、または、リクエストの滞留期間に応じて、当該リクエストを処理するアプリケーションを実行する仮想ＣＰＵに相当するスレッドに対して、優先的に物理ＣＰＵの実行時間を割り当てることが可能となる。したがって、滞留しているリクエストや、滞留期間が長期化しているリクエストを、迅速に処理することができる。
【００２８】
また、図７を参照すると、ハイパーバイザ２００は、優先度ごとに分類されたスレッドと、スレッドを優先度に応じて実行する物理ＣＰＵを関連付けて保持する第２のキュー（スケジューリングキュー２４０）を備え、変更部（実行時間変更部２２０）は、識別子に対応する仮想ＣＰＵを実現するスレッドが物理ＣＰＵ上で実行中である場合、当該スレッドの実行時間を延長し、それ以外の場合、当該スレッドの第２のキュー（２４０）における優先度、および／または、当該スレッドの第２のキュー（２４０）における順序を変更してもよい。
【００２９】
かかる仮想計算機システムによると、特定のアプリケーションを実行する仮想ＣＰＵに対して、当該アプリケーションが物理ＣＰＵ上で実行中であれば、実行時間を延長し、実行中でなければ、現在実行中のアプリケーションの終了後、直ちに物理ＣＰＵ上で実行が開始されるようにすることができる。
【００３０】
図１０を参照すると、ゲストＯＳ１００は、受け付けたリクエストの優先度を計算する優先度計算部１８０を備え、要求部１２０は、記憶部（滞留リクエスト記憶部１５０）に蓄積された未処理のリクエストの優先度が所定の優先度を超えた場合、未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行するようにしてもよい。
【００３１】
かかる仮想計算機システムによると、優先度が高いリクエストを処理するアプリケーションを実行する仮想ＣＰＵを実現するスレッドに対して、優先的に物理ＣＰＵの実行時間を割り当てることが可能となる。
【００３２】
図９を参照すると、ハイパーバイザ２００は、要求部（要求部１２０）によって発行されるハイパーバイザコールの頻度が所定の頻度を超えた場合、警告を出力する警告部（限界負荷警告部２７０）を備えていてもよい。
【００３３】
かかる仮想計算機システムによると、単位時間当たりのハイパーバイザコールの回数が閾値を超えた場合、ユーザに対してアラームを発行することで、ゲストＯＳが稼働する仮想マシンに対して、処理能力を超えたリクエストが到着していることをユーザに通知することができる。
【００３４】
＜実施形態１＞
次に、第１の実施形態に係る仮想計算機システムについて、図面を参照して詳細に説明する。図２は、本実施形態の仮想計算機システムの構成を例示するブロック図である。
【００３５】
図２を参照すると、本実施形態の仮想計算機システムは、仮想マシン３００とハイパーバイザ（Hypervisor）２００を備えている。仮想マシン３００は、ゲストＯＳ（Operating System）１００を備えている。ゲストＯＳ１００は、ＵＤＰ（User Datagram Protocol）パケット送受信部１１０、ＳＩＰ（Session Initiation Protocol）処理増幅判定部１４０、スレッド起動部１６０、滞留量取得部１３０、滞留リクエスト記憶部１５０、要求部１２０、および、スケジューリングキュー１７０を備えている。また、ハイパーバイザ２００は受付部２１０、実行時間変更部２２０、スケジューラ２３０、および、スケジューリングキュー２４０を備えている。
【００３６】
ＵＤＰパケット送受信部１１０は、ゲストＯＳ１００内でＵＤＰパケットを送受信する。到着したＵＤＰパケットがＳＩＰリクエストである場合、ＵＤＰパケット送受信部１１０は、当該ＳＩＰリクエストから滞留リクエスト識別子１５１を作成し、滞留リクエスト記憶部１５０に格納する。ＵＤＰパケット送受信部１１０は、滞留リクエスト識別子１５１の格納後、ＳＩＰ処理増幅判定部１４０を実行する。また、ＵＤＰパケット送受信部１１０は、ＳＩＰリクエストをＵＤＰパケットでカプセル化して他の物理計算機に送信する際、当該ＳＩＰリクエストは処理済みであるため、滞留リクエスト記憶部１５０から滞留リクエスト識別子１５１が一致するエントリを削除する。
【００３７】
ＳＩＰ処理増幅判定部１４０は、滞留量取得部１３０が計算したリクエスト滞留量を取得して、ハイパーバイザ２００に対してスケジューリングポリシーの変更要求を発行するかどうかを判断する。ＳＩＰ処理増幅判定部１４０は、滞留リクエストの数が所定の数を超えた場合、スケジューリングポリシーの変更要求を発行する。ここで、所定の数は、予めユーザによって設定されているものとする。また、ＳＩＰ処理増幅判定部１４０は、ある滞留リクエストの滞留期間がある所定の期間を超えた場合、スケジューリングポリシーの変更要求を発行する。所定の期間は、予めユーザによって設定されているものとする。
【００３８】
ただし、所定の期間として、ＳＩＰのデフォルトタイムアウト時間であるＴ１を用いる場合、ユーザによる設定は必要とされない。ここで、Ｔ１とは、ＳＩＰリクエストの再送が開始される時間であり、デフォルト値は５００ｍｓである。Ｔ１の値は変更可能であり、ＳＩＰサーバ（仮想マシン３００上のアプリケーション）の設定ファイルに現在のＴ１の値が格納されている。ＳＩＰ処理増幅判定部１４０は、処理を開始する前に、ＳＩＰサーバの設定ファイルから、現在のＴ１の値を予め確認しておく。
【００３９】
スレッド起動部１６０は、スレッドを起動する。アプリケーションは、複数のスレッドを含む。具体的には、スレッド起動部１６０は、ＵＤＰパケットが届くと、当該ＵＤＰパケットを処理するスレッドを起動する。
【００４０】
滞留量取得部１３０は、滞留リクエスト記憶部１５０に格納された滞留リクエスト数をカウントして、ＳＩＰ処理増幅判定部１４０に通知する。また、滞留量取得部１３０は、滞留リクエスト記憶部１５０に格納されている滞留リクエストがゲストＯＳ１００内で滞留している期間を更新する。滞留量取得部１３０は、タイマー等によって定期的に起動し、滞留リクエスト記憶部１５０に格納された滞留リクエストの滞留期間１５２をインクリメントする。
【００４１】
滞留リクエスト記憶部１５０は、現在仮想マシン３００上に滞留しているリクエストに関する情報を記憶する。図３は、滞留リクエスト記憶部１５０が保持するテーブルの内容を例示する。滞留リクエスト記憶部１５０は、滞留リクエスト識別子１５１と滞留期間１５２とを関連付けて保持する。ＵＤＰパケット送受信部１１０は、ＳＩＰリクエストを含むＵＤＰパケットが到着すると、滞留リクエスト識別子１５１を生成する。
【００４２】
図４は、ＳＩＰリクエストのデータ構造を例示する。ＵＤＰパケット送受信部１１０は、図４に示した「Call-ID」と「CSeq」を用いて滞留リクエスト識別子１５１を生成する。ＵＤＰパケット送受信部１１０は、一例として、Call-IDとCSeqをアンダーバーで接続したものを滞留リクエスト識別子１５１とする（図３）。ただし、Call-IDとCSeqを使用して一意に識別子を表現できればよい。したがって、滞留リクエスト識別子１５１は図３に示した態様に限定されない。また、ＵＤＰパケット送受信部１１０は、処理済みのＳＩＰリクエストをリクエスト要求元に送信する際、滞留リクエスト識別子１５１が一致するエントリを滞留リクエスト記憶部１５０から削除する。
【００４３】
要求部１２０は、仮想ＣＰＵを具現するスレッドに与えられた実行時間の延長をハイパーバイザ２００に対して要求する。要求部１２０は、スケジューリングポリシー変更要求を出す際、仮想ＣＰＵ番号と対になるスレッド番号を知らない。そこで、要求部１２０は、仮想ＣＰＵ番号を引数としてハイパーバイザコールを発行する。ハイパーバイザ２００は、仮想ＣＰＵ番号とスレッド番号の対となるテーブルを保持している。ハイパーバイザコールとは、一般のＯＳが持つシステムコール（System call）と同様に、仮想マシン３００が自発的にハイパーバイザ２００に対して「何らかの処理」を要求するために使われるハードウェアに備わった機能である。本実施形態では、仮想マシン３００は、「何らかの処理」の例として、スケジューリングポリシーの変更をハイパーバイザ２００に対して要求する。
【００４４】
スケジューリングキュー１７０は、仮想マシン３００上で実行されるアプリケーションのＣＰＵ割り当てを管理するデータ構造である。図５は、スケジューリングキュー１７０のデータ構造を例示する。計算機に含まれる各ＣＰＵにはそれぞれスケジューリングキュー１７０が作成される。
【００４５】
なお、仮想マシン３００のスケジューリングキュー１７０のデータ構造と、ハイパーバイザ２００のスケジューリング２４０のデータ構造は、同一である。ただし、図５をゲストＯＳ１００上のスケジューリングキュー１７０とみなした場合、図５のＣＰＵは仮想ＣＰＵを表す。一方、図５をハイパーバイザ２００上のスケジューリングキュー２４０とみなした場合、図５のＣＰＵは物理ＣＰＵを表す。
【００４６】
スケジューリングキュー１７０には、実行を待つアプリケーション（図５の「Process」）が登録されている。スケジューラ２３０は、次に実行すべきアプリケーションをスケジューリングキュー１７０から選択する。図５に例示したスケジューリングキュー１７０では、優先度１５３毎にキューが分割されている。優先度１５３の数が小さいものを高優先度とすると、スケジューラ２３０は最初にProcess Aを選択する。本実施形態では、要求部１２０は、到着したＳＩＰリクエストを処理するＳＩＰアプリケーションがどの仮想ＣＰＵで実行される予定であるのかを確認するために、スケジューリングキュー１７０を用いる。図５では、ＳＩＰアプリケーション（図５の「SIP Process」）はＣＰＵ＃１に登録されている。このとき、ＳＩＰ処理増幅判定部１４０は、変更要求を発行するものと決定した場合、ＣＰＵ＃１を引数として要求部１２０を実行する。
【００４７】
受付部２１０は、要求部１２０が送出したスケジューリングポリシー変更要求を受け付ける。受付部２１０は、送られてきた仮想ＣＰＵ番号をスレッド番号に変換し、当該スレッド番号を持つスレッドに与えられたＣＰＵ時間を延長するために、実行時間変更部２２０を実行する。
【００４８】
実行時間変更部２２０は、スレッドに与えられているＣＰＵ時間を延長する。ゲストＯＳ１００またはハイパーバイザ２００に設けられたスケジューラ２３０は、スケジューリングキュー１７０から選択したスレッドを、ＣＰＵ上で実行する。スケジューラ２３０は、スレッドの実行開始時にスレッドに対して実行時間を与える。与えられた実行時間が経過するまでは、当該スレッドがＣＰＵを使って自身の処理を進めていく。スケジューラ２３０によって与えられた実行時間が経過すると、スケジューラ２３０は、次のスレッドをスケジューリングキュー１７０から選択してＣＰＵ時間を与える。与えられた実行時間を消費したスレッドは、スケジューラ２３０によってスケジューリングキュー１７０に格納される。スケジューラ２３０は、実行時間を管理する。実行時間変更部２２０は、仮想ＣＰＵを実現するハイパーバイザ２００上のスレッドが実行中である場合、実行時間を延長する。
【００４９】
スケジューラ２３０は、スケジューリングキュー２４０に登録されているスレッドをＣＰＵ上で適宜実行していく。スレッドを実行する際、上述のようにスレッドに対して実行時間が割り与えられる。当該スレッドは、与えられた実行時間の間だけ処理を進めることができる。スケジューラ２３０は、現在実行中スレッドの実行時間を管理する。また、実行時間変更部２２０は、スケジューラ２３０が管理する実行時間を変更する。
【００５０】
本実施形態の仮想計算機システムは、上記構成に基づいて、ＳＩＰリクエストが送られてきた際、すでに滞留しているリクエスト量を確認し、滞留しているリクエストがある閾値を超過している場合、ＳＩＰリクエストを処理している仮想ＣＰＵに割り当てられる物理ＣＰＵ時間を延長する。これにより、リクエスト処理のための物理ＣＰＵ時間が十分に得られる。
【００５１】
次に、図６のフロー図を参照して本実施形態の仮想計算機システム（図２）の動作について詳細に説明する。
【００５２】
まず、ＵＤＰパケット送受信部１１０は、ＵＤＰパケットを受信する（ステップＳ１）。次に、ＵＤＰパケット送受信部１１０は、ＵＤＰパケットからＳＩＰヘッダを取り出す（ステップＳ２）。ＵＤＰパケット送受信部１１０は、ＳＩＰヘッダを取り出す際に、滞留リクエスト識別子１５１を作成する。
【００５３】
次に、ＳＩＰ処理増幅判定部１４０は、滞留リクエスト記憶部１５０を参照して、現在のリクエスト滞留量を確認する（ステップＳ３）。ＳＩＰ処理増幅判定部１４０は、滞留量取得部１３０を介して、滞留リクエスト記憶部１５０のエントリ数をカウントすることによってリクエスト滞留量を求める。
【００５４】
リクエスト滞留量が閾値を超過しているとＳＩＰ処理増幅判定部１４０が判定した場合（ステップＳ４のＹｅｓ）、要求部１２０はＳＩＰサーバが実行される仮想ＣＰＵ番号を取得し（ステップＳ５）、当該仮想ＣＰＵ番号を引数としてハイパーバイザコールを発行する（ステップＳ６）。
【００５５】
受付部２１０は、ハイパーバイザコールを受け取り、ハイパーバイザコールに含まれる仮想ＣＰＵに該当するスレッドの実行時間を延長する（ステップＳ７）。
【００５６】
次に、ＳＩＰ処理増幅判定部１４０は、滞留リクエスト記憶部１５０に到着したＳＩＰリクエストを登録する。具体的には、ＳＩＰ処理増幅判定部１４０は、最初に作成した滞留リクエスト識別子１５１と滞留期間１５２を組にしたエントリを作成して、滞留リクエスト記憶部１５０に追加する（ステップＳ８）。エントリの追加時点では、滞留期間１５２をゼロにセットしておく。滞留量取得部１３０は、定期的に滞留期間１５２をインクリメントする。
【００５７】
一方、リクエスト滞留量が閾値以下である場合（ステップＳ４のＮｏ）、ステップＳ８のみを実行して処理を終了する。
【００５８】
本実施形態の仮想計算機システムでは、ＳＩＰパケットが到着した際、仮想マシン内に滞留しているリクエスト量を確認した上で、追加の物理ＣＰＵ時間をハイパーバイザ（Hypervisor）に要求することができる。
【００５９】
特に、本実施形態によると、物理ＣＰＵを必要とする仮想ＣＰＵを特定して物理ＣＰＵを割り当てることができる。その理由は、仮想マシン上のスケジューリングキューを確認し、到着したリクエストがどの仮想ＣＰＵで実行されるかをハイパーバイザに伝えるからである。
【００６０】
また、本実施形態によると、サーバ（背景技術におけるアプリケーションに相当）内に滞留しているリクエストに対してリクエスト処理のための物理ＣＰＵを十分に割り当てることができる。その理由は、サーバに到着したリクエスト数とサーバ上での処理を終えてクライアントに返信されるリクエスト数を監視して、その差分を滞留リクエストとして記憶し、滞留しているリクエストがある閾値を超過している場合、ＳＩＰリクエストを処理している仮想ＣＰＵに割り当てられる物理ＣＰＵ時間を延長するからである。
【００６１】
＜実施形態２＞
次に、第２の実施形態に係る仮想計算機システムついて図面を参照して詳細に説明する。
【００６２】
図７は、本実施形態に係る仮想計算機システムの構成を例示するブロック図である。図７を参照すると、本実施形態の仮想計算機システムは、第１の実施形態の仮想計算機システム（図２）のハイパーバイザ２００上に、さらに、実行優先度変更部２５０と実行キュー並べ替え部２６０を備えている。
【００６３】
これらの各部は、次のように動作する。
【００６４】
実行優先度変更部２５０は、スケジューリングキュー２４０に登録されているスレッドの優先度１５３を変更する。図５を参照して説明すると、スケジューリングキュー２４０は、優先度１５３毎に配列を分割して保持しており、配列にはＣＰＵ時間を要求するアプリケーション（図５においてProcessと記載）が登録されている。
【００６５】
ここで、「実行優先度を変更する」とは、ある優先度１５３の配列から別の優先度１５３の配列にアプリケーションを移動させることをいう。図５では、SIP Processは優先度２の配列に登録されている。SIP Processの実行優先度を変更すると、例えば、SIP Processは優先度０の配列に登録される。実行優先度変更部２５０は、該当アプリケーションの優先度１５３を、例えば、最高の優先度１５３（図５の場合、優先度０）に変更する。ただし、実行優先度変更部２５０は、変更先の優先度の指定をユーザから受け付けるようにしてもよい。
【００６６】
実行キュー並べ替え部２６０は、スケジューリングキュー２４０に登録されているスレッドの配列において、スレッドの順序を入れ替える。図５を参照すると、スケジューリングキュー２４０は、優先度１５３毎にスレッドの配列を分割して保持する。配列には、ＣＰＵ時間を要求するアプリケーション（図５の「Process」）が登録されている。
【００６７】
「実行キューを並べ替える」とは、優先度１５３毎に分割された配列に含まれるスレッドの順序を並べ替えることをいう。図５では、SIP ProcessがProcess Dの後ろに配置されている。このとき、スケジューラ２３０は、優先度２のアプリケーションを実行する際、最初にアプリケーションとしてProcess Dを選択する。実行キュー並べ替え部２６０は、対象アプリケーションを配列の一番先頭に配置する。図５に例示したスケジューリングキュー２４０の場合、実行キュー並べ替え部２６０は、SIP ProcessとProcess Dの順序を入れ替える。
【００６８】
次に、図８のフロー図を参照して、本実施形態の仮想計算機システム（図７）の動作について詳細に説明する。
【００６９】
図８のフロー図に示す動作は、受付部２１０が仮想マシン３００から要求を受け取った後に開始される。第１の実施形態では、要求を受け取った後、実行時間変更部２２０が、送られてきた仮想ＣＰＵに相当するスレッドの実行時間を変更した。一方、本実施形態では、該当スレッドが実行待ち状態であり、スケジューリングキュー２４０に登録されている状態であっても、現在実行中のアプリケーションの終了後に直ちにＳＩＰサーバに実行時間を割り当てることが可能となる。
【００７０】
まず、要求部１２０は、ハイパーバイザコール（Hypervisor call）を発行する（ステップＳ６）。
【００７１】
次に、受付部２１０は、ハイパーバイザコールにおいて通知された仮想ＣＰＵに該当するスレッドが実行中かどうかを確認する（ステップＳ９）。当該スレッドが実行中である場合（ステップＳ１０のＹｅｓ）、実行時間変更部２２０は送られてきた仮想ＣＰＵに該当するスレッドの実行時間を延長する（ステップＳ７）。
【００７２】
一方、当該スレッドが実行中でない場合（ステップＳ１０のＮｏ）、実行優先度変更部２５０は、当該スレッドの優先度１５３を上げる（ステップＳ１１）。次に、実行キュー並べ替え部２６０は、当該スレッドが格納されているランキューの順序を変更する（ステップＳ１２）。
【００７３】
図５を参照して、ステップＳ１１およびＳ１２について説明する。該当アプリケーションがSIP Processである場合、実行優先度変更部２５０がSIP Processの登録先の配列を優先度ゼロの配列に変更した後、実行キュー並べ替え部２６０が優先度０の配列においてProcess Aの前にSIP Processを移動する。
【００７４】
次に、本実施形態の効果について説明する。本実施形態では、対象となるＳＩＰサーバにＣＰＵ時間が与えられておらず、スケジューリングキュー２４０に登録されている場合でも、実行優先度変更部２５０と実行キュー並べ替え部２６０を組み合わせて使用することにより、現在実行中のアプリケーションの終了後に直ちにＳＩＰサーバに対して実行時間を割り当てることができる。
【００７５】
＜実施形態３＞
次に、第３の実施形態に係る仮想計算機システムについて、図面を参照して詳細に説明する。
【００７６】
図９は、本実施形態に係る仮想計算機システムの構成を例示するブロック図である。図９を参照すると、本実施形態は、第１の実施形態の仮想計算機システム（図２）のハイパーバイザ２００上に、さらに、限界負荷警告部２７０と実行履歴記憶部２８０を備えている。
【００７７】
これらの各部は、次のように動作する。
【００７８】
実行履歴記憶部２８０は、仮想マシン３００から送られてきたスケジューリングポリシー変更要求が単位時間当たり何回送られてきているかを記憶する。
【００７９】
限界負荷警告部２７０は、実行履歴記憶部２８０を確認し、単位時間当たりのスケジューリングポリシー変更要求が閾値を超えた場合、ユーザに対してアラームを発行する。アラームは、音声やＧＵＩ（Graphical User Interface）上の表示であってもよい。ただし、限界負荷警告部２７０が発行するアラームの態様は、これらに限定されない。
【００８０】
次に、本実施形態の効果について説明する。本実施形態では、限界負荷警告部２７０が実行履歴記憶部２８０を確認し、単位時間当たりのスケジューリングポリシー変更要求が閾値を超えた場合、ユーザに対してアラームを発行する。したがって、仮想マシン３００上に処理しきれない量のリクエストが滞留していることをユーザに通知することができる。
【００８１】
＜実施形態４＞
次に、第４の実施形態に係る仮想計算機システムについて、図面を参照して詳細に説明する。
【００８２】
図１０は、本実施形態に係る仮想計算機システムの構成を例示するブロック図である。図１０を参照すると、本実施形態の仮想計算機システムは、第１の実施形態の仮想計算機システム（図２）の仮想マシン３００上に、さらに、優先度計算部１８０と優先度表１９０を備えている。
【００８３】
これらの各部は、次のように動作する。
【００８４】
優先度計算部１８０は、送られてきたＳＩＰ（Session Initiation Protocol）リクエストに記載されている要求元（Fromエントリ）と要求先（Toエントリ）の情報を、優先度表１９０を用いて優先度１９２に変換する。優先度計算部１８０は、変換した優先度１９２を滞留リクエスト記憶部１５０の追加エントリとして記録する。
【００８５】
優先度表１９０は、要求元（Fromエントリ）と要求先（Toエントリ）の情報と優先度１９２の関係をまとめた表である。図１１は、優先度表１９０の内容を例示する。図１１を参照すると、優先度表１９０は、電話番号１９１と優先度１９２を関連付けて保持する。電話番号１９１とは、ＳＩＰにおけるFromエントリまたはToエントリを指している。例えば、Fromエントリに「１１０」が入っている場合、優先度１９２は１となる。一方、通常の番号（ユーザＩＤ等）の場合、優先度１９２は６０となる。
【００８６】
図１２を参照して、ＳＩＰから優先度１９２を作成する手順を説明する。優先度計算部１８０は、図１２の左欄のＳＩＰプロトコルを参照して、FromエントリとToエントリを確認する。図１２の左欄において、Fromエントリは「0901234567」であり、一方、Toエントリは「110」である。FromエントリおよびToエントリに記載された電話番号が優先度表１９０（図１１）の電話番号１９１に相当する。図１２の右欄は、優先度計算部１８０による優先度１９２の作成例を示す。
【００８７】
まず、優先度計算部１８０は、FromエントリとToエントリのそれぞれを、優先度表１９０を用いて優先度１９２に変換する。Fromエントリ「0901234567」は、左から３ケタが「090」である。「090,080,070」から始まる電話番号１９１は、我が国では携帯電話番号である。したがって、Fromエントリの電話番号の優先度は、優先度表１９０より50となる。一方、Toエントリの電話番号「110」の優先度は、優先度表１９０より１となる。優先度計算部１８０は、これらの優先度「５０」と「１」を足し合わせた優先度「５１」を滞留リクエスト記憶部１５０に送る。
【００８８】
ここでは、一例として、足し算による優先度の作成方法を示した。ただし、優先度計算部１８０は、FromエントリおよびToエントリと、優先度表１９０を用いた他の方法を用いてもよい。例えば、優先度計算部１８０は、Fromエントリの優先度とToエントリの優先度を掛け合わせて、当該ＳＩＰセッションの優先度を生成してもよい。また、優先度計算部１８０は、FromエントリとToエントリの優先度のうちの優先度の高い方を、当該ＳＩＰセッションの優先度としてもよい。
【００８９】
図１３は、滞留リクエスト記憶部１５０が保持するテーブルに対して優先度１９２を追加したときの様子を示す。
【００９０】
次に、図１４のフロー図を参照して、本実施形態の仮想計算機システム（図１０）の動作について詳細に説明する。
【００９１】
まず、ＵＤＰ（User Datagram Protocol）パケット送受信部１１０は、ＵＤＰパケットを受信する（ステップＳ１）。次に、ＵＤＰパケット送受信部１１０は、ＵＤＰパケットからＳＩＰヘッダを取り出す（ステップＳ２）。また、ＵＤＰパケット送受信部１１０は、ＳＩＰヘッダを取り出す際、滞留リクエスト識別子１５１を作成する。
【００９２】
次に、優先度計算部１８０は、当該リクエストの優先度１９２を計算する（ステップＳ１３）。優先度計算部１８０による優先度１９２の計算手法は、優先度表１９０を参照して上述した通りである。
【００９３】
次に、要求部１２０は、到着済みリクエストの優先度１９２を確認する（ステップＳ１４）。高優先度のリクエストが存在する場合（ステップＳ１５のＹｅｓ）、要求部１２０はＳＩＰサーバが実行される仮想ＣＰＵ番号を取得し（ステップＳ５）、当該仮想ＣＰＵ番号を引数としてハイパーバイザコール（Hypervisor call）を発行する（ステップＳ６）。
【００９４】
受付部２１０は、ハイパーバイザコールを受け取り、送られてきた仮想ＣＰＵに該当するスレッドの実行時間を、実行時間変更部２２０を用いて延長する（ステップＳ７）。
【００９５】
次に、ＳＩＰ処理増幅判定部１４０は、滞留リクエスト記憶部１５０に到着したＳＩＰリクエストを登録する。具体的には、ＳＩＰ処理増幅判定部１４０は、最初に作成した滞留リクエスト識別子１５１と滞留期間１５２を組にしたエントリを作成して、滞留リクエスト記憶部１５０に追加する（ステップＳ８）。この時点では、滞留期間１５２をゼロにセットしておく。滞留量取得部１３０は、定期的に滞留期間１５２をインクリメントする。
【００９６】
一方、高優先度のリクエストが存在しない場合（ステップＳ１５のＮｏ）、ステップＳ８のみを実行して処理を終了する。
【００９７】
本実施形態の仮想計算機システムでは、高優先のＳＩＰリクエストが存在する場合に、スレッドの実行時間を延長する。これにより、リクエストの滞留数や滞留期間にかかわらず、ＳＩＰサーバに対してＣＰＵ時間を割り当てることができる。
【００９８】
＜実施形態５＞
次に、第５の実施形態に係る仮想計算機システムについて、図面を参照して説明する。本実施形態は、第１の実施形態の仮想計算機システムの具体的な実装例に相当する。
【００９９】
図１５は、本実施形態の仮想計算機システムの構成を例示するブロック図である。図１５を参照すると、本実施形態では、仮想マシン３００上で実行されるゲストＯＳ１００としてLinux（登録商標）４００を用い、ハイパーバイザ２００としてＫＶＭ５００を用いる。また、ＵＤＰパケット送受信部１１０の受信処理において、Linuxカーネル内のsock_def_readable関数４１０を用いる。さらに、スレッド起動部１６０として、try_to_wake_up関数４６０を用いる。また、要求部１２０が発行するハイパーバイザコールとしてPVOP_VCALL3関数４２０を用いる。さらに、スケジューリングキュー１７０としてrun_queue４７０を用いる。
【０１００】
また、ＫＶＭ５００内のスケジューラ２３０として、schedule関数５３０を用いる。また、スケジューリングキュー２４０として、run_queue５４０を用いる。
【０１０１】
通常、sock_def_readable４１０は、Linux４００がＵＤＰパケット処理を終えてから当該パケット内のデータがユーザプログラムに渡される前に実行される関数である。Sock_def_readable４１０は、自身の処理を実行した後にtry_to_wake_up関数４６０を実行してＵＤＰパケットを処理するアプリケーションを起動する。本実施形態では、sock_def_readable関数４１０がtry_to_wake_up関数４６０を実行する前にＳＩＰ処理増幅判定部を実行し、与えられているＣＰＵ時間を延長する場合、PVOP_VCALL3関数４２０を用いてハイパーバイザコールを発行するように動作する。これにより、Linux４００とＫＶＭ５００を基盤として、第１の実施形態に係る仮想計算機システムを実現することができる。
【０１０２】
本発明に係る仮想計算機システム、スケジューリング方法、および、プログラムは、一例として、電話サービスを仮想マシンで提供するＮＦＶ（Network Functions Virtualization）の分野において、電話サービスの品質安定化といった用途に適用することができる。
【０１０３】
なお、本発明において、下記の形態が可能である。
［形態１］
上記第１の態様に係る仮想計算機システムのとおりである。
［形態２］
前記ゲストＯＳは、受け付けたリクエストを処理するアプリケーションと前記アプリケーションを実行する仮想ＣＰＵの識別子を関連付けて保持する第１のキューを備え、
前記要求部は、前記第１のキューを参照して、前記アプリケーションを実行する仮想ＣＰＵの識別子を特定し、特定した仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する、
形態１に記載の仮想計算機システム。
［形態３］
前記ゲストＯＳは、受け付けたリクエストを蓄積する記憶部を備え、
前記要求部は、前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する、
形態１または２に記載の仮想計算機システム。
［形態４］
前記ハイパーバイザは、優先度ごとに分類されたスレッドと前記スレッドを優先度に応じて実行する物理ＣＰＵを関連付けて保持する第２のキューを備え、
前記変更部は、前記識別子に対応する仮想ＣＰＵを実現するスレッドが物理ＣＰＵ上で実行中である場合、当該スレッドの実行時間を延長し、それ以外の場合、当該スレッドの前記第２のキューにおける優先度、および／または、当該スレッドの前記第２のキューにおける順序を変更する、
形態１ないし３のいずれか一に記載の仮想計算機システム。
［形態５］
前記ゲストＯＳは、受け付けたリクエストの優先度を計算する優先度計算部を備え、
前記要求部は、前記記憶部に蓄積された未処理のリクエストの優先度が所定の優先度を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する、
形態１ないし４のいずれか一に記載の仮想計算機システム。
［形態６］
前記ハイパーバイザは、前記要求部によって発行されるハイパーバイザコールの頻度が所定の頻度を超えた場合、警告を出力する警告部を備える、
形態１ないし５のいずれか一に記載の仮想計算機システム。
［形態７］
上記第２の態様に係るスケジューリング方法のとおりである。
［形態８］
前記ゲストＯＳが、受け付けたリクエストを処理するアプリケーションと前記アプリケーションを実行する仮想ＣＰＵの識別子を関連付けて第１のキューに蓄積するステップと、
前記第１のキューを参照して、前記アプリケーションを実行する仮想ＣＰＵの識別子を特定し、特定した仮想ＣＰＵの識別子を含むハイパーバイザコールを発行するステップと、を含む、
形態７に記載のスケジューリング方法。
［形態９］
前記ゲストＯＳが、受け付けたリクエストを記憶部に蓄積するステップと、
前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行するステップと、を含む、
形態７または８に記載のスケジューリング方法。
［形態１０］
前記ハイパーバイザが、優先度ごとに分類されたスレッドと前記スレッドを優先度に応じて実行する物理ＣＰＵを関連付けて第２のキューに蓄積するステップと、
前記識別子に対応する仮想ＣＰＵを実現するスレッドが物理ＣＰＵ上で実行中である場合、当該スレッドの実行時間を延長し、それ以外の場合、当該スレッドの前記第２のキューにおける優先度、および／または、当該スレッドの前記第２のキューにおける順序を変更するステップと、を含む、
形態７ないし９のいずれか一に記載のスケジューリング方法。
［形態１１］
前記ゲストＯＳが、受け付けたリクエストの優先度を計算するステップと、
前記記憶部に蓄積された未処理のリクエストの優先度が所定の優先度を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行するステップと、を含む、
形態７ないし１０のいずれか一に記載のスケジューリング方法。
［形態１２］
前記ハイパーバイザが、前記ゲストＯＳによって発行されるハイパーバイザコールの頻度が所定の頻度を超えた場合、警告を出力するステップを含む、
形態７ないし１１のいずれか一に記載のスケジューリング方法。
［形態１３］
上記第３の態様に係るプログラムのとおりである。
［形態１４］
前記ゲストＯＳが、受け付けたリクエストを処理するアプリケーションと前記アプリケーションを実行する仮想ＣＰＵの識別子を関連付けて第１のキューに蓄積する処理と、
前記第１のキューを参照して、前記アプリケーションを実行する仮想ＣＰＵの識別子を特定し、特定した仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する処理と、を前記コンピュータに実行させる、
形態１３に記載のプログラム。
［形態１５］
前記ゲストＯＳが、受け付けたリクエストを記憶部に蓄積する処理と、
前記記憶部に蓄積された未処理のリクエストの数が所定の数を超えた場合、または、前記記憶部に蓄積された未処理のリクエストの滞留期間が所定の期間を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する処理と、を前記コンピュータに実行させる、
形態１３または１４に記載のプログラム。
［形態１６］
前記ハイパーバイザが、優先度ごとに分類されたスレッドと前記スレッドを優先度に応じて実行する物理ＣＰＵを関連付けて第２のキューに蓄積する処理と、
前記識別子に対応する仮想ＣＰＵを実現するスレッドが物理ＣＰＵ上で実行中である場合、当該スレッドの実行時間を延長し、それ以外の場合、当該スレッドの前記第２のキューにおける優先度、および／または、当該スレッドの前記第２のキューにおける順序を変更する処理と、を前記コンピュータに実行させる、
形態１３ないし１５のいずれか一に記載のプログラム。
［形態１７］
前記ゲストＯＳが、受け付けたリクエストの優先度を計算する処理と、
前記記憶部に蓄積された未処理のリクエストの優先度が所定の優先度を超えた場合、前記未処理のリクエストを処理するアプリケーションを実行する仮想ＣＰＵの識別子を含むハイパーバイザコールを発行する処理と、を前記コンピュータに実行させる、
形態１３ないし１６のいずれか一に記載のプログラム。
［形態１８］
前記ハイパーバイザが、前記ゲストＯＳによって発行されるハイパーバイザコールの頻度が所定の頻度を超えた場合、警告を出力する処理を前記コンピュータに実行させる、
形態１３ないし１７のいずれか一に記載のプログラム。
【０１０４】
なお、上記特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１０５】
１    仮想計算機システム
２    物理計算機
３    ＶＭＭ
４    ハードウェア
５    仮想計算機
６    ゲストＯＳ
７    ゲストＯＳインターフェイス部
８    ゲストＯＳ依存関係作成モジュール
９    ゲストＯＳ依存関係テーブル
１０    ディスパッチャ
１１    ＣＰＵ割り当てテーブル
１３    ＣＰＵ
１２    ゲストＯＳスケジューラ
１４    ＣＰＵ割り当てテーブル管理部
１５    判定部
１６    サーバゲストＯＳスケジュール部
１７    クライアントゲストＯＳ探索部
１８    クライアントゲストＯＳスケジュール部
２０    ゲストＯＳ
２２    要求部
３０    ハイパーバイザ
３２    変更部
１００    ゲストＯＳ
１１０    ＵＤＰパケット送受信部
１２０    要求部
１３０    滞留量取得部
１４０    ＳＩＰ処理増幅判定部
１５０    滞留リクエスト記憶部
１５１    滞留リクエスト識別子
１５２    滞留期間
１５３    優先度
１６０    スレッド起動部
１７０    スケジューリングキュー
１８０    優先度計算部
１９０    優先度表
１９１    電話番号
１９２    優先度
２００    ハイパーバイザ
２１０    受付部
２２０    実行時間変更部
２３０    スケジューラ
２４０    スケジューリングキュー
２５０    実行優先度変更部
２６０    実行キュー並べ替え部
２７０    限界負荷警告部
２８０    実行履歴記憶部
３００    仮想マシン
４００    Linux
４１０    sock_def_readable
４２０    PVOP_VCALL3
４６０    try_to_wake_up
４７０    run_queue
５００    ＫＶＭ
５３０    schedule
５４０    run_queue
【図１】
2017199044.tif 000003
【図２】
2017199044.tif 000004
【図３】
2017199044.tif 000005
【図４】
2017199044.tif 000006
【図５】
2017199044.tif 000007
【図６】
2017199044.tif 000008
【図７】
2017199044.tif 000009
【図８】
2017199044.tif 000010
【図９】
2017199044.tif 000011
【図１０】
2017199044.tif 000012
【図１１】
2017199044.tif 000013
【図１２】
2017199044.tif 000014
【図１３】
2017199044.tif 000015
【図１４】
2017199044.tif 000016
【図１５】
2017199044.tif 000017
【図１６】
2017199044.tif 000018