Hi Carsten
From a trace ouput perspective, this test doesn't really add coverage on top of what has gone before. We only have instruction trace - so the data operations of the memcpy do not result in any trace output. From a trace perspective, memcpy is a tight loop - probably resulting in a single atom element for each iteration, and nothing in between.
For this reason, I think this test, and the threaded memcpy test in the next patch can be dropped.
Regards
Mike
On Wed, 15 Dec 2021 at 16:04, carsten.haitzler@foss.arm.com wrote:
From: Carsten Haitzler carsten.haitzler@arm.com
This adds memory bound tests for quality checking perf's aux data recording.
Signed-off-by: Carsten Haitzler carsten.haitzler@arm.com
tools/perf/tests/shell/coresight_memcpy_1m.sh | 18 +++++++++ .../perf/tests/shell/coresight_memcpy_32m.sh | 18 +++++++++ .../perf/tests/shell/coresight_memcpy_64k.sh | 18 +++++++++ .../perf/tests/shell/tools/coresight/Makefile | 3 +- .../shell/tools/coresight/memcpy/Makefile | 29 ++++++++++++++ .../shell/tools/coresight/memcpy/memcpy.c | 40 +++++++++++++++++++ 6 files changed, 125 insertions(+), 1 deletion(-) create mode 100755 tools/perf/tests/shell/coresight_memcpy_1m.sh create mode 100755 tools/perf/tests/shell/coresight_memcpy_32m.sh create mode 100755 tools/perf/tests/shell/coresight_memcpy_64k.sh create mode 100644 tools/perf/tests/shell/tools/coresight/memcpy/Makefile create mode 100644 tools/perf/tests/shell/tools/coresight/memcpy/memcpy.c
diff --git a/tools/perf/tests/shell/coresight_memcpy_1m.sh b/tools/perf/tests/shell/coresight_memcpy_1m.sh new file mode 100755 index 000000000000..fa1c28d73b66 --- /dev/null +++ b/tools/perf/tests/shell/coresight_memcpy_1m.sh @@ -0,0 +1,18 @@ +#!/bin/sh -e +# Coresight / Memcpy 1M
+# SPDX-License-Identifier: GPL-2.0 +# Carsten Haitzler carsten.haitzler@arm.com, 2021
+TEST="memcpy" +. $(dirname $0)/lib/coresight.sh +ARGS="1024 2" +DATV="1m" +DATA="$DATD/perf-$TEST-$DATV.data"
+perf record $PERFRECOPT -o "$DATA" "$BIN" $ARGS
+perf_dump_aux_verify "$DATA" 39 766 766
+err=$? +exit $err diff --git a/tools/perf/tests/shell/coresight_memcpy_32m.sh b/tools/perf/tests/shell/coresight_memcpy_32m.sh new file mode 100755 index 000000000000..4ab5459e3824 --- /dev/null +++ b/tools/perf/tests/shell/coresight_memcpy_32m.sh @@ -0,0 +1,18 @@ +#!/bin/sh -e +# Coresight / Memcpy 32M
+# SPDX-License-Identifier: GPL-2.0 +# Carsten Haitzler carsten.haitzler@arm.com, 2021
+TEST="memcpy" +. $(dirname $0)/lib/coresight.sh +ARGS="32768 1" +DATV="32m" +DATA="$DATD/perf-$TEST-$DATV.data"
+perf record $PERFRECOPT -o "$DATA" "$BIN" $ARGS
+perf_dump_aux_verify "$DATA" 39 7804 7804
+err=$? +exit $err diff --git a/tools/perf/tests/shell/coresight_memcpy_64k.sh b/tools/perf/tests/shell/coresight_memcpy_64k.sh new file mode 100755 index 000000000000..5b6ba2a6d394 --- /dev/null +++ b/tools/perf/tests/shell/coresight_memcpy_64k.sh @@ -0,0 +1,18 @@ +#!/bin/sh -e +# Coresight / Memcpy 64K
+# SPDX-License-Identifier: GPL-2.0 +# Carsten Haitzler carsten.haitzler@arm.com, 2021
+TEST="memcpy" +. $(dirname $0)/lib/coresight.sh +ARGS="64 40" +DATV="64k" +DATA="$DATD/perf-$TEST-$DATV.data"
+perf record $PERFRECOPT -o "$DATA" "$BIN" $ARGS
+perf_dump_aux_verify "$DATA" 40 934 934
+err=$? +exit $err diff --git a/tools/perf/tests/shell/tools/coresight/Makefile b/tools/perf/tests/shell/tools/coresight/Makefile index a1a752f45c46..99030c889b04 100644 --- a/tools/perf/tests/shell/tools/coresight/Makefile +++ b/tools/perf/tests/shell/tools/coresight/Makefile @@ -8,7 +8,8 @@ SUBDIRS = \ asm_pure_loop \ thread_loop \ bubble_sort \
bubble_sort_thread
bubble_sort_thread \memcpyall: $(SUBDIRS) $(SUBDIRS): diff --git a/tools/perf/tests/shell/tools/coresight/memcpy/Makefile b/tools/perf/tests/shell/tools/coresight/memcpy/Makefile new file mode 100644 index 000000000000..7c31fe4ec399 --- /dev/null +++ b/tools/perf/tests/shell/tools/coresight/memcpy/Makefile @@ -0,0 +1,29 @@ +# SPDX-License-Identifier: GPL-2.0 +# Carsten Haitzler carsten.haitzler@arm.com, 2021 +include ../Makefile.miniconfig
+BIN=memcpy +LIB=
+all: $(BIN)
+$(BIN): $(BIN).c +ifdef CORESIGHT +ifeq ($(ARCH),arm64)
$(Q)$(CC) $(BIN).c -o $(BIN) $(LIB)+endif +endif
+install-tests: all +ifdef CORESIGHT +ifeq ($(ARCH),arm64)
$(call QUIET_INSTALL, tests) \$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/tools/$(BIN)'; \$(INSTALL) $(BIN) '$(DESTDIR_SQ)$(perfexec_instdir_SQ)/tests/shell/tools/$(BIN)/$(BIN)'+endif +endif
+clean:
$(Q)$(RM) -f $(BIN)+.PHONY: all clean install-tests diff --git a/tools/perf/tests/shell/tools/coresight/memcpy/memcpy.c b/tools/perf/tests/shell/tools/coresight/memcpy/memcpy.c new file mode 100644 index 000000000000..1aa0617448ad --- /dev/null +++ b/tools/perf/tests/shell/tools/coresight/memcpy/memcpy.c @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-2.0 +// Carsten Haitzler carsten.haitzler@arm.com, 2021 +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h>
+int main(int argc, char **argv) +{
unsigned long i, len, size;unsigned char *src, *dst;long long v;if (argc < 3) {printf("ERR: %s [copysize Kb] [numloops (hundreds)]\n", argv[0]);exit(1);}v = atoll(argv[1]);if ((v < 1) || (v > (1024 * 1024))) {printf("ERR: max memory 1GB (1048576 KB)\n");exit(1);}size = v;v = atoll(argv[2]);if ((v < 1) || (v > 40000000000ll)) {printf("ERR: loops 1-40000000000 (hundreds)\n");exit(1);}len = v * 100;src = malloc(size * 1024);dst = malloc(size * 1024);if ((!src) || (!dst)) {printf("ERR: Can't allocate memory\n");exit(1);}for (i = 0; i < len; i++)memcpy(dst, src, size * 1024);return 0;+}
2.32.0