JP5648584B2 - ソフトウェアアプリケーションのプロファイリング方法及び装置 - Google Patents

ソフトウェアアプリケーションのプロファイリング方法及び装置 Download PDF

Info

Publication number
JP5648584B2
JP5648584B2 JP2011118246A JP2011118246A JP5648584B2 JP 5648584 B2 JP5648584 B2 JP 5648584B2 JP 2011118246 A JP2011118246 A JP 2011118246A JP 2011118246 A JP2011118246 A JP 2011118246A JP 5648584 B2 JP5648584 B2 JP 5648584B2
Authority
JP
Japan
Prior art keywords
functions
function
profiling
level
subset
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011118246A
Other languages
English (en)
Other versions
JP2011248895A (ja
Inventor
ウィルソン・ニコラス
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JP2011248895A publication Critical patent/JP2011248895A/ja
Application granted granted Critical
Publication of JP5648584B2 publication Critical patent/JP5648584B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/81Threshold
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明はソフトウェアアプリケーションのプロファイリングに関する。
最新のソフトウェアアプリケーションは、数多くの相互作用モジュールを有し、高度に複雑である。一例に係る海洋モデリングアプリケーション及びそれに関連するライブラリは、31,810もの関数(ファンクション)で構成されている。ソフトウェアアプリケーションが大規模且つ複雑になるにつれ、アプリケーションの迅速且つ効率的な実行(“最適化”と呼ぶ)を確保することがますます重要になる。“プロファイリング”は、例えば時間及びメモリ空間などのリソースを非常に多く消費するのがアプリケーションのどの部分であるかを決定することによって最適化を支援する技術を意味する。具体的には、コードを書き換えること、メモリ内のコードのブロックを移動させること、又はソフトウェアアプリケーションの部分の実行順序を変更することによって改善を可能にし得るようなボトルネックが特定され得る。
プロファイリングを行う際には、ソフトウェアアプリケーションを、該アプリケーションの通常使用を表す一組の典型的な入力条件の下で実行する。アプリケーションが実行されるとき、データが何らかの方法で収集される。ソフトウェアプロファイリングの方法には主にサンプリング及びインスツルメンテーション(計装;instrumentation)という2つの方法が存在する。サンプリングは、規則的な間隔(インターバル)でアプリケーションに割り込むことによって統計情報を集めるとともに、コール(呼び出し)スタックを調べ、各インターバルにおいて実行中のコード部分のスナップショットを提供する。この技術は、比較的小さい追加処理のオーバヘッドのみを必要とするが、サンプリング間隔が長くなるにつれて正確さを欠いたものとなる。インスツルメンテーションは、アプリケーションが或る関数に出入りする時を記録する“プロファイリングフック(profiling hook)”と呼ばれるソースコードをアプリケーションに付加する。インスツルメンテーションは、例えば或る関数に対して為される呼び出しの正確な回数などについて、サンプリングより良好な情報を提供するが、追加処理のオーバヘッドを生じさせ、ソフトウェアアプリケーションの全体の実行を遅くさせるとともに、アプリケーションの複数の部分間のタイミング関係を変えてしまう可能性がある。さらに、インスツルメンテーションは、より多くのデータを生成し、大規模なアプリケーション内の全ての関数に使用するわけにはいかない。このようにインスツルメンテーションが付加されたソフトウェアアプリケーションを、“計装(instrumented)”アプリケーションと呼ぶ。
典型的に、大規模ソフトウェアアプリケーションは、多数の相互作用部分又は“関数”(これらは、状況に応じて、“モジュール”、“ルーチン”、サブルーチン又はコードブロックと呼ばれることもある)からなる。故に、インスツルメンテーションに適用される場合に、インスツルメンテーションによって引き起こされる変化、及び莫大な量のデータが生成されることは、このような大規模なアプリケーション内の全ての関数に問題を生じさせる。
大規模ソフトウェアアプリケーションにおいて、関数群は階層構造を有し、一部の関数は、特定のタスクの下位関数に依存しながら、より上位のタスクを担う。階層の最上部には、アプリケーションが開始して終了するメイン関数が存在する。アプリケーションの実行は通常、ユーザがオペレーティングシステムを介してコマンドを与えることによって開始される。アプリケーションの実行中、1つの関数が別の関数を呼び出し、該別の関数は更なる関数を呼び出すか呼び出した側の関数に実行を戻すかの何れかを行い得る。アプリケーションの最後において、メイン関数は制御をオペレーティングシステムに返す。
このような構造内の階層を見る一手法は、メイン関数からの関数呼び出し数に関するものである。故に、メイン関数の階層をレベル0としてS0とラベル付けすると、S0から直接的に呼び出されることができる関数、すなわち、単一関数呼び出しの距離の関数はレベル1であり、2関数呼び出しの距離の関数はレベル2であり、等々と続く。
インスツルメンテーションとして挿入される付加的な命令群は、実行がそれらに到達する度に記録を行わせる。典型的に、このような命令はモジュール又は関数の開始ポイント及び終了ポイントに付加される。斯くして、インスツルメンテーションは、どの関数がどの時点で呼び出されて総実行時間のうちのどれだけの割合が各関数で費やされたかの記録を提供することができる。このような記録は、人による分析のために何らかの方法で提示されなければならない。このような記録を提示する一手法は、関数群と各関数の実行に費やされた時間量とをリスト化した表として提示するものである。
別の一手法は、ツリー状の構造内のノードとして関数を表示する“コール(呼び出し)グラフ”を用いるものであり、ノード同士を結び付ける線(又は“エッジ”)が関数間の呼び出しを表す。別の関数を呼び出す関数は“発呼側(コーラー)”と呼ばれ、他方の関数は“被発呼側(コーリー)”である。被発呼側はしばしば、“親の”発呼側関数の“子”とも呼ばれる。一般に、ツリー内の高位側(換言すれば、階層内の上位側)の関数が、ツリー内の下方の関数を呼び出す。しかしながら、関数群は、下位側から上位側への呼び出しを有するように、あるいは関数がそれ自身を呼び出すように、複雑に相互作用してもよく、故に、親子関係は常に明確であるわけではない。
科学シミュレーションで使用されるデータセットは、典型的に非常に大きく、長大な時間にわたって実行され続ける(大規模なシミュレーションは、何百ものCPU上で並列に何時間も実行され得る)。これは、大規模並列アプリケーションについてアプリケーションプロファイリングを実行するときに2つの問題をもたらす:
(i)大量のデータが生成される;
(ii)プロファイリングによって生じるオーバヘッドがタイミングを歪ませてしまい得る。
大規模アプリケーション内の全ての関数に計装プロファイリングが適用されるとき、生成されるデータ量が管理しきれないものとなり、且つ/或いは付加的な処理オーバヘッドがプロファイリング結果を無意味なものにしてしまう。典型的な解決策は、アプリケーションの選択された部分のみに手動でプロファイリングを適用することである。これは、アプリケーションプロファイリング技術に精通した人物によって行われなければならない、時間を消費する処理である。
従って、アプリケーション内の関数群のうちの重要なサブセット(部分集合)のみに計装プロファイリングを自動的に実行することが望まれる。
特許文献1は、サンプリング技術を用いるプロファイリングによって生成されるデータ量を、アプリケーションの標的重要部分に対してサンプリングレートを変えることによって削減する機構を開示している。しかしながら、サンプリング技術は、その性質上、計装プロファイリングより正確でなかったり目標とされなかったりする傾向にある。
米国特許出願公開第2008/282232号明細書
上述のように、大規模ソフトウェアアプリケーションは、含まれる関数(ファンクション)数及び生成されるデータ量に起因して、プロファイリングすることが困難である。開示の機構は、時間を消費する人の介入の必要性を排除することによって、計装プロファイリングの処理を自動化して効率化するものである。
本発明の第1の態様によれば、メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングする方法が提供される。当該方法は、
前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、
前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、
前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、
前記プロファイリングデータに基づいて前記関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、
前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、
所定の階層レベルに到達するまで、
前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、
を含む。
このプロセスは、人の介入なく自動的に実行されることができる。故に、本発明の一実施形態は、インスツルメンテーションによってプロファイリングする対象とすべきソフトウェアアプリケーション部分を定める自動化技術を提供し得る。
ここで、分類するステップは更に、前記複数の関数のコールグラフを少なくとも概念的に決定することを有していてもよく、前記サブセットを縮小するステップは更に、除去された関数及び選外関数をコールグラフから消去することを有していてもよい。それにより、前記繰り返すステップの最後の繰り返しで実行した後の結果が、最適化されたプロファイリングコールグラフとなる。
好ましくは、関数はコンパイル可能なコードの形態を有し、プロファイリングコードがコンパイラ又はプリプロセッサで付加されることを可能にする。代替的に、所望のサブセットの関数のみをプロファイリングするように、全ての関数に設けられたプロファイリングコードが選択的に有効化/無効化されてもよい。
また好ましくは、前記分類するステップに先立って、プロファイリングメトリックを選択し、且つプロファイリングコードを用いずにソフトウェアアプリケーションを実行することで、選択されたメトリックの基準値を確立するステップが存在する。
その場合、前記サブセットを縮小するステップは好ましくは、関数を、それに関連するプロファイリングデータがプロファイリングメトリックに関する所定の条件を満たすか否かに基づいて除去することを含む。
これは、所定の条件は基準値のうちの所与の割合であるとして、プロファイリングメトリックに従って、プロファイリングされた関数をランク付けすることを含むことができる。好ましくは、メトリックは、実行時間、メモリ使用状況、ディスク使用状況、及びハードウェアカウンタに基づくメトリックのうちの少なくとも1つである。
このプロセスの実行が完了する上記所定の階層レベルは好ましくは最下位レベルである。代替的に、このプロセスは、目標とする数又は割合の関数が選外となるか除去されるかしたときに停止されてもよい。
最適化されたプロファイリングコールグラフを生成する場合、これは好ましくはユーザに表示される。得られた結果は、所定の階層レベルに到達したときに得られたサブセットに含まれる関数のコードを自動あるいは手動で最適化するために使用され得る。
本発明の第2の態様によれば、メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションを自動的にプロファイリングする装置が提供される。当該装置は、
複数の関数の各々を、メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するように構成されたコード分析ユニットと、
現在レベルにおける関数群のサブセットを記録するように構成された関数記憶ユニットと、
サブセットの関数群の各々に対してプロファイリングコードを付加あるいは有効化するように構成されたインスツルメンテーションユニットと、
ソフトウェアアプリケーションを実行して、プロファイリングデータを生成するように構成された実行ユニットと、
実行ユニットによって生成されたプロファイリングデータを保持するプロファイルデータ記憶ユニットと、
プロファイリングデータに基づいて関数を消去し、且つ消去された関数によってのみ呼び出される関数を除いた現在レベルの下の次レベルからの関数を記録するよう、関数記憶ユニットに命令するように構成された関数選択ユニットと、
を含み、
インスツルメンテーションユニット、実行ユニット、プロファイルデータ記憶ユニット、及び関数選択ユニットは、所定の階層レベルに到達するまで繰り返し動作するように構成される。
本発明の第3の態様によれば、メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングさせるプログラムが提供される。当該プログラムは、コンピュータによって実行されるときに該コンピュータに、
前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、
前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、
前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、
前記プロファイリングデータに基づいて前記サブセットから関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、
前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、
所定の階層レベルに到達するまで、
前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、
を含む処理を実行させる。
以下の図を含む添付図面を単なる例として参照する。
従来手法における、ソフトウェアアプリケーションのコンパイル及び計装を行ってプロファイリングデータを生成するコンピュータシステムを模式的に示すブロック図である。 本発明に係る方法を示すフローチャートである。 関数群をランク分けしたソフトウェアアプリケーション例の完全コールグラフを示すコールグラフ図である。 処理の途中段階での本発明に係る方法を表す中間コールグラフを示す図である。 プロファイリングに重要な関数のみを含んだ最終的なコールグラフを示す図である。 異なる階層にある関数間で取り得る関係を示す図である。 本発明に係る方法における様々な繰り返しでのコールグラフ及び実行時間を示す図である。 本発明に係る方法を実行する装置を模式的に示す図である。
図1を参照するに、従来技術に従ったソフトウェアアプリケーション(以下、単に“プログラム”と呼ぶ)のコンパイル及び計装に伴う処理が模式図の形態で示されている。コンピュータシステム1は、プログラムを格納するメモリ10(通常、ソリッドステートメモリに加えて、ハードディスク記憶装置の形態をとる)と、プログラム内の命令を実行するCPU20とを有している。単純化のために単一のCPUが示されているが、実際には、大規模ソフトウェアアプリケーションは何百又は何千といったCPU上で並列に実行され得る。
既に述べたように、プログラムは数多くの関数又はモジュールからなる。これらの各々は、一般的に、プログラマーが理解しやすい高級言語(ソースコード)で記述される。コンピュータシステム1のCPU20によって実行されることが可能になる前に、各ソースモジュール11は、コンパイラ12にて、CPU20によって理解される機械語(オブジェクトコード)のレベルへとコンパイルされる(中間段階が含まれてもよいが、ここでは単純化のために省略する)。モジュールを計装するため、一般的にこのコンパイル段階に、付加的な命令(フック)の形態をしたインスツルメンテーション13が適用される。しかしながら、インスツルメンテーションは、より前に(コンパイル前の前処理として)、あるいは後に(オブジェクトコードの変更によって)導入されてもよい。
得られたオブジェクトモジュール14は、プログラムの機能を実行するために相互作用する多数のモジュールのうちの1つである。複数のオブジェクトモジュールを結び付けるため、及び標準コードのライブラリ16に結びつくことによって下位関数を付加するため、リンカー15が使用される。(これの一例は、Cプログラミング言語においてメモリを割り当てる下位関数であり、実行ファイルにリンクされたライブラリによって提供されるmalloc()及び関連する関数によって提供される。)ライブラリ自体がプロファイリング用フックを備えてもよい。
その結果、実行可能アプリケーション17の形態をしたプログラムが得られる。この実行ファイルに含まれる機械語レベルの命令を実行することにより、CPUはプログラムを走らせて結果を生成する。具体的には、インスツルメンテーションコードが様々な関数間での呼び出しを監視するときに、計装プログラムはプロファイルデータ40を生成する。
上述のように、プロファイリング指標(メトリック)の可能な限り多くを明らかにすることと過度に多くの情報を生成することとの間にバランスが存在する。これは、典型的に、アプリケーションの予備知識を用いて、プロファイリングすべきプログラムの領域を手動選択することによって、手作業で対処されるが、それは面倒で時間がかかり得るものである。
以下に説明する本発明を具現化する方法は、プロファイリングすべき最適な関数の組(関数セット)をどのようにして自動的に選択するかに関係する。それは、コールグラフ内の異なる階層レベルの関数群を順次組み込む反復的な処理であり、プロファイリングに最も重要な関数群のサブセットを残すように不要な関数群を除去するものである。
図2のフローチャートは、プロファイリングすべき最適な関数セットを生成するために使用される処理の概略を示している。この処理は計装されていないプログラムで開始すると仮定している。開始条件は、この方法で使用される“プロファイリングメトリック”を選択することを含む。これは、どの関数を含有あるいは排除すべきという形態の判断を決するための基準として使用されるパラメータである。典型的に、プロファイリングメトリックは時間であり、より具体的には、各関数(並びに、その子すなわち被発呼側関数)の実行によって占有される時間である。しかしながら、後述するように、その他の可能なプロファイリングメトリックも存在する。
以下にて列挙するステップ群の幾らかを実行するためにユーザによって操作される“プロファイリング装置”を参照することとする。これは、プログラムを実行するために使用されるものとは別個のコンピュータであってもよいし、あるいは、より一般的には、例えば図1のコンピュータシステム1などの実行コンピュータそれ自体であってもよい。故に、汎用コンピュータであっても、コード分析ユニット、関数記憶ユニット、インスツルメンテーションユニット、実行ユニット、プロファイルデータ記憶ユニット及び関数選択ユニットを含むプロファイリング装置として動作することができる。
本発明を具現化する方法は以下のステップを含む。
ST10. プロファイリングなしでプログラムをコンパイルする。これにより、計装されていないプログラム(非計装プログラム)が、実行コンピュータによって通常のように実行されることが可能になる。
ST12. 非計装プログラムを実行することに基づいて、検討するプロファイリングメトリックの基準値を決定する。上述のように、プロファイリングメトリックは典型的に時間であり、その場合、基準値は、プロファイリングが行われないときに該プログラムが要する総時間とし得る。この基準値(又は、そのうちの或る割合)は、後の関数選択のための閾値として使用される。
ST14. 実行ファイルを分析することによってコールグラフを決定する。これにより、図3に示すCG1のような、全ての関数及びそれらの呼び出し関係を示すコールグラフが得られる。図3は、非常に単純な一例を示しており、関数群はメイン関数main()からの呼び出し数に従った階層レベルにランク分けされている。全ての呼び出し経路が実行中に辿られるわけではないので、このコールグラフは過剰なものである。この種のコールグラフを“静的コールグラフ”とも呼ぶ。
ST16. main()関数からの呼び出しステップ数に従って、関数群を複数の階層レベルにランク分けする。コールグラフに関して、これは、関数がメイン関数から幾つのエッジだけ離れているかと表現してもよい。図3に示すように、メイン関数S0又は()はコールグラフCG1の先頭にあり、実行はここで開始して終了する。メイン関数は図3のレベル0を占有している。S0によって直接呼び出される関数群(すなわち、S0の被発呼側関数)がレベル1を形成する。第1レベル内の関数によって呼び出される関数群がレベル2を構成し、等々と続く。レベル2はレベル1の次レベルと呼ばれ、以下同様である。
或る関数が2つ以上の上位関数によって呼び出される場合、その関数のレベルは、メイン関数から数えた最小の呼び出し数によって決定される。一例として、図3の関数S8は、呼び出しに関して通り得る2つの経路:
経路1:S0→S3→S8
経路2:S0→S2→S7→S13→S8
を有している。S8は図3のコールグラフではレベル2に示されている。レベル0から数えた最小の呼び出し数が2だからである。
ST18. プロファイリングされた関数のリストに第1レベルの関数を追加する。換言すれば、この最初の繰り返し(反復)において、レベル1内の全ての関数(図3では、S1、S2及びS3が存在)を含む関数リスト又は関数セット(以下では“サブセット”とも称する)が作成される。レベル1は、当該処理によって検討中の“現在レベル”となる。
ST20. 適切なプロファイリングフックを用いてプログラムを再コンパイルする。すなわち、リスト内の関数のみにインスツルメンテーションコードが付加される(あるいは、有効にされる―以下参照)。システム依存問題に対処する、あるいは特別な機能(フィーチャ)をイネーブル/ディセーブルするよう、図1のコンパイラ12、又はコンパイル前にソースコードを変更するプリプロセッサの何れかによるプロファイリングフックの自動挿入を用いて計装プロファイリングが実行される。
ST22. こうして再コンパイルされたプログラムを走らせ、プロファイリングデータを収集する。このプロファイリングデータは、当然ながら、リスト内の関数に限定されており、故に、サイズ的に比較的管理しやすいとともに、全体的なプログラム実行にあまり影響しない。
ST24. プロファイリングされた関数群をプロファイリングメトリックに従ってランク付ける。一例として時間を考えると、リスト内の関数群は、実行時間(その関数及びその被発呼側関数すなわち“子”関数を実行することによって占有される時間)の短い順(昇順)に並べられる。
ST26. メトリックの閾値割合に到達するまで、最小の関数を除去(“削除”)する。すなわち、例えば占有時間の約5%未満といった、メトリックの所与の割合より小さい割合を占める関数を取り除くことによって、リストが縮小される。以下では、これらを“被除去関数”と呼ぶ。また、これらの被除去関数によってのみ呼び出される関数を見出し、更なる検討から無視されるようにマークを付す。以下では、これらを“選外関数”と呼ぶ。
ST28. プロファイリングコールグラフから被除去関数及び選外関数を除去する。換言すれば、ST26後に残った関数のみを含めることによって、コールグラフを更新する(ユーザに実際に表示されるか、あるいはプロファイリング装置内に単に概念的に存在するかに拘わらず)。留意すべきことには、これは、現在レベルから除去された関数だけでなく、被除去関数の1つ以上によってのみ呼び出されるものであることに基づいて退けられた下位レベルの関数をも除去する。すなわち、現在レベルの関数を除去することは、それより下位のレベルが再計算されることを可能にするとともに、メイン関数への経路をもはや有さない“孤児”関数が除去されることを可能にする。こうする理由は、プロファイリングオーバヘッドは、実行されるインスツルメンテーション呼び出しの数に比例し、数多くの短期間呼び出し関数は、プロファイリングメトリックのうちの大きな割合を占めることなくオーバヘッドに大きく影響するためである。結果として、図4のものと同様の縮小されたコールグラフが得られる(図4は後の処理段階を示している)。
ST30. プロファイリングされた関数のリストに次レベルの関数群を追加する。故に、最初の繰り返しにおいて、レベル2の残っている関数が、リスト内に依然としてあるレベル1の関数に追加される。
ST32. 全ての関数がプロファイリング又は無視(除去/選外)の何れかを受けるまで、あるいは所定のレベルに到達するまで、ST20からST28を繰り返す。図3の単純な例においては、階層の最下位レベルであるCG1のレベル3に到達するのに二度の反復で十分である。一般的に、処理を最下位レベルまで続けることが常に好ましい。しかしながら、大規模且つ複雑な現実の例においては、コールグラフ内に多数のレベルが存在し、必要な時間及び労力を低減するため、場合により更なる作業に先立って大まかな概略を得るために、プロファイリングは所定数の上位レベルに制限され得る。上記所定のレベルは、関数群のうちの所望の数又は割合が排除(選外あるいは除去)されることとなったレベルとしてもよい。
図4は、最初の2つのレベルがプロファイリングされた後にプロファイリングコールグラフがどのように見え得るかの一例として、更新されたコールグラフCG2を示している。なお、S2はこの単純な例において唯一残っているレベル1の関数である。関数S1及びS3、並びにS1の子であるS4は、上述のステップST28の最初の繰り返しで除去されている。さらに、関数S6が2回目の繰り返しにて除去されている。3番目のレベル2の関数S8は、下位関数S13の被発呼側であるが故に単なるS3の子ではない(図3参照)ので残されている。従って、最初の繰り返しでS3は除去されているが、S8はその段階で除去されていない。
処理の最終結果として、プロファイリング装置は、プロファイリングに非常に重要な関数、すなわち、プロファイリングメトリックに関して非常に興味のある関数のみを含むという意味で、最適化された関数のサブセットを生み出す。換言すれば、この方法の目的は、開始点として全ての関数のプロファイリングを採用するのではなく、プロファイリングのないところから開始して、その後に、タイミングを許容できないほど歪ませることなく重要な特徴を捉えることが出来るプロファイリングを組み込むことである。
上述の反復処理は、幾らかの時間を要するものではあるが、全ての関数のプロファイリングデータを収集することなしに、最も重要な関数群に関してプロファイリングデータを取得することを可能にする。また、場合により何時間又は何日も要する完全な実行を行う代わりに、制限ベースあるいはテストベースで(例えば、比較的小さい試験データセットを用いて)プログラムの実行をプロファイリングすることによって、処理を実行することが可能である。言及しておくが、例えばプロファイリングメトリックなどの開始条件がいったん設定されると、この処理は人の介入なく自動的に進むようにされることができる。
斯くして自動的に生成された関数のサブセットは、当然ながら、人であるユーザによって改訂されてもよいが、その場合であっても、ユーザの負担は、プロファイリング/最適化されるべきコードの領域群を手動選択する作業と比較して大いに低減される。
図5は、最適化された最終的なプロファイリングコールグラフの一例を示している。この図は、メイン関数S0の他に、14個の関数S1−S14のうちの7個のみを含んでいる。使用されるメトリック、その基準値及び閾値に応じて、より多く、あるいはより少ない関数が本発明に係る方法によって除去され得る。故に、この単純な例においてのように元の関数群のうちの半分を退けるのではなく、90%又はそれより多くが退けられてもよい。排除される関数の割合が前もって決定されて、所望の結果を達成するように、開始条件及び/又は処理を終了させる階層レベルが適切に変化されてもよい。上述の関数のサブセットは、更なるプロファイリング又は更に徹底的なプロファイリングに掛けられてもよいし、あるいは直接的に、例えば手動再設定又は特別な最適化コンパイラによる再コンパイルなどの最適化技術の対象とされてもよい。
図5はまた、処理が進むにつれて関数の階層レベルがどのように変化し得るかを例示している。換言すれば、コールグラフは固定されたものではなく、反復ごとに改編される。見て取れるように、先に言及したS8はレベルを移動させている。上述のように、或る関数が2つ以上の上位関数によって呼び出される場合、該関数のレベルはメイン関数から数えた最小の呼び出し数によって決定される。図3に示したように、S8は元々はレベル2にあった(S0→S3→S8)。しかしながら、この経路はS3が除外された時に除去されている。故に、S8はCG1でのレベル2からCG3でのレベル4(呼び出し経路S0→S2→S7→S13→S8による)に移動している。
各レベルでメトリックを正確に計上するとともに、各レベルでプロファイリングオーバヘッドがどこに由来するかを知り、それにより関数を適切に除外することが重要である。これが意味することは、或る関数が複数のレベル内にある場合には、インスツルメンテーションを有する1つと有しない1つとの、関数の2つのインスタンスが存在する必要があるということである。インスツルメンテーションを有する計装された関数はプロファイリングコールグラフ内の関数から呼び出され、通常の関数は、未だ計装されていない関数によって呼び出される。
この点を更に説明するために、図6は、或る関数(ラベル3を付す)が上位レベルにある複数の関数によって呼び出され得る様々なケースを例示している。この図において、“A”はプロファイリングされていない(すなわち、インスツルメンテーションコードを有しない、あるいは該コードが無効化されている)関数を表し、“B”はプロファイリングを付加/有効化した関数を表している(このA/Bのラベルは、ここでは、コールグラフから関数を省略することの代替手段として使用されている)。図6(a)に示すように、関数3は、プロファイリングされていない関数A3として未プロファイリング状態で開始し、最上位レベルの関数によって呼び出される2つの上位レベル関数1及び2によって呼び出されると仮定する。
図6の(b)−(d)に示すように、最上位レベルの関数がプロファイリングされる、すなわち、B0と見なされるセットに含められるとする。B0から関数3には2つの別々のブランチが存在し、関数3のプロファイリングには以下の3つの可能性が存在する:
(i)図6(b)に示すように、何れのブランチにおいてもプロファイリングされない;
(ii)図6(c)に示すように、一方のブランチでプロファイリングされるが、他方ではされない。この場合、プロファイリングされる1つ(B3)及びされない1つ(A3)である関数3の2つのインスタンスを管理することが必要である;
(iii)図6(d)に示すように、双方のブランチでプロファイリングされる。この場合、単一の計装された関数の複製B3が存在する。
図7は、処理の様々な繰り返しでのコールグラフを、実行時間のインジケータとともに示している。図6においてのように、“A”はプロファイリングされない関数を表し、“B”はプロファイリングされる関数を表している。
アプリケーションが図7(a)に示すコールグラフで8個の関数A0−A7を有しているとする。最初のステップにて、アプリケーションは、上述のように如何なるインスツルメンテーションもなく走らされ、プロファイリングメトリック(この場合、時間)の基準値が提供される。これは図7(b)に“反復0”として示されている。
次に、レベル1の関数(B1、B2及びB3)が検討中のセットに追加される。換言すれば、これらの関数に対してインスツルメンテーションが付加/有効化される。なお、関数B2はレベル1に関してのみ追加されている。換言すれば、関数2へと上位に戻るA6からの関数呼び出しは、図7(c)の右側の変更コールグラフに示されるように、この関数の第2の下位レベルインスタンスA2によって説明される。アプリケーションが再び走らされ(反復1)、図7(c)の左側部分に示すように、実行時間はプロファイリングオーバヘッドのために少々長くなる。
この時点で、関数B3は、実行時間のうちの小さい部分(図7(c)の下側のタイムバーのうちの最も右側の部分で指し示される)のみを占めるので落とされる。そして、関数A7はB3によってのみ呼び出されるので無視されることができる。
残りの次レベルの関数A4、A5及びA6がセットに追加されて(B4、B5及びB6になっている)、反復2が実行される(図7(d))。この場合、比較的長い実行時間になっている。反復1(図7(c))と反復2(図7(d))との間で、プロファイリングによるオーバヘッドは、許容可能レベルを超えて増大している。レベル1の関数(B1及びB2)に関して報告される時間の変化を調べることにより、これがB1の子によるものであることが分かる。従って、B6に加えて、B1によってのみ呼び出される関数B4も落とされる。関数B1及びB2から呼び出される関数B5は、B1によって呼び出されるときは落とされ、B2によって呼び出されるときは残される。図7(e)には、より扱いやすい実行時間(なおも反復2にある)を有する縮小された関数セットが、ラベル付けしたコールグラフとともに示されている。
プロファイリングメトリック
アプリケーションの性能を測定するために使用可能なプロファイリングメトリックは数多く存在する。この機構に関する主な要件は、特定の関数に関するメトリックの値が、親によって呼び出される全ての子の値を含むことである。
経過時間:或る関数にて費やされる時間が、最も一般的に使用される性能メトリックである。
メモリ:割り当てられるメモリ量も重要なメトリックである。しかしながら、子関数にて割り当てられるメモリの詳細は親関数には利用可能でない。これに対処するためには、malloc()又は何らかの等価な関数がメモリを割り当てるとき常に共有カウンタを更新する代替的なシステムライブラリを用いてアプリケーションをリンクすることが必要である。そして、アプリケーションが或る関数に出入りする時にこのカウンタの値がアクセスされ、親関数及び子関数によって割り当てられたメモリ量が決定される。
ディスク使用状況:ディスクに読み書きされるデータの量は性能に影響を及ぼす。これは、メモリ使用状況を測定することに関して概説したのと等価な手順を用いて測定することができる。
ハードウェアカウンタ:ハードウェア性能カウンタは、例えば命令数、キャッシュミス及びTLBミスなどの有用なプロファイリング情報を測定している。或る関数に出入りする時に値を記録することにより、これらのカウンタをプロファイリングメトリックとして使用することができる。
以上から明らかなように、一部のメトリックは、プログラム自体の外部の要因に依存し、故に、ライブラリ内においてか、あるいは場合によりディスクアクセスを捕捉するオペレーティングシステムレベルにおいてかの何れかで、実行ファイル自体の外部のプロファイリングフックを必要とする。
上述のメトリックは、或る程度、相互に関係があり、しばしば、互いに逆の関係にある。例えば、非常に高速に動作するようにコード化された関数は、多くのメモリを占有し得る。あるいは、メモリ使用量を低く維持するように記述された関数は、多くのディスクアクセスを必要とし得る。従って、処理の最終結果は、使用されるメトリックに応じて異なったものとなり得る。本発明に係る方法は、異なる複数のメトリックを用いて繰り返されることが可能であり、関数のサブセットに磨きをかけるために、それぞれの結果を比較することができる。例えば、個々のメトリックの各々に関して特定された関数を組み合わせ、関数の上位集合を形成し得る。斯くして、2つ以上のメトリックの必要性とバランスさせて最適化が実行され得る。
本発明に係る方法を実行した結果は、一般的に、プログラムを実行するコンピュータシステムのハードウェア構成にも依存する。しかしながら、このことは通常のプロファイリングの状況と異なるものではなく、最適化の目的はしばしば、特定のシステム上で良好に動作するようにプログラム(恐らくは、元々において、異なるハードウェア技術用に、あるいは更には異なる言語で記述される)を最適化することである。故に、本発明の一実施形態は、以下の条件を満足しながらアプリケーションプロファイリングを実行し得る:
例えば経過時間などの特定のメトリックのうちの高い割合を占める関数を決定する;
それら関数のコールグラフを決定する;
プロファイリングの時間歪みを最小化する;
プロファイリングデータの量を最小化する;
人の介入なく作動する。
本発明の範囲内で様々な変形が可能である。
以上の説明において、プロファイリングコードはコンパイラによって、あるいはコンパイル前にプリプロセッサによって付加されている。しかしながら、インスツルメンテーションはオブジェクトコードに付加されることも可能である。この変形は、上述のステップST20“適切なプロファイリングフックを用いて再コンパイル”を、“バイナリインスツルメンテーションを実行してプロファイリングフックを付加/除去”に変更することを必要とする。
他の1つの変形は、全ての関数用のプロファイリングフックを前もって、例えばコンパイル中に設け、その後の実行時に、それらを選択的に有効化/無効化(イネーブル/ディセーブル)することを伴う。関連した技術が、IBM社への米国特許第5960198号に記載されている。この場合にプロファイリングフックを無効化することは、リストから関数を除去することと等価であり、プロファイリングフックを有効化することは、対応する関数をリストに追加することである。故に、この例において、上述のステップST20及びST22は、“選択されたプロファイリングフックを有効又は無効にしてプログラムを走らせること”という単一のステップで置き換えられる。
プロファイリングメトリックに基づいて閾値を指定することに代えて、あるいは加えて、最終的なサブセットに含めるべき関数の目標数を設定してもよい。
以上の説明はプロファイリングメトリックの閾値割合を参照している。これは必ずしも不可欠なものではなく、より一般的には、メトリックに関する何らかの所定の基準を満たす(あるいは満たさない)関数を除去することが可能である。
“コールグラフ”を参照してきたが、実際のコールグラフをユーザに表示する必要はない。コールグラフはプロファイリング装置内に、単に概念的に、あるいは単に含蓄的に存在していてもよい。また、プロファイリング装置が図3の完全なコールグラフCG1を取得する必要はなく、これは単に理解を支援するものとして含められているに過ぎない。装置は単純に、未調査の下位レベルにある関数を意識することなく、処理の次の反復に必要な情報、換言すれば、それまでに選択された関数によって直接的に呼び出される関数だけを計算してもよい。
上述のように、本発明に係る方法を実行するために使用される装置は、プログラムそれ自体を実行するために使用されるのと同一のコンピュータシステムであってもよいし、別個のコンピュータであってもよい。何れにしても、本発明はコンピュータ読み取り可能コードにて具現化され得る。このようなコードはコンピュータ読み取り可能媒体に格納され得る。
一例として、図8は、本発明に係る方法を実行する装置を模式的に示している。実際には、この装置は、アプリケーションを走らせ、且つここに例示する特定のユニット又は部分を提供するように更にプログラムされた汎用コンピュータシステムの形態をとる。
アプリケーション17は、例えば大型コンピュータシステムのハードディスクアレイなどのメモリ31内に保持されている。コード分析ユニット32が、アプリケーションコードを調べて、アプリケーション内の構成関数を最上位(S0)から最下位までレベルごとに分類する。
関数記憶ユニット33が、検討中の現在の関数サブセット(すなわち、上述のように、所与のレベルにある関数群)を何らかの手法で記録する。これは、それぞれのコードブロック自体ではなく、各関数のポインタ又はIDを格納することによって達成され得る。
インスツルメンテーションユニット34が、上述の技術のうちの1つを用いて、現在サブセット内の各関数用のプロファイリングコードを付加あるいは有効化し、これを格納されたアプリケーション17に適用する。
実行ユニット36が、現在付加/有効化されているプロファイリングコードを含むアプリケーションを走らせ、それにより、現在の関数サブセットに関するプロファイリングデータを生成する。このプロファイリングデータはプロファイルデータ記憶ユニット37に格納される。
プロファイリングデータの結果は関数選択ユニット38に利用可能にされ、関数選択ユニット38は、選択されたプロファイリングメトリック(上述の説明を参照)に基づいて、検討から除外されるべき関数を決定する。
関数記憶ユニット33が、無視されるべきものとして関数選択ユニット38によって特定された関数を消去し、且つコード分析ユニット32によって提供される情報を用いて次レベルからの関数を追加することによって、関数のサブセットを更新する。そして、インスツルメンテーション、実行、及びプロファイリングデータの分析の処理が、上述のようにして繰り返される。
以上の説明に関し、更に以下の付記を開示する。
(付記1)
メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングする方法であって、
前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、
前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、
前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、
前記プロファイリングデータに基づいて前記関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、
前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、
所定の階層レベルに到達するまで、
前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、
を含む、方法。
(付記2)
前記分類するステップは更に、前記複数の関数のコールグラフを決定することを有し、
前記サブセットを縮小するステップは更に、前記除去された関数及び前記選外関数を前記コールグラフから消去することを有すること特徴とする付記1に記載の方法。
(付記3)
前記関数はコンパイル可能なコードの形態を有すること特徴とする付記1又は2に記載の方法。
(付記4)
前記プロファイリングデータを生成するステップは、各関数をコンパイルする処理の間又は前に、前記プロファイリングコードを付加すること特徴とする付記3に記載の方法。
(付記5)
前記プロファイリングデータを生成するステップは、前記関数に既に設けられているプロファイリングコードを有効化することを特徴とする付記3に記載の方法。
(付記6)
前記分類するステップに先立って、プロファイリングメトリックを選択し、且つプロファイリングコードを用いずに前記ソフトウェアアプリケーションを実行することで、選択されたメトリックの基準値を確立するステップを更に有することを特徴とする、付記1乃至5の何れか一項に記載の方法。
(付記7)
前記サブセットを縮小するステップは、関数を、それに関連するプロファイリングデータが前記プロファイリングメトリックに関する所定の条件を満たすか否かに基づいて除去することを含む、ことを特徴とする付記6に記載の方法。
(付記8)
前記サブセットを縮小するステップは、前記プロファイリングメトリックに従って、プロファイリングされた関数をランク付けすることを含み、前記所定の条件は前記基準値のうちの所与の割合である、ことを特徴とする付記7に記載の方法。
(付記9)
前記プロファイリングメトリックは、実行時間、メモリ使用状況、ディスク使用状況、及びハードウェアカウンタに基づくメトリックのうちの少なくとも1つである、ことを特徴とする付記8に記載の方法。
(付記10)
前記所定の階層レベルは前記最下位レベルである、ことを特徴とする付記1乃至9の何れか一項に記載の方法。
(付記11)
前記所定の階層レベルは、目標とする数又は割合の関数が選外となるか、除去されることになった階層レベルである、ことを特徴とする付記1乃至9の何れか一項に記載の方法。
(付記12)
前記最適化されたコールグラフをユーザに表示するステップ、を更に有することを特徴とする付記2に記載の方法。
(付記13)
前記所定の階層レベルに到達したときに得られた前記サブセットに含まれる関数のコードを最適化するステップ、を更に有することを特徴とする付記1乃至12の何れか一項に記載の方法。
(付記14)
メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションを自動的にプロファイリングする装置であって、
前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するように構成されたコード分析ユニットと、
現在レベルにおける関数群のサブセットを記録するように構成された関数記憶ユニットと、
前記サブセットの関数群の各々に対してプロファイリングコードを付加あるいは有効化するように構成されたインスツルメンテーションユニットと、
前記ソフトウェアアプリケーションを実行して、プロファイリングデータを生成するように構成された実行ユニットと、
前記実行ユニットによって生成されたプロファイリングデータを保持するプロファイルデータ記憶ユニットと、
前記プロファイリングデータに基づいて関数を消去し、且つ消去された関数によってのみ呼び出される関数を除いた前記現在レベルの下の次レベルからの関数を記録するよう、前記関数記憶ユニットに命令するように構成された関数選択ユニットと、
を含み、
前記インスツルメンテーションユニット、前記実行ユニット、前記プロファイルデータ記憶ユニット、及び前記関数選択ユニットは、所定の階層レベルに到達するまで繰り返し動作するように構成される、
装置。
(付記15)
メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングさせるプログラムであって、コンピュータに、
前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、
前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、
前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、
前記プロファイリングデータに基づいて前記サブセットから関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、
前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、
所定の階層レベルに到達するまで、
前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、
を含む処理を実行させるプログラム。

Claims (10)

  1. メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングする方法であって、
    コンピュータにより
    前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、
    前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、
    前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、
    前記プロファイリングデータに基づいて前記関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、
    前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、
    所定の階層レベルに到達するまで、
    前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、
    を含む、方法。
  2. 前記分類するステップは更に、前記複数の関数のコールグラフを決定することを有し、
    前記サブセットを縮小するステップは更に、前記除去された関数及び前記選外関数を前記コールグラフから消去することを有すること特徴とする請求項1記載の方法。
  3. 前記分類するステップに先立って、プロファイリングメトリックを選択し、且つプロファイリングコードを用いずに前記ソフトウェアアプリケーションを実行することで、選択されたメトリックの基準値を確立するステップを更に有することを特徴とする、請求項1又は2に記載の方法。
  4. 前記サブセットを縮小するステップは、関数を、それに関連するプロファイリングデータが前記プロファイリングメトリックに関する所定の条件を満たすか否かに基づいて除去することを含む、こと特徴とする請求項3に記載の方法。
  5. 前記サブセットを縮小するステップは、前記プロファイリングメトリックに従って、プロファイリングされた関数をランク付けすることを含み、前記所定の条件は前記基準値のうちの所与の割合である、こと特徴とする請求項4に記載の方法。
  6. 前記プロファイリングメトリックは、実行時間、メモリ使用状況、ディスク使用状況、及びハードウェアカウンタに基づくメトリックのうちの少なくとも1つである、こと特徴とする請求項5に記載の方法。
  7. 前記所定の階層レベルは前記最下位レベルである、こと特徴とする請求項1乃至6の何れか一項に記載の方法。
  8. 前記所定の階層レベルは、目標とする数又は割合の関数が選外となるか、除去されることになった階層レベルである、こと特徴とする請求項1乃至6の何れか一項に記載の方法。
  9. メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションを自動的にプロファイリングする装置であって、
    前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するように構成されたコード分析ユニットと、
    現在レベルにおける関数群のサブセットを記録するように構成された関数記憶ユニットと、
    前記サブセットの関数群の各々に対してプロファイリングコードを付加あるいは有効化するように構成されたインスツルメンテーションユニットと、
    前記ソフトウェアアプリケーションを実行して、プロファイリングデータを生成するように構成された実行ユニットと、
    前記実行ユニットによって生成されたプロファイリングデータを保持するプロファイルデータ記憶ユニットと、
    前記プロファイリングデータに基づいて関数を消去し、且つ消去された関数によってのみ呼び出される関数を除いた前記現在レベルの下の次レベルからの関数を記録するよう、前記関数記憶ユニットに命令するように構成された関数選択ユニットと、
    を含み、
    前記インスツルメンテーションユニット、前記実行ユニット、前記プロファイルデータ記憶ユニット、及び前記関数選択ユニットは、所定の階層レベルに到達するまで繰り返し動作するように構成される、
    装置。
  10. メイン関数を含む複数の関数を有し、該関数間で階層的に呼び出しが行われるソフトウェアアプリケーションをプロファイリングさせるプログラムであって、コンピュータに、
    前記複数の関数の各々を、前記メイン関数からの最小の呼び出し段数に従って、少なくとも最上位レベル及び最下位レベルを含む複数の階層レベルのうちの1つに分類するステップと、
    前記最上位レベルで開始して、現在レベルにおける関数群のサブセットを定めるステップと、
    前記サブセットの関数群に対してプロファイリングコードを付加あるいは有効化し、且つ前記ソフトウェアアプリケーションを実行することで、プロファイリングデータを生成するステップと、
    前記プロファイリングデータに基づいて前記サブセットから関数群のうちの1つ以上を除去することにより、前記サブセットを縮小するステップと、
    前記サブセットを縮小するステップにて除去された関数によってのみ呼び出される関数に、選外関数としてマークを付すステップと、
    所定の階層レベルに到達するまで、
    前記現在レベルの下の次レベルから前記選外関数以外の関数群を前記縮小されたサブセットに追加して、前記プロファイリングデータを生成するステップ、前記サブセットを縮小するステップ、及び前記マークを付すステップを繰り返すステップと、
    を含む処理を実行させるプログラム。
JP2011118246A 2010-05-27 2011-05-26 ソフトウェアアプリケーションのプロファイリング方法及び装置 Active JP5648584B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP10164180.1 2010-05-27
EP10164180A EP2390790A1 (en) 2010-05-27 2010-05-27 Profiling of software applications

Publications (2)

Publication Number Publication Date
JP2011248895A JP2011248895A (ja) 2011-12-08
JP5648584B2 true JP5648584B2 (ja) 2015-01-07

Family

ID=42971757

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011118246A Active JP5648584B2 (ja) 2010-05-27 2011-05-26 ソフトウェアアプリケーションのプロファイリング方法及び装置

Country Status (2)

Country Link
EP (1) EP2390790A1 (ja)
JP (1) JP5648584B2 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8938729B2 (en) * 2010-10-12 2015-01-20 Ca, Inc. Two pass automated application instrumentation
US8954546B2 (en) 2013-01-25 2015-02-10 Concurix Corporation Tracing with a workload distributor
US9256969B2 (en) 2013-02-01 2016-02-09 Microsoft Technology Licensing, Llc Transformation function insertion for dynamically displayed tracer data
US9323863B2 (en) 2013-02-01 2016-04-26 Microsoft Technology Licensing, Llc Highlighting of time series data on force directed graph
US9021447B2 (en) 2013-02-12 2015-04-28 Concurix Corporation Application tracing by distributed objectives
US20130283281A1 (en) 2013-02-12 2013-10-24 Concurix Corporation Deploying Trace Objectives using Cost Analyses
US8843901B2 (en) 2013-02-12 2014-09-23 Concurix Corporation Cost analysis for selecting trace objectives
US8924941B2 (en) * 2013-02-12 2014-12-30 Concurix Corporation Optimization analysis using similar frequencies
US8997063B2 (en) 2013-02-12 2015-03-31 Concurix Corporation Periodicity optimization in an automated tracing system
US20130219372A1 (en) 2013-03-15 2013-08-22 Concurix Corporation Runtime Settings Derived from Relationships Identified in Tracer Data
US9575874B2 (en) 2013-04-20 2017-02-21 Microsoft Technology Licensing, Llc Error list and bug report analysis for configuring an application tracer
US9734040B2 (en) 2013-05-21 2017-08-15 Microsoft Technology Licensing, Llc Animated highlights in a graph representing an application
US8990777B2 (en) 2013-05-21 2015-03-24 Concurix Corporation Interactive graph for navigating and monitoring execution of application code
US9280841B2 (en) 2013-07-24 2016-03-08 Microsoft Technology Licensing, Llc Event chain visualization of performance data
US9292415B2 (en) 2013-09-04 2016-03-22 Microsoft Technology Licensing, Llc Module specific tracing in a shared module environment
EP3069241B1 (en) 2013-11-13 2018-08-15 Microsoft Technology Licensing, LLC Application execution path tracing with configurable origin definition
EP3069267A4 (en) 2013-11-13 2017-09-27 Microsoft Technology Licensing, LLC Software component recommendation based on multiple trace runs
US9218169B2 (en) 2013-11-19 2015-12-22 Google Inc. Callpath finder
JP6648546B2 (ja) 2016-02-09 2020-02-14 富士通株式会社 情報処理装置、性能データ収集プログラムおよび性能データ収集方法
CN107608872A (zh) * 2016-07-11 2018-01-19 北京京东尚科信息技术有限公司 一种检测软件系统的模块化水平的方法和装置
US10289520B2 (en) * 2017-06-23 2019-05-14 New Relic, Inc. Adaptive application performance analysis
US10466986B2 (en) 2018-03-30 2019-11-05 Oracle International Corporation Optimized recompilation using hardware tracing
US10768915B2 (en) * 2018-10-18 2020-09-08 Denso International America, Inc. Systems and methods for selectively instrumenting a program according to performance characteristics
CN113934475B (zh) * 2021-08-10 2022-09-06 荣耀终端有限公司 应用调用的分析方法及电子设备

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5828883A (en) * 1994-03-31 1998-10-27 Lucent Technologies, Inc. Call path refinement profiles
US5960198A (en) 1997-03-19 1999-09-28 International Business Machines Corporation Software profiler with runtime control to enable and disable instrumented executable
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
JP2002297416A (ja) * 2001-03-28 2002-10-11 Matsushita Electric Ind Co Ltd プロファイル情報取得装置及びプロファイル情報取得プログラム
JP2003140928A (ja) * 2001-11-02 2003-05-16 Fujitsu Ltd 仮想マシン内部情報自動取得システム
US8214806B2 (en) 2007-05-09 2012-07-03 International Business Machines Corporation Iterative, non-uniform profiling method for automatically refining performance bottleneck regions in scientific code

Also Published As

Publication number Publication date
JP2011248895A (ja) 2011-12-08
EP2390790A1 (en) 2011-11-30

Similar Documents

Publication Publication Date Title
JP5648584B2 (ja) ソフトウェアアプリケーションのプロファイリング方法及び装置
US8402317B1 (en) Viewing multi-dimensional metric data from multiple test cases
US8108849B2 (en) Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability
US7509632B2 (en) Method and apparatus for analyzing call history data derived from execution of a computer program
US8554811B2 (en) Software routine fingerprints in performance data
US20010032332A1 (en) Method of generating profile-optimized code
CN104850411B (zh) 存储系统基准评测程序生成方法及装置
US20120131559A1 (en) Automatic Program Partition For Targeted Replay
US11748072B2 (en) Apparatus and method for source code optimisation
US20040006760A1 (en) Generating and using profile information automatically in an integrated development environment
Frank et al. Parallelization, modeling, and performance prediction in the multi-/many core area: A systematic literature review
Zhou et al. GPA: A GPU performance advisor based on instruction sampling
Wylie et al. Large-scale performance analysis of Sweep3D with the Scalasca toolset
Zhang et al. Understanding the performance of GPGPU applications from a data-centric view
US10102099B2 (en) Performance information generating method, information processing apparatus and computer-readable storage medium storing performance information generation program
Wilhelm et al. Parceive: Interactive parallelization based on dynamic analysis
Röhl et al. Validation of hardware events for successful performance pattern identification in high performance computing
Fedorova et al. Performance comprehension at WiredTiger
Willnecker et al. Model-based prediction of automatic memory management and garbage collection behavior
Hazott et al. DSA monitoring framework for HW/SW partitioning of application kernels leveraging VPs
JP4997144B2 (ja) マルチタスク処理装置およびその方法
Moesus et al. A rating tool for the automated selection of software refactorings that remove antipatterns to improve performance and stability
Molitorisz et al. Locating parallelization potential in object-oriented data structures
JP5287427B2 (ja) シンボリックデバッガ、方法およびプログラム
Hung et al. New tracing and performance analysis techniques for embedded applications

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140918

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20141014

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141027

R150 Certificate of patent or registration of utility model

Ref document number: 5648584

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150