Date: Sat, 17 Mar 2001 23:57:45 -0800 From: Peter Wemm <peter@netplex.com.au> To: Matt Dillon <dillon@earth.backplane.com>, Julian Elischer <julian@elischer.org>, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: Re: cvs commit: src/sys/nfs nfs_node.c Message-ID: <200103180757.f2I7vjh19781@mobile.wemm.org>
next in thread | raw e-mail | index | archive | help
Peter Wemm wrote: > Matt Dillon wrote: > > I'd like to see this in -stable after the freeze is over! > > We cannot wait at Yahoo. Other changes in the name caching have made > this a showstopper and has halted one of our key 2.2.x -> 4.x upgrade process es > as faster machines running 4.x cannot handle the load that 2.2.8 did. > We're running it already for testing to see if that is the only new problem > that that group of machines turns up.. Actually, this didn't quite come out the way I meant. At work, we do our own internal releases etc. There probably wouldn't be more than a handful of machines running an actual FreeBSD -RELEASE of some form. In it's simplest form, the following works just as well for fixing the lousy nfs client performance: Index: nfs_node.c =================================================================== RCS file: /home/ncvs/src/sys/nfs/nfs_node.c,v retrieving revision 1.36 diff -c -r1.36 nfs_node.c *** nfs_node.c 2000/01/05 05:11:36 1.36 --- nfs_node.c 2001/03/18 07:55:45 *************** *** 75,94 **** /* * Compute an entry in the NFS hash table structure */ ! u_long nfs_hash(fhp, fhsize) register nfsfh_t *fhp; int fhsize; { register u_char *fhpp; ! register u_long fhsum; register int i; fhpp = &fhp->fh_bytes[0]; ! fhsum = 0; ! for (i = 0; i < fhsize; i++) ! fhsum += *fhpp++; ! return (fhsum); } /* --- 75,98 ---- /* * Compute an entry in the NFS hash table structure */ ! #define FNV_32_PRIME ((u_int32_t) 0x01000193UL) ! #define FNV1_32_INIT ((u_int32_t) 33554467UL) ! u_int32_t nfs_hash(fhp, fhsize) register nfsfh_t *fhp; int fhsize; { register u_char *fhpp; ! register u_int32_t hval; register int i; fhpp = &fhp->fh_bytes[0]; ! hval = FNV1_32_INIT; ! for (i = 0; i < fhsize; i++) { ! hval *= FNV_32_PRIME; ! hval ^= (u_int32_t)*fhpp++; ! } ! return (hval); } /* > > -Matt > > > > :Peter Wemm wrote: > > :> > > :> peter 2001/03/16 21:43:01 PST > > :> > > :> Modified files: > > :> sys/nfs nfs_node.c > > :> Log: > > :> Dramatically improve the **lame** nfs_hash(). This is based on the > > :> Fowler / Noll / Vo Hash (http://www.isthe.com/chongo/tech/comp/fnv/). > > :> > > :> This improves hash coverage a *massive* amount. We were seeing one > > :> set of machines that were using 0.84% of their 131072 entry nfsnode > > :> hash buckets with maximum chain lengths of up to ~500 entries. The > > :> machine was spending nearly 100% of its time in 'system'. > > :> A test with this has pushed the coverage from a few perCent up to 91% > > :> utilization with a max chain length of 11. > > :> > > :> Submitted by: David Filo > > : > > :tell David that it's nice to see he's still keeping his hand in.. > > : > > :> > > :> Revision Changes Path > > :> 1.43 +17 -9 src/sys/nfs/nfs_node.c > > : > > :-- > > : __--_|\ Julian Elischer > > : / \ julian@elischer.org > > : ( OZ ) World tour 2000-2001 > > :---> X_.---._/ > > : v > > > > > > Cheers, > -Peter > -- > Peter Wemm - peter@FreeBSD.org; peter@yahoo-inc.com; peter@netplex.com.au > "All of this is for nothing if we don't go to the stars" - JMS/B5 > Cheers, -Peter -- Peter Wemm - peter@FreeBSD.org; peter@yahoo-inc.com; peter@netplex.com.au "All of this is for nothing if we don't go to the stars" - JMS/B5 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200103180757.f2I7vjh19781>