* [PATCH v2 0/3] Test/uniquification related fixes
@ 2025-09-18 22:21 Ian Rogers
2025-09-18 22:22 ` [PATCH v2 1/3] perf test: Don't leak workload gopipe in PERF_RECORD_* Ian Rogers
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Ian Rogers @ 2025-09-18 22:21 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, Athira Rajeev,
Chun-Tse Shao, James Clark, Howard Chu, linux-kernel,
linux-perf-users
Failures discovered running as non-root and with v6.17-rc1 changes.
v2: Fix uniquification test when running as non-root. Rebase on
tmp.perf-tools-next where the first patch was already merged.
Ian Rogers (3):
perf test: Don't leak workload gopipe in PERF_RECORD_*
perf evsel: Fix uniquification when PMU given without suffix
perf test: Avoid uncore_imc/clockticks in uniquification test
tools/perf/tests/perf-record.c | 4 +
.../tests/shell/stat+event_uniquifying.sh | 109 ++++++++----------
tools/perf/util/evsel.c | 28 +++--
3 files changed, 71 insertions(+), 70 deletions(-)
--
2.51.0.470.ga7dc726c21-goog
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/3] perf test: Don't leak workload gopipe in PERF_RECORD_*
2025-09-18 22:21 [PATCH v2 0/3] Test/uniquification related fixes Ian Rogers
@ 2025-09-18 22:22 ` Ian Rogers
2025-09-18 22:22 ` [PATCH v2 2/3] perf evsel: Fix uniquification when PMU given without suffix Ian Rogers
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Ian Rogers @ 2025-09-18 22:22 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, Athira Rajeev,
Chun-Tse Shao, James Clark, Howard Chu, linux-kernel,
linux-perf-users
The test starts a workload and then opens events. If the events fail
to open, for example because of perf_event_paranoid, the gopipe of the
workload is leaked and the file descriptor leak check fails when the
test exits. To avoid this cancel the workload when opening the events
fails.
Before:
```
$ perf test -vv 7
7: PERF_RECORD_* events & perf_sample fields:
--- start ---
test child forked, pid 1189568
Using CPUID GenuineIntel-6-B7-1
------------------------------------------------------------
perf_event_attr:
type 0 (PERF_TYPE_HARDWARE)
config 0xa00000000 (cpu_atom/PERF_COUNT_HW_CPU_CYCLES/)
disabled 1
------------------------------------------------------------
sys_perf_event_open: pid 0 cpu -1 group_fd -1 flags 0x8
sys_perf_event_open failed, error -13
------------------------------------------------------------
perf_event_attr:
type 0 (PERF_TYPE_HARDWARE)
config 0xa00000000 (cpu_atom/PERF_COUNT_HW_CPU_CYCLES/)
disabled 1
exclude_kernel 1
------------------------------------------------------------
sys_perf_event_open: pid 0 cpu -1 group_fd -1 flags 0x8 = 3
------------------------------------------------------------
perf_event_attr:
type 0 (PERF_TYPE_HARDWARE)
config 0x400000000 (cpu_core/PERF_COUNT_HW_CPU_CYCLES/)
disabled 1
------------------------------------------------------------
sys_perf_event_open: pid 0 cpu -1 group_fd -1 flags 0x8
sys_perf_event_open failed, error -13
------------------------------------------------------------
perf_event_attr:
type 0 (PERF_TYPE_HARDWARE)
config 0x400000000 (cpu_core/PERF_COUNT_HW_CPU_CYCLES/)
disabled 1
exclude_kernel 1
------------------------------------------------------------
sys_perf_event_open: pid 0 cpu -1 group_fd -1 flags 0x8 = 3
Attempt to add: software/cpu-clock/
..after resolving event: software/config=0/
cpu-clock -> software/cpu-clock/
------------------------------------------------------------
perf_event_attr:
type 1 (PERF_TYPE_SOFTWARE)
size 136
config 0x9 (PERF_COUNT_SW_DUMMY)
sample_type IP|TID|TIME|CPU
read_format ID|LOST
disabled 1
inherit 1
mmap 1
comm 1
enable_on_exec 1
task 1
sample_id_all 1
mmap2 1
comm_exec 1
ksymbol 1
bpf_event 1
{ wakeup_events, wakeup_watermark } 1
------------------------------------------------------------
sys_perf_event_open: pid 1189569 cpu 0 group_fd -1 flags 0x8
sys_perf_event_open failed, error -13
perf_evlist__open: Permission denied
---- end(-2) ----
Leak of file descriptor 6 that opened: 'pipe:[14200347]'
---- unexpected signal (6) ----
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
Failed to read build ID for //anon
#0 0x565358f6666e in child_test_sig_handler builtin-test.c:311
#1 0x7f29ce849df0 in __restore_rt libc_sigaction.c:0
#2 0x7f29ce89e95c in __pthread_kill_implementation pthread_kill.c:44
#3 0x7f29ce849cc2 in raise raise.c:27
#4 0x7f29ce8324ac in abort abort.c:81
#5 0x565358f662d4 in check_leaks builtin-test.c:226
#6 0x565358f6682e in run_test_child builtin-test.c:344
#7 0x565358ef7121 in start_command run-command.c:128
#8 0x565358f67273 in start_test builtin-test.c:545
#9 0x565358f6771d in __cmd_test builtin-test.c:647
#10 0x565358f682bd in cmd_test builtin-test.c:849
#11 0x565358ee5ded in run_builtin perf.c:349
#12 0x565358ee6085 in handle_internal_command perf.c:401
#13 0x565358ee61de in run_argv perf.c:448
#14 0x565358ee6527 in main perf.c:555
#15 0x7f29ce833ca8 in __libc_start_call_main libc_start_call_main.h:74
#16 0x7f29ce833d65 in __libc_start_main@@GLIBC_2.34 libc-start.c:128
#17 0x565358e391c1 in _start perf[851c1]
7: PERF_RECORD_* events & perf_sample fields : FAILED!
```
After:
```
$ perf test 7
7: PERF_RECORD_* events & perf_sample fields : Skip (permissions)
```
Fixes: 16d00fee7038 ("perf tests: Move test__PERF_RECORD into separate object")
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/tests/perf-record.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tools/perf/tests/perf-record.c b/tools/perf/tests/perf-record.c
index d895df037707..efbd9cd60c63 100644
--- a/tools/perf/tests/perf-record.c
+++ b/tools/perf/tests/perf-record.c
@@ -130,6 +130,7 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
if (err < 0) {
pr_debug("sched__get_first_possible_cpu: %s\n",
str_error_r(errno, sbuf, sizeof(sbuf)));
+ evlist__cancel_workload(evlist);
goto out_delete_evlist;
}
@@ -141,6 +142,7 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
if (sched_setaffinity(evlist->workload.pid, cpu_mask_size, cpu_mask) < 0) {
pr_debug("sched_setaffinity: %s\n",
str_error_r(errno, sbuf, sizeof(sbuf)));
+ evlist__cancel_workload(evlist);
goto out_delete_evlist;
}
@@ -152,6 +154,7 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
if (err < 0) {
pr_debug("perf_evlist__open: %s\n",
str_error_r(errno, sbuf, sizeof(sbuf)));
+ evlist__cancel_workload(evlist);
goto out_delete_evlist;
}
@@ -164,6 +167,7 @@ static int test__PERF_RECORD(struct test_suite *test __maybe_unused, int subtest
if (err < 0) {
pr_debug("evlist__mmap: %s\n",
str_error_r(errno, sbuf, sizeof(sbuf)));
+ evlist__cancel_workload(evlist);
goto out_delete_evlist;
}
--
2.51.0.470.ga7dc726c21-goog
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 2/3] perf evsel: Fix uniquification when PMU given without suffix
2025-09-18 22:21 [PATCH v2 0/3] Test/uniquification related fixes Ian Rogers
2025-09-18 22:22 ` [PATCH v2 1/3] perf test: Don't leak workload gopipe in PERF_RECORD_* Ian Rogers
@ 2025-09-18 22:22 ` Ian Rogers
2025-09-18 22:22 ` [PATCH v2 3/3] perf test: Avoid uncore_imc/clockticks in uniquification test Ian Rogers
2025-09-19 19:51 ` [PATCH v2 0/3] Test/uniquification related fixes Arnaldo Carvalho de Melo
3 siblings, 0 replies; 8+ messages in thread
From: Ian Rogers @ 2025-09-18 22:22 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, Athira Rajeev,
Chun-Tse Shao, James Clark, Howard Chu, linux-kernel,
linux-perf-users
The PMU name is appearing twice in:
```
$ perf stat -e uncore_imc_free_running/data_total/ -A true
Performance counter stats for 'system wide':
CPU0 1.57 MiB uncore_imc_free_running_0/uncore_imc_free_running,data_total/
CPU0 1.58 MiB uncore_imc_free_running_1/uncore_imc_free_running,data_total/
0.000892376 seconds time elapsed
```
Use the pmu_name_len_no_suffix to avoid this problem.
Fixes: 7d45f402d311 ("perf evlist: Make uniquifying counter names consistent")
Signed-off-by: Ian Rogers <irogers@google.com>
---
tools/perf/util/evsel.c | 28 ++++++++++++++++++----------
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 6a31f9699b49..6947072598b1 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -4053,9 +4053,9 @@ bool evsel__set_needs_uniquify(struct evsel *counter, const struct perf_stat_con
void evsel__uniquify_counter(struct evsel *counter)
{
- const char *name, *pmu_name;
- char *new_name, *config;
- int ret;
+ const char *name, *pmu_name, *config;
+ char *new_name;
+ int len, ret;
/* No uniquification necessary. */
if (!counter->needs_uniquify)
@@ -4069,15 +4069,23 @@ void evsel__uniquify_counter(struct evsel *counter)
counter->uniquified_name = true;
name = evsel__name(counter);
+ config = strchr(name, '/');
pmu_name = counter->pmu->name;
- /* Already prefixed by the PMU name. */
- if (!strncmp(name, pmu_name, strlen(pmu_name)))
- return;
- config = strchr(name, '/');
- if (config) {
- int len = config - name;
+ /* Already prefixed by the PMU name? */
+ len = pmu_name_len_no_suffix(pmu_name);
+
+ if (!strncmp(name, pmu_name, len)) {
+ /*
+ * If the PMU name is there, then there is no sense in not
+ * having a slash. Do this for robustness.
+ */
+ if (config == NULL)
+ config = name - 1;
+ ret = asprintf(&new_name, "%s/%s", pmu_name, config + 1);
+ } else if (config) {
+ len = config - name;
if (config[1] == '/') {
/* case: event// */
ret = asprintf(&new_name, "%s/%.*s/%s", pmu_name, len, name, config + 2);
@@ -4089,7 +4097,7 @@ void evsel__uniquify_counter(struct evsel *counter)
config = strchr(name, ':');
if (config) {
/* case: event:.. */
- int len = config - name;
+ len = config - name;
ret = asprintf(&new_name, "%s/%.*s/%s", pmu_name, len, name, config + 1);
} else {
--
2.51.0.470.ga7dc726c21-goog
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 3/3] perf test: Avoid uncore_imc/clockticks in uniquification test
2025-09-18 22:21 [PATCH v2 0/3] Test/uniquification related fixes Ian Rogers
2025-09-18 22:22 ` [PATCH v2 1/3] perf test: Don't leak workload gopipe in PERF_RECORD_* Ian Rogers
2025-09-18 22:22 ` [PATCH v2 2/3] perf evsel: Fix uniquification when PMU given without suffix Ian Rogers
@ 2025-09-18 22:22 ` Ian Rogers
2025-09-26 9:00 ` Qiao Zhao
2025-09-19 19:51 ` [PATCH v2 0/3] Test/uniquification related fixes Arnaldo Carvalho de Melo
3 siblings, 1 reply; 8+ messages in thread
From: Ian Rogers @ 2025-09-18 22:22 UTC (permalink / raw)
To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Ian Rogers, Adrian Hunter, Kan Liang, Athira Rajeev,
Chun-Tse Shao, James Clark, Howard Chu, linux-kernel,
linux-perf-users
The detection of uncore_imc may happen for free running PMUs and the
clockticks event may be present on uncore_clock. Rewrite the test to
detect duplicated/deduplicated events from perf list, not hardcoded to
uncore_imc.
If perf stat fails then assume it is permissions and skip the test.
Fixes: 070b315333ee ("perf test: Restrict uniquifying test to machines with 'uncore_imc'")
Signed-off-by: Ian Rogers <irogers@google.com>
---
.../tests/shell/stat+event_uniquifying.sh | 109 ++++++++----------
1 file changed, 49 insertions(+), 60 deletions(-)
diff --git a/tools/perf/tests/shell/stat+event_uniquifying.sh b/tools/perf/tests/shell/stat+event_uniquifying.sh
index bf54bd6c3e2e..b5dec6b6da36 100755
--- a/tools/perf/tests/shell/stat+event_uniquifying.sh
+++ b/tools/perf/tests/shell/stat+event_uniquifying.sh
@@ -4,74 +4,63 @@
set -e
-stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
-perf_tool=perf
err=0
+stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
-test_event_uniquifying() {
- # We use `clockticks` in `uncore_imc` to verify the uniquify behavior.
- pmu="uncore_imc"
- event="clockticks"
-
- # If the `-A` option is added, the event should be uniquified.
- #
- # $perf list -v clockticks
- #
- # List of pre-defined events (to be used in -e or -M):
- #
- # uncore_imc_0/clockticks/ [Kernel PMU event]
- # uncore_imc_1/clockticks/ [Kernel PMU event]
- # uncore_imc_2/clockticks/ [Kernel PMU event]
- # uncore_imc_3/clockticks/ [Kernel PMU event]
- # uncore_imc_4/clockticks/ [Kernel PMU event]
- # uncore_imc_5/clockticks/ [Kernel PMU event]
- #
- # ...
- #
- # $perf stat -e clockticks -A -- true
- #
- # Performance counter stats for 'system wide':
- #
- # CPU0 3,773,018 uncore_imc_0/clockticks/
- # CPU0 3,609,025 uncore_imc_1/clockticks/
- # CPU0 0 uncore_imc_2/clockticks/
- # CPU0 3,230,009 uncore_imc_3/clockticks/
- # CPU0 3,049,897 uncore_imc_4/clockticks/
- # CPU0 0 uncore_imc_5/clockticks/
- #
- # 0.002029828 seconds time elapsed
-
- echo "stat event uniquifying test"
- uniquified_event_array=()
+cleanup() {
+ rm -f "${stat_output}"
- # Skip if the machine does not have `uncore_imc` device.
- if ! ${perf_tool} list pmu | grep -q ${pmu}; then
- echo "Target does not support PMU ${pmu} [Skipped]"
- err=2
- return
- fi
+ trap - EXIT TERM INT
+}
- # Check how many uniquified events.
- while IFS= read -r line; do
- uniquified_event=$(echo "$line" | awk '{print $1}')
- uniquified_event_array+=("${uniquified_event}")
- done < <(${perf_tool} list -v ${event} | grep ${pmu})
+trap_cleanup() {
+ echo "Unexpected signal in ${FUNCNAME[1]}"
+ cleanup
+ exit 1
+}
+trap trap_cleanup EXIT TERM INT
- perf_command="${perf_tool} stat -e $event -A -o ${stat_output} -- true"
- $perf_command
+test_event_uniquifying() {
+ echo "Uniquification of PMU sysfs events test"
- # Check the output contains all uniquified events.
- for uniquified_event in "${uniquified_event_array[@]}"; do
- if ! cat "${stat_output}" | grep -q "${uniquified_event}"; then
- echo "Event is not uniquified [Failed]"
- echo "${perf_command}"
- cat "${stat_output}"
- err=1
- break
- fi
+ # Read events from perf list with and without -v. With -v the duplicate PMUs
+ # aren't deduplicated. Note, json events are listed by perf list without a
+ # PMU.
+ read -ra pmu_events <<< "$(perf list --raw pmu)"
+ read -ra pmu_v_events <<< "$(perf list -v --raw pmu)"
+ # For all non-deduplicated events.
+ for pmu_v_event in "${pmu_v_events[@]}"; do
+ # If the event matches an event in the deduplicated events then it musn't
+ # be an event with duplicate PMUs, continue the outer loop.
+ for pmu_event in "${pmu_events[@]}"; do
+ if [[ "$pmu_v_event" == "$pmu_event" ]]; then
+ continue 2
+ fi
+ done
+ # Strip the suffix from the non-deduplicated event's PMU.
+ event=$(echo "$pmu_v_event" | sed -E 's/_[0-9]+//')
+ for pmu_event in "${pmu_events[@]}"; do
+ if [[ "$event" == "$pmu_event" ]]; then
+ echo "Testing event ${event} is uniquified to ${pmu_v_event}"
+ if ! perf stat -e "$event" -A -o ${stat_output} -- true; then
+ echo "Error running perf stat for event '$event' [Skip]"
+ if [ $err = 0 ]; then
+ err=2
+ fi
+ continue
+ fi
+ # Ensure the non-deduplicated event appears in the output.
+ if ! grep -q "${pmu_v_event}" "${stat_output}"; then
+ echo "Uniquification of PMU sysfs events test [Failed]"
+ cat "${stat_output}"
+ err=1
+ fi
+ break
+ fi
+ done
done
}
test_event_uniquifying
-rm -f "${stat_output}"
+cleanup
exit $err
--
2.51.0.470.ga7dc726c21-goog
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 0/3] Test/uniquification related fixes
2025-09-18 22:21 [PATCH v2 0/3] Test/uniquification related fixes Ian Rogers
` (2 preceding siblings ...)
2025-09-18 22:22 ` [PATCH v2 3/3] perf test: Avoid uncore_imc/clockticks in uniquification test Ian Rogers
@ 2025-09-19 19:51 ` Arnaldo Carvalho de Melo
3 siblings, 0 replies; 8+ messages in thread
From: Arnaldo Carvalho de Melo @ 2025-09-19 19:51 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Namhyung Kim, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Adrian Hunter, Kan Liang,
Athira Rajeev, Chun-Tse Shao, James Clark, Howard Chu,
linux-kernel, linux-perf-users
On Thu, Sep 18, 2025 at 03:21:59PM -0700, Ian Rogers wrote:
> Failures discovered running as non-root and with v6.17-rc1 changes.
>
> v2: Fix uniquification test when running as non-root. Rebase on
> tmp.perf-tools-next where the first patch was already merged.
Thanks, all reproduced before/after and applied.
- Arnaldo
> Ian Rogers (3):
> perf test: Don't leak workload gopipe in PERF_RECORD_*
> perf evsel: Fix uniquification when PMU given without suffix
> perf test: Avoid uncore_imc/clockticks in uniquification test
>
> tools/perf/tests/perf-record.c | 4 +
> .../tests/shell/stat+event_uniquifying.sh | 109 ++++++++----------
> tools/perf/util/evsel.c | 28 +++--
> 3 files changed, 71 insertions(+), 70 deletions(-)
>
> --
> 2.51.0.470.ga7dc726c21-goog
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/3] perf test: Avoid uncore_imc/clockticks in uniquification test
2025-09-18 22:22 ` [PATCH v2 3/3] perf test: Avoid uncore_imc/clockticks in uniquification test Ian Rogers
@ 2025-09-26 9:00 ` Qiao Zhao
2025-09-26 16:21 ` Ian Rogers
0 siblings, 1 reply; 8+ messages in thread
From: Qiao Zhao @ 2025-09-26 9:00 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Adrian Hunter, Kan Liang, Athira Rajeev, Chun-Tse Shao,
James Clark, Howard Chu, linux-kernel, linux-perf-users
Hi Ian,
I tested your patch (latest linux-next code + your patch) on hybrid
CPU machine {CPU Model name: 12th Gen Intel(R) Core(TM) i7-12800HE}
and failed,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# perf test -vv "perf stat events uniquifying"
95: perf stat events uniquifying:
--- start ---
test child forked, pid 21799
Uniquification of PMU sysfs events test
Testing event uncore_imc_free_running/data_read/ is uniquified to
uncore_imc_free_running_0/data_read/
Uniquification of PMU sysfs events test [Failed]
# started on Fri Sep 26 04:49:54 2025
Performance counter stats for 'system wide':
CPU0 1.47 MiB
uncore_imc_free_running_0/uncore_imc_free_running,data_read/
CPU0 1.47 MiB
uncore_imc_free_running_1/uncore_imc_free_running,data_read/
0.000925108 seconds time elapsed
Testing event uncore_imc_free_running/data_total/ is uniquified to
uncore_imc_free_running_0/data_total/
Uniquification of PMU sysfs events test [Failed]
# started on Fri Sep 26 04:49:54 2025
Performance counter stats for 'system wide':
CPU0 0.59 MiB
uncore_imc_free_running_0/uncore_imc_free_running,data_total/
CPU0 0.58 MiB
uncore_imc_free_running_1/uncore_imc_free_running,data_total/
0.000969877 seconds time elapsed
Testing event uncore_imc_free_running/data_write/ is uniquified to
uncore_imc_free_running_0/data_write/
Uniquification of PMU sysfs events test [Failed]
# started on Fri Sep 26 04:49:54 2025
Performance counter stats for 'system wide':
CPU0 0.00 MiB
uncore_imc_free_running_0/uncore_imc_free_running,data_write/
CPU0 0.00 MiB
uncore_imc_free_running_1/uncore_imc_free_running,data_write/
0.001183888 seconds time elapsed
Testing event uncore_imc_free_running/data_read/ is uniquified to
uncore_imc_free_running_1/data_read/
Uniquification of PMU sysfs events test [Failed]
# started on Fri Sep 26 04:49:54 2025
Performance counter stats for 'system wide':
CPU0 0.29 MiB
uncore_imc_free_running_0/uncore_imc_free_running,data_read/
CPU0 0.29 MiB
uncore_imc_free_running_1/uncore_imc_free_running,data_read/
0.000710088 seconds time elapsed
Testing event uncore_imc_free_running/data_total/ is uniquified to
uncore_imc_free_running_1/data_total/
Uniquification of PMU sysfs events test [Failed]
# started on Fri Sep 26 04:49:54 2025
Performance counter stats for 'system wide':
CPU0 0.62 MiB
uncore_imc_free_running_0/uncore_imc_free_running,data_total/
CPU0 0.67 MiB
uncore_imc_free_running_1/uncore_imc_free_running,data_total/
0.000959074 seconds time elapsed
Testing event uncore_imc_free_running/data_write/ is uniquified to
uncore_imc_free_running_1/data_write/
Uniquification of PMU sysfs events test [Failed]
# started on Fri Sep 26 04:49:54 2025
Performance counter stats for 'system wide':
CPU0 0.23 MiB
uncore_imc_free_running_0/uncore_imc_free_running,data_write/
CPU0 0.23 MiB
uncore_imc_free_running_1/uncore_imc_free_running,data_write/
0.000775028 seconds time elapsed
---- end(-1) ----
95: perf stat events uniquifying : FAILED!
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# ls -la /sys/bus/event_source/devices/uncore_imc_free_running_*/events/
/sys/bus/event_source/devices/uncore_imc_free_running_0/events/:
total 0
drwxr-xr-x. 2 root root 0 Sep 26 04:57 .
drwxr-xr-x. 5 root root 0 Sep 26 01:49 ..
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_read
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.scale
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.unit
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_total
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.scale
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.unit
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_write
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.scale
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.unit
/sys/bus/event_source/devices/uncore_imc_free_running_1/events/:
total 0
drwxr-xr-x. 2 root root 0 Sep 26 04:57 .
drwxr-xr-x. 5 root root 0 Sep 26 01:49 ..
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_read
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.scale
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.unit
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_total
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.scale
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.unit
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_write
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.scale
-r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.unit
- Qiao
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
On Fri, Sep 19, 2025 at 6:22 AM Ian Rogers <irogers@google.com> wrote:
>
> The detection of uncore_imc may happen for free running PMUs and the
> clockticks event may be present on uncore_clock. Rewrite the test to
> detect duplicated/deduplicated events from perf list, not hardcoded to
> uncore_imc.
>
> If perf stat fails then assume it is permissions and skip the test.
>
> Fixes: 070b315333ee ("perf test: Restrict uniquifying test to machines with 'uncore_imc'")
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
> .../tests/shell/stat+event_uniquifying.sh | 109 ++++++++----------
> 1 file changed, 49 insertions(+), 60 deletions(-)
>
> diff --git a/tools/perf/tests/shell/stat+event_uniquifying.sh b/tools/perf/tests/shell/stat+event_uniquifying.sh
> index bf54bd6c3e2e..b5dec6b6da36 100755
> --- a/tools/perf/tests/shell/stat+event_uniquifying.sh
> +++ b/tools/perf/tests/shell/stat+event_uniquifying.sh
> @@ -4,74 +4,63 @@
>
> set -e
>
> -stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
> -perf_tool=perf
> err=0
> +stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
>
> -test_event_uniquifying() {
> - # We use `clockticks` in `uncore_imc` to verify the uniquify behavior.
> - pmu="uncore_imc"
> - event="clockticks"
> -
> - # If the `-A` option is added, the event should be uniquified.
> - #
> - # $perf list -v clockticks
> - #
> - # List of pre-defined events (to be used in -e or -M):
> - #
> - # uncore_imc_0/clockticks/ [Kernel PMU event]
> - # uncore_imc_1/clockticks/ [Kernel PMU event]
> - # uncore_imc_2/clockticks/ [Kernel PMU event]
> - # uncore_imc_3/clockticks/ [Kernel PMU event]
> - # uncore_imc_4/clockticks/ [Kernel PMU event]
> - # uncore_imc_5/clockticks/ [Kernel PMU event]
> - #
> - # ...
> - #
> - # $perf stat -e clockticks -A -- true
> - #
> - # Performance counter stats for 'system wide':
> - #
> - # CPU0 3,773,018 uncore_imc_0/clockticks/
> - # CPU0 3,609,025 uncore_imc_1/clockticks/
> - # CPU0 0 uncore_imc_2/clockticks/
> - # CPU0 3,230,009 uncore_imc_3/clockticks/
> - # CPU0 3,049,897 uncore_imc_4/clockticks/
> - # CPU0 0 uncore_imc_5/clockticks/
> - #
> - # 0.002029828 seconds time elapsed
> -
> - echo "stat event uniquifying test"
> - uniquified_event_array=()
> +cleanup() {
> + rm -f "${stat_output}"
>
> - # Skip if the machine does not have `uncore_imc` device.
> - if ! ${perf_tool} list pmu | grep -q ${pmu}; then
> - echo "Target does not support PMU ${pmu} [Skipped]"
> - err=2
> - return
> - fi
> + trap - EXIT TERM INT
> +}
>
> - # Check how many uniquified events.
> - while IFS= read -r line; do
> - uniquified_event=$(echo "$line" | awk '{print $1}')
> - uniquified_event_array+=("${uniquified_event}")
> - done < <(${perf_tool} list -v ${event} | grep ${pmu})
> +trap_cleanup() {
> + echo "Unexpected signal in ${FUNCNAME[1]}"
> + cleanup
> + exit 1
> +}
> +trap trap_cleanup EXIT TERM INT
>
> - perf_command="${perf_tool} stat -e $event -A -o ${stat_output} -- true"
> - $perf_command
> +test_event_uniquifying() {
> + echo "Uniquification of PMU sysfs events test"
>
> - # Check the output contains all uniquified events.
> - for uniquified_event in "${uniquified_event_array[@]}"; do
> - if ! cat "${stat_output}" | grep -q "${uniquified_event}"; then
> - echo "Event is not uniquified [Failed]"
> - echo "${perf_command}"
> - cat "${stat_output}"
> - err=1
> - break
> - fi
> + # Read events from perf list with and without -v. With -v the duplicate PMUs
> + # aren't deduplicated. Note, json events are listed by perf list without a
> + # PMU.
> + read -ra pmu_events <<< "$(perf list --raw pmu)"
> + read -ra pmu_v_events <<< "$(perf list -v --raw pmu)"
> + # For all non-deduplicated events.
> + for pmu_v_event in "${pmu_v_events[@]}"; do
> + # If the event matches an event in the deduplicated events then it musn't
> + # be an event with duplicate PMUs, continue the outer loop.
> + for pmu_event in "${pmu_events[@]}"; do
> + if [[ "$pmu_v_event" == "$pmu_event" ]]; then
> + continue 2
> + fi
> + done
> + # Strip the suffix from the non-deduplicated event's PMU.
> + event=$(echo "$pmu_v_event" | sed -E 's/_[0-9]+//')
> + for pmu_event in "${pmu_events[@]}"; do
> + if [[ "$event" == "$pmu_event" ]]; then
> + echo "Testing event ${event} is uniquified to ${pmu_v_event}"
> + if ! perf stat -e "$event" -A -o ${stat_output} -- true; then
> + echo "Error running perf stat for event '$event' [Skip]"
> + if [ $err = 0 ]; then
> + err=2
> + fi
> + continue
> + fi
> + # Ensure the non-deduplicated event appears in the output.
> + if ! grep -q "${pmu_v_event}" "${stat_output}"; then
> + echo "Uniquification of PMU sysfs events test [Failed]"
> + cat "${stat_output}"
> + err=1
> + fi
> + break
> + fi
> + done
> done
> }
>
> test_event_uniquifying
> -rm -f "${stat_output}"
> +cleanup
> exit $err
> --
> 2.51.0.470.ga7dc726c21-goog
>
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/3] perf test: Avoid uncore_imc/clockticks in uniquification test
2025-09-26 9:00 ` Qiao Zhao
@ 2025-09-26 16:21 ` Ian Rogers
2025-09-29 2:39 ` Qiao Zhao
0 siblings, 1 reply; 8+ messages in thread
From: Ian Rogers @ 2025-09-26 16:21 UTC (permalink / raw)
To: Qiao Zhao
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Adrian Hunter, Kan Liang, Athira Rajeev, Chun-Tse Shao,
James Clark, Howard Chu, linux-kernel, linux-perf-users
On Fri, Sep 26, 2025 at 2:00 AM Qiao Zhao <qzhao@redhat.com> wrote:
>
> Hi Ian,
>
> I tested your patch (latest linux-next code + your patch) on hybrid
> CPU machine {CPU Model name: 12th Gen Intel(R) Core(TM) i7-12800HE}
> and failed,
Hi Qiao,
in your output is:
uncore_imc_free_running_0/uncore_imc_free_running,data_total/
ie the uncore PMU is reported twice. This is fixed in the immediately
prior patch in this series:
https://lore.kernel.org/lkml/20250918222202.1353854-3-irogers@google.com/
Thanks,
Ian
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> # perf test -vv "perf stat events uniquifying"
> 95: perf stat events uniquifying:
> --- start ---
> test child forked, pid 21799
> Uniquification of PMU sysfs events test
> Testing event uncore_imc_free_running/data_read/ is uniquified to
> uncore_imc_free_running_0/data_read/
> Uniquification of PMU sysfs events test [Failed]
> # started on Fri Sep 26 04:49:54 2025
>
>
> Performance counter stats for 'system wide':
>
> CPU0 1.47 MiB
> uncore_imc_free_running_0/uncore_imc_free_running,data_read/
> CPU0 1.47 MiB
> uncore_imc_free_running_1/uncore_imc_free_running,data_read/
>
> 0.000925108 seconds time elapsed
>
> Testing event uncore_imc_free_running/data_total/ is uniquified to
> uncore_imc_free_running_0/data_total/
> Uniquification of PMU sysfs events test [Failed]
> # started on Fri Sep 26 04:49:54 2025
>
>
> Performance counter stats for 'system wide':
>
> CPU0 0.59 MiB
> uncore_imc_free_running_0/uncore_imc_free_running,data_total/
> CPU0 0.58 MiB
> uncore_imc_free_running_1/uncore_imc_free_running,data_total/
>
> 0.000969877 seconds time elapsed
>
> Testing event uncore_imc_free_running/data_write/ is uniquified to
> uncore_imc_free_running_0/data_write/
> Uniquification of PMU sysfs events test [Failed]
> # started on Fri Sep 26 04:49:54 2025
>
>
> Performance counter stats for 'system wide':
>
> CPU0 0.00 MiB
> uncore_imc_free_running_0/uncore_imc_free_running,data_write/
> CPU0 0.00 MiB
> uncore_imc_free_running_1/uncore_imc_free_running,data_write/
>
> 0.001183888 seconds time elapsed
>
> Testing event uncore_imc_free_running/data_read/ is uniquified to
> uncore_imc_free_running_1/data_read/
> Uniquification of PMU sysfs events test [Failed]
> # started on Fri Sep 26 04:49:54 2025
>
>
> Performance counter stats for 'system wide':
>
> CPU0 0.29 MiB
> uncore_imc_free_running_0/uncore_imc_free_running,data_read/
> CPU0 0.29 MiB
> uncore_imc_free_running_1/uncore_imc_free_running,data_read/
>
> 0.000710088 seconds time elapsed
>
> Testing event uncore_imc_free_running/data_total/ is uniquified to
> uncore_imc_free_running_1/data_total/
> Uniquification of PMU sysfs events test [Failed]
> # started on Fri Sep 26 04:49:54 2025
>
>
> Performance counter stats for 'system wide':
>
> CPU0 0.62 MiB
> uncore_imc_free_running_0/uncore_imc_free_running,data_total/
> CPU0 0.67 MiB
> uncore_imc_free_running_1/uncore_imc_free_running,data_total/
>
> 0.000959074 seconds time elapsed
>
> Testing event uncore_imc_free_running/data_write/ is uniquified to
> uncore_imc_free_running_1/data_write/
> Uniquification of PMU sysfs events test [Failed]
> # started on Fri Sep 26 04:49:54 2025
>
>
> Performance counter stats for 'system wide':
>
> CPU0 0.23 MiB
> uncore_imc_free_running_0/uncore_imc_free_running,data_write/
> CPU0 0.23 MiB
> uncore_imc_free_running_1/uncore_imc_free_running,data_write/
>
> 0.000775028 seconds time elapsed
>
> ---- end(-1) ----
> 95: perf stat events uniquifying : FAILED!
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> # ls -la /sys/bus/event_source/devices/uncore_imc_free_running_*/events/
> /sys/bus/event_source/devices/uncore_imc_free_running_0/events/:
> total 0
> drwxr-xr-x. 2 root root 0 Sep 26 04:57 .
> drwxr-xr-x. 5 root root 0 Sep 26 01:49 ..
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.scale
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.unit
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.scale
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.unit
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.scale
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.unit
>
> /sys/bus/event_source/devices/uncore_imc_free_running_1/events/:
> total 0
> drwxr-xr-x. 2 root root 0 Sep 26 04:57 .
> drwxr-xr-x. 5 root root 0 Sep 26 01:49 ..
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.scale
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.unit
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.scale
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.unit
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.scale
> -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.unit
>
> - Qiao
>
> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>
>
> On Fri, Sep 19, 2025 at 6:22 AM Ian Rogers <irogers@google.com> wrote:
> >
> > The detection of uncore_imc may happen for free running PMUs and the
> > clockticks event may be present on uncore_clock. Rewrite the test to
> > detect duplicated/deduplicated events from perf list, not hardcoded to
> > uncore_imc.
> >
> > If perf stat fails then assume it is permissions and skip the test.
> >
> > Fixes: 070b315333ee ("perf test: Restrict uniquifying test to machines with 'uncore_imc'")
> > Signed-off-by: Ian Rogers <irogers@google.com>
> > ---
> > .../tests/shell/stat+event_uniquifying.sh | 109 ++++++++----------
> > 1 file changed, 49 insertions(+), 60 deletions(-)
> >
> > diff --git a/tools/perf/tests/shell/stat+event_uniquifying.sh b/tools/perf/tests/shell/stat+event_uniquifying.sh
> > index bf54bd6c3e2e..b5dec6b6da36 100755
> > --- a/tools/perf/tests/shell/stat+event_uniquifying.sh
> > +++ b/tools/perf/tests/shell/stat+event_uniquifying.sh
> > @@ -4,74 +4,63 @@
> >
> > set -e
> >
> > -stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
> > -perf_tool=perf
> > err=0
> > +stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
> >
> > -test_event_uniquifying() {
> > - # We use `clockticks` in `uncore_imc` to verify the uniquify behavior.
> > - pmu="uncore_imc"
> > - event="clockticks"
> > -
> > - # If the `-A` option is added, the event should be uniquified.
> > - #
> > - # $perf list -v clockticks
> > - #
> > - # List of pre-defined events (to be used in -e or -M):
> > - #
> > - # uncore_imc_0/clockticks/ [Kernel PMU event]
> > - # uncore_imc_1/clockticks/ [Kernel PMU event]
> > - # uncore_imc_2/clockticks/ [Kernel PMU event]
> > - # uncore_imc_3/clockticks/ [Kernel PMU event]
> > - # uncore_imc_4/clockticks/ [Kernel PMU event]
> > - # uncore_imc_5/clockticks/ [Kernel PMU event]
> > - #
> > - # ...
> > - #
> > - # $perf stat -e clockticks -A -- true
> > - #
> > - # Performance counter stats for 'system wide':
> > - #
> > - # CPU0 3,773,018 uncore_imc_0/clockticks/
> > - # CPU0 3,609,025 uncore_imc_1/clockticks/
> > - # CPU0 0 uncore_imc_2/clockticks/
> > - # CPU0 3,230,009 uncore_imc_3/clockticks/
> > - # CPU0 3,049,897 uncore_imc_4/clockticks/
> > - # CPU0 0 uncore_imc_5/clockticks/
> > - #
> > - # 0.002029828 seconds time elapsed
> > -
> > - echo "stat event uniquifying test"
> > - uniquified_event_array=()
> > +cleanup() {
> > + rm -f "${stat_output}"
> >
> > - # Skip if the machine does not have `uncore_imc` device.
> > - if ! ${perf_tool} list pmu | grep -q ${pmu}; then
> > - echo "Target does not support PMU ${pmu} [Skipped]"
> > - err=2
> > - return
> > - fi
> > + trap - EXIT TERM INT
> > +}
> >
> > - # Check how many uniquified events.
> > - while IFS= read -r line; do
> > - uniquified_event=$(echo "$line" | awk '{print $1}')
> > - uniquified_event_array+=("${uniquified_event}")
> > - done < <(${perf_tool} list -v ${event} | grep ${pmu})
> > +trap_cleanup() {
> > + echo "Unexpected signal in ${FUNCNAME[1]}"
> > + cleanup
> > + exit 1
> > +}
> > +trap trap_cleanup EXIT TERM INT
> >
> > - perf_command="${perf_tool} stat -e $event -A -o ${stat_output} -- true"
> > - $perf_command
> > +test_event_uniquifying() {
> > + echo "Uniquification of PMU sysfs events test"
> >
> > - # Check the output contains all uniquified events.
> > - for uniquified_event in "${uniquified_event_array[@]}"; do
> > - if ! cat "${stat_output}" | grep -q "${uniquified_event}"; then
> > - echo "Event is not uniquified [Failed]"
> > - echo "${perf_command}"
> > - cat "${stat_output}"
> > - err=1
> > - break
> > - fi
> > + # Read events from perf list with and without -v. With -v the duplicate PMUs
> > + # aren't deduplicated. Note, json events are listed by perf list without a
> > + # PMU.
> > + read -ra pmu_events <<< "$(perf list --raw pmu)"
> > + read -ra pmu_v_events <<< "$(perf list -v --raw pmu)"
> > + # For all non-deduplicated events.
> > + for pmu_v_event in "${pmu_v_events[@]}"; do
> > + # If the event matches an event in the deduplicated events then it musn't
> > + # be an event with duplicate PMUs, continue the outer loop.
> > + for pmu_event in "${pmu_events[@]}"; do
> > + if [[ "$pmu_v_event" == "$pmu_event" ]]; then
> > + continue 2
> > + fi
> > + done
> > + # Strip the suffix from the non-deduplicated event's PMU.
> > + event=$(echo "$pmu_v_event" | sed -E 's/_[0-9]+//')
> > + for pmu_event in "${pmu_events[@]}"; do
> > + if [[ "$event" == "$pmu_event" ]]; then
> > + echo "Testing event ${event} is uniquified to ${pmu_v_event}"
> > + if ! perf stat -e "$event" -A -o ${stat_output} -- true; then
> > + echo "Error running perf stat for event '$event' [Skip]"
> > + if [ $err = 0 ]; then
> > + err=2
> > + fi
> > + continue
> > + fi
> > + # Ensure the non-deduplicated event appears in the output.
> > + if ! grep -q "${pmu_v_event}" "${stat_output}"; then
> > + echo "Uniquification of PMU sysfs events test [Failed]"
> > + cat "${stat_output}"
> > + err=1
> > + fi
> > + break
> > + fi
> > + done
> > done
> > }
> >
> > test_event_uniquifying
> > -rm -f "${stat_output}"
> > +cleanup
> > exit $err
> > --
> > 2.51.0.470.ga7dc726c21-goog
> >
> >
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/3] perf test: Avoid uncore_imc/clockticks in uniquification test
2025-09-26 16:21 ` Ian Rogers
@ 2025-09-29 2:39 ` Qiao Zhao
0 siblings, 0 replies; 8+ messages in thread
From: Qiao Zhao @ 2025-09-29 2:39 UTC (permalink / raw)
To: Ian Rogers
Cc: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
Adrian Hunter, Kan Liang, Athira Rajeev, Chun-Tse Shao,
James Clark, Howard Chu, linux-kernel, linux-perf-users
Hi Ian,
Cool! After applied your patch "[PATCH v2 2/3] perf evsel: Fix
uniquification when PMU given without suffix" and "[PATCH v2 3/3]
perf test: Avoid uncore_imc/clockticks in uniquification test",
the uniquifying testing passed on both Intel hybrid and non-hybrid machine:
hybrid CPU machine:
>>>>>>>>>>>>>>>>>>
# ./perf test -vv 96
96: perf stat events uniquifying:
--- start ---
test child forked, pid 40541
Uniquification of PMU sysfs events test
Testing event uncore_imc_free_running/data_read/ is uniquified to
uncore_imc_free_running_0/data_read/
Testing event uncore_imc_free_running/data_total/ is uniquified to
uncore_imc_free_running_0/data_total/
Testing event uncore_imc_free_running/data_write/ is uniquified to
uncore_imc_free_running_0/data_write/
Testing event uncore_imc_free_running/data_read/ is uniquified to
uncore_imc_free_running_1/data_read/
Testing event uncore_imc_free_running/data_total/ is uniquified to
uncore_imc_free_running_1/data_total/
Testing event uncore_imc_free_running/data_write/ is uniquified to
uncore_imc_free_running_1/data_write/
---- end(0) ----
96: perf stat events uniquifying : Ok
>>>>>>>>>>>>>>>>>>
non-hybrid CPU machine:
>>>>>>>>>>>>>>>>>>
# ./perf test -vv 96
96: perf stat events uniquifying:
--- start ---
test child forked, pid 114458
Uniquification of PMU sysfs events test
Testing event uncore_iio_free_running/bw_in_port0/ is uniquified to
uncore_iio_free_running_0/bw_in_port0/
Testing event uncore_iio_free_running/bw_in_port1/ is uniquified to
uncore_iio_free_running_0/bw_in_port1/
Testing event uncore_iio_free_running/bw_in_port2/ is uniquified to
uncore_iio_free_running_0/bw_in_port2/
Testing event uncore_iio_free_running/bw_in_port3/ is uniquified to
uncore_iio_free_running_0/bw_in_port3/
Testing event uncore_iio_free_running/bw_in_port4/ is uniquified to
uncore_iio_free_running_0/bw_in_port4/
Testing event uncore_iio_free_running/bw_in_port5/ is uniquified to
uncore_iio_free_running_0/bw_in_port5/
Testing event uncore_iio_free_running/bw_in_port6/ is uniquified to
uncore_iio_free_running_0/bw_in_port6/
Testing event uncore_iio_free_running/bw_in_port7/ is uniquified to
uncore_iio_free_running_0/bw_in_port7/
Testing event uncore_iio_free_running/ioclk/ is uniquified to
uncore_iio_free_running_0/ioclk/
... ...
Testing event uncore_imc_free_running/dclk/ is uniquified to
uncore_imc_free_running_0/dclk/
Testing event uncore_imc_free_running/rpq_cycles/ is uniquified to
uncore_imc_free_running_0/rpq_cycles/
Testing event uncore_imc_free_running/wpq_cycles/ is uniquified to
uncore_imc_free_running_0/wpq_cycles/
Testing event uncore_imc_free_running/dclk/ is uniquified to
uncore_imc_free_running_1/dclk/
Testing event uncore_imc_free_running/rpq_cycles/ is uniquified to
uncore_imc_free_running_1/rpq_cycles/
Testing event uncore_imc_free_running/wpq_cycles/ is uniquified to
uncore_imc_free_running_1/wpq_cycles/
Testing event uncore_imc_free_running/dclk/ is uniquified to
uncore_imc_free_running_2/dclk/
Testing event uncore_imc_free_running/rpq_cycles/ is uniquified to
uncore_imc_free_running_2/rpq_cycles/
Testing event uncore_imc_free_running/wpq_cycles/ is uniquified to
uncore_imc_free_running_2/wpq_cycles/
Testing event uncore_imc_free_running/dclk/ is uniquified to
uncore_imc_free_running_3/dclk/
Testing event uncore_imc_free_running/rpq_cycles/ is uniquified to
uncore_imc_free_running_3/rpq_cycles/
Testing event uncore_imc_free_running/wpq_cycles/ is uniquified to
uncore_imc_free_running_3/wpq_cycles/
---- end(0) ----
96: perf stat events uniquifying : Ok
>>>>>>>>>>>>>>>>>>
Tested-by: Qiao Zhao <qzhao@redhat.com>
On Fri, Sep 26, 2025 at 9:22 AM Ian Rogers <irogers@google.com> wrote:
>
> On Fri, Sep 26, 2025 at 2:00 AM Qiao Zhao <qzhao@redhat.com> wrote:
> >
> > Hi Ian,
> >
> > I tested your patch (latest linux-next code + your patch) on hybrid
> > CPU machine {CPU Model name: 12th Gen Intel(R) Core(TM) i7-12800HE}
> > and failed,
>
> Hi Qiao,
>
> in your output is:
> uncore_imc_free_running_0/uncore_imc_free_running,data_total/
> ie the uncore PMU is reported twice. This is fixed in the immediately
> prior patch in this series:
> https://lore.kernel.org/lkml/20250918222202.1353854-3-irogers@google.com/
>
> Thanks,
> Ian
>
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > # perf test -vv "perf stat events uniquifying"
> > 95: perf stat events uniquifying:
> > --- start ---
> > test child forked, pid 21799
> > Uniquification of PMU sysfs events test
> > Testing event uncore_imc_free_running/data_read/ is uniquified to
> > uncore_imc_free_running_0/data_read/
> > Uniquification of PMU sysfs events test [Failed]
> > # started on Fri Sep 26 04:49:54 2025
> >
> >
> > Performance counter stats for 'system wide':
> >
> > CPU0 1.47 MiB
> > uncore_imc_free_running_0/uncore_imc_free_running,data_read/
> > CPU0 1.47 MiB
> > uncore_imc_free_running_1/uncore_imc_free_running,data_read/
> >
> > 0.000925108 seconds time elapsed
> >
> > Testing event uncore_imc_free_running/data_total/ is uniquified to
> > uncore_imc_free_running_0/data_total/
> > Uniquification of PMU sysfs events test [Failed]
> > # started on Fri Sep 26 04:49:54 2025
> >
> >
> > Performance counter stats for 'system wide':
> >
> > CPU0 0.59 MiB
> > uncore_imc_free_running_0/uncore_imc_free_running,data_total/
> > CPU0 0.58 MiB
> > uncore_imc_free_running_1/uncore_imc_free_running,data_total/
> >
> > 0.000969877 seconds time elapsed
> >
> > Testing event uncore_imc_free_running/data_write/ is uniquified to
> > uncore_imc_free_running_0/data_write/
> > Uniquification of PMU sysfs events test [Failed]
> > # started on Fri Sep 26 04:49:54 2025
> >
> >
> > Performance counter stats for 'system wide':
> >
> > CPU0 0.00 MiB
> > uncore_imc_free_running_0/uncore_imc_free_running,data_write/
> > CPU0 0.00 MiB
> > uncore_imc_free_running_1/uncore_imc_free_running,data_write/
> >
> > 0.001183888 seconds time elapsed
> >
> > Testing event uncore_imc_free_running/data_read/ is uniquified to
> > uncore_imc_free_running_1/data_read/
> > Uniquification of PMU sysfs events test [Failed]
> > # started on Fri Sep 26 04:49:54 2025
> >
> >
> > Performance counter stats for 'system wide':
> >
> > CPU0 0.29 MiB
> > uncore_imc_free_running_0/uncore_imc_free_running,data_read/
> > CPU0 0.29 MiB
> > uncore_imc_free_running_1/uncore_imc_free_running,data_read/
> >
> > 0.000710088 seconds time elapsed
> >
> > Testing event uncore_imc_free_running/data_total/ is uniquified to
> > uncore_imc_free_running_1/data_total/
> > Uniquification of PMU sysfs events test [Failed]
> > # started on Fri Sep 26 04:49:54 2025
> >
> >
> > Performance counter stats for 'system wide':
> >
> > CPU0 0.62 MiB
> > uncore_imc_free_running_0/uncore_imc_free_running,data_total/
> > CPU0 0.67 MiB
> > uncore_imc_free_running_1/uncore_imc_free_running,data_total/
> >
> > 0.000959074 seconds time elapsed
> >
> > Testing event uncore_imc_free_running/data_write/ is uniquified to
> > uncore_imc_free_running_1/data_write/
> > Uniquification of PMU sysfs events test [Failed]
> > # started on Fri Sep 26 04:49:54 2025
> >
> >
> > Performance counter stats for 'system wide':
> >
> > CPU0 0.23 MiB
> > uncore_imc_free_running_0/uncore_imc_free_running,data_write/
> > CPU0 0.23 MiB
> > uncore_imc_free_running_1/uncore_imc_free_running,data_write/
> >
> > 0.000775028 seconds time elapsed
> >
> > ---- end(-1) ----
> > 95: perf stat events uniquifying : FAILED!
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> > # ls -la /sys/bus/event_source/devices/uncore_imc_free_running_*/events/
> > /sys/bus/event_source/devices/uncore_imc_free_running_0/events/:
> > total 0
> > drwxr-xr-x. 2 root root 0 Sep 26 04:57 .
> > drwxr-xr-x. 5 root root 0 Sep 26 01:49 ..
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.scale
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.unit
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.scale
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.unit
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.scale
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.unit
> >
> > /sys/bus/event_source/devices/uncore_imc_free_running_1/events/:
> > total 0
> > drwxr-xr-x. 2 root root 0 Sep 26 04:57 .
> > drwxr-xr-x. 5 root root 0 Sep 26 01:49 ..
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.scale
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_read.unit
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.scale
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_total.unit
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.scale
> > -r--r--r--. 1 root root 4096 Sep 26 01:49 data_write.unit
> >
> > - Qiao
> >
> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
> >
> >
> > On Fri, Sep 19, 2025 at 6:22 AM Ian Rogers <irogers@google.com> wrote:
> > >
> > > The detection of uncore_imc may happen for free running PMUs and the
> > > clockticks event may be present on uncore_clock. Rewrite the test to
> > > detect duplicated/deduplicated events from perf list, not hardcoded to
> > > uncore_imc.
> > >
> > > If perf stat fails then assume it is permissions and skip the test.
> > >
> > > Fixes: 070b315333ee ("perf test: Restrict uniquifying test to machines with 'uncore_imc'")
> > > Signed-off-by: Ian Rogers <irogers@google.com>
> > > ---
> > > .../tests/shell/stat+event_uniquifying.sh | 109 ++++++++----------
> > > 1 file changed, 49 insertions(+), 60 deletions(-)
> > >
> > > diff --git a/tools/perf/tests/shell/stat+event_uniquifying.sh b/tools/perf/tests/shell/stat+event_uniquifying.sh
> > > index bf54bd6c3e2e..b5dec6b6da36 100755
> > > --- a/tools/perf/tests/shell/stat+event_uniquifying.sh
> > > +++ b/tools/perf/tests/shell/stat+event_uniquifying.sh
> > > @@ -4,74 +4,63 @@
> > >
> > > set -e
> > >
> > > -stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
> > > -perf_tool=perf
> > > err=0
> > > +stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
> > >
> > > -test_event_uniquifying() {
> > > - # We use `clockticks` in `uncore_imc` to verify the uniquify behavior.
> > > - pmu="uncore_imc"
> > > - event="clockticks"
> > > -
> > > - # If the `-A` option is added, the event should be uniquified.
> > > - #
> > > - # $perf list -v clockticks
> > > - #
> > > - # List of pre-defined events (to be used in -e or -M):
> > > - #
> > > - # uncore_imc_0/clockticks/ [Kernel PMU event]
> > > - # uncore_imc_1/clockticks/ [Kernel PMU event]
> > > - # uncore_imc_2/clockticks/ [Kernel PMU event]
> > > - # uncore_imc_3/clockticks/ [Kernel PMU event]
> > > - # uncore_imc_4/clockticks/ [Kernel PMU event]
> > > - # uncore_imc_5/clockticks/ [Kernel PMU event]
> > > - #
> > > - # ...
> > > - #
> > > - # $perf stat -e clockticks -A -- true
> > > - #
> > > - # Performance counter stats for 'system wide':
> > > - #
> > > - # CPU0 3,773,018 uncore_imc_0/clockticks/
> > > - # CPU0 3,609,025 uncore_imc_1/clockticks/
> > > - # CPU0 0 uncore_imc_2/clockticks/
> > > - # CPU0 3,230,009 uncore_imc_3/clockticks/
> > > - # CPU0 3,049,897 uncore_imc_4/clockticks/
> > > - # CPU0 0 uncore_imc_5/clockticks/
> > > - #
> > > - # 0.002029828 seconds time elapsed
> > > -
> > > - echo "stat event uniquifying test"
> > > - uniquified_event_array=()
> > > +cleanup() {
> > > + rm -f "${stat_output}"
> > >
> > > - # Skip if the machine does not have `uncore_imc` device.
> > > - if ! ${perf_tool} list pmu | grep -q ${pmu}; then
> > > - echo "Target does not support PMU ${pmu} [Skipped]"
> > > - err=2
> > > - return
> > > - fi
> > > + trap - EXIT TERM INT
> > > +}
> > >
> > > - # Check how many uniquified events.
> > > - while IFS= read -r line; do
> > > - uniquified_event=$(echo "$line" | awk '{print $1}')
> > > - uniquified_event_array+=("${uniquified_event}")
> > > - done < <(${perf_tool} list -v ${event} | grep ${pmu})
> > > +trap_cleanup() {
> > > + echo "Unexpected signal in ${FUNCNAME[1]}"
> > > + cleanup
> > > + exit 1
> > > +}
> > > +trap trap_cleanup EXIT TERM INT
> > >
> > > - perf_command="${perf_tool} stat -e $event -A -o ${stat_output} -- true"
> > > - $perf_command
> > > +test_event_uniquifying() {
> > > + echo "Uniquification of PMU sysfs events test"
> > >
> > > - # Check the output contains all uniquified events.
> > > - for uniquified_event in "${uniquified_event_array[@]}"; do
> > > - if ! cat "${stat_output}" | grep -q "${uniquified_event}"; then
> > > - echo "Event is not uniquified [Failed]"
> > > - echo "${perf_command}"
> > > - cat "${stat_output}"
> > > - err=1
> > > - break
> > > - fi
> > > + # Read events from perf list with and without -v. With -v the duplicate PMUs
> > > + # aren't deduplicated. Note, json events are listed by perf list without a
> > > + # PMU.
> > > + read -ra pmu_events <<< "$(perf list --raw pmu)"
> > > + read -ra pmu_v_events <<< "$(perf list -v --raw pmu)"
> > > + # For all non-deduplicated events.
> > > + for pmu_v_event in "${pmu_v_events[@]}"; do
> > > + # If the event matches an event in the deduplicated events then it musn't
> > > + # be an event with duplicate PMUs, continue the outer loop.
> > > + for pmu_event in "${pmu_events[@]}"; do
> > > + if [[ "$pmu_v_event" == "$pmu_event" ]]; then
> > > + continue 2
> > > + fi
> > > + done
> > > + # Strip the suffix from the non-deduplicated event's PMU.
> > > + event=$(echo "$pmu_v_event" | sed -E 's/_[0-9]+//')
> > > + for pmu_event in "${pmu_events[@]}"; do
> > > + if [[ "$event" == "$pmu_event" ]]; then
> > > + echo "Testing event ${event} is uniquified to ${pmu_v_event}"
> > > + if ! perf stat -e "$event" -A -o ${stat_output} -- true; then
> > > + echo "Error running perf stat for event '$event' [Skip]"
> > > + if [ $err = 0 ]; then
> > > + err=2
> > > + fi
> > > + continue
> > > + fi
> > > + # Ensure the non-deduplicated event appears in the output.
> > > + if ! grep -q "${pmu_v_event}" "${stat_output}"; then
> > > + echo "Uniquification of PMU sysfs events test [Failed]"
> > > + cat "${stat_output}"
> > > + err=1
> > > + fi
> > > + break
> > > + fi
> > > + done
> > > done
> > > }
> > >
> > > test_event_uniquifying
> > > -rm -f "${stat_output}"
> > > +cleanup
> > > exit $err
> > > --
> > > 2.51.0.470.ga7dc726c21-goog
> > >
> > >
> >
>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-09-29 2:39 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-18 22:21 [PATCH v2 0/3] Test/uniquification related fixes Ian Rogers
2025-09-18 22:22 ` [PATCH v2 1/3] perf test: Don't leak workload gopipe in PERF_RECORD_* Ian Rogers
2025-09-18 22:22 ` [PATCH v2 2/3] perf evsel: Fix uniquification when PMU given without suffix Ian Rogers
2025-09-18 22:22 ` [PATCH v2 3/3] perf test: Avoid uncore_imc/clockticks in uniquification test Ian Rogers
2025-09-26 9:00 ` Qiao Zhao
2025-09-26 16:21 ` Ian Rogers
2025-09-29 2:39 ` Qiao Zhao
2025-09-19 19:51 ` [PATCH v2 0/3] Test/uniquification related fixes Arnaldo Carvalho de Melo
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.