/* * disksnoop.c Trace block device I/O: basic version of iosnoop. * For Linux, uses BCC, eBPF. See .py file. * * Copyright (c) 2015 Brendan Gregg. * This program is free software; you can redistribute it and/or * modify it under the terms of version 2 of the GNU General Public * License as published by the Free Software Foundation. * * 11-Aug-2015 Brendan Gregg Created this. */ #include #include BPF_HASH(start, struct request *); 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 trace_completion(struct pt_regs *ctx, struct request *req) { u64 *tsp, delta; tsp = start.lookup(&req); if (tsp != 0) { delta = bpf_ktime_get_ns() - *tsp; bpf_trace_printk("%d %x %d\n", req->__data_len, req->cmd_flags, delta / 1000); start.delete(&req); } }