public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] sched/numa: Disable sched_numa_balancing on uma systems
@ 2015-07-15 16:42 Srikar Dronamraju
  2015-07-21  7:51 ` Ingo Molnar
  0 siblings, 1 reply; 3+ messages in thread
From: Srikar Dronamraju @ 2015-07-15 16:42 UTC (permalink / raw)
  To: Ingo Molnar, Peter Zijlstra
  Cc: linux-kernel, srikar, Rik van Riel, Mel Gorman

Commit 2a1ed24 ("sched/numa: Prefer NUMA hotness over cache hotness")
sets sched feature NUMA to true. However this can enable numa hinting
faults on a uma system.

This commit ensures that numa hinting faults occur only on a numa system
by setting/resetting sched_numa_balancing.

This commit
- Renames numabalancing_enabled to sched_numa_balancing
- Makes sched_numa_balancing common to CONFIG_SCHED_DEBUG and
  !CONFIG_SCHED_DEBUG. Earlier it was only in !CONFIG_SCHED_DEBUG
- Checks for sched_numa_balancing instead of sched_feat(NUMA)

Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
---
 kernel/sched/core.c  | 16 ++++++----------
 kernel/sched/fair.c  |  8 ++++----
 kernel/sched/sched.h | 10 ++--------
 3 files changed, 12 insertions(+), 22 deletions(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 78b4bad10..4722f5c 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2059,22 +2059,18 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
 }
 
 #ifdef CONFIG_NUMA_BALANCING
-#ifdef CONFIG_SCHED_DEBUG
+__read_mostly bool sched_numa_balancing;
+
 void set_numabalancing_state(bool enabled)
 {
+	sched_numa_balancing = enabled;
+#ifdef CONFIG_SCHED_DEBUG
 	if (enabled)
 		sched_feat_set("NUMA");
 	else
 		sched_feat_set("NO_NUMA");
-}
-#else
-__read_mostly bool numabalancing_enabled;
-
-void set_numabalancing_state(bool enabled)
-{
-	numabalancing_enabled = enabled;
-}
 #endif /* CONFIG_SCHED_DEBUG */
+}
 
 #ifdef CONFIG_PROC_SYSCTL
 int sysctl_numa_balancing(struct ctl_table *table, int write,
@@ -2082,7 +2078,7 @@ int sysctl_numa_balancing(struct ctl_table *table, int write,
 {
 	struct ctl_table t;
 	int err;
-	int state = numabalancing_enabled;
+	int state = sched_numa_balancing;
 
 	if (write && !capable(CAP_SYS_ADMIN))
 		return -EPERM;
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 587a2f6..5a901fd 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -2059,7 +2059,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags)
 	int local = !!(flags & TNF_FAULT_LOCAL);
 	int priv;
 
-	if (!numabalancing_enabled)
+	if (!sched_numa_balancing)
 		return;
 
 	/* for example, ksmd faulting in a user's mm */
@@ -5676,10 +5676,10 @@ static int migrate_degrades_locality(struct task_struct *p, struct lb_env *env)
 	unsigned long src_faults, dst_faults;
 	int src_nid, dst_nid;
 
-	if (!p->numa_faults || !(env->sd->flags & SD_NUMA))
+	if (!sched_numa_balancing)
 		return -1;
 
-	if (!sched_feat(NUMA))
+	if (!p->numa_faults || !(env->sd->flags & SD_NUMA))
 		return -1;
 
 	src_nid = cpu_to_node(env->src_cpu);
@@ -7980,7 +7980,7 @@ static void task_tick_fair(struct rq *rq, struct task_struct *curr, int queued)
 		entity_tick(cfs_rq, se, queued);
 	}
 
-	if (numabalancing_enabled)
+	if (sched_numa_balancing)
 		task_tick_numa(rq, curr);
 
 	update_rq_runnable_avg(rq, 1);
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 84d4879..93d8c17 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -1014,15 +1014,9 @@ extern struct static_key sched_feat_keys[__SCHED_FEAT_NR];
 #endif /* SCHED_DEBUG && HAVE_JUMP_LABEL */
 
 #ifdef CONFIG_NUMA_BALANCING
-#define sched_feat_numa(x) sched_feat(x)
-#ifdef CONFIG_SCHED_DEBUG
-#define numabalancing_enabled sched_feat_numa(NUMA)
-#else
-extern bool numabalancing_enabled;
-#endif /* CONFIG_SCHED_DEBUG */
+extern bool sched_numa_balancing;
 #else
-#define sched_feat_numa(x) (0)
-#define numabalancing_enabled (0)
+#define sched_numa_balancing (0)
 #endif /* CONFIG_NUMA_BALANCING */
 
 static inline u64 global_rt_period(void)
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] sched/numa: Disable sched_numa_balancing on uma systems
  2015-07-15 16:42 [PATCH] sched/numa: Disable sched_numa_balancing on uma systems Srikar Dronamraju
@ 2015-07-21  7:51 ` Ingo Molnar
  2015-07-21 10:08   ` Srikar Dronamraju
  0 siblings, 1 reply; 3+ messages in thread
From: Ingo Molnar @ 2015-07-21  7:51 UTC (permalink / raw)
  To: Srikar Dronamraju; +Cc: Peter Zijlstra, linux-kernel, Rik van Riel, Mel Gorman


* Srikar Dronamraju <srikar@linux.vnet.ibm.com> wrote:

> Commit 2a1ed24 ("sched/numa: Prefer NUMA hotness over cache hotness")
> sets sched feature NUMA to true. However this can enable numa hinting
> faults on a uma system.
> 
> This commit ensures that numa hinting faults occur only on a numa system
> by setting/resetting sched_numa_balancing.
> 
> This commit
> - Renames numabalancing_enabled to sched_numa_balancing
> - Makes sched_numa_balancing common to CONFIG_SCHED_DEBUG and
>   !CONFIG_SCHED_DEBUG. Earlier it was only in !CONFIG_SCHED_DEBUG
> - Checks for sched_numa_balancing instead of sched_feat(NUMA)
> 
> Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
> ---
>  kernel/sched/core.c  | 16 ++++++----------
>  kernel/sched/fair.c  |  8 ++++----
>  kernel/sched/sched.h | 10 ++--------
>  3 files changed, 12 insertions(+), 22 deletions(-)
> 
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 78b4bad10..4722f5c 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -2059,22 +2059,18 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
>  }
>  
>  #ifdef CONFIG_NUMA_BALANCING
> -#ifdef CONFIG_SCHED_DEBUG
> +__read_mostly bool sched_numa_balancing;
> +
>  void set_numabalancing_state(bool enabled)
>  {
> +	sched_numa_balancing = enabled;
> +#ifdef CONFIG_SCHED_DEBUG
>  	if (enabled)
>  		sched_feat_set("NUMA");
>  	else
>  		sched_feat_set("NO_NUMA");

So why is the 'NUMA' sched_features option still twiddled? Your patch splits out a 
sched_numa_balancing flag - so the NUMA/NO_NUMA feature can go away, right?

Thanks,

	Ingo

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] sched/numa: Disable sched_numa_balancing on uma systems
  2015-07-21  7:51 ` Ingo Molnar
