Re: [PATCH v3 3/4] sched/fair: Add sched_smt_active check for fastpaths
From: Shrikanth Hegde
Date: Fri May 15 2026 - 11:54:54 EST
Hi Valentin. Thanks for going through the patches.
On 5/15/26 7:05 PM, Valentin Schneider wrote:
On 13/05/26 19:09, Shrikanth Hegde wrote:
For fastpaths such as wakeup and load balance even minimal code additions
can add up. is_core_idle is accessed during load balance.
Other callsites of is_core_idle make sched_smt_active() check first.
Make the same check in should_we_balance.
Rest of access to cpu_smt_mask isn't in fastpath.
Note: Remove the stale comment above is_core_idle. Enqueue methods
of fair aren't close to it anymore.
Suggested-by: K Prateek Nayak <kprateek.nayak@xxxxxxx>
Signed-off-by: Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>
---
kernel/sched/fair.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 353e31ecaadc..964014a74cf9 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -1578,10 +1578,7 @@ update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se)
se->exec_start = rq_clock_task(rq_of(cfs_rq));
}
-/**************************************************
- * Scheduling class queueing methods:
- */
-
+/* Check sched_smt_active before calling this to avoid overheads in fastpaths */
static inline bool is_core_idle(int cpu)
{
int sibling;
@@ -11995,7 +11992,8 @@ static int should_we_balance(struct lb_env *env)
* balancing cores, but remember the first idle SMT CPU for
* later consideration. Find CPU on an idle core first.
*/
- if (!(env->sd->flags & SD_SHARE_CPUCAPACITY) && !is_core_idle(cpu)) {
+ if (!(env->sd->flags & SD_SHARE_CPUCAPACITY) &&
+ sched_smt_active() && !is_core_idle(cpu)) {
Nit: Since that whole if statement is about SMT, you could have the static
key be the first thing checked in the condition so it can short circuit
earlier.
Ok. We can do that too.
Only reason i had kept it that way was to avoid
calling it when load balancing at SMT domain assuming sched_smt_active() is
a more common in the field.
I can send out v4 out quickly with below change.
if (sched_smt_active() &&
!(env->sd->flags & SD_SHARE_CPUCAPACITY) &&
!is_core_idle(cpu)) {
That's exactly what prateek had suggested.