Как установить приоритет запущенного процесса в Linux

В этой статье мы кратко расскажем о планировщике ядра (также известном как планировщик процессов) и приоритете процессов, которые выходят за рамки данного руководства.

Затем мы немного погрузимся в управление процессами Linux: посмотрим, как запустить программу или команду с измененным приоритетом, а также изменить приоритет запущенных процессов Linux.

Понимание планировщика ядра Linux

Планировщик ядра – это компонент ядра, отвечающий за выбор наиболее подходящего процесса для запуска из всех процессов, готовых к выполнению.

Он управляет распределением процессорного времени между этими процессами в системе. Процесс считается запущенным, если он ожидает только процессорного времени и готов к выполнению.

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

Понимание приоритета процесса и значения Nice

Ядро хранит много информации о процессах, включая приоритет процесса, который является просто приоритетом планирования, прикрепленным к процессу. Процессы с более высоким приоритетом будут выполняться раньше процессов с более низким приоритетом, в то время как процессы с одинаковым приоритетом планируются один за другим, многократно.

Всего в Linux существует 140 приоритетов и два различных диапазона приоритетов. Первый – это значение nice (niceness), которое варьируется от -20 (наивысший приоритет) до 19 (наименьший приоритет), а значение по умолчанию – 0, именно его мы и рассмотрим в этом руководстве.

Другой приоритет – это приоритет реального времени, который по умолчанию варьируется от 1 до 99, а от 100 до 139 предназначены для пользовательского пространства.

Одной из важных характеристик Linux является динамическое планирование на основе приоритетов, которое позволяет изменять (увеличивать или уменьшать) значение приоритета процессов в зависимости от ваших потребностей, как мы увидим позже.

Как проверить значение Nice для процессов Linux

Чтобы посмотреть значения nice процессов, мы можем использовать такие утилиты, как ps, top или htop.

Для просмотра значений процессов используется команда ps в пользовательском формате (здесь NI столбец показывает приоритет процессов).

ps -eo pid,ppid,ni,comm

В качестве альтернативы вы можете использовать утилиты top или htop для просмотра значений приоритета процессов Linux, как показано на рисунке.

top
htop

Разница между PR или PRI и NI

Из приведенных выше выводов top и htop вы заметите, что есть столбец PR и PRI, который показывает приоритет процесса.

Это, следовательно, означает, что:

  • NI – это значение, которое является понятием пользовательского пространства, в то время как
  • PR или PRI – реальный приоритет процесса, как его видит ядро Linux.

Как рассчитать значения PR или PRI

Total number of priorities = 140
Real time priority range(PR or PRI):  0 to 99 
User space priority range: 100 to 139

Диапазон значений (NI): от -20 до 19

PR = 20 + NI
PR = 20 + (-20 to + 19)
PR = 20 + -20  to 20 + 19
PR = 0 to 39 which is same as 100 to 139.

Но если вы видите rt, а не число, как показано на скриншоте ниже, это означает, что процесс запущен под приоритетом планирования в реальном времени.

Как выполнить команду с заданным значением в Linux

Здесь мы рассмотрим, как определить приоритет использования процессора программой или командой. Если у вас есть очень требовательная к процессору программа или задача, но вы также понимаете, что ее выполнение может занять много времени, вы можете установить для нее высокий или благоприятный приоритет с помощью команды nice.

Синтаксис команды следующий:

nice -n niceness-value [command args] 
OR
nice -niceness-value [command args] 	
OR
nice --adjustment=niceness-value [command args]

Важно:

  • Если значение не указано, nice по умолчанию устанавливает приоритет 10.
  • Команда или программа, запущенная без nice, по умолчанию имеет нулевой приоритет.
  • Только root может запустить команду или программу с повышенным или высоким приоритетом.
  • Обычные пользователи могут запускать только команды или программы с низким приоритетом.

Например, вместо того чтобы запускать программу или команду с приоритетом по умолчанию, можно запустить ее с определенным приоритетом с помощью следующей команды nice.

sudo nice -n 5 tar -czf backup.tar.gz ./Documents/*
OR
sudo nice --adjustment=5 tar -czf backup.tar.gz ./Documents/*

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

sudo nice -5 tar -czf backup.tar.gz  ./Documents/*

Изменение приоритета планирования процесса в Linux

Как мы уже упоминали, Linux позволяет динамически изменять приоритет расписания. Поэтому, если программа уже запущена, вы можете изменить ее приоритет с помощью команды renice в таком виде:

renice -n  -12  -p 1055
renice -n -2  -u apache

Из приведенного ниже примера top видно, что приоритет teamspe с PID 1055 теперь -12, а для всех процессов, принадлежащих пользователю apache, – -2 .

По-прежнему используя этот вывод, можно увидеть, что формула PR = 20 NIсправедлива,

PR for ts3server = 20 + -12 = 8
PR for apache processes = 20 + -2 = 18

Любые изменения, внесенные с помощью команды renice в значения параметров пользовательских процессов по умолчанию, действуют только до следующей перезагрузки. Чтобы установить постоянные значения по умолчанию, прочтите следующий раздел.

Как установить значение по умолчанию для процессов определенного пользователя

Вы можете установить значение nice по умолчанию для определенного пользователя или группы в файле /etc/security/limits.conf. Его основная функция заключается в определении лимитов ресурсов для пользователей, вошедших в систему через PAM.

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

#<domain>   <type>  <item>  <value>

Теперь используйте приведенный ниже синтаксис, где hard – означает применение жестких ссылок, а soft – применение мягких ограничений.

<username>  <hard|soft>  priority  <nice value>

В качестве альтернативы создайте файл в /etc/security/limits.d/, который переопределяет настройки в главном файле выше, и эти файлы будут читаться в алфавитном порядке.

Начните с создания файла /etc/security/limits.d/tecmint-priority.conf для пользователя tecmint:

vi /etc/security/limits.d/tecmint-priority.conf

Затем добавьте в него эту конфигурацию:

tecmint  hard  priority  10

Сохраните и закройте файл. С этого момента любой процесс, принадлежащий tecmint, будет иметь приятное значение 10 и PR 30 .

Для получения дополнительной информации читайте man-страницы nice и renice:

man nice
man renice

В этой статье мы вкратце рассказали о планировщике ядра и приоритете процессов, рассмотрели, как запустить программу или команду с измененным приоритетом, а также изменили приоритет активных процессов Linux.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен www.tecmint.com

Похожие статьи

Комментарии (0)