• W
    perf record: Allow filtering perf's pid via --exclude-perf · 4ba1faa1
    Wang Nan 提交于
    This patch allows 'perf record' to exclude events issued by perf itself
    by '--exclude-perf' option.
    
    Before this patch, when doing something like:
    
     # perf record -a -e syscalls:sys_enter_write <cmd>
    
    One could easily get result like this:
    
     # /tmp/perf report --stdio
     ...
      # Overhead  Command  Shared Object       Symbol
      # ........  .......  ..................  ....................
      #
          99.99%  perf     libpthread-2.18.so  [.] __write_nocancel
          0.01%   ls       libc-2.18.so        [.] write
          0.01%   sshd     libc-2.18.so        [.] write
     ...
    
    Where most events are generated by perf itself.
    
    A shell trick can be done to filter perf itself out:
    
     # cat << EOF > ./tmp
     > #!/bin/sh
     > exec perf record -e ... --filter="common_pid != \$\$" -a sleep 10
     > EOF
     # chmod a+x ./tmp
     # ./tmp
    
    However, doing so is user unfriendly.
    
    This patch extracts evsel iteration framework introduced by patch 'perf
    record: Apply filter to all events in a glob matching' into
    foreach_evsel_in_last_glob(), and makes exclude_perf() function append
    new filter expression to each evsel selected by a '-e' selector.
    
    To avoid losing filters if user pass '--filter' after '--exclude-perf',
    this patch uses perf_evsel__append_filter() in both case, instead of
    perf_evsel__set_filter() which removes old filter. As a side effect, now
    it is possible to use multiple '--filter' option for one selector. They
    are combinded with '&&'.
    Signed-off-by: NWang Nan <wangnan0@huawei.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Brendan Gregg <brendan.d.gregg@gmail.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Zefan Li <lizefan@huawei.com>
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1436513770-8896-2-git-send-email-wangnan0@huawei.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
    4ba1faa1
parse-events.h 4.7 KB