Documentation: RCU: Convert RCU basic concepts to reST
RCU basic concepts reST markup. Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org> Signed-off-by: Jiunn Chang <c0d1n61at3@gmail.com> Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
parent
7c116d22ad
commit
a9f0969cd7
|
@ -1,5 +1,7 @@
|
||||||
RCU Concepts
|
.. _rcu_doc:
|
||||||
|
|
||||||
|
RCU Concepts
|
||||||
|
============
|
||||||
|
|
||||||
The basic idea behind RCU (read-copy update) is to split destructive
|
The basic idea behind RCU (read-copy update) is to split destructive
|
||||||
operations into two parts, one that prevents anyone from seeing the data
|
operations into two parts, one that prevents anyone from seeing the data
|
||||||
|
@ -8,82 +10,83 @@ A "grace period" must elapse between the two parts, and this grace period
|
||||||
must be long enough that any readers accessing the item being deleted have
|
must be long enough that any readers accessing the item being deleted have
|
||||||
since dropped their references. For example, an RCU-protected deletion
|
since dropped their references. For example, an RCU-protected deletion
|
||||||
from a linked list would first remove the item from the list, wait for
|
from a linked list would first remove the item from the list, wait for
|
||||||
a grace period to elapse, then free the element. See the listRCU.txt
|
a grace period to elapse, then free the element. See the
|
||||||
file for more information on using RCU with linked lists.
|
Documentation/RCU/listRCU.rst file for more information on using RCU with
|
||||||
|
linked lists.
|
||||||
|
|
||||||
Frequently Asked Questions
|
Frequently Asked Questions
|
||||||
|
--------------------------
|
||||||
|
|
||||||
o Why would anyone want to use RCU?
|
- Why would anyone want to use RCU?
|
||||||
|
|
||||||
The advantage of RCU's two-part approach is that RCU readers need
|
The advantage of RCU's two-part approach is that RCU readers need
|
||||||
not acquire any locks, perform any atomic instructions, write to
|
not acquire any locks, perform any atomic instructions, write to
|
||||||
shared memory, or (on CPUs other than Alpha) execute any memory
|
shared memory, or (on CPUs other than Alpha) execute any memory
|
||||||
barriers. The fact that these operations are quite expensive
|
barriers. The fact that these operations are quite expensive
|
||||||
on modern CPUs is what gives RCU its performance advantages
|
on modern CPUs is what gives RCU its performance advantages
|
||||||
in read-mostly situations. The fact that RCU readers need not
|
in read-mostly situations. The fact that RCU readers need not
|
||||||
acquire locks can also greatly simplify deadlock-avoidance code.
|
acquire locks can also greatly simplify deadlock-avoidance code.
|
||||||
|
|
||||||
o How can the updater tell when a grace period has completed
|
- How can the updater tell when a grace period has completed
|
||||||
if the RCU readers give no indication when they are done?
|
if the RCU readers give no indication when they are done?
|
||||||
|
|
||||||
Just as with spinlocks, RCU readers are not permitted to
|
Just as with spinlocks, RCU readers are not permitted to
|
||||||
block, switch to user-mode execution, or enter the idle loop.
|
block, switch to user-mode execution, or enter the idle loop.
|
||||||
Therefore, as soon as a CPU is seen passing through any of these
|
Therefore, as soon as a CPU is seen passing through any of these
|
||||||
three states, we know that that CPU has exited any previous RCU
|
three states, we know that that CPU has exited any previous RCU
|
||||||
read-side critical sections. So, if we remove an item from a
|
read-side critical sections. So, if we remove an item from a
|
||||||
linked list, and then wait until all CPUs have switched context,
|
linked list, and then wait until all CPUs have switched context,
|
||||||
executed in user mode, or executed in the idle loop, we can
|
executed in user mode, or executed in the idle loop, we can
|
||||||
safely free up that item.
|
safely free up that item.
|
||||||
|
|
||||||
Preemptible variants of RCU (CONFIG_PREEMPT_RCU) get the
|
Preemptible variants of RCU (CONFIG_PREEMPT_RCU) get the
|
||||||
same effect, but require that the readers manipulate CPU-local
|
same effect, but require that the readers manipulate CPU-local
|
||||||
counters. These counters allow limited types of blocking within
|
counters. These counters allow limited types of blocking within
|
||||||
RCU read-side critical sections. SRCU also uses CPU-local
|
RCU read-side critical sections. SRCU also uses CPU-local
|
||||||
counters, and permits general blocking within RCU read-side
|
counters, and permits general blocking within RCU read-side
|
||||||
critical sections. These variants of RCU detect grace periods
|
critical sections. These variants of RCU detect grace periods
|
||||||
by sampling these counters.
|
by sampling these counters.
|
||||||
|
|
||||||
o If I am running on a uniprocessor kernel, which can only do one
|
- If I am running on a uniprocessor kernel, which can only do one
|
||||||
thing at a time, why should I wait for a grace period?
|
thing at a time, why should I wait for a grace period?
|
||||||
|
|
||||||
See the UP.txt file in this directory.
|
See the Documentation/RCU/UP.rst file for more information.
|
||||||
|
|
||||||
o How can I see where RCU is currently used in the Linux kernel?
|
- How can I see where RCU is currently used in the Linux kernel?
|
||||||
|
|
||||||
Search for "rcu_read_lock", "rcu_read_unlock", "call_rcu",
|
Search for "rcu_read_lock", "rcu_read_unlock", "call_rcu",
|
||||||
"rcu_read_lock_bh", "rcu_read_unlock_bh", "srcu_read_lock",
|
"rcu_read_lock_bh", "rcu_read_unlock_bh", "srcu_read_lock",
|
||||||
"srcu_read_unlock", "synchronize_rcu", "synchronize_net",
|
"srcu_read_unlock", "synchronize_rcu", "synchronize_net",
|
||||||
"synchronize_srcu", and the other RCU primitives. Or grab one
|
"synchronize_srcu", and the other RCU primitives. Or grab one
|
||||||
of the cscope databases from:
|
of the cscope databases from:
|
||||||
|
|
||||||
http://www.rdrop.com/users/paulmck/RCU/linuxusage/rculocktab.html
|
(http://www.rdrop.com/users/paulmck/RCU/linuxusage/rculocktab.html).
|
||||||
|
|
||||||
o What guidelines should I follow when writing code that uses RCU?
|
- What guidelines should I follow when writing code that uses RCU?
|
||||||
|
|
||||||
See the checklist.txt file in this directory.
|
See the checklist.txt file in this directory.
|
||||||
|
|
||||||
o Why the name "RCU"?
|
- Why the name "RCU"?
|
||||||
|
|
||||||
"RCU" stands for "read-copy update". The file listRCU.txt has
|
"RCU" stands for "read-copy update". The file Documentation/RCU/listRCU.rst
|
||||||
more information on where this name came from, search for
|
has more information on where this name came from, search for
|
||||||
"read-copy update" to find it.
|
"read-copy update" to find it.
|
||||||
|
|
||||||
o I hear that RCU is patented? What is with that?
|
- I hear that RCU is patented? What is with that?
|
||||||
|
|
||||||
Yes, it is. There are several known patents related to RCU,
|
Yes, it is. There are several known patents related to RCU,
|
||||||
search for the string "Patent" in RTFP.txt to find them.
|
search for the string "Patent" in RTFP.txt to find them.
|
||||||
Of these, one was allowed to lapse by the assignee, and the
|
Of these, one was allowed to lapse by the assignee, and the
|
||||||
others have been contributed to the Linux kernel under GPL.
|
others have been contributed to the Linux kernel under GPL.
|
||||||
There are now also LGPL implementations of user-level RCU
|
There are now also LGPL implementations of user-level RCU
|
||||||
available (http://liburcu.org/).
|
available (http://liburcu.org/).
|
||||||
|
|
||||||
o I hear that RCU needs work in order to support realtime kernels?
|
- I hear that RCU needs work in order to support realtime kernels?
|
||||||
|
|
||||||
Realtime-friendly RCU can be enabled via the CONFIG_PREEMPT_RCU
|
Realtime-friendly RCU can be enabled via the CONFIG_PREEMPT_RCU
|
||||||
kernel configuration parameter.
|
kernel configuration parameter.
|
||||||
|
|
||||||
o Where can I find more information on RCU?
|
- Where can I find more information on RCU?
|
||||||
|
|
||||||
See the RTFP.txt file in this directory.
|
See the RTFP.txt file in this directory.
|
||||||
Or point your browser at http://www.rdrop.com/users/paulmck/RCU/.
|
Or point your browser at (http://www.rdrop.com/users/paulmck/RCU/).
|
||||||
|
|
Loading…
Reference in New Issue