Skip to content
  • Shakeel Butt's avatar
    slab, slub: remove size disparity on debug kernel · 613a5eb5
    Shakeel Butt authored
    I have noticed on debug kernel with SLAB, the size of some non-root
    slabs were larger than their corresponding root slabs.
    
    e.g. for radix_tree_node:
      $cat /proc/slabinfo | grep radix
      name     <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> ...
      radix_tree_node 15052    15075      4096         1             1 ...
    
      $cat /cgroup/memory/temp/memory.kmem.slabinfo | grep radix
      name     <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> ...
      radix_tree_node 1581      158       4120         1             2 ...
    
    However for SLUB in debug kernel, the sizes were same.  On further
    inspection it is found that SLUB always use kmem_cache.object_size to
    measure the kmem_cache.size while SLAB use the given kmem_cache.size.
    In the debug kernel the slab's size can be larger than its object_size.
    Thus in the creation of non-root slab, the SLAB uses the root's size as
    base to calculate the non-root slab's size and thus non-root slab's size
    can be larger than the root slab's size.  For SLUB, the non-root slab's
    size is measured based on the root's object_size and thus the size will
    remain same for root and non-root slab.
    
    This patch makes slab's object_size the default base to measure the
    slab's size.
    
    Link: http://lkml.kernel.org/r/20180313165428.58699-1-shakeelb@google.com
    Fixes: 794b1248
    
     ("memcg, slab: separate memcg vs root cache creation paths")
    Signed-off-by: default avatarShakeel Butt <shakeelb@google.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    613a5eb5