Date: Fri, 1 Dec 2006 20:54:18 -0800 (PST) From: Matthew Dillon <dillon@apollo.backplane.com> To: Bruce Evans <bde@zeta.org.au> Cc: Robert Watson <rwatson@freebsd.org>, Ivan Voras <ivoras@fer.hr>, freebsd-arch@freebsd.org Subject: Re: What is the PREEMPTION option good for? Message-ID: <200612020454.kB24sIpq071255@apollo.backplane.com> References: <20061119041421.I16763@delplex.bde.org> <ejnvfo$tv2$1@sea.gmane.org> <ek4gc8$492$1@sea.gmane.org> <20061126174041.V83346@fledge.watson.org> <ekckpt$4h6$1@sea.gmane.org> <20061128142218.P44465@fledge.watson.org> <45701A49.5020809@fer.hr> <20061202094431.O16375@delplex.bde.org>
next in thread | previous in thread | raw e-mail | index | archive | help
:...
:the client.  The difference is entirely due to dead time somewhere in
:nfs.  Unfortunately, turning on PREEMPTION and IPI_PREEMPTION didn't
:recover all the lost performance.  This is despite the ~current kernel
:having slightly lower latency for flood pings and similar optimizations
:for nfs that reduce the RPC count by a factor of 4 and the ping latency
:by a factor of 2.
    The single biggest NFS client performance issue I have encountered
    in an environment where most of the data can be cached from earlier
    runs is with negative name lookups.  Due the large number of -I
    options used in builds, the include search path is fairly long and
    this usually results in a large number of negative lookups, all of
    which introduce synchronous dead times while the stat() or open() 
    waits for the over-the-wire transaction to complete.
    The #1 solution is to cache negative namecache hits for NFS clients.
    You don't have to cache them for long... just 3 seconds is usually
    enough to remove most of the dead time.  Also make sure your access
    cache timeout is something reasonable.
    It is possible to reduce the number of over-the-wire transactions to
    zero but it requires seriously nerfing the access and negative cache
    timeouts.  It isn't usually worth doing.
    Here are some test results:
    make buildkernel, /usr/src mounted via NFS, 10 second access cache
    timeout, multiple runs to pre-cache data and tcpdump used to verify
    that only access RPCs were being sent over the wire for all tests.
    (on DragonFly):
	No negative cache	    - 440 seconds real
	 3 second neg cache timeout - 411 seconds real
	10 second neg cache timeout - 410 seconds real (6% improvement)
	30 second neg cache timeout - 409 seconds real
					-Matt
					Matthew Dillon 
					<dillon@backplane.com>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200612020454.kB24sIpq071255>
