From: Jiri Olsa <jolsa@redhat.com>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
Andi Kleen <ak@linux.intel.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Will Deacon <will@kernel.org>,
Alexey Budankov <alexey.budankov@linux.intel.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Andi Kleen <andi@firstfloor.org>,
Li Bin <huawei.libin@huawei.com>, Wei Li <liwei391@huawei.com>,
Ingo Molnar <mingo@redhat.com>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 1/2] perf stat: Fix segfault when counting armv8_pmu events
Date: Fri, 25 Sep 2020 23:01:49 +0200 [thread overview]
Message-ID: <20200925210149.GA3336227@krava> (raw)
In-Reply-To: <20200924143623.GA357648@google.com>
On Thu, Sep 24, 2020 at 11:36:23PM +0900, Namhyung Kim wrote:
> On Wed, Sep 23, 2020 at 10:19:00PM +0200, Jiri Olsa wrote:
> > On Wed, Sep 23, 2020 at 11:15:06PM +0900, Namhyung Kim wrote:
> > > I think the problem is that armv8_pmu has a cpumask,
> > > and the user requested per-task events.
> > >
> > > The code tried to open the event with a dummy cpu map
> > > since it's not a cpu event, but the pmu has cpu map and
> > > it's passed to evsel. So there's confusion somewhere
> > > whether it should use evsel->cpus or a dummy map.
> >
> > you're right, I have following cpus file in pmu:
> >
> > # cat /sys/devices/armv8_pmuv3_0/cpus
> > 0-3
> >
> > covering all the cpus.. and once you have cpumask/cpus file,
> > you're system wide by default in current code, but we should
> > not crash ;-)
> >
> > I tried to cover this case in patch below and I probably broke
> > some other use cases, but perhaps we could allow to open counters
> > per cpus for given workload
> >
> > I'll try to look at this more tomorrow
>
> I'm thinking about a different approach, we can ignore cpu map
> for the ARM cpu PMU and use the dummy, not tested ;-)
>
> Thanks
> Namhyung
>
>
> diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c
> index 2208444ecb44..cfcdbd7be066 100644
> --- a/tools/lib/perf/evlist.c
> +++ b/tools/lib/perf/evlist.c
> @@ -45,6 +45,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->cpus);
> + } else if (!evsel->system_wide && perf_cpu_map__empty(evlist->cpus)) {
> + perf_cpu_map__put(evsel->cpus);
> + evsel->cpus = perf_cpu_map__get(evlist->cpus);
but I like this fix, because mine messes up scaling ;-)
> } else if (evsel->cpus != evsel->own_cpus) {
> perf_cpu_map__put(evsel->cpus);
> evsel->cpus = perf_cpu_map__get(evsel->own_cpus);
it looks like that cpus (/sys/devices/armv8_pmuv3_0/cpus) file
can have some cpus switched off.. from brief scan of:
drivers/perf/arm_pmu_platform.c (search for supported_cpus)
but it looks like it's just check for interrupt, so counting
might still work..?
thanks,
jirka
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Jiri Olsa <jolsa@redhat.com>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
Andi Kleen <ak@linux.intel.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Alexey Budankov <alexey.budankov@linux.intel.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Andi Kleen <andi@firstfloor.org>,
Li Bin <huawei.libin@huawei.com>, Wei Li <liwei391@huawei.com>,
Ingo Molnar <mingo@redhat.com>,
linux-arm-kernel@lists.infradead.org,
Will Deacon <will@kernel.org>
Subject: Re: [PATCH 1/2] perf stat: Fix segfault when counting armv8_pmu events
Date: Fri, 25 Sep 2020 23:01:49 +0200 [thread overview]
Message-ID: <20200925210149.GA3336227@krava> (raw)
In-Reply-To: <20200924143623.GA357648@google.com>
On Thu, Sep 24, 2020 at 11:36:23PM +0900, Namhyung Kim wrote:
> On Wed, Sep 23, 2020 at 10:19:00PM +0200, Jiri Olsa wrote:
> > On Wed, Sep 23, 2020 at 11:15:06PM +0900, Namhyung Kim wrote:
> > > I think the problem is that armv8_pmu has a cpumask,
> > > and the user requested per-task events.
> > >
> > > The code tried to open the event with a dummy cpu map
> > > since it's not a cpu event, but the pmu has cpu map and
> > > it's passed to evsel. So there's confusion somewhere
> > > whether it should use evsel->cpus or a dummy map.
> >
> > you're right, I have following cpus file in pmu:
> >
> > # cat /sys/devices/armv8_pmuv3_0/cpus
> > 0-3
> >
> > covering all the cpus.. and once you have cpumask/cpus file,
> > you're system wide by default in current code, but we should
> > not crash ;-)
> >
> > I tried to cover this case in patch below and I probably broke
> > some other use cases, but perhaps we could allow to open counters
> > per cpus for given workload
> >
> > I'll try to look at this more tomorrow
>
> I'm thinking about a different approach, we can ignore cpu map
> for the ARM cpu PMU and use the dummy, not tested ;-)
>
> Thanks
> Namhyung
>
>
> diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c
> index 2208444ecb44..cfcdbd7be066 100644
> --- a/tools/lib/perf/evlist.c
> +++ b/tools/lib/perf/evlist.c
> @@ -45,6 +45,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->cpus);
> + } else if (!evsel->system_wide && perf_cpu_map__empty(evlist->cpus)) {
> + perf_cpu_map__put(evsel->cpus);
> + evsel->cpus = perf_cpu_map__get(evlist->cpus);
but I like this fix, because mine messes up scaling ;-)
> } else if (evsel->cpus != evsel->own_cpus) {
> perf_cpu_map__put(evsel->cpus);
> evsel->cpus = perf_cpu_map__get(evsel->own_cpus);
it looks like that cpus (/sys/devices/armv8_pmuv3_0/cpus) file
can have some cpus switched off.. from brief scan of:
drivers/perf/arm_pmu_platform.c (search for supported_cpus)
but it looks like it's just check for interrupt, so counting
might still work..?
thanks,
jirka
next prev parent reply other threads:[~2020-09-25 21:03 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-22 3:13 [PATCH 0/2] perf stat: Unbreak perf stat with ARMv8 PMU events Wei Li
2020-09-22 3:13 ` Wei Li
2020-09-22 3:13 ` [PATCH 1/2] perf stat: Fix segfault when counting armv8_pmu events Wei Li
2020-09-22 3:13 ` Wei Li
2020-09-22 19:23 ` Andi Kleen
2020-09-22 19:23 ` Andi Kleen
2020-09-22 19:50 ` Andi Kleen
2020-09-22 19:50 ` Andi Kleen
2020-09-24 14:14 ` liwei (GF)
2020-09-24 14:14 ` liwei (GF)
2020-09-23 5:44 ` Jiri Olsa
2020-09-23 5:44 ` Jiri Olsa
2020-09-23 13:49 ` Namhyung Kim
2020-09-23 13:49 ` Namhyung Kim
2020-09-23 14:07 ` Jiri Olsa
2020-09-23 14:07 ` Jiri Olsa
2020-09-23 14:15 ` Namhyung Kim
2020-09-23 14:15 ` Namhyung Kim
2020-09-23 20:19 ` Jiri Olsa
2020-09-23 20:19 ` Jiri Olsa
2020-09-24 14:36 ` Namhyung Kim
2020-09-24 14:36 ` Namhyung Kim
2020-09-25 21:01 ` Jiri Olsa [this message]
2020-09-25 21:01 ` Jiri Olsa
2020-10-02 8:59 ` Jiri Olsa
2020-10-02 8:59 ` Jiri Olsa
2020-10-06 6:51 ` Song Bao Hua (Barry Song)
2020-10-06 6:51 ` Song Bao Hua (Barry Song)
2020-09-22 3:13 ` [PATCH 2/2] perf stat: Unbreak perf stat with " Wei Li
2020-09-22 3:13 ` Wei Li
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=20200925210149.GA3336227@krava \
--to=jolsa@redhat.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexey.budankov@linux.intel.com \
--cc=andi@firstfloor.org \
--cc=huawei.libin@huawei.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=liwei391@huawei.com \
--cc=mark.rutland@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=will@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.