Como posso otimizar o Linux para codificar muitos vídeos ou um conjunto das mesmas tarefas intensivas de CPU?

Como posso otimizar o Linux para codificar muitos vídeos ou um conjunto das mesmas tarefas intensivas de CPU?

Eu tenho um conjunto de 4 a 5 máquinas que codificam quase exclusivamente vídeo o dia todo e, às vezes, a noite toda também. Pesquisei muitas vezes formas de otimizá-los para esse fim, mas não tive sucesso.

Minha premissa: devo ser capaz de usar quase toda a minha CPU para codificação de vídeo, se, e somente se, estiver executando vários processos de codificação simultaneamente, o que estou fazendo.

O problema: (de 'topo')

Tarefas: 382 no total, 2 em execução, 380 dormindo, 0 parado, 0 zumbi
% CPU(s): 51,6 us, 36,8 sy, 0,0 ni, 9,6 id, 0,0 wa, 2,0 hi, 0,0 si, 0,0 st
KiB Mem: 16425680 no total, 16171664 usados, 254016 livres, 30492 buffers
Troca de KiB: 16769020 no total, 406056 usados, 16362964 grátis. 15198692 memória em cache

  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND                                                                                                                         
31308 raiz 20 0 486568 26000 5560 S 92,2 0,2 ​​188: 10,72 avconv                                                                                                                          
10340 raiz 20 0 475832 19920 5532 S 91,2 0,1 13:40,42 avconv                                                                                                                          
12547 raiz 20 0 473832 23672 5528 S 89,9 0,1 5:40,23 avconv                                                                                                                          
 8179 raiz 20 0 477132 21200 5560 S 89,2 0,1 71:50,15 avconv                                                                                                                          
 9059 raiz 20 0 472776 17960 5540 S 89,2 0,1 48: 12,62 avconv                                                                                                                          
 9798 raiz 20 0 477812 16976 5532 S 88,9 0,1 25:23,15 avconv                                                                                                                          
 8725 raiz 20 0 476068 21696 5560 S 87,2 0,1 62: 12,02 avconv                                                                                                                          
12657 raiz 20 0 472332 22012 5524 S 86,9 0,1 6:21,28 avconv                                                                                                                          
12915 raiz 20 0 473732 41888 5516 S 86,6 0,3 5:22,63 avconv                                                                                                                          
 8578 raiz 20 0 476840 24100 5536 S 85,6 0,1 63: 17,07 avconv                                                                                                                          
 7822 raiz 20 0 472740 18940 5536 S 85,2 0,1 75:22,04 avconv                                                                                                                          
 9948 raiz 20 0 485420 18116 5560 S 84,9 0,1 22:18,23 avconv                                                                                                                          
 7356 raiz 20 0 476744 20084 5560 S 84,6 0,1 92: 31,91 avconv                                                                                                                          
 9425 raiz 20 0 471096 19684 5552 S 82,9 0,1 37: 48,28 avconv                                                                                                                          
12464 raiz 20 0 475004 24304 5532 R 81,6 0,1 6:30,16 avconv

Apesar de codificar 14 arquivos de vídeo diferentes de uma só vez, o uso da CPU gira em torno de apenas 50-55%. Se eu estiver executando menos fluxos de uma vez, os fluxos individuais funcionarão até cerca de 400% da CPU, enquanto, conforme mostrado acima, eles usam apenas cerca de 80-90% da CPU.

Essa é a única coisa que quero que esta caixa faça, é possível aproveitar mais a potência da CPU ou minha premissa é falha?

Até agora experimentei renice, sem nenhum efeito. Eu configurei NI para -20 e 19 e não houve maior ou menor uso da CPU em geral ou em codificações individuais.

Eu li algumas coisas sobre vm.swappiness, mas não entendi claramente meu caso de uso se mais ou menos swappiness seria melhor. Isso poderia aumentar o desempenho?

Mais detalhes: A máquina que estou incluindo é um Dell R900 rodando Ubuntu 14.04. cat /proc/cpuinfolista 16 processadores Intel(R) Xeon(R) CPU E7330 a 2,40 GHz e cat /proc/meminfo16 Gb de Ram. As demais máquinas do grupo são semelhantes e apresentam o mesmo comportamento. Toda essa codificação é de vídeo DV para vídeo Mpeg2, às vezes codificamos outros tipos de vídeo também. A fonte dessas codificações está em um ataque em rede que não está gravando nada na postagem acima e obtém velocidades de leitura de mais de 300 Mb/s. O destino também são ataques em rede, não tão rápidos, mas os dados MPEG resultantes são muito menores que os dados de entrada.

Responder1

Primeiro, uma GPU de ponta aumentará a codificação em ordens de magnitude. Normalmente, uma placa de vídeo de última geração reduzirá a renderização de horas para minutos. Você pode precisar de uma GPU NVIDIA.

‘-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)’

    Select a device to use for hardware acceleration.

    This option only makes sense when the ‘-hwaccel’ option is also specified. Its exact meaning depends on the specific hardware acceleration method chosen.
    ‘vdpau’

        For VDPAU, this option specifies the X11 display/screen to use. If this option is not specified, the value of the DISPLAY environment variable is used
    ‘dxva2’

        For DXVA2, this option should contain the number of the display adapter to use. If this option is not specified, the default adapter is used. 

Além disso, você precisa disso para a CPU

‘-threads[:stream_specifier] integer (input/output,video)’

    Possible values:

    ‘auto’

        autodetect a suitable number of threads to use 

informação relacionada