Skip to content
  • Arnaldo Carvalho de Melo's avatar
    [INET6]: Reorganize struct inet6_dev to save 8 bytes · 4e7e5cfe
    Arnaldo Carvalho de Melo authored
    
    
    And make it a multiple of a 64 bytes, reducing cacheline trashing:
    
    Before:
    
    [acme@doppio net-2.6]$ pahole -C inet6_dev net/dccp/ipv6.o
    struct inet6_dev {
    	<SNIP>
    	long unsigned int          mc_maxdelay;          /*    48     8 */
    	unsigned char              mc_qrv;               /*    56     1 */
    	unsigned char              mc_gq_running;        /*    57     1 */
    	unsigned char              mc_ifc_count;         /*    58     1 */
    
    	/* XXX 5 bytes hole, try to pack */
    
    	/* --- cacheline 1 boundary (64 bytes) --- */
    	struct timer_list          mc_gq_timer;          /*    64    48 */
    	<SNIP>
    	__u32                      if_flags;             /*   180     4 */
    	int                        dead;                 /*   184     4 */
    	u8                         rndid[8];             /*   188     8 */
    
    	/* XXX 4 bytes hole, try to pack */
    
    	/* --- cacheline 3 boundary (192 bytes) was 8 bytes ago --- */
    	struct timer_list          regen_timer;          /*   200    48 */
    
    	<SNIP>
    
    	/* size: 456, cachelines: 8 */
    	/* sum members: 447, holes: 2, sum holes: 9 */
    	/* last cacheline: 8 bytes */
    };
    
    After:
    
    net-2.6/net/ipv6/af_inet6.c:
      struct inet6_dev |   -8
     1 struct changed
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    4e7e5cfe