Транскодирование видео — очень ресурсоемкая задача. Иногда выполнять ее за счет центрального процессора довольно дорого и, чтобы сэкономить ресурсы, используют графические ускорители (GPU).
Это особенно актуально в интернет-вещании, когда на один канал приходится множество профилей. В этой статье мы рассмотрим основные преимущества и недостатки этих решений на примере технологии QuickSync от Intel и NVENC от NVIDIA. Формально являясь конкурентами в сфере кодирования, компании сотрудничают в производстве новых чипов.
Для начала определимся с графикой, которую будем сравнивать. Рассмотрим только стабильные решения для работы в режиме 24/7 — в телевещании иначе нельзя. Со стороны Intel возьмем процессор последнего поколения Intel Xeon E-2246G (семейство Coffee Lake) со встроенной графикой Intel UHD Graphics P630. Со стороны NVIDIA выберем Quadro RTX 4000 — серверный аналог потребительской видеокарты GeForce RTX 2070 Super. В отличие от последней, она не имеет официальных ограничений в одновременной обработке больше трех потоков. Это ограничение можно снять, установив неофициальный патч, но мы все же рассмотрим только проверенные и официальные решения. Более ранние версии видеокарт мы отмели сразу: они проигрывают при работе с кодеком HEVC, так как не имеют возможности кодирования B-кадров.
Теперь подберем платформы с выбранными графическими решениями.
МАКСИМАЛЬНОЕ КОЛИЧЕСТВО ТРАНСКОДИРУЕМЫХ КАНАЛОВ
Для начала проведем нагрузочный тест на максимально возможное количество транскодируемых каналов (режим fastest) на одном сервере. В этом сравнении решение NVIDIA оказалось в два раза производительнее разработки Intel при транскодировании средствами кодека AVC и практически не уступило в кодировании средствами HEVC (см. таблицу 2).
ЦЕНА ЗА КАНАЛ С УЧЕТОМ ЗАТРАТ НА СЕРВЕР
Теперь мы знаем максимально возможное количество каналов разрешения Full HD (FHD, 1920×1080 точек) на один сервер со встроенной графикой Intel и видеокартой NVIDIA, а значит, сможем вычислить цену одного канала FHD.
Получается, что для AVC в цене разницы нет (см. таблицу 3). В случае c HEVC решение NVIDIA гораздо дороже по цене за канал на платформу, если рассчитывать максимальное количество каналов (то есть использовать самые быстрые алгоритмы кодирования, жертвуя качеством).
На этом моменте мы прервем вычисления и перейдем к вопросу о качестве, так как гораздо честнее сравнить одинаково приемлемое качество, а не получаемое в быстрых режимах.
КАЧЕСТВО ВЫХОДНОГО ПОТОКА ПО СРАВНЕНИЮ С ИСХОДНЫМ
Рассмотрим качество сжатия видео, ведь нет никакого смысла в количестве каналов, если их невозможно смотреть. Ниже представлен график сравнения качества по метрике PSNR (Peak Signal-to-Noise Ratio — пиковое отношение сигнала к шуму, — прим. ред.): Intel AVC с исходным потоком (синяя линия) и NVIDIA AVC с исходным потоком (красная линия).
Теперь давайте сравним с помощью метрики VMAF (Video Multimethod Assessment Fusion — субъективная мультиметодная оценка видео, разработана при участии Netflix, — прим. ред.).
В следующем графике сравним Intel HEVC с исходным потоком (синяя линия) и NVIDIA HEVC с исходным потоком (красная линия).
Наше сравнение было не совсем корректным, так как максимальное количество кодируемых каналов NVIDIA равно 14, и их качество почти на 2 дБ выше, чем у 13 каналов на Intel. Поэтому мы провели дополнительные измерения, и при максимально возможном качестве на NVIDIA и на Intel в режиме GAcc (GPU Accelerated — когда кодирование происходит не только средствами графического ускорителя, но и центрального процессора) получили следующий результат. Intel HEVC GAcc с исходным потоком по сравнению с NVIDIA HEVC с исходным потоком:
Качество кодирования практически совпало, но производительность обеих систем упала в разы. Теперь NVIDIA кодировала всего четыре канала FHD HEVC, а Intel — всего 2. Пересчитаем цену одного канала исходя из новых данных: 114,2 тыс. рублей/2 = 57,1 тыс. рублей за один транскодируемый HEVC-канал на Intel; 228,5 тыс. рублей/4 = 57,1 тыс. рублей за один транскодируемый HEVC-канал на Nvidia. Таким образом, мы получили то же соотношение по цене за канал, что и в ситуации с кодеком AVC.
ЭНЕРГОПОТРЕБЛЕНИЕ ПРИ РАВНОЙ НАГРУЗКЕ
Рассмотрим еще один важный момент при обслуживании рабочей системы — потребляемая мощность платформы. Из наших тестов при максимальной нагрузке платформ транскодированием мы получили следующие значения: потребление платформы с NVIDIA около 200 Вт, потребление платформы с Intel около 75 Вт. Поскольку на платформе Intel каналов в два раза меньше, умножим значение на 2 — итого около 150 Вт. Получается, что при той же работе платформа NVIDIA потребляет на 50 Вт больше.
ЗАНИМАЕМОЕ МЕСТО В СЕРВЕРНОЙ СТОЙКЕ
При больших объемах транскодируемых каналов часто возникает вопрос размещения серверов. Для решения Intel предусмотрены специальные платформы-лезвия, где в одном сервере формфактора 3 U (юнита) умещается от 8 до 14 лезвий (полноценных серверов измененного формфактора). В одной 3U-платформе можно транскодировать до 168 каналов FHD с кодеком AVC. Если же использовать не сервер-лезвие, а обычный стоечный сервер, то на такое количество каналов понадобится высота 14 U.
Решение NVIDIA в этом плане немного сложнее: сами видеокарты занимают дополнительное место в платформе. Можно размещать по одной видеокарте в 1U-сервер, тогда занимаемое место на тоже количество каналов будет составлять 7 U. Можно на одной платформе разместить несколько видеокарт, что позволяет сэкономить на цене платформы, но выиграть место вряд ли получится: чтобы разместить 2-3 графических ускорителя, потребуется платформа 3 U, а то и 4 U.
РЕШЕНИЕ СПЕЦИФИЧЕСКИХ ЗАДАЧ
Помимо транскодирования видео, существуют такие задачи, как декодирование видео для визуального мониторинга и кодирование с карты захвата SDI/NDI. В таких случаях решение Intel подходит лучше: эти задачи зачастую не объемные, а значит, и использовать все ресурсы NVIDIA не получится. Даже если нужно кодировать SDI, скорее всего, это будет несколько каналов — сложно найти проект, где требуется кодировать до 24 сигналов. Кроме того, в 1U-платформу довольно сложно уместить SDI-карту захвата с интерфейсом PCI и видеокарту с той же шиной — нужно выбирать либо платформу с другой высотой, либо с достаточным местом для двух карт, что встречается довольно редко.
Есть и техническое ограничение. Процесс декодирования менее затратный, чем транскодирование, и в теории на решении NVIDIA можно визуально мониторить больше 24 каналов FHD AVC. На самом деле количество каналов ограничено 8, так как невозможно передать больший объем декодированного (несжатого) видео через шину PCI. В случае же с решением Intel такой проблемы нет, так как графика встроена в процессор.
Справедливости ради отметим, что решение NVIDIA более привлекательно для транскодирования контента сверхвысокого (UHD) разрешения, поскольку на одной видеокарте можно развернуть многопрофильное транскодирование. Встроенный графический ускоритель Intel не может транскодировать UHD-контент в несколько профилей на одном графическом ядре, и приходится включать систему распределения потока между серверами — такое решение называется распределенным транскодированием.
Для выбора важно, как реализовано использование инструментов, предлагаемых компаниями Intel и NVIDIA, какие дополнительные функции сможет выполнять программно-аппаратный комплекс
ВЫВОДЫ
После сравнения частного кейса можно выделить основные преимущества обоих решений. Решение Intel занимает меньше серверной высоты за счет компактности серверов-лезвий, имеет меньшее энергопотребление, оптимально подходит для декодирования и кодирования видео. Решение NVIDIA обеспечивает более высокоплотное кодирование на одно графическое ядро, позволяет сэкономить бюджет, если подобрать соответствующую видеокарту и разместить нескольких видеокарт в платформе.
Сравнив графические решения по всем интересующим нас параметрам, можно сделать вывод, что они близки по характеристикам и сложно однозначно выделить фаворита. Решающим фактором при выборе аппаратного комплекса для транскодирования может стать поставщик программного обеспечения. Для выбора важно, как реализовано использование инструментов, предлагаемых компаниями Intel и NVIDIA, какие дополнительные функции сможет выполнять программно-аппаратный комплекс (ПАК). Играют роль и такие факторы, как цена за ПАК, функции ПО, гарантия, успешные реализованные проекты, возможность доработки решения под конкретную задачу, возможность обеспечения уровня качества обслуживания, компетенции сопровождающих инженеров и т. д. Например, зачастую ПАК с NVIDIA включает в себя не программную реализацию инструментов, предоставленную этим разработчиком, а встроенный в ПО тестовый образец или же открытую реализацию. С одной стороны, это неплохо, с другой — в случае с проектом open source невозможно добавить функции или исправить выявленный баг, поскольку техническая поддержка у таких реализаций отсутствует.