(57)【要約】【課題】情報処理装置の性能に影響する事象を検出する処理において、収集された動作情報を効率的に解析できるようにする。【解決手段】プロセッサが、仮想マシンでのプログラム実行時に所定のサンプリング周期で取得した動作情報に含まれる１以上の識別子またはレジスタ値を基に前記動作情報を集計するためのキー情報を作成し、作成されたキー情報にしたがって前記取得した動作情報を集計して、キー情報の集計値を算出する。そして、キー情報の集計値が所定の条件を充足する場合に、プロセッサは、キー情報に含まれる前記１以上の識別子またはレジスタ値を前記仮想化プログラムまたは前記１以上の仮想マシンのそれぞれで実行されるプログラム内で定義された名前識別子に対応付けて前記キー情報の集計値とともに出力する。【選択図】図８
2018194988.tif 000002
【特許請求の範囲】
【請求項１】
メモリと１以上のプロセッサとを備え、前記１以上のプロセッサの少なくとも１つが前記メモリに格納された命令にしたがって前記プロセッサを１以上の仮想マシンとして動作させる仮想化プログラムを実行する情報処理装置であって、前記１以上のプロセッサの１つが、
前記１以上の仮想マシンでのプログラム実行時に所定のサンプリング周期で取得した動作情報に含まれる１以上の識別子またはレジスタ値を基に前記動作情報を集計するためのキー情報を作成し、前記作成したキー情報にしたがって前記取得した動作情報を集計して、前記キー情報の集計値を算出することと、
前記キー情報の集計値が所定の条件を充足する場合に、前記キー情報に含まれる前記１以上の識別子またはレジスタ値を前記仮想化プログラムまたは前記１以上の仮想マシンのそれぞれで実行されるプログラム内で定義された名前識別子に対応付けて前記キー情報の集計値とともに出力することと、を実行する情報処理装置。
【請求項２】
前記動作情報に含まれる１以上の識別子またはレジスタ値は、前記プロセッサ上で前記仮想マシンを実行するときのプロセスの識別情報と前記仮想マシン上のプロセスに一意に対応するレジスタ値とを含む請求項１に記載の情報処理装置。
【請求項３】
メモリと１以上のプロセッサとを備え、前記１以上のプロセッサの少なくとも１つが前記メモリに格納された命令にしたがって、前記プロセッサを１以上の仮想マシンとして動作させる仮想化プログラムを実行する情報処理装置であって、前記１以上のプロセッサの１つが、
前記１以上の仮想マシンでのプログラム実行時に所定のサンプリング周期で取得した動作情報に含まれる１以上の識別子またはレジスタ値を基に前記動作情報を集計するためのキー情報を作成し、前記作成したキー情報にしたがって前記取得した動作情報を集計して、前記キー情報の集計値を算出することと、
前記キー情報の集計値が所定の条件を充足する場合に、前記キー情報に含まれる前記１以上の識別子またはレジスタ値を前記仮想化プログラムまたは前記１以上の仮想マシンのそれぞれで実行されるプログラム内で定義された名前識別子に対応付けて前記キー情報の集計値とともに出力することと、を実行する情報処理方法。
【請求項４】
メモリと１以上のプロセッサとを備え、前記１以上のプロセッサの少なくとも１つが前記メモリに格納された命令にしたがって、前記プロセッサを１以上の仮想マシンとして動作させる仮想化プログラムを実行する情報処理装置であって、前記１以上のプロセッサの１つが、
前記１以上の仮想マシンでのプログラム実行時に所定のサンプリング周期で取得した動作情報に含まれる１以上の識別子またはレジスタ値を基に前記動作情報を集計するためのキー情報を作成し、前記作成したキー情報にしたがって前記取得した動作情報を集計して、前記キー情報の集計値を算出することと、
前記キー情報の集計値が所定の条件を充足する場合に、前記キー情報に含まれる前記１以上の識別子またはレジスタ値を前記仮想化プログラムまたは前記１以上の仮想マシンのそれぞれで実行されるプログラム内で定義された名前識別子に対応付けて前記キー情報の集計値とともに出力することと、を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、およびプログラムに関する。
【背景技術】
【０００２】
情報処理装置がＣＰＵ（Central Processing Unit）等のプロセッサでプログラムを実
行するときのプロセッサの使用率、占有率等（以下、頻度情報という）を算出するため、一定の周期でプロセッサの動作情報を収集することが行われる。収集された動作情報は、解析され、プログラムあるいはプログラム中の関数等によるプロセッサの使用率、あるいはリソースを使用するときのプログラム間、プログラム内の関数間での占有割合等が算出される。このような頻度情報等を算出するため、プロファイラと呼ばれるプログラムがプロセッサで実行される。さらに、算出された頻度情報を基に、情報処理装置の稼働中の性能に影響する問題を検出できる技術が提供されている。そして、このプロファイラの技術は、仮想マシン環境を有するシステムでも用いられている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−２２３４５１号公報
【特許文献２】特開２０１１−１５０７３６号公報
【特許文献３】特開２０１０−１３４５５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、仮想マシン環境を有するシステムにおいては、プロセッサの動作情報を収集する処理よりも、収集された動作情報を解析する処理の方が時間を要するため、プロセッサの動作情報を収集する処理と解析する処理とを並行して時間的にオーバーラップさせてバランスよく連続実行できない場合がある。そこで、本発明は、仮想マシンシ環境を有する情報処理装置の稼働中の性能に影響する事象の発生を検出する処理において、情報処理装置のプロセッサの動作情報の収集と解析とが時間的にバランスよく連続実行できるようにするため、収集されたプロセッサの動作情報を効率的に解析できるようにすることを目的とする。
【課題を解決するための手段】
【０００５】
開示の技術の一側面は、メモリと１以上のプロセッサとを備え、前記１以上のプロセッサの少なくとも１つが前記メモリに格納された命令にしたがって前記１以上のプロセッサを１以上の仮想マシンとして動作させる仮想化プログラムを実行する情報処理装置によって例示される。本情報処理装置では、１以上のプロセッサの１つが、１以上の仮想マシンでのプログラム実行時に所定のサンプリング周期で取得した動作情報に含まれる１以上の識別子またはレジスタ値を基に前記動作情報を集計するためのキー情報を作成し、作成されたキー情報にしたがって前記取得した動作情報を集計して、キー情報の集計値を算出する。そして、キー情報の集計値が所定の条件を充足する場合に、この１以上のプロセッサの１つは、キー情報に含まれる前記１以上の識別子またはレジスタ値を前記仮想化プログラムまたは前記１以上の仮想マシンのそれぞれで実行されるプログラム内で定義された名前識別子に対応付けて前記キー情報の集計値とともに出力する。
【発明の効果】
【０００６】
本情報処理装置によれば、仮想マシン環境を有する情報処理装置の稼働中の性能に影響する事象の発生を検出する処理において、収集されたプロセッサの動作情報を効率的に解
析できる。
【図面の簡単な説明】
【０００７】
【図１】計算機の性能イベントのサンプリングと性能解析を実行するための計算機の構成を例示する図である。
【図２】コンピュータシステムにおける連続プロファイル処理を例示する図である。
【図３】データ収集、分析、および異常検知を並列に実行する場合の処理の流れを例示する図である。
【図４】比較例による処理と、実施形態による処理を対比する説明図である。
【図５】シンボル解決の処理を例示する図である。
【図６】実施形態の情報処理装置の構成を例示する図である。
【図７】解析に使用するサンプリングデータを例示する図である。
【図８】比較例の処理と、実施形態の処理を対比する図である。
【図９】処理例２における解析プログラムの処理を例示するフローチャートである。
【図１０】処理例３における解析プログラムの処理を例示するフローチャートである。
【発明を実施するための形態】
【０００８】
以下、図面を参照して、一実施形態に係る情報処理装置について説明する。以下の実施形態の構成は例示であり、本情報処理装置は実施形態の構成には限定されない。以下、まず、比較例を説明し、比較例に対する改善として実施形態を説明する。
［比較例］
【０００９】
図１に、比較例に係る計算機の性能イベントのサンプリングと性能解析を実行するための計算機の構成を例示する。ここで、性能イベントとは、計算機の性能を監視するために、計算機から取得される計算機のリソースの状態を示す情報、あるいは計算機の様々な処理の実行を示す情報といえる。性能イベントとしては、ＣＰＵの１サイクルの完了、ＣＰＵの命令実行完了、キャッシュミス、ページフォルト等を例示できる。性能イベントのサンプリングの結果として、ＣＰＵの使用率、実行命令数、キャッシュミスの回数、ページフォルト回数等が取得される。
【００１０】
例えば、計算機上で実行されるプログラムごと関数ごとのＣＰＵ使用率は以下のように取得される。例えば、ＣＰＵは、Ｐｅｒｆｏｒｍａｎｃｅ  Ｍｏｎｉｔｏｒｉｎｇ  Ｃｏｕｎｔｅｒ（ＰＭＣ）と呼ばれるレジスタを有する。また、ＣＰＵは、ＰＭＣで監視するイベントの種類及びカウンタ上限値を設定するレジスタを有する。ＰＭＣのカウンタが設定された上限値を超えるとオーバーフロー割り込みが発生する。オーバーフロー割り込みにより、ＯＳカーネル中のドライバ（ｓａｍｐｌｉｎｇ  ｄｒｉｖｅｒ）が起動されるので、ドライバは、起動されたタイミングで種々の情報、例えば、実行中のプロセスのＩＤ、実行中の命令のメモリアドレス（以下、命令アドレス）であるプログラムカウンタ、その他のレジスタの値等を採取できる。ドライバは、採取した情報（採取データという）を主記憶に保持する。このようにして、オーバーフロー割り込みが発生するごとに、実行中のプロセスのＩＤ、実行中の命令アドレス、その他のレジスタ値等が採取される。
【００１１】
なお、ハードウェアタイマ割り込みを利用して、タイムベースでプログラムカウンタ（ＰＣ）のサンプリングを行なって、プログラムの問題箇所を同定可能である。このようなハードウェアタイマ割り込みを利用する処理ではプログラム中で問題が発生している箇所が検知されえるが、どんなイベントによって、問題が発生しているかなどの情報は提供されない。一方、ＰＭＣを用いることで、プログラムカウンタによる問題箇所とともに、その問題を引き起こした原因に関連する可能性のあるイベントの種類が特定されることになる。
【００１２】
図１では、さらに採取された情報を基にプログラムごとのＣＰＵ使用率を解析する処理が例示されている。ここでは、ＣＰＵにおいて、プログラムＡ、Ｂ、Ｃが動作中であったと想定する。また、オーバーフロー割り込みが１ｍｓごとに発生する場合を想定する。すると、図１でＯｖｅｒｆｌｏｗ割り込み（Ｓａｍｐｌｉｎｇ割り込み）と記載された矢印のタイミングでドライバが起動され、実行中のプロセスのＩＤと、命令アドレス（例えば、プログラムカウンタ値）が採取される。実行中のプロセスのＩＤと、命令アドレスが特定できれば、そのプロセスで実行されているプログラムの実行形式（バイナリファイル）から、実行中の関数、あるいは、実行中の命令が特定できる。したがって、ドライバによって採取された情報を集計すると、図１の表のように、プログラムごと関数ごとにイベントのサンプリング数、例えば、ＣＰＵの使用率が取得される。ここで、ＣＰＵの使用率は、採取データの採取期間における、複数プログラム間でのＣＰＵ占有時間の割合ということができる。さらに、実行命令回数、キャッシュミス回数等も上記と同様の手順で取得できる。なお、図１の表のような性能情報の内訳を示す情報をプロファイルと呼ぶ。ここで、内訳は、例えば、情報システム内のＣＰＵごとの内訳、ＣＰＵごとプロセスごとの内訳、ＣＰＵごとプロセスごと関数ごとの内訳等が例示できる。
【００１３】
取得された性能イベントの収集結果を解析し、異常箇所の特定を効率的に実行するため、性能プロファイラ（以下、単にプロファイラ）と呼ばれる解析支援ツールが提供されている。性能プロファイラは、プロセス単位や関数単位での上述のような実行比率情報（プロファイル）を提供し、表示する。
【００１４】
プロファイラは、問題が発生する可能性のある環境にて、例えば、１ミリ秒間隔で６０秒間のデータ採取（サンプリング測定）を行い、サンプリングデータを基に統計解析を行う。さらに、プロファイラは、アプリケーションの「挙動変化の把握」や「間欠障害の発見」のために時系列解析手法を用いる。
【００１５】
ところで、非仮想化環境では一つの物理マシンに一つのＯＳ環境が動作している。非仮想化環境に対して、クラウドと呼ばれるコンピュータシステムの基盤となっている仮想化環境が利用されている。仮想化環境は、一つの物理マシン上に複数の仮想マシン（Virtual Machine(ＶＭ)）および複数のOperating System(ＯＳ)環境が動作し、複雑で大規模な
環境となっている。そのために、クラウドでの性能異常検知と走行ソフトウェア上の問題箇所（ｈｏｔｓｐｏｔ）特定は、非仮想化環境での性能異常検知と問題箇所の特定と比べて困難になってきている。
【００１６】
また、複数ＶＭで同じ物理リソースを共有するため、異常要因が他ＶＭからの干渉による場合もある。したがって、問題調査時には既に異常が解消していて調査そのものが行えない場合もある。即ち、問題再現が困難なため調査そのものができず、問題解決に時間がかかることも生じ得る。
【００１７】
図２は、以上のようなコンピュータシステムにおける連続プロファイル処理を例示する図である。この処理では、サンプリング測定（データ収集、以下（Ａ）収集と呼ぶ）と、サンプリングされたデータの解析および異常判定（以下、（Ｂ）分析と呼ぶ）が連続して繰り返し実行される。ここで、サンプリングされたデータの解析は、プログラムを実行するプロセスやプログラム内の関数単位での頻度集計等を含む。また、異常判定は、異常検知とも呼ばれ、頻度集計された結果に基づき、コンピュータシステム内に何らかの異常が発生していると判断することをいう。なお、「（Ａ）収集」は被測定マシンで実行されるが、「（Ｂ）分析」の処理は、専用のマシンで実行することが可能である。したがって、「（Ａ）収集」と「（Ｂ）処理」を並列に実行することも可能である。
【００１８】
図３に、データ収集、分析、および異常検知（異常判定の結果出力）を並列に実行する場合の処理の流れを例示する。滞りなく図３の処理を繰り返し周期的に実行するためには、データ収集のためのサンプリング期間（例えば、Ｔ秒）に対して、解析と異常検知をサンプリング期間内で実行することが目標となる。
＜測定結果例＞
以下、データ収集のためのサンプリング期間と、解析と異常検知の処理時間の実測値を例示する。
（１）ここでサンプリングデータは1ms周期で30秒間採取されたものである。つまり、「
（Ａ）収集」の時間は３０秒である。
（２）100ms単位の時分割での時系列解析が実施された。つまり、30秒間に300回の計算の契機がある。
（３）この処理例では、プロファイルを生成する対象となるエントリを関数とし、エントリ数を100とする。
【００１９】
（４）ＣＰＵおよびＯＳは、ＣＰＵ：Intel(登録商標) Xeon(登録商標) E5-2697 v3（2.60GHz）, 14coresであり、ＯＳ：CentOS Linux（登録商標） release 7.2 64bit （kernel
3.10.0-327.18.2.el7.x86_64）である。
【００２０】
（５）解析と異常判定の時間（「（Ｂ）分析」の時間）のうち解析処理時間だけでも、物理マシン上のホストＯＳ（またはハイパーバイザ）環境に関する解析処理時間が約８秒であり、仮想マシン上のゲストＯＳ環境１個についての解析処理時間が４秒である。したがって、１台の物理マシンに２０台の仮想マシンを稼働させたケースでは、「（Ｂ）分析」の時間のうち解析時間だけでも、概ね８＋４＊２０＝８８秒であった。また、仮想マシン数が増加すると、この時間が増加する。したがって、図１に例示した通常の解析および異常検知の手法では、図３に例示したデータ収集、分析、および異常検知（異常判定の結果出力）を並列に滞りなく実施することは困難である。
＜代替案＞
【００２１】
そこで、仮想マシンについてのサンプリングデータの分析は実行せず、代表としてホストＯＳ（または、ホストマシンのハイパーバイザ）のプロファイル結果のみを分析することが考えられる。そうすると、処理時間の要件は満たせるので、図３に例示したデータ収集、分析、および異常検知（異常判定の結果出力）を並列に滞りなく実施することが可能である。また、あるＶＭに対して他ＶＭからの干渉（他ＶＭのＣＰＵ使用率異常）による異常も検知可能（観測可能）である。
しかし、自ＶＭ内に閉じた異常はホストレベルには現れないケースもあり検知できない。
【００２２】
例えば、あるＶＭ−Ａに対して、ホストレベルから見えるＶＭ−Ａの物理ＣＰＵ使用率は３０％で一定であったとしても、ＶＭ−Ａ内部では正常時と異なる関数ＡがＶＭ−Ａの仮想ＣＰＵを１００％専有する障害が起こっているかもしれない。
＜比較例による処理の課題＞
したがって、仮想マシン内のプログラムの挙動まで反映し、かつ「解析時間＜収集時間」の要件を満たす解析処理の実現が課題となる。
［実施形態］
【００２３】
以下、図４から図１０により、一実施形態に係る情報処理装置を例示する。図４は、比較例による処理と、実施形態による処理を対比する説明図である。図４の上側のフローは、比較例でのプロファイラの処理を例示し、下側のフローは本実施形態でのプロファイラの処理を例示する。本実施形態のプロファイラは、サンプリングプログラムと解析プログラムを含む。本情報処理装置は、プロファイラにしたがって、以下の情報処理方法を実行
する。
【００２４】
上記比較例を含めて、通常のプロファイラの処理では、情報処理装置は、データ収集後に、シンボル解決（シンボライズともいう）を実施し、シンボル解決後に解析を実行する。そして、情報処理装置による解析結果の出力を人が見て判断する、ということが行われる。すなわち、従来のプロファイラの処理では、人が解析結果を見て、異常かどうかの判断や、要因の検討を行うことが想定されている。このため、情報処理装置は、解析を実行する前に、シンボル解決を実行することが前提となっており、頻度集計等の解析をシンボルに基づいて実行する。ここで、頻度集計とは、複数のプログラム間あるいは複数の関数間等におけるＣＰＵ等のリソースの占有割合等を計算する処理をいう。
【００２５】
また、シンボルとは、プロセス名、あるいはプロセスで実行されるプログラム名、プログラム内の関数名、変数名等の名前識別子である。シンボル解決とは、情報処理装置のＣＰＵ、あるいは、ＯＳ等が処理対象を特定するための識別情報、例えば、プロセスＩＤ、レジスタ値、命令アドレス等をプロセス名、あるいは、プログラム内の名前識別子に対応づけること、あるいは、変換すること等をいう。ここで、サンプリングでは、命令アドレスはプログラムカウンタから収集されるので、命令アドレスもレジスタ値ということもできる。情報処理装置がサンプリングデータのシンボル解決を実行することで、プロファイラのユーザは、サンプリングデータの解析結果から、どこに異常があるかを判断できるのである。ただし、シンボル解決は、例えば、命令アドレスとシンボルとの対応関係を検索する処理を含むため、時間を要する。
【００２６】
図５にシンボル解決の処理を例示する。ここでは、例えば、情報処理装置が実行するプロファイラにより、プロセスIdentifier (以下、ＰＩＤ)と、ＣＰＵが実行中の命令の命
令アドレスが得られるとする。また、シンボル解決として、関数単位のプロファイルの解析を想定し、命令アドレスから関数を特定する処理を例示する。プロファイラは、ＯＳからＯＳ情報（OS info）として、ＰＩＤ：プログラム名：プログラムのオブジェクトファ
イルのファイルパスを対応付けて取得する。したがって、プロファイラはＰＩＤから、プログラム名（例えば、プログラムＡ）を特定する。
【００２７】
また、プロファイラは、ＯＳ情報から、オブジェクトファイルのファイルパス、すなわち、ファイルシステム上の存在場所を特定する。したがって、プロファイラは、ＰＩＤが分かると、当該プログラムのオブジェクトファイルにアクセスし、シンボルテーブルを取得する。シンボルテーブルには、シンボル名（関数、あるいは変数等の名称）と、シンボルが配置されるオブジェクト内の先頭アドレスが記載されている。
【００２８】
また、プロセスのメモリ空間上で、各オブジェクトファイルのプログラムが配置される先頭アドレスはプロセス情報（Process Info）のメモリマップに記載されている。したがって、プロファイラは、プロセス情報（Process Info）に記載されているプログラムの先頭アドレスと、シンボルテーブル内の各シンボルのオブジェクトファイル内先頭アドレスから、各シンボル、例えば、関数の先頭アドレスを認識できる。一方、各シンボルの末尾のアドレスは、シンボルテーブルで当該シンボルの次のシンボルの先頭アドレスの直前のアドレスとして把握できる。以上から、プロファイラは、ＰＩＤと命令アドレスを含むサンプリングデータを取得すると、各サンプリングデータ中の命令アドレスに関数名を対応付けることができる。
【００２９】
一方、本実施形態では、人が必ずしもすべての解析結果を判断することを前提としていない。例えば、情報処理装置が、異常検知エンジン（ソフトウェア）で機械的に異常判定を行う場合には、時間のかかるシンボライズは解析の前に実行しなくてもよい。そこで、図４の下側のフローに例示するように、情報処理装置は、異常検知エンジンにより異常と
判定した解析結果だけをシンボル解決して、ユーザの判断に委ねればよい。そのため、本実施形態では、情報処理装置は、解析処理をするとき、例えば、サンプリングデータを集計するときに、シンボルに代って、情報理装置が認識できる数値、文字列等の値によってサンプリングされた個々のデータを識別する。そして、情報処理装置は、識別されたデータをグルーピングし、集計し、頻度（占有割合等）を計算する。サンプリングデータを情報理装置が認識できる数値、文字列等の値で置き換えたものは、置き換えられた文字列等の値のサンプリングデータとなる。図４では、このような置き換えられた文字列等の値のサンプリングデータを数値列と呼んでいる。そのために、どのような数値を用いて、どのような数値列を作成し、どのように集計するか、あるいは、異常判定に有用な単位でグルーピング化するかが問題となる。
【００３０】
なお、本実施形態では、異常検知エンジンの詳細は省略するが、異常検知エンジンとしては、時系列解析手法、クラスタリングによる手法が提案されている。また、本発明者は、異常検知エンジンとして、エントロピーとマンハッタン距離を用いる方法を提案している。ただし、本実施形態では、異常検知エンジンの詳細の手法に限定がある訳ではない。
【００３１】
エントロピーを用いる方法では、情報処理装置は、例えば、ＣＰＵ使用率を、ＣＰＵを占有する事象の出現確率とみなして、Ｐ（ｘｉ）とし、この出現確率から得られる情報量の期待値（エントロピー）を計算する。そして、前回のサンプリングデータと今回のサンプリングデータでエントロピーに基準以上の変化があった場合に、情報処理装置は、異常である可能性が高いと判定すればよい。
【００３２】
また、同様に、情報処理装置は、異なる時刻間でのプロファイルの集計結果（ＣＰＵ使用率Ｐ（ｘｉ）ｉ＝１，．．．）に対して、マンハッタン距離を計算する。そして、今回計算されたマンハッタン距離（前回のサンプリングデータと今回のサンプリングデータでのマンハッタン距離）から基準以上の変化があった場合に、情報処理装置は、異常である可能性が高いと判定すればよい。
＜構成＞
【００３３】
図６は、本実施形態の情報処理装置の構成を例示する。本情報処理装置は、仮想マシンシステムであり、コントローラマシン１と、複数のホストマシン２−１から２−３等を有する。なお、ホストマシン２−１から２−３等を総称する場合には、単にホストマシン２という。ホストマシン２の数が３個に限定される訳ではない。ホストマシン２はノードとも呼ばれる。
【００３４】
コントローラマシン１は、情報処理装置全体を監視し、制御する。コントローラマシン１は、ＣＰＵ、主記憶装置、外部記憶装置、ディスプレイ、入力装置、通信インターフェース等を有する。コントローラマシンのＣＰＵは、主記憶装置に展開されたコンピュータプログラムを実行し、コントローラマシンとしての処理を実行する。主記憶装置は、ＣＰＵが実行するコンピュータプログラムあるいはＣＰＵが処理するデータを記憶する。外部記憶装置は、ＣＰＵが処理するデータを保存する。ディスプレイはＣＰＵが処理するデータ等を表示する。入力装置は、ユーザの操作を受け付け、ＣＰＵに入力する。通信インターフェースは、ネットワークを通じて、他のホストマシン２等と通信する。図６では、コントローラマシン１としては、１台が例示されているが、コントローラマシン１は複数のコンピュータが連携するシステムであってもよい。
【００３５】
ホストマシン２は、物理ＣＰＵを有する。なお、図６では、ホストマシン２のＣＰＵ以外のハードウェアは省略されているが、ホストマシン２はコントローラマシン１と同様、主記憶装置、外部記憶装置、通信インターフェース等を有する。さらに、ホストマシン２の物理ＣＰＵ上では、ハイパーバイザが実行され、仮想環境が構築される。すなわち、ハ
イパーバイザは、仮想ＣＰＵ等の仮想リソースを含む仮想マシン（ＶＭ）を提供する。各仮想マシン上ではゲストＯＳ（図６では、単にＯＳと記載）が実行され、ゲストＯＳ上でアプリケーションプログラムが実行される。ただし、本実施形態において、情報処理装置がハイパーバイザによって仮想化される仮想マシンシステムに限定される訳ではない。例えば、情報処理装置は、ホストＯＳとホストＯＳ上の仮想化プログラムによって仮想化される仮想マシンシステムであってもよい。
【００３６】
物理ＣＰＵ（および上記コントローラマシン１のＣＰＵ、以下同様）は、ＭＰＵ（Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ）、プロセッサとも呼ばれる。物理ＣＰＵは、単一のプロセッサに限定される訳ではなく、マルチプロセッサ構成であってもよい。また、単一のソケットで接続される単一の物理ＣＰＵがマルチコア構成を有していても良い。上記ホストマシン２（あるいはコントローラマシン１）の少なくとも一部の処理は、物理ＣＰＵ以外のプロセッサ、例えば、Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ（ＤＳＰ）、Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＧＰＵ）、数値演算プロセッサ、ベクトルプロセッサ、画像処理プロセッサ等の専用プロセッサで行われても良い。また、上記ホストマシンの少なくとも一部の処理は、集積回路（ＩＣ）、その他のディジタル回路であっても良い。また、上記ホストマシンの少なくとも一部にアナログ回路が含まれても良い。集積回路は、ＬＳＩ，Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ（ＡＳＩＣ），プログラマブルロジックデバイス（ＰＬＤ）を含む。ＰＬＤは、例えば、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ
Ａｒｒａｙ（ＦＰＧＡ）を含む。物理ＣＰＵ（およびコントローラマシン１のＣＰＵ）の各部は、プロセッサと集積回路との組み合わせであっても良い。組み合わせは、例えば、マイクロコントローラ（ＭＣＵ），ＳｏＣ（Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ），システムＬＳＩ，チップセットなどと呼ばれる。ホストマシン２の物理ＣＰＵおよびコントローラマシン１のＣＰＵは１以上のプロセッサの一例である。ホストマシン２の物理ＣＰＵおよびコントローラマシン１のＣＰＵは、１以上のプロセッサの１つとしてのプロセッサの一例でもある。
＜処理例１＞
【００３７】
以下、実施形態１のコントローラマシンによるサンプリングデータの解析処理を例示する。処理例１では、図６に例示する仮想計算機システムである情報処理装置で収集されたサンプリングデータを仮想マシン上のプロセス単位に解析する処理を例示する。本情報処理装置のホストマシン２では、図１で説明した情報処理装置と同様、オーバーフロー割り込みにより、ハイパーバイザまたはＯＳカーネル中のドライバが起動される。そして、ドライバは、起動されたタイミングで種々の情報、例えば、ホストマシン２で実行中のプロセスのＰＩＤ、ホストマシン２で実行中の命令のメモリのアドレス等を採取する。本情報処理装置のような仮想計算機システムでは、仮想マシンは、ホストマシンの１つのプロセスとして起動される。したがって、ホストマシン２で実行中のプロセスのＰＩＤは、仮想マシンのＩＤとして使用できる。
【００３８】
また、通常、仮想計算機システムでは、セキュリティの観点から、ホストマシン２のハイパーバイザ、あるいはホストマシン２のプロセスは、仮想マシン上のプロセスの情報を取得できない。しかし、本発明者が特許第６０７９３１７（特願２０１３−４３１５８）に示したように、ホストマシン２のプロファイラは、コンテキスト退避領域から、仮想マシンのコンテキスト、例えば、制御レジスタあるいはプログラムカウンタの値を取得できる。例えば、インテル社製のＣＰＵは、ＶＭＭ（Virtual Machine Monitor）と呼ばれる
プログラムを走らせ、その上で仮想マシンを動作させる。このような仮想計算機システムにおいては、例えば、各仮想マシンの実行スケジューリングや、仮想マシン又はハイパーバイザにおける処理の過程で、複数の仮想マシンやハイパーバイザが同じ物理リソースにアクセスすることがある。この場合には、その物理リソースに割り当てられた内容をコン
テキスト退避領域に退避させたり、復元させたりすることによって各仮想マシンにおける処理の連続性が担保されている。
【００３９】
このために、ホストマシン２のＣＰＵは、コンテキスト退避領域と、これを制御するためのコントロールレジスタとを有する。例えば、インテル社製のプロセッサはＣＲ０からＣＲ４までのコントロールレジスタを有する。そのうちのＣＲ３レジスタは、ページ・ディレクトリの物理アドレスを指し、ページテーブルアドレスと呼ばれるアドレス情報を保持する。そして、実行するユーザプロセスが切り替わる毎に、ＣＲ３レジスタが書き換えられることによって、そのプロセス用の拡張ページテーブルが指定される。そして、割り込み処理発生時には、動作中の仮想マシンのＣＲ３のレジスタ値がコンテキスト退避領域に退避される。さらに、割り込み処理が終了して、元の仮想マシンの処理を再開するときには、コンテキスト退避領域のＣＲ３のレジスタ値が再度読み込まれ、プロセスが再開される。従って、ＣＲ３のレジスタの値は、仮想マシン上のプロセスを区別する識別情報として用いることができる。
【００４０】
そこで、本実施形態では、情報処理装置が実行するプロファイラは、以下のような処理を実行する。本実施形態では、プロファイラは、サンプリングプログラムと解析プログラムを含む。ホストマシン２はサンプリングプログラムを実行し、コントローラマシン１は解析プログラムを実行する。
【００４１】
（１）ホストマシン２では、サンプリングプログラムを実行し、ホストマシン２のホストＯＳ上またはハイパーバイザ上で動作しているプロセスのＰＩＤや命令アドレス等を取得する。プロセスの中には仮想マシンプロセスも含まれる。１つの仮想マシンは、ホストＯＳ上またはハイパーバイザ上の１つのプロセスに該当する。（仮想マシンは、ホストＯＳで実行される仮想化プログラムが管理する。）以下、本実施形態では、ハイパーバイザによる仮想マシンを想定して説明がされるが、本実施形態の構成はホストＯＳで実行される仮想化プログラムによる仮想マシンにも適用可能である。
【００４２】
（２）そして、ホストマシン２は、ホストマシン２で取得されるＰＩＤを仮想マシンのＩＤ（以下、ＶＭＩＤ）として利用する。また、ホストマシン２は、ゲストのＣＲ３レジスタ値（＝ページテーブルアドレス値）を仮想マシンのゲストＯＳで実行されるプロセスのＰＩＤの代替とする。
【００４３】
（３）コントローラマシン１は、解析プログラムを実行し、上記収集されたサンプリングデータを仮想マシンのゲストＯＳのプロセス単位で集計する。コントローラマシン１は、仮想マシンのゲストＯＳのプロセスを特定する情報として、「ホストマシン２上でのＰＩＤ値と仮想マシンでのＣＲ３のレジスタ値の連結値」を用いる。すなわち、コントローラマシン１は、この連結値での頻度集計（即ち、一つのＯＳ環境分のプロファイル解析）を行い、結果を異常検知エンジンに入力する。
【００４４】
（４）コントローラマシン１は、異常検知エンジンにおいて、上記解析結果が異常と判定された場合には、シンボル解決を実行する。すなわち、コントローラマシン１は、頻度集計結果のプロファイルにおいて、ホストマシで採取したプロセスＩＤ、あるいは、仮想マシンで採取したＣＲ３のレジスタ値をホストマシン２のプロセス名、仮想マシンでのプロセス名あるいはプログラム名に変換する。すなわち、コントローラマシン１は、仮想マシン上で採取しておいた「ＣＲ３とＰＩＤのマップ情報」や「ゲストＯＳ上のプロセス情報」を用いてシンボル解決を実行する。
【００４５】
（５）ホストマシン２に構築された仮想マシンは、シンボルマップを採取するシンボルマップ採取プログラムを実行し、シンボルマップ採取部として動作する。そして、シンボル
マップ採取部が「ＣＲ３とＰＩＤのマップ情報」や「ゲストＯＳ上のプロセス情報」等を含むシンボルマップ情報を作成する。シンボルマップ採取部の処理手順は、すでに発明者らが特願２０１３−４３１５８において提案した通りである。
【００４６】
すなわち、シンボルマップ情報は仮想マシンのプロセス毎に作成され、ＣＰＵ番号と、プロセスＩＤ（ＰＩＤ）と、ページテーブルアドレスと、スレッドＩＤと、プロセス名と、関数アドレスと、関数名とを有する。シンボルマップ採取部は、プロセスＩＤ、ページテーブルアドレス、スレッドＩＤ、プロセス名を仮想マシン内でプロセス毎に作成されるタスクを管理する管理領域（タスク構造体）から取得する。また、シンボルマップ採取部は、関数アドレスと、関数名をアプリケーションプログラムに対応するオブジェクトファイルから取得する。
【００４７】
コントローラマシン１はホストマシン２のハイパーバイザを介して、上記作成されたシンボルマップ情報を取得する。ハイパーバイザが、仮想マシン上のシンボルマップ採取部によって作成されたシンボルマップ情報を取得するためには、例えば、仮想マシン上のＩＰアドレスを指定したリモートコピーコマンド（UNIX（登録商標）のrcp、Linux（登録商標）のscp等）を実行する。ハイパーバイザは、リモートコピーコマンドにより、仮想マ
シン上のシンボルマップ情報を取得すればよい。また、ハイパーバイザがNetwork File System（ＮＦＳ）のＮＦＳサーバとなり、各仮想マシン上のゲストＯＳ上からゲストＯＳ
上のシンボルマップ採取部によって作成されたシンボルマップ情報をハイパーバイザ上のハードディスク等外部記憶装置に書き込ませるようにすればよい。
（採取されるデータ）
ホストマシン２のサンプリングプログラムが採取するデータは、以下の通りである。
【００４８】
（Ａ）サンプリングデータ
図７に、解析に使用するサンプリングデータを例示する。サンプリングデータは、例えば、１ｍｓ周期で６０秒間程度採取すると、１物理マシンあたり、６万サンプルが採取される。サンプリングデータは、１以上の仮想マシンでのプログラム実行時に所定のサンプリング周期で取得した動作情報の一例である。図７のように、サンプリングデータは、Host
IP（サンプル時のホスト上の命令アドレス）、Host Thread ID(サンプル時のホストのスレッドＩＤ)、Host PID（サンプル時のホスト上のプロセスＩＤ）、Host Return IP1,IP2(サンプル時の命令アドレスの関数の戻りアドレス)、TSC(タイムスタンプ), vPROCESSOR ID(仮想CPUのID)を含む。ホストマシン２のサンプリングプログラムはユーザプログラム
部とホストＯＳのカーネルまたはハイパーバイザ内に組み込まれたサンプリングドライバ（図１）から構成されており、以上のサンプリングデータをハイパーバイザ層において（自分で＝サンプリングドライバで）取得する。
【００４９】
サンプリングデータは、さらに、Guest IP(仮想マシンの命令アドレス)、Guest CR3(仮想マシンのＣＲ３の値)、およびVM EXIT REASON(VM EXIT 要因番号)を含む。ホストマシ
ン２のサンプリングプログラムは、Guest IP(仮想マシンの命令アドレス)、Guest CR3(仮想マシンのＣＲ３の値)、およびVM EXIT REASON(VM EXIT 要因番号)をホストマシン２上
の仮想マシンのコンテキスト退避領域から取得する。
【００５０】
（Ｂ）プロセス情報
プロセス情報は、各ＰＩＤに対応するプロセス名、プロセス内のメモリマップ（仮想メモリ上の関数の先頭アドレス）、オブジェクトファイルのファイルシステム上のパス名等を含む。
【００５１】
（Ｃ）オブジェクトファイル
オブジェクトファイルは、各関数の関数名と先頭位置の相対アドレス（オブジェクトファ
イル内のアドレス）を含む。このような関数名と先頭位置の相対アドレスはシンボルテーブルに定義されている。したがって、コントローラマシン１の解析プログラムは、プロセス情報のメモリマップとオブジェクトファイルを組み合わせた情報を基に、サンプリングデータ中の命令アドレスから関数名を特定できる。
【００５２】
（Ｄ）カーネルのシンボルマップ情報
カーネルのシンボルマップ情報は、ホストマシン２の所定のファイルに格納されている。コントローラマシン１の解析プログラムは、カーネルのシンボルマップ情報を用いて、カーネル内の命令アドレス等からカーネルで使用される関数等を特定できる。
【００５３】
（Ｅ）実行条件、環境情報などの付帯情報
ホストマシン２のサンプリングプログラムは、例えば、ハイパーバイザのバージョン、仮想マシンのリソース等の実行環境をハイパーバイザ層において（自分で）取得する。
【００５４】
図８は、比較例の処理と、実施形態の処理を対比する図である。比較例では、プロファイラがサンプリングおよび解析を実行するものとして説明する。本実施形態では、例えば、図２の構成において、ホストマシン２のＣＰＵがサンプリングプログラムを実行してサンプリングデータを収集する。さらに、図２のコントローラマシン１のＣＰＵが解析プログラムを実行してサンプリングデータを解析するものとして説明する。
【００５５】
比較例におけるプロファイラの処理手順は、以下の通りである。比較例のプロファイラは、Host PIDから仮想マシン（ゲスト）を特定する（Ｃ１）。そして、プロファイラは、該当仮想マシン（ゲスト）のCR3-PIDマップ情報を参照し、全サンプルデータに対して、Guest_CR3を該当ゲスト上のPIDに変換する（Ｃ２）。ここで、Guest_CR3は、仮想マシン（ゲスト）のＣＲ３の値であり、上述のように、ホストマシン２における、仮想マシン（ゲスト）のコンテキストを待避するコンテキスト退避領域から取得できる。
【００５６】
そして、プロファイラは、該当仮想マシン（ゲスト）のプロセス情報を参照し、全サンプリングデータに対し、仮想マシン（ゲスト）上のゲストＯＳが管理するPIDをプロセス
名に変換する（Ｃ３）。そして、プロファイラは、ゲスト毎にプロセス名で頻度集計する（Ｃ４）。以上のようにして、比較例のプロファイラは、仮想マシン（ゲスト）毎に、プロセスごとのＣＰＵリソースの占有割合をプロセス名で提示する。
【００５７】
以上の比較例の処理のうち、Ｃ１からＣ３の処理は、サンプリングデータ中の仮想マシンのＣＲ３のレジスタ値を仮想マシン（ゲスト）上のプロセス名に変換するためのシンボル解決と呼ばれる処理（シンボライズ処理）である。一方、図８の右側のフローは、本実施形態のコントローラマシン１が実行する解析プログラムの処理である。以下、コントローラマシン１が実行する処理を解析プログラムが実行する処理として説明する。
【００５８】
本実施形態では、本解析プログラムは、ホストマシン２でハイパーバイザが管理するプロセスＩＤであるHost PIDの値と仮想マシン（ゲスト）上のＣＲ３であるGuest_CR3の値
を連結した連結値、例えば、文字列を作成する（Ｓ１）。この場合、Host PIDは、ハイパーバイザ上のプロセスに対応するので、ホストマシン２上の仮想マシン（ゲスト）を特定する情報となる。また、Guest_CR3の値は、仮想マシン（ゲスト）上のページ・ディレク
トリの物理アドレスを指す値であり、仮想マシン（ゲスト）上のユーザプロセスを特定する値となる。したがって、Host PIDの値とGuest_CR3の値の連結値は、１以上の仮想マシ
ンが構築されるホストマシン２上で、仮想マシン（ゲスト）上の１つのユーザプロセスを一意に特定する値となる。連結値はキー情報の一例である。Ｓ１の処理は、キー情報を作成することの一例である。
【００５９】
例えば、Host PID=123、Guest_CR3=456の場合は、連結値は、123456という文字列であ
る。ただし、Host PIDの値とGuest_CR3の値の連結値は、文字列としての連結値である必
要はなく、単なるビット列の組み合わせであってもよい。また、Host PIDの値とGuest_CR3の値の連結値は、可逆的に、Host PIDの値とGuest_CR3の値を復元できるものであれば、どのような連結値であってもよい。
【００６０】
そして、解析プログラムは、Ｓ１で求めた連結値で、サンプリングデータの頻度を集計する。端的には、解析プログラムは、サンプリングデータ中の連結値に該当するサンプリングデータのデータ数（サンプル数）を集計する（Ｓ２）。そして、解析プログラムは、異常検知エンジンにより、Ｓ２で求めた頻度集計結果からホストマシン２における異常発生の有無を判定する（Ｓ３）。Ｓ２の処理は、キー情報の集計値を算出することの一例である。Ｓ３の処理は、キー情報の集計値が所定の条件を充足するか否かを判定することの一例である。
【００６１】
Ｓ３で異常ありと判定される場合とは、前回までに集計したサンプリングデータと比較して、特定のユーザプロセスの頻度集計結果が基準値を超えて、大きく変化したような場合である。また、異常ありと判定されるのは、前回まで頻度集計値が低順位であったユーザプロセスの頻度集計結果が基準値を超えて高順位、あるいは高い割合を占めたような場合である。異常検知エンジンが異常発生の有無を判定する方法に限定はない。例えば、異常検知エンジンは、一般的に実施される時系列解析手法、あるいはクラスタリングによる手法を実施してもよい。また、例えば、異常検知エンジンは、本発明者がすでに提案したエントロピーとマンハッタン距離を用いる方法を実行してもよい。
【００６２】
そして、異常がない場合、解析プログラムは、次のサンプリングデータの解析処理を実行する。一方、Ｓ３で異常が検知された場合、解析プログラムは、Ｓ２での頻度集計に用いられたHost PIDの値とGuest_CR3の値のシンボル解決を実行し、シンボル解決されたプ
ロファイルをディスプレイ等に出力する（Ｓ４）。Ｓ３で異常が検知された場合は、キー情報の集計値が所定の条件を充足する場合の一例である。Ｓ４の処理は、キー情報に含まれる１以上の識別子またはレジスタ値を仮想化プログラムまたは１以上の仮想マシンのそれぞれで実行されるプログラム内で定義された名前識別子に対応付けてキー情報の集計値とともに出力することの一例である。
【００６３】
Host PIDの値とGuest_CR3の値は、ホストマシン２のハイパーバイザ（またはホストＯ
Ｓ）のプロセスＩＤ、あるいは仮想マシンのレジスタ値であり、ユーザが理解することが困難な値である。しかし、シンボル解決により、Host PIDの値は、ホストマシン２のプロセス名となり、Guest_CR3の値は、仮想マシンのプロセス名となる。したがって、ユーザ
は、ホストマシン２のどの仮想マシンのどのユーザプロセスで異常とされる状態が検知されたかを判定できる。
【００６４】
また、本実施形態での処理では、異常が検知されない限り、シンボル解決は実施されない。すなわち、異常が検知されるまでのＳ１からＳ３の処理では、解析プログラムは、単にHost PIDの値とGuest_CR3の値の連結値を算出するだけであるので、コントローラマシ
ン１は、十分に高速にＳ１からＳ３の解析処理を実行できる。そして、コントローラマシン１は、問題が検知された場合に、シンボル解決を実行すればよい。したがって、図８の本実施形態の処理（右側の処理）は、比較例の処理（左側の処理）と比較して、問題が検知されない限り、ほぼシンボル解決無しに解析処理を実行できる。したがって、本情報処理装置は、図３に例示したようにサンプリングデータの収集の時間と解析の時間のバランスをとって、仮想マシン環境で性能解析と、異常がなかったことの判定を実行できる。
＜処理例２＞
【００６５】
上記処理例では、コントローラマシン１は、ホストマシン２のＰＩＤであるHost PIDの値と仮想マシン上のＣＲ３のレジスタ値であるGuest_CR3の値の連結値でサンプリングデ
ータを集計した。その結果、コントローラマシン１は、ホストマシン２に構築された仮想マシン上のユーザプロセスを一意に特定して、サンプリングデータを集計し、ホストマシン２上のいずれかの仮想マシンのいずれかのユーザプロセスの異常を検知した。
【００６６】
処理例２では、コントローラマシン１は、解析プログラムにより、ホストマシン２のＰＩＤと、仮想マシン上のＣＲ３のレジスタ値と、仮想マシンの命令アドレスの連結値を用いて、サンプリングデータを集計する。仮想マシン上のＣＲ３のレジスタ値と、仮想マシンの命令アドレスの連結値によって、ホストマシン２の仮想マシンのプロセス内の命令アドレスが一意に特定される。コントローラマシン１は、この連結値で集計した集計結果であるプロファイルを処理例１と同様の異常検知エンジンに入力し、異常検知を実行する。
【００６７】
図９は、処理例２における解析プログラムの処理を例示するフローチャートである。処理例２では、解析プログラムは、Host PIDの値とGuest_CR3のレジスタ値と仮想マシンの
命令アドレスを連結した連結値を作成する（Ｓ１１）。この場合、連結値は、１以上の仮想マシンが構築されるホストマシン２上で、仮想マシン（ゲスト）上の１つのユーザプロセスで実行されるプログラムの命令アドレスを一意に特定する値となる。Ｓ１１の処理は、キー情報を作成することの一例である。
【００６８】
そして、解析プログラムは、Ｓ１１で求めた連結値で、サンプリングデータの頻度を集計する（Ｓ１２）。そして、解析プログラムは、Ｓ１２で求めた頻度集計結果からホストマシン２における異常発生の有無を判定する（Ｓ１３）。Ｓ１２の処理は、キー情報の集計値を算出することの一例である。Ｓ１３の処理は、キー情報の集計値が所定の条件を充足するか否かを判定することの一例である。
【００６９】
そして、異常がない場合、解析プログラムは、次のサンプリングデータの解析処理を実行する。一方、Ｓ１３で異常が検知された場合、解析プログラムは、Ｓ１２での頻度集計に用いられたHost PIDの値とGuest_CR3の値と命令アドレスのシンボル解決を実行し、シ
ンボル解決されたプロファイルをディスプレイ等に出力する（Ｓ１４）。Ｓ１３で異常が検知された場合は、キー情報の集計値が所定の条件を充足する場合の一例である。Ｓ１４の処理は、キー情報に含まれる１以上の識別子またはレジスタ値を仮想化プログラムまたは１以上の仮想マシンのそれぞれで実行されるプログラム内で定義された名前識別子に対応付けてキー情報の集計値とともに出力することの一例である。
【００７０】
例えば、解析プログラムは、仮想マシンのゲストＯＳから取得したGuest_CR3と仮想マ
シン上のＰＩＤのマップを基に、サンプリングデータ中の仮想マシンのGuest_CR3から仮
想マシンのＰＩＤを特定する。また、プロファイラは、仮想マシンのゲストＯＳから取得した仮想マシン上のＰＩＤとプロセス名のマップから仮想マシン上のユーザプロセスのプロセス名、あるいはプロセスで実行されるプログラム名を特定する。また、解析プログラムは、仮想マシンの上のオブジェクトファイルから取得した関数名と命令アドレスのマップを基に、サンプリングデータの命令アドレスを関数名に対応づける。したがって、処理例２では、コントローラマシン１が異常検知エンジンにより異常を検知した場合に、コントローラマシン１は、シンボル解決を実行し、ホストマシン２に構築された仮想マシン上の関数を特定して、問題箇所を提示できる。
＜処理例３＞
【００７１】
処理例３では、Host PIDとGuest_CR3と仮想マシン上のプロセスとして実行されるプロ
グラム中の関数を特定する関数ＩＤとを連結した連結値でサンプリングデータを集計する処理を例示する。ここで、関数ＩＤとは、仮想マシンで実行されるプログラム中の関数を
一意に識別する情報である。処理例３では、コントローラマシン１の解析プログラムは、事前に、プログラムのオブジェクトファイル中から関数の先頭アドレスと、関数のＩＤのマップを作成しておく。また、コントローラマシン１の解析プログラムは、仮想マシンのＯＳからプロセス情報として、メモリマップを取得しておく。メモリマップは、プロセス内のプログラム（オブジェクトファイル）の先頭アドレスを示すので、解析プログラムは、関数ＩＤとプロセス中の命令アドレスのマップを作成できる。したがって、Host PIDとGuest_CR3と関数ＩＤの連結値でサンプリングデータを集計することで、プロファイラは
、ホストマシン２に構築された仮想マシン上で実行されるプログラム中の関数ごとに、サンプリングデータを集計できる。
【００７２】
図１０は、処理例３における解析プログラムの処理を例示するフローチャートである。処理例３では、解析プログラムは、Host PIDの値とGuest_CR3の値と関数ＩＤを連結した
連結値を作成する（Ｓ２１）。関数ＩＤは、プログラム中の関数を一意に特定するＩＤであり、関数名であってもよい。解析プログラムは、事前にメモリマップとプログラムのオブジェクトファイルを基に、命令アドレスから関数を一意に特定するためのマップとして、関数ＩＤと当該関数の命令アドレス（先頭アドレス）との関係を保存する。なお、マップは命令アドレス順にソーティングされるので、各関数の末尾の命令アドレスは、次の関数の先頭アドレスの１つ前のアドレスとして特定される。Ｓ２１の処理は、キー情報を作成することの一例である。
【００７３】
そして、解析プログラムは、Ｓ２１で求めた連結値で、サンプリングデータの頻度を集計する（Ｓ２２）。この場合の集計は、サンプリングデータ中の命令アドレス、即ち、仮想マシンのプログラムカウンタ値を関数ＩＤに対応付ける処理を伴う。したがって、集計結果は、複数の関数間でのＣＰＵの占有割合を示すデータとなる。すなわち、解析プログラムは、関数ＩＤと命令アドレスのマップを基に、サンプリングデータ中の命令アドレスを関数ＩＤに対応づける。この処理は、ある種のシンボル解決ということもできる。したがって、処理例３は、処理例２に対して、解析時に一部のシンボル解決を組み込んだ処理ということもできる。Ｓ２２の処理は、キー情報の集計値を算出することの一例である。
【００７４】
そして、コントローラマシン１は、異常検知エンジンにより、Ｓ２２で求めた頻度集計結果からホストマシン２における異常発生の有無を判定する（Ｓ２３）。Ｓ２３の処理は、キー情報の集計値が所定の条件を充足するか否かを判定することの一例である。
【００７５】
そして、異常がない場合、解析プログラムは、次のサンプリングデータの解析処理を実行する。一方、Ｓ２３で異常が検知された場合、解析プログラムは、処理結果をコントローラマシン１のディスプレイ等に出力する（Ｓ２４）。なお、解析プログラムは、関数ＩＤを関数名に変換して、処理結果をコントローラマシン１のディスプレイ等に出力してもよい。Ｓ２３で異常が検知された場合は、キー情報の集計値が所定の条件を充足する場合の一例である。Ｓ２４の処理は、キー情報に含まれる１以上の識別子またはレジスタ値を仮想化プログラムまたは１以上の仮想マシンのそれぞれで実行されるプログラム内で定義された名前識別子に対応付けてキー情報の集計値とともに出力することの一例である。
＜実施形態の効果＞
【００７６】
以上述べたように、本実施形態によれば、コントローラマシン１は、仮想マシン環境で、ホストマシン２で実行されるプロセスのＰＩＤ、仮想マシン上のＣＲ３、仮想マシンの命令アドレス等を用いて連結値を作成する。この連結値は、ホストマシン２上で、仮想マシンのユーザプロセス、仮想マシンで実行されるプログラムの命令アドレス、あるいは、仮想マシンで実行されるプログラム中の関数を特定するキー情報ということができる。コントローラマシン１は、仮想マシン環境でホストマシン２から取得したサンプリングデータおよびホストマシン２のコンテキスト待避領域から取得した仮想マシンのサンプリング
データを上記連結値で集計する。連結値は、単に、プロセスのＰＩＤ、仮想マシン上のＣＲ３、仮想マシンの命令アドレス等を組み合わせた値であるので、極めて簡易に作成できる。また、連結値は、ホストマシン２上に構築された仮想マシン上のユーザプロセス、ユーザプロセスで実行されるプログラム中の命令アドレス、あるいは、関数を特定する値（キー情報）となる。したがって、本実施形態の処理では、コントローラマシン１は、比較的負荷の重いシンボル解決をしないで、サンプリングデータから頻度情報の集計を行い、異常検知エンジンにより異常判定を実施できる。そして、コントローラマシン１は、異常が検知されたときにシンボル解決を行い、ユーザに、仮想環境での仮想マシン、ユーザプロセス名、プログラム名、関数名等のシンボルとともに、集計されたプロファイルを提示できる。
＜変形例＞
【００７７】
上記実施形態では、コントローラマシン１が解析プログラムを実行し、Host PIDと、Guest_CR3、仮想マシンの命令アドレスあるいは関数ＩＤ等との連結値をキー情報として、
サンプリングデータを集計し、異常を検知し、シンボル解決を実行した。しかし、このような処理がコントローラマシン１の処理に限定される訳ではない。例えば、ホストマシン２上の仮想マシンの１つがサンプリングデータを集計し、異常を検知し、シンボル解決を実行してもよい。ただし、仮想マシンの１つがサンプリングデータを集計し、異常を検知し、シンボル解決を実行する場合には、解析プログラムの処理自体が、サンプリングデータに影響する可能性が生じる。つまり、図６の構成から明らかなように、収集したサンプリングデータの解析と、次のサンプリングデータの収集が同一のホストマシン２で実行される可能性が高まるためである。
【００７８】
《コンピュータが読み取り可能な記録媒体》
コンピュータその他の機械、装置（以下、コンピュータ等）に上記いずれかの機能を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。
【００７９】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリなどのメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスク、ＲＯＭ（リードオンリーメモリ）等がある。さらに、ＳＳＤ（Solid State Drive）は、コンピュータ等から取り外し可能な記録媒体としても、コンピュータ
等に固定された記録媒体としても利用可能である。
【符号の説明】
【００８０】
１    コントローラマシン
２    ホストマシン
【図１】
2018194988.tif 000003
【図２】
2018194988.tif 000004
【図３】
2018194988.tif 000005
【図４】
2018194988.tif 000006
【図５】
2018194988.tif 000007
【図６】
2018194988.tif 000008
【図７】
2018194988.tif 000009
【図８】
2018194988.tif 000010
【図９】
2018194988.tif 000011
【図１０】
2018194988.tif 000012