Date: Sun, 23 Dec 2007 09:42:30 -0800 (PST) From: Unga <unga888@yahoo.com> To: Erik Trulsson <ertr1013@student.uu.se> Cc: freebsd-questions@freebsd.org Subject: Re: Understand process priority Message-ID: <952494.17060.qm@web57001.mail.re3.yahoo.com> In-Reply-To: <20071223074047.GA97604@owl.midgard.homeip.net>
next in thread | previous in thread | raw e-mail | index | archive | help
--- Erik Trulsson <ertr1013@student.uu.se> wrote: > On Sat, Dec 22, 2007 at 07:09:47PM -0800, Unga > wrote: > > 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 > scheduling > processes. The other two fields (nice and rtprio) > modifies how > the priority is set, but do not directly affect the > priority. > > 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 > priority.) > > For those processes that has a real time priority > (rtprio) of 'normal', > i.e. most normal processes, the priority is adjusted > dynamically > 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. > 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 > priority=normal > > > > Does it all mean the same thing, > > like the bytes=1048576 and KB=1024 and MB=1? > > No. > > > > > 3) The rtprio(1) says "Priority is an integer > between > > 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 > STARTED > > TIME COMMAND PRI NI RTPRIO COMMAND > > > > root 10 99.2 0.0 0 8 ?? RL > 7:40PM > > 0:00.00 [idle: cpu1] 171 0 idle:25 [idle: > cpu1] > > > > root 26 0.0 0.0 0 8 ?? WL > 7:40PM > > 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 > 171 > > contrary to the range mentioned in rtprio(1). Does > > this means PID=26 has a higher priority than > PID=1212? > > 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 > rtprio(1)/idprio(1). > > > 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 > process. > > > > > 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 processes. */ 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 sio root 696 0.0 0.1 3240 764 ?? Is 9:51AM 0:00.06 /usr/sbin/moused 96 0 normal /usr/sbin/moused 1. Can I further understand how to interpret above numbers? 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? Regards Unga ____________________________________________________________________________________ Be a better friend, newshound, and know-it-all with Yahoo! Mobile. Try it now. http://mobile.yahoo.com/;_ylt=Ahu06i62sR8HDtDypao8Wcj9tAcJ
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?952494.17060.qm>