Re: [PATCH v2 2/2] vmscan: shrink_slab() require number of lru_pages, not page order

From: KOSAKI Motohiro
Date: Thu Jul 15 2010 - 21:40:10 EST


> > nr_slab_pages0 = zone_page_state(zone, NR_SLAB_RECLAIMABLE);
> > if (nr_slab_pages0 > zone->min_slab_pages) {
> > + unsigned long lru_pages = zone_reclaimable_pages(zone);
> > +
> > /*
> > * shrink_slab() does not currently allow us to determine how
> > * many pages were freed in this zone. So we take the current
> > @@ -2622,7 +2624,7 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
> > * Note that shrink_slab will free memory on all zones and may
> > * take a long time.
> > */
> > - while (shrink_slab(sc.nr_scanned, gfp_mask, order) &&
> > + while (shrink_slab(sc.nr_scanned, gfp_mask, lru_pages) &&
> > (zone_page_state(zone, NR_SLAB_RECLAIMABLE) + nr_pages >
> > nr_slab_pages0))
> > ;
>
> Wouldn't it be better to recalculate zone_reclaimable_pages() each time
> around the loop? For example, shrink_icache_memory()->prune_icache()
> will remove pagecache from an inode if it hits the tail of the list.
> This can change the number of reclaimable pages by squigabytes, but
> this code thinks nothing changed?

Ah, I missed this. incrementa patch is here.

thank you!