(57)【特許請求の範囲】
【請求項１】
物理計算機上で得られた第１のトレースデータに基づいて、当該物理計算機上で稼働する仮想計算機上で得られた第２のトレースデータを編集するトレースデータ編集装置において、
前記第１のトレースデータ及び前記第２のトレースデータ間の時刻のずれを補正する時刻補正部と、
前記仮想計算機が実行したタスクの実行期間から、前記物理計算機に実装されたＯＳ（Operating System）又はハイパーバイザ上のタスクの実行時間を間引くようにして前記第２のトレースデータを補正するトレースデータ補正部と
を備えることを特徴とするトレースデータ編集装置。
【請求項２】
前記第１のトレースデータ及び前記トレースデータ補正部により補正された前記第２のトレースデータに基づいて、前記物理計算機及び前記仮想計算機で発生した各イベントに関する情報をリスト形式又はグラフ形式で表示するトレースデータ表示部を備える
ことを特徴とする請求項１に記載のトレースデータ編集装置。
【請求項３】
前記トレースデータ補正部は、
前記第２のトレースデータの各イベントについて、前記イベントの発生要因となる要因イベントから当該イベントが発生するまでの時間が前記仮想計算機の実行時間に依存するか否かを判定し、
当該時間が前記仮想計算機の前記実行時間に依存する場合には、当該要因イベントから当該イベントまでの時間から、当該イベントの実行終了から当該イベントを再開するまでの時間を間引くようにして前記第２のトレースデータを補正する
ことを特徴とする請求項１に記載のトレースデータ編集装置。
【請求項４】
前記トレースデータ補正部は、
前記仮想計算機の各イベントに対する前記要因イベントと、前記要因イベントから対応する前記イベントが発生するまでの時間が前記仮想計算機上の実行時間に依存するか否かとが予め定義された要因定義テーブルを保持し、
当該要因定義テーブルを参照して、前記第２のトレースデータの各イベントについて、前記イベントの要因となる要因イベントから前記イベントが発生するまでの時間が前記仮想計算機上の実行時間に依存するか否かを判定する
ことを特徴とする請求項３に記載のトレースデータ編集装置。
【請求項５】
前記要因定義テーブルでは、
前記イベントの種別として、タスクを開始するイベントと、当該タスクを終了するイベントとが個別に定義され、
前記トレースデータ補正部は、
前記第２のトレースデータに登録されているタスクを切り替えるイベントを、前記イベントを前記タスクの実行終了のイベントと、当該タスクに続いて実行されるタスクの実行開始のイベントとに分割した上で、前記要因定義テーブルを参照して、前記第２のトレースデータの各イベントについて、前記イベントの要因となる要因イベントから前記イベントが発生するまでの時間が前記仮想計算機上の実行時間に依存するか否かを判定する
ことを特徴とする請求項４に記載のトレースデータ編集装置。
【請求項６】
物理計算機上で得られた第１のトレースデータに基づいて、当該物理計算機上で稼働する仮想計算機上で得られた第２のトレースデータを編集するトレースデータ編集装置において実行されるトレースデータ編集方法において、
前記トレースデータ編集装置は、
前記第１のトレースデータに基づいて、前記第２のトレースデータを編集するトレースデータ編集部を有し、
前記トレースデータ編集部が、前記第１のトレースデータ及び前記第２のトレースデータ間の時刻のずれを補正する第１のステップと、
前記トレースデータ編集部が、前記仮想計算機が実行したタスクの実行期間から、前記物理計算機に実装されたＯＳ（Operating System）又はハイパーバイザ上のタスクの実行時間を間引くようにして前記第２のトレースデータを補正する第２のステップと
を備えることを特徴とするトレースデータ編集方法。
【請求項７】
前記トレースデータ編集部が、前記第１のトレースデータ及び補正した前記第２のトレースデータに基づいて、前記物理計算機及び前記仮想計算機で発生した各イベントに関する情報をリスト形式又はグラフ形式で表示する第３のステップを備える
ことを特徴とする請求項６に記載のトレースデータ編集方法。
【請求項８】
前記第２のステップにおいて、前記トレースデータ編集部は、
前記第２のトレースデータの各イベントについて、前記イベントの発生要因となる要因イベントから当該イベントが発生するまでの時間が前記仮想計算機の実行時間に依存するか否かを判定し、
当該時間が前記仮想計算機の前記実行時間に依存する場合には、当該要因イベントから当該イベントまでの時間から、当該イベントの実行終了から当該イベントを再開するまでの時間を間引くようにして前記第２のトレースデータを補正する
ことを特徴とする請求項６に記載のトレースデータ編集方法。
【請求項９】
前記第２のステップにおいて、前記トレースデータ編集部は、
前記仮想計算機の各イベントに対する前記要因イベントと、前記要因イベントから対応する前記イベントが発生するまでの時間が前記仮想計算機上の実行時間に依存するか否かとが予め定義された要因定義テーブルを保持し、
当該要因定義テーブルを参照して、前記第２のトレースデータの各イベントについて、前記イベントの要因となる要因イベントから前記イベントが発生するまでの時間が前記仮想計算機上の実行時間に依存するか否かを判定する
ことを特徴とする請求項８に記載のトレースデータ編集方法。
【請求項１０】
前記要因定義テーブルでは、
前記イベントの種別として、タスクを開始するイベントと、当該タスクを終了するイベントとが個別に定義され、
前記第２のステップにおいて、前記トレースデータ編集部は、
前記第２のトレースデータに登録されているタスクを切り替えるイベントを、前記イベントを前記タスクの実行終了のイベントと、当該タスクに続いて実行されるタスクの実行開始のイベントとに分割した上で、前記要因定義テーブルを参照して、前記第２のトレースデータの各イベントについて、前記イベントの要因となる要因イベントから前記イベントが発生するまでの時間が前記仮想計算機上の実行時間に依存するか否かを判定する
ことを特徴とする請求項９に記載のトレースデータ編集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はトレースデータ編集装置及び方法に関し、特に、物理的な計算機上（以下、これを物理計算機と呼ぶ）で稼働する仮想的な仮想計算機（以下、これを仮想計算機と呼ぶ）のイベントトレースを編集するトレースデータ編集装置に適用して好適なものである。
【背景技術】
【０００２】
物理計算機上で実行されるタスクの動作や処理時間を細粒度で解析する場合、タスクスイッチや割込み等のイベントの発生情報を記録するイベントトレース技術が有用である。
【０００３】
しかし、このイベントトレース技術を仮想計算機に適用する場合、仮想計算機モニタ、ハイパーバイザ若しくはホストＯＳ（Operating System）、又は、同一の物理計算機上で動作する他の仮想計算機を原因として生じる外乱により、正確な解析を行うことが困難である。
【０００４】
例えば仮想計算機上のあるタスクが、時刻ｔ０にＣＰＵ（Central Processing Unit）上での実行を開始し、時刻ｔ１に仮想計算機モニタに実行モードが遷移し、時刻ｔ２に再び仮想計算機に実行モードが遷移し、この後、時刻ｔ３にＣＰＵ上での実行を終了したとする。この場合、仮想計算機上のトレースデータで確認できるのは時刻ｔ０の実行開始イベントと時刻ｔ３の実行終了イベントだけであり、かかるタスクが時刻ｔ０から時刻ｔ３までの間（（ｔ３−ｔ０）時間）ＣＰＵを使い続けていたかのように見える。しかしながら、タスクが実際にＣＰＵを使用したのは｛（ｔ１−ｔ０）＋（ｔ３−ｔ２）｝時間だけである。
【０００５】
このような問題に対して、非特許文献１では、特定のタスクＡに関する実行フローを、タスクＡの完了までの時間に影響する全タスクの実行期間の順序付けられた集合として定義し、この実行フローを構成するための技術が開示されている。これにより、ゲストＯＳ上で動作する特定タスクの実行がホストＯＳによりプリエンプトされた場合、どのようなホストＯＳ上のタスクが動作していたかを知ることができる。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】"Fine-grained preemption analysis for latency investigationacross virtual machines", Journal of Cloud Computing 2014
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、近年、例えばソフトウェアの開発現場では、開発者一人一人に開発環境が整備された物理計算機を貸与するのではなく、物理計算機上で稼働する仮想計算機上に開発環境を構築することにより複数の開発環境を集約し、コストの削減を図る傾向がある。
【０００８】
このような環境では、開発されたソフトウェアを実装する物理計算機上での性能評価に先立ち、開発環境の仮想計算機上である程度の性能評価や分析を行い、問題を改善しておくことが望まれる。しかしながら、上述のように仮想計算機にイベントトレース技術を適用した場合、仮想計算機モニタや他の仮想計算機による外乱により正確な解析が難しいという問題がある。
【０００９】
非特許文献１に開示された方法は、仮想計算機上のタスクの処理遅延が仮想計算機モニタや他の仮想計算機により生じている場合、その要因を調査するのに有用である。しかし、仮想計算機上で動作するＯＳやタスク自身に遅延の要因がある場合、その解析は容易ではない。
【００１０】
本発明は以上の点を考慮してなされたもので、仮想計算機上で取得したトレースデータを容易かつ正確に解析を行い得る情報処理装置及び情報処理方法を提案しようとするものである。
【課題を解決するための手段】
【００１１】
かかる課題を解決するため本発明においては、物理計算機上で得られた第１のトレースデータに基づいて、当該物理計算機上で稼働する仮想計算機上で得られた第２のトレースデータを編集するトレースデータ編集装置において、前記第１のトレースデータ及び前記第２のトレースデータ間の時刻のずれを補正する時刻補正部と、前記仮想計算機が実行したタスクの実行期間から、前記物理計算機に実装されたＯＳ（Operating System）又はハイパーバイザ上のタスクの実行時間を間引くようにして前記第２のトレースデータを補正するトレースデータ補正部とを設けるようにした。
【００１２】
また本発明においては、物理計算機上で得られた第１のトレースデータに基づいて、当該物理計算機上で稼働する仮想計算機上で得られた第２のトレースデータを編集するトレースデータ編集装置において実行されるトレースデータ編集方法において、前記トレースデータ編集装置は、記第１のトレースデータに基づいて、前記第２のトレースデータを編集するトレースデータ編集部を有し、前記トレースデータ編集部が、前記第１のトレースデータ及び前記第２のトレースデータ間の時刻のずれを補正する第１のステップと、前記トレースデータ編集部が、前記仮想計算機が実行したタスクの実行期間から、前記物理計算機に実装されたＯＳ（Operating System）又はハイパーバイザ上のタスクの実行時間を間引くようにして前記第２のトレースデータを補正する第２のステップとを設けるようにした。
【００１３】
本トレースデータ編集装置及び方法によれば、仮想計算機上で取得したトレースデータから物理計算機上で生じた外乱を排除することができる。
【発明の効果】
【００１４】
本発明によれば、仮想計算機上で取得したトレースデータを容易かつ正確に解析を行い得るトレースデータ編集装置及び方法を実現できる。
【図面の簡単な説明】
【００１５】
【図１】物理計算機の概略構成を示すブロック図である。
【図２】仮想計算機の概略構成を示すブロック図である。
【図３】ホストＯＳとゲストＯＳとの関係を示すブロック図である。
【図４】トレースデータ編集部の構成及び処理内容の説明に供するブロック図である。
【図５】ゲストトレースデータの構成を示す概念図である。
【図６】ホストトレースデータの構成を示す概念図である。
【図７】第１の実施の形態によるマージ後トレースデータの構成を示す概念図である。
【図８】図７に示すマージ後トレースデータをタスクの実行状態として示したタイミング図である。
【図９】第１の実施の形態によるマージ後トレースデータ補正処理の処理手順を示すフローチャートである。
【図１０】補正後トレースデータの構成を示す概念図である。
【図１１】図１０に示す補正後トレースデータをタスクの実行状態として示したタイミング図である。
【図１２】第２の実施の形態によるマージ後トレースデータの構成を示す概念図である。
【図１３】図１２に示すマージ後トレースデータをタスクの実行状態として示したタイミング図である。
【図１４】第２の実施の形態によるマージ後トレースデータ補正処理の処理手順を示すフローチャートである。
【図１５】要因定義テーブルの構成例を示す概念図である。
【図１６】（ａ）及び（ｂ）は、第２の実施の形態のトレースデータ補正部の処理内容の説明に供するタイミング図である。
【発明を実施するための形態】
【００１６】
以下図面について、本発明の一実施の形態を詳述する。
【００１７】
（１）第１の実施の形態
図１において、１は全体として本発明を適用した第１の実施の形態の物理計算機を示す。物理計算機１は、内部バス８を介して接続されたＣＰＵ（Central Processing Unit）２、メモリ３、記憶装置４、ディスプレイ５、入力装置６及び通信装置７を備えて構成される。
【００１８】
ＣＰＵ２は、メモリ３に格納されているソフトウェアに基づいて各種処理を実行するプロセッサである。メモリ３は、ＲＡＭ（Random Access Memory）等の半導体メモリから構成される。メモリ３は、ソフトウェアやデータを格納するために利用されるほか、ＣＰＵ２のワークメモリとしても利用される。記憶装置４は、例えば、ハードディスク装置やＳＳＤ（Solid State Drive）などから構成され、プログラムやデータを長期間保持するために利用される。
【００１９】
ディスプレイ５は、例えば、液晶表示装置や有機ＥＬ（ElectroLuminesoence）表示装置などから構成され、物理計算機１が実行した各種処理の処理結果や、ＧＵＩ（Graphical User Interface）などの各種情報を表示する。入力装置６は、例えば、キーボードやマウス若しくはタッチパネルなどから構成され、ユーザが各種操作を行う際に利用する。また通信装置７は、例えば、ＮＩＣ（Network Interface Card）などから構成され、外部装置との通信時におけるプロトコル制御を行う。
【００２０】
図２は、物理計算機１のメモリ３上で動作するソフトウェアによりエミュレーションされる仮想計算機１ａの構成を示す。仮想計算機１ａは、仮想ＣＰＵ（Virtual ＣＰＵ）２ａ、メモリ３ａ、記憶装置４ａ、ディスプレイ５ａ、入力装置６ａ、及び通信装置７ａを備えて構成される。仮想ＣＰＵ２ａは、物理計算機１のＣＰＵ２を時分割して利用することにより具現化される仮想的なプロセッサであり、ＣＰＵ２と同様の機能を有する。メモリ３ａ、記憶装置４ａ、ディスプレイ５ａ、入力装置６ａ及び通信装置７ａは、それぞれ物理計算機１の対応するメモリ３、記憶装置４、ディスプレイ５、入力装置６又は通信装置７の物理的又は時間的な一部を利用することにより具現化されるデバイスである。
【００２１】
図３は、物理計算機１における仮想化環境の一例を示す。物理計算機１上では、当該物理計算機１に実装されたＯＳ（Operating System）であるホストＯＳ１１が動作し、ホストＯＳ１１上で仮想計算機１ａがエミュレートされる。また仮想計算機１ａ上では、仮想計算機１ａのＯＳであるゲストＯＳ１０（１０ａ，１０ｂ）が動作する。
【００２２】
これらゲストＯＳ１０及びホストＯＳ１１は、イベントトレース機能を有し、そのゲストＯＳ１０又はホストＯＳ１１上で発生したイベントに関する情報をトレースデータとしてメモリ３，３ａ又は記憶装置４，４ａに保存する。トレースデータは、そのイベントの発生時刻及びイベント種別、そのイベントが発生したＣＰＵ２又は仮想ＣＰＵ２ａの識別子などの様々な情報を含む。
【００２３】
図４は、本実施の形態によるトレースデータ編集部２０の構成を示す。トレースデータ編集部２０は、物理計算機１に搭載されたハードウェアであり、当該物理計算機１上で動作する。ただし、トレースデータ編集部２０は、メモリ３（図１）に格納された対応するプログラムをＣＰＵ２（図１）が実行することにより具現化され、又は、メモリ３ａ（図２）に格納された対応するプログラムを仮想ＣＰＵ２ａ（図２）が実行することにより具現化されるソフトウェア構成であっても良い。この場合、トレースデータ編集部２０は、ホストＯＳ１１（図３）上（メモリ３に格納された対応するプログラムをＣＰＵ２が実行することにより具現化される場合）又はゲストＯＳ１０上（メモリ３ａに格納された対応するプログラムを仮想ＣＰＵ２ａが実行することにより具現化される場合）で動作することになる。
【００２４】
トレースデータ編集部２０は、トレースデータマージ部２１、トレースデータ補正部２２及びトレースデータ表示部２３を備えて構成される。
【００２５】
トレースデータマージ部２１は、入力装置６ａを介して入力された所定のユーザ操作に応じて、メモリ３又は記憶装置４に格納されたゲストトレースデータ２４及びホストトレースデータ２５を取得する。ゲストトレースデータ２４は、ゲストＯＳ１０上のイベントトレース機能により記録・保存されたトレースデータである。またホストトレースデータ２５は、ホストＯＳ１１上のイベントトレース機能により記録・保存されたトレースデータである。なお、仮想化機能の種類によっては図３の構成とは異なり、ホストＯＳ１１の代わりにハイパーバイザ又は仮想計算機モニタと呼ばれるコンポーネントが動作するが、その場合もトレースデータマージ部２１が入力するデータは同じである。
【００２６】
そしてトレースデータマージ部２１は、取得したホストトレースデータ２５上のイベント発生時刻をゲストＯＳ１０上の時刻（以下、これをゲスト時刻と呼ぶ）に変換し、ゲストトレースデータ２４及びホストトレースデータ２５上のイベントをゲスト時刻順にソートしてマージする。そしてトレースデータマージ部２１は、マージしたイベントをマージ後トレースデータ２６として出力する。
【００２７】
トレースデータ補正部２２は、マージ後トレースデータ２６を入力し、ゲストＯＳ１０上で発生したイベントについて、ホストＯＳ１１による外乱を取り除く補正を行い、補正後のトレースデータを補正後トレースデータ２７として出力する。
【００２８】
またトレースデータ表示部２３は、補正後トレースデータ２７を入力し、補正後のイベント情報をディスプレイ５にリスト形式又はグラフ形式で表示する。これにより、かかる表示に基づいてユーザが仮想計算機１ａにおける各タスクの実行内容を把握することができる。
【００２９】
図５は、ゲストＯＳ１０上で記録したゲストトレースデータ２４の構成例を示し、図６は、ホストＯＳ１１上で記録したホストトレースデータ２５の構成例を示す。これら図５及び図６からも明らかなように、ゲストトレースデータ２４及びホストトレースデータ２５は、それぞれイベント発生時刻情報２４ａ，２５ａ、仮想ＣＰＵ識別子情報２４ｂ又はＣＰＵ識別子情報２５ｂ、タスク識別子情報２４ｃ，２５ｃ、イベント種別情報２４ｄ，２５ｄ、及び、付随情報２４ｅ，２５ｅを含む。
【００３０】
イベント発生時刻情報２４ａ，２５ａは、対応するイベントが発生した時刻（イベント発生時刻）を表す情報である。イベント発生時刻は、ゲストＯＳ１０及びホストＯＳ１１がそれぞれ管理する時刻情報に基づく時刻である。従って、ホストトレースデータ２５上のイベントとゲストトレースデータ２４上のイベントとが同一のイベント発生時刻である場合でも、実際に同時刻に発生したイベントとは限らない。
【００３１】
仮想ＣＰＵ識別子情報２４ｂは、対応するイベントが発生したときに実行中であった仮想ＣＰＵ２ａの識別子（仮想ＣＰＵ識別子）を表す情報である。またＣＰＵ識別子情報２５ｂは、対応するイベントが発生したときに実行中であったＣＰＵ２の識別子（ＣＰＵ識別子）を表す情報である。
【００３２】
さらに、タスク識別子情報２４ｃ，２５ｃは、対応するイベントが発生したときに実行中であったタスクの識別子（タスク識別子）を表す情報であり、イベント種別情報２４ｄ，２５ｄは、対応するイベントの種別（イベント種別）を一意に特定する情報である。付随情報２４ｅ，２５ｅは、対応するイベントのイベント種別に関する付加的情報である。
【００３３】
本実施の形態では、ゲストトレースデータ２４において、ゲストＯＳ１０上で記録するイベントとして「TASK_SW」、ホストＯＳ１１上で記録するイベントとして「VM_EXIT」、及び「VM_ENTRY」を利用する。「TASK_SW」は、タスクの実行を切り替えるタスクスイッチを表すイベントであり、ゲストＯＳ１０は、付随情報２４ｅとして少なくともタスクスイッチ前後のそれぞれのタスクのタスク識別子を記録する。また「VM_EXIT」は、仮想化機能における実行モードがゲストからホストにスイッチするイベントであり、「VM_ENTRY」は、実行モードがホストからゲストにスイッチするイベントであり、ホストＯＳ１１は付随情報２５ｅとして少なくともこれから動作させる仮想ＣＰＵ２ａ（図２）の仮想ＣＰＵ識別子を記録する。
【００３４】
なお、「TASK_SW」、「VM_EXIT」、「VM_ENTRY」は、これらと同等の情報又はこれらの情報にさらに情報を追加して記録するイベント又はイベント群が他にあれば、そのイベント又はイベント群で置き換えてもよい。また、イベント種別として、「TASK_SW」、「VM_EXIT」、「VM_ENTRY」以外のイベントを記録してもよい。なお、実行モードにおける「ホスト」はホストＯＳ１１で処理が実行され、「ゲスト」はゲストＯＳ１０で処理が実行されることをそれぞれ示す。
【００３５】
図５に示す例では、例えばイベント発生時刻が「100」であるイベントレコードは、ゲストＯＳ１０上の時刻「100」に、仮想ＣＰＵ識別子が「０」である仮想ＣＰＵ２ａ（図２）上で、タスク識別子が「Ｘ」のタスクを実行中に、タスク「Ｘ」からタスク「Ａ」にタスクスイッチする「TASK_SW」イベントが発生したことを示している。また、イベント発生時刻が「140」であるイベントレコードは、ゲストＯＳ１０上の時刻「140」に、仮想ＣＰＵ識別子が「０」である仮想ＣＰＵ２ａ上で、タスク識別子が「Ａ」のタスクを実行中に、タスク「Ａ」から「アイドルタスク」にタスクスイッチする「TASK_SW」イベントが発生したことを示している。なお、「アイドルタスク」とは、ＣＰＵ２又は仮想ＣＰＵ２ａ上で実行可能なタスクが存在しない場合にスイッチするタスクであり、基本的には何も処理を行わない。
【００３６】
また図６に示す例では、例えばイベント発生時刻が「5110」であるイベントレコードは、ホストＯＳ１１上の時刻「5110」に、ＣＰＵ識別子が「１」のＣＰＵ２（図１）上で、タスク識別子が「Ｖ」のタスクを実行中に、実行モードがゲストからホストにスイッチしたことを示す「VM_EXIT」イベントが発生したことを示している。また、イベント発生時刻が「5130」であるイベントレコードは、付随情報２５ｅとして、当該ＣＰＵ２が実行する仮想ＣＰＵ２ａの仮想ＣＰＵ識別子を仮想ＣＰＵ識別子情報２４ｂ（図５）として記録する。同一ＣＰＵ２における「VM_ENTRY」から次の「VM_EXIT」までの間に仮想ＣＰＵ識別子が変わることはないため、例えば「VM_ENTRY」イベントの場合のみ、ホストＯＳ１１は仮想ＣＰＵ識別子を記録する。
【００３７】
図７は、トレースデータマージ部２１（図４）により図５について上述したゲストトレースデータ２４と、図６について上述したホストトレースデータ２５とをマージしたマージ後トレースデータ２６の構成を示す。マージ後トレースデータ２６におけるイベント発生時刻情報２６ａ、仮想ＣＰＵ識別子情報２６ｂ、タスク識別子情報２６ｃ、イベント種別情報２６ｄ及び付随情報２６ｅは、図５について上述したゲストトレースデータ２４や図６について上述したホストトレースデータ２５のイベント発生時刻情報２４ａ，２５ａ、仮想ＣＰＵ識別子情報２４ｂ、タスク識別子情報２４ｃ，２５ｃ、イベント種別情報２４ｄ，２５ｄ及び付随情報２４ｅ，２５ｅと同様の情報であるため、ここでの説明は省略する。
【００３８】
図６では、ホストＯＳ１１上の時刻はゲストＯＳ１０上の時刻に対して「5000」だけ進んでいるものとする。この場合、トレースデータマージ部２１は、ホストトレースデータ２５のイベント発生時刻をそれぞれ「5000」ずつ減算した後、ゲストトレースデータ２４のイベントとマージして時刻順に並べてマージ後トレースデータ２６として出力する。
【００３９】
ホストＯＳ１１上の時刻（以下、これをホスト時刻と呼ぶ）からゲスト時刻への変換はいくつかの方法が知られている。例えば常に一定間隔でカウントアップされるタイムスタンプカウンタ（ＴＳＣ：Time Stamp Counter）をイベント発生時刻として用いることができる。ある種のＣＰＵ２及び仮想化機能の実装においては、仮想計算機１ａ上のＴＳＣの値は物理計算機１上のＴＳＣに対して仮想計算機１ａごとに固定のオフセットを加算した値となっている。このオフセットは仮想化機能が管理しており、仮想化機能からオフセットを取得して保存し、トレースデータマージ部２１に入力として与える。そしてトレースデータマージ部２１は、ホストトレースデータ２５上のイベント発生時刻に対し、オフセットを加算することにより、ゲスト時刻に変換する。
【００４０】
図８は、図７に示すマージ後トレースデータ２６をタスクの実行状態として示した図である。横軸はゲストＯＳ１０上の時刻ｔを表す。縦方向には仮想計算機１ａ上の各仮想ＣＰＵ２ａと、物理計算機１上のＣＰＵ２とが並び、これら仮想ＣＰＵ２ａ及びＣＰＵ２上で発生したイベントを横軸に沿って示している。ここでは、あるタスクの実行開始から終了までを実線の矩形で表し、アイドル状態（アイドルタスクの実行開始から終了まで）を破線の矩形で表している。さらに図８では、ゲストＯＳ１０上のタスクの実行期間において、ホストＯＳ１１に実行モードが遷移している期間を斜線で示している。また、黒塗りの三角記号の箇所で、各種イベントが発生したことを示している。
【００４１】
図８の例では、まず、仮想ＣＰＵ識別子が「０」である仮想ＣＰＵ２ａ上でタスク「Ｘ」が実行され、イベント発生時刻が「100」のときにタスク「Ｘ」からタスク「Ａ」に処理が切り替わる。イベント発生時刻が「110」のときに実行モードがゲストからホストに切り替わり、ＣＰＵ２上でタスク「Ｖ」が実行される。イベント発生時刻が「130」のときに実行モードがホストからゲストに切り替わり、仮想ＣＰＵ２ａ上でタスク「Ａ」が実行される。イベント発生時刻が「140」のときに、仮想ＣＰＵ２ａではタスク「Ａ」から「アイドルタスク」に処理が切り替わる。
【００４２】
同じイベント発生時刻で実行モードがゲストからホストに切り替わり、ＣＰＵ２上でタスク「Ｖ」が実行される。イベント発生時刻が「170」のときに実行モードがホストからゲストに切り替わり、仮想ＣＰＵ２ａ上でタスク「Ｂ」が実行される。イベント発生時刻が「190」のときにタスク「Ｂ」からタスク「Ａ」に処理が切り替わり、仮想ＣＰＵ２ａ上でタスク「Ａ」が実行される。そしてイベント発生時刻が「200」のときにタスク「Ａ」からタスク「Ｘ」に処理が切り替わる。
【００４３】
次に、本実施の形態におけるトレースデータ補正部２２の詳細について説明する。図９は、マージ後トレースデータ２６（図７）を補正するマージ後トレースデータ補正処理の処理手順を示す。このマージ後トレースデータ補正処理は、トレースデータ補正部２２により実行される処理であり、特に特定の仮想ＣＰＵ２ａ上で発生したイベント、及び仮想ＣＰＵ２ａを実行するＣＰＵ２におけるホストＯＳ１１上のイベントに着目した処理内容を示している。図９は、仮想計算機１ａにおける１つの仮想ＣＰＵ２ａの処理について説明しているが、対象の仮想計算機１ａ上に複数の仮想ＣＰＵ２ａが存在する場合、トレースデータ補正部２２は、各仮想ＣＰＵ２ａについて同様の処理を実施する。
【００４４】
トレースデータ補正部２２は、トレースデータマージ部２１からマージ後トレースデータ２６が与えられると、この図９に示すマージ後トレースデータ補正処理を開始し、まず、タスク実行中フラグＲをクリアし、時間差Δｔを０に初期化する初期設定を行う（Ｓ１）。時間差Δｔは、対象の仮想ＣＰＵ２ａにおける「VM_EXIT」から「VM_ENTRY」までの時間差を一時的に保持するための変数である。
【００４５】
続いて、トレースデータ補正部２２は、マージ後トレースデータ２６に含まれるイベントＥの中からステップＳ２以降の処理が未処理で、かつイベント発生時刻が最も古いイベントＥを１つ取得する（Ｓ２）。
【００４６】
次いで、トレースデータ補正部２２は、ステップＳ２でイベントＥを取得することができたか否かを判定する（Ｓ３）。ここで、この判断で否定結果を得ることは、マージ後トレースデータ２６に含まれるすべてのイベントに対するステップＳ４以降の処理が終了していることを意味する。かくして、このときトレースデータ補正部２２は、このマージ後トレースデータ補正処理を終了する。
【００４７】
これに対して、トレースデータ補正部２２は、ステップＳ３で否定結果を得ると、ステップＳ２で取得したイベントＥがアイドルタスクではないタスク（非アイドルタスク）へのスイッチを示す「TASK_SW」イベントであるか否かを判定する（Ｓ４）。そして、トレースデータ補正部２２は、この判断で否定結果を得るとステップＳ６に進む。
【００４８】
これに対して、トレースデータ補正部２２は、ステップＳ４の判断で肯定結果を得ると、タスク実行中フラグＲをセットする（Ｓ５）。タスク実行中フラグＲは、処理の対象にしているイベントＥが発生した場合に、処理対象としている仮想ＣＰＵ２ａ上で実行中のタスクが存在する場合にセットされる。
【００４９】
この後、トレースデータ補正部２２は、ステップＳ２で取得したイベントＥがアイドルタスクへの「TASK_SW」イベントであるか否かを判定する（Ｓ６）。そして、トレースデータ補正部２２は、この判断で否定結果を得るとステップＳ８に進む。
【００５０】
これに対して、トレースデータ補正部２２は、ステップＳ６の判断で肯定結果を得ると、タスク実行中フラグＲをクリアする（Ｓ７）。これは、イベントＥのイベント種別がアイドルタスクへのスイッチである「TASK_SW」である場合、仮想ＣＰＵ２ａ上で実行中のタスクは存在しない、つまり仮想ＣＰＵ２ａがアイドル状態にあるからである。
【００５１】
続いて、トレースデータ補正部２２は、ステップＳ２で取得したイベントＥのイベント種別が「VM_ENTRY」であるか否かを判定する（Ｓ８）。そして、トレースデータ補正部２２は、この判断で否定結果を得るとステップＳ１０に進む。
【００５２】
これに対して、トレースデータ補正部２２は、ステップＳ８の判断で肯定結果を得ると、時間差Δｔをセットする（Ｓ９）。具体的に、トレースデータ補正部２２は、タスク実行中フラグＲがセットされている場合には、直前の「VM_EXIT」の発生時刻から「VM_ENTRY」の発生時刻までの時間差をΔｔにセットする。またトレースデータ補正部２２は、タスク実行中フラグＲがセットされていない場合には、Δｔを０にセットする。なお、直前の「VM_EXIT」から「VM_ENTRY」までの間に、ゲストＯＳ１０上のイベントが含まれることはない。
【００５３】
次いで、トレースデータ補正部２２は、ステップＳ２で取得したイベントＥがゲストＯＳ１０上のイベントであるか否かを判定する（Ｓ１０）。そしてトレースデータ補正部２２は、この判断で否定結果を得るとステップＳ２に戻り、この後、ステップＳ２で取得するイベントＥを未処理の他のイベントに順次切り替えながら、ステップＳ３で否定結果を得るまでステップＳ２以降の処理を繰り返す。
【００５４】
これに対して、トレースデータ補正部２２は、ステップＳ１０の判断で肯定結果を得ると、イベントＥのイベント発生時刻を補正する（Ｓ１１）。具体的に、トレースデータ補正部２２は、イベントＥのイベント発生時刻と、１つ前のゲストＯＳ１０上のイベント発生時刻との時間差に対し、時間差Δｔを減算した時間を相対時間とする。そして、トレースデータ補正部２２は、１つ前のゲストＯＳ１０上のイベントの補正後イベント発生時刻に対し、上述のようにして算出した相対時間を加算した値を当該イベントＥの補正後イベント発生時刻とする。そして、トレースデータ補正部２２は、この補正後イベント発生時刻と併せて、当該イベントＥを補正後トレースデータ２７に追加する。
【００５５】
続いて、トレースデータ補正部２２は、ステップＳ２に戻り、この後、ステップＳ２で取得するイベントＥを未処理の他のイベントに順次切り替えながら、ステップＳ３で否定結果を得るまでステップＳ２以降の処理を繰り返す。
【００５６】
そしてトレースデータ補正部２２は、やがてマージ後トレースデータ２６に含まれるすべてのイベントＥについて、ステップＳ２〜ステップＳ１１の処理を実行し終えることによりステップＳ３で肯定結果を得ると、このマージ後トレースデータ補正処理を終了する。
【００５７】
なお、マージ後トレースデータ２６の先頭部分や末尾部分といった境界部は、図９に示すマージ後トレースデータ補正処理以外の境界処理が行われているものとする。また、トレースデータの採取期間がゲストトレースデータ２４とホストトレースデータ２５とで異なる場合には、次のような処理を行ってもよい。例えば、ゲストトレースデータ２４が時刻「1000」から「5000」までのイベントを含み、ホストトレースデータ２５が（ゲストＯＳ時刻換算で）時刻「2000」から「5000」までのイベントを含んでいる場合、時刻「1000」から「2000」までのイベントを処理対象から除いてもよい。さらに、トレースデータ編集部２０にユーザが指定した処理対象の時刻範囲を入力し、当該時刻範囲に含まれないイベントを処理対象から除くようにしてもよい。
【００５８】
図１０は、図７に示すマージ後トレースデータ２６を図９について上述したマージ後トレースデータ補正処理により補正したゲストＯＳ１０上のトレースデータ（補正後トレースデータ２７）の一例を示す。補正後トレースデータ２７における補正後イベント発生時刻情報２７ａ、仮想ＣＰＵ識別子情報２７ｃ、タスク識別子情報２７ｄ、イベント種別情報２７ｅ及び付随情報２７ｆは、図７について上述したマージ後トレースデータ２６のイベント発生時刻情報２６ａ、仮想ＣＰＵ識別子情報２６ｂ、タスク識別子情報２６ｃ、イベント種別情報２６ｄ及び付随情報２６ｅと同様の情報であるため、ここでの説明は省略する。補正後イベント発生時刻情報２７ｂは、図９について上述したマージ後トレースデータ補正処理により算出された対応するイベントの補正後のイベント発生時刻を表す情報である。また図１１は、図１０に示す補正後トレースデータ２７をタスクの実行状態として示した図である。
【００５９】
図７に示したイベント発生時刻「100」のイベントは、Δtが初期値の０のままなので、イベント発生時刻がそのまま補正後イベント発生時刻となる。イベント発生時刻「110」の「VM_EXIT」から「130」の「VM_ENTRY」までは、ゲストＯＳ１０（図３）において非アイドルタスクの実行中にホストＯＳ１１（図３）において発生したイベントであるため、Δtには「20」がセットされる。イベント発生時刻「140」のイベントは、１つ前のゲストＯＳ１０上のイベントとの時間差「40」からΔt「20」を減算し、これをかかる１つ前のイベントの補正後イベント発生時刻「100」に加算した結果「120」を、補正後イベント発生時刻として記録する。イベント発生時刻「140」の「VM_EXIT」から「170」の「VM_ENTRY」までは、ゲストＯＳ１０においてアイドルタスク実行中にホストＯＳ１１において発生したイベントであり、Δｔには「０」がセットされる。従って、イベント発生時刻「170」の補正後イベント発生時刻は、１つ前のゲストＯＳ１０上のイベントとの時間差「30」を当該１つ前のイベントの補正後イベント発生時刻にそのまま加算した値「150」として得られる。以降のイベント発生時刻「190」、「200」のイベントについても同様である。
【００６０】
一方、トレースデータ表示部２３は、補正後トレースデータ２７をディスプレイ５に表示する。この際の補正後トレースデータ２７の表示形式としては、例えば、図１０のようなリスト形式であっても、図１１のようなグラフ形式であってもよい。
【００６１】
以上のように本実施の形態では、トレースデータにおけるイベントＥが仮想ＣＰＵ２ａ上において非アイドルタスクである場合、「VM_EXIT」から「VM_ENTRY」までのイベント発生時刻の時間差Δｔを用いてイベントＥのイベント発生時刻を補正する。これにより、ゲストＯＳ１０上のタスク実行期間から、ホストＯＳ１１上の実行期間を間引いたトレースデータを得ることができる。つまり、仮想計算機１ａ上で動作させたシステムを物理計算機１上で動作させた場合における、ＣＰＵ２上の実行時間の推測値を表すトレースデータを得ることができるので、仮想計算機１ａ上で取得したトレースデータを容易かつ正確に解析することができる。
【００６２】
（２）第２の実施の形態
本実施の形態では、第１の実施の形態で記録したイベントに加え、ゲストＯＳ１０上で発生したイベントとして「WAKEUP」イベントを記録する。また、各イベントについて、コンテキスト情報を追加する。「TASK_SW」イベントについては、第１の実施の形態の付随情報に加え、スイッチ前のタスクの状態として、イベント待ち状態である「BLOCKED」や、実行可能状態である「RUNNABLE」を記録する。本実施の形態は、これらのイベントの情報を活用し、第１の実施の形態に加えてタスクの実行開始までの待ち時間に基づく補正も行う。
【００６３】
図１２は、本実施の形態におけるマージ後トレースデータ３０の一例を示す。本実施の形態において、マージ後トレースデータ３０は、第１の実施の形態のマージ後トレースデータ２６（図７）のイベント発生時刻情報２６ａ、仮想ＣＰＵ識別子情報２６ｂ、タスク識別子情報２６ｃ、イベント種別情報２６ｄ及び付随情報２６ｅと同様の内容を有するイベント発生時刻情報３０ｂ、仮想ＣＰＵ識別子情報３０ｃ、タスク識別子情報３０ｄ、イベント種別情報３０ｅ及び付随情報３０ｆに加えて、上述のコンテキスト情報３０ｇを含む。
【００６４】
図１２において、通し番号３０ａは説明の便宜上追加した番号であり、必ずしも必要ではない。通し番号３０ａが「１」のイベント種別である「TIMER_SET」イベントは、タイマをセットしたときに発生し、後にタイマ割込みが発生することになる（通し番号「６」のイベントを参照）。通し番号３０ａが「２」の「TASK_SW」イベントは、付随情報３０ｆとして「BLOCKED」が記録されている。すなわちタスク「Ｂ」は何らかのイベント待ちのため実行を一時停止し、仮想ＣＰＵ２ａをタスク「Ａ」に譲ったことを示している。
【００６５】
通し番号３０ａが「６」の「INTR」イベントは割り込みが発生したことを示すイベントであり、付随情報３０ｆとして「割り込み」種別が記録されている。通し番号３０ａが「６」の「INTR」イベントでは、タイマ割り込みが発生したとしているが、これに限られない。例えば、割り込みの種類として、記憶装置４（図１）に対する入出力完了を表す割り込み、通信装置７（図１）からの入力があったことを表す割り込みなどが挙げられる。「INTR」イベントは割り込みハンドラの延長で発生するため、コンテキスト情報３０ｇは割り込みコンテキストとなる。なお、アイドルタスクを含めたタスク実行中に発生したイベントはタスクコンテキスト、割り込みハンドラ実行中に発生したイベントは割り込みコンテキストとする。
【００６６】
通し番号３０ａが「９」の「WAKEUP」イベントは待ち状態（「BLOCKED」）にあるタスクが実行可能状態（「RUNNABLE」）になる場合に発生する。一般的なＯＳの実装において、タスクは何らかのイベントを待たないと次の処理に進めない場合、「BLOCKED」状態となって実行を一時中断し、他のタスクへスイッチする。そして、待ちイベントが発生したとき、当該イベントを待っていたタスクを起床させて「RUNNABLE」状態にし、ＣＰＵ２上での実行を開始できるようにする。「WAKEUP」イベントは付随情報３０ｆとして起床させるタスク識別子（タスク識別子情報３０ｄ）が記録される。通し番号３０ａが「９」のケースでは、タイマ割り込みハンドラの延長でタスクＢを起床させている。なお、「WAKEUP」の要因となるイベントも記録してよい。
【００６７】
図１３は、図１２に示すマージ後トレースデータ３０内容を時間軸上に表したものである。図１３において、白抜きの三角記号は割り込みコンテキストのイベントを示している。仮想ＣＰＵ２ａ上において、タスク「Ｂ」の実行中に、イベント発生時刻が「105」のときに「TIMER_SET」イベントが発生している。イベント発生時刻が「150」のときに「INTR」イベントが発生し、タイマ割り込みが記録されている。イベント発生時刻が「165」のときに「WAKEUP」イベントが発生し、仮想ＣＰＵ２ａはタスク「Ｂ」を「RUNABLE」、つまり実行可能状態にしている。
【００６８】
本実施の形態におけるトレースデータ補正部３１（図４）は、入力として、さらに図１５について後述する要因定義テーブル４０を受け取る。そして、トレースデータ補正部３１は、要因定義テーブル４０を参照し、要因となるイベントから結果として生じるイベントへの参照関係を構築する。この参照関係は、同期又は非同期のいずれかの属性を有し、あるイベントとその発生要因となるイベント（以下、これを要因イベントと呼ぶ）との間のイベント発生時刻の差が仮想ＣＰＵ２ａ上での実行時間に依存する場合には同期属性、あるイベントと要因イベントとの間のイベント発生時刻の差が仮想ＣＰＵ２ａ上での実行時間に依存しない場合には非同期属性と定義される。
【００６９】
例えば、図１２において、通し番号が「６」のイベントは、通し番号が「１」のイベントを要因イベントとするイベントであり、通し番号「１」の要因イベントと通し番号「６」のイベントとのイベント発生時刻の差は仮想ＣＰＵ２ａ上での何らかの処理の実行時間に依存しないため（通し番号「１」のイベントがある時間経過後にタイマ割り込みを発生させるタイマセットのイベントであるため）、これら２つのイベントの参照関係は非同期となる。また図１２の他のイベント間の参照関係は、仮想ＣＰＵ２ａの実行時間に依存するため、同期関係となる。
【００７０】
また、参照関係について、関連付けられた両イベントの発生時刻の差を相対時間として保持する。ここで、同期属性の参照関係において、関連付けられた両イベントの発生時刻期間にホストＯＳ実行時間、すなわち「VM_EXIT」から「VM_ENTRY」を含む場合、相対時間からホストＯＳ実行時間を差し引く。この相対時間に基づき、第１の実施の形態と同様にして各イベントの補正後時刻を算出する。
【００７１】
図１４は、本実施の形態のトレースデータ補正部３１により実行されるマージ後トレースデータ補正処理の処理手順を示す。トレースデータ補正部３１は、例えば、トレースデータマージ部２１からマージ後トレースデータ２６が与えられると、この図１４に示すマージ後トレースデータ補正処理を開始し、まず、マージ後トレースデータ３０の先頭から順に、ゲストＯＳ１０上のイベントＥを１つ取り出す（Ｓ２０）。
【００７２】
続いて、トレースデータ補正部３１は、取り出したイベントＥが「TASK_SW」イベントであるか否かを判定する（Ｓ２１）。そしてトレースデータ補正部３１は、この判断で否定結果を得るとステップＳ２３に進む。
【００７３】
これに対して、トレースデータ補正部３１は、ステップＳ２１の判断で肯定結果を得ると、その「TASK_SW」イベントを「TASK_END」イベントと「TASK_START」イベントとに分割する（Ｓ２２）。例えば、「TASK_SW」イベントがタスク「Ａ」からタスク「Ｂ」にスイッチするイベントである場合、タスク識別子としてタスク「Ａ」を有する「TASK_END」イベントと、タスク識別子としてタスク「Ｂ」を有する「TASK_START」イベントとに分割する。「TASK_START」イベント及び「TASK_END」イベントは、分割前の「TASK_SW」イベントと同一のイベント発生時刻を有する。
【００７４】
次いで、トレースデータ補正部３１は、要因定義テーブル４０（図１５）を参照し、当該イベントＥの要因となるイベントを過去のイベントから探索し、探索したイベントをイベントＥｆとする（Ｓ２３）。
【００７５】
この後、トレースデータ補正部３１は、イベントＥｆからイベントＥへの参照を作成し、イベントＥｆとイベントＥとのイベント発生時刻の時間差を相対時間としてセットする。また、トレースデータ補正部３１は、要因定義テーブル４０に従い、当該参照の属性として同期、または非同期をセットする（Ｓ２４）。
【００７６】
続いて、トレースデータ補正部３１は、イベントＥが最後のイベントであるか否かを判定する（Ｓ２５）。そしてトレースデータ補正部３１は、この判断で否定結果を得るとステップＳＰ２０に戻り、この後、ステップＳ２０で取得するイベントＥを未処理の他のイベントに順次切り替えながら、ステップＳ２０〜ステップＳ２５の処理を繰り返す。
【００７７】
そしてトレースデータ補正部３１は、やがてすべてのイベントについてステップＳ２０〜ステップＳ２５の処理を実行し終えることによりステップＳ２５で肯定結果を得ると、マージ後トレースデータ３０の先頭から順に、「VM_EXIT」と「VM_ENTRY」との対を１つずつ取得する。そして、トレースデータ補正部３１は、ステップＳ２４において構築した参照関係について、参照元イベントのイベント発生時刻から参照先イベントのイベント発生時刻までの間に「VM_EXIT」から「VM_ENTRY」の期間を含み、かつ同期属性である参照をすべて検出する（Ｓ２６）。
【００７８】
次いで、トレースデータ補正部３１は、ステップＳ２６で検出した個々の参照について、第１の実施の形態と同様に「VM_EXIT」から「VM_ENTRY」までの時間差を参照の相対時間から減算する（Ｓ２７）。
【００７９】
さらにトレースデータ補正部３１は、各イベント間の参照をたどり、参照元の補正後イベント発生時刻に当該参照の相対時間を加算した値を、参照先の補正後イベント発生時刻とする（Ｓ２８）。またトレースデータ補正部３１は、各イベントについて、補正後イベント発生時刻順にソートし、かくして得られたソート後のマージ後トレースデータ３０（図１２）を補正後トレースデータ３２（図４）として出力する（Ｓ２９）。そしてトレースデータ補正部３１は、この後、このマージ後トレースデータ補正処理を終了する。
【００８０】
図１５は要因定義テーブル４０の構成例を示す。要因定義テーブル４０は、各イベントについて、そのインベントの要因イベントと、そのイベントと当該要因イベントとの参照関係（同期又は非同期）とが予め定義されたテーブルであり、イベント種別欄４０ａ、条件欄４０ｂ、要因イベント欄４０ｃ及び属性欄４０ｄを備えて構成される。
【００８１】
そしてイベント種別欄４０ａには、各イベントのイベント種別が格納される。この場合において、「TASK_SW」イベントは「TASK_END」イベントと「TASK_START」イベントとに分割して要因定義テーブルに登録される。
【００８２】
また要因イベント欄４０ｃには、対応するイベントの要因イベントが格納され、条件欄４０ｂには、対応する要因イベントが対応するイベントに対する発生要因となる条件が格納される。さらに属性欄４０ｄには、対応するイベントと対応する要因イベントとの参照関係が同期及び非同期のいずれであるかを表す情報が格納される。
【００８３】
例えばあるタスクの「TASK_START」イベントに着目しているとき、そのタスクが最後に動作していたときのタスクの状態が「BLOCKED」であった場合、そのタスクを起床させる要因となる「WAKEUP」イベントがあるはずである。これは要因定義テーブル４０の上から二つ目のケースに該当する。「これら２つのイベントを結びつける参照関係の属性は属性欄４０ｄを見ると「同期」属性となっている。そのため、「WAKEUP」から「TASK_START」の期間に「VM_EXIT」と「VM_ENTRY」の対で示されるホストＯＳ実行時間を含む場合、図１４のステップＳ２７における相対時間の減算対象となる。また、タイマのセット（「TIMER_SET」）からタイマ割込み（「INTR」）までの時間のように、その時間差が仮想ＣＰＵ２ａ上の実行時間に依存しない因果関係がある場合、「非同期」属性とする。
【００８４】
なお、仮想計算機１ａ上でのタイマのセットは結果的に仮想化されたタイマデバイスへの操作となるため、実際には一旦ホストＯＳ１１側に制御が遷移し、タイマデバイスのエミュレーションを行うことになる。従って、ホストＯＳ１１側でタイマセットに相当するイベントを記録し、これをゲストＯＳ１０上の「TIMER_SET」イベントに代用してもよい。
【００８５】
また、「TASK_SW」の付随情報３０ｆ（図１２）として、スイッチ前のタスクがタイムスライスを使い果たしたか、又は、より優先度の高いスイッチ先タスクによってプリエンプトされたかを区別するための情報を記録し、この情報を要因定義テーブル４０に追加してもよい。例えば、もし当該「TASK_START」イベントが、スイッチ前タスクがタイムスライスを使い果たしたことに起因する場合、直前の「TASK_START」を要因イベントとする非同期属性の因果関係を作成する。これにより、スイッチ先タスクの優先度がスイッチ前タスクの優先度より低い場合、スイッチ先タスクが仮想ＣＰＵ２ａ上での実行を開始するまでの待ち時間をより正確に推定することができる。
【００８６】
図１６は本実施形態において、図１２について上述したマージ後トレースデータ３０を補正する際に構築する参照関係を図示したものである。図１６（ａ）はステップＳ２６を開始した時点の状態、図１６（ｂ）はステップＳ２７を実施した後の状態を示している。矢印は参照元のイベントから参照先イベントを指しており、特に実線は同期属性、破線は非同期属性の因果関係を表している。横軸は時刻を表しており、矢印の横方向の長さはイベント間の相対時間に比例した長さとしている。また、カッコ付きの数値は相対時間を表している。斜線で網掛けとなっている範囲は、「VM_EXIT」から「VM_ENTRY」のペアで示されるホストＯＳ１１上での実行期間を示している。
【００８７】
図１６（ａ）において、最初の「TIMER_SET」イベントから「INTR」イベントへの参照関係は要因定義テーブル４０（図１５）の上から５つ目の定義に基づき作成されたものであり、その参照関係の属性は「非同期」属性となる。また、これら２つのイベント間の相対時間は「45」である。次の「INTR」からタスク「Ｂ」を起床させる「WAKEUP」イベントへの参照関係は要因定義テーブル４０の上から４つ目の定義に基づき作成されたものであり、その参照関係の属性は「同期」属性となる。タスク「Ｂ」を開始する「TASK_START」イベントは、それを起床させる上記「WAKEUP」イベントが要因イベントであり、要因定義テーブル４０の上から２つ目の定義により、その参照関係の属性は「同期」属性となる。
【００８８】
その後のタスク「Ａ」を起床させる「WAKEUP」イベントは、１つ前の「TASK_START」イベントが要因イベントであり、要因定義テーブル４０の上から３つ目の定義により、その参照関係の属性は「同期」属性となる。タスク「Ｂ」を終了する「TASK_END」イベントは、要因定義テーブル４０のイベント種別４０ａが「上記以外」である定義に該当するので、要因イベントは１つ前の「WAKEUP」イベントであり、その参照関係の属性は「同期」属性になる。次のタスク「Ａ」を実行する「TASK_START」イベントは、要因定義テーブル４０の一番上の定義により、直前の「TASK_END」が要因イベントであり、参照関係の属性は「同期」属性になる。最後のタスク「Ａ」の実行を終了する「TASK_END」イベントは、イベント種別４０ａの「上記以外」に該当するので、属性は「同期」属性になる。残りについても同様である。
【００８９】
図１６（ａ）で「同期」属性となったイベントについて時刻補正を行った結果が図１６（ｂ）である。「INTR」イベントからタスク「Ｂ」を起床させる「WAKEUP」イベントまでに、「VM_EXIT」及び「VM_ENTRY」の対が存在し、時間差は「10」である。よって、「INTR」イベントから「WAKEUP」イベントまでの時間差「15」から「10」を減算した時間差「５」が実際の処理時間になる。
【００９０】
また、タスク「Ｂ」の実行を開始する「TASK_START」イベントから「WAKEUP」イベントまでの間に「VM_EXIT」及び「VM_ENTRY」の対が存在し、時間差は「10」である。よって、「TASK_START」イベントから「WAKEUP」イベントまでの時間差「30」から「10」を減算した時間差「20」が処理時間になる。
【００９１】
さらに「WAKEUP」イベントからタスク「Ｂ」の実行を終了する「TASK_END」イベントまでの間に「VM_EXIT」及び「VM_ENTRY」の対が存在し、時間差は「10」である。「WAKEUP」イベントから「TASK_END」イベントまでの時間差「20」から「10」を減算した時間差「10」が処理時間になる。このように求めた時間を用いて補正後イベント発生時刻をセットする。
【００９２】
以上のように本実施形態では、イベントＥの要因となるイベントＥｆの参照関係において、イベント発生時刻の補正に該当するイベントを探索し、「VM_EXIT」と「VM_ENTRY」との時間差に基づきイベント発生時刻を補正する。これにより、タスクの実行時間に加えて、タスクの実行開始待ちの時間も補正し、仮想計算機１ａ上で動作させたシステムを物理計算機１上で動作させた場合における処理を推定したトレースデータを得ることができる。従って、本実施の形態によれば、仮想計算機１ａ上で取得したトレースデータを容易に、かつ第１の実施の形態に比べてより正確に解析を行うことができる。
【００９３】
（３）他の実施の形態
なお上述の第１及び第２の実施の形態においては、本発明を図１のように構成された物理計算機１に適用するようにした場合について述べたが、本発明はこれに限らず、要は、仮想化環境を提供可能な種々の構成の物理計算機に広く適用することができる。
【００９４】
また上述の第１の実施の形態においては、図９について上述した手順により、また上述の第２の実施の形態においては、図１４について上述した手順によりマージ後トレースデータを補正するようにした場合について述べたが、本発明はこれに限らず、トレースデータ補正部２２，３１が、これ以外の手順によりマージ後トレースデータを補正するようにしても良い。
【産業上の利用可能性】
【００９５】
本発明はトレースデータ編集装置及び方法に関し、例えば、仮想化環境を提供する物理計算機に適用して好適なものである。
【符号の説明】
【００９６】
１……物理計算機、１ａ……仮想計算機、２……ＣＰＵ、２ａ……仮想ＣＰＵ、１０，１０ａ，１０ｂ……ゲストＯＳ、１１……ホストＯＳ、２０……トレースデータ編集部、２１……トレースデータマージ部、２２，３１……トレースデータ補正部、２３……トレースデータ表示部、２４……ゲストトレースデータ、２５……ホストトレースデータ、２６，３０……マージ後トレースデータ、２７，３２……補正後トレースデータ。
【図１】
0006510430.tif 000002
【図２】
0006510430.tif 000003
【図３】
0006510430.tif 000004
【図４】
0006510430.tif 000005
【図５】
0006510430.tif 000006
【図６】
0006510430.tif 000007
【図７】
0006510430.tif 000008
【図８】
0006510430.tif 000009
【図９】
0006510430.tif 000010
【図１０】
0006510430.tif 000011
【図１１】
0006510430.tif 000012
【図１２】
0006510430.tif 000013
【図１３】
0006510430.tif 000014
【図１４】
0006510430.tif 000015
【図１５】
0006510430.tif 000016
【図１６】
0006510430.tif 000017