]> Git Repo - J-linux.git/blob - tools/lib/perf/Documentation/examples/counting.c
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / tools / lib / perf / Documentation / examples / counting.c
1 #include <linux/perf_event.h>
2 #include <perf/evlist.h>
3 #include <perf/evsel.h>
4 #include <perf/cpumap.h>
5 #include <perf/threadmap.h>
6 #include <perf/mmap.h>
7 #include <perf/core.h>
8 #include <perf/event.h>
9 #include <stdio.h>
10 #include <unistd.h>
11
12 static int libperf_print(enum libperf_print_level level,
13                          const char *fmt, va_list ap)
14 {
15         return vfprintf(stderr, fmt, ap);
16 }
17
18 int main(int argc, char **argv)
19 {
20         int count = 100000, err = 0;
21         struct perf_evlist *evlist;
22         struct perf_evsel *evsel;
23         struct perf_thread_map *threads;
24         struct perf_counts_values counts;
25
26         struct perf_event_attr attr1 = {
27                 .type        = PERF_TYPE_SOFTWARE,
28                 .config      = PERF_COUNT_SW_CPU_CLOCK,
29                 .read_format = PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING,
30                 .disabled    = 1,
31         };
32         struct perf_event_attr attr2 = {
33                 .type        = PERF_TYPE_SOFTWARE,
34                 .config      = PERF_COUNT_SW_TASK_CLOCK,
35                 .read_format = PERF_FORMAT_TOTAL_TIME_ENABLED|PERF_FORMAT_TOTAL_TIME_RUNNING,
36                 .disabled    = 1,
37         };
38
39         libperf_init(libperf_print);
40         threads = perf_thread_map__new_dummy();
41         if (!threads) {
42                 fprintf(stderr, "failed to create threads\n");
43                 return -1;
44         }
45         perf_thread_map__set_pid(threads, 0, 0);
46         evlist = perf_evlist__new();
47         if (!evlist) {
48                 fprintf(stderr, "failed to create evlist\n");
49                 goto out_threads;
50         }
51         evsel = perf_evsel__new(&attr1);
52         if (!evsel) {
53                 fprintf(stderr, "failed to create evsel1\n");
54                 goto out_evlist;
55         }
56         perf_evlist__add(evlist, evsel);
57         evsel = perf_evsel__new(&attr2);
58         if (!evsel) {
59                 fprintf(stderr, "failed to create evsel2\n");
60                 goto out_evlist;
61         }
62         perf_evlist__add(evlist, evsel);
63         perf_evlist__set_maps(evlist, NULL, threads);
64         err = perf_evlist__open(evlist);
65         if (err) {
66                 fprintf(stderr, "failed to open evsel\n");
67                 goto out_evlist;
68         }
69         perf_evlist__enable(evlist);
70         while (count--);
71         perf_evlist__disable(evlist);
72         perf_evlist__for_each_evsel(evlist, evsel) {
73                 perf_evsel__read(evsel, 0, 0, &counts);
74                 fprintf(stdout, "count %llu, enabled %llu, run %llu\n",
75                                 counts.val, counts.ena, counts.run);
76         }
77         perf_evlist__close(evlist);
78 out_evlist:
79         perf_evlist__delete(evlist);
80 out_threads:
81         perf_thread_map__put(threads);
82         return err;
83 }
This page took 0.031826 seconds and 4 git commands to generate.