From: Thomas Richard Date: Mon, 5 Jan 2026 12:46:52 +0000 (+0100) Subject: kernel: add preemption models X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5d720117f7060e789ea4435f044166837af83354;p=thirdparty%2Fopenwrt.git kernel: add preemption models Introduce preemption model selection with PREEMPT_NONE as the default. PREEMPT_NONE is the traditional Linux preemption model and also the best choice for servers. Signed-off-by: Thomas Richard Link: https://github.com/openwrt/openwrt/pull/21413 Signed-off-by: Hauke Mehrtens --- diff --git a/config/Config-kernel.in b/config/Config-kernel.in index 86920632292..870e53206a9 100644 --- a/config/Config-kernel.in +++ b/config/Config-kernel.in @@ -1492,3 +1492,72 @@ config KERNEL_WERROR and unusual warnings, or you have some architecture with problems, you may need to disable this config option in order to successfully build the kernel. + +choice + prompt "Preemption Model" + default KERNEL_PREEMPT_NONE + +config KERNEL_PREEMPT_NONE + bool "No Forced Preemption (Server)" + help + This is the traditional Linux preemption model, geared towards + throughput. It will still provide good latencies most of the + time, but there are no guarantees and occasional longer delays + are possible. + + Select this option if you are building a kernel for a server or + scientific/computation system, or if you want to maximize the + raw processing power of the kernel, irrespective of scheduling + latencies. + +config KERNEL_PREEMPT_VOLUNTARY + bool "Voluntary Kernel Preemption (Desktop)" + help + This option reduces the latency of the kernel by adding more + "explicit preemption points" to the kernel code. These new + preemption points have been selected to reduce the maximum + latency of rescheduling, providing faster application reactions, + at the cost of slightly lower throughput. + + This allows reaction to interactive events by allowing a + low priority process to voluntarily preempt itself even if it + is in kernel mode executing a system call. This allows + applications to run more 'smoothly' even when the system is + under load. + + Select this if you are building a kernel for a desktop system. + +config KERNEL_PREEMPT + bool "Preemptible Kernel (Low-Latency Desktop)" + help + This option reduces the latency of the kernel by making + all kernel code (that is not executing in a critical section) + preemptible. This allows reaction to interactive events by + permitting a low priority process to be preempted involuntarily + even if it is in kernel mode executing a system call and would + otherwise not be about to reach a natural preemption point. + This allows applications to run more 'smoothly' even when the + system is under load, at the cost of slightly lower throughput + and a slight runtime overhead to kernel code. + + Select this if you are building a kernel for a desktop or + embedded system with latency requirements in the milliseconds + range. + +config KERNEL_PREEMPT_RT + bool "Fully Preemptible Kernel (Real-Time)" + depends on (x86_64 || aarch64 || riscv64) + help + This option turns the kernel into a real-time kernel by replacing + various locking primitives (spinlocks, rwlocks, etc.) with + preemptible priority-inheritance aware variants, enforcing + interrupt threading and introducing mechanisms to break up long + non-preemptible sections. This makes the kernel, except for very + low level and critical code paths (entry code, scheduler, low + level interrupt handling) fully preemptible and brings most + execution contexts under scheduler control. + + Select this if you are building a kernel for systems which + require real-time guarantees. + +endchoice