123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- RCU Concepts
- The basic idea behind RCU (read-copy update) is to split destructive
- operations into two parts, one that prevents anyone from seeing the data
- item being destroyed, and one that actually carries out the destruction.
- 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
- since dropped their references. For example, an RCU-protected deletion
- 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
- file for more information on using RCU with linked lists.
- Frequently Asked Questions
- o Why would anyone want to use RCU?
- The advantage of RCU's two-part approach is that RCU readers need
- not acquire any locks, perform any atomic instructions, write to
- shared memory, or (on CPUs other than Alpha) execute any memory
- barriers. The fact that these operations are quite expensive
- on modern CPUs is what gives RCU its performance advantages
- in read-mostly situations. The fact that RCU readers need not
- acquire locks can also greatly simplify deadlock-avoidance code.
- o How can the updater tell when a grace period has completed
- if the RCU readers give no indication when they are done?
- Just as with spinlocks, RCU readers are not permitted to
- block, switch to user-mode execution, or enter the idle loop.
- 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
- read-side critical sections. So, if we remove an item from a
- linked list, and then wait until all CPUs have switched context,
- executed in user mode, or executed in the idle loop, we can
- safely free up that item.
- o 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?
- See the UP.txt file in this directory.
- o How can I see where RCU is currently used in the Linux kernel?
- Search for "rcu_read_lock", "rcu_read_unlock", "call_rcu",
- "rcu_read_lock_bh", "rcu_read_unlock_bh", "call_rcu_bh",
- "srcu_read_lock", "srcu_read_unlock", "synchronize_rcu",
- "synchronize_net", and "synchronize_srcu".
- o What guidelines should I follow when writing code that uses RCU?
- See the checklist.txt file in this directory.
- o Why the name "RCU"?
- "RCU" stands for "read-copy update". The file listRCU.txt has
- more information on where this name came from, search for
- "read-copy update" to find it.
- o I hear that RCU is patented? What is with that?
- Yes, it is. There are several known patents related to RCU,
- search for the string "Patent" in RTFP.txt to find them.
- Of these, one was allowed to lapse by the assignee, and the
- others have been contributed to the Linux kernel under GPL.
- o I hear that RCU needs work in order to support realtime kernels?
- Yes, work in progress.
- o Where can I find more information on RCU?
- See the RTFP.txt file in this directory.
- Or point your browser at http://www.rdrop.com/users/paulmck/RCU/.
- o What are all these files in this directory?
- NMI-RCU.txt
- Describes how to use RCU to implement dynamic
- NMI handlers, which can be revectored on the fly,
- without rebooting.
- RTFP.txt
- List of RCU-related publications and web sites.
- UP.txt
- Discussion of RCU usage in UP kernels.
- arrayRCU.txt
- Describes how to use RCU to protect arrays, with
- resizeable arrays whose elements reference other
- data structures being of the most interest.
- checklist.txt
- Lists things to check for when inspecting code that
- uses RCU.
- listRCU.txt
- Describes how to use RCU to protect linked lists.
- This is the simplest and most common use of RCU
- in the Linux kernel.
- rcu.txt
- You are reading it!
- rcuref.txt
- Describes how to combine use of reference counts
- with RCU.
- whatisRCU.txt
- Overview of how the RCU implementation works. Along
- the way, presents a conceptual view of RCU.
|