From mboxrd@z Thu Jan 1 00:00:00 1970 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 25872C54E68 for ; Wed, 20 Mar 2024 01:08:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 539F56B007B; Tue, 19 Mar 2024 21:08:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4E9F86B0082; Tue, 19 Mar 2024 21:08:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3B1D66B0083; Tue, 19 Mar 2024 21:08:23 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 2BB5E6B007B for ; Tue, 19 Mar 2024 21:08:23 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id C7E2DA0F1F for ; Wed, 20 Mar 2024 01:08:22 +0000 (UTC) X-FDA: 81915631644.08.5810083 Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf26.hostedemail.com (Postfix) with ESMTP id 81C4E140014 for ; Wed, 20 Mar 2024 01:08:20 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=QKOpz1ce; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf26.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710896901; 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:in-reply-to:references:references:dkim-signature; bh=6+OL4dsWVT8K8RAMt0D+D9FGKVMPa4M3lrFL3xi0q/E=; b=G1N9gIRsGXnSHOtxtfgxmg8AkMCsZneA2Sf6ZGciGmvWsep8VklWddXm4dLP3MRGNOdI2A pJjrr8Bgn+15EAaKo5vGo3rmZ5l48wQ1MHVzjPed+QniohlYdgClGlI4pxQiHc2k4uD384 NuQ4zYN2a3CoDs2WeiT8R4IldomufZ4= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=QKOpz1ce; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf26.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710896901; a=rsa-sha256; cv=none; b=g8ZclLK+tNahF/Vc0mg+UM1BEuSLBEAotnluPywAWlROVAJ1BmdZi5bOQTyIJqV5ArkdYg R4H/m9t0TB4MC20vYeYrdMjqJntzOeVNvL5zfQOtWC4wycn8cVMqeJz37Hj49EVUmxIUy5 +oLTYrrqZ1Z5040Pu/mpgnlwhQ72fFg= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 09881CE0EE4; Wed, 20 Mar 2024 01:08:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1FC48C433F1; Wed, 20 Mar 2024 01:08:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710896896; bh=nnMf808ajpnDLmond0xA2ZLLqRSciBTRCP3q7GcYqYc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QKOpz1ceVhYxg0iOs/mEJqd/YUABBTvuStL3MPaexagY79bO7sgFpQKVBy/y9Phc7 RWEYxByOG3O9ytDXIkOrZ2tM3Hyz3zDsKsDxNG6YeOkCVtZGSH4VShgZbOzBx6g820 MYO7zKI2f+3dU+bUT5Rei+wDY7ZyDUcryxTNTpgbkwMRv4OzIeTpni+EUHudMgv1BA 2BhPYI6arblArpiD47Qzm5x/djXSOZAAgENoaYjDslEFVJjeXsdaffyesRP/X4+nbo 5BjE0WHxYCHhJ9G66k0GVAxh1p+H6nzz1lUv3svx5B83KBn+kxlgnk0/lLTy4BkJtz w17ryKKIXyd8A== From: SeongJae Park To: Zi Yan Cc: linux-mm@kvack.org, Zi Yan , Andrew Morton , "Matthew Wilcox (Oracle)" , Yang Shi , Huang Ying , "Kirill A . Shutemov" , Ryan Roberts , Baolin Wang , "Yin, Fengwei" , linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] mm/migrate: split source folio if it is on deferred split list Date: Tue, 19 Mar 2024 18:08:13 -0700 Message-Id: <20240320010813.136765-1-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240319154753.253262-1-zi.yan@sent.com> References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspam-User: X-Stat-Signature: xz7moxasfgxcb1ddhixq6r78hec3ef1e X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 81C4E140014 X-HE-Tag: 1710896900-944330 X-HE-Meta: U2FsdGVkX18B3H9KRAbme1tnoSF9z+0yLINq4D2m6AxCz2XRaM28VqE/rV1amFfaTH5InDZbnm0E6kWFGIRLsBCnlI5Nzt5I70neT1t+SBtkJYshjL04z9voBv04cAGDwuPUWdgy2QXeBkoeCG1OVPgUvizU3nZKEJWhrocbZ/+lEUN/9okYP/J/gOMJTS4ATEGk/ha0MTAfjnzfez1mWw+RmV7EJBadwFOf7V86Jnothcc5WupTUvMbNtFXNtgLcp60UW4JdRoeQbwkeO0QKknM5kANwLHot2KvCl2xAfKMedqlIrsZdibn6VBhXuEd8NpdOoDbBBltrE9TEkf1oO5kcS+TAhwt1JbkNPPRePG/R2ZHaQiBsMGkBITx2cIUZafmpzZMWY/JGUjPXyhTDihWLjtzeck066G8sY0F460LwJocA7cNrT3vJ9uRwa8x1BwqveUqn5ba8JamvN60zfmq0r8CVSCGhOCFZezh3CfPMX41r3fRD7oX+H1IL7wmw2NWO0DQs8s2dprwFU02IKleHDJsdW7YrsyFp09Wv1ccHGJdtRAQF5Y4f85XqaA0BQLhGiEosSPdRM6T35tLNS2PToFXuXtfr45PnVIMYg3RbCIqn8RJjcLHL8SplkrOnPUnysFfLNFuToVXuoBTCXqSLa6j1qlJM1vMMKiplKve9Nca59pr7AdnL/2yAeK6GwoeRUozfikCFmiyFiizq/Ld6LYa2X5SYF8yVuHhw4NyO88kmIsrKAhMcpN1Dw6aOggH24+MsQ7DuLPB6svmfeiVjOOV+MiV2eai3kqVOST7xDLdG40MUTtW4CQS+r/0qJjPOftgswowYSpna8CdWn+l1RA1cJ4drfJhzEHza+5VVkvrPkIbyFztlL5Kce/blOzA8UnJv6W0opdChiX3B4dHqDqhzpggZa5+vguMxzoOIOXSgeqid8jUYbmuBCbIBq+i0f/X1tNwGbRZBAJ KFu84C4x v/Xi1DGmDmbkN4wnVjlTGC8RfGVqTStIxwPtHwZK0m6qUDQ0ojatgDfkRTAxZq1u51UXFpM5ZwNUZFqA92kvc+/6JwlhpiA4XmEEhTz2WJtv0LYHmo0Fskehp+M1nlYAr9HY/T2Z+xvFAl0GmI6hv50bc/B1P2SonzdxCon9/uCnSSwTU/Wl3PTlqPabq8kj9NfY2O3wAd45V3lQ7wFQc0klLuK2T34q+oByNS/DCzltsn1EipTafyfNylCbOD6muPQoigW+vVqllKUWnI2XSihZO5JVSAlPpI2zfiz5CiDlojuspkC89ZOnTAP5eDV+rMUCGg7OPthAmf9mwVQsvUzBEG7egkTWY3OIFHYBZFxEP+RKqROcFlKt/Tv+k8Rv+6Gaz 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: Hello, On Tue, 19 Mar 2024 11:47:53 -0400 Zi Yan wrote: > From: Zi Yan > > If the source folio is on deferred split list, it is likely some subpages > are not used. Split it before migration to avoid migrating unused subpages. > > Commit 616b8371539a6 ("mm: thp: enable thp migration in generic path") > did not check if a THP is on deferred split list before migration, thus, > the destination THP is never put on deferred split list even if the source > THP might be. The opportunity of reclaiming free pages in a partially > mapped THP during deferred list scanning is lost, but no other harmful > consequence is present[1]. > > From v2: > 1. Split the source folio instead of migrating it (per Matthew Wilcox)[2]. > > From v1: > 1. Used dst to get correct deferred split list after migration > (per Ryan Roberts). > > [1]: https://lore.kernel.org/linux-mm/03CE3A00-917C-48CC-8E1C-6A98713C817C@nvidia.com/ > [2]: https://lore.kernel.org/linux-mm/Ze_P6xagdTbcu1Kz@casper.infradead.org/ > > Fixes: 616b8371539a ("mm: thp: enable thp migration in generic path") > Signed-off-by: Zi Yan > --- > mm/huge_memory.c | 22 ------------------ > mm/internal.h | 23 +++++++++++++++++++ > mm/migrate.c | 60 +++++++++++++++++++++++++++++++++++++++--------- > 3 files changed, 72 insertions(+), 33 deletions(-) > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index 9859aa4f7553..c6d4d0cdf4b3 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -766,28 +766,6 @@ pmd_t maybe_pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) > return pmd; > } > > -#ifdef CONFIG_MEMCG > -static inline > -struct deferred_split *get_deferred_split_queue(struct folio *folio) > -{ > - struct mem_cgroup *memcg = folio_memcg(folio); > - struct pglist_data *pgdat = NODE_DATA(folio_nid(folio)); > - > - if (memcg) > - return &memcg->deferred_split_queue; > - else > - return &pgdat->deferred_split_queue; > -} > -#else > -static inline > -struct deferred_split *get_deferred_split_queue(struct folio *folio) > -{ > - struct pglist_data *pgdat = NODE_DATA(folio_nid(folio)); > - > - return &pgdat->deferred_split_queue; > -} > -#endif > - > void folio_prep_large_rmappable(struct folio *folio) > { > if (!folio || !folio_test_large(folio)) > diff --git a/mm/internal.h b/mm/internal.h > index d1c69119b24f..8fa36e84463a 100644 > --- a/mm/internal.h > +++ b/mm/internal.h > @@ -1107,6 +1107,29 @@ struct page *follow_trans_huge_pmd(struct vm_area_struct *vma, > unsigned long addr, pmd_t *pmd, > unsigned int flags); > > +#ifdef CONFIG_MEMCG > +static inline > +struct deferred_split *get_deferred_split_queue(struct folio *folio) > +{ > + struct mem_cgroup *memcg = folio_memcg(folio); > + struct pglist_data *pgdat = NODE_DATA(folio_nid(folio)); > + > + if (memcg) > + return &memcg->deferred_split_queue; > + else > + return &pgdat->deferred_split_queue; > +} > +#else > +static inline > +struct deferred_split *get_deferred_split_queue(struct folio *folio) > +{ > + struct pglist_data *pgdat = NODE_DATA(folio_nid(folio)); > + > + return &pgdat->deferred_split_queue; > +} > +#endif I found this breaks the build when CONFIG_TRANSPARENT_HUGEPAGE is not set, with below error: .../lib/../mm/internal.h: In function 'get_deferred_split_queue': .../lib/../mm/internal.h:1127:22: error: 'struct pglist_data' has no member named 'deferred_split_queue' 1127 | return &pgdat->deferred_split_queue; | ^~ Since the code was in hugepage.c, maybe the above chunk need to be wrapped by #ifdef CONFIG_TRANSPARENT_HUGEPAGE? I confirmed below change is fixing the build on my setup. Thanks, SJ [...] -------------------------------------- >8 ------------------------------------- diff --git a/mm/internal.h b/mm/internal.h index dce2b9f5e6cd..fe9f69ceb140 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -1106,6 +1106,7 @@ struct page *follow_trans_huge_pmd(struct vm_area_struct *vma, unsigned long addr, pmd_t *pmd, unsigned int flags); +#ifdef CONFIG_TRANSPARENT_HUGEPAGE #ifdef CONFIG_MEMCG static inline struct deferred_split *get_deferred_split_queue(struct folio *folio) @@ -1126,7 +1127,8 @@ struct deferred_split *get_deferred_split_queue(struct folio *folio) return &pgdat->deferred_split_queue; } -#endif +#endif /* CONFIG_MEMCG */ +#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ /*