Eu estou escrevendo um servidor que eu não quero preempted por qualquer outro processo de usuário ou processo de kernel de "baixa prioridade". Estou usando código assim:
struct sched_param sched_param;
memset(&sched_param, 0, sizeof(sched_param));
sched_param.sched_priority = SOME_PRIORITY;
if(-1 == sched_setscheduler(0, SCHED_FIFO, &sched_param)) {
// ...
Meu problema é que quando eu defino SOME_PRIORITY como 99 (o valor max), parece que eu deixo o processo do planejador morrer de fome e meu sistema rapidamente se torna inutilizável (o processo do servidor tem um loop de busywait no seu core-- Eu não tenho controle sobre esse aspecto, é uma biblioteca de terceiros).
Então, minha pergunta é: que valor para SOME_PRIORITY eu posso usar para permitir preempção apenas pelo agendador (e possivelmente algum pequeno subconjunto de serviços do kernel)?