Commit cb422594 authored by Chun-Tse Shao's avatar Chun-Tse Shao Committed by Arnaldo Carvalho de Melo
Browse files

perf test: Add stat uniquifying test



The `stat+uniquify.sh` test retrieves all uniquified `clockticks` events
from `perf list -v clockticks` and check if `perf stat -e clockticks -A`
contains all of them.

Committer testing:

  root@x1:~# grep -m1 "model name" /proc/cpuinfo
  model name	: 13th Gen Intel(R) Core(TM) i7-1365U
  root@x1:~# perf list clockticks

  List of pre-defined events (to be used in -e or -M):

    uncore_clock/clockticks/                           [Kernel PMU event]

  uncore memory:
    unc_m_clockticks
         [Number of clocks. Unit: uncore_imc]
  root@x1:~#
  root@x1:~# perf test uniquifying
   92: perf stat events uniquifying                    : Ok
  root@x1:~# perf test -vv uniquifying
   92: perf stat events uniquifying:
  --- start ---
  test child forked, pid 1552628
  stat event uniquifying test
  ---- end(0) ----
   92: perf stat events uniquifying                    : Ok
  root@x1:~#

Signed-off-by: default avatarChun-Tse Shao <ctshao@google.com>
Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Dr. David Alan Gilbert <linux@treblig.org>
Cc: Howard Chu <howardchu95@gmail.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@linaro.org>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Levi Yun <yeoreum.yun@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Weilin Wang <weilin.wang@intel.com>
Link: https://lore.kernel.org/r/20250513215401.2315949-4-ctshao@google.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 137359b7
Loading
Loading
Loading
Loading
+69 −0
Original line number Diff line number Diff line
#!/bin/bash
# perf stat events uniquifying
# SPDX-License-Identifier: GPL-2.0

set -e

stat_output=$(mktemp /tmp/__perf_test.stat_output.XXXXX)
perf_tool=perf
err=0

test_event_uniquifying() {
  # We use `clockticks` to verify the uniquify behavior.
  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=()

  # 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 "\[Kernel PMU event\]")

  perf_command="${perf_tool} stat -e $event -A -o ${stat_output} -- true"
  $perf_command

  # 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
  done
}

test_event_uniquifying
rm -f "${stat_output}"
exit $err