@ 2015-07-21 10:08   ` Srikar Dronamraju
  0 siblings, 0 replies; 3+ messages in thread
From: Srikar Dronamraju @ 2015-07-21 10:08 UTC (permalink / raw)
  To: Ingo Molnar; +Cc: Peter Zijlstra, linux-kernel, Rik van Riel, Mel Gorman

> > @@ -2059,22 +2059,18 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
> >  }
> >  
> >  #ifdef CONFIG_NUMA_BALANCING
> > -#ifdef CONFIG_SCHED_DEBUG
> > +__read_mostly bool sched_numa_balancing;
> > +
> >  void set_numabalancing_state(bool enabled)
> >  {
> > +	sched_numa_balancing = enabled;
> > +#ifdef CONFIG_SCHED_DEBUG
> >  	if (enabled)
> >  		sched_feat_set("NUMA");
> >  	else
> >  		sched_feat_set("NO_NUMA");
> 
> So why is the 'NUMA' sched_features option still twiddled? Your patch splits out a 
> sched_numa_balancing flag - so the NUMA/NO_NUMA feature can go away, right?
> 

I thought we could retain sched_feat so that we could enable/disable
sched numa balancing for debugging purposes similar to other sched
features if the kernel has been build with CONFIG_SCHED_DEBUG.

-- 
Thanks and Regards
Srikar Dronamraju


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-07-21 10:09 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-15 16:42 [PATCH] sched/numa: Disable sched_numa_balancing on uma systems Srikar Dronamraju
2015-07-21  7:51 ` Ingo Molnar
2015-07-21 10:08   ` Srikar Dronamraju

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox