Monitor disk input/output
Author: Ivan Voras IvanVoras FreeBSD
A system's disk input/output can have a dramatic impact on performance(((performance))). Know how to use the utilities available on BSD systems to monitor disk I/O and interpret their results.
Monitoring disk I/O can be crucial for troubleshooting a machine. There are a few common symptoms that may indicate an overtasked disk I/O systems: slow or delayed starting of applications and shells, slow remote logins, or slowness in the specific main task the machine is doing (e.g. e-mail server, database server, etc.). Thus it's important to reliably monitor access rates and throughput.
There are several ways this can be done, but the most common one is
iostat(8). When started without arguments it will display one or more header lines listing devices and a single statistics line that represents the current I/O performance of those devices. This single snapshot is often not a reliable indicator of true I/O performance and it's more useful to specify the
-w N argument to
iostat which tells it to display statistics in a loop, every N seconds. On a big machine, there may be more devices than fit the screen so
iostat will by default display only 5 devices. The portable way to override this, usable on all BSD's is to specify device names on the command line, but FreeBSD has extended
-n N argument whichtells it to display at most N devices.
vmstat utility displays low-level information from the kernel. When started without arguments it will display a snapshot of statistics, but if called with
-w N argument it will loop and display a line of statistics every N seconds, similar to
iostat. The specific information
iostat displays differs among the systems but it usually includes the amount of free memory, number of page faults, memory paging activity (swap), and CPU stats.
vmstat is important as it's a quick way to find out if the system's high I/O rates are due to memory swapping.
systat utility is more complex than those already mentioned, as it's a full-screen utility that is usually used for long-term performance tracking (for example: started on a spare console in the system room that is overseen by administrators). It has several display modes, which differ among BSD systems, but the common ones are
pigs. The display mode is specified directly on the command line (but prefixed with a
- on FreeBSD).
iostatmode shows I/O statistics similar to the
vmstatmode shows kernel statistics similar to the
netstatmode shows network I/O statistics similar to the
mbufsmode shows network buffers statistics
swapmode shows swap usage
pigsmode shows processes with highest CPU usage
Different BSD systems have some useful additions to the list of display modes, for example FreeBSD has
ifstat mode for per-network-interface statistics, and NetBSD has a
ps mode that displays a list of processes. See specific man pages for more information.
nfsstat utility shows NFS statistics. When started without arguments it will display a screenfull of information about NFS, but if called with
-w N it will display a two line statics every N seconds (about client and server NFS usage).
gstat utility is specific to FreeBSD. It's a full-screen utility requiring root privileges that shows I/O statistics for all GEOM devices, including virtual devices. With
gstat, I/O can be monitored for individual disk partitions, virtual devices such as RAID geoms, memory drives and all other GEOM devices.
The following will continously monitor I/O statistics for first two SCSI drives on FreeBSD:
> iostat -w 1 da0 da1
To see an overview of NFS performance, use:
- Start a "fork bomb" program (usually one can be found in ports/packages/pkgsrc of the system) and monitor how the system behaves with each of above utilities.
iostat(8), gstat(8) on FreeBSD, systat(1), vmstat(1), nfsstat(1)