• Waiman Long's avatar
    locking/rwsem: More optimal RT task handling of null owner · 990fa738
    Waiman Long authored
    An RT task can do optimistic spinning only if the lock holder is
    actually running. If the state of the lock holder isn't known, there
    is a possibility that high priority of the RT task may block forward
    progress of the lock holder if it happens to reside on the same CPU.
    This will lead to deadlock. So we have to make sure that an RT task
    will not spin on a reader-owned rwsem.
    
    When the owner is temporarily set to NULL, there are two cases
    where we may want to continue spinning:
    
     1) The lock owner is in the process of releasing the lock, sem->owner
        is cleared but the lock has not been released yet.
    
     2) The lock was free and owner cleared, but another task just comes
        in and acquire the lock before we try to get it. The new owner may
        be a spinnable writer.
    
    So an RT task is now made to retry one more time to see if it can
    acquire the lock or continue spinning on the new owning writer.
    
    When testing on a 8-socket IvyBridge-EX system, the one additional retry
    seems to improve locking performance of RT write locking threads under
    heavy contentions. The table below shows the locking rates (in kops/s)
    with various write locking threads before and after the patch.
    
        Locking threads     Pre-patch     Post-patch
        ---------------     ---------     -----------
                4             2,753          2,608
                8             2,529          2,520
               16             1,727          1,918
               32             1,263          1,956
               64               889          1,343
    Signed-off-by: default avatarWaiman Long <longman@redhat.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: huang ying <huang.ying.caritas@gmail.com>
    Link: https://lkml.kernel.org/r/20190520205918.22251-10-longman@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    990fa738
rwsem.c 33 KB