(57)【特許請求の範囲】
【請求項１】
各々が１以上の仮想プロセッサを有し１以上の物理プロセッサで走行される複数の仮想計算機を構築する構築機能と、
各仮想計算機の仮想プロセッサのスケジューリングを行うスケジューリング機能と
を有し、
前記スケジューリング機能が、スケジューリングの初期化の周期である第１の周期毎に、
（Ａ）仮想プロセッサのスケジューリングの初期化と、
（Ｂ）仮想プロセッサのスケジューリングと
を行い、
前記（Ａ）において、前記スケジューリング機能が、
（ａ１）各物理プロセッサの動作周波数の和と前記第１の周期の長さとを基に、第１の周期における前記１以上の物理プロセッサのプロセッササイクル数である全プロセッササイクル数を算出し、
（ａ２）各仮想計算機について、前記複数の仮想計算機のサービス率の比の通りに前記全プロセッササイクル数が配分された値である持ちサイクル数を算出し、
前記（Ｂ）において、前記スケジューリング機能が、
（ｂ１）各仮想計算機の持ちサイクル数を基に、仮想計算機内の仮想プロセッサをいずれかの物理プロセッサで走行させる、
ハイパバイザ。
【請求項２】
請求項１記載のハイパバイザであって、
前記（Ａ）において、前記スケジューリング機能が、
（ａ３）各物理プロセッサについて、物理プロセッサの動作周波数と、前記１以上の物理プロセッサに共通しサイクル数で表されるタイムスライスとを基に、タイムスライス時間長を算出し、
前記（Ｂ）において、仮想プロセッサの走行時間長が、その仮想プロセッサが走行する物理プロセッサのタイムスライス時間長に達した場合、その仮想プロセッサが停止し、
前記（Ｂ）において、前記スケジューリング機能が、
（ｂ２）仮想プロセッサの走行が停止する都度に、停止した仮想プロセッサを有する仮想計算機で使用されたプロセッササイクル数である使用サイクル数を更新し、
（ｂ０）前記（ｂ１）の前に、レディ状態の仮想計算機のうちで優先度が最小の仮想計算機を選択し、
使用サイクル数の更新は、停止した仮想プロセッサが走行していた物理プロセッサの動作周波数と、その仮想プロセッサが走行していた時間長である走行時間との積を、直前の使用サイクル数に加算することであり、
仮想計算機の優先度は、その仮想計算機の持ちサイクル数に対する使用サイクル数の割合であり、
前記（ｂ１）で走行させられる仮想プロセッサは、前記（ｂ０）で選択された仮想計算機名内の仮想プロセッサである、
ハイパバイザ。
【請求項３】
請求項２記載のハイパバイザであって、
前記（ｂ２）において、前記スケジューリング機能が、停止した仮想プロセッサを有する仮想計算機について、更新後の使用サイクル数が持ちサイクル数の値を上回った回数であるサービスアウト回数を更新し、
仮想計算機の優先度は、その仮想計算機の持ちサイクル数に対する使用サイクル数の割合に、その仮想計算機のサービスアウト回数が反映された値であり、
サービスアウトが発生した場合の使用サイクル数の更新は、停止した仮想プロセッサが走行していた物理プロセッサの動作周波数と、その仮想プロセッサが走行していた時間長である走行時間との積から、その仮想プロセッサを有する仮想計算機の持ちサイクル数が減算された値を、直前の使用サイクル数に加算することである、
ハイパバイザ。
【請求項４】
請求項２記載のハイパバイザであって、
物理プロセッサの動作周波数を変更する周波数調整処理を、前記周波数調整処理の周期である第２の周期毎に行う周波数調整機能と、
前記１以上の物理プロセッサにとっての現在時刻を特定し各物理プロセッサの時間利用率を算出する負荷監視機能と
を更に有し、
前記周波数調整機能は、別の要因である外部要因で物理プロセッサの動作周波数が変更されたことを検出し、外部要因で動作周波数が変更されたことを意味するフラグである外部要因フラグをＯＮとし、
前記時間利用率は、計算対象時間に対する仮想プロセッサ走行時間合計の割合であり、
前記仮想プロセッサ走行時間合計は、前記計算対象時間における、仮想プロセッサが走行した時間長の合計であり、
前記計算対象時間は、前記外部要因フラグがＯＮの場合、動作周波数の変化が検出された時刻から前記特定された現在時刻までの時間長であり、
前記計算対象時間は、前記外部要因フラグがＯＦＦの場合、直前回の前記周波数調整処理が行われた時刻から前記特定された現在時刻までの時間長であり、
前記周波数調整機能は、前記時間利用率を基に前記周波数調整処理を行い、前記周波数調整処理が終了した場合に、前記仮想プロセッサ走行時間合計及び時間利用率をリセットし、且つ、前記外部要因フラグをＯＦＦにし、
前記スケジューリング機能は、前記外部要因で動作周波数が変更された場合、前記（Ａ）を行ってから前記第１の周期を経過していなくても、前記（Ａ）を行う、
ハイパバイザ。
【請求項５】
請求項１記載のハイパバイザであって、
前記（Ｂ）において、前記スケジューリング機能が、
（ｂ２）仮想プロセッサの走行が停止する都度に、停止した仮想プロセッサを有する仮想計算機で使用されたプロセッササイクル数である使用サイクル数を更新し、
（ｂ０）前記（ｂ１）の前に、各仮想計算機の優先度に従って、仮想計算機を選択し、
使用サイクル数の更新は、停止した仮想プロセッサが走行していた物理プロセッサの動作周波数と、その仮想プロセッサが走行していた時間長である走行時間と、直前の使用サイクル数とを基に行われ、
仮想計算機の優先度は、その仮想計算機の使用サイクル数と持ちサイクル数とに基づく値であり、
前記（ｂ１）で走行させられる仮想プロセッサは、前記（ｂ０）で選択された仮想計算機名内の仮想プロセッサである、
ハイパバイザ。
【請求項６】
請求項５記載のハイパバイザであって、
前記優先度は、持ちサイクル数に対する使用サイクル数の割合であり、
前記（ｂ０）では、優先度の小さい仮想計算機が優先的に選択される、
ハイパバイザ。
【請求項７】
請求項５記載のハイパバイザであって、
前記（ｂ２）において、前記スケジューリング機能が、停止した仮想プロセッサを有する仮想計算機について、更新後の使用サイクル数が持ちサイクル数の値を上回った回数であるサービスアウト回数を更新し、
前記優先度は、持ちサイクル数と使用サイクル数の他に、サービスアウト回数が反映された値である、
ハイパバイザ。
【請求項８】
請求項５記載のハイパバイザであって、
前記（ｂ２）において、停止した仮想プロセッサを有する仮想計算機について、更新後の使用サイクル数が持ちサイクル数の値を上回ることであるサービスアウトが発生した場合、使用サイクル数の更新は、停止した仮想プロセッサが走行していた物理プロセッサの動作周波数と、その仮想プロセッサが走行していた時間長である走行時間と、持ちサイクル数と、直前の使用サイクル数とを基に行われる、
ハイパバイザ。
【請求項９】
請求項１記載のハイパバイザであって、
前記（Ａ）において、前記スケジューリング機能が、
（ａ３）各物理プロセッサについて、物理プロセッサの動作周波数と、前記１以上の物理プロセッサに共通しサイクル数で表されるタイムスライスとを基に、タイムスライス時間長を算出し、
前記（Ｂ）において、仮想プロセッサの走行時間長が、その仮想プロセッサが走行する物理プロセッサのタイムスライス時間長に達した場合、その仮想プロセッサが停止する、
ハイパバイザ。
【請求項１０】
請求項１記載のハイパバイザであって、
物理プロセッサの動作周波数を変更する周波数調整処理を行う周波数調整機能を更に有し、
前記周波数調整機能は、別の要因である外部要因で物理プロセッサの動作周波数が変更されたことを検出し、
前記スケジューリング機能は、前記外部要因で動作周波数が変更された場合、前記（Ａ）を行ってから前記第１の周期を経過していなくても、前記（Ａ）を行う、
ハイパバイザ。
【請求項１１】
請求項１０記載のハイパバイザであって、
前記１以上の物理プロセッサにとっての現在時刻を特定し各物理プロセッサの時間利用率を算出する負荷監視機能を更に有し、
前記時間利用率は、計算対象時間に対する仮想プロセッサ走行時間合計の割合であり、
前記仮想プロセッサ走行時間合計は、前記計算対象時間における、仮想プロセッサが走行した時間長の合計であり、
前記計算対象時間は、前記外部要因で動作周波数が変更されていない場合、直前回の前記周波数調整処理が行われた時刻から前記特定された現在時刻までの時間長であり、
前記計算対象時間は、前記外部要因で動作周波数が変更された場合、動作周波数の変化が検出された時刻から前記特定された現在時刻までの時間長であり、
前記周波数調整機能は、前記時間利用率を基に前記周波数調整処理を行い、前記周波数調整処理が終了した場合に、前記仮想プロセッサ走行時間合計及び時間利用率をリセットする、
ハイパバイザ。
【請求項１２】
請求項１１記載のハイパバイザであって、
前記周波数調整機能は、前記周波数調整処理において、前記時間利用率が第２しきい値を上回っている物理プロセッサについては、動作周波数を上げ、前記時間利用率が前記第２のしきい値より低い第１しきい値を下回っている物理プロセッサについては動作周波数を下げる、
ハイパバイザ。
【請求項１３】
請求項１記載のハイパバイザであって、
前記スケジューリング機能は、仮想プロセッサが走行されない物理プロセッサにアイドルプロセスを走行させる、
ハイパバイザ。
【請求項１４】
１以上の物理プロセッサと、
各々が１以上の仮想プロセッサを有し前記１以上の物理プロセッサで走行される複数の仮想計算機を構築するハイパバイザと
を有し、
前記ハイパバイザが、スケジューリングの初期化の周期である第１の周期毎に、
（Ａ）仮想プロセッサのスケジューリングの初期化と、
（Ｂ）仮想プロセッサのスケジューリングと
を行い、
前記（Ａ）において、前記ハイパバイザが、
（ａ１）各物理プロセッサの動作周波数の和と前記第１の周期の長さとを基に、第１の周期における前記１以上の物理プロセッサのプロセッササイクル数である全プロセッササイクル数を算出し、
（ａ２）各仮想計算機について、前記複数の仮想計算機のサービス率の比の通りに前記全プロセッササイクル数が配分された値である持ちサイクル数を算出し、
前記（Ｂ）において、前記ハイパバイザが、
（ｂ１）各仮想計算機の持ちサイクル数を基に、仮想計算機内の仮想プロセッサをいずれかの物理プロセッサで走行させる、
計算機システム。
【請求項１５】
各々が１以上の仮想プロセッサを有し１以上の物理プロセッサで走行される複数の仮想計算機内の仮想プロセッサのスケジューリング方法であって、
各物理プロセッサの動作周波数の和と前記仮想プロセッサのスケジューリングの初期化の周期である第１の周期の長さとを基に、前記第１の周期における前記１以上の物理プロセッサのプロセッササイクル数である全プロセッササイクル数を算出し、
各仮想計算機について、前記複数の仮想計算機のサービス率の比の通りに前記全プロセッササイクル数が配分された値である持ちサイクル数を算出し、
各仮想計算機の持ちサイクル数を基に、仮想計算機内の仮想プロセッサをいずれかの物理プロセッサで走行させる、
スケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機の仮想化に関し、特に、仮想プロセッサのスケジューリングに関する。
【背景技術】
【０００２】
計算機の仮想化が知られている。計算機の仮想化では、一般に、１以上の物理プロセッサが複数の仮想計算機に時分割共有される。具体的には、複数の仮想計算機が複数の仮想プロセッサを有し、それら複数の仮想プロセッサがそれぞれ物理プロセッサで走行する。
【０００３】
計算機の仮想化では、複数の仮想プロセッサの走行比率が複数の仮想計算機のサービス率の比の通りであることが望ましい。また、計算機システム（例えばサーバ装置）の処理性能の低下を抑えつつ計算機システムの消費電力を抑制することが望ましい。
【０００４】
特許文献１には、仮想プロセッサの物理プロセッサへの割り当てのスケジューリングに関する技術が開示されている。特許文献１によれば、計算機システムにおいて物理プロセッサの動作周波数が低下した際、所定のゲストオペレーティングシステム（ゲストＯＳ）に、プロセッサ時間がより多く割り当てられる。
【０００５】
特許文献２には、計算機システムの消費電力を削減するために、仮想プロセッサが割り当てられていないスリープ状態の物理プロセッサを増やす方法が開示されている。物理プロセッサへの仮想プロセッサの追加及び切離しの基準には、仮想プロセッサの稼働率が使われている。また、各仮想プロセッサには割り当て率が設定可能である。物理プロセッサへ割り当てられた仮想プロセッサの割り当て率の和に基づき、物理プロセッサの動作周波数が決定される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−１１０４０４号公報
【特許文献２】特開２００９−１４０１５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一般に、計算機システムにおいて、物理プロセッサの動作周波数が異なっているケースがある。例えば、計算機システムが複数の物理プロセッサを有し、それら複数の物理プロセッサの動作周波数が異なっているケースがある。また、例えば、計算機システムが有する物理プロセッサの数が１つであっても、その物理プロセッサが、動作周波数を調整可能な物理プロセッサであれば、第１の時点での動作周波数が第２の時点での動作周波数と異なっていることがある。
【０００８】
物理プロセッサが一定時間内に実行可能な命令の数は、その時間内に与えられるプロセッササイクル数に比例し、単位時間当たりのプロセッササイクル数は、動作周波数によって決まる。
【０００９】
従って、特許文献１のようにプロセッサ時間を基にスケジューリングが行われると、複数の仮想計算機の仮想プロセッサがサービス率の比の通りに走行されないことがある。
【００１０】
特許文献２には、計算機システムの消費電力を削減するための技術が開示されているが、仮想プロセッサのスケジューリングに関する上記の問題を解決する方法は開示されていない。
【００１１】
そこで、本発明の目的は、複数の仮想プロセッサの走行比率をなるべく複数の仮想計算機のサービス率の比の通りにすることにある。
【課題を解決するための手段】
【００１２】
ハイパバイザが、第１の時間長（例えば、後述のスケジューリング初期化周期Ｔ１）毎に、各物理プロセッサの動作周波数の和と第１の時間長とを基に、第１の時間長における全プロセッササイクル数（１以上の物理プロセッサのプロセッササイクル数）を算出する。ハイパバイザは、各仮想計算機について、複数の仮想計算機のサービス率の比に従って全プロセッササイクル数が配分された値である持ちサイクル数を算出する。ハイパバイザは、仮想プロセッサのスケジューリングにおいて、各仮想計算機の持ちサイクル数を基に、仮想計算機内の仮想プロセッサをいずれかの物理プロセッサで走行させる。
【発明の効果】
【００１３】
１以上の物理プロセッサの全プロセッサ時間を基に行う従来のスケジューリングよりも、複数の仮想プロセッサの走行比率を複数の仮想計算機のサービス率の比に近づけることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施例に係る計算機システムを示す構成図である。
【図２】物理プロセッサ＃０の業務量及び処理量を示す。
【図３】グローバルテーブル２０１の構成を示す。
【図４】仮想計算機テーブル３１０の構成を示す。
【図５】従来のスケジューリングに従うタイムスライスに関する概念図である。
【図６】本発明の一実施例に係るスケジューリングに従うタイムスライスに関する概念図である。
【図７】従来のスケジューリングの結果と本発明の一実施例に係るスケジューリングの結果との違いを示す。
【図８】全体処理のフローチャートである。
【図９】スケジューリング初期化処理のフローチャートである。
【図１０】持ちサイクル数の算出処理のフローチャートである。
【図１１】タイムスライス時間長の設定のフローチャートである。
【図１２】スケジューリング処理と初期化条件判定処理とを含んだ処理のフローチャートである。
【図１３】優先度比較から仮想プロセス走行までの処理のフローチャートである。
【図１４】仮想計算機＃ｉの仮想プロセッサの走行停止から使用サイクル数及びサービスアウト回数の更新までの処理のフローチャートである。
【図１５】外部要因による周波数変更の有無の判定、及び、周波数変更検出時の処理のフローチャートである。
【図１６】各仮想計算機のスケジュール優先度を時系列に示す表である。
【図１７】各仮想計算機の走行先物理プロセッサを時系列に示す表である。
【図１８】各仮想計算機へ時刻ごとのプロセッササイクル数配分を示すグラフである。
【図１９】時間利用率算出処理のフローチャートである。
【図２０】周波数調整処理のフローチャートである。
【図２１】絶対業務量の増大に伴い、動作周波数を上昇させる際の動きの一例を示す。
【図２２】絶対業務量の減少に伴い、動作周波数を下降させる際の動きの一例を示す。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、本発明の一実施例を説明する。
【００１６】
なお、以下の説明では、「ｘｘｘテーブル」の表現にて各種情報を説明することがあるが、各種情報は、テーブル以外のデータ構造で表現されていてもよい。データ構造に依存しないことを示すために「ｘｘｘテーブル」を「ｘｘｘ情報」と呼ぶことができる。
【００１７】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサによって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）を用いながら行うことができる。このため、処理の主語が、プロセッサとされてもよい。プロセッサは、プロセッサが行う処理の一部又は全部を行うハードウェア回路を含んでも良い。コンピュータプログラムは、プログラムソースから各計算機にインストールされても良い。プログラムソースは、例えば、プログラム配布サーバ又は記憶メディアであっても良い。
【００１８】
また、以下の説明では、同種の複数の要素には、同一の参照番号と、異なる通し番号が割り振られている。同種の複数の要素を区別して説明する場合には、通し番号を用いて説明し、同種の複数の要素を区別しないで説明する場合には、参照番号を用いて説明する。
【００１９】
図１は、本発明の一実施例に係る計算機システムを示す構成図である。
【００２０】
計算機システムは、一以上の物理計算機で構成されており、例えば、サーバ装置である。計算機システムは、物理資源００１を有し、物理資源００１上で、ハイパバイザ１００及び複数の仮想計算機３００が実行される。本実施例では、３つの仮想計算機＃１〜＃３があるが、仮想計算機３００の数は、３に限定されない。
【００２１】
物理資源００１は、１以上の物理プロセッサ（物理的なプロセッサ）００２と、１以上のタイマ００５と、外部割込み機構００６と、システム時刻００７と、物理記憶資源（例えば、１以上の物理的なメモリ）００８とを有する。１つの物理プロセッサ００２につき１つのタイマ００５がある。本実施例では、２つの物理プロセッサ＃０及び＃１と、２つのタイマ＃０及び＃１があるが、いずれも、その数は２に限定されない。
【００２２】
物理プロセッサ００２は、オペレーティングシステム（例えば汎用的なオペレーティングシステム）が動作可能なプロセッサである。物理プロセッサ００２は、周波数制御機能００３と、周波数設定レジスタ００４とを有する。周波数制御機能００３は、物理プロセッサ００２の動作周波数を変更する機能である。具体的には、その機能００３（例えば＃０）は、物理プロセッサ００２（例えば＃０）の動作周波数を、周波数設定レジスタ００４（例えば＃０）に設定された値に対応した動作周波数に変更することができる。物理プロセッサ００２の動作周波数に応じて、その物理プロセッサ００２へ供給される電圧も調整される。物理プロセッサ００２の動作周波数が低ければ、その物理プロセッサ００２の消費電力を抑制することができる。
【００２３】
外部割り込み機構００６は、物理プロセッサ００２に非同期でイベント発生を通知する機能を有する。外部割り込み機構００６は、例えば、タイマ００５の期限が来たことの物理プロセッサ００２への通知、及び、或る物理プロセッサ００２から別の物理プロセッサ００２へのプロセッサ間割り込みなどで使用される。機構００６の用途は、これらのうちの少なくとも１つに代えて又は加えて、他の用途に用いられても良い。
【００２４】
システム時刻００７は、ハイパバイザ１００が現在時刻と経過時間を参照する為に使用する、全ての物理プロセッサ００２での共通時刻（システム時刻）を示すデバイスである。システム時刻００７の実現方式は限定されなくて良い。
【００２５】
タイマ００５は、外部割り込みを発生させる機能を有する。その機能は、指定した時刻もしくは指定した周期に、外部割り込み機構００６を介して物理プロセッサ００２に外部割り込みを発生させる。タイマ＃０及び＃１は、ハイパバイザ１００がタイムスライスによって物理プロセッサ＃０及び＃１を時分割共有するために使用する。
【００２６】
ハイパバイザ１００は、物理資源００１を制御して、複数の仮想計算機３００を構築する。各仮想計算機３００は、例えば、レディキュー３０２及び仮想プロセッサ３０３を有する。仮想計算機３００の生成（起動）の操作を行うことにより、稼働中の仮想計算機３００の数を増やすことが可能である。仮想計算機の停止（削除）の操作により、仮想計算機３００の数を減らすことも可能である。
【００２７】
仮想プロセッサ３０３は、１以上の物理プロセッサ００２に基づく仮想的なプロセッサである。図１によれば、各仮想計算機３００が有する仮想プロセッサ３０３の数は１であるが、仮想計算機３００は、１より多くの仮想プロセッサ３０３を有して良い。レディキュー３０２は仮想プロセッサ３０３を複数個格納可能な先入れ先出しのデータ構造である。レディキュー３０２からの仮想プロセッサ３０３の取り出し操作は、レディキュー３０２の先頭から行われ、レディキュー３０２への仮想プロセッサ３０３の挿入操作はレディキューの末尾に対して行う。
【００２８】
仮想計算機３００では、仮想プロセッサ３０３によって、汎用オペレーティングシステム（ゲストＯＳ）３０１が実行される。ゲストＯＳ３０１上で、アプリケーションプログラム等の他のプログラムが実行されて良い。仮想計算機３００において、仮想プロセッサ３０３の数が動的に変更されても良い。
【００２９】
ハイパバイザ１００によって、物理プロセッサ＃０及び＃１が仮想プロセッサ＃０〜＃２に時分割共有される。仮想プロセッサ３０３が物理プロセッサ＃０及び／又は＃１に割り当てられることにより、その仮想プロセッサ３０３でプログラム（例えばゲストＯＳ３０１）が実行される。
【００３０】
ハイパバイザ１００は、仮想プロセッサ３０３の１以上の物理プロセッサ００２への割り当てとして、その仮想プロセッサ３０３に、「タイムスライス」と呼ばれるプロセッサ時間を与える。
【００３１】
本実施例では、仮想プロセッサのスケジューリングにおいて、物理プロセッサ００２のプロセッサ時間に加え、物理プロセッサ００２の「業務量」及び「処理量」が利用される。以下、物理プロセッサ＃０を例に採って、業務量及び処理量を説明する。
【００３２】
図２は、物理プロセッサ＃０の業務量及び処理量を示す。
【００３３】
業務量６００は、任意の時刻又は期間における業務の量が単位時間（例えば１秒）当たりのプロセッササイクル数で表わされる。業務は、物理プロセッサ＃０が何らかの処理（例えば、ゲストＯＳ３０１、或いは、ゲストＯＳ３０１上で動作するアプリケーションの実行）を行うことに伴い発生する。
【００３４】
利用可能実行資源量６０１がある。この量６０１は、任意の時刻又は期間において利用可能な単位時間当たりのプロセッササイクル数である。各時点での資源量６０１は、その時点での、物理プロセッサ＃０の動作周波数に依存する。
【００３５】
最大利用可能実行資源量６０２がある。この量６０２は、物理プロセッサ＃０において利用可能な時間当たりのプロセッササイクル数の最大値であるとする。この量６０２は、物理プロセッサ＃０を最高動作周波数で稼働させた時の利用可能実行資源量６０１に等しい。
【００３６】
処理量６０３は、或る時点において、その時点での業務量６０３（単位時間当たりのプロセッササイクル数）のうち、実際に物理プロセッサ＃０で使われる単位時間当たりのプロセッササイクル数である。各時点において、業務量６００が利用可能実行資源量６０１を超えないのであれば、その時点において、物理プロセッサ＃０の業務量６００と処理量６０３は等しくなる。各時点において、処理量６０３のとりうる上限値は、その時点での利用可能実行資源量６０１である。
【００３７】
再び図１を参照する。
【００３８】
ハイパバイザ１００は、構築機能１０８、スケジューリング機能１０１、周波数変更機能１０５及び負荷監視機能１０６を有し、制御データ２００を管理する。制御データ２００は、例えば物理記憶資源００８に格納される。
【００３９】
構築機能１０８は、１以上の仮想プロセッサ３０３を有する複数の仮想計算機３００を構築する。
【００４０】
スケジューリング機能１０１は、サービス率制御１０２、初期化機能１０３及び周波数変化検出機能１０４を含む。スケジューリング機能１０１は、サービス率制御１０２を含んでいるため、例えばユーザの指定する仮想計算機及びそのサービス率により、各仮想計算機３００へ割り当てられる利用可能実行資源量６０１の大きさをプロセッササイクル数単位で決めることができる。スケジューリング機能１０１は、各仮想計算機３００へ与えられるタイムスライスの配分を制御することにより、物理プロセッサ００２のプロセッササイクル数をサービス率の比の通りに分配する。詳細は後述する。
【００４１】
ゲストＯＳ３０１は、与えられたタイムスライスを使い切る前に、ゲストＯＳ３０１を実行する仮想プロセッサ３０３の休止状態への切り替え要求を発行して、その仮想プロセッサ３０３を休止させることがある。この要因には、仮想プロセッサ３０３がアイドルの場合などがある。
【００４２】
仮想プロセッサ３０３がアイドルであるため、休止状態に入る際には、その仮想プロセッサ３０３の物理プロセッサ００２への割当てが直ちに解除される。その仮想プロセッサ３０３の休止が解除されるまで、その仮想プロセッサ３０３の分、他の仮想プロセッサ３０３がより多く１以上の物理プロセッサ００２に割り当てられて良い。これにより、１以上の物理プロセッサ００２を効率よく使用させることができる。
【００４３】
ハイパバイザ１００は、物理プロセッサ００２にアイドルプロセス０２０を対応付ける。本実施例では、アイドルプロセス＃０及び＃１がある。アイドルプロセス＃０が、物理プロセッサ＃０に対応し、アイドルプロセス＃１が、物理プロセッサ＃１に対応する。ハイパバイザ１００は、物理プロセッサ００２に割り当てる仮想プロセッサ３０３が見つからなかった場合、仮想プロセッサ３０３が見つかるまで、その物理プロセッサ００２に対応するアイドルプロセス０２０をその物理プロセッサ００２に実行させる。
【００４４】
このように、物理プロセッサ００２のプロセッサ時間は、仮想プロセッサ３０３が走行している場合とアイドルプロセス０２０が実行されている場合に分けられる。各物理プロセッサ００２について、一定時間のうち、仮想プロセッサ３０３の走行時間の占める比率を求めれば、各物理プロセッサ００２の時間利用率が求められる。周期的に物理プロセッサ時間利用率を採取した場合、物理プロセッサ００２の動作周波数が一定であれば、物理プロセッサ時間利用率の増減を調べることにより、物理プロセッサ００２の処理量６０３の変化を特定することができる。
【００４５】
本実施例では、前述したように、３つの仮想計算機３００が存在し、各仮想計算機３００が、１つの仮想プロセッサ３０３を有する。２つの物理プロセッサ００２があり、それらが、複数の仮想計算機３００に時分割共有される。以下の説明では、適宜、アルファベットの記号や、数式を用いる。以降に示す式やアルファベットにおいて、ｉは、仮想計算機番号（通し番号）を、ｊは物理プロセッサ番号（通し番号）を表す。仮想計算機番号ｉは１から始まる整数であり、物理プロセッサ番号ｊは０から始まる整数である。具体的には、本実施例では、ｉに代入可能な値は、１、２及び３のいずれかであり、ｊに代入可能な値は、０又は１である。
【００４６】
制御データ２００は、機能１０１、１０５、１０６及び１０８で利用される各種の指標やパラメータを含む。制御データ２００は、計算機システムの構成（例えば、物理プロセッサ００２の数、仮想計算機３００の数、及び、仮想プロセッサ３０３の数）を基に、ハイパバイザ１００により生成及び更新される。制御データ２００は、グローバルテーブル２０１及び仮想計算機テーブル３１０を含む。テーブル３１０は、仮想計算機３００毎にある。本実施例では、仮想計算機３００の数は３のため、テーブル３１０の数も３である。
【００４７】
図３は、グローバルテーブル２０１の構成を示す。
【００４８】
グローバルテーブル２０１は、複数の物理プロセッサ００２に共通であり、例えば、下記の情報を有する。
＊物理プロセッサの数Ｎを表す情報２０２、
＊スケジューリングの初期化周期Ｔ１を表す情報２０３、
＊周波数調整処理の周期である調整周期Ｔ２を表す情報２０４、
＊スケジューリングの初期化を行った最近の時刻であるラスト初期化時刻ＬａｓｔＳを表す情報２０５、
＊周波数調整処理を行った最近の時刻であるラスト調整時刻ＬａｓｔＦを表す情報２０６、
＊サイクル数単位のタイムスライスＳを表す情報２０７、
＊持ちサイクル数の和を表す情報２０８、
＊第１しきい値Ｙ１を表す情報２２１、
＊第２しきい値Ｙ２を表す情報２２２、
＊対応する物理プロセッサ００２に関する情報を含んだテーブルである物理プロセッサテーブル２１０。
【００４９】
物理プロセッサテーブル２１０は、物理プロセッサ００２毎にある。本実施例では、物理プロセッサ００２の数は２のため、テーブル２１０の数も２である。物理プロセッサテーブルｊ２１０は、例えば、下記の情報を有する。
＊物理プロセッサ＃ｊに設定される動作周波数ｆｊを表す情報２１１、
＊物理プロセッサ＃ｊから提供されるタイムスライスの時間長ｔｊを表す情報２１２、
＊物理プロセッサ＃ｊでアイドルプロセス＃ｊが走行される開始時刻Ｉｊを表す情報２１３、
＊物理プロセッサ＃ｊの時間利用率αｊを表す情報２１４、
＊物理プロセッサ＃ｊで仮想プロセッサ３０３が走行した時間の合計を表す情報２１５、
＊外部要因により周波数が変更されるか否かを表す変更フラグ２１６、
＊物理プロセッサ＃ｊの動作周波数の変更が検出された時刻を表す情報２１７。
【００５０】
図４は、仮想計算機テーブル３１０の構成を示す。
【００５１】
仮想計算機テーブルｉ３１０は、仮想計算機＃ｉに関する情報、例えば、下記の情報を有する。
＊仮想計算機＃ｉがレディ状態か否かを表すビットであるレディ状態ビット３１１、
＊仮想計算機＃ｉのサービス率Ｗｉを表す情報３１２、
＊仮想計算機＃ｉの持ちプロセッササイクル数Ｑｉを表す情報３１３、
＊仮想計算機＃ｉが使用するプロセッササイクル数Ｕｉを表す情報３１４、
＊仮想計算機＃ｉのスケジュール優先度Ｐｉを表す情報３１５、
＊仮想計算機＃ｉのサービスアウト回数Ｏｉを表す情報３１６、
＊レディキュー＃ｉへのポインタ３１７、
＊対応する仮想プロセッサに関する情報を含んだ仮想プロセッサテーブル３１８。
【００５２】
レディ状態ビット３１１は、ＯＮ（１）であれば、仮想計算機＃ｉがレディ状態であることを意味し、ＯＦＦ（０）であれば、仮想計算機＃ｉがレディ状態では無いことを意味する。
【００５３】
仮想プロセッサテーブル３１８は、仮想計算機＃ｉが有する仮想プロセッサ３０３毎にある。本実施例では、１つの仮想計算機＃ｉが有する仮想プロセッサ３０３の数は１のため、テーブル３１８の数も１である。仮想プロセッサテーブル３１８は、例えば、下記の情報を有する。
＊仮想プロセッサの走行が開始された時刻を表す情報３１９、
＊前回タイムスライス残り時間を表す情報３２０。
【００５４】
再び図１を参照する。
【００５５】
負荷監視機能１０６は、一定の周期Ｔ２毎に、各物理プロセッサ００２について、次の処理を行う。すなわち、機能１０６は、物理プロセッサ＃ｊの時間利用率αｊを採取し、物理プロセッサテーブル＃ｊに、採取した時間利用率αｊを表す情報を保存する。
【００５６】
周波数変更機能１０５は、各物理プロセッサ００２について、次の処理を行う。すなわち、機能１０５は、負荷監視機能１０６により採取された物理プロセッサ時間利用率αｊを基に、物理プロセッサ＃ｊの動作周波数を上げる、下げる、あるいは変更しない、のいずれかの処理を選択し、実行する。
【００５７】
周波数変化検出機能１０５は、物理プロセッサ＃ｊの動作周波数が外部要因により変更されたことを検出し、物理プロセッサテーブル＃ｊ内のフラグ２１６をＯＮ（１）にすることができる。それが検出された場合、機能１０５は、スケジューリングを初期化させ、サービス率制御の正確性を維持させることもできる。このための方法としては、例えば、電力パワーキャッピングに利用される特定の割り込み信号検出を契機に、各物理プロセッサ＃ｊ上で動作周波数を取得する関数を呼び出し、その動作周波数と、物理プロセッサテーブル＃ｊ上の設定動作周波数ｆｊと比較する方法がある。しかし、方法は、それに限らず、他の方法が採用されて良い。
【００５８】
さて、既に述べたように、一般に、計算機システムにおいて、物理プロセッサの動作周波数が異なっているケースがある。例えば、計算機システムが複数の物理プロセッサを有し、それら複数の物理プロセッサの動作周波数が異なっているケースがある。また、例えば、計算機システムが有する物理プロセッサの数が１つであっても、その物理プロセッサが、動作周波数を調整可能な物理プロセッサであれば、第１の時点での動作周波数が第２の時点での動作周波数と異なっていることがある。
【００５９】
物理プロセッサが一定時間内に実行可能な命令の数は、その時間内に与えられるプロセッササイクル数に比例し、単位時間当たりのプロセッササイクル数は、動作周波数によって決まる。そのため、動作周波数が異なれば、単位時間当たりに実行可能な命令の数も異なる。
【００６０】
ここで、仮想計算機のサービス率の比は、＃１：＃２：＃３＝５：３：２、であるとする。
【００６１】
従来のスケジューリングによれば、プロセッサ時間が、物理プロセッサの実行資源量を表す唯一の量として利用される。
【００６２】
複数の物理プロセッサの動作周波数が等しければ、図７の左側の積上げ棒グラフ７０１が示すように、従来のスケジューリングでも、物理プロセッサの実行資源は、仮想計算機のサービス率の比の通りに配分される。
【００６３】
しかし、物理プロセッサの動作周波数が異なっていれば、従来のスケジューリングでは、物理プロセッサの実行資源は、仮想計算機のサービス率の比の通りに配分されない。具体的には、任意の物理プロセッサ上で、一定の長さの物理プロセッサ時間のタイムスライスが取得された場合、タイムスライスによって、実行可能な命令の数が一定で無い可能性がある。すなわち、図５に示すように、物理プロセッサによって動作周波数が異なっている場合に、同一時間長のタイムスライスが与えられると、走行する物理プロセッサによって、利用可能なプロセッササイクル数が異なってしまう。このため、図７の中央の積上げ棒グラフ７０３が示すように、仮想計算機＃１〜＃３の実行可能な命令数の比が、サービス率の比と異なってしまうことがある。このため、サービス率制御の正確性が損なわれてしまう。
【００６４】
そこで、本実施例では、スケジューリング機能１０１が、プロセッサ時間に代わり、プロセッササイクル数を算出し、プロセッササイクル数を基に複数の仮想計算機へ実行資源を配分する。このため、持ち時間は持ちサイクル数に置き換わる。プロセッササイクル数は、物理プロセッサ上で実行可能な命令数と比例関係にある。
【００６５】
また、図５に示すように、従来のスケジューリングで与えられるタイムスライスは、どの物理プロセッサについても、一定の時間長であるが、本実施例で与えられるタイムスライスは、図６に示すように、どの物理プロセッサ上においても一定のプロセッササイクル数である。どの物理プロセッサ上においても１タイムスライスあたりのプロセッササイクル数を一定にするために、物理プロセッサの動作周波数に応じ、タイムスライスの時間長が調節される。図６に示す例では、プロセッササイクル数で与えられたタイムスライスＳは、Ｓ＝１．６Ｘ１０７サイクルに設定されている。このため、３．２ＧＨｚ動作の物理プロセッサ＃０と、１．６ＧＨｚ動作の物理プロセッサ＃１のいずれのタイムスライスで走行しても同じプロセッササイクル数が利用されるよう、タイムスライスの時間長はそれぞれ５ｍｓ（ミリ秒）、１０ｍｓに調節される。
【００６６】
このように、本実施例に係るスケジューリングは、プロセッササイクル数を配分するスケジューリングである。このため、すべてのタイムスライス上での実行可能な命令数が一定になり、図７の右側の積上げ棒グラフ７０５が示すように、動作周波数を調節可能な物理プロセッサが利用されている場合でも、仮想計算機の実行可能な命令数の比は、仮想計算機のサービス率の比の通りに維持される。
【００６７】
また、本実施例によれば、それぞれの物理プロセッサの時間利用率が定期的にチェックされ、物理プロセッサの処理量が低い時間帯においては、その物理プロセッサの動作周波数が低下させられる。これにより、計算機システムの消費電力の抑制を図ることができる。なお、プロセッササイクル数ベースのスケジューリングと両立される本機能については、後に説明する。
【００６８】
図８は、本実施例に係る計算機システムで行われる全体処理のフローチャートである。全体処理の呼び出し条件は、例えば、計算機システムが立ち上がっており、ひとつでも起動中の仮想計算機が存在すること、である。
【００６９】
ステップＳ１では、初期化機能１０３が、スケジューリング初期化処理を行う。
【００７０】
ステップＳ２では、スケジューリング機能１０１が、各物理プロセッサ００２についてのスケジューリング処理を行い、且つ、負荷監視機能１０６が、各物理プロセッサ００２についての負荷監視を行う。負荷監視機能１０６によって、各物理プロセッサ００２について、物理プロセッサ＃ｊおける、仮想プロセッサの走行時間の和、が集計され、その和を表す情報２１５が、物理プロセッサテーブル＃ｊに登録される。
【００７１】
ステップＳ３では、ステップＳ２の結果がいずれかのスケジューリング初期化条件に該当するか否かが判定される。その判定の結果が肯定的であれば（Ｓ３：ＹＥＳ）、ステップＳ４が行われ、その判定の結果が否定的であれば（Ｓ３：ＮＯ）、ステップＳ２が行われる。
【００７２】
ステップＳ４では、起動中の仮想計算機３００の数が０か否かが判定される。全体処理の起動条件は、ひとつでも起動中の仮想計算機３００が存在することなので、起動中の仮想計算機３００がなくなった場合（Ｓ４：ＹＥＳ）、全体処理は終了する。ひとつでも仮想計算機３００が起動したならば、全体処理が再開する。起動中の仮想計算機３００の数が１以上であれば（Ｓ４：ＮＯ）、ステップＳ５が行われる。
【００７３】
ステップＳ５では、ステップＳ２の結果が、周波数調整処理を行う条件に適合しているか否かが判定される。この判定の結果が肯定的であれば（Ｓ５：ＹＥＳ）、ステップＳ６が行われる。逆に、この判定の結果が否定的であれば（Ｓ５：ＮＯ）、ステップＳ１が行われる。具体的には、例えば、ラスト調整時刻ＬａｓｔＦから調整周期Ｔ２が経過していることがシステム時刻を基に検出された場合、Ｓ５の判定結果は肯定的である。
【００７４】
ステップＳ６では、時間利用率算出処理が行われる。ここでは、時間利用率αｊが算出される。
【００７５】
ステップＳ７では、周波数変更機能１０５が、周波数調整処理を行う。周波数調整処理では、ステップＳ６で算出された時間利用率αｊが利用される。
【００７６】
初期化機能１０３は、ステップＳ２のスケジューリング処理が始まる前に必ず実行される。また、初期化機能１０３は、例えば、以下の（１）〜（４）のうちのいずれかを契機に呼び出される。
（１）初期化機能１０３が最近呼び出されてから初期化周期Ｔ１が経過した場合、
（２）仮想計算機３００のサービス率の比が変更された場合（例えば、ユーザによって、いずれかの仮想計算機のサービス率が変更された場合）、
（３）仮想計算機の生成又は削除が行われた場合、
（４）いずれかの物理プロセッサの動作周波数が外部要因により変更されたことが検出された場合。
【００７７】
以上が、全体処理の概要である。以下、全体処理の各ステップを詳細に説明する。
【００７８】
＜初期化処理（図８のステップＳ１）＞。
【００７９】
図９は、スケジューリング初期化処理のフローチャートである。
【００８０】
ステップＳ１１では、初期化機能１０３は、各仮想計算機３００の持ちサイクル数を算出する。
【００８１】
ステップＳ１２では、初期化機能１０３は、制御データ２００内の諸パラメータをゼロにリセットする。
【００８２】
ステップＳ１３では、初期化機能１０３は、物理プロセッサ００２毎にタイムスライス時間長の設定を行う。
【００８３】
以下、各ステップについて、詳細に説明する。
【００８４】
＜＜仮想計算機の持ちサイクル数の算出（図９のステップＳ１１）＞＞。
【００８５】
この初期化処理において、ステップＳ１１、すなわち、各仮想計算機３００の持ちサイクル数の算出は、例えば以下のように行われる。
【００８６】
Ｗｉを、仮想計算機＃ｉのサービス率とし、ｆｊを、物理プロセッサ＃ｊの動作周波数とする。全仮想計算機３００のサービス率の和Ｗは、下記数１の通りである。また、全物理プロセッサ００２の動作周波数の和Ｆは、下記数２の通りである。
【００８７】
【数１】
0005388909.tif 000002
【００８８】
【数２】
0005388909.tif 000003
ここで、全物理プロセッサ００２の動作周波数の和Ｆとスケジューラの初期化周期Ｔ１の積（Ｆ×Ｔ１）を求めると、計算機システムで利用可能な全実行資源量（＝Ｋ）がサイクル数単位で求められる。つまり、全プロセッササイクル数Ｋが算出される。仮想計算機＃ｉの持てる実行資源量は、Ｋ×Ｗｉ／Ｗに等しい。従って、仮想計算機＃ｉの持てる実行資源量である持ちサイクル数（仮想計算機＃ｉが持てるプロセッササイクル数）Ｑｉは、下記数３の通りとなる。
【００８９】
【数３】
0005388909.tif 000004
図１０は、持ちサイクル数の算出処理のフローチャートである。
【００９０】
ステップＳ１１１では、初期化機能１０３は、各物理プロセッサ００２について、物理プロセッサテーブル＃ｊから、物理プロセッサ＃ｊの設定動作周波数ｆｊを特定する。
【００９１】
ステップＳ１１２では、初期化機能１０３は、ステップＳ１１１で特定した全てのｆｊの和（Ｆ（数２参照））を算出する。
【００９２】
ステップＳ１１３では、初期化機能１０３は、プロセッササイクル数の総和（Ｔ１×Ｆ）を算出する。すなわち、設定動作周波数の和Ｆとスケジューリングの初期化周期Ｔ１との積が算出される。
【００９３】
ステップＳ１１４では、初期化機能１０３は、各仮想計算機３００について、仮想計算機テーブル＃ｉから、仮想計算機＃ｉのサービス率Ｗｉを特定する。
【００９４】
ステップＳ１１５では、初期化機能１０３は、ステップＳ１１４で特定した全てのＷｉの和（Ｗ（数１参照））を算出する。
【００９５】
ステップＳ１１６では、初期化機能１０３は、プロセッササイクル数の総和（Ｔ１×Ｆ）、サービス率の和Ｗ、及び、各仮想計算機３００についての仮想計算機＃ｉのサービス率Ｗｉを使い、上記数３に従い、各仮想計算機３００について、仮想計算機＃ｉの持ちサイクル数Ｑｉを算出する。
【００９６】
＜＜諸パラメータのゼロリセット（図９のステップＳ１２）＞＞。
【００９７】
諸パラメータのゼロリセットでは、初期化機能１０３が、スケジューリング機能１０１で使われるパラメータの値を０にリセットする。具体的には、初期化機能１０３は、仮想計算機＃ｉの使用サイクル数（仮想計算機＃ｉで使用されたプロセッササイクル数）Ｕｉ、サービスアウト回数Ｏｉ、及び、スケジュール優先度Ｐｉを、それぞれ０とする。
【００９８】
＜＜タイムスライス時間長の設定（図９のステップＳ１３）＞＞。
【００９９】
タイマ割り込みが物理プロセッサ００２へあがったことをプロセス走行停止の条件とするにより、物理プロセッサ時間の時分割共有が実現されている。物理プロセッサ＃ｊに対応するタイマ＃ｊが、タイマ割り込みをあげる時刻を変更することによって、タイムスライスの時間長が調節可能である。この処理が、タイムスライス時間長の設定である。
【０１００】
図１１は、タイムスライス時間長の設定のフローチャートである。
【０１０１】
本実施例では、タイムスライスＳはプロセッササイクル数で表され、物理プロセッサの動作周波数に関わらず、各タイムスライスで利用できるプロセッササイクル数が一定になるように制御される。
【０１０２】
ステップＳ１３１では、初期化機能１０３は、グローバルテーブル２０１から、タイムスライスＳを特定する。タイマ＃ｊへタイマ割り込み周期を設定する際は、時間単位ｔｊを使う必要がある。
【０１０３】
ステップＳ１３２では、初期化機能１０３が、各物理プロセッサ００２について、物理プロセッサ＃ｊの動作周波数を物理プロセッサテーブル＃ｊから特定する。
【０１０４】
ステップＳ１３３では、初期化機能１０３は、下記数４に従って、物理プロセッサ＃ｊのタイムスライス時間長ｔｊを算出する。すなわち、サイクル数単位のタイムスライスＳが、物理プロセッサ＃ｊの設定動作周波数ｆｊで除算される。
【０１０５】
【数４】
0005388909.tif 000005
ステップＳ１３４では、初期化機能１０３は、各物理プロセッサ００２について、ステップＳ１３３で算出されたタイムスライス時間長ｔｊを、物理プロセッサ＃ｊに対応する物理プロセッサテーブル＃ｊに登録する。
【０１０６】
＜スケジューリング処理（図８のステップＳ２）、及び、初期化条件判定処理（図８のステップＳ３）＞。
【０１０７】
図１２は、スケジューリング処理と初期化条件判定処理とを含んだ処理のフローチャートである。スケジューリング処理は、スケジューリング機能１０１により行われる。
【０１０８】
スケジューリング処理は、４つの通常処理を有し、初期化条件判定処理は、４つの判定処理と、外部要因による周波数変更発生時の処理（ステップＳ３５）とを含む。４つの通常処理とは、優先度比較（ステップＳ２１）、仮想プロセッサ走行（ステップＳ２２）、仮想プロセッサ停止（ステップＳ２３）、及び、使用サイクル数とサービスアウト回数との更新（ステップＳ２４）である。４つの判定処理とは、初期化周期Ｔの経過の判定（ステップＳ３１）、サービス率設定変更有無の判定（ステップＳ３２）、仮想計算機数変更の有無の判定（ステップＳ３３）、及び、外部要因による周波数変更の有無の判定（ステップＳ３４）である。
【０１０９】
各物理プロセッサ００２について、図１２に示すスケジューリング処理が適用される。各物理プロセッサ００２を時分割共有することにより、物理計算機００２のプロセッササイクルが、複数の仮想計算機３００へ、仮想計算機３００のサービス率の比の通りに配分される。
【０１１０】
優先度比較の基準として、仮想計算機＃ｉのスケジュール優先度Ｐｉが定義され且つ利用される。仮想計算機＃ｉが持ちサイクル数Ｑｉを使いきってしまった回数が、サービスアウト回数Ｏｉである。スケジュール優先度Ｐｉは、下記数５に従って算出される。すなわち、仮想計算機＃ｉの使用サイクル数Ｕｉが、持ちサイクル数Ｑｉで除算され、且つ、サービスアウト回数Ｏｉが加算される。
【０１１１】
【数５】
0005388909.tif 000006
スケジュール優先度Ｐｉが小さい仮想計算機が優先的に選択され、その選択された仮想計算機内の仮想プロセッサが、優先的に物理プロセッサで走行させられる。また、優先度が等しい仮想計算機が存在する場合、仮想計算機番号の大きいもの、あるいは小さいもののいずれかが優先的に選択されるように決める。
【０１１２】
＜＜優先度比較から仮想プロセッサ走行までの処理（図１２のステップＳ２１及びＳ２２＞＞。
【０１１３】
図１３は、優先度比較から仮想プロセス走行までの処理のフローチャートである。この処理は、任意の物理プロセッサ００２に対するスケジュール対象の仮想計算機３００を選び、且つ、その仮想計算機３００内の仮想プロセッサ３０３を走行させる際に呼び出される。
【０１１４】
ステップＳ２１１からＳ２１３では、優先度比較において使われる変数の初期化が行われる。
【０１１５】
すなわち、ステップＳ２１１では、スケジューリング機能１０１が、最小優先度を格納する変数ＭｉｎＰｒｉｏに、スケジュール優先度Ｐｉが取り得ない最大値を代入する。
【０１１６】
ステップＳ２１２では、スケジューリング機能１０１が、スケジュール対象仮想計算機番号を格納する変数ＳｃｈｅｄＬｐａｒへ−１を代入する。
【０１１７】
ステップＳ２１３では、スケジューリング機能１０１が、優先度確認中の仮想計算機番号を格納する変数ｉに１を代入する。
【０１１８】
ステップＳ２１４からＳ２１９は、各仮想計算機３００について繰り返される。
【０１１９】
ステップＳ２１４で、スケジューリング機能１０１は、仮想計算機テーブル３１０にあるレディ状態ビット３１１を確認する。ビット３１１がＯＮ（１）であれば（Ｓ２１４：ＹＥＳ）、ステップＳ２１５が行われ、ビット３１１がＯＦＦ（０）であれば（Ｓ２１４：ＮＯ）、ステップＳ２１９が行われる。
【０１２０】
ステップＳ２１５では、スケジューリング機能１０１は、仮想計算機テーブル＃ｉからスケジュール優先度Ｐｉを特定する。
【０１２１】
ステップＳ２１６では、スケジューリング機能１０１は、変数ＭｉｎＰｒｉｏの値が優先度Ｐｉより大きいか否かを判定する。この判定の結果が肯定的であれば（Ｓ２１６：ＹＥＳ）、ステップＳ２１７が行われ、この判定の結果が否定的であれば（Ｓ２１６：ＮＯ）、ステップＳ２１９が行われる。
【０１２２】
ステップＳ２１７では、スケジューリング機能１０１は、スケジュール優先度Ｐｉの値を変数ＭｉｎＰｒｉｏへ代入する。
【０１２３】
ステップＳ２１８では、スケジューリング機能１０１は、変数ｉの値を変数ＳｃｈｅｄＬｐａｒへ代入する。
【０１２４】
ステップＳ２１９では、スケジューリング機能１０１は、変数ｉの値に１を加算する。
【０１２５】
ステップＳ２２０では、スケジューリング機能１０１は、変数ｉの値が最大仮想計算機番号であるか否かを判定する。つまり、全ての仮想計算機についてステップ２１４が行われたか否かが判定される。この判定の結果が肯定的であれば、ステップＳ２２１が行われ、この判定の結果が否定的であれば、変数ｉの値と等しい仮想計算機番号の仮想計算機について、ステップＳ２１４が行われる。
【０１２６】
ステップＳ２２１では、スケジューリング機能１０１は、変数ＳｃｈｅｄＬｐａｒの値が−１であるか否かを判定する。ここまででスケジュール可能な仮想計算機が見つからない場合、変数ＳｃｈｅｄＬｐａｒの値は−１のままであり（Ｓ２２１：ＹＥＳ）、ステップＳ２２６が行われる。そうでない場合には（Ｓ２２１：ＮＯ）、スケジュール可能な仮想計算機が見つかったことになり、ステップＳ２２２が行われる。
【０１２７】
ステップＳ２２２では、スケジューリング機能１０１は、変数ＳｃｈｅｄＬｐａｒの値に等しい番号の仮想計算機＃ｉのレディキュー＃ｉの先頭より仮想プロセッサを取り出す。
【０１２８】
ステップＳ２２３では、スケジューリング機能１０１は、システム時刻を特定し、仮想プロセッサテーブル＃ｉに、仮想プロセッサの走行開始時刻を表す情報３１９として、システム時刻を表す情報を登録する。
【０１２９】
ステップＳ２２４では、スケジューリング機能１０１は、物理プロセッサ＃ｊへタイマ割り込みをあげる時刻を設定する。仮想プロセッサの走行開始時刻からタイマ割り込みが物理プロセッサ＃ｊにあげられる時刻までの時間長が、仮想プロセッサにとってのタイムスライス時間長になる。仮想プロセッサテーブル＃ｉにおいて、情報３２０が表す前回タイムスライス残り時間が０ならば、仮想プロセッサの走行開始時刻（情報３１９が表す時刻）からタイムスライス時間長ｔｊが経過してからタイマ割り込みがあがるように設定される。もし、前回タイムスライス残り時間として０以外の値が設定されているのであれば、仮想プロセッサ走行開始時刻から前回タイムスライス残り時間が経過してからタイマ割り込みがあがるように設定される。
【０１３０】
ステップＳ２２５では、スケジューリング機能１０１は、仮想プロセッサを物理プロセッサ＃ｊへ走行開始する。
【０１３１】
ステップＳ２２６では、スケジューリング機能１０１は、物理プロセッサ＃ｊへタイマ割り込みをあげる時刻を設定する。アイドルプロセス走行開始時刻Ｉｊからタイマ割り込みが物理プロセッサ＃ｊにあげられる時刻までが、アイドルプロセス＃ｊにとってのタイムスライス時間長になる。
【０１３２】
ステップＳ２２７では、スケジューリング機能１０１は、物理プロセッサ＃ｊへアイドルプロセス＃ｊを走行開始させる。
【０１３３】
＜＜仮想プロセッサの走行停止より使用サイクル数及びサービスアウト回数の更新までの処理（図１２のステップＳ２３及びＳ２４）＞＞。
【０１３４】
仮想計算機＃ｉが、或るタイムスライスｘへスケジュールされ、走行が終了したとする。走行終了後には、使用サイクル数Ｕｉの値が更新される。スケジュール終了後、持ちサイクル数Ｑｉが残っている場合には、これまでの使用サイクル数Ｕｉに、停止した仮想プロセッサが直前に走行していた物理プロセッサの周波数ｆｉｘとその仮想プロセッサが直前に連続走行した時間長である走行時間ｒｉｘとの積が加算される。走行時間ｒｉｘと周波数ｆｉｘとの積が算出される理由は、これにより走行サイクル数が求められることにある。
【０１３５】
更新後の使用サイクル数Ｕｎｅｗ＿ｉは、下記数６に従い算出される。
【０１３６】
【数６】
0005388909.tif 000007
いずれかの仮想計算機がアイドルになり、仮想プロセッサが休止状態に入り、仮想プロセッサがスケジュールされてからタイムスライス分だけ走行する前に、その仮想プロセッサが走行した物理プロセッサを譲り渡すこともあり得る。そのため、ここでは、走行時間として、タイマ設定値（タイムスライス時間長）tｊではなく、別のアルファベット記号ｒｉｘが用いられる。もし、仮想プロセッサがタイムスライス分だけ走行できずに物理プロセッサが譲り渡された場合、仮想プロセッサテーブル＃ｉに、情報３２０（前回タイムスライス残り時間）として、タイムスライスの残り時間を表す情報が登録される。
【０１３７】
仮想プロセッサが走行した結果、その仮想プロセッサを有する仮想計算機＃ｉが持ちサイクル数Ｑｉを使い果たしてしまうことを、本実施例の説明において、サービスアウト発生と呼ばれる。サービスアウト発生とは、下記数７の条件があてはまることである。
【０１３８】
【数７】
0005388909.tif 000008
仮想計算機＃ｉのサービスアウト発生が検出された場合、スケジューリング機能１０１が、サービスアウト回数Ｏｉに１を加算する。サービスアウト発生がある場合、使用サイクル数の更新処理は数６から下記数８のように変わる。
【０１３９】
使用サイクル数Ｕｉに物理プロセッサの周波数ｆｉｘと走行時間ｒｉｘとの積が加算され、且つ、Ｑｉが引かれた値が、更新後の使用サイクル数になる。すなわち、サービスアウト発生がある場合、更新後の使用サイクル数は、下記数８の通りとなる。
【０１４０】
【数８】
0005388909.tif 000009
図１４は、仮想計算機＃ｉの仮想プロセッサの走行停止から使用サイクル数及びサービスアウト回数の更新までの処理のフローチャートである。
【０１４１】
図１４の処理が呼び出される契機は、仮想プロセッサが物理プロセッサを譲り渡す場合、或いは、仮想プロセッサがタイムスライス分だけ走行した場合である。
【０１４２】
ステップＳ２４０では、仮想プロセッサの走行が停止する。
【０１４３】
ステップＳ２４１では、スケジューリング機能１０１が、仮想プロセッサ走行終了時にシステム時刻００７を参照することにより、仮想プロセッサ走行終了時のシステム時刻を特定する。
【０１４４】
ステップＳ２４２では、スケジューリング機能１０１が、仮想プロセッサ走行終了時刻を、仮想プロセッサテーブル＃ｉの情報３１９が表す仮想プロセッサ走行開始時刻から引く。これにより算出された値が、仮想プロセッサの走行時間ｒｉｘである。
【０１４５】
ステップＳ２４３では、スケジューリング機能１０１が、停止した仮想プロセッサが走行した物理プロセッサ＃ｊに対応する物理プロセッサテーブル＃ｊ内の情報２１５（仮想プロセッサ走行時間の和を表す情報）に、仮想プロセッサの走行時間ｒｉｘを加算する。
【０１４６】
ステップＳ２４４では、スケジューリング機能１０１が、物理プロセッサテーブル＃ｊから、設定動作周波数ｆｊ（ｆｉｘ）を特定する。
【０１４７】
ステップＳ２４５では、スケジューリング機能１０１が、走行時間ｒｉｘと設定動作周波数ｆｉｘとの積を求める。その積が、今回使用分のプロセッササイクル数である。
【０１４８】
ステップＳ２４６では、スケジューリング機能１０１が、停止した仮想プロセッサを有する仮想計算機＃ｉに対応した仮想計算機テーブル＃ｉにおける使用サイクル数Ｕｉに、今回使用分のプロセッササイクル数（ｆｉｘ×ｒｉｘ）を加算する。つまり、前述の数６が計算される。
【０１４９】
ステップＳ２４７では、スケジューリング機能１０１が、仮想計算機テーブル＃ｉを基に、使用サイクル数Ｕｉが持ちサイクル数Ｑｉより大きいか否かを判定する。このステップは、サービスアウト発生の有無の確認のために実行される。ＵｉがＱｉ以下の場合（Ｓ２４７：ＮＯ）、処理が終了する。ＵｉがＱｉより大きい場合（Ｓ２４７：ＹＥＳ）、ステップＳ２４８が行われる。
【０１５０】
ステップＳ２４８では、スケジューリング機能１０１が、仮想計算機テーブル＃ｉにおける使用サイクル数Ｕｉ（ステップＳ２４６での更新後のＵｉ）から持ちサイクル数Ｑｉを引く。このステップでの更新後のＵｉが、前述の数８に従うＵｎｅｗ＿ｉである。
【０１５１】
ステップＳ２４９では、スケジューリング機能１０１が、仮想計算機テーブル＃ｉにおけるサービスアウト回数Ｏｉに１を加算する。
【０１５２】
図１４の処理の後に、図１２のステップＳ３１からＳ３４の判定処理が行われる。
【０１５３】
＜＜初期化周期Ｔの経過の判定（図１２のステップＳ３１）＞＞。
【０１５４】
初期化時間Ｔの検出処理においては、スケジューリング機能１０１が、グローバルテーブル２０１を基に、現在のシステム時刻がラスト初期化時刻ＬａｓｔＳから初期化周期Ｔを経過したか否かを判定する。この判定の結果が肯定的であれば（図１２のＳ３１：ＹＥＳ）、図１２の処理が終了する。その後、図８のステップＳ１（図９のスケジューリング初期化処理）が行われる。
【０１５５】
＜＜サービス率設定変更有無の判定（図１２のステップＳ３２）＞＞。
【０１５６】
スケジューリング機能１０１が、いずれかの仮想計算機のサービス率Ｗｉがユーザにより変更されているか否かを判定する。この判定結果が肯定的であれば（図１２のＳ３２：ＹＥＳ）、図１２の処理が終了する。その後、図８のステップＳ１（図９のスケジューリング初期化処理）が行われる。
【０１５７】
＜＜仮想計算機数変更の有無の判定（図１２のステップＳ３３）＞＞。
【０１５８】
スケジューリング機能１０１が、稼働中の仮想計算機の稼働停止、又は、新たな仮想計算機の起動があるか否かを判定する。この判定の結果が肯定的であれば（図１２のＳ３３：ＹＥＳ）、図１２の処理が終了する。その後、図８のステップＳ１（図９のスケジューリング初期化処理）が行われる。
【０１５９】
＜＜外部要因による周波数変更の有無の判定（図１２のステップＳ３４）、及び、外部要因による周波数変更検出時の処理（図１２のステップＳ３５＞＞。
【０１６０】
周波数変化検出機能１０４が、周波数変更機能１０５の外部の要因（例えば、プロセッサパワーキャッピング機能の稼働、物理プロセッサの温度異常検出時）によって物理プロセッサの動作周波数が変更されたか否かを判定する。この判定の結果が肯定的の場合（図１２のＳ３４：ＹＥＳ）、ステップＳ３５が行われる。一方、この判定の結果が否定的の場合（図１２のＳ３４：ＮＯ）、図１２のステップＳ２１が再度行われる。
【０１６１】
図１２のＳ３１、Ｓ３２、Ｓ３３のいずれかでＹＥＳの場合、図１２の処理が終了し、その後、図８のＳ１で初期化機能１０３が呼び出される。
【０１６２】
本実施例では、スケジューリング初期化の条件判定として、図１２のステップＳ３４が追加され、Ｓ３４：ＹＥＳの場合、ステップＳ３５が行われる。このため、外部要因によって動作周波数が変更した場合でも、サービス率制御（仮想計算機のサービス率の比の通りに命令を配分すること）の正確性が損なわれることはない。
【０１６３】
図１５は、外部要因による周波数変更の有無の判定、及び、周波数変更検出時の処理のフローチャートである。図１５は、図１２のステップＳ３４およびＳ３５を詳細に示す。図１５に示す処理は、スケジューリング機能１０１の一部である周波数変化検出機能１０４により行われる。本処理により周波数の変化が検出され、周波数変更機能１０５は周波数変化後に負荷監視機能１０６が採取した情報を元に動作を行う。
【０１６４】
ステップＳ３５０では、周波数変化検出機能１０４は、物理プロセッサ番号である変数ｊを０に初期化する。
【０１６５】
ステップＳ３５１では、周波数変化検出機能１０４は、物理プロセッサ＃ｊの動作周波数が外部要因により変更されているか否かを判定する。この判定の結果が肯定的であれば（Ｓ３５１：ＹＥＳ）、ステップＳ３５２が行われ、この判定の結果が否定的であれば（Ｓ３５１：ＮＯ）、ステップＳ３５７が行われる。
【０１６６】
ステップＳ３５２では、周波数変化検出機能１０４は、物理プロセッサ＃ｊのレジスタ００４から、動作周波数ｆｊを特定する。
【０１６７】
ステップＳ３５３では、周波数変化検出機能１０４は、物理プロセッサテーブル＃ｊの情報２１１を、ステップＳ３５２で特定した動作周波数ｆｊを表す情報に更新する。
【０１６８】
ステップＳ３５４では、周波数変化検出機能１０４は、仮想プロセッサ走行時間ｒｉｘを０にリセットする。
【０１６９】
ステップＳ３５５では、周波数変化検出機能１０４は、物理プロセッサテーブル＃ｊにおける外部要因周波数変更フラグ２１６をＯＮ（１）にする。
【０１７０】
ステップＳ３５６では、周波数変化検出機能１０４は、物理プロセッサテーブル＃ｊに、周波数変更検出時刻を表す情報２１７として、現在のシステム時刻を表す情報を登録する。
【０１７１】
ステップＳ３５７では、周波数変化検出機能１０４は、変数ｊに１を加算する。
【０１７２】
ステップＳ３５８では、周波数変化検出機能１０４は、変数ｊの値が物理プロセッサ番号の最大値より大きいか否かを判定する。この判定の結果が肯定的であれば（Ｓ３５８：ＹＥＳ）、図１５の処理が終了する。この判定の結果が否定的であれば（Ｓ３５８：ＮＯ）、ステップＳ３５１が再度行われる。
【０１７３】
以上が、図８のステップＳ１〜Ｓ３の詳細である。
【０１７４】
本実施例においてプロセッササイクル数ベースのスケジューリングを適用した際の動作の具体例を以下に説明する。ここでは、仮想計算機３００のサービス率の比が、＃１：＃２：＃３＝５：３：２であり、スケジューリング初期化周期Ｔ１は、１００ｍｓであるとする。
【０１７５】
なお、ここでは、仮想計算機がアイドルであるため、タイムスライスの途中で仮想プロセッサが物理プロセッサを明け渡たすことはないとする。時刻０ｍｓより１００ｍｓの間でサービス率の変更、仮想計算機の稼働停止、新たな仮想計算機の起動、外部要因による動作周波数の発生もないとする。なお、「明け渡す」とは、仮想プロセッサが停止し、それ故、物理プロセッサが解放されることを意味する。
【０１７６】
仮想計算機＃１の持ちサイクル数Ｑ１は、前述の数３によれば、（１００×１０−３）×（３．２×１０９＋１．６×１０９）×（５／（５＋３＋２））＝２４０×１０６、つまり、２４０メガサイクルとなる。
【０１７７】
仮想計算機＃２の持ちサイクル数Ｑ２は、前述の数３によれば、（１００×１０−３）×（３．２×１０９＋１．６×１０９）×（３／（５＋３＋２））＝１４４×１０６、つまり、１４４メガサイクルとなる。
【０１７８】
仮想計算機＃３の持ちサイクル数Ｑ３は、前述の数３によれば、（１００×１０−３）×（３．２×１０９＋１．６×１０９）×（２／（５＋３＋２））＝９６×１０６、つまり、９６メガサイクルとなる。サイクル数については、桁数が多いため、図や文中においてメガ（１０６）サイクル単位で値を表示していくことにする。
【０１７９】
タイムスライスＳは、１．６×１０７サイクルと設定されている。
【０１８０】
物理プロセッサ＃０の動作周波数は３．２ＧＨｚなので、タイマ割り込みのあがる間隔は、前述の数４によれば、（１．６×１０７）／（３．２×１０９）＝５．０×１０−３となる。つまり、物理プロセッサ＃０へスケジュールされる仮想プロセッサは、５ｍｓだけ連続して走行可能である。
【０１８１】
物理プロセッサ＃１については、動作周波数が１．６ＧＨｚであるので、タイマ割り込みのあがる間隔は、前述の数４によれば、（１．６×１０７）／（１．６×１０９）＝１．０×１０−２となる。つまり、物理プロセッサ＃１へスケジュールされる仮想プロセッサは１０ｍｓだけ連続して走行可能である。
【０１８２】
以降では、各時刻におけるプロセッササイクル数ベースのスケジューラの動きを説明する。なお、図１６では、各時刻におけるそれぞれの仮想計算機のスケジュール優先度を表している。仮想計算機＃ｉのスケジュール優先度Ｐｉは、持ちサイクル数Ｑｉに対する使用サイクル数Ｕｉの割合である。すなわち、図１６及び以後の説明では、スケジュール優先度Ｐｉについては、分子に使用サイクル数Ｕｉ、分母に持ちサイクル数Ｑｉをメガサイクル数単位で明示的に表示することにする。図１７は、各時間帯において仮想計算機の仮想プロセッサの走行した物理プロセッサを示した表である（「ＣＰＵ０」は、物理プロセッサ＃０のことであり、「ＣＰＵ１」は、物理プロセッサ＃１のことである）。図１７によれば、複数の仮想計算機の優先度が等しい場合、番号の最も小さい仮想計算機が優先的にタイムスライスの割当先とされる。また、番号の最も小さい物理プロセッサが、優先的に、タイムスライスの割当元とされる。しかし、それは一例にすぎず、例えば、番号の最も大きい仮想計算機或いは物理プロセッサが優先的に選択されてもよい。
【０１８３】
時刻０ｍｓにおいては、物理プロセッサ＃０も物理プロセッサ＃１も、走行中である仮想計算機の仮想プロセッサが存在しない。本実施例の場合、物理プロセッサ＃０の動作周波数が物理プロセッサ＃１の動作周波数より高く処理速度が大きいため、物理プロセッサ＃０へ走行対象の仮想計算機の優先的に割り当てられる。全仮想計算機の優先度は０で等しいため、仮想計算機番号が最小である仮想計算機＃１の仮想プロセッサが、物理プロセッサ＃０へスケジュールされる。そして、物理プロセッサ＃１への走行対象仮想計算機として、次に仮想計算機番号が小さい仮想計算機＃２が選択される。
【０１８４】
時刻５ｍｓにおいては、物理プロセッサ＃０へタイマ割りこみがあがり、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃０を明け渡す。このため、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃２の仮想プロセッサがまだ走行中である。本実施例では、どの仮想計算機も仮想プロセッサをひとつずつしか持たないので、仮想計算機＃２のレディ状態ビット＃２はＯＦＦ（０）であり、優先度比較の対象から外れている。優先度比較の結果、仮想計算機＃３の優先度が０で最低値をとっているので、仮想計算機＃３の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。
【０１８５】
時刻１０ｍｓにおいては、物理プロセッサ＃０及び＃１の両方へタイマ割り込みがあがる。このため、仮想計算機＃３および仮想計算機＃２の仮想プロセッサは、それぞれ、物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で、走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が、１６／２４０：１６／１４４：１６／９６となっているので、最小である仮想計算機＃１が選択される。物理プロセッサ＃１への走行対象仮想計算機については、次に値の小さい仮想計算機＃２が選択される。
【０１８６】
時刻１５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃１の仮想プロセッサは物理プロセッサ＃０を明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機２＃の仮想プロセッサがまだ走行中でレディ状態ビット＃２がＯＦＦ（０）になっているので、仮想計算機＃２は優先度比較の対象から外れる。残りの仮想計算機＃１及び＃３の優先度３２／２４０と１６／９６を比較すると、前者の方が小さい値なので、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃０へスケジューリングされる。
【０１８７】
時刻２０ｍｓにおいては、物理プロセッサ＃０及び＃１の両方へタイマ割り込みがあがるので、仮想計算機＃１及び＃２の仮想プロセッサは物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で、走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が４８／２４０：３２／１４４：１６／９６となっているので、最小である仮想計算機＃３が選択される。物理プロセッサ＃１への走行対象仮想計算機については、次に値の小さい仮想計算機＃１が選択される。
【０１８８】
時刻２５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃３の仮想プロセッサが物理プロセッサ＃０を明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃１の仮想プロセッサがまだ走行中でレディ状態ビット＃１がＯＦＦ（０）になっているので、仮想計算機＃１は優先度比較の対象から外れる。残りの仮想計算機＃２及び＃３の優先度を比較すると、３２／１４４：３２／９６であり、前者の方が小さい値なので、物理プロセッサ＃０へ仮想計算機＃２の仮想プロセッサがスケジューリングされる。
【０１８９】
時刻３０ｍｓにおいては、物理プロセッサ＃０及び＃１の両方へタイマ割り込みがあがるので、仮想計算機＃２および仮想計算機＃１の仮想プロセッサは物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が、６４／２４０：４８／１４４：３２／９６となっているので、最小である仮想計算機＃１が選択される。物理プロセッサ＃１への走行対象仮想計算機をみてみると、仮想計算機＃２、仮想計算機＃３の優先度はともに１／３で等しい値をとっているので、仮想計算機番号の小さい仮想計算機＃２の仮想プロセッサがスケジュールされる。
【０１９０】
時刻３５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃１の仮想プロセッサは物理プロセッサ＃０を明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃２の仮想プロセッサがまだ走行中でレディ状態ビット＃２がＯＦＦ（０）になっているので、仮想計算機＃１は優先度比較の対象から外れる。残りの仮想計算機＃１及び＃３の優先度を比較すると、８０／２４０：３２／９６で、ともに１／３で等しい値をとっているので、仮想計算機番号の小さい仮想計算機＃１の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。
【０１９１】
時刻４０ｍｓにおいては、物理プロセッサ＃０及び＃１の両方へタイマ割り込みがあがるので、仮想計算機＃１及び＃２の仮想プロセッサが物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が９６／２４０：６４／１４４：３２／９６となっているので、最小である仮想計算機＃３が選択される。物理プロセッサ＃１への走行対象仮想計算機をみてみると、仮想計算機＃１の方が優先度の値が小さい。よって、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃１へスケジュールされる。
【０１９２】
時刻４５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃３の仮想プロセッサは物理プロセッサを明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃１の仮想プロセッサがまだ走行中でレディ状態ビット＃１がＯＦＦ（０）であるので、仮想計算機＃１は優先度比較の対象から外れる。残りの仮想計算機＃２及び＃３の優先度を比較すると、６４／１４４：４８／９６となっており、前者の方が小さい値なので、仮想計算機＃２の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。
【０１９３】
時刻５０ｍｓにおいては、物理プロセッサ＃０及び＃１の両方へタイマ割り込みがあがるので、仮想計算機＃２および仮想計算機＃１の仮想プロセッサは物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が１１２／２４０：８０／１４４：４８／９６となっているので、最小である仮想計算機＃１が選択される。物理プロセッサ＃１への走行対象仮想計算機をみてみると、仮想計算機＃３の方が優先度の値が小さいので、仮想計算機＃３の仮想プロセッサが物理プロセッサ＃１へスケジュールされる。
【０１９４】
時刻５５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃１の仮想プロセッサは物理プロセッサ＃０を明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃３の仮想プロセッサがまだ走行中でレディ状態ビット＃３がＯＦＦ（０）になっているので、仮想計算機＃３は優先度比較の対象から外れる。残りの仮想計算機＃１、仮想計算機＃２の優先度を比較すると、１２８／２４０：８０／１４４となっており、前者の方が小さい値なので、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。
【０１９５】
時刻６０ｍｓにおいては、物理プロセッサ＃０及び＃１の両方へタイマ割り込みがあがるので、仮想計算機＃１および仮想計算機＃３の仮想プロセッサは物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が１４４／２４０：８０／１４４：６４／９６となっているので、最小である仮想計算機＃２が選択される。物理プロセッサ＃１への走行対象仮想計算機をみてみると、仮想計算機＃１の方が優先度の値が小さいので、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃１へスケジュールされる。
【０１９６】
時刻６５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃２の仮想プロセッサは物理プロセッサ＃０を明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃１の仮想プロセッサがまだ走行中でレディ状態ビット＃１がＯＦＦ（０）であるので、仮想計算機＃１は優先度比較の対象から外れる。残りの仮想計算機＃２及び＃３の優先度を比較すると、９６／１４４：６４／９６となっており、ともに２／３で等しい値をとっているので、仮想計算機番号の小さい仮想計算機＃２の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。
【０１９７】
時刻７０ｍｓにおいては、物理プロセッサ＃０、物理プロセッサ＃１の両方へタイマ割り込みがあがるので、仮想計算機＃２および仮想計算機＃１の仮想プロセッサは物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が１６０／２４０：１１２／１４４：６４／９６となっており、最小値を探すと仮想計算機１と仮想計算機３の優先度がともに２／３で等しい値をとっているので、仮想計算機番号の小さい仮想計算機＃１の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。もう片方である仮想計算機＃３の仮想プロセッサについては物理プロセッサ＃１へスケジュールされる。
【０１９８】
時刻７５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃１の仮想プロセッサは物理プロセッサ＃０を明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃３の仮想プロセッサがまだ走行中でレディ状態ビット＃３がＯＦＦ（０）であるので、仮想計算機＃３は優先度比較の対象から外れる。残りの仮想計算機＃１及び＃２の優先度を比較すると、１７６／２４０：１１２／１４４となっており、前者の方が小さい値なので、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。
【０１９９】
時刻８０ｍｓにおいては、物理プロセッサ＃０及び＃１の両方へタイマ割り込みがあがるので、仮想計算機＃１及び＃３の仮想プロセッサは物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が１９２／２４０：１１２／１４４：８０／９６となっているので、最小である仮想計算機＃２が選択される。物理プロセッサ＃１への走行対象仮想計算機をみてみると、仮想計算機＃１の方が優先度の値が小さいので、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃１へスケジュールされる。
【０２００】
時刻８５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃２の仮想プロセッサが物理プロセッサ＃０を明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃１がまだ走行中でレディ状態ビット＃１がＯＦＦ（０）であるので、仮想計算機＃１は優先度比較の対象から外れる。残りの仮想計算機＃２及び＃３の優先度を比較すると、１２８／１４４：８０／９６となっており、後者の方が小さい値なので、仮想計算機＃３の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。
【０２０１】
時刻９０ｍｓにおいては、物理プロセッサ＃０及び＃１の両方へタイマ割り込みがあがるので、仮想計算機＃３および仮想計算機＃１の仮想プロセッサは物理プロセッサを明け渡す。物理プロセッサ＃０、物理プロセッサ＃１の順番で走行対象仮想計算機の優先度比較が行われる。物理プロセッサ＃０への走行対象仮想計算機については、優先度が２０８／２４０：１２８／１４４：９６／９６となっているので、最小である仮想計算機＃１が選択される。仮想計算機＃３については、使用サイクル数が持ちサイクル数に等しくなっているので、サービスアウトしたことがわかる。物理プロセッサ＃１への走行対象仮想計算機をみてみると、仮想計算機＃２の方が優先度の値が小さいので、仮想計算機＃２の仮想プロセッサが物理プロセッサ＃１へスケジュールされる。
【０２０２】
時刻９５ｍｓにおいては、物理プロセッサ＃０へタイマ割り込みがあがり、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃０を明け渡し、仮想計算機間の優先度比較が行われることになる。物理プロセッサ＃１においては、仮想計算機＃２がまだ走行中でレディ状態ビット＃２がＯＦＦ（０）であるので、仮想計算機＃２は優先度比較の対象から外れる。残りの仮想計算機＃１及び＃３の優先度を比較すると、２２４／２４０：１となっており、前者の方が小さい値なので、仮想計算機＃１の仮想プロセッサが物理プロセッサ＃０へスケジュールされる。
【０２０３】
時刻１００ｍｓにおいては、仮想計算機＃１の使用サイクル数が２４０メガサイクル、仮想計算機＃２の使用サイクル数が１４４メガサイクル、仮想計算機＃３の使用サイクル数が９６メガサイクルとなっており、設定されたサービス率に等しい５：３：２の比率でプロセッササイクルが正確に配分されたことがわかる。本具体例では、スケジューリングのパラメータ再計算の周期（初期化周期）Ｔ１が１００ｍｓに設定されているので、この時点において、持ちサイクル数Ｑｉ、使用サイクル数Ｕｉ、サービスアウト回数Ｏｉのゼロへのリセットが行われる。
【０２０４】
以上で説明した、プロセッササイクル数ベースのスケジューリングにおいては、各時刻に置いて物理プロセッサへ走行させる仮想計算機の仮想プロセッサが見つからず、アイドルプロセスが走行することはない。
【０２０５】
各時刻において、各仮想計算機の割り当てプロセッササイクル数の比率が、仮想計算機のサービス率の比５：３：２に近くなるほど、各仮想計算機の実行可能命令数の比率もサービス率の比に近づくため、スケジューリングとしてより望ましい。本実施例に係るスケジューリングを用いれば、物理プロセッサの動作周波数が異なっていても、従来のスケジューリングに比べて、仮想計算機のサービス率の比の通りに実行資源を配分することが可能である。
【０２０６】
さて、ここまでは、図８の全体処理のうち、スケジューリング初期化、スケジューリング処理、初期化条件判定処理、起動中の仮想計算機がなくなった場合についての処理に関する説明を中心に行ってきた。
【０２０７】
以降では、図８のステップＳ２での負荷監視処理と、図８のステップＳ５、ステップＳ６およびステップＳ７に対応する、周波数個別変更処理とを説明する。図８のフローチャートに示されているように、スケジューリング処理は、周波数個別変更処理に悪影響を与えることなく行われる。すなわち、スケジューリング処理と周波数個別変更処理は、互いに矛盾なく両立される。
【０２０８】
＜負荷監視処理（図８のステップＳ２）、及び、調整条件判定処理（図８のステップＳ５）＞。
【０２０９】
周波数調整処理の周期Ｔ２は、スケジューリング初期化の周期Ｔ１と等しい値、或いは、スケジューリング初期化周期Ｔ１の２倍以上の整数倍βＴ１に設定される（βは、２以上の整数）。
【０２１０】
先に述べたように、図８ステップＳ５では、システム時刻を基に、ラスト調整時刻ＬａｓｔＦより周波数調整処理の周期Ｔ２分だけ時間が経過していることが検出された場合に（Ｓ５：ＹＥＳ）、時間利用率算出慮リ（図８のステップＳ６）が行われる。この時、周期Ｔ２が周期Ｔ１と等しければ、定期的なスケジューリング初期化処理の前に、必ず、周波数調整処理が行われる。
【０２１１】
もし、周期Ｔ２が周期Ｔ１の２倍以上の整数倍βＴ１であれば、周波数調整処理は、スケジューリング初期化β回につき１回の割合で実行される。
【０２１２】
本実施例に係る計算機システムを稼働させた結果、物理プロセッサ＃０への業務量６００は、図２の上側のグラフに示したような変化をしたとする。業務量６００の時間的変化、周波数変更機能１０５及び負荷監視機能１０６の働きにより、物理プロセッサ＃０の処理量６０３は、図２の下側のグラフに示したような変化をする。各時点での利用可能実行資源量６０１は、その時点での動作周波数で決まる、１秒あたりに処理可能なサイクル数の上限である。
【０２１３】
なお、図２の上下のグラフに示した時間範囲においては、外部要因による周波数変更が発生していないものとする。物理プロセッサ＃０の設定動作周波数は、最高値が３．２ＧＨｚであり、最低値である１．６ＧＨｚまで１３３ＭＨｚ単位での設定変更が可能であるとする。
【０２１４】
図２の上側のグラフによれば、物理プロセッサ＃０への業務量６００は、下記のように変化している。
【０２１５】
すなわち、時刻０より時刻ｔ１までの期間においては、業務量６００は、６．４Ｘ１０８サイクル／秒となっている。
【０２１６】
時刻ｔ１において、業務量６００が、６．４×１０８サイクル／秒から２．５６×１０９サイクル／秒に上昇している。
【０２１７】
時刻ｔ２において、業務量６００が、２．５６×１０９サイクル／秒より、９．６×１０８サイクル／秒に低下している。
【０２１８】
図２の下側のグラフによれば、物理プロセッサ＃０の処理量６０３は、下記のように変化している。
【０２１９】
時刻０より時刻ｔ１までの期間においては、処理量６０３は、６．４×１０８サイクル／秒となっており、業務量６００に等しい。設定動作周波数は１．６ＧＨｚであるため、利用可能実行資源量６０１は、１．６×１０９サイクル／秒となっている。
【０２２０】
時刻ｔ１において、業務量６００が上昇した結果、処理量６０３は、利用可能実行資源量６０１である１．６×１０９サイクル／秒まで上昇する。
【０２２１】
時刻ｔ１より時刻ｔ１＋Ｔ２までの期間においては、業務量６００が２．５６×１０９サイクル／秒に対し、利用可能実行資源量６０１は１．６×１０９サイクル／秒となっているため、処理量６０３に不足が生じている。
【０２２２】
時刻（ｔ１＋Ｔ２）において、負荷監視機能１０６及び周波数変更機能１０５の働きにより、物理プロセッサ＃０の設定動作周波数が３．２ＧＨｚに上げられ、利用可能実行資源量６０１が、３．２×１０９サイクル／秒に上昇する。物理プロセッサ＃０の処理量６０３は業務量６００に等しい２．５６×１０９サイクル／秒に上昇する。
【０２２３】
時刻ｔ２において、業務量６００は低下しているが、処理量６０３は、時刻（ｔ２＋Ｘ）まで、２．５６×１０９サイクルのままである（Ｘ＞０）。これは、時刻ｔ１から（ｔ１＋Ｔ２）までの期間において、処理量６０３が足した分を補うため、時刻ｔ２以降にそれ以前の時刻に生じた業務の一部が処理されているからである。
【０２２４】
時刻（ｔ２＋Ｘ）において、時刻ｔ２以前に生じた業務の処理が終了するため、処理量６０３は、業務量６００に等しい９．６×１０８サイクル／秒に低下する。物理プロセッサ＃０の設定動作周波数は３．２ＧＨｚのままである。
【０２２５】
時刻（ｔ２＋Ｘ＋Ｔ２）において、負荷監視機能１０６及び周波数変更機能１０５の働きにより、物理プロセッサ＃０の設定動作周波数が２．０ＧＨｚに下げられ、利用可能実行資源量６０１が２．０×１０９サイクル／秒に低下する。
【０２２６】
前述したように、物理プロセッサ＃０の処理量６０３は、物理プロセッサ＃０の設定動作周波数により決まる。
【０２２７】
物理プロセッサ＃０の処理量６０３に不足がないのであれば、物理プロセッサ＃０への業務量６００がそのまま処理量６０３に等しくなる。物理プロセッサ＃０への業務量６００が利用可能実行資源量６０１を上回ってしまう場合、処理量６０３は当該時刻での利用可能実行資源量６０１の値までしかとることができない。
【０２２８】
図１６より図１８に示したプロセッササイクル数ベースのスケジューリングの例においては、仮想計算機がアイドルであるなどの理由で、タイムスライスを使い果たす前に物理プロセッサを明け渡してしまったり、物理プロセッサへ走行させる仮想計算機の仮想プロセッサがなく、物理プロセッサ上をアイドルプロセスが走行したりすることがなかった。図１６より図１８に示した例では、時刻０ｍｓより時刻１００ｍｓまでのすべての期間において、物理プロセッサ＃０及び＃１のいずれも、仮想計算機の仮想プロセッサが走行しており、各仮想プロセッサは与えられたプロセッサ時間のすべてを利用していることになる。従って、それぞれの物理プロセッサ００２の時間利用率は１．０であることがわかる。
【０２２９】
もし、いずれかの仮想計算機がアイドルになり、仮想プロセッサが休止状態に入ってしまうことがあれば、物理プロセッサへ走行させる仮想計算機の仮想プロセッサがなく、物理プロセッサ上にアイドルプロセスが走行することがありうる。より多くの仮想計算機がより長い時間アイドルになるのであれば、計算機システム全体の業務量は低下し、各物理プロセッサ上をアイドルプロセスの走行している時間が長くなる。このような場合、各物理プロセッサの時間利用率は低下することが予想される。
【０２３０】
物理プロセッサ＃ｊの時間利用率αｊは、或る期間（例えば、後述の計算対象時間）に対する、物理プロセッサ＃ｊの仮想プロセッサの走行時間合計（物理プロセッサテーブル＃ｊの情報２１５が表す値）の割合である。物理プロセッサ＃ｊが或る期間において与えられた業務を処理した場合、時間利用率αｊは、「その期間において、物理プロセッサ＃ｊの処理量が、設定動作周波数によって決まる利用可能実行資源量のうち、どの程度を占めているのか」を判定する材料になる。
【０２３１】
＜物理プロセッサの時間利用率算出処理（図８のステップＳ６）＞。
【０２３２】
図１９は、時間利用率算出処理のフローチャートである。
【０２３３】
ステップＳ６００では、負荷監視機能１０６は、物理プロセッサ番号である変数ｊを０で初期化する。
【０２３４】
ステップＳ６０１では、負荷監視機能１０６は、システム時刻を特定する。
【０２３５】
ステップＳ６０２では、負荷監視機能１０６は、物理プロセッサテーブル＃ｊの外部要因周波数変更フラグ２１６がＯＮ（１）であるか否かを判定する。フラグ２１６がＯＮ（１）の場合（Ｓ６０２：ＹＥＳ）、ステップＳ６０３が行われ、フラグ２１６がＯＦＦ（０）の場合（Ｓ６０２：ＮＯ）、ステップＳ６０５が行われる。
【０２３６】
ステップＳ６０３では、負荷監視機能１０６は、物理プロセッサテーブル＃ｊ内の情報２１７が表す周波数変更検出時刻を特定する。
【０２３７】
ステップＳ６０４では、負荷監視機能１０６は、ステップＳ６０１で特定したシステム時刻とステップＳ６０３で特定した周波数変更検出時刻との差を算出する。その差が、ステップＳ６０８での計算対象時間とされる。
【０２３８】
ステップＳ６０５では、負荷監視機能１０６は、グローバルテーブル２０１からラスト調整時刻ＬａｓｔＦを特定する。
【０２３９】
ステップＳ６０６では、負荷監視機能１０６は、ステップＳ６０１で特定したシステム時刻と、ステップ６０５で特定したラスト調整時刻ＬａｓｔＦとの差を算出する。その差が、ステップＳ６０８での計算対象時間とされる。
【０２４０】
ステップＳ６０７では、負荷監視機能１０６は、物理プロセッサテーブル＃ｊ内の情報２１５が表す仮想プロセッサ走行時間合計を特定する。
【０２４１】
ステップＳ６０８では、負荷監視機能１０６は、ステップＳ６０４又はＳ６０６で算出された計算対象時間に対する、ステップＳ６０７で特定した仮想プロセッサ走行時間合計の割合を算出する。その割合が、物理プロセッサ＃ｊの時間利用率αｊである。
【０２４２】
ステップＳ６０９では、負荷監視機能１０６は、変数ｊに１を加算する。
【０２４３】
ステップＳ６１０では、負荷監視機能１０６は、更新後の変数ｊの値が物理プロセッサ番号の最大値より大きいか否かを判定する。この判定の結果が肯定的であれば（Ｓ６１０：ＹＥＳ）、図１８の処理が終了する。逆に、この判定の結果が否定的であれば（Ｓ６１０：ＮＯ）、ステップＳ６０１が再度行われる。
【０２４４】
負荷監視機能１０６により、周期Ｔ２ごとの時間利用率αｊが採取されることは、図２の下側のグラフにおいて、ｎを０以上の整数とした時、時刻ｎＴ２より時刻（ｎ＋１）Ｔ２までの区間において、利用可能実行資源量６０１と時間軸との間の面積のうち、処理量６０３の面積の占める割合を求めることに等しい。
【０２４５】
＜物理プロセッサの周波数調整処理（図８のステップＳ７）＞。
【０２４６】
周波数変更機能１０５は、周期Ｔ２ごとの時間利用率αｊ（時刻ｎＴ２より時刻（ｎ＋１）Ｔ２までの期間における、利用可能実行資源量６０１と時間軸との間の面積のうち、処理量６０３の面積の占める割合）を基に、時刻（ｎ＋１）Ｔ２より時刻（ｎ＋２）Ｔ２の期間での設定動作周波数を決定する。周波数変更機能１０５は、物理プロセッサ＃ｊの動作周波数を、決定後の動作周波数に変更する。
【０２４７】
周波数変更機能１０５が設定動作周波数を変更させる際の基準として、前述した第１しきい値Ｙ１と第２しきい値Ｙ２が用いられる（しきい値の数は、１でも２より多くても良い）。
【０２４８】
時刻ｎＴ２より時刻（ｎ＋１）Ｔ２までの期間において、時間利用率αｊが第１しきい値Ｙ１より大きければ、周波数変更機能１０５は、次の時刻（ｎ＋１）Ｔ２より時刻（ｎ＋２）Ｔ２の期間での設定動作周波数を上昇させる。
【０２４９】
時刻ｎＴ２より時刻（ｎ＋１）Ｔ２までの期間において、時間利用率αｊが第２しきい値Ｙ２より小さければ、周波数変更機能１０５は、次の時刻（ｎ＋１）Ｔ２より時刻（ｎ＋２）Ｔ２の期間での設定動作周波数を下降させる。
【０２５０】
図２０は、周波数調整処理のフローチャートである。
【０２５１】
ステップＳ７００では、周波数変更機能１０５は、システム時刻を特定し、グローバルテーブル２０１に、ラスト調整時刻ＬａｓｔＦとして、特定されたシステム時刻を設定する。
【０２５２】
ステップＳ７０１では、周波数変更機能１０５は、物理プロセッサ番号である変数ｊを０で初期化する。
【０２５３】
ステップＳ７０２では、周波数変更機能１０５は、物理プロセッサテーブル＃ｊから時間利用率αｊを特定する。
【０２５４】
ステップＳ７０３では、周波数変更機能１０５は、ステップＳ７０２で特定した時間利用率αｊが第２しきい値Ｙ２より大きいか否かを判定する。この判定の結果が肯定的の場合（Ｓ７０３：ＹＥＳ）、ステップＳ７０４が行われ、この判定の結果が否定的の場合（Ｓ７０３：ＮＯ）、ステップＳ７０５が行われる。
【０２５５】
ステップＳ７０４では、周波数変更機能１０５は、物理プロセッサ＃ｊの動作周波数（次の周期Ｔ２における動作周波数）を上げる。具体的には、例えば、周波数変更機能１０５は、物理プロセッサ＃ｊのレジスタ＃ｊに、その物理プロセッサ＃ｊの現在の動作周波数よりも高い動作周波数を表す情報を設定する。
【０２５６】
ステップＳ７０５では、周波数変更機能１０５は、ステップＳ７０２で特定した時間利用率αｊが第１しきい値Ｙ１より小さいか否かを判定する。この判定の結果が肯定的の場合（Ｓ７０５：ＹＥＳ）、ステップＳ７０６が行われ、この判定の結果が否定的の場合（Ｓ７０５：ＮＯ）、ステップＳ７０７が行われる。
【０２５７】
ステップＳ７０６では、周波数変更機能１０５は、物理プロセッサ＃ｊの動作周波数（次の周期Ｔ２における動作周波数）を下げる。具体的には、例えば、周波数変更機能１０５は、物理プロセッサ＃ｊのレジスタ＃ｊに、その物理プロセッサ＃ｊの現在の動作周波数よりも低い動作周波数を表す情報を設定する。
【０２５８】
ステップＳ７０７では、周波数変更機能１０５は、物理プロセッサ番号の変数ｊに１を加算する。
【０２５９】
ステップＳ７０８では、周波数変更機能１０５は、負荷監視機能１０６により採取された時間利用率αｊの値を０にリセットする。
【０２６０】
ステップＳ７０９では、周波数変更機能１０５は、物理プロセッサテーブル＃ｊにおける情報２１５（仮想プロセッサの走行時間合計）を０にリセットする。
【０２６１】
ステップＳ７１０では、周波数変更機能１０５は、物理プロセッサテーブル＃ｊにおける外部要因周波数変更フラグ２１６をＯＦＦ（０）にする。
【０２６２】
ステップＳ７１１では、周波数変更機能１０５は、更新後の変数ｊの値が物理プロセッサ番号の最大値を上回っているか否かを判定する。この判定の結果が肯定的であれば（Ｓ７１１：ＹＥＳ）、図２０の処理が終了する。逆に、この判定の結果が否定的であれば（Ｓ７１１：ＮＯ）、ステップＳ７０２が再度行われる。
【０２６３】
図２に示した例においては、周波数上昇時は、動作周波数は、物理プロセッサの最高動作周波数に上昇される。
【０２６４】
また、周波数下降時は、時刻（ｎ＋１）Ｔ２から時刻（ｎ＋２）Ｔ２までの期間において、物理プロセッサへの業務量が以前の時刻ｎＴ２より時刻（ｎ＋１）Ｔ２までの期間のものと等しいと仮定した場合、物理プロセッサの時間利用率が０．５近傍になるように調整が行われる。
【０２６５】
図２の例においては、上記のような動作となっているものの、周波数上昇および周波数下降を行う際、次の設定周波数を決定するアルゴリズムおよび規則は、特に限定されない。
【０２６６】
しきい値についても同様で、図２で示している例においては、図２１および図２２を参照すればわかるように、第１しきい値Ｙ１＝０．４、第２しきい値Ｙ２＝０．９に設定されているものの、Ｙ１＜Ｙ２であるならば、しきい値は特に限定されない。
【０２６７】
以降では、図２１及び図２２を参照し、物理プロセッサ＃０を例に採り、物理プロセッサ＃０の設定動作周波数変更が行われるまでの負荷監視機能１０６及び周波数変更機能１０５の動作を説明する。
【０２６８】
図２１及び図２２において、「絶対業務量の比」とは、物理プロセッサ＃０への業務量が、物理プロセッサ＃０の最大利用可能実行資源量６０２に対してどれくらいの割合に達しているかを意味する。物理プロセッサ＃０の最大利用可能実行資源量６０２は、最高周波数である３．２ＧＨｚ動作時の３．２Ｘ１０９サイクル／秒である。
【０２６９】
例えば、図２１の上段（１）に示すように、時刻０より時刻ｔ１までの期間であれば、業務量６００は、６．４Ｘ１０８サイクル／秒であるので、絶対業務量の比は、（６．４Ｘ１０８）／（３．２Ｘ１０９）＝０．２となる。
【０２７０】
時刻０から時刻ｔ１までの期間において、時間利用率αｊは、０．４であり、第１しきい値Ｙ１を下回っていないので、設定動作周波数の変更は行われない。
【０２７１】
時刻ｔ１において、業務量６００が増大し、図２１の中段（２）に示すように、時刻ｔ１から時刻（ｔ１＋Ｔ２）の期間において、時間利用率αｊは１．０になっており、第２しきい値Ｙ２を上回っている。図２で示したように、業務量６００は、この期間での利用可能実行資源量６０１を超えているが、計算機システムにより算出された時間利用率αｊだけでは、処理量６０３がどの程度不足しているのかはわからない。
【０２７２】
時刻（ｔ１＋Ｔ２）において、動作周波数が最高動作周波数である３．２ＧＨｚに変更されている理由は、次の通りである。すなわち、その理由は、時刻ｔ１から時刻（ｔ１＋Ｔ２）の期間において処理量６０３に不足が生じているが、計算機システムの持っている情報ではどの程度処理量６０３が不足しているのかが不明であるため、可能な限り高い周波数まで上げ、時刻（ｔ１＋Ｔ２）から時刻（ｔ１＋２Ｔ２）の期間に処理量６０３の不足ができるだけ発生しないようにすることにある。
【０２７３】
図２１の下段（３）及び図２２の上段（１）に示すように、時刻（ｔ１＋Ｔ２）から時刻（ｔ２＋Ｘ）の期間において、時間利用率αｊは０．８であり、第２しきい値Ｙ２を上回っていないので、動作周波数の変更は行われない。
【０２７４】
時刻（ｔ２＋Ｘ）において、業務量６００が減少したため、図２２の中段（２）に示すように、時刻（ｔ２＋Ｘ）から時刻（ｔ２＋Ｘ＋Ｔ２）の期間において、時間利用率αｊは０．３となっている。これは、第１しきい値Ｙ１を下回っているので、時刻（ｔ２＋Ｘ＋Ｔ２）において、設定動作周波数は２．０ＧＨｚに変更される。
【０２７５】
図２２の下段（３）に示すように、時刻（ｔ２＋Ｘ＋Ｔ２）より後の期間においては、時間利用率αｊは０．４８となり、第１しきい値Ｙ１と第２しきい値Ｙ２との間の値となっている。よって、設定動作周波数が変更されない。
【０２７６】
前述した具体例によれば、物理プロセッサ＃０の動作周波数は、業務量６００が多い時には高くされ、業務量６００が少ない時は低くされる。このように、業務量６００に応じた動作周波数に調整されるので、業務量６００の多寡に関わらず、常に最高動作周波数で物理プロセッサ＃０を稼働させた場合に比べて、電力消費の削減が期待できる。
【０２７７】
また、周波数変化検出機能１０４によって、周波数変更機能１０５とは別の要因（外部要因）で物理プロセッサ＃ｊの動作周波数が変更させられたことが検出される。この場合、周波数変化検出機能１０４が、物理プロセッサテーブル＃ｊ内の情報２１１を、変更後の新しい動作周波数ｆｊを表す情報に更新し、時間利用率αｊの算出には、動作周波数変化検出後の期間が利用される。よって、外部要因による動作周波数変更により、周波数調整の処理が誤作動することも、算出される時間利用率が不正確になることもない。
【０２７８】
以上が、本発明の実施例の説明である。
【０２７９】
上述した実施例によれば、全プロセッサ時間（１以上の物理プロセッサ００２のプロセッサ時間）ではなく、全プロセッササイクル数が、複数の仮想計算機３００のサービス率の比に従い持ちサイクル数として、各仮想計算機３００に配分される。これにより、物理プロセッサ００２の動作周波数が異なっていても、周期Ｔ１において、各仮想計算機３００への実行命令数の配分（仮想プロセッサの走行時間長）をなるべく複数の仮想計算機３００のサービス率の比の通りにすることができる。
【０２８０】
ハイパバイザ１００は、周期Ｔ２毎に、各物理プロセッサ００２のプロセッサ時間のうち仮想プロセッサ走行時間の占める割合である時間利用率を、各物理プロセッサについて算出する。ハイパバイザ１００は、物理プロセッサ００２の動作周波数の調整を、各物理プロセッサ００２の時間利用率を基に行う。そのため、ハイパバイザ１００は、仮想プロセッサ３０３のスケジューリングの正確性を損なうことなく、動作周波数の調整を行うことができる。つまり、仮想プロセッサのスケジューリングと動作周波数の調整は両立される。
【０２８１】
ハイパバイザ１００は、いずれかの物理プロセッサ００２の外部要因による動作周波数変更を検出した場合、再び、持ちサイクル数の算出等を含んだ初期化処理を行い、その後に、仮想プロセッサ３０３のスケジューリングを行う。このため、外部要因によりいずれかの物理プロセッサ００２の動作周波数変更が検出されても、仮想計算機への実行命令数の配分（仮想プロセッサの走行時間長の配分）が損なわれることはない。
【０２８２】
以上、本発明の一実施例を説明したが、本発明は、この実施例に限定されるものでなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【０２８３】
００１…物理資源、１００…ハイパバイザ、３００…仮想計算機
【図１】
0005388909.tif 000010
【図２】
0005388909.tif 000011
【図３】
0005388909.tif 000012
【図４】
0005388909.tif 000013
【図５】
0005388909.tif 000014
【図６】
0005388909.tif 000015
【図７】
0005388909.tif 000016
【図８】
0005388909.tif 000017
【図９】
0005388909.tif 000018
【図１０】
0005388909.tif 000019
【図１１】
0005388909.tif 000020
【図１２】
0005388909.tif 000021
【図１３】
0005388909.tif 000022
【図１４】
0005388909.tif 000023
【図１５】
0005388909.tif 000024
【図１６】
0005388909.tif 000025
【図１７】
0005388909.tif 000026
【図１８】
0005388909.tif 000027
【図１９】
0005388909.tif 000028
【図２０】
0005388909.tif 000029
【図２１】
0005388909.tif 000030
【図２２】
0005388909.tif 000031