diff options
Diffstat (limited to 'include/sched_trace.h')
-rw-r--r-- | include/sched_trace.h | 133 |
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 | |||
6 | typedef __u8 u8; | ||
7 | typedef __u32 u32; | ||
8 | typedef __u16 u16; | ||
9 | |||
10 | typedef 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 | |||
28 | typedef struct { | ||
29 | trace_type_t trace:8; | ||
30 | unsigned int size:24; | ||
31 | unsigned long long timestamp; | ||
32 | } trace_header_t; | ||
33 | |||
34 | typedef 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 | |||
44 | typedef struct { | ||
45 | trace_header_t header; | ||
46 | unsigned long flags; | ||
47 | } invocation_record_t; | ||
48 | |||
49 | typedef struct { | ||
50 | trace_header_t header; | ||
51 | task_info_t task; | ||
52 | } arrival_record_t; | ||
53 | |||
54 | typedef struct { | ||
55 | trace_header_t header; | ||
56 | task_info_t task; | ||
57 | } departure_record_t; | ||
58 | |||
59 | typedef struct { | ||
60 | trace_header_t header; | ||
61 | task_info_t task; | ||
62 | task_info_t by; | ||
63 | } preemption_record_t; | ||
64 | |||
65 | typedef struct { | ||
66 | trace_header_t header; | ||
67 | task_info_t task; | ||
68 | } scheduled_record_t; | ||
69 | |||
70 | typedef struct { | ||
71 | trace_header_t header; | ||
72 | task_info_t task; | ||
73 | u16 period; | ||
74 | u16 wcet; | ||
75 | } release_record_t; | ||
76 | |||
77 | typedef 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 | |||
85 | typedef struct { | ||
86 | trace_header_t header; | ||
87 | task_info_t task; | ||
88 | } cap_release_record_t; | ||
89 | |||
90 | typedef 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 | |||
98 | typedef struct { | ||
99 | trace_header_t header; | ||
100 | task_info_t task; | ||
101 | service_level_t new_level; | ||
102 | } service_level_change_record_t; | ||
103 | |||
104 | typedef 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 | |||
117 | enum { | ||
118 | INVALID_HEADER = 1 | ||
119 | }; | ||
120 | |||
121 | typedef int (*record_callback_fn)(trace_header_t* hdr); | ||
122 | |||
123 | typedef 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 | |||
130 | int walk_sched_trace(void* start, void* end, record_callback_t *cb); | ||
131 | int walk_sched_trace_file(const char* name, int keep_mapped, | ||
132 | record_callback_t *cb); | ||
133 | #endif | ||