(-)的niceness值是什么意思?


19

根据手册页和维基百科;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机器具有非数字精度值。


仅供参考:名称所在的所有进程[brackets]实际上都是kthreads(内核线程)。
乔纳森·莱因哈特

Answers:


18

(-)的优美表示什么?

请注意,它们的PRI分数也为-100;这表明该进程被安排为实时进程。实时过程使用的得分并不高,并且总是比正常过程具有更高的优先级,但是彼此之间仍然存在差异。

您可以使用chrt命令(例如chrt -p 3)查看每个进程的详细信息。您的-100个中的一个可能会报告“当前调度优先级”为99-与不同nice,这里较高的值是较高的优先级,这可能是top -100从中创建数字的地方。chrt无论实时值如何,非实时进程始终将“当前调度优先级”显示为0 ,而在linux下,“当前调度优先级”显示为 SCHED_OTHER

只有Ubuntu和CentOs机器具有非数字精度值。

某些版本的top似乎rtPRI0下然后在NI下报告实时过程。


很棒的答案。我知道这与它有关,-100
无法解决

6

@Goldlilock的回答指导我以正确的方式进行研究。这是我的研究细节。

可用于流程的调度算法

Linux支持3种调度策略。SCHED_FIFOSCHED_RRSCHED_OTHERSCHED_OTHER是大多数进程使用的默认通用分时调度程序策略;SCHED_FIFO并且SCHED_RR适用于对时间要求严格的特殊应用程序,这些应用程序需要对选择可运行进程的执行方式进行精确控制。

优先事项

为了选择要运行的进程,Linux调度程序必须考虑每个进程的优先级。实际上,有两种优先级。

静态优先级值被分配给每个过程和调度取决于此静态优先级。调度的进程的SCHED_OTHER静态优先级为0;在SCHED_FIFO或之下安排的进程SCHED_RR的静态优先级可以在到的范围内(最高19999)。

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/

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.