From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from CY3PR05CU001.outbound.protection.outlook.com (mail-westcentralusazon11013007.outbound.protection.outlook.com [40.93.201.7]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2F6C40FDAC for ; Thu, 30 Jul 2026 11:28:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.201.7 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785410902; cv=fail; b=NGkzxKQMlcJ4X0ZtPodenKC2kCpaRoFfmKjz1LvdCyIfV1/lvw0awGkKelH0YxSSocI0z8GBUoJ0L3IkM6gUhLWn22l+SUYCvqv2r27zJMApjF94uTYNBCGqd96D+TU6/SLl8B0od8xXnNQvKnIK3mLJSl2KiQ4RMuSMDeI5Tc4= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785410902; c=relaxed/simple; bh=rtzHz5HeY+/mghsrtFaSRI/E4hlzVI/y7/kwYrqWjC8=; h=Content-Type:Date:Message-Id:Subject:Cc:To:From:References: In-Reply-To:MIME-Version; b=n874ltR3JdJQkjtGQg2xALbukr8E3kYThRoukNio2akmJKJwVrcDfRueHP3J8//0QiMb8iNAzlBiXkmPqI1UsLUGcLhXNeF/gaGHZVyvQTdol8hfhQngX6VGQHF4XH+EiBIo9Jvz/PQPlECnhULGL8MfXwc8MkeeYyhHeIe1+Qo= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=CQGs1dxO; arc=fail smtp.client-ip=40.93.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="CQGs1dxO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k+EOhhdz+hAUQ0b8Ayre8iG3wwscZfUL4AkBDlLAcbDYy5Pgl6RTvxbJpUuGDQyMcc+k8a2YPyT+6ICT1xzL9lr0ry9gf5RCaG+X4K81RmY9dzgJOCLPqGW4w8obTD5xvL0i0DyiyevizaBAAGmowplx4boYLKgW19M+cvBbH/1tz3pxpjYeh4S9KKH6zmSmtP3+K03uULS92y+R68hynZkf3QVQkW20NPhwh8hjiOyLsTZTbev/aPbl4a33lkxmp+m52Xtm5aSdluvS0/PxntwyShIZRhq/Dy0Gr7SVXfC0opBBWlb8AsPuTZgnPjePx5lh/8CRNlnyROv9/ef80w== 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=6JkJvUdOcTvOd0LUVvHFRE6mI6zxIAgOpwuhXcBBN30=; b=dGFzQLKVPm6SuoemlKGOgIyAKnD4yUDaVcESNa7nGtEwfBy6PKsu/qqHfrFdOpciP4pml0Nw/Dz2KM8l3iGw2zYI6/KiGBvMPChAC5c9d0/yGuRvteEYJqWz0MoxEM9S+mLIvrpZDqMrdAVYZ3tjaf9muvXwyk05ogVeJIOcunff3GA8I6zcpnwChr3DwDwWsg2TjkKiUHfX6wPVERB9f/s/L603MM7Cf9VCWHg6Sip7pjZGmAMX5VshJDGWOSKj2eJZooPUWkb/J6JjmQEns7fxcTU68dmomRZAsWJoTGKdkelnUdF6Avf6j7EO20GF94kA/dUFOzksntvoUYiPVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6JkJvUdOcTvOd0LUVvHFRE6mI6zxIAgOpwuhXcBBN30=; b=CQGs1dxO3EXectNQP+PGWEx7f4slqzCK+yfD54/H2bxH1MUQh1v+7elHwbo2tAp5owPEOmBczf6tKs1VZY8G2yNn4FC3Jvb9L6aDqsaL/Cg7b+6kN7gV1speSdujS8lxfrSsjFE/dNbPjqscSy+vi3IrGNLLtCIbDNJVHnonKqqcZQ6htKDg1V06oY4MeNNfgt314PpHHnVMa/jlsj9L48vwWe+iDs6naNzClL9G56mV6V40GxiMANxSaEdolKsyWwOP9WHGiaiWZukYPw6IzDUYKtwkAXZRiou4kWEf5BUsubs2yfC8v7z3v/YszNpfhdh8/5IQ2uwJclZBVaw24g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from IA0PR12MB8374.namprd12.prod.outlook.com (2603:10b6:208:40e::7) by DM4PR12MB5842.namprd12.prod.outlook.com (2603:10b6:8:65::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.14; Thu, 30 Jul 2026 11:28:16 +0000 Received: from IA0PR12MB8374.namprd12.prod.outlook.com ([fe80::d85f:4c87:ae84:3f16]) by IA0PR12MB8374.namprd12.prod.outlook.com ([fe80::d85f:4c87:ae84:3f16%5]) with mapi id 15.21.0270.012; Thu, 30 Jul 2026 11:28:16 +0000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Thu, 30 Jul 2026 07:28:15 -0400 Message-Id: Subject: Re: [RFC PATCH v2 1/2] mm: allow smaller large folios to use lru_cache Cc: , , , , , , , , , , , , , To: "David Hildenbrand (Arm)" , "Barry Song (Xiaomi)" From: "Zi Yan" X-Mailer: aerc 0.21.0 References: <229c3079-8fde-41b4-9d6c-f0e34f780555@kernel.org> <20260729222651.31321-1-baohua@kernel.org> <6a3bfdb9-7839-4f39-ba5c-5a0c55055aee@kernel.org> In-Reply-To: <6a3bfdb9-7839-4f39-ba5c-5a0c55055aee@kernel.org> X-ClientProxiedBy: MN2PR08CA0016.namprd08.prod.outlook.com (2603:10b6:208:239::21) To IA0PR12MB8374.namprd12.prod.outlook.com (2603:10b6:208:40e::7) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: IA0PR12MB8374:EE_|DM4PR12MB5842:EE_ X-MS-Office365-Filtering-Correlation-Id: 4113b259-c018-4c0e-e28c-08deee2da63d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|23010399003|376014|7416014|1800799024|56012099006|4143699003|11063799006|10067099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: w8Fs1kNzfQwvsyVGEnbxMov7Fb/l4NnSkrJgIvXgTrmLhGMgVny10FX3k0dazXMB9DCULWsH3jka6wdp642i2FI3QlfYoapT20lYepNyDJKDtVLIkPuZlnfQMre2YCslOZtQdpASjJW+6fusPWViQ/Ohyq2gJQyr7WAhrdgpRqE8uEhDPSlUVHLpwHOX/Ue8Gx29cT0TB/6s+p9Iz0DKw0GdvPP8fnK3aTRDY2wwH07HmP6LoChNdF738LtJdEUa8Hpq9BHEu0kBpl19kIArRbf3dR7kLEC3G2fu3anhobEqUlw6WgEvD1jI6N6uJViyHhfmcQCRAcEGmkGO/+fmnXiS4aCSTwnVSxGhG9t+jF7jw9JekLKeqhO01XZrwyhxI9d6OTcmTp/jRtB0UDlrae/8Nf+JKQq9rX3nSak9S1iITMMPRWCIchzUGnU2lnofaPlOFrGmDzQPdN4beKCJgtG6yjhjcV3jdTkrlzuWuHkmO8oDzud9PZJm0F09IlVTCGHUpXEAUm8Hf7TwTqxaV6SL9EJUWrITAKvq+7X2bNdaS3x3cgXpDh1CK+UzPtR1kLwLedOiKQZEepuaujw3/sybmGfCZxFIxv62s8g3I9npsnRXow01zzz9InbAzzY0JJgSByL+dkX2BjqJTYNQ1ve8aEO6rdokLss914j5T4M= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:IA0PR12MB8374.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(23010399003)(376014)(7416014)(1800799024)(56012099006)(4143699003)(11063799006)(10067099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZFFZZVdNMlc2ZldvbUM2VXU2R2RvTlBXN0N4bGMxZzNLdHZvZEFoWjE0WkVL?= =?utf-8?B?MTJGYWQvQnF1WU1QNkdnd0xKbHJvcklDd2hLd3Q5S213bkZvckFnbGt1bUpS?= =?utf-8?B?TXJNbXM3eVhQKzE5MGdmSkZ4ZDhpUDI1TDYrdlhOQkY3RkhpK1Y2MXU5b1E3?= =?utf-8?B?VG1CdDlOaGZPWGlnVWQ3RUJGNnJ6UEZJVFRYcGZwMWR0YkYwMUFSZ0N3TFcv?= =?utf-8?B?RnNwNkloTmZ4K21mWm4ydkpiYkZxcFMwS3RBUGZ6Wi8rTG9aSytubExLaUox?= =?utf-8?B?OGlkbUZEeGdoMEtkbWN0NkNOWWRPQWJBd1NrSG52NzVwNTJXeGQ2UzU2ek8v?= =?utf-8?B?NHNybWhhMjEwSlQ1MzcySGY3MTVlY2xLVDF6MmdXR3hvUFNBeENLblZUcFdM?= =?utf-8?B?OXpUbGRwWE0vbUU0RVpRdnBQQmNGaGtxVjlNYlZLdWhId1J2aGZtS1QzaElP?= =?utf-8?B?OTdtaDYrbldSaCtZbEFkU2pVWVUvMExLMHdiQW9XQjZib1JDM0lqQmxEVE5K?= =?utf-8?B?c3BSb2hKNlk0QnpNTllFa2VSS21mR1g0cjJCTEhFT2hOWjNJTys1TkpPOGpC?= =?utf-8?B?T2c5V0tINldGY0dQRW5EZDRRb0dmUnY1ckhHcWJCSU1zdEFwMGw2ZGtYRGh5?= =?utf-8?B?UHRkbk0reE14MUtJaWVSVlEzNXN5aFJiUmxiMHJHZGVCTFFnaEQ3WHB4eHRC?= =?utf-8?B?QTJ4KzNUT2x6THJYZWFmS3hTbjAyRWNlYVdwdDNPWkNHTzhhZXlSRWc4dDE2?= =?utf-8?B?YWhESXppdEN0bmp6VlJVREo0TERWVk1UTWkzU25jckEvbXptVUJFTGpiWDJM?= =?utf-8?B?cEoyUEdINDg3NE54aURUUXZka1JPT21HREIyQkFmR3B3M1FyZVVMRW5uZGt5?= =?utf-8?B?MkxSb0M5R1dqZkVJdWNnNGhmV0FtY2ZWWEMweGd0ZU5rVDlHc1lUemVMYm15?= =?utf-8?B?OFRkUDNmMGFseHZDRTR2L0NySCtxRzBnb1gxeXlLNTI2REV6Z0srcVJybzM2?= =?utf-8?B?YlhMTmFsZ2lRQ3Rodnk5SXBrZ0k5K3JtbXhZTkpXb0E2UFp4TVFKanU5aXBj?= =?utf-8?B?bG9BM292Y1cvRkpYdk00V2w2T1BoV3NDN1BVT1JXVDRIeUk2T09xc3c5SnV5?= =?utf-8?B?bHhuMDI3Q1duUkdYRVNHS2RMQXU4OVhUWlExbS9ZTENyNTdmeVFYajNGRktm?= =?utf-8?B?RjJ0cld4SWxReWFLSGRmYTV3dm9Na290Wm40Qy85cC9XSkdhNlJXcTdVRjhS?= =?utf-8?B?T2JlamlteTdIUUpKeDNtNGVyL1B2VkRJT1B6Ulg0SGlSNnNNeWhZbmswRUM0?= =?utf-8?B?UWRiejkvRGEwOE1HcExXVG5TM1htY256T3F1UjhWODVQdjVqQTZsZS8vNlJI?= =?utf-8?B?empxNjlidVpJYzR1K1BoeE81ak5jR0R0RERvWEF5ejIwSGRHQ05ET2hnM1ZH?= =?utf-8?B?Y3pLQmdpM3BiQXp5TGRZUW1SWXFRYWdwVUpDYTRMVFFLODhyTndEUlJ1MEtw?= =?utf-8?B?TmhRVHRrNTBqOUMzZjgyb0JkTndzempCcGp5OXlnbStydDRVTkgvS3NDMDd6?= =?utf-8?B?N3ZkOFhuRCsvcXdVTW5BaU1RQU9qc1J2RmJvY0QvRUVic2tLU2p4eGxtNGlX?= =?utf-8?B?L0ZEaFIwdmRxUUV0bVRpTHc0RVpvRGVjVjl3TzYwZWVrOTVLUWV0K012WHFa?= =?utf-8?B?V1lhRm5ENWhvVzFwOUFoRkpMVFViNkVDQXcwaWhWaHd0OHJ1MUhkc1MrRXdR?= =?utf-8?B?QnhpZmJVUjFyOWdrWC9jRWxGbDh1OXNyMktoa242T3liUVBxVFBwQ2pIMjlp?= =?utf-8?B?WDRKQVNHUGlJUEJWWFRNNnJwQUozaDg0cmN3RDdmQitKQ0NONk5udUswcFJM?= =?utf-8?B?dUlpZXA2SXZyckI4ZVNxN3FWcFMvQllDOUt2bWttWGphVU9WcVhjU3A5Yzk3?= =?utf-8?B?WEUyU0pJbC9PdEFTSjNyR0tUY3VoVmJNamtHZFB2bzg2VEpNNEQ4bG1yTGFx?= =?utf-8?B?bHVpL3F0T1FRZnNhejZrM2g4WmI2c20vczFKQjVQVUI5M0RZOEhRLzRsSUdw?= =?utf-8?B?emlnL0NMTm5XWFRYYWhHWm5JU1pDa29zc3pxSitTLzM1bHU3V1EwdFNGT1dw?= =?utf-8?B?QmIrZzBUMzZHUkJ5VHc2dUE2cDJHZStyaTFJZHczb1RMRFFjYks4cXUwQ09U?= =?utf-8?B?SkJYQXdZNnB1UUY2ZTRUYkpLQVBnU21oaGFFTGFxZVRMV1lEQUgxcHB6di91?= =?utf-8?B?QTB0RHpweTB6T0Raa1dzLzRoMFY2VE53MUREVnY5dzFXRjFQYllEQWlZeks5?= =?utf-8?Q?GJPhlOy+FlweDoOJJO?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4113b259-c018-4c0e-e28c-08deee2da63d X-MS-Exchange-CrossTenant-AuthSource: IA0PR12MB8374.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jul 2026 11:28:16.4593 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: dura9X+tlS+BPHfgA+RQ4NKG1IXZ1V91vdcG/R2jd2Ijwm6uSacCceaZYTjFmicn X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB5842 On Thu Jul 30, 2026 at 5:28 AM EDT, David Hildenbrand (Arm) wrote: > On 7/30/26 00:26, Barry Song (Xiaomi) wrote: >> On Wed, Jul 29, 2026 at 8:13=E2=80=AFPM David Hildenbrand (Arm) wrote: >> [...] >>>> diff --git a/include/linux/swap.h b/include/linux/swap.h >>>> index 8d19be675baf..9c5f7a11c7b0 100644 >>>> --- a/include/linux/swap.h >>>> +++ b/include/linux/swap.h >>>> @@ -316,9 +316,9 @@ static inline bool folio_may_be_lru_cached(struct = folio *folio) >>>> /* >>>> * Holding PMD-sized folios in per-CPU LRU cache unbalances acco= unting. >>>> * Holding small numbers of low-order mTHP folios in per-CPU LRU= cache >>>> - * will be sensible, but nobody has implemented and tested that = yet. >>>> + * will be sensible. >>>> */ >>>> - return !folio_test_large(folio); >>>> + return folio_order(folio) < PAGE_ALLOC_COSTLY_ORDER; >>>> } >>>> >>>> extern atomic_t lru_disable_count; >>> >>> Sashiko rightfully raises that split_folio() can now fail more easily. >>> >>> So we might want to proactively drain (earlier?) on some more of the sp= lit paths. >>=20 >> Yes, this is a pain. I haven't tested it, but perhaps a >> conceptual model could be something like this? >>=20 >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >> index 04e8a6b55343..fcd449dec96b 100644 >> --- a/mm/huge_memory.c >> +++ b/mm/huge_memory.c >> @@ -4069,6 +4069,8 @@ static int __folio_split(struct folio *folio, unsi= gned int new_order, >> struct folio *new_folio, *next; >> int nr_shmem_dropped =3D 0; >> enum ttu_flags ttu_flags =3D 0; >> + bool maybe_in_lru_cache; >> + int expected_ref_count; >> int ret; >> pgoff_t end =3D 0; >> =20 >> @@ -4154,7 +4156,15 @@ static int __folio_split(struct folio *folio, uns= igned int new_order, >> * Racy check if we can split the page, before unmap_folio() will >> * split PMDs >> */ >> - if (folio_expected_ref_count(folio) !=3D folio_ref_count(folio) - 1) { >> + maybe_in_lru_cache =3D folio_may_be_lru_cached(folio) && !folio_test_l= ru(folio); >> + expected_ref_count =3D folio_expected_ref_count(folio); >> + if (expected_ref_count + maybe_in_lru_cache < folio_ref_count(folio) -= 1) { >> + ret =3D -EAGAIN; >> + goto out_unlock; >> + } >> + if (maybe_in_lru_cache) >> + lru_add_drain_all(); > > The drain-all is nasty. In collect_longterm_unpinnable_folios() we escal= ate the > drainining. > > I think we recently stumbled into a similar problem in guest_memfd. > > Ah, yes, there it is: > > https://lore.kernel.org/r/20260728-gmem-inplace-conversion-v9-14-35f9aec2= aed2@google.com Page migration has this issue for a long time. I wonder if we can re-design per-CPU LRU cache so that we can remove a folio from per-CPU LRU cache without drainining any to LRU lists. Something like: 1. have a folio on per-CPU LRU cache to store a pointer to its fb_batch's folio array position; 2. zero that position when we want to drain that specific folio. But I have not looked into all the details to make sure that is feasible yet. --=20 Best Regards, Yan, Zi