1 .. _whatisrcu_doc: 1 .. _whatisrcu_doc: 2 2 3 What is RCU? -- "Read, Copy, Update" 3 What is RCU? -- "Read, Copy, Update" 4 ====================================== 4 ====================================== 5 5 6 Please note that the "What is RCU?" LWN series 6 Please note that the "What is RCU?" LWN series is an excellent place 7 to start learning about RCU: 7 to start learning about RCU: 8 8 9 | 1. What is RCU, Fundamentally? https://l 9 | 1. What is RCU, Fundamentally? https://lwn.net/Articles/262464/ 10 | 2. What is RCU? Part 2: Usage https://l 10 | 2. What is RCU? Part 2: Usage https://lwn.net/Articles/263130/ 11 | 3. RCU part 3: the RCU API https://l 11 | 3. RCU part 3: the RCU API https://lwn.net/Articles/264090/ 12 | 4. The RCU API, 2010 Edition https://l 12 | 4. The RCU API, 2010 Edition https://lwn.net/Articles/418853/ 13 | 2010 Big API Table https://l 13 | 2010 Big API Table https://lwn.net/Articles/419086/ 14 | 5. The RCU API, 2014 Edition https://l 14 | 5. The RCU API, 2014 Edition https://lwn.net/Articles/609904/ 15 | 2014 Big API Table https://l 15 | 2014 Big API Table https://lwn.net/Articles/609973/ 16 | 6. The RCU API, 2019 Edition https://l 16 | 6. The RCU API, 2019 Edition https://lwn.net/Articles/777036/ 17 | 2019 Big API Table https://l 17 | 2019 Big API Table https://lwn.net/Articles/777165/ 18 18 19 For those preferring video: << 20 << 21 | 1. Unraveling RCU Mysteries: Fundamentals << 22 | 2. Unraveling RCU Mysteries: Additional U << 23 << 24 19 25 What is RCU? 20 What is RCU? 26 21 27 RCU is a synchronization mechanism that was ad 22 RCU is a synchronization mechanism that was added to the Linux kernel 28 during the 2.5 development effort that is opti 23 during the 2.5 development effort that is optimized for read-mostly 29 situations. Although RCU is actually quite si !! 24 situations. Although RCU is actually quite simple once you understand it, 30 of it requires you to think differently about !! 25 getting there can sometimes be a challenge. Part of the problem is that 31 of the problem is the mistaken assumption that !! 26 most of the past descriptions of RCU have been written with the mistaken 32 describe and to use RCU. Instead, the experie !! 27 assumption that there is "one true way" to describe RCU. Instead, 33 people must take different paths to arrive at !! 28 the experience has been that different people must take different paths 34 depending on their experiences and use cases. !! 29 to arrive at an understanding of RCU. This document provides several 35 several different paths, as follows: !! 30 different paths, as follows: 36 31 37 :ref:`1. RCU OVERVIEW <1_whatisRCU>` 32 :ref:`1. RCU OVERVIEW <1_whatisRCU>` 38 33 39 :ref:`2. WHAT IS RCU'S CORE API? <2_wha 34 :ref:`2. WHAT IS RCU'S CORE API? <2_whatisRCU>` 40 35 41 :ref:`3. WHAT ARE SOME EXAMPLE USES OF 36 :ref:`3. WHAT ARE SOME EXAMPLE USES OF CORE RCU API? <3_whatisRCU>` 42 37 43 :ref:`4. WHAT IF MY UPDATING THREAD CAN 38 :ref:`4. WHAT IF MY UPDATING THREAD CANNOT BLOCK? <4_whatisRCU>` 44 39 45 :ref:`5. WHAT ARE SOME SIMPLE IMPLEMENT 40 :ref:`5. WHAT ARE SOME SIMPLE IMPLEMENTATIONS OF RCU? <5_whatisRCU>` 46 41 47 :ref:`6. ANALOGY WITH READER-WRITER LOC 42 :ref:`6. ANALOGY WITH READER-WRITER LOCKING <6_whatisRCU>` 48 43 49 :ref:`7. ANALOGY WITH REFERENCE COUNTIN 44 :ref:`7. ANALOGY WITH REFERENCE COUNTING <7_whatisRCU>` 50 45 51 :ref:`8. FULL LIST OF RCU APIs <8_whati 46 :ref:`8. FULL LIST OF RCU APIs <8_whatisRCU>` 52 47 53 :ref:`9. ANSWERS TO QUICK QUIZZES <9_wh 48 :ref:`9. ANSWERS TO QUICK QUIZZES <9_whatisRCU>` 54 49 55 People who prefer starting with a conceptual o 50 People who prefer starting with a conceptual overview should focus on 56 Section 1, though most readers will profit by 51 Section 1, though most readers will profit by reading this section at 57 some point. People who prefer to start with a 52 some point. People who prefer to start with an API that they can then 58 experiment with should focus on Section 2. Pe 53 experiment with should focus on Section 2. People who prefer to start 59 with example uses should focus on Sections 3 a 54 with example uses should focus on Sections 3 and 4. People who need to 60 understand the RCU implementation should focus 55 understand the RCU implementation should focus on Section 5, then dive 61 into the kernel source code. People who reaso 56 into the kernel source code. People who reason best by analogy should 62 focus on Section 6 and 7. Section 8 serves as !! 57 focus on Section 6. Section 7 serves as an index to the docbook API 63 API documentation, and Section 9 is the tradit !! 58 documentation, and Section 8 is the traditional answer key. 64 59 65 So, start with the section that makes the most 60 So, start with the section that makes the most sense to you and your 66 preferred method of learning. If you need to 61 preferred method of learning. If you need to know everything about 67 everything, feel free to read the whole thing 62 everything, feel free to read the whole thing -- but if you are really 68 that type of person, you have perused the sour 63 that type of person, you have perused the source code and will therefore 69 never need this document anyway. ;-) 64 never need this document anyway. ;-) 70 65 71 .. _1_whatisRCU: 66 .. _1_whatisRCU: 72 67 73 1. RCU OVERVIEW 68 1. RCU OVERVIEW 74 ---------------- 69 ---------------- 75 70 76 The basic idea behind RCU is to split updates 71 The basic idea behind RCU is to split updates into "removal" and 77 "reclamation" phases. The removal phase remov 72 "reclamation" phases. The removal phase removes references to data items 78 within a data structure (possibly by replacing 73 within a data structure (possibly by replacing them with references to 79 new versions of these data items), and can run 74 new versions of these data items), and can run concurrently with readers. 80 The reason that it is safe to run the removal 75 The reason that it is safe to run the removal phase concurrently with 81 readers is the semantics of modern CPUs guaran 76 readers is the semantics of modern CPUs guarantee that readers will see 82 either the old or the new version of the data 77 either the old or the new version of the data structure rather than a 83 partially updated reference. The reclamation 78 partially updated reference. The reclamation phase does the work of reclaiming 84 (e.g., freeing) the data items removed from th 79 (e.g., freeing) the data items removed from the data structure during the 85 removal phase. Because reclaiming data items 80 removal phase. Because reclaiming data items can disrupt any readers 86 concurrently referencing those data items, the 81 concurrently referencing those data items, the reclamation phase must 87 not start until readers no longer hold referen 82 not start until readers no longer hold references to those data items. 88 83 89 Splitting the update into removal and reclamat 84 Splitting the update into removal and reclamation phases permits the 90 updater to perform the removal phase immediate 85 updater to perform the removal phase immediately, and to defer the 91 reclamation phase until all readers active dur 86 reclamation phase until all readers active during the removal phase have 92 completed, either by blocking until they finis 87 completed, either by blocking until they finish or by registering a 93 callback that is invoked after they finish. O 88 callback that is invoked after they finish. Only readers that are active 94 during the removal phase need be considered, b 89 during the removal phase need be considered, because any reader starting 95 after the removal phase will be unable to gain 90 after the removal phase will be unable to gain a reference to the removed 96 data items, and therefore cannot be disrupted 91 data items, and therefore cannot be disrupted by the reclamation phase. 97 92 98 So the typical RCU update sequence goes someth 93 So the typical RCU update sequence goes something like the following: 99 94 100 a. Remove pointers to a data structure, s 95 a. Remove pointers to a data structure, so that subsequent 101 readers cannot gain a reference to it. 96 readers cannot gain a reference to it. 102 97 103 b. Wait for all previous readers to compl 98 b. Wait for all previous readers to complete their RCU read-side 104 critical sections. 99 critical sections. 105 100 106 c. At this point, there cannot be any rea 101 c. At this point, there cannot be any readers who hold references 107 to the data structure, so it now may s 102 to the data structure, so it now may safely be reclaimed 108 (e.g., kfree()d). 103 (e.g., kfree()d). 109 104 110 Step (b) above is the key idea underlying RCU' 105 Step (b) above is the key idea underlying RCU's deferred destruction. 111 The ability to wait until all readers are done 106 The ability to wait until all readers are done allows RCU readers to 112 use much lighter-weight synchronization, in so 107 use much lighter-weight synchronization, in some cases, absolutely no 113 synchronization at all. In contrast, in more 108 synchronization at all. In contrast, in more conventional lock-based 114 schemes, readers must use heavy-weight synchro 109 schemes, readers must use heavy-weight synchronization in order to 115 prevent an updater from deleting the data stru 110 prevent an updater from deleting the data structure out from under them. 116 This is because lock-based updaters typically 111 This is because lock-based updaters typically update data items in place, 117 and must therefore exclude readers. In contra 112 and must therefore exclude readers. In contrast, RCU-based updaters 118 typically take advantage of the fact that writ 113 typically take advantage of the fact that writes to single aligned 119 pointers are atomic on modern CPUs, allowing a 114 pointers are atomic on modern CPUs, allowing atomic insertion, removal, 120 and replacement of data items in a linked stru 115 and replacement of data items in a linked structure without disrupting 121 readers. Concurrent RCU readers can then cont 116 readers. Concurrent RCU readers can then continue accessing the old 122 versions, and can dispense with the atomic ope 117 versions, and can dispense with the atomic operations, memory barriers, 123 and communications cache misses that are so ex 118 and communications cache misses that are so expensive on present-day 124 SMP computer systems, even in absence of lock 119 SMP computer systems, even in absence of lock contention. 125 120 126 In the three-step procedure shown above, the u 121 In the three-step procedure shown above, the updater is performing both 127 the removal and the reclamation step, but it i 122 the removal and the reclamation step, but it is often helpful for an 128 entirely different thread to do the reclamatio 123 entirely different thread to do the reclamation, as is in fact the case 129 in the Linux kernel's directory-entry cache (d 124 in the Linux kernel's directory-entry cache (dcache). Even if the same 130 thread performs both the update step (step (a) 125 thread performs both the update step (step (a) above) and the reclamation 131 step (step (c) above), it is often helpful to 126 step (step (c) above), it is often helpful to think of them separately. 132 For example, RCU readers and updaters need not 127 For example, RCU readers and updaters need not communicate at all, 133 but RCU provides implicit low-overhead communi 128 but RCU provides implicit low-overhead communication between readers 134 and reclaimers, namely, in step (b) above. 129 and reclaimers, namely, in step (b) above. 135 130 136 So how the heck can a reclaimer tell when a re 131 So how the heck can a reclaimer tell when a reader is done, given 137 that readers are not doing any sort of synchro 132 that readers are not doing any sort of synchronization operations??? 138 Read on to learn about how RCU's API makes thi 133 Read on to learn about how RCU's API makes this easy. 139 134 140 .. _2_whatisRCU: 135 .. _2_whatisRCU: 141 136 142 2. WHAT IS RCU'S CORE API? 137 2. WHAT IS RCU'S CORE API? 143 --------------------------- 138 --------------------------- 144 139 145 The core RCU API is quite small: 140 The core RCU API is quite small: 146 141 147 a. rcu_read_lock() 142 a. rcu_read_lock() 148 b. rcu_read_unlock() 143 b. rcu_read_unlock() 149 c. synchronize_rcu() / call_rcu() 144 c. synchronize_rcu() / call_rcu() 150 d. rcu_assign_pointer() 145 d. rcu_assign_pointer() 151 e. rcu_dereference() 146 e. rcu_dereference() 152 147 153 There are many other members of the RCU API, b 148 There are many other members of the RCU API, but the rest can be 154 expressed in terms of these five, though most 149 expressed in terms of these five, though most implementations instead 155 express synchronize_rcu() in terms of the call 150 express synchronize_rcu() in terms of the call_rcu() callback API. 156 151 157 The five core RCU APIs are described below, th 152 The five core RCU APIs are described below, the other 18 will be enumerated 158 later. See the kernel docbook documentation f 153 later. See the kernel docbook documentation for more info, or look directly 159 at the function header comments. 154 at the function header comments. 160 155 161 rcu_read_lock() 156 rcu_read_lock() 162 ^^^^^^^^^^^^^^^ 157 ^^^^^^^^^^^^^^^ 163 void rcu_read_lock(void); 158 void rcu_read_lock(void); 164 159 165 This temporal primitive is used by a r !! 160 Used by a reader to inform the reclaimer that the reader is 166 reclaimer that the reader is entering !! 161 entering an RCU read-side critical section. It is illegal 167 section. It is illegal to block while !! 162 to block while in an RCU read-side critical section, though 168 critical section, though kernels built !! 163 kernels built with CONFIG_PREEMPT_RCU can preempt RCU 169 can preempt RCU read-side critical sec !! 164 read-side critical sections. Any RCU-protected data structure 170 data structure accessed during an RCU !! 165 accessed during an RCU read-side critical section is guaranteed to 171 is guaranteed to remain unreclaimed fo !! 166 remain unreclaimed for the full duration of that critical section. 172 critical section. Reference counts ma !! 167 Reference counts may be used in conjunction with RCU to maintain 173 with RCU to maintain longer-term refer !! 168 longer-term references to data structures. 174 << 175 Note that anything that disables botto << 176 or interrupts also enters an RCU read- << 177 Acquiring a spinlock also enters an RC << 178 sections, even for spinlocks that do n << 179 as is the case in kernels built with C << 180 Sleeplocks do *not* enter RCU read-sid << 181 169 182 rcu_read_unlock() 170 rcu_read_unlock() 183 ^^^^^^^^^^^^^^^^^ 171 ^^^^^^^^^^^^^^^^^ 184 void rcu_read_unlock(void); 172 void rcu_read_unlock(void); 185 173 186 This temporal primitives is used by a !! 174 Used by a reader to inform the reclaimer that the reader is 187 reclaimer that the reader is exiting a !! 175 exiting an RCU read-side critical section. Note that RCU 188 section. Anything that enables bottom !! 176 read-side critical sections may be nested and/or overlapping. 189 or interrupts also exits an RCU read-s << 190 Releasing a spinlock also exits an RCU << 191 << 192 Note that RCU read-side critical secti << 193 overlapping. << 194 177 195 synchronize_rcu() 178 synchronize_rcu() 196 ^^^^^^^^^^^^^^^^^ 179 ^^^^^^^^^^^^^^^^^ 197 void synchronize_rcu(void); 180 void synchronize_rcu(void); 198 181 199 This temporal primitive marks the end !! 182 Marks the end of updater code and the beginning of reclaimer 200 beginning of reclaimer code. It does !! 183 code. It does this by blocking until all pre-existing RCU 201 all pre-existing RCU read-side critica !! 184 read-side critical sections on all CPUs have completed. 202 have completed. Note that synchronize !! 185 Note that synchronize_rcu() will **not** necessarily wait for 203 necessarily wait for any subsequent RC !! 186 any subsequent RCU read-side critical sections to complete. 204 sections to complete. For example, co !! 187 For example, consider the following sequence of events:: 205 sequence of events:: << 206 188 207 CPU 0 CPU 1 189 CPU 0 CPU 1 CPU 2 208 ----------------- --------------- 190 ----------------- ------------------------- --------------- 209 1. rcu_read_lock() 191 1. rcu_read_lock() 210 2. enters synchron 192 2. enters synchronize_rcu() 211 3. 193 3. rcu_read_lock() 212 4. rcu_read_unlock() 194 4. rcu_read_unlock() 213 5. exits synchron 195 5. exits synchronize_rcu() 214 6. 196 6. rcu_read_unlock() 215 197 216 To reiterate, synchronize_rcu() waits 198 To reiterate, synchronize_rcu() waits only for ongoing RCU 217 read-side critical sections to complet 199 read-side critical sections to complete, not necessarily for 218 any that begin after synchronize_rcu() 200 any that begin after synchronize_rcu() is invoked. 219 201 220 Of course, synchronize_rcu() does not 202 Of course, synchronize_rcu() does not necessarily return 221 **immediately** after the last pre-exi 203 **immediately** after the last pre-existing RCU read-side critical 222 section completes. For one thing, the 204 section completes. For one thing, there might well be scheduling 223 delays. For another thing, many RCU i 205 delays. For another thing, many RCU implementations process 224 requests in batches in order to improv 206 requests in batches in order to improve efficiencies, which can 225 further delay synchronize_rcu(). 207 further delay synchronize_rcu(). 226 208 227 Since synchronize_rcu() is the API tha 209 Since synchronize_rcu() is the API that must figure out when 228 readers are done, its implementation i 210 readers are done, its implementation is key to RCU. For RCU 229 to be useful in all but the most read- 211 to be useful in all but the most read-intensive situations, 230 synchronize_rcu()'s overhead must also 212 synchronize_rcu()'s overhead must also be quite small. 231 213 232 The call_rcu() API is an asynchronous !! 214 The call_rcu() API is a callback form of synchronize_rcu(), 233 synchronize_rcu(), and is described in !! 215 and is described in more detail in a later section. Instead of 234 section. Instead of blocking, it regi !! 216 blocking, it registers a function and argument which are invoked 235 argument which are invoked after all o !! 217 after all ongoing RCU read-side critical sections have completed. 236 critical sections have completed. Thi !! 218 This callback variant is particularly useful in situations where 237 particularly useful in situations wher !! 219 it is illegal to block or where update-side performance is 238 or where update-side performance is cr !! 220 critically important. 239 221 240 However, the call_rcu() API should not 222 However, the call_rcu() API should not be used lightly, as use 241 of the synchronize_rcu() API generally 223 of the synchronize_rcu() API generally results in simpler code. 242 In addition, the synchronize_rcu() API 224 In addition, the synchronize_rcu() API has the nice property 243 of automatically limiting update rate 225 of automatically limiting update rate should grace periods 244 be delayed. This property results in 226 be delayed. This property results in system resilience in face 245 of denial-of-service attacks. Code us 227 of denial-of-service attacks. Code using call_rcu() should limit 246 update rate in order to gain this same 228 update rate in order to gain this same sort of resilience. See 247 checklist.rst for some approaches to l 229 checklist.rst for some approaches to limiting the update rate. 248 230 249 rcu_assign_pointer() 231 rcu_assign_pointer() 250 ^^^^^^^^^^^^^^^^^^^^ 232 ^^^^^^^^^^^^^^^^^^^^ 251 void rcu_assign_pointer(p, typeof(p) v 233 void rcu_assign_pointer(p, typeof(p) v); 252 234 253 Yes, rcu_assign_pointer() **is** imple !! 235 Yes, rcu_assign_pointer() **is** implemented as a macro, though it 254 it would be cool to be able to declare !! 236 would be cool to be able to declare a function in this manner. 255 (And there has been some discussion of !! 237 (Compiler experts will no doubt disagree.) 256 to the C language, so who knows?) << 257 238 258 The updater uses this spatial macro to !! 239 The updater uses this function to assign a new value to an 259 RCU-protected pointer, in order to saf 240 RCU-protected pointer, in order to safely communicate the change 260 in value from the updater to the reade !! 241 in value from the updater to the reader. This macro does not 261 opposed to temporal) macro. It does n !! 242 evaluate to an rvalue, but it does execute any memory-barrier 262 but it does provide any compiler direc !! 243 instructions required for a given CPU architecture. 263 instructions required for a given comp !! 244 264 Its ordering properties are that of a !! 245 Perhaps just as important, it serves to document (1) which 265 that is, any prior loads and stores re !! 246 pointers are protected by RCU and (2) the point at which a 266 structure are ordered before the store !! 247 given structure becomes accessible to other CPUs. That said, 267 to that structure. << 268 << 269 Perhaps just as important, rcu_assign_ << 270 (1) which pointers are protected by RC << 271 a given structure becomes accessible t << 272 rcu_assign_pointer() is most frequentl 248 rcu_assign_pointer() is most frequently used indirectly, via 273 the _rcu list-manipulation primitives 249 the _rcu list-manipulation primitives such as list_add_rcu(). 274 250 275 rcu_dereference() 251 rcu_dereference() 276 ^^^^^^^^^^^^^^^^^ 252 ^^^^^^^^^^^^^^^^^ 277 typeof(p) rcu_dereference(p); 253 typeof(p) rcu_dereference(p); 278 254 279 Like rcu_assign_pointer(), rcu_derefer 255 Like rcu_assign_pointer(), rcu_dereference() must be implemented 280 as a macro. 256 as a macro. 281 257 282 The reader uses the spatial rcu_derefe !! 258 The reader uses rcu_dereference() to fetch an RCU-protected 283 an RCU-protected pointer, which return !! 259 pointer, which returns a value that may then be safely 284 then be safely dereferenced. Note tha !! 260 dereferenced. Note that rcu_dereference() does not actually 285 does not actually dereference the poin !! 261 dereference the pointer, instead, it protects the pointer for 286 protects the pointer for later derefer !! 262 later dereferencing. It also executes any needed memory-barrier 287 executes any needed memory-barrier ins !! 263 instructions for a given CPU architecture. Currently, only Alpha 288 CPU architecture. Currently, only Alp !! 264 needs memory barriers within rcu_dereference() -- on other CPUs, 289 within rcu_dereference() -- on other C !! 265 it compiles to nothing, not even a compiler directive. 290 volatile load. However, no mainstream << 291 address dependencies, so rcu_dereferen << 292 which, in combination with the coding << 293 rcu_dereference.rst, prevent current c << 294 these dependencies. << 295 266 296 Common coding practice uses rcu_derefe 267 Common coding practice uses rcu_dereference() to copy an 297 RCU-protected pointer to a local varia 268 RCU-protected pointer to a local variable, then dereferences 298 this local variable, for example as fo 269 this local variable, for example as follows:: 299 270 300 p = rcu_dereference(head.next) 271 p = rcu_dereference(head.next); 301 return p->data; 272 return p->data; 302 273 303 However, in this case, one could just 274 However, in this case, one could just as easily combine these 304 into one statement:: 275 into one statement:: 305 276 306 return rcu_dereference(head.ne 277 return rcu_dereference(head.next)->data; 307 278 308 If you are going to be fetching multip 279 If you are going to be fetching multiple fields from the 309 RCU-protected structure, using the loc 280 RCU-protected structure, using the local variable is of 310 course preferred. Repeated rcu_derefe 281 course preferred. Repeated rcu_dereference() calls look 311 ugly, do not guarantee that the same p 282 ugly, do not guarantee that the same pointer will be returned 312 if an update happened while in the cri 283 if an update happened while in the critical section, and incur 313 unnecessary overhead on Alpha CPUs. 284 unnecessary overhead on Alpha CPUs. 314 285 315 Note that the value returned by rcu_de 286 Note that the value returned by rcu_dereference() is valid 316 only within the enclosing RCU read-sid 287 only within the enclosing RCU read-side critical section [1]_. 317 For example, the following is **not** 288 For example, the following is **not** legal:: 318 289 319 rcu_read_lock(); 290 rcu_read_lock(); 320 p = rcu_dereference(head.next) 291 p = rcu_dereference(head.next); 321 rcu_read_unlock(); 292 rcu_read_unlock(); 322 x = p->address; /* BUG!!! */ 293 x = p->address; /* BUG!!! */ 323 rcu_read_lock(); 294 rcu_read_lock(); 324 y = p->data; /* BUG!!! */ 295 y = p->data; /* BUG!!! */ 325 rcu_read_unlock(); 296 rcu_read_unlock(); 326 297 327 Holding a reference from one RCU read- 298 Holding a reference from one RCU read-side critical section 328 to another is just as illegal as holdi 299 to another is just as illegal as holding a reference from 329 one lock-based critical section to ano 300 one lock-based critical section to another! Similarly, 330 using a reference outside of the criti 301 using a reference outside of the critical section in which 331 it was acquired is just as illegal as 302 it was acquired is just as illegal as doing so with normal 332 locking. 303 locking. 333 304 334 As with rcu_assign_pointer(), an impor 305 As with rcu_assign_pointer(), an important function of 335 rcu_dereference() is to document which 306 rcu_dereference() is to document which pointers are protected by 336 RCU, in particular, flagging a pointer 307 RCU, in particular, flagging a pointer that is subject to changing 337 at any time, including immediately aft 308 at any time, including immediately after the rcu_dereference(). 338 And, again like rcu_assign_pointer(), 309 And, again like rcu_assign_pointer(), rcu_dereference() is 339 typically used indirectly, via the _rc 310 typically used indirectly, via the _rcu list-manipulation 340 primitives, such as list_for_each_entr 311 primitives, such as list_for_each_entry_rcu() [2]_. 341 312 342 .. [1] The variant rcu_dereference_protec 313 .. [1] The variant rcu_dereference_protected() can be used outside 343 of an RCU read-side critical section a 314 of an RCU read-side critical section as long as the usage is 344 protected by locks acquired by the upd 315 protected by locks acquired by the update-side code. This variant 345 avoids the lockdep warning that would 316 avoids the lockdep warning that would happen when using (for 346 example) rcu_dereference() without rcu 317 example) rcu_dereference() without rcu_read_lock() protection. 347 Using rcu_dereference_protected() also 318 Using rcu_dereference_protected() also has the advantage 348 of permitting compiler optimizations t 319 of permitting compiler optimizations that rcu_dereference() 349 must prohibit. The rcu_dereference_pr 320 must prohibit. The rcu_dereference_protected() variant takes 350 a lockdep expression to indicate which 321 a lockdep expression to indicate which locks must be acquired 351 by the caller. If the indicated protec 322 by the caller. If the indicated protection is not provided, 352 a lockdep splat is emitted. See Desig 323 a lockdep splat is emitted. See Design/Requirements/Requirements.rst 353 and the API's code comments for more d 324 and the API's code comments for more details and example usage. 354 325 355 .. [2] If the list_for_each_entry_rcu() i 326 .. [2] If the list_for_each_entry_rcu() instance might be used by 356 update-side code as well as by RCU rea 327 update-side code as well as by RCU readers, then an additional 357 lockdep expression can be added to its 328 lockdep expression can be added to its list of arguments. 358 For example, given an additional "lock 329 For example, given an additional "lock_is_held(&mylock)" argument, 359 the RCU lockdep code would complain on 330 the RCU lockdep code would complain only if this instance was 360 invoked outside of an RCU read-side cr 331 invoked outside of an RCU read-side critical section and without 361 the protection of mylock. 332 the protection of mylock. 362 333 363 The following diagram shows how each API commu 334 The following diagram shows how each API communicates among the 364 reader, updater, and reclaimer. 335 reader, updater, and reclaimer. 365 :: 336 :: 366 337 367 338 368 rcu_assign_pointer() 339 rcu_assign_pointer() 369 +--------+ 340 +--------+ 370 +---------------------->| reader | 341 +---------------------->| reader |---------+ 371 | +--------+ 342 | +--------+ | 372 | | 343 | | | 373 | | 344 | | | Protect: 374 | | 345 | | | rcu_read_lock() 375 | | 346 | | | rcu_read_unlock() 376 | rcu_dereference() | 347 | rcu_dereference() | | 377 +---------+ | 348 +---------+ | | 378 | updater |<----------------+ 349 | updater |<----------------+ | 379 +---------+ 350 +---------+ V 380 | 351 | +-----------+ 381 +--------------------------------- 352 +----------------------------------->| reclaimer | 382 353 +-----------+ 383 Defer: 354 Defer: 384 synchronize_rcu() & call_rcu() 355 synchronize_rcu() & call_rcu() 385 356 386 357 387 The RCU infrastructure observes the temporal s !! 358 The RCU infrastructure observes the time sequence of rcu_read_lock(), 388 rcu_read_unlock(), synchronize_rcu(), and call 359 rcu_read_unlock(), synchronize_rcu(), and call_rcu() invocations in 389 order to determine when (1) synchronize_rcu() 360 order to determine when (1) synchronize_rcu() invocations may return 390 to their callers and (2) call_rcu() callbacks 361 to their callers and (2) call_rcu() callbacks may be invoked. Efficient 391 implementations of the RCU infrastructure make 362 implementations of the RCU infrastructure make heavy use of batching in 392 order to amortize their overhead over many use 363 order to amortize their overhead over many uses of the corresponding APIs. 393 The rcu_assign_pointer() and rcu_dereference() << 394 spatial changes via stores to and loads from t << 395 question. << 396 364 397 There are at least three flavors of RCU usage 365 There are at least three flavors of RCU usage in the Linux kernel. The diagram 398 above shows the most common one. On the update 366 above shows the most common one. On the updater side, the rcu_assign_pointer(), 399 synchronize_rcu() and call_rcu() primitives us 367 synchronize_rcu() and call_rcu() primitives used are the same for all three 400 flavors. However for protection (on the reader 368 flavors. However for protection (on the reader side), the primitives used vary 401 depending on the flavor: 369 depending on the flavor: 402 370 403 a. rcu_read_lock() / rcu_read_unlock() 371 a. rcu_read_lock() / rcu_read_unlock() 404 rcu_dereference() 372 rcu_dereference() 405 373 406 b. rcu_read_lock_bh() / rcu_read_unlock_b 374 b. rcu_read_lock_bh() / rcu_read_unlock_bh() 407 local_bh_disable() / local_bh_enable() 375 local_bh_disable() / local_bh_enable() 408 rcu_dereference_bh() 376 rcu_dereference_bh() 409 377 410 c. rcu_read_lock_sched() / rcu_read_unloc 378 c. rcu_read_lock_sched() / rcu_read_unlock_sched() 411 preempt_disable() / preempt_enable() 379 preempt_disable() / preempt_enable() 412 local_irq_save() / local_irq_restore() 380 local_irq_save() / local_irq_restore() 413 hardirq enter / hardirq exit 381 hardirq enter / hardirq exit 414 NMI enter / NMI exit 382 NMI enter / NMI exit 415 rcu_dereference_sched() 383 rcu_dereference_sched() 416 384 417 These three flavors are used as follows: 385 These three flavors are used as follows: 418 386 419 a. RCU applied to normal data structures. 387 a. RCU applied to normal data structures. 420 388 421 b. RCU applied to networking data structu 389 b. RCU applied to networking data structures that may be subjected 422 to remote denial-of-service attacks. 390 to remote denial-of-service attacks. 423 391 424 c. RCU applied to scheduler and interrupt 392 c. RCU applied to scheduler and interrupt/NMI-handler tasks. 425 393 426 Again, most uses will be of (a). The (b) and 394 Again, most uses will be of (a). The (b) and (c) cases are important 427 for specialized uses, but are relatively uncom !! 395 for specialized uses, but are relatively uncommon. 428 RCU-Tasks-Rude, and RCU-Tasks-Trace have simil << 429 their assorted primitives. << 430 396 431 .. _3_whatisRCU: 397 .. _3_whatisRCU: 432 398 433 3. WHAT ARE SOME EXAMPLE USES OF CORE RCU API 399 3. WHAT ARE SOME EXAMPLE USES OF CORE RCU API? 434 ---------------------------------------------- 400 ----------------------------------------------- 435 401 436 This section shows a simple use of the core RC 402 This section shows a simple use of the core RCU API to protect a 437 global pointer to a dynamically allocated stru 403 global pointer to a dynamically allocated structure. More-typical 438 uses of RCU may be found in listRCU.rst and NM !! 404 uses of RCU may be found in listRCU.rst, arrayRCU.rst, and NMI-RCU.rst. 439 :: 405 :: 440 406 441 struct foo { 407 struct foo { 442 int a; 408 int a; 443 char b; 409 char b; 444 long c; 410 long c; 445 }; 411 }; 446 DEFINE_SPINLOCK(foo_mutex); 412 DEFINE_SPINLOCK(foo_mutex); 447 413 448 struct foo __rcu *gbl_foo; 414 struct foo __rcu *gbl_foo; 449 415 450 /* 416 /* 451 * Create a new struct foo that is the 417 * Create a new struct foo that is the same as the one currently 452 * pointed to by gbl_foo, except that 418 * pointed to by gbl_foo, except that field "a" is replaced 453 * with "new_a". Points gbl_foo to th 419 * with "new_a". Points gbl_foo to the new structure, and 454 * frees up the old structure after a 420 * frees up the old structure after a grace period. 455 * 421 * 456 * Uses rcu_assign_pointer() to ensure 422 * Uses rcu_assign_pointer() to ensure that concurrent readers 457 * see the initialized version of the 423 * see the initialized version of the new structure. 458 * 424 * 459 * Uses synchronize_rcu() to ensure th 425 * Uses synchronize_rcu() to ensure that any readers that might 460 * have references to the old structur 426 * have references to the old structure complete before freeing 461 * the old structure. 427 * the old structure. 462 */ 428 */ 463 void foo_update_a(int new_a) 429 void foo_update_a(int new_a) 464 { 430 { 465 struct foo *new_fp; 431 struct foo *new_fp; 466 struct foo *old_fp; 432 struct foo *old_fp; 467 433 468 new_fp = kmalloc(sizeof(*new_f 434 new_fp = kmalloc(sizeof(*new_fp), GFP_KERNEL); 469 spin_lock(&foo_mutex); 435 spin_lock(&foo_mutex); 470 old_fp = rcu_dereference_prote 436 old_fp = rcu_dereference_protected(gbl_foo, lockdep_is_held(&foo_mutex)); 471 *new_fp = *old_fp; 437 *new_fp = *old_fp; 472 new_fp->a = new_a; 438 new_fp->a = new_a; 473 rcu_assign_pointer(gbl_foo, ne 439 rcu_assign_pointer(gbl_foo, new_fp); 474 spin_unlock(&foo_mutex); 440 spin_unlock(&foo_mutex); 475 synchronize_rcu(); 441 synchronize_rcu(); 476 kfree(old_fp); 442 kfree(old_fp); 477 } 443 } 478 444 479 /* 445 /* 480 * Return the value of field "a" of th 446 * Return the value of field "a" of the current gbl_foo 481 * structure. Use rcu_read_lock() and 447 * structure. Use rcu_read_lock() and rcu_read_unlock() 482 * to ensure that the structure does n 448 * to ensure that the structure does not get deleted out 483 * from under us, and use rcu_derefere 449 * from under us, and use rcu_dereference() to ensure that 484 * we see the initialized version of t 450 * we see the initialized version of the structure (important 485 * for DEC Alpha and for people readin 451 * for DEC Alpha and for people reading the code). 486 */ 452 */ 487 int foo_get_a(void) 453 int foo_get_a(void) 488 { 454 { 489 int retval; 455 int retval; 490 456 491 rcu_read_lock(); 457 rcu_read_lock(); 492 retval = rcu_dereference(gbl_f 458 retval = rcu_dereference(gbl_foo)->a; 493 rcu_read_unlock(); 459 rcu_read_unlock(); 494 return retval; 460 return retval; 495 } 461 } 496 462 497 So, to sum up: 463 So, to sum up: 498 464 499 - Use rcu_read_lock() and rcu_read_unloc 465 - Use rcu_read_lock() and rcu_read_unlock() to guard RCU 500 read-side critical sections. 466 read-side critical sections. 501 467 502 - Within an RCU read-side critical secti 468 - Within an RCU read-side critical section, use rcu_dereference() 503 to dereference RCU-protected pointers. 469 to dereference RCU-protected pointers. 504 470 505 - Use some solid design (such as locks o !! 471 - Use some solid scheme (such as locks or semaphores) to 506 keep concurrent updates from interferi 472 keep concurrent updates from interfering with each other. 507 473 508 - Use rcu_assign_pointer() to update an 474 - Use rcu_assign_pointer() to update an RCU-protected pointer. 509 This primitive protects concurrent rea 475 This primitive protects concurrent readers from the updater, 510 **not** concurrent updates from each o 476 **not** concurrent updates from each other! You therefore still 511 need to use locking (or something simi 477 need to use locking (or something similar) to keep concurrent 512 rcu_assign_pointer() primitives from i 478 rcu_assign_pointer() primitives from interfering with each other. 513 479 514 - Use synchronize_rcu() **after** removi 480 - Use synchronize_rcu() **after** removing a data element from an 515 RCU-protected data structure, but **be 481 RCU-protected data structure, but **before** reclaiming/freeing 516 the data element, in order to wait for 482 the data element, in order to wait for the completion of all 517 RCU read-side critical sections that m 483 RCU read-side critical sections that might be referencing that 518 data item. 484 data item. 519 485 520 See checklist.rst for additional rules to foll 486 See checklist.rst for additional rules to follow when using RCU. 521 And again, more-typical uses of RCU may be fou !! 487 And again, more-typical uses of RCU may be found in listRCU.rst, 522 and NMI-RCU.rst. !! 488 arrayRCU.rst, and NMI-RCU.rst. 523 489 524 .. _4_whatisRCU: 490 .. _4_whatisRCU: 525 491 526 4. WHAT IF MY UPDATING THREAD CANNOT BLOCK? 492 4. WHAT IF MY UPDATING THREAD CANNOT BLOCK? 527 -------------------------------------------- 493 -------------------------------------------- 528 494 529 In the example above, foo_update_a() blocks un 495 In the example above, foo_update_a() blocks until a grace period elapses. 530 This is quite simple, but in some cases one ca 496 This is quite simple, but in some cases one cannot afford to wait so 531 long -- there might be other high-priority wor 497 long -- there might be other high-priority work to be done. 532 498 533 In such cases, one uses call_rcu() rather than 499 In such cases, one uses call_rcu() rather than synchronize_rcu(). 534 The call_rcu() API is as follows:: 500 The call_rcu() API is as follows:: 535 501 536 void call_rcu(struct rcu_head *head, r 502 void call_rcu(struct rcu_head *head, rcu_callback_t func); 537 503 538 This function invokes func(head) after a grace 504 This function invokes func(head) after a grace period has elapsed. 539 This invocation might happen from either softi 505 This invocation might happen from either softirq or process context, 540 so the function is not permitted to block. Th 506 so the function is not permitted to block. The foo struct needs to 541 have an rcu_head structure added, perhaps as f 507 have an rcu_head structure added, perhaps as follows:: 542 508 543 struct foo { 509 struct foo { 544 int a; 510 int a; 545 char b; 511 char b; 546 long c; 512 long c; 547 struct rcu_head rcu; 513 struct rcu_head rcu; 548 }; 514 }; 549 515 550 The foo_update_a() function might then be writ 516 The foo_update_a() function might then be written as follows:: 551 517 552 /* 518 /* 553 * Create a new struct foo that is the 519 * Create a new struct foo that is the same as the one currently 554 * pointed to by gbl_foo, except that 520 * pointed to by gbl_foo, except that field "a" is replaced 555 * with "new_a". Points gbl_foo to th 521 * with "new_a". Points gbl_foo to the new structure, and 556 * frees up the old structure after a 522 * frees up the old structure after a grace period. 557 * 523 * 558 * Uses rcu_assign_pointer() to ensure 524 * Uses rcu_assign_pointer() to ensure that concurrent readers 559 * see the initialized version of the 525 * see the initialized version of the new structure. 560 * 526 * 561 * Uses call_rcu() to ensure that any 527 * Uses call_rcu() to ensure that any readers that might have 562 * references to the old structure com 528 * references to the old structure complete before freeing the 563 * old structure. 529 * old structure. 564 */ 530 */ 565 void foo_update_a(int new_a) 531 void foo_update_a(int new_a) 566 { 532 { 567 struct foo *new_fp; 533 struct foo *new_fp; 568 struct foo *old_fp; 534 struct foo *old_fp; 569 535 570 new_fp = kmalloc(sizeof(*new_f 536 new_fp = kmalloc(sizeof(*new_fp), GFP_KERNEL); 571 spin_lock(&foo_mutex); 537 spin_lock(&foo_mutex); 572 old_fp = rcu_dereference_prote 538 old_fp = rcu_dereference_protected(gbl_foo, lockdep_is_held(&foo_mutex)); 573 *new_fp = *old_fp; 539 *new_fp = *old_fp; 574 new_fp->a = new_a; 540 new_fp->a = new_a; 575 rcu_assign_pointer(gbl_foo, ne 541 rcu_assign_pointer(gbl_foo, new_fp); 576 spin_unlock(&foo_mutex); 542 spin_unlock(&foo_mutex); 577 call_rcu(&old_fp->rcu, foo_rec 543 call_rcu(&old_fp->rcu, foo_reclaim); 578 } 544 } 579 545 580 The foo_reclaim() function might appear as fol 546 The foo_reclaim() function might appear as follows:: 581 547 582 void foo_reclaim(struct rcu_head *rp) 548 void foo_reclaim(struct rcu_head *rp) 583 { 549 { 584 struct foo *fp = container_of( 550 struct foo *fp = container_of(rp, struct foo, rcu); 585 551 586 foo_cleanup(fp->a); 552 foo_cleanup(fp->a); 587 553 588 kfree(fp); 554 kfree(fp); 589 } 555 } 590 556 591 The container_of() primitive is a macro that, 557 The container_of() primitive is a macro that, given a pointer into a 592 struct, the type of the struct, and the pointe 558 struct, the type of the struct, and the pointed-to field within the 593 struct, returns a pointer to the beginning of 559 struct, returns a pointer to the beginning of the struct. 594 560 595 The use of call_rcu() permits the caller of fo 561 The use of call_rcu() permits the caller of foo_update_a() to 596 immediately regain control, without needing to 562 immediately regain control, without needing to worry further about the 597 old version of the newly updated element. It 563 old version of the newly updated element. It also clearly shows the 598 RCU distinction between updater, namely foo_up 564 RCU distinction between updater, namely foo_update_a(), and reclaimer, 599 namely foo_reclaim(). 565 namely foo_reclaim(). 600 566 601 The summary of advice is the same as for the p 567 The summary of advice is the same as for the previous section, except 602 that we are now using call_rcu() rather than s 568 that we are now using call_rcu() rather than synchronize_rcu(): 603 569 604 - Use call_rcu() **after** removing a da 570 - Use call_rcu() **after** removing a data element from an 605 RCU-protected data structure in order 571 RCU-protected data structure in order to register a callback 606 function that will be invoked after th 572 function that will be invoked after the completion of all RCU 607 read-side critical sections that might 573 read-side critical sections that might be referencing that 608 data item. 574 data item. 609 575 610 If the callback for call_rcu() is not doing an 576 If the callback for call_rcu() is not doing anything more than calling 611 kfree() on the structure, you can use kfree_rc 577 kfree() on the structure, you can use kfree_rcu() instead of call_rcu() 612 to avoid having to write your own callback:: 578 to avoid having to write your own callback:: 613 579 614 kfree_rcu(old_fp, rcu); 580 kfree_rcu(old_fp, rcu); 615 581 616 If the occasional sleep is permitted, the sing << 617 be used, omitting the rcu_head structure from << 618 << 619 kfree_rcu_mightsleep(old_fp); << 620 << 621 This variant almost never blocks, but might do << 622 synchronize_rcu() in response to memory-alloca << 623 << 624 Again, see checklist.rst for additional rules 582 Again, see checklist.rst for additional rules governing the use of RCU. 625 583 626 .. _5_whatisRCU: 584 .. _5_whatisRCU: 627 585 628 5. WHAT ARE SOME SIMPLE IMPLEMENTATIONS OF RC 586 5. WHAT ARE SOME SIMPLE IMPLEMENTATIONS OF RCU? 629 ---------------------------------------------- 587 ------------------------------------------------ 630 588 631 One of the nice things about RCU is that it ha 589 One of the nice things about RCU is that it has extremely simple "toy" 632 implementations that are a good first step tow 590 implementations that are a good first step towards understanding the 633 production-quality implementations in the Linu 591 production-quality implementations in the Linux kernel. This section 634 presents two such "toy" implementations of RCU 592 presents two such "toy" implementations of RCU, one that is implemented 635 in terms of familiar locking primitives, and a 593 in terms of familiar locking primitives, and another that more closely 636 resembles "classic" RCU. Both are way too sim 594 resembles "classic" RCU. Both are way too simple for real-world use, 637 lacking both functionality and performance. H 595 lacking both functionality and performance. However, they are useful 638 in getting a feel for how RCU works. See kern 596 in getting a feel for how RCU works. See kernel/rcu/update.c for a 639 production-quality implementation, and see: 597 production-quality implementation, and see: 640 598 641 https://docs.google.com/document/d/1X0 !! 599 http://www.rdrop.com/users/paulmck/RCU 642 600 643 for papers describing the Linux kernel RCU imp 601 for papers describing the Linux kernel RCU implementation. The OLS'01 644 and OLS'02 papers are a good introduction, and 602 and OLS'02 papers are a good introduction, and the dissertation provides 645 more details on the current implementation as 603 more details on the current implementation as of early 2004. 646 604 647 605 648 5A. "TOY" IMPLEMENTATION #1: LOCKING 606 5A. "TOY" IMPLEMENTATION #1: LOCKING 649 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 607 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 650 This section presents a "toy" RCU implementati 608 This section presents a "toy" RCU implementation that is based on 651 familiar locking primitives. Its overhead mak 609 familiar locking primitives. Its overhead makes it a non-starter for 652 real-life use, as does its lack of scalability 610 real-life use, as does its lack of scalability. It is also unsuitable 653 for realtime use, since it allows scheduling l 611 for realtime use, since it allows scheduling latency to "bleed" from 654 one read-side critical section to another. It 612 one read-side critical section to another. It also assumes recursive 655 reader-writer locks: If you try this with non 613 reader-writer locks: If you try this with non-recursive locks, and 656 you allow nested rcu_read_lock() calls, you ca 614 you allow nested rcu_read_lock() calls, you can deadlock. 657 615 658 However, it is probably the easiest implementa 616 However, it is probably the easiest implementation to relate to, so is 659 a good starting point. 617 a good starting point. 660 618 661 It is extremely simple:: 619 It is extremely simple:: 662 620 663 static DEFINE_RWLOCK(rcu_gp_mutex); 621 static DEFINE_RWLOCK(rcu_gp_mutex); 664 622 665 void rcu_read_lock(void) 623 void rcu_read_lock(void) 666 { 624 { 667 read_lock(&rcu_gp_mutex); 625 read_lock(&rcu_gp_mutex); 668 } 626 } 669 627 670 void rcu_read_unlock(void) 628 void rcu_read_unlock(void) 671 { 629 { 672 read_unlock(&rcu_gp_mutex); 630 read_unlock(&rcu_gp_mutex); 673 } 631 } 674 632 675 void synchronize_rcu(void) 633 void synchronize_rcu(void) 676 { 634 { 677 write_lock(&rcu_gp_mutex); 635 write_lock(&rcu_gp_mutex); 678 smp_mb__after_spinlock(); 636 smp_mb__after_spinlock(); 679 write_unlock(&rcu_gp_mutex); 637 write_unlock(&rcu_gp_mutex); 680 } 638 } 681 639 682 [You can ignore rcu_assign_pointer() and rcu_d 640 [You can ignore rcu_assign_pointer() and rcu_dereference() without missing 683 much. But here are simplified versions anyway 641 much. But here are simplified versions anyway. And whatever you do, 684 don't forget about them when submitting patche 642 don't forget about them when submitting patches making use of RCU!]:: 685 643 686 #define rcu_assign_pointer(p, v) \ 644 #define rcu_assign_pointer(p, v) \ 687 ({ \ 645 ({ \ 688 smp_store_release(&(p), (v)); 646 smp_store_release(&(p), (v)); \ 689 }) 647 }) 690 648 691 #define rcu_dereference(p) \ 649 #define rcu_dereference(p) \ 692 ({ \ 650 ({ \ 693 typeof(p) _________p1 = READ_O 651 typeof(p) _________p1 = READ_ONCE(p); \ 694 (_________p1); \ 652 (_________p1); \ 695 }) 653 }) 696 654 697 655 698 The rcu_read_lock() and rcu_read_unlock() prim 656 The rcu_read_lock() and rcu_read_unlock() primitive read-acquire 699 and release a global reader-writer lock. The 657 and release a global reader-writer lock. The synchronize_rcu() 700 primitive write-acquires this same lock, then 658 primitive write-acquires this same lock, then releases it. This means 701 that once synchronize_rcu() exits, all RCU rea 659 that once synchronize_rcu() exits, all RCU read-side critical sections 702 that were in progress before synchronize_rcu() 660 that were in progress before synchronize_rcu() was called are guaranteed 703 to have completed -- there is no way that sync 661 to have completed -- there is no way that synchronize_rcu() would have 704 been able to write-acquire the lock otherwise. 662 been able to write-acquire the lock otherwise. The smp_mb__after_spinlock() 705 promotes synchronize_rcu() to a full memory ba 663 promotes synchronize_rcu() to a full memory barrier in compliance with 706 the "Memory-Barrier Guarantees" listed in: 664 the "Memory-Barrier Guarantees" listed in: 707 665 708 Design/Requirements/Requirements.rst 666 Design/Requirements/Requirements.rst 709 667 710 It is possible to nest rcu_read_lock(), since 668 It is possible to nest rcu_read_lock(), since reader-writer locks may 711 be recursively acquired. Note also that rcu_r 669 be recursively acquired. Note also that rcu_read_lock() is immune 712 from deadlock (an important property of RCU). 670 from deadlock (an important property of RCU). The reason for this is 713 that the only thing that can block rcu_read_lo 671 that the only thing that can block rcu_read_lock() is a synchronize_rcu(). 714 But synchronize_rcu() does not acquire any loc 672 But synchronize_rcu() does not acquire any locks while holding rcu_gp_mutex, 715 so there can be no deadlock cycle. 673 so there can be no deadlock cycle. 716 674 717 .. _quiz_1: 675 .. _quiz_1: 718 676 719 Quick Quiz #1: 677 Quick Quiz #1: 720 Why is this argument naive? H 678 Why is this argument naive? How could a deadlock 721 occur when using this algorith 679 occur when using this algorithm in a real-world Linux 722 kernel? How could this deadlo 680 kernel? How could this deadlock be avoided? 723 681 724 :ref:`Answers to Quick Quiz <9_whatisRCU>` 682 :ref:`Answers to Quick Quiz <9_whatisRCU>` 725 683 726 5B. "TOY" EXAMPLE #2: CLASSIC RCU 684 5B. "TOY" EXAMPLE #2: CLASSIC RCU 727 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 685 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 728 This section presents a "toy" RCU implementati 686 This section presents a "toy" RCU implementation that is based on 729 "classic RCU". It is also short on performanc 687 "classic RCU". It is also short on performance (but only for updates) and 730 on features such as hotplug CPU and the abilit 688 on features such as hotplug CPU and the ability to run in CONFIG_PREEMPTION 731 kernels. The definitions of rcu_dereference() 689 kernels. The definitions of rcu_dereference() and rcu_assign_pointer() 732 are the same as those shown in the preceding s 690 are the same as those shown in the preceding section, so they are omitted. 733 :: 691 :: 734 692 735 void rcu_read_lock(void) { } 693 void rcu_read_lock(void) { } 736 694 737 void rcu_read_unlock(void) { } 695 void rcu_read_unlock(void) { } 738 696 739 void synchronize_rcu(void) 697 void synchronize_rcu(void) 740 { 698 { 741 int cpu; 699 int cpu; 742 700 743 for_each_possible_cpu(cpu) 701 for_each_possible_cpu(cpu) 744 run_on(cpu); 702 run_on(cpu); 745 } 703 } 746 704 747 Note that rcu_read_lock() and rcu_read_unlock( 705 Note that rcu_read_lock() and rcu_read_unlock() do absolutely nothing. 748 This is the great strength of classic RCU in a 706 This is the great strength of classic RCU in a non-preemptive kernel: 749 read-side overhead is precisely zero, at least 707 read-side overhead is precisely zero, at least on non-Alpha CPUs. 750 And there is absolutely no way that rcu_read_l 708 And there is absolutely no way that rcu_read_lock() can possibly 751 participate in a deadlock cycle! 709 participate in a deadlock cycle! 752 710 753 The implementation of synchronize_rcu() simply 711 The implementation of synchronize_rcu() simply schedules itself on each 754 CPU in turn. The run_on() primitive can be im 712 CPU in turn. The run_on() primitive can be implemented straightforwardly 755 in terms of the sched_setaffinity() primitive. 713 in terms of the sched_setaffinity() primitive. Of course, a somewhat less 756 "toy" implementation would restore the affinit 714 "toy" implementation would restore the affinity upon completion rather 757 than just leaving all tasks running on the las 715 than just leaving all tasks running on the last CPU, but when I said 758 "toy", I meant **toy**! 716 "toy", I meant **toy**! 759 717 760 So how the heck is this supposed to work??? 718 So how the heck is this supposed to work??? 761 719 762 Remember that it is illegal to block while in 720 Remember that it is illegal to block while in an RCU read-side critical 763 section. Therefore, if a given CPU executes a 721 section. Therefore, if a given CPU executes a context switch, we know 764 that it must have completed all preceding RCU 722 that it must have completed all preceding RCU read-side critical sections. 765 Once **all** CPUs have executed a context swit 723 Once **all** CPUs have executed a context switch, then **all** preceding 766 RCU read-side critical sections will have comp 724 RCU read-side critical sections will have completed. 767 725 768 So, suppose that we remove a data item from it 726 So, suppose that we remove a data item from its structure and then invoke 769 synchronize_rcu(). Once synchronize_rcu() ret 727 synchronize_rcu(). Once synchronize_rcu() returns, we are guaranteed 770 that there are no RCU read-side critical secti 728 that there are no RCU read-side critical sections holding a reference 771 to that data item, so we can safely reclaim it 729 to that data item, so we can safely reclaim it. 772 730 773 .. _quiz_2: 731 .. _quiz_2: 774 732 775 Quick Quiz #2: 733 Quick Quiz #2: 776 Give an example where Classic 734 Give an example where Classic RCU's read-side 777 overhead is **negative**. 735 overhead is **negative**. 778 736 779 :ref:`Answers to Quick Quiz <9_whatisRCU>` 737 :ref:`Answers to Quick Quiz <9_whatisRCU>` 780 738 781 .. _quiz_3: 739 .. _quiz_3: 782 740 783 Quick Quiz #3: 741 Quick Quiz #3: 784 If it is illegal to block in a 742 If it is illegal to block in an RCU read-side 785 critical section, what the hec 743 critical section, what the heck do you do in 786 CONFIG_PREEMPT_RT, where norma 744 CONFIG_PREEMPT_RT, where normal spinlocks can block??? 787 745 788 :ref:`Answers to Quick Quiz <9_whatisRCU>` 746 :ref:`Answers to Quick Quiz <9_whatisRCU>` 789 747 790 .. _6_whatisRCU: 748 .. _6_whatisRCU: 791 749 792 6. ANALOGY WITH READER-WRITER LOCKING 750 6. ANALOGY WITH READER-WRITER LOCKING 793 -------------------------------------- 751 -------------------------------------- 794 752 795 Although RCU can be used in many different way 753 Although RCU can be used in many different ways, a very common use of 796 RCU is analogous to reader-writer locking. Th 754 RCU is analogous to reader-writer locking. The following unified 797 diff shows how closely related RCU and reader- 755 diff shows how closely related RCU and reader-writer locking can be. 798 :: 756 :: 799 757 800 @@ -5,5 +5,5 @@ struct el { 758 @@ -5,5 +5,5 @@ struct el { 801 int data; 759 int data; 802 /* Other data fields */ 760 /* Other data fields */ 803 }; 761 }; 804 -rwlock_t listmutex; 762 -rwlock_t listmutex; 805 +spinlock_t listmutex; 763 +spinlock_t listmutex; 806 struct el head; 764 struct el head; 807 765 808 @@ -13,15 +14,15 @@ 766 @@ -13,15 +14,15 @@ 809 struct list_head *lp; 767 struct list_head *lp; 810 struct el *p; 768 struct el *p; 811 769 812 - read_lock(&listmutex); 770 - read_lock(&listmutex); 813 - list_for_each_entry(p, head, l 771 - list_for_each_entry(p, head, lp) { 814 + rcu_read_lock(); 772 + rcu_read_lock(); 815 + list_for_each_entry_rcu(p, hea 773 + list_for_each_entry_rcu(p, head, lp) { 816 if (p->key == key) { 774 if (p->key == key) { 817 *result = p->d 775 *result = p->data; 818 - read_unlock(&l 776 - read_unlock(&listmutex); 819 + rcu_read_unloc 777 + rcu_read_unlock(); 820 return 1; 778 return 1; 821 } 779 } 822 } 780 } 823 - read_unlock(&listmutex); 781 - read_unlock(&listmutex); 824 + rcu_read_unlock(); 782 + rcu_read_unlock(); 825 return 0; 783 return 0; 826 } 784 } 827 785 828 @@ -29,15 +30,16 @@ 786 @@ -29,15 +30,16 @@ 829 { 787 { 830 struct el *p; 788 struct el *p; 831 789 832 - write_lock(&listmutex); 790 - write_lock(&listmutex); 833 + spin_lock(&listmutex); 791 + spin_lock(&listmutex); 834 list_for_each_entry(p, head, l 792 list_for_each_entry(p, head, lp) { 835 if (p->key == key) { 793 if (p->key == key) { 836 - list_del(&p->l 794 - list_del(&p->list); 837 - write_unlock(& 795 - write_unlock(&listmutex); 838 + list_del_rcu(& 796 + list_del_rcu(&p->list); 839 + spin_unlock(&l 797 + spin_unlock(&listmutex); 840 + synchronize_rc 798 + synchronize_rcu(); 841 kfree(p); 799 kfree(p); 842 return 1; 800 return 1; 843 } 801 } 844 } 802 } 845 - write_unlock(&listmutex); 803 - write_unlock(&listmutex); 846 + spin_unlock(&listmutex); 804 + spin_unlock(&listmutex); 847 return 0; 805 return 0; 848 } 806 } 849 807 850 Or, for those who prefer a side-by-side listin 808 Or, for those who prefer a side-by-side listing:: 851 809 852 1 struct el { 1 stru 810 1 struct el { 1 struct el { 853 2 struct list_head list; 2 st 811 2 struct list_head list; 2 struct list_head list; 854 3 long key; 3 lo 812 3 long key; 3 long key; 855 4 spinlock_t mutex; 4 sp 813 4 spinlock_t mutex; 4 spinlock_t mutex; 856 5 int data; 5 in 814 5 int data; 5 int data; 857 6 /* Other data fields */ 6 /* 815 6 /* Other data fields */ 6 /* Other data fields */ 858 7 }; 7 }; 816 7 }; 7 }; 859 8 rwlock_t listmutex; 8 spin 817 8 rwlock_t listmutex; 8 spinlock_t listmutex; 860 9 struct el head; 9 stru 818 9 struct el head; 9 struct el head; 861 819 862 :: 820 :: 863 821 864 1 int search(long key, int *result) 1 int 822 1 int search(long key, int *result) 1 int search(long key, int *result) 865 2 { 2 { 823 2 { 2 { 866 3 struct list_head *lp; 3 s 824 3 struct list_head *lp; 3 struct list_head *lp; 867 4 struct el *p; 4 s 825 4 struct el *p; 4 struct el *p; 868 5 5 826 5 5 869 6 read_lock(&listmutex); 6 r 827 6 read_lock(&listmutex); 6 rcu_read_lock(); 870 7 list_for_each_entry(p, head, lp) { 7 l 828 7 list_for_each_entry(p, head, lp) { 7 list_for_each_entry_rcu(p, head, lp) { 871 8 if (p->key == key) { 8 829 8 if (p->key == key) { 8 if (p->key == key) { 872 9 *result = p->data; 9 830 9 *result = p->data; 9 *result = p->data; 873 10 read_unlock(&listmutex); 10 831 10 read_unlock(&listmutex); 10 rcu_read_unlock(); 874 11 return 1; 11 832 11 return 1; 11 return 1; 875 12 } 12 833 12 } 12 } 876 13 } 13 } 834 13 } 13 } 877 14 read_unlock(&listmutex); 14 r 835 14 read_unlock(&listmutex); 14 rcu_read_unlock(); 878 15 return 0; 15 r 836 15 return 0; 15 return 0; 879 16 } 16 } 837 16 } 16 } 880 838 881 :: 839 :: 882 840 883 1 int delete(long key) 1 int 841 1 int delete(long key) 1 int delete(long key) 884 2 { 2 { 842 2 { 2 { 885 3 struct el *p; 3 s 843 3 struct el *p; 3 struct el *p; 886 4 4 844 4 4 887 5 write_lock(&listmutex); 5 s 845 5 write_lock(&listmutex); 5 spin_lock(&listmutex); 888 6 list_for_each_entry(p, head, lp) { 6 l 846 6 list_for_each_entry(p, head, lp) { 6 list_for_each_entry(p, head, lp) { 889 7 if (p->key == key) { 7 847 7 if (p->key == key) { 7 if (p->key == key) { 890 8 list_del(&p->list); 8 848 8 list_del(&p->list); 8 list_del_rcu(&p->list); 891 9 write_unlock(&listmutex); 9 849 9 write_unlock(&listmutex); 9 spin_unlock(&listmutex); 892 10 850 10 synchronize_rcu(); 893 10 kfree(p); 11 851 10 kfree(p); 11 kfree(p); 894 11 return 1; 12 852 11 return 1; 12 return 1; 895 12 } 13 853 12 } 13 } 896 13 } 14 } 854 13 } 14 } 897 14 write_unlock(&listmutex); 15 s 855 14 write_unlock(&listmutex); 15 spin_unlock(&listmutex); 898 15 return 0; 16 r 856 15 return 0; 16 return 0; 899 16 } 17 } 857 16 } 17 } 900 858 901 Either way, the differences are quite small. 859 Either way, the differences are quite small. Read-side locking moves 902 to rcu_read_lock() and rcu_read_unlock, update 860 to rcu_read_lock() and rcu_read_unlock, update-side locking moves from 903 a reader-writer lock to a simple spinlock, and 861 a reader-writer lock to a simple spinlock, and a synchronize_rcu() 904 precedes the kfree(). 862 precedes the kfree(). 905 863 906 However, there is one potential catch: the rea 864 However, there is one potential catch: the read-side and update-side 907 critical sections can now run concurrently. I 865 critical sections can now run concurrently. In many cases, this will 908 not be a problem, but it is necessary to check 866 not be a problem, but it is necessary to check carefully regardless. 909 For example, if multiple independent list upda 867 For example, if multiple independent list updates must be seen as 910 a single atomic update, converting to RCU will 868 a single atomic update, converting to RCU will require special care. 911 869 912 Also, the presence of synchronize_rcu() means 870 Also, the presence of synchronize_rcu() means that the RCU version of 913 delete() can now block. If this is a problem, 871 delete() can now block. If this is a problem, there is a callback-based 914 mechanism that never blocks, namely call_rcu() 872 mechanism that never blocks, namely call_rcu() or kfree_rcu(), that can 915 be used in place of synchronize_rcu(). 873 be used in place of synchronize_rcu(). 916 874 917 .. _7_whatisRCU: 875 .. _7_whatisRCU: 918 876 919 7. ANALOGY WITH REFERENCE COUNTING 877 7. ANALOGY WITH REFERENCE COUNTING 920 ----------------------------------- 878 ----------------------------------- 921 879 922 The reader-writer analogy (illustrated by the 880 The reader-writer analogy (illustrated by the previous section) is not 923 always the best way to think about using RCU. 881 always the best way to think about using RCU. Another helpful analogy 924 considers RCU an effective reference count on 882 considers RCU an effective reference count on everything which is 925 protected by RCU. 883 protected by RCU. 926 884 927 A reference count typically does not prevent t 885 A reference count typically does not prevent the referenced object's 928 values from changing, but does prevent changes 886 values from changing, but does prevent changes to type -- particularly the 929 gross change of type that happens when that ob 887 gross change of type that happens when that object's memory is freed and 930 re-allocated for some other purpose. Once a t 888 re-allocated for some other purpose. Once a type-safe reference to the 931 object is obtained, some other mechanism is ne 889 object is obtained, some other mechanism is needed to ensure consistent 932 access to the data in the object. This could 890 access to the data in the object. This could involve taking a spinlock, 933 but with RCU the typical approach is to perfor 891 but with RCU the typical approach is to perform reads with SMP-aware 934 operations such as smp_load_acquire(), to perf 892 operations such as smp_load_acquire(), to perform updates with atomic 935 read-modify-write operations, and to provide t 893 read-modify-write operations, and to provide the necessary ordering. 936 RCU provides a number of support functions tha 894 RCU provides a number of support functions that embed the required 937 operations and ordering, such as the list_for_ 895 operations and ordering, such as the list_for_each_entry_rcu() macro 938 used in the previous section. 896 used in the previous section. 939 897 940 A more focused view of the reference counting 898 A more focused view of the reference counting behavior is that, 941 between rcu_read_lock() and rcu_read_unlock(), 899 between rcu_read_lock() and rcu_read_unlock(), any reference taken with 942 rcu_dereference() on a pointer marked as ``__r 900 rcu_dereference() on a pointer marked as ``__rcu`` can be treated as 943 though a reference-count on that object has be 901 though a reference-count on that object has been temporarily increased. 944 This prevents the object from changing type. 902 This prevents the object from changing type. Exactly what this means 945 will depend on normal expectations of objects 903 will depend on normal expectations of objects of that type, but it 946 typically includes that spinlocks can still be 904 typically includes that spinlocks can still be safely locked, normal 947 reference counters can be safely manipulated, 905 reference counters can be safely manipulated, and ``__rcu`` pointers 948 can be safely dereferenced. 906 can be safely dereferenced. 949 907 950 Some operations that one might expect to see o 908 Some operations that one might expect to see on an object for 951 which an RCU reference is held include: 909 which an RCU reference is held include: 952 910 953 - Copying out data that is guaranteed to be s 911 - Copying out data that is guaranteed to be stable by the object's type. 954 - Using kref_get_unless_zero() or similar to 912 - Using kref_get_unless_zero() or similar to get a longer-term 955 reference. This may fail of course. 913 reference. This may fail of course. 956 - Acquiring a spinlock in the object, and che 914 - Acquiring a spinlock in the object, and checking if the object still 957 is the expected object and if so, manipulat 915 is the expected object and if so, manipulating it freely. 958 916 959 The understanding that RCU provides a referenc 917 The understanding that RCU provides a reference that only prevents a 960 change of type is particularly visible with ob 918 change of type is particularly visible with objects allocated from a 961 slab cache marked ``SLAB_TYPESAFE_BY_RCU``. R 919 slab cache marked ``SLAB_TYPESAFE_BY_RCU``. RCU operations may yield a 962 reference to an object from such a cache that 920 reference to an object from such a cache that has been concurrently freed 963 and the memory reallocated to a completely dif 921 and the memory reallocated to a completely different object, though of 964 the same type. In this case RCU doesn't even 922 the same type. In this case RCU doesn't even protect the identity of the 965 object from changing, only its type. So the o 923 object from changing, only its type. So the object found may not be the 966 one expected, but it will be one where it is s 924 one expected, but it will be one where it is safe to take a reference 967 (and then potentially acquiring a spinlock), a 925 (and then potentially acquiring a spinlock), allowing subsequent code 968 to check whether the identity matches expectat 926 to check whether the identity matches expectations. It is tempting 969 to simply acquire the spinlock without first t 927 to simply acquire the spinlock without first taking the reference, but 970 unfortunately any spinlock in a ``SLAB_TYPESAF 928 unfortunately any spinlock in a ``SLAB_TYPESAFE_BY_RCU`` object must be 971 initialized after each and every call to kmem_ 929 initialized after each and every call to kmem_cache_alloc(), which renders 972 reference-free spinlock acquisition completely 930 reference-free spinlock acquisition completely unsafe. Therefore, when 973 using ``SLAB_TYPESAFE_BY_RCU``, make proper us 931 using ``SLAB_TYPESAFE_BY_RCU``, make proper use of a reference counter. 974 (Those willing to initialize their locks in a << 975 may also use locking, including cache-friendly << 976 932 977 With traditional reference counting -- such as 933 With traditional reference counting -- such as that implemented by the 978 kref library in Linux -- there is typically co 934 kref library in Linux -- there is typically code that runs when the last 979 reference to an object is dropped. With kref, 935 reference to an object is dropped. With kref, this is the function 980 passed to kref_put(). When RCU is being used, 936 passed to kref_put(). When RCU is being used, such finalization code 981 must not be run until all ``__rcu`` pointers r 937 must not be run until all ``__rcu`` pointers referencing the object have 982 been updated, and then a grace period has pass 938 been updated, and then a grace period has passed. Every remaining 983 globally visible pointer to the object must be 939 globally visible pointer to the object must be considered to be a 984 potential counted reference, and the finalizat 940 potential counted reference, and the finalization code is typically run 985 using call_rcu() only after all those pointers 941 using call_rcu() only after all those pointers have been changed. 986 942 987 To see how to choose between these two analogi 943 To see how to choose between these two analogies -- of RCU as a 988 reader-writer lock and RCU as a reference coun 944 reader-writer lock and RCU as a reference counting system -- it is useful 989 to reflect on the scale of the thing being pro 945 to reflect on the scale of the thing being protected. The reader-writer 990 lock analogy looks at larger multi-part object 946 lock analogy looks at larger multi-part objects such as a linked list 991 and shows how RCU can facilitate concurrency w 947 and shows how RCU can facilitate concurrency while elements are added 992 to, and removed from, the list. The reference 948 to, and removed from, the list. The reference-count analogy looks at 993 the individual objects and looks at how they c 949 the individual objects and looks at how they can be accessed safely 994 within whatever whole they are a part of. 950 within whatever whole they are a part of. 995 951 996 .. _8_whatisRCU: 952 .. _8_whatisRCU: 997 953 998 8. FULL LIST OF RCU APIs 954 8. FULL LIST OF RCU APIs 999 ------------------------- 955 ------------------------- 1000 956 1001 The RCU APIs are documented in docbook-format 957 The RCU APIs are documented in docbook-format header comments in the 1002 Linux-kernel source code, but it helps to hav 958 Linux-kernel source code, but it helps to have a full list of the 1003 APIs, since there does not appear to be a way 959 APIs, since there does not appear to be a way to categorize them 1004 in docbook. Here is the list, by category. 960 in docbook. Here is the list, by category. 1005 961 1006 RCU list traversal:: 962 RCU list traversal:: 1007 963 1008 list_entry_rcu 964 list_entry_rcu 1009 list_entry_lockless 965 list_entry_lockless 1010 list_first_entry_rcu 966 list_first_entry_rcu 1011 list_next_rcu 967 list_next_rcu 1012 list_for_each_entry_rcu 968 list_for_each_entry_rcu 1013 list_for_each_entry_continue_rcu 969 list_for_each_entry_continue_rcu 1014 list_for_each_entry_from_rcu 970 list_for_each_entry_from_rcu 1015 list_first_or_null_rcu 971 list_first_or_null_rcu 1016 list_next_or_null_rcu 972 list_next_or_null_rcu 1017 hlist_first_rcu 973 hlist_first_rcu 1018 hlist_next_rcu 974 hlist_next_rcu 1019 hlist_pprev_rcu 975 hlist_pprev_rcu 1020 hlist_for_each_entry_rcu 976 hlist_for_each_entry_rcu 1021 hlist_for_each_entry_rcu_bh 977 hlist_for_each_entry_rcu_bh 1022 hlist_for_each_entry_from_rcu 978 hlist_for_each_entry_from_rcu 1023 hlist_for_each_entry_continue_rcu 979 hlist_for_each_entry_continue_rcu 1024 hlist_for_each_entry_continue_rcu_bh 980 hlist_for_each_entry_continue_rcu_bh 1025 hlist_nulls_first_rcu 981 hlist_nulls_first_rcu 1026 hlist_nulls_for_each_entry_rcu 982 hlist_nulls_for_each_entry_rcu 1027 hlist_bl_first_rcu 983 hlist_bl_first_rcu 1028 hlist_bl_for_each_entry_rcu 984 hlist_bl_for_each_entry_rcu 1029 985 1030 RCU pointer/list update:: 986 RCU pointer/list update:: 1031 987 1032 rcu_assign_pointer 988 rcu_assign_pointer 1033 list_add_rcu 989 list_add_rcu 1034 list_add_tail_rcu 990 list_add_tail_rcu 1035 list_del_rcu 991 list_del_rcu 1036 list_replace_rcu 992 list_replace_rcu 1037 hlist_add_behind_rcu 993 hlist_add_behind_rcu 1038 hlist_add_before_rcu 994 hlist_add_before_rcu 1039 hlist_add_head_rcu 995 hlist_add_head_rcu 1040 hlist_add_tail_rcu 996 hlist_add_tail_rcu 1041 hlist_del_rcu 997 hlist_del_rcu 1042 hlist_del_init_rcu 998 hlist_del_init_rcu 1043 hlist_replace_rcu 999 hlist_replace_rcu 1044 list_splice_init_rcu 1000 list_splice_init_rcu 1045 list_splice_tail_init_rcu 1001 list_splice_tail_init_rcu 1046 hlist_nulls_del_init_rcu 1002 hlist_nulls_del_init_rcu 1047 hlist_nulls_del_rcu 1003 hlist_nulls_del_rcu 1048 hlist_nulls_add_head_rcu 1004 hlist_nulls_add_head_rcu 1049 hlist_bl_add_head_rcu 1005 hlist_bl_add_head_rcu 1050 hlist_bl_del_init_rcu 1006 hlist_bl_del_init_rcu 1051 hlist_bl_del_rcu 1007 hlist_bl_del_rcu 1052 hlist_bl_set_first_rcu 1008 hlist_bl_set_first_rcu 1053 1009 1054 RCU:: 1010 RCU:: 1055 1011 1056 Critical sections Grace period 1012 Critical sections Grace period Barrier 1057 1013 1058 rcu_read_lock synchronize_n 1014 rcu_read_lock synchronize_net rcu_barrier 1059 rcu_read_unlock synchronize_r 1015 rcu_read_unlock synchronize_rcu 1060 rcu_dereference synchronize_r 1016 rcu_dereference synchronize_rcu_expedited 1061 rcu_read_lock_held call_rcu 1017 rcu_read_lock_held call_rcu 1062 rcu_dereference_check kfree_rcu 1018 rcu_dereference_check kfree_rcu 1063 rcu_dereference_protected 1019 rcu_dereference_protected 1064 1020 1065 bh:: 1021 bh:: 1066 1022 1067 Critical sections Grace period 1023 Critical sections Grace period Barrier 1068 1024 1069 rcu_read_lock_bh call_rcu 1025 rcu_read_lock_bh call_rcu rcu_barrier 1070 rcu_read_unlock_bh synchronize_r 1026 rcu_read_unlock_bh synchronize_rcu 1071 [local_bh_disable] synchronize_r 1027 [local_bh_disable] synchronize_rcu_expedited 1072 [and friends] 1028 [and friends] 1073 rcu_dereference_bh 1029 rcu_dereference_bh 1074 rcu_dereference_bh_check 1030 rcu_dereference_bh_check 1075 rcu_dereference_bh_protected 1031 rcu_dereference_bh_protected 1076 rcu_read_lock_bh_held 1032 rcu_read_lock_bh_held 1077 1033 1078 sched:: 1034 sched:: 1079 1035 1080 Critical sections Grace period 1036 Critical sections Grace period Barrier 1081 1037 1082 rcu_read_lock_sched call_rcu 1038 rcu_read_lock_sched call_rcu rcu_barrier 1083 rcu_read_unlock_sched synchronize_r 1039 rcu_read_unlock_sched synchronize_rcu 1084 [preempt_disable] synchronize_r 1040 [preempt_disable] synchronize_rcu_expedited 1085 [and friends] 1041 [and friends] 1086 rcu_read_lock_sched_notrace 1042 rcu_read_lock_sched_notrace 1087 rcu_read_unlock_sched_notrace 1043 rcu_read_unlock_sched_notrace 1088 rcu_dereference_sched 1044 rcu_dereference_sched 1089 rcu_dereference_sched_check 1045 rcu_dereference_sched_check 1090 rcu_dereference_sched_protected 1046 rcu_dereference_sched_protected 1091 rcu_read_lock_sched_held 1047 rcu_read_lock_sched_held 1092 1048 1093 1049 1094 RCU-Tasks:: << 1095 << 1096 Critical sections Grace period << 1097 << 1098 N/A call_rcu_task << 1099 synchronize_r << 1100 << 1101 << 1102 RCU-Tasks-Rude:: << 1103 << 1104 Critical sections Grace period << 1105 << 1106 N/A call_rcu_task << 1107 synchronize_r << 1108 << 1109 << 1110 RCU-Tasks-Trace:: << 1111 << 1112 Critical sections Grace period << 1113 << 1114 rcu_read_lock_trace call_rcu_task << 1115 rcu_read_unlock_trace synchronize_r << 1116 << 1117 << 1118 SRCU:: 1050 SRCU:: 1119 1051 1120 Critical sections Grace period 1052 Critical sections Grace period Barrier 1121 1053 1122 srcu_read_lock call_srcu 1054 srcu_read_lock call_srcu srcu_barrier 1123 srcu_read_unlock synchronize_s 1055 srcu_read_unlock synchronize_srcu 1124 srcu_dereference synchronize_s 1056 srcu_dereference synchronize_srcu_expedited 1125 srcu_dereference_check 1057 srcu_dereference_check 1126 srcu_read_lock_held 1058 srcu_read_lock_held 1127 1059 1128 SRCU: Initialization/cleanup:: 1060 SRCU: Initialization/cleanup:: 1129 1061 1130 DEFINE_SRCU 1062 DEFINE_SRCU 1131 DEFINE_STATIC_SRCU 1063 DEFINE_STATIC_SRCU 1132 init_srcu_struct 1064 init_srcu_struct 1133 cleanup_srcu_struct 1065 cleanup_srcu_struct 1134 1066 1135 All: lockdep-checked RCU utility APIs:: 1067 All: lockdep-checked RCU utility APIs:: 1136 1068 1137 RCU_LOCKDEP_WARN 1069 RCU_LOCKDEP_WARN 1138 rcu_sleep_check 1070 rcu_sleep_check >> 1071 RCU_NONIDLE 1139 1072 1140 All: Unchecked RCU-protected pointer access:: 1073 All: Unchecked RCU-protected pointer access:: 1141 1074 1142 rcu_dereference_raw 1075 rcu_dereference_raw 1143 1076 1144 All: Unchecked RCU-protected pointer access w 1077 All: Unchecked RCU-protected pointer access with dereferencing prohibited:: 1145 1078 1146 rcu_access_pointer 1079 rcu_access_pointer 1147 1080 1148 See the comment headers in the source code (o 1081 See the comment headers in the source code (or the docbook generated 1149 from them) for more information. 1082 from them) for more information. 1150 1083 1151 However, given that there are no fewer than f 1084 However, given that there are no fewer than four families of RCU APIs 1152 in the Linux kernel, how do you choose which 1085 in the Linux kernel, how do you choose which one to use? The following 1153 list can be helpful: 1086 list can be helpful: 1154 1087 1155 a. Will readers need to block? If so, y 1088 a. Will readers need to block? If so, you need SRCU. 1156 1089 1157 b. Will readers need to block and are yo !! 1090 b. What about the -rt patchset? If readers would need to block 1158 example, ftrace or BPF? If so, you n !! 1091 in an non-rt kernel, you need SRCU. If readers would block 1159 RCU-tasks-rude, and/or RCU-tasks-trac !! 1092 in a -rt kernel, but not in a non-rt kernel, SRCU is not 1160 !! 1093 necessary. (The -rt patchset turns spinlocks into sleeplocks, 1161 c. What about the -rt patchset? If read !! 1094 hence this distinction.) 1162 an non-rt kernel, you need SRCU. If << 1163 acquiring spinlocks in a -rt kernel, << 1164 SRCU is not necessary. (The -rt patc << 1165 sleeplocks, hence this distinction.) << 1166 1095 1167 d. Do you need to treat NMI handlers, ha !! 1096 c. Do you need to treat NMI handlers, hardirq handlers, 1168 and code segments with preemption dis 1097 and code segments with preemption disabled (whether 1169 via preempt_disable(), local_irq_save 1098 via preempt_disable(), local_irq_save(), local_bh_disable(), 1170 or some other mechanism) as if they w 1099 or some other mechanism) as if they were explicit RCU readers? 1171 If so, RCU-sched readers are the only !! 1100 If so, RCU-sched is the only choice that will work for you. 1172 for you, but since about v4.20 you us !! 1101 1173 update primitives. !! 1102 d. Do you need RCU grace periods to complete even in the face 1174 !! 1103 of softirq monopolization of one or more of the CPUs? For 1175 e. Do you need RCU grace periods to comp !! 1104 example, is your code subject to network-based denial-of-service 1176 softirq monopolization of one or more !! 1105 attacks? If so, you should disable softirq across your readers, 1177 is your code subject to network-based !! 1106 for example, by using rcu_read_lock_bh(). 1178 If so, you should disable softirq acr << 1179 example, by using rcu_read_lock_bh(). << 1180 use can use the vanilla RCU update pr << 1181 1107 1182 f. Is your workload too update-intensive !! 1108 e. Is your workload too update-intensive for normal use of 1183 RCU, but inappropriate for other sync 1109 RCU, but inappropriate for other synchronization mechanisms? 1184 If so, consider SLAB_TYPESAFE_BY_RCU 1110 If so, consider SLAB_TYPESAFE_BY_RCU (which was originally 1185 named SLAB_DESTROY_BY_RCU). But plea 1111 named SLAB_DESTROY_BY_RCU). But please be careful! 1186 1112 1187 g. Do you need read-side critical sectio !! 1113 f. Do you need read-side critical sections that are respected 1188 on CPUs that are deep in the idle loo !! 1114 even though they are in the middle of the idle loop, during 1189 from user-mode execution, or on an of !! 1115 user-mode execution, or on an offlined CPU? If so, SRCU is the 1190 and RCU Tasks Trace are the only choi !! 1116 only choice that will work for you. 1191 with SRCU being strongly preferred in << 1192 1117 1193 h. Otherwise, use RCU. !! 1118 g. Otherwise, use RCU. 1194 1119 1195 Of course, this all assumes that you have det 1120 Of course, this all assumes that you have determined that RCU is in fact 1196 the right tool for your job. 1121 the right tool for your job. 1197 1122 1198 .. _9_whatisRCU: 1123 .. _9_whatisRCU: 1199 1124 1200 9. ANSWERS TO QUICK QUIZZES 1125 9. ANSWERS TO QUICK QUIZZES 1201 ---------------------------- 1126 ---------------------------- 1202 1127 1203 Quick Quiz #1: 1128 Quick Quiz #1: 1204 Why is this argument naive? 1129 Why is this argument naive? How could a deadlock 1205 occur when using this algorit 1130 occur when using this algorithm in a real-world Linux 1206 kernel? [Referring to the lo 1131 kernel? [Referring to the lock-based "toy" RCU 1207 algorithm.] 1132 algorithm.] 1208 1133 1209 Answer: 1134 Answer: 1210 Consider the following sequen 1135 Consider the following sequence of events: 1211 1136 1212 1. CPU 0 acquires some u 1137 1. CPU 0 acquires some unrelated lock, call it 1213 "problematic_lock", d 1138 "problematic_lock", disabling irq via 1214 spin_lock_irqsave(). 1139 spin_lock_irqsave(). 1215 1140 1216 2. CPU 1 enters synchron 1141 2. CPU 1 enters synchronize_rcu(), write-acquiring 1217 rcu_gp_mutex. 1142 rcu_gp_mutex. 1218 1143 1219 3. CPU 0 enters rcu_read 1144 3. CPU 0 enters rcu_read_lock(), but must wait 1220 because CPU 1 holds r 1145 because CPU 1 holds rcu_gp_mutex. 1221 1146 1222 4. CPU 1 is interrupted, 1147 4. CPU 1 is interrupted, and the irq handler 1223 attempts to acquire p 1148 attempts to acquire problematic_lock. 1224 1149 1225 The system is now deadlocked. 1150 The system is now deadlocked. 1226 1151 1227 One way to avoid this deadloc 1152 One way to avoid this deadlock is to use an approach like 1228 that of CONFIG_PREEMPT_RT, wh 1153 that of CONFIG_PREEMPT_RT, where all normal spinlocks 1229 become blocking locks, and al 1154 become blocking locks, and all irq handlers execute in 1230 the context of special tasks. 1155 the context of special tasks. In this case, in step 4 1231 above, the irq handler would 1156 above, the irq handler would block, allowing CPU 1 to 1232 release rcu_gp_mutex, avoidin 1157 release rcu_gp_mutex, avoiding the deadlock. 1233 1158 1234 Even in the absence of deadlo 1159 Even in the absence of deadlock, this RCU implementation 1235 allows latency to "bleed" fro 1160 allows latency to "bleed" from readers to other 1236 readers through synchronize_r 1161 readers through synchronize_rcu(). To see this, 1237 consider task A in an RCU rea 1162 consider task A in an RCU read-side critical section 1238 (thus read-holding rcu_gp_mut 1163 (thus read-holding rcu_gp_mutex), task B blocked 1239 attempting to write-acquire r 1164 attempting to write-acquire rcu_gp_mutex, and 1240 task C blocked in rcu_read_lo 1165 task C blocked in rcu_read_lock() attempting to 1241 read_acquire rcu_gp_mutex. T 1166 read_acquire rcu_gp_mutex. Task A's RCU read-side 1242 latency is holding up task C, 1167 latency is holding up task C, albeit indirectly via 1243 task B. 1168 task B. 1244 1169 1245 Realtime RCU implementations 1170 Realtime RCU implementations therefore use a counter-based 1246 approach where tasks in RCU r 1171 approach where tasks in RCU read-side critical sections 1247 cannot be blocked by tasks ex 1172 cannot be blocked by tasks executing synchronize_rcu(). 1248 1173 1249 :ref:`Back to Quick Quiz #1 <quiz_1>` 1174 :ref:`Back to Quick Quiz #1 <quiz_1>` 1250 1175 1251 Quick Quiz #2: 1176 Quick Quiz #2: 1252 Give an example where Classic 1177 Give an example where Classic RCU's read-side 1253 overhead is **negative**. 1178 overhead is **negative**. 1254 1179 1255 Answer: 1180 Answer: 1256 Imagine a single-CPU system w 1181 Imagine a single-CPU system with a non-CONFIG_PREEMPTION 1257 kernel where a routing table 1182 kernel where a routing table is used by process-context 1258 code, but can be updated by i 1183 code, but can be updated by irq-context code (for example, 1259 by an "ICMP REDIRECT" packet) 1184 by an "ICMP REDIRECT" packet). The usual way of handling 1260 this would be to have the pro 1185 this would be to have the process-context code disable 1261 interrupts while searching th 1186 interrupts while searching the routing table. Use of 1262 RCU allows such interrupt-dis 1187 RCU allows such interrupt-disabling to be dispensed with. 1263 Thus, without RCU, you pay th 1188 Thus, without RCU, you pay the cost of disabling interrupts, 1264 and with RCU you don't. 1189 and with RCU you don't. 1265 1190 1266 One can argue that the overhe 1191 One can argue that the overhead of RCU in this 1267 case is negative with respect 1192 case is negative with respect to the single-CPU 1268 interrupt-disabling approach. 1193 interrupt-disabling approach. Others might argue that 1269 the overhead of RCU is merely 1194 the overhead of RCU is merely zero, and that replacing 1270 the positive overhead of the 1195 the positive overhead of the interrupt-disabling scheme 1271 with the zero-overhead RCU sc 1196 with the zero-overhead RCU scheme does not constitute 1272 negative overhead. 1197 negative overhead. 1273 1198 1274 In real life, of course, thin 1199 In real life, of course, things are more complex. But 1275 even the theoretical possibil 1200 even the theoretical possibility of negative overhead for 1276 a synchronization primitive i 1201 a synchronization primitive is a bit unexpected. ;-) 1277 1202 1278 :ref:`Back to Quick Quiz #2 <quiz_2>` 1203 :ref:`Back to Quick Quiz #2 <quiz_2>` 1279 1204 1280 Quick Quiz #3: 1205 Quick Quiz #3: 1281 If it is illegal to block in 1206 If it is illegal to block in an RCU read-side 1282 critical section, what the he 1207 critical section, what the heck do you do in 1283 CONFIG_PREEMPT_RT, where norm 1208 CONFIG_PREEMPT_RT, where normal spinlocks can block??? 1284 1209 1285 Answer: 1210 Answer: 1286 Just as CONFIG_PREEMPT_RT per 1211 Just as CONFIG_PREEMPT_RT permits preemption of spinlock 1287 critical sections, it permits 1212 critical sections, it permits preemption of RCU 1288 read-side critical sections. 1213 read-side critical sections. It also permits 1289 spinlocks blocking while in R 1214 spinlocks blocking while in RCU read-side critical 1290 sections. 1215 sections. 1291 1216 1292 Why the apparent inconsistenc 1217 Why the apparent inconsistency? Because it is 1293 possible to use priority boos 1218 possible to use priority boosting to keep the RCU 1294 grace periods short if need b 1219 grace periods short if need be (for example, if running 1295 short of memory). In contras 1220 short of memory). In contrast, if blocking waiting 1296 for (say) network reception, 1221 for (say) network reception, there is no way to know 1297 what should be boosted. Espe 1222 what should be boosted. Especially given that the 1298 process we need to boost migh 1223 process we need to boost might well be a human being 1299 who just went out for a pizza 1224 who just went out for a pizza or something. And although 1300 a computer-operated cattle pr 1225 a computer-operated cattle prod might arouse serious 1301 interest, it might also provo 1226 interest, it might also provoke serious objections. 1302 Besides, how does the compute 1227 Besides, how does the computer know what pizza parlor 1303 the human being went to??? 1228 the human being went to??? 1304 1229 1305 :ref:`Back to Quick Quiz #3 <quiz_3>` 1230 :ref:`Back to Quick Quiz #3 <quiz_3>` 1306 1231 1307 ACKNOWLEDGEMENTS 1232 ACKNOWLEDGEMENTS 1308 1233 1309 My thanks to the people who helped make this 1234 My thanks to the people who helped make this human-readable, including 1310 Jon Walpole, Josh Triplett, Serge Hallyn, Suz 1235 Jon Walpole, Josh Triplett, Serge Hallyn, Suzanne Wood, and Alan Stern. 1311 1236 1312 1237 1313 For more information, see http://www.rdrop.co 1238 For more information, see http://www.rdrop.com/users/paulmck/RCU.
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.