Commit e2cb1db7 authored by Namhyung Kim's avatar Namhyung Kim
Browse files

perf test: Update all metrics test like metricgroups test



Like in the metricgroup tests, it should check the permission first and
then skip relevant failures accordingly.

Also it needs to try again with the system wide flag properly.  On the
second round, check if the result has the metric name because other
failure cases are checked in the first round already.

Reviewed-by: default avatarIan Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20241018204306.741972-1-namhyung@kernel.org


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent 5455d89b
Loading
Loading
Loading
Loading
+66 −21
Original line number Diff line number Diff line
@@ -2,42 +2,87 @@
# perf all metrics test
# SPDX-License-Identifier: GPL-2.0

ParanoidAndNotRoot()
{
  [ "$(id -u)" != 0 ] && [ "$(cat /proc/sys/kernel/perf_event_paranoid)" -gt $1 ]
}

system_wide_flag="-a"
if ParanoidAndNotRoot 0
then
  system_wide_flag=""
fi

err=0
for m in $(perf list --raw-dump metrics); do
  echo "Testing $m"
  result=$(perf stat -M "$m" true 2>&1)
  if [[ "$result" =~ ${m:0:50} ]] || [[ "$result" =~ "<not supported>" ]]
  result=$(perf stat -M "$m" $system_wide_flag -- sleep 0.01 2>&1)
  result_err=$?
  if [[ $result_err -gt 0 ]]
  then
    if [[ "$result" =~ \
          "Access to performance monitoring and observability operations is limited" ]]
    then
      echo "Permission failure"
      echo $result
      if [[ $err -eq 0 ]]
      then
        err=2 # Skip
      fi
      continue
    elif [[ "$result" =~ "in per-thread mode, enable system wide" ]]
    then
      echo "Permissions - need system wide mode"
      echo $result
      if [[ $err -eq 0 ]]
      then
        err=2 # Skip
      fi
      continue
    elif [[ "$result" =~ "<not supported>" ]]
    then
      echo "Not supported events"
      echo $result
      if [[ $err -eq 0 ]]
      then
        err=2 # Skip
      fi
      continue
    elif [[ "$result" =~ "FP_ARITH" || "$result" =~ "AMX" ]]
    then
      echo "FP issues"
      echo $result
      if [[ $err -eq 0 ]]
      then
        err=2 # Skip
      fi
  # Failed so try system wide.
  result=$(perf stat -M "$m" -a sleep 0.01 2>&1)
      continue
    elif [[ "$result" =~ "PMM" ]]
    then
      echo "Optane memory issues"
      echo $result
      if [[ $err -eq 0 ]]
      then
        err=2 # Skip
      fi
      continue
    fi
  fi

  if [[ "$result" =~ ${m:0:50} ]]
  then
    continue
  fi
  # Failed again, possibly the workload was too small so retry with something
  # longer.
  result=$(perf stat -M "$m" perf bench internals synthesize 2>&1)

  # Failed, possibly the workload was too small so retry with something longer.
  result=$(perf stat -M "$m" $system_wide_flag -- perf bench internals synthesize 2>&1)
  if [[ "$result" =~ ${m:0:50} ]]
  then
    continue
  fi
  echo "Metric '$m' not printed in:"
  echo "$result"
  if [[ "$err" != "1" ]]
  then
    err=2
    if [[ "$result" =~ "FP_ARITH" || "$result" =~ "AMX" ]]
    then
      echo "Skip, not fail, for FP issues"
    elif [[ "$result" =~ "PMM" ]]
    then
      echo "Skip, not fail, for Optane memory issues"
    else
  err=1
    fi
  fi
done

exit "$err"