diff options
author | Avi Kivity <avi@redhat.com> | 2011-05-11 05:56:53 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2011-05-22 08:48:07 -0400 |
commit | e3aa52d665ec1a962d1cf025a2e5ee84b3b33406 (patch) | |
tree | 8e4e9516fe5cccf2b73c7537327f3dd21634c6d7 /Documentation | |
parent | d2f62766d5778bbaf80d4feb90a23c7edc371a54 (diff) | |
parent | 29ce831000081dd757d3116bf774aafffc4b6b20 (diff) |
Merge commit '29ce831000081dd757d3116bf774aafffc4b6b20' into next
* commit '29ce831000081dd757d3116bf774aafffc4b6b20': (34 commits)
rcu: provide rcu_virt_note_context_switch() function.
rcu: get rid of signed overflow in check_cpu_stall()
rcu: optimize rcutiny
rcu: prevent call_rcu() from diving into rcu core if irqs disabled
rcu: further lower priority in rcu_yield()
rcu: introduce kfree_rcu()
rcu: fix spelling
rcu: call __rcu_read_unlock() in exit_rcu for tree RCU
rcu: Converge TINY_RCU expedited and normal boosting
rcu: remove useless ->boosted_this_gp field
rcu: code cleanups in TINY_RCU priority boosting.
rcu: Switch to this_cpu() primitives
rcu: Use WARN_ON_ONCE for DEBUG_OBJECTS_RCU_HEAD warnings
rcu: mark rcutorture boosting callback as being on-stack
rcu: add DEBUG_OBJECTS_RCU_HEAD check for alignment
rcu: Enable DEBUG_OBJECTS_RCU_HEAD from !PREEMPT
rcu: Add forward-progress diagnostic for per-CPU kthreads
rcu: add grace-period age and more kthread state to tracing
rcu: fix tracing bug thinko on boost-balk attribution
rcu: update tracing documentation for new rcutorture and rcuboost
...
Pulling in rcu_virt_note_context_switch().
Signed-off-by: Avi Kivity <avi@redhat.com>
* commit '29ce831000081dd757d3116bf774aafffc4b6b20': (34 commits)
rcu: provide rcu_virt_note_context_switch() function.
rcu: get rid of signed overflow in check_cpu_stall()
rcu: optimize rcutiny
rcu: prevent call_rcu() from diving into rcu core if irqs disabled
rcu: further lower priority in rcu_yield()
rcu: introduce kfree_rcu()
rcu: fix spelling
rcu: call __rcu_read_unlock() in exit_rcu for tree RCU
rcu: Converge TINY_RCU expedited and normal boosting
rcu: remove useless ->boosted_this_gp field
rcu: code cleanups in TINY_RCU priority boosting.
rcu: Switch to this_cpu() primitives
rcu: Use WARN_ON_ONCE for DEBUG_OBJECTS_RCU_HEAD warnings
rcu: mark rcutorture boosting callback as being on-stack
rcu: add DEBUG_OBJECTS_RCU_HEAD check for alignment
rcu: Enable DEBUG_OBJECTS_RCU_HEAD from !PREEMPT
rcu: Add forward-progress diagnostic for per-CPU kthreads
rcu: add grace-period age and more kthread state to tracing
rcu: fix tracing bug thinko on boost-balk attribution
rcu: update tracing documentation for new rcutorture and rcuboost
...
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/RCU/00-INDEX | 2 | ||||
-rw-r--r-- | Documentation/RCU/stallwarn.txt | 23 | ||||
-rw-r--r-- | Documentation/RCU/trace.txt | 295 | ||||
-rw-r--r-- | Documentation/filesystems/proc.txt | 1 |
4 files changed, 250 insertions, 71 deletions
diff --git a/Documentation/RCU/00-INDEX b/Documentation/RCU/00-INDEX index 71b6f500ddb9..1d7a885761f5 100644 --- a/Documentation/RCU/00-INDEX +++ b/Documentation/RCU/00-INDEX | |||
@@ -21,7 +21,7 @@ rcu.txt | |||
21 | RTFP.txt | 21 | RTFP.txt |
22 | - List of RCU papers (bibliography) going back to 1980. | 22 | - List of RCU papers (bibliography) going back to 1980. |
23 | stallwarn.txt | 23 | stallwarn.txt |
24 | - RCU CPU stall warnings (CONFIG_RCU_CPU_STALL_DETECTOR) | 24 | - RCU CPU stall warnings (module parameter rcu_cpu_stall_suppress) |
25 | torture.txt | 25 | torture.txt |
26 | - RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST) | 26 | - RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST) |
27 | trace.txt | 27 | trace.txt |
diff --git a/Documentation/RCU/stallwarn.txt b/Documentation/RCU/stallwarn.txt index 862c08ef1fde..4e959208f736 100644 --- a/Documentation/RCU/stallwarn.txt +++ b/Documentation/RCU/stallwarn.txt | |||
@@ -1,22 +1,25 @@ | |||
1 | Using RCU's CPU Stall Detector | 1 | Using RCU's CPU Stall Detector |
2 | 2 | ||
3 | The CONFIG_RCU_CPU_STALL_DETECTOR kernel config parameter enables | 3 | The rcu_cpu_stall_suppress module parameter enables RCU's CPU stall |
4 | RCU's CPU stall detector, which detects conditions that unduly delay | 4 | detector, which detects conditions that unduly delay RCU grace periods. |
5 | RCU grace periods. The stall detector's idea of what constitutes | 5 | This module parameter enables CPU stall detection by default, but |
6 | "unduly delayed" is controlled by a set of C preprocessor macros: | 6 | may be overridden via boot-time parameter or at runtime via sysfs. |
7 | The stall detector's idea of what constitutes "unduly delayed" is | ||
8 | controlled by a set of kernel configuration variables and cpp macros: | ||
7 | 9 | ||
8 | RCU_SECONDS_TILL_STALL_CHECK | 10 | CONFIG_RCU_CPU_STALL_TIMEOUT |
9 | 11 | ||
10 | This macro defines the period of time that RCU will wait from | 12 | This kernel configuration parameter defines the period of time |
11 | the beginning of a grace period until it issues an RCU CPU | 13 | that RCU will wait from the beginning of a grace period until it |
12 | stall warning. This time period is normally ten seconds. | 14 | issues an RCU CPU stall warning. This time period is normally |
15 | ten seconds. | ||
13 | 16 | ||
14 | RCU_SECONDS_TILL_STALL_RECHECK | 17 | RCU_SECONDS_TILL_STALL_RECHECK |
15 | 18 | ||
16 | This macro defines the period of time that RCU will wait after | 19 | This macro defines the period of time that RCU will wait after |
17 | issuing a stall warning until it issues another stall warning | 20 | issuing a stall warning until it issues another stall warning |
18 | for the same stall. This time period is normally set to thirty | 21 | for the same stall. This time period is normally set to three |
19 | seconds. | 22 | times the check interval plus thirty seconds. |
20 | 23 | ||
21 | RCU_STALL_RAT_DELAY | 24 | RCU_STALL_RAT_DELAY |
22 | 25 | ||
diff --git a/Documentation/RCU/trace.txt b/Documentation/RCU/trace.txt index 6a8c73f55b80..8173cec473aa 100644 --- a/Documentation/RCU/trace.txt +++ b/Documentation/RCU/trace.txt | |||
@@ -10,34 +10,46 @@ for rcutree and next for rcutiny. | |||
10 | 10 | ||
11 | CONFIG_TREE_RCU and CONFIG_TREE_PREEMPT_RCU debugfs Files and Formats | 11 | CONFIG_TREE_RCU and CONFIG_TREE_PREEMPT_RCU debugfs Files and Formats |
12 | 12 | ||
13 | These implementations of RCU provides five debugfs files under the | 13 | These implementations of RCU provides several debugfs files under the |
14 | top-level directory RCU: rcu/rcudata (which displays fields in struct | 14 | top-level directory "rcu": |
15 | rcu_data), rcu/rcudata.csv (which is a .csv spreadsheet version of | 15 | |
16 | rcu/rcudata), rcu/rcugp (which displays grace-period counters), | 16 | rcu/rcudata: |
17 | rcu/rcuhier (which displays the struct rcu_node hierarchy), and | 17 | Displays fields in struct rcu_data. |
18 | rcu/rcu_pending (which displays counts of the reasons that the | 18 | rcu/rcudata.csv: |
19 | rcu_pending() function decided that there was core RCU work to do). | 19 | Comma-separated values spreadsheet version of rcudata. |
20 | rcu/rcugp: | ||
21 | Displays grace-period counters. | ||
22 | rcu/rcuhier: | ||
23 | Displays the struct rcu_node hierarchy. | ||
24 | rcu/rcu_pending: | ||
25 | Displays counts of the reasons rcu_pending() decided that RCU had | ||
26 | work to do. | ||
27 | rcu/rcutorture: | ||
28 | Displays rcutorture test progress. | ||
29 | rcu/rcuboost: | ||
30 | Displays RCU boosting statistics. Only present if | ||
31 | CONFIG_RCU_BOOST=y. | ||
20 | 32 | ||
21 | The output of "cat rcu/rcudata" looks as follows: | 33 | The output of "cat rcu/rcudata" looks as follows: |
22 | 34 | ||
23 | rcu_sched: | 35 | rcu_sched: |
24 | 0 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=10951/1 dn=0 df=1101 of=0 ri=36 ql=0 b=10 | 36 | 0 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=545/1/0 df=50 of=0 ri=0 ql=163 qs=NRW. kt=0/W/0 ktl=ebc3 b=10 ci=153737 co=0 ca=0 |
25 | 1 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=16117/1 dn=0 df=1015 of=0 ri=0 ql=0 b=10 | 37 | 1 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=967/1/0 df=58 of=0 ri=0 ql=634 qs=NRW. kt=0/W/1 ktl=58c b=10 ci=191037 co=0 ca=0 |
26 | 2 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1445/1 dn=0 df=1839 of=0 ri=0 ql=0 b=10 | 38 | 2 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=1081/1/0 df=175 of=0 ri=0 ql=74 qs=N.W. kt=0/W/2 ktl=da94 b=10 ci=75991 co=0 ca=0 |
27 | 3 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=6681/1 dn=0 df=1545 of=0 ri=0 ql=0 b=10 | 39 | 3 c=20942 g=20943 pq=1 pqc=20942 qp=1 dt=1846/0/0 df=404 of=0 ri=0 ql=0 qs=.... kt=0/W/3 ktl=d1cd b=10 ci=72261 co=0 ca=0 |
28 | 4 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=1003/1 dn=0 df=1992 of=0 ri=0 ql=0 b=10 | 40 | 4 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=369/1/0 df=83 of=0 ri=0 ql=48 qs=N.W. kt=0/W/4 ktl=e0e7 b=10 ci=128365 co=0 ca=0 |
29 | 5 c=17829 g=17830 pq=1 pqc=17829 qp=1 dt=3887/1 dn=0 df=3331 of=0 ri=4 ql=2 b=10 | 41 | 5 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=381/1/0 df=64 of=0 ri=0 ql=169 qs=NRW. kt=0/W/5 ktl=fb2f b=10 ci=164360 co=0 ca=0 |
30 | 6 c=17829 g=17829 pq=1 pqc=17829 qp=0 dt=859/1 dn=0 df=3224 of=0 ri=0 ql=0 b=10 | 42 | 6 c=20972 g=20973 pq=1 pqc=20972 qp=0 dt=1037/1/0 df=183 of=0 ri=0 ql=62 qs=N.W. kt=0/W/6 ktl=d2ad b=10 ci=65663 co=0 ca=0 |
31 | 7 c=17829 g=17830 pq=0 pqc=17829 qp=1 dt=3761/1 dn=0 df=1818 of=0 ri=0 ql=2 b=10 | 43 | 7 c=20897 g=20897 pq=1 pqc=20896 qp=0 dt=1572/0/0 df=382 of=0 ri=0 ql=0 qs=.... kt=0/W/7 ktl=cf15 b=10 ci=75006 co=0 ca=0 |
32 | rcu_bh: | 44 | rcu_bh: |
33 | 0 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=10951/1 dn=0 df=0 of=0 ri=0 ql=0 b=10 | 45 | 0 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=545/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/0 ktl=ebc3 b=10 ci=0 co=0 ca=0 |
34 | 1 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=16117/1 dn=0 df=13 of=0 ri=0 ql=0 b=10 | 46 | 1 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=967/1/0 df=3 of=0 ri=1 ql=0 qs=.... kt=0/W/1 ktl=58c b=10 ci=151 co=0 ca=0 |
35 | 2 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=1445/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | 47 | 2 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1081/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/2 ktl=da94 b=10 ci=0 co=0 ca=0 |
36 | 3 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=6681/1 dn=0 df=9 of=0 ri=0 ql=0 b=10 | 48 | 3 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1846/0/0 df=8 of=0 ri=1 ql=0 qs=.... kt=0/W/3 ktl=d1cd b=10 ci=0 co=0 ca=0 |
37 | 4 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=1003/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | 49 | 4 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=369/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/4 ktl=e0e7 b=10 ci=0 co=0 ca=0 |
38 | 5 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=3887/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | 50 | 5 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=381/1/0 df=4 of=0 ri=1 ql=0 qs=.... kt=0/W/5 ktl=fb2f b=10 ci=0 co=0 ca=0 |
39 | 6 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=859/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | 51 | 6 c=1480 g=1480 pq=1 pqc=1479 qp=0 dt=1037/1/0 df=6 of=0 ri=1 ql=0 qs=.... kt=0/W/6 ktl=d2ad b=10 ci=0 co=0 ca=0 |
40 | 7 c=-275 g=-275 pq=1 pqc=-275 qp=0 dt=3761/1 dn=0 df=15 of=0 ri=0 ql=0 b=10 | 52 | 7 c=1474 g=1474 pq=1 pqc=1473 qp=0 dt=1572/0/0 df=8 of=0 ri=1 ql=0 qs=.... kt=0/W/7 ktl=cf15 b=10 ci=0 co=0 ca=0 |
41 | 53 | ||
42 | The first section lists the rcu_data structures for rcu_sched, the second | 54 | The first section lists the rcu_data structures for rcu_sched, the second |
43 | for rcu_bh. Note that CONFIG_TREE_PREEMPT_RCU kernels will have an | 55 | for rcu_bh. Note that CONFIG_TREE_PREEMPT_RCU kernels will have an |
@@ -52,17 +64,18 @@ o The number at the beginning of each line is the CPU number. | |||
52 | substantially larger than the number of actual CPUs. | 64 | substantially larger than the number of actual CPUs. |
53 | 65 | ||
54 | o "c" is the count of grace periods that this CPU believes have | 66 | o "c" is the count of grace periods that this CPU believes have |
55 | completed. CPUs in dynticks idle mode may lag quite a ways | 67 | completed. Offlined CPUs and CPUs in dynticks idle mode may |
56 | behind, for example, CPU 4 under "rcu_sched" above, which has | 68 | lag quite a ways behind, for example, CPU 6 under "rcu_sched" |
57 | slept through the past 25 RCU grace periods. It is not unusual | 69 | above, which has been offline through not quite 40,000 RCU grace |
58 | to see CPUs lagging by thousands of grace periods. | 70 | periods. It is not unusual to see CPUs lagging by thousands of |
71 | grace periods. | ||
59 | 72 | ||
60 | o "g" is the count of grace periods that this CPU believes have | 73 | o "g" is the count of grace periods that this CPU believes have |
61 | started. Again, CPUs in dynticks idle mode may lag behind. | 74 | started. Again, offlined CPUs and CPUs in dynticks idle mode |
62 | If the "c" and "g" values are equal, this CPU has already | 75 | may lag behind. If the "c" and "g" values are equal, this CPU |
63 | reported a quiescent state for the last RCU grace period that | 76 | has already reported a quiescent state for the last RCU grace |
64 | it is aware of, otherwise, the CPU believes that it owes RCU a | 77 | period that it is aware of, otherwise, the CPU believes that it |
65 | quiescent state. | 78 | owes RCU a quiescent state. |
66 | 79 | ||
67 | o "pq" indicates that this CPU has passed through a quiescent state | 80 | o "pq" indicates that this CPU has passed through a quiescent state |
68 | for the current grace period. It is possible for "pq" to be | 81 | for the current grace period. It is possible for "pq" to be |
@@ -81,22 +94,16 @@ o "pqc" indicates which grace period the last-observed quiescent | |||
81 | the next grace period! | 94 | the next grace period! |
82 | 95 | ||
83 | o "qp" indicates that RCU still expects a quiescent state from | 96 | o "qp" indicates that RCU still expects a quiescent state from |
84 | this CPU. | 97 | this CPU. Offlined CPUs and CPUs in dyntick idle mode might |
98 | well have qp=1, which is OK: RCU is still ignoring them. | ||
85 | 99 | ||
86 | o "dt" is the current value of the dyntick counter that is incremented | 100 | o "dt" is the current value of the dyntick counter that is incremented |
87 | when entering or leaving dynticks idle state, either by the | 101 | when entering or leaving dynticks idle state, either by the |
88 | scheduler or by irq. The number after the "/" is the interrupt | 102 | scheduler or by irq. This number is even if the CPU is in |
89 | nesting depth when in dyntick-idle state, or one greater than | 103 | dyntick idle mode and odd otherwise. The number after the first |
90 | the interrupt-nesting depth otherwise. | 104 | "/" is the interrupt nesting depth when in dyntick-idle state, |
91 | 105 | or one greater than the interrupt-nesting depth otherwise. | |
92 | This field is displayed only for CONFIG_NO_HZ kernels. | 106 | The number after the second "/" is the NMI nesting depth. |
93 | |||
94 | o "dn" is the current value of the dyntick counter that is incremented | ||
95 | when entering or leaving dynticks idle state via NMI. If both | ||
96 | the "dt" and "dn" values are even, then this CPU is in dynticks | ||
97 | idle mode and may be ignored by RCU. If either of these two | ||
98 | counters is odd, then RCU must be alert to the possibility of | ||
99 | an RCU read-side critical section running on this CPU. | ||
100 | 107 | ||
101 | This field is displayed only for CONFIG_NO_HZ kernels. | 108 | This field is displayed only for CONFIG_NO_HZ kernels. |
102 | 109 | ||
@@ -108,7 +115,7 @@ o "df" is the number of times that some other CPU has forced a | |||
108 | 115 | ||
109 | o "of" is the number of times that some other CPU has forced a | 116 | o "of" is the number of times that some other CPU has forced a |
110 | quiescent state on behalf of this CPU due to this CPU being | 117 | quiescent state on behalf of this CPU due to this CPU being |
111 | offline. In a perfect world, this might neve happen, but it | 118 | offline. In a perfect world, this might never happen, but it |
112 | turns out that offlining and onlining a CPU can take several grace | 119 | turns out that offlining and onlining a CPU can take several grace |
113 | periods, and so there is likely to be an extended period of time | 120 | periods, and so there is likely to be an extended period of time |
114 | when RCU believes that the CPU is online when it really is not. | 121 | when RCU believes that the CPU is online when it really is not. |
@@ -125,6 +132,62 @@ o "ql" is the number of RCU callbacks currently residing on | |||
125 | of what state they are in (new, waiting for grace period to | 132 | of what state they are in (new, waiting for grace period to |
126 | start, waiting for grace period to end, ready to invoke). | 133 | start, waiting for grace period to end, ready to invoke). |
127 | 134 | ||
135 | o "qs" gives an indication of the state of the callback queue | ||
136 | with four characters: | ||
137 | |||
138 | "N" Indicates that there are callbacks queued that are not | ||
139 | ready to be handled by the next grace period, and thus | ||
140 | will be handled by the grace period following the next | ||
141 | one. | ||
142 | |||
143 | "R" Indicates that there are callbacks queued that are | ||
144 | ready to be handled by the next grace period. | ||
145 | |||
146 | "W" Indicates that there are callbacks queued that are | ||
147 | waiting on the current grace period. | ||
148 | |||
149 | "D" Indicates that there are callbacks queued that have | ||
150 | already been handled by a prior grace period, and are | ||
151 | thus waiting to be invoked. Note that callbacks in | ||
152 | the process of being invoked are not counted here. | ||
153 | Callbacks in the process of being invoked are those | ||
154 | that have been removed from the rcu_data structures | ||
155 | queues by rcu_do_batch(), but which have not yet been | ||
156 | invoked. | ||
157 | |||
158 | If there are no callbacks in a given one of the above states, | ||
159 | the corresponding character is replaced by ".". | ||
160 | |||
161 | o "kt" is the per-CPU kernel-thread state. The digit preceding | ||
162 | the first slash is zero if there is no work pending and 1 | ||
163 | otherwise. The character between the first pair of slashes is | ||
164 | as follows: | ||
165 | |||
166 | "S" The kernel thread is stopped, in other words, all | ||
167 | CPUs corresponding to this rcu_node structure are | ||
168 | offline. | ||
169 | |||
170 | "R" The kernel thread is running. | ||
171 | |||
172 | "W" The kernel thread is waiting because there is no work | ||
173 | for it to do. | ||
174 | |||
175 | "O" The kernel thread is waiting because it has been | ||
176 | forced off of its designated CPU or because its | ||
177 | ->cpus_allowed mask permits it to run on other than | ||
178 | its designated CPU. | ||
179 | |||
180 | "Y" The kernel thread is yielding to avoid hogging CPU. | ||
181 | |||
182 | "?" Unknown value, indicates a bug. | ||
183 | |||
184 | The number after the final slash is the CPU that the kthread | ||
185 | is actually running on. | ||
186 | |||
187 | o "ktl" is the low-order 16 bits (in hexadecimal) of the count of | ||
188 | the number of times that this CPU's per-CPU kthread has gone | ||
189 | through its loop servicing invoke_rcu_cpu_kthread() requests. | ||
190 | |||
128 | o "b" is the batch limit for this CPU. If more than this number | 191 | o "b" is the batch limit for this CPU. If more than this number |
129 | of RCU callbacks is ready to invoke, then the remainder will | 192 | of RCU callbacks is ready to invoke, then the remainder will |
130 | be deferred. | 193 | be deferred. |
@@ -174,14 +237,14 @@ o "gpnum" is the number of grace periods that have started. It is | |||
174 | The output of "cat rcu/rcuhier" looks as follows, with very long lines: | 237 | The output of "cat rcu/rcuhier" looks as follows, with very long lines: |
175 | 238 | ||
176 | c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6 | 239 | c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6 |
177 | 1/1 .>. 0:127 ^0 | 240 | 1/1 ..>. 0:127 ^0 |
178 | 3/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3 | 241 | 3/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3 |
179 | 3/3f .>. 0:5 ^0 2/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3 | 242 | 3/3f ..>. 0:5 ^0 2/3 ..>. 6:11 ^1 0/0 ..>. 12:17 ^2 0/0 ..>. 18:23 ^3 0/0 ..>. 24:29 ^4 0/0 ..>. 30:35 ^5 0/0 ..>. 36:41 ^0 0/0 ..>. 42:47 ^1 0/0 ..>. 48:53 ^2 0/0 ..>. 54:59 ^3 0/0 ..>. 60:65 ^4 0/0 ..>. 66:71 ^5 0/0 ..>. 72:77 ^0 0/0 ..>. 78:83 ^1 0/0 ..>. 84:89 ^2 0/0 ..>. 90:95 ^3 0/0 ..>. 96:101 ^4 0/0 ..>. 102:107 ^5 0/0 ..>. 108:113 ^0 0/0 ..>. 114:119 ^1 0/0 ..>. 120:125 ^2 0/0 ..>. 126:127 ^3 |
180 | rcu_bh: | 243 | rcu_bh: |
181 | c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0 | 244 | c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0 |
182 | 0/1 .>. 0:127 ^0 | 245 | 0/1 ..>. 0:127 ^0 |
183 | 0/3 .>. 0:35 ^0 0/0 .>. 36:71 ^1 0/0 .>. 72:107 ^2 0/0 .>. 108:127 ^3 | 246 | 0/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3 |
184 | 0/3f .>. 0:5 ^0 0/3 .>. 6:11 ^1 0/0 .>. 12:17 ^2 0/0 .>. 18:23 ^3 0/0 .>. 24:29 ^4 0/0 .>. 30:35 ^5 0/0 .>. 36:41 ^0 0/0 .>. 42:47 ^1 0/0 .>. 48:53 ^2 0/0 .>. 54:59 ^3 0/0 .>. 60:65 ^4 0/0 .>. 66:71 ^5 0/0 .>. 72:77 ^0 0/0 .>. 78:83 ^1 0/0 .>. 84:89 ^2 0/0 .>. 90:95 ^3 0/0 .>. 96:101 ^4 0/0 .>. 102:107 ^5 0/0 .>. 108:113 ^0 0/0 .>. 114:119 ^1 0/0 .>. 120:125 ^2 0/0 .>. 126:127 ^3 | 247 | 0/3f ..>. 0:5 ^0 0/3 ..>. 6:11 ^1 0/0 ..>. 12:17 ^2 0/0 ..>. 18:23 ^3 0/0 ..>. 24:29 ^4 0/0 ..>. 30:35 ^5 0/0 ..>. 36:41 ^0 0/0 ..>. 42:47 ^1 0/0 ..>. 48:53 ^2 0/0 ..>. 54:59 ^3 0/0 ..>. 60:65 ^4 0/0 ..>. 66:71 ^5 0/0 ..>. 72:77 ^0 0/0 ..>. 78:83 ^1 0/0 ..>. 84:89 ^2 0/0 ..>. 90:95 ^3 0/0 ..>. 96:101 ^4 0/0 ..>. 102:107 ^5 0/0 ..>. 108:113 ^0 0/0 ..>. 114:119 ^1 0/0 ..>. 120:125 ^2 0/0 ..>. 126:127 ^3 |
185 | 248 | ||
186 | This is once again split into "rcu_sched" and "rcu_bh" portions, | 249 | This is once again split into "rcu_sched" and "rcu_bh" portions, |
187 | and CONFIG_TREE_PREEMPT_RCU kernels will again have an additional | 250 | and CONFIG_TREE_PREEMPT_RCU kernels will again have an additional |
@@ -240,13 +303,20 @@ o Each element of the form "1/1 0:127 ^0" represents one struct | |||
240 | current grace period. | 303 | current grace period. |
241 | 304 | ||
242 | o The characters separated by the ">" indicate the state | 305 | o The characters separated by the ">" indicate the state |
243 | of the blocked-tasks lists. A "T" preceding the ">" | 306 | of the blocked-tasks lists. A "G" preceding the ">" |
244 | indicates that at least one task blocked in an RCU | 307 | indicates that at least one task blocked in an RCU |
245 | read-side critical section blocks the current grace | 308 | read-side critical section blocks the current grace |
246 | period, while a "." preceding the ">" indicates otherwise. | 309 | period, while a "E" preceding the ">" indicates that |
247 | The character following the ">" indicates similarly for | 310 | at least one task blocked in an RCU read-side critical |
248 | the next grace period. A "T" should appear in this | 311 | section blocks the current expedited grace period. |
249 | field only for rcu-preempt. | 312 | A "T" character following the ">" indicates that at |
313 | least one task is blocked within an RCU read-side | ||
314 | critical section, regardless of whether any current | ||
315 | grace period (expedited or normal) is inconvenienced. | ||
316 | A "." character appears if the corresponding condition | ||
317 | does not hold, so that "..>." indicates that no tasks | ||
318 | are blocked. In contrast, "GE>T" indicates maximal | ||
319 | inconvenience from blocked tasks. | ||
250 | 320 | ||
251 | o The numbers separated by the ":" are the range of CPUs | 321 | o The numbers separated by the ":" are the range of CPUs |
252 | served by this struct rcu_node. This can be helpful | 322 | served by this struct rcu_node. This can be helpful |
@@ -328,6 +398,113 @@ o "nn" is the number of times that this CPU needed nothing. Alert | |||
328 | is due to short-circuit evaluation in rcu_pending(). | 398 | is due to short-circuit evaluation in rcu_pending(). |
329 | 399 | ||
330 | 400 | ||
401 | The output of "cat rcu/rcutorture" looks as follows: | ||
402 | |||
403 | rcutorture test sequence: 0 (test in progress) | ||
404 | rcutorture update version number: 615 | ||
405 | |||
406 | The first line shows the number of rcutorture tests that have completed | ||
407 | since boot. If a test is currently running, the "(test in progress)" | ||
408 | string will appear as shown above. The second line shows the number of | ||
409 | update cycles that the current test has started, or zero if there is | ||
410 | no test in progress. | ||
411 | |||
412 | |||
413 | The output of "cat rcu/rcuboost" looks as follows: | ||
414 | |||
415 | 0:5 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f | ||
416 | balk: nt=0 egt=989 bt=0 nb=0 ny=0 nos=16 | ||
417 | 6:7 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f | ||
418 | balk: nt=0 egt=225 bt=0 nb=0 ny=0 nos=6 | ||
419 | |||
420 | This information is output only for rcu_preempt. Each two-line entry | ||
421 | corresponds to a leaf rcu_node strcuture. The fields are as follows: | ||
422 | |||
423 | o "n:m" is the CPU-number range for the corresponding two-line | ||
424 | entry. In the sample output above, the first entry covers | ||
425 | CPUs zero through five and the second entry covers CPUs 6 | ||
426 | and 7. | ||
427 | |||
428 | o "tasks=TNEB" gives the state of the various segments of the | ||
429 | rnp->blocked_tasks list: | ||
430 | |||
431 | "T" This indicates that there are some tasks that blocked | ||
432 | while running on one of the corresponding CPUs while | ||
433 | in an RCU read-side critical section. | ||
434 | |||
435 | "N" This indicates that some of the blocked tasks are preventing | ||
436 | the current normal (non-expedited) grace period from | ||
437 | completing. | ||
438 | |||
439 | "E" This indicates that some of the blocked tasks are preventing | ||
440 | the current expedited grace period from completing. | ||
441 | |||
442 | "B" This indicates that some of the blocked tasks are in | ||
443 | need of RCU priority boosting. | ||
444 | |||
445 | Each character is replaced with "." if the corresponding | ||
446 | condition does not hold. | ||
447 | |||
448 | o "kt" is the state of the RCU priority-boosting kernel | ||
449 | thread associated with the corresponding rcu_node structure. | ||
450 | The state can be one of the following: | ||
451 | |||
452 | "S" The kernel thread is stopped, in other words, all | ||
453 | CPUs corresponding to this rcu_node structure are | ||
454 | offline. | ||
455 | |||
456 | "R" The kernel thread is running. | ||
457 | |||
458 | "W" The kernel thread is waiting because there is no work | ||
459 | for it to do. | ||
460 | |||
461 | "Y" The kernel thread is yielding to avoid hogging CPU. | ||
462 | |||
463 | "?" Unknown value, indicates a bug. | ||
464 | |||
465 | o "ntb" is the number of tasks boosted. | ||
466 | |||
467 | o "neb" is the number of tasks boosted in order to complete an | ||
468 | expedited grace period. | ||
469 | |||
470 | o "nnb" is the number of tasks boosted in order to complete a | ||
471 | normal (non-expedited) grace period. When boosting a task | ||
472 | that was blocking both an expedited and a normal grace period, | ||
473 | it is counted against the expedited total above. | ||
474 | |||
475 | o "j" is the low-order 16 bits of the jiffies counter in | ||
476 | hexadecimal. | ||
477 | |||
478 | o "bt" is the low-order 16 bits of the value that the jiffies | ||
479 | counter will have when we next start boosting, assuming that | ||
480 | the current grace period does not end beforehand. This is | ||
481 | also in hexadecimal. | ||
482 | |||
483 | o "balk: nt" counts the number of times we didn't boost (in | ||
484 | other words, we balked) even though it was time to boost because | ||
485 | there were no blocked tasks to boost. This situation occurs | ||
486 | when there is one blocked task on one rcu_node structure and | ||
487 | none on some other rcu_node structure. | ||
488 | |||
489 | o "egt" counts the number of times we balked because although | ||
490 | there were blocked tasks, none of them were blocking the | ||
491 | current grace period, whether expedited or otherwise. | ||
492 | |||
493 | o "bt" counts the number of times we balked because boosting | ||
494 | had already been initiated for the current grace period. | ||
495 | |||
496 | o "nb" counts the number of times we balked because there | ||
497 | was at least one task blocking the current non-expedited grace | ||
498 | period that never had blocked. If it is already running, it | ||
499 | just won't help to boost its priority! | ||
500 | |||
501 | o "ny" counts the number of times we balked because it was | ||
502 | not yet time to start boosting. | ||
503 | |||
504 | o "nos" counts the number of times we balked for other | ||
505 | reasons, e.g., the grace period ended first. | ||
506 | |||
507 | |||
331 | CONFIG_TINY_RCU and CONFIG_TINY_PREEMPT_RCU debugfs Files and Formats | 508 | CONFIG_TINY_RCU and CONFIG_TINY_PREEMPT_RCU debugfs Files and Formats |
332 | 509 | ||
333 | These implementations of RCU provides a single debugfs file under the | 510 | These implementations of RCU provides a single debugfs file under the |
@@ -394,9 +571,9 @@ o "neb" is the number of expedited grace periods that have had | |||
394 | o "nnb" is the number of normal grace periods that have had | 571 | o "nnb" is the number of normal grace periods that have had |
395 | to resort to RCU priority boosting since boot. | 572 | to resort to RCU priority boosting since boot. |
396 | 573 | ||
397 | o "j" is the low-order 12 bits of the jiffies counter in hexadecimal. | 574 | o "j" is the low-order 16 bits of the jiffies counter in hexadecimal. |
398 | 575 | ||
399 | o "bt" is the low-order 12 bits of the value that the jiffies counter | 576 | o "bt" is the low-order 16 bits of the value that the jiffies counter |
400 | will have at the next time that boosting is scheduled to begin. | 577 | will have at the next time that boosting is scheduled to begin. |
401 | 578 | ||
402 | o In the line beginning with "normal balk", the fields are as follows: | 579 | o In the line beginning with "normal balk", the fields are as follows: |
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index b0b814d75ca1..60740e8ecb37 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt | |||
@@ -836,7 +836,6 @@ Provides counts of softirq handlers serviced since boot time, for each cpu. | |||
836 | TASKLET: 0 0 0 290 | 836 | TASKLET: 0 0 0 290 |
837 | SCHED: 27035 26983 26971 26746 | 837 | SCHED: 27035 26983 26971 26746 |
838 | HRTIMER: 0 0 0 0 | 838 | HRTIMER: 0 0 0 0 |
839 | RCU: 1678 1769 2178 2250 | ||
840 | 839 | ||
841 | 840 | ||
842 | 1.3 IDE devices in /proc/ide | 841 | 1.3 IDE devices in /proc/ide |