----- On Oct 26, 2020, at 4:20 AM, Peter Zijlstra peterz@xxxxxxxxxxxxx wrote: > On Fri, Oct 23, 2020 at 05:13:59PM -0400, Joel Fernandes wrote: >> On Fri, Oct 23, 2020 at 03:53:52PM -0400, Michael Jeanson wrote: >> > From: Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx> >> > >> > Considering that tracer callbacks expect RCU to be watching (for >> > instance, perf uses rcu_read_lock), we need rcuidle tracepoints to issue >> > rcu_irq_{enter,exit}_irqson around calls to the callbacks. So there is >> > no point in using SRCU anymore given that rcuidle tracepoints need to >> > ensure RCU is watching. Therefore, simply use sched-RCU like normal >> > tracepoints for rcuidle tracepoints. >> >> High level question: >> >> IIRC, doing this increases overhead for general tracing that does not use >> perf, for 'rcuidle' tracepoints such as the preempt/irq enable/disable >> tracepoints. I remember adding SRCU because of this reason. >> >> Can the 'rcuidle' information not be pushed down further, such that perf does >> it because it requires RCU to be watching, so that it does not effect, say, >> trace events? > > There's very few trace_.*_rcuidle() users left. We should eradicate them > and remove the option. It's bugs to begin with. I agree with Peter. Removing the trace_.*_rcuidle weirdness from the tracepoint API and fixing all callers to ensure they trace from a context where RCU is watching would simplify instrumentation of the Linux kernel, thus making it harder for subtle bugs to hide and be unearthed only when tracing is enabled. This is AFAIU the general approach Thomas Gleixner has been aiming for recently, and I think it is a good thing. So if we consider this our target, and that the current state of things is that we need to have RCU watching around callback invocation, then removing the dependency on SRCU seems like an overall simplification which does not regress feature-wise nor speed-wise compared with what we have upstream today. The next steps would then be to audit all rcuidle tracepoints and make sure the context where they are placed has RCU watching already, so we can remove the tracepoint rcuidle API. That would effectively remove the calls to rcu_irq_{enter,exit}_irqson from the tracepoint code. This is however beyond the scope of the proposed patch set. Thanks, Mathieu -- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com