Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86: Reorder mm_context_t to remove x86_64 alignment padding and thus shrink mm_struct

Reorder mm_context_t to remove alignment padding on 64 bit
builds shrinking its size from 64 to 56 bytes.

This allows mm_struct to shrink from 840 to 832 bytes, so using
one fewer cache lines, and getting more objects per slab when
using slub.

slabinfo mm_struct reports
before :-

Sizes (bytes) Slabs
-----------------------------------
Object : 840 Total : 7
SlabObj: 896 Full : 1
SlabSiz: 16384 Partial: 4
Loss : 56 CpuSlab: 2
Align : 64 Objects: 18

after :-

Sizes (bytes) Slabs
----------------------------------
Object : 832 Total : 7
SlabObj: 832 Full : 1
SlabSiz: 16384 Partial: 4
Loss : 0 CpuSlab: 2
Align : 64 Objects: 19

Signed-off-by: Richard Kennedy <richard@rsk.demon.co.uk>
Cc: wilsons@start.ca
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Pekka Enberg <penberg@kernel.org>
Link: http://lkml.kernel.org/r/1306244999.1999.5.camel@castor.rsk
Signed-off-by: Ingo Molnar <mingo@elte.hu>

authored by

Richard Kennedy and committed by
Ingo Molnar
af6a25f0 f073cc8f

+2 -2
+2 -2
arch/x86/include/asm/mmu.h
··· 11 11 typedef struct { 12 12 void *ldt; 13 13 int size; 14 - struct mutex lock; 15 - void *vdso; 16 14 17 15 #ifdef CONFIG_X86_64 18 16 /* True if mm supports a task running in 32 bit compatibility mode. */ 19 17 unsigned short ia32_compat; 20 18 #endif 21 19 20 + struct mutex lock; 21 + void *vdso; 22 22 } mm_context_t; 23 23 24 24 #ifdef CONFIG_SMP