Установите наивысший приоритет CPU и IO для службы systemd

Вопрос или проблема

Как установить приоритет ЦПУ и ввода-вывода для сервиса systemd? В частности, как установить самые высокие значения?

(Предположим, что сервис в основном простаивает и абсолютно НЕ будет забивать остальную часть системы. Предположим, что запрос является намеренным и желаемым.)

Вам нужно установить 3 вещи: политику планирования ЦПУ и его приоритет, планировщик ввода-вывода и “niceness”.

Чтобы ваш сервис использовал самые высокие значения для всех этих параметров:

[Unit]
...

[Service]
CPUSchedulingPolicy=rr
CPUSchedulingPriority=99
IOSchedulingClass=realtime
Nice=-20
...

Это примерно то же самое, как если бы вы запустили исполняемый файл с:

sudo chrt -r 99 -- nice -n -20 -- ionice -c realtime -- my_process my_arguments

В htop вы увидите процесс как:

PRI    IO     NI
----------------
 RT    R4    -20

.

Ответ или решение

Чтобы установить наивысший приоритет ЦП и ввода-вывода для службы systemd, необходимо внести изменения в конфигурационный файл службы. В данной статье мы подробно рассмотрим, как настроить параметры планирования и приоритета для системной службы.

1. Изменение конфигурации службы

Для начала, вам потребуется открыть или создать файл единицы (unit file) для вашей службы. Обычно эти файлы расположены в каталоге /etc/systemd/system/, и их имена заканчиваются на .service. Например, если ваша служба называется my_service.service, откройте этот файл командой:

sudo nano /etc/systemd/system/my_service.service

2. Установка наивысшего приоритета ЦП

В секции [Service] файла добавьте следующие параметры для установки высшего приоритета для вашего процесса:

[Service]
CPUSchedulingPolicy=rr
CPUSchedulingPriority=99
  • CPUSchedulingPolicy: устанавливает политику планирования. В этом случае мы используем rr (round-robin), что подходит для наивысшего приоритета.
  • CPUSchedulingPriority: задает уровень приоритета, который принимает значения от 1 (низкий приоритет) до 99 (высокий приоритет). Установка равной 99 даст вам наивысший приоритет.

3. Установка наивысшего приоритета ввода-вывода

Следующий шаг – установить параметры для ввода-вывода. Добавьте следующие строки в ту же секцию [Service]:

IOSchedulingClass=realtime
  • IOSchedulingClass: устанавливает класс планирования ввода-вывода. Выбор realtime позволит вашей службе иметь наивысший приоритет для операций ввода-вывода.

4. Установка значения nice

Для управления приоритетом процессов на уровне ОС добавьте следующий параметр:

Nice=-20
  • Nice: позволяет установить "вкус" процесса. Значение -20 указывает на наивысший приоритет для вычислений, что также поможет вашей службе эффективно использовать системные ресурсы.

5. Итоговая конфигурация

Ваш окончательный конфигурационный файл службы my_service.service будет выглядеть примерно так:

[Unit]
Description=My Service

[Service]
CPUSchedulingPolicy=rr
CPUSchedulingPriority=99
IOSchedulingClass=realtime
Nice=-20

[Install]
WantedBy=multi-user.target

6. Перезагрузка и активацию службы

После внесения изменений вам нужно перезагрузить конфигурацию systemd и перезапустить вашу службу:

sudo systemctl daemon-reload
sudo systemctl restart my_service.service

7. Проверка приоритета процесса

После перезапуска службы вы можете проверить её параметры с помощью команды htop. Если вы видите процесс с нужными значениями приоритета, это значит, что все настройки применены корректно:

 PRI    IO     NI
----------------
 RT    R4    -20

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...