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