]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rcu-tasks: Add kernel boot parameters for callback laziness
authorPaul E. McKenney <paulmck@kernel.org>
Wed, 17 May 2023 13:40:23 +0000 (06:40 -0700)
committerPaul E. McKenney <paulmck@kernel.org>
Fri, 14 Jul 2023 22:00:12 +0000 (15:00 -0700)
This commit adds kernel boot parameters for callback laziness, allowing
the RCU Tasks flavors to be individually adjusted.

Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
Documentation/admin-guide/kernel-parameters.txt
kernel/rcu/tasks.h

index a1457995fd41cfb7db6cfa0cbb816fb9bbcd7fc0..a0f427e1a5627d79637a973b0935778fb51ade93 100644 (file)
                        A change in value does not take effect until
                        the beginning of the next grace period.
 
+       rcupdate.rcu_tasks_lazy_ms= [KNL]
+                       Set timeout in milliseconds RCU Tasks asynchronous
+                       callback batching for call_rcu_tasks().
+                       A negative value will take the default.  A value
+                       of zero will disable batching.  Batching is
+                       always disabled for synchronize_rcu_tasks().
+
+       rcupdate.rcu_tasks_rude_lazy_ms= [KNL]
+                       Set timeout in milliseconds RCU Tasks
+                       Rude asynchronous callback batching for
+                       call_rcu_tasks_rude().  A negative value
+                       will take the default.  A value of zero will
+                       disable batching.  Batching is always disabled
+                       for synchronize_rcu_tasks_rude().
+
+       rcupdate.rcu_tasks_trace_lazy_ms= [KNL]
+                       Set timeout in milliseconds RCU Tasks
+                       Trace asynchronous callback batching for
+                       call_rcu_tasks_trace().  A negative value
+                       will take the default.  A value of zero will
+                       disable batching.  Batching is always disabled
+                       for synchronize_rcu_tasks_trace().
+
        rcupdate.rcu_self_test= [KNL]
                        Run the RCU early boot self tests
 
index 7eae67fbe47c13e57b963665f06b4093ef726b98..28e986627e3fa45adf6d30ca7f7a5d9ed0e55837 100644 (file)
@@ -1083,11 +1083,16 @@ void rcu_barrier_tasks(void)
 }
 EXPORT_SYMBOL_GPL(rcu_barrier_tasks);
 
+int rcu_tasks_lazy_ms = -1;
+module_param(rcu_tasks_lazy_ms, int, 0444);
+
 static int __init rcu_spawn_tasks_kthread(void)
 {
        cblist_init_generic(&rcu_tasks);
        rcu_tasks.gp_sleep = HZ / 10;
        rcu_tasks.init_fract = HZ / 10;
+       if (rcu_tasks_lazy_ms >= 0)
+               rcu_tasks.lazy_jiffies = msecs_to_jiffies(rcu_tasks_lazy_ms);
        rcu_tasks.pregp_func = rcu_tasks_pregp_step;
        rcu_tasks.pertask_func = rcu_tasks_pertask;
        rcu_tasks.postscan_func = rcu_tasks_postscan;
@@ -1236,10 +1241,15 @@ void rcu_barrier_tasks_rude(void)
 }
 EXPORT_SYMBOL_GPL(rcu_barrier_tasks_rude);
 
+int rcu_tasks_rude_lazy_ms = -1;
+module_param(rcu_tasks_rude_lazy_ms, int, 0444);
+
 static int __init rcu_spawn_tasks_rude_kthread(void)
 {
        cblist_init_generic(&rcu_tasks_rude);
        rcu_tasks_rude.gp_sleep = HZ / 10;
+       if (rcu_tasks_rude_lazy_ms >= 0)
+               rcu_tasks_rude.lazy_jiffies = msecs_to_jiffies(rcu_tasks_rude_lazy_ms);
        rcu_spawn_tasks_kthread_generic(&rcu_tasks_rude);
        return 0;
 }
@@ -1856,6 +1866,9 @@ void rcu_barrier_tasks_trace(void)
 }
 EXPORT_SYMBOL_GPL(rcu_barrier_tasks_trace);
 
+int rcu_tasks_trace_lazy_ms = -1;
+module_param(rcu_tasks_trace_lazy_ms, int, 0444);
+
 static int __init rcu_spawn_tasks_trace_kthread(void)
 {
        cblist_init_generic(&rcu_tasks_trace);
@@ -1870,6 +1883,8 @@ static int __init rcu_spawn_tasks_trace_kthread(void)
                if (rcu_tasks_trace.init_fract <= 0)
                        rcu_tasks_trace.init_fract = 1;
        }
+       if (rcu_tasks_trace_lazy_ms >= 0)
+               rcu_tasks_trace.lazy_jiffies = msecs_to_jiffies(rcu_tasks_trace_lazy_ms);
        rcu_tasks_trace.pregp_func = rcu_tasks_trace_pregp_step;
        rcu_tasks_trace.postscan_func = rcu_tasks_trace_postscan;
        rcu_tasks_trace.holdouts_func = check_all_holdout_tasks_trace;