• P
    rcu: Permit dyntick-idle with callbacks pending · 7cb92499
    Paul E. McKenney 提交于
    The current implementation of RCU_FAST_NO_HZ prevents CPUs from entering
    dyntick-idle state if they have RCU callbacks pending.  Unfortunately,
    this has the side-effect of often preventing them from entering this
    state, especially if at least one other CPU is not in dyntick-idle state.
    However, the resulting per-tick wakeup is wasteful in many cases: if the
    CPU has already fully responded to the current RCU grace period, there
    will be nothing for it to do until this grace period ends, which will
    frequently take several jiffies.
    
    This commit therefore permits a CPU that has done everything that the
    current grace period has asked of it (rcu_pending() == 0) even if it
    still as RCU callbacks pending.  However, such a CPU posts a timer to
    wake it up several jiffies later (6 jiffies, based on experience with
    grace-period lengths).  This wakeup is required to handle situations
    that can result in all CPUs being in dyntick-idle mode, thus failing
    to ever complete the current grace period.  If a CPU wakes up before
    the timer goes off, then it cancels that timer, thus avoiding spurious
    wakeups.
    Signed-off-by: NPaul E. McKenney <paul.mckenney@linaro.org>
    Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    7cb92499
rcutree.h 18.7 KB