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 D376BC54E68 for ; Wed, 20 Mar 2024 01:38:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 25F586B0083; Tue, 19 Mar 2024 21:38:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 20E826B0085; Tue, 19 Mar 2024 21:38:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 124BC6B0088; Tue, 19 Mar 2024 21:38:42 -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 044A96B0083 for ; Tue, 19 Mar 2024 21:38:42 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id C42AE160629 for ; Wed, 20 Mar 2024 01:38:41 +0000 (UTC) X-FDA: 81915708042.25.EAE21BD Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf25.hostedemail.com (Postfix) with ESMTP id 8D8AAA000D for ; Wed, 20 Mar 2024 01:38:39 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=R+GmKUdh; spf=pass (imf25.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1710898720; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=4cVLUhPXLU3/4Tvvr9ykrwGrUuQfu6oE0R67PsVwgEY=; b=CzIDbxxdKACwwYFT/xzmuwueE4oseoB+6mBb7fhVZ9UlP3hzYezZvrlouwneHA18GxzoMp bjxR9NKI5UEx9eEGPYitIcyTKF+Hzn1bJpciq5MfMsxtTmmjk5WfnVgNNyTP5KN05e1rmO Hqh8ZqLJ6R8bJWXNyr1zED9YDyELmBo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1710898720; a=rsa-sha256; cv=none; b=SGAG3AXvr1QY/parZdi7AUXveDEvvYV7nOXPtkJ5ZFECTqKpLeBIGfjhF0UUGF71uBi5j5 +sdpEIG1Wx4rhDqFnt+zj/SqvmHCgIpDO5VhvHwM0mfgN75No6SnBL3ZEULad81mXkZqI6 V66vBbDM6PyUTFSmIvLfkubHMG5DDOY= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=R+GmKUdh; spf=pass (imf25.hostedemail.com: domain of sj@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=sj@kernel.org; dmarc=pass (policy=none) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id A9F9CCE0FCA; Wed, 20 Mar 2024 01:38:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DF5D7C43390; Wed, 20 Mar 2024 01:38:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1710898714; bh=CvGzi2JUuAESgZ3a+287tNAc0BTPO9JfC0auMivjC9M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=R+GmKUdhLTLW1RpyyMsNGAHJ/aHHsO/p2tz2+QWIWw3aylQ9shXLEEyefkBdYFM9L ahsOKMwAuDxbohgfjOeFlEwAeL8MJSfEGQ3iztdJK+ei+o2srXhPOB3qNPiaoOJ3wN WoZUJ1yokm5E2W+LIwAkE+TvOHxHEUcM2YxGnc+i/9NO0Vg44+9UyU2HIOqmDsMvGk 5aMO8YPjqI/c7YUPz30Ijx1fi+mAz8zcg+QcmY5TqubGohG3lH8HO5gH7O1wMRIYlK oYthDE/ArcmvMuUojosRO9Euf1cz8Pvboo4pqQzdH1tcTpcMmW53EmyIr+Ik5HjE4E b44bpO/CJlwYg== From: SeongJae Park To: Zi Yan Cc: SeongJae Park , linux-mm@kvack.org, 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:38:31 -0700 Message-Id: <20240320013831.119613-1-sj@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <28D1C313-8333-4F87-9B1D-47E77789A853@nvidia.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Stat-Signature: 5qcnsnx7x6tkyqhcxozxk873j4ofdypw X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 8D8AAA000D X-Rspam-User: X-HE-Tag: 1710898719-843073 X-HE-Meta: U2FsdGVkX194LbgXp2nPVTeCA7OnRpK+jge9fWbKugYx+TZHT7Gi4Hhv1ggn/pMqirRiqsOIye1LYi05yvfWGq4asUCVRKRgNLcdSTYSyfhGtYLa592L0bNScFgSurb+KWvUVy7NQDfDoDlL2UiqmnH8rRiRprBNa4E1No40SU+QS9vipliSnuwWO681+AhJgAEGADm1Iz8bpt1t6YD0VM8fqDVQH7HrPfiLmMwj1k4l1D4ZFfR0F4LU7w9iLfHinsm8dO3zueZDKDDsmdvVQt6C/mghKLnvyylzaeBmEXIjPsSX4zehXqGNRR1NOQyvgw4EZ0EE71TnFppvkFXP4S/uDUoR2A8RUM+kO/24wdpjfAdVmcLifLbL3+ykbzqBBT0iQViuUrEwrWZBuo9hz00gcOoIAnH67njioYHc75eZzVl36q5PE/ocmlQgb6EpV7JdWCdzH38DaE4pLhKddAersmhjwL73aTw+j04Esf5xgejGD5wB2aHVyPAhgljwMC3HcRiPsECv1zG/qQAvQyzAyiOZylqqJnkuZdz6WOeVIp5BhUPJOo4YXxeZeXnIfXUeMRHUtsTkszugThAny0Yoei57RRUpaHEniyZngwamZDBk+kgjtMn8jzbYfHRTN3+/NNqZoajMi0JFAFGybbNRwCgw5W2BeqnN47Omj2wOz7vjfeispRyjtpm81iKOWcpwknP5wBkhf5p56s9hiQo7dcvne1jNGN/xc0NHViytjuDhsnQbnQcv9dT1jLt43fmALvKoTfjbmdpfaAAvtvBdOf4/fMKseBFs7vrYBPut3r71w6mOEcWOkY/e3A88w5+/PSF304ztINz9u+3gcwlyTnb28fkx9flvOGjPCRR4ItlJWFAwsSWwflYtr9GhZ9/ejnJQnHg= 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: On Tue, 19 Mar 2024 21:16:37 -0400 Zi Yan wrote: > [-- Attachment #1: Type: text/plain, Size: 4354 bytes --] > > On 19 Mar 2024, at 21:09, Zi Yan wrote: > > > On 19 Mar 2024, at 21:08, SeongJae Park wrote: > > > >> 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. Will fix it in the next version. > > Actually, since get_deferred_split_queue() is used in mm/migrate.c, that > part needs to be guarded by CONFIG_TRANSPARENT_HUGEPAGE as well. You're right. I also just confirmed that build breaks with below error when CONFIG_TRANSPARENT_HUGEPAGE is not set but CONFIG_MIGRATION is set. ERROR:root:.../mm/migrate.c: In function ‘migrate_pages_batch’: .../mm/migrate.c:1682:49: error: implicit declaration of function ‘get_deferred_split_queue’ [-Werror=implicit-function-declaration] 1682 | get_deferred_split_queue(folio); | ^~~~~~~~~~~~~~~~~~~~~~~~ Thanks, SJ > > -- > Best Regards, > Yan, Zi