14.06.2022

Многопоточный энкодинг: переплатить вдвое или уйти на «встройку»?

server one

Проведенный нами тест NVIDIA A4000 почти подтвердил, что она способна вытянуть на энкодинге до 16 независимых видеопотоков FullHD в формате H264. Удастся ли кратно увеличить производительность с профессиональной видеокартой, которая стоит в два раза дороже? Попробуем проверить.

HOSTKEY
Арендуйте выделенные и виртуальные GPU серверы с профессиональными графическими картами NVIDIA RTX A5000 / A4000 в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

В нашей второй статье про энкодинг (с тестом А4000) мы упустили, что видеопоток бывает и большего разрешения, поэтому стоит протестировать энкодинг файлов в формате 4К. Для полноты картины мы также сравним энкодинг на решениях от NVIDIA с встроенным GPU от Intel. Некоторые профессионалы полагают, будто достаточно собрать тот же FFmpeg с включенным QuickSync и внешняя видеокарта станет не нужна. Проверим и это утверждение.

Мы не будем подробно расписывать процесс тестирования для видеокарт от NVIDIA и зачем нам FFmpeg, поскольку информация об этом есть в предыдущих статьях (первая и вторая части). Лучше сосредоточимся на новых результатах и полезных лайфхаках.

A4000 vs A5000

Используем тот же самый тестовый стенд из имеющихся в наличии серверов HOSTKEY, но установим в него видеокарту NVIDIA A5000 с большим количеством блоков энкодинга, 24 ГБ видеопамяти и более высоким энергопотреблением.

NVIDIA A5000

Для начала проверим ее работу на количестве потоков, оказавшемся предельным для А4000 по результатам предыдущего теста:

14 потоков

gpu pwr gtemp mtemp sm mem enc dec mclk pclk fb bar1
Idx W C C % % % % MHz MHz MB MB
0 97 47 - 92 3 100 0 7600 1920 3502 33
gpu Idx 0
pwr W 97
gtemp C 47
mtemp C -
sm % 92
mem % 3
enc % 100
dec % 0
mclk MHz 7600
pclk MHz 1920
fb MB 3502
bar1 MB 33

frame=1015 fps=31 q=28.0 Lsize= 9056kB time=00:00:33.80 bitrate=2194.8kbits/s speed=1.02x

Удивительно! Мы получили сравнимые с результатом A4000 цифры. Несмотря на большую частоту работы чипа, больший объем используемой видеопамяти и большее энергопотребление, A5000 осилила энкодинг только 14 потоков и спасовала на пятнадцатом. Это фиаско еще раз доказывает, что профессиональные видеоадаптеры предназначены для других целей.

Включаем 4K

Теперь попробуем запустить трансляцию потока с разрешением 3840x2160 (оно же 4K), благо есть и такая версия файла про кролика. Энкодинг силами только центрального процессора захлебнулся уже на одном потоке, когда объем данных кратно увеличился:

frame= 2902 fps=27 q=29.0 size=104448kB time=00:01:33.56 bitrate=9144.7kbits/s dup=436 drop=0 speed=0.878x

Каковы возможности GPU (помним, результаты у A4000 и A5000 сравнимы)? Это 3 потока.

gpu pwr gtemp mtemp sm mem enc dec mclk pclk fb bar1
Idx W C C % % % % MHz MHz MB MB
0 96 46 - 100 3 96 0 7600 1920 1112 9
gpu Idx 0
pwr W 96
gtemp C 46
mtemp C -
sm % 100
mem % 3
enc % 96
dec % 0
mclk MHz 7600
pclk MHz 1920
fb MB 1112
bar1 MB 9

Как видим, по потребляемой мощности и загрузке блоков энкодинга видеочип работает явно не в режиме повышенного комфорта, хотя при этом расходуется лишь около 1 ГБ видеопамяти.

Вывод FFmpeg подтверждает, что видеокарта справляется:

frame= 1465 fps=33 q=35.0 Lsize=12584kB time=00:00:48.80 bitrate=2112.4kbits/s dup=159 drop=0 speed=1.09x

А вот 4 потока адаптер уже не переваривает. Хотя загрузка железа остается примерно на тех же значениях, начинаются просадки по кадрам:

