diff options
author | Mike Frysinger <vapier@gentoo.org> | 2021-11-26 00:04:31 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2021-11-28 21:55:15 -0500 |
commit | 804de1faf4f667bbca5b9ff38dcfe37493052098 (patch) | |
tree | be018afc522a301d9518ff9f0e776b17cd52505e /sim | |
parent | 7a259895bb2d92a6e44a1ca5b8729afed88ed579 (diff) | |
download | gdb-804de1faf4f667bbca5b9ff38dcfe37493052098.zip gdb-804de1faf4f667bbca5b9ff38dcfe37493052098.tar.gz gdb-804de1faf4f667bbca5b9ff38dcfe37493052098.tar.bz2 |
sim: testsuite: support parallel execution
Break up the dejagnu logic so that we can parallelize the testsuite.
This takes a page from gcc & gdb where each .exp is run in isolation
instead of in serial.
For most targets, this doesn't make much of a difference as they only
have a single .exp. A few (like cris & frv) have multiple .exp though
and will see a bit of a speed up.
The real gain is when testing a multitarget build. This way we can
run all the targets in parallel and cut the execution time a bit.
On my system, it goes from ~155sec to ~100sec.
We can gain further speedups by splitting up some of the larger .exp
files into smaller groups. We'll do that in a followup though.
Diffstat (limited to 'sim')
-rw-r--r-- | sim/Makefile.in | 45 | ||||
-rw-r--r-- | sim/testsuite/local.mk | 45 |
2 files changed, 80 insertions, 10 deletions
diff --git a/sim/Makefile.in b/sim/Makefile.in index f0e2479..ff36e2d 100644 --- a/sim/Makefile.in +++ b/sim/Makefile.in @@ -1442,8 +1442,14 @@ EXTRA_DEJAGNU_SITE_CONFIG = site-sim-config.exp # Custom verbose test variables that automake doesn't provide (yet?). AM_V_RUNTEST = $(AM_V_RUNTEST_@AM_V@) AM_V_RUNTEST_ = $(AM_V_RUNTEST_@AM_DEFAULT_V@) -AM_V_RUNTEST_0 = @echo " RUNTEST $(RUNTESTFLAGS)"; +AM_V_RUNTEST_0 = @echo " RUNTEST $(RUNTESTFLAGS) $*"; AM_V_RUNTEST_1 = +DO_RUNTEST = \ + LC_ALL=C; export LC_ALL; \ + EXPECT=${EXPECT} ; export EXPECT ; \ + runtest=$(RUNTEST); \ + $$runtest $(RUNTESTFLAGS) + testsuite_common_CPPFLAGS = \ -I$(srcdir)/common \ -I$(srcroot)/include \ @@ -2802,14 +2808,43 @@ site-sim-config.exp: Makefile $(foreach V,$(SIM_TOOLCHAIN_VARS),echo "set $(V) \"$($(V))\"";) \ ) > $@ +# Ignore dirs that only contain configuration settings. +check/./config/%.exp: ; @true +check/./lib/%.exp: ; @true + +check/%.exp: + $(AM_V_at)mkdir -p testsuite/$* + $(AM_V_RUNTEST)$(DO_RUNTEST) --objdir testsuite/$* --outdir testsuite/$* $*.exp + +check-DEJAGNU-parallel: + $(AM_V_at)( \ + $(MAKE) -k \ + `cd $(srcdir)/testsuite && find . -name '*.exp' -printf 'check/%p '`; \ + ret=$$?; \ + $(SHELL) $(srcroot)/contrib/dg-extract-results.sh \ + `find testsuite/ -maxdepth 4 -name testrun.sum | sort` > testrun.sum; \ + $(SHELL) $(srcroot)/contrib/dg-extract-results.sh -L \ + `find testsuite/ -maxdepth 4 -name testrun.log | sort` > testrun.log; \ + echo; \ + $(SED) -n '/^.*===.*Summary.*===/,$$p' testrun.sum; \ + exit $$ret) + +check-DEJAGNU-single: + $(AM_V_RUNTEST)$(DO_RUNTEST) + +# If running a single job, invoking runtest once is faster & has nicer output. check-DEJAGNU: site.exp - $(AM_V_RUNTEST)LC_ALL=C; export LC_ALL; \ + $(AM_V_at)(set -e; \ EXPECT=${EXPECT} ; export EXPECT ; \ runtest=$(RUNTEST); \ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ - $$runtest $(RUNTESTFLAGS); \ - else echo "WARNING: could not find \`runtest'" 1>&2; :;\ - fi + case "$(MAKEFLAGS)" in \ + *-j*) $(MAKE) check-DEJAGNU-parallel;; \ + *) $(MAKE) check-DEJAGNU-single;; \ + esac; \ + else \ + echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi) # These tests are build-time only tools. Override the default rules for them. testsuite/common/%.o: testsuite/common/%.c diff --git a/sim/testsuite/local.mk b/sim/testsuite/local.mk index 977d12f..5061a67 100644 --- a/sim/testsuite/local.mk +++ b/sim/testsuite/local.mk @@ -21,7 +21,7 @@ EXTRA_DEJAGNU_SITE_CONFIG = site-sim-config.exp # Custom verbose test variables that automake doesn't provide (yet?). AM_V_RUNTEST = $(AM_V_RUNTEST_@AM_V@) AM_V_RUNTEST_ = $(AM_V_RUNTEST_@AM_DEFAULT_V@) -AM_V_RUNTEST_0 = @echo " RUNTEST $(RUNTESTFLAGS)"; +AM_V_RUNTEST_0 = @echo " RUNTEST $(RUNTESTFLAGS) $*"; AM_V_RUNTEST_1 = site-sim-config.exp: Makefile @@ -32,14 +32,49 @@ site-sim-config.exp: Makefile $(foreach V,$(SIM_TOOLCHAIN_VARS),echo "set $(V) \"$($(V))\"";) \ ) > $@ +DO_RUNTEST = \ + LC_ALL=C; export LC_ALL; \ + EXPECT=${EXPECT} ; export EXPECT ; \ + runtest=$(RUNTEST); \ + $$runtest $(RUNTESTFLAGS) + +# Ignore dirs that only contain configuration settings. +check/./config/%.exp: ; @true +check/./lib/%.exp: ; @true + +check/%.exp: + $(AM_V_at)mkdir -p testsuite/$* + $(AM_V_RUNTEST)$(DO_RUNTEST) --objdir testsuite/$* --outdir testsuite/$* $*.exp + +check-DEJAGNU-parallel: + $(AM_V_at)( \ + $(MAKE) -k \ + `cd $(srcdir)/testsuite && find . -name '*.exp' -printf 'check/%p '`; \ + ret=$$?; \ + $(SHELL) $(srcroot)/contrib/dg-extract-results.sh \ + `find testsuite/ -maxdepth 4 -name testrun.sum | sort` > testrun.sum; \ + $(SHELL) $(srcroot)/contrib/dg-extract-results.sh -L \ + `find testsuite/ -maxdepth 4 -name testrun.log | sort` > testrun.log; \ + echo; \ + $(SED) -n '/^.*===.*Summary.*===/,$$p' testrun.sum; \ + exit $$ret) + +check-DEJAGNU-single: + $(AM_V_RUNTEST)$(DO_RUNTEST) + +# If running a single job, invoking runtest once is faster & has nicer output. check-DEJAGNU: site.exp - $(AM_V_RUNTEST)LC_ALL=C; export LC_ALL; \ + $(AM_V_at)(set -e; \ EXPECT=${EXPECT} ; export EXPECT ; \ runtest=$(RUNTEST); \ if $(SHELL) -c "$$runtest --version" > /dev/null 2>&1; then \ - $$runtest $(RUNTESTFLAGS); \ - else echo "WARNING: could not find \`runtest'" 1>&2; :;\ - fi + case "$(MAKEFLAGS)" in \ + *-j*) $(MAKE) check-DEJAGNU-parallel;; \ + *) $(MAKE) check-DEJAGNU-single;; \ + esac; \ + else \ + echo "WARNING: could not find \`runtest'" 1>&2; :;\ + fi) MOSTLYCLEANFILES += \ site-sim-config.exp testrun.log testrun.sum |