Messages in this thread Patch in this message | | | Date | Tue, 24 Mar 2015 15:42:42 +0000 | From | Morten Rasmussen <> | Subject | Re: [RFCv3 PATCH 33/48] sched: Energy-aware wake-up task placement |
| |
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?
| |