Blame view

Documentation/percpu-rw-semaphore.txt 1.12 KB
c437c3a40   Mauro Carvalho Chehab   percpu-rw-semapho...
1
  ====================
62ac665ff   Mikulas Patocka   blockdev: turn a ...
2
  Percpu rw semaphores
c437c3a40   Mauro Carvalho Chehab   percpu-rw-semapho...
3
  ====================
62ac665ff   Mikulas Patocka   blockdev: turn a ...
4
5
6
7
8
9
10
11
  
  Percpu rw semaphores is a new read-write semaphore design that is
  optimized for locking for reading.
  
  The problem with traditional read-write semaphores is that when multiple
  cores take the lock for reading, the cache line containing the semaphore
  is bouncing between L1 caches of the cores, causing performance
  degradation.
e6b5c0822   Mikulas Patocka   percpu-rw-semapho...
12
  Locking for reading is very fast, it uses RCU and it avoids any atomic
62ac665ff   Mikulas Patocka   blockdev: turn a ...
13
14
  instruction in the lock and unlock path. On the other hand, locking for
  writing is very expensive, it calls synchronize_rcu() that can take
e6b5c0822   Mikulas Patocka   percpu-rw-semapho...
15
  hundreds of milliseconds.
62ac665ff   Mikulas Patocka   blockdev: turn a ...
16
17
18
19
20
21
22
23
24
25
26
27
  
  The lock is declared with "struct percpu_rw_semaphore" type.
  The lock is initialized percpu_init_rwsem, it returns 0 on success and
  -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 and
  for write with percpu_down_write, percpu_up_write.
  
  The idea of using RCU for optimized rw-lock was introduced by
  Eric Dumazet <eric.dumazet@gmail.com>.
  The code was written by Mikulas Patocka <mpatocka@redhat.com>