Commit 8ab47664 authored by Dave Chinner's avatar Dave Chinner Committed by Al Viro

vfs: increase shrinker batch size

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: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 0e1fdafd
...@@ -317,6 +317,12 @@ or bottom half). ...@@ -317,6 +317,12 @@ or bottom half).
the VM is trying to reclaim under GFP_NOFS conditions, hence this the VM is trying to reclaim under GFP_NOFS conditions, hence this
method does not need to handle that situation itself. 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 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 is a pointer to a "struct inode_operations" which describes the methods that
can be performed on individual inodes. can be performed on individual inodes.
......
...@@ -182,6 +182,7 @@ static struct super_block *alloc_super(struct file_system_type *type) ...@@ -182,6 +182,7 @@ static struct super_block *alloc_super(struct file_system_type *type)
s->s_shrink.seeks = DEFAULT_SEEKS; s->s_shrink.seeks = DEFAULT_SEEKS;
s->s_shrink.shrink = prune_super; s->s_shrink.shrink = prune_super;
s->s_shrink.batch = 1024;
} }
out: out:
return s; return s;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment