From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 5D73F3CBE93 for ; Thu, 4 Jun 2026 05:54:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780552492; cv=none; b=Htm8Vgg0FG0BCcUpK42DXE4HHzCEO+X+8qos+dO2z3xsrdr5DSKR4s8s8K9NnytbXkY9gyqnBnymZpAtBrH9OyQ0hhpdlQVGYHTt7Cf1LCD7omgQ8USve28iP5sU1MJy01CQ/rcRcYgO1B34ncyPCRC0Q4v4LoO81CzFUaJjTRo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780552492; c=relaxed/simple; bh=KwgXDf/gH9QMljsjTT0uiYtOrbClK3sg8U8ANaYOdQQ=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=ExWm9DcxXtjZeZ0sZcuk94uOLtMRI+sFppHL1rTKwN2yxv7cL+NSdJJnUMmB7V9ovqaToGEu1HuFaFmd93y5cahH982VP4j/JLxIExyjv8bGeT6Lb7bDN5O+3ysCIt+fQJYPcRIeW7UWG5g3S8BFnhuvZFbDuOKv0fEXwtDzi3c= 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=TEejPrIj; arc=none smtp.client-ip=148.163.158.5 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="TEejPrIj" Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 653GfMLd2666058; Thu, 4 Jun 2026 05:54:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=/bg6CA 3WcxuW1ckrlvNfh//Kwfw3JcxAmbrk0tPdpto=; b=TEejPrIj6nHvU4qgvOZRu7 PRvVHzAXKmidi4elX0rZKRx4a5W/OGx3GyZyAmXgvUzmWh9gccq73zSvUGOt0MbX jtiqoEfLOCVGdfP1HDMBoutiZTyu7ONrzpaVKmEOKXVNGvyxVUiZHnXzqP49hXZ/ M3b8ZBE0jsPa/FCqA6L2rJQgT9dpS0ICVGfVOiFrckEnWS0am8iBuHwma0WDcP8u oevNK/kblQ7JQO/UeGXWNecITC1oXgKdaGYA/qPQcss/fxQsUQFK6hHs8J4UcGzb MlXAgKnCvIku7XDToNXNCWEEorv900u7MqJOnkX4o03Odpxj3EK0YyCs66G2tfpA == Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4efqhtdqmm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 04 Jun 2026 05:54:31 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 6545sKgW028162; Thu, 4 Jun 2026 05:54:30 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4egbqhkmc8-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 04 Jun 2026 05:54:30 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6545sQuL18153982 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 4 Jun 2026 05:54:26 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9E9EF20043; Thu, 4 Jun 2026 05:54:26 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 255F820040; Thu, 4 Jun 2026 05:54:20 +0000 (GMT) Received: from [9.124.209.205] (unknown [9.124.209.205]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 4 Jun 2026 05:54:19 +0000 (GMT) Message-ID: Date: Thu, 4 Jun 2026 11:24:19 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 06/20] sched/core: allow only preferred CPUs in is_cpu_allowed To: K Prateek Nayak , linux-kernel@vger.kernel.org, mingo@kernel.org, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, yury.norov@gmail.com, iii@linux.ibm.com Cc: tglx@kernel.org, gregkh@linuxfoundation.org, pbonzini@redhat.com, seanjc@google.com, vschneid@redhat.com, huschle@linux.ibm.com, rostedt@goodmis.org, dietmar.eggemann@arm.com, mgorman@suse.de, bsegall@google.com, maddy@linux.ibm.com, srikar@linux.ibm.com, hdanton@sina.com, chleroy@kernel.org, vineeth@bitbyteword.org, frederic@kernel.org, arighi@nvidia.com, pauld@redhat.com, christian.loehle@arm.com, tj@kernel.org, tommaso.cucinotta@gmail.com, maz@kernel.org, rafael@kernel.org References: <20260514152204.481115-1-sshegde@linux.ibm.com> <20260514152204.481115-7-sshegde@linux.ibm.com> Content-Language: en-US From: Shrikanth Hegde In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-GUID: gu9PCaudTpVyIfumCZcN-8AXTRovYHVT X-Authority-Analysis: v=2.4 cv=fv/sol4f c=1 sm=1 tr=0 ts=6a211318 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=IkcTkHD0fZMA:10 a=FelO9ux0wxsA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=RzCfie-kr_QcCd8fBx8p:22 a=Wy-4F3XnIlFq3AEjtI8A:9 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNjA0MDA1MiBTYWx0ZWRfX73grTAikQt76 VvMda0iwYAh2QjMFLjHe7M9j1dULDQ/aG7ZsevN/LdwHQNy1VhOVCHRKvdZfOeiQI2b3PPGpOnW 0oMjYiGXrAZOSBl7R8xthdRyK0jq8RRdcbc9Hpbg/U+Ue1QSKg6lwhXrSwba3AfcnpzUIfXvRLn YCR1aQNG74s0Gy1HbK485Uh1wH4+raybpzUIYHSVm9UVG1lFXidZxX53DLbf30Sf9o7J6wMM5VC uqWF6pmOPvUWKAdrgd4lVCQvhp2VRWM0h79ipB/S+e3AHHtrLWGhfKbVZ5hcfcc21+wT0/1m/yw D64TRr0fIHrClyfSaYudqKuslFZlNbEDO+Tj5pEERQr3EvBDaiPbRwcPAV1XcT7enClaPdkWFO4 /6IrLgmzkerJktkmNVC2w/qKlr9TMy+oQy/y9RyLDkELAWN5FEy5tcEgCGEO3V7ZLnpsCicTdNw sJy/sVXdjrN9cYP7Vgg== X-Proofpoint-ORIG-GUID: _KMtjDuMkRK7o-OvnMIzs0m6tYN_2C7Z X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-06-04_02,2026-05-28_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 priorityscore=1501 spamscore=0 phishscore=0 clxscore=1015 impostorscore=0 suspectscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605210000 definitions=main-2606040052 On 6/4/26 10:36 AM, K Prateek Nayak wrote: > Hello Shrikanth, > > On 5/14/2026 8:51 PM, Shrikanth Hegde wrote: >> + /* >> + * This is essential to maintain user affinities when preferred >> + * CPUs change. A task pinned on non-preferred CPU should continue >> + * to run there, since this is non-user triggered. >> + * >> + * For majority of the cases this would still keep select_fallback_rq >> + * as O(N). task_has_preferred_cpus which is O(N) is called only if >> + * !cpu_preferred. Then task running there is expected to move out. >> + * So subsequent it should run on preferred CPU. This becomes O(N**2) >> + * only for tasks pinned only non preferred CPUs. That is rare case. >> + */ >> + task_has_preferred_cpu = !cpu_preferred(cpu) && task_has_preferred_cpus(p); > > For this O(N**2) bit, can't we cache the result of cpumask_intersect() > in the task_struct similar to "p->sched_task_hot" when entering > select_fallback_rq() and clear it at the end? > Ok. Let me try. >> + >> /* Non kernel threads are not allowed during either online or offline. */ >> - if (!(p->flags & PF_KTHREAD)) >> - return cpu_active(cpu); >> + if (!(p->flags & PF_KTHREAD)) { >> + if (!cpu_active(cpu)) >> + return false; >> + if (task_has_preferred_cpu) >> + return false; > > Shouldn't this return true at the end here for > cpu_active() && !task_has_preferred_cpu? > > Essentially, this: > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 77a172f31862..3bf7e3c4d518 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -2489,6 +2489,7 @@ static inline bool is_cpu_allowed(struct task_struct *p, int cpu) > return false; > if (task_has_preferred_cpu) > return false; > + return true; > } > Yes. Good catch. I missed it. it would have returned cpu_online() > /* KTHREAD_IS_PER_CPU is always allowed. */ > --- > > Otherwise, it starts evaluating kthread bits for user tasks. > >> + } >> >> /* KTHREAD_IS_PER_CPU is always allowed. */ >> if (kthread_is_per_cpu(p)) >