mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 13:30:45 -05:00
commitedf2cadf01("perf test: add test for BPF metadata collection") fails consistently on the version string check. The perf version string on some of the constant integration test machines contains characters with special meaning in grep's extended regular expression matching algorithm. The output of perf version is: # perf version perf version 6.17.0-20250814.rc1.git20.24ea63ea3877.63.fc42.s390x+git # and the '+' character has special meaning in egrep command. Also the use of egrep is deprecated. Change the perf version string check to fixed character matching and get rid of egrep's warning being deprecated. Use grep -F instead. Output before: # perf test -F 102 Checking BPF metadata collection egrep: warning: egrep is obsolescent; using grep -E Basic BPF metadata test [Failed invalid output] 102: BPF metadata collection test : FAILED! # Output after: # perf test -F 102 Checking BPF metadata collection Basic BPF metadata test [Success] 102: BPF metadata collection test : Ok # Fixes:edf2cadf01("perf test: add test for BPF metadata collection") Signed-off-by: Thomas Richter <tmricht@linux.ibm.com> Reviewed-by: Ian Rogers <irogers@google.com> Reviewed-by: Arnaldo Carvalho de Melo <acme@redhat.com> Acked-by: Sumanth Korikkar <sumanthk@linux.ibm.com> Cc: Blake Jones <blakejones@google.com> Link: https://lore.kernel.org/r/20250822122540.4104658-1-tmricht@linux.ibm.com Signed-off-by: Namhyung Kim <namhyung@kernel.org>
77 lines
1.6 KiB
Bash
Executable File
77 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# BPF metadata collection test
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
set -e
|
|
|
|
err=0
|
|
perfdata=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
|
|
|
|
cleanup() {
|
|
rm -f "${perfdata}"
|
|
rm -f "${perfdata}".old
|
|
trap - EXIT TERM INT
|
|
}
|
|
|
|
trap_cleanup() {
|
|
cleanup
|
|
exit 1
|
|
}
|
|
trap trap_cleanup EXIT TERM INT
|
|
|
|
test_bpf_metadata() {
|
|
echo "Checking BPF metadata collection"
|
|
|
|
if ! perf check -q feature libbpf-strings ; then
|
|
echo "Basic BPF metadata test [skipping - not supported]"
|
|
err=0
|
|
return
|
|
fi
|
|
|
|
# This is a basic invocation of perf record
|
|
# that invokes the perf_sample_filter BPF program.
|
|
if ! perf record -e task-clock --filter 'ip > 0' \
|
|
-o "${perfdata}" sleep 1 2> /dev/null
|
|
then
|
|
echo "Basic BPF metadata test [Failed record]"
|
|
err=1
|
|
return
|
|
fi
|
|
|
|
# The BPF programs that ship with "perf" all have the following
|
|
# variable defined at compile time:
|
|
#
|
|
# const char bpf_metadata_perf_version[] SEC(".rodata") = <...>;
|
|
#
|
|
# This invocation looks for a PERF_RECORD_BPF_METADATA event,
|
|
# and checks that its content contains the string given by
|
|
# "perf version".
|
|
VERS=$(perf version | awk '{print $NF}')
|
|
if ! perf script --show-bpf-events -i "${perfdata}" | awk '
|
|
/PERF_RECORD_BPF_METADATA.*perf_sample_filter/ {
|
|
header = 1;
|
|
}
|
|
/^ *entry/ {
|
|
if (header) { header = 0; entry = 1; }
|
|
}
|
|
$0 !~ /^ *entry/ {
|
|
entry = 0;
|
|
}
|
|
/perf_version/ {
|
|
if (entry) print $NF;
|
|
}
|
|
' | grep -qF "$VERS"
|
|
then
|
|
echo "Basic BPF metadata test [Failed invalid output]"
|
|
err=1
|
|
return
|
|
fi
|
|
echo "Basic BPF metadata test [Success]"
|
|
}
|
|
|
|
test_bpf_metadata
|
|
|
|
cleanup
|
|
exit $err
|