On Wed, Apr 10, 2013 at 02:21:42PM +0900, Joonsoo Kim wrote: > > > > @@ -2673,9 +2674,15 @@ static bool kswapd_shrink_zone(struct zone *zone, > > > > sc->nr_to_reclaim = max(SWAP_CLUSTER_MAX, > > > > high_wmark_pages(zone)); > > > > shrink_zone(zone, sc); > > > > > > > > - reclaim_state->reclaimed_slab = 0; > > > > - nr_slab = shrink_slab(&shrink, sc->nr_scanned, lru_pages); > > > > - sc->nr_reclaimed += reclaim_state->reclaimed_slab; > > > > + /* > > > > + * Slabs are shrunk for each zone once per priority or if the > > > > zone > > > > + * being balanced is otherwise unreclaimable > > > > + */ > > > > + if (shrinking_slab || !zone_reclaimable(zone)) { > > > > + reclaim_state->reclaimed_slab = 0; > > > > + nr_slab = shrink_slab(&shrink, sc->nr_scanned, > > > > lru_pages); > > > > + sc->nr_reclaimed += reclaim_state->reclaimed_slab; > > > > + } > > > > > > > > if (nr_slab == 0 && !zone_reclaimable(zone)) > > > > zone->all_unreclaimable = 1; > > > > > > Why shrink_slab() is called here? > > > > Preserves existing behaviour. > > Yes, but, with this patch, existing behaviour is changed, that is, we call > shrink_slab() once per priority. For now, there is no reason this function > is called here. How about separating it and executing it outside of > zone loop? >
We are calling it fewer times but it's still receiving the same information from sc->nr_scanned it received before. With the change you are suggesting it would be necessary to accumulating sc->nr_scanned for each zone shrunk and then pass the sum to shrink_slab() once per priority. While this is not necessarily wrong, there is little or no motivation to alter the shrinkers in this manner in this series. -- Mel Gorman SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/