(57)【特許請求の範囲】
【請求項１】
メモリ、プロセッサ、タイマおよび入出力装置を含む計算機と、
前記メモリ上に展開され、前記プロセッサで実行される仮想計算機モニタであって、少なくとも１つのゲストＯＳ（Operating System）の前記プロセッサ上での実行を制御するとともに、前記ゲストＯＳから前記計算機への処理要求を受け付け、前記処理要求に対する前記計算機での実行結果を前記ゲストＯＳに引き渡す仮想計算機モニタと、を備え、
前記仮想計算機モニタは、
前記ゲストＯＳから前記タイマへの設定期間経過後のタイマ割り込みの発生を設定するタイマ設定を前記タイマに代わって受け取る手段と、
前記ゲストＯＳが前記仮想計算機モニタを通じて前記入出力装置にデータを入出力するときに、前記ゲストＯＳが認識する入出力待ち時間と入出力待ち時間以外の入出力処理時間との関係が、前記仮想計算機モニタが認識する入出力待ち時間と入出力処理時間との関係に近づくように、前記タイマ設定の設定期間を変更するタイマ変更手段と、
前記タイマ割り込みを受信したときに、前記タイマ割り込みの発生を前記ゲストＯＳに通知する手段として前記プロセッサを機能させる仮想計算機。
【請求項２】
前記タイマ変更手段は、前記ゲストＯＳから前記仮想計算機モニタを通じて入出力装置に対してデータを入出力するときのゲストＯＳが認識する特権状態の期間においては、前記ゲストＯＳが認識する特権状態での入出力処理時間の基準値と前記仮想計算機モニタが認識する特権状態での処理時間の基準値との比率にしたがって、前記ゲストＯＳが設定したタイマ割り込み発生までの設定期間を変更し、前記変更された設定期間を指定してタイマ割り込みの発生を設定する請求項１に記載の仮想計算機。
【請求項３】
前記タイマ変更手段は、前記ゲストＯＳから前記仮想計算機モニタを通じて入出力装置に対してデータを入出力するときのゲストＯＳが認識する入出力待ちの期間においては、前記ゲストＯＳが前記仮想計算機モニタを通じて認識する入出力待ち時間の基準値と前記仮想計算機モニタが認識する入出力待ち時間の基準値との比率にしたがって、前記ゲストＯＳが設定したタイマ割り込み発生までの設定期間を変更し、前記変更された設定期間を指定してタイマ割り込みの発生を設定する請求項１または２に記載の仮想計算機。
【請求項４】
メモリ、プロセッサ、タイマおよび入出力装置を含む計算機の前記プロセッサで実行され、少なくとも１つのゲストＯＳ（Operating System）の前記プロセッサ上での実行を制御するとともに、前記ゲストＯＳから前記計算機への処理要求を受け付け、前記処理要求に対する前記計算機での実行結果を前記ゲストＯＳに引き渡す仮想計算機モニタであって、
前記ゲストＯＳから前記タイマへ送られる、タイマ割り込み発生の設定期間を設定するタイマ設定を、前記タイマに代わって受け取る手段と、
前記ゲストＯＳが前記仮想計算機モニタを通じて前記入出力装置にデータを入出力するときに、前記ゲストＯＳが認識する入出力待ち時間と入出力待ち時間以外の入出力処理時間との関係が、前記仮想計算機モニタが認識する入出力待ち時間と入出力処理時間との関係に近づくように、前記設定期間を変更するタイマ変更手段と、
設定機関を変更したタイマ設定を前記タイマに設定する手段と、
前記タイマからタイマ割り込みを受信したときに、前記タイマ割り込みの発生を前記ゲストＯＳに通知する手段として前記プロセッサを機能させる仮想計算機モニタ。
【請求項５】
前記タイマ変更手段は、前記ゲストＯＳから前記仮想計算機モニタを通じて入出力装置に対してデータを入出力するときのゲストＯＳが認識する特権状態の期間においては、前記ゲストＯＳが認識する特権状態での処理時間の基準値と前記仮想計算機モニタが認識する特権状態での処理時間の基準値との比率にしたがって、前記ゲストＯＳが設定した設定
期間を変更し、前記変更された設定期間を指定してタイマ割り込みの発生を前記タイマに設定する請求項４に記載の仮想計算機モニタ。
【請求項６】
前記タイマ変更手段は、前記ゲストＯＳから前記仮想計算機モニタを通じて入出力装置に対してデータを入出力するときのゲストＯＳが認識する入出力待ちの期間においては、前記ゲストＯＳが前記仮想計算機モニタを通じて認識する入出力待ち時間の基準値と前記仮想計算機モニタが認識する入出力待ち時間の基準値との比率にしたがって、前記ゲストＯＳが設定した設定期間を変更し、前記変更された設定期間を指定してタイマ割り込みの発生を前記タイマに設定する請求項４または５に記載の仮想計算機モニタ。
【請求項７】
メモリ、プロセッサ、タイマおよび入出力装置を含み、前記プロセッサ上で、１つのゲストＯＳと、前記ゲストＯＳの実行を制御する仮想計算機モニタが動作する計算機が実行する計算機の制御方法であって、
前記計算機が、
前記ゲストＯＳが前記タイマに発行する、前記タイマがタイマ割込みを発生する設定期間設定するタイマ設定を、前記計算機モニタが前記タイマに代わって受け取るステップと、
前記ゲストＯＳが前記仮想計算機モニタを通じて前記入出力装置にデータを入出力するときに、前記ゲストＯＳが認識する入出力待ち時間と入出力待ち時間以外の入出力処理時間との関係が、前記仮想計算機モニタが認識する入出力待ち時間と入出力処理時間との関係に近づくように、前記タイマ設定の設定期間を前記計算機モニタが変更するタイマ変更ステップと、
前記計算機モニタから前記タイマに、前記設定期間が変更されたタイマ設定を設定するステップと、
前記タイマから前記タイマ割り込みを受信したときに、前記タイマ割り込みの発生を前記計算機モニタから前記ゲストＯＳに通知するステップと、を実行する計算機の制御方法。
【請求項８】
前記タイマ変更手ステップは、前記ゲストＯＳから前記仮想計算機モニタを通じて入出力装置に対してデータを入出力するときのゲストＯＳが認識する特権状態の期間においては、前記ゲストＯＳが認識する特権状態での処理時間の基準値と前記仮想計算機モニタが認識する特権状態での処理時間の基準値との比率にしたがって、前記ゲストＯＳが設定したタイマ割り込み発生までの設定期間を変更し、前記変更された設定期間を指定してタイマ割り込みの発生を設定するステップを含む、請求項７に記載の計算機の制御方法。
【請求項９】
前記タイマ変更ステップは、前記ゲストＯＳから前記仮想計算機モニタを通じて入出力装置に対してデータを入出力するときのゲストＯＳが認識する入出力待ちの期間においては、前記ゲストＯＳが前記仮想計算機モニタを通じて認識する入出力待ち時間の基準値と前記仮想計算機モニタが認識する入出力待ち時間の基準値との比率にしたがって、前記ゲストＯＳが設定したタイマ割り込み発生までの設定期間を変更し、前記変更された設定期間を指定してタイマ割り込みの発生を設定するステップを含む、請求項７または８に記載の計算機の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機上での処理の実行時間の管理技術に関する。
【背景技術】
【０００２】
図１に、仮想計算機と呼ばれるコンピュータシステムの構成例を示す。仮想計算機の一例としては、ＣＰＵ（Central Processing Unit）、メモリ等のハードウェア上に、仮想
計算機モニタと呼ばれるコンピュータプログラムを搭載したシステムが知られている。仮想計算機では、仮想計算機モニタ上で、１または複数のゲストＯＳが稼働する。さらに、ゲストＯＳ上で、アプリケーションプログラムが稼働する。仮想計算機は、仮想マシン、仮想コンピュータ、ＶＭ（Virtual Machine）等とも呼ばれる。
【０００３】
仮想計算機モニタは、ＶＭＭ（Virtual Machine Monitor）、ハイパーバイザ（Hyperviser）とも呼ばれるコンピュータプログラムである。仮想計算機モニタは、仮想計算機全
体を制御する。例えば、仮想計算機モニタは、複数のゲストＯＳが稼働している場合に、ゲストＯＳのディスパッチ処理、すなわちＣＰＵを割り当てるゲストＯＳを決定し、ゲストＯＳを起動する処理を実行する。また、仮想計算機モニタは、各ゲストＯＳが実行する特権命令のエミュレーションを実行する。例えば、ゲストＯＳがユーザ状態で特権命令の実行を要求すると、仮想計算機モニタは、例外処理によって実行要求された特権命令をインターセプトし、実行要求された特権命令を模擬する処理を実行する。
【０００４】
また、仮想計算機モニタは、仮想計算機のブート時に起動され、ゲストＯＳの起動・停止等、仮想計算機の管理・制御等の処理を実行する。ただし、ホストＯＳと呼ばれる特別なゲストＯＳを介して、仮想計算機の管理・制御がなされる場合もある。また、サービスコントロールと呼ばれる機能として、仮想計算機モニタとは異なるコンピュータプログラムによって、仮想計算機の管理・制御が実行される場合もある。
【０００５】
さらに、仮想計算機モニタは、ゲストＯＳからの入出力要求に対応して、物理デバイスでの入出力処理を実行する。物理デバイスでの入出力処理は、実Ｉ／Ｏ処理とも呼ばれる。例えば、各ゲストＯＳは仮想計算機モニタに対して、ハイパーバイザコールと呼ばれるインターフェースを通じて、入出力処理を依頼する。すると、仮想計算機モニタは、例えば、デバイスドライバを通じて、物理デバイス、例えば、ディスプレイ、外部記憶装置、ＬＡＮ（Local Area Network）等にアクセスする。ただし、ドライバＯＳ（ドライバドメイン）と呼ばれる、実Ｉ／Ｏ処理を行うことを専らとするゲストＯＳ、あるいは、前述のホストＯＳが実Ｉ／Ｏ処理を行う構成も知られている。
【０００６】
一方、ゲストＯＳは、仮想計算機上で、実Ｉ／Ｏを持たないＯＳとして例示できる。ゲストＯＳは、アプリケーションプログラムに対して、仮想計算機モニタを介したハードウェア上の仮想的な資源を提供する。したがって、アプリケーションプログラムとの関係では、ゲストＯＳは通常のＯＳと考えることができる。なお、仮想計算機モニタ上のそれぞれのゲストＯＳ、ホストＯＳ、ドライバＯＳをそれぞれ異なる計算機と見なして、それぞれ仮想計算機と呼ぶ場合もある。
【０００７】
仮想計算機では、アプリケーションプログラムはゲストＯＳ上で実行され、ゲストＯＳは仮想計算機モニタ上で実行される。そして、アプリケーションプログラムが入出力処理をゲストＯＳに要求すると、ゲストＯＳが入出力命令を発行する。発行された入出力命令は、例えば、仮想計算機モニタにインターセプトされ、仮想計算機モニタのドライバ、ゲストＯＳ、あるいは、ホストＯＳを通じて、物理デバイスに対する入出力処理が実行され
る。ただし、ゲストＯＳは、ハイパーバイザコールにより、入出力命令を仮想計算機モニタに引き渡す場合もある。いずれにしても、アプリケーションプログラムの入出力処理の要求から、物理デバイスに対する入出力処理に至るまでの仮想計算機の動作は複雑である。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００８−２２５６５５号公報
【特許文献２】特開２００６−０５９０５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述のように、仮想計算機において、入出力処理の要求から実際の物理デバイスへの入出力に至る経路が複雑であり、かつ、ゲストＯＳは、仮想計算機モニタを介して、仮想的な割り込みを受信し、時間を計測する。したがって、仮想計算機においては、ゲストＯＳが、入出力処理を伴う処理の実行時間等の性能情報を精度よく取得できないという問題があった。
【課題を解決するための手段】
【００１０】
そこで、開示の技術の一側面は、メモリ、プロセッサ、タイマおよび入出力装置を含む計算機と、メモリ上に展開され、プロセッサで実行される仮想計算機モニタと、を備える仮想計算機として例示できる。仮想計算機モニタは、少なくとも１つのゲストＯＳ（Operating System）のプロセッサ上での実行を制御するとともに、ゲストＯＳから計算機への処理要求を受け付け、処理要求に対する計算機での実行結果をゲストＯＳに引き渡す。例えば、仮想計算機モニタは、ゲストＯＳからタイマへの設定期間経過後のタイマ割り込みの発生を設定するタイマ設定をタイマに代わって受け取る手段としてプロセッサを機能させればよい。さらに、仮想計算機モニタは、タイマ変更手段としてプロセッサを機能させればよい。ここで、タイマ変更手段は、ゲストＯＳが仮想計算機モニタを通じて入出力装置にデータを入出力するときに、タイマ設定を変更する。例えば、タイマ変更手段は、ゲストＯＳが認識する入出力待ち時間と入出力待ち時間以外の入出力処理時間との割合が、仮想計算機モニタが認識する入出力待ち時間と入出力処理時間との割合に近づくように、タイマ設定を変更する。さらに、仮想計算機モニタは、タイマ割り込みを受信したときに、タイマ割り込みの発生をゲストＯＳに通知する手段としてプロセッサを機能させればよい。
【発明の効果】
【００１１】
開示の技術によれば、仮想計算機において、ゲストＯＳが入出力処理を伴う処理に対して取得する性能情報の精度を向上することができる。
【図面の簡単な説明】
【００１２】
【図１】コンピュータシステムの構成例を示す図である。
【図２】比較例に係る計算機システムの構成を例示する図である。
【図３】比較例に係るゲストＯＳのスケジュール例を示す図である。
【図４Ａ】物理計算機上での状態ごとの処理時間例を示す図である。
【図４Ｂ】仮想計算機上での状態ごとの処理時間例を示す図である。
【図４Ｃ】物理計算機と仮想計算機での状態ごとの時間比率を対比して示す図である。
【図５】実施例１に係る仮想計算機における入出力処理の処理時間の例を、比較例の仮想計算機と対比して示す図である。
【図６】実施例１に係る仮想計算機の構成例を示す図である。
【図７】タイマ割り込みの設定時およびタイマ割り込みの発生後の処理に関連する構成要素を例示する図である。
【図８】仮想ＣＰＵ管理データの例を示す図である。
【図９】仮想計算機が測定する時間の種類を例示する図である。
【図１０】物理ＯＳにおけるプロセススケジューラの処理を例示する図である。
【図１１】仮想ＣＰＵ状態表テーブルを例示する図である。
【図１２】仮想ＣＰＵ状態決定手段の処理フローを例示する図である。
【図１３】ゲストＯＳが設定するタイマ周期μと、仮想計算機モニタがゲストＯＳに返す仮想タイマ周期との関係を例示する図である。
【図１４】仮想ＣＰＵ利用統計算出手段の処理フローを例示する図である。
【図１５】タイマ変調手段のタイマセット時の処理フローを例示する図である。
【図１６】タイマ変調手段によるゲストＯＳに仮想タイマ割り込みを転送するときの処理フローを例示する図である。
【図１７】仮想ＣＰＵ状態決定手段がない仮想計算機の構成を例示する図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、一実施形態に係る計算機システムを説明する。以下の実施形態の構成は例示であり、計算機システムは実施形態の構成には限定されない。
【００１４】
図２から図４を参照して、比較例に係る計算機システム３００を説明する。図２は、比較例に係る計算機システム３００の構成を例示する。図２のように、計算機システム３００は、ハードウェアとしては、例えば、ＣＰＵ、メモリを含む処理装置３００Ａと、物理ディスク３０２とを含む。ＣＰＵはプロセッサに相当する。処理装置３００Ａ上では、仮想計算機モニタ３０１が稼働し、計算機システム３００を管理および制御する。
【００１５】
さらに、仮想計算機モニタ３０１上で、フロントエンドドライバ３１０Ａ−１、ゲストＯＳ３１０Ｂ−１、アプリケーションプログラム３１０Ｃ−１を含むゲスト仮想計算機３１０−１が稼働している。また、仮想計算機モニタ３０１上では、フロントエンドドライバ３１０Ａ−２、ゲストＯＳ３１０Ｂ−２、アプリケーションプログラム３１０Ｃ−２を含むゲスト仮想計算機３１０−２が稼働している。ここでは、ゲスト仮想計算機３１０−１、３１０−２を総称してゲスト仮想計算機３１０と呼ぶ。また、フロントエンドドライバ３１０Ａ−１，３１０Ａ−２、ゲストＯＳ３１０Ｂ−１，３１０Ｂ−２、アプリケーションプログラム３１０Ｃ−１，３１０Ｃ−２を総称して、それぞれ、フロントエンドドライバ３１０Ａ、ゲストＯＳ３１０Ｂ、アプリケーションプログラム３１０Ｃと呼ぶ。
【００１６】
図２のように、仮想計算機モニタ３０１は、バックエンドドライバ３０４、タイマ機構３０５、スケジューラ３０６、および実Ｉ／Ｏドライバ３０７を含む。バックエンドドライバ３０４は、ゲストＯＳ３１０に接続されるフロントエンドドライバ３１０Ａとのインターフェースとして機能する。例えば、バックエンドドライバ３０４は、フロントエンドドライバ３１０Ａと図示しない共有メモリを共有し、データを授受する。
【００１７】
計算機システム３００上では、仮想計算機モニタ３０１がゲスト仮想計算機３１０による処理をスケジューリングする。すなわち、仮想計算機モニタ３０１は、ゲスト仮想計算機３１０のレジスタ値を所定のメモリ領域に待避した後、ＣＰＵを割り当てるゲスト仮想計算機３１０を切り替える。ゲスト仮想計算機の切り替え時には例えば、ゲスト仮想計算機３１０−１からＣＰＵが解放され、代わってゲスト仮想計算機３１０−２にＣＰＵが割り当てられる。より具体的には、ゲストＯＳ３１０Ｂ−１からＣＰＵが解放され、ゲストＯＳ３１０Ｂ−２にＣＰＵが割り当てられる。ゲストＯＳ３１０Ｂに対するＣＰＵの割り当ては、スケジューラ３０６によってなされる。なお、スケジューラ３０６は、仮想ＣＰＵスケジューラとも呼ばれる。また、ゲストＯＳ３１０Ｂから見たコンピュータプログラ
ムの実行環境、例えばレジスタセットを含むリソースは、仮想ＣＰＵと呼ばれる。
【００１８】
スケジューラ３０６は、ゲストＯＳ３１０ＢにＣＰＵを割り付けるディスパッチ処理を実行する。例えば、スケジューラ３０６は、タイムシェアリングで、ゲストＯＳ３１０Ｂ−１、３１０Ｂ−２を順次起動する。また、例えば、スケジューラ３０６は、ゲストＯＳ３１０Ｂ−１が起動中の場合には、現在のレジスタセットを所定のメモリ領域に待避する。そして、スケジューラ３０６は、ゲストＯＳ３１０−１を停止する。さらに、スケジューラ３０６は、現在処理中断中のゲストＯＳ３１０Ｂ−２のレジスタセットの待避内容をゲストＯＳ３１０−２に引き渡す。そして、スケジューラ３０６は、ゲストＯＳ３１０−２を起動する。
【００１９】
タイマ機構３０５は、処理装置３００Ａに内蔵されたＣＰＵの割り込みベクトルに、割り込み処理プログラムのアドレスを設定し、また所定の時間を指定して、タイマ割り込みをレジスタに設定する。すると、所定の時間経過後にＣＰＵに対してタイマ割り込みが発生し、ＣＰＵは、発生したタイマ割り込みに対応する、メモリ空間上の所定のアドレスに設定された割り込み処理プログラムの処理を起動する。仮想計算機モニタ３０１は、割り込み処理プログラムの処理によって、所定時間の経過を認識する。割り込み処理プログラムによってタイマ割り込みを繰り返して受信することで、仮想計算機モニタ３０１は、時間を計測する。なお、割り込み処理プログラムは、ハンドラ、コールバック関数とも呼ばれる。
【００２０】
物理ディスク３０２等の物理デバイスに対する入出力命令は、例えば、以下のように処理される。ゲストＯＳ３１０Ｂ上で動作するアプリケーションプログラム３１０Ｃは、ゲストＯＳ３１０Ｂの入出力命令をシステムコールによって呼び出す。そして、ゲストＯＳ３１０Ｂは、フロントエンドドライバ３１０Ａを通じて、共有メモリに入出力要求を設定し、仮想計算機モニタ３０１にハイパーバイザコールと呼ぶ機能によって処理を要求する。すると、バックエンドドライバ３０４が、共有メモリに設定された入出力要求を読み出し、仮想計算機モニタ３０１に引き渡す。仮想計算機モニタ３０１は、引き渡された入出力要求にしたがって、物理デバイスにアクセスするデバイスドライバを起動し、入出力処理を実行する。
【００２１】
入出力処理では、デバイスドライバがデータ転送命令を実行することにより、メモリの所定領域に確保されたバッファ領域のデータが図示しないＩ／Ｏコントローラに引き渡される。引き渡されるデータには、Ｉ／Ｏコントローラに対するコマンドと入出力される入出力データとが含まれる。データ転送命令発行後、スケジューラ３０６は、ゲスト仮想計算機３１０を入出力待ち状態とする。これにより、入出力待ち状態にあるゲスト仮想計算機３１０は一時動作を中断する。そして、入出力待ち状態にあるゲスト仮想計算機３１０の動作が一時中断している間に、スケジューラ３０６により他のゲスト仮想計算機３１０に動作を中断しているゲスト計算機に割り当てられていたＣＰＵが割り当てられる。なお、物理デバイスでの入出力処理の完了は、Ｉ／ＯコントローラからＣＰＵに割り込みによって通知される。
【００２２】
ただし、ゲストＯＳ３１０Ｂが仮想計算機モニタ３０１にハイパーバイザコールによって入出力処理を要求する代わりに、以下の手順を用いることもできる。例えば、ユーザ状態でゲストＯＳ３１０Ｂが入出力要求のシステムコールを呼び出したときに、ＣＰＵが特権命令違反を検出する。次に、ＣＰＵが仮想計算機モニタ３０１に制御を移し、仮想計算機モニタ３０１がシステムコールからの入出力処理をエミュレーションしてもよい。
【００２３】
仮想計算機モニタ３０１は、例えば、時分割で複数のゲスト仮想計算機３１０−１、３１０−２を起動する。なお、ドライバＯＳやホストＯＳがバックエンドドライバを搭載し
、ドライバＯＳやホストＯＳが実Ｉ／Ｏ制御を行うようにしてもよい。以下、ゲスト仮想計算機３１０を単に仮想計算機３１０ともいう。
【００２４】
図３に、計算機システム３００におけるゲストＯＳ３１０Ｂのスケジュール例を示す。図３では、ゲストＯＳ３１０Ｂ−１をゲスト１で示し、ゲストＯＳ３１０Ｂ−２をゲスト２で示す。計算機システム３００では、処理装置３００ＡのＣＰＵをゲスト１とゲスト２とに、例えば時分割で交互に割り当てることで、複数のゲストＯＳ３１０Ｂを動作させる。時分割する１回あたりの時間の割り当て時間は、仮想計算機モニタ３０１内に固定的に定義できる。また、割り当て時間は、システムパラメータ等によって設定できる。
【００２５】
また、いずれかのゲストＯＳ３１０Ｂの負荷が低いなどの理由でゲストＯＳが与えられた時間を使いきれない場合、スケジューラ３０６は、負荷が低い方のゲストＯＳ、例えば、ゲストＯＳ３１０Ｂ−１のＣＰＵ使用権を奪い、他のゲストＯＳ、例えばゲストＯＳ３１０Ｂ−２にＣＰＵを割り当てて、ゲストＯＳ３１０Ｂ−２を動作させる。図３のようなゲストＯＳ３１０ＢへのＣＰＵの割り当ての管理により、ＣＰＵ資源を有効利用できる。
【００２６】
ゲストＯＳ３１０Ｂは、仮想計算機モニタ３０１を通じたタイマ機構を使って、各種の統計情報を採取し続けている。統計情報には、例えば、ゲストＯＳ３１０Ｂ上で動作する各プロセスがユーザ状態で動作した時間を示すユーザ時間(user 時間)、そのプロセスの
延長でカーネル状態で動作した時間を示すシステム時間(sys時間)や、入出力待ちに要し
た時間を示す入出力待ち時間(iowait時間)等が含まれる。統計情報は、アプリケーションプログラムやミドルウェアのパフォーマンスチューニング等にも役立てられる。
【００２７】
仮想計算機を含む計算機システム３００においては、バックエンドドライバ３０４とフロントエンドドライバ３１０Ａとを用いて、仮想計算機モニタ３０１がゲストＯＳ３１０Ｂの入出力要求を物理デバイスに対する実Ｉ／Ｏ処理に変換して処理している。計算機システム３００ではあるいは、仮想計算機モニタ３０１による入出力命令のエミュレーションを用いて、仮想計算機モニタ３０１がゲストＯＳ３１０Ｂの入出力要求を物理デバイスに対する実Ｉ／Ｏに変換して処理している。
【００２８】
図４Ａ−図４Ｃに、仮想計算機３１０を含む計算機システム３００における入出力処理の例を、仮想計算機を含まない通常の計算機と対比して示す。以下、仮想計算機を含まない通常の計算機を物理計算機と呼ぶ。物理計算機は、物理ＣＰＵを含む。また、物理計算機で動作するＯＳを物理ＯＳと呼ぶ。
【００２９】
図４Ａは、物理計算機の入出力処理での物理ＯＳが認識する時間例を示す。図４Ａで、“アプリケーション”の行は、物理ＣＰＵがアプリケーションプログラムを実行していることを示す。以下、アプリケーションプログラムを単にアプリケーションともいう。アプリケーション実行中は、物理ＣＰＵが実行するプロセスはユーザ状態にある。また、図４Ａで“カーネル”の行は、物理ＣＰＵが実行するプロセスがカーネル状態にあることを示す。ユーザ状態およびカーネル状態については、後述する実施例１において説明する。さらに、図４Ａで“物理デバイス”の行は、物理デバイスでの処理を示す。
【００３０】
図４Ａの例では、物理計算機のプロセスがユーザ状態でのアプリケーション実行中に（user-A1）、アプリケーションからのＩ／Ｏ要求が発生し、カーネル状態での処理（sys-A1）が実行されている。そして、カーネル状態での処理（sys-A1）において、物理デバイ
スに対するＩ／Ｏ発行がなされ、物理デバイスに対する実Ｉ／Ｏ処理がなされる。そして、カーネル状態での処理は、入出力待ち（iowait-A）となる。図４Ａでは、アプリケーションからのＩ／Ｏ要求によりカーネル状態での処理（sys-A1）が開始し、物理デバイスに対するＩ／Ｏ発行により、カーネル状態での処理（sys-A1）が入出力待ちとなる。入出力
待ちの間（iowait-A）、物理ＯＳのカーネル状態での処理は、ＣＰＵ使用権を奪われる。なお、図４Ａで、カーネル状態の処理が入力待ちの区間は、物理デバイスの行のiowait-Aに対応するカーネルの行の空白区間で示されるが、iowait-Aに対応するカーネルの行の空白区間も、” iowait-A”で参照する。
【００３１】
そして、物理デバイスに対する入出力の完了後に、カーネル状態での処理（sys-A２）
が実行される。さらに、カーネル状態での処理（sys-A２）の終了によって、ユーザ状態
での処理（user-A2）が実行されている。図４Ａで、カーネル状態での処理（sys-A1）、
物理デバイスに対する入出力待ち（iowait-A）、およびカーネル状態での処理（sys-A2）での時間がそれぞれ、ＴＳＡ１、ＴＷＡ、ＴＳＡ２であったと仮定する。
【００３２】
図４Ｂは、仮想計算機３１０の入出力処理でのゲストＯＳ３１０Ｂが認識する時間と仮想計算機モニタ３０１が認識する時間例を示す。図４Ｂの例では、仮想計算機３１０において、ゲストＯＳ３１０Ｂ上でユーザ状態でのアプリケーションが実行されている。ユーザ状態でのアプリケーションの実行中に（user-B1）、アプリケーションからのＩ／Ｏ要
求が発生し、ゲストＯＳ３１０Ｂのカーネル状態での処理（sys-B11）が実行されている
。カーネル状態での処理（sys-B11）は、例えば、フロントエンドドライバ３１０Ａの処
理を含む。
【００３３】
そして、カーネル状態での処理（sys-B11）において、仮想デバイスに対する入出力処
理の要求がなされる。仮想デバイスに対する入出力処理は、仮想計算機モニタ３０１上での物理デバイスに対する実Ｉ／Ｏドライバによる処理に変換され、実Ｉ／Ｏドライバによる処理（sys-B21）が実行されている。そして、実Ｉ／Ｏドライバでの処理（sys-B21）において、物理デバイスに対するＩ／Ｏ発行がなされ、実Ｉ／Ｏドライバでの処理（sys-B21）は、物理デバイスに対する入出力待ちとなる（iowait-B2）。図４Ｂでは、アプリケーションからのＩ／Ｏ要求によりゲストＯＳ３１０Ｂのカーネル状態での処理（sys-A1）が開始する。そして、仮想デバイスに対する入出力処理が変換された実Ｉ／Ｏドライバによる処理（sys-B21）において、物理デバイスに対するＩ／Ｏ発行がなされる。図４Ｂの場
合、ゲストＯＳ３１０Ｂのカーネル状態での処理は、アプリケーションからのＩ／Ｏ要求から、仮想デバイスに対する入出力処理の要求までの間であり、図４Ａの物理ＯＳの場合のカーネル状態の処理に対応する。したがって、図４Ａのsys-A1の部分の処理と、図４Ｂのsys-B11の処理に同一のハッチングを付している。
【００３４】
そして、物理デバイスに対する入出力処理の完了によって、実Ｉ／Ｏドライバでの処理（sys-B22）に制御が戻る。さらに、実Ｉ／Ｏドライバでの処理（sys-B22）の終了によって、ゲストＯＳ３１０Ｂでのカーネル状態での処理（sys-B12）が実行されている。sys-B12の処理もsys-B11の処理と同様、フロントエンドドライバ３０１Ａによる処理を含む。
【００３５】
そしてさらに、ゲストＯＳ３１０Ｂでのカーネル状態での処理（sys-B12）の終了によ
って、ユーザ状態でのアプリケーションの処理（user-B2）に制御が戻っている。図４Ｂ
において、ゲストＯＳ３１０Ｂでのカーネル状態での処理（sys-B12）は、図４Ａのカー
ネル状態での処理（sys-A2）に対応する。したがって、図４Ａのsys-A2の部分の処理と、図４Ｂのsys-B12の処理に同一のハッチングを付している。
【００３６】
そして、図４Ｂのように、ゲストＯＳ３１０Ｂは、カーネル状態での処理（sys-B11）
において、仮想デバイスに対する仮想Ｉ／Ｏ処理（iowait-B1）が起動されてから終了す
るまでの間を仮想デバイスに対する入出力待ちの時間（iowait時間）として認識する。
【００３７】
図４Ｂで、ゲストＯＳ３１０Ｂでのカーネル状態での処理（sys-B11）の時間、仮想デ
バイスに対する入出力待ち（iowait-B1）の時間、およびカーネル状態での処理（sys-B12
）の処理時間がそれぞれ、ＴＳＢ１１、ＴＷＢ１、ＴＳＢ１２であったと仮定する。
【００３８】
また、図４Ｂで、仮想計算機モニタ３０１における、実Ｉ／Ｏドライバの処理（sys-B21）の時間、物理デバイスの入出力待ち（iowait-B2）の時間、および実Ｉ／Ｏドライバでの処理（sys-B22）の処理時間がそれぞれ、ＴＳＢ２１、ＴＷＢ２、ＴＳＢ２２であった
と仮定する。
【００３９】
上述のように、ゲストＯＳ３１０Ｂのカーネル状態での処理（sys-B11）は、仮想デバ
イスへの処理（iowait-B1）が実行される間、入出力待ちの状態となる。ゲストＯＳ３１
０Ｂのカーネル状態での処理（sys-B11）が入出力待ちの間（仮想デバイスがiowait-B1の区間）、ゲストＯＳ３１０Ｂは、スケジューラ３０６のスケジューリングによってＣＰＵ使用権を奪われる。
【００４０】
ここで、ゲストＯＳ３１０Ｂでの処理時間のうち、カーネル状態での処理がＣＰＵの使用権を奪われるまでの時間（sys-B11の処理によるＴＳＢ１１の時間）は、ゲストＯＳ３
１０のシステム時間（sys時間）として計上される。なお、入出力待ち（仮想デバイスがiowait-B1の区間）の終了後、ゲストＯＳ３１０Ｂのカーネル状態から、ユーザ状態に復帰するまでの時間（sys-B12の処理によるＴＳＢ１２の時間）も、ゲストＯＳ３１０のシス
テム時間（sys時間）として計上される。
【００４１】
一方、ゲストＯＳ３１０Ｂのカーネル状態での処理（sys-B11）が仮想デバイスに対す
る入出力待ちの間（iowait-B1）、仮想計算機モニタ３０１では、実Ｉ／Ｏドライバによ
る処理（sys-B21）が実行され、実Ｉ／Ｏドライバによる処理（sys-B21）から物理デバイスにＩ／Ｏ発行がされる。そして、物理デバイスに対するＩ／Ｏ発行の後、実Ｉ／Ｏドライバによる処理（sys-B21）は、入出力待ちとなる。
【００４２】
しかしながら、仮想計算機モニタ３０１の実Ｉ／Ｏドライバが処理（sys-B21およびsys-B22）を行っている時間（ＴＳＢ２１およびＴＳＢ２２）は、ゲストＯＳ３１０Ｂの統計情報としては、入出力待ち時間（iowait時間）として計上されることになる。すなわち、ゲストＯＳ３１０Ｂにおいて、仮想デバイスに対する入出力待ち（iowait-B1）の時間Ｔ
ＷＢ１は、物理デバイスに対する入出力待ち（iowait-B2）の時間ＴＷＢ２に加えて、入
出力待ちの前後の実Ｉ／Ｏドライバの処理（sys-B21およびsys-B22）の時間ＴＳＢ２１とＴＳＢ２２を加えた時間となる。
【００４３】
図４Ａの場合の物理ＯＳから見た処理時間と図４Ｂでの仮想ＯＳ３１０Ｂから見た処理時間を比較すると次のようになる。物理ＯＳにおいて、アプリーションからＩ／Ｏ要求がなされた後の処理時間は、物理ＯＳでのカーネル状態でのＩ／Ｏ発行までの処理（sys-A1）の時間ＴＳＡ１と、Ｉ／Ｏ発行からＩ／Ｏ完了までの待ち時間（iowait-Aの区間に相当する時間）ＴＷＡと、Ｉ／Ｏ完了からＩ／Ｏ受理までの処理（sys-A2）の時間ＴＳＡ２を含む。
【００４４】
一方、図４Ｂの仮想計算機システム３００の場合、実Ｉ／Ｏドライバによる処理（sys-B21）の時間ＴＳＢ２１が、図４Ａの時間ＴＳＡ１に該当する。同様に、図４ＢのＴＳＢ
２２が、図４Ａの時間ＴＳＡ２に該当する。そして、物理デバイスに対する入出力待ち（iowait-B2）の時間ＴＷＢ２が、図４Ａの時間ＴＷＡに該当する。したがって、仮想計算
機モニタ３０１における実Ｉ／Ｏドライバの処理（sys-B21,sys-B22）の時間ＴＳＢ２１
＋ＴＳＢ２２と、物理デバイスに対する入出力待ち（iowait-B2）の時間ＴＷＢ２との関
係は、物理ＯＳの場合にほぼ対応する。すなわち、物理ＯＳの場合におけるカーネル状態での処理 (sys-A1,sys-A2)の時間ＴＳＡ１＋ＴＳＡ２と、物理デバイスに対する入出力待ち（iowait-A）の時間ＴＷＡとの関係が、仮想計算機モニタ３０１における時間ＴＳＢ２
１＋ＴＳＢ２２と、時間ＴＷＢ２との関係に対応する。
【００４５】
しかしながら、図４ＢのゲストＯＳ３１０Ｂから見た入出力処理に関連する時間の関係は、図４Ａの物理ＯＳから見た入出力処理に関連する時間の関係とは必ずしも対応しない。すなわち、図４Ｂのように、ゲスト３１０Ｂが、仮想デバイスに対する入出力待ち（iowait-B1）の時間ＴＷＢ１には、実Ｉ／Ｏドライバの処理（sys-B21,sys-B22）の時間ＴＳＢ２１＋ＴＳＢ２２と、物理デバイスに対する入出力待ち（iowait-B2）の時間ＴＷＢ２
とを含む。したがって、仮想デバイスに対する入出力待ち（iowait-B1）の時間ＴＷＢ１
は、物理デバイスに対する入出力待ち（iowait-B2）の時間ＴＷＢ２によりも、実Ｉ／Ｏ
ドライバの処理（sys-B21,sys-B22）の時間ＴＳＢ２１＋ＴＳＢ２２だけ長くなる。
【００４６】
その結果、ゲストＯＳ３１０Ｂから見たカーネル状態での処理（sys-B11,sysB12）の時間ＴＳＢ１１＋ＴＳＢ１２と仮想デバイスに対する入出力待ち(iowait-B1)の時間ＴＷＢ
１との関係は、物理計算機上で動作する物理ＯＳに相当する仮想計算機モニタ３０１での時間ＴＳＡ１＋ＴＳＡ２と時間ＴＷＡとの関係とは、異なる。
【００４７】
図４Ｂのように、ゲストＯＳ３１０Ｂから見た入出力待ち時間ＴＷＢ１は、仮想計算機モニタ３０１がカーネル状態で動作したシステム時間ＴＳＢ２１＋ＴＳＢ２２と、仮想計算機モニタ３０１の入出力待ち時間ＴＷＢ２とを含む時間である。従って、ゲストＯＳ３１０Ｂから見た、仮想計算機３１０での入出力待ちに要する入出力待ち時間ＴＷＢ１は、仮想計算機モニタが実行する実Ｉ／Ｏの入出力待ちに要する入出力待ち時間ＴＷＢ２よりも、長い期間として計測される。
【００４８】
図４Ｃは、物理計算機上の物理ＯＳと仮想計算機３１０上のゲストＯＳ３１０Ｂとについて、カーネル状態での処理時間と、入出力待ち時間との関係を比較して示す。図４Ｃのように、「物理ＯＳの場合」という文字列が付された行でのsys-A1,sys-A2の時間ＴＳＡ
１＋ＴＳＡ２と比較して、「ゲストＯＳの場合」の文字列が付された行でのsys-B11,sys-B12の処理の時間ＴＳＢ１１＋ＴＳＢ１２は短くなっている。一方、「物理ＯＳの場合」
という文字列が付された行でのiowait-Aの時間ＴＷＡと比較して、「ゲストＯＳの場合」の文字列が付された行でのiowait-Bの時間ＴＷＢ１は長くなっている。したがって、ゲストＯＳ３１０Ｂによる統計情報は、パフォーマンスチューニングにおける手がかりとして、信頼性が低下する。
【００４９】
図４Ｂは、ゲストＯＳ３１０Ｂが１つの場合の処理である。複数のゲストＯＳ３１０Ｂが動作する場合には、統計情報に関してより複雑な状況を生じる。図４Ａ−図４Ｃに示したような状況であったため、ゲストＯＳ３１０Ｂ上のアプリケーションプログラム３１０Ｃ、あるいは、ゲストＯＳ３１０Ｂ上のミドルウェア等のパフォーマンスチューニングを行う場合には、ゲストＯＳ３１０Ｂから見た統計情報は信頼しがたいものとなる。そこで、例えば、ゲストＯＳ３１０Ｂから見た統計情報に代えて、仮想計算機モニタ３０１が採取する統計情報を利用することも考えられる。ところが、仮想計算機モニタ３０１の統計情報は、セキュリティやアクセス権限の観点から、ゲストＯＳ３１０Ｂの利用者に開示しないのが普通である。
【００５０】
本実施形態に係る計算機システムでは、ゲストＯＳに修正を加えることなく、ゲストＯＳで収集した統計情報と物理計算機から見た統計情報とが同等となるように、タイマ機構を補正する仕組みを設ける。本実施形態に係る計算機システムでは、タイマ機構を補正する仕組みにより、ゲストＯＳ上で動作するアプリケーションプログラムやミドルウェアのパフォーマンスチューニングにおいて、比較例に係る計算機システム３００よりも有効な統計情報を提供する。
【実施例１】
【００５１】
図５から図１６を参照して実施例１に係る計算機システム（以下、仮想システムと称する）を説明する。図５は、実施例１の仮想システムにおける入出力処理の処理時間管理の例を、比較例の計算機システム３００と対比して示す。図５で、符号Ｃ１で示す上段は、比較例に係る計算機システム３００での入出力処理での処理時間の例であり、符号Ｃ２およびＣ３で示す下段は、実施例１に係る仮想システムの入出力処理での処理時間の例である。図５で縦方向の破線は、タイマによって検出される時刻の刻みを例示している。ただし、ゲストＯＳ３１０Ｂでのタイマの刻みと、ゲストＯＳ３１０Ｂを管理する仮想計算機モニタ３０１でのタイマの刻みは同一であるため、図５のＣ１では、仮想計算機モニタ３０１でのタイマの刻みは省略されている。また、user-B1, user-B2, sys-B11,iowait-B1,
sys-B12, sys-B21, iowait-B2, sys-B22で示される処理は、図４Ｂの場合と同様である
。ただし、実施例１においては、仮想計算機モニタがゲストＯＳにタイマ割り込みを通知するタイミングを調節する。タイミング調整によって、ゲストＯＳでのタイマの刻みと、仮想計算機モニタでのタイマの刻みとが一致しない状態が生じ得る。そこで、図５では、Ｃ２に、実施例１に係るゲストＯＳでのタイマの刻みを示すとともに、Ｃ３に、実施例１に係る仮想計算機モニタでのタイマの刻みを示している。ここで、ゲストＯＳでのタイマの刻みは、ゲストＯＳが観測するタイマ割り込みの時刻として示される。また、仮想計算機モニタでのタイマの刻みは、仮想計算機モニタが観測するタイマ割り込みの時刻として示される。
【００５２】
実施例１でのゲストＯＳが観測するタイマ割り込みの時刻は、符号Ｃ２の欄のうち、Ｃ２１矢印で示される範囲の縦方向の破線で示されている。なお、符号Ｃ２の欄のうち、Ｃ２１矢印で示される範囲より上側の破線は、Ｃ１欄のタイマ割込時刻との関係を示すための参照用の線である。また、実施例１の仮想計算機モニタが観測するタイマ割り込みの時刻は、符号Ｃ３の欄の縦方向の破線で示されている。以下、仮想計算機１０のゲストＯＳが起動するタイマを仮想タイマと呼び、仮想計算機モニタが起動するタイマを実タイマと呼ぶ。
【００５３】
実施例１では、仮想計算機モニタによるタイマ割り込みのタイミング調整によって、ゲストＯＳのタイマ機構を変更することなく、そして、ゲストＯＳに修正を加えることなく、ゲストＯＳで収集する統計情報の信頼性を向上する。そこで、実施例１の仮想計算機モニタは、ゲストＯＳから見たシステム時間と仮想デバイスに対する入出力待ち時間との関係が、物理計算機でのシステム時間と物理デバイスに対する入出力待ち時間との関係と同等となるように、ゲストＯＳにタイマ割り込みを通知するタイミングを調整する。すなわち、実施例１では、ゲストＯＳの仮想タイマによるタイマ割り込みの発生回数を、仮想計算機モニタの実タイマによるタイマ割込みの発生回数と一致させたまま、仮想タイマによるタイマ割込みのタイミングが調整される。ゲストＯＳでのカーネル状態での処理（sys-B11, sys-B12）の時間ＴＳＢ１１＋ＴＳＢ１２におけるタイマ割り込みの発生回数の、仮想デバイスに対する入出力待ち(iowait-B1)の時間におけるタイマ割り込みの発生回数に
対する比率をＲ１とする。また、仮想計算機モニタでのカーネル状態での処理（sys-B21,
sys-B22）の時間ＴＳＢ２１＋ＴＳＢ２２におけるタイマ割り込みの発生回数の、物理デバイスに対する入出力待ち（iowait-B2）の時間ＴＷＢ２におけるタイマ割り込みの発生
回数に対する比率をＲ２とする。図５に示す実施例１では、Ｒ１とＲ２とが近くなるように、仮想タイマの割り込みの発生タイミングを修正する。
【００５４】
以下、カーネル状態と入出力待ち状態を合わせた時間の全発生回数に対する、カーネル状態の時間および入出力待ち状態の時間、それぞれの発生回数の比率を、タイマ密度と呼ぶことにする。図５に示す実施例１では、以下のように、仮想タイマのタイマ密度が修正される。なお、カーネル状態と入出力待ち状態を合わせた時間のタイマ割込の全発生回数を、入出力処理に伴うタイマ割込の総数と呼ぶ。
（ａ）Ｃ１の破線本数とＣ２の破線本数とは一致させたままにしておく。そして、
（ｂ）Ｃ２１矢印で示されるゲストＯＳのカーネル状態での処理（sys-B11,sys-B12）の
期間内のタイマ密度とＣ３欄の仮想計算機モニタでのカーネル状態での処理（sys-B21,sys-B22）の期間内のタイマ密度とを極力近づけるように修正する。かつ、
（ｃ）Ｃ２欄の仮想デバイスに対する入出力待ち（iowait-B1）の期間内のタイマ密度と
Ｃ３欄の物理デバイスに対する入出力待ち（iowait-B2）の期間内のタイマ密度とを極力
近づけるように修正する。
【００５５】
以上の処理によって、ゲストＯＳのカーネル状態での処理（sys-B11,sys-B12）と仮想
計算機モニタでのカーネル状態での処理とで、タイマ密度が共通になる方向にタイマ割り込みのタイミングが調整される。また、仮想デバイスに対する入出力待ち（iowait-B1）
の期間と物理デバイスに対する入出力待ち（iowait-B2）とで、タイマ密度が共通になる
方向にタイマ割り込みのタイミングが調整される。その結果、上記比率Ｒ１は、比率Ｒ２に近づけられる。
【００５６】
例えば、Ｃ１欄の比較例に係る仮想計算機モニタ３０１では、sys-B11, iowait-B, sys-B12の処理の期間に、あわせて２４回のタイマ割り込みが発生している。より具体的には、sys-B11, iowait-B,sys-B12のそれぞれの期間で、２回、２０回、２回のタイマ割り込
みが発生している。タイマ頻度の割合でいえば、１：１０：１でタイマ割り込みが発生している。したがって、カーネル状態での処理sys-B11、sys-B12でタイマ密度は、それぞれ１／１２である。また、仮想デバイスに対する入出力待ち（iowait-B1）でのタイマ密度
は、１１／１２である。
【００５７】
一方、Ｃ３欄に示す実施例１では、sys-B21, iowait-B2, sys-B22の処理の期間に、併
せて２１回のタイマ割り込みが発生している。より具体的には、sys-B21, iowait-B2, sys-B22のそれぞれの期間で７回、７回、７回のタイマ割り込みが発生している。タイマ頻
度の割合でいえば1：１：１でタイマ割り込みが発生している。したがって、カーネル状
態での処理sys-B21、sys-B22でタイマ密度は、それぞれ１／３である。また、物理デバイスに対する入出力待ち（iowait-B2）でのタイマ密度は、１／３である。
【００５８】
つまり、比較例に係るゲスト３１０Ｂのタイマ割込の発生回数の、カーネル状態と入出力待ち状態とにおける割合は、実施例１の仮想計算機モニタの場合、あるいは、物理計算機における物理ＯＳの場合とは、一致しない。なお、実施例１の仮想計算機モニタでのタイマ割込の発生回数の、カーネル状態と入出力待ち状態とにおける割合は、物理計算機における物理ＯＳの場合と同様と考えてよい。
【００５９】
そこで、実施例１に係るＣ２欄では、sys-B11, iowait-B1, sys-B12それぞれに、８回
、８回、８回、すなわちタイマ密度でいえば極力１／３：１／３：１／３で仮想タイマ割り込みを発生させるよう、仮想計算機モニタが仮想タイマ割り込みをゲストＯＳに伝えるタイミングを調節する。タイミング調整の結果、図５のＣ２とＣ３との比較で明らかなように、Ｃ２のsys-B11の期間内とＣ３のsys-B21の期間内とで、タイマ密度が共通になる。また、Ｃ２のiowait-B1の期間内とＣ３のiowait-B2の期間内とで、タイマ密度が共通になる。また、Ｃ２のsys-B12の期間内とＣ３のsys-B22の期間内とで、タイマ密度が共通になる。
【００６０】
図５によれば、Ｃ１欄とＣ２欄においては、１回の入出力処理に伴うタイマ割り込みの回数の総数は同数（共通）であるから、比較例に係る仮想計算機３１０のゲストＯＳ３１０Ｂと、実施例１に係るゲストＯＳとの間で、時計に誤差は生じない。
【００６１】
一方、仮想タイマ割り込みタイミングの調節によって、実施例１に係るゲストＯＳの仮
想タイマと仮想計算機モニタの物理タイマとのタイミングにずれが生じているのは、Ｃ２に示すゲストＯＳでsys-B11, iowait-B1, sys-B12と、Ｃ３に示す仮想計算機モニタのsys-B11, iowait-B1, sys-B12との間である。したがって、実施例１に係るゲストＯＳが観測する時刻のずれは、カーネル状態で動作している範囲内に限られる。カーネル状態での動作は数ms程度となるようＯＳは設計されている。そのため、ゲストＯＳが観測する時刻のずれが、アプリケーションプログラムで検知される時間情報に影響を与える可能性は低い。
【００６２】
＜仮想システムの構成＞
図６に、実施例１に係る計算機システムとして仮想システム１１の構成例を示す。図６の仮想システム１１は、物理ＣＰＵと、メモリと、タイマとを含む。また、メモリは、仮想計算機モニタ１と、ゲストＯＳ１０Ｂとを含むコンピュータプログラムを保持する。以下、物理ＣＰＵを単にＣＰＵともいう。なお、実施例１では、物理ＣＰＵ、メモリ、タイマ等のハードウェア、仮想計算機モニタ、および仮想計算機モニタ上で実行されるゲストＯＳを含む、計算機システム全体を仮想システム１１という。
【００６３】
図６のように、仮想計算機モニタ１は、仮想ＣＰＵスケジューラ２、仮想ＣＰＵ状態決定手段３、物理ＣＰＵ利用統計算出手段４、仮想ＣＰＵ利用統計算出手段５、タイマ変調手段６を有する。仮想システム１１の物理ＣＰＵは、仮想ＣＰＵスケジューラ２、仮想ＣＰＵ状態決定手段３、物理ＣＰＵ利用統計算出手段４、仮想ＣＰＵ利用統計算出手段５、タイマ変調手段６を含む仮想計算機モニタ１として、コンピュータプログラムを実行する。また、仮想システム１１は、メモリ上に、仮想計算機モニタ１が管理する仮想ＣＰＵ管理データ７を有する。一方、ゲストＯＳ１０Ｂは、タイマ処理設定手段８を有する。仮想システム１１の物理ＣＰＵは、タイマ処理設定手段８を含むゲストＯＳ１０Ｂとして、コンピュータプログラムを実行する。
【００６４】
＜プロセススケジューラと仮想ＣＰＵスケジューラ＞
実施例１では、仮想計算機モニタ１は、複数の仮想ＣＰＵを扱い、仮想ＣＰＵに物理ＣＰＵを割り当てる。仮想ＣＰＵは、物理ＣＰＵをゲストＯＳに割り当てる場合の、物理ＣＰＵでの処理状態とリソースとを含む概念である。すなわち、仮想ＣＰＵは、従来の物理計算機上で直接動作する物理ＯＳが実現するマルチプロセス環境での個々のプロセスに対応する概念と考えることもできる。あるいは、ゲストＯＳから見ると、仮想ＣＰＵは、マルチプロセッサシステムにおける個々のＣＰＵとして取り扱うことができる。
【００６５】
なお、仮想計算機を含む計算機システムにおいては、例えば、１つのゲストＯＳが複数の仮想ＣＰＵを使い分ける構成も考えられるが、実施例１では１ゲストＯＳあたりの仮想ＣＰＵが１つの場合を考える。
【００６６】
ゲストＯＳが処理の実行を要求する仮想ＣＰＵに対して物理ＣＰＵを割り当てる処理は、ディスパッチと呼ばれる。そのため、仮想ＣＰＵを次々に切り替えても相互に干渉しないようにするために、仮想計算機モニタ１は、仮想ＣＰＵ切り替え時にはレジスタの値等の実行コンテキストを一旦メモリ上の所定領域に退避した上で、実行中の仮想ＣＰＵを停止する。そして、仮想計算機モニタ１は、停止中の仮想ＣＰＵの実行コンテキストを再び復元し、停止した仮想ＣＰＵの実行を再開する。この実行コンテキストは仮想ＣＰＵ管理データ７に含まれる。仮想計算機モニタ１は複数の仮想ＣＰＵそれぞれの実行コンテキストを保存することで、実行、待避、停止、再開する処理を繰り返している。仮想ＣＰＵスケジューラ２は、所定の規則にしたがって仮想ＣＰＵを物理ＣＰＵに割り当てる時間や順序を決定する。
【００６７】
図１０に、物理ＯＳにおけるプロセススケジューラとともに、仮想ＣＰＵスケジューラ
２の処理を例示する。物理ＯＳにおけるプロセスと、仮想計算機モニタ１における仮想ＣＰＵの役割とは、ある面では類似している。そこで、図１０では、プロセススケジューラの処理と仮想ＣＰＵスケジューラ２の処理とを１つの図にまとめて書いている。以下、主として、物理ＯＳにおけるプロセスについて説明するが、仮想計算機モニタ１における仮想ＣＰＵも、上記物理ＣＰＵにおけるプロセスの状態と同様の状態をとる。
【００６８】
プロセススケジューラはＦＩＦＯ（First In First Out）を持ち、ＦＩＦＯ上の割当待ちプロセスを順次、ＣＰＵにディスパッチする。プロセスのスケジュール状態は、図１０中のactive, queued, unqueuedに分けられる。activeとは、ＣＰＵが割り当て済みとなっているプロセスの状態をいう。activeは、ＣＰＵにて実行中のプロセスの状態ということもできる。queuedとは、プロセスがＦＩＦＯ上でＣＰＵの割り当て待ち状態にあることをいう。activeあるいはqueuedの状態では、物理ＯＳが管理するプロセスあるいは仮想計算機モニタ１が管理する仮想ＣＰＵは、ユーザ状態（user）またはカーネル状態(sys)に区
分される。
【００６９】
また、unqueuedとは、ＣＰＵにてプロセスが実行中ではなく、かつ、ＣＰＵの割り当て待ち状態にもない、ＦＩＦＯ上にないプロセスの状態をいう。unqueuedのプロセスは、入出力処理完了待ちの入出力待ち状態（iowait）、またはなにもしていないアイドル状態（idle）にある。
【００７０】
物理ＯＳは、ＦＩＦＯに繋がれていないunqueuedプロセスのうち、idleのものと入出力待ちのものとを、プロセスごとの管理情報から区別することができる。同様に、仮想計算機モニタ１は、ＦＩＦＯに繋がれていないunqueuedの仮想ＣＰＵのうち、アイドル状態のものと入出力待ち状態のものとを、仮想ＣＰＵごとの管理情報から区別することができる。
【００７１】
＜統計情報の算出＞
上述のように、仮想システム１１は、物理計算機のプロセス、あるいは仮想システム１１の仮想ＣＰＵをユーザ状態（user）, カーネル状態（sys）, 入出力待ち状態（iowait
）, アイドル状態（idle）の４つに分類する。これらの状態はＣＰＵのモードやスケジュール状態によって決まる。ＣＰＵのモードは、ＣＰＵが実行可能な命令を区分するため、ＣＰＵに設定される状態、あるいは特権の有無、あるいは実行レベルを示す概念である。例えば、ユーザモードは特権がない、あるいは最も低い特権のモードである。実施例１では、ＣＰＵのモードと区別してプロセス（あるいは仮想ＣＰＵ）について、“状態”という用語を用いる。そこで、実施例１では、プロセスを実行中のＣＰＵ（あるいは仮想ＣＰＵを割り当てられた実ＣＰＵ）がユーザモードにあるとき、プロセス（あるいは仮想ＣＰＵ）がユーザ状態にあるという。
【００７２】
また、カーネルモードは特権がある、あるいはユーザモードよりも高い特権のモードである。カーネルモードは、特権モードと呼んでもよい。ただし、特権モードという場合には、さらにＣＰＵの状態を細かく区分したレベルの異なるモードを含む場合があるが、実施例１ではこれらのモードは区別しない。実施例１では、プロセスを実行中のＣＰＵ（あるいは仮想ＣＰＵを割り当てられた実ＣＰＵ）がカーネルモード、あるいは様々な特権モードにあるとき、プロセス（あるいは仮想ＣＰＵ）がカーネル状態にあるという。
【００７３】
アプリケーションプログラムから、例えばシステムコール等によりゲストＯＳ１０Ｂに制御が移ると、仮想ＣＰＵは、カーネル状態となる。カーネル状態では、仮想ＣＰＵ利用統計算出手段５は、タイマからの経過時間をシステム時間（sys時間）として集計して蓄
積する。
【００７４】
カーネル状態において例えば、デバイスドライバから、物理デバイスのＩ／Ｏコントローラに入出力されるデータが転送された後、仮想ＣＰＵ（プロセス）がキューにつながれ、仮想ＣＰＵ（プロセス）の実行が一時中止すると、仮想ＣＰＵ（プロセス）は入出力待ちの状態となる。入出力待ちの状態では、仮想ＣＰＵ利用統計算出手段５はタイマからの経過時間を入出力待ち時間（iowait時間）として集計し、蓄積する。
【００７５】
ユーザプロセスの実行中、システムコール実行中、あるいは入出力待ちのいずれでもない場合、仮想ＣＰＵ（プロセス）はアイドル状態（idle）となる。アイドル状態では、仮想ＣＰＵ利用統計算出手段５は、タイマからの経過時間をアイドル時間（idle時間）として集計して蓄積する。
【００７６】
仮想計算機モニタ１、ゲストＯＳ、あるいは物理ＯＳは、プロセススケジューラまたは仮想ＣＰＵスケジューラ２がプロセスまたは仮想ＣＰＵを後述のunqueued状態に置いた原因に応じて、入出力待ち時間とアイドル度時間とを区別する。例えば、物理計算機において、物理ＯＳが実行するデバイスドライバが、データ転送命令によって入出力要求を図示しないＩ／Ｏコントローラに転送し、プロセスを一時停止する場合、プロセスが一時停止した状態で測定される処理時間は、入出力待ち時間となる。また、入出力要求以外の原因で、プロセスがunqueued状態となった場合には、処理時間は、アイドル時間となる。
【００７７】
図９に、仮想計算機１０が測定する時間の種類を例示する。それぞれの時間は、ＣＰＵサイクルを基にした時間、例えば、タイマ割り込みの発生を１単位に測定される。ユーザ時間（user時間）は、アプリケーションプログラムを実行した時間、あるいはその累計である。システム時間（sys時間）は、カーネルプログラムのコードを実行した時間、ある
いはその累計である。入出力待ち時間（iowait時間）は、アプリケーションプログラム、カーネルのどちらのプログラムも実行しておらず、かつ、デバイスの処理が完了するのを待機している時間、あるいはその累計である。アイドル時間（idle時間）は、アプリケーションプログラム、カーネルのどちらのプログラムも実行しておらず、かつ、物理デバイスの処理が完了するのを待機していない時間、あるいはその累計である。
【００７８】
物理ＣＰＵ利用統計算出手段４は、物理ＣＰＵで実行中のプロセスのuser, sys, iowait, idleの状態に応じて、経過時間をuser時間、sys時間、iowait時間、idle時間に区別して集計する。なお、図６では物理ＣＰＵ利用統計算出手段４が仮想計算機モニタ１内にある。
【００７９】
仮想ＣＰＵ利用統計算出手段５も、物理ＣＰＵ利用統計算出手段４と同様に経過時間を集計するものであるが、仮想ＣＰＵ状態に応じて仮想ＣＰＵにおける経過時間を集計する点が異なる。
【００８０】
すでに述べたように、仮想ＣＰＵとは、物理ＣＰＵ上でゲストＯＳを実行するときの計算機リソース、およびレジスタセットを含む実行環境ということができる。仮想ＣＰＵは、仮想計算機モニタ１の仮想ＣＰＵスケジューラ２によって物理ＣＰＵを割り当てられる。そして、ゲストＯＳ１０Ｂに仮想ＣＰＵのレジスタセット等の実行環境が引き渡され、ゲストＯＳ１０Ｂが起動される。ゲストＯＳ１０Ｂの起動により、仮想ＣＰＵの処理が開始する。仮想ＣＰＵ状態決定手段３は、仮想計算機モニタ１内に保持される、各種データ（＜管理データとデータ構造＞を参照）を用いて、仮想ＣＰＵの状態user, sys, iowait,
idleを決定する。
【００８１】
仮想ＣＰＵ利用統計算出手段５は、仮想ＣＰＵ状態決定手段３の決定にしたがい、仮想ＣＰＵの状態を識別し、ユーザ時間（user時間）、システム時間（sys時間）、入出力待
ち時間（iowait時間）、 およびアイドル時間（idle時間）の各々を所定期間集計し、そ
れぞれの蓄積値を算出する。
【００８２】
＜管理データとデータ構造＞
図８に、仮想ＣＰＵ管理データ７の例を示す。実行コンテキストは、個々の仮想ＣＰＵの状態を示すデータである。実行コンテキストには、例えば、レジスタ値がある。ゲストＯＳの切り替え時には、切り替え前に実行されていたゲストＯＳ実行時の実行コンテキストがメモリに退避される。一方、切り替え後に実行されるゲストＯＳのために、メモリに退避されていた実行コンテキストにしたがってレジスタが設定され、切り替え後に実行されるゲストＯＳが起動される。
【００８３】
Ｅｘｉｔフラグは、仮想ＣＰＵが、ユーザ状態（user）か、あるいはカーネル状態（sys）かを判定するためのフラグである。ゲストＯＳ１０Ｂが特権命令を実行し、仮想計算
機モニタ１に処理が移る前に、仮想計算機モニタ１は、当該ゲストＯＳ１０Ｂを実行中の仮想ＣＰＵに対するＥｘｉｔフラグに１を設定する。逆に、仮想計算機モニタ１からゲストＯＳ１０Ｂに処理が復帰するとき、仮想計算機モニタ１は、Ｅｘｉｔフラグを０に設定する。仮想システム１１は、Ｅｘｉｔフラグを仮想ＣＰＵ状態決定手段３のための１つの判断要素として用いる。
【００８４】
完了待ちＩ／Ｏ数は、ゲストＯＳ１０Ｂが発行した入出力要求のうち、未完了の入出力処理数を示す。完了待ちＩ／Ｏ数は、例えば、次の手順で算出される。ゲストＯＳ１０Ｂからの入出力要求を契機に仮想計算機モニタ１へ制御が移った際に、仮想計算機モニタ１は完了待ちＩ／Ｏ数に１を加算する。そして、物理入出力が完了してゲストＯＳ１０Ｂに入出力レスポンスを返す際に、仮想計算機モニタ１は完了待ちＩ／Ｏ数から１を減算する。完了待ちＩ／Ｏ数も仮想ＣＰＵ状態決定手段３の判断要素となる。
【００８５】
実施例１では、仮想計算機モニタ１は、完了待ちＩ／Ｏ数をゲストＯＳ１０ごとに算出する。ただし、実施例１では、算出されたゲストＯＳ１０ごとの完了待ちＩ／Ｏ数は、ゲストＯＳ１０Ｂが実行される仮想ＣＰＵによって識別可能なように、仮想ＣＰＵ管理データ７に保持する。実施例１では、１つのゲストＯＳ１０Ｂが１つの仮想ＣＰＵで実行されることを前提としているので、仮想ＣＰＵ状態決定手段３は、仮想ＣＰＵを特定できれば、当該仮想ＣＰＵでの完了待ちＩ／Ｏ数が取得できる。
【００８６】
図１１に、仮想計算機モニタ１が仮想ＣＰＵの状態（user,sys,iowait,idle）を同定するための仮想ＣＰＵ状態表テーブルを例示する。仮想ＣＰＵ状態表テーブルは、図６の仮想ＣＰＵ管理データ７に含まれる。
【００８７】
図１１の仮想ＣＰＵ状態表テーブルは、第１列目に「実行状態」、第２列目に「Ｅｘｉｔフラグ」、第３列目に「完了待ち」Ｉ／Ｏ数を有する。実行状態とは、図１０によって説明したプロセスの状態、つまりactive, queued, unqueuedのいずれかの状態をいう。仮想計算機モニタ１は、仮想ＣＰＵの実行状態を、仮想ＣＰＵスケジューラ２に問い合わせる。一方、すでに、図８で説明したように、Ｅｘｉｔフラグと完了待ちＩ／Ｏ数は仮想ＣＰＵ管理データ７の中に保持されている。
【００８８】
したがって、仮想ＣＰＵの実行状態が、「active」または「queued」である場合には、Ｅｘｉｔフラグの値によって、仮想計算機モニタ１は、仮想ＣＰＵの状態がuserかsysか
を同定できる。
【００８９】
しかしながら、仮想ＣＰＵがunqueuedの場合、idleとiowaitのいずれの状態にあるのかを仮想計算機モニタ１が判定するのは困難である。仮想計算機モニタ１は、ゲストＯＳ１０Ｂからの入出力を代行するが、ゲストＯＳ１０Ｂでの入出力要求の回数や処理を完了し
た回数まで管理しているわけではない。そのため、実施例１では完了待ちＩ／Ｏ数を示す情報が仮想ＣＰＵ管理データ７中に設けられている。そして、仮想計算機モニタ１が、それぞれのゲストＯＳ１０Ｂからの入出力要求時と、入出力に対する実Ｉ／Ｏの完了時に、完了待ちＩ／Ｏ数を増減し、ゲストＯＳ１０Ｂごとに保持する。そして、仮想ＣＰＵがunqueuedの場合、仮想計算機モニタ１は、完了待ちＩ／Ｏ数が０より大きい場合に、仮想ＣＰＵの状態がiowaitであると同定する。また、仮想計算機モニタ１は、仮想ＣＰＵがunqueuedの場合で、完了待ちＩ／Ｏ数が０の場合に、仮想ＣＰＵの状態がidleであると同定する。実施例１では、１つのゲストＯＳが１つの仮想ＣＰＵで実行されることを想定しているので、仮想計算機モニタ１は、仮想ＣＰＵごとに完了待ちＩ／Ｏ数を保持する。したがって、仮想計算機モニタ１は、仮想ＣＰＵごとの完了待ちＩ／Ｏ数から、仮想ＣＰＵの状態を同定できる。
【００９０】
なお、附言すると、１つのゲストＯＳ１０Ｂが、複数の仮想ＣＰＵで実行される場合には、以下のように処理を変更すればよい。すなわち、１つのゲストＯＳ１０Ｂが、複数の仮想ＣＰＵで実行される場合、ゲストＯＳ１０Ｂには、仮想プライマリＣＰＵと呼ばれる特定の仮想ＣＰＵが対応づけられる。ゲストＯＳ１０Ｂは、最初に起動されるとき、まず、仮想プライマリＣＰＵで起動され、その後、場合によって他の仮想ＣＰＵで実行される。そこで、完了待ちＩ／Ｏ数は、仮想プライマリＣＰＵによって識別可能に、仮想ＣＰＵ管理データ７に保持されるようにすればよい。したがって、仮想ＣＰＵ状態決定手段３は、仮想プライマリＣＰＵを特定できれば、当該仮想プライマリＣＰＵで実行されるゲストＯＳ１０Ｂでの完了待ちＩ／Ｏ数が取得できる。すなわち、複数の仮想ＣＰＵの完了待ちＩ／Ｏ数をプライマリ仮想ＣＰＵの情報として、合計して持つことで、複数の仮想ＣＰＵ全体としての完了待ちＩ／Ｏ数を、個々の仮想ＣＰＵの完了待ちＩ／Ｏ数と見なして、近似的に、個々の仮想ＣＰＵがiowaitかidleかを同定すればよい。
【００９１】
＜タイマ処理の説明＞
以下、仮想計算機１０におけるタイマ処理を説明する。ゲストＯＳ１０Ｂのタイマ処理は、物理計算機のタイマ処理と基本的に同じである。タイマ処理では、まずコールバック関数をタイマに登録し、指定した時間が経過するとタイマ割り込みが発生する。このタイマ割り込みを契機として、物理ＯＳはコールバック関数をタイマから解除した後、コールバック関数を呼び出す。コールバック関数の中では、タイマ割り込みによって周期的に行うべき所定の処理を実行した後、再びコールバック関数をタイマに登録する。これによって、周期的にコールバック関数が呼び出されることになる。コールバック関数は、ハンドラ、割り込み処理プログラムとも呼ばれる。タイマの具体的な実装は物理ＯＳにより異なる。
【００９２】
ゲストＯＳ１０Ｂのタイマ処理が物理計算機のタイマ処理と異なる点は次の通りである。タイマ登録処理は特権命令を伴う。そのため、コールバック関数をタイマに登録する処理の実行時には、ゲストＯＳ１０Ｂから、一旦仮想計算機モニタ１に制御が渡される。仮想計算機モニタ１はゲストＯＳ１０Ｂが指定した時間が経過した後に、ゲストＯＳ１０Ｂに仮想タイマ割り込みを打ち込み、さらに仮想ＣＰＵを起床させる。仮想ＣＰＵを起床させるとは、仮想ＣＰＵで実行されるゲストＯＳ１０Ｂに実行コンテキストを復元した上で、物理ＣＰＵを割り当てることをいう。ただし、仮想計算機モニタ１は、ゲストＯＳ１０Ｂに引き渡す実行コンテキスト中に、タイマ割り込みの発生を設定しておく。すると、仮想ＣＰＵ起床後、ゲストＯＳ１０Ｂは仮想タイマ割り込みを受信する。以上の方法で、仮想計算機モニタ１は、ゲストＯＳ１０Ｂから起動されるタイマ処理を仮想的に代行している。実施例１では、さらに、仮想計算機モニタ１はタイマ変調手段６を備え、仮想計算機１０が指定した時間を適宜修正することによって、図５で示したタイマ調整処理を実行する。
【００９３】
図７に、タイマ割り込みの設定時およびタイマ割り込みの発生後の処理に関連する構成要素を例示する。仮想システム１１が１つの物理ＣＰＵを含むとする。１つの物理ＣＰＵ上でゲストＯＳ１０Ｂが実行される。ゲストＯＳ１０Ｂが第１のタイマ間隔でタイマ割り込みをハードウェアタイマに設定する（矢印Ａ１）。仮想システム１１以外の物理計算機では、タイマ割り込みは、図７の点線ＡＢ２の経路で、ハードウェアタイマＡＴＭに設定される。
【００９４】
しかし、タイマ割り込みの設定は特権命令であるので、仮想システム１１の場合には、物理ＣＰＵに例外が発生する。例外によって、ゲストＯＳ１０Ｂから仮想計算機モニタ１に制御が移動する。
ゲストＯＳ１０Ｂから制御が移された仮想計算機モニタ１は、ゲストＯＳ１０Ｂが設定したタイマ割り込みの要求をインターセプトする（矢印Ａ２）。インターセプトとは、ゲストＯＳ１０Ｂが設定期間経過後のタイマ割り込みの発生をハードウェアタイマＡＴＭに対して設定するタイマ設定を、ハードウェアタイマＡＴＭに代わって受け取ることをいう。実施例１の仮想計算機１０では、仮想計算機モニタ１は、例外処理を介してタイマ設定をインターセプトする。インターセプトの結果、ゲストＯＳ１０Ｂによるタイマ割り込みの設定は、ハードウェアタイマに対してはなされない。なお、物理ＣＰＵは、ハードウェアタイマＡＴＭに代わってタイマ設定を受け取る手段として、メモリに展開されたコンピュータプログラムを実行する。
【００９５】
ゲストＯＳ１０Ｂによるタイマ設定をインターセプトした仮想計算機モニタ１は、ゲストＯＳ１０Ｂが設定した第１のタイマ間隔に代えて、変調された第２のタイマ間隔でタイマ割り込みをハードウェアタイマＡＴＭに設定する（矢印Ａ３）。タイマ割り込み設定に際して、仮想計算機モニタ１は、ゲストタイマ起床ハンドラＡＡＨのアドレスを、タイマ割り込みに対して処理される割り込みベクタＡＩＶ１に設定する。タイマハンドとは、タイマ割込発生時に起動される関数である。図７においても、ゲストタイマ起床ハンドラＡＡＨは、タイマ割り込み発生時に起動され、ゲストＯＳ１０Ｂにタイマ割り込みを通知する。
【００９６】
タイマ割り込みが発生すると、ＣＰＵのタイマ割り込みレジスタＡＩＲ１に割り込みフラグが設定され（Ａ４）、タイマ割り込みに対応する割り込みベクタＡＩＶ１に設定されたアドレスを基に、ゲストタイマ起床ハンドラＡＡＨが起動される。
【００９７】
起動したゲストタイマ起床ハンドラＡＡＨは、ゲストＯＳ１０Ｂのレジスタセットの内容を含む実行コンテキストＡＣ中のタイマ割り込みレジスタＡＩＲ２に割り込みフラグを設定し、ゲストＯＳ１０Ｂに仮想割り込みを送信する（矢印Ａ５）。
【００９８】
ゲストＯＳ１０Ｂが仮想割り込み受信すると、割り込みベクタＡＩＶ２に設定されたタイマハンドラＡＴＨに制御が移動し、タイマ処理がなされる。タイマハンドラＡＴＨによる処理の後、ゲストＯＳ１０Ｂの通常の処理に制御が移動する（矢印Ａ６）。以上の構成によって、仮想計算機モニタ１は、ゲストＯＳ１０Ｂが設定した第１のタイマ間隔に代えて、変調された第２のタイマ間隔でタイマ割り込みをハードウェアタイマＡＴＭに設定する。そして、仮想計算機モニタ１は、ハードウェアタイマＡＴＭに代わって、ゲストＯＳ１０Ｂに仮想タイマ割り込みを通知する。
【００９９】
＜タイマ変調手段＞
以下、タイマ変調手段６が、ゲストＯＳ１０Ｂが指定したタイマ周期を調節する方法を説明する。図１２に、ゲストＯＳ１０Ｂ（ハイパーバイザ）が設定するタイマ周期μと、仮想計算機モニタ１（ＶＭ）がゲストＯＳ１０Ｂに返す仮想タイマ周期μsys、μioとの
関係を例示する。
【０１００】
図１２のtsysで示す期間及びＴsysで示す期間においては、ゲストＯＳ１０Ｂが設定す
るタイマ周期μと、仮想計算機モニタ１がゲストＯＳ１０Ｂに返す仮想タイマ周期μsys
との関係は、次の式１で示される。
（式１）μsys＝μ・ｔsys／Ｔsys；
式１において、tsysは、１回の入出力（例えば、図４、図５のＩ／Ｏ要求からＩ／Ｏ受理までの処理）において、ゲストＯＳ１０Ｂが認識するカーネルプログラムの実行中の期間（例えば、図４ＢのＴＳＢ１１＋ＴＳＢ１２）に相当する。また、Ｔsysは、上記１回
の入出力において、仮想計算機モニタ１が認識するカーネルプログラムの実行中の期間（例えば、図４ＢのＴＳＢ２１＋ＴＳＢ２２）に相当する。実際には、tsysは仮想ＣＰＵ利用統計算出手段５が算出するカーネルプログラムの実行時間を所定期間累積した累積値として求めることができる。ここで、累積値とは、所定期間収集した合計値という意味である。ただし、累積値として、所定期間中の平均値を用いてもよい。ただし、仮想ＣＰＵ利用統計算出手段５が算出した実行時間の累積値に代えて、ゲストＯＳ１０Ｂが過去に算出した利用統計に含まれるカーネルプログラムの所定期間での実行時間を利用してもよい。もちろん、ゲストＯＳ１０Ｂが過去に算出した利用統計は、式１による仮想タイマ周期μsysの変調がない状態での利用統計を利用すればよい。ｔsysがゲストＯＳが認識する特権状態での処理時間の基準値に相当する。
【０１０１】
また、Ｔsysは物理ＣＰＵ利用統計算出手段４が算出するカーネルプログラムの実行時
間を累積した累積値として求めることができる。Ｔsysは、仮想計算機モニタ１０が認識
する特権モードでの処理時間の基準値に相当する。
【０１０２】
ゲストＯＳ１０Ｂが設定するタイマ周期μに代わるタイマ周期として、期間tsys内で発生する仮想タイマ割込みの発生頻度が期間Ｔsys内で発生する物理タイマ割込みの発生頻
度と一致するように変調されたタイマ周期μsysを、式１によって決定する。式１によれ
ば、タイマ周期が、ｔsys／Ｔsysの比率で変調されることになる。
【０１０３】
式１を変形すると、ｔsys／μsys＝Ｔsys／μとなり、累積時間ｔsys内でゲストＯＳ１０Ｂが認識する、μsysの間隔で発生するタイマ割り込みの発生回数が、累積時間Ｔsysで仮想計算機モニタ１が認識する、μの間隔で発生するタイマ割り込みの発生回数と一致する方向に仮想タイマが変調される。すなわち、期間ｔsysでの仮想タイマでのタイマ密度
と、期間Ｔsysでの物理タイマでのタイマ密度が共通となる。
【０１０４】
一方、図１２のtioで示す期間及びＴioで示す期間においては、ゲストＯＳ１０Ｂが設
定するタイマ周期μと、仮想計算機モニタ１がゲストＯＳ１０Ｂに返す仮想タイマ周期μioとの関係は、次の式２で示される。
（式２）μio＝μ・ｔio／Ｔio；
式２において、tioは、１回の入出力（例えば、図４、図５のＩ／Ｏ要求からＩ／Ｏ受理
までの処理）において、ゲストＯＳ１０Ｂが認識する仮想デバイスに対する入出力待ちの期間（例えば、図４ＢのＴＷＢ１）に相当する。また、Ｔioは、上記１回の入出力において、仮想計算機モニタ１が認識する物理デバイスに対する入出力待ちの期間（例えば、図４ＢのＴＷＢ２）に相当する。実際にはｔioは仮想ＣＰＵ利用統計算出手段５が算出する入出力待ち時間の累積値として求める。ただし、仮想ＣＰＵ利用統計算出手段５が算出した累積値ｔioに代えて、ゲストＯＳ１０Ｂが算出した利用統計に含まれる所定期間中の入出力待ち時間を利用してもよい。もちろん、ゲストＯＳ１０Ｂが過去に算出した利用統計は、式２による仮想タイマ周期μioの変調がない状態での利用統計を利用すればよい。ｔioがゲストＯＳが認識する入出力待ち時間の基準値に相当する。また、Ｔioは物理ＣＰＵ利用統計算出手段４が算出する所定期間中の入出力待ち時間の累積値である。Ｔioが仮想計算機モニタが認識する入出力待ち時間の基準値に相当する。
【０１０５】
ゲストＯＳ１０Ｂが設定するタイマ周期μに代わるタイマ周期として、期間tio内で発
生する仮想タイマ割込みの発生頻度が期間Ｔio内で発生する物理タイマ割込みの発生頻度と一致するように変調されたタイマ周期μioを、式１によって決定する。
【０１０６】
式２を変形すると、ｔio／μio＝Ｔio／μとなり、累積時間ｔio内でゲストＯＳ１０Ｂが認識する、μio間隔で発生するタイマ割り込みの発生回数が、累積時間Ｔioで仮想計算機モニタ１が認識する、μ間隔で発生するタイマ割り込みの発生回数と一致する。したがって、ゲストＯＳ１０Ｂが認識する入出力待ち時間でのタイマ割り込みの発生回数が、仮想計算機モニタ１が認識する入出力待ち時間でのタイマ割り込みの発生回数と一致する方向に、タイマが変調される。すなわち、期間ｔioでの仮想タイマでのタイマ密度と、期間Ｔioでの物理タイマでのタイマ密度が共通となる。
【０１０７】
さらに、ｔsys／μsys＋ｔio／μio＝（Ｔsys＋Ｔio）／μであるので、ゲストＯＳ１
０Ｂが認識するカーネル状態と入出力待ち状態での総割り込み回数は、仮想計算機モニタ１が認識する総割り込み回数と合致する。
【０１０８】
図１３に、仮想ＣＰＵ状態決定手段３の処理フローを例示する。仮想ＣＰＵ状態決定手段３は、図１１の仮想ＣＰＵ状態表テーブルを管理し、参照して、それぞれの仮想ＣＰＵの状態を決定する。例えば、仮想ＣＰＵ状態決定手段３は、仮想ＣＰＵ利用統計算出手段５からの要求により、それぞれの仮想ＣＰＵの状態を決定する。
【０１０９】
物理ＣＰＵは、仮想ＣＰＵ状態決定手段３として、コンピュータプログラムを実行する。ただし、実施例１では、仮想ＣＰＵ状態決定手段３が図１３の処理を実行するものとして説明する。
図１３の処理では、仮想ＣＰＵ状態決定手段３が、それぞれの仮想ＣＰＵのスケジュール状態を仮想ＣＰＵスケジューラ２に問い合わせる（Ｆ１）。そして、仮想ＣＰＵスケジューラ２からの応答により、仮想ＣＰＵ状態決定手段３は、それぞれの仮想ＣＰＵがactiveまたはqueuedのどちらかの状態にあるか、あるいはどちらの状態でもないかを判定する（Ｆ２）。
【０１１０】
仮想ＣＰＵが、activeまたはqueuedのいずれかの場合（Ｆ２  ＹＥＳ）、仮想ＣＰＵ状態決定手段３は、仮想ＣＰＵ管理テーブルからＥｘｉｔフラグを取得する（Ｆ３）。そして、仮想ＣＰＵ状態決定手段３は、制御をＦ５に進める。
一方、仮想ＣＰＵがactiveでもなく、かつqueuedでもない場合、すなわち、unqueuedの場合（Ｆ２  ＮＯ）、仮想ＣＰＵ状態決定手段３は、処理をＦ４に進める。この場合、仮想ＣＰＵ状態決定手段３は、仮想ＣＰＵ管理データより、完了待ちＩ／Ｏ数を取得する（Ｆ４）。
【０１１１】
そして、仮想ＣＰＵ状態決定手段３は、Ｆ３で取得したＥｘｉｔフラグ、あるいはＦ４で取得した完了待ちＩ／Ｏフラグを用いて仮想ＣＰＵ状態表を参照し、仮想ＣＰＵの状態、すなわち、user, sys, iowait,およびidleのいずれかを判定し、判定結果を仮想ＣＰＵ利用統計算出手段に出力する（Ｆ５）。
【０１１２】
例えば、仮想ＣＰＵがactiveまたはqueuedであって、EXITフラグが０の場合、仮想ＣＰＵ状態決定手段３はユーザ状態(user)を出力する。また、仮想ＣＰＵがactiveまたはqueuedであって、EXITフラグが１場合、仮想ＣＰＵ状態決定手段３はカーネル状態(sys)を出
力する。仮想ＣＰＵがactiveおよびqueuedのいずれでもなく（unqueued）、完了待ちＩ／Ｏ数が０以下の場合、仮想ＣＰＵ状態決定手段３はアイドル(idle)を出力する。仮想ＣＰＵがactiveおよびqueuedのいずれでもなく（unqueued）、完了待ちＩ／Ｏ数が１以上の場
合、仮想ＣＰＵ状態決定手段３はＩ／Ｏ完了待ち(iowait)を出力する。
【０１１３】
以上のように、仮想ＣＰＵ状態決定手段３がuser, sys, iowait, idleを区別するので
、仮想計算機モニタ１が例えば定期的に仮想ＣＰＵの状態を監視すれば、仮想ＣＰＵ利用統計情報を算出することができる。
【０１１４】
図１４に、仮想ＣＰＵ利用統計算出手段５の処理フローを例示する。物理ＣＰＵは、仮想ＣＰＵ利用統計算出手段５として、仮想計算機モニタ１に含まれるコンピュータプログラムを実行する。以下、仮想ＣＰＵ利用統計算出手段５が図１４の処理を実行するものとして説明する。図１４の処理は、それぞれの仮想ＣＰＵの状態が、仮想ＣＰＵスケジュール２によってactive, queuedあるいはunqueuedのいずれかに切り替えられるとき、あるいは、完了待ちＩ／Ｏ数が変化するときに起動する。
【０１１５】
なお、図１４の処理は、所定の時間間隔で起動されるようにしてもよい。図１４の処理が、所定の時間間隔で起動される場合、例えば、仮想ＣＰＵの状態（user, sys, iowait,
idle）が変化する期間に比べて、誤差として許容できる短時間周期で図１４の処理を起
動すればよい。
【０１１６】
仮想ＣＰＵ利用統計算出手段５は、まず、仮想ＣＰＵの現在の状態、user,sys,iowait,およびidleを判定する（Ｆ２１）。仮想ＣＰＵの現在の状態は、図１３仮想ＣＰＵ状態決定手段３の処理で決定される。
【０１１７】
次に、仮想ＣＰＵ利用統計算出手段５は、現在時刻から前回の処理終了時刻を減算し、前回の処理終了からの経過時間を求める（Ｆ２２）。現在時刻は、Ｆ２２の処理実行時に、仮想計算機モニタ１が認識する現在時刻である。
【０１１８】
次に、仮想ＣＰＵ利用統計算出手段５は、Ｆ１１で求めた仮想ＣＰＵの現在の状態がカーネル状態（sys）か否かを判定する（Ｆ２３）。仮想ＣＰＵの現在の状態がカーネル状
態（sys）である場合（Ｆ２３  ＹＥＳ）、仮想ＣＰＵ利用統計算出手段５は、sys時間の累積値ｔsysに、Ｆ２２で算出した経過時間を加算する（Ｆ２４）。そして、仮想ＣＰＵ
利用統計算出手段５は、制御をＦ２７に移動する。
【０１１９】
一方、仮想ＣＰＵの現在の状態がカーネル状態（sys）でない場合（Ｓ２３  ＮＯ）、
仮想ＣＰＵ利用統計算出手段５は、Ｆ２１で求めた仮想ＣＰＵの現在の状態が入出力待ち（iowait）か否かを判定する（Ｆ２５）。仮想ＣＰＵの現在の状態が入出力待ち（iowait）である場合（Ｆ２５  ＹＥＳ）、仮想ＣＰＵ利用統計算出手段５は、iowait時間の累積値ｔioに、Ｆ２２で算出した経過時間を加算する（Ｆ２６）。そして、仮想ＣＰＵ利用統計算出手段５は、制御をＦ２７に移動する。
【０１２０】
次に、仮想ＣＰＵ利用統計算出手段５は、現在時刻を終了時刻として、静的なメモリ、例えば共有メモリに記録する（Ｆ２７）。そして、仮想ＣＰＵ利用統計算出手段５は、処理を終了する。
【０１２１】
なお、図１４の処理では、省略したが、仮想ＣＰＵがユーザ状態にあるuser時間、あるいは、仮想ＣＰＵがアイドルであるidle時間も同様に計算できる。
【０１２２】
また、物理ＣＰＵ利用統計算出手段４の処理は、仮想計算機モニタ１において処理が実行される点以外は、従来の物理ＯＳで実行される処理と同様である。つまり、仮想計算機モニタ１では、物理計算機における物理ＯＳのプロセスと同様に、ハイパーバイザ上の処理を取り扱うことができる。したがって、物理ＣＰＵ利用統計算出手段４は、ハイパーバ
イザ上の処理の状態が、ユーザ状態(user)、カーネル状態(sys)、Ｉ／Ｏ完了待ち(iowait)、または、アイドル（idle）のいずれであるかを判定できる。なお、ハイパーバイザ上
の処理の状態がカーネル状態にある場合とは、図４Ｂの実Ｉ／Ｏドライバの処理(sys-B21, sys-B22)が実行中である場合を例示できる。したがって、例えば、物理ＣＰＵ利用統計算出手段４は、図４Ｂに示す実Ｉ／Ｏドライバのプロセス実行中の場合に、ハイパーバイザ上の処理の状態がカーネル状態にあると判断すればよい。そして、物理ＣＰＵ利用統計算出手段４は、所定の累積期間のカーネル状態での実行時間（sys時間）を累積値Ｔsysとする。また、物理ＣＰＵ利用統計算出手段４は、所定の累積期間の入出力待ち時間（iowait時間）を累積値Ｔioとする。
【０１２３】
図１５および図１６に、タイマ変調手段６の処理フローを例示する。物理ＣＰＵは、タイマ変調手段６として、仮想計算機モニタ１に含まれるコンピュータプログラムを実行する。以下、タイマ変調手段６が図１５、図１６の処理を実行するものとして説明する。
タイマ変調手段６は、式１、式２にしたがって、ゲストＯＳ１０Ｂに転送する仮想タイマ割り込みの発生時間を変調する。μはゲストＯＳ１０Ｂが指定したタイマ周期であるから、タイマ変調手段６は、仮想ＣＰＵ状態決定手段３の結果に応じて、変調したタイマ周期を算出する。図１５は、タイマセット時の処理であり、図１６は、タイマ割り込み発生後、ゲストＯＳ１０Ｂに仮想タイマ割り込みを転送するときの処理である。図１６の処理を実行するプログラムは、ゲストタイマ起床ハンドラと呼ばれる。物理ＣＰＵは、タイマ割り込みの発生をゲストＯＳに通知する手段として、メモリ上に展開されたコンピュータプログラムにより図１６の処理を実行する。
【０１２４】
ゲストＯＳ１０Ｂがタイマ割り込みを設定すると、タイマ割り込みの設定は特権命令であるので、物理ＣＰＵに例外が発生する。仮想計算機モニタ１は、ＣＰＵで発生した例外を通じて、ゲストＯＳ１０Ｂが設定したタイマ割り込みの設定をインターセプトし、図１４のタイマ変調手段６の処理を起動する。ＣＰＵは、メモリ上に展開されたコンピュータプログラムしたがい、タイマ割り込みの設定をインターセプトする（図６の矢印Ｂ１）。
【０１２５】
タイマ変調手段６は、仮想ＣＰＵ状態決定手段３に問い合わせ、仮想ＣＰＵの状態を取得する（Ｆ３１）。そして、タイマ変調手段６は、実行中の仮想ＣＰＵの状態を判定する（Ｆ３２）。
【０１２６】
仮想ＣＰＵの状態がカーネル状態（sys）である場合、タイマ変調手段６は、式１にし
たがって、変調後のタイマ間隔μsysを算出する。なお、ゲストＯＳ１０Ｂが設定したタ
イマ間隔μは、ゲストＯＳ１０Ｂが設定したタイマ割り込みをインターセプトしたときに取得できる。そして、タイマ変調手段６は、ゲストＯＳ１０Ｂが設定したタイマ間隔μに代えて、変調後のタイマ間隔をμsysとしてタイマ割り込みをハードウェアタイマに設定
する。さらに、タイマ変調手段６は、設定したタイマ割り込みを受け付けるタイマハンドラとして、ゲストＯＳ１０Ｂを起床させるためのゲストタイマ起床ハンドラを設定する（Ｆ３３）。
【０１２７】
仮想ＣＰＵの状態がユーザ状態（user）である場合、またはアイドル状態（idle）である場合、タイマ変調手段６は、タイマ間隔を変調することなしに、ゲストＯＳ１０Ｂが設定したタイマ間隔μによりタイマ割り込みを設定する（Ｆ３４）。さらに、タイマ変調手段６は、設定したタイマ割り込みを受け付けるタイマハンドラとして、ゲストＯＳ１０Ｂを起床させるためのゲストタイマ起床ハンドラを設定する。すなわち、実施例１の変調方法では、user, idle時間ではタイマ間隔を変調しない。
【０１２８】
仮想ＣＰＵの状態が入出力待ち（iowait）である場合、式２にしたがって、変調後のタイマ間隔μioを算出する。そして、タイマ変調手段６は、ゲストＯＳ１０Ｂが設定したタ
イマ間隔μに代えて、変調後のタイマ間隔をμioとしてタイマ割り込みを設定する。さらに、タイマ変調手段６は、設定したタイマ割り込みを受け付けるタイマハンドラとして、ゲストＯＳ１０Ｂを起床させるためのゲストタイマ起床ハンドラを設定する（Ｆ３５）。
【０１２９】
図１５の処理にしたがって設定されたタイマ割り込みが発生すると、ゲストタイマ起床ハンドラが起動され、図１６の処理を実行する。ゲストタイマ起床ハンドラは、まず、タイマ割り込み発生時のゲストタイマ起床ハンドラの起動設定を解除する。すなわち、タイマ割り込みに対する割り込みベクタから、ゲストタイマ起床ハンドラの設定をクリアする（Ｆ４１）。
【０１３０】
次に、ゲストタイマ起床ハンドラは、仮想ＣＰＵの実行コンテキストＡＣでタイマ割り込みレジスタＡＩＲ２に、割り込みフラグを設定する（図７参照）。そして、ゲストタイマ起床ハンドラは、ゲストＯＳ１０Ｂを起動する。
【０１３１】
起動したゲストＯＳ１０Ｂは、コンテキストに含まれる各種レジスタ値を仮想計算機１０のＣＰＵのレジスタに設定し、処理を開始する。すると、仮想ＣＰＵにはタイマ割り込みが発生したように見える。すなわち、ゲストタイマ起床ハンドラから、仮想タイマ割り込みが仮想ＣＰＵに通知される（Ｆ４２）。以上のように、ゲストＯＳ１０Ｂでは、仮想タイマ割り込みによってタイマハンドラが起動される。したがって、ゲストＯＳ１０Ｂは、実際にはタイマ間隔μsysあるいはタイマ間隔μioで割り込みを通知されたにも拘わら
ず、あたかもタイマ間隔μで割り込みを通知されたものとして振る舞う。
【０１３２】
以上述べたように、実施例１の仮想システム１１によれば、仮想ＣＰＵ利用統計算出手段５が、仮想計算機１０でのカーネル状態の実行時間の累積値tsysと、入出力待ち状態の実行時間の累積値ｔioを算出する。また、物理ＣＰＵ利用統計算出手段４が、仮想システム１１に含まれる物理ＣＰＵでのカーネル状態の実行時間の累積値Ｔsysと、入出力待ち
状態の実行時間の累積値Ｔioを算出する。そして、タイマ変調手段６が、ゲストＯＳ１０Ｂによるタイマ割り込みの設定をインターセプトし、式１、式２にしたがって、タイマ間隔を変更し、実際の物理ＣＰＵに対して、タイマ割り込みを設定する。さらに、タイマ変調手段６は、タイマハンドラとして、図１６のゲストタイマ起床ハンドラを設定する。
【０１３３】
したがって、カーネル状態と入出力待ちの状態とのときにタイマ間隔が式１あるいは式２にしたがって変更され、変更されたタイマ間隔でゲストＯＳ１０Ｂに仮想タイマ割り込みが発生する。すなわち、図５のＣ２欄とＣ３欄に示したように、ゲストＯＳ１０Ｂにおける１回の入出力処理において、カーネル状態、入出力待ちの状態での総計としてのタイマ割り込み発生回数が維持される。そして、総計としてのタイマ割り込み発生回数が維持された状態で、ゲストＯＳ１０Ｂでの仮想ＣＰＵによるカーネル状態と入出力待ち状態とにおけるタイマ発生回数との比率が調整される。すなわち、ゲストＯＳ１０Ｂでの仮想ＣＰＵによるカーネル状態と入出力待ち状態とにおけるタイマ発生回数との比率が、物理ＣＰＵでプロセスのカーネル状態と入出力待ち状態とにおけるタイマ発生回数との比率に一致するように、タイマ間隔が変更される。
【０１３４】
したがって、仮想ＯＳにおいて、入出力処理実行時のカーネル実行時間および入出力待ち実行時間に関する統計情報が、実際の物理計算機で測定された場合と類似した条件での統計情報に近づく。すなわち、図５に示したように、ゲストＯＳ１０Ｂが仮想計算機モニタ１を通じて入出力装置にデータを入出力するときに、ゲストＯＳ１０Ｂが認識する入出力待ち時間と入出力待ち時間以外の処理時間との割合は、仮想計算機モニタ１が認識する入出力待ち時間と入出力待ち時間以外の処理時間との割合に近づく。
【０１３５】
ところで、実施例１では１つの仮想ＣＰＵを使う場合について述べたきた。複数の仮想
ＣＰＵを使う場合にも、実施例１はそのまま適用することができる。その理由は、user時間とidle時間は変調する必要がなく、sys時間とiowait時間のみを変調するためである。user時間はそもそも変調を加える必要がなく、idle時間は仮想ＣＰＵ利用統計のなかで、
関心のないその他の値であるから、sys時間とiowait時間の変調だけで十分である。ただ
し、実施例１で示したように、仮想計算機モニタ１が物理システム全体に対して物理ＣＰＵ利用統計情報を算出する場合は、すべての仮想計算機の仮想ＣＰＵ利用統計情報におけるsys, iowait時間の割合が同じになるように変調するような、一次近似的な方法となっ
ている。
【０１３６】
また、実施例１で例示した累積値ｔio, ｔsysは、ゲストＯＳ１０Ｂが実際に観測するiowait時間とsys時間を、仮想計算機モニタ１が新たに設けた完了待ちＩ／Ｏ数手がかりとして推定した値であって、推定のやり方には他のやり方がある。
【０１３７】
以下では、iowait時間およびsys時間の近似の精度を高めたり、ゲストＯＳ１０Ｂのiowait時間とsys時間を推定するほかのやり方を複数示す。
【０１３８】
＜変形例１＞
精度よくタイマ変調を実施するポリシとしては、仮想ＣＰＵ別に物理ＣＰＵ利用統計情報を算出するようにしてもよい。すなわち、仮想計算機モニタ１は、個々の仮想ＣＰＵを識別して管理しているので、仮想計算機モニタ１から物理ＣＰＵ利用統計情報算出手段４に、利用統計情報を算出する対象の仮想ＣＰＵを識別する情報を引き渡し、個々の仮想ＣＰＵに対して、物理ＣＰＵ利用統計情報を算出すればよい。そのために、ＴsysおよびＴioを、個々の仮想ＣＰＵを識別する情報で区別した異なるエントリだけ用意して、Tsysお
よびＴioを累積する。そして、図１４に示したタイマ変調手段６は、変調対象の仮想ＣＰＵを識別する情報を基に、該当する仮想ＣＰＵの統計情報であるＴsys,Ｔioを参照し、式１および式２にしたがって、μsysおよびμioを算出する。
【０１３９】
仮想ＣＰＵ別に物理ＣＰＵ利用統計情報を算出する方式は、物理ＣＰＵごとに種別の異なる負荷が与えられた場合に適している。例えば、あるゲストＯＳはディスクアクセスを頻繁に行い、ほかのゲストＯＳはネットワークアクセスを頻繁に行う際、それぞれのゲストＯＳがいつも決まった物理ＣＰＵを使う場合などである。
【０１４０】
また、仮想計算機モニタ１は、個々の物理デバイスを識別して管理しているので、仮想計算機モニタ１から物理ＣＰＵ利用統計情報算出手段４に、利用統計情報を算出する対象の物理デバイスを識別する情報を引き渡し、個々の物理デバイスに対して、物理ＣＰＵ利用統計情報を算出すればよい。そのため、ＴsysおよびＴioを、個々の物理デバイスを識
別する情報で区別した異なるエントリだけ用意して、ＴsysおよびＴioを累積すればよい
。そして、図１４に示したタイマ変調手段６は、現在実行中の入出力処理の対象である物理デバイスを識別する情報を基に、該当する統計情報であるＴsys,Ｔioを参照し、式１および式２にしたがって、μsysおよびμioを算出すればよい。
【０１４１】
個々の物理デバイスごとに、Ｔsys,Ｔioを算出する処理は、特性の異なる物理デバイスを複数扱う場合に適している。例えば、USBデバイス、SANディスク、IDEディスクなどで
ある。
【０１４２】
＜変形例２＞
図１７に、仮想ＣＰＵ状態決定手段３がない仮想計算機の構成を例示する。なお、図１７のうち、図６と同一の構成要素については、同一の符号を付してその説明を省略する。
【０１４３】
図１７の構成では、ゲストＯＳ１０Ｂが、仮想ＣＰＵ管理データ７の中に、仮想ＣＰＵ
利用統計算出手段５がuser, sys, idle, iowaitのいずれに対して計上すべきかを、明示
的に記入する。すなわち、ゲストＯＳ１０Ｂは、システムコール等の特権命令の発行を促す処理が実行される前は、プロセスがユーザ状態であることを、共有メモリ上の状態フラグなどに明示する。また、ゲストＯＳ１０Ｂは、システムコール等の特権命令の発行を促す処理が実行された後、特権命令が完了するまでは、プロセスがカーネル状態であることを、共有メモリ上の状態フラグに明示する。また、ゲストＯＳ１０Ｂは、Ｉ／Ｏ要求を実行した後、Ｉ／Ｏ処理が完了するまでは入出力待ち状態であることを、共有メモリ上の状態フラグに明示する。一方、仮想ＣＰＵ利用統計算出手段５は、入出力待ち時間であることが共有メモリのフラグに明示されていない場合には、経過時間をidle時間に累積する。以上のようなuser, sys, iowaitをゲストＯＳ１０Ｂが明示するためには、ゲストＯＳ１
０Ｂにわずかながら修正が必要となるものの、タイマ処理自体への変更は不要である。この場合は、仮想ＣＰＵ状態決定手段３を省略することができる。また、ゲストＯＳ１０Ｂが、ゲストＯＳ１０Ｂ自身が認識したuser, sys, iowaitを仮想ＣＰＵ利用統計算出手段
５に指示するので、高い精度で、user時間、sys時間、およびiowait時間を集計し、蓄積
できる。
【０１４４】
なお、さらに、単純には、ゲストＯＳ１０Ｂがuser時間、sys時間、およびiowait時間
を集計し、蓄積するようにしてもよい。そして、ゲストＯＳ１０Ｂが集計し、蓄積したuser時間、sys時間、およびiowait時間を仮想計算機モニタ１が読み取るようにしてもよい
。仮想ＣＰＵ利用統計算出手段５は、ゲストＯＳ１０Ｂが認識したuser時間、sys時間、
およびiowait時間を、ゲストＯＳ１０Ｂから受け取ることで、さらに正確に、統計情報を取得できる。したがって、式１、および式２に示したｔsysおよびｔioを正確に取得でき
る。
【０１４５】
また、Ｉ／Ｏ時間の変調率ｔio／Ｔio, カーネル時間の変調率ｔsys／Ｔsysを、事前に、実験的、経験的に求めた値を用いるようにしてもよい。具体的には、仮想システム１１上のゲストＯＳ１０Ｂと、物理システム３００上の物理ＯＳのそれぞれにおいて、同じ業務システムを稼動させ、このときのＩ／Ｏ時間およびカーネル時間をそれぞれｔioとｔsysおよびＴioとＴsysとして測定する。これらの値を用いて算出したＩ／Ｏ時間の変調率とカーネル時間の変調率を用いて、式（１）および式（２）を算出する。
【０１４６】
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【０１４７】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ（リードオンリーメモリ）等がある。
【符号の説明】
【０１４８】
１、３０１   仮想計算機モニタ
２  仮想ＣＰＵスケジューラ
３  仮想ＣＰＵ状態決定手段
４  物理ＣＰＵ利用統計算出手段
５  仮想ＣＰＵ利用統計算出手段
６  タイマ変調手段
８  タイマ処理設定手段
１０  仮想計算機
１０Ｂ、３１０Ｂ  ゲストＯＳ
３００  計算機システム
３０１  仮想計算機モニタ
３０２  物理ディスク
３０４  バックエンドドライバ
３０５  タイマ機構
３０６  スケジューラ
３１０Ａ  フロントエンドドライバ
３１０Ｃ  アプリケーションプログラム
【図１】
0005434616.tif 000002
【図２】
0005434616.tif 000003
【図３】
0005434616.tif 000004
【図４Ａ】
0005434616.tif 000005
【図４Ｂ】
0005434616.tif 000006
【図４Ｃ】
0005434616.tif 000007
【図５】
0005434616.tif 000008
【図６】
0005434616.tif 000009
【図７】
0005434616.tif 000010
【図８】
0005434616.tif 000011
【図９】
0005434616.tif 000012
【図１０】
0005434616.tif 000013
【図１１】
0005434616.tif 000014
【図１２】
0005434616.tif 000015
【図１３】
0005434616.tif 000016
【図１４】
0005434616.tif 000017
【図１５】
0005434616.tif 000018
【図１６】
0005434616.tif 000019
【図１７】
0005434616.tif 000020