• Kan Liang's avatar
    perf hist: Add fast path for duplicate entries check · 12e89e65
    Kan Liang authored
    Perf checks the duplicate entries in a callchain before adding an entry.
    However the check is very slow especially with deeper call stack.
    Almost ~50% elapsed time of perf report is spent on the check when the
    call stack is always depth of 32.
    
    The hist_entry__cmp() is used to compare the new entry with the old
    entries. It will go through all the available sorts in the sort_list,
    and call the specific cmp of each sort, which is very slow.
    
    Actually, for most cases, there are no duplicate entries in callchain.
    The symbols are usually different. It's much faster to do a quick check
    for symbols first. Only do the full cmp when the symbols are exactly the
    same.
    
    The quick check is only to check symbols, not dso. Export
    _sort__sym_cmp.
    
      $ perf record --call-graph lbr ./tchain_edit_64
    
      Without the patch
      $time perf report --stdio
      real    0m21.142s
      user    0m21.110s
      sys     0m0.033s
    
      With the patch
      $time perf report --stdio
      real    0m10.977s
      user    0m10.948s
      sys     0m0.027s
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Pavel Gerasimov <pavel.gerasimov@intel.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Vitaly Slobodskoy <vitaly.slobodskoy@intel.com>
    Link: http://lore.kernel.org/lkml/20200319202517.23423-18-kan.liang@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    12e89e65
hist.c 67.3 KB