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