(57)【要約】【課題】オーバーヘッドを抑えて、プロセッサをアイドル状態にするアプリケーションの箇所を限定することができる性能情報収集プログラム等を提供する。【解決手段】記憶部を有する情報処理装置に実行させる性能情報収集プログラムにおいて、オペレーティングシステムから呼び出されたオペレーティングシステム関数の識別情報とユーザプログラムから呼び出されたユーザ関数の識別情報とを、周期的に収集させるとともに記憶部に記憶させ、各ユーザ関数が収集された回数である個別ユーザ関数収集回数を、各ユーザ関数の種別毎に集計させ、演算処理装置をアイドル状態にするオペレーティングシステム関数の識別情報が収集された一周期前に、ユーザ関数の識別情報が収集された個別特定ユーザ関数収集回数を、各ユーザ関数の種別毎に集計させ、集計された各個別ユーザ関数収集回数に対する各個別特定ユーザ関数収集回数の割合を、ユーザ関数の種別毎に算出させる。【選択図】図６
2014228889.tif 000002
【特許請求の範囲】
【請求項１】
演算処理装置がオペレーティングシステムを介して実行するユーザプログラムの性能情報を、記憶部を有する情報処理装置に取得させる性能情報収集プログラムにおいて、
前記情報処理装置に、
前記記憶部に記憶された前記オペレーティングシステムを介した前記ユーザプログラムを前記演算処理装置に実行させる場合、前記オペレーティングシステムから呼び出されたオペレーティングシステム関数の識別情報と前記ユーザプログラムから呼び出されたユーザ関数の識別情報とを、周期的に収集させるとともに前記記憶部に記憶させ、
前記記憶部に記憶されたユーザ関数の識別情報に基づいて、各ユーザ関数が収集された回数である個別ユーザ関数収集回数を、各ユーザ関数の種別毎に集計させ、
前記記憶部に記憶されたオペレーティングシステム関数の識別情報とユーザ関数の識別情報とに基づいて、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の識別情報が収集された一周期前に、前記ユーザ関数の識別情報が収集された個別特定ユーザ関数収集回数を、各ユーザ関数の種別毎に集計させ、
集計された各個別ユーザ関数収集回数に対する各個別特定ユーザ関数収集回数の割合を、前記ユーザ関数の種別毎に算出させる
ことを特徴とする性能情報収集プログラム。
【請求項２】
算出した割合が高いユーザ関数を上位から一又は複数抽出させる
請求項１に記載の性能情報収集プログラム。
【請求項３】
前記情報処理装置は時計部を有し、
収集した前記オペレーティングシステム関数及びユーザ関数夫々の識別情報並びに前記時計部が該識別情報の収集時を計時した収集時刻を対応付けて前記記憶部に記憶させる
請求項２に記載の性能情報収集プログラム。
【請求項４】
前記識別情報を周期的に収集させる処理と共に、前記オペレーティングシステム及びユーザプログラムの実行時に、抽出した前記割合が高いユーザ関数の識別情報をトレースして収集させ、
周期的に収集させた前記識別情報及び収集時刻並びにトレースして収集した前記識別情報及び前記時計部が計時した前記割合が高いユーザ関数の実行時刻を前記記憶部に記憶させ、
前記記憶部の記憶内容に基づいて、前記割合が高いユーザ関数の実行時刻から、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の収集時刻までの時間が最短であるユーザ関数を特定させる
請求項３に記載の性能情報収集プログラム。
【請求項５】
前記識別情報を周期的に収集させる処理は、前記一又は複数のオペレーティングシステム関数及びユーザ関数が前記記憶部に夫々記憶されているアドレスを収集させ、
前記トレースによる収集処理は、抽出した前記割合が高いユーザ関数が前記記憶部に記憶されているアドレスを収集させ、
前記記憶部に記憶されたオペレーティングシステム及びユーザプログラムに基づいて、収集した各アドレスを前記識別情報に変換させる
請求項４に記載の性能情報収集プログラム。
【請求項６】
前記識別情報を周期的に収集させる処理は、前記一又は複数のユーザ関数に夫々対応するプロセスの識別子を収集させ、
前記記憶部に記憶されたユーザプログラムに基づいて、収集したプロセスの識別子をプロセス名に変換させる
請求項５に記載の性能情報収集プログラム。
【請求項７】
演算処理装置がオペレーティングシステムを介して実行するユーザプログラムの性能情報を取得する情報処理装置において、
前記オペレーティングシステムと前記ユーザプログラムとを記憶する記憶部と、
前記オペレーティングシステムを介した前記ユーザプログラムを前記演算処理装置に実行させる場合、前記オペレーティングシステムから呼び出されたオペレーティングシステム関数の識別情報と前記ユーザプログラムから呼び出されたユーザ関数の識別情報とを、周期的に収集するとともに前記記憶部に記憶する収集部と、
前記記憶部に記憶されたユーザ関数の識別情報に基づいて、各ユーザ関数が収集された回数である個別ユーザ関数収集回数を、各ユーザ関数の種別毎に集計するとともに、前記記憶部に記憶されたオペレーティングシステム関数の識別情報とユーザ関数の識別情報とに基づいて、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の識別情報が収集された一周期前に、前記ユーザ関数の識別情報が収集された個別特定ユーザ関数収集回数を、各ユーザ関数の種別毎に集計する集計部と、
集計された各個別ユーザ関数収集回数に対する各個別特定ユーザ関数収集回数の割合を、前記ユーザ関数の種別毎に算出する算出部と
を有する
ことを特徴とする情報処理装置。
【請求項８】
演算処理装置がオペレーティングシステムを介して実行するユーザプログラムの性能情報を、記憶部を有する情報処理装置に取得させる性能情報収集方法において、
前記情報処理装置が、
前記記憶部に記憶された前記オペレーティングシステムを介した前記ユーザプログラムを前記演算処理装置に実行させる場合、前記オペレーティングシステムから呼び出されたオペレーティングシステム関数の識別情報と前記ユーザプログラムから呼び出されたユーザ関数の識別情報とを、周期的に収集するとともに前記記憶部に記憶し、
前記記憶部に記憶されたユーザ関数の識別情報に基づいて、各ユーザ関数が収集された回数である個別ユーザ関数収集回数を、各ユーザ関数の種別毎に集計し、
前記記憶部に記憶されたオペレーティングシステム関数の識別情報とユーザ関数の識別情報とに基づいて、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の識別情報が収集された一周期前に、前記ユーザ関数の識別情報が収集された個別特定ユーザ関数収集回数を、各ユーザ関数の種別毎に集計し、
集計された各個別ユーザ関数収集回数に対する各個別特定ユーザ関数収集回数の割合を、前記ユーザ関数の種別毎に算出する
ことを特徴とする性能情報収集方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、性能情報収集プログラム、情報処理装置及び性能情報収集方法に関する。
【背景技術】
【０００２】
アプリケーションは、演算処理装置としてのＣＰＵ（Central Processing Unit）が何らかの原因で命令の実行に時間を浪費している場合、自身の性能を十分に発揮することができない。そこで、プロファイラは、ＣＰＵに時間を浪費させる命令に対応するアプリケーションの問題箇所を限定又は特定するため、アプリケーションの動作情報を一定時間間隔で又はトレースして収集する（例えば、特許文献１、２、非特許文献１）。アプリケーションの問題箇所を限定又は特定するために、プロファイラを効果的に利用することができる場合は、ＣＰＵ使用率が高いアプリケーションの箇所を限定又は特定するときである。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０６−０１９５９２号公報
【特許文献２】特開２００９−２３７６１０号公報
【非特許文献】
【０００４】
【非特許文献１】Intel(R) 64 and IA-32 Architectures Software Developer’s Manual Volume 3B:System Programming Guide, Part 2
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、ＣＰＵが命令の実行に時間を浪費する場合には、ＣＰＵ使用率が高い場合に限らず、ＣＰＵ使用率が低い場合もある。例えば、アプリケーションから呼び出されたユーザ関数の実行時間は短くても、当該ユーザ関数の次に実行されるＯＳ関数がＣＰＵをアイドル状態にする場合がある。かかる場合、プロファイラによる情報収集の時間間隔がアプリケーションから呼び出されたユーザ関数の実行時間より長いとき、当該ユーザ関数を特定することは困難である。また、トレースにより当該ユーザ関数を特定する場合、プロファイラのオーバーヘッドが大きくなる。
【０００６】
本発明の目的のひとつは、オーバーヘッドを抑えて、プロセッサをアイドル状態にするアプリケーションの箇所を限定することができる性能情報収集プログラム、性能情報収集装置及び性能情報収集方法を提供することにある。
【課題を解決するための手段】
【０００７】
本願の一観点は、演算処理装置がオペレーティングシステムを介して実行するユーザプログラムの性能情報を、記憶部を有する情報処理装置に取得させる性能情報収集プログラムにおいて、前記情報処理装置に、前記記憶部に記憶された前記オペレーティングシステムを介した前記ユーザプログラムを前記演算処理装置に実行させる場合、前記オペレーティングシステムから呼び出されたオペレーティングシステム関数の識別情報と前記ユーザプログラムから呼び出されたユーザ関数の識別情報とを、周期的に収集させるとともに前記記憶部に記憶させ、前記記憶部に記憶されたユーザ関数の識別情報に基づいて、各ユーザ関数が収集された回数である個別ユーザ関数収集回数を、各ユーザ関数の種別毎に集計させ、前記記憶部に記憶されたオペレーティングシステム関数の識別情報とユーザ関数の識別情報とに基づいて、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の識別情報が収集された一周期前に、前記ユーザ関数の識別情報が収集された個別特定ユーザ関数収集回数を、各ユーザ関数の種別毎に集計させ、集計された各個別ユーザ関数収集回数に対する各個別特定ユーザ関数収集回数の割合を、前記ユーザ関数の種別毎に算出させる。
【発明の効果】
【０００８】
本願の一観点によれば、オーバーヘッドを抑えて、プロセッサをアイドル状態にするアプリケーションの箇所を限定することができる。
【図面の簡単な説明】
【０００９】
【図１】情報処理装置のハードウェア構成例を示すブロック図である。
【図２】制御設定レジスタ及びカウンタレジスタのレイアウト例を示す説明図である。
【図３】情報処理装置の機能例を示す機能ブロック図である。
【図４】サンプリングテーブルのレコードレイアウトの一例を示す説明図である。
【図５】サンプリングテーブルのレコードレイアウトの一例を示す説明図である。
【図６】プロファイラが一定時間間隔でＯＳ及びユーザプログラムから呼び出された関数に関する情報をサンプリングするタイミングを示す説明図である。
【図７】集計テーブルのレコードレイアウトの一例を示す説明図である。
【図８】アイドル要因関数である確率が高いユーザ関数を抽出する処理の手順の一例を示すフローチャートである。
【図９】設定処理の手順の一例を示すフローチャートである。
【図１０】サンプリング処理の手順の一例を示すフローチャートである。
【図１１】解析処理の手順の一例を示すフローチャートである。
【図１２】収集処理の手順の一例を示すフローチャートである。
【図１３】プロセス関数名変換処理の手順の一例を示すフローチャートである。
【図１４】算出処理の手順の一例を示すフローチャートである。
【図１５】算出処理の手順の一例を示すフローチャートである。
【図１６】プロファイラが一定時間間隔でＯＳ関数及びユーザ関数に関する情報をサンプリングするタイミングを示す説明図である。
【図１７】情報処理装置の機能例を示す機能ブロック図である。
【図１８】アイドル要因関数決定部による出力用データの一例を示す説明図である。
【図１９】アイドル要因関数を決定する処理の手順の一例を示すフローチャートである。
【図２０】トレースコード処理の手順の一例を示すフローチャートである。
【図２１】トレース結果取得処理の手順の一例を示すフローチャートである。
【図２２】アイドル要因関数決定処理の手順の一例を示すフローチャートである。
【図２３】情報処理装置の機能例を示す機能ブロック図である。
【図２４】アイドル要因関数を決定する処理の手順の一例を示すフローチャートである。
【図２５】コード変換処理の手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
本実施の形態に係る情報処理装置を、その図面に基づいて説明する。
【００１１】
実施の形態１
図１は、情報処理装置１０のハードウェア構成例を示すブロック図である。情報処理装置１０は、例えば汎用コンピュータ、ワークステーション、ＰＣ（パーソナルコンピュータ）等である。情報処理装置１０は、演算処理装置としてのＣＰＵ（演算処理装置、収集部、集計部、算出部、抽出部、トレース収集部、特定部、変換部）１１及びＲＯＭ（Read Only Memory）１２を含む。また、情報処理装置１０は、ＲＡＭ（Random Access Memory）（記憶部）１３、ハードディスク（記憶部）１４、ディスクドライブ１５、表示部１６、操作部１７及び通信部１８を含む。
【００１２】
ＣＰＵ１１は、ソフトウェアプログラムに記述された命令セットを実行するためのプロセッサである。ＣＰＵ１１は、情報処理装置１０の各構成部を制御する。ＣＰＵ１１は、ハードディスク１４に記憶されたＯＳ（Operating System、オペレーションシステム）１００、ユーザプログラム１ＵＰ及びプログラム（性能情報収集プログラム）１ＰをＲＡＭ１３に読み出し、ＲＡＭ１３に読み出した各ソフトウェアを実行する。
【００１３】
ＯＳ１００は、ハードウェア上で動作する基本ソフトウェアである。ＯＳ１００は、ＣＰＵ１１内部のレジスタのオーバーフローに基づいて、ＯＳ１００自身及びユーザプログラム１ＵＰのパフォーマンスをプロファイルするプロファイラ（収集部）を有している。
ユーザプログラム１ＵＰは、ユーザが作成したプログラムである。ユーザプログラム１ＵＰは、ＯＳ１００の制御の下、実行されるアプリケーションプログラムである。
プログラム１Ｐは、ユーザプログラム１ＵＰの性能を解析する機能を有しており、ＯＳ１００の中に組み込まれていてもよいし、ＯＳ１００と独立していてもよい。図１の例では、プログラム１Ｐは、ＯＳ１００と独立して、ハードディスク１４に記憶されている。
【００１４】
ＣＰＵ１１は、ＰＩＤ（Process ID）レジスタ１１１、タイマ（時計部）１１２、制御設定レジスタ１１３、カウンタレジスタ１１４及びプログラムカウンタ１１５を含む。ＰＩＤレジスタ１１１等は、パフォーマンス・イベントをモニターするためのハードウェア構成部である。
ＰＩＤはＯＳ１００が実行しているプロセスの識別子であり、ＰＩＤレジスタ１１１はＰＩＤを一時的に記憶するレジスタである。タイマ１１２は、タイムスタンプカウンタであり、クロックサイクルに基づいて、時刻を計時する計時部である。
【００１５】
制御設定レジスタ１１３及びカウンタレジスタ１１４は、ＯＳ１００が有しているプロファイラが割り込み処理を実行するためのレジスタである。制御設定レジスタ１１３は、タイマ１１２によるカウントの制御パラメータを一時的に記憶する。カウンタレジスタ１１４は、タイマ１１２のクロックサイクル毎に増加するカウント値をカウントし、カウントした結果を一時的に記憶するレジスタである。プログラムカウンタ１１５は、ＣＰＵ１１が次に実行する命令を記憶したＲＡＭ１３上のアドレスを一時的に格納するレジスタである。
【００１６】
ＲＯＭ１２は、例えば不揮発性の半導体メモリ又は半導体メモリ以外の読み出し専用記憶媒体である。ＲＯＭ１２は、情報処理装置１０の起動時にＣＰＵ１１が実行するＢＩＯＳ（Basic Input_Output System）、ファームウェア等を記憶している。
【００１７】
ＲＡＭ１３は、主記憶装置である。ＲＡＭ１３は、例えばＳＲＡＭ又はＤＲＡＭであり、ＣＰＵ１１が実行する処理の過程で必要な作業変数、データ等を一時的に記憶する。なお、ＲＡＭ１３の代わりにフラッシュメモリ、メモリカード等が用いられてもよい。
【００１８】
ハードディスク１４は、補助記憶装置である。ハードディスク１４は、大容量の情報の記憶が可能なフラッシュメモリ又はＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ＢＤ（Blu-ray Disc、登録商標）等の光ディスク１ｄで代替されてもよい。ハードディスク１４は、ＣＰＵ１１が実行するＯＳ１００、ユーザプログラム１ＵＰ及びプログラム１Ｐ並びに各種テーブルを記憶している。なお、ユーザプログラム１ＵＰは、バイナリデータである。ユーザプログラム１ＵＰのソースファイルは、ハードディスク１４に記憶されていてもよいし、記憶されていなくてもよい。
【００１９】
各種テーブルは、サンプリングテーブル１Ｔ及び集計テーブル２Ｔを含む。サンプリングテーブル１Ｔは、ＯＳ１００及びユーザプログラム１ＵＰから呼び出される関数の動作情報を記録するテーブルである。集計テーブル２Ｔは、サンプリングテーブル１Ｔのデータを集計した結果を記録するテーブルである。サンプリングテーブル１Ｔ及び集計テーブル２Ｔの詳細については、後述する。
【００２０】
ハードディスク１４は、情報処理装置１０の内部に取り付けられるものであっても、情報処理装置１０の外部に置かれるものであってもよい。例えば、ハードディスク１４に記憶された各種テーブルは、外部のデータベースサーバに記憶されていてもよい。かかる場合、情報処理装置１０は、外部のデータベースサーバにアクセスして、サンプリングテーブル１Ｔに記憶されている情報を取得し、取得した情報に基づき、集計テーブル２Ｔを更新してもよい。
【００２１】
ディスクドライブ１５は、外部の記憶媒体であるＣＤ、ＤＶＤ、ＢＤ等の光ディスク１ｄから情報を読み出し、光ディスク１ｄに情報を記録する。
【００２２】
表示部１６は、画像を表示する表示装置である。表示部１６は、例えば液晶ディスプレイ、有機ＥＬ（Electro Luminescence）ディスプレイ、ＣＲＴ（Cathode Ray Tube）ディスプレイ等の画面を有し、ＣＰＵ１１からの指示に従って、ＯＳ１００、ユーザプログラム１ＵＰ及びプログラム１Ｐに係る各種情報を表示する。
【００２３】
操作部１７は、ユーザが各種の入力を行うキーボード、マウス、電源スイッチ、ディスクドライブ１５から光ディスク１ｄを排出するための操作ボタン等の入力デバイスである。操作部１７は、ユーザによる操作に基づいて入力信号を生成する。生成された入力信号は、バス１ｂを介してＣＰＵ１１に送信される。
【００２４】
通信部１８は、有線又は無線通信のモデム、ＬＡＮカード、ルータ、ＵＳＢ端子、接続コネクタ等である。通信部１８は、ＬＡＮ、ＷＡＮ、電話回線、衛星通信回線、インターネット等のネットワーク１Ｎと接続されている。通信部１８は、パラレルポート又はプリンタポートを備えていてもよい。
【００２５】
なお、ＣＰＵ１１は、ディスクドライブ１５を介して、プログラム１Ｐを光ディスク１ｄから読み込んでもよい。ＣＰＵ１１は、通信部１８を介して、プログラム１Ｐを外部の情報処理装置又は記憶装置から読み込んでもよい。さらに、プログラム１Ｐを記憶したフラッシュメモリ等の半導体メモリ１ｍが、情報処理装置１０内に実装されていてもよい。
【００２６】
図２は、制御設定レジスタ１１３及びカウンタレジスタ１１４のレイアウト例を示す説明図である。制御設定レジスタ１１３は、ＦＩＸＥＤ＿ＣＴＲ＿ＣＴＲＬ１１３ａ、ＰＥＲＦ＿ＧＬＯＢＡＬ＿ＣＴＲＬ１１３ｂ及びＦＩＸＥＤ＿ＯＶＦ＿ＣＴＲＬ１１３ｃを含む（図２Ａ、図２Ｂ及び図２Ｃ）。図２Ｄに示すカウンタレジスタ１１４は、例えば６４ビットのレジスタである。
【００２７】
図２ＡのＦＩＸＥＤ＿ＣＴＲ＿ＣＴＲＬ１１３ａは、カウントの有効、無効を設定する場合に利用される例えば６４ビットのレジスタである。４ビット目に１が設定された場合、ＯＳ１００の実行時にカウントが有効にされる。４ビット目に０が設定された場合、ＯＳ１００の実行時にカウントが無効にされる。５ビット目に１が設定された場合、ユーザブログラム１ＵＰの実行時にカウントが有効にされる。５ビット目に０が設定された場合、ユーザプログラム１ＵＰの実行時にカウントが無効にされる。
【００２８】
図２ＢのＰＥＲＦ＿ＧＬＯＢＡＬ＿ＣＴＲＬ１１３ｂは、カウントの有効、無効を設定する場合に利用される例えば６４ビットのレジスタである。３３ビット目に１が設定された場合、カウントが有効にされる。３３ビット目に０が設定された場合、カウントが無効にされる。７ビット目に１が設定された場合、カウンタレジスタ１１４がオーバーフローした際、ＯＳ１００のプロファイラはプロセスに割り込みを発生させる。
【００２９】
図２ＣのＦＩＸＥＤ＿ＯＶＦ＿ＣＴＲＬ１１３ｃは、カウントのオーバーフローをクリアする場合に利用される例えば６４ビットのレジスタである。カウンタレジスタ１１４がオーバーフローした場合、３３ビット目は１になる。
【００３０】
次に、情報処理装置１０の機能について説明する。
図３は、情報処理装置１０の機能例を示す機能ブロック図である。情報処理装置１０の各機能部は、ハードディスク１４に記憶されたＯＳ１００、ユーザプログラム１ＵＰ及びプログラム１Ｐと、ＣＰＵ１１、ＲＡＭ１３等のハードウェア資源とが協働して動作することにより実現される。
【００３１】
情報処理装置１０は、プロファイラ１ｐｒ、解析部１ａｎ及び出力部８０を含む。プロファイラ１ｐｒは、ＯＳ１００に含まれる機能部であり、一定時間間隔でＯＳ１００及びユーザプログラム１ＵＰの動作に関する情報をＣＰＵ１１からサンプリングする。なお、プロファイラ１ｐｒは、プログラム１Ｐに含まれる機能部でもある。
解析部１ａｎは、プログラム１Ｐに含まれる機能部であり、プロファイラ１ｐｒがサンプリングした情報を利用して、ユーザプログラム１ＵＰから呼び出された関数のうち、ＣＰＵ１１をアイドル状態にする可能性の高い関数を抽出する。
出力部８０は、プログラム１Ｐに含まれる機能部であり、解析部１ａｎが抽出したユーザプログラム１ＵＰの関数に関する情報を出力する機能部である。
【００３２】
プロファイラ１ｐｒは、コード実行部１１ｐｒ、設定制御部１２ｐｒ、割り込みハンドら部１３ｐｒ及び記録部１４ｐｒを含む。コード実行部１１ｐｒは、解析部１ａｎが解析対象とするユーザプログラム１ＵＰを実行させる機能部である。設定制御部１２ｐｒは、サンプリング内容、サンプリング時間間隔等の設定と、カウンタレジスタ１１４に記憶されるカウント値のカウント等を制御する。設定制御部１２ｐｒが設定するサンプリング内容は、ＯＳ１００及びユーザプログラム１ＵＰから呼び出された関数に関する例えばＰＩＤ、ＲＡＭ１３上のアドレス及びサンプリング時刻である。
【００３３】
割り込みハンドラ部１３ｐｒは、ＣＰＵ１１に対して、実行中の処理を中断させ、設定制御部１２ｐｒが設定した情報をサンプリングする処理を要求する機能部である。ＣＰＵ１１は、ＰＩＤをＰＩＤレジスタ１１１から、関数のアドレスをプログラムカウンタ１１５から、サンプリング時刻をタイマ１１２から取得する。記録部１４ｐｒは、割り込みハンドラ部１３ｐｒがＣＰＵ１１にサンプリングさせたＯＳ１００及びユーザプログラム１ＵＰの動作に関する上記情報をＲＡＭ１３に記録する機能部である。記録部１４ｐｒは、サンプリングされた情報を例えばサンプリングテーブル１Ｔの書式でＲＡＭ１３に記録する。
【００３４】
図４は、サンプリングテーブル１Ｔのレコードレイアウトの一例を示す説明図である。サンプリングテーブル１Ｔは、サンプリング結果の記録に関するデータ管理方式の一例である。サンプリングテーブル１Ｔは、ＰＩＤ、アドレス、時刻、プロセス名及び関数名の各列を含む。
ＰＩＤは、ＯＳ１００及びユーザプログラム１ＵＰから呼び出されたサンプリング対象である関数に対応するプロセスの識別情報である。アドレスは、サンプリング対象の関数が記憶されているＲＡＭ１３上のアドレスである。時刻は、サンプリング時刻である。プロセス名は、ＰＩＤに対応するプロセスの名称である。関数名は、ＯＳ１００及びユーザプログラム１ＵＰから呼び出されたサンプリング対象の関数の名称である。
【００３５】
割り込みハンドラ部１３ｐｒによりサンプリングされた情報を記録部１４ｐｒが記録する段階では、プロセス名及び関数名は不明であるため、図４のプロレス名及び関数名の列は空欄になっている。
【００３６】
図３に戻り、説明を続ける。
解析部１ａｎは、収集部１１ａｎ及び関数名取得部（変換部）１２ａｎを含む。収集部１１ａｎは、プロファイラ１ｐｒの記録部１４ｐｒがＲＡＭ１３に記録したサンプリングテーブル１Ｔの内容をハードディスク１４に書き込む機能部である。
【００３７】
関数名取得部１２ａｎは、プロファイラ１ｐｒがサンプリングした関数に対応する関数名及びプロセス名を取得する機能部である。例えば図４において、ＰＩＤ＝「０」、アドレス＝「ｆｆｆｆｆｆｆｆ・・・」の行は、ＯＳ１００の関数に関するサンプリングデータであることを示している。また、図４において、ＰＩＤ＝「０」、アドレス＝「ｆｆｆｆｆｆｆｆ・・・」以外の行は、ユーザプログラム１ＵＰの関数に関するサンプリングデータであることを示している。関数名取得部１２ａｎは、ＯＳ１００から、図４のＯＳ１００のＰＩＤ及びアドレスに夫々対応するプロセス名及び関数名を取得する。関数名取得部１２ａｎは、ユーザプログラム１ＵＰのバイナリデータから、図４のユーザプログラム１ＵＰのＰＩＤ及びアドレスに夫々対応するプロセス名及び関数名を取得する。関数名取得部１２ａｎは、取得した各関数に対応するプロセス名及び関数名を、例えばサンプリングテーブル１Ｔとしてハードディスク１４に書き込む。
【００３８】
図５は、サンプリングテーブル１Ｔのレコードレイアウトの一例を示す説明図である。図５は、関数名取得部１２ａｎがサンプリングテーブル１Ｔのプロセス名及び関数名の各列に、取得したプロセス名及び関数名を夫々追記した様子を示している。
【００３９】
解析部１ａｎは、算出部（集計部、算出部、抽出部）１３ａｎを含む。算出部１３ａｎは、サンプリングテーブル１Ｔに基づいて、ＣＰＵ１１をアイドル状態にした可能性が高いユーザプログラム１ＵＰの関数を抽出するための数値を算出する機能部である。以下、ＯＳ１００に含まれる関数をＯＳ関数、ユーザプログラム１ＵＰに含まれる関数をユーザ関数と呼ぶ。また、ＣＰＵ１１をアイドル状態にするＯＳ関数をアイドル関数、ＯＳのアイドル関数を呼び出すユーザ関数をアイドル要因関数と呼ぶ。
【００４０】
図６は、プロファイラ１ｐｒが一定時間間隔でＯＳ１００及びユーザプログラム１ＵＰから呼び出された関数に関する情報をサンプリングするタイミングを示す説明図である。図６の横軸は、時間を示している。上から下へ向かう稲妻を模した矢印は、プロファイラ１ｐｒによるサンプリングのタイミングを示している。斜線入りの矢印は、プロファイラ１ｐｒがアイドル要因関数に関する情報をサンプリングするタイミングを示している。
【００４１】
時間の経過と共に、ユーザプログラム１ＵＰからユーザ関数が、ＯＳ１００からＯＳ関数が次々と呼び出され、ＣＰＵ１１により実行される。図６は、ＣＰＵ１１がユーザ関数を実行しているタイミングを白抜きのボックスで、ＯＳ関数を実行しているタイミングを斜線入りのボックスで示している。
【００４２】
いま、ユーザ関数に対応するプロセスが複数あり、複数のプロセスが例えばセマフォに係る共有資源を保有しているとする。かかる場合、複数のプロセスが共有資源に同時にアクセスしないように、ＯＳ１００がＣＰＵ１１をアイドル状態にするアイドル関数（例えば図５におけるｐｏｌｌ＿ｉｄｌｅ）を呼び出すことが考えられる。このような場合、ＣＰＵ１１の使用率は、低下する。
ＣＰＵ使用率が低い状態でプロファイラ１ｐｒによりサンプリングが実行された場合、アイドル要因関数に関する情報がサンプリングされた後、１サンプリング周期の後に、アイドル関数に関する情報がサンプリングされる可能性が高いと考えられる。
【００４３】
一定の時間範囲では、１つのユーザ関数だけが実行されるかもしれないし、異なる複数のユーザ関数が連続して実行されるかもしれない。そのため、プロファイラ１ｐｒがアイドル関数に関する情報をサンプリングする１サンプリング周期前に実行される関数は、アイドル要因関数ではないかもしれない。また、プロファイラ１ｐｒがアイドル要因関数に関する情報をサンプリングした１サンプリング周期後に実行される関数は、アイドル要因関数以外のユーザ関数かもしれない。しかし、サンプリング型のプロファイラ１ｐｒが収集する情報が統計的要約である以上、サンプリングテーブル１Ｔのデータを統計処理することにより、ユーザ関数をアイドル要因関数の可能性が高い関数と、そうでない関数とに区分することができる。また、サンプリングテーブル１Ｔのデータを統計処理することにより、ユーザ関数をアイドル要因関数の可能性が高い順に並び替えることができる。
【００４４】
算出部１３ａｎは、ユーザ関数毎に、プロファイラ１ｐｒがサンプリングしたサンプリング回数を集計する。算出部１３ａｎは、ユーザ関数毎に、ユーザ関数に関する情報がサンプリングされた１サンプリング周期後にアイドル関数に関する情報がサンプリングされた回数を集計する。算出部１３ａｎは、ユーザ関数毎に、ユーザ関数に関する情報がサンプリングされた１サンプリング周期後にアイドル関数以外の関数に関する情報がサンプリングされた回数を集計する。算出部１３ａｎは、集計した結果をハードディスク１４に記憶された集計テーブル２Ｔに書き込む。
【００４５】
図７は、集計テーブル２Ｔのレコードレイアウトの一例を示す説明図である。集計テーブル２Ｔは、順位、関数名、総サンプリング回数、Ａ回数、Ｂ回数及び割合の各列を含む。
順位については、後述する。関数名は、サンプリングテーブル１Ｔの関数名と同じである。総サンプリング回数は、プロファイラ１ｐｒによりユーザ関数についてサンプリングが実行された総回数である。Ａ回数は、プロファイラ１ｐｒによりユーザ関数に関する情報がサンプリングされた１サンプリング周期後にアイドル関数に関する情報がサンプリングされた回数を、ユーザ関数毎に集計した回数である。Ｂ回数は、プロファイラ１ｐｒによりユーザ関数に関する情報がサンプリングされた１サンプリング周期後にアイドル関数以外の関数に関する情報がサンプリングされた回数を、ユーザ関数毎に集計した回数である。Ｂ回数に係るアイドル関数以外の関数は、ユーザ関数及びアイドル関数以外のＯＳ関数である。
Ａ回数とＢ回数との合計は、総サンプリング回数に等しい。
【００４６】
算出部１３ａｎは、ユーザ関数毎に、Ａ回数を総サンプリング回数で除算し、１００倍した値を求める。算出部１３ａｎは、求めた値を集計テーブルの割合列に書き込む。すなわち、集計テーブル２Ｔの割合は、アイドル関数に関する情報がサンプリングされる１サンプリング周期前に、サンプリングされたユーザ関数の統計的実行頻度を示している。換言すると、集計テーブル２Ｔの割合が大きいユーザ関数は、アイドル関数の実行時刻の少し前に実行されることが多い。
【００４７】
算出部１３ａｎは、集計テーブル２Ｔのレコードを割合の降順に並び替える。算出部１３ａｎは、並び替えたレコードに対応する集計テーブル２Ｔの順位に、割合の大きいものから昇順に、１、２、３・・・と番号を書き込む。すなわち、集計テーブル２Ｔには、サンプリングされたユーザ関数がアイドル関数の実行時刻の少し前に実行される可能性が高い順にソートした結果が記録される。
算出部１３ａｎは、集計テーブル２Ｔから全ユーザ関数のうち、順位が例えば上位１０％に入るユーザ関数を抽出する。算出部１３ａｎは、抽出したユーザ関数に対応する集計テーブル２Ｔ及びサンプリングテーブル１Ｔのデータを出力部８０に与える。
【００４８】
なお、サンプリングテーブル１Ｔ及び集計テーブル２Ｔは、リレーショナルデータベースにおけるテーブル、スプレッドシート、ＣＳＶ等のテキスト等のいずれでもよく、特定のデータ管理方式に限定されない。
【００４９】
出力部８０は、算出部１３ａｎが抽出した集計テーブル２Ｔの内容及び当該内容に対応するサンプリングテーブル１Ｔの内容を、例えば表示部１６に表示する。出力部８０は、通信部１８を介して、同様の内容を外部の情報処理装置に送信してもよい。
【００５０】
次に、情報処理装置１０の動作について説明する。
図８は、アイドル要因関数である確率が高いユーザ関数を抽出する処理の手順の一例を示すフローチャートである。図８は、処理の概要を示している。
ＣＰＵ１１は、ユーザプログラム１ＵＰを実行する（ステップＳ１）。ＣＰＵ１１は、サンプリングする内容設定及びカウンタレジスタ１１４のオーバーフローに係るカウント設定を行う（ステップＳ２）。ＣＰＵ１１は、ＯＳ関数及びユーザ関数に関する動作情報のサンプリング処理を実行する（ステップＳ３）。
【００５１】
ＣＰＵ１１は、収集したサンプリングテーブル１Ｔのデータを解析して、アイドル要因関数である確率が高いユーザ関数を抽出する（ステップＳ４）。ＣＰＵ１１は、抽出したアイドル要因関数である確率が高いユーザ関数に係る情報を外部に出力し（ステップＳ５）、処理を終了する。
【００５２】
図９は、設定処理の手順の一例を示すフローチャートである。図９の処理は、図８の設定処理（ステップＳ２）に対応する。
【００５３】
ＣＰＵ１１は、オーバーフローさせるカウンタレジスタ１１４のビットをクリアする（ステップＳ２１）。ＣＰＵ１１は、カウンタレジスタ１１４がオーバーフローした場合、割り込みを発生させるように設定する（ステップＳ２２）。ＣＰＵ１１は、クロックカウントをセットして、サンプリングを実行するためのサンプリング時間間隔を設定する（ステップＳ２３）。ＣＰＵ１１は、ＯＳ１００及びユーザプログラム１ＵＰの実行時におけるカウントを有効に設定し（ステップＳ２４）、処理を終了する。
【００５４】
図１０は、サンプリング処理の手順の一例を示すフローチャートである。図１０の処理は、図８のサンプリング処理（ステップＳ３）に対応する。
ＣＰＵ１１は、タイマ１１２の計時に基づいて一定時間が経過したか否か、あるいはＲＡＭ１３の使用率が一定値以上に達したか否かを判定する（ステップＳ３１）。ＣＰＵ１１は、一定時間が経過したと判定した場合、あるいはＲＡＭ１３の使用率が一定値以上に達したと判定した場合（ステップＳ３１：ＹＥＳ）、処理を終了する。
【００５５】
ＣＰＵ１１は、一定時間が経過していないと判定した場合、あるいはＲＡＭ１３の使用率が一定値以上に達していないと判定した場合（ステップＳ３１：ＮＯ）、以下の処理を実行する。すなわち、ＣＰＵ１１は、実行中のプロセスを中断し、中断したプロセスに対応した関数に係るＰＩＤ、ＲＡＭ１３上のアドレス及び現在時刻を、夫々ＰＩＤレジスタ１１１、プログラムカウンタ１１５及びタイマ１１２から取得する（ステップＳ３２）。ＣＰＵ１１は、取得したＰＩＤ、アドレス及び時刻をＲＡＭ１３に記録する（ステップＳ３３）。ＣＰＵ１１は、設定処理（ステップＳ２）を実行し（ステップＳ３４）、ステップＳ３１に処理を戻す。
【００５６】
図１１は、解析処理の手順の一例を示すフローチャートである。図１１の処理は、図８の解析処理（ステップＳ４）に対応する。図１１は、解析処理の概要を示している。
ＣＰＵ１１は、一定時間間隔でサンプリングしたＯＳ関数及びユーザ関数に関するＰＩＤ、アドレス及び時刻を収集する収集処理を実行する（ステップＳ４１）。ＣＰＵ１１は、収集したＰＩＤ及びアドレスを夫々プロセス名及び関数名に変換するプロセス関数名変換処理を実行する（ステップＳ４２）。ＣＰＵ１１は、ユーザ関数毎にアイドル要因関数である確率を算出する算出処理を実行し（ステップＳ４３）、処理を終了する。
【００５７】
図１２は、収集処理の手順の一例を示すフローチャートである。図１２の処理は、図１１の収集処理（ステップＳ４１）に対応する。
ＣＰＵ１１は、図１０のステップＳ３３においてＲＡＭ１３に記録したＯＳ関数及びユーザ関数のＰＩＤ、アドレス及び時刻をハードディスク１４に記憶されているサンプリングテーブル１Ｔに書き込み（ステップＳ４１１）、処理を終了する。
【００５８】
図１３は、プロセス関数名変換処理の手順の一例を示すフローチャートである。図１３の処理は、図１１のプロセス関数名変換処理（ステップＳ４２）に対応する。
ＣＰＵ１１は、サンプリングテーブル１Ｔから未処理であるＯＳ関数並びにユーザ関数のＰＩＤ及びアドレスを夫々読み出す（ステップＳ４２１）。ＣＰＵ１１は、ＯＳ１００及びユーザプログラム１ＵＰのバイナリデータを参照し、読み出したＰＩＤ及びアドレスを夫々プロセス名及び関数名に変換する（ステップＳ４２２）。
【００５９】
ＣＰＵ１１は、特定したＯＳ関数及びユーザ関数に係るプロセス名及び関数名をサンプリングテーブル１Ｔに書き込む（ステップＳ４２３）。ＣＰＵ１１は、サンプリングテーブル１Ｔに未処理のＯＳ関数又はユーザ関数があるか否かを判定する（ステップＳ４２４）。ＣＰＵ１１は、サンプリングテーブル１Ｔに未処理のＯＳ関数又はユーザ関数があると判定した場合（ステップＳ４２４：ＹＥＳ）、ステップＳ４２１に処理を戻す。
【００６０】
ＣＰＵ１１は、サンプリングテーブル１Ｔに未処理のＯＳ関数又はユーザ関数がないと判定した場合（ステップＳ４２４：ＮＯ）、処理を終了する。
【００６１】
図１４及び図１５は、算出処理の手順の一例を示すフローチャートである。図１４及び図１５の処理は、図１１の算出処理（ステップＳ４３）に対応する。
ＣＰＵ１１は、サンプリングテーブル１Ｔにおいて、未処理のユーザ関数のレコードを１つ選択する（ステップＳ４３１）。ステップＳ４３１において、ＣＰＵ１１は、時刻が古いレコードから新しいレコードへ向かって、１つずつユーザ関数のレコードを選択する。ＣＰＵ１１は、選択したユーザ関数の関数名が集計テーブル２Ｔに書かれているか否かを判定する（ステップＳ４３２）。
【００６２】
ＣＰＵ１１は、選択したユーザ関数の関数名が集計テーブル２Ｔに書かれていると判定した場合（ステップＳ４３２：ＹＥＳ）、ステップＳ４３４へ処理を進める。ＣＰＵ１１は、選択したユーザ関数の関数名が集計テーブル２Ｔに書かれていないと判定した場合（ステップＳ４３２：ＮＯ）、選択したユーザ関数の関数名を集計テーブル２Ｔの関数名列に書き込む（ステップＳ４３３）。
【００６３】
ＣＰＵ１１は、集計テーブル２Ｔにおいて、選択したユーザ関数の総サンプリング回数を１回インクリメントする（ステップＳ４３４）。ＣＰＵ１１は、選択したユーザ関数に関する情報をサンプリングした次の１サンプリング周期後に、アイドル関数に関する情報をサンプリングしたか否かを判定する（ステップＳ４３５）。ステップＳ４３５において、ＣＰＵ１１は、サンプリングテーブル１Ｔの時刻からサンプリングされたタイミングを判別し、サンプリングテーブル１Ｔの関数名からアイドル関数を判別する。
【００６４】
ＣＰＵ１１は、アイドル関数に関する情報をサンプリングしたと判定した場合（ステップＳ４３５：ＹＥＳ）、集計テーブル２Ｔにおいて、選択したユーザ関数のＡ回数を１回インクリメントする（ステップＳ４３６）。ＣＰＵ１１は、アイドル関数に関する情報をサンプリングしなかったと判定した場合（ステップＳ４３５：ＮＯ）、集計テーブル２Ｔにおいて、選択したユーザ関数のＢ回数を１回インクリメントする（ステップＳ４３７）。
【００６５】
ＣＰＵ１１は、サンプリングテーブル１Ｔにおいて、未処理のユーザ関数のレコードがあるか否かを判定する（ステップＳ４３８）。ＣＰＵ１１は、サンプリングテーブル１Ｔにおいて、未処理のユーザ関数のレコードがあると判定した場合（ステップＳ４３８：ＹＥＳ）、ステップＳ４３１へ処理を戻す。ＣＰＵ１１は、サンプリングテーブル１Ｔにおいて、未処理のユーザ関数のレコードがないと判定した場合（ステップＳ４３８：ＮＯ）、集計テーブル２Ｔにおいて、ユーザ関数毎に総サンプリング回数に対するＡ回数の割合を算出する（ステップＳ４３９）。
【００６６】
ＣＰＵ１１は、算出した割合をユーザ関数毎に集計テーブル２Ｔの割合列に書き込む（ステップＳ４４０）。ＣＰＵ１１は、集計テーブル２Ｔのレコードを割合の降順に並べ替える（ステップＳ４４１）。ＣＰＵ１１は、並べ替えたレコードの先頭から最後へ向かって、集計テーブル２Ｔの順位列に順位を書き込み（ステップＳ４４２）、処理を終了する。
【００６７】
情報処理装置１０によれば、オーバーヘッドを抑えて、ＣＰＵをアイドル状態にするアプリケーションの箇所を限定することができる。
サンプリング型のプロファイラ１ｐｒは、トレーサのように時間資源及び物理的ハードウェア資源を大量に使用しないため、オーバーヘッドが小さい。プロファイラ１ｐｒが一定時間間隔でサンプリングしたＯＳ関数及びユーザ関数の動作情報を解析することにより、情報処理装置１０はアイドル要因関数である可能性が高いユーザ関数を抽出することができる。
【００６８】
実施の形態２
実施の形態２は、アイドル要因関数である可能性の高いユーザ関数のみをトレースして、アイドル要因関数を特定する形態に関する。
なお、実施の形態２において、実施の形態１と同様である構成要素には同一の参照番号を付してその詳細な説明を省略する。
【００６９】
図１６は、プロファイラ１ｐｒが一定時間間隔でＯＳ関数及びユーザ関数に関する情報をサンプリングするタイミングを示す説明図である。図１６の横軸は、時間を示している。上から下へ向かう稲妻を模した矢印は、プロファイラ１ｐｒによるサンプリングのタイミングを示している。ＣＰＵ１１がユーザ関数を実行しているタイミングは、白抜きのボックスで、ＣＰＵ１１がＯＳ関数を実行しているタイミングは、斜線入りのボックスで示されている。
【００７０】
いま、ＣＰＵ１１によりユーザ関数Ａ、Ｂ、Ｃ、Ｄが連続して実行され、その次にＯＳ関数が実行される処理が２回繰り返されるものとする。また、ユーザ関数Ｄはアイドル要因関数であり、ＣＰＵ１１によりユーザ関数Ｄが実行されることで、ＯＳ関数のアイドル関数が実行されるものとする。これにより、ＣＰＵ使用率は低くなる。この状況下で、図１６に示したサンプリング時間間隔でプロファイラ１ｐｒがサンプリングを実行したとする。
【００７１】
図１６の状況では、プロファイラ１ｐｒは、ユーザ関数Ａ、ユーザ関数Ｄ、アイドル関数、アイドル関数、ユーザ関数Ｃ、アイドル関数、アイドル関数の順にＰＩＤと、ＲＡＭ１３上のアドレスと、時刻とを周期的にサンプリングする。その結果、情報処理装置１０は、ユーザ関数Ｄと、ユーザ関数Ｃとをアイドル要因関数である可能性の高いユーザ関数として抽出する。かかる場合、実際にはアイドル要因関数ではないユーザ関数Ｃもアイドル要因関数である可能性の高いユーザ関数として抽出される。
【００７２】
実施の形態１では、時間的に飛び飛びに取得したデータのみを使用して、あるユーザ関数がアイドル要因関数である可能性が高いかどうかを統計的に算出した。この統計的要約の精度を高めるためには、具体的にはサンプリング時間間隔を狭くする方法がある。しかし、サンプリング時間間隔を狭くした場合、狭くした分だけ、オーバーヘッドが大きくなる。また、サンプリングしたデータを保存するためのＲＡＭ１３の記憶容量も増大させなければならなくなる。
【００７３】
一方、例えばユーザ関数Ａ、Ｂ、Ｃ、Ｄの実行順序が明らかになれば、アイドル要因関数である可能性の高いユーザ関数として抽出されたユーザ関数Ｃは、アイドル要因関数ではないと確実に判定することができる。そのためには、どうしてもトレーサによるユーザプログラム１ＵＰの動作情報収集が必要となる。しかし、トレーサはオーバーヘッドが大きいため、サンプリング時間間隔を狭くすることと同様の課題が発生する。
【００７４】
そこで、実施の形態２では、実施の形態１で抽出されたユーザ関数のみに的を絞って、トレースを実行する。これにより、オーバーヘッドを抑えることができる。トレースでは、ユーザ関数のアドレス及び時刻を取得する。また、アイドル関数が実行される時刻を取得するために、トレースと同時に実施の形態１と同様のプロファイラ１ｐｒによるサンプリングを実行する。アイドル関数が実行される直前に実行されるユーザ関数がアイドル要因関数であるとして、トレーサが収集したユーザ関数の実行時刻と、プロファイラ１ｐｒが収集したアイドル関数のサンプリング時刻とを比較する。例えば図１６の例において、ユーザ関数Ｄの実行時刻及びアイドル関数のサンプリング時刻の差が、ユーザ関数Ｃの実行時刻及びアイドル関数のサンプリング時刻の差よりも小さいことが判明すれば、ユーザ関数Ｄのみをアイドル要因関数に特定することができる。
【００７５】
図１７は、情報処理装置１０の機能例を示す機能ブロック図である。情報処理装置１０の各機能部は、ハードディスク１４に記憶されたＯＳ１００、ユーザプログラム１ＵＰ及びプログラム１Ｐと、ＣＰＵ１１、ＲＡＭ１３等のハードウェア資源とが協働して動作することにより実現される。
なお、実施の形態２では、ハードディスク１４にユーザプログラム１ＵＰのバイナリデータと、コンパイル前のユーザプログラム１ＵＰのソースコードとが記憶されている。また、図１７では、プロファイラ１ｐｒにおける設定制御部１２ｐｒ及び割り込みハンドラ部１３ｐｒと、解析部１ａｎにおける収集部１１ａｎ、関数名取得部１２ａｎ及び算出部１３ａｎとを省略している。
【００７６】
プログラム１Ｐは、抽出結果取得部２０、トレースコード挿入部３０及びリコンパイル部４０を含む。抽出結果取得部２０は、実施の形態１において算出部１３ａｎが集計テーブル２Ｔから抽出した例えば上位１０％のユーザ関数に対応する動作情報をサンプリングテーブル１Ｔから取得する機能部である。
【００７７】
トレースコード挿入部３０は、ユーザプログラム１ＵＰのソースコードにおいて、抽出結果取得部２０により取得されたユーザ関数が記述された位置にトレース結果（例えば、トレースログ）を取得するためのコードを挿入する機能部である。このようなソース埋め込み型のトレーサには、例えばｇｐｒｏｆ、ＣＴｒａｃｅ、ｅｔｒａｃｅ等があり、トレースコード挿入部３０はどのようなトレーサを利用してもよい。以下では、トレースコード挿入部３０は、一例としてｅｔｒａｃｅを利用するものとする。ｅｔｒａｃｅは、ターゲットプログラムのトレース箇所にトレースコードを挿入する。そこで、トレースコード挿入部３０は、抽出結果取得部２０が取得したユーザ関数の関数名に基づいて、ユーザプログラム１ＵＰのソースコードにおける当該ユーザ関数の箇所にトレースコードを挿入する。
【００７８】
リコンパイル部４０は、トレースコード挿入部３０がトレースコードを挿入したユーザプログラム１ＵＰを再コンパイルする機能部である。リコンパイル部４０は、例えばＧＮＵ  Ｃ  Ｃｏｍｐｉｌｅｒの拡張コンパイルオプションである“-finstruments-functions”を用いて、トレースコードを挿入したユーザプログラム１ＵＰを再コンパイルする。“-finstruments-functions”は、ユーザ関数のｅｎｔｒｙとｒｅｔｕｒｎとによって、挿入したトレースコードを実行することが可能である。これにより、ユーザ関数の実行時における様々な動作情報が取得される。実施の形態２では、ユーザ関数のＲＡＭ１３上におけるアドレスと時刻とを取得する。
【００７９】
なお、トレース対象から除くユーザ関数については、トレースコード挿入部３０が以下の宣言をソースコードに挿入することにより、トレース対象から除くことができる。
“_attribute_((no_instrument_function))”
【００８０】
コード実行部１１ｐｒは、リコンパイル部４０が再コンパイルしたユーザプログラムを実行する。その後、プロファイラ１ｐｒ及び解析部１ａｎが実行する処理は、実施の形態１と同様である。
【００８１】
実施の形態２に係る解析部１ａｎは、トレース結果取得部（トレース収集部）１４ａｎ及びアイドル要因関数決定部（特定部）１５ａｎを含む。トレース結果取得部１４ａｎは、トレースコード挿入部３０により挿入されたトレースコードのトレース結果（アドレス及び時刻）をＲＡＭ１３から取得する機能部である。トレース結果取得部１４ａｎは、ユーザプログラムのバイナリデータを参照し、アドレスをユーザ関数の関数名に変換し、変換した関数名とその関数の実行時刻とをＲＡＭ１３に記憶する。
【００８２】
アイドル要因関数決定部１５ａｎは、アイドル要因関数であるユーザ関数を決定する機能部である。アイドル要因関数決定部１５ａｎは、再コンパイルして生成したユーザプログラム１ＵＰを実行して作成されたサンプリングテーブル１Ｔから、アイドル関数のサンプリング時刻を取得する。アイドル要因関数決定部１５ａｎは、トレース結果取得部１４ａｎが変換したユーザ関数の関数名とその実行時刻とを取得する。
【００８３】
アイドル要因関数決定部１５ａｎは、ユーザ関数の実行時刻と、アイドル関数のサンプリング時刻とを照らし合わせ、抽出結果取得部２０が取得したユーザ関数の実行順序を決定する。また、アイドル要因関数決定部１５ａｎは、実行時刻がアイドル関数のサンプリング時刻より前で、アイドル関数のサンプリング時刻に最も近いユーザ関数をアイドル要因関数に決定する。
【００８４】
アイドル要因関数決定部１５ａｎは、決定したアイドル要因関数毎に、その前後に実行されたユーザ関数及びアイドル関数を含めて、実行順に関数を並べた配列を作成する。アイドル要因関数決定部１５ａｎは、作成した関数の配列を、その配列に対応するアイドル関数のサンプリング時刻の昇順に並べ替える。アイドル要因関数決定部１５ａｎは、並べ替えた関数の配列を出力用データとして出力部８０に出力する。
【００８５】
出力部８０は、アイドル要因関数決定部１５ａｎから入力した出力用データを、例えば表示部１６に表示する。出力部８０は、通信部１８を介して、同様の内容を外部の情報処理装置に送信してもよい。
【００８６】
図１８は、アイドル要因関数決定部１５ａｎによる出力用データの一例を示す説明図である。ｆｕｎｃ＿Ｆ、ｆｕｎｃ＿Ｇ、ｆｕｎｃ＿Ｈ、ｆｕｎｃ＿Ｉ、ｆｕｎｃ＿Ｊは、ユーザ関数である。ｉｄｌｅは、アイドル関数である。−＞は実行順序の方向を示している。
図１８の１行目に注目した場合、ｆｕｎｃ＿Ｉがアイドル要因関数であることがわかる。図１８の２行目に注目した場合も、ｆｕｎｃ＿Ｉがアイドル要因関数であることがわかる。ＣＰＵ１１をアイドル状態にするユーザプログラム１ＵＰの箇所を詳細に調査する場合、図１８からｆｕｎｃ＿Ｉを調査対象に決定し、ｆｕｎｃ＿Ｆ、ｆｕｎｃ＿Ｇ、ｆｕｎｃ＿Ｈ及びｆｕｎｃ＿Ｊを調査対象から除けばよいことがわかる。
【００８７】
なお、ユーザプログラム１ＵＰのｆｕｎｃ＿Ｉを調査し、ｆｕｎｃ＿Ｉがアイドル要因関数ではないことが判明した場合、抽出結果取得部２０は、実施の形態１において算出部１３ａｎが集計テーブル２Ｔから抽出した例えば上位１０〜２０％のユーザ関数に対応する動作情報をサンプリングテーブル１Ｔから取得してもよい。情報処理装置１０は、上位１０〜２０％のユーザ関数について、上述と同様の処理を繰り返す。
【００８８】
次に、情報処理装置１０の動作について説明する。
図１９は、アイドル要因関数を決定する処理の手順の一例を示すフローチャートである。図１９は、処理の概要を示している。
ＣＰＵ１１は、トレースコード処理を実行する（ステップＳ１０１）。トレースコード処理は、ユーザプログラム１ＵＰのソースコードにトレースコードを挿入し、再コンパイルする処理である。ＣＰＵ１１は、トレースコードが挿入されたユーザプログラム１ＵＰを実行する（ステップＳ１０２）。
【００８９】
ＣＰＵ１１は、トレース結果取得処理を実行する（ステップＳ１０３）。トレース結果取得処理は、トレースコードの実行によるトレース結果を取得し、取得したトレース結果に基づいて、ユーザ関数の関数名と実行時刻とを対応付けてＲＡＭ１３に記憶する処理である。なお、ＣＰＵ１１は、トレース結果取得処理と同時並行に、図８に示した設定処理（ステップＳ２）、サンプリング処理（ステップＳ３）及び解析処理（ステップＳ４）を実行する。
【００９０】
ＣＰＵ１１は、アイドル要因関数決定処理を実行し（ステップＳ１０４）、処理を終了する。アイドル要因関数決定処理は、ユーザ関数の時効時刻と、アイドル関数のサンプリング時刻とに基づいて、アイドル要因関数を決定する処理である。
【００９１】
図２０は、トレースコード処理の手順の一例を示すフローチャートである。図２０の処理は、図１９のトレースコード処理（ステップＳ１０１）に対応する。
ＣＰＵ１１は、アイドル要因関数である可能性が高いとして抽出されたユーザ関数に関するサンプリングテーブル１Ｔのデータを受け付ける（ステップＳ１０１１）当該データには関数名が含まれている。ＣＰＵ１１は、受け付けたユーザ関数の関数名に基づいて、ユーザプログラム１ＵＰのソースコードにトレースコードを挿入する（ステップＳ１０１２）。ＣＰＵ１１は、トレースコードを挿入したユーザプログラム１ＵＰを再コンパイルし（ステップＳ１０１３）、処理を終了する。
【００９２】
図２１は、トレース結果取得処理の手順の一例を示すフローチャートである。図２１の処理は、図１９のトレース結果取得処理（ステップＳ１０３）に対応する。
ＣＰＵ１１は、トレースコードの実行結果をＲＡＭ１３から読み出す（ステップＳ１０３１）。トレースコードの実行結果には、トレースしたユーザ関数のＲＡＭ１３上におけるアドレス及び実行時刻が含まれている。ＣＰＵ１１は、ユーザプログラム１ＵＰのバイナリデータを参照し、アドレスを関数名に変換する（ステップＳ１０３２）。ＣＰＵ１１は、変換したユーザ関数の関数名と実行時刻とを対応付けてＲＡＭ１３に記憶し（ステップＳ１０３３）、処理を終了する。ここで、アイドル要因関数である可能性が高いユーザ関数が複数であった場合、複数の関数名及び実行時刻がＲＡＭに記憶される。
【００９３】
図２２は、アイドル要因関数決定処理の手順の一例を示すフローチャートである。図２２の処理は、図１９のアイドル要因関数決定処理（ステップＳ１０４）に対応する。
ＣＰＵ１１は、トレースコードが挿入されたユーザプログラム１ＵＰの実行により生成されたサンプリングテーブル１Ｔから、アイドル関数を１つ選択する（ステップＳ１０４１）。ＣＰＵ１１は、トレースコードが挿入されたユーザプログラム１ＵＰの実行により生成されたサンプリングテーブル１Ｔから、選択したアイドル関数のサンプリング時刻を読み出す（ステップＳ１０４２）。
【００９４】
ＣＰＵ１１は、ＲＡＭ１３に対応付けて記憶しているユーザ関数の関数名及び実行時刻の１つを選択する（ステップＳ１０４３）。ＣＰＵ１１は、読み出したアイドル関数のサンプリング時刻と、選択したユーザ関数の実行時刻との差を算出する（ステップＳ１０４４）。ステップＳ１０４３において、ＣＰＵ１１は、選択したユーザ関数の実行時刻が読み出したアイドル関数のサンプリング時刻より後の時刻である場合、算出処理を実行しない。
【００９５】
ＣＰＵ１１は、算出した時刻差、ユーザ関数の関数名及びアイドル関数の関数名を対応付けて、ＲＡＭ１３に記憶する（ステップＳ１０４５）。ＣＰＵ１１は、未処理のユーザ関数があるか否かを判定する（ステップＳ１０４６）。ＣＰＵ１１は、未処理のユーザ関数があると判定した場合（ステップＳ１０４６：ＹＥＳ）、ステップＳ１０４３に処理を戻す。ＣＰＵ１１は、未処理のユーザ関数がないと判定した場合（ステップＳ１０４６：ＮＯ）、ＲＡＭ１３に記憶した時刻差、ユーザ関数の関数名及びアイドル関数の関数名のレコードを時刻差の昇順に並べ替える（ステップＳ１０４７）。ＣＰＵ１１は、ステップＳ１０４７で並べ替えたレコードを出力用データとしてＲＡＭ１３に記憶する（ステップＳ１０４８）。
【００９６】
ＣＰＵ１１は、未処理のアイドル関数があるか否かを判定する（ステップＳ１０４９）。ＣＰＵ１１は、未処理のアイドル関数があると判定した場合（ステップＳ１０４９：ＹＥＳ）、ステップＳ１０４１に処理を戻す。ＣＰＵ１１は、未処理のアイドル関数がないと判定した場合（ステップＳ１０４９：ＮＯ）、ステップＳ１０４８でＲＡＭ１３に記憶した出力用データを出力し（ステップＳ１０５０）、処理を終了する。
【００９７】
情報処理装置１０によれば、オーバーヘッドを抑えて、ＣＰＵをアイドル状態にするアプリケーションの箇所を特定することができる。
情報処理装置１０は、アイドル要因関数である可能性が高いユーザ関数の実行順序を明らかにすることで、アイドル要因関数を特定することができる。情報処理装置１０は、アイドル要因関数である可能性が高いユーザ関数に絞って、トレースを実行するため、オーバーヘッドを抑えることができる。トレースのためにユーザプログラム１ＵＰのソースコードにトレースコードを挿入した場合、挿入が原因となってターゲットプログラムであるユーザプログラム１ＵＰの挙動が変化する虞がある。しかし、情報処理装置１０は、一部のユーザ関数のみにトレースコードを挿入するので、ユーザプログラム１ＵＰの挙動変化を抑えることができる。
【００９８】
実施の形態３
実施の形態３は、ユーザ関数の実行を動的にトレースする形態に関する。
なお、実施の形態３において、実施の形態１、２と同様である構成要素には同一の参照番号を付してその詳細な説明を省略する。
【００９９】
図２３は、情報処理装置１０の機能例を示す機能ブロック図である。情報処理装置１０の各機能部は、ハードディスク１４に記憶されたＯＳ１００、ユーザプログラム１ＵＰ及びプログラム１Ｐと、ＣＰＵ１１、ＲＡＭ１３等のハードウェア資源とが協働して動作することにより実現される。
なお、実施の形態３では、ハードディスク１４にユーザプログラム１ＵＰのバイナリデータが記憶されているが、コンパイル前のユーザプログラム１ＵＰのソースコードは記憶されていない。また、図２３では、プロファイラ１ｐｒにおける設定制御部１２ｐｒ及び割り込みハンドラ部１３ｐｒと、解析部１ａｎにおける収集部１１ａｎ、関数名取得部１２ａｎ及び算出部１３ａｎとを省略している。
【０１００】
プログラム１Ｐは、動的変換部５０を含む。動的変換部５０は、ユーザプログラム１ＵＰにおいて、抽出結果取得部２０により取得されたユーザ関数のコードを実行時に動的に変換することにより、フックコードを埋め込む。例えばＧＤＢのｐｔｒａｃｅシステムコールを利用する場合、ターゲットのユーザ関数を子プロセスとして実行し、子プロセスのコードへフックコードを埋め込む。フックコードが実行された場合、親プロセスへ制御が戻る。親プロセスに制御が戻った時点で、子プロセスに係るＲＡＭ１３の領域にアクセスすることで、ユーザ関数のアドレス及び実行時刻を取得することができる。なお、トレース結果であるユーザ関数のアドレス及び実行時刻の取得は、トレース結果取得部１４ａｎにより実行される。
【０１０１】
次に、情報処理装置１０の動作について説明する。
図２４は、アイドル要因関数を決定する処理の手順の一例を示すフローチャートである。図２４は、処理の概要を示している。
ＣＰＵ１１は、ユーザプログラム１ＵＰを実行する（ステップＳ２０１）。ＣＰＵ１１は、コード変換処理を実行する（ステップＳ２０２）。コード変換処理は、ユーザプログラム１ＵＰにおいて、抽出結果取得部２０により取得されたユーザ関数の先頭アドレスにフックコードを埋め込む処理である。ＣＰＵ１１は、変換済みのユーザプログラム１ＵＰを実行する（ステップＳ２０３）。ＣＰＵ１１は、子プロセスに係るユーザ関数のアドレス及び実行時刻を取得する（ステップＳ２０４）。ＣＰＵ１１は、ユーザプログラム１ＵＰのバイナリデータを参照し、ユーザ関数のアドレスを関数名に変換する（ステップＳ２０５）。ＣＰＵ１１は、アイドル要因関数決定処理を実行し（ステップＳ２０６）、処理を終了する。
【０１０２】
なお、ＣＰＵ１１は、ステップＳ２０２〜ステップＳ２０５と同時並行に、図８に示した設定処理（ステップＳ２）、サンプリング処理（ステップＳ３）及び解析処理（ステップＳ４）を実行する。また、ステップＳ２０６のアイドル要因関数決定処理は、図１９のアイドル要因関数決定処理（ステップＳ１０４）と同じである。
【０１０３】
図２５は、コード変換処理の手順の一例を示すフローチャートである。図２５の処理は、図２４のコード変換処理（ステップＳ２０２）に対応する。
ＣＰＵ１１は、アイドル要因関数である可能性が高いとして抽出されたユーザ関数に関するサンプリングテーブル１Ｔのデータを受け付ける（ステップＳ２０２１）。当該データにはユーザ関数のアドレスが含まれている。ＣＰＵ１１は、受け付けたユーザ関数のアドレスに基づいて、ユーザプログラム１ＵＰのバイナリコードから当該ユーザ関数の先頭アドレスを取得する（ステップＳ２０２２）。ＣＰＵ１１は、取得したユーザ関数の先頭アドレスにフックコードを埋め込み（ステップＳ２０２３）、処理を終了する。
【０１０４】
情報処理装置１０によれば、ＣＰＵをアイドル状態にするアプリケーションの箇所を特定することができる。
情報処理装置１０は、ユーザプログラム１ＵＰに対してフックコードを動的に埋め込んで変換する。この処理は、実施の形態２における静的なソース埋め込み型に比べてオーバーヘッドが大きい。しかし、動的変換の場合、ユーザプログラム１ＵＰのソースコードは不要である。従って、実施の形態３に係る情報処理装置１０は、ソースコードが入手不可能なユーザプログラム１ＵＰの問題箇所を特定する場合、より大きな効果を奏する。
【０１０５】
開示された実施の形態は、全ての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上述の説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内での全ての変更が含まれることが意図される。
【０１０６】
また、各実施の形態で記載されている技術的特徴（構成要件）はお互いに組合せ可能であり、組み合わせすることにより、新しい技術的特徴を形成することができる。
【０１０７】
以上の実施の形態に関し、更に以下の付記を開示する。
【０１０８】
（付記１）
演算処理装置がオペレーティングシステムを介して実行するユーザプログラムの性能情報を、記憶部を有する情報処理装置に取得させる性能情報収集プログラムにおいて、
前記情報処理装置に、
前記記憶部に記憶された前記オペレーティングシステムを介した前記ユーザプログラムを前記演算処理装置に実行させる場合、前記オペレーティングシステムから呼び出されたオペレーティングシステム関数の識別情報と前記ユーザプログラムから呼び出されたユーザ関数の識別情報とを、周期的に収集させるとともに前記記憶部に記憶させ、
前記記憶部に記憶されたユーザ関数の識別情報に基づいて、各ユーザ関数が収集された回数である個別ユーザ関数収集回数を、各ユーザ関数の種別毎に集計させ、
前記記憶部に記憶されたオペレーティングシステム関数の識別情報とユーザ関数の識別情報とに基づいて、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の識別情報が収集された一周期前に、前記ユーザ関数の識別情報が収集された個別特定ユーザ関数収集回数を、各ユーザ関数の種別毎に集計させ、
集計された各個別ユーザ関数収集回数に対する各個別特定ユーザ関数収集回数の割合を、前記ユーザ関数の種別毎に算出させる
ことを特徴とする性能情報収集プログラム。
【０１０９】
（付記２）
算出した割合が高いユーザ関数を上位から一又は複数抽出させる
付記１に記載の性能情報収集プログラム。
【０１１０】
（付記３）
前記情報処理装置は時計部を有し、
収集した前記オペレーティングシステム関数及びユーザ関数夫々の識別情報並びに前記時計部が該識別情報の収集時を計時した収集時刻を対応付けて前記記憶部に記憶させる
付記２に記載の性能情報収集プログラム。
【０１１１】
（付記４）
前記識別情報を周期的に収集させる処理と共に、前記オペレーティングシステム及びユーザプログラムの実行時に、抽出した前記割合が高いユーザ関数の識別情報をトレースして収集させ、
周期的に収集させた前記識別情報及び収集時刻並びにトレースして収集した前記識別情報及び前記時計部が計時した前記割合が高いユーザ関数の実行時刻を前記記憶部に記憶させ、
前記記憶部の記憶内容に基づいて、前記割合が高いユーザ関数の実行時刻から、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の収集時刻までの時間が最短であるユーザ関数を特定させる
付記３に記載の性能情報収集プログラム。
【０１１２】
（付記５）
前記識別情報を周期的に収集させる処理は、前記一又は複数のオペレーティングシステム関数及びユーザ関数が前記記憶部に夫々記憶されているアドレスを収集させ、
前記トレースによる収集処理は、抽出した前記割合が高いユーザ関数が前記記憶部に記憶されているアドレスを収集させ、
前記記憶部に記憶されたオペレーティングシステム及びユーザプログラムに基づいて、収集した各アドレスを前記識別情報に変換させる
付記４に記載の性能情報収集プログラム。
【０１１３】
（付記６）
前記識別情報を周期的に収集させる処理は、前記一又は複数のユーザ関数に夫々対応するプロセスの識別子を収集させ、
前記記憶部に記憶されたユーザプログラムに基づいて、収集したプロセスの識別子をプロセス名に変換させる
付記５に記載の性能情報収集プログラム。
【０１１４】
（付記７）
前記記憶部に前記ユーザプログラムのソースコードが記憶されており、
前記ユーザプログラムのソースコードにて、抽出した前記割合が高いユーザ関数の箇所にフックコード又はトレースコードを埋め込ませ、
フックコード又はトレースコードを埋め込んだ前記ユーザプログラムのソースコードをコンパイルさせ、
前記トレースによる収集処理は、コンパイルした前記ユーザプログラムの実行時に、前記割合が高いユーザ関数の識別情報を収集させる
付記４から付記６までのいずれか一つに記載の性能情報収集プログラム。
【０１１５】
（付記８）
前記記憶部に記憶されたユーザプログラムにて、抽出した前記割合が高いユーザ関数の先頭アドレスにフックコードを埋め込ませ、
前記トレースによる収集処理は、埋め込んだフックコードが実行された場合、前記割合が高いユーザ関数の識別情報を収集させる
付記４から付記７までのいずれか一つに記載の性能情報収集プログラム。
【０１１６】
（付記９）
演算処理装置がオペレーティングシステムを介して実行するユーザプログラムの性能情報を取得する情報処理装置において、
前記オペレーティングシステムと前記ユーザプログラムとを記憶する記憶部と、
前記オペレーティングシステムを介した前記ユーザプログラムを前記演算処理装置に実行させる場合、前記オペレーティングシステムから呼び出されたオペレーティングシステム関数の識別情報と前記ユーザプログラムから呼び出されたユーザ関数の識別情報とを、周期的に収集するとともに前記記憶部に記憶する収集部と、
前記記憶部に記憶されたユーザ関数の識別情報に基づいて、各ユーザ関数が収集された回数である個別ユーザ関数収集回数を、各ユーザ関数の種別毎に集計するとともに、前記記憶部に記憶されたオペレーティングシステム関数の識別情報とユーザ関数の識別情報とに基づいて、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の識別情報が収集された一周期前に、前記ユーザ関数の識別情報が収集された個別特定ユーザ関数収集回数を、各ユーザ関数の種別毎に集計する集計部と、
集計された各個別ユーザ関数収集回数に対する各個別特定ユーザ関数収集回数の割合を、前記ユーザ関数の種別毎に算出する算出部と
を有する
ことを特徴とする情報処理装置。
【０１１７】
（付記１０）
前記算出部が算出した割合が高いユーザ関数を上位から一又は複数抽出する抽出部を備える
付記９に記載の情報処理装置。
【０１１８】
（付記１１）
時計部を備え、
前記収集部は収集した前記識別情報及び前記時計部が該識別情報の収集時に計時した収集時刻を対応付けて前記記憶部に記憶する
付記１０に記載の情報処理装置。
【０１１９】
（付記１２）
前記収集部による前記識別情報の周期的な収集と共に、前記オペレーティングシステム及びユーザプログラムの実行時に、前記抽出部が抽出した前記割合が高いユーザ関数の識別情報をトレースして収集するトレース収集部を備え、
前記収集部は収集した前記識別情報及び収集時刻並びに前記トレース収集部が収集した前記識別情報及び前記時計部が計時した前記割合が高いユーザ関数の実行時刻を記憶し、
前記記憶部の記憶内容に基づいて、前記割合が高いユーザ関数の実行時刻から、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の収集時刻までの時間が最短であるユーザ関数を特定する特定部を備える
付記１１に記載の情報処理装置。
【０１２０】
（付記１３）
前記収集部は前記一又は複数のオペレーティングシステム関数及びユーザ関数が前記記憶部に夫々記憶されているアドレスを収集し、
前記トレース収集部は前記割合が高いユーザ関数が前記記憶部に記憶されているアドレスを収集し、
前記記憶部が記憶するオペレーティングシステム及びユーザプログラムに基づいて、前記収集部及びトレース収集部が夫々収集した各アドレスを前記識別情報に変換する変換部を備える
付記１２に記載の情報処理装置。
【０１２１】
（付記１４）
前記収集部は前記一又は複数のユーザ関数に夫々対応するプロセスの識別子を収集し、
前記変換部は、前記記憶部に記憶されたユーザプログラムに基づいて、前記収集部が収集したプロセスの識別子をプロセス名に変換する
付記１３に記載の情報処理装置。
【０１２２】
（付記１５）
演算処理装置がオペレーティングシステムを介して実行するユーザプログラムの性能情報を、記憶部を有する情報処理装置に取得させる性能情報収集方法において、
前記情報処理装置が、
前記記憶部に記憶された前記オペレーティングシステムを介した前記ユーザプログラムを前記演算処理装置に実行させる場合、前記オペレーティングシステムから呼び出されたオペレーティングシステム関数の識別情報と前記ユーザプログラムから呼び出されたユーザ関数の識別情報とを、周期的に収集するとともに前記記憶部に記憶し、
前記記憶部に記憶されたユーザ関数の識別情報に基づいて、各ユーザ関数が収集された回数である個別ユーザ関数収集回数を、各ユーザ関数の種別毎に集計し、
前記記憶部に記憶されたオペレーティングシステム関数の識別情報とユーザ関数の識別情報とに基づいて、前記演算処理装置をアイドル状態にするオペレーティングシステム関数の識別情報が収集された一周期前に、前記ユーザ関数の識別情報が収集された個別特定ユーザ関数収集回数を、各ユーザ関数の種別毎に集計し、
集計された各個別ユーザ関数収集回数に対する各個別特定ユーザ関数収集回数の割合を、前記ユーザ関数の種別毎に算出する
ことを特徴とする性能情報収集方法。
【０１２３】
（付記１６）
算出した割合が高いユーザ関数を上位から一又は複数抽出する
付記１５に記載の性能情報収集方法。
【符号の説明】
【０１２４】
１０      情報処理装置
１１      ＣＰＵ（演算処理装置、収集部、集計部、算出部、抽出部、トレース収集部、特定部、変換部）
１１２    タイマ（時計部）
１３      ＲＡＭ（記憶部）
１４      ハードディスク（記憶部）
１ｐｒ    プロファイラ（収集部）
１１ａｎ  収集部
１２ａｎ  関数名取得部（変換部）
１３ａｎ  算出部（集計部、算出部、抽出部）
１４ａｎ  トレース結果取得部（トレース収集部）
１５ａｎ  アイドル要因関数決定部（特定部）
１Ｐ      プログラム（性能情報収集プログラム）
１００    ＯＳ（オペレーションシステム）
１ＵＰ    ユーザプログラム
【図１】
2014228889.tif 000003
【図２】
2014228889.tif 000004
【図３】
2014228889.tif 000005
【図４】
2014228889.tif 000006
【図５】
2014228889.tif 000007
【図６】
2014228889.tif 000008
【図７】
2014228889.tif 000009
【図８】
2014228889.tif 000010
【図９】
2014228889.tif 000011
【図１０】
2014228889.tif 000012
【図１１】
2014228889.tif 000013
【図１２】
2014228889.tif 000014
【図１３】
2014228889.tif 000015
【図１４】
2014228889.tif 000016
【図１５】
2014228889.tif 000017
【図１６】
2014228889.tif 000018
【図１７】
2014228889.tif 000019
【図１８】
2014228889.tif 000020
【図１９】
2014228889.tif 000021
【図２０】
2014228889.tif 000022
【図２１】
2014228889.tif 000023
【図２２】
2014228889.tif 000024
【図２３】
2014228889.tif 000025
【図２４】
2014228889.tif 000026
【図２５】
2014228889.tif 000027