From patchwork Tue May 28 20:20:52 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Gushchin X-Patchwork-Id: 13677348 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1AAFC25B78 for ; Tue, 28 May 2024 20:21:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 864A36B0095; Tue, 28 May 2024 16:21:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 814A06B0098; Tue, 28 May 2024 16:21:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 704236B0099; Tue, 28 May 2024 16:21:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 4FD736B0095 for ; Tue, 28 May 2024 16:21:33 -0400 (EDT) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id EE1BCC02FC for ; Tue, 28 May 2024 20:21:32 +0000 (UTC) X-FDA: 82168924824.19.B232519 Received: from out-182.mta1.migadu.com (out-182.mta1.migadu.com [95.215.58.182]) by imf26.hostedemail.com (Postfix) with ESMTP id B955E14000A for ; Tue, 28 May 2024 20:21:30 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=j6BWKFNA; spf=pass (imf26.hostedemail.com: domain of roman.gushchin@linux.dev designates 95.215.58.182 as permitted sender) smtp.mailfrom=roman.gushchin@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1716927691; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=iGbJmrdXQEDHzblKOtQb/sJK4TKxsQPjhoG77g1wuwc=; b=QAYyRxH50hZOMwIhPPIkgs7gP6ah93YKKZA7XYJ78y3/Mor0ZPZj7UKnqe48ggqwOvNZRu aCSXSEDI3VGdC/8PwSrecSy7IQ6VJ18XgeGcOODwe7A6NULJn7pvZq0uCORhjaDe8j0ZCY p676vSic9NU5q5DwVyZpM+e6fb2rsaw= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=j6BWKFNA; spf=pass (imf26.hostedemail.com: domain of roman.gushchin@linux.dev designates 95.215.58.182 as permitted sender) smtp.mailfrom=roman.gushchin@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1716927691; a=rsa-sha256; cv=none; b=cf/Y9g5UEOZ3oDro41Djx2J6MLLzyf65OYbt12/GtdZx7tq2I6UJeWSmyGbQv0CS5ZLZQl 0JjyRxdOh3uq8hzvn6qMjHOLTxkNjOi9JeX17+9iJ9oJnadBr35FTpyfqZ4WtqIxDgCx92 9sAVvPapJOugCIpeQVf/CqT+lax47ts= X-Envelope-To: akpm@linux-foundation.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1716927688; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=iGbJmrdXQEDHzblKOtQb/sJK4TKxsQPjhoG77g1wuwc=; b=j6BWKFNAslF1vP2v1AiFcXZG0qF17CyEnSmTVYpckEqEameDCIuK/5Kz12wwXH7Kxj88PS lc+2hGQBbXtCLV55Ii6zuSdR+xNMY0Z88eSuw1OMu73B5lswmFflyVyN55ezA/yFMJ+wsl 0LQjn/npM02EXDFNd+mmQcIYvKECYVI= X-Envelope-To: muchun.song@linux.dev X-Envelope-To: hannes@cmpxchg.org X-Envelope-To: mhocko@kernel.org X-Envelope-To: shakeel.butt@linux.dev X-Envelope-To: willy@infradead.org X-Envelope-To: linux-mm@kvack.org X-Envelope-To: linux-kernel@vger.kernel.org X-Envelope-To: roman.gushchin@linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Roman Gushchin To: Andrew Morton Cc: Muchun Song , Johannes Weiner , Michal Hocko , Shakeel Butt , Matthew Wilcox , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Roman Gushchin Subject: [PATCH v1 00/14] mm: memcg: separate legacy cgroup v1 code and put under config option Date: Tue, 28 May 2024 13:20:52 -0700 Message-ID: <20240528202101.3099300-1-roman.gushchin@linux.dev> MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Stat-Signature: 7z5hggtwufb9ftf3rwgheerc66pryryo X-Rspamd-Queue-Id: B955E14000A X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1716927690-747939 X-HE-Meta: U2FsdGVkX1/rcIqAasIlrab3s52aGBb+PAZEe2VoRitr0hEl8/MEUJwxGGFOJIHhWhtThQWe7JojRr+dWczDtIxrqzp9dsO+LlUqEcY0HVJdFR1y9tVPP6H1uG3kR+2hr2ru1bWqn0lZiii3FJarURIJHdx5G6q6GOMsPH2hGC2O6CeqxRqg7u/4Sb0SYGnYP7FwLn2bJzJcvY0qDVdDPEOAliI3kaBtCF1opnIcZmz8JH8zFyh9rVvDh9bkrsDVD8uE1QitupfAQQTaJKAFge/vmmiybo8TFATxbJxSdXlXoFv54RCyvS2m4lzf9DqbYZaykoBDy3mJYS+KtGCeVFsO2vf/EBWF8XLkKRWejFWjo3tl71LDOdYunpV5G/L8piWU8pPkUv+Nq8njrCXFaKtKcp9AwhC9Je2YjSay8l4hrDeBdMiGCfxCSdpCV9mc830naCcLX+Lq8/l3hsmsgUTZuSiS/wlf+pZ+ry4gVHifLLY7aMkEhqtL71/JM7lpm+2KP/Ft0XZARWzHpkRcGms48CDoX524TgOQU5sckjM4Ncx4p6mNpW+/X6NIqgqT5BYDyT0lVDUqPPlahOLROQMDcjLIV6yJBBlu8pX15se51R1zjqcxkVmj+oUMuWumeRsDjTDBUaVeAzr/Z3vE6FbinX0KZRQbrPwAqWxZ9HNGm02VC4Djh5z3KxaNiU6SV3bsvMklN+DFM49BpQhQ3dWkEGdHvECnueW3MBzDqJjHWsfDIcRSjhhas3pTPNan2RV4V+bHN7ZVfLUk/AXt6Na2IymJhf45S1nRRrBmyB7k/oes268hz2JkFIgV5OwSr0sgoaqDYR/m1QO0lvFEnxHpAVTfY4c5KntZUX8fbciCvyB4HoPhrM37AXkMsymPuiJwY/AyI8Q7Kgz2w8w8L25xU+C1L3VnpDAJZ5J+0U0ZZCWY0/cvZUvLvYN1hRcy0SeLtLMiGVS9Uv+Pdqf FjQFAh5D xlOfbp91ZSwhomVvQLLl4/p8i/UWYhJyXuqBL+LysJzYtL96MhB4mp91GxDlt603b06PYBaaZ+RqwKw8jP7m7K10w/f/rQpuUy+Yr2GwzSB7I/yU40lrthH9ORuheGHIn0PU721+HT1u7C9dY3I4W14nKgN5xq6m60syCT0W1Vf8U8PlQehSwR9ImYknmt2ZShmrkUKfNx0uFGmbA4H0G3GrLag== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: 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) Signed-off-by: Roman Gushchin 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