Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

On Linux SCHED_FIFO and SCHED_RR

I'm writing a a very small daemon that must remain responsive even when a system is under severe stress. I'm looking at the differences between SCHED_FIFO and SCHED_RR in regards to scheduling, as well as trying to determine a sensible priority.

Which scheduler would be appropriate for a small but critical monitoring daemon, what priority would be reasonably safe? I'm still coming up a little fuzzy when trying to understand the differences between the two.

My program is allocating under 3k (and uses mlockall()), it writes about 600 bytes to xenbus then sleeps, but its impossible for me to tell how much time (in ms) it will take to actually write the data.. since what is written depends on a configuration file.

Thanks in advance for any suggestions / explanations.

like image 503
Tim Post Avatar asked Jan 01 '09 18:01

Tim Post


People also ask

What is Linux default scheduling policy?

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.

What scheduler is used in Linux?

Linux uses a Completely Fair Scheduling (CFS) algorithm, which is an implementation of weighted fair queueing (WFQ). Imagine a single CPU system to start with: CFS time-slices the CPU among running threads.

How do I change scheduling policy in Linux?

Change Scheduling Policy “SCHED_FIFO” with Priority To change the scheduling policy of a process and set its priority level, execute the below-mentioned option with the chart command. For example, the current schedule of the program is “Sched_Batch” and we want to change it to “Sched_Fifo”.

How process scheduling is done in Linux?

Process Scheduler uses Scheduling Algorithms that helps in deciding the process to be executed. In LINUX, there are two types of processes namely - Real-time processes and Normal processes. O(n) scheduler divides the processor's time into a unit called epochs. Each task is allowed to use at max 1 epoch.


4 Answers

The infamous pchdtvr program, which captures digital TV signals, uses SCHED_FIFO to make sure that the TV packets are written to disk no matter what. It can capture 4 shows at once while playing Doom on an old computer.

The program is infamous because it was released under GPL and the author tried to revoke the GPL retroactively. This act provoked a minor firestorm. Anyway, you can find a recent version to study at http://frequal.com/pmn/pchdtvr.html.

like image 54
Norman Ramsey Avatar answered Oct 08 '22 07:10

Norman Ramsey


SCHED_FIFO can't be preempted (context switched to another process) unless another process of higher priority shows up in the execution queue.

SCHED_RR can be preempted by a time quantum (delay given to a process to execute).

They are both "real-time" priorities of linux based schedulers.

like image 45
Alex Avatar answered Oct 08 '22 05:10

Alex


I'm not an expert for scheduling schemes, but have a look at

man sched_setscheduler

it details what the difference between the different scheduling algorithms are, and provide links to other scheduling functions. SCHED_FIFO actually sounds pretty dangerous, but is described as the most aggressive scheduling:

A SCHED_FIFO process runs until either it is blocked by an I/O request, it is preempted by a higher priority process, or it calls sched_yield(2).

Beware not to lock up your system. I would personally do some empirical tests to see what priority fits the best and how they behave exactly.

like image 44
Johannes Schaub - litb Avatar answered Oct 08 '22 05:10

Johannes Schaub - litb


If all your other tasks use the standard scheduler, it makes no difference; SCHED_FIFO and SCHED_RR only affect the scheduling of these tasks with each other.

So on a normal system it makes no difference. FIFO is easiest to understand, so use that I guess.

If you have several tasks of different priorities, only the higher one will be run if they are all ready to be run (and there is only one CPU core)

like image 32
MarkR Avatar answered Oct 08 '22 07:10

MarkR