Ingo Molnar bed9441ba7 perf/core improvements:
- Automagically create a 'bpf-output' event, easing the setup of BPF
   C "scripts" that produce output via the perf ring buffer. Now it is
   just a matter of calling any perf tool, such as 'trace', with a C
   source file that references the __bpf_stdout__ output channel and
   that channel will be created and connected to the script:
 
   # trace -e nanosleep --event test_bpf_stdout.c usleep 1
     0.013 ( 0.013 ms): usleep/2818 nanosleep(rqtp: 0x7ffcead45f40                                        ) ...
     0.013 (         ): __bpf_stdout__:Raise a BPF event!..)
     0.015 (         ): perf_bpf_probe:func_begin:(ffffffff81112460))
     0.261 (         ): __bpf_stdout__:Raise a BPF event!..)
     0.262 (         ): perf_bpf_probe:func_end:(ffffffff81112460 <- ffffffff81003d92))
     0.264 ( 0.264 ms): usleep/2818  ... [continued]: nanosleep()) = 0
   #
 
   Further work is needed to reduce the number of lines in a perf bpf C source
   file, this being the part where we greatly reduce the command line setup (Wang Nan)
 
 - 'perf trace' now supports callchains, with 'trace --call-graph dwarf' using
   libunwind, just like 'perf top', to ask the kernel for stack dumps for CFI
   processing. This reduces the overhead by asking just for userspace callchains
   and also only for the syscall exit tracepoint (raw_syscalls:sys_exit)
   (Milian Wolff, Arnaldo Carvalho de Melo)
 
   Try it with, for instance:
 
      # perf trace --call dwarf ping 127.0.0.1
 
   An excerpt of a system wide 'perf trace --call dwarf" session is at:
 
    https://fedorapeople.org/~acme/perf/perf-trace--call-graph-dwarf--all-cpus.txt
 
   You may need to bump the number of mmap pages, using -m/--mmap-pages,
   but on a Broadwell machine the defaults allowed system wide tracing to
   work without losing that many records, experiment with just some
   syscalls, like:
 
     # perf trace --call dwarf -e nanosleep,futex
 
   All the targets available for 'perf record', 'perf top' (--pid, --tid, --cpu,
   etc) should work. Also --duration may be interesting to try.
 
   To get filenames from in various syscalls pointer args (open, ettc), add this
   to the mix:
 
   # perf probe 'vfs_getname=getname_flags:72 pathname=filename:string'
 
   Making this work is next in line:
 
      # trace --call dwarf --ev sched:sched_switch/call-graph=fp/ usleep 1
 
   I.e. honouring per-tracepoint callchains in 'perf trace' in addition to
   in raw_syscalls:sys_exit.
 
 Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
 iQIcBAABCAAGBQJXDFQyAAoJENZQFvNTUqpAZCsP/2Q1Q8XfNpNZm7+JPrZDYUkm
 KBxR3WSP8l46G8hJO2SBKHgXDv6EOCsfL/lvtLv18IHrz9pSTLZFPgl3a889iOnz
 /d2pC/ydlDQ9yPR28cELb7gKMB0OF+rUqdZIWBqSM84LnvsYHgY6CntEIejfc2wf
 jiVYHkug2dcUOmfgFpV4Jp3m6J8Okf9w9+/W4n+mkcS6o9WJvKCCiTMWoOwDDkyQ
 gfEGN7YJt2iYLg4AhsG9ZJa+XKye53znjodpFNLCVbozXbZ4YSEbogR0qKJksHfH
 5uabD2bEu2y0LiC9694xp5FLFM9tGML3Nr0JAkq6Jd230Ho4XyUy+/ZD0Lq0BHnv
 HdIR7T4+wUYVKUf/ZW8gbPShR63UJ6qrgfLE8yZMxG0WKzh3XIQtg/BcxLw8XPi8
 aF/IQt/om2KXPVEZv6SjNMp9DdmydeZ4KPrA9q2BGhbQzC2Ast7e6pHKouxbRrpb
 mOSfLgDcqPFp75ZpIbFatKdg6S8VNKtFgF8wWAGrACtLboKa5PDS3El56BSNx2IA
 6pexLuhaD8ndwvHP1F6nQQAHvFn5q4FKEg2fU0Pq8VnUN8SxrCvVjZZR3SjM+tGy
 V5GHzJ7GTn9Cm2fwllrD/tndzPWQsbFA0UuLZPwVoxq2Lt2HC0YG30+SupsAVZrx
 fCANHt3ci+qU1OCQAlIP
 =jBSC
 -----END PGP SIGNATURE-----

Merge tag 'perf-core-for-mingo-20160411' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core

Pull perf/core improvements from Arnaldo Carvalho de Melo:

User visible changes:

- Automagically create a 'bpf-output' event, easing the setup of BPF
  C "scripts" that produce output via the perf ring buffer. Now it is
  just a matter of calling any perf tool, such as 'trace', with a C
  source file that references the __bpf_stdout__ output channel and
  that channel will be created and connected to the script:

  # trace -e nanosleep --event test_bpf_stdout.c usleep 1
    0.013 ( 0.013 ms): usleep/2818 nanosleep(rqtp: 0x7ffcead45f40                                        ) ...
    0.013 (         ): __bpf_stdout__:Raise a BPF event!..)
    0.015 (         ): perf_bpf_probe:func_begin:(ffffffff81112460))
    0.261 (         ): __bpf_stdout__:Raise a BPF event!..)
    0.262 (         ): perf_bpf_probe:func_end:(ffffffff81112460 <- ffffffff81003d92))
    0.264 ( 0.264 ms): usleep/2818  ... [continued]: nanosleep()) = 0
  #

  Further work is needed to reduce the number of lines in a perf bpf C source
  file, this being the part where we greatly reduce the command line setup (Wang Nan)

- 'perf trace' now supports callchains, with 'trace --call-graph dwarf' using
  libunwind, just like 'perf top', to ask the kernel for stack dumps for CFI
  processing. This reduces the overhead by asking just for userspace callchains
  and also only for the syscall exit tracepoint (raw_syscalls:sys_exit)
  (Milian Wolff, Arnaldo Carvalho de Melo)

  Try it with, for instance:

     # perf trace --call dwarf ping 127.0.0.1

  An excerpt of a system wide 'perf trace --call dwarf" session is at:

   https://fedorapeople.org/~acme/perf/perf-trace--call-graph-dwarf--all-cpus.txt

  You may need to bump the number of mmap pages, using -m/--mmap-pages,
  but on a Broadwell machine the defaults allowed system wide tracing to
  work without losing that many records, experiment with just some
  syscalls, like:

    # perf trace --call dwarf -e nanosleep,futex

  All the targets available for 'perf record', 'perf top' (--pid, --tid, --cpu,
  etc) should work. Also --duration may be interesting to try.

  To get filenames from in various syscalls pointer args (open, ettc), add this
  to the mix:

  # perf probe 'vfs_getname=getname_flags:72 pathname=filename:string'

  Making this work is next in line:

     # trace --call dwarf --ev sched:sched_switch/call-graph=fp/ usleep 1

  I.e. honouring per-tracepoint callchains in 'perf trace' in addition to
  in raw_syscalls:sys_exit.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
2016-04-13 09:02:07 +02:00
..
2016-04-07 10:21:49 -03:00
2016-04-13 09:02:07 +02:00