Messages in this thread | | | Date | Tue, 9 Nov 2021 12:56:44 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH 1/2] sched/fair: Couple wakee flips with heavy wakers |
| |
On Thu, Oct 21, 2021 at 03:56:02PM +0100, Mel Gorman wrote: > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index ff69f245b939..d00af3b97d8f 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -5865,6 +5865,14 @@ static void record_wakee(struct task_struct *p) > } > > if (current->last_wakee != p) { > + int min = __this_cpu_read(sd_llc_size) << 1; > + /* > + * Couple the wakee flips to the waker for the case where it > + * doesn't accrue flips, taking care to not push the wakee > + * high enough that the wake_wide() heuristic fails. > + */ > + if (current->wakee_flips > p->wakee_flips * min) > + p->wakee_flips++; > current->last_wakee = p; > current->wakee_flips++; > }
It's a bit odd that the above uses min for llc_size, while the below:
> @@ -5895,7 +5903,7 @@ static int wake_wide(struct task_struct *p) > > if (master < slave) > swap(master, slave); > - if (slave < factor || master < slave * factor) > + if ((slave < factor && master < (factor>>1)*factor) || master < slave * factor) > return 0; > return 1; > }
has factor.
Now:
!(slave < factor || master < slave * factor)
!(x || y) == !x && !y, gives:
slave >= factor && master >= slave * factor
subst lhr in rhs:
master >= factor * factor
your extra term:
!((slave < factor && master < (factor*factor)/2) || master < slave * factor)
changes that how? AFAICT it's a nop.
| |