You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
902 B
45 lines
902 B
/*
|
|
* 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;
|
|
}
|