Commit 9a8dd2f2 authored by Ian Rogers's avatar Ian Rogers Committed by Arnaldo Carvalho de Melo
Browse files

perf test shell daemon: Make signal test less racy



The daemon signal test sends signals and then expects files to be
written. It was observed on an Intel Alderlake that the signals were
sent too quickly leading to the 3 expected files not appearing.

To avoid this send the next signal only after the expected previous file
has appeared. To avoid an infinite loop the number of retries is
limited.

Signed-off-by: default avatarIan Rogers <irogers@google.com>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Ross Zwisler <zwisler@chromium.org>
Cc: Shirisha G <shirisha@linux.ibm.com>
Link: https://lore.kernel.org/r/20240124043015.1388867-6-irogers@google.com


Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 1c2124ec
Loading
Loading
Loading
Loading
+24 −10
Original line number Diff line number Diff line
@@ -414,16 +414,30 @@ EOF
	# start daemon
	daemon_start ${config} test

	# send 2 signals
        # send 2 signals then exit. Do this in a loop watching the number of
        # files to avoid races. If the loop retries more than 600 times then
        # give up.
	local retries=0
	local signals=0
	local success=0
	while [ ${retries} -lt 600 ] && [ ${success} -eq 0 ]; do
		local files
		files=`ls ${base}/session-test/*perf.data* 2> /dev/null | wc -l`
		if [ ${signals} -eq 0 ]; then
			perf daemon signal --config ${config} --session test
			signals=1
		elif [ ${signals} -eq 1 ] && [ $files -ge 1 ]; then
			perf daemon signal --config ${config}

	# stop daemon
			signals=2
		elif [ ${signals} -eq 2 ] && [ $files -ge 2 ]; then
			daemon_exit ${config}

	# count is 2 perf.data for signals and 1 for perf record finished
	count=`ls ${base}/session-test/*perf.data* | wc -l`
	if [ ${count} -ne 3 ]; then
			signals=3
		elif [ ${signals} -eq 3 ] && [ $files -ge 3 ]; then
			success=1
		fi
		retries=$((${retries} +1))
	done
	if [ ${success} -eq 0 ]; then
		error=1
		echo "FAILED: perf data no generated"
	fi