Понимание системных требований к серверу

alexanderY

Member
Из документации https://flashphoner.com/docs/wcs5/wcs_docs/html/ru/wcs-specification/
Минимальные требования к характеристикам сервера:
  • Linux x86_64
  • 512 M оперативной памяти
  • 1 GB места на диске
  • 1 ядро процессора
  • Сетевая карта
Рекомендуемые требования к рабочему серверу:
  • 16 GB оперативной памяти
  • 2 x CPU Xeon, 4-6 ядер на каждый процессор
  • 100 GB места на диске
  • SSD диск
Между минимальными и рекомендуемыми огромная пропасть. Проконсультируйте пожалуйста, чего ожидать от минимального конфига. Сколько юзеров одновременно он выдержит (на сервере в целом / в одной комнате). Речь о WebRTC-конференциях. Как должна расти производительность при апгрейде процессора, памяти постепенно.
Сейчас у нас, например, 2 GB RAM и 2 CPU на виртуалке в Digital Ocean. 4 юзера в одной комнате - загрузка процессора 20% (на сервере ничего нет, кроме Flashphoner). Нормально ли это или уже следует увеличить ресурсы?
Сегодня вечером, например, ожидается два сценария тестирования (с реальными пользователями):
  1. Три стримера, семь зрителей
  2. Пять стримеров, пять зрителей
Ожидать ли проблем?
 

Max

Administrator
Staff member
Пропасть между минмальными и рекомендуемыми требованиями возникает за счет транскодирования. А именно, когда не совпадают кодеки, например H.264 и VP8.
С транскодированием
Основная и самая большая нагрузка на CPU создается при видео транскодинге. В остальных случаях она должна быть минимальной. Если это не так, то это баг и надо разбираться.
При использовании триальных лицензий, транскодинг видно визуально - отображается логотип.
watermark.png

Наличие такого watermark, говорит, что стримеру, отправляющему этот поток, назначена транскодинг-сессия.
Чем больше разрешение отправляемого стримером видео, тем больше CPU будет потреблять транскодинг. Например транскодирование 1 потока 720p вполне может занять одно физическое ядро. Т.е. в случае использования транскодинга, нужно закладывать примерно 0.5 ядра на одного стримера (0.5 с учетом того, что разрешение не 720p, а например 640x480). И в этом случае для обслуживания 24 стримеров потребуется около 12 ядер, что как раз и есть 2xCPU Xeon 6 cores per CPU. Плюс некоторы ресурсы на раздачу потоков, которые уже не требуют транскодирования.
Без транскодирования
В этом случае нагрузка должна быть минимальной и очень медленно расти.
В общем, универсальном случае от транскодирования избавиться нельзя, т.к. возникают ситуации с несовпадающими кодеками.
Для последней сборки с настройками по-умолчанию, матрица транскодингов выглядит так:

webrtc-transcoding-matrix.jpg

Красным цветом показаны случаи транскодинга.
В вашем случае, если используете только WebRTC (Chrome Desktop, Firefox Desktop, Chrome Android ) можно попробовать оптимизировать переключением на VP8 видеокодек.
Меняем:
Code:
codecs=opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,h264,vp8,flv,mpv
на
Code:
codecs=opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,vp8,h264,flv,mpv
в файле flashphoner.properties
требует перезагрузки WCS
Т.е. можно попытаться оптимизировать только для WebRTC. В этом случае VP8-H.264 транскодинг автоматически включится для Flash.
Нормально ли это или уже следует увеличить ресурсы?
Первым делом нужно убедиться что у вас нет транскодинга по всем тестируемым направлениям.
Далее мониторить ресурсы, и при необходимости увеличить.
Про RAM
Чем больше доступной памяти, тем реже может работать сборщик мусора, тем меньше влияние на процессор и процесорные задержки, тем плавнее будут идти стримы под нагрузкой. Поэтому в требованиях указано 16 Gb RAM. С таким объемом памяти, можно выставить следующие настройки в файле
/usr/local/FlashphonerWebCallServer/bin/setenv.sh
Code:
-Xms4g -Xmx8g
Т.е. отдать 8 гигабайт под heap.
 

alexanderY

Member
Понял. Спасибо. Поэкспериментируем с codecs ещё.

Сейчас была конференция, два стримера (только звук) и три зрителя. Нагрузка CPU взлетела до 70-80% https://yadi.sk/i/XBy0v9Kd3DVJ4m
Убрали из конференции зрителей - упала до 7-12%. Все браузеры десктоп FF/Chrome. Но у одного из стримеров Mac. И еще момент, два зрителя - VMWare Windows 10 Firefox, может они не посчитались десктопом, или там с кодеками какие-то проблемы.
 

Max

Administrator
Staff member
webrtc-cpu-load.jpg

