Re: negative dentries wasting ram

Andrea Arcangeli
2002-05-24T15:57:34Z

On Fri, May 24, 2002 at 07:43:32AM -0700, Linus Torvalds wrote:
>
>
> On Fri, 24 May 2002, Andrea Arcangeli wrote:
> >
> > Negative dentries should be only temporary entities, for example between
> > the allocation of the dentry and the create of the inode, they shouldn't
> > be left around waiting the vm to collect them.
>
> Wrong. Negative dentries are very useful for caching negative lookups:
> look at the average startup sequence of any program linked with glibc, and

yep I know it is a flood of enoent.

> depending on your setup you will notice how it tries to open a _lot_ of a
> files that do not exist (the "depending on your setup" comes from the fact
> that it depends on things like how quickly it finds your "locale" setup
> from its locale path - you may have one of the setups that puts it in the
> first location glibc searches etc).
>
> If you don't cache those negative lookups, you will do a low-level
> filesystem lookup for each of those failures, which is _expensive_.

I see now the point, so they cache the information that there's no entry :).

> However, you're right that it probably doesn't help to do this after
> "unlink()" - it's probably only worth doing when actually doing a

Agreed, they should be dropped after unlink, and also if creat fails, so
I think my patch fits perfectly into the vfs caching scheme, the
negative dentries still will be generated for the costantly failed
lookups, but not on after unlink and creat-failures.

> "lookup()" that fails.
>
> Linus
>

Andrea