• Peter Zijlstra's avatar
    sched/core: Implement new approach to scale select_idle_cpu() · 1ad3aaf3
    Peter Zijlstra authored
    Hackbench recently suffered a bunch of pain, first by commit:
    
      4c77b18c ("sched/fair: Make select_idle_cpu() more aggressive")
    
    and then by commit:
    
      c743f0a5 ("sched/fair, cpumask: Export for_each_cpu_wrap()")
    
    which fixed a bug in the initial for_each_cpu_wrap() implementation
    that made select_idle_cpu() even more expensive. The bug was that it
    would skip over CPUs when bits were consequtive in the bitmask.
    
    This however gave me an idea to fix select_idle_cpu(); where the old
    scheme was a cliff-edge throttle on idle scanning, this introduces a
    more gradual approach. Instead of stopping to scan entirely, we limit
    how many CPUs we scan.
    
    Initial benchmarks show that it mostly recovers hackbench while not
    hurting anything else, except Mason's schbench, but not as bad as the
    old thing.
    
    It also appears to recover the tbench high-end, which also suffered like
    hackbench.
    Tested-by: default avatarMatt Fleming <matt@codeblueprint.co.uk>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Chris Mason <clm@fb.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: hpa@zytor.com
    Cc: kitsunyan <kitsunyan@inbox.ru>
    Cc: linux-kernel@vger.kernel.org
    Cc: lvenanci@redhat.com
    Cc: riel@redhat.com
    Cc: xiaolong.ye@intel.com
    Link: http://lkml.kernel.org/r/20170517105350.hk5m4h4jb6dfr65a@hirez.programming.kicks-ass.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    1ad3aaf3
fair.c 248 KB