(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＞
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、前者のコンパイラによるプロファイリングコード挿入方式には、対象とするコード全般にプロファイリング用処理が付加されるために時間的オーバヘッドが生じる、あるいは、コード挿入のために本来のプログラムバイナリと動作的、メモリ配置的に差異が生じるといった問題がある。特に、通信等のタイミングが重要なプログラムでは本来の動作と異なる場合が多く、必要精度により使用が制限される場合がある。
【０００７】
また、後者のサンプリングによるプロファイリング方式においては、対象とするコードに対する改変は必要ないためオーバヘッドの問題やメモリ配置の問題は極小化可能であるが、サンプリングされる際の実行命令アドレスに至る経路やその呼出し関係が採取できないという問題がある。例えば、あるライブラリ関数Ａが最も実行時間が多かったとした場合、通常そのライブラリ関数Ａを呼出すコードは複数存在し得るし、さらにそのコード部分も複数から呼出されうる。この方式では、こういった呼出し元や依存関係等の詳細動作情報を効率良く採取する手法がなかった。
【０００８】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、少ないオーバヘッドで詳細な情報の収集を可能とするプロファイリングプログラムおよびプロファイリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本発明は、所定の条件が満たされた際に発生する割込みにより起動される割込みハンドラを含み、当該割込みハンドラによって情報収集対象プログラムの実行状況に関する情報を収集するプロファイリングプログラムであって、前記割込みハンドラによって前記実行状況に関する情報の収集を行う対象範囲である、該対象範囲を識別する番号であるターゲット番号と、該対象範囲の開始アドレスと、該対象範囲の終了アドレスと、該対象範囲内で発生した関数の呼び出し経路を特定するフラグ値とを、前記情報収集対象プログラムによって呼び出されたインタフェースを介して受け付ける対象範囲指定手順と、前記対象範囲ごとに、該対象範囲を識別する番号であるターゲット番号と、該対象範囲の開始アドレスと、該対象範囲の終了アドレスと、該対象範囲内で発生した関数の呼び出し経路を特定するフラグ値とを対応づけて記憶するフラグ管理テーブルに、前記対象範囲指定手順により指定されたターゲット番号、開始アドレス及び終了アドレスを登録する対象範囲登録手順と、前記対象範囲内で発生した関数の呼び出し経路を特定するためのフラグ値を、前記情報収集対象プログラムによって呼び出されたインタフェースを介して受け付ける情報設定手順と、前記対象範囲指定手順により指定されたターゲット番号に対応付けて前記情報設定手順により設定されたフラグ値を前記フラグ管理テーブルに登録する情報登録手順と、前記対象範囲で割込みが発生した際に、該割込みが発生した時点での前記情報収集対象プログラムの実行アドレスである割込み時実行アドレスと、前記割込みハンドラによって収集された前記フラグ値とを対応付けて割込みハンドラ記録テーブルに記録する記録手順と、をコンピュータに実行させる。
【００１０】
本発明によれば、割込みハンドラによって情報収集を行う対象範囲を指定し、指定した対象範囲で割込みが発生した際に割込みハンドラによって収集される情報を設定するよう構成したので、経路情報や変数情報などを設定することによってこれらの情報を収集することができる。
【００１１】
また、本発明は、上記の発明において、前記所定の条件の設定および割込みハンドラの登録をオペレーティングシステムに依頼する初期処理手順をさらにコンピュータに実行させることを特徴とする。
【００１２】
本発明によれば、所定の条件の設定および割込みハンドラの登録をオペレーティングシステムに依頼するよう構成したので、必要な初期化処理を行うことができる。
【００１３】
また、本発明は、上記の発明において、前記対象範囲に遷移する関数呼出しを情報収集対象プログラムから検出し、該検出した関数呼出しを前記情報設定手順の呼出しに置き換えるとともに、該関数呼出しによる実行の遷移に関する情報を記録する関数置換手順をさらにコンピュータに実行させ、前記情報設定手順は、前記関数置換手順により記録された実行の遷移に関する情報の一部を前記収集される情報として設定することを特徴とする。
【００１４】
本発明によれば、情報収集対象範囲に遷移する関数呼出しを情報収集対象プログラムから検出し、検出した関数呼出しを情報設定手順の呼出しに置き換えるとともに、関数呼出しによる実行の遷移に関する情報を記録し、記録した実行の遷移に関する情報の一部を収集される情報として設定するよう構成したので、実行の遷移に関する情報を自動的に収集することができる。
【００１５】
また、本発明は、上記の発明において、前記関数置換手順は、前記実行の遷移に関する情報の一部として各遷移を識別する遷移識別子を記録し、前記情報設定手順は、前記関数置換手順により記録された遷移識別子を前記収集される情報として設定することを特徴とする。
【００１６】
本発明によれば、実行の遷移に関する情報の一部として各遷移を識別する遷移識別子を記録し、記録した遷移識別子を収集される情報として設定するよう構成したので、遷移識別子を用いて実行の遷移に関する情報を収集することができる。
【００１７】
また、本発明は、上記の発明において、前記関数置換手順は、前記実行の遷移に関する情報として遷移元アドレスおよび遷移先アドレスを含む情報を記録することを特徴とする。
【００１８】
本発明によれば、実行の遷移に関する情報として遷移元アドレスおよび遷移先アドレスを含む情報を記録するよう構成したので、情報収集対象範囲に遷移してくる遷移元を特定することができる。
【００１９】
また、本発明は、上記の発明において、前記関数置換手順は、前記対象範囲に遷移するまでの関数呼出しの段数指定に基づいて前記関数呼出しを検出することを特徴とする。
【００２０】
本発明によれば、情報収集対象範囲に遷移するまでの関数呼出しの段数指定に基づいて関数呼出しを検出するよう構成したので、段数指定を変えることによって様々な経路情報を収集することができる。
【００２１】
また、本発明は、上記の発明において、前記情報設定手順により設定される情報は、割込みが発生した際の実行アドレスとともに収集されることを特徴とする。
【００２２】
本発明によれば、設定される情報は、割込みが発生した際の実行アドレスとともに収集されるよう構成したので、設定した情報と実行位置の関係を把握することができる。
【００２３】
また、本発明は、上記の発明において、前記対象範囲指定手順による対象範囲の指定には、関数名による指定が含まれることを特徴とする。
【００２４】
本発明によれば、情報収集対象範囲の指定には、関数名による指定が含まれるよう構成したので、関数の呼出し関係に関する情報を収集することができる。
【００２５】
また、本発明は、上記の発明において、前記情報設定手順により設定される情報は複数の値から構成され、前記割込みハンドラは複数の値を収集することを特徴とする。
【００２６】
本発明によれば、設定する情報は複数の値から構成され、割込みハンドラは複数の値を収集するよう構成したので、様々な情報を収集することができる。
【００２７】
また、本発明は、所定の条件が満たされた際に発生する割込みにより起動される割込みハンドラを含み、当該割込みハンドラによって情報収集対象プログラムの実行状況に関する情報を収集する処理をコンピュータが実行するプロファイリング方法であって、前記コンピュータが、前記割込みハンドラによって前記実行状況に関する情報の収集を行う対象範囲である、該対象範囲を識別する番号であるターゲット番号と、該対象範囲の開始アドレスと、該対象範囲の終了アドレスと、該対象範囲内で発生した関数の呼び出し経路を特定するフラグ値とを、前記情報収集対象プログラムによって呼び出されたインタフェースを介して受け付ける対象範囲指定工程と、前記対象範囲ごとに、該対象範囲を識別する番号であるターゲット番号と、該対象範囲の開始アドレスと、該対象範囲の終了アドレスと、該対象範囲内で発生した関数の呼び出し経路を特定するフラグ値とを対応づけて記憶するフラグ管理テーブルに、前記対象範囲指定工程により指定されたターゲット番号、開始アドレス及び終了アドレスを登録する対象範囲登録工程と、前記対象範囲内で発生した関数の呼び出し経路を特定するためのフラグ値を、前記情報収集対象プログラムによって呼び出されたインタフェースを介して受け付ける情報設定工程と、前記対象範囲指定工程により指定されたターゲット番号に対応付けて前記情報設定工程により設定されたフラグ値を前記フラグ管理テーブルに登録する情報登録工程と、前記対象範囲で割込みが発生した際に、該割込みが発生した時点での前記情報収集対象プログラムの実行アドレスである割込み時実行アドレスと、前記割込みハンドラによって収集された前記フラグ値とを対応付けて割込みハンドラ記録テーブルに記録する記録工程と、を実行する。
【００２８】
本発明によれば、割込みハンドラによって情報収集を行う対象範囲を指定し、指定した対象範囲で割込みが発生した際に割込みハンドラによって収集される情報を設定するよう構成したので、経路情報や変数情報などを設定することによってこれらの情報を収集することができる。
【発明の効果】
【００２９】
本発明によれば、経路情報や変数情報などを設定することによってこれらの情報を収集するので、経路情報や変数情報などの詳細情報を少ないオーバヘッドで収集することができるという効果を奏する。
【００３０】
また、本発明によれば、必要な初期化処理を行うので、プロファイリングを容易に行うことができるという効果を奏する。
【００３１】
また、本発明によれば、実行の遷移に関する情報を自動的に収集するので、ユーザの負担を軽減することができるという効果を奏する。
【００３２】
また、本発明によれば、遷移識別子を用いて実行の遷移に関する情報を収集するので、割込みハンドラによる情報の収集を高速に行うことができるという効果を奏する。
【００３３】
また、本発明によれば、情報収集対象範囲に遷移してくる遷移元を特定することができるので、分析を容易にすることができるという効果を奏する。
【００３４】
また、本発明によれば、段数指定を変えることによって様々な経路情報を収集するので、分析を容易にすることができるという効果を奏する。
【００３５】
また、本発明によれば、設定した情報と実行位置の関係を把握することができるので、分析を容易にすることができるという効果を奏する。
【００３６】
また、本発明によれば、関数の呼出し関係に関する情報を収集するので、関数の呼出関係に関する分析を容易にすることができるという効果を奏する。
【００３７】
また、本発明によれば、様々な情報を収集することができるので、分析を容易にすることができるという効果を奏する。
【発明を実施するための最良の形態】
【００３８】
以下に添付図面を参照して、この発明に係るプロファイリングプログラムおよびプロファイリング方法の好適な実施例を詳細に説明する。
【実施例１】
【００３９】
まず、本実施例１に係るプロファイリングシステムの構成について説明する。図１は、本実施例１に係るプロファイリングシステムの構成を示す図である。同図に示すように、このプロファイリングシステムでは、コンピュータハードウェア１０と、オペレーティングシステム２０と、アプリケーションプログラム３０と、プロファイリングプログラム１００とが連携して情報を収集する。
【００４０】
コンピュータハードウェア１０は、プロファイリングプログラム１００を含めてプログラムを実行する装置であり、オペレーティングシステム２０によって設定された条件が満たされた場合、すなわち、オペレーティングシステム２０によって指定された事象が発生した場合に割込みを発生して予め登録された割込み処理プログラムを実行する。
【００４１】
オペレーティングシステム２０は、コンピュータハードウェア１０のリソースを管理し、アプリケーションプログラム３０の実行制御などを行う制御プログラムであり、コンピュータハードウェア１０に対して割込み発生事象の設定などを行う。
【００４２】
アプリケーションプログラム３０は、情報が収集される対象プログラムであり、プロファイリングプログラム１００が提供するＡＰＩを用いてライブラリ関数を呼出すことによって情報収集に必要な処理を実行する。
【００４３】
プロファイリングプログラム１００は、アプリケーションプログラム３０の情報収集を行うプログラムであり、初期処理ルーチン１１０と、ターゲット範囲指定インタフェース１２０と、フラグ設定インタフェース１３０と、割込みハンドラ１４０と、フラグ管理テーブル１５０と、割込みハンドラ記録テーブル１６０とを有する。
【００４４】
初期処理ルーチン１１０は、オペレーティングシステム２０に対して、サンプリング割込みを発生するタイマの設定や、サンプリング割込みが発生した際に起動される割込みハンドラ１４０の登録などを依頼する処理部である。なお、サンプリング割込み発生事象としては、タイマによる一定時間の経過の他に、一定回数の命令実行や一定回数の特定アドレスへのアクセスなどＣＰＵ性能モニタリング機構が割込みを発生する事象を設定することができる。
【００４５】
ターゲット範囲指定インタフェース１２０は、アプリケーションプログラム３０から対象アドレス、関数名または実行コードに付されたラベルを引数として受け取り、情報収集の対象範囲をフラグ管理テーブル１５０に登録するライブラリ関数であり、アプリケーションプログラム３０が対象範囲の指定に使用するＡＰＩを提供する。
【００４６】
なお、情報収集の対象範囲として関数名あるいは実行コードに付されたラベルが指定された場合は、ターゲット範囲指定インタフェース１２０は、該当関数(あるいはラベルを含む関数)の開始アドレスと終了アドレスを、オペレーティングシステム２０およびアプリケーションプログラム３０より取得してフラグ管理テーブル１５０に登録する。
【００４７】
フラグ設定インタフェース１３０は、アプリケーションプログラム３０からフラグ値を引数として受け取り、情報収集の対象範囲に対するフラグ値を設定するライブラリ関数であり、アプリケーションプログラム３０がフラグ値の指定に使用するＡＰＩを提供する。
【００４８】
ここで、フラグとは、情報収集対象範囲内で割込みハンドラ１４０が起動された場合に割込みハンドラ１４０によって値が収集される変数である。また、フラグ値としては複数の値を設定することができる。
【００４９】
このフラグ設定インタフェース１３０が、アプリケーションプログラム３０からフラグ値を引数として受け取り、情報収集の対象範囲に対するフラグ値を設定することによって、アプリケーションプログラム３０の実行状況に関する様々な情報を収集することができる。
【００５０】
割込みハンドラ１４０は、タイマによるサンプリング割込みやＣＰＵ性能モニタリング機構によるサンプリング割込みによって起動され、割込み発生時の実行アドレスを割込みハンドラ記録テーブル１６０に記録する割込み処理プログラムであり、フラグ管理テーブル１５０に登録された情報収集対象範囲内で起動されると、割込み発生時の実行アドレスに加えてフラグ値を割込みハンドラ記録テーブル１６０に記録する。
【００５１】
フラグ管理テーブル１５０は、アプリケーションプログラム３０の情報収集に関する情報を記憶するテーブルである。図２は、フラグ管理テーブル１５０の一例を示す図である。
【００５２】
同図に示すように、このフラグ管理テーブル１５０は、アプリケーションプログラム３０の情報収集対象範囲ごとに、対象範囲を識別する番号であるターゲット番号と、対象範囲の開始アドレスと、対象範囲の終了アドレスと、フラグ値とを対応させて記憶する。
【００５３】
例えば、ターゲット番号が「０」である情報収集対象範囲は、開始アドレスが「１０００」であり、終了アドレスが「２０００」であり、対象範囲内で割込みハンドラ１４０が起動されると「１」が割込みハンドラ１４０によって実行状況を示す情報として収集される。
【００５４】
割込みハンドラ記録テーブル１６０は、サンプリング割込みによって割込みハンドラ１４０が起動された場合に割込みハンドラ１４０によって収集された情報が記録されるテーブルである。
【００５５】
図３は、割込みハンドラ記録テーブル１６０の一例を示す図である。同図に示すように、この割込みハンドラ記録テーブル１６０には、サンプリング割込みが発生した時点でのアプリケーションプログラム３０の実行アドレスである割込み時実行アドレスと、割込み時実行アドレスが情報収集対象範囲内である場合に記録されるフラグ値とが記録される。
【００５６】
例えば、サンプリング割込みが発生した時点でのアプリケーションプログラム３０の実行アドレスが「１２００」である場合には、図２に示した情報収集対象範囲がフラグ管理テーブル１５０に登録されているとすると、割込み時実行アドレスが情報収集対象範囲となるので、実行アドレス「１２００」とフラグ値「１」が記録される。
【００５７】
次に、本実施例１に係るプロファイリングシステムの処理手順について説明する。図４は、本実施例１に係るプロファイリングシステムの処理手順を示すフローチャートである。同図に示すように、このプロファイリングシステムは、プロファイリングプログラム１００の初期処理ルーチン１１０がタイマ設定などサンプリング割込み発生事象に関する設定および割込みハンドラ１４０の登録をオペレーティングシステム２０に対して依頼する（ステップＳ１０１）。
【００５８】
すると、オペレーティングシステム２０が、タイマ設定などサンプリング割込み発生に必要な設定をコンピュータハードウェア１０に対して行う（ステップＳ１０２）。これにより一定の時間毎に、あるいはＣＰＵ事象の一定回数毎などにサンプリング割込みが発生し、割込みハンドラ１４０が呼ばれる。
【００５９】
そして、アプリケーションプログラム３０がユーザによって埋め込まれたターゲット範囲指定インタフェース１２０の呼出しを行うと、ターゲット範囲指定インタフェース１２０は、情報収集対象範囲に関する情報をフラグ管理テーブル１５０に登録し、ターゲット番号を返す（ステップＳ１０３）。
【００６０】
そして、アプリケーションプログラム３０がユーザによって経路情報、変数状態等のフラグへの設定のために埋め込まれたフラグ設定インタフェース１３０の呼出しを行うと、フラグ設定インタフェース１３０は、フラグ値をフラグ管理テーブル１５０に記録する（ステップＳ１０４）。なお、ユーザは、ターゲット番号によってフラグ値の対象となる情報収集範囲を指定する。
【００６１】
そして、タイマ割込みなどによって割込みハンドラ１４０が起動されると、割込みハンドラ１４０は、割込み時実行アドレスを割込みハンドラ記録テーブル１６０に記録し、そのアドレスが情報収集対象範囲内であればフラグ値を併せて記録する（ステップＳ１０５）。
【００６２】
このように、フラグ設定インタフェース１３０がフラグ値をフラグ管理テーブル１５０に記録し、割込みハンドラ１４０が割込み時実行アドレスが情報収集対象範囲内であればフラグ値を割込みハンドラ記録テーブル１６０に記録することによって、フラグ値に設定された経路情報や変数状態等の詳細な情報を収集することができる。
【００６３】
次に、具体例を用いてプロファイリングプログラム１００の動作を説明する。図５は、本実施例１に係る具体例を示す図である。同図に示すように、アプリケーションプログラム３０が、関数Ａを実行する際にターゲット範囲指定インタフェース１２０が提供するＡＰＩを用いて情報収集対象範囲を指定すると、ターゲット範囲指定インタフェース１２０は、フラグ管理テーブル１５０に開始アドレス、終了アドレスを設定する（１）。
【００６４】
具体的には、ターゲット範囲指定インタフェース１２０は、図５に示すように、ターゲット番号は「０」から昇順に付与した番号を、開始アドレスおよび終了アドレスには対象範囲(target関数()のアドレス)を開始アドレス「１０００」、終了アドレス「２０００」を設定する。
【００６５】
そして、アプリケーションプログラム３０が関数Ｂを実行する際に、フラグ設定インタフェース１３０が提供するＡＰＩを用いてフラグ値「１」を指定すると、フラグ設定インタフェース１３０は、フラグ管理テーブル１５０にフラグ値「１」を記録する（２）。
【００６６】
そして、アプリケーションプログラム３０が、関数Ｃを呼出し（３）、関数Ｃからtarget関数を呼出し（４）、情報収集対象範囲であるtarget関数を実行する。このtarget関数実行中に、サンプリング割込みが発生すると（５）、プロファイリングプログラム１００の割込みハンドラ１４０が呼出される。
【００６７】
そして、割り込みハンドラ１４０は、割込みハンドラ記録テーブル１６０に割込み時実行アドレスを記録し、かつそのアドレスがフラグ管理テーブル１５０に設定されているアドレス範囲内であるか否かを判断する。すると、ここでは、フラグ管理テーブル１５０に設定されているアドレス範囲内であるので、対応するフラグ値を併せて記録する（６）。
【００６８】
この例では、割込み時の実行アドレスが「１２００」であり、割り込みハンドラ１４０は、割込みハンドラ記録テーブル１６０の割込み時実行アドレスに「１２００」を記録し、そのアドレスがフラグ管理テーブル１５０の開始アドレス−終了アドレスの範囲に含まれるかを判断する。その結果、割込み時の実行アドレス「１２００」が開始アドレス「１０００」と終了アドレス「２０００」の範囲に含まれるため、割込みハンドラ記録テーブル１６０のフラグ値に、フラグ管理テーブル１５０のフラグ値にその時点で記録されている値「１」を記録する。
【００６９】
このように、割込みハンドラ１４０が割込みハンドラ記録テーブル１６０に、その時点でフラグ管理テーブル１５０に記録されているフラグ値を記録することによって、実行アドレスに加えて他の情報を収集することができる。
【００７０】
上述してきたように、本実施例１では、ターゲット範囲指定インタフェース１２０が情報収集対象範囲の指定をアプリケーションプログラム３０から受け取ってフラグ管理テーブル１５０に登録し、フラグ設定インタフェース１３０がフラグ値をアプリケーションプログラム３０から受け取ってフラグ管理テーブル１５０に設定し、割込みハンドラ１４０が割込み発生時の実行アドレスがフラグ管理テーブル１５０に登録された情報収集対象範囲のいずれかに該当する場合には実行アドレスとともにフラグ管理テーブル１５０のその時点のフラグ値を割込みハンドラ記録テーブル１６０に記録することとしたので、フラグ値として経路情報や変数値を設定することによって、実行状況に関する詳細な情報を収集することができる。
【実施例２】
【００７１】
ところで、上記実施例１では、フラグ設定インタフェース１３０が提供するＡＰＩを用いてユーザがアプリケーションプログラム３０でフラグ値を設定する場合について説明した。しかしながら、ユーザがアプリケーションプログラム３０でフラグ値を設定することがユーザにとって負担となる場合もある。そこで、本実施例２では、ユーザがフラグ値を設定することなく経路情報を収集することができるプロファイリングプログラムについて説明する。
【００７２】
まず、本実施例２に係るプロファイリングシステムの構成について説明する。図６は、本実施例２に係るプロファイリングシステムの構成を示す図である。同図に示すように、このプロファイリングシステムでは、図１に示したプロファイリングシステムと比較して、プロファイリングプログラム１００の代わりにプロファイリングプログラム２００が、アプリケーションプログラム３０の代わりにアプリケーションプログラム４０が連携して情報を収集する。なお、ここでは説明の便宜上、図１に示した各部と同様の役割を果たす機能部については同一符号を付すこととしてその詳細な説明を省略する。
【００７３】
アプリケーションプログラム４０は、アプリケーションプログラム３０と同様に、情報収集の対象となるプログラムであるが、このアプリケーションプログラム４０では、フラグ設定インタフェースが提供するＡＰＩは使用されていない。すなわち、ユーザは、情報収集のためにフラグ値を設定する必要がない。
【００７４】
プロファイリングプログラム２００は、アプリケーションプログラム４０の実行状況に関する情報を収集するプログラムであり、初期処理ルーチン１１０と、ターゲット範囲指定インタフェース２２０と、フラグ設定インタフェース２３０と、割込みハンドラ１４０と、フラグ管理テーブル１５０と、割込みハンドラ記録テーブル１６０と、命令書換ルーチン２７０と、遷移管理テーブル２８０とを有する。
【００７５】
命令書換ルーチン２７０は、ターゲット範囲指定インタフェース２２０によって新たな情報収集対象範囲がフラグ管理テーブル１５０に登録されると、アプリケーションプログラム４０を解析し、情報収集対象範囲に遷移してくる命令を抽出してフラグ設定インタフェース１３０を呼出すように命令の書換を行う処理部である。
【００７６】
また、この命令書換ルーチン２７０は、実行の遷移に関する情報として遷移管理テーブル２８０に遷移元アドレス、遷移先アドレス、遷移を識別する遷移識別値、フラグ管理テーブル１５０の対応するターゲット番号を設定する。なお、この遷移命令の抽出と書換えは、情報収集対象範囲に遷移してくる段数を指定できるものとする。
【００７７】
遷移管理テーブル２８０は、アプリケーションプログラム４０における実行の遷移に関する情報を記憶するテーブルである。図７は、遷移管理テーブル２８０の一例を示す図である。同図に示すように、この遷移管理テーブル２８０は、遷移元アドレス、遷移先アドレス、ターゲット番号、遷移識別値を記憶する。
【００７８】
例えば、遷移識別値が「０」である遷移は、対応する情報収集対象範囲のターゲット番号は「０」であり、遷移元アドレスは「５００」であり、遷移先アドレスは「１００」である。
【００７９】
ターゲット範囲指定インタフェース２２０は、ターゲット範囲指定インタフェース１２０と同様に、情報収集対象範囲をフラグ管理テーブル１５０に登録するライブラリ関数であるが、情報収集対象範囲の登録後に命令書換ルーチン２７０を呼び出す。
【００８０】
フラグ設定インタフェース２３０は、遷移管理テーブル２８０より呼出し元アドレス（遷移元アドレス）からターゲット番号を得て、フラグ管理テーブル１５０の該当ターゲット番号のフラグ値に遷移識別値を記録する処理部である。また、このフラグ設定インタフェース２３０は、フラグ値の設定後、遷移先アドレスに実行アドレスを移す。
【００８１】
次に、具体例を用いてプロファイリングプログラム２００の動作を説明する。図８は、本実施例２に係る具体例を示す図である。同図に示すように、アプリケーションプログラム４０が、関数Ａを実行する際にターゲット範囲指定インタフェース２２０が提供するＡＰＩを用いて情報収集対象範囲を指定すると、ターゲット範囲指定インタフェース２２０は、フラグ管理テーブル１５０に開始アドレス、終了アドレスを設定する（１）。
【００８２】
具体的には、ターゲット範囲指定インタフェース２２０は、図８に示すように、ターゲット番号は「０」から昇順に付与した番号を、開始アドレスおよび終了アドレスには対象範囲(target関数()のアドレス)を開始アドレス「１０００」、終了アドレス「２０００」を設定する。
【００８３】
そして、命令書換ルーチン２７０がアプリケーションプログラム４０を解析し、情報収集対象範囲に遷移してくる命令を抽出し、プロファイリングプログラム２００のフラグ設定インタフェース２３０を呼出すように命令の書換えを行う。また、命令書換ルーチン２７０が遷移管理テーブル２８０に遷移元アドレス、遷移先アドレス、遷移識別値、フラグ管理テーブル１５０に設定された情報収集対象範囲のターゲット番号を設定する（２）。なお、図８の例では、情報収集対象範囲への２段前の遷移を対象として書換えを行う場合を示している。この段数としては、任意の段数を指定することが可能である。
【００８４】
具体的には、遷移元アドレスは"call 関数Ｃ"の命令アドレス「５００」であり、遷移先アドレスは"関数Ｃ"の先頭命令アドレス「１００」であり、ターゲット番号はフラグ管理テーブル１５０で相当する該当範囲「０」である。また、遷移識別子は「０」から昇順に付与した番号である。
【００８５】
そして、アプリケーションプログラム４０は、関数Ｂを実行する際、書換えられた命令によりフラグ設定インタフェース２３０を呼出す（３）。すると、フラグ設定インタフェース２３０は、遷移管理テーブル２８０より呼出し元アドレス（遷移元アドレス）からターゲット番号を得て、フラグ管理テーブル１５０の該当ターゲット番号のフラグ値に遷移識別値を記録する。その後、遷移先アドレスに実行アドレスを移す（４）。
【００８６】
この例では呼出し元アドレスは「５００」であるので、遷移管理テーブル２８０より遷移元アドレス「５００」に対応するターゲット番号「０」を得て、フラグ管理テーブル１５０の該当ターゲット番号「０」のフラグ値に遷移識別値「０」を記録する。その後、遷移管理テーブル２８０より遷移先アドレス「１００」を得て実行アドレスを移す。
【００８７】
そして、アプリケーションプログラム４０は、情報収集対象範囲であるtarget関数に遷移する（５）。このtarget関数実行中に、サンプリング割込みが発生すると（６）、プロファイリングプログラム２００の割込みハンドラ１４０が呼出される（７）。
【００８８】
そして、割り込みハンドラ１４０は、割込みハンドラ記録テーブル１６０に割込み時実行アドレスを記録し、かつそのアドレスがフラグ管理テーブル１５０に設定されているアドレス範囲であれば対応するフラグ値を併せて記録する。この例では、割込み時の実行時のアドレスが「１２００」であった場合を示す。
【００８９】
この場合、まず、割込みハンドラ記録テーブル１６０の割込み時実行アドレスに「１２００」を記録し、そのアドレスがフラグ管理テーブル１５０の開始アドレス−終了アドレスの範囲に含まれるかを判断する。この例では開始アドレス「１０００」、終了アドレス「２０００」であり該当し、割込みハンドラ記録テーブル１６０のフラグ値にフラグ管理テーブル１５０のフラグ値にその時点で記録されている「０」を記録する。
【００９０】
上述してきたように、本実施例２では、命令書換ルーチン２７０が、ターゲット範囲指定インタフェース２２０によって新たな情報収集対象範囲がフラグ管理テーブル１５０に登録されると、アプリケーションプログラム４０を解析し、情報収集対象範囲に遷移してくる命令を抽出してフラグ設定インタフェース２３０を呼出すように命令の書換を行うとともに、遷移管理テーブル２８０に遷移元アドレス、遷移先アドレス、遷移を識別する遷移識別値、フラグ管理テーブル１５０の対応するターゲット番号を設定する。
【００９１】
そして、フラグ設定インタフェース２３０は、呼出されると、遷移管理テーブル２８０より呼出し元アドレス（遷移元アドレス）からターゲット番号を得て、フラグ管理テーブル１５０の該当ターゲット番号のフラグ値に遷移識別値を記録する。
【００９２】
したがって、ユーザは、アプリケーションプログラム４０を修正してフラグ値を設定する必要がなくなり、ユーザの負担を軽減することができる。
【００９３】
次に、本実施例１および２に係るプロファイリングプログラムを実行するコンピュータについて説明する。図９は、本実施例１および２に係るプロファイリングプログラムを実行するコンピュータの構成を示す機能ブロック図である。
【００９４】
なお、プロファイリングプログラムのうち、割込みハンドラを除く部分はライブラリ関数としてアプリケーションプログラムの一部として実行されるため、ここでは、コンピュータはアプリケーションプログラム３１１と割込みハンドラ３１２を実行するものとする。また、このコンピュータ３００は、図１に示したコンピュータハードウェア１０に対応するものである。
【００９５】
図９に示すように、このコンピュータ３００は、ＲＡＭ３１０と、ＣＰＵ３２０と、ＨＤＤ３３０と、ＬＡＮインタフェース３４０と、入出力インタフェース３５０と、ＤＶＤドライブ３６０とを有する。
【００９６】
ＲＡＭ３１０は、プログラムやプログラムの実行途中結果などを記憶するメモリであり、ＣＰＵ３２０は、ＲＡＭ３１０からプログラムを読み出して実行する中央処理装置である。
【００９７】
ＨＤＤ３３０は、プログラムやデータを格納するディスク装置であり、ＬＡＮインタフェース３４０は、コンピュータ３００をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。
【００９８】
入出力インタフェース３５０は、マウスやキーボードなどの入力装置および表示装置を接続するためのインタフェースであり、ＤＶＤドライブ３６０は、ＤＶＤの読み書きを行う装置である。
【００９９】
そして、このコンピュータ３００において実行されるアプリケーションプログラム３１１は、コンパイル後ＨＤＤ３３０に記憶され、ＲＡＭ３１０に読み出されてＣＰＵ３２０によってアプリケーションプロセス３２１として実行される。また、割込みハンドラ３１２は、割込み処理プログラムとして登録されるとＲＡＭ３１０に記憶され、サンプリング割込みが発生するとＣＰＵ３２０によって実行される。
【０１００】
（付記１）所定の条件が満たされた際に発生する割込みにより起動される割込みハンドラによって情報収集対象プログラムの実行状況に関する情報を収集するプロファイリングプログラムであって、
前記割込みハンドラによって情報収集を行う対象範囲を指定する対象範囲指定手順と、
前記対象範囲指定手順により指定された対象範囲で前記割込みが発生した際に割込みハンドラによって収集される情報を設定する情報設定手順と、
をコンピュータに実行させることを特徴とするプロファイリングプログラム。
【０１０１】
（付記２）前記所定の条件の設定および割込みハンドラの登録をオペレーティングシステムに依頼する初期処理手順をさらにコンピュータに実行させることを特徴とする付記１に記載のプロファイリングプログラム。
【０１０２】
（付記３）前記対象範囲に遷移する関数呼出しを情報収集対象プログラムから検出し、該検出した関数呼出しを前記情報設定手順の呼出しに置き換えるとともに、該関数呼出しによる実行の遷移に関する情報を記録する関数置換手順をさらにコンピュータに実行させ、
前記情報設定手順は、前記関数置換手順により記録された実行の遷移に関する情報の一部を前記収集される情報として設定することを特徴とする付記１または２に記載のプロファイリングプログラム。
【０１０３】
（付記４）前記関数置換手順は、前記実行の遷移に関する情報の一部として各遷移を識別する遷移識別子を記録し、
前記情報設定手順は、前記関数置換手順により記録された遷移識別子を前記収集される情報として設定することを特徴とする付記３に記載のプロファイリングプログラム。
【０１０４】
（付記５）前記関数置換手順は、前記実行の遷移に関する情報として遷移元アドレスおよび遷移先アドレスを含む情報を記録することを特徴とする付記３または４に記載のプロファイリングプログラム。
【０１０５】
（付記６）前記関数置換手順は、前記対象範囲に遷移するまでの関数呼出しの段数指定に基づいて前記関数呼出しを検出することを特徴とする付記３、４または５に記載のプロファイリングプログラム。
【０１０６】
（付記７）前記情報設定手順により設定される情報は、割込みが発生した際の実行アドレスとともに収集されることを特徴とする付記１〜６のいずれか一つに記載のプロファイリングプログラム。
【０１０７】
（付記８）前記対象範囲指定手順による対象範囲の指定には、関数名による指定が含まれることを特徴とする付記１〜７のいずれか一つに記載のプロファイリングプログラム。
【０１０８】
（付記９）前記情報設定手順により設定される情報は複数の値から構成され、前記割込みハンドラは複数の値を収集することを特徴とする付記１〜８のいずれか一つに記載のプロファイリングプログラム。
【０１０９】
（付記１０）前記対象範囲指定手順および前記情報設定手順は、情報収集対象プログラムからＡＰＩを用いて呼出されるライブラリ関数によって行われることを特徴とする付記１〜９のいずれか一つに記載のプロファイリングプログラム。
【０１１０】
（付記１１）所定の条件が満たされた際に発生する割込みにより起動される割込みハンドラによって情報収集対象プログラムの実行状況に関する情報を収集するプロファイリング方法であって、
前記割込みハンドラによって情報収集を行う対象範囲を指定する対象範囲指定工程と、
前記対象範囲指定工程により指定された対象範囲で前記割込みが発生した際に割込みハンドラによって収集される情報を設定する情報設定工程と、
を含んだことを特徴とするプロファイリング方法。
【０１１１】
（付記１２）前記所定の条件の設定および割込みハンドラの登録をオペレーティングシステムに依頼する初期処理工程をさらに含んだことを特徴とする付記１１に記載のプロファイリング方法。
【０１１２】
（付記１３）前記対象範囲に遷移する関数呼出しを情報収集対象プログラムから検出し、該検出した関数呼出しを前記情報設定工程の呼出しに置き換えるとともに、該関数呼出しによる実行の遷移に関する情報を記録する関数置換工程をさらに含み、
前記情報設定工程は、前記関数置換工程により記録された実行の遷移に関する情報の一部を前記収集される情報として設定することを特徴とする付記１１または１２に記載のプロファイリング方法。
【０１１３】
（付記１４）前記関数置換工程は、前記実行の遷移に関する情報の一部として各遷移を識別する遷移識別子を記録し、
前記情報設定工程は、前記関数置換工程により記録された遷移識別子を前記収集される情報として設定することを特徴とする付記１３に記載のプロファイリング方法。
【０１１４】
（付記１５）前記関数置換工程は、前記実行の遷移に関する情報として遷移元アドレスおよび遷移先アドレスを含む情報を記録することを特徴とする付記１３または１４に記載のプロファイリング方法。
【０１１５】
（付記１６）前記関数置換工程は、前記対象範囲に遷移するまでの関数呼出しの段数指定に基づいて前記関数呼出しを検出することを特徴とする付記１３、１４または１５に記載のプロファイリング方法。
【０１１６】
（付記１７）前記情報設定工程により設定される情報は、割込みが発生した際の実行アドレスとともに収集されることを特徴とする付記１１〜１６のいずれか一つに記載のプロファイリング方法。
【０１１７】
（付記１８）前記対象範囲指定工程による対象範囲の指定には、関数名による指定が含まれることを特徴とする付記１１〜１７のいずれか一つに記載のプロファイリング方法。
【０１１８】
（付記１９）前記情報設定工程により設定される情報は複数の値から構成され、前記割込みハンドラは複数の値を収集することを特徴とする付記１１〜１８のいずれか一つに記載のプロファイリング方法。
【０１１９】
（付記２０）前記対象範囲指定工程および前記情報設定工程は、情報収集対象プログラムからＡＰＩを用いて呼出されるライブラリ関数によって行われることを特徴とする付記１１〜１９のいずれか一つに記載のプロファイリング方法。
【産業上の利用可能性】
【０１２０】
以上のように、本発明に係るプロファイリングプログラムおよびプロファイリング方法は、コンピュータシステムの性能分析や最適化に有用であり、特に、通信等のタイミングが重要なプログラムを対象とする場合に適している。
【図面の簡単な説明】
【０１２１】
【図１】本実施例１に係るプロファイリングシステムの構成を示す図である。
【図２】フラグ管理テーブルの一例を示す図である。
【図３】割込みハンドラ記録テーブルの一例を示す図である。
【図４】本実施例１に係るプロファイリングシステムの処理手順を示すフローチャートである。
【図５】本実施例１に係る具体例を示す図である。
【図６】本実施例２に係るプロファイリングシステムの構成を示す図である。
【図７】遷移管理テーブルの一例を示す図である。
【図８】本実施例２に係る具体例を示す図である。
【図９】本実施例１および２に係るプロファイリングプログラムを実行するコンピュータの構成を示す機能ブロック図である。
【図１０−１】従来のプロファイリング手法を説明するための説明図（１）である。
【図１０−２】従来のプロファイリング手法を説明するための説明図（２）である。
【符号の説明】
【０１２２】
１０    コンピュータハードウェア
２０    オペレーティングシステム
３０，４０    アプリケーションプログラム
１００，２００    プロファイリングプログラム
１１０    初期処理ルーチン
１２０    ターゲット範囲指定インタフェース
１３０，２３０    フラグ設定インタフェース
１４０    割込みハンドラ
１５０    フラグ管理テーブル
１６０    割込みハンドラ記録テーブル
２７０    命令書換ルーチン
２８０    遷移管理テーブル
３００    コンピュータ
３１０    ＲＡＭ
３１１    アプリケーションプログラム
３１２    割込みハンドラ
３２０    ＣＰＵ
３２１    アプリケーションプロセス
３３０    ＨＤＤ
３４０    ＬＡＮインタフェース
３５０    入出力インタフェース
３６０    ＤＶＤドライブ
【図１】
0004681491.tif 000002
【図２】
0004681491.tif 000003
【図３】
0004681491.tif 000004
【図４】
0004681491.tif 000005
【図５】
0004681491.tif 000006
【図６】
0004681491.tif 000007
【図７】
0004681491.tif 000008
【図８】
0004681491.tif 000009
【図９】
0004681491.tif 000010
【図１０−１】
0004681491.tif 000011
【図１０−２】
0004681491.tif 000012