Messages in this thread | | | From | Marc Zyngier <> | Subject | [PATCH 0/2] arm64: Allow the rescheduling IPI to bypass irq_enter/exit | Date | Sun, 1 Nov 2020 13:14:28 +0000 |
| |
Vincent recently reported [1] that 5.10-rc1 showed a significant regression when running "perf bench sched pipe" on arm64, and pinpointed it to the recent move to handling IPIs as normal interrupts.
The culprit is the use of irq_enter/irq_exit around the handling of the rescheduling IPI, meaning that we enter the scheduler right after the handling of the IPI instead of deferring it to the next preemption event. This accounts for most of the overhead introduced.
On architectures that have architected IPIs at the CPU level (x86 being the obvious one), the absence of irq_enter/exit is natural. ARM (both 32 and 64bits) mimicked this behaviour by having some arch-specific handling for the interrupts that are used to implement IPIs. Moving IPIs on the normal interrupt path introduced the regression.
This couple of patches try to acknowledge the fact that some IPIs are "special", in the sense that they don't need to follow the standard interrupt handling flow.
The good news is that it cures the regression on arm64, and could be similarly beneficial to both 32bit ARM, MIPS, or any other architecture that uses a unique IRQ to represent the scheduler IPI.
The bad news is that these patches are ugly as sin, and I really don't like them. I specially hate that they can give driver authors the idea that they can make random interrupts "faster".
Comments, suggestions and hate mails appreciated, as always.
M.
[1] https://lore.kernel.org/r/CAKfTPtDjPpri5Gt6kLeFp_B_zJUZ5DYXEqtJ+0VKohU-y9bFEQ@mail.gmail.com
Marc Zyngier (2): genirq: Allow an interrupt to be marked as 'naked' arm64: Mark the recheduling IPI as naked interrupt
arch/arm64/kernel/smp.c | 4 ++++ include/linux/irq.h | 4 +++- kernel/irq/debugfs.c | 1 + kernel/irq/irqdesc.c | 17 ++++++++++++----- kernel/irq/settings.h | 7 +++++++ 5 files changed, 27 insertions(+), 6 deletions(-)
-- 2.28.0
| |