From: Davide Libenzi <davidel@xmailserver.org>
To: linux-ia64@vger.kernel.org
Subject: RE: [Linux-ia64] Re: web page on O(1) scheduler
Date: Sat, 24 May 2003 05:38:44 +0000 [thread overview]
Message-ID: <marc-linux-ia64-105590723706027@msgid-missing> (raw)
In-Reply-To: <marc-linux-ia64-105590723705966@msgid-missing>
On Fri, 23 May 2003, Boehm, Hans wrote:
> Thanks for the pointer. In the statically linked case, I get 200/568/345
> for custom/pthread_mutex/pthread_spin.
>
> I agree that this is not a fair comparison. That was my point. An implementation
> with custom yield/sleep
> code can do things that you can't do with blocking pthreads primitives at the
> same performance. (Of course pthreads_mutex_lock will win in other cases.)
>
> Please forget about the abort() in the contention case. I put that there for
> brevity since it is not exercised by the test. The intent was to time the
> noncontention performance of a custom lock that first spins, then yields,
> and then sleeps, as was stated in the comment.
>
> You are forgetting two issues in your analysis of what pthreads is/should be doing
> relative to the spin-lock-like code:
>
> 1) The unlock code is different. If you potentially do a waitforunlocks()
> in the locking code, you need to at least check whether the corresponding
> notification is necessary when you unlock(). For NPTL that requires another
> atomic operation, and hence another dozen to a couple of hundred cycles,
> depending on the processor. You need to look at both the lock and unlock
> code.
That code was completely independent by what pthread might do. I didn't
look at the code but I think the new pthread uses futexes for mutexes.
The code wanted only to show that a mutex lock does more than a spinlock.
And this "more" is amplified by your tight loop.
> 2) (I hadn't mentioned this before.) The (standard interpretation of)
> the memory barrier semantics of the pthreads primitives is too strong.
> Arguably they need to be full memory barriers in both directions.
> The pthread_spin_lock code inserts an extra full
> memory barrier on IA64 as a result, instead of just
> using the acquire barrier associated with the cmpxchg.acq instruction.
> (I think the spin unlock code doesn't do this. One could argue that that's a bug,
> though I would argue that the bug is really in the pthreads spec.)
You need a write memory barrier even on the unlock. Consider this :
spinlock = 1;
...
protected_resource = NEWVAL;
spinlock = 0;
( where spinlock = 0/1 strip down, but do not lose the concept, the lock
operation ). If a CPU reorder those writes, another CPU might see the lock
drop before the protected resource assignment. And this is usually bad
for obvious reasons.
- Davide
next prev parent reply other threads:[~2003-05-24 5:38 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-21 9:01 [Linux-ia64] Re: web page on O(1) scheduler Arjan van de Ven
2003-05-21 9:26 ` Mike Galbraith
2003-05-21 9:30 ` Mike Galbraith
2003-05-21 10:40 ` Duraid Madina
2003-05-21 10:43 ` Christoph Hellwig
2003-05-21 15:18 ` David Mosberger
2003-05-21 17:56 ` David Mosberger
2003-05-21 20:46 ` Mike Galbraith
2003-05-22 0:38 ` Rik van Riel
2003-05-22 5:52 ` Mike Galbraith
2003-05-22 9:52 ` Mike Galbraith
2003-05-22 16:25 ` Mike Galbraith
2003-05-22 17:58 ` David Mosberger
2003-05-23 1:07 ` Hans Boehm
2003-05-23 8:30 ` Arjan van de Ven
2003-05-23 17:48 ` Boehm, Hans
2003-05-23 18:04 ` Davide Libenzi
2003-05-24 0:10 ` Boehm, Hans
2003-05-24 0:20 ` Davide Libenzi
2003-05-24 0:53 ` Boehm, Hans
2003-05-24 5:38 ` Davide Libenzi [this message]
2003-05-24 14:43 ` Davide Libenzi
2003-05-24 16:50 ` Hans Boehm
2003-05-24 21:41 ` Davide Libenzi
2003-05-25 9:17 ` Mike Galbraith
-- strict thread matches above, loose matches on Subject: below --
2003-05-24 0:53 Boehm, Hans
2003-05-24 5:38 ` Davide Libenzi
2003-05-24 14:43 ` Davide Libenzi
2003-05-24 0:10 Boehm, Hans
2003-05-24 0:20 ` Davide Libenzi
2003-05-23 17:48 Boehm, Hans
2003-05-23 18:04 ` Davide Libenzi
2003-05-21 6:49 David Mosberger
2003-05-21 9:01 ` Arjan van de Ven
2003-05-21 10:40 ` [Linux-ia64] " Duraid Madina
2003-05-21 10:43 ` Christoph Hellwig
2003-05-21 13:12 ` Arjan van de Ven
2003-05-21 13:51 ` Olivier Galibert
2003-05-28 22:12 ` Bill Davidsen
[not found] ` <Pine.LNX.3.96.1030528180909.21414B-100000@gatekeeper.tmr.c om>
2003-05-29 5:59 ` Mike Galbraith
2003-06-02 8:05 ` Ingo Molnar
2003-06-04 4:07 ` Bill Davidsen
[not found] ` <Pine.LNX.4.44.0306020949520.3375-100000@localhost.localdom ain>
2003-06-02 13:51 ` Mike Galbraith
2003-06-04 3:52 ` Bill Davidsen
2003-06-04 4:55 ` David Schwartz
[not found] ` <Pine.LNX.3.96.1030603234616.16495B-100000@gatekeeper.tmr.c om>
2003-06-04 7:13 ` Mike Galbraith
2003-06-04 15:30 ` Jan Harkes
2003-05-21 19:18 ` Duraid Madina
2003-05-21 20:03 ` Helge Hafting
2003-05-21 22:59 ` Alan Cox
2003-05-23 1:07 ` Hans Boehm
2003-05-23 8:30 ` Arjan van de Ven
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=marc-linux-ia64-105590723706027@msgid-missing \
--to=davidel@xmailserver.org \
--cc=linux-ia64@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.