summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorTim Chen <tim.c.chen@linux.intel.com>2013-07-03 15:02:44 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2013-07-03 16:07:32 -0700
commit917d9290af749fac9c4d90bacf18699c9d8ba28d (patch)
tree506f3a6f90d318a612161da2adf8aae8f81aaab3 /kernel
parent2415cf12e04d415b16d9c2f2a705bcd6cd9a0474 (diff)
downloadlinux-917d9290af749fac9c4d90bacf18699c9d8ba28d.tar.bz2
mm: tune vm_committed_as percpu_counter batching size
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: Tim 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: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions