(57)【特許請求の範囲】
【請求項１】
所定の条件が満たされた際に発生する割り込みにより起動される割り込みハンドラにより、情報収集の対象となる対象プログラムの割り込み発生時の実行アドレスに対応する情報を収集するコンピュータによるプロファイリング方法であって、
前記対象プログラムに、前記割り込みハンドラを含むプロファイリングプログラムと、コード範囲マーク用シンボルソース又はオブジェクトをリンクさせる際に、前記対象プログラムに対して前記割り込みハンドラにより情報収集を行うターゲット範囲を指定するターゲット範囲指定ステップと、
前記対象プログラムの割り込み発生時の実行アドレスが前記ターゲット範囲内であれば前記割り込みハンドラにより収集される当該実行アドレスに対応するイベントの値をメモリに設定する情報設定ステップと
を含むことを特徴とするプロファイリング方法。
【請求項２】
前記割り込みは、前記コンピュータ内部のイベント及び／又は前記コンピュータ外部とのやり取りのイベントをカウントするハードウェアカウンタのカウント値に基づき発生することを特徴とする請求項１記載のプロファイリング方法。
【請求項３】
前記対象プログラムの割り込み発生時の実行アドレスと割り込み回数と前記メモリに格納されているプログラム定義とに基づいて、プログラム位置と前記割り込み回数を、前記プログラム位置と対応するソースプログラムの関数名を対応付けて解析プロセッサの表示部に表示するステップ
を更に含むことを特徴とする請求項１又は２記載のプロファイリング方法。
【請求項４】
前記割り込みハンドラにより収集される情報に含まれる前記イベントの情報及びハードウェアイベントの情報をマージして経験値として前記メモリに保持するステップ
を更に含むことを特徴とする請求項１乃至３のいずれか１項記載のプロファイリング方法。
【請求項５】
コンピュータに、所定の条件が満たされた際に発生する割り込みにより起動される割り込みハンドラにより、情報収集の対象となる対象プログラムの割り込み発生時の実行アドレスに対応する情報を収集するプロファイリングを行わせるプログラムであって、
前記対象プログラムに、前記割り込みハンドラを含むプロファイリングプログラムと、コード範囲マーク用シンボルソース又はオブジェクトをリンクさせる際に、前記対象プログラムに対して前記割り込みハンドラにより情報収集を行うターゲット範囲を指定させるターゲット範囲指定手順と、
前記対象プログラムの割り込み発生時の実行アドレスが前記ターゲット範囲内であれば前記割り込みハンドラにより収集される当該実行アドレスに対応するイベントの値をメモリに設定させる情報設定手順と
を前記コンピュータに実行させることを特徴とするプログラム。
【請求項６】
命令毎に対応付けた前記メモリの領域に、前記割り込みハンドラにより収集された情報に含まれる前記イベントの実行回数又はイベント発生回数、及びハードウェアイベントの実行回数又はイベント発生回数を設定させる手順
を前記コンピュータに実行させることを特徴とする請求項５記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロファイリング方法及びプログラムに係り、特に所定の条件が満たされた際に発生する割り込みにより起動される割り込みハンドラによりプログラムの実行状況に関する情報を収集するプロファイリング方法及びプログラムに関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、性能分析や最適化等を行う手段としてプロファイリング手法が広く用いられている。プロファイリングは、ターゲットとするプログラムコードの走行頻度、時間分布、プログラム内部の呼出し頻度等の分析に有効である。プログラムを動作マシンで動作させてプロファイリングする手法には、以下の２つ手法がある。
【０００３】
第１の手法は、コンパイラにプロファイリング用コードを挿入させ、実行情報を収集するプロファイリングである。第１の手法は、最も一般的に使用されているプロファイリング手法であり、コンパイラ製品に標準機能として実装されている。又、第１の手法においてデータの収集を効率化する方法が、例えば、特許文献１及び特許文献２にて提案されている。
【０００４】
第２の手法は、ハードウェアタイマ又はＣＰＵの性能モニタリング機構を利用したサンプリングによるプロファイリングである。第２の手法では、一定の時間毎に、或いは、プロセッサや周辺回路で計測可能な実行命令数やキャッシュミス数のハードウェアカンウタ等が一定の回数に到達する毎に、サンプリング又はハードウェアイベントの割り込みを発生させ、割り込み処理として登録したプロファイリングプログラムで割り込み発生時の実行命令アドレス等を記録することで、統計的に最も時間を費やしたコード範囲や最も頻繁に実行されたコード範囲更に最もハードウェアイベントの発生したコード範囲等を抽出する。第２の手法は、例えば、非特許文献１及び非特許文献２にて提案されている。
【０００５】
尚、命令レベルシミュレータにより命令をトレースする手法も、例えば特許文献３にて提案されている。しかし、シミュレータで高アクセスコスト、即ち、実行サイクル数をシミュレートする場合、１命令ずつシミュレータでトレースするためシミュレーションに時間がかかり、シミュレータではアクセスレイテンシの遅延等の実機環境特有の問題に起因する正確な情報を取得できない等の問題があった。
【特許文献１】特開平１１−２１２８３７号公報
【特許文献２】特開２００３−１４０９２８号公報
【特許文献３】特開平７−１９１８８２号公報
【非特許文献１】「OProfile − A System Profiler for Linux」、[平成１８年３月１８日検索]、インターネット<URL: http://sourceforge.net/projects/oprofile/>
【非特許文献２】「インテル VTune パフォーマンス・アナライザ」、[平成１８年３月１８日検索]、インターネット<URL:http://www.intel.com/cd/software/products/  ijkk/jpn/vtune/index.htm>
【発明の開示】
【発明が解決しようとする課題】
【０００６】
シミュレータではなくプログラムを動作マシンで動作させてプログラムの実行状況に関する情報を取得するプロファイリング手法の場合、以下の如き問題があった。
【０００７】
上記第１の手法の場合、対象とするコード全般にプロファイリング用処理が付加されるために時間的オーバヘッドが生じるか、或いは、コード挿入のために本来のプログラムバイナリと動作的、メモリ配置的に差異が生じてしまった。特に、通信等のタイミングが重要なプログラムでは本来の動作と異なる場合が多く、必要精度により使用が制限される場合があった。
【０００８】
又、上記第２の手法の場合、対象とするコードに対する改変は必要ないためオーバヘッドの問題やメモリ配置の問題は抑制可能である。しかし、この第２の手法はプロファイリングプログラムで割り込み発生時の実行命令アドレス等を記録する領域の確保が必要であり、組み込み装置等の場合のようにメモリ資源が乏しい環境では実現できていなかった。
【０００９】
そこで、本発明は、少ないオーバヘッドでプログラムの実行状況に関する詳細な情報の収集を可能とするプロファイリング方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記の課題は、所定の条件が満たされた際に発生する割り込みにより起動される割り込みハンドラにより情報収集の対象となる対象プログラムの実行状況に関する情報を収集するコンピュータによるプロファイリング方法であって、該対象プログラムに対して該割り込みハンドラにより情報収集を行うターゲット範囲を指定するターゲット範囲指定ステップと、該ターゲット範囲で該割り込みが発生した際に該割り込みハンドラにより収集される情報をメモリに設定する情報設定ステップとを含むことを特徴とするプロファイリング方法により達成できる。
【００１１】
上記の課題は、コンピュータに、所定の条件が満たされた際に発生する割り込みにより起動される割り込みハンドラにより情報収集の対象となる対象プログラムの実行状況に関する情報を収集するプロファイリングを行わせるプログラムであって、該対象プログラムに対して該割り込みハンドラにより情報収集を行うターゲット範囲を指定させるターゲット範囲指定手順と、該ターゲット範囲で該割り込みが発生した際に該割り込みハンドラにより収集される情報をメモリに設定させる情報設定手順とを該コンピュータに実行させることを特徴とするプログラムにより達成できる。
【発明の効果】
【００１２】
本発明によれば、組み込み装置等のメモリ資源が乏しいメモリ制約が大きい装置においても少ないオーバヘッドでプログラムの実行状況に関する詳細な情報の収集を可能とするプロファイリング方法及びプログラムを実現することができる。
【発明を実施するための最良の形態】
【００１３】
本発明のプロファイリングは、所定の条件が満たされた際に発生する割り込みにより起動される割り込みハンドラにより情報収集の対象となるプログラムの実行状況に関する情報を収集する。具体的には、プロファイリングは、割り込みハンドラにより情報収集を行うターゲット範囲を指定し、指定されたターゲット範囲で割り込みが発生した際に割り込みハンドラにより収集される情報を設定する。
【００１４】
例えば、ハードウェアカウンタの、データキャッシュミス発生のハードウェアイベントを使用すれば、キャッシュミスの発生した命令で割り込みが発生するため、キャッシュミスの命令を解析してキャッシュミスのアクセス先を解析することができる。
【００１５】
本発明によれば、組み込み装置等のメモリ資源が乏しい等のメモリ制約が大きい装置においても、全ての実行プログラムについて、若しくは、一部の実行プログラムについてプロファイリング対象を絞り込むことで実行頻度情報を取得でき、従来は取得できなかったチューニング情報の取得が可能となる。又、実行プログラムの少なくとも一部について、ハードウェアタイマやハードウェアイベントに着目したプロファイリング対象を絞り込むことで、イベント情報を取得でき、従来は取得できなかったチューニング情報の取得が可能となる。更に情報収集の対象となるプログラムにプロファイリングプログラムをリンクする時に測定対象を絞り込めるため、プログラムの再翻訳が不要となり、プロファイリングを容易に行なうことができると共に、利用者の負担も軽減できる。
【００１６】
以下に、本発明のプロファイリング方法及びプログラムの各実施例を図面と共に説明する。
【実施例】
【００１７】
先ず、本発明が適用可能な電子装置の構成を、図１乃至図３と共に説明する。
【００１８】
図１は、本発明が適用可能な電子装置の構成を示す図である。図１に示すように、電子装置１は、コンピュータハードウェア（又は、プロセッサ）１０と、オペレーティングシステム２０と、アプリケーションプログラム（又は、実行形式ファイル）３０と、プロファイリングプログラム１００とが連携して情報を収集する構成を有する。尚、オペレーティングシステムのない環境でもオペレーティングシステムの代替機構を用意することで本発明は実現できる。そのため以降の説明では、オペレーティングシステム２０のある例を示す。電子装置１の基本構成は、周知の汎用コンピュータシステムと同様の基本構成を採用可能である。
【００１９】
コンピュータハードウェア１０は、プロファイリングプログラム１００を含めてプログラムを実行する装置であり、オペレーティングシステム２０により設定された条件が満たされた場合、即ち、オペレーティングシステム２０により指定されたイベントが発生した場合に割り込みを発生して予め登録された割り込み処理プログラムを実行する。コンピュータハードウェア１０は、ＣＰＵ等のプロセッサで構成されたプロセッサコアと、ハードウェアカウンタと、内蔵タイマと、キャッシュメモリ等の記憶部を有する。
【００２０】
オペレーティングシステム２０は、コンピュータハードウェア１０のリソースを管理し、アプリケーションプログラム３０の実行制御等を行う制御プログラムであり、コンピュータハードウェア１０に対して割り込み発生イベントの設定等を行う。
【００２１】
アプリケーションプログラム３０は、情報収集の対象（又は、チューニング対象）となるプログラムであり、プロファイリングプログラム１００が提供するＡＰＩを用いてライブラリ関数（又は、プロファイリング開始関数）を呼び出すことにより情報収集に必要な処理を実行する。本実施例では、アプリケーションプログラム３０に、割り込みハンドラ１４０を含むプロファイリングプログラム１００と、コード範囲マーク用シンボルソース又はオブジェクトを連携（即ち、リンク）させる。このとき、プロファイリングしたいプログラムや関数のみを、ターゲット範囲（又は、測定範囲）として任意に抽出して指定する。ターゲット範囲は、コード範囲マーク用シンボルで対象のコード部を挟むことで指定する。プロファイリングでは、対象のコード部と同じサイズのメモリがコンピュータハードウェア１０内に必要となるため、このようにターゲット範囲を指定することにより、たとえ電子装置１がメモリ資源が乏しい等のメモリ制約が大きい組み込み装置であっても、ターゲット範囲を絞ったプロファイリングが可能となる。
【００２２】
尚、以下の説明では、プロファイリング値を格納するメモリ内の領域がコードサイズと同じサイズであり、プロファイリング値を格納する領域サイズと１命令コードサイズが同じである場合を例に取るが、本発明の適用はそのような場合に限られるものではない。つまり、命令の長さにかかわらず、命令毎に対応するプロファイリング値を格納する領域を用意すれば良い。
【００２３】
プロファイリングプログラム１００は、アプリケーションプログラム３０の情報収集を行うプログラムであり、初期処理ルーチン１１０と、ターゲット範囲指定インタフェース１２０と、イベント設定インタフェース１３０と、割り込みハンドラ１４０と、イベント管理テーブル１５０と、割り込みハンドラ記録テーブル１６０とを有する。本発明のプログラムは、本実施例ではこのプロファイリングプログラム１００に相当する。又、本発明のプロファイリング方法は、本実施例ではこのプロファイリングプログラム１００を実行するコンピュータによるものである。
【００２４】
初期処理ルーチン１１０は、オペレーティングシステム２０に対して、サンプリング割り込みを発生するタイマの設定や、サンプリング割り込みが発生した際に起動される割り込みハンドラ１４０の登録等を依頼する。尚、サンプリング割り込み発生イベントとしては、タイマによる一定時間の経過の他に、一定回数の命令実行や一定回数の特定アドレスへのアクセス、更にキャッシュミス発生等のプロセッサ性能モニタリング機構が割り込みを発生するイベントを設定することができる。
【００２５】
ターゲット範囲指定インタフェース１２０は、アプリケーションプログラム３０が測定開始を指定する開始指定ＡＰＩにて実行される。ターゲット範囲指定インタフェース１２０は、情報収集のターゲット範囲として関数名或いは実行コードに付されたラベルが指定された場合、該当関数（又は、ラベルを含む関数）の開始アドレスと終了アドレスを、スタートアップルーチンを含むオペレーティングシステム２０及びアプリケーションプログラム３０より取得してイベント管理テーブル１５０に登録する。本実施例では、上記の如く、アプリケーションプログラム３０に、割り込みハンドラ１４０を含むプロファイリングプログラムと、コード範囲マーク用シンボルソース又はオブジェクトをリンクさせているので、プロファイリングしたいプログラムや関数のみを任意に抽出して指定することでもターゲット範囲を指定でき、たとえ電子装置１がメモリ制約の厳しい組み込み装置であってもターゲット範囲を絞ったプロファイリングが可能となる。
【００２６】
イベント設定インタフェース１３０は、アプリケーションプログラム３０からイベント値に関する引数を受け取り、情報収集のターゲット範囲に対するイベント値を設定するライブラリ関数であり、アプリケーションプログラム３０がイベント値の指定に使用するＡＰＩを提供する。
【００２７】
ここで、イベントとは、情報収集のターゲット範囲内で割り込みハンドラ１４０が起動された場合に割り込みハンドラ１４０により収集される値に関連する属性(変数)である。又、イベント値としては複数の値を設定することができる。このイベント設定インタフェース１３０が、アプリケーションプログラム３０からイベント値に関する引数として受け取り、情報収集のターゲット範囲に対するイベント値を設定することにより、アプリケーションプログラム３０の実行状況に関する様々な情報を収集することができる。たとえば一定時間ごとの割り込みを発生させる場合、イベントの属性としては割り込み間隔を指定する。アプリケーションプログラム３０から、開始指定ＡＰＩのパラメタとして割り込み間隔を指定する。
【００２８】
割り込みハンドラ１４０は、タイマによるサンプリング割り込みやプロセッサ性能モニタリング機構によるサンプリング割り込みにより起動され、割り込み発生時の実行アドレスを割り込みハンドラ記録テーブル１６０に記録する割り込み処理プログラムであり、イベント管理テーブル１５０に登録された情報収集のターゲット範囲内で起動されると、割り込み発生時の実行アドレスに対応するイベント値を割り込みハンドラ記録テーブル１６０に記録する。たとえば一定時間に割り込みを発生させる場合では、割り込み発生のプログラムカウンタに対応させた領域に、割り込み回数を割り込み記録テーブル１６０に格納する。
【００２９】
イベント管理テーブル１５０は、アプリケーションプログラム３０の情報収集に関する情報を格納する。図２は、イベント管理テーブル１５０の一例を示す図である。図２に示すように、このイベント管理テーブル１５０は、アプリケーションプログラム３０の情報収集のターゲット範囲毎に、ターゲット範囲の開始アドレスと、ターゲット範囲の終了アドレスと、イベント値を対応させて格納する。
【００３０】
例えば、情報収集のターゲット範囲は、開始アドレスが「１０００」であり、終了アドレスが「２０００」であり、ターゲット範囲内で割り込みハンドラ１４０が起動されると割り込みハンドラ１４０によりイベントとして割り込み回数が情報として収集される。
【００３１】
割り込みハンドラ記録テーブル１６０には、サンプリング割り込みにより割り込みハンドラ１４０が起動された場合に割り込みハンドラ１４０により収集された情報が記録される。図３は、割り込みハンドラ記録テーブル１６０の一例を示す図である。図３に示すように、この割り込みハンドラ記録テーブル１６０には、サンプリング割り込みが発生した時点で、割り込み時実行アドレスが情報収集のターゲット範囲内である場合にアプリケーションプログラム３０の実行アドレスである割り込み時実行アドレスに対応付けられたイベント値（例えば割り込み回数）が記録される。収集した情報の詳細な方法は、図６での５１Ｂで示す方法で格納する。
【００３２】
例えば、サンプリング割り込みが発生した時点でのアプリケーションプログラム３０の実行アドレスが「１２００」である場合、図２に示した情報収集のターゲット範囲がイベント管理テーブル１５０の測定範囲であると、割り込み時実行アドレスが情報収集のターゲット範囲となるので、実行アドレス「１２００」に対応付けられたとイベント値（割り込み回数）として「＋１」した値が記録される。
【００３３】
次に、本実施例の処理手順を、図４と共に説明する。図４は、本実施例の処理手順を説明するフローチャートである。図４に示すように、このプロファイリングシステムにおいて、ステップＳ１０１では、プロファイリングプログラム１００の初期処理ルーチン１１０がタイマ設定等のサンプリング割り込み発生イベントに関する設定及び割り込みハンドラ１４０の登録をオペレーティングシステム２０に対して依頼する（オペレーティングシステムのない環境では、代わりに登録する）。
【００３４】
ステップＳ１０２では、オペレーティングシステム２０が、タイマ設定等のサンプリング割り込み発生に必要な設定をコンピュータハードウェア１０に対して行う（オペレーティングシステムのない環境では、代わりに設定する）。これにより一定の時間毎に、或いは、プロセッサイベントの一定回数毎等にサンプリング割り込みが発生し、割り込みハンドラ１４０が呼ばれる。
【００３５】
ステップＳ１０３では、アプリケーションプログラム３０がユーザにより埋め込まれたターゲット範囲指定インタフェース１２０の呼出しを行うと、ターゲット範囲指定インタフェース１２０は、情報収集のターゲット範囲に関する情報をイベント管理テーブル１５０に登録する。
【００３６】
ステップＳ１０４では、アプリケーションプログラム３０がユーザにより経路情報、変数状態等のイベントへの設定のためにイベント設定インタフェース１３０の呼出しを行うと、イベント設定インタフェース１３０はイベント値をイベント管理テーブル１５０に記録する。尚、ユーザは、イベント値の対象となる情報収集の範囲を指定する。
【００３７】
ステップＳ１０５では、タイマ割り込み等により割り込みハンドラ１４０が起動されると、割り込みハンドラ１４０は、割り込み時実行アドレスを割り込みハンドラ記録テーブル１６０に記録し、そのアドレスが情報収集のターゲット範囲内であればアドレスに対応するイベント値を記録する。
【００３８】
このように、イベント設定インタフェース１３０がイベント値をイベント管理テーブル１５０に記録し、割り込みハンドラ１４０が割り込み時実行アドレスが情報収集のターゲット範囲内であればイベント値を割り込みハンドラ記録テーブル１６０に記録することにより、イベント値に設定された経路情報や変数状態等の詳細な情報を収集することができる。イベント管理テーブル１５０や割り込みハンドラ記録テーブル１６０内のデータは、コンピュータハードウェア１０内のメモリに格納される。
【００３９】
メモリに格納してあるサンプリング値を含むデータは、電子装置１に接続可能な外部装置である解析プロセッサ（図示せず）のデバッガ等に取り込まれる。デバッガ等により取得されたサンプリング値を格納したデータとアプリケーションプログラム３０のシンボル情報を照らし合わせるプログラムにより、高コスト関数、高コスト処理や高コスト命令毎にサンプリング値が解析プロセッサの表示部に表示される。これにより、アプリケーションプログラム３０でのボトルネック箇所を特定することができる。
【００４０】
次に、プロファイリングのターゲット範囲の指定方法とサンプリング値のメモリ内の格納領域について、より詳細に説明する。
【００４１】
上記の如く、本実施例では、プロファイリングはサンプリングしたアドレスではなく、対応するアドレスのカウント値を設定する。又、アプリケーションプログラム３０にプロファイリングプログラム１００をリンクする際に、指定したコード範囲マーク用シンボルを設定する。このコード範囲マーク用シンボルのシンボル名は任意であり、例えばTOP_LABEL,BOTTOM_LABELをコード部配置領域の開始位置及び終端位置のアドレスとする。TOP_LABEL,BOTTOM_LABELを定義したソース又はオブジェクトを、情報収集の対象となるアプリケーションプログラム３０のプロファイリングプログラム１００へのリンク時に結合する。
【００４２】
情報を収集したいアプリケーションプログラム３０の箇所は、モジュール又は関数単位でセクションに出力され、コンパイラで自動的に出力されるか、或いは、ユーザが明示的にセクションの切り分けを行なう。尚、全てのコード部を１つのターゲット範囲に設定することもできる。
【００４３】
上記リンク時のターゲット範囲の指定（リンクコマンド文字列）は、例えば次の通りである。
(a) -sc  TOP_LABEL,*/code, BOTTOM_LABEL,...,*,WORK_AREA
(b) -sc TOP_LABEL＝0x00000100,BOTTOM_LABEL＝0x00001100,WORK_AREA＝0x01000000
リンク時のターゲット範囲の指定（ＧＵＩ指定方法）は、例えば図５に示すようになる。図５は、セクション名を表示したリスト一覧から、TOP_LABEL (S)とBOTTOM_LABEL(E)を指定する場合を示す。
【００４４】
上記の方法では、ユーザがリンク時に情報収集する対象となるアプリケーションプログラム３０を設定する。ユーザは、アプリケーションプログラム３０で使用するサンプリング割り込み回数の格納領域のサイズと、このチューニング対象となるアプリケーションプログラム３０を見極める必要がある。通常、チューニングすべきプログラムは判明しており、又、不明な場合でも範囲を順次絞ることでチューニング対象を絞ることができる。
【００４５】
上記の如く、プロファイリングプログラム１００をリンクしたアプリケーションプログラム３０は、電子装置１の実装環境において実行される。プロファイリングプログラム１００の割り込みハンドラ１４０では、内蔵タイマの割り込み毎にプログラムカウンタやプロセッサ状態を示すハードウェアカウンタの値をメモリに格納する。割り込み処理とサンプリング値の格納方法と、サンプリング値が格納されるメモリの領域の関係は、例えば図６に示すようになっている。図６は、プロファイリングのターゲット範囲の指定方法とサンプリング値のメモリ内の格納領域を説明する図である。図６中、５１Ａはコンピュータハードウェア１０のメモリ内のコード部配置領域、５１Ｂはコンピュータハードウェア１０のメモリ内の書き込み可能領域（即ち、ワークエリア）である。
【００４６】
ステップＳ１では、サンプリング割り込みを発生するタイマを起動する。ステップＳ２では、割り込み回数カウント領域を、ターゲット範囲のサイズＬ分だけゼロクリアする。ここで、Ｌは次式に示すようにシンボルアドレスの差から求める。
【００４７】
Ｌ＝（BOTTOM_LABELのアドレス）−（TOP_LABELのアドレス）
ステップＳ３では、起動されたタイマにより一定間隔で割り込み発生させる。割り込み間隔は、開始指定ＡＰＩで指定する。ステップＳ４では、コード部配置領域５１Ａの開始位置TOP_LABELのアドレスからの相対アドレスαを求め、書き込み可能領域５１Ｂの先頭からこの相対アドレスαに対応する位置に割り込み回数データを「＋１」だけインクリメントしたデータを格納する。ステップＳ５では、タイマを終了し、メモリにある割り込み回数データがデバッガ等に取り込まれる。
【００４８】
尚、本発明は、プロセッサ内部のイベント又はプロセッサ外部とのやり取りのイベントをカウントすることによりプロセッサ性能をモニタリングするハードウェアカウンタを有するプロセッサにも適用することができる。この場合、上記の如き一定時間毎に発生する割り込みを情報収集のトリガとしても良く、更に、ハードウェアカウンタの任意のイベント発生時の状態をトリガとしても良い。具体的には、プロセッサの実行サイクル数を指標として情報を取得するケースを、ハードウェアカウンタの例えばデータキャッシュミス発生イベントに置き換える。この場合、キャッシュミスの発生した命令で割り込みが発生するため、キャッシュミスの命令を解析してキャッシュミスのアクセス先を解析することができる。このように、一定時間で発生するハードウェアカウンタやハードウェアカウンタのハードウェアイベントの発生をトリガにしても良い。
【００４９】
ハードウェアイベントの発生は、キャシュミス数、TLB（Translation Lookaside Buffer）ミス数、実行命令数、実行命令並列度、分岐命令数、パイプラインストール要因、レジスタ干渉サイクル数、バスアクセス情報等のプロセッサのハードウェア情報を取得するためのイベントカウンタをプロセッサ側に設けることで検出可能である。
【００５０】
図７は、タイマ割り込み発生時の処理を説明するフローチャートである。図７において、タイマ割り込みが発生すると、ステップＳ１１は、今回のタイマ割り込み時のプログラムカウンタ（ＰＣ）の値を求める。ステップＳ１２は、プログラムカウンタの値がターゲット範囲内であるか否か、即ち、（開始位置TOP_LABEL）<ＰＣ<（終了位置BOTTOM_LABEL）であるか否かを判定する。ステップＳ１２の判定結果がＹＥＳであると、ステップＳ１３は、開始位置TOP_LABELのアドレスからの相対アドレスαを求め、書き込み可能領域の先頭からその相対アドレスαに対応する位置に割り込み回数データを「＋１」だけインクリメントしたデータを格納し、処理は呼び出し元に復帰する。
【００５１】
図８は、解析プロセッサの処理を説明するフローチャートである。解析プロセッサ（図示せず）が電子装置１に接続されて解析処理が開始されると、図８において、ステップＳ２１は、アプリケーションプログラム３０の割り込みアドレスと割り込み回数を電子装置１内のメモリから取り込む。ステップＳ２２は、電子装置１内のメモリに格納されているプログラム定義や割り込み回数等を読み取って、プログラム位置と割り込み回数をグラフ等の形式で解析プロセッサの表示部に表示する。プログラム位置は、対応するソースプログラムの関数名と照合して表示される。プログラム位置とソースプログラムの関数名の対応付けには、プログラムファイルのシンボル情報やデバッグ情報等を利用可能である。このようにして、例えば図９に示す如きプロファイリングの結果が表示される。
【００５２】
図９は、プロファイリングの結果の表示例を示す図である。図９中、ウィンドウＷ１内の「３８４２２」等の値は割り込み回数を示し、「FuncE」等は関数、「１８４」はメモリ領域のサイズを示す。例えば、ウィンドウＷ１内の関数をダブルクリックすることで、対応するＣソースやアセンブラソースウィンドウＷ２に分岐する。アセンブラソースウィンドウＷ２内には、アドレスと対応する割り込み検出回数、関数FuncE内での情報収集対象プログラムの実行頻度（即ち、実行状況）が表示されている。図９に示す表示例の場合、割り込みが高頻度の関数順に表示がなされ、関数内でのアセンブラ命令単位にアクセスコスト、即ち、割り込み回数が表示され、対応する関数、命令位置をクリック等で照合することで対応するＣソースやアセンブラソースウインドウ(デバッガ、エディタ、ツール等)に分岐することができる。
【００５３】
図８の説明に戻るに、ステップＳ２３は、アクセスコスト、即ち、割り込み回数を、データ定義位置に対して例えば図８に示す如きグラフ形式で表示する。データ定義位置は、ソース名Ｓ、関数名Ｆ、変数Ｖ、アドレスＡ等で特定可能である。この場合、XXXXXXで示すアドレス近傍でアクセスコストが大きいことがわかる。
【００５４】
このようにして、割り込みハンドラ１４０により収集されるサンプリング値及び任意のハードウェアイベント情報を、命令毎に対応付けた領域に実行回数として設定することができる。又、割り込みハンドラ１４０により、収集されたサンプリング値を実行形式プログラムと照合することにより、実行頻度の高い関数、処理及び命令を対比させ、又、対応するＣソースや機械語命令と照合して表示することもできる。更に、割り込みハンドラ１４０により収集されるサンプリング値及び任意のハードウェアイベント情報をマージすることで、これらの情報を取得する毎にマージされた値を経験値としてメモリに保持することで、プロファイリングの精度を向上させることもできる。
【００５５】
図１０は、コンピュータハードウェアと解析プロセッサを示すブロック図である。
【００５６】
図１０は、測定用プロセッサ２０１は、図１に示すコンピュータハードウェア１０に相当する。測定用プロセッサ２０１は、各種命令を処理するプロセッサコア２１１、データを保持するキャッシュメモリ２１２、測定用プロセッサ２０１内部のイベント及び／又は測定用プロセッサ２０１外部とのやり取りのイベントをカウントすることにより性能をモニタリングするハードウェアカウンタ２１３、一定間隔で割り込み信号を出力する内蔵タイマ２１４を有する。キャッシュメモリ２１２は、測定用プロセッサ２０１に対して外部接続されていても良い。
【００５７】
記憶部２０２は、解析対象プログラム２２１、プロファイリングプログラム２２２、及び検出命令アドレス又はハードウェアカウンタ２１３のカウント値に基づく割り込み回数を格納するテーブル２２３を保持する。解析対象プログラム２２１はプロファイリングされるソフトウェアであり、図１に示すアプリケーションプログラム３０に相当する。プロファイリングプログラム２２２は、解析対象プログラム２２１のプロファイル情報を取得するソフトウェアであり、図１に示すプロファイリングプログラム１００に相当する。測定用プロセッサ２０１、記憶部２０２及び性能解析プロセッサ２０３はバス３００で夫々接続されている。
【００５８】
タイマ２１４は、解析対象プログラム２２１の実行が開始されてから所定時間間隔で割り込み信号を出力する。この割り込み信号の所定時間間隔は、プロファイリングプログラム２２２で設定可能である。割り込み発生を検出した命令アドレス又はハードウェアカウンタ２１３のイベント発生をトリガとして、ハードウェアカウンタ２１３の割り込み発生を検出した命令アドレスがテーブル２２３に格納される。ハードウェアカウンタ２１３は、タイマ２１４と同様に解析対象プログラム２２１の実行が開始されると同時に計数を開始する。テーブル２２３は、解析対象プログラム２２１の性能解析中に作成される。解析プロセッサ２０３は、測定用プロセッサ２０１における実行結果を表示する、測定用プロセッサ２０１と別体のプロセッサである。解析プロセッサ２０３は、テーブル２２３の保持された情報を読み出して、ソース名、関数、変数名、変数内相対アドレスに対応させて図８及び図９の如き表示を行う。
【００５９】
更に、情報収集の対象となるアプリケーションプログラム３０（解析対象プログラム２２１）を自動的に絞るようにしても良い。この場合、情報収集の対象となるアプリケーションプログラム３０を、シミュレータで取得したプロファイル情報を基に、実行コストの大きいプログラムからプロファイル対象候補として抽出すれば良い。又、ソースコードを関数の複雑度や、関数間の呼び出し関係等の静的解析情報の大小によりプロファイル対象を抽出しても良い。
【００６０】
図１１は、プロファイリングのターゲット範囲を自動抽出する処理を説明するフローチャートである。図１１において、ステップＳ３１では、ユーザがプロファイリングの対象を判断できているか否かを判定する。ステップＳ３１の判定結果がＹＥＳであると、ステップＳ３２では、ユーザがプロファイリングの対象となるアプリケーションプログラム３０をプロファイリングプログラム１００にリンクする時に指定し、処理は終了する。
【００６１】
他方、ステップＳ３１の判定結果がＮＯであると、ステップＳ３３では、コンピュータハードウェア１０（即ち、プロセッサ）がプロファイリングの対象となるアプリケーションプログラム３０を自動的に抽出する処理を開始する。ステップＳ３４では、コンピュータハードウェア１０のメモリ内の使用可能なメモリサイズＵＭＳを算出する。ステップＳ３５では、コンピュータハードウェア１０が使用可能なメモリサイズＵＭＳに納まる範囲内でアプリケーションプログラム３０のターゲット範囲を抽出し、プロファイリングの対象となるアプリケーションプログラム３０をプロファイリングプログラム１００にリンクする時に自動的にこのターゲット範囲を指定する。
【００６２】
ステップＳ３５は、プロファイリングの対象となるアプリケーションプログラム３０をシミュレータで取得したプロファイル情報を元に、実行コストの大きいプログラムからプロファイリングの対象候補として抽出する第１の方法を用いても、或いは、ソースコードを関数の複雑度や関数間の呼び出し関数等の静的解析情報の大小によりプロファイリングの対象候補を抽出する第２の方法を用いても良い。
【００６３】
尚、本発明は、以下に付記する発明をも包含するものである。
（付記１）
所定の条件が満たされた際に発生する割り込みにより起動される割り込みハンドラにより情報収集の対象となる対象プログラムの実行状況に関する情報を収集するコンピュータによるプロファイリング方法であって、
該対象プログラムに対して該割り込みハンドラにより情報収集を行うターゲット範囲を指定するターゲット範囲指定ステップと、
該ターゲット範囲で該割り込みが発生した際に該割り込みハンドラにより収集される情報をメモリに設定する情報設定ステップとを含むことを特徴とするプロファイリング方法。
（付記２）
該ターゲット範囲指定ステップは、該対象プログラムに、該割り込みハンドラを含むプロファイリングプログラムと、コード範囲マーク用シンボルソース又はオブジェクトをリンクさせる際に、該ターゲット範囲を指定することを特徴とする付記１記載のプロファイリング方法。
（付記３）
該割り込みは、該コンピュータ内部のイベント及び／又は該コンピュータ外部とのやり取りのイベントをカウントするハードウェアカウンタのカウント値に基づき発生することを特徴とする付記１又は２記載のプロファイリング方法。
（付記４）
該割り込みハンドラにより収集された情報に含まれるサンプリング値及びハードウェアイベント情報を、命令毎に対応付けた該メモリの領域に実行回数又はイベント発生回数として設定するステップを含むことを特徴とする付記１乃至３のいずれか１項記載のプロファイリング方法。
（付記５）
該割り込みハンドラにより収集された情報に含まれるサンプリング値を実行形式プログラムと照合し、実行頻度の高い関数、処理及び命令を対比し、対応するＣソース又は機械語命令と照合して、該コンピュータに接続される解析プロセッサの表示部に表示するステップを含むことを特徴とする付記１乃至３のいずれか１項記載のプロファイリング方法。
（付記６）
該割り込みハンドラにより収集される情報に含まれるサンプリング値及びハードウェアイベント情報をマージして経験値として該メモリに保持するステップを含むことを特徴とする付記１乃至５のいずれか１項記載のプロファイリング方法。
（付記７）
コンピュータに、所定の条件が満たされた際に発生する割り込みにより起動される割り込みハンドラにより情報収集の対象となる対象プログラムの実行状況に関する情報を収集するプロファイリングを行わせるプログラムであって、
該対象プログラムに対して該割り込みハンドラにより情報収集を行うターゲット範囲を指定させるターゲット範囲指定手順と、
該ターゲット範囲で該割り込みが発生した際に該割り込みハンドラにより収集される情報をメモリに設定させる情報設定手順とを該コンピュータに実行させることを特徴とするプログラム。
（付記８）
該ターゲット範囲指定手順は、該対象プログラムに、該割り込みハンドラを含むプロファイリングプログラムと、コード範囲マーク用シンボルソース又はオブジェクトをリンクさせる際に、該ターゲット範囲を指定させることを特徴とする付記７記載のプログラム。
（付記９）
該割り込みは、該コンピュータ内部のイベント及び／又は該コンピュータ外部とのやり取りのイベントをカウントするハードウェアカウンタのカウント値に基づき発生することを特徴とする付記７又は８記載のプログラム。
（付記１０）
該割り込みハンドラにより収集された情報に含まれるサンプリング値及びハードウェアイベント情報を、命令毎に対応付けた該メモリの領域に実行回数として設定させる手順を該コンピュータに実行させることを特徴とする付記７乃至９のいずれか１項記載のプログラム。
（付記１１）
該割り込みハンドラにより収集された情報に含まれるサンプリング値を実行形式プログラムと照合させ、実行頻度の高い関数、処理及び命令を対比させ、対応するＣソース又は機械語命令と照合させ、該コンピュータに接続される解析プロセッサの表示部に表示させる手順を該コンピュータに実行させることを特徴とする付記７乃至９のいずれか１項記載のプログラム。
（付記１２）
該割り込みハンドラにより収集される情報に含まれるサンプリング値及びハードウェアイベント情報をマージして経験値として該メモリに保持させる手順を該コンピュータに実行させることを特徴とする付記７乃至１１のいずれか１項記載のプログラム。
【００６４】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【図面の簡単な説明】
【００６５】
【図１】本発明が適用可能な電子装置の構成を示す図である。
【図２】イベント管理テーブルの一例を示す図である。
【図３】割り込みハンドラ記録テーブルの一例を示す図である。
【図４】実施例の処理手順を説明するフローチャートである。
【図５】リンク時のターゲット範囲の指定を説明する図である。
【図６】プロファイリングのターゲット範囲の指定方法とサンプリング値のメモリ内の格納領域を説明する図である。
【図７】タイマ割り込み発生時の処理を説明するフローチャートである。
【図８】解析プロセッサの処理を説明するフローチャートである。
【図９】プロファイリングの結果の表示例を示す図である。
【図１０】コンピュータハードウェアと解析プロセッサを示すブロック図である。
【図１１】プロファイリングのターゲット範囲を自動抽出する処理を説明するフローチャートである。
【符号の説明】
【００６６】
１      電子装置
１０      コンピュータハードウェア
２０      オペレーティングシステム
３０      アプリケーションプログラム
１００      ポロファイリングプログラム
１４０      割り込みハンドラ
２０１      測定用プロセッサ
２０２      メモリ
２０３      解析プロセッサ
２１１      プロセッサコア
２１２      キャッシュメモリ
２１３      ハードウェアカウンタ
２１４      内蔵タイマ
２２１      解析対象プログラム
２２２      プロファイリングプログラム
２２３      テーブル
【図１】
0005029245.tif 000002
【図２】
0005029245.tif 000003
【図３】
0005029245.tif 000004
【図４】
0005029245.tif 000005
【図５】
0005029245.tif 000006
【図６】
0005029245.tif 000007
【図７】
0005029245.tif 000008
【図８】
0005029245.tif 000009
【図９】
0005029245.tif 000010
【図１０】
0005029245.tif 000011
【図１１】
0005029245.tif 000012