16 Jul, 2011

1 commit

  • Support adding probes on offline kernel modules. This enables
    perf-probe to trace kernel-module init functions via perf-probe.
    If user gives the path of module with -m option, perf-probe
    expects the module is offline.
    This feature works with --add, --funcs, and --vars.

    E.g)
    # perf probe -m /lib/modules/`uname -r`/kernel/fs/btrfs/btrfs.ko \
    -a "extent_io_init:5 extent_state_cache"
    Add new events:
    probe:extent_io_init (on extent_io_init:5 with extent_state_cache)
    probe:extent_io_init_1 (on extent_io_init:5 with extent_state_cache)

    You can now use it on all perf tools, such as:

    perf record -e probe:extent_io_init_1 -aR sleep 1

    Signed-off-by: Masami Hiramatsu
    Cc: Peter Zijlstra
    Cc: Frederic Weisbecker
    Cc: Paul Mackerras
    Cc: Ingo Molnar
    Cc: Arnaldo Carvalho de Melo
    Link: http://lkml.kernel.org/r/20110627072751.6528.10230.stgit@fedora15
    Signed-off-by: Steven Rostedt

    Masami Hiramatsu
     

05 Jul, 2011

1 commit

  • Add an option to perf report/annotate/script to specify which
    CPUs to operate on. This enables us to take a single system wide
    profile and analyse each CPU (or group of CPUs) in isolation.

    This was useful when profiling a multiprocess workload where the
    bottleneck was on one CPU but this was hidden in the overall
    profile. Per process and per thread breakdowns didn't help
    because multiple processes were running on each CPU and no
    single process consumed an entire CPU.

    The patch converts the list of CPUs returned by cpu_map__new
    into a bitmap for fast lookup. I wanted to use -C to be
    consistent with perf top/record/stat, but unfortunately perf
    report already uses -C .

    v2: Incorporate suggestions from David Ahern:
    - Added -c to perf script
    - Check that SAMPLE_CPU is set when -c is used
    - Update documentation

    v3: Create perf_session__cpu_bitmap()

    Signed-off-by: Anton Blanchard
    Acked-by: David Ahern
    Cc: Arnaldo Carvalho de Melo
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Link: http://lkml.kernel.org/r/20110704215750.11647eb9@kryten
    Signed-off-by: Ingo Molnar

    Anton Blanchard
     

30 Jun, 2011

1 commit

  • Add "caller/callee" option to support inverted butterfly report,
    in the inverted report (with caller option), the call graph start
    from the callee's ancestor. Users can use such view to catch system's
    performance bottleneck from a sysprof like view. Using this option
    with specified sort order like pid gives us high level view of call
    graph statistics.

    Also add "-G" alias for inverted call graph.

    Signed-off-by: Sam Liao
    Cc: Ingo Molnar
    Cc: Peter Zijlstra
    Cc: Arnaldo Carvalho de Melo
    Cc: Stephane Eranian
    Cc: David Ahern
    Signed-off-by: Frederic Weisbecker

    Sam Liao
     

03 Jun, 2011

3 commits

  • Resolve to a function or variable if possible and if the sym option is
    enabled.

    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1306782503-22002-1-git-send-email-dsahern@gmail.com
    Signed-off-by: David Ahern
    Signed-off-by: Arnaldo Carvalho de Melo

    David Ahern
     
  • The 'sym' option displays both the function name and the DSO it comes
    from. Split the display of the dso into a separate option. This allows
    display of the ip address and symbol without the dso, thus shortening
    line lengths - and decluttering the output a bit.

    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1306528124-25861-3-git-send-email-dsahern@gmail.com
    Signed-off-by: David Ahern
    Signed-off-by: Arnaldo Carvalho de Melo

    David Ahern
     
  • Currently the "sym" output field is used to dump instruction pointers
    and callchain stack. Sample addresses can also be converted to symbols,
    so the meaning of "sym" needs to be fixed. This patch adds an "ip"
    option and if it is selected the user can also opt to dump symbols for
    them. If the user opts to dump IP without syms only the address is
    shown.

    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Link: http://lkml.kernel.org/r/1306528124-25861-2-git-send-email-dsahern@gmail.com
    Signed-off-by: David Ahern
    Signed-off-by: Arnaldo Carvalho de Melo

    David Ahern
     

