From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.13]) (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 EB8103559C6 for ; Wed, 19 Nov 2025 12:41:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=198.175.65.13 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763556088; cv=fail; b=RmRR5X4MOboxcK1xprYn/2Y7JY1hSMz2LrlgUuJhOyJmEHGyx62uraELm0D1CGQWZLsaG2cLeW6l8ABIldd8u/6pa2rcRnV+4wpvtICcm3lL2t4uzzp7aFn8MDAki42dv7ELGXHtqH0mFQuNPoBqH6GwKWG8tMteZXGZ1uQfwLE= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763556088; c=relaxed/simple; bh=jz3MqMJ7CPp9NhZAB3g4a4xnzpwD/0ahCyTLco9ja58=; h=Message-ID:Date:Subject:To:CC:References:From:In-Reply-To: Content-Type:MIME-Version; b=GPWIe5soNpYcY+iXlFcjb0lQ/gQ/XHEVhaBZ39ngFmFkC51UFu38sQBWaCmzzG4Rb5vJp6i9UCYxNW83lsDFMg/qHVkmD8uRAo12iZK03bQXOU6YOfMaPoUDf0IxSyr5zaZAsqgmfArpYDpVS72xMzvkx8z744YWbXh4nV7ETN0= 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=k9dtxjNm; arc=fail smtp.client-ip=198.175.65.13 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="k9dtxjNm" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1763556086; x=1795092086; h=message-id:date:subject:to:cc:references:from: in-reply-to:content-transfer-encoding:mime-version; bh=jz3MqMJ7CPp9NhZAB3g4a4xnzpwD/0ahCyTLco9ja58=; b=k9dtxjNmkvfM5hDGqVPTIG6HM0prw7s41ipCeQRgGlqHqqnUKUPDMOA2 4fvLETEBN64Tg99ffgiJmXeUpyzztQnwRuHo1shHocRB7TuGrWhhh62oF 1r9iLzlxVLU4OVvTyLnjJeD7o1O67X55X0SnQQ6Rf1M8czm+TnydWUi4I q/1JK/PzwdcZXYSp1sGgLLaaz4106bEXGPBGsetXlYd4uqvIyl6j7q42S IjBDUKQ/FqoiVqShgkU74Q4jtGLhwKY9sTbjsgOQc/0+TTrzyIneoMM6w j10Vd5tZPOia3gOFtAruFFgMCOSHuyn2p3UB1rtJk7aOXpUhxJ8OMSZ6/ w==; X-CSE-ConnectionGUID: 824GGmUXRdSiKLB2jzM/Ug== X-CSE-MsgGUID: m0R0bq1rT3WU97wrOrZqlQ== X-IronPort-AV: E=McAfee;i="6800,10657,11617"; a="76700398" X-IronPort-AV: E=Sophos;i="6.19,315,1754982000"; d="scan'208";a="76700398" Received: from orviesa002.jf.intel.com ([10.64.159.142]) by orvoesa105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2025 04:41:26 -0800 X-CSE-ConnectionGUID: IqMPxPQlSGi52xjDDkX4tw== X-CSE-MsgGUID: YS3N/Cp9TXqwgF5HFM09RA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,315,1754982000"; d="scan'208";a="221682046" Received: from fmsmsx902.amr.corp.intel.com ([10.18.126.91]) by orviesa002.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Nov 2025 04:41:24 -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; Wed, 19 Nov 2025 04:41:24 -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; Wed, 19 Nov 2025 04:41:24 -0800 Received: from SN4PR0501CU005.outbound.protection.outlook.com (40.93.194.45) 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; Wed, 19 Nov 2025 04:41:24 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ssu1E+SKrZZhazFfFtRV6j5K4EifC+dUUM7RwLKpjWwSusP5suSCEYd7XRw69graQ/fdpIjMyCbHo6DKNuLwH16/rSrI1YCIMbo6bvrlVmzbadX5eU6ZtNQErBjH3WAjJvsCr2H3lfD317zSCQefVrG7chb/MPlr452Eqbt4495kGbJ3VHV8d51p9d5f8ZF9Mv1CZGTLJOd6GdSLZTUKQaeeYS9hiYTBP2ADQIhGk466MY24/ViHJ7F2sGHdq0eQYNB7Zp5VLQmhDRxmcUso9tL7qQwcOgS1MpDHuI8Yqf3hAUw6ZOcRnOJaKGmznY4kyBwJ+o5cg6+y+Kf2pCPuRw== 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=AWBgzqW94RnBPpMvPRCia4Nkgy4Ef1Ctz9T/PmnBCHE=; b=Ykge0wJ7fRu/ZmEUTaUzsbcqnLsUUt8FqFJT/cv56hRTd2pQfQh9hnki+ZynrVr3cmQW0+0ktpmYXjuat6XWB/wgY8KtVuILYcecVjOqqSxwRQ3olO2LQtTA8hbbneZyKYdKbXWzH/E7fKaxNQ73Y/cvlwMQFMZnvIuaPLdI2mg5FamUOA2TeSPPrcHcR0zqYQxcGtsFMQ2KgrxLucDNddLaj0W5a3YkGYO43MgRYDEMA6Hp5vlQkqVC5zdcGP5JA1/44JZh125sXXB1HQXGSsOJvDbyydJylhSFk6Bv04N+PC1XCKNlYf/Mkj6x2avAR1oepUEFZTlnRUqmPJ1f3Q== 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 PH8PR11MB8260.namprd11.prod.outlook.com (2603:10b6:510:1c3::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9343.10; Wed, 19 Nov 2025 12:41:20 +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.9343.009; Wed, 19 Nov 2025 12:41:20 +0000 Message-ID: Date: Wed, 19 Nov 2025 20:41:11 +0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] mm/memory hotplug/unplug: Optimize zone->contiguous update when move pfn range To: Wei Yang CC: David Hildenbrand , Oscar Salvador , Mike Rapoport , , Yong Hu , Nanhai Zou , Yuan Liu , Tim Chen , Qiuxu Zhuo , Yu C Chen , Pan Deng , Chen Zhang , References: <20251119040718.2735199-1-tianyou.li@intel.com> <20251119114252.oykrczprf3ecd7ak@master> Content-Language: en-US From: "Li, Tianyou" In-Reply-To: <20251119114252.oykrczprf3ecd7ak@master> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: SI1PR02CA0042.apcprd02.prod.outlook.com (2603:1096:4:1f6::17) 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_|PH8PR11MB8260:EE_ X-MS-Office365-Filtering-Correlation-Id: a1d87a5d-a391-4c37-7744-08de2768f093 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|1800799024; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Ni9SYmlSVFpDVFloQ05yU0JIQ0hxR05oVGVzaVdtSlhGTDFMQ3BPWHFmVUJE?= =?utf-8?B?Q0VuT1RHWEtKN3RVV2lZWmN4NUtNS3RSWWxZZkpwV0xWakw3c1RIbkkybVIx?= =?utf-8?B?cFhZK1pJMk5mc2Q1SW9JSnhOWGp2Sll0VmxheDl5VXpKT1hIQm9PL1hBWWVY?= =?utf-8?B?ZlFuQWw3bWdFWmRBbk9qMVU4SjlZd044WFlaL0p5YjdRVHd6dWJIYnVWa2VV?= =?utf-8?B?R2QrUkZ0WXNnWkF6WHZ1alZVbldBOXN6VldUWkF0c2ExTVlwbTd3bzJuN3ha?= =?utf-8?B?bnRJWEZJOXRlU1Z4Y1FrOUlqUGN4a1ZGeU4rRGlDMmxabVc4U0FIN2RRMmNP?= =?utf-8?B?NC9OYXlENXZMNlJCUEgrWnkzdlRubURwUHR5TzlXQ2lyczcvS28wSTdTYlNK?= =?utf-8?B?bXJ1SkViTXJ1bC9CM2tCQThvRFc1c1JuaDdab2tKcVBMRXdXdTBMSHoxYTF2?= =?utf-8?B?K3hMN2J5cG9DM3FIeEh4ditYWnp5MFpYWVJDVDdiSS9GaDlITkN1ckFwTU1L?= =?utf-8?B?RTIvemR0cjk1V3Ezak0yV2VBQzlYckx4d0pBQUNKUTQ3dGNiazZvRXpnN25t?= =?utf-8?B?SncxS1R5SFlVdm9NdFJNRm5LbGo2dVJHLytZc1BDODZia25kdHcvMUtqbVA0?= =?utf-8?B?R1FHT2h1Z3VnMjZGNE5nYUlrRzBlRWRzTGxHdkxERThiSWpvT0wxeU1weTZn?= =?utf-8?B?QkE3ZXpWeCtqZ2g4L2F2OVA5bk43Qm9ZK2Z5bllHZEtZNEtNQTI4S3Fhb1dL?= =?utf-8?B?dEVPdmNCNkhsVnpOVnIvZTFVaHQ2U3lGL1RNWHp2Yk1mbFZNeEgzck5ZeThs?= =?utf-8?B?U0lhSGJjRVRjYlRJcU14RGlpV0VnSmFlTDgrYVQ3TFkvd2tRSFo2RWNUL0U5?= =?utf-8?B?d2Z6ZHgvcHBVMTE1aENpY0NMcjRWVXJ4cjI2K2RwV1poQjdvTEhmVDI5ZnNz?= =?utf-8?B?bW9ZU0xUVk5EZFQ4bkMzMzk4djNoTGlWNk43TlNHZE9xTUI3L2Ura20rcmNU?= =?utf-8?B?cjBiMUl2VnptVWNMa1cxWVZRaVBnVTd4YlROTEtLRnA3Nm1IM0RaVS9VUXlZ?= =?utf-8?B?cko3a0ZUSFByb0ZEYWpHczZ4SHJSTHZuUHVPNy9wMUJlYzcwN2x5eVhTdHFq?= =?utf-8?B?dGlWTWFtb1FzTzNJcnNMRSthZlptaVFUbXRjNjYzcU1jdTVQL1dBV1Q4WUtO?= =?utf-8?B?UmJTNDFSWjdOenZmeG9vSVNFbFdhTmlpTW55UGZ0WnlPank2bVpzVE1ENTNy?= =?utf-8?B?V2dsUFVjN21lMXcvTUlSVVBESnhEcjFOYWZtemxRbTQvUW1udVJ2QTJQT3hH?= =?utf-8?B?bVFySHhHZk5ueCtaY041R1QrcGVMZVJHL3BsNjgvWjB4TE5tVWdxMHlTbVJK?= =?utf-8?B?ajcyTGM4YXFySW9rTys5QnNQanBVdkErM3Z3MWFGYlNoZDVsdGhMY2VKZkJD?= =?utf-8?B?cmVwVHA4U0dUaEdHalVGQ2RxZ3lCQUY4Q1J4WnZXdDRNZG8xcXgwMWd3TkVW?= =?utf-8?B?ZmVxT0xnQ1ZBcVRsdlpWck1tUHpjTnI1bXFIOFRBY0pzU1ErYm5iRlpHR3JL?= =?utf-8?B?QTdJMVpVUCtWU09ETUlSQ21naVkrby9hemtHa3VXWEVNMGhRMVpCUmNuWmJx?= =?utf-8?B?VXpxUTJHRTlqNEFsR2U3SFZIaHVRVHI4VTU1c1Nnc1Q4bUV1WHNpSGY0R09j?= =?utf-8?B?UklidFoxalZZSm1UMmZjVmhZWjBlMFNzL3pNYTVycnZ2TEYwd1MyWTcvU1h3?= =?utf-8?B?cFE1N1ptc1dCVzZPbWJzRExna3ZObGNndUF1ekFaVlBNcGFmY3N2QWh4R2Vk?= =?utf-8?B?UUpORWc0UUtUenVOZGduZkFWako0cjUzMFZlbTZuR0xYZjljdTFkQTlGb2dB?= =?utf-8?B?aTB2K2Q2bFZFRnd0STVNQ09zZWRUN1c0YVkxU25LVzNkelVIOXBQQnNyb3VW?= =?utf-8?Q?QN2o9l0Wb+I/PGAtA8xwoHfyIL/1DAk6?= 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)(376014)(366016)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?djJOclBXQ1NyV1lTaEZSZXhsOGF4TDBEZFVsS1d2Y3doa1ZjOVBoTG9pUDR6?= =?utf-8?B?WmFFVVp6cUNESHB0ODl2SUlOVFlQYjhIQTVWeG4ybmpOYmk2QVYvM2d6bmlE?= =?utf-8?B?Vmx3TEhWSnMrSlYxNnQzRzYraEpDYVZsWXdJZGVVeG1rMmpJbkswamVkQ1JO?= =?utf-8?B?N2ltamtWY1V5RUxuU1NTODFHaWoxRGJVSW1YenA2eVk3UkQ4Y0RpNXlKajNi?= =?utf-8?B?ZnZzMkFCMFFhNFp5Z2lTRTd1UUJieTdCN0RPRnRjTzJ4VmVqWDJmWjNZRGVM?= =?utf-8?B?UkJtbUY2WE9DV3E0MkxqRG52YjF2cE1BZCs1T204SFdOUEVaZVlRTDUwaU10?= =?utf-8?B?aXN0cnVlQUQ2d2VPWUNXcTdMYit5UzJKOTNMZ3IycEwxaDAyOW0zTFExaG1P?= =?utf-8?B?QVlGTnpFY3Fjc2dXTTlBUitDRmVvblA1NjVtOXlvQnBUVnlzZ3YvWEZhazA0?= =?utf-8?B?ZFBtc0loWXhIaGFxOFc3Zk5oWUlaZ1lRZGZSTWF6NGlzMmdpTVhtZUFsaC9q?= =?utf-8?B?cXVMRmxBSDV3TVdmVC85UHpxQUp3WkRNdXVTdWRweHRhUlJVcmRQRGxvVlF0?= =?utf-8?B?UTlFS3BFKzZpcjlQc2dJVHJFS1lla3psL3hjSDN5RkZDeG1mMEdxREx6b3pE?= =?utf-8?B?bERVQ2tQWnQ4S0F5dVJ2Mmx4bWtaQzM2SklDdkd2Vk05VkJuazBFa1h1ZWt6?= =?utf-8?B?dU9qTUZLQnMxN0RqNm5GMlpYNmk3MkZ0UTBsQ3hOeGZwT096andEb2xOTHdF?= =?utf-8?B?cnl2c2RIRC9EN29ybVFOSzk5ODgyRFlZOUVDSFhEdFdENE1sRjQvN0VWNHdl?= =?utf-8?B?cnpCUmZxNnNkd0FjWmhNcFFxbXBWVEg1NHlmRnorRFVHSmlRd2NtajFUYmMv?= =?utf-8?B?d2xBUHN4LzVQUEhJWXZ4eVhidkh6L3FuRWZ1cEhlQU1DbmkwU2k1TXB0WjFV?= =?utf-8?B?NjFiRUVRMWp6RlYvaWRZL2lDanRaNFZodHNiRUZnUVhZaUh5WUI2TG45V2Vo?= =?utf-8?B?dlZEZlJRQXlkWmI3bmR4Um80WlgydzdPclZvMEZNblZmM09vZy94Q3JFTTdI?= =?utf-8?B?cHNZUWpTOTdzbTFVNUkwWGlKMHlhUlV5cmNJR1VYbEZXZTBVQmdUcHp6a0Fw?= =?utf-8?B?alNLUTI5YlcwU1pXWVlNVlpTS1lLWGNCTWxiRlRMcGw5cW5EakNzaGIzbllO?= =?utf-8?B?YjFtRHMwdWxCYUpVaUQyWGNCT3BRaFlkUmlxRTdCNU5VSVRUUTUvM1JSZDNX?= =?utf-8?B?ZEpxTGxEK2Z3cHlmVVdIU283U1Q2bzgvQlJqZzR5Vm55M2pRckN4Znh2VGVS?= =?utf-8?B?SFJBQWhEWERBZk9UT01PWUo0TmxLZEZmVHE0YUpDNUsrUEtpQmNrcHN0aUxz?= =?utf-8?B?Q2dIYTg4aTVnenhCWFZHTG0yeGtkOHZVQVJOamdsNkpKdzBzUkNEd3ZpTkZP?= =?utf-8?B?dTBURmZlbFQ3RVI2WXArQytvS1pOMTdWcGdsYVpuSEpsaWhGcU1JL2pHaEpH?= =?utf-8?B?RXd0Wno2ZTRXOE5FQUlGYzJ4R2dJaXE1Q2dGUmxaZHRLQ2g1WmhYMTBXQU1R?= =?utf-8?B?ajQvT1RFbkxiUHZDS2lEb2VpcDVOZThZbnBTQ3FJSFFJY0pXMnV1Q3RsamRQ?= =?utf-8?B?MWxOMWN5SkNRaTRXR1pqclEwaU9pWmlJc0R1bjFaaCtaVnFVVGtWM3VVY3Jw?= =?utf-8?B?L01SSjV5SXRxempWVTJsWS9DQzE3bElWMjlteGxqMTBhcE5FZ2x1NEluV0Q0?= =?utf-8?B?ckx4RGRibWswTElHb3JBdkl1YmdzSXVTa3V5ZU9UVGJvb3VxdkF1WGFiN3VS?= =?utf-8?B?MEJyUUVjYmZaK00yWmxoWnJ4MWpBeDZMQ2xtbmRUTXZsa2ZlR3E1M3hadjBR?= =?utf-8?B?UTJXRWlsVzJQRk5pMDJDdTV6cnVzNkJyUXZCUlhtcXU3dUJiTGphRitXcHhK?= =?utf-8?B?WmtnWmd4aGxzZE1JMzBxOWFrd1hldE53aUpCS0tnSlF2TGxQeW9sUXYvcFFo?= =?utf-8?B?eWtrVHpaa3RwY0NPblJ1dmVGYjMrU1IwaXZ3bHB4anl5K3E2S0ZlUnRVYkZk?= =?utf-8?B?U0xOeU9OV0hmTGV4VkJXTjFoODBncUt0UGZDeTk3dmhFUjBUanFZY0dqTkZS?= =?utf-8?Q?qFnETuXiwioKBKNNUy7N34lV8?= X-MS-Exchange-CrossTenant-Network-Message-Id: a1d87a5d-a391-4c37-7744-08de2768f093 X-MS-Exchange-CrossTenant-AuthSource: MW4PR11MB8289.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Nov 2025 12:41:20.3104 (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: XJQynieHTPaoDEJQZ6O6JtajxT2mgTrKDcphzto/O78USBdgxb8pmZSSCA90o7JIXZxnHGPCb5AGCUD3QoTV0A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR11MB8260 X-OriginatorOrg: intel.com On 11/19/2025 7:42 PM, Wei Yang wrote: > On Wed, Nov 19, 2025 at 12:07:18PM +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 | 2s | 80% | >> | +------+---------------+--------------+----------------+ >> | | 512G | 33s | 6s | 81% | >> +----------------+------+---------------+--------------+----------------+ >> > Nice Thanks for your time to review. >> [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 >> Reviewed-by: Yuan Liu >> Signed-off-by: Tianyou Li >> --- >> mm/memory_hotplug.c | 57 ++++++++++++++++++++++++++++++++++++++++++--- >> 1 file changed, 54 insertions(+), 3 deletions(-) >> >> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c >> index 0be83039c3b5..8f126f20ca47 100644 >> --- a/mm/memory_hotplug.c >> +++ b/mm/memory_hotplug.c >> @@ -723,6 +723,57 @@ static void __meminit resize_pgdat_range(struct pglist_data *pgdat, unsigned lon >> >> } >> >> +static bool __meminit check_zone_contiguous_fast(struct zone *zone, >> + unsigned long start_pfn, unsigned long nr_pages) >> +{ >> + const unsigned long end_pfn = start_pfn + nr_pages; >> + unsigned long nr_filled_pages; >> + >> + /* >> + * Given the moved pfn range's contiguous property is always true, >> + * under the conditional of empty zone, the contiguous property should >> + * be true. >> + */ >> + if (zone_is_empty(zone)) { >> + zone->contiguous = true; >> + return true; >> + } >> + >> + /* >> + * If the moved pfn range does not intersect with the original zone span, >> + * the contiguous property is surely false. >> + */ >> + if (end_pfn < zone->zone_start_pfn || start_pfn > zone_end_pfn(zone)) { >> + zone->contiguous = false; >> + return true; >> + } >> + >> + /* >> + * If the moved pfn range is adjacent to the original zone span, given >> + * the moved pfn range's contiguous property is always true, the zone's >> + * contiguous property inherited from the original value. >> + */ >> + if (end_pfn == zone->zone_start_pfn || start_pfn == zone_end_pfn(zone)) >> + return true; >> + >> + /* >> + * If the original zone's hole larger than the new filled pages, the >> + * contiguous property is surely false. >> + */ >> + nr_filled_pages = end_pfn - zone->zone_start_pfn; >> + if (start_pfn > zone->zone_start_pfn) >> + nr_filled_pages -= start_pfn - zone->zone_start_pfn; >> + if (end_pfn > zone_end_pfn(zone)) >> + nr_filled_pages -= end_pfn - zone_end_pfn(zone); >> + if (nr_filled_pages < (zone->spanned_pages - zone->present_pages)) { >> + zone->contiguous = false; >> + return true; >> + } >> + > Mike's suggestion is easier for me to understand :-) OK :-), with the clear votes now, I will change it in patch v3 real quick. Thanks. >> + clear_zone_contiguous(zone); >> + return false; >> +} >> + >> #ifdef CONFIG_ZONE_DEVICE >> static void section_taint_zone_device(unsigned long pfn) >> { >> @@ -752,8 +803,7 @@ void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, >> { >> struct pglist_data *pgdat = zone->zone_pgdat; >> int nid = pgdat->node_id; >> - >> - clear_zone_contiguous(zone); >> + const bool fast_path = check_zone_contiguous_fast(zone, start_pfn, nr_pages); >> >> if (zone_is_empty(zone)) >> init_currently_empty_zone(zone, start_pfn, nr_pages); >> @@ -783,7 +833,8 @@ void move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn, >> MEMINIT_HOTPLUG, altmap, migratetype, >> isolate_pageblock); >> >> - set_zone_contiguous(zone); >> + if (!fast_path) >> + set_zone_contiguous(zone); >> } >> >> struct auto_movable_stats { >> -- >> 2.47.1 >>