libperf(3)
==========

NAME
----
libperf - Linux kernel perf event library


SYNOPSIS
--------
*Generic API:*

[source,c]
--
  #include <perf/core.h>

  enum libperf_print_level {
          LIBPERF_ERR,
          LIBPERF_WARN,
          LIBPERF_INFO,
          LIBPERF_DEBUG,
          LIBPERF_DEBUG2,
          LIBPERF_DEBUG3,
  };

  typedef int (*libperf_print_fn_t)(enum libperf_print_level level,
                                    const char *, va_list ap);

  void libperf_init(libperf_print_fn_t fn);
--

*API to handle CPU maps:*

[source,c]
--
  #include <perf/cpumap.h>

  struct perf_cpu_map;

  struct perf_cpu_map *perf_cpu_map__new_any_cpu(void);
  struct perf_cpu_map *perf_cpu_map__new(const char *cpu_list);
  struct perf_cpu_map *perf_cpu_map__get(struct perf_cpu_map *map);
  struct perf_cpu_map *perf_cpu_map__merge(struct perf_cpu_map *orig,
                                           struct perf_cpu_map *other);
  void perf_cpu_map__put(struct perf_cpu_map *map);
  int perf_cpu_map__cpu(const struct perf_cpu_map *cpus, int idx);
  int perf_cpu_map__nr(const struct perf_cpu_map *cpus);
  bool perf_cpu_map__has_any_cpu_or_is_empty(const struct perf_cpu_map *map);
  int perf_cpu_map__max(struct perf_cpu_map *map);
  bool perf_cpu_map__has(const struct perf_cpu_map *map, int cpu);

  #define perf_cpu_map__for_each_cpu(cpu, idx, cpus)
--

*API to handle thread maps:*

[source,c]
--
  #include <perf/threadmap.h>

  struct perf_thread_map;

  struct perf_thread_map *perf_thread_map__new_dummy(void);
  struct perf_thread_map *perf_thread_map__new_array(int nr_threads, pid_t *array);

  void perf_thread_map__set_pid(struct perf_thread_map *map, int idx, pid_t pid);
  char *perf_thread_map__comm(struct perf_thread_map *map, int idx);
  int perf_thread_map__nr(struct perf_thread_map *threads);
  pid_t perf_thread_map__pid(struct perf_thread_map *map, int idx);

  struct perf_thread_map *perf_thread_map__get(struct perf_thread_map *map);
  void perf_thread_map__put(struct perf_thread_map *map);
--

*API to handle event lists:*

[source,c]
--
  #include <perf/evlist.h>

  struct perf_evlist;

  void perf_evlist__add(struct perf_evlist *evlist,
                        struct perf_evsel *evsel);
  void perf_evlist__remove(struct perf_evlist *evlist,
                           struct perf_evsel *evsel);
  struct perf_evlist *perf_evlist__new(void);
  void perf_evlist__delete(struct perf_evlist *evlist);
  struct perf_evsel* perf_evlist__next(struct perf_evlist *evlist,
                                       struct perf_evsel *evsel);
  int perf_evlist__open(struct perf_evlist *evlist);
  void perf_evlist__close(struct perf_evlist *evlist);
  void perf_evlist__enable(struct perf_evlist *evlist);
  void perf_evlist__disable(struct perf_evlist *evlist);

  #define perf_evlist__for_each_evsel(evlist, pos)

  void perf_evlist__set_maps(struct perf_evlist *evlist,
                             struct perf_cpu_map *cpus,
                             struct perf_thread_map *threads);
  int perf_evlist__poll(struct perf_evlist *evlist, int timeout);
  int perf_evlist__filter_pollfd(struct perf_evlist *evlist,
                                 short revents_and_mask);

  int perf_evlist__mmap(struct perf_evlist *evlist, int pages);
  void perf_evlist__munmap(struct perf_evlist *evlist);

  struct perf_mmap *perf_evlist__next_mmap(struct perf_evlist *evlist,
                                           struct perf_mmap *map,
                                           bool overwrite);

  #define perf_evlist__for_each_mmap(evlist, pos, overwrite)
--

*API to handle events:*

