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 majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/