perf test: Make all metrics test more tolerant

Metric names are truncated so don't try to match all of one.

Allow AMX metrics to skip as floating point ones do.

Metrics for optane memory can also skip rather than fail.

Add a system wide check for uncore metrics.

Restructure code to avoid extensive nesting.

Some impetus for this in:

https://lore.kernel.org/lkml/d32376b5-5538-ff00-6620-e74ad4b4abf2@huawei.com/

Suggested-by: John Garry <john.garry@huawei.com>
Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: John Garry <john.garry@huawei.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: https://lore.kernel.org/r/20220707153449.202409-2-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Ian Rogers 2022-07-07 08:34:49 -07:00 committed by Arnaldo Carvalho de Melo
parent c7a774d781
commit 29d97deed6

View File

@ -1,26 +1,41 @@
#!/bin/sh
#!/bin/bash
# perf all metrics test
# SPDX-License-Identifier: GPL-2.0
set -e
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" ]] && [[ ! "$result" =~ "<not supported>" ]]; then
# We failed to see the metric and the events are support. Possibly the
# workload was too small so retry with something longer.
result=$(perf stat -M "$m" perf bench internals synthesize 2>&1)
if [[ ! "$result" =~ "$m" ]]; then
echo "Metric '$m' not printed in:"
echo "$result"
if [[ "$result" =~ "FP_ARITH" && "$err" != "1" ]]; then
echo "Skip, not fail, for FP issues"
err=2
else
err=1
fi
if [[ "$result" =~ "${m:0:50}" ]] || [[ "$result" =~ "<not supported>" ]]
then
continue
fi
# Failed so try system wide.
result=$(perf stat -M "$m" -a true 2>&1)
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)
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