Date: Tue, 10 Apr 2007 22:41:04 +1200 From: Mark Kirkwood <markir@paradise.net.nz> To: Kris Kennaway <kris@obsecurity.org> Cc: performance@FreeBSD.org, current@FreeBSD.org, pgsql-hackers <pgsql-hackers@postgresql.org> Subject: Re: Anyone interested in improving postgresql scaling? Message-ID: <461B69C0.4060707@paradise.net.nz> In-Reply-To: <20070226002234.GA80974@xor.obsecurity.org> References: <20070226002234.GA80974@xor.obsecurity.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Kris Kennaway wrote: > If so, then your task is the following: > > Make SYSV semaphores less dumb about process wakeups. Currently > whenever the semaphore state changes, all processes sleeping on the > semaphore are woken, even if we only have released enough resources > for one waiting process to claim. i.e. there is a thundering herd > wakeup situation which destroys performance at high loads. Fixing > this will involve replacing the wakeup() calls with appropriate > amounts of wakeup_one(). I'm forwarding this to the pgsql-hackers list so that folks more qualified than I can comment, but as I understand the way postgres implements locking each process has it *own* semaphore it waits on - and who is waiting for what is controlled by an in (shared) memory hash of lock structs (access to these is controlled via platform Dependant spinlock code). So a given semaphore state change should only involve one process wakeup. Cheers Mark
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?461B69C0.4060707>