Qual é o melhor que um comando Unix pode ser?

8

Para um teste rápido de benchmarking, como o nice e o ionice podem ser combinados para o efeito máximo, ou seja, para um comando usar o mínimo de recursos possível (sem ficar ocioso)?

(acho que é algo como 'nice -n 19 ionice -c 2 [comando], mas não tenho certeza sobre o "-n" da ionice (classdata param), a página man é enigmática sobre sua relevância.)

    
por mahemoff 12.10.2017 / 20:06

1 resposta

9

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).

    
por 12.10.2017 / 20:51