From: Peter Zijlstra <peterz@infradead.org>
To: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
Christoph Lameter <clameter@sgi.com>,
Petr Tesarik <ptesarik@suse.cz>, Ingo Molnar <mingo@elte.hu>,
linux-kernel@vger.kernel.org,
Nick Piggin <nickpiggin@yahoo.com.au>
Subject: Re: Spinlocks: Factor our GENERIC_LOCKBREAK in order to avoid spin with irqs disable
Date: Thu, 26 Jun 2008 08:51:00 +0200 [thread overview]
Message-ID: <1214463060.3035.12.camel@twins.programming.kicks-ass.net> (raw)
In-Reply-To: <48630420.1090102@goop.org>
On Wed, 2008-06-25 at 19:51 -0700, Jeremy Fitzhardinge wrote:
> Peter Zijlstra wrote:
> > On Mon, 2008-06-23 at 13:45 -0700, Christoph Lameter wrote:
> >
> >> On Mon, 23 Jun 2008, Peter Zijlstra wrote:
> >>
> >>
> >>>> It is good that the locks are build with _trylock and _can_lock because
> >>>> then we can reenable interrupts while spinning.
> >>>>
> >>> Well, good and bad, the turn side is that fairness schemes like ticket
> >>> locks are utterly defeated.
> >>>
> >> True. But maybe we can make these fairness schemes more generic so that
> >> they can go into core code?
> >>
> >
> > The trouble with ticket locks is that they can't handle waiters going
> > away - or in this case getting preempted by irq handlers. The one who
> > took the ticket must pass it on, so if you're preempted it just sits
> > there being idle, until you get back to deal with the lock.
> >
> > But yeah, perhaps another fairness scheme might work in the generic
> > code..
>
> Thomas Friebel presented results at the Xen Summit this week showing
> that ticket locks are an absolute disaster for scalability in a virtual
> environment, for a similar reason. It's a bit irritating if the lock
> holder vcpu gets preempted by the hypervisor, but its much worse when
> they release the lock: unless the vcpu scheduler gives a cpu to the vcpu
> with the next ticket, it can waste up to N timeslices spinning.
>
> I'm experimenting with adding pvops hook to allow you to put in new
> spinlock implementations on the fly. If nothing else, it will be useful
> for experimenting with different algorithms. But it definitely seems
> like the old unfair lock algorithm played much better with a virtual
> environment, because the next cpu to get the lock is the next one the
> scheduler gives time, rather than dictating an order - and the scheduler
> should mitigate the unfairness that ticket locks were designed to solve.
Paravirt spinlocks sounds like a good idea anyway, that way you can make
them scheduling locks (from the host's POV) when the lock owner (vcpu)
isn't running.
Burning time spinning on !running vcpus seems like a waste to me.
As for the scheduler solving the unfairness that ticket locks solve,
that cannot be done. The ticket lock solves intra-cpu fairness for a
resource other than time. The cpu scheduler only cares about fairness in
time, and its intra-cpu fairness is on a larger scale than most spinlock
hold times - so even if time and the locked resource would overlap it
wouldn't work.
The simple scenario is running N tasks on N cpus that all pound the same
lock, cache issues will make it unlikely the lock would migrate away
from whatever cpu its on, essentially starving all the other N-1 cpus.
Ticket locks solve that exact issue, all the scheduler can do is ensure
they're all spending an equal amount of time on the cpu, whether that is
spinning for lock acquisition or getting actual work done is beyond its
scope.
next prev parent reply other threads:[~2008-06-26 6:52 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-06 19:26 Spinlocks waiting with interrupts disabled / preempt disabled Christoph Lameter
2008-05-07 7:30 ` Ingo Molnar
2008-05-07 17:04 ` Christoph Lameter
2008-05-07 17:24 ` Christoph Lameter
2008-05-07 18:49 ` Spinlocks: Factor our GENERIC_LOCKBREAK in order to avoid spin with irqs disable Christoph Lameter
2008-05-09 10:26 ` Ingo Molnar
2008-05-09 16:28 ` Christoph Lameter
2008-06-23 17:19 ` Petr Tesarik
2008-06-23 17:54 ` Peter Zijlstra
2008-06-23 18:20 ` Christoph Lameter
2008-06-23 20:39 ` Peter Zijlstra
2008-06-23 20:45 ` Christoph Lameter
2008-06-23 20:58 ` Peter Zijlstra
2008-06-26 2:51 ` Jeremy Fitzhardinge
2008-06-26 6:51 ` Peter Zijlstra [this message]
2008-06-26 15:49 ` Jeremy Fitzhardinge
2008-06-26 9:17 ` Petr Tesarik
2008-06-26 17:02 ` Christoph Lameter
2008-06-26 17:48 ` Peter Zijlstra
2008-07-07 11:50 ` Nick Piggin
2008-07-07 11:52 ` Nick Piggin
2008-07-07 15:56 ` Jeremy Fitzhardinge
2008-07-08 2:08 ` Nick Piggin
2008-07-07 15:53 ` Jeremy Fitzhardinge
2008-07-07 19:46 ` Rik van Riel
2008-07-07 20:14 ` Jeremy Fitzhardinge
2008-07-08 2:07 ` Nick Piggin
2008-07-08 5:57 ` Jeremy Fitzhardinge
2008-07-08 8:41 ` Nick Piggin
2008-07-08 15:58 ` Jeremy Fitzhardinge
2008-05-09 16:35 ` Spinlocks waiting with interrupts disabled / preempt disabled Olaf Weber
2008-05-09 17:56 ` Peter Zijlstra
2008-05-09 18:00 ` Christoph Lameter
2008-05-09 18:06 ` Peter Zijlstra
2008-05-09 20:01 ` Olaf Weber
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=1214463060.3035.12.camel@twins.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=a.p.zijlstra@chello.nl \
--cc=clameter@sgi.com \
--cc=jeremy@goop.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=nickpiggin@yahoo.com.au \
--cc=ptesarik@suse.cz \
/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
Powered by JetHome