summaryrefslogtreecommitdiffstats
path: root/mm/gup.c
diff options
context:
space:
mode:
authorShaohua Li2016-12-13 01:41:50 +0100
committerLinus Torvalds2016-12-13 03:55:07 +0100
commit5f33a0803bbd781de916f5c7448cbbbbc763d911 (patch)
treea3639bafaa7672ac4f99e00246e4f4d635d127ae /mm/gup.c
parentmm/mprotect.c: don't touch single threaded PTEs which are on the right node (diff)
downloadkernel-qcow2-linux-5f33a0803bbd781de916f5c7448cbbbbc763d911.tar.gz
kernel-qcow2-linux-5f33a0803bbd781de916f5c7448cbbbbc763d911.tar.xz
kernel-qcow2-linux-5f33a0803bbd781de916f5c7448cbbbbc763d911.zip
mm/vmscan.c: set correct defer count for shrinker
Our system uses significantly more slab memory with memcg enabled with the latest kernel. With 3.10 kernel, slab uses 2G memory, while with 4.6 kernel, 6G memory is used. The shrinker has problem. Let's see we have two memcg for one shrinker. In do_shrink_slab: 1. Check cg1. nr_deferred = 0, assume total_scan = 700. batch size is 1024, then no memory is freed. nr_deferred = 700 2. Check cg2. nr_deferred = 700. Assume freeable = 20, then total_scan = 10 or 40. Let's assume it's 10. No memory is freed. nr_deferred = 10. The deferred share of cg1 is lost in this case. kswapd will free no memory even run above steps again and again. The fix makes sure one memcg's deferred share isn't lost. Link: http://lkml.kernel.org/r/2414be961b5d25892060315fbb56bb19d81d0c07.1476227351.git.shli@fb.com Signed-off-by: Shaohua Li <shli@fb.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vladimir Davydov <vdavydov@parallels.com> Cc: <stable@vger.kernel.org> [4.0+] Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/gup.c')
0 files changed, 0 insertions, 0 deletions