(57)【特許請求の範囲】
【請求項１】
１個以上の物理的なプロセッサと、
前記物理的なプロセッサで実行されることによって実現される複数の仮想マシンごとに、前記仮想マシンの種別に応じて設定される、クロック周波数を制御する制御情報を管理する管理表と、
前記仮想マシンごとに、前記管理表の制御情報に基づいて前記仮想マシンに要求される処理能力を提供可能な前記物理的なプロセッサの利用率を示すしきい値を求め、前記しきい値と前記物理的なプロセッサの利用率との比較結果に基づいてクロック周波数を決定する決定部と、
前記決定部により決定されたクロック周波数に基づいて前記物理的なプロセッサのクロック周波数を変更する変更部と、
を備えることを特徴とする計算機。
【請求項２】
前記制御情報は、前記仮想マシンごとに、前記仮想マシンがフォアグラウンドで動作しているか、バックグラウンドで動作しているか、に応じて設定される情報を含むことを特徴とする請求項１に記載の計算機。
【請求項３】
前記決定部は、前記仮想マシンごとに、前記しきい値の最大値と最小値とを求め、前記物理的なプロセッサの利用率が前記しきい値の最大値よりも大きい場合にクロック周波数を上げ、前記物理的なプロセッサの利用率が前記しきい値の最小値よりも小さい場合にクロック周波数を下げるように決定することを特徴とする請求項１または２に記載の計算機。
【請求項４】
物理的なプロセッサの利用率を求め、
前記物理的なプロセッサで実行されることによって実現される複数の仮想マシンごとに、前記仮想マシンの種別に応じて設定される、クロック周波数を制御する制御情報に基づいて前記仮想マシンに要求される処理能力を提供可能な前記物理的なプロセッサの利用率を示すしきい値を求め、
前記仮想マシンごとに、前記しきい値と前記物理的なプロセッサの利用率との比較結果に基づいてクロック周波数を決定することを特徴とする制御方法。
【請求項５】
物理的なプロセッサの利用率を求め、
前記物理的なプロセッサで実行されることによって実現される複数の仮想マシンごとに、前記仮想マシンの種別に応じて設定される、クロック周波数を制御する制御情報をメモリから読み出して前記制御情報に基づいて前記仮想マシンに要求される処理能力を提供可能な前記物理的なプロセッサの利用率を示すしきい値を求め、
前記仮想マシンごとに、前記しきい値と前記物理的なプロセッサの利用率との比較結果に基づいてクロック周波数を決定する、
処理をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、計算機、制御方法及びプログラムに関する。
【背景技術】
【０００２】
従来、計算機において、一つの物理的なＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置）上で複数のＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ、オペレーティングシステム）を動作させて複数の仮想マシンを実行する仮想化システムがある。仮想化システムにおいて、各仮想マシンへ仮想バッテリを提供し、仮想マシンが駆動中であればＣＰＵ使用時間を放電量に換算し、仮想マシンが停止中であれば停止時間を充電量に換算して、仮想バッテリの残量を制御する技術がある。また、物理的なＣＰＵに割り当てられている仮想マシンを削除した結果、仮想マシンの割り当てがなくなった物理的なＣＰＵをスリープ状態に移行させることによって、消費電力の低減を図る技術がある。また、データ処理システム内に生成された区画に、物理リソースのセットのうちの少なくともいくつかの物理リソースを割り当て、割り当てられなかった物理リソースの電力消費を低減する技術がある。また、物理リソースに供給するクロック周波数を低くすることにより、電力消費量を低減する技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−３３２０７号公報
【特許文献２】特開２００９−１４０１５７号公報
【特許文献３】特開２００４−１９２６１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来の技術では、物理的なＣＰＵの負荷の状態にかかわらず、各仮想マシンは、予め設定されているクロック周波数で動作する。そのため、物理的なＣＰＵが負荷の低い状態にあるため、各仮想マシンを低速で実行することができる状態であるにもかかわらず、仮想マシンに高いクロック周波数が設定されている場合には、物理的なＣＰＵが高いクロック周波数で動作することがある。また、物理的なＣＰＵの負荷に応じて物理的なＣＰＵのクロック周波数の上げ下げを行う場合、クロック周波数が低くてもかまわない仮想マシンが物理的なＣＰＵに割り当てられているときでも、物理的なＣＰＵの負荷が高い状態のときには、物理的なＣＰＵが高いクロック周波数で動作することがある。このように、物理的なＣＰＵが低いクロック周波数で動作することができる状況のときでも、それよりも高いクロック周波数で物理的なＣＰＵが動作することがあるため、無駄な電力を消費してしまうという問題点がある。
【０００５】
消費電力を削減することができる計算機、制御方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
計算機は、１個以上の物理的なプロセッサ、管理表、決定部及び変更部を備えている。管理表は、複数の仮想マシンごとに、クロック周波数を制御する制御情報を管理する。仮想マシンは、物理的なプロセッサで実行されることによって実現される。制御情報は、仮想マシンの種別に応じて設定されている。決定部は、仮想マシンごとに、管理表の制御情報に基づいてしきい値を求める。決定部は、仮想マシンごとに、しきい値と物理的なプロセッサの利用率とに基づいてクロック周波数を決定する。変更部は、決定部により決定されたクロック周波数に基づいて物理的なプロセッサのクロック周波数を変更する。
【発明の効果】
【０００７】
この計算機、制御方法及びプログラムによれば、消費電力を削減することができる。
【図面の簡単な説明】
【０００８】
【図１】図１は、実施例１にかかる計算機を示すブロック図である。
【図２】図２は、実施例２にかかる計算機のハードウェア構成を示すブロック図である。
【図３】図３は、実施例２にかかる計算機の機能的な構成を示すブロック図である。
【図４】図４は、実施例２にかかる計算機の管理表の一例を示す図表である。
【図５】図５は、実施例２にかかる制御方法におけるＣＰＵ周波数定期更新処理を示すフローチャートである。
【図６】図６は、実施例２にかかる制御方法における仮想マシン割り当て処理を示すフローチャートである。
【図７】図７は、実施例２にかかる制御方法におけるＣＰＵ周波数切り替え処理を示すフローチャートである。
【図８】図８は、実施例２にかかる制御方法におけるフロント係数設定変更処理を示すフローチャートである。
【図９】図９は、ＣＰＵの利用率が下降していく例における各種情報の一例を示す図表である。
【図１０】図１０は、ＣＰＵの利用率が下降していく例におけるＣＰＵ周波数の一例を示す模式図である。
【図１１】図１１は、ＣＰＵの利用率が上昇していく例における各種情報の一例を示す図表である。
【図１２】図１２は、ＣＰＵの利用率が上昇していく例におけるＣＰＵ周波数の一例を示す模式図である。
【図１３】図１３は、フォアグラウンドで動作する仮想マシンを切り替える例における各種情報の一例を示す図表である。
【図１４】図１４は、フォアグラウンドで動作する仮想マシンを切り替える例におけるＣＰＵ周波数の一例を示す模式図である。
【図１５】図１５は、新たに仮想マシンが起動する例における各種情報の一例を示す図表である。
【図１６】図１６は、新たに仮想マシンが起動する例におけるＣＰＵ周波数の一例を示す模式図である。
【発明を実施するための形態】
【０００９】
以下に添付図面を参照して、この計算機、制御方法及びプログラムの好適な実施の形態を詳細に説明する。計算機、制御方法及びプログラムは、仮想マシンごとに、仮想マシンの種別に応じた制御情報に基づいてしきい値を求め、しきい値とプロセッサの利用率（負荷）とに基づいてクロック周波数を決定し、プロセッサのクロック周波数を決定したクロック周波数に変更するものである。以下の各実施例の説明においては、同様の構成要素には同一の符号を付して、重複する説明を省略する。
【００１０】
（実施例１）
図１は、実施例１にかかる計算機を示すブロック図である。図１に示すように、計算機は、１個以上の物理的なプロセッサ３、管理表４、決定部５及び変更部６を備えている。
【００１１】
管理表４は、複数の仮想マシン１，２ごとに、クロック周波数を制御する制御情報を管理する。仮想マシン１，２は、物理的なプロセッサ３で実行されることによって実現される。制御情報は、仮想マシン１，２の種別に応じて設定されている。決定部５は、仮想マシン１，２ごとに、管理表４の制御情報に基づいてしきい値を求める。決定部５は、仮想マシン１，２ごとに、しきい値と物理的なプロセッサ３の利用率とに基づいてクロック周波数を決定する。変更部６は、決定部５により決定されたクロック周波数に基づいて物理的なプロセッサ３のクロック周波数を変更する。
【００１２】
実施例１によれば、仮想マシン１，２の種別に応じて仮想マシン１，２のクロック周波数が決まり、それに応じて物理的なプロセッサ３のクロック周波数が変更される。例えば、物理的なプロセッサ３の利用率に連動してクロック周波数が変動する仮想マシン１，２の場合には、物理的なプロセッサ３の利用率に連動したクロック周波数で物理的なプロセッサ３が動作する。物理的なプロセッサ３の利用率に連動し、かつ重み付けされてクロック周波数が変動する仮想マシン１，２の場合には、物理的なプロセッサ３の利用率に連動し、かつ重み付けされたクロック周波数で物理的なプロセッサ３が動作する。一定のクロック周波数で動作する仮想マシン１，２の場合には、一定のクロック周波数で物理的なプロセッサ３が動作する。つまり、物理的なプロセッサ３が低いクロック周波数で動作することができる状況のときには、物理的なプロセッサ３が低いクロック周波数で動作するので、計算機の消費電力を削減することができる。
【００１３】
（実施例２）
・ハードウェア構成の説明
図２は、実施例２にかかる計算機のハードウェア構成を示すブロック図である。図２に示すように、計算機は、物理的なプロセッサとして例えばＣＰＵ１１、表示部１２、キー１３、メインメモリ１４及びＮＡＮＤ（Ｎｏｔ  ＡＮＤ）メモリ１５を備えている。ＣＰＵ１１、表示部１２、キー１３、メインメモリ１４及びＮＡＮＤメモリ１５は、バス１６に接続されている。
【００１４】
ＣＰＵ１１は、計算機全体の制御を司る。ＣＰＵ１１は、後述するプログラムを実行し、後述する種々の仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）や仮想マシンモニタを実現する。ＣＰＵ１１は、クロック周波数（ＣＰＵ周波数）や駆動電圧を動的に変更することができるものである。表示部１２は、例えば液晶パネルを備えている。キー１３は、例えば数字や文字を入力するためのキーやボタンを備えている。キー１３は、表示部１２と一体化されたタッチパネルを備えており、表示部１２に表示されたキーの画像に触れることにより数字や文字を入力することができるようになっていてもよい。
【００１５】
メインメモリ１４は、ＣＰＵ１１の作業領域として用いられる。メインメモリ１４には、例えばＯＳやアプリケーションのプログラムが展開されてもよい。ＣＰＵ１１は、メインメモリ１４に展開されたＯＳやアプリケーションのプログラムを実行してもよい。メインメモリ１４は、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を備えている。
【００１６】
ＮＡＮＤメモリ１５は、例えばＯＳやアプリケーションのプログラムを格納している。ＯＳやアプリケーションのプログラムは、ＮＡＮＤメモリ１５から読み出されてメインメモリ１４に展開されてもよい。ＮＡＮＤメモリ１５は、不揮発性のメモリとして、例えばＮＡＮＤ型のフラッシュメモリを備えていてもよい。計算機は、ＮＡＮＤメモリ１５の代わりに、他の不揮発性メモリを備えていてもよい。
【００１７】
なお、計算機が携帯電話機などの無線通信端末である場合には、計算機は無線通信部を備えている。また、計算機は、画像処理や音声処理を行うＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）や、外部メモリとのインタフェースなどを備えていてもよい。
【００１８】
・機能的な構成の説明
図３は、実施例２にかかる計算機の機能的な構成を示すブロック図である。図３に示すように、計算機は、複数の仮想マシン２１〜２５及び仮想マシンモニタ２６を備えている。仮想マシン２１〜２５及び仮想マシンモニタ２６は、ＣＰＵ１１が仮想マシン及び仮想マシンモニタを実現するプログラムを実行することにより実現されてもよい。例えば各仮想マシン２１〜２５では、独立してＯＳが実行されてもよい。以下の説明では、仮想マシン２１〜２５のＩＤ（Ｉｄｅｎｔｉｆｉｅｒ、識別子）を例えばＡ、Ｂ、Ｃ、Ｄ及びＥとする。
【００１９】
仮想マシン２１，２２は、ゲスト仮想マシン（以下、ゲストＶＭと表記する）である。ゲスト仮想マシン２１及びゲスト仮想マシン２２を、それぞれ、ゲストＶＭ−Ａ２１及びゲストＶＭ−Ｂ２２と表記することがある。ゲストＶＭ−Ａ２１及びゲストＶＭ−Ｂ２２は、ユーザーが使用するアプリケーションを動作させる仮想マシンである。ゲストＶＭは、使用形態に応じて、一つだけ起動されてもよいし、複数起動されてもよい。
【００２０】
ゲストＶＭは、例えばフロントエンドドライバ２７，２８を備えている。フロントエンドドライバ２７，２８は、ゲストＶＭがデバイスを操作する際に利用されるモジュールである。フロントエンドドライバ２７，２８は、後述するドライバ仮想マシンと連携して、デバイスを操作する処理を行う。
【００２１】
仮想マシン２３，２４は、ドライバ仮想マシン（以下、ドライバＶＭと表記する）である。ドライバ仮想マシン２３及びドライバ仮想マシン２４を、それぞれ、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４と表記することがある。ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４は、デバイスを制御するデバイスドライバを動作させる仮想マシンである。デバイス種別ごとにドライバＶＭが起動されることがあるので、複数のドライバＶＭが起動されることがある。
【００２２】
ドライバＶＭは、例えばバックエンドドライバ２９，３０を備えている。バックエンドドライバ２９，３０は、ゲストＶＭのフロントエンドドライバ２７，２８からの要求を受けて、デバイスの操作を行う。図示例では、例えばドライバＶＭ−Ｃ２３のバックエンドドライバ２９は、キー１３の操作を行う。例えばドライバＶＭ−Ｄ２４のバックエンドドライバ３０は、ＮＡＮＤメモリ１５の操作を行う。
【００２３】
仮想マシン２５は、サービス仮想マシン（以下、サービスＶＭと表記する）である。サービス仮想マシン２５をサービスＶＭ−Ｅ２５と表記することがある。サービスＶＭ−Ｅ２５は、ユーザーにより直接操作されるわけではなく、バックグラウンドで動作する。サービスＶＭ−Ｅ２５は、例えばウイルスチェックなどシステムに必要な補助的なサービスを実施する。
【００２４】
仮想マシンモニタ２６は、一つのＣＰＵ１１を複数の仮想マシンとして利用する制御を行う。それによって、一つのＣＰＵ１１を複数の仮想マシンとして利用することができる。仮想マシンモニタ２６は、決定部として例えばゲスト電力制御モジュール３１を備えている。ゲスト電力制御モジュール３１は、例えば管理表としてゲスト電力制御管理表３２を備えている。
【００２５】
ゲスト電力制御モジュール３１は、一定間隔またはゲストＶＭの切り替え時に動作して、ゲスト電力制御管理表３２を参照し、更新の必要があるときにはゲスト電力制御管理表３２を更新する。ゲスト電力制御モジュール３１は、各仮想マシンのＣＰＵ周波数を変更する必要があるか否かを判断し、変更の必要がある場合には後述するＣＰＵ周波数切り替え処理を行う。
【００２６】
ゲスト電力制御管理表３２は、仮想マシンごとに、仮想マシンの種別や動作状態に応じて電力制御を行うのに必要な情報を保持する。ゲスト電力制御管理表３２は、例えばメインメモリ１４やＮＡＮＤメモリ１５に記憶される。仮想マシンの種別には、例えば上述したゲストＶＭやドライバＶＭやサービスＶＭなどがある。仮想マシンの動作状態には、例えばフォアグラウンドで動作している状態とバックグラウンドで動作している状態がある。
【００２７】
また、ゲスト電力制御管理表３２の一部として、あるいはゲスト電力制御管理表３２とは別に、後述するＭａｘデフォルト値及びＭｉｎデフォルト値、並びにフロント係数のデフォルト値が、例えばメインメモリ１４やＮＡＮＤメモリ１５に記憶されていてもよい。
【００２８】
仮想マシンモニタ２６は、画面切り替え制御モジュール３３、ＣＰＵスケジューラ３４、及び変更部として例えばＣＰＵ周波数変更処理モジュール３５を備えている。画面切り替え制御モジュール３３は、ユーザーが、計算機の図示しない画面切り替えキーを押下するなどの画面の切り替え操作を行ったときに呼び出される。画面切り替え制御モジュール３３は、新規にフロント画面で操作されるゲストＶＭ、すなわちフォアグラウンドで動作するゲストＶＭを決定し、フロント画面で操作されるゲストＶＭを切り替える。
【００２９】
ＣＰＵスケジューラ３４は、ＣＰＵ１１に仮想マシンを割り当てる制御を行う。割り当て方の一例として、例えばＣＲＥＤＩＴやＳＥＤＦ（Ｓｉｍｐｌｅ  Ｅａｒｌｉｅｓｔ  Ｄｅａｄｌｉｎｅ  Ｆｉｒｓｔ）やＢＶＴ（Ｂｏｒｒｏｗｅｄ  Ｖｉｒｔｕａｌ  Ｔｉｍｅ）などのポリシーがある。また、複数のポリシーの中から適宜選択して割り当てるようにしてもよい。ＣＰＵスケジューラ３４は、ＣＰＵ１１で動作させる仮想マシンの切り替えに合わせてゲスト電力制御モジュール３１のＣＰＵ周波数切り替え処理を呼び出す。ＣＰＵ周波数変更処理モジュール３５は、ＣＰＵ１１のＣＰＵ周波数を変更する処理を実行する。
【００３０】
・ゲスト電力制御管理表の一例
図４は、実施例２にかかる計算機の管理表の一例を示す図表である。図４に示すように、ゲスト電力制御管理表３２は、例えばＶＭ＿ＩＤフィールド、ＶＭタイプ係数フィールド、フロント係数フィールド及びＣＰＵ周波数フィールドを有する。ＶＭ＿ＩＤフィールドには、仮想マシンのＩＤが格納される。ＶＭタイプ係数フィールドには、仮想マシンの種別に関する制御情報としてＶＭタイプ係数の値が格納される。仮想マシンの種別に関する制御情報は、仮想マシンの種別に応じて予め設定されていてもよい。
【００３１】
フロント係数フィールドには、仮想マシンの動作状態に関する制御情報としてフロント係数の値が格納される。仮想マシンの動作状態に関する制御情報は、仮想マシンがフォアグラウンドで動作しているか、バックグラウンドで動作しているか、によって動的に変化してもよい。ＣＰＵ周波数フィールドには、仮想マシンが動作する際にＣＰＵ１１に設定されるＣＰＵ周波数が格納される。
【００３２】
・仮想マシンのＣＰＵ周波数の決定方法の一例
ＶＭタイプ係数の値及びフロント係数の値は、例えば次の（１）式及び（２）式において用いられる。（１）式及び（２）式において、しきい値Ｍａｘ及びしきい値Ｍｉｎは、それぞれ、ＣＰＵ１１の利用率と比較されるしきい値の最大値及び最小値である。ゲスト電力制御モジュール３１は、ＣＰＵ１１の利用率がしきい値Ｍａｘよりも大きい場合には仮想マシンのＣＰＵ周波数を高くし、ＣＰＵ１１の利用率がしきい値Ｍｉｎよりも小さい場合には仮想マシンのＣＰＵ周波数を低くするように、制御する。Ｍａｘデフォルト値及びＭｉｎデフォルト値は、それぞれ、しきい値の最大値及び最小値のデフォルト値であり、予め設定されていてもよい。
【００３３】
【数１】
0005703799.tif 000002
【００３４】
【数２】
0005703799.tif 000003
【００３５】
（１）式及び（２）式によれば、ＶＭタイプ係数の値が大きいと、しきい値Ｍａｘ及びしきい値Ｍｉｎがともに大きくなるので、仮想マシンのＣＰＵ周波数は、ＣＰＵ１１の利用率が大きくなっても高くなりにくく、かつＣＰＵ１１の利用率が小さくなると低くなりやすい。つまり、ＶＭタイプ係数の値が大きい仮想マシンは、できるだけ低いＣＰＵ周波数で動作するように制御される。
【００３６】
それに対して、ＶＭタイプ係数の値が小さいと、しきい値Ｍａｘ及びしきい値Ｍｉｎがともに小さくなるので、仮想マシンのＣＰＵ周波数は、ＣＰＵ１１の利用率が大きくなると高くなりやすく、かつＣＰＵ１１の利用率が小さくなっても低くなりにくい。つまり、ＶＭタイプ係数の値が小さい仮想マシンは、できるだけ高いＣＰＵ周波数で動作するように制御される。
【００３７】
例えば図４に示す例では、ＶＭタイプ係数の標準値は例えば１である。仮想マシンのＩＤがＡ及びＢであるゲストＶＭのＶＭタイプ係数は標準値に設定されている。ゲストＶＭは、ＣＰＵ１１の利用率に連動してＣＰＵ周波数が変動する仮想マシンである。
【００３８】
仮想マシンのＩＤがＣ及びＤであるドライバＶＭのＶＭタイプ係数は標準値や標準値と異なる値、例えば１や１．２に設定されている。ドライバＶＭは、ＣＰＵ１１の利用率に連動し、かつ重み付けされてＣＰＵ周波数が変動する仮想マシンである。例えば、ドライバＶＭ−ＣのＶＭタイプ係数の値は１であり、ドライバＶＭ−ＤのＶＭタイプ係数の値は１．２であるので、ドライバＶＭ−ＣはドライバＶＭ−Ｄよりも高いＣＰＵ周波数で動作しやすいように設定されていることになる。
【００３９】
仮想マシンのＩＤがＥであるサービスＶＭのＶＭタイプ係数の値は例えば０に設定されている。ＶＭタイプ係数の値が例えば０に設定されている仮想マシンは、ＣＰＵ１１の利用率に連動しないで、一定のＣＰＵ周波数で動作する仮想マシンである。
【００４０】
また、フロント係数の値についても同様であり、フロント係数の値が大きい仮想マシンは、できるだけ低いＣＰＵ周波数で動作するように制御される。フロント係数の値が小さい仮想マシンは、できるだけ高いＣＰＵ周波数で動作するように制御される。
【００４１】
例えば図４に示す例では、フロント係数のデフォルト値は例えば０．９である。仮想マシンのＩＤがＡであるゲストＶＭのフロント係数はデフォルト値に設定されている。仮想マシンのＩＤがＢであるゲストＶＭのフロント係数はデフォルト値よりも大きい値、例えば１に設定されている。従って、ゲストＶＭ−ＡはゲストＶＭ−Ｂよりも高いＣＰＵ周波数で動作しやすいように設定されていることになり、ゲストＶＭ−Ａがフォアグラウンドで動作し、ゲストＶＭ−Ｂがバックグラウンドで動作していることになる。
【００４２】
・制御方法の説明
［ＣＰＵ周波数定期更新処理］
図５は、実施例２にかかる制御方法におけるＣＰＵ周波数定期更新処理を示すフローチャートである。ＣＰＵ周波数定期更新処理は、ゲスト電力制御モジュール３１により一定間隔で定期的に実施される。
【００４３】
図５に示すように、ＣＰＵ周波数定期更新処理は、例えば計算機に内蔵されたタイマーの割り込みにより一定間隔おきに起動される。ＣＰＵ周波数定期更新処理が開始されると、ゲスト電力制御モジュール３１は、まず、例えばＣＰＵスケジューラ３４のＣＰＵ負荷計測モジュール（図３において図示省略）を呼び出し、直近の計算機全体でのＣＰＵ１１の利用率を算出する（ステップＳ１）。
【００４４】
次いで、ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２を参照し、一番目の仮想マシンのＶＭタイプ係数の値が０であるか否かを判断する（ステップＳ２）。なお、ステップＳ２をステップＳ１の前に行ってもよい。ＶＭタイプ係数の値が０でない場合（ステップＳ２：Ｎｏ）、ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２を参照し、例えば上述した（１）式及び（２）式に基づいて、しきい値Ｍａｘ及びしきい値Ｍｉｎを計算する（ステップＳ３）。なお、ステップＳ１の前にステップＳ２及びステップＳ３を行ってもよい。
【００４５】
次いで、ゲスト電力制御モジュール３１は、ステップＳ１で算出したＣＰＵ１１の利用率がしきい値Ｍａｘよりも大きいか否か、またはしきい値Ｍｉｎよりも小さいか否か、を判断する（ステップＳ４）。しきい値Ｍａｘよりも大きいか、またはしきい値Ｍｉｎよりも小さい場合（ステップＳ４：Ｙｅｓ）、ゲスト電力制御モジュール３１は、当該仮想マシンのＣＰＵ周波数を決定する。そして、ゲスト電力制御モジュール３１は、決定したＣＰＵ周波数が現在の設定値と異なる場合には、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、当該仮想マシンに対応する格納値を更新する（ステップＳ５）。
【００４６】
ステップＳ５では、例えば、ＣＰＵ１１の利用率がしきい値Ｍａｘよりも大きい場合には、当該仮想マシンのＣＰＵ周波数を現在の設定値よりも高くしてもよい。ＣＰＵ周波数を現在の設定値よりも高くする場合には、例えば複数段階に設定可能なＣＰＵ周波数の最も高い周波数が設定されてもよい。例えばＣＰＵ周波数が６００ＭＨｚ、５００ＭＨｚ、２５０ＭＨｚ及び１２５ＭＨｚの４段階に設定可能である場合、最も高い６００ＭＨｚが設定されてもよい。
【００４７】
また、例えば、ＣＰＵ１１の利用率がしきい値Ｍｉｎよりも小さい場合には、当該仮想マシンのＣＰＵ周波数を現在の設定値よりも低くしてもよい。ＣＰＵ周波数を現在の設定値よりも低くする場合には、例えば複数段階に設定可能なＣＰＵ周波数の一段低い周波数が設定されてもよい。例えばＣＰＵ周波数が６００ＭＨｚ、５００ＭＨｚ、２５０ＭＨｚ及び１２５ＭＨｚの４段階に設定可能であり、現在の設定値が５００ＭＨｚである場合、一段低い２５０ＭＨｚが設定されてもよい。
【００４８】
次いで、ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの格納値が更新された仮想マシンが現在、ＣＰＵ１１で動作中である場合には、ＣＰＵ周波数変更処理モジュール３５を呼び出す。呼び出されたＣＰＵ周波数変更処理モジュール３５は、ＣＰＵ１１のＣＰＵ周波数の設定を、ステップＳ５で決定された周波数に更新する（ステップＳ６）。
【００４９】
そして、ステップＳ７へ進む。一方、仮想マシンのＶＭタイプ係数の値が０である場合（ステップＳ２：Ｙｅｓ）、またはＣＰＵ１１の利用率がしきい値Ｍｉｎ以上で、かつしきい値Ｍａｘ以下である場合（ステップＳ４：Ｎｏ）も、ステップＳ７へ進む。
【００５０】
ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２にエントリのある全ての仮想マシンについて上述した一連の更新処理が終了したか否かを判断する（ステップＳ７）。終了していれば（ステップＳ７：Ｙｅｓ）、一連のＣＰＵ周波数定期更新処理が終了となる。終了していなければ（ステップＳ７：Ｎｏ）、ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２を参照し、次の仮想マシンについてステップＳ２〜ステップＳ７の処理を行う。ゲスト電力制御モジュール３１は、以上の一連の処理を、ゲスト電力制御管理表３２にエントリのある全ての仮想マシンについて終了するまで、繰り返す。
【００５１】
［仮想マシン割り当て処理］
図６は、実施例２にかかる制御方法における仮想マシン割り当て処理を示すフローチャートである。仮想マシン割り当て処理は、ＣＰＵスケジューラ３４により実施される。
【００５２】
図６に示すように、仮想マシン割り当て処理は、例えば計算機に内蔵されたタイマーの割り込みにより起動される。ＣＰＵ１１にある仮想マシンが割り当てられて動作しているときに仮想マシン割り当て処理が開始されると、ＣＰＵスケジューラ３４は、それまでＣＰＵ１１で動作していた仮想マシンの状態をメインメモリ１４やＮＡＮＤメモリ１５に保存する（ステップＳ１１）。ＣＰＵ１１で動作していた仮想マシンの状態は、ＣＰＵ１１のレジスタから得られる。
【００５３】
次いで、ＣＰＵスケジューラ３４は、ポリシーに従って、次に動作させる仮想マシンを選択し、選択した仮想マシンの動作時間を決定する（ステップＳ１２）。次いで、ＣＰＵスケジューラ３４は、ステップＳ１２で選択した仮想マシンの動作が開始された後の次のタイマーの割り込みタイミング、すなわちＣＰＵスケジューラ３４の起動タイミングを設定する（ステップＳ１３）。
【００５４】
次いで、ＣＰＵスケジューラ３４は、ＣＰＵ１１のＣＰＵ周波数を切り替える処理を行う（ステップＳ１４）。ＣＰＵ１１のＣＰＵ周波数を切り替える処理（ＣＰＵ周波数切り替え処理）については後述する。次いで、ＣＰＵスケジューラ３４は、ステップＳ１２で選択した仮想マシンの状態を、以前に保存したメモリ領域から読み出し、ＣＰＵ１１のレジスタに仮想マシンの状態を設定して復元する（ステップＳ１５）。これによって、ＣＰＵスケジューラ３４によって新たにスケジューリングされた仮想マシンの実行が開始される。そして、ＣＰＵスケジューラ３４は、仮想マシン割り当て処理を終了する。
【００５５】
［仮想マシン切り替え時のＣＰＵ周波数切り替え処理］
図７は、実施例２にかかる制御方法におけるＣＰＵ周波数切り替え処理を示すフローチャートである。仮想マシン切り替え時のＣＰＵ周波数切り替え処理は、上述した仮想マシンの切り替え時にＣＰＵスケジューラ３４から呼び出される。
【００５６】
図７に示すように、ＣＰＵ周波数切り替え処理では、ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２から、切り替え前の仮想マシンのＣＰＵ周波数、及び切り替え後の仮想マシンのＣＰＵ周波数を参照する（ステップＳ２１）。切り替え前の仮想マシンは、現在ＣＰＵ１１で動作中の仮想マシンである。切り替え後の仮想マシンは、次に動作する仮想マシンである。
【００５７】
次いで、ゲスト電力制御モジュール３１は、切り替え前の仮想マシンのＣＰＵ周波数と、切り替え後の仮想マシンのＣＰＵ周波数とが異なるか否かを判断する（ステップＳ２２）。異なる場合（ステップＳ２２：Ｙｅｓ）、ゲスト電力制御モジュール３１は、ＣＰＵ周波数変更処理モジュール３５を呼び出す。呼び出されたＣＰＵ周波数変更処理モジュール３５は、ＣＰＵ１１のＣＰＵ周波数の設定を、次に動作する仮想マシンのＣＰＵ周波数に更新する（ステップＳ２３）。そして、ＣＰＵスケジューラ３４による仮想マシン割り当て処理に戻る。
【００５８】
一方、切り替え前の仮想マシンのＣＰＵ周波数と、切り替え後の仮想マシンのＣＰＵ周波数とが同じである場合も（ステップＳ２２：Ｎｏ）、ＣＰＵスケジューラ３４による仮想マシン割り当て処理に戻る。
【００５９】
［フロント係数設定変更処理］
図８は、実施例２にかかる制御方法におけるフロント係数設定変更処理を示すフローチャートである。ユーザーによる画面の切り替え操作によって画面切り替え制御モジュール３３が呼び出されると、画面切り替え制御モジュール３３によってフロント係数設定変更処理が呼び出される。
【００６０】
図８に示すように、フロント係数設定変更処理が開始されると、ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２を参照し、一番目の仮想マシンがフォアグラウンドで動作しているか否かを判断する（ステップＳ３１）。フォアグラウンドで動作している場合（ステップＳ３１：Ｙｅｓ）、ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２のフロント係数フィールドの、当該仮想マシンに対応する格納値をデフォルト値に設定する（ステップＳ３２）。
【００６１】
そして、ステップＳ３４へ進む。一方、仮想マシンがフォアグラウンドで動作していない場合（ステップＳ３１：Ｎｏ）、ゲスト電力制御管理表３２のフロント係数フィールドの、当該仮想マシンに対応する格納値をデフォルト値よりも大きい値に設定する（ステップＳ３３）。そして、ステップＳ３４へ進む。
【００６２】
ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２にエントリのある全ての仮想マシンについて上述した一連の変更処理が終了したか否かを判断する（ステップＳ３４）。終了していれば（ステップＳ３４：Ｙｅｓ）、一連のフロント係数設定変更処理が終了となる。終了していなければ（ステップＳ３４：Ｎｏ）、ゲスト電力制御モジュール３１は、ゲスト電力制御管理表３２を参照し、次の仮想マシンについてステップＳ３１〜ステップＳ３４の処理を行う。ゲスト電力制御モジュール３１は、以上の一連の処理を、ゲスト電力制御管理表３２にエントリのある全ての仮想マシンについて終了するまで、繰り返す。
【００６３】
・動作の具体例
以下の各具体例では、図３に示す構成を例にして説明する。例えば、設定可能なＣＰＵ周波数を６００ＭＨｚ、５００ＭＨｚ、２５０ＭＨｚ及び１２５ＭＨｚとして説明する。例えば、Ｍａｘデフォルト値を８０％とし、Ｍｉｎデフォルト値を７５％として説明する。また、ＣＰＵ周波数を現在の設定値よりも高くする場合には、設定可能なＣＰＵ周波数の最も高い周波数が設定され、ＣＰＵ周波数を現在の設定値よりも低くする場合には、設定可能なＣＰＵ周波数の一段低い周波数が設定されるとして説明する。なお、設定可能なＣＰＵ周波数、Ｍａｘデフォルト値及びＭｉｎデフォルト値は、これに限らないし、ＣＰＵ周波数の設定値を変更する場合もこの例に限らない。
【００６４】
［具体例１．ＣＰＵの利用率が下降していく例］
図９は、ＣＰＵの利用率が下降していく例における各種情報の一例を示す図表である。図９に示す図表において、各仮想マシンのしきい値Ｍａｘ及びしきい値Ｍｉｎは、上述した（１）式及び（２）式から算出したものである（図１１、図１３及び図１５においても同じ）。具体例１では、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４のＣＰＵ周波数が６００ＭＨｚであり、サービスＶＭ−Ｅ２５のＣＰＵ周波数が２５０ＭＨｚである状態から説明する。
【００６５】
図１０は、ＣＰＵの利用率が下降していく例におけるＣＰＵ周波数の一例を示す模式図である。直近のＣＰＵ利用率が１００％である場合、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４については、ＣＰＵ利用率がしきい値Ｍａｘを超えているので、最も高い周波数である６００ＭＨｚが設定される。サービスＶＭ−Ｅ２５は、しきい値Ｍａｘ及びしきい値Ｍｉｎがともに０である。しきい値Ｍａｘ及びしきい値Ｍｉｎがともに０である仮想マシンのＣＰＵ周波数は、ＣＰＵ利用率に関係なく、一定のままである。従って、サービスＶＭ−Ｅ２５のＣＰＵ周波数は、２５０ＭＨｚのままである。
【００６６】
直近のＣＰＵ利用率が８５％になると、ドライバＶＭ−Ｄ２４については、ＣＰＵ利用率がしきい値Ｍｉｎよりも小さいので、一段低い周波数である５００ＭＨｚが設定される。他の仮想マシンのＣＰＵ周波数は、変化しない。この場合、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ドライバＶＭ−Ｄ２４に対応する格納値が５００ＭＨｚとなる。
【００６７】
直近のＣＰＵ利用率が７０％になると、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４については、ＣＰＵ利用率がしきい値Ｍｉｎよりも小さいので、それぞれ、一段低い周波数である５００ＭＨｚ、５００ＭＨｚ及び２５０ＭＨｚが設定される。他の仮想マシンのＣＰＵ周波数は、変化しない。この場合、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４に対応する格納値は、それぞれ５００ＭＨｚ、５００ＭＨｚ及び２５０ＭＨｚとなる。
【００６８】
直近のＣＰＵ利用率が６５％になると、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４については、ＣＰＵ利用率がしきい値Ｍｉｎよりも小さいので、それぞれ、一段低い周波数である５００ＭＨｚ、２５０ＭＨｚ、２５０ＭＨｚ及び１２５ＭＨｚが設定される。サービスＶＭ−Ｅ２５のＣＰＵ周波数は、変化しない。この場合、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４に対応する格納値は、それぞれ５００ＭＨｚ、２５０ＭＨｚ、２５０ＭＨｚ及び１２５ＭＨｚとなる。
【００６９】
このように、ＣＰＵの利用率が下降していく場合、バックグラウンドで動作しているゲストＶＭ−ＢのＣＰＵ周波数が、フォアグラウンドで動作しているゲストＶＭ−ＡのＣＰＵ周波数よりも優先的に低くなっていく。また、同じドライバＶＭでも、ＶＭタイプ係数の値が大きい仮想マシンのＣＰＵ周波数が、優先的に低くなっていく。
【００７０】
［具体例２．ＣＰＵの利用率が上昇していく例］
図１１は、ＣＰＵの利用率が上昇していく例における各種情報の一例を示す図表である。具体例２では、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４のＣＰＵ周波数が１２５ＭＨｚであり、サービスＶＭ−Ｅ２５のＣＰＵ周波数が２５０ＭＨｚである状態から説明する。
【００７１】
図１２は、ＣＰＵの利用率が上昇していく例におけるＣＰＵ周波数の一例を示す模式図である。直近のＣＰＵ利用率が６５％である場合、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４については、ＣＰＵ利用率がしきい値Ｍｉｎよりも小さいので、一段低い周波数が設定される。ここでは、現在の設定値が最も低い１２５ＭＨｚであるので、１２５ＭＨｚが設定される。サービスＶＭ−Ｅ２５のＣＰＵ周波数は、２５０ＭＨｚのままである。
【００７２】
直近のＣＰＵ利用率が７５％になると、ゲストＶＭ−Ａ２１については、ＣＰＵ利用率がしきい値Ｍａｘを超えているので、最も高い周波数である６００ＭＨｚが設定される。他の仮想マシンのＣＰＵ周波数は、変化しない。この場合、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ゲストＶＭ−Ａ２１に対応する格納値が６００ＭＨｚとなる。
【００７３】
直近のＣＰＵ利用率が８５％になると、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２及びドライバＶＭ−Ｃ２３については、ＣＰＵ利用率がしきい値Ｍａｘを超えているので、最も高い周波数である６００ＭＨｚが設定される。他の仮想マシンのＣＰＵ周波数は、変化しない。この場合、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２及びドライバＶＭ−Ｃ２３に対応する格納値が６００ＭＨｚとなる。直近のＣＰＵ利用率が９５％になった場合も同様である。
【００７４】
このように、ＣＰＵの利用率が上昇していく場合、フォアグラウンドで動作しているゲストＶＭ−Ａ２１のＣＰＵ周波数が、バックグラウンドで動作しているゲストＶＭ−Ｂ２２のＣＰＵ周波数よりも優先的に高くなっていく。また、同じドライバＶＭでも、ＶＭタイプ係数の値が小さい仮想マシンのＣＰＵ周波数が、優先的に高くなっていく。
【００７５】
［具体例３．フォアグラウンドで動作する仮想マシンを切り替える例］
図１３は、フォアグラウンドで動作する仮想マシンを切り替える例における各種情報の一例を示す図表である。具体例３では、具体例２の図１１と同様に、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４のＣＰＵ周波数が１２５ＭＨｚであり、サービスＶＭ−Ｅ２５のＣＰＵ周波数が２５０ＭＨｚである状態から説明する。図１３に示す各種情報は、フォアグラウンドで動作する仮想マシンを切り替えた後の情報である。
【００７６】
図１４は、フォアグラウンドで動作する仮想マシンを切り替える例におけるＣＰＵ周波数の一例を示す模式図である。直近のＣＰＵ利用率が６５％である場合、具体例２と同様に、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４については、１２５ＭＨｚのＣＰＵ周波数が設定される。サービスＶＭ−Ｅ２５のＣＰＵ周波数は、２５０ＭＨｚのままである。
【００７７】
直近のＣＰＵ利用率が７５％になると、具体例２と同様に、ゲストＶＭ−Ａ２１のＣＰＵ周波数は、６００ＭＨｚに設定される。他の仮想マシンのＣＰＵ周波数は、変化しない。
【００７８】
ＣＰＵ利用率が７５％のままであるが、フォアグラウンドで動作する仮想マシンがゲストＶＭ−Ａ２１からゲストＶＭ−Ｂ２２に切り替わると、ゲストＶＭ−Ａ２１はバックグラウンドでの動作に切り替わる。それによって、図１３に示すように、ゲストＶＭ−Ａ２１のフロント係数が１に更新され、ゲストＶＭ−Ｂ２２のフロント係数が０．９に更新される。そして、ゲストＶＭ−Ａ２１のしきい値Ｍａｘ及びしきい値Ｍｉｎは、それぞれ８０％及び７５％に更新される。また、ゲストＶＭ−Ｂ２２のしきい値Ｍａｘ及びしきい値Ｍｉｎは、それぞれ７２％及び６８％に更新される。
【００７９】
従って、ゲストＶＭ−Ｂ２２については、ＣＰＵ利用率がしきい値Ｍａｘを超えることになるので、最も高い周波数である６００ＭＨｚが設定される。他の仮想マシンのＣＰＵ周波数は、変化しない。この場合、図１３に示すように、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ゲストＶＭ−Ｂ２２に対応する格納値が６００ＭＨｚとなる。
【００８０】
直近のＣＰＵ利用率が７０％になると、ゲストＶＭ−Ａ２１、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４については、ＣＰＵ利用率がしきい値Ｍｉｎよりも小さくなるので、一段低い周波数が設定される。ゲストＶＭ−Ａ２１のＣＰＵ周波数は、５００ＭＨｚに設定される。ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４については、現在の設定値が最も低い１２５ＭＨｚであるので、１２５ＭＨｚが設定される（図１４には現れていない）。他の仮想マシンのＣＰＵ周波数は、変化しない。この場合、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ゲストＶＭ−Ａ２１に対応する格納値が５００ＭＨｚとなる。
【００８１】
このように、ＣＰＵ利用率が上昇していくと、フォアグラウンドで動作しているゲストＶＭ−Ａ２１のＣＰＵ周波数が、バックグラウンドで動作しているゲストＶＭ−Ｂ２２のＣＰＵ周波数よりも優先的に高くなっていく。そして、フォアグラウンドで動作する仮想マシンが切り替わると、新たにフォアグラウンドで動作することになったゲストＶＭ−Ｂ２２のＣＰＵ周波数が、新たにバックグラウンドで動作することになったゲストＶＭ−Ａ２１のＣＰＵ周波数よりも優先的に高くなっていく。また、ＣＰＵ利用率が下降してきたとき、バックグラウンドで動作するゲストＶＭ−Ａ２１のＣＰＵ周波数が、フォアグラウンドで動作しているゲストＶＭ−Ｂ２２のＣＰＵ周波数よりも優先的に低くなっていく。
【００８２】
［具体例４．新たに仮想マシンが起動する例］
図１５は、新たに仮想マシンが起動する例における各種情報の一例を示す図表である。具体例４では、具体例１の図９と同様に、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４のＣＰＵ周波数が６００ＭＨｚであり、サービスＶＭ−Ｅ２５のＣＰＵ周波数が２５０ＭＨｚである状態から説明する。図１５に示す各種情報は、新たにＶＭ＿ＩＤがＦである仮想マシン（ゲストＶＭ−Ｆとする）が起動した後の情報である。
【００８３】
図１６は、新たに仮想マシンが起動する例におけるＣＰＵ周波数の一例を示す模式図である。直近のＣＰＵ利用率が１００％である場合、具体例１と同様に、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びドライバＶＭ−Ｄ２４については、６００ＭＨｚのＣＰＵ周波数が設定される。サービスＶＭ−Ｅ２５のＣＰＵ周波数は、２５０ＭＨｚのままである。
【００８４】
直近のＣＰＵ利用率が８５％になると、具体例１と同様に、ドライバＶＭ−Ｄ２４のＣＰＵ周波数が５００ＭＨｚに設定される。他の仮想マシンのＣＰＵ周波数は、変化しない。
【００８５】
ここで、ＣＰＵ利用率が８５％のままであるが、新たにゲストＶＭ−Ｆが起動されたとする。ゲストＶＭ−Ｆがバックグラウンドで動作すると、図１５に示すように、ＣＰＵ利用率がゲストＶＭ−Ｆのしきい値Ｍａｘ（８０％）を超えているので、ゲストＶＭ−ＦのＣＰＵ周波数は、最も高い周波数である６００ＭＨｚに設定される。
【００８６】
直近のＣＰＵ利用率が７０％になると、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３、ドライバＶＭ−Ｄ２４及びゲストＶＭ−Ｆについては、ＣＰＵ利用率がしきい値Ｍｉｎよりも小さいので、それぞれ、一段低い周波数である５００ＭＨｚ、５００ＭＨｚ、２５０ＭＨｚ及び５００ＭＨｚが設定される。他の仮想マシンのＣＰＵ周波数は、変化しない。この場合、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３、ドライバＶＭ−Ｄ２４及びゲストＶＭ−Ｆに対応する格納値は、それぞれ５００ＭＨｚ、５００ＭＨｚ、２５０ＭＨｚ及び５００ＭＨｚとなる。
【００８７】
直近のＣＰＵ利用率が６５％になると、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３、ドライバＶＭ−Ｄ２４及びゲストＶＭ−Ｆについては、ＣＰＵ利用率がしきい値Ｍｉｎよりも小さくなるので、一段低い周波数が設定される。ゲストＶＭ−Ａ２１のＣＰＵ周波数は、５００ＭＨｚに設定される。ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３及びゲストＶＭ−ＦのＣＰＵ周波数は、２５０ＭＨｚに設定される。ドライバＶＭ−Ｄ２４のＣＰＵ周波数は、１２５ＭＨｚに設定される。サービスＶＭ−Ｅ２５のＣＰＵ周波数は、２５０ＭＨｚのままである。この場合、ゲスト電力制御管理表３２のＣＰＵ周波数フィールドの、ゲストＶＭ−Ａ２１、ゲストＶＭ−Ｂ２２、ドライバＶＭ−Ｃ２３、ドライバＶＭ−Ｄ２４及びゲストＶＭ−Ｆに対応する格納値は、それぞれ５００ＭＨｚ、２５０ＭＨｚ、２５０ＭＨｚ、１２５ＭＨｚ及び２５０ＭＨｚとなる。
【００８８】
このように、新たに仮想マシンが起動しても、既に起動している仮想マシンと同様にＣＰＵ周波数が制御される。
【００８９】
実施例２によれば、実施例１と同様の効果が得られる。
【００９０】
上述した実施例１、２に関し、さらに以下の付記を開示する。
【００９１】
（付記１）１個以上の物理的なプロセッサと、前記物理的なプロセッサで実行されることによって実現される複数の仮想マシンごとに、前記仮想マシンの種別に応じて設定される、クロック周波数を制御する制御情報を管理する管理表と、前記仮想マシンごとに、前記管理表の制御情報に基づいてしきい値を求め、前記しきい値と前記物理的なプロセッサの利用率とに基づいてクロック周波数を決定する決定部と、前記決定部により決定されたクロック周波数に基づいて前記物理的なプロセッサのクロック周波数を変更する変更部と、を備えることを特徴とする計算機。
【００９２】
（付記２）前記制御情報は、前記仮想マシンごとに、前記仮想マシンがフォアグラウンドで動作しているか、バックグラウンドで動作しているか、に応じて設定される情報を含むことを特徴とする付記１に記載の計算機。
【００９３】
（付記３）前記決定部は、前記仮想マシンごとに、前記しきい値の最大値と最小値とを求め、前記物理的なプロセッサの利用率が前記しきい値の最大値よりも大きい場合にクロック周波数を上げ、前記物理的なプロセッサの利用率が前記しきい値の最小値よりも小さい場合にクロック周波数を下げるように決定することを特徴とする付記１または２に記載の計算機。
【００９４】
（付記４）前記決定部は、前記仮想マシンごとに、決定したクロック周波数に基づいて前記管理表を更新することを特徴とする付記１〜３のいずれか一つに記載の計算機。
【００９５】
（付記５）前記仮想マシンの種別の一つは、前記物理的なプロセッサの利用率に連動してクロック周波数が変動する仮想マシンであることを特徴とする付記１〜４のいずれか一つに記載の計算機。
【００９６】
（付記６）前記仮想マシンの種別の一つは、前記物理的なプロセッサの利用率に連動し、かつ重み付けされてクロック周波数が変動する仮想マシンであることを特徴とする付記１〜５のいずれか一つに記載の計算機。
【００９７】
（付記７）前記仮想マシンの種別の一つは、一定のクロック周波数で動作する仮想マシンであることを特徴とする付記１〜６のいずれか一つに記載の計算機。
【００９８】
（付記８）物理的なプロセッサの利用率を求め、前記物理的なプロセッサで実行されることによって実現される複数の仮想マシンごとに、前記仮想マシンの種別に応じて設定される、クロック周波数を制御する制御情報に基づいてしきい値を求め、前記仮想マシンごとに、前記しきい値と前記物理的なプロセッサの利用率とに基づいてクロック周波数を決定することを特徴とする制御方法。
【００９９】
（付記９）前記決定されたクロック周波数に基づいて前記物理的なプロセッサのクロック周波数を変更することを特徴とする付記８に記載の制御方法。
【０１００】
（付記１０）前記制御情報は、前記仮想マシンごとに、前記仮想マシンがフォアグラウンドで動作しているか、バックグラウンドで動作しているか、に応じて設定される情報を含むことを特徴とする付記８または９に記載の制御方法。
【０１０１】
（付記１１）前記仮想マシンごとに、前記しきい値の最大値と最小値とを求め、前記物理的なプロセッサの利用率が前記しきい値の最大値よりも大きい場合にクロック周波数を上げ、前記物理的なプロセッサの利用率が前記しきい値の最小値よりも小さい場合にクロック周波数を下げるように決定することを特徴とする付記８〜１０のいずれか一つに記載の制御方法。
【０１０２】
（付記１２）物理的なプロセッサの利用率を求め、前記物理的なプロセッサで実行されることによって実現される複数の仮想マシンごとに、前記仮想マシンの種別に応じて設定される、クロック周波数を制御する制御情報をメモリから読み出して前記制御情報に基づいてしきい値を求め、前記仮想マシンごとに、前記しきい値と前記物理的なプロセッサの利用率とに基づいてクロック周波数を決定する、処理をコンピュータに実行させるプログラム。
【０１０３】
（付記１３）前記決定されたクロック周波数に基づいて前記物理的なプロセッサのクロック周波数を変更することを特徴とする付記１２に記載のプログラム。
【０１０４】
（付記１４）前記制御情報は、前記仮想マシンごとに、前記仮想マシンがフォアグラウンドで動作しているか、バックグラウンドで動作しているか、に応じて設定される情報を含むことを特徴とする付記１２または１３に記載のプログラム。
【０１０５】
（付記１５）前記仮想マシンごとに、前記しきい値の最大値と最小値とを求め、前記物理的なプロセッサの利用率が前記しきい値の最大値よりも大きい場合にクロック周波数を上げ、前記物理的なプロセッサの利用率が前記しきい値の最小値よりも小さい場合にクロック周波数を下げるように決定することを特徴とする付記１２〜１４のいずれか一つに記載のプログラム。
【符号の説明】
【０１０６】
１，２，２１〜２５  仮想マシン
３，１１  プロセッサ
４，３２  管理表
５，３１  決定部
６，３５  変更部
【図１】
0005703799.tif 000004
【図２】
0005703799.tif 000005
【図３】
0005703799.tif 000006
【図４】
0005703799.tif 000007
【図５】
0005703799.tif 000008
【図６】
0005703799.tif 000009
【図７】
0005703799.tif 000010
【図８】
0005703799.tif 000011
【図９】
0005703799.tif 000012
【図１０】
0005703799.tif 000013
【図１１】
0005703799.tif 000014
【図１２】
0005703799.tif 000015
【図１３】
0005703799.tif 000016
【図１４】
0005703799.tif 000017
【図１５】
0005703799.tif 000018
【図１６】
0005703799.tif 000019