• Arnaldo Carvalho de Melo's avatar
    perf trace: Introduce --max-events · 5067a8cd
    Arnaldo Carvalho de Melo authored
    Allow stopping tracing after a number of events take place, considering
    strace-like syscalls formatting as one event per enter/exit pair or when
    in a multi-process tracing session a syscall is interrupted and printed
    ending with '...'.
    
    Examples included in the documentation:
    
    Trace the first 4 open, openat or open_by_handle_at syscalls (in the future more syscalls may match here):
    
      $ perf trace -e open* --max-events 4
      [root@jouet perf]# trace -e open* --max-events 4
      2272.992 ( 0.037 ms): gnome-shell/1370 openat(dfd: CWD, filename: /proc/self/stat) = 31
      2277.481 ( 0.139 ms): gnome-shell/3039 openat(dfd: CWD, filename: /proc/self/stat) = 65
      3026.398 ( 0.076 ms): gnome-shell/3039 openat(dfd: CWD, filename: /proc/self/stat) = 65
      4294.665 ( 0.015 ms): sed/15879 openat(dfd: CWD, filename: /etc/ld.so.cache, flags: CLOEXEC) = 3
      $
    
    Trace the first minor page fault when running a workload:
    
      # perf trace -F min --max-stack=7 --max-events 1 sleep 1
         0.000 ( 0.000 ms): sleep/18006 minfault [__clear_user+0x1a] => 0x5626efa56080 (?k)
                                           __clear_user ([kernel.kallsyms])
                                           load_elf_binary ([kernel.kallsyms])
                                           search_binary_handler ([kernel.kallsyms])
                                           __do_execve_file.isra.33 ([kernel.kallsyms])
                                           __x64_sys_execve ([kernel.kallsyms])
                                           do_syscall_64 ([kernel.kallsyms])
                                           entry_SYSCALL_64 ([kernel.kallsyms])
      #
    
    Trace the next min page page fault to take place on the first CPU:
    
      # perf trace -F min --call-graph=dwarf --max-events 1 --cpu 0
         0.000 ( 0.000 ms): Web Content/17136 minfault [js::gc::Chunk::fetchNextDecommittedArena+0x4b] => 0x7fbe6181b000 (?.)
                                           js::gc::FreeSpan::initAsEmpty (inlined)
                                           js::gc::Arena::setAsNotAllocated (inlined)
                                           js::gc::Chunk::fetchNextDecommittedArena (/usr/lib64/firefox/libxul.so)
                                           js::gc::Chunk::allocateArena (/usr/lib64/firefox/libxul.so)
                                           js::gc::GCRuntime::allocateArena (/usr/lib64/firefox/libxul.so)
                                           js::gc::ArenaLists::allocateFromArena (/usr/lib64/firefox/libxul.so)
                                           js::gc::GCRuntime::tryNewTenuredThing<JSString, (js::AllowGC)1> (inlined)
                                           js::AllocateString<JSString, (js::AllowGC)1> (/usr/lib64/firefox/libxul.so)
                                           js::Allocate<JSThinInlineString, (js::AllowGC)1> (inlined)
                                           JSThinInlineString::new_<(js::AllowGC)1> (inlined)
                                           AllocateInlineString<(js::AllowGC)1, unsigned char> (inlined)
                                           js::ConcatStrings<(js::AllowGC)1> (/usr/lib64/firefox/libxul.so)
                                           [0x18b26e6bc2bd] (/tmp/perf-17136.map)
    
    Tracing the next four ext4 operations on a specific CPU:
    
      # perf trace -e ext4:*/call-graph=fp/ --max-events 4 --cpu 3
         0.000 mutt/3849 ext4:ext4_es_lookup_extent_enter:dev 253,2 ino 57277 lblk 0
                                           ext4_es_lookup_extent ([kernel.kallsyms])
                                           read (/usr/lib64/libc-2.26.so)
         0.097 mutt/3849 ext4:ext4_es_lookup_extent_exit:dev 253,2 ino 57277 found 0 [0/0) 0
                                           ext4_es_lookup_extent ([kernel.kallsyms])
                                           read (/usr/lib64/libc-2.26.so)
         0.141 mutt/3849 ext4:ext4_ext_map_blocks_enter:dev 253,2 ino 57277 lblk 0 len 1 flags
                                           ext4_ext_map_blocks ([kernel.kallsyms])
                                           read (/usr/lib64/libc-2.26.so)
         0.184 mutt/3849 ext4:ext4_ext_load_extent:dev 253,2 ino 57277 lblk 1516511 pblk 18446744071750013657
                                           __read_extent_tree_block ([kernel.kallsyms])
                                           __read_extent_tree_block ([kernel.kallsyms])
                                           ext4_find_extent ([kernel.kallsyms])
                                           ext4_ext_map_blocks ([kernel.kallsyms])
                                           ext4_map_blocks ([kernel.kallsyms])
                                           ext4_mpage_readpages ([kernel.kallsyms])
                                           read_pages ([kernel.kallsyms])
                                           __do_page_cache_readahead ([kernel.kallsyms])
                                           ondemand_readahead ([kernel.kallsyms])
                                           generic_file_read_iter ([kernel.kallsyms])
                                           __vfs_read ([kernel.kallsyms])
                                           vfs_read ([kernel.kallsyms])
                                           ksys_read ([kernel.kallsyms])
                                           do_syscall_64 ([kernel.kallsyms])
                                           entry_SYSCALL_64 ([kernel.kallsyms])
                                           read (/usr/lib64/libc-2.26.so)
      #
    
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Milian Wolff <milian.wolff@kdab.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Rudá Moura <ruda.moura@gmail.com>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: https://lkml.kernel.org/n/tip-sweh107bs7ol5bzls0m4tqdz@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    5067a8cd
builtin-trace.c 98 KB