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

2015-12-14 Thread Namhyung Kim
Hi David and Arnaldo,

On Mon, Dec 14, 2015 at 03:32:06PM -0700, David Ahern wrote:
> On 12/14/15 10:47 AM, Arnaldo Carvalho de Melo wrote:
> >>With dynamic sort keys, you can use  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  Commandnext_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%  Xephyr0
> >>1.98%  swapper6524
> >>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  Commandnext_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%  swapper6524Xephyr
> >>1.98%  swapper   27478   netctl-auto
> >>1.78%  transmission-gt   0 swapper/3
> >>1.53%  Xephyr0 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 233irq/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 :-)

Hehe, thanks!


> 
> yes, that is a cool feature.
> 
> For scheduling tracepoints the analysis could be added to perf-sched to ease
> the burden of the command line syntax.

Yes, the existing tracepoints analysis command might use or wrap it.

For command line syntax, I think it'd be better to provide shorter way
to identify the events - like (non-ambiguous) substring match or
positional parameter (e.g. %1 for first event).

For example, the last example above can be:

  $ perf report -s comm,switch.next_pid,switch.next_comm

or

  $ perf report -s comm,%1.next_pid,%1.next_comm


Thanks,
Namhyung
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


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

2015-12-14 Thread David Ahern

On 12/14/15 10:47 AM, Arnaldo Carvalho de Melo wrote:

With dynamic sort keys, you can use  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  Commandnext_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%  Xephyr0
1.98%  swapper6524
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  Commandnext_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%  swapper6524Xephyr
1.98%  swapper   27478   netctl-auto
1.78%  transmission-gt   0 swapper/3
1.53%  Xephyr0 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 233irq/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 :-)



yes, that is a cool feature.

For scheduling tracepoints the analysis could be added to perf-sched to 
ease the burden of the command line syntax.



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


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

2015-12-14 Thread Arnaldo Carvalho de Melo
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  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  Commandnext_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%  Xephyr0
>1.98%  swapper6524
>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  Commandnext_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%  swapper6524Xephyr
>1.98%  swapper   27478   netctl-auto
>1.78%  transmission-gt   0 swapper/3
>1.53%  Xephyr0 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 233irq/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
> 
>   

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

2015-12-14 Thread Namhyung Kim
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  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  Commandnext_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%  Xephyr0
   1.98%  swapper6524
   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  Commandnext_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%  swapper6524Xephyr
   1.98%  swapper   27478   netctl-auto
   1.78%  transmission-gt   0 swapper/3
   1.53%  Xephyr0 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 233irq/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


Namhyung Kim (6):
  perf hist: Pass struct sample to __hists__add_entry()
  perf hist: Save raw_data/size for tracepoint events
  tools lib traceevent: Factor out and export 

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

2015-12-14 Thread Namhyung Kim
Hi David and Arnaldo,

On Mon, Dec 14, 2015 at 03:32:06PM -0700, David Ahern wrote:
> On 12/14/15 10:47 AM, Arnaldo Carvalho de Melo wrote:
> >>With dynamic sort keys, you can use  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  Commandnext_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%  Xephyr0
> >>1.98%  swapper6524
> >>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  Commandnext_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%  swapper6524Xephyr
> >>1.98%  swapper   27478   netctl-auto
> >>1.78%  transmission-gt   0 swapper/3
> >>1.53%  Xephyr0 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 233irq/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 :-)

Hehe, thanks!


> 
> yes, that is a cool feature.
> 
> For scheduling tracepoints the analysis could be added to perf-sched to ease
> the burden of the command line syntax.

Yes, the existing tracepoints analysis command might use or wrap it.

For command line syntax, I think it'd be better to provide shorter way
to identify the events - like (non-ambiguous) substring match or
positional parameter (e.g. %1 for first event).

For example, the last example above can be:

  $ perf report -s comm,switch.next_pid,switch.next_comm

or

  $ perf report -s comm,%1.next_pid,%1.next_comm


Thanks,
Namhyung
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


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

2015-12-14 Thread Namhyung Kim
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  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  Commandnext_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%  Xephyr0
   1.98%  swapper6524
   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  Commandnext_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%  swapper6524Xephyr
   1.98%  swapper   27478   netctl-auto
   1.78%  transmission-gt   0 swapper/3
   1.53%  Xephyr0 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 233irq/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


Namhyung Kim (6):
  perf hist: Pass struct sample to __hists__add_entry()
  perf hist: Save raw_data/size for tracepoint events
  tools lib traceevent: Factor out and export 

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

2015-12-14 Thread Arnaldo Carvalho de Melo
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  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  Commandnext_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%  Xephyr0
>1.98%  swapper6524
>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  Commandnext_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%  swapper6524Xephyr
>1.98%  swapper   27478   netctl-auto
>1.78%  transmission-gt   0 swapper/3
>1.53%  Xephyr0 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 233irq/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
> 
>   

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

2015-12-14 Thread David Ahern

On 12/14/15 10:47 AM, Arnaldo Carvalho de Melo wrote:

With dynamic sort keys, you can use  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  Commandnext_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%  Xephyr0
1.98%  swapper6524
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  Commandnext_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%  swapper6524Xephyr
1.98%  swapper   27478   netctl-auto
1.78%  transmission-gt   0 swapper/3
1.53%  Xephyr0 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 233irq/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 :-)



yes, that is a cool feature.

For scheduling tracepoints the analysis could be added to perf-sched to 
ease the burden of the command line syntax.



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