(57)【要約】【課題】ＣＰＵを含むハードウェア及びハイパーバイザを変更することなく、性能モニタリング機構を備えた既製のマイクロプロセッサを用いた仮想計算機システムにおいて、仮想マシン上で実行されるプログラムの高精度な動作情報を効率よく採取する。【解決手段】性能モニタリング機構に性能モニタリングカウンタを備えたＣＰＵを有する物理マシン上で動作する仮想計算機の性能を測定する性能測定機能を備えた情報処理装置であって、計数すべきイベントを前記性能モニタリングカウンタに設定すると共に、割込みハンドラを前記仮想計算機に設定する手段と、仮想計算機の切替え時に起こるイベントを前記性能モニタリング機構で検出して前記仮想計算機に割込みが発生すると、前記割込ハンドラが前記性能モニタリングカウンタの値と時刻情報とを読み出して、それぞれ所定の記憶領域内に格納する手段と、を備える。【選択図】図３
2010152458.tif 000002
【特許請求の範囲】
【請求項１】
性能モニタリング機構に性能モニタリングカウンタを備えたＣＰＵを有する物理マシン上で動作する仮想計算機に、
計数すべきイベントを前記性能モニタリングカウンタに設定すると共に、割込みハンドラを前記仮想計算機に設定する手順、
仮想計算機の切替え時に起こるイベントを前記性能モニタリング機構で検出して前記仮想計算機に割込みが発生すると、前記割込ハンドラが前記性能モニタリングカウンタの値と時刻情報とを読み出して、それぞれ所定の記憶領域内に格納する手順、
を実行させるための性能測定プログラム。
【請求項２】
前記物理マシンは、割込テーブルを有するハイパーバイザを更に有し、
前記仮想計算機に、
前記ハイパーバイザの前記割込テーブルに前記割込ハンドラへのリンクを設定する手順を、更に実行させるための請求項１記載の性能測定プログラム。
【請求項３】
前記仮想計算機に、
計数すべきイベントとしてＴＬＢエントリの無効化を前記性能モニタリングカウンタに設定する手順、
ＴＬＢエントリの無効化が１回発生する毎に前記性能モニタリングカウンタ割込がハイパーバイザに割り込むことにより、前記割込ハンドラを起動される手順を、更に実行させるための請求項１または２に記載の性能測定プログラム。
【請求項４】
性能モニタリング機構に性能モニタリングカウンタを備えたＣＰＵを有する物理マシン上で動作する仮想計算機の性能を測定する性能測定方法であって、
計数すべきイベントを前記性能モニタリングカウンタに設定すると共に、割込みハンドラを前記仮想計算機に設定する過程と、
仮想計算機の切替え時に起こるイベントを前記性能モニタリング機構で検出して前記仮想計算機に割込みが発生すると、前記割込ハンドラが前記性能モニタリングカウンタの値と時刻情報とを読み出して、それぞれ所定の記憶領域内に格納する過程と、
を備えたことを特徴とする性能測定方法。
【請求項５】
性能モニタリング機構に性能モニタリングカウンタを備えたＣＰＵを有する物理マシン上で動作する仮想計算機の性能を測定する性能測定機能を備えた情報処理装置であって、
計数すべきイベントを前記性能モニタリングカウンタに設定すると共に、割込みハンドラを前記仮想計算機に設定する手段と、
仮想計算機の切替え時に起こるイベントを前記性能モニタリング機構で検出して前記仮想計算機に割込みが発生すると、前記割込ハンドラが前記性能モニタリングカウンタの値と時刻情報とを読み出して、それぞれ所定の記憶領域内に格納する手段と、
を備えたことを特徴とする性能測定機能を備えた情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムの性能を測定する技術に関する。
【背景技術】
【０００２】
近年、ハードウェアの高性能化とハイパーバイザ(Hypervisor)の開発により、マイクロプロセッサを用いたパーソナルコンピュータやサーバの分野でも仮想計算機システムが広く用いられるようになってきた。仮想計算機システムは、単一の物理マシン上で複数の同一または異なるＯＳを同時に稼動させることにより、仮想的に異なる複数の計算機環境が提供されるシステムである。
【０００３】
図８は、仮想計算機システムの構成例を示すシステム構成図である。仮想計算機システム１０１は、ＣＰＵ１１１、メモリ１１２、Ｉ／Ｏデバイス１１３を備えるハードウェア層１１０と、ハードウェア層１１０の制御と各仮想マシン間の調整を行うハイパーバイザ層１２０と、ハイパーバイザ層１２０の上で動作する仮想マシン層１３０とを備えるのが一般的である。
【０００４】
仮想計算機システム１０１は、複数の仮想マシン１３１，１３２，１３３がハードウェア資源を共有するシステムである。ハイパーバイザ１２１は、複数の仮想マシン１３１，１３２，１３３のゲストＯＳを制御する仮想化ソフトウェアである。
【０００５】
仮想マシン層１３０を構成する各仮想マシン１３１，１３２，１３３は、それぞれゲストＯＳ１４１，１４２，１４３とアプリケーションを備える。各仮想マシンに対応するゲストＯＳは、同じＯＳに限らず、バージョンが異なる同種のＯＳであってもよいし、例えばLinux とWindows（登録商標）というように異なる種類のＯＳであってもよい。
【０００６】
またコンピュータシステムの性能分析、最適化のために、性能モニタリング機構を備えたＣＰＵが市販されている。例えば、 Intel社のXeon（登録商標）プロセッサや AMD社のOpteron（登録商標）プロセッサ、或いは IBM社のPowerPC（登録商標）プロセッサなどは、実行クロック数、実行命令数、キャッシュミス数などのプロセッサ内部のイベント及び外部とのやり取りのイベントを計測する機能を有する。
【０００７】
性能モニタリング機構を備えるＣＰＵは、複数本のカウンタと、多種のイベントの中からそれぞれのカウンタが計測するイベントを選択して設定する設定レジスタを有する。また、性能モニタリング機構を備えたＣＰＵは、指定したイベントを検知した際に、特定のベクタ或いは指定したベクタに割り込みを発生させる機能を有し、イベント発生時の付随情報を採取することを可能としている。
【０００８】
性能モニタリング機構を使用した一般的な性能分析手法は、モニタリングの対象となるプログラムの開始時と終了時にカウンタ値を読み出して、カウンタ値の差分により、対象プログラム実行中のイベント数を求める手法である。
【０００９】
次に図９を参照して、仮想計算機システムの仮想マシン毎に性能測定を行うことを考える。仮想計算機システムにおいて、仮想マシンに割り当てられた一定時間の実行権が終了したとき、或いは処理の中断／放棄により、今まで実行していた仮想マシンから別の実行可能状態にある仮想マシンへ実行権を移す切替制御をハイパーバイザが行っている。従って、仮想マシンＡにおける測定対象プログラムの実行開始と実行終了との間には、異なる仮想マシンＢの実行時間が含まれる。
【００１０】
このため、仮想マシンＡとして実行されたプログラムの開始時と終了時に性能モニタリングカウンタの値を読み出して、その差によりイベント数を求めたとしても、この値の中には、同一ＣＰＵで実行された他の仮想マシンＢによるイベント数が含まれている。これは、マイクロプロセッサが内蔵する性能モニタ機構が複数の仮想マシン間で共有されることと、ハイパーバイザが各仮想マシンの実行を切替える際の契機を仮想マシン側では認識する手段が無いことによる。
【００１１】
このような性能モニタ機構を備えたマイクロプロセッサを用いた仮想計算機システムにおいて、各仮想マシン毎の性能測定を行おうとすれば、ハイパーバイザを修正して、性能モニタリング機構の制御と性能情報収集機能を追加する必要がある。
【００１２】
しかしながら、VMware社のVMware InfrastructureやMicrosoft社のHyper-Vといった仮想化製品を使用する場合、ソースコードが提供されていないためにハイパーバイザに手を加えることは現実的に不可能である。
【００１３】
さらに、仮想計算機システムの性能測定に関する従来技術としては、ＣＰＵハードウェアに仮想計算機サポート用の機構を付加して性能情報を効率よく採取する技術が知られている。この技術によれば、性能指標を計数する複数のカウンタと、動作中の仮想マシンを識別する手段と、動作中の仮想マシンに対応したカウンタ毎に計数動作の可否を切り替える切り替え手段を備える。そして仮想計算機システムの動作中に、計数が許可されたカウンタのみが性能指標を計数し、許可されていないカウンタは計数結果を保持することができるので、仮想計算機毎の性能指標の計数値が得られる。
【非特許文献１】VMware Infrastructure（平成２０年７月３１日検索、ＵＲＬ１：http://www.vmware.com/jp/products/vi）
【非特許文献２】Hyper-V:Windows Server2008の主要機能（平成２０年７月３１日検索、ＵＲＬ２：http://www.microsoft.com/japan/windowsserver2008/virtualization/default.mspx）
【特許文献１】特開２００８−１２９９３１号公報
【特許文献２】特公平８−３３８５１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかしながら、特許文献１、２に記載の技術は、専用ハードウェアによりプロセッサ内部で仮想マシンの切替を検知して、複数のカウンタを切り替えている。そのために、既製のマイクロプロセッサを利用した仮想計算機システムにおいて、仮想マシン毎の性能モニタに適用できないという問題点があった。
【００１５】
以上の問題点に鑑み、本発明の目的は、ＣＰＵを含むハードウェア及びハイパーバイザを変更することなく、性能モニタリング機構を備えた既製のマイクロプロセッサを用いた仮想計算機システムにおいて、仮想マシン上で実行されるプログラムの高精度な動作情報を効率よく採取することができる技術を提供することである。
【課題を解決するための手段】
【００１６】
開示する技術は、性能モニタリング機構に性能モニタリングカウンタを備えたＣＰＵを有する物理マシン上で動作する仮想計算機の性能を測定する性能測定機能を備えた情報処理装置であって、計数すべきイベントを前記性能モニタリングカウンタに設定すると共に、割込みハンドラを前記仮想計算機に設定する手段と、仮想計算機の切替え時に起こるイベントを前記性能モニタリング機構で検出して前記仮想計算機に割込みが発生すると、前記割込ハンドラが前記性能モニタリングカウンタの値と時刻情報とを読み出して、それぞれ所定の記憶領域内に格納する手段と、を備える。
【発明の効果】
【００１７】
開示する技術によれば、仮想マシンの切替を検知する専用ハードウェアを用いることなく、性能モニタリングカウンタを備えた既製のマイクロプロセッサを用いた仮想計算機システムにおいて、仮想マシン上で実行されるプログラムの高精度な動作情報を効率よく採取・分析することができる。
【発明を実施するための最良の形態】
【００１８】
次に図面を参照して、本発明の実施の形態を詳細に説明する。図１は、性能測定プログラムが動作する、本発明の実施形態に係る仮想計算機システムのシステム構成図である。
【００１９】
図１において、仮想計算機システム１は、ハードウェア層１１と、ハイパーバイザ層１２と、仮想マシン層１３とを備える。ハードウェア層１１は、性能モニタリング機構１１１ａを備えたＣＰＵ１１１と、メモリ１１２と、Ｉ／Ｏデバイス１１３とを備える。
【００２０】
ＣＰＵ１１１は、市販のマイクロプロセッサであり、例えば、 Intel社のXeon（登録商標）プロセッサや AMD社のOpteron（登録商標）プロセッサ、或いは IBM社のPowerPC（登録商標）プロセッサなどの性能モニタリング機構１１１ａを内蔵するプロセッサである。
【００２１】
性能モニタリング機構１１１ａは、指定されたイベントを計数するカウンタと、該カウンタ毎に配置され多種のイベントの中から該カウンタが計測するイベントを選択して設定する設定レジスタとの対を複数有する。さらに設定レジスタには、設定されたイベントが何回発生したら割込を発生させるかを指定する割込頻度設定部と、この割込を発生させる（オン）か発生させないか（オフ）を指定する割込オン／オフ設定部が設けられている。
【００２２】
これにより、性能モニタリング機構１１１ａを備えたＣＰＵ１１１は、指定したイベントを検知した際に、特定のベクタ或いは指定したベクタに割り込みを発生させる機能を実現し、イベント発生時の付随情報を採取することを可能としている。
【００２３】
ハイパーバイザ層１２は、仮想化ソフトウェアであるハイパーバイザ１２１を備える。ハイパーバイザ１２１は、ハードウエア層１１上で動作してハードウェア層１１を制御するとともに、仮想マシン層１３の各ゲストＯＳ３１〜３３を制御する仮想化ソフトウェアである。ハイパーバイザ１２１は、ハードウェア層のＣＰＵ１１１の実行権を後述する各仮想マシンに割り当てるスケジューリング機能、及びメモリ１１２のマシンアドレス空間を各仮想マシンに割り当てるメモリ管理機能を有する。
【００２４】
さらにハイパーバイザ１２１は、性能モニタリング機構１１１ａが発生するハードウェア割り込みである性能モニタリング機構割り込みに基づいて、後述する実行中の仮想マシンに対してソフトウェア割り込みである性能モニタリング割り込みを行う機能を有する。
【００２５】
仮想マシン層１３は、仮想マシン２１，２２，２３を備える。仮想マシンの数は、ハードウエア層１１の能力と、場合によってはハイパーバイザ層２１に依存し、図１の様に３つに限定されることはない。
【００２６】
仮想マシン２１，２２，２３は、それぞれ対応するゲストＯＳ３１，３２，３３を備える。そして、ハイパーバイザ１２１は、ゲストＯＳ３１，３２，３３のうちからいずれか一つを選択して、選択したゲストＯＳに所定時間分のＣＰＵ１１１の実行権を割り当てる。ここで、選択されたゲストＯＳをゲストＯＳ３２とすると、ＣＰＵ１１１の実行権を割り当てられたゲストＯＳ３２は、ハイパーバイザ１２１から割り当てられたメモリ１１２を使用して、ゲストＯＳ３２自身及びその配下の図示しないアプリケーションを実行する。ゲストＯＳ３２に実行権が割り当てられた所定時間が経過するか、或いは、入出力待ち、例外発生等により実行継続が不可能となった場合、ハイパーバイザ１２１は、ゲストＯＳ３２からＣＰＵ１１１の実行権を取り上げ、別のゲストＯＳを選択して、これにＣＰＵ１１１の実行権を割り当てることにより、仮想マシンの切り替えを行う。
【００２７】
また、ゲストＯＳ３１，３２，３３は、性能モニタリング機構１１１ａからハイパーバイザ１２１を介したソフトウェア割り込みである性能モニタリング割込みを処理する割込ハンドラ３１ａ，３２ａ，３３ａをそれぞれ備える。
【００２８】
これらの割込ハンドラ３１ａ，３２ａ，３３ａの作用は、以下の通りである。まずＳ１０１において、実行中の仮想マシンに割り当てられた一定時間の実行権が終了したとき、或いは実行中の仮想マシンが処理の中断／放棄を行ったときに、ハイパーバイザ１２１が、仮想マシンの切替制御を行う。次いでＳ１０２で、性能モニタリング機構１１１ａが仮想マシン切替時に起きるイベントを検出して、ハイパーバイザ１２１にハードウェア割込である性能モニタリング機構割り込みを発生させる。次いでＳ１０３において、ハイパーバイザ１２１が切り替え対象の仮想マシン２１のゲストＯＳ３１の割込ハンドラ３１ａへソフトウェア割り込みである性能モニタリング割り込みを起こすことにより、ゲストＯＳ３１が仮想マシン切替を検知する。割り込みハンドラ３１ａは、性能モニタリング機構１１１ａに格納されている性能モニタリングカウンタ値を読み出してメモリ１１２へ記録するとともに、性能モニタリングカウンタ値を読み出した時点のクロックレベルの時刻情報も併せてメモリ１１２に記録する。
【００２９】
この性能モニタリング機構１１１ａによる割り込みと、各ゲストＯＳ３１、３２、３３が備える割り込みハンドラ３１ａ、３２ａ、３３ａにより、仮想マシン切替毎に、性能モニタリングカウンタ値と、その値を読み出した時刻情報とがメモリ１１２に記録される。
【００３０】
次に、図２の仮想マシン切替タームチャートを参照して、仮想マシン切替毎に読み出した性能モニタリングカウンタ値と、その値を読み出した時刻情報とをどのように利用するかを説明する。例えば仮想マシンＡ上で動作する性能データ採取プログラムが、あるイベントのイベント数を性能モニタリングカウンタ（以下、ＰＭＣ（Perfomance Monitoring Counter)と略す）で計数することを考える。ここで、仮想マシンＡと仮想マシンＢが、時分割で実行されるとする。
【００３１】
性能測定としては、仮想マシンＡ上で性能データ採取プログラムを実行し、この性能データ採取プログラムの実行開始から実行終了までに発生するあるイベントの発生回数を求めるものとする。
【００３２】
性能データ採取プログラムの開始時刻ｔａにおけるＰＭＣのイベント計数値をＮａとする。次いで時刻ｔｂにおいて仮想マシンＡから仮想マシンＢへの切替が発生したとする。このとき、仮想マシン切替によりＰＭＣからハイパーバイザへ性能モニタリング機構割り込みが発生し、ハイパーバイザは、切り替えられる仮想マシンＢにソフトウェア割り込みである性能モニタリング割込みをかける。仮想マシンＢの割り込みハンドラは、時刻ｔｂのＰＭＣ値Ｎｂと時刻情報とをメモリへ記録する。
【００３３】
次いで時刻ｔｃにおいて仮想マシンＢから仮想マシンＡへの切替が発生したとする。このときも同様に仮想マシンＡに割込みが発生し、仮想マシンＡは、時刻ｔｃのＰＭＣ値Ｎｃと時刻情報とをメモリへ記録する。次いで時刻ｔｄにおいて仮想マシンＡから仮想マシンＢへの切替が発生し、このときのＰＭＣ値をＮｄとする。次いで時刻ｔｅにおいて仮想マシンＢから仮想マシンＡへの切替が発生したとする。このとき仮想マシンＡに割込みが発生し、仮想マシンＡは、このときのＰＭＣ値Ｎｅと時刻情報とをメモリへ記録する。最後に時刻ｔｆで性能データ採取プログラムを終了し、このときのＰＭＣ値をＮｆとする。
【００３４】
以上の性能データ採取プログラムの実行の結果、仮想マシンの切替毎に、ＰＭＣ値と、ＰＭＣ値を取得した時刻情報とがメモリへ記録される。従って、仮想マシンＡによる性能データ採取プログラム実行中のイベント発生回数は、Ｎｆ−Ｎａ−((Ｎｃ−Ｎｂ）＋（Ｎｅ−Ｎｄ))により、仮想マシンＢの影響を除去したイベント数の値を算出することができる。
【実施例】
【００３５】
次に、図３乃至図７を参照して、本発明に係る性能測定プログラムの実施例を備えた仮想計算機システムを詳細に説明する。図３は仮想計算機システム１の構成例を示すシステム図上に、性能測定の流れを示した図である。図４は性能モニタリングカウンタの設定例を説明する図である。図５は性能情報採取制御・集計プログラムのフローチャートである。図６は性能データ採取プログラムのフローチャートである。図７はゲストＯＳのＰＭＣ割込ハンドラのフローチャートである。
【００３６】
図３において、仮想計算機システム１は、ＣＰＵ１１１と、メモリ１１２と、ハイパーバイザ１２１と、仮想マシン２１，２２，…，２Ｎと、制御マシン４１とを備える。
【００３７】
ＣＰＵ１１１は、例えば、 Intel社のXeonプロセッサ、 AMD社のOpteronプロセッサ、或いは IBM社のPowerPCプロセッサ等の性能モニタリング機構１１１ａを内蔵する既製のマイクロプロセッサであり、特許文献１、２のような仮想マシンの性能モニタリングのための特別なハードウェアを備えないものである。
【００３８】
性能モニタリング機構１１１ａは、複数の性能モニタリングカウンタ（ＰＭＣ）を備えると共に、計測対象のイベント検知時に、ＰＭＣからＰＭＣ割込を発生させることができるものである。
【００３９】
ハイパーバイザ１２１は、ＣＰＵ１１１やメモリ１１２などのハードウェアの制御と、各仮想マシン間の調整とを行う制御ソフトウェアである。ハイパーバイザ１２１には、ＰＭＣ割込を含むハードウェアからの割込を受け付けて、割込ハンドラに処理を引き渡すための割込テーブル１２１ａが備えられている。割込テーブル１２１ａは、割り込みを識別するベクタと呼ばれる番号毎に、例えば、ハンドラを格納しているセグメントのセグメントアドレス、及びハンドラの最初の命令へのオフセット（セグメント内アドレス）をそれぞれエントリとして保持している。
【００４０】
また、ハイパーバイザ１２１は、VMware社のVMware Infrastructure(非特許文献１）やMicrosoft社のHyper-V（非特許文献２）といった仮想化製品であり、仮想マシンの性能モニタのための改変等は行っていないものである。従って、ソースコードが公開されていないハイパーバイザを用いることが可能である。
【００４１】
仮想マシン２１のゲストＯＳ３１は、本発明の一実施例に係る性能測定プログラムとして、割込ハンドラ３１ａと性能データ採取プログラム３１ｂとを備える。割込ハンドラ３１ａと性能データ採取プログラム３１ｂとは、各仮想マシン２１，２２，…,２Ｎに備えられる。割込ハンドラ３１ａは、ハイパーバイザ１２１の割込テーブル１２１ａに登録され、性能モニタリング機構１１１ａによる割込を処理する。言い換えれば、ＰＭＣ割り込みの割り込みベクタに対応した割込テーブル１２１ａのエントリには、動作中の仮想マシンの割り込みハンドラ３１ａのセグメントとオフセットが格納されている。
【００４２】
性能データ採取プログラム３１ｂは、性能モニタリング機構１１１ａからの割込みを処理する割込ハンドラ３１ａをハイパーバイザ１２１の割込テーブル１２１ａに登録する。また、いずれかの仮想マシンの性能データ採取プログラム３１ｂは、性能モニタリング機構１１１ａの各性能モニタリングカウンタに測定するイベントを設定し、各性能モニタリングカウンタから割込を発生させるか否か、及び幾つのカウント数で割込を発生させるかを設定する。
【００４３】
制御マシン４１は、性能情報採取制御・集計プログラム５１を備える。性能情報採取制御・集計プログラム５１は、性能データ採取プログラム３１ｂの計測準備を指示したり、性能データ採取プログラム３１ｂから計測値の読出し指示に従って、性能測定の計測値をメモリ１１２から読み出して集計する。図３において、制御マシン４１は、仮想マシン２１〜２Ｎとは独立したコンソールのようなマシンであってもよいし、制御マシン４１は、仮想マシン２１〜２Ｎの内の一つであってもよい。
【００４４】
次に、性能測定の流れを説明する。まずＳ１において、制御マシン４１の性能情報採取制御・集計プログラム５１は、仮想マシン２１上で動作する性能データ採取プログラム３１ｂへ計測準備の指示をする。
【００４５】
次いで、Ｓ２において、性能データ採取プログラム３１ｂは、性能情報採取制御・集計プログラム５１からの指示に基づき、ハイパーバイザ１２１の割込テーブル１２１ａに、割込ハンドラ３１ａのセグメントとオフセットを登録する。
【００４６】
次いでＳ３において、性能測定対象の仮想マシンの性能データ採取プログラム３１ｂは、各ＰＭＣにカウントすべきイベントを設定する。
【００４７】
図４は、性能モニタリングカウンタ（ＰＭＣ）の設定例を説明する図である。イベントを設定するＰＭＣのイベント設定領域には、性能モニタリングカウンタｎに示すように、計数を行なうべきイベント種別を設定する部分と、設定されたイベントにより割込みを行わせるか否かを指定する割込みｏｎ／ｏｆｆを設定する部分と、イベントが何回発生する毎に割込みを発生させるかを指定する割込み頻度を設定する部分とがある。
【００４８】
図４の例では、性能モニタリングカウンタ０に、測定するイベントとして「ＴＬＢフラッシュ」つまりＴＬＢエントリの無効化、割込みのｏｎ／ｏｆｆとして「割込みｏｎ」、割込み頻度として「１回毎」を設定している。これにより、仮想マシン切替毎に発生するＴＬＢ無効化処理により、仮想マシンに割り込むことができ、仮想マシンの割込ハンドラでＰＭＣ及び時刻情報を読み出すことができる。また、性能モニタリングカウンタ１には、測定するイベントとして「実行命令数」、割込みのｏｎ／ｏｆｆは「割込みｏｆｆ」に設定している。割込みｏｆｆに設定されたＰＭＣは、それが計数するイベントの発生により、割り込みを生じることはない。その他、計測したいイベントの数だけ、それぞれの性能モニタリングカウンタに、イベントの種別と割込みｏｆｆを設定する。
【００４９】
図３に戻ってＳ４において、性能データ採取プログラム３１ｂは、ＰＭＣにカウントを開始させる。次いでＳ５において、実行中の仮想マシンが実行権を与えられた一定時間を使い切ったり、実行中の仮想マシンが処理の中断または放棄を行ったことをハイパーバイザが検知すると、ハイパーバイザ１２１が仮想マシン切替を行う。仮想マシン切替時には、コンテキスト切替を伴うので、ＴＬＢエントリの無効化が行われる。このとき、性能モニタリングカウンタ０には、計測するイベントとしてＴＬＢフラッシュ、割込みｏｎ、１回毎の割込み、が設定されているので、Ｓ６に示すように、ＴＬＢエントリの無効化が行なわれることにより、性能モニタリング機構１１１ａからハイパーバイザ１２１へハードウェア割込が発生する。このハードウェア割込の割込ベクトルは、割込テーブル１２１のＰＭＣ割込エントリを指すように設定されているので、Ｓ７に示すように、ハイパーバイザ１２１によりゲストＯＳ３１の割込ハンドラ３１ａが起動されることになる。
【００５０】
ここで１２１から割り込まれるゲストＯＳは、仮想マシン切替により新たに実行権が与えられる仮想マシン２１〜２Ｎのいずれかに対応するゲストＯＳであり、ここでは仮にゲストＯＳ３１とする。
【００５１】
次いでＳ８において、ゲストＯＳ３１の割込ハンドラ３１ａが、ＣＰＵ１１１の性能モニタリング機構１１１ａから、Ｓ３で計数するイベントを設定したＰＭＣの値の読み出しを行う。次いでＳ９にて、割込ハンドラ３１ａがＳ８で読み出したＰＭＣ値をメモリ１１２へ格納する。このとき、Ｓ８におけるＰＭＣ値読み出し時の時刻情報、或いは、ＰＭＣ値のメモリへの書き込み時の時刻情報を同様にメモリ１１２へ格納する。
【００５２】
時刻情報は、ＣＰＵ１１１に設けられている時刻情報を計時する専用のタイムスタンプカウンタ（ＴＳＣ：Time Stamp Counter）や高精細度イベントタイマ（ＨＰＥＴ：High Precision Event Timer）から読み出しても良い。また、時刻情報は、ＰＭＣの一つに計測するイベントとしてクロックを設定することにより、ＰＭＣ読み出し時にカウントしたクロック数も含めて読み出すようにしてもよい。以下の説明では、ＴＳＣを読み出すことにより、時刻情報を取得するものとする。
【００５３】
Ｓ５からＳ９は、性能データ採取プログラム３１ｂの実行が終わるまでに、仮想マシン切替が生じれば、その都度繰り返される。
【００５４】
次いでＳ１０で、性能データ採取プログラム３１ｂが終了すると、性能データ採取プログラム３１ｂから性能情報採取制御・集計プログラム５１へ、各割込ハンドラがメモリ１１２に格納したＰＭＣ読み出し値及びＴＳＣ値の読み出し指示が行われる。次いで、Ｓ１１において、この読み出し指示により、性能情報採取制御・集計プログラム５１がメモリ１１２から仮想マシン切替毎に格納されたＰＭＣ値とＴＳＣ値とを読み出して、各仮想マシンが仮想マシン切替を割り込みにより認識した時刻を抽出する。
【００５５】
そして性能情報採取制御・集計プログラム５１は、計測対象のプログラムの計測開始から計測終了までの期間内にハイパーバイザ１２１による仮想マシンの切替があったか否かを判定する。仮想マシン切替があった場合には、性能情報採取制御・集計プログラム５１は、仮想マシン切替のシーケンスを認識し、図２で示したように、性能データ採取プログラム３１ｂを実行した仮想マシンにおけるイベント数を算出する。
【００５６】
次に図５を参照して、制御マシンで動作する性能情報採取制御・集計プログラム５１による処理を説明する。性能情報採取制御・集計プログラム５１に応じて実行される処理は、前処理と後処理からなる。前処理は、図５（ａ）に示すように、Ｓ２１で性能データ採取プログラム３１ｂへ計測開始を指定して終了する。これは、図３のＳ１に相当する。後処理は、図５（ｂ）に示すように、まずＳ２２で、各仮想マシンの割込ハンドラが採取しメモリへ格納したＰＭＣ値とＴＳＣ値とをＴＳＣ値の時系列に従って統合し、性能測定中に仮想マシン切り替えが行われたスケジューリングを識別する。次いでＳ２３で、カウントすべきイベント毎に、性能測定対象プログラムである性能データ採取プログラムが実行されていた時間に対応するＰＭＣカウント数を算出する。
【００５７】
これにより性能データ採取プログラムを仮想マシンで実行した場合の各イベント毎のカウント数を得ることができる。Ｓ２２とＳ２３とは、図３のＳ１１に相当する。
【００５８】
次に図６を参照して、各仮想マシン上で動作する性能データ採取プログラム３１ｂによる処理を説明する。性能データ採取プログラム３１ｂに基づく処理は、前処理と後処理からなる。前処理は、図６（ａ）に示すように、Ｓ３１でハイパーバイザ１２１の割込テーブル１２１ａに、ゲストＯＳの割込ハンドラ３１ａのセグメントとオフセットを登録する。
【００５９】
次いでＳ３２で、一つのＰＭＣが計数するイベントを設定する。この例では、図４に示した性能モニタリングカウンタ０に、ＰＭＣが計数するイベントとして、仮想マシン切替時に必ず発生するＴＬＢフラッシュを設定するものとする。このとき、イベントが設定されたＰＭＣからの割込が発生するように、ＰＭＣに割り込みｏｎを設定するとともに、割込頻度として「１」を設定し、イベントが１回発生する毎に割込みを発生させるように設定する。ここで、仮想マシン切替時に必ず発生するイベントとしては、ＴＬＢフラッシュに限らず、ハイパーバイザモードからゲストＯＳモードへの遷移命令等、仮想マシン切替時にハイパーバイザが１回だけ実行する命令の検出をイベントとして設定してもよい。さらに、仮想マシン制御テーブルの切替や、Ｉ／Ｏマッピングテーブルの切替などの仮想マシン切替時に発生する事象をイベントとして設定してもよい。次いでＳ３３で、他のＰＭＣに測定したいイベント、例えば、実行クロック数、実行命令数、Ｌ１，Ｌ２，Ｌ３の各レベルにおけるキャッシュミス数、分岐成功（分岐GO）数、分岐失敗（分岐NO GO ）数、分岐予測成功数、分岐予測失敗数等、メモリ読み込み数、メモリ書き込み数、等を設定する。そして、Ｓ３４でＰＭＣのカウントを開始させ、性能データ採取プログラム３１ｂの前処理を終了する。
【００６０】
性能データ採取プログラム３１ｂの後処理は、図６（ｂ）に示すように、Ｓ３５で、性能情報採取制御・集計プログラム５１に対して、計測値の読出し、集計処理を指示して終了する。
【００６１】
次に図７のフローチャートを参照して、割込ハンドラ３１ａを説明する。割込ハンドラ３１ａは、まずＳ４１でＰＭＣのカウント値を読み取り、読み取ったカウント値をメモリ１１２の所定の領域へ書き込む。この操作を、測定イベントを設定したＰＭＣの数だけ行う。次いで、Ｓ４２で、ＰＭＣ割込ハンドラ３１ａは、タイムスタンプカウンタ（ＴＳＣ）の値を読み取り、このカウント値をメモリ１１２の所定の領域へ書き込んで終了する。Ｓ４１とＳ４２とは順序を入れ替えてもよい。
【００６２】
以上説明したように本実施形態によれば、性能モニタリングカウンタを備えた既製のマイクロプロセッサを用いた仮想計算機システムにおいて、仮想マシン切替毎に、切り替えられる仮想マシンへ性能モニタリング割込を起こさせ、この割込を処理する仮想マシンの割込ハンドラがＰＭＣ値と時刻情報（ＴＳＣ値）とをメモリへ格納しているので、性能測定プログラム終了後に、メモリを読み出すことにより、仮想マシン切替のシーケンスを判別して、測定対象の仮想マシンにおけるプログラムの高精度な動作情報を効率よく採取・分析することができる性能測定プログラムを提供することができる。
【００６３】
また、本性能測定プログラムは、仮想マシン上のＯＳのデバイスドライバとして作成可能であり、従来ではハードウェアの改変もしくはハイパーバイザに手を加えなければ採取できなかった仮想マシンの切替え検知、ならびに各仮想マシンの性能情報を正確に採取できるようになる。
【００６４】
また、性能モニタリングカウンタ機能はＣＰＵが通常有している機能であり、仮想マシン切替え時に発生するイベント(例えばＴＬＢエントリ無効化イベント)もIntel社のXeon（登録商標）やAMD社のOpteron（登録商標）を始めとした多くのＣＰＵで計測可能である。このため、該当機能を有する多くのＣＰＵで、ハードウェアを一切付加・変更することなく実現可能であるため、適用範囲も広い。
【図面の簡単な説明】
【００６５】
【図１】本発明が適用される仮想計算機システムの構成例を示すシステム構成図である。
【図２】仮想マシンＡと仮想マシンＢが時分割で実行される場合の仮想マシンＡの性能計測値を説明する図である。
【図３】仮想計算機システム１の構成例を示すシステム図上に、実施例における性能測定の流れを示した図である。
【図４】性能モニタリングカウンタの設定例を説明する図である。
【図５】性能情報採取制御・集計プログラムの実施例を示すフローチャートである。
【図６】性能データ採取プログラムの実施例を示すフローチャートである。
【図７】ゲストＯＳの割込ハンドラの実施例を示すフローチャートである。
【図８】仮想計算機システムを説明する構成図である。
【図９】従来の仮想計算機システムにおける仮想マシンの性能測定上の問題点を説明する図である。
【符号の説明】
【００６６】
１  仮想計算機システム
２１，２２，…、２Ｎ  仮想マシン
３１  ゲストＯＳ
３１ａ  割込ハンドラ
３１ｂ  性能データ採取プログラム
４１  制御マシン
５１  性能情報採取制御・集計プログラム
１１１  ＣＰＵ
１１１ａ  性能モニタリング機構
１１２  メモリ
１２１  ハイパーバイザ
１２１ａ  割込テーブル
【図１】
2010152458.tif 000003
【図２】
2010152458.tif 000004
【図３】
2010152458.tif 000005
【図４】
2010152458.tif 000006
【図５】
2010152458.tif 000007
【図６】
2010152458.tif 000008
【図７】
2010152458.tif 000009
【図８】
2010152458.tif 000010
【図９】
2010152458.tif 000011