frame= 614 fps= 26 q=35.0 Lsize=4978kB time=00:00:20.43 bitrate=1995.6kbits/s speed=0.858x

Сборка FFmpeg с поддержкой QuickSync

Если верить заявлению компании-разработчика, технология QuickSync должна «используя специальные возможности обработки мультимедийных данных графических технологий Intel® для ускорения декодирования и кодирования, позволить процессору параллельно выполнять другие задачи и повышая быстродействие системы».

Для тестов понадобился подходящий процессор Intel (мы нашли машину с Core i9-9900K CPU @ 3.60GHz) и собранная с поддержкой Quick Sync утилита FFmpeg. С первым проблем не возникло (достаточно чипа старше 6-го поколения и наличия в нем GPU, что несложно проверить), но сборка FFmpeg под тестовую Ubuntu 20.04 вызвала стойкие ассоциации с практическим освоением Камасутры. Чтобы не заставлять вас тратить драгоценное время, опишем, как нам удалось решить проблему.

Поскольку пакеты в репозиториях сломаны, первым делом нужно собрать и установить в систему библиотеки gmmlib и libva, а также последние версии Intel media driver и Media SDK. Для этого в домашней директории создадим папку GIT, зайдем в нее и выполним последовательно следующие команды (если будет не хватать каких-то зависимостей, установим их из репозитория; мы рекомендуем сделать sudo apt install autoconf automake build-essential cmake pkg-config):

git clone https://github.com/intel/gmmlib.git && cd gmmlib 
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu ..
make -j8
sudo make install 

git clone https://github.com/intel/libva.git && cd libva
./autogen.sh --prefix=/usr --libdir=/usr/lib/x86_64-linux-gnu 
make -j8
sudo make install 

git clone https://github.com/intel/media-driver.git && cd media-driver
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu ..
make -j8
sudo make install 

git clone https://github.com/Intel-Media-SDK/MediaSDK.git && cd MediaSDK
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib/x86_64-linux-gnu ..
make -j8
sudo make install

Затем нужно собрать FFmpeg с помощью нескольких магических команд:

git clone https://github.com/ffmpeg/ffmpeg
cd ffmpeg
./configure --enable-libmfx --enable-vaapi --enable-opencl --enable-libvorbis --enable-libvpx --enable-libdrm --enable-gpl --cpu=native --enable-libfdk-aac --enable-libx264 --enable-libx265 --extra-libs=-lpthread --enable-nonfree
make -j8
sudo make install

Стоит убедиться, что у нас появилась поддержка Quick Sync:

ffmpeg -decoders|grep qsv

Вывод команды должен быть примерно таким:

V....D av1_qsv              AV1 video (Intel Quick Sync Video acceleration) (codec av1) 
V....D h264_qsv             H264 video (Intel Quick Sync Video acceleration) (codec h264) 
V....D hevc_qsv             HEVC video (Intel Quick Sync Video acceleration) (codec hevc) 
V....D mjpeg_qsv            MJPEG video (Intel Quick Sync Video acceleration) (codec mjpeg) 
V....D mpeg2_qsv            MPEG2VIDEO video (Intel Quick Sync Video acceleration) (codec mpeg2video) 
V....D vc1_qsv              VC1 video (Intel Quick Sync Video acceleration) (codec vc1) 
V....D vp8_qsv              VP8 video (Intel Quick Sync Video acceleration) (codec vp8) 
V....D vp9_qsv              VP9 video (Intel Quick Sync Video acceleration) (codec vp9) 

Ура! Все готово к тестам.

Тестирование энкодинга с Quick Sync

Для начала проверим, как справляется с энкодингом видео в FullHD процессор без Quick Sync: он выдерживает максимум 4 потока, при которых все ядра загружены под 100%

frame= 1461 fps= 33 q=29.0 size=24064kB time=00:00:46.33 bitrate=4254.7kbits/s speed=1.05x

Пятый поток процессор уже не осиливает, поэтому можно смело приступать к тесту с Quick Sync. В скрипте из предыдущей статьи для этого нужно будет заменить энкодер на h264_qsv, и он примет следующий вид (подробнее об использовании QuickSync с FFmpeg можно почитать тут):

