Chapter 5. Priorities and Policies
All Linux threads have one of the following scheduling policies:
SCHED_OTHER
orSCHED_NORMAL
: The default policySCHED_BATCH
: Similar toSCHED_OTHER
, but with a throughput orientationSCHED_IDLE
: A lower priority thanSCHED_OTHER
SCHED_FIFO
: A first in/first out realtime policySCHED_RR
: A round-robin realtime policy
The policies that are critical to Red Hat Enterprise Linux for Real Time are
SCHED_OTHER
, SCHED_FIFO
, and SCHED_RR
.
SCHED_OTHER
or SCHED_NORMAL
is the default scheduling policy for Linux threads. It has a dynamic priority that is changed by the system based on the characteristics of the thread. Another thing that effects the priority of SCHED_OTHER
threads is their nice value. The nice value is a number between -20 (highest priority) and 19 (lowest priority). By default, SCHED_OTHER
threads have a nice value of 0. Adjusting the nice value will change the way the thread is handled.
Threads with a
SCHED_FIFO
policy will run ahead of SCHED_OTHER
tasks. Instead of using nice values, SCHED_FIFO
uses a fixed priority between 1 (lowest) and 99 (highest). A SCHED_FIFO
thread with a priority of 1 will always be scheduled ahead of any SCHED_OTHER
thread.
The
SCHED_RR
policy is very similar to the SCHED_FIFO
policy. In the SCHED_RR
policy, threads of equal priority are scheduled in a round-robin fashion. Generally, SCHED_FIFO
is preferred over SCHED_RR
.
SCHED_FIFO
and SCHED_RR
threads will run until one of the following events occurs:
- The thread goes to sleep or begins waiting for an event
- A higher-priority realtime thread becomes ready to run
If one of these events does not occur, the threads will run indefinitely on that processor, and lower-priority threads will not be given a chance to run. This can result in system service threads failing to run, and operations such as memory swapping and filesystem data flushing not occurring as expected.