JP2011118596A - 情報処理装置およびプロファイリング方法 - Google Patents

情報処理装置およびプロファイリング方法 Download PDF

Info

Publication number
JP2011118596A
JP2011118596A JP2009274563A JP2009274563A JP2011118596A JP 2011118596 A JP2011118596 A JP 2011118596A JP 2009274563 A JP2009274563 A JP 2009274563A JP 2009274563 A JP2009274563 A JP 2009274563A JP 2011118596 A JP2011118596 A JP 2011118596A
Authority
JP
Japan
Prior art keywords
program
information
unit
profile information
identification information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2009274563A
Other languages
English (en)
Inventor
Shigeru Kimura
茂 木村
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Semiconductor Ltd
Original Assignee
Fujitsu Semiconductor Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Semiconductor Ltd filed Critical Fujitsu Semiconductor Ltd
Priority to JP2009274563A priority Critical patent/JP2011118596A/ja
Publication of JP2011118596A publication Critical patent/JP2011118596A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】プロファイリングを効率的に行うこと。
【解決手段】演算部11dは、プログラム13a,13b,13cそれぞれを第1の識別情報に対応付けて実行する。比較部11bは、演算部11dがプログラム13a,13b,13cの実行を開始すると、プログラム13a,13b,13cそれぞれの第1の識別情報と記憶部11aに記憶された第2の識別情報との比較を行う。比較部11bは、第1の識別情報と第2の識別情報とが一致する場合に、該当のプログラムにつき所定のプロファイル情報の取得を促す信号を出力する。
【選択図】図1

Description

