linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Aditya Gupta <adityag@linux.ibm.com>
To: Ian Rogers <irogers@google.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Namhyung Kim <namhyung@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Thomas Richter <tmricht@linux.ibm.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v1] perf test: Avoid python leak sanitizer test failures
Date: Thu, 18 Jul 2024 14:17:58 +0530	[thread overview]
Message-ID: <6645190c-e66f-49db-a23d-e08f6308a422@linux.ibm.com> (raw)
In-Reply-To: <20240717165717.1315003-1-irogers@google.com>

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


  reply	other threads:[~2024-07-18  8:48 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-17 16:57 [PATCH v1] perf test: Avoid python leak sanitizer test failures Ian Rogers
2024-07-18  8:47 ` Aditya Gupta [this message]
2024-07-23 18:33   ` Arnaldo Carvalho de Melo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=6645190c-e66f-49db-a23d-e08f6308a422@linux.ibm.com \
    --to=adityag@linux.ibm.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=irogers@google.com \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tmricht@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).