Commit b58cc46c5f6b57f1c814e374dbc47176e6b4938e

Authored by Paul E. McKenney
1 parent fbce7497ee

rcu: Don't offload callbacks unless specifically requested

Enabling NO_HZ_FULL currently has the side effect of enabling callback
offloading on all CPUs.  This results in lots of additional rcuo kthreads,
and can also increase context switching and wakeups, even in cases where
callback offloading is neither needed nor particularly desirable.  This
commit therefore enables callback offloading on a given CPU only if
specifically requested at build time or boot time, or if that CPU has
been specifically designated (again, either at build time or boot time)
as a nohz_full CPU.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>

Showing 2 changed files with 5 additions and 2 deletions Side-by-side Diff

... ... @@ -737,7 +737,7 @@
737 737  
738 738 config RCU_NOCB_CPU_NONE
739 739 bool "No build_forced no-CBs CPUs"
740   - depends on RCU_NOCB_CPU && !NO_HZ_FULL
  740 + depends on RCU_NOCB_CPU && !NO_HZ_FULL_ALL
741 741 help
742 742 This option does not force any of the CPUs to be no-CBs CPUs.
743 743 Only CPUs designated by the rcu_nocbs= boot parameter will be
... ... @@ -751,7 +751,7 @@
751 751  
752 752 config RCU_NOCB_CPU_ZERO
753 753 bool "CPU 0 is a build_forced no-CBs CPU"
754   - depends on RCU_NOCB_CPU && !NO_HZ_FULL
  754 + depends on RCU_NOCB_CPU && !NO_HZ_FULL_ALL
755 755 help
756 756 This option forces CPU 0 to be a no-CBs CPU, so that its RCU
757 757 callbacks are invoked by a per-CPU kthread whose name begins
kernel/rcu/tree_plugin.h
... ... @@ -2473,6 +2473,9 @@
2473 2473  
2474 2474 if (rcu_nocb_mask == NULL)
2475 2475 return;
  2476 +#ifdef CONFIG_NO_HZ_FULL
  2477 + cpumask_or(rcu_nocb_mask, rcu_nocb_mask, tick_nohz_full_mask);
  2478 +#endif /* #ifdef CONFIG_NO_HZ_FULL */
2476 2479 if (ls == -1) {
2477 2480 ls = int_sqrt(nr_cpu_ids);
2478 2481 rcu_nocb_leader_stride = ls;