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 B6B01C02180 for ; Wed, 15 Jan 2025 10:23:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0E889280002; Wed, 15 Jan 2025 05:23:26 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0703E280001; Wed, 15 Jan 2025 05:23:26 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E7A16280002; Wed, 15 Jan 2025 05:23:25 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id C9D9F280001 for ; Wed, 15 Jan 2025 05:23:25 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 553E41C7445 for ; Wed, 15 Jan 2025 10:23:25 +0000 (UTC) X-FDA: 83009299170.09.925BAD3 Received: from invmail4.hynix.com (exvmail4.hynix.com [166.125.252.92]) by imf12.hostedemail.com (Postfix) with ESMTP id A90DC4000D for ; Wed, 15 Jan 2025 10:23:22 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=none; spf=pass (imf12.hostedemail.com: domain of byungchul@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=byungchul@sk.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1736936603; 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: in-reply-to:in-reply-to:references:references; bh=p3Y6yLHPsQx10GdOeShic17itTh/LVxfPHlIHa9T5e0=; b=2UGSyLsYx40uwIN878EnNyeBZDfkjJe6MzFW/pByuG5HuhEhcqYUIReWk0yxSD/9xHIOFM 4jHoushrTQtsamWwgZ0qlLyA/WpTEXhVxgHFs5uRO+7Q7BBhsb5ZN3WrZk4MSR2ZEUaZSg T1/PXfMSLNQtFHmL6M25CJaJtZsns9A= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=none; spf=pass (imf12.hostedemail.com: domain of byungchul@sk.com designates 166.125.252.92 as permitted sender) smtp.mailfrom=byungchul@sk.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1736936603; a=rsa-sha256; cv=none; b=UhsvRxOfja9llUPCBYiyB4/i3glQU6/17Th5Y9JZeZkzwociytkb3w5bhgyFuDEri2Cyi3 KD0Vx6PUtK8vWrnYBgkpgDXzHkY0fLMKQWiwuxy8vsGJ/QaTQQn+4lB9cL5mFVttFB+zTs /6d6QZhyJvZiRR74pXOLKx669kR2UbQ= X-AuditID: a67dfc5b-3e1ff7000001d7ae-ce-67878c98f706 Date: Wed, 15 Jan 2025 19:23:15 +0900 From: Byungchul Park To: Shivank Garg Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, kernel_team@skhynix.com, akpm@linux-foundation.org, ziy@nvidia.com Subject: Re: [PATCH] mm: separate move/undo parts from migrate_pages_batch() Message-ID: <20250115102315.GA4090@system.software.com> References: <20250115095343.46390-1-byungchul@sk.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrFLMWRmVeSWpSXmKPExsXC9ZZnoe6MnvZ0g84V5hZz1q9hs7i8aw6b xb01/1ktzq35zG4x++g9dgdWj9ZLf9k8Nn2axO5xYsZvFo/e5ndsHp83yQWwRnHZpKTmZJal FunbJXBl3L3/ibXgqV7FpOsf2RsYXyp3MXJwSAiYSHQvCepi5AQz215cYAcJswioSryfbAkS ZhNQl7hx4ycziC0ioCzROGMPC4jNLFAlsXr9TFYQW1jAR2LO901MIDavgLnErROPwWwhgTSJ jZdWMEPEBSVOznwC1aslcePfSyaQVcwC0hLL/3GAhDkFrCX+fT4BViIKtOrAtuNAJVxAl81g k9j0eD0zxJmSEgdX3GCZwCgwC8nYWUjGzkIYu4CReRWjUGZeWW5iZo6JXkZlXmaFXnJ+7iZG YAgvq/0TvYPx04XgQ4wCHIxKPLwX4tvShVgTy4orcw8xSnAwK4nwLmFrTRfiTUmsrEotyo8v Ks1JLT7EKM3BoiTOa/StPEVIID2xJDU7NbUgtQgmy8TBKdXAmB7090dI93mJpGPXqiz2Jexp PCop3XApojLKtqfy0cPHTikHDOrV9iy1PnX0Q/KLv2UJD63U/H7cvrLC9p3uyj/qPl6X3i6u i/vueUqoZA7rQqm6g3YuO3nkYvcI1un7aujMtkoIffPBpfubMk+e47GqE2KdPJ/C386eL80s Wrt2Y22u0F9WJZbijERDLeai4kQA03AIxV0CAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrELMWRmVeSWpSXmKPExsXC5WfdrDujpz3doPu7usWc9WvYLA7PPclq cXnXHDaLe2v+s1qcW/OZ3WL20XvsDmwerZf+snls+jSJ3ePEjN8sHr3N79g8Fr/4wOTxeZNc AFsUl01Kak5mWWqRvl0CV8bd+59YC57qVUy6/pG9gfGlchcjJ4eEgIlE24sL7F2MHBwsAqoS 7ydbgoTZBNQlbtz4yQxiiwgoSzTO2MMCYjMLVEmsXj+TFcQWFvCRmPN9ExOIzStgLnHrxGMw W0ggTWLjpRXMEHFBiZMzn0D1aknc+PeSCWQVs4C0xPJ/HCBhTgFriX+fT4CViAKtOrDtONME Rt5ZSLpnIemehdC9gJF5FaNIZl5ZbmJmjqlecXZGZV5mhV5yfu4mRmBILqv9M3EH45fL7ocY BTgYlXh4T0S0pQuxJpYVV+YeYpTgYFYS4V3C1pouxJuSWFmVWpQfX1Sak1p8iFGag0VJnNcr PDVBSCA9sSQ1OzW1ILUIJsvEwSnVwMjqfs9O3L3wgt6kl+Ez1k89KVcU73Xb5Ei628c1Mulm SdNE4iNY4q8mL5aUVfrcxlf987/TkXptPUYNXfc7d87/M/lwx9nkl35OuNqncoGJSQtki1iu 7O6ddXM++8lj8wPe3vbQW8Jeyv42yTCn13hnn21YuP7mzFu1FeZWQcs5GizeHwmsVGIpzkg0 1GIuKk4EAPfnddNFAgAA X-CFilter-Loop: Reflected X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: A90DC4000D X-Rspam-User: X-Stat-Signature: p1aotxspcownoajcyak4s51bekmqo3yy X-HE-Tag: 1736936602-549786 X-HE-Meta: U2FsdGVkX198zQoUhLzSiXUQP2uQ4VmpKd0p9ZiW5pj7IHZK35aAX6z09OeC0eIuBY+wtrUdSBk5j9qecJusa0JE9F2iVxRC9D1d2GcJ2b/BMwDhBox1Nf+ZZiW+p8Et+Ht6i+MJNcx54qFpRyXkW+pB8scFFtVdFxQL+ji+yH5/mADic/GWeeUs5h0bQKugH3TsCrSsNCHfGX3WMHPCCvAWywIQvCMcD427ll9whZxuuoMi36BXG9D6Wd03XZ27pzfhyxDR1vikxQt0MEOZyiRTVQxjRK6Eh9QFk1u4kOR+Tt3WAEOUBwE95nofzqpF0o5G2cAhNezP/K/EyE5NjAXDcoXSImmNedldA3HHt+t5KYVrPqQPp6HhWcPnihbmREVJAGc6qCT3j+tjQsPYU2we0p8HH3K0LWsXjPwEQKKKSzpxnmgwLaJbPQAs8GypXayXOHfFzxkVhplGcyniUOsYgMi8Kgw8TJBrB6B0mmuBy1K0nA92k261+3YikcJ72kXke3mCiCshFiFtAWXHBbyM5jA6AOmAhIVY5s2lo4ay7Pec7FF4ibrdfY62jc+1Ux7aLaF7bnspmrVBRDOJhQScuh7Eufa19wn2BXfwOPtUZpuz7FU4Vz14MCGIO9RpAj63vl8JcbG6Be6pR7ILGGN+c0nnOdu1SjJaox9HpUQuUiI3VlXKRItYiDZOT942sP4qEuWevstHlc2NzVXIaOjQEvUyOPmRhvPCG4qLKieXBMIB5iXQg2U2vryXNraNwlPD6JC9QcQ551NiL57TqAfnWlh/C/ejMWoHd27vicXvdkLaSy46z8ewi6wjpiOMlXsDNaa50fX368SdsgmaCJvtgd4KApUc+7alv/6hE2ZTWFBY6nvfaBqXMefXjxSXrVZt8D1XmKs+gTd04gEv1oPZjZwV4n+44wrM/nXoz/7/ZJsSwbEHorgQPku6SEF7COtYt6O2lMGyrIKz6PO +kklqR1z WyNOQxMdCdPl0dGzgxqfqPQ7WmTTIBF159BIg6ErTdUB8YyK6j/Xw63yxUNhF8AFiwCGK 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 Wed, Jan 15, 2025 at 03:37:15PM +0530, Shivank Garg wrote: > Hi Byungchul, > > On 1/15/2025 3:23 PM, Byungchul Park wrote: > > Hi, > > > > This is a part of luf(lazy unmap flush) patchset and also referred > > several times by e.g. Shivank Garg and Zi Yan who are currently working > > on page migration optimization. Why don't we take this first so that > > such a migration optimization tries can use it. > > > > Byungchul > > > > --->8--- > > From a65a6e4975962707bf87171e317f005c6276887e Mon Sep 17 00:00:00 2001 > > From: Byungchul Park > > Date: Thu, 8 Aug 2024 15:53:58 +0900 > > Subject: [PATCH] mm: separate move/undo parts from migrate_pages_batch() > > > > Functionally, no change. This is a preparation for migration > > optimization tries that require to use separated folio lists for its own > > handling during migration. Refactored migrate_pages_batch() so as to > > separate move/undo parts from migrate_pages_batch(). > > > > Signed-off-by: Byungchul Park > > --- > > mm/migrate.c | 134 +++++++++++++++++++++++++++++++-------------------- > > 1 file changed, 83 insertions(+), 51 deletions(-) > > [...] > > > + */ > > + switch(rc) { > ^^^ > minor nit here - space after 'switch' before the parentheses. > This code style issue was present in the original code and was carried > over during refactoring. I should've taken more care of it. Thank you. Byungchul > With this fix, please add- > Reviewed-by: Shivank Garg > > > + case -EAGAIN: > > + *retry += 1; > > + *thp_retry += is_thp; > > + *nr_retry_pages += nr_pages; > > + break; > > + case MIGRATEPAGE_SUCCESS: > > + stats->nr_succeeded += nr_pages; > > + stats->nr_thp_succeeded += is_thp; > > + break; > > + default: > > + *nr_failed += 1; > > + stats->nr_thp_failed += is_thp; > > + stats->nr_failed_pages += nr_pages; > > + break; > > + } > > + dst = dst2; > > + dst2 = list_next_entry(dst, lru); > > + } > > +} > > + > > +static void migrate_folios_undo(struct list_head *src_folios, > > + struct list_head *dst_folios, > > + free_folio_t put_new_folio, unsigned long private, > > + struct list_head *ret_folios) > > +{ > > + struct folio *folio, *folio2, *dst, *dst2; > > + > > + dst = list_first_entry(dst_folios, struct folio, lru); > > + dst2 = list_next_entry(dst, lru); > > + list_for_each_entry_safe(folio, folio2, src_folios, lru) { > > + int old_page_state = 0; > > + struct anon_vma *anon_vma = NULL; > > + > > + __migrate_folio_extract(dst, &old_page_state, &anon_vma); > > + migrate_folio_undo_src(folio, old_page_state & PAGE_WAS_MAPPED, > > + anon_vma, true, ret_folios); > > + list_del(&dst->lru); > > + migrate_folio_undo_dst(dst, true, put_new_folio, private); > > + dst = dst2; > > + dst2 = list_next_entry(dst, lru); > > + } > > +} > > + > > /* > > * migrate_pages_batch() first unmaps folios in the from list as many as > > * possible, then move the unmapped folios. > > @@ -1717,7 +1792,7 @@ static int migrate_pages_batch(struct list_head *from, > > int pass = 0; > > bool is_thp = false; > > bool is_large = false; > > - struct folio *folio, *folio2, *dst = NULL, *dst2; > > + struct folio *folio, *folio2, *dst = NULL; > > int rc, rc_saved = 0, nr_pages; > > LIST_HEAD(unmap_folios); > > LIST_HEAD(dst_folios); > > @@ -1888,42 +1963,11 @@ static int migrate_pages_batch(struct list_head *from, > > thp_retry = 0; > > nr_retry_pages = 0; > > > > - dst = list_first_entry(&dst_folios, struct folio, lru); > > - dst2 = list_next_entry(dst, lru); > > - list_for_each_entry_safe(folio, folio2, &unmap_folios, lru) { > > - is_thp = folio_test_large(folio) && folio_test_pmd_mappable(folio); > > - nr_pages = folio_nr_pages(folio); > > - > > - cond_resched(); > > - > > - rc = migrate_folio_move(put_new_folio, private, > > - folio, dst, mode, > > - reason, ret_folios); > > - /* > > - * The rules are: > > - * Success: folio will be freed > > - * -EAGAIN: stay on the unmap_folios list > > - * Other errno: put on ret_folios list > > - */ > > - switch(rc) { > > - case -EAGAIN: > > - retry++; > > - thp_retry += is_thp; > > - nr_retry_pages += nr_pages; > > - break; > > - case MIGRATEPAGE_SUCCESS: > > - stats->nr_succeeded += nr_pages; > > - stats->nr_thp_succeeded += is_thp; > > - break; > > - default: > > - nr_failed++; > > - stats->nr_thp_failed += is_thp; > > - stats->nr_failed_pages += nr_pages; > > - break; > > - } > > - dst = dst2; > > - dst2 = list_next_entry(dst, lru); > > - } > > + /* Move the unmapped folios */ > > + migrate_folios_move(&unmap_folios, &dst_folios, > > + put_new_folio, private, mode, reason, > > + ret_folios, stats, &retry, &thp_retry, > > + &nr_failed, &nr_retry_pages); > > } > > nr_failed += retry; > > stats->nr_thp_failed += thp_retry; > > @@ -1932,20 +1976,8 @@ static int migrate_pages_batch(struct list_head *from, > > rc = rc_saved ? : nr_failed; > > out: > > /* Cleanup remaining folios */ > > - dst = list_first_entry(&dst_folios, struct folio, lru); > > - dst2 = list_next_entry(dst, lru); > > - list_for_each_entry_safe(folio, folio2, &unmap_folios, lru) { > > - int old_page_state = 0; > > - struct anon_vma *anon_vma = NULL; > > - > > - __migrate_folio_extract(dst, &old_page_state, &anon_vma); > > - migrate_folio_undo_src(folio, old_page_state & PAGE_WAS_MAPPED, > > - anon_vma, true, ret_folios); > > - list_del(&dst->lru); > > - migrate_folio_undo_dst(dst, true, put_new_folio, private); > > - dst = dst2; > > - dst2 = list_next_entry(dst, lru); > > - } > > + migrate_folios_undo(&unmap_folios, &dst_folios, > > + put_new_folio, private, ret_folios); > > > > return rc; > > }