[cfe-dev] [LLVMdev] RFC: Upcoming Build System Changes

David A. Greene greened at obbligato.org
Tue Nov 1 16:27:35 PDT 2011


Óscar Fuentes <ofv at wanadoo.es> writes:

> Nico Weber <thakis at chromium.org> writes:
>
>> On Tue, Nov 1, 2011 at 3:09 PM, David A. Greene <greened at obbligato.org> wrote:
>>> Óscar Fuentes <ofv at wanadoo.es> writes:
>>>
>>>> Okay, we can get rid of recursive make. However, as pointed out
>>>> elsewhere, removing recursive make will not make a difference on the
>>>> LLVM build. What David Greene says probably is related to difference
>>>> sizes among his compiler and LLVM.
>>
>> I doubt that's true: Chromium's empty build is faster than llvm's
>> (only tried the make build, not the cmake build), and chromium's code
>> base is considerably larger.
>
> What David was saying is that Cray's compiler *non-empty* build ends
> sooner than the LLVM *empty* build completes. Well, if only a small
> translation unit needs to be compiled into a small executable (no long
> compiler/linker waits) it may be possible but, again, it only speaks
> about the relative sizes of LLVM/Cray's compiler.

Ok, here are some hard numbers for empty builds:

LLVM empty build:
/usr/bin/time make -j16
4.32user 2.47system 0:03.21elapsed 211%CPU (0avgtext+0avgdata 13376maxresident)k
0inputs+0outputs (0major+671804minor)pagefaults 0swaps

Cray empty build:
/usr/bin/time make dynamic-developer -j16
2.88user 1.06system 0:04.94elapsed 79%CPU (0avgtext+0avgdata 64208maxresident)k
0inputs+0outputs (0major+184605minor)pagefaults 0swaps

The Cray empty build includes some really horrendous shell script
trickery known as "modules."  You can read the gory details here:

http://modules.sourceforge.net/

It's possibly the dumbest thing ever invented.  But that's what I've got
to work with.

The point is, the Cray build includes some major shell overhead that the
LLVM build doesn't have to deal with.  And the Cray build has more
targets to build.  And the Cray build has more dependencies to examine.
And the Cray build still blows the socks off the LLVM build.

Here is actual data comparing an empty LLVM build done recursively (the
LLVM build) and non-recursively (the Cray build).

See this?

0inputs+0outputs (0major+671804minor)pagefaults 0swaps

vs. this?

0inputs+0outputs (0major+184605minor)pagefaults 0swaps

That's I/O.

                             -Dave




More information about the cfe-dev mailing list