Re: [Lse-tech] Re: 10.31 second kernel compile

Dave Hansen
2002-03-13T21:45:29Z

Martin J. Bligh wrote:
>>Due to the final link and compress stage, there is a fair amount of idle
>>time at the end of the run. Its going to be hard to push that number
>>lower by adding cpus.
>
> I think we need to fix the final phase .... anyone got any ideas
> on parallelizing that?
The final linking stage in the makefile looks like this:

vmlinux: piggy.o $(OBJECTS)
$(LD) $(ZLINKFLAGS) -o vmlinux $(OBJECTS) piggy.o

ld has a "-r" option
`--relocateable'
Generate relocatable output---i.e., generate an output
file that can in turn serve as input to `ld'. This is
often called partial linking. As a side effect, in
environments that support standard Unix magic numbers,
this option also sets the output file's magic number
to `OMAGIC'. If this option is not specified, an
absolute file is produced. When linking C++ programs,
this option will not resolve references to construc­
tors; to do that, use -Ur.

If we link in chunks, we can parallelize this.
Image 26 object files: [a-z].o

ld -r -o abcd.o [abcd].o
ld -r -o efgh.o [efgh].o
...
ld -r -o abcdefgh.o {abcd,efgh,...}.o

then, instead of the old final link stage:
$(LD) $(ZLINKFLAGS) -o vmlinux {abcdefgh,...}.o piggy.o

The final link will still take a while, but we will have at least broken
up SOME of the work. I'm going to see if this will actually work now.
Any comments?

--
Dave Hansen
haveblue@us.ibm.com