Skip to content
  • Christoph Lameter's avatar
    this_cpu: Page allocator conversion · 99dcc3e5
    Christoph Lameter authored
    
    
    Use the per cpu allocator functionality to avoid per cpu arrays in struct zone.
    
    This drastically reduces the size of struct zone for systems with large
    amounts of processors and allows placement of critical variables of struct
    zone in one cacheline even on very large systems.
    
    Another effect is that the pagesets of one processor are placed near one
    another. If multiple pagesets from different zones fit into one cacheline
    then additional cacheline fetches can be avoided on the hot paths when
    allocating memory from multiple zones.
    
    Bootstrap becomes simpler if we use the same scheme for UP, SMP, NUMA. #ifdefs
    are reduced and we can drop the zone_pcp macro.
    
    Hotplug handling is also simplified since cpu alloc can bring up and
    shut down cpu areas for a specific cpu as a whole. So there is no need to
    allocate or free individual pagesets.
    
    V7-V8:
    - Explain chicken egg dilemmna with percpu allocator.
    
    V4-V5:
    - Fix up cases where per_cpu_ptr is called before irq disable
    - Integrate the bootstrap logic that was separate before.
    
    tj: Build failure in pageset_cpuup_callback() due to missing ret
        variable fixed.
    
    Reviewed-by: default avatarMel Gorman <mel@csn.ul.ie>
    Signed-off-by: default avatarChristoph Lameter <cl@linux-foundation.org>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    99dcc3e5