Messages in this thread Patch in this message | | | Date | Mon, 21 Mar 2022 17:52:50 -0300 | From | Arnaldo Carvalho de Melo <> | Subject | Re: [PATCH v2 1/1] perf test arm64: Test unwinding using fame-pointer (fp) mode |
| |
Em Wed, Mar 16, 2022 at 05:48:50PM +0000, German Gomez escreveu: > > On 16/03/2022 17:30, James Clark wrote: > > > > On 16/03/2022 17:20, German Gomez wrote: > >> Add a shell script to check that the call-graphs generated using frame > >> pointers (--call-graph fp) are complete and not missing leaf functions: > >> > >> | $ perf test 88 -v > >> | 88: Check Arm64 callgraphs are complete in fp mode : > >> | --- start --- > >> | test child forked, pid 8734 > >> | + Compiling test program (/tmp/test_program.Cz3yL)... > >> | + Recording (PID=8749)... > >> | + Stopping perf-record... > >> | test_program.Cz > >> | 728 leaf > >> | 753 parent > >> | 76c main > >> | test child finished with 0 > >> | ---- end ---- > >> | Check Arm SPE callgraphs are complete in fp mode: Ok > >> > > Ran it on N1SDP and it passes, and it fails if b9f6fbb3b2c2 isn't applied. > > I forgot to mention in the notes that it's supposed to work with both unwinders: > > $ make # for libunwind (default) > $ make NO_LIBUNWIND=1 # for libdw
I'll add it to the cset commit log, and also will fix this:
⬢[acme@toolbox perf]$ git am ./v2_20220316_german_gomez_perf_test_arm64_test_unwinding_using_fame_pointer_fp_mode.mbx Applying: perf test arm64: Test unwinding using fame-pointer (fp) mode .git/rebase-apply/patch:72: trailing whitespace. # program warning: 1 line adds whitespace errors. tools/perf/tests/shell/test_arm_callgraph_fp.sh:58: trailing whitespace. +# program ⬢[acme@toolbox perf]$ > > > > Reviewed-by: James Clark <james.clark@arm.com> > > > >> Fixes: b9f6fbb3b2c2 ("perf arm64: Inject missing frames when using 'perf record --call-graph=fp'") > >> Suggested-by: Jiri Olsa <jolsa@kernel.org> > >> Signed-off-by: German Gomez <german.gomez@arm.com> > >> --- > >> Changes since v1: https://lore.kernel.org/all/a6ba0ea8-f070-9f79-f018-f638ff677c7c@arm.com/ > >> - Add explicit '-g' flag to GCC command > >> --- > >> .../perf/tests/shell/test_arm_callgraph_fp.sh | 68 +++++++++++++++++++ > >> 1 file changed, 68 insertions(+) > >> create mode 100755 tools/perf/tests/shell/test_arm_callgraph_fp.sh > >> > >> diff --git a/tools/perf/tests/shell/test_arm_callgraph_fp.sh b/tools/perf/tests/shell/test_arm_callgraph_fp.sh > >> new file mode 100755 > >> index 000000000..ea1b4e6bb > >> --- /dev/null > >> +++ b/tools/perf/tests/shell/test_arm_callgraph_fp.sh > >> @@ -0,0 +1,68 @@ > >> +#!/bin/sh > >> +# Check Arm64 callgraphs are complete in fp mode > >> +# SPDX-License-Identifier: GPL-2.0 > >> + > >> +lscpu | grep -q "aarch64" || exit 2 > >> + > >> +if ! [ -x "$(command -v cc)" ]; then > >> + echo "failed: no compiler, install gcc" > >> + exit 2 > >> +fi > >> + > >> +PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX) > >> +TEST_PROGRAM_SOURCE=$(mktemp /tmp/test_program.XXXXX.c) > >> +TEST_PROGRAM=$(mktemp /tmp/test_program.XXXXX) > >> + > >> +cleanup_files() > >> +{ > >> + rm -f $PERF_DATA > >> + rm -f $TEST_PROGRAM_SOURCE > >> + rm -f $TEST_PROGRAM > >> +} > >> + > >> +trap cleanup_files exit term int > >> + > >> +cat << EOF > $TEST_PROGRAM_SOURCE > >> +int a = 0; > >> +void leaf(void) { > >> + for (;;) > >> + a += a; > >> +} > >> +void parent(void) { > >> + leaf(); > >> +} > >> +int main(void) { > >> + parent(); > >> + return 0; > >> +} > >> +EOF > >> + > >> +echo " + Compiling test program ($TEST_PROGRAM)..." > >> + > >> +CFLAGS="-g -O0 -fno-inline -fno-omit-frame-pointer" > >> +cc $CFLAGS $TEST_PROGRAM_SOURCE -o $TEST_PROGRAM || exit 1 > >> + > >> +# Add a 1 second delay to skip samples that are not in the leaf() function > >> +perf record -o $PERF_DATA --call-graph fp -e cycles//u -D 1000 -- $TEST_PROGRAM 2> /dev/null & > >> +PID=$! > >> + > >> +echo " + Recording (PID=$PID)..." > >> +sleep 2 > >> +echo " + Stopping perf-record..." > >> + > >> +kill $PID > >> +wait $PID > >> + > >> +# expected perf-script output: > >> +# > >> +# program > >> +# 728 leaf > >> +# 753 parent > >> +# 76c main > >> +# ... > >> + > >> +perf script -i $PERF_DATA -F comm,ip,sym | head -n4 > >> +perf script -i $PERF_DATA -F comm,ip,sym | head -n4 | \ > >> + awk '{ if ($2 != "") sym[i++] = $2 } END { if (sym[0] != "leaf" || > >> + sym[1] != "parent" || > >> + sym[2] != "main") exit 1 }' --
- Arnaldo
| |