diff options
| author | Thomas Richard | 2026-01-05 12:46:52 +0000 |
|---|---|---|
| committer | Hauke Mehrtens | 2026-01-24 21:52:49 +0000 |
| commit | 5d720117f7060e789ea4435f044166837af83354 (patch) | |
| tree | be8c1ea2aeb556e11fd8c6a9ea362a954367050a | |
| parent | 794b4dee65ed09132b8cb1bdba239f7578a57a30 (diff) | |
| download | openwrt-5d720117f7060e789ea4435f044166837af83354.tar.gz | |
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 <thomas.richard@bootlin.com>
Link: https://github.com/openwrt/openwrt/pull/21413
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
| -rw-r--r-- | config/Config-kernel.in | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/config/Config-kernel.in b/config/Config-kernel.in index 8692063229..870e53206a 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 |