Linux Kernel Configuration
The page discusses recommended patches and configuration for the Linux kernel to provide the best possible performance for real time applications (without introducing a new application interface like e.g. RTAI).
The following sections will not go into details regarding patching and building, but rather focus on providing an overview.
More details regarding kernel patching and building can be found in the RT_PREEMPT_HOWTO.
The RT_PREEMPT patch aims to make the standard Linux kernel fully preemptible and enable hard realtime capabilities. According to the RT_PREEMPT_HOWTO, this is "how the magic is done":
- Making in-kernel locking-primitives (using spinlocks) preemptible though reimplementation with rtmutexes
- Critical sections protected by i.e. spinlock_t and rwlock_t are now preemptible. The creation of non-preemptible sections (in kernel) is still possible with raw_spinlock_t (same APIs like spinlock_t).
- Implementing priority inheritance for in-kernel mutexes, spinlocks and rw_semaphores
- Converting interrupt handlers into preemptible kernel threads: The RT-Preempt patch treats soft interrupt handlers in kernel thread context, which is represented by a task_struct like a common userspace process. However, it is also possible to register an IRQ in kernel context.
- Converting the old Linux timer API into separate infrastructures for high resolution kernel timers plus one for timeouts, leading to userspace POSIX timers with high resolution.
The latest and actively maintained kernel patches are listed on the Real-Time Linux Wiki.
Configure the kernel according to your hardware requirements. Other than that most default configurations are fine, but the following should be ensured:
- Enable High Resolution Timer Support
- Enable Fully Premptible Kernel (RT)
- Enable Tickless kernel
- Disable Power management and ACPI options (depending on kernel version, this could be configured after building the kernel)