shrink_slab() queries each slab cache to get the number of elements in it. In most cases such queries are cheap but, on some caches. For example, Android low-memory-killer, which is operates as a slab shrinker, does relatively long calculation once invoked and it is quite expensive. This patch removes redundant queries to shrinker function in the loop of shrink batch. Signed-off-by: Heesub Shin <heesub.shin@xxxxxxxxxxx> --- mm/vmscan.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index fa6a853..11b6695 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -282,9 +282,8 @@ unsigned long shrink_slab(struct shrink_control *shrink, max_pass, delta, total_scan); while (total_scan >= batch_size) { - int nr_before; + int nr_before = max_pass; - nr_before = do_shrinker_shrink(shrinker, shrink, 0); shrink_ret = do_shrinker_shrink(shrinker, shrink, batch_size); if (shrink_ret == -1) @@ -293,6 +292,7 @@ unsigned long shrink_slab(struct shrink_control *shrink, ret += nr_before - shrink_ret; count_vm_events(SLABS_SCANNED, batch_size); total_scan -= batch_size; + max_pass = shrink_ret; cond_resched(); } -- 1.8.3.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>