aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2012-03-15 12:11:32 -0400
committerJonathan Herman <hermanjl@cs.unc.edu>2012-03-15 12:11:32 -0400
commit88b8f6f7015c320706ef8a258404e169708a4acf (patch)
tree430b3eb33b6b08f7b916adf783239b082a74ab59 /include
parent69de127d6bb76821884abb1c1ce5c1f6a5829ded (diff)
First container trace iteration
Diffstat (limited to 'include')
-rw-r--r--include/litmus/litmus.h2
-rw-r--r--include/litmus/rt_param.h1
-rw-r--r--include/litmus/sched_plugin.h5
-rw-r--r--include/litmus/sched_trace.h36
-rw-r--r--include/trace/events/litmus.h163
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
70typedef void (*release_at_t)(struct task_struct *t, lt_t start); 70typedef void (*release_at_t)(struct task_struct *t, lt_t start);
71 71
72/* TODO remove me */
73typedef void (*release_ts_t)(lt_t time);
74
72struct sched_plugin { 75struct 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 */
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
@@ -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 */
209TRACE_EVENT(litmus_sys_release, 205TRACE_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 */
227TRACE_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
246TRACE_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
270TRACE_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
291TRACE_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
311TRACE_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
334TRACE_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 */