All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	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>,
	Kan Liang <kan.liang@linux.intel.com>,
	Chun-Tse Shao <ctshao@google.com>,
	James Clark <james.clark@linaro.org>,
	Howard Chu <howardchu95@gmail.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v1 4/4] perf test: Avoid uncore_imc/clockticks in uniquification test
Date: Tue, 16 Sep 2025 16:15:03 -0300	[thread overview]
Message-ID: <aMm3N0dfD_r46K6A@x1> (raw)
In-Reply-To: <20250821221834.1312002-5-irogers@google.com>

On Thu, Aug 21, 2025 at 03:18:34PM -0700, Ian Rogers 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.

acme@x1:~/git/perf-tools-next$ perf test 96
 96: perf stat events uniquifying                                    : FAILED!
acme@x1:~/git/perf-tools-next$ perf test -vv 96
Couldn't bump rlimit(MEMLOCK), failures may take place when creating BPF maps, etc
 96: perf stat events uniquifying:
--- start ---
test child forked, pid 86847
Uniquification of PMU sysfs events test
Testing event uncore_imc_free_running/data_read/ is uniquified to uncore_imc_free_running_0/data_read/
Error:
The sys_perf_event_open() syscall returned with 22 (Invalid argument) for event (uncore_imc_free_running/data_read/u).
"dmesg | grep -i perf" may provide additional information.

Unexpected signal in test_event_uniquifying
---- end(-1) ----
 96: perf stat events uniquifying                                    : FAILED!


Works for root:

acme@x1:~/git/perf-tools-next$ sudo su -
[sudo] password for acme: 
root@x1:~# perf test 96
 96: perf stat events uniquifying                                    : Ok
root@x1:~#

acme@x1:~/git/perf-tools-next$ 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 16 16:09 .
drwxr-xr-x. 5 root root    0 Sep 16 16:09 ..
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_read
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_read.scale
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_read.unit
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_total
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_total.scale
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_total.unit
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_write
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_write.scale
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_write.unit

/sys/bus/event_source/devices/uncore_imc_free_running_1/events/:
total 0
drwxr-xr-x. 2 root root    0 Sep 16 16:09 .
drwxr-xr-x. 5 root root    0 Sep 16 16:09 ..
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_read
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_read.scale
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_read.unit
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_total
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_total.scale
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_total.unit
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_write
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_write.scale
-r--r--r--. 1 root root 4096 Sep 16 16:09 data_write.unit
acme@x1:~/git/perf-tools-next$


 
> 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     | 105 ++++++++----------
>  1 file changed, 44 insertions(+), 61 deletions(-)
> 
> diff --git a/tools/perf/tests/shell/stat+event_uniquifying.sh b/tools/perf/tests/shell/stat+event_uniquifying.sh
> index bf54bd6c3e2e..9bc7a1f520f9 100755
> --- a/tools/perf/tests/shell/stat+event_uniquifying.sh
> +++ b/tools/perf/tests/shell/stat+event_uniquifying.sh
> @@ -4,74 +4,57 @@
>  
>  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=()
> -
> -  # 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
> +cleanup() {
> +  rm -f "${stat_output}"
>  
> -  # 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 - EXIT TERM INT
> +}
>  
> -  perf_command="${perf_tool} stat -e $event -A -o ${stat_output} -- true"
> -  $perf_command
> +trap_cleanup() {
> +  echo "Unexpected signal in ${FUNCNAME[1]}"
> +  cleanup
> +  exit 1
> +}
> +trap trap_cleanup EXIT TERM INT
>  
> -  # 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
> +test_event_uniquifying() {
> +  echo "Uniquification of PMU sysfs events test"
> +
> +  # 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}"
> +        perf stat -e "$event" -A -o ${stat_output} -- true
> +        # 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.rc2.233.g662b1ed5c5-goog

  reply	other threads:[~2025-09-16 19:15 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-21 22:18 [PATCH v1 0/4] Test/uniquification related fixes Ian Rogers
2025-08-21 22:18 ` [PATCH v1 1/4] perf test shell lbr: Avoid failures with perf event paranoia Ian Rogers
2025-09-16 19:00   ` Arnaldo Carvalho de Melo
2025-08-21 22:18 ` [PATCH v1 2/4] perf test: Don't leak workload gopipe in PERF_RECORD_* Ian Rogers
2025-09-16 19:04   ` Arnaldo Carvalho de Melo
2025-09-16 19:08     ` Ian Rogers
2025-09-17  1:06       ` Arnaldo Carvalho de Melo
2025-09-18 22:17         ` Ian Rogers
2025-08-21 22:18 ` [PATCH v1 3/4] perf evsel: Fix uniquification when PMU given without suffix Ian Rogers
2025-08-21 22:18 ` [PATCH v1 4/4] perf test: Avoid uncore_imc/clockticks in uniquification test Ian Rogers
2025-09-16 19:15   ` Arnaldo Carvalho de Melo [this message]
2025-09-16 20:45     ` 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=aMm3N0dfD_r46K6A@x1 \
    --to=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=ctshao@google.com \
    --cc=howardchu95@gmail.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --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 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.