1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef _LINUX_PERF_COUNTER_H
19#define _LINUX_PERF_COUNTER_H
20
21#include <linux/types.h>
22#include <linux/ioctl.h>
23#include <asm/byteorder.h>
24
25
26
27
28
29
30
31
32enum perf_type_id {
33 PERF_TYPE_HARDWARE = 0,
34 PERF_TYPE_SOFTWARE = 1,
35 PERF_TYPE_TRACEPOINT = 2,
36 PERF_TYPE_HW_CACHE = 3,
37 PERF_TYPE_RAW = 4,
38
39 PERF_TYPE_MAX,
40};
41
42
43
44
45
46
47enum perf_hw_id {
48
49
50
51 PERF_COUNT_HW_CPU_CYCLES = 0,
52 PERF_COUNT_HW_INSTRUCTIONS = 1,
53 PERF_COUNT_HW_CACHE_REFERENCES = 2,
54 PERF_COUNT_HW_CACHE_MISSES = 3,
55 PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
56 PERF_COUNT_HW_BRANCH_MISSES = 5,
57 PERF_COUNT_HW_BUS_CYCLES = 6,
58
59 PERF_COUNT_HW_MAX,
60};
61
62
63
64
65
66
67
68
69enum perf_hw_cache_id {
70 PERF_COUNT_HW_CACHE_L1D = 0,
71 PERF_COUNT_HW_CACHE_L1I = 1,
72 PERF_COUNT_HW_CACHE_LL = 2,
73 PERF_COUNT_HW_CACHE_DTLB = 3,
74 PERF_COUNT_HW_CACHE_ITLB = 4,
75 PERF_COUNT_HW_CACHE_BPU = 5,
76
77 PERF_COUNT_HW_CACHE_MAX,
78};
79
80enum perf_hw_cache_op_id {
81 PERF_COUNT_HW_CACHE_OP_READ = 0,
82 PERF_COUNT_HW_CACHE_OP_WRITE = 1,
83 PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
84
85 PERF_COUNT_HW_CACHE_OP_MAX,
86};
87
88enum perf_hw_cache_op_result_id {
89 PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
90 PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
91
92 PERF_COUNT_HW_CACHE_RESULT_MAX,
93};
94
95
96
97
98
99
100
101enum perf_sw_ids {
102 PERF_COUNT_SW_CPU_CLOCK = 0,
103 PERF_COUNT_SW_TASK_CLOCK = 1,
104 PERF_COUNT_SW_PAGE_FAULTS = 2,
105 PERF_COUNT_SW_CONTEXT_SWITCHES = 3,
106 PERF_COUNT_SW_CPU_MIGRATIONS = 4,
107 PERF_COUNT_SW_PAGE_FAULTS_MIN = 5,
108 PERF_COUNT_SW_PAGE_FAULTS_MAJ = 6,
109
110 PERF_COUNT_SW_MAX,
111};
112
113
114
115
116
117enum perf_counter_sample_format {
118 PERF_SAMPLE_IP = 1U << 0,
119 PERF_SAMPLE_TID = 1U << 1,
120 PERF_SAMPLE_TIME = 1U << 2,
121 PERF_SAMPLE_ADDR = 1U << 3,
122 PERF_SAMPLE_READ = 1U << 4,
123 PERF_SAMPLE_CALLCHAIN = 1U << 5,
124 PERF_SAMPLE_ID = 1U << 6,
125 PERF_SAMPLE_CPU = 1U << 7,
126 PERF_SAMPLE_PERIOD = 1U << 8,
127 PERF_SAMPLE_STREAM_ID = 1U << 9,
128 PERF_SAMPLE_RAW = 1U << 10,
129
130 PERF_SAMPLE_MAX = 1U << 11,
131};
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153enum perf_counter_read_format {
154 PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0,
155 PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1,
156 PERF_FORMAT_ID = 1U << 2,
157 PERF_FORMAT_GROUP = 1U << 3,
158
159 PERF_FORMAT_MAX = 1U << 4,
160};
161
162#define PERF_ATTR_SIZE_VER0 64
163
164
165
166
167struct perf_counter_attr {
168
169
170
171
172 __u32 type;
173
174
175
176
177 __u32 size;
178
179
180
181
182 __u64 config;
183
184 union {
185 __u64 sample_period;
186 __u64 sample_freq;
187 };
188
189 __u64 sample_type;
190 __u64 read_format;
191
192 __u64 disabled : 1,
193 inherit : 1,
194 pinned : 1,
195 exclusive : 1,
196 exclude_user : 1,
197 exclude_kernel : 1,
198 exclude_hv : 1,
199 exclude_idle : 1,
200 mmap : 1,
201 comm : 1,
202 freq : 1,
203 inherit_stat : 1,
204 enable_on_exec : 1,
205 task : 1,
206 watermark : 1,
207
208 __reserved_1 : 49;
209
210 union {
211 __u32 wakeup_events;
212 __u32 wakeup_watermark;
213 };
214 __u32 __reserved_2;
215
216 __u64 __reserved_3;
217};
218
219
220
221
222#define PERF_COUNTER_IOC_ENABLE _IO ('$', 0)
223#define PERF_COUNTER_IOC_DISABLE _IO ('$', 1)
224#define PERF_COUNTER_IOC_REFRESH _IO ('$', 2)
225#define PERF_COUNTER_IOC_RESET _IO ('$', 3)
226#define PERF_COUNTER_IOC_PERIOD _IOW('$', 4, u64)
227#define PERF_COUNTER_IOC_SET_OUTPUT _IO ('$', 5)
228
229enum perf_counter_ioc_flags {
230 PERF_IOC_FLAG_GROUP = 1U << 0,
231};
232
233
234
235
236struct perf_counter_mmap_page {
237 __u32 version;
238 __u32 compat_version;
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262 __u32 lock;
263 __u32 index;
264 __s64 offset;
265 __u64 time_enabled;
266 __u64 time_running;
267
268
269
270
271
272 __u64 __reserved[123];
273
274
275
276
277
278
279
280
281
282
283
284
285 __u64 data_head;
286 __u64 data_tail;
287};
288
289#define PERF_EVENT_MISC_CPUMODE_MASK (3 << 0)
290#define PERF_EVENT_MISC_CPUMODE_UNKNOWN (0 << 0)
291#define PERF_EVENT_MISC_KERNEL (1 << 0)
292#define PERF_EVENT_MISC_USER (2 << 0)
293#define PERF_EVENT_MISC_HYPERVISOR (3 << 0)
294
295struct perf_event_header {
296 __u32 type;
297 __u16 misc;
298 __u16 size;
299};
300
301enum perf_event_type {
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317 PERF_EVENT_MMAP = 1,
318
319
320
321
322
323
324
325
326 PERF_EVENT_LOST = 2,
327
328
329
330
331
332
333
334
335
336 PERF_EVENT_COMM = 3,
337
338
339
340
341
342
343
344
345
346 PERF_EVENT_EXIT = 4,
347
348
349
350
351
352
353
354
355
356 PERF_EVENT_THROTTLE = 5,
357 PERF_EVENT_UNTHROTTLE = 6,
358
359
360
361
362
363
364
365
366
367 PERF_EVENT_FORK = 7,
368
369
370
371
372
373
374
375
376
377 PERF_EVENT_READ = 8,
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412 PERF_EVENT_SAMPLE = 9,
413
414 PERF_EVENT_MAX,
415};
416
417enum perf_callchain_context {
418 PERF_CONTEXT_HV = (__u64)-32,
419 PERF_CONTEXT_KERNEL = (__u64)-128,
420 PERF_CONTEXT_USER = (__u64)-512,
421
422 PERF_CONTEXT_GUEST = (__u64)-2048,
423 PERF_CONTEXT_GUEST_KERNEL = (__u64)-2176,
424 PERF_CONTEXT_GUEST_USER = (__u64)-2560,
425
426 PERF_CONTEXT_MAX = (__u64)-4095,
427};
428
429#define PERF_FLAG_FD_NO_GROUP (1U << 0)
430#define PERF_FLAG_FD_OUTPUT (1U << 1)
431
432
433
434
435
436#define __NR_perf_counter_open __NR_perf_event_open
437
438#define PR_TASK_PERF_COUNTERS_DISABLE PR_TASK_PERF_EVENTS_DISABLE
439#define PR_TASK_PERF_COUNTERS_ENABLE PR_TASK_PERF_EVENTS_ENABLE
440
441#endif
442