Re: [RFCv3 PATCH 33/48] sched: Energy-aware wake-up task placement

From: Morten Rasmussen
Date: Tue Mar 24 2015 - 11:42:18 EST


On Tue, Mar 24, 2015 at 01:00:58PM +0000, Peter Zijlstra wrote:
> On Wed, Feb 04, 2015 at 06:31:10PM +0000, Morten Rasmussen wrote:
> > @@ -5138,6 +5224,10 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int sd_flag, int wake_f
> > prev_cpu = cpu;
> >
> > if (sd_flag & SD_BALANCE_WAKE) {
> > + if (energy_aware()) {
> > + new_cpu = energy_aware_wake_cpu(p);
> > + goto unlock;
> > + }
> > new_cpu = select_idle_sibling(p, prev_cpu);
> > goto unlock;
> > }
>
> So that is fundamentally wrong I think. We only care about power aware
> scheduling when U < 1, after that we should do the normal thing. This
> setup does not allow for that.

Right, I agree that we should preferably do the normal thing for U ~= 1.
We can restructure the wake-up path to follow that pattern, but we need
to know U beforehand to choose the right path. U isn't just
get_cpu_usage(prev_cpu) but some broader view of the of the cpu
utilizations. For example, prev_cpu might be full, but everyone else is
idle so we still want to try to do an energy aware wake-up on some other
cpu. U could be the minium utilization of all cpus in prev_cpu's
sd_llc, which is somewhat similar to what energy_aware_wake_cpu() does.

I guess energy_aware_wake_cpu() could be refactored to call
select_idle_sibling() if it find U ~= 1?
--
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/