Skip to content
  • Paul Jackson's avatar
    [PATCH] cpuset memory spread slab cache implementation · 101a5001
    Paul Jackson authored
    Provide the slab cache infrastructure to support cpuset memory spreading.
    See the previous patches, cpuset_mem_spread, for an explanation of cpuset
    memory spreading.
    This patch provides a slab cache SLAB_MEM_SPREAD flag.  If set in the
    kmem_cache_create() call defining a slab cache, then any task marked with the
    process state flag PF_MEMSPREAD will spread memory page allocations for that
    cache over all the allowed nodes, instead of preferring the local (faulting)
    On systems not configured with CONFIG_NUMA, this results in no change to the
    page allocation code path for slab caches.
    On systems with cpusets configured in the kernel, but the "memory_spread"
    cpuset option not enabled for the current tasks cpuset, this adds a call to a
    cpuset routine and failed bit test of the processor state flag PF_SPREAD_SLAB.
    For tasks so marked, a second inline test is done for the slab cache flag
    SLAB_MEM_SPREAD, and if that is set and if the allocation is not
    in_interrupt(), this adds a call to to a cpuset routine that computes which of
    the tasks mems_allowed nodes should be preferred for this allocation.
    ==> This patch adds another hook into the performance critical
        code path to allocating objects from the slab cache, in the
        ____cache_alloc() chunk, below.  The next patch optimizes this
        hook, reducing the impact of the combined mempolicy plus memory
        spreading hooks on this critical code path to a single check
        against the tasks task_struct flags word.
    This patch provides the generic slab flags and logic needed to apply memory
    spreading to a particular slab.
    A subsequent patch will mark a few specific slab caches for this placement
    Signed-off-by: default avatarPaul Jackson <>
    Signed-off-by: default avatarAndrew Morton <>
    Signed-off-by: default avatarLinus Torvalds <>