• Joonsoo Kim's avatar
    topology: add support for node_to_mem_node() to determine the fallback node · ad2c8144
    Joonsoo Kim authored
    Anton noticed (http://www.spinics.net/lists/linux-mm/msg67489.html) that
    on ppc LPARs with memoryless nodes, a large amount of memory was consumed
    by slabs and was marked unreclaimable.  He tracked it down to slab
    deactivations in the SLUB core when we allocate remotely, leading to poor
    efficiency always when memoryless nodes are present.
    
    After much discussion, Joonsoo provided a few patches that help
    significantly.  They don't resolve the problem altogether:
    
     - memory hotplug still needs testing, that is when a memoryless node
       becomes memory-ful, we want to dtrt
     - there are other reasons for going off-node than memoryless nodes,
       e.g., fully exhausted local nodes
    
    Neither case is resolved with this series, but I don't think that should
    block their acceptance, as they can be explored/resolved with follow-on
    patches.
    
    The series consists of:
    
    [1/3] topology: add support for node_to_mem_node() to determine the
          fallback node
    
    [2/3] slub: fallback to node_to_mem_node() node if allocating on
          memoryless node
    
          - Joonsoo's patches to cache the nearest node with memory for each
            NUMA node
    
    [3/3] Partial revert of 81c98869 (""kthread: ensure locality of
          task_struct allocations")
    
     - At Tejun's request, keep the knowledge of memoryless node fallback
       to the allocator core.
    
    This patch (of 3):
    
    We need to determine the fallback node in slub allocator if the allocation
    target node is memoryless node.  Without it, the SLUB wrongly select the
    node which has no memory and can't use a partial slab, because of node
    mismatch.  Introduced function, node_to_mem_node(X), will return a node Y
    with memory that has the nearest distance.  If X is memoryless node, it
    will return nearest distance node, but, if X is normal node, it will
    return itself.
    
    We will use this function in following patch to determine the fallback
    node.
    Signed-off-by: default avatarJoonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: default avatarNishanth Aravamudan <nacc@linux.vnet.ibm.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Han Pingtian <hanpt@linux.vnet.ibm.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Anton Blanchard <anton@samba.org>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Wanpeng Li <liwanp@linux.vnet.ibm.com>
    Cc: Tejun Heo <tj@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    ad2c8144
page_alloc.c 184 KB