Skip to content
  • Eric Dumazet's avatar
    slab: NUMA kmem_cache diet · 8da3430d
    Eric Dumazet authored
    
    
    Some NUMA machines have a big MAX_NUMNODES (possibly 1024), but fewer
    possible nodes.  This patch dynamically sizes the 'struct kmem_cache' to
    allocate only needed space.
    
    I moved nodelists[] field at the end of struct kmem_cache, and use the
    following computation in kmem_cache_init()
    
    cache_cache.buffer_size = offsetof(struct kmem_cache, nodelists) +
                                     nr_node_ids * sizeof(struct kmem_list3 *);
    
    On my two nodes x86_64 machine, kmem_cache.obj_size is now 192 instead of 704
    (This is because on x86_64, MAX_NUMNODES is 64)
    
    On bigger NUMA setups, this might reduce the gfporder of "cache_cache"
    
    Signed-off-by: default avatarEric Dumazet <dada1@cosmosbay.com>
    Cc: Pekka Enberg <penberg@cs.helsinki.fi>
    Cc: Andy Whitcroft <apw@shadowen.org>
    Cc: Christoph Lameter <clameter@engr.sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    8da3430d