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 2B2A5C7115D for ; Mon, 23 Jun 2025 07:26:45 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BD9F26B00B2; Mon, 23 Jun 2025 03:26:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B8AA76B00B6; Mon, 23 Jun 2025 03:26:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A03E26B00B7; Mon, 23 Jun 2025 03:26:44 -0400 (EDT) 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 893226B00B2 for ; Mon, 23 Jun 2025 03:26:44 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 18C56123165 for ; Mon, 23 Jun 2025 07:26:44 +0000 (UTC) X-FDA: 83585833128.02.3563E3D Received: from AM0PR83CU005.outbound.protection.outlook.com (mail-westeuropeazon11010045.outbound.protection.outlook.com [52.101.69.45]) by imf17.hostedemail.com (Postfix) with ESMTP id 65EC74000C for ; Mon, 23 Jun 2025 07:26:40 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=arm.com header.s=selector1 header.b=VdxDw3Z2; dkim=pass header.d=arm.com header.s=selector1 header.b=VdxDw3Z2; spf=pass (imf17.hostedemail.com: domain of Dev.Jain@arm.com designates 52.101.69.45 as permitted sender) smtp.mailfrom=Dev.Jain@arm.com; dmarc=pass (policy=none) header.from=arm.com; arc=pass ("microsoft.com:s=arcselector10001:i=2") ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750663600; 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:dkim-signature; bh=8LphNKyJ6jKWyXEl/uNo2EmDw7d6HFAB7bd7V2teYRU=; b=nOktOEqyMFpH9OyJnbnyL8I5agHPFYZKrkdXVwGpc+CuxSn5fUlKOi+3CXMYz3/7NOINVe dICI4DHEnneqG1aoEghiBnZS6KUiXXoZw2BoVnIAGoTB149JyT4iD3g1HYQeZwL1nDOc2x ENEVMarDPdYl+6VHjD79+yG9bGy1Q40= ARC-Authentication-Results: i=3; imf17.hostedemail.com; dkim=pass header.d=arm.com header.s=selector1 header.b=VdxDw3Z2; dkim=pass header.d=arm.com header.s=selector1 header.b=VdxDw3Z2; spf=pass (imf17.hostedemail.com: domain of Dev.Jain@arm.com designates 52.101.69.45 as permitted sender) smtp.mailfrom=Dev.Jain@arm.com; dmarc=pass (policy=none) header.from=arm.com; arc=pass ("microsoft.com:s=arcselector10001:i=2") ARC-Seal: i=3; s=arc-20220608; d=hostedemail.com; t=1750663600; a=rsa-sha256; cv=pass; b=60elFK0TuPKmsG6gSuZG3gFYmbt8iaA7aya/muInMPfzXmglDl3t7JIQQnTODVlbfm2ARD EsJu+yvN85i7qWcRqMHP2qVe48xIKgy2FsbvpkQT8PWwVt3tiuyC4E0GxYU/e33Dy/SGv9 ORzsGaF2crx+pDf1yrRrwFPLY8ojVZ8= ARC-Seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=elDJaT7alnJgCgGx0hgH1WVpw4YUtlWGTYdyvZx8barrnJZrNZy3IybWxuMM+y+CdTebtfpeaDxirhhnEOAkbxad7j0MuMRwBnwoA4yFC+yPzgjDODe3kkdjdlF7DsLcYgIBvF+bkv/MJrKJTH/soV6P5DQe0diaBXDkAXhPfkWsoAgcF/JLep5mKocXdcXfi2jiX3hlm5zJRSirx036bdWn988tbE2WqLySnNlECYXwm/E2kxec4zH56V1CnuREMBR3OqlNPjrUw+igL5NYwzWeWZrcAmSLjcGSus5cRkA3PH/vVp/wvNnFeYIdI3M4YbAj55TUhMnXiKn2vaqqmQ== ARC-Message-Signature: i=2; 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=8LphNKyJ6jKWyXEl/uNo2EmDw7d6HFAB7bd7V2teYRU=; b=JXlrYxP7Mo6hrZvsZvUVCE0Ke6gHq/4OGXAtORKziJHBhDcZOCp8RZh2smPqmBayLYqfsIU8R4vDwudVeluQtsE1OAz68AqkdpRMdwX3Gk/8QRvJLlgdroOlufq1GCcOROAhtb8z1Xn9cbwI3gKIZw9uWcDfCx41QNw/r23F/sFLyuL8bQGlpuCciGxa+/LsADoHSTanbXWdM6V3hIZnRbo2LBeT1KlZmNnSx8o3tZtI4R/zwEwUgv/xYY9Epe7Lml6IGUENDExiCaLJYSTc7xn2C7oPtg7EKx/SUZNnNDcsoF+JtERA3+UjL+66E/F9m0pxRwqqHggneZYUXEbBlw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=linux.alibaba.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8LphNKyJ6jKWyXEl/uNo2EmDw7d6HFAB7bd7V2teYRU=; b=VdxDw3Z28jndDkm3hzmDTUtWog7HV4BzHT94NOOM44Xa7ZxF/wFm46hXgs21SiocaNk3p46K6rwYEJi31phVJF73YXTW0mZBOC5CRD6PBhhm2UwvNgwRtZtWxu9Yy6ecsm7ioeOfo+Mk3QSaBHBbqtPMgCtNs7AHL790Xi3KuCY= Received: from DB9PR06CA0008.eurprd06.prod.outlook.com (2603:10a6:10:1db::13) by DU5PR08MB10495.eurprd08.prod.outlook.com (2603:10a6:10:519::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.28; Mon, 23 Jun 2025 07:26:36 +0000 Received: from DB1PEPF00039231.eurprd03.prod.outlook.com (2603:10a6:10:1db:cafe::f1) by DB9PR06CA0008.outlook.office365.com (2603:10a6:10:1db::13) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8857.30 via Frontend Transport; Mon, 23 Jun 2025 07:26:36 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 4.158.2.129) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=arm.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 4.158.2.129 as permitted sender) receiver=protection.outlook.com; client-ip=4.158.2.129; helo=outbound-uk1.az.dlp.m.darktrace.com; pr=C Received: from outbound-uk1.az.dlp.m.darktrace.com (4.158.2.129) by DB1PEPF00039231.mail.protection.outlook.com (10.167.8.104) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.8880.14 via Frontend Transport; Mon, 23 Jun 2025 07:26:34 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w9vTCGcLeWbFRm3XPF1T9GD32pL2XEWFYmaZBY9UZd8+M6u5g9z00q/Yj0YO6fiR5U2Qh5zgPMKtkG0Wk7IpIzhrOZ0iaVqcn2NUVaoLzhNTvmcn6zrRkoUhX4UM2kCxuYhOFaDxFCWelCM55RvOlitBmAvuYP0X2BGMXx+zjLqPbVQ4aUojjuyxasMxsBv7H3Gp2TNlZBFqgwADsjofYhjol32WJ+sg3sZmo5jxbLUbWQEFQT9ac6HoR1Wr529FKP+Tj3hJ504FV1/Uo54DxN4MtdMqikeBXAwONHlqJwtQKTm0FMSaiHVJq9h83bLwq47DcCaoE0I+mKTiMUGmlA== 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=8LphNKyJ6jKWyXEl/uNo2EmDw7d6HFAB7bd7V2teYRU=; b=pFqxfh1ngCydTkgPQMd2Q4s8AWt/cs7xugrP+ATbWN4DrUOz211RfqYqLHwQiLefoI8Ma91UsfHxyLphaysK+9gn0bDE3hxaiDAX0QdxZf/MX6B+Ptase6v3u5a27AuZ97Po97IEynbd7GTnoPVQoLROLAciGQHxr2wa3eHkDnugjJ4cUOqPqo4n2PVAV0V3LMBK5R6Rj+EOh3C2EAJynSHkZEPR0L+4FOvG4qczGK1pjdwHJ2n95ROqxh1ABnm66sSI74e8MhaFEY8bEw6emIaWM6th9R10WjJ+FbbuoHymBn7Bl9atw+kDMf1J1HR/JFrEnN1XMWw609/BAzxQhw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arm.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=8LphNKyJ6jKWyXEl/uNo2EmDw7d6HFAB7bd7V2teYRU=; b=VdxDw3Z28jndDkm3hzmDTUtWog7HV4BzHT94NOOM44Xa7ZxF/wFm46hXgs21SiocaNk3p46K6rwYEJi31phVJF73YXTW0mZBOC5CRD6PBhhm2UwvNgwRtZtWxu9Yy6ecsm7ioeOfo+Mk3QSaBHBbqtPMgCtNs7AHL790Xi3KuCY= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from AM9PR08MB7120.eurprd08.prod.outlook.com (2603:10a6:20b:3dc::22) by PAVPR08MB9721.eurprd08.prod.outlook.com (2603:10a6:102:31c::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.27; Mon, 23 Jun 2025 07:26:01 +0000 Received: from AM9PR08MB7120.eurprd08.prod.outlook.com ([fe80::2933:29aa:2693:d12e]) by AM9PR08MB7120.eurprd08.prod.outlook.com ([fe80::2933:29aa:2693:d12e%4]) with mapi id 15.20.8857.026; Mon, 23 Jun 2025 07:26:01 +0000 Message-ID: <086fae7a-87ae-4da2-a10b-f01af184c418@arm.com> Date: Mon, 23 Jun 2025 12:55:56 +0530 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] khugepaged: Optimize collapse_pte_mapped_thp() for large folios by PTE batching To: Baolin Wang , akpm@linux-foundation.org, david@redhat.com Cc: ziy@nvidia.com, lorenzo.stoakes@oracle.com, Liam.Howlett@oracle.com, npache@redhat.com, ryan.roberts@arm.com, baohua@kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org References: <20250618155608.18580-1-dev.jain@arm.com> <0c20196b-f5bd-4238-bbb9-316f6ac3078e@arm.com> Content-Language: en-US From: Dev Jain In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: MA0PR01CA0074.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a01:ad::7) To AM9PR08MB7120.eurprd08.prod.outlook.com (2603:10a6:20b:3dc::22) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: AM9PR08MB7120:EE_|PAVPR08MB9721:EE_|DB1PEPF00039231:EE_|DU5PR08MB10495:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b776283-5a27-43b1-8ee5-08ddb22748a6 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info-Original: =?utf-8?B?WXBETEpLWitFbThoY3A4a2YwMGxBNDJQVkFhNGRIaUVqYnIwak9qcWRuMTZm?= =?utf-8?B?ck13Y2xoOHArWCs4cmlMYkc1elZjQWlicWxGamZSbzg2ejk4YXJzVHBnaUpr?= =?utf-8?B?SzRIOFp0U21UV2tES1g1RTdQa3p1UmxWa0txM3ltL3IxVjg5OXR6NWdubzlM?= =?utf-8?B?THhaSEhubEgvcEw1b0U2a0tsaDJjU09PMExNamQxakdZSnZ1dVFPQk5IM3d1?= =?utf-8?B?ZzFuQjI0MFMyNkM5a0NDN0J3Z0NRUllOSkQ0OUc1MHhMeHN3R2M3WTNTYzZL?= =?utf-8?B?VDVKcXNuaDNNK0JJTTdubGdUTlhUNXZOOXY5ZW1SVlFmSkU5eWJhN2pXcWRB?= =?utf-8?B?SFRHMkxqNWpZb2VicXUrT1l6c3UvY2wrajdWZTBCREJUOU5iUGhWbVhqVnZM?= =?utf-8?B?MHdwOExhOWRoSGwwNzdIdmdFeVVweWZyT2lvZVBrdURUa0hLd1hTcUg4ODZM?= =?utf-8?B?bDJQOEdyMnR2U2hJd2JweDRPbTVUalRURk5BdlB3RnozVUhVZW9wOHBpaDN5?= =?utf-8?B?ZXpaZitlQzlvODhpQk9LU3B0SEJnZDlkbGlPY3U4RmJDeldsOFpiNk1KaWI0?= =?utf-8?B?OGJoRFAyWHMxRGFmK2owYlRIRTlqWi9rdCt4MkVKSUllMThpb2UwTW9xWVJK?= =?utf-8?B?SjlYd2lFM3l1Qm9IcndraE1sU3pCUDZXZ3FLT05uK1J6ZktjZjlqS1VhT1Bs?= =?utf-8?B?TFNBcWc3RUc3YU85NjgrWGNHTUZMQkpMOUlBWXB0ZUpHRWZUT1JFN3JxRW1N?= =?utf-8?B?MzVBendxTUlyUm4xZXlBQnB5NmRFWXQ1RzJpK0t4R2hWRDlKU0JrSXNLNk43?= =?utf-8?B?MEtDZTJBUzJxWUNwblRnWjBpcjMzUk9rZlByU0JGTTd1ODloa3FmMXZlbkVl?= =?utf-8?B?UG9ubW1CcVlPTEs5aVBTVlYxYjJOQWFVdmxTMk9tTFVsRjVucXp0SjByZW9L?= =?utf-8?B?ZkJXdjVXUXpTSlcvZERUWXVXNVBPSHBVWVkyWVZ4SUF1YURRYVFoQjcxRUdI?= =?utf-8?B?WCtDSHFwUm15RWxvR1lqaDV5UjVnOHJaTHErU2hlaUFXd1gzMTZRUzdZUXJt?= =?utf-8?B?VGlXaUZkMUwwd3BNS0JHS1FsRCtoTVhyVDhvUk1sS1FzY09Tc1VleGJnS0RJ?= =?utf-8?B?cTJHU0hESUdPWmVTWHMyNklwWTV5ejVwREp2emk2Sjd5ZEt3bVVLcUhSRzdq?= =?utf-8?B?NWRjMVQ3RXUvK24zMllqejE1aUlsQ0JyWUxUcTJMNEhhOUZKeWt0VUJiSU9Z?= =?utf-8?B?RXJKbENpN3gyNG1mMjZ2bWNtL3EzalV2Y0V6Q09reWNDQWh3UU42SE1pZmE0?= =?utf-8?B?bUdoQVZJWllUM0ljSElTQzVOU3h0ZHQ3b2g2OXBvSkJHcktlNlJGKzJOVUlh?= =?utf-8?B?Qm1RMU4zR1JwcmZWNG5qSE9qUFZSRXZxWUlHcEdPdUx1cXh5Sk1hMHZxSXhz?= =?utf-8?B?VlZDVnViWXFFQTJSVlNMcUdUZ1lYSUpnRmZtWGgrTjc5M2FoUVRGSlFMOUMv?= =?utf-8?B?d3B3TGV0SFg0WnJHUmVMdHJiMmQwdTNBNE1nbWFTbGdHendCZEI3SE1LTkds?= =?utf-8?B?Z3N4TUZPWGM2TENqSGFTOUovU0ROQldHaERuVU54SGdyMERGVnBhMHZnZE12?= =?utf-8?B?RkJmUkxHSnNPSElvL1crVHc0Q1FXZ3U1clFIdGI0ZUxBTm5UQlJ1cXoyZVQy?= =?utf-8?B?QWhHWmVMUTc5N2V1NlYyVEFPa3A4QUIrN3Jvd3hWUHdIYURmOWZldVU2R2ly?= =?utf-8?B?TFR4M3VYVTl0dEx6ZlU3UWFYNjBSd2RVWGpoNEhscDg5Q2k2VkVlUUZjNlpk?= =?utf-8?B?OGZJa0RtK3hlSlNsYjUvdXBQSVVYeVVWcHlOQzhKS09PU3RvT0JzSCt6N3N3?= =?utf-8?B?S3BkRktFWnVBcUthQ1hpTXdiajBvSTU4K0NyTzFUc1FxM1NYdmZkb3ZpdHE5?= =?utf-8?Q?Xce16S+IWgo=3D?= X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR08MB7120.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9721 X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB1PEPF00039231.eurprd03.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: fe5858dc-0c95-403d-46fa-08ddb22734bf X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|82310400026|36860700013|14060799003|35042699022; X-Microsoft-Antispam-Message-Info: =?utf-8?B?NW9ueHEzeVROTUcvdTZMWnd0SjVGazdQNittODdXRXBZc2ZIYzZuNWg5dTdo?= =?utf-8?B?N0ladEZoTWVXcDZaaXhvNFNjSElrb2ZWeWk4V2twVnh2dTVDSDJsbmdIL05y?= =?utf-8?B?Yk1YL1ZVWlQ0d09sSjlYV00wSi90M1VGQVVoa0hWTlBoc0ZoMUVYdUFLTmVP?= =?utf-8?B?ZlZwUWlveVhKdWF2UXY0V3VVUyt2eXBFeVp0NkxOTW5BZ2JrSXZ3eUJkQ1Jt?= =?utf-8?B?WWlsWDF0S2NQWnpOOGRtb04rSjl0UTFkcFZPTm94aU80WWdLWnBEZDhSU243?= =?utf-8?B?a2REb1F5aTRzeEZUWkIzT1BqckhLOFl1ZnpPcVNkaWJHbFRCVXNDdE16WDBG?= =?utf-8?B?V29CNFN4aUVKMnAvR2xsVDhRR0pBY3BZTDFrdk9YNFM5c1JUODJ1c3NUV3Jh?= =?utf-8?B?S3RNcjlFaHJtK3RyU09rdE0ybk0yTHVlTWNscDlkL0ZEQlFudHZCa05YWGdq?= =?utf-8?B?REFobEpXeDYvNEswdUp6WUpnT1VSNDJDNDZ6dmRnaExIM2ZOOW1XTVBManoz?= =?utf-8?B?NVpkTFpiS1Ixc2VoSUFLOXdXU05PNEhDNm5HekxuR2ljUndSOHFkZ3lMZjYz?= =?utf-8?B?WFJqNWtFYWQrR3d6NUQ1ZlpxVXdHSEpmOUJEMDhiaDR6S0s1SFBDeVJ5ZGZU?= =?utf-8?B?SGxaWXVtWDRWTy93TUR2NzBucHFIRTF5ZnZraGtRSG80M28vZCtNNWRmSTdK?= =?utf-8?B?Y2lsT2N2MWtxWCs3cGFJVkxsSUxzazF4L1hjaFVkbHYxalV3YTM2NUMzRVVU?= =?utf-8?B?T2hBMjJvYndGT3JTZE9NSFdSZXByRk51WjVzQVFRbHVDVWd3bkhZdC9JVkNX?= =?utf-8?B?bkN0TGxjdkFicW9mbG5YbVlQT2UwTlg2NDh0U0FQbGFxZFM3TVc3bUN2Znh2?= =?utf-8?B?ZzkzRGdESXluc1gvUCtGVmhvZjQ1dE1qYkNFWEY5Ung5ZEljaHJKaWJOdEkx?= =?utf-8?B?akNHdEZueFhsdFEzT2syYktUbUpOWFhZcEVyZXdDVURCQ0JlUFp6N1Vpbjhq?= =?utf-8?B?WFk5bnVaNVQ4QUM2NjBjRHJ1T05IODVFc2ljeFBOeVMweG92VVhFSndTNFo5?= =?utf-8?B?L1ZDWUNGc0s0cXF0OG1xQkszNjFlZjN1NTJVMEFCZWphNXhPazhnVnRvb1lO?= =?utf-8?B?cEF5TDFmTnpXeFVBYTBzc0V0NEVGMk9UUGZscy9QRUExeXdFSWg5ektxYUhI?= =?utf-8?B?QXdod2VEUVRoSGJKUGNIcEFRZ0xkRnJlUmFiSGpNemxFdzYwTFBLSVczeW1o?= =?utf-8?B?aWprbWxiT0tYK2FCSkJJcVhQWldxNm5HdjgrUEh3RUZkRzhEaUhCclV5RTRV?= =?utf-8?B?OFlVazk4SmRXMWQxM0N2cGZWakxWOWR6b2hKdStWMkFSak9sR3AzdjhBL0My?= =?utf-8?B?R1hwNUkvWUg1Q1g4cWNiR2RFOTloZ2h4WW8xZkRrRVk2L2JUYVJ6QnlISlZy?= =?utf-8?B?T3N2RUNLNE1EbytYUGl0cTh0R3ZyVjdqWjZycGVSaHJZQWxFcmFtbGIzTFlh?= =?utf-8?B?VC9CVVp3Rys3ZVdaTUFzN3FVdkpNZ2lvQnlTVGRzY2dtVk1vOUcya0JiZHc2?= =?utf-8?B?Wm9vYzRjRkNhcnRTMWZBVHQ1eGRNUk1jU2hlYXBIcCsvdHVCemZGNlNzaExy?= =?utf-8?B?OXdhdFBhN1lqMit6RmQrMWVvVUtoWE1yT3dnaE1tYWpoSThpNzM4SW4vb3Zz?= =?utf-8?B?RlFYa2I5Z2ViNHpRT3VXdTBiZ3ZWbWl6TTlyTHU2R2Zib3g4SmlYMGpnSkdL?= =?utf-8?B?Wi9mT1VGejBpRU9sVkwyQUNEWlY4T1AzVEdpeEVuU2I3d2cvbnkva3RmZ2xq?= =?utf-8?B?QjBqQmhDUzd4aDVYNHBOWHRQVlBZRFhicmEwRUFyeWN5bUxab0ZKemN2anFM?= =?utf-8?B?MmkyOHVTNm4rejltR0NmWDlJQkNiQTdIaVdScGZrZW05R1pWYmZVWDlMUm0r?= =?utf-8?B?Z09hYjZ4aytXZkdHMTdkUkRUUXc1K0Q1NjdONFQyQnZvRXlrWmtvNUlqN3Va?= =?utf-8?B?bEtTMUxLUm5hdkk5UjQ3alBQRDJJQjFRZjIraEVuSGF3dnhYcThVMHc3ak5J?= =?utf-8?Q?S7NXK+?= X-Forefront-Antispam-Report: CIP:4.158.2.129;CTRY:GB;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:outbound-uk1.az.dlp.m.darktrace.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(82310400026)(36860700013)(14060799003)(35042699022);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jun 2025 07:26:34.7642 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4b776283-5a27-43b1-8ee5-08ddb22748a6 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[4.158.2.129];Helo=[outbound-uk1.az.dlp.m.darktrace.com] X-MS-Exchange-CrossTenant-AuthSource: DB1PEPF00039231.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU5PR08MB10495 X-Rspamd-Queue-Id: 65EC74000C X-Stat-Signature: di3sggi6nn9753qs53w8id66qimfw8xk X-Rspam-User: X-Rspamd-Server: rspam04 X-HE-Tag: 1750663600-490680 X-HE-Meta: U2FsdGVkX1840/ZCyPubfCqYf/Av3jsop2/K4Ds/H0gVyI6NpIQaEXQ+MDw3djjDmvVrwoAniciAWweAwfkxldhVOXQiZCna+f7loRmuvdlHSSu1vQNx4n2U522hzSNsHU2WPMOMREnD2kZQqyfnprg01JLwvJBYxA9xMSiy6e+9/CDm+lt58qgI8Bb34aBY20tIkr7ZDMojjvl85QpQDaAstprGMyM1pingf+PzGa2SJGkMJWZacbWYKhJN/nIZtnPZHbWgDQ6RSWS2u96NC0UQM7LQC4AgRmnjhNQ7JWfmXDYzWCKLKlu/51e0XKRMeXeMpJaWOANJBAVZqQUYAGkCizVestpLFajNq5MLr7MX7BGaPY1U2KMmbE+sboiWbjGuawHmKunsQU9PMa5dLl6nnwxmyIQirS8tO8CIBhESHZPGEQYPDLMlAdtGKjYcBybO5kKpb9gkBvbr/rEocpRmnIBbiBvXKOd+byCUKi+whibyIWWu0pItOlzoTu458+j8ikqtCizA2qE6M0SVeoF7z/0bkcqcWIDZ8WhkBukmwZ3wAfqR0MWBeF1xUwWhVUnaVlxOCAIjlk/QpFKNpRDYgGiQF8GYQ1IC3HcCzfxQjstVS9uHb2tK7DyMP3YAEGgYUv/TlTQ7wXkXqBucBdhdaLR8cXxyOXRJsk5h40LZKWSc5IOVcWE9SPwJqlrjLLQikJnaZfuBjJQcw7NkVFEn0Fn48/JMbb1fVwYHF/QLVDFEdMHCCdyQdm6d3MWkQn18KOM9b04hZx6EhbQ+RGFEVwKshZ1xP0UBP4dqY0PZJdg19YFnnx/IXTwLxWT/ZA1Zxn5qKcn8M54Lr7Y8MN2CKTXS9rp3CsVd6DcO7pg5K83euIRcRfPzkpI+mrfw4CPz1Vc5OWcV+oc5L6MjJPBORg9ftjqAtT0qJU3LptISyaneRgKh+Te3zXiiFu+E29FPy+VdZ0Wscgt73oe 2C2j36jo FlE/p+uY7ooAFLvHA6Ke1iaq/osBFTOvM0ckRH+Bthv+57z16zoEhluAHB6TqTjoDX5hzuPEzN46cAYXgpsc+ZlnwYCWyfiUQabAjoutMSe+jNV/L43jZcmni4shKqGlWZu3r9zCHIunyft7U2x9LX3AjoUidznEPMKzCRfAP29fgneAam/6pWQ/N9/R5nSFMVFFLhT/zqN2ADq1C6ILLna8lVIXsUMRJJnnuxMxhWsO28GMRqrkYtcqft2uzBSXmcCb9uB0bE3DI8B9iimtoiQqL2RAzMnzEXyPxNT7jlKRcbkyLa6VCRMfvhIBkVocFqRERJiOF7eG6q4RP9em9hY5dHZan6i8dOaDlii8NQ/O+WFNrvdyuNlzcKsoIQX7ggbs7Z8IriB0avMTltaedrlfF1/moKOv94rALJQ++apbBLDmoKXzauDsoEeTe4Zq9FEEBcc102/dFAY2BX+5riCqZO+yGUmpOTirf31olZhs6H1DS1v3cKw0Ln/IP4dVvmp4Yny/XM+eoRInBIZtlVHo9q3wCfNf7p+11s32KvEkGzxBrzrbZ8Ge55s1pyyror75kACMEekYSAdDStNxEpiUfakSGT1VbKdrkSN2hwu+dV7pUXN648fTFFFkPyMUZ61F71RxwZDHYk1n2OFXvNO73pCzhKosfQ1BKuJ7LKVjEvBEgkng6leb6f8oqUZi8nwN/ 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 23/06/25 12:51 pm, Baolin Wang wrote: > > > On 2025/6/23 15:16, Dev Jain wrote: >> >> On 23/06/25 12:10 pm, Baolin Wang wrote: >>> >>> >>> On 2025/6/18 23:56, 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 >>>> --- >>>> >>>> This is rebased on: >>>> https://lore.kernel.org/all/20250618102607.10551-1-dev.jain@arm.com/ >>>> If there will be a v2 of either version I'll send them together. >>>> >>>>   mm/khugepaged.c | 38 +++++++++++++++++++++++++------------- >>>>   1 file changed, 25 insertions(+), 13 deletions(-) >>>> >>>> diff --git a/mm/khugepaged.c b/mm/khugepaged.c >>>> index 649ccb2670f8..7d37058eda5b 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); >>>> @@ -1620,12 +1621,17 @@ int collapse_pte_mapped_thp(struct >>>> mm_struct *mm, unsigned long addr, >>>>       if (unlikely(!pmd_same(pgt_pmd, pmdp_get_lockless(pmd)))) >>>>           goto abort; >>>>   +    i = 0, addr = haddr, pte = start_pte; >>>>       /* 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++) { >>>> +    do { >>>> +        const fpb_t flags = FPB_IGNORE_DIRTY | FPB_IGNORE_SOFT_DIRTY; >>>> +        int max_nr_batch_ptes = (end - addr) >> PAGE_SHIFT; >>>> +        struct folio *this_folio; >>>>           struct page *page; >>>>           pte_t ptent = ptep_get(pte); >>>>   +        nr_batch_ptes = 1; >>>> + >>>>           if (pte_none(ptent)) >>>>               continue; >>>>           /* >>>> @@ -1639,6 +1645,11 @@ int collapse_pte_mapped_thp(struct mm_struct >>>> *mm, unsigned long addr, >>>>               goto abort; >>>>           } >>>>           page = vm_normal_page(vma, addr, ptent); >>>> +        this_folio = page_folio(page); >>>> +        if (folio_test_large(this_folio) && max_nr_batch_ptes != 1) >>>> +            nr_batch_ptes = folio_pte_batch(this_folio, addr, pte, >>>> ptent, >>>> +                    max_nr_batch_ptes, flags, NULL, NULL, NULL); >>>> + >>>>           if (folio_page(folio, i) != page) >>>>               goto abort; >>> >>> IMO, 'this_folio' is always equal 'folio', right? Can't we just use >>> 'folio'? >> >> I don't think so. What if we have mremapped some bytes of this PMD range >> >> to point to another folio. > > Then 'folio_page(folio, i) != page' can catch this, which is why I > suggest you move the 'nr_batch_ptes' calculation after the > folio_page() check. Ah. page will be part of the folio, so the folio derived from page is equal to folio, so it is large. Thanks. > >>> In addition, I think the folio_test_large() and max_nr_batch_ptes >>> checks are redundant, since the 'folio' must be PMD-sized large >>> folio after 'folio_page(folio, i) != page' check. >> >> As an improvement we can at least do likely(folio_test_large()) since >> this is very likely. >> >> >>> >>> So I think we can move the 'nr_batch_ptes' calculation after the >>> folio_page() check, then shoule be: >>> >>> nr_batch_ptes = folio_pte_batch(folio, addr, pte, ptent, >>>             max_nr_batch_ptes, flags, NULL, NULL, NULL); >>> >>>> @@ -1647,18 +1658,19 @@ int collapse_pte_mapped_thp(struct >>>> mm_struct *mm, unsigned long addr, >>>>            * 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, false); >>>> +        folio_remove_rmap_ptes(folio, page, nr_batch_ptes, vma); >>>> +        nr_mapped_ptes += nr_batch_ptes; >>>> +    } while (i += nr_batch_ptes, addr += nr_batch_ptes * PAGE_SIZE, >>>> +         pte += nr_batch_ptes, i < HPAGE_PMD_NR); >>>>         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 +1703,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) { >>>>           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) >>> >