| /* |
| * vfsreadlat.c VFS read latency distribution. |
| * For Linux, uses BCC, eBPF. See .py file. |
| * |
| * Copyright (c) 2013-2015 PLUMgrid, http://plumgrid.com |
| * 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. |
| * |
| * 15-Aug-2015 Brendan Gregg Created this. |
| */ |
| |
| #include <uapi/linux/ptrace.h> |
| |
| BPF_HASH(start, u32); |
| BPF_HISTOGRAM(dist); |
| |
| int do_entry(struct pt_regs *ctx) |
| { |
| u32 pid; |
| u64 ts, *val; |
| |
| pid = bpf_get_current_pid_tgid(); |
| ts = bpf_ktime_get_ns(); |
| start.update(&pid, &ts); |
| return 0; |
| } |
| |
| int do_return(struct pt_regs *ctx) |
| { |
| u32 pid; |
| u64 *tsp, delta; |
| |
| pid = bpf_get_current_pid_tgid(); |
| tsp = start.lookup(&pid); |
| |
| if (tsp != 0) { |
| delta = bpf_ktime_get_ns() - *tsp; |
| dist.increment(bpf_log2l(delta / 1000)); |
| start.delete(&pid); |
| } |
| |
| return 0; |
| } |