[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Performance regression since make 3.81?
From: |
David Rothlisberger |
Subject: |
Performance regression since make 3.81? |
Date: |
Wed, 15 Apr 2015 14:35:03 +0100 |
With the 20,000 file testcase described below, the performance of make
has regressed a little bit since 3.81 -- I *think*.[1]
| | 3.81[1] | 3.82 | 4.0 | 4.1 | master (ga80a8b8) |
| make -nrR | 0.67s | 1.1s | 0.76s | 0.76s | 0.76s |
| make -n | 3.2s | 130s | 15s | 15s | 15s |
As you can see it only matters when you don't specify "-rR".
Given that, I don't know if this is actually important.
Interestingly, 10 seconds of that time is *after* make has printed
"Nothing to be done", but before it exits.
So it seems to me that 3.82 introduced two performance regressions, one
of which was fixed in 4.0 but the other one (during teardown) remains.
Unless the 3.81 version I'm using was built with different gcc
optimisation settings.
The testcase is from the "tup" build system's benchmark. It is described
in detail here[3] but briefly: 10,000 header files, 10,000 C files that
each include 7 header files, 10,000 ".d" files; all spread over 1000
directories, with a single non-recursive Makefile.
Instructions:
git clone git://github.com/gittup/tup.git
mkdir tup/test/make_v_tup/mytest
cd tup/test/make_v_tup/mytest
../gen-test-case.pl -n 10000 -d 7
cd tmake
make # takes about 3 minutes
time make
Cheers,
Dave.
[1] I couldn't actually build 3.81 from git myself, presumably because
of incompatible autotools versions.[2] It's possible that I built the
newer versions of make with different optimisations than my distro did
for make 3.81 (Ubuntu 14.04). I used the following (from
`dpkg-buildflags --get CFLAGS` which in theory are the distro's
defaults): -g -O2 -fstack-protector --param=ssp-buffer-size=4
[2] $ git checkout 3.81
$ git clean -xfd
$ autoreconf -i
[...]
configure.in:48: error: automatic de-ANSI-fication support has been removed
/usr/share/aclocal-1.14/obsolete.m4:26: AM_C_PROTOTYPES is expanded from...
configure.in:48: the top level
autom4te: /usr/bin/m4 failed with exit status: 1
aclocal: error: echo failed with exit status: 1
autoreconf: aclocal failed with exit status: 1
[3] http://gittup.org/tup/make_vs_tup.html
- Performance regression since make 3.81?,
David Rothlisberger <=