btrace(8): cache ELF symbols in sorted array
authorcheloha <cheloha@openbsd.org>
Sat, 16 Mar 2024 17:42:37 +0000 (17:42 +0000)
committercheloha <cheloha@openbsd.org>
Sat, 16 Mar 2024 17:42:37 +0000 (17:42 +0000)
commiteaddcb2f672b7593c6cabcf8259b8c78fafa8447
tree882465f14c45ef711580b999953de4cc19d5860f
parenteddfc9535ef0da3d2d2727e1617e9a4b51ebba4f
btrace(8): cache ELF symbols in sorted array

Currently, every kelf_snprintsym() call performs a linear search
through the .symtab for a symbol matching the given PC.  The search is
expensive and seems to be a major source of dropped profiling events.

Storing all STT_FUNC .symtab entries and their names in a sorted array
cuts search time from O(n) to O(lg n).  In practice, the faster
lookups seem to dramatically reduce the profiling drop rate.

With tweaks from mpi@.

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

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