Kernel preemption
Preemption latency occurs because it is not always safe or desirable to preempt the current thread of execution and call the scheduler. Mainline Linux has three settings for preemption, selected via the Kernel Features | Preemption Model menu:
CONFIG_PREEMPT_NONE
: No preemption.CONFIG_PREEMPT_VOLUNTARY
: This enables additional checks for requests
for preemption.CONFIG_PREEMPT
: This allows the kernel to be preempted.
With preemption set to none
, kernel code will continue without rescheduling until it either returns via a syscall
back to user space, where preemption is always allowed, or it encounters a sleeping wait that stops the current thread. Since it reduces the number of transitions between the kernel and user space and may reduce the total number of context switches, this option results in the highest throughput at the expense of large preemption latencies. It is the default for servers and some desktop kernels where throughput is more...