• Tim C Chen's avatar
    sched/fair: Determine active load balance for SMT sched groups · fee1759e
    Tim C Chen authored
    On hybrid CPUs with scheduling cluster enabled, we will need to
    consider balancing between SMT CPU cluster, and Atom core cluster.
    
    Below shows such a hybrid x86 CPU with 4 big cores and 8 atom cores.
    Each scheduling cluster span a L2 cache.
    
              --L2-- --L2-- --L2-- --L2-- ----L2---- -----L2------
              [0, 1] [2, 3] [4, 5] [5, 6] [7 8 9 10] [11 12 13 14]
              Big    Big    Big    Big    Atom       Atom
              core   core   core   core   Module     Module
    
    If the busiest group is a big core with both SMT CPUs busy, we should
    active load balance if destination group has idle CPU cores.  Such
    condition is considered by asym_active_balance() in load balancing but not
    considered when looking for busiest group and computing load imbalance.
    Add this consideration in find_busiest_group() and calculate_imbalance().
    
    In addition, update the logic determining the busier group when one group
    is SMT and the other group is non SMT but both groups are partially busy
    with idle CPU. The busier group should be the group with idle cores rather
    than the group with one busy SMT CPU.  We do not want to make the SMT group
    the busiest one to pull the only task off SMT CPU and causing the whole core to
    go empty.
    
    Otherwise suppose in the search for the busiest group, we first encounter
    an SMT group with 1 task and set it as the busiest.  The destination
    group is an atom cluster with 1 task and we next encounter an atom
    cluster group with 3 tasks, we will not pick this atom cluster over the
    SMT group, even though we should.  As a result, we do not load balance
    the busier Atom cluster (with 3 tasks) towards the local atom cluster
    (with 1 task).  And it doesn't make sense to pick the 1 task SMT group
    as the busier group as we also should not pull task off the SMT towards
    the 1 task atom cluster and make the SMT core completely empty.
    Signed-off-by: default avatarTim Chen <tim.c.chen@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lore.kernel.org/r/e24f35d142308790f69be65930b82794ef6658a2.1688770494.git.tim.c.chen@linux.intel.com
    fee1759e
fair.c 343 KB