aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2009-04-28 14:54:39 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2009-04-28 14:54:39 -0400
commitadf9aa9c985dfd72ecf04e17d785689d60ac66e7 (patch)
tree8f77c42d9564ef0b5c3882c5d7d0a9d8104b9c5f
parentcc9555cec51e33d1590cabcedd35c30f11712b70 (diff)
add support for tracing IPI latency
-rw-r--r--include/litmus/trace.h12
-rw-r--r--litmus/trace.c23
2 files changed, 30 insertions, 5 deletions
diff --git a/include/litmus/trace.h b/include/litmus/trace.h
index 620d1ac303..e8e0c7b6cc 100644
--- a/include/litmus/trace.h
+++ b/include/litmus/trace.h
@@ -27,12 +27,18 @@ struct timestamp {
27feather_callback void save_timestamp(unsigned long event); 27feather_callback void save_timestamp(unsigned long event);
28feather_callback void save_timestamp_def(unsigned long event, unsigned long type); 28feather_callback void save_timestamp_def(unsigned long event, unsigned long type);
29feather_callback void save_timestamp_task(unsigned long event, unsigned long t_ptr); 29feather_callback void save_timestamp_task(unsigned long event, unsigned long t_ptr);
30feather_callback void save_timestamp_cpu(unsigned long event, unsigned long cpu);
31
30 32
31#define TIMESTAMP(id) ft_event0(id, save_timestamp) 33#define TIMESTAMP(id) ft_event0(id, save_timestamp)
32 34
33#define DTIMESTAMP(id, def) ft_event1(id, save_timestamp_def, def) 35#define DTIMESTAMP(id, def) ft_event1(id, save_timestamp_def, def)
34 36
35#define TTIMESTAMP(id, task) ft_event1(id, save_timestamp_task, (unsigned long) task) 37#define TTIMESTAMP(id, task) \
38 ft_event1(id, save_timestamp_task, (unsigned long) task)
39
40#define CTIMESTAMP(id, cpu) \
41 ft_event1(id, save_timestamp_cpu, cpu)
36 42
37#else /* !CONFIG_SCHED_OVERHEAD_TRACE */ 43#else /* !CONFIG_SCHED_OVERHEAD_TRACE */
38 44
@@ -42,6 +48,8 @@ feather_callback void save_timestamp_task(unsigned long event, unsigned long t_p
42 48
43#define TTIMESTAMP(id, task) /* no tracing */ 49#define TTIMESTAMP(id, task) /* no tracing */
44 50
51#define CTIMESTAMP(id, cpu) /* no tracing */
52
45#endif 53#endif
46 54
47 55
@@ -98,6 +106,8 @@ feather_callback void save_timestamp_task(unsigned long event, unsigned long t_p
98#define TS_FIFO_DOWN_START TIMESTAMP(182) 106#define TS_FIFO_DOWN_START TIMESTAMP(182)
99#define TS_FIFO_DOWN_END TIMESTAMP(183) 107#define TS_FIFO_DOWN_END TIMESTAMP(183)
100 108
109#define TS_SEND_RESCHED_START(c) CTIMESTAMP(190, c)
110#define TS_SEND_RESCHED_END DTIMESTAMP(191, TSK_UNKNOWN)
101 111
102 112
103#endif /* !_SYS_TRACE_H_ */ 113#endif /* !_SYS_TRACE_H_ */
diff --git a/litmus/trace.c b/litmus/trace.c
index 8851198330..6a134121e1 100644
--- a/litmus/trace.c
+++ b/litmus/trace.c
@@ -14,7 +14,8 @@ static struct ftdev overhead_dev;
14 14
15static unsigned int ts_seq_no = 0; 15static unsigned int ts_seq_no = 0;
16 16
17static inline void __save_timestamp(unsigned long event, uint8_t type) 17static inline void __save_timestamp_cpu(unsigned long event,
18 uint8_t type, uint8_t cpu)
18{ 19{
19 unsigned int seq_no; 20 unsigned int seq_no;
20 struct timestamp *ts; 21 struct timestamp *ts;
@@ -23,28 +24,42 @@ static inline void __save_timestamp(unsigned long event, uint8_t type)
23 ts->event = event; 24 ts->event = event;
24 ts->timestamp = ft_timestamp(); 25 ts->timestamp = ft_timestamp();
25 ts->seq_no = seq_no; 26 ts->seq_no = seq_no;
26 ts->cpu = raw_smp_processor_id(); 27 ts->cpu = cpu;
27 ts->task_type = type; 28 ts->task_type = type;
28 ft_buffer_finish_write(trace_ts_buf, ts); 29 ft_buffer_finish_write(trace_ts_buf, ts);
29 } 30 }
30} 31}
31 32
33static inline void __save_timestamp(unsigned long event,
34 uint8_t type)
35{
36 __save_timestamp_cpu(event, type, raw_smp_processor_id());
37}
38
32feather_callback void save_timestamp(unsigned long event) 39feather_callback void save_timestamp(unsigned long event)
33{ 40{
34 __save_timestamp(event, TSK_UNKNOWN); 41 __save_timestamp(event, TSK_UNKNOWN);
35} 42}
36 43
37feather_callback void save_timestamp_def(unsigned long event, unsigned long type) 44feather_callback void save_timestamp_def(unsigned long event,
45 unsigned long type)
38{ 46{
39 __save_timestamp(event, (uint8_t) type); 47 __save_timestamp(event, (uint8_t) type);
40} 48}
41 49
42feather_callback void save_timestamp_task(unsigned long event, unsigned long t_ptr) 50feather_callback void save_timestamp_task(unsigned long event,
51 unsigned long t_ptr)
43{ 52{
44 int rt = is_realtime((struct task_struct *) t_ptr); 53 int rt = is_realtime((struct task_struct *) t_ptr);
45 __save_timestamp(event, rt ? TSK_RT : TSK_BE); 54 __save_timestamp(event, rt ? TSK_RT : TSK_BE);
46} 55}
47 56
57feather_callback void save_timestamp_cpu(unsigned long event,
58 unsigned long cpu)
59{
60 __save_timestamp_cpu(event, TSK_UNKNOWN, cpu);
61}
62
48/******************************************************************************/ 63/******************************************************************************/
49/* DEVICE FILE DRIVER */ 64/* DEVICE FILE DRIVER */
50/******************************************************************************/ 65/******************************************************************************/