From: Robert Love <rml@tech9.net>
To: Martin Wirth <Martin.Wirth@dlr.de>
Cc: linux-kernel@vger.kernel.org, akpm@zip.com.au,
torvalds@transmet.com, mingo@elte.hu, nigel@nrg.org
Subject: Re: [RFC] New locking primitive for 2.5
Date: 07 Feb 2002 13:40:59 -0500 [thread overview]
Message-ID: <1013107259.10430.29.camel@phantasy> (raw)
In-Reply-To: <3C629F91.2869CB1F@dlr.de>
In-Reply-To: <3C629F91.2869CB1F@dlr.de>
On Thu, 2002-02-07 at 10:38, Martin Wirth wrote:
> This is a request for comment on a new locking primitive
> called a combilock.
Interesting ...
The question I raise is, how many locks do we have where we have a
single resource we lock where in some codepaths the lock is used for
short duration and in other places the lock is long-duration?
It would be useful to identify a few locks where this would benefit and
apply the appropriate combi variant and do some benchmarking.
Some of the talk I've heard has been toward an adaptive lock. These are
locks like Solaris's that can spin or sleep, usually depending on the
state of the lock's holder. Another alternative, which I prefer since
it is much less overhead, is a lock that spins-then-sleeps
unconditionally.
> If a spin_lock request is blocked by a mutex_lock call, the spin_lock
> attempt also sleeps i.e. behaves like a semaphore.
> If you gained ownership of the lock, you can switch between spin-mode
> and mutex-(ie.e sleeping) mode by calling:
This can be bad. What if I grab a spinlock in a codepath where only a
spinlock is appropriate (i.e. somewhere I can't sleep, like an irq
handler) -- and then I sleep?
> Note: For a preemptible kernel this approach could lead to much less
> scheduling ping-pong also for UP if a spinlock is replaced by a
> combilock instead of a semaphore.
Very true ... but only assuming we can find locks where there are
differing profiles of use.
> Open questions:
>
> * Does it make sense to also provide irq-save versions of the
> locking functions? This means you could use the unlock functions
> from interrupt context. But the main use in this situation is
> completion handling and there are already (new) completion handlers
> available. So I don't think this is a must have.
You can't sleep in an interrupt request handler, so this wouldn't make a
lot of sense.
> * I there any need to provide non exclusive versions of the waiting
> functions? For real-time applications this would lead to an
> automatic selection of the highest priority task that's waiting
> for the lock. But on the other hand it leads to a lot of unnecessary
> scheduling and I doubt it's really worth it. But maybe there are
> other good reasons to wakeup all waiters.
Non-exclusive wakeups are common ... see the uses of normal wake_up vs
wake_up_exclusive.
> To really take any benefit from a preemptible kernel a lot of spin locks
> will have to be replaced by mutex locks. The combi-lock approach may
> convince more people who typically fear the higher scheduling pressure
> of sleeping locks to do so, if they can decide on each instance which
> approach (spin of sleep) will be taken.
We shouldn't engage in wholesale changing of spinlocks to semaphores
without a priority-inheritance mechanism. And _that_ is the bigger
issue ...
Robert Love
next prev parent reply other threads:[~2002-02-07 18:41 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-02-07 15:38 [RFC] New locking primitive for 2.5 Martin Wirth
2002-02-07 18:04 ` Daniel Phillips
2002-02-07 18:06 ` Richard Gooch
2002-02-07 18:22 ` Christoph Hellwig
2002-02-07 19:33 ` Daniel Phillips
2002-02-07 19:55 ` Mark Frazer
2002-02-08 12:24 ` Denis Vlasenko
2002-02-07 18:40 ` Robert Love [this message]
2002-02-07 19:25 ` Andrew Morton
2002-02-07 19:51 ` Dave Hansen
2002-02-07 20:06 ` Andrew Morton
2002-02-07 20:11 ` Robert Love
2002-02-07 21:27 ` Ingo Molnar
2002-02-07 19:59 ` Andrew Morton
2002-02-08 8:20 ` Nigel Gamble
2002-02-08 17:06 ` Larry McVoy
2002-02-07 19:58 ` yodaiken
2002-02-07 20:08 ` Robert Love
2002-02-07 20:15 ` yodaiken
2002-02-07 20:20 ` Robert Love
2002-02-07 20:36 ` yodaiken
2002-02-07 20:57 ` Daniel Phillips
2002-02-07 21:00 ` yodaiken
2002-02-07 21:10 ` Daniel Phillips
2002-02-07 20:49 ` Martin Wirth
2002-02-08 8:34 ` Martin Wirth
2002-02-08 18:28 ` Linus Torvalds
2002-02-08 18:12 ` Martin Wirth
2002-02-08 18:33 ` Alexander Viro
2002-02-08 20:02 ` Linus Torvalds
2002-02-08 18:54 ` Andrew Morton
2002-02-08 19:11 ` Linus Torvalds
2002-02-08 19:21 ` Alexander Viro
2002-02-08 19:36 ` Robert Love
2002-02-09 0:18 ` Alexander Viro
2002-02-08 21:23 ` Ingo Molnar
2002-02-08 21:36 ` Linus Torvalds
2002-02-08 20:04 ` Jeff Garzik
2002-02-08 21:16 ` Mike Fedyk
2002-02-09 0:09 ` Alan Cox
2002-02-09 0:05 ` Mike Fedyk
2002-02-08 21:40 ` Benjamin Herrenschmidt
2002-02-09 19:32 ` Linus Torvalds
2002-02-07 19:56 ` yodaiken
2002-02-07 22:09 ` Ingo Molnar
2002-02-07 20:31 ` yodaiken
2002-02-07 20:57 ` Andrew Morton
2002-02-07 21:02 ` yodaiken
2002-02-08 12:31 ` Christoph Hellwig
2002-02-08 16:51 ` Nigel Gamble
2002-02-08 18:41 ` Andrew Morton
2002-02-08 20:47 ` Ingo Molnar
2002-02-08 18:56 ` Alexander Viro
2002-02-08 20:59 ` Ingo Molnar
2002-02-08 19:10 ` Alexander Viro
2002-02-08 20:14 ` Anton Altaparmakov
2002-02-08 20:38 ` yodaiken
2002-02-08 21:55 ` Anton Altaparmakov
2002-02-08 12:47 ` Denis Vlasenko
2002-02-08 15:13 ` yodaiken
2002-02-08 19:22 ` Horst von Brand
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=1013107259.10430.29.camel@phantasy \
--to=rml@tech9.net \
--cc=Martin.Wirth@dlr.de \
--cc=akpm@zip.com.au \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=nigel@nrg.org \
--cc=torvalds@transmet.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.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox