OSDN Git Service

perf dso: Move dso_id from 'struct map' to 'struct dso'
authorArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 19 Nov 2019 21:44:22 +0000 (18:44 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Tue, 19 Nov 2019 22:12:26 +0000 (19:12 -0300)
commit0e3149f86b99ddabde8c5029eea0a9267e34f1a0
tree97e5a6425e22693a8dcbd77e2654ec11d30e8a25
parent1f74b100c9d9406fa12b22675c6b2111e5f60e9c
perf dso: Move dso_id from 'struct map' to 'struct dso'

And take it into account when looking up DSOs when we have the dso_id
fields obtained from somewhere, like from PERF_RECORD_MMAP2 records.

Instances of struct map pointing to the same DSO pathname but with
anything in dso_id different are in fact different DSOs, so better have
different 'struct dso' instances to reflect that. At some point we may
want to get copies of the contents of the different objects if we want
to do correct annotation or other analysis.

With this we get 'struct map' 24 bytes leaner:

  $ pahole -C map ~/bin/perf
  struct map {
   union {
   struct rb_node     rb_node __attribute__((__aligned__(8))); /*     0    24 */
   struct list_head   node;                 /*     0    16 */
   } __attribute__((__aligned__(8)));               /*     0    24 */
   u64                        start;                /*    24     8 */
   u64                        end;                  /*    32     8 */
   _Bool                      erange_warned:1;      /*    40: 0  1 */
   _Bool                      priv:1;               /*    40: 1  1 */

   /* XXX 6 bits hole, try to pack */
   /* XXX 3 bytes hole, try to pack */

   u32                        prot;                 /*    44     4 */
   u64                        pgoff;                /*    48     8 */
   u64                        reloc;                /*    56     8 */
   /* --- cacheline 1 boundary (64 bytes) --- */
   u64                        (*map_ip)(struct map *, u64); /*    64     8 */
   u64                        (*unmap_ip)(struct map *, u64); /*    72     8 */
   struct dso *               dso;                  /*    80     8 */
   refcount_t                 refcnt;               /*    88     4 */
   u32                        flags;                /*    92     4 */

   /* size: 96, cachelines: 2, members: 13 */
   /* sum members: 92, holes: 1, sum holes: 3 */
   /* sum bitfield members: 2 bits, bit holes: 1, sum bit holes: 6 bits */
   /* forced alignments: 1 */
   /* last cacheline: 32 bytes */
  } __attribute__((__aligned__(8)));
  $

Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Link: https://lkml.kernel.org/n/tip-g4hxxmraplo7wfjmk384mfsb@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/builtin-report.c
tools/perf/util/dso.c
tools/perf/util/dso.h
tools/perf/util/dsos.c
tools/perf/util/dsos.h
tools/perf/util/machine.c
tools/perf/util/machine.h
tools/perf/util/map.c
tools/perf/util/map.h
tools/perf/util/sort.c