#!/bin/bash
for (( i=0; i<$1; i++ )) do
	ffmpeg -i http://78.0.75.110:5454/ -an -vcodec h264_qsv -y Output-File-$i.mp4 &
done

Сразу делаем проверку на 6 потоках (+2 к тесту на чистом CPU):

frame=291 fps=55 q=29.0 size=1280kB time=00:00:10.13 bitrate=1034.8kbits/s dup=2 drop=0 speed=1.93x

Разница очевидна: загрузка процессора не превышает 50%, а имеющийся запас вычислительных ресурсов позволяет прогнозировать 11 – 12 итоговых потоков.

Ставим 11 потоков:

frame=157 fps=30 q=38.0 Lsize=628kB time=00:00:05.69 bitrate=903.0kbits/s dup=2 drop=0 speed=1.09x

Загрузка процессора возрастает незначительно, но GPU уже подходит к пределу возможностей. Двенадцатый поток роняет битрейт и скорость обработки до 24 – 28 кадров.

Теперь проверяем потоки в 4K. В отличие от AMD, наш процессор Intel спокойно обрабатывает один поток в таком разрешении и без аппаратного ускорения:

frame=655 fps=31 q=-1.0 Lsize=30637kB time=00:00:21.73 bitrate=11547.9kbits/s speed=1.03x

На большее он, увы, не способен. С включенным Quick Sync тестовый компьютер смог вытянуть три потока с разрешением 4K:

frame= 509 fps=31 q=33.0 Lsize=8010kB time=00:00:17.42 bitrate=3764.7kbits/s dup=2 drop=0 speed=1.07x

Спасовал он только на четвертом, но столько же у нас выдержала и видеокарта Nvidia A5000.

Недостатки у решения, увы, тоже есть. При использовании модуля BMC (к примеру, при управлении машиной через IPMI), вы не получите доступ ко всем возможностям аппаратного ускорения, даже если GPU процессора будет определяться в системе. Придется выбирать между удобством удаленного управления или получением всех плюсов от использования Quick Sync.

Итоги

Выводы вы можете сделать самостоятельно. Мы лишь отметим, что для энкодинга видео разница в мощности видеокарт не всегда определяется их ценой, а для решения некоторых задач стоит обратить внимание на специализированные технологии внутри центральных процессоров. Также мы использовали для тестов H264, но кодеки HEVC (H265) или VP1 в теории должны дать лучшие результаты, особенно на разрешениях 4K. Если вы самостоятельно проведете подобные тесты с первым (VP1 пока что представлен аппаратно и массово только для декодинга), поделитесь результатами в комментариях.

Арендуйте выделенные и виртуальные GPU серверы с профессиональными графическими картами NVIDIA RTX A5000 / A4000 в надежных дата-центрах класса TIER III в Москве и Нидерландах. Принимаем оплату за услуги HOSTKEY в Нидерландах в рублях на счет российской компании. Оплата с помощью банковских карт, в том числе и картой МИР, банковского перевода и электронных денег.

Другие статьи

30.03.2023

Действительно ли DAPC выгоднее BIOS default performance?

Одним из способов повышения производительности является настройка параметров BIOS. Мы ответили на вопрос, действительно ли DAPC выгоднее BIOS default performance.

14.03.2023

Проверка работы сервера Proxmox Backup

Как проверить стабильность работы сервера Proxmox Backup и избежать потери времени.

10.03.2023

Proxmox-репликация

Как быстро и просто настроить Proxmox-репликацию и что нужно учитывать в процессе развертывания.

01.03.2023

Ansible — стандартизация оформления playbook

Как просто и удобно организовать работу с Ansible playbook и помочь системным администраторам управлять инфраструктурой компании.

21.02.2023

Создание сервиса Single sign-on с напоминаниями для пользователей

Как сделать простую и надежную систему смены пароля и помочь пользователям не забыть вовремя поменять свой пароль.

HOSTKEY Выделенные серверы в Европе, России и США Готовые выделенные серверы и серверы индивидуальных конфигураций на базе процессоров AMD, Intel, карт GPU, Бесплатной защитой от DDoS -атак и безлимитный соединением на скорости 1 Гбит/с 30
4.3 48 48
Upload