(57)【要約】【課題】より精度良くアイドル原因となる関数を特定することが可能となる情報処理装置等を提供する。【解決手段】プログラムを実行する演算処理部と、実行中の関数を示す情報である関数情報を所定間隔で採取するとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を記憶部に記憶する関数情報採取部と、前記演算処理部がアイドル状態に移行した場合、移行時刻を取得して前記記憶部に記憶する移行取得部と、前記記憶部に記憶した移行時刻と、前記記憶部に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出する抽出部と、該抽出部が抽出した各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定する特定部とを備える。【選択図】図２
2015088068.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行する演算処理部と、
実行中の関数を示す情報である関数情報を所定間隔で採取するとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を記憶部に記憶する関数情報採取部と、
前記演算処理部がアイドル状態に移行した場合、移行時刻を取得して前記記憶部に記憶する移行取得部と、
前記記憶部に記憶した移行時刻と、前記記憶部に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出する抽出部と、
該抽出部が抽出した各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定する特定部と
を備える情報処理装置。
【請求項２】
前記特定部は、
複数の差分の時間帯別に、各関数の差分を分類する分類部と、
差分が短い時間帯に分類された数に基づき、前記アイドル原因となる関数を特定する関数特定部と
を備える請求項１に記載の情報処理装置。
【請求項３】
前記関数特定部は、
最も短い時間帯に分類された数が最も大きい関数を、前記アイドル原因となる関数として特定する
請求項２に記載の情報処理装置。
【請求項４】
プログラムを実行する演算処理部と、記憶部とを有する情報処理装置の解析方法において、
前記情報処理装置が、
実行中の関数を示す情報である関数情報を所定間隔で採取するとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を前記記憶部に記憶し、
前記演算処理部がアイドル状態に移行した場合、移行時刻を取得して前記記憶部に記憶し、
前記記憶部に記憶した移行時刻と、前記記憶部に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出する抽出部と、
抽出された各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定する情報処理装置の解析方法。
【請求項５】
プログラムを実行する演算処理部と、記憶部とを有する情報処理装置の解析プログラムにおいて、
前記情報処理装置に、
実行中の関数を示す情報である関数情報を所定間隔で採取させるとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を前記記憶部に記憶させ、
前記演算処理部がアイドル状態に移行した場合、移行時刻を取得して前記記憶部に記憶させ、
前記記憶部に記憶した移行時刻と、前記記憶部に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出させ、
抽出された各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定させる情報処理装置の解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の解析方法および情報処理装置の解析プログラムに関する。
【背景技術】
【０００２】
プログラムを実行した情報処理装置から実行中の処理内容を示す情報などを収集し、収集した情報について集計処理を行なって得た集計結果に基づいて、実行した当該プログラムの動作の確認を行なう、いわゆるプログラムの性能分析が従来行なわれている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−１６４８３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、従来のプロファイラによる解析では、実行時間に占めるアイドル時間の割合が高くなっているという事象しか把握できなかった。このため、従来の技術においては、プログラムの実行がなされないため、性能への影響を与えるアイドル状態を作り出すアイドル原因となる関数を的確に特定できないという問題があった。
【０００５】
一つの側面では、本発明はより精度良くアイドル原因となる関数を特定することが可能となる情報処理装置等を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本願に開示する情報処理装置は、プログラムを実行する演算処理部と、実行中の関数を示す情報である関数情報を所定間隔で採取するとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を記憶部に記憶する関数情報採取部と、前記演算処理部がアイドル状態に移行した場合、移行時刻を取得して前記記憶部に記憶する移行取得部と、前記記憶部に記憶した移行時刻と、前記記憶部に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出する抽出部と、該抽出部が抽出した各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定する特定部とを備える。
【発明の効果】
【０００７】
一つの側面では、より精度良くアイドル原因となる関数を特定することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】情報処理装置のハードウェア群を示すブロック図である。
【図２】サンプリング処理のイメージを示す説明図である。
【図３】サンプリングテーブルのレコードレイアウトを示す説明図である。
【図４】移行時刻テーブルのレコードレイアウトを示す説明図である。
【図５】差分テーブルのレコードレイアウトを示す説明図である。
【図６】統計テーブルのレコードレイアウトを示す説明図である。
【図７】サンプリングテーブルの生成処理の手順を示すフローチャートである。
【図８】移行時刻の取得処理手順を示すフローチャートである。
【図９】差分及び関数の取得処理手順を示すフローチャートである。
【図１０】アイドル原因となる可能性の高い関数の抽出処理手順を示すフローチャートである。
【図１１】サンプリング結果を示す説明図である。
【図１２】統計テーブルに記憶されたデータの変化を示すグラフである。
【図１３】実施の形態２に係る関数の特定処理手順を示すフローチャートである。
【図１４】実施の形態２に係る関数の特定処理手順を示すフローチャートである。
【図１５】実施の形態３に係るコンピュータのハードウェア群を示すブロック図である。
【図１６】サンプリング処理のイメージを示す説明図である。
【図１７】終了時刻テーブルのレコードレイアウトを示す説明図である。
【図１８】終了差分テーブルのレコードレイアウトを示す説明図である。
【図１９】移行統計テーブルのレコードレイアウトを示す説明図である。
【図２０】終了統計テーブルのレコードレイアウトを示す説明図である。
【図２１】実施の形態２に係る統計テーブルのレコードレイアウトを示す説明図である。
【図２２】終了時刻の取得処理手順を示すフローチャートである。
【図２３】終了時刻に係る差分及び関数の抽出処理手順を示すフローチャートである。
【図２４】アイドル原因となる可能性の高い関数の抽出処理手順を示すフローチャートである。
【図２５】重み付け処理の手順を示すフローチャートである。
【図２６】上述した形態のコンピュータの動作を示す機能ブロック図である。
【図２７】実施の形態５に係るコンピュータのハードウェア群を示すブロック図である。
【発明を実施するための形態】
【０００９】
実施の形態１
以下実施の形態を、図面を参照して説明する。図１は情報処理装置１のハードウェア群を示すブロック図である。情報処理装置１は解析対象となるパーソナルコンピュータ、サーバコンピュータ、携帯電話機、ゲーム機、ブックリーダまたはＰＤＡ（Personal Digital Assistant）等である。以下では情報処理装置１をコンピュータ１と読み替えて説明する。コンピュータ１は制御部としてのＣＰＵ（Central Processing Unit）１１、ＲＡＭ(Random Access Memory)１２、入力部１３、表示部１４、時計部１８、記憶部１５、及び通信部１６等を含む。ＣＰＵ１１は、バス１７を介してハードウェア各部と接続されている。ＣＰＵ１１は記憶部１５に記憶された制御プログラム１５Ｐに従いハードウェア各部を制御する。ＲＡＭ１２は例えばＳＲＡＭ（Static RAM）、ＤＲＡＭ(Dynamic RAM)、フラッシュメモリ等である。ＲＡＭ１２は、記憶部としても機能し、ＣＰＵ１１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１０】
入力部１３はマウス、キーボードまたはタッチパネル等の入力デバイスであり、受け付けた操作情報をＣＰＵ１１へ出力する。表示部１４は液晶ディスプレイまたは有機ＥＬディスプレイ等であり、ＣＰＵ１１の指示に従い各種情報を表示する。通信部１６は通信モジュールであり、通信網を介して他のコンピュータ（図示せず）との間で情報の送受信を行う。
【００１１】
時計部１８は時刻の情報をＣＰＵ１１へ出力する。記憶部１５はハードディスクまたは大容量メモリであり、制御プログラム１５Ｐ、ＯＳ(Operating System)１５１、ユーザプログラム１５３、サンプリングテーブル１５４、移行時刻テーブル１５５、差分テーブル１５６及び統計テーブル１５７等を記憶している。ＣＰＵ１１は、ＲＡＭ１２にユーザプログラム１５３をロードする。ＣＰＵ１１は、ＯＳ１５１の一機能であるプロファイラ１５２により予め定めた間隔で割り込みを発生させる。プロファイラ１５２は、割り込みによる定期的なサンプリング処理により、プロセスを特定するための識別情報(以下、ＰＩＤという)、実行命令アドレス及び割り込んだ際の時刻(以下、サンプリング時刻という)を取得する。
【００１２】
実行命令アドレスはＯＳ１５１及びユーザプログラム１５３から読み出されたサンプリング対象の関数が記憶されているＲＡＭ１２上のアドレスである。なお、本実施形態ではプロファイラ１５２はＯＳ１５１の一機能として説明するが、ＯＳ１５１とは別の独立したプログラムであっても良い。
【００１３】
図２はサンプリング処理のイメージを示す説明図である。横軸は時間であり、時間の経過と共に、ＣＰＵ１１によりユーザプログラム１５３から関数（以下、ユーザ関数という）が次々と呼び出され、実行されている状態を示している。ＯＳ１５１は、ＣＰＵ１１をアイドル状態にするアイドル関数を呼び出す。図２に示すようにユーザ関数とアイドル関数とがＣＰＵ１１により逐次呼び出され、各種処理が実行されることとなる。ここで、アイドル状態の占める割合が多ければ多い程、ＣＰＵ１１の使用率は低減することとなる。
【００１４】
図２の下向き矢印は、プロファイラ１５２によるサンプリング処理のタイミングを示すものである。ＣＰＵ１１はプロファイラ１５２の割り込みハンドラにより、記憶部１５に記憶された予め定められた時間間隔でＰＩＤ、実行命令アドレス、及び、サンプリング時刻を取得する。なお、サンプリング間隔については、ユーザが入力部１３等から変更することができる。
【００１５】
図３はサンプリングテーブル１５４のレコードレイアウトを示す説明図である。サンプリングテーブル１５４はＰＩＤフィールド、実行命令アドレスフィールド、サンプリング時刻フィールド、プロセス名フィールド、及び関数名フィールドを含む。ＰＩＤフィールドには、ＯＳ１５１及びユーザプログラム１５３から呼び出されたユーザ関数及びアイドル関数に係るプロセスを特定するためのＰＩＤが記憶されている。実行命令アドレスフィールドには、サンプリング対象の関数が記憶されているＲＡＭ１２上のアドレスがＰＩＤに対応付けて記憶されている。
【００１６】
サンプリング時刻フィールドには、プロファイラ１５２によりサンプリングを行った際の時刻が実行命令アドレスに対応付けて記憶されている。プロセス名フィールドにはＰＩＤ等に対応付けてサンプリング時に実行しているプロセスの名称が記憶されている。関数名フィールドには、サンプリング時刻に対応付けて、サンプリング時のＯＳ１５１またはユーザプログラム１５３の関数名が記憶されている。ＣＰＵ１１は、プロファイラ１５２により定期的に取得したＰＩＤ、実行命令アドレス及びサンプリング時刻をサンプリングテーブル１５４に記憶する。
【００１７】
ＣＰＵ１１は、ＯＳ１５１からＰＩＤ及び実行命令アドレスに対応するプロセス名及び関数名を取得する。ＣＰＵ１１は、取得したプロセス名及び関数名を実行命令アドレス等に対応付けてサンプリングテーブル１５４に記憶する。ＣＰＵ１１は、ユーザプログラム１５３のバイナリデータから、ユーザプログラム１５３のＰＩＤ及び実行命令アドレスに対応するプロセス名及び関数名を取得する。ＣＰＵ１１は、取得したプロセス名及び関数名を実行命令アドレス等に対応付けてサンプリングテーブル１５４に記憶する。図３の例では第１回目のサンプリング時にはユーザ関数である「func_c」が実行されており、第２回目及び第３回目のサンプリング時に「poll_idle」で示すアイドル関数が実行されていることが理解できる。
【００１８】
図２に戻り説明を続ける。図２の上向き矢印はアイドル状態への移行タイミングを示す。ＣＰＵ１１は、デバッグ機能、または、ＯＳ１５１のイベント登録機能を利用し、ユーザ関数からアイドル関数への切り替えを検出した場合、プロファイラ１５２を呼び出し、アイドル状態へ移行した時刻（以下、移行時刻という）を取得する。なお、ＯＳ１５１のイベント登録機能は、例えばLinux（登録商標）のKprobesまたはSystemap等を用いればよい。具体的にはＣＰＵ１１はユーザ関数からアイドル関数への移行をイベントとして登録しておき、登録したイベントを検出した場合に、移行時刻を取得するようにすればよい。またＣＰＵ１１のデバッグ機能に関しては、例えばIntel社の「Intel(登録商標)64 and IA-32 Architectures Software Developer’s Manual Volume 3B:System Programming Guide, Part 2」に記載の方法を用いればよい。例えばＣＰＵ１１は、ユーザ関数またはアイドル関数の特定の実行命令アドレスを記憶しておき、当該記憶した実行命令アドレスを検出した場合に、アイドル状態へ移行したと判断しても良い。以下では、デバッグ機能を用いる例を挙げて説明する。ＣＰＵ１１は、サンプリング処理と共にアイドル状態への移行に伴う移行時刻の取得を行う。
【００１９】
図４は移行時刻テーブル１５５のレコードレイアウトを示す説明図である。ＣＰＵ１１は、移行時刻を取得した場合、移行時刻テーブル１５５に逐次移行時刻を記憶する。図５は差分テーブル１５６のレコードレイアウトを示す説明図である。差分テーブル１５６は、ＰＩＤフィールド、プロセス名フィールド、関数名フィールド及び差分フィールド等を含む。ＣＰＵ１１は、サンプリングテーブル１５４及び移行時刻テーブル１５５の記憶内容に基づき、差分テーブル１５６を生成する。ＣＰＵ１１は、サンプリングテーブル１５４及び移行時刻テーブル１５５を参照し、移行時刻の直前のサンプリング時刻を抽出する。ＣＰＵ１１は、サンプリングテーブル１５４を参照し、抽出したサンプリング時刻に対応するＰＩＤ、プロセス名、関数名を抽出する。
【００２０】
ＣＰＵ１１は、差分テーブル１５６に抽出したＰＩＤ、プロセス名及び関数名を記憶する。ＣＰＵ１１は、移行時刻と直前のサンプリング時刻との差分を求め、差分フィールドに記憶する。なお、差分フィールドには参考のためかっこ内に、実時間を単位μｓとして記載している。
【００２１】
図６は統計テーブル１５７のレコードレイアウトを示す説明図である。ＣＰＵ１１は、各関数の差分分布を、予め記憶部１５に記憶した差分の時間帯に基づき分類する。図６の例では、時間帯を５μｓとしている。具体的には５μｓ未満、５μｓ以上１０μｓ未満、１０μｓ以上１５μｓ未満等と５μｓ毎に分類する。なお、時間帯はあくまで一例でありこれに限るものではない。また時間帯については、ユーザが入力部１３等から変更することができる。
【００２２】
ＣＰＵ１１は、差分テーブル１５６を参照し、関数名及び差分に基づき、関数毎に時間帯に属する差分の数を計数する。図６の例では「func_a」で示す関数ａは、５μｓ未満の差分の個数が２０１５であり、５μｓ以上１０μｓ未満の個数は２であることが理解できる。また「func_b」で示す関数bは、５μｓ未満の差分の個数が１８６であり、５μｓ以上１０μｓ未満の個数は１８６１であることが理解できる。同様に「func_c」で示す関数cは、５μｓ未満の差分の個数が１４４であり、５μｓ以上１０μｓ未満の個数は１８２２であることが理解できる。
【００２３】
ＣＰＵ１１は、時間帯が最も短い時間帯に分類された数の最も大きい関数を特定する。図６の例では時間帯が最も短い５μｓに分類された数が、２０１５個と最も大きい関数ａが、アイドル原因となる関数であるとして特定される。以上のハードウェア群において、各種ソフトウェア処理を、フローチャートを用いて説明する。
【００２４】
図７はサンプリングテーブル１５４の生成処理の手順を示すフローチャートである。ＣＰＵ１１は、ＲＡＭ１２を参照し、プロファイラ１５２により所定時間間隔で実行中のＰＩＤ、実行命令アドレス及びサンプリング時刻を取得する（ステップＳ７１）。ＣＰＵ１１は、取得したＰＩＤ、実行命令アドレス及びサンプリング時刻をサンプリングテーブル１５４に記憶する（ステップＳ７２）。ＣＰＵ１１は、ＯＳ１５１から、ＰＩＤ及び実行命令アドレスに対応するプロセス名及び関数名を取得する（ステップＳ７３）。
【００２５】
ＣＰＵ１１は、ユーザプログラム１５３から、ＰＩＤ及び実行命令アドレスに対応するプロセス名及び関数名を取得する（ステップＳ７４）。ＣＰＵ１１は、ステップＳ７３及びＳ７４で取得したプロセス名及び関数名を、ＰＩＤ及び実行命令アドレスに対応付けて、サンプリングテーブル１５４に記憶する（ステップＳ７５）。なお、ＣＰＵ１１は、実行命令アドレスがＯＳ１５１領域の場合は、ＯＳ１５１からプロセス名及び関数名を取得し、ユーザプログラム領域の場合は、ＯＳ１５１及びユーザプログラム情報（プログラムバイナリまたはＯＳ１５１がプログラムロード時に作成するシンボル情報等）からプロセス名及び関数名を取得しても良い。なお、これら２つの取得処理は一つの処理として行えば良い。また制御プログラム１５Ｐは、プロファイラ１５２と一体となって動作する。ここで、プロファイラ１５２がＯＳ１５１に組込まれている場合、制御プログラム１５ＰもＯＳ１５１に組み込まれるか、または、アドオンモジュールという形で提供することにより、ＯＳ１５１にロードされ、実行される。プロファイラ１５２が独立したプログラムである場合、制御プログラム１５Ｐを包含して提供する、または、協調して動作するプログラムとして提供する。
【００２６】
図８は移行時刻の取得処理手順を示すフローチャートである。ＣＰＵ１１は、デバッグ機能によりアイドル状態への移行を検出したか否かを判断する（ステップＳ８１）。ＣＰＵ１１は、アイドル状態への移行を検出していないと判断した場合（ステップＳ８１でＮＯ）、アイドル状態を検出するまで待機する。ＣＰＵ１１は、アイドル状態への移行を検出した場合（ステップＳ８１でＹＥＳ）、ステップＳ８２へ移行する。ＣＰＵ１１は、プロファイラ１５２により移行時刻を取得する（ステップＳ８２）。ＣＰＵ１１は、取得した移行時刻を移行時刻テーブル１５５に記憶する（ステップＳ８３）。
【００２７】
図９は差分及び関数の取得処理手順を示すフローチャートである。ＣＰＵ１１は、移行時刻テーブル１５５を参照し、移行時刻を抽出（ステップＳ９１）。ＣＰＵ１１は、サンプリングテーブル１５４を参照し、移行時刻直前のサンプリング時刻を抽出（ステップＳ９２）。ＣＰＵ１１は、ステップＳ９１で抽出した移行時刻から、ステップＳ９２で抽出したサンプリング時刻を減じることで差分を算出する（ステップＳ９３）。ＣＰＵ１１は、サンプリング時刻に対応するＰＩＤ、プロセス名及び関数名を、サンプリングテーブル１５４から読み出す（ステップＳ９４）。
【００２８】
ＣＰＵ１１は、ステップＳ９３で算出した差分と、ステップＳ９４で読み出したＰＩＤ、プロセス名及び関数名とを対応付けて、差分テーブル１５６に記憶する（ステップＳ９５）。ＣＰＵ１１は、移行時刻テーブル１５５に記憶した全ての移行時刻について上述した処理を終了したか否かを判断する（ステップＳ９６）。ＣＰＵ１１は、終了していないと判断した場合（ステップＳ９６でＮＯ）、処理をステップＳ９７へ移行させる。ＣＰＵ１１は、移行時刻テーブル１５５を参照し、時系列で次の移行時刻を読み出す（ステップＳ９７）。その後ＣＰＵ１１は処理をステップＳ９２に戻す。これにより、関数名及び差分が蓄積されることとなる。ＣＰＵ１１は、全ての移行時刻について処理を終了したと判断した場合（ステップＳ９６でＹＥＳ）、処理を終了する。
【００２９】
図１０はアイドル原因となる可能性の高い関数の抽出処理手順を示すフローチャートである。ＣＰＵ１１は、関数を差分テーブル１５６から読み出す（ステップＳ１０１）。ＣＰＵ１１は、関数に対応する差分を差分テーブル１５６から読み出す（ステップＳ１０２）。ＣＰＵ１１は、記憶部１５から複数の時系列で連続する複数の時間帯を読み出す。ＣＰＵ１１は、読み出した各時間帯に属する差分の数を計数する（ステップＳ１０３）。ＣＰＵ１１は、関数及び時間帯に対応付けて、計数した数を統計テーブル１５７に記憶する（ステップＳ１０４）。これにより一の関数について、各時間帯に属する差分の数を把握することができる。
【００３０】
ＣＰＵ１１は、全ての関数について処理を終了したか否かを判断する（ステップＳ１０５）。ＣＰＵ１１は、処理を終了していないと判断した場合（ステップＳ１０５でＮＯ）、未処理の関数を差分テーブル１５６から読み出す（ステップＳ１０６）。その後、ＣＰＵ１１は、処理をステップＳ１０２に戻す。ＣＰＵ１１は、全ての関数について処理を終了したと判断した場合（ステップＳ１０５でＹＥＳ）、ステップＳ１０７へ移行する。以上の処理を繰り返すことにより、全ての関数の、差分分布を取得できる。
【００３１】
ＣＰＵ１１は、統計テーブル１５７を参照し、差分が最も短い時間帯に分類された数が最も多い関数を抽出する（ステップＳ１０７）。ＣＰＵ１１は、抽出した関数を表示部１４へ出力する（ステップＳ１０８）。なお、抽出した関数の出力先は表示部１４に限るものではない。図示しないマイクから音声出力するほか、図示しない他のコンピュータへインターネット等の通信網を介して出力するようにしても良い。
【００３２】
続いて効果を確認すべく実験を行った。図１１はサンプリング結果を示す説明図である。ユーザプログラム１５３は関数Ａ、関数Ｂ及び関数Ｃの３つであり、５０μｓの周期でサンプリング処理を行った。なお、関数Ａがアイドル原因となる関数である。図１１Ａはアイドル関数、関数Ａ〜Ｃ毎に対するサンプリング数の比率を示す。アイドル関数として抽出された割合は76.4%であり、関数Ａは4.2%、関数Ｂは10.9%、関数Ｃは8.6%であった。アイドル状態にある割合が高いことが分かるほか、関数Ｂの占める割合も大きいことが分かる。
【００３３】
続いて移行時刻直前にサンプリングした関数の数について調査した。図１１Ｂは関数Ａ〜Ｃに対する移行時刻直前のサンプリング数及び比率を示す。関数Ａのサンプリング数は4138であり、比率は17.6％、関数Ｂのサンプリング数は10867であり、比率は46.2%、関数Ｃのサンプリング数は8534であり、比率は36.3%であった。アイドル状態に移行する直前にサンプリングにより得られた関数の計数値だけに依拠して判断した場合、関数Ｂがアイドル原因に係る関数であると誤認識してしまう。
【００３４】
図１２は統計テーブル１５７に記憶されたデータの変化を示すグラフである。図１２に示すように本実施形態に係る手法では差分の最も短い時間帯が、最も多い関数は関数Ａであることが顕著に表れている。一方、関数Ｂ及び関数Ｃは相対的に差分が長い時間帯に集中している。以上のことから本実施形態に係る手法ではアイドル原因となる関数を、関数Ａと精度良く特定することが可能となる。
【００３５】
実施の形態２
実施の形態２は、アイドル原因となる関数を複数の時間帯の数に基づき決定する形態に関する。実施の形態１では差分の最も短い時間帯、図６の例では５μｓ未満の数が最大の関数を特定したが、これに限るものではない。各時間帯に重みを設定し、重みに応じて各時間帯の数を補正しても良い。また、最も短い時間帯の数が、関数間で大差ない場合、次に短い時間帯の数に基づき関数を特定しても良い。以下詳細を説明する。
【００３６】
図１３及び図１４は実施の形態２に係る関数の特定処理手順を示すフローチャートである。ＣＰＵ１１は、統計テーブル１５７を参照し、最も短い時間帯に分類された数が最も多い関数（以下、第１関数という）を抽出する（ステップＳ１３１）。ＣＰＵ１１は、最も短い時間帯に分類された数が次に多い関数（以下、第２関数という）を抽出する（ステップＳ１３２）。ＣＰＵ１１は、ステップＳ１３１で抽出した第１関数の数から、ステップＳ１３２で抽出した第２関数の数を減算する（ステップＳ１３３）。ＣＰＵ１１は、記憶部１５に予め記憶した閾値を読み出す（ステップＳ１３４）。
【００３７】
ＣＰＵ１１は、ステップＳ１３３で算出した減算値は閾値を超えるか否かを判断する（ステップＳ１３５）。ＣＰＵ１１は、減算値は閾値を超えると判断した場合（ステップＳ１３５でＹＥＳ）、処理をステップＳ１３９へ移行させる。ＣＰＵ１１は、第１関数を、アイドル原因と推定される関数として、出力する（ステップＳ１３９）。ＣＰＵ１１は、減算値は閾値を超えないと判断した場合（ステップＳ１３５でＮＯ）、ステップＳ１３６へ処理を移行させる。ＣＰＵ１１は、第１関数について、次に短い時間帯に分類された数を抽出する（ステップＳ１３６）。
【００３８】
ＣＰＵ１１は、第２関数について、次に短い時間帯に分類された数を抽出する（ステップＳ１３７）。ＣＰＵ１１は、ステップＳ１３６で抽出した数と、ステップＳ１３７で抽出した数とを比較し、抽出した数の多い関数を、アイドル原因と推定される関数として、出力する（ステップＳ１３８）。これにより、判別しがたい特性を有する関数についても、より精度良くアイドル原因となる関数を特定することが可能となる。
【００３９】
本実施の形態２は以上の如きであり、その他は実施の形態１と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【００４０】
実施の形態３
実施の形態３は、アイドル関数からユーザ関数へ移行する際の終了時刻を利用する形態に関する。図１５は実施の形態３に係るコンピュータ１のハードウェア群を示すブロック図である。記憶部１５にはさらに終了時刻テーブル１５８、終了差分テーブル１５９、移行統計テーブル１５１０、及び終了統計テーブル１５１１が設けられている。図１６はサンプリング処理のイメージを示す説明図である。実施の形態１の処理に加え、ＣＰＵ１１は、実施の形態１と同じくデバッグ機能、または、ＯＳ１５１のイベント登録機能を利用し、アイドル関数からユーザ関数への切り替えを検出した場合、プロファイラ１５２を呼び出し、アイドル状態からユーザ関数の実行へ復帰した時刻（以下、終了時刻という）を取得する。なお、実施の形態２においてもデバッグ機能を用いる例を挙げて説明する。図１６の終了時刻は、上向き点線矢印で示されている。ＣＰＵ１１は、終了時刻検出直後のサンプリング時刻との差分を算出する。ＣＰＵ１１は、終了時刻に基づき算出した差分をも考慮して、アイドル原因となる関数を特定する。
【００４１】
図１７は終了時刻テーブル１５８のレコードレイアウトを示す説明図である。ＣＰＵ１１は、デバッグ機能を利用し、アイドル関数からユーザ関数への切り替えを検出した場合、プロファイラ１５２を呼び出し、アイドル状態からユーザ関数の実行へ復帰した時刻を取得する。ＣＰＵ１１は、終了時刻を取得する度に、取得した終了時刻を終了時刻テーブル１５８に記憶する。
【００４２】
図１８は終了差分テーブル１５９のレコードレイアウトを示す説明図である。終了差分テーブル１５９は、ＰＩＤフィールド、プロセス名フィールド、関数名フィールド及び差分フィールド等を含む。ＣＰＵ１１は、サンプリングテーブル１５４及び終了時刻テーブル１５８の記憶内容に基づき、終了差分テーブル１５９を生成する。ＣＰＵ１１は、サンプリングテーブル１５４及び終了時刻テーブル１５８を参照し、終了時刻の直後のサンプリング時刻を抽出する。ＣＰＵ１１は、サンプリングテーブル１５４を参照し、抽出したサンプリング時刻に対応するＰＩＤ、プロセス名、関数名を抽出する。
【００４３】
ＣＰＵ１１は、終了差分テーブル１５９に抽出したＰＩＤ、プロセス名及び関数名を記憶する。ＣＰＵ１１は、終了時刻と直後のサンプリング時刻との差分を求め、差分フィールドに記憶する。なお、差分フィールドには参考のためかっこ内に、実時間を単位μｓとして記載している。
【００４４】
図１９は移行統計テーブル１５１０のレコードレイアウトを示す説明図である。移行統計テーブル１５１０の記憶内容は、実施の形態１で述べた統計テーブル１５７と同様であるので詳細な説明は省略する。図２０は終了統計テーブル１５１１のレコードレイアウトを示す説明図である。ＣＰＵ１１は、図１８に示す終了差分テーブル１５９を参照し、各関数の差分分布を、予め記憶部１５に記憶した差分の時間帯に基づき分類する。この時間帯は、図１９に示す移行統計テーブル１５１０と同じ時間帯とすればよい。
【００４５】
ＣＰＵ１１は、終了差分テーブル１５９を参照し、関数名及び差分に基づき、関数毎に時間帯に属する差分の数を計数する。図２０の例では「func_a」で示す関数ａは、５μｓ未満の差分の個数が２０１３であり、５μｓ以上１０μｓ未満の個数は４であることが理解できる。また「func_b」で示す関数bは、５μＳ未満の差分の個数が１８４であり、５μｓ以上１０μｓ未満の個数は１８６５であることが理解できる。同様に「func_c」で示す関数cは、5μｓ未満の差分の個数が１３９であり、５μｓ以上１０μｓ未満の個数は１８２７であることが理解できる。
【００４６】
図２１は実施の形態２に係る統計テーブル１５７のレコードレイアウトを示す説明図である。統計テーブル１５７は図１９に示す移行統計テーブル１５１０と、終了統計テーブル１５１１とを合算したものである。ＣＰＵ１１は、移行統計テーブル１５１０及び終了統計テーブル１５１１を参照し、関数毎に、各時間帯の移行時刻に基づき算出される差分の数と、終了時刻に基づき算出される差分の数との合計値を算出する。ＣＰＵ１１は、合計値を関数及び時間帯に対応付けて統計テーブル１５７に記憶する。図２１の例では「func_a」で示す関数ａは、５μｓ未満の差分の個数が４０２８であり、５μｓ以上１０μｓ未満の個数は６であることが理解できる。また「func_b」で示す関数bは、５μｓ未満の差分の個数が３７０であり、５μｓ以上１０μｓ未満の個数は３７２６であることが理解できる。同様に「func_c」で示す関数cは、５μｓ未満の差分の個数が２８３であり、５μｓ以上１０μｓ未満の個数は３６４９であることが理解できる。
【００４７】
図２２は終了時刻の取得処理手順を示すフローチャートである。ＣＰＵ１１は、デバッグ機能によりアイドル状態からユーザプログラム１５３の実行への復帰を検出したか否かを判断する（ステップＳ２２１）。ＣＰＵ１１は、復帰を検出していないと判断した場合（ステップＳ２２１でＮＯ）、復帰を検出するまで待機する。ＣＰＵ１１は、復帰を検出した場合（ステップＳ２２１でＹＥＳ）、ステップＳ２２２へ移行する。ＣＰＵ１１は、プロファイラ１５２により終了時刻を取得する（ステップＳ２２２）。ＣＰＵ１１は、取得した終了時刻を終了時刻テーブル１５８に記憶する（ステップＳ２２３）。
【００４８】
図２３は終了時刻に係る差分及び関数の抽出処理手順を示すフローチャートである。ＣＰＵ１１は、終了時刻テーブル１５８を参照し、終了時刻を抽出（ステップＳ２３１）。ＣＰＵ１１は、サンプリングテーブル１５４を参照し、終了時刻直後のサンプリング時刻を抽出（ステップＳ２３２）。ＣＰＵ１１は、ステップＳ２３２で抽出したサンプリング時刻から、ステップＳ２３１で抽出した終了時刻を減じることで差分を算出する（ステップＳ２３３）。ＣＰＵ１１は、サンプリング時刻に対応するＰＩＤ、プロセス名及び関数名を、サンプリングテーブル１５４から読み出す（ステップＳ２３４）。
【００４９】
ＣＰＵ１１は、ステップＳ２３３で算出した差分と、ステップＳ２３４で読み出したＰＩＤ、プロセス名及び関数名とを対応付けて、終了差分テーブル１５９に記憶する（ステップＳ２３５）。ＣＰＵ１１は、終了時刻テーブル１５８に記憶した全ての終了時刻について上述した処理を終了したか否かを判断する（ステップＳ２３６）。ＣＰＵ１１は、終了していないと判断した場合（ステップＳ２３６でＮＯ）、処理をステップＳ２３７へ移行させる。ＣＰＵ１１は、終了時刻テーブル１５８を参照し、時系列で次の終了時刻を読み出す（ステップＳ２３７）。その後ＣＰＵ１１は処理をステップＳ２３２に戻す。これにより、関数名及び差分が蓄積されることとなる。ＣＰＵ１１は、全ての終了時刻について処理を終了したと判断した場合（ステップＳ２３６でＹＥＳ）、処理を終了する。
【００５０】
図２４はアイドル原因となる可能性の高い関数の抽出処理手順を示すフローチャートである。ＣＰＵ１１は、関数を終了差分テーブル１５９から読み出す（ステップＳ２４１）。ＣＰＵ１１は、関数に対応する差分を終了差分テーブル１５９から読み出す（ステップＳ２４２）。ＣＰＵ１１は、記憶部１５から複数の時系列で連続する複数の時間帯を読み出す。ＣＰＵ１１は、読み出した各時間帯に属する差分の数を計数する（ステップＳ２４３）。ＣＰＵ１１は、関数及び時間帯に対応付けて、計数した数を終了統計テーブル１５１１に記憶する（ステップＳ２４４）。
【００５１】
ＣＰＵ１１は、全ての関数について処理を終了したか否かを判断する（ステップＳ２４５）。ＣＰＵ１１は、処理を終了していないと判断した場合（ステップＳ２４５でＮＯ）、未処理の関数を終了差分テーブル１５９から読み出す（ステップＳ２４６）。その後、ＣＰＵ１１は、処理をステップＳ２４２に戻す。ＣＰＵ１１は、全ての関数について処理を終了したと判断した場合（ステップＳ２４５でＹＥＳ）、ステップＳ２４７へ移行する。以上の処理を繰り返すことにより、全ての関数の、差分分布を取得できる。
【００５２】
ＣＰＵ１１は、図１０で述べた処理により生成した統計テーブル１５７を移行統計テーブル１５１０として読み出し、さらに、ステップＳ２４１〜Ｓ２４６の処理で生成した終了統計テーブル１５１１を読み出す（ステップＳ２４７）。ＣＰＵ１１は、移行統計テーブル１５１０及び終了統計テーブル１５１１を参照し、各関数の時間帯の合計値を算出し、統計テーブル１５７を生成する（ステップＳ２４８）。
【００５３】
ＣＰＵ１１は、統計テーブル１５７を参照し、差分が最も短い時間帯に分類された数が最も多い関数を抽出する（ステップＳ２４９）。ＣＰＵ１１は、抽出した関数を表示部１４へ出力する（ステップＳ２４１０）。このように、アイドル状態からプログラム関数の実行に復帰する回数の多い関数をも考慮するため、より精度良くアイドル原因となる関数を特定することが可能となる。
【００５４】
本実施の形態３は以上の如きであり、その他は実施の形態１及び２と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【００５５】
実施の形態４
実施の形態４は移行統計テーブル１５１０または終了統計テーブル１５１１の数に重み付け処理を行う形態に関する。図２５は重み付け処理の手順を示すフローチャートである。ＣＰＵ１１は、移行統計テーブル１５１０を参照し、最も短い時間帯に分類された各関数の数を読み出す（ステップＳ２５１）。ＣＰＵ１１は、終了統計テーブル１５１１を参照し、最も短い時間帯に分類された各関数の数を読み出す（ステップＳ２５２）。ＣＰＵ１１は、記憶部１５に予め記憶した重みとしての係数を読み出す（ステップＳ２５３）。ＣＰＵ１１は、終了統計テーブル１５１１についてステップＳ２５２にて読み出した各関数の数に、係数を乗じ、各関数の数を補正する（ステップＳ２５４）。
【００５６】
この係数は例えば１より小さい数（例えば０．８）、または、１より大きい数（例えば１．２）とすればよい。なお、本実施形態では終了統計テーブル１５１１の数に係数を乗じたが、ステップＳ２５１で読み出した移行統計テーブル１５１０の数に係数を乗じても良い。また双方に異なる値を乗じても良い。ＣＰＵ１１は、ステップＳ２５１にて移行統計テーブル１５１０について読み出した各関数の数と、ステップＳ２５４にて補正した補正後の各関数の数とを加算する（ステップＳ２５５）。ＣＰＵ１１は、加算値が最も大きい関数を、アイドル原因となる関数として出力する（ステップＳ２５６）。なお、本実施形態では、最も短い時間帯に分類された各関数の数に重み付け処理を行ったがこれに限るものではない。他の時間帯に分類された各関数の数にも重み付け処理を行っても良い。そして、ＣＰＵ１１は、移行統計テーブル１５１０と補正後の終了統計テーブル１５１１の全ての時間帯に分類された数を加算する。その後、ＣＰＵ１１は、実施の形態２で述べた如く、最も短い時間帯の数と、次に短い時間帯の数とに基づき、アイドル原因となる関数を特定するようにしても良い。以上のとおり、関数の特性に応じて重み付け処理を行うことで、より精度良くアイドル要因となる関数を特定することが可能となる。
【００５７】
本実施の形態４は以上の如きであり、その他は実施の形態１から３と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【００５８】
実施の形態５
図２６は上述した形態のコンピュータ１の動作を示す機能ブロック図である。ＣＰＵ１１が制御プログラム１５Ｐを実行することにより、コンピュータ１は以下のように動作する。関数情報採取部２６１は、実行中の関数を示す情報である関数情報を所定間隔で採取するとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を記憶部１５に記憶する。移行取得部２６２は、ＣＰＵ１１がアイドル状態に移行した場合、移行時刻を取得して前記記憶部１５に記憶する。抽出部２６３は、前記記憶部１５に記憶した移行時刻と、前記記憶部１５に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出する。特定部２６４は、抽出部２６３が抽出した各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定する。分類部２６５は、複数の差分の時間帯別に、各関数の差分を分類する。関数特定部２６７は、差分が短い時間帯に分類された数に基づき、前記アイドル原因となる関数を特定する。
【００５９】
図２７は実施の形態５に係るコンピュータ１のハードウェア群を示すブロック図である。コンピュータ１を動作させるためのプログラムは、ディスクドライブ等の読み取り部１０ＡにCD-ROM、DVD（Digital Versatile Disc）ディスク、メモリーカード、またはUSB(Universal Serial Bus)メモリ等の可搬型記録媒体１Ａを読み取らせて記憶部１５に記憶しても良い。また当該プログラムを記憶したフラッシュメモリ等の半導体メモリ１Ｂをコンピュータ１内に実装しても良い。さらに、当該プログラムは、インターネット等の通信網を介して接続される他のサーバコンピュータ（図示せず）からダウンロードすることも可能である。以下に、その内容を説明する。
【００６０】
図２７に示すコンピュータ１は、上述した各種ソフトウェア処理を実行するプログラムを、可搬型記録媒体１Ａまたは半導体メモリ１Ｂから読み取り、或いは、通信網を介して他のサーバコンピュータ（図示せず）からダウンロードする。当該プログラムは、制御プログラム１５Ｐとしてインストールされ、ＲＡＭ１２にロードして実行される。これにより、上述したコンピュータ１として機能する。
【００６１】
本実施の形態５は以上の如きであり、その他は実施の形態１と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【００６２】
以上の実施の形態１から５を含む実施形態に関し、さらに以下の付記を開示する。
【００６３】
（付記１）
プログラムを実行する演算処理部と、
実行中の関数を示す情報である関数情報を所定間隔で採取するとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を記憶部に記憶する関数情報採取部と、
前記演算処理部がアイドル状態に移行した場合、移行時刻を取得して前記記憶部に記憶する移行取得部と、
前記記憶部に記憶した移行時刻と、前記記憶部に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出する抽出部と、
該抽出部が抽出した各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定する特定部と
を備える情報処理装置。
【００６４】
（付記２）
前記特定部は、
複数の差分の時間帯別に、各関数の差分を分類する分類部と、
差分が短い時間帯に分類された数に基づき、前記アイドル原因となる関数を特定する関数特定部と
を備える付記１に記載の情報処理装置。
【００６５】
（付記３）
前記関数特定部は、
最も短い時間帯に分類された数が最も大きい関数を、前記アイドル原因となる関数として特定する
付記２に記載の情報処理装置。
【００６６】
（付記４）
アイドル状態が終了した場合に、終了時刻を取得する終了取得部と、
終了時刻と該終了時刻直後のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数を抽出する終了抽出部とを備え、
前記特定部は、
前記抽出部及び前記終了抽出部により抽出した各関数の差分分布に基づき、アイドル原因となる関数を特定する
付記１に記載の情報処理装置。
【００６７】
（付記５）
前記特定部は、
複数の差分の時間帯別に、前記抽出部及び前記終了抽出部により抽出した各関数の差分を分類する複数分類部と、
差分が短い時間帯に分類された数の大きい関数を特定する複数特定部と
を備える付記４に記載の情報処理装置。
【００６８】
（付記６）
前記抽出部により抽出した各関数の時間帯別に分類された数、または、前記終了抽出部により抽出した各関数の時間帯別に分類された数に対し重み付け処理する重量部を備え、
前記複数特定部は、
前記重量部により重み付け処理された後に、差分が短い時間帯に分類された数の大きい関数を特定する
付記４に記載の情報処理装置。
【００６９】
（付記７）
前記複数特定部は、
前記重量部により重み付け処理された後に、差分が最も短い時間帯に分類された数の最も大きい関数を特定する
付記６に記載の情報処理装置。
【００７０】
（付記８）
プログラムを実行する演算処理部と、記憶部とを有する情報処理装置の解析方法において、
前記情報処理装置が、
実行中の関数を示す情報である関数情報を所定間隔で採取するとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を前記記憶部に記憶し、
前記演算処理部がアイドル状態に移行した場合、移行時刻を取得して前記記憶部に記憶し、
前記記憶部に記憶した移行時刻と、前記記憶部に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出する抽出部と、
抽出された各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定する情報処理装置の解析方法。
【００７１】
（付記９）
プログラムを実行する演算処理部と、記憶部とを有する情報処理装置の解析プログラムにおいて、
前記情報処理装置に、
実行中の関数を示す情報である関数情報を所定間隔で採取させるとともに、前記関数情報と前記関数情報とを採取した時刻であるサンプリング時刻を前記記憶部に記憶させ、
前記演算処理部がアイドル状態に移行した場合、移行時刻を取得して前記記憶部に記憶させ、
前記記憶部に記憶した移行時刻と、前記記憶部に記憶したサンプリング時刻のうち前記移行時刻直前のサンプリング時刻との差分、及び、前記サンプリング時刻に対応する関数情報を抽出させ、
抽出された各関数情報に対応する差分の分布に基づき、アイドル原因となる関数を特定させる情報処理装置の解析プログラム。
【符号の説明】
【００７２】
１      情報処理装置
１Ａ    可搬型記録媒体
１Ｂ    半導体メモリ
１０Ａ  読み取り部
１１    ＣＰＵ
１２    ＲＡＭ
１３    入力部
１４    表示部
１５    記憶部
１５Ｐ  制御プログラム
１６    通信部
１８    時計部
１５１  ＯＳ
１５２  プロファイラ
１５３  ユーザプログラム
１５４  サンプリングテーブル
１５５  移行時刻テーブル
１５６  差分テーブル
１５７  統計テーブル
１５８  終了時刻テーブル
１５９  終了差分テーブル
１５１０  移行統計テーブル
１５１１  終了統計テーブル
２６１  関数情報採取部
２６２  移行取得部
２６３  抽出部
２６４  特定部
２６５  分類部
２６７  関数特定部
【図１】
2015088068.tif 000003
【図２】
2015088068.tif 000004
【図３】
2015088068.tif 000005
【図４】
2015088068.tif 000006
【図５】
2015088068.tif 000007
【図６】
2015088068.tif 000008
【図７】
2015088068.tif 000009
【図８】
2015088068.tif 000010
【図９】
2015088068.tif 000011
【図１０】
2015088068.tif 000012
【図１１】
2015088068.tif 000013
【図１２】
2015088068.tif 000014
【図１３】
2015088068.tif 000015
【図１４】
2015088068.tif 000016
【図１５】
2015088068.tif 000017
【図１６】
2015088068.tif 000018
【図１７】
2015088068.tif 000019
【図１８】
2015088068.tif 000020
【図１９】
2015088068.tif 000021
【図２０】
2015088068.tif 000022
【図２１】
2015088068.tif 000023
【図２２】
2015088068.tif 000024
【図２３】
2015088068.tif 000025
【図２４】
2015088068.tif 000026
【図２５】
2015088068.tif 000027
【図２６】
2015088068.tif 000028
【図２７】
2015088068.tif 000029