]> git.ipfire.org Git - thirdparty/autoconf.git/commit
Reduce overhead of tests/wrapper.as zack/perl-interp-overhead
authorZack Weinberg <zack@owlfolio.org>
Thu, 7 Dec 2023 19:06:26 +0000 (14:06 -0500)
committerZack Weinberg <zack@owlfolio.org>
Thu, 7 Dec 2023 19:06:26 +0000 (14:06 -0500)
commit5c388be8a7ef54a8500e7b3072a6cf276fc133c0
treea070b2e05581cedb740f7c2663fa0bf82fc300ce
parent39d96e6fff7ceae63b823872602caf4d255a38c8
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.)
bin/autoconf.in
bin/autoheader.in
bin/ifnames.in
lib/Autom4te/FileUtils.pm
tests/local.at
tests/local.mk
tests/tools.at
tests/wrapper.as [deleted file]
tests/wrapper.in [new file with mode: 0755]