• Vladimir Davydov's avatar
    slub: rework sysfs layout for memcg caches · 9a41707b
    Vladimir Davydov authored
    Currently, we try to arrange sysfs entries for memcg caches in the same
    manner as for global caches.  Apart from turning /sys/kernel/slab into a
    mess when there are a lot of kmem-active memcgs created, it actually
    does not work properly - we won't create more than one link to a memcg
    cache in case its parent is merged with another cache.  For instance, if
    A is a root cache merged with another root cache B, we will have the
    following sysfs setup:
    
      X
      A -> X
      B -> X
    
    where X is some unique id (see create_unique_id()).  Now if memcgs M and
    N start to allocate from cache A (or B, which is the same), we will get:
    
      X
      X:M
      X:N
      A -> X
      B -> X
      A:M -> X:M
      A:N -> X:N
    
    Since B is an alias for A, we won't get entries B:M and B:N, which is
    confusing.
    
    It is more logical to have entries for memcg caches under the
    corresponding root cache's sysfs directory.  This would allow us to keep
    sysfs layout clean, and avoid such inconsistencies like one described
    above.
    
    This patch does the trick.  It creates a "cgroup" kset in each root
    cache kobject to keep its children caches there.
    Signed-off-by: default avatarVladimir Davydov <vdavydov@parallels.com>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Pekka Enberg <penberg@kernel.org>
    Cc: Glauber Costa <glommer@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9a41707b
slub.c 128 KB