diff --git a/src/drsnoop/drsnoop.bpf.c b/src/drsnoop/drsnoop.bpf.c index 122228e33436c1c45c292b2a112210439ded6990..e0eaf0875f2f217a34c4d7922569b0dcbc4dd8a9 100644 --- a/src/drsnoop/drsnoop.bpf.c +++ b/src/drsnoop/drsnoop.bpf.c @@ -27,3 +27,25 @@ struct { __uint(value_size, sizeof(u32)); } events SEC(".maps"); +static int handle_direct_reclaim_begin() +{ + u64 *vm_zone_stat_kaddrp = (u64 *)vm_zone_stat_kaddr; + u64 id = bpf_get_current_pid_tgid(); + struct piddata piddata = {}; + u32 tgid = id >> 32; + u32 pid = id; + + if (target_tgid && target_tgid != tgid) + return 0; + if (target_pid && target_pid != pid) + return 0; + + piddata.ts = bpf_ktime_get_ns(); + if (vm_zone_stat_kaddrp) { + bpf_core_read(&piddata.nr_free_pages, sizeof(u64), + &vm_zone_stat_kaddrp[NR_FREE_PAGES]); + } + + bpf_map_update_elem(&start, &pid, &piddata, BPF_ANY); + return 0; +}