• Joonsoo Kim's avatar
    mm/slab: use percpu allocator for cpu cache · bf0dea23
    Joonsoo Kim authored
    Because of chicken and egg problem, initialization of SLAB is really
    complicated.  We need to allocate cpu cache through SLAB to make the
    kmem_cache work, but before initialization of kmem_cache, allocation
    through SLAB is impossible.
    On the other hand, SLUB does initialization in a more simple way.  It uses
    percpu allocator to allocate cpu cache so there is no chicken and egg
    So, this patch try to use percpu allocator in SLAB.  This simplifies the
    initialization step in SLAB so that we could maintain SLAB code more
    In my testing there is no performance difference.
    This implementation relies on percpu allocator.  Because percpu allocator
    uses vmalloc address space, vmalloc address space could be exhausted by
    this change on many cpu system with *32 bit* kernel.  This implementation
    can cover 1024 cpus in worst case by following calculation.
    Worst: 1024 cpus * 4 bytes for pointer * 300 kmem_caches *
    	120 objects per cpu_cache = 140 MB
    Normal: 1024 cpus * 4 bytes for pointer * 150 kmem_caches(slab merge) *
    	80 objects per cpu_cache = 46 MB
    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: Jeremiah Mahler <jmmahler@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>