diff options
author | Jakob Unterwurzacher | 2017-05-22 22:26:59 +0200 |
---|---|---|
committer | Jakob Unterwurzacher | 2017-05-22 22:36:54 +0200 |
commit | 245b84c887955d12cd1113e9a6701ee7338c8255 (patch) | |
tree | d810d14f63800a81c7fa073e91f71c34bdfb963e /internal/fusefrontend/args.go | |
parent | 5672e41f5a1ac0fb6c46e99c6bdeae0946a448c7 (diff) |
nametransform: diriv cache: fall back to the grandparent
When a user calls into a deep directory hierarchy, we often
get a sequence like this from the kernel:
LOOKUP a
LOOKUP a/b
LOOKUP a/b/c
LOOKUP a/b/c/d
The diriv cache was not effective for this pattern, because it
was designed for this:
LOOKUP a/a
LOOKUP a/b
LOOKUP a/c
LOOKUP a/d
By also using the cached entry of the grandparent we can avoid lots
of diriv reads.
This benchmark is against a large encrypted directory hosted on NFS:
Before:
$ time ls -R nfs-backed-mount > /dev/null
real 1m35.976s
user 0m0.248s
sys 0m0.281s
After:
$ time ls -R nfs-backed-mount > /dev/null
real 1m3.670s
user 0m0.217s
sys 0m0.403s
Diffstat (limited to 'internal/fusefrontend/args.go')
0 files changed, 0 insertions, 0 deletions