From: Masami Hiramatsu <mhiramat@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Tom Zanussi <tom.zanussi@linux.intel.com>,
Masami Hiramatsu <mhiramat@kernel.org>, <rostedt@goodmis.org>,
<tglx@linutronix.de>, <linux-kernel@vger.kernel.org>,
<linux-rt-users@vger.kernel.org>
Subject: Re: [RFC][PATCH 00/21] tracing: Inter-event (e.g. latency) support
Date: Tue, 14 Feb 2017 18:37:10 +0900 [thread overview]
Message-ID: <20170214183710.b06ba18b6421fb033c9be8b9@kernel.org> (raw)
In-Reply-To: <20170213010416.GE14705@sejong>
On Mon, 13 Feb 2017 10:04:16 +0900
Namhyung Kim <namhyung@kernel.org> wrote:
> On Fri, Feb 10, 2017 at 12:58:30PM -0600, Tom Zanussi wrote:
> > Hi Masami,
> >
> > On Fri, 2017-02-10 at 18:34 +0900, Masami Hiramatsu wrote:
> > > On Fri, 10 Feb 2017 13:16:17 +0900
> > > Namhyung Kim <namhyung@kernel.org> wrote:
> > >
> > > > > ====
> > > > > Example - wakeup latency
> > > > > ====
> > > > >
> > > > > This basically implements the -RT latency_hist 'wakeup_latency'
> > > > > histogram using the synthetic events, variables, and actions
> > > > > described. The output below is from a run of cyclictest using the
> > > > > following command:
> > > > >
> > > > > # rt-tests/cyclictest -p 80 -n -s -t 2
> > > > >
> > > > > What we're measuring the latency of is the time between when a
> > > > > thread (of cyclictest) is awakened and when it's scheduled in. To
> > > > > do that we add triggers to sched_wakeup and sched_switch with the
> > > > > appropriate variables, and on a matching sched_switch event,
> > > > > generate a synthetic 'wakeup_latency' event. Since it's just
> > > > > another trace event like any other, we can also define a histogram
> > > > > on that event, the output of which is what we see displayed when
> > > > > reading the wakeup_latency 'hist' file.
> > > > >
> > > > > First, we create a synthetic event called wakeup_latency, that
> > > > > references 3 variables from other events:
> > > > >
> > > > > # echo 'wakeup_latency lat=sched_switch:wakeup_lat \
> > > > > pid=sched_switch:woken_pid \
> > > > > prio=sched_switch:woken_prio' >> \
> > > > > /sys/kernel/debug/tracing/synthetic_events
> > > > >
> > > > > Next we add a trigger to sched_wakeup, which saves the value of the
> > > > > 'common_timestamp' when that event is hit in a variable, ts0. Note
> > > > > that this happens only when 'comm==cyclictest'.
> > > > >
> > > > > Also, 'common_timestamp' is a new field defined on every event (if
> > > > > needed - if there are no users of timestamps in a trace, timestamps
> > > > > won't be saved and there's no additional overhead from that).
> > > > >
> > > > > # echo 'hist:keys=pid:ts0=common_timestamp.usecs if \
> > > > > comm=="cyclictest"' >> \
> > > > > /sys/kernel/debug/tracing/events/sched/sched_wakeup/trigger
> > > > >
> > > > > Next, we add a trigger to sched_switch. When the pid being switched
> > > > > to matches the pid woken up by a previous sched_wakeup event, this
> > > > > event grabs the ts0 saved on that event, takes the difference
> > > > > between it and the current sched_switch's common_timestamp, and
> > > > > assigns it to a new 'wakeup_lat' variable. It also saves a couple
> > > > > other variables and then invokes the onmatch().trace() action which
> > > > > generates a new wakeup_latency event using those variables.
> > > > >
> > > > > # echo 'hist:keys=woken_pid=next_pid:woken_prio=next_prio:\
> > > > > wakeup_lat=common_timestamp.usecs-ts0:onmatch().trace(wakeup_latency) \
> > > > > if next_comm=="cyclictest"' >> \
> > > > > /sys/kernel/debug/tracing/events/sched/sched_switch/trigger
> > > >
> > > > As Masami said, I think the syntax is a bit hard to understand. Also
> > > > it'd be nice to access an event field directly (i.e. not by adding a
> > > > field in a hist). Maybe we can use a prefix like '$' to identify hist
> > > > fields..
> > >
> > > Ah that's a nice idea!
> > >
> > > >
> > > > How about below?
> > > >
> > > > # echo 'wakeup_latency \
> > > > lat=sched_switch.$wakeup_lat \
> > > > pid=sched_switch.next_pid \
> > > > prio=sched_switch.next_prio' >> \
> > > > /sys/kernel/debug/tracing/synthetic_events
> > >
> > > Should we define these parameter assignment at this.point?
> > >
> > > I think this syntax binds wakeup_latency event to sched_switch too tight. I
> > > mean, if someone kicks this event from some other event, it may easily lose
> > > values.
> > > So, at this point, we will define event name and what parameters it has,
> > > until binding this event to onmatch().
> > >
> >
> > Right, I agree this binding doesn't need to be done here, good idea to
> > defer it as below...
> >
> > > > # echo 'hist: \
> > > > keys=pid: \
> > > > ts0=common_timestamp.usec \
> > > > if comm=="cyclictest"' >> \
> > > > /sys/kernel/debug/tracing/events/sched/sched_wakeup/trigger
> > > >
> > > > # echo 'hist: \
> > > > keys=next_pid: \
> > > > wakeup_lat=common_timestamp.usec-$ts0: \
> > > > onmatch(sched_wakeup).trace(wakeup_latency) \
> > >
> > > This one seems much better for me, but I would like to ask you call event
> > > directly from onmatch, like as
> > >
> > > "onmatch(sched_wakeup).wakeup_latency(wakeup_lat,next_pid,next_prio)"
> > >
> > > At this point, kernel will finalize the wakeup_latency event with wakeup_lat,
> > > next_pid and next_prio.
> > >
> >
> > Yes, I like this much better - things are no longer so implicit and
> > therefore subject to confusion, and the syntax itself makes more sense,
> > even if it is a bit more verbose on the trigger, which is fine.
>
> I thought about it too, but it needs to add some kind of type checking
> then. What if another hist generates the event with totally different
> info?
In that case, we can just reject the onmatch command :)
Anyway, when we bind it to other events, the type should be checked.
Thank you,
--
Masami Hiramatsu <mhiramat@kernel.org>
next prev parent reply other threads:[~2017-02-14 9:37 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-08 17:24 [RFC][PATCH 00/21] tracing: Inter-event (e.g. latency) support Tom Zanussi
2017-02-08 17:24 ` [RFC][PATCH 01/21] tracing: Add hist_field_name() accessor Tom Zanussi
2017-02-08 20:09 ` Steven Rostedt
2017-02-08 17:24 ` [RFC][PATCH 02/21] tracing: Reimplement log2 Tom Zanussi
2017-02-08 20:13 ` Steven Rostedt
2017-02-08 20:25 ` Tom Zanussi
2017-02-08 17:24 ` [RFC][PATCH 03/21] ring-buffer: Add TIME_EXTEND_ABS ring buffer type Tom Zanussi
2017-02-08 20:32 ` Steven Rostedt
2017-02-08 20:55 ` Tom Zanussi
2017-02-09 14:54 ` Steven Rostedt
2017-02-10 6:04 ` Namhyung Kim
2017-02-10 14:28 ` Steven Rostedt
2017-02-08 17:25 ` [RFC][PATCH 04/21] tracing: Give event triggers access to ring_buffer_event Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 05/21] tracing: Add ring buffer event param to hist field functions Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 06/21] tracing: Increase tracing map KEYS_MAX size Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 07/21] tracing: Break out hist trigger assignment parsing Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 08/21] tracing: Make traceprobe parsing code reusable Tom Zanussi
2017-02-09 20:40 ` Steven Rostedt
2017-02-08 17:25 ` [RFC][PATCH 09/21] tracing: Add hist trigger timestamp support Tom Zanussi
2017-02-10 6:14 ` Namhyung Kim
2017-02-08 17:25 ` [RFC][PATCH 10/21] tracing: Add per-element variable support to tracing_map Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 11/21] tracing: Add variable support to hist triggers Tom Zanussi
2017-02-13 6:03 ` Namhyung Kim
2017-02-14 15:25 ` Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 12/21] tracing: Account for variables in named trigger compatibility Tom Zanussi
2017-02-13 6:04 ` Namhyung Kim
2017-02-14 15:26 ` Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 13/21] tracing: Add simple expression support to hist triggers Tom Zanussi
2017-02-14 2:37 ` Namhyung Kim
2017-02-14 15:29 ` Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 14/21] tracing: Add variable reference handling " Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 15/21] tracing: Add usecs modifier for hist trigger timestamps Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 16/21] tracing: Add support for dynamic tracepoints Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 17/21] tracing: Add hist trigger action hook Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 18/21] tracing: Add support for 'synthetic' events Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 19/21] tracing: Add 'onmatch' hist trigger action support Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 20/21] tracing: Add 'onmax' " Tom Zanussi
2017-02-08 17:25 ` [RFC][PATCH 21/21] tracing: Add inter-event hist trigger Documentation Tom Zanussi
2017-02-08 20:01 ` [RFC][PATCH 00/21] tracing: Inter-event (e.g. latency) support Steven Rostedt
2017-02-08 20:19 ` Tom Zanussi
2017-02-08 23:28 ` Tom Zanussi
2017-02-09 2:14 ` Steven Rostedt
2017-02-08 23:13 ` Masami Hiramatsu
2017-02-09 1:14 ` Tom Zanussi
2017-02-09 14:18 ` Masami Hiramatsu
2017-02-09 17:18 ` Tom Zanussi
2017-02-09 19:57 ` Steven Rostedt
2017-02-09 14:46 ` Frank Ch. Eigler
2017-02-09 18:43 ` Tom Zanussi
2017-02-10 4:16 ` Namhyung Kim
2017-02-10 9:34 ` Masami Hiramatsu
2017-02-10 18:58 ` Tom Zanussi
2017-02-13 1:04 ` Namhyung Kim
2017-02-14 9:37 ` Masami Hiramatsu [this message]
2017-02-14 15:27 ` Tom Zanussi
2017-02-10 18:43 ` Tom Zanussi
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=20170214183710.b06ba18b6421fb033c9be8b9@kernel.org \
--to=mhiramat@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rt-users@vger.kernel.org \
--cc=namhyung@kernel.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=tom.zanussi@linux.intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).