1ec8f24b7SThomas Gleixner# SPDX-License-Identifier: GPL-2.0-only 2cc19ca86SIngo Molnar 3f8cbd99bSIngo Molnarchoice 4f8cbd99bSIngo Molnar prompt "Preemption Model" 5f8cbd99bSIngo Molnar default PREEMPT_NONE 6f8cbd99bSIngo Molnar 7f8cbd99bSIngo Molnarconfig PREEMPT_NONE 8f8cbd99bSIngo Molnar bool "No Forced Preemption (Server)" 9cc19ca86SIngo Molnar help 10f8cbd99bSIngo Molnar This is the traditional Linux preemption model, geared towards 11f8cbd99bSIngo Molnar throughput. It will still provide good latencies most of the 12f8cbd99bSIngo Molnar time, but there are no guarantees and occasional longer delays 13f8cbd99bSIngo Molnar are possible. 14f8cbd99bSIngo Molnar 15f8cbd99bSIngo Molnar Select this option if you are building a kernel for a server or 16f8cbd99bSIngo Molnar scientific/computation system, or if you want to maximize the 17f8cbd99bSIngo Molnar raw processing power of the kernel, irrespective of scheduling 18f8cbd99bSIngo Molnar latencies. 19f8cbd99bSIngo Molnar 20f8cbd99bSIngo Molnarconfig PREEMPT_VOLUNTARY 21f8cbd99bSIngo Molnar bool "Voluntary Kernel Preemption (Desktop)" 2287a4c375SChristoph Hellwig depends on !ARCH_NO_PREEMPT 23f8cbd99bSIngo Molnar help 24f8cbd99bSIngo Molnar This option reduces the latency of the kernel by adding more 25f8cbd99bSIngo Molnar "explicit preemption points" to the kernel code. These new 26f8cbd99bSIngo Molnar preemption points have been selected to reduce the maximum 27f8cbd99bSIngo Molnar latency of rescheduling, providing faster application reactions, 283dde6ad8SDavid Sterba at the cost of slightly lower throughput. 29f8cbd99bSIngo Molnar 30f8cbd99bSIngo Molnar This allows reaction to interactive events by allowing a 31f8cbd99bSIngo Molnar low priority process to voluntarily preempt itself even if it 32f8cbd99bSIngo Molnar is in kernel mode executing a system call. This allows 33f8cbd99bSIngo Molnar applications to run more 'smoothly' even when the system is 34cc19ca86SIngo Molnar under load. 35cc19ca86SIngo Molnar 36f8cbd99bSIngo Molnar Select this if you are building a kernel for a desktop system. 37f8cbd99bSIngo Molnar 38b8d33498SThomas Gleixnerconfig PREEMPT 39f8cbd99bSIngo Molnar bool "Preemptible Kernel (Low-Latency Desktop)" 4087a4c375SChristoph Hellwig depends on !ARCH_NO_PREEMPT 41b8d33498SThomas Gleixner select PREEMPTION 42e335e3ebSRaghavendra K T select UNINLINE_SPIN_UNLOCK if !ARCH_INLINE_SPIN_UNLOCK 436ef869e0SMichal Hocko select PREEMPT_DYNAMIC if HAVE_PREEMPT_DYNAMIC 44f8cbd99bSIngo Molnar help 45f8cbd99bSIngo Molnar This option reduces the latency of the kernel by making 46f8cbd99bSIngo Molnar all kernel code (that is not executing in a critical section) 47f8cbd99bSIngo Molnar preemptible. This allows reaction to interactive events by 48f8cbd99bSIngo Molnar permitting a low priority process to be preempted involuntarily 49f8cbd99bSIngo Molnar even if it is in kernel mode executing a system call and would 50f8cbd99bSIngo Molnar otherwise not be about to reach a natural preemption point. 51f8cbd99bSIngo Molnar This allows applications to run more 'smoothly' even when the 523dde6ad8SDavid Sterba system is under load, at the cost of slightly lower throughput 53f8cbd99bSIngo Molnar and a slight runtime overhead to kernel code. 54f8cbd99bSIngo Molnar 55f8cbd99bSIngo Molnar Select this if you are building a kernel for a desktop or 56f8cbd99bSIngo Molnar embedded system with latency requirements in the milliseconds 57f8cbd99bSIngo Molnar range. 58f8cbd99bSIngo Molnar 59a50a3f4bSThomas Gleixnerconfig PREEMPT_RT 60a50a3f4bSThomas Gleixner bool "Fully Preemptible Kernel (Real-Time)" 61a50a3f4bSThomas Gleixner depends on EXPERT && ARCH_SUPPORTS_RT 62b8d33498SThomas Gleixner select PREEMPTION 63a50a3f4bSThomas Gleixner help 64a50a3f4bSThomas Gleixner This option turns the kernel into a real-time kernel by replacing 65a50a3f4bSThomas Gleixner various locking primitives (spinlocks, rwlocks, etc.) with 66a50a3f4bSThomas Gleixner preemptible priority-inheritance aware variants, enforcing 67a50a3f4bSThomas Gleixner interrupt threading and introducing mechanisms to break up long 68a50a3f4bSThomas Gleixner non-preemptible sections. This makes the kernel, except for very 69d61ca3c2SSrivatsa S. Bhat (VMware) low level and critical code paths (entry code, scheduler, low 70a50a3f4bSThomas Gleixner level interrupt handling) fully preemptible and brings most 71a50a3f4bSThomas Gleixner execution contexts under scheduler control. 72a50a3f4bSThomas Gleixner 73a50a3f4bSThomas Gleixner Select this if you are building a kernel for systems which 74a50a3f4bSThomas Gleixner require real-time guarantees. 75a50a3f4bSThomas Gleixner 76f8cbd99bSIngo Molnarendchoice 77cc19ca86SIngo Molnar 78bdd4e85dSFrederic Weisbeckerconfig PREEMPT_COUNT 79bdd4e85dSFrederic Weisbecker bool 80a50a3f4bSThomas Gleixner 81b8d33498SThomas Gleixnerconfig PREEMPTION 82a50a3f4bSThomas Gleixner bool 83a50a3f4bSThomas Gleixner select PREEMPT_COUNT 846ef869e0SMichal Hocko 856ef869e0SMichal Hockoconfig PREEMPT_DYNAMIC 866ef869e0SMichal Hocko bool 876ef869e0SMichal Hocko help 886ef869e0SMichal Hocko This option allows to define the preemption model on the kernel 896ef869e0SMichal Hocko command line parameter and thus override the default preemption 906ef869e0SMichal Hocko model defined during compile time. 916ef869e0SMichal Hocko 926ef869e0SMichal Hocko The feature is primarily interesting for Linux distributions which 936ef869e0SMichal Hocko provide a pre-built kernel binary to reduce the number of kernel 946ef869e0SMichal Hocko flavors they offer while still offering different usecases. 956ef869e0SMichal Hocko 966ef869e0SMichal Hocko The runtime overhead is negligible with HAVE_STATIC_CALL_INLINE enabled 976ef869e0SMichal Hocko but if runtime patching is not available for the specific architecture 986ef869e0SMichal Hocko then the potential overhead should be considered. 996ef869e0SMichal Hocko 1006ef869e0SMichal Hocko Interesting if you want the same pre-built kernel should be used for 1016ef869e0SMichal Hocko both Server and Desktop workloads. 102*9edeaea1SPeter Zijlstra 103*9edeaea1SPeter Zijlstraconfig SCHED_CORE 104*9edeaea1SPeter Zijlstra bool "Core Scheduling for SMT" 105*9edeaea1SPeter Zijlstra default y 106*9edeaea1SPeter Zijlstra depends on SCHED_SMT 107*9edeaea1SPeter Zijlstra 108