accomodate mq block device I/O
authorBrendan Gregg <brendan.d.gregg@gmail.com>
Wed, 16 Sep 2015 22:12:55 +0000 (15:12 -0700)
committerBrendan Gregg <brendan.d.gregg@gmail.com>
Wed, 16 Sep 2015 22:12:55 +0000 (15:12 -0700)
examples/bitehist.c
examples/disksnoop.c
examples/disksnoop.py

index 685d825..0894b32 100644 (file)
@@ -38,7 +38,7 @@ static unsigned int log2l(unsigned long v)
                return log2(v) + 1;
 }
 
-int kprobe__blk_start_request(struct pt_regs *ctx, struct request *req)
+int kprobe__blk_account_io_completion(struct pt_regs *ctx, struct request *req)
 {
        int index = log2l(req->__data_len / 1024);
        u64 *leaf = dist.lookup(&index);
index c4a25aa..8c29549 100644 (file)
 
 BPF_HASH(start, struct request *);
 
-void kprobe__blk_start_request(struct pt_regs *ctx, struct request *req) {
+void trace_start(struct pt_regs *ctx, struct request *req) {
        // stash start timestamp by request ptr
        u64 ts = bpf_ktime_get_ns();
 
        start.update(&req, &ts);
 }
 
-void kprobe__blk_update_request(struct pt_regs *ctx, struct request *req) {
+void trace_completion(struct pt_regs *ctx, struct request *req) {
        u64 *tsp, delta;
 
        tsp = start.lookup(&req);
index 352a170..206b618 100755 (executable)
@@ -17,6 +17,9 @@ REQ_WRITE = 1         # from include/linux/blk_types.h
 
 # load BPF program
 b = BPF(src_file="disksnoop.c")
+b.attach_kprobe(event="blk_start_request", fn_name="trace_start")
+b.attach_kprobe(event="blk_mq_start_request", fn_name="trace_start")
+b.attach_kprobe(event="blk_account_io_completion", fn_name="trace_completion")
 
 # header
 print("%-18s %-2s %-7s %8s" % ("TIME(s)", "T", "BYTES", "LAT(ms)"))