This section is organized as a series of Quick Quizzes that invite you to apply RCU to a number of examples earlier in this book. The answer to each Quick Quiz gives some hints, and also contains a pointer to a later section where the solution is explained at length. The rcu_read_lock(), rcu_read_unlock(), rcu_dereference(), rcu_assign_pointer(), and synchronize_rcu() primitives should suffice for most of these exercises.
Quick Quiz 10.61:
The statistical-counter implementation shown in
Figure
(count_end.c)
used a global lock to guard the summation in read_count(),
which resulted in poor performance and negative scalability.
How could you use RCU to provide read_count() with
excellent performance and good scalability.
(Keep in mind that read_count()'s scalability will
necessarily be limited by its need to scan all threads'
counters.)
End Quick Quiz
Quick Quiz 10.62:
Section
showed a fanciful pair of code fragments that dealt with counting
I/O accesses to removable devices.
These code fragments suffered from high overhead on the fastpath
(starting an I/O) due to the need to acquire a reader-writer
lock.
How would you use RCU to provide excellent performance and
scalability?
(Keep in mind that the performance of the common-case first
code fragment that does I/O accesses is much more important
than that of the device-removal code fragment.)
End Quick Quiz
Paul E. McKenney 2011-12-16