20 May, 2011

1 commit

  • …kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

    * 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (60 commits)
    sched: Fix and optimise calculation of the weight-inverse
    sched: Avoid going ahead if ->cpus_allowed is not changed
    sched, rt: Update rq clock when unthrottling of an otherwise idle CPU
    sched: Remove unused parameters from sched_fork() and wake_up_new_task()
    sched: Shorten the construction of the span cpu mask of sched domain
    sched: Wrap the 'cfs_rq->nr_spread_over' field with CONFIG_SCHED_DEBUG
    sched: Remove unused 'this_best_prio arg' from balance_tasks()
    sched: Remove noop in alloc_rt_sched_group()
    sched: Get rid of lock_depth
    sched: Remove obsolete comment from scheduler_tick()
    sched: Fix sched_domain iterations vs. RCU
    sched: Next buddy hint on sleep and preempt path
    sched: Make set_*_buddy() work on non-task entities
    sched: Remove need_migrate_task()
    sched: Move the second half of ttwu() to the remote cpu
    sched: Restructure ttwu() some more
    sched: Rename ttwu_post_activation() to ttwu_do_wakeup()
    sched: Remove rq argument from ttwu_stat()
    sched: Remove rq->lock from the first half of ttwu()
    sched: Drop rq->lock from sched_exec()
    ...

    * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    sched: Fix rt_rq runtime leakage bug

    Linus Torvalds
     

24 Apr, 2011

1 commit

  • Neil Brown pointed out that lock_depth somehow escaped the BKL
    removal work. Let's get rid of it now.

    Note that the perf scripting utilities still have a bunch of
    code for dealing with common_lock_depth in tracepoints; I have
    left that in place in case anybody wants to use that code with
    older kernels.

    Suggested-by: Neil Brown
    Signed-off-by: Jonathan Corbet
    Cc: Arnd Bergmann
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    Cc: Linus Torvalds
    Cc: Andrew Morton
    Link: http://lkml.kernel.org/r/20110422111910.456c0e84@bike.lwn.net
    Signed-off-by: Ingo Molnar

    Jonathan Corbet
     

31 Mar, 2011

1 commit


15 Mar, 2011

