diff options
| author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2010-01-14 19:10:57 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2010-01-16 04:25:22 -0500 |
| commit | 4c54005ca438a8b46dd542b497d4f0dc2ca375e8 (patch) | |
| tree | 4274fb9dcbd94480b93fecefcf83969db53461ba | |
| parent | b6407e863934965cdc66cbc244d811ceeb6f4d77 (diff) | |
rcu: 1Q2010 update for RCU documentation
Add expedited functions. Review documentation and update
obsolete verbiage. Also fix the advice for the RCU CPU-stall
kernel configuration parameter, and document RCU CPU-stall
warnings.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: mathieu.desnoyers@polymtl.ca
Cc: josh@joshtriplett.org
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
Cc: rostedt@goodmis.org
Cc: Valdis.Kletnieks@vt.edu
Cc: dhowells@redhat.com
LKML-Reference: <12635142581866-git-send-email->
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | Documentation/RCU/00-INDEX | 8 | ||||
| -rw-r--r-- | Documentation/RCU/RTFP.txt | 58 | ||||
| -rw-r--r-- | Documentation/RCU/checklist.txt | 200 | ||||
| -rw-r--r-- | Documentation/RCU/rcu.txt | 48 | ||||
| -rw-r--r-- | Documentation/RCU/stallwarn.txt | 58 | ||||
| -rw-r--r-- | Documentation/RCU/torture.txt | 12 | ||||
| -rw-r--r-- | Documentation/RCU/whatisRCU.txt | 3 | ||||
| -rw-r--r-- | Documentation/filesystems/dentry-locking.txt | 3 | ||||
| -rw-r--r-- | lib/Kconfig.debug | 4 |
9 files changed, 258 insertions, 136 deletions
diff --git a/Documentation/RCU/00-INDEX b/Documentation/RCU/00-INDEX index 9bb62f7b89c3..0a27ea9621fa 100644 --- a/Documentation/RCU/00-INDEX +++ b/Documentation/RCU/00-INDEX | |||
| @@ -8,14 +8,18 @@ listRCU.txt | |||
| 8 | - Using RCU to Protect Read-Mostly Linked Lists | 8 | - Using RCU to Protect Read-Mostly Linked Lists |
| 9 | NMI-RCU.txt | 9 | NMI-RCU.txt |
| 10 | - Using RCU to Protect Dynamic NMI Handlers | 10 | - Using RCU to Protect Dynamic NMI Handlers |
| 11 | rcubarrier.txt | ||
| 12 | - RCU and Unloadable Modules | ||
| 13 | rculist_nulls.txt | ||
| 14 | - RCU list primitives for use with SLAB_DESTROY_BY_RCU | ||
| 11 | rcuref.txt | 15 | rcuref.txt |
| 12 | - Reference-count design for elements of lists/arrays protected by RCU | 16 | - Reference-count design for elements of lists/arrays protected by RCU |
| 13 | rcu.txt | 17 | rcu.txt |
| 14 | - RCU Concepts | 18 | - RCU Concepts |
| 15 | rcubarrier.txt | ||
| 16 | - Unloading modules that use RCU callbacks | ||
| 17 | RTFP.txt | 19 | RTFP.txt |
| 18 | - List of RCU papers (bibliography) going back to 1980. | 20 | - List of RCU papers (bibliography) going back to 1980. |
| 21 | stallwarn.txt | ||
| 22 | - RCU CPU stall warnings (CONFIG_RCU_CPU_STALL_DETECTOR) | ||
| 19 | torture.txt | 23 | torture.txt |
| 20 | - RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST) | 24 | - RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST) |
| 21 | trace.txt | 25 | trace.txt |
diff --git a/Documentation/RCU/RTFP.txt b/Documentation/RCU/RTFP.txt index d2b85237c76e..5051209e6835 100644 --- a/Documentation/RCU/RTFP.txt +++ b/Documentation/RCU/RTFP.txt | |||
| @@ -25,10 +25,10 @@ to be referencing the data structure. However, this mechanism was not | |||
| 25 | optimized for modern computer systems, which is not surprising given | 25 | optimized for modern computer systems, which is not surprising given |
| 26 | that these overheads were not so expensive in the mid-80s. Nonetheless, | 26 | that these overheads were not so expensive in the mid-80s. Nonetheless, |
| 27 | passive serialization appears to be the first deferred-destruction | 27 | passive serialization appears to be the first deferred-destruction |
| 28 | mechanism to be used in production. Furthermore, the relevant patent has | 28 | mechanism to be used in production. Furthermore, the relevant patent |
| 29 | lapsed, so this approach may be used in non-GPL software, if desired. | 29 | has lapsed, so this approach may be used in non-GPL software, if desired. |
| 30 | (In contrast, use of RCU is permitted only in software licensed under | 30 | (In contrast, implementation of RCU is permitted only in software licensed |
| 31 | GPL. Sorry!!!) | 31 | under either GPL or LGPL. Sorry!!!) |
| 32 | 32 | ||
| 33 | In 1990, Pugh [Pugh90] noted that explicitly tracking which threads | 33 | In 1990, Pugh [Pugh90] noted that explicitly tracking which threads |
| 34 | were reading a given data structure permitted deferred free to operate | 34 | were reading a given data structure permitted deferred free to operate |
| @@ -150,6 +150,18 @@ preemptible RCU [PaulEMcKenney2007PreemptibleRCU], and the three-part | |||
| 150 | LWN "What is RCU?" series [PaulEMcKenney2007WhatIsRCUFundamentally, | 150 | LWN "What is RCU?" series [PaulEMcKenney2007WhatIsRCUFundamentally, |
| 151 | PaulEMcKenney2008WhatIsRCUUsage, and PaulEMcKenney2008WhatIsRCUAPI]. | 151 | PaulEMcKenney2008WhatIsRCUUsage, and PaulEMcKenney2008WhatIsRCUAPI]. |
| 152 | 152 | ||
| 153 | 2008 saw a journal paper on real-time RCU [DinakarGuniguntala2008IBMSysJ], | ||
| 154 | a history of how Linux changed RCU more than RCU changed Linux | ||
| 155 | [PaulEMcKenney2008RCUOSR], and a design overview of hierarchical RCU | ||
| 156 | [PaulEMcKenney2008HierarchicalRCU]. | ||
| 157 | |||
| 158 | 2009 introduced user-level RCU algorithms [PaulEMcKenney2009MaliciousURCU], | ||
| 159 | which Mathieu Desnoyers is now maintaining [MathieuDesnoyers2009URCU] | ||
| 160 | [MathieuDesnoyersPhD]. TINY_RCU [PaulEMcKenney2009BloatWatchRCU] made | ||
| 161 | its appearance, as did expedited RCU [PaulEMcKenney2009expeditedRCU]. | ||
| 162 | The problem of resizeable RCU-protected hash tables may now be on a path | ||
| 163 | to a solution [JoshTriplett2009RPHash]. | ||
| 164 | |||
| 153 | Bibtex Entries | 165 | Bibtex Entries |
| 154 | 166 | ||
| 155 | @article{Kung80 | 167 | @article{Kung80 |
| @@ -730,6 +742,11 @@ Revised: | |||
| 730 | " | 742 | " |
| 731 | } | 743 | } |
| 732 | 744 | ||
| 745 | # | ||
| 746 | # "What is RCU?" LWN series. | ||
| 747 | # | ||
| 748 | ######################################################################## | ||
| 749 | |||
| 733 | @article{DinakarGuniguntala2008IBMSysJ | 750 | @article{DinakarGuniguntala2008IBMSysJ |
| 734 | ,author="D. Guniguntala and P. E. McKenney and J. Triplett and J. Walpole" | 751 | ,author="D. Guniguntala and P. E. McKenney and J. Triplett and J. Walpole" |
| 735 | ,title="The read-copy-update mechanism for supporting real-time applications on shared-memory multiprocessor systems with {Linux}" | 752 | ,title="The read-copy-update mechanism for supporting real-time applications on shared-memory multiprocessor systems with {Linux}" |
| @@ -820,3 +837,36 @@ Revised: | |||
| 820 | Uniprocessor assumptions allow simplified RCU implementation. | 837 | Uniprocessor assumptions allow simplified RCU implementation. |
| 821 | " | 838 | " |
| 822 | } | 839 | } |
| 840 | |||
| 841 | @unpublished{PaulEMcKenney2009expeditedRCU | ||
| 842 | ,Author="Paul E. McKenney" | ||
| 843 | ,Title="[{PATCH} -tip 0/3] expedited 'big hammer' {RCU} grace periods" | ||
| 844 | ,month="June" | ||
| 845 | ,day="25" | ||
| 846 | ,year="2009" | ||
| 847 | ,note="Available: | ||
| 848 | \url{http://lkml.org/lkml/2009/6/25/306} | ||
| 849 | [Viewed August 16, 2009]" | ||
| 850 | ,annotation=" | ||
| 851 | First posting of expedited RCU to be accepted into -tip. | ||
| 852 | " | ||
| 853 | } | ||
| 854 | |||
| 855 | @unpublished{JoshTriplett2009RPHash | ||
| 856 | ,Author="Josh Triplett" | ||
| 857 | ,Title="Scalable concurrent hash tables via relativistic programming" | ||
| 858 | ,month="September" | ||
| 859 | ,year="2009" | ||
| 860 | ,note="Linux Plumbers Conference presentation" | ||
| 861 | ,annotation=" | ||
| 862 | RP fun with hash tables. | ||
| 863 | " | ||
| 864 | } | ||
| 865 | |||
| 866 | @phdthesis{MathieuDesnoyersPhD | ||
| 867 | , title = "Low-impact Operating System Tracing" | ||
| 868 | , author = "Mathieu Desnoyers" | ||
| 869 | , school = "Ecole Polytechnique de Montr\'{e}al" | ||
| 870 | , month = "December" | ||
| 871 | , year = 2009 | ||
| 872 | } | ||
diff --git a/Documentation/RCU/checklist.txt b/Documentation/RCU/checklist.txt index 51525a30e8b4..767cf06a4276 100644 --- a/Documentation/RCU/checklist.txt +++ b/Documentation/RCU/checklist.txt | |||
| @@ -8,13 +8,12 @@ would cause. This list is based on experiences reviewing such patches | |||
| 8 | over a rather long period of time, but improvements are always welcome! | 8 | over a rather long period of time, but improvements are always welcome! |
| 9 | 9 | ||
| 10 | 0. Is RCU being applied to a read-mostly situation? If the data | 10 | 0. Is RCU being applied to a read-mostly situation? If the data |
| 11 | structure is updated more than about 10% of the time, then | 11 | structure is updated more than about 10% of the time, then you |
| 12 | you should strongly consider some other approach, unless | 12 | should strongly consider some other approach, unless detailed |
| 13 | detailed performance measurements show that RCU is nonetheless | 13 | performance measurements show that RCU is nonetheless the right |
| 14 | the right tool for the job. Yes, you might think of RCU | 14 | tool for the job. Yes, RCU does reduce read-side overhead by |
| 15 | as simply cutting overhead off of the readers and imposing it | 15 | increasing write-side overhead, which is exactly why normal uses |
| 16 | on the writers. That is exactly why normal uses of RCU will | 16 | of RCU will do much more reading than updating. |
| 17 | do much more reading than updating. | ||
| 18 | 17 | ||
| 19 | Another exception is where performance is not an issue, and RCU | 18 | Another exception is where performance is not an issue, and RCU |
| 20 | provides a simpler implementation. An example of this situation | 19 | provides a simpler implementation. An example of this situation |
| @@ -35,13 +34,13 @@ over a rather long period of time, but improvements are always welcome! | |||
| 35 | 34 | ||
| 36 | If you choose #b, be prepared to describe how you have handled | 35 | If you choose #b, be prepared to describe how you have handled |
| 37 | memory barriers on weakly ordered machines (pretty much all of | 36 | memory barriers on weakly ordered machines (pretty much all of |
| 38 | them -- even x86 allows reads to be reordered), and be prepared | 37 | them -- even x86 allows later loads to be reordered to precede |
| 39 | to explain why this added complexity is worthwhile. If you | 38 | earlier stores), and be prepared to explain why this added |
| 40 | choose #c, be prepared to explain how this single task does not | 39 | complexity is worthwhile. If you choose #c, be prepared to |
| 41 | become a major bottleneck on big multiprocessor machines (for | 40 | explain how this single task does not become a major bottleneck on |
| 42 | example, if the task is updating information relating to itself | 41 | big multiprocessor machines (for example, if the task is updating |
| 43 | that other tasks can read, there by definition can be no | 42 | information relating to itself that other tasks can read, there |
| 44 | bottleneck). | 43 | by definition can be no bottleneck). |
| 45 | 44 | ||
| 46 | 2. Do the RCU read-side critical sections make proper use of | 45 | 2. Do the RCU read-side critical sections make proper use of |
| 47 | rcu_read_lock() and friends? These primitives are needed | 46 | rcu_read_lock() and friends? These primitives are needed |
| @@ -51,8 +50,10 @@ over a rather long period of time, but improvements are always welcome! | |||
| 51 | actuarial risk of your kernel. | 50 | actuarial risk of your kernel. |
| 52 | 51 | ||
| 53 | As a rough rule of thumb, any dereference of an RCU-protected | 52 | As a rough rule of thumb, any dereference of an RCU-protected |
| 54 | pointer must be covered by rcu_read_lock() or rcu_read_lock_bh() | ||
