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 | /******************************************************************************/ |