本発明はプログラムの実行状況を取得する情報処理装置およびプロファイリング方法に関する。
コンピュータ上で実行されるプログラムの性能分析や最適化を行う手段として、プロファイリングが広く用いられている。プロファイリングは、プログラムコードの走行頻度、時間分布、またプログラム内部の呼出し関係頻度等の分析に有効である。例えば、プロファイリングによって、プログラム実行中のリソースの利用状況(以下、プロファイル情報という)を取得する。プロファイル情報に基づいて、プログラム中で実行期間の長かったコード範囲や所定のイベント時のプログラムの実行状況等を把握することができる。
ここで、一般にコンピュータ上のプログラムの実行は、オペレーティングシステム(Operating System)により制御されている。オペレーティングシステムでは、プロファイリング対象のプログラムの他にも、他のアプリケーションのプログラムやシステムの動作を制御・管理するためのプログラム等が実行され得る。オペレーティングシステムは、これらプログラムの実行順序を独自の手法によりスケジューリングする。
これに対し、プロファイリングの際には、対象のプログラムが実行中のタイミングでプロファイル情報を取得する必要がある。そのために、次のような方法があった。
第1の方法は、プロファイル情報を取得するためのモジュールがプロファイリング対象のプログラムの実行時に動作するように、モジュール呼出用のプログラムを対象のプログラムに組み込む方法である。
第2の方法は、予め定められた時間ごとに割り込みを発生させ、割り込み発生時に対象プログラムのコード範囲が実行されていればプロファイル情報を取得する方法である。
特開2002−073379号公報 特開2005−215816号公報 特開2008−210011号公報 特開2009−075812号公報
しかし、上記第1の方法では、プロファイリング対象のプログラムの修正、再コンパイル、再リンクおよび再起動等が必要となる。また、上記第2の方法では、プロファイリング対象のプログラム以外のプログラムの実行時にも割り込みが生じてしまう。また、割り込み発生のたびにプロファイリング対象のプログラムが実行されているか否かを事後的に判断する必要があり、そのための演算コストを要する。
このため、従来の方法ではプロファイリングの効率が悪いという問題があった。
本発明はこのような点に鑑みてなされたものであり、プロファイリングを効率的に行う情報処理装置およびプロファイリング方法を提供することを目的とする。
本発明では上記課題を解決するために、情報処理装置が提供される。この情報処理装置は、演算部と比較部とを有する。演算部は、プログラムを第1の識別情報に対応付けて実行する。比較部は、演算部がプログラムの実行を開始すると、第1の識別情報と記憶部に記憶された第2の識別情報との比較を行い、第1の識別情報と第2の識別情報とが一致する場合に、該当のプログラムにつき所定のプロファイル情報の取得を促す信号を出力する。
また、上記情報処理装置と同様の処理を行うプロファイリング方法が提供される。
上記情報処理装置およびプロファイリング方法によれば、プロファイリングを効率的に行うことができる。
第1の実施の形態に係る情報処理装置を示す図である。 第2の実施の形態に係るコンピュータのハードウェア構成を示す図である。 第2の実施の形態のコンピュータにおけるOSを示す図である。 第2の実施の形態のCPUおよびオペレーティングシステムの構成を示す図である。 第2の実施の形態の割り込み回数テーブルのデータ構造例を示す図である。 OSのプロセス管理を例示する図である。 第2の実施の形態のプロファイル情報取得処理を示すフローチャートである。 第2の実施の形態のプロファイル情報表示処理を示すフローチャートである。 プロファイル情報の第1の画面表示例を示す図である。 プロファイル情報の第2の画面表示例を示す図である。 プロファイル情報の第3の画面表示例を示す図である。 プロファイル情報の第4の画面表示例を示す図である。 第2の実施の形態のチューニング処理を示すフローチャートである。 第3の実施の形態の割り込み回数テーブルのデータ構造例を示す図である。 第3の実施の形態のプロファイル情報表示処理を示すフローチャートである。
以下、本実施の形態を図面を参照して詳細に説明する。
[第1の実施の形態]
図1は、第1の実施の形態に係る情報処理装置を示す図である。情報処理装置10は、プロセッサ11、プロファイル情報記憶部12を有する。また、情報処理装置10では、プロセッサ11によって、オペレーティングシステム13が実行される。
プロセッサ11は、情報処理装置10全体を制御する。プロセッサ11は、例えばCPU(Central Processing Unit)である。プロセッサ11は、記憶部11a、比較部11b、割り込み出力部11cおよび演算部11dを有する。
記憶部11aは、演算部11dが実行するプログラムに対応付けられた識別情報を記憶する。識別情報は、例えばオペレーティングシステム13がプログラムの処理単位として管理するプロセスを識別するためのプロセス識別子(以下、プロセスID(IDentifier)という)である。また、識別情報として、例えばタスクIDやスレッドIDを用いてもよい。
比較部11bは、演算部11dがプログラムの実行を開始すると、そのプログラムに対応付けられた識別情報を取得する。比較部11bは、取得した識別情報と記憶部11aに記憶された識別情報とを比較する。比較部11bは、比較の結果、両識別情報が一致する場合に、実行中のプログラムの所定のプロファイル情報の取得を促す信号を出力する。この信号は、後段の割り込み出力部11cに割り込み信号を発生させるためのトリガとなる信号である。
割り込み出力部11cは、比較部11bが出力した信号を受信すると演算部11dに所定の周期で割り込み信号を出力する。
演算部11dは、オペレーティングシステム13やオペレーティングシステム13上で動作するプログラムを実行する。演算部11dは、プログラムを所定の識別情報に対応付けて実行する。演算部11dは、比較部11bが出力した信号に基づき割り込み出力部11cから割り込み信号を受け付けると、実行中のプログラムに関するプロファイル情報を取得し、プロファイル情報記憶部12に格納する。
プロファイル情報記憶部12は、プロファイル情報を記憶する。
オペレーティングシステム13は、オペレーティングシステム13上で動作するプログラム13a,13b,13cと情報処理装置10のハードウェアとの間のインタフェースを提供する。オペレーティングシステム13は、プログラム13a,13b,13cの実行順序を制御する。演算部11dは、その順序で(例えば、プログラム13a,13b,13cの順)にプログラム13a,13b,13cを実行する。
ここで、プログラム13aには、オペレーティングシステム13により、例えばプロセスID“a”が対応付けられているとする。また、プログラム13bには、例えばプロセスID“b”が対応付けられているとする。また、プログラム13cには、例えばプロセスID“c”が対応付けられているとする。そして、記憶部11aには、例えばプロセスID“c”が格納されているとする。
このとき、次のような処理が実行される。
まず、演算部11dはプログラム13aの実行を開始する。比較部11bは、演算部11dが実行するプログラム13aのプロセスID“a”と記憶部11aに格納されたプロセスID“c”とを比較する。比較部11bは、両プロセスIDが異なるので信号の出力を行わない。
次に、演算部11dはプログラム13bの実行を開始する。比較部11bは、演算部11dが実行するプログラム13bのプロセスID“b”と記憶部11aに格納されたプロセスID“c”とを比較する。比較部11bは、両プロセスIDが異なるので信号の出力を行わない。
次に、演算部11dはプログラム13cの実行を開始する。比較部11bは、演算部11dが実行するプログラム13cのプロセスID“c”と記憶部11aに格納されたプロセスID“c”とを比較する。比較部11bは、両プロセスIDが同じであるのでプログラム13cについてのプロファイル情報を演算部11dに取得させるための信号を出力する。
このような情報処理装置10によれば、演算部11dにより、プログラムが第1の識別情報に対応付けられて実行される。演算部11dによりプログラムの実行が開始されると、比較部11bにより第1の識別情報と記憶部11aとに記憶された第2の識別情報との比較が行われる。比較の結果、第1の識別情報と第2の識別情報とが同一である場合、比較部11bにより、実行中のプログラムにつき所定のプロファイル情報を演算部11dに収集させるための信号が出力される。
これにより、プロファイリングを効率的に行うことが可能となる。具体的には以下の通りである。
比較部11bは、記憶部11aに記憶された識別情報に対応するプログラムの実行タイミングでプロファイル情報の取得を促す信号を出力する。このように、比較部11bはプロファイリング対象のプログラムに対してのみプロファイル情報の取得を促す。このため、余分な割り込み信号等を発生させることがない。また、実行中のプログラムがプロファイリング対象のプログラムであるか否かを事後的に判断する必要がない。よって、プロファイリングの処理効率が向上する。また、プロファイリング対象のプログラムに手を加える必要がない。よって、プロファイリングを行う際のシステム管理者の負担が軽減される。
更に、実行時にメモリ上のアドレスが動的に特定されるプログラム(例えば、シェアードライブラリ)では、実行前に予めアドレス範囲を指定することができない。このため、そのようなプログラムでは、従来のようにアドレスを用いてプロファイリング対象のプログラムを事前に指定しておくことが困難であった。また、プログラムのメモリ割り当てを仮想メモリアドレスによって管理するオペレーティングシステムの場合、異なるプログラムで重複した仮想メモリアドレスが割り当てられることもある。このため、仮想メモリアドレスのみでプログラムを適正に指定することが困難な場合もあった。
これに対し、情報処理装置10は、プログラムの実行を管理するために割り当てられる所定の識別情報によって対象のプログラムを特定する。よって、プロファイリング対象のプログラムを容易に事前指定することができる。
以下の実施の形態では、情報処理装置10を汎用的なコンピュータに適用する場合を例に採り、更に具体的に説明する。
[第2の実施の形態]
以下、第2の実施の形態を図面を参照して詳細に説明する。
図2は、第2の実施の形態に係るコンピュータのハードウェア構成を示す図である。コンピュータ100は、CPU101、RAM(Random Access Memory)102、HDD(Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105および通信インタフェース106を有する。
CPU101は、コンピュータ100全体を制御する。
RAM102は、CPU101に実行させるオペレーティングシステム(以下、OSと略記する)のプログラムやアプリケーションのプログラムの少なくとも一部を一時的に記憶する。また、RAM102はCPU101による処理に必要な各種データを記憶する。
HDD103は、OSのプログラム、アプリケーションのプログラムを記憶する。また、HDD103はCPU101による処理に必要な各種データを記憶する。なお、HDD103に代えて(または、HDD103と併せて)、SSD(Solid State Drive)など他の種類の記憶装置を用いてもよい。
グラフィック処理装置104は、モニタ21と接続される。グラフィック処理装置104は、CPU101からの命令に従って画像をモニタ21の画面に表示させる。
入力インタフェース105は、キーボード22とマウス23と接続される。入力インタフェース105は、キーボード22やマウス23から送られてくる信号をCPU101に送信する。
通信インタフェース106は、ネットワーク20と接続される。通信インタフェース106は、ネットワーク20を介して他の情報処理装置とデータ通信する。
図3は、第2の実施の形態のコンピュータにおけるOSを示す図である。CPU101はコンピュータ100上でOS150を実行する。
OS150は、コンピュータ100上で動作するアプリケーションとハードウェアとの間のインタフェースを提供する。
例えば、OS150は、システム管理者によりキーボード22やマウス23が操作されて入力されたアプリケーションの実行開始のコマンドを受け付ける。OS150は、そのコマンドの内容をアプリケーションに出力する。アプリケーションは、そのコマンドに応じた処理を実行し、実行結果をOS150に出力する。OS150は、取得した実行結果をモニタ21に出力する。
ここで、OS150は、CPU101が実行すべきプログラムをプロセス単位にプロセスIDを付して管理する。OS150は、プロセスの実行をスケジューリングする。OS150は、例えば、Windows(登録商標)、UNIX(登録商標)またはLinux(登録商標)である。
CPU101は、OS150のスケジューリングに基づく順序で、プロセスに対応するプログラムを実行する。
コンピュータ100では、プログラムのプロファイリングを行うことができる。以下、そのための機能構成について説明する。
図4は、第2の実施の形態のCPUおよびオペレーティングシステムの構成を示す図である。CPU101は、プロファイルコンテキストレジスタ111、コンテキストレジスタ112、比較器113、内蔵タイマレジスタ114、内蔵タイマ閾値保持レジスタ115、タイマ比較器116、演算部117およびリソース群120を有する。なお、演算部117とCPU101の各部との接続は図示を省略している。
プロファイルコンテキストレジスタ111は、プロファイリング対象とするプログラムのプロセスIDを記憶する。
コンテキストレジスタ112は、演算部117がOS150上で現在実行しているプログラムに対応するプロセスIDを記憶する。
比較器113は、プロファイルコンテキストレジスタ111に記憶されたプロセスIDとコンテキストレジスタ112に記憶されたプロセスIDとを比較する。そして、比較器113は、両レジスタ(プロファイルコンテキストレジスタ111とコンテキストレジスタ112を示す)に記憶されたプロセスIDが同じである場合、内蔵タイマレジスタ114にトリガ信号を出力する。
内蔵タイマレジスタ114は、比較器113からトリガ信号の入力を受け付けると、タイマをスタートさせる。内蔵タイマレジスタ114は、内蔵タイマ値を保持しており、これを所定の周期でカウントアップ(あるいはカウントダウン)させる。
内蔵タイマ閾値保持レジスタ115は、内蔵タイマ閾値を記憶する。内蔵タイマ閾値とは、演算部117に割り込み信号を発生させる周期を決定するための情報である。
なお、内蔵タイマレジスタ114は、内蔵タイマ値が内蔵タイマ閾値保持レジスタ115に記憶された内蔵タイマ閾値に達すると、内蔵タイマ値を初期値に設定(リセット)する。その後、内蔵タイマレジスタ114は、比較器113から依然としてトリガ信号を受け付けている場合には、再度、内蔵タイマ値のカウントを開始する。
タイマ比較器116は、割り込み信号の出力を行う割り込み出力部である。タイマ比較器116は、内蔵タイマレジスタ114が保持する内蔵タイマ値と内蔵タイマ閾値保持レジスタ115に記憶された内蔵タイマ閾値とを比較する。そして、タイマ比較器116は、内蔵タイマ値と内蔵タイマ閾値とが同じである場合、演算部117に割り込み信号を出力する。
なお、タイマ比較器116は、内蔵タイマレジスタ114に内蔵タイマ値をリセットさせるために、割り込み信号をタイマリセット信号として内蔵タイマレジスタ114に対して出力してもよい。
演算部117は、演算を行う。演算部117は、OS150のプログラムや各種プログラムに含まれる命令に応じた処理を実行し、コンピュータ100上にOS150や各種プログラムの機能を実現する。演算部117は、タイマ比較器116から割り込み信号を受け付けると、OS150上に割り込みハンドラ153の機能を実現する。
リソース群120は、演算部117による演算処理に必要なレジスタ等のリソースの集合である。リソース群120は、プログラムカウンタ121、ハードウェアカウンタ122および制御レジスタ群123を含む。
プログラムカウンタ121は、演算部117が次に実行すべき命令のアドレスを記憶する。
ハードウェアカウンタ122は、CPU101で発生した各種ハードウェアに関するイベント発生数を記憶する。ハードウェアカウンタ122では、例えば、キャッシュミス数、TLB(Translation Lookaside Buffer)ミス数、実行命令数および分岐命令数等をカウントすることができる。
制御レジスタ群123は、その他の用途で用いられるレジスタ(例えば、汎用レジスタ等)の集合である。
プロファイル情報記憶部130は、プロファイル対象のプログラムについて取得されたプロファイル情報を記憶する。プロファイル情報記憶部130は、例えば、RAM102またはHDD103上に設けられる。
OS150は、入出力処理部151、プロファイリング制御ドライバ152、割り込みハンドラ153、解析処理部154およびプログラム155,156,157,・・・の実行を制御する。これらの各機能は、演算部117が各機能に対応するプログラムをOS150を介して実行することで実現されるものである。ただし、これらの機能のうちの少なくとも一部または全部をハードウェアによって実現することもできる。
入出力処理部151は、プロファイリング用のコマンドを受け付ける。プロファイリング用のコマンドは、例えばシステム管理者がキーボード22やマウス23を操作することでCPU101に入力される。また、当コマンドは、例えば所定のタイミングでCPU101が生成するものであってもよい。入出力処理部151は、受け付けたコマンドがプロファイリングの実行用のコマンドである場合、その内容をプロファイリング制御ドライバ152に出力する。また、入出力処理部151は、受け付けたコマンドがプロファイリング結果の出力に関するコマンドである場合、その内容を解析処理部154に出力する。入出力処理部151は、解析処理部154による解析結果を取得して、例えばモニタ21にプロファイリング結果を表示させる。
プロファイリング制御ドライバ152は、入出力処理部151から受け付けたコマンドの内容に応じて、プロファイルコンテキストレジスタ111および内蔵タイマ閾値保持レジスタ115の設定を行う。また、プロファイリング制御ドライバ152は、入出力処理部151からプロファイリングの開始のコマンドを受け付けると、比較器113およびタイマ比較器116を動作させる。また、プロファイリング制御ドライバ152は、入出力処理部151からプロファイリングの終了のコマンドを受け付けると、比較器113およびタイマ比較器116の動作を停止させる。
割り込みハンドラ153は、プロファイル情報を取得するプロファイル情報取得部である。割り込みハンドラ153は、上述したように演算部117によりその機能が実現されるが、演算部117とは別個のハードウェアとしてその機能が実現されてもよい。割り込みハンドラ153は、リソース群120の各レジスタに記憶されたアドレスやカウンタ値を取得する。割り込みハンドラ153は、アドレスの取得頻度等をプロファイル情報として取得し、プロファイル情報記憶部130に格納する。
解析処理部154は、入出力処理部151からプロファイリング結果の出力のコマンドを受け付けると、プロファイル情報記憶部130を参照して、プロファイル情報を解析する。解析処理部154は、プロファイル情報の解析結果を、入出力処理部151に出力する。
プログラム155,156,157,・・・は、OS150上で実行される制御用のプログラムやアプリケーションのプログラム等である。プログラム155,156,157,・・・は、実行待機状態としてRAM102に配置され、OS150によりプロセスIDに対応付けて実行順序が管理される。プログラム155,156,157,・・・は、その実行順序で演算部117により実行され、その機能が実現される。OS150は、現在実行中のプログラムのプロセスIDをコンテキストレジスタ112に設定する。
図5は、第2の実施の形態の割り込み回数テーブルのデータ構造例を示す図である。割り込み回数テーブル131は、割り込みハンドラ153により更新され、プロファイル情報記憶部130に格納される。割り込み回数テーブル131は、プロファイル情報の一例である。割り込み回数テーブル131には、割り込みアドレスを示す項目、割り込み回数を示す項目、ハードウェアカウンタ値を示す項目および制御レジスタ値を示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、あるアドレスに対する割り込み回数を示す。
割り込みアドレスを示す項目には、割り込みハンドラ153によりプログラムカウンタ121から取得されたアドレス(以下、サンプリングアドレスという)が設定される。割り込み回数を示す項目には、割り込みハンドラ153によって該当のサンプリングアドレスが取得された頻度が設定される。ハードウェアカウンタ値を示す項目には、ハードウェアカウンタ122の示す値が設定される。制御レジスタ値を示す項目には、制御レジスタ群123に含まれる所定のレジスタの示す値が設定される。
割り込み回数テーブル131には、例えば、割り込みアドレスが“00001000”、割り込み回数が“00000015”、ハードウェアカウンタ値が“00000033”、制御レジスタ値が“00000002”という情報が設定される。これは、演算部117にタイマ比較器116から割り込み信号が入力された際に、プログラムカウンタ121からサンプリングアドレス“00001000”が取得された回数が“00000015”回であることを示している。また、ハードウェアカウンタ122の示す値(例えば、キャッシュミス数の累積)が“00000033”であることを示している。同様に制御レジスタ群123で取得できる所定イベント発生数の累積が“00000002”であることを示している。
解析処理部154は、割り込み回数テーブル131に基づいて、プロファイル情報の解析を行うことができる。入出力処理部151は、その解析結果に基づいて、プロファイリング結果をモニタ21に表示させることができる。
なお、ハードウェアカウンタ値や制御レジスタ値について、各割り込みアドレスにおけるイベントの累積を取得するために、所定値からの差分を取得するようにしてもよい。例えば、直前に取得したキャッシュミス数と今回取得したキャッシュミス数との差分をとれば直前の割り込みアドレスに対応する命令の実行時に発生したキャッシュミス数を取得できる。そして、該当の割り込みアドレスごとにその累積を算出することで、対応する命令の実行時に発生したキャッシュミス数の累積を取得できる。
図6は、OSのプロセス管理を例示する図である。(A)は、プロセス管理テーブル300を示している。(B)は、プロセスの実行順序を示している。
プロセス管理テーブル300はOS150によって、OS150が利用する所定のメモリ領域に格納される。プロセス管理テーブル300では、プログラム名がプロセスIDに対応付けられてOS150により管理される。
例えば、プログラム名“/usr/bin/sample.out”に対してプロセスID“1000”が対応付けられる。
そして、OS150は、プロセスID“1”に対応するプロセス310,プロセスID“1000”に対応するプロセス320,・・・の実行順序を所定の方法で決定する。
演算部117は、決定された実行順序でプロセス310,320,・・・に対応する各プログラムを実行する。このとき実行中のプログラムのプロセスIDがコンテキストレジスタ112に逐次設定される。
次に、以上のような構成を備えるコンピュータ100における処理手順を説明する。
なお、演算部117が主体となる動作は、ソフトウェアにより実現される機能を明確にするために、OS150上の各機能(入出力処理部151、プロファイリング制御ドライバ152、割り込みハンドラ153および解析処理部154等)を用いて説明する。
図7は、第2の実施の形態のプロファイル情報取得処理を示すフローチャートである。以下、図7に示す処理をステップ番号に沿って説明する。
[ステップS11]プロファイリング制御ドライバ152は、プロファイリング対象のプログラムのプロセスIDと内蔵タイマ閾値を取得する。例えば、プロファイリング制御ドライバ152は、入出力処理部151からプロセスIDや内蔵タイマ閾値を取得できる。
具体的には、入出力処理部151は、システム管理者による所定のプロファイリング開始、あるいは、プロファイリング環境設定のためのコマンドを受け付ける。すると、入出力処理部151は、そのコマンドにパラメータとして含まれるプロセスIDや内蔵タイマ閾値をプロファイリング制御ドライバ152に出力する。プロファイリング制御ドライバ152は、取得したプロセスIDをプロファイルコンテキストレジスタ111に設定する。また、取得した内蔵タイマ閾値を内蔵タイマ閾値保持レジスタ115に設定する。
なお、プロファイリング対象のプログラムは、OS150により予めスケジューリングが行われているものとする。
[ステップS12]入出力処理部151は、プロファイリング開始の入力を受け付ける。例えば、入出力処理部151はシステム管理者による所定のプロファイリング開始のコマンドの入力を受け付けることができる。あるいは、所定の時刻等にプロファイリング開始の命令が入出力処理部151に入力されるように、OS150によりスケジューリングされていてもよい。そして、入出力処理部151は、受け付けた開始コマンドをプロファイリング制御ドライバ152に出力する。プロファイリング制御ドライバ152は、開始コマンドに応じて比較器113およびタイマ比較器116の動作を開始させる。
[ステップS13]比較器113は、プロファイルコンテキストレジスタ111に記憶されたプロセスIDとコンテキストレジスタ112に記憶されたプロセスIDとを比較する。
[ステップS14]比較器113は、両レジスタに記憶されたプロセスIDが一致するか否かを判定する。一致する場合、処理をステップS15に進める。一致しない場合、処理をステップS22に進める。
[ステップS15]比較器113は、内蔵タイマレジスタ114へのトリガ信号の出力を開始する。内蔵タイマレジスタ114および演算部117は、比較器113からトリガ信号が出力されている間、すなわち、両レジスタに記憶されたプロセスIDが一致している間、以下のステップS21までの処理を繰り返し実行する。
[ステップS16]内蔵タイマレジスタ114は、内蔵タイマ値のカウントアップ(あるいはカウントダウン)を開始する。その後、タイマ比較器116は、内蔵タイマレジスタ114に記憶された内蔵タイマ値と内蔵タイマ閾値保持レジスタ115に記憶された内蔵タイマ閾値とが一致したことを検出する。
[ステップS17]タイマ比較器116は、演算部117に割り込み信号を出力する。そして、内蔵タイマレジスタ114は内蔵タイマ値を初期値にリセットする。
[ステップS18]演算部117は、タイマ比較器116から割り込み信号を受け付けると、割り込みハンドラ153を実行する。
[ステップS19]割り込みハンドラ153は、プログラムカウンタ121に格納されているアドレスをサンプリングアドレスとして取得する。
[ステップS20]割り込みハンドラ153は、取得したサンプリングアドレスに基づいてプロファイル情報記憶部130に記憶された割り込み回数テーブル131を更新する。具体的には、割り込み回数テーブル131の該当のサンプリングアドレスに対応する割り込み回数に1を加算する。なお、該当のサンプリングアドレスが割り込み回数テーブル131の割り込みアドレスを示す項目に未設定の場合には、当サンプリングアドレスの取得は最初の取得となる。このため、割り込みハンドラ153は、そのサンプリングアドレス用のレコードを割り込み回数テーブル131に設けてから、割り込み回数を1に設定する。
[ステップS21]タイマ比較器116は、プロファイルコンテキストレジスタ111に記憶されたプロセスIDとコンテキストレジスタ112に記憶されたプロセスIDとが不一致となるとトリガ信号の出力を停止する。そして、処理をステップS22に進める。
[ステップS22]入出力処理部151は、プロファイリング終了のコマンドを受け付けたか否かを判定する。終了コマンドを受け付けた場合、その旨をプロファイリング制御ドライバ152に通知する。プロファイリング制御ドライバ152は、その通知を受けて比較器113およびタイマ比較器116の動作を停止させる。そして、プロファイリング処理を完了する。終了コマンドを受け付けていない場合、処理をステップS13に進める。
例えば、入出力処理部151はシステム管理者による所定のプロファイリング終了のコマンドの入力を受け付けることができる。あるいは、所定の時刻等にプロファイリング終了の命令が入出力処理部151に入力されるように、OS150によりスケジューリングされていてもよい。
このように、タイマ比較器116は実行中のプログラムがプロファイリング対象である場合に、内蔵タイマ閾値で設定される所定の周期で、演算部117に割り込み信号を出力する。演算部117は、割り込み信号に応じて割り込みハンドラ153を実行する。割り込みハンドラ153は、プログラムカウンタ121からサンプリングアドレスを取得し、割り込み回数テーブル131を更新する。
なお、ステップS11,S12は同時に実行されてもよい。例えば、システム管理者はプロファイリングの開始コマンドと共に、パラメータとしてプロファイリング対象とするプログラムのプロセスIDや内蔵タイマ閾値を入力することができる。
また、上記ステップS12,S22では、例えばシステム管理者は次のようなコマンド入力によって、入出力処理部151に対するプロファイリング開始および終了の指示を与えることができる。
開始コマンド例:sampler −start −p 1000 −i 10
終了コマンド例:sampler −stop −p 1000
なお、“−p 1000”は対象とするプロセスIDを指定するためのパラメータである。プロセスIDは、IDの直接指定に限らず、プログラム名(例えば、“user_prog”等の名称)によって指定してもよい。その場合、プロファイリング制御ドライバ152は、開始コマンドに対し、そのプログラム名から対応するプロセスIDを取得してプロファイルコンテキストレジスタ111に設定する。
また、“−i 10”は内蔵タイマ閾値を指定するためのパラメータである。単位は、例えばサイクル数やマイクロ秒である。
そして、解析処理部154は、割り込み回数テーブル131の解析を行う。入出力処理部151は、その解析結果をプロファイリング結果としてモニタ21に出力する。
なお、解析処理部154の解析処理は、例えば解析処理部154が入出力処理部151からプロファイリング結果出力のコマンドを受け付けた際に実行される。例えば、システム管理者は、次のようなコマンド入力によって、入出力処理部151に対するプロファイリング結果出力の指示を与えることができる。
結果出力コマンド例:sampler−view profile_file sample.out
ここで、“profile_file”は、プロファイル情報記憶部130に記憶されたプロファイル情報(例えば、割り込み回数テーブル131)を指定するためのパラメータである。また、“sample.out”はプロファイリング対象のプログラムの名称を指定するためのパラメータである。
入出力処理部151がこのコマンドを受け付けると、コンピュータ100は以下のプロファイル情報表示処理を実行する。
以下、解析処理部154によるプロファイル情報の解析および入出力処理部151による結果の表示を説明する。
図8は、第2の実施の形態のプロファイル情報表示処理を示すフローチャートである。以下、図8に示す処理をステップ番号に沿って説明する。
[ステップS31]解析処理部154は、プログラム(あるいは、プログラムに含まれるモジュール。以下同じ)中に含まれる関数名とその関数に割り当てられた相対アドレス位置(範囲)とを示すシンボル情報を取得する。ここで、相対アドレス位置とは、例えば該当のモジュールの先頭アドレスをアドレス“0”とした場合の該当関数の相対的な先頭アドレス位置を示す。シンボル情報は、例えば、OS150が提供するシンボル表示コマンド(例えば、UNIXやLinuxではnmコマンド)を内部的に実行することで取得できる。あるいは、例えば、ロードモジュール(プログラムの実行形式のモジュールあるいはリンカで結合されたモジュールの集合)のシンボル参照用の関数(例えば、UNIXやLinuxではelfアクセスライブラリ)を使用してシンボル情報を取得することもできる。
[ステップS32]解析処理部154は、プロファイル情報記憶部130に記憶された割り込み回数テーブル131を参照して、サンプリングアドレスがプロファイル対象のプログラム中のどの相対アドレス位置で取得されたかを特定する。具体的には、解析処理部154は、システムロードマップ情報を参照して、プロファイル対象のプログラムの先頭アドレス(AD1)とサンプリングアドレス(AD2)との差(AD2−AD1)を求める。
なお、システムロードマップ情報は、例えば、OS150がプログラムをロードモジュール単位にRAM102に配置する際に生成している。そして、OS150は、RAM102またはHDD103の所定の記憶部にシステムロードマップ情報を格納している。
[ステップS33]解析処理部154は、ステップS31で取得したシンボル情報とプロファイル情報記憶部130に記憶された割り込み回数テーブル131とに基づいて、関数ごとの割り込み回数を算出する。解析処理部154は、その結果を解析結果として入出力処理部151に出力する。ここで、解析処理部154は、プロファイル情報記憶部130に複数回に渡って同じプログラムにつき取得された複数の割り込み回数テーブルが存在する場合には、それらをマージして関数ごとの割り込み回数を取得してもよい。
[ステップS34]入出力処理部151は、解析処理部154の解析結果に基づいて、プロファイリング結果をモニタ21に表示させる。
このようにして、解析処理部154は、プロファイル対象のプログラムに含まれるモジュール、関数および命令ごとの割り込み回数を取得できる。
関数単位の割り込み回数は、割り込み回数テーブル131における、その関数のアドレス範囲内の割り込み回数の総和である。例えば、アドレス“00001000”〜“00002000”に対応付けられた関数があれば、そのアドレス範囲に含まれる命令につき取得した割り込み回数の総和をその関数の割り込み回数とする。
モジュール単位の割り込み回数は、割り込み回数テーブル131における、そのモジュールのアドレス範囲内の割り込み回数の総和である。例えば、アドレス“00001000”〜“00010000”に対応付けられたモジュールがあれば、そのアドレス範囲に含まれる関数単位に取得した割り込み回数の総和をそのモジュールの割り込み回数とする。
入出力処理部151は、その結果に基づいて、モジュール、関数および命令ごとの実行コストを示す情報をモニタ21に表示できる。
図9は、プロファイル情報の第1の画面表示例を示す図である。結果表示画面211は、入出力処理部151によって生成され、モニタ21に表示される。結果表示画面211は、プロファイリング対象としたプログラムに含まれるモジュールごとのサンプリング頻度および割合をファイル単位に示すものである。結果表示画面211では、当プログラムにおいて「libthread_sub_b.so」モジュールが“90.3%”と最も高頻度であり、実行コストが最大であることが分かる。
図10は、プロファイル情報の第2の画面表示例を示す図である。結果表示画面212は、入出力処理部151によって生成され、モニタ21に表示される。結果表示画面212は、「libthread_sub_b.so」に含まれる関数単位でサンプリング頻度および割合を示すものである。結果表示画面212では、関数「FuncS」が全体の“10%”と最も高頻度であり、実行コストが最大であることが分かる。
図11は、プロファイル情報の第3の画面表示例を示す図である。結果表示画面213は、入出力処理部151によって生成され、モニタ21に表示される。結果表示画面213は、「libthread_sub_b.so」に含まれる関数「FuncT」に含まれる命令単位でサンプリング頻度および割合を示すものである。結果表示画面213では、アドレス「0x0000002C」に対応する命令が全体の“69.5%”と最も高頻度であり、実行コストが最大であることが分かる。
結果表示画面211,212,213では、テキスト形式での出力例を示したが、このような方法に限らずGUI(Graphical User Interface)を利用して操作性を向上することもできる。
図12は、プロファイル情報の第4の画面表示例を示す図である。ウィンドウ214,215は、入出力処理部151によって生成され、モニタ21に表示される。
ウィンドウ214は、関数ごとのサンプリング頻度を降順で表示した例である。システム管理者は、ウィンドウ214に表示された関数を示す行のうちの何れかに対し、例えばマウス23によりクリック操作(例えば、ダブルクリック)することができる。入出力処理部151は、そのクリック操作を受け付けると、ウィンドウ215をモニタ21に表示させる。
ウィンドウ215は、ウィンドウ214に表示された関数に含まれる命令ごとの詳細なサンプリング頻度を示す。ウィンドウ215では、ウィンドウ214で関数「FuncE」が選択された場合を例示している。
関数内実行頻度グラフ215aでは、横軸は関数内のアドレス位置のオフセットを示し、縦軸はサンプリング頻度を示す。例えば、システム管理者は関数内実行頻度グラフ215aを参照することで、黒帯線が表示されたアドレス近辺で実行コストが大きいことが分かる。
サンプリング頻度表示領域215bでは、具体的な命令アドレスに対応付けてその検出数(サンプリング頻度)および関数内全体のサンプリング頻度に対する割合が表示される。例えば、システム管理者はサンプリング頻度表示領域215bに表示された何れかの命令アドレスを示す行をマウス23によりクリック操作(例えば、ダブルクリック)することができる。入出力処理部151は、そのクリック操作を受け付けると、例えば対応するプログラムのソースを処理するためのデバッガ、エディタおよびその他のツール等を起動することができる。
このように、システム管理者は、ボトルネック箇所を容易に特定することができる。更に、プログラムの実行環境設定の調整や改修等のチューニングを容易に行うことができる。
なお、プロファイリング制御ドライバ152は、解析処理部154による解析結果に基づいて実行環境設定の調整(例えば、より高速なメモリに優先配置する)を実行することもできる。以下では、そのための処理手順について説明する。
図13は、第2の実施の形態のチューニング処理を示すフローチャートである。以下、図13に示す処理をステップ番号に沿って説明する。
[ステップS41]プロファイリング制御ドライバ152は、OS150が管理するプロセスの稼働状況を取得する。プロセスの稼働状況としては、例えばCPU時間(CPUが演算を行った時間)、メモリ使用量、I/O(Input / Output)時間(I/Oが実行された時間)、I/O数、I/Oデータ量およびネットワーク利用率等が考えられる。あるいは、システム管理者が定義した任意の指標により稼働状況を取得してもよい。
[ステップS42]プロファイリング制御ドライバ152は、取得した稼働状況に基づいて、プロファイリング対象とするプログラムを選択する。例えば、CPU時間の大きなプロセスから最上位のものを1つ、あるいは上位の複数のプロセスを選択する。そして、プロファイリング制御ドライバ152は、選択した複数のプロセスに対応するプロセスIDをプロファイルコンテキストレジスタ111に設定する。
[ステップS43]CPU101は、選択した各プロセスIDに対応するプログラムにつきプロファイリング処理を実行する。その処理手順は、図7で説明したプロファイリング処理の手順と同様である。割り込みハンドラ153は、例えば選択された複数のプロセスに対応するプログラムごとに割り込み回数テーブル131を生成し、プロファイル情報としてプロファイル情報記憶部130に格納する。
[ステップS44]解析処理部154は、プロファイル情報記憶部130に記憶されたプロファイル情報に基づいて、各プログラムに含まれる実行コストの高い関数を特定する。解析処理部154は、特定した関数をプロファイリング制御ドライバ152に通知する。
[ステップS45]プロファイリング制御ドライバ152は、解析処理部154から通知された関数を現在よりも高速のメモリ領域に優先配置するようOS150に指示する。例えば、該当の関数については、HDD103に設けられたスワップ領域よりも優先的にRAM102上に配置するようOS150に指示する。
このようにして、プロファイリング制御ドライバ152は、プロファイリング対象とするプログラムを選択し、該当のプログラムの実行環境を調整することができる。
これにより、プログラムのチューニングをより効率的に行うことができる。また、システム管理者の作業負担をより軽減することができる。
なお、上記ステップS42において、プロファイリング制御ドライバ152はプロファイルコンテキストレジスタ111にサンプリング対象とするプログラムのプロセスIDを複数設定することができる。その場合、比較器113は、何れかのプロセスIDがコンテキストレジスタ112に記憶されたプロセスIDと一致する場合に、内蔵タイマレジスタ114にトリガ信号を出力することができる。また、複数のプロセスIDを設定可能とするために、プロファイルコンテキストレジスタ111を複数設けてもよい。そして、比較器113は、複数設けたプロファイルコンテキストレジスタ111の何れかに記憶されたプロセスIDとコンテキストレジスタ112に記憶されたプロセスIDとが一致する場合に、内蔵タイマレジスタ114にトリガ信号を出力するようにしてもよい。
また、上記ステップS45では、メモリ配置の変更を例示したが、このようなチューニングに限らない。例えば、CPU時間の大きなものから複数選択したプロセスに対し、以下の何れか、あるいは複数のチューニングを行うことができる。
(1)プロファイリング制御ドライバ152は、選択したプロセスのうち、実行コストが最大(あるいは、上位の複数)のプロセスのスケジューリングの際の優先順位を1レベル下げるようにOS150に指示する。
(2)プロファイリング制御ドライバ152は、選択したプロセスのうち、実行コストが最小(あるいは、下位の複数)のプロセスをアイドル状態の多いプロセスとみなす。そして、プロファイリング制御ドライバ152は、そのプロセスを実行する際のCPU101の動作周波数を通常よりも低く設定するようOS150に指示する。
(3)プロファイリング制御ドライバ152は、選択したプロセスのうち、実行コストが最大(あるいは、上位の複数)のプロセスや、そのプロセスに対応するプログラムに含まれる関数から呼び出されるシステムコールに関してもメモリ配置や優先順位の調整等を行う。
これにより、コンピュータ100全体として、一層のスループット向上および電力削減を図ることができる。
本実施の形態で説明したように、コンピュータ100は、ハードウェア(CPU101)によって割り込み信号を発生させる。このため、ソフトウェア(例えばOS150)で発生させる場合よりも短い周期でサンプリングアドレスを取得することができる。
ここで、例えばOS150による割り込みは、システムコールによって発生させることができる。その場合、割り込みの周期は、システムタイマの最小割り込み時間となる。この割り込み時間は、例えばUNIXやLinuxでは、10ミリ秒である。
これに対し、CPU101はそれよりも短い周期で割り込み信号を発生させることができるので、より詳細なプロファイル情報を取得できる。また、その際に、プロファイリング対象とするプログラムがCPU101で実行されている期間にのみ割り込み信号を出力させるようにしたので、他のプログラムの実行時に無駄な割り込みが入ることがない。その結果、事後的にプロファイリング対象のプログラムであるか否かの判断を行う必要がなくなり、その処理コストが軽減される。よって、プロファイリングを効率的に行うことができる。
また、コンピュータ100は、そのプロファイリング結果に基づいて、実行コストの高いモジュールや関数をシステム管理者に示す。これにより、システム管理者は容易に処理のネックとなっているモジュールや関数を特定することができる。また、特定したモジュールや関数に対する実行環境設定の調整や改修等のチューニングを容易に行うことができる。
また、コンピュータ100は、OS150で管理されるプロセスの実行状況に基づいて、プロファイリング対象とするプログラムを選択することができる。更に、選択したプログラムに対するプロファイリング結果に基づいて、メモリ配置の変更等の実行環境設定の調整を行う。これにより、システム管理者の負担を軽減して、より効率的にプログラムのチューニングを行うことができる。
[第3の実施の形態]
以下、第3の実施の形態を図面を参照して詳細に説明する。前述の第2の実施の形態との相違点について主に説明し、同様の事項に関しては説明を省略する。
ここで、プロファイリング処理では、対象のプログラムに対して常に同じ入力条件でプロファイリングが行われるとは限らない。例えば、入力データによって、そのデータサイズ、入力頻度およびカバレージ率(プログラム内実行ルートの網羅度合を示す)等の属性が異なる場合が考えられる。第3の実施の形態では、そのような異なる入力条件で取得されたプロファイル情報を適切にマージして、より精度の高いプロファイル情報を取得可能とする機能を提供する。
なお、第3の実施の形態のコンピュータの構成は、図2〜4で示した第2の実施の形態のコンピュータ100の構成と同一であるため、説明を省略する。以下では、便宜的にコンピュータ100で説明した各構成と同一の符号を用いて、第3の実施の形態のコンピュータの各構成を指し示すものとする。
また、第3の実施の形態のプロファイリング処理およびチューニング処理は、図7,13で示した第2の実施の形態のプロファイリング処理およびチューニング処理と同様であるため説明を省略する。ただし、プロファイリング処理では、割り込みハンドラ153は、各アドレスにつき割り込み回数を取得すると共に、その処理の実行の際の入力条件(例えば、入力データサイズ)を取得してプロファイル情報記憶部130に格納する。
図14は、第3の実施の形態の割り込み回数テーブルのデータ構造例を示す図である。割り込み回数テーブル132は、割り込みハンドラ153により更新され、プロファイル情報記憶部130に格納される。割り込み回数テーブル132は、プロファイル情報の一例である。割り込み回数テーブル132には、割り込みアドレスを示す項目、割り込み回数を示す項目および入力データサイズを示す項目が設けられている。各項目の横方向に並べられた情報同士が互いに関連付けられて、あるアドレスに対する割り込み回数を示す。
ここで、割り込みアドレスを示す項目および割り込み回数を示す項目は、図5で説明した割り込み回数テーブル131の同一名称の項目に対応する。また、ハードウェアカウンタ値を示す項目や制御レジスタ値を示す項目に関しては割り込み回数テーブル131と同様であるため図示および説明を省略するが、割り込み回数テーブル132にもこれらの情報を含む。
入力データサイズを示す項目には、プロファイリング対象のプログラムに対して入力されたデータのデータサイズが設定される。
割り込み回数テーブル132には、例えば、割り込みアドレスが“00001000”、割り込み回数が“00000001”、入力データサイズが“2KB(KiloBytes)”という情報が設定される。これは、対象プログラムに対する入力データサイズが“2KB”である場合、演算部117にタイマ比較器116から割り込み信号が入力された際に、プログラムカウンタ121からサンプリングアドレス“00001000”が取得された回数が“00000001”回であることを示している。
また、割り込み回数テーブル132には、例えば、割り込みアドレスが“00001000”、割り込み回数が“00000124”、入力データサイズが“500KB”という情報が設定される。これは、対象プログラムに対する入力データサイズが“500KB”である場合、演算部117にタイマ比較器116から割り込み信号が入力された際に、プログラムカウンタ121からサンプリングアドレス“00001000”が取得された回数が“00000124”回であることを示している。
このように、割り込みハンドラ153は、同じアドレスに対しても入力データサイズが異なれば別個にプロファイル情報を取得する。割り込み回数テーブル132の例でいえば、1回目のプロファイリングでは“2KB”の入力データが入力された場合であり、その入力データサイズ“2KB”で区別してプロファイル情報を管理する。同様に、2回目のプロファイリングでは“20KB”の入力データが入力された場合であり、その入力データサイズ“20KB”で区別してプロファイル情報を管理する。同様に、3回目のプロファイリングでは“500KB”の入力データが入力された場合であり、その入力データサイズ“500KB”で区別してプロファイル情報を管理する。
なお、入力データの属性を示す情報として、割り込み回数テーブル132ではデータサイズを示したが、これに限らない。例えば、割り込みハンドラ153は入力データの入力頻度や入力データに応じたカバレージ率等を各アドレスに対応付けて取得してもよい。
そして、解析処理部154は、割り込み回数テーブル132に基づいて、各アドレスにつき入力データに応じた重み付けマージをしてプロファイル情報の解析を行うことができる。
次に、以上のような構成を備えるコンピュータ100におけるプロファイル表示処理(重み付けマージを含む)の手順を説明する。
図15は、第3の実施の形態のプロファイル情報表示処理を示すフローチャートである。以下、図15に示す処理をステップ番号に沿って説明する。
[ステップS51]解析処理部154は、プログラム(あるいは、プログラムに含まれるモジュール。以下同じ)中に含まれる関数名とその関数に割り当てられたアドレス位置(範囲)とを示すシンボル情報を取得する。ここで、相対アドレス位置とは、例えば該当のモジュールの先頭アドレスをアドレス“0”とした場合の該当関数の相対的な先頭アドレス位置を示す。シンボル情報は、例えば、OS150が提供するシンボル表示コマンドを内部的に実行することで取得できる。あるいは、例えばロードモジュールのシンボル参照用の関数を使用してシンボル情報を取得することもできる。
[ステップS52]解析処理部154は、プロファイル情報記憶部130に記憶された割り込み回数テーブル132を参照して、サンプリングアドレスがプロファイル対象のプログラム中のどの相対アドレス位置で取得されたかを特定する。相対アドレス位置の具体的な算出方法は、図8のステップS32の処理と同一である。
[ステップS53]解析処理部154は、ステップS51で取得したシンボル情報とプロファイル情報記憶部130に記憶された割り込み回数テーブル132とに基づいて、関数ごとの割り込み回数を算出する。ここで、解析処理部154は、割り込み回数テーブル132に含まれる割り込み回数につき入力データサイズの逆数で重み付けを行う。
例えば、アドレス“00001000”に対応付けられた命令があるとする。割り込み回数テーブル132を参照すると、その命令につき入力データサイズが“2KB”、“20KB”、“500KB”で割り込み回数が取得されている。このため、解析処理部154は、その命令について、合成割り込み回数S=(1×1/2)+(5×1/20)+(124×1/500)=1.5を算出する。そして、この合成割り込み回数Sを命令ごとの割り込み回数とみなす。更に、解析処理部154は、例えばアドレス“00001000”〜“00002000”に対応付けられた関数があるとすれば、そのアドレス範囲に含まれる命令の合成割り込み回数の総和をその関数に対する割り込み回数とみなす。
モジュール単位の割り込み回数についても同様である。例えば、アドレス“00001000”〜“00010000”に対応付けられたモジュールがあるとする。その場合、そのアドレス範囲に含まれる関数について上記合成割り込み回数により求めた関数単位の割り込み回数の総和を、そのモジュールに対する割り込み回数とみなす。
[ステップS54]入出力処理部151は、解析処理部154の解析結果に基づいて、プロファイリング結果をモニタ21に表示させる。
このようにして、解析処理部154は、入力データサイズにより測定した割り込み回数を正規化して、各関数の合成割り込み回数を取得し、これを関数ごとの割り込み回数として解析結果を出力する。
なお、割り込み回数テーブル132には、入力データサイズの他に入力頻度やカバレージ率も設定可能である旨を示した。例えば、入力頻度を属性情報として用いる場合には、入力頻度の逆数を割り込み回数に乗じて重み付けすることで正規化してもよい。また、カバレージ率を属性情報として用いる場合には、カバレージ率を割り込み回数に乗じて重み付けすることで正規化してもよい。
コンピュータ100は、これによって得たプロファイリング結果に基づいて、図13に示したチューニング処理を行うことができる。
ここで、例えば、ある一つの入力データサイズにより取得されたプロファイル情報によってチューニングを行うとすると、その入力データサイズに対しては、チューニングによってプログラムの実行効率を改善することができる。しかしながら、その他の入力データサイズについてそのチューニング内容が一律に適しているとは限らない。例えば、他の入力データサイズでは、そのチューニングによる実行効率の改善効果が小さいことも考えられる。
これに対し、第3の実施の形態のコンピュータ100は複数の異なる入力条件(属性)で取得されたプロファイル情報の合成結果を用いてチューニングを行うことができる。これにより、異なる入力条件を考慮してプロファイリング結果を適正に取得することができる。このため、各入力条件に対して適切なチューニングを行うことができる。その結果、各入力条件に対して平均的にプログラムの実行効率を向上することができる。
また、第2の実施の形態と同様の効果を奏することができる。
ここで、第2,3の実施の形態では、ハードウェア(例えば、CPU101)により割り込みを発生させることを想定した説明を行った。ハードウェアを用いると、ソフトウェア(例えば、OS150)の最小割り込み間隔以下の周期で割り込みを発生させることができる。このように、割り込みの頻度が高い場合、従来の方法では、他のプログラムの実行中にも割り込みが発生するので、割り込みのたびに生じる事後的なプログラムの判定処理により過大な負荷が生じる可能性があった。
これに対し、本発明では、プロファイリング対象のプログラムが演算部117で実行中の場合にのみ割り込みが発生するので、上述のような余分な割り込みや判断処理が発生しない。よって、本発明はハードウェアで割り込みを発生させる場合のように、より短い周期で割り込みを発生させる場合に特に適している。
なお、第2,3の実施の形態では、OS150により管理されるプロセスIDによってプロファイリング対象のプログラムを特定することとしたが、これに限られない。例えば、OS150がプログラムに割り当てるタスクIDやスレッドIDによってプロファイリング対象を特定してもよい。
更に、プロファイルコンテキストレジスタ111または比較器113の何れか一方または両方をコンピュータ100上のアプリケーションによって実現することもできる。その場合、プロファイルコンテキストレジスタ111または比較器113の構成に対応する機能をコンピュータ100上に実現するためのプログラムが提供される。
処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体には、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、HDD、フレキシブルディスク(FD)、磁気テープ(MT)などがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc - Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto - Optical disk)などがある。
上記プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータに格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
上記プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラム若しくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
以上、本発明の情報処理装置およびプロファイリング方法を図示の実施の形態に基づいて説明したが、これらに限定されるものではなく、各部の構成は同様の機能を有する任意の構成のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。更に、前述した実施の形態のうちの任意の2以上の構成(特徴)を組み合わせたものであってもよい。
以上の第1〜3の実施の形態を含む実施の形態に関し、更に以下の付記を開示する。
(付記1) プログラムを第1の識別情報に対応付けて実行する演算部と、
前記演算部が前記プログラムの実行を開始すると、前記第1の識別情報と記憶部に記憶された第2の識別情報との比較を行い、前記第1の識別情報と前記第2の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する比較部と、
を有することを特徴とする情報処理装置。
(付記2) 前記比較部が出力した前記信号を受信すると、前記演算部に所定の周期で割り込み信号を出力する割り込み出力部と、
前記演算部が前記割り込み出力部により出力された前記割り込み信号を受信するたびに、前記所定のプロファイル情報の取得を行うプロファイル情報取得部と、
を更に有することを特徴とする付記1記載の情報処理装置。
(付記3) 前記プロファイル情報取得部は、プログラムカウンタに記憶された所定のアドレスを取得し、当該アドレスを取得した累積の回数と当該アドレスとを対応付けた情報をプロファイル情報として取得し、プロファイル情報記憶部に格納することを特徴とする付記2記載の情報処理装置。
(付記4) 前記プロファイル情報記憶部に記憶された前記プロファイル情報に含まれる前記アドレスを取得した前記累積の回数に基づいて、当該累積の回数を前記プログラムに含まれるモジュール、関数および命令の少なくとも何れかを単位として集計する解析処理部を更に有することを特徴とする付記3記載の情報処理装置。
(付記5) 前記プロファイル情報取得部は、前記アドレスを取得した累積の回数を前記プログラムを実行した際に入力された入力データの属性に更に対応付けて前記プロファイル情報として取得し、
前記解析処理部は、前記集計の際に、前記累積の回数に対し前記入力データの属性に応じた正規化を行う、
ことを特徴とする付記4記載の情報処理装置。
(付記6) 前記プロファイル情報取得部は、前記入力データの属性として当該入力データのサイズを前記プロファイル情報に含め、
前記解析処理部は、前記集計の際に、前記累積の回数に前記入力データのサイズの逆数を乗じて前記正規化を行う、
ことを特徴とする付記5記載の情報処理装置。
(付記7) 前記演算部は、前記解析処理部による解析結果に基づいて、前記モジュール、関数および命令の少なくとも何れかの項目のうち、当該項目を実行する際に用いる記憶領域を、現在の記憶領域よりも高速にアクセスが可能な記憶領域に変更すべき前記項目を選択することを特徴とする付記4乃至6の何れか一項に記載の情報処理装置。
(付記8) 前記演算部は、前記解析処理部による解析結果に基づいて、前記モジュール、関数および命令の少なくとも何れかの項目のうち、当該項目を実行する際の優先順位を下げるべき前記項目を選択することを特徴とする付記4乃至7の何れか一項に記載の情報処理装置。
(付記9) 前記演算部は、前記解析処理部による解析結果に基づいて、前記モジュール、関数および命令の少なくとも何れかの項目のうち、当該項目を実行する際の前記演算部の動作周波数を下げるべき前記項目を選択することを特徴とする付記4乃至8の何れか一項に記載の情報処理装置。
(付記10) 前記解析処理部による集計結果を表示部に表示させ、前記表示部に表示された前記集計結果の表示画面を介して、前記プログラムに含まれる前記モジュール、関数および命令の何れかを選択する所定の操作入力を受け付けると、前記プログラムのソースを処理するためのデバッガおよびエディタを含む所定のツールを実行する入出力処理部を更に有することを特徴とする付記4乃至9の何れか一項に記載の情報処理装置。
(付記11) 前記演算部は、オペレーティングシステムが前記プログラムに割り当てたプロセス識別子、タスク識別子またはスレッド識別子の何れかを前記第1の識別情報として前記プログラムを実行することを特徴とする付記1乃至10の何れか一項に記載の情報処理装置。
(付記12) 前記プロファイル情報取得部は、前記アドレスに対応付けてハードウェアカウンタ値に基づく情報および制御レジスタ値に基づく情報を更に取得し、前記プロファイル情報に含めることを特徴とする付記3乃至10の何れか一項に記載の情報処理装置。
(付記13) コンピュータを、
実行中のプログラムに対応付けられた第1の識別情報を第1の記憶手段に格納する制御手段、
前記第1の記憶手段に記憶された前記第1の識別情報と第2の記憶部に記憶された第2の識別情報との比較を行い、前記第1の識別情報と前記第2の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する比較手段、
として機能させることを特徴とするプロファイリングプログラム。
(付記14) 情報処理装置のプロファイリング方法であって、
演算部が、プログラムを第1の識別情報に対応付けて実行し、
比較部が、前記演算部により前記プログラムの実行が開始されると、前記第1の識別情報と記憶部に記憶された第2の識別情報との比較を行い、前記第1の識別情報と前記第2の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する、
ことを特徴とするプロファイリング方法。
10 情報処理装置
11 プロセッサ
11a 記憶部
11b 比較部
11c 割り込み出力部
11d 演算部
12 プロファイル情報記憶部
13 オペレーティングシステム
13a,13b,13c プログラム

