38 lines
1.9 KiB
Markdown
38 lines
1.9 KiB
Markdown
|
# Linkers part 10
|
|||
|
|
|||
|
## Parallel Linking
|
|||
|
|
|||
|
It is possible to parallelize the linking process somewhat. This can help hide
|
|||
|
I/O latency and can take better advantage of modern multi-core systems. My
|
|||
|
intention with gold is to use these ideas to speed up the linking process.
|
|||
|
|
|||
|
The first area which can be parallelized is reading the symbols and relocation
|
|||
|
entries of all the input files. The symbols must be processed in order;
|
|||
|
otherwise, it will be difficult for the linker to resolve multiple definitions
|
|||
|
correctly. In particular all the symbols which are used before an archive must
|
|||
|
be fully processed before the archive is processed, or the linker won’t know
|
|||
|
which members of the archive to include in the link (I guess I haven’t talked
|
|||
|
about archives yet). However, despite these ordering requirements, it can be
|
|||
|
beneficial to do the actual I/O in parallel.
|
|||
|
|
|||
|
After all the symbols and relocations have been read, the linker must complete
|
|||
|
the layout of all the input contents. Most of this can not be done in parallel,
|
|||
|
as setting the location of one type of contents requires knowing the size of
|
|||
|
all the preceding types of contents. While doing the layout, the linker can
|
|||
|
determine the final location in the output file of all the data which needs to
|
|||
|
be written out.
|
|||
|
|
|||
|
After layout is complete, the process of reading the contents, applying
|
|||
|
relocations, and writing the contents to the output file can be fully
|
|||
|
parallelized. Each input file can be processed separately.
|
|||
|
|
|||
|
Since the final size of the output file is known after the layout phase, it is
|
|||
|
possible to use `mmap` for the output file. When not doing relaxation, it is
|
|||
|
then possible to read the input contents directly into place in the output
|
|||
|
file, and to relocation them in place. This reduces the number of system calls
|
|||
|
required, and ideally will permit the operating system to do optimal disk I/O
|
|||
|
for the output file.
|
|||
|
|
|||
|
Just a short entry tonight. More tomorrow.
|
|||
|
|