
Hi Wolfgang,
On Wed, Nov 2, 2011 at 11:48 PM, Wolfgang Denk wd@denx.de wrote:
Dear Daniel Schwierzeck,
In message CACUy__UjmnRYKMWiMB9pqr0_dS6cgiyo-MsoVY4eSH2zT6ZKHA@mail.gmail.com you wrote:
On Wed, Nov 2, 2011 at 7:54 AM, Wolfgang Denk wd@denx.de wrote:
U-Boot Makefiles contain a number of tests for compiler features etc. which so far are executed again and again. =C2=A0On some architectures (especially ARM) this results in a large number of calls to gcc.
This patch makes sure to run such tests only once, thus largely reducing the number of "execve" system calls.
maybe you want to try this experimental patch. http://patchwork.ozlabs.org/patch/123313/
It significantly reduces the count of gcc calls by caching the results. This also improves compilation times.
Do you suggest this in addition or instead of the patch I posted?
Can you provide some measurements of build times and/or execve system calls?
I ran some additonal tests with interesting results.
Board: ARM, Tegra2, seaboard Toolchain: Sourcery G++ Lite 2011.03-41 for ARM GNU/Linux Workstation: Core 2 Duo E6600 @2,4 Ghz, 4 GB, x86_64
I patched the cc-option macro to count all calls like this:
cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \ - > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;) + > /dev/null 2>&1; then echo "$(1)"; echo "$1" >> $(OBJTREE)/cc-option; else echo "$(2)"; fi ;)
I ran the steps below for following source trees: - unmodified HEAD - only your patch - only my patch - both patches combined
Steps: Complete build: -> git clean -xdf -> CROSS_COMPILE=/opt/codesourcery/arm-2011.03/bin/arm-none-linux-gnueabi- make seaboard_config -> time CROSS_COMPILE=/opt/codesourcery/arm-2011.03/bin/arm-none-linux-gnueabi- CACHE_CC_OPTIONS=y make -s -> cat cc-option | wc -l
Incremental rebuild: -> time CROSS_COMPILE=/opt/codesourcery/arm-2011.03/bin/arm-none-linux-gnueabi- CACHE_CC_OPTIONS=y make -s
Complete build with strace: -> git clean -xdf -> CROSS_COMPILE=/opt/codesourcery/arm-2011.03/bin/arm-none-linux-gnueabi- make seaboard_config -> CROSS_COMPILE=/opt/codesourcery/arm-2011.03/bin/arm-none-linux-gnueabi- CACHE_CC_OPTIONS=y strace -f -e trace=execve -o strace.out make -s -> grep execve strace.out | wc -l
Results: unmodified HEAD: real 1m11.540s user 2m7.170s sys 0m19.840s
cc-option calls 3024
real 0m20.176s user 0m39.260s sys 0m6.480s
execve calls 16502
only your patch: real 0m32.371s user 0m47.440s sys 0m7.900s
cc-option calls 864
real 0m9.606s user 0m16.890s sys 0m2.940s
execve calls 5906
only my patch: real 0m28.187s user 0m56.030s sys 0m7.820s
cc-option calls 20
real 0m5.013s user 0m13.300s sys 0m2.200s
execve calls 7415
both patches combined: real 0m19.777s user 0m28.010s sys 0m4.100s
cc-option calls 8
real 0m2.902s user 0m6.400s sys 0m1.070s
execve calls 3329
Conclusion: - complete build time reduced from 1m11s to 20s - incremental rebuild time reduced from 20s to 3s - cc-option calls reduced from 3024 to 8 - execve calls reduced from 16502 to 3329
Best regards, Daniel