Claims (6)

  1. プログラムを第1の識別情報に対応付けて実行する演算部と、
    前記演算部が前記プログラムの実行を開始すると、前記第1の識別情報と記憶部に記憶された第2の識別情報との比較を行い、前記第1の識別情報と前記第2の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する比較部と、
    を有することを特徴とする情報処理装置。
  2. 前記比較部が出力した前記信号を受信すると、前記演算部に所定の周期で割り込み信号を出力する割り込み出力部と、
    前記演算部が前記割り込み出力部により出力された前記割り込み信号を受信するたびに、前記所定のプロファイル情報の取得を行うプロファイル情報取得部と、
    を更に有することを特徴とする請求項1記載の情報処理装置。
  3. 前記プロファイル情報取得部は、プログラムカウンタに記憶された所定のアドレスを取得し、当該アドレスを取得した累積の回数と当該アドレスとを対応付けた情報をプロファイル情報として取得し、プロファイル情報記憶部に格納することを特徴とする請求項2記載の情報処理装置。
  4. 前記プロファイル情報記憶部に記憶された前記プロファイル情報に含まれる前記アドレスを取得した前記累積の回数に基づいて、当該累積の回数を前記プログラムに含まれるモジュール、関数および命令の少なくとも何れかを単位として集計する解析処理部を更に有することを特徴とする請求項3記載の情報処理装置。
  5. 前記プロファイル情報取得部は、前記アドレスを取得した累積の回数を前記プログラムを実行した際に入力された入力データの属性に更に対応付けて前記プロファイル情報として取得し、
    前記解析処理部は、前記集計の際に、前記累積の回数に対し前記入力データの属性に応じた正規化を行う、
    ことを特徴とする請求項4記載の情報処理装置。
  6. 情報処理装置のプロファイリング方法であって、
    演算部が、プログラムを第1の識別情報に対応付けて実行し、
    比較部が、前記演算部により前記プログラムの実行が開始されると、前記第1の識別情報と記憶部に記憶された第2の識別情報との比較を行い、前記第1の識別情報と前記第2の識別情報とが一致する場合に、前記プログラムにつき所定のプロファイル情報の取得を促す信号を出力する、
    ことを特徴とするプロファイリング方法。
