15.06.2023
Использование графического процессора (GPU) для задач обработки и преобразования видеопотока является наиболее действенным способом создания производительной системы транскодирования. Процесс транскодирования состоит из трех основных операций : декодирования видеопотока, масштабирование кадра и кодирование нового , преобразованного потока или нескольких, синхронизированных по времени, потоков с разными параметрами качества изображения. Wowza Streaming Engine позволяет использовать GPU для выполнения всех или нескольких из этих операций , с возможностью задействовать мощности нескольких GPU установленных в вычислительной системе. Поддерживаются GPU выпускаемые несколькими производителями : Intel, AMD, Advantech, Nvidia. Использование продуктов каждого из производителя имеет свои преимущества, но наиболее широкий выбор устройств предлагается Nvidia . На базе GPU Nvidia из линейки профессиональных графических ускорителей для рабочих станций Quadro/Nvidia RTX мы создадим относительно бюджетную, но производительную систему транскодирования и проведем ее испытания. Измерять производительность системы будем для стандартного тестового сценария : преобразования исходного потока 1080p H.264/AAC с битрейтом 9500кбитс (видеофайл big_buck_bunny_1080p_h264.mov, 24FPS, публикуемый по кругу ) в три потока с разными параметрами качества для трансляции в Интернет с адаптивным битрейтом. Профайлы кодирования новых потоков будут следующие:
Для кодирования новых потоков будет использоваться режим CBR ( постоянный битрейт кодирования) . Сбор тестовых данных начнем с запуска сразу 8 потоков, так как тестирование системы с меньшим количеством каналов транскодирования выходит за рамки нашего исследования. Дополнительные потоки будут запускаться последовательно, с замером следующих значений оценки производительности :
Новые потоки будут добавляться до появления в логе Wowza сообщений свидетельствующих о пропуске кадров транскодером:
Во время тестовых прогонов нами были полученные следующие результаты :
Wowza Streaming Engine 4.8.13 GPU Nvidia RTX A4000 (Driver Version: 525.85.05) , Ubuntu 18.04.6, Intel(R) Xeon(R) Gold 6150 CPU @ 2.70GHz (18cores) x 2 , RAM 64GB.
| Количество каналов | CPU% | GPU encode % | GPU decode % | Комментарий |
|
8 |
7 |
60 |
31 |
|
|
9 |
8 |
63 |
32 |
|
|
10 |
9 |
66 |
36 |
|
|
11 |
10 |
72 |
38 |
|
|
12 |
11 |
79 |
40 |
|
|
13 |
12 |
84 |
43 |
|
|
14 |
14 |
93 |
51 |
Skip frames |
Wowza Streaming Engine 4.8.23 GPU Nvidia RTX A4000 (Driver Version: 525.85.05, nvenc.preset = 2 ) , Ubuntu 18.04.6, Intel(R) Xeon(R) Gold 6150 CPU @ 2.70GHz (18cores) x 2 , RAM 64GB.
| Количество каналов | CPU% | GPU encode % | GPU decode % | Комментарий |
|
8 |
7 |
50 |
33 |
|
|
9 |
8 |
58 |
38 |
|
|
10 |
9 |
58 |
38 |
|
|
11 |
11 |
62 |
42 |
|
|
12 |
12 |
65 |
44 |
|
|
13 |
14 |
68 |
45 |
|
|
14 |
15 |
76 |
49 |
|
|
15 |
16 |
78 |
51 |
|
|
16 |
18 |
85 |
56 |
|
|
17 |
20 |
88 |
59 |
Skip frames |
Wowza Streaming Engine 4.8.13 GPU Nvidia Quadro P4000 (Driver Version: 525.85.05) , Ubuntu 18.04.6, Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz (10cores) x 2, RAM 32GB.
| Количество каналов | CPU% | GPU encode % | GPU decode % | Комментарий |
|
8 |
10 |
65 |
32 |
|
|
9 |
11 |
67 |
33 |
|
|
10 |
12 |
73 |
36 |
|
|
11 |
14 |
82 |
43 |
|
|
12 |
16 |
86 |
45 |
|
|
13 |
20 |
88 |
50 |
|
|
14 |
23 |
92 |
53 |
Skip frames |
Wowza Streaming Engine 4.8.23 GPU Nvidia Quadro P4000 (Driver Version: 525.85.05, nvenc.preset = 2 ) , Ubuntu 18.04.6, Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz (10cores) x 2, RAM 32GB.
| Количество каналов | CPU% | GPU encode % | GPU decode % | Комментарий |
|
8 |
10 |
49 |
32 |
|
|
9 |
11 |
60 |
33 |
|
|
10 |
12 |
62 |
37 |
|
|
11 |
14 |
70 |
38 |
|
|
12 |
17 |
75 |
41 |
|
|
13 |
20 |
79 |
50 |
|
|
14 |
22 |
82 |
54 |
|
|
15 |
24 |
89 |
58 |
Skip frames |
Выводы:
Результаты теста Wowza Streaming Engine 4.8.13 на серверах с картами Nvidia A4000 и Nvidia P4000 практически одинаковые, несмотря на разные поколения чипов GPU. Видимо, это обусловлено использованием в данной версии Wowza довольно старого Nvidia Video Codec SDK 10.
Тест Wowza Streaming Engine 4.8.23 показал значительное увеличение производительности для более современной модели Nvidia A4000 . Проблему со снижением производительности транскодирования с GPU присущую версиям WSE 4.8.14 - 4.8.22 мы в версии 4.8.23 не наблюдаем. Хотя упоминание о ней до сих пор продолжает быть заявлено в разделе WSE Known Issues.
Важные замечания:
Стартовать потоки необходимо с небольшой задержкой. Сделать это можно добавлением свойства в VHost.xml блок <Root>/<Properties> ( самом конце файла ):
<Property>
<Name>startupStreamsDelayTime</Name>
<Value>3000</Value>
<Type>Integer</Type>
</Property>
При старте более 12 потоков одновременно возможно возникновение проблем с производительностью транскодера, вплоть до полного зависания.
Хотя наш тест производился только с одной GPU картой, Wowza поддерживает несколько карт Nvidia в одном сервере. При использовании нескольких карт обязательно нужно настроить балансировку нагрузки транскодер между GPU картами (иначе декодирования и масштабирование будут производиться только на одной GPU и производительность системы будет разочаровывающей). Сделать это можно следующим образом, в Server.xml блок <Root>/<Properties> ( самом конце файла ) добавить:
<Property>
<Name>transcoderVideoLoadBalancerClass</Name>
<Value>com.wowza.wms.transcoder.model.TranscoderVideoLoadBalancerCUDASimple</Value>
<Type>String</Type>
</Property>