• Tejun Heo's avatar
    slab: link memcg kmem_caches on their associated memory cgroup · bc2791f8
    Tejun Heo authored
    With kmem cgroup support enabled, kmem_caches can be created and
    destroyed frequently and a great number of near empty kmem_caches can
    accumulate if there are a lot of transient cgroups and the system is not
    under memory pressure.  When memory reclaim starts under such
    conditions, it can lead to consecutive deactivation and destruction of
    many kmem_caches, easily hundreds of thousands on moderately large
    systems, exposing scalability issues in the current slab management
    code.  This is one of the patches to address the issue.
    
    While a memcg kmem_cache is listed on its root cache's ->children list,
    there is no direct way to iterate all kmem_caches which are assocaited
    with a memory cgroup.  The only way to iterate them is walking all
    caches while filtering out caches which don't match, which would be most
    of them.
    
    This makes memcg destruction operations O(N^2) where N is the total
    number of slab caches which can be huge.  This combined with the
    synchronous RCU operations can tie up a CPU and affect the whole machine
    for many hours when memory reclaim triggers offlining and destruction of
    the stale memcgs.
    
    This patch adds mem_cgroup->kmem_caches list which goes through
    memcg_cache_params->kmem_caches_node of all kmem_caches which are
    associated with the memcg.  All memcg specific iterations, including
    stat file access, are updated to use the new list instead.
    
    Link: http://lkml.kernel.org/r/20170117235411.9408-6-tj@kernel.org
    
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Reported-by: default avatarJay Vana <jsvana@fb.com>
    Acked-by: default avatarVladimir Davydov <vdavydov.dev@gmail.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    bc2791f8