Skip to content

memcg: release kmemcg_id on css offline

Vladimir Davydov cgroups linux-mm lkml 2 versions – In review

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v2 Latest7 patches 3 repliesIn review
  2. v16 patches 1 replySuperseded

Changes in v2 from the cover letter

- rebase on top of v3.19-rc4-mmotm-2015-01-16-15-50
- release css->id after css_free to avoid kmem cache name clashes

Patches in v2 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/7slab: embed memcg_cache_params to kmem_cacheinclude/linux/slab.h include/linux/slab_def.h include/linux/slub_def.h +4 more+109 -1020 replies
2/7slab: link memcg caches of the same kind into a listinclude/linux/slab.h mm/slab.c mm/slab.h +2 more+41 -330 replies
3/7cgroup: release css->id after css_freekernel/cgroup.c+7 -33 replies
4/7slab: use css id for naming per memcg cachesmm/slab_common.c+3 -30 replies
5/7memcg: free memcg_caches slot on css offlineinclude/linux/slab.h mm/memcontrol.c mm/slab_common.c+65 -220 replies
6/7list_lru: add helpers to isolate itemsfs/dcache.c fs/gfs2/quota.c fs/inode.c +5 more+50 -260 replies
7/7memcg: reparent list_lrus and free kmemcg_id on css offlineinclude/linux/list_lru.h mm/list_lru.c mm/memcontrol.c+79 -90 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v2 yet.

Read the v2 thread

Cover letter [PATCH -mm v2 0/7] memcg: release kmemcg_id on css offline

Hi,

There's one thing about kmemcg implementation that's bothering me. It's about arrays holding per-memcg data (e.g. kmem_cache->memcg_params-> memcg_caches). On kmalloc or list_lru_{add,del} we want to quickly lookup the copy of kmem_cache or list_lru corresponding to the current cgroup. Currently, we hold all per-memcg caches/lists in an array indexed by mem_cgroup->kmemcg_id. This allows us to lookup quickly, and that's nice, but the arrays can grow indefinitely, because we reserve slots for all cgroups, including offlined, and this is disastrous and must be fixed.

There are several ways to fix this issue [1], but it seems the best we can do is to free kmemcg_id on css offline (solution #2). The idea is that we actually only need kmemcg_id on kmem cache allocations, in order to lookup the kmem cache copy corresponding to the allocating memory cgroup, while it is never used of kmem frees. We do rely on kmemcg_id being unique for each cgroup in some places, but they are easy to fix. And regarding per memcg list_lru, which are indexed by kmemcg_id, we can easily reparent them - it is as simple as splicing lists. This patch set therefore implements this approach.

It is organized as follows:
- Currently, sl[AU]b core relies on kmemcg_id being unique per kmem_cache. Patches 1-4 fix that.
- Patch 5 makes memcg_cache_params->memcg_caches entries released on css offline.
- Patch 6 alters the list_lru API a bit to facilitate reparenting.
- Patch 7 implements per memcg list_lru reparenting on css offline. After list_lrus have been reparented, there's no need to keep kmemcg_id any more, so we can free it on css offline.

Changes in v2:
- rebase on top of v3.19-rc4-mmotm-2015-01-16-15-50
- release css->id after css_free to avoid kmem cache name clashes

v1: https://lkml.org/lkml/2015/1/16/285

[1] https://lkml.org/lkml/2015/1/13/107

Thanks,

Vladimir Davydov (7):
slab: embed memcg_cache_params to kmem_cache
slab: link memcg caches of the same kind into a list
cgroup: release css->id after css_free
slab: use css id for naming per memcg caches
memcg: free memcg_caches slot on css offline
list_lru: add helpers to isolate items
memcg: reparent list_lrus and free kmemcg_id on css offline

 fs/dcache.c              |   21 +++---
 fs/gfs2/quota.c          |    5 +-
 fs/inode.c               |    8 +--
 fs/xfs/xfs_buf.c         |    6 +-
 fs/xfs/xfs_qm.c          |    5 +-
 include/linux/list_lru.h |   12 +++-
 include/linux/slab.h     |   31 +++++----
 include/linux/slab_def.h |    2 +-
 include/linux/slub_def.h |    2 +-
 kernel/cgroup.c          |   10 ++-
 mm/list_lru.c            |   65 ++++++++++++++++--
 mm/memcontrol.c          |   86 ++++++++++++++++++-----
 mm/slab.c                |   13 ++--
 mm/slab.h                |   65 +++++++++++-------
 mm/slab_common.c         |  172 +++++++++++++++++++++++++++-------------------
 mm/slub.c                |   24 +++----
 mm/workingset.c          |    3 +-
 17 files changed, 343 insertions(+), 187 deletions(-)
Signature · 7 lines
1.7.10.4

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>