/tools/lib/perf/include/perf/event.h

https://github.com/srikard/linux · C Header · 415 lines · 353 code · 57 blank · 5 comment · 0 complexity · 7a8f899ddbe5e99b865246644d5cd349 MD5 · raw file

  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #ifndef __LIBPERF_EVENT_H
  3. #define __LIBPERF_EVENT_H
  4. #include <linux/perf_event.h>
  5. #include <linux/types.h>
  6. #include <linux/limits.h>
  7. #include <linux/bpf.h>
  8. #include <sys/types.h> /* pid_t */
  9. struct perf_record_mmap {
  10. struct perf_event_header header;
  11. __u32 pid, tid;
  12. __u64 start;
  13. __u64 len;
  14. __u64 pgoff;
  15. char filename[PATH_MAX];
  16. };
  17. struct perf_record_mmap2 {
  18. struct perf_event_header header;
  19. __u32 pid, tid;
  20. __u64 start;
  21. __u64 len;
  22. __u64 pgoff;
  23. __u32 maj;
  24. __u32 min;
  25. __u64 ino;
  26. __u64 ino_generation;
  27. __u32 prot;
  28. __u32 flags;
  29. char filename[PATH_MAX];
  30. };
  31. struct perf_record_comm {
  32. struct perf_event_header header;
  33. __u32 pid, tid;
  34. char comm[16];
  35. };
  36. struct perf_record_namespaces {
  37. struct perf_event_header header;
  38. __u32 pid, tid;
  39. __u64 nr_namespaces;
  40. struct perf_ns_link_info link_info[];
  41. };
  42. struct perf_record_fork {
  43. struct perf_event_header header;
  44. __u32 pid, ppid;
  45. __u32 tid, ptid;
  46. __u64 time;
  47. };
  48. struct perf_record_lost {
  49. struct perf_event_header header;
  50. __u64 id;
  51. __u64 lost;
  52. };
  53. struct perf_record_lost_samples {
  54. struct perf_event_header header;
  55. __u64 lost;
  56. };
  57. /*
  58. * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
  59. */
  60. struct perf_record_read {
  61. struct perf_event_header header;
  62. __u32 pid, tid;
  63. __u64 value;
  64. __u64 time_enabled;
  65. __u64 time_running;
  66. __u64 id;
  67. };
  68. struct perf_record_throttle {
  69. struct perf_event_header header;
  70. __u64 time;
  71. __u64 id;
  72. __u64 stream_id;
  73. };
  74. #ifndef KSYM_NAME_LEN
  75. #define KSYM_NAME_LEN 256
  76. #endif
  77. struct perf_record_ksymbol {
  78. struct perf_event_header header;
  79. __u64 addr;
  80. __u32 len;
  81. __u16 ksym_type;
  82. __u16 flags;
  83. char name[KSYM_NAME_LEN];
  84. };
  85. struct perf_record_bpf_event {
  86. struct perf_event_header header;
  87. __u16 type;
  88. __u16 flags;
  89. __u32 id;
  90. /* for bpf_prog types */
  91. __u8 tag[BPF_TAG_SIZE]; // prog tag
  92. };
  93. struct perf_record_cgroup {
  94. struct perf_event_header header;
  95. __u64 id;
  96. char path[PATH_MAX];
  97. };
  98. struct perf_record_text_poke_event {
  99. struct perf_event_header header;
  100. __u64 addr;
  101. __u16 old_len;
  102. __u16 new_len;
  103. __u8 bytes[];
  104. };
  105. struct perf_record_sample {
  106. struct perf_event_header header;
  107. __u64 array[];
  108. };
  109. struct perf_record_switch {
  110. struct perf_event_header header;
  111. __u32 next_prev_pid;
  112. __u32 next_prev_tid;
  113. };
  114. struct perf_record_header_attr {
  115. struct perf_event_header header;
  116. struct perf_event_attr attr;
  117. __u64 id[];
  118. };
  119. enum {
  120. PERF_CPU_MAP__CPUS = 0,
  121. PERF_CPU_MAP__MASK = 1,
  122. };
  123. struct cpu_map_entries {
  124. __u16 nr;
  125. __u16 cpu[];
  126. };
  127. struct perf_record_record_cpu_map {
  128. __u16 nr;
  129. __u16 long_size;
  130. unsigned long mask[];
  131. };
  132. struct perf_record_cpu_map_data {
  133. __u16 type;
  134. char data[];
  135. };
  136. struct perf_record_cpu_map {
  137. struct perf_event_header header;
  138. struct perf_record_cpu_map_data data;
  139. };
  140. enum {
  141. PERF_EVENT_UPDATE__UNIT = 0,
  142. PERF_EVENT_UPDATE__SCALE = 1,
  143. PERF_EVENT_UPDATE__NAME = 2,
  144. PERF_EVENT_UPDATE__CPUS = 3,
  145. };
  146. struct perf_record_event_update_cpus {
  147. struct perf_record_cpu_map_data cpus;
  148. };
  149. struct perf_record_event_update_scale {
  150. double scale;
  151. };
  152. struct perf_record_event_update {
  153. struct perf_event_header header;
  154. __u64 type;
  155. __u64 id;
  156. char data[];
  157. };
  158. #define MAX_EVENT_NAME 64
  159. struct perf_trace_event_type {
  160. __u64 event_id;
  161. char name[MAX_EVENT_NAME];
  162. };
  163. struct perf_record_header_event_type {
  164. struct perf_event_header header;
  165. struct perf_trace_event_type event_type;
  166. };
  167. struct perf_record_header_tracing_data {
  168. struct perf_event_header header;
  169. __u32 size;
  170. };
  171. #define PERF_RECORD_MISC_BUILD_ID_SIZE (1 << 15)
  172. struct perf_record_header_build_id {
  173. struct perf_event_header header;
  174. pid_t pid;
  175. union {
  176. __u8 build_id[24];
  177. struct {
  178. __u8 data[20];
  179. __u8 size;
  180. __u8 reserved1__;
  181. __u16 reserved2__;
  182. };
  183. };
  184. char filename[];
  185. };
  186. struct id_index_entry {
  187. __u64 id;
  188. __u64 idx;
  189. __u64 cpu;
  190. __u64 tid;
  191. };
  192. struct perf_record_id_index {
  193. struct perf_event_header header;
  194. __u64 nr;
  195. struct id_index_entry entries[0];
  196. };
  197. struct perf_record_auxtrace_info {
  198. struct perf_event_header header;
  199. __u32 type;
  200. __u32 reserved__; /* For alignment */
  201. __u64 priv[];
  202. };
  203. struct perf_record_auxtrace {
  204. struct perf_event_header header;
  205. __u64 size;
  206. __u64 offset;
  207. __u64 reference;
  208. __u32 idx;
  209. __u32 tid;
  210. __u32 cpu;
  211. __u32 reserved__; /* For alignment */
  212. };
  213. #define MAX_AUXTRACE_ERROR_MSG 64
  214. struct perf_record_auxtrace_error {
  215. struct perf_event_header header;
  216. __u32 type;
  217. __u32 code;
  218. __u32 cpu;
  219. __u32 pid;
  220. __u32 tid;
  221. __u32 fmt;
  222. __u64 ip;
  223. __u64 time;
  224. char msg[MAX_AUXTRACE_ERROR_MSG];
  225. };
  226. struct perf_record_aux {
  227. struct perf_event_header header;
  228. __u64 aux_offset;
  229. __u64 aux_size;
  230. __u64 flags;
  231. };
  232. struct perf_record_itrace_start {
  233. struct perf_event_header header;
  234. __u32 pid;
  235. __u32 tid;
  236. };
  237. struct perf_record_thread_map_entry {
  238. __u64 pid;
  239. char comm[16];
  240. };
  241. struct perf_record_thread_map {
  242. struct perf_event_header header;
  243. __u64 nr;
  244. struct perf_record_thread_map_entry entries[];
  245. };
  246. enum {
  247. PERF_STAT_CONFIG_TERM__AGGR_MODE = 0,
  248. PERF_STAT_CONFIG_TERM__INTERVAL = 1,
  249. PERF_STAT_CONFIG_TERM__SCALE = 2,
  250. PERF_STAT_CONFIG_TERM__MAX = 3,
  251. };
  252. struct perf_record_stat_config_entry {
  253. __u64 tag;
  254. __u64 val;
  255. };
  256. struct perf_record_stat_config {
  257. struct perf_event_header header;
  258. __u64 nr;
  259. struct perf_record_stat_config_entry data[];
  260. };
  261. struct perf_record_stat {
  262. struct perf_event_header header;
  263. __u64 id;
  264. __u32 cpu;
  265. __u32 thread;
  266. union {
  267. struct {
  268. __u64 val;
  269. __u64 ena;
  270. __u64 run;
  271. };
  272. __u64 values[3];
  273. };
  274. };
  275. struct perf_record_stat_round {
  276. struct perf_event_header header;
  277. __u64 type;
  278. __u64 time;
  279. };
  280. struct perf_record_time_conv {
  281. struct perf_event_header header;
  282. __u64 time_shift;
  283. __u64 time_mult;
  284. __u64 time_zero;
  285. __u64 time_cycles;
  286. __u64 time_mask;
  287. bool cap_user_time_zero;
  288. bool cap_user_time_short;
  289. };
  290. struct perf_record_header_feature {
  291. struct perf_event_header header;
  292. __u64 feat_id;
  293. char data[];
  294. };
  295. struct perf_record_compressed {
  296. struct perf_event_header header;
  297. char data[];
  298. };
  299. enum perf_user_event_type { /* above any possible kernel type */
  300. PERF_RECORD_USER_TYPE_START = 64,
  301. PERF_RECORD_HEADER_ATTR = 64,
  302. PERF_RECORD_HEADER_EVENT_TYPE = 65, /* deprecated */
  303. PERF_RECORD_HEADER_TRACING_DATA = 66,
  304. PERF_RECORD_HEADER_BUILD_ID = 67,
  305. PERF_RECORD_FINISHED_ROUND = 68,
  306. PERF_RECORD_ID_INDEX = 69,
  307. PERF_RECORD_AUXTRACE_INFO = 70,
  308. PERF_RECORD_AUXTRACE = 71,
  309. PERF_RECORD_AUXTRACE_ERROR = 72,
  310. PERF_RECORD_THREAD_MAP = 73,
  311. PERF_RECORD_CPU_MAP = 74,
  312. PERF_RECORD_STAT_CONFIG = 75,
  313. PERF_RECORD_STAT = 76,
  314. PERF_RECORD_STAT_ROUND = 77,
  315. PERF_RECORD_EVENT_UPDATE = 78,
  316. PERF_RECORD_TIME_CONV = 79,
  317. PERF_RECORD_HEADER_FEATURE = 80,
  318. PERF_RECORD_COMPRESSED = 81,
  319. PERF_RECORD_HEADER_MAX
  320. };
  321. union perf_event {
  322. struct perf_event_header header;
  323. struct perf_record_mmap mmap;
  324. struct perf_record_mmap2 mmap2;
  325. struct perf_record_comm comm;
  326. struct perf_record_namespaces namespaces;
  327. struct perf_record_cgroup cgroup;
  328. struct perf_record_fork fork;
  329. struct perf_record_lost lost;
  330. struct perf_record_lost_samples lost_samples;
  331. struct perf_record_read read;
  332. struct perf_record_throttle throttle;
  333. struct perf_record_sample sample;
  334. struct perf_record_bpf_event bpf;
  335. struct perf_record_ksymbol ksymbol;
  336. struct perf_record_text_poke_event text_poke;
  337. struct perf_record_header_attr attr;
  338. struct perf_record_event_update event_update;
  339. struct perf_record_header_event_type event_type;
  340. struct perf_record_header_tracing_data tracing_data;
  341. struct perf_record_header_build_id build_id;
  342. struct perf_record_id_index id_index;
  343. struct perf_record_auxtrace_info auxtrace_info;
  344. struct perf_record_auxtrace auxtrace;
  345. struct perf_record_auxtrace_error auxtrace_error;
  346. struct perf_record_aux aux;
  347. struct perf_record_itrace_start itrace_start;
  348. struct perf_record_switch context_switch;
  349. struct perf_record_thread_map thread_map;
  350. struct perf_record_cpu_map cpu_map;
  351. struct perf_record_stat_config stat_config;
  352. struct perf_record_stat stat;
  353. struct perf_record_stat_round stat_round;
  354. struct perf_record_time_conv time_conv;
  355. struct perf_record_header_feature feat;
  356. struct perf_record_compressed pack;
  357. };
  358. #endif /* __LIBPERF_EVENT_H */