========================================================================== TOPPERSカーネル性能評価プログラム Last Modified: 2012 May 02 09:11:11 ========================================================================== ○目的 本プログラム目的は,各種のTOPPERSカーネルの性能評価を行うことである. ○ファイル ./README.txt ./asp ./perf : ASP用の性能評価プログラム ./perf.cfg ./perf.h ./perf.c ./patch : FMP用のパッチ ./fmp ./perf : FMP用の性能評価プログラム ./perf.cfg ./perf.h ./perf.c ./patch : fmp用のパッチ ./hrp2 ./perf : HRP2用の性能評価プログラム ./perf.cfg ./perf.h ./perf.c ○方針 ・可能な限り依存部の変更で計測可能とする. ・計測はパフォーマンスカウンタで行う.パフォーマンスカウンタは, プロセッサ付属のパフォーマンスカウンタであっても, プロセッサ外部のタイマでもよい.精度はnsecを推奨. ・1個の計測プログラムで行う. ○計測項目 [FMP]はFMPカーネルのみ該当する [HRP2]はHRPカーネルのみ該当する ・起動時間 ・起動時からsta_kerまで. ・target_mprc_initialize()の実行時間 [FMP] ・target_initialize()の実行時間. ・オブジェクト初期化の時間 ・初期化ルーチン実行から最初のタスクの実行まで. ・act_tsk()の実行時間 ・ディスパッチなし ・ディスパッチあり ・ディスパッチあり(他コア)[FMP] ・ディスパッチあり(ユーザードメイン間)[HRP2] ・ディスパッチあり(異なるユーザードメイン間)[HRP2] ・割り込み応答時間 ・タイマー割り込みが入ってから,割込みハンドラが実行されるまでの時間. ○マクロ ・計測時には以下のマクロを有効とする. ・TOPPERS_ENA_PERF ○依存部で用意する関数 以下の型及び関数を xxx_kernel.h に定義する. ・PERFCNT : 性能計測用のカウンタのデータ型 ・void x_init_pcc(void) : パフォーマンスカウンタの初期化 ・void x_get_pcc(PERFCNT *p_count) : パフォーマンスカウンタの読み込み ・void x_rst_pcc(void) : パフォーマンスカウンタのリセット ・ulont_t x_cnv_usec(PERFCNT *p_count) : パフォーマンスカウンタ値からnsecへの変換 FMPカーネルでは,コアをまだいた計測を行うため,上記のパフォーマンスカウンタは全コアから アクセス可能な物を用いること. また,ヒストグラムライブラリ用のマクロを定義する. #define HIST_GET_TIME(p_time) ((void) x_get_pcc(p_time)); #define HIST_CONV_TIM(time) (x_cnv_usec(time)) #define HIST_BM_HOOK() ((void) x_rst_pcc()) ○依存部の変更箇所 ・性能評価時以外は影響を及ぼさないように,TOPPERS_ENA_PERF が有効な場合のみ, 有効なようにifdefを入れることを推奨する. ●起動時間計測 ASP 1.起動直後のパフォーマンスカウンタの初期化とリセット ・スタートアップルーチンの先頭ないし,hardware_init_hook で実施する. 2.target_initialize()もしくは相当処理の先頭で,パフォーマンスカウンタのカウント値を 取得してperf_boot_time[0]に保存してカウント値をリセットする 3.target_initialize()もしくは相当処理の終端で,パフォーマンスカウンタのカウント値を 取得してperf_boot_time[1]に保存してカウント値をリセットする FMP FMPでは,1,2の間に,target_mprc_initialize()の先頭の時間を計測する. 計測はそれぞれマスタプロセッサで実施する. 1.起動直後のパフォーマンスカウンタの初期化とリセット 2.target_mprc_initialize()の先頭でのパフォーマンスカウンタのカウント値を 取得してperf_boot_time[0]に保存してカウント値をリセットする 3.target_initialize()もしくは相当処理の先頭で,パフォーマンスカウンタのカウント値を 取得してperf_boot_time[1]に保存してカウント値をリセットする 4.target_initialize()もしくは相当処理の終端で,パフォーマンスカウンタのカウント値を 取得してperf_boot_time[2]に保存してカウント値をリセットする ●割込み応答時間計測 ASP ・システムティックの割込みハンドラの先頭で perf_int_latency() を呼び出す. FMP ・上記をマスタプロセッサのみから呼び出す. ○ビルド用のMakefile ・CDEFS -DTOPPERS_ENA_PERF を追加する. ・APPL_COBJS histogram.o test_lib.o を追加する. ○ARM依存部のみの定義 ・TOPPERS_ARM_PCC_DIV64 : パフォーマンスカウンタを64分周で駆動 以上.