summaryrefslogtreecommitdiff
path: root/Documentation
diff options
context:
space:
mode:
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-06-08 15:51:57 -0700
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>2011-06-21 23:21:28 -0700
commitd4989e0ba215099b24155bc8ae85080d3d7e4a4c (patch)
treec63eb0abcdbf2334c431aa162750ac977aec21b3 /Documentation
parent5077cd2b045140f03da879fcad91360d18d9071d (diff)
rcu: Avoid grace-period overflow for long dyntick-idle periods
In 32-bit kernels, if a given CPU is in dyntick-idle mode, its idea of the current grace period will become out of date. If it stays in dyntick-idle mode for too long the grace period will come back around to that CPU's old value, which can cause interesting and quite fatal failure modes. The time required for this too happen is measured in weeks, so it needs to be dealt with, especially given the appearance of multiprocessor battery-powered devices that might reasonably keep some of the CPUs in dyntick-idle state for as long as the user isn't carrying out some CPU-intensive task. The idea is to check a given CPU at the start of each grace period. If that CPU is online and the grace-period counter is more than half way to overflow, kick the CPU. In 64-bit kernels, the time required to overflow even assuming 500 grace periods per second is more than 500 million years. So 64-bit kernels blithely ignore this possibility. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/RCU/trace.txt9
1 files changed, 7 insertions, 2 deletions
diff --git a/Documentation/RCU/trace.txt b/Documentation/RCU/trace.txt
index a67af0a39ded..b9e26d66c27b 100644
--- a/Documentation/RCU/trace.txt
+++ b/Documentation/RCU/trace.txt
@@ -240,12 +240,12 @@ o "gpnum" is the number of grace periods that have started. It is
The output of "cat rcu/rcuhier" looks as follows, with very long lines:
-c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6
+c=6902 g=6903 s=2 jfq=3 j=72c7 nfqs=13142/nfqsng=0(13142) fqlh=6 doc=2
1/1 ..>. 0:127 ^0
3/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3
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
rcu_bh:
-c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0
+c=-226 g=-226 s=1 jfq=-5701 j=72c7 nfqs=88/nfqsng=0(88) fqlh=0 doc=3
0/1 ..>. 0:127 ^0
0/3 ..>. 0:35 ^0 0/0 ..>. 36:71 ^1 0/0 ..>. 72:107 ^2 0/0 ..>. 108:127 ^3
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
@@ -284,6 +284,11 @@ o "fqlh" is the number of calls to force_quiescent_state() that
exited immediately (without even being counted in nfqs above)
due to contention on ->fqslock.
+o "dovf" is the ID of the next CPU to be checked for dyntick-idle
+ grace-period overflow.
+
+ This field is displayed only for CONFIG_NO_HZ kernels.
+
o Each element of the form "1/1 0:127 ^0" represents one struct
rcu_node. Each line represents one level of the hierarchy, from
root to leaves. It is best to think of the rcu_data structures