• Davidlohr Bueso's avatar
    mutex: Do not unnecessarily deal with waiters · ec83f425
    Davidlohr Bueso authored
    Upon entering the slowpath, we immediately attempt to acquire
    the lock by checking if it is already unlocked. If we are lucky
    enough that this is the case, then we don't need to deal with
    any waiter related logic.
    
    Furthermore any checks for an empty wait_list are unnecessary as
    we already know that count is non-negative and hence no one is
    waiting for the lock.
    
    Move the count check and xchg calls to be done before any
    waiters are setup - including waiter debugging. Upon failure to
    acquire the lock, the xchg sets the counter to 0, instead of -1
    as it was originally. This can be done here since we set it back
    to -1 right at the beginning of the loop so other waiters are
    woken up when the lock is released.
    
    When tested on a 8-socket (80 core) system against a vanilla
    3.10-rc1 kernel, this patch provides some small performance
    benefits (+2-6%). While it could be considered in the noise
    level, the average percentages were stable across multiple runs
    and no performance regressions were seen. Two big winners, for
    small amounts of users (10-100), were the short and compute
    workloads had a +19.36% and +%15.76% in jobs per minute.
    
    Also change some break statements to 'goto slowpath', which IMO
    makes a little more intuitive to read.
    Signed-off-by: default avatarDavidlohr Bueso <davidlohr.bueso@hp.com>
    Acked-by: default avatarRik van Riel <riel@redhat.com>
    Acked-by: default avatarMaarten Lankhorst <maarten.lankhorst@canonical.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1372450398.2106.1.camel@buesod1.americas.hpqcorp.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    ec83f425
mutex.c 24.6 KB