• Andi Kleen's avatar
    perf script: Allow adding and removing fields · 36ce5651
    Andi Kleen authored
    With 'perf script' it is common that we just want to add or remove a field.
    
    Currently this requires figuring out the long list of default fields and
    specifying them first, and then adding/removing the new field.
    
    This patch adds a new + - syntax to merely add or remove fields,
    that allows more succint and clearer command lines
    
    For example to remove the comm field from PMU samples:
    
    Previously
    
      $ perf script -F tid,cpu,time,event,sym,ip,dso,period | head -1
      swapper  0 [000] 504345.383126:          1 cycles:  ffffffff90060c66 native_write_msr ([kernel.kallsyms])
    
    with the new syntax
    
      perf script -F -comm | head -1
      0 [000] 504345.383126:          1 cycles:  ffffffff90060c66 native_write_msr ([kernel.kallsyms])
    
    The new syntax cannot be mixed with normal overriding.
    
    v2: Fix example in description. Use tid vs pid. No functional changes.
    v3: Don't skip initialization when user specified explicit type.
    v4: Rebase. Remove empty line.
    
    Committer testing:
    
      # perf record -a usleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 1.748 MB perf.data (14 samples) ]
    
    Without a explicit field list specified via -F, defaults to:
    
      # perf script | head -2
          perf 6338 [000] 18467.058607: 1 cycles: ffffffff89060c36 native_write_msr (/lib/modules/4.11.0-rc8+/build/vmlinux)
       swapper    0 [001] 18467.058617: 1 cycles: ffffffff89060c36 native_write_msr (/lib/modules/4.11.0-rc8+/build/vmlinux)
      #
    
    Which is equivalent to:
    
      # perf script -F comm,tid,cpu,time,period,event,ip,sym,dso | head -2
          perf 6338 [000] 18467.058607: 1 cycles: ffffffff89060c36 native_write_msr (/lib/modules/4.11.0-rc8+/build/vmlinux)
       swapper    0 [001] 18467.058617: 1 cycles: ffffffff89060c36 native_write_msr (/lib/modules/4.11.0-rc8+/build/vmlinux)
      #
    
    So if we want to remove the comm, as in your original example, we would have to
    figure out the default field list and remove ' comm' from it:
    
      # perf script -F tid,cpu,time,period,event,ip,sym,dso | head -2
       6338 [000] 18467.058607: 1 cycles: ffffffff89060c36 native_write_msr (/lib/modules/4.11.0-rc8+/build/vmlinux)
          0 [001] 18467.058617: 1 cycles: ffffffff89060c36 native_write_msr (/lib/modules/4.11.0-rc8+/build/vmlinux)
      #
    
    With your patch this becomes simpler, one can remove fields by prefixing them
    with '-':
    
      # perf script -F -comm | head -2
      6338 [000] 18467.058607: 1 cycles: ffffffff89060c36 native_write_msr (/lib/modules/4.11.0-rc8+/build/vmlinux)
         0 [001] 18467.058617: 1 cycles: ffffffff89060c36 native_write_msr (/lib/modules/4.11.0-rc8+/build/vmlinux)
      #
    Signed-off-by: default avatarAndi Kleen <ak@linux.intel.com>
    Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Tested-by: default avatarMilian Wolff <milian.wolff@kdab.com>
    Link: http://lkml.kernel.org/r/20170602154810.15875-1-andi@firstfloor.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    36ce5651
builtin-script.c 71.3 KB