aboutsummaryrefslogtreecommitdiffstats
path: root/include/litmus/trace.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/litmus/trace.h')
-rw-r--r--include/litmus/trace.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/include/litmus/trace.h b/include/litmus/trace.h
new file mode 100644
index 000000000000..d6829c416912
--- /dev/null
+++ b/include/litmus/trace.h
@@ -0,0 +1,129 @@
1#ifndef _SYS_TRACE_H_
2#define _SYS_TRACE_H_
3
4#ifdef CONFIG_SCHED_OVERHEAD_TRACE
5
6#include <litmus/feather_trace.h>
7#include <litmus/feather_buffer.h>
8
9
10/*********************** TIMESTAMPS ************************/
11
12enum task_type_marker {
13 TSK_BE,
14 TSK_RT,
15 TSK_UNKNOWN
16};
17
18struct timestamp {
19 uint64_t timestamp;
20 uint32_t seq_no;
21 uint8_t cpu;
22 uint8_t event;
23 uint8_t task_type;
24};
25
26/* tracing callbacks */
27feather_callback void save_timestamp(unsigned long event);
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);
30feather_callback void save_timestamp_cpu(unsigned long event, unsigned long cpu);
31feather_callback void save_task_latency(unsigned long event, unsigned long when_ptr);
32feather_callback void save_timestamp_time(unsigned long event, unsigned long time_ptr);
33
34#define TIMESTAMP(id) ft_event0(id, save_timestamp)
35
36#define DTIMESTAMP(id, def) ft_event1(id, save_timestamp_def, (unsigned long) def)
37
38#define TTIMESTAMP(id, task) \
39 ft_event1(id, save_timestamp_task, (unsigned long) task)
40
41#define CTIMESTAMP(id, cpu) \
42 ft_event1(id, save_timestamp_cpu, (unsigned long) cpu)
43
44#define LTIMESTAMP(id, task) \
45 ft_event1(id, save_task_latency, (unsigned long) task)
46
47#define TIMESTAMP_TIME(id, time_ptr) \
48 ft_event1(id, save_timestamp_time, (unsigned long) time_ptr)
49
50#define TIMESTAMP_PID(id) ft_event0(id, save_timestamp_pid)
51
52#else /* !CONFIG_SCHED_OVERHEAD_TRACE */
53
54#define TIMESTAMP(id) /* no tracing */
55
56#define DTIMESTAMP(id, def) /* no tracing */
57
58#define TTIMESTAMP(id, task) /* no tracing */
59
60#define CTIMESTAMP(id, cpu) /* no tracing */
61
62#define LTIMESTAMP(id, when_ptr) /* no tracing */
63
64#define TIMESTAMP_TIME(id, time_ptr) /* no tracing */
65
66#define TIMESTAMP_PID(id) /* no tracing */
67
68#endif
69
70
71/* Convention for timestamps
72 * =========================
73 *
74 * In order to process the trace files with a common tool, we use the following
75 * convention to measure execution times: The end time id of a code segment is
76 * always the next number after the start time event id.
77 */
78
79#define __TS_SYSCALL_IN_START(p) TIMESTAMP_TIME(10, p)
80#define TS_SYSCALL_IN_END TIMESTAMP_PID(11)
81
82#define TS_SYSCALL_OUT_START TIMESTAMP_PID(20)
83#define TS_SYSCALL_OUT_END TIMESTAMP_PID(21)
84
85#define TS_LOCK_START TIMESTAMP_PID(30)
86#define TS_LOCK_END TIMESTAMP_PID(31)
87
88#define TS_LOCK_SUSPEND TIMESTAMP_PID(38)
89#define TS_LOCK_RESUME TIMESTAMP_PID(39)
90
91#define TS_UNLOCK_START TIMESTAMP_PID(40)
92#define TS_UNLOCK_END TIMESTAMP_PID(41)
93
94#define TS_SCHED_START DTIMESTAMP(100, TSK_UNKNOWN) /* we only
95 * care
96 * about
97 * next */
98#define TS_SCHED_END(t) TTIMESTAMP(101, t)
99#define TS_SCHED2_START(t) TTIMESTAMP(102, t)
100#define TS_SCHED2_END(t) TTIMESTAMP(103, t)
101
102#define TS_CXS_START(t) TTIMESTAMP(104, t)
103#define TS_CXS_END(t) TTIMESTAMP(105, t)
104
105#define TS_RELEASE_START DTIMESTAMP(106, TSK_RT)
106#define TS_RELEASE_END DTIMESTAMP(107, TSK_RT)
107
108#define TS_TICK_START(t) TTIMESTAMP(110, t)
109#define TS_TICK_END(t) TTIMESTAMP(111, t)
110
111
112#define TS_PLUGIN_SCHED_START /* TIMESTAMP(120) */ /* currently unused */
113#define TS_PLUGIN_SCHED_END /* TIMESTAMP(121) */
114
115#define TS_PLUGIN_TICK_START /* TIMESTAMP(130) */
116#define TS_PLUGIN_TICK_END /* TIMESTAMP(131) */
117
118#define TS_ENTER_NP_START TIMESTAMP(140)
119#define TS_ENTER_NP_END TIMESTAMP(141)
120
121#define TS_EXIT_NP_START TIMESTAMP(150)
122#define TS_EXIT_NP_END TIMESTAMP(151)
123
124#define TS_SEND_RESCHED_START(c) CTIMESTAMP(190, c)
125#define TS_SEND_RESCHED_END DTIMESTAMP(191, TSK_UNKNOWN)
126
127#define TS_RELEASE_LATENCY(when) LTIMESTAMP(208, &(when))
128
129#endif /* !_SYS_TRACE_H_ */