From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Riccardo Mancini <rickyman7@gmail.com>
Cc: Ian Rogers <irogers@google.com>,
Namhyung Kim <namhyung@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Mark Rutland <mark.rutland@arm.com>, Jiri Olsa <jolsa@redhat.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [RFC PATCH v1 24/37] perf evsel: handle precise_ip fallback in evsel__open_cpu
Date: Tue, 31 Aug 2021 16:52:48 -0300 [thread overview]
Message-ID: <YS6IkHuMDIGuOzO7@kernel.org> (raw)
In-Reply-To: <74208c433d2024a6c4af9c0b140b54ed6b5ea810.1629490974.git.rickyman7@gmail.com>
Em Sat, Aug 21, 2021 at 11:19:30AM +0200, Riccardo Mancini escreveu:
> This is another patch in the effort to separate the fallback mechanisms
> from the open itself.
>
> In case of precise_ip fallback, the original precise_ip will be stored
> in the evsel (it was stored in a local variable) and the open will be
> retried. Since the precise_ip fallback will be the first in the chain of
> fallbacks, there should be no functional change with this patch.
Thanks, looks ok, applied.
- Arnaldo
> Signed-off-by: Riccardo Mancini <rickyman7@gmail.com>
> ---
> tools/perf/util/evsel.c | 59 ++++++++++++++++++-----------------------
> tools/perf/util/evsel.h | 2 ++
> 2 files changed, 28 insertions(+), 33 deletions(-)
>
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index 3e556afed8dd396c..2e95416b8320c6b9 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -1709,42 +1709,29 @@ static void display_attr(struct perf_event_attr *attr)
> }
> }
>
> -static int perf_event_open(struct evsel *evsel,
> - pid_t pid, int cpu, int group_fd)
> +bool evsel__precise_ip_fallback(struct evsel *evsel)
> {
> - int precise_ip = evsel->core.attr.precise_ip;
> - int fd;
> -
> - while (1) {
> - pr_debug2_peo("sys_perf_event_open: pid %d cpu %d group_fd %d flags %#lx",
> - pid, cpu, group_fd, evsel->open_flags);
> -
> - fd = sys_perf_event_open(&evsel->core.attr, pid, cpu, group_fd, evsel->open_flags);
> - if (fd >= 0)
> - break;
> -
> - /* Do not try less precise if not requested. */
> - if (!evsel->precise_max)
> - break;
> -
> - /*
> - * We tried all the precise_ip values, and it's
> - * still failing, so leave it to standard fallback.
> - */
> - if (!evsel->core.attr.precise_ip) {
> - evsel->core.attr.precise_ip = precise_ip;
> - break;
> - }
> + /* Do not try less precise if not requested. */
> + if (!evsel->precise_max)
> + return false;
>
> - pr_debug2_peo("\nsys_perf_event_open failed, error %d\n", -ENOTSUP);
> - evsel->core.attr.precise_ip--;
> - pr_debug2_peo("decreasing precise_ip by one (%d)\n", evsel->core.attr.precise_ip);
> - display_attr(&evsel->core.attr);
> + /*
> + * We tried all the precise_ip values, and it's
> + * still failing, so leave it to standard fallback.
> + */
> + if (!evsel->core.attr.precise_ip) {
> + evsel->core.attr.precise_ip = evsel->precise_ip_original;
> + return false;
> }
>
> - return fd;
> -}
> + if (!evsel->precise_ip_original)
> + evsel->precise_ip_original = evsel->core.attr.precise_ip;
>
> + evsel->core.attr.precise_ip--;
> + pr_debug2_peo("decreasing precise_ip by one (%d)\n", evsel->core.attr.precise_ip);
> + display_attr(&evsel->core.attr);
> + return true;
> +}
>
> static struct perf_cpu_map *empty_cpu_map;
> static struct perf_thread_map *empty_thread_map;
> @@ -2004,8 +1991,11 @@ static int evsel__open_cpu(struct evsel *evsel, struct perf_cpu_map *cpus,
>
> test_attr__ready();
>
> - fd = perf_event_open(evsel, pid, cpus->map[cpu],
> - group_fd);
> + pr_debug2_peo("sys_perf_event_open: pid %d cpu %d group_fd %d flags %#lx",
> + pid, cpus->map[cpu], group_fd, evsel->open_flags);
> +
> + fd = sys_perf_event_open(&evsel->core.attr, pid, cpus->map[cpu],
> + group_fd, evsel->open_flags);
>
> FD(evsel, cpu, thread) = fd;
>
> @@ -2058,6 +2048,9 @@ static int evsel__open_cpu(struct evsel *evsel, struct perf_cpu_map *cpus,
> return 0;
>
> try_fallback:
> + if (evsel__precise_ip_fallback(evsel))
> + goto retry_open;
> +
> if (evsel__ignore_missing_thread(evsel, cpus->nr, cpu, threads, thread, err)) {
> /* We just removed 1 thread, so lower the upper nthreads limit. */
> nthreads--;
> diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
> index 661d2677a19b6248..0a245afab2d87d74 100644
> --- a/tools/perf/util/evsel.h
> +++ b/tools/perf/util/evsel.h
> @@ -150,6 +150,7 @@ struct evsel {
> struct bperf_follower_bpf *follower_skel;
> };
> unsigned long open_flags;
> + int precise_ip_original;
> };
>
> struct perf_missing_features {
> @@ -297,6 +298,7 @@ bool evsel__ignore_missing_thread(struct evsel *evsel,
> int nr_cpus, int cpu,
> struct perf_thread_map *threads,
> int thread, int err);
> +bool evsel__precise_ip_fallback(struct evsel *evsel);
>
> struct perf_sample;
>
> --
> 2.31.1
--
- Arnaldo
next prev parent reply other threads:[~2021-08-31 19:52 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-21 9:19 [RFC PATCH v1 00/37] perf: use workqueue for evlist operations Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 01/37] libperf cpumap: improve idx function Riccardo Mancini
2021-08-31 18:46 ` Arnaldo Carvalho de Melo
2021-10-08 14:29 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 02/37] libperf cpumap: improve max function Riccardo Mancini
2021-08-31 18:47 ` Arnaldo Carvalho de Melo
2021-08-31 19:16 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 03/37] perf evlist: replace evsel__cpu_iter* functions with evsel__find_cpu Riccardo Mancini
2021-10-08 14:38 ` [RFC PATCH v1 03/37] perf evlist: replace evsel__cpu_iter* functions with evsel__find_cpu() Arnaldo Carvalho de Melo
2021-12-11 0:20 ` [RFC PATCH v1 03/37] perf evlist: replace evsel__cpu_iter* functions with evsel__find_cpu Ian Rogers
2021-08-21 9:19 ` [RFC PATCH v1 04/37] perf util: add mmap_cpu_mask__duplicate function Riccardo Mancini
2021-08-31 19:21 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 05/37] perf util/mmap: add missing bitops.h header Riccardo Mancini
2021-08-31 19:22 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 06/37] perf workqueue: add affinities to threadpool Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 07/37] perf workqueue: add support for setting affinities to workers Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 08/37] perf workqueue: add method to execute work on specific CPU Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 09/37] perf python: add workqueue dependency Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 10/37] perf evlist: add multithreading helper Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 11/37] perf evlist: add multithreading to evlist__disable Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 12/37] perf evlist: add multithreading to evlist__enable Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 13/37] perf evlist: add multithreading to evlist__close Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 14/37] perf evsel: remove retry_sample_id goto label Riccardo Mancini
2021-08-31 19:25 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 15/37] perf evsel: separate open preparation from open itself Riccardo Mancini
2021-08-31 19:27 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 16/37] perf evsel: save open flags in evsel Riccardo Mancini
2021-08-31 19:31 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 17/37] perf evsel: separate missing feature disabling from evsel__open_cpu Riccardo Mancini
2021-08-31 19:35 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 18/37] perf evsel: add evsel__prepare_open function Riccardo Mancini
2021-08-31 19:36 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 19/37] perf evsel: separate missing feature detection from evsel__open_cpu Riccardo Mancini
2021-08-31 19:39 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 20/37] perf evsel: separate rlimit increase " Riccardo Mancini
2021-08-31 19:41 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 21/37] perf evsel: move ignore_missing_thread to fallback code Riccardo Mancini
2021-08-31 19:44 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 22/37] perf evsel: move test_attr__open to success path in evsel__open_cpu Riccardo Mancini
2021-08-31 19:47 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 23/37] perf evsel: move bpf_counter__install_pe " Riccardo Mancini
2021-08-31 19:50 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 24/37] perf evsel: handle precise_ip fallback " Riccardo Mancini
2021-08-31 19:52 ` Arnaldo Carvalho de Melo [this message]
2021-08-21 9:19 ` [RFC PATCH v1 25/37] perf evsel: move event open in evsel__open_cpu to separate function Riccardo Mancini
2021-08-31 19:54 ` Arnaldo Carvalho de Melo
2021-09-03 21:52 ` Riccardo Mancini
2021-09-11 19:10 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 26/37] perf evsel: add evsel__open_per_cpu_no_fallback function Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 27/37] perf evlist: add evlist__for_each_entry_from macro Riccardo Mancini
2021-08-31 20:06 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 28/37] perf evlist: add multithreading to evlist__open Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 29/37] perf evlist: add custom fallback " Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 30/37] perf record: use evlist__open_custom Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 31/37] tools lib/subcmd: add OPT_UINTEGER_OPTARG option type Riccardo Mancini
2021-08-31 18:44 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 32/37] perf record: add --threads option Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 33/37] perf record: pin threads to monitored cpus if enough threads available Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 34/37] perf record: apply multithreading in init and fini phases Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 35/37] perf test/evlist-open-close: add multithreading Riccardo Mancini
2021-08-21 9:19 ` [RFC PATCH v1 36/37] perf test/evlist-open-close: use inline func to convert timeval to usec Riccardo Mancini
2021-10-08 14:46 ` Arnaldo Carvalho de Melo
2021-08-21 9:19 ` [RFC PATCH v1 37/37] perf test/evlist-open-close: add detailed output mode Riccardo Mancini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YS6IkHuMDIGuOzO7@kernel.org \
--to=acme@kernel.org \
--cc=irogers@google.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=rickyman7@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox