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 15DA5E77187 for ; Wed, 18 Dec 2024 09:03:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 913856B0082; Wed, 18 Dec 2024 04:03:58 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8A4686B0083; Wed, 18 Dec 2024 04:03:58 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 742FF6B0085; Wed, 18 Dec 2024 04:03:58 -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 5F0076B0082 for ; Wed, 18 Dec 2024 04:03:55 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 01823A0CD7 for ; Wed, 18 Dec 2024 09:03:54 +0000 (UTC) X-FDA: 82907491800.16.1D579BE Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf15.hostedemail.com (Postfix) with ESMTP id 1D586A000A for ; Wed, 18 Dec 2024 09:03:06 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf15.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=1734512619; 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=18NsU5tBc9zPYgnguyIACCqZ/O/JfTpGIQBwiA9QMLA=; b=I+5OVapWwa+JGsj+SAj4vl8nXeI/5rQX3uyyDgb/V/aH4kDgGnq6rm1p1HQrUFMhQ4GvHS jQORPf1v6NaD+HJj1ImJWZFBMOvjoUhBnYg/MkxgYyHP7GdDlEgZh0NaBloh4nKB4nnpL/ CGqXqXUe5Gpf7RwB6SeD7xRJh7v0NN4= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734512619; a=rsa-sha256; cv=none; b=QsDWF03gPaxp6L6YrFrH3z8soev+m4XjHP3oot8iwo7kP10LXgQDvR/46NSO/bnTx4mUIy lPLKwuNAGc+vs+CnL6EGDduPYhYppiIvkS/JkKDe5anP0X1rpnAUx9u0cRNHytcDKV2+i9 cWu6jXbph6YYEpjuN+GuZhMZTc33/sE= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf15.hostedemail.com: domain of ryan.roberts@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=ryan.roberts@arm.com 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 5C233FEC; Wed, 18 Dec 2024 01:04:20 -0800 (PST) Received: from [10.57.91.184] (unknown [10.57.91.184]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 0FF2B3F7B4; Wed, 18 Dec 2024 01:03:46 -0800 (PST) Message-ID: <7098654a-776d-413b-8aca-28f811620df7@arm.com> Date: Wed, 18 Dec 2024 09:03:45 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH 12/12] selftests/mm: khugepaged: Enlighten for mTHP collapse Content-Language: en-GB To: Dev Jain , akpm@linux-foundation.org, david@redhat.com, willy@infradead.org, kirill.shutemov@linux.intel.com Cc: anshuman.khandual@arm.com, catalin.marinas@arm.com, cl@gentwo.org, vbabka@suse.cz, mhocko@suse.com, apopple@nvidia.com, dave.hansen@linux.intel.com, will@kernel.org, baohua@kernel.org, jack@suse.cz, srivatsa@csail.mit.edu, haowenchao22@gmail.com, hughd@google.com, aneesh.kumar@kernel.org, yang@os.amperecomputing.com, peterx@redhat.com, ioworker0@gmail.com, wangkefeng.wang@huawei.com, ziy@nvidia.com, jglisse@google.com, surenb@google.com, vishal.moola@gmail.com, zokeefe@google.com, zhengqi.arch@bytedance.com, jhubbard@nvidia.com, 21cnbao@gmail.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20241216165105.56185-1-dev.jain@arm.com> <20241216165105.56185-13-dev.jain@arm.com> From: Ryan Roberts In-Reply-To: <20241216165105.56185-13-dev.jain@arm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Stat-Signature: hgbjxu8buabxiwcsofgtiujwsmu3yfyx X-Rspamd-Queue-Id: 1D586A000A X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1734512586-95644 X-HE-Meta: U2FsdGVkX1927Q6v9y3nt4KjMw3zjiIK+tAJtt+frOzezzHODSNg1T5bD2ziP1OPq8yotkijwxZxFgbtHFDXVYK+f2cR/lWnqluKnydGlD9BaE6uAaVZpudIgG11Gz+pWUYGQoMmGrpKF6la7il7Inlc56Yt2l94BkoKcPJ8UPoUmkqALfu/OOrQAG3S/CRIabZxOV+AXZjWc7MYWvU2c6V64ff5YtA7/pL8koQjdgPWK7Ehsuh/FzoYEy/xhsq04WPvb+X3m2bF3d+vlSWNvvBKuEWUgsma2sFVD40hlsFU2PrNTkwBBlgnR/RH8Qc4jR10LrKwo0fXnOHtVxsTNHIzTXJkf9Tr5+17pli3wUumcEIdNki1Rdn3mHb7IXapB1rNKs38xVNshtWPeQJ6PJGmjY/9CHGivKB2ULhVrXhPZaTf8319Cj4ytKidl/M1Z2bLS0bv2lNGTS4OPyORWZ5w+BE9C2t9D7F7kiCznOG2zdfPLiWqR1zs06SEovUptnOdmPd5JdY5wBkIQ4fwy6Txo/c1CsE5g9XHcArJvrc7SXPHjD3BJ6iqO0AqNnxY0PcrkVYUUJ3DugB9XgNpoY9BEWuaQGdqwxDFY8T7OcCVfMvBCG065dDZM9qfvsXoX+yhQaf+nCmZg+HqKJL4bPrjRlwuTx6OmgZHpChEPokfenbK4VmwTAkxBJVN2FWhm6cCV33CdXWQ0xYjJqQmGDXBedwl9dH0xnfNI1WMd730JuiC3AcxmmY1Thlz45yFNQFCcGRF+KJmBRP5E/eRsGv+Fsbu7XT/6+6Uc9AhUNHL3CPpQZ8uwM7mX9UDPSniwGqDh+zjL4TgfPFvG7MsHC7+R97aa6fWWVaZQ9u35dl+PeXzbsrFKZHk/xYTe8N7OsbsE9jgCJG0Tlf/vlQ8ruUihdg5zWCnguwiTCB4wulgs5ys5jp2V0W0qnWX+4+R+0HNHDEPm8jJW/XKD5z TEsYoatJ d7rAAET+NoGWWsoMUm32qPhp1s8SC2It2mg14N1f5FuRz3JoM1M4Mrmk6EP+K8RPzm/hOPo50utYlweWpj7wFJ4V8tDTE0zOkN58GzWy0s3Yhp0ysIhi45zbLSPjQN3pfmqcFG7bZlWd919MdZCV8X9AtXD+t+u8z8sn9RypzoJ56vSvAlh+hRpNK8SzHiI+L8W2Hx+z9ID7x386VG2V08bPCL1o/uTUlaV5gsBG54RiuninXLBvEMl8MZD50oesfvH9hzzjjOlUJvpx+o4MyfUH28EjX7UetP/+3KieopW21zB6sSVtWkmRUO/+hxxQbNyrXRevIds6Nbp8zdUzwzq/xSw/Ct3PJMWEV0qZdl/kBVzs= 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 16/12/2024 16:51, Dev Jain wrote: > One of the testcases triggers a CoW on the 255th page (0-indexing) with > max_ptes_shared = 256. This leads to 0-254 pages (255 in number) being unshared, > and 257 pages shared, exceeding the constraint. Suppose we run the test as > ./khugepaged -s 2. Therefore, khugepaged starts collapsing the range to order-2 > folios, since PMD-collapse will fail due to the constraint. > When the scan reaches 254-257 PTE range, because at least one PTE in this range > is writable, with other 3 being read-only, khugepaged collapses this into an > order-2 mTHP, resulting in 3 extra PTEs getting unshared. After this, we encounter > a 4-sized chunk of read-only PTEs, and mTHP collapse stops according to the scaled > constraint, but the number of shared PTEs have now come under the constraint for > PMD-sized THPs. Therefore, the next scan of khugepaged will be able to collapse > this range into a PMD-mapped hugepage, leading to failure of this subtest. Fix > this by reducing the CoW range. Is this description essentially saying that it's now possible to creep towards collapsing to a full PMD-size block over successive scans due to rounding errors in the scaling? Or is this just trying an edge case and the problem doesn't generalize? > > Note: The only objective of this patch is to make the test work for the PMD-case; > no extension has been made for testing for mTHPs. > > Signed-off-by: Dev Jain > --- > tools/testing/selftests/mm/khugepaged.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/tools/testing/selftests/mm/khugepaged.c b/tools/testing/selftests/mm/khugepaged.c > index 8a4d34cce36b..143c4ad9f6a1 100644 > --- a/tools/testing/selftests/mm/khugepaged.c > +++ b/tools/testing/selftests/mm/khugepaged.c > @@ -981,6 +981,7 @@ static void collapse_fork_compound(struct collapse_context *c, struct mem_ops *o > static void collapse_max_ptes_shared(struct collapse_context *c, struct mem_ops *ops) > { > int max_ptes_shared = thp_read_num("khugepaged/max_ptes_shared"); > + int fault_nr_pages = is_anon(ops) ? 1 << anon_order : 1; > int wstatus; > void *p; > > @@ -997,8 +998,8 @@ static void collapse_max_ptes_shared(struct collapse_context *c, struct mem_ops > fail("Fail"); > > printf("Trigger CoW on page %d of %d...", > - hpage_pmd_nr - max_ptes_shared - 1, hpage_pmd_nr); > - ops->fault(p, 0, (hpage_pmd_nr - max_ptes_shared - 1) * page_size); > + hpage_pmd_nr - max_ptes_shared - fault_nr_pages, hpage_pmd_nr); > + ops->fault(p, 0, (hpage_pmd_nr - max_ptes_shared - fault_nr_pages) * page_size); > if (ops->check_huge(p, 0)) > success("OK"); > else