Skip to content
  • Namhyung Kim's avatar
    e7b60c5a
    perf inject: Do not load map/dso when injecting build-id · e7b60c5a
    Namhyung Kim authored
    
    
    No need to load symbols in a DSO when injecting build-id.  I guess the
    reason was to check the DSO is a special file like anon files.  Use some
    helper functions in map.c to check them before reading build-id.  Also
    pass sample event's cpumode to a new build-id event.
    
    It brought a speedup in the benchmark of 25 -> 21 msec on my laptop.
    Also the memory usage (Max RSS) went down by ~200 KB.
    
      # Running 'internals/inject-build-id' benchmark:
        Average build-id injection took: 21.389 msec (+- 0.138 msec)
        Average time per event: 2.097 usec (+- 0.014 usec)
        Average memory usage: 8225 KB (+- 0 KB)
    
    Committer notes:
    
    Before:
    
      $ perf stat -r5 perf bench internals inject-build-id > /dev/null
    
       Performance counter stats for 'perf bench internals inject-build-id' (5 runs):
    
                4,020.56 msec task-clock:u              #    1.271 CPUs utilized            ( +-  0.74% )
                       0      context-switches:u        #    0.000 K/sec
                       0      cpu-migrations:u          #    0.000 K/sec
                 123,354      page-faults:u             #    0.031 M/sec                    ( +-  0.81% )
           7,119,951,568      cycles:u                  #    1.771 GHz                      ( +-  1.74% )  (83.27%)
             230,086,969      stalled-cycles-frontend:u #    3.23% frontend cycles idle     ( +-  1.97% )  (83.41%)
           1,168,298,765      stalled-cycles-backend:u  #   16.41% backend cycles idle      ( +-  1.13% )  (83.44%)
          11,173,083,669      instructions:u            #    1.57  insn per cycle
                                                        #    0.10  stalled cycles per insn  ( +-  1.58% )  (83.31%)
           2,413,908,936      branches:u                #  600.392 M/sec                    ( +-  1.69% )  (83.26%)
              46,576,289      branch-misses:u           #    1.93% of all branches          ( +-  2.20% )  (83.31%)
    
                  3.1638 +- 0.0309 seconds time elapsed  ( +-  0.98% )
    
      $
    
    After:
    
      $ perf stat -r5 perf bench internals inject-build-id > /dev/null
    
       Performance counter stats for 'perf bench internals inject-build-id' (5 runs):
    
                2,379.94 msec task-clock:u              #    1.473 CPUs utilized            ( +-  0.18% )
                       0      context-switches:u        #    0.000 K/sec
                       0      cpu-migrations:u          #    0.000 K/sec
                  62,584      page-faults:u             #    0.026 M/sec                    ( +-  0.07% )
           2,372,389,668      cycles:u                  #    0.997 GHz                      ( +-  0.29% )  (83.14%)
             106,937,862      stalled-cycles-frontend:u #    4.51% frontend cycles idle     ( +-  4.89% )  (83.20%)
             581,697,915      stalled-cycles-backend:u  #   24.52% backend cycles idle      ( +-  0.71% )  (83.47%)
           3,659,692,199      instructions:u            #    1.54  insn per cycle
                                                        #    0.16  stalled cycles per insn  ( +-  0.10% )  (83.63%)
             791,372,961      branches:u                #  332.518 M/sec                    ( +-  0.27% )  (83.39%)
              10,648,083      branch-misses:u           #    1.35% of all branches          ( +-  0.22% )  (83.16%)
    
                 1.61570 +- 0.00172 seconds time elapsed  ( +-  0.11% )
    
      $
    
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Original-patch-by: default avatarStephane Eranian <eranian@google.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Link: https://lore.kernel.org/r/20201012070214.2074921-5-namhyung@kernel.org
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    e7b60c5a
    perf inject: Do not load map/dso when injecting build-id
    Namhyung Kim authored
    
    
    No need to load symbols in a DSO when injecting build-id.  I guess the
    reason was to check the DSO is a special file like anon files.  Use some
    helper functions in map.c to check them before reading build-id.  Also
    pass sample event's cpumode to a new build-id event.
    
    It brought a speedup in the benchmark of 25 -> 21 msec on my laptop.
    Also the memory usage (Max RSS) went down by ~200 KB.
    
      # Running 'internals/inject-build-id' benchmark:
        Average build-id injection took: 21.389 msec (+- 0.138 msec)
        Average time per event: 2.097 usec (+- 0.014 usec)
        Average memory usage: 8225 KB (+- 0 KB)
    
    Committer notes:
    
    Before:
    
      $ perf stat -r5 perf bench internals inject-build-id > /dev/null
    
       Performance counter stats for 'perf bench internals inject-build-id' (5 runs):
    
                4,020.56 msec task-clock:u              #    1.271 CPUs utilized            ( +-  0.74% )
                       0      context-switches:u        #    0.000 K/sec
                       0      cpu-migrations:u          #    0.000 K/sec
                 123,354      page-faults:u             #    0.031 M/sec                    ( +-  0.81% )
           7,119,951,568      cycles:u                  #    1.771 GHz                      ( +-  1.74% )  (83.27%)
             230,086,969      stalled-cycles-frontend:u #    3.23% frontend cycles idle     ( +-  1.97% )  (83.41%)
           1,168,298,765      stalled-cycles-backend:u  #   16.41% backend cycles idle      ( +-  1.13% )  (83.44%)
          11,173,083,669      instructions:u            #    1.57  insn per cycle
                                                        #    0.10  stalled cycles per insn  ( +-  1.58% )  (83.31%)
           2,413,908,936      branches:u                #  600.392 M/sec                    ( +-  1.69% )  (83.26%)
              46,576,289      branch-misses:u           #    1.93% of all branches          ( +-  2.20% )  (83.31%)
    
                  3.1638 +- 0.0309 seconds time elapsed  ( +-  0.98% )
    
      $
    
    After:
    
      $ perf stat -r5 perf bench internals inject-build-id > /dev/null
    
       Performance counter stats for 'perf bench internals inject-build-id' (5 runs):
    
                2,379.94 msec task-clock:u              #    1.473 CPUs utilized            ( +-  0.18% )
                       0      context-switches:u        #    0.000 K/sec
                       0      cpu-migrations:u          #    0.000 K/sec
                  62,584      page-faults:u             #    0.026 M/sec                    ( +-  0.07% )
           2,372,389,668      cycles:u                  #    0.997 GHz                      ( +-  0.29% )  (83.14%)
             106,937,862      stalled-cycles-frontend:u #    4.51% frontend cycles idle     ( +-  4.89% )  (83.20%)
             581,697,915      stalled-cycles-backend:u  #   24.52% backend cycles idle      ( +-  0.71% )  (83.47%)
           3,659,692,199      instructions:u            #    1.54  insn per cycle
                                                        #    0.16  stalled cycles per insn  ( +-  0.10% )  (83.63%)
             791,372,961      branches:u                #  332.518 M/sec                    ( +-  0.27% )  (83.39%)
              10,648,083      branch-misses:u           #    1.35% of all branches          ( +-  0.22% )  (83.16%)
    
                 1.61570 +- 0.00172 seconds time elapsed  ( +-  0.11% )
    
      $
    
    Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
    Original-patch-by: default avatarStephane Eranian <eranian@google.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
    Link: https://lore.kernel.org/r/20201012070214.2074921-5-namhyung@kernel.org
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Loading