Allow the nominal NFS io block size to be set with a sysctl vfs.nfs.nfs_io_size
authorMatthew Dillon <dillon@dragonflybsd.org>
Wed, 10 Mar 2004 02:07:52 +0000 (02:07 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Wed, 10 Mar 2004 02:07:52 +0000 (02:07 +0000)
commiteefb74c1b12443f77faf92a92cc63774d6d15799
tree21cd9c896b9db674b53e29ddfdb31305916ef70d
parent66ba32090b0d511315f878f809ff78ab0b208bbe
Allow the nominal NFS io block size to be set with a sysctl vfs.nfs.nfs_io_size
and default it to the largest possible block size (32K), regardless of the
network transfer size settings.  nfs_iosize() is no longer based on the
network transfer size but is matched against the maximum data block size
for the protocol and transport (8K for NFSv2, 16K for NFSv3/UDP, 32K for
NFSv3/TCP).  Adjust statfs() reporting to suit.

This should improve performance over high bandwidth connections, primarily
by causing the client to use larger buffer cache buffers (16K or 32K instead
of 8K prior to this commit), and also improving read-ahead (which goes by
blocks).  In particular, while the largest network transfer size over UDP
is 16K, the largest transfer size of TCP is 32K, so TCP ought to reap the
largest reward w/ this commit.

Delay retrieval of mountpoint attributes until the mountpoint is actually
accessed or a df() occurs.

Submitted-by: Hiten Pandya <hmp@backplane.com>, and Matthew Dillon
sys/vfs/nfs/nfs_vfsops.c