1 | ==========================================================================
|
---|
2 | TOPPERSカーネル性能評価プログラム
|
---|
3 | Last Modified: 2012 May 02 09:11:11
|
---|
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用のパッチ
|
---|
23 | ./hrp2
|
---|
24 | ./perf : HRP2用の性能評価プログラム
|
---|
25 | ./perf.cfg
|
---|
26 | ./perf.h
|
---|
27 | ./perf.c
|
---|
28 |
|
---|
29 | ○方針
|
---|
30 | ・可能な限り依存部の変更で計測可能とする.
|
---|
31 | ・計測はパフォーマンスカウンタで行う.パフォーマンスカウンタは,
|
---|
32 | プロセッサ付属のパフォーマンスカウンタであっても,
|
---|
33 | プロセッサ外部のタイマでもよい.精度はnsecを推奨.
|
---|
34 | ・1個の計測プログラムで行う.
|
---|
35 |
|
---|
36 |
|
---|
37 | ○計測項目
|
---|
38 | [FMP]はFMPカーネルのみ該当する
|
---|
39 | [HRP2]はHRPカーネルのみ該当する
|
---|
40 |
|
---|
41 | ・起動時間
|
---|
42 | ・起動時からsta_kerまで.
|
---|
43 | ・target_mprc_initialize()の実行時間 [FMP]
|
---|
44 | ・target_initialize()の実行時間.
|
---|
45 | ・オブジェクト初期化の時間
|
---|
46 | ・初期化ルーチン実行から最初のタスクの実行まで.
|
---|
47 |
|
---|
48 | ・act_tsk()の実行時間
|
---|
49 | ・ディスパッチなし
|
---|
50 | ・ディスパッチあり
|
---|
51 | ・ディスパッチあり(他コア)[FMP]
|
---|
52 | ・ディスパッチあり(ユーザードメイン間)[HRP2]
|
---|
53 | ・ディスパッチあり(異なるユーザードメイン間)[HRP2]
|
---|
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 | 以上.
|
---|