Как я могу оптимизировать Linux для кодирования большого количества видео или набора тех же интенсивных задач процессора?

365
markjwill

У меня есть набор из 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/meminfo16 Гбайт памяти . Другие машины в группе похожи и показывают то же поведение. Все это кодирование видео с DV на Mpeg2, иногда мы кодируем и другие виды видео. Источник этих кодов находится в сетевом рейде, который ничего не пишет, как указано в предыдущем посте, и получает скорость чтения в 300+ Мбит / с. Пункт назначения также сетевой рейдов, не так быстро, но результирующие данные MPEG намного меньше, чем входные данные.

0
Ваша система использует более 90% ЦП в вашем верхнем примере выше. `9.6 id` = 9.6% бездействия. yoonix 8 лет назад 0
@yoonix вау, я чувствую себя немного глупо после того, как смотрю на большую часть дня ... Наверное, мой реальный вопрос, возможно, должен заключаться в том, почему мое "sy" (системное) использование составляет 36% ... Я должен рассмотреть это и, возможно, задать новый вопрос. Спасибо markjwill 8 лет назад 0
Я предполагаю, что это, вероятно, из-за (или усугубил) запуска очень много копий Я никогда не использовал avconv, но быстрый взгляд на документацию заставляет меня думать, что опция `-threads` поможет решить вашу первоначальную проблему. Если вы действительно хотите отследить, каков системный процессор [это сообщение в блоге] (https://newspaint.wordpress.com/2013/07/24/how-to-diagnose-high-sys-cpu-on-linux/ ), возможно, поможет вам начать. yoonix 8 лет назад 0
Я подозреваю, что в какой-то момент ваше объединенное использование диска и сети * станет * узким местом. Попробуйте удалить пару задач и проверьте, значительно ли уменьшается загрузка ЦП. jcoppens 8 лет назад 0

1 ответ на вопрос

0
cybernard

Во-первых, высокопроизводительный 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.  

Кроме того, вам нужно это для процессора

‘-threads[:stream_specifier] integer (input/output,video)’  Possible values:  ‘auto’  autodetect a suitable number of threads to use  

Похожие вопросы