Para um teste rápido de benchmarking, como nice e ionice podem ser combinados para obter o máximo efeito, ou seja, para um comando usar o mínimo de recursos possível (sem inatividade)?
(Eu acho que é algo como `nice -n 19 ionice -c 2 [comando], mas não tenho certeza sobre o" -n "do ionice (classdata param), a página de manual é enigmática quanto à sua relevância.)
performance
nice
ionice
mahemoff
fonte
fonte
Respostas:
O comando completo que você deseja é:
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 enice -n 19
implicaionice -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 necessidadenice
(a prioridade deve ser definida como0
na classe de agendamento ocioso) e tem a seguinte aparência: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 realSCHED_RR
eSCHED_FIFO
, o comando para definir as classes de agendamento acabou sendo chamadochrt
. A-i
opção especifica o uso daSCHED_IDLE
classe de agendamentoPara a classe de planejamento de E / S, você usa
ionice
. O comando exato é assim: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, onoop
agendador de E / S não suporta prioridades ou classes de agendamento, e tenho certeza de que osdeadline
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 doioprio_set
sistema (embora ambas valham a pena ler, se você quiser apenas mais informações também).fonte
Supondo que você não queira que esse comando aguarde completamente a conclusão de outras pessoas, para não sofrer potencialmente a falta de recursos , a linha seria:
Como ionice será definido proporcionalmente nos kernels modernos do Linux.
A propósito
chrt -b0
, nada tem a ver com gentileza, mas com que freqüência a CPU salta de um processo para outro. Essa linha leva mais tempo para que os programas em lote utilizem melhor os caches, mas para outros comandos é inútil. Como visto aqui .fonte