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

David Blaikie via lldb-commits lldb-commits at lists.llvm.org
Tue Aug 28 10:25:21 PDT 2018


On Tue, Aug 28, 2018 at 7:33 AM Greg Clayton via Phabricator <
reviews at reviews.llvm.org> wrote:

> 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.


How long's the GDB startup/indexing time? (I take it this is without split
DWARF?) & LLDB? Because I've observed some pretty large binaries without
indexes & GDB startup times in the minute or so.


> 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.
>

Not sure I follow - LTO should allow for even more compact debug info than
debug_types (because LTO will merge the types before generating DWARF which
means more compact debug info because there's no need to make the
isolated/slicable chunks that debug_types requires), I think..


> 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.
>

Oh, yeah, I'm not suggesting LLDB should use GDB's indexes - but that if
GDB can get reasonable performance without precomputed indexes then that
might be an indication that LLDB is leaving some performance improvements
on the table that might be worth investigating at some point.

>> 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.


Oh, sure - I didn't mean to suggest that, it's just the name of the flag
that happens to exist already & enables/disables them. Internally in the
LLVM IR it's called "nameIndex" so it's generic between pubnames and
debug_names & we could add another public command line alias that's more
debug_names appropriate but I didn't figure that would be a high priority
since we're mostly talking about defaults here.


> 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
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20180828/0ed1bab0/attachment-0001.html>


More information about the lldb-commits mailing list