Re: [PATCH v2] tracing/uprobe: Add missing PID filter for uretprobe
From: Jiri Olsa <hidden>
Date: 2024-08-26 10:05:42
Also in:
bpf
On Mon, Aug 26, 2024 at 12:40:18AM +0200, Oleg Nesterov wrote:
On 08/25, Oleg Nesterov wrote:quoted
At least I certainly disagree with "Fixes: c1ae5c75e103" ;) uretprobe_perf_func/etc was designed for perf, and afaics this code still works fine even if you run 2 perf-record's with -p PID1/PID2 at the same time. BPF hacks/hooks were added later, so perhaps this should be fixed in the bpf code, but I have no idea what bpftrace does...And I can't install bpftrace on my old Fedora 23 working laptop ;) Yes, yes, I know, I should upgrade it. For the moment, please forget about ret-probes. Could you compile this program #define _GNU_SOURCE #include <unistd.h> #include <sched.h> #include <signal.h> int func(int i) { return i; } int test(void *arg) { int i; for (i = 0;; ++i) { sleep(1); func(i); } return 0; } int main(void) { static char stack[65536]; clone(test, stack + sizeof(stack)/2, CLONE_VM|SIGCHLD, NULL); test(NULL); return 0; } and then do something like $ ./test & $ bpftrace -p $! -e 'uprobe:./test:func { printf("%d\n", pid); }' I hope that the syntax of the 2nd command is correct... I _think_ that it will print 2 pids too.
yes.. but with CLONE_VM both processes share 'mm' so they are threads, and at least uprobe_multi filters by process [1] now.. ;-)
But "perf-record -p" works as expected.
I wonder it's because there's the perf layer that schedules each uprobe event only when its process (PID1/2) is scheduled in and will receive events only from that cpu while the process is running on it jirka [1] 46ba0e49b642 bpf: fix multi-uprobe PID filtering logic
Oleg.