From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010034.outbound.protection.outlook.com [52.101.46.34]) (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 51BF133FE0F for ; Wed, 8 Apr 2026 01:05:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.34 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775610362; cv=fail; b=DuHA15DdgFd1rF8K/xQinVkVj8oZmfs0Ff8T2Lmzt3M2Dbu7DZm8j7bAOhOMXAkWsq4No5KYDnklKAC1mpKIMtnnZFNt1CHqiC4HznviSvZPhD7kRbN4qIqwOVovABlyagywO/85ya4D5A/BhEk7y9ZXZGTmMUanAszNxwv71HM= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775610362; c=relaxed/simple; bh=DhowLCOerUDPJrJM3T6gkUJEKxPRhraaovpxqsc6jMk=; h=Date:From:To:Cc:Subject:Message-ID:References:Content-Type: Content-Disposition:In-Reply-To:MIME-Version; b=aAbB11bWK5qGLwD02vLUGFtP+D7qq1Ub24iCRXNxb9HVlUlKG3Lfoeg8GP4Gaguuvy181UQSd/+g6sTrwap2qk1HU6SyqiAYR1hLicop+TqFSK2vvLW/WcbvsPfpLFb9Aiz6/aBl5HO97D3D9NgB2ykE/h2zQIrq1/THD9tnK8Q= 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=erFxfnIY; arc=fail smtp.client-ip=52.101.46.34 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="erFxfnIY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rlx+5b7c70RL4IZfkjT7WrMk92oLYxjdlm55FGMRB2WyyKYrszr0wuXo2m1FWYucIvE3IJwGMeXX7hFRAKuiiSmduRd8bm9FVe5qDlXU2BRfWdh3mu1fRl/bGT3pAiywPdNNXWwYaTcyzyPQfxRME9t5pjr0rTesD76Wtv1v3ZwXW1N2kRuwQLj+g0085IEjRbrn78EjddM5i5lB2FMdGyfEposU7+Vz6QQtqylbVW10UWqPnmhywQc+mNt64Gs8B3YcHBGkcHpt+W6S0dW5Iw7X3GgmuIsltGiSai+IjHa4Gx93OZ4TO6TuP1zLgCPFirQctIRjr6wIg70eKxkMzA== 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=k6qUykh4nbxfbIongO119XNPwaGA6E1QViK9fY84HR8=; b=gDhS4z4LeD9tIvzJjWxnZX2u2VCdFRLHGL4G8DFAQxLHdkDPSJblD13+slD3wDA2oJozE6XJNsNY3/QFv01SryrDtMRnqYYxmE0WFt5xU/LaRqN7fszEGkWyVJoow+uVo85D8pZBbyQ9MFZKe3AuP4L2/3TIbFLbYlI8RqxMTsES1Jh5RRiOJBJTbPv9kzk4YIXodl7JPovRMfyCC1xKwnJsz/uzJTufek26yxUewjzSkcjJEz4ICD25rL4OuQcxJYXU2R8ZwsgNtm5tj38vkNz5A66lh3Jc38UU+RiiYqjLzE17eRif3jmJ4fR46ud2xM0qmEM5oX+cfF4JkjQ0zQ== 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=k6qUykh4nbxfbIongO119XNPwaGA6E1QViK9fY84HR8=; b=erFxfnIYm1pvTwybVrlHJurQL/ZxdmQ9dUtjtbvR4v6Kb9zhKWLVldb2eo16IOoNZ+OyktG77moTB1ysiy3FmMPFAAJPQxUO8r04j1tUjNdwr63jjZjVZWCdmsfj+NbVN3k5qKMzfoDj9yyoRcP/QHWNteZZV0CmLSgef5Pzv5+4b8hdivezslpgJa3lbhCj7FiBKk/3kpxurU4Vjf+Z0XmhG7E8gWSvaQEK8oPpaTSNQ0PN8Uvdi5Dr7n77QaIaVCkgCYsJV0nR0zdHQdAfOwUfI8n+E8Y9My0F3u9XzXIew/s9PiNE/2RYtXipzMnn6BKTaatfsmvU+9t+B1oa3w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CY8PR12MB8300.namprd12.prod.outlook.com (2603:10b6:930:7d::16) by MN6PR12MB8565.namprd12.prod.outlook.com (2603:10b6:208:47d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.21; Wed, 8 Apr 2026 01:05:49 +0000 Received: from CY8PR12MB8300.namprd12.prod.outlook.com ([fe80::ce75:8187:3ac3:c5de]) by CY8PR12MB8300.namprd12.prod.outlook.com ([fe80::ce75:8187:3ac3:c5de%3]) with mapi id 15.20.9769.018; Wed, 8 Apr 2026 01:05:49 +0000 Date: Tue, 7 Apr 2026 21:05:47 -0400 From: Yury Norov To: Shrikanth Hegde Cc: linux-kernel@vger.kernel.org, mingo@kernel.org, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org, tglx@linutronix.de, yury.norov@gmail.com, gregkh@linuxfoundation.org, pbonzini@redhat.com, seanjc@google.com, kprateek.nayak@amd.com, vschneid@redhat.com, iii@linux.ibm.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, joelagnelf@nvidia.com Subject: Re: [PATCH v2 05/17] sched/core: allow only preferred CPUs in is_cpu_allowed Message-ID: References: <20260407191950.643549-1-sshegde@linux.ibm.com> <20260407191950.643549-6-sshegde@linux.ibm.com> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260407191950.643549-6-sshegde@linux.ibm.com> X-ClientProxiedBy: BN0PR07CA0003.namprd07.prod.outlook.com (2603:10b6:408:141::15) To CY8PR12MB8300.namprd12.prod.outlook.com (2603:10b6:930:7d::16) 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: CY8PR12MB8300:EE_|MN6PR12MB8565:EE_ X-MS-Office365-Filtering-Correlation-Id: 3852f662-cce3-417e-9b17-08de950af8ed X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|10070799003|7416014|22082099003|18002099003|56012099003; X-Microsoft-Antispam-Message-Info: taXJ6A3bLu0jSfDDIwWqz8GzfN4UpmcsyTJ1dUgzixvvvIeqUaIvAiiOWWuWx37Z3e8NpyeOoe7B3QriULUy10gXPJUMYW754Sgxtrd/c3EEt0pUsMU8N+iKcyYXZfTAR014MR18CqkutqswwdK+Qvn0vszQg4S0+aKLurnlBR1fkA5ljIRPIb2KvDLBfG72krt4U/rGDxYLjXRTZcnp8F7hBolGmOrDF7CF3wKuqyXtX9dAvlxZvpIwjfIQwB2oVOPQjXGPJmHOGXqDwwiRruFFvLFEW+62Tw6ErZaEp0uHPUaWQga+gXKPGsMvL1TULyncwt3iQRULe+xhdnWJ4nQYM1GBCLKN7mafRdY2kUkQBJRQiUJKmRdIXNs3++tEI4SFRUw7nSDhZ0AUc/fQU/FWL/jpZjVlUl7G62LDF/KLVazMYtxHba7yUzXUQT8cs/8P4gbDYGjmPzhWvHW+k+SrcinTLh6CVZ4VU/dYuYOMJeKxJjV55Tx+NQazKhFeXH3wjHdJ60E9keTLY4qi4r1lBq3wKMorHmarjrqZISJaS5ZKlGhKtHVg3Y1/dTfuz7CMxKKQ8fjnZsoAfkNi2u+4GgBX6tdtpAXp1Af9RHdpLoqxanAjUwKKoQyvLpcyknzX86IJ8WDP2256fj+72SQiMQuhZmH/3eo8dlxqfhi8O1cthykAXRpPGLh1GI0Nbm0/nCU5SI9QGl5djl8NXy9eL6cVPEkWEXcO5NF+wuU= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY8PR12MB8300.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(10070799003)(7416014)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?uGtYBBdUvPKQaAR+XTW/xo88Zf1PrE9ivDOUklhpH7490Xw1yTxRWWRcCH52?= =?us-ascii?Q?gKGuFTYTOsqxphQh+0CAkEoLGpp1g5E9AI+MUenZulnvShuPt6V73mNPx9p+?= =?us-ascii?Q?9o0BS6FFDpSXkJIUctZIcWsdBEaD4i2/ly8kFvP6LmVpg0ohWeCZtsVMTrU0?= =?us-ascii?Q?CjNJ/Hp+wdUEqInPMfDddAwgt3ct7AcP9vLz16yEThi3MmF/YHalM+dIr5mZ?= =?us-ascii?Q?mnoymyGTGekuLs+Ckfx86ZaVkls/3ZgP88akBHv/5ulJUmia9X9krTz0d+YP?= =?us-ascii?Q?rvDnRJufKtze1Q8vZR7vtmkBh+9Ql/M5gLJqlAnb4+3aPY9939h5Sv+GNIkb?= =?us-ascii?Q?3/KnnC2ur1JbZT8oEkCBud/TB6cfKDnHepOlhdPWB0aAKpyfI1AGXWvln/rQ?= =?us-ascii?Q?Ky+uLMcCwSq5e9qDVRGqTeidf9k7vhL4ob14Sj0XAZq7X8S+1ykpyGK/2wPL?= =?us-ascii?Q?+ekQj/S8MXktYVSS3CL9xqqAi5/0OCyf4o9Fd9wEzVD3483YJhJs9sxNxgPu?= =?us-ascii?Q?Gir/Zu2rbgp9aTb/FEghiB1mM/K1+EakKcAfQWxnjyBhZSNzOr899NXfsF3Y?= =?us-ascii?Q?B5/miq1dS6nXWUI2RScMhqAQxZONYAQl9vp/UisYait65yl8owsbopVLe+2S?= =?us-ascii?Q?Cmk07lOKCpbL52+Mi+R9XteHcZjd2Lb5bBewixPTnjKDcif9isQ9q745BhZT?= =?us-ascii?Q?7vNk6qU3zp1VqBgFBIAGGd5110H/7iHxsUD7VkGJ8ZnTMGhd5WE79Tc/Qwe8?= =?us-ascii?Q?GBVoEFO2PXVcAGVtwKu62LFV5+cyuXq01JBWKFlbmdWmvHzMQ5inaXXOiioT?= =?us-ascii?Q?4ZLsAaFWfvD/oeWB3KEa2Eigugsq6dRFJmnnWoV2iSy1eC6I8pjjrE79cneQ?= =?us-ascii?Q?PVVClya0QUjpaAz2MQFNp+9EGSoqz39aYhr2aLtkJCjRuhKxPCNWwwT51oLu?= =?us-ascii?Q?7XDlYYbrRbgdZOl1EY522MVn5OX4zzrGhxtr2Gk+5ORqHh0K+GlGWKfILuu4?= =?us-ascii?Q?J1V30CxUTgJPZh23S6ia0JtRAUley8QNSS4zejIMBqcGNBEgI1TbCbKSJDLM?= =?us-ascii?Q?T3O9Mv3xu14dtVi3VU5NZkrvO7o5o1kcQVvbJP5abXj+Oj0XB1b2nD2qodgi?= =?us-ascii?Q?thwN0hOhIWnoPAMPTScd3Pak6hj34OMAzgtYttrmCcoc4wK23gN5GQdOLwE8?= =?us-ascii?Q?5XEhOLqpyhOBOE4BwF3t1d8xXItfyZHWbGTQGE3loLnop3pN+3pkbeloxBC1?= =?us-ascii?Q?lwW7w02LreR015utwzSj6Yi96xd/mBA0q23m/p9sqTM7BJK6wXAaiU9NK9oI?= =?us-ascii?Q?a/IUpds1fYhLH3vj7sIrmIeXVJ4A01/Ziwp/d0lgOa8bk5Uy4tfNQQLH6SrK?= =?us-ascii?Q?hGvffQh045AspAFwOvVdTeLfrRXxSAyz0BBZHiEg3wmGTgMtMun99EXzOcQK?= =?us-ascii?Q?1IUWREw7OpERB108XOLeI0wTv+d2ClgwAeSylqWNlkFplh6AFAm2s7fP+Uxc?= =?us-ascii?Q?wZT9NN/TBCDO9eIg2SkmqOOxckvJ1m/0og056tLiN83wrxPlNPhEyBDlydci?= =?us-ascii?Q?HZtIB4CPiDTa25StkH/sQpytmJ+Sus2+JDHXx+fWk+mN7wkQon3XhoLniTWm?= =?us-ascii?Q?Ers3yS/D6CJMAV+3AK0Fd5nrNVyRqhqnuhfsVyBZUv5bEKkiCWe2cY8vTdzR?= =?us-ascii?Q?BLO2uVbOYH+6lyFpssbHmMqSiTmHW6yHATR9Mcv9+tLwXynwISJib82GEEXX?= =?us-ascii?Q?WflfgTVWIIKi+d99ZVHllFwlXcA2QQ+Q/Q89p22vnbA6YjNP2U0S?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3852f662-cce3-417e-9b17-08de950af8ed X-MS-Exchange-CrossTenant-AuthSource: CY8PR12MB8300.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2026 01:05:49.4268 (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: wHpXqDQ8Hs0yD4XyDi/4TomRqTZLVrfqiQImS2dkab06VF6llT+pcjF/2fP8Eq7CKu2i46GZ7ZHOmldU+75Jtg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN6PR12MB8565 On Wed, Apr 08, 2026 at 12:49:38AM +0530, Shrikanth Hegde wrote: > > When possible, choose a preferred CPUs to pick. > > Push task mechanism uses stopper thread which going to call > select_fallback_rq and use this mechanism to pick only a preferred CPU. > > When task is affined only to non-preferred CPUs it should continue to > run there. Detect that by checking if cpus_ptr and cpu_preferred_mask > interesect or not. > > Signed-off-by: Shrikanth Hegde > --- > kernel/sched/core.c | 17 ++++++++++++++--- > kernel/sched/sched.h | 12 ++++++++++++ > 2 files changed, 26 insertions(+), 3 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 7ea05a7a717b..336e7c694eb7 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -2463,9 +2463,16 @@ static inline bool is_cpu_allowed(struct task_struct *p, int cpu) > if (is_migration_disabled(p)) > return cpu_online(cpu); > > - /* Non kernel threads are not allowed during either online or offline. */ > - if (!(p->flags & PF_KTHREAD)) > - return cpu_active(cpu); > + /* > + * Non kernel threads are not allowed during either online or offline. > + * Ensure it is a preferred CPU to avoid further contention > + */ > + if (!(p->flags & PF_KTHREAD)) { > + if (!cpu_active(cpu)) > + return false; > + if (!cpu_preferred(cpu) && task_can_run_on_preferred_cpu(p)) > + return false; > + } > > /* KTHREAD_IS_PER_CPU is always allowed. */ > if (kthread_is_per_cpu(p)) > @@ -2475,6 +2482,10 @@ static inline bool is_cpu_allowed(struct task_struct *p, int cpu) > if (cpu_dying(cpu)) > return false; > > + /* Try on preferred CPU first */ > + if (!cpu_preferred(cpu) && task_can_run_on_preferred_cpu(p)) > + return false; You repeat this for the 2nd time. The cpu_preferred() call should go inside task_can_run_on_preferred_cpu(). And can you please pick some shorter name? > + > /* But are allowed during online. */ > return cpu_online(cpu); > } > diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h > index 88e0c93b9e21..7271af2ca64f 100644 > --- a/kernel/sched/sched.h > +++ b/kernel/sched/sched.h > @@ -4130,4 +4130,16 @@ DEFINE_CLASS_IS_UNCONDITIONAL(sched_change) > > #include "ext.h" > > +#ifdef CONFIG_PARAVIRT > +static inline bool task_can_run_on_preferred_cpu(struct task_struct *p) > +{ > + return cpumask_intersects(p->cpus_ptr, cpu_preferred_mask); This makes is_cpu_allowed() O(N). Even if CONFIG_PARAVIRT is enabled, I think some people would prefer to avoid this. Also, select_fallback_rq() calls it in a loop, and this makes it O(N^2). /* Any allowed, online CPU? */ for_each_cpu(dest_cpu, p->cpus_ptr) { if (!is_cpu_allowed(p, dest_cpu)) continue; goto out; } You can keep it O(N): for_each_cpu_and(dest_cpu, p->cpus_ptr, cpu_preferred_mask) { ... } Not sure how critical that path is, but this looks suspicious. > +} > +#else > +static inline bool task_can_run_on_preferred_cpu(struct task_struct *p) > +{ > + return true; > +} > +#endif Same comment as in patch 3. I believe, it's worth to declare cpu_preferred_mask unrelated to CONFIG_PARAVIRT, so that you'll not have to spread this ifdefery around. > + > #endif /* _KERNEL_SCHED_SCHED_H */ > -- > 2.47.3