• Waiman Long's avatar
    locking/rwsem: Enable readers spinning on writer · cf69482d
    Waiman Long authored
    This patch enables readers to optimistically spin on a
    rwsem when it is owned by a writer instead of going to sleep
    directly.  The rwsem_can_spin_on_owner() function is extracted
    out of rwsem_optimistic_spin() and is called directly by
    rwsem_down_read_slowpath() and rwsem_down_write_slowpath().
    
    With a locking microbenchmark running on 5.1 based kernel, the total
    locking rates (in kops/s) on a 8-socket IvyBrige-EX system with equal
    numbers of readers and writers before and after the patch were as
    follows:
    
       # of Threads  Pre-patch    Post-patch
       ------------  ---------    ----------
            4          1,674        1,684
            8          1,062        1,074
           16            924          900
           32            300          458
           64            195          208
          128            164          168
          240            149          143
    
    The performance change wasn't significant in this case, but this change
    is required by a follow-on patch.
    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-13-longman@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    cf69482d
rwsem.c 35.4 KB