On Mon, Sep 08, 2014 at 03:34:28PM +0200, Peter Zijlstra wrote: > On Mon, Sep 08, 2014 at 02:01:41PM +0200, Jiri Olsa wrote: > > 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. > > > > hum, I dont think so.. because the perf_remove_from_context set event > > to PERF_EVENT_STATE_OFF state anyway.. thus making any new cloned events > > disabled > > Urgh, see I knew I was missing something. > > Can't we fix that? Lemme check to see what relies on this. 2e2af50b1fab ("perf_events: Disable events when we detach them") Seems to be about it. And I think we should solve that differently, but the best I can come up with ties into the event->ctx mess we have in that other thread. The thing is, IOC_ENABLE/DISABLE and read() and such should act (sanely and) independent from the attached state. Its just that the whole event->ctx migration mess is making this somewhat hard atm. So things like perf_event_read() should not only check ctx->is_active but also worry about event->attach_state & PERF_ATTACH_CONTEXT. Now the biggest problem is that we cannot tell if its a temporary state (move_group / migrate_context) or permanent (exit)... Urgh