ANDROID: sched: Consider misfit tasks when load-balancing
authorMorten Rasmussen <morten.rasmussen@arm.com>
Tue, 7 Mar 2017 16:40:34 +0000 (16:40 +0000)
committerChris Redpath <chris.redpath@arm.com>
Thu, 14 Dec 2017 21:41:06 +0000 (21:41 +0000)
commit5494e2edf59c2ff74742c224eb05c5df0b3d1fe6
treec394c24c39bf096af6e82cb49a3fdc20c1420092
parenta47662b5d1b8bc45bdbb25e16b003f5613f47cac
ANDROID: sched: Consider misfit tasks when load-balancing

On asymmetric cpu capacity systems and systems with high RT/IRQ load
intensive tasks can end up on cpus that don't suit their compute demand.
In this scenarios 'misfit' tasks should be migrated to cpus with higher
compute capacity to ensure better throughput. group_misfit_task indicates
this scenario, but tweaks to the load-balance code is needed to make the
migrations happen.

Misfit balancing only makes sense between a source group of lower
per-cpu capacity and destination group of higher compute capacity.
Otherwise, misfit balancing is ignored. group_misfit_task has lowest
priority so any imbalance due to overload is dealt with first.

The modifications are:

1. Only pick a group containing misfit tasks as the busiest group if the
   destination group has higher capacity and has spare capacity.
2. When the busiest group is a 'misfit' group, skip the usual average
   load and group capacity checks.
3. Set the imbalance for 'misfit' balancing sufficiently high for a task
   to be pulled ignoring average load.
4. Pick the first cpu with the rq->misfit flag raised as the source cpu.

cc: Ingo Molnar <mingo@redhat.com>
cc: Peter Zijlstra <peterz@infradead.org>

Signed-off-by: Morten Rasmussen <morten.rasmussen@arm.com>
Change-Id: If523e28ca397f67aaddf7dc1ddc1c22488f899d1
Signed-off-by: Chris Redpath <chris.redpath@arm.com>
kernel/sched/fair.c