public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: "H.J. Lu" <hjl.tools@gmail.com>
To: Wilco Dijkstra <Wilco.Dijkstra@arm.com>
Cc: "dj@redhat.com" <dj@redhat.com>,
	GNU C Library <libc-alpha@sourceware.org>
Subject: Re: [PATCH v6 3/4] Reduce CAS in malloc spinlocks
Date: Thu, 23 Feb 2023 11:53:12 -0800	[thread overview]
Message-ID: <CAMe9rOrR==zMUVYcCS3p4hL1GdTLrSsXoX4-3iJZqrvcq8M0iw@mail.gmail.com> (raw)
In-Reply-To: <PAWPR08MB8982C3D15D9B7F9251BE44BE83AB9@PAWPR08MB8982.eurprd08.prod.outlook.com>

On Thu, Feb 23, 2023 at 10:28 AM Wilco Dijkstra <Wilco.Dijkstra@arm.com> wrote:
>
> Hi DJ,
>
> >        size_t n = narenas;
> >        if (__glibc_unlikely (n <= narenas_limit - 1))
> >          {
> > +          if (atomic_load_relaxed (&narenas) != n)
> > +           {
> > +              atomic_spin_nop ();
> > +              goto repeat;
> > +           }
> >            if (catomic_compare_and_exchange_bool_acq (&narenas, n + 1, n))
> >              goto repeat;
>
> Before we consider optimizing it, we should first simplify it. All this wants
> to do is a relaxed atomic add, then check the maximum arenas and
> treat the case of having too many arenas in the same way as failure to
> create another arena (ie. just atomically decrement again). Ie. no CAS
> loop required, and there is nothing to optimize either.
>
> > Should target-specific atomics optimizations be "hidden" somewhere in
> > the atomics implementation?  Just because x86 may benefit from a
> > pre-read doesn't mean that all targets will, and if x86 generally
> > benefits, it should update its implementation of the atomics to do that
> > at a lower level.
>
> We have been removing secret optimizations hidden behind atomics and just
> use standard atomics everywhere. These micro optimizations are often counter-
> productive - it's far better to do them at a higher similar to the single-thread
> path in malloc/free.
>
> For these there is no evidence they are heavily contended - if anything the
> extra code will just slow things down. The cost is in the CAS itself, we could
> remove it from the multithreaded malloc path by splitting the free list into a
> local one (only accessed when you have the malloc lock) and a concurrent one.

I didn't pursue it further since I couldn't show how much it would
improve performance.



-- 
H.J.

  reply	other threads:[~2023-02-23 19:53 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-23 18:27 Wilco Dijkstra
2023-02-23 19:53 ` H.J. Lu [this message]
2023-02-23 20:07   ` DJ Delorie
  -- strict thread matches above, loose matches on Subject: below --
2021-11-15 13:01 Wilco Dijkstra
2021-11-11 16:24 [PATCH v6 0/4] Optimize CAS [BZ #28537] H.J. Lu
2021-11-11 16:24 ` [PATCH v6 3/4] Reduce CAS in malloc spinlocks H.J. Lu
2023-02-23  5:48   ` DJ Delorie

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='CAMe9rOrR==zMUVYcCS3p4hL1GdTLrSsXoX4-3iJZqrvcq8M0iw@mail.gmail.com' \
    --to=hjl.tools@gmail.com \
    --cc=Wilco.Dijkstra@arm.com \
    --cc=dj@redhat.com \
    --cc=libc-alpha@sourceware.org \
    /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).