Re: [PATCH] sched/numa: Restore sched feature NUMA to its earlier avatar.

From: Srikar Dronamraju
Date: Fri Jul 10 2015 - 13:28:20 EST


> > > Which in itself is confusing: WTH do we have a generic switch called 'NUMA' and
> > > then have it disabled?
> >
> > NUMA feature gets enabled on multi-node boxes because of
> >
> > start_kernel() -> numa_policy_init() -> check_numabalancing_enable() ->
> > set_numabalancing_state() -> sched_feat_set("NUMA");
>
> Ugh, that is nonsensical!
>
> If CONFIG_SCHED_DEBUG is disabled then sched_features is a constant value:
>
> # define const_debug const
>
> ...
>
> extern const_debug unsigned int sysctl_sched_features;
>
> sched_features are _only_ meant for debugging. They turn into an unchangeable set
> of features when SCHED_DEBUG is disabled - and that is very much by design.
>
> The whole set_numabalancing_state() muck needs to be fixed.

Would something like the below suffice. If yes I can send out a formal
patch for the same. Here we are moving numabalancing_enabled variable to
common i.e for both CONFIG_SCHED_DEBUG and !CONFIG_SCHED_DEBUG.

Also removing sched_feat_numa because its no more getting used.
numabalancing_enabled is already being used similarly in task_tick_fair
and task_numa_fault.

-------------->8------------------------------------------------------8<--------------

kernel/sched/core.c | 5 +++--
kernel/sched/fair.c | 2 +-
kernel/sched/sched.h | 6 ------
3 files changed, 4 insertions(+), 9 deletions(-)

diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 78b4bad10..69ccbda4 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2059,17 +2059,18 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
}

#ifdef CONFIG_NUMA_BALANCING
+__read_mostly bool numabalancing_enabled;
+
#ifdef CONFIG_SCHED_DEBUG
void set_numabalancing_state(bool enabled)
{
+ numabalancing_enabled = enabled;
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;
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 587a2f6..1b86455 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -5679,7 +5679,7 @@ static int migrate_degrades_locality(struct task_struct *p, struct lb_env *env)
if (!p->numa_faults || !(env->sd->flags & SD_NUMA))
return -1;

- if (!sched_feat(NUMA))
+ if (!numabalancing_enabled)
return -1;

src_nid = cpu_to_node(env->src_cpu);
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 84d4879..d460fe3 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -1014,14 +1014,8 @@ 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 */
#else
-#define sched_feat_numa(x) (0)
#define numabalancing_enabled (0)
#endif /* CONFIG_NUMA_BALANCING */



--
Thanks and Regards
Srikar Dronamraju

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/