-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
biosnoop.bt: handle Linux 5.17 block layer update
The kernel upstream commit: torvalds/linux@f3fa33a has removed the `rq_disk` field from `struct request`. Instead, `->q->disk` should be used, so this is reflected in biosnoop.bt. The old version of the tool (suitable for kernel <= 5.16) is backed up in tools/old and used in the CI.
- Loading branch information
1 parent
e05e7a4
commit 6233473
Showing
4 changed files
with
71 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
#!/usr/bin/env bpftrace | ||
/* | ||
* biosnoop.bt Block I/O tracing tool, showing per I/O latency. | ||
* For Linux, uses bpftrace, eBPF. | ||
* | ||
* TODO: switch to block tracepoints. Add offset and size columns. | ||
* | ||
* This is a bpftrace version of the bcc tool of the same name. | ||
* | ||
* For Linux <= 5.16. | ||
* | ||
* 15-Nov-2017 Brendan Gregg Created this. | ||
*/ | ||
|
||
#ifndef BPFTRACE_HAVE_BTF | ||
#include <linux/blkdev.h> | ||
#include <linux/blk-mq.h> | ||
#endif | ||
|
||
BEGIN | ||
{ | ||
printf("%-12s %-7s %-16s %-6s %7s\n", "TIME(ms)", "DISK", "COMM", "PID", "LAT(ms)"); | ||
} | ||
|
||
kprobe:blk_account_io_start, | ||
kprobe:__blk_account_io_start | ||
{ | ||
@start[arg0] = nsecs; | ||
@iopid[arg0] = pid; | ||
@iocomm[arg0] = comm; | ||
@disk[arg0] = ((struct request *)arg0)->rq_disk->disk_name; | ||
} | ||
|
||
kprobe:blk_account_io_done, | ||
kprobe:__blk_account_io_done | ||
/@start[arg0] != 0 && @iopid[arg0] != 0 && @iocomm[arg0] != ""/ | ||
|
||
{ | ||
$now = nsecs; | ||
printf("%-12u %-7s %-16s %-6d %7d\n", | ||
elapsed / 1e6, @disk[arg0], @iocomm[arg0], @iopid[arg0], | ||
($now - @start[arg0]) / 1e6); | ||
|
||
delete(@start[arg0]); | ||
delete(@iopid[arg0]); | ||
delete(@iocomm[arg0]); | ||
delete(@disk[arg0]); | ||
} | ||
|
||
END | ||
{ | ||
clear(@start); | ||
clear(@iopid); | ||
clear(@iocomm); | ||
clear(@disk); | ||
} |