iostats – file system to measure I/O


iostats [ -d ] [ -C ] [ -f dbfile ] cmd [ args... ]


Iostats is a user-level 9p filter that interposes itself between a program and the regular file server, which allows it to gather statistics of file system use at the level of the Plan 9 file system protocol, 9P. After a program exits a report is printed on standard error.

The report consists of three sections. The first section reports the amount of user data in read and write messages sent by the program and the average rate at which the data was transferred. The protocol line reports the amount of data sent as message headers, that is, protocol overhead. The rpc line reports the total number of file system transactions.

The second section gives the number of messages, the fastest, slowest, and average turn around time and the amount of data involved with each 9P message type. The final section gives an I/O summary for each file used by the program in terms of opens, reads and writes.

If the -d flag is present, a debugging log including all traffic is written to dbfile (default iostats.out).

The -C flag sets the MCACHE flag on the mount which allows the kernel to cache (see bind(1)).


Display summary of file I/O incurred by ls(1):


iostats ls

Start a new shell, displaying all 9P traffic caused by the shell or its children:


iostats -df /fd/1 rc




dup(3), exportfs(4)


Poor clock resolution means that large amounts of I/O must be done to get accurate rate figures.

Can be fooled by programs that do fresh mounts outside its purview, or by the use of names of files with content that can vary by process (e.g., #d, /dev/cons).