Understand process priority
unga888 at yahoo.com
Sun Dec 23 09:42:32 PST 2007
--- Erik Trulsson <ertr1013 at student.uu.se> wrote:
> On Sat, Dec 22, 2007 at 07:09:47PM -0800, Unga
> > Hi all
> > $ ps -o pri,ni,rtprio,command -p `pgrep amarok`
> > PRI NI RTPRIO COMMAND
> > 20 0 normal amarokapp
> > 1) Are there are 3 priority values per process, or
> > just one?
> There is really only one priority that is used when
> processes. The other two fields (nice and rtprio)
> modifies how
> the priority is set, but do not directly affect the
> The actual priority is handled internally in the
> kernel and cannot
> be modified directly from userland.
> It is always the case that if two (or more)
> processes both want
> to use the CPU at the same time, then it is the one
> with the highest
> priority which gets to use it.
> (The term 'highest priority' can be slightly
> confusing, since it is normally
> the process with the lowest value in the 'PRI'
> field which has the highest
> For those processes that has a real time priority
> (rtprio) of 'normal',
> i.e. most normal processes, the priority is adjusted
> depending on how long it has waited for CPU, and how
> much CPU it used the
> last time it ran, etc. The 'nice' value affects how
> quickly the priority
> is adjusted up or down. A high nice value means
> that the priority will
> only increase slowly and decrease quickly, while it
> is the other way around
> for processes with a low nice value.
> Note however that even a process with a high nice
> value will get at least a
> little CPU time now and then, even if there are
> processes around that are
> much less nice that want the CPU too.
> For processes with a real time priority of something
> other than 'normal' the
> priority is not adjusted dynamically.
> Processes with rtprio=idle always have lower
> priority than all other
> Processes with an actual real time priority set will
> always have higher
> priority than non-real time processes.
> > 2) How should I read above? Is it Priority=20, ie.
> > NI=0, RTPRIO=normal?
> It is: Priority=20; Nice=0; Real time
> > Does it all mean the same thing,
> > like the bytes=1048576 and KB=1024 and MB=1?
> > 3) The rtprio(1) says "Priority is an integer
> > 0 and RTP_PRIO_MAX (usually 31). 0 is the highest
> > priority". But when I run following command:
> > $ ps aux -o pri,ni,rtprio,command
> > USER PID %CPU %MEM VSZ RSS TT STAT
> > TIME COMMAND PRI NI RTPRIO COMMAND
> > root 10 99.2 0.0 0 8 ?? RL
> > 0:00.00 [idle: cpu1] 171 0 idle:25 [idle:
> > root 26 0.0 0.0 0 8 ?? WL
> > 0:00.02 [irq18: envy24ht -80 0 intr:4 [irq18:
> > envy24ht
> > test 1212 0.0 9.3 58544 48176 ?? S 8:06PM
> > 0:06.15 amarokapp 20 0 normal amarokapp
> > That is,
> > PID PRI NI RTPRIO
> > 10 171 0 idle:25
> > 26 -80 0 intr:4
> > 1212 20 0 normal
> > This shows priority ranges at least from -80 to
> > contrary to the range mentioned in rtprio(1). Does
> > this means PID=26 has a higher priority than
> rtprio(1) does not set the PRI field directly. It
> sets the RTPRIO
> field. In your example these are 'idle:25' 'intr:4'
> and 'normal'
> indicating that these are run with idle priority,
> interrupt priority,
> and normal priority respectively. (The 'intr' value
> in the rtprio field
> can probably only be set directly by the kernel for
> interrupt threads, and
> is a bit outside the normal real time priorities.)
> The actual idel/real time priority value set by
> rtprio(1)/idprio(1) is not
> displayed by ps(1), but can be shown by
> Yes, PID=26 has a much higher priority than
> PID=1212, as it should
> considering that PID=26 is an interrupt thread,
> while PID=1212 is just
> an ordinary, non-real time, process.
> > 4) Can a PRI=0 be considered Realtime?
> No, not really. If a process does not have rtprio
> set to something
> other than 'normal' or 'idle' it is not a real time
> > 5) What is the meaning of priority=0 in
> > /etc/login.conf? Is it Realtime?
> No, the 'priority' field in /etc/login.conf sets the
> nice value.
> > 6) What is the value should I set for priority in
> > /etc/login.conf if I want Realtime?
> You can't do that.
> You should also not set any process to a real-time
> priority unless
> you know exactly what you are doing and why you are
> doing it.
> The normal way of setting the relative priorities of
> processes on Unix
> systems is by setting the nice value (and only root
> is allowed to lower the
> nice value.)
Thanks for the detailed explanation.
Following is from /usr/include/sys/priority.h:
* Priorities range from 0 to 255, but differences of
less then 4 (RQ_PPQ)
* are insignificant. Ranges are as follows:
* Interrupt threads: 0 - 63
* Top half kernel threads: 64 - 127
* Realtime user threads: 128 - 159
* Time sharing user threads: 160 - 223
* Idle user threads: 224 - 255
* XXX If/When the specific interrupt thread and top
half thread ranges
* disappear, a larger range can be used for user
ps aux -o pri,ni,rtprio,command shows following:
USER PID %CPU %MEM VSZ RSS TT STAT STARTED
TIME COMMAND PRI NI RTPRIO COMMAND
root 12 91.0 0.0 0 8 ?? RL 9:50AM
830:41.81 [idle: cpu0] 171 0 idle:25 [idle: cpu0]
root 13 0.0 0.0 0 8 ?? WL 9:50AM
3:28.96 [swi4: clock sio -32 0 intr:52 [swi4: clock
root 696 0.0 0.1 3240 764 ?? Is 9:51AM
0:00.06 /usr/sbin/moused 96 0 normal
1. Can I further understand how to interpret above
1a) 171 0 idle:25
What is 171? Has is upgraded to Time sharing user
threads range to be executed? What is idle:25? Is it
its default priority 224+25=249?
1b) -32 0 intr:52
What is -32? What is 52? Is it its default
priority 52 in the Interrupt threads range?
1c) 96 0 normal
The normal is what? Is it priority 160 or 223?
2. What is the value range can be specified for
priority in /etc/login.conf?
Be a better friend, newshound, and
know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
More information about the freebsd-questions