aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2012-09-21 14:15:30 -0400
committerBryan Ward <bcw@cs.unc.edu>2013-04-16 14:37:11 -0400
commitf2d0840115e68334af761b9fda6efd48a5918bd0 (patch)
tree3fed301a0418310d1cc17fb3b7847b71dc327210
parent44123a1a3076503bef7666ffc3fdcb3f8e68e8da (diff)
Initial commit
-rw-r--r--include/litmus/sched_trace.h57
-rw-r--r--include/trace/events/litmus.h161
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 */
18TRACE_EVENT(litmus_task_param, 14TRACE_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 */
162TRACE_EVENT(litmus_task_block, 158TRACE_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 */
183TRACE_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
205TRACE_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 */
184TRACE_EVENT(litmus_task_resume, 230TRACE_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 */
209TRACE_EVENT(litmus_sys_release, 258TRACE_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
274TRACE_EVENT(litmus_server_switch_to, 323TRACE_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
300TRACE_EVENT(litmus_server_switch_away, 344TRACE_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
326TRACE_EVENT(litmus_server_release, 364TRACE_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
352TRACE_EVENT(litmus_server_completion, 389TRACE_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
371TRACE_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
388TRACE_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 */