• Rik van Riel's avatar
    sched: Calculate effective load even if local weight is 0 · 9722c2da
    Rik van Riel authored
    Thomas Hellstrom bisected a regression where erratic 3D performance is
    experienced on virtual machines as measured by glxgears. It identified
    commit 58d081b5 ("sched/numa: Avoid overloading CPUs on a preferred NUMA
    node") as the problem which had modified the behaviour of effective_load.
    
    Effective load calculates the difference to the system-wide load if a
    scheduling entity was moved to another CPU. The task group is not heavier
    as a result of the move but overall system load can increase/decrease as a
    result of the change. Commit 58d081b5 ("sched/numa: Avoid overloading CPUs
    on a preferred NUMA node") changed effective_load to make it suitable for
    calculating if a particular NUMA node was compute overloaded. To reduce
    the cost of the function, it assumed that a current sched entity weight
    of 0 was uninteresting but that is not the case.
    
    wake_affine() uses a weight of 0 for sync wakeups on the grounds that it
    is assuming the waking task will sleep and not contribute to load in the
    near future. In this case, we still want to calculate the effective load
    of the sched entity hierarchy. As effective_load is no longer used by
    task_numa_compare since commit fb13c7ee
    
     (sched/numa: Use a system-wide
    search to find swap/migration candidates), this patch simply restores the
    historical behaviour.
    Reported-and-tested-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
    Signed-off-by: default avatarRik van Riel <riel@redhat.com>
    [ Wrote changelog]
    Signed-off-by: default avatarMel Gorman <mgorman@suse.de>
    Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20140106113912.GC6178@suse.de
    
    Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
    9722c2da
fair.c 189 KB