source: asp3_wo_tecs/trunk/test/perf5.c@ 302

Last change on this file since 302 was 302, checked in by ertl-honda, 7 years ago

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 6.7 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2016 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者
9は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再é…
12å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再é…
18å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
19å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
20 * 者
21マニュアルなど)に,上記の著作権表示,この利用条件および下記
22 * の無保証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再é…
25å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
26 * と.
27 * (a) 再é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
29マニュアルなど)に,上記の著
30 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
31 * (b) 再é…
32å¸ƒã®å½¢æ…
33‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
34 * 報告すること.
35 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
36 * 害からも,上記著作権者
37およびTOPPERSプロジェクトをå…
38è²¬ã™ã‚‹ã“と.
39 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
40 * 由に基づく請求からも,上記著作権者
41およびTOPPERSプロジェクトを
42 * å…
43è²¬ã™ã‚‹ã“と.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46お
47 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
48 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
49 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
50 * の責任を負わない.
51 *
52 * $Id: perf5.c 506 2016-01-12 01:46:49Z ertl-hiro $
53 */
54
55/*
56 * カーネル性能評価プログラム(5)
57 *
58 * タイムイベント処理にかかる時間を計測するプログラム.
59 */
60
61#include <kernel.h>
62#include <t_syslog.h>
63#include "syssvc/syslog.h"
64#include "syssvc/test_svc.h"
65#include "syssvc/histogram.h"
66#include "kernel_cfg.h"
67#include "perf5.h"
68
69/*
70 * 計測回数と実行時間分布を記録する最大時間
71 */
72#define NO_MEASURE 10000U /* 計測回数 */
73#define MAX_TIME 1000U /* 実行時間分布を記録する最大時間 */
74
75/*
76 * 実行時間分布を記録するメモリ領域
77 */
78static uint_t histarea1[MAX_TIME + 1];
79static uint_t histarea2[MAX_TIME + 1];
80static uint_t histarea3[MAX_TIME + 1];
81static uint_t histarea4[MAX_TIME + 1];
82static uint_t histarea5[MAX_TIME + 1];
83static uint_t histarea6[MAX_TIME + 1];
84
85/*
86 * アラームハンドラ
87 */
88void alarm_handler(intptr_t exinf)
89{
90 /*
91 * アラームハンドラは実行されないはず
92 */
93 syslog_1(LOG_NOTICE, "alarm handler %d executed.", exinf);
94}
95
96/*
97 * 計測用のアラームハンドラのリスト
98 */
99static ID alarm1_list[30] = {
100 ALM1, ALM2, ALM3, ALM4, ALM5, ALM6, ALM7, ALM8, ALM9, ALM10,
101 ALM11, ALM12, ALM13, ALM14, ALM15, ALM16, ALM17, ALM18, ALM19, ALM20,
102 ALM21, ALM22, ALM23, ALM24, ALM25, ALM26, ALM27, ALM28, ALM29, ALM30
103};
104
105static ID alarm2_list[30] = {
106 ALM31, ALM32, ALM33, ALM34, ALM35, ALM36, ALM37, ALM38, ALM39, ALM40,
107 ALM41, ALM42, ALM43, ALM44, ALM45, ALM46, ALM47, ALM48, ALM49, ALM50,
108 ALM51, ALM52, ALM53, ALM54, ALM55, ALM56, ALM57, ALM58, ALM59, ALM60
109};
110
111static ID alarm3_list[30] = {
112 ALM61, ALM62, ALM63, ALM64, ALM65, ALM66, ALM67, ALM68, ALM69, ALM70,
113 ALM71, ALM72, ALM73, ALM74, ALM75, ALM76, ALM77, ALM78, ALM79, ALM80,
114 ALM81, ALM82, ALM83, ALM84, ALM85, ALM86, ALM87, ALM88, ALM89, ALM90
115};
116
117/*
118 * メインタスク
119 */
120void main_task(intptr_t exinf)
121{
122 uint_t i, j;
123
124 syslog_0(LOG_NOTICE, "Performance evaluation program (5)");
125 init_hist(1, MAX_TIME, histarea1);
126 init_hist(2, MAX_TIME, histarea2);
127 init_hist(3, MAX_TIME, histarea3);
128 init_hist(4, MAX_TIME, histarea4);
129 init_hist(5, MAX_TIME, histarea5);
130 init_hist(6, MAX_TIME, histarea6);
131
132 /*
133 * 繰り返し計測
134 */
135 for (j = 0; j < NO_MEASURE / 10; j++) {
136 /*
137 * アラームハンドラ0短い時間で動作開始
138 *
139 * 性能評価中に高分解能タイマが再設定されるのを避けるため.
140 */
141 sta_alm(ALM0, ALM_RELTIM0);
142
143 /*
144 * 30個のアラームハンドラを長い時間で動作開始
145 */
146 begin_measure(1);
147 for (i = 0; i < 30; i++) {
148 sta_alm(alarm1_list[i], ALM_RELTIM1);
149 }
150 end_measure(1);
151
152 /*
153 * 30個のアラームハンドラを中間の時間で動作開始
154 */
155 begin_measure(2);
156 for (i = 0; i < 30; i++) {
157 sta_alm(alarm2_list[i], ALM_RELTIM2);
158 }
159 end_measure(2);
160
161 /*
162 * 30個のアラームハンドラを短い時間で動作開始
163 */
164 begin_measure(3);
165 for (i = 0; i < 30; i++) {
166 sta_alm(alarm3_list[i], ALM_RELTIM3);
167 }
168 end_measure(3);
169
170 /*
171 * 短い時間で動作開始した30個のアラームハンドラを動作停止
172 */
173 begin_measure(6);
174 for (i = 0; i < 30; i++) {
175 stp_alm(alarm3_list[i]);
176 }
177 end_measure(6);
178
179 /*
180 * 中間の時間で動作開始した30個のアラームハンドラを動作停止
181 */
182 begin_measure(5);
183 for (i = 0; i < 30; i++) {
184 stp_alm(alarm2_list[29 - i]); /* 逆順で動作停止 */
185 }
186 end_measure(5);
187
188 /*
189 * 長い時間で動作開始した30個のアラームハンドラを動作停止
190 */
191 begin_measure(4);
192 for (i = 0; i < 30; i++) {
193 stp_alm(alarm1_list[29 - i]); /* 逆順で動作停止 */
194 }
195 end_measure(4);
196 }
197
198 /*
199 * 測定結果の出力
200 */
201 syslog_0(LOG_NOTICE, "Execution times of 30 short sta_alm");
202 print_hist(1);
203
204 syslog_0(LOG_NOTICE, "Execution times of 30 medium sta_alm");
205 print_hist(2);
206
207 syslog_0(LOG_NOTICE, "Execution times of 30 long sta_alm");
208 print_hist(3);
209
210 syslog_0(LOG_NOTICE, "Execution times of 30 short stp_alm");
211 print_hist(4);
212
213 syslog_0(LOG_NOTICE, "Execution times of 30 medium stp_alm");
214 print_hist(5);
215
216 syslog_0(LOG_NOTICE, "Execution times of 30 long stp_alm");
217 print_hist(6);
218 check_finish(0);
219}
Note: See TracBrowser for help on using the repository browser.