linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 00/14] mm: memcg: separate legacy cgroup v1 code and put under config option
@ 2024-05-28 20:20 Roman Gushchin
  2024-05-28 20:20 ` [PATCH v1 01/14] mm: memcg: introduce memcontrol-v1.c Roman Gushchin
                   ` (11 more replies)
  0 siblings, 12 replies; 40+ messages in thread
From: Roman Gushchin @ 2024-05-28 20:20 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Muchun Song, Johannes Weiner, Michal Hocko, Shakeel Butt,
	Matthew Wilcox, linux-mm, linux-kernel, Roman Gushchin

Cgroups v2 have been around for a while and many users have fully adopted them,
so they never use cgroups v1 features and functionality. Yet they have to "pay"
for the cgroup v1 support anyway:
1) the kernel binary contains an unused cgroup v1 code,
2) some code paths have additional checks which are not needed,
3) some common structures like task_struct and mem_cgroup contain unused
   cgroup v1-specific members.

Cgroup v1's memory controller has a number of features that are not supported
by cgroup v2 and their implementation is pretty much self contained.
Most notably, these features are: soft limit reclaim, oom handling in userspace,
complicated event notification system, charge migration. Cgroup v1-specific code
in memcontrol.c is close to 4k lines in size and it's intervened with generic
and cgroup v2-specific code. It's a burden on developers and maintainers.

This patchset aims to solve these problems by:
1) moving cgroup v1-specific memcg code to the new mm/memcontrol-v1.c file,
2) putting definitions shared by memcontrol.c and memcontrol-v1.c into the
   mm/memcontrol-v1.h header,
3) introducing the CONFIG_MEMCG_V1 config option, turned off by default,
4) making memcontrol-v1.c to compile only if CONFIG_MEMCG_V1 is set.

If CONFIG_MEMCG_V1 is not set, cgroup v1 memory controller is still available
for mounting, however no memory-specific control knobs are present.

This patchset is based against mm-unstable tree (b610f75d19a34),
however a version based on mm-stable can be found here:
  https://github.com/rgushchin/linux/tree/memcontrol_v1.1-stable .

rfc:
  https://lwn.net/Articles/973082/

v1:
  - switched to CONFIG_MEMCG_V1 being off by default based on LSFMMBPF
    discussion [1]
  - switched to memcg1_ prefix (Johannes)
  - many minor fixes
  - dropped patches which put struct memcg members under CONFIG_MEMCG_V1
    (will post as a separate patchset)

[1]: https://lwn.net/Articles/974575/

MAINTAINERS                |    2 +
include/linux/memcontrol.h |  156 ++++---
init/Kconfig               |    9 +
mm/Makefile                |    2 +
mm/memcontrol-v1.c         | 2933 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mm/memcontrol-v1.h         |  132 ++++++
mm/memcontrol.c            | 4169 +++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------
mm/vmscan.c                |   10 +-
8 files changed, 3794 insertions(+), 3619 deletions(-)

Suggested-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Roman Gushchin <roman.gushchin@linux.dev>


Roman Gushchin (14):
  mm: memcg: introduce memcontrol-v1.c
  mm: memcg: move soft limit reclaim code to memcontrol-v1.c
  mm: memcg: rename soft limit reclaim-related functions
  mm: memcg: move charge migration code to memcontrol-v1.c
  mm: memcg: rename charge move-related functions
  mm: memcg: move legacy memcg event code into memcontrol-v1.c
  mm: memcg: rename memcg_check_events()
  mm: memcg: move cgroup v1 oom handling code into memcontrol-v1.c
  mm: memcg: rename memcg_oom_recover()
  mm: memcg: move cgroup v1 interface files to memcontrol-v1.c
  mm: memcg: make memcg1_update_tree() static
  mm: memcg: group cgroup v1 memcg related declarations
  mm: memcg: put cgroup v1-related members of task_struct under config
    option
  MAINTAINERS: add mm/memcontrol-v1.c/h to the list of maintained files

 MAINTAINERS                |    2 +
 include/linux/memcontrol.h |  156 +-
 init/Kconfig               |    9 +
 mm/Makefile                |    2 +
 mm/memcontrol-v1.c         | 2933 +++++++++++++++++++++++++
 mm/memcontrol-v1.h         |  132 ++
 mm/memcontrol.c            | 4141 ++++++------------------------------
 mm/vmscan.c                |   10 +-
 8 files changed, 3780 insertions(+), 3605 deletions(-)
 create mode 100644 mm/memcontrol-v1.c
 create mode 100644 mm/memcontrol-v1.h

