From patchwork Thu Jul 20 07:08:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yosry Ahmed X-Patchwork-Id: 123056 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:c923:0:b0:3e4:2afc:c1 with SMTP id j3csp2955014vqt; Thu, 20 Jul 2023 00:58:41 -0700 (PDT) X-Google-Smtp-Source: APBJJlHaG2j+u69NaFSNrSC6FWfd6M+uwSmb6WYmgfFbLNNUCZt9kLbv4MyHuT3Rt41l3LbMDDC4 X-Received: by 2002:a17:907:6d0c:b0:993:e695:b589 with SMTP id sa12-20020a1709076d0c00b00993e695b589mr6489609ejc.20.1689839921615; Thu, 20 Jul 2023 00:58:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689839921; cv=none; d=google.com; s=arc-20160816; b=TocgpLU5ZJ8llyjBkYxnE980Y3sX3War9yNuazZAQe3mMDNQNVw9CC3sefR//iAiYz UC22P/IE2Mg8AYvk/AIerEBedVmhaSo9aKgnJwE/46ziAntMqsVvfmn0WsWQYc524/nq g74NQcNosKUUsGU4AbxR5KpdIzTysyRbobgtHztPRDG6kBqK5ILOmBrhNZhTJI0h6fYm 2HMbKUk7tlsPZBgHP2557fFBhYE8YctWJBiKo3xpCr4RAtV1YGcN8ZvYrfQ/gBjRK9gg 2+BOruZEo1ybYyq3omH9RcFrEPo6DSUQ1RVkogNKBFY7K7Sv8j8zhQ9K4n0CiFqM+Jvb dYhA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=n6O0Lt5KhyslMSHzCGrHaCXx7KAwNPu5E55KNetzzTM=; fh=5QaWCNvsrziG43oP6cMwR1zyvEmdAKz+qAWSnAk1QIY=; b=AwZv2CrQYgkJT5pJwY/6qTJV1/zI8M6jCKrjIsdizGaHpxL/smgK3Lr5+5uWIx1ZhL PcXE0W0VHgxsaIu8yvJOEbz3jJZY2iT+XB3TtBxMirpBSu0sZVI9OlNkrXLgEIxQBTn8 OmdVpuUxo+PT7zAdR1eOzzjz8/7U1MvfOQmI+sWBYIPNd3u9mHG0y4B9KikA1KNXiL2X QYXAMRFmdpK9Vx01W2w7eyiI2aZRMnygY9CeyR59l6eVXuazjQ3tRDze4VIJxOd2pkaE U4xsP725pdvWMLyegWDjQce6Z3DR2QmcP7US/QMz/5yeRr8moMtLS+3YKeQmLUbkc0uy Tfmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="sV87N/Hx"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id kq20-20020a170906abd400b00992b9afd033si320946ejb.622.2023.07.20.00.58.17; Thu, 20 Jul 2023 00:58:41 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20221208 header.b="sV87N/Hx"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231561AbjGTHJZ (ORCPT + 99 others); Thu, 20 Jul 2023 03:09:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42958 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231458AbjGTHIs (ORCPT ); Thu, 20 Jul 2023 03:08:48 -0400 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B270626BB for ; Thu, 20 Jul 2023 00:08:41 -0700 (PDT) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-56942442eb0so5423057b3.1 for ; Thu, 20 Jul 2023 00:08:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1689836921; x=1692428921; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=n6O0Lt5KhyslMSHzCGrHaCXx7KAwNPu5E55KNetzzTM=; b=sV87N/HxxcZHHL1alJO5nBf8HzjYMdw6nkcR38Ddq2rUuAf28cTRr0rb709fkiRMW+ qEy3FdhFn01ikwkfx7y9qLguXlaMHGLFmuRtJXH+L+mW9RyHbcOJWlAUGrGs6aAu/INw 41Y2qTn8C7MjL6RvRw/y0YgIGxiJWL68zL7cWNRAYxyzZ5Cms/cFb5dUzlTJ6iCOM/ec 43odK5EQY91sLY+01W8AhKo4cVLmfc3JuvWr3teNDoKfkk1Lyj7dpYXltbO4KTOFr6c4 DheP8D0OnAwjx0EXPzUp5uV1Ui6HMxgha12C+iK56/iEaIj2+ON6C0S7v2ijUdptonk9 M9ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689836921; x=1692428921; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=n6O0Lt5KhyslMSHzCGrHaCXx7KAwNPu5E55KNetzzTM=; b=P+jr0rTmDwhcR8jue8e5J7Y1q8Ijin946yTKrN2t8cyfu/JB+x+3+rtWCj6f/WkcV7 c6fPtkZsj1DHJxA0sEzxBoszjbpg+Iy+fzfcBbPEPgmkLB7HyecRlkgOsO1XYFFxF7eL KEkTrptVO0Rmzp2ETz8YWEbMH6f8qprdul6rMCRMYRSijNn9Hpv81PVnwKuWhepjPJDw fG1/inRRC0Ya0K6N61/Fr45Z0L+zatzSE/WXCclQYhM4CekBja1+av0pToWz5OFale+1 wP70X3l60NuX2ROVXb8Inho5OEzgUOp62MiC9e66oMvrAznYC0wLLp+2HLurRlREgygL Anwg== X-Gm-Message-State: ABy/qLY9veaZ+aiMzSM9RcXqtEP9HDQxp3xsVxtXyb4xTKD2X8R13qhs 9rgDzPkn0b8RDD/jZD83nXCTTkjbhQVs/LKl X-Received: from yosry.c.googlers.com ([fda3:e722:ac3:cc00:7f:e700:c0a8:2327]) (user=yosryahmed job=sendgmr) by 2002:a5b:b8b:0:b0:c4c:f97e:421a with SMTP id l11-20020a5b0b8b000000b00c4cf97e421amr39950ybq.4.1689836920855; Thu, 20 Jul 2023 00:08:40 -0700 (PDT) Date: Thu, 20 Jul 2023 07:08:24 +0000 In-Reply-To: <20230720070825.992023-1-yosryahmed@google.com> Mime-Version: 1.0 References: <20230720070825.992023-1-yosryahmed@google.com> X-Mailer: git-send-email 2.41.0.255.g8b1d071c50-goog Message-ID: <20230720070825.992023-8-yosryahmed@google.com> Subject: [RFC PATCH 7/8] memcg: add sysctl and config option to control memory recharging From: Yosry Ahmed To: Andrew Morton , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt Cc: Muchun Song , "Matthew Wilcox (Oracle)" , Tejun Heo , Zefan Li , Yu Zhao , Luis Chamberlain , Kees Cook , Iurii Zaikin , "T.J. Mercier" , Greg Thelen , linux-kernel@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org, Yosry Ahmed X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1771925585314913995 X-GMAIL-MSGID: 1771925585314913995 Add a sysctl to enable/disable memory recharging for offline memcgs. Add a config option to control whether or not it is enabled by default. Signed-off-by: Yosry Ahmed --- include/linux/memcontrol.h | 2 ++ kernel/sysctl.c | 11 +++++++++++ mm/Kconfig | 12 ++++++++++++ mm/memcontrol.c | 9 ++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 59b653d4a76e..ae9f09ee90cb 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -60,6 +60,8 @@ struct mem_cgroup_reclaim_cookie { #ifdef CONFIG_MEMCG +extern int sysctl_recharge_offline_memcgs; + #define MEM_CGROUP_ID_SHIFT 16 #define MEM_CGROUP_ID_MAX USHRT_MAX diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 354a2d294f52..1735d1d95652 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -2249,6 +2249,17 @@ static struct ctl_table vm_table[] = { .extra2 = (void *)&mmap_rnd_compat_bits_max, }, #endif +#ifdef CONFIG_MEMCG + { + .procname = "recharge_offline_memcgs", + .data = &sysctl_recharge_offline_memcgs, + .maxlen = sizeof(sysctl_recharge_offline_memcgs), + .mode = 0644, + .proc_handler = proc_dointvec_minmax, + .extra1 = SYSCTL_ZERO, + .extra2 = SYSCTL_ONE, + }, +#endif /* CONFIG_MEMCG */ { } }; diff --git a/mm/Kconfig b/mm/Kconfig index 09130434e30d..9462c4b598d9 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -1236,6 +1236,18 @@ config LOCK_MM_AND_FIND_VMA bool depends on !STACK_GROWSUP +config MEMCG_RECHARGE_OFFLINE_ENABLED + bool "Recharge memory charged to offline memcgs" + depends on MEMCG + help + When a memory cgroup is removed by userspace, try to recharge any + memory still charged to it to avoid having it live on as an offline + memcg. Offline memcgs potentially consume memory and limit scalability + of some operations. + + This option enables the above behavior by default. It can be override + at runtime through /proc/sys/vm/recharge_offline_memcgs. + source "mm/damon/Kconfig" endmenu diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 2fe9c6f1be80..25cdb17eaaa3 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -96,6 +96,9 @@ static bool cgroup_memory_nobpf __ro_after_init; static DECLARE_WAIT_QUEUE_HEAD(memcg_cgwb_frn_waitq); #endif +int sysctl_recharge_offline_memcgs __read_mostly = IS_ENABLED( + CONFIG_MEMCG_RECHARGE_OFFLINE_ENABLED); + static struct workqueue_struct *memcg_recharge_wq; /* Whether legacy memory+swap accounting is active */ @@ -6592,7 +6595,8 @@ static void memcg_recharge_mapped_folios(struct mem_cgroup *memcg) INIT_DELAYED_WORK(&memcg->recharge_mapped_work.dwork, memcg_do_recharge_mapped_folios); - if (memcg_recharge_wq && memcg_nr_local_mapped_pages(memcg)) { + if (sysctl_recharge_offline_memcgs && + memcg_recharge_wq && memcg_nr_local_mapped_pages(memcg)) { memcg->recharge_mapped_work.retries = 0; queue_delayed_work(memcg_recharge_wq, &memcg->recharge_mapped_work.dwork, 0); @@ -6605,6 +6609,9 @@ static bool should_do_deferred_recharge(struct folio *folio) struct mem_cgroup *memcg; bool ret; + if (!sysctl_recharge_offline_memcgs) + return false; + rcu_read_lock(); memcg = folio_memcg_rcu(folio); ret = memcg && !!(memcg->css.flags & CSS_DYING);