Where is nfsiod now?

Robert Watson rwatson at FreeBSD.org
Sun Mar 8 05:18:55 PDT 2009


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 at 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


More information about the freebsd-stable mailing list