• Vladimir Davydov's avatar
    memcg, slab: never try to merge memcg caches · a44cb944
    Vladimir Davydov authored
    When a kmem cache is created (kmem_cache_create_memcg()), we first try to
    find a compatible cache that already exists and can handle requests from
    the new cache, i.e.  has the same object size, alignment, ctor, etc.  If
    there is such a cache, we do not create any new caches, instead we simply
    increment the refcount of the cache found and return it.
    
    Currently we do this procedure not only when creating root caches, but
    also for memcg caches.  However, there is no point in that, because, as
    every memcg cache has exactly the same parameters as its parent and cache
    merging cannot be turned off in runtime (only on boot by passing
    "slub_nomerge"), the root caches of any two potentially mergeable memcg
    caches should be merged already, i.e.  it must be the same root cache, and
    therefore we couldn't even get to the memcg cache creation, because it
    already exists.
    
    The only exception is boot caches - they are explicitly forbidden to be
    merged by setting their refcount to -1.  There are currently only two of
    them - kmem_cache and kmem_cache_node, which are used in slab internals (I
    do not count kmalloc caches as their refcount is set to 1 immediately
    after creation).  Since they are prevented from merging preliminary I
    guess we should avoid to merge their children too.
    
    So let's remove the useless code responsible for merging memcg caches.
    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>
    a44cb944
slub.c 127 KB