¿Cómo puedo optimizar Linux para codificar una gran cantidad de videos o un conjunto de las mismas tareas que requieren un uso intensivo de la CPU?

¿Cómo puedo optimizar Linux para codificar una gran cantidad de videos o un conjunto de las mismas tareas que requieren un uso intensivo de la CPU?

Tengo un conjunto de 4 o 5 máquinas que codifican casi exclusivamente vídeo durante todo el día y, a veces, también durante toda la noche. He buscado muchas veces formas de optimizarlos para este propósito, pero no tuve éxito.

Mi premisa: debería poder usar casi toda mi CPU para la codificación de video, si y solo si estoy ejecutando múltiples procesos de codificación simultáneamente, lo cual es así.

El problema: (desde 'arriba')

Tareas: 382 en total, 2 en ejecución, 380 durmiendo, 0 detenidas, 0 zombis
%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 en total, 16171664 usados, 254016 libres, 30492 buffers
KiB Swap: 16769020 en total, 406056 usados, 16362964 gratis. 15198692 memoria en caché

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

A pesar de codificar 14 archivos de vídeo diferentes a la vez, el uso de la CPU ronda sólo el 50-55%. Si estoy ejecutando menos transmisiones a la vez, las transmisiones individuales se ejecutarán hasta aproximadamente un 400 % de CPU, mientras que, como se muestra arriba, solo usan alrededor de un 80-90 % de CPU.

Esto es lo único que quiero que haga esta caja, ¿es posible hacer un mayor uso de la potencia de la CPU o mi premisa es defectuosa?

Hasta ahora he experimentado con Renice, sin ningún resultado. Configuré NI en -20 y 19, no hizo mayor o menor uso de la CPU en general o en codificaciones individuales.

Leí un poco sobre vm.swappiness, pero no entendí claramente mi caso de uso si sería mejor más o menos intercambio. ¿Podría esto aumentar el rendimiento?

Más detalles: La máquina desde la que incluyo la parte superior es una Dell R900 con Ubuntu 14.04. cat /proc/cpuinfoenumera 16 procesadores Intel(R) Xeon(R) CPU E7330 a 2,40 GHz y cat /proc/meminfo16 Gb de RAM. Las otras máquinas del grupo son similares y muestran el mismo comportamiento. Toda esta codificación es de video DV a video Mpeg2, a veces también codificamos otros tipos de video. La fuente de estas codificaciones se encuentra en una redada en red que no escribe nada en la publicación anterior y obtiene velocidades de lectura de más de 300 Mb/s. El destino también son los raids en red, no tan rápidos, pero los datos mpeg resultantes son mucho más pequeños que los datos de entrada.

Respuesta1

En primer lugar, una GPU de gama alta aumentará la codificación en órdenes de magnitud. Por lo general, una tarjeta de video de alta gama reducirá la renderización de horas a minutos. Es posible que necesites una 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. 

Además necesitas esto para la CPU.

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

    Possible values:

    ‘auto’

        autodetect a suitable number of threads to use 

información relacionada