[<prev] [next>] [day] [month] [year] [list]
Message-ID: <20251211055612.4071266-1-wangyang.guo@intel.com>
Date: Thu, 11 Dec 2025 13:56:12 +0800
From: Wangyang Guo <wangyang.guo@...el.com>
To: Ingo Molnar <mingo@...hat.com>,
Peter Zijlstra <peterz@...radead.org>,
Juri Lelli <juri.lelli@...hat.com>,
Vincent Guittot <vincent.guittot@...aro.org>,
Dietmar Eggemann <dietmar.eggemann@....com>,
Steven Rostedt <rostedt@...dmis.org>,
Ben Segall <bsegall@...gle.com>,
Mel Gorman <mgorman@...e.de>,
Valentin Schneider <vschneid@...hat.com>
Cc: linux-kernel@...r.kernel.org,
Wangyang Guo <wangyang.guo@...el.com>,
Benjamin Lei <benjamin.lei@...el.com>,
Tim Chen <tim.c.chen@...ux.intel.com>,
Tianyou Li <tianyou.li@...el.com>
Subject: [PATCH] sched/fair: Avoid false sharing in nohz struct
There are two potential false sharing issue in nohz struct:
1. idle_cpus_mask is a read-mostly field, but share the same cacheline
with frequently updated nr_cpus.
2. Data followed by nohz still share the same cacheline and has
potential false sharing issue.
This patch tries to resolve the above two problems by isolating the
frequently updated fields in a single cacheline.
Reported-by: Benjamin Lei <benjamin.lei@...el.com>
Reviewed-by: Tim Chen <tim.c.chen@...ux.intel.com>
Reviewed-by: Tianyou Li <tianyou.li@...el.com>
Signed-off-by: Wangyang Guo <wangyang.guo@...el.com>
---
kernel/sched/fair.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 5b752324270b..bcc2766b7986 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -7193,13 +7193,14 @@ static DEFINE_PER_CPU(cpumask_var_t, should_we_balance_tmpmask);
#ifdef CONFIG_NO_HZ_COMMON
static struct {
- cpumask_var_t idle_cpus_mask;
- atomic_t nr_cpus;
+ /* Isolate frequently updated fields in a cacheline to avoid false sharing issue. */
+ atomic_t nr_cpus ____cacheline_aligned;
int has_blocked; /* Idle CPUS has blocked load */
int needs_update; /* Newly idle CPUs need their next_balance collated */
unsigned long next_balance; /* in jiffy units */
unsigned long next_blocked; /* Next update of blocked load in jiffies */
-} nohz ____cacheline_aligned;
+ cpumask_var_t idle_cpus_mask ____cacheline_aligned;
+} nohz;
#endif /* CONFIG_NO_HZ_COMMON */
--
2.47.3
Powered by blists - more mailing lists