• Paul E. McKenney's avatar
    rcu-tasks: Use more callback queues if contention encountered · ab97152f
    Paul E. McKenney authored
    The rcupdate.rcu_task_enqueue_lim module parameter allows system
    administrators to tune the number of callback queues used by the RCU
    Tasks flavors.  However if callback storms are infrequent, it would
    be better to operate with a single queue on a given system unless and
    until that system actually needed more queues.  Systems not needing
    more queues can then avoid the overhead of checking the extra queues
    and especially avoid the overhead of fanning workqueue handlers out to
    all CPUs to invoke callbacks.
    
    This commit therefore switches to using all the CPUs' callback queues if
    call_rcu_tasks_generic() encounters too much lock contention.  The amount
    of lock contention to tolerate defaults to 100 contended lock acquisitions
    per jiffy, and can be adjusted using the new rcupdate.rcu_task_contend_lim
    module parameter.
    
    Such switching is undertaken only if the rcupdate.rcu_task_enqueue_lim
    module parameter is negative, which is its default value (-1).
    This allows savvy systems administrators to set the number of queues
    to some known good value and to not have to worry about the kernel doing
    any second guessing.
    
    [ paulmck: Apply feedback from Guillaume Tucker and kernelci. ]
    Reported-by: default avatarMartin Lau <kafai@fb.com>
    Cc: Neeraj Upadhyay <neeraj.iitr10@gmail.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    ab97152f
tasks.h 56.5 KB