sched/fair: Help out higher capacity CPUs when they are overcommitted
This comprises of two parts: If we have a task to schedule, we currently don't consider CPUs where it will not fit even if they are idle. Instead we choose the previous CPU which is sub-optimal for performance if an idle CPU is present. This change introduces tracking of any idle CPUs irrespective of whether the task fits on them or not. If we don't have a good place to put the task, prefer the lowest power idle CPU. The other part involves the load balancer which was unable to move tasks despite the above mentioned task placement to balance out the load. The reason is that the load balancer checks the big cluster's group capacity and determines that it can take twice the amount of workload as the little cluster. Hence the big cluster does not get marked as busy. While this behavior is intended under heavily loaded systems where we want to push more work towards the higher capacity CPUs, it is sub optimal when we have idle CPUs. Add the ability to differentiate between the two scenarios when marking a group as busy. If load_balance is called from a CPU_NOT_IDLE environment use the the group capacity to determine whether the group is busy or not. For everything else use number of CPUs in the group. Change-Id: I4e8290639ad1602541a44a80ba4b2804068cac0f Signed-off-by:Syed Rameez Mustafa <rameezmustafa@codeaurora.org> Signed-off-by:
Srivatsa Vaddagiri <vatsa@codeaurora.org>
Loading
Please register or sign in to comment