perf/test: reduce run time of perf test Test java symbol

Message ID 20230509131847.835974-1-tmricht@linux.ibm.com
State New
Headers
Series perf/test: reduce run time of perf test Test java symbol |

Commit Message

Thomas Richter May 9, 2023, 1:18 p.m. UTC
  Test case Test java symbol might run a long time. On Fedora 38 the
run time is very, very long:

 Output before:
 # time ./perf test 108
 108: Test java symbol                  : Ok
 real   22m15.775s
 user   3m42.584s
 sys    4m30.685s
 #

The reason is a lookup for the server for debug symbols as shown in
 # cat /etc/debuginfod/elfutils.urls
 https://debuginfod.fedoraproject.org/
 #
This lookup is done for every symbol/sample, so about 3500 lookups
will take place.
To omit this lookup, which is not needed, unset environment variable
DEBUGINFOD_URLS=''.

 Output after:
 # time ./perf test 108
 108: Test java symbol                  : Ok

 real	0m6.242s
 user	0m4.982s
 sys	0m3.243s
 #

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Cc: leo.yan@linaro.org
Cc: irogers@google.com
---
 tools/perf/tests/shell/test_java_symbol.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Ian Rogers May 9, 2023, 5:34 p.m. UTC | #1
On Tue, May 9, 2023 at 6:19 AM Thomas Richter <tmricht@linux.ibm.com> wrote:
>
> Test case Test java symbol might run a long time. On Fedora 38 the
> run time is very, very long:
>
>  Output before:
>  # time ./perf test 108
>  108: Test java symbol                  : Ok
>  real   22m15.775s
>  user   3m42.584s
>  sys    4m30.685s
>  #
>
> The reason is a lookup for the server for debug symbols as shown in
>  # cat /etc/debuginfod/elfutils.urls
>  https://debuginfod.fedoraproject.org/
>  #
> This lookup is done for every symbol/sample, so about 3500 lookups
> will take place.
> To omit this lookup, which is not needed, unset environment variable
> DEBUGINFOD_URLS=''.
>
>  Output after:
>  # time ./perf test 108
>  108: Test java symbol                  : Ok
>
>  real   0m6.242s
>  user   0m4.982s
>  sys    0m3.243s
>  #
>
> Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
> Cc: leo.yan@linaro.org
> Cc: irogers@google.com
> ---
>  tools/perf/tests/shell/test_java_symbol.sh | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/tools/perf/tests/shell/test_java_symbol.sh b/tools/perf/tests/shell/test_java_symbol.sh
> index 90cea8811926..499539d1c479 100755
> --- a/tools/perf/tests/shell/test_java_symbol.sh
> +++ b/tools/perf/tests/shell/test_java_symbol.sh
> @@ -56,7 +56,7 @@ if [ $? -ne 0 ]; then
>         exit 1
>  fi
>
> -if ! perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then
> +if ! DEBUGINFOD_URLS='' perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then

Jiri, is this the best way to workaround a debuginfod slowness?

Thanks,
Ian

>         echo "Fail to inject samples"
>         exit 1
>  fi
> --
> 2.40.0
>
  
Arnaldo Carvalho de Melo May 9, 2023, 6:10 p.m. UTC | #2
Em Tue, May 09, 2023 at 10:34:44AM -0700, Ian Rogers escreveu:
> On Tue, May 9, 2023 at 6:19 AM Thomas Richter <tmricht@linux.ibm.com> wrote:
> >
> > Test case Test java symbol might run a long time. On Fedora 38 the
> > run time is very, very long:
> >
> >  Output before:
> >  # time ./perf test 108
> >  108: Test java symbol                  : Ok
> >  real   22m15.775s
> >  user   3m42.584s
> >  sys    4m30.685s
> >  #
> >
> > The reason is a lookup for the server for debug symbols as shown in
> >  # cat /etc/debuginfod/elfutils.urls
> >  https://debuginfod.fedoraproject.org/
> >  #
> > This lookup is done for every symbol/sample, so about 3500 lookups
> > will take place.
> > To omit this lookup, which is not needed, unset environment variable
> > DEBUGINFOD_URLS=''.
> >
> >  Output after:
> >  # time ./perf test 108
> >  108: Test java symbol                  : Ok
> >
> >  real   0m6.242s
> >  user   0m4.982s
> >  sys    0m3.243s
> >  #
> >
> > Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
> > Cc: leo.yan@linaro.org
> > Cc: irogers@google.com
> > ---
> >  tools/perf/tests/shell/test_java_symbol.sh | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/tools/perf/tests/shell/test_java_symbol.sh b/tools/perf/tests/shell/test_java_symbol.sh
> > index 90cea8811926..499539d1c479 100755
> > --- a/tools/perf/tests/shell/test_java_symbol.sh
> > +++ b/tools/perf/tests/shell/test_java_symbol.sh
> > @@ -56,7 +56,7 @@ if [ $? -ne 0 ]; then
> >         exit 1
> >  fi
> >
> > -if ! perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then
> > +if ! DEBUGINFOD_URLS='' perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then
> 
> Jiri, is this the best way to workaround a debuginfod slowness?

I noticed this delay, It is good that someone worked on rootcausing this
excessive delay, thanks Thomas.

I'll test it now.

- Arnaldo
  
Arnaldo Carvalho de Melo May 9, 2023, 6:16 p.m. UTC | #3
Em Tue, May 09, 2023 at 03:10:58PM -0300, Arnaldo Carvalho de Melo escreveu:
> > On Tue, May 9, 2023 at 6:19 AM Thomas Richter <tmricht@linux.ibm.com> wrote:
> > > -if ! perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then
> > > +if ! DEBUGINFOD_URLS='' perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then
 
> I noticed this delay, It is good that someone worked on rootcausing this
> excessive delay, thanks Thomas.
> 
> I'll test it now.

gdb asks the user if debuginfod should be used, perf is doing this if
the system is configured for debuginfod queries via a systemwide config,
what is best? Unsure, but since the test passes, i.e. the expected
symbols are found in the 'perf report' output, avoiding debuginfod
queries seems to fit the bill,

Applied,

- Arnaldo
  

Patch

diff --git a/tools/perf/tests/shell/test_java_symbol.sh b/tools/perf/tests/shell/test_java_symbol.sh
index 90cea8811926..499539d1c479 100755
--- a/tools/perf/tests/shell/test_java_symbol.sh
+++ b/tools/perf/tests/shell/test_java_symbol.sh
@@ -56,7 +56,7 @@  if [ $? -ne 0 ]; then
 	exit 1
 fi
 
-if ! perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then
+if ! DEBUGINFOD_URLS='' perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then
 	echo "Fail to inject samples"
 	exit 1
 fi