aboutsummaryrefslogtreecommitdiffstats
path: root/include/sched_trace.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/sched_trace.h')
-rw-r--r--include/sched_trace.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/include/sched_trace.h b/include/sched_trace.h
new file mode 100644
index 0000000..57f7876
--- /dev/null
+++ b/include/sched_trace.h
@@ -0,0 +1,133 @@
1#ifndef __SCHED_TRACE_H_
2#define __SCHED_TRACE_H_
3
4#include <linux/types.h>
5
6typedef __u8 u8;
7typedef __u32 u32;
8typedef __u16 u16;
9
10typedef enum {
11 ST_INVOCATION = 0,
12 ST_ARRIVAL = 1,
13 ST_DEPARTURE = 2,
14 ST_PREEMPTION = 3,
15 ST_SCHEDULED = 4,
16 ST_JOB_RELEASE = 5,
17 ST_JOB_COMPLETION = 6,
18 ST_CAPACITY_RELEASE = 7,
19 ST_CAPACITY_ALLOCATION = 8,
20 ST_SERVICE_LEVEL_CHANGE = 9,
21 ST_WEIGHT_ERROR = 10,
22
23
24 ST_MAX
25} trace_type_t;
26
27
28typedef struct {
29 trace_type_t trace:8;
30 unsigned int size:24;
31 unsigned long long timestamp;
32} trace_header_t;
33
34typedef struct {
35 unsigned int is_rt:1;
36 unsigned int is_server:1;
37 task_class_t class:4;
38 unsigned int budget:24;
39 u32 deadline;
40
41 pid_t pid;
42} task_info_t;
43
44typedef struct {
45 trace_header_t header;
46 unsigned long flags;
47} invocation_record_t;
48
49typedef struct {
50 trace_header_t header;
51 task_info_t task;
52} arrival_record_t;
53
54typedef struct {
55 trace_header_t header;
56 task_info_t task;
57} departure_record_t;
58
59typedef struct {
60 trace_header_t header;
61 task_info_t task;
62 task_info_t by;
63} preemption_record_t;
64
65typedef struct {
66 trace_header_t header;
67 task_info_t task;
68} scheduled_record_t;
69
70typedef struct {
71 trace_header_t header;
72 task_info_t task;
73 u16 period;
74 u16 wcet;
75} release_record_t;
76
77typedef struct {
78 trace_header_t header;
79 task_info_t task;
80 u16 period;
81 u16 wcet;
82 int tardiness;
83} completion_record_t;
84
85typedef struct {
86 trace_header_t header;
87 task_info_t task;
88} cap_release_record_t;
89
90typedef struct {
91 trace_header_t header;
92 task_info_t task;
93 u16 budget;
94 u32 deadline;
95 pid_t donor;
96} cap_allocation_record_t;
97
98typedef struct {
99 trace_header_t header;
100 task_info_t task;
101 service_level_t new_level;
102} service_level_change_record_t;
103
104typedef struct {
105 trace_header_t header;
106 pid_t task;
107 fp_t estimate;
108 fp_t actual;
109} weight_error_record_t;
110
111
112
113
114
115
116
117enum {
118 INVALID_HEADER = 1
119};
120
121typedef int (*record_callback_fn)(trace_header_t* hdr);
122
123typedef struct {
124 record_callback_fn handler[ST_MAX];
125} record_callback_t;
126
127#define init_record_callback(a) memset(a, 0, sizeof(record_callback_t))
128#define set_callback(type, fn, a) do {(a)->handler[type] = fn; } while (0);
129
130int walk_sched_trace(void* start, void* end, record_callback_t *cb);
131int walk_sched_trace_file(const char* name, int keep_mapped,
132 record_callback_t *cb);
133#endif