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

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

3.0.0のリリース版に追従

File size: 6.2 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2015,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 544 2016-01-16 05:34:11Z 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
74/*
75 * アラームハンドラ
76 */
77void alarm_handler(intptr_t exinf)
78{
79 /*
80 * アラームハンドラは実行されないはず
81 */
82 syslog_1(LOG_NOTICE, "alarm handler %d executed.", exinf);
83}
84
85/*
86 * 計測用のアラームハンドラのリスト
87 */
88static ID alarm1_list[30] = {
89 ALM1, ALM2, ALM3, ALM4, ALM5, ALM6, ALM7, ALM8, ALM9, ALM10,
90 ALM11, ALM12, ALM13, ALM14, ALM15, ALM16, ALM17, ALM18, ALM19, ALM20,
91 ALM21, ALM22, ALM23, ALM24, ALM25, ALM26, ALM27, ALM28, ALM29, ALM30
92};
93
94static ID alarm2_list[30] = {
95 ALM31, ALM32, ALM33, ALM34, ALM35, ALM36, ALM37, ALM38, ALM39, ALM40,
96 ALM41, ALM42, ALM43, ALM44, ALM45, ALM46, ALM47, ALM48, ALM49, ALM50,
97 ALM51, ALM52, ALM53, ALM54, ALM55, ALM56, ALM57, ALM58, ALM59, ALM60
98};
99
100static ID alarm3_list[30] = {
101 ALM61, ALM62, ALM63, ALM64, ALM65, ALM66, ALM67, ALM68, ALM69, ALM70,
102 ALM71, ALM72, ALM73, ALM74, ALM75, ALM76, ALM77, ALM78, ALM79, ALM80,
103 ALM81, ALM82, ALM83, ALM84, ALM85, ALM86, ALM87, ALM88, ALM89, ALM90
104};
105
106/*
107 * メインタスク
108 */
109void main_task(intptr_t exinf)
110{
111 uint_t i, j;
112
113 syslog_0(LOG_NOTICE, "Performance evaluation program (5)");
114 init_hist(1);
115 init_hist(2);
116 init_hist(3);
117 init_hist(4);
118 init_hist(5);
119 init_hist(6);
120
121 /*
122 * 繰り返し計測
123 */
124 for (j = 0; j < NO_MEASURE / 10; j++) {
125 /*
126 * アラームハンドラ0短い時間で動作開始
127 *
128 * 性能評価中に高分解能タイマが再設定されるのを避けるため.
129 */
130 sta_alm(ALM0, ALM_RELTIM0);
131
132 /*
133 * 30個のアラームハンドラを長い時間で動作開始
134 */
135 begin_measure(1);
136 for (i = 0; i < 30; i++) {
137 sta_alm(alarm1_list[i], ALM_RELTIM1);
138 }
139 end_measure(1);
140
141 /*
142 * 30個のアラームハンドラを中間の時間で動作開始
143 */
144 begin_measure(2);
145 for (i = 0; i < 30; i++) {
146 sta_alm(alarm2_list[i], ALM_RELTIM2);
147 }
148 end_measure(2);
149
150 /*
151 * 30個のアラームハンドラを短い時間で動作開始
152 */
153 begin_measure(3);
154 for (i = 0; i < 30; i++) {
155 sta_alm(alarm3_list[i], ALM_RELTIM3);
156 }
157 end_measure(3);
158
159 /*
160 * 短い時間で動作開始した30個のアラームハンドラを動作停止
161 */
162 begin_measure(6);
163 for (i = 0; i < 30; i++) {
164 stp_alm(alarm3_list[i]);
165 }
166 end_measure(6);
167
168 /*
169 * 中間の時間で動作開始した30個のアラームハンドラを動作停止
170 */
171 begin_measure(5);
172 for (i = 0; i < 30; i++) {
173 stp_alm(alarm2_list[29 - i]); /* 逆順で動作停止 */
174 }
175 end_measure(5);
176
177 /*
178 * 長い時間で動作開始した30個のアラームハンドラを動作停止
179 */
180 begin_measure(4);
181 for (i = 0; i < 30; i++) {
182 stp_alm(alarm1_list[29 - i]); /* 逆順で動作停止 */
183 }
184 end_measure(4);
185 }
186
187 /*
188 * 測定結果の出力
189 */
190 syslog_0(LOG_NOTICE, "Execution times of 30 short sta_alm");
191 print_hist(1);
192
193 syslog_0(LOG_NOTICE, "Execution times of 30 medium sta_alm");
194 print_hist(2);
195
196 syslog_0(LOG_NOTICE, "Execution times of 30 long sta_alm");
197 print_hist(3);
198
199 syslog_0(LOG_NOTICE, "Execution times of 30 short stp_alm");
200 print_hist(4);
201
202 syslog_0(LOG_NOTICE, "Execution times of 30 medium stp_alm");
203 print_hist(5);
204
205 syslog_0(LOG_NOTICE, "Execution times of 30 long stp_alm");
206 print_hist(6);
207 check_finish(0);
208}
Note: See TracBrowser for help on using the repository browser.