* [PATCH] perf test arm-spe: Check if perf-record hangs when recording workload with forks
@ 2022-02-28 16:56 German Gomez
2022-05-13 13:03 ` James Clark
0 siblings, 1 reply; 4+ messages in thread
From: German Gomez @ 2022-02-28 16:56 UTC (permalink / raw)
To: linux-kernel, linux-perf-users, acme
Cc: james.clark, German Gomez, Mark Rutland, Alexander Shishkin,
Jiri Olsa, Namhyung Kim
Add shell test to check if perf-record hangs when recording an arm_spe
event with forks.
The test FAILS if the Kernel is not patched with Commit 961c391217 ("perf:
Always wake the parent event").
Unpatched Kernel:
$ perf test -v 90
90: Check Arm SPE doesn't hang when there are forks
--- start ---
test child forked, pid 14232
Recording workload with fork
Log lines = 90 /tmp/__perf_test.stderr.0Nu0U
Log lines after 1 second = 90 /tmp/__perf_test.stderr.0Nu0U
SPE hang test: FAIL
test child finished with -1
---- end ----
Check Arm SPE trace data in workload with forks: FAILED!
Patched Kernel:
$ perf test -v 90
90: Check Arm SPE doesn't hang when there are forks
--- start ---
test child forked, pid 2930
Compiling test program...
Recording workload...
Log lines = 478 /tmp/__perf_test.log.026AI
Log lines after 1 second = 557 /tmp/__perf_test.log.026AI
SPE hang test: PASS
Cleaning up files...
test child finished with 0
---- end ----
Check Arm SPE trace data in workload with forks: Ok
Signed-off-by: German Gomez <german.gomez@arm.com>
---
tools/perf/tests/shell/test_arm_spe_fork.sh | 92 +++++++++++++++++++++
1 file changed, 92 insertions(+)
create mode 100755 tools/perf/tests/shell/test_arm_spe_fork.sh
diff --git a/tools/perf/tests/shell/test_arm_spe_fork.sh b/tools/perf/tests/shell/test_arm_spe_fork.sh
new file mode 100755
index 000000000..c920d3583
--- /dev/null
+++ b/tools/perf/tests/shell/test_arm_spe_fork.sh
@@ -0,0 +1,92 @@
+#!/bin/sh
+# Check Arm SPE doesn't hang when there are forks
+
+# SPDX-License-Identifier: GPL-2.0
+# German Gomez <german.gomez@arm.com>, 2022
+
+skip_if_no_arm_spe_event() {
+ perf list | egrep -q 'arm_spe_[0-9]+//' && return 0
+ return 2
+}
+
+skip_if_no_arm_spe_event || exit 2
+
+# skip if there's no compiler
+if ! [ -x "$(command -v cc)" ]; then
+ echo "failed: no compiler, install gcc"
+ exit 2
+fi
+
+TEST_PROGRAM_SOURCE=$(mktemp /tmp/__perf_test.program.XXXXX.c)
+TEST_PROGRAM=$(mktemp /tmp/__perf_test.program.XXXXX)
+PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
+PERF_RECORD_LOG=$(mktemp /tmp/__perf_test.log.XXXXX)
+
+cleanup_files()
+{
+ echo "Cleaning up files..."
+ rm -f ${PERF_RECORD_LOG}
+ rm -f ${PERF_DATA}
+ rm -f ${TEST_PROGRAM_SOURCE}
+ rm -f ${TEST_PROGRAM}
+}
+
+trap cleanup_files exit term int
+
+# compile test program
+cat << EOF > $TEST_PROGRAM_SOURCE
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+int workload() {
+ while (1)
+ sqrt(rand());
+ return 0;
+}
+
+int main() {
+ switch (fork()) {
+ case 0:
+ return workload();
+ case -1:
+ return 1;
+ default:
+ wait(NULL);
+ }
+ return 0;
+}
+EOF
+
+echo "Compiling test program..."
+CFLAGS="-lm"
+cc $TEST_PROGRAM_SOURCE $CFLAGS -o $TEST_PROGRAM || exit 1
+
+echo "Recording workload..."
+perf record -o ${PERF_DATA} -e arm_spe/period=65536/ -vvv -- $TEST_PROGRAM > ${PERF_RECORD_LOG} 2>&1 &
+PERFPID=$!
+
+# Check if perf hangs by checking the perf-record logs.
+sleep 1
+log0=$(wc -l $PERF_RECORD_LOG)
+echo Log lines = $log0
+sleep 1
+log1=$(wc -l $PERF_RECORD_LOG)
+echo Log lines after 1 second = $log1
+
+kill $PERFPID
+wait $PERFPID
+# test program may leave an orphan process running the workload
+killall $(basename $TEST_PROGRAM)
+
+if [ "$log0" = "$log1" ];
+then
+ echo "SPE hang test: FAIL"
+ exit 1
+else
+ echo "SPE hang test: PASS"
+fi
+
+exit 0
--
2.25.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] perf test arm-spe: Check if perf-record hangs when recording workload with forks
2022-02-28 16:56 [PATCH] perf test arm-spe: Check if perf-record hangs when recording workload with forks German Gomez
@ 2022-05-13 13:03 ` James Clark
2022-05-27 6:38 ` Leo Yan
0 siblings, 1 reply; 4+ messages in thread
From: James Clark @ 2022-05-13 13:03 UTC (permalink / raw)
To: German Gomez, linux-kernel, linux-perf-users, acme
Cc: Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim
On 28/02/2022 16:56, German Gomez wrote:
> Add shell test to check if perf-record hangs when recording an arm_spe
> event with forks.
>
> The test FAILS if the Kernel is not patched with Commit 961c391217 ("perf:
> Always wake the parent event").
>
> Unpatched Kernel:
>
> $ perf test -v 90
> 90: Check Arm SPE doesn't hang when there are forks
> --- start ---
> test child forked, pid 14232
> Recording workload with fork
> Log lines = 90 /tmp/__perf_test.stderr.0Nu0U
> Log lines after 1 second = 90 /tmp/__perf_test.stderr.0Nu0U
> SPE hang test: FAIL
> test child finished with -1
> ---- end ----
> Check Arm SPE trace data in workload with forks: FAILED!
>
> Patched Kernel:
>
> $ perf test -v 90
> 90: Check Arm SPE doesn't hang when there are forks
> --- start ---
> test child forked, pid 2930
> Compiling test program...
> Recording workload...
> Log lines = 478 /tmp/__perf_test.log.026AI
> Log lines after 1 second = 557 /tmp/__perf_test.log.026AI
> SPE hang test: PASS
> Cleaning up files...
> test child finished with 0
> ---- end ----
> Check Arm SPE trace data in workload with forks: Ok
>
> Signed-off-by: German Gomez <german.gomez@arm.com>
Reviewed-by: James Clark <james.clark@arm.com>
> ---
> tools/perf/tests/shell/test_arm_spe_fork.sh | 92 +++++++++++++++++++++
> 1 file changed, 92 insertions(+)
> create mode 100755 tools/perf/tests/shell/test_arm_spe_fork.sh
>
> diff --git a/tools/perf/tests/shell/test_arm_spe_fork.sh b/tools/perf/tests/shell/test_arm_spe_fork.sh
> new file mode 100755
> index 000000000..c920d3583
> --- /dev/null
> +++ b/tools/perf/tests/shell/test_arm_spe_fork.sh
> @@ -0,0 +1,92 @@
> +#!/bin/sh
> +# Check Arm SPE doesn't hang when there are forks
> +
> +# SPDX-License-Identifier: GPL-2.0
> +# German Gomez <german.gomez@arm.com>, 2022
> +
> +skip_if_no_arm_spe_event() {
> + perf list | egrep -q 'arm_spe_[0-9]+//' && return 0
> + return 2
> +}
> +
> +skip_if_no_arm_spe_event || exit 2
> +
> +# skip if there's no compiler
> +if ! [ -x "$(command -v cc)" ]; then
> + echo "failed: no compiler, install gcc"
> + exit 2
> +fi
> +
> +TEST_PROGRAM_SOURCE=$(mktemp /tmp/__perf_test.program.XXXXX.c)
> +TEST_PROGRAM=$(mktemp /tmp/__perf_test.program.XXXXX)
> +PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
> +PERF_RECORD_LOG=$(mktemp /tmp/__perf_test.log.XXXXX)
> +
> +cleanup_files()
> +{
> + echo "Cleaning up files..."
> + rm -f ${PERF_RECORD_LOG}
> + rm -f ${PERF_DATA}
> + rm -f ${TEST_PROGRAM_SOURCE}
> + rm -f ${TEST_PROGRAM}
> +}
> +
> +trap cleanup_files exit term int
> +
> +# compile test program
> +cat << EOF > $TEST_PROGRAM_SOURCE
> +#include <math.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <unistd.h>
> +#include <sys/wait.h>
> +
> +int workload() {
> + while (1)
> + sqrt(rand());
> + return 0;
> +}
> +
> +int main() {
> + switch (fork()) {
> + case 0:
> + return workload();
> + case -1:
> + return 1;
> + default:
> + wait(NULL);
> + }
> + return 0;
> +}
> +EOF
> +
> +echo "Compiling test program..."
> +CFLAGS="-lm"
> +cc $TEST_PROGRAM_SOURCE $CFLAGS -o $TEST_PROGRAM || exit 1
> +
> +echo "Recording workload..."
> +perf record -o ${PERF_DATA} -e arm_spe/period=65536/ -vvv -- $TEST_PROGRAM > ${PERF_RECORD_LOG} 2>&1 &
> +PERFPID=$!
> +
> +# Check if perf hangs by checking the perf-record logs.
> +sleep 1
> +log0=$(wc -l $PERF_RECORD_LOG)
> +echo Log lines = $log0
> +sleep 1
> +log1=$(wc -l $PERF_RECORD_LOG)
> +echo Log lines after 1 second = $log1
> +
> +kill $PERFPID
> +wait $PERFPID
> +# test program may leave an orphan process running the workload
> +killall $(basename $TEST_PROGRAM)
> +
> +if [ "$log0" = "$log1" ];
> +then
> + echo "SPE hang test: FAIL"
> + exit 1
> +else
> + echo "SPE hang test: PASS"
> +fi
> +
> +exit 0
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] perf test arm-spe: Check if perf-record hangs when recording workload with forks
2022-05-13 13:03 ` James Clark
@ 2022-05-27 6:38 ` Leo Yan
2022-06-03 19:19 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 4+ messages in thread
From: Leo Yan @ 2022-05-27 6:38 UTC (permalink / raw)
To: James Clark
Cc: German Gomez, linux-kernel, linux-perf-users, acme, Mark Rutland,
Alexander Shishkin, Jiri Olsa, Namhyung Kim
On Fri, May 13, 2022 at 02:03:52PM +0100, James Clark wrote:
>
>
> On 28/02/2022 16:56, German Gomez wrote:
> > Add shell test to check if perf-record hangs when recording an arm_spe
> > event with forks.
> >
> > The test FAILS if the Kernel is not patched with Commit 961c391217 ("perf:
> > Always wake the parent event").
> >
> > Unpatched Kernel:
> >
> > $ perf test -v 90
> > 90: Check Arm SPE doesn't hang when there are forks
> > --- start ---
> > test child forked, pid 14232
> > Recording workload with fork
> > Log lines = 90 /tmp/__perf_test.stderr.0Nu0U
> > Log lines after 1 second = 90 /tmp/__perf_test.stderr.0Nu0U
> > SPE hang test: FAIL
> > test child finished with -1
> > ---- end ----
> > Check Arm SPE trace data in workload with forks: FAILED!
> >
> > Patched Kernel:
> >
> > $ perf test -v 90
> > 90: Check Arm SPE doesn't hang when there are forks
> > --- start ---
> > test child forked, pid 2930
> > Compiling test program...
> > Recording workload...
> > Log lines = 478 /tmp/__perf_test.log.026AI
> > Log lines after 1 second = 557 /tmp/__perf_test.log.026AI
> > SPE hang test: PASS
> > Cleaning up files...
> > test child finished with 0
> > ---- end ----
> > Check Arm SPE trace data in workload with forks: Ok
> >
> > Signed-off-by: German Gomez <german.gomez@arm.com>
>
> Reviewed-by: James Clark <james.clark@arm.com>
Thanks for review and popping up this patch, James. LGTM:
Reviewed-by: Leo Yan <leo.yan@linaro.org>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] perf test arm-spe: Check if perf-record hangs when recording workload with forks
2022-05-27 6:38 ` Leo Yan
@ 2022-06-03 19:19 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2022-06-03 19:19 UTC (permalink / raw)
To: Leo Yan
Cc: James Clark, German Gomez, linux-kernel, linux-perf-users,
Mark Rutland, Alexander Shishkin, Jiri Olsa, Namhyung Kim
Em Fri, May 27, 2022 at 02:38:21PM +0800, Leo Yan escreveu:
> On Fri, May 13, 2022 at 02:03:52PM +0100, James Clark wrote:
> > On 28/02/2022 16:56, German Gomez wrote:
> > > Signed-off-by: German Gomez <german.gomez@arm.com>
> > Reviewed-by: James Clark <james.clark@arm.com>
> Thanks for review and popping up this patch, James. LGTM:
> Reviewed-by: Leo Yan <leo.yan@linaro.org>
Thanks, applied.
- Arnaldo
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-06-03 19:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-28 16:56 [PATCH] perf test arm-spe: Check if perf-record hangs when recording workload with forks German Gomez
2022-05-13 13:03 ` James Clark
2022-05-27 6:38 ` Leo Yan
2022-06-03 19:19 ` Arnaldo Carvalho de Melo
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.