Re: [PATCH RESEND v9 00/10] sched: consolidation of CPU capacity and usage

Vincent Guittot
2015-02-20T14:54:31Z

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;