Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Jan 2014 16:28:26 -0800
From:      John-Mark Gurney <jmg@funkthat.com>
To:        Rick Macklem <rmacklem@uoguelph.ca>
Cc:        freebsd-net@freebsd.org, Adam McDougall <mcdouga9@egr.msu.edu>
Subject:   Re: Terrible NFS performance under 9.2-RELEASE?
Message-ID:  <20140128002826.GU13704@funkthat.com>
In-Reply-To: <222089865.17245782.1390866430479.JavaMail.root@uoguelph.ca>
References:  <20140127032338.GP13704@funkthat.com> <222089865.17245782.1390866430479.JavaMail.root@uoguelph.ca>

next in thread | previous in thread | raw e-mail | index | archive | help
Rick Macklem wrote this message on Mon, Jan 27, 2014 at 18:47 -0500:
> John-Mark Gurney wrote:
> > Rick Macklem wrote this message on Sun, Jan 26, 2014 at 21:16 -0500:
> > > Btw, thanks go to Garrett Wollman for suggesting the change to
> > > MJUMPAGESIZE
> > > clusters.
> > > 
> > > rick
> > > ps: If the attachment doesn't make it through and you want the
> > > patch, just
> > >     email me and I'll send you a copy.
> > 
> > The patch looks good, but we probably shouldn't change _readlink..
> > The chances of a link being >2k are pretty slim, and the chances of
> > the link being >32k are even smaller...
> > 
> Yea, I already thought of that, actually. However, see below w.r.t.
> NFSv4.
> 
> However, at this point I
> mostly want to find out if it the long mbuf chain that causes problems
> for TSO enabled network interfaces.

I agree, though a long mbuf chain is more of a driver issue than an
NFS issue...

> > In fact, we might want to switch _readlink to MGET (could be
> > conditional
> > upon cnt) so that if it fits in an mbuf we don't allocate a cluster
> > for
> > it...
> > 
> For NFSv4, what was an RPC for NFSv3 becomes one of several Ops. in
> a compound RPC. As such, there is no way to know how much additional
> RPC message there will be. So, although the readlink reply won't use
> much of the 4K allocation, replies for subsequent Ops. in the compound
> certainly could. (Is it more efficient to allocate 4K now and use
> part of it for subsequent message reply stuff or allocate additional
> mbuf clusters later for subsequent stuff, as required? On a small
> memory constrained machine, I suspect the latter is correct, but for
> the kind of hardware that has TSO scatter/gather enabled network
> interfaces, I'm not so sure. At this point, I wouldn't even say
> that using 4K clusters is going to be a win and my hunch is that
> any win wouldn't apply to small memory constrained machines.)

Though the code that was patched wasn't using any partial buffers,
it was always allocating a new buffer...  If the code in
_read/_readlinks starts using a previous mbuf chain, then obviously
things are different and I'd agree, always allocating a 2k/4k
cluster makes sense...

> My test server has 256Mbytes of ram and it certainly doesn't show
> any improvement (big surprise;-), but it also doesn't show any
> degradation for the limited testing I've done.

I'm not too surprised, unless you're on a heavy server pushing
>200MB/sec, the allocation cost is probably cheap enough that it
doesn't show up...  going to 4k means immediately half as many mbufs
are needed/allocated, and as they are page sized, don't have the
problems of physical memory fragmentation, nor do they have to do an
IPI/tlb shoot down in the case of multipage allocations...  (I'm
dealing w/ this for geli.)

> Again, my main interest at this point is whether reducing the
> number of mbufs in the chain fixes the TSO issues. I think
> the question of whether or not 4K clusters are performance
> improvement in general, is an interesting one that comes later.

Another thing I noticed is that we are getting an mbuf and then
allocating a cluster... Is there a reason we aren't using something
like m_getm or m_getcl?  We have a special uma zone that has
mbuf and mbuf cluster already paired meaning we save some lock
operations for each segment allocated...

-- 
  John-Mark Gurney				Voice: +1 415 225 5579

     "All that I will do, has been done, All that I have, has not."



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