The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/Documentation/percpu-rw-semaphore.txt

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 Percpu rw semaphores
    2 --------------------
    3 
    4 Percpu rw semaphores is a new read-write semaphore design that is
    5 optimized for locking for reading.
    6 
    7 The problem with traditional read-write semaphores is that when multiple
    8 cores take the lock for reading, the cache line containing the semaphore
    9 is bouncing between L1 caches of the cores, causing performance
   10 degradation.
   11 
   12 Locking for reading is very fast, it uses RCU and it avoids any atomic
   13 instruction in the lock and unlock path. On the other hand, locking for
   14 writing is very expensive, it calls synchronize_rcu() that can take
   15 hundreds of milliseconds.
   16 
   17 The lock is declared with "struct percpu_rw_semaphore" type.
   18 The lock is initialized percpu_init_rwsem, it returns 0 on success and
   19 -ENOMEM on allocation failure.
   20 The lock must be freed with percpu_free_rwsem to avoid memory leak.
   21 
   22 The lock is locked for read with percpu_down_read, percpu_up_read and
   23 for write with percpu_down_write, percpu_up_write.
   24 
   25 The idea of using RCU for optimized rw-lock was introduced by
   26 Eric Dumazet <eric.dumazet@gmail.com>.
   27 The code was written by Mikulas Patocka <mpatocka@redhat.com>

Cache object: fb689a67d5489f1009a41e2c424301ee


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.