Есть еще одна защита, о которой я не знал.
Если у вас есть только один процессор и вы хотите, чтобы процесс SCHED_FIFO
, подобный этому (тот, который никогда не блокирует и не отдаёт процессор добровольно) монополизировал его, кроме того, что он имеет высокий приоритет (в большинстве случаев это не обязательно, но больно) надо:
- Установите
sched_rt_runtime_us
на -1
или на значение в sched_rt_period_us
- Если вы настроили групповое планирование, установите
/cgroup/cpu.rt_runtime_us
на -1
(в случае
вы монтируете файловую систему cgroup на /cgroup
)
Очевидно, у меня настроено групповое планирование, и я не обошел эту последнюю защиту.
Если у вас есть N
процессоры и вы хотите, чтобы ваши процессы N
монополизировали процессор, вы просто делаете то же самое, но запускаете все из своей оболочки (оболочка не должна зависать, пока вы не запустите последний из них). , поскольку он будет иметь процессоры для запуска). Если вы хотите быть уверены, что каждый процесс перейдет на другой процессор, установите его привязку к процессору соответственно.
Спасибо всем за ответы.