• Paul E. McKenney's avatar
    rcu: Provide OOM handler to motivate lazy RCU callbacks · b626c1b6
    Paul E. McKenney authored
    In kernels built with CONFIG_RCU_FAST_NO_HZ=y, CPUs can accumulate a
    large number of lazy callbacks, which as the name implies will be slow
    to be invoked.  This can be a problem on small-memory systems, where the
    default 6-second sleep for CPUs having only lazy RCU callbacks could well
    be fatal.  This commit therefore installs an OOM hander that ensures that
    every CPU with lazy callbacks has at least one non-lazy callback, in turn
    ensuring timely advancement for these callbacks.
    
    Updated to fix bug that disabled OOM killing, noted by Lai Jiangshan.
    
    Updated to push the for_each_rcu_flavor() loop into rcu_oom_notify_cpu(),
    thus reducing the number of IPIs, as suggested by Steven Rostedt.  Also
    to make the for_each_online_cpu() loop be preemptible.  (Later, it might
    be good to use smp_call_function(), as suggested by Peter Zijlstra.)
    Signed-off-by: default avatarPaul E. McKenney <paul.mckenney@linaro.org>
    Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Tested-by: default avatarSasha Levin <levinsasha928@gmail.com>
    Reviewed-by: default avatarJosh Triplett <josh@joshtriplett.org>
    b626c1b6
rcutree_plugin.h 68.4 KB