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 DBCE3C83F1D for ; Tue, 15 Jul 2025 09:43:32 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 68A688D0003; Tue, 15 Jul 2025 05:43:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 662B18D0001; Tue, 15 Jul 2025 05:43:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4E1438D0003; Tue, 15 Jul 2025 05:43:32 -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 35A798D0001 for ; Tue, 15 Jul 2025 05:43:32 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id D0FEBB8C27 for ; Tue, 15 Jul 2025 09:43:31 +0000 (UTC) X-FDA: 83666011422.21.023F4FF Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by imf20.hostedemail.com (Postfix) with ESMTP id 860CD1C0012 for ; Tue, 15 Jul 2025 09:43:28 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=alUGKhL8; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=CLNsUmU1; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf20.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1752572608; a=rsa-sha256; cv=pass; b=8YPl1+FSoxRdIoQxciSdpbkzV9JcLvPiU7EpKLNEFoVEnXbF189iIJh7Y6N4AS95WvY4VH PaHnu97HImyPGkJB+l/HUllu7ZuYoTEwNkteQpapkrxgRQw4TdYGWHbpuJtwgoFOVl7hpG 6Lp8YlQ0fX6g17vDdG1a2dZb01/Rc10= ARC-Authentication-Results: i=2; imf20.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=alUGKhL8; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=CLNsUmU1; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf20.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752572608; 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:dkim-signature; bh=LOopeRF032sJP+T+9yAxAYjEBkPpi/XEvGGUhbbbTJY=; b=MH0j4gdgq0HOgpfp5ugMdsDOtfHZzUReu8Xv2bNdx0ts3It6Wfdh0DNRR8nmaVDq/tjgjx 5SnSsGyUjMaR0OiijJ9lnYkUdSFgebiRhDrZTLAjREky6O4JWy7UqLV2s7oS1ZCsPWhwXf 3iJvhXY2gHBS+MbrrXstQbuXoCiG99o= Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56F9YoWs020345; Tue, 15 Jul 2025 09:43:22 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=corp-2025-04-25; bh=LOopeRF032sJP+T+9y AxAYjEBkPpi/XEvGGUhbbbTJY=; b=alUGKhL8bIYmPPi5HCeoe0nsoSpahyzhfc DyYBKPQY+M28x09sH55mbjnJDWxEnXs/Qo+YveqwZLBpRndWvGtRiUlYt7SlQCRX w02bMuq4ayjsP8Wjra8uY1UpcXy6sQZ+K8ETJWCxGuGt5ibz+VoBjez3902WW2VT mJ67JSL1wvyjjkD81YNwam2U8XpqeSyynd4cQnjGbqRFKjtXXraWdXY2i9HcVQ0A RgIbkritg4uTFVyhq/yFkCVoxPnkh58NljjN8iCT0HZnX1xIdQHexuVfU8EfoAfT h3pS72V0CKQggeb2BpF5zixiOfQlA7VY0L7X1ePeBy4r4HfNMhqA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47uhjf6qtf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 15 Jul 2025 09:43:22 +0000 (GMT) Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56F7cERd023929; Tue, 15 Jul 2025 09:43:21 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10on2045.outbound.protection.outlook.com [40.107.94.45]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ue59r0nm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 15 Jul 2025 09:43:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=v+i+cOn6v73KTRHAMCRbxKkJZIxx8NHi/JZeji2duzjzJ5yvA6t0DuaEAnPahGIK29iv8c2WrxcoxKF4OxH6Em2aNf4wO4Hfg2nSY19kWzoMxM8C7n3MvpvsfUadlHXlB4tJzSsruV57v8+RQRW/P6NPtK0FA+oLPnEx8zPYAHiQNBrZgDhoCU4hOVIczl35BxXUmrqRHgEoYPmiGf2pu4eRgptZEI5ckD01wJCJWov3uy+obRqbpLuRmFaPNfVhd8uQx2NXng4Xe5k/V36Y0bVz389tCEOOgmEbtv7n7xy4R+GW1vKqu6K0MjSUdtHjTkgPhCpSy8heebi5f49Irw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LOopeRF032sJP+T+9yAxAYjEBkPpi/XEvGGUhbbbTJY=; b=a2g1NA82e96MCRa3LpNPeRH6XV6DavA/Kx474a/KJAqvh+aL1WPR5pOSa+IwVOhurz3OR1NUdHAcj/fGCm/mxq5juQOxQ+dem0t1bicfz4SG6cm+EKr6NEqtIhK/G5eQhOJOUjT7vkHb2GjP6VdfsX+ZX6QdO0dJejZFvzuPD5PYjX/i3pfnwdqTt0F6farEVtOfB+M2bIvhHjC+fbaK1MdDOtBuduVwp2bCaBiySyK6GY3BLVvPsMDZsURfAuZoirzrUZ/YR4uzfqlT2kqUu+lGq2JhAX/9+aeNNeAsG1WrbhXsmTRzdHfcU3OQRoKw4BlT4U8KlChNqxpaPzuZqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LOopeRF032sJP+T+9yAxAYjEBkPpi/XEvGGUhbbbTJY=; b=CLNsUmU1HfTXbq+uqPrBu3/3c00aNwUevKqQX2bj2MYuRaaUJqTnUy7Md2umOCSU2z7uYnDOgjKWgkQGOhSqdb7p7esN6FswTwgrLoqyhDpPd27ETQ8e6DHwQtuaufIbKBGyO+q3q4k9KwrqrO27OGKE0FF3GFtopydFJvADzv8= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by SA1PR10MB7553.namprd10.prod.outlook.com (2603:10b6:806:376::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8901.27; Tue, 15 Jul 2025 09:43:13 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%6]) with mapi id 15.20.8922.023; Tue, 15 Jul 2025 09:43:13 +0000 Date: Tue, 15 Jul 2025 10:43:11 +0100 From: Lorenzo Stoakes To: Dev Jain Cc: akpm@linux-foundation.org, david@redhat.com, ziy@nvidia.com, baolin.wang@linux.alibaba.com, Liam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com, baohua@kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 2/3] khugepaged: Optimize collapse_pte_mapped_thp() for large folios by PTE batching Message-ID: References: <20250625055806.82645-1-dev.jain@arm.com> <20250625055806.82645-3-dev.jain@arm.com> <71350398-b5d8-45b9-b05c-d2b63030f766@lucifer.local> <8109236a-9288-4935-8321-dbff361dc529@arm.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: LO3P123CA0002.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:ba::7) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|SA1PR10MB7553:EE_ X-MS-Office365-Filtering-Correlation-Id: aa785855-44d5-44ee-ea28-08ddc3840487 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|1800799024|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?gyu5sqgo3hXDifJiqUSIipLfgcLEDSqKzANTfXU4iTCVBmilmA2IL4uQZz//?= =?us-ascii?Q?rWVi567lXRf84Ugy9AK3wAevE1C3hF2bk/MZq+B88hoyBQQYicEV6EV6bOwM?= =?us-ascii?Q?1+IngWC88JJKRnyvbPkMOi+1WEGnxwcUqcqEaF4wpWtSxt7aSU8YvtM0MuZW?= =?us-ascii?Q?Hbq1rkN8yhzvsOmP0eYeYAzHnPmTekxxJaUG+QhqYC6pDwoFzDLoBosOiHU6?= =?us-ascii?Q?PDBeLVxcWf/Sd9+aIeE2w9PX8j/m+mOClnnXr8M4E42B9fGBK8Y11wXHjhL2?= =?us-ascii?Q?qY5uxm+wpo8mVuVAnpb5iCXXPeXzuURD1r5ybsMYQ8C4sT5UBLMEuRAdB1JK?= =?us-ascii?Q?hAnI9nc8K966yeM2B0PuH0JZzQBYObVe25xjVwoN7jFThrJ46ibXgSogfZJ9?= =?us-ascii?Q?1wRlF2sSjyuRyrr16TjiuZPdEyQsyjX/HIfEI/3dlAZUMvkTqCHRRjnZ3qrE?= =?us-ascii?Q?265BjCiWaLHyheN0F/NnBRf66BkzzV2MCqTU2XB8IsErrf0Bd8QUYc+pneCj?= =?us-ascii?Q?8jjsNoQBrf07wq2rnPx9DM3hM8ze2ItXADhX5HmjY5a5y5Br4pKxk1W9IP2S?= =?us-ascii?Q?93YNnG5IrbD6eOZg6YKJ8lQCVPCirSfbXIpHV4/gBfolBvXIiewFwgADtqj3?= =?us-ascii?Q?519xT73dbMIBEmlPV3f2+gZE3qZe5T2ZIz4hyxLgpbitynBbWWts5sfXePMv?= =?us-ascii?Q?pqDqs9Ie+WjrExaHy1gmtJKvq+3c+lf3toGS9L7JMqjucSXR/EkIXuXFnJK0?= =?us-ascii?Q?Wc24n3wQel5W6K6bViapl2BEAvSuO5YTQ2ACtrofr6RHKheAxhsn/2PitDb1?= =?us-ascii?Q?FVH66Nljs6W/RxzlJThT+ubJ/Qs2fTLmXQ5RzsJITwrYaeQvViFSdvrLrkBr?= =?us-ascii?Q?IDatgBJ9Ctq3mV9t1PdFejMbmwrk9xuoC05yDWK20ILx8oN+HKa5+EuCmbHf?= =?us-ascii?Q?lmDLv+j5c3XgRgvbHE4dmBKQ7RDMzV3VINxMuV+nzLYEKoFGJtBds3a0EE4b?= =?us-ascii?Q?ufSEqhJitDwmW+jQ+dOyC4gZf2YnpsMJQ74SqFEPDGtWEaQEs+uoy21Ow7qh?= =?us-ascii?Q?hxFiwL3sEIzYN14mICc0QAOlxujCDsat7nx2hLOTLaQF8no9Lw4v43R5wnWZ?= =?us-ascii?Q?Hspq3Bx9C12rSto/9a8nD1dty8DLns59slpPm4sbAvgGPzSzCc6EoGhVXSWk?= =?us-ascii?Q?eKn6TXbEvPaHqA6WQ3kxw9h4kx9gEsYpQD2/iLCH3E2zqb+kQQWGHojsxp9B?= =?us-ascii?Q?lxBiEmS6NMXZxzXUN+C4RYx2fomOf9rjphxGJlx7BHcNsIvxe048icrsXUnx?= =?us-ascii?Q?6zKws1t80y2pqPRB0Qw/lL3zJzD7t6myzPxMYnJ/sPMwaMZAEYSfoNchLX4k?= =?us-ascii?Q?UDm4+dL+EkLB+CyYdqoQxx+5yybHDHrWRx506BEgYNzkU1M5hg=3D=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(7416014)(1800799024)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pNPDoWy/w9+6hfpc1HZye03+/hL/ZVHNtTbktG+Ro6DgNMUJkGQIWg2AlYfA?= =?us-ascii?Q?zOqnVOFH+5MATumOF0HUBYp6uRnICWUG1odoxQJeREfWrkkAkvMycpcA2mHj?= =?us-ascii?Q?QJAFxjT5kbGxQVMQqeIrHUqV3gvU2pcartyPLOCsXTvr3VcsHd8B2G2vxyzj?= =?us-ascii?Q?5cPo1ddWEITxbNkOIFNF363kmgU0M82jNEMe40y1dbVzlx/Q89sd9S91lJF3?= =?us-ascii?Q?T4ejSFrkqHKs+kJsIIhfXAo4lrN0wbR7sOF7unNvFo0uyK9Ores1TlLqYlDp?= =?us-ascii?Q?MuvAgpyLUhakHKxealKkfUdqc1zvF5TWWyYS0ysf4xPfT/vh4YhmC8/fakQH?= =?us-ascii?Q?3DlWwTRKbre6kyRj0mGmhKzLf7mdTKItYurBf7adD6q2yC6BpQ7Nf53mW/cr?= =?us-ascii?Q?Mlv4fohajWx7B1AUSWd2Ie2fcQhTh51LC8owc8EUgVg7Tyx/0qSVaFlKOmns?= =?us-ascii?Q?BMMUxpIvEUSL+PF76HMplITXWu2+U6VjaU/PM0dkKy2Pwe2o+AqxuwHO7+uI?= =?us-ascii?Q?5s/cRcQjuVSOUpqMdJA6MZyl/Z+nPs7E6KvFWz1Z42tsEIPuPhcZVRHf1iBv?= =?us-ascii?Q?fPxozagMfcxeso7nEV7h8HbVDJBUdktnHjDUvtxK+kxhCZbn9J8tAlpost1Z?= =?us-ascii?Q?wwtlUpliOywgN6D+tYfqFRuVSc7AAwevXwpIwqEmFoPkdyT9Yz7b45W/M2mD?= =?us-ascii?Q?ZeJ95OYmSxHs1gXFQtd3q9zxcTYNpzBuHkQL5WYj6BEFLm0XTRXHj05ih2uE?= =?us-ascii?Q?1/c8fVEiKhJjvCK0bVAFu0h4PIQAc12uMMH9cZ8iuE3A440k8RsnXrNny109?= =?us-ascii?Q?I8nB9Sb8pTJ8PAYm5srmEwK8gvwjAfrrbek1hVxMB/lowyeD2xCxuoQNN1tu?= =?us-ascii?Q?VCuxRj6H1r3RGZjfdAZ+CroaSo0yOBPDA5lkvN1btiSFQCF5VDpVILzZobIM?= =?us-ascii?Q?xBmnuiuB9KmrQeIhPzPImqseItpT3hGY9zoip+lp7nOFUJXpXb5/YAZMwl31?= =?us-ascii?Q?0EL3wF2AI6VI5aYyp8jts29X8jZ9TZYA6j6zLcpTx/PZroKxFezd5llzquX4?= =?us-ascii?Q?t+U1stxRV7THjJ3USfs8MoH9GGuSvzbYM5iLQj2Rsr5ruUwcjWn0QgJXvpzY?= =?us-ascii?Q?Zth5jZqIwUlISTMaxCTCtMDQFvfl/X4iNzx+D7l7Wt9/sBMr7by/2F8jZaT1?= =?us-ascii?Q?0DIoRL+A/Jd5irHvToty6By2CU99QL9K+FgFguRJGgwFJEd4MzOlEJJ1cNBV?= =?us-ascii?Q?hd206byQWYGRezlHoDqbEl79IW7o6vWAQodmCrNguRjffw4gpUrKjujHeAKg?= =?us-ascii?Q?spfByJlzaCGbE1HKuhS5zeVQka0Yy1ymZSHaUjRGbH/HZcWHhMDH7fJ6nkYw?= =?us-ascii?Q?M3HEsTR+utNtqmAvWCyWsi+X5w9AHYgmfiqzagaWQ9qwmwv/K4hEGMFlX6MQ?= =?us-ascii?Q?GUehLGRy8RBOH8q9P41sGG/N4vOhSZNgH5OcrM9kEabWcUxdAZB8c99IuE98?= =?us-ascii?Q?cj90y/3xZKRa/VTQ3RUkhWQJpe627c4G3sxb/6Z0n7+p4sQsYbmkJbviC9Ug?= =?us-ascii?Q?pbNDJcs2ar7o9n0y4+bcpNKbyCkMRcoFhL4B0r/JvvXXQSBdKnQ2QYcMcuMK?= =?us-ascii?Q?SA=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: svh76y4cjUgtfXZXtAoZjiyrWz51qBa5OzQRwMbul9Bcjvh84BCMraApwh9kVmMz597zROHjVmPIKbrkt/uB9S0yTqhtdxSri0XZp/BkTyZWA4zBK5Kc83WKfUstrhgJjb2O+pwt587Z14R8qFCdxNNYGKMO8T38tpQ3+1zVrxX6zctqBVf+Y/UOwOldhiRkr1hlB+aLoZv3UxKQ4yaBzu9dGQ2+89rqe+9sZSAf5GdVCRidsDdqPboPsCVhJR5eDSBXN5cQSU6YRFC4eBDYuGvN8niCMb9lxRPixQj592W5bn/kZZysMuTtMbHqQfKRH0g3qJHT4RHMIS++C/KalVfsr+PHKUygRyNbnFtVj9FspzzvwZoiZ+myw5pxuDC2j6YdVubMFiiB/yn9vRbD/l869qvFvWjkiriTKXG+XONVhIC5LzcF/oWwQ33ITy8TNhbBpWMyAGxik1/6lrpGrzjIhD4Gcwd6jHJHdHmVHIl9k/FvO+hbA4jgj3sXmc7ox+jldKBf5HRBLMY761GWLF9igO9QaEl8oTGhm197IQPLyhEFvN3S5wZlAqsBG9JKElUa03Ix0krUOZUv6MGPdcYaS3wp4JVbOgxZj1NCEYU= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa785855-44d5-44ee-ea28-08ddc3840487 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2025 09:43:13.6483 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jcP2ufkPMGXtqW9DmiJPKdwekjWMp7a2ypzEF+pU0+fbeQ/f6hipKV86fw5lIBVMYAIBy5WbAB1miKkuWltwLOm+Xy40NPriALyi1cH24wc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7553 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-15_01,2025-07-14_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 phishscore=0 spamscore=0 mlxlogscore=999 malwarescore=0 mlxscore=0 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507150088 X-Proofpoint-GUID: 6OO3YjWqKIs79KwZE8t4aJxBOePKH_GI X-Authority-Analysis: v=2.4 cv=O6g5vA9W c=1 sm=1 tr=0 ts=687622ba b=1 cx=c_pps a=WeWmnZmh0fydH62SvGsd2A==:117 a=WeWmnZmh0fydH62SvGsd2A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=Wb1JkmetP80A:10 a=GoEa3M9JfhUA:10 a=7CQSdrXTAAAA:8 a=Q-InONDA24bV5Mmoa9YA:9 a=CjuIK1q_8ugA:10 a=a-qgeE7W1pNrGK8U0ZQC:22 X-Proofpoint-ORIG-GUID: 6OO3YjWqKIs79KwZE8t4aJxBOePKH_GI X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzE1MDA4OCBTYWx0ZWRfX/akk8NT9DRG/ eOOc3cMM3jtgt6XHInzdiTqiHvQ11rc0AO3ObbBI+/3t4+C/gPXGc7Vv1mQjy5+jEamS4+NFMCI nimvhT4CmvOEFRfwJDi2mq8Z3Puxs7AaaBNbmfuWjjQVuTThZ6Vg1RaZ1XiNm/aiEis/Fi6jJ3k iJtnZSU7BumWIsT4bBGS8pcRjZnBnisE/W0mgtbMFwfWtsiGoPaEBvDorslmfn2VTabuCKZsibb Rp4jIR5Nhw5+HH/B/Peta6t1weRb2j/i+NzyDCujN4wykq1zcBG8lYBobn1v35Fcv0T+hU1An1+ mEPKRuQNseCNtFP4i1eDVUIc06PD0Z7iv2t7n86X+YnfAOs7IqOBDl5sedmTzqZ+hyvNF/IQo8X ScHCiA/K467i7nN8WqzK1prYt28j/knlKYFnvUOr0OQme0ak9wndCDOF5tfKY9pEg2Rs2HDS X-Rspamd-Queue-Id: 860CD1C0012 X-Stat-Signature: 35re7mye49bqu83najsj6kgj4stogonp X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1752572608-717253 X-HE-Meta: U2FsdGVkX1+0S5ASmKLl+cHhWDWqxLtU+c6Ob61YGxyzIYwrtDGKUyf92LFcrcYuZi8nRfqcNvQJe82vrJQZyY0KW0jtwiu2Z7wXvEED4o90EB/EfXGa1/NrvuMCls8uPapt4qDyvkxkkmi5gd9i//TjDotDhqEKw6s+mk3CYBcUgwAyt8i66YF9SJs+52hFU5vR3Zjv/hoBP1lqjvhVDQ12Ovv1+G5mZsZioh285O0fi1HrT0nLrz083XguN+qTXx8nvWxRuEgmr4nKLP0iNH5RwNLnA/+7gwdCMENjQ3bbFMAh49Btmzgtar8UOk2yliHqDZEwjlA0yRikWeQzzPvwdzDDnsBIx+vVJGT7h3AB7QEC7EQuGbCqYLuyntI6bw3p2aOrMBDEK0Ww3Nccf+Wb+XGJK1iCR1qruQk/pdWNWT6KobOyXKEvpBbEXc8DUwtKpBoPQPSFRZD4IVronPpBoRuxnv/zF3BaDjhjW75cIPHY6mVjT5H5rMagaqAjCtj79CRxxlAYweKQiNJy1MFBNHvK31kqLb5SXm2Qmb8B3HjXA7wWuK7fzioiHpCfCDPiH0INdjnolsMS/nk2puOh8cgO6bypJwzcuKwSjFCtNm8AvRxl9KglZTFJYVOEzvaPUZQoCk2hnP2RnR1j/XJVfPftmQAZ1066oNmey8GMPA2cdYvTgzWl1AV2kZ3+9+UnA5j2dO+WO+11e08eyv4E5N22jhRYHmv50l8AmSYWrXobC7v2HDi6SpFb7m92BXcRFqEZ35dJoM6JmPE9iDvnwkA1zjUleSOCPqOaXojbJOgDU0xp92MQ4Eh4nuFz4TP+XoECAmT3SUYm1ieUOvvnPk1bl5EqMcj/12B6y/I6/GtXnq4eKpzwRwfiFqkvnwQiw4IUDmvm/05r2fILjWYK0qWjFrrbUPQ+iCbZGqz0CuyyKN9xgNcC97VVcAwFpGopJkiAW1NcH1bVeLG R/wq7Bxy UeJVqSRkuxKMvCxCCDMUFWXGQSdfEGO1JDYwwhft2lYWdm39GMuCaAkRB48t8UoaivYS8k+SmAY8ZeU1qhwvWcxpSh2PJPB2Vb0XLd+1n0eH1VdnSbc6XtNObWoFLI2ZRNOB7Xpsx8L/uE3Lz7CjhoGxH0ldA9dlZXV89SwWy5coeUv8aUyfF3ST7qJ2Qys1/eIwtKv71NrtHyDO7yHdgZo7t1/6AqEdLjrjgv+TpfXpSv7NqDNp9klX6Stte1h6Yp/Lg4FM7uw5rupJXNqHqbBh+OhfRQFMyoAJvwmpVrAWQSXLiDzV+BlYSWBMLwR5lz//hZIedx5afqh/c/urfyMMreuXQTusyeEr9YtSCqVhnGxXC6rI05aWTb2QDlNYkEHg2OJ5olVmJyKl6qMrzLNeSRo1bKxXZ7LyiD0OXfYKpS+FaycYF1QaHDBbSmvCMe9sZ4FtmfP2SXoBwTm0ZA5yHRV6eWVM0Epci5YoRC1ExgWqtf1Vne3+krKLrsWYhz9KOqJxMLKkmEn2krD+WIMiHCfgDZ+m7ozXTn67woxCTdoP/WzMOoHXU/Q/BsPDxwaCmMbEVRPOJEVdjdg0fUJUYn9j/9myFziF4Pv9+rTrMQLHfkT44hfvIRyNZPftm71wCnMUZRMoqE8a3ZYBaLFJ8jSd8x2ubdlOcgAMj79gUH/ZeKsVA9uiRpzaDq03gQYFzdAEK95RoHkfmL9XsNhJLLMRdXFgvZ5jx1g9hj3oq7LQFT4w8/Bmn3QSqYNB0ZHpGpMtDCtyhYRYv+lnVHUNx9y4ro2/10rLHvQalxzTGuwefH/JTWQY2Zg== 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, Jul 15, 2025 at 12:04:56PM +0530, Dev Jain wrote: > > On 26/06/25 10:17 am, Lorenzo Stoakes wrote: > > On Thu, Jun 26, 2025 at 09:18:47AM +0530, Dev Jain wrote: > > > On 25/06/25 6:41 pm, Lorenzo Stoakes wrote: > > > > On Wed, Jun 25, 2025 at 11:28:05AM +0530, Dev Jain wrote: > > > > > Use PTE batching to optimize collapse_pte_mapped_thp(). > > > > > > > > > > On arm64, suppose khugepaged is scanning a pte-mapped 2MB THP for collapse. > > > > > Then, calling ptep_clear() for every pte will cause a TLB flush for every > > > > > contpte block. Instead, clear_full_ptes() does a > > > > > contpte_try_unfold_partial() which will flush the TLB only for the (if any) > > > > > starting and ending contpte block, if they partially overlap with the range > > > > > khugepaged is looking at. > > > > > > > > > > For all arches, there should be a benefit due to batching atomic operations > > > > > on mapcounts due to folio_remove_rmap_ptes(). > > > > > > > > > > Note that we do not need to make a change to the check > > > > > "if (folio_page(folio, i) != page)"; if i'th page of the folio is equal > > > > > to the first page of our batch, then i + 1, .... i + nr_batch_ptes - 1 > > > > > pages of the folio will be equal to the corresponding pages of our > > > > > batch mapping consecutive pages. > > > > > > > > > > No issues were observed with mm-selftests. > > > > > > > > > > Signed-off-by: Dev Jain > > > > > --- > > > > > mm/khugepaged.c | 38 ++++++++++++++++++++++++++------------ > > > > > 1 file changed, 26 insertions(+), 12 deletions(-) > > > > > > > > > > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > > > > > index 3944b112d452..4c8d33abfbd8 100644 > > > > > --- a/mm/khugepaged.c > > > > > +++ b/mm/khugepaged.c > > > > > @@ -1499,15 +1499,16 @@ static int set_huge_pmd(struct vm_area_struct *vma, unsigned long addr, > > > > > int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, > > > > > bool install_pmd) > > > > > { > > > > > + int nr_mapped_ptes = 0, nr_batch_ptes, result = SCAN_FAIL; > > > > > struct mmu_notifier_range range; > > > > > bool notified = false; > > > > > unsigned long haddr = addr & HPAGE_PMD_MASK; > > > > > + unsigned long end = haddr + HPAGE_PMD_SIZE; > > > > > struct vm_area_struct *vma = vma_lookup(mm, haddr); > > > > > struct folio *folio; > > > > > pte_t *start_pte, *pte; > > > > > pmd_t *pmd, pgt_pmd; > > > > > spinlock_t *pml = NULL, *ptl; > > > > > - int nr_ptes = 0, result = SCAN_FAIL; > > > > > int i; > > > > > > > > > > mmap_assert_locked(mm); > > > > > @@ -1621,11 +1622,17 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, > > > > > goto abort; > > > > > > > > > > /* step 2: clear page table and adjust rmap */ > > > > > - for (i = 0, addr = haddr, pte = start_pte; > > > > > - i < HPAGE_PMD_NR; i++, addr += PAGE_SIZE, pte++) { > > > > > + for (i = 0, addr = haddr, pte = start_pte; i < HPAGE_PMD_NR; > > > > > + i += nr_batch_ptes, addr += nr_batch_ptes * PAGE_SIZE, > > > > > + pte += nr_batch_ptes) { > > > > > + const fpb_t flags = FPB_IGNORE_DIRTY | FPB_IGNORE_SOFT_DIRTY; > > > > > + int max_nr_batch_ptes = (end - addr) >> PAGE_SHIFT; > > > > > + struct folio *mapped_folio; > > > > > struct page *page; > > > > > pte_t ptent = ptep_get(pte); > > > > > > > > > > + nr_batch_ptes = 1; > > > > > + > > > > > if (pte_none(ptent)) > > > > > continue; > > > > > /* > > > > > @@ -1639,26 +1646,33 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, > > > > > goto abort; > > > > > } > > > > > page = vm_normal_page(vma, addr, ptent); > > > > > + mapped_folio = page_folio(page); > > > > > + > > > > > if (folio_page(folio, i) != page) > > > > > goto abort; > > > > Isn't this asserting that folio == mapped_folio here? We're saying page is the > > > > ith page of folio, so why do we need to look up mapped_folio? > > > We need to check for all PTEs whether they map the right page or not. This may > > > get disturbed due to mremap and stuff. > > Right but I'm saying mapped_folio == folio right? You're literally asserting it > > here? So there's no need to assign mapped_folio at all, just reference folio no? > > > > > > > + mapped_folio = page_folio(page); > > > > You're assigning this twice. > > > Forgot to remove, thanks. > > > > > > > > + nr_batch_ptes = folio_pte_batch(mapped_folio, addr, pte, ptent, > > > > > + max_nr_batch_ptes, flags, > > > > > + NULL, NULL, NULL); > > > > > + > > > > > /* > > > > > * Must clear entry, or a racing truncate may re-remove it. > > > > > * TLB flush can be left until pmdp_collapse_flush() does it. > > > > > * PTE dirty? Shmem page is already dirty; file is read-only. > > > > > */ > > > > > - ptep_clear(mm, addr, pte); > > > > > - folio_remove_rmap_pte(folio, page, vma); > > > > > - nr_ptes++; > > > > > + clear_full_ptes(mm, addr, pte, nr_batch_ptes, /* full = */ false); > > > > > + folio_remove_rmap_ptes(folio, page, nr_batch_ptes, vma); > > > > > + nr_mapped_ptes += nr_batch_ptes; > > > > > } > > > > > > > > > > if (!pml) > > > > > spin_unlock(ptl); > > > > > > > > > > /* step 3: set proper refcount and mm_counters. */ > > > > > - if (nr_ptes) { > > > > > - folio_ref_sub(folio, nr_ptes); > > > > > - add_mm_counter(mm, mm_counter_file(folio), -nr_ptes); > > > > > + if (nr_mapped_ptes) { > > > > > + folio_ref_sub(folio, nr_mapped_ptes); > > > > > + add_mm_counter(mm, mm_counter_file(folio), -nr_mapped_ptes); > > > > > } > > > > > > > > > > /* step 4: remove empty page table */ > > > > > @@ -1691,10 +1705,10 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr, > > > > > : SCAN_SUCCEED; > > > > > goto drop_folio; > > > > > abort: > > > > > - if (nr_ptes) { > > > > > + if (nr_mapped_ptes) { > > > > I know it's ironic coming from me :P but I'm not sure why we need to churn this > > > > up by renaming? > > > Because nr_ptes is an existing variable and I need a new variable to make > > > the jump at the end of the PTE batch. > > I thought you eliminated nr_ptes as a variable here? Where else is it used? > > > > Oh how this code needs refactoring... > > If we retain nr_ptes, then the two variables will be nr_ptes and nr_mapped_ptes, > which is confusing since the former is plain and the latter has a _mapped_ thingy > in it, so instead now we call them nr_batch_ptes and nr_mapped_ptes. > Sigh, this is still awful. But probably just existing awfulness. This whole thing needs a tent thrown over it and fumigation... but again not your fault :) I mean fine, this is fine then. > > > > > > > flush_tlb_mm(mm); > > > > > - folio_ref_sub(folio, nr_ptes); > > > > > - add_mm_counter(mm, mm_counter_file(folio), -nr_ptes); > > > > > + folio_ref_sub(folio, nr_mapped_ptes); > > > > > + add_mm_counter(mm, mm_counter_file(folio), -nr_mapped_ptes); > > > > > } > > > > > unlock: > > > > > if (start_pte) > > > > > -- > > > > > 2.30.2 > > > > > > > > > V