Subject: Re: too long name hash chain
To: None <tech-kern@netbsd.org>
From: Christos Zoulas <christos@zoulas.com>
List: tech-kern
Date: 02/12/2003 02:05:50
In article <200302112307.h1BN77F02985@parity-error.sm.sony.co.jp>,
enami tsugutomo <enami@sm.sony.co.jp> wrote:
>Hi.
>
>I sometimes sees long name hash chain like this:
>
>enami@prot-fault% more vmstat.out
> total used util num average maximum
>hash table buckets buckets % items chain chain
>nchash 131072 47243 36.04 72000 1.52 1071
>
>There is 2 scenario:
>
>1) cache_lookup() returns -1 if failed to lock vnode or find v_id
> mismatch after the cache hit. Then, vfs lookup routine may does
> normal processing and will enter new cache entry. Unless parent's
> v_id changes, it will go to the same bucket.
>
>2) At least nfs_lookup() routine decides the hit cache invalid by
> itself, and does normal processing and enter new cache entry. For
> the same reason above, new entry will go the same bucket.
>
>For 1), I think cache_lookup() should remove the entry if it returns
>-1.
Do you mean remove the entry if v_id is not found, and keep the entry
if the vnode cannot be locked?
>
>For 2), I can imagine two fix. one is to introduce new function to
>remove cache entry and call it where appropriate in addition to
>cache_purge(). The other is to lookup an existing entry in
>cache_enter() and reuse it if there is. I prefer the latter.
I think I prefer the latter too.
christos