From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Jiri Olsa <jolsa@redhat.com>, LKML <linux-kernel@vger.kernel.org>,
David Ahern <dsahern@gmail.com>,
Steven Rostedt <rostedt@goodmis.org>,
Frederic Weisbecker <fweisbec@gmail.com>,
Andi Kleen <andi@firstfloor.org>, Wang Nan <wangnan0@huawei.com>
Subject: Re: [RFC/PATCHSET 0/6] perf tools: Support dynamic sort keys for tracepoints (v1)
Date: Mon, 14 Dec 2015 14:47:23 -0300 [thread overview]
Message-ID: <20151214174723.GT6843@kernel.org> (raw)
In-Reply-To: <1450107973-2447-1-git-send-email-namhyung@kernel.org>
Em Tue, Dec 15, 2015 at 12:46:07AM +0900, Namhyung Kim escreveu:
> Hello,
>
> This is an attempt to improve perf to deal with tracepoint events
> better. The perf tools can handle tracepoint events but perf report
> on them is less useful since they're always sampled in a fixed
> location and not provide event specific info. We can use perf script
> but I always wishes there's more convenient way to see the result.
>
> I suggest dynamic sort keys created for each event.field on demand.
> Consider following example:
>
> # Overhead Command Shared Object Symbol
> # ........ ............... ................ ..............
> #
> 47.22% swapper [kernel.vmlinux] [k] __schedule
> 21.67% transmission-gt [kernel.vmlinux] [k] __schedule
> 8.23% netctl-auto [kernel.vmlinux] [k] __schedule
> 5.53% kworker/0:1H [kernel.vmlinux] [k] __schedule
> 1.98% Xephyr [kernel.vmlinux] [k] __schedule
> 1.33% irq/33-iwlwifi [kernel.vmlinux] [k] __schedule
> 1.17% wpa_cli [kernel.vmlinux] [k] __schedule
> 1.13% rcu_preempt [kernel.vmlinux] [k] __schedule
> 0.85% ksoftirqd/0 [kernel.vmlinux] [k] __schedule
> 0.77% Timer [kernel.vmlinux] [k] __schedule
> ...
>
> Currently perf report only shows this but important info is on the
> event fields, that is:
>
> # sudo cat /sys/kernel/debug/tracing/events/sched/sched_switch/format
> name: sched_switch
> ID: 268
> format:
> field:unsigned short common_type; offset:0; size:2; signed:0;
> field:unsigned char common_flags; offset:2; size:1; signed:0;
> field:unsigned char common_preempt_count; offset:3; size:1; signed:0;
> field:int common_pid; offset:4; size:4; signed:1;
>
> field:char prev_comm[16]; offset:8; size:16; signed:1;
> field:pid_t prev_pid; offset:24; size:4; signed:1;
> field:int prev_prio; offset:28; size:4; signed:1;
> field:long prev_state; offset:32; size:8; signed:1;
> field:char next_comm[16]; offset:40; size:16; signed:1;
> field:pid_t next_pid; offset:56; size:4; signed:1;
> field:int next_prio; offset:60; size:4; signed:1;
>
> print fmt: "prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==>
> next_comm=%s next_pid=%d next_prio=%d",
> REC->prev_comm, REC->prev_pid, REC->prev_prio,
> REC->prev_state & (2048-1) ? __print_flags(REC->prev_state & (2048-1),
> "|", { 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" }, { 16, "Z" }, { 32, "X" },
> { 64, "x" }, { 128, "K"}, { 256, "W" }, { 512, "P" }, { 1024, "N" }) : "R",
> REC->prev_state & 2048 ? "+" : "", REC->next_comm, REC->next_pid, REC->next_prio
>
> With dynamic sort keys, you can use <event.field> as a sort key. Those
> dynamic keys are checked and created on demand. For instance, below is
> to sort by next_pid field on the same data file.
>
> $ perf report -s comm,sched:sched_switch.next_pid --stdio
> ...
> # Overhead Command next_pid
> # ........ ............... ..........
> #
> 21.23% transmission-gt 0
> 20.86% swapper 17773
> 6.62% netctl-auto 0
> 5.25% swapper 109
> 5.21% kworker/0:1H 0
> 1.98% Xephyr 0
> 1.98% swapper 6524
> 1.98% swapper 27478
> 1.37% swapper 27476
> 1.17% swapper 233
>
> Multiple dynamic sort keys are also supported:
>
> $ perf report -s comm,sched:sched_switch.next_pid,sched:sched_switch.next_comm --stdio
> ...
> # Overhead Command next_pid next_comm
> # ........ ............... .......... ................
> #
> 20.86% swapper 17773 transmission-gt
> 9.64% transmission-gt 0 swapper/0
> 9.16% transmission-gt 0 swapper/2
> 5.25% swapper 109 kworker/0:1H
> 5.21% kworker/0:1H 0 swapper/0
> 2.14% netctl-auto 0 swapper/2
> 1.98% netctl-auto 0 swapper/0
> 1.98% swapper 6524 Xephyr
> 1.98% swapper 27478 netctl-auto
> 1.78% transmission-gt 0 swapper/3
> 1.53% Xephyr 0 swapper/0
> 1.29% netctl-auto 0 swapper/1
> 1.29% swapper 27476 netctl-auto
> 1.21% netctl-auto 0 swapper/3
> 1.17% swapper 233 irq/33-iwlwifi
>
> Note that pid 0 exists for each cpu so have comm of 'swapper/N'.
> This is available on 'perf/dynamic-sort-v1' branch in my tree
>
> git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
>
> Any comments are welcome, thanks!
> Namhyung
I'll look at the patches for style, but the idea is so nice and natural
I thought about blind merging it :-)
- Arnaldo
next prev parent reply other threads:[~2015-12-14 17:47 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-14 15:46 [RFC/PATCHSET 0/6] perf tools: Support dynamic sort keys for tracepoints (v1) Namhyung Kim
2015-12-14 15:46 ` [PATCH 1/6] perf hist: Pass struct sample to __hists__add_entry() Namhyung Kim
2015-12-14 15:46 ` [PATCH 2/6] perf hist: Save raw_data/size for tracepoint events Namhyung Kim
2015-12-14 15:46 ` [PATCH 3/6] tools lib traceevent: Factor out and export print_event_field() Namhyung Kim
2015-12-14 15:46 ` [PATCH 4/6] perf tools: Pass evlist to setup_sorting() Namhyung Kim
2015-12-14 15:46 ` [PATCH 5/6] perf tools: Add dynamic sort key for tracepoint events Namhyung Kim
2015-12-15 8:53 ` Jiri Olsa
2015-12-15 12:07 ` Namhyung Kim
2015-12-15 12:22 ` Jiri Olsa
2015-12-15 12:37 ` Namhyung Kim
2015-12-14 15:46 ` [PATCH 6/6] perf tools: Try to show pretty printed output for dynamic sort keys Namhyung Kim
2015-12-15 9:03 ` Jiri Olsa
2015-12-15 10:36 ` Arnaldo Carvalho de Melo
2015-12-15 12:13 ` Namhyung Kim
2015-12-15 12:24 ` Jiri Olsa
2015-12-15 12:42 ` Namhyung Kim
2015-12-15 12:52 ` Jiri Olsa
2015-12-14 17:47 ` Arnaldo Carvalho de Melo [this message]
2015-12-14 22:32 ` [RFC/PATCHSET 0/6] perf tools: Support dynamic sort keys for tracepoints (v1) David Ahern
2015-12-15 1:41 ` Namhyung Kim
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=20151214174723.GT6843@kernel.org \
--to=acme@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=fweisbec@gmail.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=rostedt@goodmis.org \
--cc=wangnan0@huawei.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