diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2012-09-21 14:15:30 -0400 |
---|---|---|
committer | Bryan Ward <bcw@cs.unc.edu> | 2013-04-16 14:37:11 -0400 |
commit | f2d0840115e68334af761b9fda6efd48a5918bd0 (patch) | |
tree | 3fed301a0418310d1cc17fb3b7847b71dc327210 | |
parent | 44123a1a3076503bef7666ffc3fdcb3f8e68e8da (diff) |
Initial commit
-rw-r--r-- | include/litmus/sched_trace.h | 57 | ||||
-rw-r--r-- | include/trace/events/litmus.h | 161 |
2 files changed, 115 insertions, 103 deletions
diff --git a/include/litmus/sched_trace.h b/include/litmus/sched_trace.h index 42c361d54a0f..adc223e9c8ab 100644 --- a/include/litmus/sched_trace.h +++ b/include/litmus/sched_trace.h | |||
@@ -182,12 +182,10 @@ feather_callback void do_sched_trace_sys_release(unsigned long id, | |||
182 | 182 | ||
183 | #define trace_litmus_container_param(cid, name) | 183 | #define trace_litmus_container_param(cid, name) |
184 | #define trace_litmus_server_param(sid, cid, wcet, time) | 184 | #define trace_litmus_server_param(sid, cid, wcet, time) |
185 | #define trace_litmus_server_switch_to(sid, job, tid, tjob, cpu) | 185 | #define trace_litmus_server_switch_to(sid, job, tid) |
186 | #define trace_litmus_server_switch_away(sid, job, tid, tjob, cpu) | 186 | #define trace_litmus_server_switch_away(sid, job, tid) |
187 | #define trace_litmus_server_release(sid, job, release, deadline) | 187 | #define trace_litmus_server_release(sid, job, release, deadline) |
188 | #define trace_litmus_server_completion(sid, job) | 188 | #define trace_litmus_server_completion(sid, job) |
189 | #define trace_litmus_server_block(sid) | ||
190 | #define trace_litmus_server_resume(sid) | ||
191 | 189 | ||
192 | #endif | 190 | #endif |
193 | 191 | ||
@@ -235,18 +233,34 @@ feather_callback void do_sched_trace_sys_release(unsigned long id, | |||
235 | trace_litmus_task_completion(t, forced); \ | 233 | trace_litmus_task_completion(t, forced); \ |
236 | } while (0) | 234 | } while (0) |
237 | 235 | ||
238 | #define sched_trace_task_block(t) \ | 236 | #define sched_trace_task_block_on(t, i) \ |
239 | do { \ | 237 | do { \ |
240 | SCHED_TRACE(SCHED_TRACE_BASE_ID + 7, \ | 238 | SCHED_TRACE(SCHED_TRACE_BASE_ID + 7, \ |
241 | do_sched_trace_task_block, t); \ | 239 | do_sched_trace_task_block, t); \ |
242 | trace_litmus_task_block(t); \ | 240 | trace_litmus_task_block(t, i); \ |
243 | } while (0) | 241 | } while (0) |
244 | 242 | ||
245 | #define sched_trace_task_resume(t) \ | 243 | #define sched_trace_task_block(t) \ |
244 | sched_trace_task_block_on(t, 0) | ||
245 | |||
246 | #define sched_trace_task_resume_on(t, i) \ | ||
246 | do { \ | 247 | do { \ |
247 | SCHED_TRACE(SCHED_TRACE_BASE_ID + 8, \ | 248 | SCHED_TRACE(SCHED_TRACE_BASE_ID + 8, \ |
248 | do_sched_trace_task_resume, t); \ | 249 | do_sched_trace_task_resume, t); \ |
249 | trace_litmus_task_resume(t); \ | 250 | trace_litmus_task_resume(t, i); \ |
251 | } while (0) | ||
252 | |||
253 | #define sched_trace_task_resume(t) \ | ||
254 | sched_trace_task_resume_on(t, 0) | ||
255 | |||
256 | #define sched_trace_resource_acquire(t, i) \ | ||
257 | do { \ | ||
258 | trace_litmus_resource_acquire(t, i); \ | ||
259 | } while (0) | ||
260 | |||
261 | #define sched_trace_resource_released(t, i) \ | ||
262 | do { \ | ||
263 | trace_litmus_resource_released(t, i); \ | ||
250 | } while (0) | 264 | } while (0) |
251 | 265 | ||
252 | #define sched_trace_action(t, action) \ | 266 | #define sched_trace_action(t, action) \ |
@@ -261,6 +275,11 @@ feather_callback void do_sched_trace_sys_release(unsigned long id, | |||
261 | trace_litmus_sys_release(when); \ | 275 | trace_litmus_sys_release(when); \ |
262 | } while (0) | 276 | } while (0) |
263 | 277 | ||
278 | #define QT_START lt_t _qt_start = litmus_clock() | ||
279 | #define QT_END \ | ||
280 | sched_trace_log_message("%d P%d [%s@%s:%d]: Took %llu\n\n", \ | ||
281 | TRACE_ARGS, litmus_clock() - _qt_start) | ||
282 | |||
264 | #define sched_trace_container_param(cid, name) \ | 283 | #define sched_trace_container_param(cid, name) \ |
265 | do { \ | 284 | do { \ |
266 | trace_litmus_container_param(cid, name); \ | 285 | trace_litmus_container_param(cid, name); \ |
@@ -271,19 +290,19 @@ feather_callback void do_sched_trace_sys_release(unsigned long id, | |||
271 | trace_litmus_server_param(sid, cid, wcet, period); \ | 290 | trace_litmus_server_param(sid, cid, wcet, period); \ |
272 | } while(0) | 291 | } while(0) |
273 | 292 | ||
274 | #define sched_trace_server_switch_to(sid, job, tid, tjob, cpu) \ | 293 | #define sched_trace_server_switch_to(sid, job, tid) \ |
275 | do { \ | 294 | do { \ |
276 | trace_litmus_server_switch_to(sid, job, tid, tjob, cpu);\ | 295 | trace_litmus_server_switch_to(sid, job, tid); \ |
277 | } while(0) | 296 | } while(0) |
278 | 297 | ||
279 | #define sched_trace_server_switch_away(sid, job, tid, tjob, cpu) \ | 298 | #define sched_trace_server_switch_away(sid, job, tid) \ |
280 | do { \ | 299 | do { \ |
281 | trace_litmus_server_switch_away(sid, job, tid, tjob, cpu);\ | 300 | trace_litmus_server_switch_away(sid, job, tid); \ |
282 | } while (0) | 301 | } while (0) |
283 | 302 | ||
284 | #define sched_trace_server_release(sid, job, release, deadline) \ | 303 | #define sched_trace_server_release(sid, job, rel, dead) \ |
285 | do { \ | 304 | do { \ |
286 | trace_litmus_server_release(sid, job, release, deadline); \ | 305 | trace_litmus_server_release(sid, job, rel, dead); \ |
287 | } while (0) | 306 | } while (0) |
288 | 307 | ||
289 | #define sched_trace_server_completion(sid, job) \ | 308 | #define sched_trace_server_completion(sid, job) \ |
@@ -291,16 +310,6 @@ feather_callback void do_sched_trace_sys_release(unsigned long id, | |||
291 | trace_litmus_server_completion(sid, job); \ | 310 | trace_litmus_server_completion(sid, job); \ |
292 | } while (0) | 311 | } while (0) |
293 | 312 | ||
294 | #define sched_trace_server_resume(sid) \ | ||
295 | do { \ | ||
296 | trace_litmus_server_resume(sid); \ | ||
297 | } while (0) | ||
298 | |||
299 | #define sched_trace_server_block(sid) \ | ||
300 | do { \ | ||
301 | trace_litmus_server_block(sid); \ | ||
302 | } while (0) | ||
303 | |||
304 | #define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */ | 313 | #define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */ |
305 | 314 | ||
306 | #endif /* __KERNEL__ */ | 315 | #endif /* __KERNEL__ */ |
diff --git a/include/trace/events/litmus.h b/include/trace/events/litmus.h index e1843ad37509..b3a8f166e65f 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 | ||
@@ -161,21 +157,71 @@ TRACE_EVENT(litmus_task_completion, | |||
161 | */ | 157 | */ |
162 | TRACE_EVENT(litmus_task_block, | 158 | TRACE_EVENT(litmus_task_block, |
163 | 159 | ||
164 | TP_PROTO(struct task_struct *t), | 160 | TP_PROTO(struct task_struct *t, int lid), |
165 | 161 | ||
166 | TP_ARGS(t), | 162 | TP_ARGS(t, lid), |
163 | |||
164 | TP_STRUCT__entry( | ||
165 | __field( pid_t, pid ) | ||
166 | __field( int, lid ) | ||
167 | __field( unsigned long long, when ) | ||
168 | ), | ||
169 | |||
170 | TP_fast_assign( | ||
171 | __entry->pid = t ? t->pid : 0; | ||
172 | __entry->lid = lid; | ||
173 | __entry->when = litmus_clock(); | ||
174 | ), | ||
175 | |||
176 | TP_printk("(%u) blocks on %d: %Lu\n", __entry->pid, | ||
177 | __entry->lid, __entry->when) | ||
178 | ); | ||
179 | |||
180 | /* | ||
181 | * Lock events | ||
182 | */ | ||
183 | TRACE_EVENT(litmus_resource_acquire, | ||
184 | |||
185 | TP_PROTO(struct task_struct *t, int lid), | ||
186 | |||
187 | TP_ARGS(t, lid), | ||
188 | |||
189 | TP_STRUCT__entry( | ||
190 | __field( pid_t, pid ) | ||
191 | __field( int, lid ) | ||
192 | __field( unsigned long long, when ) | ||
193 | ), | ||
194 | |||
195 | TP_fast_assign( | ||
196 | __entry->pid = t ? t->pid : 0; | ||
197 | __entry->lid = lid; | ||
198 | __entry->when = litmus_clock(); | ||
199 | ), | ||
200 | |||
201 | TP_printk("(%u) acquires %d: %Lu\n", __entry->pid, | ||
202 | __entry->lid, __entry->when) | ||
203 | ); | ||
204 | |||
205 | TRACE_EVENT(litmus_resource_release, | ||
206 | |||
207 | TP_PROTO(struct task_struct *t, int lid), | ||
208 | |||
209 | TP_ARGS(t, lid), | ||
167 | 210 | ||
168 | TP_STRUCT__entry( | 211 | TP_STRUCT__entry( |
169 | __field( pid_t, pid ) | 212 | __field( pid_t, pid ) |
170 | __field( lt_t, when ) | 213 | __field( int, lid ) |
214 | __field( unsigned long long, when ) | ||
171 | ), | 215 | ), |
172 | 216 | ||
173 | TP_fast_assign( | 217 | TP_fast_assign( |
174 | __entry->pid = t ? t->pid : 0; | 218 | __entry->pid = t ? t->pid : 0; |
219 | __entry->lid = lid; | ||
175 | __entry->when = litmus_clock(); | 220 | __entry->when = litmus_clock(); |
176 | ), | 221 | ), |
177 | 222 | ||
178 | TP_printk("(%u) blocks: %Lu\n", __entry->pid, __entry->when) | 223 | TP_printk("(%u) releases %d: %Lu\n", __entry->pid, |
224 | __entry->lid, __entry->when) | ||
179 | ); | 225 | ); |
180 | 226 | ||
181 | /* | 227 | /* |
@@ -183,24 +229,27 @@ TRACE_EVENT(litmus_task_block, | |||
183 | */ | 229 | */ |
184 | TRACE_EVENT(litmus_task_resume, | 230 | TRACE_EVENT(litmus_task_resume, |
185 | 231 | ||
186 | TP_PROTO(struct task_struct *t), | 232 | TP_PROTO(struct task_struct *t, int lid), |
187 | 233 | ||
188 | TP_ARGS(t), | 234 | TP_ARGS(t, lid), |
189 | 235 | ||
190 | TP_STRUCT__entry( | 236 | TP_STRUCT__entry( |
191 | __field( pid_t, pid ) | 237 | __field( pid_t, pid ) |
238 | __field( int, lid ) | ||
192 | __field( unsigned int, job ) | 239 | __field( unsigned int, job ) |
193 | __field( lt_t, when ) | 240 | __field( unsigned long long, when ) |
194 | ), | 241 | ), |
195 | 242 | ||
196 | TP_fast_assign( | 243 | TP_fast_assign( |
197 | __entry->pid = t ? t->pid : 0; | 244 | __entry->pid = t ? t->pid : 0; |
198 | __entry->job = t ? t->rt_param.job_params.job_no : 0; | 245 | __entry->job = t ? t->rt_param.job_params.job_no : 0; |
199 | __entry->when = litmus_clock(); | 246 | __entry->when = litmus_clock(); |
247 | __entry->lid = lid; | ||
200 | ), | 248 | ), |
201 | 249 | ||
202 | TP_printk("resume(job(%u, %u)): %Lu\n", | 250 | TP_printk("resume(job(%u, %u)) on %d: %Lu\n", |
203 | __entry->pid, __entry->job, __entry->when) | 251 | __entry->pid, __entry->job, |
252 | __entry->lid, __entry->when) | ||
204 | ); | 253 | ); |
205 | 254 | ||
206 | /* | 255 | /* |
@@ -208,13 +257,13 @@ TRACE_EVENT(litmus_task_resume, | |||
208 | */ | 257 | */ |
209 | TRACE_EVENT(litmus_sys_release, | 258 | TRACE_EVENT(litmus_sys_release, |
210 | 259 | ||
211 | TP_PROTO(lt_t *start), | 260 | TP_PROTO(unsigned long long *start), |
212 | 261 | ||
213 | TP_ARGS(start), | 262 | TP_ARGS(start), |
214 | 263 | ||
215 | TP_STRUCT__entry( | 264 | TP_STRUCT__entry( |
216 | __field( lt_t, rel ) | 265 | __field( unsigned long long, rel ) |
217 | __field( lt_t, when ) | 266 | __field( unsigned long long, when ) |
218 | ), | 267 | ), |
219 | 268 | ||
220 | TP_fast_assign( | 269 | TP_fast_assign( |
@@ -273,54 +322,43 @@ TRACE_EVENT(litmus_server_param, | |||
273 | 322 | ||
274 | TRACE_EVENT(litmus_server_switch_to, | 323 | TRACE_EVENT(litmus_server_switch_to, |
275 | 324 | ||
276 | TP_PROTO(int sid, unsigned int job, int tid, unsigned int tjob, int cpu), | 325 | TP_PROTO(int sid, unsigned int job, int tid), |
277 | 326 | ||
278 | TP_ARGS(sid, job, tid, tjob, cpu), | 327 | TP_ARGS(sid, job, tid), |
279 | 328 | ||
280 | TP_STRUCT__entry( | 329 | TP_STRUCT__entry( |
281 | __field( int, sid) | 330 | __field( int, sid) |
282 | __field( unsigned int, job) | 331 | __field( unsigned int, job) |
283 | __field( int, tid) | 332 | __field( int, tid) |
284 | __field( unsigned int, tjob) | ||
285 | __field( int, cpu) | ||
286 | ), | 333 | ), |
287 | 334 | ||
288 | TP_fast_assign( | 335 | TP_fast_assign( |
289 | __entry->sid = sid; | 336 | __entry->sid = sid; |
290 | __entry->tid = tid; | 337 | __entry->tid = tid; |
291 | __entry->job = job; | 338 | __entry->job = job; |
292 | __entry->tjob = tjob; | ||
293 | __entry->cpu = cpu; | ||
294 | ), | 339 | ), |
295 | 340 | ||
296 | TP_printk("switch_to(server(%d, %u)): (%d, %d) on %d\n", | 341 | TP_printk("switch_to(server(%d, %u)): %d\n", __entry->sid, __entry->job, __entry->tid) |
297 | __entry->sid, __entry->job, __entry->tid, __entry->tjob, __entry->cpu) | ||
298 | ); | 342 | ); |
299 | 343 | ||
300 | TRACE_EVENT(litmus_server_switch_away, | 344 | TRACE_EVENT(litmus_server_switch_away, |
301 | 345 | ||
302 | TP_PROTO(int sid, unsigned int job, int tid, unsigned int tjob, int cpu), | 346 | TP_PROTO(int sid, unsigned int job, int tid), |
303 | 347 | ||
304 | TP_ARGS(sid, job, tid, tjob, cpu), | 348 | TP_ARGS(sid, job, tid), |
305 | 349 | ||
306 | TP_STRUCT__entry( | 350 | TP_STRUCT__entry( |
307 | __field( int, sid) | 351 | __field( int, sid) |
308 | __field( unsigned int, job) | 352 | __field( unsigned int, job) |
309 | __field( int, tid) | 353 | __field( int, tid) |
310 | __field( unsigned int, tjob) | ||
311 | __field( int, cpu) | ||
312 | ), | 354 | ), |
313 | 355 | ||
314 | TP_fast_assign( | 356 | TP_fast_assign( |
315 | __entry->sid = sid; | 357 | __entry->sid = sid; |
316 | __entry->tid = tid; | 358 | __entry->tid = tid; |
317 | __entry->job = job; | ||
318 | __entry->tjob = tjob; | ||
319 | __entry->cpu = cpu; | ||
320 | ), | 359 | ), |
321 | 360 | ||
322 | TP_printk("switch_away(server(%d, %u)): (%d, %d) on %d\n", | 361 | TP_printk("switch_away(server(%d, %u)): %d\n", __entry->sid, __entry->job, __entry->tid) |
323 | __entry->sid, __entry->job, __entry->tid, __entry->tjob, __entry->cpu) | ||
324 | ); | 362 | ); |
325 | 363 | ||
326 | TRACE_EVENT(litmus_server_release, | 364 | TRACE_EVENT(litmus_server_release, |
@@ -345,8 +383,7 @@ TRACE_EVENT(litmus_server_release, | |||
345 | __entry->deadline = deadline; | 383 | __entry->deadline = deadline; |
346 | ), | 384 | ), |
347 | 385 | ||
348 | TP_printk("release(server(%d, %u)), release: %llu, deadline: %llu\n", | 386 | TP_printk("release(server(%d, %u)), release: %llu, deadline: %llu\n", __entry->sid, __entry->job, __entry->release, __entry->deadline) |
349 | __entry->sid, __entry->job, __entry->release, __entry->deadline) | ||
350 | ); | 387 | ); |
351 | 388 | ||
352 | TRACE_EVENT(litmus_server_completion, | 389 | TRACE_EVENT(litmus_server_completion, |
@@ -368,40 +405,6 @@ TRACE_EVENT(litmus_server_completion, | |||
368 | TP_printk("completion(server(%d, %d))\n", __entry->sid, __entry->job) | 405 | TP_printk("completion(server(%d, %d))\n", __entry->sid, __entry->job) |
369 | ); | 406 | ); |
370 | 407 | ||
371 | TRACE_EVENT(litmus_server_resume, | ||
372 | |||
373 | TP_PROTO(int sid), | ||
374 | |||
375 | TP_ARGS(sid), | ||
376 | |||
377 | TP_STRUCT__entry( | ||
378 | __field( int, sid) | ||
379 | ), | ||
380 | |||
381 | TP_fast_assign( | ||
382 | __entry->sid = sid; | ||
383 | ), | ||
384 | |||
385 | TP_printk("resume(server(%d))\n", __entry->sid) | ||
386 | ); | ||
387 | |||
388 | TRACE_EVENT(litmus_server_block, | ||
389 | |||
390 | TP_PROTO(int sid), | ||
391 | |||
392 | TP_ARGS(sid), | ||
393 | |||
394 | TP_STRUCT__entry( | ||
395 | __field( int, sid) | ||
396 | ), | ||
397 | |||
398 | TP_fast_assign( | ||
399 | __entry->sid = sid; | ||
400 | ), | ||
401 | |||
402 | TP_printk("block(server(%d))\n", __entry->sid) | ||
403 | ); | ||
404 | |||
405 | #endif /* _SCHED_TASK_TRACEPOINT_H */ | 408 | #endif /* _SCHED_TASK_TRACEPOINT_H */ |
406 | 409 | ||
407 | /* Must stay outside the protection */ | 410 | /* Must stay outside the protection */ |