diff options
author | Vladimir Davydov <vdavydov@parallels.com> | 2015-02-12 17:59:20 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-02-12 21:54:09 -0500 |
commit | f7ce3190c4a35bf887adb7a1aa1ba899b679872d (patch) | |
tree | 8a40d93f1e796e1007d59e67541ce3044430b927 /include/linux/slab_def.h | |
parent | 49e7e7ff8d551b5b1e2f8da8497b9058cfa25672 (diff) |
slab: embed memcg_cache_params to kmem_cache
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: Vladimir 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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/slab_def.h')
-rw-r--r-- | include/linux/slab_def.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h index b869d1662ba3..33d049066c3d 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h | |||
@@ -70,7 +70,7 @@ struct kmem_cache { | |||
70 | int obj_offset; | 70 | int obj_offset; |
71 | #endif /* CONFIG_DEBUG_SLAB */ | 71 | #endif /* CONFIG_DEBUG_SLAB */ |
72 | #ifdef CONFIG_MEMCG_KMEM | 72 | #ifdef CONFIG_MEMCG_KMEM |
73 | struct memcg_cache_params *memcg_params; | 73 | struct memcg_cache_params memcg_params; |
74 | #endif | 74 | #endif |
75 | 75 | ||
76 | struct kmem_cache_node *node[MAX_NUMNODES]; | 76 | struct kmem_cache_node *node[MAX_NUMNODES]; |