aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Galbraith <efault@gmx.de>2009-09-09 09:41:37 -0400
committerIngo Molnar <mingo@elte.hu>2009-09-09 11:30:05 -0400
commit2bba22c50b06abe9fd0d23933b1e64d35b419262 (patch)
tree5ac0373fa1d18f043cb27183f9f185ceda598915
parentb5d9d734a53e0204aab0089079cbde2a1285a38f (diff)
sched: Turn off child_runs_first
Set child_runs_first default to off. It hurts 'optimal' make -j<NR_CPUS> workloads as make jobs get preempted by child tasks, reducing parallelism. Note, this patch might make existing races in user applications more prominent than before - so breakages might be bisected to this commit. Child-runs-first is broken on SMP to begin with, and we already had it off briefly in v2.6.23 so most of the offenders ought to be fixed. Would be nice not to revert this commit but fix those apps finally ... Signed-off-by: Mike Galbraith <efault@gmx.de> Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <1252486344.28645.18.camel@marge.simson.net> [ made the sysctl independent of CONFIG_SCHED_DEBUG, in case people want to work around broken apps. ] Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--include/linux/sched.h2
-rw-r--r--kernel/sched_fair.c4
-rw-r--r--kernel/sysctl.c16
3 files changed, 11 insertions, 11 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h
index 3b7f43e3b736..3a50e8222498 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -1820,8 +1820,8 @@ extern unsigned int sysctl_sched_min_granularity;
1820extern unsigned int sysctl_sched_wakeup_granularity; 1820extern unsigned int sysctl_sched_wakeup_granularity;
1821extern unsigned int sysctl_sched_shares_ratelimit; 1821extern unsigned int sysctl_sched_shares_ratelimit;
1822extern unsigned int sysctl_sched_shares_thresh; 1822extern unsigned int sysctl_sched_shares_thresh;
1823#ifdef CONFIG_SCHED_DEBUG
1824extern unsigned int sysctl_sched_child_runs_first; 1823extern unsigned int sysctl_sched_child_runs_first;
1824#ifdef CONFIG_SCHED_DEBUG
1825extern unsigned int sysctl_sched_features; 1825extern unsigned int sysctl_sched_features;
1826extern unsigned int sysctl_sched_migration_cost; 1826extern unsigned int sysctl_sched_migration_cost;
1827extern unsigned int sysctl_sched_nr_migrate; 1827extern unsigned int sysctl_sched_nr_migrate;
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c
index e386e5dfcdae..af325a382b1b 100644
--- a/kernel/sched_fair.c
+++ b/kernel/sched_fair.c
@@ -48,10 +48,10 @@ unsigned int sysctl_sched_min_granularity = 4000000ULL;
48static unsigned int sched_nr_latency = 5; 48static unsigned int sched_nr_latency = 5;
49 49
50/* 50/*
51 * After fork, child runs first. (default) If set to 0 then 51 * After fork, child runs first. If set to 0 (default) then
52 * parent will (try to) run first. 52 * parent will (try to) run first.
53 */ 53 */
54const_debug unsigned int sysctl_sched_child_runs_first = 1; 54unsigned int sysctl_sched_child_runs_first __read_mostly;
55 55
56/* 56/*
57 * sys_sched_yield() compat mode 57 * sys_sched_yield() compat mode
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 6c9836ef4b47..25d6bf3383be 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -246,6 +246,14 @@ static int max_wakeup_granularity_ns = NSEC_PER_SEC; /* 1 second */
246#endif 246#endif
247 247
248static struct ctl_table kern_table[] = { 248static struct ctl_table kern_table[] = {
249 {
250 .ctl_name = CTL_UNNUMBERED,
251 .procname = "sched_child_runs_first",
252 .data = &sysctl_sched_child_runs_first,
253 .maxlen = sizeof(unsigned int),
254 .mode = 0644,
255 .proc_handler = &proc_dointvec,
256 },
249#ifdef CONFIG_SCHED_DEBUG 257#ifdef CONFIG_SCHED_DEBUG
250 { 258 {
251 .ctl_name = CTL_UNNUMBERED, 259 .ctl_name = CTL_UNNUMBERED,
@@ -300,14 +308,6 @@ static struct ctl_table kern_table[] = {
300 }, 308 },
301 { 309 {
302 .ctl_name = CTL_UNNUMBERED, 310 .ctl_name = CTL_UNNUMBERED,
303 .procname = "sched_child_runs_first",
304 .data = &sysctl_sched_child_runs_first,
305 .maxlen = sizeof(unsigned int),
306 .mode = 0644,
307 .proc_handler = &proc_dointvec,
308 },
309 {
310 .ctl_name = CTL_UNNUMBERED,
311 .procname = "sched_features", 311 .procname = "sched_features",
312 .data = &sysctl_sched_features, 312 .data = &sysctl_sched_features,
313 .maxlen = sizeof(unsigned int), 313 .maxlen = sizeof(unsigned int),