Доборый день.
Обнаружили 2 узких места, сильно влияющих на работу под нагрузкой.
1. Генерировалось много мусора при подсчете входящего битрейта.
2. Во время работы сервера могут быть вспышки трафика, которые связаны с неравномерностью входящего битрейта WebRTC. Эти вспышки можно частично подавлять с помощью регулировки буферов сервера и системных буферов и очередей Linux.
В результате провели нагрузочные тесты с сервером 1 x Xeon(R) CPU E5-1650 v2 @ 3.50GHz, 6 ядер, 12 потоков.
По результатам получили около 1000 подписчиков, с утилизацией канала около 800 Mbps и ровным воспроизведением.
Тюнинг WCS
1. Установка сборки 2544 с фиксами по генерации мусора.
Code:
service webcallserver update 2544
2. Настройки heap в файле wcs-core.properties
3. Настройки GC в файле wcs-core.properties
Code:
-XX:+UseConcMarkSweepGC -XX:NewSize=1024m
4. Настройки UDP буферов WCS-сервера в конфиге flashphoner.properties
Code:
rtp_receive_buffer_size=13107200
Значение не может быть больше чем указано в /proc/sys/net/core/rmem_max
Code:
rtp_send_buffer_size =13107200
Значение не может быть больше чем указано в /proc/sys/net/core/wmem_max
5. Выставить кодек VP8 в приоритет и зажать битрейт входящего потока в конфиге flashphoner.properties
Code:
webrtc_cc_min_bitrate =400000
webrtc_cc_max_bitrate =500000
codecs =opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,vp8,flv,mpv
Тюнинг Linux
Поскольку используется UDP транспорт нужно убедиться что пакеты на выходе не теряются и возможно поднять буфер командой:
Code:
ip link set txqueuelen 2000 dev eth0
Для проверки потерь под нагрузкой можно воспользоваться dropwatch утилитой:
- dropwatch -l kas
- start
Таким образом, текущие тюнинги направлены на уменьшение разброса битрейта и на увеличение буфферов / очередей для поглощения вспышек битрейта. В следующих оптимизациях у нас запланировано сглаживание таких вспышек на уровне кода или тюнингом очередей в Linux, и несколько других идей по улучшению производительности, которые планируем отработать на ветке wcs5_monitoring.