All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ian Rogers <irogers@google.com>
To: Adrian Hunter <adrian.hunter@intel.com>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
	Jiri Olsa <jolsa@redhat.com>,
	Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>,
	Namhyung Kim <namhyung@kernel.org>, Leo Yan <leo.yan@linaro.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH V1 20/23] perf stat: Add requires_cpu flag for uncore
Date: Thu, 5 May 2022 17:52:21 -0700	[thread overview]
Message-ID: <CAP-5=fUoJYg+Hg4S9yHHGC4R02sjeiJtfMues1X=mxTbu=57OA@mail.gmail.com> (raw)
In-Reply-To: <CAP-5=fUQbEDvgftWRSHvWEhHqboNxxwWSK7dhTe=8G6i+wXpfg@mail.gmail.com>

On Thu, May 5, 2022 at 5:50 PM Ian Rogers <irogers@google.com> wrote:
>
> On Thu, May 5, 2022 at 9:58 AM Adrian Hunter <adrian.hunter@intel.com> wrote:
> >
> > Uncore events require a CPU i.e. it cannot be -1.
> >
> > The evsel system_wide flag is intended for events that should be on every
> > CPU, which does not make sense for uncore events because uncore events do
> > not map one-to-one with CPUs.
> >
> > These 2 requirements are not exactly the same, so introduce a new flag
> > 'requires_cpu' the uncore case.
>
> nit: typo missing 'for' the uncore case.
>
> > Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>

Comments coming up in 2 patches time :-)

Acked-by: Ian Rogers <irogers@google.com>

Thanks,
Ian

