Back to home page

LXR

 
 

    


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