Re: [PATCH] sched: Give idle_balance() a break when it does not movetasks.

From: Srikar Dronamraju
Date: Mon Aug 12 2013 - 07:01:30 EST


> /*
> @@ -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

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/