vfs: increase shrinker batch size
Dave Chinner [Fri, 8 Jul 2011 04:14:45 +0000 (14:14 +1000)]
Now that the per-sb shrinker is responsible for shrinking 2 or more
caches, increase the batch size to keep econmies of scale for
shrinking each cache.  Increase the shrinker batch size to 1024
objects.

To allow for a large increase in batch size, add a conditional
reschedule to prune_icache_sb() so that we don't hold the LRU spin
lock for too long. This mirrors the behaviour of the
__shrink_dcache_sb(), and allows us to increase the batch size
without needing to worry about problems caused by long lock hold
times.

To ensure that filesystems using the per-sb shrinker callouts don't
cause problems, document that the object freeing method must
reschedule appropriately inside loops.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Documentation/filesystems/vfs.txt
fs/super.c

index fd24f34..6bf85b7 100644 (file)
@@ -317,6 +317,12 @@ or bottom half).
        the VM is trying to reclaim under GFP_NOFS conditions, hence this
        method does not need to handle that situation itself.
 
+       Implementations must include conditional reschedule calls inside any
+       scanning loop that is done. This allows the VFS to determine
+       appropriate scan batch sizes without having to worry about whether
+       implementations will cause holdoff problems due to large scan batch
+       sizes.
+
 Whoever sets up the inode is responsible for filling in the "i_op" field. This
 is a pointer to a "struct inode_operations" which describes the methods that
 can be performed on individual inodes.
index 5101f05..7943f04 100644 (file)
@@ -182,6 +182,7 @@ static struct super_block *alloc_super(struct file_system_type *type)
 
                s->s_shrink.seeks = DEFAULT_SEEKS;
                s->s_shrink.shrink = prune_super;
+               s->s_shrink.batch = 1024;
        }
 out:
        return s;