Em Thu, Oct 17, 2019 at 12:59:08PM +0200, Jiri Olsa escreveu: > hi, > sending changes for exporting basic sampling interface > in libperf. It's now possible to use following code in > applications via libperf:
Thanks, applied. - Arnaldo > --- (example is without error checks for simplicity) > > struct perf_event_attr attr = { > .type = PERF_TYPE_TRACEPOINT, > .sample_period = 1, > .wakeup_watermark = 1, > .disabled = 1, > }; > /* ... setup attr */ > > cpus = perf_cpu_map__new(NULL); > > evlist = perf_evlist__new(); > evsel = perf_evsel__new(&attr); > perf_evlist__add(evlist, evsel); > > perf_evlist__set_maps(evlist, cpus, NULL); > > err = perf_evlist__open(evlist); > err = perf_evlist__mmap(evlist, 4); > > err = perf_evlist__enable(evlist); > > /* ... monitored area, plus all the other cpus */ > > err = perf_evlist__disable(evlist); > > perf_evlist__for_each_mmap(evlist, map) { > if (perf_mmap__read_init(map) < 0) > continue; > > while ((event = perf_mmap__read_event(map)) != NULL) { > perf_mmap__consume(map); > } > > perf_mmap__read_done(map); > } > > perf_evlist__delete(evlist); > perf_cpu_map__put(cpus); > > --- (end) > > Nothing is carved in stone so far, the interface is exported > as is available in perf now and we can change it as we want. > > New tests are added in test-evlist.c to do thread and cpu based > sampling. > > All the functionality should not change, however there's considerable > mmap code rewrite. > > Now we have perf_evlist__mmap_ops called by both perf and libperf > mmaps functions with specific 'struct perf_evlist_mmap_ops' > callbacks: > > - get - to get mmap object, both libperf and perf use different > objects, because perf needs to carry more data for aio, > compression and auxtrace > - mmap - to actually mmap the object, it's simple mmap for libperf, > but more work for perf wrt aio, compression and auxtrace > - idx - callback to get current IDs, used only in perf for auxtrace > setup > > > It would be great if guys could run your usual workloads to see if all > is fine.. so far so good in my tests ;-) > > > It's also available in here: > git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git > perf/lib > > v3 changes: > - changed mmap0 and mmap_ovw0 to mmap_first and mmap_ovw_first > - rebased to latest perf/core > - portion of patches already taken > > v2 changes: > - rebased to latest perf/core > - portion of patches already taken > - explained mmap refcnt management in following patch changelog: > libperf: Centralize map refcnt setting > > thanks, > jirka > > > Cc: Kan Liang <kan.li...@linux.intel.com> > Cc: Steven Rostedt <rost...@goodmis.org> > Cc: Adrian Hunter <adrian.hun...@intel.com> > Cc: Ian Rogers <irog...@google.com> > Cc: Stephane Eranian <eran...@google.com> > Cc: Song Liu <songliubrav...@fb.com> > Cc: Alexey Budankov <alexey.budan...@linux.intel.com> > Cc: Andi Kleen <a...@linux.intel.com> > --- > Jiri Olsa (10): > libperf: Add perf_evlist__for_each_mmap function > libperf: Move mmap allocation to perf_evlist__mmap_ops::get > libperf: Move mask setup to perf_evlist__mmap_ops function > libperf: Link static tests with libapi.a > libperf: Add _GNU_SOURCE define to compilation > libperf: Add tests_mmap_thread test > libperf: Add tests_mmap_cpus test > libperf: Keep count of failed tests > libperf: Do not export perf_evsel__init/perf_evlist__init > libperf: Add pr_err macro > > tools/perf/lib/Makefile | 2 ++ > tools/perf/lib/evlist.c | 71 > ++++++++++++++++++++++++++++++++++++++--------------- > tools/perf/lib/include/internal/evlist.h | 3 +++ > tools/perf/lib/include/internal/evsel.h | 1 + > tools/perf/lib/include/internal/mmap.h | 5 ++-- > tools/perf/lib/include/internal/tests.h | 20 ++++++++++++--- > tools/perf/lib/include/perf/core.h | 1 + > tools/perf/lib/include/perf/evlist.h | 10 +++++++- > tools/perf/lib/include/perf/evsel.h | 2 -- > tools/perf/lib/internal.h | 3 +++ > tools/perf/lib/libperf.map | 3 +-- > tools/perf/lib/mmap.c | 6 +++-- > tools/perf/lib/tests/Makefile | 8 +++--- > tools/perf/lib/tests/test-cpumap.c | 2 +- > tools/perf/lib/tests/test-evlist.c | 218 > ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- > tools/perf/lib/tests/test-evsel.c | 2 +- > tools/perf/lib/tests/test-threadmap.c | 2 +- > tools/perf/util/evlist.c | 29 +++++++++------------- > 18 files changed, 333 insertions(+), 55 deletions(-) -- - Arnaldo