Messages in this thread | | | Date | Mon, 12 Aug 2013 16:30:45 +0530 | From | Srikar Dronamraju <> | Subject | Re: [PATCH] sched: Give idle_balance() a break when it does not move tasks. |
| |
> /* > @@ -5298,6 +5300,8 @@ void idle_balance(int this_cpu, struct rq *this_rq) > continue; > > if (sd->flags & SD_BALANCE_NEWIDLE) { > + load_balance_attempted = true; > + > /* If we've pulled tasks over stop searching: */ > pulled_task = load_balance(this_cpu, this_rq, > sd, CPU_NEWLY_IDLE, &balance); > @@ -5322,6 +5326,10 @@ void idle_balance(int this_cpu, struct rq *this_rq) > */ > this_rq->next_balance = next_balance; > } > + > + /* Give idle balance on this CPU a break when it isn't moving tasks */ > + if (load_balance_attempted && !pulled_task) > + this_rq->next_newidle_balance = jiffies + (HZ / 100); > }
Looks reasonable. However should we do this per sd and not per rq. i.e move the next_newidle_balance to sched_domain. So if we find a load_balance in newly_idle context that wasn't successful, we skip load_balance for that sd in the next newly idle balance.
-- Thanks and Regards Srikar Dronamraju
| |