aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/RCU
diff options
context:
space:
mode:
authorPaul E. McKenney <paul.mckenney@linaro.org>2011-06-05 13:07:18 -0400
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-09-29 00:36:39 -0400
commit63cd758e07743b71ed76ba7db7f93986a7591a65 (patch)
tree55ed3c5e698145cdd2349a6b0d4a3e3b811232f2 /Documentation/RCU
parent990987511c200877bb20201772d5de46644151f2 (diff)
rcu: Update rcutorture documentation
Update rcutorture documentation to account for boosting, new types of RCU torture testing that have been added over the past few years, and the memory-barrier testing that was added an embarrassingly long time ago. Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'Documentation/RCU')
-rw-r--r--Documentation/RCU/torture.txt134
1 files changed, 99 insertions, 35 deletions
diff --git a/Documentation/RCU/torture.txt b/Documentation/RCU/torture.txt
index 5d9016795fd8..4205ed1f8adc 100644
--- a/Documentation/RCU/torture.txt
+++ b/Documentation/RCU/torture.txt
@@ -42,7 +42,7 @@ fqs_holdoff Holdoff time (in microseconds) between consecutive calls
42fqs_stutter Wait time (in seconds) between consecutive bursts 42fqs_stutter Wait time (in seconds) between consecutive bursts
43 of calls to force_quiescent_state(). 43 of calls to force_quiescent_state().
44 44
45irqreaders Says to invoke RCU readers from irq level. This is currently 45irqreader Says to invoke RCU readers from irq level. This is currently
46 done via timers. Defaults to "1" for variants of RCU that 46 done via timers. Defaults to "1" for variants of RCU that
47 permit this. (Or, more accurately, variants of RCU that do 47 permit this. (Or, more accurately, variants of RCU that do
48 -not- permit this know to ignore this variable.) 48 -not- permit this know to ignore this variable.)
@@ -79,19 +79,65 @@ stutter The length of time to run the test before pausing for this
79 Specifying "stutter=0" causes the test to run continuously 79 Specifying "stutter=0" causes the test to run continuously
80 without pausing, which is the old default behavior. 80 without pausing, which is the old default behavior.
81 81
82test_boost Whether or not to test the ability of RCU to do priority
83 boosting. Defaults to "test_boost=1", which performs
84 RCU priority-inversion testing only if the selected
85 RCU implementation supports priority boosting. Specifying
86 "test_boost=0" never performs RCU priority-inversion
87 testing. Specifying "test_boost=2" performs RCU
88 priority-inversion testing even if the selected RCU
89 implementation does not support RCU priority boosting,
90 which can be used to test rcutorture's ability to
91 carry out RCU priority-inversion testing.
92
93test_boost_interval
94 The number of seconds in an RCU priority-inversion test
95 cycle. Defaults to "test_boost_interval=7". It is
96 usually wise for this value to be relatively prime to
97 the value selected for "stutter".
98
99test_boost_duration
100 The number of seconds to do RCU priority-inversion testing
101 within any given "test_boost_interval". Defaults to
102 "test_boost_duration=4".
103
82test_no_idle_hz Whether or not to test the ability of RCU to operate in 104test_no_idle_hz Whether or not to test the ability of RCU to operate in
83 a kernel that disables the scheduling-clock interrupt to 105 a kernel that disables the scheduling-clock interrupt to
84 idle CPUs. Boolean parameter, "1" to test, "0" otherwise. 106 idle CPUs. Boolean parameter, "1" to test, "0" otherwise.
85 Defaults to omitting this test. 107 Defaults to omitting this test.
86 108
87torture_type The type of RCU to test: "rcu" for the rcu_read_lock() API, 109torture_type The type of RCU to test, with string values as follows:
88 "rcu_sync" for rcu_read_lock() with synchronous reclamation, 110
89 "rcu_bh" for the rcu_read_lock_bh() API, "rcu_bh_sync" for 111 "rcu": rcu_read_lock(), rcu_read_unlock() and call_rcu().
90 rcu_read_lock_bh() with synchronous reclamation, "srcu" for 112
91 the "srcu_read_lock()" API, "sched" for the use of 113 "rcu_sync": rcu_read_lock(), rcu_read_unlock(), and
92 preempt_disable() together with synchronize_sched(), 114 synchronize_rcu().
93 and "sched_expedited" for the use of preempt_disable() 115
94 with synchronize_sched_expedited(). 116 "rcu_expedited": rcu_read_lock(), rcu_read_unlock(), and
117 synchronize_rcu_expedited().
118
119 "rcu_bh": rcu_read_lock_bh(), rcu_read_unlock_bh(), and
120 call_rcu_bh().
121
122 "rcu_bh_sync": rcu_read_lock_bh(), rcu_read_unlock_bh(),
123 and synchronize_rcu_bh().
124
125 "srcu": srcu_read_lock(), srcu_read_unlock() and
126 synchronize_srcu().
127
128 "srcu_expedited": srcu_read_lock(), srcu_read_unlock() and
129 synchronize_srcu_expedited().
130
131 "sched": preempt_disable(), preempt_enable(), and
132 call_rcu_sched().
133
134 "sched_sync": preempt_disable(), preempt_enable(), and
135 synchronize_sched().
136
137 "sched_expedited": preempt_disable(), preempt_enable(), and
138 synchronize_sched_expedited().
139
140 Defaults to "rcu".
95 141
96verbose Enable debug printk()s. Default is disabled. 142verbose Enable debug printk()s. Default is disabled.
97 143
@@ -100,12 +146,12 @@ OUTPUT
100 146
101The statistics output is as follows: 147The statistics output is as follows:
102 148
103 rcu-torture: --- Start of test: nreaders=16 stat_interval=0 verbose=0 149 rcu-torture:--- Start of test: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4
104 rcu-torture: rtc: 0000000000000000 ver: 1916 tfle: 0 rta: 1916 rtaf: 0 rtf: 1915 150 rcu-torture: rtc: (null) ver: 155441 tfle: 0 rta: 155441 rtaf: 8884 rtf: 155440 rtmbe: 0 rtbke: 0 rtbre: 0 rtbf: 0 rtb: 0 nt: 3055767
105 rcu-torture: Reader Pipe: 1466408 9747 0 0 0 0 0 0 0 0 0 151 rcu-torture: Reader Pipe: 727860534 34213 0 0 0 0 0 0 0 0 0
106 rcu-torture: Reader Batch: 1464477 11678 0 0 0 0 0 0 0 0 152 rcu-torture: Reader Batch: 727877838 17003 0 0 0 0 0 0 0 0 0
107 rcu-torture: Free-Block Circulation: 1915 1915 1915 1915 1915 1915 1915 1915 1915 1915 0 153 rcu-torture: Free-Block Circulation: 155440 155440 155440 155440 155440 155440 155440 155440 155440 155440 0
108 rcu-torture: --- End of test 154 rcu-torture:--- End of test: SUCCESS: nreaders=16 nfakewriters=4 stat_interval=30 verbose=0 test_no_idle_hz=1 shuffle_interval=3 stutter=5 irqreader=1 fqs_duration=0 fqs_holdoff=0 fqs_stutter=3 test_boost=1/0 test_boost_interval=7 test_boost_duration=4
109 155
110The command "dmesg | grep torture:" will extract this information on 156The command "dmesg | grep torture:" will extract this information on
111most systems. On more esoteric configurations, it may be necessary to 157most systems. On more esoteric configurations, it may be necessary to
@@ -113,26 +159,55 @@ use other commands to access the output of the printk()s used by
113the RCU torture test. The printk()s use KERN_ALERT, so they should 159the RCU torture test. The printk()s use KERN_ALERT, so they should
114be evident. ;-) 160be evident. ;-)
115 161
162The first and last lines show the rcutorture module parameters, and the
163last line shows either "SUCCESS" or "FAILURE", based on rcutorture's
164automatic determination as to whether RCU operated correctly.
165
116The entries are as follows: 166The entries are as follows:
117 167
118o "rtc": The hexadecimal address of the structure currently visible 168o "rtc": The hexadecimal address of the structure currently visible
119 to readers. 169 to readers.
120 170
121o "ver": The number of times since boot that the rcutw writer task 171o "ver": The number of times since boot that the RCU writer task
122 has changed the structure visible to readers. 172 has changed the structure visible to readers.
123 173
124o "tfle": If non-zero, indicates that the "torture freelist" 174o "tfle": If non-zero, indicates that the "torture freelist"
125 containing structure to be placed into the "rtc" area is empty. 175 containing structures to be placed into the "rtc" area is empty.
126 This condition is important, since it can fool you into thinking 176 This condition is important, since it can fool you into thinking
127 that RCU is working when it is not. :-/ 177 that RCU is working when it is not. :-/
128 178
129o "rta": Number of structures allocated from the torture freelist. 179o "rta": Number of structures allocated from the torture freelist.
130 180
131o "rtaf": Number of allocations from the torture freelist that have 181o "rtaf": Number of allocations from the torture freelist that have
132 failed due to the list being empty. 182 failed due to the list being empty. It is not unusual for this
183 to be non-zero, but it is bad for it to be a large fraction of
184 the value indicated by "rta".
133 185
134o "rtf": Number of frees into the torture freelist. 186o "rtf": Number of frees into the torture freelist.
135 187
188o "rtmbe": A non-zero value indicates that rcutorture believes that
189 rcu_assign_pointer() and rcu_dereference() are not working
190 correctly. This value should be zero.
191
192o "rtbke": rcutorture was unable to create the real-time kthreads
193 used to force RCU priority inversion. This value should be zero.
194
195o "rtbre": Although rcutorture successfully created the kthreads
196 used to force RCU priority inversion, it was unable to set them
197 to the real-time priority level of 1. This value should be zero.
198
199o "rtbf": The number of times that RCU priority boosting failed
200 to resolve RCU priority inversion.
201
202o "rtb": The number of times that rcutorture attempted to force
203 an RCU priority inversion condition. If you are testing RCU
204 priority boosting via the "test_boost" module parameter, this
205 value should be non-zero.
206
207o "nt": The number of times rcutorture ran RCU read-side code from
208 within a timer handler. This value should be non-zero only
209 if you specified the "irqreader" module parameter.
210
136o "Reader Pipe": Histogram of "ages" of structures seen by readers. 211o "Reader Pipe": Histogram of "ages" of structures seen by readers.
137 If any entries past the first two are non-zero, RCU is broken. 212 If any entries past the first two are non-zero, RCU is broken.
138 And rcutorture prints the error flag string "!!!" to make sure 213 And rcutorture prints the error flag string "!!!" to make sure
@@ -162,26 +237,15 @@ o "Free-Block Circulation": Shows the number of torture structures
162 somehow gets incremented farther than it should. 237 somehow gets incremented farther than it should.
163 238
164Different implementations of RCU can provide implementation-specific 239Different implementations of RCU can provide implementation-specific
165additional information. For example, SRCU provides the following: 240additional information. For example, SRCU provides the following
241additional line:
166 242
167 srcu-torture: rtc: f8cf46a8 ver: 355 tfle: 0 rta: 356 rtaf: 0 rtf: 346 rtmbe: 0
168 srcu-torture: Reader Pipe: 559738 939 0 0 0 0 0 0 0 0 0
169 srcu-torture: Reader Batch: 560434 243 0 0 0 0 0 0 0 0
170 srcu-torture: Free-Block Circulation: 355 354 353 352 351 350 349 348 347 346 0
171 srcu-torture: per-CPU(idx=1): 0(0,1) 1(0,1) 2(0,0) 3(0,1) 243 srcu-torture: per-CPU(idx=1): 0(0,1) 1(0,1) 2(0,0) 3(0,1)
172 244
173The first four lines are similar to those for RCU. The last line shows 245This line shows the per-CPU counter state. The numbers in parentheses are
174the per-CPU counter state. The numbers in parentheses are the values 246the values of the "old" and "current" counters for the corresponding CPU.
175of the "old" and "current" counters for the corresponding CPU. The 247The "idx" value maps the "old" and "current" values to the underlying
176"idx" value maps the "old" and "current" values to the underlying array, 248array, and is useful for debugging.
177and is useful for debugging.
178
179Similarly, sched_expedited RCU provides the following:
180
181 sched_expedited-torture: rtc: d0000000016c1880 ver: 1090796 tfle: 0 rta: 1090796 rtaf: 0 rtf: 1090787 rtmbe: 0 nt: 27713319
182 sched_expedited-torture: Reader Pipe: 12660320201 95875 0 0 0 0 0 0 0 0 0
183 sched_expedited-torture: Reader Batch: 12660424885 0 0 0 0 0 0 0 0 0 0
184 sched_expedited-torture: Free-Block Circulation: 1090795 1090795 1090794 1090793 1090792 1090791 1090790 1090789 1090788 1090787 0
185 249
186 250
187USAGE 251USAGE