"Вежливость" процесса против "приоритета"

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

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

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

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

PR = 20 + NI

итак , ценность PR = 20 + (-20 to +19) от 0 до 39, что соответствует 100 до 139.

В соответствии с руководством top:

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

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

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

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

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

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

    renice -n nice_value -p process_id

Что является приоритетом и Почему меня Это должно Волновать?

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

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

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

Источник

Установите приоритет для новых процессов с помощью 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 here2769 (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)

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

Существует 2 типа процессов, следующие обычный одни и те же в реальном времени.

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

Ницца

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

PR = 20 + NI

Где NI - уровень nice, а 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 policy2. SCHED_BATCH   for "batch" style execution of processes3. SCHED_IDLE    for running very low priority background jobs.4. SCHED_FIFO    a first-in, first-out policy5. 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

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

top screenshot

На рисунке показаны значения PR и NI. Следует отметить процесс со значением PR -51, что соответствует значению в реальном времени. Существуют также некоторые процессы, значение PR которых указано как "rt". Это значение фактически соответствует значению PR, равному -100.