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.s...@samsung.com> --- 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 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/