Вам необходимо исключить один процессор из общего планирования, после чего вы можете назначить ему процесс через
taskset
как вы уже выяснили. Чтобы исключить ЦП, добавьте параметр загрузки
isolcpus=N
Число (N )основано на 0 -.
В системах с systemd вы также можете настроить это в конфигурации systemd. Предполагая, что ваша система имеет 4 ядра, вы можете добавить
[Manager]
CPUAffinity=0-2
- /etc/systemd/system.conf
, чтобы гарантировать, что systemd (PID 1 )будет работать на первых трех процессорах.По умолчанию процессы, запущенные прямо или косвенно с помощью systemd (, что верно для всех процессов ), наследуют этот параметр, поэтому 4-й ЦП (номер 3 )не будет использоваться. Просто добавьте
[Service]
CPUAffinity=3
в юнит-файл службы, которую вы хотите запустить на 4-м ядре. Преимущество этого подхода заключается в том, что вы можете настроить другие параметры, связанные с реальным -временем, такие как LimitMEMLOCK
или LimitRTPRIO
, в одном и том же месте -без необходимости возиться с кучей различных инструментов.
Примечание. :Вам необходимо перезагрузить систему, чтобы systemd приняла первое изменение. Если вы только изменили конфигурацию службы, достаточно перезапустить затронутую службу :
.systemctl daemon-reload
systemctl restart my-service.service