(57)【特許請求の範囲】
【請求項１】
情報処理装置が実行している処理内容を所定の時間間隔でサンプリング処理して得られた処理内容情報の集計処理を、コンピュータに実行させる集計プログラムにおいて、
所定の複数種類の処理内容のうちのいずれかを示す処理内容情報を、所定の個数含む処理内容情報群について、処理内容ごとに集計を行なうこと
をコンピュータに実行させることを特徴とする集計プログラム。
【請求項２】
前記処理内容情報のそれぞれは、
前記情報処理装置からサンプリング処理されたときの時間の情報を含み、さらに、
プログラムを識別する情報、関数を識別する情報のうち少なくとも１つを含むこと
を特徴とする請求項１記載の集計プログラム。
【請求項３】
前記コンピュータに、
連続してサンプリング処理された処理内容情報であって、前記複数種類の処理内容のいずれかを示す処理内容情報を前記個数含む処理内容情報群について、前記集計を行なうこと
を実行させることを特徴とする請求項１又は請求項２に記載の集計プログラム。
【請求項４】
前記コンピュータに、さらに、
前記複数種類の処理内容と、前記個数の指定の受け付けを行なうこと
を実行させることを含み、
指定された前記複数種類の処理内容のいずれかを示す処理内容情報を、指定された前記個数含む処理内容情報群について、前記集計を行なうこと
を前記コンピュータに実行させることを特徴とする請求項１〜請求項３のいずれか１つに記載の集計プログラム。
【請求項５】
前記指定に、
前記集計において計数の対象とする複数種類の処理内容の指定をさらに含み、
前記コンピュータに、
計数の対象として指定された複数種類の処理内容ごとに、前記集計を行なうこと
を実行させることを特徴とする請求項４記載の集計プログラム。
【請求項６】
前記計数の対象とする複数種類の処理内容の指定が、
同一のプログラムに属する複数種類の関数を計数の対象とする指定であること
を特徴とする請求項４又は請求項５記載の集計プログラム。
【請求項７】
前記コンピュータに、
サンプリング処理された処理内容情報から、前記処理内容情報群を複数設定し、前記処理内容情報群ごとに前記集計を行なうこと
を実行させることを特徴とする請求項１〜請求項６のいずれか１つに記載の集計プログラム。
【請求項８】
前記コンピュータに、さらに、
前記集計による処理内容ごとの集計値を、前記集計を行なった前記処理内容情報群ごとに表示すること
を実行させることを特徴とする請求項７記載の集計プログラム。
【請求項９】
前記コンピュータに、さらに、
前記集計による処理内容ごとの集計値と、前記個数との比を計算し、
前記比を、前記集計を行なった前記処理内容情報群ごとに表示すること
を実行させることを特徴とする請求項８に記載の集計プログラム。
【請求項１０】
前記コンピュータが、
前記集計の前記処理内容情報群に含まれる処理内容情報が示す時間の情報の範囲を、前記処理内容情報群ごとに対応付けて表示すること
を実行させることを特徴とする請求項８又は請求項９に記載の集計プログラム。
【請求項１１】
情報処理装置が実行している処理内容を所定の時間間隔でサンプリング処理して得られた処理内容情報の集計方法において、
所定の複数種類の処理内容のうちのいずれかを示す処理内容情報を、所定の個数含む処理内容情報群について、処理内容ごとに集計を行なうこと
を特徴とする集計方法。
【請求項１２】
情報処理装置が実行している処理内容を所定の時間間隔でサンプリング処理して得られた処理内容情報の集計を行なう集計装置において、
所定の複数種類の処理内容のうちのいずれかを示す処理内容情報を、所定の個数の処理内容情報群について、処理内容ごとに集計を行なう手段
を備えることを特徴とする集計装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、プログラムを実行した処理装置から収集した情報に基づいて、プログラムの性能分析を行なう技術に関する。
【背景技術】
【０００２】
プログラムを実行した情報処理装置から実行中の処理内容を示す情報などを収集し、収集した情報について集計処理を行なって得た集計結果に基づいて、実行した当該プログラムの動作の確認を行なう、いわゆるプログラムの性能分析が従来行なわれている。
【０００３】
プログラムの性能分析に関して集計処理を行なう手法として、非特許文献１において、例えば一定の時間間隔で関数プロファイルをサンプリングし、サンプリングした関数プロファイルを０〜１０，１０〜２０，２０〜３０［秒］といった時間範囲ごとに集計することにより、関数の実行時間内訳を計算する手法が提案されている。
【先行技術文献】
【特許文献】
【０００４】
【非特許文献１】山村周史著  情報処理学会論文誌  時系列データの統計解析によるＰＣクラスタシステム解析手法の提案  Ｖｏｌ．４７  Ｎｏ．ＳＩＧ１２（ＡＣＳ１５）  ｐｐ．２５０−２６１（２００６）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献１によれば、定められた時間範囲において、サンプリングされた関数プロファイルの集計により、定められた時間範囲においてそれぞれの関数がどの程度の時間実行されていたかを示すものとして、関数の実行時間内訳を算出する。しかしながら、分析対象のプログラムと並行して、他のプログラムが同じ情報処理装置で実行された場合は、当該他のプログラムの処理に情報処理装置のＣＰＵが割り当てられるため、関数の実行時間内訳において、他のプログラムに関する処理も割合を占める。
【０００６】
すると、ある情報処理装置において、実行されているプログラムが分析対象のプログラムのみであれば、ある時間範囲内に行なわれる処理であっても、他のプログラムが実行されることにより、同じ時間範囲内に処理されないといった事態が生じ得る。この場合、他のプログラムの処理に当該情報処理装置のＣＰＵがどの程度割り当てられるかによって、同じ時間範囲内に行なわれる分析対象のプログラムに関する処理量も変動すると考えられ、それに応じて当該時間範囲に占める分析対象のプログラムの実行時間も変動すると考えられる。
【０００７】
また、分析対象のプログラム以外の処理は、ユーザが予期せずに実行されることもある。ユーザが予期せず実行される処理として、例えば、ＯＳのカーネル関数、もしくはガーベッジコレクションなどが考えられる。これらの処理が実行されることで、定められた時間範囲内に占める分析対象のプログラムに関する処理の実行時間は予期せず変動しうる。
【０００８】
定められた時間範囲あたりの分析対象のプログラムに関する処理の実行時間が変動すると、その内訳から分析対象のプログラムの動作を確認することは困難になる。例えば、他のプログラムも並行して実行されている場合に、複数の時間範囲における関数の実行時間内訳において、分析対象のプログラムに属する関数の割合の変化を見出したとしても、その変化が分析対象のプログラムの動作にそもそも起因するものか、他のプログラムの実行時間割合の増減に起因するものか判別できないといった事態が考えられる。
【０００９】
本願は、分析対象のプログラムについて、他のプログラムの影響を低減させて処理内容を示す情報の集計を行なうことを目的にする。
【課題を解決するための手段】
【００１０】
本発明では、情報処理装置が実行している処理内容を所定の時間間隔でサンプリング処理して得られた処理内容情報の集計処理において、所定の複数種類の処理内容のいずれかを示す処理内容情報を、所定の個数含む処理内容情報群について、処理内容ごとに集計を行なう。
【発明の効果】
【００１１】
本発明によれば、分析対象のプログラムについて、他のプログラムの影響を低減させて、処理内容を示す情報の集計を行なうことができる。
【図面の簡単な説明】
【００１２】
【図１】第一の実施形態にかかる集計システムの構成図
【図２】条件設定のフロー図
【図３】集計処理のフロー図
【図４】第二の実施例における集計部１の構成図
【図５】第二の実施例における集計処理のフロー図
【図６】カウンタに対応付けられる情報例
【図７】サンプリングしたデータの例
【図８】集計したデータの例
【図９】処理内容ごとの実行割合の時間変化（モデル図１）
【図１０】処理内容ごとの実行割合の時間変化（モデル図２）
【図１１】処理内容ごとの実行割合の時間変化（モデル図３）
【図１２】処理内容ごとの実行割合の時間変化（モデル図４）
【図１３】処理内容ごとの実行割合の時間変化（モデル図５）
【図１４】処理内容ごとの実行割合の時間変化（モデル図６）
【図１５】処理内容のリスト
【図１６】関数の実行割合の時間変化
【図１７】関数の実行割合の時間変化（適用例１）
【図１８】関数の実行割合の時間変化（適用例２）
【図１９】第一の実施形態の装置構成図
【図２０】関数の実行割合を示す表
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態について具体的に説明する。本発明は、以下に説明する実施の形態のみに限定するものでない。
【００１４】
本実施形態においては、プログラムを実行した情報処理装置から実行中の処理内容をサンプリング処理して得られたデータ（以下、サンプリングデータ）について、集計処理を行なう。この処理内容とは、例えば、実行しているプログラムのプログラム名であっても、実行している関数の関数名であっても、両方を含む内容であっても良い。
【００１５】
本実施形態においては、サンプリングデータのうち、所定の複数種類の処理内容のいずれかを示すデータが所定の個数含まれるデータの集合を集計の単位と定め、その定められた集計の単位に含まれるデータについて、計数の対象とする処理内容について計数を行なうことで、集計を行なう。それにより、例えばサンプリングデータが示す処理内容の実行割合を算出する。
【００１６】
この集計の単位を定める複数種類の処理内容と、集計の単位を定めるデータの数と、処理内容ごとの計数の対象となる処理内容とは、集計前に予め定めたものであれば良い。予め定めた種類、値を用意しておいても良いし、ユーザが集計処理のたびに設定可能にしても良い。
【実施例】
【００１７】
［第一の実施形態］
第一の実施形態について説明する。
【００１８】
［本実施形態にかかる集計システムの構成］
図１９に、本実施形態にかかる集計システムの装置の構成例を示す。図１９に示す集計システムは、集計装置Ｅ１と、集計装置Ｅ１と通信可能な記憶装置Ｅ２、処理装置Ｅ３と、もしくはネットワークＥ４を介して集計装置Ｅ１と通信可能な記憶装置Ｅ５、処理装置Ｅ６と、中継装置Ｅ７などを含んで構成される。本集計システムは、集計装置Ｅ１と通信可能なＥ２〜Ｅ６の一部を含む構成であっても、全てを含む構成であっても良い。
【００１９】
集計装置Ｅ１は、キーボード、マウスなどの入力装置と、ディスプレイなどの表示装置と、他の装置と通信するための通信インターフェースと、入力装置、通信インターフェースなどで受け付ける入力に応じた処理を行なうプロセッサ（例えばＣＰＵ）を含んで構成される。
【００２０】
記憶装置Ｅ２は、例えばハードディスクなどを含んだストレージ装置が考えられる。もしくは、ＣＤやＤＶＤなどの記憶媒体と、それらの記憶媒体にデータを読み書き可能なディスクドライブなどであっても良い。
【００２１】
処理装置Ｅ３は、プロセッサを備えたコンピュータなどの情報処理装置であり、自身のプロセッサにおいて実行されるプログラムの処理内容を観測し、その結果を出力可能なものとする。
【００２２】
記憶装置Ｅ４、処理装置Ｅ５は、集計装置Ｅ１とネットワークＥ４を介して通信可能な記憶装置と処理装置であり、記憶装置Ｅ２、処理装置Ｅ３と同様の機能を備えた装置である。
【００２３】
上記の装置を含む本実施形態に係る集計システムの構成を図１に示す。本実施形態に係る集計システムは集計部１、条件指定部２、表示制御部３、記憶部４、入力部５、表示部６、通信部７を備えている。
【００２４】
記憶部４は、分析対象のプログラムを実行する処理装置から、処理装置が実行している処理内容を示す情報を一定時間間隔でサンプリング処理されたデータを保持し、集計部１の読出しに応じてデータを出力する。なお、記憶部で保持されるデータは、分析対象のプログラムを処理装置Ｅ３又は処理装置Ｅ５で実行して取得したものでも良いし、集計装置Ｅ１で実行して取得したものでも良いし、全く別の処理装置において取得されたものでも良い。
【００２５】
入力部５は、ユーザの入力操作を条件指定部２に伝達し、表示部６は、表示制御部３の制御に応じた表示を行なう。
【００２６】
条件指定部２は、入力部５を用いた入力操作に応じて、集計部１に集計に関する条件を指示し、表示制御部３に表示に関する条件を指示する。集計に関する条件とは、例えば、どの処理内容に基づいて集計の単位を定めるか、集計の単位を定めるデータ数、計数の対象とする処理内容などが挙げられる。表示に関する条件として、例えば集計結果を表示する際のグラフの種類（折れ線グラフ、棒グラフなど）、グラフの表示範囲の指定などである。
【００２７】
集計部１は、通信部７を介してサンプリングデータを取得し、条件指定部２の指示に基づいてデータを集計し、集計結果を表示制御部３に出力する。
【００２８】
表示制御部３は、集計部１から集計結果を取得し、集計結果を表示部６に表示させる制御を行なう。集計結果の表示については後述するが、例えば、図６に示すテーブルの表示、図６のテーブルに基づくグラフの表示などの制御を行なう。
【００２９】
通信部７は、集計部１の指示に応じて他の装置と通信処理を行なう。
【００３０】
集計部１、条件指定部２、表示制御部３、入力部５、表示部６、通信部７の機能は、図１８の集計装置Ｅ１で実現されても良い。その場合、マウス、キーボードなどの入力装置で入力部５の機能を実現することが考えられ、ディスプレイなどの表示装置で表示部６の機能を実現することが考えられ、適切な通信インターフェースにより通信部７の機能を実現することが考えられ、プロセッサに本件に係るプログラムを実行させることで集計部１、条件指定部２、表示制御部３の機能を実現させることが考えられる。
【００３１】
記憶部４は、記憶装置Ｅ２、もしくは記憶装置Ｅ４で実現されても良い。もしくは、集計装置Ｅ１がハードディスクなどの記憶媒体を含み、集計装置Ｅ１が備えた記憶媒体によって記憶部４の機能を実現しても良い。また、記憶部４の機能は、ＣＤやＤＶＤなどの記憶媒体とそれらを読み出し可能な装置で実現しても良い。
【００３２】
通信部７が処理装置Ｅ３、処理装置Ｅ５との通信処理を行なうことで、サンプリングデータを取得する場合には、処理装置が実行している処理内容を示す情報についての一定時間間隔のサンプリングに応じて、サンプリングデータをリアルタイムで取得しても良い。
【００３３】
さらに、入力部５と表示部６を一体化して、タッチパネル式のディスプレイを用いても良い。
【００３４】
［設定処理のフロー］
条件指定部２の指示に基づいて、集計部１と表示制御部３の設定を行なうフローの例を図２に示す。
【００３５】
設定処理を開始する（Ｓ１１）と、ユーザから集計に関する条件を入力され、条件指定部２は、その入力内容を受け付ける（Ｓ１２）。次に、条件指定部２は、設定すべき条件を設定する指示を集計部１と表示制御部３に出力する（Ｓ１３）。
【００３６】
集計部１への指示とは、例えば、集計の単位を定める処理内容の指定と、集計の単位を定めるデータ数の指定と、計数の対象とする処理内容の指定などである。集計の単位を定める処理内容とデータ数を指定とは、どの処理内容を示すデータをいくつ含んだデータの集合に対して集計を行なうかを定める指定である。サンプリングデータのうち、指定された処理内容のいずれかを示すデータを指定された個数含むデータの集合を集計の単位とする。計数の対象とする処理内容の指定とは、この集計の単位に含まれるデータに対して、どの処理内容を示すデータの計数を行なうかを定める指定である。また、表示制御部３には、集計結果をどのように表示させるかを指示する。
【００３７】
集計部１と表示制御部３は、条件指定部２からの指示に基づき、設定を変更する（Ｓ１４）。設定を変更した後、ユーザからの集計処理の開始指示を入力されると、開始指示を受け付け、図３の集計処理を開始する（Ｓ１６）。開始せずに再度設定処理を行なう場合は、Ｓ１２のフローへ戻る。
【００３８】
［集計処理のフロー］
図１に記載の集計システムが行なう集計処理のフローの例を図３に示す。
【００３９】
集計処理開始の指示が入力される（Ｓ２０）と、記憶部からサンプリングデータを読み出す（Ｓ２１）。読み出したサンプリングデータが示す処理内容を識別し（Ｓ２２）、条件指示部２に計数の対象とされた処理内容であれば、その処理内容についてカウントする（Ｓ２３）。この際、読み出したサンプリングデータが示す処理内容が、計数の対象とされなかった処理内容である場合は、カウントしなくても良いし、指示されなかった処理内容を示すデータの一つとしてカウントしても良い。
【００４０】
次に、読み出したデータが集計の単位を定める処理内容に該当するかを判断し（Ｓ２４）、該当する場合は、集計の単位を定める処理内容を示すデータとしてカウントする（Ｓ２５）。該当しない場合は、Ｓ２１のフローに戻る。
【００４１】
さらに、集計の単位を定める処理内容を示すデータの総数が、条件指定部２から指定された集計の単位を定めるデータ数に達しているか判断する（Ｓ２６）。集計の単位を定める処理内容を示すデータのカウントが集計の単位を定めるデータ数に達していない場合は、Ｓ２１のフローに戻る。
【００４２】
集計の単位を定める処理内容を示すデータの数が、集計の単位を定めるデータ数に達した場合は、それまでに行なったそれぞれの処理内容についてのデータ数を表示制御部３に出力する（Ｓ２７）。同時にそれぞれの処理内容のカウントを初期化する。
【００４３】
次にサンプリングデータの全てについて集計処理を行なったかを判断し（Ｓ２８）、サンプリングデータ全てに集計を行なっていた場合、集計処理を終了する（Ｓ２９）。サンプリングデータが残っている場合は、再度Ｓ２１のフローに戻る。
【００４４】
［第二の実施形態］
第一の実施形態に係る集計部１は、例えば以下の構成を有していても良い。
【００４５】
図４に、集計部１の構成例を示す。集計部１は、判別部１０、計数部１１（カウンタ１１ａ〜１１ｎによって構成される）、基準カウンタ１２、データバッファ１３、取得部１４を備えて構成される。
【００４６】
取得部１４は、記憶部４から通信部７を介してサンプリングデータを読み出す処理を行ない、読み出したデータを判別部１０とデータバッファ１３に出力する。
【００４７】
判別部１０は、条件指定部２の指示に基づき、計数部１１の各カウンタと各カウンタに割り当てられている処理内容とを対応させ、読み出したデータが示す処理内容と対応するカウンタ１１ａ〜カウンタ１１ｎにカウンタの値に１加算する指示を出力する。
【００４８】
計数部１１は複数のカウンタで構成され、計数の対象とする処理内容それぞれについてカウンタが割り当てられている。計数部１１においては、判別部１０からの指示に基づいて各カウンタの値を１加算する。各カウンタのうち、集計の単位を定める処理内容に対応するカウンタの値を加算した場合、基準カウンタ１２に値を１加算する指示を出力する。また、基準カウンタ１２の指示に応じて、各カウンタの値を表示制御部３に出力する。
【００４９】
基準カウンタ１２は、計数部１１の命令に応じてカウンタの値を１加算する。また、基準カウンタ１２の値が、条件指定部２に指示された集計の単位を定めるデータ数と同じである場合に、計数部１１に各カウンタの値の出力を指示する。
【００５０】
データバッファ１３は、取得部１４が出力したデータを一時的に記憶し、直近に読み込んだデータの時刻情報を基準カウンタ１２の指示に応じて表示制御部３に出力する。
【００５１】
表示制御部３に出力する時刻情報は、データバッファ１３に格納されているデータから時刻情報を読み出す方法以外にも、連続して読み出すデータの時刻差、もしくはユーザが入力したサンプリング処理の時間間隔と、集計の単位に含まれるデータ数に基づいて算出可能である。
【００５２】
［設定フロー］
条件設定のフローは、第一の実施形態と同様に図２のフローで行なわれる。
【００５３】
ユーザから集計に関する条件の入力がされる（Ｓ１１）と、条件指定部２は、その入力内容を受け付け（Ｓ１２）、設定すべき条件を設定する指示を集計部１と表示制御部３に出力する（Ｓ１３）。
【００５４】
集計部１への指示とは、例えば、それぞれのカウンタがどの処理内容を示すデータについて計数するかというカウンタの割り当ての指定と、基準カウンタのカウントに反映させる対象のカウンタの指定と、集計の単位を定めるデータ数の指定とを含むことができる。また、表示制御部３には、集計結果をどのように表示させるかを指示する。
【００５５】
集計部１と表示制御部３は条件指定部２からの指示に基づき、設定を変更する（Ｓ１４）。Ｓ１４において、集計部１は各カウンタの設定と、集計の単位を定めるデータ数の設定を行ない、表示制御部３は出力形式の設定を行なう。
【００５６】
設定を変更した後、ユーザからの開始指示を入力されると、開始指示を受け付け、図５に示す集計処理のフローを開始する（Ｓ１６）。
【００５７】
［集計処理フロー］
次に、図５を用いて、図４に示す集計部１を備えた集計システムが行なう集計処理のフローの例について説明する。集計処理開始（Ｓ３１）前に、集計に関する条件は、図２に示す設定フローにより既に設定されている。
【００５８】
集計処理をスタートすると（Ｓ３１）、まず各カウンタの値をリセットする（Ｓ３２）。次に判別部１０は、記憶部４からサンプリングデータを読み出し、そのデータが示す処理内容と対応するカウンタの値を１加算する（Ｓ３３）。
【００５９】
Ｓ３３で加算したカウンタが条件指定部２によりカウントの反映を指定されたカウンタであった場合、基準カウンタ１２の値を１加算する（Ｓ３５）。Ｓ３３で加算したカウンタが条件指定部２によりカウントの反映を指定されていないカウンタである場合は、Ｓ３６のフローに移行する。
【００６０】
次に、基準カウンタ１２の値と集計の単位を定めるデータ数と比較する（Ｓ３６）。比較した結果、基準カウンタ１２の値が集計の単位を定めるデータ数に満たない場合は、取得部１４がデータの読み出しを行なうフロー（Ｓ３３）に移行する。基準カウンタ１２の値が集計の単位を定めるデータ数と同じ場合は、計数部１１の各カウンタの値と、データバッファ１３に記憶されている直近に読み出したデータの時刻情報を表示制御部３に出力する（Ｓ３７）。
【００６１】
次に、サンプリングデータを読み出したかを判断する（Ｓ３８）。サンプリングデータを全て処理した場合は、集計処理を終了し（Ｓ３９）、まだサンプリングデータがある場合は、Ｓ３２のフローに移行し、再度Ｓ３２〜Ｓ３７の集計処理を行なう。
【００６２】
各カウンタとカウントする処理内容との関係の例を図６に示す。ＰＩＤは、プログラムのＩＤを示す。各カウンタは、条件指定部２の指定により、処理内容（ＰＩＤ及び関数名）と対応付けられており、それぞれは対応付けられた処理内容を示すデータについて計数を行なう。
【００６３】
さらに、それぞれのカウンタは、自らの計数を基準カウンタに反映させるかどうかを条件指定部２に指定されている。図６では、例として、識別情報を付加しており、識別情報が「１である」カウンタについては、計数を行なうたびに、その計数を基準カウンタにも反映させるなどとすればよい。
【００６４】
設定によって、ユーザは自在に計数の対象とする処理内容と、集計の単位を定める処理内容を指定できる。ユーザは実行時間内訳を求めたいプログラム又は関数毎にカウンタを割り当て、集計の単位を定める処理内容のみについて割り当てられたカウンタの計数を基準カウンタに反映させればよい。
【００６５】
図６に示した例であれば、「ＰＩＤ：２６１１２」の「ｍｕｌｔ＿ｂｅｎｃｈ：：ｃｏｐｙ＿ｕ」と「ｍｕｌｔ＿ｂｅｎｃｈ：：ｍｅｍｃｐｙ＿ｓ」集計の単位を定める処理内容としており、この２つの処理内容を示すデータについて計数するたびに基準カウンタ１２の値を加算することになる。
【００６６】
この設定はユーザが自在に行なうことができ、１つのプログラムに属する複数の関数を選択しても良いし、複数のプログラムから複数の関数を選択してもよい。つまり、複数のプログラムに関する処理内容を、集計の単位を定める処理内容とすることもできる。これは、例えば協働して動作するプログラムの性能分析に用いることが考えられる。
【００６７】
また、図６に示したカウンタと処理内容の対応で、カウンタ１１ｄは「ＰＩＤ：２６１１２」が実行する関数のうち他のカウンタで対応付けられていない関数を「その他」として対応付けている。これにより、それぞれの関数の実行時間内訳は求める必要がなくとも、何らかの関数が実行されていたものとして実行時間内訳に含めることができる。
【００６８】
また、カウンタ１１ｎは、他のカウンタで対応付けられなかった処理内容を対応付けている。ユーザが指定しない処理内容についても計数しておくことで、ユーザが指定しない処理がどれだけされていたかという実行環境についての情報を得ることができる。
【００６９】
［データ形式］
図７に、プログラムを実行している処理装置から、実行している処理内容を示す情報を一定時間間隔でサンプリングしたサンプリングデータの例を示す。図７のサンプリングデータは、０．１ミリ秒ごとに、サンプリングの対象とするＣＰＵのＩＤと、プログラムのＩＤと、関数名と、時刻情報をサンプリングしたものである。サンプリングデータは、記憶部４に記憶され、取得部１４によって読み出される。
【００７０】
図８に、集計部１の集計処理による集計結果の例を示す。図８では、プログラム名と関数名で処理内容を示しており、集計の単位において、計数の対象とする処理内容ごとにカウントされた数を示している。そのカウントされた数と合わせて集計部１が出力した時刻情報をＴ１，Ｔ２，…，Ｔｎとしている。
【００７１】
［表示制御］
表示制御部３は、集計部１から取得した集計結果を表示部６に表示させる制御を行なう。また、表示制御以外にも入力部５から入力される指示に応じて、出力形式を整えて、何らかの記憶媒体に保存するようにしても良い。
【００７２】
出力形式は、図８のデータテーブルを表示部６に表示させても良いし、グラフを作成して表示させることが考えられる。図８のデータテーブルに示される各集計の単位における各処理内容ごとの集計値は、それぞれサンプリングされた時刻情報と関連付けられており、その推移をグラフ化しても良い。
【００７３】
集計されたデータを用いて、処理内容ごとのデータ数の時間変化を折れ線グラフとしても良いし、面グラフとして示しても良い。また複数の処理内容の合算量、さらには全体量の評価も必要となることが考えられるので、積み上げの面グラフにすることも考えられる。
【００７４】
縦軸を処理内容ごとのデータ数とせず、集計の単位を定めるデータ数に対する比を求めて、処理の実行割合としても良い。実行割合を算出し、積み上げの面グラフとした場合、集計単位を定める処理内容についての実行割合の合算量は、常に１となる。
【００７５】
時間方向の座標は、集計されたデータの時刻（図８のＴ１，Ｔ２，・・・，Ｔｎ）をそのまま用いても良いし、１つ前の集計データの時刻を用いても良いし、その２つの中間値を用いても良い。また、集計結果のプロット位置は、集計データごとに等間隔に配置してもよいし、実際の時刻の間隔を反映させた間隔で配置しても良い。また、各集計の単位が含むデータに示される最も早い時刻と最も遅い時刻で、各集計単位の時間範囲を示しても良い。
【００７６】
また、集計されたデータの時刻情報と、その１つ前の集計されたデータの時刻との差分により、集計の単位に含まれるデータをサンプリングするのにかかった時間を算出可能である。この時間の時間変化を折れ線グラフ等にしても良い。
【００７７】
さらには、実行割合の推移を時間軸でなく、データ数に対して表示しても良い。集計の単位を定めるデータ数を例えば１００００とした場合、横軸を０〜９９９９，１００００〜１９９９９，…といったようにして、データ数の範囲においての処理の実行割合を表示可能である。また、集計の単位を定める処理内容を示すデータの数だけでなく、各集計の単位に含まれる全てのデータの数を含めても良い。
【００７８】
［性能バグの見当づけ］
集計した結果を表示させ、表示結果を入手することで、ユーザは、性能バグの見当付けなどの性能分析を行なうことができる。
【００７９】
性能バグとは、プログラムのバグであって、誤動作を引き起こさず、単に動作を遅くするものをいう。ユーザは、性能バグが存在するプログラム、もしくは関数に対してデバッグを行ない、性能バグを改善することでプログラムの性能の向上を図る。
【００８０】
処理に時間のかかるプログラム又は関数は、性能バグを含んでいると考えられ、そのようなプログラム又は関数を見出すことで、効率的に性能改善を行なうことができる。そのため、処理に時間のかかるプログラム又は関数を見出すことも、性能分析の目的の１つである。
【００８１】
また、頻繁に呼び出される関数に対して、少しでも性能改善できれば、呼び出し回数に応じた性能向上が見込める。そのため、呼び出し回数の多いプログラム又は関数を見出すことも性能分析の目的の１つである。
【００８２】
また、特定の関数の頻繁な呼び出しに関しては、特定の関数を頻繁に呼び出すプログラム又は関数を見出すことができれば、そのプログラム又は関数を見直し、例えば、呼び出される関数の処理内容を含めることで改善が見込める。
【００８３】
上記に例示した、性能バグを含むプログラム又は関数などの処理は、集計の単位ごとの実行割合の推移にもとづいて見当づけることが可能である。例えば、性能バグを含んでいると考えられる処理と、頻繁に呼び出される処理については、実行割合を多く占めることが考えられるし、特定の関数を頻繁に呼び出す処理については、実行割合を多く占める関数と同時期に実行割合を占めると考えられる。そのような処理を見出すため、それぞれの処理が占める実行割合の増減を判別できる必要がある。
【００８４】
さらに、ＣＰＵの待機状態（アイドル状態）を示すデータが実行割合を多く占めるのと同時期に実行割合を占める処理は、アイドル状態を引き起こしやすいとも考えられ、そのような処理ないようについての情報も性能分析に役立つ情報となる。
【００８５】
ユーザは集計結果を入手して、その集計結果から上記のプログラム又は関数を見出し、性能分析を行なう。
【００８６】
［表示例］
記憶部４に既に蓄積されたデータに対して集計処理を行なう場合、ユーザは、同じデータに対して繰り返し集計処理を行なうことができ、そのたびに設定を変更することで、同じデータから異なった集計結果を得ることができる。
【００８７】
図９〜図１４、図１６〜図１８のグラフを用いて、集計処理の設定による集計結果の違いを説明する。図９〜図１４のグラフは、処理内容ごとの実行割合の推移を簡単なモデルで示した例であり、図１６〜図１８のグラフは、実際に処理内容をサンプリング処理して得たサンプリングデータに基づいて作成したグラフである。
【００８８】
図９〜図１０、図１２、図１６は、処理装置が実行している処理内容を一定の時間間隔（例えば０．１ミリ秒など）でサンプリング処理して得たサンプリングデータを複数個含む所定の時間範囲（この例では１秒間）単位で、処理内容ごとのデータを集計し、実行割合を求めて作成したグラフを示している。
【００８９】
図１１、図１３〜図１４、図１７〜図１８は、サンプリングデータのうち、指定した処理内容のいずれかを示すデータを指定した個数（例えば１００００個）含むデータの集合を集計の単位として、計数の対象とする処理内容ごとのデータを集計し、実行割合を求めて作成したグラフを示している。
【００９０】
図９に、処理装置においてプログラムＡのみが実行された場合をモデルとして、処理の実行割合を示すグラフの例を示す。このモデルは、処理装置において、ＣＰＵが待機状態になることなく、プログラムＡに属する関数１と関数２のどちらかを実行していることを想定している。図９は、そのモデルにおける関数１と関数２の処理を示すデータの割合の時間推移を示している。図９に示すグラフにおいて集計の単位としている時間範囲は１秒間である。
【００９１】
図９に示す図は、簡単なモデル図であり、実際のグラフは図９に示すよりも複雑に推移する。また、一般には分析対象のプログラムを実行する処理装置において、ユーザが実行したプログラムのみが実行されることは考えにくい。実際には、ユーザが実行したプログラムの動作に応じて、ＯＳ（オペレーティングシステム）によるカーネルや、ガーベッジコレクションなどが動作することが考えられる。
【００９２】
図１０は、プログラムＡ以外のプログラムが同時に動作した場合の処理内容の実行割合を示すグラフの例である。図１０は、分析対象のプログラムを実行する処理装置において、経過時間が６秒の時点から、プログラムＢの処理がＣＰＵを５割占有した場合をモデルとしている。
【００９３】
図１０の６秒以降の区間では、プログラムＢが集計の単位においてＣＰＵの割り当てを５割占めているため、プログラムＡのプログラムＡのＣＰＵの割り当ても５割減少する。例えば、図９に示す実行割合の実行環境下において、６〜７秒の間に実行されていたプログラムＡの処理は、図１０に示す実行環境下においては、６〜８秒において実行されることとなる。
【００９４】
図１０の実行環境下で、６〜８秒に実行されたプログラムＡに関する処理は、図９の実行環境下での６〜７秒に実行された処理と同じであると考えられるが、その様子を図９の６〜７秒の区間と図１０の６〜８秒の区間から把握することは困難である。
【００９５】
例えば、図９において、５〜６秒区間の実行割合と比べて、６〜７秒区間の関数実行割合は、ほぼ同じ割合を示しているが、図１０においては、５〜６秒区間に比べて６〜７秒区間では関数１、関数２ともに実行割合が減少している。この図１０の６〜７秒区間については、プログラムＡの実行割合も減少しているため、プログラムＡに比して各関数の実行割合が減少しているかは定かではない。これは、図１０が得られた場合に、プログラムＢが動作しなかった場合に６〜７秒区間に関数の実行割合がどう推移するかを把握できないことを意味する。つまり、分析対象のプログラム以外の処理が実行されることによって、その処理が実行されなかった場合に分析対象のプログラムに関する処理の実行割合の推移を把握できず、性能バグの見当づけが難しくなると考えられる。
【００９６】
図１０に示したモデルでは、プログラムＢのＣＰＵ割り当てが５割であるので、プログラムＡに関する図１０の６〜７秒区間と７〜８秒区間の実行割合を合算することで、図９の６〜７秒の区間と対応付けることができる。これは、モデルとして、ＣＰＵ割り当てをたまたま５割としたために、図９の６〜７秒の区間と図１０の６〜８秒の区間を対応づけられるが、実際には、多数のプログラムが予期しないタイミングで動作するため、分析対象のプログラムのみが実行された場合との対応付けは不可能である。
【００９７】
さらに、図１０の６〜７秒区間や７〜８秒区間に示すように、関数１と関数２の実行割合が推移することについては、その原因を判別できない。それは、単純にＣＰＵの割り当てが減少したために、図９よりもプログラムＡに関しては少ないデータ数で集計されており、プログラムＡの細かい実行割合推移が明らかになったのか、関数１又は関数２がプログラムＢと関連した動作を行なうために、図１０に示す実行割合になったのか、などの原因が考えられるからである。
【００９８】
従って、ユーザが、性能バグを含む処理内容の見当付けを行なう場合に、分析対象とする処理以外の処理によって、集計の単位に含まれる分析対象の処理内容を示すデータの数は変動しうる。そのため、ユーザが集計単位とする時間範囲の設定によって、性能バグの特定を見出す目的を果たせない場合もありうる。
【００９９】
集計の単位を定める時間範囲の設定は、ユーザの設定により決定される事項であり、その設定次第で得られる実行割合の時間推移のグラフは、異なったものになる。
【０１００】
ユーザが、性能バグを含む処理内容の見当付けを行なう場合にも、設定次第で得られる情報は異なる。例えば、細かい時間範囲を単位として集計することで、実行される関数の順序を見出すことができるかもしれないし、それよりも長い時間範囲を単位とすることで、単に同じ時間範囲で動作していることのみしか見出せなくなることもありうる。また、細かすぎる時間範囲を単位とすると、処理の順序のみの情報が提供されることになる。
【０１０１】
図１０に例示した実行環境下であっても、指定した処理内容を示すデータを指定した個数含むデータの集合を集計の単位とすることで、指定した処理内容のみが実行された場合と同等な集計単位ごとの処理の実行割合を求めることができる。
【０１０２】
図１０に示したモデルについて、プログラムＡに属する関数を示すデータを指定した個数（例えば１００００個など）含むデータの集合を集計単位として集計することが考えられる。図１１は、その集計単位ごとの処理の実行割合のグラフである。
【０１０３】
処理内容を複数指定することで、集計の単位内に指定した処理内容がそれぞれどの程度含まれるかという推移を知ることができる。図１１においては、プログラムＡに属する関数として、関数１、関数２の２つが集計単位を定める処理内容として指定されている。
【０１０４】
図１１において、いずれの集計単位においてもプログラムＡに関するデータの数は同じであるため、プログラムＡに関する処理の実行割合の和は、各集計の単位において一定になる。そのため、図９に示す、プログラムＡのみが動作した場合と、プログラムＡに関しては同等な実行割合推移を表示することができる。ただし、それぞれの集計単位を指し示す時間表示は図９と図１１で異なる。前述のように、例えば、プログラムＡに関するデータ数で横軸を表示しても良い。
【０１０５】
図１１の６〜８秒の区間は、図９の６〜７秒区間と同数のプログラムＡに関するデータについて集計した結果であり、図９の６〜７秒区間と図１１の６〜８秒の区間のプログラムＡの実行割合は同じであると考えられる。
【０１０６】
指定された処理内容を示すデータを指定された個数含むデータの集合を集計の単位とした場合についても、集計の単位を定めるデータ数の設定によって実行割合の時間推移のグラフは、異なったものになる。この点については、集計単位の時間範囲の設定と同様にユーザが適宜設定する。
【０１０７】
指定した処理内容を示すデータが所定数含まれるデータを単位とした集計によって、他の処理内容を示すデータを除き、指定した処理内容のみの実行割合推移を提供するために、必ずしもグラフ化する必要はない。例えば、図８に示す形式の表を表示部６に表示させることで、指定した処理内容のみの実行割合推移を提供可能である。図９〜図１１にグラフで示した集計結果について表で図２０（ａ）〜（ｃ）に示す。図９に対応する表が図２０の（ａ）であり、図１０に対応する表が図２０の（ｂ）であり、図１１に対応する表が図２０の（ｃ）である。
【０１０８】
図２０（ａ）に、プログラムＡのみが動作した場合に、６〜７秒区間、７〜８秒区間、８〜９秒区間における関数１と関数２に関するデータ数を示している。また、図２０（ｂ）に、プログラムＡとプログラムＢのそれぞれＣＰＵの割り当てが５割である場合に、６〜７秒区間、７〜８秒区間、８〜９秒区間における関数１、関数２とプログラムＢに関するデータ数を示している。また、図２０（ｃ）に、プログラムＡとプログラムＢのそれぞれＣＰＵの割り当てが５割である場合に、プログラムＡを示すデータを１００００個含む区間における関数１、関数２とプログラムＢに関するデータ数を示しており、そのそれぞれの区間の時刻は、６〜８秒、８〜１０秒、１０〜１２秒となっている。
【０１０９】
この例においては、集計の対象となるデータの時刻間隔は０．１［ｍｓ］であるとする。図２０（ａ）、図２０（ｂ）のそれぞれの集計の単位において、０．１［ｍｓ］間隔のデータを１秒間分含めるため、サンプリングのミスなどがなければ、データ数は１００００個である。
【０１１０】
図２０（ａ）においては、６〜７秒区間の関数１を示すデータ数が３０００で、関数２を示すデータ数が７０００であるのに対し、図２０（ｂ）においては、関数１を示すデータ数が１２００で、関数２を示すデータ数が３８００となっている。図２０（ｂ）の６〜７秒区間のプログラムＡに関するデータ数は５０００であり、図２０（ａ）の６〜７秒区間の集合単位の一部分を単位として集計したものであるといえる。そのため、図２０（ａ）において関数１と関数２の実行割合が３０００：７０００なのに対し、図２０（ａ）においては１２００：３８００と関数１の割合が少なくなっているが、この違いが、単純に図２０（ａ）と集計の単位が異なることに起因するのか、プログラムＢの動作と連動する動作がプログラムＡに発生したことに起因するのかは判別できない。
【０１１１】
一方で、図２０（ｃ）に示す表においては、集計の単位に含まれるプログラムＡに関するデータの数は同じであると考えられるので、関数１と関数２それぞれに関するデータの数も同じであることが予想される。図２０（ｃ）に示す６〜８秒区間の関数１と関数２それぞれのデータ数は、図２０（ａ）の６〜７秒区間と同じである。その場合、図２０（ｂ）６〜７秒区間、７〜８秒区間に示すデータ数の推移が得られたのは、単純にプログラムＢの処理にＣＰＵを割り当てたために、プログラムＡの図２０（ａ）の６〜７秒区間に該当する処理が遅延したためであると予想できる。これが大きく異なる場合、プログラムＡとプログラムＢが何かしら連動して動作していることが予想される。
【０１１２】
上述したように、分析対象のプログラムに関するデータを指定されたデータ数含むデータの集合を単位として集計することで、グラフのみでなく、表として表示しても、分析対象のみが動作した場合と同様の性能分析を行なうことができる。
【０１１３】
また、他のプログラムが動作することに起因して、プログラムＡに図９の動作にない関数が動作することも考えられる。例えば、プログラムＡの動作中に、プログラムＣが動作し、プログラムＣが動作すると同時にプログラムＡの関数３が動作した場合をモデルとして、処理の実行割合のグラフを図１２に示す。
【０１１４】
図１２には、プログラムＣが動作して、プログラムＣにＣＰＵが３５％割り当てられ、プログラムＡの関数３に１５％割り当てられた場合を示している。この場合も、指定した処理内容を示すデータを指定されたデータ数含むデータの集合を単位として集計することで、指定した処理内容のみが動作した場合の処理の実行割合の推移と、対応付けることのできる処理の実行割合の推移を取得することができる。
【０１１５】
図１３に、プログラムＡに関する処理を示すデータを指定して集計の単位を決めて、集計した場合の処理の実行割合の推移を示す。
【０１１６】
この場合、プログラムＣと関数３は、何かしら連動して動作していることが予想できるが、図１０の例と同じく、関数１と関数２の実行割合が図９の例と異なることの原因を判別できない。
【０１１７】
図１４に、プログラムＡの関数１と関数２を示すデータを指定されたデータ数含むデータの集合を単位として、集計した場合の処理の実行割合の推移を示す。
【０１１８】
図１４では、関数１と関数２の実行割合の推移は、図９での実行割合の推移と同様に推移している。このことから、プログラムＣも関数３もＣＰＵ割り当ての増減以外に関数１と関数２の実行割合の推移に影響を及ぼしていないことなどが推測できる。
【０１１９】
図９〜１４において、モデルを用いて、指定した処理内容を示すデータを指定されたデータ数含むデータの集合を単位とする集計について説明した。上記の説明は、あくまでモデルであり、実際に分析対象のプログラムを処理装置に実行させ、サンプリングしたデータについて集計し、グラフ化したものの例として、図１６〜１８にそのグラフを示す。
【０１２０】
図１５に、図１６〜図１８に集計結果を示される集計処理において、計数の対象となった処理内容のリストを示す。以下に説明する処理内容についてのみ引き出し線を付けている。凡例のパターンと、引き出し線で示されたＦ１〜Ｆ６の指定は、図１６〜図１８の処理の実行割合を示す領域と対応している。
【０１２１】
Ｆ１に示す処理内容は、分析対象のプログラムに関連する関数を示す処理内容である。Ｆ２に示す処理内容は、Ｆ１から分析対象のプログラムと連動するカーネル関数を除いたものである。Ｆ３は、ＣＰＵがアイドル状態にあり、どの処理も実行していないことを示している。Ｆ４の処理内容は、分析対象のプログラムに関するカーネル関数を示している。Ｆ５の処理内容は、スレッド間での排他制御に関わる関数を示している。Ｆ６は、「．．／ｌｉｂｊｖｍ．ｓｏ：：：ｏｏｐ＿ｏｏｐ＿ｉｔｅｒａｔｅ＿ｎｖ」、「．．．／ｌｉｂｃ−２．３．４．ｓｏ：ｍｅｍｃｐｙ」、「．．．／ｌｉｂｊｖｍ．ｓｏ：：：ｃｏｐｙ＿ｔｏ＿ｓｕｒｖｉｖｏｒ＿ｓｐａｃｅ」という関数を示している。
【０１２２】
図１６は、所定の時間範囲（この例においては０．３秒間）に得られたデータの集合を単位として、関数リストに示した関数ごとに集計を行なったものである。図１７は、サンプリングデータについて、関数リストのＦ１に該当する関数を示すデータを指定されたデータ数含むデータの集合を単位として、関数リストに示した関数ごとに集計を行なったものである。図１８は、サンプリングデータについて、関数リストのＦ２に該当する関数を示すデータを指定されたデータ数含むデータの集合を単位として、関数リストに示した関数ごとに集計を行なったものである。
【０１２３】
図１６においては、各集計の単位に含まれる処理内容ごとの割合を示しており、処理内容の実行割合の和は、全ての集計の単位において１である。所定の時間範囲ごとに集計を行なっているため、グラフの時間軸の表示は一定間隔で表示される。図１６においては３プロットごとに時間を表示しており、その表示は０．９秒間隔で一定である。
【０１２４】
図１７、図１８においては、各集計の単位で、指定した処理内容を示すデータ数は同じであり、指定した処理内容の実行割合の和は、全ての集計単位において１である。集計するデータの集合に、指定した処理内容以外の処理も当然含まれているので、時刻表示は一定間隔でない。
【０１２５】
指定された処理内容のデータ数に応じて集計の単位を定めることによって、性能バグを含む処理内容の見当づけられる場合について、以下に図１７、図１８を図１６と比較しつつ説明する。図１７のグラフは、Ｆ１に示す処理内容を指定し、図１８のグラフは、Ｆ２に示す処理内容を指定した場合である。
【０１２６】
例えば、図１６のグラフにおいては、３秒、９秒、１９秒、２４秒近辺Ｆ３で示すアイドル状態の割合が増加している。それに対して、例えば、Ｆ６で示す関数は、同時期に関数の割合が増加しているのか判断できない。
【０１２７】
これに対し、図１７、図１８のグラフにおいては、Ｆ６で示す関数のＦ１に示す関数の中での実行割合が、Ｆ３で示すＣＰＵのアイドル状態と同期して増大していることが分かる。このことから、Ｆ６で示す関数が実行されることで、Ｆ３で示すアイドル状態を引き起こしているなどと見当づけられる。その点に関して改善し、ＣＰＵの待機状態を減らすことができれば、プログラムの性能が向上すると考えられる。
【０１２８】
分析対象のプログラムに含まれる関数に、分析対象のプログラムに含まれない他の処理内容を引き起こす原因がある場合、引き起こされた他の処理によって、分析対象のプログラムにおける処理の実行割合の増減を判別できない事がある。その場合に、処理内容を指定して集計単位を定めると、分析対象のプログラムに含まれる関数であって、他のプログラムと相関する関数を見出すことができることがある。
【０１２９】
例えば、図１６のグラフで経過時間が１０秒から１６秒の間において、Ｆ４で示す関数の実行割合が増大している。この関数は、分析対象のプログラムと協働するカーネル関数である。図１６、図１７のグラフでは、１０秒から１６秒の間において、協働している関数の見当をつけることはできない。
【０１３０】
Ｆ４で示す関数を除いて処理内容を指定して集計の単位を定めると、図１８のグラフの１０秒から１６秒の間に示すように、Ｆ２に含まれる、例えばＦ５に示す関数の実行割合が増大している。このＦ５で示す関数は、カーネル関数の実行割合の増大と同期しており、Ｆ５に該当する関数の動作によってカーネル関数が呼び出されていると見当をつけることができる。そこで、Ｆ５で示す関数についてカーネル関数の呼び出し回数を少なくするように改善することで、プログラムの性能向上を図ることなどが考えられる。
【符号の説明】
【０１３１】
１            集計部
２            条件指定部
３            表示制御部
４            記憶部
５            入力部
６            表示部
７            通信部
【０１３２】
１０    判別部
１１    計数部
１２    基準カウンタ
１３    データバッファ
１４    取得部
【０１３３】
Ｅ１    集計装置
Ｅ２    記憶装置
Ｅ３    処理装置
Ｅ４    ネットワーク
Ｅ５    記憶装置
Ｅ６    処理装置
Ｅ７    中継装置
【図１】
0005428912.tif 000002
【図２】
0005428912.tif 000003
【図３】
0005428912.tif 000004
【図４】
0005428912.tif 000005
【図５】
0005428912.tif 000006
【図６】
0005428912.tif 000007
【図７】
0005428912.tif 000008
【図８】
0005428912.tif 000009
【図９】
0005428912.tif 000010
【図１０】
0005428912.tif 000011
【図１１】
0005428912.tif 000012
【図１２】
0005428912.tif 000013
【図１３】
0005428912.tif 000014
【図１４】
0005428912.tif 000015
【図１５】
0005428912.tif 000016
【図１６】
0005428912.tif 000017
【図１７】
0005428912.tif 000018
【図１８】
0005428912.tif 000019
【図１９】
0005428912.tif 000020
【図２０】
0005428912.tif 000021