From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012031.outbound.protection.outlook.com [40.107.209.31]) (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 986C1442FC8 for ; Wed, 29 Jul 2026 09:36:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.31 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785317771; cv=fail; b=KEDWmqACNe9v7dl673a8DB4rnGhNTAYJZvHrpehsI6qqPD/P11KhsdmT7uhsOI8+aNSflKmXe1UBq4LHz1SqYgf3s4znzzkZBmeSuFI0QSwhq4HtMnsOJTC5RJ2u6+nra2lo8yc/Rtt+W//niqwNkF+USXDlLEciV7SQRvhrPFk= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785317771; c=relaxed/simple; bh=R8lk6uExOQpYQNRivo4qRcEgFur4zuZHGTlR998N7OQ=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=qZnDIQPkLwwVz9IINm2bu5Ahtm3jGbklsZIIY/BYsrKMNLlzTFTD7DZts5mgAZa840vKbOIm8jzQt184UEG+WdotmHP2Rax1qzumHLecE4+Gl7Odi2FDUeAGxnFNg/9FtYY8Aww4v40DoFDYhGFMhUWAMhMP6M/epgnHA89yg98= 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=FqLdDNh3; arc=fail smtp.client-ip=40.107.209.31 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="FqLdDNh3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uukS0ZffYUAU554B9niQADbsN817MpLPwA/iFQcXhFwRSOySdivz6HNKPiO5ZLfml09VPnjF0bVfn/yk3zNYiyru4Ve3FZIgsZJHWUAFybBsBypFRc6kNS+4gpmheBGoYbcux7QLfOuNrDzxTBSldOM0Uag+C+CiSnaxmZNk9ekNO+Z6cfLvB++xRKYZlpLjGPmGb57fh0h9TPpryk4ZVUasUpizuDrh4vsmri8GiClTysrKVD/+g0TZ5Z2kTIh+wTRzTKCT6IOPY1qZYuki/5PnHMsCq7dp6Cjr8qO0XuUE/kmthYK6DsgOIgFU06mjTVu4CorQIF/+s4zF2TBOiw== 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=dRllkb07t7qmcmLHci1GNUGsAcp+P/+KMKBJhWxk4lE=; b=NuO+y6+2pIxDjFVmYXVXHFKMRF9itcWo1cqcY6FRhFDBhoNDlHT7BhLLGnw9el8b3DNd4SfXGGCx2p3rW1ztFUfm0JHcMg+TBLpYsuUwpcH/kPrep/oh1+NlPNUMNliVS55gd8wn4YbBZPYATC0LDi8pe5XOx6qYfqz/yTsgcBmkwHRw46sRc0jHR8X/sJir1Bj34HlvdDDDIVMTVPabiYuUiYFgJ3czaOtTNc+UFR3eraYNrqwvSj4b16cLajh/rdhEN1C8ipSTO36whPu5JXtYs9ebmkakLm/9fhIcWH9zvQen1FS3vrSXXHeVrSKLk4++0eNUh8xTaquZhWuFuQ== 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=dRllkb07t7qmcmLHci1GNUGsAcp+P/+KMKBJhWxk4lE=; b=FqLdDNh3mHegBpEOEuc9EKkYDW7J3onv56faFhm45qlIi02pBU/7JwlXF7LVPHrbOq376mpawsfA5RL5eufh4+Y9QUrbosWVZbTVNe4StrY6N4DXB0NW5dUmE6sa0a1SykeZcNW00RUkW7qMEQSd5Jc74KfW/pWel3mVp+vaFqIXuepFejlH5c1ullNlSfpJZYEaK8Qzw6MMJI37HGfN2n6BDxHtMjvQcWhWeMzaAwuBp+mkP2NVT89WanU2JisbjDCdEcOnYVdbR2VzSUc0C07n6vamm0vdiFdFi2kAA94mnRQgOT4WCSqb2Oa9KjvqHCx0RROHPf37LoF8I4yaTQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM6PR12MB4827.namprd12.prod.outlook.com (2603:10b6:5:1d6::14) by MN2PR12MB4093.namprd12.prod.outlook.com (2603:10b6:208:198::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.270.13; Wed, 29 Jul 2026 09:36:05 +0000 Received: from DM6PR12MB4827.namprd12.prod.outlook.com ([fe80::6261:3040:864b:159c]) by DM6PR12MB4827.namprd12.prod.outlook.com ([fe80::6261:3040:864b:159c%5]) with mapi id 15.21.0245.012; Wed, 29 Jul 2026 09:36:04 +0000 Date: Wed, 29 Jul 2026 11:35:54 +0200 From: Andrea Righi To: K Prateek Nayak Cc: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Christian Loehle , Shrikanth Hegde , Phil Auld , linux-kernel@vger.kernel.org Subject: Re: [PATCH] sched/fair: Prefer fully idle cores for NOHZ balancing Message-ID: References: <20260728214442.1648483-1-arighi@nvidia.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-ClientProxiedBy: ZRAP278CA0003.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:10::13) To DM6PR12MB4827.namprd12.prod.outlook.com (2603:10b6:5:1d6::14) 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: DM6PR12MB4827:EE_|MN2PR12MB4093:EE_ X-MS-Office365-Filtering-Correlation-Id: 49358723-b6c9-4136-aca1-08deed54cf0c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|366016|1800799024|7416014|11063799006|56012099006|4143699003|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: dDbQ/IQap8vBe9JFQcoBYDbNHYLlFwrVQ1ggbjNAQ3cYb8lzutiVsEHtCbSspwCJDRHcoqbQEfhT41aV7zWBTU14DJP2D1OCRT2TTXMvmhsbh1tzdZi+GRHxGP9hfqriOy/qk7OIx2xYZG9VFptIVhb99vTziVPPK/Nq4CCCazCxZuOYatCGD66m0CBzhvL0c28JusugkmTxq2Q5d7g3R0vFj3XeBggd+MR0o6o3Ch55rHw03GTgdZRr34n6TICctXQuRB2uwpGwkWMfOp59qI/80BU3VJVIwlFJSn5JYmcB9ygFf/s17AsdPOxK3rHL/gKaSH2TuF6aObSY2OilXIImQpq19pYOIrm05WaS6yHTA7MH2z0UgVsb4xBSSOt0wXqybhZoFtJijotFtaZBP6T3V0h2t/y6SYaw0sQfw/ztBmZy3R+OaUNxhkEVw2G+EoS/ox2KHZam9WC5Lp06Q/3ilW9INBAfybgyDnvXUzW9+F3BbOzdgEKByh26idHr14mt2WHPb29NVFeK2nqImna8OKMMnvqDSLGuWLtQAM99uAeYRiHHVl6KxlSfz0ZGHQXP5wpmsqKNi2BQuNPdo1pEwlsVrNofbfYblerULk5sDZNVlWG+ngiNNri7fuKJdxP8rpHNy6oZw+s+xT8DszJ120uj250kJfWS5X6yLwI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR12MB4827.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(366016)(1800799024)(7416014)(11063799006)(56012099006)(4143699003)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7H6gwS3OX6I7IX6nnZuA77u4+IfKaY53qljkYo5IvvSnReC9FvfuxTJ7ewB7?= =?us-ascii?Q?BzvdPfXGpxbtsSERECAO8h1HG+AS8g0gujzMMFrybxaUR9iEJ1pwnfHEvP6H?= =?us-ascii?Q?WdKI1btsNrMSAxAgyjhdBZTub3HRZa9Z8s/Ghupard9Xo/6NWKDt0pZ/27eg?= =?us-ascii?Q?EFLpXq3jWVkSHXKs32nXY5Gkl65S5aYn7ctf4PgFf72z+teEHUwHU6AlkHai?= =?us-ascii?Q?lAumBvYTSd9KxSKhrlinQnTLEV+F/wxgBMRYlES/rtzUfCAg15Ow32BbHfwK?= =?us-ascii?Q?nVfh0P7+JXwpdpq9v7S6g2zPGU5mzEGbhUHavMmIRhOWJnDotumJZ9qBmT4+?= =?us-ascii?Q?sJxxT1NR0cRZuZjgEZS+sQEyVA5UMT2B2XiqZ9UXhiZ81Ng74Lue+2D6ERYM?= =?us-ascii?Q?ikJ9eRL7S30T6y3ReVRL1Vuw8Qeml5ERkJWqwJ+Qcs+OF/YOf7fmJINhEeqd?= =?us-ascii?Q?ce4MELCLBOTF8vd9tyuFDi6/ceihf23j8GyRyHzgL2ac5IfC+vXXZUw8Fbzp?= =?us-ascii?Q?zWaiAdPbmcVPX5Cto3+qhHylU8Qbnc+ZxJDFVStfJYdEYZCRR9rABP3vT7jy?= =?us-ascii?Q?KUYFmZ+SCjb9XrPuzjpq16wNBhDm0e+/eVzq2SuHcJEs9Hpsv+N1WANgBPZ1?= =?us-ascii?Q?NzlixprR6CwaXpXrz8ICjfgCcaFerWIGpUqmFKMSPvEgKz+JdJAEG0fSWyRF?= =?us-ascii?Q?SmjlaWw0YJm/HIlZBSIdYExgSPDQymqsNXXkQ9OBlw70kbQbRr1kpcSUXYOS?= =?us-ascii?Q?VC7vtjXgVTGnesQilRmSBiSaAQ0WVyGP7jwqOvFgAF17moTHYbiaRa8REr/K?= =?us-ascii?Q?6guf8G1g049EfRYDNLImRzJWCSpjayejm/COaDtWraOeGqOa4936v2iCwvrk?= =?us-ascii?Q?tXzoLeDA5GLw1g42FzNo030XnUQ36/J65J54MTTrd5xK7WKa/sykqj7VwdfW?= =?us-ascii?Q?TobeQdQ8+kzH8rgQ3euXqDWDo9kgdjIVnCGcnYPTdEFiOJ1L91XhpvMMoGSl?= =?us-ascii?Q?VBEvDKeigmyMEnsMwFVEl4AS7gZb3gK2gL3Sbs4wmfZmkrUPHR1MpmjTRIA8?= =?us-ascii?Q?+dCKTf5iTvjXF0nSLnr7m1i5QKRDss74ozUHJniHTjTAVCBk4LQu9bo5n0Os?= =?us-ascii?Q?RLdtImgPQ/HRduOED6yoPSjYaHlZoxC/yblilgNsyYAkqcoETUquwN5J+bmc?= =?us-ascii?Q?f+/MKo2L5tBW/wsde6niPkt9/0EzRiu6Fc46rMeij2tJFogKjxdX3Py9o/Eb?= =?us-ascii?Q?O7+iHuSRI2T7fWygdNtqo6Z+LFjhzb39yD0H/697hePee3vbK1b6KT9SI42b?= =?us-ascii?Q?dzQ6hKFsrwFbA6sJ0eDKdE3hWCtOfK/aukdJ5WdFidgkjcX4A0QYlmo3jfeo?= =?us-ascii?Q?n4xQp6pSof0Q7A6iFyZ7o3HNEbnipwp9ewTKsvmc0aQUlsMKDGJjbWmvKZ7y?= =?us-ascii?Q?pE9cUXqY/Euzzc/ZA8qPFKrVJCoOafrZ3Z4f1cItQkJ9VxevL9EGlC8lTGKu?= =?us-ascii?Q?JiucFpbmPfrz9wb6t+vcN/DPNOWBgbFt7J6hyqwR4v2OrNPja82JK2Bduh+J?= =?us-ascii?Q?HSBsv4iFIC+yfG4YtZQvDYHp5jpU48Ali0SWqyAsgueRjowQ5wIAQ0cPRg+Y?= =?us-ascii?Q?zyVzPsz54Qu+gJy7PDbIrvnibZGKVjQ0EjpdptV9ds96vJ1w7YJeFfsJCCSL?= =?us-ascii?Q?tA1bJE88MADOyKbvB1vE4CpkeWG2m+G0Q0oQN9m4xNRHE+5K3EUAe5WZZlHm?= =?us-ascii?Q?9TG0XGHnvQ=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 49358723-b6c9-4136-aca1-08deed54cf0c X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB4827.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jul 2026 09:36:04.2539 (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: +F3F68+40ebVcF/CT610bY7A+ehdr1Yg8GLw26Z1xzwZVJsBxAjkcEn0rTl9r/q5n4L7Qm22LSv8yNGoDZfp3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4093 Hi Prateek, On Wed, Jul 29, 2026 at 01:48:14PM +0530, K Prateek Nayak wrote: > Hello Andrea, > > On 7/29/2026 3:14 AM, Andrea Righi wrote: > > @@ -13974,19 +13974,32 @@ static inline int find_new_ilb(void) > > if (ilb_cpu == this_cpu) > > continue; > > > > - if (idle_cpu(ilb_cpu)) > > + if (!idle_cpu(ilb_cpu)) > > + continue; > > + > > + /* > > + * Running the idle load balancer on an idle sibling of a busy > > + * SMT core can reduce the capacity available to its sibling. Prefer > > + * a CPU whose entire core is idle, but retain the first idle CPU as > > + * a fallback so idle balancing can still make progress when no fully > > + * idle core exists. > > + */ > > + if (!sched_smt_active() || is_core_idle(ilb_cpu)) > > nit. > > is_core_idle() here would iterate all siblings and on systems with SMT-4 > and SMT-8, that overhead is apparently visible when one thread per core > is occupied based on past optimizations like f8858d96061f ("sched/fair: > Optimize should_we_balance() for large SMT systems"). > > Copying the same approach from that optimization, can we do: Good point. Without removing the remaining siblings, we may call is_core_idle() repeatedly for the same partially busy SMT core. I'll repeat my tests on my Vera system and incorporate your suggestion in v2 if I don't see any regression. > > (Only build tested) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index d78467ec6ee1..814bce21ccf1 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -13849,21 +13849,35 @@ static inline int on_null_domain(struct rq *rq) > */ > static inline int find_new_ilb(void) > { > + struct cpumask *ilb_cpus = this_cpu_cpumask_var_ptr(select_rq_mask); > int this_cpu = smp_processor_id(); > - const struct cpumask *hk_mask; > - int ilb_cpu; > + int ilb_cpu, fallback = -1; > > - hk_mask = housekeeping_cpumask(HK_TYPE_KERNEL_NOISE); > + cpumask_and(ilb_cpus, nohz.idle_cpus_mask, housekeeping_cpumask(HK_TYPE_KERNEL_NOISE)); > > - for_each_cpu_and(ilb_cpu, nohz.idle_cpus_mask, hk_mask) { > + for_each_cpu(ilb_cpu, ilb_cpus) { > if (ilb_cpu == this_cpu) > continue; > > - if (idle_cpu(ilb_cpu)) > - return ilb_cpu; > + if (!idle_cpu(ilb_cpu)) > + continue; > + > + if (sched_smt_active() && !is_core_idle(ilb_cpu)) { > + if (fallback == -1) > + fallback = ilb_cpu; > + /* > + * If the core is not idle, and first SMT sibling which is > + * idle has been found, then its not needed to check other > + * SMT siblings for idleness: > + */ > + cpumask_andnot(ilb_cpus, ilb_cpus, cpu_smt_mask(ilb_cpu)); > + continue; > + } > + > + return ilb_cpu; > } > > - return -1; > + return fallback; > } > > /* > --- > > It is safe to use "select_rq_mask" here since this is the tick handler > trying to find an ilb_cpu and "select_rq_mask" is only used in contexts > with IRQs disabled. It can probably be renamed to suggest that it is > safe to be used in any IRQ disabled context as a temporary mask. > > Thoughts? Agreed. We can also add lockdep_assert_irqs_disabled() to find_new_ilb() to better document and verify the condition that makes reusing select_rq_mask safe. Speaking of that, instead of renaming it, would it be better to provide a helper to access select_rq_mask with lockdep_assert_irqs_disabled()? Thanks, -Andrea