Messages in this thread | | | From | Namhyung Kim <> | Date | Mon, 13 Nov 2023 09:48:32 -0800 | Subject | Re: [PATCH RFC 04/10] perf: Introduce deferred user callchains |
| |
On Mon, Nov 13, 2023 at 9:21 AM Peter Zijlstra <peterz@infradead.org> wrote: > > On Mon, Nov 13, 2023 at 08:56:39AM -0800, Namhyung Kim wrote: > > > Ok, then BPF gets no user call stacks even with sframes. > > Well, you could obviously run another BPF program at return to user and > stitch there.
Right, maybe some more work needed for bpf_get_stackid() but it seems possible.
> > > Ok, but ... > > > If the task is preempted, the call stack would be from another > > task (if it also has the pending call stacks) and we need to > > check which user call stack matches which kernel call stack. > > So there's no guarantee we can just use adjacent samples. > > So upon requesting a user backtrace for the task it could request a > token (from eg a global atomic u64 in the most crude case) and place > this in the task_struct. The backtrace will emit this as forward > reference for the user trace. > > Once the task_work generates the user stacktrace, it will again dump > this token along with the user unwind, after which it will reset the > token for this this task (to 0).
Yeah, I thought something like this first, but then I thought "can we just use PID for this?"
Thanks, Namhyung
| |