• Arnaldo Carvalho de Melo's avatar
    perf header: Pack 'struct perf_session_env' · 3ba4d2e1
    Arnaldo Carvalho de Melo authored
    Initial struct:
    
    [acme@ssdandy linux]$ pahole -C perf_session_env ~/bin/perf
    struct perf_session_env {
    	char *                     hostname;             /*     0     8 */
    	char *                     os_release;           /*     8     8 */
    	char *                     version;              /*    16     8 */
    	char *                     arch;                 /*    24     8 */
    	int                        nr_cpus_online;       /*    32     4 */
    	int                        nr_cpus_avail;        /*    36     4 */
    	char *                     cpu_desc;             /*    40     8 */
    	char *                     cpuid;                /*    48     8 */
    	long long unsigned int     total_mem;            /*    56     8 */
    	/* --- cacheline 1 boundary (64 bytes) --- */
    	int                        nr_cmdline;           /*    64     4 */
    
    	/* XXX 4 bytes hole, try to pack */
    
    	char *                     cmdline;              /*    72     8 */
    	int                        nr_sibling_cores;     /*    80     4 */
    
    	/* XXX 4 bytes hole, try to pack */
    
    	char *                     sibling_cores;        /*    88     8 */
    	int                        nr_sibling_threads;   /*    96     4 */
    
    	/* XXX 4 bytes hole, try to pack */
    
    	char *                     sibling_threads;      /*   104     8 */
    	int                        nr_numa_nodes;        /*   112     4 */
    
    	/* XXX 4 bytes hole, try to pack */
    
    	char *                     numa_nodes;           /*   120     8 */
    	/* --- cacheline 2 boundary (128 bytes) --- */
    	int                        nr_pmu_mappings;      /*   128     4 */
    
    	/* XXX 4 bytes hole, try to pack */
    
    	char *                     pmu_mappings;         /*   136     8 */
    	int                        nr_groups;            /*   144     4 */
    
    	/* size: 152, cachelines: 3, members: 20 */
    	/* sum members: 128, holes: 5, sum holes: 20 */
    	/* padding: 4 */
    	/* last cacheline: 24 bytes */
    };
    [acme@ssdandy linux]$
    
    [acme@ssdandy linux]$ pahole -C perf_session_env --reorganize --show_reorg_steps ~/bin/perf | grep ^/ | grep -v Final
    /* Moving 'nr_sibling_cores' from after 'cmdline' to after 'nr_cmdline' */
    /* Moving 'nr_numa_nodes' from after 'sibling_threads' to after 'nr_sibling_threads' */
    /* Moving 'nr_groups' from after 'pmu_mappings' to after 'nr_pmu_mappings' */
    [acme@ssdandy linux]$
    
    Final struct stats:
    
    [acme@ssdandy linux]$ pahole -C perf_session_env --reorganize --show_reorg_steps ~/bin/perf | tail -4
    	/* --- cacheline 2 boundary (128 bytes) --- */
    
    	/* size: 128, cachelines: 2, members: 20 */
    };   /* saved 24 bytes and 1 cacheline! */
    [acme@ssdandy linux]$
    
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Link: http://lkml.kernel.org/n/tip-3d9tshamloinzxcqeb7mtd1n@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    3ba4d2e1
header.h 3.94 KB