NFS client/buffer cache deadlock

Brian Fundakowski Feldman green at freebsd.org
Wed Apr 20 08:22:27 PDT 2005


On Wed, Apr 20, 2005 at 04:38:42PM +0200, Marc Olzheim wrote:
> On Wed, Apr 20, 2005 at 10:24:48AM -0400, Brian Fundakowski Feldman wrote:
> > > It does and it seems to work.  The NFS performance drops considerably
> > > though, from 8/9 MByte/s to 3/4 on sequential reads for instance.
> > > 
> > > kern/79208 is fixed by this indeed, in that I get short writes (in case
> > > of my test server at 1802240+ bytes, so './writev 2 foo' fails...
> > 
> > Performance drops in what cases?
> 
> Hmm, seems only to happen in large sequential reads... It might just be
> the FreeBSD 4.6 NFS server that is the problem though. I've had more NFS
> troubles with it.

Reads should be totally unaffected...

> Btw.: I'm not sure write(),writev() and pwrite() are allowed to do short
> writes on regular files... ?

Our manpage is incorrect; POSIX states that they are (see earlier
e-mail).  There really is no alternative -- we simply can't build
an NFS transaction larger than our buffer cache can accomodate.
Note that short wries won't happen for normal buffer sizes, only
excessively large ones.  I really don't believe that writev() is meant
to be used so that you can write gigantic data structures in a single
transaction...

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green at FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\


More information about the freebsd-current mailing list