Skip to content

Commit

Permalink
fs/buffer.c: increase the buffer-head per-CPU LRU size
Browse files Browse the repository at this point in the history
Increase the buffer-head per-CPU LRU size to allow efficient filesystem
operations that access many blocks for each transaction.  For example,
creating a file in a large ext4 directory with quota enabled will access
multiple buffer heads and will overflow the LRU at the default 8-block LRU
size:

* parent directory inode table block (ctime, nlinks for subdirs)
* new inode bitmap
* inode table block
* 2 quota blocks
* directory leaf block (not reused, but pollutes one cache entry)
* 2 levels htree blocks (only one is reused, other pollutes cache)
* 2 levels indirect/index blocks (only one is reused)

The buffer-head per-CPU LRU size is raised to 16, as it shows in metadata
performance benchmarks up to 10% gain for create, 4% for lookup and 7% for
destroy.

Signed-off-by: Liang Zhen <[email protected]>
Signed-off-by: Andreas Dilger <[email protected]>
Signed-off-by: Sebastien Buisson <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
sebastienbuisson authored and torvalds committed Oct 10, 2014
1 parent 2c0346a commit 86cf78d
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion fs/buffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -1253,7 +1253,7 @@ static struct buffer_head *__bread_slow(struct buffer_head *bh)
* a local interrupt disable for that.
*/

#define BH_LRU_SIZE 8
#define BH_LRU_SIZE 16

struct bh_lru {
struct buffer_head *bhs[BH_LRU_SIZE];
Expand Down

0 comments on commit 86cf78d

Please sign in to comment.