Re: [PATCH 00/11] fs/dcache: Limit # of negative dentries
From: Ian Kent <raven@themaw.net>
Date: 2020-02-28 04:16:56
Also in:
linux-fsdevel, lkml
On Thu, 2020-02-27 at 19:34 -0800, Matthew Wilcox wrote:
On Thu, Feb 27, 2020 at 05:55:43PM +0800, Ian Kent wrote:quoted
Not all file systems even produce negative hashed dentries. The most beneficial use of them is to improve performance of rapid fire lookups for non-existent names. Longer lived negative hashed dentries don't give much benefit at all unless they suddenly have lots of hits and that would cost a single allocation on the first lookup if the dentry ttl expired and the dentry discarded. A ttl (say jiffies) set at appropriate times could be a better choice all round, no sysctl values at all.The canonical argument in favour of negative dentries is to improve application startup time as every application searches the library path for the same libraries. Only they don't do that any more: $ strace -e file cat /dev/null execve("/bin/cat", ["cat", "/dev/null"], 0x7ffd5f7ddda8 /* 44 vars */) = 0 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 openat(AT_FDCWD, "/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3 openat(AT_FDCWD, "/dev/null", O_RDONLY) = 3 So, are they still useful? Or should we, say, keep at most 100 around?
Who knows how old apps will be on distros., ;) But I don't think it matters. The VFS will (should) work fine without a minimum negative hashed dentry count (and hashed since unhashed negative dentries are summarily executed on final dput()) and a ttl should keep frequently used ones around long enough to satisfy this sort of thing should it be needed. Even the ttl value should be resilient to a large range of values, just not so much very small ones. Ian