linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1] perf test: Avoid python leak sanitizer test failures
@ 2024-07-17 16:57 Ian Rogers
  2024-07-18  8:47 ` Aditya Gupta
  0 siblings, 1 reply; 3+ messages in thread
From: Ian Rogers @ 2024-07-17 16:57 UTC (permalink / raw)
  To: Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
	Ian Rogers, Adrian Hunter, Kan Liang, Andi Kleen, Thomas Richter,
	Aditya Gupta, linux-kernel, linux-perf-users

Leak sanitizer will report memory leaks from python and the leak
sanitizer output causes tests to fail. For example:

```
$ perf test 98 -v
 98: perf script tests:
--- start ---
test child forked, pid 1272962
DB test
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.046 MB /tmp/perf-test-script.x0EktdCel8/perf.data (8 samples) ]
call_path_table((1, 0, 0, 0)
call_path_table((2, 1, 0, 140339508617447)
call_path_table((3, 2, 2, 0)
call_path_table((4, 3, 3, 0)
call_path_table((5, 4, 4, 0)
call_path_table((6, 5, 5, 0)
call_path_table((7, 6, 6, 0)
call_path_table((8, 7, 7, 0)
call_path_table((9, 8, 8, 0)
call_path_table((10, 9, 9, 0)
call_path_table((11, 10, 10, 0)
call_path_table((12, 11, 11, 0)
call_path_table((13, 12, 1, 0)
sample_table((1, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954119000, -1, 0, 0, 0, 0, 1, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
sample_table((2, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954137053, -1, 0, 0, 0, 0, 1, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
sample_table((3, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954140089, -1, 0, 0, 0, 0, 9, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
sample_table((4, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954142376, -1, 0, 0, 0, 0, 155, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
sample_table((5, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954144045, -1, 0, 0, 0, 0, 2493, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
sample_table((6, 1, 1, 1, 1, 1, 12, 77, -2046828595, 588306954145722, -1, 0, 0, 0, 0, 47555, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
call_path_table((14, 9, 14, 0)
call_path_table((15, 14, 15, 0)
call_path_table((16, 15, 0, -1040969624)
call_path_table((17, 16, 16, 0)
call_path_table((18, 17, 17, 0)
call_path_table((19, 18, 18, 0)
call_path_table((20, 19, 19, 0)
call_path_table((21, 20, 13, 0)
sample_table((7, 1, 1, 1, 2, 1, 13, 46, -2053700898, 588306954157436, -1, 0, 0, 0, 0, 964078, 0, 0, 128933429281, 0, 0, 21, 0, 0, 0, -1, -1))
call_path_table((22, 1, 21, 0)
call_path_table((23, 22, 22, 0)
call_path_table((24, 23, 23, 0)
call_path_table((25, 24, 24, 0)
call_path_table((26, 25, 25, 0)
call_path_table((27, 26, 26, 0)
call_path_table((28, 27, 27, 0)
call_path_table((29, 28, 28, 0)
call_path_table((30, 29, 29, 0)
call_path_table((31, 30, 30, 0)
call_path_table((32, 31, 31, 0)
call_path_table((33, 32, 32, 0)
call_path_table((34, 33, 33, 0)
call_path_table((35, 34, 20, 0)
sample_table((8, 1, 1, 1, 2, 1, 20, 49, -2046878127, 588306954378624, -1, 0, 0, 0, 0, 2534317, 0, 0, 128933429281, 0, 0, 35, 0, 0, 0, -1, -1))

=================================================================
==1272975==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 13628 byte(s) in 6 object(s) allocated from:
    #0 0x56354f60c092 in malloc (/tmp/perf/perf+0x29c092)
    #1 0x7ff25c7d02e7 in _PyObject_Malloc /build/python3.11/../Objects/obmalloc.c:2003:11
    #2 0x7ff25c7d02e7 in _PyObject_Malloc /build/python3.11/../Objects/obmalloc.c:1996:1

SUMMARY: AddressSanitizer: 13628 byte(s) leaked in 6 allocation(s).
--- Cleaning up ---
---- end(-1) ----
 98: perf script tests                                               : FAILED!
```

Disable leak sanitizer when running specific perf+python tests to
avoid this. This causes the tests to pass when run with leak
sanitizer.

Signed-off-by: Ian Rogers <irogers@google.com>
---
 tools/perf/tests/shell/script.sh             | 3 +++
 tools/perf/tests/shell/test_task_analyzer.sh | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/tools/perf/tests/shell/script.sh b/tools/perf/tests/shell/script.sh
index c1a603653662..d3e2958d2242 100755
--- a/tools/perf/tests/shell/script.sh
+++ b/tools/perf/tests/shell/script.sh
@@ -61,7 +61,10 @@ _end_of_file_
 	esac
 
 	perf record $cmd_flags -o "${perfdatafile}" true
+	# Disable lsan to avoid warnings about python memory leaks.
+	export ASAN_OPTIONS=detect_leaks=0
 	perf script -i "${perfdatafile}" -s "${db_test}"
+	export ASAN_OPTIONS=
 	echo "DB test [Success]"
 }
 
diff --git a/tools/perf/tests/shell/test_task_analyzer.sh b/tools/perf/tests/shell/test_task_analyzer.sh
index 92d15154ba79..cb02bf23e6a5 100755
--- a/tools/perf/tests/shell/test_task_analyzer.sh
+++ b/tools/perf/tests/shell/test_task_analyzer.sh
@@ -11,6 +11,9 @@ if [ -e "$perfdir/scripts/python/Perf-Trace-Util" ]; then
   export PERF_EXEC_PATH=$perfdir
 fi
 
+# Disable lsan to avoid warnings about python memory leaks.
+export ASAN_OPTIONS=detect_leaks=0
+
 cleanup() {
   rm -f perf.data
   rm -f perf.data.old
-- 
2.45.2.1089.g2a221341d9-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v1] perf test: Avoid python leak sanitizer test failures
  2024-07-17 16:57 [PATCH v1] perf test: Avoid python leak sanitizer test failures Ian Rogers
@ 2024-07-18  8:47 ` Aditya Gupta
  2024-07-23 18:33   ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 3+ messages in thread
From: Aditya Gupta @ 2024-07-18  8:47 UTC (permalink / raw)
  To: Ian Rogers, Peter Zijlstra, Ingo Molnar, Arnaldo Carvalho de Melo,
	Namhyung Kim, Mark Rutland, Alexander Shishkin, Jiri Olsa,
	Adrian Hunter, Kan Liang, Andi Kleen, Thomas Richter,
	linux-kernel, linux-perf-users

Hi,


On 17/07/24 22:27, Ian Rogers wrote:

> Leak sanitizer will report memory leaks from python and the leak
> sanitizer output causes tests to fail. For example:
>
> ```
> $ perf test 98 -v
>   98: perf script tests:
> --- start ---
> test child forked, pid 1272962
> DB test
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.046 MB /tmp/perf-test-script.x0EktdCel8/perf.data (8 samples) ]
> call_path_table((1, 0, 0, 0)
> call_path_table((2, 1, 0, 140339508617447)
> call_path_table((3, 2, 2, 0)
> call_path_table((4, 3, 3, 0)
> call_path_table((5, 4, 4, 0)
> call_path_table((6, 5, 5, 0)
> call_path_table((7, 6, 6, 0)
> call_path_table((8, 7, 7, 0)
> call_path_table((9, 8, 8, 0)
> call_path_table((10, 9, 9, 0)
> call_path_table((11, 10, 10, 0)
> call_path_table((12, 11, 11, 0)
> call_path_table((13, 12, 1, 0)
> sample_table((1, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954119000, -1, 0, 0, 0, 0, 1, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
> sample_table((2, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954137053, -1, 0, 0, 0, 0, 1, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
> sample_table((3, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954140089, -1, 0, 0, 0, 0, 9, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
> sample_table((4, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954142376, -1, 0, 0, 0, 0, 155, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
> sample_table((5, 1, 1, 1, 1, 1, 1, 8, -2058824120, 588306954144045, -1, 0, 0, 0, 0, 2493, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
> sample_table((6, 1, 1, 1, 1, 1, 12, 77, -2046828595, 588306954145722, -1, 0, 0, 0, 0, 47555, 0, 0, 128933429281, 0, 0, 13, 0, 0, 0, -1, -1))
> call_path_table((14, 9, 14, 0)
> call_path_table((15, 14, 15, 0)
> call_path_table((16, 15, 0, -1040969624)
> call_path_table((17, 16, 16, 0)
> call_path_table((18, 17, 17, 0)
> call_path_table((19, 18, 18, 0)
> call_path_table((20, 19, 19, 0)
> call_path_table((21, 20, 13, 0)
> sample_table((7, 1, 1, 1, 2, 1, 13, 46, -2053700898, 588306954157436, -1, 0, 0, 0, 0, 964078, 0, 0, 128933429281, 0, 0, 21, 0, 0, 0, -1, -1))
> call_path_table((22, 1, 21, 0)
> call_path_table((23, 22, 22, 0)
> call_path_table((24, 23, 23, 0)
> call_path_table((25, 24, 24, 0)
> call_path_table((26, 25, 25, 0)
> call_path_table((27, 26, 26, 0)
> call_path_table((28, 27, 27, 0)
> call_path_table((29, 28, 28, 0)
> call_path_table((30, 29, 29, 0)
> call_path_table((31, 30, 30, 0)
> call_path_table((32, 31, 31, 0)
> call_path_table((33, 32, 32, 0)
> call_path_table((34, 33, 33, 0)
> call_path_table((35, 34, 20, 0)
> sample_table((8, 1, 1, 1, 2, 1, 20, 49, -2046878127, 588306954378624, -1, 0, 0, 0, 0, 2534317, 0, 0, 128933429281, 0, 0, 35, 0, 0, 0, -1, -1))
>
> =================================================================
> ==1272975==ERROR: LeakSanitizer: detected memory leaks
>
> Direct leak of 13628 byte(s) in 6 object(s) allocated from:
>      #0 0x56354f60c092 in malloc (/tmp/perf/perf+0x29c092)
>      #1 0x7ff25c7d02e7 in _PyObject_Malloc /build/python3.11/../Objects/obmalloc.c:2003:11
>      #2 0x7ff25c7d02e7 in _PyObject_Malloc /build/python3.11/../Objects/obmalloc.c:1996:1
>
> SUMMARY: AddressSanitizer: 13628 byte(s) leaked in 6 allocation(s).
> --- Cleaning up ---
> ---- end(-1) ----
>   98: perf script tests                                               : FAILED!
> ```
>
> Disable leak sanitizer when running specific perf+python tests to
> avoid this. This causes the tests to pass when run with leak
> sanitizer.
>
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>   tools/perf/tests/shell/script.sh             | 3 +++
>   tools/perf/tests/shell/test_task_analyzer.sh | 3 +++
>   2 files changed, 6 insertions(+)
>
> diff --git a/tools/perf/tests/shell/script.sh b/tools/perf/tests/shell/script.sh
> index c1a603653662..d3e2958d2242 100755
> --- a/tools/perf/tests/shell/script.sh
> +++ b/tools/perf/tests/shell/script.sh
> @@ -61,7 +61,10 @@ _end_of_file_
>   	esac
>   
>   	perf record $cmd_flags -o "${perfdatafile}" true
> +	# Disable lsan to avoid warnings about python memory leaks.
> +	export ASAN_OPTIONS=detect_leaks=0
>   	perf script -i "${perfdatafile}" -s "${db_test}"
> +	export ASAN_OPTIONS=
>   	echo "DB test [Success]"
>   }
>   
> diff --git a/tools/perf/tests/shell/test_task_analyzer.sh b/tools/perf/tests/shell/test_task_analyzer.sh
> index 92d15154ba79..cb02bf23e6a5 100755
> --- a/tools/perf/tests/shell/test_task_analyzer.sh
> +++ b/tools/perf/tests/shell/test_task_analyzer.sh
> @@ -11,6 +11,9 @@ if [ -e "$perfdir/scripts/python/Perf-Trace-Util" ]; then
>     export PERF_EXEC_PATH=$perfdir
>   fi
>   
> +# Disable lsan to avoid warnings about python memory leaks.
> +export ASAN_OPTIONS=detect_leaks=0
> +
>   cleanup() {
>     rm -f perf.data
>     rm -f perf.data.old

Looks good, and test passes with this patch:

Reviewed-by: Aditya Gupta <adityag@linux.ibm.com>


Linux-ci build test results: 
https://github.com/adi-g15-ibm/linux-ci/actions?query=branch%3Atmp-test-branch-25073


Thanks,
Aditya Gupta


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v1] perf test: Avoid python leak sanitizer test failures
  2024-07-18  8:47 ` Aditya Gupta
@ 2024-07-23 18:33   ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 3+ messages in thread
From: Arnaldo Carvalho de Melo @ 2024-07-23 18:33 UTC (permalink / raw)
  To: Aditya Gupta
  Cc: Ian Rogers, Peter Zijlstra, Ingo Molnar, Namhyung Kim,
	Mark Rutland, Alexander Shishkin, Jiri Olsa, Adrian Hunter,
	Kan Liang, Andi Kleen, Thomas Richter, linux-kernel,
	linux-perf-users

On Thu, Jul 18, 2024 at 02:17:58PM +0530, Aditya Gupta wrote:
> On 17/07/24 22:27, Ian Rogers wrote:
> > +# Disable lsan to avoid warnings about python memory leaks.
> > +export ASAN_OPTIONS=detect_leaks=0
> > +
> >   cleanup() {
> >     rm -f perf.data
> >     rm -f perf.data.old
 
> Looks good, and test passes with this patch:
 
> Reviewed-by: Aditya Gupta <adityag@linux.ibm.com>

Thanks, applied to tmp.perf-tools-next,

- Arnaldo
 
> 
> Linux-ci build test results: https://github.com/adi-g15-ibm/linux-ci/actions?query=branch%3Atmp-test-branch-25073

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-07-23 18:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-17 16:57 [PATCH v1] perf test: Avoid python leak sanitizer test failures Ian Rogers
2024-07-18  8:47 ` Aditya Gupta
2024-07-23 18:33   ` Arnaldo Carvalho de Melo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).