From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (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 D34F42EDD6C for ; Tue, 18 Nov 2025 10:31:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=192.198.163.14 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763461912; cv=fail; b=nq2hEz5DBmIEk7bsTBnwPAxtGYYTR7wpesDe3dZ1roeDIf0CZfrucMVzLdQJyxwuznmhAH/FDYIH3wT6NX2XdOZouBJupOXYxLkAmSZbQA+SsZuQsUNlzOnmacr8EXMP9wmgxX++Vn8g0ev3bHszq8u41YSjCCDcCEzFdsS27jc= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763461912; c=relaxed/simple; bh=RJ1gPKxa3GZAwJHzsy69pTdPRDrBHJti6KLgvKPJPro=; h=Message-ID:Date:Subject:From:To:CC:References:In-Reply-To: Content-Type:MIME-Version; b=IessQfo1rVtUI8J8VIIxzoudr6w5ZgszfY/7StTR5Y8tbh8lLYeUUahDxvvjYOW0Sx+evf6wwjFu2FYuQ43cuBsKhAwzFgPmyDWG78wNkNnUj16i3+WJmsckNlprDchoBS3+1A7BfQgWFKbJdWebz7GqcOhC5nn+7VlbctKO5pY= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=gDg37Sn2; arc=fail smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="gDg37Sn2" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1763461911; x=1794997911; h=message-id:date:subject:from:to:cc:references: in-reply-to:content-transfer-encoding:mime-version; bh=RJ1gPKxa3GZAwJHzsy69pTdPRDrBHJti6KLgvKPJPro=; b=gDg37Sn2aoNcI2vKNCW7D4meggB9wNt1kQY/Mp50zlhut1/dSRIycrQe Uhf+vhDVbmh7IddG6K8KIbxF7yLV8yqHh9rbSO/EmVQu/n7khQqtEDBZV N67zqxROO2ow1bapINhdJBff5gdbDiyBqgaNjzos27esdqct7yMqXwB9E 8NRDvY6HOjyd2+/O5VQzd33bxqBo0lZRS4ouvgdo46bVLPdwKA4OSFzuv T5uPHcT8EL2DxRkmLu5TO9tTd3jUALiymPcTMDAXjzzv5pJf88EEqIkXx Pu7EjeRnZFms9D4qRAlOHPiQo7G1NcK19K/xMkr4us7x6d7m+HHQ1XlGF g==; X-CSE-ConnectionGUID: P/6CUR8dTImljgRqVbnVJg== X-CSE-MsgGUID: 7r7qG5uIQSKFDwpshaPZvg== X-IronPort-AV: E=McAfee;i="6800,10657,11616"; a="65521579" X-IronPort-AV: E=Sophos;i="6.19,314,1754982000"; d="scan'208";a="65521579" Received: from fmviesa006.fm.intel.com ([10.60.135.146]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Nov 2025 02:31:50 -0800 X-CSE-ConnectionGUID: meZwHvkMTiuYyFHxeI+ZDQ== X-CSE-MsgGUID: dW7SHBTsQCyiEXNlDaJFEA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,314,1754982000"; d="scan'208";a="190519369" Received: from fmsmsx902.amr.corp.intel.com ([10.18.126.91]) by fmviesa006.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Nov 2025 02:31:50 -0800 Received: from FMSMSX903.amr.corp.intel.com (10.18.126.92) by fmsmsx902.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.27; Tue, 18 Nov 2025 02:31:49 -0800 Received: from fmsedg902.ED.cps.intel.com (10.1.192.144) by FMSMSX903.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.27 via Frontend Transport; Tue, 18 Nov 2025 02:31:49 -0800 Received: from DM1PR04CU001.outbound.protection.outlook.com (52.101.61.29) by edgegateway.intel.com (192.55.55.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.27; Tue, 18 Nov 2025 02:31:49 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nv3UogrSyOl61y242C4CAM+kYrTy30qjGf2+Tg7DKjWz8h6kaNGv9rOgmpsPC750OvgaNzjXZMAhk4T9BZdux0q6VPTnI//zhuRi8P5cq5sajRgrYFXw0n+S8hXyQCV8XMRzwMl8KZvuNxdZ0hg7oP4BVKix/YWkhg0a80hvMe1fATOa6ZCjb6Tse7Le2QzgkNzerHXRpIfkAWPsvmybSd4Ioc02UZwT7DuMtILCkaBn08R5sgY1XRwAKQFY/2/oqkyZfBFk+VFmZ0r2GHdIXUBBEL87PAIR6z6AmoVehwU9YJC2oNn6S4RMjk+XdQd0hZPB/DaCJTReJcEZLuQaKg== 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=6OQvJcSqF99e40H1YFbShWFdmCLeGVrz4DiJtCMdCYw=; b=Gog4G7sR2HtgPORKlDOCTrH0+tGHL57wWzi65EiM1lKNqA61N5oIqBtVix7INgwJLS/1IPQxy/2ELz0/DeDiiDMJm92/jtjv7djAO4eDue+gRnNwtXe0VjAsS5hFjpMG2UOa8ad46Qjvzi3vD+kDqra8mZeEXzFTiK4D6+EemmYc4Qz7hmhftFyw33xUWLBOMRY2cPgstkxC3KJpWiQS0UxsYaeIfEPIVS7JTiJQMOfPSFbkI2T2P3DG4Ug38vDB6JenguYS124OmplR3bZbPJKayEDbjznLg2O1/jKUjaABqCLOypREnptiw35qf4ASaP5uSkQOEJ9/tbC4tYpU3Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; Received: from MW4PR11MB8289.namprd11.prod.outlook.com (2603:10b6:303:1e8::9) by SA3PR11MB8074.namprd11.prod.outlook.com (2603:10b6:806:302::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Tue, 18 Nov 2025 10:31:42 +0000 Received: from MW4PR11MB8289.namprd11.prod.outlook.com ([fe80::d626:a4f8:c029:5022]) by MW4PR11MB8289.namprd11.prod.outlook.com ([fe80::d626:a4f8:c029:5022%6]) with mapi id 15.20.9320.019; Tue, 18 Nov 2025 10:31:42 +0000 Message-ID: <8473ed80-8a1b-45f6-9950-29e6d960f2b3@intel.com> Date: Tue, 18 Nov 2025 18:31:35 +0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] mm/memory hotplug/unplug: Optimize zone->contiguous update when move pfn range From: "Li, Tianyou" To: Mike Rapoport CC: David Hildenbrand , Oscar Salvador , , Yong Hu , Nanhai Zou , Yuan Liu , Tim Chen , Qiuxu Zhuo , Yu C Chen , Pan Deng , Chen Zhang , References: <20251117033052.371890-1-tianyou.li@intel.com> Content-Language: en-US In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: TPYP295CA0001.TWNP295.PROD.OUTLOOK.COM (2603:1096:7d0:9::18) To MW4PR11MB8289.namprd11.prod.outlook.com (2603:10b6:303:1e8::9) 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: MW4PR11MB8289:EE_|SA3PR11MB8074:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a98b217-ede6-4b86-0e5c-08de268daa28 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?UUo5SkJYZXBKdUl5Z0liWS92RjhJckdHaURldlVSOWpDMlUvd0l6QXQ5YWtH?= =?utf-8?B?Q2FncWFMeld2VnhEU01UWVpTVGxWVExLdXNzYTVHbzU2ODBtdlBWVzJMSExm?= =?utf-8?B?TnhwVC9VL29EOXVwSW9WamtWN0JpTlpFKzkrVHc0dTVZUXBCWlJLY1Arb1Fz?= =?utf-8?B?L0RlVGdBVG5TUVMzRkZTc3ZzYU9TSC94ZTNRbEJOelNWMlFla1lQV0FhQ3NO?= =?utf-8?B?MUN0OFVCYlpUQ3NzSS9zMFErN1hZOWlrS1hUL0lYU0lSeW4xZVZKUFhnaW1R?= =?utf-8?B?aUdSNDRwSFM5cFpPNDJmcm9yMDZEL01NQ1FzQWErKzQ3encyMysxaDF6bjNM?= =?utf-8?B?QTd2ZFM3T0k2d3NFSXpVcEdFSVp1ZFd1RmFCWTVEUnZtbTh0S2orU2tzMDQw?= =?utf-8?B?L1QxRlg3MjB3NE8vc21XaXlqR0JuY0pFS1pUQUFpSDEwdGVDaE53bWdFcTh4?= =?utf-8?B?ZzdQZkZxdU5DM09adlc1WnBUbGU2Vkx0VDRwUzNMdUl5bTI2MWUyK0xRbGd1?= =?utf-8?B?emRRMGhSZi9GSERzQStVVHJaUGRRL2xxWDFTbDdNWnNXZ0dVa01kK2FWdG00?= =?utf-8?B?ZlJsaXluWXBPRUx6bm1ZNWE3bVR4YVZpTlVTSHhodVVXWlhnZ09tdkk4UVFj?= =?utf-8?B?RytZTTJ1NFV3RVVzbGZSd2ZNUE5PTTFRQ1UxT0E1MHg0UmZ3SEMrbno3WlQw?= =?utf-8?B?ejBvbm9tdW9yeFlNZVExcjRPK0ZWT3lSeiszcllyN1grTUJtMEoxNHRvQ21C?= =?utf-8?B?TlJlZGdWWjgzTWFhYldBQUNvaXM3VlV1YmhuVDJUWHNLR3ErVWh0MHdKK0sv?= =?utf-8?B?NWxNdyswY2R6bVJ5cUlycjd2NHFMMnRoalJ1eEVEK25jOHBZcG9JSTFVbHpF?= =?utf-8?B?bVpTemh1YXBrcjVVQ3lZbWFRRFNNMUxTKzNiUXZMRVJEeVkvZW5JcnFQNkRX?= =?utf-8?B?bWVrM3lBbGg0eEtuQW1UWmpqaTErT2Y2MEpVQ2cwVWtrUS96MzUrdGhNUW9n?= =?utf-8?B?bVFKdU90NkU4Z0Nhb2ZaRXBmR3JHYkdlTTRCR01TYWlVTXlFdVdLeThwTWZq?= =?utf-8?B?TXpPN2ZENUNiYTdITUgyN3BwZmttdkE2T1dYMnlXMnpjb0ZHTy81c0IzNzlG?= =?utf-8?B?eEFiUzVxTjB6VUdjYTIxTndWdjhkaS9QcHZNQndCcXBJN1pUWklpRFpRZjJz?= =?utf-8?B?Ukp2b2dMTnlWYklGb1VHRTNjNFpUQk9QdGQwbkFQa2hrMEtXUkF2c1V6RTNG?= =?utf-8?B?NHlBd21Qa2RMb3U3NUdMWjRTLy84dXFZejh0YmlKVGNnaW1zdXZWSXhoMjQ5?= =?utf-8?B?Wm96V242KzBLMENTSlF1RmZidlpjc3Q3Um8vUzVNQWVvRWhqZEdKSExtNVF1?= =?utf-8?B?U3JiVjg2S3Fxb2x4VUZvdlU4UTB0bmo1V21XTHJybDQrcFRyanByNGNjcnlH?= =?utf-8?B?eUV4WkJobGRNNHJRcmlRZlZ2QTZsL0JiVGhkUExPRG9ZZ3hkQ2VHNTNaNVpn?= =?utf-8?B?R0hldlhLR0JPdzd2SFkzaE9LUDJPWEVmMENPUjA2NEE0dWg5aFNTSUpZUFkx?= =?utf-8?B?M1Z2am8zdURxWXJOcC9sNmw5WWU2K1h2d1lXM1gvemhrTm5OZmwrUzIrUSs2?= =?utf-8?B?aGI3aHBBaFBDTGg4ejhYZ1NheE4yVGlTaHE5TXc3ck53dmlnbHJhL0F5RGFS?= =?utf-8?B?YkQzcFRhbk52K09TcWlFN0swV0JpRnhDbWhOVUhxbGk4VHNIZ1JybTFkdVd1?= =?utf-8?B?Rlp3Z2pTVTM1ME5EK3RZNmsrWExyejd6a1VMOGJZMDZIVkhEa2c1QURlU3hl?= =?utf-8?B?QTkraUh6S2gwY044Ui9yc3RVUFNQQjR5aHlNamEwRDhjRVRwT09DOC9GNHNk?= =?utf-8?B?aDI1eUJnL0VXT0RpbmRpVGJ6U0ZtWFIzV01ETFMxWERDZ201OHp0S2d1RzN4?= =?utf-8?Q?4rdenObx5VH887Hpppbl6Z8B2AZu61zs?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW4PR11MB8289.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZjNMeWhNUTNxc0JmQ2N2ci9uQ1pkVTFvcERDUTFlNlBtYjR3em93Vno4eWFx?= =?utf-8?B?VkxoUjczYVNIa1ErZ1hVRTdUV1crOEUzcUZOVi91UWVqL1VKQVp5TkhFd1l4?= =?utf-8?B?YmJZVXpqZVlhRm9CZ0RYZnliNXAwYXZxS2I3dCt5dUtOallGWldFVm9YR052?= =?utf-8?B?eUlEenk4RUJQdEV2TWVhTkRiQXVUUXdCQmovR1NZR0NYbERXRFJqQS83M2NQ?= =?utf-8?B?SVdWYnNMU3hqZU5VQklnL2pDcWRldUwzd1VmemEzV1J4dkZsMUdWRmkyYzhu?= =?utf-8?B?SXlVOGIrMXpkRFlJc3dXcGJPMGVIZENRYlA4SFJWM2FZNk9nUFNDU25Ua3Fh?= =?utf-8?B?a3piZWVZTXhkamxvaXltbUVHakF6QUcxRGdqY2pUVk81Znp5cy94UVU4c2l4?= =?utf-8?B?VU51Zy91Y0hHYzMwZ09uQnVvUUV1NWhjZ0l5bU5JS0NzQU01bnlJbU00K3Bp?= =?utf-8?B?T1RnbUdzbW5xaC8yTHJaYXc4ekdzSkNFbnFiKzB6dVBLaGRuQVVTZVJJdlFY?= =?utf-8?B?WVBaOEQwVXl1Q25qOGljZWJ1MjdmSGo4VFMzTThaUHJnai9iYks1Y2hjd3Jn?= =?utf-8?B?WDdJZ0g1WDVaMi9MOEFhWWFyRU41VzM2RWJibHl1M3cvVndGQ3BvM3lNNkJ2?= =?utf-8?B?cG9xZTRISDF2WU1iN3VzRlBCQUYrWXJmTiswMGdIaUVoV3pwc21TSzFDcFM5?= =?utf-8?B?d2tCcUtOS2JDcFcxRzNrdmlaUVpwNGJPY3R2aTRyejZBMTQ2dFlmMXJnYlE3?= =?utf-8?B?bTRpNkYvVysvaWJXVnVpNkQvYTBaL21URmlnUU5DTHFoL3BtY0xLcm84cU1h?= =?utf-8?B?dDNRdHJwb2V1SmY3dk11bzhid1lTMGRFQWlmK2VlK2tJNm9EbUVFN3IvV0pN?= =?utf-8?B?clRJNVVoaEs5Nkg3djA4aGFCWnpwN3pTeWZrUVhpUjg0ODgvb3lCWC9UYVAz?= =?utf-8?B?U2xKR3JzVGdJK090RVJ6WHRXbEduL2R4Q1hST2dLaDBrcGozM0VhMGVCMDBN?= =?utf-8?B?TlNoZXdQSkRTOS9OdWVYa2dsMFZveVlJZXE5RlJFWTd2aXM4YkdIcGJIdHRr?= =?utf-8?B?c0ZDenFFUlVldk1nN2FJM3lHNkRSNWhUNm9zZ0RDaWl1dit3MGg5T0p4cFdW?= =?utf-8?B?TktsOHVTaFQzWjRSS1d6Q3hoQ29TVS8xdXlhZmVWb0FuYVM5R05DdGZPY1ZC?= =?utf-8?B?T05KaDJXYXh0SUdWVzV3aWdhb2JTMDkyaXRSVHVTWFZRQStPVWlDb2krL3FY?= =?utf-8?B?Tm5xTDlTRjYvQzBPcVNDSDZUa3dGdjkvVXpMeGZvbEZDaVFKU0VycDhCa3l5?= =?utf-8?B?SUpOcG95bDVSdVdyVnhYRVlKaDU3T25EY2p5Zi9UVGZIWSs3V3Z4WkpzdHR0?= =?utf-8?B?eUhxY1V5ZjM4MTdWQlRtUzVjKzZpU0piV3NqZWM1aWFjMVVvejhPVVBjOTEr?= =?utf-8?B?bGYxMkR0VGdEalV5Ky9iQjVyNDRvaVcxRzFJbkhJUjNVZTZoa2FaOGE5ckI1?= =?utf-8?B?K3VXaW81LzBqQ2d5ZjJVVnpEV3JsT3BzSHlKQ25nTkhlK1dKc2llNDhUZGpJ?= =?utf-8?B?OGVUb1VqVmJKbHJXWDJ0cHdJY25OVEE4SmVjSHlEM1c2TzVTMlhjMjZ1akUy?= =?utf-8?B?ZlFKZmdoV0dzUzhZNVBPYXcrdUpCeG42R1ppWWtGSEZldEx2WmhqdlprenBI?= =?utf-8?B?MlVUR0xWZjVKMWxsOU56ckpnaEs2MWxDekVQTitxVGpkaG4yRGpyVmVVekIz?= =?utf-8?B?RE5WUEhHOVhabDVsQnJrUGJMaGlTQVNUM28yRG95VjJiUkVCK2xNMGVsaVVz?= =?utf-8?B?MEY0Vy82ajVhdkRuK1hUNWc0eWlHZ3libjZzWnpHaHVrOGlSbVFPM1lTWktD?= =?utf-8?B?Um9jdC9FM3FMNXU3V1dBNmdBTDZNWjA2cE9FdEsxcFN3VmszdnlHWWJud1Y2?= =?utf-8?B?dFZ1VUF1d3Brem1NcGY5MkRiMmlVdGFjK0tnQXkzNkJKUXgzVENIT1RseUo5?= =?utf-8?B?NXFJL2V5M040a1JUbmJlTHJiMDRYaFdBZm5wQ1NVNEtKRlRRSnFPblpKcGJW?= =?utf-8?B?VG1CRlZrZjllZnpzbythR2xlNWFDV2YvaDZob0ZjamRCZU0vamI4M2NPbVE3?= =?utf-8?Q?8Cv2fULhplNo/r6AW9JMiwM89?= X-MS-Exchange-CrossTenant-Network-Message-Id: 5a98b217-ede6-4b86-0e5c-08de268daa28 X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB8289.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2025 10:31:42.3000 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YJ55EHJSH3hIVGleFS4bcyeLol3pCfOzwmkzTaI//P+je+pD5JRaxAgAloB7EmmzsofxNSKuG8ntMjKxAD/V1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA3PR11MB8074 X-OriginatorOrg: intel.com On 11/18/2025 5:35 PM, Li, Tianyou wrote: > Thanks for your comments Mike. Appreciated. > > > On 11/18/2025 1:13 PM, Mike Rapoport wrote: >> On Mon, Nov 17, 2025 at 11:30:52AM +0800, Tianyou Li wrote: >>> When invoke move_pfn_range_to_zone, it will update the >>> zone->contiguous by >>> checking the new zone's pfn range from the beginning to the end, >>> regardless >>> the previous state of the old zone. When the zone's pfn range is >>> large, the >>> cost of traversing the pfn range to update the zone->contiguous >>> could be >>> significant. >>> >>> Add fast paths to quickly detect cases where zone is definitely not >>> contiguous without scanning the new zone. The cases are: when the >>> new range >>> did not overlap with previous range, the contiguous should be false; >>> if the >>> new range adjacent with the previous range, just need to check the new >>> range; if the new added pages could not fill the hole of previous >>> zone, the >>> contiguous should be false. >>> >>> The following test cases of memory hotplug for a VM [1], tested in the >>> environment [2], show that this optimization can significantly >>> reduce the >>> memory hotplug time [3]. >>> >>> +----------------+------+---------------+--------------+----------------+ >>> >>> |                | Size | Time (before) | Time (after) | Time >>> Reduction | >>> | +------+---------------+--------------+----------------+ >>> | Memory Hotplug | 256G |      10s      |      3s      | 70%      | >>> | +------+---------------+--------------+----------------+ >>> |                | 512G |      33s      |      8s      | 76%      | >>> +----------------+------+---------------+--------------+----------------+ >>> >>> >>> [1] Qemu commands to hotplug 512G memory for a VM: >>>      object_add memory-backend-ram,id=hotmem0,size=512G,share=on >>>      device_add virtio-mem-pci,id=vmem1,memdev=hotmem0,bus=port1 >>>      qom-set vmem1 requested-size 512G >>> >>> [2] Hardware     : Intel Icelake server >>>      Guest Kernel : v6.18-rc2 >>>      Qemu         : v9.0.0 >>> >>>      Launch VM    : >>>      qemu-system-x86_64 -accel kvm -cpu host \ >>>      -drive file=./Centos10_cloud.qcow2,format=qcow2,if=virtio \ >>>      -drive file=./seed.img,format=raw,if=virtio \ >>>      -smp 3,cores=3,threads=1,sockets=1,maxcpus=3 \ >>>      -m 2G,slots=10,maxmem=2052472M \ >>>      -device >>> pcie-root-port,id=port1,bus=pcie.0,slot=1,multifunction=on \ >>>      -device pcie-root-port,id=port2,bus=pcie.0,slot=2 \ >>>      -nographic -machine q35 \ >>>      -nic user,hostfwd=tcp::3000-:22 >>> >>>      Guest kernel auto-onlines newly added memory blocks: >>>      echo online > /sys/devices/system/memory/auto_online_blocks >>> >>> [3] The time from typing the QEMU commands in [1] to when the output of >>>      'grep MemTotal /proc/meminfo' on Guest reflects that all >>> hotplugged >>>      memory is recognized. >>> >>> Reported-by: Nanhai Zou >>> Reported-by: Chen Zhang >>> Tested-by: Yuan Liu >>> Reviewed-by: Tim Chen >>> Reviewed-by: Qiuxu Zhuo >>> Reviewed-by: Yu C Chen >>> Reviewed-by: Pan Deng >>> Reviewed-by: Nanhai Zou >>> Signed-off-by: Tianyou Li >>> --- >>>   mm/internal.h       |  3 +++ >>>   mm/memory_hotplug.c | 48 >>> ++++++++++++++++++++++++++++++++++++++++++++- >>>   mm/mm_init.c        | 31 ++++++++++++++++++++++------- >>>   3 files changed, 74 insertions(+), 8 deletions(-) >>> >>> diff --git a/mm/internal.h b/mm/internal.h >>> index 1561fc2ff5b8..734caae6873c 100644 >>> --- a/mm/internal.h >>> +++ b/mm/internal.h >>> @@ -734,6 +734,9 @@ void set_zone_contiguous(struct zone *zone); >>>   bool pfn_range_intersects_zones(int nid, unsigned long start_pfn, >>>                  unsigned long nr_pages); >>>   +bool check_zone_contiguous(struct zone *zone, unsigned long >>> start_pfn, >>> +               unsigned long nr_pages); >>> + >>>   static inline void clear_zone_contiguous(struct zone *zone) >>>   { >>>       zone->contiguous = false; >>> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c >>> index 0be83039c3b5..96c003271b8e 100644 >>> --- a/mm/memory_hotplug.c >>> +++ b/mm/memory_hotplug.c >>> @@ -723,6 +723,47 @@ static void __meminit resize_pgdat_range(struct >>> pglist_data *pgdat, unsigned lon >>>     } >>>   +static void __meminit update_zone_contiguous(struct zone *zone, >>> +            bool old_contiguous, unsigned long old_start_pfn, >>> +            unsigned long old_nr_pages, unsigned long >>> old_absent_pages, >>> +            unsigned long new_start_pfn, unsigned long new_nr_pages) >>> +{ >>> +    unsigned long old_end_pfn = old_start_pfn + old_nr_pages; >>> +    unsigned long new_end_pfn = new_start_pfn + new_nr_pages; >>> +    unsigned long new_filled_pages = 0; >>> + >>> +    /* >>> +     * If the moved pfn range does not intersect with the old zone >>> span, >>> +     * the contiguous property is surely false. >>> +     */ >>> +    if (new_end_pfn < old_start_pfn || new_start_pfn > old_end_pfn) >>> +        return; >>> + >>> +    /* >>> +     * If the moved pfn range is adjacent to the old zone span, >>> +     * check the range to the left or to the right >>> +     */ >>> +    if (new_end_pfn == old_start_pfn || new_start_pfn == >>> old_end_pfn) { >>> +        zone->contiguous = old_contiguous && >>> +            check_zone_contiguous(zone, new_start_pfn, new_nr_pages); >>> +        return; >> The check for adjacency of the new range to the zone can be moved to the >> beginning of move_pfn_range_to_zone() and it will already optimize the >> common case when we hotplug memory to a contiguous zone. > > > Do you mean we can separate the update_zone_contiguous logic into two > parts, one for fast path at the beginning of the > move_pfn_range_to_zone, and the other for slow path after the > memmep_init_range? > Re-think your idea, it's doable consider the check_zone_contiguous is not necessary. We can have a function check_zone_contiguous_fast, which need to pass the zone, start_pfn and nr_pages, return a boolean value to indicate the fast path or not. The code changes minimized. Will send the patch v2 soon. > >>> +    } >>> + >>> +    /* >>> +     * If old zone's hole larger than the new filled pages, the >>> contiguous >>> +     * property is surely false. >>> +     */ >>> +    new_filled_pages = new_end_pfn - old_start_pfn; >>> +    if (new_start_pfn > old_start_pfn) >>> +        new_filled_pages -= new_start_pfn - old_start_pfn; >>> +    if (new_end_pfn > old_end_pfn) >>> +        new_filled_pages -= new_end_pfn - old_end_pfn; >>> +    if (new_filled_pages < old_absent_pages) >>> +        return; >> Let's just check that we don't add enough pages to cover the hole >> >>     if (nr_new_pages < old_absent_pages) >>         return; >> >> and if we do go to the slow path and walk the pageblocks. > > > I'd like to avoid of the slow path as much as possible. The check 'if > (nr_new_pages < old_absent_pages)' is more strict if overlap happens. > I am OK to simplify it if there is no overlap cases or to reduce the > maintaining efforts. > > > Thanks & Regards, > > Tianyou > > >>> + >>> +    set_zone_contiguous(zone); >>> +} >>> +