Re: [RFC PATCH 1/6] kernel: implement queue spinlock API

From: John Stultz
Date: Thu Feb 07 2013 - 18:14:14 EST


On 02/07/2013 02:34 PM, Paul E. McKenney wrote:
On Tue, Jan 22, 2013 at 03:13:30PM -0800, Michel Lespinasse wrote:
Introduce queue spinlocks, to be used in situations where it is desired
to have good throughput even under the occasional high-contention situation.

This initial implementation is based on the classic MCS spinlock,
because I think this represents the nicest API we can hope for in a
fast queue spinlock algorithm. The MCS spinlock has known limitations
in that it performs very well under high contention, but is not as
good as the ticket spinlock under low contention. I will address these
limitations in a later patch, which will propose an alternative,
higher performance implementation using (mostly) the same API.

Sample use case acquiring mystruct->lock:

struct q_spinlock_node node;

q_spin_lock(&mystruct->lock, &node);
...
q_spin_unlock(&mystruct->lock, &node);
It is possible to keep the normal API for MCS locks by having the lock
holder remember the parameter in the lock word itself. While spinning,
the node is on the stack, is not needed once the lock is acquired.
The pointer to the next node in the queue -is- needed, but this can be
stored in the lock word.

I believe that John Stultz worked on something like this some years back,
so added him to CC.
Oh yea, its been quite awhile.

Here are some of the discussion threads google remembers for me:

http://marc.info/?l=lse-tech&m=101227079817027&w=2

http://marc.info/?l=lse-tech&m=101380783015065&w=2 (missing the patch)
http://marc.info/?l=lse-tech&m=101380783615084&w=2 (patch for above)


thanks
-john


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/