[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAEXW_YQJ=vGxn5P=OtdkJT4NwE9+P0rAPEEQFdAUtyZ9Ck=qug@mail.gmail.com>
Date: Mon, 9 Mar 2020 11:42:28 -0700
From: Joel Fernandes <joel@...lfernandes.org>
To: Steven Rostedt <rostedt@...dmis.org>
Cc: Thomas Gleixner <tglx@...utronix.de>,
LKML <linux-kernel@...r.kernel.org>,
Peter Zijlstra <peterz@...radead.org>,
Masami Hiramatsu <mhiramat@...nel.org>,
Alexei Starovoitov <ast@...nel.org>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
"Paul E. McKenney" <paulmck@...nel.org>,
Frederic Weisbecker <frederic@...nel.org>,
Daniel Bristot de Oliveira <bristot@...hat.com>,
Valentin Schneider <valentin.schneider@....com>
Subject: Re: Instrumentation and RCU
On Mon, Mar 9, 2020 at 11:15 AM Steven Rostedt <rostedt@...dmis.org> wrote:
>
> On Mon, 09 Mar 2020 18:02:32 +0100
> Thomas Gleixner <tglx@...utronix.de> wrote:
>
[...]
> > #3) RCU idle
> >
> > Being able to trace code inside RCU idle sections is very similar to
> > the question raised in #1.
> >
> > Assume all of the instrumentation would be doing conditional RCU
> > schemes, i.e.:
> >
> > if (rcuidle)
> > ....
> > else
> > rcu_read_lock_sched()
> >
> > before invoking the actual instrumentation functions and of course
> > undoing that right after it, that really begs the question whether
> > it's worth it.
> >
> > Especially constructs like:
> >
> > trace_hardirqs_off()
> > idx = srcu_read_lock()
> > rcu_irq_enter_irqson();
> > ...
> > rcu_irq_exit_irqson();
> > srcu_read_unlock(idx);
> >
> > if (user_mode)
> > user_exit_irqsoff();
> > else
> > rcu_irq_enter();
> >
> > are really more than questionable. For 99.9999% of instrumentation
> > users it's absolutely irrelevant whether this traces the interrupt
> > disabled time of user_exit_irqsoff() or rcu_irq_enter() or not.
> >
> > But what's relevant is the tracer overhead which is e.g. inflicted
> > with todays trace_hardirqs_off/on() implementation because that
> > unconditionally uses the rcuidle variant with the scru/rcu_irq dance
> > around every tracepoint.
> >
> > Even if the tracepoint sits in the ASM code it just covers about ~20
> > low level ASM instructions more. The tracer invocation, which is
> > even done twice when coming from user space on x86 (the second call
> > is optimized in the tracer C-code), costs definitely way more
> > cycles. When you take the scru/rcu_irq dance into account it's a
> > complete disaster performance wise.
>
> Is this specifically to do with the kernel/trace/trace_preemptirqs.c code
> that was added by Joel?
Just started a vacation here and will be back on January 12th. Will
take a detailed look at Thomas's email at that time.
Adding some more folks (Daniel, Valentin) who have used the
preempt/irq tracepoints.
I agree we should reorder things and avoid these circular
dependencies, it bothers me too. I am happy to help with any clean ups
related to it. Let us definitely discuss more and fix it. Thanks.
- Joel
Powered by blists - more mailing lists