Commit 1da09dbc authored by Brendan Gregg's avatar Brendan Gregg Committed by Alastair Robertson

add biosnoop tool

parent 454cdd08
//
// biosnoop.bt - basic block I/O tracing tool, showing per I/O latency.
// For Linux, uses bpftrace, eBPF.
//
// TODO: switch to block tracepoints. Add device, offset, and size columns.
//
// 15-Nov-2017 Brendan Gregg Created this.
//
BEGIN
{
printf("%-12s %-16s %-6s %7s\n", "TIME(ms)", "COMM", "PID", "LAT(ms)");
@epoch = nsecs;
}
kprobe:blk_account_io_start
{
@start[arg0] = nsecs;
@iopid[arg0] = pid;
@iocomm[arg0] = comm;
}
kprobe:blk_account_io_completion
/@start[arg0] != 0 && @iopid[arg0] != 0 && @iocomm[arg0] != ""/
{
$now = nsecs;
printf("%-12u %-16s %-6d %7d\n",
($now - @epoch) / 1000000, @iocomm[arg0], @iopid[arg0],
($now - @start[arg0]) / 1000000);
@start[arg0] = delete();
@iopid[arg0] = delete();
@iocomm[arg0] = delete();
}
END
{
@epoch = delete();
}
Demonstrations of biosnoop, the Linux BPF/bpftrace version.
This traces block I/O, and shows the issuing process (at least, the process
that was on-CPU at the time of queue insert) and the latency of the I/O:
# bpftrace biosnoop.bt
Attaching 4 probes...
TIME(ms) COMM PID LAT(ms)
611 bash 4179 10
611 cksum 4179 0
627 cksum 4179 15
641 cksum 4179 13
644 cksum 4179 3
658 cksum 4179 13
673 cksum 4179 14
686 cksum 4179 13
701 cksum 4179 14
710 cksum 4179 8
717 cksum 4179 6
728 cksum 4179 10
735 cksum 4179 6
751 cksum 4179 10
758 cksum 4179 17
783 cksum 4179 12
796 cksum 4179 25
802 cksum 4179 32
[...]
This output shows the cksum process was issuing block I/O, which were
completing with around 12 milliseconds of latency. Each block I/O event is
printed out, with a completion time as the first column, measured from
program start.
An example of some background flushing:
# bpftrace biosnoop.bt
Attaching 4 probes...
TIME(ms) COMM PID LAT(ms)
2966 jbd2/nvme0n1-8 615 0
2967 jbd2/nvme0n1-8 615 0
[...]
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment