O comando completo que você deseja é:
chrt -b 0 nice -n 19 ionice -c 2 -n 7 [command]
O chrt
comando no início mudará as coisas para a classe de agendamento em lote, o que equivale a adicionar 0,5 ao valor agradável. A opção -n para ionice é uma prioridade simples para as opções em tempo real ( -c 1
) e de melhor esforço ( -c 2
), com valores mais baixos sendo prioridade mais alta, assim como valores agradáveis (mas no intervalo de 0 a 7). No entanto, o comando ionice não é estritamente necessário, pois a classe e a prioridade de agendamento de E / S são derivadas por padrão dos parâmetros de agendamento da CPU e nice -n 19
implica ionice -c 2 -n 7
.
No entanto, você pode obter o uso mínimo absoluto de recursos configurando as classes de agendamento da CPU e de E / S como inativas. Nos dois casos, os agendadores "inativos" não são realmente agendadores inativos, e você ainda poderá usar recursos, mas tudo terá prioridade mais alta.
Para a classe de agendamento da CPU, isso também usa o chrt
comando, embora sem necessidade nice
(a prioridade deve ser definida como 0
na classe de agendamento ocioso) e tem a seguinte aparência:
chrt -i 0 {command or PID}
O nice
comando no Linux reflete a versão do SVR4, o que significa que ele não pode alterar a classe de agendamento, apenas um valor agradável (que também se comporta de maneira diferente no Linux do que o UNIX clássico, mas isso é um pouco complicado). Como as classes de agendamento alternativas originais eram o POSIX.1E em tempo real SCHED_RR
e SCHED_FIFO
, o comando para definir as classes de agendamento acabou sendo chamado chrt
. A -i
opção especifica o uso da SCHED_IDLE
classe de agendamento
Para a classe de planejamento de E / S, você usa ionice
. O comando exato é assim:
ionice -c 3 {command or PID}
A -c
opção especifica qual classe de agendamento usar e 3 é o número da classe inativa. Observe que, dependendo de qual planejador de E / S de bloco está sendo usado, isso pode não afetar nada. Em particular, o noop
agendador de E / S não suporta prioridades ou classes de agendamento, e tenho certeza de que os deadline
agendadores (tanto o legado quanto o blk-mq) também não.
Se você quiser fazer isso programaticamente, seja para o seu próprio programa ou para ajustar coisas para outros processos, consulte as páginas de manual das chamadas sched_setscheduler
e do ioprio_set
sistema (embora ambas valham a pena ler, se você quiser apenas mais informações também).