<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 28, 2018 at 7:33 AM Greg Clayton via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">clayborg added a comment.<br>
<br>
In <a href="https://reviews.llvm.org/D51208#1214743" rel="noreferrer" target="_blank">https://reviews.llvm.org/D51208#1214743</a>, @dblaikie wrote:<br>
<br>
> >> 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.<br>
> > <br>
> > These are the numbers from my llvm-dev email in June:<br>
> > <br>
> >> setting a breakpoint on a non-existing function without the use of<br>
> >>  accelerator tables:<br>
> >>  real    0m5.554s<br>
> >>  user    0m43.764s<br>
> >>  sys     0m6.748s<br>
> >> <br>
> >> setting a breakpoint on a non-existing function with accelerator tables:<br>
> >>  real    0m3.517s<br>
> >>  user    0m3.136s<br>
> >>  sys     0m0.376s<br>
> > <br>
> > This is an extreme case,<br>
><br>
> 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?<br>
><br>
> 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.<br>
<br>
<br>
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. </blockquote><div><br>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.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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.<br></blockquote><div><br>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..<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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.<br></blockquote><div><br></div><div>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.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
>> 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.<br>
>> <br>
>> 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).<br>
>> <br>
>> (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).<br>
> <br>
> *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)<br>
<br>
.debug_pubnames and .debug_pubtypes are not useful for LLDB or any debugger in general so please don't enable for LLDB.</blockquote><div><br></div><div>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.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> 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.<br>
<br>
I would vote to enable the DWARF5 accelerator tables for -glldb by default if possible.<br>
<br>
<br>
Repository:<br>
  rLLDB LLDB<br>
<br>
<a href="https://reviews.llvm.org/D51208" rel="noreferrer" target="_blank">https://reviews.llvm.org/D51208</a><br>
<br>
<br>
<br>
</blockquote></div></div>