ATAD #21 – Linux process priority range
The Linux kernel implements two separate priority ranges.
The first is the nice value, a number from –20 to 19 with a default of zero. Larger nice values correspond to a lower priority (you are being nice to the other processes on the system). Processes with a lower nice value (higher priority) run before processes with a higher nice value (lower priority). The nice value also helps determine how long a processor timeslice the process receives. A process with a nice value of –20 receives the maximum timeslice, whereas a process with a nice value of 19 receives the minimum timeslice. Nice values are the standard priority range used in all Unix systems.
The second range is the real-time priority (rtprio
). By default, it ranges from zero to 99. All real-time processes are at a higher priority than normal processes. Linux implements real-time priorities in accordance with POSIX.
In order to select a process to run, the Linux scheduler must consider the priority of each process. Actually, there are two kinds of priority:
Static priority
This kind is assigned by the users to real-time processes and ranges from 1 to 99 (highest). It is never changed by the scheduler. The sys_sched_get_priority_max( )
routine returns the static priority of the process, it returns 0 for non-realtime processes.
Dynamic priority
This kind applies only to conventional processes (non realtime processes)
Processes have an initial priority specified as the nice value. This value is stored in the static_prio
member of the process’s task_struct
. The value is called the static priority because it does not change from what the user specifies. The scheduler, in turn, bases its decisions on the dynamic priority that is stored in prio
. The dynamic priority is calculated as a function of the static priority and the task’s interactivity
The static priority of a real-time process is always higher than the dynamic priority of a conventional one: the scheduler will start running conventional processes only when there is no real-time process in a TASK_RUNNING
state.
.
Do experiment with the ps
command
~$ ps -eo pid,rtprio,ni,pri,comm
PID RTPRIO NI PRI COMMAND
1 - 0 19 init
2 - -5 24 kthreadd
3 99 - 139 migration/0
4 - -5 24 ksoftirqd/0
.
This scale could probably illustrate priorities better
HIGH PRIORITY – – – – – > – – – – – > – – – – – > – – – – – > – – – – LEAST PRIORITY
……..real time priority (static priority)…….| …. nice value (dynamic priority) …..
99 ……………………….. 50 ……………………… 1 | -20 …….. -10 …….. 0 …….. 10 ……. 19
.
Further Reading: Linux Process Scheduler, Linux Process Scheduling
__tipped__
–vinaydeep
[…] Go to the author’s original blog: ATAD #21 – Linux process priority range […]
ATAD #21 - Linux process priority range
August 19, 2008 at 4:28 pm
[…] – bookmarked by 2 members originally found by JENTHELUSH on 2008-08-26 ATAD #21 – Linux process priority range https://atipaday.wordpress.com/2008/08/19/atad-21-linux-process-priority-range/ – bookmarked by 1 […]
Bookmarks about Process
September 22, 2008 at 2:45 am
FANTASTIC!
PrureGake
April 9, 2009 at 1:31 pm
Hey, cool tips. Perhaps I’ll buy a bottle of beer to that man from that chat who told me to visit your blog 🙂
Random T.
April 22, 2009 at 7:01 am
do pass on the love 🙂
veed
May 20, 2013 at 4:58 am
Just to let you know your webpage looks a little bit strange in Firefox on my computer with Linux .
click
May 27, 2012 at 7:44 am