On Wed, Apr 14, 2010 at 06:16:53PM +0200, Manfred Spraul wrote:Hmm. Thus you have:
On 04/13/2010 08:19 PM, Chris Mason wrote:I haven't tried yet, but hopefully it won't be a problem. A later patch
On Wed, Apr 14, 2010 at 04:09:45AM +1000, Nick Piggin wrote:How do you want to determine the sequence number?
On Tue, Apr 13, 2010 at 01:39:41PM -0400, Chris Mason wrote:I don't see anything in the docs about the FIFO order. I could add an
The other thing I don't know if your patch gets right is requeueing on
of the operations. When you requeue from one list to another, then you
seem to lose ordering with other pending operations, so that would
seem to break the API as well (can't remember if the API strictly
mandates FIFO, but anyway it can open up starvation cases).
extra sort on sequence number pretty easily, but is the starvation case
really that bad?
Is atomic_inc_return() on a per-semaphore array counter sufficiently fast?
does atomics on the reference count and it doesn't show up in the
profiles.
This is similar to Oracle (and the sembench program). Each process hasWhat is the oracle workload, which multi-sembuf operations does it use?I was looking at doing a sequence number to be able to sort these, butYeah, that's why my patches include code to handle userland sending
it ended up getting over complex (and SAP was only using simple ops so
it didn't seem to need much better).
We want to be careful not to change semantics at all. And it gets
tricky quickly :( What about Zach's simpler wakeup API?
duplicate semids. Zach's simpler API is cooking too, but if I can get
this done without insane complexity it helps with more than just the
post/wait oracle workload.
How many semaphores are in one array?
When the last optimizations were written, I've searched a bit:
- postgres uses per-process semaphores, with small semaphore arrays.
[process sleeps on it's own semaphore and is woken up by someone
else when it can make progress]
a semaphore and when it is waiting for a commit it goes to sleep on it.
They are woken up in bulk with semtimedop calls from a single process.
But oracle also uses semaphores for locking in a traditional sense.Ok. Then simple tricks won't help.
Putting the waiters into a per-semaphore list is really only part of the
speedup. The real boost comes from the patch to break up the locks into
a per semaphore lock.