perf_event.h
001:
002:
003:
004: <tglx@linutronix.de>
005:
006:
007:
008:
009:
010:
011:
012:
013:
014: #ifndef _LINUX_PERF_EVENT_H
015: #define _LINUX_PERF_EVENT_H
016:
017: #include <linux/types.h>
018: #include <linux/ioctl.h>
019: #include <asm/byteorder.h>
020:
021:
022:
023:
024:
025:
026:
027:
028: enum perf_type_id {
029: PERF_TYPE_HARDWARE = 0,
030: PERF_TYPE_SOFTWARE = 1,
031: PERF_TYPE_TRACEPOINT = 2,
032: PERF_TYPE_HW_CACHE = 3,
033: PERF_TYPE_RAW = 4,
034: PERF_TYPE_BREAKPOINT = 5,
035:
036: PERF_TYPE_MAX,
037: };
038:
039:
040:
041:
042:
043:
044: enum perf_hw_id {
045:
046:
047:
048: PERF_COUNT_HW_CPU_CYCLES = 0,
049: PERF_COUNT_HW_INSTRUCTIONS = 1,
050: PERF_COUNT_HW_CACHE_REFERENCES = 2,
051: PERF_COUNT_HW_CACHE_MISSES = 3,
052: PERF_COUNT_HW_BRANCH_INSTRUCTIONS = 4,
053: PERF_COUNT_HW_BRANCH_MISSES = 5,
054: PERF_COUNT_HW_BUS_CYCLES = 6,
055: PERF_COUNT_HW_STALLED_CYCLES_FRONTEND = 7,
056: PERF_COUNT_HW_STALLED_CYCLES_BACKEND = 8,
057:
058: PERF_COUNT_HW_MAX,
059: };
060:
061:
062:
063:
064:
065:
066:
067:
068: enum perf_hw_cache_id {
069: PERF_COUNT_HW_CACHE_L1D = 0,
070: PERF_COUNT_HW_CACHE_L1I = 1,
071: PERF_COUNT_HW_CACHE_LL = 2,
072: PERF_COUNT_HW_CACHE_DTLB = 3,
073: PERF_COUNT_HW_CACHE_ITLB = 4,
074: PERF_COUNT_HW_CACHE_BPU = 5,
075: PERF_COUNT_HW_CACHE_NODE = 6,
076:
077: PERF_COUNT_HW_CACHE_MAX,
078: };
079:
080: enum perf_hw_cache_op_id {
081: PERF_COUNT_HW_CACHE_OP_READ = 0,
082: PERF_COUNT_HW_CACHE_OP_WRITE = 1,
083: PERF_COUNT_HW_CACHE_OP_PREFETCH = 2,
084:
085: PERF_COUNT_HW_CACHE_OP_MAX,
086: };
087:
088: enum perf_hw_cache_op_result_id {
089: PERF_COUNT_HW_CACHE_RESULT_ACCESS = 0,
090: PERF_COUNT_HW_CACHE_RESULT_MISS = 1,
091:
092: PERF_COUNT_HW_CACHE_RESULT_MAX,
093: };
094:
095:
096:
097:
098:
099:
100:
101: enum 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: PERF_COUNT_SW_ALIGNMENT_FAULTS = 7,
110: PERF_COUNT_SW_EMULATION_FAULTS = 8,
111:
112: PERF_COUNT_SW_MAX,
113: };
114:
115:
116:
117:
118:
119: enum perf_event_sample_format {
120: PERF_SAMPLE_IP = 1U << 0,
121: PERF_SAMPLE_TID = 1U << 1,
122: PERF_SAMPLE_TIME = 1U << 2,
123: PERF_SAMPLE_ADDR = 1U << 3,
124: PERF_SAMPLE_READ = 1U << 4,
125: PERF_SAMPLE_CALLCHAIN = 1U << 5,
126: PERF_SAMPLE_ID = 1U << 6,
127: PERF_SAMPLE_CPU = 1U << 7,
128: PERF_SAMPLE_PERIOD = 1U << 8,
129: PERF_SAMPLE_STREAM_ID = 1U << 9,
130: PERF_SAMPLE_RAW = 1U << 10,
131:
132: PERF_SAMPLE_MAX = 1U << 11,
133: };
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155: enum perf_event_read_format {
156: PERF_FORMAT_TOTAL_TIME_ENABLED = 1U << 0,
157: PERF_FORMAT_TOTAL_TIME_RUNNING = 1U << 1,
158: PERF_FORMAT_ID = 1U << 2,
159: PERF_FORMAT_GROUP = 1U << 3,
160:
161: PERF_FORMAT_MAX = 1U << 4,
162: };
163:
164: #define PERF_ATTR_SIZE_VER0 64
165:
166:
167:
168:
169: struct perf_event_attr {
170:
171:
172:
173:
174: __u32 type;
175:
176:
177:
178:
179: __u32 size;
180:
181:
182:
183:
184: __u64 config;
185:
186: union {
187: __u64 sample_period;
188: __u64 sample_freq;
189: };
190:
191: __u64 sample_type;
192: __u64 read_format;
193:
194: __u64 disabled : 1,
195: inherit : 1,
196: pinned : 1,
197: exclusive : 1,
198: exclude_user : 1,
199: exclude_kernel : 1,
200: exclude_hv : 1,
201: exclude_idle : 1,
202: mmap : 1,
203: comm : 1,
204: freq : 1,
205: inherit_stat : 1,
206: enable_on_exec : 1,
207: task : 1,
208: watermark : 1,
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219: precise_ip : 2,
220: mmap_data : 1,
221: sample_id_all : 1,
222:
223: exclude_host : 1,
224: exclude_guest : 1,
225:
226: __reserved_1 : 43;
227:
228: union {
229: __u32 wakeup_events;
230: __u32 wakeup_watermark;
231: };
232:
233: __u32 bp_type;
234: union {
235: __u64 bp_addr;
236: __u64 config1;
237: };
238: union {
239: __u64 bp_len;
240: __u64 config2;
241: };
242: };
243:
244:
245:
246:
247: #define PERF_EVENT_IOC_ENABLE _IO ('$', 0)
248: #define PERF_EVENT_IOC_DISABLE _IO ('$', 1)
249: #define PERF_EVENT_IOC_REFRESH _IO ('$', 2)
250: #define PERF_EVENT_IOC_RESET _IO ('$', 3)
251: #define PERF_EVENT_IOC_PERIOD _IOW('$', 4, __u64)
252: #define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5)
253: #define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *)
254:
255: enum perf_event_ioc_flags {
256: PERF_IOC_FLAG_GROUP = 1U << 0,
257: };
258:
259:
260:
261:
262: struct perf_event_mmap_page {
263: __u32 version;
264: __u32 compat_version;
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288: __u32 lock;
289: __u32 index;
290: __s64 offset;
291: __u64 time_enabled;
292: __u64 time_running;
293:
294:
295:
296:
297:
298: __u64 __reserved[123];
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311: __u64 data_head;
312: __u64 data_tail;
313: };
314:
315: #define PERF_RECORD_MISC_CPUMODE_MASK (7 << 0)
316: #define PERF_RECORD_MISC_CPUMODE_UNKNOWN (0 << 0)
317: #define PERF_RECORD_MISC_KERNEL (1 << 0)
318: #define PERF_RECORD_MISC_USER (2 << 0)
319: #define PERF_RECORD_MISC_HYPERVISOR (3 << 0)
320: #define PERF_RECORD_MISC_GUEST_KERNEL (4 << 0)
321: #define PERF_RECORD_MISC_GUEST_USER (5 << 0)
322:
323:
324:
325:
326:
327:
328: #define PERF_RECORD_MISC_EXACT_IP (1 << 14)
329:
330:
331:
332: #define PERF_RECORD_MISC_EXT_RESERVED (1 << 15)
333:
334: struct perf_event_header {
335: __u32 type;
336: __u16 misc;
337: __u16 size;
338: };
339:
340: enum perf_event_type {
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365: PERF_RECORD_MMAP = 1,
366:
367:
368:
369:
370:
371:
372:
373:
374: PERF_RECORD_LOST = 2,
375:
376:
377:
378:
379:
380:
381:
382:
383:
384: PERF_RECORD_COMM = 3,
385:
386:
387:
388:
389:
390:
391:
392:
393:
394: PERF_RECORD_EXIT = 4,
395:
396:
397:
398:
399:
400:
401:
402:
403:
404: PERF_RECORD_THROTTLE = 5,
405: PERF_RECORD_UNTHROTTLE = 6,
406:
407:
408:
409:
410:
411:
412:
413:
414:
415: PERF_RECORD_FORK = 7,
416:
417:
418:
419:
420:
421:
422:
423:
424:
425: PERF_RECORD_READ = 8,
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460: PERF_RECORD_SAMPLE = 9,
461:
462: PERF_RECORD_MAX,
463: };
464:
465: enum perf_callchain_context {
466: PERF_CONTEXT_HV = (__u64)-32,
467: PERF_CONTEXT_KERNEL = (__u64)-128,
468: PERF_CONTEXT_USER = (__u64)-512,
469:
470: PERF_CONTEXT_GUEST = (__u64)-2048,
471: PERF_CONTEXT_GUEST_KERNEL = (__u64)-2176,
472: PERF_CONTEXT_GUEST_USER = (__u64)-2560,
473:
474: PERF_CONTEXT_MAX = (__u64)-4095,
475: };
476:
477: #define PERF_FLAG_FD_NO_GROUP (1U << 0)
478: #define PERF_FLAG_FD_OUTPUT (1U << 1)
479: #define PERF_FLAG_PID_CGROUP (1U << 2)
480:
481: #endif
482:
© Andrew Scott 2006 -
2025,
All Rights Reserved