From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964797AbcBPQ4J (ORCPT ); Tue, 16 Feb 2016 11:56:09 -0500 Received: from mail.kernel.org ([198.145.29.136]:47654 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932543AbcBPQ4I (ORCPT ); Tue, 16 Feb 2016 11:56:08 -0500 Date: Tue, 16 Feb 2016 13:56:01 -0300 From: Arnaldo Carvalho de Melo To: Jiri Olsa Cc: lkml , David Ahern , Ingo Molnar , Namhyung Kim , Peter Zijlstra , Stephane Eranian , Andi Kleen Subject: Re: [PATCH 01/23] perf record: Add --all-user/--all-kernel options Message-ID: <20160216165601.GF17690@kernel.org> References: <1455525293-8671-1-git-send-email-jolsa@kernel.org> <1455525293-8671-2-git-send-email-jolsa@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1455525293-8671-2-git-send-email-jolsa@kernel.org> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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-hdd2u0y1o8cwfpplrpzc1iqd@git.kernel.org > Signed-off-by: Jiri Olsa > --- > 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