Re: [PATCH V2 0/6][RFC] futex: FUTEX_LOCK with optional adaptivespinning

From: Avi Kivity
Date: Tue Apr 06 2010 - 12:21:30 EST


On 04/06/2010 07:14 PM, Thomas Gleixner wrote:

IMO the best solution is to spin in userspace while the lock holder is
running, fall into the kernel when it is scheduled out.
That's just not realistic as user space has no idea whether the lock
holder is running or not and when it's scheduled out without a syscall :)

The kernel could easily expose this information by writing into the thread's TLS area.

So:

- the kernel maintains a current_cpu field in a thread's tls
- lock() atomically writes a pointer to the current thread's current_cpu when acquiring
- the kernel writes an invalid value to current_cpu when switching out
- a contended lock() retrieves the current_cpu pointer, and spins as long as it is a valid cpu

--
error compiling committee.c: too many arguments to function

--
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/