From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012071.outbound.protection.outlook.com [52.101.43.71]) (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 CE95E3A6B67 for ; Tue, 24 Mar 2026 09:39:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.71 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774345197; cv=fail; b=F3YZlaSK72YviM5yQ8diibjKCg+vJL5uExuqBRXaE6a84fVwnEZxC2rfNBA0XvyeFuFhT+kGgU1dKGRzVd+pO9sPZHhSVLnxeuqTMoxrsRxPEH0tc9TbE9kcAS9QXfu3JkURNi4u5rrAgC0qP/1KUlRSsjXhPkS+Q4BZi/oQMyE= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774345197; c=relaxed/simple; bh=pJhvtZu2Rlk5SEMc0cUEpll9VZoFB0HPDc7m0RfJsR4=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=mBT5wRY6zDIrgUf/pp3Zu+J392yl0JUTP7EGRd7CqavN85ORnlaFeBWXlEUey7kE6d+iXU4YXOLzTbvkOJf8B+yU2NxYlEo5hbPZPHetULCN1z7IzLTt1wthC77/ZK4QAbt2RhEmKh3w7qky0DwhxVySJ0ZLwhXoZ2n+gKvdtkM= 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=HFDR1t4L; arc=fail smtp.client-ip=52.101.43.71 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="HFDR1t4L" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LxBwy1b+uU47/2r5JW03/TE6z5tgy01FB3i3+0uet90MzquhuSPluS1u8y/6wSiTcAEFSWYSKBS1p8+Ys6wDzb2HKR1QxCr7lbZVhT0L77uRnlTNwGZ1ufl92BF58xGcrB4KpVse3pogwhp6pVxtaRMhncSMA7rjsab8y/U5C0xu1/XdFxRrT6RxNFQQozPu4xaLKxCCs8UB0uwOzesQ0eYzxdlP4tLZ68iAU28g3YYjAu6BR3oiQTC4yOj6IgNJE0J+oDjSZZ+QiPBaudj1QfzPy+6woR5OmwrVKlQJQmrjY/LsszVRCZYhWHXiMmiLZbBrHziFyeCCgfEO8isaig== 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=RIIZDI8+9qLL09mq5KGCrE6aI4eU8MfycN4JcPfKHYc=; b=g3nLAWIYf5eBRsAErIkhh1op0TMSCeYuyJzjivu/+X2JYaI50o4Gkl1PTbs/5G/NHqs5LJ8LOJ7+stJv3dPhkMI0kAksYLGtYi251QulA3hJtfbfOgAgOOljNLjLflbzwGXNEMfnHHV9PKS3f2RkfkIhYWfjM6Xpr3Gs9/aGiALCCaJZBWQfKcZBYxxTS/NMYm3SueEJDkcVbEJw/OFIEGnHttUXi0LFVWY+VkI/OPxEwSmxXgncrVOj6BNdT3G6v1DIAxYlhwop3kh9E3pfe0qZR4DRsdOYmlwebc1q229uOSI8NM8fPeIR6M2wzqWgE8ebREhftDP3WpBftHlayQ== 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=RIIZDI8+9qLL09mq5KGCrE6aI4eU8MfycN4JcPfKHYc=; b=HFDR1t4Ll1ULIiprkaOe+I2CoKqZPrkwOkhhnVZuBI/RhmjYa9n8XU/1mHo13FR1jNyVVh2yKndcOeWZjsJBZP0p0NwzGqSvMQWqdoulQpZn4CWJRD2oTEdfdt9ivvzaDxcObKMsLD8JpQy13Kda42oL8VBb+NVgOB4sDZd/uQ25w817+GoWDx50elDnHmKwgvroVBiVRPIIX188HOT0Gmv4O//+NEXUazgHGaT/pr46uhYC81pSWVCB1M7RzirgqT/P0Mnd/rcipFhPaL/MIUzfGpNeSkPqxZL7hbgYo5SLzn2Voo6/7ZCd8c5XfYl3hpQP1fYOTQSUEBr1Jghp4A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV8PR12MB9620.namprd12.prod.outlook.com (2603:10b6:408:2a1::19) by BY5PR12MB4177.namprd12.prod.outlook.com (2603:10b6:a03:201::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Tue, 24 Mar 2026 09:39:52 +0000 Received: from LV8PR12MB9620.namprd12.prod.outlook.com ([fe80::299d:f5e0:3550:1528]) by LV8PR12MB9620.namprd12.prod.outlook.com ([fe80::299d:f5e0:3550:1528%5]) with mapi id 15.20.9745.019; Tue, 24 Mar 2026 09:39:51 +0000 Date: Tue, 24 Mar 2026 10:39:41 +0100 From: Andrea Righi To: Vincent Guittot Cc: Ingo Molnar , Peter Zijlstra , Juri Lelli , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Christian Loehle , linux-kernel@vger.kernel.org, Felix Abecassis Subject: Re: [PATCH] sched/topology: Avoid spurious asymmetry from CPU capacity noise Message-ID: References: <20260324005509.1134981-1-arighi@nvidia.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: MI0P293CA0008.ITAP293.PROD.OUTLOOK.COM (2603:10a6:290:44::13) To LV8PR12MB9620.namprd12.prod.outlook.com (2603:10b6:408:2a1::19) 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: LV8PR12MB9620:EE_|BY5PR12MB4177:EE_ X-MS-Office365-Filtering-Correlation-Id: 13f18ce0-51bd-4b06-6797-08de89894bfd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|7416014|376014|22082099003|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: SGrd95snC0Ea18dOwbQo6AYUd6bdoJ3hdyi+yeqfWlcQ+WaIvHo6MGx3JimqOLRJB4NrK27yXX3xjMvqlfaM2RnqqPbE+TocvA500Cixe57bcXarPyxidmx6WIr3m2jvt6yFZAnGbp8A1/zCWQ83ILMKujmbffUlFnvcaaInXIXRTnOImdn3tAa4cUfBWSkySQBmKlU9jwypFl53TJxo0iOkUMMdBXaQU9hadhk7Mk2Fc0GekeEwVlukxTLMv8PnQtBCEpqB0MjIony1dRQf4A8625emcZAjSRt50+IH5FFMgv3iroIwORI9rWXTyqiTHmPsAmmckRDYDP6XxF88XZyHUtb7fiU/spODEq1MpcAnpyECynLxDgFdIgBiun/QiY38EZ+pLu0TbuyAIufbvANDX1rIRc3LMT4TfPLXY4RKsRL8HavarMOgUYWKvq+dDw4nj1+Virw7x18MgukI8aY6RXoWs/EakmWvztHLLQR/ygdmyETckj30NaKi+6tMbwnGg+nBfFIOvlVqYywjMCmODC6RzAv+MZ8WBrg6xKrdpw5pgicU8hQBvLrGcZ2knoXDbE6htGbgqkm/z82ToQoiAMrqH4tPcwpPsDhAInLYnOL0rFnSrGuzVUnRLR4oKgv5ua04BJGRIMw/vWgFcxzk8qDb4B6MhlHHyCxQr7vLz8FvN00ijGax+ULwAA+4Bkw16rVnEQOAConxYMcFN8TiZAJa05NVLVg65F8OqLM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV8PR12MB9620.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(7416014)(376014)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?131H3WFo79Jehwk2E6idLVT3aEzYWgKirHk06I00o0kY67HjX/XtqCf7YYu4?= =?us-ascii?Q?priIjUhZjpBlksNxsduSKcIeMBTnKIe4oK5eHsxi116EjvUBYdNa+Gd+7ZoO?= =?us-ascii?Q?kFC0c/4BrwpHscxHq5b1Js9dGvsMpZGUkYiUrYh7xFNAJ/6mnbwYpdpkGtd9?= =?us-ascii?Q?PNMt0NnPjz68DyR2nIdzRv9oxlzgSZCHIrj2oHvkG8297oP72MyXe4hEkJYT?= =?us-ascii?Q?wrygH/f/fUQ+6dMBecMgHR0lC2nAHPkd9LQSM1gjqjwTrFqlAnbRDuCy2IuU?= =?us-ascii?Q?8qOyBQc2MQuyN4S5mpyy3oHD4MO09Ca6YBgS9xrI3l7GUdokOZLEaiw62xeN?= =?us-ascii?Q?NNDXiZlSRd8p8aWnDL1zZ+kYlGWTEWOjeKNCf3UwGnGB7PkigbQYMRC/ju3O?= =?us-ascii?Q?2EuWhcu7q+s9MaEmTOBinVes878+C5+oTuGHkKyyg+6QCpbDVGnkyTzbXFL6?= =?us-ascii?Q?WM+0MAyjkSz9BRMI4+oJkYJw4nN5+jiygfXxq63hn3OZcoWi9fYg3Yg6n//Z?= =?us-ascii?Q?mqbjrfQr+yDmkUj6X8oiTHX9M+4OIpF+E4Bz56dN9ZRONSxWaTccyO2LlKpZ?= =?us-ascii?Q?T4X8lmcOwGRktXvr5nBiaQJavkjssOhxJln+Jq4pLXLin8Kt6vWoLQuDBVlT?= =?us-ascii?Q?ft8Shhw19/UxfQ7G8fuJdDxJg2Iyw5mRZuYL8U+XEPxP7fhwIwGW8gKzOMaU?= =?us-ascii?Q?xurdDEHVMzsLxfLqDplCMtCgkjkrGV9bIFVXxoYUrQAxNgNnWmYRlXYvdFsm?= =?us-ascii?Q?nRONY5eGr6NMZLSAdXDD0AOi52SFUM/PVH/3CQTCo7LfKJLBUgHWmyKWvPB4?= =?us-ascii?Q?6/RLrPHBJNX4WLsiA8gvz8Otub5wRbOVJpvkf94F+wKAZ3fYgVL7ko3af6mQ?= =?us-ascii?Q?WM4TsqKl4b0sg5XBJTuNnlhtfENjlhMpVRvRgciRjzCeDrLcv6wmX+7TDIDm?= =?us-ascii?Q?k+u7Ek9eWTrk+xNmw+8HWF+O9gFaSnF0zJNVuO7SGeEBfgWSEvCiE5cYhIUp?= =?us-ascii?Q?6M6BU/9g3fMf5h235eI3r1u/Yl4IpJxo3XS9oVlkFm6ksdRDlrKQA2nZ/NfT?= =?us-ascii?Q?W1OD2HlrUq3R9xpb7HSJZkFTCoJW9s8i+4j90h6dUy0fkZjrmHOWHSUuuJmJ?= =?us-ascii?Q?D2WuoOcEc92i5P71P4dXpvCgqVRUYq2ZgNhO+FPdWnKgP66/6PCD9/U9pBIq?= =?us-ascii?Q?tC6c8lu9RNWRaKMOJsgVu9w7LPmWCfaZcfeRl1v2rRgIiuPNL0kgL4urEWSW?= =?us-ascii?Q?DU0UhjlqNHyLAk/iMzF+NljJRs7cJWNXTDewYDyevxRkb5w6Q556Ay8Oa7IH?= =?us-ascii?Q?LBozSpX+EsBsQTX6HwwJrBAnKVq1OsnrpoASO+YgjqXYti0dDHjnQUezeURJ?= =?us-ascii?Q?s41pMjLeimPhCdBx7nzR8Q460wtX+kSxXSJjyx1ibeafchsD9RXSnNmXG8Nu?= =?us-ascii?Q?bC3pDG/kdWjrWnhM6n/W5tLyGuJwSxHrogGdzygwibpPvmhXtzHhRGrMILdt?= =?us-ascii?Q?GS/BGmTShw8os+sapx0TeDOfMdYlhK9XPN/4DGqdyO3FA8fp+UGPu6s2A6hb?= =?us-ascii?Q?3x4XgEVq/vQSmoXyd+NhB7T++uh/B6SbOLMVHb+ioy9SC0qte+zTvaGKzMsK?= =?us-ascii?Q?gDuMgOHyC1FYqOBD1Htje5AzP/WtDibtywZAd67R0x/6z136TkjCPrzMBSa3?= =?us-ascii?Q?VxwOD3bhAauyi0zMFVyl7cjhBy2B/tmwukgGYiT1RuPXDKh+2nCIqCfW61sn?= =?us-ascii?Q?XE8edBdgtQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 13f18ce0-51bd-4b06-6797-08de89894bfd X-MS-Exchange-CrossTenant-AuthSource: LV8PR12MB9620.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 09:39:51.3850 (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: AItM+j0Xr8UrTZbDUiGfuoklT0PMWMUuMt8Idafg3wWx7Ag9vWcj7A8jL8Y45VGmswRK7NJ000y1vwCNDWdYbw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4177 Hi Vincent, On Tue, Mar 24, 2026 at 08:39:34AM +0100, Vincent Guittot wrote: > On Tue, 24 Mar 2026 at 01:55, Andrea Righi wrote: > > > > On some platforms, the firmware may expose per-CPU performance > > differences (e.g., via ACPI CPPC highest_perf) even when the system is > > effectively symmetric. These small variations, typically due to silicon > > binning, are reflected in arch_scale_cpu_capacity() and end up being > > interpreted as real capacity asymmetry. > > > > As a result, the scheduler incorrectly enables SD_ASYM_CPUCAPACITY, > > triggering asymmetry-specific behaviors, even though all CPUs have > > comparable performance. > > > > Prevent this by treating CPU capacities within 20% of the maximum value > > 20% is a bit high, my snapdragon rb5 has a mid CPU with a capacity of > 871 but we still want to keep them different > > Why would 5% not be enough? Sure, 5% seems a more reasonable margin. I'll just reuse capacity_greater() as suggested by Christian. Thanks, -Andrea > > > > > as equivalent when building the asymmetry topology. This filters out > > firmware noise, while preserving correct behavior on real heterogeneous > > systems, where capacity differences are significantly larger. > > > > Reported-by: Felix Abecassis > > Signed-off-by: Andrea Righi > > --- > > kernel/sched/topology.c | 19 ++++++++++++++++--- > > 1 file changed, 16 insertions(+), 3 deletions(-) > > > > diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c > > index 061f8c85f5552..fe71ea9f3bda7 100644 > > --- a/kernel/sched/topology.c > > +++ b/kernel/sched/topology.c > > @@ -1432,9 +1432,8 @@ static void free_asym_cap_entry(struct rcu_head *head) > > kfree(entry); > > } > > > > -static inline void asym_cpu_capacity_update_data(int cpu) > > +static inline void asym_cpu_capacity_update_data(int cpu, unsigned long capacity) > > { > > - unsigned long capacity = arch_scale_cpu_capacity(cpu); > > struct asym_cap_data *insert_entry = NULL; > > struct asym_cap_data *entry; > > > > @@ -1471,13 +1470,27 @@ static inline void asym_cpu_capacity_update_data(int cpu) > > static void asym_cpu_capacity_scan(void) > > { > > struct asym_cap_data *entry, *next; > > + unsigned long max_cap = 0; > > + unsigned long capacity; > > int cpu; > > > > list_for_each_entry(entry, &asym_cap_list, link) > > cpumask_clear(cpu_capacity_span(entry)); > > > > for_each_cpu_and(cpu, cpu_possible_mask, housekeeping_cpumask(HK_TYPE_DOMAIN)) > > - asym_cpu_capacity_update_data(cpu); > > + max_cap = max(max_cap, arch_scale_cpu_capacity(cpu)); > > + > > + /* > > + * Treat small capacity differences (< 20% max capacity) as noise, > > + * to prevent enabling SD_ASYM_CPUCAPACITY when it's not really > > + * needed. > > + */ > > + for_each_cpu_and(cpu, cpu_possible_mask, housekeeping_cpumask(HK_TYPE_DOMAIN)) { > > + capacity = arch_scale_cpu_capacity(cpu); > > + if (capacity * 5 >= max_cap * 4) > > + capacity = max_cap; > > + asym_cpu_capacity_update_data(cpu, capacity); > > + } > > > > list_for_each_entry_safe(entry, next, &asym_cap_list, link) { > > if (cpumask_empty(cpu_capacity_span(entry))) { > > -- > > 2.53.0 > >