NFS - Implement async write BIO, greatly increase sockbuf limits, better rexmit
authorMatthew Dillon <dillon@apollo.backplane.com>
Sat, 18 Jul 2009 22:03:49 +0000 (15:03 -0700)
committerMatthew Dillon <dillon@apollo.backplane.com>
Sat, 18 Jul 2009 22:03:49 +0000 (15:03 -0700)
commitcc7d050efbecc414ade969ceb3dacdfe64210a79
treecd35365019aaa2f31ade603af183bd4026bce65b
parented12ce957ad6b7f60ea3cf88e0fe68ef63954a50
NFS - Implement async write BIO, greatly increase sockbuf limits, better rexmit

* Write BIOs are now executed asynchronously.

* Commit BIOs are now executed asynchronously.

* Increase the sockbuf limit to around 2MBytes, which is what is needed
  to handle the burst writing a DragonFly client can do now when the
  kernel flushes its buffers (at least for a UDP socket).

* Adjust the rexmit code.  Also detect duplicate packets received and
  adjust the SRTT up a little since no RTT is calculated when a timeout
  occurs.

* NEW SYSCTLS:

  vfs.nfs.soreserve - This parameter now overrides all other kernel and
  user parameters to set the NFS sockets limit.

  vfs.nfs.maxasyncbio - This is set to the hard-coded maximum by default
  and may be reduced to accomodate insufficiently
  endowed remote servers.

* NOTE ON UDP MOUNTS TO REMOTE SERVERS.  If the remote server does not have
  sufficient sockbuf space to receive a large burst of UDP packets performance
  will suffer greatly.  To allieviate this issue you can decrease
  vfs.nfs.maxasyncbio on the DragonFly client, or you can simply use a
  TCP mount.
sys/vfs/nfs/nfs.h
sys/vfs/nfs/nfs_bio.c
sys/vfs/nfs/nfs_iod.c
sys/vfs/nfs/nfs_socket.c
sys/vfs/nfs/nfs_syscalls.c
sys/vfs/nfs/nfs_vnops.c
sys/vfs/nfs/nfsm_subs.c
sys/vfs/nfs/nfsm_subs.h
sys/vfs/nfs/nfsmount.h