(57)【特許請求の範囲】
【請求項１】
単体のプログラムと複数のプログラムとのいずれかである実行対象の少なくとも１回の実行に対して生成された、時間の経過と、負荷として設定されている負荷量との対応を示す負荷情報を取得し、前記負荷量が限界状態で継続する期間を示すボトルネック期間を、前記負荷情報を用いて計算するボトルネック期間計算部と、
前記負荷情報の生成の元になる前記実行の後に実行される前記実行対象の実行中に、前記ボトルネック期間に実行される関数を、トレース機能を用いて記録する記録スケジューラーと
を備え、
前記ボトルネック期間計算部は、
前記負荷情報を連続する３つ以上の複数の時間帯に分割し、時間的に連続する３つの時間帯において中央の時間帯の両隣の２つの時間帯である第１の時間帯と第２の時間帯とのそれぞれの負荷平均値に基づき、前記ボトルネック期間を計算するボトルネック検出装置。
【請求項２】
前記負荷情報は、前記実行対象の１回の実行に対して生成されており、
前記ボトルネック期間計算部は、
前記負荷情報から、前記ボトルネック期間を計算する請求項１に記載のボトルネック検出装置。
【請求項３】
前記ボトルネック期間計算部は、
前記実行対象の複数回の実行ごとに生成された複数の負荷情報を取得し、前記複数の負荷情報から、前記複数の負荷情報のそれぞれに近似する近似情報を生成し、前記近似情報から、前記ボトルネック期間を計算する請求項２に記載のボトルネック検出装置。
【請求項４】
前記ボトルネック期間計算部は、
前記実行対象の複数回の実行ごとに生成された複数の負荷情報を取得し、前記複数の負荷情報ごとに前記ボトルネック期間を計算し、複数の前記ボトルネック期間を用いて、新たなボトルネック期間を生成し、
前記記録スケジューラーは、
前記負荷情報の生成の元になる前記実行の後に実行される前記実行対象の実行中に、前記新たなボトルネック期間に実行される関数を、トレース機能を用いて記録する請求項１に記載のボトルネック検出装置。
【請求項５】
コンピュータに、
単体のプログラムと複数のプログラムとのいずれかである実行対象の少なくとも１回の実行に対して生成された、時間の経過と、負荷として設定されている負荷量との対応を示す負荷情報を取得し、前記負荷量が限界状態で継続する期間を示すボトルネック期間を、前記負荷情報を用いて計算し、前記負荷情報を連続する３つ以上の複数の時間帯に分割し、時間的に連続する３つの時間帯において中央の時間帯の両隣の２つの時間帯である第１の時間帯と第２の時間帯とのそれぞれの負荷平均値に基づき、前記ボトルネック期間を計算する期間計算処理と、
前記負荷情報の生成の元になる前記実行の後に実行される前記実行対象の実行中に、前記ボトルネック期間に実行される関数を、トレース機能を用いて記録するスケジュール処理と
を実行させるボトルネック検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラムの実行で発生する性能のボトルネックを検出する、ボトルネック検出装置及びボトルネック検出プログラムに関する。
【背景技術】
【０００２】
特許文献１は、１回目のプログラムの実行でボトルネックの要因となる単一メソッドを特定し、そのメソッドを修正あるいはトレースオプション付きでリビルドする。そして、２回目のプログラムの実行で、特定したメソッドのトレース結果が記録される。特許文献１には、これら一連処理を自動化する方法が、開示されている。【０００３】
特許文献１の場合、特定されたメソッドに対するプログラムの修正、リビルド、またはアプリケーションのパラメータ設定が必要であるため、一連処理が自動化されたとしても、プログラムにおける性能ボトルネックの発見から性能ボトルネックの要因特定までに時間がかかる。また、特許文献１の場合、複数のメソッドにまたがる処理に対するボトルネックの特定が、困難である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−１４０９２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、プログラムにおける性能ボトルネックの発見から性能ボトルネックの要因特定までを迅速に処理できるボトルネック検出装置の提供を目的とする。
【課題を解決するための手段】
【０００６】
この発明のボトルネック検出装置は、
単体のプログラムと複数のプログラムとのいずれかである実行対象の少なくとも１回の実行に対して生成された、時間の経過と、負荷として設定されている負荷量との対応を示す負荷情報を取得し、前記負荷量が限界状態で継続する期間を示すボトルネック期間を、前記負荷情報を用いて計算する期間計算部と、
前記負荷情報の生成の元になる前記実行の後に実行される前記実行対象の実行中に、前記ボトルネック期間に実行される関数を、トレース機能を用いて記録する記録スケジューラーと
を備える。
【発明の効果】
【０００７】
本発明により、プログラムにおける性能ボトルネックの発見から性能ボトルネックの要因特定までを迅速に処理できるボトルネック検出装置を提供できる。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１の図で、ボトルネック検出システム１００１の構成図。
【図２】実施の形態１の図で、ボトルネック期間Ｔｂを模式的に示す図。
【図３】実施の形態１の図で、ターゲット機器２０の動作の概要を示すフローチャート。
【図４】実施の形態１の図で、ターゲット機器２０の動作を示す別のフローチャート。
【図５】実施の形態１の図で、性能データ３１１及び性能グラフを示す図。
【図６】実施の形態１の図で、ボトルネック期間Ｔｂを示す図。
【図７】実施の形態１の図で、ボトルネック期間計算部２２による、ボトルネック期間Ｔｂの計算方法を示す図。
【図８】実施の形態１の図で、実行関数トレースデータ３３１を示す図。
【図９】実施の形態１の図で、実行関数トレースデータ３３１が生成されるまでの過程を示す図。
【図１０】実施の形態２の図で、実施の形態２のボトルネック検出システム１００２の構成図。
【図１１】実施の形態３の図で、実施の形態３のボトルネック検出システム１００３の構成図。
【図１２】実施の形態３の図で、実施の形態３のターゲット機器２０の動作の概要を示すフローチャートである。
【図１３】実施の形態３の図で、ターゲット機器２０の動作の詳細を示すフローチャート。
【図１４】実施の形態４の図で、ターゲット機器２０の動作概要を示すフローチャート。
【図１５】実施の形態４の図で、ＯＲ方式を説明する図。
【図１６】実施の形態５の図で、ボトルネック検出装置１００のハードウェア構成を示す図。
【図１７】実施の形態５の図で、ボトルネック検出装置１００のハードウェア構成を示す別の図。
【図１８】実施の形態５の図で、ボトルネック検出装置１００の機能がハードウェアで実現されることを示す図。
【発明を実施するための形態】
【０００９】
以下、本発明の実施の形態について、図を用いて説明する。なお、各図中、同一または相当する部分には、同一符号を付している。実施の形態の説明において、同一または相当する部分については、説明を適宜省略または簡略化する。
【００１０】
実施の形態１．
図１から図９を参照して、実施の形態１のボトルネック検出システム１００１を説明する。
図１は、ボトルネック検出システム１００１の構成を示す。ボトルネック検出システム１００１は、ホストコンピュータ１０と、ターゲット機器２０とを備える。ボトルネック検出システム１００１は、コンピュータの性能ボトルネックを検出する。より具体的には、性能ボトルネックの要因となる関数を、プログラムのリビルド及び修正をすることなく検出する。
【００１１】
ここで性能ボトルネックとは、プロセッサの負荷またはＩ／Ｏスループットのようなシステム負荷が、コンピュータの性能限界に近い状態で、一定期間継続する状態である。性能ボトルネックは、以下、ボトルネックと表記する。以下ではプロセッサの負荷として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））負荷を例としている。ホストコンピュータ１０は、ターゲット機器２０を試験する。
ホストコンピュータ１０は、ターゲット機器２０の有するプログラム１、２、３、・・・ｍを自動的に実行することによって、プログラム１、２、３、・・・ｍのボトルネックを検出する。図１にプログラム１、２、３、・・・ｍを示している。プログラム１は、図示はしていないが、関数１１、関数１２・・・関数１ｎを有する。プログラム２は、図示はしていないが、関数２１、関数２２・・・関数２ｎを有する。プログラムｍは、関数ｍ１、関数ｍ２・・・関数ｍｎを有する。
【００１２】
以下の説明では実行対象という用語が登場する。実行対象は、単体のプログラムと複数のプログラムとのいずれかである。実行対象が単体のプログラムの場合は、例えば図１のプログラム１が実行対象である。実行対象が複数のプログラムの場合は、例えば図１のプログラム１からプログラムｍが実行対象である。
実行対象は複数回実行されるが、実行対象が単体のプログラムであれば同一の単体のプログラムが複数回実行される。図１のプログラム１が単体のプログラムとしての実行対象である場合、プログラム１が複数回実行される。単体のプログラム１の複数回の実行では、１回目に実行した関数の実行順序を２回目以降の実行でも、同じ順序で実行する。
実行対象が複数のプログラムであれば、同一の複数のプログラムが複数回、実行される。図１のプログラム１からプログラムｍのｍ個が複数のプログラムとしての実行対象である場合、プログラム１からプログラムｍが複数回、実行される。プログラム１、２、３、・・・ｍの１回目の実行、２回目の実行・・・のような場合は、具体的には以下のようである。１回目の実行、２回目の実行．．．における実行は、１回目に実行した複数のプログラム１、２、３、・・・ｍの実行順序、及び各プログラムを構成する関数の実行順序を、２回目以降の実行も、同じ順序で実行する。
【００１３】
＊＊＊構成の説明＊＊＊
ホストコンピュータ１０は、プログラム実行モジュール１１及び出力モジュール１２を備えている。
【００１４】
（１）プログラム実行モジュール１１は、事前に設定したルールに従い、ターゲット機器２００を対象として、単体のプログラムと複数のプログラムとのいずれかである実行対象を自動的に実行する。
プログラム実行モジュール１１は、ＣＩ（Ｃｏｎｔｉｎｕｏｕｓ  Ｉｎｔｅｇｒａｔｉｏｎ）ツールが相当する。なお、ターゲット機器２０で実行対象を実行するのはターゲット機器２０のプロセッサである。プログラム実行モジュール１１は、性能値記録モジュール２１及びボトルネック期間計算部２２の機能をオン、オフする。プログラム実行モジュール１１は、実行関数記録スケジューラー２４を実行する。プログラム実行モジュール１１は、実行対象を実行する。
実行関数記録スケジューラー２４は、記録スケジューラーである。
（２）トレース出力モジュール１２は、実行対象のボトルネックの要因になる関数のトレース結果を出力する。
【００１５】
ターゲット機器２０は、性能値記録モジュール２１、ボトルネック期間計算部２２、実行関数記録モジュール２３、実行関数記録スケジューラー２４、第１記憶部３１、第２記憶部３２、第３記憶部３３及び第４記憶部３４を備えている。
【００１６】
（１）性能値記録モジュール２１は、ＣＰＵ使用率またはＩ／Ｏウェイトのような、機器全体の性能負荷の状態を性能データ３１１として時系列で記録する。性能データ３１１は、例えばＣＰＵ使用率の性能ログである。性能値記録モジュール２１は、性能データ３１１から性能グラフを生成する。図１に示すように、性能値記録モジュール２１は、性能データ３１１ともに第１記憶部３１に性能グラフを格納する。（２）ボトルネック期間計算部２２は、性能値記録モジュール２１が記録した性能データを基に生成した性能グラフから、ボトルネックが発生している箇所を特定し、ボトルネックの開始時刻Ｔｓからボトルネックの終了時刻Ｔｅまでのボトルネック期間Ｔｂを算出する。
図２は、ボトルネック期間Ｔｂを模式的に示す。図２において、開始時刻Ｔｓからボトルネックの終了時刻Ｔｅまでがボトルネック期間Ｔｂである。ボトルネック期間Ｔｂの計算方法は後述する。
（３）実行関数記録モジュール２３は、記録スケジューラーである実行関数記録スケジューラー２４によって機能がオン状態にされている時には、実行された関数を、時系列に記録する。
（４）実行関数記録スケジューラー２４は、実行関数記録モジュール２３の機能をオンにして、実行関数記録モジュール２３に、ボトルネック期間Ｔｂに実行される関数を、時系列で記録させる。
実行関数記録スケジューラー２４は実行される関数の記録タイミングを制御するスケジューラーである。
（５）第１記憶部３１は、性能値記録モジュール２１の出力する複数の性能データ３１１を格納する。
（６）第２記憶部３２は、ボトルネック期間計算部２２の出力するボトルネック期間Ｔｂを格納する。
（７）第３記憶部３３は、実行関数記録モジュール２３の記録した、実行関数トレースデータ３３１を格納する。
（８）第４記憶部３４は、プログラム実行モジュール１１によって実行される、複数のプログラムを格納する。図１では、プログラムｍが、関数ｍ１、ｍ２、・・・ｍｎを有することを示している。ボトルネック期間Ｔｂに関数ｍ１と関数ｍ２とが実行された場合、実行関数記録モジュール２３によって、関数ｍ１と関数ｍ２の実行が、時刻と共に記録される。
【００１７】
＊＊＊動作の説明＊＊＊
＜ターゲット機器２０の動作の概要＞
図３は、実施の形態１のターゲット機器２０の動作の概要を示すフローチャートである。図３の括弧内は動作の主体を示す。ターゲット機器２０の動作は、関数記録方法に相当する。また、ターゲット機器２０の動作は、ボトルネック検出プログラムの処理に相当する。
【００１８】
実施の形態１では、ボトルネック期間計算部２２は、単体のプログラムと複数のプログラムとのいずれかである実行対象の少なくとも１回の実行に対して生成された、時間の経過と、負荷として設定されている負荷量との対応を示す負荷情報を取得する。負荷情報は性能グラフである。なお性能データも負荷情報である。ボトルネック期間計算部２２は、負荷量が限界状態で継続する期間を示すボトルネック期間を、負荷情報を用いて計算する。
【００１９】
継続的インテグレーション及びバッチスクリプトが繰り返し実行可能な環境下において、ターゲット機器２０、ステップＳ１０１からからステップＳ１０３を自動的に実行する。
【００２０】
ステップＳ１０１において、性能値記録モジュール２１は、１回目の実行対象の実行によって、ＣＰＵ使用率またはメモリ使用量またはＩ／Ｏスループット性能のような負荷グラフである性能グラフを生成する。
【００２１】
ステップＳ１０２において、ボトルネック期間計算部２２は、性能グラフにおけるボトルネック期間Ｔｂを計算する。
【００２２】
ステップＳ１０３において、実行関数記録スケジューラー２４は、２回目の実行対象の実行で、ステップＳ１０２によって得られたボトルネック期間Ｔｂで実行関数記録モジュール２３のトレース機能をオンにし、実行関数記録モジュール２３を用いてトレースログを記録する。実行関数記録スケジューラー２４は、ボトルネック期間Ｔｂが終了すれば、実行関数記録モジュール２３のトレース機能をオフにする。これにより、実行関数記録スケジューラー２４は、ボトルネック期間Ｔｂ以外では、実行関数記録モジュール２３を用いたトレースログの記録は実行しない。実行関数記録スケジューラー２４は、実行関数記録モジュール２３を用いて、トレースログからボトルネック期間Ｔｂに実行された関数を抽出し、実行関数トレースデータ３３１を生成する。
【００２３】
実施の形態１では、負荷情報は、単体のプログラムと複数のプログラムとのいずれかである実行対象の１回の実行に対して生成され、ボトルネック期間計算部２２は、この負荷情報から、ボトルネック期間を計算する。
【００２４】
上記のステップＳ１０１からステップＳ１０３の特徴は以下のようである。
（１）トレースの対象となる実行対象にトレース機能を設定するのではなく、トレース機能である実行関数記録モジュール２３のＯＮ、ＯＦＦを切り替えることによって、トレースログの記録容量を小さくする。
（２）ターゲット機器２０は、１回目の実行では、トレースログの記録期間として、ボトルネック期間Ｔｂを決定する。
（３）ターゲット機器２０は、２回目の実行では、ボトルネック期間Ｔｂに到達した際に、トレース機能である実行関数記録モジュール２３をＯＮにして、トレースログを記録する。ボトルネック期間Ｔｂが経過すると、実行関数記録スケジューラー２４が実行関数記録モジュール２３をオフにする。
【００２５】
図４は、ボトルネック検出装置１００であるターゲット機器２０の動作を示すフローチャートである。図４を参照してターゲット機器２０の動作を説明する。
【００２６】
＜ステップＳ１１＞
ステップＳ１１において、１回目の実行対象の実行で、性能値記録モジュール２１が、性能データを取得し、性能データ３１１をグラフ化して、性能グラフを生成する。
図５は、性能データ３１１及び性能グラフを示す。左の性能グラフの枠の範囲が、右の性能データに対応する。性能データ３１１は、ＣＰＵ負荷またはＩＯスループットのような負荷値を示す負荷情報が、時系列で記録されたデータである。負荷値は０％から１００％の範囲とする。負荷値は、原則、システム全体の値とする。時刻は、起動あるいは特定のアプリケーション実行からの、経過時刻とする。絶対時刻（現実の時計時刻）と区別するため、相対時刻と呼ぶ。図５の右に示す性能データ３１１はテキストの生データである。図５では、相対時刻１２：０２：２１．１００に、ＣＰＵ負荷率が１０％のように示している。性能グラフは、横軸が相対時刻、縦軸が負荷値である。図１の第１記憶部３１には性能データ３１１を示しているが、第１記憶部３１には性能グラフも格納されている。
【００２７】
＜ステップＳ１２＞
ステップＳ１２において、ボトルネック期間計算部２２が、性能グラフからボトルネック期間Ｔｂを計算する。性能グラフは性能データが形式的にグラフ化されているに過ぎず、性能グラフは性能データである。
図６は、ボトルネック期間Ｔｂを示す。ボトルネック期間Ｔｂは、ボトルネックが発生した開始時刻Ｔｓと終了時刻Ｔｅで表される。ボトルネック期間計算部２２は、複数のボトルネック期間Ｔｂを計算することも可能である。図６は、複数のボトルネック期間Ｔｂを示している。ＩＤ（ｉｄｅｎｔｉｆｉｃａｔｉｏｎ）によって、ボトルネック期間Ｔｂが区別される。ＩＤはオプションである。ＩＤ＝１は１回目のボトルネック期間Ｔｂを示し、ＩＤ＝２は２回目のボトルネック期間Ｔｂを示す。
【００２８】
図７は、ボトルネック期間計算部２２による、ボトルネック期間Ｔｂの計算方法を示す。以下にボトルネック期間Ｔｂの計算方法を示す。ボトルネック期間計算部２２は、負荷情報である性能データ３１１から生成した性能グラフを、連続する３つ以上の複数の時間帯に分割する。ボトルネック期間計算部２２は、時間的に連続する３つの時間帯において中央の時間帯の両隣の２つの時間帯である第１の時間帯と第２の時間帯とのそれぞれの負荷平均値に基づき、ボトルネック期間Ｔｂを計算する。
具体的には以下のようである。
【００２９】
図７ではボトルネック期間計算部２２は以下の処理を行う。図７では性能グラフとして、ＣＰＵ使用率を用いている。
【００３０】
＜ステップＳ５１＞
図７に示すステップＳ５１において、ボトルネック期間計算部２２は、ターゲット機器２０の性能グラフの時間帯を大まかに分割し、連続する３つの時間帯の中央の時間帯の両隣の時間帯の平均負荷値を計算する。図７では、ボトルネック期間計算部２２は、範囲４１の平均負荷値［Ｘ−１］及び範囲４３の平均負荷値［Ｘ＋１］を計算する。そして、ボトルネック期間計算部２２は、平均負荷値［Ｘ＋１］と平均負荷値［Ｘ−１］との差の絶対値を、式１のように、平均負荷値変化量Ｘとして計算する。
平均負荷値変化量Ｘ＝｜［Ｘ＋１］−［Ｘ−１］｜      （式１）
【００３１】
＜ステップＳ５２＞
ステップＳ５２において、複数の平均負荷値変化量Ｘのうち、ボトルネック期間計算部２２は、最大の平均負荷値変化量Ｘを、式２から抽出する。
Ｍａｘ［平均負荷値変化量Ｘ：｜平均負荷値［ｘ＋１］−平均負荷値［ｘ−１］｜］          （式２）
式２は、複数の平均負荷値変化量Ｘのうち、最大の平均負荷値変化量Ｘを示している。平均変化量Ｘの右側の式は、平均負荷値変化量Ｘが式１で計算されることを示している。
【００３２】
＜ステップＳ５３＞
ステップＳ５３において、ボトルネック期間計算部２２は、時間の範囲をさらに細分化して時間帯を分割し、ステップＳ５１の式１、ステップＳ５２の式２を計算する。
【００３３】
以上を再帰的に実行し、最終的にボトルネック期間Ｔｂを特定する（ステップＳ５４）。
【００３４】
範囲４４は、一時的な負荷の盛り上がりであり、ボトルネック期間Ｔｂからは除去すべき箇所である。範囲４２は、負荷が上昇し、貼り付きが発生している。範囲４２は、ボトルネックの可能性あり、範囲４２をさらに細分化し、ボトルネック期間として計算することが好ましい。
上記のステップＳ５１からステップＳ５４により、範囲４４をボトルネック期間Ｔｂから除去し、範囲４５をボトルネック期間Ｔｂとして計算することができる。
【００３５】
ステップＳ１３において、ターゲット機器２０は、プログラム実行モジュール１１からの指示で、実行対象の２回目の実行を行う。
【００３６】
ステップＳ１４において、記録スケジューラーである実行関数記録スケジューラー２４は、負荷情報の生成元の元になる実行の後に実行される実行対象の実行中に、ボトルネック期間Ｔｂに実行される関数を、トレース機能を用いて記録する。実行関数記録モジュール２３はトレース機能である。
具体的には以下のようである。実行関数記録スケジューラー２４は、現在の実行時刻を定期的に取得する。
ステップＳ１５において、実行関数記録スケジューラー２４は、ボトルネック期間Ｔｂかどうかを判定する。つまり、実行関数記録スケジューラー２４は、ボトルネック期間Ｔｂの開始時刻Ｔｓになったかを判定する。
【００３７】
開始時刻Ｔｓになった場合（ステップＳ１５でＹＥＳ）、実行関数記録スケジューラー２４は、実行関数記録モジュール２３の機能をオンにする。実行関数記録モジュール２３は、関数の実行を、実行関数トレースデータ３３１として記録する（ステップＳ１６）。
また、ステップＳ１５において、実行関数記録スケジューラー２４は、ボトルネック期間Ｔｂの終了時刻Ｔｅになったかを判定する。終了時刻Ｔｅになった場合（ステップＳ１５でＮＯ）、実行関数記録スケジューラー２４は、実行関数記録モジュール２３の機能をオフにする。
これにより、実行関数記録モジュール２３は、ボトルネック期間Ｔｂが終了する終了時刻Ｔｅまで関数の実行の記録を継続し、ボトルネック期間Ｔｂの終了と共に停止する。
図８は、実行関数トレースデータ３３１を示す。実行関数トレースデータ３３１は、アプリケーション及びシステムを構成する関数の実行の開始時刻と、関数の実行状態との組を記録したデータある。例えば、相対時刻１２：０２：２１．１００では、関数ＦｕｎｃＡ（）の実行状態がＳｔａｒｔであり、相対時刻１２：０２：２１．１５０では、関数ＦｕｎｃＡ（）の実行状態が、Ｅｎｄである。実行関数記録スケジューラー２４によって実行関数記録モジュール２３がＯＮの状態の場合、実行関数記録モジュール２３は、関数の実行を記録する。ＯＦＦの場合は実行関数記録モジュール２３は関数の実行を記録しない。ユーザは、ホストコンピュータ１０の出力モジュール１２を介して、実行関数トレースデータ３３１を閲覧可能である。なお、ボトルネック期間Ｔｂに対応して、実行関数記録スケジューラー２４が実行関数記録モジュール２３をオン、オフすることによって、実行関数の記録開始及び実行関数の記録停止をすることが特徴である。
【００３８】
図９は、実行関数トレースデータ３３１が生成されるまでの過程を示す。
（１）まず、性能データ３１１が、性能値記録モジュール２１によって生成される。
（２）次に、ボトルネック期間Ｔｂが、ボトルネック期間計算部２２によって生成される。
（３）実行関数記録スケジューラー２４は、ボトルネック期間Ｔｂの開始時刻Ｔｓになると実行関数記録モジュール２３の機能をオフからオンにし、ボトルネック期間Ｔｂの終了時刻Ｔｅになると実行関数記録モジュール２３の機能をオフにする。ボトルネック期間Ｔｂ以外では、実行関数記録モジュール２３がオフである。実行関数記録モジュール２３は、ボトルネック期間Ｔｂにおける関数の実行状態を、実行関数トレースデータ３３１として記録する。
【００３９】
＊＊＊実施の形態１の効果＊＊＊
実施の形態１のターゲット機器２０によれば、実行対象を修正またはリビルドする必要がないので、実行関数記録スケジューラー２４が実行関数記録モジュール２３を用いて行う、トレースログ記録（ステップＳ１６）の記録時間を短くできる。
また、ターゲット機器２０の実行対象を書き換える必要がないため、ターゲット機器２０の実行対象の実行時間に与える影響が従来に比べ小さく、ビルドに時間がかかる組込機器に対しては効果的である。
また、ボトルネック期間Ｔｂにのみ、実行関数記録モジュール２３はトレースログを生成するので、従来に比べ、ログ記録容量を小さくできる。
【００４０】
実施の形態２．
図１０は、実施の形態２のボトルネック検出システム１００２の構成図である。図１０を参照して実施の形態２のボトルネック検出システム１００２を説明する。ボトルネック検出システム１００２は、ボトルネック期間Ｔｂで実行関数のトレースログを記録する点では、実施の形態１のボトルネック検出システム１００１と同じである。ボトルネック検出システム１００２のボトルネック検出システム１００１との相違点は、ボトルネック期間計算部２２、実行関数記録スケジューラー２４及びボトルネック期間を格納する第２記憶部３２が、ホストコンピュータ１０に配置されている点である。ボトルネック検出システム１００２では、ホストコンピュータ１０がボトルネック検出装置１００である。
【００４１】
＊＊＊実施の形態２の効果＊＊＊
ボトルネック期間計算部２２および実行関数記録スケジューラー２４が、ホストコンピュータ１０に配置されることにより、ターゲット機器２０のソフトウェア構成を変更することなく、ボトルネック要因の関数を特定できる。
【００４２】
実施の形態３．
図１１、図１２、図１３を参照して実施の形態３のボトルネック検出システム１００３を説明する。
図１１は、実施の形態３のボトルネック検出システム１００３の構成図である。
ボトルネック検出システム１００３では、ターゲット機器２０のボトルネック期間計算部２２が、近似グラフ作成部２２ａを有する。
図１２は、実施の形態３のターゲット機器２０の動作の概要を示すフローチャートである。
図１３は、実施の形態３のターゲット機器２０の動作の詳細を示すフローチャートである。ボトルネック検出システム１００３では、ターゲット機器２０がボトルネック検出装置１００である。
【００４３】
図１２を参照してターゲット機器２０の動作概要を説明する。実施の形態３では、ボトルネック期間計算部２２は、単体のプログラムと複数のプログラムとのいずれかである実行対象の複数回の実行ごとに生成された複数の負荷情報を取得する。ボトルネック期間計算部２２は取得した複数の負荷情報から、複数の負荷情報のそれぞれに近似する近似情報を生成し、近似情報から、ボトルネック期間を計算する。実施の形態３では、ボトルネック期間計算部２２は、実行対象の２回の実行ごとに生成された２つの負荷情報を取得するが、これは例示であり３つ以上の負荷情報を取得しても良い。以下に具体的に説明する。
【００４４】
ボトルネック検出システムでは、実行対象の１回目の実行の性能データ３１１と、実行対象の２回目の実行の性能データとの相違が大きい場合も有り得る。そこで、実施の形態３では、合計３回の実行によって、ボトルネック要因の関数を抽出する。
（１）ステップＳ３０１において、１回目の実行対象の実行で、性能値記録モジュール２１が、第１の性能グラフを生成する。
（２）ステップＳ３０２において、２回目の実行対象の実行で、性能値記録モジュール２１が、第２の性能グラフを生成する。
（３）近似グラフ作成部２２ａは、第１の性能グラフと第２の性能グラフの近似度ＡＰを０から１．０の範囲で計測する。ＡＰ＝０は不一致であり、ＡＰ＝１．０は完全一致である。また、閾値はＡＰ＝０．７とする。ステップＳ３０３において、近似グラフ作成部２２ａは、近似度ＡＰが閾値以上の場合に、二つのグラフの近似グラフを生成する。近似グラフは、近似情報である。
（４）ステップＳ３０４において、ボトルネック期間計算部２２は、近似グラフに対して、ボトルネック期間Ｔｂを計算する。
（５）ステップＳ３０５において、実行関数記録スケジューラー２４は、３回目の実行対象の実行で、ステップＳ３０４で計算したボトルネック期間Ｔｂにおいて、トレースログを生成する。
【００４５】
図１３を参照してターゲット機器２０の動作の詳細を説明する。
ステップＳ３１において、性能値記録モジュール２１が、１回目の実行対象の実行で、第１の性能グラフを生成する。
ステップＳ３２において、ボトルネック期間計算部２２が、第１の性能グラフにボトルネック期間Ｔｂが存在するかどうか判定する。ボトルネック期間Ｔｂが存在する場合、処理は、ステップＳ３３に進む。
ステップＳ３３において、性能値記録モジュール２１が、２回目の実行対象の実行で、第２の性能グラフを生成する。
ステップＳ３４において、ボトルネック期間計算部２２が、第２の性能グラフにボトルネック期間Ｔｂが存在するかどうか判定する。ボトルネック期間Ｔｂが存在する場合、処理は、ステップＳ３５に進む。
【００４６】
ステップＳ３５において、近似グラフ作成部２２ａが、第１のグラフと第２のグラフの近似度ＡＰを求める。
ステップＳ３６において、近似グラフ作成部２２ａが、近似度ＡＰが閾値０．７以上かどうかを判定する。近似度ＡＰが閾値０．７以上であれば、処理は、ステップＳ３７に進む。
ステップＳ３７において、近似グラフ作成部２２ａが、第１のグラフと第２のグラフとの、近似グラフを生成する。
ステップＳ３８において、ボトルネック期間計算部２２が、近似グラフから
ボトルネック期間Ｔｂを計算する。
ステップＳ３９において、実行関数記録スケジューラー２４が実行関数記録モジュール２３を用いて、３回目の実行対象の実行で、ボトルネック期間Ｔｂに実行される関数を記録する。
【００４７】
＊＊＊実施の形態３の効果＊＊＊
実施の形態３によれば、第１の性能グラフと第２の性能グラフとの相違が考慮されるので、ボトルネックが発生している可能性の高いボトルネック期間Ｔｂを得ることができる。
【００４８】
実施の形態４．
図１４、図１５を参照して実施の形態３のボトルネック検出システム１００４を説明する。ボトルネック検出システム１００３のシステム構成は、ボトルネック検出システム１００１と同じであるので図は省略する。
図１４は、ボトルネック検出システム１００４のターゲット機器２０の動作概要を示すフローチャートである。
図１５は、後述のＯＲ方式を説明する図である。ターゲット機器２０はボトルネック検出装置１００である。図１４を参照してターゲット機器２０の動作を説明する。
【００４９】
実施の形態４では、ボトルネック期間計算部２２は、単体のプログラムと複数のプログラムとのいずれかである実行対象の複数回の実行ごとに生成された複数の負荷情報を取得する。複数の負荷情報は、複数の性能グラフである。ボトルネック期間計算部２２は、複数の負荷情報ごとにボトルネック期間Ｔｂを計算し、複数の前記ボトルネック期間を用いて、新たなボトルネック期間を生成する。実行関数記録スケジューラー２４は、負荷情報の生成の元になる実行の後に実行される実行対象の実行中に、新たなボトルネック期間Ｔｂに実行される関数を、トレース機能である実行関数記録モジュール２３を用いて記録する。
具体的には以下のようである。
【００５０】
（１）ステップＳ４０１において、１回目の実行対象の実行で、性能値記録モジュール２１が、第１の性能グラフを生成する。
（２）ステップＳ４０２において、ボトルネック期間計算部２２が、第１の性能グラフから第１のボトルネック期間Ｔｂ１を計算する。
（３）ステップＳ４０３において、２回目の実行対象の実行で、性能値記録モジュール２１が、第２の性能グラフを生成する。
（４）ステップＳ４０４において、ボトルネック期間計算部２２が、第２の性能グラフから第２のボトルネック期間Ｔｂ２を計算する。
（５）ステップＳ４０５において、ボトルネック期間計算部２２が、第１のボトルネック期間Ｔｂ１と、第２のボトルネック期間Ｔｂ２とから、新たなボトルネック期間Ｔｂ３を計算する。ボトルネック期間Ｔｂを補正する点では実施の形態３と同様である。
実施の形態４では、ボトルネック期間Ｔｂの開始時刻Ｔｓと終了時刻Ｔｅとを、第１のボトルネック期間Ｔｂ１と第２のボトルネック期間Ｔｂ２とのＯＲ（最も早い開始時刻Ｔｓから最も遅い終了時刻Ｔｅ）を取ることで補正する。図１５ではＯＲによって得られたボトルネック期間Ｔｂ３は、第１のボトルネック期間Ｔｂ１の開始時刻Ｔｓ１と、第２のボトルネック期間Ｔｂ２の終了時刻Ｔｅ２とを持つ。
あるいは、第１のボトルネック期間Ｔｂ１と第２のボトルネック期間Ｔｂ２とのＡＮＤ（第１のボトルネック期間Ｔｂ１と第２のボトルネック期間Ｔｂ２との重複期間）を、新たなボトルネック期間Ｔｂ３として生成してもよい。
（６）ステップＳ４０６において、実行関数記録スケジューラー２４は、３回目の実行対象の実行で、ステップＳ４０５で計算した新たなボトルネック期間Ｔｂ３において、関数のトレースログを生成する。
【００５１】
＊＊＊実施の形態４の効果＊＊＊
ボトルネック期間どうしのＯＲを取ることで、トレースログの記録サイズは増えるものの、実行関数の取りこぼしを防ぐことができる。
また、ボトルネック期間どうしのＡＮＤを取ることで、ボトルネックに大きく影響する関数を抽出できる。
【００５２】
（１）実行関数記録モジュール２３の起動に伴う遅延を考慮し、ボトルネック期間Ｔｂの開始時刻Ｔｓよりも一定時間△Ｔだけ前の時刻を、開始時刻Ｔｓとして設定しても構わない。
（２）性能値記録モジュール２１による性能データ３１１の記録開始は、実行対象の起動直後から記録しても構わない。
しかし、操作または通信受信のような外部イベント、あるいは、特定の関数の実行開始時刻を、記録開始の契機としてもよい。
（３）ＪｅｎｋｉｎｓのようなＣＩツールによる各部及び各モジュールの実行を想定している。しかし、各フローチャートの処理が自動実行できれば、その限りではない。例えば、ターゲット機器２０にバッチファイルまたはスクリプトファイルを組み込んでおき、自動でフローチャートの流れを実行できれば、ＣＩツールなしの構成でも構わない。
【００５３】
実施の形態５
実施の形態５は、実施の形態１から実施の形態４で説明したボトルネック検出装置１００のハードウェア構成を説明する。実施の形態２ではボトルネック検出装置１００はホストコンピュータ１０である。実施の形態１、３，４ではボトルネック検出装置１００はターゲット機器２０である。
図１６は、ボトルネック検出装置１００である図１及び図１１のターゲット機器２０のハードウェア構成を示す。
図１、図１１のターゲット機器２０では、性能値記録モジュール２１、ボトルネック期間計算部２２、実行関数記録モジュール２３及び実行関数記録スケジューラー２４は、ボトルネック検出装置１００のプロセッサ１１０がボトルネック検出プログラム１０１を実行することで実現される。図１、図１１のターゲット機器２０では、第１記憶部３１から第５記憶部３５は、ボトルネック検出装置１００の主記憶装置１２０または補助記憶装置１３０に相当する。
【００５４】
ボトルネック検出装置１００は、コンピュータである。ボトルネック検出装置１００は、プロセッサ１１０を備えるとともに、主記憶装置１２０、補助記憶装置１３０、入力ＩＦ１４０、出力ＩＦ１５０及び通信ＩＦ１６０といった他のハードウェアを備える。なおＩＦはインタフェースを示す。プロセッサ１１０は、信号線１７０を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００５５】
ボトルネック検出装置１００は、機能要素として、性能値記録モジュール２１、ボトルネック期間計算部２２、実行関数記録モジュール２３及び実行関数記録スケジューラー２４を備える。性能値記録モジュール２１、ボトルネック期間計算部２２、実行関数記録モジュール２３及び実行関数記録スケジューラー２４の機能は、ボトルネック検出プログラム１０１により実現される。
図１６に示すように、ボトルネック検出プログラム１０１は、性能値記録モジュール２１、ボトルネック期間計算部２２、実行関数記録モジュール２３及び実行関数記録スケジューラー２４に対応する、性能値記録プログラム、ボトルネック期間計算プログラム、実行関数記録プログラム及び実行関数記録スケジューラープログラムから構成される。
【００５６】
プロセッサ１１０は、ボトルネック検出プログラム１０１を実行する装置である。ボトルネック検出プログラム１０１は、性能値記録モジュール２１、ボトルネック期間計算部２２、実行関数記録モジュール２３及び実行関数記録スケジューラー２４の機能を実現するプログラムである。プロセッサ１１０は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ１１０の具体例は、ＣＰＵ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００５７】
主記憶装置１２０の具体例は、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。主記憶装置１２０は、プロセッサ１１０の演算結果を保持する。
【００５８】
補助記憶装置１３０は、データを不揮発的に保管する記憶装置である。補助記憶装置１３０は、ボトルネック検出プログラム１０１、ボトルネック期間Ｔｂ及びプログラム１，２，３，．．．ｍを格納している。補助記憶装置１３０の具体例は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。また、補助記憶装置１３０は、ＳＤ（登録商標）（Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記録媒体であってもよい。補助記憶装置１３０は、ボトルネック期間Ｔｂを記憶している。
【００５９】
入力ＩＦ４０は、マウスあるいはキーボーのような入力装置が接続され、各装置からデータが入力されるポートである。
出力ＩＦ５０は、各種機器が接続され、各種機器にプロセッサ１１０によりデータが出力されるポートである。
通信ＩＦ６０はプロセッサ１１０が他の装置と通信するための通信ポートである。
他の装置としては、ホストコンピュータ１０である。
【００６０】
プロセッサ１１０は補助記憶装置１３０からボトルネック検出プログラム１０１を主記憶装置１２０にロードし、主記憶装置２０１からボトルネック検出プログラム１０１を読み込み実行する。主記憶装置１２０には、ボトルネック検出プログラム１０１及びボトルネック期間Ｔｂの他に、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）も記憶されている。プロセッサ１１０は、ＯＳを実行しながら、ボトルネック検出プログラム１０１を実行する。
ボトルネック検出装置１００は、プロセッサ１１０を代替する複数のプロセッサを備えていてもよい。これら複数のプロセッサは、ボトルネック検出プログラム１０１の実行を分担する。それぞれのプロセッサは、プロセッサ１１０と同じように、ボトルネック検出プログラム１０１を実行する装置である。ボトルネック検出プログラム１０１により利用、処理または出力されるデータ、情報、信号値及び変数値は、主記憶装置１２０、補助記憶装置１３０、または、プロセッサ１１０内のレジスタあるいはキャッシュメモリに記憶される。
【００６１】
ボトルネック検出プログラム１０１は、ボトルネック期間計算部２２及び実行関数記録スケジューラー２４の「部」を「処理」、「手順」あるいは「工程」に読み替えた各処理、各手順あるいは各工程をコンピュータに実行させるプログラムである。
【００６２】
また、ボトルネック検出方法は、コンピュータであるボトルネック検出装置１００がボトルネック検出プログラム１０１を実行することにより行われる方法である。ボトルネック検出プログラム１０１は、コンピュータ読取可能な記録媒体に格納されて提供されてもよいし、プログラムプロダクトとして提供されてもよい。
【００６３】
図１７は、ボトルネック検出装置１００である図１０のホストコンピュータ１０のハードウェア構成を示す。
図１０のホストコンピュータ１０では、ボトルネック期間計算部２２及び実行関数記録スケジューラー２４は、ボトルネック検出装置１００のプロセッサ１１０がボトルネック検出プログラム１０１ａを実行することで実現される。
ボトルネック検出プログラム１０１ａは、ボトルネック期間計算部２２及び実行関数記録スケジューラー２４に対応する、ボトルネック期間計算プログラム及び実行関数記録スケジューラープログラムから構成される。
補助記憶装置１３０には、ボトルネック検出プログラム１０１ａ及びボトルネック期間１０１ａが記憶されている。
【００６４】
＜ハードウェア構成の補足＞
図１６及び図１８のボトルネック検出装置１００では、ボトルネック検出装置１００の機能がソフトウェアで実現されるが、ボトルネック検出装置１００の機能がハードウェアで実現されてもよい。
図１８は、ボトルネック検出装置１００の機能がハードウェアで実現される構成を示す。図１８の電子回路９０は、プロセッサ１１０、主記憶装置１２０、補助記憶装置１３０、入力ＩＦ１４０、出力ＩＦ１５０及び通信ＩＦ１６０の機能を実現する専用の電子回路である。電子回路９０は、信号線９１に接続している。電子回路９０は、具体的には、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、または、ＦＰＧＡである。ＧＡは、Ｇａｔｅ  Ａｒｒａｙの略語である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略語である。ＦＰＧＡは、Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略語である。ボトルネック検出装置１００の構成要素の機能は、１つの電子回路で実現されてもよいし、複数の電子回路に分散して実現されてもよい。また、ボトルネック検出装置１００の構成要素の一部の機能が電子回路で実現され、残りの機能がソフトウェアで実現されてもよい。
【００６５】
プロセッサ１１０と電子回路９０の各々は、プロセッシングサーキットリとも呼ばれる。ボトルネック検出装置１００において、ボトルネック期間計算部２２、実行関数記録スケジューラー２４のような機能がプロセッシングサーキットリにより実現されてもよい。あるいは、ボトルネック期間計算部２２、実行関数記録スケジューラー２４のような機能、主記憶装置１２０、補助記憶装置１３０、入力ＩＦ１４０、出力ＩＦ１５０及び通信ＩＦ１６０の機能が、プロセッシングサーキットリにより実現されてもよい。
【００６６】
以上、実施の形態１から実施の形態４について説明したが、これら実施の形態のうち、１つを部分的に実施しても構わない。あるいは、複数の実施の形態のうち、２つ以上を部分的に組み合わせて実施しても構わない。なお、本発明は、これら実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００６７】
Ｔｓ  開始時刻、Ｔｅ  終了時刻、Ｔｂ  ボトルネック期間、１０  ホストコンピュータ、１１  プログラム実行モジュール、１２  出力モジュール、２０  ターゲット機器、２１  性能値記録モジュール、２２  ボトルネック期間計算部、２２ａ  近似グラフ作成部、２３  実行関数記録モジュール、２４  実行関数記録スケジューラー、３１  第１記憶部、３２  第２記憶部、３３  第３記憶部、３４  第４記憶部、３５  第５記憶部、４１，４２，４３  範囲、９０  電子回路、９１  信号線、１００  ボトルネック検出装置、１０１  ボトルネック検出プログラム、１１０  プロセッサ、１２０  主記憶装置、１３０  補助記憶装置、１４０  入力ＩＦ、１５０  出力ＩＦ、１６０  通信ＩＦ、１７０  信号線、３１１  性能データ、３３１  実行関数トレースデータ、１００１，１００２，１００３  ボトルネック検出システム。
【図１】
0006918267.tif 000002
【図２】
0006918267.tif 000003
【図３】
0006918267.tif 000004
【図４】
0006918267.tif 000005
【図５】
0006918267.tif 000006
【図６】
0006918267.tif 000007
【図７】
0006918267.tif 000008
【図８】
0006918267.tif 000009
【図９】
0006918267.tif 000010
【図１０】
0006918267.tif 000011
【図１１】
0006918267.tif 000012
【図１２】
0006918267.tif 000013
【図１３】
0006918267.tif 000014
【図１４】
0006918267.tif 000015
【図１５】
0006918267.tif 000016
【図１６】
0006918267.tif 000017
【図１７】
0006918267.tif 000018
【図１８】
0006918267.tif 000019