Messages in this thread | | | Date | Wed, 03 Apr 2013 15:18:51 +0800 | From | Michael Wang <> | Subject | Re: [patch v3 0/8] sched: use runnable avg in load balance |
| |
On 04/03/2013 02:53 PM, Alex Shi wrote: > On 04/03/2013 02:22 PM, Michael Wang wrote: >>>> >>>> If many tasks sleep long time, their runnable load are zero. And if they >>>> are waked up bursty, too light runnable load causes big imbalance among >>>> CPU. So such benchmark, like aim9 drop 5~7%. >>>> >>>> With this patch the losing is covered, and even is slight better. >> A fast test show the improvement disappear and the regression back >> again...after applied this one as the 8th patch, it doesn't works. > > It always is good for on benchmark and bad for another. :)
That's right :)
> > the following patch include the renamed knob, and you can tune it under > /proc/sys/kernel/... to see detailed impact degree.
Could I make the conclusion that the improvement on pgbench was caused by the new weighted_cpuload()?
The burst branch seems to just adopt the load in old world, if reduce the rate to enter that branch could regain the benefit, then I could confirm my supposition.
> > + if (cpu_rq(this_cpu)->avg_idle < sysctl_sched_migration_cost || > + cpu_rq(prev_cpu)->avg_idle < sysctl_sched_migration_cost)
It should be 'sysctl_sched_burst_threshold' here, isn't it? anyway, I will take a try with different rate.
Regards, Michael Wang
> + burst= 1; > + > + /* use instant load for bursty waking up */ > + if (!burst) { > + load = source_load(prev_cpu, idx); > + this_load = target_load(this_cpu, idx); > + } else { > + load = cpu_rq(prev_cpu)->load.weight; > + this_load = cpu_rq(this_cpu)->load.weight; > + } > > /* > * If sync wakeup then subtract the (maximum possible) > diff --git a/kernel/sysctl.c b/kernel/sysctl.c > index afc1dc6..1f23457 100644 > --- a/kernel/sysctl.c > +++ b/kernel/sysctl.c > @@ -327,6 +327,13 @@ static struct ctl_table kern_table[] = { > .proc_handler = proc_dointvec, > }, > { > + .procname = "sched_burst_threshold_ns", > + .data = &sysctl_sched_burst_threshold, > + .maxlen = sizeof(unsigned int), > + .mode = 0644, > + .proc_handler = proc_dointvec, > + }, > + { > .procname = "sched_nr_migrate", > .data = &sysctl_sched_nr_migrate, > .maxlen = sizeof(unsigned int), >
| |