From nobody Mon Dec 1 21:33:00 2025 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 08473221542 for ; Mon, 1 Dec 2025 18:32:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764613958; cv=none; b=YLFHNGXHBs/8Jm0cfIZlnWuNB3oyYb6yJaeloTzPrMnxxR2PMy0jlCSzW03N+ByCWaP/OlUO+AapnKpxIEep0NGih/lKd1qioRD5EQXokfWxzwE/4lL6za0USPK/kGEFFD6BQyUGoaYT7ccDzLsaXXPvkFVALw/IHFf0NpQEJTM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764613958; c=relaxed/simple; bh=khE+E815ZzIpP56fuexZI2Xhl+QWYWGvU0ffzB4Z0EM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Km3wEmD6p2avVhk426FHyUzw7c2CxJbI2XX0VFq6SzH8uKhw1fh2WUS4jzWIuDpASEx7/AR4q/SsYC+VzEA9QxnRrdCgXJKQYzUruAhSQkAvLqGyC452Leaa6b8x5aBSED+u6ZZK+1aLghijlendN6Jl4oDndOOyNfb7aFUOins= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=Yk6R4EvI; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="Yk6R4EvI" Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5B1BS3Ug024923; Mon, 1 Dec 2025 18:32:20 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=ekHqwJV195NOLHtTq KYDkpq2K74QToanGg7EflUJTE4=; b=Yk6R4EvI4KZOaxidkERaGc6+RmBeeJooi B2GkExVtzScCYwyqNhHE9xSmKDrDACB/ri7z79VJFyrVHkI2CIrVXRRCfCGw/xil TeXkt/5EN6ddrI/8JCXsVNlFn4UVNh/M2ll3xpn6gmw29uMN4G5mzpIoMz6JWDje Lm+7cXR8WHgh4jjLIKciEQkHTHgZvCt0eLWu3TUWW3X4EiVXUPOiyHmqpcBi0kgp rHB8JCqvZ8lyYtSefKYLrxBMaKSA2eFUpCGYSzJnqYqS6Hw8D4Vx1ZybcDh7XIce PCeEkLs7SHRG/HthRmUw6MuTtLK4Xicp45tMoYbDwDC9hXqLuQF4A== Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4aqrbg0y54-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 01 Dec 2025 18:32:19 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 5B1GcIvN003847; Mon, 1 Dec 2025 18:32:19 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4ardcjfv5q-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 01 Dec 2025 18:32:18 +0000 Received: from smtpav03.fra02v.mail.ibm.com (smtpav03.fra02v.mail.ibm.com [10.20.54.102]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 5B1IWHIk43647380 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 1 Dec 2025 18:32:17 GMT Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 3707B20043; Mon, 1 Dec 2025 18:32:17 +0000 (GMT) Received: from smtpav03.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 7D6AD20040; Mon, 1 Dec 2025 18:32:14 +0000 (GMT) Received: from li-7bb28a4c-2dab-11b2-a85c-887b5c60d769.ibm.com.com (unknown [9.124.221.183]) by smtpav03.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 1 Dec 2025 18:32:14 +0000 (GMT) From: Shrikanth Hegde To: mingo@kernel.org, peterz@infradead.org, vincent.guittot@linaro.org, linux-kernel@vger.kernel.org, kprateek.nayak@amd.com Cc: sshegde@linux.ibm.com, dietmar.eggemann@arm.com, vschneid@redhat.com, rostedt@goodmis.org, tglx@linutronix.de, tim.c.chen@linux.intel.com Subject: [PATCH 4/4] sched/fair: Remove atomic nr_cpus and use cpumask instead Date: Tue, 2 Dec 2025 00:01:46 +0530 Message-ID: <20251201183146.74443-5-sshegde@linux.ibm.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251201183146.74443-1-sshegde@linux.ibm.com> References: <20251201183146.74443-1-sshegde@linux.ibm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: 6xYfk93DVir5BycqVQc3Q56KhyfbgK9x X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTI5MDAxNiBTYWx0ZWRfX3FIrG8j+MNcX 5PMV6F692Rv0a5R57Qpy9HHebOoNCGJf4bn3mTb3yFtlCaClqwzQVfW9071FykfTgdKZMEBLUZa S9TkU0/lQz7Xn2/Q1yA7J1cycUmLnCmm23k0/hBlgJtBbeGSRKTlAEMGN0O2PFrAlVljDf29oPp bZCQHioc6z7+M1yXxgiovg7Yl6+9PGW6kqZZ/rQ+v1z824/BiC/qivvbU1TaZoyzGTRQEK0Ebjo td1zeRakKOhejjKXlOV7WMy50xjdqijDm3X6fqOSTpvyjbuwvd4osvuyL5BhGSCzY+7t4Mr9RpX wFGTzUEWGtVy9E7diBXUpJDJeIbeyJrLhgGAfsMIkhALN73rfvCF/zGq9g7/4IHgu+NPhUMpMwE V7W1DmWdDS9++Q28I0GxbiMm7XfNiA== X-Authority-Analysis: v=2.4 cv=UO7Q3Sfy c=1 sm=1 tr=0 ts=692ddf34 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=wP3pNCr1ah4A:10 a=VkNPw1HP01LnGYTKEx00:22 a=VnNF1IyMAAAA:8 a=kHv2m6OS6Jo2Esq1wlcA:9 X-Proofpoint-GUID: 6xYfk93DVir5BycqVQc3Q56KhyfbgK9x X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-28_08,2025-11-27_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 malwarescore=0 bulkscore=0 adultscore=0 priorityscore=1501 impostorscore=0 spamscore=0 phishscore=0 clxscore=1015 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510240000 definitions=main-2511290016 Content-Type: text/plain; charset="utf-8" nohz_balance_enter_idle: cpumask_set_cpu(cpu, nohz.idle_cpus_mask) atomic_inc(&nohz.nr_cpus) nohz_balance_exit_idle: cpumask_clear_cpu(rq->cpu, nohz.idle_cpus_mask) atomic_dec(&nohz.nr_cpus) kick_ilb: if (likely(!atomic_read(&nohz.nr_cpus))) return; So, idle_cpus_mask contains the same information. Instead of doing costly atomic in large systems, its better to check if cpumask is empty or not to make the same decision to trigger idle load balance. There might be race between cpumask_empty check and set of cpumask in the remote CPUs. In such case at next tick idle load balance will be triggered. Race of clearing the bit is not a concern, since _nohz_idle_bala= nce checks if CPU is idle or not before doing the balance. cpumask_empty uses ffs. So should not be very costly. Signed-off-by: Shrikanth Hegde --- kernel/sched/fair.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 5534822fd754..3afa79d733dd 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7144,7 +7144,6 @@ static DEFINE_PER_CPU(cpumask_var_t, should_we_balanc= e_tmpmask); =20 static struct { cpumask_var_t idle_cpus_mask; - atomic_t nr_cpus; int has_blocked; /* Idle CPUS has blocked load */ int needs_update; /* Newly idle CPUs need their next_balance collated */ unsigned long next_balance; /* in jiffy units */ @@ -12450,7 +12449,7 @@ static void nohz_balancer_kick(struct rq *rq) * None are in tickless mode and hence no need for NOHZ idle load * balancing, do stats update if its due */ - if (unlikely(!atomic_read(&nohz.nr_cpus))) + if (unlikely(cpumask_empty(nohz.idle_cpus_mask))) goto out; =20 if (rq->nr_running >=3D 2) { @@ -12563,7 +12562,6 @@ void nohz_balance_exit_idle(struct rq *rq) =20 rq->nohz_tick_stopped =3D 0; cpumask_clear_cpu(rq->cpu, nohz.idle_cpus_mask); - atomic_dec(&nohz.nr_cpus); =20 set_cpu_sd_state_busy(rq->cpu); } @@ -12621,7 +12619,6 @@ void nohz_balance_enter_idle(int cpu) rq->nohz_tick_stopped =3D 1; =20 cpumask_set_cpu(cpu, nohz.idle_cpus_mask); - atomic_inc(&nohz.nr_cpus); =20 /* * Ensures that if nohz_idle_balance() fails to observe our --=20 2.43.0