perf evsel: State in the default event name if attr.exclude_kernel is set
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: ede5626d303b721dd02246a3850380943c24e380 Gitweb: http://git.kernel.org/tip/ede5626d303b721dd02246a3850380943c24e380 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Mon, 10 Jul 2017 16:19:25 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 10 Jul 2017 16:19:25 -0300
perf evsel: State in the default event name if attr.exclude_kernel is set
When no event is specified perf will use the "cycles" hardware event with the highest precision available in the processor, and excluding kernel events for non-root users, so make that clear in the event name by setting the "u" event modifier, i.e. "cycles:upp".
E.g.:
The default for root:
# perf record usleep 1 # perf evlist -v cycles:ppp: ..., precise_ip: 3, exclude_kernel: 0, ... #
And for !root:
$ perf record usleep 1 $ perf evlist -v cycles:uppp: ... , precise_ip: 3, exclude_kernel: 1, ... $
Cc Adrian Hunter <[email protected]>
Cc David Ahern <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/evsel.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
tools/perf/util/evsel.c +4 -2
@@ -298,8 +298,10 @@ struct perf_evsel *perf_evsel__new_cycles(void) goto out;/* use asprintf() because free(evsel) assumes name is allocated */ -if (asprintf (&evsel->name,"cycles%.*s" , - attr.precise_ip ? attr.precise_ip +1 :0 ,":ppp" ) <0 ) +if (asprintf (&evsel->name,"cycles%s%s%.*s" , + (attr.precise_ip || attr.exclude_kernel) ?":" :"" , + attr.exclude_kernel ?"u" :"" , + attr.precise_ip ? attr.precise_ip +1 :0 ,"ppp" ) <0 ) goto error_free; out:return evsel;