Re: [RFC PATCH 2/5] futex: add optimistic spinning to FUTEX_SPIN_LOCK

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 07/21/2014 04:17 PM, Jason Low wrote:
On Mon, 2014-07-21 at 11:24 -0400, Waiman Long wrote:
This patch adds code to do optimistic spinning for the FUTEX_SPIN_LOCK
primitive on the futex value when the lock owner is running. It is
the same optimistic spinning technique that is done in the mutex and
rw semaphore code to improve their performance especially on large
systems with large number of CPUs. When the lock owner is not running,
the spinning tasks will go to sleep.
Perhaps we could introduce a "CONFIG_FUTEX_SPIN_ON_OWNER" that depends
on SMP and ARCH_SUPPORTS_ATOMIC_RMW?

The new futex opcode depends on the ability to do cmpxchg() in the futex context. The code will be disabled if futex cmpxchg is not supported. I guess that should be enough to limit it to just a handful of architectures.

There is 2 major advantages of doing optimistic spinning here:
  1) It eliminates the context switching latency and overhead (at
     least a few us) associated with sleeping and wakeup.
  2) It eliminates most of the need to call futex(2) with
     FUTEX_SPIN_UNLOCK as spinning is done without the need to set
     the FUTEX_WAITERS bit.
  struct futex_q_head {
  	struct list_head	      hnode;
  	struct list_head	      waitq;
  	union futex_key		      key;
+	struct optimistic_spin_queue *osq;
And this would have to be updated to

+	struct optimistic_spin_queue osq;

given the recent changes to the osq lock.

Yes, I will make the change in the next iteration of the patch.

-Longman

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




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux