> On Jun 21, 2018, at 7:58 AM, Zachary Turner <ztur...@google.com> wrote:
> 
> Performance i get. Gdb is almost unusable for large programs because of how 
> long it takes to load debug info.

Agreed. With our new DWARF5 tables, we will be even better. Or test on a mac 
with dSYM files and you will get similar numbers to a DWARF5 scenario with 
.debug_names.

> 
> Do you have specific numbers on memory usage? How much memory (absolute and 
> %) is saved by loading debug info lazily on a relatively large project?

I ran the number many years back when LLDB was first trying to overtake GDB. 
The numbers were quite favorable at the time. You can easily run a few tests by 
doing the same thing in LLDB and in GDB like:
- b main.cpp:123
- run
- bt
- frame variable

Then look at the memory numbers of each process.

> On Thu, Jun 21, 2018 at 7:54 AM Greg Clayton <clayb...@gmail.com 
> <mailto:clayb...@gmail.com>> wrote:
> 
> 
>> On Jun 21, 2018, at 7:47 AM, Zachary Turner <ztur...@google.com 
>> <mailto:ztur...@google.com>> wrote:
>> 
>> Related question: Is the laziness done to save memory, startup time, or both?
> 
> Both. It allows us to fetch only what we need when we need it. Time to break 
> at main.cpp:123 is much quicker. Using LLDB for symbolication is much quicker 
> as symbolication only needs to know about function definitions and function 
> bounds. Many uses of LLDB are made better by partially parsing.
> 
>> On Thu, Jun 21, 2018 at 7:36 AM Greg Clayton via Phabricator 
>> <revi...@reviews.llvm.org <mailto:revi...@reviews.llvm.org>> wrote:
>> clayborg added a comment.
>> 
>> In https://reviews.llvm.org/D48393#1138989 
>> <https://reviews.llvm.org/D48393#1138989>, @labath wrote:
>> 
>> > I am not sure this will actually solve the problems you are seeing. This 
>> > may avoid corrupting the internal DenseMap data structures, but it will 
>> > not make the algorithm using them actually correct.
>> >  For example the pattern in `ParseTypeFromDWARF` is:
>> >
>> > 1. check the "already parsed map". If the DIE is already parsed then 
>> > you're done.
>> > 2. if the map contains the magic "DIE_IS_BEING_PARSED" key, abort 
>> > (recursive dwarf references)
>> > 3. otherwise, insert the  "DIE_IS_BEING_PARSED" key into the map
>> > 4. do the parsing, which potentially involves recursive 
>> > `ParseTypeFromDWARF` calls
>> > 5. insert the parsed type into the map
>> >
>> >   What you do is make each of the steps (1), (3), (5) atomic individually. 
>> > However, the whole algorithm is not correct unless the whole sequence is 
>> > atomic as a whole. Otherwise, if you have two threads trying to parse the 
>> > same DIE (directly or indirectly), one of them could see the intermediate 
>> > DIE_IS_BEING_PARSED and incorrectly assume that it encountered recursive 
>> > types.
>> 
>> 
>> We need to make #1 atomic.
>> #2 would need to somehow know if the type is already being parsed 
>> recursively by the current thread. If so, then do what we do now. If not, we 
>> need a way to wait on the completion of this type so the other parsing 
>> thread can complete it and put it into the map, at which time we grab the 
>> right value from the map
>> So #6 step would need to be added so after we do put it into the map, we can 
>> notify other threads that might be waiting
>> 
>> > So, I think that locking at a higher level would be better. Doing that 
>> > will certainly be tricky though...
>> 
>> 
>> 
>> 
>> https://reviews.llvm.org/D48393 <https://reviews.llvm.org/D48393>
>> 
>> 
>> 
> 

_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to