Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 Oct 2013 16:29:56 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        Davide Italiano <davide@freebsd.org>
Cc:        Kirk McKusick <mckusick@freebsd.org>, alc@freebsd.org, freebsd-hackers <freebsd-hackers@freebsd.org>, freebsd-fs@freebsd.org, Ivan Voras <ivoras@freebsd.org>, pho@freebsd.org
Subject:   Re: Call fo comments - raising vfs.ufs.dirhash_reclaimage?
Message-ID:  <201310101629.56289.jhb@freebsd.org>
In-Reply-To: <CACYV=-GZPbC03stS6PsihfJ688kbjna2-n0%2BPdctr3L9hvSvag@mail.gmail.com>
References:  <kvkvi7$iv7$1@ger.gmane.org> <201309031507.33098.jhb@freebsd.org> <CACYV=-GZPbC03stS6PsihfJ688kbjna2-n0%2BPdctr3L9hvSvag@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Monday, October 07, 2013 1:34:24 pm Davide Italiano wrote:
> > What would perhaps be better than a hardcoded reclaim age would be to use
> > an LRU-type approach and perhaps set a target percent to reclaim.  That 
is,
> > suppose you were to reclaim the oldest 10% of hashes on each lowmem call
> > (and make the '10%' the tunable value).  Then you will always make some 
amount
> > of progress in a low memory situation (and if the situation remains dire 
you
> > will eventually empty the entire cache), but the effective maximum age 
will
> > be more dynamic.  Right now if you haven't touched UFS in 5 seconds it
> > throws the entire thing out on the first lowmem event.  The LRU-approach 
would
> > only throw the oldest 10% out on the first call, but eventually throw it 
all out
> > if the situation remains dire.
> >
> > --
> > John Baldwin
> > _______________________________________________
> > freebsd-fs@freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> > To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org"
> 
> I liked your idea more than what's available in HEAD right now and I
> implemented it.
> http://people.freebsd.org/~davide/review/ufs_direclaimage.diff
> I was unsure what kind of heuristic I should choose to select which
> (10% of) entries should be evicted so I just removed the first 10%
> ones from the head of the ufs_dirhash list (which should be the
> oldest).
> The code keeps rescanning the cache until 10% (or, the percentage set
> via SYSCTL) of the entry are freed, but probably we can discuss if
> this limit could be relaxed and just do a single scan over the list.
> Unfortunately I haven't a testcase to prove the effectiveness (or
> non-effectiveness) of the approach but I think either Ivan or Peter
> could be able to give it a spin, maybe.

I think this looks good.  One cosmetic nit is that I think this:

	if (!try_lock())
		continue;
	else
		memfreed += ufsdirhash_destroy();

Looks a bit odd.  I would either drop the else (which the old code did in its 
failsafe case) or just do this:

	if (try_lock())
		memfreed += ufsdirhash_destroy();

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201310101629.56289.jhb>