]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
perf map: Move seldom used ->flags field to second cacheline
authorArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 18 Nov 2019 19:51:00 +0000 (16:51 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 18 Nov 2019 19:51:00 +0000 (16:51 -0300)
So we start with:

  $ 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 */
   u32                        flags;                /*    48     4 */

   /* XXX 4 bytes hole, try to pack */

   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: 116, holes: 2, sum holes: 7 */
   /* sum bitfield members: 2 bits, bit holes: 1, sum bit holes: 6 bits */
   /* padding: 4 */
   /* forced alignments: 1 */
  } __attribute__((__aligned__(8)));
  $

and 'flags' is seldom used when printing details about the map or with
the "cacheline" sort order, we can move them it to the second cacheline,
that will allow combining it with 'refcnt', that is only four bytes:

  $ 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) --- */
   u32                        maj;                  /*    64     4 */
   u32                        min;                  /*    68     4 */
   u64                        ino;                  /*    72     8 */
   u64                        ino_generation;       /*    80     8 */
   u64                        (*map_ip)(struct map *, u64); /*    88     8 */
   u64                        (*unmap_ip)(struct map *, u64); /*    96     8 */
   struct dso *               dso;                  /*   104     8 */
   refcount_t                 refcnt;               /*   112     4 */
   u32                        flags;                /*   116     4 */

   /* size: 120, cachelines: 2, members: 17 */
   /* sum members: 116, holes: 1, sum holes: 3 */
   /* sum bitfield members: 2 bits, bit holes: 1, sum bit holes: 6 bits */
   /* forced alignments: 1 */
   /* last cacheline: 56 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-2cdw3zlw1mkamaf7nqtdlxfi@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/map.h

index e2466aa5bb410a3cb16cb7a634b24c2c40168998..0a6c45f85cd93a93e9369e2fb3d1f2cfe124c709 100644 (file)
@@ -28,7 +28,6 @@ struct map {
        bool                    erange_warned:1;
        bool                    priv:1;
        u32                     prot;
-       u32                     flags;
        u64                     pgoff;
        u64                     reloc;
        u32                     maj, min; /* only valid for MMAP2 record */
@@ -42,6 +41,7 @@ struct map {
 
        struct dso              *dso;
        refcount_t              refcnt;
+       u32                     flags;
 };
 
 struct kmap;