4 commits

  • [root@emilia ~]# perf record -a -e sched:* -e timer:timer* sleep 5
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.172 MB perf.data (~7530 samples) ]
    [root@emilia ~]# perf evlist
    sched:sched_kthread_stop
    sched:sched_kthread_stop_ret
    sched:sched_wakeup
    sched:sched_wakeup_new
    sched:sched_switch
    sched:sched_migrate_task
    sched:sched_process_free
    sched:sched_process_exit
    sched:sched_wait_task
    sched:sched_process_wait
    sched:sched_process_fork
    sched:sched_stat_wait
    sched:sched_stat_sleep
    sched:sched_stat_iowait
    sched:sched_stat_runtime
    sched:sched_pi_setprio
    timer:timer_init
    timer:timer_start
    timer:timer_expire_entry
    timer:timer_expire_exit
    timer:timer_cancel
    [root@emilia ~]#

    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Mike Galbraith
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Cc: Tom Zanussi
    LKML-Reference:
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Custom fields set for each type by prepending field argument with type.
    For file with multiple event types (e.g., trace and S/W) display of an
    event type suppressed by setting output fields to "".

    e.g.,
    perf record -ga -e sched:sched_switch -e cpu-clock -c 10000000 -R -- sleep 1
    perf script

    openssl 11496 [000] 9711.807107: cpu-clock-msecs:
    ffffffff810c22dc arch_local_irq_restore ([kernel.kallsyms])
    ffffffff810c518c __alloc_pages_nodemask ([kernel.kallsyms])
    ffffffff810297b2 pte_alloc_one ([kernel.kallsyms])
    ffffffff810d8b98 __pte_alloc ([kernel.kallsyms])
    ffffffff810daf07 handle_mm_fault ([kernel.kallsyms])
    ffffffff8138763a do_page_fault ([kernel.kallsyms])
    ffffffff81384a65 page_fault ([kernel.kallsyms])
    7f6130507d70 asn1_check_tlen (/lib64/libcrypto.so.1.0.0c)
    0 ()

    openssl 11496 [000] 9711.808042: sched_switch: prev_comm=openssl ...
    kworker/0:0 4 [000] 9711.808067: sched_switch: prev_comm=kworker/...
    swapper 0 [001] 9711.808090: sched_switch: prev_comm=kworker/...
    sshd 11451 [001] 9711.808185: sched_switch: prev_comm=sshd pre...
    swapper 0 [001] 9711.816155: cpu-clock-msecs:
    ffffffff81023609 native_safe_halt ([kernel.kallsyms])
    ffffffff8100132a cpu_idle ([kernel.kallsyms])
    ffffffff8137cf9b start_secondary ([kernel.kallsyms])

    openssl 11496 [000] 9711.817104: cpu-clock-msecs:
    7f61304ad723 AES_cbc_encrypt (/lib64/libcrypto.so.1.0.0c)
    7fff3402f950 ()
    12f0debc9a785634 ()

    swapper 0 [001] 9711.826155: cpu-clock-msecs:
    ffffffff81023609 native_safe_halt ([kernel.kallsyms])
    ffffffff8100132a cpu_idle ([kernel.kallsyms])
    ffffffff8137cf9b start_secondary ([kernel.kallsyms])

    To suppress trace events within the file and use default output for S/W events:
    perf script -f trace:

    or to suppress S/W events and do default display for trace events:
    perf script -f sw:

    Custom field selections:
    perf script -f sw:comm,tid,time -f trace:time,trace

    openssl 11496 9711.797162:
    swapper 0 9711.807071:
    openssl 11496 9711.807107:
    9711.808042: prev_comm=openssl prev_pid=11496 prev_prio=120 prev_state=R ...
    9711.808067: prev_comm=kworker/0:0 prev_pid=4 prev_prio=120 prev_state=S ...
    9711.808090: prev_comm=kworker/0:0 prev_pid=0 prev_prio=120 prev_state=R ...
    9711.808185: prev_comm=sshd prev_pid=11451 prev_prio=120 prev_state=S ==>...
    swapper 0 9711.816155:
    openssl 11496 9711.817104:
    swapper 0 9711.826155:

    Acked-by: Frederic Weisbecker
    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    LKML-Reference:
    Signed-off-by: David Ahern
    Signed-off-by: Arnaldo Carvalho de Melo

    David Ahern
     
  • Add option to dump symbols found in events.

    e.g., perf script -f comm,pid,tid,time,trace,sym

    swapper 0/0 537.037184: prev_comm=swapper prev_pid=0 prev_prio=120...
    ffffffff81030350 perf_trace_sched_switch ([kernel.kallsyms])
    ffffffff81382ac5 schedule ([kernel.kallsyms])
    ffffffff8100134a cpu_idle ([kernel.kallsyms])
    ffffffff81370b39 rest_init ([kernel.kallsyms])
    ffffffff81696c23 start_kernel ([kernel.kallsyms].init.text)
    ffffffff816962af x86_64_start_reservations ([kernel.kallsyms].init.text)
    ffffffff816963b9 x86_64_start_kernel ([kernel.kallsyms].init.text)

    sshd 1675/1675 537.037309: prev_comm=sshd prev_pid=1675 prev_prio=120...
    ffffffff81030350 perf_trace_sched_switch ([kernel.kallsyms])
    ffffffff81382ac5 schedule ([kernel.kallsyms])
    ffffffff813837aa schedule_hrtimeout_range_clock ([kernel.kallsyms])
    ffffffff81383886 schedule_hrtimeout_range ([kernel.kallsyms])
    ffffffff8110c4f9 poll_schedule_timeout ([kernel.kallsyms])
    ffffffff8110cd20 do_select ([kernel.kallsyms])
    ffffffff8110ced8 core_sys_select ([kernel.kallsyms])
    ffffffff8110d00d sys_select ([kernel.kallsyms])
    ffffffff81002bc2 system_call ([kernel.kallsyms])
    7f1647e56e93 __GI_select (/lib64/libc-2.12.90.so)

    netstat 1692/1692 537.038664: prev_comm=netstat prev_pid=1692 prev_prio=...
    ffffffff81030350 perf_trace_sched_switch ([kernel.kallsyms])
    ffffffff81382ac5 schedule ([kernel.kallsyms])
    ffffffff81002c3a sysret_careful ([kernel.kallsyms])
    7f7a6cd1b210 __GI___libc_read (/lib64/libc-2.12.90.so)

    Acked-by: Frederic Weisbecker
    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    LKML-Reference:
    Signed-off-by: David Ahern
    Signed-off-by: Arnaldo Carvalho de Melo

    David Ahern
     
  • Allow a user to select which fields to print to stdout for event data.
    Options include comm (command name), tid (thread id), pid (process id),
    time (perf timestamp), cpu, event (for event name), and trace (for
    trace data).

    Default is set to maintain compatibility with current output; this
    feature does alter output format slightly -- no '-' between command
    and pid/tid.

    Thanks to Frederic Weisbecker for detailed suggestions on this approach.

    Examples (output compressed)

    1. trace, default format

    perf record -ga -e sched:sched_switch
    perf script

    swapper 0 [000] 537.037184: sched_switch: prev_comm=swapper prev_pid=0...
    sshd 1675 [000] 537.037309: sched_switch: prev_comm=sshd prev_pid=1675...
    netstat 1692 [001] 537.038664: sched_switch: prev_comm=netstat prev_pid=1692...

    2. trace, custom format

    perf record -ga -e sched:sched_switch
    perf script -f comm,pid,time,trace
    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Thomas Gleixner
    LKML-Reference:
    Signed-off-by: David Ahern
    Signed-off-by: Arnaldo Carvalho de Melo

    David Ahern
     

