aboutsummaryrefslogtreecommitdiffstats
path: root/include/litmus/trace.h
blob: e078aee4234dd971b9ebbd9c44f261ac66bc83a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#ifndef _SYS_TRACE_H_
#define	_SYS_TRACE_H_

#ifdef CONFIG_SCHED_OVERHEAD_TRACE

#include <litmus/feather_trace.h>
#include <litmus/feather_buffer.h>


/*********************** TIMESTAMPS ************************/

enum task_type_marker {
	TSK_BE,
	TSK_RT,
	TSK_UNKNOWN
};

struct timestamp {
	uint64_t		timestamp;
	uint32_t		seq_no;
	uint8_t			cpu;
	uint8_t			event;
	uint8_t			task_type:2;
	uint8_t			irq_flag:1;
	uint8_t			irq_count:5;
};

/* tracing callbacks */
feather_callback void save_timestamp(unsigned long event);
feather_callback void save_timestamp_def(unsigned long event, unsigned long type);
feather_callback void save_timestamp_task(unsigned long event, unsigned long t_ptr);
feather_callback void save_timestamp_cpu(unsigned long event, unsigned long cpu);
feather_callback void save_task_latency(unsigned long event, unsigned long when_ptr);

#define TIMESTAMP(id) ft_event0(id, save_timestamp)

#define DTIMESTAMP(id, def)  ft_event1(id, save_timestamp_def, (unsigned long) def)

#define TTIMESTAMP(id, task) \
	ft_event1(id, save_timestamp_task, (unsigned long) task)

#define CTIMESTAMP(id, cpu) \
	ft_event1(id, save_timestamp_cpu, (unsigned long) cpu)

#define LTIMESTAMP(id, task) \
	ft_event1(id, save_task_latency, (unsigned long) task)

#else /* !CONFIG_SCHED_OVERHEAD_TRACE */

#define TIMESTAMP(id)        /* no tracing */

#define DTIMESTAMP(id, def)  /* no tracing */

#define TTIMESTAMP(id, task) /* no tracing */

#define CTIMESTAMP(id, cpu)  /* no tracing */

#define LTIMESTAMP(id, when_ptr) /* no tracing */

#endif


/* Convention for timestamps
 * =========================
 *
 * In order to process the trace files with a common tool, we use the following
 * convention to measure execution times: The end time id of a code segment is
 * always the next number after the start time event id.
 */



#define TS_SCHED_START			DTIMESTAMP(100, TSK_UNKNOWN) /* we only
								      * care
								      * about
								      * next */
#define TS_SCHED_END(t)			TTIMESTAMP(101, t)
#define TS_SCHED2_START(t) 		TTIMESTAMP(102, t)
#define TS_SCHED2_END(t)       		TTIMESTAMP(103, t)

#define TS_CXS_START(t)			TTIMESTAMP(104, t)
#define TS_CXS_END(t)			TTIMESTAMP(105, t)

#define TS_RELEASE_START		DTIMESTAMP(106, TSK_RT)
#define TS_RELEASE_END			DTIMESTAMP(107, TSK_RT)

#define TS_TICK_START(t)		TTIMESTAMP(110, t)
#define TS_TICK_END(t) 			TTIMESTAMP(111, t)


#define TS_PLUGIN_SCHED_START		/* TIMESTAMP(120) */  /* currently unused */
#define TS_PLUGIN_SCHED_END		/* TIMESTAMP(121) */

#define TS_PLUGIN_TICK_START		/* TIMESTAMP(130) */
#define TS_PLUGIN_TICK_END		/* TIMESTAMP(131) */

#define TS_ENTER_NP_START		TIMESTAMP(140)
#define TS_ENTER_NP_END			TIMESTAMP(141)

#define TS_EXIT_NP_START		TIMESTAMP(150)
#define TS_EXIT_NP_END			TIMESTAMP(151)

#define TS_LOCK_START			TIMESTAMP(170)
#define TS_LOCK_SUSPEND			TIMESTAMP(171)
#define TS_LOCK_RESUME			TIMESTAMP(172)
#define TS_LOCK_END				TIMESTAMP(173)

#ifdef CONFIG_LITMUS_DGL_SUPPORT
#define TS_DGL_LOCK_START			TIMESTAMP(175)
#define TS_DGL_LOCK_SUSPEND			TIMESTAMP(176)
#define TS_DGL_LOCK_RESUME			TIMESTAMP(177)
#define TS_DGL_LOCK_END				TIMESTAMP(178)
#endif

#define TS_UNLOCK_START			TIMESTAMP(180)
#define TS_UNLOCK_END			TIMESTAMP(181)

#ifdef CONFIG_LITMUS_DGL_SUPPORT
#define TS_DGL_UNLOCK_START			TIMESTAMP(185)
#define TS_DGL_UNLOCK_END			TIMESTAMP(186)
#endif

#define TS_SEND_RESCHED_START(c)	CTIMESTAMP(190, c)
#define TS_SEND_RESCHED_END		DTIMESTAMP(191, TSK_UNKNOWN)

#define TS_RELEASE_LATENCY(when)	LTIMESTAMP(208, &(when))


#ifdef CONFIG_LITMUS_NVIDIA

#define TS_NV_TOPISR_START		TIMESTAMP(200)
#define TS_NV_TOPISR_END		TIMESTAMP(201)

#define TS_NV_BOTISR_START		TIMESTAMP(202)
#define TS_NV_BOTISR_END		TIMESTAMP(203)

#define TS_NV_RELEASE_BOTISR_START	TIMESTAMP(204)
#define TS_NV_RELEASE_BOTISR_END	TIMESTAMP(205)

#endif

#ifdef CONFIG_LITMUS_PAI_SOFTIRQD
#define TS_NV_SCHED_BOTISR_START	TIMESTAMP(206)
#define TS_NV_SCHED_BOTISR_END		TIMESTAMP(207)
#endif


#endif /* !_SYS_TRACE_H_ */