From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: vmolnaro@redhat.com
Cc: linux-perf-users@vger.kernel.org, acme@redhat.com,
mpetlan@redhat.com, peterz@infradead.org, mingo@redhat.com,
namhyung@kernel.org, mark.rutland@arm.com,
alexander.shishkin@linux.intel.com, jolsa@kernel.org,
irogers@google.com, adrian.hunter@intel.com,
kan.liang@linux.intel.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] perf test: Handle perftool-testsuite_probe failure due to broken DWARF
Date: Wed, 23 Oct 2024 17:24:10 -0300 [thread overview]
Message-ID: <ZxlbakzNhwDTTlWf@x1> (raw)
In-Reply-To: <20241017161555.236769-1-vmolnaro@redhat.com>
On Thu, Oct 17, 2024 at 06:15:55PM +0200, vmolnaro@redhat.com wrote:
> From: Veronika Molnarova <vmolnaro@redhat.com>
>
> Test case test_adding_blacklisted ends in failure if the blacklisted
> probe is of an assembler function with no DWARF available. At the same
> time, probing the blacklisted function with ASM DWARF doesn't test the
> blacklist itself as the failure is a result of the broken DWARF.
>
> When the broken DWARF output is encountered, check if the probed
> function was compiled by the assembler. If so, the broken DWARF message
> is expected and does not report a perf issue, else report a failure.
> If the ASM DWARF affected the probe, try the next probe on the blacklist.
> If the first 5 probes are defective due to broken DWARF, skip the test
> case.
Tested and applied to perf-tools.
- Arnaldo
> Fixes: def5480d63c1e847 ("perf testsuite probe: Add test for blacklisted kprobes handling")
> Signed-off-by: Veronika Molnarova <vmolnaro@redhat.com>
> ---
> .../base_probe/test_adding_blacklisted.sh | 69 +++++++++++++++----
> 1 file changed, 54 insertions(+), 15 deletions(-)
>
> diff --git a/tools/perf/tests/shell/base_probe/test_adding_blacklisted.sh b/tools/perf/tests/shell/base_probe/test_adding_blacklisted.sh
> index b5dc10b2a73810b3..bead723e34af3f0e 100755
> --- a/tools/perf/tests/shell/base_probe/test_adding_blacklisted.sh
> +++ b/tools/perf/tests/shell/base_probe/test_adding_blacklisted.sh
> @@ -19,35 +19,74 @@
> TEST_RESULT=0
>
> # skip if not supported
> -BLACKFUNC=`head -n 1 /sys/kernel/debug/kprobes/blacklist 2> /dev/null | cut -f2`
> -if [ -z "$BLACKFUNC" ]; then
> +BLACKFUNC_LIST=`head -n 5 /sys/kernel/debug/kprobes/blacklist 2> /dev/null | cut -f2`
> +if [ -z "$BLACKFUNC_LIST" ]; then
> print_overall_skipped
> exit 0
> fi
>
> +# try to find vmlinux with DWARF debug info
> +VMLINUX_FILE=$(perf probe -v random_probe |& grep "Using.*for symbols" | sed -r 's/^Using (.*) for symbols$/\1/')
> +
> # remove all previously added probes
> clear_all_probes
>
>
> ### adding blacklisted function
> -
> -# functions from blacklist should be skipped by perf probe
> -! $CMD_PERF probe $BLACKFUNC > $LOGS_DIR/adding_blacklisted.log 2> $LOGS_DIR/adding_blacklisted.err
> -PERF_EXIT_CODE=$?
> -
> REGEX_SCOPE_FAIL="Failed to find scope of probe point"
> REGEX_SKIP_MESSAGE=" is blacklisted function, skip it\."
> -REGEX_NOT_FOUND_MESSAGE="Probe point \'$BLACKFUNC\' not found."
> +REGEX_NOT_FOUND_MESSAGE="Probe point \'$RE_EVENT\' not found."
> REGEX_ERROR_MESSAGE="Error: Failed to add events."
> REGEX_INVALID_ARGUMENT="Failed to write event: Invalid argument"
> REGEX_SYMBOL_FAIL="Failed to find symbol at $RE_ADDRESS"
> -REGEX_OUT_SECTION="$BLACKFUNC is out of \.\w+, skip it"
> -../common/check_all_lines_matched.pl "$REGEX_SKIP_MESSAGE" "$REGEX_NOT_FOUND_MESSAGE" "$REGEX_ERROR_MESSAGE" "$REGEX_SCOPE_FAIL" "$REGEX_INVALID_ARGUMENT" "$REGEX_SYMBOL_FAIL" "$REGEX_OUT_SECTION" < $LOGS_DIR/adding_blacklisted.err
> -CHECK_EXIT_CODE=$?
> -
> -print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "adding blacklisted function $BLACKFUNC"
> -(( TEST_RESULT += $? ))
> -
> +REGEX_OUT_SECTION="$RE_EVENT is out of \.\w+, skip it"
> +REGEX_MISSING_DECL_LINE="A function DIE doesn't have decl_line. Maybe broken DWARF?"
> +
> +BLACKFUNC=""
> +SKIP_DWARF=0
> +
> +for BLACKFUNC in $BLACKFUNC_LIST; do
> + echo "Probing $BLACKFUNC"
> +
> + # functions from blacklist should be skipped by perf probe
> + ! $CMD_PERF probe $BLACKFUNC > $LOGS_DIR/adding_blacklisted.log 2> $LOGS_DIR/adding_blacklisted.err
> + PERF_EXIT_CODE=$?
> +
> + # check for bad DWARF polluting the result
> + ../common/check_all_patterns_found.pl "$REGEX_MISSING_DECL_LINE" >/dev/null < $LOGS_DIR/adding_blacklisted.err
> +
> + if [ $? -eq 0 ]; then
> + SKIP_DWARF=1
> + echo "Result polluted by broken DWARF, trying another probe"
> +
> + # confirm that the broken DWARF comes from assembler
> + if [ -n "$VMLINUX_FILE" ]; then
> + readelf -wi "$VMLINUX_FILE" |
> + awk -v probe="$BLACKFUNC" '/DW_AT_language/ { comp_lang = $0 }
> + $0 ~ probe { if (comp_lang) { print comp_lang }; exit }' |
> + grep -q "MIPS assembler"
> +
> + CHECK_EXIT_CODE=$?
> + if [ $CHECK_EXIT_CODE -ne 0 ]; then
> + SKIP_DWARF=0 # broken DWARF while available
> + break
> + fi
> + fi
> + else
> + ../common/check_all_lines_matched.pl "$REGEX_SKIP_MESSAGE" "$REGEX_NOT_FOUND_MESSAGE" "$REGEX_ERROR_MESSAGE" "$REGEX_SCOPE_FAIL" "$REGEX_INVALID_ARGUMENT" "$REGEX_SYMBOL_FAIL" "$REGEX_OUT_SECTION" < $LOGS_DIR/adding_blacklisted.err
> + CHECK_EXIT_CODE=$?
> +
> + SKIP_DWARF=0
> + break
> + fi
> +done
> +
> +if [ $SKIP_DWARF -eq 1 ]; then
> + print_testcase_skipped "adding blacklisted function $BLACKFUNC"
> +else
> + print_results $PERF_EXIT_CODE $CHECK_EXIT_CODE "adding blacklisted function $BLACKFUNC"
> + (( TEST_RESULT += $? ))
> +fi
>
> ### listing not-added probe
>
> --
> 2.43.0
>
prev parent reply other threads:[~2024-10-23 20:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-16 9:19 [PATCH] perf test: Handle perftool-testsuite_probe failure due to broken DWARF vmolnaro
2024-10-16 16:15 ` Arnaldo Carvalho de Melo
2024-10-17 13:55 ` Veronika Molnarova
2024-10-17 16:15 ` [PATCH v2] " vmolnaro
2024-10-23 20:24 ` Arnaldo Carvalho de Melo [this message]
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=ZxlbakzNhwDTTlWf@x1 \
--to=acme@kernel.org \
--cc=acme@redhat.com \
--cc=adrian.hunter@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=mpetlan@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=vmolnaro@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.