diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-03-15 12:11:32 -0400 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-03-15 12:11:32 -0400 |
commit | 88b8f6f7015c320706ef8a258404e169708a4acf (patch) | |
tree | 430b3eb33b6b08f7b916adf783239b082a74ab59 /include | |
parent | 69de127d6bb76821884abb1c1ce5c1f6a5829ded (diff) |
First container trace iteration
Diffstat (limited to 'include')
-rw-r--r-- | include/litmus/litmus.h | 2 | ||||
-rw-r--r-- | include/litmus/rt_param.h | 1 | ||||
-rw-r--r-- | include/litmus/sched_plugin.h | 5 | ||||
-rw-r--r-- | include/litmus/sched_trace.h | 36 | ||||
-rw-r--r-- | include/trace/events/litmus.h | 163 |
5 files changed, 188 insertions, 19 deletions
diff --git a/include/litmus/litmus.h b/include/litmus/litmus.h index 4322d59c0e8f..d5dbc82f0dfc 100644 --- a/include/litmus/litmus.h +++ b/include/litmus/litmus.h | |||
@@ -44,6 +44,8 @@ void litmus_exit_task(struct task_struct *tsk); | |||
44 | 44 | ||
45 | #define tsk_rt(t) (&(t)->rt_param) | 45 | #define tsk_rt(t) (&(t)->rt_param) |
46 | 46 | ||
47 | #define get_server_job(t) (tsk_rt(t)->job_params.fake_job_no) | ||
48 | |||
47 | /* Realtime utility macros */ | 49 | /* Realtime utility macros */ |
48 | #define get_rt_flags(t) (tsk_rt(t)->flags) | 50 | #define get_rt_flags(t) (tsk_rt(t)->flags) |
49 | #define set_rt_flags(t,f) (tsk_rt(t)->flags=(f)) | 51 | #define set_rt_flags(t,f) (tsk_rt(t)->flags=(f)) |
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index 55419d411614..4293575d3472 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h | |||
@@ -85,6 +85,7 @@ struct rt_job { | |||
85 | 85 | ||
86 | lt_t real_release; | 86 | lt_t real_release; |
87 | lt_t real_deadline; | 87 | lt_t real_deadline; |
88 | unsigned int fake_job_no; | ||
88 | 89 | ||
89 | /* How much service has this job received so far? */ | 90 | /* How much service has this job received so far? */ |
90 | lt_t exec_time; | 91 | lt_t exec_time; |
diff --git a/include/litmus/sched_plugin.h b/include/litmus/sched_plugin.h index 32c23974e45a..0f529fa78b4d 100644 --- a/include/litmus/sched_plugin.h +++ b/include/litmus/sched_plugin.h | |||
@@ -69,6 +69,9 @@ typedef long (*admit_task_t)(struct task_struct* tsk); | |||
69 | 69 | ||
70 | typedef void (*release_at_t)(struct task_struct *t, lt_t start); | 70 | typedef void (*release_at_t)(struct task_struct *t, lt_t start); |
71 | 71 | ||
72 | /* TODO remove me */ | ||
73 | typedef void (*release_ts_t)(lt_t time); | ||
74 | |||
72 | struct sched_plugin { | 75 | struct sched_plugin { |
73 | struct list_head list; | 76 | struct list_head list; |
74 | /* basic info */ | 77 | /* basic info */ |
@@ -95,6 +98,8 @@ struct sched_plugin { | |||
95 | task_block_t task_block; | 98 | task_block_t task_block; |
96 | task_exit_t task_exit; | 99 | task_exit_t task_exit; |
97 | 100 | ||
101 | release_ts_t release_ts; | ||
102 | |||
98 | #ifdef CONFIG_LITMUS_LOCKING | 103 | #ifdef CONFIG_LITMUS_LOCKING |
99 | /* locking protocols */ | 104 | /* locking protocols */ |
100 | allocate_lock_t allocate_lock; | 105 | allocate_lock_t allocate_lock; |
diff --git a/include/litmus/sched_trace.h b/include/litmus/sched_trace.h index 6868a07dac46..368bd3dc3be8 100644 --- a/include/litmus/sched_trace.h +++ b/include/litmus/sched_trace.h | |||
@@ -181,6 +181,13 @@ feather_callback void do_sched_trace_sys_release(unsigned long id, | |||
181 | #define trace_litmus_task_resume(t) | 181 | #define trace_litmus_task_resume(t) |
182 | #define trace_litmus_sys_release(start) | 182 | #define trace_litmus_sys_release(start) |
183 | 183 | ||
184 | #define trace_litmus_container_param(cid, name) | ||
185 | #define trace_litmus_server_param(sid, cid, wcet, time) | ||
186 | #define trace_litmus_server_switch_to(sid, job, tid) | ||
187 | #define trace_litmus_server_switch_away(sid, job, tid) | ||
188 | #define trace_litmus_server_release(sid, job, release, deadline) | ||
189 | #define trace_litmus_server_completion(sid, job) | ||
190 | |||
184 | #endif | 191 | #endif |
185 | 192 | ||
186 | 193 | ||
@@ -258,6 +265,35 @@ feather_callback void do_sched_trace_sys_release(unsigned long id, | |||
258 | sched_trace_log_message("%d P%d [%s@%s:%d]: Took %llu\n\n", \ | 265 | sched_trace_log_message("%d P%d [%s@%s:%d]: Took %llu\n\n", \ |
259 | TRACE_ARGS, litmus_clock() - _qt_start) | 266 | TRACE_ARGS, litmus_clock() - _qt_start) |
260 | 267 | ||
268 | #define sched_trace_container_param(cid, name) \ | ||
269 | do { \ | ||
270 | trace_litmus_container_param(cid, name); \ | ||
271 | } while (0) | ||
272 | |||
273 | #define sched_trace_server_param(sid, cid, wcet, period) \ | ||
274 | do { \ | ||
275 | trace_litmus_server_param(sid, cid, wcet, period); \ | ||
276 | } while(0) | ||
277 | |||
278 | #define sched_trace_server_switch_to(sid, job, tid) \ | ||
279 | do { \ | ||
280 | trace_litmus_server_switch_to(sid, job, tid); \ | ||
281 | } while(0) | ||
282 | |||
283 | #define sched_trace_server_switch_away(sid, job, tid) \ | ||
284 | do { \ | ||
285 | trace_litmus_server_switch_away(sid, job, tid); \ | ||
286 | } while (0) | ||
287 | |||
288 | #define sched_trace_server_release(sid, job, rel, dead) \ | ||
289 | do { \ | ||
290 | trace_litmus_server_release(sid, job, rel, dead); \ | ||
291 | } while (0) | ||
292 | |||
293 | #define sched_trace_server_completion(sid, job) \ | ||
294 | do { \ | ||
295 | trace_litmus_server_completion(sid, job); \ | ||
296 | } while (0) | ||
261 | 297 | ||
262 | #define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */ | 298 | #define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */ |
263 | 299 | ||
diff --git a/include/trace/events/litmus.h b/include/trace/events/litmus.h index 0fffcee02be0..5ca4bef205f0 100644 --- a/include/trace/events/litmus.h +++ b/include/trace/events/litmus.h | |||
@@ -11,10 +11,6 @@ | |||
11 | 11 | ||
12 | #include <litmus/litmus.h> | 12 | #include <litmus/litmus.h> |
13 | #include <litmus/rt_param.h> | 13 | #include <litmus/rt_param.h> |
14 | |||
15 | /* | ||
16 | * Tracing task admission | ||
17 | */ | ||
18 | TRACE_EVENT(litmus_task_param, | 14 | TRACE_EVENT(litmus_task_param, |
19 | 15 | ||
20 | TP_PROTO(struct task_struct *t), | 16 | TP_PROTO(struct task_struct *t), |
@@ -24,9 +20,9 @@ TRACE_EVENT(litmus_task_param, | |||
24 | TP_STRUCT__entry( | 20 | TP_STRUCT__entry( |
25 | __field( pid_t, pid ) | 21 | __field( pid_t, pid ) |
26 | __field( unsigned int, job ) | 22 | __field( unsigned int, job ) |
27 | __field( lt_t, wcet ) | 23 | __field( unsigned long long, wcet ) |
28 | __field( lt_t, period ) | 24 | __field( unsigned long long, period ) |
29 | __field( lt_t, phase ) | 25 | __field( unsigned long long, phase ) |
30 | __field( int, partition ) | 26 | __field( int, partition ) |
31 | ), | 27 | ), |
32 | 28 | ||
@@ -56,8 +52,8 @@ TRACE_EVENT(litmus_task_release, | |||
56 | TP_STRUCT__entry( | 52 | TP_STRUCT__entry( |
57 | __field( pid_t, pid ) | 53 | __field( pid_t, pid ) |
58 | __field( unsigned int, job ) | 54 | __field( unsigned int, job ) |
59 | __field( lt_t, release ) | 55 | __field( unsigned long long, release ) |
60 | __field( lt_t, deadline ) | 56 | __field( unsigned long long, deadline ) |
61 | ), | 57 | ), |
62 | 58 | ||
63 | TP_fast_assign( | 59 | TP_fast_assign( |
@@ -84,8 +80,8 @@ TRACE_EVENT(litmus_switch_to, | |||
84 | TP_STRUCT__entry( | 80 | TP_STRUCT__entry( |
85 | __field( pid_t, pid ) | 81 | __field( pid_t, pid ) |
86 | __field( unsigned int, job ) | 82 | __field( unsigned int, job ) |
87 | __field( lt_t, when ) | 83 | __field( unsigned long long, when ) |
88 | __field( lt_t, exec_time ) | 84 | __field( unsigned long long, exec_time ) |
89 | ), | 85 | ), |
90 | 86 | ||
91 | TP_fast_assign( | 87 | TP_fast_assign( |
@@ -112,8 +108,8 @@ TRACE_EVENT(litmus_switch_away, | |||
112 | TP_STRUCT__entry( | 108 | TP_STRUCT__entry( |
113 | __field( pid_t, pid ) | 109 | __field( pid_t, pid ) |
114 | __field( unsigned int, job ) | 110 | __field( unsigned int, job ) |
115 | __field( lt_t, when ) | 111 | __field( unsigned long long, when ) |
116 | __field( lt_t, exec_time ) | 112 | __field( unsigned long long, exec_time ) |
117 | ), | 113 | ), |
118 | 114 | ||
119 | TP_fast_assign( | 115 | TP_fast_assign( |
@@ -140,7 +136,7 @@ TRACE_EVENT(litmus_task_completion, | |||
140 | TP_STRUCT__entry( | 136 | TP_STRUCT__entry( |
141 | __field( pid_t, pid ) | 137 | __field( pid_t, pid ) |
142 | __field( unsigned int, job ) | 138 | __field( unsigned int, job ) |
143 | __field( lt_t, when ) | 139 | __field( unsigned long long, when ) |
144 | __field( unsigned long, forced ) | 140 | __field( unsigned long, forced ) |
145 | ), | 141 | ), |
146 | 142 | ||
@@ -167,7 +163,7 @@ TRACE_EVENT(litmus_task_block, | |||
167 | 163 | ||
168 | TP_STRUCT__entry( | 164 | TP_STRUCT__entry( |
169 | __field( pid_t, pid ) | 165 | __field( pid_t, pid ) |
170 | __field( lt_t, when ) | 166 | __field( unsigned long long, when ) |
171 | ), | 167 | ), |
172 | 168 | ||
173 | TP_fast_assign( | 169 | TP_fast_assign( |
@@ -190,7 +186,7 @@ TRACE_EVENT(litmus_task_resume, | |||
190 | TP_STRUCT__entry( | 186 | TP_STRUCT__entry( |
191 | __field( pid_t, pid ) | 187 | __field( pid_t, pid ) |
192 | __field( unsigned int, job ) | 188 | __field( unsigned int, job ) |
193 | __field( lt_t, when ) | 189 | __field( unsigned long long, when ) |
194 | ), | 190 | ), |
195 | 191 | ||
196 | TP_fast_assign( | 192 | TP_fast_assign( |
@@ -208,13 +204,13 @@ TRACE_EVENT(litmus_task_resume, | |||
208 | */ | 204 | */ |
209 | TRACE_EVENT(litmus_sys_release, | 205 | TRACE_EVENT(litmus_sys_release, |
210 | 206 | ||
211 | TP_PROTO(lt_t *start), | 207 | TP_PROTO(unsigned long long *start), |
212 | 208 | ||
213 | TP_ARGS(start), | 209 | TP_ARGS(start), |
214 | 210 | ||
215 | TP_STRUCT__entry( | 211 | TP_STRUCT__entry( |
216 | __field( lt_t, rel ) | 212 | __field( unsigned long long, rel ) |
217 | __field( lt_t, when ) | 213 | __field( unsigned long long, when ) |
218 | ), | 214 | ), |
219 | 215 | ||
220 | TP_fast_assign( | 216 | TP_fast_assign( |
@@ -225,6 +221,135 @@ TRACE_EVENT(litmus_sys_release, | |||
225 | TP_printk("SynRelease(%Lu) at %Lu\n", __entry->rel, __entry->when) | 221 | TP_printk("SynRelease(%Lu) at %Lu\n", __entry->rel, __entry->when) |
226 | ); | 222 | ); |
227 | 223 | ||
224 | /* | ||
225 | * Containers | ||
226 | */ | ||
227 | TRACE_EVENT(litmus_container_param, | ||
228 | |||
229 | TP_PROTO(int cid, const char *name), | ||
230 | |||
231 | TP_ARGS(cid, name), | ||
232 | |||
233 | TP_STRUCT__entry( | ||
234 | __field( int, cid ) | ||
235 | __array( char, name, TASK_COMM_LEN ) | ||
236 | ), | ||
237 | |||
238 | TP_fast_assign( | ||
239 | memcpy(__entry->name, name, TASK_COMM_LEN); | ||
240 | __entry->cid = cid; | ||
241 | ), | ||
242 | |||
243 | TP_printk("container, name: %s, id: %d\n", __entry->name, __entry->cid) | ||
244 | ); | ||
245 | |||
246 | TRACE_EVENT(litmus_server_param, | ||
247 | |||
248 | TP_PROTO(int sid, int cid, unsigned long long wcet, unsigned long long period), | ||
249 | |||
250 | TP_ARGS(sid, cid, wcet, period), | ||
251 | |||
252 | TP_STRUCT__entry( | ||
253 | __field( int, sid ) | ||
254 | __field( int, cid ) | ||
255 | __field( unsigned long long, wcet ) | ||
256 | __field( unsigned long long, period ) | ||
257 | ), | ||
258 | |||
259 | TP_fast_assign( | ||
260 | __entry->cid = cid; | ||
261 | __entry->sid = sid; | ||
262 | __entry->wcet = wcet; | ||
263 | __entry->period = period; | ||
264 | ), | ||
265 | |||
266 | TP_printk("server(%llu, %llu), sid: %llu, cont: %llu\n", | ||
267 | __entry->wcet, __entry->period, __entry->sid, __entry->cid) | ||
268 | ); | ||
269 | |||
270 | TRACE_EVENT(litmus_server_switch_to, | ||
271 | |||
272 | TP_PROTO(int sid, unsigned int job, int tid), | ||
273 | |||
274 | TP_ARGS(sid, job, tid), | ||
275 | |||
276 | TP_STRUCT__entry( | ||
277 | __field( int, sid) | ||
278 | __field( unsigned int, job) | ||
279 | __field( int, tid) | ||
280 | ), | ||
281 | |||
282 | TP_fast_assign( | ||
283 | __entry->sid = sid; | ||
284 | __entry->tid = tid; | ||
285 | __entry->job = job; | ||
286 | ), | ||
287 | |||
288 | TP_printk("switch_to(server(%d, %u)): %d\n", __entry->sid, __entry->job, __entry->tid) | ||
289 | ); | ||
290 | |||
291 | TRACE_EVENT(litmus_server_switch_away, | ||
292 | |||
293 | TP_PROTO(int sid, unsigned int job, int tid), | ||
294 | |||
295 | TP_ARGS(sid, job, tid), | ||
296 | |||
297 | TP_STRUCT__entry( | ||
298 | __field( int, sid) | ||
299 | __field( unsigned int, job) | ||
300 | __field( int, tid) | ||
301 | ), | ||
302 | |||
303 | TP_fast_assign( | ||
304 | __entry->sid = sid; | ||
305 | __entry->tid = tid; | ||
306 | ), | ||
307 | |||
308 | TP_printk("switch_away(server(%d, %u)): %d\n", __entry->sid, __entry->job, __entry->tid) | ||
309 | ); | ||
310 | |||
311 | TRACE_EVENT(litmus_server_release, | ||
312 | |||
313 | TP_PROTO(int sid, unsigned int job, unsigned long long release, unsigned long long deadline), | ||
314 | |||
315 | TP_ARGS(sid, job, release, deadline), | ||
316 | |||
317 | TP_STRUCT__entry( | ||
318 | __field( int, sid) | ||
319 | __field( unsigned int, job) | ||
320 | __field( unsigned long long, release) | ||
321 | __field( unsigned long long, deadline) | ||
322 | ), | ||
323 | |||
324 | TP_fast_assign( | ||
325 | __entry->sid = sid; | ||
326 | __entry->job = job; | ||
327 | __entry->release = release; | ||
328 | __entry->deadline = deadline; | ||
329 | ), | ||
330 | |||
331 | TP_printk("release(server(%d, %u)), release: %llu, deadline: %llu\n", __entry->sid, __entry->job, __entry->release, __entry->deadline) | ||
332 | ); | ||
333 | |||
334 | TRACE_EVENT(litmus_server_completion, | ||
335 | |||
336 | TP_PROTO(int sid, int job), | ||
337 | |||
338 | TP_ARGS(sid, job), | ||
339 | |||
340 | TP_STRUCT__entry( | ||
341 | __field( int, sid) | ||
342 | __field( unsigned int, job) | ||
343 | ), | ||
344 | |||
345 | TP_fast_assign( | ||
346 | __entry->sid = sid; | ||
347 | __entry->job = job; | ||
348 | ), | ||
349 | |||
350 | TP_printk("completion(server(%d, %d))\n", __entry->sid, __entry->job) | ||
351 | ); | ||
352 | |||
228 | #endif /* _SCHED_TASK_TRACEPOINT_H */ | 353 | #endif /* _SCHED_TASK_TRACEPOINT_H */ |
229 | 354 | ||
230 | /* Must stay outside the protection */ | 355 | /* Must stay outside the protection */ |