JP2009274563A 2009-12-02 2009-12-02 情報処理装置およびプロファイリング方法 Pending JP2011118596A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009274563A JP2011118596A (ja) 2009-12-02 2009-12-02 情報処理装置およびプロファイリング方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009274563A JP2011118596A (ja) 2009-12-02 2009-12-02 情報処理装置およびプロファイリング方法

Publications (1)

Publication Number Publication Date
JP2011118596A true JP2011118596A (ja) 2011-06-16

Family

ID=44283853

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009274563A Pending JP2011118596A (ja) 2009-12-02 2009-12-02 情報処理装置およびプロファイリング方法

Country Status (1)

Country Link
JP (1) JP2011118596A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015001755A (ja) * 2013-06-13 2015-01-05 富士通株式会社 プログラム、プロセス選択方法および情報処理装置
JP2016011837A (ja) * 2014-06-27 2016-01-21 三菱レイヨン株式会社 モールドの検査方法およびモールドの製造方法
JP2018063518A (ja) * 2016-10-12 2018-04-19 株式会社日立製作所 管理サーバ、管理方法及びそのプログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2015001755A (ja) * 2013-06-13 2015-01-05 富士通株式会社 プログラム、プロセス選択方法および情報処理装置
JP2016011837A (ja) * 2014-06-27 2016-01-21 三菱レイヨン株式会社 モールドの検査方法およびモールドの製造方法
JP2018063518A (ja) * 2016-10-12 2018-04-19 株式会社日立製作所 管理サーバ、管理方法及びそのプログラム
WO2018070211A1 (ja) * 2016-10-12 2018-04-19 株式会社日立製作所 管理サーバ、管理方法及びそのプログラム

