(57)【要約】【課題】コンピュータ・システムのプログラム動作履歴に基づいて性能評価により高く寄与する関数を自動的に選択する手法を提供する。【解決手段】本発明に係るコンピュータ・プログラムの動作履歴に含まれる実行された関数を抽出する方法は、動作履歴を受け付けるステップと、受け付けた動作履歴に含まれる関数の呼び出し関係を用いて関数を木構造のノードに割り当てるステップと、実行時間又はメモリ使用量を定量的情報として扱い、関数に付随する定量的情報の合計が全体に付随する定量的情報と所定の比率との積を超える条件で関数を抽出するステップを含む。関数を抽出するステップは関数の数が下限を超えかつ上限を超えない条件で関数を抽出してもよい。さらに、抽出した関数を用いて実行トレースを生成するステップを含んでもよい。【選択図】図１
2010198133.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ・プログラムの動作履歴に含まれる実行された関数を抽出する方法であって、
前記動作履歴を受け付けるステップと、
前記受け付けた動作履歴に含まれる前記関数の呼び出し関係を用いて前記関数を木構造のノードに割り当てるステップと、
実行時間又はメモリ使用量を定量的情報として扱い、前記関数に付随する前記定量的情報の合計が全体に付随する前記定量的情報と所定の比率との積を超える条件で前記関数を抽出するステップと、を含む方法。
【請求項２】
前記関数を抽出するステップは、前記関数の数が所定の下限を超え、かつ所定の上限を超えない条件で前記関数を抽出する、請求項１に記載の方法。
【請求項３】
更に、前記抽出した前記関数を用いて実行トレースを生成するステップを含む、請求項１に記載の方法。
【請求項４】
前記木構造のノードに割り当てるステップは、更に、前記関数と対応する前記定量的情報を、前記関数に関連付ける、請求項１に記載の方法。
【請求項５】
更に、前記木構造のノードに含まれ、親ノード及び子ノードの関係を有するノードを含む部分的な木構造に対して、
前記部分的な木構造に含まれる子ノードに付随する前記定量的情報を値の大きな順に累積するステップと、
前記累積した前記定量的情報が、前記部分的な木構造に含まれる前記親ノードに付随する前記定量的情報と所定の比率との積を超える条件で、前記子ノードを抽出するステップと、
前記部分的な木構造以外の木構造のノードに接続している前記子ノードを除外するステップと、を含む、請求項１に記載の方法。
【請求項６】
更に、前記木構造のノードに含まれ、親ノード及び子ノードの関係を有するノードを含み、互いに排他的な複数の部分的な木構造に対して、
ある部分的な木構造から、下位の他の部分的な木構造の親ノードにたどり得るノードを選択するステップと、
前記選択するステップにより選択されないノードから、前記複数の部分的な木構造ごとに、前記抽出するステップにより抽出されたノードが何もない部分的な木構造に含まれるノードを選択するステップと、
前記選択するステップにより選択されないノードから、前記選択されないノードに付随する前記定量的情報の合計が、前記部分的な木構造に含まれる前記親ノードに付随する前記定量的情報と所定の比率との積を超える条件で、前記選択されないノードを抽出するステップと、を含む、請求項１に記載の方法。
【請求項７】
コンピュータ・プログラムの動作履歴に含まれる実行された関数を抽出する方法であって、
前記動作履歴を受け付けるステップと、
前記受け付けた動作履歴に含まれる前記関数の呼び出し関係を用いて前記関数を木構造のノードに割り当てるステップと、
前記関数に付随する前記関数の実行時間又はメモリ使用量の合計が、全体に付随する実行時間又はメモリ使用量の合計と所定の比率との積を超える条件及び前記関数の数が所定の下限を超えかつ所定の上限を超えない条件に従って前記関数を抽出するステップと、
前記抽出した前記関数を用いて実行トレースを生成するステップと、を含む、
実行された関数を抽出する方法。
【請求項８】
請求項１から７のいずれかに記載の方法の各ステップを、コンピュータを用いて実行するためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ・システムの性能評価モデリングに関する。特にコンピュータ・システムのプログラム動作履歴（実行トレース）に基づいて性能評価により高く寄与する関数を自動的に選択する手法に関する。
【背景技術】
【０００２】
従来、コンピュータ・システムの性能を評価する手法の分野において、アプリケーション・プログラム等の実行トレース（関数の呼び出し系列）に基づいて統一モデリング言語（Ｕnified  Ｍodeling  Ｌanguage、ＵＭＬと略称）のシーケンス図を作成する手法や、イベントチャートを生成する技術が知られている。例えば、Rational  Rose  RealTime（登録商標）等のイベントチャートを生成するパッケージ製品が用いられている（非特許文献１）。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】“Rational  Rose  Technical  Developer”、［online］、日本ＩＢＭ、平成２０年１１月１３日、［平成２０年１１月２１日検索］、インターネット、＜URL：http://www-06.ibm.com/jp/software/rational/products/design/rosetech/＞
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、従来技術又は関連技術の組み合わせにおいては、典型的には、評価対象のアプリケーションの実行トレースに含まれる個々の関数呼び出しが、逐一、メッセージ送受信に置き換えられる。更に、置き換えられたメッセージ送受信に基づいてシーケンス図等が出力される。一般的には、メッセージ送受信への置き換えの粒度は細かいので、業務用アプリケーション等の現実的なソフトウェア又はシステムの実行トレースを評価対象としてシーケンス図を生成すると、出力される図の規模は莫大なものとなる場合がある。このような巨大なシーケンス図からは、ユーザがシステム等の大まかな振る舞いを読み取ることは困難である。更に、システム性能に対するボトルネックをユーザが見出すことは困難であった。
【０００５】
システムの性能評価等において、対象とするシステムを分析レベルでモデリングするためには、システムの細かな振る舞いはシーケンス図から捨象し、抽象度の高い振る舞いを表現する必要がある。更に、分析レベルの実行可能モデルを作成するには、一つの実行トレースによる振る舞いを表現するのではなく、網羅的に取得した複数の実行トレースを全て包含する振る舞いを表現する必要がある。
【０００６】
発明者は、このような分析レベルでのモデリング手法を考案して別途出願した（特願２００８−１４９４９８）。当該既出願に記載の方法においては、システムの細かな振る舞いを捨象した後の実行トレースのセットに基づいて、シーケンス図を得ることが可能である。
【０００７】
本発明は、前述の分析レベルでのモデリング手法の入力となり得る、システムの細かな振る舞いを捨象した実行トレースを作成する方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は上記課題に鑑み、以下のような解決手段を提供する。
【０００９】
本発明においては、評価対象のアプリケーション等の実行トレースから、一部の関数に限定して抜き出した実行トレースを得るための方法を提供し得る。本発明は、性能評価モデリングのための実行トレースに含まれる関数を選択するために、次のような選択基準を用い得る。
選択基準−１：選択した関数群の実行時間の総和が、個々の実行トレースについて、全体の所要時間に対して大半を占める(指定した比率以上になる)ようにする。すなわち、選択した関数群が実行時間に関して支配的であるようにする。
選択基準−２：実行時間以外に、メモリ使用量等に基づく選択基準も用いる。すなわち、所要時間又は使用メモリ量を定量的情報として扱い、当該定量的情報が所定の比率を超える条件で関数を選択する。定量的情報は比較可能な数値等の形態であればよく、形態に従って適切な単位を用い得る。
選択基準−３：選択する関数群の数には適切な範囲が設定される。選択する関数群が少なすぎると、例えば、メイン関数一つを選択すれば、形式的には全ての実行トレースに対して上記の選択基準が満たされるが、性能評価モデリングとしては意味がない。従って、トップレベルに近い関数は予め選択可能な対象から除外される必要がある。除外対象の関数を指定してもよい。これと逆に、選択する関数群が多すぎるとシステムの細かな振る舞いを捨象することにならない。選択した関数群の最大許容サイズを指定するか、又は関数呼び出しの最大深さを指定することにより、選択する関数群が過剰となることを防いでもよい。
選択基準−４：シーケンス図として意味がある表現になる必要がある。
選択基準−５：選択した関数のライフライン間は、Interaction(メッセージ送受)により連結可能である必要がある。すなわち、途中でInteractionが中断するような実行トレースを生成してはならない。このためには、ライフラインのオブジェクトを実装におけるモジュールに対応させ、モジュール間の呼び出し関係が実行トレースの中に必ず含まれるように関数群を決める必要がある。
【００１０】
本発明に係る方法は、前述の選択基準に基づく関数の選択のために、実行時間付きコールグラフ（ＣＡＬＬ  ＧＲＡＰＨ）を用い得る。この実行時間付きコールグラフは、メイン関数を根とする木構造にあてはめることができ、次のような特徴を有する。
特徴−１：各ノードは関数の呼び出しを表す。
特徴−２：あるノード（関数）から呼び出される関数は、当該ノードの子ノードとして関連付ける。ここで、同一の子ノードの呼び出しが複数回あっても、一つの子ノードとして表す。
特徴−３：複数のノード（関数）から同じ子ノードへの呼び出しがある場合は、それぞれのノードに対する子ノードとして表す。
特徴−４：再帰的呼び出しがある場合は、再起的に呼び出されるノードは表現しない。すなわち、呼び出すノード（関数）の下に再帰的呼び出しを配置しない。
特徴−５：あるノード（関数）の全て呼び出しによる実行時間の総和を、対応するノードに関連付ける。
特徴−６：実行時間付きコールグラフは、網羅的に全ての関数呼び出しを表現しているか、あるいは、一部分を表現しているとする。
【００１１】
本発明に係る方法は、上述の実行時間付きコールグラフを、個々の実行トレースに対応して生成し得る。すなわち、実行時間付きコールグラフは実行トレースの個数だけ生成される。また、全てのグラフの形状は同一になる。すなわち、実行トレースによっては呼び出されない関数もあり得るが、その実行トレースに対応するグラフにおいては、その関数の呼び出し時間がゼロであったと見なすことにより、グラフの形状は同一になる。
【００１２】
本発明は、実行トレースを用いて性能評価を実施するシステム、システム開発環境、又はシステムモデリング技術等の、既存の技術と組み合わせることができ、そのように組み合わせた技術もまた、本発明の技術範囲に含まれる。同様に、本発明の技法を含む性能評価モデル又は性能評価システム等も、本発明の技術範囲に含まれる。更に、本発明の技法は、オブジェクトにアクセスするための諸段階を、ＦＰＧＡ（プログラム可能なゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）、これらと同等のハードウェアロジック素子、プログラム可能な集積回路、又はこれらの組み合わせが記憶し得るプログラムの形態、すなわちプログラム製品として提供し得る。具体的には、データ入出力、データバス、メモリバス、システムバス等を備えるカスタムＬＳＩ（大規模集積回路）の形態として、本発明に係る性能評価モデリングのための関数選択手段を提供でき、そのように集積回路に記憶されたプログラム製品の形態も、本発明の技術範囲に含まれる。
【発明の効果】
【００１３】
本発明によれば、実行時間付きコールグラフを用いて複数の関数の呼び出し関係を表現し、関数群の実行時間の総和が、個々の実行トレースについて、全体の所要時間に対して大半を占めるように、実行トレースに含める関数を選択することが可能になる。従って、本発明においては、システムの細かな振る舞いをシーケンス図から捨象し、抽象度の高い振る舞いを用いて、性能評価等の対象となるシステムを分析レベルでモデリングするための関数を選択することができる。また、本発明によれば、実行時間付きコールグラフを用いて、網羅的に取得した複数の実行トレースを全て包含するシステムの振る舞いを表現することが可能になる。従って、本発明の方法は、分析レベルでのモデリング手法のための入力になり得る、抽象度の高い実行トレースを得るための方法を提供することができる。これにより、本発明は、発明者による分析レベルでのモデリング手法のみならず、コンピュータ・システムの性能を評価するための既存の手法に用い得る入力データを生成することが可能になる。従って、例えば、当該既存の手法を含むシーケンス図又は状態遷移図等の作成方法を組み合わせることにより、抽象度の高いシーケンス図又は状態遷移図等を作成することが可能になる。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施形態に係る、関数選択方法の概略を表すフロー図である。
【図２】本発明の一実施形態に係る、実行時間付きコールグラフ１００の例を示す図である。
【図３】本発明の一実施形態に係る、実行時間付きコールグラフ１０２の例を示す図である。
【図４】本発明の一実施形態に係る、モジュールを含む実行時間付きコールグラフ１０３の例を示す図である。
【図５】本発明の一実施形態に係る、異なるモジュールを含む実行時間付きコールグラフ１０４の例を示す図である。
【図６】本発明の一実施形態に係る、選択されたノードの情報を含む実行時間付きコールグラフ１０５の例を示す図である。
【図７】本発明の一実施形態に係る、同一モジュール内でのノード抽出のフロー図である。
【図８】本発明の一実施形態に係る、異なるモジュール内でのノード抽出のフロー図である。
【図９】本発明の一実施形態に係る、関数選択方法の実施装置のハードウェア構成を例示する図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態について式及び図を参照しながら説明する。なお、これらはあくまでも一例であって、本発明の技術的範囲はこれらに限られるものではない。
【００１６】
［関数選択方法の概略］
図１は、本発明の一実施形態に係る、関数選択方法の概略を表すフロー図である。本発明に係る関数選択方法は、コンピュータ装置等の実施手段を用いて、性能評価の対象であるシステムの動作から、所定の選択基準に従って当該システムの大まかな振る舞いを抽出する。一実施形態において、本発明に係る関数選択方法は、次のような諸段階を実施する。
【００１７】
ステップＳ１１０では、評価対象システムが観測される。評価対象システムは、性能評価の対象であるシステム又はプログラム等であり得る。
【００１８】
ステップＳ１２０では、実行トレースが生成される。当該実行トレースは、評価対象システムの動作に含まれる関数等のそれぞれが実行された記録であり得る。好適には、当該実行トレースは網羅的な記録である。典型的には、当該実行トレースは、関数等のそれぞれを実行の単位として、実行された関数を特定するための識別子又は関数名等の情報、関数等が実行された時刻、実行された時間の期間等の情報を適宜含み得る。
【００１９】
ステップＳ１３０では、観測対象関数を抽出する。すなわち、前段のステップＳ１２０において生成された実行トレースに含まれる関数の情報のうちから、評価対象システムの性能評価モデリングのための関数の情報が抽出される。本発明に係る関数選択方法においては、次のような選択基準を用い得る。
選択基準−１：選択した関数群の実行時間の総和が、個々の実行トレースについて、全体の所要時間に対して大半を占める(指定した比率以上になる)ようにする。すなわち、選択した関数群が実行時間に関して支配的であるようにする。
選択基準−２：実行時間以外に、メモリ使用量等に基づく選択基準も用いる。すなわち、所要時間又は使用メモリ量を定量的情報として扱い、当該定量的情報が所定の比率を超える条件で関数を選択する。定量的情報は比較可能な数値等の形態であればよく、形態に従って適切な単位を用い得る。例えば、所要時間は任意単位でもよく、実際の時間を秒単位で表してもよく、プロセッサ等の動作周期の数で表してもよく、全体の実行時間に対する比率で表してもよい。使用メモリ量は任意単位でもよく、バイト数で表してもよく、全体の記憶容量に対する比率で表してもよい。好適には、実行時間は［マイクロ秒単位］で表され、使用メモリ量は［メガバイト単位］で表される。
選択基準−３：選択する関数群の数には適切な範囲が設定される。選択する関数群が少なすぎると、例えば、メイン関数一つを選択すれば、形式的には全ての実行トレースに対して上記の選択基準が満たされるが、性能評価モデリングとしては意味がない。従って、トップレベルに近い関数は予め選択可能な対象から除外される必要がある。除外対象の関数を指定してもよい。これと逆に、選択する関数群が多すぎるとシステムの細かな振る舞いを捨象することにならない。選択した関数群の最大許容サイズを指定するか、又は関数呼び出しの最大深さを指定することにより、選択する関数群が過剰となることを防いでもよい。
選択基準−４：シーケンス図として意味がある表現になる必要がある。
選択基準−５：選択した関数のライフライン間は、Interaction(メッセージ送受)により連結可能である必要がある。すなわち、途中でInteractionが中断するような実行トレースを生成してはならない。このためには、ライフラインのオブジェクトを実装におけるモジュールに対応させ、モジュール間の呼び出し関係が実行トレースの中に必ず含まれるように関数群を決める必要がある。
【００２０】
ステップＳ１４０では、抽出した実行トレースを生成する。すなわち、前段のステップＳ１３０において抽出された、評価対象システムの性能評価モデリングのための関数の情報を用いて実行トレースが生成される。当該生成される実行トレースは、評価対象システムの細かな振る舞いを捨象し、大まかな振る舞いを含み得る。
【００２１】
このようにして、本発明に係る関数選択方法は、性能評価の対象であるシステムの動作から、所定の選択基準に従って当該システムの大まかな振る舞いを抽出することが可能になる。ステップＳ１３０における選択基準の詳細を含む本発明の動作の諸段階について、引き続き説明する。
【００２２】
［実行時間付きコールグラフの例］
図２は、本発明の一実施形態に係る、実行時間付きコールグラフ１００の例を示す図である。図２に示す実行時間付きコールグラフ１００は、木構造として表されている。当該木構造は、上位から下位に向かって、第１層１８１、第２層１８２、第３層１８３及び第４層１８４からなる。第１層１８１は木構造の根（ルート）であり得る。それぞれの層には木構造のノードが含まれる。それぞれのノードは、例えば性能評価の対象であるシステムの実行トレースにおいて識別された関数呼び出しであり得る。当該識別は、関数の名称又は識別子を含む任意の識別方法により識別される関数ごとに行われる。
【００２３】
本発明に係る実行時間付きコールグラフ１００は、図１を用いて説明したステップＳ１３０の動作における選択基準に基づく関数の選択のために用いられる。実行時間付きコールグラフ１００は、次のような特徴を有する。
特徴−１：各ノードは関数の呼び出しを表す。
特徴−２：あるノード（関数）から呼び出される関数は、当該ノードの子ノードとして関連付ける。ここで、同一の子ノードの呼び出しが複数回あっても、一つの子ノードとして表す。
特徴−３：複数のノード（関数）から同じ子ノードへの呼び出しがある場合は、それぞれのノードに対する子ノードとして表す。
特徴−４：再帰的呼び出しがある場合は、再起的に呼び出されるノードは表現しない。すなわち、呼び出すノード（関数）の下に再帰的呼び出しを配置しない。
特徴−５：あるノード（関数）の全て呼び出しによる実行時間の総和を、対応するノードに関連付ける。
特徴−６：実行時間付きコールグラフは、網羅的に全ての関数呼び出しを表現しているか、あるいは、一部分を表現しているとする。
【００２４】
図２に示す実行時間付きコールグラフ１００は、最も上位の第１層１８１には根ノード１１０を含む。根ノード１１０は、例えば、アプリケーション・プログラム等に含まれるメイン関数（ｍａｉｎ）であり得る。図２の例においては、根ノード１１０に含まれるメイン関数に付随する時間が「７４３０６（任意単位）」であることが示される。
【００２５】
図２に示す実行時間付きコールグラフ１００は、第２層１８２にノード１２１及びノード１２２を含む。図２の例においては、ノード１２１は関数Ａを含み、関数Ａに付随する時間は「１５５３９（任意単位）」であり、一方、ノード１２２は関数Ｂを含み、関数Ｂに付随する時間は「５５６７６（任意単位）」であることが示される。これらのノード１２１及びノード１２２は、根ノード１１０から呼び出されるノードであり得る。他のノードについても同様であり、特に記載しない限り、各ノードには関数を識別するための情報及び付随する実行時間の情報が含まれる。
【００２６】
第２層１８２と同様に、他の第３層１８３及び第４層１８４についても、それぞれのノードは上位のノードから呼び出される。更に、下位に向かって呼び出すノードが関連付けられてもよい。
【００２７】
図２に示す実行時間付きコールグラフ１００において、ノード１４１及びノード１４３は、いずれも関数Ｐを含むノードである。ノード１４１はノード１３３から呼び出され、ノード１４３はノード１３７から呼び出される。本発明に係る関数選択方法においては、複数のノード（関数）から呼び出される同一の子ノードは、それぞれのノードに対する子ノードとして表される。
【００２８】
一実施形態において、図２に示す実行時間付きコールグラフ１００は、次のような規則に従う。
規則−１：一つの関数から呼び出される他の関数は、当該一つの関数に対する子ノードとして表される。同じ関数が複数回呼び出される場合も、同一の子ノードとして表される。
規則−２：異なる二つ以上の関数から呼び出される他の関数は、それぞれの子ノードとして表される。従って、第３層以下の層において、同一の名称又は識別子を有する関数が、異なる親ノードに対する子ノードとして表される場合がある。
規則−３：再帰的呼び出しがある場合は、再帰呼び出しされるノードを表さない。すなわち、再帰呼び出しする関数のノードの下には、再帰呼び出しされる関数のノードを配置しない。
規則−４：それぞれのノードには、名称又は識別子等により識別される関数の情報と、当該関数が全ての呼び出しにより実行された時間の長さ（実行時間）の情報を含む。
規則−５：実行時間付きコールグラフ１００は、全ての関数呼び出しを含むか、又は一部分を含むものとする。
【００２９】
本発明に係る関数選択方法においては、前述のような規則に従って得られる実行時間付きコールグラフ１００は、典型的には次のような性質を満たす。
性質−１：実行時間付きコールグラフ１００は、非循環（acyclic）グラフであり得る。
性質−２：実行時間付きコールグラフ１００に含まれる全てのノードについて、当該ノードに付随する実行時間は、その子ノードの実行時間の総和以上である。すなわち、実行時間は、次式で表される性質を有する。
【数１】
2010198133.tif 000003
式中、ｎ．ｔｉｍｅは任意のノードｎに付随する実行時間、ｎ．ｓｕｂはノードｎから呼び出されるノードの集合、ｓはノードｎから呼び出されるノード、ｓ．ｔｉｍｅはノードｓに付随する実行時間である。不等号は、本発明の実施形態に係る実行時間付きコールグラフ１００が、必ずしも評価対象のシステムの全ての呼び出しを含むとは限らないことを表す。換言すれば、本発明に係る実行時間付きコールグラフ１００においては、評価対象システムの細かな振る舞いを捨象し、大まかな振る舞いを情報として抽出し得る。
【００３０】
本発明に係る関数選択方法においては、このような実行時間付きコールグラフ１００は、評価対象システム等の個々の実行トレースに対応して生成され得る。すなわち、実行時間付きコールグラフ１００は、評価対象システム等の実行トレースの個数だけ生成され得る。また、このように生成される実行時間付きコールグラフ１００の形は、いずれの実行トレースに対しても同一であり得る。実行トレースによっては呼び出されない関数もあり得るが、当該実行トレースに対応する実行時間付きコールグラフ１００において、当該関数の呼出時間がゼロであったと見なすことにより、実行時間付きコールグラフ１００の形は同一になり得る。
【００３１】
［関数選択方法の所定義］
表１に、本発明に係る関数選択方法において用い得る変数の名称と定義を例示する。
【表１】
2010198133.tif 000004
【００３２】
表１に示すノードの個数の下限ＫＬは、例えば、木構造に必ず含まれる根ノード１個を選択する自明な結果を避けるために用い得る。ノードの個数の上限ＫＵは、例えば、木構造に含まれる全てのノードを選択する結果を避けるために用い得る。
【００３３】
一実施形態において、本発明に係る関数選択方法により生成される出力は、コールグラフを構成するノードの部分集合Ｓであり得る。当該出力は、次のような性質を有する。
性質−３：Ｓの要素数は、ＫＬを超えてＫＵ未満であり得る。
性質−４：Ｓの各要素間には親子関係がない。
性質−５：Ｇに含まれる全てのグラフｇについて、Ｓの全ノードの実行時間はＴ以上である。好適には、Ｓは十分に小さい集合であることが望ましいが、Ｓは最小の集合である必要はない。
【００３４】
［関数選択の手順］
本発明に係る関数選択方法においては、コールグラフの集合Ｇから、コールグラフの部分集合Ｓを生成するために、次のような手順を用い得る。
【００３５】
最初に、必須のノード集合Ｒを求める。必須のノード集合Ｒは、含まれるノードのいずれかが欠落する場合に、含まれるノードに付随する実行時間の総和が閾値Ｔを下回る集合であり得る。例えば、全てのグラフの実行時間を合計した一つの合計時間付きコールグラフＧａを作成し、そのグラフＧａに対して必須のノード集合Ｒを求めてもよい。このようにすることで、全てのグラフに対してそれぞれ必須のノード集合Ｒを求める場合に発生し得る手間を省いてもよい。
【００３６】
次いで、コールグラフの部分集合Ｓを生成するために、次の手順が実行され得る。
手順−１：コールグラフにおいて、必須のノード集合Ｒに含まれるノードの近傍にあり、かつ実行時間の数値が大きいノードの集合を、ノード候補集合αとする。
手順−２：ノードの個数の上限ＫＵを超えない条件で、必須のノード集合Ｒにノード候補集合αを追加する。
手順−３：ノード候補集合αを追加した必須のノード集合Ｒが、前述の性質−３乃至５を満たす場合に、ノード候補集合αを追加した必須のノード集合を、コールグラフの部分集合Ｓとする。
【００３７】
このようにすることで、本発明に係る関数選択方法においては、前述の性質−３乃至５を満たすコールグラフの集合Ｓを生成することが可能になる。
【００３８】
［モジュール間の関係に基づく関数選択］
図３は、本発明の一実施形態に係る、実行時間付きコールグラフ１０２の例を示す図である。図３に示す実行時間付きコールグラフ１０２は、図２に示した実行時間付きコールグラフ１００と同様に木構造として表され、上位から下位に向かって、第１層１８１、第２層１８２、第３層１８３、第４層１８４及び第５層１８５からなる。これに限定せず、本発明に係る関数選択方法においては、任意の数の層からなるコールグラフの各ノードに、それぞれの実行時間を関連付けて用いてもよい。
【００３９】
図３に例示する実行時間付きコールグラフ１０２は、例えば、第１層１８１に含まれるノード１２２は子ノードを有さないが、他のノード１２１、ノード１２３及びノード１２４は第２層１８２に含まれる子ノードを有するという特徴がある。更に下層の第２層１８２等についても同様であり、それぞれの層に含まれる個々のノードによっては、子ノードを有する場合もあり、有しない場合もある。
【００４０】
図４は、本発明の一実施形態に係る、モジュールを含む実行時間付きコールグラフ１０３の例を示す図である。図３と共通する箇所は説明を省略する。モジュールを含む実行時間付きコールグラフ１０３は、同一のモジュールに含まれるノードのうちから、本発明に係る関数選択方法において抽出されるノードを選択するために用い得る。
【００４１】
図４に例示する、モジュールを含む実行時間付きコールグラフ１０３には、モジュール２０１が設けられる。図４においては、モジュール２０１は、根ノード１１０、ノード１２１、及びノード１２２を含む。
【００４２】
まず、本発明の一実施形態に係るモジュール間の関係に基づく関数選択においては、同一モジュール内のノードから、関数選択に用いる特定のノードを親ノードとして選択する。すなわち、あるモジュールの範囲内を部分的な木構造と見なして、当該モジュールに含まれる個々のノードから、当該部分的な木構造の根ノードであり得るノードを選択する。図４に示すモジュール２０１においては、根ノード１１０はモジュール２０１内の親ノードであり、ノード１２１及びノード１２２はモジュール２０１内の子ノードであり得るので、根ノード１１０が選択される。
【００４３】
次いで、選択された親ノードの直下の層の子ノードのそれぞれに付随する実行時間を、値の大きな順に累積し、親ノードに付随する実行時間の閾値Ｔ以上になる最小個数の子ノードを抽出する。図４の例においては、ノード１２１、ノード１２２及びノード１２３を抽出することにより、これらのノードと関連付けられる関数の実行時間は、根ノード１１０と関連付けられるメイン関数の実行時間と閾値Ｔ（典型的には９５％）との積を超え得る。従って、図４の例においては、ノード１２４を除き、第１層１８１に含まれる３個のノードが抽出され得る。
【００４４】
次いで、選択された親ノードの下層にあり、他のモジュールのノードに接続しているノードを除外する。図４の例においては、ノード１２１及びノード１２３が除外され得る。
【００４５】
このようにして、図４に例示するモジュールを含む実行時間付きコールグラフ１０３においては、同一のモジュール２０１に含まれる複数のノードのうちから、実行時間の合計が全実行時間の閾値を超える条件及び他のモジュールのノードに接続するものを除外する条件を用いて、関数選択のためのノードが抽出される。
【００４６】
図５は、本発明の一実施形態に係る、異なるモジュールを含む実行時間付きコールグラフ１０４の例を示す図である。図３及び図４と共通する箇所は説明を省略する。異なるモジュールを含む実行時間付きコールグラフ１０４は、複数のモジュールに含まれるノードのうちから、本発明に係る関数選択方法において抽出されるノードを選択するために用い得る。
【００４７】
図５に例示する、異なるモジュールを含む実行時間付きコールグラフ１０３には、モジュール２０１に加えて、モジュール２０２、モジュール２０３及びモジュール２０４が設けられる。モジュール２０２はノード１３１、ノード１３２及びノード１４０を含む。モジュール２０３はノード１３３及びノード１３４を含む。モジュール２０４はノード１２３、ノード１２４及びノード１３５乃至ノード１３９を含む。
【００４８】
まず、図４を用いてノードを抽出したモジュール２０１以外の他のモジュールに対して、あるモジュールから他の下位のモジュールの最上位にたどることのできるノードを選択する。例えば、ノード１３１、ノード１３３及びノード１２３が選択され得る（ノード１２４は、下位のモジュールの最上位ノードにたどることはできないため除外される）。それ以外のノードについて、あるモジュールのノードが１個も含まれていなければ、そのモジュール内の根ノードを選択する（木が複数である場合には複数の根ノード）が、図５に例示した各モジュールにおいては該当するものはない。
【００４９】
次いで、他の下位のモジュールに接続しているノードを除外し、残ったノードから、付随する実行時間の累積が、当該選択したノードの親ノードに付随する実行時間と閾値との積を超える条件で、選択したノードに付随する実行時間の値が大きいものを優先して抽出する。例えば、ノード１３２、ノード１３４、ノード１３７及びノード１３９から、付随する実行時間の値が最も大きいノード１３４が優先され得る。
【００５０】
このようにすることで、単一のモジュール２０１におけるノードの選択に加えて、モジュール２０１に隣り合う他のモジュール２０２、モジュール２０３及びモジュール２０４からノードを選択することができる。図５に示す各モジュールに含まれない他のノードに対しても、適宜モジュールを割り当て、上述の手順を用いることにより、ノード同士の関係及び実行時間の累積に基づいて、性能評価のための関数選択方法を実施することが可能になる。
【００５１】
図６は、本発明の一実施形態に係る、選択されたノードの情報を含む実行時間付きコールグラフ１０５の例を示す図である。選択されたノードの情報を含む実行時間付きコールグラフ１０５は、上述の図３乃至図５を用いて示した、ノード同士の関係及び実行時間の累積に基づく、性能評価のための関数選択方法の結果であり得る。
【００５２】
図６に示す選択されたノードの情報を含む実行時間付きコールグラフ１０５においては、ノードの選択においてノード同士の関係及び実行時間の累積を用いることを例示した。本発明に係る関数選択方法においては、これに限らず、図２に示した実行時間付きコールグラフ１００が従う規則を満たす条件で生成されるコールグラフであれば、実行時間以外の情報を有するコールグラフに対して、システム性能評価のための関数選択を実施し得る。
【００５３】
例えば、各ノードに関連付けられる情報はメモリ使用量でもよく、本発明に係る関数選択方法はメモリ使用量付きコールグラフを用いて関数選択を実施してもよい。すなわち、全てのノードについて、当該ノードに付随する情報としてのメモリ使用量を、当該ノードの子ノードのメモリ使用量の総和以上として、本発明に係る関数選択方法を実施してもよい。このような条件は、次式のように表される。
【数２】
2010198133.tif 000005
式中、ｎ．ｍｅｍｏｒｙは任意のノードｎに付随するメモリ使用量であり、ｓ．ｍｅｍｏｒｙはノードｓに付随するメモリ使用量である。
【００５４】
厳密には、メモリは割り当てられ、開放されるため、ある関数の中で割り当て及び開放が行われる場合があり、上式は必ずしも満たされない。しかし、メモリを割り当てる関数及び開放する関数が独立し、かつ、開放する関数が選択対象の範囲外であるなら、上式を満たすので、本発明に係る関数選択方法を用いることが可能となる。
【００５５】
図７は、本発明の一実施形態に係る、同一モジュール内でのノード抽出のフロー図である。図７に示すフロー図は、例えば図４に示したモジュールを含む実行時間付きコールグラフ１０３から、本発明に係る関数選択方法を用いてノードを抽出するために用い得る。
【００５６】
一実施形態において、図７に示す同一モジュール内でのノード抽出の諸段階は、次の動作を含む。
ステップＳ２１０：ノード集合Ｓを空集合とする。
ステップＳ２２０：開始ノードＮｓが属するモジュールＭを求める。
ステップＳ２３０：Ｎｓをルートノードとして、Ｍに属するノードのみで構成される部分木ＴｒをコールグラフＧから抽出する。
ステップＳ２４０：Ｔｒの各ノードｎを深さ優先でたどる。
ステップＳ２５０：ノードｎの時間にＴを乗じ、ｎ以下に要する時間の閾値Ｔｐを求める。
ステップＳ２６０：ノードｎの子ノードを時間の大きい順に並べる。
ステップＳ２７０：ノードｎの子ノードｃを１個取り出す。
ステップＳ２８０：ｃの子孫にＭ以外に属するノードが存在するかどうかを判定する。判定の結果が真である場合はステップＳ３００に進み、偽である場合はステップＳ２９０に進む。
ステップＳ２９０：ノード集合Ｓに子ノードｃを追加する。
ステップＳ３００：変数ｔに子ノードｃの時間を加算する。具体的には、変数ｔは個々の関数により費やされた時間の総和であり得る。
ステップＳ３１０：変数ｔが時間の閾値Ｔｐ以上であるかどうかを判定する。判定の結果が真である場合はステップＳ３２０に進み、偽である場合はステップＳ２７０に戻る。
ステップＳ３２０：全てのノードをたどったかどうかを判定する。判定の結果が真である場合はステップＳ３３０に進み、偽である場合はステップＳ２４０に戻る。
ステップＳ３３０：Ｇ、Ｔｒ、Ｍ、Ｔに基づいてノード集合Ｕを生成する。
ステップＳ３４０：ノード集合Ｓにノード集合Ｕを加える。
【００５７】
図８は、本発明の一実施形態に係る、異なるモジュール内でのノード抽出のフロー図である。図８に示すフロー図は、例えば図５に示した異なるモジュールを含む実行時間付きコールグラフ１０４から、本発明に係る関数選択方法を用いてノードを抽出するために用い得る。
【００５８】
一実施形態において、図８に示す異なるモジュール内でのノード抽出の諸段階は、次の動作を含む。
ステップＳ４１０：ノード集合Ｓを空集合とする。
ステップＳ４２０：Ｔｒのノード直下のノードで、Ｍに属さないノードの集合Ｓｎを求める。
ステップＳ４３０：Ｔｒのノードから呼ばれる、Ｍ以外のモジュールの集合Ｓｍを求める。
ステップＳ４４０：Ｔｒのノードから呼ばれ、かつ、Ｓｍ中のモジュールに属し、その子孫がそのノードの属するモジュール以外に属するノードを全てＳに追加する。
ステップＳ４５０：Ｓｎ中のノードのうち、Ｓのノードが属するモジュールのいずれにも属さないものについて、Ｓｎ中のいずれのノードからも呼び出されないノードを全てＳに追加する。
ステップＳ４６０：Ｓ中の全てのノードの親ノードの集合Ｓｐを求める。
ステップＳ４７０：ノード集合Ｕを空集合とする。
ステップＳ４８０：Ｓｐからノードｐを１個取り出す。
ステップＳ４９０：全てのノードを取り出したかどうかを判定する。判定の結果が真である場合はステップＳ５００に進み、偽である場合はステップＳ５４０に進む。
ステップＳ５００：ｐの子ノードの集合Ｃ−ｃｈｉｌｄ（ｐ）を求める。
ステップＳ５１０：ノードｐの時間にＴを乗じて、ｐ以下に要する時間の閾値Ｔｐを求める。
ステップＳ５２０：Ｃに含まれるＳとＵ中の全ノードの時間との総和ｔを求める。
ステップＳ５３０：ｔ≧ＴｐになるまでＣ中のノードｃを時間の大きい順に取り出し、ｃをＵに追加し、ｃの時間をｔに加算する。このステップの後にはステップＳ４８０に戻る。
ステップＳ５４０：ＳにＵを追加する。
ステップＳ５５０：Ｕに属する全てのノードＮｓについて、Ｇ、Ｎｓ、Ｔに基づくノード集合Ｖを生成し、ＶをＳに追加する。
【００５９】
［関数選択装置のハードウェア構成］
図９は、本実施形態に係る、関数選択方法の実施装置のハードウェア構成を例示する図である。図９においては、関数選択装置を情報処理装置１０００とし、そのハードウェア構成を例示する。以下は、コンピュータを典型とする情報処理装置として全般的な構成を説明するが、その環境に応じて必要最小限な構成を選択できることはいうまでもない。
【００６０】
情報処理装置１０００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１０、バスライン１００５、通信Ｉ／Ｆ１０４０、メインメモリ１０５０、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）１０６０、パラレルポート１０８０、ＵＳＢポート１０９０、グラフィック・コントローラ１０２０、ＶＲＡＭ１０２４、音声プロセッサ１０３０、Ｉ／Ｏコントローラ１０７０、ならびにキーボード及びマウス・アダプタ１１００等の入力手段を備える。Ｉ／Ｏコントローラ１０７０には、フレキシブル・ディスク（ＦＤ）ドライブ１０７２、ハードディスク１０７４、光ディスク・ドライブ１０７６、半導体メモリ１０７８等の記憶手段を接続することができる。
【００６１】
音声プロセッサ１０３０には、マイクロホン１０３６、増幅回路１０３２、及びスピーカ１０３４が接続される。また、グラフィック・コントローラ１０２０には、表示装置１０２２が接続されている。
【００６２】
ＢＩＯＳ１０６０は、情報処理装置１０００の起動時にＣＰＵ１０１０が実行するブートプログラムや、情報処理装置１０００のハードウェアに依存するプログラム等を格納する。ＦＤ（フレキシブル・ディスク）ドライブ１０７２は、フレキシブル・ディスク１０７１からプログラム又はデータを読み取り、Ｉ／Ｏコントローラ１０７０を介してメインメモリ１０５０又はハードディスク１０７４に提供する。図９には、情報処理装置１０００の内部にハードディスク１０７４が含まれる例を示したが、バスライン１００５又はＩ／Ｏコントローラ１０７０に外部機器接続用インタフェース（図示せず）を接続し、情報処理装置１０００の外部にハードディスクを接続又は増設してもよい。
【００６３】
光ディスク・ドライブ１０７６としては、例えば、ＤＶＤ−ＲＯＭドライブ、ＣＤ−ＲＯＭドライブ、ＤＶＤ−ＲＡＭドライブ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）−ＲＯＭドライブ等を使用することができる。この際は各ドライブに対応した光ディスク１０７７を使用する必要がある。光ディスク・ドライブ１０７６は光ディスク１０７７からプログラム又はデータを読み取り、Ｉ／Ｏコントローラ１０７０を介してメインメモリ１０５０又はハードディスク１０７４に提供することもできる。
【００６４】
情報処理装置１０００に提供されるコンピュータ・プログラムは、フレキシブル・ディスク１０７１、光ディスク１０７７、又はメモリーカード等の記録媒体に格納されて利用者によって提供される。このコンピュータ・プログラムは、Ｉ／Ｏコントローラ１０７０を介して、記録媒体から読み出され、又は通信Ｉ／Ｆ１０４０を介してダウンロードされることによって、情報処理装置１０００にインストールされ実行される。コンピュータ・プログラムが情報処理装置に働きかけて行わせる動作は、既に説明した装置における動作と同一であるので省略する。
【００６５】
前述のコンピュータ・プログラムは、外部の記憶媒体に格納されてもよい。記憶媒体としてはフレキシブル・ディスク１０７１、光ディスク１０７７、又はメモリーカードの他に、ＭＤ等の光磁気記録媒体、テープ媒体を用いることができる。また、専用通信回線やインターネットに接続されたサーバシステムに設けたハードディスク又は光ディスク・ライブラリ等の記憶装置を記録媒体として使用し、通信回線を介してコンピュータ・プログラムを情報処理装置１０００に提供してもよい。
【００６６】
以上の例は、情報処理装置１０００について主に説明したが、コンピュータに、情報処理装置で説明した機能を有するプログラムをインストールして、そのコンピュータを情報処理装置として動作させることにより上記で説明した情報処理装置と同様な機能を実現することができる。
【００６７】
本装置は、ハードウェア、ソフトウェア、又はハードウェア及びソフトウェアの組み合わせとして実現可能である。ハードウェアとソフトウェアの組み合わせによる実施では、所定のプログラムを有するコンピュータ・システムでの実施が典型的な例として挙げられる。係る場合、該所定のプログラムが該コンピュータ・システムにロードされ実行されることにより、該プログラムは、コンピュータ・システムに本発明に係る処理を実行させる。このプログラムは、任意の言語、コード、又は表記によって表現可能な命令群から構成される。そのような命令群は、システムが特定の機能を直接実行すること、又は（１）他の言語、コード、もしくは表記への変換、（２）他の媒体への複製、のいずれか一方もしくは双方が行われた後に、実行することを可能にするものである。もちろん、本発明は、そのようなプログラム自体のみならず、プログラムを記録した媒体を含むプログラム製品もその範囲に含むものである。本発明の機能を実行するためのプログラムは、フレキシブル・ディスク、ＭＯ、ＣＤ−ＲＯＭ、ＤＶＤ、ハードディスク装置、ＲＯＭ、ＲＡＭ、フラッシュメモリ等の任意のコンピュータ可読媒体に格納することができる。係るプログラムは、コンピュータ可読媒体への格納のために、通信回線で接続する他のコンピュータ・システムからダウンロードしたり、他の媒体から複製したりすることができる。また、係るプログラムは、圧縮し、又は複数に分割して、単一又は複数の記録媒体に格納することもできる。
【００６８】
以上、本発明を実施形態に則して説明したが、本発明は上述した実施形態に限るものではない。また、本発明の実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本発明の実施形態又は実施例に記載されたものに限定されるものではない。
【符号の説明】
【００６９】
１００、１０２  実行時間付きコールグラフ
１０３  モジュールを含む実行時間付きコールグラフ
１０４  異なるモジュールを含む実行時間付きコールグラフ
１０５  選択されたノードの情報を含む実行時間付きコールグラフ
１１０  根ノード
１２０〜１５６  ノード
１８１〜１８５  第１層、第２層、第３層、第４層、第５層
２０１〜２０４  モジュール
【図１】
2010198133.tif 000006
【図２】
2010198133.tif 000007
【図３】
2010198133.tif 000008
【図４】
2010198133.tif 000009
【図５】
2010198133.tif 000010
【図６】
2010198133.tif 000011
【図７】
2010198133.tif 000012
【図８】
2010198133.tif 000013
【図９】
2010198133.tif 000014