Skip to content
This repository has been archived by the owner on Apr 4, 2022. It is now read-only.

Latest commit

 

History

History
106 lines (59 loc) · 6.02 KB

README.md

File metadata and controls

106 lines (59 loc) · 6.02 KB

Timing Results

Repositories

Repository Commit
llvm-project-prepo commit 826145735e8d
pstore commit a56f036f

Host

The host machine used for these timings: darwin, 21.2.0, x64, 16 × Intel(R) Xeon(R) W-2140B CPU @ 3.20GHz, 64 GiB RAM

Comparisons (lld vs. rld)

The following charts show the results of running the two linker with varying, amounts of gest input. These inputs are created by the rld-gen tool (for linkers other than rld, repo2obj is then used to convert this data and produce object files for the test).

They are not intended in any way to mimic “real world” usage but are instead more akin to compiler benchmarks in that each test is intended to exercise and measure isolated features of the tool.

Each data point of each chart shows the result of performing 50 links. The center point of the line shows the mean time for of all of the runs. The error bars show the 95% confidence interval. The “best fit” line is computed from the least squares of the mean values.

Test Parameter Notation

Tests all follow the same pattern: we run rld-gen, followed by the requested linker(s). Before running a linker other than rld, we convert the rld-gen output to object files using repo2obj.

The test parameters follow an expanded version of the rld-gen command-line syntax. The number of each type of objects to be generated is listed. To generate the range of inputs required for these tests one or more of these arguments can include a range of values. These are specified as min,max,step (in a similar fashion to Fortran do loops).

For example, consider a test parameter such as:

--modules 10 --common 0 --linkonce 0 --external 0,1000,100

This will produce 11 data points with the ‘external’ value sweeping from 0 to 1000 in steps of 100.

Results

External Symbol Resolution

lld vs. rld (external symbol resolution)

This chart shows the performance of the two linkers when presented with 100 modules containing a variable number of external symbols.

Test parameters: --common 0 --external 0,50000,1000 --linkonce 0 --modules 100 --section-size 16 --prefix-length 1 --external-fixups 0 --internal-fixups 0
Raw data: rld ld.lld

Linkonce Symbol Resolution

lld vs. rld (linkonce symbol resolution)

This chart shows the performance of the two linkers when presented with 100 modules containing a variable number of linkonce symbols.

Test parameters: --common 0 --external 0 --linkonce 0,50000,1000 --modules 100 --section-size 16 --prefix-length 1 --external-fixups 0 --internal-fixups 0
Raw data: rld ld.lld

Common Symbol Resolution

lld vs. rld (common symbol resolution)

This chart shows the performance of the two linkers when presented with 100 modules containing a variable number of common symbols.

Test parameters: --common 0,50000,1000 --external 0 --linkonce 0 --modules 100 --section-size 16 --prefix-length 1 --external-fixups 0 --internal-fixups 0
Raw data: rld ld.lld

Per-module Overhead

lld vs. rld (per-module overhead)

This chart shows the per-module overhead for each linker. For each data point, the number of input modules is increased but those modules are all empty.

Test parameters: --common 0 --external 0 --linkonce 0 --modules 1,5000,100 --section-size 16 --prefix-length 1 --external-fixups 0 --internal-fixups 0
Raw data: rld ld.lld

Section Size

lld vs. rld (effect of section size)

This chart shows the effect of changing the amount of data carried in each section. A test of raw copying performance.

Test parameters: --common 1000 --external 1000 --linkonce 1000 --modules 10 --section-size 0,32768,2048 --prefix-length 1 --external-fixups 0 --internal-fixups 0
Raw data: rld ld.lld

Name Length

lld vs. rld (effect of name length)

This chart shows how link time is effected by the length of the strings being processed by the linker. For these runs, the contents of the input files is constant: only the length of the definition names is being changed.

Test parameters: --common 1000 --external 1000 --linkonce 1000 --modules 20 --section-size 16 --prefix-length 1,10000,1000 --external-fixups 0 --internal-fixups 0
Raw data: rld ld.lld

External Fixups

lld vs. rld (effect of external fixups)

This chart shows how link time is effected by the number of external fixups are attached to a section payload. For these runs, the contents of the input files is constant: only the number of external fixups per section is being changed.

Test parameters: --common 0 --external 100 --linkonce 0 --modules 100 --section-size 1000 --prefix-length 1 --external-fixups 0,3996,200 --internal-fixups 0
Raw data: rld ld.lld

Internal Fixups

lld vs. rld (effect of external fixups)

This chart shows how link time is effected by the number of internal fixups are attached to a section payload. For these runs, the contents of the input files is constant: only the number of internal fixups per section is being changed.

Test parameters: --common 0 --external 100 --linkonce 0 --modules 100 --section-size 1000 --prefix-length 1 --external-fixups 0 --internal-fixups 0,3996,200
Raw data: rld ld.lld