(57)【特許請求の範囲】
【請求項１】
所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンにおいてプログラムの実行が中断された期間の直前および直後に実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記直前および直後に実行中であるプログラムを識別するデータに対応付けて出力する、
制御部を有することを特徴とする情報処理装置。
【請求項２】
取得した前記データは、さらに、前記仮想マシンを制御する制御プログラムによって前記仮想マシンが中断された期間を特定するデータを含み、
前記仮想マシンにおいてプログラムの実行が中断された期間は、前記仮想マシンが中断された期間である、ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
コンピュータが、
所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンにおいてプログラムの実行が中断された期間の直前および直後に実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記直前および直後に実行中であるプログラムを識別するデータに対応付けて出力する、
処理を実行することを特徴とする実行時間補正方法。
【請求項４】
コンピュータに、
所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンにおいてプログラムの実行が中断された期間の直前および直後に実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記直前および直後に実行中であるプログラムを識別するデータに対応付けて出力する、
処理を実行させることを特徴とする実行時間補正プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、実行時間補正方法、および実行時間補正プログラムに関する。
【背景技術】
【０００２】
ハイパーバイザによって複数の仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）に対するハードウェアリソースの割り当てを制御することにより、複数の仮想マシンを動作させる仮想計算機システムがある。仮想計算機システムでは、仮想マシンのゲストＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）上でアプリケーションプログラムを実行させる。
【０００３】
先行技術としては、例えば、実経過時間カウンタの値から、ＬｏｇｉｃａｌＰａｒｔｉｔｉｏｎにＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が割り当てられていない時間帯に、本来なら何回の測定タイミングが来たはずかを計算するものがある。また、例えば、ＯＳ上で任意のアプリケーションプログラムが実行されると、当該アプリケーションプログラムによって実行されたプロセスのＩＤと、任意のアプリケーションプログラムの中の測定対象となるプロセスのＩＤとを比較する技術がある。また、例えば、第１のゲストＯＳで走行する第１のプロセスに対し、第２のゲストＯＳで走行する第２のプロセスが使用している物理固有領域と仮想固有領域と重複しないアドレスを持つ物理固有領域と仮想固有領域をそれぞれ割り当てる技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２２５６５５号公報
【特許文献２】特開２０１０−００３０５７号公報
【特許文献３】特開２０１４−１３９７０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、ゲストＯＳにおいて実行される各種プログラムの実行時間を、プログラム単位で精度よく計測することが難しい場合がある。例えば、ゲストＯＳにおいて実行された各種プログラムが中断された期間をプログラム単位で特定することが難しく、中断された期間分の時間を除外して各種プログラムの実行時間を計測することができない場合がある。
【０００６】
１つの側面では、本発明は、仮想マシンにおいて実行されたプログラムの実行時間を精度よく計測することができる情報処理装置、実行時間補正方法、および実行時間補正プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する情報処理装置、実行時間補正方法、および実行時間補正プログラムが提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、仮想マシンにおいて実行されたプログラムの実行時間を精度よく計測することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施の形態にかかる実行時間補正方法の一実施例を示す説明図である。
【図２】図２は、情報処理装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、情報処理装置１００の機能的構成例を示すブロック図である。
【図４】図４は、情報処理装置１００がサンプリングデータ４００を取得する一例を示す説明図（その１）である。
【図５】図５は、情報処理装置１００がサンプリングデータ４００を取得する一例を示す説明図（その２）である。
【図６】図６は、サンプリングデータ４００の一例を示す説明図である。
【図７】図７は、情報処理装置１００がスティール時間を算出する第１例を示す説明図（その１）である。
【図８】図８は、情報処理装置１００がスティール時間を算出する第１例を示す説明図（その２）である。
【図９】図９は、第１算出処理手順の一例を示すフローチャートである。
【図１０】図１０は、情報処理装置１００がスティール時間を算出する第２例を示す説明図である。
【図１１】図１１は、第２算出処理手順の一例を示すフローチャートである。
【図１２】図１２は、情報処理装置１００がスティール時間を算出する第３例を示す説明図である。
【図１３】図１３は、第３算出処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、図面を参照して、本発明にかかる情報処理装置、実行時間補正方法、および実行時間補正プログラムの実施の形態を詳細に説明する。
【００１１】
（実施の形態にかかる実行時間補正方法の一実施例）
図１は、実施の形態にかかる実行時間補正方法の一実施例を示す説明図である。図１において、情報処理装置１００は、仮想マシンプログラムにおいて実行される各種プログラムの中断期間を、プログラム単位で特定するコンピュータである。以下の説明では、仮想マシンを「ＶＭ」と表記する場合がある。
【００１２】
ここで、従来、サーバ上のプログラムの利用者に、プログラムの利用時間に応じた料金を請求する従量制課金システムがある。また、従来、プログラムの実行時間を計測し、プログラムの性能解析を行うことがある。このように、プログラムの実行時間を、プログラム単位で計測することが求められることがある。
【００１３】
しかしながら、仮想計算機システムでは、仮想マシンプログラムにおいて実行されたプログラムの実行時間を、プログラム単位で精度よく計測することが難しい場合がある。仮想マシンプログラムとは、仮想マシンを動作させるプログラムである。仮想マシンプログラムは、例えば、ゲストＯＳで以下の説明では、仮想マシンプログラムを「ゲストＯＳ」と表記する場合がある。
【００１４】
例えば、ハイパーバイザ型の仮想計算機システムがある。ハイパーバイザ型の仮想計算機システムでは、ハイパーバイザが、ゲストＯＳのディスパッチ処理、ゲストＯＳが実行する特権命令やＩＯ処理や割り込み処理などのエミュレート、リソースのスケジューリング、ＶＭに対するリソースの割り当てなどを制御する。このとき、ハイパーバイザによって、ＶＭが一時停止（スティール）させられ、ゲストＯＳやゲストＯＳにおいて実行されるプログラムが中断させられる期間がある。以下の説明では、ＶＭ共々、ゲストＯＳやゲストＯＳにおいて実行されるプログラムが中断させられる期間を「スティール期間」と表記する場合がある。
【００１５】
これに対し、ゲストＯＳやゲストＯＳにおいて実行されるプログラムは、ハイパーバイザによって中断させられたことを認識することが困難である。このため、ゲストＯＳやゲストＯＳにおいて実行されるプログラムが実行時間を計測する場合には、スティール期間分の時間を除外したうえでプログラム単位で実行時間を計測することは困難である。以下の説明では、スティール期間分の時間を「スティール時間」と表記する場合がある。
【００１６】
また、ゲストＯＳ単位でスティール時間を計測する場合が考えられる。しかしながら、この場合であっても、計測されたゲストＯＳ単位のスティール時間を、ゲストＯＳにおいて実行されたプログラム単位のスティール時間に分けて把握することは困難である。このため、ゲストＯＳにおいて実行されたプログラムの実行時間を、プログラム単位でスティール時間を除外して計測することは困難である。
【００１７】
また、上述したハイパーバイザ型の仮想計算機システムのほか、ホストＯＳ上に仮想化ソフトウェアを動作させたホストＯＳ型の仮想計算機システムがある。ホストＯＳ型の仮想計算機システムでは、仮想化ソフトウェアが、ゲストＯＳのディスパッチ処理、ゲストＯＳが実行する特権命令やＩＯ処理や割り込み処理などのエミュレート、リソースのスケジューリング、ＶＭに対するリソースの割り当てなどを制御する。
【００１８】
このとき、ハイパーバイザ型の仮想計算機システムと同様に、ＶＭが一時停止（スティール）させられ、ＶＭ共々、ゲストＯＳやゲストＯＳにおいて実行されるプログラムが中断させられることがある。そして、ハイパーバイザ型の仮想計算機システムと同様に、スティール期間分の時間を除外したうえで、プログラム単位で実行時間を計測することは困難である。
【００１９】
結果として、従量制課金システムにおいて、スティール時間を含んだプログラムの実行時間に基づいて、スティール時間についてもプログラムの利用者に料金を請求してしまう可能性がある。このため、従量制課金システムにおいて、プログラムの利用者に請求される料金の正確性が悪くなり、プログラムの利用者に対する公平性を担保することができない可能性がある。
【００２０】
また、結果として、スティール時間を含んだプログラムの実行時間に基づいてプログラムの性能解析を行ってしまい、精度よくプログラムの性能解析を行うことができない可能性がある。例えば、ゲストＯＳにおいて実行されたプログラムの内容に起因してプログラムの性能が低下したのか、ハイパーバイザの制御に起因してプログラムの性能が低下したのかを判別することが困難である。このため、ＶＭにおいて問題が発生したときに、問題を解決するまでにかかる時間が長くなる可能性がある。
【００２１】
そこで、本実施の形態では、ゲストＯＳにおいて実行されたプログラムの実行時間を精度よく計測することができる実行時間補正方法について説明する。本実施の形態では、情報処理装置１００が、ハイパーバイザ型の仮想計算機システムにおいて動作する場合について説明するが、これに限らない。例えば、情報処理装置１００は、ホストＯＳ型の仮想計算機システムにおいても、同様に動作することができる。
【００２２】
図１の例では、情報処理装置１００は、サンプリングデータを取得する。サンプリングデータは、所定の時刻ごとに、当該時刻に仮想マシンプログラムにおいて実行中であるプログラムを示すデータである。
【００２３】
サンプリングデータは、例えば、１ｍｓごとにサンプリングされた、ゲストＯＳにおけるプログラムの実行状況を示すデータを含む。プログラムの実行状況を示すデータは、例えば、ゲストＯＳにおいて実行中であるプログラムを識別するデータである。また、プログラムの実行状況を示すデータは、ハイパーバイザがＶＭをスティールさせ、ＶＭ共々、ゲストＯＳやゲストＯＳにおけるプログラムが中断中であることを示すデータであってもよい。
【００２４】
情報処理装置１００がサンプリングデータを取得する一例については、図４〜図６を用いて後述する。また、サンプリングデータを取得する技術については、例えば、特開２０１４−１７０４８２号公報や米国特許公開第２０１４／０２５９０１１号公報や下記論文（Ｙａｍａｍｏｔｏ  ｅｔ  ａｌ．）に記載の技術などを参照することができる。
【００２５】
Ｙａｍａｍｏｔｏ  ｅｔ  ａｌ．  “Ｕｎｉｆｉｅｄ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｐｒｏｆｉｌｉｎｇ  ｏｆ  ａｎ  Ｅｎｔｉｒｅ  Ｖｉｒｔｕａｌｉｚｅｄ  Ｅｎｖｉｒｏｎｍｅｎｔ”，  ＣＡＮＤＡＲ，  ２０１４．
【００２６】
プログラムは、例えば、プロセス、プロセス内のスレッド、スレッド内の関数である。プロセスは、具体的には、ＯＳにおいて実行される単位のプログラムである。スレッドは、具体的には、１つのプロセスにおいて実行される単位のプログラムである。関数は、具体的には、スレッドにおいて実行される単位のプログラムである。
【００２７】
情報処理装置１００は、取得したサンプリングデータに基づいて、ゲストＯＳが中断された期間を特定する。ゲストＯＳが中断された期間は、上述したスティール期間である。また、情報処理装置１００は、ゲストＯＳが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムを特定する。そして、情報処理装置１００は、プログラムの開始から終了までの時間から、ゲストＯＳが中断された期間分の時間を減算した結果を示すデータを生成する。
【００２８】
情報処理装置１００は、例えば、ハイパーバイザがＶＭをスティールさせ、ＶＭ共々、ゲストＯＳやゲストＯＳにおけるプログラムが中断中であることを示すデータがサンプリングされた期間を、スティール期間として特定する。次に、情報処理装置１００は、特定したスティール期間分の時間を算出する。
【００２９】
また、情報処理装置１００は、特定したスティール期間の直前にゲストＯＳにおいて実行中であるプログラムＰＡを特定する。換言すれば、情報処理装置１００は、特定したスティール期間において中断された可能性があるプログラムＰＡを特定する。次に、情報処理装置１００は、特定したプログラムＰＡの開始から終了までの時間を算出する。
【００３０】
プログラムＰＡの開始から終了までの時間は、例えば、プログラムＰＡのＥｘｉｔイベントの情報などに基づいて算出可能である。また、プログラムＰＡの開始から終了までの時間は、例えば、ゲストＯＳやプログラムＰＡによって計測可能である。以下の説明では、プログラムの開始から終了までの時間を「プログラムの見かけ上の実行時間」と表記する場合がある。
【００３１】
そして、情報処理装置１００は、プログラムＰＡの見かけ上の実行時間から、特定したスティール期間分の時間を減算した結果を示すデータを生成する。情報処理装置１００は、生成したデータを、プログラムＰＡを識別するデータに対応付けて出力する。
【００３２】
これによれば、情報処理装置１００は、見かけ上の実行時間ではなく、スティール期間分のスティール時間を除外したプログラムの実行時間を算出することができ、プログラムの実行時間を計測する精度の向上を図ることができる。これにより、情報処理装置１００は、プログラムの実行時間に基づいて従量制課金システムを実現し、従量制課金システムにおけるプログラムの利用者に対する公平性を担保しやすくすることができる。
【００３３】
また、情報処理装置１００は、スティール時間を除外したプログラムの実行時間に基づいて、性能解析を精度よく行うことができる。また、情報処理装置１００は、ユーザに、スティール時間を除外したプログラムの実行時間を把握させることができ、プログラムの実行時間に基づいて性能解析を精度よく行うことができるようにする。
【００３４】
（情報処理装置１００のハードウェア構成例）
次に、図２を用いて、図１に示した情報処理装置１００のハードウェア構成例について説明する。
【００３５】
図２は、情報処理装置１００のハードウェア構成例を示すブロック図である。図２において、情報処理装置１００は、複数のＣＰＵ２０１と、メモリ２０２と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０３と、ディスクドライブ２０４と、ディスク２０５と、を有する。また、各構成部は、バス２００によってそれぞれ接続される。
【００３６】
ここで、ＣＰＵ２０１は、情報処理装置１００の全体の制御を司る。ＣＰＵ２０１は、仮想計算機システムを実現するハイパーバイザを実行する。ハイパーバイザは、ＯＳにおいてアプリケーションプログラムとして動作し、ゲストＯＳが動作できるようにする仮想化プログラムである。また、ＣＰＵ２０１は、コンテキスト退避領域（Ｃｏｎｔｅｘｔ  Ｓａｖｉｎｇ  Ａｒｅａ）と、コンテキスト退避領域を制御するためのコントロールレジスタとを有する。ＣＰＵ２０１は、実行するプロセスが切り替わる都度、当該プロセスを識別する情報によってコントロールレジスタを更新する。ＣＰＵ２０１は、ＶＭを切り替える場合に、コントロールレジスタの内容をコンテキスト退避領域に退避させる。
【００３７】
また、ＣＰＵ２０１は、ハードウェア関連のイベントのカウントを格納するパフォーマンスモニタカウンタを有する。パフォーマンスモニタカウンタは、一般的なシステム状況のチェック、およびパフォーマンス基準との比較判断に用いられる。パフォーマンスモニタカウンタの機能を用いることによって、情報処理装置１００における処理を１ｍｓ〜１μｓの間隔で計測することが可能になる。
【００３８】
メモリ２０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ２０１のワークエリアとして使用される。メモリ２０２に記憶されるプログラムは、ＣＰＵ２０１にロードされることで、コーディングされている処理をＣＰＵ２０１に実行させる。
【００３９】
Ｉ／Ｆ２０３は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータに接続される。そして、Ｉ／Ｆ２０３は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。Ｉ／Ｆ２０３には、例えば、モデムやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）アダプタなどを採用することができる。
【００４０】
ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがってディスク２０５に対するデータのリード／ライトを制御する。ディスクドライブ２０４は、例えば、磁気ディスクドライブである。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する不揮発メモリである。ディスク２０５は、例えば、磁気ディスク、光ディスクなどである。
【００４１】
情報処理装置１００は、上述した構成部のほか、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、半導体メモリ、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、情報処理装置１００は、ディスクドライブ２０４およびディスク２０５の代わりに、ＳＳＤおよび半導体メモリなどを有していてもよい。
【００４２】
（情報処理装置１００の機能的構成例）
次に、図３を用いて、情報処理装置１００の機能的構成例について説明する。
【００４３】
図３は、情報処理装置１００の機能的構成例を示すブロック図である。情報処理装置１００は、取得部３０１と、特定部３０２と、解析部３０３と、出力部３０４とを含む。取得部３０１〜出力部３０４は、制御部となる機能であり、例えば、図２に示したメモリ２０２、ディスク２０５などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０３により、その機能を実現する。各機能部の処理結果は、例えば、メモリ２０２、ディスク２０５などの記憶領域に記憶される。
【００４４】
取得部３０１は、サンプリングデータを取得する。サンプリングデータとは、所定の時刻ごとに、当該時刻に仮想マシンプログラムにおいて実行中であるプログラムを示すデータである。仮想マシンプログラムとは、仮想マシンを動作させるプログラムである。仮想マシンプログラムは、例えば、ゲストＯＳである。サンプリングデータは、さらに、仮想マシンを制御する制御プログラムによって仮想マシンが中断された期間を特定するデータを含む。仮想マシンを制御する制御プログラムとは、ハイパーバイザやホストＯＳである。
【００４５】
サンプリングデータは、例えば、１ｍｓごとにサンプリングされたゲストＯＳにおけるプログラムの実行状況を示すデータを含む。プログラムの実行状況を示すデータは、例えば、ゲストＯＳにおいて実行中であるプログラムを識別するデータである。また、プログラムの実行状況を示すデータは、ハイパーバイザがＶＭをスティールさせ、ＶＭ共々、ゲストＯＳやゲストＯＳにおけるプログラムが中断中であることを示すデータであってもよい。プログラムは、例えば、プロセス、プロセス内のスレッド、スレッド内の関数である。これにより、取得部３０１は、特定部３０２がプログラムのスティール期間を特定する際に用いられるサンプリングデータを、特定部３０２に出力することができる。
【００４６】
ここでは、取得部３０１が、情報処理装置１００におけるサンプリングデータ４００を取得する場合について説明したが、これに限らない。例えば、取得部３０１は、他のコンピュータにおけるサンプリングデータ４００を、他のコンピュータから受信してもよい。この場合、情報処理装置１００は、仮想計算機システムではなく、仮想計算機システムについての解析を行う解析装置であってもよい。
【００４７】
特定部３０２は、取得部３０１が取得したサンプリングデータに基づいて、仮想マシンプログラムが中断された期間を特定する。特定部３０２は、例えば、ゲストＯＳにおいて実行中であるプログラムを識別するデータがサンプリングされた時点の直後から、ゲストＯＳにおいて実行中であるプログラムを識別するデータがサンプリングされていない期間を特定する。これにより、特定部３０２は、ゲストＯＳにおいて実行されたプログラムが中断された期間を特定することができる。
【００４８】
また、特定部３０２は、仮想マシンプログラムが中断された期間として、例えば、仮想マシンが中断された期間を特定する。特定部３０２は、例えば、ゲストＯＳにおいて実行中であるプログラムを識別するデータがサンプリングされた時点の直後であって、ゲストＯＳやゲストＯＳにおけるプログラムが中断中であることを示すデータがサンプリングされた期間を特定する。これにより、特定部３０２は、ゲストＯＳにおいて実行されたプログラムが、ハイパーバイザがＶＭをスティールさせたことに応じてＶＭ共々中断された期間を特定することができる。
【００４９】
解析部３０３は、取得部３０１が取得したサンプリングデータに基づいて、特定部３０２が特定した仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムを特定する。そして、解析部３０３は、特定したプログラムの開始から終了までの時間から、特定部３０２が特定した仮想マシンプログラムが中断された期間分の時間を減算した結果を示すデータを生成する。プログラムの開始から終了までの時間から、特定部３０２が特定した期間分の時間を減算した結果は、例えば、プログラムの実行時間である。
【００５０】
解析部３０３は、例えば、サンプリングデータのうち特定部３０２が特定した期間におけるサンプルの数に、サンプリング間隔（Ｓａｍｐｌｉｎｇ  ｒａｔｅ）１ｍｓを乗算して、特定部３０２が特定した期間分の時間を算出する。また、解析部３０３は、プログラムのＥｘｉｔイベントの情報などに基づいて、プログラムの実行を開始してから終了するまでの時間を算出する。また、解析部３０３は、プログラムまたはゲストＯＳから、プログラムまたはゲストＯＳが計測したプログラムの実行を開始してから終了するまでの時間を取得してもよい。
【００５１】
そして、解析部３０３は、プログラムの実行を開始してから終了するまでの時間から、特定部３０２が特定した期間分の時間を減算して、プログラムの実行時間を示すデータを生成する。これにより、解析部３０３は、プログラムの見かけ上の実行時間からスティール時間を除外することができ、スティール時間を除外したプログラムの実行時間を算出することができ、プログラムの実行時間を計測する精度の向上を図ることができる。
【００５２】
解析部３０３は、取得部３０１が取得したサンプリングデータに基づいて、特定部３０２が特定した仮想マシンプログラムが中断された期間の直前、かつ、直後に実行中であるプログラムを特定してもよい。これにより、解析部３０３は、スティール期間の前後で同じプログラムが実行中である場合に、スティール期間分のスティール時間をプログラムの見かけ上の実行時間から減算することができる。
【００５３】
一方で、解析部３０３は、プログラムの切り替えが行われた間に存在するスティール期間分のスティール時間は、いずれのプログラムの実行時間にも影響しないとして、いずれのプログラムの見かけ上の実行時間からも減算しないようにすることができる。ここで、特定部３０２および解析部３０３の処理は、サンプリングデータを時系列に沿って走査しながら、平行して行われてもよい。
【００５４】
出力部３０４は、プログラムを識別するデータと、特定部３０２が特定した期間に関するデータとを対応付けて出力する。プログラムを識別するデータは、例えば、プロセスのＰＩＤである。出力部３０４は、例えば、プロセスのＰＩＤに対応付けて、解析部３０３によって生成されたプロセスの実行時間を示すデータを出力する。出力形式は、例えば、ディスプレイへの表示、プリンタへの印刷出力、Ｉ／Ｆ２０３による外部装置への送信、または、メモリ２０２やディスク２０５などの記憶領域への記憶などがある。
【００５５】
これにより、出力部３０４は、スティール時間を除外したプログラムの実行時間を出力して、従量制課金システムにおけるプログラムの利用者に対する公平性を担保しやすくすることができる。また、出力部３０４は、スティール時間を除外したプログラムの実行時間を出力して、プログラムの実行時間に基づいてプログラムの性能解析を精度よく行うことができる。
【００５６】
また、出力部３０４は、ユーザに、スティール時間を除外したプログラムの実行時間を通知して、プログラムの実行中にハイパーバイザがＶＭをスティールさせ、ＶＭ共々、プログラムが中断されたことを把握させることができる。結果として、ユーザは、スティール時間を除外したプログラムの実行時間に基づいて、プログラムの性能解析を精度よく行うことができる。
【００５７】
（情報処理装置１００の動作例１）
次に、図４〜図９を用いて、情報処理装置１００の動作例１について説明する。
【００５８】
〈情報処理装置１００がサンプリングデータ４００を取得する一例〉
まず、図４および図５を用いて、情報処理装置１００がサンプリングデータ４００を取得する一例について説明する。情報処理装置１００がサンプリングデータ４００を取得する技術については、例えば、特開２０１４−１７０４８２号公報や米国特許公開第２０１４／０２５９０１１号公報や上記論文（Ｙａｍａｍｏｔｏ  ｅｔ  ａｌ．）に記載の技術などを参照することができる。
【００５９】
図４および図５は、情報処理装置１００がサンプリングデータ４００を取得する一例を示す説明図である。図４では、ハイパーバイザ４０５は、パフォーマンスモニタカウンタ（ＰＭＣ：Ｐｅｒｆｏｒｍａｎｃｅ  Ｍｏｎｉｔｏｒ  Ｃｏｕｎｔｅｒ）からの定期的な割り込みを受け、コンテキスト退避領域４０３，４０４を参照してトレース情報を採取する。トレース情報は、ハイパーバイザ４０５の処理を時系列にしたがって配列した情報を含み、ハイパーバイザ４０５がＶＭ４０１，４０２に指令した処理についての情報を含む。
【００６０】
トレース情報は、例えば、割り込みを受けた際に実行中であったＶＭ４０１，４０２の処理を特定するＶＭ番号と、コンテキスト退避領域４０３，４０４から採取された実行アドレス値およびページテーブルアドレス値と、プロセスの実行時間とを含む。定期的な割り込みは、例えば、予め設定されたサンプリング間隔にしたがって行われる。定期的な割り込みは、具体的には、１ｍｓごとに行われる。これにより、情報処理装置１００は、ハイパーバイザ４０５の処理のうち、ＶＭ４０１，４０２が実行する処理を特定可能になる。
【００６１】
また、ＶＭ４０１，４０２は、ゲストＯＳにおいて実行されたプロセスのプロセスＩＤ、命令アドレス、プロセス名、および、関数名を含むシンボルマップ情報を取得し、ハイパーバイザ４０５に出力する。ハイパーバイザ４０５は、トレース情報と、ＶＭ４０１，４０２から出力されたシンボルマップ情報に基づいて、解析データを生成する。解析データは、定期的なサンプリング時点それぞれにＣＰＵ２０１において実行中であるプログラムを示すサンプルを、ＣＰＵ２０１単位で時系列に沿って並べたデータである。そして、ハイパーバイザ４０５は、解析データのうち、ゲストＯＳにおいて実行中であるプログラムを示すサンプルを、ゲストＯＳ単位で時系列に沿って並べたサンプリングデータ４００を取得する。
【００６２】
具体的には、ハイパーバイザ４０５は、ＶＭ４０１，４０２に情報採取の開始指示を送信する。ハイパーバイザ４０５は、パフォーマンスモニタカウンタからの割り込みに応じて、定期的に、トレース情報を採取する。さらに、ハイパーバイザ４０５は、ハイパーバイザ４０５内のプロセスのＥｘｉｔイベントが発生すれば、ハイパーバイザ４０５内のプロセスについてのシンボルマップ情報を生成する。Ｅｘｉｔイベントとは、例えば、プロセスの終了処理である。シンボルマップ情報は、プロセスを識別する情報と、プロセス内で実行される関数を識別する情報などを含む。
【００６３】
そして、ハイパーバイザ４０５は、サンプリングデータ４００の取得を終了する時点まで、上述したトレース情報やシンボルマップ情報の採取を繰り返す。また、ハイパーバイザ４０５は、サンプリングデータ４００の取得を終了する時点になると、ハイパーバイザ４０５において実行中のすべてのプロセスに関する情報を採取する。ハイパーバイザ４０５は、ハイパーバイザ４０５において実行中のすべてのプロセスについてのシンボルマップ情報を生成する。次に、ハイパーバイザ４０５は、ＶＭ４０１，４０２に情報採取の終了指示を送信する。そして、ハイパーバイザ４０５は、採取したトレース情報や生成したシンボルマップ情報を、メモリ２０２に記憶する。
【００６４】
一方で、ＶＭ４０１，４０２は、ハイパーバイザ４０５から出力された開始指示を受け付け、Ｅｘｉｔイベントが発生すれば、Ｅｘｉｔイベントの対象となったプログラムについてのシンボルマップ情報を生成する。そして、ＶＭ４０１，４０２は、ハイパーバイザ４０５から終了指示を受け付けると、ＶＭ４０１，４０２において実行中のすべてのプロセスについてのシンボルマップ情報を生成する。ＶＭ４０１，４０２は、生成したシンボルマップ情報を、ハイパーバイザ４０５に出力する。
【００６５】
ハイパーバイザ４０５は、メモリ２０２に記憶したトレース情報やシンボルマップ情報、および、ＶＭ４０１，４０２から出力されたシンボルマップ情報を取得する。ハイパーバイザ４０５は、取得したトレース情報やシンボルマップ情報に基づいて、ＣＰＵ２０１において実行中であるプログラムを、ＣＰＵ２０１単位で並べた解析データを生成する。ここで、図５の説明に移行し、情報処理装置１００が、解析データに基づいて、サンプリングデータ４００を取得する一例について説明する。
【００６６】
図５に示すように、解析データは、ＣＰＵ２０１において実行中であるプログラムを、ＣＰＵ２０１単位で時系列に沿って並べたデータである。図５の例では、解析データは、ＣＰＵ０における、ｔ１〜ｔ２でのＶＭ０の仮想ＣＰＵ（ｖＣＰＵ）０のサンプル群Ａ、ｔ２〜ｔ３でのＶＭ１の仮想ＣＰＵ０のサンプル群Ｂ、ｔ３〜ｔ４でのＶＭ１の仮想ＣＰＵ１のサンプル群Ｃを、順に含む。また、解析データは、ＣＰＵ１における、ｔ１〜ｔ２でのＶＭ１の仮想ＣＰＵ１のサンプル群Ｄ、ｔ２〜ｔ３でのＶＭ０の仮想ＣＰＵ０のサンプル群Ｅ、ｔ３〜ｔ４でのＶＭ１の仮想ＣＰＵ１のサンプル群Ｆを、順に含む。
【００６７】
情報処理装置１００は、解析データのうち、ゲストＯＳにおいて実行中であるプログラムを示すサンプルを、ゲストＯＳ単位で時系列に沿って並べたサンプリングデータ４００を取得する。情報処理装置１００は、例えば、解析データのサンプルを、ＶＭのうちゲストＯＳに割り当てられる仮想ＣＰＵ単位で時系列に沿って並べ替える。
【００６８】
情報処理装置１００は、具体的には、ＶＭ０のうち仮想ＣＰＵ０が割り当てられたゲストＯＳについて、ｔ１〜ｔ２でのＶＭ０の仮想ＣＰＵ０のサンプル群Ａ、ｔ２〜ｔ３でのＶＭ０の仮想ＣＰＵ０のサンプル群Ｅを順に並べる。また、情報処理装置１００は、ｔ３〜ｔ４で実行中であるプログラムがなく、ｔ３〜ｔ４が空白期間であることを特定する。
【００６９】
情報処理装置１００は、トレース情報に含まれるＶＭ−Ｅｘｉｔ情報を参照して、ｔ３〜ｔ４の空白期間がハイパーバイザ４０５の制御によるスティール期間であるか、ハイパーバイザ４０５の制御によらないホールト（Ｈａｌｔ）期間であるかを判定可能である。ＶＭ−Ｅｘｉｔ情報は、例えば、最後に発生したＶＭのｅｘｉｔイベントの情報である。
【００７０】
ここでは、情報処理装置１００は、ｔ３〜ｔ４の空白期間がハイパーバイザ４０５の制御によるスティール期間であると判定する。そして、情報処理装置１００は、サンプリングデータ４００に、ｔ３〜ｔ４の空白期間におけるサンプルとして、スティールさせられたことを示す情報を記憶する。同様に、情報処理装置１００は、解析データに基づいて、ＶＭ１の仮想ＣＰＵ０や仮想ＣＰＵ１についてもサンプリングデータ４００を取得する。
【００７１】
ここでは、情報処理装置１００が、空白期間がスティール期間であるかホールト期間であるかを判定する場合について説明したが、これに限らない。例えば、情報処理装置１００は、空白期間がスティール期間であるかホールト期間であるかを判定する処理を省略して、空白期間をスティール期間として扱ってもよい。これにより、情報処理装置１００は、処理量の低減化を図る。
【００７２】
このように、情報処理装置１００は、ゲストＯＳのプログラム内容を修正しなくても、サンプリングデータ４００を取得することができる。このため、情報処理装置１００は、全仮想化環境であっても、準仮想化環境であっても動作することができる。全仮想化環境とは、仮想化しない環境でも用いられる通常のＯＳのプログラム内容を修正せずに、ゲストＯＳとして用いる環境である。準仮想化環境とは、仮想化しない環境で用いられる通常のＯＳのプログラム内容を、仮想化環境に合わせて修正してからゲストＯＳとして用いる環境である。
【００７３】
これにより、情報処理装置１００は、ゲストＯＳがハイパーバイザ上で動作しているか否かをゲストＯＳが認識することが困難な場合であって、ゲストＯＳがハイパーバイザへの通信を開始することが困難な場合であっても、適用することができる。この場合であっても、情報処理装置１００は、サンプリングデータ４００を取得することができる。
【００７４】
〈サンプリングデータ４００の一例〉
次に、図６を用いて、図４および図５において取得されたサンプリングデータ４００の一例について説明する。
【００７５】
図６は、サンプリングデータ４００の一例を示す説明図である。サンプリングデータ４００は、１ｍｓごとにサンプリングが行われ、ＶＭにおいて実行中であるプログラムの識別情報、または、スティール時間を示す情報が集められたデータである。プログラムの識別情報は、例えば、プロセスＩＤと、スレッドＩＤと、関数名とを含む。以下の説明では、プロセスＩＤ、スレッドＩＤを「ＰＩＤ」、「ＴＩＤ」と表記する場合がある。
【００７６】
サンプリングデータ４００は、具体的には、ＶＭ名のフィールド６０１に対応付けて、ＰＩＤと、ＴＩＤと、関数名と、スティールフラグと、サンプリング時点とのフィールド６０２〜６０６を有する。サンプリングデータ４００は、ＶＭごとに各フィールド６０１〜６０６に情報が設定されることにより、サンプルｓ１〜ｓ２３をレコードとして記憶する。
【００７７】
ＶＭ名のフィールド６０１には、ＶＭを識別する情報が設定される。ＰＩＤのフィールド６０２には、サンプリング時点の仮想マシンプログラムにおいて実行中であるプロセスを識別する情報が設定される。ＴＩＤのフィールド６０３には、プロセス内のスレッドのうち、サンプリング時点の仮想マシンプログラムにおいて実行中であるスレッドを識別する情報が設定される。関数名のフィールド６０４には、スレッド内の関数のうち、サンプリング時点の仮想マシンプログラムにおいて実行中である関数を識別する情報が設定される。
【００７８】
ＰＩＤと、ＴＩＤと、関数名とのフィールド６０２〜６０４には、サンプリング時点の仮想マシンプログラムにおいて実行中であるプログラムがなく、ＶＭがスティールされている場合には、情報が設定されない。スティールフラグのフィールド６０５には、サンプリング時点の仮想マシンプログラムにおいて実行中であるプログラムがなく、ＶＭがスティールされている場合には、スティールされたことを示す情報が設定される。スティールフラグのフィールド６０５には、サンプリング時点のＶＭがスティールされていない場合には、情報が設定されない。
【００７９】
サンプリング時点のフィールド６０６には、サンプリングが行われた時点を示す情報が設定される。サンプリングが行われた時点を示す情報は、サンプリングが１ｍｓごとに行われる場合、サンプリングが行われる都度１ｍｓずつ増加する時点を示す情報である。また、サンプリングが行われた時点を示す情報は、サンプリングが行われる都度取得された時刻であってもよい。
【００８０】
（情報処理装置１００がスティール時間を算出する第１例）
次に、図７および図８を用いて、情報処理装置１００がスティール時間を算出する第１例について説明する。
【００８１】
図７および図８は、情報処理装置１００がスティール時間を算出する第１例を示す説明図である。図７（Ａ）は、プログラムＡの実行中にスティールされ、スティール期間の後にプログラムＡが再開された場合である。このため、図７（Ａ）では、プログラムＡを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、再びプログラムＡを識別する情報を含む複数のサンプルに続く。
【００８２】
図７（Ａ）の例では、情報処理装置１００は、サンプリングデータ４００を参照し、プログラムＡを識別する情報を含むサンプルの直後に、スティールされたことを示す情報を含むサンプルが連続する期間を、プログラムＡが中断された期間として特定する。以下の説明では、プログラムが中断された期間を「プログラムに属するスティール期間」と表記する場合がある。
【００８３】
これにより、情報処理装置１００は、プログラム単位で、プログラムに属するスティール期間を特定可能になる。換言すれば、情報処理装置１００は、プログラムに属するスティール期間分のスティール時間であって、プログラム実行時間から除外することが好ましいスティール時間を特定することができる。結果として、情報処理装置１００は、プログラムの実行時間を計測する精度の向上を図ることができる。
【００８４】
図７（Ｂ）は、プログラムＡの実行中にスティールされ、スティール期間の後にプログラムＡが再開された直後にプログラムＡが実行終了し、プログラムＢが実行開始された場合である。このため、図７（Ｂ）では、プログラムＡを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、プログラムＡを識別する情報を含むサンプルなしに、プログラムＢを識別する情報を含むサンプルが続く。
【００８５】
図７（Ｂ）の例では、情報処理装置１００は、サンプリングデータ４００を参照し、プログラムＡを識別する情報を含むサンプルの直後に、スティールされたことを示す情報を含むサンプルが連続する期間を、プログラムＡに属するスティール期間として特定する。
【００８６】
これにより、情報処理装置１００は、プログラム単位で、プログラムに属するスティール期間を特定可能になる。換言すれば、情報処理装置１００は、スティール期間分のスティール時間を、どのプログラムの実行時間から除外するかを特定可能になり、プログラムの実行時間を計測する精度の向上を図ることができる。
【００８７】
図７（Ｃ）は、プログラムＡの実行終了時にスティールされ、スティール期間の後にプログラムＢが実行開始された場合である。このため、図７（Ｃ）では、プログラムＡを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、プログラムＢを識別する情報を含むサンプルが続く。
【００８８】
図７（Ｃ）の例では、情報処理装置１００は、サンプリングデータ４００を参照し、プログラムＡを識別する情報を含むサンプルの直後に、スティールされたことを示す情報を含むサンプルが連続する期間を、プログラムＡに属するスティール期間として特定する。
【００８９】
これにより、情報処理装置１００は、プログラム単位で、プログラムに属するスティール期間を特定可能になる。換言すれば、情報処理装置１００は、スティール期間分のスティール時間を、どのプログラムの実行時間から除外するかを特定可能になり、プログラムの実行時間を計測する精度の向上を図ることができる。ここで、図８の説明に移行する。
【００９０】
図８に示すように、情報処理装置１００は、プログラムに属するスティール期間を特定すると、プログラムに属するスティール期間にサンプリングされたサンプルに、プログラムを識別する情報を付与して、サンプリングデータ４００を更新しておく。図８の例では、情報処理装置１００は、サンプルｓ３〜ｓ２２のＰＩＤと、ＴＩＤと、関数名とのフィールド６０２〜６０４に、ＰＩＤ「１００」と、ＴＩＤ「１０」と、関数名「Ｆ」とを設定する。これにより、情報処理装置１００は、プログラム単位でスティール期間を記憶することができる。
【００９１】
また、情報処理装置１００は、ゲストＯＳにおいて実行されたプログラムの実行時間を、プログラム単位で算出する。情報処理装置１００は、例えば、下記式（１）を用いて、関数Ｆの実行期間に含まれるスティール期間それぞれの時間Δｓｔｅａｌ＿ｔｉｍｅ（Ｆ）を算出する。ここで、Δｎｕｍｂｅｒ＿ｏｆ＿ｓａｍｐｌｉｎｇ（Ａ）は、関数Ｆのスティール期間におけるサンプル数である。ｓａｍｐｌｉｎｇ＿ｒａｔｅ＿ｔｉｍｅは、サンプリングの間隔である。サンプリングの間隔は、例えば、１ｍｓである。
【００９２】
【数１】
0006672808.tif 000002
【００９３】
次に、情報処理装置１００は、下記式（２）を用いて、関数Ｆの実行期間に含まれるスティール期間それぞれの時間Δｓｔｅａｌ＿ｔｉｍｅ（Ｆ）の総和ΣΔｓｔｅａｌ＿ｔｉｍｅ（Ｆ）を、関数Ｆのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｆ）として算出する。
【００９４】
【数２】
0006672808.tif 000003
【００９５】
同様に、情報処理装置１００は、下記式（３）を用いて、プロセスＰのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｐ）を算出する。ここで、Δｓｔｅａｌ＿ｔｉｍｅ（Ｐ）は、プロセスＰの実行期間に含まれるスティール期間それぞれの時間である。
【００９６】
【数３】
0006672808.tif 000004
【００９７】
また、情報処理装置１００は、下記式（４）を用いて、スレッドＴのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｔ）を算出する。ここで、Δｓｔｅａｌ＿ｔｉｍｅ（Ｔ）は、スレッドＴの実行期間に含まれるスティール期間それぞれの時間である。
【００９８】
【数４】
0006672808.tif 000005
【００９９】
これにより、情報処理装置１００は、ゲストＯＳにおいて実行されたプログラムの実行時間を、プログラム単位でスティール時間を除外して算出することができる。このため、情報処理装置１００は、プログラムの実行時間を精度よく計測することができる。
【０１００】
ここでは、サンプリング間隔が、一定であると見なした場合、例えば、１ｍｓであると見なした場合について説明したが、これに限らない。例えば、サンプリング間隔は、誤差によって一定にならない場合がある。そこで、情報処理装置１００は、サンプリングデータ４００に含まれるサンプリングが行われた時点を示す情報として、サンプリングが行われる都度取得された時刻を採用することにより、プログラムの実行時間の算出精度の向上を図ってもよい。
【０１０１】
情報処理装置１００は、例えば、サンプル間の時刻の差分をサンプリング間隔として算出する。情報処理装置１００は、スティール期間の最初のサンプルから最後のサンプルまでのサンプリング間隔を積算し、スティール期間の時間Δｓｔｅａｌ＿ｔｉｍｅを算出する。これにより、情報処理装置１００は、上記式（２）〜（４）を用いて、関数Ｆのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｆ）、プロセスＰのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｐ）、スレッドＴのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｔ）を算出する。
【０１０２】
また、情報処理装置１００は、サンプリング間隔を積算せず、スティール期間の最初のサンプルの時刻と最後のサンプルの時刻との差分を、スティール期間の時間Δｓｔｅａｌ＿ｔｉｍｅとして算出してもよい。ここで、情報処理装置１００は、サンプリングデータ４００全体を読み込んでからスティール時間を算出してもよいし、サンプリングデータ４００を時系列に沿って走査しながらスティール時間を算出してもよい。
【０１０３】
（第１算出処理手順）
次に、図９を用いて、第１算出処理手順の一例について説明する。
【０１０４】
図９は、第１算出処理手順の一例を示すフローチャートである。図９において、情報処理装置１００は、変数ｎ＝０を設定する（ステップＳ９０１）。次に、情報処理装置１００は、時系列に沿ってサンプリングデータ４００から１サンプルの読み込みを行う（ステップＳ９０２）。
【０１０５】
そして、情報処理装置１００は、読み込むサンプルがあるか否かを判定する（ステップＳ９０３）。ここで、読み込むサンプルがある場合（ステップＳ９０３：Ｙｅｓ）、情報処理装置１００は、読み込んだサンプルが、スティールであるか否かを判定する（ステップＳ９０４）。ここで、スティールではない場合（ステップＳ９０４：Ｎｏ）、情報処理装置１００は、読み込んだサンプルのＰＩＤ、ＴＩＤ、関数名を、直前プログラムの識別情報として記憶し（ステップＳ９０５）、ステップＳ９０２の処理に戻る。
【０１０６】
一方で、スティールである場合（ステップＳ９０４：Ｙｅｓ）、情報処理装置１００は、変数ｎ＝ｎ＋１を設定する（ステップＳ９０６）。次に、情報処理装置１００は、時系列に沿ってサンプリングデータ４００から１サンプルの読み込みを行う（ステップＳ９０７）。そして、情報処理装置１００は、読み込んだサンプルが、スティールであるか否かを判定する（ステップＳ９０８）。ここで、スティールである場合（ステップＳ９０８：Ｙｅｓ）、情報処理装置１００は、ステップＳ９０６の処理に戻る。
【０１０７】
一方で、スティールではない場合（ステップＳ９０８：Ｎｏ）、情報処理装置１００は、変数ｎと直前プログラムの識別情報とに基づいて、上記式（１）〜（４）などを用いて、プログラムのスティール時間をプログラム単位で積算する（ステップＳ９０９）。次に、情報処理装置１００は、変数ｎ＝０に設定する（ステップＳ９１０）。そして、情報処理装置１００は、ステップＳ９０２の処理に戻る。
【０１０８】
また、ステップＳ９０３において読み込むサンプルがない場合（ステップＳ９０３：Ｎｏ）、情報処理装置１００は、プログラム単位で積算したスティール時間に基づいてプログラム単位で実行時間を算出し（ステップＳ９１１）、第１算出処理を終了する。これにより、情報処理装置１００は、プログラム単位でスティール時間を除外した実行時間を算出し、プログラムの実行時間を計測する精度の向上を図ることができる。
【０１０９】
（情報処理装置１００の動作例２）
次に、図１０および図１１を用いて、情報処理装置１００の動作例２について説明する。
【０１１０】
〈情報処理装置１００がスティール時間を算出する第２例〉
まず、図１０を用いて、情報処理装置１００がスティール時間を算出する第２例について説明する。
【０１１１】
図１０は、情報処理装置１００がスティール時間を算出する第２例を示す説明図である。ここで、あるプログラムの実行終了時にスティールされ、スティール期間の後に別のプログラムが実行開始された場合、スティール期間はいずれのプログラムにも影響しない。換言すれば、当該スティール期間は、いずれのプログラムにも属さない。
【０１１２】
そこで、動作例２では、情報処理装置１００は、いずれのプログラムにも属さないスティール期間を判別し、いずれのプログラムにも属さないスティール期間分のスティール時間についてはいずれのプログラムの見かけ上の実行時間からも減算しないようにする。
【０１１３】
図１０（Ｄ）は、プログラムＡの実行中にスティールされ、スティール期間の後にプログラムＡが再開された場合である。このため、図１０（Ｄ）では、プログラムＡを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、再びプログラムＡを識別する情報を含む複数のサンプルに続く。
【０１１４】
図１０（Ｄ）の例では、情報処理装置１００は、サンプリングデータ４００を参照し、プログラムＡを識別する情報を含むサンプルに挟まれ、スティールされたことを示す情報を含むサンプルが連続する期間を特定する。そして、情報処理装置１００は、特定した期間を、プログラムＡに属するスティール期間とする。
【０１１５】
これにより、情報処理装置１００は、プログラム単位で、プログラムに属するスティール期間を特定可能になる。換言すれば、情報処理装置１００は、プログラムに属するスティール期間分のスティール時間であって、プログラム実行時間から除外することが好ましいスティール時間を特定することができる。結果として、情報処理装置１００は、プログラムの実行時間を計測する精度の向上を図ることができる。
【０１１６】
図１０（Ｅ）は、プログラムＡの実行中にスティールされ、スティール期間の後にプログラムＡが再開された直後にプログラムＡが実行終了し、プログラムＢが実行開始された場合である。このため、図１０（Ｅ）では、プログラムＡを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、プログラムＡを識別する情報を含むサンプルなしに、プログラムＢを識別する情報を含むサンプルが続く。
【０１１７】
図１０（Ｅ）の例では、情報処理装置１００は、サンプリングデータ４００を参照し、プログラムＡを識別する情報を含むサンプルと、プログラムＢを識別する情報を含むサンプルとを特定する。次に、情報処理装置１００は、プログラムＡを識別する情報を含むサンプルと、プログラムＢを識別する情報を含むサンプルとに挟まれた、スティールされたことを示す情報を含むサンプルが連続する期間を特定する。そして、情報処理装置１００は、特定した期間をいずれのプログラムにも属さないスティール期間とする。
【０１１８】
これにより、情報処理装置１００は、いずれのプログラムにも属さないスティール期間を特定可能になる。換言すれば、情報処理装置１００は、いずれのプログラムにも属さないスティール期間分のスティール時間であって、いずれのプログラム実行時間からも除外しなくてもよいスティール時間を特定することができる。結果として、情報処理装置１００は、プログラムの実行時間を計測する精度の向上を図ることができる。
【０１１９】
図１０（Ｆ）は、プログラムＡの実行終了時にスティールされ、スティール期間の後にプログラムＢが実行開始された場合である。このため、図１０（Ｆ）では、プログラムＡを識別する情報を含む複数のサンプルに続いて、スティールされたことを示す情報を含む複数のサンプルが続き、プログラムＢを識別する情報を含むサンプルが続く。
【０１２０】
図１０（Ｆ）の例では、情報処理装置１００は、サンプリングデータ４００を参照し、プログラムＡを識別する情報を含むサンプルと、プログラムＢを識別する情報を含むサンプルとを特定する。次に、情報処理装置１００は、プログラムＡを識別する情報を含むサンプルと、プログラムＢを識別する情報を含むサンプルとに挟まれた、スティールされたことを示す情報を含むサンプルが連続する期間を特定する。そして、情報処理装置１００は、特定した期間をいずれのプログラムにも属さないスティール期間とする。
【０１２１】
これにより、情報処理装置１００は、いずれのプログラムにも属さないスティール期間を特定可能になる。換言すれば、情報処理装置１００は、いずれのプログラムにも属さないスティール期間分のスティール時間であって、いずれのプログラム実行時間からも除外しなくてもよいスティール時間を特定することができる。結果として、情報処理装置１００は、プログラムの実行時間を計測する精度の向上を図ることができる。
【０１２２】
そして、情報処理装置１００は、動作例１と同様に、サンプリングデータ４００のサンプルにプログラムを識別する情報を付与して、サンプリングデータ４００を更新する。また、情報処理装置１００は、動作例１と同様に、ゲストＯＳにおいて実行されるプログラムの実行時間をプログラム単位で計測する。これにより、情報処理装置１００は、ゲストＯＳにおいて実行されるプログラムの実行時間をプログラム単位で精度よく計測することができる。
【０１２３】
（第２算出処理手順）
次に、図１１を用いて、第２算出処理手順の一例について説明する。
【０１２４】
図１１は、第２算出処理手順の一例を示すフローチャートである。図１１において、情報処理装置１００は、変数ｎ＝０を設定する（ステップＳ１１０１）。次に、情報処理装置１００は、時系列に沿ってサンプリングデータ４００から１サンプルの読み込みを行う（ステップＳ１１０２）。
【０１２５】
そして、情報処理装置１００は、読み込むサンプルがあるか否かを判定する（ステップＳ１１０３）。ここで、読み込むサンプルがある場合（ステップＳ１１０３：Ｙｅｓ）、情報処理装置１００は、読み込んだサンプルが、スティールであるか否かを判定する（ステップＳ１１０４）。ここで、スティールではない場合（ステップＳ１１０４：Ｎｏ）、情報処理装置１００は、読み込んだサンプルのＰＩＤ、ＴＩＤ、関数名を、直前プログラムの識別情報として記憶し（ステップＳ１１０５）、ステップＳ１１０２の処理に戻る。
【０１２６】
一方で、スティールである場合（ステップＳ１１０４：Ｙｅｓ）、情報処理装置１００は、変数ｎ＝ｎ＋１を設定する（ステップＳ１１０６）。次に、情報処理装置１００は、時系列に沿ってサンプリングデータ４００から１サンプルの読み込みを行う（ステップＳ１１０７）。そして、情報処理装置１００は、読み込んだサンプルが、スティールであるか否かを判定する（ステップＳ１１０８）。ここで、スティールである場合（ステップＳ１１０８：Ｙｅｓ）、情報処理装置１００は、ステップＳ１１０６の処理に戻る。
【０１２７】
一方で、スティールではない場合（ステップＳ１１０８：Ｎｏ）、情報処理装置１００は、読み込んだサンプルのＰＩＤ、ＴＩＤ、関数名が、直前プログラムの識別情報と一致するか否かを判定する（ステップＳ１１０９）。ここで、一致しない場合（ステップＳ１１０９：Ｎｏ）、情報処理装置１００は、ステップＳ１１１１の処理に移行する。
【０１２８】
一方で、一致する場合（ステップＳ１１０９：Ｙｅｓ）、情報処理装置１００は、変数ｎと直前プログラムの識別情報とに基づいて、上記式（１）〜（４）などを用いて、プログラムのスティール時間をプログラム単位で積算する（ステップＳ１１１０）。次に、情報処理装置１００は、変数ｎ＝０に設定する（ステップＳ１１１１）。そして、情報処理装置１００は、ステップＳ１１０２の処理に戻る。
【０１２９】
また、ステップＳ１１０３において読み込むサンプルがない場合（ステップＳ１１０３：Ｎｏ）、情報処理装置１００は、プログラム単位で積算したスティール時間に基づいてプログラム単位で実行時間を算出し（ステップＳ１１１２）、第２算出処理を終了する。これにより、情報処理装置１００は、プログラム単位でスティール時間を除外した実行時間を算出し、プログラムの実行時間を計測する精度の向上を図ることができる。
【０１３０】
（情報処理装置１００の動作例３）
次に、図１２および図１３を用いて、情報処理装置１００の動作例３について説明する。まず、情報処理装置１００は、動作例１や動作例２と同様に、プログラムに属するスティール期間を特定し、プログラムに属するスティール期間にサンプリングされたサンプルにプログラムを識別する情報を付与して、サンプリングデータ４００を更新する。
【０１３１】
〈情報処理装置１００がスティール時間を算出する第３例〉
次に、図１２を用いて、情報処理装置１００がスティール時間を算出する第３例について説明する。
【０１３２】
図１２は、情報処理装置１００がスティール時間を算出する第３例を示す説明図である。情報処理装置１００は、動作例１や動作例２とは異なり、プロファイル解析を行うことにより、スティール時間を算出してもよい。
【０１３３】
情報処理装置１００は、例えば、サンプリングデータ４００のうち「ＰＩＤ＝Ｐ、ＴＩＤ＝Ｔ、関数名＝Ｆ、［ｓｔｅａｌ］」が設定されたサンプルの割合を、％（ＰＩＤ＝Ｐ，ＴＩＤ＝Ｔ，関数名＝ｓｔｅａｌ（Ｆ））として計測する。そして、情報処理装置１００は、下記式（５）を用いて、関数Ｆのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｆ）を算出する。ここで、ｔｉｍｅ（Ｆ）は、関数Ｆの実行を開始してから終了するまでの時間である。
【０１３４】
【数５】
0006672808.tif 000006
【０１３５】
同様に、情報処理装置１００は、サンプリングデータ４００のうち「ＰＩＤ＝Ｐ、［ｓｔｅａｌ］」が設定されたサンプルの割合を、％（ＰＩＤ＝ｓｔｅａｌ（Ｐ））として計測する。そして、情報処理装置１００は、下記式（６）を用いて、プロセスＰのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｐ）を算出する。ここで、ｔｉｍｅ（Ｐ）は、プロセスＰの実行を開始してから終了するまでの時間である。
【０１３６】
【数６】
0006672808.tif 000007
【０１３７】
同様に、情報処理装置１００は、サンプリングデータ４００のうち「ＰＩＤ＝Ｐ、ＴＩＤ＝Ｔ、［ｓｔｅａｌ］」が設定されたサンプルの割合を、％（ＰＩＤ＝Ｐ，ＴＩＤ＝ｓｔｅａｌ（Ｔ））として計測する。そして、情報処理装置１００は、下記式（７）を用いて、スレッドＴのスティール時間ｓｔｅａｌ＿ｔｉｍｅ（Ｔ）を算出する。ここで、ｔｉｍｅ（Ｔ）は、スレッドＴの実行を開始してから終了するまでの時間である。
【０１３８】
【数７】
0006672808.tif 000008
【０１３９】
（第３算出処理手順）
次に、図１３を用いて、第３算出処理手順の一例について説明する。
【０１４０】
図１３は、第３算出処理手順の一例を示すフローチャートである。図１３において、情報処理装置１００は、時系列に沿ってサンプリングデータ４００から１サンプルの読み込みを行う（ステップＳ１３０１）。
【０１４１】
次に、情報処理装置１００は、読み込むサンプルがあるか否かを判定する（ステップＳ１３０２）。ここで、読み込むサンプルがある場合（ステップＳ１３０２：Ｙｅｓ）、情報処理装置１００は、読み込んだサンプルが、スティールであるか否かを判定する（ステップＳ１３０３）。ここで、スティールではない場合（ステップＳ１３０３：Ｎｏ）、情報処理装置１００は、ステップＳ１３０７の処理に移行する。
【０１４２】
一方で、スティールである場合（ステップＳ１３０３：Ｙｅｓ）、情報処理装置１００は、読み込んだサンプルのＰＩＤ、ＴＩＤ、関数名を、読み込んだサンプルに付与してサンプリングデータ４００を更新する（ステップＳ１３０４）。
【０１４３】
次に、情報処理装置１００は、時系列に沿ってサンプリングデータ４００から１サンプルの読み込みを行う（ステップＳ１３０５）。そして、情報処理装置１００は、読み込んだサンプルが、スティールであるか否かを判定する（ステップＳ１３０６）。ここで、スティールである場合（ステップＳ１３０６：Ｙｅｓ）、情報処理装置１００は、ステップＳ１３０４の処理に戻る。
【０１４４】
一方で、スティールではない場合（ステップＳ１３０６：Ｎｏ）、情報処理装置１００は、読み込んだサンプルのＰＩＤ、ＴＩＤ、関数名を、直前プログラムの識別情報として記憶し（ステップＳ１３０７）、ステップＳ１３０１の処理に戻る。
【０１４５】
また、ステップＳ１３０２において読み込むサンプルがない場合（ステップＳ１３０２：Ｎｏ）、情報処理装置１００は、第３算出処理を終了する。これにより、情報処理装置１００は、プロファイル解析を行って、サンプリングデータ４００のうち、スティール期間についてのサンプルの割合を、プログラム単位で算出することができ、プログラム単位でスティール時間を算出可能にすることができる。
【０１４６】
以上説明したように、情報処理装置１００によれば、所定の時刻ごとに、当該時刻に仮想マシンプログラムにおいて実行中であるプログラムを示すサンプリングデータ４００を取得することができる。次に、情報処理装置１００によれば、サンプリングデータ４００に基づいて、仮想マシンプログラムが中断された期間を特定することができる。また、情報処理装置１００によれば、サンプリングデータ４００に基づいて、仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムを特定することができる。
【０１４７】
そして、情報処理装置１００は、サンプリングデータ４００に基づいて、プログラムの開始から終了までの時間から、仮想マシンプログラムが中断された期間分の時間を減算した結果を示すデータを生成し、プログラムを識別するデータに対応付けて出力することができる。これにより、情報処理装置１００は、スティール時間を算出して、スティール時間を除外したプログラムの実行時間を算出することができ、プログラムの実行時間を計測する精度の向上を図ることができる。
【０１４８】
また、情報処理装置１００によれば、取得したサンプリングデータ４００に基づいて、仮想マシンプログラムが中断された期間の直前、かつ、直後に実行中であるプログラムの開始から終了までの時間から、期間分の時間を減算した結果を示すデータを生成することができる。そして、情報処理装置１００によれば、生成したデータを、プログラムを識別するデータに対応付けて出力することができる。これにより、情報処理装置１００は、プログラムの切り替えが行われる間にあるスティール期間については、プログラムの実行を開始してから終了するまでの時間から減算しないようにして、プログラムの実行時間を計測する精度の向上を図ることができる。
【０１４９】
また、情報処理装置１００によれば、仮想マシンプログラムが中断された期間として、仮想マシンが中断された期間を採用することができる。これにより、情報処理装置１００は、ハイパーバイザの制御によらず仮想マシンプログラムが中断された期間についてはスティール期間として扱わず、プログラムの実行時間を計測する精度の向上を図ることができる。
【０１５０】
また、情報処理装置１００によれば、実行時間を示すデータを生成する対象のプログラムとして、仮想マシンプログラムにおいて実行するプロセス、プロセス内のスレッド、または、スレッド内の関数の少なくともいずれかを採用することができる。これにより、情報処理装置１００は、異なる実行単位のプログラムそれぞれのスティール時間を除外した実行時間を算出することができる。
【０１５１】
なお、本実施の形態で説明した実行時間補正方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本実行時間補正プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本実行時間補正プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１５２】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１５３】
（付記１）所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する、
制御部を有することを特徴とする情報処理装置。
【０１５４】
（付記２）前記制御部は、
取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前、かつ、直後に実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する、ことを特徴とする付記１に記載の情報処理装置。
【０１５５】
（付記３）取得した前記データは、さらに、前記仮想マシンを制御する制御プログラムによって前記仮想マシンが中断された期間を特定するデータを含み、
前記仮想マシンプログラムが中断された期間は、前記仮想マシンが中断された期間である、ことを特徴とする付記１または２に記載の情報処理装置。
【０１５６】
（付記４）前記プログラムは、前記仮想マシンプログラムにおいて実行するプロセス、プロセス内のスレッド、または、スレッド内の関数の少なくともいずれかである、ことを特徴とする付記１〜３のいずれか一つに記載の情報処理装置。
【０１５７】
（付記５）コンピュータが、
所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する、
処理を実行することを特徴とする実行時間補正方法。
【０１５８】
（付記６）コンピュータに、
所定の時刻ごとに、当該時刻に仮想マシンにおいて実行中であるプログラムを示すデータを取得し、
取得した前記データに基づいて、前記仮想マシンプログラムが中断された期間の直前または直後の少なくともいずれかに実行中であるプログラムの開始から終了までの時間から、前記期間分の時間を減算した結果を示すデータを、前記プログラムを識別するデータに対応付けて出力する、
処理を実行させることを特徴とする実行時間補正プログラム。
【符号の説明】
【０１５９】
１００  情報処理装置
２００  バス
２０１  ＣＰＵ
２０２  メモリ
２０３  Ｉ／Ｆ
２０４  ディスクドライブ
２０５  ディスク
２１０  ネットワーク
３０１  取得部
３０２  特定部
３０３  解析部
３０４  出力部
４００  サンプリングデータ
４０１，４０２  ＶＭ
４０３，４０４  コンテキスト退避領域
４０５  ハイパーバイザ
６０１〜６０６  フィールド
ｓ１〜ｓ２３  サンプル
【図１】
0006672808.tif 000009
【図２】
0006672808.tif 000010
【図３】
0006672808.tif 000011
【図４】
0006672808.tif 000012
【図５】
0006672808.tif 000013
【図６】
0006672808.tif 000014
【図７】
0006672808.tif 000015
【図８】
0006672808.tif 000016
【図９】
0006672808.tif 000017
【図１０】
0006672808.tif 000018
【図１１】
0006672808.tif 000019
【図１２】
0006672808.tif 000020
【図１３】
0006672808.tif 000021