From: Leo Yan <leo.yan@arm.com>
To: Ian Rogers <irogers@google.com>
Cc: Breno Leitao <leitao@debian.org>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@redhat.com>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>,
Adrian Hunter <adrian.hunter@intel.com>,
James Clark <james.clark@linaro.org>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
kernel-team@meta.com, Denis Yaroshevskiy <dyaroshev@meta.com>,
Dmitry Ilvokhin <d@ilvokhin.com>
Subject: Re: [PATCH v2] perf stat: Fix crash on arm64
Date: Fri, 27 Mar 2026 17:57:13 +0000 [thread overview]
Message-ID: <20260327175713.GD356832@e132581.arm.com> (raw)
In-Reply-To: <CAP-5=fUy8Y1cQUC=HzrSpAKcYyxDOjq=JZk1kdgKH9udWA+R=g@mail.gmail.com>
On Thu, Mar 26, 2026 at 02:21:00PM -0700, Ian Rogers wrote:
[...]
> > On one of my board, I can see the log:
> >
> > Events in 'frontend_bound' fully contained within 'retiring'
> > Events in 'bad_speculation' fully contained within 'retiring'
> > Events in 'backend_bound' fully contained within 'retiring'
>
> I looked at nvidia/t410/metrics.json but I'm not clear on where the
> issue is coming from.
Digging a bit, all these metrics have syntax errors because #slots is
zero when returned from tool_pmu__cpu_slots_per_cycle().
See the log: https://termbin.com/e9ue
After that, executes parse_groups() treats all these problematic metrics
as being contained by "retiring".
I have sent a patch to make __add_metrics() respect the returned syntax
error, so the program can exit early.
> > In parse_groups(), when find a event is fully contained by a previous
> > event, it skips to call parse_ids(), as a result, m->pctx->ids is not
> > initialized. Then, setup_metric_events() returns an empty metric
> > events, pick_display_evsel() consumes the returned metric_events and
> > feeds to metricgroup__lookup() with passing "evsel = NULL".
>
> Fully contained groups exist on x86, why isn't this problem breaking
> whenever this happens? Stepping through "contained" examples, I see
> that the ids aren't initialized. I think something else must be
> happening.
If you change tool_pmu__cpu_slots_per_cycle() to always return zero,
this might can reproduce the issue.
[...]
> > @@ -1463,19 +1463,18 @@ static int parse_groups(struct evlist *perf_evlist,
> > if (expr__subset_of_ids(n->pctx, m->pctx)) {
> > pr_debug("Events in '%s' fully contained within '%s'\n",
> > m->metric_name, n->metric_name);
> > - metric_evlist = n->evlist;
> > + contained = n->evlist;
> > break;
> > }
> > -
> > }
> > }
> > if (!metric_evlist) {
> > + metric_evlist = contained ? contained : m->evlist;
> > +
> > ret = parse_ids(metric_no_merge, fake_pmu, m->pctx, m->modifier,
> > - m->group_events, tool_events, &m->evlist);
> > + m->group_events, tool_events, &metric_evlist);
>
> Won't this match the behavior of metric_no_merge/--metric-no-merge,
> since for every metric the events for that metric are being appended
> to the evlist?
TBH, I still cannot understand well parse_groups().
The change above passes &metric_evlist to parse_ids(), as this will only
change the value of metric_evlist itself but not update m->evlist or
n->evlist, this is not right for metric_no_merge case ?
Here I am not sure how to use parse_ids() to parse "m->pctx" but avoid
to overwrite "n->evlist" for the fully contained case.
Thanks,
Leo
next prev parent reply other threads:[~2026-03-27 18:05 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-25 10:24 [PATCH v2] perf stat: Fix crash on arm64 Breno Leitao
2026-03-25 18:25 ` Ian Rogers
2026-03-25 20:59 ` Leo Yan
2026-03-25 22:27 ` Ian Rogers
2026-03-26 16:39 ` Leo Yan
2026-03-26 21:21 ` Ian Rogers
2026-03-27 17:57 ` Leo Yan [this message]
2026-03-27 10:35 ` Breno Leitao
2026-03-27 13:48 ` Arnaldo Melo
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=20260327175713.GD356832@e132581.arm.com \
--to=leo.yan@arm.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=d@ilvokhin.com \
--cc=dyaroshev@meta.com \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jolsa@kernel.org \
--cc=kernel-team@meta.com \
--cc=leitao@debian.org \
--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 \
/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