• Martin Hicks's avatar
    [PATCH] VM: early zone reclaim · 753ee728
    Martin Hicks authored
    This is the core of the (much simplified) early reclaim.  The goal of this
    patch is to reclaim some easily-freed pages from a zone before falling back
    onto another zone.
    
    One of the major uses of this is NUMA machines.  With the default allocator
    behavior the allocator would look for memory in another zone, which might be
    off-node, before trying to reclaim from the current zone.
    
    This adds a zone tuneable to enable early zone reclaim.  It is selected on a
    per-zone basis and is turned on/off via syscall.
    
    Adding some extra throttling on the reclaim was also required (patch
    4/4).  Without the machine would grind to a crawl when doing a "make -j"
    kernel build.  Even with this patch the System Time is higher on
    average, but it seems tolerable.  Here are some numbers for kernbench
    runs on a 2-node, 4cpu, 8Gig RAM Altix in the "make -j" run:
    
    			wall  user   sys   %cpu  ctx sw.  sleeps
    			----  ----   ---   ----   ------  ------
    No patch		1009  1384   847   258   298170   504402
    w/patch, no reclaim     880   1376   667   288   254064   396745
    w/patch & reclaim       1079  1385   926   252   291625   548873
    
    These numbers are the average of 2 runs of 3 "make -j" runs done right
    after system boot.  Run-to-run variability for "make -j" is huge, so
    these numbers aren't terribly useful except to seee that with reclaim
    the benchmark still finishes in a reasonable amount of time.
    
    I also looked at the NUMA hit/miss stats for the "make -j" runs and the
    reclaim doesn't make any difference when the machine is thrashing away.
    
    Doing a "make -j8" on a single node that is filled with page cache pages
    takes 700 seconds with reclaim turned on and 735 seconds without reclaim
    (due to remote memory accesses).
    
    The simple zone_reclaim syscall program is at
    http://www.bork.org/~mort/sgi/zone_reclaim.cSigned-off-by: default avatarMartin Hicks <mort@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    753ee728
page_alloc.c 58.4 KB