Messages in this thread | | | Date | Thu, 6 Dec 2018 13:19:46 -0500 | From | Steven Rostedt <> | Subject | Re: [PATCH 1/8] perf: Allow to block process in syscall tracepoints |
| |
On Thu, 6 Dec 2018 09:34:00 +0100 Peter Zijlstra <peterz@infradead.org> wrote:
> > > > I don't understand this.. why are we using schedule_timeout() and all > > that? > > Urgh.. in fact, the more I look at this the more I hate it. > > We want to block in __perf_output_begin(), but we cannot because both > tracepoints and perf will have preemptability disabled down there. > > So what we do is fail the event, fake the lost count and go all the way > up that callstack, detect the failure and then poll-wait and retry. > > And only do this for a few special events... *yuck*
Since this is a special case, we should add a new option to the perf system call that, 1 states that it wants the traced process to block (and must have PTRACE permission to do so) and 2, after it reads from the buffer, it needs to check a bit that says "this process is blocked, please wake it up" and then do another perf call to kick the process to continue.
I really dislike the polling too. But because this is not a default case, and is a new feature, we can add more infrastructure to make it work properly, instead of trying to hack the current method into something that does something poorly.
-- Steve
| |