Skip to content
  • Vladimir Davydov's avatar
    slab: embed memcg_cache_params to kmem_cache · f7ce3190
    Vladimir Davydov authored
    
    
    Currently, kmem_cache stores a pointer to struct memcg_cache_params
    instead of embedding it.  The rationale is to save memory when kmem
    accounting is disabled.  However, the memcg_cache_params has shrivelled
    drastically since it was first introduced:
    
    * Initially:
    
    struct memcg_cache_params {
    	bool is_root_cache;
    	union {
    		struct kmem_cache *memcg_caches[0];
    		struct {
    			struct mem_cgroup *memcg;
    			struct list_head list;
    			struct kmem_cache *root_cache;
    			bool dead;
    			atomic_t nr_pages;
    			struct work_struct destroy;
    		};
    	};
    };
    
    * Now:
    
    struct memcg_cache_params {
    	bool is_root_cache;
    	union {
    		struct {
    			struct rcu_head rcu_head;
    			struct kmem_cache *memcg_caches[0];
    		};
    		struct {
    			struct mem_cgroup *memcg;
    			struct kmem_cache *root_cache;
    		};
    	};
    };
    
    So the memory saving does not seem to be a clear win anymore.
    
    OTOH, keeping a pointer to memcg_cache_params struct instead of embedding
    it results in touching one more cache line on kmem alloc/free hot paths.
    Besides, it makes linking kmem caches in a list chained by a field of
    struct memcg_cache_params really painful due to a level of indirection,
    while I want to make them linked in the following patch.  That said, let
    us embed it.
    
    Signed-off-by: default avatarVladimir Davydov <vdavydov@parallels.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Michal Hocko <mhocko@suse.cz>
    Cc: Tejun Heo <tj@kernel.org>
    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>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f7ce3190