Repository | Commit |
---|---|
llvm-project-prepo | commit 826145735e8d |
pstore | commit a56f036f |
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
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.
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.
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
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
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
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
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
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
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
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