linux/tools/perf/lib/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_sample {
 109        struct perf_event_header header;
 110        __u64                    array[];
 111};
 112
 113struct perf_record_switch {
 114        struct perf_event_header header;
 115        __u32                    next_prev_pid;
 116        __u32                    next_prev_tid;
 117};
 118
 119struct perf_record_header_attr {
 120        struct perf_event_header header;
 121        struct perf_event_attr   attr;
 122        __u64                    id[];
 123};
 124
 125enum {
 126        PERF_CPU_MAP__CPUS = 0,
 127        PERF_CPU_MAP__MASK = 1,
 128};
 129
 130struct cpu_map_entries {
 131        __u16                    nr;
 132        __u16                    cpu[];
 133};
 134
 135struct perf_record_record_cpu_map {
 136        __u16                    nr;
 137        __u16                    long_size;
 138        unsigned long            mask[];
 139};
 140
 141struct perf_record_cpu_map_data {
 142        __u16                    type;
 143        char                     data[];
 144};
 145
 146struct perf_record_cpu_map {
 147        struct perf_event_header         header;
 148        struct perf_record_cpu_map_data  data;
 149};
 150
 151enum {
 152        PERF_EVENT_UPDATE__UNIT  = 0,
 153        PERF_EVENT_UPDATE__SCALE = 1,
 154        PERF_EVENT_UPDATE__NAME  = 2,
 155        PERF_EVENT_UPDATE__CPUS  = 3,
 156};
 157
 158struct perf_record_event_update_cpus {
 159        struct perf_record_cpu_map_data  cpus;
 160};
 161
 162struct perf_record_event_update_scale {
 163        double                   scale;
 164};
 165
 166struct perf_record_event_update {
 167        struct perf_event_header header;
 168        __u64                    type;
 169        __u64                    id;
 170        char                     data[];
 171};
 172
 173#define MAX_EVENT_NAME 64
 174
 175struct perf_trace_event_type {
 176        __u64                    event_id;
 177        char                     name[MAX_EVENT_NAME];
 178};
 179
 180struct perf_record_header_event_type {
 181        struct perf_event_header         header;
 182        struct perf_trace_event_type     event_type;
 183};
 184
 185struct perf_record_header_tracing_data {
 186        struct perf_event_header header;
 187        __u32                    size;
 188};
 189
 190struct perf_record_header_build_id {
 191        struct perf_event_header header;
 192        pid_t                    pid;
 193        __u8                     build_id[24];
 194        char                     filename[];
 195};
 196
 197struct id_index_entry {
 198        __u64                    id;
 199        __u64                    idx;
 200        __u64                    cpu;
 201        __u64                    tid;
 202};
 203
 204struct perf_record_id_index {
 205        struct perf_event_header header;
 206        __u64                    nr;
 207        struct id_index_entry    entries[0];
 208};
 209
 210struct perf_record_auxtrace_info {
 211        struct perf_event_header header;
 212        __u32                    type;
 213        __u32                    reserved__; /* For alignment */
 214        __u64                    priv[];
 215};
 216
 217struct perf_record_auxtrace {
 218        struct perf_event_header header;
 219        __u64                    size;
 220        __u64                    offset;
 221        __u64                    reference;
 222        __u32                    idx;
 223        __u32                    tid;
 224        __u32                    cpu;
 225        __u32                    reserved__; /* For alignment */
 226};
 227
 228#define MAX_AUXTRACE_ERROR_MSG 64
 229
 230struct perf_record_auxtrace_error {
 231        struct perf_event_header header;
 232        __u32                    type;
 233        __u32                    code;
 234        __u32                    cpu;
 235        __u32                    pid;
 236        __u32                    tid;
 237        __u32                    fmt;
 238        __u64                    ip;
 239        __u64                    time;
 240        char                     msg[MAX_AUXTRACE_ERROR_MSG];
 241};
 242
 243struct perf_record_aux {
 244        struct perf_event_header header;
 245        __u64                    aux_offset;
 246        __u64                    aux_size;
 247        __u64                    flags;
 248};
 249
 250struct perf_record_itrace_start {
 251        struct perf_event_header header;
 252        __u32                    pid;
 253        __u32                    tid;
 254};
 255
 256struct perf_record_thread_map_entry {
 257        __u64                    pid;
 258        char                     comm[16];
 259};
 260
 261struct perf_record_thread_map {
 262        struct perf_event_header                 header;
 263        __u64                                    nr;
 264        struct perf_record_thread_map_entry      entries[];
 265};
 266
 267enum {
 268        PERF_STAT_CONFIG_TERM__AGGR_MODE        = 0,
 269        PERF_STAT_CONFIG_TERM__INTERVAL         = 1,
 270        PERF_STAT_CONFIG_TERM__SCALE            = 2,
 271        PERF_STAT_CONFIG_TERM__MAX              = 3,
 272};
 273
 274struct perf_record_stat_config_entry {
 275        __u64                    tag;
 276        __u64                    val;
 277};
 278
 279struct perf_record_stat_config {
 280        struct perf_event_header                 header;
 281        __u64                                    nr;
 282        struct perf_record_stat_config_entry     data[];
 283};
 284
 285struct perf_record_stat {
 286        struct perf_event_header header;
 287
 288        __u64                    id;
 289        __u32                    cpu;
 290        __u32                    thread;
 291
 292        union {
 293                struct {
 294                        __u64    val;
 295                        __u64    ena;
 296                        __u64    run;
 297                };
 298                __u64            values[3];
 299        };
 300};
 301
 302struct perf_record_stat_round {
 303        struct perf_event_header header;
 304        __u64                    type;
 305        __u64                    time;
 306};
 307
 308struct perf_record_time_conv {
 309        struct perf_event_header header;
 310        __u64                    time_shift;
 311        __u64                    time_mult;
 312        __u64                    time_zero;
 313};
 314
 315struct perf_record_header_feature {
 316        struct perf_event_header header;
 317        __u64                    feat_id;
 318        char                     data[];
 319};
 320
 321struct perf_record_compressed {
 322        struct perf_event_header header;
 323        char                     data[];
 324};
 325
 326enum perf_user_event_type { /* above any possible kernel type */
 327        PERF_RECORD_USER_TYPE_START             = 64,
 328        PERF_RECORD_HEADER_ATTR                 = 64,
 329        PERF_RECORD_HEADER_EVENT_TYPE           = 65, /* deprecated */
 330        PERF_RECORD_HEADER_TRACING_DATA         = 66,
 331        PERF_RECORD_HEADER_BUILD_ID             = 67,
 332        PERF_RECORD_FINISHED_ROUND              = 68,
 333        PERF_RECORD_ID_INDEX                    = 69,
 334        PERF_RECORD_AUXTRACE_INFO               = 70,
 335        PERF_RECORD_AUXTRACE                    = 71,
 336        PERF_RECORD_AUXTRACE_ERROR              = 72,
 337        PERF_RECORD_THREAD_MAP                  = 73,
 338        PERF_RECORD_CPU_MAP                     = 74,
 339        PERF_RECORD_STAT_CONFIG                 = 75,
 340        PERF_RECORD_STAT                        = 76,
 341        PERF_RECORD_STAT_ROUND                  = 77,
 342        PERF_RECORD_EVENT_UPDATE                = 78,
 343        PERF_RECORD_TIME_CONV                   = 79,
 344        PERF_RECORD_HEADER_FEATURE              = 80,
 345        PERF_RECORD_COMPRESSED                  = 81,
 346        PERF_RECORD_HEADER_MAX
 347};
 348
 349union perf_event {
 350        struct perf_event_header                header;
 351        struct perf_record_mmap                 mmap;
 352        struct perf_record_mmap2                mmap2;
 353        struct perf_record_comm                 comm;
 354        struct perf_record_namespaces           namespaces;
 355        struct perf_record_fork                 fork;
 356        struct perf_record_lost                 lost;
 357        struct perf_record_lost_samples         lost_samples;
 358        struct perf_record_read                 read;
 359        struct perf_record_throttle             throttle;
 360        struct perf_record_sample               sample;
 361        struct perf_record_bpf_event            bpf;
 362        struct perf_record_ksymbol              ksymbol;
 363        struct perf_record_header_attr          attr;
 364        struct perf_record_event_update         event_update;
 365        struct perf_record_header_event_type    event_type;
 366        struct perf_record_header_tracing_data  tracing_data;
 367        struct perf_record_header_build_id      build_id;
 368        struct perf_record_id_index             id_index;
 369        struct perf_record_auxtrace_info        auxtrace_info;
 370        struct perf_record_auxtrace             auxtrace;
 371        struct perf_record_auxtrace_error       auxtrace_error;
 372        struct perf_record_aux                  aux;
 373        struct perf_record_itrace_start         itrace_start;
 374        struct perf_record_switch               context_switch;
 375        struct perf_record_thread_map           thread_map;
 376        struct perf_record_cpu_map              cpu_map;
 377        struct perf_record_stat_config          stat_config;
 378        struct perf_record_stat                 stat;
 379        struct perf_record_stat_round           stat_round;
 380        struct perf_record_time_conv            time_conv;
 381        struct perf_record_header_feature       feat;
 382        struct perf_record_compressed           pack;
 383};
 384
 385#endif /* __LIBPERF_EVENT_H */
 386