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

Tim Chen posted 23 patches 2 weeks, 1 day ago
There is a newer version of this series
[PATCH v2 08/23] sched/cache: Calculate the per runqueue task LLC preference
Posted by Tim Chen 2 weeks, 1 day ago
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@intel.com>
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
Signed-off-by: Tim Chen <tim.c.chen@linux.intel.com>
---

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