[18] | 1 | ==========================================================================
|
---|
| 2 | TOPPERSカーネル性能評価プログラム
|
---|
[19] | 3 | Last Modified: 2012 May 02 09:11:11
|
---|
[18] | 4 | ==========================================================================
|
---|
| 5 | ○目的
|
---|
| 6 |
|
---|
| 7 | 本プログラム目的は,各種のTOPPERSカーネルの性能評価を行うことである.
|
---|
| 8 |
|
---|
| 9 | ○ファイル
|
---|
| 10 | ./README.txt
|
---|
| 11 | ./asp
|
---|
| 12 | ./perf : ASP用の性能評価プログラム
|
---|
| 13 | ./perf.cfg
|
---|
| 14 | ./perf.h
|
---|
| 15 | ./perf.c
|
---|
| 16 | ./patch : FMP用のパッチ
|
---|
| 17 | ./fmp
|
---|
| 18 | ./perf : FMP用の性能評価プログラム
|
---|
| 19 | ./perf.cfg
|
---|
| 20 | ./perf.h
|
---|
| 21 | ./perf.c
|
---|
| 22 | ./patch : fmp用のパッチ
|
---|
[19] | 23 | ./hrp2
|
---|
| 24 | ./perf : HRP2用の性能評価プログラム
|
---|
| 25 | ./perf.cfg
|
---|
| 26 | ./perf.h
|
---|
| 27 | ./perf.c
|
---|
| 28 |
|
---|
[18] | 29 | ○方針
|
---|
| 30 | ・可能な限り依存部の変更で計測可能とする.
|
---|
| 31 | ・計測はパフォーマンスカウンタで行う.パフォーマンスカウンタは,
|
---|
| 32 | プロセッサ付属のパフォーマンスカウンタであっても,
|
---|
| 33 | プロセッサ外部のタイマでもよい.精度はnsecを推奨.
|
---|
| 34 | ・1個の計測プログラムで行う.
|
---|
| 35 |
|
---|
| 36 |
|
---|
| 37 | ○計測項目
|
---|
| 38 | [FMP]はFMPカーネルのみ該当する
|
---|
[19] | 39 | [HRP2]はHRPカーネルのみ該当する
|
---|
| 40 |
|
---|
[18] | 41 | ・起動時間
|
---|
| 42 | ・起動時からsta_kerまで.
|
---|
| 43 | ・target_mprc_initialize()の実行時間 [FMP]
|
---|
| 44 | ・target_initialize()の実行時間.
|
---|
| 45 | ・オブジェクト初期化の時間
|
---|
| 46 | ・初期化ルーチン実行から最初のタスクの実行まで.
|
---|
| 47 |
|
---|
| 48 | ・act_tsk()の実行時間
|
---|
| 49 | ・ディスパッチなし
|
---|
| 50 | ・ディスパッチあり
|
---|
| 51 | ・ディスパッチあり(他コア)[FMP]
|
---|
[19] | 52 | ・ディスパッチあり(ユーザードメイン間)[HRP2]
|
---|
| 53 | ・ディスパッチあり(異なるユーザードメイン間)[HRP2]
|
---|
[18] | 54 |
|
---|
| 55 | ・割り込み応答時間
|
---|
| 56 | ・タイマー割り込みが入ってから,割込みハンドラが実行されるまでの時間.
|
---|
| 57 |
|
---|
| 58 |
|
---|
| 59 | ○マクロ
|
---|
| 60 | ・計測時には以下のマクロを有効とする.
|
---|
| 61 | ・TOPPERS_ENA_PERF
|
---|
| 62 |
|
---|
| 63 |
|
---|
| 64 | ○依存部で用意する関数
|
---|
| 65 | 以下の型及び関数を xxx_kernel.h に定義する.
|
---|
| 66 |
|
---|
| 67 | ・PERFCNT : 性能計測用のカウンタのデータ型
|
---|
| 68 |
|
---|
| 69 | ・void x_init_pcc(void) : パフォーマンスカウンタの初期化
|
---|
| 70 | ・void x_get_pcc(PERFCNT *p_count) : パフォーマンスカウンタの読み込み
|
---|
| 71 | ・void x_rst_pcc(void) : パフォーマンスカウンタのリセット
|
---|
| 72 | ・ulont_t x_cnv_usec(PERFCNT *p_count) : パフォーマンスカウンタ値からnsecへの変換
|
---|
| 73 |
|
---|
| 74 | FMPカーネルでは,コアをまだいた計測を行うため,上記のパフォーマンスカウンタは全コアから
|
---|
| 75 | アクセス可能な物を用いること.
|
---|
| 76 |
|
---|
| 77 | また,ヒストグラムライブラリ用のマクロを定義する.
|
---|
| 78 | #define HIST_GET_TIME(p_time) ((void) x_get_pcc(p_time));
|
---|
| 79 | #define HIST_CONV_TIM(time) (x_cnv_usec(time))
|
---|
| 80 | #define HIST_BM_HOOK() ((void) x_rst_pcc())
|
---|
| 81 |
|
---|
| 82 |
|
---|
| 83 |
|
---|
| 84 | ○依存部の変更箇所
|
---|
| 85 | ・性能評価時以外は影響を及ぼさないように,TOPPERS_ENA_PERF が有効な場合のみ,
|
---|
| 86 | 有効なようにifdefを入れることを推奨する.
|
---|
| 87 |
|
---|
| 88 | ●起動時間計測
|
---|
| 89 |
|
---|
| 90 | ASP
|
---|
| 91 | 1.起動直後のパフォーマンスカウンタの初期化とリセット
|
---|
| 92 | ・スタートアップルーチンの先頭ないし,hardware_init_hook で実施する.
|
---|
| 93 | 2.target_initialize()もしくは相当処理の先頭で,パフォーマンスカウンタのカウント値を
|
---|
| 94 | 取得してperf_boot_time[0]に保存してカウント値をリセットする
|
---|
| 95 | 3.target_initialize()もしくは相当処理の終端で,パフォーマンスカウンタのカウント値を
|
---|
| 96 | 取得してperf_boot_time[1]に保存してカウント値をリセットする
|
---|
| 97 |
|
---|
| 98 | FMP
|
---|
| 99 | FMPでは,1,2の間に,target_mprc_initialize()の先頭の時間を計測する.
|
---|
| 100 | 計測はそれぞれマスタプロセッサで実施する.
|
---|
| 101 |
|
---|
| 102 | 1.起動直後のパフォーマンスカウンタの初期化とリセット
|
---|
| 103 | 2.target_mprc_initialize()の先頭でのパフォーマンスカウンタのカウント値を
|
---|
| 104 | 取得してperf_boot_time[0]に保存してカウント値をリセットする
|
---|
| 105 | 3.target_initialize()もしくは相当処理の先頭で,パフォーマンスカウンタのカウント値を
|
---|
| 106 | 取得してperf_boot_time[1]に保存してカウント値をリセットする
|
---|
| 107 | 4.target_initialize()もしくは相当処理の終端で,パフォーマンスカウンタのカウント値を
|
---|
| 108 | 取得してperf_boot_time[2]に保存してカウント値をリセットする
|
---|
| 109 |
|
---|
| 110 |
|
---|
| 111 | ●割込み応答時間計測
|
---|
| 112 | ASP
|
---|
| 113 | ・システムティックの割込みハンドラの先頭で perf_int_latency() を呼び出す.
|
---|
| 114 |
|
---|
| 115 | FMP
|
---|
| 116 | ・上記をマスタプロセッサのみから呼び出す.
|
---|
| 117 |
|
---|
| 118 |
|
---|
| 119 | ○ビルド用のMakefile
|
---|
| 120 | ・CDEFS
|
---|
| 121 | -DTOPPERS_ENA_PERF を追加する.
|
---|
| 122 | ・APPL_COBJS
|
---|
| 123 | histogram.o test_lib.o を追加する.
|
---|
| 124 |
|
---|
| 125 |
|
---|
| 126 | ○ARM依存部のみの定義
|
---|
| 127 | ・TOPPERS_ARM_PCC_DIV64 : パフォーマンスカウンタを64分周で駆動
|
---|
| 128 |
|
---|
| 129 | 以上.
|
---|