実行割合の統計的解析手法
前回の例ではブレーク・ポイントを設定して,mainルーチンの処理を1回実行した場合を解析範囲にしましたが,今度はトレース・メモリに収まる範囲で,解析対象の部分を何回も実行し,統計的に実行割合を出す方法を説明します。
解析対象は,以下に示すとおりfunc1とfunc2の実行割合とします。
以下に示すようにmainルーチン内のブレーク・ポイントを解除して,解析対象を絞るために,トレースの取得区間をfunc1とfunc2の実行区間だけにします。
下図のようにデバッグ・ツールのプロパティで「トレース・メモリ・サイズ」を「12K」に設定,Mainルーチン内のブレーク・ポイントを解除し,トレースの開始点と終了点を設定してください。 |
func1とfunc2がトレース取得期間になります。 |
トレースの開始点と終了点を設定した際のイメージを以下に示します。
トレース取得期間の設定が完了しましたので,CPUリセットして,実行してください。
下図のようにメニューの「リセット&実行ボタン」を押してください。 |
プログラム実行がトレース・メモリを使い切ったことによって ブレークし,解析グラフに結果が表示されます。 |
解析グラフを見てください。プログラムの想定はfunc1aの実行割合がfunc2aの約2倍になることです。しかし,func1aの実行割合がfunc2aの約3倍程度となっています。
func1aの実行割合がfunc2aの約3倍程度になったのは,以下に示すように2回目のfunc1の実行が完了しているのに対して,func2の実行が途中,もしくは実行されていないと考えられます。これによってfunc1aの実行割合が増えたように見えています。
このように,解析対象に対して,トレース取得期間と実行回数が十分でない場合,解析結果を正しく判断できないことがあります。そのため,CS+では解析対象の関数が何回実行されているか,関数一覧パネルで把握することができます。以下に示すように関数一覧パネルを開いてください。
[関数一覧・パネル]ボタンをクリックして,関数一覧パネルを開き, [実行時間(割合)]でソート表示してください。 また,関数名が見えるように,関数名の列を固定表示します。 |
関数一覧パネルで,関数名の列が固定表示になり, 関数の実行回数が見やすく表示されました。 |
func1は2回実行されていますが,func2は1回しか実行されていません。統計的に信頼できる結果を得ているか判断するため,関数一覧パネルで実行回数を把握してください。
次にトレース・メモリ・サイズを増やして解析を行います。以下に示すとおり,トレース・メモリ・サイズを増やして実行してみてください。
下図のようにデバッグ・ツールのプロパティで「トレース・メモリ・サイズ」を「256K」に設定してメニューの「リセット&実行ボタン」を押してください。 |
トレース・メモリ・サイズを増やしたことで,func1とfunc2の実行回数が増え,統計的に信頼性の高い結果が得られました。 |
関数一覧パネルを見てください。今度はfunc1とfunc2の実行回数が約30回程度となり,実行割合もプログラムの想定と近くなりました。
トレース・メモリ・サイズを増やした場合の解析における概念図を以下に示します。
性能解析は解析対象に応じて,適切な手段を選択する必要があります。解析グラフは,便利なツールですが使用方法を誤ると適切な判断ができません。
統計的な判断を必要とする場合は,トレース・メモリ・サイズによって信頼できる結果を得られるかどうか決まってきます。