| # Dynamic Linker Relocation Benchmark |
| |
| This benchmark measures the time spent in the dynamic linker to load a large set |
| of shared objects with many symbols and relocations. It mimics the work involved |
| in loading a fixed version of `libandroid_servers.so`. |
| |
| ## Running the benchmark |
| |
| To run the benchmark, build the `linker-reloc-bench` target, sync `data`, and |
| run the benchmark from `/data/benchmarktest[64]/linker-reloc-bench`. |
| |
| There is also a `run_bench_with_ninja.sh` script that uses the |
| `gen_bench.py --ninja` mode to generate a benchmark. It's useful for |
| experimentation. The `--cc` and `--linker` flags allow swapping out different |
| static and dynamic linkers. |
| |
| ## Regenerating the synthetic benchmark |
| |
| `regen/dump_relocs.py` scans an ELF file and its dependencies, outputting a JSON |
| dump, then `regen/gen_bench.py` processes the JSON file into benchmark code. |
| `gen_bench.py` has two modes: |
| |
| - (default) generate Android.bp and source files |
| - with `--ninja`: generate a build.ninja instead, and build a set of ELF file |
| outputs |