• Paul E. McKenney's avatar
    rcu: React to callback overload by aggressively seeking quiescent states · b2b00ddf
    Paul E. McKenney authored
    In default configutions, RCU currently waits at least 100 milliseconds
    before asking cond_resched() and/or resched_rcu() for help seeking
    quiescent states to end a grace period.  But 100 milliseconds can be
    one good long time during an RCU callback flood, for example, as can
    happen when user processes repeatedly open and close files in a tight
    loop.  These 100-millisecond gaps in successive grace periods during a
    callback flood can result in excessive numbers of callbacks piling up,
    unnecessarily increasing memory footprint.
    
    This commit therefore asks cond_resched() and/or resched_rcu() for help
    as early as the first FQS scan when at least one of the CPUs has more
    than 20,000 callbacks queued, a number that can be changed using the new
    rcutree.qovld kernel boot parameter.  An auxiliary qovld_calc variable
    is used to avoid acquisition of locks that have not yet been initialized.
    Early tests indicate that this reduces the RCU-callback memory footprint
    during rcutorture floods by from 50% to 4x, depending on configuration.
    Reported-by: default avatarJoel Fernandes (Google) <joel@joelfernandes.org>
    Reported-by: default avatarTejun Heo <tj@kernel.org>
    [ paulmck: Fix bug located by Qian Cai. ]
    Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
    Tested-by: default avatarDexuan Cui <decui@microsoft.com>
    Tested-by: default avatarQian Cai <cai@lca.pw>
    b2b00ddf
tree.h 19.1 KB