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 ACDD2C48BF6 for ; Mon, 26 Feb 2024 13:46:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 15347440167; Mon, 26 Feb 2024 08:46:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 103B9440147; Mon, 26 Feb 2024 08:46:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F34CC440167; Mon, 26 Feb 2024 08:46:28 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id E40F1440147 for ; Mon, 26 Feb 2024 08:46:28 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id BDAAD808E4 for ; Mon, 26 Feb 2024 13:46:28 +0000 (UTC) X-FDA: 81834079656.06.8F4758C Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf02.hostedemail.com (Postfix) with ESMTP id E1E2780005 for ; Mon, 26 Feb 2024 13:46:25 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf02.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1708955186; 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; bh=tURjCmLNGwEpzvu9AnneXjsVLBfsdHPbCdzqvt4FyoQ=; b=YvjPV/Dip5ER1z2YzWT7qbV15+BkqEdFUJVxJ9h9u1xfh2NQnQebWFufunNPk7uiB79XZS pbkM53gQNloXzKfw2YtBq7oQtyY3q+bxb5IZsCmrZlPZ85qQ6QYpdQuEBGI76IXM8THj46 ATUCJ3ArIrHeFZes7k6uUZArwZi5ac4= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf02.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1708955186; a=rsa-sha256; cv=none; b=pKrnIZGhsysqX3OaAwsQxou3UCOMckOFDsQBzoSdlT9P3jjvT7jKb/lxWjsPIlT6vVHmzu tRcBi8aOBwk2GWug18EOW0airGQqMU3esnI6GfatI7b35vXZlOBmSy9v8nUmqL8QpT7VOo T7JND7RmtQ6fLMwK2uhkhWdqQJn5EUo= Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 85F2EDA7; Mon, 26 Feb 2024 05:47:03 -0800 (PST) Received: from [10.57.67.4] (unknown [10.57.67.4]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 833013F762; Mon, 26 Feb 2024 05:46:22 -0800 (PST) Message-ID: <71fa4302-2df6-4e55-a5a8-7609476c41d4@arm.com> Date: Mon, 26 Feb 2024 13:46:20 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] madvise:madvise_cold_or_pageout_pte_range(): allow split while folio_estimated_sharers = 0 Content-Language: en-GB To: Barry Song <21cnbao@gmail.com>, akpm@linux-foundation.org, linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org, Barry Song , Yin Fengwei , Yu Zhao , David Hildenbrand , Kefeng Wang , Matthew Wilcox , Minchan Kim , Vishal Moola , Yang Shi References: <20240221085036.105621-1-21cnbao@gmail.com> From: Ryan Roberts In-Reply-To: <20240221085036.105621-1-21cnbao@gmail.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: E1E2780005 X-Stat-Signature: aewtrxutj6c7dzkcf369ugsndk7sjuby X-Rspam-User: X-HE-Tag: 1708955185-565473 X-HE-Meta: U2FsdGVkX183W3/tPvTK1CjibogT2D5nMN/zq9UCq7icBJUFta2cwCrSqb0ElNWLOgwuWD8L4exyfIGro8HfIm0RmjXExTjmgpWY/EgbJp5RCBaUG0dChs4oQeOjkQD3gIBzyCIBGxrncmO4ZVRvT9i/Xbb8RSBPeB1kARiyo697hlnpZzLug27hipdT/plXscX4He6IgC0YLe0KcmQ7Q2FgLV6OLt/yHth5LBP4kaAOWi0Kd10PgWfOXzg4gdpVrJj/lGzybbFxY6eEadI0RRYP4oQWVE/ev/RJNwoOCYMy6naI8n+4mcS+6/pLv26gRZop6Y4BVacvQV04weuoNE+OW4j2IfOBf3nJMnaKEZhSp+v9r+T36sPiolXWnf3r10PMxHD4sqTsvFoV6Caf89oB8klMg/CRs8zZu1JzBMxluHq4CO7hNaXUIYCTr0ERbGTILPPTI/r6X3CDc5w0pqOthmRUyHNsOqCGxwDj/ZcU4rtC0PCKVJTfj1DMcyzGbO1kSnKDG+/QRgulTiLFfaA91iePFgMeTmO1MhIjRdQPGvgEzE9rohpBBP6hGSys8YBgDMCOkCGQbXUxx2ZxZ3Fx2d/TqShWM81EdmZX+NiuFjgWuJ73Y+9/jKDVwK9AjRukEU4ckEmcEs0w74ju9lssoJ5BI8SQahyNorH9ocHSLyj2+ldsw02e2lUwlikU50pmcHaJm/ZLj957NXVY9AqVfoVJVzNKFwSC/ydegcF8GduQqyWNJ2vY+p9VzGB1Ns4/DUnkne7ImHs0sFBcKSB0VHBbraxp8/WIKU8gJA58Ah/J3VCMhRfK9VCGTZ287jLuky4yPp8RwZSr873iQrVej2jzWK/ss9qNM1VMmsxU39nTTldMKl02+phQO3xFXi02bwlGdqXp7Aq/33S4KcZNy1ZrOuvPP37ffSubIsFVPJNTzs2rKVMgTVex8Ey4ebXfW7umFsR+KalrUsG tSDrvqgh z19L3tBkWQ0L+GO5mdqziZ2+nU2W3Kb4P+nCXjBLkPeyO6J+O0RFT/CrdJbr3fsonUh6sQtMM1m9hxnygUNvJAsmzh1dYAFTsESI/pjmITPpgngb05Eos8vZGgN8nMFvlTvz4tVMjf9oY+zlFNzTnmDm+gAtWNpiBQyUq3F3gGyzAbA8C5tkVrrGFbQW4Uzu1EcBVx9uwXjpB3sgMxkCsSJ6iWp9e5o0b/BtVViJ4eWzEGBcJKdlOtyrFFpInFua6E1BSyBYvFpq09x7FhO307+eAUKmW4H4TN3hAh8SbiM1S0Xrsb2P5Aeq/jxLMMgShhRS18bZI6MCr3S+MPmW7bOotse0NEBnQYmvPdC5rohZpT+KbrSvBxpJRs/VZuKH9K5KJvvaCcNvoOvZCvpvl6flrfO0K4JnM900+39btMnTVnE+v0MD7KrIQ7pXpQ4TDm+qaAlIxcdD9OLzS7wh7oYlN0Nw9n3VsfvE0KmHkuZTPPg1nSzM2hKq9qV60M4i7STZVcEs3KRQHDOt31gNVZXxmNWIRQde4pe/C53sl9NgdayMdJUuF7EGZcAEqDu6usfd7PU/RmxW/R3DE2/8IQo25mC7su+E8LO2Ns0PuTcCYbvk= 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 21/02/2024 08:50, Barry Song wrote: > From: Barry Song > > The purpose is stopping splitting large folios whose mapcount are 2 or > above. Folios whose estimated_shares = 0 should be still perfect and > even better candidates than estimated_shares = 1. > > Consider a pte-mapped large folio with 16 subpages, if we unmap 1-15, > the current code will split folios and reclaim them while madvise goes > on this folio; but if we unmap subpage 0, we will keep this folio and > break. This is weird. > > For pmd-mapped large folios, we can still use "= 1" as the condition > as anyway we have the entire map for it. So this patch doesn't change > the condition for pmd-mapped large folios. > This also explains why we had been using "= 1" for both pmd-mapped and > pte-mapped large folios before commit 07e8c82b5eff ("madvise: convert > madvise_cold_or_pageout_pte_range() to use folios"), because in the > past, we used the mapcount of the specific subpage, since the subpage > had pte present, its mapcount wouldn't be 0. > > The problem can be quite easily reproduced by writing a small program, > unmapping the first subpage of a pte-mapped large folio vs. unmapping > anyone other than the first subpage. > > Fixes: 2f406263e3e9 ("madvise:madvise_cold_or_pageout_pte_range(): don't use mapcount() against large folio for sharing check") > Cc: Yin Fengwei > Cc: Yu Zhao > Cc: Ryan Roberts > Cc: David Hildenbrand > Cc: Kefeng Wang > Cc: Matthew Wilcox > Cc: Minchan Kim > Cc: Vishal Moola (Oracle) > Cc: Yang Shi > Signed-off-by: Barry Song > --- > mm/madvise.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/mm/madvise.c b/mm/madvise.c > index cfa5e7288261..abde3edb04f0 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -453,7 +453,7 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, > if (folio_test_large(folio)) { > int err; > > - if (folio_estimated_sharers(folio) != 1) > + if (folio_estimated_sharers(folio) > 1) > break; > if (pageout_anon_only_filter && !folio_test_anon(folio)) > break; I wonder if we should change all the instances: folio_estimated_sharers() != 1 -> folio_estimated_sharers() > 1 folio_estimated_sharers() == 1 -> folio_estimated_sharers() <= 1 It shouldn't cause a problem for the pmd case, and there are definitely other cases where it will help. e.g. madvise_free_pte_range(). Regardless: Reviewed-by: Ryan Roberts