• E
    [PATCH] struct vfsmount: keep mnt_count & mnt_expiry_mark away from mnt_flags · 4ba4d4c0
    Eric Dumazet 提交于
    I noticed cache misses in touch_atime() that can be avoided if we keep
    mnt_count & mnt_expiry_mark in a different cache line than mnt_flags
    (mostly read)
    
    mnt_count & mnt_expiry_mark are modified each time a file is opened/closed
    in a file system.
    
    touch_atime() is called each time a file is read, and generally needs to
    read mnt_flags.
    
    Other fields of struct vfsmount are mostly read so I chose to move
    mnt_count & mnt_expiry_mark at the end of struct vfsmount.  And adding a
    comment so that nobody tries to re-arrange fields to fill the holes :)
    
    On 64bits platforms, the new offsetof(mnt_count) is 0xC0
    On 32bits platforms, it is 0x60, so I didnot add a
    ____cacheline_aligned_in_smp because it would have a too big impact on the
    size of this object (in particular if CONFIG_X86_L1_CACHE_SHIFT=7)
    Signed-off-by: NEric Dumazet <dada1@cosmosbay.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    4ba4d4c0
mount.h 3.2 KB