From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012008.outbound.protection.outlook.com [40.107.209.8]) (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 17EAF3BADAA for ; Mon, 11 May 2026 13:46:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.8 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507166; cv=fail; b=UIS1EWCP6ts9I4C3mccoqzfyRQymqumtN4vi7Zl4rwk6kaM8IXACiTcb62HLboX+hWFDlxWGdgI3rirSvJ7sfswMiLQ4f4LWE5ZIzfHBfqR4kARgpggsQflFLnE1R7p+qKbpPmzP9CRLkuhpWBxs0GrbIL4GEmihDYUtQD02q7A= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778507166; c=relaxed/simple; bh=059KLjEiRkKaDy5SAxtUNhfcKtwLqeWveqY8kMVMnmc=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=oEXIStZ/ZwiwvwwsjSs7dTJyxEp3ETnHa8noQfWK++YF/BqLTOP0BP8z+cAAw9P+sNvdOtIbBegN6O+Ta/7pKbXOL8lYO0okqWEGhXDR92c/hevLgTxO9/Qr+23yr7+7GotpizdiZVKxyPDDgXXCmUduTbA6GVdWmV4lSL/QDjQ= 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=WIbvQqTi; arc=fail smtp.client-ip=40.107.209.8 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="WIbvQqTi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=M7hCnxB6jJkHjZGAqbui+Yx4zwDyGN9EZlZO5zCp53Q2m2ILLDHAaPJHhU6kd8NznirZ0xMStgtCEbK1UsCD4OWxSIfHtVPl9OlAMatla7qnMPab0KVn260466sryMce6z57ANotC8VZb+0mChx6lxQPl8S8DpAQRqfbWgIRVuY5vwL+zwG1C3LyuuSKwbz3C8V2BKxlMbV2+Se8f7vYrHF/F9ST2OBbbElL1o5mvCF2wLw23qiP2ERloX9PIfiPrbur32exJztnM1mGU5jtXUY5VWdqf1oesxA3g2iHlP2QHWPPrmQdaRxRl3lmRvy/mDgEXUoAfcv6j8+E3zkD5A== 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=IfrRb1AweaxUbROdTvrpfFniQhk+Rg0KEtU51ae6Rr8=; b=K9v+ShCPvppf5SqfmJTS1xsDzFVKw97sRKlLrf4kTmDClOLJzqhIuSND/gcHEHva2pG6rgB9SKk7UQGbqtJBSrrSlykUd+DaAa/xJt4sWnyhfQdwtOVWtADWxzU6HCUMxoXD7OVuBEe3I0gOtWYhnK68MTAf6JKNOR0EQ0JEaIGTYw0uBMYvRK7EKU5m6IDk8ZbKiQibuZhDXJD4Pq2/lRI7mEpWG5n22b9+zBBFwrWe3wKgGCiBcu+kt2ytbt/lR2IqOW8q8rXUtDoDqBKwHjIutZNRAUEcR+53Brn85fomvXJN7IhOwXHe3Om7sBbT8Ov53kW2zwm7Zl1LGC7dKg== 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=IfrRb1AweaxUbROdTvrpfFniQhk+Rg0KEtU51ae6Rr8=; b=WIbvQqTi0w2IYCK4NbHzYjo19SYjh+9n/HPeC3zGFcvqT+mUS9XQkQbeEMft3WQHZ9fqUQiaHTluZvfojDOh/Y7eIGxw5OYDNEo3tXE3VS+YxjONMq8iA5Mky0ZoQYS/KdLKAhv+7fFSrrNzidbfeTI5HIzmGVQCKp7m6sJ3Le6n3r/h4lkTdnt+X8bb5fOjt8YzkSey8cPeBS/X7ooGGbgVEuLh7K4a3qH0HtvATo1QXxxn17/u5MjU5rUrYRZcVPB24ciCsTofL9r6eWzABAOnFRSqeWMAgmjOUi1O853rs7NhHJ22suR9LOoxzwJr88bpW/ImIro1fpTKlcju0w== 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 DM4PR12MB8571.namprd12.prod.outlook.com (2603:10b6:8:187::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9891.23; Mon, 11 May 2026 13:45:56 +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.9891.021; Mon, 11 May 2026 13:45:56 +0000 Date: Mon, 11 May 2026 15:45:48 +0200 From: Andrea Righi To: Vincent Guittot Cc: Ingo Molnar , Peter Zijlstra , Juri Lelli , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , K Prateek Nayak , Christian Loehle , Phil Auld , Koba Ko , Felix Abecassis , Balbir Singh , Joel Fernandes , Shrikanth Hegde , linux-kernel@vger.kernel.org Subject: Re: [PATCH 3/5] sched/fair: Prefer fully-idle SMT cores in asym-capacity idle selection Message-ID: References: <20260509180955.1840064-1-arighi@nvidia.com> <20260509180955.1840064-4-arighi@nvidia.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: MI1P293CA0018.ITAP293.PROD.OUTLOOK.COM (2603:10a6:290:3::12) 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_|DM4PR12MB8571:EE_ X-MS-Office365-Filtering-Correlation-Id: 7a9c380c-7daf-4ba7-d97d-08deaf63a00d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024|18002099003|22082099003|11063799003|56012099003|3023799003; X-Microsoft-Antispam-Message-Info: DKTsjbbV1V6Amauzc/7+oFjzTbRC5xiNGXl0Ft62eu03EB4kXDpgJmmighArLwL+OdnZgUp7jh8WthtRMvz7y/57i8/8s+6vVn2pWvmX57i4y6lL77SvFdwG3q8iKzblinDnhdeqI+cTEWf+VfPaRf2bCWZuFwMJVULMHqlVgmeBZmcjTMzwaBWmffHKtYdzMFeneAYMD5K8J4brEUym06OVCeITUIN/fi2FO2nHB4OkzI+KD6GdYpSeOZiT6X4vCZWJPsBSZPBzWO7QnmmHXaB630kkDy10qju6CdPJHziO+fmwHhtLjQ1I9+smFYXDKcz5R1OHoSZTprqgzwztkROOO8hsXWG0lGE6aq52O75EEzJ8skOOBJNX74/CcSselqwa4bSeTGX0XHPncW4orR1GM4bFZxaYLkxeBPv3+Zt00tKYxNAs04E29yziSuBNbFhg1LS75Zq4FNslnUYAZ+virIaF7O5ZjDlbWgWuc9DPrAF8cd8feEb3xGpgXEy0ii7r97eBCYDdY5eR7+kd8ZAQTyB3qWt5LZEu9vD5KbmmYZhC7pWi82ARAT1cbAzS6w+PJ5MjkS8JJ0BW29am1nd8FDIcEq3Q1wbUT6MhjV6wRR/0DqzXlHmjtYDnOu9067/ZSnyjpQfMaCsaT6WtmZUN1NSFzD1uFu4Xz4CcpibuN2y8imB56/RFDJ2zzWtD 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)(7416014)(376014)(366016)(1800799024)(18002099003)(22082099003)(11063799003)(56012099003)(3023799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?fHEVJJCMcVoBx2OclfGtBJHCbqvwfYaFJbxhBYQh9iOoidLQjWQ90NT77SQA?= =?us-ascii?Q?b8XRIMI/P8up1ca4VBIHoyEySF7afnybNIHL2TG0jnRN6z1GkIs0FZEPdV4M?= =?us-ascii?Q?Qz17mhnitpLzzw3WO+D+pvvbC5UrKnYIDkRrDcUWIPpGP8t1Q0QJblDwIL57?= =?us-ascii?Q?F9yBWhVcWnil6Iv4hEi4Yz50ncisuNGhTVR/4fXHUCXz9JrIHs3HJmW36nAF?= =?us-ascii?Q?IBPfLYFa5fpCVHD7SnT9l5qcTkUxopWt93G9tXrCWrUi1783T4O8ZJUQhIYZ?= =?us-ascii?Q?iF+mBGv845Dvycw1cwrC1MKTwcvvx6PgckKZMfdMGBz8kmuE9eC/KADOfRXJ?= =?us-ascii?Q?LTY5sB2JnEhAZQoILGKOS7bzbqmTETrnZmNA+r9HhBW7GZn/8YmOD+F2TU2n?= =?us-ascii?Q?swWIRJFhqZCi6qFbCwW9t33elwmJ9pY+bu/L/vlsTgX+VSXcpoH9mcxdSBnD?= =?us-ascii?Q?Wvys9IZYiDPOrPr4vHEzS9vWq6if8Ws5YZNgDHK+Z4VyyXmAyOrftpsozv/B?= =?us-ascii?Q?RKK9fEoPLM4hJGlNGV3IqfqDWGInxWwYHqZuJOUQ0nt0ANP96pqdqxCHlmjv?= =?us-ascii?Q?8OOVASmeyrM4NqUYKuhwp/m8peWml1IirPgSo1Q8OmUfXNx/ePI71j1fXueK?= =?us-ascii?Q?SbPKF3ynMAw3ZIQftr1+ZkE6hHAIPo+XmfaIFgns2ZTSI7WKTItS2xcmE4YM?= =?us-ascii?Q?IhNjfs2lSS17keDQY1agzpg+MN7bGAY3NQCmOvP2oTiNTuczZvhjUNHFNT5t?= =?us-ascii?Q?nn+Vn1b12bPuxhcMCtHcC0ws+fq03B9+MS1ngiob6YYl3Do8MhMikug/ZZ4o?= =?us-ascii?Q?+PRc/40TGAkFFL7JCqyE6gQKz80RiUzzBb1H7QcYR2vNwRSSo3ASy8YpFHTY?= =?us-ascii?Q?cPBnSHoeLf8152VCQnZiMPpe4A5moyAZt2yPKhgIwK5JZt8Ym4MPV4/uu78p?= =?us-ascii?Q?AaSlOin8v9GX3fs85bqZlhXP2h90WBE/bJKdQK9ZngT4KPZ5bMO1dbmdMT93?= =?us-ascii?Q?rpQvkemjXwiplBgka1S9wDRY55NklQd1t/MMMLHnY5ZywOJ6beSJMNQ1Egic?= =?us-ascii?Q?cIRzrOr5esrifUwg0zxtAiLPzi1UVMhlsQFpzVILCI+dIvI/dNgwgsahP8GN?= =?us-ascii?Q?yAoffSGQ1BDMM6yeA8fz+ZYS8Nw96qpat9BNmvi8DfQiE5wn0y84jReEzWbS?= =?us-ascii?Q?NeLYwoQP6qvLhZlCYEC0Qe/1xASnuYip2Vzvh85CWtZSU4hbolzi6mf3AL7P?= =?us-ascii?Q?Oawzwe4PPPonoE7w7KuBsgDEI5qq7r9f0znC51wjDW19AlbURna4/eNE4TFy?= =?us-ascii?Q?SFcwADSYlsdnBi3qoDymD0k50bGtZDWrLTTtZirEqLTedrgyyYikWu1fk948?= =?us-ascii?Q?jIH7jxHz9UnuZn5VaSqkADOS84o80yGbMjXE9H4x5rn50J5HkrbWIrJOQLrO?= =?us-ascii?Q?NV+ZFY8HxJHtJo5ecjq9QCm0SamnucQkoymscjd0Q0MFc6ZaEC5UxH0aSKie?= =?us-ascii?Q?i32frl9MYg1wPe93TeGNCdp87/ccXmtPBvlQXAal9hmvG+E7uEwIJ+KyIWtI?= =?us-ascii?Q?9X0KwijVIQ5DotuD+09uaZEQLocKjydAuFBtM3euw4NRWAP2geWvyyu3Yubo?= =?us-ascii?Q?I5Fh8cU9kPsEYRX7lX+9mQVbmhS1qhH5D7UejH8JzHy76vLb0wZCiwLx6nyp?= =?us-ascii?Q?nPm2vbPur+RPwS+tA8pgkbfhvWFCP6ROowuZj5EoJGnunrc4YfQ2XfJRvbxy?= =?us-ascii?Q?3Bv+L4pDtw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7a9c380c-7daf-4ba7-d97d-08deaf63a00d X-MS-Exchange-CrossTenant-AuthSource: LV8PR12MB9620.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2026 13:45:56.0131 (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: 33/4FiuEeIfPIbw2h8jLS5CY6DHZa9f8ictJsgxkLjconNaFVNdK9SAz1h9W8P3WGBVOHeaaSipUGr5j6WrjRA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB8571 Hi Vincent, On Mon, May 11, 2026 at 03:07:50PM +0200, Vincent Guittot wrote: > On Sat, 9 May 2026 at 20:10, Andrea Righi wrote: ... > > +/* > > + * Idle-capacity scan converts util_fits_cpu() outcomes into preference ranks, > > + * where lower values indicate a better fit - see select_idle_capacity(). > > + * > > + * A CPU that both fits the task and sits on a fully-idle SMT core is returned > > + * immediately and is never assigned one of these ranks. On !SMT every CPU is > > + * its own "core", so the early return covers all fits-and-idle cases and the > > + * core-tier ranks below become unreachable. > > + * > > + * Rank Val Tier Meaning > > + * ------------------------------ --- ------ --------------------------- > > + * ASYM_IDLE_CORE_UCLAMP_MISFIT -4 core Idle core; capacity fits > > + * util but uclamp_min misses. > > + * ASYM_IDLE_CORE_COMPLETE_MISFIT -3 core Idle core; capacity does > > + * not fit. Still beats every > > + * thread-tier rank: a busy > > + * sibling cuts effective > > + * capacity more than a > > + * misfit hurts a quiet core. > > + * ASYM_IDLE_THREAD_FITS -2 thread Busy SMT sibling; capacity > > + * fits util + uclamp. > > + * ASYM_IDLE_THREAD_UCLAMP_MISFIT -1 thread Busy SMT sibling; capacity > > + * fits but uclamp_min misses > > + * (native util_fits_cpu() > > + * return value). > > + * ASYM_IDLE_COMPLETE_MISFIT 0 thread Busy SMT sibling; capacity > > + * does not fit. > > + * > > + * ASYM_IDLE_CORE_BIAS (-3) is an offset, not a state. On an idle core, > > + * fits += ASYM_IDLE_CORE_BIAS rebases thread-tier ranks into the core tier: > > + * > > + * ASYM_IDLE_THREAD_UCLAMP_MISFIT (-1) + BIAS -> CORE_UCLAMP_MISFIT (-4) > > + * ASYM_IDLE_COMPLETE_MISFIT (0) + BIAS -> CORE_COMPLETE_MISFIT (-3) > > + * > > + * ASYM_IDLE_THREAD_FITS (-2) is never rebased because a fully-fitting idle-core > > + * candidate early-returns from select_idle_capacity(). > > + */ > > +enum asym_fits_state { > > + ASYM_IDLE_CORE_UCLAMP_MISFIT = -4, > > ASYM_IDLE_UCLAMP_MISFIT > See why in comments for select_idle_capacity() > > > + ASYM_IDLE_CORE_COMPLETE_MISFIT, > > ASYM_IDLE_COMPLETE_MISFIT, > > > + ASYM_IDLE_THREAD_FITS, > > + ASYM_IDLE_THREAD_UCLAMP_MISFIT, > > + ASYM_IDLE_COMPLETE_MISFIT, > > ASYM_IDLE_THREAD_MISFIT, > > > + > > + /* util_fits_cpu() bias for idle core */ > > + ASYM_IDLE_CORE_BIAS = -3, > > +}; > > + > > /* > > * Scan the asym_capacity domain for idle CPUs; pick the first idle one on which > > * the task fits. If no CPU is big enough, but there are idle ones, try to > > @@ -8026,8 +8074,14 @@ static int select_idle_cpu(struct task_struct *p, struct sched_domain *sd, bool > > static int > > select_idle_capacity(struct task_struct *p, struct sched_domain *sd, int target) > > { > > + /* > > + * On !SMT systems, has_idle_core is always false and preferred_core > > + * is always true (CPU == core), so the SMT preference logic below > > + * collapses to the plain capacity scan. > > + */ > > + bool has_idle_core = sched_smt_active() && test_idle_cores(target); > > unsigned long task_util, util_min, util_max, best_cap = 0; > > - int fits, best_fits = 0; > > + int fits, best_fits = ASYM_IDLE_COMPLETE_MISFIT; > > int cpu, best_cpu = -1; > > struct cpumask *cpus; > > > > @@ -8039,6 +8093,7 @@ select_idle_capacity(struct task_struct *p, struct sched_domain *sd, int target) > > util_max = uclamp_eff_value(p, UCLAMP_MAX); > > > > for_each_cpu_wrap(cpu, cpus, target) { > > + bool preferred_core = !has_idle_core || is_core_idle(cpu); > > If sched_smt_active() is true and test_idle_cores(target) is false > (meaning we have SMT but no idle core), then has_idle_core is false > and preferred_core is true. We will returns immediatly if > util_fits_cpu and we will use the ASYM_IDLE_CORE_* values otherwise. > So I think that we should remove the "CORE_" in the naming > > ASYM_IDLE_THREAD_* values are only used when we are promised to find > an idle core with SMT Yes, I agree, the CORE_ prefix is just misleading, those ranks can be assigned also when sched_smt_active() && !test_idle_cores(target). I'll send an updated patch with your naming schema. Thanks, -Andrea