public inbox for elfutils@sourceware.org
 help / color / mirror / Atom feed
From: Mark Wielaard <mark@klomp.org>
To: Jonathon Anderson <jma14@rice.edu>, elfutils-devel@sourceware.org
Cc: Srdan Milakovic <sm108@rice.edu>
Subject: Re: [PATCH] libdw: add thread-safety to dwarf_getabbrev()
Date: Wed, 21 Aug 2019 11:16:00 -0000	[thread overview]
Message-ID: <410becd068420cbd3b93c161be2084c6a5d2f362.camel@klomp.org> (raw)
In-Reply-To: <1565983469.1826.0@smtp.mail.rice.edu>

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	other threads:[~2019-08-21 11:16 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-16 19:24 Jonathon Anderson
2019-08-21 11:16 ` Mark Wielaard [this message]
2019-08-21 14:21   ` Jonathon Anderson
2019-08-23 21:22     ` Mark Wielaard
     [not found]   ` <1566396518.5389.0@smtp.mail.rice.edu>
2019-08-23 18:25     ` Mark Wielaard
2019-08-23 22:36       ` Jonathon Anderson
2019-08-21 21:50 ` Mark Wielaard
2019-08-21 22:01   ` Mark Wielaard
2019-08-21 22:21   ` Jonathon Anderson
2019-08-23 21:26     ` Mark Wielaard
2019-08-24 23:24 ` Mark Wielaard
2019-08-25  1:11   ` Jonathon Anderson
2019-08-25 10:05     ` Mark Wielaard
2019-08-26  1:25       ` Jonathon Anderson
2019-08-26 13:18         ` Mark Wielaard
2019-08-26 13:37           ` Jonathon Anderson
2019-08-27  3:52             ` Jonathon Anderson
2019-08-29 13:16               ` Mark Wielaard
2019-08-29 13:16                 ` [PATCH 2/3] libdw: Rewrite the memory handler to be thread-safe Mark Wielaard
2019-10-21 16:13                   ` Mark Wielaard
2019-10-21 16:28                     ` Jonathon Anderson
2019-10-21 18:00                       ` Mark Wielaard
2019-10-24 16:47                         ` Mark Wielaard
2019-08-29 13:16                 ` [PATCH 3/3] lib + libdw: Add and use a concurrent version of the dynamic-size hash table Mark Wielaard
2019-10-25 23:50                   ` Mark Wielaard
2019-10-26  4:11                     ` Jonathon Anderson
2019-10-27 16:13                       ` Mark Wielaard
2019-10-27 17:49                         ` Jonathon Anderson
2019-10-28 14:08                           ` Mark Wielaard
2019-10-28 20:12                         ` Mark Wielaard
2019-11-04 16:21                           ` Mark Wielaard
2019-11-04 16:19                       ` Mark Wielaard
2019-11-04 17:03                         ` [PATCH] " Jonathon Anderson
2019-11-07 11:07                           ` Mark Wielaard
2019-11-07 15:25                             ` Jonathon Anderson
2019-11-08 14:07                               ` Mark Wielaard
2019-11-08 15:29                                 ` Jonathon Anderson
2019-11-10 23:24                                   ` Mark Wielaard
2019-11-11 23:38                                     ` Jonathon Anderson
2019-11-12 21:45                                       ` Mark Wielaard
2019-08-29 13:16                 ` [PATCH 1/3] Add some supporting framework for C11-style atomics Mark Wielaard
2019-10-22 16:31                   ` Mark Wielaard
2019-10-26 10:54               ` [PATCH] libdw: add thread-safety to dwarf_getabbrev() Florian Weimer
2019-10-26 12:06                 ` Mark Wielaard
2019-10-26 16:14                   ` Florian Weimer
2019-10-26 16:45                     ` Jonathon Anderson
2019-10-26 16:50                       ` Florian Weimer
2019-10-26 22:53                         ` Mark Wielaard
2019-10-27  8:59                           ` Florian Weimer
2019-10-27 18:11                             ` Jonathon Anderson
2019-10-27 18:44                               ` Florian Weimer
2019-10-26 22:50                       ` Mark Wielaard
2019-10-27  0:56                         ` Jonathon Anderson
2019-10-28 13:26                           ` Mark Wielaard
2019-10-28 15:32                             ` Jonathon Anderson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=410becd068420cbd3b93c161be2084c6a5d2f362.camel@klomp.org \
    --to=mark@klomp.org \
    --cc=elfutils-devel@sourceware.org \
    --cc=jma14@rice.edu \
    --cc=sm108@rice.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).