|
|
|
@ -20,7 +20,7 @@ struct bpf_map_def SEC("maps") my_map = { |
|
|
|
|
/* kprobe is NOT a stable ABI. If kernel internals change this bpf+kprobe
|
|
|
|
|
* example will no longer be meaningful |
|
|
|
|
*/ |
|
|
|
|
SEC("kprobe/blk_mq_start_request") |
|
|
|
|
SEC("kprobe/blk_start_request") |
|
|
|
|
int bpf_prog1(struct pt_regs *ctx) |
|
|
|
|
{ |
|
|
|
|
long rq = PT_REGS_PARM1(ctx); |
|
|
|
@ -42,13 +42,13 @@ static unsigned int log2l(unsigned long long n) |
|
|
|
|
#define SLOTS 100 |
|
|
|
|
|
|
|
|
|
struct bpf_map_def SEC("maps") lat_map = { |
|
|
|
|
.type = BPF_MAP_TYPE_ARRAY, |
|
|
|
|
.type = BPF_MAP_TYPE_PERCPU_ARRAY, |
|
|
|
|
.key_size = sizeof(u32), |
|
|
|
|
.value_size = sizeof(u64), |
|
|
|
|
.max_entries = SLOTS, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
SEC("kprobe/blk_update_request") |
|
|
|
|
SEC("kprobe/blk_account_io_completion") |
|
|
|
|
int bpf_prog2(struct pt_regs *ctx) |
|
|
|
|
{ |
|
|
|
|
long rq = PT_REGS_PARM1(ctx); |
|
|
|
@ -81,7 +81,7 @@ int bpf_prog2(struct pt_regs *ctx) |
|
|
|
|
|
|
|
|
|
value = bpf_map_lookup_elem(&lat_map, &index); |
|
|
|
|
if (value) |
|
|
|
|
__sync_fetch_and_add((long *)value, 1); |
|
|
|
|
*value += 1; |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|