* relax_domain_level boot parameter has no effect
@ 2012-06-01 21:03 Dimitri Sivanich
2012-06-04 15:37 ` Peter Zijlstra
0 siblings, 1 reply; 7+ messages in thread
From: Dimitri Sivanich @ 2012-06-01 21:03 UTC (permalink / raw)
To: Ingo Molnar, Peter Zijlstra; +Cc: linux-kernel
I noticed (and verified) that the relax_domain_level boot parameter does not
get processed because sched_domain_level_max is 0 at the time that
setup_relax_domain_level() is run.
int sched_domain_level_max;
static int __init setup_relax_domain_level(char *str)
{
unsigned long val;
val = simple_strtoul(str, NULL, 0);
if (val < sched_domain_level_max)
default_relax_domain_level = val;
return 1;
}
__setup("relax_domain_level=", setup_relax_domain_level);
struct sched_domain *build_sched_domain(struct sched_domain_topology_level *tl,
..
sched_domain_level_max = max(sched_domain_level_max, sd->level);
..
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: relax_domain_level boot parameter has no effect 2012-06-01 21:03 relax_domain_level boot parameter has no effect Dimitri Sivanich @ 2012-06-04 15:37 ` Peter Zijlstra 2012-06-04 18:16 ` Dimitri Sivanich 0 siblings, 1 reply; 7+ messages in thread From: Peter Zijlstra @ 2012-06-04 15:37 UTC (permalink / raw) To: Dimitri Sivanich; +Cc: Ingo Molnar, linux-kernel On Fri, 2012-06-01 at 16:03 -0500, Dimitri Sivanich wrote: > I noticed (and verified) that the relax_domain_level boot parameter does not > get processed because sched_domain_level_max is 0 at the time that > setup_relax_domain_level() is run. > > int sched_domain_level_max; > > static int __init setup_relax_domain_level(char *str) > { > unsigned long val; > > val = simple_strtoul(str, NULL, 0); > if (val < sched_domain_level_max) > default_relax_domain_level = val; > > return 1; > } > __setup("relax_domain_level=", setup_relax_domain_level); Ah indeed.. this has been so for a while I guess. What are you using this knob for? ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: relax_domain_level boot parameter has no effect 2012-06-04 15:37 ` Peter Zijlstra @ 2012-06-04 18:16 ` Dimitri Sivanich 2012-06-05 18:34 ` Dimitri Sivanich 0 siblings, 1 reply; 7+ messages in thread From: Dimitri Sivanich @ 2012-06-04 18:16 UTC (permalink / raw) To: Peter Zijlstra; +Cc: Ingo Molnar, linux-kernel On Mon, Jun 04, 2012 at 05:37:42PM +0200, Peter Zijlstra wrote: > On Fri, 2012-06-01 at 16:03 -0500, Dimitri Sivanich wrote: > > I noticed (and verified) that the relax_domain_level boot parameter does not > > get processed because sched_domain_level_max is 0 at the time that > > setup_relax_domain_level() is run. > > > > int sched_domain_level_max; > > > > static int __init setup_relax_domain_level(char *str) > > { > > unsigned long val; > > > > val = simple_strtoul(str, NULL, 0); > > if (val < sched_domain_level_max) > > default_relax_domain_level = val; > > > > return 1; > > } > > __setup("relax_domain_level=", setup_relax_domain_level); > > Ah indeed.. this has been so for a while I guess. On a very related note, the sched_relax_domain_level setting in cpuset doesn't appear to work correctly either (if I'm interpreting all of this correctly). The reason is that the build_sched_domain() routine calls the set_domain_attribute() routine prior to setting the sd->level, however, the set_domain_attribute() routine relies on the sd->level to decide whether idle load balancing will be off/on. static void set_domain_attribute(struct sched_domain *sd, .. ==> if (request < sd->level) { /* turn off idle balance on this domain */ .. .. struct sched_domain *build_sched_domain(struct sched_domain_topology_level *tl, .. ==> set_domain_attribute(sd, attr); cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu)); if (child) { ==> sd->level = child->level + 1; sched_domain_level_max = max(sched_domain_level_max, sd->level); > What are you using this knob for? I was poking around for different ways to turn off idle load balancing when I ran into all of this. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: relax_domain_level boot parameter has no effect 2012-06-04 18:16 ` Dimitri Sivanich @ 2012-06-05 18:34 ` Dimitri Sivanich 2012-06-05 18:36 ` Peter Zijlstra 0 siblings, 1 reply; 7+ messages in thread From: Dimitri Sivanich @ 2012-06-05 18:34 UTC (permalink / raw) To: Peter Zijlstra, Ingo Molnar, linux-kernel On Mon, Jun 04, 2012 at 01:16:14PM -0500, Dimitri Sivanich wrote: > On Mon, Jun 04, 2012 at 05:37:42PM +0200, Peter Zijlstra wrote: > > On Fri, 2012-06-01 at 16:03 -0500, Dimitri Sivanich wrote: > > > I noticed (and verified) that the relax_domain_level boot parameter does not > > > get processed because sched_domain_level_max is 0 at the time that > > > setup_relax_domain_level() is run. > > > > > > int sched_domain_level_max; > > > > > > static int __init setup_relax_domain_level(char *str) > > > { > > > unsigned long val; > > > > > > val = simple_strtoul(str, NULL, 0); > > > if (val < sched_domain_level_max) > > > default_relax_domain_level = val; > > > > > > return 1; > > > } > > > __setup("relax_domain_level=", setup_relax_domain_level); > > > > Ah indeed.. this has been so for a while I guess. > > On a very related note, the sched_relax_domain_level setting in cpuset > doesn't appear to work correctly either (if I'm interpreting all of this > correctly). > > The reason is that the build_sched_domain() routine calls the > set_domain_attribute() routine prior to setting the sd->level, however, > the set_domain_attribute() routine relies on the sd->level to decide whether > idle load balancing will be off/on. > > static void set_domain_attribute(struct sched_domain *sd, > .. > ==> if (request < sd->level) { > /* turn off idle balance on this domain */ > .. > .. > struct sched_domain *build_sched_domain(struct sched_domain_topology_level *tl, > .. > ==> set_domain_attribute(sd, attr); > cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu)); > if (child) { > ==> sd->level = child->level + 1; > sched_domain_level_max = max(sched_domain_level_max, sd->level); > > > > What are you using this knob for? > > I was poking around for different ways to turn off idle load balancing when > I ran into all of this. I'll submit a patch shortly that should return these back to what appears to be their intended functionality. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: relax_domain_level boot parameter has no effect 2012-06-05 18:34 ` Dimitri Sivanich @ 2012-06-05 18:36 ` Peter Zijlstra 2012-06-05 18:44 ` [PATCH] Fix relax_domain_level interface Dimitri Sivanich 0 siblings, 1 reply; 7+ messages in thread From: Peter Zijlstra @ 2012-06-05 18:36 UTC (permalink / raw) To: Dimitri Sivanich; +Cc: Ingo Molnar, linux-kernel On Tue, 2012-06-05 at 13:34 -0500, Dimitri Sivanich wrote: > > I'll submit a patch shortly that should return these back to what appears to > be their intended functionality. I guess removing the max check in the paramater parsing is the easiest thing. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] Fix relax_domain_level interface 2012-06-05 18:36 ` Peter Zijlstra @ 2012-06-05 18:44 ` Dimitri Sivanich 2012-06-06 16:01 ` [tip:sched/urgent] sched: Fix the relax_domain_level boot parameter tip-bot for Dimitri Sivanich 0 siblings, 1 reply; 7+ messages in thread From: Dimitri Sivanich @ 2012-06-05 18:44 UTC (permalink / raw) To: Peter Zijlstra; +Cc: Ingo Molnar, linux-kernel On Tue, Jun 05, 2012 at 08:36:59PM +0200, Peter Zijlstra wrote: > On Tue, 2012-06-05 at 13:34 -0500, Dimitri Sivanich wrote: > > > > I'll submit a patch shortly that should return these back to what appears to > > be their intended functionality. > > I guess removing the max check in the paramater parsing is the easiest > thing. My thoughts exactly. Fix the relax_domain_level boot parameter. It does not get processed because sched_domain_level_max is 0 at the time that setup_relax_domain_level() is run. Simply accept the value as it is, as we don't know the value of sched_domain_level_max until sched domain construction is completed. Fix sched_relax_domain_level in cpuset. The build_sched_domain() routine calls the set_domain_attribute() routine prior to setting the sd->level, however, the set_domain_attribute() routine relies on the sd->level to decide whether idle load balancing will be off/on. Signed-off-by: Dimitri Sivanich <sivanich@sgi.com> --- kernel/sched/core.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) Index: linux/kernel/sched/core.c =================================================================== --- linux.orig/kernel/sched/core.c +++ linux/kernel/sched/core.c @@ -6165,11 +6165,8 @@ int sched_domain_level_max; static int __init setup_relax_domain_level(char *str) { - unsigned long val; - - val = simple_strtoul(str, NULL, 0); - if (val < sched_domain_level_max) - default_relax_domain_level = val; + if (kstrtoint(str, 0, &default_relax_domain_level)) + pr_warn("Unable to set relax_domain_level\n"); return 1; } @@ -6543,7 +6540,6 @@ struct sched_domain *build_sched_domain( if (!sd) return child; - set_domain_attribute(sd, attr); cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu)); if (child) { sd->level = child->level + 1; @@ -6551,6 +6547,7 @@ struct sched_domain *build_sched_domain( child->parent = sd; } sd->child = child; + set_domain_attribute(sd, attr); return sd; } ^ permalink raw reply [flat|nested] 7+ messages in thread
* [tip:sched/urgent] sched: Fix the relax_domain_level boot parameter 2012-06-05 18:44 ` [PATCH] Fix relax_domain_level interface Dimitri Sivanich @ 2012-06-06 16:01 ` tip-bot for Dimitri Sivanich 0 siblings, 0 replies; 7+ messages in thread From: tip-bot for Dimitri Sivanich @ 2012-06-06 16:01 UTC (permalink / raw) To: linux-tip-commits; +Cc: linux-kernel, hpa, mingo, a.p.zijlstra, tglx, sivanich Commit-ID: a841f8cef4bb124f0f5563314d0beaf2e1249d72 Gitweb: http://git.kernel.org/tip/a841f8cef4bb124f0f5563314d0beaf2e1249d72 Author: Dimitri Sivanich <sivanich@sgi.com> AuthorDate: Tue, 5 Jun 2012 13:44:36 -0500 Committer: Ingo Molnar <mingo@kernel.org> CommitDate: Wed, 6 Jun 2012 17:07:41 +0200 sched: Fix the relax_domain_level boot parameter It does not get processed because sched_domain_level_max is 0 at the time that setup_relax_domain_level() is run. Simply accept the value as it is, as we don't know the value of sched_domain_level_max until sched domain construction is completed. Fix sched_relax_domain_level in cpuset. The build_sched_domain() routine calls the set_domain_attribute() routine prior to setting the sd->level, however, the set_domain_attribute() routine relies on the sd->level to decide whether idle load balancing will be off/on. Signed-off-by: Dimitri Sivanich <sivanich@sgi.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/20120605184436.GA15668@sgi.com Signed-off-by: Ingo Molnar <mingo@kernel.org> --- kernel/sched/core.c | 9 +++------ 1 files changed, 3 insertions(+), 6 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 2bdd176..d5594a4 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6268,11 +6268,8 @@ int sched_domain_level_max; static int __init setup_relax_domain_level(char *str) { - unsigned long val; - - val = simple_strtoul(str, NULL, 0); - if (val < sched_domain_level_max) - default_relax_domain_level = val; + if (kstrtoint(str, 0, &default_relax_domain_level)) + pr_warn("Unable to set relax_domain_level\n"); return 1; } @@ -6698,7 +6695,6 @@ struct sched_domain *build_sched_domain(struct sched_domain_topology_level *tl, if (!sd) return child; - set_domain_attribute(sd, attr); cpumask_and(sched_domain_span(sd), cpu_map, tl->mask(cpu)); if (child) { sd->level = child->level + 1; @@ -6706,6 +6702,7 @@ struct sched_domain *build_sched_domain(struct sched_domain_topology_level *tl, child->parent = sd; } sd->child = child; + set_domain_attribute(sd, attr); return sd; } ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-06-06 16:01 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-06-01 21:03 relax_domain_level boot parameter has no effect Dimitri Sivanich 2012-06-04 15:37 ` Peter Zijlstra 2012-06-04 18:16 ` Dimitri Sivanich 2012-06-05 18:34 ` Dimitri Sivanich 2012-06-05 18:36 ` Peter Zijlstra 2012-06-05 18:44 ` [PATCH] Fix relax_domain_level interface Dimitri Sivanich 2012-06-06 16:01 ` [tip:sched/urgent] sched: Fix the relax_domain_level boot parameter tip-bot for Dimitri Sivanich
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.