JP2018005546A - 情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラム - Google Patents

情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラム Download PDF

Info

Publication number
JP2018005546A
JP2018005546A JP2016131474A JP2016131474A JP2018005546A JP 2018005546 A JP2018005546 A JP 2018005546A JP 2016131474 A JP2016131474 A JP 2016131474A JP 2016131474 A JP2016131474 A JP 2016131474A JP 2018005546 A JP2018005546 A JP 2018005546A
Authority
JP
Japan
Prior art keywords
time
sampling
program
execution
time difference
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.)
Granted
Application number
JP2016131474A
Other languages
English (en)
Other versions
JP6691295B2 (ja
Inventor
真弘 三輪
Masahiro Miwa
真弘 三輪
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 Ltd
Original Assignee
Fujitsu 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 Ltd filed Critical Fujitsu Ltd
Priority to JP2016131474A priority Critical patent/JP6691295B2/ja
Priority to US15/607,711 priority patent/US10331538B2/en
Publication of JP2018005546A publication Critical patent/JP2018005546A/ja
Application granted granted Critical
Publication of JP6691295B2 publication Critical patent/JP6691295B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Abstract

【課題】間欠的なサンプリングログを用いたループ処理の分析を容易にする。
【解決手段】複数の関数13b,13c,13dを用いた処理を繰り返すループ13aを含む対象プログラム13を実行したときに算出された先頭時刻14a,14b,14c,14dを示す先頭時刻情報14を取得する。また、間欠的なサンプリングによって生成されたサンプリングログ15a,15b,15cを取得する。サンプリング時刻16a,16b,16cを、直前の先頭時刻からの時刻差分17a,17b,17cに変換する。サンプリングログ15a,15b,15cを時刻差分区間18a,18b,18cに分類し、各時刻差分区間について関数13b,13c,13dそれぞれの実行が検出された回数をカウントする。カウントした回数を用いて、時刻差分区間18a,18b,18cと関数13b,13c,13dの実行との対応関係を示す時系列情報18を表示させる。
【選択図】図1

Description

本発明は情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラムに関する。
アプリケーションプログラムの実行中に、間欠的にプロセッサに割り込みを発生させてサンプリングログを収集し、収集したサンプリングログを用いてアプリケーションプログラムの挙動を分析することがある。例えば、一定周期で割り込みを発生させる機能を有するプロセッサにアプリケーションプログラムを実行させ、割り込みの発生毎に、実行中の命令の命令アドレスなどの状態情報をサンプリングログとして収集することがある。
このようなアプリケーションプログラムの挙動分析を、「タイムベースサンプリングによるプロファイリング」と言うことがある。「タイムベースサンプリングによるプロファイリング」によれば、例えば、収集したサンプリングログを時系列に並べることで、プログラムモジュールの実行順序や所要実行時間などを確認することができる。
一例として、アプリケーションプログラムに含まれる関数の呼び出し状況を解析する解析装置が提案されている。提案の解析装置は、アプリケーションプログラムの実行中、一定周期でプロセッサに割り込みを発生させる。解析装置は、割り込みが発生する毎にメモリのスタック領域から、呼び出し中の関数のアドレスを含む関数呼び出し情報を収集する。解析装置は、収集した関数呼び出し情報に基づいて、各関数がどのタイミングで呼び出されたかを示す時系列情報を表示する。また、解析装置は、収集した関数呼び出し情報に基づいて、各関数が呼び出された回数をカウントして表示する。
特開2000−250780号公報
サンプリングログを収集するにあたり、サンプリング間隔を短くした方が、アプリケーションプログラムの挙動を詳細に分析することが可能となる。ただし、メモリ容量などの計算リソースの制限から、サンプリング間隔を短くすることが難しい場合がある。また、サンプリング間隔を短くし過ぎると、サンプリング自体の負荷によって、アプリケーションプログラムの挙動が本来の挙動から変わってしまう可能性がある。そのため、サンプリングログは十分な間隔を空けて収集されることが多い。
しかし、間欠的なサンプリングログをそのままサンプリング時刻の順に並べても、アプリケーションプログラムに含まれるループについては有用な分析結果が得られないことがあるという問題がある。これは、ループ処理の繰り返し周期とサンプリング間隔とがずれる可能性が高く、ループ実行中に収集される各サンプリングログは、ループ内で実行される命令のうちの任意の命令を指し示しているに過ぎないためである。
例えば、ループ内で関数f1,f2,f3を順に呼び出すアプリケーションプログラムを考える。このループ内の処理が繰り返し実行されると、関数f1,f2,f3が繰り返し呼び出されることになる。ループの実行中に間欠的にサンプリングログを収集した場合、1つ目のサンプリング時刻では関数f1、2つ目のサンプリング時刻では関数f3、3つ目のサンプリング時刻では関数f2、4つ目のサンプリング時刻では関数f2が実行中である可能性がある。しかしながら、実行中の関数をサンプリング時刻の順にf1,f3,f2,f2,…と並べた分析結果は、ループ内での関数呼び出しの順序を示しているわけではなく、関数f1,f2,f3の所要実行時間を示しているわけでもない。
1つの側面では、本発明は、間欠的なサンプリングログを用いたループ処理の分析が容易となる情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラムを提供することを目的とする。
1つの態様では、記憶部と表示制御部とを有する情報処理装置が提供される。記憶部は、複数の関数を用いた処理を繰り返すループを含む対象プログラムを実行したときに算出された複数の先頭時刻を示す情報であって、複数の先頭時刻は処理の繰り返し毎における処理の先頭の実行時刻を示している先頭時刻情報を記憶する。また、記憶部は、対象プログラムを実行したときに間欠的なサンプリングによって生成されたログであって、それぞれがサンプリング時刻と複数の関数のうち実行中の関数の特定に用いられる状態情報とを含む複数のサンプリングログを記憶する。表示制御部は、複数のサンプリングログそれぞれのサンプリング時刻を、複数の先頭時刻のうち当該サンプリング時刻の直前の先頭時刻からの時刻差分に変換する。表示制御部は、時刻差分に基づいて複数のサンプリングログを複数の時刻差分区間に分類し、各時刻差分区間について、当該時刻差分区間に属するサンプリングログの状態情報に基づいて複数の関数それぞれの実行が検出された回数をカウントする。表示制御部は、カウントした回数を用いて、時刻差分に従って並べた複数の時刻差分区間と複数の関数の実行との対応関係を示す時系列情報を表示させる。
また、1つの態様では、情報処理装置が実行するプログラム実行状態表示方法が提供される。また、1つの態様では、コンピュータに実行させるプログラム実行状態表示プログラムが提供される。
1つの側面では、間欠的なサンプリングログを用いたループ処理の分析が容易となる。
第1の実施の形態の情報処理装置の例を示す図である。 情報処理装置のハードウェア例を示すブロック図である。 CPUのハードウェア例を示すブロック図である。 サンプリング情報の第1の可視化例を示す図である。 サンプリング情報の第2の可視化例を示す図である。 サンプリング情報の第3の可視化例を示す図である。 情報処理装置のソフトウェア例を示すブロック図である。 情報処理装置で実行されるプロセスの例を示すブロック図である。 対象プログラムの編集例を示す図である。 サンプリングテーブルの例を示す図である。 先頭時刻テーブルの例を示す図である。 関数判定テーブルの例を示す図である。 ループ実行テーブルの例を示す図である。 可視化テーブルの例を示す図である。 サンプリング制御の手順例を示すフローチャートである。 割り込み処理の手順例を示すフローチャートである。 ループ処理の手順例を示すフローチャートである。 ループ分析の手順例を示すフローチャートである。 ループ分析の手順例を示すフローチャート(続き)である。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の情報処理装置の例を示す図である。
第1の実施の形態の情報処理装置10は、対象プログラム13の挙動を分析する。情報処理装置10は、例えば、対象プログラム13のデバッグや運用保守の際に使用される。情報処理装置10は、ユーザが操作するクライアントコンピュータでもよいし、クライアントコンピュータからアクセスされるサーバコンピュータでもよい。
情報処理装置10は、記憶部11および表示制御部12を有する。記憶部11は、RAM(Random Access Memory)などの揮発性の半導体メモリでもよいし、HDD(Hard Disk Drive)やフラッシュメモリなどの不揮発性の記憶装置でもよい。表示制御部12は、CPU(Central Processing Unit)やDSP(Digital Signal Processor)などのプロセッサでもよい。また、表示制御部12は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサは、RAMなどのメモリ(記憶部11でもよい)に記憶されたプログラムを実行する。プロセッサが実行するプログラムには、以下に説明する処理を記載したプログラム実行状態表示プログラムが含まれる。複数のプロセッサの集合を、「マルチプロセッサ」または単に「プロセッサ」と言うこともある。
記憶部11は、先頭時刻情報14と、サンプリングログ15a,15b,15cを含む複数のサンプリングログを記憶する。先頭時刻情報14および複数のサンプリングログは、対象プログラム13を実行したときに生成されたものである。
対象プログラム13は、分析対象のプログラムである。対象プログラム13は、人間が可読なソースコードでもよいし、機械可読なオブジェクトコードでもよい。対象プログラム13は、ループ13aを含む。ループ13aは、関数13b(f1)、関数13c(f2)および関数13d(f3)を含む複数の関数を用いたループ内処理を繰り返す。ここで言う「関数」は、他の処理単位から呼び出し可能なプログラム上の処理単位であればよく、メソッド、手続き、セクションなど他の名称で呼ばれることもある。所定のループ条件が満たされれば、ループ内処理が2回以上繰り返されることがある。関数13b,13c,13dは、対象プログラム13に含まれていてもよい。例えば、ループ内処理1回につき、これら3つの関数が関数13b、関数13c、関数13dの順に呼び出される。なお、対象プログラム13が記憶部11に記憶されていてもよい。
先頭時刻情報14は、対象プログラム13を実行したときに算出された複数の先頭時刻を示す。複数の先頭時刻は、ループ内処理の繰り返し毎におけるループ内処理の先頭の実行時刻を示している。例えば、先頭時刻情報14は先頭時刻14a,14b,14c,14dを示す。先頭時刻14aは1回目のループ内処理の先頭の実行時刻、先頭時刻14bは2回目のループ内処理の先頭の実行時刻、先頭時刻14cは3回目のループ内処理の先頭の実行時刻、先頭時刻14dは4回目のループ内処理の先頭の実行時刻である。
先頭時刻情報14は、情報処理装置10によって生成されてもよいし、他の情報処理装置によって生成されてもよい。表示制御部12は、ループ内処理の繰り返し毎にループ内処理の先頭の実行時刻を出力する命令が挿入された対象プログラム13を起動させることで、先頭時刻情報14を生成してもよい。例えば、ループ13aの中で関数13b,13c,13dが順に呼び出される場合、ループ13a内部の先頭など関数13bの呼び出しの前に命令が挿入される。命令の挿入は、ユーザが対象プログラム13を編集することで行われてもよい。また、命令の挿入は、コンパイラなどのツールを用いて支援されてもよい。また、命令の挿入は、分析ツールによって自動で行われてもよい。命令の挿入はソースコード上で行われてもよいし、オブジェクトコード上で行われてもよい。
サンプリングログ15a,15b,15cを含む複数のサンプリングログは、対象プログラム13を実行したときに間欠的なサンプリングによって生成されたログである。例えば、対象プログラム13の実行中に所定の時間間隔で周期的にサンプリングログが生成される。各サンプリングログは、そのサンプリングログが生成されたサンプリング時刻と、サンプリング時刻において実行中であった関数の特定に用いられる状態情報とを含む。状態情報は、例えば、実行中の命令の命令アドレスを含む。なお、先頭時刻およびサンプリング時刻は、OS(Operating System)が管理するリアルタイムクロックによって計測されてもよい。また、先頭時刻およびサンプリング時刻は、対象プログラム13を実行するプロセッサが有するカウンタ(クロックカウンタなど)によって計測されてもよい。
複数のサンプリングログは、情報処理装置10によって生成されてもよいし、他の情報処理装置によって生成されてもよい。表示制御部12は、対象プログラム13を起動させ、対象プログラム13の実行中に間欠的なサンプリングを行ってもよい。
例えば、サンプリングログ15aは、サンプリング時刻16aと関数13cを示す状態情報とを含む。サンプリングログ15aは、1回目のループ内処理の実行中に生成されている。サンプリングログ15bは、サンプリング時刻16bと関数13dを示す状態情報とを含む。サンプリングログ15bは、2回目のループ内処理の実行中に生成されている。サンプリングログ15cは、サンプリング時刻16cと関数13dを示す状態情報とを含む。サンプリングログ15cは、4回目のループ内処理の実行中に生成されている。
表示制御部12は、対象プログラム13の挙動を分析して分析結果を表示させる。分析結果を表示するディスプレイは、情報処理装置10が備えていてもよいし、情報処理装置10に直接接続されていてもよいし、情報処理装置10と通信可能な他の情報処理装置が備えていてもよい。他の情報処理装置が備えるディスプレイに分析結果を表示させる場合、例えば、表示制御部12はネットワークを介して分析結果データを送信する。
表示制御部12は、先頭時刻情報14および複数のサンプリングログを取得する。表示制御部12は、複数のサンプリングログそれぞれのサンプリング時刻を、先頭時刻情報14が示す複数の先頭時刻のうち当該サンプリング時刻の直前の先頭時刻からの時刻差分に変換する。あるサンプリング時刻において第N回目(Nは1以上の整数)のループ内処理が実行されていた場合、当該サンプリング時刻は、第N回目のループ内処理の先頭時刻からのオフセットに変換されることになる。
例えば、表示制御部12は、サンプリングログ15aについて、サンプリング時刻16aとその直前の先頭時刻14a(第1回目のループ内処理の先頭時刻)との差を時刻差分17aとして算出する。また、表示制御部12は、サンプリングログ15bについて、サンプリング時刻16bとその直前の先頭時刻14b(第2回目のループ内処理の先頭時刻)との差を時刻差分17bとして算出する。また、表示制御部12は、サンプリングログ15cについて、サンプリング時刻16cとその直前の先頭時刻14d(第4回目のループ内処理の先頭時刻)との差を時刻差分17cとして算出する。
表示制御部12は、算出した時刻差分に基づいて、複数のサンプリングログを複数の時刻差分区間に分類する。複数の時刻差分区間は、連続する時刻差分(時間軸)を複数区間に分割したものである。例えば、複数の時刻差分区間はそれぞれ所定の時間幅をもつ。分類にあたり、表示制御部12は、時刻差分の小さい順に複数のサンプリングログを並べ替えてもよい。ここでは、時刻差分17cよりも時刻差分17aが大きく、時刻差分17aよりも時刻差分17bが更に大きいとする。その場合、表示制御部12は、サンプリングログ15a,15b,15cを、時刻差分17a,17b,17cの小さい順に、サンプリングログ15c、サンプリングログ15a、サンプリングログ15bと並べ替える。
一例として、複数の時刻差分区間には、時刻差分区間18a,18b,18cが含まれる。時刻差分区間18aは、時刻差分=0を含む区間である。時刻差分区間18bは、時間軸上で時刻差分区間18aに続く区間である。時刻差分区間18cは、時間軸上で時刻差分区間18bに続く区間である。時刻差分17aが時刻差分区間18bに属する場合、表示制御部12は、サンプリングログ15aを時刻差分区間18bに分類する。時刻差分17bが時刻差分区間18cに属する場合、表示制御部12は、サンプリングログ15bを時刻差分区間18cに分類する。時刻差分17cが時刻差分区間18aに属する場合、表示制御部12は、サンプリングログ15cを時刻差分区間18aに分類する。
表示制御部12は、複数の時刻差分区間それぞれについて、当該時刻差分区間に属するサンプリングログの状態情報に基づいて、各関数の実行が検出された回数をカウントする。状態情報が実行中の命令の命令アドレスを含む場合、表示制御部12は、命令アドレスと関数との対応関係を示す関数情報を参照して実行中の関数を判定してもよい。命令アドレスと関数との対応関係は、ユーザが作成してもよいし、対象プログラム13を分析することで情報処理装置10または他の情報処理装置が生成してもよい。
表示制御部12は、カウントした回数を用いて、時刻差分に従って並べた複数の時刻差分区間と関数13b,13c,13dの実行との対応関係を示す時系列情報18を表示させる。好ましくは、時刻差分の小さい順に複数の時刻差分区間が並べられ、それら複数の時刻差分区間における関数13b,13c,13dの実行状態が時系列に表示される。例えば、表示制御部12は、複数の時刻差分区間それぞれについて、カウントした回数に基づいて、関数13b,13c,13dの実行割合を算出する。そして、表示制御部12は、関数13b,13c,13dの実行割合の変化を示す時系列情報18を表示させる。
一例として、時刻差分区間18aに属するサンプリングログは全て関数13bの実行を示し、時刻差分区間18bに属するサンプリングログは全て関数13cの実行を示し、時刻差分区間18cに属するサンプリングログは全て関数13dの実行を示しているとする。この場合、例えば、時刻差分区間18aでは関数13bの実行割合が100%であり、時刻差分区間18bでは関数13cの実行割合が100%であり、時刻差分区間18cでは関数13dの実行割合が100%であることを示す時系列情報18が表示される。これにより、ループ13aで行われる1回のループ内処理では、関数13b,13c,13dが、関数13b、関数13c、関数13dの順に実行されていることが表現される。
第1の実施の形態の情報処理装置10によれば、ループ内処理の繰り返し毎の先頭時刻を示す先頭時刻情報14と、対象プログラム13の実行中に生成されたサンプリングログ15a,15b,15cとが取得される。先頭時刻情報14に基づいて、サンプリング時刻16a,16b,16cが時刻差分17a,17b,17cに変換され、サンプリングログ15a,15b,15cが時刻差分区間18a,18b,18cに分類される。そして、時刻差分区間18a,18b,18cと関数13b,13c,13dの実行との対応関係を示す時系列情報18が表示される。
これにより、サンプリング時刻16a,16b,16cの順にサンプリングログ15a,15b,15cを表示する場合よりも、ループ13a内での関数13b,13c,13dの呼び出し順序などの時系列性を適切に表現することができる。また、サンプリングログ15a,15b,15cを時刻差分区間18a,18b,18cに分類することで、1回のループ内処理の状態情報を短いサンプリング間隔でサンプリングした場合と同等の効果が得られる。よって、サンプリング間隔が長くてもループ内処理の分析が容易となる。また、サンプリング間隔を長くすることで、メモリなどの計算リソースを節約することができる。また、サンプリング自体が対象プログラム13の挙動に与える影響を低減でき、対象プログラム13の挙動の測定精度が向上する。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、情報処理装置のハードウェア例を示すブロック図である。
第2の実施の形態の情報処理装置100は、CPU101、RAM102、HDD103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。情報処理装置100の上記ユニットは、バス108に接続されている。なお、情報処理装置100は、第1の実施の形態の情報処理装置10に対応する。CPU101は、第1の実施の形態の表示制御部12に対応する。RAM102またはHDD103は、第1の実施の形態の記憶部11に対応する。また、情報処理装置100は、クライアントコンピュータでもよいしサーバコンピュータでもよい。
CPU101は、プログラムの命令を実行する演算回路を含むプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101が複数のプロセッサコアを備えてもよいし、情報処理装置100が複数のプロセッサを備えてもよい。以下で説明する処理を、複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。複数のプロセッサの集合(マルチプロセッサ)を「プロセッサ」と言うこともある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、情報処理装置100は、RAM以外の種類のメモリを備えてもよいし、複数個のメモリを備えてもよい。
HDD103は、OSやミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムには、プログラム実行状態表示プログラムが含まれる。なお、情報処理装置100は、フラッシュメモリやSSDなどの他の種類の記憶装置を備えてもよいし、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、情報処理装置100に接続されたディスプレイ111に画像を出力する。ディスプレイ111としては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなど、任意の種類のディスプレイを用いることができる。
入力信号処理部105は、情報処理装置100に接続された入力デバイス112から入力信号を取得し、CPU101に出力する。入力デバイス112としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、情報処理装置100に、複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体113に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体113として、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体113から読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体113は、可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体113やHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク114に接続され、ネットワーク114を介して他の装置と通信を行うインタフェースである。通信インタフェース107は、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースでもよいし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
図3は、CPUのハードウェア例を示すブロック図である。
CPU101は、命令アドレスレジスタ121、タイムスタンプレジスタ122、割り込み制御レジスタ123、カウントアップレジスタ124、割り込み発行部125および命令実行部126を有する。なお、図3では、CPU101が有する種々の回路のうち、主にタイムベースサンプリングに関連する回路を示している。
命令アドレスレジスタ121は、CPU101が実行している命令の命令アドレスを記憶する揮発性の記憶回路である。タイムスタンプレジスタ122は、CPU101が起動してからの経過時間を示すタイムスタンプを記憶する揮発性の記憶回路である。タイムスタンプは、所定数のクロックが発生する毎に1ずつカウントアップしていく。
割り込み制御レジスタ123は、定期的な割り込みを発生させるか否かを示す割り込み発生フラグを記憶する。割り込み発生フラグがON(例えば、「1」)であることは、定期的な割り込みを発生させることを示す。割り込み発生フラグがOFF(例えば、「0」)であることは、定期的な割り込みを発生させないことを示す。割り込み制御レジスタ123には、ソフトウェアによって割り込み発生フラグを書き込むことができる。
カウントアップレジスタ124は、設定された初期値から始めてカウントアップしていくカウントを記憶する揮発性の記憶回路である。カウントアップレジスタ124には、ソフトウェアによってカウントの初期値を書き込むことができる。カウントは、所定数のクロックが発生する毎に1ずつカウントアップしていく。カウントアップレジスタ124に記憶可能なカウントには上限値があり、カウントアップによってカウントが上限値を超えると、カウントアップレジスタ124にオーバーフローが発生する。
割り込み発行部125は、割り込み制御レジスタ123に記憶された割り込み発生フラグがONであり、かつ、カウントアップレジスタ124にオーバーフローが発生したとき、命令実行部126に対して割り込みを発行する。ソフトウェアによってカウントアップレジスタ124に書き込まれる初期値を調整することで、所望の周期で割り込み発行部125に割り込みを発行させることが可能となる。なお、カウントアップレジスタ124には、オーバーフローが発生する毎に初期値を再書き込みすることになる。
命令実行部126は、RAM102からプログラムの命令を読み出し命令を実行する。割り込み発行部125が割り込みを発行すると、命令実行部126は、現在実行中のアプリケーションプログラムを中断して、所定の割り込みハンドラプログラムを開始する。割り込みハンドラプログラムが終了すると、命令実行部126は、直前に実行していたアプリケーションプログラムを再開する。
情報処理装置100は、上記のCPU101の機能を利用して、「タイムベースサンプリングによるプロファイリング」により対象プログラムの挙動を分析する。すなわち、情報処理装置100は、CPU101に定期的に割り込みを発生させ、割り込み発生時に対象プログラムの実行状態を示すサンプリング情報を取得する。情報処理装置100は、定期的に取得したサンプリング情報を分析し、分析結果をディスプレイ111に表示する。第2の実施の形態では主に、対象プログラムに含まれるループの挙動を分析する。
次に、ループの挙動の可視化について説明する。
図4は、サンプリング情報の第1の可視化例を示す図である。
グラフ21は、タイムスタンプの昇順にサンプリング情報を並べた場合のグラフである。グラフ21に用いられているタイムスタンプは、CPU101のタイムスタンプレジスタ122に記憶されたタイムスタンプである。ここでは、対象プログラムに含まれるループのループ内処理が16回以上繰り返し実行されたものとする。
ループ内処理の周期は「10」である。ループ内処理の1回目(i=1)は、時刻「10」に開始されている。ループ内処理の2回目(i=2)は、時刻「20」に開始されている。ループ内処理の3回目(i=3)は、時刻「30」に開始されている。ループ内処理の4回目(i=4)は、時刻「40」に開始されている。ループ内処理の5回目(i=5)は、時刻「50」に開始されている。ループ内処理の6回目(i=6)は、時刻「60」に開始されている。ループ内処理の7回目(i=7)は、時刻「70」に開始されている。ループ内処理の8回目(i=8)は、時刻「80」に開始されている。
ループ内処理の9回目(i=9)は、時刻「90」に開始されている。ループ内処理の10回目(i=10)は、時刻「100」に開始されている。ループ内処理の11回目(i=11)は、時刻「110」に開始されている。ループ内処理の12回目(i=12)は、時刻「120」に開始されている。ループ内処理の13回目(i=13)は、時刻「130」に開始されている。ループ内処理の14回目(i=14)は、時刻「140」に開始されている。ループ内処理の15回目(i=15)は、時刻「150」に開始されている。ループ内処理の16回目(i=16)は、時刻「160」に開始されている。
一方、サンプリング周期は「18」である。サンプリングの1回目は、時刻「15」に行われている。サンプリングの2回目は、時刻「33」に行われている。サンプリングの3回目は、時刻「51」に行われている。サンプリングの4回目は、時刻「69」に行われている。サンプリングの5回目は、時刻「87」に行われている。サンプリングの6回目は、時刻「105」に行われている。サンプリングの7回目は、時刻「123」に行われている。サンプリングの8回目は、時刻「141」に行われている。サンプリングの9回目は、時刻「159」に行われている。
対象プログラムには、関数a,b,c,dが含まれている。ループ内処理では、関数a,b,c,dが呼び出される。時刻「15」では関数cが実行されている。時刻「33」では関数bが実行されている。時刻「51」では関数aが実行されている。時刻「69」では関数dが実行されている。時刻「87」では関数cが実行されている。時刻「105」では関数cが実行されている。時刻「123」では関数bが実行されている。時刻「141」では関数aが実行されている。時刻「159」では関数cが実行されている。
しかし、グラフ21のようにサンプリング情報が示す関数をサンプリング時刻の昇順に並べても、ループ内処理の挙動を理解することは難しい。グラフ21が示す関数c、関数b、関数a、関数d、関数c、関数c、関数b、関数a、関数cという関数列は、ループ内での関数呼び出しの順序を表しているわけではない。そこで、第2の実施の形態の情報処理装置100は、グラフ21と異なる方法でサンプリング情報を可視化する。
図5は、サンプリング情報の第2の可視化例を示す図である。
情報処理装置100は、各サンプリング情報のサンプリング時刻を、その直前の先頭時刻からの時刻オフセットに変換する。サンプリング時刻の直前の先頭時刻は、サンプリング時点で実行されていたループ内処理の先頭の実行時刻である。サンプリング時点でN回目(Nは1以上の整数)のループ内処理が実行されていた場合、時刻オフセットは、サンプリング時刻とN回目のループ内処理の先頭時刻との差になる。
ここでは、図4と同様のサンプリング情報が取得されたものとする。サンプリング時刻「15」は、直前の先頭時刻「10」からの時刻オフセット「5」に変換される。サンプリング時刻「33」は、直前の先頭時刻「30」からの時刻オフセット「3」に変換される。サンプリング時刻「51」は、直前の先頭時刻「50」からの時刻オフセット「1」に変換される。サンプリング時刻「69」は、直前の先頭時刻「60」からの時刻オフセット「9」に変換される。サンプリング時刻「87」は、直前の先頭時刻「80」からの時刻オフセット「7」に変換される。
サンプリング時刻「105」は、直前の先頭時刻「100」からの時刻オフセット「5」に変換される。サンプリング時刻「123」は、直前の先頭時刻「120」からの時刻オフセット「3」に変換される。サンプリング時刻「141」は、直前の先頭時刻「140」からの時刻オフセット「1」に変換される。サンプリング時刻「159」は、直前の先頭時刻「150」からの時刻オフセット「9」に変換される。
情報処理装置100は、サンプリング情報を時刻オフセットの昇順に並び替える。これにより、収集されたサンプリング情報が、概ねループの先頭からの相対位置に応じて並べられることになる。情報処理装置100は、時刻オフセットを複数のオフセット区間に分割し、オフセット区間毎に関数a,b,c,dの検出回数をカウントする。その結果、情報処理装置100は、グラフ22をディスプレイ111に表示する。グラフ22は、オフセット区間毎に関数a,b,c,dの検出割合を表した積み上げ棒グラフである。
ここでは、時刻オフセットが幅「2」のオフセット区間に分割されるとする。0以上2未満のオフセット区間には、3番目と8番目のサンプリング情報が分類される。2以上4未満のオフセット区間には、2番目と7番目のサンプリング情報が分類される。4以上6未満のオフセット区間には、1番目と6番目のサンプリング情報が分類される。6以上8未満のオフセット区間には、5番目のサンプリング情報が分類される。8以上10未満のオフセット区間には、4番目と9番目のサンプリング情報が分類される。
よって、0以上2未満のオフセット区間では、関数aが100%の確率で実行されている。2以上4未満のオフセット区間では、関数bが100%の確率で実行されている。4以上6未満のオフセット区間では、関数cが100%の確率で実行されている。6以上8未満のオフセット区間では、関数cが100%の確率で実行されている。8以上10未満のオフセット区間では、関数cが50%の確率で実行され、関数dが50%の確率で実行されている。グラフ22によれば、1回のループ内処理における関数a,b,c,dの呼び出し順序や関数a,b,c,dの所要実行時間を推定することができる。
なお、サンプリング間隔は、例えば、50ミリ秒程度とすることが考えられる。また、オフセット区間の幅は、例えば、1ミリ秒程度とすることが考えられる。サンプリング間隔が長い場合であっても、繰り返し回数の多いループについては、実質的にサンプリング間隔を短くした場合と同等の分析結果を得ることができる。
図6は、サンプリング情報の第3の可視化例を示す図である。
ここでは、図4,5とは異なるサンプリング情報が取得され、そのサンプリング情報に基づいて図5の方法に従ってグラフが生成される場合を考える。図6に示すグラフ23は、図4,5とは異なるサンプリング情報に基づいて生成されたものである。
グラフ23は、グラフ22と同様に、オフセット区間毎に関数の検出割合を表した積み上げ棒グラフである。図6の例では、3つの関数の検出割合がグラフ23に表されている。ループの繰り返し回数を増やすことで、精度の高い時系列データを得ることができる。グラフ23から、例えば、想定外の関数呼び出しの存在を発見することができる。想定外の関数呼び出しが発見された場合、例えば、その関数呼び出しが発生しないように対象プログラムをデバッグすることが考えられる。また、グラフ23から、例えば、処理遅延の原因となっているボトルネック関数を発見することができる。ボトルネック関数が発見された場合、例えば、ボトルネック関数の所要実行時間が短くなるように対象プログラムをチューニングすることが考えられる。
次に、情報処理装置100の機能について説明する。
図7は、情報処理装置のソフトウェア例を示すブロック図である。
情報処理装置100のRAM102には、情報を一時的に記憶するバッファメモリ領域として先頭時刻バッファ131およびサンプリングバッファ132が確保される。情報処理装置100のHDD103には、対象プログラム133,134、関数判定テーブル135、先頭時刻テーブル136、サンプリングテーブル137、ループ実行テーブル138および可視化テーブル139が記憶される。また、HDD103には、プログラム編集プログラム141、サンプリング制御プログラム142、割り込みハンドラプログラム143および分析プログラム144が記憶される。HDD103に記憶されたプログラムおよびテーブルは、使用されるときに一時的にRAM102にロードされることがある。
先頭時刻バッファ131は、対象プログラム134の実行中に、ループ内処理の先頭のタイムスタンプを一時的に記憶するバッファメモリ領域である。先頭時刻バッファ131は、対象プログラム134によってRAM102に確保される。サンプリングバッファ132は、割り込み発生フラグがONである間に定期的に取得されるサンプリング情報を一時的に記憶するバッファメモリ領域である。サンプリングバッファ132は、サンプリング制御プログラム142によってRAM102に確保される。
対象プログラム133は、分析対象のプログラムであって、プログラミング言語を用いて記述されたソースコードである。対象プログラム133は、プログラム編集プログラム141によって編集されることがある。対象プログラム134は、分析対象のプログラムであって、機械可読なオブジェクトコードである。対象プログラム134は、例えば、対象プログラム133をコンパイルすることで生成される。
関数判定テーブル135は、命令アドレスと関数の対応関係を記憶する。関数判定テーブル135を参照することで、ある命令アドレスをもつ命令が何れの関数に含まれる命令であるか特定できる。関数判定テーブル135は、ユーザによって作成されてもよいし、プログラム編集プログラム141によって自動的に生成されてもよい。
先頭時刻テーブル136は、ループ内処理の繰り返し毎に対象プログラム134によって出力された、ループ内処理の先頭が実行された時刻である先頭時刻を記憶する。先頭時刻テーブル136には、先頭時刻バッファ131に一時的に蓄積された情報が転送される。サンプリングテーブル137は、CPU101の割り込み機能を利用して定期的に取得したサンプリング情報を記憶する。サンプリングテーブル137には、サンプリングバッファ132に一時的に蓄積された情報が転送される。
ループ実行テーブル138は、サンプリング情報を分析する過程で生成されるテーブルであり、時刻オフセットと関数の対応関係を記憶する。ループ実行テーブル138は、分析プログラム144によって生成される。可視化テーブル139は、分析結果として、グラフ22,23などのグラフの表示に用いられる可視化情報を記憶する。可視化テーブル139は、分析プログラム144によって生成される。
プログラム編集プログラム141は、対象プログラム134の実行時に先頭時刻が出力されるように、対象プログラム133または対象プログラム134を編集するプログラムである。プログラム編集プログラム141は、対象プログラム133を対象プログラム134に変換するコンパイラプログラムを含んでもよい。サンプリング制御プログラム142は、編集後の対象プログラム134を起動させると共に、対象プログラム134の実行中にサンプリングが行われるようCPU101を制御するプログラムである。
割り込みハンドラプログラム143は、CPU101が割り込みを発行したときに呼び出されるプログラムである。割り込みハンドラプログラム143が呼び出されると、対象プログラム134などのアプリケーションプログラムの実行が一時的に停止し、割り込みハンドラプログラム143が優先的に実行される。割り込みハンドラプログラム143は、OSに組み込まれていてもよい。割り込みハンドラプログラム143は、サンプリング情報を取得するサンプリングプログラムでもある。
分析プログラム144は、対象プログラム134の終了後にサンプリング情報を分析し、対象プログラム134の実行状態を可視化するプログラムである。分析プログラム144は、ディスプレイ111に情報を表示させる表示プログラムでもある。
プログラム編集プログラム141、サンプリング制御プログラム142、割り込みハンドラプログラム143および分析プログラム144は、CPU101によって実行される。これらプログラムの機能の詳細は後述する。なお、プログラム編集プログラム141、サンプリング制御プログラム142、割り込みハンドラプログラム143および分析プログラム144のうちの2以上のプログラムの機能が、1つのプログラムに統合されていてもよい。例えば、サンプリング制御プログラム142と分析プログラム144が1つに統合されてもよい。また、プログラム編集プログラム141とサンプリング制御プログラム142と分析プログラム144が1つに統合されてもよい。
図8は、情報処理装置で実行されるプロセスの例を示すブロック図である。
情報処理装置100は、プログラム編集部151、サンプリング制御部152、割り込みハンドラ153および分析部154を有する。
プログラム編集部151は、CPU101がプログラム編集プログラム141を実行することで生成されるプロセスに対応する。サンプリング制御部152は、CPU101がサンプリング制御プログラム142を実行することで生成されるプロセスに対応する。割り込みハンドラ153は、CPU101が割り込みハンドラプログラム143を実行することで生成されるプロセスに対応する。分析部154は、CPU101が分析プログラム144を実行することで生成されるプロセスに対応する。
以下では、プログラム編集部151、サンプリング制御部152、割り込みハンドラ153および分析部154を動作主体として、情報処理装置100の処理を説明することがある。ただし、動作主体を、プログラム編集プログラム141、サンプリング制御プログラム142、割り込みハンドラプログラム143および分析プログラム144を実行するCPU101と読み替えることもできる。
プログラム編集部151は、ループ内処理の繰り返し毎に先頭時刻が出力されるように対象プログラム133または対象プログラム134を編集する。
例えば、プログラム編集部151は、ソースコードである対象プログラム133をディスプレイ111に表示させ、ユーザからソースコードを編集する入力を受け付けると、入力に従って対象プログラム133を更新する。プログラム編集部151は、ユーザにより編集された対象プログラム133をコンパイルして、オブジェクトコードである対象プログラム134を生成してもよい。編集された対象プログラム133に特殊な定義命令文が含まれる場合、プログラム編集部151は、プリプロセッサ機能などを用いて特殊な定義命令文を展開してもよい。また、プログラム編集部151は、コンパイル時に所定のデバッグオプションが指定された場合のみ、当該特殊な定義命令文を展開してもよい。
または、プログラム編集部151は、ソースコードである対象プログラム133を分析して、自動的に対象プログラム133に命令文を挿入する。例えば、プログラム編集部151は、対象プログラム133からループを検出する。ループを示す命令文の形式は、対象プログラム133の記述に用いられたプログラミング言語に依存する。プログラム編集部151は、検出したループの前に、先頭時刻バッファ131をRAM102に確保する命令文を挿入する。プログラム編集部151は、検出したループに含まれる命令文の集合の先頭に、その時点のタイムスタンプレジスタ122のタイムスタンプ(先頭時刻)を先頭時刻バッファ131に格納する命令文を挿入する。また、プログラム編集部151は、検出したループの後に、先頭時刻バッファ131に記憶されたタイムスタンプを先頭時刻テーブル136に出力する命令文を挿入する。プログラム編集部151は、自動的に編集された対象プログラム133をコンパイルして対象プログラム134を生成してもよい。
または、プログラム編集部151は、オブジェクトコードである対象プログラム134を分析して、自動的に対象プログラム134に命令を挿入する。
また、プログラム編集部151は、関数判定テーブル135を生成する。例えば、プログラム編集部151は、ユーザからの入力に従って関数判定テーブル135を生成する。例えば、命令アドレスの範囲に対して、ユーザが関数名を指定する。または、プログラム編集部151は、対象プログラム134を分析して、自動的に関数判定テーブル135を生成する。例えば、プログラム編集部151は、オブジェクトコードである対象プログラム134から関数を検出し、検出した関数の名称と当該関数に含まれる命令群のアドレス範囲を関数判定テーブル135に登録する。
サンプリング制御部152は、プログラム編集部151による編集が反映された対象プログラム134を起動させ、対象プログラム134の実行中にサンプリングが行われるよう制御する。サンプリング制御部152は、対象プログラム134の起動前に、サンプリングバッファ132をRAM102に確保する。また、サンプリング制御部152は、サンプリング間隔に応じた初期値をカウントアップレジスタ124に書き込み、割り込み制御レジスタ123の割り込み発生フラグをONに設定する。サンプリング制御部152は、対象プログラム134の終了後、割り込み制御レジスタ123の割り込み発生フラグをOFFに設定する。また、サンプリング制御部152は、サンプリングバッファ132に記憶されたサンプリング情報をサンプリングテーブル137に出力する。
割り込みハンドラ153は、割り込み発行部125が割り込みを発行する毎に実行されるイベントハンドラである。割り込みハンドラ153は、命令アドレスレジスタ121から命令アドレスを読み出し、タイムスタンプレジスタ122からタイムスタンプを読み出す。また、割り込みハンドラ153は、情報処理装置100で実行されているOSから、割り込み直前に実行されていたプロセスの識別情報(プロセスID)を取得する。割り込みハンドラ153は、命令アドレスとタイムスタンプとプロセスIDとを含むサンプリング情報を、サンプリングバッファ132に格納する。
分析部154は、対象プログラム134の終了後、収集されたサンプリング情報を分析する。分析部154は、サンプリングテーブル137からサンプリング情報を読み出し、先頭時刻テーブル136に登録されたタイムスタンプに基づいて、各サンプリング情報のサンプリング時刻を時刻オフセットに変換する。また、分析部154は、関数判定テーブル135に登録された関数名とアドレス範囲に基づいて、各サンプリング情報に含まれる対象プログラム134の命令アドレスを関数名に変換する。分析部154は、時刻オフセットと関数名をループ実行テーブル138に登録する。
分析部154は、ループ実行テーブル138に登録された関数名を時刻オフセットの昇順に並べ替える。分析部154は、時刻オフセットを複数のオフセット区間に分割し、オフセット区間毎に当該オフセット区間で検出された関数を特定し、関数名をカウントすることで関数の検出割合を算出する。分析部154は、オフセット区間と関数の検出割合を含む可視化情報を可視化テーブル139に登録する。そして、分析部154は、可視化テーブル139に登録された可視化情報に基づいて、グラフ22,23のような積み上げ棒グラフを生成しディスプレイ111に表示させる。
図9は、対象プログラムの編集例を示す図である。
ここでは、理解を容易にするため、ソースコードである対象プログラム133を編集する場合を考える。このような対象プログラム133をコンパイルすることで、先頭時刻を出力する対象プログラム134を生成することができる。図9に示す命令文の挿入は、ユーザ入力によって行われてもよいし、プログラム編集部151が自動で行ってもよい。
図9に示す例では、対象プログラム133はループと関数a,b,c,dを含む。ここで言う「関数」には、メソッドや手続きなど他の名称で呼ばれる処理単位も含まれる。ループ内では、関数a,b,c,dが順に呼び出される。図9ではfor文を用いてループを表現しているが、while文など他の制御文を用いてループを表現してもよい。
編集後の対象プログラム133は、ループの前に、先頭時刻バッファ131を定義する命令文と、先頭時刻バッファ131に自身のプロセスIDを格納する命令文を含んでいる。また、編集後の対象プログラム133は、ループ内の先頭、すなわち、関数aを呼び出す関数呼び出し文の前に、先頭時刻バッファ131にタイムスタンプを格納する命令文を含んでいる。図9では、rdtsc()というAPI(Application Programming Language)を用いることで、タイムスタンプレジスタ122の値が参照されるものとしている。ループ内の先頭の命令文は、ループ内処理が繰り返される毎に実行される。図9の例では、先頭時刻バッファ131にタイムスタンプを格納する命令文は16回実行される。
また、編集後の対象プログラム133は、ループの後に、先頭時刻バッファ131に記憶されたデータをファイルに出力する命令文を含んでいる。以上の追加命令文は、ユーザまたはプログラム編集部151によって対象プログラム133に挿入された命令文であり、オリジナルの対象プログラム133に含まれていなかった命令文である。
図10は、サンプリングテーブルの例を示す図である。
サンプリングテーブル137は、プロセスID、タイムスタンプおよび命令アドレスの項目を含む。プロセスIDの項目には、割り込みの直前に実行されていたプロセスの識別情報が登録される。第2の実施の形態では、プロセスIDとして主に、対象プログラム134から起動されたプロセスのプロセスIDを想定している。タイムスタンプの項目には、サンプリング時刻を示すタイムスタンプが登録される。命令アドレスの項目には、割り込みの直前に実行されていた命令の命令アドレスが登録される。
図11は、先頭時刻テーブルの例を示す図である。
先頭時刻テーブル136は、プロセスIDと複数のタイムスタンプを列挙した配列である。先頭時刻テーブル136のプロセスIDは、先頭時刻テーブル136のタイムスタンプを出力したプロセスの識別情報、すなわち、対象プログラム134から起動されたプロセスの識別情報である。先頭時刻テーブル136のタイムスタンプは、対象プログラム134によって出力された、ループ内処理の先頭における先頭時刻を示す。
図12は、関数判定テーブルの例を示す図である。
関数判定テーブル135は、プログラムID、関数名およびアドレス範囲の項目を有する。プログラムIDの項目には、対象プログラム134の識別情報が登録される。プログラムIDは、プロセスIDと同じでもよいし異なってもよい。後者の場合、例えば、情報処理装置100で実行されているOSからプログラムIDとプロセスIDの対応関係を取得することで、プログラムIDとプロセスIDを紐付けることができる。
関数名の項目には、対象プログラム134に含まれる関数の名称が登録される。関数名は、対象プログラム133または対象プログラム134を分析することで自動的に抽出されてもよい。アドレス範囲の項目には、関数に含まれる命令群の命令アドレスの範囲、すなわち、関数の先頭の命令アドレスと関数の末尾の命令アドレスが登録される。命令アドレスは、オブジェクトコードである対象プログラム134内のアドレスである。
図13は、ループ実行テーブルの例を示す図である。
ループ実行テーブル138には、サンプリングテーブル137のレコード(サンプリング情報)に対応するレコードが登録される。ループ実行テーブル138は、プロセスID、時刻オフセットおよび関数名の項目を有する。プロセスIDの項目には、サンプリングテーブル137と同様のプロセスIDが登録される。時刻オフセットの項目には、サンプリング情報のタイムスタンプから変換された時刻オフセットが登録される。関数名の項目には、サンプリング情報の命令アドレスが属する関数の関数名が登録される。
すなわち、サンプリングテーブル137のタイムスタンプが、先頭時刻テーブル136に基づいて時刻オフセットに変換される。サンプリングテーブル137に複数のプロセスのサンプリング情報が混在している場合、分析部154は、所望のプロセスについてのサンプリング情報をサンプリングテーブル137から抽出してもよい。サンプリングテーブル137の情報と先頭時刻テーブル136の情報とは、プロセスIDによって紐付けることができる。複数の対象プログラムに対応する複数の先頭時刻テーブルが存在する場合、分析部154は、プロセスIDに基づいて、複数の先頭時刻テーブルのうち所望のプロセスについての先頭時刻テーブルを選択するようにしてもよい。
また、サンプリングテーブル137の命令アドレスが、関数判定テーブル135に基づいて関数名に変換される。サンプリングテーブル137の情報と関数判定テーブル135の情報とは、プロセスIDとプログラムIDによって紐付けることができる。複数の対象プログラムに対応する複数の関数判定テーブルが存在する場合、分析部154は、プログラムIDに基づいて、複数の関数判定テーブルのうち所望の対象プログラムについての関数判定テーブルを選択するようにしてもよい。なお、ループ実行テーブル138に含まれる複数のレコードは、時刻オフセットの昇順にソートされる。
図14は、可視化テーブルの例を示す図である。
可視化テーブル139は、プロセスID、オフセット区間および関数割合の項目を有する。プロセスIDの項目には、対象プログラム134から起動されたプロセスのプロセスIDが登録される。オフセット区間の項目には、時刻オフセットの範囲、すなわち、オフセット区間の始点の時刻オフセットと終点の時刻オフセットが登録される。図14の例では、0以上10未満の時刻オフセットが、0以上2未満、2以上4未満、4以上6未満、6以上8未満、8以上10未満の5個のオフセット区間に分割されている。関数割合の項目には、実行が検出された関数の関数名と当該関数の検出割合とが登録される。関数割合は、ループ実行テーブル138の関数名をカウントすることで算出できる。なお、可視化テーブル139に含まれる複数のレコードは、オフセット区間の昇順にソートされる。
次に、情報処理装置100の処理手順について説明する。
図15は、サンプリング制御の手順例を示すフローチャートである。
サンプリング制御の処理は、プログラム編集プログラム141およびサンプリング制御プログラム142を実行することで実現される。
(S10)ここでは、プログラム編集部151がソースコードである対象プログラム133を編集する場合を考える。プログラム編集部151は、対象プログラム133を分析し、対象プログラム133に含まれるループを検出する。ループは、例えば、for文やwhile文を用いて対象プログラム133に記載されている。ただし、対象プログラム133の中から、分析対象のループをユーザが選択してもよい。
(S11)プログラム編集部151は、ステップS10で検出したループの前に、先頭時刻バッファ131を定義する命令文(領域確保の命令文)を挿入する。例えば、先頭時刻バッファ131を示す変数を宣言するようにする。また、プログラム編集部151は、検出したループの前に、先頭時刻バッファ131にプロセスIDを追記する命令文を挿入する。ただし、ループ前への命令文の挿入は、ユーザが手作業で行ってもよい。
(S12)プログラム編集部151は、ステップS10で検出したループ内の先頭位置に、タイムスタンプレジスタ122のタイムスタンプを先頭時刻バッファ131に追記する命令文(時刻記録の命令文)を挿入する。ループ内の先頭位置の命令文は、ループ内処理の繰り返し毎に最初に実行される命令文である。ただし、先頭時刻を記録する命令文の挿入は、ユーザが手作業で行ってもよい。
(S13)プログラム編集部151は、ステップS10で検出したループの後に、先頭時刻バッファ131に記憶されたデータをHDD103上のファイルに書き出す命令文(ファイル出力の命令文)を挿入する。出力先ファイルは、先頭時刻テーブル136である。ただし、ファイル出力の命令文の挿入は、ユーザが手作業で行ってもよい。
プログラム編集部151は、例えば、上記のようにして編集された対象プログラム133をコンパイルすることで、対象プログラム134を生成する。
(S14)プログラム編集部151は、対象プログラム134を分析し、対象プログラム134に含まれる複数の関数を検出する。ただし、対象プログラム134の中から、分析対象の関数をユーザが選択するようにしてもよい。
(S15)プログラム編集部151は、ステップS14で検出した複数の関数それぞれについて、対象プログラム134の中で当該関数が存在する位置を示すアドレス範囲を算出する。プログラム編集部151は、対象プログラム134のプログラムIDと関数名とアドレス範囲を、関数判定テーブル135に登録する。ただし、関数名は、ソースコードである対象プログラム133を参照して抽出するようにしてもよい。また、関数名とアドレス範囲の対応付けを、ユーザが手作業で行ってもよい。
以上のようにして対象プログラム134と関数判定テーブル135が用意されると、サンプリング情報の収集を開始することが可能となる。このとき、ユーザがサンプリング制御部152を起動するコマンドを情報処理装置100に入力してもよい。
(S16)サンプリング制御部152は、CPU101のカウントアップレジスタ124を初期化する。すなわち、サンプリング制御部152は、初期値をカウントアップレジスタ124に書き込む。初期値は、CPU101のアーキテクチャや動作クロック周波数、所望のサンプリング間隔などを考慮して予め決めておく。初期値が小さいほど、カウントアップレジスタ124がオーバーフローするまでの時間が長くなり、サンプリング間隔が大きくなる。初期値が大きいほど、カウントアップレジスタ124がオーバーフローするまでの時間が短くなり、サンプリング間隔が小さくなる。
(S17)サンプリング制御部152は、サンプリングバッファ132をRAM102に確保する。また、サンプリング制御部152は、CPU101の割り込み制御レジスタ123に記憶された割り込み発生フラグを、ON(例えば、「1」)に書き換える。これにより、割り込み発行部125が定期的に割り込みを発行することになる。
(S18)サンプリング制御部152は、CPU101に、ステップS11〜S13の編集が反映された対象プログラム134を起動させる。
(S19)サンプリング制御部152は、対象プログラム134の終了を検出する。対象プログラム134の終了は、例えば、対象プログラム134から生成されたプロセスが消滅したことによって検出することができる。
(S20)サンプリング制御部152は、CPU101の割り込み制御レジスタ123に記憶された割り込み発生フラグを、OFF(例えば、「0」)に書き換える。これにより、割り込み発行部125は割り込みの発行を停止することになる。
(S21)サンプリング制御部152は、ステップS17とS20の間にサンプリングバッファ132に格納されたデータを、HDD103上のファイルに書き出す。出力先ファイルは、サンプリングテーブル137である。
図16は、割り込み処理の手順例を示すフローチャートである。
割り込み発行部125が割り込みを発行する毎に、図16の処理が実行される。割り込み処理は、割り込みハンドラプログラム143を実行することで実現される。
(S30)割り込みハンドラ153は、カウントアップレジスタ124でオーバーフローが発生したことによる割り込みを検出する。
(S31)割り込みハンドラ153は、情報処理装置100で実行されているOSから、割り込みの直前に実行されていたプロセスのプロセスIDを取得する。
(S32)割り込みハンドラ153は、CPU101の命令アドレスレジスタ121から命令アドレスを取得する。また、割り込みハンドラ153は、CPU101のタイムスタンプレジスタ122からタイムスタンプを取得する。
(S33)割り込みハンドラ153は、取得したプロセスIDと命令アドレスとタイムスタンプとを含むサンプリング情報を、サンプリングバッファ132に追記する。
(S34)割り込みハンドラ153は、CPU101のカウントアップレジスタ124を初期化する。すなわち、割り込みハンドラ153は、初期値をカウントアップレジスタ124に書き込む。書き込む初期値は、前述のステップS16と同じでよい。
図17は、ループ処理の手順例を示すフローチャートである。
CPU101が対象プログラム134を起動することで、図17の処理が実行される。ループ処理は、対象プログラム134を実行することで実現される。
(S40)命令実行部126は、対象プログラム134に従い、先頭時刻バッファ131をRAM102に確保する。また、命令実行部126は、対象プログラム134に従い、自身のプロセスIDを取得して先頭時刻バッファ131に追記する。
(S41)命令実行部126は、対象プログラム134に従い、ループ内処理の繰り返しを継続するか判定する。例えば、命令実行部126は、ループ変数の値が閾値未満であることなどの判定条件を満たしているか確認し、判定条件を満たす場合に繰り返しを継続すると判定し、判定条件を満たさない場合に繰り返しを継続しないと判定する。
(S42)命令実行部126は、ステップS41において、ループ内処理の繰り返しを継続しない(ループから抜ける)と判定したか判断する。ループから抜ける場合はステップS46に処理が進み、ループから抜けない場合はステップS43に処理が進む。
(S43)命令実行部126は、対象プログラム134に従い、CPU101のタイムスタンプレジスタ122からタイムスタンプを取得する。
(S44)命令実行部126は、対象プログラム134に従い、ステップS43で取得したタイムスタンプを先頭時刻バッファ131に追記する。
(S45)命令実行部126は、対象プログラム134に従い、ステップS44より後の命令をループの末尾まで実行する。そして、ステップS41に処理が進む。
(S46)命令実行部126は、対象プログラム134に従い、先頭時刻バッファ131に記憶されているデータを、HDD103上のファイルに書き出す。出力先ファイルは、先頭時刻テーブル136である。
図18は、ループ分析の手順例を示すフローチャートである。
上記の図15のサンプリング制御が終わった後、図18の処理が実行される。ループ分析は、分析プログラム144を実行することで実現される。
(S50)分析部154は、先頭時刻テーブル136に含まれるタイムスタンプから、分析対象のループが実行されていた時間範囲を算出する。例えば、分析部154は、先頭時刻テーブル136に含まれるタイムスタンプのうち、最小のタイムスタンプを時間範囲の先頭とし、最大のタイムスタンプを時間範囲の末尾とする。
(S51)分析部154は、サンプリングテーブル137に含まれるレコード(サンプリング情報)を1つ選択する。なお、分析部154は、あるサンプリング情報に含まれるプロセスIDが所望のプロセス(対象プログラム134に関するプロセス)のプロセスIDでない場合、当該サンプリング情報を無視してもよい。
(S52)分析部154は、ステップS51で選択したレコードのタイムスタンプ(サンプリング時刻)が、ステップS50で算出した時間範囲に入っているか判断する。サンプリング時刻が時間範囲に入っている場合はステップS53に処理が進み、サンプリング時刻が時間範囲に入っていない場合はステップS57に処理が進む。
(S53)分析部154は、先頭時刻テーブル136から、サンプリング時刻の直前の先頭時刻を検索する。すなわち、分析部154は、先頭時刻テーブル136から、サンプリング時刻より小さいタイムスタンプの中で最大のものを検索する。なお、複数の対象プログラムに対応する複数の先頭時刻テーブルが存在する場合、分析部154は、所望の対象プログラムに対応する先頭時刻テーブル以外のテーブルを無視してもよい。
(S54)分析部154は、ステップS53で検索した先頭時刻を用いて、サンプリング時刻を時刻オフセットに変換する。すなわち、分析部154は、サンプリング時刻から先頭時刻を引いた値(両者の差を示す0以上の値)を時刻オフセットとする。
(S55)分析部154は、関数判定テーブル135から、ステップS51で選択したサンプリング情報の命令アドレスが属するアドレス範囲を検索し、検索されたアドレス範囲に対応する関数名を取得する。なお、分析部154は、関数判定テーブル135に含まれるレコードのうち、対象プログラム134のプログラムID以外のプログラムIDをもつレコードを無視してもよい。
(S56)分析部154は、サンプリング情報の命令アドレスを関数名に変換する。分析部154は、対象プログラム134に対応するプロセスIDと時刻オフセットと関数名とを含むレコードを、ループ実行テーブル138に登録する。
(S57)分析部154は、ステップS51においてサンプリングテーブル137に含まれる全てのサンプリング情報を選択したか判断する。全てのサンプリング情報を選択した場合はステップS58に処理が進み、それ以外の場合はステップS51に処理が進む。
(S58)分析部154は、ループ実行テーブル138に含まれるレコードを、時刻オフセットの昇順にソートする。
なお、分析部154は、プロセスIDやプログラムIDを用いて、関数判定テーブル135、先頭時刻テーブル136およびサンプリングテーブル137から不要なレコードをフィルタリングしてもよい。これにより、CPU101が複数のプロセスを並行に実行する場合であっても、着目するループに限定して分析することができる。
図19は、ループ分析の手順例を示すフローチャート(続き)である。
(S59)分析部154は、時刻オフセットを複数のオフセット区間に分割する。サンプリング間隔やオフセット区間は、予め決めておく。例えば、サンプリング間隔を50ミリ秒、オフセット区間の幅を1ミリ秒とする。
(S60)分析部154は、オフセット区間を1つ選択する。
(S61)分析部154は、ループ実行テーブル138から、ステップS60で選択したオフセット区間に時刻オフセットが入っているレコードを検索する。分析部154は、検索されたレコードの中で各関数名の出現回数をカウントする。
(S62)分析部154は、ステップS61でカウントした出現回数に基づいて、各関数名の出現割合を算出する。例えば、分析部154は、各関数名の出現回数を当該オフセット区間に属するレコードの総数で割る。分析部154は、対象プログラム134に対応するプロセスIDとオフセット区間と各関数名の出現割合とを含むレコードを、可視化テーブル139に登録する。
(S63)分析部154は、ステップS60において全てのオフセット区間を選択したか判断する。全てのオフセット区間を選択した場合はステップS64に進み、未選択のオフセット区間がある場合はステップS60に処理が進む。
(S64)分析部154は、可視化テーブル139のオフセット区間を横軸とし、可視化テーブル139の関数割合を縦軸とするグラフ領域を生成する。横軸に並べる複数のオフセット区間は、時刻オフセットの昇順にソートされる。例えば、横軸の最も左側に位置するオフセット区間は、時刻オフセット=0を含むオフセット区間であり、ループの先頭付近の実行状態に対応する。また、例えば、横軸の最も右側に位置するオフセット区間は、ループの末尾付近の実行状態に対応する。
(S65)分析部154は、ステップS64で生成したグラフ領域内において、オフセット区間毎に各関数名の出現割合を表した積み上げ棒グラフを生成する。分析部154は、積み上げ棒グラフをディスプレイ111に表示させる。積み上げ棒グラフは、例えば、棒の高さの合計を100%とし、各関数の実行割合に応じて各関数に棒の高さを割り当てたものである。これにより、ループの先頭から末尾に向かって、最も実行割合の大きい関数の時系列変化を把握することが容易となる。
第2の実施の形態の情報処理装置100によれば、ループ内処理の繰り返し毎に先頭時刻が出力されるように対象プログラム134が生成され、対象プログラム134が起動される。対象プログラム134の実行中、CPU101の割り込み機能を用いて一定周期でサンプリング情報が収集される。先頭時刻に基づいてサンプリング時刻が時刻オフセットに変換されると共に、サンプリング情報に含まれる命令アドレスから実行中の関数が判定される。そして、時刻オフセットと実行中の関数の対応関係が表示される。
これにより、単にサンプリング時刻の順に関数名を列挙する場合よりも、ループ内での関数の呼び出し順序などの時系列性を適切に表現することができる。また、サンプリング時刻順でなく時刻オフセット順にサンプリング情報を並べ替えることで、1回のループ内処理の実行状態を短いサンプリング間隔でサンプリングした場合と同等の分析結果を表示できる。よって、サンプリング間隔が長くてもループ内処理の分析が容易となる。また、サンプリング間隔を長くすることで、CPU101の能力やRAM102の容量などの計算リソースを節約できる。また、サンプリング自体が対象プログラム134の挙動に与える影響を低減でき、対象プログラム134の挙動の分析精度が向上する。
10 情報処理装置
11 記憶部
12 表示制御部
13 対象プログラム
13a ループ
13b,13c,13d 関数
14 先頭時刻情報
14a,14b,14c,14d 先頭時刻
15a,15b,15c サンプリングログ
16a,16b,16c サンプリング時刻
17a,17b,17c 時刻差分
18 時系列情報
18a,18b,18c 時刻差分区間

Claims (6)

  1. 複数の関数を用いた処理を繰り返すループを含む対象プログラムを実行したときに算出された複数の先頭時刻を示す情報であって、前記複数の先頭時刻は前記処理の繰り返し毎における前記処理の先頭の実行時刻を示している先頭時刻情報と、
    前記対象プログラムを実行したときに間欠的なサンプリングによって生成されたログであって、それぞれがサンプリング時刻と前記複数の関数のうち実行中の関数の特定に用いられる状態情報とを含む複数のサンプリングログと、
    を記憶する記憶部と、
    前記複数のサンプリングログそれぞれの前記サンプリング時刻を、前記複数の先頭時刻のうち当該サンプリング時刻の直前の先頭時刻からの時刻差分に変換し、
    前記時刻差分に基づいて前記複数のサンプリングログを複数の時刻差分区間に分類し、各時刻差分区間について、当該時刻差分区間に属するサンプリングログの前記状態情報に基づいて前記複数の関数それぞれの実行が検出された回数をカウントし、
    カウントした前記回数を用いて、前記時刻差分に従って並べた前記複数の時刻差分区間と前記複数の関数の実行との対応関係を示す時系列情報を表示させる、
    表示制御部と、
    を有する情報処理装置。
  2. 前記表示制御部は、前記複数の時刻差分区間それぞれについて前記複数の関数の実行割合を算出し、前記時系列情報として前記実行割合の時系列変化を表示させる、
    請求項1記載の情報処理装置。
  3. 前記表示制御部は、前記処理の繰り返し毎に前記処理の先頭の実行時刻を出力する命令が挿入された前記対象プログラムを起動させることで、前記先頭時刻情報を生成する、
    請求項1記載の情報処理装置。
  4. 前記表示制御部は、前記対象プログラムを起動させ、前記対象プログラムの実行中に前記間欠的なサンプリングを行うことで前記複数のサンプリングログを生成する、
    請求項1記載の情報処理装置。
  5. 情報処理装置が実行するプログラム実行状態表示方法であって、
    複数の関数を用いた処理を繰り返すループを含む対象プログラムを実行したときに算出された複数の先頭時刻を示す情報であって、前記複数の先頭時刻は前記処理の繰り返し毎における前記処理の先頭の実行時刻を示している先頭時刻情報を取得し、
    前記対象プログラムを実行したときに間欠的なサンプリングによって生成されたログであって、それぞれがサンプリング時刻と前記複数の関数のうち実行中の関数の特定に用いられる状態情報とを含む複数のサンプリングログを取得し、
    前記複数のサンプリングログそれぞれの前記サンプリング時刻を、前記複数の先頭時刻のうち当該サンプリング時刻の直前の先頭時刻からの時刻差分に変換し、
    前記時刻差分に基づいて前記複数のサンプリングログを複数の時刻差分区間に分類し、各時刻差分区間について、当該時刻差分区間に属するサンプリングログの前記状態情報に基づいて前記複数の関数それぞれの実行が検出された回数をカウントし、
    カウントした前記回数を用いて、前記時刻差分に従って並べた前記複数の時刻差分区間と前記複数の関数の実行との対応関係を示す時系列情報を表示させる、
    プログラム実行状態表示方法。
  6. コンピュータに、
    複数の関数を用いた処理を繰り返すループを含む対象プログラムを実行したときに算出された複数の先頭時刻を示す情報であって、前記複数の先頭時刻は前記処理の繰り返し毎における前記処理の先頭の実行時刻を示している先頭時刻情報を取得し、
    前記対象プログラムを実行したときに間欠的なサンプリングによって生成されたログであって、それぞれがサンプリング時刻と前記複数の関数のうち実行中の関数の特定に用いられる状態情報とを含む複数のサンプリングログを取得し、
    前記複数のサンプリングログそれぞれの前記サンプリング時刻を、前記複数の先頭時刻のうち当該サンプリング時刻の直前の先頭時刻からの時刻差分に変換し、
    前記時刻差分に基づいて前記複数のサンプリングログを複数の時刻差分区間に分類し、各時刻差分区間について、当該時刻差分区間に属するサンプリングログの前記状態情報に基づいて前記複数の関数それぞれの実行が検出された回数をカウントし、
    カウントした前記回数を用いて、前記時刻差分に従って並べた前記複数の時刻差分区間と前記複数の関数の実行との対応関係を示す時系列情報を表示させる、
    処理を実行させるプログラム実行状態表示プログラム。
JP2016131474A 2016-07-01 2016-07-01 情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラム Active JP6691295B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016131474A JP6691295B2 (ja) 2016-07-01 2016-07-01 情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラム
US15/607,711 US10331538B2 (en) 2016-07-01 2017-05-30 Information processing apparatus and program execution status display method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016131474A JP6691295B2 (ja) 2016-07-01 2016-07-01 情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラム

Publications (2)

Publication Number Publication Date
JP2018005546A true JP2018005546A (ja) 2018-01-11
JP6691295B2 JP6691295B2 (ja) 2020-04-28

Family

ID=60807425

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016131474A Active JP6691295B2 (ja) 2016-07-01 2016-07-01 情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラム

Country Status (2)

Country Link
US (1) US10331538B2 (ja)
JP (1) JP6691295B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113515448A (zh) * 2021-05-18 2021-10-19 中国工商银行股份有限公司 应用程序启动时间信息的获取方法及装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10067533B1 (en) * 2018-03-27 2018-09-04 Precision Mounting Technologies Ltd. Locking dock for portable electronic device
US10715882B2 (en) * 2018-06-29 2020-07-14 Intel Corporation Timing synchronization between a content source and a display panel
JP6871218B2 (ja) * 2018-10-12 2021-05-12 ファナック株式会社 加工情報記録装置、加工情報記録方法及びプログラム
US10915437B1 (en) * 2019-06-26 2021-02-09 Amazon Technologies, Inc. Framework for performing load testing and profiling of services

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3838804B2 (ja) 1999-03-01 2006-10-25 富士通株式会社 解析装置および記録媒体
JP2005242559A (ja) 2004-02-25 2005-09-08 Nec Corp 性能解析用プログラム及び記録媒体
JP5974856B2 (ja) 2012-11-27 2016-08-23 富士通株式会社 サンプリングプログラム、サンプリング方法及び情報処理装置
JP6079317B2 (ja) * 2013-03-05 2017-02-15 富士通株式会社 仮想計算機システム及びその管理方法並びに仮想計算機システムの管理プログラム
JP6544054B2 (ja) * 2015-06-02 2019-07-17 富士通株式会社 情報処理装置、実行情報記録プログラムおよび実行情報記録方法
JP6672808B2 (ja) * 2016-01-13 2020-03-25 富士通株式会社 情報処理装置、実行時間補正方法、および実行時間補正プログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113515448A (zh) * 2021-05-18 2021-10-19 中国工商银行股份有限公司 应用程序启动时间信息的获取方法及装置

Also Published As

Publication number Publication date
US10331538B2 (en) 2019-06-25
US20180004621A1 (en) 2018-01-04
JP6691295B2 (ja) 2020-04-28

Similar Documents

Publication Publication Date Title
JP6691295B2 (ja) 情報処理装置、プログラム実行状態表示方法およびプログラム実行状態表示プログラム
US7739662B2 (en) Methods and apparatus to analyze processor systems
JP5648584B2 (ja) ソフトウェアアプリケーションのプロファイリング方法及び装置
US20230281104A1 (en) Methods and apparatus to perform instruction-level graphics processing unit (gpu) profiling based on binary instrumentation
JP5520371B2 (ja) 多重仮想マシンのためのサポートを有する、トレース・データの時間ベース・コンテキスト・サンプリング
CN106227671B (zh) 程序运行性能分析方法及装置
US20150347268A1 (en) Bottleneck Detector Application Programming Interface
US20100017583A1 (en) Call Stack Sampling for a Multi-Processor System
JP2015507303A (ja) コード網羅率決定方法およびシステム
US20150169435A1 (en) Method and apparatus for mining test coverage data
US20150033233A1 (en) Job delay detection method and information processing apparatus
US10867362B2 (en) Methods and apparatus to improve operation of a graphics processing unit
US20150220420A1 (en) Performance evaluation and tuning systems and methods
US20070150870A1 (en) Method and apparatus for context oriented computer program tracing and visualization
KR102161192B1 (ko) 코어 트레이스로부터 데이터 마이닝을 하기 위한 방법 및 장치
Schulz Extracting critical path graphs from MPI applications
CN111104104A (zh) 函数调用时间和统计结果可视化的方法、装置及可读介质
US20090083716A1 (en) Profiling method and program
US9292296B2 (en) Code optimization based on information of readably converted executed instruction groups represented in address file
CN112988544A (zh) 操作系统性能瓶颈的分析方法、系统、设备和存储介质
CN107451038B (zh) 硬件事件采集方法、处理器和计算系统
JP6544054B2 (ja) 情報処理装置、実行情報記録プログラムおよび実行情報記録方法
JP6075204B2 (ja) 性能情報収集プログラム、情報処理装置及び性能情報収集方法
JP2016224814A (ja) 性能情報生成プログラム、性能情報生成方法及び情報処理装置
US20170192878A1 (en) Separating Test Coverage In Software Processes Using Shared Memory

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190409

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20190416

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20190416

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200228

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200310

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200323

R150 Certificate of patent or registration of utility model

Ref document number: 6691295

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150