23 Feb, 2011

1 commit


18 Feb, 2011

1 commit

  • The man page has the details, here are some examples:

    [root@emilia ~]# perf list *fault* *:*wait*

    List of pre-defined events (to be used in -e):
    page-faults OR faults [Software event]
    minor-faults [Software event]
    major-faults [Software event]
    alignment-faults [Software event]
    emulation-faults [Software event]

    radeon:radeon_fence_wait_begin [Tracepoint event]
    radeon:radeon_fence_wait_end [Tracepoint event]
    writeback:wbc_writeback_wait [Tracepoint event]
    writeback:wbc_balance_dirty_wait [Tracepoint event]
    writeback:writeback_congestion_wait [Tracepoint event]
    writeback:writeback_wait_iff_congested [Tracepoint event]
    sched:sched_wait_task [Tracepoint event]
    sched:sched_process_wait [Tracepoint event]
    sched:sched_stat_wait [Tracepoint event]
    sched:sched_stat_iowait [Tracepoint event]
    syscalls:sys_enter_epoll_wait [Tracepoint event]
    syscalls:sys_exit_epoll_wait [Tracepoint event]
    syscalls:sys_enter_epoll_pwait [Tracepoint event]
    syscalls:sys_exit_epoll_pwait [Tracepoint event]
    syscalls:sys_enter_rt_sigtimedwait [Tracepoint event]
    syscalls:sys_exit_rt_sigtimedwait [Tracepoint event]
    syscalls:sys_enter_waitid [Tracepoint event]
    syscalls:sys_exit_waitid [Tracepoint event]
    syscalls:sys_enter_wait4 [Tracepoint event]
    syscalls:sys_exit_wait4 [Tracepoint event]
    syscalls:sys_enter_waitpid [Tracepoint event]
    syscalls:sys_exit_waitpid [Tracepoint event]
    [root@emilia ~]#

    Suggested-by: Ingo Molnar
    Cc: Frederic Weisbecker
    Cc: Ingo Molnar
    Cc: Mike Galbraith
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Cc: Tom Zanussi
    LKML-Reference:
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

17 Feb, 2011

2 commits


16 Feb, 2011

