Hi Jonathon and Srđan,

On Fri, 2019-08-16 at 14:24 -0500, Jonathon Anderson wrote:
> For parallel applications that need the information in the DIEs, the
> Dwarf_Abbrev hash table et al. become a massive data race. This fixes 
> that by:
> 
> 1. Adding atomics & locks to the hash table to manage concurrency
>    (lib/dynamicsizehash_concurrent.{c,h})
> 2. Adding a lock & array structure to the memory manager (pseudo-TLS)
>    (libdwP.h, libdw_alloc.c)
> 3. Adding extra configure options for Helgrind/DRD annotations
>    (configure.ac)
> 4. Including "stdatomic.h" from FreeBSD, to support C11-style   atomics.
>    (lib/stdatomic.h)

This looks like really nice work. Thanks!

I am splitting review in some smaller parts if you don't mind.
Simply because it is large and I cannot keep everything in my head at
once :) But here some initial overall comments.

> Notes:
>  - GCC >= 4.9 provides <stdatomic.h> natively; for those versions
>    lib/stdatomic.h could be removed or disabled. We can also rewrite the
>    file if the copyright becomes an issue.

If the compiler provides stdatomic.h then I think it would be good to
use that instead of our own implementation. The copyright isn't a
problem. But do you have a reference/URL to the upstream version? I
like to add that somewhere, so we can sync with it in the future. I see
various commented out parts. Was that already upstream? Should we just
remove those parts?

>  - Currently the concurrent hash table is always enabled, 
>    performance-wise there is no known difference between it  
>    and the non-concurrent  version.
>    This can be changed to toggle with --enable-thread-safety
>    if preferred.

I would prefer it always enabled, unless there is a massive slowdown of
the single-threaded case. The problem with --enable-thread-safety is
that it is a) known broken (sigh) and b) it basically introduces two
separate libraries that behave subtly differently. I would very much
like to get rid of --enable-thread-safety by fixing the broken locking
and simply making it the default.

>  - Another implementation of #2 above might use dynamic TLS 
>    (pthread_key_*),
>    we chose this implementation to reduce the overall complexity.

Are there any other trade-offs?

Thanks,

Mark

Reply via email to