On Tue, Jul 13, 2010 at 1:48 PM, KOSAKI Motohiro <kosaki.motohiro@xxxxxxxxxxxxxx> wrote: > Hi > >> >> old shrink_slab >> >> shrinker->nr += delta; /* Add delta to previous shrinker's remained count */ >> total_scan = shrinker->nr; >> >> while(total_scan >= SHRINK_BATCH) { >> nr_before = shrink(xxx); >> total_scan =- this_scan; >> } >> >> shrinker->nr += total_scan; >> >> The total_scan can always be the number < SHRINK_BATCH. >> So, when next shrinker calcuates loop count, the number can affect. > > Correct. > > >> >> new shrink_slab >> >> shrinker->nr += delta; /* nr is always zero by your patch */ > > no. > my patch don't change delta calculation at all. > > >> total_scan = shrinker->nr; >> >> while(total_scan >= SHRINK_BATCH) { >> nr_before = shrink(xxx); >> if (nr_before == 0) { >> total_scan = 0; >> break; >> } >> } >> >> shrinker->nr += 0; >> >> But after your patch, total_scan is always zero. It never affect >> next shrinker's loop count. > > No. after my patch this loop has two exiting way > 1) total_scan are less than SHRINK_BATCH. > -> no behavior change. we still pass shrinker->nr += total_scan code. > 2) (*shrinker->shrink)(0, gfp_mask) return 0 > don't increase shrinker->nr. because two reason, > a) if total_scan are 10000, we shouldn't carry over such big number. > b) now, we have zero slab objects, then we have been freed form the guilty of keeping > balance page and slab reclaim. shrinker->nr += 0; have zero side effect. Totally, I agree with you. Thanks for good explanation, Kosaki. Reviewed-by: Minchan kim <minchan.kim@xxxxxxxxx> -- Kind regards, Minchan Kim -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href