• Arnaldo Carvalho de Melo's avatar
    perf maps: Do not use an rbtree to sort by map name · c5c584d2
    Arnaldo Carvalho de Melo authored
    This is only used for the kernel maps, shave 24 bytes out 'struct map'
    and just traverse the existing per ip rbtree to look for maps by name,
    use a front end cache to reuse the last search if its the same name.
    
    After this 'struct map' is down to just two cachelines:
    
      $ 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;        /*    40     1 */
    
      	/* XXX 3 bytes hole, try to pack */
    
      	u32                        priv;                 /*    44     4 */
      	u32                        prot;                 /*    48     4 */
      	u32                        flags;                /*    52     4 */
      	u64                        pgoff;                /*    56     8 */
      	/* --- cacheline 1 boundary (64 bytes) --- */
      	u64                        reloc;                /*    64     8 */
      	u32                        maj;                  /*    72     4 */
      	u32                        min;                  /*    76     4 */
      	u64                        ino;                  /*    80     8 */
      	u64                        ino_generation;       /*    88     8 */
      	u64                        (*map_ip)(struct map *, u64); /*    96     8 */
      	u64                        (*unmap_ip)(struct map *, u64); /*   104     8 */
      	struct dso *               dso;                  /*   112     8 */
      	refcount_t                 refcnt;               /*   120     4 */
    
      	/* size: 128, cachelines: 2, members: 17 */
      	/* sum members: 121, holes: 1, sum holes: 3 */
      	/* padding: 4 */
      	/* forced alignments: 1 */
      } __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-bvr8fqfgzxtgnhnwt5sssx5g@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    c5c584d2
map.c 21 KB