1 commit

  • This patch adds the ability to filter monitoring based on container groups
    (cgroups) for both perf stat and perf record. It is possible to monitor
    multiple cgroup in parallel. There is one cgroup per event. The cgroups to
    monitor are passed via a new -G option followed by a comma separated list of
    cgroup names.

    The cgroup filesystem has to be mounted. Given a cgroup name, the perf tool
    finds the corresponding directory in the cgroup filesystem and opens it. It
    then passes that file descriptor to the kernel.

    Example:

    $ perf stat -B -a -e cycles:u,cycles:u,cycles:u -G test1,,test2 -- sleep 1
    Performance counter stats for 'sleep 1':

    2,368,667,414 cycles test1
    2,369,661,459 cycles
    cycles test2

    1.001856890 seconds time elapsed

    Signed-off-by: Stephane Eranian
    Signed-off-by: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Stephane Eranian
     

28 Jan, 2011

2 commits

  • Add filters support for available function list.

    Default filter is "!_*" for filtering out local-purpose symbols.

    e.g.:
    # perf probe --filter="add*" -F
    add_disk
    add_disk_randomness
    add_input_randomness
    add_interrupt_randomness
    add_memory
    add_page_to_unevictable_list
    add_page_wait_queue
    ...

    Cc: 2nddept-manager@sdl.hitachi.co.jp
    Cc: Chase Douglas
    Cc: Franck Bui-Huu
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Steven Rostedt
    LKML-Reference:
    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Arnaldo Carvalho de Melo

    Masami Hiramatsu
     
  • Add filters support for available variable list.

    Default filter is "!__k???tab_*&!__crc_*" for filtering out
    automatically generated symbols.

    The format of filter rule is "[!]GLOBPATTERN", so you can use wild
    cards. If the filter rule starts with '!', matched variables are filter
    out.

    e.g.:
    # perf probe -V schedule --externs --filter=cpu*
    Available variables at schedule
    @
    cpumask_var_t cpu_callout_mask
    cpumask_var_t cpu_core_map
    cpumask_var_t cpu_isolated_map
    cpumask_var_t cpu_sibling_map
    int cpu_number
    long unsigned int* cpu_bit_bitmap
    ...

    Cc: 2nddept-manager@sdl.hitachi.co.jp
    Cc: Chase Douglas
    Cc: Franck Bui-Huu
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Steven Rostedt
    LKML-Reference:
    Signed-off-by: Masami Hiramatsu
    [ committer note: Removed the elf.h include as it was fixed up in e80711c]
    Signed-off-by: Arnaldo Carvalho de Melo

    Masami Hiramatsu
     

24 Jan, 2011

