nfsv4io.d
Reports Host I/O
This is a simple DTrace script to provide basic I/O details by host every 5 seconds:
#!/usr/sbin/dtrace -s #pragma D option quiet dtrace:::BEGIN { interval = 5; printf("Tracing... Interval %d secs.\n", interval); tick = interval; } nfsv4:::op-* { @ops[args[0]->ci_remote] = count(); } nfsv4:::op-read-done { @reads[args[0]->ci_remote] = count(); @readbytes[args[0]->ci_remote] = sum(args[2]->data_len); } nfsv4:::op-write-done { @writes[args[0]->ci_remote] = count(); @writebytes[args[0]->ci_remote] = sum(args[2]->count); } profile:::tick-1sec /tick-- == 0/ { normalize(@ops, interval); normalize(@reads, interval); normalize(@writes, interval); normalize(@writebytes, 1024 * interval); normalize(@readbytes, 1024 * interval); printf("\n %-32s %6s %6s %6s %6s %8s\n", "Client", "r/s", "w/s", "kr/s", "kw/s", "ops/s"); printa(" %-32s %@6d %@6d %@6d %@6d %@8d\n", @reads, @writes, @readbytes, @writebytes, @ops); trunc(@ops); trunc(@reads); trunc(@writes); trunc(@readbytes); trunc(@writebytes); tick = interval; }
This output shows 192.0.2.14
calling NFSv4 reads and writes:
# ./nfsv4io.d
Tracing... Interval 5 secs.
Client r/s w/s kr/s kw/s ops/s
192.0.2.14 17 1 331 40 290
Client r/s w/s kr/s kw/s ops/s
192.0.2.14 9 0 197 0 152
Client r/s w/s kr/s kw/s ops/s
192.0.2.14 16 0 269 0 363
Client r/s w/s kr/s kw/s ops/s
^C
Other details can be calculated from the output, such as average read and write size, for example 331(kr/s) / 17(r/s) = 19.5 average kr. These could also be added to the script to be printed as columns.
The fields printed are:
Field | Description |
---|---|
|
Remote client IP address |
|
Reads per second |
|
Writes per second |
|
Kbytes read per second |
|
Kbytes written per second |
|
Total NFSv4 operations per second (including the reads and writes) |