• Davidlohr Bueso's avatar
    futex: Implement lockless wakeups · 1d0dcb3a
    Davidlohr Bueso authored
    Given the overall futex architecture, any chance of reducing
    hb->lock contention is welcome. In this particular case, using
    wake-queues to enable lockless wakeups addresses very much real
    world performance concerns, even cases of soft-lockups in cases
    of large amounts of blocked tasks (which is not hard to find in
    large boxes, using but just a handful of futex).
    
    At the lowest level, this patch can reduce latency of a single thread
    attempting to acquire hb->lock in highly contended scenarios by a
    up to 2x. At lower counts of nr_wake there are no regressions,
    confirming, of course, that the wake_q handling overhead is practically
    non existent. For instance, while a fair amount of variation,
    the extended pef-bench wakeup benchmark shows for a 20 core machine
    the following avg per-thread time to wakeup its share of tasks:
    
    	nr_thr	ms-before	ms-after
    	16 	0.0590		0.0215
    	32 	0.0396		0.0220
    	48 	0.0417		0.0182
    	64 	0.0536		0.0236
    	80 	0.0414		0.0097
    	96 	0.0672		0.0152
    
    Naturally, this can cause spurious wakeups. However there is no core code
    that cannot handle them afaict, and furthermore tglx does have the point
    that other events can already trigger them anyway.
    Signed-off-by: default avatarDavidlohr Bueso <dbueso@suse.de>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Chris Mason <clm@fb.com>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: George Spelvin <linux@horizon.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Manfred Spraul <manfred@colorfullife.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Link: http://lkml.kernel.org/r/1430494072-30283-3-git-send-email-dave@stgolabs.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    1d0dcb3a
futex.c 81.8 KB