[PATCH v2 08/23] sched/cache: Calculate the per runqueue task LLC preference

From: Tim Chen

Date: Wed Dec 03 2025 - 18:01:30 EST


Calculate the number of tasks' LLC preferences for each runqueue.
This statistic is computed during task enqueue and dequeue
operations, and is used by the cache-aware load balancing.

Co-developed-by: Chen Yu <yu.c.chen@xxxxxxxxx>
Signed-off-by: Chen Yu <yu.c.chen@xxxxxxxxx>
Signed-off-by: Tim Chen <tim.c.chen@xxxxxxxxxxxxxxx>
---

Notes:
v1->v2: Split from previous patch for easier review.

kernel/sched/fair.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index d46a70a9d9fb..b0e87616e377 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -1231,11 +1231,12 @@ static void account_llc_enqueue(struct rq *rq, struct task_struct *p)
return;

pref_llc = p->preferred_llc;
- if (pref_llc < 0)
+ if (pref_llc < 0 || pref_llc >= max_llcs)
return;

rq->nr_llc_running++;
rq->nr_pref_llc_running += (pref_llc == task_llc(p));
+ rq->nr_pref_llc[pref_llc]++;
p->sched_llc_active = true;
}

@@ -1252,11 +1253,12 @@ static void account_llc_dequeue(struct rq *rq, struct task_struct *p)
return;

pref_llc = p->preferred_llc;
- if (pref_llc < 0)
+ if (pref_llc < 0 || pref_llc >= max_llcs)
return;

rq->nr_llc_running--;
rq->nr_pref_llc_running -= (pref_llc == task_llc(p));
+ rq->nr_pref_llc[pref_llc]--;
p->sched_llc_active = false;
}

--
2.32.0