Messages in this thread | | | From | Yun Levi <> | Date | Wed, 15 May 2024 17:41:33 +0100 | Subject | Re: [PATCH v4] time/tick-sched: idle load balancing when nohz_full cpu becomes idle. |
| |
Gentle ping..?
Am I missing something?
Thanks.
On Thu, May 9, 2024 at 10:29 AM Levi Yun <ppbuk5246@gmail.com> wrote: > > When nohz_full CPU stops tick in tick_nohz_irq_exit(), > It wouldn't be chosen to perform idle load balancing because it doesn't > call nohz_balance_enter_idle() in tick_nohz_idle_stop_tick() when it > becomes idle. > > Formerly, __tick_nohz_idle_enter() is called in both > tick_nohz_irq_exit() and in do_idle(). > That's why commit a0db971e4eb6 ("nohz: Move idle balancer registration > to the idle path") prevents nohz_full cpu which isn't yet > idle state but tick is stopped from entering idle balance. > > However, this prevents nohz_full cpu which already stops tick from > entering idle balacne when this cpu really becomes idle state. > > Currently, tick_nohz_idle_stop_tick() is only called in idle state and > it calls nohz_balance_enter_idle(). this function tracks the CPU > which is part of nohz.idle_cpus_mask with rq->nohz_tick_stopped properly. > > Therefore, Change tick_nohz_idle_stop_tick() to call nohz_balance_enter_idle() > without checking !was_stopped so that nohz_full cpu can be chosen to > perform idle load balancing when it enters idle state. > > Fixes: a0db971e4eb6 ("nohz: Move idle balancer registration to the idle path") > Signed-off-by: Levi Yun <ppbuk5246@gmail.com> > --- > v4: > - Add fixes tags. > > v3: > - Rewording commit message. > > v2: > - Fix typos in commit message. > > kernel/time/tick-sched.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c > index 71a792cd8936..31a4cd89782f 100644 > --- a/kernel/time/tick-sched.c > +++ b/kernel/time/tick-sched.c > @@ -1228,8 +1228,10 @@ void tick_nohz_idle_stop_tick(void) > ts->idle_sleeps++; > ts->idle_expires = expires; > > - if (!was_stopped && tick_sched_flag_test(ts, TS_FLAG_STOPPED)) { > - ts->idle_jiffies = ts->last_jiffies; > + if (tick_sched_flag_test(ts, TS_FLAG_STOPPED)) { > + if (!was_stopped) > + ts->idle_jiffies = ts->last_jiffies; > + > nohz_balance_enter_idle(cpu); > } > } else { > -- > 2.41.0
| |