• Tim Chen's avatar
    mm: tune vm_committed_as percpu_counter batching size · 917d9290
    Tim Chen authored
    Currently the per cpu counter's batch size for memory accounting is
    configured as twice the number of cpus in the system.  However, for
    system with very large memory, it is more appropriate to make it
    proportional to the memory size per cpu in the system.
    
    For example, for a x86_64 system with 64 cpus and 128 GB of memory, the
    batch size is only 2*64 pages (0.5 MB).  So any memory accounting
    changes of more than 0.5MB will overflow the per cpu counter into the
    global counter.  Instead, for the new scheme, the batch size is
    configured to be 0.4% of the memory/cpu = 8MB (128 GB/64 /256), which is
    more inline with the memory size.
    
    I've done a repeated brk test of 800KB (from will-it-scale test suite)
    with 80 concurrent processes on a 4 socket Westmere machine with a total
    of 40 cores.  Without the patch, about 80% of cpu is spent on spin-lock
    contention within the vm_committed_as counter.  With the patch, there's
    a 73x speedup on the benchmark and the lock contention drops off almost
    entirely.
    
    [akpm@linux-foundation.org: fix section mismatch]
    Signed-off-by: default avatarTim Chen <tim.c.chen@linux.intel.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Eric Dumazet <eric.dumazet@gmail.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Wu Fengguang <fengguang.wu@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    917d9290
mm_init.c 5.02 KB