• T
    sched/fair: Fix O(nr_cgroups) in load balance path · a9e7f654
    Tejun Heo 提交于
    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: NTejun Heo <tj@kernel.org>
    [ Added cfs_rq_is_decayed() ]
    Signed-off-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: NVincent 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: NIngo Molnar <mingo@kernel.org>
    a9e7f654
fair.c 248.2 KB