• Waiman Long's avatar
    mm, slab: extend slab/shrink to shrink all memcg caches · 04f768a3
    Waiman Long authored
    Currently, a value of '1" is written to /sys/kernel/slab/<slab>/shrink
    file to shrink the slab by flushing out all the per-cpu slabs and free
    slabs in partial lists.  This can be useful to squeeze out a bit more
    memory under extreme condition as well as making the active object counts
    in /proc/slabinfo more accurate.
    
    This usually applies only to the root caches, as the SLUB_MEMCG_SYSFS_ON
    option is usually not enabled and "slub_memcg_sysfs=1" not set.  Even if
    memcg sysfs is turned on, it is too cumbersome and impractical to manage
    all those per-memcg sysfs files in a real production system.
    
    So there is no practical way to shrink memcg caches.  Fix this by enabling
    a proper write to the shrink sysfs file of the root cache to scan all the
    available memcg caches and shrink them as well.  For a non-root memcg
    cache (when SLUB_MEMCG_SYSFS_ON or slub_memcg_sysfs is on), only that
    cache will be shrunk when written.
    
    On a 2-socket 64-core 256-thread arm64 system with 64k page after
    a parallel kernel build, the the amount of memory occupied by slabs
    before shrinking slabs were:
    
     # grep task_struct /proc/slabinfo
     task_struct        53137  53192   4288   61    4 : tunables    0    0
     0 : slabdata    872    872      0
     # grep "^S[lRU]" /proc/meminfo
     Slab:            3936832 kB
     SReclaimable:     399104 kB
     SUnreclaim:      3537728 kB
    
    After shrinking slabs (by echoing "1" to all shrink files):
    
     # grep "^S[lRU]" /proc/meminfo
     Slab:            1356288 kB
     SReclaimable:     263296 kB
     SUnreclaim:      1092992 kB
     # grep task_struct /proc/slabinfo
     task_struct         2764   6832   4288   61    4 : tunables    0    0
     0 : slabdata    112    112      0
    
    Link: http://lkml.kernel.org/r/20190723151445.7385-1-longman@redhat.comSigned-off-by: default avatarWaiman Long <longman@redhat.com>
    Acked-by: default avatarRoman Gushchin <guro@fb.com>
    Acked-by: default avatarChristoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Vladimir Davydov <vdavydov.dev@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    04f768a3
slab_common.c 43.8 KB