Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions bpf/estat/backend-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,12 @@ typedef struct {

BPF_HASH(io_base_data, u64, io_data_t);

// @@ kprobe|blk_mq_start_request|disk_io_start
// @@ raw_tracepoint|block_io_start|disk_io_start
int
disk_io_start(struct pt_regs *ctx, struct request *reqp)
disk_io_start(struct bpf_raw_tracepoint_args *ctx)
{
struct request *reqp = (struct request *)ctx->args[0];

io_data_t data = {};
struct gendisk *diskp = reqp->q->disk;
data.ts = bpf_ktime_get_ns();
Expand All @@ -44,10 +46,12 @@ disk_io_start(struct pt_regs *ctx, struct request *reqp)
return (0);
}

// @@ kprobe|blk_account_io_done|disk_io_done
// @@ raw_tracepoint|block_io_done|disk_io_done
int
disk_io_done(struct pt_regs *ctx, struct request *reqp)
disk_io_done(struct bpf_raw_tracepoint_args *ctx)
{
struct request *reqp = (struct request *)ctx->args[0];

u64 ts = bpf_ktime_get_ns();
io_data_t *data = io_base_data.lookup((u64 *) &reqp);
struct bio *bp = reqp->bio;
Expand Down
14 changes: 8 additions & 6 deletions bpf/stbtrace/io.st
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,10 @@ $hists:{hist|
BPF_HASH($hist.name$, io_hist_key_t, u64);
}$

int disk_io_start(struct pt_regs *ctx, struct request *reqp)
int disk_io_start(struct bpf_raw_tracepoint_args *ctx)
{
struct request *reqp = (struct request *)ctx->args[0];

io_data_t data = {};
struct gendisk *diskp = reqp->q->disk;
data.ts = bpf_ktime_get_ns();
Expand Down Expand Up @@ -101,8 +103,10 @@ static int aggregate_data(io_data_t *data, u64 ts, char *opstr)
return 0;
}

int disk_io_done(struct pt_regs *ctx, struct request *reqp)
int disk_io_done(struct bpf_raw_tracepoint_args *ctx)
{
struct request *reqp = (struct request *)ctx->args[0];

u64 ts = bpf_ktime_get_ns();
io_data_t *data = io_base_data.lookup((u64 *) &reqp);
struct bio *bp = reqp->bio;
Expand All @@ -126,10 +130,8 @@ int disk_io_done(struct pt_regs *ctx, struct request *reqp)
""" # noqa: W293
b = BPF(text=bpf_text)

if BPF.get_kprobe_functions(b'blk_start_request'):
b.attach_kprobe(event="blk_start_request", fn_name="disk_io_start")
b.attach_kprobe(event="blk_mq_start_request", fn_name="disk_io_start")
b.attach_kprobe(event="blk_mq_end_request", fn_name="disk_io_done")
b.attach_raw_tracepoint("block_io_start", fn_name="disk_io_start")
b.attach_raw_tracepoint("block_io_done", fn_name="disk_io_done")


helper = BCCHelper(b, BCCHelper.ANALYTICS_PRINT_MODE)
Expand Down
2 changes: 2 additions & 0 deletions cmd/estat.py
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,8 @@ class Args:
else:
print("WARNING: {}: {} - not found"
.format(probe_type, probe_spec[1]))
elif probe_type == "raw_tracepoint":
b.attach_raw_tracepoint(probe_spec[1], fn_name=probe_spec[2])
elif probe_type == "kretprobe":
b.attach_kretprobe(event=probe_spec[1], fn_name=probe_spec[2],
maxactive=MAXACTIVE)
Expand Down
Loading