]> granicus.if.org Git - zfs/commitdiff
Ignore slab cache age and delay in direct reclaim
authorPrakash Surya <surya1@llnl.gov>
Fri, 27 Apr 2012 19:43:49 +0000 (12:43 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 7 May 2012 18:50:04 +0000 (11:50 -0700)
When memory pressure triggers direct memory reclaim, a slabs age
and delay should not prevent it from being freed. This patch ensures
these values are ignored, allowing an empty slab to be freed in this
code path no matter the value of its age and delay.

This prevents needless scanning of the partial slabs and has been
observed to significantly reduce the total cpu usage.  In addition,
it should allow for snappier reclaim under memory pressure.

Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #102

module/spl/spl-kmem.c

index eadf1cb179a442156b99b6a28e997050c01a4c2b..361030b18131971fa064e1e9dffc203bae930b49 100644 (file)
@@ -1916,7 +1916,8 @@ spl_kmem_cache_reap_now(spl_kmem_cache_t *skc, int count)
        if (skc->skc_reclaim)
                skc->skc_reclaim(skc->skc_private);
 
-       spl_slab_reclaim(skc, count, 0);
+       /* Reclaim from the cache, ignoring it's age and delay. */
+       spl_slab_reclaim(skc, count, 1);
        clear_bit(KMC_BIT_REAPING, &skc->skc_flags);
        atomic_dec(&skc->skc_ref);