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 \ + memcpy
all: $(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; +}