• Namhyung Kim's avatar
    perf hists: Do not skip elided fields when processing samples · e72655d9
    Namhyung Kim authored
    If user gives a filter, perf marks the corresponding column elided and
    omits the output.  But it should process and aggregates samples using
    the field, otherwise samples will be aggregated as if the column was not
    there resulted in incorrect output.
    
    For example, I'd like to set a filter on native_write_msr_safe.  The
    original overhead of the function is negligible.
    
      $ perf report | grep native_write_msr_safe
          0.00%  swapper  [kernel.vmlinux]  native_write_msr_safe
          0.00%  perf     [kernel.vmlinux]  native_write_msr_safe
    
    However adding -S option gives different output.
    
      $ perf report -S native_write_msr_safe --percentage absolute | \
      > grep -e swapper -e perf
         51.47%  swapper  [kernel.vmlinux]
          4.14%  perf     [kernel.vmlinux]
    
    Since it aggregated samples using comm and dso only.  In fact, the above
    values are same when it sorts with -s comm,dso.
    
      $ perf report -s comm,dso | grep -e swapper -e perf
         51.47%  swapper  [kernel.vmlinux]
          4.14%  perf     [kernel.vmlinux]
    
    This resulted in TUI failure with -ERANGE since it tries to increase
    sample hit count for annotation with wrong symbols due to incorrect
    aggregation.
    
    This patch fixes it not to skip elided fields when comparing samples in
    order to insert them to the hists.
    
    Commiter note:
    
    After the patch, with a different workloads:
    
      # perf report --show-total-period -S native_write_msr_safe --stdio
      #
      # symbol: native_write_msr_safe
      #
      # Samples: 455  of event 'cycles:pp'
      # Event count (approx.): 134787489
      #
      # Overhead Period Command         Shared Object
      # ........ ...... ............... ................
      #
           0.22% 293081 qemu-system-x86 [vmlinux]
           0.19% 255914 swapper         [vmlinux]
           0.00%   2054 Timer           [vmlinux]
           0.00%   1021 firefox         [vmlinux]
           0.00%      2 perf            [vmlinux]
    
      # perf report --show-total-period | grep native_write_msr_safe
      Failed to open /tmp/perf-14838.map, continuing without symbols
           0.22% 293081 qemu-system-x86 [vmlinux]  [k] native_write_msr_safe
           0.19% 255914 swapper         [vmlinux]  [k] native_write_msr_safe
           0.00%   2054 Timer           [vmlinux]  [k] native_write_msr_safe
           0.00%   1021 firefox         [vmlinux]  [k] native_write_msr_safe
           0.00%      2 perf            [vmlinux]  [k] native_write_msr_safe
      #
    Reported-by: default avatarIngo Molnar <mingo@kernel.org>
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Link: http://lkml.kernel.org/r/1448645559-31167-2-git-send-email-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    e72655d9
hist.c 36.3 KB