(57)【要約】【課題】プロファイリングを効率的に行うこと。【解決手段】演算部１１ｄは、プログラム１３ａ，１３ｂ，１３ｃそれぞれを第１の識別情報に対応付けて実行する。比較部１１ｂは、演算部１１ｄがプログラム１３ａ，１３ｂ，１３ｃの実行を開始すると、プログラム１３ａ，１３ｂ，１３ｃそれぞれの第１の識別情報と記憶部１１ａに記憶された第２の識別情報との比較を行う。比較部１１ｂは、第１の識別情報と第２の識別情報とが一致する場合に、該当のプログラムにつき所定のプロファイル情報の取得を促す信号を出力する。【選択図】図１
2011118596.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを第１の識別情報に対応付けて実行する演算部と、
前記演算部が前記プログラムの実行を開始すると、前記第１の識別情報と記憶部に記憶された第２の識別情報との比較を行い、前記第１の識別情報と前記第２の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する比較部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記比較部が出力した前記信号を受信すると、前記演算部に所定の周期で割り込み信号を出力する割り込み出力部と、
前記演算部が前記割り込み出力部により出力された前記割り込み信号を受信するたびに、前記所定のプロファイル情報の取得を行うプロファイル情報取得部と、
を更に有することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記プロファイル情報取得部は、プログラムカウンタに記憶された所定のアドレスを取得し、当該アドレスを取得した累積の回数と当該アドレスとを対応付けた情報をプロファイル情報として取得し、プロファイル情報記憶部に格納することを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記プロファイル情報記憶部に記憶された前記プロファイル情報に含まれる前記アドレスを取得した前記累積の回数に基づいて、当該累積の回数を前記プログラムに含まれるモジュール、関数および命令の少なくとも何れかを単位として集計する解析処理部を更に有することを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記プロファイル情報取得部は、前記アドレスを取得した累積の回数を前記プログラムを実行した際に入力された入力データの属性に更に対応付けて前記プロファイル情報として取得し、
前記解析処理部は、前記集計の際に、前記累積の回数に対し前記入力データの属性に応じた正規化を行う、
ことを特徴とする請求項４記載の情報処理装置。
【請求項６】
情報処理装置のプロファイリング方法であって、
演算部が、プログラムを第１の識別情報に対応付けて実行し、
比較部が、前記演算部により前記プログラムの実行が開始されると、前記第１の識別情報と記憶部に記憶された第２の識別情報との比較を行い、前記第１の識別情報と前記第２の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する、
ことを特徴とするプロファイリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラムの実行状況を取得する情報処理装置およびプロファイリング方法に関する。
【背景技術】
【０００２】
コンピュータ上で実行されるプログラムの性能分析や最適化を行う手段として、プロファイリングが広く用いられている。プロファイリングは、プログラムコードの走行頻度、時間分布、またプログラム内部の呼出し関係頻度等の分析に有効である。例えば、プロファイリングによって、プログラム実行中のリソースの利用状況（以下、プロファイル情報という）を取得する。プロファイル情報に基づいて、プログラム中で実行期間の長かったコード範囲や所定のイベント時のプログラムの実行状況等を把握することができる。
【０００３】
ここで、一般にコンピュータ上のプログラムの実行は、オペレーティングシステム（Operating System）により制御されている。オペレーティングシステムでは、プロファイリング対象のプログラムの他にも、他のアプリケーションのプログラムやシステムの動作を制御・管理するためのプログラム等が実行され得る。オペレーティングシステムは、これらプログラムの実行順序を独自の手法によりスケジューリングする。
【０００４】
これに対し、プロファイリングの際には、対象のプログラムが実行中のタイミングでプロファイル情報を取得する必要がある。そのために、次のような方法があった。
第１の方法は、プロファイル情報を取得するためのモジュールがプロファイリング対象のプログラムの実行時に動作するように、モジュール呼出用のプログラムを対象のプログラムに組み込む方法である。
【０００５】
第２の方法は、予め定められた時間ごとに割り込みを発生させ、割り込み発生時に対象プログラムのコード範囲が実行されていればプロファイル情報を取得する方法である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００２−０７３３７９号公報
【特許文献２】特開２００５−２１５８１６号公報
【特許文献３】特開２００８−２１００１１号公報
【特許文献４】特開２００９−０７５８１２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、上記第１の方法では、プロファイリング対象のプログラムの修正、再コンパイル、再リンクおよび再起動等が必要となる。また、上記第２の方法では、プロファイリング対象のプログラム以外のプログラムの実行時にも割り込みが生じてしまう。また、割り込み発生のたびにプロファイリング対象のプログラムが実行されているか否かを事後的に判断する必要があり、そのための演算コストを要する。
【０００８】
このため、従来の方法ではプロファイリングの効率が悪いという問題があった。
本発明はこのような点に鑑みてなされたものであり、プロファイリングを効率的に行う情報処理装置およびプロファイリング方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明では上記課題を解決するために、情報処理装置が提供される。この情報処理装置は、演算部と比較部とを有する。演算部は、プログラムを第１の識別情報に対応付けて実行する。比較部は、演算部がプログラムの実行を開始すると、第１の識別情報と記憶部に記憶された第２の識別情報との比較を行い、第１の識別情報と第２の識別情報とが一致する場合に、該当のプログラムにつき所定のプロファイル情報の取得を促す信号を出力する。
【００１０】
また、上記情報処理装置と同様の処理を行うプロファイリング方法が提供される。
【発明の効果】
【００１１】
上記情報処理装置およびプロファイリング方法によれば、プロファイリングを効率的に行うことができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係る情報処理装置を示す図である。
【図２】第２の実施の形態に係るコンピュータのハードウェア構成を示す図である。
【図３】第２の実施の形態のコンピュータにおけるＯＳを示す図である。
【図４】第２の実施の形態のＣＰＵおよびオペレーティングシステムの構成を示す図である。
【図５】第２の実施の形態の割り込み回数テーブルのデータ構造例を示す図である。
【図６】ＯＳのプロセス管理を例示する図である。
【図７】第２の実施の形態のプロファイル情報取得処理を示すフローチャートである。
【図８】第２の実施の形態のプロファイル情報表示処理を示すフローチャートである。
【図９】プロファイル情報の第１の画面表示例を示す図である。
【図１０】プロファイル情報の第２の画面表示例を示す図である。
【図１１】プロファイル情報の第３の画面表示例を示す図である。
【図１２】プロファイル情報の第４の画面表示例を示す図である。
【図１３】第２の実施の形態のチューニング処理を示すフローチャートである。
【図１４】第３の実施の形態の割り込み回数テーブルのデータ構造例を示す図である。
【図１５】第３の実施の形態のプロファイル情報表示処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本実施の形態を図面を参照して詳細に説明する。
［第１の実施の形態］
図１は、第１の実施の形態に係る情報処理装置を示す図である。情報処理装置１０は、プロセッサ１１、プロファイル情報記憶部１２を有する。また、情報処理装置１０では、プロセッサ１１によって、オペレーティングシステム１３が実行される。
【００１４】
プロセッサ１１は、情報処理装置１０全体を制御する。プロセッサ１１は、例えばＣＰＵ（Central Processing Unit）である。プロセッサ１１は、記憶部１１ａ、比較部１１ｂ、割り込み出力部１１ｃおよび演算部１１ｄを有する。
【００１５】
記憶部１１ａは、演算部１１ｄが実行するプログラムに対応付けられた識別情報を記憶する。識別情報は、例えばオペレーティングシステム１３がプログラムの処理単位として管理するプロセスを識別するためのプロセス識別子（以下、プロセスＩＤ（IDentifier）という）である。また、識別情報として、例えばタスクＩＤやスレッドＩＤを用いてもよい。
【００１６】
比較部１１ｂは、演算部１１ｄがプログラムの実行を開始すると、そのプログラムに対応付けられた識別情報を取得する。比較部１１ｂは、取得した識別情報と記憶部１１ａに記憶された識別情報とを比較する。比較部１１ｂは、比較の結果、両識別情報が一致する場合に、実行中のプログラムの所定のプロファイル情報の取得を促す信号を出力する。この信号は、後段の割り込み出力部１１ｃに割り込み信号を発生させるためのトリガとなる信号である。
【００１７】
割り込み出力部１１ｃは、比較部１１ｂが出力した信号を受信すると演算部１１ｄに所定の周期で割り込み信号を出力する。
演算部１１ｄは、オペレーティングシステム１３やオペレーティングシステム１３上で動作するプログラムを実行する。演算部１１ｄは、プログラムを所定の識別情報に対応付けて実行する。演算部１１ｄは、比較部１１ｂが出力した信号に基づき割り込み出力部１１ｃから割り込み信号を受け付けると、実行中のプログラムに関するプロファイル情報を取得し、プロファイル情報記憶部１２に格納する。
【００１８】
プロファイル情報記憶部１２は、プロファイル情報を記憶する。
オペレーティングシステム１３は、オペレーティングシステム１３上で動作するプログラム１３ａ，１３ｂ，１３ｃと情報処理装置１０のハードウェアとの間のインタフェースを提供する。オペレーティングシステム１３は、プログラム１３ａ，１３ｂ，１３ｃの実行順序を制御する。演算部１１ｄは、その順序で（例えば、プログラム１３ａ，１３ｂ，１３ｃの順）にプログラム１３ａ，１３ｂ，１３ｃを実行する。
【００１９】
ここで、プログラム１３ａには、オペレーティングシステム１３により、例えばプロセスＩＤ“ａ”が対応付けられているとする。また、プログラム１３ｂには、例えばプロセスＩＤ“ｂ”が対応付けられているとする。また、プログラム１３ｃには、例えばプロセスＩＤ“ｃ”が対応付けられているとする。そして、記憶部１１ａには、例えばプロセスＩＤ“ｃ”が格納されているとする。
【００２０】
このとき、次のような処理が実行される。
まず、演算部１１ｄはプログラム１３ａの実行を開始する。比較部１１ｂは、演算部１１ｄが実行するプログラム１３ａのプロセスＩＤ“ａ”と記憶部１１ａに格納されたプロセスＩＤ“ｃ”とを比較する。比較部１１ｂは、両プロセスＩＤが異なるので信号の出力を行わない。
【００２１】
次に、演算部１１ｄはプログラム１３ｂの実行を開始する。比較部１１ｂは、演算部１１ｄが実行するプログラム１３ｂのプロセスＩＤ“ｂ”と記憶部１１ａに格納されたプロセスＩＤ“ｃ”とを比較する。比較部１１ｂは、両プロセスＩＤが異なるので信号の出力を行わない。
【００２２】
次に、演算部１１ｄはプログラム１３ｃの実行を開始する。比較部１１ｂは、演算部１１ｄが実行するプログラム１３ｃのプロセスＩＤ“ｃ”と記憶部１１ａに格納されたプロセスＩＤ“ｃ”とを比較する。比較部１１ｂは、両プロセスＩＤが同じであるのでプログラム１３ｃについてのプロファイル情報を演算部１１ｄに取得させるための信号を出力する。
【００２３】
このような情報処理装置１０によれば、演算部１１ｄにより、プログラムが第１の識別情報に対応付けられて実行される。演算部１１ｄによりプログラムの実行が開始されると、比較部１１ｂにより第１の識別情報と記憶部１１ａとに記憶された第２の識別情報との比較が行われる。比較の結果、第１の識別情報と第２の識別情報とが同一である場合、比較部１１ｂにより、実行中のプログラムにつき所定のプロファイル情報を演算部１１ｄに収集させるための信号が出力される。
【００２４】
これにより、プロファイリングを効率的に行うことが可能となる。具体的には以下の通りである。
比較部１１ｂは、記憶部１１ａに記憶された識別情報に対応するプログラムの実行タイミングでプロファイル情報の取得を促す信号を出力する。このように、比較部１１ｂはプロファイリング対象のプログラムに対してのみプロファイル情報の取得を促す。このため、余分な割り込み信号等を発生させることがない。また、実行中のプログラムがプロファイリング対象のプログラムであるか否かを事後的に判断する必要がない。よって、プロファイリングの処理効率が向上する。また、プロファイリング対象のプログラムに手を加える必要がない。よって、プロファイリングを行う際のシステム管理者の負担が軽減される。
【００２５】
更に、実行時にメモリ上のアドレスが動的に特定されるプログラム（例えば、シェアードライブラリ）では、実行前に予めアドレス範囲を指定することができない。このため、そのようなプログラムでは、従来のようにアドレスを用いてプロファイリング対象のプログラムを事前に指定しておくことが困難であった。また、プログラムのメモリ割り当てを仮想メモリアドレスによって管理するオペレーティングシステムの場合、異なるプログラムで重複した仮想メモリアドレスが割り当てられることもある。このため、仮想メモリアドレスのみでプログラムを適正に指定することが困難な場合もあった。
【００２６】
これに対し、情報処理装置１０は、プログラムの実行を管理するために割り当てられる所定の識別情報によって対象のプログラムを特定する。よって、プロファイリング対象のプログラムを容易に事前指定することができる。
【００２７】
以下の実施の形態では、情報処理装置１０を汎用的なコンピュータに適用する場合を例に採り、更に具体的に説明する。
［第２の実施の形態］
以下、第２の実施の形態を図面を参照して詳細に説明する。
【００２８】
図２は、第２の実施の形態に係るコンピュータのハードウェア構成を示す図である。コンピュータ１００は、ＣＰＵ１０１、ＲＡＭ（Random Access Memory）１０２、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５および通信インタフェース１０６を有する。
【００２９】
ＣＰＵ１０１は、コンピュータ１００全体を制御する。
ＲＡＭ１０２は、ＣＰＵ１０１に実行させるオペレーティングシステム（以下、ＯＳと略記する）のプログラムやアプリケーションのプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２はＣＰＵ１０１による処理に必要な各種データを記憶する。
【００３０】
ＨＤＤ１０３は、ＯＳのプログラム、アプリケーションのプログラムを記憶する。また、ＨＤＤ１０３はＣＰＵ１０１による処理に必要な各種データを記憶する。なお、ＨＤＤ１０３に代えて（または、ＨＤＤ１０３と併せて）、ＳＳＤ（Solid State Drive）など他の種類の記憶装置を用いてもよい。
【００３１】
グラフィック処理装置１０４は、モニタ２１と接続される。グラフィック処理装置１０４は、ＣＰＵ１０１からの命令に従って画像をモニタ２１の画面に表示させる。
入力インタフェース１０５は、キーボード２２とマウス２３と接続される。入力インタフェース１０５は、キーボード２２やマウス２３から送られてくる信号をＣＰＵ１０１に送信する。
【００３２】
通信インタフェース１０６は、ネットワーク２０と接続される。通信インタフェース１０６は、ネットワーク２０を介して他の情報処理装置とデータ通信する。
図３は、第２の実施の形態のコンピュータにおけるＯＳを示す図である。ＣＰＵ１０１はコンピュータ１００上でＯＳ１５０を実行する。
【００３３】
ＯＳ１５０は、コンピュータ１００上で動作するアプリケーションとハードウェアとの間のインタフェースを提供する。
例えば、ＯＳ１５０は、システム管理者によりキーボード２２やマウス２３が操作されて入力されたアプリケーションの実行開始のコマンドを受け付ける。ＯＳ１５０は、そのコマンドの内容をアプリケーションに出力する。アプリケーションは、そのコマンドに応じた処理を実行し、実行結果をＯＳ１５０に出力する。ＯＳ１５０は、取得した実行結果をモニタ２１に出力する。
【００３４】
ここで、ＯＳ１５０は、ＣＰＵ１０１が実行すべきプログラムをプロセス単位にプロセスＩＤを付して管理する。ＯＳ１５０は、プロセスの実行をスケジューリングする。ＯＳ１５０は、例えば、Ｗｉｎｄｏｗｓ（登録商標）、ＵＮＩＸ（登録商標）またはＬｉｎｕｘ（登録商標）である。
【００３５】
ＣＰＵ１０１は、ＯＳ１５０のスケジューリングに基づく順序で、プロセスに対応するプログラムを実行する。
コンピュータ１００では、プログラムのプロファイリングを行うことができる。以下、そのための機能構成について説明する。
【００３６】
図４は、第２の実施の形態のＣＰＵおよびオペレーティングシステムの構成を示す図である。ＣＰＵ１０１は、プロファイルコンテキストレジスタ１１１、コンテキストレジスタ１１２、比較器１１３、内蔵タイマレジスタ１１４、内蔵タイマ閾値保持レジスタ１１５、タイマ比較器１１６、演算部１１７およびリソース群１２０を有する。なお、演算部１１７とＣＰＵ１０１の各部との接続は図示を省略している。
【００３７】
プロファイルコンテキストレジスタ１１１は、プロファイリング対象とするプログラムのプロセスＩＤを記憶する。
コンテキストレジスタ１１２は、演算部１１７がＯＳ１５０上で現在実行しているプログラムに対応するプロセスＩＤを記憶する。
【００３８】
比較器１１３は、プロファイルコンテキストレジスタ１１１に記憶されたプロセスＩＤとコンテキストレジスタ１１２に記憶されたプロセスＩＤとを比較する。そして、比較器１１３は、両レジスタ（プロファイルコンテキストレジスタ１１１とコンテキストレジスタ１１２を示す）に記憶されたプロセスＩＤが同じである場合、内蔵タイマレジスタ１１４にトリガ信号を出力する。
【００３９】
内蔵タイマレジスタ１１４は、比較器１１３からトリガ信号の入力を受け付けると、タイマをスタートさせる。内蔵タイマレジスタ１１４は、内蔵タイマ値を保持しており、これを所定の周期でカウントアップ（あるいはカウントダウン）させる。
【００４０】
内蔵タイマ閾値保持レジスタ１１５は、内蔵タイマ閾値を記憶する。内蔵タイマ閾値とは、演算部１１７に割り込み信号を発生させる周期を決定するための情報である。
なお、内蔵タイマレジスタ１１４は、内蔵タイマ値が内蔵タイマ閾値保持レジスタ１１５に記憶された内蔵タイマ閾値に達すると、内蔵タイマ値を初期値に設定（リセット）する。その後、内蔵タイマレジスタ１１４は、比較器１１３から依然としてトリガ信号を受け付けている場合には、再度、内蔵タイマ値のカウントを開始する。
【００４１】
タイマ比較器１１６は、割り込み信号の出力を行う割り込み出力部である。タイマ比較器１１６は、内蔵タイマレジスタ１１４が保持する内蔵タイマ値と内蔵タイマ閾値保持レジスタ１１５に記憶された内蔵タイマ閾値とを比較する。そして、タイマ比較器１１６は、内蔵タイマ値と内蔵タイマ閾値とが同じである場合、演算部１１７に割り込み信号を出力する。
【００４２】
なお、タイマ比較器１１６は、内蔵タイマレジスタ１１４に内蔵タイマ値をリセットさせるために、割り込み信号をタイマリセット信号として内蔵タイマレジスタ１１４に対して出力してもよい。
【００４３】
演算部１１７は、演算を行う。演算部１１７は、ＯＳ１５０のプログラムや各種プログラムに含まれる命令に応じた処理を実行し、コンピュータ１００上にＯＳ１５０や各種プログラムの機能を実現する。演算部１１７は、タイマ比較器１１６から割り込み信号を受け付けると、ＯＳ１５０上に割り込みハンドラ１５３の機能を実現する。
【００４４】
リソース群１２０は、演算部１１７による演算処理に必要なレジスタ等のリソースの集合である。リソース群１２０は、プログラムカウンタ１２１、ハードウェアカウンタ１２２および制御レジスタ群１２３を含む。
【００４５】
プログラムカウンタ１２１は、演算部１１７が次に実行すべき命令のアドレスを記憶する。
ハードウェアカウンタ１２２は、ＣＰＵ１０１で発生した各種ハードウェアに関するイベント発生数を記憶する。ハードウェアカウンタ１２２では、例えば、キャッシュミス数、ＴＬＢ（Translation Lookaside Buffer）ミス数、実行命令数および分岐命令数等をカウントすることができる。
【００４６】
制御レジスタ群１２３は、その他の用途で用いられるレジスタ（例えば、汎用レジスタ等）の集合である。
プロファイル情報記憶部１３０は、プロファイル対象のプログラムについて取得されたプロファイル情報を記憶する。プロファイル情報記憶部１３０は、例えば、ＲＡＭ１０２またはＨＤＤ１０３上に設けられる。
【００４７】
ＯＳ１５０は、入出力処理部１５１、プロファイリング制御ドライバ１５２、割り込みハンドラ１５３、解析処理部１５４およびプログラム１５５，１５６，１５７，・・・の実行を制御する。これらの各機能は、演算部１１７が各機能に対応するプログラムをＯＳ１５０を介して実行することで実現されるものである。ただし、これらの機能のうちの少なくとも一部または全部をハードウェアによって実現することもできる。
【００４８】
入出力処理部１５１は、プロファイリング用のコマンドを受け付ける。プロファイリング用のコマンドは、例えばシステム管理者がキーボード２２やマウス２３を操作することでＣＰＵ１０１に入力される。また、当コマンドは、例えば所定のタイミングでＣＰＵ１０１が生成するものであってもよい。入出力処理部１５１は、受け付けたコマンドがプロファイリングの実行用のコマンドである場合、その内容をプロファイリング制御ドライバ１５２に出力する。また、入出力処理部１５１は、受け付けたコマンドがプロファイリング結果の出力に関するコマンドである場合、その内容を解析処理部１５４に出力する。入出力処理部１５１は、解析処理部１５４による解析結果を取得して、例えばモニタ２１にプロファイリング結果を表示させる。
【００４９】
プロファイリング制御ドライバ１５２は、入出力処理部１５１から受け付けたコマンドの内容に応じて、プロファイルコンテキストレジスタ１１１および内蔵タイマ閾値保持レジスタ１１５の設定を行う。また、プロファイリング制御ドライバ１５２は、入出力処理部１５１からプロファイリングの開始のコマンドを受け付けると、比較器１１３およびタイマ比較器１１６を動作させる。また、プロファイリング制御ドライバ１５２は、入出力処理部１５１からプロファイリングの終了のコマンドを受け付けると、比較器１１３およびタイマ比較器１１６の動作を停止させる。
【００５０】
割り込みハンドラ１５３は、プロファイル情報を取得するプロファイル情報取得部である。割り込みハンドラ１５３は、上述したように演算部１１７によりその機能が実現されるが、演算部１１７とは別個のハードウェアとしてその機能が実現されてもよい。割り込みハンドラ１５３は、リソース群１２０の各レジスタに記憶されたアドレスやカウンタ値を取得する。割り込みハンドラ１５３は、アドレスの取得頻度等をプロファイル情報として取得し、プロファイル情報記憶部１３０に格納する。
【００５１】
解析処理部１５４は、入出力処理部１５１からプロファイリング結果の出力のコマンドを受け付けると、プロファイル情報記憶部１３０を参照して、プロファイル情報を解析する。解析処理部１５４は、プロファイル情報の解析結果を、入出力処理部１５１に出力する。
【００５２】
プログラム１５５，１５６，１５７，・・・は、ＯＳ１５０上で実行される制御用のプログラムやアプリケーションのプログラム等である。プログラム１５５，１５６，１５７，・・・は、実行待機状態としてＲＡＭ１０２に配置され、ＯＳ１５０によりプロセスＩＤに対応付けて実行順序が管理される。プログラム１５５，１５６，１５７，・・・は、その実行順序で演算部１１７により実行され、その機能が実現される。ＯＳ１５０は、現在実行中のプログラムのプロセスＩＤをコンテキストレジスタ１１２に設定する。
【００５３】
図５は、第２の実施の形態の割り込み回数テーブルのデータ構造例を示す図である。割り込み回数テーブル１３１は、割り込みハンドラ１５３により更新され、プロファイル情報記憶部１３０に格納される。割り込み回数テーブル１３１は、プロファイル情報の一例である。割り込み回数テーブル１３１には、割り込みアドレスを示す項目、割り込み回数を示す項目、ハードウェアカウンタ値を示す項目および制御レジスタ値を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、あるアドレスに対する割り込み回数を示す。
【００５４】
割り込みアドレスを示す項目には、割り込みハンドラ１５３によりプログラムカウンタ１２１から取得されたアドレス（以下、サンプリングアドレスという）が設定される。割り込み回数を示す項目には、割り込みハンドラ１５３によって該当のサンプリングアドレスが取得された頻度が設定される。ハードウェアカウンタ値を示す項目には、ハードウェアカウンタ１２２の示す値が設定される。制御レジスタ値を示す項目には、制御レジスタ群１２３に含まれる所定のレジスタの示す値が設定される。
【００５５】
割り込み回数テーブル１３１には、例えば、割り込みアドレスが“００００１０００”、割り込み回数が“００００００１５”、ハードウェアカウンタ値が“００００００３３”、制御レジスタ値が“０００００００２”という情報が設定される。これは、演算部１１７にタイマ比較器１１６から割り込み信号が入力された際に、プログラムカウンタ１２１からサンプリングアドレス“００００１０００”が取得された回数が“００００００１５”回であることを示している。また、ハードウェアカウンタ１２２の示す値（例えば、キャッシュミス数の累積）が“００００００３３”であることを示している。同様に制御レジスタ群１２３で取得できる所定イベント発生数の累積が“０００００００２”であることを示している。
【００５６】
解析処理部１５４は、割り込み回数テーブル１３１に基づいて、プロファイル情報の解析を行うことができる。入出力処理部１５１は、その解析結果に基づいて、プロファイリング結果をモニタ２１に表示させることができる。
【００５７】
なお、ハードウェアカウンタ値や制御レジスタ値について、各割り込みアドレスにおけるイベントの累積を取得するために、所定値からの差分を取得するようにしてもよい。例えば、直前に取得したキャッシュミス数と今回取得したキャッシュミス数との差分をとれば直前の割り込みアドレスに対応する命令の実行時に発生したキャッシュミス数を取得できる。そして、該当の割り込みアドレスごとにその累積を算出することで、対応する命令の実行時に発生したキャッシュミス数の累積を取得できる。
【００５８】
図６は、ＯＳのプロセス管理を例示する図である。（Ａ）は、プロセス管理テーブル３００を示している。（Ｂ）は、プロセスの実行順序を示している。
プロセス管理テーブル３００はＯＳ１５０によって、ＯＳ１５０が利用する所定のメモリ領域に格納される。プロセス管理テーブル３００では、プログラム名がプロセスＩＤに対応付けられてＯＳ１５０により管理される。
【００５９】
例えば、プログラム名“／ｕｓｒ／ｂｉｎ／ｓａｍｐｌｅ．ｏｕｔ”に対してプロセスＩＤ“１０００”が対応付けられる。
そして、ＯＳ１５０は、プロセスＩＤ“１”に対応するプロセス３１０，プロセスＩＤ“１０００”に対応するプロセス３２０，・・・の実行順序を所定の方法で決定する。
【００６０】
演算部１１７は、決定された実行順序でプロセス３１０，３２０，・・・に対応する各プログラムを実行する。このとき実行中のプログラムのプロセスＩＤがコンテキストレジスタ１１２に逐次設定される。
【００６１】
次に、以上のような構成を備えるコンピュータ１００における処理手順を説明する。
なお、演算部１１７が主体となる動作は、ソフトウェアにより実現される機能を明確にするために、ＯＳ１５０上の各機能（入出力処理部１５１、プロファイリング制御ドライバ１５２、割り込みハンドラ１５３および解析処理部１５４等）を用いて説明する。
【００６２】
図７は、第２の実施の形態のプロファイル情報取得処理を示すフローチャートである。以下、図７に示す処理をステップ番号に沿って説明する。
［ステップＳ１１］プロファイリング制御ドライバ１５２は、プロファイリング対象のプログラムのプロセスＩＤと内蔵タイマ閾値を取得する。例えば、プロファイリング制御ドライバ１５２は、入出力処理部１５１からプロセスＩＤや内蔵タイマ閾値を取得できる。
【００６３】
具体的には、入出力処理部１５１は、システム管理者による所定のプロファイリング開始、あるいは、プロファイリング環境設定のためのコマンドを受け付ける。すると、入出力処理部１５１は、そのコマンドにパラメータとして含まれるプロセスＩＤや内蔵タイマ閾値をプロファイリング制御ドライバ１５２に出力する。プロファイリング制御ドライバ１５２は、取得したプロセスＩＤをプロファイルコンテキストレジスタ１１１に設定する。また、取得した内蔵タイマ閾値を内蔵タイマ閾値保持レジスタ１１５に設定する。
【００６４】
なお、プロファイリング対象のプログラムは、ＯＳ１５０により予めスケジューリングが行われているものとする。
［ステップＳ１２］入出力処理部１５１は、プロファイリング開始の入力を受け付ける。例えば、入出力処理部１５１はシステム管理者による所定のプロファイリング開始のコマンドの入力を受け付けることができる。あるいは、所定の時刻等にプロファイリング開始の命令が入出力処理部１５１に入力されるように、ＯＳ１５０によりスケジューリングされていてもよい。そして、入出力処理部１５１は、受け付けた開始コマンドをプロファイリング制御ドライバ１５２に出力する。プロファイリング制御ドライバ１５２は、開始コマンドに応じて比較器１１３およびタイマ比較器１１６の動作を開始させる。
【００６５】
［ステップＳ１３］比較器１１３は、プロファイルコンテキストレジスタ１１１に記憶されたプロセスＩＤとコンテキストレジスタ１１２に記憶されたプロセスＩＤとを比較する。
【００６６】
［ステップＳ１４］比較器１１３は、両レジスタに記憶されたプロセスＩＤが一致するか否かを判定する。一致する場合、処理をステップＳ１５に進める。一致しない場合、処理をステップＳ２２に進める。
【００６７】
［ステップＳ１５］比較器１１３は、内蔵タイマレジスタ１１４へのトリガ信号の出力を開始する。内蔵タイマレジスタ１１４および演算部１１７は、比較器１１３からトリガ信号が出力されている間、すなわち、両レジスタに記憶されたプロセスＩＤが一致している間、以下のステップＳ２１までの処理を繰り返し実行する。
【００６８】
［ステップＳ１６］内蔵タイマレジスタ１１４は、内蔵タイマ値のカウントアップ（あるいはカウントダウン）を開始する。その後、タイマ比較器１１６は、内蔵タイマレジスタ１１４に記憶された内蔵タイマ値と内蔵タイマ閾値保持レジスタ１１５に記憶された内蔵タイマ閾値とが一致したことを検出する。
【００６９】
［ステップＳ１７］タイマ比較器１１６は、演算部１１７に割り込み信号を出力する。そして、内蔵タイマレジスタ１１４は内蔵タイマ値を初期値にリセットする。
［ステップＳ１８］演算部１１７は、タイマ比較器１１６から割り込み信号を受け付けると、割り込みハンドラ１５３を実行する。
【００７０】
［ステップＳ１９］割り込みハンドラ１５３は、プログラムカウンタ１２１に格納されているアドレスをサンプリングアドレスとして取得する。
［ステップＳ２０］割り込みハンドラ１５３は、取得したサンプリングアドレスに基づいてプロファイル情報記憶部１３０に記憶された割り込み回数テーブル１３１を更新する。具体的には、割り込み回数テーブル１３１の該当のサンプリングアドレスに対応する割り込み回数に１を加算する。なお、該当のサンプリングアドレスが割り込み回数テーブル１３１の割り込みアドレスを示す項目に未設定の場合には、当サンプリングアドレスの取得は最初の取得となる。このため、割り込みハンドラ１５３は、そのサンプリングアドレス用のレコードを割り込み回数テーブル１３１に設けてから、割り込み回数を１に設定する。
【００７１】
［ステップＳ２１］タイマ比較器１１６は、プロファイルコンテキストレジスタ１１１に記憶されたプロセスＩＤとコンテキストレジスタ１１２に記憶されたプロセスＩＤとが不一致となるとトリガ信号の出力を停止する。そして、処理をステップＳ２２に進める。
【００７２】
［ステップＳ２２］入出力処理部１５１は、プロファイリング終了のコマンドを受け付けたか否かを判定する。終了コマンドを受け付けた場合、その旨をプロファイリング制御ドライバ１５２に通知する。プロファイリング制御ドライバ１５２は、その通知を受けて比較器１１３およびタイマ比較器１１６の動作を停止させる。そして、プロファイリング処理を完了する。終了コマンドを受け付けていない場合、処理をステップＳ１３に進める。
【００７３】
例えば、入出力処理部１５１はシステム管理者による所定のプロファイリング終了のコマンドの入力を受け付けることができる。あるいは、所定の時刻等にプロファイリング終了の命令が入出力処理部１５１に入力されるように、ＯＳ１５０によりスケジューリングされていてもよい。
【００７４】
このように、タイマ比較器１１６は実行中のプログラムがプロファイリング対象である場合に、内蔵タイマ閾値で設定される所定の周期で、演算部１１７に割り込み信号を出力する。演算部１１７は、割り込み信号に応じて割り込みハンドラ１５３を実行する。割り込みハンドラ１５３は、プログラムカウンタ１２１からサンプリングアドレスを取得し、割り込み回数テーブル１３１を更新する。
【００７５】
なお、ステップＳ１１，Ｓ１２は同時に実行されてもよい。例えば、システム管理者はプロファイリングの開始コマンドと共に、パラメータとしてプロファイリング対象とするプログラムのプロセスＩＤや内蔵タイマ閾値を入力することができる。
【００７６】
また、上記ステップＳ１２，Ｓ２２では、例えばシステム管理者は次のようなコマンド入力によって、入出力処理部１５１に対するプロファイリング開始および終了の指示を与えることができる。
【００７７】
開始コマンド例：ｓａｍｐｌｅｒ  −ｓｔａｒｔ  −ｐ  １０００  −ｉ  １０
終了コマンド例：ｓａｍｐｌｅｒ  −ｓｔｏｐ  −ｐ  １０００
なお、“−ｐ  １０００”は対象とするプロセスＩＤを指定するためのパラメータである。プロセスＩＤは、ＩＤの直接指定に限らず、プログラム名（例えば、“ｕｓｅｒ＿ｐｒｏｇ”等の名称）によって指定してもよい。その場合、プロファイリング制御ドライバ１５２は、開始コマンドに対し、そのプログラム名から対応するプロセスＩＤを取得してプロファイルコンテキストレジスタ１１１に設定する。
【００７８】
また、“−ｉ  １０”は内蔵タイマ閾値を指定するためのパラメータである。単位は、例えばサイクル数やマイクロ秒である。
そして、解析処理部１５４は、割り込み回数テーブル１３１の解析を行う。入出力処理部１５１は、その解析結果をプロファイリング結果としてモニタ２１に出力する。
【００７９】
なお、解析処理部１５４の解析処理は、例えば解析処理部１５４が入出力処理部１５１からプロファイリング結果出力のコマンドを受け付けた際に実行される。例えば、システム管理者は、次のようなコマンド入力によって、入出力処理部１５１に対するプロファイリング結果出力の指示を与えることができる。
【００８０】
結果出力コマンド例：ｓａｍｐｌｅｒ−ｖｉｅｗ  ｐｒｏｆｉｌｅ＿ｆｉｌｅ  ｓａｍｐｌｅ．ｏｕｔ
ここで、“ｐｒｏｆｉｌｅ＿ｆｉｌｅ”は、プロファイル情報記憶部１３０に記憶されたプロファイル情報（例えば、割り込み回数テーブル１３１）を指定するためのパラメータである。また、“ｓａｍｐｌｅ．ｏｕｔ”はプロファイリング対象のプログラムの名称を指定するためのパラメータである。
【００８１】
入出力処理部１５１がこのコマンドを受け付けると、コンピュータ１００は以下のプロファイル情報表示処理を実行する。
以下、解析処理部１５４によるプロファイル情報の解析および入出力処理部１５１による結果の表示を説明する。
【００８２】
図８は、第２の実施の形態のプロファイル情報表示処理を示すフローチャートである。以下、図８に示す処理をステップ番号に沿って説明する。
［ステップＳ３１］解析処理部１５４は、プログラム（あるいは、プログラムに含まれるモジュール。以下同じ）中に含まれる関数名とその関数に割り当てられた相対アドレス位置（範囲）とを示すシンボル情報を取得する。ここで、相対アドレス位置とは、例えば該当のモジュールの先頭アドレスをアドレス“０”とした場合の該当関数の相対的な先頭アドレス位置を示す。シンボル情報は、例えば、ＯＳ１５０が提供するシンボル表示コマンド（例えば、ＵＮＩＸやＬｉｎｕｘではｎｍコマンド）を内部的に実行することで取得できる。あるいは、例えば、ロードモジュール（プログラムの実行形式のモジュールあるいはリンカで結合されたモジュールの集合）のシンボル参照用の関数（例えば、ＵＮＩＸやＬｉｎｕｘではｅｌｆアクセスライブラリ）を使用してシンボル情報を取得することもできる。
【００８３】
［ステップＳ３２］解析処理部１５４は、プロファイル情報記憶部１３０に記憶された割り込み回数テーブル１３１を参照して、サンプリングアドレスがプロファイル対象のプログラム中のどの相対アドレス位置で取得されたかを特定する。具体的には、解析処理部１５４は、システムロードマップ情報を参照して、プロファイル対象のプログラムの先頭アドレス（ＡＤ１）とサンプリングアドレス（ＡＤ２）との差（ＡＤ２−ＡＤ１）を求める。
【００８４】
なお、システムロードマップ情報は、例えば、ＯＳ１５０がプログラムをロードモジュール単位にＲＡＭ１０２に配置する際に生成している。そして、ＯＳ１５０は、ＲＡＭ１０２またはＨＤＤ１０３の所定の記憶部にシステムロードマップ情報を格納している。
【００８５】
［ステップＳ３３］解析処理部１５４は、ステップＳ３１で取得したシンボル情報とプロファイル情報記憶部１３０に記憶された割り込み回数テーブル１３１とに基づいて、関数ごとの割り込み回数を算出する。解析処理部１５４は、その結果を解析結果として入出力処理部１５１に出力する。ここで、解析処理部１５４は、プロファイル情報記憶部１３０に複数回に渡って同じプログラムにつき取得された複数の割り込み回数テーブルが存在する場合には、それらをマージして関数ごとの割り込み回数を取得してもよい。
【００８６】
［ステップＳ３４］入出力処理部１５１は、解析処理部１５４の解析結果に基づいて、プロファイリング結果をモニタ２１に表示させる。
このようにして、解析処理部１５４は、プロファイル対象のプログラムに含まれるモジュール、関数および命令ごとの割り込み回数を取得できる。
【００８７】
関数単位の割り込み回数は、割り込み回数テーブル１３１における、その関数のアドレス範囲内の割り込み回数の総和である。例えば、アドレス“００００１０００”〜“００００２０００”に対応付けられた関数があれば、そのアドレス範囲に含まれる命令につき取得した割り込み回数の総和をその関数の割り込み回数とする。
【００８８】
モジュール単位の割り込み回数は、割り込み回数テーブル１３１における、そのモジュールのアドレス範囲内の割り込み回数の総和である。例えば、アドレス“００００１０００”〜“０００１００００”に対応付けられたモジュールがあれば、そのアドレス範囲に含まれる関数単位に取得した割り込み回数の総和をそのモジュールの割り込み回数とする。
【００８９】
入出力処理部１５１は、その結果に基づいて、モジュール、関数および命令ごとの実行コストを示す情報をモニタ２１に表示できる。
図９は、プロファイル情報の第１の画面表示例を示す図である。結果表示画面２１１は、入出力処理部１５１によって生成され、モニタ２１に表示される。結果表示画面２１１は、プロファイリング対象としたプログラムに含まれるモジュールごとのサンプリング頻度および割合をファイル単位に示すものである。結果表示画面２１１では、当プログラムにおいて「ｌｉｂｔｈｒｅａｄ＿ｓｕｂ＿ｂ．ｓｏ」モジュールが“９０．３％”と最も高頻度であり、実行コストが最大であることが分かる。
【００９０】
図１０は、プロファイル情報の第２の画面表示例を示す図である。結果表示画面２１２は、入出力処理部１５１によって生成され、モニタ２１に表示される。結果表示画面２１２は、「ｌｉｂｔｈｒｅａｄ＿ｓｕｂ＿ｂ．ｓｏ」に含まれる関数単位でサンプリング頻度および割合を示すものである。結果表示画面２１２では、関数「ＦｕｎｃＳ」が全体の“１０％”と最も高頻度であり、実行コストが最大であることが分かる。
【００９１】
図１１は、プロファイル情報の第３の画面表示例を示す図である。結果表示画面２１３は、入出力処理部１５１によって生成され、モニタ２１に表示される。結果表示画面２１３は、「ｌｉｂｔｈｒｅａｄ＿ｓｕｂ＿ｂ．ｓｏ」に含まれる関数「ＦｕｎｃＴ」に含まれる命令単位でサンプリング頻度および割合を示すものである。結果表示画面２１３では、アドレス「０ｘ００００００２Ｃ」に対応する命令が全体の“６９．５％”と最も高頻度であり、実行コストが最大であることが分かる。
【００９２】
結果表示画面２１１，２１２，２１３では、テキスト形式での出力例を示したが、このような方法に限らずＧＵＩ（Graphical User Interface）を利用して操作性を向上することもできる。
【００９３】
図１２は、プロファイル情報の第４の画面表示例を示す図である。ウィンドウ２１４，２１５は、入出力処理部１５１によって生成され、モニタ２１に表示される。
ウィンドウ２１４は、関数ごとのサンプリング頻度を降順で表示した例である。システム管理者は、ウィンドウ２１４に表示された関数を示す行のうちの何れかに対し、例えばマウス２３によりクリック操作（例えば、ダブルクリック）することができる。入出力処理部１５１は、そのクリック操作を受け付けると、ウィンドウ２１５をモニタ２１に表示させる。
【００９４】
ウィンドウ２１５は、ウィンドウ２１４に表示された関数に含まれる命令ごとの詳細なサンプリング頻度を示す。ウィンドウ２１５では、ウィンドウ２１４で関数「ＦｕｎｃＥ」が選択された場合を例示している。
【００９５】
関数内実行頻度グラフ２１５ａでは、横軸は関数内のアドレス位置のオフセットを示し、縦軸はサンプリング頻度を示す。例えば、システム管理者は関数内実行頻度グラフ２１５ａを参照することで、黒帯線が表示されたアドレス近辺で実行コストが大きいことが分かる。
【００９６】
サンプリング頻度表示領域２１５ｂでは、具体的な命令アドレスに対応付けてその検出数（サンプリング頻度）および関数内全体のサンプリング頻度に対する割合が表示される。例えば、システム管理者はサンプリング頻度表示領域２１５ｂに表示された何れかの命令アドレスを示す行をマウス２３によりクリック操作（例えば、ダブルクリック）することができる。入出力処理部１５１は、そのクリック操作を受け付けると、例えば対応するプログラムのソースを処理するためのデバッガ、エディタおよびその他のツール等を起動することができる。
【００９７】
このように、システム管理者は、ボトルネック箇所を容易に特定することができる。更に、プログラムの実行環境設定の調整や改修等のチューニングを容易に行うことができる。
【００９８】
なお、プロファイリング制御ドライバ１５２は、解析処理部１５４による解析結果に基づいて実行環境設定の調整（例えば、より高速なメモリに優先配置する）を実行することもできる。以下では、そのための処理手順について説明する。
【００９９】
図１３は、第２の実施の形態のチューニング処理を示すフローチャートである。以下、図１３に示す処理をステップ番号に沿って説明する。
［ステップＳ４１］プロファイリング制御ドライバ１５２は、ＯＳ１５０が管理するプロセスの稼働状況を取得する。プロセスの稼働状況としては、例えばＣＰＵ時間（ＣＰＵが演算を行った時間）、メモリ使用量、Ｉ／Ｏ（Input / Output）時間（Ｉ／Ｏが実行された時間）、Ｉ／Ｏ数、Ｉ／Ｏデータ量およびネットワーク利用率等が考えられる。あるいは、システム管理者が定義した任意の指標により稼働状況を取得してもよい。
【０１００】
［ステップＳ４２］プロファイリング制御ドライバ１５２は、取得した稼働状況に基づいて、プロファイリング対象とするプログラムを選択する。例えば、ＣＰＵ時間の大きなプロセスから最上位のものを１つ、あるいは上位の複数のプロセスを選択する。そして、プロファイリング制御ドライバ１５２は、選択した複数のプロセスに対応するプロセスＩＤをプロファイルコンテキストレジスタ１１１に設定する。
【０１０１】
［ステップＳ４３］ＣＰＵ１０１は、選択した各プロセスＩＤに対応するプログラムにつきプロファイリング処理を実行する。その処理手順は、図７で説明したプロファイリング処理の手順と同様である。割り込みハンドラ１５３は、例えば選択された複数のプロセスに対応するプログラムごとに割り込み回数テーブル１３１を生成し、プロファイル情報としてプロファイル情報記憶部１３０に格納する。
【０１０２】
［ステップＳ４４］解析処理部１５４は、プロファイル情報記憶部１３０に記憶されたプロファイル情報に基づいて、各プログラムに含まれる実行コストの高い関数を特定する。解析処理部１５４は、特定した関数をプロファイリング制御ドライバ１５２に通知する。
【０１０３】
［ステップＳ４５］プロファイリング制御ドライバ１５２は、解析処理部１５４から通知された関数を現在よりも高速のメモリ領域に優先配置するようＯＳ１５０に指示する。例えば、該当の関数については、ＨＤＤ１０３に設けられたスワップ領域よりも優先的にＲＡＭ１０２上に配置するようＯＳ１５０に指示する。
【０１０４】
このようにして、プロファイリング制御ドライバ１５２は、プロファイリング対象とするプログラムを選択し、該当のプログラムの実行環境を調整することができる。
これにより、プログラムのチューニングをより効率的に行うことができる。また、システム管理者の作業負担をより軽減することができる。
【０１０５】
なお、上記ステップＳ４２において、プロファイリング制御ドライバ１５２はプロファイルコンテキストレジスタ１１１にサンプリング対象とするプログラムのプロセスＩＤを複数設定することができる。その場合、比較器１１３は、何れかのプロセスＩＤがコンテキストレジスタ１１２に記憶されたプロセスＩＤと一致する場合に、内蔵タイマレジスタ１１４にトリガ信号を出力することができる。また、複数のプロセスＩＤを設定可能とするために、プロファイルコンテキストレジスタ１１１を複数設けてもよい。そして、比較器１１３は、複数設けたプロファイルコンテキストレジスタ１１１の何れかに記憶されたプロセスＩＤとコンテキストレジスタ１１２に記憶されたプロセスＩＤとが一致する場合に、内蔵タイマレジスタ１１４にトリガ信号を出力するようにしてもよい。
【０１０６】
また、上記ステップＳ４５では、メモリ配置の変更を例示したが、このようなチューニングに限らない。例えば、ＣＰＵ時間の大きなものから複数選択したプロセスに対し、以下の何れか、あるいは複数のチューニングを行うことができる。
【０１０７】
（１）プロファイリング制御ドライバ１５２は、選択したプロセスのうち、実行コストが最大（あるいは、上位の複数）のプロセスのスケジューリングの際の優先順位を１レベル下げるようにＯＳ１５０に指示する。
【０１０８】
（２）プロファイリング制御ドライバ１５２は、選択したプロセスのうち、実行コストが最小（あるいは、下位の複数）のプロセスをアイドル状態の多いプロセスとみなす。そして、プロファイリング制御ドライバ１５２は、そのプロセスを実行する際のＣＰＵ１０１の動作周波数を通常よりも低く設定するようＯＳ１５０に指示する。
【０１０９】
（３）プロファイリング制御ドライバ１５２は、選択したプロセスのうち、実行コストが最大（あるいは、上位の複数）のプロセスや、そのプロセスに対応するプログラムに含まれる関数から呼び出されるシステムコールに関してもメモリ配置や優先順位の調整等を行う。
【０１１０】
これにより、コンピュータ１００全体として、一層のスループット向上および電力削減を図ることができる。
本実施の形態で説明したように、コンピュータ１００は、ハードウェア（ＣＰＵ１０１）によって割り込み信号を発生させる。このため、ソフトウェア（例えばＯＳ１５０）で発生させる場合よりも短い周期でサンプリングアドレスを取得することができる。
【０１１１】
ここで、例えばＯＳ１５０による割り込みは、システムコールによって発生させることができる。その場合、割り込みの周期は、システムタイマの最小割り込み時間となる。この割り込み時間は、例えばＵＮＩＸやＬｉｎｕｘでは、１０ミリ秒である。
【０１１２】
これに対し、ＣＰＵ１０１はそれよりも短い周期で割り込み信号を発生させることができるので、より詳細なプロファイル情報を取得できる。また、その際に、プロファイリング対象とするプログラムがＣＰＵ１０１で実行されている期間にのみ割り込み信号を出力させるようにしたので、他のプログラムの実行時に無駄な割り込みが入ることがない。その結果、事後的にプロファイリング対象のプログラムであるか否かの判断を行う必要がなくなり、その処理コストが軽減される。よって、プロファイリングを効率的に行うことができる。
【０１１３】
また、コンピュータ１００は、そのプロファイリング結果に基づいて、実行コストの高いモジュールや関数をシステム管理者に示す。これにより、システム管理者は容易に処理のネックとなっているモジュールや関数を特定することができる。また、特定したモジュールや関数に対する実行環境設定の調整や改修等のチューニングを容易に行うことができる。
【０１１４】
また、コンピュータ１００は、ＯＳ１５０で管理されるプロセスの実行状況に基づいて、プロファイリング対象とするプログラムを選択することができる。更に、選択したプログラムに対するプロファイリング結果に基づいて、メモリ配置の変更等の実行環境設定の調整を行う。これにより、システム管理者の負担を軽減して、より効率的にプログラムのチューニングを行うことができる。
【０１１５】
［第３の実施の形態］
以下、第３の実施の形態を図面を参照して詳細に説明する。前述の第２の実施の形態との相違点について主に説明し、同様の事項に関しては説明を省略する。
【０１１６】
ここで、プロファイリング処理では、対象のプログラムに対して常に同じ入力条件でプロファイリングが行われるとは限らない。例えば、入力データによって、そのデータサイズ、入力頻度およびカバレージ率（プログラム内実行ルートの網羅度合を示す）等の属性が異なる場合が考えられる。第３の実施の形態では、そのような異なる入力条件で取得されたプロファイル情報を適切にマージして、より精度の高いプロファイル情報を取得可能とする機能を提供する。
【０１１７】
なお、第３の実施の形態のコンピュータの構成は、図２〜４で示した第２の実施の形態のコンピュータ１００の構成と同一であるため、説明を省略する。以下では、便宜的にコンピュータ１００で説明した各構成と同一の符号を用いて、第３の実施の形態のコンピュータの各構成を指し示すものとする。
【０１１８】
また、第３の実施の形態のプロファイリング処理およびチューニング処理は、図７，１３で示した第２の実施の形態のプロファイリング処理およびチューニング処理と同様であるため説明を省略する。ただし、プロファイリング処理では、割り込みハンドラ１５３は、各アドレスにつき割り込み回数を取得すると共に、その処理の実行の際の入力条件（例えば、入力データサイズ）を取得してプロファイル情報記憶部１３０に格納する。
【０１１９】
図１４は、第３の実施の形態の割り込み回数テーブルのデータ構造例を示す図である。割り込み回数テーブル１３２は、割り込みハンドラ１５３により更新され、プロファイル情報記憶部１３０に格納される。割り込み回数テーブル１３２は、プロファイル情報の一例である。割り込み回数テーブル１３２には、割り込みアドレスを示す項目、割り込み回数を示す項目および入力データサイズを示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、あるアドレスに対する割り込み回数を示す。
【０１２０】
ここで、割り込みアドレスを示す項目および割り込み回数を示す項目は、図５で説明した割り込み回数テーブル１３１の同一名称の項目に対応する。また、ハードウェアカウンタ値を示す項目や制御レジスタ値を示す項目に関しては割り込み回数テーブル１３１と同様であるため図示および説明を省略するが、割り込み回数テーブル１３２にもこれらの情報を含む。
【０１２１】
入力データサイズを示す項目には、プロファイリング対象のプログラムに対して入力されたデータのデータサイズが設定される。
割り込み回数テーブル１３２には、例えば、割り込みアドレスが“００００１０００”、割り込み回数が“０００００００１”、入力データサイズが“２ＫＢ（KiloBytes）”という情報が設定される。これは、対象プログラムに対する入力データサイズが“２ＫＢ”である場合、演算部１１７にタイマ比較器１１６から割り込み信号が入力された際に、プログラムカウンタ１２１からサンプリングアドレス“００００１０００”が取得された回数が“０００００００１”回であることを示している。
【０１２２】
また、割り込み回数テーブル１３２には、例えば、割り込みアドレスが“００００１０００”、割り込み回数が“０００００１２４”、入力データサイズが“５００ＫＢ”という情報が設定される。これは、対象プログラムに対する入力データサイズが“５００ＫＢ”である場合、演算部１１７にタイマ比較器１１６から割り込み信号が入力された際に、プログラムカウンタ１２１からサンプリングアドレス“００００１０００”が取得された回数が“０００００１２４”回であることを示している。
【０１２３】
このように、割り込みハンドラ１５３は、同じアドレスに対しても入力データサイズが異なれば別個にプロファイル情報を取得する。割り込み回数テーブル１３２の例でいえば、１回目のプロファイリングでは“２ＫＢ”の入力データが入力された場合であり、その入力データサイズ“２ＫＢ”で区別してプロファイル情報を管理する。同様に、２回目のプロファイリングでは“２０ＫＢ”の入力データが入力された場合であり、その入力データサイズ“２０ＫＢ”で区別してプロファイル情報を管理する。同様に、３回目のプロファイリングでは“５００ＫＢ”の入力データが入力された場合であり、その入力データサイズ“５００ＫＢ”で区別してプロファイル情報を管理する。
【０１２４】
なお、入力データの属性を示す情報として、割り込み回数テーブル１３２ではデータサイズを示したが、これに限らない。例えば、割り込みハンドラ１５３は入力データの入力頻度や入力データに応じたカバレージ率等を各アドレスに対応付けて取得してもよい。
【０１２５】
そして、解析処理部１５４は、割り込み回数テーブル１３２に基づいて、各アドレスにつき入力データに応じた重み付けマージをしてプロファイル情報の解析を行うことができる。
【０１２６】
次に、以上のような構成を備えるコンピュータ１００におけるプロファイル表示処理（重み付けマージを含む）の手順を説明する。
図１５は、第３の実施の形態のプロファイル情報表示処理を示すフローチャートである。以下、図１５に示す処理をステップ番号に沿って説明する。
【０１２７】
［ステップＳ５１］解析処理部１５４は、プログラム（あるいは、プログラムに含まれるモジュール。以下同じ）中に含まれる関数名とその関数に割り当てられたアドレス位置（範囲）とを示すシンボル情報を取得する。ここで、相対アドレス位置とは、例えば該当のモジュールの先頭アドレスをアドレス“０”とした場合の該当関数の相対的な先頭アドレス位置を示す。シンボル情報は、例えば、ＯＳ１５０が提供するシンボル表示コマンドを内部的に実行することで取得できる。あるいは、例えばロードモジュールのシンボル参照用の関数を使用してシンボル情報を取得することもできる。
【０１２８】
［ステップＳ５２］解析処理部１５４は、プロファイル情報記憶部１３０に記憶された割り込み回数テーブル１３２を参照して、サンプリングアドレスがプロファイル対象のプログラム中のどの相対アドレス位置で取得されたかを特定する。相対アドレス位置の具体的な算出方法は、図８のステップＳ３２の処理と同一である。
【０１２９】
［ステップＳ５３］解析処理部１５４は、ステップＳ５１で取得したシンボル情報とプロファイル情報記憶部１３０に記憶された割り込み回数テーブル１３２とに基づいて、関数ごとの割り込み回数を算出する。ここで、解析処理部１５４は、割り込み回数テーブル１３２に含まれる割り込み回数につき入力データサイズの逆数で重み付けを行う。
【０１３０】
例えば、アドレス“００００１０００”に対応付けられた命令があるとする。割り込み回数テーブル１３２を参照すると、その命令につき入力データサイズが“２ＫＢ”、“２０ＫＢ”、“５００ＫＢ”で割り込み回数が取得されている。このため、解析処理部１５４は、その命令について、合成割り込み回数Ｓ＝（１×１／２）＋（５×１／２０）＋（１２４×１／５００）＝１．５を算出する。そして、この合成割り込み回数Ｓを命令ごとの割り込み回数とみなす。更に、解析処理部１５４は、例えばアドレス“００００１０００”〜“００００２０００”に対応付けられた関数があるとすれば、そのアドレス範囲に含まれる命令の合成割り込み回数の総和をその関数に対する割り込み回数とみなす。
【０１３１】
モジュール単位の割り込み回数についても同様である。例えば、アドレス“００００１０００”〜“０００１００００”に対応付けられたモジュールがあるとする。その場合、そのアドレス範囲に含まれる関数について上記合成割り込み回数により求めた関数単位の割り込み回数の総和を、そのモジュールに対する割り込み回数とみなす。
【０１３２】
［ステップＳ５４］入出力処理部１５１は、解析処理部１５４の解析結果に基づいて、プロファイリング結果をモニタ２１に表示させる。
このようにして、解析処理部１５４は、入力データサイズにより測定した割り込み回数を正規化して、各関数の合成割り込み回数を取得し、これを関数ごとの割り込み回数として解析結果を出力する。
【０１３３】
なお、割り込み回数テーブル１３２には、入力データサイズの他に入力頻度やカバレージ率も設定可能である旨を示した。例えば、入力頻度を属性情報として用いる場合には、入力頻度の逆数を割り込み回数に乗じて重み付けすることで正規化してもよい。また、カバレージ率を属性情報として用いる場合には、カバレージ率を割り込み回数に乗じて重み付けすることで正規化してもよい。
【０１３４】
コンピュータ１００は、これによって得たプロファイリング結果に基づいて、図１３に示したチューニング処理を行うことができる。
ここで、例えば、ある一つの入力データサイズにより取得されたプロファイル情報によってチューニングを行うとすると、その入力データサイズに対しては、チューニングによってプログラムの実行効率を改善することができる。しかしながら、その他の入力データサイズについてそのチューニング内容が一律に適しているとは限らない。例えば、他の入力データサイズでは、そのチューニングによる実行効率の改善効果が小さいことも考えられる。
【０１３５】
これに対し、第３の実施の形態のコンピュータ１００は複数の異なる入力条件（属性）で取得されたプロファイル情報の合成結果を用いてチューニングを行うことができる。これにより、異なる入力条件を考慮してプロファイリング結果を適正に取得することができる。このため、各入力条件に対して適切なチューニングを行うことができる。その結果、各入力条件に対して平均的にプログラムの実行効率を向上することができる。
【０１３６】
また、第２の実施の形態と同様の効果を奏することができる。
ここで、第２，３の実施の形態では、ハードウェア（例えば、ＣＰＵ１０１）により割り込みを発生させることを想定した説明を行った。ハードウェアを用いると、ソフトウェア（例えば、ＯＳ１５０）の最小割り込み間隔以下の周期で割り込みを発生させることができる。このように、割り込みの頻度が高い場合、従来の方法では、他のプログラムの実行中にも割り込みが発生するので、割り込みのたびに生じる事後的なプログラムの判定処理により過大な負荷が生じる可能性があった。
【０１３７】
これに対し、本発明では、プロファイリング対象のプログラムが演算部１１７で実行中の場合にのみ割り込みが発生するので、上述のような余分な割り込みや判断処理が発生しない。よって、本発明はハードウェアで割り込みを発生させる場合のように、より短い周期で割り込みを発生させる場合に特に適している。
【０１３８】
なお、第２，３の実施の形態では、ＯＳ１５０により管理されるプロセスＩＤによってプロファイリング対象のプログラムを特定することとしたが、これに限られない。例えば、ＯＳ１５０がプログラムに割り当てるタスクＩＤやスレッドＩＤによってプロファイリング対象を特定してもよい。
【０１３９】
更に、プロファイルコンテキストレジスタ１１１または比較器１１３の何れか一方または両方をコンピュータ１００上のアプリケーションによって実現することもできる。その場合、プロファイルコンテキストレジスタ１１１または比較器１１３の構成に対応する機能をコンピュータ１００上に実現するためのプログラムが提供される。
【０１４０】
処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体には、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ＨＤＤ、フレキシブルディスク（ＦＤ）、磁気テープ（ＭＴ）などがある。光ディスクには、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc - Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。光磁気記録媒体には、ＭＯ（Magneto - Optical disk）などがある。
【０１４１】
上記プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータに格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１４２】
上記プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラム若しくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１４３】
以上、本発明の情報処理装置およびプロファイリング方法を図示の実施の形態に基づいて説明したが、これらに限定されるものではなく、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。更に、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【０１４４】
以上の第１〜３の実施の形態を含む実施の形態に関し、更に以下の付記を開示する。
（付記１）  プログラムを第１の識別情報に対応付けて実行する演算部と、
前記演算部が前記プログラムの実行を開始すると、前記第１の識別情報と記憶部に記憶された第２の識別情報との比較を行い、前記第１の識別情報と前記第２の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する比較部と、
を有することを特徴とする情報処理装置。
【０１４５】
（付記２）  前記比較部が出力した前記信号を受信すると、前記演算部に所定の周期で割り込み信号を出力する割り込み出力部と、
前記演算部が前記割り込み出力部により出力された前記割り込み信号を受信するたびに、前記所定のプロファイル情報の取得を行うプロファイル情報取得部と、
を更に有することを特徴とする付記１記載の情報処理装置。
【０１４６】
（付記３）  前記プロファイル情報取得部は、プログラムカウンタに記憶された所定のアドレスを取得し、当該アドレスを取得した累積の回数と当該アドレスとを対応付けた情報をプロファイル情報として取得し、プロファイル情報記憶部に格納することを特徴とする付記２記載の情報処理装置。
【０１４７】
（付記４）  前記プロファイル情報記憶部に記憶された前記プロファイル情報に含まれる前記アドレスを取得した前記累積の回数に基づいて、当該累積の回数を前記プログラムに含まれるモジュール、関数および命令の少なくとも何れかを単位として集計する解析処理部を更に有することを特徴とする付記３記載の情報処理装置。
【０１４８】
（付記５）  前記プロファイル情報取得部は、前記アドレスを取得した累積の回数を前記プログラムを実行した際に入力された入力データの属性に更に対応付けて前記プロファイル情報として取得し、
前記解析処理部は、前記集計の際に、前記累積の回数に対し前記入力データの属性に応じた正規化を行う、
ことを特徴とする付記４記載の情報処理装置。
【０１４９】
（付記６）  前記プロファイル情報取得部は、前記入力データの属性として当該入力データのサイズを前記プロファイル情報に含め、
前記解析処理部は、前記集計の際に、前記累積の回数に前記入力データのサイズの逆数を乗じて前記正規化を行う、
ことを特徴とする付記５記載の情報処理装置。
【０１５０】
（付記７）  前記演算部は、前記解析処理部による解析結果に基づいて、前記モジュール、関数および命令の少なくとも何れかの項目のうち、当該項目を実行する際に用いる記憶領域を、現在の記憶領域よりも高速にアクセスが可能な記憶領域に変更すべき前記項目を選択することを特徴とする付記４乃至６の何れか一項に記載の情報処理装置。
【０１５１】
（付記８）  前記演算部は、前記解析処理部による解析結果に基づいて、前記モジュール、関数および命令の少なくとも何れかの項目のうち、当該項目を実行する際の優先順位を下げるべき前記項目を選択することを特徴とする付記４乃至７の何れか一項に記載の情報処理装置。
【０１５２】
（付記９）  前記演算部は、前記解析処理部による解析結果に基づいて、前記モジュール、関数および命令の少なくとも何れかの項目のうち、当該項目を実行する際の前記演算部の動作周波数を下げるべき前記項目を選択することを特徴とする付記４乃至８の何れか一項に記載の情報処理装置。
【０１５３】
（付記１０）  前記解析処理部による集計結果を表示部に表示させ、前記表示部に表示された前記集計結果の表示画面を介して、前記プログラムに含まれる前記モジュール、関数および命令の何れかを選択する所定の操作入力を受け付けると、前記プログラムのソースを処理するためのデバッガおよびエディタを含む所定のツールを実行する入出力処理部を更に有することを特徴とする付記４乃至９の何れか一項に記載の情報処理装置。
【０１５４】
（付記１１）  前記演算部は、オペレーティングシステムが前記プログラムに割り当てたプロセス識別子、タスク識別子またはスレッド識別子の何れかを前記第１の識別情報として前記プログラムを実行することを特徴とする付記１乃至１０の何れか一項に記載の情報処理装置。
【０１５５】
（付記１２）  前記プロファイル情報取得部は、前記アドレスに対応付けてハードウェアカウンタ値に基づく情報および制御レジスタ値に基づく情報を更に取得し、前記プロファイル情報に含めることを特徴とする付記３乃至１０の何れか一項に記載の情報処理装置。
【０１５６】
（付記１３）  コンピュータを、
実行中のプログラムに対応付けられた第１の識別情報を第１の記憶手段に格納する制御手段、
前記第１の記憶手段に記憶された前記第１の識別情報と第２の記憶部に記憶された第２の識別情報との比較を行い、前記第１の識別情報と前記第２の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する比較手段、
として機能させることを特徴とするプロファイリングプログラム。
【０１５７】
（付記１４）  情報処理装置のプロファイリング方法であって、
演算部が、プログラムを第１の識別情報に対応付けて実行し、
比較部が、前記演算部により前記プログラムの実行が開始されると、前記第１の識別情報と記憶部に記憶された第２の識別情報との比較を行い、前記第１の識別情報と前記第２の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する、
ことを特徴とするプロファイリング方法。
【符号の説明】
【０１５８】
１０  情報処理装置
１１  プロセッサ
１１ａ  記憶部
１１ｂ  比較部
１１ｃ  割り込み出力部
１１ｄ  演算部
１２  プロファイル情報記憶部
１３  オペレーティングシステム
１３ａ，１３ｂ，１３ｃ  プログラム
【図１】
2011118596.tif 000003
【図２】
2011118596.tif 000004
【図３】
2011118596.tif 000005
【図４】
2011118596.tif 000006
【図５】
2011118596.tif 000007
【図６】
2011118596.tif 000008
【図７】
2011118596.tif 000009
【図８】
2011118596.tif 000010
【図９】
2011118596.tif 000011
【図１０】
2011118596.tif 000012
【図１１】
2011118596.tif 000013
【図１２】
2011118596.tif 000014
【図１３】
2011118596.tif 000015
【図１４】
2011118596.tif 000016
【図１５】
2011118596.tif 000017