diff options
author | Kim Phillips <kim.phillips@arm.com> | 2018-06-29 13:46:43 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2018-07-11 09:01:51 -0400 |
commit | 98c6c8a1d00fba66625311730f80c6ceaa9c1d19 (patch) | |
tree | e9cb163624e94737fd5db006d89145ac73488e33 | |
parent | 508ef3e737bbb9858a30e7bb153507429ea89644 (diff) |
perf test shell: Make perf's inet_pton test more portable
Debian based systems such as Ubuntu have dash as their default shell.
Even if the normal or root user's shell is bash, certain scripts still
call /bin/sh, which points to dash, so we fix this perf test by
rewriting it in a more portable way.
BEFORE:
$ sudo perf test -v 64
64: probe libc's inet_pton & backtrace it with ping :
--- start ---
test child forked, pid 31942
./tests/shell/record+probe_libc_inet_pton.sh: 18: ./tests/shell/record+probe_libc_inet_pton.sh: expected[0]=ping[][0-9 \.:]+probe_libc:inet_pton: \([[:xdigit:]]+\): not found
./tests/shell/record+probe_libc_inet_pton.sh: 19: ./tests/shell/record+probe_libc_inet_pton.sh: expected[1]=.*inet_pton\+0x[[:xdigit:]]+[[:space:]]\(/lib/x86_64-linux-gnu/libc-2.27.so|inlined\)$: not found
./tests/shell/record+probe_libc_inet_pton.sh: 29: ./tests/shell/record+probe_libc_inet_pton.sh: expected[2]=getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\(/lib/x86_64-linux-gnu/libc-2.27.so\)$: not found
./tests/shell/record+probe_libc_inet_pton.sh: 30: ./tests/shell/record+probe_libc_inet_pton.sh: expected[3]=.*\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$: not found
ping 31963 [004] 83577.670613: probe_libc:inet_pton: (7fe15f87f4b0)
./tests/shell/record+probe_libc_inet_pton.sh: 39: ./tests/shell/record+probe_libc_inet_pton.sh: Bad substitution
./tests/shell/record+probe_libc_inet_pton.sh: 41: ./tests/shell/record+probe_libc_inet_pton.sh: Bad substitution
test child finished with -2
---- end ----
probe libc's inet_pton & backtrace it with ping: Skip
AFTER:
$ sudo perf test -v 64
64: probe libc's inet_pton & backtrace it with ping :
--- start ---
test child forked, pid 32277
ping 32295 [001] 83679.690020: probe_libc:inet_pton: (7ff244f504b0)
7ff244f504b0 __GI___inet_pton+0x0 (/lib/x86_64-linux-gnu/libc-2.27.so)
7ff244f14ce4 getaddrinfo+0x124 (/lib/x86_64-linux-gnu/libc-2.27.so)
556ac036b57d _init+0xb75 (/bin/ping)
test child finished with 0
---- end ----
probe libc's inet_pton & backtrace it with ping: Ok
Signed-off-by: Kim Phillips <kim.phillips@arm.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Sandipan Das <sandipan@linux.vnet.ibm.com>
Cc: Thomas Richter <tmricht@linux.vnet.ibm.com>
Link: http://lkml.kernel.org/r/20180629124643.2089b3ce59960eba34e87b27@arm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rwxr-xr-x | tools/perf/tests/shell/record+probe_libc_inet_pton.sh | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh index 263057039693..94e513e62b34 100755 --- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh +++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh | |||
@@ -14,35 +14,40 @@ libc=$(grep -w libc /proc/self/maps | head -1 | sed -r 's/.*[[:space:]](\/.*)/\1 | |||
14 | nm -Dg $libc 2>/dev/null | fgrep -q inet_pton || exit 254 | 14 | nm -Dg $libc 2>/dev/null | fgrep -q inet_pton || exit 254 |
15 | 15 | ||
16 | trace_libc_inet_pton_backtrace() { | 16 | trace_libc_inet_pton_backtrace() { |
17 | idx=0 | 17 | |
18 | expected[0]="ping[][0-9 \.:]+probe_libc:inet_pton: \([[:xdigit:]]+\)" | 18 | expected=`mktemp -u /tmp/expected.XXX` |
19 | expected[1]=".*inet_pton\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" | 19 | |
20 | echo "ping[][0-9 \.:]+probe_libc:inet_pton: \([[:xdigit:]]+\)" > $expected | ||
21 | echo ".*inet_pton\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> $expected | ||
20 | case "$(uname -m)" in | 22 | case "$(uname -m)" in |
21 | s390x) | 23 | s390x) |
22 | eventattr='call-graph=dwarf,max-stack=4' | 24 | eventattr='call-graph=dwarf,max-stack=4' |
23 | expected[2]="gaih_inet.*\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" | 25 | echo "gaih_inet.*\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> $expected |
24 | expected[3]="(__GI_)?getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" | 26 | echo "(__GI_)?getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc|inlined\)$" >> $expected |
25 | expected[4]="main\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$" | 27 | echo "main\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$" >> $expected |
26 | ;; | 28 | ;; |
27 | *) | 29 | *) |
28 | eventattr='max-stack=3' | 30 | eventattr='max-stack=3' |
29 | expected[2]="getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" | 31 | echo "getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected |
30 | expected[3]=".*\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$" | 32 | echo ".*\+0x[[:xdigit:]]+[[:space:]]\(.*/bin/ping.*\)$" >> $expected |
31 | ;; | 33 | ;; |
32 | esac | 34 | esac |
33 | 35 | ||
34 | file=`mktemp -u /tmp/perf.data.XXX` | 36 | perf_data=`mktemp -u /tmp/perf.data.XXX` |
37 | perf_script=`mktemp -u /tmp/perf.script.XXX` | ||
38 | perf record -e probe_libc:inet_pton/$eventattr/ -o $perf_data ping -6 -c 1 ::1 > /dev/null 2>&1 | ||
39 | perf script -i $perf_data > $perf_script | ||
35 | 40 | ||
36 | perf record -e probe_libc:inet_pton/$eventattr/ -o $file ping -6 -c 1 ::1 > /dev/null 2>&1 | 41 | exec 3<$perf_script |
37 | perf script -i $file | while read line ; do | 42 | exec 4<$expected |
43 | while read line <&3 && read -r pattern <&4; do | ||
44 | [ -z "$pattern" ] && break | ||
38 | echo $line | 45 | echo $line |
39 | echo "$line" | egrep -q "${expected[$idx]}" | 46 | echo "$line" | egrep -q "$pattern" |
40 | if [ $? -ne 0 ] ; then | 47 | if [ $? -ne 0 ] ; then |
41 | printf "FAIL: expected backtrace entry %d \"%s\" got \"%s\"\n" $idx "${expected[$idx]}" "$line" | 48 | printf "FAIL: expected backtrace entry \"%s\" got \"%s\"\n" "$pattern" "$line" |
42 | exit 1 | 49 | exit 1 |
43 | fi | 50 | fi |
44 | let idx+=1 | ||
45 | [ -z "${expected[$idx]}" ] && break | ||
46 | done | 51 | done |
47 | 52 | ||
48 | # If any statements are executed from this point onwards, | 53 | # If any statements are executed from this point onwards, |
@@ -58,6 +63,6 @@ skip_if_no_perf_probe && \ | |||
58 | perf probe -q $libc inet_pton && \ | 63 | perf probe -q $libc inet_pton && \ |
59 | trace_libc_inet_pton_backtrace | 64 | trace_libc_inet_pton_backtrace |
60 | err=$? | 65 | err=$? |
61 | rm -f ${file} | 66 | rm -f ${perf_data} ${perf_script} ${expected} |
62 | perf probe -q -d probe_libc:inet_pton | 67 | perf probe -q -d probe_libc:inet_pton |
63 | exit $err | 68 | exit $err |