dtrace_io
—
a DTrace provider for tracing events related to disk I/O
io:::start
(struct
bio *, struct devstat
*);
io:::done
(struct
bio *, struct devstat
*);
The io
provider allows the tracing of disk I/O events.
The io:::start
() probe fires when a I/O request is
about to be sent to the backing driver of a
disk(9)
object. This occurs after all
GEOM(4)
transformations have been performed on the request. The
io:::done
() probe fires when a I/O request is
completed. Both probes take a struct bio * representing
the I/O request as their first argument. The second argument is a
struct devstat * for the underlying
disk(9)
object.
The fields of struct bio are described in the
g_bio(9)
manual page, and the fields of struct devstat are
described in the
devstat(9)
manual page. Translators for the bufinfo_t and
devinfo_t D types are defined in
/usr/lib/dtrace/io.d.
- /usr/lib/dtrace/io.d
- DTrace type and translator definitions for the
io
provider.
The following script shows a per-process breakdown of total I/O by disk device:
#pragma D option quiet
io:::start
{
@[args[1]->device_name, execname, pid] = sum(args[0]->bio_bcount);
}
END
{
printf("%10s %20s %10s %15s\n", "DEVICE", "APP", "PID", "BYTES");
printa("%10s %20s %10d %15@d\n", @);
}
This provider is not compatible with the io
provider
found in Solaris, as its probes use native FreeBSD
argument types.
The io
provider first appeared in
FreeBSD 9.2 and 10.0.
The io:::wait-start
() and
io:::wait-done
() probes are not currently implemented
on FreeBSD.