(57)【要約】【課題】性能解析に用いる情報を収集する。【解決手段】性能測定カウンタ２１ａ〜２１ｃを用いて、ＣＰＵサイクルイベントと実行命令数イベントとを測定し、単位命令サイクル数を算出する実測部２３と、解析対象プログラムにおける複数の分岐情報を採取する採取部２４と、採取部２４が採取した分岐情報に基づき、逆アセンブルリスト上の実走行パスを特定し、所定の分岐の直後の命令から次に分岐する命令を含む基本ブロックを抽出し、抽出された各基本ブロックに含まれるアセンブラ命令数をカウントした結果に基づいて、基本ブロック特定情報とアセンブラ命令数との対応関係情報Ｔを保持する解析部２７と、対応関係情報Ｔに含まれる各基本ブロックのアセンブラ命令数に単位命令サイクル数を乗算して実行時間を算出する算出部２８とを有する。【選択図】図１
2015210574.tif 000002
【特許請求の範囲】
【請求項１】
性能測定カウンタを用いて、ＣＰＵサイクルイベントと実行命令数イベントとを測定し、単位命令サイクル数を算出する実測部と、
解析対象プログラムにおける複数の分岐情報を採取する採取部と、
前記採取部が採取した分岐情報に基づき、前記解析対象プログラムから作成された逆アセンブルリスト上の実走行パスを特定し、所定の分岐の直後の命令から次に分岐する命令を含む基本ブロックを抽出し、抽出された各基本ブロックに含まれるアセンブラ命令数をカウントした結果に基づいて、基本ブロック特定情報と前記アセンブラ命令数との対応関係情報を保持する解析部と、
前記対応関係情報に含まれる各基本ブロックの前記アセンブラ命令数に前記単位命令サイクル数を乗算して実行時間を算出する算出部と
を有することを特徴とする、情報処理装置。
【請求項２】
前記解析対象プログラムのオブジェクトファイルを回収する回収部と、
前記回収部が回収したオブジェクトファイルから前記逆アセンブルリストを作成する逆アセンブル部と
を備えることを特徴とする、請求項１記載の情報処理装置。
【請求項３】
前記採取部が、分岐トレース支援機能により作成された複数分岐情報を一度の情報採取で読み出すことで採取する
ことを特徴とする、請求項１又は２記載の情報処理装置。
【請求項４】
性能測定カウンタを用いて、ＣＰＵサイクルイベントと実行命令数イベントとを測定し、単位命令サイクル数を算出する処理と、
解析対象プログラムにおける複数の分岐情報を採取する処理と、
採取した分岐情報に基づき、前記解析対象プログラムから作成された逆アセンブルリスト上の実走行パスを特定し、所定の分岐の直後の命令から次に分岐する命令を含む基本ブロックを抽出し、抽出された各基本ブロックに含まれるアセンブラ命令数をカウントした結果に基づいて、基本ブロック特定情報と前記アセンブラ命令数との対応関係情報を保持する処理と、
前記対応関係情報に含まれる各基本ブロックの前記アセンブラ命令数に前記単位命令サイクル数を乗算して実行時間を算出する処理と
を有することを特徴とする、処理方法。
【請求項５】
性能測定カウンタを用いて、ＣＰＵサイクルイベントと実行命令数イベントとを測定し、単位命令サイクル数を算出し、
解析対象プログラムにおける複数の分岐情報を採取し、
採取した分岐情報に基づき、前記解析対象プログラムから作成された逆アセンブルリスト上の実走行パスを特定し、所定の分岐の直後の命令から次に分岐する命令を含む基本ブロックを抽出し、抽出された各基本ブロックに含まれるアセンブラ命令数をカウントした結果に基づいて、基本ブロック特定情報と前記アセンブラ命令数との対応関係情報を保持し、
前記対応関係情報に含まれる各基本ブロックの前記アセンブラ命令数に前記単位命令サイクル数を乗算して実行時間を算出する
処理をコンピュータに実行させることを特徴とする、処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置，処理方法及び処理プログラムに関する。
【背景技術】
【０００２】
計算機上で実行されるプログラムの性能を評価するプログラム性能解析方法として、例えば、性能プロファイラが知られている。性能プロファイラは、プログラムの実行を通して情報を収集することでプログラムの性能を解析する性能解析プログラムである。
性能プロファイラは、プログラム実行時の各種情報を収集し、特に、関数呼び出しの頻度やそれにかかる時間を計測する。
【０００３】
図１２は性能プロファイラの機能構成を模式的に示す図、図１３はその測定フェーズを説明する図、図１４は解析結果を例示する図である。
性能プロファイラは、図１２に示すように、ＰＭＣ（Performance Monitoring Counter）とサンプリングドライバ（Sampling Driver）とを備える。例えば、ＰＭＣとしての機能はＣＰＵ（Central Processing Unit）によって実現され、また、サンプリングドライバはカーネルの機能として実装される。
【０００４】
ＰＭＣは、一定間隔サンプリングドライバに対して割り込み（overflow割り込み，sampling割り込み）を発生させる。ＰＭＣは、レジスタのカウンタオーバーフロー割り込みを用いて、前述した割り込みを発生させる。図１２に示す例においては、ＰＭＣが１ｍｓ毎にオーバーフロー割り込みを発生させている。
サンプリングドライバは、ＰＭＣから割り込みが入力されると、解析対象である動作プログラムの情報を採取する。採取するプログラムの情報としては、例えば、実行中のプログラムのプロセスＩＤや命令アドレスである。
【０００５】
図１３においては、３種類のプログラムＡ，Ｂ，Ｃが、Ａ，Ｃ，Ｂ，Ａの順に実行された状態を例示している。そして、１ｍｓ毎（1ms rate）に発生されるオーバーフロー割り込みに応じて、サンプリングドライバがその時点でＣＰＵ（Central Processing Unit）により実行されているプログラムの情報を採取する。
採取されたプログラムの情報に対しては統計的解析が行なわれる。図１４に示す例においては、各動作プログラムをＣＰＵ使用率でソートして示している。これにより、例えば、各プログラムの処理に要した時間をそれぞれ知ることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−１４３７３５号公報
【特許文献２】特開平７−２１０６１号公報
【特許文献３】特開２００４−３０５１４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、近年においては、計算機の性能向上に伴い、解析対象のプログラムの実行時間が短くなってきており、例えば、そのレスポンスが１ｍｓ以内に行なわれることが求められる場合もある。すなわち、図１３に示す例において、図中に横軸方向に示す各動作プログラムの実行時間が短くなり、ＰＭＣからのオーバーフロー割り込みでは時系列解析に必要な情報を十分に採取できない場合があるという課題がある。
【０００８】
本発明の目的の一つは、精度の高い実行時間の算出を可能とすることである。
なお、前記目的に限らず、後述する発明を実施するための形態に示す各構成により導かれる作用効果であって、従来の技術によっては得られない作用効果を奏することも本発明の他の目的の１つとして位置付けることができる。
【課題を解決するための手段】
【０００９】
このため、この情報処理装置は、性能測定カウンタを用いて、ＣＰＵサイクルイベントと実行命令数イベントとを測定し、単位命令サイクル数を算出する実測部と、解析対象プログラムにおける複数の分岐情報を採取する採取部と、前記採取部が採取した分岐情報に基づき、前記解析対象プログラムから作成された逆アセンブルリスト上の実走行パスを特定し、所定の分岐の直後の命令から次に分岐する命令を含む基本ブロックを抽出し、抽出された各基本ブロックに含まれるアセンブラ命令数をカウントした結果に基づいて、基本ブロック特定情報と前記アセンブラ命令数との対応関係情報を保持する解析部と、前記対応関係情報に含まれる各基本ブロックの前記アセンブラ命令数に前記単位命令サイクル数を乗算して実行時間を算出する算出部とを有する。
【発明の効果】
【００１０】
一実施形態によれば、精度の高い実行時間の算出を可能とする。
【図面の簡単な説明】
【００１１】
【図１】実施形態の一例としての情報処理装置の機能構成を示す図である。
【図２】実施形態の一例としての情報処理装置のハードウェア構成を示す図である。
【図３】実施形態の一例としての情報処理装置における分岐トレース支援部によって作成される分岐情報を例示する図である。
【図４】実施形態の一例としての情報処理装置における逆アセンブルリストを例示する図である。
【図５】（ａ），（ｂ）は実施形態の一例としての情報処理装置における基本ブロックアドレス情報の生成方法を説明するための図である。
【図６】実施形態の一例としての情報処理装置におけるプログラム性能解析方法の概要を説明するフローチャートである。
【図７】実施形態の一例としての情報処理装置の基本ブロック抽出部による基本ブロックの抽出手法を説明するフローチャートである。
【図８】実施形態の一例としての情報処理装置における基本ブロックアドレス情報の変形例を示す図である。
【図９】実施形態の一例としての情報処理装置の基本ブロック抽出部による基本ブロックの抽出手法の変形例を説明するフローチャートである。
【図１０】図４に示す逆アセンブルリストを実行した場合に採取される採取データの一部を例示する図である。
【図１１】図１０に例示する採取データから生成される基本ブロック情報の一部を例示する図である。
【図１２】性能プロファイラの機能構成を模式的に示す図である。
【図１３】性能プロファイラの測定フェーズを説明する図である。
【図１４】解析結果を例示する図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本情報処理装置，処理方法及び処理プログラムに係る実施の形態を説明する。ただし、以下に示す実施形態はあくまでも例示に過ぎず、実施形態で明示しない種々の変形例や技術の適用を排除する意図はない。すなわち、本実施形態を、その趣旨を逸脱しない範囲で種々変形して実施することができる。又、各図は、図中に示す構成要素のみを備えるという趣旨ではなく、他の機能等を含むことができる。
【００１３】
図１は実施形態の一例としての情報処理装置の機能構成を示す図、図２はそのハードウェア構成を示す図である。
本実施形態の情報処理装置１は、プログラムを実行することにより各種機能を実現する計算機である。
本情報処理装置１は、図２に示すように、ＣＰＵ２０１，メモリ２０２，ディスプレイ２０５，キーボード２０６，マウス２０７，媒体読取装置２０８及び記憶装置２０９を備える。
【００１４】
ディスプレイ２０５は種々の情報を表示する表示装置であり、例えば、液晶ディスプレイ装置やＣＲＴ（Cathode Ray Tube）ディスプレイ装置である。
マウス２０７及びキーボード２０６はオペレータが種々の入力を行なうために操作する入力装置である。
メモリ２０２はＲＯＭ（Read Only Memory）及びＲＡＭ（Random Access Memory）を含む記憶装置である。メモリ２０２のＲＯＭには、プログラム性能解析に係るソフトウェアプログラムやこのプログラム用のデータ類が書き込まれている。メモリ２０２上のソフトウェアプログラムは、ＣＰＵ２０１に適宜読み込まれて実行される。
【００１５】
また、メモリ２０２のＲＡＭは、一次記憶メモリあるいはワーキングメモリとして利用される。このメモリ２０２のＲＡＭは、種々のデータやプログラムを一時的に格納する記憶装置であり図示しないメモリ領域をそなえる。
メモリ領域には、ＣＰＵ２０１がプログラムを実行する際に、データやプログラムを一時的に格納・展開して用いる。例えば、メモリ領域には、後述する、基本ブロック情報テーブルＴ，Ｔ′の情報や、逆アセンブルリスト等が格納される。
【００１６】
記憶装置２０９は、ハードディスクドライブ（Hard disk drive：ＨＤＤ）、ＳＳＤ（Solid State Drive）等の記憶装置であって、種々のデータを格納するものである。また、記憶装置２０９には、ＯＳ（Operating System）や解析対象のプログラムのオブジェクトファイル等も格納される。
媒体読取装置２０８は、記録媒体ＲＭが装着可能に構成される。媒体読取装置２０８は、記憶媒体ＲＭが装着された状態において、記録媒体ＲＭに記録されている情報を読み取り可能に構成される。本例では、記録媒体ＲＭは可搬性を有する。記録媒体ＲＭは、コンピュータ読取可能な記録媒体であって、例えば、フレキシブルディスク，ＣＤ（ＣＤ−ＲＯＭ，ＣＤ−Ｒ，ＣＤ−ＲＷ等），ＤＶＤ（ＤＶＤ−ＲＯＭ，ＤＶＤ−ＲＡＭ，ＤＶＤ−Ｒ，ＤＶＤ＋Ｒ，ＤＶＤ−ＲＷ，ＤＶＤ＋ＲＷ，ＨＤ  ＤＶＤ等），ブルーレイディスク，磁気ディスク，光ディスク，光磁気ディスク、又は、半導体メモリである。
【００１７】
ＣＰＵ２０１は、種々の制御や演算を行なう処理装置であり、メモリ２０２に格納されたＯＳやプログラムを実行することにより、種々の機能を実現する。例えば、ＣＰＵ２０１は、図１に示すように、性能解析部２１１としての機能を実現する。
すなわち、ＣＰＵ２０１が、性能解析プログラムを実行することにより、性能解析部２１１として機能する。
【００１８】
なお、この性能解析部２１１としての機能を実現するためのプログラム（処理プログラム）は、例えば前述した記録媒体ＲＭに記録された形態で提供される。そして、コンピュータはその記録媒体ＲＭからプログラムを読み取って内部記憶装置または外部記憶装置に転送し格納して用いる。又、そのプログラムを、例えば磁気ディスク，光ディスク，光磁気ディスク等の記憶装置（記録媒体）に記録しておき、その記憶装置から通信経路を介してコンピュータに提供するようにしてもよい。
【００１９】
性能解析部２１１としての機能を実現する際には、内部記憶装置（本実施形態ではメモリ２０２のＲＡＭやＲＯＭ）に格納されたプログラムがコンピュータのマイクロプロセッサ（本実施形態ではＣＰＵ２０１）によって実行される。このとき、記録媒体に記録されたプログラムをコンピュータが読み取って実行するようにしてもよい。
性能解析部２１１は、本情報処理装置１において実行されるプログラムの性能を解析する。
【００２０】
この性能解析部２１１は、図１に示すように、分岐トレース支援部２２，ＣＰＩ実測部２３，分岐トレース採取部２４，オブジェクト回収部２５，逆アセンブル部２６，基本ブロック解析部２７，基本ブロック実行時間算出部２８、及び、ＰＭＣ２１ａ〜２１ｃとしての機能を備える。
ＰＭＣ２１ａ〜２１ｃは、所定のイベントを監視して計数するカウンタ（性能イベント監視カウンタ）であり、レジスタのカウンタオーバーフロー割り込みを用いて、割り込みを発生させる。この割り込みをオーバーフロー（overflow）割り込み、もしくは、サンプリング（sampling）割り込みという場合がある。
【００２１】
ＰＭＣ２１ａはＣＰＵサイクル（CPU Cycle）イベントを測定し、周波数同期サイクル数を計数する。また、ＰＭＣ２１ｂは実行命令数イベントを測定し、命令数を計数する。
これらのＰＭＣ２１ａ，２１ｂによる計数結果（カウント値）は、レジスタ等の所定の記憶領域（図示省略）に格納される。
ＰＭＣ２１ｃは固定サイクル数を計数するものである。このＰＭＣ２１ｃにおいては、例えば、ＣＰＵ２０１のクロック周波数に基づき、所定時間経過毎（例えば、１ｍｓ毎）にオーバーフロー割り込みが出力されるように設定されている。このＰＭＣ２１ｃから出力されるオーバーフロー割り込みが、ＣＰＩ実測部２３及び分岐トレース採取部２４に入力され、それぞれサンプリング契機として用いられる。すなわち、ＰＭＣ２１ｃからのオーバーフロー割り込み通知（サンプリング割り込み）が、ＣＰＩ実測部２３や分岐トレース採取部２４による情報取得のトリガ通知として用いられる。
【００２２】
なお、これらのＰＭＣ２１ａ〜２１ｃとしての機能はＣＰＵの既知の機能によって実現され、その詳細な説明は省略する。
ＣＰＩ実測部２３は、ＰＭＣ２１ａによって計数されたＣＰＵサイクル数と、ＰＭＣ２１ｂによって計数された命令実行数イベントとをＰＭＣ２１ｃからのオーバーフロー割り込みを契機に採取する、実測部として機能する。すなわち、ＣＰＩ実測部２３は、本情報処理装置１におけるＣＰＵサイクルイベント及び命令実行数イベントを実測する。
【００２３】
なお、ＰＭＣ２１ａ，２１ｂの各カウンタ値は、ＣＰＩ実測部２３によりデータ取得が行なわれる度にリセットされる。
また、ＣＰＩ実測部２３は、これらのＣＰＵサイクル数及び命令実行数の各値を用いてＣＰＩを算出する。
ＣＰＩは、１命令あたりの実行に要するＣＰＵサイクル数（平均命令実行サイクル数）である。ＣＰＩ実測部２３は、ＣＰＵサイクル数の実測値を命令実行数の実測値で除算することで、ＣＰＩを算出する。このように、ＣＰＵサイクル数及び命令実行数の各実測値を用いて算出されるＣＰＩを実測ＣＰＩという場合がある。
【００２４】
このＣＰＩ実測部２３によって算出された実測ＣＰＩは、後述する基本ブロック実行時間算出部２８に通知される。
分岐トレース支援部２２は、解析対象のプログラム（実行プログラム）について、プログラム中の分岐アドレスを採取する。例えば、分岐トレース支援部２２は、プログラム中の分岐コマンド（例えば、jumpやcall，return）を検知することで分岐アドレスを特定する。
【００２５】
また、分岐トレース支援部２２は、例えば、ＬＢＲ（Last Branch Record）やＢＴＳ（Branch Trace Store）等の分岐トレース支援機能を実行することで、プログラムの実行に伴う分岐情報を採取する。具体的には、分岐トレース支援部２２は、分岐トレース支援機能により、実行された分岐のソース（分岐元となる分岐命令アドレス）と、ターゲット（分岐先の命令アドレス）とを取得し、所定の記憶領域に保存する。
【００２６】
図３は実施形態の一例としての情報処理装置１における分岐トレース支援部２２によって作成される分岐情報を例示する図である。この図３においては、分岐情報としてＬＢＲを用いた例を示している。
分岐トレース支援部２２は、ＣＰＵ２０１によって実行されたプログラム中で発生した分岐について、そのソース（分岐元となる分岐命令アドレス）とターゲット（分岐先の命令アドレス）とを取得し、所定のレジスタに記録する。
【００２７】
分岐トレース支援部２２は、図３に示すように、分岐について取得したソース（From）とターゲット（Ｔｏ）の各命令アドレス（ＩＰ：Instruction Pointer）を、専用のサイクリック・レジスタ・スタックにペア（分岐ペア）で記録する。
なお、この分岐トレース支援部２２による分岐トレース支援機能は既知の手法で実現することができる。
【００２８】
例えば、Ｉｎｔｅｌ（登録商標）のＣＰＵでは、１６ペア分の分岐アドレスが、ＬＢＲと呼ばれるレジスタ・スタックに記録され、最後の記録位置を示すＴＯＳ（Top Of Stack）と呼ばれるインデックス（index）レジスタも同時に更新される。ＴＯＳにはインデックスとして、サイクリック・レジスタ・スタックに登録される１６ペア分の分岐アドレスに対応する１〜１５のいずれかの数字が記録される。
【００２９】
なお、分岐トレース支援機能においては、例えば、採取対象とする分岐命令の種類（無条件分岐／条件分岐／call／return等）や特権レベル（ＯＳモード、userモード）のフィルタリング設定、および採取開始・停止指示等を操作することができる。
なお、上述した分岐トレース支援部２２としての機能は既知の手法で実現することができ、その詳細な説明は省略する。この分岐トレース支援部２２によって採取された分岐アドレスは分岐トレース採取部２４に通知される。
【００３０】
以下、分岐トレース支援機能としてＬＢＲを用いる例について示す。
分岐トレース採取部２４は、分岐トレース支援部２２によってレジスタ等に記録された分岐情報（各分岐アドレス）を採取する。すなわち、分岐トレース採取部２４は、本情報処理装置１におけるプログラムの実行履歴を採取するものであり、分岐トレース支援部２２によってレジスタ等に記録された分岐情報を読み出し、基本ブロック解析部２７に受け渡す。この分岐トレース採取部２４は、解析対象プログラムにおける複数の分岐情報を採取する採取部として機能する。
【００３１】
オブジェクト回収部２５は、解析対象のプログラム（ファイル）のオブジェクトファイルを取得するものであり、対象のオブジェクトファイルを当該オブジェクトファイルが格納された記憶装置２０９等の記憶装置から読み出し、予め規定された所定のフォルダ（処理用フォルダ）にコピー（回収）する。
逆アセンブル部２６は、オブジェクト回収部２５によって回収された各オブジェクトファイルに対して逆アセンブルを行なうことにより逆アセンブルリスト（命令列）を作成する。
【００３２】
図４は実施形態の一例としての情報処理装置１における逆アセンブルリストを例示する図である。この図４に例示する逆アセンブルリストは、単純な演算関数をtest1()、test2()、test3()、test4()、test５()の順にネストしてcallするプログラムの一部（test4及びtest5）を示す。
逆アセンブル部２６は、プログラムのコードを、図４に示すような人間が処理の流れを視認できる形式の逆アセンブルリスト（命令列）に変換（作成）する。
【００３３】
基本ブロック解析部２７は、解析対象のプログラムの逆アセンブルリストから基本ブロックを抽出し、この基本ブロックに含まれる命令数（Instruction Count）を計数する。この基本ブロック解析部２７は、図１に示すように、基本ブロック抽出部２７１及び命令数カウント部２７２を備える。
基本ブロック抽出部２７１は、分岐トレース採取部２４が採取した分岐情報に基づいて、基本ブロック情報Ｔを作成する。
【００３４】
図５（ａ），（ｂ）は実施形態の一例としての情報処理装置１における基本ブロックアドレス情報の生成方法を説明するための図であり、（ａ）は分岐情報の構成を例示する図、（ｂ）は基本ブロック情報Ｔの構成を示す図である。
基本ブロックとは、実行プログラム中において、図５（ａ）に示す分岐情報のターゲットＮ−１とソースＮとの間の命令列である。
【００３５】
基本ブロックは、命令列上において途中で分岐することなく真っ直ぐ走行した命令ブロックであり、ある分岐の直後の命令から次に分岐する命令までの範囲（ブロック）である。ＬＢＲデータである分岐情報においては、分岐のターゲットＮ−１からソースＮまでの範囲がこの基本ブロックに相当する。なお、一般に、基本ブロックのことを、ベーシック・ブロックもしくは実行命令ブロックという場合がある。
【００３６】
基本ブロック抽出部２７１は、分岐トレース支援部２２によって採取された分岐情報に基づいて、逆アセンブリリスト上の実走行パスを特定する。基本ブロック抽出部２７１は、分岐情報から読み出したターゲットＮ−１及びソースＮの各アドレスの値を、図５（ｂ）に示すように、基本ブロック情報Ｔにおいて、基本ブロックの開始アドレスおよび終点アドレスとして登録する。
【００３７】
ターゲットＮ−１とソースＮとの間の命令列が基本ブロックとして抽出され、この間にある全ての命令が１回リタイアしている（実行されている）。ただし、この間にある全ての分岐は実行されていない。
なお、図５（ｂ）に示す例においては、基本ブロック情報Ｔは、基本ブロックを特定する情報（例えば、基本ブロック１，２）に対して、開始アドレス及び終点アドレスを関連付けたテーブルとして構成されている。開始アドレスと終点アドレスとはペア情報として分岐情報から抽出され、基本ブロック情報に記録される。ペア情報を成す開始アドレスと終点アドレスとは、逆アセンブルリスト中における１つの基本ブロックの範囲を表し、基本ブロック特定情報として機能する。
【００３８】
また、図５（ｂ）に示すように、基本ブロック情報Ｔには、各基本ブロックに対して、その基本ブロックに含まれる命令数が解析結果として対応付けて記録される。この命令数は、後述する命令数カウント部２７２によって計数され、基本ブロック情報Ｔに記録される。以下、基本ブロック情報Ｔを基本ブロック情報テーブルＴという場合がある。
命令数カウント部２７２は、基本ブロック抽出部２７１によって抽出された各基本ブロック中に含まれる命令（comment）の数を計数する。この命令数カウント部２７２は、各基本ブロックに対応する逆アセンブルリスト上の実走行パスから、各基本ブロックに含まれる命令数（アセンブラ命令数）を計数する。
【００３９】
命令数カウント部２７２は、基本ブロック抽出部２７１が作成した基本ブロック情報（基本ブロック情報テーブル）Ｔを参照して、解析対象プログラムの逆アセンブルリストから、開始アドレスと終点アドレスとの組み合わせを読み出すことにより各基本ブロックを抽出する。
そして、命令数カウント部２７２は、抽出した各基本ブロックにおける命令数を計数する。
【００４０】
基本ブロック実行時間算出部２８は、基本ブロック情報テーブルＴ上の各基本ブロックの実行命令数（ＩＣ：Instruction Count）に、ＣＰＩ実測部２３によって算出された実測ＣＰＩを乗算して、実行時間を算出する。なお、以下、実行命令数を単に命令数もしくはＩＣという場合がある。また、実測ＣＰＩを単にＣＰＩという場合がある。
ＣＰＩにＩＣを乗算することで、ＣＰＵの時間性能を現すＣＰＵサイクル数（CPU  Cycles，CPU Times）を算出することができる。時間性能とは、ある処理に要した時間で性能を現す指標であり、ＣＰＵ時間性能とは、ＣＰＵがある処理に要した時間をいう。
【００４１】
なお、本実施形態においては、時間性能の表現としてＣＰＵサイクル数を用いるが、これに限定されるものではなく、例えば秒等の他の単位を用いてよい。Cyclesから秒への単位変換は、“ Cycles／ＣＰＵ周波数（Hz）”を演算することで実現できる。
また、基本ブロック実行時間算出部２８は、算出した実行時間を基本ブロック情報テーブルＴ上の対応する各基本ブロックに対して、再度、記録保持する。
【００４２】
上述の如く構成された実施形態の一例としての情報処理装置１におけるプログラム性能解析方法の概要を、図６に示すフローチャート（ステップＳ１〜Ｓ２）に従って説明する。
まず、ステップＳ１の測定フェーズにおいて、ＰＭＣ２１ｃからサンプリング間隔毎に行なわれるオーバーフロー割り込みを契機に、ＣＰＩ実測部２３及び分岐トレース採取部２４が情報採取を行なう。
【００４３】
すなわち、ＣＰＩ実測部２３は、ＰＭＣ２１ａ，２１ｂからサイクル数と実行命令数とを採取し、これらの値を用いて実測ＣＰＩを算出する。
また、分岐トレース採取部２４は、分岐トレース支援部２２によってレジスタ等に記録された分岐情報（各分岐アドレス）を採取する。この際、分岐トレース採取部２４は、逆アセンブルリスト中の複数の分岐についての分岐情報を一括で採取する。
【００４４】
さらに、オブジェクト回収部２５が、動作していたプログラムのオブジェクトファイルの回収を行なう。
次に、ステップＳ２の解析フェーズにおいて、逆アセンブル部２６が、オブジェクト回収部２５が回収したオブジェクトファイルより逆アセンブルリスト（命令列リスト）を作成する。また、基本ブロック解析部２７の基本ブロック抽出部２７１が、分岐トレース採取部２４が採取した分岐情報より、逆アセンブル部２６が作成した命令列リスト上での実行パスを特定する。すなわち、解析対象のプログラムを実行させることにより実際に走行した基本ブロックを特定する。基本ブロック抽出部２７１は、基本ブロック情報テーブルＴを作成する。基本ブロック抽出部２７１による基本ブロックの特定・抽出手法については、図７に示すフローチャートを用いて後述する。
【００４５】
さらに、命令数カウント部２７２が、特定された各基本ブロックに対する命令数を逆アセンブルリスト上の命令列で計数することにより、各基本ブロックの実走行命令数を求める。
そして、基本ブロック実行時間算出部２８が、ステップＳ１においてＣＰＵ実測部２３が算出した実測ＣＰＩと、ステップＳ１において命令数カウント部２７２が求めた各ブロックの命令数とを乗算することにより、各基本ブロックの実行時間をそれぞれ求める。このようにして求められた各基本ブロックの実行時間の情報は、記憶装置２０９等の記憶領域に基本ブロックを特定する情報に対応付けて記録される。そして、各基本ブロックの実行時間の情報は、例えば統計解析に用いられ、図１４に例示したような解析結果として出力される。
【００４６】
次に、実施形態の一例としての情報処理装置１の基本ブロック抽出部２７１による基本ブロックの抽出手法を、図７に示すフローチャート（ステップＡ１〜Ａ６）に従って説明する。
なお、この図７においては、ＬＢＲデータからの基本ブロック抽出方法を示し、ＬＢＲスタックのうち、時間的に一番古いデータから時間順に辿る場合について例示する。分岐トレース採取部２４は、分岐トレース支援部２２が特段のフィルタを設定することなく採取した１６ペア分の分岐アドレスを採取する。
【００４７】
ステップＡ１において、基本ブロック抽出部２７１は、変数Ｎに対して、ＴＯＳレジスタの値を設定する。また、変数ｉに初期値としての１を設定する。
ステップＡ２において、基本ブロック抽出部２７１は、Ｎ＋２の値がＬＢＲのレジスタ・スタックの数である１６よりも小さいか否かを判定することで、ＬＢＲのサイクリックレジスタにおいてラップアラウンドさせるか否かを判定する。
【００４８】
判定の結果、Ｎ＋２の値が１６未満の場合（ステップＡ２のＹＥＳルート参照）、ステップＡ３において、基本ブロック抽出部２７１は、分岐ＮについてのＬＢＲレコード（分岐情報）を参照して、ターゲットＮ＋１及びソースＮ＋２の値を読み出す。そして、基本ブロック抽出部２７１は、基本ブロック情報Ｔにおいて、基本ブロックＮの開始アドレスとしてターゲットＮ＋１の値を記録し、また、基本ブロックＮの終点アドレスとしてソースＮ＋２の値を記録する。その後、Ｎをインクリメントする。
【００４９】
ステップＡ５において、基本ブロック抽出部２７１は、ｉが１６未満であるか否かを確認し、ｉが１６以上である場合には（ステップＡ５のＮＯルート参照）、処理を終了する。また、ｉが１６未満である場合には（ステップＡ５のＹＥＳルート参照）、ステップＡ６においてｉをインクリメントした後、ステップＡ２に戻る。
一方、ステップＡ２における判定の結果、Ｎ＋２の値が１６以上の場合（ステップＡ２のＮＯルート参照）、ステップＡ４において、ＬＢＲのサイクリックレジスタにおいてラップアラウンドさせる処理を行なう。
【００５０】
すなわち、分岐ＮについてのＬＢＲレコード（分岐情報）を参照して、ターゲット１５及びソース０の値を読み出す。そして、基本ブロック抽出部２７１は、基本ブロック情報Ｔにおいて、基本ブロックＮの開始アドレスとしてターゲット１５の値を記録し、また、基本ブロックＮの終点アドレスとしてソース０の値を記録する。その後、Ｎに“−１”を設定し、ステップＡ５に移行する。
【００５１】
この後、命令数カウント部２７２が、各基本ブロックに含まれる命令数を計数し、図５（ｂ）に示す基本ブロック情報Ｔに記録することで、基本ブロック情報Ｔが生成される。
さて、上述した実施形態においては、基本ブロック情報Ｔにおいて、基本ブロックに対して、開始アドレス，終点アドレス及び命令数を対応付けているが、これに限定されるものではない。
【００５２】
図８は実施形態の一例としての情報処理装置１における基本ブロックアドレス情報の変形例を示す図である。
この図８に示す基本ブロック情報Ｔ′においては、図５（ｂ）に示した基本ブロック情報Ｔに、更に、関数名を関連付けられている。
この基本ブロック情報Ｔ′の関数名は、基本ブロックにおいて実行される関数シンボルを示す。例えば、処理対象のオブジェクトファイルのシンボルマップを予め作成しておき、基本ブロック抽出部２７１による基本ブロックの抽出後に、基本ブロック解析部２７が、基本ブロックのターゲットＮ＋１のアドレスの値に基づいてシンボルマップを参照することにより、当該基本ブロックに対応する関数名を取得することができる。なお、シンボルマップの作成は、例えば、ｎｍコマンドを実行する等の機知の手法を用いて行なうことができ、その詳細な説明は省略する。
【００５３】
基本ブロック情報Ｔ′に関数名を備えることにより、関数単位での実行履歴を参照することができ利便性が高い。例えば、ｆｏｒ文によりループが繰り返されると、ＬＢＲのレジスタ・スタックはすぐに埋まってしまう。
プログラムの性能解析において、関数単位での挙動解析で良い場合には、このような基本ブロック情報Ｔ′の利便性が高い。なお、この際、分岐トレースは機知の分岐トレース支援機能のフィルタリング機能を用いて、call／returnのみを採取することが望ましい。
【００５４】
このような実施形態の一例としての情報処理装置１の基本ブロック抽出部２７１による基本ブロックの抽出手法の変形例を、図９に示すフローチャート（ステップＡ１〜Ａ６，Ａ３１，Ａ４１）に従って説明する。この図９に示すフローチャートによる基本ブロックの抽出手法によれば、図８に示す基本ブロック情報Ｔ′が生成される。
なお、この図９においても、ＬＢＲデータからの基本ブロック抽出方法を示し、ＬＢＲスタックのうち、時間的に一番古いデータから時間順に辿る場合について例示する。分岐トレース採取部２４は、分岐トレース支援部２２がフィルタリングでcall／return分岐のみの１６ペア分の分岐アドレスを採取するものとする。
【００５５】
分岐トレース採取部２４は、１セット分（１６ペア分）のＬＢＲデータ採取し、また、オブジェクトファイルのシンボルマップも予め作成される。
ステップＡ１において、基本ブロック抽出部２７１は、変数Ｎに対して、ＴＯＳレジスタの値を設定する。また、変数ｉに初期値としての１を設定する。
ステップＡ２において、基本ブロック抽出部２７１は、Ｎ＋２の値がＬＢＲのレジスタ・スタックの数である１６よりも小さいか否かを判定することで、ＬＢＲのサイクリックレジスタにおいてラップアラウンドさせるか否かを判定する。
【００５６】
判定の結果、Ｎ＋２の値が１６未満の場合（ステップＡ２のＹＥＳルート参照）、ステップＡ３において、基本ブロック抽出部２７１は、分岐ＮについてのＬＢＲレコード（分岐情報）を参照して、ターゲットＮ＋１及びソースＮ＋２の値を読み出す。そして、基本ブロック抽出部２７１は、基本ブロック情報Ｔ′において、基本ブロックＮの開始アドレスとしてターゲットＮ＋１の値を記録し、また、基本ブロックＮの終点アドレスとしてソースＮ＋２の値を記録する。その後、Ｎをインクリメントする。
【００５７】
ステップＡ３１において、基本ブロック解析部２７は、ターゲットＮ＋１をシンボルマップと照らし合わせて関数名に変換し、その関数名を基本ブロック情報Ｔ′に記録する。
ステップＡ５において、基本ブロック抽出部２７１は、ｉが１６未満であるか否かを確認し、ｉが１６以上である場合には（ステップＡ５のＮＯルート参照）、処理を終了する。また、ｉが１６未満である場合には（ステップＡ５のＹＥＳルート参照）、ステップＡ６においてｉをインクリメントした後、ステップＡ２に戻る。
【００５８】
一方、ステップＡ２における判定の結果、Ｎ＋２の値が１６以上の場合（ステップＡ２のＮＯルート参照）、ステップＡ４において、ＬＢＲのサイクリックレジスタにおいてラップアラウンドさせる処理を行なう。
すなわち、基本ブロック抽出部２７１は、分岐ＮについてのＬＢＲレコード（分岐情報）を参照して、ターゲット１５及びソース０の値を読み出す。そして、基本ブロック抽出部２７１は、基本ブロック情報Ｔ′において、基本ブロックＮの開始アドレスとしてターゲット１５の値を記録し、また、基本ブロックＮの終点アドレスとしてソース０の値を記録する。その後、Ｎに“−１”を設定する。
【００５９】
ステップＡ４１において、基本ブロック解析部２７は、ターゲット１５をシンボルマップと照らし合わせて関数名に変換し、その関数名を基本ブロック情報Ｔ′に記録する。その後、ステップＡ５に移行する。
この後、命令数カウント部２７２が、各基本ブロックに含まれる命令数を計数し、図８に示す基本ブロック情報Ｔ′に記録することで、基本ブロック情報Ｔ′が生成される。
【００６０】
図１０は図４に示す逆アセンブルリストを実行した場合に採取される採取データの一部を例示する図であり、図１１は図１０に例示する採取データから生成される基本ブロック情報Ｔ′の一部を例示する図である。なお、図１１に示す例においては、基本ブロック情報Ｔ′に、本手法により基本ブロック実行時間算出部２８が算出した実行時間（Cycles；ＣＰＩ×命令数）と、従来のシミュレーション手法による求めた実行時間（Cycles）とを付して示している。なお、この従来のシミュレーション手法による実行時間“19”は、ＣＰＩの仕様上の理想値“0.5”を命令数に乗算することにより算出されている（38×0.5＝19）。
【００６１】
図１０に示す採取データにおいては、１行に１サンプル分の取得データを示すことで３サンプル分の採取データを例示している。また、この図１０中においては、上から２番目及び３番目のサンプルについての詳細なデータ例の図示を省略している。
例えば、ＣＰＩ実測部２３による採取結果として、命令数として“312007（符号Ｐ１参照）”が、また、サイクル数として“297491（符号Ｐ２参照）”が示されている。これにより、実測ＣＰＩは、297491／312007＝0.95と求められる（符号Ｐ３参照）。また、最新のＴＯＳが“５”である。
【００６２】
図１１に示すように、基本ブロック１の開始アドレス（ターゲット０）が“400c9a”であり、その終点アドレス（ソース１）が“400c17”である。また、この範囲で示されるk本ブロックの関数名は“test5”であり、命令数は３８である。この場合、ＣＰＩ×命令数（Cycles）は、0.95×38＝36.1と求められる。
このCyclesの値は、従来のシミュレーション手法の理想値“19”よりも現実に即した値となっている。
【００６３】
このように、実施形態の一例としての情報処理装置１によれば、基本ブロック実行時間算出部２８が、基本ブロック毎の実行時間の実測値を算出する。これにより、解析対象のプログラムにおいて、当該プログラムを構成する基本ブロック毎に処理に要した時間を把握することができる。
ＬＢＲやＢＴＳ等の分岐トレース支援機能においては、一度のサンプリングで採取される分岐情報に含まれる各分岐ペアの採取時刻が不明であるが、本情報処理装置１によれば、基本ブロック毎の実行時間を知ることができ利便性が高い。
【００６４】
また、短時間で処理されるプロセスについても、基本ブロック単位で実行時間の算出を確実に行なうことができ、精度の高い実行時間の算出を可能とし、また、性能解析に必要な情報を収集することができる。例えば、１００μｓ未満の超短処理プロセスの高精細解析が可能になる。
基本ブロック毎に処理に要した時間を把握することができるので、例えば、どのプロセスにおいて待ち（遅延）が発生したか等を容易に知ることができ利便性が高い。
【００６５】
また、この際、ＣＰＩ実測部２３が、ＰＭＣ２１ｃからのオーバーフロー割り込みを契機として、ＰＭＣ２１ａ，２１ｂからサイクル数と実行命令数とを採取し、これらの値を用いて実測ＣＰＩを算出する。すなわち、基本ブロック実行時間算出部２８は、サンプリング毎に算出された実測ＣＰＩを用いて基本ブロック毎の実行時間の実測値を算出することができる。例えば、キャッシュミス等が発生した場合には、算出される実測ＣＰＩの値は、このキャッシュミスの発生に応じて一時的に小さくなる。すなわち、ＣＰＵ２０１による実際の処理状況が反映された解析を行なうことができ信頼性が高い。
【００６６】
ＰＭＣ２１ｃからのオーバーフロー割り込みを契機として、１回のサンプリングで、分岐トレース採取部２４がＬＢＲの１６ペア分の分岐情報を採取することができる。これにより、高精細な解析を行なうことができる。例えば、従来手法である性能プロファイラを用いる場合に比べて、解像度が１７倍に向上する。
また、分岐毎に割り込みを発生させることで分岐情報を採取する、分岐トラップを利用した既知の命令トレーサ手法に比べて、採取負荷を例えば１／１０００程度に軽減することができる。
【００６７】
そして、開示の技術は上述した実施形態に限定されるものではなく、本実施形態の趣旨を逸脱しない範囲で種々変形して実施することができる。本実施形態の各構成及び各処理は、必要に応じて取捨選択することができ、あるいは適宜組み合わせてもよい。
例えば、上述した実施形態においては、分岐トレース支援部２２が分岐情報をＬＢＲを用いて取得する例を示しているが、これに限定されるものではなく、種々変形して実施することができる。例えば、分岐トレース支援部２２はＢＴＳを用いて分岐情報を取得してもよい。
【００６８】
なお、ＬＢＲに代えてＢＴＳを用いる場合には、基本ブロックの抽出に際して、ＬＢＲのレジスタ・スタックの数である１６を用いて比較判断を行なう（図７や図９参照）代わりに、分岐ペアの記憶に用いる記憶領域のアドレス等を用いることが望ましい。
また、上述した実施形態においては、情報処理装置１がオブジェクト回収部２５及び逆アセンブル部２６を備え、解析対象のプログラムのオブジェクトファイルを回収して逆アセンブルリストを作成しているが、これに限定されるものではない。すなわち、例えば、生成された逆アセンブルリストを外部から入力してもよく、種々変形して実施することができる。
【００６９】
また、上述した開示により本実施形態を当業者によって実施・製造することが可能である。
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
性能測定カウンタを用いて、ＣＰＵサイクルイベントと実行命令数イベントとを測定し、単位命令サイクル数を算出する実測部と、
解析対象プログラムにおける複数の分岐情報を採取する採取部と、
前記採取部が採取した分岐情報に基づき、前記解析対象プログラムから作成された逆アセンブルリスト上の実走行パスを特定し、所定の分岐の直後の命令から次に分岐する命令を含む基本ブロックを抽出し、抽出された各基本ブロックに含まれるアセンブラ命令数をカウントした結果に基づいて、基本ブロック特定情報と前記アセンブラ命令数との対応関係情報を保持する解析部と、
前記対応関係情報に含まれる各基本ブロックの前記アセンブラ命令数に前記単位命令サイクル数を乗算して実行時間を算出する算出部と
を有することを特徴とする、情報処理装置。
【００７０】
（付記２）
前記解析対象プログラムのオブジェクトファイルを回収する回収部と、
前記回収部が回収したオブジェクトファイルから前記逆アセンブルリストを作成する逆アセンブル部と
を備えることを特徴とする、付記１記載の情報処理装置。
【００７１】
（付記３）
前記採取部が、分岐トレース支援機能により作成された複数分岐情報を一度の情報採取で読み出すことで採取する
ことを特徴とする、付記１又は２記載の情報処理装置。
（付記４）
性能測定カウンタを用いて、ＣＰＵサイクルイベントと実行命令数イベントとを測定し、単位命令サイクル数を算出する処理と、
解析対象プログラムにおける複数の分岐情報を採取する処理と、
採取した分岐情報に基づき、前記解析対象プログラムから作成された逆アセンブルリスト上の実走行パスを特定し、所定の分岐の直後の命令から次に分岐する命令を含む基本ブロックを抽出し、抽出された各基本ブロックに含まれるアセンブラ命令数をカウントした結果に基づいて、基本ブロック特定情報と前記アセンブラ命令数との対応関係情報を保持する処理と、
前記対応関係情報に含まれる各基本ブロックの前記アセンブラ命令数に前記単位命令サイクル数を乗算して実行時間を算出する処理と
を有することを特徴とする、処理方法。
【００７２】
（付記５）
前記解析対象プログラムのオブジェクトファイルを回収する処理と、
回収したオブジェクトファイルから前記逆アセンブルリストを作成する処理と
を備えることを特徴とする、付記４記載の処理方法。
（付記６）
分岐トレース支援機能により作成された複数分岐情報を一度の情報採取で読み出すことで採取する
ことを特徴とする、付記４又は５記載の処理方法。
【００７３】
（付記７）
性能測定カウンタを用いて、ＣＰＵサイクルイベントと実行命令数イベントとを測定し、単位命令サイクル数を算出し、
解析対象プログラムにおける複数の分岐情報を採取し、
採取した分岐情報に基づき、前記解析対象プログラムから作成された逆アセンブルリスト上の実走行パスを特定し、所定の分岐の直後の命令から次に分岐する命令を含む基本ブロックを抽出し、抽出された各基本ブロックに含まれるアセンブラ命令数をカウントした結果に基づいて、基本ブロック特定情報と前記アセンブラ命令数との対応関係情報を保持し、
前記対応関係情報に含まれる各基本ブロックの前記アセンブラ命令数に前記単位命令サイクル数を乗算して実行時間を算出する
処理をコンピュータに実行させることを特徴とする、処理プログラム。
【００７４】
（付記８）
前記解析対象プログラムのオブジェクトファイルを回収し、
回収したオブジェクトファイルから前記逆アセンブルリストを作成する
処理を、前記コンピュータに実行させることを特徴とする、付記７記載の処理プログラム。
【００７５】
（付記９）
分岐トレース支援機能により作成された複数分岐情報を一度の情報採取で読み出すことで採取する
処理を、前記コンピュータに実行させることを特徴とする、付記７又は８記載の処理プログラム。
【符号の説明】
【００７６】
１    情報処理装置
２１ａ，２１ｂ，２１ｃ    ＰＭＣ
２２    分岐トレース支援部
２３    ＣＰＩ実測部
２４    分岐トレース採取部
２５    オブジェクト回収部
２６    逆アセンブル部
２７    基本ブロック解析部
２８    基本ブロック実行時間算出部
２７１    基本ブロック抽出部
２７２    命令数カウント部
Ｔ，Ｔ′    基本ブロック情報
【図１】
2015210574.tif 000003
【図２】
2015210574.tif 000004
【図３】
2015210574.tif 000005
【図４】
2015210574.tif 000006
【図５】
2015210574.tif 000007
【図６】
2015210574.tif 000008
【図７】
2015210574.tif 000009
【図８】
2015210574.tif 000010
【図９】
2015210574.tif 000011
【図１０】
2015210574.tif 000012
【図１１】
2015210574.tif 000013
【図１２】
2015210574.tif 000014
【図１３】
2015210574.tif 000015
【図１４】
2015210574.tif 000016