diff options
author | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2014-02-15 11:52:32 -0500 |
---|---|---|
committer | Paul E. McKenney <paulmck@linux.vnet.ibm.com> | 2014-02-17 17:56:10 -0500 |
commit | e4696a1d3b1125d427de685531a44258ea6263df (patch) | |
tree | 1cf8e3104b8ee9205d782bd24f3b31c66c3a540c /Documentation/RCU | |
parent | 9b2b3bf53124dca4ac815bd2fca53a31e5e262bd (diff) |
documentation: Fix some inconsistencies in RTFP.txt
Some of the early history leaves out some citations and vice versa. This
commit fixes these up.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
Diffstat (limited to 'Documentation/RCU')
-rw-r--r-- | Documentation/RCU/RTFP.txt | 149 |
1 files changed, 125 insertions, 24 deletions
diff --git a/Documentation/RCU/RTFP.txt b/Documentation/RCU/RTFP.txt index 273e654d7d08..2f0fcb2112d2 100644 --- a/Documentation/RCU/RTFP.txt +++ b/Documentation/RCU/RTFP.txt | |||
@@ -31,6 +31,14 @@ has lapsed, so this approach may be used in non-GPL software, if desired. | |||
31 | (In contrast, implementation of RCU is permitted only in software licensed | 31 | (In contrast, implementation of RCU is permitted only in software licensed |
32 | under either GPL or LGPL. Sorry!!!) | 32 | under either GPL or LGPL. Sorry!!!) |
33 | 33 | ||
34 | In 1987, Rashid et al. described lazy TLB-flush [RichardRashid87a]. | ||
35 | At first glance, this has nothing to do with RCU, but nevertheless | ||
36 | this paper helped inspire the update-side batching used in the later | ||
37 | RCU implementation in DYNIX/ptx. In 1988, Barbara Liskov published | ||
38 | a description of Argus that noted that use of out-of-date values can | ||
39 | be tolerated in some situations. Thus, this paper provides some early | ||
40 | theoretical justification for use of stale data. | ||
41 | |||
34 | In 1990, Pugh [Pugh90] noted that explicitly tracking which threads | 42 | In 1990, Pugh [Pugh90] noted that explicitly tracking which threads |
35 | were reading a given data structure permitted deferred free to operate | 43 | were reading a given data structure permitted deferred free to operate |
36 | in the presence of non-terminating threads. However, this explicit | 44 | in the presence of non-terminating threads. However, this explicit |
@@ -41,11 +49,11 @@ providing a fine-grained locking design, however, it would be interesting | |||
41 | to see how much of the performance advantage reported in 1990 remains | 49 | to see how much of the performance advantage reported in 1990 remains |
42 | today. | 50 | today. |
43 | 51 | ||
44 | At about this same time, Adams [Adams91] described ``chaotic relaxation'', | 52 | At about this same time, Andrews [Andrews91textbook] described ``chaotic |
45 | where the normal barriers between successive iterations of convergent | 53 | relaxation'', where the normal barriers between successive iterations |
46 | numerical algorithms are relaxed, so that iteration $n$ might use | 54 | of convergent numerical algorithms are relaxed, so that iteration $n$ |
47 | data from iteration $n-1$ or even $n-2$. This introduces error, | 55 | might use data from iteration $n-1$ or even $n-2$. This introduces |
48 | which typically slows convergence and thus increases the number of | 56 | error, which typically slows convergence and thus increases the number of |
49 | iterations required. However, this increase is sometimes more than made | 57 | iterations required. However, this increase is sometimes more than made |
50 | up for by a reduction in the number of expensive barrier operations, | 58 | up for by a reduction in the number of expensive barrier operations, |
51 | which are otherwise required to synchronize the threads at the end | 59 | which are otherwise required to synchronize the threads at the end |
@@ -55,7 +63,8 @@ is thus inapplicable to most data structures in operating-system kernels. | |||
55 | 63 | ||
56 | In 1992, Henry (now Alexia) Massalin completed a dissertation advising | 64 | In 1992, Henry (now Alexia) Massalin completed a dissertation advising |
57 | parallel programmers to defer processing when feasible to simplify | 65 | parallel programmers to defer processing when feasible to simplify |
58 | synchronization. RCU makes extremely heavy use of this advice. | 66 | synchronization [HMassalinPhD]. RCU makes extremely heavy use of |
67 | this advice. | ||
59 | 68 | ||
60 | In 1993, Jacobson [Jacobson93] verbally described what is perhaps the | 69 | In 1993, Jacobson [Jacobson93] verbally described what is perhaps the |
61 | simplest deferred-free technique: simply waiting a fixed amount of time | 70 | simplest deferred-free technique: simply waiting a fixed amount of time |
@@ -90,27 +99,29 @@ mechanism, which is quite similar to RCU [Gamsa99]. These operating | |||
90 | systems made pervasive use of RCU in place of "existence locks", which | 99 | systems made pervasive use of RCU in place of "existence locks", which |
91 | greatly simplifies locking hierarchies and helps avoid deadlocks. | 100 | greatly simplifies locking hierarchies and helps avoid deadlocks. |
92 | 101 | ||
93 | 2001 saw the first RCU presentation involving Linux [McKenney01a] | 102 | The year 2000 saw an email exchange that would likely have |
94 | at OLS. The resulting abundance of RCU patches was presented the | 103 | led to yet another independent invention of something like RCU |
95 | following year [McKenney02a], and use of RCU in dcache was first | 104 | [RustyRussell2000a,RustyRussell2000b]. Instead, 2001 saw the first |
96 | described that same year [Linder02a]. | 105 | RCU presentation involving Linux [McKenney01a] at OLS. The resulting |
106 | abundance of RCU patches was presented the following year [McKenney02a], | ||
107 | and use of RCU in dcache was first described that same year [Linder02a]. | ||
97 | 108 | ||
98 | Also in 2002, Michael [Michael02b,Michael02a] presented "hazard-pointer" | 109 | Also in 2002, Michael [Michael02b,Michael02a] presented "hazard-pointer" |
99 | techniques that defer the destruction of data structures to simplify | 110 | techniques that defer the destruction of data structures to simplify |
100 | non-blocking synchronization (wait-free synchronization, lock-free | 111 | non-blocking synchronization (wait-free synchronization, lock-free |
101 | synchronization, and obstruction-free synchronization are all examples of | 112 | synchronization, and obstruction-free synchronization are all examples of |
102 | non-blocking synchronization). In particular, this technique eliminates | 113 | non-blocking synchronization). The corresponding journal article appeared |
103 | locking, reduces contention, reduces memory latency for readers, and | 114 | in 2004 [MagedMichael04a]. This technique eliminates locking, reduces |
104 | parallelizes pipeline stalls and memory latency for writers. However, | 115 | contention, reduces memory latency for readers, and parallelizes pipeline |
105 | these techniques still impose significant read-side overhead in the | 116 | stalls and memory latency for writers. However, these techniques still |
106 | form of memory barriers. Researchers at Sun worked along similar lines | 117 | impose significant read-side overhead in the form of memory barriers. |
107 | in the same timeframe [HerlihyLM02]. These techniques can be thought | 118 | Researchers at Sun worked along similar lines in the same timeframe |
108 | of as inside-out reference counts, where the count is represented by the | 119 | [HerlihyLM02]. These techniques can be thought of as inside-out reference |
109 | number of hazard pointers referencing a given data structure rather than | 120 | counts, where the count is represented by the number of hazard pointers |
110 | the more conventional counter field within the data structure itself. | 121 | referencing a given data structure rather than the more conventional |
111 | The key advantage of inside-out reference counts is that they can be | 122 | counter field within the data structure itself. The key advantage |
112 | stored in immortal variables, thus allowing races between access and | 123 | of inside-out reference counts is that they can be stored in immortal |
113 | deletion to be avoided. | 124 | variables, thus allowing races between access and deletion to be avoided. |
114 | 125 | ||
115 | By the same token, RCU can be thought of as a "bulk reference count", | 126 | By the same token, RCU can be thought of as a "bulk reference count", |
116 | where some form of reference counter covers all reference by a given CPU | 127 | where some form of reference counter covers all reference by a given CPU |
@@ -123,8 +134,10 @@ can be thought of in other terms as well. | |||
123 | 134 | ||
124 | In 2003, the K42 group described how RCU could be used to create | 135 | In 2003, the K42 group described how RCU could be used to create |
125 | hot-pluggable implementations of operating-system functions [Appavoo03a]. | 136 | hot-pluggable implementations of operating-system functions [Appavoo03a]. |
126 | Later that year saw a paper describing an RCU implementation of System | 137 | Later that year saw a paper describing an RCU implementation |
127 | V IPC [Arcangeli03], and an introduction to RCU in Linux Journal | 138 | of System V IPC [Arcangeli03] (following up on a suggestion by |
139 | Hugh Dickins [Dickins02a] and an implementation by Mingming Cao | ||
140 | [MingmingCao2002IPCRCU]), and an introduction to RCU in Linux Journal | ||
128 | [McKenney03a]. | 141 | [McKenney03a]. |
129 | 142 | ||
130 | 2004 has seen a Linux-Journal article on use of RCU in dcache | 143 | 2004 has seen a Linux-Journal article on use of RCU in dcache |
@@ -383,6 +396,21 @@ for Programming Languages and Operating Systems}" | |||
383 | } | 396 | } |
384 | } | 397 | } |
385 | 398 | ||
399 | @phdthesis{HMassalinPhD | ||
400 | ,author="H. Massalin" | ||
401 | ,title="Synthesis: An Efficient Implementation of Fundamental Operating | ||
402 | System Services" | ||
403 | ,school="Columbia University" | ||
404 | ,address="New York, NY" | ||
405 | ,year="1992" | ||
406 | ,annotation={ | ||
407 | Mondo optimizing compiler. | ||
408 | Wait-free stuff. | ||
409 | Good advice: defer work to avoid synchronization. See page 90 | ||
410 | (PDF page 106), Section 5.4, fourth bullet point. | ||
411 | } | ||
412 | } | ||
413 | |||
386 | @unpublished{Jacobson93 | 414 | @unpublished{Jacobson93 |
387 | ,author="Van Jacobson" | 415 | ,author="Van Jacobson" |
388 | ,title="Avoid Read-Side Locking Via Delayed Free" | 416 | ,title="Avoid Read-Side Locking Via Delayed Free" |
@@ -671,6 +699,20 @@ Orran Krieger and Rusty Russell and Dipankar Sarma and Maneesh Soni" | |||
671 | [Viewed October 18, 2004]" | 699 | [Viewed October 18, 2004]" |
672 | } | 700 | } |
673 | 701 | ||
702 | @conference{Michael02b | ||
703 | ,author="Maged M. Michael" | ||
704 | ,title="High Performance Dynamic Lock-Free Hash Tables and List-Based Sets" | ||
705 | ,Year="2002" | ||
706 | ,Month="August" | ||
707 | ,booktitle="{Proceedings of the 14\textsuperscript{th} Annual ACM | ||
708 | Symposium on Parallel | ||
709 | Algorithms and Architecture}" | ||
710 | ,pages="73-82" | ||
711 | ,annotation={ | ||
712 | Like the title says... | ||
713 | } | ||
714 | } | ||
715 | |||
674 | @Conference{Linder02a | 716 | @Conference{Linder02a |
675 | ,Author="Hanna Linder and Dipankar Sarma and Maneesh Soni" | 717 | ,Author="Hanna Linder and Dipankar Sarma and Maneesh Soni" |
676 | ,Title="Scalability of the Directory Entry Cache" | 718 | ,Title="Scalability of the Directory Entry Cache" |
@@ -727,6 +769,24 @@ Andrea Arcangeli and Andi Kleen and Orran Krieger and Rusty Russell" | |||
727 | } | 769 | } |
728 | } | 770 | } |
729 | 771 | ||
772 | @conference{Michael02a | ||
773 | ,author="Maged M. Michael" | ||
774 | ,title="Safe Memory Reclamation for Dynamic Lock-Free Objects Using Atomic | ||
775 | Reads and Writes" | ||
776 | ,Year="2002" | ||
777 | ,Month="August" | ||
778 | ,booktitle="{Proceedings of the 21\textsuperscript{st} Annual ACM | ||
779 | Symposium on Principles of Distributed Computing}" | ||
780 | ,pages="21-30" | ||
781 | ,annotation={ | ||
782 | Each thread keeps an array of pointers to items that it is | ||
783 | currently referencing. Sort of an inside-out garbage collection | ||
784 | mechanism, but one that requires the accessing code to explicitly | ||
785 | state its needs. Also requires read-side memory barriers on | ||
786 | most architectures. | ||
787 | } | ||
788 | } | ||
789 | |||
730 | @unpublished{Dickins02a | 790 | @unpublished{Dickins02a |
731 | ,author="Hugh Dickins" | 791 | ,author="Hugh Dickins" |
732 | ,title="Use RCU for System-V IPC" | 792 | ,title="Use RCU for System-V IPC" |
@@ -735,6 +795,17 @@ Andrea Arcangeli and Andi Kleen and Orran Krieger and Rusty Russell" | |||
735 | ,note="private communication" | 795 | ,note="private communication" |
736 | } | 796 | } |
737 | 797 | ||
798 | @InProceedings{HerlihyLM02 | ||
799 | ,author={Maurice Herlihy and Victor Luchangco and Mark Moir} | ||
800 | ,title="The Repeat Offender Problem: A Mechanism for Supporting Dynamic-Sized, | ||
801 | Lock-Free Data Structures" | ||
802 | ,booktitle={Proceedings of 16\textsuperscript{th} International | ||
803 | Symposium on Distributed Computing} | ||
804 | ,year=2002 | ||
805 | ,month="October" | ||
806 | ,pages="339-353" | ||
807 | } | ||
808 | |||
738 | @unpublished{Sarma02b | 809 | @unpublished{Sarma02b |
739 | ,Author="Dipankar Sarma" | 810 | ,Author="Dipankar Sarma" |
740 | ,Title="Some dcache\_rcu benchmark numbers" | 811 | ,Title="Some dcache\_rcu benchmark numbers" |
@@ -749,6 +820,19 @@ Andrea Arcangeli and Andi Kleen and Orran Krieger and Rusty Russell" | |||
749 | } | 820 | } |
750 | } | 821 | } |
751 | 822 | ||
823 | @unpublished{MingmingCao2002IPCRCU | ||
824 | ,Author="Mingming Cao" | ||
825 | ,Title="[PATCH]updated ipc lock patch" | ||
826 | ,month="October" | ||
827 | ,year="2002" | ||
828 | ,note="Available: | ||
829 | \url{https://lkml.org/lkml/2002/10/24/262} | ||
830 | [Viewed February 15, 2014]" | ||
831 | ,annotation={ | ||
832 | Mingming Cao's patch to introduce RCU to SysV IPC. | ||
833 | } | ||
834 | } | ||
835 | |||
752 | @unpublished{LinusTorvalds2003a | 836 | @unpublished{LinusTorvalds2003a |
753 | ,Author="Linus Torvalds" | 837 | ,Author="Linus Torvalds" |
754 | ,Title="Re: {[PATCH]} small fixes in brlock.h" | 838 | ,Title="Re: {[PATCH]} small fixes in brlock.h" |
@@ -982,6 +1066,23 @@ Realtime Applications" | |||
982 | } | 1066 | } |
983 | } | 1067 | } |
984 | 1068 | ||
1069 | @article{MagedMichael04a | ||
1070 | ,author="Maged M. Michael" | ||
1071 | ,title="Hazard Pointers: Safe Memory Reclamation for Lock-Free Objects" | ||
1072 | ,Year="2004" | ||
1073 | ,Month="June" | ||
1074 | ,journal="IEEE Transactions on Parallel and Distributed Systems" | ||
1075 | ,volume="15" | ||
1076 | ,number="6" | ||
1077 | ,pages="491-504" | ||
1078 | ,url="Available: | ||
1079 | \url{http://www.research.ibm.com/people/m/michael/ieeetpds-2004.pdf} | ||
1080 | [Viewed March 1, 2005]" | ||
1081 | ,annotation={ | ||
1082 | New canonical hazard-pointer citation. | ||
1083 | } | ||
1084 | } | ||
1085 | |||
985 | @phdthesis{PaulEdwardMcKenneyPhD | 1086 | @phdthesis{PaulEdwardMcKenneyPhD |
986 | ,author="Paul E. McKenney" | 1087 | ,author="Paul E. McKenney" |
987 | ,title="Exploiting Deferred Destruction: | 1088 | ,title="Exploiting Deferred Destruction: |