Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf tests shell: Fix check for libtracevent support

Test “Use vfs_getname probe to get syscall args filenames” fails in
environment with missing libtraceevent support as below:

82: Use vfs_getname probe to get syscall args filenames :
--- start ---
test child forked, pid 304726
Recording open file:
event syntax error: 'probe:vfs_getname*'
\___ unsupported tracepoint

libtraceevent is necessary for tracepoint support
Run 'perf list' for a list of valid events

Usage: perf record [<options>] [<command>]
or: perf record [<options>] -- <command> [<options>]

-e, --event <event> event selector. use 'perf list' to list available events
test child finished with -1
---- end ----
Use vfs_getname probe to get syscall args filenames: FAILED!

The environment has debuginfo but is missing the libtraceevent devel.

Hence perf is compiled without libtraceevent support. The test tries to
add probe “probe:vfs_getname” and then uses it with “perf record”. This
fails at function “parse_events_add_tracepoint" due to missing
libtraceevent.

Similarly "probe libc's inet_pton & backtrace it with ping" test slso
fails with same reason.

Add a function in 'perf test shell' library to check if perf record with
—dry-run reports any error on missing support for libtraceevent. Update
both the tests to use this new function “skip_no_probe_record_support”
before proceeding With using probe point via perf builtin record.

With the change,

82: Use vfs_getname probe to get syscall args filenames :
--- start ---
test child forked, pid 305014
Recording open file:
libtraceevent is necessary for tracepoint support
test child finished with -2
---- end ----
Use vfs_getname probe to get syscall args filenames: Skip

81: probe libc's inet_pton & backtrace it with ping :
--- start ---
test child forked, pid 305036
libtraceevent is necessary for tracepoint support
test child finished with -2
---- end ----
probe libc's inet_pton & backtrace it with ping: Skip

Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Disha Goel <disgoel@linux.ibm.com>
Cc: Ian Rogers <irogers@google.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Nageswara R Sastry <rnsastry@linux.ibm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: kjain@linux.ibm.com,
Cc: linuxppc-dev@lists.ozlabs.org
Link: http://lore.kernel.org/r/20230201180421.59640-2-atrajeev@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Athira Rajeev and committed by
Arnaldo Carvalho de Melo
766b0bee 84cce3d6

+17
+8
tools/perf/tests/shell/lib/probe_vfs_getname.sh
··· 22 22 add_probe_vfs_getname -v 2>&1 | grep -E -q "^(Failed to find the path for the kernel|Debuginfo-analysis is not supported)|(file has no debug information)" && return 2 23 23 return 1 24 24 } 25 + 26 + # check if perf is compiled with libtraceevent support 27 + skip_no_probe_record_support() { 28 + if [ $had_vfs_getname -eq 1 ] ; then 29 + perf record --dry-run -e $1 2>&1 | grep "libtraceevent is necessary for tracepoint support" && return 2 30 + return 1 31 + fi 32 + }
+6
tools/perf/tests/shell/record+probe_libc_inet_pton.sh
··· 11 11 # Arnaldo Carvalho de Melo <acme@kernel.org>, 2017 12 12 13 13 . $(dirname $0)/lib/probe.sh 14 + . $(dirname $0)/lib/probe_vfs_getname.sh 14 15 15 16 libc=$(grep -w libc /proc/self/maps | head -1 | sed -r 's/.*[[:space:]](\/.*)/\1/g') 16 17 nm -Dg $libc 2>/dev/null | fgrep -q inet_pton || exit 254 ··· 58 57 59 58 perf_data=`mktemp -u /tmp/perf.data.XXX` 60 59 perf_script=`mktemp -u /tmp/perf.script.XXX` 60 + 61 + # Check presence of libtraceevent support to run perf record 62 + skip_no_probe_record_support "$event_name/$eventattr/" 63 + [ $? -eq 2 ] && return 2 64 + 61 65 perf record -e $event_name/$eventattr/ -o $perf_data ping -6 -c 1 ::1 > /dev/null 2>&1 62 66 # check if perf data file got created in above step. 63 67 if [ ! -e $perf_data ]; then
+3
tools/perf/tests/shell/record+script_probe_vfs_getname.sh
··· 17 17 18 18 record_open_file() { 19 19 echo "Recording open file:" 20 + # Check presence of libtraceevent support to run perf record 21 + skip_no_probe_record_support "probe:vfs_getname*" 22 + [ $? -eq 2 ] && return 2 20 23 perf record -o ${perfdata} -e probe:vfs_getname\* touch $file 21 24 } 22 25