[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <6645190c-e66f-49db-a23d-e08f6308a422@linux.ibm.com>
Date: Thu, 18 Jul 2024 14:17:58 +0530
From: Aditya Gupta <adityag@...ux.ibm.com>
To: Ian Rogers <irogers@...gle.com>, Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...hat.com>,
Arnaldo Carvalho de Melo <acme@...nel.org>,
Namhyung Kim <namhyung@...nel.org>,
Mark Rutland <mark.rutland@....com>,
Alexander Shishkin <alexander.shishkin@...ux.intel.com>,
Jiri Olsa <jolsa@...nel.org>, Adrian Hunter <adrian.hunter@...el.com>,
Kan Liang <kan.liang@...ux.intel.com>, Andi Kleen <ak@...ux.intel.com>,
Thomas Richter <tmricht@...ux.ibm.com>, linux-kernel@...r.kernel.org,
linux-perf-users@...r.kernel.org
Subject: Re: [PATCH v1] perf test: Avoid python leak sanitizer test failures
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@...gle.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@...ux.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
Powered by blists - more mailing lists