Similar Documents

Publication Publication Date Title
JP5520371B2 (ja) 多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリング
US6961930B1 (en) Efficient, transparent and flexible latency sampling
US20100017583A1 (en) Call Stack Sampling for a Multi-Processor System
US8286134B2 (en) Call stack sampling for a multi-processor system
JP4681491B2 (ja) プロファイリングプログラムおよびプロファイリング方法
JP5326374B2 (ja) プロセッサ、性能プロファイリング装置、性能プロファイリングプログラムおよび性能プロファイリング方法
US8219995B2 (en) Capturing hardware statistics for partitions to enable dispatching and scheduling efficiency
US8516462B2 (en) Method and apparatus for managing a stack
US20060242389A1 (en) Job level control of simultaneous multi-threading functionality in a processor
US20080168445A1 (en) Measuring processor use in a hardware multithreading processor environment
US7519966B2 (en) Information processing and control
JP2005018760A (ja) アプリケーションのプロファイリングを容易にするシステムおよび方法
JP2000235511A (ja) アプリケーションプログラムのパフォーマンス解析方法、アプリケーションプログラムのパフォーマンス解析に用いられるシステム及び装置
US20030135720A1 (en) Method and system using hardware assistance for instruction tracing with secondary set of interruption resources
US20080148241A1 (en) Method and apparatus for profiling heap objects
US20060277395A1 (en) Processor performance monitoring
JP2013533553A (ja) システムテスト方法
US9442817B2 (en) Diagnosis of application server performance problems via thread level pattern analysis
US8286192B2 (en) Kernel subsystem for handling performance counters and events
JP2022058878A (ja) 後方互換性のためのアプリケーション固有動作パラメータの導出
JP5998764B2 (ja) 情報処理装置、ログ出力方法およびログ出力プログラム
CN110990243A (zh) 卡顿分析方法、装置、存储介质和计算设备
JP2011118596A (ja) 情報処理装置およびプロファイリング方法
JPWO2003040948A1 (ja) コンピュータ及び制御方法
US20080282263A1 (en) Virtual Event Interface to Support Platform-Wide Performance Optimization