|  | 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. |