From 9ed7247a5969cf101ac3d22995ae06730b7da3ea Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 2 Sep 2020 07:25:19 -0400 Subject: [PATCH] meson: convert the speed tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use meson benchmark() for them, adjust mtest2make.py for that. A new target "make bench" can be used to run all benchmarks. Signed-off-by: Marc-André Lureau Message-Id: <20200828110734.1638685-14-marcandre.lureau@redhat.com> [Rewrite mtest2make part. - Paolo] Signed-off-by: Paolo Bonzini --- Makefile | 3 ++- scripts/mtest2make.py | 9 ++++++++- tests/Makefile.include | 15 ++++----------- tests/meson.build | 15 +++++++++++++++ 4 files changed, 29 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index ed354c43b0..d4d6a67d96 100644 --- a/Makefile +++ b/Makefile @@ -64,7 +64,7 @@ ${ninja-targets-c_COMPILER} ${ninja-targets-cpp_COMPILER}: .var.command += -MP # reread (and MESON won't be empty anymore). ifneq ($(MESON),) Makefile.mtest: build.ninja scripts/mtest2make.py - $(MESON) introspect --tests | $(PYTHON) scripts/mtest2make.py > $@ + $(MESON) introspect --tests --benchmarks | $(PYTHON) scripts/mtest2make.py > $@ -include Makefile.mtest endif @@ -283,6 +283,7 @@ help: @echo '' @echo 'Test targets:' $(call print-help,check,Run all tests (check-help for details)) + $(call print-help,bench,Run all benchmarks) $(call print-help,docker,Help about targets running tests inside containers) $(call print-help,vm-help,Help about targets running tests inside VM) @echo '' diff --git a/scripts/mtest2make.py b/scripts/mtest2make.py index af6dd0d3b1..9cbb2e374d 100644 --- a/scripts/mtest2make.py +++ b/scripts/mtest2make.py @@ -103,10 +103,17 @@ def emit_suite(name, suite, prefix): print('endif') testsuites = defaultdict(Suite) -for test in introspect: +for test in introspect['tests']: process_tests(test, testsuites) emit_prolog(testsuites, 'check') for name, suite in testsuites.items(): emit_suite(name, suite, 'check') +benchsuites = defaultdict(Suite) +for test in introspect['benchmarks']: + process_tests(test, benchsuites) +emit_prolog(benchsuites, 'bench') +for name, suite in benchsuites.items(): + emit_suite(name, suite, 'bench') + print('run-tests: $(patsubst %, run-test-%, $(.tests))') diff --git a/tests/Makefile.include b/tests/Makefile.include index 0388a0e4fd..fe22ccfcc6 100644 --- a/tests/Makefile.include +++ b/tests/Makefile.include @@ -38,16 +38,8 @@ export SRC_PATH SYSEMU_TARGET_LIST := $(subst -softmmu.mak,,$(notdir \ $(wildcard $(SRC_PATH)/default-configs/*-softmmu.mak))) -check-speed-$(CONFIG_BLOCK) += tests/benchmark-crypto-hash$(EXESUF) -check-speed-$(CONFIG_BLOCK) += tests/benchmark-crypto-hmac$(EXESUF) -check-speed-$(CONFIG_BLOCK) += tests/benchmark-crypto-cipher$(EXESUF) - QEMU_CFLAGS += -I$(SRC_PATH)/tests -I$(SRC_PATH)/tests/qtest -tests/benchmark-crypto-hash$(EXESUF): tests/benchmark-crypto-hash.o $(test-crypto-obj-y) -tests/benchmark-crypto-hmac$(EXESUF): tests/benchmark-crypto-hmac.o $(test-crypto-obj-y) -tests/benchmark-crypto-cipher$(EXESUF): tests/benchmark-crypto-cipher.o $(test-crypto-obj-y) - tests/migration/stress$(EXESUF): tests/migration/stress.o $(call quiet-command, $(LINKPROG) -static -O3 $(PTHREAD_LIB) -o $@ $< ,"LINK","$(TARGET_DIR)$@") @@ -97,9 +89,6 @@ define do_test_tap "TAP","$@") endef -check-speed: $(check-speed-y) - $(call do_test_human, $^) - # Per guest TCG tests BUILD_TCG_TARGET_RULES=$(patsubst %,build-tcg-tests-%, $(TARGET_DIRS)) @@ -212,6 +201,10 @@ check-clean: clean: check-clean +# For backwards compatibility + +check-speed: bench-speed + # Build the help program automatically -include $(wildcard tests/*.d) diff --git a/tests/meson.build b/tests/meson.build index 3a3066b292..94e34f72a8 100644 --- a/tests/meson.build +++ b/tests/meson.build @@ -111,6 +111,8 @@ test_deps = { 'test-qht-par': qht_bench, } +benchs = {} + if have_block tests += { 'test-coroutine': [testblock], @@ -167,6 +169,11 @@ if have_block if 'CONFIG_NETTLE' in config_host or 'CONFIG_GCRYPT' in config_host tests += {'test-crypto-pbkdf': [io]} endif + benchs += { + 'benchmark-crypto-hash': [crypto], + 'benchmark-crypto-hmac': [crypto], + 'benchmark-crypto-cipher': [crypto], + } endif if have_system @@ -226,6 +233,14 @@ foreach test_name, extra: tests suite: ['unit']) endforeach +foreach bench_name, deps: benchs + exe = executable(bench_name, bench_name + '.c', + dependencies: [qemuutil] + deps) + benchmark(bench_name, exe, + args: ['--tap', '-k'], + protocol: 'tap', + suite: ['speed']) +endforeach if have_tools and 'CONFIG_VHOST_USER' in config_host executable('vhost-user-bridge',