• Vincent Guittot's avatar
    sched/fair: Optimize update_blocked_averages() · 31bc6aea
    Vincent Guittot authored
    Removing a cfs_rq from rq->leaf_cfs_rq_list can break the parent/child
    ordering of the list when it will be added back. In order to remove an
    empty and fully decayed cfs_rq, we must remove its children too, so they
    will be added back in the right order next time.
    
    With a normal decay of PELT, a parent will be empty and fully decayed
    if all children are empty and fully decayed too. In such a case, we just
    have to ensure that the whole branch will be added when a new task is
    enqueued. This is default behavior since :
    
      commit f6783319 ("sched/fair: Fix insertion in rq->leaf_cfs_rq_list")
    
    In case of throttling, the PELT of throttled cfs_rq will not be updated
    whereas the parent will. This breaks the assumption made above unless we
    remove the children of a cfs_rq that is throttled. Then, they will be
    added back when unthrottled and a sched_entity will be enqueued.
    
    As throttled cfs_rq are now removed from the list, we can remove the
    associated test in update_blocked_averages().
    Signed-off-by: default avatarVincent Guittot <vincent.guittot@linaro.org>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: sargun@sargun.me
    Cc: tj@kernel.org
    Cc: xiexiuqi@huawei.com
    Cc: xiezhipeng1@huawei.com
    Link: https://lkml.kernel.org/r/1549469662-13614-2-git-send-email-vincent.guittot@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    31bc6aea
fair.c 282 KB