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 0B699C77B7F for ; Thu, 26 Jun 2025 04:47:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 743C26B00A5; Thu, 26 Jun 2025 00:47:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7141D6B00BE; Thu, 26 Jun 2025 00:47:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5B4DD6B00BF; Thu, 26 Jun 2025 00:47:58 -0400 (EDT) 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 48D406B00A5 for ; Thu, 26 Jun 2025 00:47:58 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id DC251122120 for ; Thu, 26 Jun 2025 04:47:57 +0000 (UTC) X-FDA: 83596319394.18.E35AE0D Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf01.hostedemail.com (Postfix) with ESMTP id 173C040002 for ; Thu, 26 Jun 2025 04:47:53 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=YxPssu+6; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=TB0igf4F; spf=pass (imf01.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1750913274; a=rsa-sha256; cv=pass; b=PYG1ulNZ5DYDatQfaHspesLOOPtKO49+yoL4zvCxPGIsYHIMh4U+DBtKEYLpQ0mnB6ywp9 WP1yZmLzGQdGDcqC9iHXu9k1/YNnzjvrlPiVORMeCFwnx9xceQJPEL8VsMJMnIy94Ebkrj JCbmGVeWAowTO/tXivkq7TARJ8+cyO4= ARC-Authentication-Results: i=2; imf01.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2025-04-25 header.b=YxPssu+6; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=TB0igf4F; spf=pass (imf01.hostedemail.com: domain of lorenzo.stoakes@oracle.com designates 205.220.165.32 as permitted sender) smtp.mailfrom=lorenzo.stoakes@oracle.com; dmarc=pass (policy=reject) header.from=oracle.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750913274; 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=I7PWoHNSDnR7nnLpXog6ZY/IeEfN8y7Iw3IlwPJ5pts=; b=ogHA+VRNDrI0IkCjRFh98wui3rVjFmh4qPIZuU3gGhKyo28X4X/eD04XmF6Y/kdxbH3Qx8 OoZimEk3JvOfkDwmT9otsHxc63PTYGWEf8qB3d6YV7i+7pYnUGLRIrGrd48TK2YUADscBy PNhv3qwntvNovdbuLB01zIVxvzqecV4= Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55PLBeZB008014; Thu, 26 Jun 2025 04:47:48 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=I7PWoHNSDnR7nnLpXo g6ZY/IeEfN8y7Iw3IlwPJ5pts=; b=YxPssu+6fHVRTWKNxIeBYmHZol7ra7v8qv lwsFQZbEfuZUXiPnG7buEQpOJ2/4XUgkAEuLgScLJkp5YiRGEVSuXH86kW+WkDlZ EEZlVIaOTD8hV747x1w8qzg+taefY2ZZD0R62omXfT7/hCOZku3g+VAx63Wy1Jcd ncWQ8n47cwjqyqA/MZ2f0ndEAKSWxuwf2oF//Wh0WvcWuQ3n1/wSSDLYRhhGJhhX T+5FFh77RLOg43ABDfz6COicIi0OnwajjnRbmkLsbyMy04jDQ7CleNoSsT7zbCQK YcPUjIyyYaBRztEwVDJah1qKJ8H9IEHCgx5QsBEAZX0ymnAVjlZQ== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47ds88110v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Jun 2025 04:47:47 +0000 (GMT) Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55Q2OGJl034640; Thu, 26 Jun 2025 04:47:47 GMT Received: from nam02-sn1-obe.outbound.protection.outlook.com (mail-sn1nam02on2052.outbound.protection.outlook.com [40.107.96.52]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 47ehpsfbye-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 26 Jun 2025 04:47:47 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GnFSvnhs751yZaDJx9ZHWM/P6CqBVe4NmeWFIFqtojyiSciA+q4MKrVOwetiDiWZUbUEnFuHKgNaJLj6n6bC47Nqw5emyYIgZshKGFFnIDzD9qv2kWf+mRPyL8bSesoZSJq1ByQ2oZUmiN0u991pjs21kml7CNF6LYwIBu3u1FvJg0wYMUqUG3AD1WFK5gmEn1N8+ViCUf4FClkpYiq/Bm1VBjnRWI0I3cal1AvH+lFQugBbbVxS0BFVpWYV2mpgF/wIjvJ87IYeUOKuwV0Woihoy0/DWDnyrjPDg4Mb6teEOwSh5TB/aLfh0kgAthKV8LfM5pJFW7t3j8tjktY8YA== 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=I7PWoHNSDnR7nnLpXog6ZY/IeEfN8y7Iw3IlwPJ5pts=; b=F+DNaO39jFqArjA2phkFj0EzjS0/XYqo4yZQVMdCnlciMLNO9SA5K6ppABZ0SM7a+Oh1lxe5TVx/LfDdu5X6s1LEbz2CsmYwkqnS++U6PrvFXHvaVNhpg8CRmdzMQLRJ9ZLszCQWHsuAIdoWKYL14vL4HR9eRHCouQuwz9/05sfuebHw/i6uzYlqqTofMcHfNhh+rhXYjw30O0BFbODq7EXxggcVOyI2EbSuNWXpBdKEobntSFP2f6fjqhjxUQKUzCmnNICzOcu6t279jOil59RZ8Y3/gpi+dpmxNSVKQYuO0nkICTckpI6qcVdfi3/duazWFmAxhqINSk8XVyaYdg== 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=I7PWoHNSDnR7nnLpXog6ZY/IeEfN8y7Iw3IlwPJ5pts=; b=TB0igf4Fa4CXqY53dLGORX8dqr2DEyxYMy2RMTOvVOsG5RXdAfjFwOq469vftle5Niw+KWWKZ4x9kgHAfQeXHOJvaXrX9pKoHZzXuysaK48uEJwSvpiWHsGIE+v2yXJzDgB6agbaHKFbFo3qCKNDD7EOMUp9oIuPoj69wKo1VO8= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by DM6PR10MB4140.namprd10.prod.outlook.com (2603:10b6:5:21b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.32; Thu, 26 Jun 2025 04:47:45 +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.8857.026; Thu, 26 Jun 2025 04:47:44 +0000 Date: Thu, 26 Jun 2025 05:47:40 +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: <8109236a-9288-4935-8321-dbff361dc529@arm.com> X-ClientProxiedBy: LO4P123CA0440.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1a9::13) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR10MB8218:EE_|DM6PR10MB4140:EE_ X-MS-Office365-Filtering-Correlation-Id: aa06806a-fca3-41d5-74d1-08ddb46c977d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|7416014|376014|366016|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?fiWJaK4Ns9p527oCYLoTGkQf4xJ40gfPhOem3YPCgUTPwyaRwfw2WE6NnLdN?= =?us-ascii?Q?HcBhvbT1ziIrKq6x1AJJbH3v4vh5aR9J7Z6mT1PV/zGSs/TL8zDAdWW3OHQ1?= =?us-ascii?Q?AKs0i2C9//+u0Zjs0Pau/HpmJ7C8bxqpbIcKB9Ck7VLomRqn7Fe9Y9BhF1uu?= =?us-ascii?Q?Pg43v3HKl2Jqsa+6X5rL2YIsBiLfX1ddA3aZdMNfADIhYiHmHvnQKDhBeYwJ?= =?us-ascii?Q?FP/GUN5JOF7a+QpW+4ZaFHGo7qpi/SEmm/GJBHq45tPbp4KCZEHaoC/zCNKf?= =?us-ascii?Q?9/pQA1wxK80A+p+RNMhm746IYYGKQjI9jmCntWzRBJGrQFn6K5smqB25AM6O?= =?us-ascii?Q?lRnjmdM7UWwbJ7RBMRB/vSSxIBRtVDyGAzqBTSEZbIWaBbMQjncR5cEbd25Z?= =?us-ascii?Q?bPy7kf3cxB21IhBJ1t54yNnVrctc3AxpgRP8JyxgEoQA51EZXAsK1eVR8cuB?= =?us-ascii?Q?kiTSZHffB/1fVTmtqIPEwKLE7KjgAEQy7ZWZ/sD0bJdNMr/NEpNUSGf7bgGa?= =?us-ascii?Q?eu7Kp3TMwze4s0fof5Hxrmwz+7IMv+5QLrb3z9WKJFqJoY+wn5dlRvlXfnXa?= =?us-ascii?Q?1znr9Z6kpwCKWORoBjrXZ+1tgdfLhHZUphsrJ0e+xOFUAlsGPUanzf7gqNno?= =?us-ascii?Q?EasU86IoCpHzjvXRcjL/GCch4s4C7Enchm5+tFsu/pRRxQpdOZacMTCNliB/?= =?us-ascii?Q?vlhnHADv6zcNdL0CzX2jleICPZ6wVH0ON2DMW0UFSHuismGyzd1J1juXWKGm?= =?us-ascii?Q?JXdcdAGnp2v0kfGNiaHPgQnwh16bMdew3SKHCVDU4FrfMvOt4N/+hQhB0BcC?= =?us-ascii?Q?Eumb/dj+pguK+0qPXES3y49DWb/kc0w6uohT6QVJkwyvCmOOidfHgGA44jb5?= =?us-ascii?Q?ApKfUVG9vIxF8a05DYy/d6313wBDqLX2KTGHMbWTJhXYqSp7csAxjFGjB07u?= =?us-ascii?Q?xEDFoHmAoABu2F8cgiFU0Fe7fb7eeTVWIYY2t0KILNXWkpkqCtgYrau3E9pz?= =?us-ascii?Q?Gi1gmwk/CY+fn32YRep8mXG7OVwcQ9XDXwA857wAWWgkY/UT5yIAlbM6b1cZ?= =?us-ascii?Q?bQtThRjUoDL8LPMxQ8h+tiMCDrS9PNnBG+pgEaDApEk8a63+/ugY8ZwkOaIE?= =?us-ascii?Q?/o4ld4iSX8NF0T3Rt2SDfWGn1jKI0joz5M7euokG6hGJPfq+1a1Qqjzy/eLu?= =?us-ascii?Q?Ns53ygMhVD3E5OVgjC3/PKrMyjAEmqndZXBZWAZP2Yh4ESFP3X34Ig1opSHo?= =?us-ascii?Q?CQ6voQc3KDNO4noSFMvxheNF/7XxUhzhwOhj5yjCWHZ31cT4NmhgsoGSWmbt?= =?us-ascii?Q?lZyRiL6/8cMy9A26fq7PBW7O4uoqcQnyWoCexZZkCcw+L2fSGhlHvcpoA/pZ?= =?us-ascii?Q?/+hANxkuDtQSZFtpFFkyUT8ibh5OK/A+9GrtjcU8mkqsIGvWJg=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)(1800799024)(7416014)(376014)(366016)(7053199007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?HEoArLZI+TH3HOp/Dro4WEC58SCD8cQu32oWLGRuXj3xjNYVxEPaYZwoHf81?= =?us-ascii?Q?o8jlJbgVH2CEFEshZN+N4wFT8gIuxVlVgr5+Qj546m7MSThQkroWYqGfKpV+?= =?us-ascii?Q?0rpundvD0sSRdLeoRjMRblXGSDfgUsSpDaEKIYV3QIgIHe3YTB047rfHpCNF?= =?us-ascii?Q?b11xFlnPi2j4i8ue1I53AA5xdDOuFLqVYz2B/IN9qmE8Kwlh9a7j14RsbEJL?= =?us-ascii?Q?yeyirhMM9DorJg9k0v+9ayG3tWMWuzTUeA2zrZzYEYxqgHzxtWggxP81U/wE?= =?us-ascii?Q?jJh2+GRBik6ifkIuXoSGJDYFiGOUsTA0vQC4N0XWwi5Iz/C1NukDwkg2Fr2I?= =?us-ascii?Q?iMDUFsfnZdvbTP7RapHpRvPCrZsa+w2Codd8B/c8QlltO4zBdUWG7jQo2H9X?= =?us-ascii?Q?1FaAJFdHOvnNypSnDECH+JO/hUcWDP7sM+ZhBcLElKyiTKE5LX5qzaAxNtsI?= =?us-ascii?Q?CoYZBpeIJw7sz8/NE6JVdvt9E20Fftn2XPRss0duPFCiVlFY2mcHEPhDiHJy?= =?us-ascii?Q?eXTmyGmzxNNC5zAloxyJcEc6kUrzR6MmMBjOZac7NR+mupu6VjR+vfY/VJcP?= =?us-ascii?Q?OMaORAoW1u38QTJOZirtDDH6oJth2fLd1E8SvZyb9H0LP2DKXyEOSeFZ4lZA?= =?us-ascii?Q?oKn+j6BFYmSc+0WyCQRdCwkUeS2L3MbtGbMTa2DV5wnxVDvcmu+TRZyKtaxi?= =?us-ascii?Q?6pXuSXLI8evY0p7+7oTv0/TRdjgHub7wxQ36JAkulAvoGupmzf61OXzPUTG9?= =?us-ascii?Q?PF45AgpjJKYxbFW66+x7Hlbd9BbrGoLPB+GovMEPG8znpL6h4egLoKmN5r1+?= =?us-ascii?Q?MahuGQ0HitUQdHTKGREyg/ZToQOwrYrIIEXyZXT0jWxTgtu+MXUEEo1xiHj8?= =?us-ascii?Q?eQzjygbYQnVUv+N8IWsSHts+f2Wlyj1Z2plt8kAC/jKsvSBx4Lw6AZeh1j8u?= =?us-ascii?Q?ZhDD8qNX6WehnMEoD+F5pkGsGm01cWdYpnQANmKcRCUjQXJtRRqtHANqVZiX?= =?us-ascii?Q?P8+tQGfRBMffI0BH5SOtT/Axv5EpQdSrp6UHbTJUmJG7XOjmKWgDRl4JzgGw?= =?us-ascii?Q?7eQ09YR8alQyXbJRDM0nI1UJhbxoYROFmohXPlG1CZX3JnAoa2cHfltHgZFQ?= =?us-ascii?Q?7uItyc84k6tUnrPW9DpCHH0NAKuzjRxDLfcSbD1JGMk7w2vqo7VswISxXr9w?= =?us-ascii?Q?9egAzIQl5M6HzdBDIaIewKX0iOiGlr8swqrmnNDbrLak8tP5N9toSg5u/5q2?= =?us-ascii?Q?svItRSQbcJPTi6ePAOtNMZzm+Xusnu79DAOZSYLZnE2mBAbBHsqNkySQKtT2?= =?us-ascii?Q?C+7Yn+pByjCvvBfNY6VigmW7YnXKFms5NlrjiV2jYkUZLSE3TO12GFRYKqqW?= =?us-ascii?Q?r2CDkbuXnA7srjSYnjFDGFL1pm8S6ngb27n3RvUIy01H6gn9v+Z9Av8zYa5+?= =?us-ascii?Q?vL1AcIuSX+sUaf5PIqnTkcbUTNjO1qYwj4KCyUKuOLKpfaekHFPO9Cik33Bk?= =?us-ascii?Q?OZFrgR3Pv1mUBQzUEDH+7if/kv1i8dOv6d9Mo1pa7EHLmgsrb8/gABTK1WWZ?= =?us-ascii?Q?j47n5AK0L/8oV8tDcu3JAefhfOg3dT+t5hheSzOl1xqUi3Q0kJINnI+2PdU8?= =?us-ascii?Q?Ug=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: gENe82QL+7bvibS9guGLHEZ9HW51kQ2tHn3DpFvwTiYef0oMUkO8SN1RrZwUKejioNwMRtvW63CK7Dw9EkhRLITUlAkLyB94zFy7PYoN+972+35kjM3a/DUMOv3ConpwqJuMMfirWwZHQLuPNwzDOx8rwFFjA/xpbLHRJAKsiHrGT0bO6Zo2TkB0Z5O65ozHvwx+isPWC5hq+7MZ/CcwTM40Z5JFEIg2wV+XVnz+xaI7OM59+XOExI4eVsFy/6wl7DgxrkODejSq7euh+Z8F2sdzhoJfcJDOa7D/kGj2bfZtEQ9N+5ujU6skMRgvkb2BlezyTOQZhTs5/pCOmCMZ/IsGs0VIEAeu8NhmHPEPtNpr0ceiHPbokf4ct0YXUxCj484jpXRNzM2SrWCdQi1zlqiXZfiRJmwy9DK/ZJ2kn26+/CnwKuqCXMorZx+iufaHdb27Js3u5UWAoVGaYj6b3Yougz4I8ktR9pDyJTTsM4lSBisCAyZejsvS/MlgeHSmBc1DFZsv6mSBXTmKVlwIelswL2FvOqalMKlysqr7ZkppvTbFyXffMLzDJkeGLJEMLZeYzzVs0sIXDMywHCw3CrVghuYxeKyy7V3Fgp/S00g= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa06806a-fca3-41d5-74d1-08ddb46c977d X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jun 2025 04:47:44.9044 (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: nJsQmZHaXsrkV0jmfZRDURUmCZEHTFKzoEruuZSHpF37shdWygw3SPEVa28q9ZyfMnkR4WPiey7YbDGbmhsf27LhAyZVgUrE0NJEzHrJXjI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR10MB4140 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-06-26_02,2025-06-25_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 bulkscore=0 malwarescore=0 phishscore=0 suspectscore=0 adultscore=0 mlxlogscore=999 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2506260035 X-Authority-Analysis: v=2.4 cv=a8gw9VSF c=1 sm=1 tr=0 ts=685cd0f4 cx=c_pps a=XiAAW1AwiKB2Y8Wsi+sD2Q==:117 a=XiAAW1AwiKB2Y8Wsi+sD2Q==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=6IFa9wvqVegA:10 a=GoEa3M9JfhUA:10 a=7CQSdrXTAAAA:8 a=BJWgnSjz5l2HvNc8uP8A:9 a=CjuIK1q_8ugA:10 a=a-qgeE7W1pNrGK8U0ZQC:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjI2MDAzNSBTYWx0ZWRfXy1EzsgQPGihV biKWd/5uXpMiciwsNiw/9tlgIMCR2oJfhuxvGHmVDnsmQKcSLfonXqaIFhEVsW7eGv+ilBhiW6T feyxaZLSjzyua1NKxDiH6Qq1y/lR6tERMe3MvFdwzbqJte2MuJcLcwT3QHIhS4H3KUAt8zBjZ+l hQBoSzsw1/kPX58hCNf1BvQUwq8BMbiZSTEso06NoCwHY4gKP1EYZFeiHlVTyZXB25KIpY3T11Q +pUmWAXjychXNv6WO9j+obNZ2XVajqPgEjLuMCbj2BKRSRK5TGSdtlhqH5wHlGdKrBNdChjonni /9MpBpxLtPywFxXhNDyYj5VW0L5/uugL5Jku5TPaPM+p3BMuxnzyZzaYMSkkM7JPG75yrgJ6q97 Nr1i6LhNx4BsfNnUV8HmGzRa9vQL0lRysFfr9M/98KSUqfrwNmycSCCim9FW+/OnsFqNSz74 X-Proofpoint-GUID: pw1crAhIyqHc-ZuIcr0DBaH51y-8JePy X-Proofpoint-ORIG-GUID: pw1crAhIyqHc-ZuIcr0DBaH51y-8JePy X-Stat-Signature: 1gcfx3ot84bhabdwfmoooc6jmikijo64 X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 173C040002 X-Rspam-User: X-HE-Tag: 1750913273-887869 X-HE-Meta: U2FsdGVkX1/BfoXoY6uzmjTcNOeXM8uF805KqNiV1aq19q/NbG3gnol5PfAHQjBwpk3yHR1x6d03R6mXw5j2ZozPQe851/pTjDk0q4kSu/G/Z5geJHFPj3EF1ECxUGDKLwvX0zyfFCtxopPDOFbqaqL+oH202iazt85xHbx3FhLS7XGgYmm9w7kg4EbLAzJmn/tnQLkUwRU7Y9sA+P1qD/8105j5Ybm4cTSYCQh1x3FhH04fbJsy6Lu8zr19KZvEwGGOy6vvPZQo/krOmyA/HEBDYilsmDVTX51AKOoMAzLrIzQKSL/8+Zt212MHCXpVDTLPxm7q6YQpYpvKqy1T9AHMfVW+RcQauK20i1yAA5ce296CW6X2QdckbRJs34Xa0SS84NLi21n/6rugKmfj4+N5upKO+hiNlGQD9/dlrAFQxMk2AAJS80Z1hhCEu6saWCmlocA8UBm/ySiBAW/ysShU683aVSdFsu1xCIJkrUEbaxtWnx0+8zTtjJatZeZHxQGoVgKZRj5bAMcUVNp5oRu/Ebmrz529KcTlf08fSSja93yOJPNAMoffVX9Zoc4KCO4JtHG9KJKZXnRsqfFo4uzn8+m/MeFkVo4VltbIh6ikszGZmy5sWgLRsGyalfgFuF9EyLTc5ltquNkc9B/PY80t+Mrhst8jhy5/CAMUAHF1N+iB5+/7yNUa8FXZLjNcmr4Nuu57mxouHHEn6Tdvrf95awPQMSDT0VkXVqdzcWufWj0e3YDGlamoAWPifUxar+AE2TRbyNvh4TTQFvyCorzD/jwi3XnW0LKR/NiK9swlsa1SpHtbCRm2LkG299i3HlP8ONiMHvqhJwaKermAg8vMlBJeifHW7gMjl3ns263Jq0MMdy322PfUyAQwP+DOPg6Ne6Uy5e1mDobVvMXQjHWOlEKIJT8Xm9pbTfEh50H/L9WGNZYpIaKxvnJzJYANnccMG3PFxOTjvUc+cQ7 Qj9mgxQ3 juXAaw23WMeHC4l+aC1uRmMrtJN4/z0TSsohx20509ogHb+4xevSn11CgUwW+kzXazm5i5PYdhLSvG7rQmbMRt51wlndObQ0K6+Rveo5flIZ0Qt6l1mVG55L+ElsQYx/Wx4oXTYuVtyrEzOHksNjzK2kTdI7d77C0ZA2w4SO2//HxGaa7HoB70jnbj+PBIr2Gi9oDbIdi03lBQ4WXm6jwmrRhs+k5vaJLiEu5jdnH0Ips2X7UtgOW0wniGGvoF7DVgkhfDj3tEWWOigPkvGXjYQZoaM2aRxvcmskzBkYTBBZ9bKVjaQyzqkN8oSw9Lz3rb/0O78mkLQQvXPmk1XFjmBad+KwPPalmmESvBFb9gSryykK6z2Q80mN77RI5+Pr+lgFtMM7hh5UZcw6OJslREdviIsmOW+kAVrlJyKvgqict5+M9TAwvFZm+5x4taQpmKbJgksCGLtva4tSYC4/7lEavPZZBLFGbD3hQIpNcYtqW+tlKT4X0WXz53rzwX1j12x2yTlBoS+SwiyJcDbKcDVQJvzNbSrvg6KlgpdEW5ertVvgxVOQOykugdIuUrd1WjvQxcV/18ur436EmuhMd8D0B9wX/DhwkJMW3NuRIerlpNKY/BlB3V2ipo6qBXC08SHpQ8UkSUEN/u5MHhSt4WezSklFDTNFyEmkN2a0WteWkoMdglzAsA79yKz9PUYGges76YBDERnJ/9THvE1KRkIMrJgMvxnx0Dij5Yo6Zw8dfhalSceiEsr+0KgaNq98FDp8kO5n+sE+ndsWjq22fW2TApkWqSB9yL3OGk226XeSMqljVj5p/dcnEiQ== 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 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... > > > > > > 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