On 2017/7/17 21:58, Peter Zijlstra wrote: > On Mon, Jul 17, 2017 at 09:24:51PM +0800, Li, Aubrey wrote: >> On 2017/7/14 12:05, Paul E. McKenney wrote: >>> >>> More specifically: rcu_needs_cpu(), rcu_prepare_for_idle(), >>> rcu_cleanup_after_idle(), rcu_eqs_enter(), rcu_eqs_enter_common(), >>> rcu_dynticks_eqs_enter(), do_nocb_deferred_wakeup(), >>> rcu_dynticks_task_enter(), rcu_eqs_exit(), rcu_eqs_exit_common(), >>> rcu_dynticks_task_exit(), rcu_dynticks_eqs_exit(). >>> >>> The first three (rcu_needs_cpu(), rcu_prepare_for_idle(), and >>> rcu_cleanup_after_idle()) should not be significant unless you have >>> CONFIG_RCU_FAST_NO_HZ=y. If you do, it would be interesting to learn >>> how often invoke_rcu_core() is invoked from rcu_prepare_for_idle() >>> and rcu_cleanup_after_idle(), as this can raise softirq. Also >>> rcu_accelerate_cbs() and rcu_try_advance_all_cbs(). >>> >>> Knowing which of these is causing the most trouble might help me >>> reduce the overhead in the current idle path. >> >> I measured two cases, nothing notable found. > > So skipping rcu_idle_{enter,exit}() is not in fact needed at all? >
I think it would make more sense if we still put them under the case where tick is really stopped. Thanks, -Aubrey