Re: [PATCH v9 1/3] perf report: Support LLVM for addr2line()
From: Arnaldo Carvalho de Melo
Date: Tue Jul 30 2024 - 15:49:30 EST
On Tue, Jul 30, 2024 at 04:42:28PM -0300, Arnaldo Carvalho de Melo wrote:
> On Fri, Jul 19, 2024 at 05:00:49PM +0200, Steinar H. Gunderson wrote:
> > In addition to the existing support for libbfd and calling out to
> > an external addr2line command, add support for using libllvm directly.
> > This is both faster than libbfd, and can be enabled in distro builds
> > (the LLVM license has an explicit provision for GPLv2 compatibility).
> > Thus, it is set as the primary choice if available.
> >
> > As an example, running perf report on a medium-size profile with
> > DWARF-based backtraces took 58 seconds with LLVM, 78 seconds with
> > libbfd, 153 seconds with external llvm-addr2line, and I got tired
> > and aborted the test after waiting for 55 minutes with external
> > bfd addr2line (which is the default for perf as compiled by distributions
> > today). Evidently, for this case, the bfd addr2line process needs
> > 18 seconds (on a 5.2 GHz Zen 3) to load the .debug ELF in question,
> > hits the 1-second timeout and gets killed during initialization,
> > getting restarted anew every time. Having an in-process addr2line
> > makes this much more robust.
> >
> > As future extensions, libllvm can be used in many other places where
> > we currently use libbfd or other libraries:
> >
> > - Symbol enumeration (in particular, for PE binaries).
> > - Demangling (including non-Itanium demangling, e.g. Microsoft
> > or Rust).
> > - Disassembling (perf annotate).
> >
> > However, these are much less pressing; most people don't profile
> > PE binaries, and perf has non-bfd paths for ELF. The same with
> > demangling; the default _cxa_demangle path works fine for most
> > users, and while bfd objdump can be slow on large binaries,
> > it is possible to use --objdump=llvm-objdump to get the speed benefits.
> > (It appears LLVM-based demangling is very simple, should we want
> > that.)
> >
> > Tested with LLVM 14, 15, 16, 18 and 19. For some reason, LLVM 12 was not
> > correctly detected using feature_check, and thus was not tested.
> >
> > Signed-off-by: Steinar H. Gunderson <sesse@xxxxxxxxxx>
> > Tested-by: Arnaldo Carvalho de Melo <acme@xxxxxxxxxx>
>
> I'm testing this again, I thought Ian or Namhyung had made comments on
> previous versions of this patchset, no?
Unfortunately it clashed with recent patches in the capstone related
codebase, IIRC Athira's for powerpc data-type profiling.
Please take a look at what is in tmp.perf-tools-next at:
https://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git
I'll continue processing other patched and eventually try to fix this if
you're busy,
Thanks again for your continued work on this!
- Arnaldo