Percpu rw semaphores¶
Percpu rw semaphores is a new read-write semaphore design that isoptimized for locking for reading.
The problem with traditional read-write semaphores is that when multiplecores take the lock for reading, the cache line containing the semaphoreis bouncing between L1 caches of the cores, causing performancedegradation.
Locking for reading is very fast, it uses RCU and it avoids any atomicinstruction in the lock and unlock path. On the other hand, locking forwriting is very expensive, it callssynchronize_rcu() that can takehundreds of milliseconds.
The lock is declared with “structpercpu_rw_semaphore” type.The lock is initialized with percpu_init_rwsem, it returns 0 on successand -ENOMEM on allocation failure.The lock must be freed with percpu_free_rwsem to avoid memory leak.
The lock is locked for read with percpu_down_read, percpu_up_read andfor write with percpu_down_write, percpu_up_write.
The idea of using RCU for optimized rw-lock was introduced byEric Dumazet <eric.dumazet@gmail.com>.The code was written by Mikulas Patocka <mpatocka@redhat.com>