[Intel-gfx] [PATCH] mm: Reward slab shrinkers that reclaim more than they were asked

Chris Wilson chris at chris-wilson.co.uk
Tue Aug 15 22:53:08 UTC 2017


Quoting Andrew Morton (2017-08-15 23:30:10)
> On Sat, 12 Aug 2017 12:34:37 +0100 Chris Wilson <chris at chris-wilson.co.uk> wrote:
> 
> > Some shrinkers may only be able to free a bunch of objects at a time, and
> > so free more than the requested nr_to_scan in one pass. Account for the
> > extra freed objects against the total number of objects we intend to
> > free, otherwise we may end up penalising the slab far more than intended.
> > 
> > ...
> >
> > --- a/mm/vmscan.c
> > +++ b/mm/vmscan.c
> > @@ -398,6 +398,7 @@ static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
> >                       break;
> >               freed += ret;
> >  
> > +             nr_to_scan = max(nr_to_scan, ret);
> >               count_vm_events(SLABS_SCANNED, nr_to_scan);
> >               total_scan -= nr_to_scan;
> >               scanned += nr_to_scan;
> 
> Well...  kinda.  But what happens if the shrinker scanned more objects
> than requested but failed to free many of them?  Of if the shrinker
> scanned less than requested?
> 
> We really want to return nr_scanned from the shrinker invocation. 
> Could we add a field to shrink_control for this?

Yes, that will work better overall.
-Chris


More information about the Intel-gfx mailing list