• Ingo Molnar's avatar
    tools/perf: Fix double/triple-build of the feature detection logic during 'make install' et al · 31f6be65
    Ingo Molnar authored
    Linus reported the following perf build system bug:
    
      'Another annoyance during that make was that "make install" seems to
       want to re-make the thing I just built. That's absolutely horrible, [...]'
    
    The thing that got re-built were 'only' the (numerous) feature checks,
    not the whole project - but still it was mighty annoying as the feature
    checks took 9+ seconds even on reasonably fast boxes.
    
    Even with the autodep patches where feature detection is much faster
    it wastes resources, wastes screen real estate and confuses users if
    we execute feature detection twice.
    
    There were two sources for these unnecessary re-builds of the feature
    checks:
    
     - Unnecessary nested invocations of $(MAKE), apparently to be able
       to do conditional compilation dependent on documentation tools
       presence. Use straight dependencies instead, with no nesting.
    
     - A direct invocation of $(MAKE) to rebuild the PERF-VERSION-FILE.
       This is apparently done to be able to include it into the
       Makefile:
    
        -include $(OUTPUT)PERF-VERSION-FILE
    
       but that's entirely pointless for two reasons: 1) the version file
       gets regenerated by the initial build pass anyway, 2) including it
       is futile, given its contents:
    
        #define PERF_VERSION "3.12.rc3.g8510c7"
    
       'make' will interpret that as a comment line...
    
       So just remove this part of the doc-generation logic.
    
    With these things fixed a 'make install' now rebuilds only what is needed.
    
    A repeated 'make install' on an already built tree is super fast now,
    it finishes in under 0.3 seconds:
    
      #
      #  After the patch:
      #
    
      $ time make install
    
      ...
    
      real    0m0.280s
      user    0m0.162s
      sys     0m0.054s
    
    Prior all the autodep changes and prior this fix, a repeat 'make install'
    took 24.1 seconds (!) on the same system:
    
      #
      #  Before the patches:
      #
    
      $ time make install
    
      ...
    
      real    0m24.109s
      user    0m21.171s
      sys     0m2.449s
    
    Which almost entirely was caused by fixable build system fat.
    We are now literally ~86 times faster.
    
    A fresh rebuild and install now takes just 11.4 seconds:
    
      #
      #  After the patch:
      #
    
      $ make clean
      $ time make -j16 install
    
      ...
    
      real    0m11.457s
      user    1m43.411s
      sys     0m7.610s
    
    Without the patches it took 27.8 seconds:
    
      #
      #  Before the patches:
      #
    
      $ make clean
      $ time make -j16 install
    
      ...
    
      real    0m27.801s
      user    1m59.242s
      sys     0m9.749s
    
    So even in the complete rebuild case we are now ~2.5 times faster.
    Reported-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Link: http://lkml.kernel.org/n/tip-x4qjnxjGrgxpribq8sdakfTp@git.kernel.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    31f6be65
Makefile 9.4 KB