mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Szabolcs Nagy <nsz@port70.net>
To: 847567161 <847567161@qq.com>
Cc: musl <musl@lists.openwall.com>
Subject: Re: [musl] Re:Re: Re: [musl] Question:Why musl call a_barrier in __pthread_once?
Date: Tue, 23 May 2023 21:41:38 +0200	[thread overview]
Message-ID: <20230523194138.GX3630668@port70.net> (raw)
In-Reply-To: <tencent_38BCF80DB338A46040E1ECE710B8D1F8E507@qq.com>

* 847567161 <847567161@qq.com> [2023-05-22 09:53:05 +0800]:
> &gt;Besides it doesn't help your case. You wanted to remove the "dmb"
> &gt;instruction right? Well, that code adds it if the compiler thinks it is
> &gt;necessary, and GCC trunk for ARM does so: https://godbolt.org/z/WcrfTdTx5
> 
> I compared the implement between musl and bionic in assembly code, 
> I see bionic don't generate 'dmb' with clang, you can also check in here,
> https://godbolt.org/z/hroY3cc4d
> So it has better performance in comman case which init function is done.
> 
> So can we do any optimization here? 

we went over the options up thread but

1) arm != aarch64. clang generates dmb too on armv7-a.

2) the clang you use there is wrong for aarch64: it generates code for
the latest arch, which would not run on baseline -march=armv8-a cpu.
(ldapr is armv8.3-a and not implemented on most cpus currently in use)

3) ldar (or ldapr) are atomic instructions that have an acquire barrier
internally, so while it's not as strong as a dmb it is still a barrier.
(x86 is a different story, there normal loads are already acquire mo)

4) acquire barrier is not enough, posix requires 'synchronize memory'
for the first call in each thread. (bionic implements weak 'synchronize
memory', which arguably breaks some valid posix code, so musl is
conservative).

5) even if musl allowed weak 'synchronize memory', adding weak atomics
to musl would either be a maintenance burden (to implement on all
targets and update the synchronization code) or a regression if
compiler builtins were used for them (old compilers would not work,
even recent gcc/llvm had atomics bugs affecting abi on various targets).

6) the TLS solution would avoid the barrier completely and it guarantees
that in each thread for each once_flag there is a synchronize memory
either at the first pthread_once call *or* somewhere between that and
the once_function completion. (the *or*... bit is not posix conform,
but it is iso c conform. faster than the bionic code in the common case)

so call_once can be optimized to have no barrier or atomics at all
in the fast path (apart from relaxed mo atomics), to do the same for
pthread_once at least an accepted austingroupbugs report is needed to
relax the requirement. a posix relaxation is needed for using acquire
barrier as well (though most libc implementations already assume this
relaxation).

  reply	other threads:[~2023-05-23 19:41 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-22  1:53 [musl] =?gb18030?B?UmU6UmU6IFJlOiBbbXVzbF0gUXVlc3Rpb26juldoeSBtdXNsIGNhbGwgYV9iYXJyaWVyIGluIF9fcHRocmVhZF9vbmNlPw==?= =?gb18030?B?ODQ3NTY3MTYx?=
2023-05-23 19:41 ` Szabolcs Nagy [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-05-18 14:37 =?gb18030?B?ODQ3NTY3MTYx?=
2023-05-18 14:55 ` [musl] Re:Re: Re: [musl] Question:Why musl call a_barrier in __pthread_once? Szabolcs Nagy
2023-05-21 19:16 ` Markus Wichmann

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=20230523194138.GX3630668@port70.net \
    --to=nsz@port70.net \
    --cc=847567161@qq.com \
    --cc=musl@lists.openwall.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

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 NNTP newsgroup(s).