1 commit

  • Add --funcs to show available functions in symtab.

    Originally this feature came from Srikar's uprobes patches
    ( http://lkml.org/lkml/2010/8/27/244 )

    e.g.
    ...
    __ablkcipher_walk_complete
    __absent_pages_in_range
    __account_scheduler_latency
    __add_pages
    __alloc_pages_nodemask
    __alloc_percpu
    __alloc_reserved_percpu
    __alloc_skb
    __alloc_workqueue_key
    __any_online_cpu
    __ata_ehi_push_desc
    ...

    This also supports symbols in module, e.g.

    ...
    cleanup_module
    cpuid_maxphyaddr
    emulate_clts
    emulate_instruction
    emulate_int_real
    emulate_invlpg
    emulator_get_dr
    emulator_set_dr
    emulator_task_switch
    emulator_write_emulated
    emulator_write_phys
    fx_init
    ...

    Original-patch-from: Srikar Dronamraju
    Cc: 2nddept-manager@sdl.hitachi.co.jp
    Cc: Franck Bui-Huu
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Steven Rostedt
    LKML-Reference:
    Signed-off-by: Masami Hiramatsu
    [ committer note: Add missing elf.h for STB_GLOBAL that broke a RHEL4 build ]
    Signed-off-by: Arnaldo Carvalho de Melo

    Masami Hiramatsu
     

13 Jan, 2011

1 commit

  • Sometimes there is a need to use perf in "live-log" mode. The problem
    is, for seldom events, actual info output is largely delayed because
    perf-record reads sample data in whole pages.

    So for such scenarious, add flag for perf-record to go in "nodelay"
    mode. To track e.g. what's going on in icmp_rcv while ping is running
    Use it with something like this:

    (1) $ perf probe -L icmp_rcv | grep -U8 '^ *43\>'
    goto error;
    }
    38 if (!pskb_pull(skb, sizeof(*icmph)))
    goto error;
    icmph = icmp_hdr(skb);

    43 ICMPMSGIN_INC_STATS_BH(net, icmph->type);
    /*
    * 18 is the highest 'known' ICMP type. Anything else is a mystery
    *
    * RFC 1122: 3.2.2 Unknown ICMP messages types MUST be silently
    * discarded.
    */
    50 if (icmph->type > NR_ICMP_TYPES)
    goto error;

    $ perf probe icmp_rcv:43 'type=icmph->type'

    (2) $ cat trace-icmp.py
    [...]
    def trace_begin():
    print "in trace_begin"

    def trace_end():
    print "in trace_end"

    def probe__icmp_rcv(event_name, context, common_cpu,
    common_secs, common_nsecs, common_pid, common_comm,
    __probe_ip, type):
    print_header(event_name, common_cpu, common_secs, common_nsecs,
    common_pid, common_comm)

    print "__probe_ip=%u, type=%u\n" % \
    (__probe_ip, type),
    [...]

    (3) $ perf record -a -D -e probe:icmp_rcv -o - | \
    perf script -i - -s trace-icmp.py

    Thanks to Peter Zijlstra for pointing how to do it.

    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    Cc: Ingo Molnar , Mike Galbraith
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Cc: Tom Zanussi
    LKML-Reference:
    Signed-off-by: Kirill Smelkov
    Signed-off-by: Arnaldo Carvalho de Melo

    Kirill Smelkov
     

22 Dec, 2010

2 commits


09 Dec, 2010

1 commit


05 Dec, 2010

1 commit

  • So that we can use -T == --timestamp, asking for PERF_SAMPLE_TIME:

    $ perf record -aT
    $ perf report -D | grep PERF_RECORD_

    3 5951915425 0x47530 [0x58]: PERF_RECORD_SAMPLE(IP, 1): 16811/16811: 0xffffffff8138c1a2 period: 215979 cpu:3
    3 5952026879 0x47588 [0x90]: PERF_RECORD_SAMPLE(IP, 1): 16811/16811: 0xffffffff810cb480 period: 215979 cpu:3
    3 5952059959 0x47618 [0x38]: PERF_RECORD_FORK(6853:6853):(16811:16811)
    3 5952138878 0x47650 [0x78]: PERF_RECORD_SAMPLE(IP, 1): 16811/16811: 0xffffffff811bac35 period: 431478 cpu:3
    3 5952375068 0x476c8 [0x30]: PERF_RECORD_COMM: find:6853
    3 5952395923 0x476f8 [0x50]: PERF_RECORD_MMAP 6853/6853: [0x400000(0x25000) @ 0]: /usr/bin/find
    3 5952413756 0x47748 [0xa0]: PERF_RECORD_SAMPLE(IP, 1): 6853/6853: 0xffffffff810d080f period: 859332 cpu:3
    3 5952419837 0x477e8 [0x58]: PERF_RECORD_MMAP 6853/6853: [0x3f44600000(0x21d000) @ 0]: /lib64/ld-2.5.so
    3 5952437929 0x47840 [0x48]: PERF_RECORD_MMAP 6853/6853: [0x7fff7e1c9000(0x1000) @ 0x7fff7e1c9000]: [vdso]
    3 5952570127 0x47888 [0x58]: PERF_RECORD_MMAP 6853/6853: [0x3f46200000(0x218000) @ 0]: /lib64/libselinux.so.1
    3 5952623637 0x478e0 [0x58]: PERF_RECORD_MMAP 6853/6853: [0x3f44a00000(0x356000) @ 0]: /lib64/libc-2.5.so
    3 5952675720 0x47938 [0x58]: PERF_RECORD_MMAP 6853/6853: [0x3f44e00000(0x204000) @ 0]: /lib64/libdl-2.5.so
    3 5952710080 0x47990 [0x58]: PERF_RECORD_MMAP 6853/6853: [0x3f45a00000(0x246000) @ 0]: /lib64/libsepol.so.1
    3 5952847802 0x479e8 [0x58]: PERF_RECORD_SAMPLE(IP, 1): 6853/6853: 0xffffffff813897f0 period: 1142536 cpu:3

    First column is the cpu and the second the timestamp.

    That way we can investigate problems in the event stream.

    If the new perf binary is run on an older kernel, it will disable this feature
    automatically.

    Tested-by: Thomas Gleixner
    Reviewed-by: Thomas Gleixner
    Acked-by: Ian Munsie
    Acked-by: Thomas Gleixner
    Cc: Frédéric Weisbecker
    Cc: Ian Munsie
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Stephane Eranian
    LKML-Reference:
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

