Re: [PATCHv2 01/15] perf tools: Fix -n option

From: Arnaldo Carvalho de Melo
Date: Mon Jul 03 2017 - 12:10:12 EST


Em Mon, Jul 03, 2017 at 05:16:54PM +0200, Jiri Olsa escreveu:
> On Mon, Jul 03, 2017 at 11:57:39AM -0300, Arnaldo Carvalho de Melo wrote:
> > Em Mon, Jul 03, 2017 at 04:50:16PM +0200, Jiri Olsa escreveu:
> > > The kernel fails to add a non sampling event event
> > > with having precise_ip set.
> > >
> > > Make sure the precise_ip is 0 when using -n option
> > > to create non sampling event in record.
> >
> > Ok, but how could that happen? What was the scenario? Which command? Can
> > you provide a command line that causes the problem?
>
> [jolsa@krava perf]$ ./perf record -e cycles:ppp -n ls
> Lowering default frequency rate to 3000.
> Please consider tweaking /proc/sys/kernel/perf_event_max_sample_rate.
> Error:
> The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (cycles:pppu).
> /bin/dmesg may provide additional information.
> No CONFIG_PERF_EVENTS=y kernel support configured?
>
> v2 attached, thanks

Ok, so the user asks for --no-samples but at the same time asks for
precision equal to :ppp, we should stop right there and warn the user
that that is not possible, instead of silently dropping off what the
user explicitely asked.

I'm cooking a few patches to allow that, then we can apply your patch,
that, with the current set of users will never kick in :-)

- Arnaldo

> jirka
>
>
> ---
> The kernel fails to add a non sampling event event
> with having precise_ip set, like:
>
> $ perf record -e cycles:ppp -n ls
> Error:
> The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (cycles:pppu).
> /bin/dmesg may provide additional information.
> No CONFIG_PERF_EVENTS=y kernel support configured?
>
> Make sure the precise_ip is 0 when using -n option
> to create non sampling event in record.
>
> Link: http://lkml.kernel.org/n/tip-l513fzc1houvu7tl1bo5y65y@xxxxxxxxxxxxxx
> Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx>
> ---
> tools/perf/util/evsel.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index 6f4882f8d61f..915fe3cd6544 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -890,8 +890,10 @@ void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts,
> attr->sample_period = 0;
> }
>
> - if (opts->no_samples)
> + if (opts->no_samples) {
> attr->sample_freq = 0;
> + attr->precise_ip = 0;
> + }
>
> if (opts->inherit_stat)
> attr->inherit_stat = 1;
> --
> 2.9.4