• Jason Low's avatar
    locking/mutex: In mutex_spin_on_owner(), return true when owner changes · 07d2413a
    Jason Low authored
    In the mutex_spin_on_owner(), we return true only if lock->owner == NULL.
    This was beneficial in situations where there were multiple threads
    simultaneously spinning for the mutex. If another thread got the lock
    while other spinner(s) were also doing mutex_spin_on_owner(), then the
    other spinners would stop spinning. This workaround helped reduce the
    chance that many spinners were simultaneously spinning for the mutex
    which can help reduce contention in highly contended cases.
    
    However, recent changes were made to the optimistic spinning code such
    that instead of having all spinners simultaneously spin for the mutex,
    we queue the spinners with an MCS lock such that only one thread spins
    for the mutex at a time. Furthermore, the OSQ optimizations ensure that
    spinners in the queue will stop waiting if it needs to reschedule.
    
    Now, we don't have to worry about multiple threads spinning on owner
    at the same time, and if lock->owner is not NULL at this point, it likely
    means another thread happens to obtain the lock in the fastpath. In this
    case, it would make sense for the spinner to continue spinning as long
    as the spinner doesn't need to schedule and the mutex owner is running.
    
    This patch changes this so that mutex_spin_on_owner() returns true when
    the lock owner changes, which means a thread will only stop spinning
    if it either needs to reschedule or if the lock owner is not running.
    
    We saw up to a 5% performance improvement in the fserver workload with
    this patch.
    Signed-off-by: default avatarJason Low <jason.low2@hp.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarDavidlohr Bueso <dave@stgolabs.net>
    Cc: Aswin Chandramouleeswaran <aswin@hp.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Cc: chegu_vinod@hp.com
    Cc: tglx@linutronix.de
    Link: http://lkml.kernel.org/r/1422914367-5574-2-git-send-email-jason.low2@hp.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    07d2413a
mutex.c 25.4 KB