Merge branch 'rcu/doc' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux...
authorIngo Molnar <mingo@kernel.org>
Tue, 30 Apr 2013 08:49:04 +0000 (10:49 +0200)
committerIngo Molnar <mingo@kernel.org>
Tue, 30 Apr 2013 08:49:04 +0000 (10:49 +0200)
Pull RCU documentation update for reducing OS jitter due to
per-CPU kthreads, from Paul McKenney.

Signed-off-by: Ingo Molnar <mingo@kernel.org>
1  2 
Documentation/kernel-parameters.txt
init/Kconfig

index 8ccbf27aead4def123c94eaf0de40e39db40199f,22303b2e74bc9def14d48d27889b9d58769490dd..52ecc9b8467393dce1682e940207187937bc8467
@@@ -596,6 -596,9 +596,6 @@@ bytes respectively. Such letter suffixe
                        is selected automatically. Check
                        Documentation/kdump/kdump.txt for further details.
  
 -      crashkernel_low=size[KMG]
 -                      [KNL, x86] parts under 4G.
 -
        crashkernel=range1:size1[,range2:size2,...][@offset]
                        [KNL] Same as above, but depends on the memory
                        in the running system. The syntax of range is
                        a memory unit (amount[KMG]). See also
                        Documentation/kdump/kdump.txt for an example.
  
 +      crashkernel=size[KMG],high
 +                      [KNL, x86_64] range could be above 4G. Allow kernel
 +                      to allocate physical memory region from top, so could
 +                      be above 4G if system have more than 4G ram installed.
 +                      Otherwise memory region will be allocated below 4G, if
 +                      available.
 +                      It will be ignored if crashkernel=X is specified.
 +      crashkernel=size[KMG],low
 +                      [KNL, x86_64] range under 4G. When crashkernel=X,high
 +                      is passed, kernel could allocate physical memory region
 +                      above 4G, that cause second kernel crash on system
 +                      that require some amount of low memory, e.g. swiotlb
 +                      requires at least 64M+32K low memory.  Kernel would
 +                      try to allocate 72M below 4G automatically.
 +                      This one let user to specify own low range under 4G
 +                      for second kernel instead.
 +                      0: to disable low allocation.
 +                      It will be ignored when crashkernel=X,high is not used
 +                      or memory reserved is below 4G.
 +
        cs89x0_dma=     [HW,NET]
                        Format: <dma>
  
        edd=            [EDD]
                        Format: {"off" | "on" | "skip[mbr]"}
  
 +      efi_no_storage_paranoia [EFI; X86]
 +                      Using this parameter you can use more than 50% of
 +                      your efi variable storage. Use this parameter only if
 +                      you are really sure that your UEFI does sane gc and
 +                      fulfills the spec otherwise your board may brick.
 +
        eisa_irq_edge=  [PARISC,HW]
                        See header of drivers/parisc/eisa.c.
  
                        In kernels built with CONFIG_RCU_NOCB_CPU=y, set
                        the specified list of CPUs to be no-callback CPUs.
                        Invocation of these CPUs' RCU callbacks will
-                       be offloaded to "rcuoN" kthreads created for
-                       that purpose.  This reduces OS jitter on the
+                       be offloaded to "rcuox/N" kthreads created for
+                       that purpose, where "x" is "b" for RCU-bh, "p"
+                       for RCU-preempt, and "s" for RCU-sched, and "N"
+                       is the CPU number.  This reduces OS jitter on the
                        offloaded CPUs, which can be useful for HPC and
                        real-time workloads.  It can also improve energy
                        efficiency for asymmetric multiprocessors.
  
                        leaf rcu_node structure.  Useful for very large
                        systems.
  
+       rcutree.jiffies_till_first_fqs= [KNL,BOOT]
+                       Set delay from grace-period initialization to
+                       first attempt to force quiescent states.
+                       Units are jiffies, minimum value is zero,
+                       and maximum value is HZ.
+       rcutree.jiffies_till_next_fqs= [KNL,BOOT]
+                       Set delay between subsequent attempts to force
+                       quiescent states.  Units are jiffies, minimum
+                       value is one, and maximum value is HZ.
        rcutree.qhimark=        [KNL,BOOT]
                        Set threshold of queued
                        RCU callbacks over which batch limiting is disabled.
        rcutree.rcu_cpu_stall_timeout= [KNL,BOOT]
                        Set timeout for RCU CPU stall warning messages.
  
-       rcutree.jiffies_till_first_fqs= [KNL,BOOT]
-                       Set delay from grace-period initialization to
-                       first attempt to force quiescent states.
-                       Units are jiffies, minimum value is zero,
-                       and maximum value is HZ.
+       rcutree.rcu_idle_gp_delay=      [KNL,BOOT]
+                       Set wakeup interval for idle CPUs that have
+                       RCU callbacks (RCU_FAST_NO_HZ=y).
  
