Messages in this thread | | | From | Brian Johannesmeyer <> | Subject | [PATCH 0/7] Improve performance of 'faddr2line' | Date | Mon, 11 Mar 2024 21:40:12 +0100 |
| |
Hello,
I was looking at the performance of faddr2line and noticed that it spends most of its time performing two tasks: - (1) Making redundant calls to readelf and addr2line for each address (e.g., it makes 7 readelf calls and 2 addr2line calls when converting 1 address, and it makes 252 readelf calls and 51 addr2line calls when converting 50 addresses); and - (2) Calculating a symbol’s size by unnecessarily looping through every symbol in a particular section.
This patch series consists of the following parts: - Patches 1-2 reduce the total number of readelf calls to one, - Patches 3-4 make minor changes in preparation for the following patches, - Patches 5-6 reduce the total number of addr2line calls to one, and - Patch 7 modifies the symbol size calculation to only check two symbols.
I evaluated the performance of the patch series by running faddr2line with a standard kernel image (X86_64 defconfig with CONFIG_DEBUG_INFO enabled). When converting only 1 address, the patch series gives a negligible speedup. When converting 50 addresses, however, it gives a 15x speedup.
Cheers,
Brian
Brian Johannesmeyer (7): scripts/faddr2line: Reduce number of readelf calls to three scripts/faddr2line: Combine three readelf calls into one scripts/faddr2line: Check vmlinux only once scripts/faddr2line: Pass --addresses argument to addr2line scripts/faddr2line: Invoke addr2line as a single long-running process scripts/faddr2line: Remove call to addr2line from find_dir_prefix() scripts/faddr2line: Check only two symbols when calculating symbol size
scripts/faddr2line | 110 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 84 insertions(+), 26 deletions(-)
-- 2.34.1
| |