Процесс «приятность» против «приоритет»


105

При запуске topя вижу этот (сокращенный) пример вывода:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

Есть два значения, которые меня интересуют: PR(приоритет) и NI(милость).

Если я правильно понял то, что уже выяснил, оба определяют, сколько процессорного времени процесс получит в отличие от других процессов. Но в чем же разница между этими значениями?

Не могли бы вы также описать, как манипулировать этими значениями процесса и при каких обстоятельствах это может быть полезно?

Ответы:


103

Хорошее значение - это пространство пользователя, а приоритет PR - это фактический приоритет процесса, который используется ядром Linux. В системе Linux приоритеты от 0 до 139, в которых от 0 до 99 для реального времени и от 100 до 139 для пользователей. диапазон допустимых значений: от -20 до +19, где -20 самый высокий, 0 по умолчанию и +19 самый низкий. Соотношение между хорошим значением и приоритетом:

PR = 20 + NI

Итак, значение от PR = 20 + (-20 to +19)0 до 39, которое отображает от 100 до 139.

Согласно верхнему руководству:

PR - Приоритет Приоритет планирования задачи. Если вы видите «rt» в этом поле, это означает, что задача выполняется с приоритетом планирования «в реальном времени».

Я - хорошая ценность задачи.

NI - Nice Value Хорошая ценность задачи. Отрицательное приятное значение означает более высокий приоритет, тогда как положительное приятное значение означает более низкий приоритет. Ноль в этом поле просто означает, что приоритет не будет корректироваться при определении способности отправки задачи

Редактировать: по умолчанию, когда программа запускается в Linux, она запускается с приоритетом «0». Однако вы можете изменить приоритет ваших программ одним из следующих способов.

  1. Вы можете запустить программу с нужным вам приоритетом, используя

    nice -n nice_value program_name
    
  2. Вы также можете изменить приоритет уже запущенного процесса, используя

    renice -n nice_value -p process_id
    

1
Вы говорите, что они почти одно и то же в обратном порядке (оба представляют приоритет), НО nicenessможно использовать для предоставления отрицательного приоритета, чтобы задача с nicenessуходом с пути высокоприоритетных задач? (то есть он niceпозволяет другим ресурсам доступа? Или это меня просто смутило?
Марк Кирби

1
Примером того, что я имею в виду, две задачи, каждая из которых имеет pr20, так что они равны, задача 1 имеет значение ni0, а задача 2 имеет значение ni20, поэтому это будет означать, что задача 2 будет выделять ресурсы для задачи 1, потому что этоnicer
Марк Кирби

1
Как я знаю, приоритет рассчитывается как PR = 20 + NI. поэтому приоритет задачи один = 20 +0. максимальное значение
доброй

3
PR = 20 + максимальное значение NI может быть 39. на самом деле в системе Linux существует 139 приоритетов, в которых от 0 до 99 является приоритетом в реальном времени, а для пользователя - от 100 до 139. поэтому значение NI от -20 до +19 соответствует приоритету от 100 до 139. что вы можете настроить. но ядро ​​все еще не уверено, что если вы измените значение NI, оно изменит приоритет, значение NI - это просто предложение для ядра. ядро какое-то время игнорирует это
pl_rock

1
Так что PR и NI на самом деле эквивалентны, так как у них просто другое смещение? Почему тогда у нас есть оба значения? И вы могли бы добавить, что для настройки правильности процесса <0 требуются права root.
Byte Commander

27

Что такое приоритет и почему я должен заботиться?

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

В Linux мы можем установить руководящие указания для процессора, чтобы он следовал, когда он смотрит на все задачи, которые он должен выполнить. Эти рекомендации называются любезностью или приятной ценностью. Шкала добротности Linux варьируется от -20 до 19. Чем меньше число, тем больше приоритет получает задача. Если значение добротности велико, например, 19, задание будет иметь самый низкий приоритет, и ЦПУ будет обрабатывать его всякий раз, когда у него появляется такая возможность. Хорошее значение по умолчанию - ноль.

Используя эту шкалу, мы можем распределить ресурсы нашего ЦП более подходящим образом. Для программ с более низким приоритетом, которые не важны, можно установить более высокое приятное значение, в то время как программы с высоким приоритетом, такие как демоны и сервисы, могут быть настроены так, чтобы они больше фокусировались на процессоре. Вы даже можете дать конкретному пользователю более низкое значение для всех его / ее процессов, чтобы вы могли ограничить их способность замедлять работу основных служб компьютера.

Источник

Установите приоритет для новых процессов с помощью nice, например,

nice -n 10 firefox

для существующих процессов

renice 10 -p $(pgrep firefox)

Чтобы установить приоритет, <0вам нужно sudo, например:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

но не для приоритета >=0


пример

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

Другой пример

Чтобы сдать в аренду все запущенные процессы для конкретного пользователя

renice 20 -u user_name

В вашем примере, renice 10это также будет работать без sudo, верно? И не могли бы вы добавить пример, чтобы сделать все процессы конкретного пользователя более приятными? Это было бы очень полезно, если бы кто-то еще вошел в систему одновременно и запустил несколько ненужных, но ресурсоемких процессов (как приостановленная flash-игра в Firefox, маленькие братья делают такие вещи ...: - /)
Байт Командир

@ByteCommander done =)
AB

