• Nikhil Rao's avatar
    sched: Force balancing on newidle balance if local group has capacity · fab47622
    Nikhil Rao authored
    This patch forces a load balance on a newly idle cpu when the local group has
    extra capacity and the busiest group does not have any. It improves system
    utilization when balancing tasks with a large weight differential.
    
    Under certain situations, such as a niced down task (i.e. nice = -15) in the
    presence of nr_cpus NICE0 tasks, the niced task lands on a sched group and
    kicks away other tasks because of its large weight. This leads to sub-optimal
    utilization of the machine. Even though the sched group has capacity, it does
    not pull tasks because sds.this_load >> sds.max_load, and f_b_g() returns NULL.
    
    With this patch, if the local group has extra capacity, we shortcut the checks
    in f_b_g() and try to pull a task over. A sched group has extra capacity if the
    group capacity is greater than the number of running tasks in that group.
    
    Thanks to Mike Galbraith for discussions leading to this patch and for the
    insight to reuse SD_NEWIDLE_BALANCE.
    Signed-off-by: default avatarNikhil Rao <ncrao@google.com>
    Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
    LKML-Reference: <1287173550-30365-4-git-send-email-ncrao@google.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    fab47622
sched_fair.c 101 KB