On Sun, 8 Mar 2009, Yoshihiro Ota wrote:
> I thought rc used to start nfsiod if you set nfs_cilent_enable back years
> ago. Now, on my 7.1-RELEASE machine, it sets up a couple of sysctls in
> /etc/rc.d/nfsclient script but not nfsiod.
>
> Is nfsiod obsolete by now?
> It is still on the system; does it still improve nfs performance?
In the historic BSD kernel, kernel threads for services such as asynchronous
NFS write-behind worker (which is what nfsiod is) were created via user
processes that "donated" their thread context to the kernel by
blocking in a
syscall. In modern FreeBSD kernels, kernel threads can be created and
destroyed arbitrarily within the kernel as required, so the size of the worker
thread pool is controlled by sysctls -- by default there will be none unless
required for an NFS mount, and then a pool will be maintained based on use
with a limit. For example, on my box without NFS active, I see:
robert@fledge:/usr/src/sbin/nfsiod> sysctl vfs.nfs | grep iod
vfs.nfs.iodmax: 20
vfs.nfs.iodmin: 0
vfs.nfs.iodmaxidle: 120
We have a minimum of 0, a maximum of 20 workers, and idle workers are killed
off after a timeout of 120 seconds. When using an NFS client with
write-behind, you should see kernel threads named "nfsiod X" where X
is the
worker thread number. Take a look at src/sys/nfsclient/nfs_nfsiod.c for
details.
Robert N M Watson
Computer Laboratory
University of Cambridge