fs: prefetch inode data in dcache lookup
authorNick Piggin <npiggin@kernel.dk>
Fri, 7 Jan 2011 06:50:08 +0000 (17:50 +1100)
committerNick Piggin <npiggin@kernel.dk>
Fri, 7 Jan 2011 06:50:32 +0000 (17:50 +1100)
This makes single threaded git diff -1.25% +/- 0.05% elapsed time on my
2s12c24t Westmere system, and -0.86% +/- 0.05% on my 2s8c Barcelona, by
prefetching the important first cacheline of the inode in while we do the
actual name compare and other operations on the dentry.

There was no measurable slowdown in the single file stat case, or the creat
case (where negative dentries would be common).

Signed-off-by: Nick Piggin <npiggin@kernel.dk>
fs/dcache.c

index 9e6e6db76869b7770a8c8110698b40eae27a2d0d..2a4ce7dc23066169cbdbdcd7775aae12dcb8a9d9 100644 (file)
@@ -1793,6 +1793,9 @@ seqretry:
                tlen = dentry->d_name.len;
                tname = dentry->d_name.name;
                i = dentry->d_inode;
+               prefetch(tname);
+               if (i)
+                       prefetch(i);
                /*
                 * This seqcount check is required to ensure name and
                 * len are loaded atomically, so as not to walk off the