On Mon, Sep 08, 2014 at 12:01:22PM +0200, Peter Zijlstra wrote: > On Mon, Sep 08, 2014 at 11:48:55AM +0200, Peter Zijlstra wrote: > > > > The thing is; I don't understand those reasons. That commit log doesn't > > > explain. > > > > Ah wait, I finally see. I think we want to fix that exit path, not > > disallow the cloning. > > > > The thing is, by not allowing this optimization simple things like eg. > > pipe-test say very expensive. > > So its 179033b3e064 ("perf: Add PERF_EVENT_STATE_EXIT state for events > with exited task") that introduces the problem. Before that things would > work correctly afaict. > > The exit would remove from the context but leave the event in existence. > Both the fd and the inherited events would have references to it, only > once those are gone do we destroy the actual event. I have another 'problem' with 179033b3e064. What if you 'want' to continue monitoring after the initial task died? Eg. if you want to monitor crap that unconditionally daemonizes. So at this point I would suggest we revert both 179033b3e064 and 1f9a7268c67f so that the context switch optimization works again for simple 2 task things (pipe-test). If we re-introduce 179033b3e064 (which I think makes sense) we need to make sure it works with the context switch optimization (we could add perf_event::task I think, it would clean up a few other things iirc) and we'd have to make it conditional so we can still monitor daemons. Or am I totally missing things again?