mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-28 17:41:50 +00:00
rcu: Bind RCU grace-period kthreads if NO_HZ_FULL
Currently, RCU binds the grace-period kthreads to the timekeeping CPU only if CONFIG_NO_HZ_FULL_SYSIDLE=y. This means that these kthreads must be bound manually when CONFIG_NO_HZ_FULL_SYSIDLE=n and CONFIG_NO_HZ_FULL=y: Otherwise, these kthreads will induce OS jitter on random CPUs. Given that we are trying to reduce the amount of manual tweaking required to make CONFIG_NO_HZ_FULL=y work nicely, this commit makes this binding happen when CONFIG_NO_HZ_FULL=y, even in cases where CONFIG_NO_HZ_FULL_SYSIDLE=n. Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Reviewed-by: Josh Triplett <josh@joshtriplett.org>
This commit is contained in:
parent
71a9b26963
commit
5057f55e54
1 changed files with 16 additions and 18 deletions
|
@ -2595,20 +2595,6 @@ static bool is_sysidle_rcu_state(struct rcu_state *rsp)
|
||||||
return rsp == rcu_sysidle_state;
|
return rsp == rcu_sysidle_state;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Bind the grace-period kthread for the sysidle flavor of RCU to the
|
|
||||||
* timekeeping CPU.
|
|
||||||
*/
|
|
||||||
static void rcu_bind_gp_kthread(void)
|
|
||||||
{
|
|
||||||
int cpu = ACCESS_ONCE(tick_do_timer_cpu);
|
|
||||||
|
|
||||||
if (cpu < 0 || cpu >= nr_cpu_ids)
|
|
||||||
return;
|
|
||||||
if (raw_smp_processor_id() != cpu)
|
|
||||||
set_cpus_allowed_ptr(current, cpumask_of(cpu));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return a delay in jiffies based on the number of CPUs, rcu_node
|
* Return a delay in jiffies based on the number of CPUs, rcu_node
|
||||||
* leaf fanout, and jiffies tick rate. The idea is to allow larger
|
* leaf fanout, and jiffies tick rate. The idea is to allow larger
|
||||||
|
@ -2819,10 +2805,6 @@ static bool is_sysidle_rcu_state(struct rcu_state *rsp)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rcu_bind_gp_kthread(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static void rcu_sysidle_report_gp(struct rcu_state *rsp, int isidle,
|
static void rcu_sysidle_report_gp(struct rcu_state *rsp, int isidle,
|
||||||
unsigned long maxj)
|
unsigned long maxj)
|
||||||
{
|
{
|
||||||
|
@ -2853,3 +2835,19 @@ static bool rcu_nohz_full_cpu(struct rcu_state *rsp)
|
||||||
#endif /* #ifdef CONFIG_NO_HZ_FULL */
|
#endif /* #ifdef CONFIG_NO_HZ_FULL */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Bind the grace-period kthread for the sysidle flavor of RCU to the
|
||||||
|
* timekeeping CPU.
|
||||||
|
*/
|
||||||
|
static void rcu_bind_gp_kthread(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_NO_HZ_FULL
|
||||||
|
int cpu = ACCESS_ONCE(tick_do_timer_cpu);
|
||||||
|
|
||||||
|
if (cpu < 0 || cpu >= nr_cpu_ids)
|
||||||
|
return;
|
||||||
|
if (raw_smp_processor_id() != cpu)
|
||||||
|
set_cpus_allowed_ptr(current, cpumask_of(cpu));
|
||||||
|
#endif /* #ifdef CONFIG_NO_HZ_FULL */
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue