Received: by 2002:a05:7412:3784:b0:e2:908c:2ebd with SMTP id jk4csp2272780rdb; Tue, 3 Oct 2023 16:23:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHFscdwcxGNuqFGbJHCr7kY/H8BfKgVdd4dtTVcjAh6Ju3Rdn+4mGUyicV6JyB+1oZN1vwk X-Received: by 2002:a05:6870:5611:b0:1d1:3a58:14a5 with SMTP id m17-20020a056870561100b001d13a5814a5mr1154026oao.25.1696375395393; Tue, 03 Oct 2023 16:23:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1696375395; cv=none; d=google.com; s=arc-20160816; b=qE2BFt81qrLIlrAR+PXjuQUEv9Hvhbf3tyHgEf/4Aqt7f91DrehVVTNsUG8Ra94IUW Np0k6ce629zGkgUv04Ip1jl4BqNNVNO3BgKrkxC4so/Hwy9d/bfroAYzRdKWposA/mK+ 2019n94vAgBmAjfjYpHOMrJcEQDRvhzaSzRrczeuhc6xqBrgtW2/UV1XvIDXOPV7ABRx Kjbc17z8RlFhTWsHkvUGirCv5ONSjkNoO0123Gk8W8wTKgeh0T8RmlUNoY1QwAShKHGf HKJTSKyTL0EzjlHRi49dACzDDGtpPp+wyzIclZKlwuxhHnAVR8WEcFqSX32zTJ7BWD3Z y4Yg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=4Z022+hD2oB//jAKqOrdZqf+zZSE40o5uTIGWJ6ucIE=; fh=fIS5GDyUAh1FCX7s/1sSEf8uN4BQ6BHYKAivKNOc0Hg=; b=a0NpqiNxp69eteJICODTc+THiv8PP8zy0HcrtGazM2PWxFB4pEUXcl5s2ws1lROp0D MYX0bmFiTxfotBGX+jGdPIs7lhjHzWdumCrIm5P1WsU/fz5ovkIfs7ryMaVscY4Rmylk IzVARv2u3NjDbduIwWpf/jNYcfiBWy5Az9k5tLCQjMTjv/6UXtaA4PGA+ge3iy9a2Xbq SbOICeDMidDN/3uBtm/cuRTPwDbxz+b9Mdm2dJDq4VGbmtsFJ7BkV0HxBNPEoHNVQfSv Xa651c42zIo7M0mdV0N0NqMuWkpFjzsOn4Y0934K9ajuk8s74vc2XZNPGj0zkOVD/6q0 YSeg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=HAwn4xaK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id k21-20020a056a00169500b0068fbf6ba315si2594944pfc.233.2023.10.03.16.23.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Oct 2023 16:23:15 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=HAwn4xaK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 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 (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 3577180A8BAA; Tue, 3 Oct 2023 16:23:12 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235505AbjJCXW4 (ORCPT + 99 others); Tue, 3 Oct 2023 19:22:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56142 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235282AbjJCXWz (ORCPT ); Tue, 3 Oct 2023 19:22:55 -0400 Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DC28FB8 for ; Tue, 3 Oct 2023 16:22:51 -0700 (PDT) Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-98377c5d53eso263290566b.0 for ; Tue, 03 Oct 2023 16:22:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1696375370; x=1696980170; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=4Z022+hD2oB//jAKqOrdZqf+zZSE40o5uTIGWJ6ucIE=; b=HAwn4xaKvmQHVasnSdKN6Drv6pwjaLzxIDORBEpExt2T4xv4cIcPyXzTMDjlSTd3Ta MXZaVbDiY6V3yVBEUWn5UcXFhSYt0bKRFy3nmKDfSQb2b1jXVmp82Olg69Vayhb3T82n 2ICjT0jWDSnXzXf5ic7KA8h+0FXhqCHvgs1pL8geUjdxfeirdjkKx8p412K7Z2Z/HoU7 Qr9TLpRlShS+cKtPznm5jrYFDEsAjFBU5yiJ3UAZx4pYU2SozsYtfmSNmzQuOdBAPaWk +d/xEQ/d7MdrVkP6+gp5S4EtgBd0FJftVJuw243TqhBfq8an446BFlfDLEJHBEFmCfcZ XI6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696375370; x=1696980170; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4Z022+hD2oB//jAKqOrdZqf+zZSE40o5uTIGWJ6ucIE=; b=EXAbUVEji9ZjeLV7JuefupKG7pQhGHzqnLBYAHW1exh4Is4yBK/1ZGBbbpQ4+yblGN UERxJy4gpw6TzHCj4sQFbTaXr8v9GUDVAUz/JA0hwCEZvi1SmBaWpvItg7iIQ6dkjFVS 6nizjo/o2uITNFawxuNEm1BZGvJFuWWUNA4+VweAKBH69wSUBjKk7PuGBYWjk0gnq58l Qv1CX9ewmhVifs5k4PbPfDEC2g8SjXFknW3HVPzBnijmv5TNzkpxEN4xOZpzY4J8YC6h 1tnq16jpjjChUyHVyP8mhHQ7BKZwhM/Hc3CovsgqJB0J67rRTqbWB/W7ZVCKQbWYsuYj SN1A== X-Gm-Message-State: AOJu0YyGVxJkcnVu0u6O0yFoCyMjFfjJQzhf6tU2E6Yo1F3Yzr8y5Dt/ E/Yr6myDvn1YzrMZFTV6NbfTWezoDwhsd3U+OG6sFQ== X-Received: by 2002:a17:906:538f:b0:99e:f3b:2f78 with SMTP id g15-20020a170906538f00b0099e0f3b2f78mr610073ejo.67.1696375370218; Tue, 03 Oct 2023 16:22:50 -0700 (PDT) MIME-Version: 1.0 References: <20231003171329.GB314430@monkey> <20231003231422.4046187-1-nphamcs@gmail.com> In-Reply-To: <20231003231422.4046187-1-nphamcs@gmail.com> From: Yosry Ahmed Date: Tue, 3 Oct 2023 16:22:10 -0700 Message-ID: Subject: Re: [PATCH] memcontrol: only transfer the memcg data for migration To: Nhat Pham Cc: akpm@linux-foundation.org, riel@surriel.com, hannes@cmpxchg.org, mhocko@kernel.org, roman.gushchin@linux.dev, shakeelb@google.com, muchun.song@linux.dev, tj@kernel.org, lizefan.x@bytedance.com, shuah@kernel.org, mike.kravetz@oracle.com, fvdl@google.com, linux-mm@kvack.org, kernel-team@meta.com, linux-kernel@vger.kernel.org, cgroups@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Tue, 03 Oct 2023 16:23:12 -0700 (PDT) On Tue, Oct 3, 2023 at 4:14=E2=80=AFPM Nhat Pham wrote: > > For most migration use cases, only transfer the memcg data from the old > folio to the new folio, and clear the old folio's memcg data. No > charging and uncharging will be done. These use cases include the new > hugetlb memcg accounting behavior (which was not previously handled). > > This shaves off some work on the migration path, and avoids the > temporary double charging of a folio during its migration. > > The only exception is replace_page_cache_folio(), which will use the old > mem_cgroup_migrate() (now renamed to mem_cgroup_replace_folio). In that > context, the isolation of the old page isn't quite as thorough as with > migration, so we cannot use our new implementation directly. > > This patch is the result of the following discussion on the new hugetlb > memcg accounting behavior: > > https://lore.kernel.org/lkml/20231003171329.GB314430@monkey/ > > Reported-by: Mike Kravetz > Closes: https://lore.kernel.org/lkml/20231003171329.GB314430@monkey/ > Suggested-by: Johannes Weiner > Signed-off-by: Nhat Pham Does this patch fit before or after your series? In both cases I think there might be a problem for bisectability. > --- > include/linux/memcontrol.h | 7 ++++++ > mm/filemap.c | 2 +- > mm/memcontrol.c | 45 +++++++++++++++++++++++++++++++++++--- > mm/migrate.c | 3 +-- > 4 files changed, 51 insertions(+), 6 deletions(-) > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index a827e2129790..e3eaa123256b 100644 > --- a/include/linux/memcontrol.h > +++ b/include/linux/memcontrol.h > @@ -711,6 +711,8 @@ static inline void mem_cgroup_uncharge_list(struct li= st_head *page_list) > > void mem_cgroup_cancel_charge(struct mem_cgroup *memcg, unsigned int nr_= pages); > > +void mem_cgroup_replace_folio(struct folio *old, struct folio *new); > + > void mem_cgroup_migrate(struct folio *old, struct folio *new); > > /** > @@ -1294,6 +1296,11 @@ static inline void mem_cgroup_cancel_charge(struct= mem_cgroup *memcg, > { > } > > +static inline void mem_cgroup_replace_folio(struct folio *old, > + struct folio *new) > +{ > +} > + > static inline void mem_cgroup_migrate(struct folio *old, struct folio *n= ew) > { > } > diff --git a/mm/filemap.c b/mm/filemap.c > index 9481ffaf24e6..673745219c82 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -819,7 +819,7 @@ void replace_page_cache_folio(struct folio *old, stru= ct folio *new) > new->mapping =3D mapping; > new->index =3D offset; > > - mem_cgroup_migrate(old, new); > + mem_cgroup_replace_folio(old, new); > > xas_lock_irq(&xas); > xas_store(&xas, new); > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 6660684f6f97..cbaa26605b3d 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -7316,16 +7316,17 @@ void __mem_cgroup_uncharge_list(struct list_head = *page_list) > } > > /** > - * mem_cgroup_migrate - Charge a folio's replacement. > + * mem_cgroup_replace_folio - Charge a folio's replacement. > * @old: Currently circulating folio. > * @new: Replacement folio. > * > * Charge @new as a replacement folio for @old. @old will > - * be uncharged upon free. > + * be uncharged upon free. This is only used by the page cache > + * (in replace_page_cache_folio()). > * > * Both folios must be locked, @new->mapping must be set up. > */ > -void mem_cgroup_migrate(struct folio *old, struct folio *new) > +void mem_cgroup_replace_folio(struct folio *old, struct folio *new) > { > struct mem_cgroup *memcg; > long nr_pages =3D folio_nr_pages(new); > @@ -7364,6 +7365,44 @@ void mem_cgroup_migrate(struct folio *old, struct = folio *new) > local_irq_restore(flags); > } > > +/** > + * mem_cgroup_migrate - Transfer the memcg data from the old to the new = folio. > + * @old: Currently circulating folio. > + * @new: Replacement folio. > + * > + * Transfer the memcg data from the old folio to the new folio for migra= tion. > + * The old folio's data info will be cleared. Note that the memory count= ers > + * will remain unchanged throughout the process. > + * > + * Both folios must be locked, @new->mapping must be set up. > + */ > +void mem_cgroup_migrate(struct folio *old, struct folio *new) > +{ > + struct mem_cgroup *memcg; > + > + VM_BUG_ON_FOLIO(!folio_test_locked(old), old); > + VM_BUG_ON_FOLIO(!folio_test_locked(new), new); > + VM_BUG_ON_FOLIO(folio_test_anon(old) !=3D folio_test_anon(new), n= ew); > + VM_BUG_ON_FOLIO(folio_nr_pages(old) !=3D folio_nr_pages(new), new= ); > + > + if (mem_cgroup_disabled()) > + return; > + > + memcg =3D folio_memcg(old); > + /* > + * Note that it is normal to see !memcg for a hugetlb folio. > + * It could have been allocated when memory_hugetlb_accounting wa= s not > + * selected, for e.g. > + */ > + VM_WARN_ON_ONCE_FOLIO(!memcg, old); > + if (!memcg) > + return; > + > + /* Transfer the charge and the css ref */ > + commit_charge(new, memcg); > + old->memcg_data =3D 0; > +} > + > DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key); > EXPORT_SYMBOL(memcg_sockets_enabled_key); > > diff --git a/mm/migrate.c b/mm/migrate.c > index 7d1804c4a5d9..6034c7ed1d65 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -633,8 +633,7 @@ void folio_migrate_flags(struct folio *newfolio, stru= ct folio *folio) > > folio_copy_owner(newfolio, folio); > > - if (!folio_test_hugetlb(folio)) > - mem_cgroup_migrate(folio, newfolio); > + mem_cgroup_migrate(folio, newfolio); > } > EXPORT_SYMBOL(folio_migrate_flags); > > -- > 2.34.1 >