When running top
, I can see this (shortened) example output:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4586 ipc-adm+ 20 0 1303900 605152 92844 S 30,6 29,3 3:52.88 firefox
3985 ipc-adm+ 20 0 258588 124508 63072 S 12,2 6,0 0:40.04 compiz
3092 root 20 0 172392 56164 25980 S 6,1 2,7 0:30.13 Xorg
There are two values that I am interested in: PR
(Priority) and NI
(Niceness).
If I understood what I already found out correctly, both determine how much CPU time a process will get in contrast to other processes. But what is the difference between those values then?
Could you also please describe how to manipulate those values of a process and under which circumstances this might be useful?
Nice value is a user-space and priority PR is the process's actual priority that use by Linux kernel. In linux system priorities are 0 to 139 in which 0 to 99 for real time and 100 to 139 for users. nice value range is -20 to +19 where -20 is highest, 0 default and +19 is lowest. relation between nice value and priority is :
so , the value of
PR = 20 + (-20 to +19)
is 0 to 39 that maps 100 to 139.According to top manual:
NI is nice value of task.
Edit: By default when a program is launched in Linux, it gets launched with the priority of '0'. However you can change the priority of your programs by either of the following methods.
You can launch a program with your required priority using
you can also change the priority of an already running process using
What is Priority and Why Should I Care?
When talking about processes priority is all about managing processor time. The Processor or CPU is like a human juggling multiple tasks at the same time. Sometimes we can have enough room to take on multiple projects. Sometimes we can only focus on one thing at a time. Other times something important pops up and we want to devote all of our energy into solving that problem while putting less important tasks on the back burner.
In Linux we can set guidelines for the CPU to follow when it is looking at all the tasks it has to do. These guidelines are called niceness or nice value. The Linux niceness scale goes from -20 to 19. The lower the number the more priority that task gets. If the niceness value is high number like 19 the task will be set to the lowest priority and the CPU will process it whenever it gets a chance. The default nice value is zero.
By using this scale we can allocate our CPU resources more appropriately. Lower priority programs that are not important can be set to a higher nice value, while high priority programs like daemons and services can be set to receive more of the CPU’s focus. You can even give a specific user a lower nice value for all of his/her processes so you can limit their ability to slow down the computer’s core services.
Source
Set the priority for new processes with
nice
, egfor existing processes
To set the priority
<0
you needsudo
, eg:but not for a priority
>=0
Example
Other example
To renice all running processes for a specific user
Short Answer
PR is the priority level. The lower the PR, the higher the priority of the process will be.
PR is calculated as follows:
PR = 20 + NI
(NI is nice and ranges from -20 to 19)PR = - 1 - real_time_priority
(real_time_priority ranges from 1 to 99)Long Answer
There are 2 types of processes, the normal ones and the real time.
For the normal ones (and only for those), nice is applied as follows:
Nice
The "niceness" scale goes from -20 to 19, whereas -20 is the highest priority and 19 the lowest priority. The priority level is calculated as follows:
Where NI is the nice level and PR is the priority level. So as we can see, the -20 actually maps to 0, while the 19 maps to 39.
By default, a program nice value is 0, but it is possible for the root user to launch programs with a specified nice value by using the following command:
Real Time
We could go even further. The nice priority is actually used for user programs. Whereas the UNIX/LINUX overall priority has a range of 140 values, nice value enables the process to map to the last part of the range (from 100 to 139). This equation leaves the values from 0 to 99 unreachable which will correspond to a negative PR level (from -100 to -1). To be able to access to those values, the process should be stated as "real time".
There are 5 scheduling policies in a LINUX environment that can be displayed with the following command:
Which will show the following list:
The scheduling processes could be divided into 2 groups, the normal scheduling policies (1 to 3) and the real time scheduling policies (4 and 5). The real time processes will always have priority over normal processes. A real time process could be called using the following command (The example is how to declare a SCHED_RR policy):
To obtain the PR value for a real time process the following equation is applied:
Where
rt_prior
corresponds to the priority between 1 and 99. For that reason the process which will have the higher priority over other processes will be the one called with the number 99.It is important to note that for real time processes, the nice value is not used.
To see the current "niceness" and PR value of a process the following command can be executed:
Which shows the following output:
In the figure the PR and NI values are displayed. It is good to note the process with PR value -51 that corresponds to a real time value. There are also some processes whose PR value is stated as "rt". This value actually corresponds to a PR value of -100.