vfs: optimize inode cache access patterns
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 7 Aug 2011 05:45:50 +0000 (22:45 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 7 Aug 2011 05:53:23 +0000 (22:53 -0700)
commit3ddcd0569cd68f00f3beae9a7959b72918bb91f4
tree3f7c591316560b1c22e2cc0700fbcd29aa3fbd7f
parent830c0f0edca67403d361fe976a25b17356c11f19
vfs: optimize inode cache access patterns

The inode structure layout is largely random, and some of the vfs paths
really do care.  The path lookup in particular is already quite D$
intensive, and profiles show that accessing the 'inode->i_op->xyz'
fields is quite costly.

We already optimized the dcache to not unnecessarily load the d_op
structure for members that are often NULL using the DCACHE_OP_xyz bits
in dentry->d_flags, and this does something very similar for the inode
ops that are used during pathname lookup.

It also re-orders the fields so that the fields accessed by 'stat' are
together at the beginning of the inode structure, and roughly in the
order accessed.

The effect of this seems to be in the 1-2% range for an empty kernel
"make -j" run (which is fairly kernel-intensive, mostly in filename
lookup), so it's visible.  The numbers are fairly noisy, though, and
likely depend a lot on exact microarchitecture.  So there's more tuning
to be done.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/inode.c
fs/namei.c
fs/stat.c
include/linux/fs.h