82% и 7% - это показания, размазанные по ядрам и потокам CPU.
Например, если у вас 2 ядра и Hyper-threading (2 потока на ядро), то эти данные размазываются по 4 виртуальным потокам.
Реальную загрузку 22.6% = (82+7.6+x) / 4, видно в левом верхнем углу и она показывает сколько процессорного времени система из ваших двух ядер реально проводит в вычислениях. Т.е. важно как растет эта цифра (22.6) с подключением новых зрителей / стримеров.
 

alexanderY

Member
Спасибо, понял. Сейчас тестировали с измененным codecs, нагрузка стала немного поменьше.
Вопрос по сводной таблице. А точнее, по браузерам IE, Safari. В них нет поддержки WebRTC (по умолчанию). Но с помощью плагина Temasys можно её добавить. Вы в этом направлении смотрели? А именно, какие кодеки будут использоваться с плагином?
 

Max

Administrator
Staff member
В них нет поддержки WebRTC (по умолчанию). Но с помощью плагина Temasys можно её добавить. Вы в этом направлении смотрели?
Temasys смотрели и даже добавили в сборку. Но пока не понятно сколько может занять его доводка до production и стоит ли ей заниматься. Этот плагин использует нестандартный WebRTC Adapter и привносит свои баги в работу с основными WebRTC-браузерами, где у нас уже все отлажено. Поэтому не получается просто бросить плагин в сборку и заставить работать с браузерами IE и Safari. Это дает регрессии на остальные браузеры. Поэтому дальнейший статус полноценной поддержки Temasys пока не определен.
какие кодеки будут использоваться с плагином?
Cудя по описанию, будет VP8.
 

alexanderY

Member
Недавно сменили сервер. 4 ядра, 4 гб RAM. Географически переехали в Москву, если это имеет значение (был Амстердам).
Вчера был тест, около часа общались. Одновременно в комнате находилось от 6 до 10 человек. Из них 2-3 стримера. Если интересно по нагрузке посмотреть, я сделал лог atop'ом: https://yadi.sk/d/BkWI5U263E6aUd
Читать удобно командой "atop -r atop_20170214 -b 18:55". 19:00 время старта мероприятия, но люди начали чуть раньше подтягиваться, так что можно смотреть возрастающую нагрузку. В целом у меня впечатления хорошие по нагрузке CPU (10-12% держалась), но свободной памяти мало, да. В связи с этим вопросы:
  1. Вы писали про настройку в файле /usr/local/FlashphonerWebCallServer/bin/setenv.sh, актуально ли нам это на новом сервере?
  2. Я не настраивал SWAP-файл, может ли улучшить/ухудшить производительность, если его создать?
И дополнительно. У большинства юзеров в принципе всё работает. Но у некоторых на ровном месте не работает стрим. Или работает, но недолго, секунд 10-20. Вчера, например, был юзер с хорошим каналом, у него Мак, везде видеосвязь работает, но тут не заводилось. С винды на том же канале — всё ок. Но бывали юзеры и на винде, когда ни в какую.
 

Max

Administrator
Staff member
Code:
Читать удобно командой "atop -r atop_20170214 -b 18:55".
Установил последнюю версию. Похоже она этот формат не читает.
Code:
# atop -r atop_20170214 -b 18:55
raw file atop_20170214 has incompatible format
(created by version 1.26 - current version 1.27)
trying to activate atop-1.26....
activation of atop-1.26 failed!
Вы писали про настройку в файле /usr/local/FlashphonerWebCallServer/bin/setenv.sh, актуально ли нам это на новом сервере?
Да, можно например выставить такие параметры
Code:
-Xmx3g -Xms1g
но свободной памяти мало
Свободная память оседает в кеше.
На этом примере свободная память это free (568700) + buff/cache (728184). Т.е. общий объем свободной памяти 1.2g.
Возможно у вас на самом деле остается больше.
memory-webrtc.jpg

Я не настраивал SWAP-файл, может ли улучшить/ухудшить производительность, если его создать?
С использованием SWAP не тестировали, но кажется что это может ухудшить работу, особенно если память, используемая сервером попадет в SWAP.
Но у некоторых на ровном месте не работает стрим. Или работает, но недолго, секунд 10-20.
Здесь нужно запускать какой-нибудь стандратный пример, например Two Way Streaming и понимать что происходит у юзера и на сервере.
В папку /usr/local/FlashphonerWebCallServer/logs/client_logs пишутся логи каждого отдельного подключения.
Мы планируем также сделать диагностическую страницу, на которой можно было бы запустить диагностику и получить полный report с логами браузера и сервера и возможно скриншотами. Если удастся в ближайшее время ее реализовать, сообщим.
 

alexanderY

Member
Спасибо.
Вы правы, более 2 гб памяти в кэше.
Странно конечно получилось с atop, но у меня действительно версия 1.26, ставил вчера из репозитория. Ладно, похоже, что это не особо важно сейчас. По ресурсам у меня вопросов больше нет, на данный момент.
 
Top