根据手册页和维基百科;nice
范围从 -20 到 20。
然而,当我运行以下命令时,我发现某些进程具有非数字值,例如(-)。请参阅左侧第六列,标题为“NI”。
(-) 的好感表示什么?
ps axl
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 1 0 20 0 19356 1548 poll_s Ss ? 0:00 /sbin/init
1 0 2 0 20 0 0 0 kthrea S ? 0:00 [kthreadd]
1 0 3 2 -100 - 0 0 migrat S ? 0:03 [migration/0]
1 0 4 2 20 0 0 0 ksofti S ? 0:51 [ksoftirqd/0]
1 0 5 2 -100 - 0 0 cpu_st S ? 0:00 [migration/0]
5 0 6 2 -100 - 0 0 watchd S ? 0:09 [watchdog/0]
1 0 7 2 -100 - 0 0 migrat S ? 0:08 [migration/1]
1 0 8 2 -100 - 0 0 cpu_st S ? 0:00 [migration/1]
1 0 9 2 20 0 0 0 ksofti S ? 1:03 [ksoftirqd/1]
5 0 10 2 -100 - 0 0 watchd S ? 0:09 [watchdog/1]
1 0 11 2 -100 - 0 0 migrat S ? 0:05 [migration/2]
我检查了 3 台正在运行的服务器:Ubuntu 12.04、CentOs 6.5 和 Mac OsX 10.9。只有 Ubuntu 和 CentOs 机器具有非数字的友善值。
答案1
(-) 的好感表示什么?
请注意,那些也有一个优先原则分数为-100;这表明该进程被安排为即时的过程。实时进程不使用良好的分数,并且始终具有比正常进程更高的优先级,但彼此之间仍然存在差异。
您可以使用chrt
命令查看每个进程的详细信息(例如chrt -p 3
)。你的 -100 之一可能会报告“当前调度优先级”为 99 - 与 不同的是nice
,这里的高值表示更高的优先级,这可能是 top 创建-100
数字的地方。无论nice值如何,非实时进程将始终显示“当前调度优先级”为0 chrt
,并且在linux下“当前调度策略”为
SCHED_OTHER
.
只有 Ubuntu 和 CentOs 机器具有非数字的友善值。
某些版本top
似乎报告实时进程rt
如下优先原则然后0
在下面你。
答案2
@Goldlilock 的回答引导我以正确的方式进行研究。这是我的研究细节。
可用于进程的调度算法
Linux支持3种调度策略。SCHED_FIFO
,SCHED_RR
, 和SCHED_OTHER
。SCHED_OTHER
是大多数进程使用的默认通用分时调度程序策略;SCHED_FIFO
适用SCHED_RR
于需要精确控制选择执行的可运行进程的方式的特殊时间关键应用程序。
可用优先级
为了选择要运行的进程,Linux 调度程序必须考虑每个进程的优先级。实际上,有两种优先级。
A静态优先级值被分配给每个进程,调度取决于这个静态优先级。调度的进程SCHED_OTHER
具有静态优先级 0;在SCHED_FIFO
或下调度的进程SCHED_RR
可以具有范围1
为 到 的静态优先级99
(99 是最高)。
该sys_sched_get_priority_max( )
例程返回进程的静态优先级,它返回0
非实时进程。
动态优先级用于非实时应用程序。
所有实时进程的优先级都高于普通进程。 Linux按照POSIX实现实时优先级。下图可以概述如何安排进程及其优先级。
HIGH PRIORITY – - – - – > – - – - – > – - – - – > – - – - – > – - – – LEAST PRIORITY
……..real time priority (static priority)…….| …. nice value (dynamic priority) …..
99 ……………………….. 50 ……………………… 1 | -20 …….. -10 …….. 0 …….. 10 ……. 19
现在,我们可以发出以下命令来检查进程的实时优先级。在这里我使用看门狗,因为它有一个很好的值,列为 - 。
ps -e -o class,rtprio,pri,nice,cmd | grep watchdog
这是上述命令的输出。正如我们所看到的,实时优先级是 99,这是可能的最高优先级。
FF 99 139 - [watchdog/0]
FF 99 139 - [watchdog/1]
TS - 21 0 grep watchdog
因此,根据我的理解,实时优先级的最大值可以为 99,因此不可能有任何超过它的值。这就是原因,我们得到了很好的输出 - 对于看门狗和其他系统进程。
参考
http://oreilly.com/catalog/linuxkernel/chapter/ch10.html http://atipaday.wordpress.com/2008/08/19/atad-21-linux-process-priority-range/