Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | 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__dummy_new(void); struct perf_cpu_map *perf_cpu_map__new(const char *cpu_list); struct perf_cpu_map *perf_cpu_map__read(FILE *file); 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__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) |