Re: [RFC/PATCHSET 0/6] perf tools: Support dynamic sort keys for tracepoints (v1)

From: Arnaldo Carvalho de Melo
Date: Mon Dec 14 2015 - 12:47:33 EST


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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/