Messages in this thread Patch in this message | | | From | Shrikanth Hegde <> | Subject | [PATCH] sched/fair: Add SMT4 group_smt_balance handling | Date | Mon, 17 Jul 2023 20:28:23 +0530 |
| |
From: Tim Chen <tim.c.chen@linux.intel.com>
For SMT4, any group with more than 2 tasks will be marked as group_smt_balance. Retain the behaviour of group_has_spare by marking the busiest group as the group which has the least number of idle_cpus.
Also, handle rounding effect of adding (ncores_local + ncores_busy) when the local is fully idle and busy group has more than 2 tasks. Local group should try to pull at least 1 task in this case.
Originally-by: Tim Chen <tim.c.chen@linux.intel.com> Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com> Signed-off-by: Shrikanth Hegde <sshegde@linux.vnet.ibm.com> --- kernel/sched/fair.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 932e7b78894a..9502013abe33 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -9532,7 +9532,7 @@ static inline long sibling_imbalance(struct lb_env *env, imbalance /= ncores_local + ncores_busiest;
/* Take advantage of resource in an empty sched group */ - if (imbalance == 0 && local->sum_nr_running == 0 && + if (imbalance <= 1 && local->sum_nr_running == 0 && busiest->sum_nr_running > 1) imbalance = 2;
@@ -9720,6 +9720,17 @@ static bool update_sd_pick_busiest(struct lb_env *env, break;
case group_smt_balance: + /* no idle cpus on both groups handled by group_fully_busy below */ + if (sgs->idle_cpus != 0 || busiest->idle_cpus != 0) { + if (sgs->idle_cpus > busiest->idle_cpus) + return false; + if (sgs->idle_cpus < busiest->idle_cpus) + return true; + if (sgs->sum_nr_running <= busiest->sum_nr_running) + return false; + } + break; + case group_fully_busy: /* * Select the fully busy group with highest avg_load. In -- 2.31.1
| |