From nobody Sun Feb 8 16:12:42 2026 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 92EDA4430 for ; Fri, 2 May 2025 02:00:20 +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=1746151222; cv=none; b=HDhIwOC4eKvm+7l8rXonOeKnm0iRBPTVH3+PQ5srGuRtc12BVoNcYR11HzL4pQ+GPo5tA2RjlWf2FHZfs1FsWWTHJp/qx9jwu2pqMjY0K6rIpCce026zrKCeKG/PwMH0RDFVF2ANYVSY++6dZclyY7XuTXKKwrxIbxeBj37N6HQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746151222; c=relaxed/simple; bh=Y9RhFFi7+7w1Xv0CEDV1TvMMTLeSJOp/V5irmpAK2LI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X/XlMTrRnlYlKbu8Q/0gDp89yxfMhqrFTJ9fKeGw9fWbHNqV6nVZFQ8rhll/wLTWrv36S8nV3sX8tAX/wYKybFWXbIzrbDQtIoMeE3FN/rxZIkaC7qKQxQd5wGjiE/ZB3VEvm2+E2OXZWqoHEA0aI3M1KpGHvvX4oZC8eGo1huw= 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=QfEO6sTg; 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="QfEO6sTg" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 541Keg1Y009089; Fri, 2 May 2025 01:59:58 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=dLFqY KVzVYEJ14JdJPse3+8YrSesXxizWv5nUco8Hb0=; b=QfEO6sTg9ZMlfUnZxWlUX ywTsyktrmgBCNLz6BCebmFPtlTdgVbRLVV8RdAdt8cdbHQSFUmWPcKtse+S/N35i L/TIe2TENcdKuKJkPfbFOLjkLVNlNvUMH9k3RmAlM/rIIuu4OfiojNRl3cGozZhX BdkSjsqg0aaSoDIGYmjOJ3subkBg6fCfyrLS4KtmoxF2773Nf9TiUrYNO8K+z3gM mwtq5QCL39i3oAofbqloXVW5sQtcA/mUv8XKE45MGFRuDmGWZWToNwuugTWmrcKE kaWBWj1Qmx3fZfYODK7Kc8t65h9u9Jga94dhpjsoHDjb9YMYeSYLEeMHjFi3dRrE Q== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46b6ukmdxw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 02 May 2025 01:59:58 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5421aMDS035421; Fri, 2 May 2025 01:59:57 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 468nxd1euw-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 02 May 2025 01:59:57 +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 Subject: [PATCH V3 1/4] Sched: Scheduler time slice extension Date: Fri, 2 May 2025 01:59:52 +0000 Message-ID: <20250502015955.3146733-2-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250502015955.3146733-1-prakash.sangappa@oracle.com> References: <20250502015955.3146733-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.0.736,FMLib:17.12.80.40 definitions=2025-05-01_06,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2504070000 definitions=main-2505020013 X-Authority-Analysis: v=2.4 cv=MIZgmNZl c=1 sm=1 tr=0 ts=6814271e b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=dt9VzEwgFbYA:10 a=JfrnYn6hAAAA:8 a=yPCof4ZbAAAA:8 a=kB6fCMDy4_io11iu5P8A:9 a=1CNFftbPRP8L7MoqJWF3:22 cc=ntf awl=host:14638 X-Proofpoint-GUID: XzCahc1bJtLpcPmooIh_9uce6C5ufBZQ X-Proofpoint-ORIG-GUID: XzCahc1bJtLpcPmooIh_9uce6C5ufBZQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTAyMDAxMyBTYWx0ZWRfX50/KUysRUoWB mp5DtPXbF83MK7//T9/ybbcAruUEVXeriLz8AEEyAING/mmppr9m7jNPQ2gWk/i5Oqf/kWkb0ET tGLG4a5iqS0Leum116ETAtYdf4zYepj6NUwqg38Vp9eCx7XLa2gz/O7mCTzMjjCM9FZ/EUsJU3h +v+gWmmMRG0G6GbrLrWZYoRCcS+FpILiVD4673NgDB9+SniWTi4gOXR+6k1AG19M/vDpIJLtuvL 7x06pVZHBEOO8jtcrPSgftaSIn6Ohs95sXvkDIQM6eq0vB4AnnfDZOTIw3u+hHfUfqv9bmK9CnM 9RLJNcgCkuSx/OifeOKD0gKx91MeNUm1nU3wvcj/UVAYmlc90MkjZXlPeYO/8MJup47kI7PTJ2p t40RYzloY7oDvL2tvalrlWZLfotnqPzoqSJcKWtemDQaW/bbn77CMVbHCXQoftK98BIN51MB 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 50us 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 50us 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 --- v2: - Add check in syscall_exit_to_user_mode_prepare() and reschedule if thread has 'rseq_sched_delay' set. v3: - Rename rseq_sched_delay -> sched_time_delay and move near other bits in struct task_struct. - Use IS_ENABLED() check to access 'sched_time_delay' instead of #ifdef - Modify coment describing RSEQ_CS_FLAG_DELAY_RESCHED flag. - Remove rseq_delay_resched_tick() call from hrtick_clear(). --- include/linux/entry-common.h | 11 +++++-- include/linux/sched.h | 16 +++++++++++ include/uapi/linux/rseq.h | 7 +++++ kernel/entry/common.c | 19 ++++++++---- kernel/rseq.c | 56 ++++++++++++++++++++++++++++++++++++ kernel/sched/core.c | 14 +++++++++ kernel/sched/syscalls.c | 5 ++++ 7 files changed, 120 insertions(+), 8 deletions(-) diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index fc61d0205c97..cec343f95210 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -303,7 +303,8 @@ 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 @@ -315,7 +316,8 @@ 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 @@ -326,7 +328,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 (irq) + rseq_delay_resched_fini(); =20 arch_exit_to_user_mode_prepare(regs, ti_work); =20 diff --git a/include/linux/sched.h b/include/linux/sched.h index c08fd199be4e..14bf0508bfca 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -339,6 +339,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); @@ -1044,6 +1045,7 @@ struct task_struct { /* delay due to memory thrashing */ unsigned in_thrashing:1; #endif + unsigned sched_time_delay:1; #ifdef CONFIG_PREEMPT_RT struct netdev_xmit net_xmit; #endif @@ -2249,6 +2251,20 @@ static inline bool owner_on_cpu(struct task_struct *= owner) unsigned long sched_cpu_util(int cpu); #endif /* CONFIG_SMP */ =20 +#ifdef CONFIG_RSEQ + +extern bool rseq_delay_resched(void); +extern void rseq_delay_resched_fini(void); +extern void rseq_delay_resched_tick(void); + +#else + +static inline bool rseq_delay_resched(void) { return false; } +static inline void rseq_delay_resched_fini(void) { } +static inline void rseq_delay_resched_tick(void) { } + +#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..900cb75f6a88 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_DELAY_RESCHED + * Request by user task to try delaying preemption. With + * use of a timer, extra cpu time upto 50us is granted for this + * thread before being rescheduled. */ __u32 flags; =20 diff --git a/kernel/entry/common.c b/kernel/entry/common.c index 20154572ede9..b26adccb32df 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -88,7 +88,8 @@ void __weak arch_do_signal_or_restart(struct pt_regs *reg= s) { } * @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 +99,12 @@ __always_inline unsigned long exit_to_user_mode_loop(str= uct 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 (irq && rseq_delay_resched()) + clear_tsk_need_resched(current); + else + schedule(); + } =20 if (ti_work & _TIF_UPROBE) uprobe_notify_resume(regs); @@ -184,6 +189,10 @@ static void syscall_exit_to_user_mode_prepare(struct p= t_regs *regs) =20 CT_WARN_ON(ct_state() !=3D CT_STATE_KERNEL); =20 + /* reschedule if sched delay was granted */ + if (IS_ENABLED(CONFIG_RSEQ) && current->sched_time_delay) + set_tsk_need_resched(current); + if (IS_ENABLED(CONFIG_PROVE_LOCKING)) { if (WARN(irqs_disabled(), "syscall %lu left IRQs disabled", nr)) local_irq_enable(); @@ -204,7 +213,7 @@ static __always_inline void __syscall_exit_to_user_mode= _work(struct pt_regs *reg { syscall_exit_to_user_mode_prepare(regs); local_irq_disable_exit_to_user(); - exit_to_user_mode_prepare(regs); + exit_to_user_mode_prepare(regs, false); } =20 void syscall_exit_to_user_mode_work(struct pt_regs *regs) @@ -228,7 +237,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..0ecd16e01712 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -448,6 +448,62 @@ void __rseq_handle_notify_resume(struct ksignal *ksig,= struct pt_regs *regs) force_sigsegv(sig); } =20 +bool rseq_delay_resched(void) +{ + struct task_struct *t =3D current; + u32 flags; + + if (!IS_ENABLED(CONFIG_SCHED_HRTICK)) + return false; + + if (!t->rseq) + return false; + + if (t->sched_time_delay) + return false; + + 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->sched_time_delay =3D 1; + + return true; +} + +void rseq_delay_resched_fini(void) +{ +#ifdef CONFIG_SCHED_HRTICK + extern void hrtick_local_start(u64 delay); + struct task_struct *t =3D current; + /* + * IRQs off, guaranteed to return to userspace, start timer on this CPU + * to limit the resched-overdraft. + * + * If your critical section is longer than 50 us you get to keep the + * pieces. + */ + if (t->sched_time_delay) + hrtick_local_start(50 * NSEC_PER_USEC); +#endif +} + +void rseq_delay_resched_tick(void) +{ +#ifdef CONFIG_SCHED_HRTICK + struct task_struct *t =3D current; + + if (t->sched_time_delay) + set_tsk_need_resched(t); +#endif +} + #ifdef CONFIG_DEBUG_RSEQ =20 /* diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 4de24eefe661..8c8960245ec0 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -844,6 +844,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); @@ -917,6 +919,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 @@ -6722,6 +6734,8 @@ static void __sched notrace __schedule(int sched_mode) picked: clear_tsk_need_resched(prev); clear_preempt_need_resched(); + if (IS_ENABLED(CONFIG_RSEQ)) + prev->sched_time_delay =3D 0; 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 cd38f4e9899d..1b2b64fe0fb1 100644 --- a/kernel/sched/syscalls.c +++ b/kernel/sched/syscalls.c @@ -1378,6 +1378,11 @@ static void do_sched_yield(void) */ SYSCALL_DEFINE0(sched_yield) { + if (IS_ENABLED(CONFIG_RSEQ) && current->sched_time_delay) { + schedule(); + return 0; + } + do_sched_yield(); return 0; } --=20 2.43.5 From nobody Sun Feb 8 16:12:42 2026 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 F2730EEA8 for ; Fri, 2 May 2025 02:00:21 +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=1746151223; cv=none; b=CPhNt8VQNe6IRi1ZKh+lKAWBjOTRXuWWj2QPtOcyE3/Oavd3mtSn8R35mvwyse6vKieUyXtbKBoJwxeaAEnnwgUFxvzNiv1VZN2Zuv8g95SEOlsIZF+3UBoiapOMGULFZCK8v73YZ5gnbmXleMIXUKa/rsJw5F+bW3gQ09TEB6E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746151223; c=relaxed/simple; bh=U4X8LGE5rY7W8OFpXjBNq8MAFGAvJUw5b+XCxMq8cyA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SRgcOcy8ISamRCQam6GKSrqISeN/+WyCw1JN8qyjxFKiQTktHb9mHkW/kNufSvVSXdcW5SCfChqUS5SmNv4gfxX3on8nYYcij92fmIMLxccGuNWSZxhomRwJH4Qr6kZmtxJ/cQsWuVyuD7fqscz0QWBD1ZdfMO7ywX4HE4XeGyQ= 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=qSseV6vI; 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="qSseV6vI" 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 541KeUQ1025029; Fri, 2 May 2025 01:59:59 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=WxQr3 8+6zji9ZGaiO6kdMhdW1yPIty5vBXCpJ1ODMPQ=; b=qSseV6vIsydzxWMd9EXj9 Dy8z9OlP25jlrB6QFWS3WOye/uxsDyuUkt9sASueQsUVM5Opdvo2n+OWBYNBxBil nKDwg19S38MqgQnqWwd4n+57ixTs8EbjfDOKDd6NFAgaQyHv7BJGphZKx1ERFuTo rPfdyD2kdICKdPPKV3IXnWQw66QwdF8iuEjJIJ0cvDucJS2T6bQc6HMH0p1ZFHWO h1xadLHXJtP0Y6rRk+jy/mrA9xIf9EA4mMk8fCWUJMPGfZPhqRUUYz832HuXSQMy lVfH5aNfi019vDhP0rTTU9JeyptgaH60RCD3h0ev/MItEPJiiP/Jjkf6BW3YEjUT w== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46b6usmcc2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 02 May 2025 01:59:59 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5421aMDT035421; Fri, 2 May 2025 01:59:58 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 468nxd1euw-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 02 May 2025 01:59:58 +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 Subject: [PATCH V3 2/4] Sched: Tunable to specify duration of time slice extension Date: Fri, 2 May 2025 01:59:53 +0000 Message-ID: <20250502015955.3146733-3-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250502015955.3146733-1-prakash.sangappa@oracle.com> References: <20250502015955.3146733-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.0.736,FMLib:17.12.80.40 definitions=2025-05-01_06,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2504070000 definitions=main-2505020013 X-Proofpoint-ORIG-GUID: IP1qOVD8r_9lLa724JmRAoyiuFQcueBE X-Proofpoint-GUID: IP1qOVD8r_9lLa724JmRAoyiuFQcueBE X-Authority-Analysis: v=2.4 cv=Hd0UTjE8 c=1 sm=1 tr=0 ts=6814271f b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=dt9VzEwgFbYA:10 a=yPCof4ZbAAAA:8 a=vtrBRbmf2MmeuvLnnLMA:9 cc=ntf awl=host:14638 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTAyMDAxMyBTYWx0ZWRfX2XtJWXmt3tJS 2Bw6tbElz6oJ4crtI7hs+pgss7gggH84TZ7XqjzxiO7jVRqQOk25Bjy7w8B0YllBDpA9no46Cuj 4yXCBC3Wcjv7GNiN/32brVF+nSwPSUQ9MfuIiSkYytEbUoOPOuqMjJGjJISCY151+Q569v83o9y YirNvTc2uqXIZsrmTxefLe1CBIa6eDhZktKRT77R+Huv19N736XWzo9Va1fkka7yUF505TH0XnU W30b28Qg5DUR53Dfp6Yz2rb99LwFrz2PEzf5UJvasXPxtyF4E5ZjoGP2ObT/Gx9wmdoPqNwP+AF cPRqBCj04SJomItJkGMKQ9HD26qYrODEyZ4ojJXv+OHuA6/udQoGTFcEHMWTFeG47t282+I0gTr cUWVsCpEuHMaVM0YXagSWh0QQIK5uxHMrcNmceJ+22Nw5AtDY5IW1ZH8bcHMLdPTPmArfDIS Content-Type: text/plain; charset="utf-8" Add a tunable to specify duration of scheduler time slice extension. The default will be set to 50us and the max value that can be specified is 100us. Setting it to 0, disables scheduler time slice extension. Signed-off-by: Prakash Sangappa --- include/linux/sched.h | 3 +++ include/uapi/linux/rseq.h | 6 +++--- kernel/rseq.c | 7 +++++-- kernel/sched/core.c | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 14bf0508bfca..cce3a0496703 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -407,6 +407,9 @@ static inline void sched_domains_mutex_lock(void) { } static inline void sched_domains_mutex_unlock(void) { } #endif =20 +/* Scheduler time slice extension */ +extern unsigned int sysctl_sched_preempt_delay_us; + struct sched_param { int sched_priority; }; diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index 900cb75f6a88..2aa9029325c2 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -132,9 +132,9 @@ struct rseq { * Inhibit instruction sequence block restart on migration for * this thread. * - RSEQ_CS_DELAY_RESCHED - * Request by user task to try delaying preemption. With - * use of a timer, extra cpu time upto 50us is granted for this - * thread before being rescheduled. + * Request by user task to try delaying its preemption. With + * use of a timer, extra cpu time upto 'sched_preempt_delay_us' + * is granted for this thread before being rescheduled. */ __u32 flags; =20 diff --git a/kernel/rseq.c b/kernel/rseq.c index 0ecd16e01712..0cfdaf5b6c8e 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -456,6 +456,8 @@ bool rseq_delay_resched(void) if (!IS_ENABLED(CONFIG_SCHED_HRTICK)) return false; =20 + if (!sysctl_sched_preempt_delay_us) + return false; if (!t->rseq) return false; =20 @@ -489,8 +491,9 @@ void rseq_delay_resched_fini(void) * If your critical section is longer than 50 us you get to keep the * pieces. */ - if (t->sched_time_delay) - hrtick_local_start(50 * NSEC_PER_USEC); + if (sysctl_sched_preempt_delay_us && t->sched_time_delay) + hrtick_local_start(sysctl_sched_preempt_delay_us * + NSEC_PER_USEC); #endif } =20 diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 8c8960245ec0..05a952ec15ae 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -148,6 +148,13 @@ __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 +/* + * Scheduler time slice extension, duration in microsecs. + * Max value allowed 100us, default 50us + * If set to 0, scheduler time slice extension is disabled. + */ +__read_mostly unsigned int sysctl_sched_preempt_delay_us =3D 50; + __read_mostly int scheduler_running; =20 #ifdef CONFIG_SCHED_CORE @@ -4711,6 +4718,15 @@ static const struct ctl_table sched_core_sysctls[] = =3D { .extra2 =3D SYSCTL_FOUR, }, #endif /* CONFIG_NUMA_BALANCING */ + { + .procname =3D "sched_preempt_delay_us", + .data =3D &sysctl_sched_preempt_delay_us, + .maxlen =3D sizeof(unsigned int), + .mode =3D 0644, + .proc_handler =3D proc_dointvec_minmax, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D SYSCTL_ONE_HUNDRED, + }, }; static int __init sched_core_sysctl_init(void) { --=20 2.43.5 From nobody Sun Feb 8 16:12:42 2026 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 F276610A3E for ; Fri, 2 May 2025 02:00:21 +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=1746151223; cv=none; b=MWDIQzxcIeWD7eP0pTDkSQFqYTZJiHkfNZceluQaR4R2SORmAMvjVd11Rt2Eg6HFmCrJDVsYbX/Q0JulPeIzbROyQys9CvE3xsZ431dwrtf40eNtZkGYRBb4g/Ef1aeDp7k9xKS4syyf28z1NBrsHSO48pYHXnXGHPUkX5+EHPI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746151223; c=relaxed/simple; bh=atTXP+694Aux8BhuSCLFOHPu0kPkh4AOt9gerkd3pdg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=M8MNs287LPDix+k40BZES/PjGS2K9zXb26PyxmNg7bMmzomtI8Zz8phlMlyv4FVmIoVHiro+Ri9S+uSNbsoslxooQHYgoNk28juiNJxBV9v6xmsYSGj5p1KsTob4YDpLBDaw6EJwPChlAFYerNbdIXPm8SN7QjB/GJDOlYx5wFI= 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=GXjbuKiL; 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="GXjbuKiL" Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 541KeRND021468; Fri, 2 May 2025 02:00:00 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=esKM0 Oy8DM3GOqvsuucG+ZW3+3TxMtiamPFuV4U6QY8=; b=GXjbuKiLqzrfxe+EYIgeE rJ1TgDtZtcQvgBMUWg6Yy5JwEan+9E2Sz3eVkJJL2lIa4TqTkvsd9YjIUZPQg27N jMwQO3f4EiDNdXBEu0qG864hSg3U9B58lQ3Xm8AS78/UZdyj6byhnTZzGsMrINCm /5iTX/ipzzhy9GfZ4ihDeodlr99OXNzhuWaOrnCevPoe7AfwfjvvqUPPDtaQ1B49 kdsjDvZjcFY3SeNF1Kv4FoyhX8FM+E7ygLsrvkvcrDZgcsTQ97MB20lKZdp5XwLh xVeFyFzQARj8tF0S9yDqoLwICcnLkvhdNEIUn19+8J9iBdGWsxK5RuzFxC3lER93 Q== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46b6uqmdj5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 02 May 2025 01:59:59 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5421aMDU035421; Fri, 2 May 2025 01:59:58 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 468nxd1euw-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 02 May 2025 01:59:58 +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 Subject: [PATCH V3 3/4] Sched: Add scheduler stat for cpu time slice extension Date: Fri, 2 May 2025 01:59:54 +0000 Message-ID: <20250502015955.3146733-4-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250502015955.3146733-1-prakash.sangappa@oracle.com> References: <20250502015955.3146733-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.0.736,FMLib:17.12.80.40 definitions=2025-05-01_06,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2504070000 definitions=main-2505020013 X-Proofpoint-ORIG-GUID: VpFENSIBJXGoIRujMdpW5sLTndIaZSAv X-Authority-Analysis: v=2.4 cv=Vq8jA/2n c=1 sm=1 tr=0 ts=68142720 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=dt9VzEwgFbYA:10 a=yPCof4ZbAAAA:8 a=HM_RregbEbY-m7O0KLoA:9 cc=ntf awl=host:14638 X-Proofpoint-GUID: VpFENSIBJXGoIRujMdpW5sLTndIaZSAv X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTAyMDAxMyBTYWx0ZWRfX3V5K47kZJh6y eNqOXJV1rhkV/SIeciuZBAD1fs7bvTi7fOY3vwbdK8SFGNuUWnqhIdjcTZJ4eLufC28s/c10PAO ExEiOgKolWSQwVgYdRjl/Ue2aoI0tWtLh+QTTVgB8qVTHKskNyQ234TijNiY7pkzV5w1UDRH8fz Xm37W/1xYYyafc5vrPRGXa8e1EgR6DZEOAH6lQqS2hBjn4eltZj0OWl6C5/jMNFoRRMmlG3m6kX wyXycwBwjHzLJXJzI7wK3WYrDKEIX5ukpBltzGDDcynHjTZljhYweJgBHtqNLBgMD09QmmK6DwM YDCdZp7jonAXSU+tXEMNblkUojKdhRxJ2HPV3mXXnz+RX5L60Pg0w9BLVc/oA+ySq/wS9youPpy hHXLC1O1EBh+5mn/KVlZlpIrIv44NO81K0jYBFOQG5vNMGvCRrLG8whKSphoIqnfGxMflqfu 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 | 2 ++ kernel/rseq.c | 1 + kernel/sched/core.c | 5 +++++ kernel/sched/debug.c | 1 + 4 files changed, 9 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index cce3a0496703..1367171b4a9e 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -340,6 +340,7 @@ 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); +extern void update_stat_preempt_delayed(struct task_struct *t); =20 /* wrapper function to trace from this header file */ DECLARE_TRACEPOINT(sched_set_state_tp); @@ -563,6 +564,7 @@ struct sched_statistics { u64 nr_wakeups_affine_attempts; u64 nr_wakeups_passive; u64 nr_wakeups_idle; + u64 nr_preempt_delay_granted; =20 #ifdef CONFIG_SCHED_CORE u64 core_forceidle_sum; diff --git a/kernel/rseq.c b/kernel/rseq.c index 0cfdaf5b6c8e..4c1586977f1b 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -475,6 +475,7 @@ bool rseq_delay_resched(void) return false; =20 t->sched_time_delay =3D 1; + update_stat_preempt_delayed(t); =20 return true; } diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 05a952ec15ae..cb5bc0d41b01 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -936,6 +936,11 @@ void hrtick_local_start(u64 delay) rq_unlock(rq, &rf); } =20 +void update_stat_preempt_delayed(struct task_struct *t) +{ + schedstat_inc(t->stats.nr_preempt_delay_granted); +} + static void hrtick_rq_init(struct rq *rq) { #ifdef CONFIG_SMP diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 4cba21f5d24d..6b753f56c312 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -1216,6 +1216,7 @@ void proc_sched_show_task(struct task_struct *p, stru= ct pid_namespace *ns, P_SCHEDSTAT(nr_wakeups_affine_attempts); P_SCHEDSTAT(nr_wakeups_passive); P_SCHEDSTAT(nr_wakeups_idle); + P_SCHEDSTAT(nr_preempt_delay_granted); =20 avg_atom =3D p->se.sum_exec_runtime; if (nr_switches) --=20 2.43.5 From nobody Sun Feb 8 16:12:42 2026 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 92F13BA45 for ; Fri, 2 May 2025 02:00:20 +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=1746151222; cv=none; b=ZhMdfo9pAUl1FdFuzbdiZgawm5VhQqaltJv43KuGnWMaBJAmyWcOYzvaSnHNjutw9x6LADX1oQVAdwpqaCvNUyvIgowOMWiPL4Ppgz1TEjJjsZDJTs3xDnbV3dZL6RZcs4+SNEG5gRMPFZxLrUbPFkzOyERz44zAaqnSSMlXxn0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746151222; c=relaxed/simple; bh=ZXkDydD8p1Uc21PX/F84gcKQrLXSFuEgfF/Sh8BgQlk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hLnrhd15efgmIcMt0tOU5v0C8XXAFg2NxCI3BGDh2s85MQxtax3XYJsirNaxjk932IUHNX7tIfdUKZoirdpFYzj6nz8SqTv4JX9rfLgFNn/qZ+CdSy+xcZMN4GqsOwrRx0skMBiyAZjY1MPni5asWbBNZRUrDMLLnvmVnBrUfTs= 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=RQYxdfom; 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="RQYxdfom" 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 541KeNdt007190; Fri, 2 May 2025 01:59:59 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=lBN+p zYewV/WF24zN3SzgAWiwurwsgcxGEwDaDvrUwk=; b=RQYxdfom56AJW9us9UDsF CjgK9y8ItMQi9CSoQ/vPI7CFKW+/yo9iWNP3GMuaTw7kXeKjyrf+7pLxDaAYRhdq wRo5jQZbyM5kvMy8B7k7R29H9TWR0NUC+H2ngC9l5S7+JczEHUqAhTzbJh5AScXx cErp4EJuSsusp4rOCHVefKs9pcevbXg65Njk5MXBmG6PCh13ovV0XWydo4OyMvsc YJkRHzBTD2/VXuZLs08qkq/4+90FdpN8QNVCyQrg4L9JC8QTHbf62xnno52qFmbP 0oEggOQ2I+1AVqzZzAbd7ECDVvsMWUDblPJ9E1A28K1/f56wA50rCZUEPmeaPJsO g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 46b6ucmdhu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 02 May 2025 01:59:59 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5421aMDV035421; Fri, 2 May 2025 01:59:58 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 468nxd1euw-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Fri, 02 May 2025 01:59:58 +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 Subject: [PATCH V3 4/4] Sched: Add tracepoint for sched time slice extension Date: Fri, 2 May 2025 01:59:55 +0000 Message-ID: <20250502015955.3146733-5-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250502015955.3146733-1-prakash.sangappa@oracle.com> References: <20250502015955.3146733-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.0.736,FMLib:17.12.80.40 definitions=2025-05-01_06,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 phishscore=0 suspectscore=0 mlxscore=0 malwarescore=0 adultscore=0 spamscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2504070000 definitions=main-2505020013 X-Authority-Analysis: v=2.4 cv=ZsHtK87G c=1 sm=1 tr=0 ts=6814271f b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=dt9VzEwgFbYA:10 a=yPCof4ZbAAAA:8 a=-a2y3q_jHnAO8POPY3MA:9 cc=ntf awl=host:14638 X-Proofpoint-ORIG-GUID: d6gd_v_NDBb0nYxLBWhyHtu9qrVoUmWx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTAyMDAxMyBTYWx0ZWRfX8We9gt/JWU42 UwIxrJAUwElniPIJysvck+5hz/kkgQsRt9vxwJW1jSDLtP0TR4NObeFFKRXwGumP9NfDK25C686 UFatNfbfroH+ufJNP7Td23dbyIzd4IOKCzvBiwwzPZXjh8xXN2eEJDhLyuFpuhqFj1JejmWf73F IednqszEgZtKAB2ae5yPEwlFcZlrMyWktxapvmmfVInI5fsg3/jb+BIPRIION3DYVIAlRPBctsT aF1JpN88eXBRMDXFWtaa/lkj4aTRR9owfgpirsP54e9AbjOWVP/ffHHK4kHpPs8tSusvaMZJsy0 FQWqxbTXIIYKBmrTK+s8vDua2ix1Z3baKg5dHrrdqzDKyJg1exyyEX6My8dtfPdl0QfGYjT0cQy J0e9pegkUNVzOfUQ2dh6I/QBnAv4Ix8Nhdjo3uTMbGGYWkzwS7A+xH/sms8srRLex2ZkzDU7 X-Proofpoint-GUID: d6gd_v_NDBb0nYxLBWhyHtu9qrVoUmWx Content-Type: text/plain; charset="utf-8" Trace task's preemption due to a wakeups, getting delayed. Which can occurs when the running task requested extra time on cpu. Also, indicate the NEED_RESCHED flag set on the task getting cleared. Signed-off-by: Prakash Sangappa --- include/trace/events/sched.h | 28 ++++++++++++++++++++++++++++ kernel/entry/common.c | 8 ++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index 8994e97d86c1..4aa04044b14a 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h @@ -296,6 +296,34 @@ TRACE_EVENT(sched_migrate_task, __entry->orig_cpu, __entry->dest_cpu) ); =20 +/* + * Tracepoint for delayed resched requested by task: + */ +TRACE_EVENT(sched_delay_resched, + + TP_PROTO(struct task_struct *p, unsigned int resched_flg), + + TP_ARGS(p, resched_flg), + + 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 resched_flg; + ), + + 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 b26adccb32df..1951e6a4e9bc 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 @@ -100,9 +101,12 @@ __always_inline unsigned long exit_to_user_mode_loop(s= truct pt_regs *regs, local_irq_enable_exit_to_user(ti_work); =20 if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) { - if (irq && rseq_delay_resched()) + if (irq && rseq_delay_resched()) { clear_tsk_need_resched(current); - else + trace_sched_delay_resched(current, + ti_work & (_TIF_NEED_RESCHED | + _TIF_NEED_RESCHED_LAZY)); + } else schedule(); } =20 --=20 2.43.5