Estou aprendendo sobre o agendador de processos do Linux e tenho lido a função pthread_setsched: https://man7.org/linux/man-pages/man3/pthread_setschedparam.3.html
Uma coisa que me surpreendeu é que os threads podem modificar sua própria prioridade/classe. Eu posso ver como isso faz sentido para configurar certos aplicativos multi-thread (por exemplo, produtores e consumidores), no entanto, parece um risco de estabilidade do sistema que qualquer processo possa apenas solicitar para definir sua própria prioridade. O que está impedindo meu helloworld.out de solicitar SCHED_FIFO na prioridade mais alta? Isso pode bloquear completamente o sistema.
Então, quais mecanismos estão em vigor para impedir que um processo tenha total domínio do agendador? Parece que um erro do sistema EPERM pode ser definido, no entanto, onde isso está configurado?
O kernel impõe isso. As regras estão detalhadas na seção “Privilégios e limites de recursos” do
man 7 sched
; Em suma:SCHED_DEADLINE
políticas só podem ser modificadas por threads privilegiados (comCAP_SYS_NICE
);RLIMIT_RTPRIO
0 podem apenas diminuir suas prioridades ou mudar para uma política de tempo não real;RLIMIT_RTPRIO
estão vinculados a esse limite, a menos que sua prioridade tenha sido definida mais alta (por um thread privilegiado).Threads com
CAP_SYS_NICE
podem fazer o que quiserem, mas qualquer outra coisa é estritamente controlada.