> > ---
> >  tools/lib/perf/evlist.c                 | 4 +++-
> >  tools/lib/perf/include/internal/evsel.h | 1 +
> >  tools/perf/builtin-stat.c               | 5 +----
> >  tools/perf/util/evsel.c                 | 1 +
> >  tools/perf/util/parse-events.c          | 2 +-
> >  5 files changed, 7 insertions(+), 6 deletions(-)
> >
> > diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c
> > index 8a82b4b94b99..3bf77f9617b6 100644
> > --- a/tools/lib/perf/evlist.c
> > +++ b/tools/lib/perf/evlist.c
> > @@ -43,7 +43,9 @@ static void __perf_evlist__propagate_maps(struct perf_evlist *evlist,
> >         if (!evsel->own_cpus || evlist->has_user_cpus) {
> >                 perf_cpu_map__put(evsel->cpus);
> >                 evsel->cpus = perf_cpu_map__get(evlist->user_requested_cpus);
> > -       } else if (!evsel->system_wide && perf_cpu_map__empty(evlist->user_requested_cpus)) {
> > +       } else if (!evsel->system_wide &&
> > +                  !evsel->requires_cpu &&
> > +                  perf_cpu_map__empty(evlist->user_requested_cpus)) {
> >                 perf_cpu_map__put(evsel->cpus);
> >                 evsel->cpus = perf_cpu_map__get(evlist->user_requested_cpus);
> >         } else if (evsel->cpus != evsel->own_cpus) {
> > diff --git a/tools/lib/perf/include/internal/evsel.h b/tools/lib/perf/include/internal/evsel.h
> > index cfc9ebd7968e..77fbb8b97e5c 100644
> > --- a/tools/lib/perf/include/internal/evsel.h
> > +++ b/tools/lib/perf/include/internal/evsel.h
> > @@ -50,6 +50,7 @@ struct perf_evsel {
> >         /* parse modifier helper */
> >         int                      nr_members;
>
> From the commit message, could we add the comment:
>
> /* True for events that should be on every CPU. */
>
> However, shouldn't this be captured by the CPU map? Perhaps we can
> have an invariant check that they agree.
>
> >         bool                     system_wide;
>
> /* True for events that cannot be the any CPU (-1), for example,
> uncore events. */
>
> > +       bool                     requires_cpu;
> >         int                      idx;
> >  };
> >
> > diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> > index 1b96636df01e..c049533f74e4 100644
> > --- a/tools/perf/builtin-stat.c
> > +++ b/tools/perf/builtin-stat.c
> > @@ -385,9 +385,6 @@ static int read_counter_cpu(struct evsel *counter, struct timespec *rs, int cpu_
> >         if (!counter->supported)
> >                 return -ENOENT;
> >
> > -       if (counter->core.system_wide)
> > -               nthreads = 1;
> > -
> >         for (thread = 0; thread < nthreads; thread++) {
> >                 struct perf_counts_values *count;
> >
> > @@ -2264,7 +2261,7 @@ static void setup_system_wide(int forks)
> >                 struct evsel *counter;
> >
> >                 evlist__for_each_entry(evsel_list, counter) {
> > -                       if (!counter->core.system_wide &&
> > +                       if (!counter->core.requires_cpu &&
> >                             strcmp(counter->name, "duration_time")) {
>
> Off-topic of the patch: this test is a tool event check, it'd be better to do:
>
> if (!counter->core.requires_cpu && counter->tool_event != PERF_TOOL_NONE)
>
> Otherwise changes like:
> https://lore.kernel.org/linux-perf-users/20220420102354.468173-1-florian.fischer@muhq.space/
>
> Will break the test. I'll make a note to do a round of clean up.
>
> Thanks,
> Ian
>
>
> >                                 return;
> >                         }
> > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> > index d38722560e80..12346293706b 100644
> > --- a/tools/perf/util/evsel.c
> > +++ b/tools/perf/util/evsel.c
> > @@ -382,6 +382,7 @@ struct evsel *evsel__clone(struct evsel *orig)
> >         evsel->core.threads = perf_thread_map__get(orig->core.threads);
> >         evsel->core.nr_members = orig->core.nr_members;
> >         evsel->core.system_wide = orig->core.system_wide;
> > +       evsel->core.requires_cpu = orig->core.requires_cpu;
> >
> >         if (orig->name) {
> >                 evsel->name = strdup(orig->name);
> > diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
> > index 937f6c9434a2..5227174099b5 100644
> > --- a/tools/perf/util/parse-events.c
> > +++ b/tools/perf/util/parse-events.c
> > @@ -365,7 +365,7 @@ __add_event(struct list_head *list, int *idx,
> >         (*idx)++;
> >         evsel->core.cpus = cpus;
> >         evsel->core.own_cpus = perf_cpu_map__get(cpus);
> > -       evsel->core.system_wide = pmu ? pmu->is_uncore : false;
> > +       evsel->core.requires_cpu = pmu ? pmu->is_uncore : false;
> >         evsel->auto_merge_stats = auto_merge_stats;
> >
> >         if (name)
> > --
> > 2.25.1
> >

  reply	other threads:[~2022-05-06  0:52 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-05 16:56 [PATCH V1 00/23] perf intel-pt: Better support for perf record --cpu Adrian Hunter
2022-05-05 16:56 ` [PATCH V1 01/23] perf intel-pt: Add a test for system-wide side band Adrian Hunter
2022-05-05 22:37   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 02/23] libperf evsel: Add perf_evsel__enable_thread() Adrian Hunter
2022-05-05 22:48   ` Ian Rogers
2022-05-06  7:18     ` Adrian Hunter
2022-05-05 16:56 ` [PATCH V1 03/23] perf evlist: Use libperf functions in evlist__enable_event_idx() Adrian Hunter
2022-05-05 22:58   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 04/23] perf auxtrace: Move evlist__enable_event_idx() to auxtrace.c Adrian Hunter
2022-05-05 23:06   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 05/23] perf auxtrace: Do not mix up mmap idx Adrian Hunter
2022-05-05 23:08   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 06/23] libperf evlist: Remove ->idx() per_cpu parameter Adrian Hunter
2022-05-05 23:08   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 07/23] libperf evlist: Move ->idx() into mmap_per_evsel() Adrian Hunter
2022-05-05 23:09   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 08/23] libperf evlist: Add evsel as a parameter to ->idx() Adrian Hunter
2022-05-05 23:27   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 09/23] perf auxtrace: Record whether an auxtrace mmap is needed Adrian Hunter
2022-05-05 23:28   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 10/23] perf auxtrace: Add mmap_needed to auxtrace_mmap_params Adrian Hunter
2022-05-05 23:40   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 11/23] perf auxtrace: Remove auxtrace_mmap_params__set_idx() per_cpu parameter Adrian Hunter
2022-05-05 22:13   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 12/23] perf evlist: Factor out evlist__dummy_event() Adrian Hunter
2022-05-05 23:42   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 13/23] perf evlist: Add evlist__add_system_wide_dummy() Adrian Hunter
2022-05-05 23:56   ` Ian Rogers
2022-05-06  8:14     ` Adrian Hunter
2022-05-06  8:34       ` Ian Rogers
2022-05-06  9:27         ` Adrian Hunter
2022-05-05 16:56 ` [PATCH V1 14/23] perf record: Use evlist__add_system_wide_dummy() in record__config_text_poke() Adrian Hunter
2022-05-05 23:57   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 15/23] perf intel-pt: Use evlist__add_system_wide_dummy() for switch tracking Adrian Hunter
2022-05-05 23:58   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 16/23] perf intel-pt: Track sideband system-wide when needed Adrian Hunter
2022-05-06  0:01   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 17/23] perf tools: Allow all_cpus to be a superset of user_requested_cpus Adrian Hunter
2022-05-05 16:56 ` [PATCH V1 18/23] libperf evlist: Allow mixing per-thread and per-cpu mmaps Adrian Hunter
2022-05-06  0:09   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 19/23] libperf evlist: Check nr_mmaps is correct Adrian Hunter
2022-05-06  0:13   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 20/23] perf stat: Add requires_cpu flag for uncore Adrian Hunter
2022-05-06  0:50   ` Ian Rogers
2022-05-06  0:52     ` Ian Rogers [this message]
2022-05-05 16:56 ` [PATCH V1 21/23] libperf evsel: Add comments for booleans Adrian Hunter
2022-05-06  0:55   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 22/23] perf tools: Allow system-wide events to keep their own CPUs Adrian Hunter
2022-05-06  1:00   ` Ian Rogers
2022-05-05 16:56 ` [PATCH V1 23/23] perf tools: Allow system-wide events to keep their own threads Adrian Hunter
2022-05-06  0:51   ` Ian Rogers
2022-05-06  1:06 ` [PATCH V1 00/23] perf intel-pt: Better support for perf record --cpu Ian Rogers

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='CAP-5=fUoJYg+Hg4S9yHHGC4R02sjeiJtfMues1X=mxTbu=57OA@mail.gmail.com' \
    --to=irogers@google.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alexey.v.bayduraev@linux.intel.com \
    --cc=jolsa@redhat.com \
    --cc=leo.yan@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung@kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.