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: |
