svn commit: r190837 - in stable/7/sys: . contrib/pf dev/ath/ath_hal dev/cxgb kern

Robert Watson rwatson at FreeBSD.org
Wed Apr 8 07:02:53 PDT 2009


On Wed, 8 Apr 2009, Stephen McKay wrote:

> Author: mckay
> Date: Wed Apr  8 04:30:16 2009
> New Revision: 190837
> URL: http://svn.freebsd.org/changeset/base/190837
>
> Log:
>  MFC r187460: Add a limit on namecache entries.

Obviously, having a limit is a good idea, but I wonder if we should use some 
more mature scheme to limit entries.  At the very least, using UMA zone limits 
may help memory being dedicated to cache entries without being able to 
actually use it (i.e., extra entries in the UMA cache above the desiredvnodes 
limit).

Similarly, the cost of different cache entries is different -- long entries 
cost much, much more than short ones, because we use two bucket sizes. 
Perhaps this means that we should separately count long and short entries, and 
short ones should contribute less towards the limit than long ones?

Finally, I think it would be a good idea to do a bit of real-world profiling 
on memory efficiency of the name cache: how much memory is wasted when 
assumptions about short/long are wrong, and could we retune lengths, limits, 
hash bucket counts, etc, to work better in practice?

Robert N M Watson
Computer Laboratory
University of Cambridge

>
>  Approved by: re (kib)
>
> Modified:
>  stable/7/sys/   (props changed)
>  stable/7/sys/contrib/pf/   (props changed)
>  stable/7/sys/dev/ath/ath_hal/   (props changed)
>  stable/7/sys/dev/cxgb/   (props changed)
>  stable/7/sys/kern/vfs_cache.c
>
> Modified: stable/7/sys/kern/vfs_cache.c
> ==============================================================================
> --- stable/7/sys/kern/vfs_cache.c	Wed Apr  8 03:53:20 2009	(r190836)
> +++ stable/7/sys/kern/vfs_cache.c	Wed Apr  8 04:30:16 2009	(r190837)
> @@ -495,6 +495,12 @@ cache_enter(dvp, vp, cnp)
> 	if (!doingcache)
> 		return;
>
> +	/*
> +	 * Avoid blowout in namecache entries.
> +	 */
> +	if (numcache >= desiredvnodes * 2)
> +		return;
> +
> 	if (cnp->cn_nameptr[0] == '.') {
> 		if (cnp->cn_namelen == 1) {
> 			return;
>


More information about the svn-src-all mailing list