Commit d9bd1d42 authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo

perf test bpf-counters: Add test for BPF event modifier

Refactor test to better enable sharing of logic, to give an idea of
progress and introduce test functions. Add test of measuring both
cycles and cycles:b simultaneously.
Signed-off-by: default avatarIan Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
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: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Song Liu <song@kernel.org>
Cc: Thomas Richter <tmricht@linux.ibm.com>
Link: https://lore.kernel.org/r/20240416170014.985191-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent eb4d27cf
...@@ -4,21 +4,59 @@ ...@@ -4,21 +4,59 @@
set -e set -e
workload="perf bench sched messaging -g 1 -l 100 -t"
# check whether $2 is within +/- 20% of $1 # check whether $2 is within +/- 20% of $1
compare_number() compare_number()
{ {
first_num=$1 first_num=$1
second_num=$2 second_num=$2
# upper bound is first_num * 120% # upper bound is first_num * 120%
upper=$(expr $first_num + $first_num / 5 ) upper=$(expr $first_num + $first_num / 5 )
# lower bound is first_num * 80% # lower bound is first_num * 80%
lower=$(expr $first_num - $first_num / 5 ) lower=$(expr $first_num - $first_num / 5 )
if [ $second_num -gt $upper ] || [ $second_num -lt $lower ]; then if [ $second_num -gt $upper ] || [ $second_num -lt $lower ]; then
echo "The difference between $first_num and $second_num are greater than 20%." echo "The difference between $first_num and $second_num are greater than 20%."
exit 1 exit 1
fi fi
}
check_counts()
{
base_cycles=$1
bpf_cycles=$2
if [ "$base_cycles" = "<not" ]; then
echo "Skipping: cycles event not counted"
exit 2
fi
if [ "$bpf_cycles" = "<not" ]; then
echo "Failed: cycles not counted with --bpf-counters"
exit 1
fi
}
test_bpf_counters()
{
printf "Testing --bpf-counters "
base_cycles=$(perf stat --no-big-num -e cycles -- $workload 2>&1 | awk '/cycles/ {print $1}')
bpf_cycles=$(perf stat --no-big-num --bpf-counters -e cycles -- $workload 2>&1 | awk '/cycles/ {print $1}')
check_counts $base_cycles $bpf_cycles
compare_number $base_cycles $bpf_cycles
echo "[Success]"
}
test_bpf_modifier()
{
printf "Testing bpf event modifier "
stat_output=$(perf stat --no-big-num -e cycles/name=base_cycles/,cycles/name=bpf_cycles/b -- $workload 2>&1)
base_cycles=$(echo "$stat_output"| awk '/base_cycles/ {print $1}')
bpf_cycles=$(echo "$stat_output"| awk '/bpf_cycles/ {print $1}')
check_counts $base_cycles $bpf_cycles
compare_number $base_cycles $bpf_cycles
echo "[Success]"
} }
# skip if --bpf-counters is not supported # skip if --bpf-counters is not supported
...@@ -30,16 +68,7 @@ if ! perf stat -e cycles --bpf-counters true > /dev/null 2>&1; then ...@@ -30,16 +68,7 @@ if ! perf stat -e cycles --bpf-counters true > /dev/null 2>&1; then
exit 2 exit 2
fi fi
base_cycles=$(perf stat --no-big-num -e cycles -- perf bench sched messaging -g 1 -l 100 -t 2>&1 | awk '/cycles/ {print $1}') test_bpf_counters
if [ "$base_cycles" = "<not" ]; then test_bpf_modifier
echo "Skipping: cycles event not counted"
exit 2
fi
bpf_cycles=$(perf stat --no-big-num --bpf-counters -e cycles -- perf bench sched messaging -g 1 -l 100 -t 2>&1 | awk '/cycles/ {print $1}')
if [ "$bpf_cycles" = "<not" ]; then
echo "Failed: cycles not counted with --bpf-counters"
exit 1
fi
compare_number $base_cycles $bpf_cycles
exit 0 exit 0
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment