• T
    locking/rwsem: Add rtmutex based R/W semaphore implementation · 42254105
    Thomas Gleixner 提交于
    The RT specific R/W semaphore implementation used to restrict the number of
    readers to one, because a writer cannot block on multiple readers and
    inherit its priority or budget.
    
    The single reader restricting was painful in various ways:
    
     - Performance bottleneck for multi-threaded applications in the page fault
       path (mmap sem)
    
     - Progress blocker for drivers which are carefully crafted to avoid the
       potential reader/writer deadlock in mainline.
    
    The analysis of the writer code paths shows that properly written RT tasks
    should not take them. Syscalls like mmap(), file access which take mmap sem
    write locked have unbound latencies, which are completely unrelated to mmap
    sem. Other R/W sem users like graphics drivers are not suitable for RT tasks
    either.
    
    So there is little risk to hurt RT tasks when the RT rwsem implementation is
    done in the following way:
    
     - Allow concurrent readers
    
     - Make writers block until the last reader left the critical section. This
       blocking is not subject to priority/budget inheritance.
    
     - Readers blocked on a writer inherit their priority/budget in the normal
       way.
    
    There is a drawback with this scheme: R/W semaphores become writer unfair
    though the applications which have triggered writer starvation (mostly on
    mmap_sem) in the past are not really the typical workloads running on a RT
    system. So while it's unlikely to hit writer starvation, it's possible. If
    there are unexpected workloads on RT systems triggering it, the problem
    has to be revisited.
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: NIngo Molnar <mingo@kernel.org>
    Link: https://lore.kernel.org/r/20210815211303.016885947@linutronix.de
    42254105
rwsem.h 7.5 KB