From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010050.outbound.protection.outlook.com [52.101.46.50]) (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 8224B4749DD for ; Tue, 4 Aug 2026 18:10:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.50 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785867007; cv=fail; b=qAPl9Opy/YxxM5hMyojuex5rjO5siast2oSr21tgWY0TdEBlbbIpqwjJs/93A938qkHFfctszx6vZ3xvL6wYNbp8jFSqq83aGVw/7wBXZNxTruzUG2H1S+tf5G07yeMtrG9dMh5GovZhJqieY8KPxe+A4hNe48hrvMZ4UEB/mWg= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785867007; c=relaxed/simple; bh=cbWijqBVsSq6fmhcGHBbjuHrhT6MH+lhPen/jiG9WkI=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=Ul1tJaccHnOqnyAuapduFGq8v70dzgE8lSIDv8L5wOYMJtF5twpSjswo0IDe/UEBFtiy7lFtFz4QeubaVrNwFP+ZZFYzMFiMWVcsr+Gr7283pMwVqy75fRexYKSvEkve1QEu3iR+bovPwET61ydmoXxkcIOPqyY4PVt4KHtRNfQ= 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=q+AAz64E; arc=fail smtp.client-ip=52.101.46.50 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="q+AAz64E" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Y4rU63N17zNv+Py5N+gU6bEBF9daeA5ft3yb0CZkZXjAN7TlteQfaIDpCCIOPUwpeBvOMOrb4mlwXFdX50IzSgxnPhvvxvd75sm1LvSI7V4yQ5w/wDNtJskx04W9gwxn6/3dPxEgionWqaSRUHbVODi+L6sfa6E5UH07GcPlV+Qr6+1h8nAXLZff1KK93PRLpOUc0VhVBEf+5QqxJNqDkifXvdwmfJmK/MKzx0bnkPrV+wvIU5E+mNCXnGTIm+KxBTLIfv8Y2ABg9+tFOxKb4BPdOt5NO9zl0r0gZoqIwfwv59UKoS9w3rjbIB0QQDYlPpFxPqqPGRGGYzrYX3PDJg== 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=rTib7vDLvkhrYRvrjgmx+G1GTNfs4drVj4h+op7OdsU=; b=d/ZyAYtatug/cyb8IzwVlydAKcQM3+0ZjPf++iP2XEaEbKXIZ2ignmx82PT73QUqnObKKAQpLQSi/OdUiVOobp55lRaB7u3U/LgarFk0algKaUyFMbmKpiKAKNdQUwt6K+UHRjEmE+8hxIyuIc0nvjlD4zawx0g2D6ZO9sqWVr7/wgMEGK1AbR8gE85rVS/k4qNp8Aa5qy9Jrv5sUGccfW2EcDMJ79/HXyWSVc52iY0dR7/FI0jZ4RzYgSkaTQTVuF30TTmQvDTP9qfpSspCWauQ9hZW5Sema/URdQtQmAPOkeEiMH5l3TcEQMKn7Hnbxf8qI7hlHR/K8nxY1d4pUQ== 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=rTib7vDLvkhrYRvrjgmx+G1GTNfs4drVj4h+op7OdsU=; b=q+AAz64EpgVJBHYwjXjJ3UZ68w9hu0wlqlCEdYZeeoti4eErgksGeRYBZMUNmrFaL2WBLKpp0Gn1pQIVJzK5yDY5jPmzExXtbriA5j+28T7T9VAqLI/fPiPKSx/NqAXJjoF4EbyE2FB1+ugx8dapsEBf5itsQsSodYiNdcldz1JxGNVVw1e4xfrPt26J5/qpmdKSiQLe9DIvqgWq7+N6Z8ff+k9yNOg60pcO53h/WCJV7wqLx5XTsMYq8d9Q4vJBWNMyeMsDrq/HHXHv8z6ByH2HAzZCCC7qsyNv8pEzrECj0XuMVDfE9Gu5gVUrXQEm1h28BdXpgtE7QK5TJ7xBJQ== 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 IA1PR12MB6410.namprd12.prod.outlook.com (2603:10b6:208:38a::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.292.15; Tue, 4 Aug 2026 18:10:00 +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.0270.016; Tue, 4 Aug 2026 18:10:00 +0000 Date: Tue, 4 Aug 2026 20:09:46 +0200 From: Andrea Righi To: Shrikanth Hegde Cc: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , K Prateek Nayak , Christian Loehle , Phil Auld , Mete Durlu , linux-kernel@vger.kernel.org Subject: Re: [PATCH v4] sched/fair: Prefer fully idle cores for NOHZ balancing Message-ID: References: <20260804151324.918020-1-arighi@nvidia.com> <92dae374-14ec-4acb-b451-7ac81d9d262b@linux.ibm.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <92dae374-14ec-4acb-b451-7ac81d9d262b@linux.ibm.com> X-ClientProxiedBy: MI3PEPF0000753C.ITAP293.PROD.OUTLOOK.COM (2603:10a6:298:1::4d8) 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_|IA1PR12MB6410:EE_ X-MS-Office365-Filtering-Correlation-Id: c16ed35a-a9d7-431c-2c79-08def25398e9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|1800799024|23010399003|18002099003|22082099003|4143699003|11063799006|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: ySIm9Qnny8FngBgalxQVYlGTVhTLCdzb/gikLVudiYqOQrxhRMM66bPPu1lIwWaICkS9Q8Qci9/wi42adA8Kk+2yFZFoeYydZLDwwYaPu3TppWoNY/z+3EYzcyqus87mCHswmXoqRa1XvjNOf9OjMffDqz+n50UA+7e9z6VEhnS4OXb/kL7dx2hIQv+Kyqo5lg1r+KWKdVTJYYmXyomxNQh9UXqtu5f7GWobP0M3/831mCfbyIoyoW0B+1ENExveyj1GkS1Fe4cp240qACMQ0yAAgsElF6cUsrIlyvt5M+7ynslyMK6M29GloATeirpQIeu4gQe8aaK4RphnNPCQ7HYNStmK6rZ393ttqWRpHy4IitWDsgpi7pL0GP/dolZjdqBqWV2V54mlaWeNubOownqqTUgND8MEM8t1+vEF/drw2OjhWtz45+DIfR0rwBXN9NqtyxnLC/i4v9NAuYCTZry8vLUc0ImEFgibvzNNgMDF2Mk0ltMK28mQhWLSSACquCzRre6RtQ7M32A58J+M/ERQ241RYFWbOeEHY59AoPVSqzblxN7hgNXt519PyLVcvkgdBqq5f/WcdURuTG5FQNvdRY2YUZFZbEHsH24L3I6ifTmoM4oSjoEH5FVbysCyIxDPkA2iEsUe44F7sAONELyCvlTsucN8oqGa4gobXJQ= 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)(376014)(7416014)(366016)(1800799024)(23010399003)(18002099003)(22082099003)(4143699003)(11063799006)(56012099006)(10067099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?X0uo/kfn+RKxb+1U30LUgKHPX7877gtHw6BDUv9ZIRzdFEYHcnakFttihwII?= =?us-ascii?Q?3fN0FFV3gZljEbK1l8wJ9N1qxqrFyNOk2a7WQ2fkjw2Dd9x2bpcZ6vchT+XL?= =?us-ascii?Q?lGn0gD5qTXanP270xOxQTy8GJ5qH08VpVBsi4J9IBF8C9OmF8JQsum+XVpT4?= =?us-ascii?Q?pZIIlb/EXQymfBXDxK3QQd1fQ9Wp9Gp40uPnyay1/B3e6M+LWvOsymFvlyPW?= =?us-ascii?Q?2t+Y/Kp9Mn8H+v39eYHAhHxhGe2g36YdBIzVNSaUDFLMwPpXm1+lShJqaN0+?= =?us-ascii?Q?mOgEDY1RAot8lzfWM6cMsmEtSoep/CYbddwXhl6gjtDidq3HMR6Yvtp8ITx9?= =?us-ascii?Q?9ie2gg0+zzpCpSF3hKcz2BEML6ZAT8M6lD2Tei2kv4/OhWQg7OMC4n9fg4ir?= =?us-ascii?Q?ObU15N7C27iMWPYns+C/5/OjeHcPySD4E1ii0kaigiYtcz+RS+uujxN1dEuw?= =?us-ascii?Q?youp0yi1Tn2TpYjMylyTckGGU+OBEuGS/wWMtpAQSLjnuVlxDVawzVMCFTN+?= =?us-ascii?Q?IbXZq8ChzZqVxYVi9SwfCjfGLISvQu2R2y6lPSQ8I3dqjhoYmgd2CI5mX+c4?= =?us-ascii?Q?+xlm7z96i0gwH9O0JKnC/8+eJc2kjS/UbIa28DRDYT8dxFhyTqLBlE5vhQte?= =?us-ascii?Q?iarcLgaSs++8oldqJdTl2QLm8PnpR/lLVn3ukOSOLeWGJbUmBaIEAZRXHtep?= =?us-ascii?Q?OWhonr+CE6wZOVuEQngaHL0sfPtgN46YpCMud0e6Go12U+CI4qTGSHjBWvBI?= =?us-ascii?Q?GqG4nymIOHttoPx34x6CooIZ3Jc4d9wJmVV+CIGkcPcZMGUnXdhShBbQk/hW?= =?us-ascii?Q?DjjOwooNmUxjm3fCSozsd7+g9Gehqp4BjHC01u3Kxc0Es6t6GU6iECZ+UQgj?= =?us-ascii?Q?ZJa3aETmgkBCeHOxQhTfhWkjCSAkd5KCmdmI3e55pFKvqewHpzN2w7/gWxxY?= =?us-ascii?Q?54sHJbVR42oXdCUzfgjxbXSnbWiCQWbw1MPYr+4cx7aQMCVsJBtYjHGD1Yl4?= =?us-ascii?Q?DSfXWmqUjY+2MRWo+N2nGsiiay/k5v8IjgG2lrkEpWw3pMi+WJuMpa9k11CA?= =?us-ascii?Q?MFgC59fRjmGjfbbKAnh6tFlvm/qMQay0cX/0HlZfwKjy/KRQXHYG1qQiEP/o?= =?us-ascii?Q?b7O1MPFDNJ49Wl+SroOPSRMadnyJA4o2RoZo9w0Gcus9knQZbiXnfg6E/4GY?= =?us-ascii?Q?GRN8EYkYBnbanG+9ezBhDxwNvss0aNmA4lDxdFdqc0LxcvJUnslS9jnZoXA3?= =?us-ascii?Q?K7b/b6Q/lyEJtvTtMwhOhjWliC3k7JYn+C1NTg2A0vC0S+aXEEseWP19srp2?= =?us-ascii?Q?pYE/MmFcZPz4PTTFS6XyIJIKikNa1fdL5bXKvyF6K/YBml2GSN2LM76/lMjw?= =?us-ascii?Q?b6wP0P+sSx/nVktzaZ09fJpuDHjfAjwJ/tiK4q/CR6CENs2RHHkRbnMe2vlw?= =?us-ascii?Q?Kc1kRMqDotcIMC4WMS5rx0nUwH2X5WTemMt66HuAq7RppSj8XEO9XvC0WsSz?= =?us-ascii?Q?u52dyISvqTA5I1btt74kQ6GAY1ysLIQNyv36nIf+YqsGmPPR844boOlkuvPO?= =?us-ascii?Q?iY16dZ/MdhyVq8MeQ1GPqe8zQKOurG+sIi1jOUjtPpgYk/ImxsCOg7SBH7tA?= =?us-ascii?Q?u9PW3c59sdzGSz37qNY9MBycTT8zIOq/bT9q8pXEDk0mLjS/cw7shfttNKXf?= =?us-ascii?Q?fY7dfHHFykQIZLtwNBUybpyc3+qvk4XXW68sjDqU30aTOkuUgmt5LXXMKhMy?= =?us-ascii?Q?rk0r+VyXQw=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c16ed35a-a9d7-431c-2c79-08def25398e9 X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB4827.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2026 18:09:59.9798 (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: vW5clvZIk7phrkxI2TkMaCLszvjMMV4rUozwVFIfV55h0VNA4WiqaKz3pUu+hu9+PBtGwuop/Nfo1C8RNjHAEQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6410 Hi Shrikanth, On Tue, Aug 04, 2026 at 08:49:01PM +0530, Shrikanth Hegde wrote: > Hi Andrea, > > On 8/4/26 8:43 PM, Andrea Righi wrote: > > find_new_ilb() selects the first idle housekeeping CPU without > > considering whether another thread is running on the same physical core. > > On an SMT system, the idle load balancer can therefore activate both > > siblings even when another housekeeping CPU has an entirely idle core. > > > > On most SMT systems, this is not problematic because the idle load > > balancer is a short-lived activity and the transient wakeup of a sibling > > has negligible performance impact. > > > > However, this can be particularly costly on NVIDIA Olympus cores used in > > Vera. Briefly activating an otherwise idle sibling can reduce the > > performance available to the other sibling and this effect does not > > necessarily end once the activated sibling becomes idle: after the ILB > > finishes and its CPU enters WFI, full single-thread performance is > > restored only after the sibling has remained idle for a qualification > > interval (10 Ki cycles on the tested Vera system). Repeated short > > sibling wakeups can therefore sustain the interference even with little > > actual overlap. > > Is this hardware cost has been accounted in things like cpufreq or cpuidle? > or have you set it already to max performance. All the CPUs were using the cppc_cpufreq performance governor during the tests. The scaling minimum frequency was between 95.5% and 97% of the maximum frequency, depending on the CPU. The CPUs were not strictly pinned to their maximum frequency, but the performance governor was in use. The acpi_idle driver was enabled, with both LPI-0 and LPI-1 available. I didn't disable the idle states. > > > > > Prevent this by preferring an idle housekeeping CPU whose entire SMT > > core is idle. Retain the first idle CPU as a fallback when no fully idle > > core is available, so NOHZ balancing continues to make forward progress. > > Once a partially busy core has been examined, skip its remaining SMT > > siblings to avoid repeating the core-idle check on wide SMT systems. > > > > Just Curious, making nohz_full= yeilds similar numbers? Yes, provided that the housekeeping core is also excluded from the workload. I tested this booting with: nohz_full=1-175,177-351 This leaves CPUs 0 and 176 for housekeeping. I excluded that core from the workload and ran 87 OpenMP tasks on the remaining node-0 cores (1 task per core, excluding the housekeeping one): $ env OMP_NUM_THREADS=87 \ OMP_DYNAMIC=false \ OPENBLAS_LOOPS=10 \ OPENBLAS_PARAM_M=16384 \ OPENBLAS_PARAM_N=16384 \ OPENBLAS_PARAM_K=16384 \ numactl -C 1-87,177-263 --membind=0 \ ./benchmark/sgemm.goto 1 1 1 Results: unpatched : 5.246 TFLOP/s unpatched+nohz_full : 6.953 TFLOP/s patched : 6.861 TFLOP/s patched+nohz_full : 6.984 TFLOP/s So, nohz_full seems to prevent the problematic ILB wakeups and can produce similar results for this CPU-bound workload. However, it shouldn't be considered a sobstiute for the ILB fix, since it requires explicit partitioning and reserved housekeeping CPUs. Full dyntick also enables context tracking on the isolated CPUs, adding kernel entry/exit overhead. Thanks, -Andrea > > > Tests performed using an ad hoc GEMM benchmark running one CPU-intensive > > task per SMT core within its CPU affinity mask improved from > > approximately 6.2 TFLOP/s to 9.4 TFLOP/s. > > > > Note that this preference may wake a fully idle physical core instead of > > using an idle sibling of an active core, potentially increasing ILB > > wakeup latency or energy consumption on some architectures. It may also > > scan additional CPUs before selecting the one to run the ILB. The > > selection falls back to the first idle CPU when no fully idle SMT core > > is available. Non-SMT systems continue to select the first idle > > housekeeping CPU. > > > > Cc: Vincent Guittot > > Cc: K Prateek Nayak > > Cc: Shrikanth Hegde > > Signed-off-by: Andrea Righi > > Reviewed-by: Mete Durlu > > --- > > Changes in v4: > > - Remove redundant this_cpu check (Prateek Nayak, Vincent Guittot) > > - Link to v3: https://lore.kernel.org/all/20260731191957.3199642-1-arighi@nvidia.com/ > > > > Changes in v3: > > - After finding an idle fallback, skip all siblings when a busy CPU is > > encountered, avoiding per-CPU traversal of known-busy cores (Mete Durlu) > > - Link to v2: https://lore.kernel.org/all/20260729163225.1987068-1-arighi@nvidia.com/ > > > > Changes in v2: > > - Avoid repeated is_core_idle() checks on wide SMT systems by pruning > > the remaining siblings of a partially busy core (Prateek Nayak) > > - Link to v1: https://lore.kernel.org/r/20260728214442.1648483-1-arighi@nvidia.com/ > > > > kernel/sched/fair.c | 55 ++++++++++++++++++++++++++++++++++++--------- > > 1 file changed, 44 insertions(+), 11 deletions(-) > > > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > > index 37001c63452e5..9a975a684b487 100644 > > --- a/kernel/sched/fair.c > > +++ b/kernel/sched/fair.c > > @@ -13964,29 +13964,62 @@ static inline int on_null_domain(struct rq *rq) > > */ > > static inline int find_new_ilb(void) > > { > > - int this_cpu = smp_processor_id(); > > - const struct cpumask *hk_mask; > > - int ilb_cpu; > > + struct cpumask *ilb_cpus; > > + int ilb_cpu, fallback = -1; > > + > > + lockdep_assert_irqs_disabled(); > > + > > + /* > > + * Reuse the per-CPU select_rq_mask, which is protected from concurrent > > + * use on this CPU by having interrupts disabled. > > + */ > > + ilb_cpus = this_cpu_cpumask_var_ptr(select_rq_mask); > > + cpumask_and(ilb_cpus, nohz.idle_cpus_mask, > > + housekeeping_cpumask(HK_TYPE_KERNEL_NOISE)); > > + > > + for_each_cpu(ilb_cpu, ilb_cpus) { > > + if (!idle_cpu(ilb_cpu)) { > > + /* > > + * Once an idle fallback exists, a busy CPU proves that > > + * this core cannot be fully idle. Skip its siblings. > > + */ > > + if (sched_smt_active() && fallback >= 0) > > + cpumask_andnot(ilb_cpus, ilb_cpus, cpu_smt_mask(ilb_cpu)); > > + continue; > > + } > > - hk_mask = housekeeping_cpumask(HK_TYPE_KERNEL_NOISE); > > + /* > > + * 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)) { > > + if (fallback < 0) > > + fallback = ilb_cpu; > > - for_each_cpu_and(ilb_cpu, nohz.idle_cpus_mask, hk_mask) { > > - if (ilb_cpu == this_cpu) > > + /* > > + * The core is not idle, so there is no need to check > > + * any of its other SMT siblings. > > + */ > > + cpumask_andnot(ilb_cpus, ilb_cpus, > > + cpu_smt_mask(ilb_cpu)); > > continue; > > + } > > - if (idle_cpu(ilb_cpu)) > > - return ilb_cpu; > > + return ilb_cpu; > > } > > - return -1; > > + return fallback; > > } > > /* > > * Kick a CPU to do the NOHZ balancing, if it is time for it, via a cross-CPU > > * SMP function call (IPI). > > * > > - * We pick the first idle CPU in the HK_TYPE_KERNEL_NOISE housekeeping set > > - * (if there is one). > > + * Prefer a CPU on a fully idle core in the HK_TYPE_KERNEL_NOISE housekeeping > > + * set. Fall back to the first idle CPU when no fully idle core exists. > > */ > > static void kick_ilb(unsigned int flags) > > { >