• Vincent Guittot's avatar
    sched/util_est: Fix util_est_dequeue() for throttled cfs_rq · 3482d98b
    Vincent Guittot authored
    When a cfs_rq is throttled, parent cfs_rq->nr_running is decreased and
    everything happens at cfs_rq level. Currently util_est stays unchanged
    in such case and it keeps accounting the utilization of throttled tasks.
    This can somewhat make sense as we don't dequeue tasks but only throttled
    cfs_rq.
    
    If a task of another group is enqueued/dequeued and root cfs_rq becomes
    idle during the dequeue, util_est will be cleared whereas it was
    accounting util_est of throttled tasks before. So the behavior of util_est
    is not always the same regarding throttled tasks and depends of side
    activity. Furthermore, util_est will not be updated when the cfs_rq is
    unthrottled as everything happens at cfs_rq level. Main results is that
    util_est will stay null whereas we now have running tasks. We have to wait
    for the next dequeue/enqueue of the previously throttled tasks to get an
    up to date util_est.
    
    Remove the assumption that cfs_rq's estimated utilization of a CPU is 0
    if there is no running task so the util_est of a task remains until the
    latter is dequeued even if its cfs_rq has been throttled.
    Signed-off-by: default avatarVincent Guittot <vincent.guittot@linaro.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: default avatarPatrick Bellasi <patrick.bellasi@arm.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Fixes: 7f65ea42 ("sched/fair: Add util_est on top of PELT")
    Link: http://lkml.kernel.org/r/1528972380-16268-1-git-send-email-vincent.guittot@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    3482d98b
fair.c 275 KB