• Joonsoo Kim's avatar
    mm/slab: put the freelist at the end of slab page · 2e6b3602
    Joonsoo Kim authored
    Currently, the freelist is at the front of slab page.  This requires
    extra space to meet object alignment requirement.  If we put the
    freelist at the end of a slab page, objects could start at page boundary
    and will be at correct alignment.  This is possible because freelist has
    no alignment constraint itself.
    
    This gives us two benefits: It removes extra memory space for the
    freelist alignment and remove complex calculation at cache
    initialization step.  I can't think notable drawback here.
    
    I mentioned that this would reduce extra memory space, but, this benefit
    is rather theoretical because it can be applied to very few cases.
    Following is the example cache type that can get benefit from this
    change.
    
      size align num before after
        32    8  124  4100  4092
        64    8   63  4103  4095
        88    8   46  4102  4094
       272    8   15  4103  4095
       408    8   10  4098  4090
        32   16  124  4108  4092
        64   16   63  4111  4095
        32   32  124  4124  4092
        64   32   63  4127  4095
        96   32   42  4106  4074
    
    before means whole size for objects and aligned freelist before applying
    patch and after shows the result of this patch.
    
    Since before is more than 4096, number of object should decrease and
    memory waste happens.
    
    Anyway, this patch removes complex calculation so looks beneficial to
    me.
    
    [akpm@linux-foundation.org: fix kerneldoc]
    Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Acked-by: default avatarChristoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Jesper Dangaard Brouer <brouer@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    2e6b3602
slab.c 106 KB