Транскодирование видеопотока в Wowza Streaming Engine на сервере с графическим ускорителем Nvidia RTX A4000 и Nvidia Quadro P4000.

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, публикуемый по кругу ) в три потока с разными параметрами качества для трансляции в Интернет с адаптивным битрейтом. Профайлы кодирования новых потоков будут следующие:

  1. 1920х1080, 5000кбитс, H.264 Main, AAC 96кбитс
  2. 1280х720, 2000кбитс, H.264 Main, AAC 96кбитс
  3. 640х360, 800кбитс, H.264 Main, AAC 96кбитс

Для кодирования новых потоков будет использоваться режим CBR ( постоянный битрейт кодирования) . Сбор тестовых данных начнем с запуска сразу 8 потоков, так как тестирование системы с меньшим количеством каналов транскодирования выходит за рамки нашего исследования. Дополнительные потоки будут запускаться последовательно, с замером следующих значений оценки производительности :

  1. Mpstat CPU utilization
  2. Nvidia-smi dmon decode utilization
  3. Nvidia-smi dmon encode utilization

Новые потоки будут добавляться до появления в логе Wowza сообщений свидетельствующих о пропуске кадров транскодером:

    Video behind filter state change. New state: SKIP1FRAME
    Video behind filter state change. New state: SKIP2FRAME
    Video behind filter state change. New state: SKIP4FRAME
    Video behind filter state change. New state: KEYFRAMESONLY

Во время тестовых прогонов нами были полученные следующие результаты :

 

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>