From: Tim Wright <timw@splhi.com>
To: Matthew Kirkwood <matthew@hairy.beasts.org>
Cc: Jonathan Lahr <lahr@sequent.com>,
Anton Blanchard <anton@linuxcare.com.au>,
linux-kernel@vger.kernel.org
Subject: Re: kernel lock contention and scalability
Date: Tue, 6 Mar 2001 16:28:18 -0800 [thread overview]
Message-ID: <20010306162818.A1095@kochanski.internal.splhi.com> (raw)
In-Reply-To: <20010306144552.G6451@w-lahr.des.sequent.com> <Pine.LNX.4.10.10103062318190.26554-100000@sphinx.mythic-beasts.com>
In-Reply-To: <Pine.LNX.4.10.10103062318190.26554-100000@sphinx.mythic-beasts.com>; from matthew@hairy.beasts.org on Tue, Mar 06, 2001 at 11:39:17PM +0000
On Tue, Mar 06, 2001 at 11:39:17PM +0000, Matthew Kirkwood wrote:
> On Tue, 6 Mar 2001, Jonathan Lahr wrote:
>
> [ sorry to reply over another reply, but I don't have
> the original of this ]
>
> > > Tridge and I tried out the postgresql benchmark you used here and this
> > > contention is due to a bug in postgres. From a quick strace, we found
> > > the threads do a load of select(0, NULL, NULL, NULL, {0,0}).
>
> I can shed some light on this (though I'm far from a PG hacker).
>
> Postgres can use either of two locking methods -- SysV semaphores
> (which it tries to avoid, asusming that they'll be too heavy) or
> userspace spinlocks (via inline assembler on platforms which support
> it).
>
> In the slow path of a spinlock_acquire they busy wait for a few
> cycles, and then call schedule with a zero timeout assuming that
> it'll basically do the same as a sched_yield() but more portably.
>
Ugh !
I had a nasty feeling that might be what they were up to. The reason for
the "ugh" is as follows. If you're a UP system, it never makes sense to
spin in userland, since you'll just burn up a timeslice and prevent the
lock holder from running. I haven't looked, but assume that their code only
uses spinlocks on SMP. If you're an SMP system, then you shouldn't be
using a spinlock unless the critical section is "short", in which case the
waiters should simply spin in userland rather than making system calls which
is simply overhead. If the argument is that the "spinners" take too much
useful time away from other processes, then it sounds like the contention is
too high, or that the critical section is sufficiently long that semaphores
would be a better choice.
Actually, what's really needed here is an efficient form of dynamically
marking a process as non-preemptible so that when acquiring a spinlock the
process can ensure that it exits the critical section as fast as possible,
when it would relinquish its non-preemptible privilege.
Another synchronization method popular with database peeps is "post/wait"
for which SGI have a patch available for Linux. I understand that this is
relatively "light weight" and might be a better choice for PG.
Tim
--
Tim Wright - timw@splhi.com or timw@aracnet.com or twright@us.ibm.com
IBM Linux Technology Center, Beaverton, Oregon
Interested in Linux scalability ? Look at http://lse.sourceforge.net/
"Nobody ever said I was charming, they said "Rimmer, you're a git!"" RD VI
next prev parent reply other threads:[~2001-03-07 0:29 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-15 18:46 Jonathan Lahr
2001-02-25 9:52 ` Manfred Spraul
2001-03-05 18:41 ` Jonathan Lahr
2001-03-05 0:38 ` Anton Blanchard
2001-03-06 22:45 ` Jonathan Lahr
2001-03-06 23:39 ` Matthew Kirkwood
2001-03-07 0:28 ` Tim Wright [this message]
2001-03-07 3:12 ` Jeff Dike
2001-03-07 22:13 ` Tim Wright
2001-03-08 23:26 ` Jeff Dike
2001-03-11 6:50 ` Anton Blanchard
2001-03-11 6:26 ` Anton Blanchard
[not found] <98454d$19p9h$1@fido.engr.sgi.com>
2001-03-07 2:55 ` Rajagopal Ananthanarayanan
2001-03-07 5:48 ` Jeff Dike
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=20010306162818.A1095@kochanski.internal.splhi.com \
--to=timw@splhi.com \
--cc=anton@linuxcare.com.au \
--cc=lahr@sequent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew@hairy.beasts.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
all inboxes | Powered by JetHome®