(57)【要約】【課題】アプリケーションプログラムの負荷状態（ＣＰＵ使用状況）が変動した際にも、最適な性能で動作する仮想計算機システムを提供する。【解決手段】複数の仮想ＣＰＵが並列動作して処理されるプログラムを実行する仮想計算機システムであって、プログラムの逐次処理の実行時間と並列処理の実行時間から求まる並列性情報に基づいて、仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を変えるようにした。【選択図】図１Ａ
2018139064.tif 000002
【特許請求の範囲】
【請求項１】
複数の仮想ＣＰＵが並列動作して処理されるプログラムを実行する仮想計算機システムであって、
前記プログラムの逐次処理の実行時間と並列処理の実行時間から求まる並列性情報に基づいて、前記仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を変える
ことを特徴とする仮想計算機システム。
【請求項２】
請求項１に記載の仮想計算機システムにおいて、
複数のプログラムの前記並列性情報毎に求めた物理ＣＰＵ数毎の性能向上率の変化に基づいて、前記複数のプログラムにそれぞれの物理ＣＰＵの割当て数を変える
ことを特徴とする仮想計算機システム。
【請求項３】
請求項２に記載の仮想計算機システムにおいて、
前記並列性情報と物理ＣＰＵ数とから、アムダールの法則に基づいて前記性能向上率を算出する
ことを特徴とする仮想計算機システム。
【請求項４】
請求項１から請求項３のいずれか一項に記載の仮想計算機システムにおいて、
前記プログラムの実行中に、所定の周期で、前記仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を変える
ことを特徴とする仮想計算機システム。
【請求項５】
請求項１に記載の仮想計算機システムにおいて、
前記仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を変える物理ＣＰＵ割当て制御部を有し、
物理ＣＰＵ割当て制御部は、
前記プログラムの逐次処理と並列処理の実行時間を示す並列性情報を取得する並列性情報取得部と、
前記プログラム毎に前記並列性情報に基づいて並列化可能な部分の実行時間の割合を示す並列率を算出する並列実行時間割合算出部と、
前記並列率と物理ＣＰＵ数とから、アムダールの法則に基づいて物理ＣＰＵ数を増加した際の前記プログラム毎の性能向上率を算出する性能向上率推定部と、
前記プログラム毎の前記性能向上率に基づいて、システム性能が最大になるように、プログラム毎の物理ＣＰＵ割当て数の最適化を行うＣＰＵ割当て判定部と、
を備える
ことを特徴とする仮想計算機システム。
【請求項６】
複数の仮想ＣＰＵが並列動作して処理される複数のプログラムを実行する仮想計算機システムのリソース割当て方法であって、
前記プログラムの逐次処理と並列処理の実行時間を示す並列性情報を前記プログラムの実行中に周期的に取得するステップと、
前記プログラム毎に前記並列性情報に基づいて並列化可能な部分の実行時間の割合を示す並列率を算出するステップと、
前記並列率と物理ＣＰＵ数とから、アムダールの法則に基づいて物理ＣＰＵ数を増加した際の前記プログラム毎の性能向上率を算出するステップと、
前記プログラム毎の前記性能向上率に基づいて、システム性能が最大になるように、プログラム毎の物理ＣＰＵ割当て数の最適化を行うステップと、
前記プログラムの実行中に周期的に、前記仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を前記最適化した数に変えるステップと、
を含むことを特徴とする仮想計算機システムのリソース割当て方法。
【請求項７】
請求項６に記載の仮想計算機システムのリソース割当て方法において、
前記プログラム毎の物理ＣＰＵ割当て数の最適化を行うステップは、
各プログラムのそれぞれに物理ＣＰＵを１つ割当てるステップと、
各プログラム中から、物理ＣＰＵを１増加した際の性能向上率の増分が最大となるプログラムを選択するステップと、
前記選択されたプログラムの物理ＣＰＵの割当て数を１つ増加するステップと、
を含むことを特徴とする仮想計算機システムのリソース割当て方法。
【請求項８】
請求項６に記載の仮想計算機システムのリソース割当て方法において、
前記プログラム毎の物理ＣＰＵ割当て数の最適化を行うステップは、
前記プログラム毎に全物理ＣＰＵを略均等数割当てるステップと、
各プログラム中から、物理ＣＰＵを１増加した際の性能向上率の増分が最大となるプログラムを選択するとともに、物理ＣＰＵを１減少した際の性能向上率の差分が最小となるプログラムを選択するステップと、
前記物理ＣＰＵを１増加した際の性能向上率の増分が、前記物理ＣＰＵを１減少した際の性能向上率の差分以上の場合に、前記物理ＣＰＵを１増加した際の性能向上率の増分が最大となるプログラムの物理ＣＰＵの割当て数を１つ増加し、物理ＣＰＵを１減少した際の性能向上率の差分が最小となるプログラムの物理ＣＰＵの割当て数を１つ減少するステップと、
を含むことを特徴とする仮想計算機システムのリソース割当て方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムのＣＰＵリソースの割当てに関する。
【背景技術】
【０００２】
複数の物理ＣＰＵ（Central Processing Unit）やメモリや入出力装置を制御して複数のＶＭ（Virtual Machine：仮想計算機）を構築する仮想計算機システムでは、アプリケーションを実行するＶＭのＣＰＵ割当てに関して、事前検証で得られたピーク性能データを基に、静的にＣＰＵ割当てしている（非特許文献１を参照）。
【０００３】
複数のサーバをＶＭとして一台のサーバに集約するサーバ仮想化においては、稼働率の高くない仮想サーバもある。この仮想サーバに割当てられた物理ＣＰＵでは実質的な処理を行っていないため、仮想計算機システムの電力消費が問題となることがある。
特許文献１では、ＶＭの仮想ＣＰＵと物理ＣＰＵの対応付けを制御して、仮想ＣＰＵへの対応付けがなくなった物理ＣＰＵをスリープ状態にして消費電力を低減している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−１４０１５７号公報
【非特許文献】
【０００５】
【非特許文献１】RYAN MANGAN’S IT BLOG“Deciding On How Many vCPU’s Should A Virtual Machine Be Allocated ?”、[online]、UPDATED: 2014-1-18、[2017/1/13検索]、インターネット＜ＵＲＬ：https://ryanmangansitblog.com/2014/01/18/deciding-on-how-many-vcpus-should-a-virtual-machine-be-allocated/＞
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記の先行技術によれば、複数のアプリケーションを同時実行する仮想計算機システムの消費電力を低減することが可能となる。しかし仮想計算機システムの物理ＣＰＵの使用効率については考慮されておらず、サーバ仮想化等の性能向上を最大化できない。
【０００７】
本発明の目的は、仮想サーバの負荷状態（ＣＰＵ使用状況）が変動した際にも、最適な性能で動作する仮想計算機システムを提供することにある。
【課題を解決するための手段】
【０００８】
前記課題を解決するため、請求項１に記載の発明は、複数の仮想ＣＰＵが並列動作して処理されるプログラムを実行する仮想計算機システムであって、前記プログラムの逐次処理の実行時間と並列処理の実行時間から求まる並列性情報に基づいて、前記仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を変えるようにした。
このようにすることで、仮想計算機システムのプログラムの処理性能を最大化することができる。
【０００９】
請求項２に記載の発明は、請求項１に記載の仮想計算機システムにおいて、複数のプログラムの前記並列性情報毎に求めた物理ＣＰＵ数毎の性能向上率の変化に基づいて、前記複数のプログラムにそれぞれの物理ＣＰＵの割当て数を変えるようにした。
このようにすることで、仮想計算機システムの全体のスループットを向上することができる。
【００１０】
請求項３に記載の発明は、請求項２に記載の仮想計算機システムにおいて、前記並列性情報と物理ＣＰＵ数とから、アムダールの法則に基づいて前記性能向上率を算出するようにした。
このようにすることで、簡易に性能評価を行うことができる。
【００１１】
請求項４に記載の発明は、請求項１から請求項３のいずれか一項に記載の仮想計算機システムにおいて、前記プログラムの実行中に、所定の周期で、前記仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を変えるようにした。
このようにすることで、プログラム動作の動的変化に対応して、物理ＣＰＵの割当てを変更することができる。
【００１２】
請求項５に記載の発明は、請求項１に記載の仮想計算機システムにおいて、前記仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を変える物理ＣＰＵ割当て制御部を有し、物理ＣＰＵ割当て制御部は、前記プログラムの逐次処理と並列処理の実行時間を示す並列性情報を取得する並列性情報取得部と、前記プログラム毎に前記並列性情報に基づいて並列化可能な部分の実行時間の割合を示す並列率を算出する並列実行時間割合算出部と、前記並列率と物理ＣＰＵ数とから、アムダールの法則に基づいて物理ＣＰＵ数を増加した際の前記プログラム毎の性能向上率を算出する性能向上率推定部と、前記プログラム毎の前記性能向上率に基づいて、システム性能が最大になるように、プログラム毎の物理ＣＰＵ割当て数の最適化を行うＣＰＵ割当て判定部と、を備えるようにした。
このようにすることで、仮想計算機システムの全体のスループットを向上することができる。
【００１３】
請求項６に記載の発明は、複数の仮想ＣＰＵが並列動作して処理される複数のプログラムを実行する仮想計算機システムのリソース割当て方法であって、前記プログラムの逐次処理と並列処理の実行時間を示す並列性情報を前記プログラムの実行中に周期的に取得するステップと、前記プログラム毎に前記並列性情報に基づいて並列化可能な部分の実行時間の割合を示す並列率を算出するステップと、前記並列率と物理ＣＰＵ数とから、アムダールの法則に基づいて物理ＣＰＵ数を増加した際の前記プログラム毎の性能向上率を算出するステップと、前記プログラム毎の前記性能向上率に基づいて、システム性能が最大になるように、プログラム毎の物理ＣＰＵ割当て数の最適化を行うステップと、前記プログラムの実行中に周期的に、前記仮想ＣＰＵに対応付ける物理ＣＰＵの割当て数を前記最適化した数に変えるステップと、を含むようにした。
このようにすることで、簡易に性能評価を行い、仮想計算機システムの全体のスループットを向上することができる。
【００１４】
請求項７に記載の発明は、請求項６に記載の仮想計算機システムのリソース割当て方法において、前記プログラム毎の物理ＣＰＵ割当て数の最適化を行うステップは、各ブログラムのそれぞれに物理ＣＰＵを１つ割当てるステップと、各プログラム中から、物理ＣＰＵを１増加した際の性能向上率の増分が最大となるプログラムを選択するステップと、前記選択されたプログラムの物理ＣＰＵの割当て数を１つ増加するステップと、を含むようにした。
このようにすることで、簡易に性能評価を行い、仮想計算機システムの全体のスループットを向上することができる。
【００１５】
請求項８に記載の発明は、請求項６に記載の仮想計算機システムのリソース割当て方法において、前記プログラム毎の物理ＣＰＵ割当て数の最適化を行うステップは、前記プログラム毎に全物理ＣＰＵを略均等数割当てるステップと、各プログラム中から、物理ＣＰＵを１増加した際の性能向上率の増分が最大となるプログラムを選択するとともに、物理ＣＰＵを１減少した際の性能向上率の差分が最小となるプログラムを選択するステップと、前記物理ＣＰＵを１増加した際の性能向上率の増分が、前記物理ＣＰＵを１減少した際の性能向上率の差分以上の場合に、前記物理ＣＰＵを１増加した際の性能向上率の増分が最大となるプログラムの物理ＣＰＵの割当て数を１つ増加し、物理ＣＰＵを１減少した際の性能向上率の差分が最小となるプログラムの物理ＣＰＵの割当て数を１つ減少するステップと、を含むようにした。
このようにすることで、短時間に物理ＣＰＵの割当て数を算出することができる。
【発明の効果】
【００１６】
本発明によれば、物理ＣＰＵの使用効率が上がるので、仮想計算機システムのスループット向上を図ることができる。
【図面の簡単な説明】
【００１７】
【図１Ａ】物理ＣＰＵとＶＭの仮想ＣＰＵとの対応関係を示す図である。
【図１Ｂ】他のタイミングの物理ＣＰＵとＶＭの仮想ＣＰＵとの対応関係を示す図である。
【図２】物理プロセッサを並列化した際のアムダールの法則に基づく性能向上率を示す図である。
【図３】物理ＣＰＵ割当て制御部の処理フロー図である。
【図４】物理ＣＰＵ割当て制御部の機能ブロックを示す図である。
【図５】性能向上率推定情報の一例を示す図である。
【図６】積み上げ方式による評価を行う場合のＣＰＵ割当て判定部の処理フローである。
【図７】図６に処理フローによる各アプリの割当てる物理ＣＰＵ数の変化を示した図である。
【図８】積み下げ方式による評価を行う場合のＣＰＵ割当て判定部の処理フローである。
【図９】図８に処理フローによる各アプリの割当てる物理ＣＰＵ数の変化を示した図である。
【図１０】積み上げと積み下げの中間方式による評価を行う場合のＣＰＵ割当て判定部の処理フローである。
【図１１】図１０に処理フローによる各アプリの割当てる物理ＣＰＵ数の変化を示した図である。
【図１２】アプリ並列性情報の収集方法を説明する図である。
【発明を実施するための形態】
【００１８】
以下、本発明の実施形態を説明する。
図１Ａと図１Ｂは、それぞれ異なるタイミングにおける、物理ＣＰＵとＶＭの仮想ＣＰＵとの対応関係と、ゲストＯＳ（Operating System）／アプリケーションプログラム（以下、アプリと記す）と仮想ＣＰＵとの対応関係を示し、仮想計算機システムの概要を示す図である。
【００１９】
実施形態の仮想計算機システムは、４つの物理ＣＰＵ（CPU_1、CPU_2、CPU_3、CPU_4）を備え、２つのＶＭ（VM0、VM1）が動作している。
ＶＭ（VM0、VM1）には、それぞれ、４つの仮想ＣＰＵ（vCPU0_1、vCPU0_2、vCPU0_3、vCPU0_4とvCPU1_1、vCPU1_2、vCPU1_3、vCPU1_4）が設けられている。
そして、ＶＭ（VM0、VM1）のそれぞれでは、ゲストＯＳ１／アプリ１とゲストＯＳ２／アプリ２が動作している。
【００２０】
図１Ａのタイミングでは、仮想化ソフトウェアにより、２つの物理ＣＰＵ（CPU_1、CPU_2）がＶＭ（VM0）の２つの仮想ＣＰＵ（vCPU0_1、vCPU0_2）に割当てられている。このため、ＶＭ（VM0）のゲストＯＳ１／アプリ１は、物理ＣＰＵ（CPU_1、CPU_2）で実行されている。また、２つの物理ＣＰＵ（CPU_3、CPU_4）がＶＭ（VM1）の２つの仮想ＣＰＵ（vCPU1_1、vCPU1_2）に割当てられ、ＶＭ（VM1）のゲストＯＳ２／アプリ２は、物理ＣＰＵ（CPU_3、CPU_4）で実行されている。
【００２１】
実施形態の仮想計算機システムには、物理ＣＰＵ割当て制御部１が設けられている。
物理ＣＰＵ割当て制御部１は、アプリ１とアプリ２のそれぞれのプログラムの逐次処理と並列処理の実行時間（アプリ並列性情報）を取得し、ＶＭ動作の並列性を評価し、仮想化ソフトウェアに指示して、物理ＣＰＵのＶＭ割当てを制御する。
【００２２】
図１Ｂは、物理ＣＰＵ割当て制御部１により物理ＣＰＵのＶＭ割当てが変更され、ＶＭ（VM0）に３つの物理ＣＰＵ（CPU_1、CPU_2、CPU_3）が割当てられ、ＶＭ（VM1）に１つの物理ＣＰＵ（CPU_4）が割当てられている。
これにより、ＶＭ（VM0）のゲストＯＳ１／アプリ１は、物理ＣＰＵ（CPU_1、CPU_2、CPU_3）で実行され、ＶＭ（VM1）のゲストＯＳ２／アプリ２は、物理ＣＰＵ（CPU_4）で実行されるように変更される。
【００２３】
物理ＣＰＵ割当て制御部１は、アプリ１とアプリ２の実行中に、周期的に、物理ＣＰＵ（CPU_1、CPU_2、CPU_3、CPU_4）の使用効率が高くなるように、物理ＣＰＵのＶＭ割当てを制御する。これにより、仮想計算機システムの効率向上を図ることができる。
【００２４】
つぎに、物理ＣＰＵ割当て制御部１における、物理ＣＰＵのＶＭ割当ての制御方法について説明する。
物理ＣＰＵ割当て制御部１は、アムダールの法則に基づいて、ＶＭに割当てる物理ＣＰＵ数を変えたときの性能向上率を、仮想計算機システム全体で評価して、物理ＣＰＵの割当てを制御する。
【００２５】
アムダールの法則では、物理プロセッサを並列化した際の性能向上率が次式のように与えられる。
【数１】
2018139064.tif 000003
Ｓ(Ｎ)：並列化による性能向上率
Ｎ    ：物理プロセッサ数
Ｐ    ：並列化可能な部分の実行時間の割合
【００２６】
図２は、式（１）をグラフ化したものである。
図２からも明らかなように、アプリの並列化可能な部分の実行時間の割合Ｐ（以下、並列率Ｐと記す）が小さい場合には、割当てる物理プロセッサの数を増やしても、性能向上率が大きくならない。逆に、割当てる物理プロセッサの数を減らしても、性能の低下率は小さいともいえる。
【００２７】
物理ＣＰＵ割当て制御部１は、仮想計算機システムで実行している全てアプリについて、周期的に逐次処理と並列処理の実行時間を示すアプリ並列性情報を取得し、並列率Ｐを算出する。そして、アムダールの法則に基づいて仮想計算機システムのスループットが最大となる物理ＣＰＵ割当てを決める。
【００２８】
図３は、周期的に行われる物理ＣＰＵ割当て制御部１の処理フロー図である。
ステップＳ３１で、物理ＣＰＵ割当て制御部１は、各アプリのプログラムを実行している物理ＣＰＵの特定情報を取得する。
例えば、ゲストＯＳからアプリのプロセスＩＤ毎に実行する仮想ＣＰＵの特定情報を取得し、仮想化ソフトウェアから物理ＣＰＵと仮想ＣＰＵの対応関係を示す割当て情報を取得する。これにより、アプリのプロセスＩＤ毎に実行する物理ＣＰＵを特定することができる。
【００２９】
つぎに、ステップＳ３２で、物理ＣＰＵ割当て制御部１は、各アプリの逐次処理と並列処理の実行時間を示すアプリ並列性情報を取得し、各アプリの並列率Ｐを算出する。
詳細は後述するが、ＶＭの各アプリのＯＳやツールから取得することができる。
【００３０】
ステップＳ３３で、ステップＳ３２で算出した並列率Ｐと式（１）から、各アプリの物理プロセッサ数と性能向上率の関係を求め、ＶＭに割当てる物理ＣＰＵ数を変えたときの性能向上率を、仮想計算機システム全体で評価して、各アプリの物理ＣＰＵ割当ての最適化を行う。
【００３１】
ステップＳ３４で、ステップＳ３３の最適化処理結果に基づいて、ＶＭの物理ＣＰＵの割当てを変更制御する。
例えば、ＣＰＵピニングコマンドのＣＰＵアフィニティーにより、ＶＭに割当てる物理ＣＰＵを指定する。
【００３２】
図４は、物理ＣＰＵ割当て制御部１の機能ブロックを示す図である。
図１Ａまたは図１Ｂの構成を例に詳細に説明する。
【００３３】
ＣＰＵ割当て情報収集部１１は、ゲストＯＳ１とＶＭ（VM0）から、アプリ１に対応するプロセスＩＤを処理している仮想ＣＰＵ（vCPU0_1とvCPU0_2）の識別情報を取得するとともに、仮想化ソフトウェアから、仮想ＣＰＵ（vCPU0_1とvCPU0_2）に割当てられている物理ＣＰＵ（CPU_1とCPU_2）の識別情報を取得する。
そして、取得した情報に基づいて、アプリ１を処理している物理ＣＰＵ（CPU_1とCPU_2）を求め、ＣＰＵ割当て情報記憶部１７に記憶する。
【００３４】
ＣＰＵ割当て情報収集部１１は、アプリ２についても同様に、ゲストＯＳ２とＶＭ（VM1）と仮想化ソフトウェアから、アプリ２を処理している物理ＣＰＵ（CPU_3とCPU_4）を求め、ＣＰＵ割当て情報記憶部１７に記憶する。
上記のように、ＣＰＵ割当て情報収集部１１は、ゲストＯＳとＶＭと仮想化ソフトウェアから、所定のアプリと処理している物理ＣＰＵの対応関係を求め、ＣＰＵ割当て情報記憶部１７に記憶する。
【００３５】
アプリ並列性情報取得部１２は、ゲストＯＳ１からアプリ１の逐次処理と並列処理の実行時間を示すアプリ並列性情報を取得し、逐次処理／並列処理の実行時間情報記憶部１８に記憶する。
また、アプリ並列性情報取得部１２は、アプリ２についても同様に、アプリ並列性情報を取得し、逐次処理／並列処理の実行時間情報記憶部１８に記憶する。
上記のように、アプリ並列性情報取得部１２は、実施形態の仮想計算機システムの全アプリについて、逐次処理と並列処理の実行時間を示すアプリ並列性情報を取得し、逐次処理／並列処理の実行時間情報記憶部１８に記憶する。
【００３６】
並列実行時間割合算出部１３は、逐次処理／並列処理の実行時間情報記憶部１８を参照して、アプリ１の並列率Ｐを算出する。そして、並列実行時間割合算出部１３は、算出したアプリ１の並列率Ｐを性能向上率推定情報記憶部１９に記憶する。
また、並列実行時間割合算出部１３は、アプリ２についても同様に、算出したアプリ２の並列率Ｐを性能向上率推定情報記憶部１９に記憶する。
上記のように、並列実行時間割合算出部１３は、逐次処理／並列処理の実行時間情報記憶部１８を参照して、各アプリの並列率Ｐを算出し、性能向上率推定情報として性能向上率推定情報記憶部１９に記憶する。
【００３７】
性能向上率推定部１４は、性能向上率推定情報記憶部１９を参照して、アプリ１の並列率Ｐを求める。そして、式（１）から、物理ＣＰＵ数が１〜４のそれぞれの場合の性能向上率を算出し、性能向上率推定情報記憶部１９に記憶する。
また、性能向上率推定部１４は、同様に、アプリ２の並列率Ｐと式（１）から、物理ＣＰＵ数が１〜４のそれぞれの場合の性能向上率を算出し、性能向上率推定情報記憶部１９に記憶する。
上記のように、性能向上率推定部１４は、アプリ毎に、並列率Ｐと式（１）から、物理ＣＰＵ数が１〜４のそれぞれの場合の性能向上率を算出し、性能向上率推定情報記憶部１９に記憶する。
【００３８】
ＣＰＵ割当て判定部１５は、性能向上率推定情報記憶部１９を参照して、ＶＭに割当てる物理ＣＰＵ数を変えたときの性能向上率を、仮想計算機システム全体で評価して、各アプリの物理ＣＰＵ割当ての最適化を行う。
評価方法の詳細は、後述するのでここでは説明を省略する。
ＣＰＵ割当て判定部１５は、最適と評価したアプリ１とアプリ２の物理ＣＰＵの数に基づいて、アプリ１を物理ＣＰＵ（CPU_1とCPU_2とCPU_3）が処理するようにＣＰＵ割当て情報記憶部１７を修正する。
ＣＰＵ割当て判定部１５は、また、アプリ２を物理ＣＰＵ（CPU_4）が処理するようにＣＰＵ割当て情報記憶部１７を修正する。
上記のように、ＣＰＵ割当て判定部１５は、全てアプリが最適化された数の物理ＣＰＵで処理されるように、ＣＰＵ割当て情報記憶部１７を修正する。
【００３９】
ＣＰＵ割当て変更制御部１６は、ＣＰＵ割当て情報記憶部１７を参照して、アプリ１を実行するＶＭ（VM0）に、物理ＣＰＵ（CPU_1とCPU_2とCPU_3）を割当てるように、仮想化ソフトウェアに指示する。
また、ＣＰＵ割当て変更制御部１６は、アプリ２を実行するＶＭ（VM1）に、物理ＣＰＵ（CPU_4）を割当てるように、仮想化ソフトウェアに指示する。
上記のように、ＣＰＵ割当て変更制御部１６は、ＣＰＵ割当て情報記憶部１７を参照して、アプリを実行するＶＭの物理ＣＰＵの割当てを仮想化ソフトウェアに指示する。
【００４０】
上記の物理ＣＰＵ割当て制御部１は、構成の全てまたは一部が、仮想計算機システムのハイパーバイザの一部として、実装される。または、仮想計算機システムのホストＯＳの一つのプログラムとして実装してもよい。
【００４１】
つぎに、ＣＰＵ割当て判定部１５（図４参照）の評価方法を詳細に説明する。
図５は、性能向上率推定情報記憶部１９（図４参照）に記憶されている性能向上率推定部１４（図４参照）で算出した性能向上率推定情報の一例を示す図である。
【００４２】
図５の性能向上率推定情報は、３つのアプリが８つの物理ＣＰＵで実行する場合の、物理ＣＰＵ数（１９１）に対するアムダールの法則に基づくアプリの性能向上率（１９２、１９４、１９６）を示している。ここで、アプリ１の並列率Ｐは０．２であり、アプリ２の並列率Ｐは０．５、アプリ３の並列率Ｐは０．８とする。
また、性能向上率推定情報には、一つの物理ＣＰＵの増加に対する性能向上率の増分を物理ＣＰＵ数の増加毎に記録している（１９３、１９５、１９７）。
【００４３】
ＣＰＵ割当て判定部１５は、図５の性能向上率推定情報を参照して、積み上げ方式による評価、積み下げ方式による評価、または、積み上げと積み下げの中間方式による評価のいずれかの評価方法により、アプリ毎の物理ＣＰＵ割当ての最適化を行う。
以下に、それぞれの評価方法を順に説明する。
【００４４】
図６は、積み上げ方式による評価を行う場合のＣＰＵ割当て判定部１５の処理フローである。
ステップＳ６１で、ＣＰＵ割当て判定部１５は、各アプリに割当てる物理ＣＰＵ数を１に初期設定する。例えば、図５の性能向上率推定情報の例では、アプリ１とアプリ２とアプリ３のそれぞれの物理ＣＰＵ数を１に初期設定する。
【００４５】
ステップＳ６２で、ＣＰＵ割当て判定部１５は、アプリに追加割当てする物理ＣＰＵ数分、ステップＳ６３とステップＳ６４の処理を繰り返す。
例えば、図５の性能向上率推定情報の例では、８つの物理ＣＰＵのうち、初期設定した残りの５つの物理ＣＰＵの追加を行うので、ステップＳ６３とステップＳ６４の処理を５回繰り返す。
【００４６】
ステップＳ６３では、性能向上率推定情報を参照して、物理ＣＰＵを１増加する際の性能向上率の増分が最大のアプリを選択する。
例えば、初期設定（物理ＣＰＵ数１）から物理ＣＰＵ数２に増加する際のアプリの性能向上率の増分（１９３、１９５，１９７）は、それぞれ、0.111／0.333／0.667であるので、アプリ３が選択される。
【００４７】
ステップＳ６４では、ステップＳ６３で選択されたアプリに割当てる物理ＣＰＵ数を１増加する。
例えば、初期設定（物理ＣＰＵ数１）から物理ＣＰＵ数２に増加する際には、アプリ３が選択されたので、アプリ３に割当てる物理ＣＰＵ数を２にする。
以上の処理の繰り返しにより、ＣＰＵ割当て判定部１５は、システム性能が最大になるように、各アプリの物理ＣＰＵ割当ての最適化を行う。
【００４８】
図７は、ＣＰＵ割当て判定部１５が、図６の処理フローにより、図５の性能向上率推定情報の例を処理した際の、各アプリの割当てる物理ＣＰＵ数の変化を示した図である。
３つ目までの物理ＣＰＵの割当てにおいては、アプリ３の性能向上率の増分が最大となるため、物理ＣＰＵの増加分はアプリ３に割当てられる。しかし、４つ目の物理ＣＰＵの割当てでは、アプリの性能向上率の増分は、それぞれ、0.111／0.333／0.278となるため、アプリ２の性能向上率の増分が最大となり、４つ目の物理ＣＰＵはアプリ２に割当てられる。
図７の例においては、５つの物理ＣＰＵの割当て評価が行われ、アプリ１に１つ、アプリ２に２つ、アプリ３に５つの物理ＣＰＵが割当てられる。
【００４９】
つぎに、積み下げ方式による評価を行う場合のＣＰＵ割当て判定部１５の処理フローを図８により説明する。
ステップＳ８１で、ＣＰＵ割当て判定部１５は、各アプリに割当てる物理ＣＰＵ数を実装数に初期設定する。例えば、図５の性能向上率推定情報の例では、アプリ１とアプリ２とアプリ３のそれぞれの物理ＣＰＵ数を８に初期設定する。
【００５０】
ステップＳ８２で、ＣＰＵ割当て判定部１５は、ステップＳ８３とステップＳ８４の処理を、物理ＣＰＵ数が実装数になるまで繰り返す。
例えば、図５の性能向上率推定情報の例では、８つの物理ＣＰＵが実装されているので、アプリ１とアプリ２とアプリ３に割当てる物理ＣＰＵ数の和が８になるまで、ステップＳ８３とステップＳ８４の処理を繰り返す。
【００５１】
ステップＳ８３では、性能向上率推定情報を参照して、物理ＣＰＵを１減少する際の性能向上率の差分が最小のアプリを選択する。
例えば、初期設定（物理ＣＰＵ数８）から物理ＣＰＵを一つ減らす際のアプリの性能向上率の差分は、0.005／0.028／0.152であるので、アプリ１が選択される。
【００５２】
ステップＳ８４では、ステップＳ８３で選択されたアプリに割当てる物理ＣＰＵ数を一つ減少する。
例えば、初期設定（物理ＣＰＵ数８）から物理ＣＰＵを一つ減らす際にはアプリ１が選択されたので、アプリ１に割当てる物理ＣＰＵ数を７にする。
以上の処理の繰り返しにより、ＣＰＵ割当て判定部１５は、システム性能が最大になるように、各アプリの物理ＣＰＵ割当ての最適化を行う。
【００５３】
図９は、ＣＰＵ割当て判定部１５が、図８の処理フローにより、図５の性能向上率推定情報の例を処理した際の、各アプリの割当てる物理ＣＰＵ数の変化を示した図である。
５つ目までの物理ＣＰＵの減少においては、アプリ１の性能向上率の差分が最小となるため、アプリ１に割当てる物理ＣＰＵは、順に減少する。６つ目と７つ目の物理ＣＰＵの減少においては、アプリ２の性能向上率の差分が最小となり、アプリ２に割当てる物理ＣＰＵを減じる。
図９の例においては、１６回の物理ＣＰＵの割当て削減が行われ、アプリ１に１つ、アプリ２に２つ、アプリ３に５つの物理ＣＰＵが割当てられる。
【００５４】
つぎに、積み上げと積み下げの中間方式による評価を行う場合のＣＰＵ割当て判定部１５の処理フローを図１０により説明する。
ステップＳ１０１で、ＣＰＵ割当て判定部１５は、初期設定として、各アプリに物理ＣＰＵを略均等数割当てる。例えば、図５の性能向上率推定情報の例では、８つの物理ＣＰＵがあるので、アプリ１に２つの物理ＣＰＵを、アプリ２とアプリ３にそれぞれ３つの物理ＣＰＵを割当てる。
【００５５】
ステップＳ１０２で、ＣＰＵ割当て判定部１５は、性能向上率推定情報を参照して、物理ＣＰＵを１増加する際の性能向上率の増分が最大のアプリを選択する。
つぎに、ステップＳ１０３で、ＣＰＵ割当て判定部１５は、性能向上率推定情報を参照して、物理ＣＰＵを１減少する際の性能向上率の差分が最小のアプリを選択する。
【００５６】
ステップＳ１０４で、ＣＰＵ割当て判定部１５は、ステップＳ１０２で選択したアプリの物理ＣＰＵの増加時の性能向上率の増分が、ステップＳ１０３で選択したアプリの物理ＣＰＵの減少時の性能向上率の差分以上であるか否かを判定する。
性能向上率の増分が差分以上であれば（Ｓ１０４のＹｅｓ）、選択されたアプリの物理ＣＰＵの割当て数を１増１減する（Ｓ１０５）。つまり、ステップＳ１０２で選択されたアプリの物理ＣＰＵの割当て数を１増加し、ステップＳ１０３で選択されたアプリの物理ＣＰＵの割当て数を１減少する。
そして、ステップＳ１０２に戻り、物理ＣＰＵの割当て数の調整を継続する。
【００５７】
ステップＳ１０４で、性能向上率の増分が差分より小さければ（Ｓ１０４のＮｏ）、物理ＣＰＵの割当て処理を終了する。
以上の処理により、ＣＰＵ割当て判定部１５は、システム性能が最大になるように、各アプリの物理ＣＰＵ割当ての最適化を行う。
【００５８】
図１１は、ＣＰＵ割当て判定部１５が、図１０の処理フローにより、図５の性能向上率推定情報の例を処理した際の、各アプリに割当てる物理ＣＰＵ数の変化を示した図である。
初期設定から物理ＣＰＵ数を１増加する際のアプリの性能向上率の増分（１９３、１９５，１９７）は、それぞれ、0.043／0.100／0.357であるので、アプリ３が選択される（Ｓ１０２の処理）。初期設定から物理ＣＰＵを１つ減らす際のアプリの性能向上率の差分は、0.111／0.167／0.476であるので、アプリ１が選択される（Ｓ１０３の処理）。
アプリ３の性能向上率の増分はアプリ１の性能向上率の差分以上であるので（Ｓ１０４の処理）、各アプリの物理ＣＰＵの割当て数は、１／３／４に調整される（Ｓ１０５の処理）。
【００５９】
続けて、上記の割当て状態から物理ＣＰＵ数を１増加する際のアプリの性能向上率の増分は、0.043／0.100／0.278であるので、アプリ３が選択される（Ｓ１０２の処理）。また、上記の割当て状態から物理ＣＰＵを１つ減らす際のアプリの性能向上率の差分は、−／0.167／0.357であるので、アプリ２が選択される（Ｓ１０３の処理）。このとき、アプリ１の物理ＣＰＵは１であり、減少できないので、評価から除外する。
アプリ３の性能向上率の増分はアプリ１の性能向上率の差分以上であるので（Ｓ１０４の処理）、各アプリの物理ＣＰＵの割当て数は、１／２／５に調整される（Ｓ１０５の処理）。
【００６０】
続けて、上記の割当て状態から物理ＣＰＵ数を１増加する際のアプリの性能向上率の増分は、0.111／0.167／0.222であるので、アプリ３が選択される（Ｓ１０２の処理）。また、上記の割当て状態から物理ＣＰＵを１つ減らす際のアプリの性能向上率の差分は、−／0.333／0.278であるので、アプリ３が選択される（Ｓ１０３の処理）。このとき、アプリ１の物理ＣＰＵは１であり、減少できないので、評価から除外する。
アプリ３の性能向上率の増分はアプリ３の性能向上率の差分より小さいので（Ｓ１０４の処理）、物理ＣＰＵの割当て処理を終了する。
以上のより、図５の性能向上率推定情報の例において、アプリ１に１つ、アプリ２に２つ、アプリ３に５つの物理ＣＰＵが割当てられる。
【００６１】
上記の積み上げと積み下げの中間方式による評価において、初期設定として、各アプリに物理ＣＰＵを略均等数割当てる例を説明したが、各アプリの並列率Ｐに応じて、割当ててもよい。この場合には、アプリ１の並列率Ｐは０．２であり、アプリ２の並列率Ｐは０．５、アプリ３の並列率Ｐは０．８であるので、アプリ１に１つの物理ＣＰＵを、アプリ２に２つの物理ＣＰＵを、アプリ３に５つの物理ＣＰＵを割当てる。
【００６２】
図６の積み上げ方式による評価や図８の積み下げ方式による評価や図１０の積み上げと積み下げの中間方式による評価のいずれにおいても同じ物理ＣＰＵの割当て結果を得ることができる。
ＣＰＵ割当て判定部１５は、図５の性能向上率推定情報を参照して、いずれかの評価方法により、アプリ毎の物理ＣＰＵ割当ての処理を行えばよい。
【００６３】
つぎに、アプリの逐次処理と並列処理の実行時間を示すアプリ並列性情報の収集方法を、図１２により説明する。
例えば、実施形態の仮想計算機システムで、リクエスト・パケットを受信し、内部処理した結果をレスポンス・パケットとして返信する通信ソフトウェアを実行する場合を説明する。
【００６４】
この通信ソフトウェアは、ロードバランサ等のリクエスト・パケットを受信する振り分け処理部１２１と、Ｗｅｂサーバ等の並列化が可能な内部処理群１２３と、リバースプロキシ・サーバ等のレスポンス・パケットを送信する集約処理部１２２と、から構成される。
この通信ソフトウェアでは、リクエスト・パケットの内容に応じて、内部処理群１２３の処理可能な並列数が変わる。
【００６５】
実施形態の仮想計算機システムにより、内部処理群１２３を並列処理する物理ＣＰＵの割当て数を求めて、リクエスト・パケットの処理を最適化する。
このために、並列化可能部分である内部処理群１２３の並列処理の実行時間と、並列化不可能部分である振り分け処理部１２１と集約処理部１２２の逐次処理の実行時間と、を求めて、並列率Ｐを算出する。
【００６６】
具体的には、通信ソフトウェアを、並列処理指向の関数型プログラミング言語「Erlang/OTP」により記述し、fprofツールにより関数毎の実行時間を測定する。
これにより、振り分け処理部１２１と集約処理部１２２の逐次処理部分、および、内部処理群１２３の並行処理部分、双方の実行時間の割合を得ることができる。
【００６７】
実施形態の仮想計算機システムは、アプリの負荷が動的に変動した際に、アプリ毎に並列性（逐次処理／並列処理の実行時間比）を考慮して物理ＣＰＵの割当てを行うので、物理ＣＰＵの使用効率を向上することができる。
特に、メニーコア化したシステムにおいては、有用となる。
【符号の説明】
【００６８】
１  物理ＣＰＵ割当て制御部
１１  ＣＰＵ割当て情報収集部
１２  アプリ並列性情報取得部
１３  並列実行時間割合算出部
１４  性能向上率推定部
１５  ＣＰＵ割当て判定部
１６  ＣＰＵ割当て変更制御部
１７  ＣＰＵ割当て情報記憶部
１８  逐次処理／並列処理の実行時間情報記憶部
１９  性能向上率推定情報記憶部
【図１Ａ】
2018139064.tif 000004
【図１Ｂ】
2018139064.tif 000005
【図２】
2018139064.tif 000006
【図３】
2018139064.tif 000007
【図４】
2018139064.tif 000008
【図５】
2018139064.tif 000009
【図６】
2018139064.tif 000010
【図７】
2018139064.tif 000011
【図８】
2018139064.tif 000012
【図９】
2018139064.tif 000013
【図１０】
2018139064.tif 000014
【図１１】
2018139064.tif 000015
【図１２】
2018139064.tif 000016