Reduce overhead of tests/wrapper.as
tests/wrapper.as is a wrapper script that enables the test suite to
run Autoconf’s command line tools (autoconf, autoheader, etc.) without
having installed them first. It’s written in m4sh. All of the
programs it wraps are written in Perl. Therefore, we can make the
wrapper more efficient by rewriting it in Perl and having it invoke
the real program with the ‘do’ builtin. This cuts out the cost of
starting up a shell and crunching through m4sh initialization (order
of 400 lines of code). Using ‘do’ means we only have to start up Perl
once.
‘make check TESTSUITEFLAGS="-j24"’ speeds up a small but consistently
measurable amount on my workstation. The wall-clock time difference
would be bigger at lower levels of parallelism.
before:
wall 1m16.716s
user 16m44.847s
sys 12m6.452s
wall user sys user+sys
autom4te 451.16 261.75 35.75 297.5
autoheader 188.9 42.54 6.1 48.64
autoupdate 47.25 5.39 0.73 6.12
autoreconf 35.68 1.66 0.28 1.94
autoscan 0.88 0.31 0.04 0.35
ifnames 0.25 0.2 0.02 0.22
autoconf 0.18 0.13 0.01 0.14
after:
wall 1m14.624s
user 16m21.883s
sys 11m37.521s
wall user sys user+sys
autom4te 415.49 256.41 27.83 284.24
autoheader 170.87 40.97 3.94 44.91
autoupdate 44.7 5.26 0.59 5.85
autoreconf 33.42 1.54 0.13 1.67
autoscan 0.76 0.27 0.03 0.3
ifnames 0.21 0.18 0 0.18
autoconf 0.14 0.11 0 0.11
(Total time per program collected using BSD process accounting.)
9 files changed