Skip to content

Commit 9a7b618

Browse files
Leo-Yanacmel
authored andcommitted
perf test record+probe_libc_inet_pton: Make test resilient
The test failed back and forth due to the call chain being heavily impacted by the libc, which varies across different architectures and distros. The libc contains the symbols for "gaih_inet" and "getaddrinfo" in some cases, but not always. Moreover, these symbols can be either normal symbols or dynamic symbols, making it difficult to decide the call chain entries due to the symbols are inconsistent. To fix the issue, this commit identifies three call chain entries are always present. These entries are matched by iterating through the lines in the "perf script" result. The recording attribute max-stack is set to 4 for the possible maximum call chain depth. After: # perf test -vF pton --- start --- Pattern: ping[][0-9 \.:]+probe_libc:inet_pton: \([[:xdigit:]]+\) Matching: ping 285058 [025] 1219802.466939: probe_libc:inet_pton: (ffffa14b7cf0) Pattern: .*inet_pton\+0x[[:xdigit:]]+[[:space:]]\(/usr/lib/aarch64-linux-gnu/libc-2.31.so|inlined\)$ Matching: ping 285058 [025] 1219802.466939: probe_libc:inet_pton: (ffffa14b7cf0) Matching: ffffa14b7cf0 __GI___inet_pton+0x0 (/usr/lib/aarch64-linux-gnu/libc-2.31.so) Pattern: .*(\+0x[[:xdigit:]]+|\[unknown\])[[:space:]]\(.*/bin/ping.*\)$ Matching: ping 285058 [025] 1219802.466939: probe_libc:inet_pton: (ffffa14b7cf0) Matching: ffffa14b7cf0 __GI___inet_pton+0x0 (/usr/lib/aarch64-linux-gnu/libc-2.31.so) Matching: ffffa1488040 getaddrinfo+0xe8 (/usr/lib/aarch64-linux-gnu/libc-2.31.so) Matching: aaaab8672da4 [unknown] (/usr/bin/ping) ---- end ---- 82: probe libc's inet_pton & backtrace it with ping : Ok Closes: https://lore.kernel.org/linux-perf-users/1728978807-81116-1-git-send-email-renyu.zj@linux.alibaba.com/ Closes: https://lore.kernel.org/linux-perf-users/Z0X3AYUWkAgfPpWj@x1/T/#m57327e135b156047e37d214a0d453af6ae1e02be Reported-by: Guilherme Amadio <amadio@gentoo.org> Reported-by: Jing Zhang <renyu.zj@linux.alibaba.com> Reviewed-by: James Clark <james.clark@linaro.org> Signed-off-by: Leo Yan <leo.yan@arm.com> Tested-by: Thomas Richter <tmricht@linux.ibm.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: Ian Rogers <irogers@google.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> Link: https://lore.kernel.org/r/20241202111958.553403-1-leo.yan@arm.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 parent 8e246a1 commit 9a7b618

File tree

1 file changed

+18
-16
lines changed

1 file changed

+18
-16
lines changed

tools/perf/tests/shell/record+probe_libc_inet_pton.sh

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,8 @@ trace_libc_inet_pton_backtrace() {
4343
echo "((__GI_)?getaddrinfo|text_to_binary_address)\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> $expected
4444
echo "(gaih_inet|main)\+0x[[:xdigit:]]+[[:space:]]\(inlined|.*/bin/ping.*\)$" >> $expected
4545
;;
46-
ppc64|ppc64le)
47-
eventattr='max-stack=4'
48-
# Add gaih_inet to expected backtrace only if it is part of libc.
49-
if nm $libc | grep -F -q gaih_inet.; then
50-
echo "gaih_inet.*\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
51-
fi
52-
echo "getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
53-
echo ".*(\+0x[[:xdigit:]]+|\[unknown\])[[:space:]]\(.*/bin/ping.*\)$" >> $expected
54-
;;
5546
*)
56-
eventattr='max-stack=3'
47+
eventattr='max-stack=4'
5748
echo ".*(\+0x[[:xdigit:]]+|\[unknown\])[[:space:]]\(.*/bin/ping.*\)$" >> $expected
5849
;;
5950
esac
@@ -76,14 +67,25 @@ trace_libc_inet_pton_backtrace() {
7667
fi
7768
perf script -i $perf_data | tac | grep -m1 ^ping -B9 | tac > $perf_script
7869

79-
exec 3<$perf_script
8070
exec 4<$expected
81-
while read line <&3 && read -r pattern <&4; do
71+
while read -r pattern <&4; do
72+
echo "Pattern: $pattern"
8273
[ -z "$pattern" ] && break
83-
echo $line
84-
echo "$line" | grep -E -q "$pattern"
85-
if [ $? -ne 0 ] ; then
86-
printf "FAIL: expected backtrace entry \"%s\" got \"%s\"\n" "$pattern" "$line"
74+
75+
found=0
76+
77+
# Search lines in the perf script result
78+
exec 3<$perf_script
79+
while read line <&3; do
80+
[ -z "$line" ] && break
81+
echo " Matching: $line"
82+
! echo "$line" | grep -E -q "$pattern"
83+
found=$?
84+
[ $found -eq 1 ] && break
85+
done
86+
87+
if [ $found -ne 1 ] ; then
88+
printf "FAIL: Didn't find the expected backtrace entry \"%s\"\n" "$pattern"
8789
return 1
8890
fi
8991
done

0 commit comments

Comments
 (0)