02 Dec, 2010

14 commits

  • …inux-2.6 into perf/core

    Ingo Molnar
     
  • This patch adds an option (-x/--field-separator) to print counts using a
    CSV-style output. The user can pass a custom separator. This makes it very easy
    to import counts directly into your favorite spreadsheet without having to
    write scripts.

    Example:
    $ perf stat --field-separator=, -a -- sleep 1
    4009.961740,task-clock-msecs
    13,context-switches
    2,CPU-migrations
    189,page-faults
    9596385684,cycles
    3493659441,instructions
    872897069,branches
    41562,branch-misses
    22424,cache-references
    1289,cache-misses

    Works also in non-aggregated mode:

    $ perf stat -x , -a -A -- sleep 1
    CPU0,1002.526168,task-clock-msecs
    CPU1,1002.528365,task-clock-msecs
    CPU2,1002.523360,task-clock-msecs
    CPU3,1002.519878,task-clock-msecs
    CPU0,1,context-switches
    CPU1,5,context-switches
    CPU2,5,context-switches
    CPU3,6,context-switches
    CPU0,0,CPU-migrations
    CPU1,1,CPU-migrations
    CPU2,0,CPU-migrations
    CPU3,1,CPU-migrations
    CPU0,2,page-faults
    CPU1,6,page-faults
    CPU2,9,page-faults
    CPU3,174,page-faults
    CPU0,2399439771,cycles
    CPU1,2380369063,cycles
    CPU2,2399142710,cycles
    CPU3,2373161192,cycles
    CPU0,872900618,instructions
    CPU1,873030960,instructions
    CPU2,872714525,instructions
    CPU3,874460580,instructions
    CPU0,221556839,branches
    CPU1,218134342,branches
    CPU2,218161730,branches
    CPU3,218284093,branches
    CPU0,18556,branch-misses
    CPU1,1449,branch-misses
    CPU2,3447,branch-misses
    CPU3,12714,branch-misses
    CPU0,8330,cache-references
    CPU1,313844,cache-references
    CPU2,47993728,cache-references
    CPU3,826481,cache-references
    CPU0,272,cache-misses
    CPU1,5360,cache-misses
    CPU2,1342193,cache-misses
    CPU3,13992,cache-misses

    This second version adds the ability to name a separator and uses
    field-separator as the long option to be consistent with perf report.

    Commiter note: Since we enabled --big-num by default in 201e0b0 and -x can't be
    used with it, we need to notice if the user explicitely enabled or disabled -B,
    add code to disable big_num if the user didn't explicitely set --big_num when
    -x is used.

    Cc: David S. Miller
    Cc: Frederik Weisbecker
    Cc: Ingo Molnar
    Cc: paulus@samba.org
    Cc: Peter Zijlstra
    Cc: Robert Richter
    LKML-Reference:
    Signed-off-by: Stephane Eranian
    Signed-off-by: Arnaldo Carvalho de Melo

    Stephane Eranian
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Acked-by: Masami Hiramatsu
    Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer
     
  • Cc: Ingo Molnar
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Shawn Bohrer
    Signed-off-by: Arnaldo Carvalho de Melo

    Shawn Bohrer