(57)【要約】【課題】    プログラムの動作に関する影響が少なく、プログラムの実行過程における１以上の測定区間の間の関係性を考慮した性能解析が可能な解析装置等を提供する。【解決手段】    解析装置は、測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、測定区間の開始ポイントと、測定区間の終了ポイントとを検知して、性能解析を実行し、開始ポイントを検知した際に、測定区間に関する性能解析の結果が登録される解析情報を特定する解析情報リンクを１以上保持可能な解析情報リンク保持領域における特定の領域から、当該検知した測定区間に関する第１の解析情報を特定する解析情報リンクを取得し、検知した測定区間を対する子階層の測定区間に関する第２の解析情報と、第１の解析情報とを、プローブの階層関係に基づいて関連付ける解析手段と、解析情報リンク保持領域を保持する記憶手段と、を備える。【選択図】  図３０
2016095757.tif 000002
【特許請求の範囲】
【請求項１】
性能解析の対象である測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、前記測定区間の開始ポイントと、前記測定区間の終了ポイントとを検知して、前記測定区間における性能解析を実行し、
前記プローブのうち、特定プローブにより規定される前記測定区間に関する性能解析の結果が登録される解析情報である第１の解析情報と、前記特定プローブに対する子階層の、前記プローブにより規定される前記測定区間に関する前記解析情報である第２の解析情報とを、前記プローブの階層関係に基づいて関連付ける
解析装置。
【請求項２】
性能解析の対象である測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、前記測定区間の開始ポイントと、前記測定区間の終了ポイントとを検知して、前記測定区間における性能解析を実行し、
前記開始ポイントを検知した際に、前記測定区間に関する性能解析の結果が登録される解析情報を特定可能なデータである解析情報リンクを１以上保持可能な解析情報リンク保持領域における特定の領域から、当該検知した前記開始ポイントにより開始される前記測定区間に関する前記解析情報である第１の解析情報を特定する前記解析情報リンクを取得し、
前記検知した開始ポイントにより開始される前記測定区間を規定する前記プローブに対する子階層の、前記プローブにより規定される前記測定区間に関する前記解析情報である第２の解析情報と、前記第１の解析情報とを、前記プローブの階層関係に基づいて関連付ける
解析手段と、
前記解析情報リンク保持領域を保持する記憶手段と、を備える
解析装置。
【請求項３】
前記解析情報リンク保持領域はスタックにより構成され、
前記解析情報リンク保持領域における特定の領域は、前記スタックの上部であり、
前記解析手段は、前記第１の解析情報を特定する前記解析情報リンクを、前記スタックの上部から取得する
請求項２に記載の解析装置。
【請求項４】
前記解析手段は、前記第１の解析情報と、前記第２の解析情報とを、前記プローブの階層関係を表現可能な木構造のノードに割り当てることにより関連付ける
請求項２又は請求項３に記載の解析装置。
【請求項５】
前記解析情報は、少なくとも、前記プローブを識別可能な識別情報が登録される第１のデータ項目と、前記識別情報により識別される前記プローブにより規定される前記測定区間に関する性能解析の結果が登録される第２のデータ項目と、前記識別情報により識別される前記プローブに対する子階層の、前記プローブにより規定される他の前記測定区間に関する前記解析情報を特定可能な前記解析情報リンクである子階層リンクデータが登録される第３のデータ項目と、を関連付けて保持するエントリを１以上有し、
前記階層的に含まれるプローブの内、同一の階層における前記プローブにより規定される前記測定区間に関する性能解析の結果は、前記解析情報において、異なる前記エントリに登録される
請求項２乃至請求項４のいずれかに記載の解析装置。
【請求項６】
前記解析情報リンク保持領域における特定の領域は、前記スタックの先頭であり、
前記解析手段は、
前記開始ポイントを検知した際に、前記スタックの先頭に格納された前記解析情報リンクを用いて、前記第１の解析情報を取得し、
当該取得した前記第１の解析情報における前記子階層リンクデータに、前記第２の解析情報を特定可能な前記解析情報リンクが設定されていない場合には、当該第２の解析情報を生成し、当該生成した第２の解析情報を特定可能な前記解析情報リンクを前記第１の解析情報における子階層リンクデータに設定するとともに、当該生成した第２の解析情報を特定可能な前記解析情報リンクを前記スタックの先頭に格納し、
前記検知した前記開始ポイントにより開始された前記測定区間に関する性能解析が終了した際、前記スタックの先頭から前記解析情報リンクを取り出した後に、前記スタックの先頭における前記解析情報リンクにより特定される前記第１の解析情報に対して、当該性能解析の結果を登録する
請求項５に記載の解析装置。
【請求項７】
前記解析情報リンク保持領域における特定の領域は、前記スタックの先頭であり、
前記解析手段は、
前記開始ポイントを検知した際に、前記スタックの先頭に、前記第１の解析情報を特定可能な前記解析情報リンクが格納されている場合には、当該前記解析情報リンクを用いて前記第１の解析情報を取得し、
前記スタックの先頭に、前記第１の解析情報を特定可能な前記解析情報リンクが格納されていない場合には、前記第１の解析情報を生成し、
当該前記第１の解析情報における前記子階層リンクデータに設定された前記解析情報リンクを、前記第２の解析情報を特定可能な前記解析情報リンクとして前記スタックの先頭に格納し、
前記検知した前記開始ポイントにより開始された前記測定区間に関する性能解析が終了した際、前記スタックの先頭から前記第２の解析情報を特定可能な前記解析情報リンクを取り出した後に、前記スタックの先頭における前記解析情報リンクにより特定される前記第１の解析情報に対して当該性能解析の結果を登録し、
当該第１の解析情報における前記子階層リンクデータに、前記取り出した前記第２の解析情報を特定可能な前記解析情報リンクを設定する
請求項５に記載の解析装置。
【請求項８】
性能解析の対象である測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、前記測定区間の開始ポイントと、前記測定区間の終了ポイントとを検知して、前記測定区間における性能解析を実行し、
前記開始ポイントを検知した際に、前記測定区間に関する性能解析の結果が登録される解析情報を特定可能なデータである解析情報リンクを１以上保持可能な解析情報リンク保持領域における特定の領域から取得した解析情報リンクに基づいて、前記開始ポイントにより開始される前記測定区間を規定する前記プローブに対する親階層の、前記プローブにより規定される前記測定区間に関する前記解析情報である第２の解析情報を特定し、
当該特定した前記第２の解析情報に基づいて前記開始ポイントにより開始される前記測定区間に関する前記解析情報である第１の解析情報を検索し、
前記第１の解析情報と、前記第２の解析情報とを前記プローブの階層関係に基づいて関連付ける
解析手段と、
前記データ保持領域を保持する記憶手段と、を備える
解析装置。
【請求項９】
前記解析情報は、少なくとも、前記プローブを識別可能な識別情報と、前記識別情報により識別される前記プローブにより規定される前記測定区間に関する性能解析の結果を表す測定値情報と、前記識別情報により識別される前記プローブに対する子階層の、前記プローブにより規定される他の前記測定区間に関する前記解析情報を特定可能な解析情報リンクを保持するリンクテーブルを特定可能なデータと、を保持するコンテキスト情報であり、
前記解析手段は、
前記開始ポイントを検知した際に、前記第２の解析情報における前記リンクテーブルを特定可能なデータに基づいて特定したリンクテーブルが保持する解析情報リンクを用いて、前記第１の解析情報を検索する
請求項８に記載の解析装置。
【請求項１０】
情報処理装置が、
性能解析の対象である測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、前記測定区間の開始ポイントと、前記測定区間の終了ポイントとを検知して、前記測定区間における性能解析を実行し、
前記開始ポイントを検知した際に、前記測定区間に関する性能解析の結果が登録される解析情報を特定可能なデータである解析情報リンクを１以上保持可能な解析情報リンク保持領域における特定の領域から、当該検知した前記開始ポイントにより開始される前記測定区間に関する前記解析情報である第１の解析情報を特定する前記解析情報リンクを取得し、
前記検知した開始ポイントにより開始される前記測定区間を規定する前記プローブに対する子階層の、前記プローブにより規定される前記測定区間に関する前記解析情報である第２の解析情報と、前記第１の解析情報とを、前記プローブの階層関係に基づいて関連付ける
解析方法。
【請求項１１】
コンピュータに、
性能解析の対象である測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、前記測定区間の開始ポイントと、前記測定区間の終了ポイントとを検知して、前記測定区間における性能解析を実行する処理と、
前記開始ポイントを検知した際に、前記測定区間に関する性能解析の結果が登録される解析情報を特定可能なデータである解析情報リンクを１以上保持可能な解析情報リンク保持領域における特定の領域から、当該検知した前記開始ポイントにより開始される前記測定区間に関する前記解析情報である第１の解析情報を特定する前記解析情報リンクを取得する処理と、
前記検知した開始ポイントにより開始される前記測定区間を規定する前記プローブに対する子階層の、前記プローブにより規定される前記測定区間に関する前記解析情報である第２の解析情報と、前記第１の解析情報とを、前記プローブの階層関係に基づいて関連付ける処理と、を実行させる
コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・プログラムの性能解析（性能測定）等に関する。
【背景技術】
【０００２】
ソフトウェア・プログラム（各種コンピュータ・プログラムを含む、以下「プログラム」と称する）の性能を調整（チューニング）する場合、プログラムの各部分の実行時間やキャッシュミス回数などを詳細に測定（プロファイリング）することが重要である。
【０００３】
係るプロファイリングの方法として、例えば、サンプリングを用いたプロファイリング、及び、計測用のプローブを用いたプロファイリングが知られている。
【０００４】
サンプリングを用いたプロファイリングは、例えば、一定周期等の特定のタイミング毎に、計測対象のプログラムにおいて実行されている処理（関数等）を計測する。サンプリングを用いたプロファイリングは、例えば、実行されている処理をカウントした結果に統計的な処理を施すことにより、計測対象のプログラムの性能を解析する。
【０００５】
サンプリングを用いたプロファイリングは、プログラムを修正することなく利用できることから利便性が高いが、精度が低いという問題がある。このため、係る問題を補完すべく、チューニングにおいては、プログラムに計測用のプローブを挿入して正確なプロファイリングを行う、プローブを用いたプロファイリングが用いられることが多い。
【０００６】
図１に例示するように、計測用プローブは、開始プローブと終了プローブとのペアで用いられ、計測対象のプログラムにおいて性能を解析する区間（以下「測定区間」と称する場合がある）に挿入される（埋め込まれる）。即ち、係る測定区間は、開始プローブと終了プローブとにより構成されるプローブによって規定される。なお、係る開始プローブ及び終了プローブは、計測対象のプログラムに関するソースコードに挿入されてもよく、オブジェクトコードあるいは実行コードに挿入されてもよい。
【０００７】
開始プローブ及び終了プローブが呼び出された際（実行された際）、それぞれが呼び出された時点（タイミング）における時刻などの測定対象値が、それぞれ計測（測定）される。そして、それらの差分を求めることにより、開始プローブと終了プローブとの間に含まれる区間におけるプログラムの実行に要した時間などが計測（測定）される。
【０００８】
係るプローブを用いたプロファイリングにより、複数の測定区間において測定対象の計測を実行する場合、例えば、計測用のプローブが複数個所に挿入され、挿入されたプローブのそれぞれに識別用のＩＤ（Ｉｄｅｎｔｉｆｉｅｒ：識別子）付与される。これにより、プローブを用いたプロファイリングは、プログラム中の任意の区間に対する性能を測定可能である。なお、測定対象は、時刻の他に、キャッシュミス回数やメモリアクセス回数などを含んでもよい。これらの測定対象は、一般にプロセッサなどの性能カウンタを用いて計測可能である。具体的な測定対象及び測定方法等は、周知技術の技術を採用することができるので、詳細な説明を省略する。
【０００９】
上記したようなプログラムの性能解析に関連して、以下のような技術が開示されている。
【００１０】
非特許文献１は、関数の入れ子関係（呼び出し関係）を考慮して、関数単位でプログラムのプロファイリングを行う方法を開示している。非特許文献１に開示された技術は、図２に例示するような「ＣａｌｌＲｅｃｏｒｄ」（コールレコード、図２における２００）を、関数の入れ子関係を表すように（概念的な）ツリー状（木構造）に接続する。なお、係るコールレコード２００は、関数のＩＤ、測定値、及び、関数の呼び出し関係を表す情報などを格納する。例えば、関数「ｆｕｎｃ１」から「ｆｕｎｃ２」と「ｆｕｎｃ３」とが呼び出される場合に、非特許文献１に開示された技術が生成するコールレコード（２００）のツリーの具体例を、図３に示す。
【００１１】
また、非特許文献１に開示された技術は、ＳＰＡＲＣ（登録商標）プロセッサのグローバルレジスタに、現在の（現時点において実行している関数に関する）コールレコードへのリンクを保持する。そして、非特許文献１に開示された技術は、新しい関数を実行した際に、その関数の計測値を格納するための新しいコールレコードを作成し、レジスタに格納されている現在のコールレコードに接続することによって、係るツリーを作成する。
【００１２】
非特許文献１に開示された方法は、ツリー状に計測値を格納することから、各関数に関する測定結果（計測結果）を区別して記録することができる。また、常に現在のコールレコードへのリンクがレジスタに格納されていることから、新たなコールレコードを接続すべきコールレコードを、レジスタの参照という短いステップ数によって構成可能な処理によって特定することができる。
【００１３】
また、特許文献１（特開２００９−５２９７４２号公報）は、プログラムの性能プロファイリングのための計測方法に関する技術を開示する。特許文献１に開示された技術は、親関数から子関数を呼び出すコードの近辺に、子関数の呼び出し階層レベルに応じた計測コードを挿入する。特許文献１に開示された技術は、使用可能フラグを用いて計測コードの実行可否を制御する。
【００１４】
特許文献２（特開２０１０−０７９５０８号公報）は、計測対象のプログラムに関する細かい粒度のプロファイルを、サンプリングを用いた方法により取得する方法を開示する。特許文献２に開示された技術は、ＯＳに組み込まれたプロファイル取得ドライバが、特定のタイミング（割り込みタイミング）毎に、計測対象のプログラムに関するプロファイル情報を取得する。
【００１５】
特許文献３（特開２００８−２５７２８７号公報）は、プログラムを構成する各メソッドの実行時間に応じて、当該各メソッドに関する計測内容の粒度を制御する技術を開示する。特許文献３に開示された技術は、プログラムを構成する各メソッドに係る実行時間を計測する。特許文献３に開示された技術は、計測された実行時間が特定の閾値を超えるメソッドを主要メソッドとし、係る主要メソッドに関する詳細な実行時間と、呼び出し経路（ルート情報）とを収集する。
【００１６】
特許文献４（特開２００４−２８７８６９号公報）は、プログラムを実行する際に、当該監視対象の関数に監視用コードを埋め込むことにより、監視対象の関数に関する監視処理を実行する技術を開示する。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２００９−５２９７４２号公報
【特許文献２】特開２０１０−０７９５０８号公報
【特許文献３】特開２００８−２５７２８７号公報
【特許文献４】特開２００４−２８７８６９号公報
【非特許文献】
【００１８】
【非特許文献１】Ｇｌｅｎｎ  Ａｍｍｏｎｓ  、  Ｔｈｏｍａｓ  Ｂａｌｌ  、  Ｊａｍｅｓ  Ｒ．  Ｌａｒｕｓ、  ”Ｅｘｐｌｏｉｔｉｎｇ  ｈａｒｄｗａｒｅ  ｐｅｒｆｏｒｍａｎｃｅ  ｃｏｕｎｔｅｒｓ  ｗｉｔｈ  ｆｌｏｗ  ａｎｄ  ｃｏｎｔｅｘｔ  ｓｅｎｓｉｔｉｖｅ  ｐｒｏｆｉｌｉｎｇ”、  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ＡＣＭ  ＳＩＧＰＬＡＮ  １９９７  ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  ｌａｎｇｕａｇｅ  ｄｅｓｉｇｎ  ａｎｄ  ｉｍｐｌｅｍｅｎｔａｔｉｏｎ、  ｐ．ｐ．８５−９６、  Ｊｕｎｅ  １６−１８、  １９９７、  Ｌａｓ  Ｖｅｇａｓ、  Ｎｅｖａｄａ、  ＵＳＡ、（ＡＣＭ  ＳＩＧＰＬＡＮ  Ｎｏｔｉｃｅｓ、１９９７年５月、Ｖｏｌｕｍｅ  ３２、Ｉｓｓｕｅ  ５、  ｐ．ｐ．８５−９６）
【発明の概要】
【発明が解決しようとする課題】
【００１９】
プログラムに対するプロファイリングを実行する場合、当該プログラムの本来の仕様に応じた動作（以下、単に「プログラムの動作」と称する場合がある）に関する影響を抑えること、及び、プログラムの動作を正確に把握することが重要である。プロファイリングを実行する際、計測対象のプログラムを実行する過程において、当該プログラムに関する各種測定処理が実行される。これより、プロファイリングの実行は、計測対象のプログラムの動作（実行時間など）に影響を及ぼす場合があることから、係る影響を低減することが求められる。また、計測対象のプログラムの動作を正確に把握するには、計測対象のプログラムにおける任意の測定区間に関して、プロファイリングを実行可能であることが求められる。更に、測定区間が複数存在する場合には、プログラムの実行順序に従って、どの測定区間における計測（測定）結果であるかを区別可能であることが、プログラムの動作を把握する際に重要な要素となり得る。
【００２０】
これに対して、上記非特許文献１に開示された技術は、プログラムに含まれる関数の単位でプロファイリングが実行される。即ち、上記非特許文献１に開示された技術は、任意の区間に関するプロファイリングに容易に適用できない可能性がある。また、上記非特許文献１に開示された技術は、専用のレジスタを必要とすることから、係る技術を適用可能なプロセッサの制約、あるいは、コンパイラの対応等が必要となり、係る技術を容易に利用できない場合がある。
【００２１】
特許文献１に開示された技術も、コンピュータ・プログラムにおける関数単位のプロファイリングを基本としている。また、特許文献１に開示された技術は、計測対象のプログラムのコードを解析し、計測パターン及び非計測パターンの両方を含むように当該コードを改変する。係るコードの解析及び改変に要する処理が複雑化することから、特許文献１に開示された技術を、任意の区間のプロファイリングに適用することは困難な可能性がある。この場合、特許文献１に開示された技術を用いてプロファイリングを行うことは、必ずしも容易ではない。
【００２２】
特許文献２に開示された技術は、上記説明したサンプリング方式を用いたプロファイル取得方法であることから、計測対象のプログラムの内容や、サンプリング周期の設定によっては、十分な解析精度が得られない可能性がある。
【００２３】
特許文献３に開示された技術は、クラスを構成するメソッド単位でプローブを挿入し、メソッド単位の実行時間を計測する方法であることから、係る技術を、任意の区間のプロファイリングに直接用いることは困難な場合がある。また、特許文献３に開示された技術は、主要メソッドに相当する計測対象を絞り込むことにより、計測に伴う影響（負荷）を軽減する。このため、主要メソッドに相当する計測対象が多数存在する場合（十分に絞り込めない場合）、特許文献３に開示された技術は、係る影響を十分に軽減できない場合があると考えられる。
【００２４】
特許文献４に開示された技術は、プログラムの実行コードにおける監視対象の関数呼び出し部分を改変することにより、監視コードを挿入する。即ち、特許文献４に開示された技術も、関数呼び出しに依らない任意の区間のプロファイリングに直接用いることは困難な場合がある。
【００２５】
本発明は、上記のような事情を鑑みてなされたものである。即ち、本発明は、プログラムの性能解析に関し、当該プログラムの本来の仕様に応じた動作に対する影響が少なく、当該プログラムの実行過程における１以上の測定区間の相互の関係性を考慮した性能解析が可能な解析装置等を提供することを、主たる目的とする。
【課題を解決するための手段】
【００２６】
上記の目的を達成すべく、本発明の一態様に係る解析装置は、以下の構成を備える。即ち、本発明の一態様に係る解析装置は、性能解析の対象である測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、上記測定区間の開始ポイントと、上記測定区間の終了ポイントとを検知して、上記測定区間における性能解析を実行し、上記開始ポイントを検知した際に、上記測定区間に関する性能解析の結果が登録される解析情報を特定可能なデータである解析情報リンクを１以上保持可能な解析情報リンク保持領域における特定の領域から、当該検知した上記開始ポイントにより開始される上記測定区間に関する上記解析情報である第１の解析情報を特定する上記解析情報リンクを取得し、上記検知した開始ポイントにより開始される上記測定区間を規定する上記プローブに対する子階層の、上記プローブにより規定される上記測定区間に関する上記解析情報である第２の解析情報と、上記第１の解析情報とを、上記プローブの階層関係に基づいて関連付ける解析手段と、上記解析情報リンク保持領域を保持する記憶手段と、を備える。
【００２７】
また、本発明の一態様に係る解析方法は、以下の構成を備える。即ち、本発明の一態様に係る解析方法は、情報処理装置が、性能解析の対象である測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、上記測定区間の開始ポイントと、上記測定区間の終了ポイントとを検知して、上記測定区間における性能解析を実行し、上記開始ポイントを検知した際に、上記測定区間に関する性能解析の結果が登録される解析情報を特定可能なデータである解析情報リンクを１以上保持可能な解析情報リンク保持領域における特定の領域から、当該検知した上記開始ポイントにより開始される上記測定区間に関する上記解析情報である第１の解析情報を特定する上記解析情報リンクを取得し、上記検知した開始ポイントにより開始される上記測定区間を規定する上記プローブに対する子階層の、上記プローブにより規定される上記測定区間に関する上記解析情報である第２の解析情報と、上記第１の解析情報とを、上記プローブの階層関係に基づいて関連付ける。
【００２８】
また、同目的は、上記構成を有する解析装置、並びに対応する解析方法を、コンピュータによって実現するコンピュータ・プログラム、及び、そのコンピュータ・プログラムが格納されている、コンピュータ読み取り可能な記憶媒体等によっても達成される。
【発明の効果】
【００２９】
本発明によれば、プログラムの性能解析に関し、当該プログラムの本来の仕様に応じた動作に対する影響が少なく、当該プログラムの実行過程における１以上の測定区間の相互の関係性を考慮した性能解析が可能な解析装置等を提供可能である。
【図面の簡単な説明】
【００３０】
【図１】図１は、コンピュータ・プログラムに挿入される計測用プローブの具体例を示す図である。
【図２】図２は、本発明の関連技術（非特許文献１）において、性能解析の対象である関数に関する情報を保持するデータ構造の具体例を示す図である。
【図３】図３は、本発明の関連技術（非特許文献１）において、性能解析の対象である関数の呼び出し関係を表す木構造を例示する図である。
【図４】図４は、プローブにより規定される測定区間の階層関係に関する具体例を示す図である。
【図５】図５は、プローブにより規定される測定区間の階層関係を表す木構造を例示する図である。
【図６】図６は、プローブを用いて測定した測定結果を格納するデータ構造の具体例を示す図である。
【図７】図７は、プローブを用いて測定した測定結果を格納するデータ構造の具体例を示す図である。
【図８】図８は、プローブを用いて測定した測定結果を、スタックを用いて図７に例示するデータ構造に格納する過程の具体例を示す図である。
【図９】図９は、本発明の第１の実施形態における解析装置の機能的な構成を例示するブロック図である。
【図１０】図１０は、本発明の第１の実施形態における開始プローブ処理部の機能的な構成を例示するブロック図である。
【図１１】図１１は、本発明の第１の実施形態における終了プローブ処理部の機能的な構成を例示するブロック図である。
【図１２】図１２は、本発明の第１の実施形態における計測値格納テーブルの具体的な構成を例示する図である。
【図１３】図１３は、本発明の第１の実施形態における計測値格納テーブルのツリーの具体例を示す図である。
【図１４】図１４は、本発明の第１の実施形態における解析装置の動作を例示するフローチャート（１／２）である。
【図１５】図１５は、本発明の第１の実施形態における解析装置の動作を例示するフローチャート（２／２）である。
【図１６】図１６は、本発明の第２の実施形態における解析装置の機能的な構成を例示するブロック図である。
【図１７】図１７は、本発明の第２の実施形態における開始プローブ処理部の機能的な構成を例示するブロック図である。
【図１８】図１８は、本発明の第２の実施形態における終了プローブ処理部の機能的な構成を例示するブロック図である。
【図１９】図１９は、本発明の第２の実施形態における解析装置の動作を例示するフローチャート（１／２）である。
【図２０】図２０は、本発明の第２の実施形態における解析装置の動作を例示するフローチャート（２／２）である。
【図２１】図２１は、本発明の第３の実施形態における解析装置の機能的な構成を例示するブロック図である。
【図２２】図２２は、本発明の第３の実施形態におけるコンテキスト構造体の具体的な構成を例示する図である。
【図２３】図２３は、本発明の第３の実施形態におけるコンテキスト構造体ツリーの具体例を示す図である。
【図２４】図２４は、本発明の第３の実施形態における開始プローブ処理部の機能的な構成を例示するブロック図である。
【図２５】図２５は、本発明の第３の実施形態における終了プローブ処理部の機能的な構成を例示するブロック図である。
【図２６】図２６は、本発明の第３の実施形態における解析装置の動作を例示するフローチャート（１／２）である。
【図２７】図２７は、本発明の第３の実施形態における解析装置の動作を例示するフローチャート（２／２）である。
【図２８】図２８は、本発明の第２の実施形態に係る解析装置の処理過程において、スタックに格納されるデータの具体例を示す図である。
【図２９】図２９は、発明の第２の実施系に係る解析装置において生成される計測値格納テーブルのツリーの具体例を示す図である。
【図３０】図３０は、本発明の第４の実施形態における解析装置の機能的な構成を例示するブロック図である。
【図３１】図３１は、本発明の各実施形態に係る解析装置を実現可能な情報処理装置のハードウェア構成を例示する図である。
【発明を実施するための形態】
【００３１】
次に、本発明を実施する形態について図面を参照して詳細に説明する。以下の各実施形態に記載されている構成は単なる例示であり、本発明の技術範囲はそれらには限定されない。また、以下の各実施形態において説明する解析装置は、専用のハードウェア装置により実現されてもよく、１以上の物理的なコンピュータ又は仮想的なコンピュータ又はそれらの組合せを用いて実現されたシステムとして実現されてもよい。
【００３２】
本発明の各実施形態に関する説明に先立って、本発明の理解を容易にするため、本発明に関する技術的背景及び課題について詳細に説明する。
【００３３】
上記したように、プログラムに対するプロファイリングを実行する場合、当該プログラムの動作に関する影響を抑えること、及び、プログラムの動作を正確に把握することが重要である。
【００３４】
まず、プログラムの動作に関する影響について説明する。上記説明したように、特定のプログラムについてプロファイリングが実行される場合、当該プログラムを実行する過程において、当該プログラムに関する各種測定処理が実行される。これより、プロファイリングの実行は、計測対象のプログラムの動作（実行時間など）に影響を及ぼす場合がある。このような影響は、オーバヘッドと呼ばれる。
【００３５】
オーバヘッドが大きい場合、プログラムの本来の動作に対する影響が大きくなり、測定結果の利用価値が低減する可能性がある。したがって、オーバヘッドが少ないプロファイリング方法が求められている。一般的に、オーバヘッドは、例えば、開始プローブや終了プローブの実行に要する時間を含む。また、オーバヘッドは、例えば、測定結果を記録するために利用されるメモリアクセスに要する時間、及びメモリアクセスによって生じるキャッシュの汚染によるキャッシュミスの影響などを含む。
【００３６】
次に、プログラムの動作を正確に把握することについて説明する。一般的に、プローブを用いたプロファイリングを実行する場合、プローブにより規定される測定区間が入れ子状になるようにプローブが挿入されることが多い。例えば、あるプローブにより規定される「測定区間Ａ」の中に別のプローブにより規定される「測定区間Ｂ」が含まれる場合である。このような入れ子関係が分かるように（すなわち、測定区間Ａと、測定区間Ｂとが入れ子関係にあるのか、同一階層にあるのかを区別できるように）プロファイリングを行うことにより、プログラムの動作と測定結果との対応関係が分かりやすくなる。
【００３７】
また、一般的に、プログラムの実行中に、ある測定区間がどの測定区間の中に含まれるかは、実行順序によって変わり、プログラムを一回実行する中でも変化する場合がある。なお、以下において、プローブのＩＤ（以下「プローブＩＤと称する）が「Ｎ」のプローブにより測定される測定区間を、単に「プローブＮの測定区間」あるいは「プローブ測定区間Ｎ」と記載する場合がある。
【００３８】
図４に例示する具体例を用いて説明する。図４において、測定区間Ａは、「ｐｒｏｂｅ＿ｂｅｇｉｎ（Ａ）」と、「ｐｒｏｂｅ＿ｅｎｄ（Ａ）」との間に含まれる区間である。同様に、測定区間Ｂは、「ｐｒｏｂｅ＿ｂｅｇｉｎ（Ｂ）」と、「ｐｒｏｂｅ＿ｅｎｄ（Ｂ）」との間に含まれる区間である。測定区間Ｃは、「ｐｒｏｂｅ＿ｂｅｇｉｎ（Ｃ）」と、「ｐｒｏｂｅ＿ｅｎｄ（Ｃ）」との間に含まれる区間である。図４に例示するように、ある測定区間Ｃが測定区間Ａの中にある場合もあれば、測定区間Ｂの中にある場合もある。
【００３９】
図５は、図４に例示するプローブが挿入された測定区間の入れ子関係を、ツリー構造（木構造）を用いて表した図である。図５に例示するように、測定区間入れ子関係は、複数階層に及ぶ場合がある。測定区間がどの階層に含まれるかを識別して計測を行うことにより、プログラムの動作順序と対応させたプロファイリングを行うことは、プログラムの理解あるいはチューニング等において重要である。以下、このようなプロファイリングを、「コンテキストを考慮したプロファイリング」と称する。
【００４０】
一方、プローブを用いて測定した値を記録する方法としては、例えば、図６に示すように、プローブのＩＤと計測値とを列として持つ表（テーブル）に、単純に計測値を格納する方法が考えられる。以下、係る方法を「コンテキストを考慮しない方法」と称する。
【００４１】
コンテキストを考慮しない方法においては、異なる階層におけるプローブによる測定結果（即ち、異なる階層に含まれる測定区間における計測結果）が区別されることなく、同一の行に記録される。図４に示す具体例を用いて説明すると、コンテキストを考慮しない方法を採用した場合、測定区間Ｂに含まれる測定区間Ｃにおける測定結果と、測定区間Ａにのみ含まれる測定区間Ｃにおける測定結果とが、区別されない。これより、コンテキストを考慮しない方法を採用した場合、プローブが挿入された測定区間の階層関係を区別することができないという問題が生じる。
【００４２】
図７は、上記した問題を解決するために、プローブの呼び出し順（入れ子関係）をキーとして、各測定区間における計測値を区別して格納可能とする表（テーブル）を例示する。図７に例示するテーブル７００のコンテキストＩＤ列（図５における７０１）が、プローブの呼び出し順序を示す、キーである。
【００４３】
図７に示す具体例においては、例えば、テーブル７００の一行目は、「プローブＡの測定区間に含まれる、プローブＢの測定区間に含まれる、プローブＣの測定区間」における、測定値を格納する。即ち、テーブル７００には、各プローブの呼び出し（実行）順序を考慮して、それぞれの測定区間における測定値が区別して登録される。図７に例示するテーブル７００は、例えば、プローブのＩＤのスタックを利用して作成可能である。
【００４４】
図８は、スタック（図８の８００）を用いて、図７に例示するテーブル７００に計測値を格納する過程を例示する。なお、図８においては、図面の理解を容易にするため、図４に例示する開始プローブと、終了プローブとが、略記されている。即ち、図８においては、図４における「ｐｒｏｂｅ＿ｂｅｇｉｎ（Ａ）」等は、単に「ｂｅｇｉｎ（Ａ）」等と略記される。また、図８においては、図４における「ｐｒｏｂｅ＿ｅｎｄ（Ａ）」等は、単に「ｅｎｄ（Ａ）」等と略記される。
【００４５】
図８に例示する方法においては、例えば、プローブ測定区間Ａの開始プローブ（図８における「ｂｅｇｉｎ（Ａ）」）が呼び出される（実行される）タイミングにおいて（図８におけるＴＡ１）、スタック８００に先頭にプローブのＩＤである「Ａ」が格納される。また、終了プローブが呼び出される（実行される）タイミングにおいて、スタック８００の内容を上から（スタックの先頭から）順に辿ることより、プローブの呼び出し順が調べられる。そして、当該実行順を考慮した各測定区間における測定値がテーブル７００に格納される。
【００４６】
例えば、図８における「ｅｎｄ（Ｃ）」のタイミングでは（図８におけるＴＡ２）、スタック８００に下から順にプローブのＩＤである「Ａ、Ｂ、Ｃ」が格納されており、スタックから「Ｃ」が取り出される。図８に例示する方法は、係るプローブの呼び出し順に基づいて、テーブル７００におけるコンテキストＩＤが「Ａ、Ｂ、Ｃ」である行（図８においては１行目）に、プローブ測定区間Ｃにおける計測値を記録する。
【００４７】
図８に例示する方法においては、テーブル７００に計測値を格納する際に、スタックの内容を辿る処理（「ｓｔａｃｋ  ｗａｌｋ」と称する）が必要となる。スタックが深くなる（即ち、プローブが挿入された測定区間の入れ子が深くなる）と、係る「ｓｔａｃｋ  ｗａｌｋ」の処理にかかる時間が、オーバヘッドとなる。また、一般に同じ呼び出し順のプローブが再度呼び出された場合は、テーブルにおける同じ行に計測値が加算される。図７及び図８に例示するテーブル７００と、単純にプローブのＩＤをキーとしたテーブル（例えば、図６）と比べた場合、テーブル７００の方が、どの行に計測値を格納するかを決定する処理のオーバヘッドが大きい。
【００４８】
以上を鑑みて、以下に説明する各実施形態においては、スタック処理等のオーバヘッドに起因するプログラムの動作に関する影響が少なく、また、プログラムに挿入された１以上の測定区間の間の関係性を考慮したプロファイリングが可能な方法について説明する。
【００４９】
＜第１の実施形態＞
以下、本発明の第１の実施形態について、図面を参照して詳細に説明する。なお、以下の説明においては、計測対象のプログラムにプローブ（開始プローブ、終了プローブ）が１以上挿入され、それぞれのプローブには、当該プローブを特定可能なＩＤが付与される。この場合、開始プローブは、係る測定区間の開始を表す開始ポイントとして機能してもよい。また、終了プローブは、係る測定区間の終了を表す終了ポイントとして機能してもよい。
【００５０】
以下の説明においては、計測対象のプログラムに階層的にプローブが挿入（設定）される場合（例えば、図４及び図５に例示するような状況）、ある測定区間に含まれる他の測定区間を、「子階層の測定区間」と称する場合がある。また、ある測定区間を規定（設定）するプルーブに対して、子階層の測定区間を設定するプローブを、「子階層のプローブ」と称する場合がある。また、「子階層のプローブ」に対して、プローブの呼び出し関係において親階層に存在するプローブを「親階層のプローブ」と称する場合がある（以下の各実施形態において同様）。
【００５１】
（構成の説明）
図９は、本発明の第１の実施形態における解析装置の機能的な構成を例示するブロック図である。本実施の形態における解析装置９００は、解析部９０１と、記憶部９０２とを備える。解析装置９００を構成するこれらの構成要素の間は、任意の通信手段により通信可能に接続されている。なお、解析装置９００には、図示しない入力手段を介して、解析対象のプログラムが入力されてもよい。解析対象装置９００に対する解析対象プログラムの提供方法は、周知の技術を適宜採用可能であるので、詳細な説明を省略する。
【００５２】
解析部９０１は、開始プローブ処理部９０１ａと、終了プローブ処理部９０１ｂとを備える。解析部９０１は、プログラムに挿入されたプローブを検出し、検出したプローブにより規定（設定）された測定区間における、プログラムの性能を解析する処理（プロファイリング）を実行する。
【００５３】
記憶部９０２は、プロファイリングを実行した結果を格納する計測値格納テーブル（単に「テーブル」と称する場合がある）のツリー９０２ａ、及び、スタック９０２ｂを保持する。計測値格納テーブルは、特定のプローブにより設定された測定区間においてプロファイリングが実行された結果（測定結果）を保持する（なお、以下において、あるプローブにより設定された測定区間におけるプロファイリングの実行結果（測定結果）を、単に当該プロファイルに関する測定結果と称する場合がある）。
【００５４】
以下、それぞれの構成要素について詳細に説明する。開始プローブ処理部９０１ａは、解析部９０１が測定区間の先頭に挿入された開始プローブを検知した際（開始プローブが呼び出された際）に呼び出され、所定の処理を実行する。なお、本実施形態においては、開始プローブ処理部９０１ａが、開始プローブを検知し、所定の処理を実行してもよい。
【００５５】
また、終了プローブ処理部９０１ｂは、解析部９０１が測定区間の末尾に挿入された終了プローブを検知した際（終了プローブが呼び出された際）に呼び出され、所定の処理を実行する。本実施形態においては、終了プローブ処理部９０１ｂが、終了プローブを検知し、所定の処理を実行してもよい。
【００５６】
開始プローブ処理部９０１ａ及び、終了プローブ処理部９０１ｂによる処理の結果（測定結果等）が、記憶部９０２における計測値格納テーブルのツリー９０２ａに登録（格納）される。以下、計測値格納テーブルのツリー９０２ａを、単に「計測値ツリー９０２ａ」と称する場合がある。
【００５７】
スタック９０２ｂは、開始プローブ処理部９０１ａ及び、終了プローブ処理部９０１ｂにおける処理に際して、解析結果の保持する際に利用される。なお、スタック９０２ｂは、後述するように、計測値格納テーブルを特定可能なデータ（例えば、リンクやポインタ等）を保持可能である。なお、計測値格納テーブルを特定可能なデータを、「解析情報リンク」と称する場合がある。
【００５８】
図１２は、本実施形態における計測値格納テーブルの一つの具体的な構成を例示する図である。図１２に例示する計測値格納テーブル１２０１の各列は、以下のデータを保持する。
【００５９】
・プローブを識別可能なデータ（プローブＩＤ）を保持するＩＤ（図１２の１２０２）、
・開始プローブ処理部９０１ａにおいて取得（測定）された計測値を保持する開始値（図１２の１２０３）、
・ＩＤ１２０２により識別されるプローブにより設定された測定区間における、プロファイリングの結果を保持する測定値（図１２の１２０４）、
・ＩＤ１２０２により識別されるプローブに関する子階層のプローブに関する計測値格納テーブルへのリンク（例えばポインタ等）を保持する子階層リンク（ｃｈｉｌｄ）（図１２の１２０５）。
【００６０】
また、図１２に例示する計測値格納テーブルにおける各行（エントリ１２０１ａ乃至エントリ１２０１ｃ）は、同一階層にあるプローブに関するデータを保持する。例えば、エントリ１２０１ａにおけるＩＤ１２０２により識別されるプローブと、エントリ１２０１ｂにおけるＩＤ１２０２により識別されるプローブとは、同一の階層（入れ子関係ではない階層）に挿入される。なお、係るエントリの数は、任意に定められてよい。
【００６１】
計測値格納テーブル１２０１は、固定長テーブルでもよく可変長テーブルでもよい。一般に、固定長テーブルは、テーブルの各行へのアクセスが高速であるという特徴がある。したがって、プローブＩＤ１２０２の最大数があらかじめ決められており、その数がメモリやキャッシュの利用量を考慮して大きくない場合は、固定長テーブルを採用するとオーバヘッドを小さくすることができる。一方、最大数が多い場合には、可変長テーブルを用いることにより、テーブルの格納に必要なメモリサイズを削減する方が、オーバヘッドをより小さくできる場合がある。
【００６２】
なお、図１２に例示する構成に限定されず、計測値格納テーブルは、テーブル（表）以外の他の形式（データ構造）により構成されてもよい。計測値格納テーブルは、例えば、ＩＤ１２０２を保持するデータ（第１のデータ項目）と、計測値１２０４を保持するデータ（第２のデータ項目）と、子階層リンク１２０５を保持するデータ（第３のデータ項目）とを関連付けて保持するエントリを１以上保持可能な任意のデータ構造により構成されてもよい。この場合、係るエントリ自体も、任意のデータ構造により構成されてよく、１以上のエントリの間は、任意の方法により接続（リンク）されてもよい。
【００６３】
図１３は、計測値格納テーブル１２０１の接続関係（リンク構造）の具体例を示した図である。図１３に示す具体例においては、「ｔａｂｌｅ１」のＩＤ１２０２が「Ａ」のプローブに、「ｔａｂｌｅ２」がリンクされる。また、「ｔａｂｌｅ１」のＩＤ１２０２が「Ｂ」のプローブに、「ｔａｂｌｅ３」がリンクされる。このようなリンク構造は、上記したプローブ間の階層構造（測定区間の階層構造）を表す。典型的には、このようなリンク構造は、プログラムの実行前にあらかじめ作成されるのではなく、プログラムの実行過程においてプロファイリングに関する処理が実行される際に作られる。
【００６４】
なお、以下、特定のプローブに対する子階層のプローブに関する測定結果を保持する計測値格納テーブルを、「子階層の計測値格納テーブル」と称する場合がある。また、当該子階層の計測値格納テーブルに対して、親階層のプローブに関する測定結果を保持する計測値格納テーブルを「親階層の計測値格納テーブル」と称する場合がある。図１３に例示する具体例においては、「ｔａｂｌｅ１」に対して「ｔａｂｌｅ２」及び「ｔａｂｌｅ３」が子階層の計測値格納テーブルである。「ｔａｂｌｅ２」、「ｔａｂｌｅ３」に対して、「ｔａｂｌｅ１」が親階層の計測値格納テーブルである。なお、後述する計測値ツリー９０２ａは、このようなプローブ間の階層構造を、木構造を用いて表す。
【００６５】
次に、開始プローブ処理部９０１ａの構成について具体的に説明する。図１０は、本実施形態における開始プローブ処理部９０１ａの、具体的な構成例を示す図である。
【００６６】
図１０において、テーブル取得部１００１は、スタック９０２ｂの先頭にある計測値格納テーブル（具体的には、計測値格納テーブルを特定可能なデータ）を参照する。なお、テーブル取得部１００１は、計測値格納テーブルをスタック９０２ｂに格納したまま（即ち、係る計測値格納テーブルをスタック９０２ｂから取り出して削除することなく）、当該計測値格納テーブルを参照してもよい。
【００６７】
子階層検索部１００２は、特定のプローブＩＤ（１２０２）により識別されるプローブに対する子階層のプローブに関する計測値格納テーブルを検索する。
【００６８】
テーブル生成部１００３は、新しい計測値格納テーブル（図１２の１２０１）を生成する。
【００６９】
テーブル接続部１００４は、親階層の計測値格納テーブル１２０１に子階層の計測値格納テーブル１２０１を接続する。
【００７０】
テーブル格納部１００５は、指定された計測値格納テーブル１２０１をスタック９０２ｂに格納する。
【００７１】
計測部１００６は、特定の測定区間においてプロファイリングを実行し、測定対象の値を取得する。係る計測対象は、例えば、開始プローブを検知したタイミングにおける時刻、キャッシュミス回数、メモリアクセス回数、情報処理装置を起動してからの経過時間（あるいはクロックカウント）等であってもよい。係る測定対象は、計測対象のプログラムの性質、及び、プロファイリングの目的等において、適宜選択されてよい。
【００７２】
開始値記録部１００７は、計測部１００６において測定された結果を、計測値格納テーブルに設定する。
【００７３】
なお、図１０に例示する構成は一つの具体例であり、開始プローブ処理部９０１ａは、他の構成により実現されてもよい。
【００７４】
次に、本実施形態における終了プローブ処理部９０１ｂの構成について説明する。図１１は、本実施形態における終了プローブ処理部９０１ｂの具体的な構成の一例を示す図である。
【００７５】
テーブル取り出し部１１０２は、スタック９０２ｂから計測値格納テーブルを取り出す。
【００７６】
テーブル取得部１１０３及び計測部１１０１は、上記説明した開始プローブ処理部９０１ａにおけるテーブル取得部１００１及び計測部１００６とそれぞれ同様の機能を有する。なお、計測部１００６は、終了プローブを検出したタイミングにおける、上記各測定対象の測定値を取得する。
【００７７】
計測値格納部１１０４は、計測値格納テーブルに、計測値（測定値）を設定（格納）する。典型的には、計測値格納部１１０４は、開始プローブ処理部９０１ａ（特には計測部１００６）において計測（測定）した測定値と、終了プローブ処理部９０１ｂ（特には計測部１１０１）において計測（測定）した測定値との差分を計算する。そして、計測値格納部１１０４は、上記計算した差分を、既に計測値格納テーブルに格納されている値（例えば図１２における測定値１２０４）に対して加算する。
【００７８】
上記説明した開始プローブ処理部９０１ａ、及び、終了プローブ処理部９０１ｂは、それぞれ、計測対象のプログラムに対して直接埋め込む（挿入する）形式で実現されてもよい。この場合、例えば、開始プローブ処理部９０１ａ、及び、終了プローブ処理部９０１ｂを実現可能なコンピュータ・プログラムが、計測対象のプログラムに対して直接埋め込まれてもよい。そして、係る計測対象のプログラムが実行される際に、解析部９０１が、図示しない演算装置等を用いて、開始プローブ処理部９０１ａ、及び、終了プローブ処理部９０１ｂを実現可能なコンピュータ・プログラムを実行してもよい。
【００７９】
上記に限定されず、開始プローブ処理部９０１ａ、及び、終了プローブ処理部９０１ｂは、それぞれ、計測対象のプログラムとは別に実装され、計測対象のプログラムにおいて開始プローブ、終了プローブが呼び出された際（実行された際）に、所定の処理を実行してもよい。
【００８０】
次に、本実施形態におけるスタック９０２ｂについて説明する。スタック９０２ｂは、スタック構造を用いて、計測値格納テーブル１２０１を特定可能なデータを保持する。より具体的には、スタック９０２ｂは、計測値格納テーブル１２０１へのリンクを保持（格納）する。スタック９０２ｂに対するデータ（計測値格納テーブル）の格納及び取り出し等の操作は、一般的なスタック構造と同様であるため、詳細な説明は省略する。
【００８１】
本実施形態においては、測定対象とするプログラム全体で一つのスタック９０２ｂが用いられてもよく、また、複数のスタック９０２ｂが用いられても良い。プログラム全体で一つスタック９０２ｂが用いられる場合、開始プローブ処理部９０１ａや終了プローブ処理部９０１ｂが利用するスタック９０２ｂは自明である。この場合は、開始プローブ処理部９０１ａ及び終了プローブ処理部９０１ｂに対して、利用するスタック９０２を指定する必要はない。一方、計測対象のプログラムに対して複数のスタック９０２ｂが用いられる場合、開始プローブ処理部９０１ａ及び終了プローブ処理部９０１ｂに対して、使用するスタック９０２ｂが指定される。
【００８２】
相異なるスタック９０２ｂは、それぞれ独立した計測（測定）に用いられてもよい（この場合、独立した計測値ツリー９０２ａが作られる）。例えば、計測対象のプログラムを構成するモジュール毎に、異なったスタック９０２ｂを用いることにより、それぞれのモジュール毎に独立した測定が行われてもよい。この場合、異なるスタック９０２ｂにおいては、プローブＩＤが重複してもよいことから、例えば、プローブＩＤの最大数を小さくするという効果が期待される。また計測対象のプログラムがマルチスレッドプログラム（複数のスレッドにより実行されるプログラム）である場合、スレッド毎に異なるスタックを利用することにより、スレッド間における競合を避けることができる。
【００８３】
計測値格納テーブルのツリー（計測値ツリー）９０２ａは、上記したように、測定結果を保持（格納）する計測値格納テーブル（例えば、図１２における１２０１）を、ツリー（木）構造により保持する。計測値ツリー９０２ａは、プローブ間の階層構造を表すリンクを、ツリー構造として表す。より具体的には、計測値ツリー９０２ａは、上記説明したように、計測値格納テーブル１２０１における子階層リンク１２０５に設定されたデータに基づいて、プローブ間の階層構造を表す木構造を形成する。
【００８４】
計測値ツリー９０２ａの各ノードには、計測値格納テーブル１２０１が割り当てられる。計測値ツリー９０２ａにおいて、親ノードに対する子ノードとの間の関係は、親階層のプローブに関する計測値格納テーブル１２０１と、子階層のプローブに関する計測値格納テーブル１２０１との間の接続関係を表す。
【００８５】
（動作の説明）
次に本実施形態における解析装置９００の動作について説明する。以下においては、特に、開始プローブ処理部９０１ａ、及び、終了プローブ処理部９０１ｂの動作について説明する。  本実施形態における解析部９０１は、初期化処理として、最初の開始プローブが呼び出される（実行される）前に、計測値ツリー９０２ａのルートとなる計測値格納テーブル１２０１をスタック９０２ｂに格納しておくことが望ましい。この場合、スタック９０２ｂには、計測値ツリー９０２ａのルートとなる計測値格納テーブル１２０１に対するリンクが格納されてもよい。より具体的には、解析部９０１は、計測値ツリー９０２ａのルートとなる計測値格納テーブル１２０１を生成し、係る計測値格納テーブル１２０１に対するリンクをスタック９０２ｂの先頭に格納してもよい。係るリンクは、例えば、計測値格納テーブル１２０１に対するポインタ等であってもよい。
【００８６】
このような初期化処理を行わない場合は、開始プローブ処理部９０１ａにおいて、スタック９０２ｂに計測値格納テーブル１２０１が保持（格納）されていない場合に、新しい計測値格納テーブル１２０１を作成してスタックに格納する処理が必要になる。係る処理は開始プローブ処理部９０１ａにおける処理を構成するステップ数を増加させることになり、オーバヘッドの増加につながる。
【００８７】
以下の説明においては、計測対象のプログラムに埋め込まれた（挿入された）開始プローブ及び終了プローブは、引数としてプローブのＩＤを受け取ることを仮定する。前述のように複数のスタック９０２ｂが用いられる場合、測定において使用されるスタック９０２ｂが、開始プローブ及び終了プローブに対して引数により指定されてもよい。この場合、使用されるスタックが一意に決まるだけであり、開始プローブ処理部９０１ａ及び終了プローブ処理部９０１ｂにおける処理は、複数のスタック９０２ｂを使用しない場合と同様である。
【００８８】
（開始プローブ処理部の動作）
開始プローブ処理部９０１ａの動作について図１４に例示するフローチャートを参照して説明する。
【００８９】
まず、解析部９０１が、計測対象のプログラムに埋め込まれた開始プローブを検知する（ステップＳ１４０１）。この場合、解析部９０１は、計測対象のプログラムにおいて、開始プローブが実行されたことを検知してもよい。なお、本実施形態においては、解析部９０１ではなく、開始プローブ処理部９０１ａが、上記開始プローブを検知してもよい。
【００９０】
次に、テーブル取得部１００１が、スタック９０２ｂの先頭にある計測値格納テーブル（図１２における１２０１）を取得（参照）する（ステップＳ１４０２）。より具体的には、テーブル取得部１００１は、スタック９０２ｂに格納された、計測値格納テーブルに対するリンクを取得（参照）してもよい。この場合、係る計測値格納テーブル１２０１は、スタック９０２ｂに格納されたままであってもよい。
【００９１】
係る計測値格納テーブル１２０１には、開始プローブ処理部９０１ａが上記ステップＳ１４０１において検知された開始プローブを処理した結果（測定結果）が格納される。以下、係る計測値格納テーブルを「現階層用テーブル」と称する場合がある。
【００９２】
子階層検索部１００２は、上記現階層用テーブルを参照し、開始プローブに対する引数で指定されたプローブＩＤに該当する行（エントリ）に、子階層の計測値格納テーブル（以下、「子階層用テーブル」と称する場合がある）がリンクされているかを確認する（ステップＳ１４０３）。
【００９３】
子階層用テーブルがリンクされていなかった場合（ステップＳ１４０４においてＮＯ）、テーブル生成部１００３は、子階層用に新しい計測値格納テーブルを作成する。そして、テーブル接続部１００４が、現階層用テーブルにおいて、開始プローブに対する引数で指定されたプローブＩＤの行（エントリ）に、生成した子階層用テーブルへのリンクを作成（設定）する（ステップＳ１４０５）。テーブル生成部１００３は、生成した（子階層用の）計測値格納テーブル１２０１における測定値列（図１２における１２０４）を「０」に、また、子階層リンク（ｃｈｉｌｄ）列（図１２における１２０５）を「ＮＵＬＬ」に初期化する。なお、テーブル生成部１００３又はテーブル接続部１００４は、生成した子階層用テーブルに関するリンクを、テーブル格納部１００５に通知してもよい。
【００９４】
なお、子階層用テーブルがリンクされている場合（ステップＳ１４０４においてＹＥＳ）、子階層検索部１００２は、係る子階層用テーブルに関するリンクを、テーブル格納部１００５に通知してもよい。
【００９５】
次に、テーブル格納部１００５は、子階層用テーブルをスタック９０２ｂに格納する。より具体的には、テーブル格納部１００５は、子階層用テーブルに関するリンクをスタック９０２ｂに格納する（ステップＳ１４０６）。
【００９６】
次に、計測部１００６が、測定対象に対する計測（測定）を行う（ステップＳ１４０７）。より具体的には、計測部１００６は、開始プローブを検知したタイミングにおける、上記各種測定対象を測定する。以下の説明において、係る測定値（計測値）を開始値と称する。
【００９７】
次に開始値記録部１００７が、上記ステップＳ１４０７において測定された測定値を、現階層用テーブルにおける、開始プローブに対する引数で指定されたプローブＩＤ行（エントリ）の開始値列（図１２の１２０３）に設定（格納）する（ステップＳ１４０８）。開始値列１２０３に既に値が格納されている場合、開始値記録部１００７は、係る値を上書き（更新）する。
【００９８】
以上の動作により、スタック９０２ｂの先頭には、ステップＳ１４０１において検知した開始プローブにより設定される測定区間の子階層となる測定区間に関する計測値格納テーブルが格納される。
【００９９】
（終了プローブ処理部の動作）
次に、終了プローブ処理部９０１ｂの動作について図１５に例示するフローチャートを参照して説明する。
【０１００】
まず、解析部９０１が、計測対象のプログラムに埋め込まれた終了プローブを検知する（ステップＳ１５０１）。この場合、解析部９０１は、計測対象のプログラムにおいて、終了プローブが実行されたことを検知してもよい。なお、本実施形態においては、解析部９０１ではなく、終了プローブ処理部９０１ｂが、上記終了プローブを検知してもよい。
【０１０１】
次に、計測部１１０１が測定対象に対する計測（測定）を行う（ステップＳ１５０２）。より具体的には、計測部１１０１は、終了プローブを検知したタイミングにおける、上記各種測定対象を測定する。以下の説明において、この測定値を終了値と称する。
【０１０２】
次に、テーブル取り出し部１１０２が、スタック９０２ｂの先頭から、測定値格納テーブル（図１２の１２０２）を取り出す（ステップＳ１５０３）。この際取り出される測定値格納テーブルは、ステップＳ１５０１で検知された終了プローブにより設定される測定区間の子階層となる測定区間に関する計測値格納テーブル（子階層用テーブル）である。
【０１０３】
次に、テーブル取得部１１０３が、ステップＳ１５０３において子階層用テーブルが取り出された後の、スタック９０２ｂの先頭にある計測値格納テーブルを取得する（ステップＳ１５０４）。この際取得される計測値格納テーブルは、この終了プローブに関する測定結果が格納される計測値格納テーブル（現階層用テーブル）である。この場合、係る計測値格納テーブル１２０１は、スタック９０２ｂに格納されたままであってもよい。即ち、テーブル取得部１１０３は、スタック９０２ｂに格納された状態の現階層用テーブルを参照してもよい。
【０１０４】
計測値格納部１１０４は、上記ステップＳ１５０２において算出された終了値と、ステップＳ１５０４において取得した現階層用テーブルにおいて、終了プローブに対する引数で指定されたプローブＩＤ行（エントリ）の開始値列１２０３に設定（格納）されている開始値との差分を計算する。そして、計測値格納部１１０４は、計算した差分を、終了プローブに対する引数で指定されたプローブＩＤ行（エントリ）の計測値列１２０４に記録されている値に加算する。これにより、計測値格納部１１０４は、現階層用テーブルの計測値列１２０４を更新する（ステップＳ１５０５）。
【０１０５】
以上の動作により、計測対象のプログラムに埋め込まれた開始プローブと終了プローブとの間の計測値の差分が（現階層用の）計測値格納テーブル１２０１に格納される。
【０１０６】
なお、複数の異なるスタック９０２ｂを用いる場合は、それぞれのスタック９０２ｂを用いた測定（計測）が独立して行われる。そして、複数の異なるスタック９０２ｂ毎に、それぞれ異なる計測値格納テーブルのツリー９０２ａが作成される。
【０１０７】
上記にように構成された本実施形態においては、解析装置９００は、各階層のプローブの計測値（測定値）を格納した計測値格納テーブルをツリー状に作成する（即ち、計測値ツリー９０２ａを作成する）。これにより、解析装置９００は、プローブの入れ子関係（プローブが挿入された測定区間の入れ子関係）を考慮して、各プローブにより設定される測定区間に関する計測を行うことができる。
【０１０８】
また、解析装置９００は、計測値格納テーブルを格納するスタック９０２ｂを用いて、各測定区間における計測結果（想定結果）が設定される計測値格納テーブルを常にスタックの上部に格納する。これにより、上記説明したスタックを辿る（走査する）処理（「（ｓｔａｃｋ  ｗａｌｋ」）が不要であり、係る処理に要するオーバヘッドが低減される。また、スタック９０２ｂは、一般的な記憶（メモリ）領域に構築可能であることから、上記非特許文献１において必要とされるような特殊なレジスタ等は不要である。これより、本実施形態における解析装置９００は、様々な環境において容易に利用可能である。例えば、上記説明した本実施形態は、当該解析装置９００の機能を実現可能なライブラリを、情報処理装置に提供する場合等に有効である。
【０１０９】
以上より、本実施形態によれば、プログラムの性能解析に関し、当該プログラムの本来の仕様に応じた動作に対する影響が少なく、当該プログラムの実行過程における１以上の測定区間の相互の関係性を考慮した性能解析が可能な解析装置等を提供可能である。なぜならば、解析装置９００は、計測対象のプログラムにおける測定区間の階層構造を計測値格納テーブルのツリー９０２ａにより表し、各測定区間における測定結果を、当該ツリーの各ノードに割り当てられた計測値格納テーブルに設定（格納）するからである。また、本実施形態によれば、スタック９０２ｂの上部に格納された計測値格納テーブルに測定値が設定されることから、スタック９０２ｂの走査に関するオーバヘッドに起因する、プログラムの動作に対する影響が低減される。
【０１１０】
＜第１の実施形態の変形例＞
次に、上記説明した第１の実施形態の変形例について説明する。以下の説明においては、上記第１の実施形態と同様の構成については同様の参照符号を付すことにより、重複する説明を省略する。
【０１１１】
（第１の変形例）
上記第１の実施形態の変形例として、解析装置９００は、計測値格納テーブルのツリー９０２ａを、計測対象のプログラムの開始（実行）前にあらかじめ作成してもよい。この場合、解析装置９００は、計測対象のプログラムを実行する際に、計測値格納テーブルのツリー９０２ａを辿りながら計測を行っても良い。
【０１１２】
本変形例においては、開始プローブ処理部９０１ａ及び、終了プローブ処理部９０１ｂにおいて、計測値格納テーブルのツリー９０２ａを構築するためのメモリ確保、リンクの接続などの処理が不要となり、これらの処理に伴うオーバヘッドを削減することが可能である。一方、例えば、計測対象のプログラムを静的に解析して、計測値格納テーブルのツリー９０２ａを作成するなどの事前処理が必要となる。一般に静的解析等により事前にプログラムの実行順序を正確に決めることは困難な場合がある。これより、本変形例を採用する場合、例えば、測定対象のプログラムを限定する、あるいは、上記第１の実施の形態において説明した方法と組み合わせる、等の実現方法が採用可能である。
【０１１３】
（第２の変形例）
上記第１の実施形態においては、計測値格納テーブル１２０１に、開始プローブ処理部９０１ａが計測（測定）した開始値が格納される（図１２の１２０３）。係る開始値は、一時的に利用されるだけであるから、計測値格納テーブル１２０１ではなく、別の領域に格納されてもよい。その場合、計測値格納テーブル１２０１のサイズを小さくできるという効果がある。
【０１１４】
なお、開始値を計測値格納テーブル１２０１に格納しない場合、終了プローブ処理部９０１ｂが係る開始値を取得する手段（方法）を用意する必要がある。具体的には、例えば、開始プローブと終了プローブとが同一の関数等内に埋め込まれている（挿入されている）場合は、係る開始値は、関数のスタック中に格納（ａｕｔｏ変数を利用）されてもよい。なお、ａｕｔｏ変数（自動変数）は、関数等の特定のスコープ内で自動的に確保・解放される変数であり、周知の技術であることから詳細な説明は省略する。
【０１１５】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。以下の説明においては、上記各実施形態と同様の構成については同様の参照符号を付すことにより、重複する説明を省略する。
【０１１６】
本実施形態においては、図１６に例示する開始プローブ処理部１６０１ａ、及び終了プローブ処理部１６０１ｂの構成と動作が、上記第１の実施形態と一部相違する。以下、係る相違点を中心に説明する。なお、本実施形態における解析装置９００のその他の構成は、上記第１の実施形態と同様としてよい。
【０１１７】
（構成の説明）
図１７は、本実施形態における開始プローブ処理部１６０１ａの機能的な構成を例示するブロック図である。図１７において、上記第１の実施形態における開始プローブ処理部９０１ａ（図１０）と同じ参照番号が付された構成要素は、開始プローブ処理部９０１ａと同様としてよい。
【０１１８】
本実施形態における開始プローブ処理部１６０１ａは、テーブル置換部１７０１を有する。テーブル置換部１７０１は、スタック９０２ｂの先頭から計測値格納テーブル（図１２における１２０１）を取り出し、その後異なる計測値格納テーブル１２０１をスタック９０２ｂに格納する。これにより、テーブル置換部１７０１は、スタック９０２ｂの先頭に格納された計測値格納テーブル１２０１を置換する。より具体的には、テーブル置換部１７０１は、スタック９０２ｂの先頭に格納された計測値格納テーブル１２０１を特定可能なデータ（リンク）を置換してもよい。
【０１１９】
図１８は、本実施形態における終了プローブ処理部１６０１ｂの機能的な構成を例示するブロック図である。図１８において、上記第１の実施形態における終了プローブ処理部９０１ｂ（図１１）と同じ参照番号が付された構成要素は、終了プローブ処理部９０１ｂと同様としてよい。本実施の形態においては、終了プローブ処理部９０１ｂが、テーブル接続部１８０１を有する。テーブル接続部１８０１は、上記第１の実施形態におけるテーブル接続部１００４と同様の機能を提供する。
【０１２０】
本実施形態における計測値格納テーブル（図１２における１２０１）、計測値格納テーブルのツリー９０２ａ、及び、スタック９０２ｂは、上記第１の実施の形態と同様としてよい。
【０１２１】
（動作の説明）
次に本実施形態における解析装置９００の動作について説明する。以下においては、特に、開始プローブ処理部１６０１ａ、及び、終了プローブ処理部１６０１ｂの動作について説明する。本実施形態における解析装置９００は、初期化処理として、最初の開始プローブに関する処理を実行する前に、スタック９０２ｂに対して符号「ＮＵＬＬ」を格納する。符号「ＮＵＬＬ」は、スタックに格納された領域（あるいはスタックに格納されたリンクにより示されるリンク先の領域）が空であることを表す。なお、スタック９０２ｂには、「ＮＵＬＬ」に限られず、スタックに格納された領域が空であることを表す任意の符号を格納してよい。
【０１２２】
（開始プローブ処理部の動作）
開始プローブ処理部１６０１ａの動作について、図１９に例示するフローチャートを参照して説明する。なお、図１９に例示するフローチャートにおいて、上記第１の実施形態における図１４に例示するフローチャートと同様の参照番号が付されている処理は、上記第１の実施形態と同様としてもよい。
【０１２３】
まず、ステップＳ１９０１における処理は第１の実施形態と同様としてよいので、説明を省略する。
【０１２４】
次に、テーブル取得部１００１は、スタック９０２ｂの先頭に格納された計測値格納テーブル（図１２の１２０１）を取得（参照）する（ステップＳ１９０２）。以下、係る計測値格納テーブルを現階層用のテーブルとして扱う。なお、この場合、係る計測値格納テーブル１２０１は、スタック９０２ｂに格納されたままであってもよい。
【０１２５】
スタック９０２ｂの先頭に「ＮＵＬＬ」が格納されていた場合は（ステップＳ１９０３においてＹＥＳ）、テーブル生成部１００３が、新たに計測値テーブルを作成する（ステップＳ１９０４）。生成された計測値格納テーブルは、現階層用のテーブルとして扱われる。
【０１２６】
次に、テーブル置換部１７０１は、スタック９０２ｂの先頭の「ＮＵＬＬ」を取り出し、作成した現階層用のテーブルをスタック９０２ｂの先頭に格納する（ステップＳ１９０５）。
【０１２７】
スタック９０２ｂの先頭が「ＮＵＬＬ」ではない場合は（ステップＳ１９０３においてＮＯ）、後述するステップＳ１９０６以降の処理が続行される。
【０１２８】
上記ステップＳ１９０２乃至Ｓ１９０５までの処理により、スタック９０２ｂの先頭には、（「ＮＵＬＬ」ではない）現階層用のテーブルが格納される。
【０１２９】
次に、テーブル格納部１００５は、現階層用のテーブルにおいて、開始プローブに対する引数で指定されたプローブＩＤに該当する行（エントリ）を参照する。そして、テーブル格納部１００５は、係るエントリにおける子階層リンク（ｃｈｉｌｄ）列（図１２の１２０５）に格納されている、子階層用の計測値格納テーブルに関するリンクを、スタック９０２ｂに格納する（ステップＳ１９０６）。
【０１３０】
この際、まだ子階層用のテーブルが作られていない場合は、子階層リンク（ｃｈｉｌｄ）列１２０５には「ＮＵＬＬ」が格納されているので、テーブル格納部１００５は、「ＮＵＬＬ」をスタックに格納する。
【０１３１】
次に、計測部１００６が測定対象に対する計測（測定）を行う（ステップＳ１９０７）。なお、ステップＳ１９０７における処理は、上記第１の実施形態におけるステップＳ１４０７と同様としてよい。以下の説明において、ステップＳ１０９７における測定結果を開始値と称する。
【０１３２】
次に、開始値記録部１００７が、上記開始値を、現階層用テーブルにおける、開始プローブに対する引数で指定されたプローブＩＤ行（エントリ）の開始値列（図１２の１２０３）に設定（格納）する（ステップＳ１９０８）。ステップＳ１９０８における処理は、上記第１の実施形態におけるステップステップＳ１４０８と同様としてよい。
【０１３３】
以上の動作により、スタック９０２ｂの先頭には、子階層用のテーブル、若しくは「ＮＵＬＬ」が格納される。
【０１３４】
（終了プローブ処理部の動作）
次に、終了プローブ処理部１６０１ｂの動作について図２０に例示するフローチャートを参照して説明する。なお、図２０に例示するフローチャートにおいて、上記第１の実施形態における図１５に例示するフローチャートと同様の参照番号が付されている処理は、上記第１の実施形態と同様としてもよい。
【０１３５】
まず、ステップＳ２００１における処理は、上記第１の実施形態におけるステップＳ１５０１と同様としてよいので、説明を省略する。
【０１３６】
次に、計測部１１０１が測定対象に対する計測（測定）を行う（ステップＳ２００２）。なお、ステップＳ２００２における処理は、上記第１の実施形態におけるステップＳ１５０２における処理と同様としてよい。以下の説明において、係る測定の結果を終了値と称する。
【０１３７】
次に、テーブル取り出し部１１０２が、スタック９０２ｂの先頭から、測定値格納テーブルを取り出す（ステップＳ２００３）。このとき取り出される測定値格納テーブルは、ステップＳ２００１で検知された終了プローブにより設定される測定区間の子階層となる測定区間に関する計測値格納テーブル（子階層用テーブル）である。
【０１３８】
次に、テーブル取得部１１０３が、ステップＳ２００３において子階層用テーブルが取り出された後の、スタック９０２ｂの先頭にある計測値格納テーブルを取得する（ステップＳ２００４）。この計測値格納テーブルは現階層用のテーブルである。この場合、係る計測値格納テーブルは、スタック９０２ｂに格納されたままであってもよい。
【０１３９】
次に、テーブル接続部１８０１は、現階層用のテーブルにおいて、終了プローブに対する引数で指定されたプローブＩＤ行（エントリ）を参照する。そして、テーブル接続部１８０１は、係るエントリの子階層リンク（ｃｈｉｌｄ）列（図１２における１２０５）に、子階層用のテーブルを接続する（ステップＳ２００５）。より具体的には、テーブル接続部１８０１は、係るエントリの子階層リンク（ｃｈｉｌｄ）列１２０５に、子階層用のテーブルへのリンクを作成（設定）する。なお、係る子階層用のテーブルは、上記ステップＳ２００３において取り出された子階層用の計測値格納テーブルである。
【０１４０】
計測値格納部１１０４は、上記ステップＳ２００２において算出された終了値と、ステップＳ２００４において取得した現階層用のテーブルにおいて、終了プローブに対する引数で指定されたプローブＩＤ行（エントリ）の開始値列１２０３に設定（格納）されている開始値との差分を計算する。そして、計測値格納部１１０４は、計算した差分を、終了プローブに対する引数で指定されたプローブＩＤ行（エントリ）の計測値列１２０４に記録されている値に加算する。これにより、計測値格納部１１０４は、現階層用テーブルの計測値列１２０４を更新する（ステップＳ２００６）。なお、ステップＳ２００６の動作は、上記第１の実施形態におけるステップＳ１５０５と同様としてもよい。
【０１４１】
本実施形態においては、開始プローブ処理部１６０１ａが、子階層用のテーブルではなく、現階層用のテーブルを作成する点において、上記第１の実施形態と相違する。開始プローブが検出された（実行された）タイミングにおいては、当該開始プローブにより設定される測定区間に、子階層の測定区間が存在するか（含まれるか）否か不明である。即ち、開始プローブを検知したタイミングでは、当該プローブに対する子階層のプローブが存在するか否か不明である。これより、開始プローブ処理部１６０１ａにおいて子階層用テーブルを作成すると、その計測値格納テーブルは利用されない可能性があり、無駄になる場合がある。
【０１４２】
以上を鑑みて、本実施形態における開始プローブ処理部１６０１ａは、あるプローブに対して子階層用のテーブルがまだ作られていないときは、スタック９０２ｂに「ＮＵＬＬ」を格納する。そして、あるプローブに対する子階層における開始プローブが検知（実行）された時点で、当該子階層を現階層とする新たな現階層用テーブルを作成して、「ＮＵＬＬ」と置換する（ステップＳ１９０４乃至ステップＳ１９０５）。
【０１４３】
開始プローブ処理部１６０１ａが上記のように動作する場合、現階層用の新たな計測値格納テーブル１２０１を作成された際、その現階層に対する親階層に相当する計測値格納テーブルから、当該新たに作成した計測値格納テーブル１２０２へのリンク（子階層リンク１２０５）を作成することができない。なぜならば、開始プローブが検知（実行）された際、当該開始プローブに関するプローブＩＤは引数で渡されるものの、親階層のプローブに関するプローブＩＤは不明であるからである。これより、本実施形態においては、親階層の終了プローブが検知された際、終了プローブ処理部１６０１ｂが、子階層の計測値格納テーブルに対するリンクを作成する（ステップＳ２００５）。
【０１４４】
なお、開始プローブが検知された際、当該開始プローブの親階層のプローブＩＤを知るために、例えば、スタック９０２ｂとは別に、プローブＩＤを格納するスタックを用いる方法が考えられる。この場合、係るスタック操作のための処理に実行時間がかかることや、係るスタックのためにメモリが必要になる。
【０１４５】
以上より、本実施形態によれば、解析装置９００は、無駄な計測値格納テーブルの作成を削減することによって、処理時間と使用メモリ量とを削減可能である。また、本実施形態における解析装置９００は、上記第１の実施形態と同様の構成を含むことから、上記第１の実施形態と同様、プログラムの本来の仕様に応じた動作に対する影響が少なく、当該プログラムの実行過程における１以上の測定区間の相互の関係性を考慮した性能解析が可能である。
【０１４６】
＜第２の実施形態に関する具体例＞
次に、具体例を用いて上記第２の実施形態の動作について説明する。以下、本具体例の説明においては、測定対象のプログラムに対して、図４及び図５に例示する順序で、プローブが埋め込まれている（挿入されている）ことを仮定する。この場合、各プローブは、図４に例示する順序で呼び出される（実行される）。
【０１４７】
本具体例においては、図４及び図５に例示するように、最上位階層（第１階層）にプローブＡがあり、その中（下）の階層（第２階層）にプローブＢ及びプローブＣが存在する。また、プローブＢの中（下）の階層（第３階層）にプローブＣがあるという３階層の構造になっている。換言すると、プローブＡによる測定区間（第１階層の測定区間）に、プローブＢ及びプローブＣの測定区間（第２階層の測定区間）が含まれる。また、第２階層のプローブＢによる測定区間に、プローブＣの測定区間（第３階層の測定区間）が含まれる。
【０１４８】
図２８は、本具体例において、上記各プローブに関する測定処理が実行された場合のスタック９０２ｂの変化を示す図である。また、図２９は、本具体例において作成される計測値格納テーブルのツリー９０２ａを表した図である。
【０１４９】
図２９において、「Ｔａｂｌｅ０」は第１階層用の計測値格納テーブル、「Ｔａｂｌｅ１」は第２階層用の計測値格納テーブル、「Ｔａｂｌｅ２」は第３階層用の計測値格納テーブルである。また、図２８における「Ｔ０」は、上記「Ｔａｂｌｅ０」を表す。同様に、「Ｔ１」、「Ｔ２」は、それぞれ「Ｔａｂｌｅ１」、「Ｔａｂｌｅ２」を表す。また、図２８において、「ｂｅｇｉｎ（Ａ）」は、図４における「ｐｒｏｂｅ＿ｂｅｇｉｎ（Ａ）」を表す（プローブＢ及びプローブＣについても同様）。同様に、「ｅｎｄ（Ａ）」は、図４における「ｐｒｏｂｅ＿ｅｎｄ（Ａ）」を表す（プローブＢ及びプローブＣについても同様）。
【０１５０】
図２８を参照すると、初期状態（図２８における「ＴＢ１」）として、スタック９０２ｂには「ＮＵＬＬ」が格納されている。
【０１５１】
開始プローブ処理部９０１ａが、図４における最初の「ｐｒｏｂｅ＿ｂｅｇｉｎ（Ａ）」（プローブＡの開始プローブ）を処理すると（図２８における「ＴＢ２」）、第１階層用の計測値格納テーブルが作成され（ステップＳ１９０４乃至ステップＳ１９０５）、スタック中の「ＮＵＬＬ」と置換される。また、開始プローブ処理部９０１ａは、プローブＡ（第１階層）の子階層用の計測値格納テーブルとして、「ＮＵＬＬ」をスタックの先頭に格納する（ステップＳ１９０６）。
【０１５２】
次に、開始プローブ処理部９０１ａが、「ｐｒｏｂｅ＿ｂｅｇｉｎ（Ｂ）」を処理すると（図２８における「ＴＢ３」）、同様に第２階層用の計測値格納テーブルの作成及び置換が行われ、第３階層用の計測値格納テーブルとしてスタック９０２ｂに「ＮＵＬＬ」が格納される。「ｐｒｏｂｅ＿ｂｅｇｉｎ（Ｃ）」についても同様である（（図２８における「ＴＢ４」）。
【０１５３】
このタイミング（（図２８における「ＴＢ４」）において、３階層分の計測値格納テーブルが作成されるが、それぞれはまだリンク（接続）されておらず、ツリー構造にはなっていない。即ち、計測値格納テーブルのツリー９０２ａが形成されていない。
【０１５４】
次に、終了プローブ処理部９０１ｂが「ｐｒｏｂｅ＿ｅｎｄ（Ｃ）」を処理すると（図２８における「ＴＢ５」）、まずスタックの先頭から計測値格納テーブル（この場合は「ＮＵＬＬ」）が取り出される。このタイミングで取り出されるのは第３階層の子階層用の計測値格納テーブルであるが、実際には係る子階層は存在しないことから「ＮＵＬＬ」のままであり、「ＮＵＬＬ」が取り出される。
【０１５５】
終了プローブ処理部９０１ｂは、「ｐｒｏｂｅ＿ｅｎｄ（ｃ）」を処理する際、スタックの先頭にある第３階層用の「Ｔａｂｌｅ２（Ｔ２）」に計測値を格納するとともに、「Ｔａｂｌｅ２（Ｔ２）」のプローブＣの子階層として、取り出した「ＮＵＬＬ」を設定する。具体的には、「Ｔａｂｌｅ２（Ｔ２）」のＩＤ（１２０２）が「Ｃ」のエントリにおける子階層リンク（１２０５）に「ＮＵＬＬ」を設定する。なお、「Ｔａｂｌｅ２」のＩＤ（１２０２）が「Ｃ」のエントリにおける子階層リンク１２０５は、元々「ＮＵＬＬ」であることから、実際には値は変更されず、子階層がないことを示す。
【０１５６】
次に、終了プローブ処理部９０１ｂは「ｐｒｏｂｅ＿ｅｎｄ（Ｂ）」を処理と（図２８における「ＴＢ６」）、スタックの先頭から「Ｔａｂｌｅ２（Ｔ２）」（第３階層用のテーブル）が取り出される。
【０１５７】
この際、終了プローブ処理部９０１ｂは、スタックの先頭に格納された第２階層用の「Ｔａｂｌｅ１（Ｔ１）」に計測値を設定する。そして、終了プローブ処理部９０１ｂは係る「Ｔａｂｌｅ１（Ｔ１）」のプローブＢの子階層として、取り出した「Ｔａｂｌｅ２（Ｔ２）」を接続する。これにより、「Ｔａｂｌｅ１（Ｔ１）」と、「Ｔａｂｌｅ２（Ｔ２）」とが接続される。以降の、同様の処理を繰り返すことにより、計測値格納テーブルのツリー９０２ａが構築される。
【０１５８】
＜第３の実施形態＞
次に、本発明の第３の実施形態について説明する。以下の説明においては、上記各実施形態と同様の構成については同様の参照符号を付すことにより、重複する説明を省略する。
【０１５９】
図２１は、本実施形態における解析装置の機能的な構成を例示するブロック図である。
【０１６０】
（構成の説明）
本実施形態においては、測定値格納テーブルのツリー（図９、図１６における９０２ａ）ではなく、コンテキスト情報を表すコンテキスト構造体（以下「コンテキスト」と略す場合がある）のツリー（図２１おける２１０２ａ）を用いて、プロファイリングの実行結果（測定結果）を保持する。即ち、本実施形態における解析装置２１００は、上記第１の実施形態における解析装置９００に対して、扱うデータの形式が異なるものの、同様の機能を実現可能である。
【０１６１】
図２２は、本実施形態におけるコンテキスト構造体の構成を例示する図である。コンテキスト構造体（図２２における２２０１）は、以下のデータを保持する。
【０１６２】
・プローブを識別可能なデータ（プローブＩＤ）を保持するプローブＩＤ（図２２の２２０２）、
・開始プローブ処理部２１０１ａにおいて取得された計測値を保持する開始値（図２２の２２０３）、
・プローブＩＤ２２０２により識別されるプローブにより設定された測定区間における、プロファイリングの結果を保持する測定値（図２２の２２０４）、
・リンクテーブル（後述）へのリンク（例えばポインタ等）を保持する子階層リンク（ｃｈｉｌｄ）（図２２の２２０５）。
【０１６３】
なお、図２２に例示するコンテキスト構造体の構成は、一つの具体例であり、本実施形態はこれには限定されない。即ち、本実施形態におけるコンテキスト構造帯は特定のデータ形式に限定されず、上記各データを保持可能な任意のデータ形式を採用可能である。
【０１６４】
図２３は、本実施形態でのリンクテーブル（図２３の２３０１）及びコンテキスト構造体（図２２の２２０１）の接続関係（リンク構造）の具体例を示した図である。
【０１６５】
リンクテーブル２３０１は、プローブＩＤを保持するＩＤ列（図２３の２３０２）と、他のコンテキスト構造体に対するリンクを保持するｃｈｉｌｄ列（図２３の２３０３）と、有する。
【０１６６】
図２３に例示するように、コンテキスト構造体と、リンクテーブルとにより構成されるリンク構造は、プローブ間の階層構造を表す。親階層のプローブに関するコンテキスト構造体２２０１から接続（リンク）されるリンクテーブル２３０１には、子階層のプローブに関するコンテキスト構造体２２０１が接続される。即ち、リンクテーブル２３０１は、親階層のプローブにより設定される測定区間に含まれる子階層のプローブに関するコンテキスト構造体へのリンクを保持する。
【０１６７】
図２３に例示する具体例においては、コンテキスト構造体Ａは、親階層のプローブに関するコンテキスト構造体２３０１である。また、コンテキスト構造体Ｂは、子階層のプローブに関するコンテキスト構造体２３０１である。そして、コンテキスト構造体Ａからリンクされるリンクテーブル２３０１は、子階層のコンテキスト構造体Ｂに対するリンクを保持する。なお、ある親階層のプローブに対して、子階層のプローブが複数存在する場合、それら子階層のプローブに対するプローブＩＤと、コンテキスト構造体に対するリンクとの組合せが、リンクテーブルに設定（格納）される。
【０１６８】
図２１において、解析部２１０１は、開始プローブ処理部２１０１ａ、及び、終了プローブ処理部２１０１ｂを有する。解析部２１０１は、上記各実施形態における解析部９００と同様、プログラムに挿入されたプローブを検出し、検出したプローブにより特定された測定区間における、プログラムの性能を解析する処理（プロファイリング）を実行する。開始プローブ処理部２１０１ａは、上記各実施形態と同様、測定区間の先頭に挿入された開始プローブが検知された際（開始プローブが呼び出された際）に呼び出され、所定の処理を実行する。また、終了プローブ処理部２１０１ｂは、上記各実施形態と同様、測定区間の末尾に挿入された終了プローブが検知された際（終了プローブが呼び出された際）に呼び出され、所定の処理を実行する。
【０１６９】
記憶部２１０２は、プロファイリングを実行した結果を格納するコンテキスト構造体ツリー２１０２ａと、スタック２１０２ｂとを保持する。コンテキスト構造体ツリー２１０２ａは、上記説明したコンテキスト構造体と、リンクテーブルとにより構成されるリンク構造を木構造として保持する。スタック２１０２ｂは、上記各実施形態におけるスタック９０２ｂと同様としてよいが、本実施形態においては、コンテキスト構造体に対するリンクを保持する。
【０１７０】
図２４は、本実施形態における開始プローブ処理部２１０１ａの機能的な構成を例示するブロック図である。
【０１７１】
コンテキスト取得部２４０１は、スタック２１０２ｂの先頭にあるコンテキストを参照する。
【０１７２】
子コンテキスト検索部２４０２は、プローブＩＤ（図２２の２２０２）により識別されるプローブに対する子階層のプローブに関するコンテキスト構造体を検索する。
【０１７３】
コンテキスト生成部２４０３は、新しいコンテキスト構造体２２０１を生成する。
【０１７４】
コンテキスト接続部２４０４は、親階層のコンテキスト構造体２２０１に対するリンクテーブル２３０１に、子階層のコンテキスト構造体２２０１を接続する。
【０１７５】
コンテキスト格納部２４０５は、指定されたコンテキスト構造体２２０１をスタック２１０２ｂに格納する。
【０１７６】
計測部２４０６は、特定の測定区間においてプロファイリングを実行し、測定対象の値を取得する。計測部２４０６は、上記各実施形態における計測部（１００６）と同様としてよい。
【０１７７】
開始値記録部２４０７は、計測部２５０６において測定された結果を、コンテキスト構造体２２０１に設定する。
【０１７８】
なお、図２４に例示する構成は一つの具体例であり、開始プローブ処理部２１０１ａは、他の構成により実現されてもよい。
【０１７９】
図２５は、本実施形態における終了プローブ処理部２１０１ｂの機能的な構成を例示するブロック図である。
【０１８０】
計測部２５０１は、終了プローブを検出したタイミングにおける、上記各測定対象の測定値を取得する。計測部２５０１は、上記各実施形態における計測部１１０１と同様としてもよい。
【０１８１】
コンテキスト取り出し部２５０２は、スタック２１０２ｂから、コンテキスト構造体２２０１を取り出す。
【０１８２】
計測値格納部２５０３は、コンテキスト構造体２２０１に、計測値（測定値）を格納する。計測値格納部２５０３は、上記各実施形態における計測値格納部１１０４と同様、開始プローブ処理部２１０１ａと、終了プローブ処理部２１０１ｂとにおいて測定された測定値の差分を算出する。そして、計測値格納部２５０３は、係る算出結果を、コンテキスト構造体２２０２に既に格納されている値（測定値２２０４）に対して加算する。
【０１８３】
（動作の説明）
次に、本実施形態における解析装置２１００の動作について説明する。以下においては、特に、開始プローブ処理部２１０１ａ、及び、終了プローブ処理部２１０１ｂの動作について説明する。
【０１８４】
本実施形態における解析装置２１００は、初期化処理として、最初の開始プローブの実行前に、コンテキスト構造体（図２２の２２０１）をスタック２１０２ｂに格納しておく。このコンテキスト構造体は、計測値は格納しないが、トップレベル（最上位階層）のプローブをリンクするために利用される。
【０１８５】
（開始プローブ処理部の動作）
開始プローブ処理部２１０１ａの動作について、図２６に例示するフローチャートを参照して説明する。
【０１８６】
まず、解析部２１０１が、計測対象のプログラムに埋め込まれた開始プローブを検知する（ステップＳ２６０１）。係る処理は上記各実施形態におけるステップＳ１４０１、Ｓ１９０１と同様としてよい。なお、係る開始プローブと、当該開始プローブに対応する終了プローブとにより構成されるプローブを「現プローブ」と称する場合がある。
【０１８７】
コンテキスト取得部２４０１が、スタック２１０２ｂの先頭にあるコンテキスト構造体２２０１を取得する（ステップＳ２６０２）。本コンテキスト構造体２２０１は、この開始プローブの親階層のプローブに関するコンテキスト構造体（以下、「親コンテキスト構造体」あるいは「親コンテキスト」と称する）である。この場合、係るコンテキスト構造体２２０１は、スタック２１０２ｂに格納されてままであってもよい。
【０１８８】
子コンテキスト検索部２４０２は、親コンテキストに接続されたリンクテーブル２３０１において、開始プローブに対する引数で渡されたプローブＩＤを検索する。より具体的には、子コンテキスト検索部２４０２は、リンクテーブル２３０１のＩＤ列２３０２において、開始プローブに対する引数で渡されたプローブＩＤを検索する。これにより、子コンテキスト検索部２４０２は、当該プローブＩＤに関するコンテキスト構造体２２０１にリンクされる子階層のコンテキスト構造体２２０１を検索する（ステップＳ２６０３）。
【０１８９】
ステップＳ２６０３の結果、子階層のコンテキスト構造体２２０１がリンクされていなかった場合（ステップＳ２６０４においてＮＯ）、コンテキスト生成部２４０３は、現プローブ用に新しいコンテキスト構造体（以下、「現コンテキスト」あるいは「現コンテキスト構造体」と称する）と、リンクテーブル２３０１とを生成する。そして、コンテキスト接続部２４０４が、親コンテキストのリンクテーブル２３０１から、現コンテキスト構造体へ接続する。より具体的には、コンテキスト接続部２４０４が、親コンテキスト（親コンテキスト構造体）に関するリンクテーブル２３０１に対して、コンテキスト生成部２４０３が生成した現コンテキスト構造体へのリンクを設定する（ステップＳ２６０５）。
【０１９０】
なお、ステップＳ２６０４においてＹＥＳ（リンク有り）の場合、ステップＳ２６０３において検索した子階層のコンテキスト構造体が、現コンテキスト構造体である。
【０１９１】
次に、コンテキスト格納部２４０５は、現コンテキスト構造体をスタック２１０２ｂに格納する（ステップＳ２６０６）。より具体的には、コンテキスト格納部２４０５は、現コンテキスト構造体に対するリンクをスタック２１０２ｂに格納する。
【０１９２】
次に、計測部２４０６が測定対象に対する計測（測定）を行う（ステップＳ２６０７）。この測定値を開始値と称する。
【０１９３】
次に、開始値記録部２４０７が、測定値を現コンテキスト構造体の開始値（図２２における２２０３）に設定（格納）する（ステップＳ２６０８）。このとき既に値が格納されている場合は、値を上書き（更新）する。
【０１９４】
以上の動作により、スタック２１０２ｂの先頭には現プローブ用のコンテキスト構造体２２０１（現コンテキスト構造体）が格納される。
【０１９５】
（終了プローブ処理部の動作）
次に、終了プローブ処理部２１０１ｂの動作について図２７に例示するフローチャートを参照して説明する。
【０１９６】
まず、解析部２１０１が、計測対象のプログラムに埋め込まれた終了プローブを検知する（ステップＳ２７０１）。係る処理は、上記各実施形態におけるステップＳ１５０１、ステップＳ２００１と同様としてよい。
【０１９７】
次に、計測部２５０１が、測定対象に対する（測定）計測を行う（ステップＳ２７０２）。係る処理は、上記各実施形態におけるステップＳ１５０２、Ｓ２００２と同様としてよい。以下の説明において、この測定値を、終了値と称する。
【０１９８】
次に、コンテキスト取り出し部２５０２が、スタック２１０２ｂの先頭からコンテキスト構造体２２０１を取り出す（ステップＳ２７０３）。このとき取り出されるコンテキスト構造体は、この終了プローブに関するコンテキスト構造体（現コンテキスト構造体）である。
【０１９９】
次に、計測値格納部２５０３は、上記ステップＳ２５０１において測定した終了値と、上記ステップＳ２７０３において取り出された現コンテキスト構造体における開始値２２０３に記録されている開始値との差分を計算する。そして、計測値格納部２５０３は、計算した差分を現コンテキスト構造体における測定値２２０４に記録されている値に加算する。これにより、計測値格納部２５０３は、現コンテキスト構造体の計測値２２０４を更新する（ステップＳ２７０４）。
【０２００】
以上の動作により、開始プローブと終了プローブと間における測定対象に関する計測値の差分が、コンテキスト構造体２２０１に格納される。
【０２０１】
本実施形態においては、計測値格納テーブルのツリー（上記各実施形態における９０２ａ）の代わりに、コンテキスト構造体ツリー２２０１ａを用いて、プロファイリングの結果が格納される。
【０２０２】
計測値格納テーブル（図１２の１２０１）においては、同一階層に存在する異なるプローブに関する計測値が一つのテーブル（表）に格納される。これより、同一階層のプローブに関する測定値の格納あるいは参照に関する処理が、短いステップ数によって実行可能である。また、同一階層のプローブに関する計測値がメモリ等の記憶装置における近接した領域に格納されることから、キャッシュの利用効率が良いという利点がある。
【０２０３】
これに対して、本実施形態におけるコンテキスト構造体ツリー２１０２ａは、一つのコンテキスト構造体に、一つのプローブに対する計測値が格納される。即ち、本実施形態におけるコンテキスト構造体ツリー２１０２ａは、一つのプローブに対応するコンテキスト構造体が複数接続されることにより形成される。これより、同一階層の異なるプローブに関する測定値の格納あるいは参照を行う際に、ツリーのリンク構造を辿る必要があることから、これらの処理に要するステップ数は、上記各実施形態に比して多くなる場合がある。また、コンテキスト構造体がメモリ等の記憶装置において異なる領域に格納されることから、上記各実施形態と同等のキャッシュ利用効率が得られないことも予想される。
【０２０４】
一方、本実施形態によれば、上記説明したように、終了プローブ処理部２１０１ｂにおける処理のステップ数が、上記各実施形態における終了プローブ処理部（９０１ｂ、１６０１ｂ）と比べて少ないという効果を奏する。また、本実施形態においては、スタック２１０２ｂを用いて、コンテキスト構造体ツリー２０１２ａを作成することから、上記非特許文献１とは異なり、特殊なレジスタを必要としないという効果を奏する。
【０２０５】
また、本実施形態における解析装置２１００は、コンテキスト構造体２２０１を用いてプローブに関する測定結果を保持する処理以外においては、上記第１の実施形態における解析装置９００と概ね同様の機能を提供可能である。
【０２０６】
以上より、本実実施形態における解析装置２１００は、上記第１の実施形態と同様、プログラムの本来の仕様に応じた動作に対する影響が少なく、当該プログラムの実行過程における１以上の測定区間の相互の関係性を考慮した性能解析が可能である。
【０２０７】
＜第４の実施形態＞
次に、本発明の第４の実施形態について説明する。以下の説明においては、上記各実施形態と同様の構成については同様の参照符号を付すことにより、重複する説明を省略する。
【０２０８】
図３０は、本実施形態における解析装置３０００の機能的な構成を例示するブロック図である。本実施形態における解析装置３０００は、解析部３００１と、記憶部３００２と、を備える。
【０２０９】
解析部３００１は、性能解析の対象である測定区間を規定するプローブが階層的に含まれるコンピュータ・プログラムにおける、上記測定区間の開始ポイントと、上記測定区間の終了ポイントとを検知して、上記測定区間における性能解析を実行する。
【０２１０】
本実施形態において、あるプローブにより規定される測定区間に関する性能解析の結果は、解析情報に登録される。係る解析情報は、例えば、上記各実施形態における計測値格納テーブル（１２０１）であってもよく、コンテキスト構造体（２２０１）であってもよい。
【０２１１】
以下、検知した開始プローブにより開始される測定区間に関する性能解析の結果が登録される解析情報を「第１の解析情報」と称する。また、検知した開始プローブにより開始される測定区間を規定するプローブに対する子階層のプローブにより規定される測定区間に関する性能解析の結果が登録される解析情報を、「第２の解析情報」と称する。
【０２１２】
解析部３００１は、開始プローブを検知した際に、解析情報を特定可能なデータである解析情報リンクを１以上保持可能な解析情報リンク保持領域における特定の領域から、上記第１の解析情報を特定可能なデータを、取得する。
【０２１３】
また、解析部３００１は、係る第１の解析情報と、第２の解析情報とを、上記プローブの階層関係に基づいて関連付ける。
【０２１４】
解析部３００１は、例えば、上記各実施形態における解析部（９０１、２１０１）と同様としてもよい。上記データ保持領域は、例えば、上記各実施形態におけるスタック（９０２ｂ、２１０２ｂ）であってもよい。なお、上記データ保持領域における特定の領域は、上記各実施形態におけるスタック（９０２ｂ、２１０２ｂ）の上部（例えば、当該スタックの先頭）であってもよい。また、上記データ保持領域に保持される解析情報リンクは、上記各実施形態における計測値格納テーブル（１２０１）又はコンテキスト構造体（２２０１）に対するリンクを表すデータ（例えばポインタ等）であってもよい。また、解析部３００１は、例えば、それぞれの階層における上記測定区間に関する上記解析情報を、上記測定区間の階層構造を表現可能な木構造のノードに割り当ててもよい。
【０２１５】
記憶部３００２は、上記データ保持領域を保持する。係る記憶部３００２は、例えば、上記各実施形態における記憶部（９０２、２１０２）と同様としてもよい。また、記憶部３００２は、解析部３００１が、上記測定区間の階層構造を表現可能な木構造を用いて上記解析情報を関連付ける場合、当該木構造を保持してもよい。
【０２１６】
上記のように構成された本実施形態における解析装置３０００によれば、プログラムの性能解析に関し、当該プログラムの本来の仕様に応じた動作に対する影響が少なく、当該プログラムの実行過程における１以上の測定区間の相互の関係性を考慮した性能解析が可能な解析装置等を提供可能である。なぜならば、解析装置３０００は、計測対象のプログラムにおける測定区間の階層構造に基づいて、各測定区間における性能解析の結果を保持する解析情報を関連付けるからである。また、上記データ保持領域における特定の領域から上記解析情報を特定可能なデータが取得されることから、特定の測定区間に関する性能解析の結果が登録される解析情報を容易に特定可能である。これより、例えば、係る解析情報の特定に要する処理の負荷が低減される。以上より、本実施形態によれば、コンピュータ・プログラムの性能解析において、当該性能解析に起因する、コンピュータ・プログラムの動作に対する影響を低減可能である。
【０２１７】
＜ハードウェア及びソフトウェア・プログラム（コンピュータ・プログラム）の構成＞
以下、上記説明した各実施形態を実現可能なハードウェア構成について説明する。
【０２１８】
以下の説明において、上記各実施形態において説明した解析装置（９００、２１００、及び、３０００）をまとめて、単に「解析装置」と称する場合がある。また、当該解析装置の各構成要素（例えば、解析部（９０１、２１０１、３００１）、記憶部（９０２、２１０２、３００２）等）をまとめて、単に「解析装置の構成要素」と称する場合がある。
【０２１９】
上記各実施形態において説明した解析装置は、専用のハードウェア装置により構成してもよい。その場合、上記各図に示した各構成要素は、一部又は全部を統合したハードウェア（処理ロジックを実装した集積回路等）として実現してもよい。
【０２２０】
例えば、各構成要素をハードウェアにより実現する場合、各構成要素は、それぞれの機能を提供可能な集積回路をＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  ａ  Ｃｈｉｐ）等により実装されてもよい。この場合、例えば、各構成要素が保持するデータは、ＳｏＣとして統合されたＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）領域やフラッシュメモリ領域に記憶されてもよい。
【０２２１】
また、この場合、各構成要素を接続する通信回線としては、周知の通信バスを採用してもよい。また、各構成要素を接続する通信回線はバス接続に限らず、それぞれの構成要素間をピアツーピアで接続してもよい。
【０２２２】
また、上述した解析装置は、図３１に例示するような汎用のハードウェアと、係るハードウェアによって実行される各種ソフトウェア・プログラム（コンピュータ・プログラム）とによって構成されてもよい。
【０２２３】
図３１における演算装置３１０１は、汎用のＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やマイクロプロセッサ等の演算処理装置である。演算装置３１０１は、例えば後述する不揮発性記憶装置３１０３に記憶された各種ソフトウェア・プログラムを記憶装置３１０２に読み出し、係るソフトウェア・プログラムに従って処理を実行してもよい。上記各実施形態における解析部は、演算装置３１０１を用いて、性能解析の対象であるコンピュータ・プログラムに対する性能解析処理を実行してもよい。
【０２２４】
記憶装置３１０２は、演算装置３１０１から参照可能な、ＲＡＭ等のメモリ装置であり、ソフトウェア・プログラムや各種データ等を記憶する。なお、記憶装置３１０２は、揮発性のメモリ装置であってもよい。上記各実施形態における記憶部は、記憶装置３１０２を用いて、スタック（９０２ｂ、２１０２ｂ）、計測値格納テーブルのツリー（９０２ａ）、コンテキスト構造体ツリー（２１０２ａ）等を保持してもよい。
【０２２５】
不揮発性記憶装置３１０３は、例えば磁気ディスクドライブや、フラッシュメモリによる半導体記憶装置のような、不揮発性の記憶装置である。不揮発性記憶装置３１０３は、各種ソフトウェア・プログラムやデータ等を記憶可能である。
【０２２６】
ネットワークインタフェース３１０６は、通信ネットワークに接続するインタフェース装置であり、例えば有線及び無線のＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）接続用インタフェース装置等を採用してもよい。
【０２２７】
ドライブ装置３１０４は、例えば、後述する記憶媒体３１０５に対するデータの読み込みや書き込みを処理する装置である。
【０２２８】
記憶媒体３１０５は、例えば光ディスク、光磁気ディスク、半導体フラッシュメモリ等、データを記録可能な任意の記録媒体である。
【０２２９】
入出力インタフェース３１０７は、外部装置との間の入出力を制御する装置である。
【０２３０】
上記各実施形態における解析装置には、ネットワークインタフェース３１０６、入出力インタフェース３１０７、あるいはドライブ装置３１０４（記憶媒体３１０５）を介して、性能解析の対象であるコンピュータ・プログラムが入力されてもよい。
【０２３１】
なお、上記各実施形態における解析装置がネットワークインタフェース３１０６、入出力インタフェース３１０７、及び、ドライブ装置３１０４を備えるか否かは任意に定めてよい。
【０２３２】
上述した各実施形態を例に説明した本発明は、例えば、図３１に例示したハードウェア装置により解析装置を構成し、係るハードウェア装置に対して、上記各実施形態において説明した機能を実現可能なソフトウェア・プログラムを供給することにより実現されてもよい。この場合、係る装置に対して供給したソフトウェア・プログラムを、演算装置３１０１が実行することによって、本発明が実現されてもよい。
【０２３３】
上述した各実施形態において、上記各図（例えば、図９、図１６、図２１、及び図３０）に示した各部は、上述したハードウェアにより実行されるソフトウェア・プログラムの機能（処理）単位である、ソフトウェアモジュールとして実現することができる。ただし、これらの図面に示した各ソフトウェアモジュールの区分けは、説明の便宜上の構成であり、実装に際しては、様々な構成が想定され得る。
【０２３４】
例えば、上記各部をソフトウェアモジュールとして実現する場合、これらのソフトウェアモジュールを不揮発性記憶装置３１０３に記憶しておき、演算装置３１０１がそれぞれの処理を実行する際に、これらのソフトウェアモジュールを記憶装置３１０２に読み出すよう構成してもよい。
【０２３５】
また、これらのソフトウェアモジュールの間は、共有メモリやプロセス間通信等の適宜の方法により、相互に各種データを伝達できるように構成してもよい。このような構成により、これらのソフトウェアモジュールの間は、相互に通信可能に接続可能である。
【０２３６】
更に、上記各ソフトウェア・プログラムを記憶媒体３１０５に記録しておき、上記通信装置等の出荷段階、あるいは運用段階等において、適宜ドライブ装置３１０４を通じて当該ソフトウェア・プログラムを不揮発性メモリ３１０３に格納するよう構成してもよい。
【０２３７】
なお、上記の場合において、上記解析装置への各種ソフトウェア・プログラムの供給方法は、出荷前の製造段階、あるいは出荷後のメンテナンス段階等において、適当な治具を利用して当該装置内にインストールする方法を採用してもよい。また、各種ソフトウェア・プログラムの供給方法は、インターネット等の通信回線を介して外部からダウンロードする方法等のように、現在では一般的な手順を採用してもよい。
【０２３８】
そして、このような場合において、本発明は、係るソフトウェア・プログラムを構成するコード、あるいは係るコードが記録されたところの、コンピュータ読み取り可能な記憶媒体によって構成されると捉えることができる。
【０２３９】
また、上述した解析装置、あるいは、当解析装置の構成要素は、図３１に例示するハードウェア装置を仮想化した仮想化環境と、当該仮想化環境において実行される各種ソフトウェア・プログラム（コンピュータ・プログラム）とによって構成されてもよい。この場合、図３１に例示するハードウェア装置の構成要素は、当該仮想化環境における仮想デバイスとして提供される。なお、この場合も、図３１に例示するハードウェア装置を物理的な装置として構成した場合と同様の構成にて、本発明を実現可能である。
【０２４０】
以上、本発明を、上述した模範的な実施形態に適用した例として説明した。しかしながら、本発明の技術的範囲は、上述した各実施形態に記載した範囲には限定されない。当業者には、係る実施形態に対して多様な変更又は改良を加えることが可能であることは明らかである。そのような場合、係る変更又は改良を加えた新たな実施形態も、本発明の技術的範囲に含まれ得る。更に、上述した各実施形態、あるいは、係る変更又は改良を加えた新たな実施形態を組み合わせた実施形態も、本発明の技術的範囲に含まれ得る。そしてこのことは、特許請求の範囲に記載した事項から明らかである。
【符号の説明】
【０２４１】
９００  解析装置
９０１  解析部
９０１ａ  開始プローブ処理部
９０１ｂ  終了プローブ処理部
９０２  記憶部
１００１  テーブル取得部
１００２  子階層検索部
１００３  テーブル生成部
１００４  テーブル接続部
１００５  テーブル格納部
１００６  計測部
１００７  開始値記録部
１１０１  計測部
１１０２  テーブル取り出し部
１１０３  テーブル取得部
１１０４  計測値格納部
１７０１  テーブル置換部
１８０１  テーブル接続部
２１００  解析装置
２１０１  解析部
２１０２  記憶部
２４０１  コンテキスト取得部
２４０２  子コンテキスト検索部
２４０３  コンテキスト生成部
２４０４  コンテキスト接続部
２４０５  コンテキスト格納部
２４０６  計測部
２４０７  開始値記録部
２５０１  計測部
２５０２  コンテキスト取り出し部
２５０３  計測値格納部
３１０１  演算装置
３１０２  記憶装置
３１０３  不揮発性記憶装置
３１０４  ドライブ装置
３１０５  記憶媒体
３１０６  ネットワークインタフェース
３１０７  入出力インタフェース
【図１】
2016095757.tif 000003
【図２】
2016095757.tif 000004
【図３】
2016095757.tif 000005
【図４】
2016095757.tif 000006
【図５】
2016095757.tif 000007
【図６】
2016095757.tif 000008
【図７】
2016095757.tif 000009
【図８】
2016095757.tif 000010
【図９】
2016095757.tif 000011
【図１０】
2016095757.tif 000012
【図１１】
2016095757.tif 000013
【図１２】
2016095757.tif 000014
【図１３】
2016095757.tif 000015
【図１４】
2016095757.tif 000016
【図１５】
2016095757.tif 000017
【図１６】
2016095757.tif 000018
【図１７】
2016095757.tif 000019
【図１８】
2016095757.tif 000020
【図１９】
2016095757.tif 000021
【図２０】
2016095757.tif 000022
【図２１】
2016095757.tif 000023
【図２２】
2016095757.tif 000024
【図２３】
2016095757.tif 000025
【図２４】
2016095757.tif 000026
【図２５】
2016095757.tif 000027
【図２６】
2016095757.tif 000028
【図２７】
2016095757.tif 000029
【図２８】
2016095757.tif 000030
【図２９】
2016095757.tif 000031
【図３０】
2016095757.tif 000032
【図３１】
2016095757.tif 000033