lkml.org 
[lkml]   [2015]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH tip/core/rcu 16/24] rcu: Convert CONFIG_RCU_FANOUT_EXACT to boot parameter
    Date
    From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>

    The CONFIG_RCU_FANOUT_EXACT Kconfig parameter is used primarily (and
    perhaps only) by rcutorture to verify that RCU works correctly in specific
    rcu_node combining-tree configurations. It therefore does not make
    much sense have this as a question to people attempting to configure
    their kernels. So this commit creates an rcutree.rcu_fanout_exact=
    boot parameter that rcutorture can use, and eliminates the original
    CONFIG_RCU_FANOUT_EXACT Kconfig parameter.

    Reported-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Reviewed-by: Pranith Kumar <bobby.prani@gmail.com>
    ---
    Documentation/kernel-parameters.txt | 6 ++++++
    init/Kconfig | 14 --------------
    kernel/rcu/tree.c | 7 +++++--
    kernel/rcu/tree_plugin.h | 2 +-
    4 files changed, 12 insertions(+), 17 deletions(-)

    diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
    index d4afdbfbc5da..73ac8aa84608 100644
    --- a/Documentation/kernel-parameters.txt
    +++ b/Documentation/kernel-parameters.txt
    @@ -3010,6 +3010,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
    the rcu_node combining tree. This only has effect
    when CONFIG_RCU_TORTURE_TEST_SLOW_PREINIT is set.

    + rcutree.rcu_fanout_exact= [KNL]
    + Disable autobalancing of the rcu_node combining
    + tree. This is used by rcutorture, and might
    + possibly be useful for architectures having high
    + cache-to-cache transfer latencies.
    +
    rcutree.rcu_fanout_leaf= [KNL]
    Increase the number of CPUs assigned to each
    leaf rcu_node structure. Useful for very large
    diff --git a/init/Kconfig b/init/Kconfig
    index 927210810189..0ec82362cfc0 100644
    --- a/init/Kconfig
    +++ b/init/Kconfig
    @@ -611,20 +611,6 @@ config RCU_FANOUT_LEAF

    Take the default if unsure.

    -config RCU_FANOUT_EXACT
    - bool "Disable tree-based hierarchical RCU auto-balancing"
    - depends on TREE_RCU || PREEMPT_RCU
    - default n
    - help
    - This option forces use of the exact RCU_FANOUT value specified,
    - regardless of imbalances in the hierarchy. This is useful for
    - testing RCU itself, and might one day be useful on systems with
    - strong NUMA behavior.
    -
    - Without RCU_FANOUT_EXACT, the code will balance the hierarchy.
    -
    - Say N if unsure.
    -
    config RCU_FAST_NO_HZ
    bool "Accelerate last non-dyntick-idle CPU's grace periods"
    depends on NO_HZ_COMMON && SMP
    diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
    index 69dd18af71da..227b4f2cfb1e 100644
    --- a/kernel/rcu/tree.c
    +++ b/kernel/rcu/tree.c
    @@ -113,6 +113,9 @@ RCU_STATE_INITIALIZER(rcu_bh, 'b', call_rcu_bh);
    static struct rcu_state *rcu_state_p;
    LIST_HEAD(rcu_struct_flavors);

    +/* Control rcu_node-tree auto-balancing at boot time. */
    +static bool rcu_fanout_exact;
    +module_param(rcu_fanout_exact, bool, 0444);
    /* Increase (but not decrease) the CONFIG_RCU_FANOUT_LEAF at boot time. */
    static int rcu_fanout_leaf = CONFIG_RCU_FANOUT_LEAF;
    module_param(rcu_fanout_leaf, int, 0444);
    @@ -3951,13 +3954,13 @@ void rcu_scheduler_starting(void)

    /*
    * Compute the per-level fanout, either using the exact fanout specified
    - * or balancing the tree, depending on CONFIG_RCU_FANOUT_EXACT.
    + * or balancing the tree, depending on the rcu_fanout_exact boot parameter.
    */
    static void __init rcu_init_levelspread(int *levelspread, const int *levelcnt)
    {
    int i;

    - if (IS_ENABLED(CONFIG_RCU_FANOUT_EXACT)) {
    + if (rcu_fanout_exact) {
    levelspread[rcu_num_lvls - 1] = rcu_fanout_leaf;
    for (i = rcu_num_lvls - 2; i >= 0; i--)
    levelspread[i] = CONFIG_RCU_FANOUT;
    diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
    index 9562dd76542e..3eb1cda880c8 100644
    --- a/kernel/rcu/tree_plugin.h
    +++ b/kernel/rcu/tree_plugin.h
    @@ -64,7 +64,7 @@ static void __init rcu_bootup_announce_oddness(void)
    (!IS_ENABLED(CONFIG_64BIT) && CONFIG_RCU_FANOUT != 32))
    pr_info("\tCONFIG_RCU_FANOUT set to non-default value of %d\n",
    CONFIG_RCU_FANOUT);
    - if (IS_ENABLED(CONFIG_RCU_FANOUT_EXACT))
    + if (rcu_fanout_exact)
    pr_info("\tHierarchical RCU autobalancing is disabled.\n");
    if (IS_ENABLED(CONFIG_RCU_FAST_NO_HZ))
    pr_info("\tRCU dyntick-idle grace-period acceleration is enabled.\n");
    --
    1.8.1.5


    \
     
     \ /
      Last update: 2015-05-13 00:41    [W:3.342 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site