[2/2] perf/test: Fix perf test 89 on x86

Message ID 20221213105729.1447368-2-tmricht@linux.ibm.com
State New
Headers
Series [1/2] perf/test: Fix perf test 84 on s390 |

Commit Message

Thomas Richter Dec. 13, 2022, 10:57 a.m. UTC
  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 <tmricht@linux.ibm.com>
---
 tools/perf/tests/shell/record+probe_libc_inet_pton.sh | 1 -
 1 file changed, 1 deletion(-)
  

Comments

Arnaldo Carvalho de Melo Dec. 13, 2022, 2:46 p.m. UTC | #1
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 <tmricht@linux.ibm.com>
> ---
>  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
  
Thomas Richter Dec. 14, 2022, 10:40 a.m. UTC | #2
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...
  
Arnaldo Carvalho de Melo Dec. 14, 2022, 2:34 p.m. UTC | #3
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
  

Patch

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