• Milian Wolff's avatar
    perf trace: Add support for printing call chains on sys_exit events. · 566a0885
    Milian Wolff authored
    Now, one can print the call chain for every encountered sys_exit event,
    e.g.:
    
        $ perf trace -e nanosleep --call-graph dwarf path/to/ex_sleep
        1005.757 (1000.090 ms): ex_sleep/13167 nanosleep(...) = 0
                                                 syscall_slow_exit_work ([kernel.kallsyms])
                                                 syscall_return_slowpath ([kernel.kallsyms])
                                                 int_ret_from_sys_call ([kernel.kallsyms])
                                                 __nanosleep (/usr/lib/libc-2.23.so)
                                                 [unknown] (/usr/lib/libQt5Core.so.5.6.0)
                                                 QThread::sleep (/usr/lib/libQt5Core.so.5.6.0)
                                                 main (path/to/ex_sleep)
                                                 __libc_start_main (/usr/lib/libc-2.23.so)
                                                 _start (path/to/ex_sleep)
    
    Note that it is advised to increase the number of mmap pages to prevent
    event losses when using this new feature. Often, adding `-m 10M` to the
    `perf trace` invocation is enough.
    
    This feature is also available in strace when built with libunwind via
    `strace -k`. Performance wise, this solution is much better:
    
        $ time find path/to/linux &> /dev/null
    
        real    0m0.051s
        user    0m0.013s
        sys     0m0.037s
    
        $ time perf trace -m 800M --call-graph dwarf find path/to/linux &> /dev/null
    
        real    0m2.624s
        user    0m1.203s
        sys     0m1.333s
    
        $ time strace -k find path/to/linux  &> /dev/null
    
        real    0m35.398s
        user    0m10.403s
        sys     0m23.173s
    
    Note that it is currently not possible to configure the print output.
    Adding such a feature, similar to what is available in `perf script` via
    its `--fields` knob can be added later on.
    Signed-off-by: default avatarMilian Wolff <milian.wolff@kdab.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    LPU-Reference: 1460115255-17648-1-git-send-email-milian.wolff@kdab.com
    [ Split from a larger patch, do not print the IP, left align,
      remove dup call symbol__init(), added man page entry ]
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    566a0885
builtin-trace.c 92.3 KB