Re: [PATCH v3 3/4] sched/fair: Add sched_smt_active check for fastpaths
From: Valentin Schneider
Date: Fri May 15 2026 - 09:46:58 EST
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.
> if (idle_smt == -1)
> idle_smt = cpu;
> /*
> --
> 2.47.3