O que fazer quando “nice” não é bom o suficiente (FreeBSD)

7

Eu tenho usado o x265 para codificar alguns vídeos em minha estação de trabalho recentemente, mas tenho um problema: mesmo que eu inicie usando nice -n 20 x265 para deprioritizá-lo, ele ainda atrasa o computador enquanto ele está em execução . Tudo ainda funciona, é só ... lento! Eu até vejo atrasos antes dos personagens aparecerem enquanto digito em um terminal.

Eu tenho que viver com isso, ou há outras coisas que eu possa tentar?

EDIT: Talvez o seguinte seja uma prova de que o valor interessante está sendo aplicado a x265 ? Veja a coluna NI .

% ps -awux -O nice | egrep "x265|PID"
USER      PID  %CPU %MEM     VSZ     RSS TT  STAT STARTED       TIME COMMAND            PID NI TT  STAT       TIME COMMAND
nobody  56654 789.3  3.7  785656  623384 11  SN+J 11:56PM    6:05.80 x265 --input-csp 56654 20 11  SN+J    6:05.80 x265 --input-csp i420 --bframes 5 -
    
por gravitation 22.05.2015 / 06:27

2 respostas

2

Às vezes, uma única operação pesada de E / S pode afetar o desempenho do kernel em relação a todas as tarefas de E / S, incluindo aquelas que não operam diretamente no dispositivo do primeiro.

  • A primeira e indireta maneira de controlar prioridades no agendamento de I / O é o ajuste do nível de processo que você já mencionou. Nos Linuxes modernos, um processo com um bom valor de 19 (ou seja, o máximo) é por padrão na classe de melhor esforço com prioridade igual a (19 + 20) / 5 = 7, que é o prioridade mais baixa disponível dentro da classe. Mais geralmente, varia em [0,7] de acordo com essa função de mapeamento.

  • Uma segunda maneira direta e mais poderosa de controlar o planejamento de E / S é intervir manualmente na classe de programação de E / S atribuída aos processos. Isso nos permite colocar um processo também em duas classes adicionais: classe em tempo real , com maior prioridade do que o melhor nível de esforço 0, e classe ociosa , com menor prioridade que o melhor nível de esforço 7. Esta última garantia, teoricamente, que nenhuma outra operação de E / S poderia esperar por uma operação de processo agendada inativa. Da mesma forma que o comando nice , o ionice permite gerar um processo com uma determinada prioridade ou alterar as prioridades de um processo existente. Mais informações sobre essa ferramenta e agendamento de I / O nos kernels Linux em geral podem ser encontradas na página de manual do ionice .

Dito isso, você tentou iniciar seu processo com ionice -c 3 x265 ... ?

P.S. Desculpe, notei a tag 'FreeBSD' na questão depois de postar minha resposta, que talvez entra em colapso no seguinte.

I don't think FreeBSD has any I/O scheduler. You may consider perform your work on a Linux box, which has it and it is quite is easy to play with it.

    
por 03.06.2015 / 17:19
2

O kernel do FreeBSD implementa algo como um planejador de E / S, ou seja, gsched . Revendo a página de manual, parece ser um agendador de IO específico do dispositivo. Pessoalmente, eu acho que é uma ótima palestra para aplicações em tempo real do FreeBSD, e um ótimo motivo para procurar a documentação existente do FreeBSD, com franqueza.

Embora especulativamente, talvez com o dispositivo de bloco da partição raiz configurado para usar um rr scheduler, usando gsched e os arquivos de mídia armazenados em um dispositivo de bloco separado, talvez sirva para permitir que o sistema operacional funcione mais responsivamente, em E / S, mesmo com o gargalo de E / S?

Talvez, com gsched aplicado junto com uma configuração para as prioridades do processador, aplicando-o como rtprio e / ou idprio - pode servir para melhorar a capacidade de resposta do sistema operacional primário, mesmo sob carga pesada do processamento de arquivos de mídia.

Como alternativa, talvez seja possível ganhar mais largura de banda do processador, com portas compiladas em otimizações específicas da CPU. Para esse efeito, existem os campos MACHINE_CPUARCH e CPUTYPE , que podem ser aplicados em /etc/make.conf , e que seriam aplicados durante o processo de criação de portas [ página de manual ]. O Manual, é claro, fornece muitas dicas sobre a criação de portas com o FreeBSD [ ch.5 ]. Estou usando MACHINE_CPUARCH?=amd64 e CPUTYPE?=core2 em um laptop Toshiba mais antigo. Parece funcionar bem como um gateway de LAN, embora eu não tenha comparativo com carga alta no processador ou bloqueio de recursos de E / S.

    
por 15.06.2015 / 03:58