O comando completo que você quer é:
chrt -b nice -n 19 ionice -c 2 -n 7 [command]
O comando chrt
no início mudará as coisas para a classe de agendamento em lote, o que equivale a adicionar 0,5 ao valor adequado. A opção -n para ionice é uma prioridade simples para as opções realtime ( -c 1
) e best-effort ( -c 2
), com valores mais baixos sendo prioridade mais alta, assim como valores bons (mas no intervalo 0-7). No entanto, o comando ionice não é estritamente necessário, já que a classe e a prioridade de planejamento de E / S são, por padrão, derivadas dos parâmetros de planejamento da CPU, e nice -n 19
implica ionice -c 2 -n 7
.
No entanto, você pode obter o uso mínimo absoluto de recursos definindo as classes de agendamento de CPU e E / S como ociosas. Em ambos os casos, os agendadores 'ociosos' não são realmente agendadores ociosos, e você ainda poderá usar recursos, é que tudo terá prioridade mais alta.
Para a classe de agendamento de CPU, isso também usa o comando chrt
, embora sem precisar de nice
(há apenas uma prioridade na classe de agendamento inativo) e se parece com isso:
chrt -i {command or PID}
O comando nice
no Linux espelha a versão do SVR4, o que significa que ele não pode mudar a classe de agendamento, apenas um bom valor (que também se comporta diferentemente no Linux do que no UNIX clássico, mas é um pouco OT). Como as classes de agendamento alternativas originais eram o POSIX.1E realtime SCHED_RR
e SCHED_FIFO
, o comando para definir classes de agendamento acabou sendo chamado de chrt
. A opção -i
especifica usar a classe de agendamento SCHED_IDLE
Para a classe de agendamento de E / S, você usa ionice
. O comando exato é assim:
ionice -c 3 {command or PID}
A opção -c
especifica qual classe de agendamento usar e 3 é o número da classe ociosa. Observe que, dependendo de qual planejador de E / S de bloco está sendo usado, isso pode não impactar realmente em nada. Em particular, o agendador noop
I / O não suporta prioridades nem agendamentos de classes, e eu tenho certeza que os deadline
schedulers (tanto o legado como o blk-mq) não .
Se você quiser fazer isso programaticamente, seja para o seu próprio programa ou para ajustar as coisas para outros processos, confira as man pages para as chamadas de sistema sched_setscheduler
e ioprio_set
(embora ambas valham a pena ser lidas se você apenas quer mais fundo também).