On 30/04/15 08:12, pang.xun...@zte.com.cn wrote: > linux-kernel-ow...@vger.kernel.org wrote 2015-03-27 PM 11:03:24: >> Re: [RFCv3 PATCH 43/48] sched: Introduce energy awareness into > detach_tasks
[...] >> > Hi Morten, Dietmar, >> > >> > Wouldn't the above energy_diff() use the 'old' value of dst_cpu's util? >> > Tasks are detached/dequeued in this loop so they have their util >> > contrib. removed from src_cpu but their contrib. hasn't been added to >> > dst_cpu yet (happens in attach_tasks). >> >> You're absolutely right Sai. Thanks for pointing this out! I guess I > rather >> have to accumulate the usage of tasks I've detached and add this to the >> eenv::usage_delta of the energy_diff() call for the next task. >> >> Something like this (only slightly tested): >> >> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c >> index 8d4cc72f4778..d0d0e965fd0c 100644 >> --- a/kernel/sched/fair.c >> +++ b/kernel/sched/fair.c >> @@ -6097,6 +6097,7 @@ static int detach_tasks(struct lb_env *env) >> struct task_struct *p; >> unsigned long load = 0; >> int detached = 0; >> + int usage_delta = 0; >> >> lockdep_assert_held(&env->src_rq->lock); >> >> @@ -6122,16 +6123,19 @@ static int detach_tasks(struct lb_env *env) >> goto next; >> >> if (env->use_ea) { >> + int util = task_utilization(p); >> struct energy_env eenv = { >> .src_cpu = env->src_cpu, >> .dst_cpu = env->dst_cpu, >> - .usage_delta = task_utilization(p), >> + .usage_delta = usage_delta + util, >> }; >> int e_diff = energy_diff(&eenv); > > If any or total utilization of tasks detached exceeds the orig capacity, > of src_cpu, should we bail out in case of performance plus avoiding > reaching the tipping point easily(because in such cases, src_cpu tends > to be ended up overutilized)? Yes, correct. We have to limit the dst cpu from pulling more than its remaining capacity worth of usage. I already integrated a check that the dst cpu is not over-utilized by taking the usage_delta. > Also like what I just replied to "[RFCv4 PATCH 31/48]", when doing > energy_diff() it should be allowed to exceed cur capacity if not > reaching its original capacity(is capacity_of(cpu) better?). True. [...] -- 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/