Re: [PATCH v2] sched/cache: Don't use fits_capacity() to compare thread and CPU counts
From: Kayra Cizmeci
Date: Wed Nov 04 2026 - 14:34:59 EST
Hi Zhan!
On Wed, Nov 04, 2026 at 10:09:54AM +0800, Zhan Xusheng wrote:
> From: Zhan Xusheng <zhanxusheng@xxxxxxxxxx>
I said myself that I'll review this someday. But forgot when to :/.
Hope I'm not too late.
>
> invalid_llc_nr() checks that a process's running threads stay below 80%
> of the LLC's cores, scaled by llc_aggr_tolerance, with fits_capacity().
> fits_capacity() is meant for capacity values; here it only supplies the
> 20% margin.
>
> Give the check its own helper. x * 5 < y * 4 is the same comparison as
> x * 1280 < y * 1024, so there is no functional change.
Magic of 256.
>
> Signed-off-by: Zhan Xusheng <zhanxusheng@xxxxxxxxxx>
> Reviewed-by: Tim Chen <tim.c.chen@xxxxxxxxxxxxxxx>
> Reviewed-by: Qais Yousef <qyousef@xxxxxxxxxxx>
> ---
> Qais's series changes fits_capacity() to take a CPU number as its
> second argument [1]; this call would then pass the CPU count as a CPU
> number without a warning.
>
> v2: reword the comment (Tim); move the reason above out of the
> changelog; add the Reviewed-by tags.
> v1: https://lore.kernel.org/all/20261102021536.1026143-1-zhanxusheng1024@xxxxxxxxx/
>
> [1] https://lore.kernel.org/all/20260504020003.71306-5-qyousef@xxxxxxxxxxx/
>
> kernel/sched/fair.c | 10 ++++++++--
> 1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
> index cfc982205b98..a7467fe425e6 100644
> --- a/kernel/sched/fair.c
> +++ b/kernel/sched/fair.c
> @@ -1469,6 +1469,12 @@ static bool exceed_llc_capacity(struct sched_cache_group *grp, int cpu)
> return false;
> }
>
> +/* Number of running threads below 80% of LLC's cores for default setting */
> +static inline bool fits_llc_nr(u64 nr_threads, unsigned int nr_cpus)
> +{
> + return nr_threads * 5 < (u64)nr_cpus * 4;
> +}
> +
> static bool invalid_llc_nr(struct sched_cache_group *grp, struct task_struct *p,
> int cpu)
> {
> @@ -1485,8 +1491,8 @@ static bool invalid_llc_nr(struct sched_cache_group *grp, struct task_struct *p,
> if (scale == INT_MAX)
> return false;
>
> - return !fits_capacity((READ_ONCE(grp->nr_running_avg) * cpu_smt_num_threads),
> - (scale * per_cpu(sd_llc_size, cpu)));
> + return !fits_llc_nr(READ_ONCE(grp->nr_running_avg) * cpu_smt_num_threads,
> + scale * per_cpu(sd_llc_size, cpu));
> }
>
> /*
> --
> 2.43.0
>
Yeah well they behave the same.
Reviewed-by: Kayra Cizmeci <kayracizmeci@xxxxxxxxx>
I'll normally say Thanks, but I'll try 'cheers' for today.
Cheers,
Kayra