Re: Regression in performance when using PREEMPT_RT
From: Jack Lee
Date: Tue Jan 13 2026 - 02:44:47 EST
I resent the email because I didn't switch to plain text mode the
first time, and LKML rejected it. Sorry for the inconvenience.
Hi Steven and Sebastian,
> If you ignore the statement and allow the remote-IPI to kick the softirq
> then the request ends up in ksoftirqd on the remote CPU probably
> accompanied by a warning.
> I'm not sure it triggers a warning. Jack, have you seen that when you
> removed the force_irqthreads() check?
Yes, the below 2 warnings appeared after I removed the checks. [1]
[ 6643.468395] WARNING: CPU: 7 PID: 0 at kernel/softirq.c:317
do_softirq_post_smp_call_flush+0x60/0x70
[ 6643.468594] CPU: 7 UID: 0 PID: 0 Comm: swapper/7 Tainted: G
W OE 6.12.18-android16-0-maybe-dirty-4k #1
[ 6643.468624] Call trace:
[ 6643.468625] do_softirq_post_smp_call_flush+0x60/0x70
[ 6643.468626] flush_smp_call_function_queue+0x5c/0x78
[ 6643.468629] do_idle+0x210/0x25c
[ 6643.468632] cpu_startup_entry+0x34/0x3c
[ 6643.468634] secondary_start_kernel+0x130/0x150
[ 6643.468637] __secondary_switched+0xc0/0xc4
[ 6644.917108] WARNING: CPU: 0 PID: 340 at kernel/irq/handle.c:162
__handle_irq_event_percpu+0x15c/0x25c
[ 6644.917753] CPU: 0 UID: 0 PID: 340 Comm: irq/301-exynos- Tainted: G
W OE 6.12.18-android16-0-maybe-dirty-4k #1
[ 6644.917858] Call trace:
[ 6644.917859] __handle_irq_event_percpu+0x15c/0x25c
[ 6644.917865] handle_irq_event+0x64/0xcc
[ 6644.917871] handle_edge_irq+0x130/0x304
[ 6644.917878] generic_handle_domain_irq+0x58/0x80
[ 6644.917884] dw_handle_msi_irq+0xc8/0xdc
[ 6644.917894] exynos_pcie_rc_irq_handler+0xa4/0x2c8 [pcie_exynos_gs
f050c3a198650ac29c8e84e424e142925038c66a]
[ 6644.917935] irq_forced_thread_fn+0x48/0xac
[ 6644.917942] irq_thread+0x158/0x2b8
[ 6644.917948] kthread+0x11c/0x1b0
[ 6644.917956] ret_from_fork+0x10/0x20
---
[1]: Steps:
$ dmesg -C
$ echo 1 > /d/clear_warn_once
$ taskset c0 /data/local/tmp/fio --name=fio.result --direct=1
--directory=/data/local/tmp/out/ --rw=write --size=128m --numjobs=1
--group_reporting=1 --loops=10 --fsync_on_close=1 --end_fsync=1
$ dmesg > dmesg.txt
Regards,
Jack Lee