2023-06-20 10:00:25 -07:00
|
|
|
#!/bin/bash
|
|
|
|
# perf metrics value validation
|
|
|
|
# SPDX-License-Identifier: GPL-2.0
|
2023-11-29 13:34:27 -08:00
|
|
|
|
|
|
|
shelldir=$(dirname "$0")
|
|
|
|
# shellcheck source=lib/setup_python.sh
|
|
|
|
. "${shelldir}"/lib/setup_python.sh
|
2023-06-20 10:00:25 -07:00
|
|
|
|
|
|
|
grep -q GenuineIntel /proc/cpuinfo || { echo Skipping non-Intel; exit 2; }
|
|
|
|
|
|
|
|
pythonvalidator=$(dirname $0)/lib/perf_metric_validation.py
|
|
|
|
rulefile=$(dirname $0)/lib/perf_metric_validation_rules.json
|
|
|
|
tmpdir=$(mktemp -d /tmp/__perf_test.program.XXXXX)
|
|
|
|
workload="perf bench futex hash -r 2 -s"
|
|
|
|
|
|
|
|
# Add -debug, save data file and full rule file
|
|
|
|
echo "Launch python validation script $pythonvalidator"
|
|
|
|
echo "Output will be stored in: $tmpdir"
|
perf test: Hybrid improvements for metric value validation test
On my alderlake I currently see for the "perf metrics value validation" test:
```
Total Test Count: 142
Passed Test Count: 139
[
Metric Relationship Error: The collected value of metric ['tma_fetch_latency', 'tma_fetch_bandwidth', 'tma_frontend_bound']
is [31.137028] in workload(s): ['perf bench futex hash -r 2 -s']
but expected value range is [tma_frontend_bound, tma_frontend_bound]
Relationship rule description: 'Sum of the level 2 children should equal level 1 parent',
Metric Relationship Error: The collected value of metric ['tma_memory_bound', 'tma_core_bound', 'tma_backend_bound']
is [6.564442] in workload(s): ['perf bench futex hash -r 2 -s']
but expected value range is [tma_backend_bound, tma_backend_bound]
Relationship rule description: 'Sum of the level 2 children should equal level 1 parent',
Metric Relationship Error: The collected value of metric ['tma_light_operations', 'tma_heavy_operations', 'tma_retiring']
is [57.806179] in workload(s): ['perf bench futex hash -r 2 -s']
but expected value range is [tma_retiring, tma_retiring]
Relationship rule description: 'Sum of the level 2 children should equal level 1 parent']
Metric validation return with erros. Please check metrics reported with errors.
```
I suspect it is due to two metrics for different CPU types being
enabled. Add a -cputype option to avoid this. The test still fails with:
```
Total Test Count: 115
Passed Test Count: 114
[
Wrong Metric Value Error: The collected value of metric ['tma_l2_hit_latency']
is [117.947088] in workload(s): ['perf bench futex hash -r 2 -s']
but expected value range is [0, 100]]
Metric validation return with errors. Please check metrics reported with errors.
```
which is a reproducible genuine error and likely requires a metric fix.
Signed-off-by: Ian Rogers <irogers@google.com>
Tested-by: Thomas Falcon <thomas.falcon@intel.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.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: 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/20250512184700.11691-2-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2025-05-12 11:47:00 -07:00
|
|
|
for cputype in /sys/bus/event_source/devices/cpu_*; do
|
|
|
|
cputype=$(basename "$cputype")
|
|
|
|
echo "Testing metrics for: $cputype"
|
|
|
|
$PYTHON $pythonvalidator -rule $rulefile -output_dir $tmpdir -wl "${workload}" \
|
|
|
|
-cputype "${cputype}"
|
|
|
|
ret=$?
|
|
|
|
rm -rf $tmpdir
|
|
|
|
if [ $ret -ne 0 ]; then
|
|
|
|
echo "Metric validation return with errors. Please check metrics reported with errors."
|
|
|
|
fi
|
|
|
|
done
|
2023-06-20 10:00:25 -07:00
|
|
|
exit $ret
|
|
|
|
|