Как я могу оптимизировать Linux для кодирования большого количества видео или набора тех же интенсивных задач процессора?
У меня есть набор из 4-5 машин, которые почти исключительно кодируют видео весь день, а иногда и всю ночь. Я искал много раз, чтобы найти способы оптимизировать их для этой цели, но безуспешно.
Моя предпосылка: я должен быть в состоянии использовать почти весь свой процессор для кодирования видео, если и только если я одновременно выполняю несколько процессов кодирования, что я и делаю.
Проблема: (сверху)
Задачи: 382 всего, 2 бега, 380 спящих, 0 остановок, 0 зомби %CPU (s): 51,6 мкс, 36,8 sy, 0,0 нд, 9,6 id, 0,0 ва, 2,0 hi, 0,0 si, 0,0 st KiB Mem: 16425680 всего, 16171664 использовано, 254016 свободно, 30492 буфера Своп KiB: всего 16769020, использовано 406056, бесплатно 16362964. 15198692 кэшированный Mem PID USER PR NI VIRT RES SHR S%CPU% MEM TIME + КОМАНДА 31308 root 20 0 486568 26000 5560 S 92,2 0,2 188:10,72 avconv 10340 root 20 0 475832 19920 5532 S 91,2 0,1 13:40,42 avconv 12547 root 20 0 473832 23672 5528 S 89,9 0,1 5:40,23 avconv 8179 root 20 0 477132 21200 5560 S 89,2 0,1 71:50,15 avconv 9059 корень 20 0 472776 17960 5540 S 89,2 0,1 48:12,62 avconv 9798 root 20 0 477812 16976 5532 S 88,9 0,1 25:23,15 avconv 8725 root 20 0 476068 21696 5560 S 87,2 0,1 62:12,02 avconv 12657 root 20 0 472332 22012 5524 S 86,9 0,1 6:21,28 avconv 12915 корень 20 0 473732 41888 5516 S 86,6 0,3 5:22,63 avconv 8578 root 20 0 476840 24100 5536 S 85,6 0,1 63:17,07 avconv 7822 корень 20 0 472740 18940 5536 S 85,2 0,1 75:22,04 avconv 9948 root 20 0 485420 18116 5560 S 84,9 0,1 22:18,23 avconv 7356 root 20 0 476744 20084 5560 S 84,6 0,1 92:31,91 avconv 9425 корень 20 0 471096 19684 5552 S 82,9 0,1 37:48,28 avconv 12464 root 20 0 475004 24304 5532 R 81,6 0,1 6:30,16 avconv
Несмотря на одновременное кодирование 14 различных видеофайлов, загрузка процессора колеблется в пределах 50-55%. Если я использую меньше потоков одновременно, отдельные потоки будут загружать до 400 % ЦП, где, как показано выше, они используют только около 80-90 % ЦП.
Это единственное, что я хочу, чтобы этот блок делал, можно ли более интенсивно использовать мощность процессора или моя предпосылка ошибочна?
До сих пор я экспериментировал с ренисом, чтобы совершенно не иметь эффекта. Я установил NI -20 и 19, он не использовал больше или меньше процессоров в целом или для отдельных кодов.
Я немного прочел о vm.swappiness, но не смог понять, в каком случае я использую, лучше ли будет использовать замену. Может ли это увеличить производительность?
Более подробная информация: Компьютер, с которого я работаю, - Dell R900 с Ubuntu 14.04. cat /proc/cpuinfo
перечисляет 16 процессоров Intel(R) Xeon(R) E7330 @ 2,40 ГГц и cat /proc/meminfo
16 Гб Рам. Другие машины в группе похожи и показывают то же поведение. Все это кодирование видео с DV на Mpeg2, иногда мы кодируем и другие виды видео. Источник этих кодов находится в сетевом рейде, который не пишет ничего, как указано в предыдущем посте, и получает скорость чтения в 300+ Мбит / с. Пункт назначения также сетевой рейдов, не так быстро, но результирующие данные MPEG намного меньше, чем входные данные.
1 ответ
Во-первых, высокопроизводительный графический процессор увеличит кодирование на порядки. Обычно высококачественная видеокарта сокращает рендеринг с часов до минут. Вам может понадобиться графический процессор 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.
Кроме того, вам нужно это для процессора
‘-threads[:stream_specifier] integer (input/output,video)’
Possible values:
‘auto’
autodetect a suitable number of threads to use