• Waiman Long's avatar
    locking/rwsem: Make handoff writer optimistically spin on owner · 91d2a812
    Waiman Long authored
    When the handoff bit is set by a writer, no other tasks other than
    the setting writer itself is allowed to acquire the lock. If the
    to-be-handoff'ed writer goes to sleep, there will be a wakeup latency
    period where the lock is free, but no one can acquire it. That is less
    than ideal.
    
    To reduce that latency, the handoff writer will now optimistically spin
    on the owner if it happens to be a on-cpu writer. It will spin until
    it releases the lock and the to-be-handoff'ed writer can then acquire
    the lock immediately without any delay. Of course, if the owner is not
    a on-cpu writer, the to-be-handoff'ed writer will have to sleep anyway.
    
    The optimistic spinning code is also modified to not stop spinning
    when the handoff bit is set. This will prevent an occasional setting of
    handoff bit from causing a bunch of optimistic spinners from entering
    into the wait queue causing significant reduction in throughput.
    
    On a 1-socket 22-core 44-thread Skylake system, the AIM7 shared_memory
    workload was run with 7000 users. The throughput (jobs/min) of the
    following kernels were as follows:
    
     1) 5.2-rc6
        - 8,092,486
     2) 5.2-rc6 + tip's rwsem patches
        - 7,567,568
     3) 5.2-rc6 + tip's rwsem patches + this patch
        - 7,954,545
    
    Using perf-record(1), the %cpu time used by rwsem_down_write_slowpath(),
    rwsem_down_write_failed() and their callees for the 3 kernels were 1.70%,
    5.46% and 2.08% respectively.
    Signed-off-by: default avatarWaiman Long <longman@redhat.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: x86@kernel.org
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: huang ying <huang.ying.caritas@gmail.com>
    Cc: Tim Chen <tim.c.chen@linux.intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Link: https://lkml.kernel.org/r/20190625143913.24154-1-longman@redhat.com
    91d2a812
rwsem.c 46.7 KB