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