[Lldb-commits] [PATCH] D51208: [DWARF] Fix dwarf5-index-is-used.cpp

Greg Clayton via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Tue Aug 28 07:33:37 PDT 2018


clayborg added a comment.

In https://reviews.llvm.org/D51208#1214743, @dblaikie wrote:

> >> But if LLDB has different performance characteristics, or the default should be different for other reasons - I'm fine with that. I think I left it on for Apple so as not to mess with their stuff because of the MachO/dsym sort of thing that's a bit different from the environments I'm looking at.
> > 
> > These are the numbers from my llvm-dev email in June:
> > 
> >> setting a breakpoint on a non-existing function without the use of
> >>  accelerator tables:
> >>  real    0m5.554s
> >>  user    0m43.764s
> >>  sys     0m6.748s
> >> 
> >> setting a breakpoint on a non-existing function with accelerator tables:
> >>  real    0m3.517s
> >>  user    0m3.136s
> >>  sys     0m0.376s
> > 
> > This is an extreme case,
>
> What was being tested here? Is it a realistic case (ie: not a pathalogical case with an absurd number of symbols, etc)? Using ELF? Fission or not?
>
> How's it compare to GDB performance, I wonder? Perhaps LLDB hasn't been optimized for the non-indexed case and could be - though that'd still potentially motivate turning on indexes by default for LLDB until someone has a motivation to do any non-indexed performance tuning/improvements.


The performance is huge for large binaries. LLDB doesn't need to manually index all DWARF if the accelerator tables are there, it does if they are not. Many people complain about the time it takes to index the DWARF, so avoiding will be a huge improvement. We have some server binaries that statically link in libc, libstdc++ and many other binaries and they are currently 11GB, with over 10GB of that being DWARF. It makes debugging with GDB and LLDB unusable when manual indexing of all that DWARF is needed. They have .debug_types enabled where they can on these binaries, but LTO tends to be the culprit that can't take advantage of the .debug_types so the binaries are still huge.

GDB performance is hard to compare to due to the way they import types. They import all types in a compile unit at the same time and have 3 layers of resolution as they parse. Their indexes, if created by a linker, just say "foo" exists in this compile unit somewhere, not the exact DIE offset, so their indexes are useful, but they don't help LLDB out as much as the DWARF 5 versions do.

> 
> 
>> because practically the only thing we are doing is building the symbol index, but it's nice for demonstrating the amount of work that lldb needs to do without it. In practice, the ratio will not be this huge most of the time, because we will usually find some matches, and then will have to do some extra work, which will add a constant overhead to both sides. However, this means that the no-accel case will take even longer. I am not sure how this compares to gdb numbers, but I think the difference here is significant.
>> 
>> Also, I am pretty sure the Apple folks, who afaik are in the process of switching to debug_names, will want to have them on by default for their targets (ping @aprantl, @JDevlieghere). I think the cleanest way (and one that best reflects the reality) to achieve that would be to have `-glldb` imply `-gpubnames`. As for whether we should emit debug_names for DWARF 5 by default (-gdwarf-5 => -gpubnames) is a more tricky question, and I don't have a clear opinion on that (however, @probinson might).
>> 
>> (In either case, I agree that there are circumstances in which having debug_names is not beneficial, so having a flag to control them is a good idea).
> 
> *nod* Happy if you want to (or I can) have clang set pubnames on by default when tuning for LLDB, while allowing -gno-pubnames to turn them off. (& maybe we should have another alias for that flag, since debug_names isn't "pubnames", but that's pretty low-priority)

.debug_pubnames and .debug_pubtypes are not useful for LLDB or any debugger in general so please don't enable for LLDB. They only include public functions (no statics functions for functions in the anonymous namespace) and types. This means LLDB ignores these sections and manually indexes the DWARF, just like GDB ignores them.

I would vote to enable the DWARF5 accelerator tables for -glldb by default if possible.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D51208





More information about the lldb-commits mailing list