Re: [PATCH 2/2] perf test shell trace_exit_race: Use --no-comm to avoid cases where COMM isn't resolved

From: Howard Chu
Date: Fri Nov 15 2024 - 13:37:07 EST


perf $ ./perf test "perf trace exit race" -v

110: perf trace exit race : Ok

Tested-by: Howard Chu <howardchu95@xxxxxxxxx>

Thanks,
Howard

On Fri, Nov 15, 2024 at 7:36 AM Arnaldo Carvalho de Melo
<acme@xxxxxxxxxx> wrote:
>
> From: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
>
> The purpose of this test is to test for races in the exit of 'perf
> trace' missing the last events, it was failing when the COMM wasn't
> resolved either because we missed some PERF_RECORD_COMM or somehow
> raced on getting it from procfs.
>
> Add --no-comm to the 'perf trace' command line so that we get a
> consistent, pid only output, which allows the test to achieve its goal.
>
> This is the output from
> 'perf trace --no-comm -e syscalls:sys_enter_exit_group':
>
> 0.000 21953 syscalls:sys_enter_exit_group()
> 0.000 21955 syscalls:sys_enter_exit_group()
> 0.000 21957 syscalls:sys_enter_exit_group()
> 0.000 21959 syscalls:sys_enter_exit_group()
> 0.000 21961 syscalls:sys_enter_exit_group()
> 0.000 21963 syscalls:sys_enter_exit_group()
> 0.000 21965 syscalls:sys_enter_exit_group()
> 0.000 21967 syscalls:sys_enter_exit_group()
> 0.000 21969 syscalls:sys_enter_exit_group()
> 0.000 21971 syscalls:sys_enter_exit_group()
>
> Now it passes:
>
> root@number:~# perf test "trace exit race"
> 110: perf trace exit race : Ok
> root@number:~#
> root@number:~# perf test -v "trace exit race"
> 110: perf trace exit race : Ok
> root@number:~#
>
> If we artificially make it run just 9 times instead of the 10 it runs,
> i.e. by manually doing:
>
> trace_shutdown_race() {
> for _ in $(seq 9); do
>
> that 9 is $iter, 10 in the patch, we get:
>
> root@number:~# vim ~acme/libexec/perf-core/tests/shell/trace_exit_race.sh
> root@number:~# perf test -v "trace exit race"
> --- start ---
> test child forked, pid 24629
> Missing output, expected 10 but only got 9
> ---- end(-1) ----
> 110: perf trace exit race : FAILED!
> root@number:~#
>
> I.e. 9 'perf trace' calls produced the expected output, the inverse grep
> didn't show anything, so the patch provided by Howard for the previous
> patch kicks in and shows a more informative message.
>
> Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> Cc: Alexander Shishkin <alexander.shishkin@xxxxxxxxxxxxxxx>
> Cc: Benjamin Peterson <benjamin@xxxxxxxxxxx>
> Cc: Howard Chu <howardchu95@xxxxxxxxx>
> Cc: Ian Rogers <irogers@xxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: Jiri Olsa <jolsa@xxxxxxxxxx>
> Cc: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
> Cc: Mark Rutland <mark.rutland@xxxxxxx>
> Cc: Namhyung Kim <namhyung@xxxxxxxxxx>
> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Link: https://lore.kernel.org/lkml/ZzdknoHqrJbojb6P@x1
> Signed-off-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
> ---
> tools/perf/tests/shell/trace_exit_race.sh | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/tests/shell/trace_exit_race.sh b/tools/perf/tests/shell/trace_exit_race.sh
> index 8ea24f4256bc8f5e..fbb0adc33a889516 100755
> --- a/tools/perf/tests/shell/trace_exit_race.sh
> +++ b/tools/perf/tests/shell/trace_exit_race.sh
> @@ -16,11 +16,11 @@ if [ "$1" = "-v" ]; then
> fi
>
> iter=10
> -regexp=" +[0-9]+\.[0-9]+ +true/[0-9]+ syscalls:sys_enter_exit_group\(\)$"
> +regexp=" +[0-9]+\.[0-9]+ [0-9]+ syscalls:sys_enter_exit_group\(\)$"
>
> trace_shutdown_race() {
> for _ in $(seq $iter); do
> - perf trace -e syscalls:sys_enter_exit_group true 2>>$file
> + perf trace --no-comm -e syscalls:sys_enter_exit_group true 2>>$file
> done
> result="$(grep -c -E "$regexp" $file)"
> [ $result = $iter ]
> --
> 2.47.0
>