[source,c]
--
  #include <perf/evsel.h>*

  struct perf_evsel;

  struct perf_counts_values {
          union {
                  struct {
                          uint64_t val;
                          uint64_t ena;
                          uint64_t run;
                  };
                  uint64_t values[3];
          };
  };

  struct perf_evsel *perf_evsel__new(struct perf_event_attr *attr);
  void perf_evsel__delete(struct perf_evsel *evsel);
  int perf_evsel__open(struct perf_evsel *evsel, struct perf_cpu_map *cpus,
                       struct perf_thread_map *threads);
  void perf_evsel__close(struct perf_evsel *evsel);
  void perf_evsel__close_cpu(struct perf_evsel *evsel, int cpu_map_idx);
  int perf_evsel__mmap(struct perf_evsel *evsel, int pages);
  void perf_evsel__munmap(struct perf_evsel *evsel);
  void *perf_evsel__mmap_base(struct perf_evsel *evsel, int cpu_map_idx, int thread);
  int perf_evsel__read(struct perf_evsel *evsel, int cpu_map_idx, int thread,
                       struct perf_counts_values *count);
  int perf_evsel__enable(struct perf_evsel *evsel);
  int perf_evsel__enable_cpu(struct perf_evsel *evsel, int cpu_map_idx);
  int perf_evsel__disable(struct perf_evsel *evsel);
  int perf_evsel__disable_cpu(struct perf_evsel *evsel, int cpu_map_idx);
  struct perf_cpu_map *perf_evsel__cpus(struct perf_evsel *evsel);
  struct perf_thread_map *perf_evsel__threads(struct perf_evsel *evsel);
  struct perf_event_attr *perf_evsel__attr(struct perf_evsel *evsel);
--

*API to handle maps (perf ring buffers):*

[source,c]
--
  #include <perf/mmap.h>

  struct perf_mmap;

  void perf_mmap__consume(struct perf_mmap *map);
  int perf_mmap__read_init(struct perf_mmap *map);
  void perf_mmap__read_done(struct perf_mmap *map);
  union perf_event *perf_mmap__read_event(struct perf_mmap *map);
--

*Structures to access perf API events:*

[source,c]
--
  #include <perf/event.h>

  struct perf_record_mmap;
  struct perf_record_mmap2;
  struct perf_record_comm;
  struct perf_record_namespaces;
  struct perf_record_fork;
  struct perf_record_lost;
  struct perf_record_lost_samples;
  struct perf_record_read;
  struct perf_record_throttle;
  struct perf_record_ksymbol;
  struct perf_record_bpf_event;
  struct perf_record_sample;
  struct perf_record_switch;
  struct perf_record_header_attr;
  struct perf_record_record_cpu_map;
  struct perf_record_cpu_map_data;
  struct perf_record_cpu_map;
  struct perf_record_event_update_cpus;
  struct perf_record_event_update_scale;
  struct perf_record_event_update;
  struct perf_trace_event_type;
  struct perf_record_header_event_type;
  struct perf_record_header_tracing_data;
  struct perf_record_header_build_id;
  struct perf_record_id_index;
  struct perf_record_auxtrace_info;
  struct perf_record_auxtrace;
  struct perf_record_auxtrace_error;
  struct perf_record_aux;
  struct perf_record_itrace_start;
  struct perf_record_thread_map_entry;
  struct perf_record_thread_map;
  struct perf_record_stat_config_entry;
  struct perf_record_stat_config;
  struct perf_record_stat;
  struct perf_record_stat_round;
  struct perf_record_time_conv;
  struct perf_record_header_feature;
  struct perf_record_compressed;
--

DESCRIPTION
-----------
The libperf library provides an API to access the linux kernel perf
events subsystem.

Following objects are key to the libperf interface:

[horizontal]

struct perf_cpu_map:: Provides a CPU list abstraction.

struct perf_thread_map:: Provides a thread list abstraction.

struct perf_evsel:: Provides an abstraction for single a perf event.

struct perf_evlist:: Gathers several struct perf_evsel object and performs functions on all of them.

struct perf_mmap:: Provides an abstraction for accessing perf ring buffer.

The exported API functions bind these objects together.

REPORTING BUGS
--------------
Report bugs to <linux-perf-users@vger.kernel.org>.

LICENSE
-------
libperf is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

SEE ALSO
--------
libperf-sampling(7), libperf-counting(7)
