(57)【特許請求の範囲】
【請求項１】
ハードウェア割り込み機能をもたないカウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの動作情報とを記憶する第１の記憶部と、
一定時間間隔毎に前記積算値と第１の動作情報とを取得して前記第１の記憶部により一時記憶し、今回の積算値が所定値を超えると、前記今回の積算値、一時記憶した前回の積算値および前記所定値に基づいて現在の第２の動作情報または一時記憶した前回の前記第１の動作情報を選択し、選択した前記第１の動作情報または前記第２の動作情報を、第２の記憶部に格納する演算部と、
を有する情報処理装置。
【請求項２】
前記演算部は、前記所定値と前記前回の積算値との第１の差、および、前記今回の積算値と前記所定値との第２の差の比較に応じて、前記第１および前記第２の動作情報の何れかを選択する、請求項１記載の情報処理装置。
【請求項３】
前記演算部は、前記前回の積算値、前記今回の積算値および前記所定値を用いて、前記第１の動作情報または前記第２の動作情報を補正する、請求項１または２記載の情報処理装置。
【請求項４】
前記第１および前記第２の動作情報は、プロセスの識別情報およびプログラムカウンタのアドレス値を含み、
前記演算部は、前記第１および前記第２の動作情報に含まれる前記プロセスの識別情報の比較に応じて、前記アドレス値に対する補正を行うか否かを選択する、
請求項３記載の情報処理装置。
【請求項５】
前記演算部は、前記今回の積算値が前記所定値を超えると、前記今回の積算値から前記所定値を減算する、請求項１乃至４の何れか１項に記載の情報処理装置。
【請求項６】
前記演算部は、他のカウンタからのハードウェア割り込みを前記一定時間間隔毎に受け付け、前記ハードウェア割り込みを受け付けると前記積算値を取得する、
請求項１乃至５の何れか１項に記載の情報処理装置。
【請求項７】
コンピュータに、
ハードウェア割り込み機能をもたないカウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの第１の動作情報とを一定時間間隔毎に取得して第１の記憶部により一時記憶し、
今回の積算値が所定値を超えると、前記今回の積算値、一時記憶した前回の積算値および前記所定値に基づいて現在の第２の動作情報または一時記憶した前回の前記第１の動作情報を選択し、選択した前記第１の動作情報または前記第２の動作情報を、第２の記憶部に格納する、
処理を実行させる実行情報記録プログラム。
【請求項８】
コンピュータが、
ハードウェア割り込み機能をもたないカウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの第１の動作情報とを一定時間間隔毎に取得して第１の記憶部により一時記憶し、
今回の積算値が所定値を超えると、前記今回の積算値、一時記憶した前回の積算値および前記所定値に基づいて現在の第２の動作情報または一時記憶した前回の前記第１の動作情報を選択し、選択した前記第１の動作情報または前記第２の動作情報を、第２の記憶部に格納する、
実行情報記録方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理装置、実行情報記録プログラムおよび実行情報記録方法に関する。
【背景技術】
【０００２】
プログラムの動作分析や性能チューニングのために、サンプリング情報を取得することがある。例えば、コンピュータに演算を実行させながら、実行中のコンピュータの動作情報（実行対象の命令アドレスやＰＩＤ（Process Identification）など）をサンプリングする。すると、サンプリングした動作情報からサンプリングのタイミングで実行されていたプログラムや関数などを特定し、プログラムの動作状況の把握や性能改善箇所の特定に役立てることができる。
【０００３】
例えば、消費電力のサンプリング方法が提案されている。この提案では、任意の一定時間毎に消費電力の測定を行い、測定値を積算していく積算電力カウンタで、カウンタがオーバーフローしたらＣＰＵ（Central Processing Unit）にサンプリング用の割り込みを挙げる。割り込みを受け取ったＣＰＵは、所定のサンプリングプログラムに実行制御を移行させ、消費電力ベースのサンプリングおよびプロファイルを可能とする。
【０００４】
なお、無線送信装置の送信パワー測定において、送信パワー測定装置を、各サンプリング区間でアクティブモードとし、各サンプリング区間以外でアクティブモードより低消費電力のスリープモードとすることで、低消費電力化を図る提案もある。また、空調機の消費電力量を所定のタイミング毎に計測する場合に、消費電力量に影響を及ぼす空調機の状態の変更内容が入力されると、入力された内容を入力タイミングに対応付けて記録する提案もある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−１９１９３７号公報
【特許文献２】特開２０１２−３９３７５号公報
【特許文献３】特開２０１３−２３８４２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、カウンタがオーバーフローした際にサンプリング用の割り込みを発生させて、サンプリングを行うことが考えられる。ところが、カウンタによってはこのようなハードウェアによる割り込み機能をもたないものもある。この場合、当該割り込み機能をもたないカウンタのカウント数を契機とした動作情報のサンプリング方法が問題となる。
【０００７】
例えば、前回のサンプリングタイミングからの当該カウンタのカウント積算値を一定時間間隔毎に取得し、カウント積算値が所定値を超えたタイミングで動作情報のサンプリングを行うことも考えられる。ところが、この方法ではカウント積算値が丁度所定値を超えたタイミングを計ることは困難であり（当該タイミングよりもサンプリングタイミングは遅延する）、サンプリングタイミングの決定精度が低い。時間経過により動作情報が変わっている可能性もあり、適切でない動作情報がサンプリングされるおそれがある。
【０００８】
１つの側面では、本発明は、より適切な動作情報を取得できる情報処理装置、実行情報記録プログラムおよび実行情報記録方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、情報処理装置が提供される。この情報処理装置は、第１の記憶部と演算部とを有する。第１の記憶部は、ハードウェア割り込み機能をもたないカウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの動作情報とを記憶する。演算部は、一定時間間隔毎に積算値と第１の動作情報とを取得して第１の記憶部により一時記憶し、今回の積算値が所定値を超えると、今回の積算値、一時記憶した前回の積算値および所定値に基づいて現在の第２の動作情報または一時記憶した前回の第１の動作情報を選択し、選択した第１の動作情報または第２の動作情報を、第２の記憶部に格納する。
【００１０】
また、１つの態様では、実行情報記録プログラムが提供される。この実行情報記録プログラムは、コンピュータに、ハードウェア割り込み機能をもたないカウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの第１の動作情報とを一定時間間隔毎に取得して第１の記憶部により一時記憶し、今回の積算値が所定値を超えると、今回の積算値、一時記憶した前回の積算値および所定値に基づいて現在の第２の動作情報または一時記憶した前回の第１の動作情報を選択し、選択した第１の動作情報または第２の動作情報を、第２の記憶部に格納する、処理を実行させる。
【００１１】
また、１つの態様では、実行情報記録方法が提供される。この実行情報記録方法では、コンピュータが、ハードウェア割り込み機能をもたないカウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの第１の動作情報とを一定時間間隔毎に取得して第１の記憶部により一時記憶し、今回の積算値が所定値を超えると、今回の積算値、一時記憶した前回の積算値および所定値に基づいて現在の第２の動作情報または一時記憶した前回の第１の動作情報を選択し、選択した第１の動作情報または第２の動作情報を、第２の記憶部に格納する。
【発明の効果】
【００１２】
１つの側面では、より適切な動作情報を取得できる。
【図面の簡単な説明】
【００１３】
【図１】第１の実施の形態の情報処理装置を示す図である。
【図２】第２の実施の形態の解析装置を示す図である。
【図３】第２の実施の形態の解析装置のハードウェア例を示す図である。
【図４】第２の実施の形態のプロセッサの例を示す図である。
【図５】第２の実施の形態の解析装置の機能例を示す図である。
【図６】第２の実施の形態のデータ採取部によるデータ採取例を示す図である。
【図７】第２の実施の形態の採取データテーブルの例を示す図である。
【図８】第２の実施の形態の解析対象データテーブルの例を示す図である。
【図９】第２の実施の形態の解析結果の出力例を示す図である。
【図１０】第２の実施の形態のデータ採取例を示すフローチャートである。
【図１１】第２の実施の形態の解析対象データ抽出例を示すフローチャートである。
【図１２】第２の実施の形態の解析対象データ抽出例を示す図である。
【図１３】第２の実施の形態の解析対象データ抽出例（続き）を示す図である。
【図１４】サンプリングの比較例を示す図である。
【図１５】サンプリング方法の比較例を示す図である。
【図１６】第３の実施の形態のプロセッサの例を示す図である。
【図１７】第３の実施の形態の解析装置の機能例を示す図である。
【図１８】第３の実施の形態の分岐トレース情報の例を示す図である。
【図１９】第３の実施の形態の命令列情報の例を示す図である。
【図２０】第３の実施の形態の採取データテーブルの例を示す図である。
【図２１】第３の実施の形態の解析対象データ抽出例を示すフローチャートである。
【図２２】第４の実施の形態の解析対象データ抽出例を示すフローチャートである。
【図２３】第５の実施の形態の採取データテーブルの例を示す図である。
【図２４】第５の実施の形態の解析対象データ抽出例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態の情報処理装置を示す図である。情報処理装置１は、解析対象のプログラムを実行しながら、ベースイベントのカウント数に応じたタイミングで、情報処理装置１の動作情報をサンプリングする。ベースイベントは、当該タイミングを決定するためのベースとなるイベントである。動作情報は、例えば情報処理装置１上で実行されるプログラムやハードウェアの情報（例えば、実行されたプロセスのプロセスＩＤや命令アドレスおよび該当のプロセスを実行したプロセッサの識別情報など）を含み得る。
【００１５】
情報処理装置１は、カウンタ１ａ、記憶部１ｂ，１ｃおよび演算部１ｄを有する。カウンタ１ａは、ベースイベント（キャッシュミス数や消費電力量）の数をカウントする。例えば、キャッシュミスをカウントする場合、キャッシュミスが１回あるとカウント数に１を加算する。また、例えば、消費電力量をカウントする場合、電力量が単位量分（例えば、１ジュール）消費されるとカウント数に１を加算する。カウンタ１ａは、ハードウェアによる割り込み機能を備えていない。このため、例えばカウンタ１ａのカウント数によってサンプリングタイミングを決定する場合、カウンタ１ａのカウンタオーバーフローによるハードウェア割り込みを利用することはできない。
【００１６】
記憶部１ｂ，１ｃは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。例えば、記憶部１ｂ，１ｃがＲＡＭであってもよいし、記憶部１ｂがＲＡＭであり記憶部１ｃがＨＤＤであってもよい。記憶部１ｃは、情報処理装置１に外付けされた記憶装置でもよい。演算部１ｄは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。演算部１ｄはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。また、演算部１ｄは、カウンタ１ａを含んでもよい。
【００１７】
記憶部１ｂは、カウンタ１ａによるベースイベントのカウント数の積算値とプログラムやハードウェアの動作情報との演算部１ｄによる取得結果を一時記憶する。
記憶部１ｃは、解析対象プログラムの実行中における情報処理装置１の挙動解析に用いる動作情報の収集結果を記憶する。当該データは、演算部１ｄにより抽出される。
【００１８】
演算部１ｄは、カウンタ１ａによるベースイベントのカウント数の積算値が所定値を超えるときの動作情報を取得し、記憶部１ｃに格納する。ただし、前述のように、カウンタ１ａでは、カウンタオーバーフローによる割り込みを利用することはできない。そこで、演算部１ｄは、次のようにして動作情報の収集を行う。
【００１９】
演算部１ｄは、カウンタ１ａのカウント数の積算値と動作情報とを一定時間間隔毎に取得して記憶部１ｂに格納する。一定時間間隔は、カウンタ１ａ以外の他のカウンタ（例えば、カウンタオーバーフローによる割り込み機能をもつタイマカウンタであり、図１では図示を省略している）によって計測され得る。例えば、演算部１ｄは、当該他のカウンタから一定時間間隔で受け付ける割り込みに応じて、カウンタ１ａのカウント数の積算値と動作情報とを取得する。
【００２０】
演算部１ｄは、カウンタ１ａのカウント数の積算値が所定値を超えると、当該積算値および所定値に基づいて、情報処理装置１における現在の動作情報または記憶部１ｂに一時記憶した動作情報を選択し、記憶部１ｃに格納する。
【００２１】
具体的には、カウンタ１ａのカウント数の積算値に対する所定値として、閾値Ｌを、記憶部１ｂに予め設定しておく。閾値Ｌは、カウンタ１ａによるサンプリングのサンプリングレートを決定する値と考えてもよい。そして、演算部１ｄは、タイミングｔ１−１において、積算値Ｖ１および動作情報Ｙを取得し、記憶部１ｂに格納する。積算値Ｖ１は、閾値Ｌよりも小さい値である。
【００２２】
次に、演算部１ｄは、タイミングｔ１−１の次のタイミングｔ１において、積算値Ｖ１および動作情報Ｚを取得する。積算値Ｖ２は、閾値Ｌよりも大きい値である。すなわち、演算部１ｄは、タイミングｔ１において、積算値Ｖ２が閾値Ｌを超えたことを検出する。グラフＧは、タイミングｔ１−１，ｔでの積算値Ｖ１，Ｖ２と閾値Ｌとの関係を例示している。そして、演算部１ｄは、例えば記憶部１ｂに一時記憶された前回の積算値Ｖ１と閾値Ｌとの差Ｄ１＝Ｌ−Ｖ１を得る。演算部１ｄは、今回の積算値Ｖ２と閾値Ｌとの差Ｄ２＝Ｖ２−Ｌを得る。演算部１ｄは、差Ｄ１と差Ｄ２との比較に応じて、収集結果として採取する動作情報を、動作情報Ｙ，Ｚの何れとするかを選択する。演算部１ｄは、差の小さい方に対応する動作情報を選択する。
【００２３】
より具体的には、上記の例において、差Ｄ１＜差Ｄ２である。この場合、演算部１ｄは、動作情報Ｙを選択する。例えば、演算部１ｄは、動作情報Ｙをタイミングｔ１の情報に対応付けて、記憶部１ｃに記憶された収集結果テーブルＴ１に記録する。収集結果テーブルＴ１には、カウンタ１ａによる１つ前のサンプリングタイミングｔ０で取得された動作情報Ｘも記録されている。なお、演算部１ｄは、動作情報Ｙをタイミングｔ１の情報に対応付けて記憶部１ｃに格納するものとしたが、タイミングｔ１の情報に対応づけずに記憶部１ｃに格納してもよい。
【００２４】
その後、演算部１ｄは、積算値Ｖ２から閾値Ｌを引いて、カウンタ１ａのカウント数の積算値を求める。すると、演算部１ｄは、タイミングｔ１における値Ｖ２−Ｌからの積算値を求めることができ、当該積算値と閾値Ｌとの比較により、カウンタ１ａによるサンプリングタイミングの決定を繰り返し行える。
【００２５】
演算部１ｄは、こうして記憶部１ｂに収集した動作情報を解析する。例えば、イベント発生箇所（例えば、キャッシュミス数や消費電力量の閾値超過）が発生したときに実行されていたプロセスＩＤや命令アドレスを基に、プログラム内の該当箇所（例えば、関数やサブルーチンなど）を特定できる。演算部１ｄは、収集結果を統計的に解析し、イベント発生時に実行されていた頻度の高いプログラム箇所を特定し、出力する（このような解析をプロファイリングと呼ぶこともある）。こうして、情報処理装置１は、開発者に対して、性能改善の余地のあるプログラム箇所の特定を支援できる。
【００２６】
ところで、上記のように、タイミングｔ１−１の積算値Ｖ１および動作情報Ｙを一時記憶せず、また、積算値Ｖ１，Ｖ２と閾値Ｌとの比較を行わずに、タイミングｔ１における動作情報Ｚを、そのまま収集結果テーブルＴ１に記録することも考えられる。ところが、この場合、タイミングｔ１は、カウンタ１ａのカウント数の積算値が閾値Ｌを丁度超えたタイミング（積算値がＬ＋１となった本来のタイミング）よりも遅延している可能性がある。タイミングｔ１の当該遅延量が大きいほど、動作情報Ｚは本来のタイミングでの動作情報とは異なっている可能性が高くなる。こうして蓄積した動作情報により解析を行うと、解析結果の信頼性が低いおそれがある。
【００２７】
そこで、情報処理装置１のように、タイミングｔ１−１の積算値Ｖ１および動作情報Ｙを一時記憶し、タイミングｔ１で積算値Ｖ２が閾値Ｌを超えた際に、積算値Ｖ１，Ｖ２と閾値Ｌとの比較により、動作情報Ｙ，Ｚの何れを採用するかを選択する。閾値Ｌと積算値との差が大きいほど、閾値Ｌを丁度超過した本来のタイミングとの乖離が大きいと判断でき、閾値Ｌと積算値との差が小さいほど本来のタイミングとの乖離が小さいと判断できるからである。こうして、ハードウェア割り込み手段をもたないカウンタ１ａを用いてサンプリング契機を計る場合でも、より適切な動作情報を選択できる。また、こうして蓄積した動作情報による解析を行うことで、解析結果の信頼性を向上させることができる。
【００２８】
［第２の実施の形態］
図２は、第２の実施の形態の解析装置を示す図である。解析装置１００は、解析対象プログラムＰ１を実行し、実行中における解析装置１００の動作情報を取得する。解析装置１００は、サーバコンピュータでもよいし、クライアントコンピュータでもよい。解析装置１００は、ネットワーク１０に接続されており、ネットワーク１０を介して他のコンピュータと通信できる。
【００２９】
図３は、第２の実施の形態の解析装置のハードウェア例を示す図である。解析装置１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７を有する。各ユニットは解析装置１００のバスに接続されている。
【００３０】
プロセッサ１０１は、解析装置１００の情報処理を制御する。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡなどのうちの２以上の要素の組み合わせであってもよい。
【００３１】
ＲＡＭ１０２は、解析装置１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。アプリケーションプログラムは、例えば、解析対象プログラムＰ１や後述する解析装置１００の機能を実現するためのプログラムを含む。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００３２】
ＨＤＤ１０３は、解析装置１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションプログラム（例えば、解析対象プログラム）、および各種データを記憶する。解析装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。
【００３３】
画像信号処理部１０４は、プロセッサ１０１からの命令に従って、解析装置１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００３４】
入力信号処理部１０５は、解析装置１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００３５】
媒体リーダ１０６は、記録媒体１３に記録されたプログラムやデータを読み取る装置である。記録媒体１３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。また、記録媒体１３として、例えば、フラッシュメモリカードなどの不揮発性の半導体メモリを使用することもできる。媒体リーダ１０６は、例えば、プロセッサ１０１からの命令に従って、記録媒体１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００３６】
通信インタフェース１０７は、ネットワーク１０を介して他の装置と通信を行う。通信インタフェース１０７は、有線通信インタフェースでもよいし、無線通信インタフェースでもよい。
【００３７】
図４は、第２の実施の形態のプロセッサの例を示す図である。プロセッサ１０１は、カウンタ１０１ａ，１０１ｂを有する。例えば、カウンタ１０１ａ，１０１ｂは、性能イベント監視カウンタ（ＰＭＣ：Performance Monitoring Counter）と呼ばれるものでもよい。
【００３８】
カウンタ１０１ａは、タイマとして利用可能なカウンタである。カウンタ１０１ａは、ハードウェア割り込み機能を有する。具体的には、カウンタ１０１ａは、カウントがオーバーフローすると、割り込みを発生させることができる。この機能により、カウンタ１０１ａは、一定時間間隔毎に割り込みを発生させる。すると、予め用意した例外処理用のドライバなどを用いて、プログラムカウンタや所定のレジスタなどの値を記録でき、割り込み発生時の情報を採取できる。なお、カウンタ１０１ａとして、他の種類のイベントの発生数をカウントするカウンタであって、ハードウェア割り込み機能をもつカウンタを用いてもよい。また、カウンタ１０１ａとして、プロセッサ１０１のクロックサイクル数をカウントするタイムスタンプカウンタ（ＴＳＣ：Time Stamp Counter）を用いてもよい。
【００３９】
カウンタ１０１ｂは、ベースイベントの発生数をカウントする。ベースイベントとは、例えば、命令実行、キャッシュミス発生、電力消費および実行サイクル数（時間経過）などである。第２の実施の形態の例では、ベースイベントとして、電力消費を想定する。この場合、カウンタ１０１ｂを電力制御監視カウンタと呼ぶこともできる。カウンタ１０１ｂの１カウントは、例えば単位消費電力量に相当する。消費電力量は、ジュールやワット時などの単位で表わされるエネルギーに相当する量である。例えば、カウンタ１０１ｂの１カウントは、電力量１ジュールが消費されたというイベントが１回発生したことに相当する。ただし、カウンタ１０１ｂは、命令実行やキャッシュミス発生など他の種類のベースイベントの発生数をカウントするカウンタでもよい。
【００４０】
カウンタ１０１ｂは、ハードウェア割り込み機能を有していない。この点が、カウンタ１０１ａと異なる。すなわち、カウンタ１０１ｂでは、カウンタ１０１ａのように、カウンタ・レジスタのオーバーフローによる割り込みを発生させることはできない。このため、第２の実施の形態の例では、カウンタ１０１ｂによりサンプリングタイミングを決定する（イベントベースのサンプリングを行う）ために、カウンタ１０１ａを補助的に用いる。具体的には、プロセッサ１０１は、カウンタ１０１ａによる割り込みが発生したタイミングでカウンタ１０１ｂのカウント数を参照し、カウンタ１０１ｂのカウント数と所定の閾値との比較により、サンプリングタイミングを決定する。
【００４１】
しかし、この場合、カウンタ１０１ｂのカウント数が閾値を丁度超えたタイミング（本来のタイミング）を計ることは困難である。カウンタ１０１ｂのカウント数と閾値との比較を行うタイミングがカウンタ１０１ａによって決定されるので、当該比較を行うタイミングが本来のタイミングよりも遅延するからである。そこで、解析装置１００は、カウンタ１０１ｂによるイベントベースのサンプリングにおいて、より適切な情報をサンプリング可能とする機能を提供する。なお、以下の説明において、便宜的にカウンタ１０１ａの識別子を“ＣＴ１”、および、カウンタ１０１ｂの識別子を“ＣＴ２”とする。図中、これらの識別子によってカウンタを区別することがある。
【００４２】
図５は、第２の実施の形態の解析装置の機能例を示す図である。解析装置１００は、採取データ記憶部１１０、解析対象データ記憶部１２０、データ採取部１５０、解析対象データ抽出部１６０および解析部１７０を有する。採取データ記憶部１１０および解析対象データ記憶部１２０は、ＲＡＭ１０２またはＨＤＤ１０３に確保された記憶領域として実現される。データ採取部１５０、解析対象データ抽出部１６０および解析部１７０は、ＲＡＭ１０２に記憶されたプログラムをプロセッサ１０１が実行することで実現される。
【００４３】
採取データ記憶部１１０は、採取データを記憶する。採取データは、解析対象プログラムＰ１の実行中に一定時間間隔毎に取得される解析装置１００の動作情報である。一定時間間隔は、カウンタ１０１ａにより計測される。
【００４４】
解析対象データ記憶部１２０は、解析対象データを記憶する。解析対象データは、採取データから抽出されるデータである。解析対象データのサンプリングのタイミングは、カウンタ１０１ｂのカウント数により決定される。
【００４５】
データ採取部１５０は、解析対象プログラムＰ１が実行されている期間中に、一定時間間隔毎のタイミング（カウンタ１０１ａによる割り込みのタイミング）で、実行中のプロセスＩＤやプログラムカウンタのアドレス値などを取得する。また、データ採取部１５０は、同タイミングにおけるカウンタ１０１ｂのカウント数を取得する。データ採取部１５０は、取得したプロセスＩＤ、アドレス値およびカウンタ１０１ｂのカウント数（前回データ採取時点からの差分）を採取データ記憶部１１０に格納する。データ採取部１５０によって、採取データ記憶部１１０に格納される情報が採取データに相当する。データ採取部１５０は、割り込みによる例外処理用のドライバに呼び出される機能でもよいし、例外処理用のドライバに組み込まれた機能でもよい。
【００４６】
解析対象データ抽出部１６０は、採取データ記憶部１１０に記憶された採取データから、カウンタ１０１ｂのカウント数に応じたタイミングで取得された採取データを抽出する。こうして抽出された採取データを、解析対象データと呼ぶこととする。解析対象データ抽出部１６０は、採取データ記憶部１１０から解析対象データを抽出するということもできる。解析対象データ抽出部１６０は、カウンタ１０１ｂのカウント数に基づいて、採取データ記憶部１１０に記憶された採取データのうち、解析対象データとして抽出するものを特定する。解析対象データ抽出部１６０は、解析対象データ記憶部１２０に抽出した解析対象データを格納する。
【００４７】
例えば、解析対象データ抽出部１６０は、カウンタ１０１ｂのカウント数に基づき、閾値に相当する一定の電力量が消費されたタイミング毎に、解析対象データを抽出する。ただし、前述のようにカウンタ１０１ｂは、ハードウェア割り込み機能がないため、ハードウェア割り込み機能を利用できる場合ほど精密に一定の電力量が消費されたタイミングを計れているわけではない。厳密にいえば、解析対象データの抽出のタイミング間における消費電力量は、ほぼ一定ということになる。こうして解析対象データ記憶部１２０に格納される解析対象データは、一定の電力量が消費されたタイミング毎（前述のように、より厳密にいえば、ほぼ一定の電力量が消費されたタイミング毎）に実行されていたプロセスＩＤや命令アドレスなどを示している。
【００４８】
解析部１７０は、解析対象データ記憶部１２０に記憶された解析対象データを解析し（プロファイリング）、解析結果を出力する。解析部１７０は、当該解析対象データに基づいて、各タイミングで実行されていた解析対象プログラムＰ１の関数やサブルーチンなどのプログラム箇所を特定する。解析部１７０は、解析対象データを統計的に解析し、ベースイベント（一定の電力量が消費されたというイベント）の発生時に実行されていた頻度の高いプログラム箇所を特定し、ディスプレイ１１などに出力する。例えば、解析部１７０は、出力結果を示す画像をディスプレイ１１により表示させる。例えば、開発者は、ディスプレイ１１に表示された画像を閲覧して、電力消費の観点で改善の余地のあるプログラム箇所の候補を特定できる。
【００４９】
図６は、第２の実施の形態のデータ採取部によるデータ採取例を示す図である。例えば、解析対象プログラムＰ１が実行されている期間中のある時点において、解析装置１００のＯＳは、プロセスＰ１１，Ｐ１２，Ｐ１３の実行をスケジューリング済であり、プロセスＰ１１を実行中である。このとき、データ採取部１５０は、カウンタ１０１ａから一定時間間隔毎に割り込みを受け付ける。データ採取部１５０は、カウンタ１０１ａから割り込みを受け付けると、現在実行中のプロセスＰ１１からプロセスＩＤなどを含むプロセス情報を取得する。また、データ採取部１５０は、プログラムカウンタの値を取得する（図示を省略している）。更に、データ採取部１５０は、ベースイベントのカウント数（消費電力量に相当）をカウンタ１０１ｂから取得する。データ採取部１５０は、取得した情報（採取データ）を、採取データ記憶部１１０（図６の例ではＲＡＭ１０２内に確保された記憶領域）に格納する。
【００５０】
図７は、第２の実施の形態の採取データテーブルの例を示す図である。採取データテーブル１１１は、採取データ記憶部１１０に格納される。採取データテーブル１１１は、サンプル番号、解析対象データ候補および区間カウント数の項目を含む。
【００５１】
サンプル番号の項目には、サンプル番号が登録される。サンプル番号は、レコードを識別する番号であり、データ採取部１５０により採取された順に、データ採取部１５０により付与される番号である。解析対象データ候補の項目には、解析対象データの候補が登録される。解析対象データ候補の項目には、更に、ＣＰＵ  ＩＤ、ＰＩＤ（Process ID）およびＰＣ（Program Counter）の項目が設けられている。ＣＰＵ  ＩＤには、ＣＰＵの識別子（ＣＰＵ  ＩＤ）が登録される。解析装置１００が複数のＣＰＵによりプログラムを実行する場合、ＣＰＵ  ＩＤによって各プロセスの実行主体を区別できる（本例ではＣＰＵ  ＩＤは一定であるとする）。ＰＩＤの項目には、プロセスＩＤが登録される。ＰＣの項目には、プログラムカウンタに格納されたアドレス値が登録される。区間カウント数の項目には、カウンタ１０１ｂの区間カウント数が登録される。区間カウント数とは、データ採取部１５０が直前にデータ採取を行った時点でのカウンタ１０１ｂのカウント数と、今回データ採取を行った時点でのカウンタ１０１ｂのカウント数との差分のカウント数である。なお、データ採取部１５０がデータ採取を開始して最初のデータ採取の時点では、カウント数“０”（カウンタ１０１ｂの初期値）からの差分が区間カウント数となる。
【００５２】
例えば、採取データテーブル１１１には、次のようなレコードが登録される。第１には、サンプル番号が“Ｎ−１”（Ｎは２以上の整数）、解析対象データ候補のＣＰＵ  ＩＤが“０”、ＰＩＤが“２１９”、ＰＣが“０ｘ４１１０”、区間カウント数が“１４０”というレコードである。これは、カウンタ１０１ａからＮ−１回目の割り込みを受け付けたときの採取データであり、ＣＰＵ  ＩＤが“０”、プロセスＩＤが“２１９”、プログラムカウンタの値が“０ｘ４１１０”、カウンタ１０１ｂの区間カウント数が“１４０”であったことを示す。
【００５３】
第２には、サンプル番号が“Ｎ”、解析対象データ候補のＣＰＵ  ＩＤが“０”、ＰＩＤが“２１９”、ＰＣが“０ｘ４２３０”、区間カウント数が“１８００”というレコードである。これは、カウンタ１０１ａからＮ回目の割り込みを受け付けたときの採取データであり、ＣＰＵ  ＩＤが“０”、プロセスＩＤが“２１９”、プログラムカウンタのアドレス値が“０ｘ４２３０”、カウンタ１０１ｂの区間カウント数が“１８００”であったことを示す。
【００５４】
図８は、第２の実施の形態の解析対象データテーブルの例を示す図である。解析対象データテーブル１２１は、解析対象データ記憶部１２０に格納される。解析対象データテーブル１２１は、サンプル番号および解析対象データの項目を含む。
【００５５】
サンプル番号の項目には、サンプル番号が登録される。解析対象データの項目には、解析対象データが登録される。解析対象データの項目には、更に、ＣＰＵ  ＩＤ、ＰＩＤおよびＰＣの項目が設けられている。ＣＰＵ  ＩＤ、ＰＩＤおよびＰＣの各項目に登録される情報は、図７で例示した同名の各項目と同様の情報である。なお、解析対象データテーブル１２１ではサンプル番号の項目を省いてもよい。あるいは、サンプル番号をキーに、採取データテーブル１１１から解析対象データの内容を取得する場合には、解析対象データテーブル１２１から解析対象データの項目を省いてもよい。
【００５６】
例えば、解析対象データテーブル１２１には、サンプル番号が“Ｎ−１”、解析対象データのＣＰＵ  ＩＤが“０”、ＰＩＤが“２１９”、ＰＣ“０ｘ４１１０”というレコードが登録される。これは、解析対象データとして、サンプル番号“Ｎ−１”に対応するＣＰＵ  ＩＤ“０”、プロセスＩＤ“２１９”、プログラムカウンタの値“４１１０”といった情報が採取データテーブル１１１から抽出されていることを示す。
【００５７】
図９は、第２の実施の形態の解析結果の出力例を示す図である。図９（Ａ）は、グラフＧ１を例示している。グラフＧ１は、解析対象時間全体に対して解析対象データテーブル１２１に記録された解析対象データを解析部１７０により統計解析した結果の出力例である。例えば、解析部１７０は、解析対象データテーブル１２１のレコード毎に、プロセスＩＤやプログラムカウンタの情報から、消費電力量が閾値を超えたときに実行中であった関数などのプログラム箇所（実行箇所）を特定する。例えば、解析部１７０は、特定した実行箇所を集計し、解析対象時間全体における総観測回数（解析対象データテーブル１２１のレコード数に相当）に対して、各実行箇所が観測された回数が何回であったかという割合を求める。解析部１７０は、その結果をグラフＧ１としてディスプレイ１１に表示させる。図９（Ａ）では、凡例Ｇ１ａも示している。凡例Ｇ１ａにおいて、“実行箇所Ａ，Ｂ，Ｃ，Ｄ，Ｅ”は、解析対象プログラムＰ１に含まれる関数やサブルーチンの名称に相当する。“その他”は、解析対象プログラムＰ１以外のアプリケーションプログラムにおける実行箇所を示す。“ＩＤＬＥ”は、特定のアプリケーションプログラムが実行されていなかったこと（例えば、ＯＳ関連のプロセスのみが実行されていたことなど）を示す。
【００５８】
図９（Ｂ）は、グラフＧ２を例示している。グラフＧ２は、解析結果の他の出力例である。例えば、解析部１７０は、解析対象時間全体を所定時間間隔に区切って、当該所定時間間隔毎に、図９（Ａ）と同様にして、当該所定時間間隔において各実行箇所が観測された回数の割合を求める。解析部１７０は、所定時間間隔毎の当該割合の計算結果を、グラフＧ２に示すヒストグラムとしてディスプレイ１１に表示させる。
【００５９】
グラフＧ２のように時間経過に応じたヒストグラムを出力する場合、データ採取部１５０は、採取データテーブル１１１の各レコードに、採取データを取得した時刻も登録する。また、解析対象データ抽出部１６０は、解析対象データテーブル１２１の各レコードに、当該時刻も登録する。すると、解析部１７０は、解析対象データテーブル１２１に基づいて、所定時間間隔毎に各実行箇所が観測された回数の割合を計算することができる。
【００６０】
グラフＧ２によれば、プログラムの開発者は、比較的短期間の間に消費電力量が比較的大きかったプログラム箇所を表示内容から容易に特定できる。図９（Ｂ）の表示例によれば、実行箇所Ａ，Ｂを実行中の比較的短期間に、消費電力量が極度に増大していることが容易に分かる。このため、開発者は、実行箇所Ａ，Ｂに相当するプログラムのコードなどを見直し対象の候補として容易に特定できる。
【００６１】
なお、解析部１７０は、所定時間間隔（ヒストグラムのビン幅）を任意の幅に変更可能である。また、解析対象時間において実行する解析対象プログラムは、１つでもよいし、複数でもよい。例えば、並列に複数の解析対象プログラムを解析装置１００により実行させて、プロファイリングを行うこともできる。その場合、解析部１７０は、解析対象プログラム毎の実行箇所の情報を含むグラフＧ１やグラフＧ２をディスプレイ１１に表示させることができる。例えば、解析部１７０は、解析対象プログラムＰ１の実行箇所Ａ，Ｂ，Ｃ，・・・それぞれの割合と他の解析対象プログラムの複数の実行箇所それぞれの割合とを１つのグラフ上に区別して表示させてもよい。
【００６２】
また、キャッシュミスなど他の種類のベースイベントに対しても、図９と同様のグラフにより結果を表示できる。例えば、キャッシュミスの発生頻度や、発生頻度の割合をプログラムの実行箇所毎に表示させることもできる。
【００６３】
次に、解析装置１００による処理の手順を説明する。図１０に示す手順は、解析対象プログラムＰ１を実行している最中に実行される。
図１０は、第２の実施の形態のデータ採取例を示すフローチャートである。以下、図１０に示す処理をステップ番号に沿って説明する。
【００６４】
（Ｓ１）データ採取部１５０は、カウンタ１０１ａ（カウンタＣＴ１）から割り込みを受け付ける。
（Ｓ２）データ採取部１５０は、採取データを取得し、採取データ記憶部１１０に記憶された採取データテーブル１１１に記録する。採取データは、例えば、ＣＰＵ  ＩＤ、プロセスＩＤおよびプログラムカウンタの値などを含む。また、採取データは、カウンタ１０１ｂの区間カウント数を含む。図９で例示したように、データ採取部１５０は、当該採取データを、採取時の時刻に対応付けて、採取データテーブル１１１に記録してもよい。
【００６５】
（Ｓ３）データ採取部１５０は、データ採取を終了するか否かを判定する。終了する場合、処理を終了する。終了しない場合、処理をステップＳ１に進める。例えば、解析対象プログラムＰ１の実行が終了した場合、データ採取は終了となる。
【００６６】
カウンタ１０１ａは、カウンタオーバーフローによるハードウェア割り込みを一定時間間隔毎に発生させるので、データ採取部１５０は、ステップＳ１，Ｓ２，Ｓ３の手順を一定時間間隔毎に実行することになる。
【００６７】
こうして、採取データテーブル１１１に採取データが記録される。解析対象データ抽出部１６０は、採取データテーブル１１１から、カウンタ１０１ｂの区間カウント数に基づいて、解析対象データを抽出する。解析装置１００は、解析対象データの抽出を解析対象プログラムＰ１の実行が終了した後に実行する。
【００６８】
図１１は、第２の実施の形態の解析対象データ抽出例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。
（Ｓ１１）解析対象データ抽出部１６０は、変数ｉに０を代入する。変数ｉは、サンプル番号に相当する値である（サンプル番号ｉということがある）。解析対象データ抽出部１６０は、変数Ｓ０に０を代入する。変数Ｓ０は、変数Ｓｉの初期値である。変数Ｓｉは、変数ｉで示されるサンプル番号に対応するカウンタ１０１ｂの区間カウント数の積算値である（積算値Ｓｉということがある）。
【００６９】
（Ｓ１２）解析対象データ抽出部１６０は、ｉ＋１を変数ｉに代入する。この処理は、変数ｉをインクリメントする処理ともいえる。あるいは、変数ｉに１を加算した結果を、変数ｉに代入する処理であるともいえる。
【００７０】
（Ｓ１３）解析対象データ抽出部１６０は、採取データテーブル１１１を参照して、採取データＤｉがあるか否かを判定する。ある場合、処理をステップＳ１４に進める。ない場合、処理を終了する。ここで、採取データＤｉは、採取データテーブル１１１のサンプル番号ｉのレコードに相当する。
【００７１】
（Ｓ１４）解析対象データ抽出部１６０は、変数Ｓ（ｉ−１）＋区間カウント数Ｃｉを、変数Ｓｉに代入する。区間カウント数Ｃｉは、サンプル番号ｉのレコードにおける区間カウント数である。この処理は、前回までの区間カウント数の積算値Ｓ（ｉ−１）に、今回の区間カウント数Ｃｉを加算して、今回までの区間カウント数の積算値Ｓｉを求める処理であるといえる。
【００７２】
（Ｓ１５）解析対象データ抽出部１６０は、変数Ｓｉに代入された値が閾値Ｒよりも小さい（Ｓｉ＜Ｒ）か否かを判定する。小さい場合、処理をステップＳ１２に進める。小さくない場合、すなわち、変数Ｓｉに代入された値が閾値Ｒ以上である（Ｓｉ≧Ｒ）場合、処理をステップＳ１６に進める。閾値Ｒは、イベントベースでのサンプリングレートを決める値として、ＲＡＭ１０２やＨＤＤ１０３などに予め格納される情報である。
【００７３】
（Ｓ１６）解析対象データ抽出部１６０は、（Ｒ−Ｓ（ｉ−１））の演算結果が、（Ｓ（ｉ）−Ｒ）の演算結果よりも小さい（Ｒ−Ｓ（ｉ−１）＜Ｓ（ｉ）−Ｒ）か否かを判定する。小さい場合、処理をステップＳ１７に進める。小さくない場合、すなわち、（Ｒ−Ｓ（ｉ−１））の演算結果が、（Ｓ（ｉ）−Ｒ）の演算結果以上である（Ｒ−Ｓ（ｉ−１）≧Ｓ（ｉ）−Ｒ）場合、処理をステップＳ１８に進める。この処理は、閾値Ｒと前回までの区間カウント数の積算値Ｓ（ｉ−１）との第１の差、および、今回までの区間カウント数の積算値Ｓ（ｉ）と閾値Ｒとの第２の差の比較を行う処理であるといえる。第１の差の方が第２の差よりも小さければ、処理をステップＳ１７に進める。第１の差が第２の差以上であれば、処理をステップＳ１８に進める。
【００７４】
（Ｓ１７）解析対象データ抽出部１６０は、ｉ−１回目（サンプル番号ｉ−１）の採取データを抽出する。抽出された採取データが、解析対象データに相当する（採取データのうち区間カウント数を除いたものを解析対象データとしてもよい）。解析対象データ抽出部１６０は、抽出した解析対象データを、解析対象データ記憶部１２０に記憶された解析対象データテーブル１２１に登録する。図９で例示したように、採取データテーブル１１１に該当データを採取した時刻の情報が登録されている場合、解析対象データ抽出部１６０は、当該解析対象データを、採取時の時刻に対応付けて、解析対象データテーブル１２１に登録してもよい。そして、処理をステップＳ１９に進める。
【００７５】
（Ｓ１８）解析対象データ抽出部１６０は、ｉ回目（サンプル番号ｉ）の採取データを抽出する。抽出された採取データが、解析対象データに相当する（採取データのうち区間カウント数を除いたものを解析対象データとしてもよい）。解析対象データ抽出部１６０は、抽出した解析対象データを、解析対象データ記憶部１２０に記憶された解析対象データテーブル１２１に登録する。図９で例示したように、採取データテーブル１１１に該当データを採取した時刻の情報が登録されている場合、解析対象データ抽出部１６０は、当該解析対象データを、採取時の時刻に対応付けて、解析対象データテーブル１２１に登録してもよい。そして、処理をステップＳ１９に進める。
【００７６】
（Ｓ１９）解析対象データ抽出部１６０は、変数Ｓｉ−閾値Ｒを、変数Ｓｉに代入する。すなわち、今回までの区間カウント数の積算値Ｓｉから、閾値Ｒを減算した値をＳｉに代入する。そして、処理をステップＳ１２に進める。
【００７７】
図１２は、第２の実施の形態の解析対象データ抽出例を示す図である。図１２では、採取データテーブル１１１から、ある解析対象データを抽出する際の具体例を示す。図１２の例では、採取データテーブル１１１とともに、区間カウント数の積算値の計算結果（カウント積算値の項目）も図示している（図１２で例示しているように、当該カウント積算値の項目を採取データテーブル１１１に設けてもよい）。また、Ｒ＝１００００とする。
【００７８】
解析対象データ抽出部１６０は、採取データテーブル１１１をサンプル番号の小さい順に参照してカウント積算値を求め、サンプル番号に対応付けて採取データテーブル１１１に登録する。また、解析対象データ抽出部１６０は、カウント積算値が閾値Ｒを超えるサンプル番号を検出する。解析対象データ抽出部１６０は、サンプル番号Ｎにおいて、カウント積算値Ｓ（Ｎ）が“１１６６０”となり、閾値Ｒ＝１００００を超えたことを検出する。
【００７９】
すると、解析対象データ抽出部１６０は、サンプル番号Ｎ−１のカウント積算値Ｓ（Ｎ−１）“９８６０”を採取データテーブル１１１から取得し、Ｒ＝１００００との差１００００−９８６０＝２４０を求める。また、解析対象データ抽出部１６０は、サンプル番号Ｎのカウント積算値“１１６６０”とＲ＝１００００との差１１６６０−１００００＝１６６０を求める。解析対象データ抽出部１６０は、差２４０と差１６６０とを比較する（図１２（１））。
【００８０】
差２４０＜差１６６０なので、解析対象データ抽出部１６０は、サンプル番号Ｎ−１の解析対象データ候補を解析対象データとして採用する（図１２（２））。そして、解析対象データ抽出部１６０は、カウント積算値Ｓ（Ｎ）から閾値Ｒ＝１００００を減算する。この場合、サンプル番号Ｎ＋１におけるカウント積算値Ｓ（Ｎ＋１）は、区間カウント数Ｃ（Ｎ＋１）＝７０であるから、Ｓ（Ｎ＋１）＝１１６６０−１００００＋７０＝１７３０ということになる（図１２（３））。解析対象データ抽出部１６０は、図１２で例示した処理を以降のサンプル番号の各レコードに対して順番に実行することで、解析対象データの抽出を行う。
【００８１】
図１３は、第２の実施の形態の解析対象データ抽出例（続き）を示す図である。図１３では、「（実行プログラム）：：（関数）」の表記により実行中のプログラムおよび当該プログラムにおける関数を示している。ベースイベントの発生回数（図１３におけるイベント発生回数）を示す軸は、時間軸の方向と同じ方向である。図１３の紙面の左側から右側に向かう方向が時間軸の方向である。例えば、「Ａ：：ｆｏｏ１（）」が付与された矩形は、プログラムＡの関数名ｆｏｏ１（）の関数が実行されている期間を示す。すなわち、図１３では、プログラムＡの関数名ｆｏｏ１（）の関数、プログラムＡの関数名ｆｏｏ２（）の関数、プログラムＢの関数名ｂａｒ（）の関数が、この順序で順番に実行されることを示している。
【００８２】
閾値Ｒは、ベースイベントの発生回数によるサンプリングのサンプリングレートを決定する値である。例えば、一単位分の電力量（例えば、１ジュール）が消費されたというベースイベントを考える場合、Ｒ＝１００００とするなら、１万単位分の電力量（例えば、１００００ジュール）が消費されるたびに解析対象データを抽出することになる。ただし、カウンタ１０１ｂでは、ハードウェア割り込み機能がないため、ベースイベントの発生回数が丁度１００００になったタイミングを計れるわけではない。
【００８３】
具体的には、サンプル番号Ｎ（Ｎ回目）の時点で、カウンタ１０１ｂの区間カウント数の積算値Ｓ（Ｎ）（カウント積算値Ｓ（Ｎ））がサンプリングレートＲ（閾値Ｒ）を超えたとする。ただし、サンプル番号Ｎの採取データが取得された時点は、ベースイベントの発生回数が丁度１００００になったタイミング（本来のタイミング）よりも遅れた時点となる。このため、本来のタイミングよりも処理が進んでしまっており、採取データの内容が、本来のタイミングにおける内容とは異なっている可能性がある。例えば、図１３では、タイミングＴ０が本来のタイミングである。そして、タイミングＴ０では、プログラムＡの関数名ｆｏｏ２（）の関数が実行されていたにも関わらず、サンプル番号Ｎの採取データを採用すると、プログラムＢの関数名ｂａｒ（）の関数が実行されていたという誤った情報を得ることになる。
【００８４】
そこで、解析対象データ抽出部１６０は、閾値Ｒとサンプル番号Ｎ−１（Ｎ−１回目）の時点の積算値Ｓ（Ｎ−１）との差ｄ１、および、積算値Ｓ（Ｎ）と閾値Ｒとの差ｄ２とを比較する。図１３の例では、ｄ１＜ｄ２である。このため、解析対象データ抽出部１６０は、サンプル番号Ｎの採取データではなく、サンプル番号Ｎ−１の採取データを解析対象データとして採用する。サンプル番号Ｎ−１の採取データは、プログラムＡの関数名ｆｏｏ２（）の関数が実行されていたことを示しているので、サンプル番号Ｎの採取データを採用するよりも適切に解析対象データを抽出できたことになる。
【００８５】
図１４は、サンプリングの比較例を示す図である。図１４（Ａ）は、差ｄ１，ｄ２の比較を行わずに、解析対象データの抽出を行う例を示している。図１４（Ａ）の例では、カウンタ１０１ｂの区間カウント数の積算値Ｓ（Ｎ）が閾値Ｒを超えるとき、サンプル番号Ｎのレコードを解析対象データとする。すると、上記のように、本来のタイミングＴ０では、プログラムＡの関数名ｆｏｏ２（）の関数が実行されていたにも関わらず、プログラムＢの関数名ｂａｒ（）の関数が実行されていたという誤った情報を得てしまう。
【００８６】
更に、図１４（Ｂ）は、差ｄ１，ｄ２の比較を行わずに、解析対象データの抽出を行う場合において、本来のタイミングからの遅延が徐々に増えていく様子を例示している。例えば、解析対象データを抽出したタイミング毎に、積算値Ｓ（ｉ）を０にリセットして、当該タイミングから積算値Ｓ（ｉ）を計算していくことも考えられる。しかし、このようにすると、解析対象データを抽出するタイミングの本来のタイミングからの遅延が徐々に増えてしまう。図１４（Ｂ）では当該遅延Δ１，Δ２，Δ３を図示しており、Δ１＜Δ２＜Δ３である。このような遅延が発生する理由は、解析対象データを抽出するタイミングは、本来のタイミングから遅延し、この遅延分（図１４（Ｂ）のδ１，δ２）が積算されながら、解析対象データの抽出タイミングが決定されていくからである。
【００８７】
図１４の比較例に対し、解析装置１００によれば、図１３で例示したように、より適切に解析対象データを抽出できる。解析装置１００は、より適切な解析対象データを蓄積していくことで、後段のプロファイリングによる評価の信頼性を向上させることができる。また、解析装置１００は、積算値Ｓ（Ｎ）が閾値Ｒを超えたとき、積算値Ｓ（Ｎ）から閾値Ｒを引いた値を用いて、積算値Ｓ（Ｎ＋１）を計算する。このため、図１４（Ｂ）で例示した遅延の増大を抑えることができる（図１４（Ｂ）で示したδ１やδ２の積算を抑えられるため）。その結果、解析対象データを抽出するタイミングの本来のタイミング（積算値Ｓ（ｉ）が閾値Ｒを丁度超えたタイミング）からのずれを抑えることができる。
【００８８】
図１５は、サンプリング方法の比較例を示す図である。図１５（Ａ）はタイムベース・サンプリングの例を示している。タイムベース・サンプリングでは、命令アドレス、プロセスＩＤおよび消費電力量などの動作情報を一定周期で採取する。しかし、この方法では、特定のイベント（例えば、電力消費やキャッシュミスなど）に対するホットスポット（例えば、電力消費の大きなプログラム箇所やキャッシュミス頻度の高いプログラム箇所）を得ることが容易でない。当該イベントの発生とは無関係のタイミング（一定周期のタイミング）で動作情報をサンプリングするためである。すなわち、着目するイベントが発生したときよりも後のタイミングの動作情報が取得されるため、着目するイベント発生時から動作情報の内容が変わっている可能性がある。
【００８９】
一方、図１５（Ｂ）は消費電力ベース・サンプリングの例を示している。消費電力ベース・サンプリングでは、ＰＭＣなどにより消費電力量を示すカウント数を計数し、消費電力量が一定量を超えるたびに、動作情報をサンプリングする。しかし、カウンタ１０１ｂのようにハードウェア割り込み機能を有していないカウンタでは、動作情報を取得する契機となる割り込みを発生させることができないため、カウントオーバーフロー割り込み機能をもつタイマ用のカウンタを用いることが考えられる。具体的には、タイマ用のカウンタによる割り込みに応じたタイミングで、カウンタ１０１ｂのカウント数を取得し、当該カウント数に応じたタイミングで動作情報を取得する。しかし、この方法では、結局、着目するイベントが発生したときよりも後のタイミングの動作情報が取得されることになり、着目するイベントの発生時から動作情報の内容が変わっている可能性が残る。
【００９０】
解析装置１００によれば、消費電力ベース・サンプリングを行う場合に、動作情報の内容が変わっている可能性を考慮して、採取する動作情報を、今回の動作情報とするか前回の動作情報とするかを選択する。これにより、ハードウェア割り込み機能をもたないカウンタ１０１ｂをサンプリングの契機を計るために用いる場合でも、より適切な動作情報を選択して取得することができる。このように取得した動作情報を用いて、後段のプロファイリングを行うことで、当該プロファイリングの結果に対する信頼性を向上させることができる。
【００９１】
また、採取データテーブル１１１には、解析対象プログラムＰ１の実行期間中におけるサンプルが複数登録されている。このため、採取データテーブル１１１を一度作成しておけば、採取データテーブル１１１に基づいて、消費電力ベース・サンプリングによるプロファイリングを行える。例えば、閾値Ｒを変更して解析対象データの抽出をやり直すことも可能である。
【００９２】
［第３の実施の形態］
以下、第３の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【００９３】
第３の実施の形態では、採取データに含まれる一部の情報を補正して、より適切な解析対象データを取得する機能を提供する。ここで、第３の実施の形態の解析装置のハードウェア例は、図３で例示した第２の実施の形態のハードウェア例と同様であるため説明を省略する。第３の実施の形態では、第２の実施の形態と同じ符号・名称を用いて、同一の要素を指し示す。ただし、第３の実施の形態では、解析装置１００が分岐トレース情報と呼ばれる情報を基に、採取したデータの一部を補正する点が第２の実施の形態と異なる。
【００９４】
図１６は、第３の実施の形態のプロセッサの例を示す図である。プロセッサ１０１は、カウンタ１０１ａ，１０１ｂに加えて、分岐トレース支援機構１０１ｃを有する。分岐トレース支援機構１０１ｃは、プログラムの実行命令の分岐トレース情報を採取する。分岐トレース支援機構１０１ｃは、ＬＢＲ（Last Branch Record）と呼ばれることもある。分岐トレース支援機構１０１ｃは、分岐トレース情報記憶部１０１ｄを有する。
【００９５】
分岐トレース情報記憶部１０１ｄは、分岐トレース情報を記憶する。分岐トレース情報は、分岐元の命令を格納したアドレス（分岐元アドレス：Ｆｒｏｍアドレス）と分岐先の命令を格納したアドレス（分岐先アドレス：Ｔｏアドレス）のペアを示す情報である。分岐トレース情報記憶部１０１ｄは、分岐トレース情報を格納する専用のレジスタでもよい。当該レジスタを、ＬＢＲレジスタと称することもある。分岐トレース情報記憶部１０１ｄは、ＲＡＭ１０２などに確保された記憶領域でもよい。ＲＡＭ１０２などに確保された当該記憶領域をＢＴＳ（Branch Tree Store）と称することもある。分岐トレース情報の採取に分岐トレース支援機構１０１ｃを用いることで、例えば分岐成立毎にトラップを検出して分岐トレース情報を採取する手法（single step on branch）を用いるよりも、アプリケーション処理時間へのオーバーヘッドを軽減できる。
【００９６】
なお、以下の説明では、解析装置１００により実行される所定の命令群を「基本ブロック（ベーシック・ブロック）」と称することがある。基本ブロックは、命令列上において途中で分岐することなく順次実行された命令群（命令ブロックということもできる）で、ある分岐の直後の命令から次に分岐する命令までの各命令の集合である。ここで、命令列上には条件分岐があるので、基本ブロックを予め静的に取得することは困難である。このため、解析装置１００は、解析対象プログラムＰ１の実行中において採取された分岐トレース情報か、または、シミュレーションにより取得された分岐トレース情報を基に、基本ブロックを抽出する。例えば、分岐トレース情報において、あるレコードの分岐先アドレスから、その次のレコードの分岐元アドレスまでが基本ブロックである。
【００９７】
図１７は、第３の実施の形態の解析装置の機能例を示す図である。第３の実施の形態の解析装置１００は、採取データ記憶部１１０、解析対象データ記憶部１２０、オブジェクトファイル記憶部１３０、命令列記憶部１４０、データ採取部１５０、解析対象データ抽出部１６０、解析部１７０、オブジェクト回収部１８０、逆アセンブル実行部１８５および命令数カウント部１９０を有する。採取データ記憶部１１０、解析対象データ記憶部１２０、データ採取部１５０、解析対象データ抽出部１６０および解析部１７０は、図５で例示した同名・同一符号の各部と同様であるため説明を省略する。
【００９８】
ただし、データ採取部１５０は、カウンタ１０１ａからの割り込み受付時に、プロセスの情報やカウンタ１０１ｂのカウント数（消費電力量）などに加え、分岐トレース支援機構１０１ｃから分岐トレース情報を採取し、採取データ記憶部１１０に格納する。ここで、第３の実施の形態の例では、データ採取部１５０により採取される各採取データに含まれるプロセスＩＤは同じであるとする。解析対象データ抽出部１６０は、解析対象データを抽出する際、採取データに含まれる情報の一部（プログラムカウンタのアドレス値）を命令数カウント部１９０により補正させる（後述する）。
【００９９】
オブジェクトファイル記憶部１３０および命令列記憶部１４０は、ＲＡＭ１０２やＨＤＤ１０３に確保された記憶領域として実現される。オブジェクト回収部１８０、逆アセンブル実行部１８５および命令数カウント部１９０は、ＲＡＭ１０２に記憶されたプログラムをＣＰＵ１０１が実行することで実現される。
【０１００】
オブジェクトファイル記憶部１３０は、解析対象プログラムＰ１のオブジェクトファイルを記憶する。オブジェクト回収部１８０はオブジェクトファイル記憶部１３０に記憶された解析対象プログラムＰ１のオブジェクトファイルを取得し、逆アセンブル実行部１８５に提供する。逆アセンブル実行部１８５は、オブジェクトファイルを入力として逆アセンブル処理を実行する。逆アセンブル実行部１８５は、逆アセンブル処理の結果として、当該オブジェクトファイルに対応する命令列の情報（アセンブルリストと呼ばれることもある）を生成し、命令列記憶部１４０に格納する。命令列の情報は、ＲＡＭ１０２上のアドレスと命令の内容とを対応づけた情報である。
【０１０１】
命令数カウント部１９０は、解析対象データ抽出部１６０が抽出した採取データを取得し、当該採取データおよび命令列記憶部１４０に記憶された命令列の情報に基づいて、採取データに含まれるアドレス値を補正する。命令数カウント部１９０は、補正後のアドレス値を解析対象データ抽出部１６０に応答する。解析対象データ抽出部１６０は、命令数カウント部１９０による補正後のアドレスを含む採取データを、解析対象データとして解析対象データ記憶部１２０に格納する。
【０１０２】
図１８は、第３の実施の形態の分岐トレース情報の例を示す図である。分岐トレース情報Ｗ１０は、分岐トレース情報記憶部１０１ｄに格納される。分岐トレース情報Ｗ１０は、ＴＯＳ（Top Of Stack）情報Ｗ１１およびアドレスペア情報Ｗ１２を含む。
【０１０３】
ＴＯＳ情報Ｗ１１は、アドレスペア情報Ｗ１２が格納されたレジスタ・スタックにおける、最後の記録位置を示すインデックス（ＴＯＳ）を記憶する。図１８の例では、ＴＯＳ情報Ｗ１１には、インデックス“＃１”が格納されている。ＴＯＳ情報Ｗ１１は、専用のレジスタに記録される。
【０１０４】
アドレスペア情報Ｗ１２は、実行された分岐のソース（分岐元の分岐命令アドレス）とターゲット（分岐先の命令アドレス）とを対応付けた情報である。アドレスペア情報Ｗ１２は、分岐トレース支援機構１０１ｃにより、専用のレジスタ・スタックに記録されていく。例えば、当該レジスタ・スタックには、１６ペア分（各ペアは＃０〜＃１５のインデックスで示される）の分岐アドレスを記録可能である。また、当該レジスタ・スタックは、サイクリックに利用可能である。例えば、＃０，＃１，＃２，・・・と順番にアドレスペアを格納していき、＃１５に対してアドレスペアを格納した後は、＃０に戻って、アドレスペアを上書きで記録していく。アドレスペア情報Ｗ１２の何れかのインデックスに対するレジスタ領域に、新たなアドレスペアが格納されると、ＴＯＳ情報Ｗ１１も更新されることになる。例えば、今回、＃５のレジスタ領域に新たなアドレスペアを格納した場合、分岐トレース支援機構１０１ｃは、ＴＯＳ情報Ｗ１１としてインデックス“＃５”を記録する。
【０１０５】
なお、データ採取部１５０は、分岐トレース支援機構１０１ｃに対して、採取対象とする分岐命令の絞り込みを指示できる。例えば、データ採取部１５０は、採取対象とする分岐命令の種類（無条件分岐／条件分岐／ｃａｌｌ／ｒｅｔｕｒｎなど）や分岐命令を実行する特権レベル（ＯＳモードやユーザモードなど）といったフィルタリング設定が可能である。また、データ採取部１５０は、分岐トレース支援機構１０１ｃに対する分岐トレース情報の採取開始および採取停止などの指示を行うこともできる。
【０１０６】
図１９は、第３の実施の形態の命令列情報の例を示す図である。命令列情報１４１は、命令列記憶部１４０に格納される。命令列情報１４１は、アドレスおよび命令の項目を含む。アドレスの項目は、命令が格納されるアドレスを示す。命令の項目は、命令の内容を示す。ここで、命令列情報１４１の紙面に対して右側の番号は行番号である。命令列情報１４１では、行番号の昇順に（上の行から下の行へ向かう順に）各命令が実行されることも示している（ただし、行番号の大きい方の行から、行番号の小さい方の行へ処理がジャンプすることもある）。
【０１０７】
例えば、命令列情報１４１の２行目には、アドレスが“０ｘ４０１８”、命令が“ａｄｄ”という情報が登録されている。これは、アドレス“０ｘ４０１８”の命令の内容が加算命令であることを示す。
【０１０８】
また、例えば、命令列情報１４１の４行目には、アドレスが“０ｘ４０２８”、命令が“Ｊｍｐ  Ａ”という情報が登録される。これは、アドレス“０ｘ４０２８”の命令の内容が分岐命令であり、“Ａ：・・・”で示されるアドレスへ遷移することを示す。命令列情報１４１の例では、７行目の“Ａ：０ｘ４０７０”へ遷移することになる。アドレス“Ａ：０ｘ４０７０”への遷移後は、８行目以降の命令が順番に実行されることになる。
【０１０９】
図２０は、第３の実施の形態の採取データテーブルの例を示す図である。採取データテーブル１１１ａは、採取データテーブル１１１に代えて、採取データ記憶部１１０に格納される。採取データテーブル１１１ａは、サンプル番号、解析対象データ候補、区間カウント数および区間毎の分岐トレース情報の項目を含む。ここで、サンプル番号、解析対象データ候補および区間カウント数の項目に登録される情報は、図７で例示した採取データテーブル１１１の同名の項目に登録される情報と同様であるため説明を省略する。
【０１１０】
区間毎の分岐トレース情報の項目には、分岐元アドレスと分岐先アドレスのアドレスペアが登録される。区間毎の分岐トレース情報の項目には、前回のデータ採取から今回のデータ採取までの差分のアドレスペアが登録される。このため、採取データテーブル１１１ａの各レコードに含まれる区間毎の分岐トレース情報のアドレスペア数は、レコード毎に異なることがある。
【０１１１】
例えば、採取データテーブル１１１ａには、サンプル番号が“Ｎ−１”、解析対象データ候補のＣＰＵ  ＩＤが“０”、ＰＩＤが“２１９”、ＰＣが“０ｘ４１１０”、区間カウント数が“１４０”、区間毎の分岐トレース情報が“（Ｆｒｏｍ＿１  ０ｘ４０ｃ０，Ｔｏ＿１  ０ｘ４０ｄ８），（Ｆｒｏｍ＿２  ０ｘ４０ｄａ，Ｔｏ＿２  ０ｘ４０ｅ０），・・・，（Ｆｒｏｍ＿ｋ  ０ｘ４０ｆ８，Ｔｏ＿ｋ  ０ｘ４０ｆａ）”（ｋは、３以上の整数）という情報が登録されている。
【０１１２】
これは、カウンタ１０１ａからＮ−１回目の割り込みを受け付けたときの採取データであり、ＣＰＵ  ＩＤが“０”、プロセスＩＤが“２１９”、プログラムカウンタの値が“０ｘ４１１０”、カウンタ１０１ｂの区間カウント数が“１４０”であったことを示す。更に、前回のデータ採取タイミング後、アドレス“０ｘ４０ｃ０”からアドレス“０ｘ４０ｄ８”への分岐、アドレス“０ｘ４０ｄａ”からアドレス“０ｘ４０ｅ０”への分岐、・・・、アドレス“０ｘ４０ｆ８”からアドレス“０ｘ４０ｆａ”への分岐というようにｋ＋１回の分岐が発生したことを示す。ただし、発生する分岐数は、１回や２回のこともある。
【０１１３】
ここで、例えば、採取データテーブル１１１ａのサンプル番号Ｎのレコードにおいて、区分毎の分岐トレース情報に登録されたアドレスペアの数がＭ個であるとする（Ｍは１以上の整数）。この場合、当該レコードには、Ｆｒｏｍ＿１／Ｔｏ＿１のアドレスペアから、Ｆｒｏｍ＿Ｍ／Ｔｏ＿Ｍのアドレスペアまで、Ｍ×２個のアドレスが含まれることになる。
【０１１４】
また、サンプル番号Ｎのレコードにおける区分毎の分岐トレース情報を示すことを明示するため、各アドレスを、「Ｎ＿Ｆｒｏｍ＿１」、「Ｎ＿Ｔｏ＿１」、「Ｎ＿Ｆｒｏｍ＿Ｍ」、「Ｎ＿Ｔｏ＿Ｍ」というように接頭辞にサンプル番号Ｎを付して表わす。
【０１１５】
前述のように、実行された命令列中において、途中に分岐を含まない命令列単位を基本ブロック（ベーシックブロック）とする。例えば、Ｔｏ＿１アドレスからＦｒｏｍ＿２アドレスまでの命令列が、１つの基本ブロックに相当する。
【０１１６】
すなわち、ある分岐先アドレスＴｏ＿（ｍ−１）（ｍは１以上の整数）から次の分岐元アドレスＦｒｏｍ＿ｍまでが基本ブロックとなる。そこで、サンプル番号Ｎのレコードに含まれる区分毎の分岐トレース情報に基づく、Ｎ＿Ｔｏ＿（ｍ−１）からＮ＿Ｆｒｏｍ＿ｍまでの命令列を、基本ブロック「Ｎ＿ＢＬＫ＿ｍ」とする。
【０１１７】
そして、サンプル番号Ｎ−１におけるプログラムカウンタのアドレス値を、Ｎ＿Ｔｏ＿０とし、サンプル番号Ｎのレコードにおけるプログラムカウンタのアドレス値をＮ＿Ｆｒｏｍ＿（Ｍ＋１）とする。すると、Ｎ−１回目からＮ回目のサンプリング間の実行命令列は、基本ブロックＮ＿ＢＬＫ＿１〜Ｎ＿ＢＬＫ＿（Ｍ＋１）までの集合となる。この集合に含まれる命令の総数を、命令列情報１４１においてカウントした値を、総命令数Ｐとする。総命令数Ｐは、基本ブロックＮ＿ＢＬＫ＿１〜Ｎ＿ＢＬＫ＿（Ｍ＋１）の間に実行された命令の総数である。
【０１１８】
次に第３の実施の形態の解析装置１００による処理手順を説明する。第３の実施の形態のデータ採取の手順は、図１０で例示した第２の実施の形態のデータ採取の手順と同様であるため説明を省略する。
【０１１９】
図２１は、第３の実施の形態の解析対象データ抽出例を示すフローチャートである。以下、図２１に示す処理をステップ番号に沿って説明する。ここで、第３の実施の形態では、図１１で例示した第２の実施の形態の手順のステップＳ１６〜Ｓ１９に代えて、ステップＳ１６ａ，Ｓ１７ａ，Ｓ１８ａを実行する点が異なる。そこで、ステップＳ１１〜Ｓ１５の説明を省略する。ステップＳ１６ａは、ステップＳ１５でＮｏの場合に実行される。
【０１２０】
（Ｓ１６ａ）解析対象データ抽出部１６０は、サンプル番号“ｉ”のレコードを採取データテーブル１１１から取得して、命令数カウント部１９０に提供する。命令数カウント部１９０は、サンプル番号“ｉ−１”の採取データを取得したタイミングとサンプル番号“ｉ”の採取データを取得したタイミングとの間の総命令数Ｐを算出する。算出方法は、図２０で例示した通りである。なお、前述のように、両タイミングで取得された採取データに含まれるプロセスＩＤは同一である。
【０１２１】
（Ｓ１７ａ）命令数カウント部１９０は、サンプル番号“ｉ−１”の採取データを取得したタイミングとサンプル番号“ｉ”の採取データを取得したタイミングとの間の総命令数Ｐの按分比αを、式（１）により算出する。
【０１２２】
【数１】
0006544054.tif 000002
【０１２３】
ここで、Ｒはサンプリングレートに相当する閾値である。Ｓ（ｉ−１）は、サンプル番号“ｉ−１”のタイミングにおけるカウンタ１０１ｂの区間カウント数の積算値である。Ｓ（ｉ）は、サンプル番号“ｉ”のタイミングにおけるカウンタ１０１ｂの区間カウント数の積算値である。
【０１２４】
（Ｓ１８ａ）命令数カウント部１９０は、分岐トレース情報Ｗ１０を基に、命令列情報１４１における実走行命令上の「Ｐ×α」番目の命令アドレスを抽出する。例えば、命令数カウント部１９０は、サンプル番号“Ｎ−１”におけるプログラムカウンタのアドレス値Ｎ＿Ｔｏ＿０を、命令列情報１４１から検索する。そして、命令数カウント部１９０は、命令列情報１４１のアドレス値Ｎ＿Ｔｏ＿０の行以降の行を順に「Ｐ×α」番目に到達するまでカウントする。このとき、分岐トレース情報Ｗ１０に含まれるＦｒｏｍアドレスに到達したならば、Ｔｏアドレスへ遷移させた上でカウントを行っていく。命令数カウント部１９０は、こうして「Ｐ×α」番目の行に到達したら、命令列情報１４１から当該行に含まれる命令アドレスを取得して、解析対象データ抽出部１６０に応答する。解析対象データ抽出部１６０は、採取データテーブル１１１のサンプル番号“ｉ”のレコードのうち、プログラムカウンタのアドレス値を命令数カウント部１９０から取得したアドレス値に変更し、変更後のレコードを解析対象データとする。解析対象データ抽出部１６０は、当該解析対象データを解析対象データテーブル１２１に登録する。
【０１２５】
このように、例えば、積算値Ｓ（ｉ）がｉ＝Ｎで閾値Ｒを超えた場合、解析装置１００は、按分比αにより当該タイミングにおけるプログラムカウンタのアドレス値を補正する。補正後のアドレス値は、ｉ＝Ｎ−１（前回のタイミング）で観測されたプログラムカウンタのアドレス値から、Ｐ×α個の命令分だけ進めた命令のアドレス値である。これにより、解析装置１００は、解析対象データとして取得するアドレス値の精度をより高めることができる。
【０１２６】
なお、上記の例では解析装置１００は、サンプル番号ｉ＝Ｎ−１の採取データにおけるアドレス値を起点に「Ｐ×α」個の命令分だけ進めることで、当該アドレス値を補正するものとした。一方、解析装置１００は、サンプル番号ｉ＝Ｎの採取データにおけるアドレス値を起点に「Ｐ×β」個の命令分だけ戻すことで、当該アドレス値を補正してもよい。βは、式（１）の分子を“Ｓ（ｉ）−Ｒ”に置き換えて算出される値である。この場合、命令数カウント部１９０は、分岐トレース情報Ｗ１０を基に、命令列情報１４１を逆に辿って命令数をカウントする。命令数カウント部１９０は、（Ｒ−Ｓ（ｉ−１））と（Ｓ（ｉ）−Ｒ）との比較に応じて、サンプル番号ｉ＝Ｎ−１の採取データにおけるアドレス値を補正するか、または、サンプル番号ｉ＝Ｎの採取データにおけるアドレス値を補正するかを選択してもよい。例えば、（Ｒ−Ｓ（ｉ−１））＜（Ｓ（ｉ）−Ｒ）のときは前者の補正を行い、（Ｒ−Ｓ（ｉ−１））≧（Ｓ（ｉ）−Ｒ）のきは後者の補正を行うことで、探索のコストが小さくなる方を選択し、補正処理のコストを軽減することも考えられる。
【０１２７】
［第４の実施の形態］
以下、第４の実施の形態を説明する。前述の第２，第３の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１２８】
ＯＳでは、プロセス毎に異なるアドレス空間を割り当てることがある。この場合、アドレス値は、解析装置１００上で複数のプロセスに対して一元的に扱えず、プロセス毎に扱うことになる。例えば、プロセスＩＤが異なれば、アドレス空間も異なる。この場合、データ採取の２つのタイミング間（例えば、ｉ−１番目とｉ番目との間）でプロセスＩＤが異なる場合に、第３の実施の形態の手法を適用できないことが考えられる。例えば、両タイミング間でプロセスＩＤが異なる場合、ｉ番目に採取された複数の分岐アドレスペアの中の途中から別プロセスのアドレス値を示すことになるが、プロセスの切り替わりのタイミングを特定することは困難である。そこで、第４の実施の形態では、第２および第３の実施の形態の方法を組み合わせて実行する機能を提供する。
【０１２９】
ここで、第４の実施の形態の解析装置のハードウェア例は、図３で例示した第２の実施の形態のハードウェア例と同様であるため説明を省略する。第４の実施の形態では、第２の実施の形態と同じ符号・名称を用いて、同一の要素を指し示す。また、第４の実施の形態の解析装置１００の機能例は、図１７で例示した第３の実施の形態の機能例と同様であるため説明を省略する。ただし、採取データ記憶部１１０には、採取データテーブル１１１ａが格納される。更に、第４の実施の形態のデータ採取の手順は、図１０で例示した第２の実施の形態のデータ採取の手順と同様であるため説明を省略する。第４の実施の形態では、積算値Ｓ（ｉ）≧閾値Ｒとなった場合の解析対象データ抽出部１６０による処理が、第２および第３の実施の形態とは異なる。
【０１３０】
図２２は、第４の実施の形態の解析対象データ抽出例を示すフローチャートである。以下、図２２に示す処理をステップ番号に沿って説明する。第４の実施の形態では、図１１および図２１で示したステップＳ１５の後に、ステップＳ１６ｂを実行し、ステップＳ１６ｂの判定に応じて、ステップＳ１６，Ｓ１６ａの何れへ進めるかを選択する点が、第２および第３の実施の形態と異なる。そこで、以下ではステップＳ１６ｂについて説明し、他のステップの説明を省略する。ステップＳ１６ｂは、ステップＳ１５でＮｏの場合に実行される。
【０１３１】
（Ｓ１６ｂ）解析対象データ抽出部１６０は、採取データテーブル１１１に含まれるサンプル番号“ｉ−１”のレコードのプロセスＩＤ（“ＰＩＤ（ｉ−１）”）と、サンプル番号“ｉ”のレコードのプロセスＩＤ（“ＰＩＤ（ｉ）”）とを比較して、両者が一致するか否かを判定する。一致する場合、処理をステップＳ１６ａに進める。一致しない場合、処理をステップＳ１６に進める。
【０１３２】
ステップＳ１６ａ以降の手順は、図２１と同様である。解析装置１００は、ステップＳ１６ａ〜Ｓ１８ａまでの処理を実行すると、処理をステップＳ１２に進める。また、ステップＳ１６以降の手順は、図１１と同様である。解析装置１００は、ステップＳ１６〜Ｓ１９までの処理を実行すると、処理をステップＳ１２に進める。
【０１３３】
このように、解析装置１００は、積算値Ｓｉが閾値Ｒを超えたとき、プロセスＩＤの一致／不一致に応じて、解析対象データの抽出方法を選択してもよい。このようにすれば、プロセスＩＤが一致する場合に、より適切なアドレス情報を取得でき、後段のプロファイルの信頼性を一層高めることができる。一方、プロセスＩＤが一致しない場合には、補正を行わないようにすることで、不適切な補正が行われないよう制御できる。
【０１３４】
［第５の実施の形態］
以下、第５の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１３５】
第２の実施の形態では、解析対象プログラムＰ１の実行期間中に、一定時間間隔毎にデータ採取を行い、採取データテーブル１１１を取得するものとした。第２の実施の形態の例では、採取データテーブル１１１に当該実行期間中において採取された全ての採取データが登録されることになる。一方、採取データテーブルに前回および今回の採取データのみを登録することで、解析装置１００によるＲＡＭ１０２の使用量を節約することも考えられる。
【０１３６】
ここで、第５の実施の形態の解析装置のハードウェア例は、図３で例示した第２の実施の形態のハードウェア例と同様であるために説明を省略する。第５の実施の形態では、第２の実施の形態と同じ符号・名称を用いて同一の要素を指し示す。また、第５の実施の形態の解析装置１００の機能例は、図５で例示した第２の実施の形態の機能例と同様であるため説明を省略する。ただし、第５の実施の形態では、採取データ記憶部１１０に格納される情報が第２の実施の形態と異なる。
【０１３７】
図２３は、第５の実施の形態の採取データテーブルの例を示す図である。採取データテーブル１１１ｂは、採取データテーブル１１１に代えて、採取データ記憶部１１０に格納される。採取データテーブル１１１ｂは、サンプル番号、解析対象データ候補、カウント積算値（Ｓｉ）およびカウンタＣＴ２カウント数（γｉ）の項目を含む。ここで、サンプル番号および解析対象データ候補の項目に登録される情報は、図７で例示した採取データテーブル１１１の同名の項目に登録される情報と同様であるため説明を省略する。
【０１３８】
カウント積算値（Ｓｉ）の項目には、カウンタ１０１ｂの区間カウント数の積算値（Ｓｉ）が登録される。カウンタＣＴ２カウント数（γｉ）の項目には、カウンタ１０１ｂのカウント数（γｉ）が登録される。
【０１３９】
例えば、採取データテーブル１１１ｂには、次のような情報が登録される。第１には、サンプル番号が“Ｎ−１”、解析対象データ候補のＣＰＵ  ＩＤが“０”、ＰＩＤが“２１９”、ＰＣが“０ｘ４１１０”、カウント積算値（Ｓｉ）が“１４０”、カウンタＣＴ２カウント数（γｉ）が“４８６８３”という情報である。
【０１４０】
これは、カウンタ１０１ａからＮ−１回目の割り込みを受け付けたときの採取データであり、ＣＰＵ  ＩＤが“０”、プロセスＩＤが“２１９”、プログラムカウンタの値が“０ｘ４１１０”、カウント積算値が“１４０”、カウンタ１０１ｂのカウント数が“４８６８３”であったことを示す。
【０１４１】
第２には、採取データテーブル１１１ｂには、サンプル番号が“Ｎ”、解析対象データ候補のＣＰＵ  ＩＤが“０”、ＰＩＤが“２１９”、ＰＣが“０ｘ４２３０”、カウント積算値（Ｓｉ）が“１８００”、カウンタＣＴ２カウント数（γｉ）が“５０３４３”という情報である。
【０１４２】
これは、カウンタ１０１ａからＮ回目の割り込みを受け付けたときの採取データであり、ＣＰＵ  ＩＤが“０”、プロセスＩＤが“２１９”、プログラムカウンタの値が“０ｘ４２３０”、カウント積算値が“１８００”、カウンタ１０１ｂのカウント数が“５０３４３”であったことを示す。
【０１４３】
データ採取部１５０は、採取データを取得するたびに、当該採取データを採取データテーブル１１１ｂに前回の採取データを残して上書きで記録する（前々回の採取データが上書きされることになる）。次に、第５の実施の形態の解析装置１００による処理手順を説明する。ここで、第５の実施の形態では、データ採取を行いながら、解析対象データの抽出を行う。第５の実施の形態では、第２の実施の形態におけるデータ採取の手順および解析対象データ抽出の手順に代えて、以下の手順を実行する。
【０１４４】
図２４は、第５の実施の形態の解析対象データ抽出例を示すフローチャートである。以下、図２４に示す処理をステップ番号に沿って説明する。
（Ｓ２１）解析対象データ抽出部１６０は、変数ｉに０を代入する。変数ｉは、サンプル番号に相当する値である（サンプル番号ｉということがある）。解析対象データ抽出部１６０は、変数Ｓ０に０を代入する。変数Ｓ０は、変数Ｓｉの初期値である。変数Ｓｉは、変数ｉで示されるサンプル番号に対応するカウンタ１０１ｂの区間カウント数のカウント積算値である（積算値Ｓｉということがある）。更に、解析対象データ抽出部１６０は、カウンタ１０１ｂ（カウンタＣＴ２）の現在のカウント数γ０をＲＡＭ１０２に保存する。
【０１４５】
（Ｓ２２）解析対象データ抽出部１６０は、データ採取を終了するか否かを判定する。終了する場合、処理を終了する。終了しない場合、すなわち、データ採取を継続する場合、処理をステップＳ２３に進める。例えば、解析対象プログラムＰ１の実行が終了した場合、データ採取は終了となる。
【０１４６】
（Ｓ２３）解析対象データ抽出部１６０は、ｉ＋１を変数ｉに代入する。この処理は、変数ｉをインクリメントする処理ともいえる。あるいは、変数ｉに１を加算した結果を、変数ｉに代入する処理であるともいえる。
【０１４７】
（Ｓ２４）データ採取部１５０は、カウンタ１０１ａ（カウンタＣＴ１）から割り込みを受け付ける。
（Ｓ２５）データ採取部１５０は、カウンタ１０１ｂ（カウンタＣＴ２）のカウント数γｉを基に、積算値Ｓｉを計算する。具体的には、積算値Ｓｉ＝Ｓ（ｉ−１）＋｛γｉ−γ（ｉ−１）｝である。
【０１４８】
（Ｓ２６）データ採取部１５０は、ＣＰＵ  ＩＤ、プロセスＩＤ、プログラムカウンタのアドレス値、積算値Ｓｉおよびカウンタ１０１ｂ（カウンタＣＴ２）のカウント数γｉを含む現在の採取データを取得し、採取データテーブル１１１ｂに登録する。このとき、データ採取部１５０は、前々回（サンプル番号“ｉ−２”）の採取データを、今回（サンプル番号“ｉ”）の採取データで上書きする。
【０１４９】
（Ｓ２７）解析対象データ抽出部１６０は、変数Ｓｉに代入された値が閾値Ｒよりも小さい（Ｓｉ＜Ｒ）か否かを判定する。小さい場合、処理をステップＳ２２に進める。小さくない場合、すなわち、変数Ｓｉに代入された値が閾値Ｒ以上である（Ｓｉ≧Ｒ）場合、処理をステップＳ２８に進める。閾値Ｒは、イベントベースでのサンプリングレートを決める値として、ＲＡＭ１０２やＨＤＤ１０３などに予め格納される情報である。
【０１５０】
（Ｓ２８）解析対象データ抽出部１６０は、（Ｒ−Ｓ（ｉ−１））の演算結果が、（Ｓ（ｉ）−Ｒ）の演算結果よりも小さい（Ｒ−Ｓ（ｉ−１）＜Ｓ（ｉ）−Ｒ）か否かを判定する。小さい場合、処理をステップＳ２９に進める。小さくない場合、すなわち、（Ｒ−Ｓ（ｉ−１））の演算結果が、（Ｓ（ｉ）−Ｒ）の演算結果以上である（Ｒ−Ｓ（ｉ−１）≧Ｓ（ｉ）−Ｒ）場合、処理をステップＳ３０に進める。
【０１５１】
（Ｓ２９）解析対象データ抽出部１６０は、採取データテーブル１１１ｂから、ｉ−１回目（サンプル番号ｉ−１）の採取データを抽出する。抽出された採取データが、解析対象データに相当する。解析対象データ抽出部１６０は、抽出した解析対象データを、解析対象データ記憶部１２０に記憶された解析対象データテーブル１２１に登録する。図９で例示したように、採取データテーブル１１１に該当データを採取した時刻の情報が登録されている場合、解析対象データ抽出部１６０は、当該解析対象データを、採取時の時刻に対応付けて、解析対象データテーブル１２１に登録してもよい。そして、処理をステップＳ３１に進める。
【０１５２】
（Ｓ３０）解析対象データ抽出部１６０は、採取データテーブル１１１ｂから、ｉ回目（サンプル番号ｉ）の採取データを抽出する。抽出された採取データが、解析対象データに相当する。解析対象データ抽出部１６０は、抽出した解析対象データを解析対象データ記憶部１２０に記憶された解析対象データテーブル１２１に登録する。図９で例示したように、解析対象データを、採取時刻に対応付けて解析対象データテーブル１２１に登録してもよい点は、ステップＳ２９と同様である。そして、処理をステップＳ３１に進める。
【０１５３】
（Ｓ３１）解析対象データ抽出部１６０は、変数Ｓｉ−閾値Ｒを、変数Ｓｉに代入する。すなわち、今回までの積算値Ｓｉから、閾値Ｒを減算した値をＳｉに代入する。解析対象データ抽出部１６０は、採取データテーブル１１１ｂにおけるサンプル番号“Ｎ”のレコードの積算値Ｓｉを、閾値Ｒの減算後の値に更新する。そして、処理をステップＳ２２に進める。
【０１５４】
第５の実施の形態の方法によっても、第２の実施の形態と同様に、より適切な動作情報を取得することができる。また、採取データテーブル１１１ｂでは、採取データテーブル１１１よりも記録する情報量が少ない。このため、採取データテーブル１１１を用いる場合に比べて、ＲＡＭ１０２などの記憶領域を節約することができる。また、第５の実施の形態においても、第３および第４の実施の形態と同様に、解析装置１００は、採取データに含まれるアドレス値を補正した解析対象データを抽出してもよい。
【０１５５】
なお、第１の実施の形態の情報処理は、演算部１ｄにプログラムを実行させることで実現できる。また、第２〜第５の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１３に記録できる。
【０１５６】
例えば、プログラムを記録した記録媒体１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【０１５７】
以上の第１〜第５の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
（付記１）  カウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの動作情報とを記憶する第１の記憶部と、
一定時間間隔毎に前記積算値と第１の動作情報とを取得して前記第１の記憶部により一時記憶し、前記積算値が所定値を超えると、前記積算値および前記所定値に基づいて現在の第２の動作情報または一時記憶した前記第１の動作情報を選択し、第２の記憶部に格納する演算部と、
を有する情報処理装置。
【０１５８】
（付記２）  前記演算部は、前記所定値と前回の積算値との第１の差、および、今回の積算値と前記所定値との第２の差の比較に応じて、前記第１および前記第２の動作情報の何れかを選択する、付記１記載の情報処理装置。
【０１５９】
（付記３）  前記演算部は、前記第１の差の方が前記第２の差よりも小さい場合は前記第１の動作情報を選択し、前記第１の差が前記第２の差以上の場合は前記第２の動作情報を選択する、付記２記載の情報処理装置。
【０１６０】
（付記４）  前記第１の動作情報は、前記一定時間間隔毎のタイミングのうち前記第２の動作情報が取得されたタイミングの直前のタイミングで取得された前記動作情報である、付記１乃至３の何れか１つに記載の情報処理装置。
【０１６１】
（付記５）  前記演算部は、前記積算値および前記所定値を用いて、前記第１の動作情報または前記第２の動作情報を補正する、付記１乃至４の何れか１つに記載の情報処理装置。
【０１６２】
（付記６）  前記演算部は、前記所定値と前回の積算値との差の、今回の積算値と前記前回の積算値との差に対する比の値を用いて、前記第１の動作情報または前記第２の動作情報を補正する、付記５記載の情報処理装置。
【０１６３】
（付記７）  前記第１および前記第２の動作情報は、プログラムカウンタのアドレス値を含み、
前記演算部は、前記比の値を用いて前記アドレス値を補正する、付記６記載の情報処理装置。
【０１６４】
（付記８）  前記第１および前記第２の動作情報は、プロセスの識別情報およびプログラムカウンタのアドレス値を含み、
前記演算部は、前記第１および前記第２の動作情報に含まれる前記プロセスの識別情報の比較に応じて、前記アドレス値に対する補正を行うか否かを選択する、
付記５記載の情報処理装置。
【０１６５】
（付記９）  前記演算部は、前記第１のおよび前記第２の動作情報に含まれる前記プロセスの識別情報が一致する場合に前記補正を行い、一致しない場合に前記補正を行わない、付記８記載の情報処理装置。
【０１６６】
（付記１０）  前記演算部は、前記積算値が前記所定値を超えると、前記積算値から前記所定値を減算する、付記１乃至９の何れか１つに記載の情報処理装置。
（付記１１）  前記カウンタは、ハードウェア割り込み機能をもたないカウンタであり、
前記演算部は、他のカウンタからのハードウェア割り込みを前記一定時間間隔毎に受け付け、前記ハードウェア割り込みを受け付けると前記積算値を取得する、
付記１乃至１０の何れか１項に記載の情報処理装置。
【０１６７】
（付記１２）  コンピュータに、
カウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの第１の動作情報とを一定時間間隔毎に取得して第１の記憶部により一時記憶し、
前記積算値が所定値を超えると、前記積算値および前記所定値に基づいて現在の第２の動作情報または一時記憶した前記第１の動作情報を選択し、第２の記憶部に格納する、
処理を実行させる実行情報記録プログラム。
【０１６８】
（付記１３）  コンピュータが、
カウンタによるベースイベントのカウント数の積算値とプログラムまたはハードウェアの第１の動作情報とを一定時間間隔毎に取得して第１の記憶部により一時記憶し、
前記積算値が所定値を超えると、前記積算値および前記所定値に基づいて現在の第２の動作情報または一時記憶した前記第１の動作情報を選択し、第２の記憶部に格納する、
実行情報記録方法。
【符号の説明】
【０１６９】
１  情報処理装置
１ａ  カウンタ
１ｂ，１ｃ  記憶部
１ｄ  演算部
Ｇ  グラフ
Ｔ１  収集結果テーブル
【図１】
0006544054.tif 000003
【図２】
0006544054.tif 000004
【図３】
0006544054.tif 000005
【図４】
0006544054.tif 000006
【図５】
0006544054.tif 000007
【図６】
0006544054.tif 000008
【図７】
0006544054.tif 000009
【図８】
0006544054.tif 000010
【図９】
0006544054.tif 000011
【図１０】
0006544054.tif 000012
【図１１】
0006544054.tif 000013
【図１２】
0006544054.tif 000014
【図１３】
0006544054.tif 000015
【図１４】
0006544054.tif 000016
【図１５】
0006544054.tif 000017
【図１６】
0006544054.tif 000018
【図１７】
0006544054.tif 000019
【図１８】
0006544054.tif 000020
【図１９】
0006544054.tif 000021
【図２０】
0006544054.tif 000022
【図２１】
0006544054.tif 000023
【図２２】
0006544054.tif 000024
【図２３】
0006544054.tif 000025
【図２４】
0006544054.tif 000026