-- 
2.45.1



^ permalink raw reply	[flat|nested] 40+ messages in thread

end of thread, other threads:[~2024-06-24 22:00 UTC | newest]

Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-28 20:20 [PATCH v1 00/14] mm: memcg: separate legacy cgroup v1 code and put under config option Roman Gushchin
2024-05-28 20:20 ` [PATCH v1 01/14] mm: memcg: introduce memcontrol-v1.c Roman Gushchin
2024-06-01  6:42   ` Shakeel Butt
2024-06-04  3:58     ` Roman Gushchin
2024-05-28 20:20 ` [PATCH v1 02/14] mm: memcg: move soft limit reclaim code to memcontrol-v1.c Roman Gushchin
2024-06-01  6:42   ` Shakeel Butt
2024-05-28 20:20 ` [PATCH v1 03/14] mm: memcg: rename soft limit reclaim-related functions Roman Gushchin
2024-06-01  6:43   ` Shakeel Butt
2024-05-28 20:20 ` [PATCH v1 04/14] mm: memcg: move charge migration code to memcontrol-v1.c Roman Gushchin
2024-06-01  6:44   ` Shakeel Butt
2024-05-28 20:20 ` [PATCH v1 05/14] mm: memcg: rename charge move-related functions Roman Gushchin
2024-06-01  6:45   ` Shakeel Butt
2024-05-28 20:20 ` [PATCH v1 06/14] mm: memcg: move legacy memcg event code into memcontrol-v1.c Roman Gushchin
2024-06-01  6:33   ` Shakeel Butt
2024-06-04  3:57     ` Roman Gushchin
2024-06-01  6:45   ` Shakeel Butt
2024-05-28 20:20 ` [PATCH v1 07/14] mm: memcg: rename memcg_check_events() Roman Gushchin
2024-06-01  6:39   ` Shakeel Butt
2024-06-01  6:46   ` Shakeel Butt
2024-05-28 20:21 ` [PATCH v1 08/14] mm: memcg: move cgroup v1 oom handling code into memcontrol-v1.c Roman Gushchin
2024-06-01  6:46   ` Shakeel Butt
2024-06-01  6:47   ` Shakeel Butt
2024-05-28 20:21 ` [PATCH v1 09/14] mm: memcg: rename memcg_oom_recover() Roman Gushchin
2024-06-01  6:48   ` Shakeel Butt
2024-05-28 21:44 ` [PATCH v1 10/14] mm: memcg: move cgroup v1 interface files to memcontrol-v1.c Roman Gushchin
2024-05-28 21:44   ` [PATCH v1 11/14] mm: memcg: make memcg1_update_tree() static Roman Gushchin
2024-06-01  6:48     ` Shakeel Butt
2024-05-28 21:44   ` [PATCH v1 12/14] mm: memcg: group cgroup v1 memcg related declarations Roman Gushchin
2024-06-01  6:49     ` Shakeel Butt
2024-05-28 21:44   ` [PATCH v1 13/14] mm: memcg: put cgroup v1-related members of task_struct under config option Roman Gushchin
2024-06-01  6:51     ` Shakeel Butt
2024-06-02 12:00     ` Lance Yang
2024-06-03 19:13       ` Roman Gushchin
2024-05-28 21:44   ` [PATCH v1 14/14] MAINTAINERS: add mm/memcontrol-v1.c/h to the list of maintained files Roman Gushchin
2024-06-01  6:53     ` Shakeel Butt
2024-06-01  6:48   ` [PATCH v1 10/14] mm: memcg: move cgroup v1 interface files to memcontrol-v1.c Shakeel Butt
2024-06-03 19:34 ` [PATCH v1 00/14] mm: memcg: separate legacy cgroup v1 code and put under config option Roman Gushchin
2024-06-07 15:29 ` Shakeel Butt
2024-06-07 16:13   ` Roman Gushchin
2024-06-24 22:00     ` Shakeel Butt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox