• P
    nohz_full: Add full-system-idle state machine · 0edd1b17
    Paul E. McKenney 提交于
    This commit adds the state machine that takes the per-CPU idle data
    as input and produces a full-system-idle indication as output.  This
    state machine is driven out of RCU's quiescent-state-forcing
    mechanism, which invokes rcu_sysidle_check_cpu() to collect per-CPU
    idle state and then rcu_sysidle_report() to drive the state machine.
    
    The full-system-idle state is sampled using rcu_sys_is_idle(), which
    also drives the state machine if RCU is idle (and does so by forcing
    RCU to become non-idle).  This function returns true if all but the
    timekeeping CPU (tick_do_timer_cpu) are idle and have been idle long
    enough to avoid memory contention on the full_sysidle_state state
    variable.  The rcu_sysidle_force_exit() may be called externally
    to reset the state machine back into non-idle state.
    
    For large systems the state machine is driven out of RCU's
    force-quiescent-state logic, which provides good scalability at the price
    of millisecond-scale latencies on the transition to full-system-idle
    state.  This is not so good for battery-powered systems, which are usually
    small enough that they don't need to care about scalability, but which
    do care deeply about energy efficiency.  Small systems therefore drive
    the state machine directly out of the idle-entry code.  The number of
    CPUs in a "small" system is defined by a new NO_HZ_FULL_SYSIDLE_SMALL
    Kconfig parameter, which defaults to 8.  Note that this is a build-time
    definition.
    Signed-off-by: NPaul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
    [ paulmck: Use true and false for boolean constants per Lai Jiangshan. ]
    Reviewed-by: NJosh Triplett <josh@joshtriplett.org>
    [ paulmck: Simplify logic and provide better comments for memory barriers,
      based on review comments and questions by Lai Jiangshan. ]
    0edd1b17
rcutree_plugin.h 80.3 KB