• Milian Wolff's avatar
    perf report: Include partial stacks unwound with libdw · 5ea0416f
    Milian Wolff authored
    So far the whole stack was thrown away when any error occurred before
    the maximum stack depth was unwound. This is actually a very common
    scenario though. The stacks that got unwound so far are still
    interesting. This removes a large chunk of differences when comparing
    perf script output for libunwind and libdw perf unwinding.
    
    E.g. with libunwind:
    
    ~~~~~
    heaptrack_gui  2228 135073.388524:     479408 cycles:
            ffffffff811749ed perf_iterate_ctx ([kernel.kallsyms])
            ffffffff81181662 perf_event_mmap ([kernel.kallsyms])
            ffffffff811cf5ed mmap_region ([kernel.kallsyms])
            ffffffff811cfe6b do_mmap ([kernel.kallsyms])
            ffffffff811b0dca vm_mmap_pgoff ([kernel.kallsyms])
            ffffffff811cdb0c sys_mmap_pgoff ([kernel.kallsyms])
            ffffffff81033acb sys_mmap ([kernel.kallsyms])
            ffffffff81631d37 entry_SYSCALL_64_fastpath ([kernel.kallsyms])
                       192ca mmap64 (/usr/lib/ld-2.25.so)
                        59a9 _dl_map_object_from_fd (/usr/lib/ld-2.25.so)
                        83d0 _dl_map_object (/usr/lib/ld-2.25.so)
                        cda1 openaux (/usr/lib/ld-2.25.so)
                       1834f _dl_catch_error (/usr/lib/ld-2.25.so)
                        cfe2 _dl_map_object_deps (/usr/lib/ld-2.25.so)
                        3481 dl_main (/usr/lib/ld-2.25.so)
                       17387 _dl_sysdep_start (/usr/lib/ld-2.25.so)
                        4d37 _dl_start (/usr/lib/ld-2.25.so)
                         d87 _start (/usr/lib/ld-2.25.so)
    
    heaptrack_gui  2228 135073.388677:     611329 cycles:
                       1a3e0 strcmp (/usr/lib/ld-2.25.so)
                        82b2 _dl_map_object (/usr/lib/ld-2.25.so)
                        cda1 openaux (/usr/lib/ld-2.25.so)
                       1834f _dl_catch_error (/usr/lib/ld-2.25.so)
                        cfe2 _dl_map_object_deps (/usr/lib/ld-2.25.so)
                        3481 dl_main (/usr/lib/ld-2.25.so)
                       17387 _dl_sysdep_start (/usr/lib/ld-2.25.so)
                        4d37 _dl_start (/usr/lib/ld-2.25.so)
                         d87 _start (/usr/lib/ld-2.25.so)
    ~~~~~
    
    With libdw without this patch:
    
    ~~~~~
    heaptrack_gui  2228 135073.388524:     479408 cycles:
            ffffffff811749ed perf_iterate_ctx ([kernel.kallsyms])
            ffffffff81181662 perf_event_mmap ([kernel.kallsyms])
            ffffffff811cf5ed mmap_region ([kernel.kallsyms])
            ffffffff811cfe6b do_mmap ([kernel.kallsyms])
            ffffffff811b0dca vm_mmap_pgoff ([kernel.kallsyms])
            ffffffff811cdb0c sys_mmap_pgoff ([kernel.kallsyms])
            ffffffff81033acb sys_mmap ([kernel.kallsyms])
            ffffffff81631d37 entry_SYSCALL_64_fastpath ([kernel.kallsyms])
    
    heaptrack_gui  2228 135073.388677:     611329 cycles:
    ~~~~~
    
    With this patch applied, the libdw unwinder will produce the same
    output as the libunwind unwinder.
    Signed-off-by: default avatarMilian Wolff <milian.wolff@kdab.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Link: http://lkml.kernel.org/r/20170601210021.20046-1-milian.wolff@kdab.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    5ea0416f
unwind-libdw.c 5.31 KB