Как мне восстановить старые значения этого пользователя через некоторое время? Установить его обратно в 0? Это не будет учитывать, что некоторые процессы раньше могли иметь другое значение. Есть ли простая возможность сделать это?
Byte Commander

@ByteCommander Нет, это не просто. Либо вы используете, 0либо ... есть проблема;)
AB

2
После Renice -19, результат с psявляется: PRI: 38, NI: -19, однако, topэто PR:1, NI -19почему?
пробуждение

14

Краткий ответ

PR является приоритетным уровнем. Чем ниже PR, тем выше будет приоритет процесса.

PR рассчитывается следующим образом:

  • для нормальных процессов: PR = 20 + NI (NI хорошо и колеблется от -20 до 19)
  • для процессов реального времени: PR = - 1 - real_time_priority (real_time_priority варьируется от 1 до 99)

Длинный ответ

Существует два типа процессов: обычные и в реальном времени. Для обычных (и только для них) метод nice применяется следующим образом:

Приятно

Шкала «добротности» варьируется от -20 до 19, тогда как -20 - самый высокий приоритет, а 19 - самый низкий приоритет. Уровень приоритета рассчитывается следующим образом:

PR = 20 + NI

Где NI - хороший уровень, а PR - уровень приоритета. Итак, как мы видим, -20 фактически отображается на 0, а 19 - на 39.

По умолчанию значение nice программы равно 0, но пользователь root может запускать программы с указанным значением nice с помощью следующей команды:

nice -n <nice_value> ./myProgram 

В реальном времени

Мы могли бы пойти еще дальше. Хороший приоритет на самом деле используется для пользовательских программ. Тогда как общий приоритет UNIX / LINUX имеет диапазон 140 значений, значение nice позволяет процессу отображать последнюю часть диапазона (от 100 до 139). Это уравнение оставляет недоступными значения от 0 до 99, которые будут соответствовать отрицательному уровню PR (от -100 до -1). Чтобы иметь возможность доступа к этим значениям, процесс должен быть указан как «в реальном времени».

В среде LINUX существует 5 политик планирования, которые можно отобразить с помощью следующей команды:

chrt -m 

Который покажет следующий список:

1. SCHED_OTHER   the standard round-robin time-sharing policy
2. SCHED_BATCH   for "batch" style execution of processes
3. SCHED_IDLE    for running very low priority background jobs.
4. SCHED_FIFO    a first-in, first-out policy
5. SCHED_RR      a round-robin policy

Процессы планирования могут быть разделены на 2 группы: обычные политики планирования (от 1 до 3) и политики планирования в реальном времени (4 и 5). Процессы реального времени всегда будут иметь приоритет над обычными процессами. Процесс в реальном времени может быть вызван с помощью следующей команды (например, как объявить политику SCHED_RR):

chrt --rr <priority between 1-99> ./myProgram

Для получения значения PR для процесса в реальном времени применяется следующее уравнение:

PR = -1 - rt_prior

Где rt_prior соответствует приоритету между 1 и 99. По этой причине процесс, который будет иметь более высокий приоритет по сравнению с другими процессами, будет вызываться с номером 99.

Важно отметить, что для процессов реального времени значение nice не используется.

Чтобы увидеть текущую «привлекательность» и значение PR процесса, можно выполнить следующую команду:

top

Который показывает следующий вывод:

введите описание изображения здесь

На рисунке показаны значения PR и NI. Хорошо отметить процесс со значением PR -51, которое соответствует значению в реальном времени. Есть также некоторые процессы, чье значение PR указано как «rt». Это значение фактически соответствует значению PR -100.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.