aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2011-02-05 23:15:09 -0500
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2011-11-24 15:21:04 -0500
commit1dead199b4ae68ab98eacec4a661fd5ecb5a2704 (patch)
treef15c9a70f79bab4e7c6ca8937710b9f02ee76f0b
parent4490f9ecf94e28458069a02e8cfcf4f385390499 (diff)
Feather-Trace: keep track of release latency
-rw-r--r--include/litmus/trace.h10
-rw-r--r--litmus/rt_domain.c4
-rw-r--r--litmus/trace.c20
3 files changed, 32 insertions, 2 deletions
diff --git a/include/litmus/trace.h b/include/litmus/trace.h
index a725e8b583ba..e2926a08c2f4 100644
--- a/include/litmus/trace.h
+++ b/include/litmus/trace.h
@@ -28,7 +28,7 @@ feather_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); 30feather_callback void save_timestamp_cpu(unsigned long event, unsigned long cpu);
31 31feather_callback void save_task_latency(unsigned long event, unsigned long when_ptr);
32 32
33#define TIMESTAMP(id) ft_event0(id, save_timestamp) 33#define TIMESTAMP(id) ft_event0(id, save_timestamp)
34 34
@@ -40,6 +40,9 @@ feather_callback void save_timestamp_cpu(unsigned long event, unsigned long cpu)
40#define CTIMESTAMP(id, cpu) \ 40#define CTIMESTAMP(id, cpu) \
41 ft_event1(id, save_timestamp_cpu, (unsigned long) cpu) 41 ft_event1(id, save_timestamp_cpu, (unsigned long) cpu)
42 42
43#define LTIMESTAMP(id, task) \
44 ft_event1(id, save_task_latency, (unsigned long) task)
45
43#else /* !CONFIG_SCHED_OVERHEAD_TRACE */ 46#else /* !CONFIG_SCHED_OVERHEAD_TRACE */
44 47
45#define TIMESTAMP(id) /* no tracing */ 48#define TIMESTAMP(id) /* no tracing */
@@ -50,6 +53,8 @@ feather_callback void save_timestamp_cpu(unsigned long event, unsigned long cpu)
50 53
51#define CTIMESTAMP(id, cpu) /* no tracing */ 54#define CTIMESTAMP(id, cpu) /* no tracing */
52 55
56#define LTIMESTAMP(id, when_ptr) /* no tracing */
57
53#endif 58#endif
54 59
55 60
@@ -61,6 +66,8 @@ feather_callback void save_timestamp_cpu(unsigned long event, unsigned long cpu)
61 * always the next number after the start time event id. 66 * always the next number after the start time event id.
62 */ 67 */
63 68
69
70
64#define TS_SCHED_START DTIMESTAMP(100, TSK_UNKNOWN) /* we only 71#define TS_SCHED_START DTIMESTAMP(100, TSK_UNKNOWN) /* we only
65 * care 72 * care
66 * about 73 * about
@@ -102,5 +109,6 @@ feather_callback void save_timestamp_cpu(unsigned long event, unsigned long cpu)
102#define TS_SEND_RESCHED_START(c) CTIMESTAMP(190, c) 109#define TS_SEND_RESCHED_START(c) CTIMESTAMP(190, c)
103#define TS_SEND_RESCHED_END DTIMESTAMP(191, TSK_UNKNOWN) 110#define TS_SEND_RESCHED_END DTIMESTAMP(191, TSK_UNKNOWN)
104 111
112#define TS_RELEASE_LATENCY(when) LTIMESTAMP(208, &(when))
105 113
106#endif /* !_SYS_TRACE_H_ */ 114#endif /* !_SYS_TRACE_H_ */
diff --git a/litmus/rt_domain.c b/litmus/rt_domain.c
index 81a5ac16f164..d405854cd39c 100644
--- a/litmus/rt_domain.c
+++ b/litmus/rt_domain.c
@@ -55,12 +55,14 @@ static enum hrtimer_restart on_release_timer(struct hrtimer *timer)
55{ 55{
56 unsigned long flags; 56 unsigned long flags;
57 struct release_heap* rh; 57 struct release_heap* rh;
58 rh = container_of(timer, struct release_heap, timer);
59
60 TS_RELEASE_LATENCY(rh->release_time);
58 61
59 VTRACE("on_release_timer(0x%p) starts.\n", timer); 62 VTRACE("on_release_timer(0x%p) starts.\n", timer);
60 63
61 TS_RELEASE_START; 64 TS_RELEASE_START;
62 65
63 rh = container_of(timer, struct release_heap, timer);
64 66
65 raw_spin_lock_irqsave(&rh->dom->release_lock, flags); 67 raw_spin_lock_irqsave(&rh->dom->release_lock, flags);
66 VTRACE("CB has the release_lock 0x%p\n", &rh->dom->release_lock); 68 VTRACE("CB has the release_lock 0x%p\n", &rh->dom->release_lock);
diff --git a/litmus/trace.c b/litmus/trace.c
index 1e916aa406b9..f0eb2c706488 100644
--- a/litmus/trace.c
+++ b/litmus/trace.c
@@ -61,6 +61,26 @@ feather_callback void save_timestamp_cpu(unsigned long event,
61 __save_timestamp_cpu(event, TSK_UNKNOWN, cpu); 61 __save_timestamp_cpu(event, TSK_UNKNOWN, cpu);
62} 62}
63 63
64feather_callback void save_task_latency(unsigned long event,
65 unsigned long when_ptr)
66{
67 lt_t now = litmus_clock();
68 lt_t *when = (lt_t*) when_ptr;
69 unsigned int seq_no;
70 int cpu = raw_smp_processor_id();
71 struct timestamp *ts;
72
73 seq_no = fetch_and_inc((int *) &ts_seq_no);
74 if (ft_buffer_start_write(trace_ts_buf, (void**) &ts)) {
75 ts->event = event;
76 ts->timestamp = now - *when;
77 ts->seq_no = seq_no;
78 ts->cpu = cpu;
79 ts->task_type = TSK_RT;
80 ft_buffer_finish_write(trace_ts_buf, ts);
81 }
82}
83
64/******************************************************************************/ 84/******************************************************************************/
65/* DEVICE FILE DRIVER */ 85/* DEVICE FILE DRIVER */
66/******************************************************************************/ 86/******************************************************************************/