aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-11-11 20:00:04 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-11-11 20:00:04 -0500
commit70fdcb83db15c85a0495b07dc55d9347a4c2efd9 (patch)
tree5a7f073e87e14aacfc77a21a3bf37bc470143871 /Documentation
parentedae583a6d4d1ad2eb73981787790993fef1bbad (diff)
parent0e95c69bde1a5bf22acd53b356fe10d7bec6e2be (diff)
Merge branch 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull RCU updates from Ingo Molnar: "The main RCU changes in this cycle are: - Idle entry/exit changes, to throttle callback execution and other refinements to speed up kbuild, primarily to address performance issues located by Tibor Billes. - Grace-period related changes, primarily to aid in debugging, inspired by an -rt debugging session. - Code reorganization moving RCU's source files into its own kernel/rcu/ directory. - RCU documentation updates - Miscellaneous fixes. Note, the following commit: 5c889690aa08 mm: Place preemption point in do_mlockall() loop is identical to the commit already in your tree via email: 22356f447ceb mm: Place preemption point in do_mlockall() loop [ Your version of the changelog nicely demonstrates it how kernel oops messages should be trimmed properly :-/ ]" * 'core-rcu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (30 commits) rcu: Move RCU-related source code to kernel/rcu directory rcu: Fix occurrence of "the the" in checklist.txt kthread: Add pointer to vmstat-avoidance patch rcu: Update stall-warning documentation rcu: Consistent rcu_is_watching() naming rcu: Change EXPORT_SYMBOL() to EXPORT_SYMBOL_GPL() rcu: Is it safe to enter an RCU read-side critical section? rcu: Throttle invoke_rcu_core() invocations due to non-lazy callbacks rcu: Throttle rcu_try_advance_all_cbs() execution rcu: Remove redundant code from rcu_cleanup_after_idle() rcu: Fix CONFIG_RCU_NOCB_CPU_ALL panic on machines with sparse CPU mask rcu: Avoid sparse warnings in rcu_nocb_wake trace event rcu: Track rcu_nocb_kthread()'s sleeping and awakening rcu: Distinguish between NOCB and non-NOCB rcu_callback trace events rcu: Add tracing for rcuo no-CBs CPU wakeup handshake rcu: Add tracing of normal (non-NOCB) grace-period requests rcu: Add tracing to rcu_gp_kthread() rcu: Flag lockless access to ->gp_flags with ACCESS_ONCE() rcu: Prevent spurious-wakeup DoS attack on rcu_gp_kthread() rcu: Improve grace-period start logic ...
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/DocBook/device-drivers.tmpl5
-rw-r--r--Documentation/RCU/checklist.txt4
-rw-r--r--Documentation/RCU/stallwarn.txt22
-rw-r--r--Documentation/kernel-parameters.txt95
-rw-r--r--Documentation/kernel-per-CPU-kthreads.txt17
5 files changed, 89 insertions, 54 deletions
diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl
index fe397f90a34f..6c9d9d37c83a 100644
--- a/Documentation/DocBook/device-drivers.tmpl
+++ b/Documentation/DocBook/device-drivers.tmpl
@@ -87,7 +87,10 @@ X!Iinclude/linux/kobject.h
87!Ekernel/printk/printk.c 87!Ekernel/printk/printk.c
88!Ekernel/panic.c 88!Ekernel/panic.c
89!Ekernel/sys.c 89!Ekernel/sys.c
90!Ekernel/rcupdate.c 90!Ekernel/rcu/srcu.c
91!Ekernel/rcu/tree.c
92!Ekernel/rcu/tree_plugin.h
93!Ekernel/rcu/update.c
91 </sect1> 94 </sect1>
92 95
93 <sect1><title>Device Resource Management</title> 96 <sect1><title>Device Resource Management</title>
diff --git a/Documentation/RCU/checklist.txt b/Documentation/RCU/checklist.txt
index 7703ec73a9bb..91266193b8f4 100644
--- a/Documentation/RCU/checklist.txt
+++ b/Documentation/RCU/checklist.txt
@@ -202,8 +202,8 @@ over a rather long period of time, but improvements are always welcome!
202 updater uses call_rcu_sched() or synchronize_sched(), then 202 updater uses call_rcu_sched() or synchronize_sched(), then
203 the corresponding readers must disable preemption, possibly 203 the corresponding readers must disable preemption, possibly
204 by calling rcu_read_lock_sched() and rcu_read_unlock_sched(). 204 by calling rcu_read_lock_sched() and rcu_read_unlock_sched().
205 If the updater uses synchronize_srcu() or call_srcu(), 205 If the updater uses synchronize_srcu() or call_srcu(), then
206 the the corresponding readers must use srcu_read_lock() and 206 the corresponding readers must use srcu_read_lock() and
207 srcu_read_unlock(), and with the same srcu_struct. The rules for 207 srcu_read_unlock(), and with the same srcu_struct. The rules for
208 the expedited primitives are the same as for their non-expedited 208 the expedited primitives are the same as for their non-expedited
209 counterparts. Mixing things up will result in confusion and 209 counterparts. Mixing things up will result in confusion and
diff --git a/Documentation/RCU/stallwarn.txt b/Documentation/RCU/stallwarn.txt
index 8e9359de1d28..6f3a0057548e 100644
--- a/Documentation/RCU/stallwarn.txt
+++ b/Documentation/RCU/stallwarn.txt
@@ -12,12 +12,12 @@ CONFIG_RCU_CPU_STALL_TIMEOUT
12 This kernel configuration parameter defines the period of time 12 This kernel configuration parameter defines the period of time
13 that RCU will wait from the beginning of a grace period until it 13 that RCU will wait from the beginning of a grace period until it
14 issues an RCU CPU stall warning. This time period is normally 14 issues an RCU CPU stall warning. This time period is normally
15 sixty seconds. 15 21 seconds.
16 16
17 This configuration parameter may be changed at runtime via the 17 This configuration parameter may be changed at runtime via the
18 /sys/module/rcutree/parameters/rcu_cpu_stall_timeout, however 18 /sys/module/rcutree/parameters/rcu_cpu_stall_timeout, however
19 this parameter is checked only at the beginning of a cycle. 19 this parameter is checked only at the beginning of a cycle.
20 So if you are 30 seconds into a 70-second stall, setting this 20 So if you are 10 seconds into a 40-second stall, setting this
21 sysfs parameter to (say) five will shorten the timeout for the 21 sysfs parameter to (say) five will shorten the timeout for the
22 -next- stall, or the following warning for the current stall 22 -next- stall, or the following warning for the current stall
23 (assuming the stall lasts long enough). It will not affect the 23 (assuming the stall lasts long enough). It will not affect the
@@ -32,7 +32,7 @@ CONFIG_RCU_CPU_STALL_VERBOSE
32 also dump the stacks of any tasks that are blocking the current 32 also dump the stacks of any tasks that are blocking the current
33 RCU-preempt grace period. 33 RCU-preempt grace period.
34 34
35RCU_CPU_STALL_INFO 35CONFIG_RCU_CPU_STALL_INFO
36 36
37 This kernel configuration parameter causes the stall warning to 37 This kernel configuration parameter causes the stall warning to
38 print out additional per-CPU diagnostic information, including 38 print out additional per-CPU diagnostic information, including
@@ -43,7 +43,8 @@ RCU_STALL_DELAY_DELTA
43 Although the lockdep facility is extremely useful, it does add 43 Although the lockdep facility is extremely useful, it does add
44 some overhead. Therefore, under CONFIG_PROVE_RCU, the 44 some overhead. Therefore, under CONFIG_PROVE_RCU, the
45 RCU_STALL_DELAY_DELTA macro allows five extra seconds before 45 RCU_STALL_DELAY_DELTA macro allows five extra seconds before
46 giving an RCU CPU stall warning message. 46 giving an RCU CPU stall warning message. (This is a cpp
47 macro, not a kernel configuration parameter.)
47 48
48RCU_STALL_RAT_DELAY 49RCU_STALL_RAT_DELAY
49 50
@@ -52,7 +53,8 @@ RCU_STALL_RAT_DELAY
52 However, if the offending CPU does not detect its own stall in 53 However, if the offending CPU does not detect its own stall in
53 the number of jiffies specified by RCU_STALL_RAT_DELAY, then 54 the number of jiffies specified by RCU_STALL_RAT_DELAY, then
54 some other CPU will complain. This delay is normally set to 55 some other CPU will complain. This delay is normally set to
55 two jiffies. 56 two jiffies. (This is a cpp macro, not a kernel configuration
57 parameter.)
56 58
57When a CPU detects that it is stalling, it will print a message similar 59When a CPU detects that it is stalling, it will print a message similar
58to the following: 60to the following:
@@ -86,7 +88,12 @@ printing, there will be a spurious stall-warning message:
86 88
87INFO: rcu_bh_state detected stalls on CPUs/tasks: { } (detected by 4, 2502 jiffies) 89INFO: rcu_bh_state detected stalls on CPUs/tasks: { } (detected by 4, 2502 jiffies)
88 90
89This is rare, but does happen from time to time in real life. 91This is rare, but does happen from time to time in real life. It is also
92possible for a zero-jiffy stall to be flagged in this case, depending
93on how the stall warning and the grace-period initialization happen to
94interact. Please note that it is not possible to entirely eliminate this
95sort of false positive without resorting to things like stop_machine(),
96which is overkill for this sort of problem.
90 97
91If the CONFIG_RCU_CPU_STALL_INFO kernel configuration parameter is set, 98If the CONFIG_RCU_CPU_STALL_INFO kernel configuration parameter is set,
92more information is printed with the stall-warning message, for example: 99more information is printed with the stall-warning message, for example:
@@ -216,4 +223,5 @@ that portion of the stack which remains the same from trace to trace.
216If you can reliably trigger the stall, ftrace can be quite helpful. 223If you can reliably trigger the stall, ftrace can be quite helpful.
217 224
218RCU bugs can often be debugged with the help of CONFIG_RCU_TRACE 225RCU bugs can often be debugged with the help of CONFIG_RCU_TRACE
219and with RCU's event tracing. 226and with RCU's event tracing. For information on RCU's event tracing,
227see include/trace/events/rcu.h.
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index fcbb736d55fe..203f4a9d9efe 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -2599,7 +2599,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
2599 ramdisk_size= [RAM] Sizes of RAM disks in kilobytes 2599 ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
2600 See Documentation/blockdev/ramdisk.txt. 2600 See Documentation/blockdev/ramdisk.txt.
2601 2601
2602 rcu_nocbs= [KNL,BOOT] 2602 rcu_nocbs= [KNL]
2603 In kernels built with CONFIG_RCU_NOCB_CPU=y, set 2603 In kernels built with CONFIG_RCU_NOCB_CPU=y, set
2604 the specified list of CPUs to be no-callback CPUs. 2604 the specified list of CPUs to be no-callback CPUs.
2605 Invocation of these CPUs' RCU callbacks will 2605 Invocation of these CPUs' RCU callbacks will
@@ -2612,7 +2612,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
2612 real-time workloads. It can also improve energy 2612 real-time workloads. It can also improve energy
2613 efficiency for asymmetric multiprocessors. 2613 efficiency for asymmetric multiprocessors.
2614 2614
2615 rcu_nocb_poll [KNL,BOOT] 2615 rcu_nocb_poll [KNL]
2616 Rather than requiring that offloaded CPUs 2616 Rather than requiring that offloaded CPUs
2617 (specified by rcu_nocbs= above) explicitly 2617 (specified by rcu_nocbs= above) explicitly
2618 awaken the corresponding "rcuoN" kthreads, 2618 awaken the corresponding "rcuoN" kthreads,
@@ -2623,126 +2623,145 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
2623 energy efficiency by requiring that the kthreads 2623 energy efficiency by requiring that the kthreads
2624 periodically wake up to do the polling. 2624 periodically wake up to do the polling.
2625 2625
2626 rcutree.blimit= [KNL,BOOT] 2626 rcutree.blimit= [KNL]
2627 Set maximum number of finished RCU callbacks to process 2627 Set maximum number of finished RCU callbacks to process
2628 in one batch. 2628 in one batch.
2629 2629
2630 rcutree.fanout_leaf= [KNL,BOOT] 2630 rcutree.rcu_fanout_leaf= [KNL]
2631 Increase the number of CPUs assigned to each 2631 Increase the number of CPUs assigned to each
2632 leaf rcu_node structure. Useful for very large 2632 leaf rcu_node structure. Useful for very large
2633 systems. 2633 systems.
2634 2634
2635 rcutree.jiffies_till_first_fqs= [KNL,BOOT] 2635 rcutree.jiffies_till_first_fqs= [KNL]
2636 Set delay from grace-period initialization to 2636 Set delay from grace-period initialization to
2637 first attempt to force quiescent states. 2637 first attempt to force quiescent states.
2638 Units are jiffies, minimum value is zero, 2638 Units are jiffies, minimum value is zero,
2639 and maximum value is HZ. 2639 and maximum value is HZ.
2640 2640
2641 rcutree.jiffies_till_next_fqs= [KNL,BOOT] 2641 rcutree.jiffies_till_next_fqs= [KNL]
2642 Set delay between subsequent attempts to force 2642 Set delay between subsequent attempts to force
2643 quiescent states. Units are jiffies, minimum 2643 quiescent states. Units are jiffies, minimum
2644 value is one, and maximum value is HZ. 2644 value is one, and maximum value is HZ.
2645 2645
2646 rcutree.qhimark= [KNL,BOOT] 2646 rcutree.qhimark= [KNL]
2647 Set threshold of queued 2647 Set threshold of queued
2648 RCU callbacks over which batch limiting is disabled. 2648 RCU callbacks over which batch limiting is disabled.
2649 2649
2650 rcutree.qlowmark= [KNL,BOOT] 2650 rcutree.qlowmark= [KNL]
2651 Set threshold of queued RCU callbacks below which 2651 Set threshold of queued RCU callbacks below which
2652 batch limiting is re-enabled. 2652 batch limiting is re-enabled.
2653 2653
2654 rcutree.rcu_cpu_stall_suppress= [KNL,BOOT] 2654 rcutree.rcu_idle_gp_delay= [KNL]
2655 Suppress RCU CPU stall warning messages.
2656
2657 rcutree.rcu_cpu_stall_timeout= [KNL,BOOT]
2658 Set timeout for RCU CPU stall warning messages.
2659
2660 rcutree.rcu_idle_gp_delay= [KNL,BOOT]
2661 Set wakeup interval for idle CPUs that have 2655 Set wakeup interval for idle CPUs that have
2662 RCU callbacks (RCU_FAST_NO_HZ=y). 2656 RCU callbacks (RCU_FAST_NO_HZ=y).
2663 2657
2664 rcutree.rcu_idle_lazy_gp_delay= [KNL,BOOT] 2658 rcutree.rcu_idle_lazy_gp_delay= [KNL]
2665 Set wakeup interval for idle CPUs that have 2659 Set wakeup interval for idle CPUs that have
2666 only "lazy" RCU callbacks (RCU_FAST_NO_HZ=y). 2660 only "lazy" RCU callbacks (RCU_FAST_NO_HZ=y).
2667 Lazy RCU callbacks are those which RCU can 2661 Lazy RCU callbacks are those which RCU can
2668 prove do nothing more than free memory. 2662 prove do nothing more than free memory.
2669 2663
2670 rcutorture.fqs_duration= [KNL,BOOT] 2664 rcutorture.fqs_duration= [KNL]
2671 Set duration of force_quiescent_state bursts. 2665 Set duration of force_quiescent_state bursts.
2672 2666
2673 rcutorture.fqs_holdoff= [KNL,BOOT] 2667 rcutorture.fqs_holdoff= [KNL]
2674 Set holdoff time within force_quiescent_state bursts. 2668 Set holdoff time within force_quiescent_state bursts.
2675 2669
2676 rcutorture.fqs_stutter= [KNL,BOOT] 2670 rcutorture.fqs_stutter= [KNL]
2677 Set wait time between force_quiescent_state bursts. 2671 Set wait time between force_quiescent_state bursts.
2678 2672
2679 rcutorture.irqreader= [KNL,BOOT] 2673 rcutorture.gp_exp= [KNL]
2680 Test RCU readers from irq handlers. 2674 Use expedited update-side primitives.
2675
2676 rcutorture.gp_normal= [KNL]
2677 Use normal (non-expedited) update-side primitives.
2678 If both gp_exp and gp_normal are set, do both.
2679 If neither gp_exp nor gp_normal are set, still
2680 do both.
2681 2681
2682 rcutorture.n_barrier_cbs= [KNL,BOOT] 2682 rcutorture.n_barrier_cbs= [KNL]
2683 Set callbacks/threads for rcu_barrier() testing. 2683 Set callbacks/threads for rcu_barrier() testing.
2684 2684
2685 rcutorture.nfakewriters= [KNL,BOOT] 2685 rcutorture.nfakewriters= [KNL]
2686 Set number of concurrent RCU writers. These just 2686 Set number of concurrent RCU writers. These just
2687 stress RCU, they don't participate in the actual 2687 stress RCU, they don't participate in the actual
2688 test, hence the "fake". 2688 test, hence the "fake".
2689 2689
2690 rcutorture.nreaders= [KNL,BOOT] 2690 rcutorture.nreaders= [KNL]
2691 Set number of RCU readers. 2691 Set number of RCU readers.
2692 2692
2693 rcutorture.onoff_holdoff= [KNL,BOOT] 2693 rcutorture.object_debug= [KNL]
2694 Enable debug-object double-call_rcu() testing.
2695
2696 rcutorture.onoff_holdoff= [KNL]
2694 Set time (s) after boot for CPU-hotplug testing. 2697 Set time (s) after boot for CPU-hotplug testing.
2695 2698
2696 rcutorture.onoff_interval= [KNL,BOOT] 2699 rcutorture.onoff_interval= [KNL]
2697 Set time (s) between CPU-hotplug operations, or 2700 Set time (s) between CPU-hotplug operations, or
2698 zero to disable CPU-hotplug testing. 2701 zero to disable CPU-hotplug testing.
2699 2702
2700 rcutorture.shuffle_interval= [KNL,BOOT] 2703 rcutorture.rcutorture_runnable= [BOOT]
2704 Start rcutorture running at boot time.
2705
2706 rcutorture.shuffle_interval= [KNL]
2701 Set task-shuffle interval (s). Shuffling tasks 2707 Set task-shuffle interval (s). Shuffling tasks
2702 allows some CPUs to go into dyntick-idle mode 2708 allows some CPUs to go into dyntick-idle mode
2703 during the rcutorture test. 2709 during the rcutorture test.
2704 2710
2705 rcutorture.shutdown_secs= [KNL,BOOT] 2711 rcutorture.shutdown_secs= [KNL]
2706 Set time (s) after boot system shutdown. This 2712 Set time (s) after boot system shutdown. This
2707 is useful for hands-off automated testing. 2713 is useful for hands-off automated testing.
2708 2714
2709 rcutorture.stall_cpu= [KNL,BOOT] 2715 rcutorture.stall_cpu= [KNL]
2710 Duration of CPU stall (s) to test RCU CPU stall 2716 Duration of CPU stall (s) to test RCU CPU stall
2711 warnings, zero to disable. 2717 warnings, zero to disable.
2712 2718
2713 rcutorture.stall_cpu_holdoff= [KNL,BOOT] 2719 rcutorture.stall_cpu_holdoff= [KNL]
2714 Time to wait (s) after boot before inducing stall. 2720 Time to wait (s) after boot before inducing stall.
2715 2721
2716 rcutorture.stat_interval= [KNL,BOOT] 2722 rcutorture.stat_interval= [KNL]
2717 Time (s) between statistics printk()s. 2723 Time (s) between statistics printk()s.
2718 2724
2719 rcutorture.stutter= [KNL,BOOT] 2725 rcutorture.stutter= [KNL]
2720 Time (s) to stutter testing, for example, specifying 2726 Time (s) to stutter testing, for example, specifying
2721 five seconds causes the test to run for five seconds, 2727 five seconds causes the test to run for five seconds,
2722 wait for five seconds, and so on. This tests RCU's 2728 wait for five seconds, and so on. This tests RCU's
2723 ability to transition abruptly to and from idle. 2729 ability to transition abruptly to and from idle.
2724 2730
2725 rcutorture.test_boost= [KNL,BOOT] 2731 rcutorture.test_boost= [KNL]
2726 Test RCU priority boosting? 0=no, 1=maybe, 2=yes. 2732 Test RCU priority boosting? 0=no, 1=maybe, 2=yes.
2727 "Maybe" means test if the RCU implementation 2733 "Maybe" means test if the RCU implementation
2728 under test support RCU priority boosting. 2734 under test support RCU priority boosting.
2729 2735
2730 rcutorture.test_boost_duration= [KNL,BOOT] 2736 rcutorture.test_boost_duration= [KNL]
2731 Duration (s) of each individual boost test. 2737 Duration (s) of each individual boost test.
2732 2738
2733 rcutorture.test_boost_interval= [KNL,BOOT] 2739 rcutorture.test_boost_interval= [KNL]
2734 Interval (s) between each boost test. 2740 Interval (s) between each boost test.
2735 2741
2736 rcutorture.test_no_idle_hz= [KNL,BOOT] 2742 rcutorture.test_no_idle_hz= [KNL]
2737 Test RCU's dyntick-idle handling. See also the 2743 Test RCU's dyntick-idle handling. See also the
2738 rcutorture.shuffle_interval parameter. 2744 rcutorture.shuffle_interval parameter.
2739 2745
2740 rcutorture.torture_type= [KNL,BOOT] 2746 rcutorture.torture_type= [KNL]
2741 Specify the RCU implementation to test. 2747 Specify the RCU implementation to test.
2742 2748
2743 rcutorture.verbose= [KNL,BOOT] 2749 rcutorture.verbose= [KNL]
2744 Enable additional printk() statements. 2750 Enable additional printk() statements.
2745 2751
2752 rcupdate.rcu_expedited= [KNL]
2753 Use expedited grace-period primitives, for
2754 example, synchronize_rcu_expedited() instead
2755 of synchronize_rcu(). This reduces latency,
2756 but can increase CPU utilization, degrade
2757 real-time latency, and degrade energy efficiency.
2758
2759 rcupdate.rcu_cpu_stall_suppress= [KNL]
2760 Suppress RCU CPU stall warning messages.
2761
2762 rcupdate.rcu_cpu_stall_timeout= [KNL]
2763 Set timeout for RCU CPU stall warning messages.
2764
2746 rdinit= [KNL] 2765 rdinit= [KNL]
2747 Format: <full_path> 2766 Format: <full_path>
2748 Run specified binary instead of /init from the ramdisk, 2767 Run specified binary instead of /init from the ramdisk,
diff --git a/Documentation/kernel-per-CPU-kthreads.txt b/Documentation/kernel-per-CPU-kthreads.txt
index 32351bfabf20..827104fb9364 100644
--- a/Documentation/kernel-per-CPU-kthreads.txt
+++ b/Documentation/kernel-per-CPU-kthreads.txt
@@ -181,12 +181,17 @@ To reduce its OS jitter, do any of the following:
181 make sure that this is safe on your particular system. 181 make sure that this is safe on your particular system.
182 d. It is not possible to entirely get rid of OS jitter 182 d. It is not possible to entirely get rid of OS jitter
183 from vmstat_update() on CONFIG_SMP=y systems, but you 183 from vmstat_update() on CONFIG_SMP=y systems, but you
184 can decrease its frequency by writing a large value to 184 can decrease its frequency by writing a large value
185 /proc/sys/vm/stat_interval. The default value is HZ, 185 to /proc/sys/vm/stat_interval. The default value is
186 for an interval of one second. Of course, larger values 186 HZ, for an interval of one second. Of course, larger
187 will make your virtual-memory statistics update more 187 values will make your virtual-memory statistics update
188 slowly. Of course, you can also run your workload at 188 more slowly. Of course, you can also run your workload
189 a real-time priority, thus preempting vmstat_update(). 189 at a real-time priority, thus preempting vmstat_update(),
190 but if your workload is CPU-bound, this is a bad idea.
191 However, there is an RFC patch from Christoph Lameter
192 (based on an earlier one from Gilad Ben-Yossef) that
193 reduces or even eliminates vmstat overhead for some
194 workloads at https://lkml.org/lkml/2013/9/4/379.
190 e. If running on high-end powerpc servers, build with 195 e. If running on high-end powerpc servers, build with
191 CONFIG_PPC_RTAS_DAEMON=n. This prevents the RTAS 196 CONFIG_PPC_RTAS_DAEMON=n. This prevents the RTAS
192 daemon from running on each CPU every second or so. 197 daemon from running on each CPU every second or so.