svn commit: r187132 - head/usr.bin/make

David O'Brien obrien at FreeBSD.org
Mon Feb 2 14:24:25 PST 2009


On Fri, Jan 30, 2009 at 09:30:52AM -0700, M. Warner Losh wrote:
> OMG!  There's too much make output now, and the recent changes broke
> useful make features.  All but one were eventually fixed.  I just
> fixed the -s breakage.

I fail to see where 'make -Q -s' is not suitable to achieve the goals
you mentioned for 'make -s'.  I did make sure you could quiet things.


I've tried to measure the "~10% performance improvement" in using
'make -s' that was the technical justification for r187921.  I have
been unable to achieve ~10%.  The summary is:
        'make -j16 -Q -s' saves 2.54% over 'make -j16' on local disk.
        'make -s' saves 0.96% over 'make' on local disk.
        results on NFS are insignificant [ delta < 0.5% ].


I ran benchmarks on ref8-amd64 (a machine others have access to and
can audit my results).  I checked out
svn+ssh://svn.freebsd.org/base/head@187920 and built make from that.
Using that make I then ran buildworld's.

The abbreviated results for local disk are:

MAKE=make at r187921 /usr/bin/time -h $MAKE -j16 -Q buildworld >outfile 2>&1
        25m38.07s real          1h30m6.59s user         45m37.27s sys
        25m15.23s real          1h30m1.67s user         45m28.50s sys
        25m22.65s real          1h30m8.85s user         45m32.10s sys
        (1538.07 + 1515.23 + 1522.65)/3 = 1525.32 sec ave
        [10% improvement would reduce build by 2m33s]

MAKE=make at r187921 /usr/bin/time -h $MAKE -j16 -Q -s buildworld >outfile 2>&1
        24m36.12s real     1h27m27.18s user     44m26.88s sys
        24m34.77s real     1h27m27.82s user     44m24.56s sys
        24m29.01s real     1h27m22.16s user     44m28.23s sys
        (1476.12 + 1474.77 + 1469.01)/3 = 1473.30 sec ave
        => 1473.30 / 1525.32 * 100 - 100 = -3.41% change in build time

        [compared with below]
        => 1473.30 / 1511.70 * 100 - 100 = -2.54% change in build time

MAKE=make at r187921 /usr/bin/time -h $MAKE -j16 buildworld >outfile 2>&1
        25m3.95s real      1h27m40.02s user     45m19.12s sys
        24m57.35s real     1h27m33.31s user     45m6.81s sys
        25m33.81s real     1h27m39.68s user     44m50.02s sys
        (1503.95 + 1497.35 + 1533.81)/3 = 1511.70 sec ave
        => 1511.70 / 1525.32 * 100 - 100 = -.89% change in build time

MAKE=make at r187921 /usr/bin/time -h $MAKE buildworld >outfile 2>&1
        1h48m7.30s real	   1h28m22.07s user     22m28.01s sys
        1h48m0.94s real	   1h28m35.60s user     22m7.59s sys
        1h48m4.20s real	   1h28m39.28s user     21m58.27s sys
        (6487.30 + 6480.94 + 6484.20)/3 = 6484.15 sec ave
        [10% improvement would reduce build by 10m48s]

MAKE=make at r187921 /usr/bin/time -h $MAKE -s buildworld >outfile 2>&1
        1h47m56.48s real   1h28m35.91s user     22m0.57s sys
        1h47m55.65s real   1h28m40.66s user     21m56.70s sys
        1h51m5.05s real	   1h28m48.22s user     22m21.96s sys
        (6476.48 + 6475.65 + 6665.05)/3 = 6539.06 sec ave
        => 6539.06 / 6484.15 * 100 - 100 = .85% change in build time
        If we toss out the high value and use 6476.48 twice, ave = 6476.20
        => 6476.20 / 6539.06 * 100 - 100 = -.96% change in build time


The NFS results are:

MAKE=make at r187921 /usr/bin/time -h $MAKE -j16 buildworld >outfile 2>&1
        35m33.59s real     1h33m20.08s user     52m1.04s sys
        31m9.58s real      1h33m43.16s user     52m41.46s sys
        31m18.94s real     1h33m40.45s user     52m41.58s sys
        (2133.59 + 1869.58 + 1878.94)/3 = 1960.70 sec ave

MAKE=make at r187921 /usr/bin/time -h $MAKE -j16 -Q -s buildworld >outfile 2>&1
        31m42.62s real     1h33m28.64s user     52m4.32s sys
        31m14.54s real     1h33m21.25s user     52m8.88s sys
        31m17.26s real     1h33m22.48s user     52m10.93s sys
        (1902.62 + 1874.54 + 1877.26)/3 = 1884.81 sec ave
        => 1884.81 / 1960.70 * 100 - 100 = -3.87% change in build time

        To be fair as in the local disk case, redoing the above:
        (1878.94 + 1869.58 + 1878.94)/3 = 1875.82 sec ave (adjusted)
        => 1884.81 / 1875.82 * 100 - 100 = .48% change in build time

MAKE=make at r187921 /usr/bin/time -h $MAKE buildworld >outfile 2>&1
        2h21m30.74s real   1h30m28.41s user     29m8.64s sys
        2h21m2.15s real    1h30m25.54s user     29m2.99s sys
        2h21m0.24s real    1h30m25.93s user     29m3.85s sys
        (8490.74 + 8462.15 + 8460.24)/3 = 8471.04 sec ave

MAKE=make at r187921 /usr/bin/time -h $MAKE -s buildworld >outfile 2>&1
        2h20m48.71s real   1h30m26.02s user     29m7.66s sys
        2h21m5.95s real    1h30m21.87s user     29m10.28s sys
        2h21m7.70s real    1h30m29.85s user     29m4.29s sys
        (8448.71 + 8465.95 + 8467.7)/3 = 8460.79 sec ave
        => 8460.79 /8471.04 * 100 - 100 = -.12% change in build time


Thus I think there isn't any real time savings with "-Q -s"/"-s".
Granted I was not in full control of the machine to ensure there was no
completing usage, but from what I can other users didn't adversely affect
my results.  Also, three samples is rather small; but I was working from
very little data from the "~10% performance improvement".


I also "benchmarked" log size to see how much an issue that is:

/usr/bin/time -h make at r187921 -j16 buildworld
        30692989 , 30076086 , 30039499  (29M)
/usr/bin/time -h $MAKE -j16 -Q buildworld
        27734095, 27169263, 27169297  (26M)
/usr/bin/time -h $MAKE -j16 -s buildworld
        1168471 , 1168346 , 1165518  (1.1M)
/usr/bin/time -h make at r187921 -j16 -Q -s buildworld
        925073 , 925072 , 925103  (903K)
/usr/bin/time -h make at r187921 buildworld
        27168710 , 27168709 , 27168710  (26M)
/usr/bin/time -h make at r187921 -s buildworld
        924919 , 924920 , 924919  (903K)

I do not consider the 3M of additional output of 'make -j16' vs.
'make -j16 -Q' to be significant with today's disk sizes.

-- 
-- David


More information about the freebsd-arch mailing list