Back to home page

OSCL-LXR

 
 

    


0001 ====================
0002 Percpu rw semaphores
0003 ====================
0004 
0005 Percpu rw semaphores is a new read-write semaphore design that is
0006 optimized for locking for reading.
0007 
0008 The problem with traditional read-write semaphores is that when multiple
0009 cores take the lock for reading, the cache line containing the semaphore
0010 is bouncing between L1 caches of the cores, causing performance
0011 degradation.
0012 
0013 Locking for reading is very fast, it uses RCU and it avoids any atomic
0014 instruction in the lock and unlock path. On the other hand, locking for
0015 writing is very expensive, it calls synchronize_rcu() that can take
0016 hundreds of milliseconds.
0017 
0018 The lock is declared with "struct percpu_rw_semaphore" type.
0019 The lock is initialized percpu_init_rwsem, it returns 0 on success and
0020 -ENOMEM on allocation failure.
0021 The lock must be freed with percpu_free_rwsem to avoid memory leak.
0022 
0023 The lock is locked for read with percpu_down_read, percpu_up_read and
0024 for write with percpu_down_write, percpu_up_write.
0025 
0026 The idea of using RCU for optimized rw-lock was introduced by
0027 Eric Dumazet <eric.dumazet@gmail.com>.
0028 The code was written by Mikulas Patocka <mpatocka@redhat.com>