• Namhyung Kim's avatar
    perf inject: Fix --buildid-all not to eat up MMAP2 · ce9f1c05
    Namhyung Kim authored
    When MMAP2 has the PERF_RECORD_MISC_MMAP_BUILD_ID flag, it means the
    record already has the build-id info.  So it marks the DSO as hit, to
    skip if the same DSO is not processed if it happens to miss the build-id
    later.
    
    But it missed to copy the MMAP2 record itself so it'd fail to symbolize
    samples for those regions.
    
    For example, the following generates 249 MMAP2 events.
    
      $ perf record --buildid-mmap -o- true | perf report --stat -i- | grep MMAP2
               MMAP2 events:        249  (86.8%)
    
    Adding perf inject should not change the number of events like this
    
      $ perf record --buildid-mmap -o- true | perf inject -b | \
      > perf report --stat -i- | grep MMAP2
               MMAP2 events:        249  (86.5%)
    
    But when --buildid-all is used, it eats most of the MMAP2 events.
    
      $ perf record --buildid-mmap -o- true | perf inject -b --buildid-all | \
      > perf report --stat -i- | grep MMAP2
               MMAP2 events:          1  ( 2.5%)
    
    With this patch, it shows the original number now.
    
      $ perf record --buildid-mmap -o- true | perf inject -b --buildid-all | \
      > perf report --stat -i- | grep MMAP2
               MMAP2 events:        249  (86.5%)
    
    Committer testing:
    
    Before:
    
      $ perf record --buildid-mmap -o- perf stat --null sleep 1 2> /dev/null | perf inject -b | perf report --stat -i- | grep MMAP2
               MMAP2 events:         58  (36.2%)
      $ perf record --buildid-mmap -o- perf stat --null sleep 1 2> /dev/null | perf report --stat -i- | grep MMAP2
               MMAP2 events:         58  (36.2%)
      $ perf record --buildid-mmap -o- perf stat --null sleep 1 2> /dev/null | perf inject -b --buildid-all | perf report --stat -i- | grep MMAP2
               MMAP2 events:          2  ( 1.9%)
      $
    
    After:
    
      $ perf record --buildid-mmap -o- perf stat --null sleep 1 2> /dev/null | perf inject -b | perf report --stat -i- | grep MMAP2
               MMAP2 events:         58  (29.3%)
      $ perf record --buildid-mmap -o- perf stat --null sleep 1 2> /dev/null | perf report --stat -i- | grep MMAP2
               MMAP2 events:         58  (34.3%)
      $ perf record --buildid-mmap -o- perf stat --null sleep 1 2> /dev/null | perf inject -b --buildid-all | perf report --stat -i- | grep MMAP2
               MMAP2 events:         58  (38.4%)
      $
    
    Fixes: f7fc0d1c ("perf inject: Do not inject BUILD_ID record if MMAP2 has it")
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20230223070155.54251-1-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    ce9f1c05
builtin-inject.c 61 KB