bug-make
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]