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

При беге 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 (Любезность).

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

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

3 ответа

Решение

Хорошее значение - это пространство пользователя, а приоритет 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
    

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

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

В 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

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

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.

Другие вопросы по тегам