Re: [PATCH v2 06/23] sched/cache: Track LLC-preferred tasks per runqueue

From: Tim Chen
Date: Tue Dec 09 2025 - 17:56:23 EST


On Tue, 2025-12-09 at 13:16 +0100, Peter Zijlstra wrote:
> On Wed, Dec 03, 2025 at 03:07:25PM -0800, Tim Chen wrote:
>
>
> > #ifdef CONFIG_SCHED_CACHE
> > struct callback_head cache_work;
> > + /*the p is currently refcounted in a rq's preferred llc stats*/
>
> Shall we have spaces after and before the comment marks?
>
> Also, comment confuses me, I don't see get_task_struct() /
> put_task_struct() usage. Did you mean something else with refcount?

It is the accounting for number of tasks preferring
a certain LLC on a runqueue during enqueue/dequeue,
or when a task's LLC preference changes, by
account_llc_enqueue() and account_llc_dequeue()

How about change he comment to

/* LLC preference accounting should be done in dequeue */
>
> > + bool sched_llc_active;
> > int preferred_llc;
> > #endif
>
> > +static void account_llc_dequeue(struct rq *rq, struct task_struct *p)
> > +{
> > + int pref_llc;
> > +
> > + /*
> > + * Borrow the uc_se->active from uclamp_rq_inc_id(),
> > + * uclamp_rq_dec_id() to avoid the unbalanced calculation
> > + * of rq statistics.
> > + */
> > + if (unlikely(!p->sched_llc_active))
> > + return;
>
> Another very confusing comment; what? Also, can you please explain (in
> the new comment) how we get here without having llc_active set?

The comment meant to say that we are using a similar mechanism as
accounting done in uc_se->active from uclamp_rq_inc_id(). I agree that
it confuses more than making things clearer.

How about the following comment to make things clearer:

/*
* Cache aware scheduling was active when the task was enqueued.
* Admin has disabled cache aware scheduling before task was dequeued
* but the accounting has to be kept straight in case cache aware scheduling
* is re-enabled.
*/

>
> > +
> > + pref_llc = p->preferred_llc;
> > + if (pref_llc < 0)
> > + return;
> > +
> > + rq->nr_llc_running--;
> > + rq->nr_pref_llc_running -= (pref_llc == task_llc(p));
> > + p->sched_llc_active = false;
> > +}