All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.