From: Mathieu Desnoyers <compudj@krystal.dyndns.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Jason Baron <jbaron@redhat.com>,
Masami Hiramatsu <mhiramat@redhat.com>,
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
Peter Zijlstra <peterz@infradead.org>,
"Frank Ch. Eigler" <fche@redhat.com>,
mingo@elte.hu, linux-kernel@vger.kernel.org,
acme@ghostprotocols.net, fweisbec@gmail.com
Subject: Re: [PATCH] new irq tracer
Date: Wed, 25 Feb 2009 17:12:10 -0500 [thread overview]
Message-ID: <20090225221210.GA20133@Krystal> (raw)
In-Reply-To: <alpine.DEB.2.00.0902251250110.12697@gandalf.stny.rr.com>
* Steven Rostedt (rostedt@goodmis.org) wrote:
>
>
> On Wed, 25 Feb 2009, Mathieu Desnoyers wrote:
>
> > * Jason Baron (jbaron@redhat.com) wrote:
> > > On Wed, Feb 25, 2009 at 11:48:28AM -0500, Masami Hiramatsu wrote:
> > > > KOSAKI Motohiro wrote:
> > > > >> /**
> > > > >> * handle_IRQ_event - irq action chain handler
> > > > >> * @irq: the interrupt number
> > > > >> @@ -354,7 +358,9 @@ irqreturn_t handle_IRQ_event(unsigned int irq, struct irqaction *action)
> > > > >> local_irq_enable_in_hardirq();
> > > > >>
> > > > >> do {
> > > > >> + trace_irq_entry(irq);
> > > > >> ret = action->handler(irq, action->dev_id);
> > > > >> + trace_irq_exit(irq, ret);
> > > > >> if (ret == IRQ_HANDLED)
> > > > >> status |= action->flags;
> > > > >> retval |= ret;
> > > > >
> > > > > Nobdy want unnecessary redundant tracepoint.
> > > > > Please discuss with mathieu, and merge his tracepoint.
> > > >
> > > > Hmm, from the viewpoint of trouble shooting, the place of LTTng's tracepoint
> > > > is enough. However, from the same viewpoint, it should pass irq-number
> > > > to irq-exit event too, because we may lost some previous events by buffer-overflow
> > > > etc.
> > > >
> > > > trace_irq_entry(irq, NULL);
> > > > ret = _handle_IRQ_event(irq, action);
> > > > trace_irq_exit(irq, ret);
> > > > ^^^^
> > > >
> > >
> > > the lttng tracepoints wrap the calls to _handle_IRQ_event in 3
> > > different places. So the above suggested irq tracepoint provides the
> > > same information with 4 less tracepoints in the code. So I believe its
> > > simpler - plus we can understand which action handlers are handling the
> > > interrupt.
> > >
> >
> > The main thing I dislike about only tracing action->handler() calls is
> > that you are not tracing an IRQ per se, but rather the invocation of a
> > given handler within the interrupt. For instance, it would be difficult
> > to calculate the maximum interrupt latency for a given interrupt line,
> > because you don't have the "real" irq entry/exit events, just the
> > individual handler() calls.
>
> Then use the function_graph tracer.
>
Sadly, the function tracer cannot be enabled on production systems.
Therefore it's not a usable solution in the context where I need this.
Mathieu
> # echo smp_apic_timer_interrupt > /debug/tracing/set_ftrace_filter
> # echo __irqentry_text_start >> /debug/tracing/set_ftrace_filter
> # echo function_graph > /debug/tracing/current_tracer
> # cat /debug/tracing/trace
>
> # tracer: function_graph
> #
> # CPU DURATION FUNCTION CALLS
> # | | | | | | |
> ------------------------------------------
> 1) kblockd-4012 => <idle>-0
> ------------------------------------------
>
> 1) ==========> |
> 1) + 35.783 us | smp_apic_timer_interrupt();
> ------------------------------------------
> 2) kstop/2-4013 => <idle>-0
> ------------------------------------------
>
> 2) ==========> |
> 2) + 13.819 us | smp_apic_timer_interrupt();
> ------------------------------------------
> 3) kstop/3-4014 => <idle>-0
> ------------------------------------------
>
> 3) ==========> |
> 3) + 24.919 us | __irqentry_text_start();
> ------------------------------------------
> 0) kstop/0-4011 => <idle>-0
> ------------------------------------------
>
> 0) ==========> |
> 0) + 24.444 us | smp_apic_timer_interrupt();
> ------------------------------------------
> 1) <idle>-0 => bash-3899
> ------------------------------------------
>
> 1) ==========> |
> 1) + 13.642 us | smp_apic_timer_interrupt();
> 2) ==========> |
> 2) + 15.014 us | smp_apic_timer_interrupt();
> 3) ==========> |
> 3) + 31.004 us | smp_apic_timer_interrupt();
> ------------------------------------------
> 0) <idle>-0 => sshd-3892
> ------------------------------------------
>
> 0) ==========> |
> 0) + 15.655 us | __irqentry_text_start();
> 0) ==========> |
> 0) + 37.722 us | __irqentry_text_start();
> ------------------------------------------
> 0) sshd-3892 => <idle>-0
> ------------------------------------------
>
> 0) ==========> |
> 0) + 26.139 us | __irqentry_text_start();
> 3) ==========> |
> 3) + 27.240 us | __irqentry_text_start();
> 3) ==========> |
> 3) + 21.987 us | __irqentry_text_start();
>
>
> And there you have your latencies ;-)
>
> With Jasons added trace points, we could add the to the event tracer
> and those would show up as comments here.
>
> -- Steve
>
>
>
> >
> > But I agree that knowing which handler is called is important.
> >
> > How about this compromise :
> >
> > trace_irq_entry(irq, action)
> > _handle_IRQ_event()
> > for each action {
> > trace_irq_handler(action, ret);
> > ret = action->handler(irq, action->dev_id);
> > ...
> > }
> > trace_irq_exit(action_ret);
> >
> > Would that give you the information you need ?
> >
> > Here trace_irq_handler would be passed the _current_ action invoked and
> > the _previous_ action return value. Note that we should initialize
> > irqreturn_t ret to some initial value if we do this. That should keep
> > the tracing overhead minimal.
> >
>
--
Mathieu Desnoyers
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
next prev parent reply other threads:[~2009-02-25 22:17 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-18 19:53 [PATCH] new irq tracer Jason Baron
2009-02-18 20:08 ` Steven Rostedt
2009-02-18 20:26 ` Mathieu Desnoyers
2009-02-19 1:42 ` KOSAKI Motohiro
2009-02-18 20:30 ` Kyle McMartin
2009-02-18 21:15 ` Peter Zijlstra
2009-02-18 21:35 ` Jason Baron
2009-02-18 21:46 ` Peter Zijlstra
2009-02-18 22:02 ` Frank Ch. Eigler
2009-02-18 22:10 ` Peter Zijlstra
2009-02-18 22:23 ` Frank Ch. Eigler
2009-02-18 23:21 ` Peter Zijlstra
2009-02-20 19:52 ` Jason Baron
2009-02-21 3:39 ` Frederic Weisbecker
2009-02-22 3:38 ` KOSAKI Motohiro
2009-02-25 16:48 ` Masami Hiramatsu
2009-02-25 16:57 ` Jason Baron
2009-02-25 17:34 ` Mathieu Desnoyers
2009-02-25 18:05 ` Steven Rostedt
2009-02-25 22:12 ` Mathieu Desnoyers [this message]
2009-02-25 22:20 ` Frederic Weisbecker
2009-02-25 23:13 ` Mathieu Desnoyers
2009-02-26 1:41 ` Steven Rostedt
2009-02-26 12:37 ` Dominique Toupin
2009-02-27 3:14 ` KOSAKI Motohiro
2009-02-27 3:29 ` Steven Rostedt
2009-02-27 3:36 ` Steven Rostedt
2009-02-27 7:48 ` KOSAKI Motohiro
2009-02-27 8:06 ` Peter Zijlstra
2009-02-27 8:13 ` KOSAKI Motohiro
2009-02-27 13:10 ` Arnaldo Carvalho de Melo
2009-02-27 14:43 ` Steven Rostedt
2009-02-27 7:23 ` Peter Zijlstra
2009-02-25 22:21 ` Steven Rostedt
2009-02-26 15:11 ` Jason Baron
2009-02-26 15:32 ` Steven Rostedt
2009-02-26 15:35 ` Ingo Molnar
2009-02-26 15:40 ` Peter Zijlstra
2009-02-26 16:20 ` Frederic Weisbecker
2009-02-27 3:35 ` KOSAKI Motohiro
2009-02-27 3:33 ` KOSAKI Motohiro
2009-02-27 7:25 ` Peter Zijlstra
2009-02-25 16:58 ` Mathieu Desnoyers
2009-02-25 17:19 ` Masami Hiramatsu
2009-02-27 3:08 ` KOSAKI Motohiro
2009-02-18 23:34 ` Kyle McMartin
2009-02-19 2:13 ` Frederic Weisbecker
2009-02-19 1:46 ` Frederic Weisbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090225221210.GA20133@Krystal \
--to=compudj@krystal.dyndns.org \
--cc=acme@ghostprotocols.net \
--cc=fche@redhat.com \
--cc=fweisbec@gmail.com \
--cc=jbaron@redhat.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@redhat.com \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.