• Tejun Heo's avatar
    sched/fair: Fix O(nr_cgroups) in load balance path · a9e7f654
    Tejun Heo authored
    Currently, rq->leaf_cfs_rq_list is a traversal ordered list of all
    live cfs_rqs which have ever been active on the CPU; unfortunately,
    this makes update_blocked_averages() O(# total cgroups) which isn't
    scalable at all.
    
    This shows up as a small CPU consumption and scheduling latency
    increase in the load balancing path in systems with CPU controller
    enabled across most cgroups.  In an edge case where temporary cgroups
    were leaking, this caused the kernel to consume good several tens of
    percents of CPU cycles running update_blocked_averages(), each run
    taking multiple millisecs.
    
    This patch fixes the issue by taking empty and fully decayed cfs_rqs
    off the rq->leaf_cfs_rq_list.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    [ Added cfs_rq_is_decayed() ]
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: default avatarVincent Guittot <vincent.guittot@linaro.org>
    Cc: Chris Mason <clm@fb.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Paul Turner <pjt@google.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/20170426004350.GB3222@wtj.duckdns.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    a9e7f654
fair.c 248 KB