* [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again
@ 2025-10-29 22:26 Ian Rogers
2025-10-29 22:26 ` [PATCH v1 2/2] perf test: Add test that command line period overrides sysfs/json values Ian Rogers
2025-10-30 5:46 ` [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again Namhyung Kim
0 siblings, 2 replies; 8+ messages in thread
From: Ian Rogers @ 2025-10-29 22:26 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Alexander Shishkin, Jiri Olsa, Ian Rogers,
Adrian Hunter, Kan Liang, James Clark, linux-kernel,
linux-perf-users
The terms for a json event should be weak so they don't override
command line options.
Fixes: 84bae3af20d0 ("perf pmu: Don't eagerly parse event terms")
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/util/pmu.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c
index d597263fab4f..f14f2a12d061 100644
--- a/tools/perf/util/pmu.c
+++ b/tools/perf/util/pmu.c
@@ -802,6 +802,7 @@ static int pmu_aliases_parse_eager(struct perf_pmu *pmu, int sysfs_fd)
static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms)
{
struct parse_events_terms alias_terms;
+ struct parse_events_term *term;
int ret;
parse_events_terms__init(&alias_terms);
@@ -812,6 +813,13 @@ static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms
parse_events_terms__exit(&alias_terms);
return ret;
}
+ list_for_each_entry(term, &alias_terms.terms, list) {
+ /*
+ * Weak terms don't override command line options,
+ * which we don't want for implicit terms in aliases.
+ */
+ term->weak = true;
+ }
list_splice_init(&alias_terms.terms, terms);
parse_events_terms__exit(&alias_terms);
return 0;
--
2.51.1.851.g4ebd6896fd-goog
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH v1 2/2] perf test: Add test that command line period overrides sysfs/json values 2025-10-29 22:26 [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again Ian Rogers @ 2025-10-29 22:26 ` Ian Rogers 2025-11-04 3:37 ` Namhyung Kim 2025-10-30 5:46 ` [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again Namhyung Kim 1 sibling, 1 reply; 8+ messages in thread From: Ian Rogers @ 2025-10-29 22:26 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Namhyung Kim, Alexander Shishkin, Jiri Olsa, Ian Rogers, Adrian Hunter, Kan Liang, James Clark, linux-kernel, linux-perf-users The behavior of weak terms is subtle, add a test that they aren't accidentally broken. Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/tests/shell/record_weak_term.sh | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100755 tools/perf/tests/shell/record_weak_term.sh diff --git a/tools/perf/tests/shell/record_weak_term.sh b/tools/perf/tests/shell/record_weak_term.sh new file mode 100755 index 000000000000..7b747b383796 --- /dev/null +++ b/tools/perf/tests/shell/record_weak_term.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# record weak terms +# SPDX-License-Identifier: GPL-2.0 +# Test that command line options override weak terms from sysfs or inbuilt json. +set -e + +shelldir=$(dirname "$0") +# shellcheck source=lib/setup_python.sh +. "${shelldir}"/lib/setup_python.sh + + +event=$(perf list --json | $PYTHON -c "import json,sys; next((print(e['EventName']) for e in json.load(sys.stdin) if e.get('Encoding') and 'period=' in e.get('Encoding')))") +if [[ "$?" != "0" ]] +then + echo "No sysfs/json events with inbuilt period." + exit 2 +fi + +if ! perf record -c 1000 -vv -e "$event" -o /dev/null true 2>&1 | \ + grep -q -F '{ sample_period, sample_freq } 1000' +then + echo "Unexpected verbose output and sample period" + exit 1 +fi +exit 0 -- 2.51.1.851.g4ebd6896fd-goog ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v1 2/2] perf test: Add test that command line period overrides sysfs/json values 2025-10-29 22:26 ` [PATCH v1 2/2] perf test: Add test that command line period overrides sysfs/json values Ian Rogers @ 2025-11-04 3:37 ` Namhyung Kim 2025-11-04 5:22 ` Ian Rogers 0 siblings, 1 reply; 8+ messages in thread From: Namhyung Kim @ 2025-11-04 3:37 UTC (permalink / raw) To: Ian Rogers Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa, Adrian Hunter, Kan Liang, James Clark, linux-kernel, linux-perf-users On Wed, Oct 29, 2025 at 03:26:38PM -0700, Ian Rogers wrote: > The behavior of weak terms is subtle, add a test that they aren't > accidentally broken. > > Signed-off-by: Ian Rogers <irogers@google.com> > --- > tools/perf/tests/shell/record_weak_term.sh | 25 ++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > create mode 100755 tools/perf/tests/shell/record_weak_term.sh > > diff --git a/tools/perf/tests/shell/record_weak_term.sh b/tools/perf/tests/shell/record_weak_term.sh > new file mode 100755 > index 000000000000..7b747b383796 > --- /dev/null > +++ b/tools/perf/tests/shell/record_weak_term.sh > @@ -0,0 +1,25 @@ > +#!/bin/bash > +# record weak terms > +# SPDX-License-Identifier: GPL-2.0 > +# Test that command line options override weak terms from sysfs or inbuilt json. > +set -e > + > +shelldir=$(dirname "$0") > +# shellcheck source=lib/setup_python.sh > +. "${shelldir}"/lib/setup_python.sh > + > + > +event=$(perf list --json | $PYTHON -c "import json,sys; next((print(e['EventName']) for e in json.load(sys.stdin) if e.get('Encoding') and 'period=' in e.get('Encoding')))") This line is too long and needs some explanation like what's like the original text and what it does. Thanks, Namhyung > +if [[ "$?" != "0" ]] > +then > + echo "No sysfs/json events with inbuilt period." > + exit 2 > +fi > + > +if ! perf record -c 1000 -vv -e "$event" -o /dev/null true 2>&1 | \ > + grep -q -F '{ sample_period, sample_freq } 1000' > +then > + echo "Unexpected verbose output and sample period" > + exit 1 > +fi > +exit 0 > -- > 2.51.1.851.g4ebd6896fd-goog > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 2/2] perf test: Add test that command line period overrides sysfs/json values 2025-11-04 3:37 ` Namhyung Kim @ 2025-11-04 5:22 ` Ian Rogers 2025-11-06 5:50 ` Namhyung Kim 0 siblings, 1 reply; 8+ messages in thread From: Ian Rogers @ 2025-11-04 5:22 UTC (permalink / raw) To: Namhyung Kim Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa, Adrian Hunter, Kan Liang, James Clark, linux-kernel, linux-perf-users On Mon, Nov 3, 2025 at 7:37 PM Namhyung Kim <namhyung@kernel.org> wrote: > > On Wed, Oct 29, 2025 at 03:26:38PM -0700, Ian Rogers wrote: > > The behavior of weak terms is subtle, add a test that they aren't > > accidentally broken. > > > > Signed-off-by: Ian Rogers <irogers@google.com> > > --- > > tools/perf/tests/shell/record_weak_term.sh | 25 ++++++++++++++++++++++ > > 1 file changed, 25 insertions(+) > > create mode 100755 tools/perf/tests/shell/record_weak_term.sh > > > > diff --git a/tools/perf/tests/shell/record_weak_term.sh b/tools/perf/tests/shell/record_weak_term.sh > > new file mode 100755 > > index 000000000000..7b747b383796 > > --- /dev/null > > +++ b/tools/perf/tests/shell/record_weak_term.sh > > @@ -0,0 +1,25 @@ > > +#!/bin/bash > > +# record weak terms > > +# SPDX-License-Identifier: GPL-2.0 > > +# Test that command line options override weak terms from sysfs or inbuilt json. > > +set -e > > + > > +shelldir=$(dirname "$0") > > +# shellcheck source=lib/setup_python.sh > > +. "${shelldir}"/lib/setup_python.sh > > + > > + > > +event=$(perf list --json | $PYTHON -c "import json,sys; next((print(e['EventName']) for e in json.load(sys.stdin) if e.get('Encoding') and 'period=' in e.get('Encoding')))") > > This line is too long Is there a good way to split such a line? > and needs some explanation like what's like the original text and what it does. I thought that was covered in the "if" below: > > +if [[ "$?" != "0" ]] > > +then > > + echo "No sysfs/json events with inbuilt period." > > + exit 2 > > +fi Thanks, Ian > > + > > +if ! perf record -c 1000 -vv -e "$event" -o /dev/null true 2>&1 | \ > > + grep -q -F '{ sample_period, sample_freq } 1000' > > +then > > + echo "Unexpected verbose output and sample period" > > + exit 1 > > +fi > > +exit 0 > > -- > > 2.51.1.851.g4ebd6896fd-goog > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 2/2] perf test: Add test that command line period overrides sysfs/json values 2025-11-04 5:22 ` Ian Rogers @ 2025-11-06 5:50 ` Namhyung Kim 0 siblings, 0 replies; 8+ messages in thread From: Namhyung Kim @ 2025-11-06 5:50 UTC (permalink / raw) To: Ian Rogers Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa, Adrian Hunter, Kan Liang, James Clark, linux-kernel, linux-perf-users On Mon, Nov 03, 2025 at 09:22:00PM -0800, Ian Rogers wrote: > On Mon, Nov 3, 2025 at 7:37 PM Namhyung Kim <namhyung@kernel.org> wrote: > > > > On Wed, Oct 29, 2025 at 03:26:38PM -0700, Ian Rogers wrote: > > > The behavior of weak terms is subtle, add a test that they aren't > > > accidentally broken. > > > > > > Signed-off-by: Ian Rogers <irogers@google.com> > > > --- > > > tools/perf/tests/shell/record_weak_term.sh | 25 ++++++++++++++++++++++ > > > 1 file changed, 25 insertions(+) > > > create mode 100755 tools/perf/tests/shell/record_weak_term.sh > > > > > > diff --git a/tools/perf/tests/shell/record_weak_term.sh b/tools/perf/tests/shell/record_weak_term.sh > > > new file mode 100755 > > > index 000000000000..7b747b383796 > > > --- /dev/null > > > +++ b/tools/perf/tests/shell/record_weak_term.sh > > > @@ -0,0 +1,25 @@ > > > +#!/bin/bash > > > +# record weak terms > > > +# SPDX-License-Identifier: GPL-2.0 > > > +# Test that command line options override weak terms from sysfs or inbuilt json. > > > +set -e > > > + > > > +shelldir=$(dirname "$0") > > > +# shellcheck source=lib/setup_python.sh > > > +. "${shelldir}"/lib/setup_python.sh > > > + > > > + > > > +event=$(perf list --json | $PYTHON -c "import json,sys; next((print(e['EventName']) for e in json.load(sys.stdin) if e.get('Encoding') and 'period=' in e.get('Encoding')))") > > > > This line is too long > > Is there a good way to split such a line? Wouldn't this work? event=$(perf list --json | python -c ' import sys, json for e in json.load(sys.stdin): if e.get("Encoding") and "period=" in e.get("Encoding"): print(e["EventName"])') > > > and needs some explanation like what's like the original text and what it does. > > I thought that was covered in the "if" below: Yeah, but I think it's useful to have an example JSON text. Thanks, Namhyung > > > > +if [[ "$?" != "0" ]] > > > +then > > > + echo "No sysfs/json events with inbuilt period." > > > + exit 2 > > > +fi > > Thanks, > Ian > > > > + > > > +if ! perf record -c 1000 -vv -e "$event" -o /dev/null true 2>&1 | \ > > > + grep -q -F '{ sample_period, sample_freq } 1000' > > > +then > > > + echo "Unexpected verbose output and sample period" > > > + exit 1 > > > +fi > > > +exit 0 > > > -- > > > 2.51.1.851.g4ebd6896fd-goog > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again 2025-10-29 22:26 [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again Ian Rogers 2025-10-29 22:26 ` [PATCH v1 2/2] perf test: Add test that command line period overrides sysfs/json values Ian Rogers @ 2025-10-30 5:46 ` Namhyung Kim 2025-10-30 15:08 ` Ian Rogers 1 sibling, 1 reply; 8+ messages in thread From: Namhyung Kim @ 2025-10-30 5:46 UTC (permalink / raw) To: Ian Rogers Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa, Adrian Hunter, Kan Liang, James Clark, linux-kernel, linux-perf-users Hi Ian, On Wed, Oct 29, 2025 at 03:26:37PM -0700, Ian Rogers wrote: > The terms for a json event should be weak so they don't override > command line options. Can you please give an example command line and the error? Thanks, Namhyung > > Fixes: 84bae3af20d0 ("perf pmu: Don't eagerly parse event terms") > Signed-off-by: Ian Rogers <irogers@google.com> > --- > tools/perf/util/pmu.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > index d597263fab4f..f14f2a12d061 100644 > --- a/tools/perf/util/pmu.c > +++ b/tools/perf/util/pmu.c > @@ -802,6 +802,7 @@ static int pmu_aliases_parse_eager(struct perf_pmu *pmu, int sysfs_fd) > static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms) > { > struct parse_events_terms alias_terms; > + struct parse_events_term *term; > int ret; > > parse_events_terms__init(&alias_terms); > @@ -812,6 +813,13 @@ static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms > parse_events_terms__exit(&alias_terms); > return ret; > } > + list_for_each_entry(term, &alias_terms.terms, list) { > + /* > + * Weak terms don't override command line options, > + * which we don't want for implicit terms in aliases. > + */ > + term->weak = true; > + } > list_splice_init(&alias_terms.terms, terms); > parse_events_terms__exit(&alias_terms); > return 0; > -- > 2.51.1.851.g4ebd6896fd-goog > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again 2025-10-30 5:46 ` [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again Namhyung Kim @ 2025-10-30 15:08 ` Ian Rogers 2025-11-04 3:30 ` Namhyung Kim 0 siblings, 1 reply; 8+ messages in thread From: Ian Rogers @ 2025-10-30 15:08 UTC (permalink / raw) To: Namhyung Kim Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa, Adrian Hunter, Kan Liang, James Clark, linux-kernel, linux-perf-users On Wed, Oct 29, 2025 at 10:47 PM Namhyung Kim <namhyung@kernel.org> wrote: > > Hi Ian, > > On Wed, Oct 29, 2025 at 03:26:37PM -0700, Ian Rogers wrote: > > The terms for a json event should be weak so they don't override > > command line options. > > Can you please give an example command line and the error? Sure, it is also covered in the test. Before: ``` $ perf record -vv -c 1000 -e uops_issued.any -o /dev/null true 2>&1 |grep "{ sample_period, sample_freq }" { sample_period, sample_freq } 200003 { sample_period, sample_freq } 2000003 { sample_period, sample_freq } 1000 ``` After: ``` $ perf record -vv -c 1000 -e uops_issued.any -o /dev/null true 2>&1 |grep "{ sample_period, sample_freq }" { sample_period, sample_freq } 1000 { sample_period, sample_freq } 1000 { sample_period, sample_freq } 1000 ``` Thanks, Ian > Thanks, > Namhyung > > > > > Fixes: 84bae3af20d0 ("perf pmu: Don't eagerly parse event terms") > > Signed-off-by: Ian Rogers <irogers@google.com> > > --- > > tools/perf/util/pmu.c | 8 ++++++++ > > 1 file changed, 8 insertions(+) > > > > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > > index d597263fab4f..f14f2a12d061 100644 > > --- a/tools/perf/util/pmu.c > > +++ b/tools/perf/util/pmu.c > > @@ -802,6 +802,7 @@ static int pmu_aliases_parse_eager(struct perf_pmu *pmu, int sysfs_fd) > > static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms) > > { > > struct parse_events_terms alias_terms; > > + struct parse_events_term *term; > > int ret; > > > > parse_events_terms__init(&alias_terms); > > @@ -812,6 +813,13 @@ static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms > > parse_events_terms__exit(&alias_terms); > > return ret; > > } > > + list_for_each_entry(term, &alias_terms.terms, list) { > > + /* > > + * Weak terms don't override command line options, > > + * which we don't want for implicit terms in aliases. > > + */ > > + term->weak = true; > > + } > > list_splice_init(&alias_terms.terms, terms); > > parse_events_terms__exit(&alias_terms); > > return 0; > > -- > > 2.51.1.851.g4ebd6896fd-goog > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again 2025-10-30 15:08 ` Ian Rogers @ 2025-11-04 3:30 ` Namhyung Kim 0 siblings, 0 replies; 8+ messages in thread From: Namhyung Kim @ 2025-11-04 3:30 UTC (permalink / raw) To: Ian Rogers Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo, Alexander Shishkin, Jiri Olsa, Adrian Hunter, Kan Liang, James Clark, linux-kernel, linux-perf-users On Thu, Oct 30, 2025 at 08:08:02AM -0700, Ian Rogers wrote: > On Wed, Oct 29, 2025 at 10:47 PM Namhyung Kim <namhyung@kernel.org> wrote: > > > > Hi Ian, > > > > On Wed, Oct 29, 2025 at 03:26:37PM -0700, Ian Rogers wrote: > > > The terms for a json event should be weak so they don't override > > > command line options. > > > > Can you please give an example command line and the error? > > Sure, it is also covered in the test. Yep, but lazy maintainers want to see it in the commit message. :) > > Before: > ``` > $ perf record -vv -c 1000 -e uops_issued.any -o /dev/null true 2>&1 > |grep "{ sample_period, sample_freq }" > { sample_period, sample_freq } 200003 > { sample_period, sample_freq } 2000003 > { sample_period, sample_freq } 1000 > ``` > > After: > ``` > $ perf record -vv -c 1000 -e uops_issued.any -o /dev/null true 2>&1 > |grep "{ sample_period, sample_freq }" > { sample_period, sample_freq } 1000 > { sample_period, sample_freq } 1000 > { sample_period, sample_freq } 1000 > ``` Thanks, it ignored command line options. I can see the default period is in the JSON description. $ perf list -j | grep -C 5 uops_issued.any "Encoding": "cpu/event=0xb1,period=2000003,umask=0x10/" }, { "Unit": "cpu", "Topic": "pipeline", "EventName": "uops_issued.any", "EventType": "Kernel PMU event", "BriefDescription": "Uops that RAT issues to RS", "PublicDescription": "Counts the number of uops that the Resource Allocation Table (RAT) issues to the Reservation Station (RS)", "Encoding": "cpu/event=0xe,period=2000003,umask=1/" }, It'd be great if you could include this kind of info in the commit log so that others can understand the problem clearly and test the patch easily. Thanks, Namhyung > > > > > > Fixes: 84bae3af20d0 ("perf pmu: Don't eagerly parse event terms") > > > Signed-off-by: Ian Rogers <irogers@google.com> > > > --- > > > tools/perf/util/pmu.c | 8 ++++++++ > > > 1 file changed, 8 insertions(+) > > > > > > diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c > > > index d597263fab4f..f14f2a12d061 100644 > > > --- a/tools/perf/util/pmu.c > > > +++ b/tools/perf/util/pmu.c > > > @@ -802,6 +802,7 @@ static int pmu_aliases_parse_eager(struct perf_pmu *pmu, int sysfs_fd) > > > static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms) > > > { > > > struct parse_events_terms alias_terms; > > > + struct parse_events_term *term; > > > int ret; > > > > > > parse_events_terms__init(&alias_terms); > > > @@ -812,6 +813,13 @@ static int pmu_alias_terms(struct perf_pmu_alias *alias, struct list_head *terms > > > parse_events_terms__exit(&alias_terms); > > > return ret; > > > } > > > + list_for_each_entry(term, &alias_terms.terms, list) { > > > + /* > > > + * Weak terms don't override command line options, > > > + * which we don't want for implicit terms in aliases. > > > + */ > > > + term->weak = true; > > > + } > > > list_splice_init(&alias_terms.terms, terms); > > > parse_events_terms__exit(&alias_terms); > > > return 0; > > > -- > > > 2.51.1.851.g4ebd6896fd-goog > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-11-06 5:50 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-10-29 22:26 [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again Ian Rogers 2025-10-29 22:26 ` [PATCH v1 2/2] perf test: Add test that command line period overrides sysfs/json values Ian Rogers 2025-11-04 3:37 ` Namhyung Kim 2025-11-04 5:22 ` Ian Rogers 2025-11-06 5:50 ` Namhyung Kim 2025-10-30 5:46 ` [PATCH v1 1/2] perf pmu: Make pmu_alias_terms weak again Namhyung Kim 2025-10-30 15:08 ` Ian Rogers 2025-11-04 3:30 ` Namhyung Kim
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).