Em Mon, Feb 15, 2016 at 09:34:31AM +0100, Jiri Olsa escreveu: > Allow user to easily switch all events to user or > kernel space with simple --all-user or --all-kernel > options. > > This will be handy within perf mem/c2c wrappers to > switch easily monitoring modes.
Humm, some oddities: # perf record --all-user -e cycles -a # perf report --tui # And then notice there are some kernel samples, zoom into kernel DSO Samples: 7 of event 'cycles', Event count (approx.): 3158810, DSO: [kernel.vmlinux] Overhead Comman Symbol 84.05% chrome [k] page_fault 15.73% chrome [k] entry_SYSCALL_64 0.22% chrome [k] apic_timer_interrupt Ditto when using --all-kernel, some userspace samples are there, also perhaps we should show "cycles:u" or "cycles:k" when this --all-user or --all-kernel features are used. Need to investigate why there are kernel samples when --all-user is used and the other way around as well. Also if I use both it quietly accepts and shows just one of them, I guess we should bail out in case someone tries both. - Arnaldo > Link: http://lkml.kernel.org/n/tip-hdd2u0y1o8cwfpplrpzc1...@git.kernel.org > Signed-off-by: Jiri Olsa <jo...@kernel.org> > --- > tools/perf/Documentation/perf-record.txt | 6 ++++++ > tools/perf/builtin-record.c | 4 ++++ > tools/perf/perf.h | 2 ++ > tools/perf/util/evsel.c | 10 ++++++++++ > 4 files changed, 22 insertions(+) > > diff --git a/tools/perf/Documentation/perf-record.txt > b/tools/perf/Documentation/perf-record.txt > index fbceb631387c..19aa17532a16 100644 > --- a/tools/perf/Documentation/perf-record.txt > +++ b/tools/perf/Documentation/perf-record.txt > @@ -341,6 +341,12 @@ Specify vmlinux path which has debuginfo. > --buildid-all:: > Record build-id of all DSOs regardless whether it's actually hit or not. > > +--all-kernel:: > +Configure all used events to run in kernel space. > + > +--all-user:: > +Configure all used events to run in user space. > + > SEE ALSO > -------- > linkperf:perf-stat[1], linkperf:perf-list[1] > diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c > index caa8235ed027..b64f31a4c993 100644 > --- a/tools/perf/builtin-record.c > +++ b/tools/perf/builtin-record.c > @@ -1151,6 +1151,10 @@ struct option __record_options[] = { > "per thread proc mmap processing timeout in ms"), > OPT_BOOLEAN(0, "switch-events", &record.opts.record_switch_events, > "Record context switch events"), > + OPT_BOOLEAN(0, "all-kernel", &record.opts.all_kernel, > + "Configure all used events to run in kernel space."), > + OPT_BOOLEAN(0, "all-user", &record.opts.all_user, > + "Configure all used events to run in user space."), > OPT_STRING(0, "clang-path", &llvm_param.clang_path, "clang path", > "clang binary to use for compiling BPF scriptlets"), > OPT_STRING(0, "clang-opt", &llvm_param.clang_opt, "clang options", > diff --git a/tools/perf/perf.h b/tools/perf/perf.h > index 90129accffbe..5381a01c0610 100644 > --- a/tools/perf/perf.h > +++ b/tools/perf/perf.h > @@ -58,6 +58,8 @@ struct record_opts { > bool full_auxtrace; > bool auxtrace_snapshot_mode; > bool record_switch_events; > + bool all_kernel; > + bool all_user; > unsigned int freq; > unsigned int mmap_pages; > unsigned int auxtrace_mmap_pages; > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c > index 467808680ee4..6ae20d0056de 100644 > --- a/tools/perf/util/evsel.c > +++ b/tools/perf/util/evsel.c > @@ -898,6 +898,16 @@ void perf_evsel__config(struct perf_evsel *evsel, struct > record_opts *opts) > if (evsel->precise_max) > perf_event_attr__set_max_precise_ip(attr); > > + if (opts->all_user) { > + attr->exclude_kernel = 1; > + attr->exclude_user = 0; > + } > + > + if (opts->all_kernel) { > + attr->exclude_kernel = 0; > + attr->exclude_user = 1; > + } > + > /* > * Apply event specific term settings, > * it overloads any global configuration. > -- > 2.4.3