btrace(8): cache ELF .symtab, .strtab entries in sorted array
authorcheloha <cheloha@openbsd.org>
Tue, 12 Mar 2024 17:22:24 +0000 (17:22 +0000)
committercheloha <cheloha@openbsd.org>
Tue, 12 Mar 2024 17:22:24 +0000 (17:22 +0000)
commit43ae943ea4e5ba5fc2137a190e368f9ef2d8e1dc
tree3a9f7135b07e4706e82496eb535e9453fd8afa1d
parent9d7a05f9200307181ca0fcfe67cdf76d058131ba
btrace(8): cache ELF .symtab, .strtab entries in sorted array

Currently, every kelf_snprintsym() call performs a linear search
through the .symtab for a matching symbol.  The search is very
costly and causes btrace(8) to drop a lot of profiling events.

Storing the STT_FUNC .symtab entries and their corresponding .strtab
entries in a sorted array cuts the lookup cost from O(n) to O(lg n).
Lower overhead reduces the drop rate for profiling events.

With tweaks from mpi@.

Thread: https://marc.info/?l=openbsd-tech&m=170830125132105&w=2

probably ok mpi@
usr.sbin/btrace/ksyms.c