• Paul E. McKenney's avatar
    rcu-tasks: Treat only synchronous grace periods urgently · d119357d
    Paul E. McKenney authored
    The performance requirements on RCU Tasks, and in particular on RCU
    Tasks Trace, have evolved over time as the workloads have evolved.
    The current implementation is designed to provide low grace-period
    latencies, and also to accommodate short-duration floods of callbacks.
    
    However, current workloads can also provide a constant background
    callback-queuing rate of a few hundred call_rcu_tasks_trace() invocations
    per second.  This results in continuous back-to-back RCU Tasks Trace
    grace periods, which in turn can consume the better part of 10% of a CPU.
    One could take the attitude that there are several tens of other CPUs on
    the systems running such workloads, but energy efficiency is a thing.
    On these systems, although asynchronous grace-period requests happen
    every few milliseconds, synchronous grace-period requests are quite rare.
    
    This commit therefore arrranges for grace periods to be initiated
    immediately in response to calls to synchronize_rcu_tasks*() and
    also to calls to synchronize_rcu_mult() that are passed one of the
    call_rcu_tasks*() functions.  These are recognized by the tell-tale
    wakeme_after_rcu callback function.
    
    In other cases, callbacks are gathered up for up to about 250 milliseconds
    before a grace period is initiated.  This results in more than an order of
    magnitude reduction in RCU Tasks Trace grace periods, with corresponding
    reduction in consumption of CPU time.
    Reported-by: default avatarAlexei Starovoitov <ast@kernel.org>
    Reported-by: default avatarMartin KaFai Lau <kafai@fb.com>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    d119357d
tasks.h 68.5 KB