nfsiod, biod - The local NFS compatible asynchronous I/O daemon
The nfsiod daemon runs on an NFS compatible client machine and spawns
several IO threads to service asynchronous I/O requests to its server. The
I/O threads improve performance of both NFS reads and writes. Both try to
enlist the aid of an idle I/O thread. If none is available, the process
itself issues the request to the server and waits for the reply.
The optimum number of I/O threads to run depends on many variables, such as
how quickly the client will be writing, how many files will be accessed
simultaneously, and the behaviour of the NFS server. For use with a Tru64
UNIX server, 7 is a good number of I/O threads for most systems.
When reading, if the client believes the process is reading a file sequen-
tially, it requests an I/O thread to read a block ahead of what the process
is currently requesting. If the readahead completes before the process
asks for that block, then the subsequent read system call for that data
completes immediately and does not have to wait for the NFS request to com-
plete. Read ahead will be triggered again so the read may find that next
block available as well.
When writing a file, the client takes the process's data, passes the
request to an I/O thread and immediately returns to the process. If the
process is writing data faster than the network or server can process, then
eventually all the I/O threads become busy and the process has to handle a
NFS write itself. This means the process has to wait until the server fin-
ishes the write. For Tru64 UNIX servers, the NFS block size is 8Kb and UFS
tries to cluster I/O 64Kbs at a time. If the client is running with 7 I/O
threads, 8 write requests can be in progress at once. This allows the
client and server to write data 64Kbs at a time and is the reason for
recommending 7 I/O threads.
Unlike nfsd, each client thread can use either UDP or TCP. However, if TCP
mounts are active, the nfsiod process will time out, close idle TCP connec-
tions, and acknowledge any connections closed by the server.
The nfsiod process is also responsible for syncing the access time and
modify times for special files and named pipes (fifos). Because I/O to
these files does not go through the NFS server, NFS clients have to
directly update the access time and modify time attributes.
The client threads are implemented as kernel threads; they are part of Pro-
cess ID 0, not the nfsiod process. The ps axml command displays idle I/O
threads under PID 0. Idle threads will be waiting on nfsiod_wait. There-
fore, if 7 I/O threads are configured, only 1 nfsiod process is displayed
in the output from the ps command, although 7 client threads are available
to handle NFS requests.
Specifies the command path
Specifies the file for logging NFS activity
Commands: nfsd(8), nfsstat(8)