Что означает ценность (-)?

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 имеют нецифровые значения добротности.

spuder
источник
К вашему сведению: все те процессы, в именах которых [brackets]есть, на самом деле kthreads (потоки ядра).
Джонатон Рейнхарт

Ответы:

18

На что указывает милость (-)?

Обратите внимание, что у них также есть оценка PRI -100; это указывает, что процесс запланирован как процесс в реальном времени . Процессы реального времени не используют хорошие оценки и всегда имеют более высокий приоритет, чем обычные, но все же отличаются друг от друга.

Вы можете просмотреть детали каждого процесса с помощью chrtкоманды (например chrt -p 3). Один из ваших -100, скорее всего, сообщит о «текущем приоритете планирования», равном 99 - в отличие от этого nice, здесь высокие значения имеют более высокий приоритет, который, вероятно, является тем, откуда верхнее число создало -100число. Процессы не в реальном времени всегда будут показывать «текущий приоритет планирования», равный 0, chrtнезависимо от значения nice, а в linux - «текущую политику планирования» SCHED_OTHER.

Только машины с Ubuntu и CentOs имеют нецифровые значения добротности.

Некоторые версии , topкажется, сообщают процессы в реальном времени с rtпод ПОИ , а затем 0под NI .

лютик золотистый
источник
Прекрасный ответ. Я знал, что это как-то связано, -100но не мог понять это :)
Рамеш
6

Ответ @ Goldlilock направил меня на исследование в правильном направлении. Это мои подробности исследования.

Алгоритмы планирования доступны для процессов

Linux поддерживает 3 политики планирования. SCHED_FIFO, SCHED_RRи SCHED_OTHER. SCHED_OTHERуниверсальная политика планировщика с разделением времени по умолчанию, используемая большинством процессов; SCHED_FIFOи SCHED_RRпредназначены для специальных критичных ко времени приложений, которые нуждаются в точном контроле выбора выполняемых процессов для выполнения.

Доступные приоритеты

Чтобы выбрать процесс для запуска, планировщик Linux должен учитывать приоритет каждого процесса. На самом деле, есть два вида приоритетов.

Значение статического приоритета присваивается каждому процессу, и планирование зависит от этого статического приоритета. Запланированные процессы 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/

Рамеш
источник