Вопрос или проблема
Как установить приоритет ЦПУ и ввода-вывода для сервиса 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 и ввода-вывода, вы обеспечите вашей службе необходимые ресурсы для выполнения задач с максимальной эффективностью. Эти настройки особенно полезны для процессов, которые требуют высокой производительности в нештатных ситуациях. Помните, что использование таких высоких приоритетов может повлиять на другие процессы в системе, поэтому применяйте эти настройки с осторожностью.