From nobody Mon Oct 6 04:59:32 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 5D46D2EA754 for ; Thu, 24 Jul 2025 16:16:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373806; cv=none; b=bb/64fjGiqni+ivWE7pa8x/Tt58Uu4IgjVnKwcFtpwZVrvighz86egvBItGqp8dW4ClDOudBvqjOyEKoPVHTXkNOSPu9UtqEe3XN6Tm9uC+5g2nOSyEFehjlYf3TgqdwcscJRCcFMrQrnwudI0dEpcxkiPGpQJSC0uMa/QVyaYA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373806; c=relaxed/simple; bh=Dk2uBqAaEyU+9YNl9B7qppe8hsBQPkJpVcViQ1sbPRM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=o4tIx4ZPsWFFMTcvD1kY9r4uImjA8e3R1nJfGKgyvGFXzCcNvXhPTHipvu5E9CNo7BhTHtv5NIPm4qE7or7PEbIg6938MtGTJho4648nF3ObSJehvvTq30+N44SFVMp4U0Sbblh/F+Svyi9YbeOTPXsSd+sIqzmVXipDZFa0jVQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=XukVVQlR; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="XukVVQlR" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRQit012138; Thu, 24 Jul 2025 16:16:29 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=vqk2l l6MWgjWxJ8C30AC0qKFhaYhTvHky64a2KS4hKc=; b=XukVVQlRyVOeCVRMvCVSI BjmMu1Bl9xH3WOg0hc7N9nBRGFQF7Gaaiwe5eky4NFKzcr3dPex4UcCs6TBf6Xq7 qkkB5lZtDfXNn5hu8LGCerq0kv9N1Y4pxDQHj/aoxgSghMruPZLFbP0O1dKFOQ6p PTAdE+FIz2NUlkxEo83b9+2/16Jcms8A95mPixgBYdPifPFjxJrbREeVlJNDQpIa koyxvZeAou5dYzx3ZUvA+HyiYpqF3H8vbmk4fAqttU9TVYFpsRBOZaQpDw6yNkvW Cjtcdeq4un4I9FZsCtKTMps/0ttksdjDg4FfcCH2alEhm/GoYKnDoexWyWd4Bi09 w== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4805hpj266-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:29 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OFkbHW014357; Thu, 24 Jul 2025 16:16:28 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfpf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:28 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNI034466; Thu, 24 Jul 2025 16:16:28 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:28 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 01/11] sched: Scheduler time slice extension Date: Thu, 24 Jul 2025 16:16:15 +0000 Message-ID: <20250724161625.2360309-2-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Proofpoint-ORIG-GUID: vZgGG94iwQDrBSceGQBcJWq5BMoXmQV6 X-Authority-Analysis: v=2.4 cv=YY+95xRf c=1 sm=1 tr=0 ts=68825c5d b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=JfrnYn6hAAAA:8 a=yPCof4ZbAAAA:8 a=2YheWpswMuxJmFNZD14A:9 a=1CNFftbPRP8L7MoqJWF3:22 cc=ntf awl=host:12061 X-Proofpoint-GUID: vZgGG94iwQDrBSceGQBcJWq5BMoXmQV6 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfX0NIwHTJ5FDNg 6BNbGrciq2wu8H2hNM9gnO/XZsZeOVkLld2Zp1UkiP+cBBrZGrM8EWbz4Vky11b25qz4mEvZsAZ 4Kk4SK3eFgpMfYgTtnZ4kFGSQiRXHsBN9oweHVEK+ZpNXxi6kK2oE/vJKkDwYTclGzgZCzQETDh xVvb9QsKbjnfOUtn7klM7Ah/MZvOvCmDLwVOPqMGpt4jWs5ko/6WJ+q5ESzvBdZ7h0lhF0DioXP FtbOCjOGPjYS4rgoLcrDPEBq+HxfYmk6/7Mmd9vKXVBCKjBruoVpeYLm/XlJn4Wu//AbKsOUGvk FWC7Zo8HUbt1fybCwSEwVOuNsDRJQ5s4NlAgi72oW3yeCxmeLUVkgmb9oX+jhHFDw/ONRtU5Bfs RFmzOnd9J5fkUk5GNQr8rnxkpwSuI2D70gwSMIYnmi8WXxt721/UHabIcuwHyUUtTJZ4zUOa Content-Type: text/plain; charset="utf-8" Add support for a thread to request extending its execution time slice on the cpu. The extra cpu time granted would help in allowing the thread to complete executing the critical section and drop any locks without getting preempted. The thread would request this cpu time extension, by setting a bit in the restartable sequences(rseq) structure registered with the kernel. Kernel will grant a 30us extension on the cpu, when it sees the bit set. With the help of a timer, kernel force preempts the thread if it is still running on the cpu when the 30us timer expires. The thread should yield the cpu by making a system call after completing the critical section. Suggested-by: Peter Ziljstra Signed-off-by: Prakash Sangappa --- include/linux/entry-common.h | 14 +++++++++---- include/linux/sched.h | 28 ++++++++++++++++++++++++++ include/uapi/linux/rseq.h | 7 +++++++ init/Kconfig | 7 +++++++ kernel/entry/common.c | 28 ++++++++++++++++++++++---- kernel/rseq.c | 38 ++++++++++++++++++++++++++++++++++++ kernel/sched/core.c | 15 ++++++++++++++ kernel/sched/syscalls.c | 4 ++++ 8 files changed, 133 insertions(+), 8 deletions(-) diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index f94f3fdf15fc..7b258d2510f8 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -304,7 +304,7 @@ void arch_do_signal_or_restart(struct pt_regs *regs); * exit_to_user_mode_loop - do any pending work before leaving to user spa= ce */ unsigned long exit_to_user_mode_loop(struct pt_regs *regs, - unsigned long ti_work); + unsigned long ti_work, bool irq); =20 /** * exit_to_user_mode_prepare - call exit_to_user_mode_loop() if required @@ -316,7 +316,7 @@ unsigned long exit_to_user_mode_loop(struct pt_regs *re= gs, * EXIT_TO_USER_MODE_WORK are set * 4) check that interrupts are still disabled */ -static __always_inline void exit_to_user_mode_prepare(struct pt_regs *regs) +static __always_inline void exit_to_user_mode_prepare(struct pt_regs *regs= , bool irq) { unsigned long ti_work; =20 @@ -327,7 +327,10 @@ static __always_inline void exit_to_user_mode_prepare(= struct pt_regs *regs) =20 ti_work =3D read_thread_flags(); if (unlikely(ti_work & EXIT_TO_USER_MODE_WORK)) - ti_work =3D exit_to_user_mode_loop(regs, ti_work); + ti_work =3D exit_to_user_mode_loop(regs, ti_work, irq); + + if (IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY) && irq) + rseq_delay_resched_arm_timer(); =20 arch_exit_to_user_mode_prepare(regs, ti_work); =20 @@ -396,6 +399,9 @@ static __always_inline void syscall_exit_to_user_mode_w= ork(struct pt_regs *regs) =20 CT_WARN_ON(ct_state() !=3D CT_STATE_KERNEL); =20 + /* Reschedule if scheduler time delay was granted */ + rseq_delay_set_need_resched(); + if (IS_ENABLED(CONFIG_PROVE_LOCKING)) { if (WARN(irqs_disabled(), "syscall %lu left IRQs disabled", nr)) local_irq_enable(); @@ -411,7 +417,7 @@ static __always_inline void syscall_exit_to_user_mode_w= ork(struct pt_regs *regs) if (unlikely(work & SYSCALL_WORK_EXIT)) syscall_exit_work(regs, work); local_irq_disable_exit_to_user(); - exit_to_user_mode_prepare(regs); + exit_to_user_mode_prepare(regs, false); } =20 /** diff --git a/include/linux/sched.h b/include/linux/sched.h index 5bcf44ae6c79..5d2819afd481 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -338,6 +338,7 @@ extern int __must_check io_schedule_prepare(void); extern void io_schedule_finish(int token); extern long io_schedule_timeout(long timeout); extern void io_schedule(void); +extern void hrtick_local_start(u64 delay); =20 /* wrapper function to trace from this header file */ DECLARE_TRACEPOINT(sched_set_state_tp); @@ -1048,6 +1049,7 @@ struct task_struct { unsigned in_thrashing:1; #endif unsigned in_nf_duplicate:1; + unsigned rseq_delay_resched:2; #ifdef CONFIG_PREEMPT_RT struct netdev_xmit net_xmit; #endif @@ -1711,6 +1713,13 @@ static inline char task_state_to_char(struct task_st= ruct *tsk) =20 extern struct pid *cad_pid; =20 +/* + * Used in tsk->rseq_delay_resched. + */ +#define RSEQ_RESCHED_DELAY_NONE 0 /* tsk->rseq not registered */ +#define RSEQ_RESCHED_DELAY_PROBE 1 /* Evaluate tsk->rseq->flags */ +#define RSEQ_RESCHED_DELAY_REQUESTED 2 /* Request to delay reschedule succ= essful */ + /* * Per process flags */ @@ -2245,6 +2254,25 @@ static inline bool owner_on_cpu(struct task_struct *= owner) unsigned long sched_cpu_util(int cpu); #endif /* CONFIG_SMP */ =20 +#ifdef CONFIG_RSEQ_RESCHED_DELAY +extern bool __rseq_delay_resched(void); +extern void rseq_delay_resched_arm_timer(void); +extern void rseq_delay_resched_tick(void); +static inline bool rseq_delay_set_need_resched(void) +{ + if (current->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUESTED) { + set_tsk_need_resched(current); + return true; + } + return false; +} +#else +static inline bool __rseq_delay_resched(void) { return false; } +static inline void rseq_delay_resched_arm_timer(void) { } +static inline void rseq_delay_resched_tick(void) { } +static inline bool rseq_delay_set_need_resched(void) { return false; } +#endif + #ifdef CONFIG_SCHED_CORE extern void sched_core_free(struct task_struct *tsk); extern void sched_core_fork(struct task_struct *p); diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index c233aae5eac9..25fc636b17d5 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -26,6 +26,7 @@ enum rseq_cs_flags_bit { RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT =3D 0, RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT =3D 1, RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT =3D 2, + RSEQ_CS_FLAG_DELAY_RESCHED_BIT =3D 3, }; =20 enum rseq_cs_flags { @@ -35,6 +36,8 @@ enum rseq_cs_flags { (1U << RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT), RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE =3D (1U << RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT), + RSEQ_CS_FLAG_DELAY_RESCHED =3D + (1U << RSEQ_CS_FLAG_DELAY_RESCHED_BIT), }; =20 /* @@ -128,6 +131,10 @@ struct rseq { * - RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE * Inhibit instruction sequence block restart on migration for * this thread. + * - RSEQ_CS_FLAG_DELAY_RESCHED + * Request by user thread to delay preemption. With use + * of a timer, kernel grants extra cpu time upto 30us for this + * thread before being rescheduled. */ __u32 flags; =20 diff --git a/init/Kconfig b/init/Kconfig index ce76e913aa2b..3005abab77cf 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1130,6 +1130,13 @@ config SCHED_MM_CID def_bool y depends on SMP && RSEQ =20 +config RSEQ_RESCHED_DELAY + def_bool y + depends on SMP && RSEQ && SCHED_HRTICK + help + This feature enables a thread to request extending its time slice on + the cpu by delaying preemption. + config UCLAMP_TASK_GROUP bool "Utilization clamping per group of tasks" depends on CGROUP_SCHED diff --git a/kernel/entry/common.c b/kernel/entry/common.c index a8dd1f27417c..3d2d670980ec 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -82,13 +82,31 @@ noinstr void syscall_enter_from_user_mode_prepare(struc= t pt_regs *regs) /* Workaround to allow gradual conversion of architecture code */ void __weak arch_do_signal_or_restart(struct pt_regs *regs) { } =20 +static inline bool rseq_delay_resched(unsigned long ti_work) +{ + if (!IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY)) + return false; + + if (unlikely(current->rseq_delay_resched !=3D RSEQ_RESCHED_DELAY_PROBE)) + return false; + + if (!(ti_work & (_TIF_NEED_RESCHED|_TIF_NEED_RESCHED_LAZY))) + return false; + + if (__rseq_delay_resched()) { + clear_tsk_need_resched(current); + return true; + } + return false; +} + /** * exit_to_user_mode_loop - do any pending work before leaving to user spa= ce * @regs: Pointer to pt_regs on entry stack * @ti_work: TIF work flags as read by the caller */ __always_inline unsigned long exit_to_user_mode_loop(struct pt_regs *regs, - unsigned long ti_work) + unsigned long ti_work, bool irq) { /* * Before returning to user space ensure that all pending work @@ -98,8 +116,10 @@ __always_inline unsigned long exit_to_user_mode_loop(st= ruct pt_regs *regs, =20 local_irq_enable_exit_to_user(ti_work); =20 - if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) - schedule(); + if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) { + if (likely(!irq || !rseq_delay_resched(ti_work))) + schedule(); + } =20 if (ti_work & _TIF_UPROBE) uprobe_notify_resume(regs); @@ -181,7 +201,7 @@ noinstr void irqentry_enter_from_user_mode(struct pt_re= gs *regs) noinstr void irqentry_exit_to_user_mode(struct pt_regs *regs) { instrumentation_begin(); - exit_to_user_mode_prepare(regs); + exit_to_user_mode_prepare(regs, true); instrumentation_end(); exit_to_user_mode(); } diff --git a/kernel/rseq.c b/kernel/rseq.c index b7a1ec327e81..8b6af4e12142 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -448,6 +448,40 @@ void __rseq_handle_notify_resume(struct ksignal *ksig,= struct pt_regs *regs) force_sigsegv(sig); } =20 +#ifdef CONFIG_RSEQ_RESCHED_DELAY +bool __rseq_delay_resched(void) +{ + struct task_struct *t =3D current; + u32 flags; + + if (copy_from_user_nofault(&flags, &t->rseq->flags, sizeof(flags))) + return false; + + if (!(flags & RSEQ_CS_FLAG_DELAY_RESCHED)) + return false; + + flags &=3D ~RSEQ_CS_FLAG_DELAY_RESCHED; + if (copy_to_user_nofault(&t->rseq->flags, &flags, sizeof(flags))) + return false; + + t->rseq_delay_resched =3D RSEQ_RESCHED_DELAY_REQUESTED; + + return true; +} + +void rseq_delay_resched_arm_timer(void) +{ + if (unlikely(current->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUES= TED)) + hrtick_local_start(30 * NSEC_PER_USEC); +} + +void rseq_delay_resched_tick(void) +{ + if (current->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUESTED) + set_tsk_need_resched(current); +} +#endif /* CONFIG_RSEQ_RESCHED_DELAY */ + #ifdef CONFIG_DEBUG_RSEQ =20 /* @@ -493,6 +527,8 @@ SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32, = rseq_len, current->rseq =3D NULL; current->rseq_sig =3D 0; current->rseq_len =3D 0; + if (IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY)) + current->rseq_delay_resched =3D RSEQ_RESCHED_DELAY_NONE; return 0; } =20 @@ -561,6 +597,8 @@ SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32, = rseq_len, current->rseq =3D rseq; current->rseq_len =3D rseq_len; current->rseq_sig =3D sig; + if (IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY)) + current->rseq_delay_resched =3D RSEQ_RESCHED_DELAY_PROBE; =20 /* * If rseq was previously inactive, and has just been diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 4ad7cf3cfdca..e75ecbb2c1f7 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -845,6 +845,8 @@ static enum hrtimer_restart hrtick(struct hrtimer *time= r) =20 WARN_ON_ONCE(cpu_of(rq) !=3D smp_processor_id()); =20 + rseq_delay_resched_tick(); + rq_lock(rq, &rf); update_rq_clock(rq); rq->donor->sched_class->task_tick(rq, rq->curr, 1); @@ -918,6 +920,16 @@ void hrtick_start(struct rq *rq, u64 delay) =20 #endif /* CONFIG_SMP */ =20 +void hrtick_local_start(u64 delay) +{ + struct rq *rq =3D this_rq(); + struct rq_flags rf; + + rq_lock(rq, &rf); + hrtick_start(rq, delay); + rq_unlock(rq, &rf); +} + static void hrtick_rq_init(struct rq *rq) { #ifdef CONFIG_SMP @@ -6740,6 +6752,9 @@ static void __sched notrace __schedule(int sched_mode) picked: clear_tsk_need_resched(prev); clear_preempt_need_resched(); + if (IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY) && + prev->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUESTED) + prev->rseq_delay_resched =3D RSEQ_RESCHED_DELAY_PROBE; rq->last_seen_need_resched_ns =3D 0; =20 is_switch =3D prev !=3D next; diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c index ee5641757838..e684a77ed1fb 100644 --- a/kernel/sched/syscalls.c +++ b/kernel/sched/syscalls.c @@ -1379,6 +1379,10 @@ static void do_sched_yield(void) */ SYSCALL_DEFINE0(sched_yield) { + /* Reschedule if scheduler time delay was granted */ + if (rseq_delay_set_need_resched()) + return 0; + do_sched_yield(); return 0; } --=20 2.43.5 From nobody Mon Oct 6 04:59:32 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 B3EF32D8DB0 for ; Thu, 24 Jul 2025 16:16:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373805; cv=none; b=XrJZpj/UtEcBYpcvs4mBvAZ51lSKNtuEVLL9r8u7mYeVjtNRU5Ew2rDcSdJXcAt9J890SVFroo4gVZuEW5QiDU7YAk9+Xi3G9eP6J7+pcVcFjO3z7WEbqGd/VIomcffbThDfQGIJdT1/coi7HnpysDKJrMavJGRymO+yJ9lIbtg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373805; c=relaxed/simple; bh=B7s/4SwhcXLfKKRSXxajH/9NgvXl2f+c5YpJ/nPtgTY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rEVJbvmrytTEy0Pri1Txvl1/hTAkATM8xLBT4k81IXq2ZLmlcOznN2FGhSuobZkydZQWgEdOELMVLUkyfeNN0gj21LmEXQRqiM/hyZgQVVwWRUG+jOKmbziVW0vtzN5iXaLi2R0Br781ztShehWFJ2WXASXxB4aAXM0tC58F/Oc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=dxuJT5nP; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="dxuJT5nP" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRNr0002826; Thu, 24 Jul 2025 16:16:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=/VFCn W/nypHlOlaZHglI2yhAU7NrgzcOS3Exv0lHRh4=; b=dxuJT5nPemWC1eyWuhH08 d/NnvbRPwGLBgO/RfQKmPLf1BSrgKrdBHsVmtzBEAp54RMdbKcueNRNTIBDtYJZm iNqHHww+jUByui4I6Larr8Ge9J+A1ojr4RovjInJyApXKenbj8qMCC5MZKkXLdc6 Ak/Bbsu2CYwTq+ZIwp8wJxlcdCCMDDKB8d7dWqIZ7niK0bP5l7NhWm1HqPwYPcGm 6x7f9t5fDKH8T6tvtczFCuBRbE6DHddy8teUKHCLT/YnsBq8HW4pUAvy0GlhygoX oiLoFOxWl7kiA6z/jei1ZsOH/rbrtrCtxHbjgb6/vDMgNWyZ+aSs83MfVfUg2pGC A== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 482cwhveb5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:29 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OFGbJT014452; Thu, 24 Jul 2025 16:16:29 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfpx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:29 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNK034466; Thu, 24 Jul 2025 16:16:28 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:28 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 02/11] sched: Indicate if thread got rescheduled Date: Thu, 24 Jul 2025 16:16:16 +0000 Message-ID: <20250724161625.2360309-3-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Proofpoint-GUID: okQISYXcqNSms0cwarjsW-q8YBYkaaum X-Proofpoint-ORIG-GUID: okQISYXcqNSms0cwarjsW-q8YBYkaaum X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfXzgggtzVlg266 wiJJf6O+zUuzvDuy+acMThAOmQaG2bSbyHfsb13tLz279fNjGQxQi5tFggfWJkSgjq5jwPOI1yy OkyFv3YmQ/Gb/sqIqxVJujt+pb1xJO60TSlADAGDkd2XAj9l1cIpznICDwM6PedunSyztcGol54 AiwF92ZNrVifkV+kJXl9kM2NILvOkeqnYisGyswxfmCSUKd0Lvm1nzxHWzkLeagCAtnQakMXhHD 19L3v2jWu0ByYDteh86MpK/0fIHhmIR6rwpWpkf8Se1LPLMZeF+Aa7eZxrzdafCtGdYxL/aJyHm kwUyrve2lr9BjUrLVQTR64YPQMIhrqn1r7uLdE9bGDok23pdC3G5yXqlCG8ZRb6k6va11XYCrWB P3sKffqODxkjufcqo+CL+/9VLmpWzKhFios7s6HOL0c6hCOJvUGz3wo1/IWfQLLukgfgMepQ X-Authority-Analysis: v=2.4 cv=IPoCChvG c=1 sm=1 tr=0 ts=68825c5d b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=NiUtxhHkKI-ILPi3m6QA:9 cc=ntf awl=host:12061 Content-Type: text/plain; charset="utf-8" Use a bit in rseq flags to indicate if the thread got rescheduled after the cpu time extension was graned. The user thread can check this flag before calling sched_yield() to yield the cpu. Signed-off-by: Prakash Sangappa --- include/linux/sched.h | 2 ++ include/uapi/linux/rseq.h | 10 ++++++++++ kernel/rseq.c | 13 +++++++++++++ kernel/sched/core.c | 5 ++--- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 5d2819afd481..5df055f2dd9e 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -2258,6 +2258,7 @@ unsigned long sched_cpu_util(int cpu); extern bool __rseq_delay_resched(void); extern void rseq_delay_resched_arm_timer(void); extern void rseq_delay_resched_tick(void); +extern void rseq_delay_resched_clear(struct task_struct *tsk); static inline bool rseq_delay_set_need_resched(void) { if (current->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUESTED) { @@ -2271,6 +2272,7 @@ static inline bool __rseq_delay_resched(void) { retur= n false; } static inline void rseq_delay_resched_arm_timer(void) { } static inline void rseq_delay_resched_tick(void) { } static inline bool rseq_delay_set_need_resched(void) { return false; } +static inline void rseq_delay_resched_clear(struct task_struct *tsk) { } #endif =20 #ifdef CONFIG_SCHED_CORE diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index 25fc636b17d5..f4813d931387 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -27,6 +27,7 @@ enum rseq_cs_flags_bit { RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT =3D 1, RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT =3D 2, RSEQ_CS_FLAG_DELAY_RESCHED_BIT =3D 3, + RSEQ_CS_FLAG_RESCHEDULED_BIT =3D 4, }; =20 enum rseq_cs_flags { @@ -38,6 +39,9 @@ enum rseq_cs_flags { (1U << RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT), RSEQ_CS_FLAG_DELAY_RESCHED =3D (1U << RSEQ_CS_FLAG_DELAY_RESCHED_BIT), + RSEQ_CS_FLAG_RESCHEDULED =3D + (1U << RSEQ_CS_FLAG_RESCHEDULED_BIT), + }; =20 /* @@ -135,6 +139,12 @@ struct rseq { * Request by user thread to delay preemption. With use * of a timer, kernel grants extra cpu time upto 30us for this * thread before being rescheduled. + * - RSEQ_CS_FLAG_RESCHEDULED + * Set by kernel if the thread was rescheduled in the extra time + * granted due to request RSEQ_CS_DELAY_RESCHED. This bit is + * checked by the thread before calling sched_yield() to yield + * cpu. User thread sets this bit to 0, when setting + * RSEQ_CS_DELAY_RESCHED to request preemption delay. */ __u32 flags; =20 diff --git a/kernel/rseq.c b/kernel/rseq.c index 8b6af4e12142..6331b653b402 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -480,6 +480,19 @@ void rseq_delay_resched_tick(void) if (current->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUESTED) set_tsk_need_resched(current); } + +void rseq_delay_resched_clear(struct task_struct *tsk) +{ + u32 flags; + + if (tsk->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUESTED) { + tsk->rseq_delay_resched =3D RSEQ_RESCHED_DELAY_PROBE; + if (copy_from_user_nofault(&flags, &tsk->rseq->flags, sizeof(flags))) + return; + flags |=3D RSEQ_CS_FLAG_RESCHEDULED; + copy_to_user_nofault(&tsk->rseq->flags, &flags, sizeof(fla= gs)); + } +} #endif /* CONFIG_RSEQ_RESCHED_DELAY */ =20 #ifdef CONFIG_DEBUG_RSEQ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index e75ecbb2c1f7..ba1e4f6981cd 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6752,9 +6752,8 @@ static void __sched notrace __schedule(int sched_mode) picked: clear_tsk_need_resched(prev); clear_preempt_need_resched(); - if (IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY) && - prev->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUESTED) - prev->rseq_delay_resched =3D RSEQ_RESCHED_DELAY_PROBE; + if(IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY)) + rseq_delay_resched_clear(prev); rq->last_seen_need_resched_ns =3D 0; =20 is_switch =3D prev !=3D next; --=20 2.43.5 From nobody Mon Oct 6 04:59:32 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 0B1842EA48B for ; Thu, 24 Jul 2025 16:16:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373807; cv=none; b=DIIpvfFErkVxbI0NF6Teiu1sw+PEGfuNaXF2CsYh5H1zEgiYdx94bTWErh0jH27ty3er+ywZZ8xylO7GJ4rwVWII8s74vlSi5+VreoJOhQgM/AE6qFONwfy3D6JQNN67VEbbbQGhDuewgXsfWLGWlamHW0nrZTv8T7SQTa2JUW4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373807; c=relaxed/simple; bh=d/Sya67YUz92KVXJgu+KViDXRxu/TvcHjYJYdwaUDE8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=srhM23gpE82i7nTXqbSIsnXLFSCa0oKw5hf5jU/FoSsnTaTwQiQbhvIj2EZoEPX1SUKPrnuWR3DZX/3wrourZTAh1ZYxpinZZ+oS5zkVsIrIX7YSsDtZbj0MlBEWy1ErXIq1QLUu3c2uE6jy3YcQ+PLBK8HOLIP4g2Wb3KxEBBM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=ees7Wt9j; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="ees7Wt9j" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRYs8013479; Thu, 24 Jul 2025 16:16:30 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=E69MX X5N3RDQTgQdWsVGB8Ww5H4iJVePOwS6I0wRxww=; b=ees7Wt9jwfF6d3CGhWOU5 V+95F2Z8VG42G7rlgEcVhyUqSP7HiQEjQCGNW8Rbruy79ZA6ovTxixoVYnQZJG10 8ZtbA8kL+7PoFF7FU0pXOa6k1KoJMjNiqk8mtqOSDNKw0+xft8t4jHEyjXj/K4Q5 Kyq7DE0OFfVOuBsS5zMGEW/XoT5ucZEJwIWgNY3dlne3q1b6B9VrFftZgyEZlaXQ VIWHqPEeuxAUaX97Wocugf9v+6Qnx2lhzg9+y7IV+DBrDQ6gY32d6Ko5yrtRdLmI LL9IuS10aH9aOvbzSz1T1yZm9ebmRFP3BW8T/CmUqnemt1Uz40Kxbe74Xaskfj6B A== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 48057r24kv-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:30 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OEcU8Y014625; Thu, 24 Jul 2025 16:16:29 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfqd-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:29 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNM034466; Thu, 24 Jul 2025 16:16:29 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:29 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 03/11] sched: Tunable to specify duration of time slice extension Date: Thu, 24 Jul 2025 16:16:17 +0000 Message-ID: <20250724161625.2360309-4-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Authority-Analysis: v=2.4 cv=MNRgmNZl c=1 sm=1 tr=0 ts=68825c5e b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=HDLVIH-f35ZAIw-40Y4A:9 cc=ntf awl=host:12061 X-Proofpoint-ORIG-GUID: 8vNw5XGHCu6YD7BrGWU_OaCHYoXDr-Hw X-Proofpoint-GUID: 8vNw5XGHCu6YD7BrGWU_OaCHYoXDr-Hw X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfX3OCiHz70RiqF zGCsmgZYtJf7xvLlrnFqGaRIubT6/l5pU5sWWhGsj5/Uada9qPSenEu2VBfLpgOwe/r19NZYs3y 8ycCu8y+OR+HDIfzZ+zZxSUSYrbsf2DEfZfDU2ZOZlWYl/Yf8C/myHwlB8ZzAXGK/Q4iLacePCt /ZYk8tFrbAzgX5up5GApwuRttoR3qfNIdKlCBgELcIByOZfOtjMyZFspJ2ilWxBI7X0J7XDu4aM Lrkx3HwUl9BbAhr6PNvQ5br94+ZDTpJCsWBbgPBZuMAgfSmhc11gsaKW8VjWjfwMGg+zK/yw8OD xdqc+YVCBMO3tpIu8/pGQDd/+6Ik/6+olJ/8SmiTsjWrdnd1Xo2HdzIjxVu2w5EFQ5t4IjUbGWh 3R7fQ/Ic4P/M+yVd+xCHyq41A2thIyBVoC2gEr/smc48u3DBL7ML3Mrr2hxKRDg6VHq+GHsm Content-Type: text/plain; charset="utf-8" Add a tunable to specify duration of scheduler time slice extension. The default will be set to 30us and the max value that can be specified is 100us. Setting it to 0, disables scheduler time slice extension. Signed-off-by: Prakash Sangappa --- .../admin-guide/kernel-parameters.txt | 8 ++++ Documentation/admin-guide/sysctl/kernel.rst | 8 ++++ include/linux/sched.h | 5 +++ include/uapi/linux/rseq.h | 5 ++- kernel/rseq.c | 8 +++- kernel/sched/core.c | 40 +++++++++++++++++++ 6 files changed, 70 insertions(+), 4 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt index 0ee6c5314637..1e0f86cda0db 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -6398,6 +6398,14 @@ =20 sched_verbose [KNL,EARLY] Enables verbose scheduler debug messages. =20 + sched_preempt_delay_us=3D [KNL] + Scheduler preemption delay in microseconds. + Allowed range is 0 to 100us. A thread can request + extending its scheduler time slice on the cpu by + delaying preemption. Duration of preemption delay + granted is specified by this parameter. Setting it + to 0 will disable this feature. + schedstats=3D [KNL,X86] Enable or disable scheduled statistics. Allowed values are enable and disable. This feature incurs a small amount of overhead in the scheduler diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/ad= min-guide/sysctl/kernel.rst index dd49a89a62d3..f446347215c3 100644 --- a/Documentation/admin-guide/sysctl/kernel.rst +++ b/Documentation/admin-guide/sysctl/kernel.rst @@ -1232,6 +1232,14 @@ Documentation/accounting/delay-accounting.rst. Enabl= ing this feature incurs a small amount of overhead in the scheduler but is useful for debugging and performance tuning. It is required by some tools such as iotop. =20 +sched_preempt_delay_us +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Scheduler preemption delay in microseconds. Allowed range is 0 to 100us. +A thread can request extending its scheduler time slice on the cpu by +delaying preemption. Duration of preemption delay granted is specified by +this parameter. Setting it to 0 will disable this feature. + sched_schedstats =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 diff --git a/include/linux/sched.h b/include/linux/sched.h index 5df055f2dd9e..5ba3e33f6252 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -406,6 +406,11 @@ static inline void sched_domains_mutex_lock(void) { } static inline void sched_domains_mutex_unlock(void) { } #endif =20 +#ifdef CONFIG_RSEQ_RESCHED_DELAY +/* Scheduler time slice extension duration */ +extern unsigned int sysctl_sched_preempt_delay_us; +#endif + struct sched_param { int sched_priority; }; diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index f4813d931387..015534f064af 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -137,8 +137,9 @@ struct rseq { * this thread. * - RSEQ_CS_FLAG_DELAY_RESCHED * Request by user thread to delay preemption. With use - * of a timer, kernel grants extra cpu time upto 30us for this - * thread before being rescheduled. + * of a timer, kernel grants extra cpu time upto the tunable + * 'sched_preempt_delay_us' value for this thread before it gets + * rescheduled. * - RSEQ_CS_FLAG_RESCHEDULED * Set by kernel if the thread was rescheduled in the extra time * granted due to request RSEQ_CS_DELAY_RESCHED. This bit is diff --git a/kernel/rseq.c b/kernel/rseq.c index 6331b653b402..3107bbc9b77c 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -454,6 +454,9 @@ bool __rseq_delay_resched(void) struct task_struct *t =3D current; u32 flags; =20 + if (!sysctl_sched_preempt_delay_us) + return false; + if (copy_from_user_nofault(&flags, &t->rseq->flags, sizeof(flags))) return false; =20 @@ -471,8 +474,9 @@ bool __rseq_delay_resched(void) =20 void rseq_delay_resched_arm_timer(void) { - if (unlikely(current->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUES= TED)) - hrtick_local_start(30 * NSEC_PER_USEC); + if (unlikely(sysctl_sched_preempt_delay_us && + current->rseq_delay_resched =3D=3D RSEQ_RESCHED_DELAY_REQUESTED)) + hrtick_local_start(sysctl_sched_preempt_delay_us * NSEC_PER_USEC); } =20 void rseq_delay_resched_tick(void) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index ba1e4f6981cd..03834ac426d0 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -149,6 +149,16 @@ __read_mostly int sysctl_resched_latency_warn_once =3D= 1; */ __read_mostly unsigned int sysctl_sched_nr_migrate =3D SCHED_NR_MIGRATE_BR= EAK; =20 +#ifdef CONFIG_RSEQ_RESCHED_DELAY +/* + * Scheduler time slice extension, duration in microsecs. + * Max value allowed 100us, default is 30us. + * If set to 0, scheduler time slice extension is disabled. + */ +#define SCHED_PREEMPT_DELAY_DEFAULT_US 30 +__read_mostly unsigned int sysctl_sched_preempt_delay_us =3D SCHED_PREEMPT= _DELAY_DEFAULT_US; +#endif + __read_mostly int scheduler_running; =20 #ifdef CONFIG_SCHED_CORE @@ -4678,6 +4688,25 @@ static int sysctl_schedstats(const struct ctl_table = *table, int write, void *buf #endif /* CONFIG_PROC_SYSCTL */ #endif /* CONFIG_SCHEDSTATS */ =20 +#ifdef CONFIG_PROC_SYSCTL +#ifdef CONFIG_RSEQ_RESCHED_DELAY +static int sysctl_sched_preempt_delay(const struct ctl_table *table, int w= rite, + void *buffer, size_t *lenp, loff_t *ppos) +{ + int err; + + err =3D proc_dointvec_minmax(table, write, buffer, lenp, ppos); + if (err < 0) + return err; + if (sysctl_sched_preempt_delay_us > SCHED_PREEMPT_DELAY_DEFAULT_US) + pr_warn("Sched preemption delay set to %d us is higher than the default = value %d us\n", + sysctl_sched_preempt_delay_us, SCHED_PREEMPT_DELAY= _DEFAULT_US); + + return err; +} +#endif /* CONFIG_RSEQ_RESCHED_DELAY */ +#endif /* CONFIG_PROC_SYSCTL */ + #ifdef CONFIG_SYSCTL static const struct ctl_table sched_core_sysctls[] =3D { #ifdef CONFIG_SCHEDSTATS @@ -4725,6 +4754,17 @@ static const struct ctl_table sched_core_sysctls[] = =3D { .extra2 =3D SYSCTL_FOUR, }, #endif /* CONFIG_NUMA_BALANCING */ +#ifdef CONFIG_RSEQ_RESCHED_DELAY + { + .procname =3D "sched_preempt_delay_us", + .data =3D &sysctl_sched_preempt_delay_us, + .maxlen =3D sizeof(unsigned int), + .mode =3D 0644, + .proc_handler =3D sysctl_sched_preempt_delay, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D SYSCTL_ONE_HUNDRED, + }, +#endif /* CONFIG_RSEQ_RESCHED_DELAY */ }; static int __init sched_core_sysctl_init(void) { --=20 2.43.5 From nobody Mon Oct 6 04:59:32 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 E6C302D94A6 for ; Thu, 24 Jul 2025 16:16:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373805; cv=none; b=B4dKylbX9pdo1aSOBadiymIIhe0GWBKLdpbXSRkfDy9bKVCz7RxjUhjxnlYFNYDSYYzqHfNR8tpWemd8lRznZkfRBakAxfmSuocZgp+yB/vPsJmxuPkFtW/a6ldDFD98rxpCmvXazYorx+Ks4hhJRuISI4Y4twWFuigYnzC5uXc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373805; c=relaxed/simple; bh=2fzRUyXiGNETjIdqtemJXLlaFmmHHgsF7G62DkRCQMY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BaduMLF1L8eg27m0kMpoJavW22TV7FAM+ajeiv3oIL5yUkUTXTKMeN7fDWQzuG/mPjHK4FaS0m7Oj+Ved3YL0DE8slpjEn2dwQQIhsHAJJUUVggtKy+bgUKig03teCoT9XIYCVz2mwTh/Z85ifKR2Czfs+GADpoojAtzVQELbas= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=LZAa18Ln; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="LZAa18Ln" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRQY8002840; Thu, 24 Jul 2025 16:16:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=P5+jx V3X25yA5sDq24DEwL3ptDu+SG+9l5TqV06zd6Y=; b=LZAa18Lnh3QaIKJcNEAR2 D0dN6LRJn4AX8l51QZdKxr0pp+AbW2jULay2CBiWmfEKD077BEpMASiPTs4zhpG+ asbAqZ9aTPkQiRcW1E88epJ24MiAuoP8G3hxa4+rvYYeFOar6lspOx2t8+Jppebx hc3juu4I8gNhv5TdMScffbgakrrEszuwusuuWDsIA20L0Nwv2eP9O6a/BsmUJw+W YKwRbrhpOs/3WHnCu8P9WEQA8x/kCr9C4equpW9UCdOuf6mZA0Q37nUq8FtkpuoI Bg99+K4OjqkYkAjMQoKCan6Zu0493aDMwWPuw0KUlDx8aeylciifR7PIfKCxMSDo Q== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 482cwhveb6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:30 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OEhIbP014457; Thu, 24 Jul 2025 16:16:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfqq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:30 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNO034466; Thu, 24 Jul 2025 16:16:29 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:29 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 04/11] sched: Add scheduler stat for cpu time slice extension Date: Thu, 24 Jul 2025 16:16:18 +0000 Message-ID: <20250724161625.2360309-5-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Proofpoint-GUID: mhZxNQFC5H001ognogBwOPNCFIastBNE X-Proofpoint-ORIG-GUID: mhZxNQFC5H001ognogBwOPNCFIastBNE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfXwaOQeB1IVbEp 7zsc3Zl3p0eNMjZtMBI8qkz1GuN8hVXawN9a+YD7htUBZPMHqIppXALBnUj/wu3KkROgPnjOL6J CTlXv1B+W4J71vK+YMYSeH8RKAaicjwpKNC93Nyo4Hw6I3mZDVZdZNynEQ+15Inq5gJ9I+IROn7 WqvirOHI7uYU606QAePDPhVdKdGH3c7u0bu56q2rWRg9EJ+hEtc8b61F2qeKir9QLbj9Yg06hKt WrZz18AmHdRBbj0VZSSBPvjzUK3DhvOrsyL4FNavd2TL3ocaS15PVqC5EWiqekQbhrNclWss0SS LLZk0/+8kARYkOvPUwoYzVCe9w8BFnhbOhjvnbJDH66eqTxta0EerhLGpGrwl4x4Sf0AtPX5fFH DqVnLOXIokZp79KSFO2PTgZidRa7pwq9GW/DMz8Xn2z+RHur72sx+jTenF+TLdW+RM/B5FqW X-Authority-Analysis: v=2.4 cv=IPoCChvG c=1 sm=1 tr=0 ts=68825c5e b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=OT5oSfvlyc5tXnlsM0wA:9 cc=ntf awl=host:12061 Content-Type: text/plain; charset="utf-8" Add scheduler stat to record number of times the thread was granted cpu time slice extension. Signed-off-by: Prakash Sangappa --- include/linux/sched.h | 7 +++++++ kernel/rseq.c | 1 + kernel/sched/core.c | 7 +++++++ kernel/sched/debug.c | 4 ++++ 4 files changed, 19 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index 5ba3e33f6252..5c5868c555f0 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -339,6 +339,9 @@ extern void io_schedule_finish(int token); extern long io_schedule_timeout(long timeout); extern void io_schedule(void); extern void hrtick_local_start(u64 delay); +#ifdef CONFIG_RSEQ_RESCHED_DELAY +extern void update_stat_preempt_delayed(struct task_struct *t); +#endif =20 /* wrapper function to trace from this header file */ DECLARE_TRACEPOINT(sched_set_state_tp); @@ -569,6 +572,10 @@ struct sched_statistics { u64 nr_wakeups_passive; u64 nr_wakeups_idle; =20 +#ifdef CONFIG_RSEQ_RESCHED_DELAY + u64 nr_preempt_delay_granted; +#endif + #ifdef CONFIG_SCHED_CORE u64 core_forceidle_sum; #endif diff --git a/kernel/rseq.c b/kernel/rseq.c index 3107bbc9b77c..6ca3ca959b66 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -468,6 +468,7 @@ bool __rseq_delay_resched(void) return false; =20 t->rseq_delay_resched =3D RSEQ_RESCHED_DELAY_REQUESTED; + update_stat_preempt_delayed(t); =20 return true; } diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 03834ac426d0..1ddb45b4b46a 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -940,6 +940,13 @@ void hrtick_local_start(u64 delay) rq_unlock(rq, &rf); } =20 +#ifdef CONFIG_RSEQ_RESCHED_DELAY +void update_stat_preempt_delayed(struct task_struct *t) +{ + schedstat_inc(t->stats.nr_preempt_delay_granted); +} +#endif + static void hrtick_rq_init(struct rq *rq) { #ifdef CONFIG_SMP diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 9135d5c2edea..831b5bbeb805 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -1225,6 +1225,10 @@ void proc_sched_show_task(struct task_struct *p, str= uct pid_namespace *ns, P_SCHEDSTAT(nr_wakeups_passive); P_SCHEDSTAT(nr_wakeups_idle); =20 +#ifdef CONFIG_RSEQ_RESCHED_DELAY + P_SCHEDSTAT(nr_preempt_delay_granted); +#endif + avg_atom =3D p->se.sum_exec_runtime; if (nr_switches) avg_atom =3D div64_ul(avg_atom, nr_switches); --=20 2.43.5 From nobody Mon Oct 6 04:59:32 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 5ADAC2E543A for ; Thu, 24 Jul 2025 16:16:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373806; cv=none; b=Vj451Tg9qPIXAt4lMPxS4Tfp0ijvX5WVxpyiXEGBvta1p1mMxrhW7S70y7dFn2ecyAyP60cWzCTC5Du8lQ1GtU705ccfBHEi+xQH85toxk70gRr2btzRstydE86eN1Xu6x/pFOYj/TtXKvs4ei82YQlxvvtGcC3TVM4FP4Q5miI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373806; c=relaxed/simple; bh=3WzHJu6usC+m56NbD/kjNBsfG5+IwNlwF6onXzUcco4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LajBFxDP8nmL3zQbnVWXubKDXUbI6stLfFVVS5hAkHWBJJ4fb9TVRiTH/6Gt94p7jKF78x9AlFnycljfbdzqOKc7DeBCchJeu2lD1kQmsYuI5CgjudbRjkN+3Yv8LujiOnL1FZsNixJ4nkN7YYigtSlSxsZzV6jyQSAESBFqbEE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=AaW9It/D; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="AaW9It/D" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRMEJ013327; Thu, 24 Jul 2025 16:16:31 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=zlpVh IjjBzT+6Fn9XXjvk6E6KUVS/ttRU/9Gcq5Fn+s=; b=AaW9It/D3IoVflUsYj960 aBtJ7/mj6XCqTRGfRO2YTxLJovV5s0Niz+Kuh9biyfYkwWLwmj3bQv6zguPgbWDJ NZ9dfbnOM1EgIibrd0Exiol0ylZeFB+ht9UzRvBGzbqRm+2d3sCuUfmAywkH8irM KFs250UJKrciiQ1Nh7RuEgZ742QYCfscZfXVzu1JloX3hNNy9d8tfQ1syvNba0n2 qfiEQH96WC7ZVz1IvYy6YsgGtR4MEeI0v/zXjBTUKd2PsIYOkMX36c0WOiTZEDUp xF/uPVuDCBhY79kBKwSBlUmJ50ynVg0qJAdWiENrmYYW4NzYKCkW3qOF1E+B8+qc g== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 48057r24kw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:31 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OEjBWZ014403; Thu, 24 Jul 2025 16:16:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfr6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:30 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNQ034466; Thu, 24 Jul 2025 16:16:29 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:29 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 05/11] sched: Add tracepoint for sched time slice extension Date: Thu, 24 Jul 2025 16:16:19 +0000 Message-ID: <20250724161625.2360309-6-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Authority-Analysis: v=2.4 cv=MNRgmNZl c=1 sm=1 tr=0 ts=68825c5f b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=-a2y3q_jHnAO8POPY3MA:9 cc=ntf awl=host:12061 X-Proofpoint-ORIG-GUID: 0K9-b_ekbaZp7tzzbmWb_F3PnOjsse0F X-Proofpoint-GUID: 0K9-b_ekbaZp7tzzbmWb_F3PnOjsse0F X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfX+5Ma3sl9yiE3 WJh7AIouj1+j5Or4mYaYq/Yj8BNDAYy4trgpqFVyFAAplmbXvzuh5J8zLFdQUJQPLprnONZy8bu vV3fRVIUQdksaDSH109pN738WUgV2VYNp04XrrjlWRNjIylLLybgyunz0ZIyeZKOkHbG3FiR4lq ytGPQHD9OiC/ubKzGnMjIwF5sX5s5vLYoLhSDjlWAgUcrpsFwrHl6HN9VT0S2Z8FLIIEp89mVRs 5qXwg8Lr4kdYdpr6v25F4dIe0ptr5fTGOSPUFraZDTI2ETubTSBZte9F/DZ91NIfJCfgQWzSdTO fQ13zQm9IYj2q53TkXfk7JV9hFq3v4NPWyogRCyRKWZoRdxA4ZNyhBkEMR1SWIFMcAKtGJbx50M 4BiWR6iqxnC8ARvfeCPFc8JvlE05JGdRd/Rmd8yrRpPaS3lVbbT8DdnLJiCVZ2FY4zDVxUe+ Content-Type: text/plain; charset="utf-8" Trace thread's preemption getting delayed. Which can occur if the running thread requested extra time on cpu. Also, indicate the NEED_RESCHED flag, that is set on the thread which gets cleared. Signed-off-by: Prakash Sangappa --- include/trace/events/sched.h | 31 +++++++++++++++++++++++++++++++ kernel/entry/common.c | 2 ++ 2 files changed, 33 insertions(+) diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index 4e6b2910cec3..a4846579f377 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h @@ -296,6 +296,37 @@ TRACE_EVENT(sched_migrate_task, __entry->orig_cpu, __entry->dest_cpu) ); =20 +/* + * Tracepoint for delayed resched requested by task: + */ +TRACE_EVENT_CONDITION(sched_delay_resched, + + TP_PROTO(struct task_struct *p, unsigned int ti_work_cleared), + + TP_ARGS(p, ti_work_cleared), + + TP_CONDITION(ti_work_cleared), + + TP_STRUCT__entry( + __array( char, comm, TASK_COMM_LEN ) + __field( pid_t, pid ) + __field( int, cpu ) + __field( int, flg ) + ), + + TP_fast_assign( + memcpy(__entry->comm, p->comm, TASK_COMM_LEN); + __entry->pid =3D p->pid; + __entry->cpu =3D task_cpu(p); + __entry->flg =3D ti_work_cleared & (_TIF_NEED_RESCHED | + _TIF_NEED_RESCHED_LAZY); + ), + + TP_printk("comm=3D%s pid=3D%d cpu=3D%d resched_flg_cleared=3D0x%x", + __entry->comm, __entry->pid, __entry->cpu, __entry->flg) + +); + DECLARE_EVENT_CLASS(sched_process_template, =20 TP_PROTO(struct task_struct *p), diff --git a/kernel/entry/common.c b/kernel/entry/common.c index 3d2d670980ec..2635fecb83ff 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -12,6 +12,7 @@ =20 #include "common.h" =20 +#include #define CREATE_TRACE_POINTS #include =20 @@ -95,6 +96,7 @@ static inline bool rseq_delay_resched(unsigned long ti_wo= rk) =20 if (__rseq_delay_resched()) { clear_tsk_need_resched(current); + trace_sched_delay_resched(current, ti_work); return true; } return false; --=20 2.43.5 From nobody Mon Oct 6 04:59:32 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 5AE182EA493 for ; Thu, 24 Jul 2025 16:16:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373806; cv=none; b=iMN3ZV82XCOoy8mavlzWNAyLmRMtRsAutid0JcO/KYKGCENeqPCYP2zjDZahYUd2LgJAJJK95kdO0g9hkIMYmlB0xODCtM/U6Vl9RgQz/ViMAazRBNEjTfskdSyfULrcr3uSYCTnuBhSqVUAp1JB37qGTOoPSctil4HB3LPR5JQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373806; c=relaxed/simple; bh=bOkwpVY/Gsv62eCQGe3o5VZGmAnmYb8l9xLj4n61gLQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IOW2p17stOKqrl6GKyQ4oqr6sOE1lv6GUxYbsRH/l0HfG26Sx8qHFbrfWqKt7PuNkZKR3d9Z5VIQZGuGGY1wWBL09E7wlPahUiQeihOBtPLQX7LdXz6E1aA7yISXgQ5uRd5F4XNHETJLIi4LNZvOLRD5ymeIHXddm1f6uqAvXcI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=ITXEcKcU; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="ITXEcKcU" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRRdk002850; Thu, 24 Jul 2025 16:16:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=iUmhe cKkWU+OIR3wXYc7zBqQzdcel+64iEjdQOLWYtE=; b=ITXEcKcUPBcqkFmN3Ci9U D2LeprRN9gKVIMBjxWy7yS92aTtvwFBniwSuTu/XOIARwXiIvVgD5DgZfBgEXkaF 5XjqWj7OidZSojKPsaTFvR+2yQG8XLXWCWtKYXjAoCN34Ek4RleQ7fCMehFNDx8G z42a7MQpl0I+sCnbqKGLx4YhI4aE1QMP+M7NdrOgTxvsolckgufQgYiYXh0tZCjo zpHr+P10ux7aR1pM11lUfa9tPd6s6RBZsjAn9G6K7SggHqdCFTWoMwSJPXRYa1r+ xIADoy13zjIuE54hOLApY2Rg2dFKDhKKBI3tT7dYvSrY52TXi9W2hB12/5tc1Lc3 Q== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 482cwhveb7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:31 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OEu250014553; Thu, 24 Jul 2025 16:16:30 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfrg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:30 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNS034466; Thu, 24 Jul 2025 16:16:30 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:30 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 06/11] Add API to query supported rseq cs flags Date: Thu, 24 Jul 2025 16:16:20 +0000 Message-ID: <20250724161625.2360309-7-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Proofpoint-GUID: yh9zTwq3BvkqmRkFCyaZ5oPXayHU44RB X-Proofpoint-ORIG-GUID: yh9zTwq3BvkqmRkFCyaZ5oPXayHU44RB X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfX/AGEUbNoFjD3 SP0l2aEWqPSzDGkWn4CMnLD1aLv8MWZwTHh4Q8IUpftusBWmzjIY/yDCDDB0s291wkeX9gvT3f3 6e2UrvqgRn7Fwliqtv7XW9TYde1guLDndQvbdwuC5lxN/PKgfqOZw+x4bK4pkAVFfvW9UMxGuci UMfJ8RDo5guoIcf2AML7o0PPDbgTpKLfnQHvdJ/+sB0opvs9cThlK3kBwcCSqYTvCw2VqMfBwET qRk7dPWykOqBveB4UBy5m60xqZfgrdimiGWDL7902MQHGJGAAZE0M+e+3nrBH4xbg72/Wocvjz1 k/aNqbmN9dkSbtltg6jlNY89muV+qZZcUzFEe+ktwCv+II9inrCCvTTPxGUIX04QkFdsFcICokE z1E2ARZL7gIeQV9Vwv2kOCXoLAJ7W2MCDkOPZ1VEPZpeRo8JKMgm73FcRyXiaDfRzCxDbNYK X-Authority-Analysis: v=2.4 cv=IPoCChvG c=1 sm=1 tr=0 ts=68825c5f b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=XZOol5B-I9QkcwWuj0oA:9 cc=ntf awl=host:12061 Content-Type: text/plain; charset="utf-8" For the API, add a new flag to sys_rseq 'flags' argument called RSEQ_FLAG_QUERY_CS_FLAGS. When this flag is passed it returns a bit mask of all the supported rseq cs flags in the user provided rseq struct's 'flags' member. Signed-off-by: Prakash Sangappa --- include/uapi/linux/rseq.h | 1 + kernel/rseq.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index 015534f064af..44baea9dd10a 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -20,6 +20,7 @@ enum rseq_cpu_id_state { =20 enum rseq_flags { RSEQ_FLAG_UNREGISTER =3D (1 << 0), + RSEQ_FLAG_QUERY_CS_FLAGS =3D (1 << 1), }; =20 enum rseq_cs_flags_bit { diff --git a/kernel/rseq.c b/kernel/rseq.c index 6ca3ca959b66..7f4daeba6d0d 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -550,6 +550,21 @@ SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32,= rseq_len, return 0; } =20 + /* + * Return supported rseq_cs flags. + */ + if (flags & RSEQ_FLAG_QUERY_CS_FLAGS) { + u32 rseq_csflags =3D RSEQ_CS_FLAG_DELAY_RESCHED | + RSEQ_CS_FLAG_RESCHEDULED; + if (!IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY)) + return -EINVAL; + if (!rseq) + return -EINVAL; + if (copy_to_user(&rseq->flags, &rseq_csflags, sizeof(u32))) + return -EFAULT; + return 0; + } + if (unlikely(flags)) return -EINVAL; =20 --=20 2.43.5 From nobody Mon Oct 6 04:59:32 2025 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (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 380AF2ED859 for ; Thu, 24 Jul 2025 16:17:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.165.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373822; cv=none; b=Xb1KhS8xdOhxh8Kvv50GJuHsLxvTk9imCxRUtPgl8w7pw1gukAP+Qw80KMrTGe/jD4kTPkViml3lwa2P0B5to8Zp05lOX9eqiIZT7H7P3mt0eAAMpsCy9aWLuAe0nCqRL3D9Vgxi8a96QiUTxJ1qHa9IGN3P6YaksKguiS+7mqM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373822; c=relaxed/simple; bh=p7BICrBXt18Q5mn56gsDeVJElBImXEVjdFKPj1y2d+M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iSUhtKqrozFgmGlnY2cl9h+uKcWorUXfPuRzJJwAtyN7bBDOByf3sq3Z6Vd/JZhXCpFz+QRerlc+a12cij+v/pgnB/5KumlczC1lKZWCyVkr5zWOkADP+GdntxUXnbS8zEYN0c9gh5Yqbi5UJW974X6cLLBfB0Pqc92T3l6JAEQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=Zm7l2r+g; arc=none smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Zm7l2r+g" Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODROF0022324; Thu, 24 Jul 2025 16:16:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=Rxzbr XG6TMluERJ7iS9k/2q5owET8hmYAVD2ax9w6MY=; b=Zm7l2r+gggwMbEXaPpVS4 TVikEUtBa02J5iqVZBxK+SwQgSXTZCaoVCYj0aNdXPiTf950cojwymZHn8UuHgpj R5IxUlo8/GdJeuSweo7UV1op6/4fuviO7OS//uobfXnAF6agQZMBUDDqSbxxdN4a SMh5WhYplhfnqoupa2ZpoVQwn9aHh8iIUhJYQ6GDZiswci+lgwuCZvGfRBCvt4Hq XHq6KH6QHXh4orNSKuo5lpSMWlWihsSoHHbzRMLVexUIEZgNidmBaEyC7kZ5uBSK hMXPuXusiUm6fubAJmr7cJH3KqLVpslfMG9EW4qJd4xyxwKgVe++f6HfCzDLaWlK Q== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4805e9syck-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:32 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OFiYlc014492; Thu, 24 Jul 2025 16:16:31 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfru-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:31 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNU034466; Thu, 24 Jul 2025 16:16:30 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:30 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 07/11] sched: Add API to indicate not to delay scheduling Date: Thu, 24 Jul 2025 16:16:21 +0000 Message-ID: <20250724161625.2360309-8-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Authority-Analysis: v=2.4 cv=eqbfzppX c=1 sm=1 tr=0 ts=68825c60 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=xGzrbLGfahxIBTsCyEoA:9 cc=ntf awl=host:12061 X-Proofpoint-GUID: _qVD9nUPXC0Uv4aUR5V7ymW9OJv8kQxb X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfX5idxh2+P0Di7 v0ungqGPyA2dkieZ7krOSAN0BH8q3BbDSHDVag0/y+0+XtmWICnnBrv60x8g+GYmxWp5R+OtHxN uDChuSzHCqDw6R6kUbDsa1SZaABMxRsxjcKLz4VCZp8kAF3IS3U+L5deO4y0lkfbqSN9Us6u7Gw s3yW6YwQOe3Z5M0hty6k3qoe0G/A8pB7fN9RWgkt1/wLTo9WFj5Cy1f1cFL3JT81Zn0vbgKczlU rb8D62aHKF2GCK1EUyoJiz3wKrr0TO4taVarmdZiDYmVvAXlFFbfy4tcmKYcFY9yLgnxzdtiGG+ 1CphUgi8IZk7HM9F9g3gVcbZAz/kRHUY7J7DwXmW9K6ZeBamoCTu9jmZgZd3VYigHGgUdCxdiyH sR48IULXEa3Gkk4OZU6bjQmY5KTOEsgeT25zF6xQkOLPRNWLRxL0k8/SNAB/5JO6yRy9KiEE X-Proofpoint-ORIG-GUID: _qVD9nUPXC0Uv4aUR5V7ymW9OJv8kQxb Content-Type: text/plain; charset="utf-8" Add an API for user threads to request scheduler to not delay scheduling it when woken up to run. This is allowed only for RT threads. Suggested-by: Thomas Gleixner Signed-off-by: Prakash Sangappa --- include/linux/sched.h | 1 + include/uapi/linux/prctl.h | 3 +++ kernel/sys.c | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index 5c5868c555f0..3e8eb64658d1 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -1062,6 +1062,7 @@ struct task_struct { #endif unsigned in_nf_duplicate:1; unsigned rseq_delay_resched:2; + unsigned sched_nodelay:1; #ifdef CONFIG_PREEMPT_RT struct netdev_xmit net_xmit; #endif diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h index 6f9912c65595..907300cd4469 100644 --- a/include/uapi/linux/prctl.h +++ b/include/uapi/linux/prctl.h @@ -379,4 +379,7 @@ struct prctl_mm_map { # define PR_FUTEX_HASH_GET_SLOTS 2 # define PR_FUTEX_HASH_GET_IMMUTABLE 3 =20 +/* TASK sched nodelay request */ +#define PR_SET_SCHED_NODELAY 79 +#define PR_GET_SCHED_NODELAY 80 #endif /* _LINUX_PRCTL_H */ diff --git a/kernel/sys.c b/kernel/sys.c index a088a6b1ac23..2f8b4512c6e4 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -2890,6 +2890,24 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, a= rg2, unsigned long, arg3, case PR_FUTEX_HASH: error =3D futex_hash_prctl(arg2, arg3, arg4); break; + case PR_SET_SCHED_NODELAY: + if (arg3 || arg4 || arg5) + return -EINVAL; + if (current->sched_class !=3D &rt_sched_class) + return -EINVAL; + if (arg2) + current->sched_nodelay =3D 1; + else + current->sched_nodelay =3D 0; + break; + case PR_GET_SCHED_NODELAY: + if (arg2 || arg3 || arg4 || arg5) + return -EINVAL; + if (current->sched_class !=3D &rt_sched_class) + return -EINVAL; + error =3D (current->sched_nodelay =3D=3D 1); + break; + default: trace_task_prctl_unknown(option, arg2, arg3, arg4, arg5); error =3D -EINVAL; --=20 2.43.5 From nobody Mon Oct 6 04:59:33 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 7C1BF2D6611 for ; Thu, 24 Jul 2025 16:16:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373805; cv=none; b=Mt8ItzaS9QTnTDCeYuBP0SPzXeVvCJb5gH0mxm/+drce469jKS+cf+3+LppTDK2pM6CqzzcfucGnwB5anTxxXIkkS7KVnPXSYpj9awd2KSz9cYq+frK0cm61itr3nyaT7ZmfbkOQu1Swn2J6n7hMTfZp5oLJUzcPHt+Cop5BIYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373805; c=relaxed/simple; bh=ySNhdbxlZCtvk3UaOw/4oDcfE9xjXpX/pKKFwIhPgTQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lpIJtoKvHPI3zpYghgpXFXwV/eain464Nv7OBTa2GGh5c5XQpo/Qs07lTILr9TokFSSDS62IfZZvqaW/ZBn+aQOto3dwS2zMZSEh7XxxS8sP9i8RAVACn1W3um09FE30Bb/ubLgSEkBlY2qJ9eAALaJ39Xr1VORcFn4wtjfnq2c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=D3XCaRcG; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="D3XCaRcG" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRMf5012041; Thu, 24 Jul 2025 16:16:32 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=WesrW JEEwSKV0UWRGiNQlcTso0BdajliZqP89AEoOs4=; b=D3XCaRcGeGTmAaKQ8OV/J Rv+7DnaPX3jztXIQBo6gZlh5/2vgisBgfDF9PFgBAaklWrhu+AxYIVpvsp47JBkT CWZfynpMGGcwS7OLxYyixnc3fL287B/IbrBJ2YCanPxDxrAteNPw8WtBkBsOO8Vb fzPTF+fbHWn/tL0Rnv3Z4Zx08iFDj3nfVwe0ZOKFbSZSoGd2qg98xwDTZ8xF3msW MJTj3yakAXqeeHnCGxI+voDNKkxos9WZtyiEVPVuovvWsZM0zGkw4LqfDCnPT/pf 49Yshd5khwa6siV9CmTnRuem/fXqzH574oxuKgJaJKwAWlRMk0SsSX/21TJvBn/6 w== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4805hpj268-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:32 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OFuakO014382; Thu, 24 Jul 2025 16:16:31 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfs3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:31 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNW034466; Thu, 24 Jul 2025 16:16:31 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-9 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:31 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 08/11] sched: Add TIF_NEED_RESCHED_NODELAY infrastructure Date: Thu, 24 Jul 2025 16:16:22 +0000 Message-ID: <20250724161625.2360309-9-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Proofpoint-ORIG-GUID: lYpjFTa0XuRZjUf4EGJ07pJM5NXlDCab X-Authority-Analysis: v=2.4 cv=YY+95xRf c=1 sm=1 tr=0 ts=68825c60 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=MrrmpRPCrZFmlHDDrMoA:9 cc=ntf awl=host:12061 X-Proofpoint-GUID: lYpjFTa0XuRZjUf4EGJ07pJM5NXlDCab X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfX9SFGq1zSDQr0 mdOSPO3Akf9XplJ0f+Cxat7y5Px8xMU2FBBceg83dZC4WPt/0crDs077WyQ69LRgyFNdUHywkdB s/8AL9qre48VTIccZCUHU+G0KjvT1efnW5h3IIknuHCSrhU9RsSQNQLcI/bsNvBaGCwhvdNe25I Zp+D0CrpmKRBVDnbdAde+Fy4ppAXF6WG95URA7r3RBVhreHF1vwMWgULW8WWVyF8n86tkU2zPGl 4YXNiEI1UcPE5i7irAq/z/iU6IZgknRCOL16JCmMjG+lk/39DDpDkJa7zM39qCyRyK5lCbL0CXs 8fbbCAvdYB7Ivm5asixrG1M64/I0BLLlisaJ3KEvIRfqFrMLHnZ7wbJTqyap6C09o+zP1qHfO6V fSnahg53c7C1rM6Y6S+ZoT/Pe0rFPMZfaSv9fzw2xDHdYwO9y0xGlqvzdW9UMvTj4+hm/ByR Content-Type: text/plain; charset="utf-8" Add basic infrastructure to introduce a bit for nodelay resched. This is mainly used by RT threads to indicate it should not be delayed to be scheduled, by the thread running on the cpu that has requested extending its cpu time slice. Suggested-by: Thomas Gleixner Signed-off-by: Prakash Sangappa --- include/linux/entry-common.h | 4 ++-- include/linux/entry-kvm.h | 4 ++-- include/linux/sched.h | 3 ++- include/linux/thread_info.h | 11 ++++++++++- kernel/entry/common.c | 3 ++- kernel/entry/kvm.c | 3 ++- kernel/sched/core.c | 4 ++-- 7 files changed, 22 insertions(+), 10 deletions(-) diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index 7b258d2510f8..79510895f87a 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -66,8 +66,8 @@ #define EXIT_TO_USER_MODE_WORK \ (_TIF_SIGPENDING | _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ _TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY | \ - _TIF_PATCH_PENDING | _TIF_NOTIFY_SIGNAL | \ - ARCH_EXIT_TO_USER_MODE_WORK) + _TIF_NEED_RESCHED_NODELAY |_TIF_PATCH_PENDING | \ + _TIF_NOTIFY_SIGNAL | ARCH_EXIT_TO_USER_MODE_WORK) =20 /** * arch_enter_from_user_mode - Architecture specific sanity check for user= mode regs diff --git a/include/linux/entry-kvm.h b/include/linux/entry-kvm.h index 16149f6625e4..eb59f8185f42 100644 --- a/include/linux/entry-kvm.h +++ b/include/linux/entry-kvm.h @@ -18,8 +18,8 @@ =20 #define XFER_TO_GUEST_MODE_WORK \ (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY | _TIF_SIGPENDING | \ - _TIF_NOTIFY_SIGNAL | _TIF_NOTIFY_RESUME | \ - ARCH_XFER_TO_GUEST_MODE_WORK) + _TIF_NEED_RESCHED_NODELAY | _TIF_NOTIFY_SIGNAL | \ + _TIF_NOTIFY_RESUME | ARCH_XFER_TO_GUEST_MODE_WORK) =20 struct kvm_vcpu; =20 diff --git a/include/linux/sched.h b/include/linux/sched.h index 3e8eb64658d1..af3bf1923509 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -2093,7 +2093,8 @@ static inline void set_tsk_need_resched(struct task_s= truct *tsk) =20 static inline void clear_tsk_need_resched(struct task_struct *tsk) { - atomic_long_andnot(_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY, + atomic_long_andnot(_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY | + _TIF_NEED_RESCHED_NODELAY, (atomic_long_t *)&task_thread_info(tsk)->flags); } =20 diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index dd925d84fa46..ee7fa1f8f242 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h @@ -67,6 +67,14 @@ enum syscall_work_bit { #define _TIF_NEED_RESCHED_LAZY _TIF_NEED_RESCHED #endif =20 +#ifndef TIF_NEED_RESCHED_NODELAY +#ifdef CONFIG_ARCH_HAS_PREEMPT_NODELAY +#error Inconsistent PREEMPT_NODELAY +#endif +#define TIF_NEED_RESCHED_NODELAY TIF_NEED_RESCHED +#define _TIF_NEED_RESCHED_NODELAY _TIF_NEED_RESCHED +#endif + #ifdef __KERNEL__ =20 #ifndef arch_set_restart_data @@ -205,7 +213,8 @@ static __always_inline bool tif_test_bit(int bit) =20 static __always_inline bool tif_need_resched(void) { - return tif_test_bit(TIF_NEED_RESCHED); + return (tif_test_bit(TIF_NEED_RESCHED) || + tif_test_bit(TIF_NEED_RESCHED_NODELAY)); } =20 #ifndef CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES diff --git a/kernel/entry/common.c b/kernel/entry/common.c index 2635fecb83ff..15ddf335ad4a 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -118,7 +118,8 @@ __always_inline unsigned long exit_to_user_mode_loop(st= ruct pt_regs *regs, =20 local_irq_enable_exit_to_user(ti_work); =20 - if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) { + if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY | + _TIF_NEED_RESCHED_NODELAY)) { if (likely(!irq || !rseq_delay_resched(ti_work))) schedule(); } diff --git a/kernel/entry/kvm.c b/kernel/entry/kvm.c index 8485f63863af..f4c10bbb42ac 100644 --- a/kernel/entry/kvm.c +++ b/kernel/entry/kvm.c @@ -13,7 +13,8 @@ static int xfer_to_guest_mode_work(struct kvm_vcpu *vcpu,= unsigned long ti_work) return -EINTR; } =20 - if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) + if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY | + _TIF_NEED_RESCHED_NODELAY)) schedule(); =20 if (ti_work & _TIF_NOTIFY_RESUME) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 1ddb45b4b46a..035eec8911c2 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1141,13 +1141,13 @@ static void __resched_curr(struct rq *rq, int tif) =20 if (cpu =3D=3D smp_processor_id()) { set_ti_thread_flag(cti, tif); - if (tif =3D=3D TIF_NEED_RESCHED) + if (tif & (TIF_NEED_RESCHED | _TIF_NEED_RESCHED_NODELAY)) set_preempt_need_resched(); return; } =20 if (set_nr_and_not_polling(cti, tif)) { - if (tif =3D=3D TIF_NEED_RESCHED) + if (tif & (TIF_NEED_RESCHED | _TIF_NEED_RESCHED_NODELAY)) smp_send_reschedule(cpu); } else { trace_sched_wake_idle_without_ipi(cpu); --=20 2.43.5 From nobody Mon Oct 6 04:59:33 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 AA02E2EAB92 for ; Thu, 24 Jul 2025 16:16:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373807; cv=none; b=mDk27Y3hlblCb0GRBRhnPqpkqtZ7A6OcB3AnOkJKg9/J5Tm4WEbV5crvSLv4anwWL6UzaTPiqyK5bDkHmUVtw8c8ImysKQmbw3Ge4Q0g8mzzKlswV5bzHb5ekWNHU6hsa+gYlZRvZaBUhR2tG2UZqqcSPITOjPewVSJdUdKUuBU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373807; c=relaxed/simple; bh=WzDMjhtrij63D1Wchw5KY7l5YrcHibk05bu7jqh+tSc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Y6vgScxBfds4o9PcsQjHfvDohCk1cCIQPX1fyGpMuHridmRRy1aWzrFVmNYh2Fg50010nH/BOR7mq7GKPFVxoRwEvlQCs0CmsuSbijmoYQhzBSBgAtaB8CZ2vbaQJGCMOKEPENk26f4xjlH+dCUoxnvNU5bFUkzYIG0xEg3S1Fc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=an565Mhy; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="an565Mhy" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRSlB013384; Thu, 24 Jul 2025 16:16:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=EExTV jVes3B45GrPCTCkse+AO/P8tSAm6iyo/WLjQKI=; b=an565MhygqCiuAVKd+AhC WPRh6XxhgzUKr21ezgakRalSjpVf/4BgFDo2XkkFsi7EKWz2x5cbo5EQH9KAHbjP pN8yMYAIj1zAStLuPYN/J1UGPXwEy5o/DYDRSgF2hRz2eq9iOM8PhIHoFGip+xqA V1hbC/FVEXVLuDrG/F1w76C2AbpHgOYF/mg8FJ0zFMea+FUFpHmCERfKqqwDFoJC lGE+8mPDKPvzkRG5T/+RjEumNDSfv0KAwDaDpEwCVT5PMZDgB7IUctgT19OaAeLC XX2un6hbICfFy/MPTytlSfvH+eEJ2aJhX/n/BC2Q1tj3Ykk7HvLrHCscrpO68J9G w== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 48057r24ky-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:32 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OFRZwU014611; Thu, 24 Jul 2025 16:16:32 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfsm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:32 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNY034466; Thu, 24 Jul 2025 16:16:31 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-10 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:31 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 09/11] sched: Add nodelay scheduling Date: Thu, 24 Jul 2025 16:16:23 +0000 Message-ID: <20250724161625.2360309-10-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Authority-Analysis: v=2.4 cv=MNRgmNZl c=1 sm=1 tr=0 ts=68825c60 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=wwdHoo5uXkV_8ci4LmkA:9 cc=ntf awl=host:12061 X-Proofpoint-ORIG-GUID: 1KeYoU0hqspgGoK6MYEYfpxMsLFhxEqR X-Proofpoint-GUID: 1KeYoU0hqspgGoK6MYEYfpxMsLFhxEqR X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfXwS4b//ccepKx aWj9p6oA3dmsNZTaov85hbR4z2gFaVETK/S1GOR+9gsJm/stlOG7oBQJo83KR2sxaUOaMIDVvFB 8tLQVXbYtt+rCM1PUsVmucE/6dlCi621kJRh53uN4VSYyzg/OVOPy05CvgG4zq4iOURSvlDav7M f4JH1QaFZ4SizuBfB3CgH5x779tTAQ6FKSOsQ1hf3jsLNpBXLPy3AFND1pL3GcnLgVGamsW8Lvv zZCg2wFYrGjACMbMuXdZGm1ATwArOd2D37mbGoltMq6REtAiCcR68GcvyyLDoJ9l1+ZFKtVnzg0 PLx+SCAbzFlPq1ptyeGuR3xUqbMobCepua+GOq9iy1pG7qbw4v5Ol5GQFJJkjB5p4l/qvs+NsBO KvMKy4hmPxVPtxMzAuOFVrRqsMPL2T7O1yBtwbxAn6I8L3J0QkEI4d//jvFz5Xa5diXXF5+a Content-Type: text/plain; charset="utf-8" Realtime threads that are sensitive can indicate not to be delayed by a thr= ead running on th cpu, that has requested scheduler time slice extension. Suggested-by: Thomas Gleixner Signed-off-by: Prakash Sangappa --- init/Kconfig | 2 +- kernel/Kconfig.preempt | 3 +++ kernel/sched/core.c | 14 ++++++++++++++ kernel/sched/rt.c | 10 +++++----- kernel/sched/sched.h | 1 + 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/init/Kconfig b/init/Kconfig index 3005abab77cf..119448f0b9e1 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1132,7 +1132,7 @@ config SCHED_MM_CID =20 config RSEQ_RESCHED_DELAY def_bool y - depends on SMP && RSEQ && SCHED_HRTICK + depends on SMP && RSEQ && SCHED_HRTICK && ARCH_HAS_PREEMPT_NODELAY help This feature enables a thread to request extending its time slice on the cpu by delaying preemption. diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt index 54ea59ff8fbe..96809d8d8bcb 100644 --- a/kernel/Kconfig.preempt +++ b/kernel/Kconfig.preempt @@ -14,6 +14,9 @@ config PREEMPT_BUILD config ARCH_HAS_PREEMPT_LAZY bool =20 +config ARCH_HAS_PREEMPT_NODELAY + bool + choice prompt "Preemption Model" default PREEMPT_NONE diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 035eec8911c2..e9be8a6b8851 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1185,6 +1185,20 @@ void resched_curr_lazy(struct rq *rq) __resched_curr(rq, get_lazy_tif_bit()); } =20 +#ifdef CONFIG_RSEQ_RESCHED_DELAY +void resched_curr_nodelay(struct rq *rq, struct task_struct *p) +{ + int tif; + tif =3D p->sched_nodelay ? TIF_NEED_RESCHED_NODELAY : TIF_NEED_RESCHED; + __resched_curr(rq, tif); +} +#else +void resched_curr_nodelay(struct rq *rq, struct task_struct *p) +{ + __resched_curr(rq, TIF_NEED_RESCHED); +} +#endif + void resched_cpu(int cpu) { struct rq *rq =3D cpu_rq(cpu); diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index e40422c37033..1beae971799e 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -1027,7 +1027,7 @@ static void update_curr_rt(struct rq *rq) rt_rq->rt_time +=3D delta_exec; exceeded =3D sched_rt_runtime_exceeded(rt_rq); if (exceeded) - resched_curr(rq); + resched_curr_nodelay(rq, rq->curr); raw_spin_unlock(&rt_rq->rt_runtime_lock); if (exceeded) do_start_rt_bandwidth(sched_rt_bandwidth(rt_rq)); @@ -1634,7 +1634,7 @@ static void check_preempt_equal_prio(struct rq *rq, s= truct task_struct *p) * to try and push the current task away: */ requeue_task_rt(rq, p, 1); - resched_curr(rq); + resched_curr_nodelay(rq, p); } =20 static int balance_rt(struct rq *rq, struct task_struct *p, struct rq_flag= s *rf) @@ -1663,7 +1663,7 @@ static void wakeup_preempt_rt(struct rq *rq, struct t= ask_struct *p, int flags) struct task_struct *donor =3D rq->donor; =20 if (p->prio < donor->prio) { - resched_curr(rq); + resched_curr_nodelay(rq, p); return; } =20 @@ -1999,7 +1999,7 @@ static int push_rt_task(struct rq *rq, bool pull) * just reschedule current. */ if (unlikely(next_task->prio < rq->donor->prio)) { - resched_curr(rq); + resched_curr_nodelay(rq, next_task); return 0; } =20 @@ -2087,7 +2087,7 @@ static int push_rt_task(struct rq *rq, bool pull) } =20 move_queued_task_locked(rq, lowest_rq, next_task); - resched_curr(lowest_rq); + resched_curr_nodelay(lowest_rq, next_task); ret =3D 1; =20 double_unlock_balance(rq, lowest_rq); diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index f213f9e68aa6..b81354dfed3c 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -2698,6 +2698,7 @@ extern void init_sched_fair_class(void); extern void resched_curr(struct rq *rq); extern void resched_curr_lazy(struct rq *rq); extern void resched_cpu(int cpu); +extern void resched_curr_nodelay(struct rq *rq, struct task_struct *p); =20 extern void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 r= untime); extern bool sched_rt_bandwidth_account(struct rt_rq *rt_rq); --=20 2.43.5 From nobody Mon Oct 6 04:59:33 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 5AD2B2D9EDC for ; Thu, 24 Jul 2025 16:16:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373806; cv=none; b=BwAMMVp0DTyZHxcYrbjUJfj1w36TPqngR3RHNO7h9iEpZowKy7n8VCxnIEq5ZbD5mgXQJyr6J1fRWfJNPEcl+bovM8bb5dDL7bVVZBe0NhPPJVTGPVpmuYZkP6399XyhFit2/pEdVGtpngbXx6sc9KAba8cVQ+D48ZWz+LQt81s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373806; c=relaxed/simple; bh=2B1ag9oXIW8CYeISZxA8iFb7Q9C2vSdfr+x6zQcaoyw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P0CssT/7TC8x42V2mghMWfOX1CIpZq7QjAwT+2QP36VIYwtYTgVRn2V4RwbZaJ3ZRLBnNPqF4WJ2v5Al3hh4y4QosyI8ecI2X8PLz/RgT2bdFKF7TWH6JnREnmJPZFh4NDf6FAxrNYoLK3igzUG+n8I81lI4RYuKv1MbG0faG98= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=H9G61hEG; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="H9G61hEG" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRQiu012138; Thu, 24 Jul 2025 16:16:33 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=fHo9Z jMudogqh8M9aZjDckmclpazqWP/CGFr0zQxzRM=; b=H9G61hEGNmejGCYsdY5HO IXCKWdYLw0QSFUgZ0jayDZkOcB3F7NuNJflEtUAY/v/TljJSGPbVvmzaFPzqTbnP 88jc0XyoCsBQnwQsuF6c+c0cMEe09CUvDb1P5uUS4w8lAj864ZHfUX/FipmO6/02 2hblgBDq3DemI8RA9o7yYsIe4JOvpg+D+acSg0cMvrY68ttG/QN/up4mwjp10wjy fYMSohcO0S5Nsl4gsoTnZK0GX3c0pNLUHyHqmFFZt6aKYoDO5299MrgugDKOdLQp k94CGrslUkEHulVAVMj5IIH+hq2nDVB1+j7lxYQmu6pF2zO13Mz7ac/ehYUxuX6x g== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4805hpj269-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:33 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OF2I4c014398; Thu, 24 Jul 2025 16:16:32 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcft2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:32 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNa034466; Thu, 24 Jul 2025 16:16:31 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-11 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:31 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 10/11] sched, x86: Enable nodelay scheduling Date: Thu, 24 Jul 2025 16:16:24 +0000 Message-ID: <20250724161625.2360309-11-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Proofpoint-ORIG-GUID: 5xca4p6TM2_fSv_P15bhpkJRyLVjIuMj X-Authority-Analysis: v=2.4 cv=YY+95xRf c=1 sm=1 tr=0 ts=68825c61 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=tyw9C-_SHxmLAanyWtMA:9 cc=ntf awl=host:12061 X-Proofpoint-GUID: 5xca4p6TM2_fSv_P15bhpkJRyLVjIuMj X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfX3B9hZ9cpBJC0 OVFPGM2k2vG06eFAdvHY545MRWZCFZx0ESgZ7yEf4ffvGgE+g2ZCoCujgNgVrN3ERjWJryxEL5F ztFX979Jd8xDm/dANsJdcgz+6QSw4ZjWHUpiJlkbKj4P9YycEWX49NyitXUCI/zEIMiKxV3qafM LFfXwYVITfu8913GvVPdT/m/0ovXK8/BIP9DtR8zlmmy0zcNbLDE7Z6+s/VM2x3ucJnOamInNE3 SP4JYjRAev/CvGkSqAdUh+Sgh3Vw4emXGCmSk26mx1//sElR8IjjR3BtOIZTTp9EKNXIJymwUbG PFeOt1PuQsiE1bJBEbsfgibYSLYnLkSiYtvTTI52JoMAyJxz6QGcJYBZr1mkhLA6UZlThkiLp2+ TjjH4J8FBIyXFB2o5o0YPF57h+CDGcFrTOxlmmsC9ZOmR6V6Q2fjH/r6GcJWV4Xk35+FUPiH Content-Type: text/plain; charset="utf-8" Add the TIF_NEED_RESCHED_NODELAY bit and enable it in Kconfig Suggested-by: Thomas Gleixner Signed-off-by: Prakash Sangappa --- arch/x86/Kconfig | 1 + arch/x86/include/asm/thread_info.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 71019b3b54ea..8925af10b9b5 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -101,6 +101,7 @@ config X86 select ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE select ARCH_HAS_PMEM_API if X86_64 select ARCH_HAS_PREEMPT_LAZY + select ARCH_HAS_PREEMPT_NODELAY select ARCH_HAS_PTE_DEVMAP if X86_64 select ARCH_HAS_PTE_SPECIAL select ARCH_HAS_HW_PTE_YOUNG diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thre= ad_info.h index 9282465eea21..00ef128cea9d 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@ -90,6 +90,7 @@ struct thread_info { #define TIF_NEED_RESCHED_LAZY 4 /* Lazy rescheduling needed */ #define TIF_SINGLESTEP 5 /* reenable singlestep on user return*/ #define TIF_SSBD 6 /* Speculative store bypass disable */ +#define TIF_NEED_RESCHED_NODELAY 7 /* No delay rescheduling needed */ #define TIF_SPEC_IB 9 /* Indirect branch speculation mitigation */ #define TIF_SPEC_L1D_FLUSH 10 /* Flush L1D on mm switches (processes) */ #define TIF_USER_RETURN_NOTIFY 11 /* notify kernel of userspace return */ @@ -114,6 +115,7 @@ struct thread_info { #define _TIF_NEED_RESCHED_LAZY (1 << TIF_NEED_RESCHED_LAZY) #define _TIF_SINGLESTEP (1 << TIF_SINGLESTEP) #define _TIF_SSBD (1 << TIF_SSBD) +#define _TIF_NEED_RESCHED_NODELAY (1 << TIF_NEED_RESCHED_NODELAY) #define _TIF_SPEC_IB (1 << TIF_SPEC_IB) #define _TIF_SPEC_L1D_FLUSH (1 << TIF_SPEC_L1D_FLUSH) #define _TIF_USER_RETURN_NOTIFY (1 << TIF_USER_RETURN_NOTIFY) --=20 2.43.5 From nobody Mon Oct 6 04:59:33 2025 Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) (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 3811C2ED85C for ; Thu, 24 Jul 2025 16:17:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.165.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373822; cv=none; b=LQWqd4EYcbJC6fNlhN6AV/Ox98A8Vo4DwSrRNQcbXl5MS29PxdXNZy7OqNfrYJVN6hBBSGO7JYXB7P9ENP3Tfuy73Lbt0WNzJzCXS2+Hrq21jOJ2ZSTQGziPNcIrCxaZ60pPyID4L6HkSo7GBxpg1/cjY5jZVAHRm/9pkhmABqA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1753373822; c=relaxed/simple; bh=sgNSyR9qN+elPt7mrI8zcsTvs3+vqFk5xlX5khnbL7M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VfRAenSiDbxMcI6s2K5CxvT+2KvcQ3WWWLZIxoXX4zLub/6qLZ1IvOAZSg8D17pn+4DBevTix/l+3IkN3GQXFEdrFmbiuT4jkEb2BwmDLHqzUN1dUcKvB8NGUJXdC1L2dK9xvOlEOqGuqMmEDIuQGbn0qGPZkkm0U8nKZK4wH34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=oqDZPHo+; arc=none smtp.client-ip=205.220.165.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="oqDZPHo+" Received: from pps.filterd (m0246629.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56ODRLcp017769; Thu, 24 Jul 2025 16:16:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=xdmNg B2Eexte6zDRKyYETP78ds1jp7CNl03zUdwy1gA=; b=oqDZPHo+IecYTLXKTHuiG 9wrWjYi5vXXUFPFuVJPEmUIiO3kaJXCjqJ40NjYlWQG+79M4BPRkiXuB2jWrg5ls QyM2wyKDJ5uu663DSkxCZ71GJ+y6zu19dXagY4/WEq1+woOhE/JqJ2akQ+mc3ZZN pSY/B0qrOjgRLQOc5ZGGkim0GZEimTUduTo7BV2D0k75KTZi9qCtP8D6bUrJmPrD Fcmsnfp90zBYLZ+8h0frJlaJ4BLlQjx8AHlg3ldKq0FHEnmSy5seeaLoLBDeOOlt STpxhSTTZheFRlOB3MM7muY5+XHRYRZSCSLeLM8+GcOSWrS/uCsToeruylW2A7tL Q== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 48056ehuur-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 24 Jul 2025 16:16:34 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 56OFR79g014423; Thu, 24 Jul 2025 16:16:32 GMT Received: from pps.reinject (localhost [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfth-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:32 +0000 Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 56OGGRNc034466; Thu, 24 Jul 2025 16:16:32 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 4801tjcfne-12 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Thu, 24 Jul 2025 16:16:32 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com, prakash.sangappa@oracle.com Subject: [PATCH V7 11/11] sched: Add kernel parameter to enable delaying RT threads Date: Thu, 24 Jul 2025 16:16:25 +0000 Message-ID: <20250724161625.2360309-12-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250724161625.2360309-1-prakash.sangappa@oracle.com> References: <20250724161625.2360309-1-prakash.sangappa@oracle.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-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-24_02,2025-07-24_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 bulkscore=0 suspectscore=0 mlxscore=0 phishscore=0 mlxlogscore=999 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507240123 X-Proofpoint-ORIG-GUID: qcf5amgI0M-8jOUIcPA3aKRhEKbVfAPt X-Proofpoint-GUID: qcf5amgI0M-8jOUIcPA3aKRhEKbVfAPt X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI0MDEyMyBTYWx0ZWRfX6pNsMTKL3WME y1/Xucw43Gq8LzuqVwM4Se1442gKlWUrx9MAXgztxC3uTJeeIlGJsHqQ2zIJTh2nJo9Y+83rdxZ 1YDn3hiTvb/gN3ggJ1Oriqg7yKO4YClWNXzEprC6U03uTlpK0vhExSey7uS5xAVTGYuIhAx1ge/ j3zBEjupX7Jpp8KEyJYboYCzGhQzJrkzVBeyjtFeekWupdWgmbiYgEbwCJD3U6+vyqool4Zz8kE b/bga7Dq7UQVV8bndzAp45yE/mLWqp8IVW0HPWwUZzWwoNL69NuS4D25vbNOzk6MZqFz62MlY/G GvOhWBTgk9u0RE2GKyI0KZkyDNHsda8OPoPlro3q6X7Dkgfq14SP30Ib7L0lpnEHCpwpz1ngZ7L 8B5Ua58zHdpuplp4vcWGI9OrTXGIdHpGMq6ZRFVp/xybIxP/3ZqwFRtluHjMW0hzRKB+09oT X-Authority-Analysis: v=2.4 cv=Ef3IQOmC c=1 sm=1 tr=0 ts=68825c62 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=I5Alv-pXL9pxttFBygkA:9 cc=ntf awl=host:12061 Content-Type: text/plain; charset="utf-8" Add a kernel parameter to enable or disable delaying a RT thread from being scheduled on the cpu, if a thread running on cpu has requested extending its time slice. Suggested-by: Thomas Gleixner Signed-off-by: Prakash Sangappa --- include/linux/sched.h | 1 + kernel/entry/common.c | 7 ++++++- kernel/sched/core.c | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index af3bf1923509..2e65aafeef23 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -412,6 +412,7 @@ static inline void sched_domains_mutex_unlock(void) { } #ifdef CONFIG_RSEQ_RESCHED_DELAY /* Scheduler time slice extension duration */ extern unsigned int sysctl_sched_preempt_delay_us; +extern unsigned int sysctl_sched_delay_rt; #endif =20 struct sched_param { diff --git a/kernel/entry/common.c b/kernel/entry/common.c index 15ddf335ad4a..912565a24cca 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -85,13 +85,18 @@ void __weak arch_do_signal_or_restart(struct pt_regs *r= egs) { } =20 static inline bool rseq_delay_resched(unsigned long ti_work) { + unsigned long tiflag; + if (!IS_ENABLED(CONFIG_RSEQ_RESCHED_DELAY)) return false; =20 if (unlikely(current->rseq_delay_resched !=3D RSEQ_RESCHED_DELAY_PROBE)) return false; =20 - if (!(ti_work & (_TIF_NEED_RESCHED|_TIF_NEED_RESCHED_LAZY))) + tiflag =3D sysctl_sched_delay_rt ? _TIF_NEED_RESCHED|_TIF_NEED_RESCHED_LA= ZY : + _TIF_NEED_RESCHED_LAZY; + + if (!(ti_work & tiflag)) return false; =20 if (__rseq_delay_resched()) { diff --git a/kernel/sched/core.c b/kernel/sched/core.c index e9be8a6b8851..bf16e11a3c27 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -157,6 +157,11 @@ __read_mostly unsigned int sysctl_sched_nr_migrate =3D= SCHED_NR_MIGRATE_BREAK; */ #define SCHED_PREEMPT_DELAY_DEFAULT_US 30 __read_mostly unsigned int sysctl_sched_preempt_delay_us =3D SCHED_PREEMPT= _DELAY_DEFAULT_US; + +/* + * Scheduler time slice extension - Enable delaying RT threads. Disabled b= y default. + */ +__read_mostly unsigned int sysctl_sched_delay_rt =3D 0; #endif =20 __read_mostly int scheduler_running; @@ -4785,6 +4790,15 @@ static const struct ctl_table sched_core_sysctls[] = =3D { .extra1 =3D SYSCTL_ZERO, .extra2 =3D SYSCTL_ONE_HUNDRED, }, + { + .procname =3D "sched_delay_rt", + .data =3D &sysctl_sched_delay_rt, + .maxlen =3D sizeof(unsigned int), + .mode =3D 0644, + .proc_handler =3D proc_dointvec_minmax, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D SYSCTL_ONE, + }, #endif /* CONFIG_RSEQ_RESCHED_DELAY */ }; static int __init sched_core_sysctl_init(void) --=20 2.43.5