Messages in this thread | | | From | Vincent Guittot <> | Date | Fri, 20 Feb 2015 15:54:09 +0100 | Subject | Re: [PATCH RESEND v9 00/10] sched: consolidation of CPU capacity and usage |
| |
On 20 February 2015 at 15:35, Morten Rasmussen <morten.rasmussen@arm.com> wrote: > On Fri, Feb 20, 2015 at 02:13:21PM +0000, Vincent Guittot wrote: >> On 20 February 2015 at 12:52, Morten Rasmussen <morten.rasmussen@arm.com> wrote: >> > On Fri, Feb 20, 2015 at 11:34:47AM +0000, Peter Zijlstra wrote: >> >> On Thu, Feb 19, 2015 at 12:49:40PM +0000, Morten Rasmussen wrote: >> >> >> >> > Also, it still not clear why patch 10 uses relative capacity reduction >> >> > instead of absolute capacity available to CFS tasks. >> >> >> >> As present in your asymmetric big and small systems? Yes it would be >> >> unfortunate to migrate a task to an idle small core when the big core is >> >> still faster, even if reduced by rt/irq work. >> > >> > Yes, exactly. I don't think it would cause any harm for symmetric cases >> > to use absolute capacity instead. Am I missing something? >> >> If absolute capacity is used, we will trig an active load balance from >> little to big core each time a little has got 1 task and a big core is >> idle whereas we only want to trig an active migration is the src_cpu's >> capacity that is available for the cfs task is significantly reduced >> by rt tasks. >> >> I can mix absolute and relative tests by 1st testing that the capacity >> of the src is reduced and then ensure that the dst_cpu has more >> absolute capacity than src_cpu > > If we use absolute capacity and check if the source cpu is fully > utilized, wouldn't that work? We want to migrate the task if it is
we want to trig the migration before the cpu is fully utilized by rt/irq (which almost never occurs)
> currently being restricted by the available capacity (due to rt/irq > work, being a little cpu, or both) and if there is a destination cpu > with more absolute capacity available. No?
yes, so the relative capacity (cpu_capacity vs cpu_capacity_orig) enables us to know if the cpu is significantly used by irq/rt so it's worth to do an active load balance of the task. Then the absolute comparison of cpu_capacity of src_cpu vs cpu_capacity of dst_cpu checks that the dst_cpu is a better choice
something like : if ((check_cpu_capacity(src_rq, sd)) && (capacity_of(src_cpu)*sd->imbalce_pct < capacity_of(dst_cpu)*100)) return 1;
| |