diff options
author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2009-04-28 14:54:39 -0400 |
---|---|---|
committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2009-04-28 14:54:39 -0400 |
commit | adf9aa9c985dfd72ecf04e17d785689d60ac66e7 (patch) | |
tree | 8f77c42d9564ef0b5c3882c5d7d0a9d8104b9c5f | |
parent | cc9555cec51e33d1590cabcedd35c30f11712b70 (diff) |
add support for tracing IPI latency
-rw-r--r-- | include/litmus/trace.h | 12 | ||||
-rw-r--r-- | litmus/trace.c | 23 |
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 { | |||
27 | feather_callback void save_timestamp(unsigned long event); | 27 | feather_callback void save_timestamp(unsigned long event); |
28 | feather_callback void save_timestamp_def(unsigned long event, unsigned long type); | 28 | feather_callback void save_timestamp_def(unsigned long event, unsigned long type); |
29 | feather_callback void save_timestamp_task(unsigned long event, unsigned long t_ptr); | 29 | feather_callback void save_timestamp_task(unsigned long event, unsigned long t_ptr); |
30 | feather_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 | ||
15 | static unsigned int ts_seq_no = 0; | 15 | static unsigned int ts_seq_no = 0; |
16 | 16 | ||
17 | static inline void __save_timestamp(unsigned long event, uint8_t type) | 17 | static 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 | ||
33 | static inline void __save_timestamp(unsigned long event, | ||
34 | uint8_t type) | ||
35 | { | ||
36 | __save_timestamp_cpu(event, type, raw_smp_processor_id()); | ||
37 | } | ||
38 | |||
32 | feather_callback void save_timestamp(unsigned long event) | 39 | feather_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 | ||
37 | feather_callback void save_timestamp_def(unsigned long event, unsigned long type) | 44 | feather_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 | ||
42 | feather_callback void save_timestamp_task(unsigned long event, unsigned long t_ptr) | 50 | feather_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 | ||
57 | feather_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 | /******************************************************************************/ |