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 0F87BE77187 for ; Wed, 18 Dec 2024 09:50:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7F2226B0082; Wed, 18 Dec 2024 04:50:17 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7A2796B0083; Wed, 18 Dec 2024 04:50:17 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 690786B0085; Wed, 18 Dec 2024 04:50:17 -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 49DB96B0082 for ; Wed, 18 Dec 2024 04:50:17 -0500 (EST) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id EB28CA0D21 for ; Wed, 18 Dec 2024 09:50:16 +0000 (UTC) X-FDA: 82907607972.27.98BA683 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf15.hostedemail.com (Postfix) with ESMTP id A66C0A0003 for ; Wed, 18 Dec 2024 09:49:28 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf15.hostedemail.com: domain of dev.jain@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=dev.jain@arm.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1734515385; a=rsa-sha256; cv=none; b=yXbVxQoBlCBzIwqoWUuHy931JiMHELXH10j1ed4oqUm2OBtRd6+0hwC37XkWzQWkfhYs0/ M7pdP1TzYbfvYtiuajEp+kSl1aztmwJTXbm4SiyADcZUTNpERRtypV0vZHd9lmsbCjmDCc bi/ccETuGlLVdWhpInPB1hcwCNZRjqU= 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 dev.jain@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=dev.jain@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1734515385; 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=nWLqCaQZQESrJU9cU1/vssYDFETEtZwRpd2up5Lqb88=; b=mB+wVHpcOyME9l9PQooewofOAmkUe+py6ubVyqGYd0y01deFKVC0qf+f1qCrJ0US7Aq/0r tkA57gj+MubrVVJ9OO1xvAIegrTtJKHcwwncnQT7obCPfq4b42NWmsH7CW/BTImSfcONM0 lUiOXLDbTN3EvcacMMvpo7qNvtpTcfM= 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 E536CFEC; Wed, 18 Dec 2024 01:50:41 -0800 (PST) Received: from [10.162.42.42] (K4MQJ0H1H2.blr.arm.com [10.162.42.42]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D1A343F720; Wed, 18 Dec 2024 01:50:03 -0800 (PST) Message-ID: <07b40938-029b-42ef-a273-46b504e67eda@arm.com> Date: Wed, 18 Dec 2024 15:20:00 +0530 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [RFC PATCH 12/12] selftests/mm: khugepaged: Enlighten for mTHP collapse To: Ryan Roberts , 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> <7098654a-776d-413b-8aca-28f811620df7@arm.com> Content-Language: en-US From: Dev Jain In-Reply-To: <7098654a-776d-413b-8aca-28f811620df7@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: A66C0A0003 X-Stat-Signature: pdeas377oaontdgnnwwmg55wgi8dt3px X-Rspam-User: X-HE-Tag: 1734515368-137794 X-HE-Meta: U2FsdGVkX19lSmvDE7KxzLRueMC+nHBSwilEv0m8Ifju3hAP40MIAXp28TGN3iRdqMHJYpnzQJj30FOMTsRms5ivpE4FVupKCUfmwH1+qPd8aVFe097DOm2JtwZZSfh7uQWHtAOtO8sZ5pG/dD7gE45fTO35wH0upEP9LhL9WQrH9JR64wNOXA7w0gDX7fe6sH4V0DO+xP+PAoNYW2sUPzG+zxYAc0fXu+BT9L/OI2OEgCJJwRcrFKSBMPgbAGsBrhSR3lT4hUtaPiILSV5pOCncRPu0VLZyEBVM6qpLy3WJJKuMvNmEbV827VNXDv6QARIeSl2gCt5qbTB6R3JDsl/oHw8yQlWvgtM2ulSADghvR0C4RwAHe76GkSDtaouDqS2yHvCUVMn4QDXaTr5YfXN13FZnDyXnWHJYZvuOUuAFOvvJqhDUEeRBzj6fqwNqWaSnYNmY2mnbiNeetOAnbKyIWP+11nA0/MSNIKf+AnDoMthTmVAuBcP05ns1999Y7/wXlZLf/Q8NySJ06dESsshi6tX1Bgv7+mdNdDA+MYYz2543pdJYVYlj8gMv3gZsBctO7ix52Ub4mWZr+3omZOsG7w+ZNlF9dzRrIBRIoIoevQT6eqURfTsDN3Q/dKheAi2W0T1FFvaffmVEagXQdxLXNSslBAIBKk+Tlzu3/Gt+eg8G1TkflB/kENl9yVe9oY+A3VLOGrMKxdu1Amq/nAE9UBxAE5fR6ZTC9rYIj1SRQo8Eq5j9YzWT9XowzxwzTcwYnnwp8NztbL7zZl6vITJQQPCO3Lb5g4c+pfMZ1c+SAEvFhz89xtd9u+Jd3xnyiix86kHodjlhJDPJrc2CQbxCNYIhKqVPOthV+usjAOLrqPcruelkVY0CPr2SWnp5+VW541mSMm5PwnZKN40j/wOVhZgG2WsYmYW+KzdvTog/h3Ptomuucz9a7WFrE7Pa7bWM742dcDPGBgUVs/s 1OH1z5e2 +GMo8PF5xTR5M+pPO022egO/WjSLoZ7svtVWayKzzgO7I/0OP6E3Zlx5JF1biglnCwnCOY6IopYGgT3bh2T8r4BCacLeggrUnnuNZPxZlghuqOQ2MOvZDn9+lTXYWmHLk+JkndHB0cel4TzkUyaHcq5goD4z+xEvTyQlDZwpq8d31n1yo5x90hS+tvZnJqFYfSa6Yvwg6kMlJsksXp3vuUSqRenIFXyZSHC4tFwW+LUUX8kYvdpFaanPe7Wt2aq7aoMWw+iBb6IC0aEGsogmTig7dx0lJWtO2HkBwSwEMPd1SrV/hLw+tO8a6zWfUcySrWOMUx7K7YdyzWdqWpFkCd6SRRlvXWb8020Dv8LWNyke6Wb0= 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 18/12/24 2:33 pm, Ryan Roberts wrote: > 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? For this case, max_ptes_shared for order-2 is 256 >> (9 - 2) = 2, without rounding errors. We cannot really get a rounding problem because we are rounding down, essentially either keep the restriction same, or making it stricter, as we go down the orders. But thinking again, this behaviour may generalize: essentially, let us say that the distribution of none ptes vs filled ptes is very skewed for the PMD case. In a local region, this distribution may not be skewed, and then an mTHP collapse will occur, making this entire region uniform. Over time this may keep happening and then the region will become globally uniform to come under the PMD-constraint on max_ptes_none, and eventually PMD-collapse will occur. Which may beg the question whether we want to detach khugepaged orders from mTHP sysfs settings. > >> 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