Date: Tue, 18 Nov 2003 10:13:12 -0800 From: Ken Marx <kmarx@vicor.com> To: Don Lewis <truckman@FreeBSD.org> Cc: mckusick@beastie.mckusick.com Subject: Re: 4.8 ffs_dirpref problem Message-ID: <3FBA6138.3000500@vicor.com> In-Reply-To: <200311180347.hAI3lmeF089505@gw.catspoiler.org> References: <200311180347.hAI3lmeF089505@gw.catspoiler.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Don Lewis wrote: > On 17 Nov, Ken Marx wrote: > >> >>Don Lewis wrote: > > >>>Ok, I'll do the commit as soon as I can do some testing on my -STABLE >>>box. >>> >> >>Great. Please let us know when this happens. In fact, >>I kind of got lost which you were planning to commit. >>Can you point me to it, and I'll do one last overnight run. > > > I just committed version which sets minbfree to: > max(1, avgbfree - avgbfree / 4) > > You may want to continue to use the version that you are already running > which sets minbfree to avgbfree. I'm not committing my more complex > version because it benchmarked worse for me than the version I > committed. > > I'm pretty sure that we can do better than this, but it will require a > fair amount of tweaking and benchmarking, but for now this version > should work a lot better than the previous version of the code. > > >>>>I was able to run a couple more tests here, and *belive* that the >>>>fix to the hash table in vfs_bio.c will provide some relief >>>>for cg block searches when things do fall into the linear search case. >>> >>> >>>I'll see about cranking out patch to use a Fibonacci hash. It'll >>>probably be a little while before I can find sufficient time, though. >>> >> >>Ditto the above: thanks/keep us posted. Our clients are >>anxious to have a 'final' kernel to run with. I think we'll >>just give them what you commit, and sneak the hash fix in with >>the security patch or some such. So, no rush, but do let me >>know if you think it might happen sooner than, say, 2 weeks >>so I can try and get it all in one release to them. > > > I had some time to crank out a patch. Give this a try and compare it to > your hash patch. It hasn't blown up my system, but I don't have any > benchmark data on it. You can just do the test where you fill the > remaining space in the filesystem. You won't need to do a newfs and > start from scratch. It would be great if you could compare the hash > bucket sizes for the different versions of the hash. > > > Index: sys/kern/vfs_bio.c > =================================================================== > RCS file: /home/ncvs/src/sys/kern/vfs_bio.c,v > retrieving revision 1.242.2.21 > diff -u -r1.242.2.21 vfs_bio.c > --- sys/kern/vfs_bio.c 9 Aug 2003 16:21:19 -0000 1.242.2.21 > +++ sys/kern/vfs_bio.c 18 Nov 2003 02:10:55 -0000 > @@ -140,6 +140,7 @@ > &bufreusecnt, 0, ""); > > static int bufhashmask; > +static int bufhashshift; > static LIST_HEAD(bufhashhdr, buf) *bufhashtbl, invalhash; > struct bqueues bufqueues[BUFFER_QUEUES] = { { 0 } }; > char *buf_wmesg = BUF_WMESG; > @@ -160,7 +161,20 @@ > struct bufhashhdr * > bufhash(struct vnode *vnp, daddr_t bn) > { > - return(&bufhashtbl[(((uintptr_t)(vnp) >> 7) + (int)bn) & bufhashmask]); > + u_int64_t hashkey64; > + int hashkey; > + > + /* > + * Fibonacci hash, see Knuth's > + * _Art of Computer Programming, Volume 3 / Sorting and Searching_ > + * > + * We reduce the argument to 32 bits before doing the hash to > + * avoid the need for a slow 64x64 multiply on 32 bit platforms. > + */ > + hashkey64 = (u_int64_t)(uintptr_t)vnp + (u_int64_t)bn; > + hashkey = (((u_int32_t)(hashkey64 + (hashkey64 >> 32)) * 2654435769u) >> > + bufhashshift) & bufhashmask; > + return(&bufhashtbl[hashkey]); > } > > /* > @@ -319,8 +333,9 @@ > bufhashinit(caddr_t vaddr) > { > /* first, make a null hash table */ > + bufhashshift = 29; > for (bufhashmask = 8; bufhashmask < nbuf / 4; bufhashmask <<= 1) > - ; > + bufhashshift--; > bufhashtbl = (void *)vaddr; > vaddr = vaddr + sizeof(*bufhashtbl) * bufhashmask; > --bufhashmask; > > Most excellent. I'll try and get you some info by end of today. Thanks! k -- Ken Marx, kmarx@vicor-nb.com Clearly we must down size and set up weekly meetings on the object, etc. - http://www.bigshed.com/cgi-bin/speak.cgi
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3FBA6138.3000500>