-       rcutree.jiffies_till_next_fqs= [KNL,BOOT]
-                       Set delay between subsequent attempts to force
-                       quiescent states.  Units are jiffies, minimum
-                       value is one, and maximum value is HZ.
+       rcutree.rcu_idle_lazy_gp_delay= [KNL,BOOT]
+                       Set wakeup interval for idle CPUs that have
+                       only "lazy" RCU callbacks (RCU_FAST_NO_HZ=y).
+                       Lazy RCU callbacks are those which RCU can
+                       prove do nothing more than free memory.
  
        rcutorture.fqs_duration= [KNL,BOOT]
                        Set duration of force_quiescent_state bursts.
diff --combined init/Kconfig
index 5341d7232c3ac083c2f87c8a3e1098a9c5e8d601,a3a2304fa6d2f1f7ea7108a73cbd179597c18aa0..71bb9e73011a7da1c54ca44522b2750302c2e53c
@@@ -28,6 -28,10 +28,6 @@@ config BUILDTIME_EXTABLE_SOR
  
  menu "General setup"
  
 -config EXPERIMENTAL
 -      bool
 -      default y
 -
  config BROKEN
        bool
  
@@@ -578,13 -582,16 +578,16 @@@ config RCU_FAST_NO_H
        depends on NO_HZ && SMP
        default n
        help
-         This option causes RCU to attempt to accelerate grace periods in
-         order to allow CPUs to enter dynticks-idle state more quickly.
-         On the other hand, this option increases the overhead of the
-         dynticks-idle checking, thus degrading scheduling latency.
+         This option permits CPUs to enter dynticks-idle state even if
+         they have RCU callbacks queued, and prevents RCU from waking
+         these CPUs up more than roughly once every four jiffies (by
+         default, you can adjust this using the rcutree.rcu_idle_gp_delay
+         parameter), thus improving energy efficiency.  On the other
+         hand, this option increases the duration of RCU grace periods,
+         for example, slowing down synchronize_rcu().
  
-         Say Y if energy efficiency is critically important, and you don't
-               care about real-time response.
+         Say Y if energy efficiency is critically important, and you
+               don't care about increased grace-period durations.
  
          Say N if you are unsure.
  
@@@ -651,7 -658,7 +654,7 @@@ config RCU_BOOST_DELA
          Accept the default if unsure.
  
  config RCU_NOCB_CPU
-       bool "Offload RCU callback processing from boot-selected CPUs"
+       bool "Offload RCU callback processing from boot-selected CPUs (EXPERIMENTAL"
        depends on TREE_RCU || TREE_PREEMPT_RCU
        default n
        help
  
          This option offloads callback invocation from the set of
          CPUs specified at boot time by the rcu_nocbs parameter.
-         For each such CPU, a kthread ("rcuoN") will be created to
-         invoke callbacks, where the "N" is the CPU being offloaded.
-         Nothing prevents this kthread from running on the specified
-         CPUs, but (1) the kthreads may be preempted between each
-         callback, and (2) affinity or cgroups can be used to force
-         the kthreads to run on whatever set of CPUs is desired.
-         Say Y here if you want reduced OS jitter on selected CPUs.
+         For each such CPU, a kthread ("rcuox/N") will be created to
+         invoke callbacks, where the "N" is the CPU being offloaded,
+         and where the "x" is "b" for RCU-bh, "p" for RCU-preempt, and
+         "s" for RCU-sched.  Nothing prevents this kthread from running
+         on the specified CPUs, but (1) the kthreads may be preempted
+         between each callback, and (2) affinity or cgroups can be used
+         to force the kthreads to run on whatever set of CPUs is desired.
+         Say Y here if you want to help to debug reduced OS jitter.
          Say N here if you are unsure.
  
+ choice
+       prompt "Build-forced no-CBs CPUs"
+       default RCU_NOCB_CPU_NONE
+       help
+         This option allows no-CBs CPUs to be specified at build time.
+         Additional no-CBs CPUs may be specified by the rcu_nocbs=
+         boot parameter.
+ config RCU_NOCB_CPU_NONE
+       bool "No build_forced no-CBs CPUs"
+       depends on RCU_NOCB_CPU
+       help
+         This option does not force any of the CPUs to be no-CBs CPUs.
+         Only CPUs designated by the rcu_nocbs= boot parameter will be
+         no-CBs CPUs.
+ config RCU_NOCB_CPU_ZERO
+       bool "CPU 0 is a build_forced no-CBs CPU"
+       depends on RCU_NOCB_CPU
+       help
+         This option forces CPU 0 to be a no-CBs CPU.  Additional CPUs
+         may be designated as no-CBs CPUs using the rcu_nocbs= boot
+         parameter will be no-CBs CPUs.
+         Select this if CPU 0 needs to be a no-CBs CPU for real-time
+         or energy-efficiency reasons.
+ config RCU_NOCB_CPU_ALL
+       bool "All CPUs are build_forced no-CBs CPUs"
+       depends on RCU_NOCB_CPU
+       help
+         This option forces all CPUs to be no-CBs CPUs.  The rcu_nocbs=
+         boot parameter will be ignored.
+         Select this if all CPUs need to be no-CBs CPUs for real-time
+         or energy-efficiency reasons.
+ endchoice
  endmenu # "RCU Subsystem"
  
  config IKCONFIG