Процесс "приятность" против "приоритет"
При беге 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". Однако вы можете изменить приоритет ваших программ одним из следующих способов.
Вы можете запустить программу с нужным вам приоритетом, используя
nice -n nice_value program_name
Вы также можете изменить приоритет уже запущенного процесса, используя
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.