Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 19 Sep 2003 15:35:40 -0700 (PDT)
From:      Richard Sharpe <rsharpe@richardsharpe.com>
To:        John-Mark Gurney <gurney_j@efn.org>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: Throughput problems with NFS between Linux and FreeBSD
Message-ID:  <Pine.LNX.4.44.0309191533240.6544-100000@durable>
In-Reply-To: <20030919182640.GJ75714@funkthat.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, 19 Sep 2003, John-Mark Gurney wrote:

> Richard Sharpe wrote this message on Fri, Sep 19, 2003 at 10:38 -0700:
> > We recently encountered a problem with NFS throughput between a FreeBSD 
> > server (we are using 4.6.2, but the same code seems to be in 5.1 as well).
> > 
> > When using Linux 2.4.19 or 2.4.21 as a client, although this might extend 
> > to other clients, and copying a large file, you will see the behavior 
> > shown in 
> 
> [...]
> 
> > The problem seems to be the following code
> > 
> >         if (so->so_type == SOCK_STREAM)
> >                 siz = NFS_MAXPACKET + sizeof (u_long);
> >         else
> >                 siz = NFS_MAXPACKET;
> >         error = soreserve(so, siz, siz);
> > 
> > in src/sys/nfs/nfs_syscalls.c.
> > 
> > We added a sysctl to allow finer control over what is passed to soreserve.
> > 
> > With the fix in, it goes up to around wire speed when lots of data is in 
> > the cache.
> 
> What is the fix?  You don't say what adjustments to soreserve's parameters
> are necessary to improve performance?  Have you done testing against other
> clients to see how your changes will affect performance on those machines?

The beest fix is:

         if (so->so_type == SOCK_STREAM)
-                siz = NFS_MAXPACKET + sizeof (u_long);
+                siz = NFS_MAXPACKET + sizeof (u_long) + MSS;
         else
                 siz = NFS_MAXPACKET;
         error = soreserve(so, siz, siz);

in src/sys/nfs/nfs_syscalls.c.

Since the client should only hang onto the ack for one segment, and that 
will work even if you have end-to-end jumbo frames. A simpler fix might be 
to replace MSS with 2048.

Regards
-----
Richard Sharpe, rsharpe[at]ns.aus.com, rsharpe[at]samba.org, 
sharpe[at]ethereal.com, http://www.richardsharpe.com



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.LNX.4.44.0309191533240.6544-100000>