diff options
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 | 278 | ||||
| -rw-r--r-- | Documentation/filesystems/proc.txt | 1 |
4 files changed, 245 insertions, 59 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..c078ad48f7a1 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,7 +94,8 @@ 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 |
| @@ -108,7 +122,7 @@ o "df" is the number of times that some other CPU has forced a | |||
| 108 | 122 | ||
| 109 | o "of" is the number of times that some other CPU has forced a | 123 | 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 | 124 | quiescent state on behalf of this CPU due to this CPU being |
| 111 | offline. In a perfect world, this might neve happen, but it | 125 | offline. In a perfect world, this might never happen, but it |
| 112 | turns out that offlining and onlining a CPU can take several grace | 126 | 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 | 127 | 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. | 128 | when RCU believes that the CPU is online when it really is not. |
| @@ -125,6 +139,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 | 139 | of what state they are in (new, waiting for grace period to |
| 126 | start, waiting for grace period to end, ready to invoke). | 140 | start, waiting for grace period to end, ready to invoke). |
| 127 | 141 | ||
| 142 | o "qs" gives an indication of the state of the callback queue | ||
| 143 | with four characters: | ||
| 144 | |||
| 145 | "N" Indicates that there are callbacks queued that are not | ||
| 146 | ready to be handled by the next grace period, and thus | ||
| 147 | will be handled by the grace period following the next | ||
| 148 | one. | ||
| 149 | |||
| 150 | "R" Indicates that there are callbacks queued that are | ||
| 151 | ready to be handled by the next grace period. | ||
| 152 | |||
| 153 | "W" Indicates that there are callbacks queued that are | ||
| 154 | waiting on the current grace period. | ||
| 155 | |||
| 156 | "D" Indicates that there are callbacks queued that have | ||
| 157 | already been handled by a prior grace period, and are | ||
| 158 | thus waiting to be invoked. Note that callbacks in | ||
| 159 | the process of being invoked are not counted here. | ||
| 160 | Callbacks in the process of being invoked are those | ||
| 161 | that have been removed from the rcu_data structures | ||
| 162 | queues by rcu_do_batch(), but which have not yet been | ||
| 163 | invoked. | ||
| 164 | |||
| 165 | If there are no callbacks in a given one of the above states, | ||
| 166 | the corresponding character is replaced by ".". | ||
| 167 | |||
| 168 | o "kt" is the per-CPU kernel-thread state. The digit preceding | ||
| 169 | the first slash is zero if there is no work pending and 1 | ||
| 170 | otherwise. The character between the first pair of slashes is | ||
| 171 | as follows: | ||
| 172 | |||
| 173 | "S" The kernel thread is stopped, in other words, all | ||
| 174 | CPUs corresponding to this rcu_node structure are | ||
| 175 | offline. | ||
| 176 | |||
| 177 | "R" The kernel thread is running. | ||
| 178 | |||
| 179 | "W" The kernel thread is waiting because there is no work | ||
| 180 | for it to do. | ||
| 181 | |||
| 182 | "O" The kernel thread is waiting because it has been | ||
| 183 | forced off of its designated CPU or because its | ||
| 184 | ->cpus_allowed mask permits it to run on other than | ||
| 185 | its designated CPU. | ||
| 186 | |||
| 187 | "Y" The kernel thread is yielding to avoid hogging CPU. | ||
| 188 | |||
| 189 | "?" Unknown value, indicates a bug. | ||
| 190 | |||
| 191 | The number after the final slash is the CPU that the kthread | ||
| 192 | is actually running on. | ||
| 193 | |||
| 194 | o "ktl" is the low-order 16 bits (in hexadecimal) of the count of | ||
| 195 | the number of times that this CPU's per-CPU kthread has gone | ||
| 196 | through its loop servicing invoke_rcu_cpu_kthread() requests. | ||
| 197 | |||
| 128 | o "b" is the batch limit for this CPU. If more than this number | 198 | 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 | 199 | of RCU callbacks is ready to invoke, then the remainder will |
| 130 | be deferred. | 200 | be deferred. |
| @@ -174,14 +244,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: | 244 | The output of "cat rcu/rcuhier" looks as follows, with very long lines: |
| 175 | 245 | ||
| 176 | c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6 | 246 | c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6 |
| 177 | 1/1 .>. 0:127 ^0 | 247 | 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 | 248 | 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 | 249 | 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: | 250 | rcu_bh: |
| 181 | c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0 | 251 | c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0 |
| 182 | 0/1 .>. 0:127 ^0 | 252 | 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 | 253 | 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 | 254 | 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 | 255 | ||
| 186 | This is once again split into "rcu_sched" and "rcu_bh" portions, | 256 | This is once again split into "rcu_sched" and "rcu_bh" portions, |
| 187 | and CONFIG_TREE_PREEMPT_RCU kernels will again have an additional | 257 | and CONFIG_TREE_PREEMPT_RCU kernels will again have an additional |
| @@ -240,13 +310,20 @@ o Each element of the form "1/1 0:127 ^0" represents one struct | |||
| 240 | current grace period. | 310 | current grace period. |
| 241 | 311 | ||
| 242 | o The characters separated by the ">" indicate the state | 312 | o The characters separated by the ">" indicate the state |
| 243 | of the blocked-tasks lists. A "T" preceding the ">" | 313 | of the blocked-tasks lists. A "G" preceding the ">" |
| 244 | indicates that at least one task blocked in an RCU | 314 | indicates that at least one task blocked in an RCU |
| 245 | read-side critical section blocks the current grace | 315 | read-side critical section blocks the current grace |
| 246 | period, while a "." preceding the ">" indicates otherwise. | 316 | period, while a "E" preceding the ">" indicates that |
| 247 | The character following the ">" indicates similarly for | 317 | at least one task blocked in an RCU read-side critical |
| 248 | the next grace period. A "T" should appear in this | 318 | section blocks the current expedited grace period. |
| 249 | field only for rcu-preempt. | 319 | A "T" character following the ">" indicates that at |
| 320 | least one task is blocked within an RCU read-side | ||
| 321 | critical section, regardless of whether any current | ||
| 322 | grace period (expedited or normal) is inconvenienced. | ||
| 323 | A "." character appears if the corresponding condition | ||
| 324 | does not hold, so that "..>." indicates that no tasks | ||
| 325 | are blocked. In contrast, "GE>T" indicates maximal | ||
| 326 | inconvenience from blocked tasks. | ||
| 250 | 327 | ||
| 251 | o The numbers separated by the ":" are the range of CPUs | 328 | o The numbers separated by the ":" are the range of CPUs |
| 252 | served by this struct rcu_node. This can be helpful | 329 | served by this struct rcu_node. This can be helpful |
| @@ -328,6 +405,113 @@ o "nn" is the number of times that this CPU needed nothing. Alert | |||
| 328 | is due to short-circuit evaluation in rcu_pending(). | 405 | is due to short-circuit evaluation in rcu_pending(). |
| 329 | 406 | ||
| 330 | 407 | ||
| 408 | The output of "cat rcu/rcutorture" looks as follows: | ||
| 409 | |||
| 410 | rcutorture test sequence: 0 (test in progress) | ||
| 411 | rcutorture update version number: 615 | ||
| 412 | |||
| 413 | The first line shows the number of rcutorture tests that have completed | ||
| 414 | since boot. If a test is currently running, the "(test in progress)" | ||
| 415 | string will appear as shown above. The second line shows the number of | ||
| 416 | update cycles that the current test has started, or zero if there is | ||
| 417 | no test in progress. | ||
| 418 | |||
| 419 | |||
| 420 | The output of "cat rcu/rcuboost" looks as follows: | ||
| 421 | |||
| 422 | 0:5 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f | ||
| 423 | balk: nt=0 egt=989 bt=0 nb=0 ny=0 nos=16 | ||
| 424 | 6:7 tasks=.... kt=W ntb=0 neb=0 nnb=0 j=2f95 bt=300f | ||
| 425 | balk: nt=0 egt=225 bt=0 nb=0 ny=0 nos=6 | ||
| 426 | |||
| 427 | This information is output only for rcu_preempt. Each two-line entry | ||
| 428 | corresponds to a leaf rcu_node strcuture. The fields are as follows: | ||
| 429 | |||
| 430 | o "n:m" is the CPU-number range for the corresponding two-line | ||
| 431 | entry. In the sample output above, the first entry covers | ||
| 432 | CPUs zero through five and the second entry covers CPUs 6 | ||
| 433 | and 7. | ||
| 434 | |||
| 435 | o "tasks=TNEB" gives the state of the various segments of the | ||
| 436 | rnp->blocked_tasks list: | ||
| 437 | |||
| 438 | "T" This indicates that there are some tasks that blocked | ||
| 439 | while running on one of the corresponding CPUs while | ||
| 440 | in an RCU read-side critical section. | ||
| 441 | |||
| 442 | "N" This indicates that some of the blocked tasks are preventing | ||
| 443 | the current normal (non-expedited) grace period from | ||
| 444 | completing. | ||
| 445 | |||
| 446 | "E" This indicates that some of the blocked tasks are preventing | ||
| 447 | the current expedited grace period from completing. | ||
| 448 | |||
| 449 | "B" This indicates that some of the blocked tasks are in | ||
| 450 | need of RCU priority boosting. | ||
| 451 | |||
| 452 | Each character is replaced with "." if the corresponding | ||
| 453 | condition does not hold. | ||
| 454 | |||
| 455 | o "kt" is the state of the RCU priority-boosting kernel | ||
| 456 | thread associated with the corresponding rcu_node structure. | ||
| 457 | The state can be one of the following: | ||
| 458 | |||
| 459 | "S" The kernel thread is stopped, in other words, all | ||
| 460 | CPUs corresponding to this rcu_node structure are | ||
| 461 | offline. | ||
| 462 | |||
| 463 | "R" The kernel thread is running. | ||
| 464 | |||
| 465 | "W" The kernel thread is waiting because there is no work | ||
| 466 | for it to do. | ||
| 467 | |||
| 468 | "Y" The kernel thread is yielding to avoid hogging CPU. | ||
| 469 | |||
| 470 | "?" Unknown value, indicates a bug. | ||
| 471 | |||
| 472 | o "ntb" is the number of tasks boosted. | ||
| 473 | |||
| 474 | o "neb" is the number of tasks boosted in order to complete an | ||
| 475 | expedited grace period. | ||
| 476 | |||
| 477 | o "nnb" is the number of tasks boosted in order to complete a | ||
| 478 | normal (non-expedited) grace period. When boosting a task | ||
| 479 | that was blocking both an expedited and a normal grace period, | ||
| 480 | it is counted against the expedited total above. | ||
| 481 | |||
| 482 | o "j" is the low-order 16 bits of the jiffies counter in | ||
| 483 | hexadecimal. | ||
| 484 | |||
| 485 | o "bt" is the low-order 16 bits of the value that the jiffies | ||
| 486 | counter will have when we next start boosting, assuming that | ||
| 487 | the current grace period does not end beforehand. This is | ||
| 488 | also in hexadecimal. | ||
| 489 | |||
| 490 | o "balk: nt" counts the number of times we didn't boost (in | ||
| 491 | other words, we balked) even though it was time to boost because | ||
| 492 | there were no blocked tasks to boost. This situation occurs | ||
| 493 | when there is one blocked task on one rcu_node structure and | ||
| 494 | none on some other rcu_node structure. | ||
| 495 | |||
| 496 | o "egt" counts the number of times we balked because although | ||
| 497 | there were blocked tasks, none of them were blocking the | ||
| 498 | current grace period, whether expedited or otherwise. | ||
| 499 | |||
| 500 | o "bt" counts the number of times we balked because boosting | ||
| 501 | had already been initiated for the current grace period. | ||
| 502 | |||
| 503 | o "nb" counts the number of times we balked because there | ||
| 504 | was at least one task blocking the current non-expedited grace | ||
| 505 | period that never had blocked. If it is already running, it | ||
| 506 | just won't help to boost its priority! | ||
| 507 | |||
| 508 | o "ny" counts the number of times we balked because it was | ||
| 509 | not yet time to start boosting. | ||
| 510 | |||
| 511 | o "nos" counts the number of times we balked for other | ||
| 512 | reasons, e.g., the grace period ended first. | ||
| 513 | |||
| 514 | |||
| 331 | CONFIG_TINY_RCU and CONFIG_TINY_PREEMPT_RCU debugfs Files and Formats | 515 | CONFIG_TINY_RCU and CONFIG_TINY_PREEMPT_RCU debugfs Files and Formats |
| 332 | 516 | ||
| 333 | These implementations of RCU provides a single debugfs file under the | 517 | These implementations of RCU provides a single debugfs file under the |
| @@ -394,9 +578,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 | 578 | o "nnb" is the number of normal grace periods that have had |
| 395 | to resort to RCU priority boosting since boot. | 579 | to resort to RCU priority boosting since boot. |
| 396 | 580 | ||
| 397 | o "j" is the low-order 12 bits of the jiffies counter in hexadecimal. | 581 | o "j" is the low-order 16 bits of the jiffies counter in hexadecimal. |
| 398 | 582 | ||
| 399 | o "bt" is the low-order 12 bits of the value that the jiffies counter | 583 | 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. | 584 | will have at the next time that boosting is scheduled to begin. |
| 401 | 585 | ||
| 402 | o In the line beginning with "normal balk", the fields are as follows: | 586 | 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 |
