The 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: enables additional checks for requests for preemption
CONFIG_PREEMPT: 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 which stops the current thread. Since it reduces the number of transitions between the kernel and user space and may reduce ...