diff options
| author | Ricardo Neri <ricardo.neri-calderon@linux.intel.com> | 2023-04-06 13:31:41 -0700 |
|---|---|---|
| committer | Peter Zijlstra <peterz@infradead.org> | 2023-05-08 10:58:35 +0200 |
| commit | 5fd6d7f43958cb62da105c8413eac3e78480f09a (patch) | |
| tree | 906c8a7eff085d51a08f411f4e6b0922cf074b39 /kernel | |
| parent | 18ad34532755feb5b9f4284b07769b1bfec18ab3 (diff) | |
sched/fair: Keep a fully_busy SMT sched group as busiest
When comparing two fully_busy scheduling groups, keep the current busiest
group if it represents an SMT core. Tasks in such scheduling group share
CPU resources and need more help than tasks in a non-SMT fully_busy group.
Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Zhang Rui <rui.zhang@intel.com>
Link: https://lore.kernel.org/r/20230406203148.19182-6-ricardo.neri-calderon@linux.intel.com
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/fair.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 85ce2494234d..4a9f04095742 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -9619,10 +9619,22 @@ static bool update_sd_pick_busiest(struct lb_env *env, * contention when accessing shared HW resources. * * XXX for now avg_load is not computed and always 0 so we - * select the 1st one. + * select the 1st one, except if @sg is composed of SMT + * siblings. */ - if (sgs->avg_load <= busiest->avg_load) + + if (sgs->avg_load < busiest->avg_load) return false; + + if (sgs->avg_load == busiest->avg_load) { + /* + * SMT sched groups need more help than non-SMT groups. + * If @sg happens to also be SMT, either choice is good. + */ + if (sds->busiest->flags & SD_SHARE_CPUCAPACITY) + return false; + } + break; case group_has_spare: |
