• Srikar Dronamraju's avatar
    sched/fair: Prefer sibiling only if local group is under-utilized · 05b40e05
    Srikar Dronamraju authored
    If the child domain prefers tasks to go siblings, the local group could
    end up pulling tasks to itself even if the local group is almost equally
    loaded as the source group.
    
    Lets assume a 4 core,smt==2 machine running 5 thread ebizzy workload.
    Everytime, local group has capacity and source group has atleast 2 threads,
    local group tries to pull the task. This causes the threads to constantly
    move between different cores. This is even more profound if the cores have
    more threads, like in Power 8, smt 8 mode.
    
    Fix this by only allowing local group to pull a task, if the source group
    has more number of tasks than the local group.
    
    Here are the relevant perf stat numbers of a 22 core,smt 8 Power 8 machine.
    
    Without patch:
     Performance counter stats for 'ebizzy -t 22 -S 100' (5 runs):
    
                 1,440      context-switches          #    0.001 K/sec                    ( +-  1.26% )
                   366      cpu-migrations            #    0.000 K/sec                    ( +-  5.58% )
                 3,933      page-faults               #    0.002 K/sec                    ( +- 11.08% )
    
     Performance counter stats for 'ebizzy -t 48 -S 100' (5 runs):
    
                 6,287      context-switches          #    0.001 K/sec                    ( +-  3.65% )
                 3,776      cpu-migrations            #    0.001 K/sec                    ( +-  4.84% )
                 5,702      page-faults               #    0.001 K/sec                    ( +-  9.36% )
    
     Performance counter stats for 'ebizzy -t 96 -S 100' (5 runs):
    
                 8,776      context-switches          #    0.001 K/sec                    ( +-  0.73% )
                 2,790      cpu-migrations            #    0.000 K/sec                    ( +-  0.98% )
                10,540      page-faults               #    0.001 K/sec                    ( +-  3.12% )
    
    With patch:
    
     Performance counter stats for 'ebizzy -t 22 -S 100' (5 runs):
    
                 1,133      context-switches          #    0.001 K/sec                    ( +-  4.72% )
                   123      cpu-migrations            #    0.000 K/sec                    ( +-  3.42% )
                 3,858      page-faults               #    0.002 K/sec                    ( +-  8.52% )
    
     Performance counter stats for 'ebizzy -t 48 -S 100' (5 runs):
    
                 2,169      context-switches          #    0.000 K/sec                    ( +-  6.19% )
                   189      cpu-migrations            #    0.000 K/sec                    ( +- 12.75% )
                 5,917      page-faults               #    0.001 K/sec                    ( +-  8.09% )
    
     Performance counter stats for 'ebizzy -t 96 -S 100' (5 runs):
    
                 5,333      context-switches          #    0.001 K/sec                    ( +-  5.91% )
                   506      cpu-migrations            #    0.000 K/sec                    ( +-  3.35% )
                10,792      page-faults               #    0.001 K/sec                    ( +-  7.75% )
    
    Which show that in these workloads CPU migrations get reduced significantly.
    Signed-off-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    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: Vincent Guittot <vincent.guittot@linaro.org>
    Link: http://lkml.kernel.org/r/1490205470-10249-1-git-send-email-srikar@linux.vnet.ibm.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    05b40e05
fair.c 249 KB