• Arnaldo Carvalho de Melo's avatar
    perf dso: Move dso_id from 'struct map' to 'struct dso' · 0e3149f8
    Arnaldo Carvalho de Melo authored
    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.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    0e3149f8
dsos.c 7.26 KB