2022-12-13 11:07:27

by Thomas Richter

[permalink] [raw]
Subject: [PATCH 2/2] perf/test: Fix perf test 89 on x86

perf test '89: probe libc's inet_pton & backtrace it with ping'
fails on x86. Debugging revealed a changed stack trace for the
ping command using probes:

ping 35729 [002] 8006.365063: probe_libc:inet_pton: (3ff9603e7c0)
12be50 __GI___inet_pton+0x0 (/usr/lib64/libc.so.6)
4fca main+0x139b (/usr/bin/ping)

The line getaddrinfo.... in the call stack is gone.
It was introduced with glibc version 2.36.8 released
with Fedora 37.

Output before on x86
# ./perf test 89
89: probe libc's inet_pton & backtrace it with ping : FAILED!
#

Output after on x86:
# ./perf test 89
89: probe libc's inet_pton & backtrace it with ping : Ok
#

Signed-off-by: Thomas Richter <[email protected]>
---
tools/perf/tests/shell/record+probe_libc_inet_pton.sh | 1 -
1 file changed, 1 deletion(-)

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 0f01c62cbee9..51ae8b906055 100755
--- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
+++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
@@ -50,7 +50,6 @@ trace_libc_inet_pton_backtrace() {
;;
*)
eventattr='max-stack=3'
- echo "getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
echo ".*(\+0x[[:xdigit:]]+|\[unknown\])[[:space:]]\(.*/bin/ping.*\)$" >> $expected
;;
esac
--
2.38.1


2022-12-13 15:43:59

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH 2/2] perf/test: Fix perf test 89 on x86

Em Tue, Dec 13, 2022 at 11:57:29AM +0100, Thomas Richter escreveu:
> perf test '89: probe libc's inet_pton & backtrace it with ping'
> fails on x86. Debugging revealed a changed stack trace for the
> ping command using probes:
>
> ping 35729 [002] 8006.365063: probe_libc:inet_pton: (3ff9603e7c0)
> 12be50 __GI___inet_pton+0x0 (/usr/lib64/libc.so.6)
> 4fca main+0x139b (/usr/bin/ping)
>
> The line getaddrinfo.... in the call stack is gone.
> It was introduced with glibc version 2.36.8 released
> with Fedora 37.
>
> Output before on x86
> # ./perf test 89
> 89: probe libc's inet_pton & backtrace it with ping : FAILED!
> #
>
> Output after on x86:
> # ./perf test 89
> 89: probe libc's inet_pton & backtrace it with ping : Ok
> #

Not having at the current state of that script, that $expected may be a
subset of the actual backtrace, i.e. will this continue working with
the systems where that getaddrinfo line appear?

- Arnaldo

> Signed-off-by: Thomas Richter <[email protected]>
> ---
> tools/perf/tests/shell/record+probe_libc_inet_pton.sh | 1 -
> 1 file changed, 1 deletion(-)
>
> 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 0f01c62cbee9..51ae8b906055 100755
> --- a/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
> +++ b/tools/perf/tests/shell/record+probe_libc_inet_pton.sh
> @@ -50,7 +50,6 @@ trace_libc_inet_pton_backtrace() {
> ;;
> *)
> eventattr='max-stack=3'
> - echo "getaddrinfo\+0x[[:xdigit:]]+[[:space:]]\($libc\)$" >> $expected
> echo ".*(\+0x[[:xdigit:]]+|\[unknown\])[[:space:]]\(.*/bin/ping.*\)$" >> $expected
> ;;
> esac
> --
> 2.38.1

--

- Arnaldo

2022-12-14 10:54:21

by Thomas Richter

[permalink] [raw]
Subject: Re: [PATCH 2/2] perf/test: Fix perf test 89 on x86

On 12/13/22 15:46, Arnaldo Carvalho de Melo wrote:
> Em Tue, Dec 13, 2022 at 11:57:29AM +0100, Thomas Richter escreveu:
>> perf test '89: probe libc's inet_pton & backtrace it with ping'
>> fails on x86. Debugging revealed a changed stack trace for the
>> ping command using probes:
>>
>> ping 35729 [002] 8006.365063: probe_libc:inet_pton: (3ff9603e7c0)
>> 12be50 __GI___inet_pton+0x0 (/usr/lib64/libc.so.6)
>> 4fca main+0x139b (/usr/bin/ping)
>>
>> The line getaddrinfo.... in the call stack is gone.
>> It was introduced with glibc version 2.36.8 released
>> with Fedora 37.
>>
>> Output before on x86
>> # ./perf test 89
>> 89: probe libc's inet_pton & backtrace it with ping : FAILED!
>> #
>>
>> Output after on x86:
>> # ./perf test 89
>> 89: probe libc's inet_pton & backtrace it with ping : Ok
>> #
>
> Not having at the current state of that script, that $expected may be a
> subset of the actual backtrace, i.e. will this continue working with
> the systems where that getaddrinfo line appear?
>
> - Arnaldo
>

No, that is not the case.
Taking this into account requires a larger rework of the call stack
checking. Not just simple line by line matching which is done now.
It also raises the question of how far to go back
in glibc history. Different versions of glibc have different call stacks.

I will rethink this...
--
Thomas Richter, Dept 3303, IBM s390 Linux Development, Boeblingen, Germany
--
Vorsitzender des Aufsichtsrats: Gregor Pillen
Geschäftsführung: David Faller
Sitz der Gesellschaft: Böblingen / Registergericht: Amtsgericht Stuttgart, HRB 243294

2022-12-14 15:11:05

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH 2/2] perf/test: Fix perf test 89 on x86

Em Wed, Dec 14, 2022 at 11:40:32AM +0100, Thomas Richter escreveu:
> On 12/13/22 15:46, Arnaldo Carvalho de Melo wrote:
> > Em Tue, Dec 13, 2022 at 11:57:29AM +0100, Thomas Richter escreveu:
> >> perf test '89: probe libc's inet_pton & backtrace it with ping'
> >> fails on x86. Debugging revealed a changed stack trace for the
> >> ping command using probes:

> >> ping 35729 [002] 8006.365063: probe_libc:inet_pton: (3ff9603e7c0)
> >> 12be50 __GI___inet_pton+0x0 (/usr/lib64/libc.so.6)
> >> 4fca main+0x139b (/usr/bin/ping)

> >> The line getaddrinfo.... in the call stack is gone.
> >> It was introduced with glibc version 2.36.8 released
> >> with Fedora 37.

> >> Output before on x86
> >> # ./perf test 89
> >> 89: probe libc's inet_pton & backtrace it with ping : FAILED!
> >> #

> >> Output after on x86:
> >> # ./perf test 89
> >> 89: probe libc's inet_pton & backtrace it with ping : Ok
> >> #

> > Not having at the current state of that script, that $expected may be a
> > subset of the actual backtrace, i.e. will this continue working with
> > the systems where that getaddrinfo line appear?

> No, that is not the case.
> Taking this into account requires a larger rework of the call stack
> checking. Not just simple line by line matching which is done now.
> It also raises the question of how far to go back
> in glibc history. Different versions of glibc have different call stacks.

> I will rethink this...

One possibility is to have the options on a temp file, the previous one,
then if it fails, remove the getaddrinfo line and try again, if it
works, its the new glibc, test result is Ok.

Add a commment stating that from circa glibc versiuon 2.36.8 the
getaddrinfo isn't there anymore.

- Arnaldo