lkml.org 
[lkml]   [2014]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 15/19] rcu: Bind RCU grace-period kthreads if NO_HZ_FULL
    Date
    From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

    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>
    ---
    kernel/rcu/tree_plugin.h | 34 ++++++++++++++++------------------
    1 file changed, 16 insertions(+), 18 deletions(-)

    diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
    index 1af19e006899..045c6d04ed3f 100644
    --- a/kernel/rcu/tree_plugin.h
    +++ b/kernel/rcu/tree_plugin.h
    @@ -2596,20 +2596,6 @@ static bool is_sysidle_rcu_state(struct rcu_state *rsp)
    }

    /*
    - * 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
    * leaf fanout, and jiffies tick rate. The idea is to allow larger
    * systems more time to transition to full-idle state in order to
    @@ -2819,10 +2805,6 @@ static bool is_sysidle_rcu_state(struct rcu_state *rsp)
    return false;
    }

    -static void rcu_bind_gp_kthread(void)
    -{
    -}
    -
    static void rcu_sysidle_report_gp(struct rcu_state *rsp, int isidle,
    unsigned long maxj)
    {
    @@ -2853,3 +2835,19 @@ static bool rcu_nohz_full_cpu(struct rcu_state *rsp)
    #endif /* #ifdef CONFIG_NO_HZ_FULL */
    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 */
    +}
    --
    1.8.1.5


    \
     
     \ /
      Last update: 2014-04-29 02:41    [W:4.297 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site