Messages in this thread | | | Date | Fri, 15 Oct 2021 20:29:50 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH v2 3/4] sched/fair: Wait before decaying max_newidle_lb_cost |
| |
On Fri, Oct 15, 2021 at 08:02:01PM +0200, Vincent Guittot wrote: > On Fri, 15 Oct 2021 at 19:41, Peter Zijlstra <peterz@infradead.org> wrote: > > > > On Fri, Oct 15, 2021 at 02:46:53PM +0200, Vincent Guittot wrote: > > > Decay max_newidle_lb_cost only when it has not been updated for a while > > > and ensure to not decay a recently changed value. > > > > I was more thinking something long these lines; ofcourse, no idea how > > well it actually behaves. > > > > Index: linux-2.6/include/linux/sched/topology.h > > =================================================================== > > --- linux-2.6.orig/include/linux/sched/topology.h > > +++ linux-2.6/include/linux/sched/topology.h > > @@ -98,7 +98,6 @@ struct sched_domain { > > > > /* idle_balance() stats */ > > u64 max_newidle_lb_cost; > > - unsigned long next_decay_max_lb_cost; > > > > u64 avg_scan_cost; /* select_idle_sibling */ > > > > Index: linux-2.6/kernel/sched/fair.c > > =================================================================== > > --- linux-2.6.orig/kernel/sched/fair.c > > +++ linux-2.6/kernel/sched/fair.c > > @@ -10241,6 +10241,17 @@ void update_max_interval(void) > > } > > > > /* > > + * Asymmetric IIR filter, 1/4th down, 3/4th up. > > + */ > > +static void update_newidle_cost(u64 *cost, u64 new) > > +{ > > + s64 diff = new - *cost; > > + if (diff > 0) > > + diff *= 3; > > + *cost += diff / 4; > > +} > > I tried to use something similar which was based on update_avg() but > there were some performance regressions: > some regressions were linked to not jumping to the new max directly. I > assume some level were started whereas it would take too much time > and some regressions happened if the decay was too quick
Hmm, fair enough..
There's always something like:
s64 diff = new - *cost; if (diff < 0) diff = 3*diff/256; *cost += diff;
Which jumps up instantly and decays rather slower. The advantage of something like that, as I see it, is all those lines it deletes, but if it doesn't actually work, it doesn't work.
A well. Thanks for trying.
| |